diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..31c995a --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +sphinx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2d2fb19 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,51 @@ +FROM ubuntu:12.04 +MAINTAINER Mark mark@douwantech.com +#ADD ./sources.list /etc/apt/sources.list + +RUN apt-get update +#RUN apt-get upgrade -y + +RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ + build-essential \ + make \ + gcc \ + g++ \ + automake \ + libtool \ + mysql-client \ + libmysqlclient15-dev \ + libxml2-dev \ + libexpat1-dev \ + cron + +RUN mkdir -p /usr/local/src/coreseek +ADD ./coreseek /usr/local/src/coreseek +RUN chmod 755 -R /usr/local/src/coreseek + +WORKDIR /usr/local/src/coreseek/mmseg-3.2.14 +RUN ./bootstrap +RUN ./configure +RUN make && make install + +WORKDIR /usr/local/src/coreseek/csft-4.1 +RUN ./buildconf.sh +RUN ./configure --without-unixodbc --with-mmseg --with-mysql +RUN make && make install + +ADD ./cron/sphinx /etc/cron.hourly/sphinx + +VOLUME ['/usr/local/etc/sphinx', '/var/log/sphinx'] + +RUN ln -s /usr/local/etc/sphinx/sphinx.conf /usr/local/etc/csft.conf +RUN mkdir -p /var/sphinx/log/ +RUN mkdir -p /var/sphinx/data/ + +WORKDIR / + +EXPOSE 9312 + + +ADD ./entrypoint.sh / +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/README.md b/README.md index c3fcf67..dcba5ed 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,78 @@ # Dockfile-Coreseek -sphinx chinese full text index + +Coreseek 是一款中文全文检索/搜索软件,以 GPLv2 许可协议开源发布,基于 Sphinx 研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景,用户可以免费下载使用 + +Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器。它原本是 dotCloud 启动的一个业余项目,并在前些时候开源了。它吸引了大量的关注和讨论,导致 dotCloud 把它重命名到 Docker Inc。它最初是用 Go 语言编写的,它就相当于是加在 LXC(LinuX Containers,linux 容器)上的管道,允许开发者在更高层次的概念上工作。 + +- +#需要创建个配置文件: `/path/sphinx/sphinx.conf` + +``` +################# sphinx config ####################### +source search +{ + type = mysql + sql_host = dbhost + sql_user = dbname + sql_pass = dbpass + sql_db = db + sql_port = 3306 + sql_query_pre = SET NAMES utf8 + sql_query_pre = SET SESSION query_cache_type=OFF + sql_query = SELECT *,CASE WHEN `kind` = 'News' THEN 2 WHEN `kind` = 'Activity' THEN 1 WHEN `kind` = 'Service' THEN 0 END AS kind2 FROM searches + sql_attr_uint = item_id + sql_attr_uint = kind2 + sql_attr_timestamp = updated_at + sql_attr_timestamp = created_at + sql_ranged_throttle = 0 +} + +index search +{ + source = search + path = /var/sphinx/data/search + docinfo = extern + mlock = 0 + preopen = 1 + min_word_len = 1 + charset_type = zh_cn.utf-8 + charset_dictpath = /usr/local/etc/ + min_prefix_len = 0 + min_infix_len = 1 + ngram_len = 0 +} + +indexer +{ + mem_limit = 1024M + write_buffer = 4M +} + +searchd +{ + listen = 0.0.0.0:9312 + log = /var/sphinx/log/sphinx.log + query_log = /var/sphinx/log/query.log + read_timeout = 2 + max_children = 0 + pid_file = /var/run/sphinx.pid + max_matches = 100000 + seamless_rotate = 1 + preopen_indexes = 0 + unlink_old = 1 + read_buffer = 8M + compat_sphinxql_magics = 0 +} +# EOF + + +``` + +#启动 `docker` + +``` + +docker run --name sphinx -v /root/sphinx/sphinx:/usr/local/etc/sphinx -p 9312:9312 -i registry.cn-hangzhou.aliyuncs.com/ror/coreseek:latest + +``` + diff --git a/coreseek/README.txt b/coreseek/README.txt new file mode 100755 index 0000000..c58e8f3 --- /dev/null +++ b/coreseek/README.txt @@ -0,0 +1,67 @@ +最新使用文档,请查看:http://www.coreseek.cn/products/products-install/ + +目录说明: +csft-x.y.z:coreseek源代码 +mmseg-i.j.k:mmseg源代码 +testpack:测试配置和数据包 + +testpack测试说明: +目录说明: +api:api接口和测试脚本 +etc:配置文件 +etc/pysource:python数据源脚本 +var:运行数据 +var/data:索引文件 +var/log:搜索日志 +var/test:测试源数据 + +配置1: + 测试对象:xml数据源,中文分词与搜索 + 对应配置:etc/csft.conf + 测试数据:var/test/test.xml + PHP程序:api/test_coreseek.php + 在线说明:http://www.coreseek.cn/products/products-install/install_on_bsd_linux/ + +配置2: + 测试对象:xml数据源,单字切分与搜索 + 对应配置:etc/csft_cjk.conf + 测试数据:var/test/test.xml + PHP程序:api/test_coreseek.php + 在线说明:http://www.coreseek.cn/products-install/ngram_len_cjk/ + +配置3: + 测试对象:mysql数据源,中文分词与搜索 + 对应配置:etc/csft_mysql.conf + 测试数据:var/test/documents.sql + PHP程序:api/test_coreseek.php + 测试说明:请先将测试数据导入数据库,并设置好配置文件中的MySQL用户密码数据库 + 在线说明:http://www.coreseek.cn/products-install/mysql/ + +配置4: + 测试对象:python数据源,中文分词与搜索 + 对应配置:etc/csft_demo_python.conf + 数据脚本:etc/pysource/csft_demo/__init__.py + PHP程序:api/test_coreseek.php + 测试说明:请先安装Python 2.6 (x86) + 在线说明:http://www.coreseek.cn/products-install/python/ + +配置5: + 测试对象:python+mssql数据源,中文分词与搜索 + 对应配置:etc/csft_demo_python_pymssql.conf + 数据脚本:etc/pysource/csft_demo_pymssql/__init__.py + PHP程序:api/test_coreseek.php + 测试说明:请先安装Python 2.6 (x86)、pymssql(py2.6) + 在线说明:http://www.coreseek.cn/products-install/python/ + +coreseek-4.y.z测试: +配置6: + 测试对象:RT实时索引,中文分词与搜索 + 对应配置:etc/csft_rtindex.conf + PHP程序:api/test_coreseek_rtindex.php + 在线说明:http://www.coreseek.cn/products-install/rt-indexes/ + +配置7: + 测试对象:RT实时索引,单字切分与搜索 + 对应配置:etc/csft_rtindex_cjk.conf + PHP程序:api/test_coreseek_rtindex.php + 在线说明:http://www.coreseek.cn/products-install/rt-indexes/ diff --git a/coreseek/csft-4.1/COPYING b/coreseek/csft-4.1/COPYING new file mode 100755 index 0000000..02be4c6 --- /dev/null +++ b/coreseek/csft-4.1/COPYING @@ -0,0 +1,344 @@ + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 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. + + 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 + + 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) 19yy + + This program is free software; you can 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) 19yy 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/coreseek/csft-4.1/INSTALL b/coreseek/csft-4.1/INSTALL new file mode 100755 index 0000000..80ea190 --- /dev/null +++ b/coreseek/csft-4.1/INSTALL @@ -0,0 +1 @@ +Please refer to <> section in doc/sphinx.txt or doc/sphinx.html. diff --git a/coreseek/csft-4.1/Makefile b/coreseek/csft-4.1/Makefile new file mode 100644 index 0000000..e5713d5 --- /dev/null +++ b/coreseek/csft-4.1/Makefile @@ -0,0 +1,788 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/sphinx +pkgincludedir = $(includedir)/sphinx +pkglibdir = $(libdir)/sphinx +pkglibexecdir = $(libexecdir)/sphinx +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = . +DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/sphinx-min.conf.in \ + $(srcdir)/sphinx.conf.in $(top_srcdir)/config/config.h.in \ + $(top_srcdir)/configure COPYING INSTALL config/depcomp \ + config/install-sh config/missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config/config.h +CONFIG_CLEAN_FILES = sphinx.conf.dist sphinx-min.conf.dist +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(sysconfdir)" +DATA = $(sysconf_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = src test doc libstemmer_c +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run aclocal-1.11 +AMTAR = $${TAR-tar} +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run automake-1.11 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG +CONFDIR = /usr/local/coreseek/var +CPP = gcc -E +CPPFLAGS = -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ +CXX = g++ +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBOBJS = +LIBRT = -lrt +LIBS = -ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +MMSEG_CFLAGS = -I/usr/local/mmseg3/include/mmseg/ +MMSEG_LIBS = -L/usr/local/mmseg3/lib/ -lmmseg +MYSQL_CFLAGS = -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g +MYSQL_LIBS = -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl +OBJEXT = o +PACKAGE = sphinx +PACKAGE_BUGREPORT = shodan(at)shodan.ru +PACKAGE_NAME = sphinx +PACKAGE_STRING = sphinx 1.11 +PACKAGE_TARNAME = sphinx +PACKAGE_URL = +PACKAGE_VERSION = 1.11 +PATH_SEPARATOR = : +PGSQL_CFLAGS = +PGSQL_LIBS = +PYTHON = /usr/bin/python +PYTHON_CPPFLAGS = +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_LIBS = +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.7 +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/bash +STRIP = +VERSION = 1.11 +abs_builddir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +abs_srcdir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +ac_ct_CC = gcc +ac_ct_CXX = g++ +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build_alias = +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host_alias = +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pgconfig = +pkgpyexecdir = ${pyexecdir}/sphinx +pkgpythondir = ${pythondir}/sphinx +prefix = /usr/local/coreseek +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.7/site-packages +pythondir = ${prefix}/lib/python2.7/site-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . +SUBDIRS = src test doc +#SUBDIRS = libstemmer_c src test doc +EXTRA_DIST = api storage sphinx.conf.in sphinx-min.conf.in example.sql +sysconf_DATA = sphinx.conf.dist sphinx-min.conf.dist example.sql +all: all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: # $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config/config.h: config/stamp-h1 + @if test ! -f $@; then rm -f config/stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) config/stamp-h1; else :; fi + +config/stamp-h1: $(top_srcdir)/config/config.h.in $(top_builddir)/config.status + @rm -f config/stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config/config.h +$(top_srcdir)/config/config.h.in: # $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f config/stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config/config.h config/stamp-h1 +sphinx.conf.dist: $(top_builddir)/config.status $(srcdir)/sphinx.conf.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sphinx-min.conf.dist: $(top_builddir)/config.status $(srcdir)/sphinx-min.conf.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-sysconfDATA: $(sysconf_DATA) + @$(NORMAL_INSTALL) + test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" + @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ + done + +uninstall-sysconfDATA: + @$(NORMAL_UNINSTALL) + @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sysconfdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-sysconfDATA + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-sysconfDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-data-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-data-hook install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sysconfDATA installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-sysconfDATA + + +install-data-hook: + mkdir -p $(DESTDIR)$(localstatedir)/data && mkdir -p $(DESTDIR)$(localstatedir)/log + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/csft-4.1/Makefile.am b/coreseek/csft-4.1/Makefile.am new file mode 100755 index 0000000..2f5fdc9 --- /dev/null +++ b/coreseek/csft-4.1/Makefile.am @@ -0,0 +1,11 @@ +if USE_LIBSTEMMER +SUBDIRS = libstemmer_c src test doc +else +SUBDIRS = src test doc +endif + +EXTRA_DIST = api storage sphinx.conf.in sphinx-min.conf.in example.sql +sysconf_DATA = sphinx.conf.dist sphinx-min.conf.dist example.sql + +install-data-hook: + mkdir -p $(DESTDIR)$(localstatedir)/data && mkdir -p $(DESTDIR)$(localstatedir)/log diff --git a/coreseek/csft-4.1/Makefile.in b/coreseek/csft-4.1/Makefile.in new file mode 100644 index 0000000..75b808f --- /dev/null +++ b/coreseek/csft-4.1/Makefile.in @@ -0,0 +1,788 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = . +DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/sphinx-min.conf.in \ + $(srcdir)/sphinx.conf.in $(top_srcdir)/config/config.h.in \ + $(top_srcdir)/configure COPYING INSTALL config/depcomp \ + config/install-sh config/missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config/config.h +CONFIG_CLEAN_FILES = sphinx.conf.dist sphinx-min.conf.dist +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(sysconfdir)" +DATA = $(sysconf_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = src test doc libstemmer_c +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFDIR = @CONFDIR@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRT = @LIBRT@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MMSEG_CFLAGS = @MMSEG_CFLAGS@ +MMSEG_LIBS = @MMSEG_LIBS@ +MYSQL_CFLAGS = @MYSQL_CFLAGS@ +MYSQL_LIBS = @MYSQL_LIBS@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PGSQL_CFLAGS = @PGSQL_CFLAGS@ +PGSQL_LIBS = @PGSQL_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pgconfig = @pgconfig@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@USE_LIBSTEMMER_FALSE@SUBDIRS = src test doc +@USE_LIBSTEMMER_TRUE@SUBDIRS = libstemmer_c src test doc +EXTRA_DIST = api storage sphinx.conf.in sphinx-min.conf.in example.sql +sysconf_DATA = sphinx.conf.dist sphinx-min.conf.dist example.sql +all: all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config/config.h: config/stamp-h1 + @if test ! -f $@; then rm -f config/stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) config/stamp-h1; else :; fi + +config/stamp-h1: $(top_srcdir)/config/config.h.in $(top_builddir)/config.status + @rm -f config/stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config/config.h +$(top_srcdir)/config/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f config/stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config/config.h config/stamp-h1 +sphinx.conf.dist: $(top_builddir)/config.status $(srcdir)/sphinx.conf.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +sphinx-min.conf.dist: $(top_builddir)/config.status $(srcdir)/sphinx-min.conf.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +install-sysconfDATA: $(sysconf_DATA) + @$(NORMAL_INSTALL) + test -z "$(sysconfdir)" || $(MKDIR_P) "$(DESTDIR)$(sysconfdir)" + @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \ + done + +uninstall-sysconfDATA: + @$(NORMAL_UNINSTALL) + @list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(sysconfdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-data-hook +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-sysconfDATA + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-sysconfDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-data-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-data-hook install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip install-sysconfDATA installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-sysconfDATA + + +install-data-hook: + mkdir -p $(DESTDIR)$(localstatedir)/data && mkdir -p $(DESTDIR)$(localstatedir)/log + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/csft-4.1/acinclude.m4 b/coreseek/csft-4.1/acinclude.m4 new file mode 100755 index 0000000..ad8c0af --- /dev/null +++ b/coreseek/csft-4.1/acinclude.m4 @@ -0,0 +1,423 @@ +dnl --------------------------------------------------------------------------- +dnl Macro: AC_CHECK_MYSQL +dnl Check for custom MySQL paths in --with-mysql-* options. +dnl If some paths are missing, check if mysql_config exists. +dnl --------------------------------------------------------------------------- + +AC_DEFUN([AC_CHECK_MYSQL],[ + +mysqlconfig_locations="mysql_config /usr/bin/mysql_config /usr/local/bin/mysql_config /usr/local/mysql/bin/mysql_config /opt/mysql/bin/mysql_config /usr/pkg/bin/mysql_config" +user_mysql_includes= +user_mysql_libs= + +# check explicit MySQL root for mysql_config, include, lib +if test [ x$1 != xyes -a x$1 != xno ] +then + mysqlroot=`echo $1 | sed -e 's+/$++'` + if test [ -x "$mysqlroot/bin/mysql_config" ] + then + # if there's mysql_config, that's the best route + mysqlconfig_locations="$mysqlroot/bin/mysql_config" + elif test [ -d "$mysqlroot/include" -a -d "$mysqlroot/lib" ] + then + # explicit root; do not check well-known paths + mysqlconfig_locations= + + # includes + if test [ -d "$mysqlroot/include/mysql" ] + then + user_mysql_includes="$mysqlroot/include/mysql" + else + user_mysql_includes="$mysqlroot/include" + fi + + # libs + if test [ -d "$mysqlroot/lib/mysql" ] + then + user_mysql_libs="$mysqlroot/lib/mysql" + else + user_mysql_libs="$mysqlroot/lib" + fi + else + AC_MSG_ERROR([invalid MySQL root directory '$mysqlroot'; neither bin/mysql_config, nor include/ and lib/ were found there]) + fi +fi + + +# try running mysql_config +AC_MSG_CHECKING([for mysql_config]) +for mysqlconfig in $mysqlconfig_locations +do + if test [ -n "$mysqlconfig" ] + then + MYSQL_CFLAGS=`${mysqlconfig} --cflags 2>/dev/null` + MYSQL_LIBS=`${mysqlconfig} --libs 2>/dev/null` + + if test [ $? -eq 0 ] + then + AC_MSG_RESULT([$mysqlconfig]) + mysqlconfig= + break + else + MYSQL_CFLAGS= + MYSQL_LIBS= + fi + fi +done +if test [ -n "$mysqlconfig" ] +then + mysqlconfig_used= + AC_MSG_RESULT([not found]) +else + mysqlconfig_used=yes +fi + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test [ -z "$MYSQL_CFLAGS" ] +then + for CANDIDATE in "$user_mysql_includes" "/usr/local/mysql/include" "/usr/local/mysql/include/mysql" \ + "/usr/include/mysql" + do + if test [ -n "$CANDIDATE" -a -r "$CANDIDATE/mysql.h" ] + then + MYSQL_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test [ -z "$MYSQL_LIBS" ] +then + for CANDIDATE in "$user_mysql_libs" "/usr/lib64/mysql" \ + "/usr/local/mysql/lib/mysql" "/usr/local/mysql/lib" \ + "/usr/local/lib/mysql" "/usr/lib/mysql" \ + "/opt/mysql/lib/mysql" "/usr/pkg/lib/mysql" + do + if test [ -n "$CANDIDATE" -a -d "$CANDIDATE" ] + then + MYSQL_LIBS="-L$CANDIDATE -lmysqlclient -lz" + break + fi + done +fi + + +# apply explicit include path overrides +AC_ARG_WITH([mysql-includes], + AC_HELP_STRING([--with-mysql-includes], [path to MySQL header files]), + [ac_cv_mysql_includes=$withval]) +if test [ -n "$ac_cv_mysql_includes" ] +then + MYSQL_CFLAGS="-I$ac_cv_mysql_includes" +fi + + +# apply explicit lib path overrides +AC_ARG_WITH([mysql-libs], + AC_HELP_STRING([--with-mysql-libs], [path to MySQL libraries]), + [ac_cv_mysql_libs=$withval]) +if test [ -n "$ac_cv_mysql_libs" ] +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mysql_libs=`echo ${ac_cv_mysql_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MYSQL_LIBS="-L$ac_cv_mysql_libs -lmysqlclient -lz" +fi + +# if we got options from mysqlconfig try to actually use them +if test [ -n "$mysqlconfig_used" -a -n "$MYSQL_CFLAGS" -a -n "$MYSQL_LIBS" ] +then + _CFLAGS=$CFLAGS + _LIBS=$LIBS + + CFLAGS="$CFLAGS $MYSQL_CFLAGS" + LIBS="$LIBS $MYSQL_LIBS" + + AC_CHECK_FUNC(mysql_real_connect,[], + [ + # if mysql binary was built using a different compiler and we + # got options from mysql_config some of them might not work + # with compiler we will be using + + # throw away everything that isn't one of -D -L -I -l and retry + MYSQL_CFLAGS=`echo $MYSQL_CFLAGS | sed -e 's/-[[^DLIl]][[^ ]]*//g'` + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/-[[^DLIl]][[^ ]]*//g'` + + CFLAGS="$_CFLAGS $MYSQL_CFLAGS" + LIBS="$_LIBS $MYSQL_LIBS" + + unset ac_cv_func_mysql_real_connect + AC_CHECK_FUNC(mysql_real_connect,[], + [ + # ... that didn't help + # clear flags, the code below will complain + MYSQL_CFLAGS= + MYSQL_LIBS= + ]) + ]) + CFLAGS=$_CFLAGS + LIBS=$_LIBS +fi + +# now that we did all we could, perform final checks +AC_MSG_CHECKING([MySQL include files]) +if test [ -z "$MYSQL_CFLAGS" ] +then + AC_MSG_ERROR([missing include files. + +****************************************************************************** +ERROR: cannot find MySQL include files. + +Check that you do have MySQL include files installed. +The package name is typically 'mysql-devel'. + +If include files are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify includes location explicitly, using --with-mysql-includes; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +]) +else + AC_MSG_RESULT([$MYSQL_CFLAGS]) +fi + + +AC_MSG_CHECKING([MySQL libraries]) +if test [ -z "$MYSQL_LIBS" ] +then + AC_MSG_ERROR([missing libraries. + +****************************************************************************** +ERROR: cannot find MySQL libraries. + +Check that you do have MySQL libraries installed. +The package name is typically 'mysql-devel'. + +If libraries are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify libraries location explicitly, using --with-mysql-libs; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +]) +else + AC_MSG_RESULT([$MYSQL_LIBS]) +fi + + +]) + +dnl --------------------------------------------------------------------------- +dnl Macro: AC_CHECK_PGSQL +dnl First check for custom PostgreSQL paths in --with-pgsql-* options. +dnl If some paths are missing, check if pg_config exists. +dnl --------------------------------------------------------------------------- + +AC_DEFUN([AC_CHECK_PGSQL],[ + +# Check for custom includes path +if test [ -z "$ac_cv_pgsql_includes" ] +then + AC_ARG_WITH([pgsql-includes], + AC_HELP_STRING([--with-pgsql-includes], [path to PostgreSQL header files]), + [ac_cv_pgsql_includes=$withval]) +fi +if test [ -n "$ac_cv_pgsql_includes" ] +then + AC_CACHE_CHECK([PostgreSQL includes], [ac_cv_pgsql_includes], [ac_cv_pgsql_includes=""]) + PGSQL_CFLAGS="-I$ac_cv_pgsql_includes" +fi + +# Check for custom library path +if test [ -z "$ac_cv_pgsql_libs" ] +then + AC_ARG_WITH([pgsql-libs], + AC_HELP_STRING([--with-pgsql-libs], [path to PostgreSQL libraries]), + [ac_cv_pgsql_libs=$withval]) +fi +if test [ -n "$ac_cv_pgsql_libs" ] +then + AC_CACHE_CHECK([PostgreSQL libraries], [ac_cv_pgsql_libs], [ac_cv_pgsql_libs=""]) + PGSQL_LIBS="-L$ac_cv_pgsql_libs -lpq" +fi + +# If some path is missing, try to autodetermine with pgsql_config +if test [ -z "$ac_cv_pgsql_includes" -o -z "$ac_cv_pgsql_libs" ] +then + if test [ -z "$pgconfig" ] + then + AC_PATH_PROG(pgconfig,pg_config) + fi + if test [ -z "$pgconfig" ] + then + AC_MSG_ERROR([pg_config executable not found +******************************************************************************** +ERROR: cannot find PostgreSQL libraries. If you want to compile with PosgregSQL support, + you must either specify file locations explicitly using + --with-pgsql-includes and --with-pgsql-libs options, or make sure path to + pg_config is listed in your PATH environment variable. If you want to + disable PostgreSQL support, use --without-pgsql option. +******************************************************************************** +]) + else + if test [ -z "$ac_cv_pgsql_includes" ] + then + AC_MSG_CHECKING(PostgreSQL C flags) + PGSQL_CFLAGS="-I`${pgconfig} --includedir`" + AC_MSG_RESULT($PGSQL_CFLAGS) + fi + if test [ -z "$ac_cv_pgsql_libs" ] + then + AC_MSG_CHECKING(PostgreSQL linker flags) + PGSQL_LIBS="-L`${pgconfig} --libdir` -lpq" + AC_MSG_RESULT($PGSQL_LIBS) + fi + fi +fi +]) + +dnl --------------------------------------------------------------------------- +dnl Macro: AC_CHECK_MMSEG +dnl First check for custom PostgreSQL paths in --with-mmseg-* options. +dnl If some paths are missing, check if pg_config exists. +dnl --------------------------------------------------------------------------- + +AC_DEFUN([AC_CHECK_MMSEG],[ + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test [ -z "$MMSEG_CFLAGS" ] +then + for CANDIDATE in "$user_mmseg_includes" "/usr/local/include/mmseg" "/usr/include/mmseg" + do + if test [ -n "$CANDIDATE" -a -r "$CANDIDATE/Segmenter.h" ] + then + MMSEG_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test [ -z "$MMSEG_LIBS" ] +then + for CANDIDATE in "$user_mmseg_libs" "/usr/lib64" \ + "/usr/local/lib" "/usr/local/mmseg/lib" \ + "/usr/local/lib/mmseg" "/usr/lib" \ + "/opt/mmseg/lib" + do + if test [ -n "$CANDIDATE" -a -d "$CANDIDATE" ] + then + MMSEG_LIBS="-L$CANDIDATE -lmmseg" + break + fi + done +fi + + + +# apply explicit include path overrides +AC_ARG_WITH([mmseg-includes], + AC_HELP_STRING([--with-mmseg-includes], [path to libmmseg header files]), + [ac_cv_mmseg_includes=$withval]) +if test [ -n "$ac_cv_mmseg_includes" ] +then + MMSEG_CFLAGS="-I$ac_cv_mmseg_includes" +fi + + +# apply explicit lib path overrides +AC_ARG_WITH([mmseg-libs], + AC_HELP_STRING([--with-mmseg-libs], [path to libmmseg libraries]), + [ac_cv_mmseg_libs=$withval]) +if test [ -n "$ac_cv_mmseg_libs" ] +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mmseg_libs=`echo ${ac_cv_mmseg_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MMSEG_LIBS="-L$ac_cv_mmseg_libs -lmmseg" +fi + +# now that we did all we could, perform final checks +AC_MSG_CHECKING([libmmseg include files]) +if test [ -z "$MMSEG_CFLAGS" ] +then + AC_MSG_ERROR([missing include files. + +****************************************************************************** +ERROR: cannot find libmmseg include files. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +]) +else + AC_MSG_RESULT([$MMSEG_CFLAGS]) +fi + +AC_MSG_CHECKING([libmmseg libraries]) +if test [ -z "$MMSEG_LIBS" ] +then + AC_MSG_ERROR([missing libraries. + +****************************************************************************** +ERROR: cannot find libmmseg libraries. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +]) +else + AC_MSG_RESULT([$MMSEG_LIBS]) +fi + +]) + +dnl --------------------------------------------------------------------------- +dnl Macro: SPHINX_CONFIGURE_PART +dnl +dnl Tells what stage is ./configure running now, nicely formatted +dnl --------------------------------------------------------------------------- + +dnl SPHINX_CONFIGURE_PART(MESSAGE) +AC_DEFUN([SPHINX_CONFIGURE_PART],[ + AC_MSG_RESULT() + AC_MSG_RESULT([$1]) + TMP=`echo $1 | sed -e sX.X-Xg` + AC_MSG_RESULT([$TMP]) + AC_MSG_RESULT() +]) + +dnl --------------------------------------------------------------------------- +dnl Macro: SPHINX_CHECK_DEFINE +dnl +dnl Checks if this symbol is defined in that header file +dnl --------------------------------------------------------------------------- + +AC_DEFUN([SPHINX_CHECK_DEFINE],[ + AC_CACHE_CHECK([for $1 in $2],ac_cv_define_$1,[ + AC_EGREP_CPP(YES_IS_DEFINED, [ +#include <$2> +#ifdef $1 +YES_IS_DEFINED +#endif + ], ac_cv_define_$1=yes, ac_cv_define_$1=no) + ]) + if test "$ac_cv_define_$1" = "yes"; then + AC_DEFINE(HAVE_$1, 1, [Define if $1 is defined in $2]) + fi +]) diff --git a/coreseek/csft-4.1/aclocal.m4 b/coreseek/csft-4.1/aclocal.m4 new file mode 100644 index 0000000..91cbf39 --- /dev/null +++ b/coreseek/csft-4.1/aclocal.m4 @@ -0,0 +1,1215 @@ +# generated automatically by aclocal 1.11.3 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +# Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.3], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.3])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008, +# 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009, +# 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], +[python python2 python3 python3.2 python3.1 python3.0 python2.7 dnl + python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) + + AC_ARG_VAR([PYTHON], [the Python interpreter]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([acinclude.m4]) diff --git a/coreseek/csft-4.1/api/java/MANIFEST.MF b/coreseek/csft-4.1/api/java/MANIFEST.MF new file mode 100755 index 0000000..1d84d79 --- /dev/null +++ b/coreseek/csft-4.1/api/java/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: org.sphx.api.test diff --git a/coreseek/csft-4.1/api/java/Makefile b/coreseek/csft-4.1/api/java/Makefile new file mode 100755 index 0000000..1a196c3 --- /dev/null +++ b/coreseek/csft-4.1/api/java/Makefile @@ -0,0 +1,33 @@ +# +# $Id$ +# +# Makefile to automate sphinxapi.jar source builds +# + +# order matters; full rebuild is always performed; but it somehow works +SOURCES = \ + SphinxMatch.java \ + SphinxException.java \ + SphinxWordInfo.java \ + SphinxResult.java \ + SphinxClient.java \ + test.java +CLASSES = $(SOURCES:.java=.class) + +all : sphinxapi.jar + +clean: + rm -fr org + rm -f sphinxapi.jar + +sphinxapi.jar: $(CLASSES) + jar cfm sphinxapi.jar MANIFEST.MF org/sphx/api + +.SUFFIXES: .java .class +vpath %.class org/sphx/api +.java.class: + javac -classpath . -d . $< + +# +# $Id$ +# diff --git a/coreseek/csft-4.1/api/java/README b/coreseek/csft-4.1/api/java/README new file mode 100755 index 0000000..e664dd0 --- /dev/null +++ b/coreseek/csft-4.1/api/java/README @@ -0,0 +1,26 @@ +Sphinx Java API notes +---------------------- + +0) THIS IS A WORK IN PROGRESS. COMPATIBILITY-BREAKING CLASS INTERFACE +CHANGES STILL MIGHT BE PERFORMED. SUGGESTIONS ARE WELCOME. + +1) Officially supported JDKs are 1.5 and above. + +2) The code would probably build with prior JDK versions as well, +but since JDK 1.4 is already in End-Of-Life transition period, +this could be gradually dropped. + +3) To build `sphinxapi.jar': + + - make sure that `javac' and `jar' are in PATH + - make sure JAVA_HOME is properly set + - issue `make' + +4) To run sample client program: + + - issue `java -jar sphinxapi.jar' + +5) Warnings about "unchecked" mode on 1.5+ are caused by keeping +the code compatible with 1.4. Fix suggestions are welcome. + +--eof-- diff --git a/coreseek/csft-4.1/api/java/SphinxClient.java b/coreseek/csft-4.1/api/java/SphinxClient.java new file mode 100755 index 0000000..5e4677c --- /dev/null +++ b/coreseek/csft-4.1/api/java/SphinxClient.java @@ -0,0 +1,1504 @@ +/* + * $Id$ + * + * Java version of Sphinx searchd client (Java API) + * + * Copyright (c) 2007, Vladimir Fedorkov + * Copyright (c) 2007-2011, Andrew Aksyonoff + * Copyright (c) 2008-2011, Sphinx Technologies Inc + * All rights reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License. You should have + * received a copy of the GPL license along with this program; if you + * did not, you can find it at http://www.gnu.org/ + */ + +package org.sphx.api; + +import java.io.*; +import java.net.*; +import java.util.*; +import java.net.SocketAddress.*; + +/** Sphinx client class */ +public class SphinxClient +{ + /* matching modes */ + public final static int SPH_MATCH_ALL = 0; + public final static int SPH_MATCH_ANY = 1; + public final static int SPH_MATCH_PHRASE = 2; + public final static int SPH_MATCH_BOOLEAN = 3; + public final static int SPH_MATCH_EXTENDED = 4; + public final static int SPH_MATCH_FULLSCAN = 5; + public final static int SPH_MATCH_EXTENDED2 = 6; + + /* ranking modes (extended2 only) */ + public final static int SPH_RANK_PROXIMITY_BM25 = 0; + public final static int SPH_RANK_BM25 = 1; + public final static int SPH_RANK_NONE = 2; + public final static int SPH_RANK_WORDCOUNT = 3; + public final static int SPH_RANK_PROXIMITY = 4; + public final static int SPH_RANK_MATCHANY = 5; + public final static int SPH_RANK_FIELDMASK = 6; + public final static int SPH_RANK_SPH04 = 7; + public final static int SPH_RANK_TOTAL = 8; + + /* sorting modes */ + public final static int SPH_SORT_RELEVANCE = 0; + public final static int SPH_SORT_ATTR_DESC = 1; + public final static int SPH_SORT_ATTR_ASC = 2; + public final static int SPH_SORT_TIME_SEGMENTS = 3; + public final static int SPH_SORT_EXTENDED = 4; + public final static int SPH_SORT_EXPR = 5; + + /* grouping functions */ + public final static int SPH_GROUPBY_DAY = 0; + public final static int SPH_GROUPBY_WEEK = 1; + public final static int SPH_GROUPBY_MONTH = 2; + public final static int SPH_GROUPBY_YEAR = 3; + public final static int SPH_GROUPBY_ATTR = 4; + public final static int SPH_GROUPBY_ATTRPAIR = 5; + + /* searchd reply status codes */ + public final static int SEARCHD_OK = 0; + public final static int SEARCHD_ERROR = 1; + public final static int SEARCHD_RETRY = 2; + public final static int SEARCHD_WARNING = 3; + + /* attribute types */ + public final static int SPH_ATTR_INTEGER = 1; + public final static int SPH_ATTR_TIMESTAMP = 2; + public final static int SPH_ATTR_ORDINAL = 3; + public final static int SPH_ATTR_BOOL = 4; + public final static int SPH_ATTR_FLOAT = 5; + public final static int SPH_ATTR_BIGINT = 6; + public final static int SPH_ATTR_STRING = 7; + public final static int SPH_ATTR_MULTI = 0x40000001; + public final static int SPH_ATTR_MULTI64 = 0x40000002; + + /* searchd commands */ + private final static int SEARCHD_COMMAND_SEARCH = 0; + private final static int SEARCHD_COMMAND_EXCERPT = 1; + private final static int SEARCHD_COMMAND_UPDATE = 2; + private final static int SEARCHD_COMMAND_KEYWORDS = 3; + private final static int SEARCHD_COMMAND_PERSIST = 4; + private final static int SEARCHD_COMMAND_FLUSHATTRS = 7; + + /* searchd command versions */ + private final static int VER_MAJOR_PROTO = 0x1; + private final static int VER_COMMAND_SEARCH = 0x119; + private final static int VER_COMMAND_EXCERPT = 0x102; + private final static int VER_COMMAND_UPDATE = 0x102; + private final static int VER_COMMAND_KEYWORDS = 0x100; + private final static int VER_COMMAND_FLUSHATTRS = 0x100; + + /* filter types */ + private final static int SPH_FILTER_VALUES = 0; + private final static int SPH_FILTER_RANGE = 1; + private final static int SPH_FILTER_FLOATRANGE = 2; + + + private String _host; + private int _port; + private String _path; + private Socket _socket; + + private int _offset; + private int _limit; + private int _mode; + private int[] _weights; + private int _sort; + private String _sortby; + private int _minId; + private int _maxId; + private ByteArrayOutputStream _rawFilters; + private DataOutputStream _filters; + private int _filterCount; + private String _groupBy; + private int _groupFunc; + private String _groupSort; + private String _groupDistinct; + private int _maxMatches; + private int _cutoff; + private int _retrycount; + private int _retrydelay; + private String _latitudeAttr; + private String _longitudeAttr; + private float _latitude; + private float _longitude; + + private String _error; + private String _warning; + private boolean _connerror; + private int _timeout; + + private ArrayList _reqs; + private Map _indexWeights; + private int _ranker; + private int _maxQueryTime; + private Map _fieldWeights; + private Map _overrideTypes; + private Map _overrideValues; + private String _select; + + /** Creates a new SphinxClient instance. */ + public SphinxClient() + { + this("localhost", 9312); + } + + /** Creates a new SphinxClient instance, with host:port specification. */ + public SphinxClient(String host, int port) + { + _host = host; + _port = port; + _path = null; + _socket = null; + + _offset = 0; + _limit = 20; + _mode = SPH_MATCH_ALL; + _sort = SPH_SORT_RELEVANCE; + _sortby = ""; + _minId = 0; + _maxId = 0; + + _filterCount = 0; + _rawFilters = new ByteArrayOutputStream(); + _filters = new DataOutputStream(_rawFilters); + + _groupBy = ""; + _groupFunc = SPH_GROUPBY_DAY; + _groupSort = "@group desc"; + _groupDistinct = ""; + + _maxMatches = 1000; + _cutoff = 0; + _retrycount = 0; + _retrydelay = 0; + + _latitudeAttr = null; + _longitudeAttr = null; + _latitude = 0; + _longitude = 0; + + _error = ""; + _warning = ""; + _connerror = false; + _timeout = 1000; + + _reqs = new ArrayList(); + _weights = null; + _indexWeights = new LinkedHashMap(); + _fieldWeights = new LinkedHashMap(); + _ranker = SPH_RANK_PROXIMITY_BM25; + + _overrideTypes = new LinkedHashMap(); + _overrideValues = new LinkedHashMap(); + _select = "*"; + } + + /** Get last error message, if any. */ + public String GetLastError() + { + return _error; + } + + /** Get last warning message, if any. */ + public String GetLastWarning() + { + return _warning; + } + + /** Get last error flag (to tell network connection errors from searchd errors or broken responses). */ + public boolean IsConnectError() + { + return _connerror; + } + + /** Set searchd host and port to connect to. */ + public void SetServer(String host, int port) throws SphinxException + { + myAssert ( host!=null && host.length()>0, "host name must not be empty" ); + myAssert ( port>0 && port<65536, "port must be in 1..65535 range" ); + _host = host; + _port = port; + } + + /** Set server connection timeout (0 to remove), in milliseconds. */ + public void SetConnectTimeout ( int timeout ) + { + _timeout = Math.max ( timeout, 0 ); + } + + /** Internal method. Sanity check. */ + private void myAssert ( boolean condition, String err ) throws SphinxException + { + if ( !condition ) + { + _error = err; + throw new SphinxException ( err ); + } + } + + /** Internal method. String IO helper. */ + private static void writeNetUTF8 ( DataOutputStream ostream, String str ) throws IOException + { + if ( str==null ) + { + ostream.writeInt ( 0 ); + return; + } + + byte[] sBytes = str.getBytes ( "UTF-8" ); + int iLen = sBytes.length; + + ostream.writeInt ( iLen ); + ostream.write ( sBytes ); + } + + /** Internal method. String IO helper. */ + private static String readNetUTF8(DataInputStream istream) throws IOException + { + int iLen = istream.readInt(); + byte[] sBytes = new byte [ iLen ]; + istream.readFully ( sBytes ); + return new String ( sBytes, "UTF-8"); + } + + /** Internal method. Unsigned int IO helper. */ + private static long readDword ( DataInputStream istream ) throws IOException + { + long v = (long) istream.readInt (); + if ( v<0 ) + v += 4294967296L; + return v; + } + + /** Internal method. Connect to searchd and exchange versions. */ + private Socket _Connect() + { + if ( _socket!=null ) + return _socket; + + _connerror = false; + Socket sock = null; + try + { + sock = new Socket (); + sock.setSoTimeout ( _timeout ); + InetSocketAddress addr = new InetSocketAddress ( _host, _port ); + sock.connect ( addr, _timeout ); + + DataInputStream sIn = new DataInputStream ( sock.getInputStream() ); + int version = sIn.readInt(); + if ( version<1 ) + { + sock.close (); + _error = "expected searchd protocol version 1+, got version " + version; + return null; + } + + DataOutputStream sOut = new DataOutputStream ( sock.getOutputStream() ); + sOut.writeInt ( VER_MAJOR_PROTO ); + + } catch ( IOException e ) + { + _error = "connection to " + _host + ":" + _port + " failed: " + e; + _connerror = true; + + try + { + if ( sock!=null ) + sock.close (); + } catch ( IOException e1 ) {} + return null; + } + + return sock; + } + + /** Internal method. Get and check response packet from searchd. */ + private byte[] _GetResponse ( Socket sock ) + { + /* connect */ + DataInputStream sIn = null; + InputStream SockInput = null; + try + { + SockInput = sock.getInputStream(); + sIn = new DataInputStream ( SockInput ); + + } catch ( IOException e ) + { + _error = "getInputStream() failed: " + e; + return null; + } + + /* read response */ + byte[] response = null; + short status = 0, ver = 0; + int len = 0; + try + { + /* read status fields */ + status = sIn.readShort(); + ver = sIn.readShort(); + len = sIn.readInt(); + + /* read response if non-empty */ + if ( len<=0 ) + { + _error = "invalid response packet size (len=" + len + ")"; + return null; + } + + response = new byte[len]; + sIn.readFully ( response, 0, len ); + + /* check status */ + if ( status==SEARCHD_WARNING ) + { + DataInputStream in = new DataInputStream ( new ByteArrayInputStream ( response ) ); + + int iWarnLen = in.readInt (); + _warning = new String ( response, 4, iWarnLen ); + + System.arraycopy ( response, 4+iWarnLen, response, 0, response.length-4-iWarnLen ); + + } else if ( status==SEARCHD_ERROR ) + { + _error = "searchd error: " + new String ( response, 4, response.length-4 ); + return null; + + } else if ( status==SEARCHD_RETRY ) + { + _error = "temporary searchd error: " + new String ( response, 4, response.length-4 ); + return null; + + } else if ( status!=SEARCHD_OK ) + { + _error = "searched returned unknown status, code=" + status; + return null; + } + + } catch ( IOException e ) + { + if ( len!=0 ) + { + /* get trace, to provide even more failure details */ + PrintWriter ew = new PrintWriter ( new StringWriter() ); + e.printStackTrace ( ew ); + ew.flush (); + ew.close (); + String sTrace = ew.toString (); + + /* build error message */ + _error = "failed to read searchd response (status=" + status + ", ver=" + ver + ", len=" + len + ", trace=" + sTrace +")"; + } else + { + _error = "received zero-sized searchd response (searchd crashed?): " + e.getMessage(); + } + return null; + + } finally + { + if ( _socket==null ) + { + try + { + if ( sIn!=null ) + sIn.close(); + if ( sock!=null && !sock.isConnected() ) + sock.close(); + } catch ( IOException e ) + { + /* silently ignore close failures; nothing could be done anyway */ + } + } + } + + return response; + } + + /** Internal method. Connect to searchd, send request, get response as DataInputStream. */ + private DataInputStream _DoRequest ( int command, int version, ByteArrayOutputStream req ) + { + /* connect */ + Socket sock = _Connect(); + if ( sock==null ) + return null; + + /* send request */ + byte[] reqBytes = req.toByteArray(); + try + { + DataOutputStream sockDS = new DataOutputStream ( sock.getOutputStream() ); + sockDS.writeShort ( command ); + sockDS.writeShort ( version ); + sockDS.writeInt ( reqBytes.length ); + sockDS.write ( reqBytes ); + + } catch ( Exception e ) + { + _error = "network error: " + e; + _connerror = true; + return null; + } + + /* get response */ + byte[] response = _GetResponse ( sock ); + if ( response==null ) + return null; + + /* spawn that tampon */ + return new DataInputStream ( new ByteArrayInputStream ( response ) ); + } + + /** Set matches offset and limit to return to client, max matches to retrieve on server, and cutoff. */ + public void SetLimits ( int offset, int limit, int max, int cutoff ) throws SphinxException + { + myAssert ( offset>=0, "offset must not be negative" ); + myAssert ( limit>0, "limit must be positive" ); + myAssert ( max>0, "max must be positive" ); + myAssert ( cutoff>=0, "cutoff must not be negative" ); + + _offset = offset; + _limit = limit; + _maxMatches = max; + _cutoff = cutoff; + } + + /** Set matches offset and limit to return to client, and max matches to retrieve on server. */ + public void SetLimits ( int offset, int limit, int max ) throws SphinxException + { + SetLimits ( offset, limit, max, _cutoff ); + } + + /** Set matches offset and limit to return to client. */ + public void SetLimits ( int offset, int limit) throws SphinxException + { + SetLimits ( offset, limit, _maxMatches, _cutoff ); + } + + /** Set maximum query time, in milliseconds, per-index, 0 means "do not limit". */ + public void SetMaxQueryTime ( int maxTime ) throws SphinxException + { + myAssert ( maxTime>=0, "max_query_time must not be negative" ); + _maxQueryTime = maxTime; + } + + /** Set matching mode. */ + public void SetMatchMode(int mode) throws SphinxException + { + myAssert ( + mode==SPH_MATCH_ALL || + mode==SPH_MATCH_ANY || + mode==SPH_MATCH_PHRASE || + mode==SPH_MATCH_BOOLEAN || + mode==SPH_MATCH_EXTENDED || + mode==SPH_MATCH_FULLSCAN || + mode==SPH_MATCH_EXTENDED2, "unknown mode value; use one of the SPH_MATCH_xxx constants" ); + _mode = mode; + } + + /** Set ranking mode. */ + public void SetRankingMode ( int ranker ) throws SphinxException + { + myAssert ( ranker>=0 && ranker0 ), "sortby string must not be empty in selected mode" ); + + _sort = mode; + _sortby = ( sortby==null ) ? "" : sortby; + } + + /** Set per-field weights (all values must be positive). WARNING: DEPRECATED, use SetFieldWeights() instead. */ + public void SetWeights(int[] weights) throws SphinxException + { + myAssert ( weights!=null, "weights must not be null" ); + for (int i = 0; i < weights.length; i++) { + int weight = weights[i]; + myAssert ( weight>0, "all weights must be greater than 0" ); + } + _weights = weights; + } + + /** + * Bind per-field weights by field name. + * @param fieldWeights hash which maps String index names to Integer weights + */ + public void SetFieldWeights ( Map fieldWeights ) throws SphinxException + { + /* FIXME! implement checks here */ + _fieldWeights = ( fieldWeights==null ) ? new LinkedHashMap () : fieldWeights; + } + + /** + * Bind per-index weights by index name (and enable summing the weights on duplicate matches, instead of replacing them). + * @param indexWeights hash which maps String index names to Integer weights + */ + public void SetIndexWeights ( Map indexWeights ) throws SphinxException + { + /* FIXME! implement checks here */ + _indexWeights = ( indexWeights==null ) ? new LinkedHashMap () : indexWeights; + } + + /** Set document IDs range to match. */ + public void SetIDRange ( int min, int max ) throws SphinxException + { + myAssert ( min<=max, "min must be less or equal to max" ); + _minId = min; + _maxId = max; + } + + /** Set values filter. Only match records where attribute value is in given set. */ + public void SetFilter ( String attribute, int[] values, boolean exclude ) throws SphinxException + { + myAssert ( values!=null && values.length>0, "values array must not be null or empty" ); + myAssert ( attribute!=null && attribute.length()>0, "attribute name must not be null or empty" ); + + try + { + writeNetUTF8 ( _filters, attribute ); + _filters.writeInt ( SPH_FILTER_VALUES ); + _filters.writeInt ( values.length ); + for ( int i=0; i0, "values array must not be null or empty" ); + myAssert ( attribute!=null && attribute.length()>0, "attribute name must not be null or empty" ); + + try + { + writeNetUTF8 ( _filters, attribute ); + _filters.writeInt ( SPH_FILTER_VALUES ); + _filters.writeInt ( values.length ); + for ( int i=0; i0, "longitudeAttr string must not be null or empty" ); + myAssert ( longitudeAttr!=null && longitudeAttr.length()>0, "longitudeAttr string must not be null or empty" ); + + _latitudeAttr = latitudeAttr; + _longitudeAttr = longitudeAttr; + _latitude = latitude; + _longitude = longitude; + } + + /** Set grouping attribute and function. */ + public void SetGroupBy ( String attribute, int func, String groupsort ) throws SphinxException + { + myAssert ( + func==SPH_GROUPBY_DAY || + func==SPH_GROUPBY_WEEK || + func==SPH_GROUPBY_MONTH || + func==SPH_GROUPBY_YEAR || + func==SPH_GROUPBY_ATTR || + func==SPH_GROUPBY_ATTRPAIR, "unknown func value; use one of the available SPH_GROUPBY_xxx constants" ); + + _groupBy = attribute; + _groupFunc = func; + _groupSort = groupsort; + } + + /** Set grouping attribute and function with default ("@group desc") groupsort (syntax sugar). */ + public void SetGroupBy(String attribute, int func) throws SphinxException + { + SetGroupBy(attribute, func, "@group desc"); + } + + /** Set count-distinct attribute for group-by queries. */ + public void SetGroupDistinct(String attribute) + { + _groupDistinct = attribute; + } + + /** Set distributed retries count and delay. */ + public void SetRetries ( int count, int delay ) throws SphinxException + { + myAssert ( count>=0, "count must not be negative" ); + myAssert ( delay>=0, "delay must not be negative" ); + _retrycount = count; + _retrydelay = delay; + } + + /** Set distributed retries count with default (zero) delay (syntax sugar). */ + public void SetRetries ( int count ) throws SphinxException + { + SetRetries ( count, 0 ); + } + + /** + * Set attribute values override (one override list per attribute). + * @param values maps Long document IDs to Int/Long/Float values (as specified in attrtype). + */ + public void SetOverride ( String attrname, int attrtype, Map values ) throws SphinxException + { + myAssert ( attrname!=null && attrname.length()>0, "attrname must not be empty" ); + myAssert ( attrtype==SPH_ATTR_INTEGER || attrtype==SPH_ATTR_TIMESTAMP || attrtype==SPH_ATTR_BOOL || attrtype==SPH_ATTR_FLOAT || attrtype==SPH_ATTR_BIGINT, + "unsupported attrtype (must be one of INTEGER, TIMESTAMP, BOOL, FLOAT, or BIGINT)" ); + _overrideTypes.put ( attrname, new Integer ( attrtype ) ); + _overrideValues.put ( attrname, values ); + } + + /** Set select-list (attributes or expressions), SQL-like syntax. */ + public void SetSelect ( String select ) throws SphinxException + { + myAssert ( select!=null, "select clause string must not be null" ); + _select = select; + } + + + + /** Reset all currently set filters (for multi-queries). */ + public void ResetFilters() + { + /* should we close them first? */ + _rawFilters = new ByteArrayOutputStream(); + _filters = new DataOutputStream(_rawFilters); + _filterCount = 0; + + /* reset GEO anchor */ + _latitudeAttr = null; + _longitudeAttr = null; + _latitude = 0; + _longitude = 0; + } + + /** Clear groupby settings (for multi-queries). */ + public void ResetGroupBy () + { + _groupBy = ""; + _groupFunc = SPH_GROUPBY_DAY; + _groupSort = "@group desc"; + _groupDistinct = ""; + } + + /** Clear all attribute value overrides (for multi-queries). */ + public void ResetOverrides () + { + _overrideTypes.clear (); + _overrideValues.clear (); + } + + + + /** Connect to searchd server and run current search query against all indexes (syntax sugar). */ + public SphinxResult Query ( String query ) throws SphinxException + { + return Query ( query, "*", "" ); + } + + /** Connect to searchd server and run current search query against all indexes (syntax sugar). */ + public SphinxResult Query ( String query, String index ) throws SphinxException + { + return Query ( query, index, "" ); + } + + /** Connect to searchd server and run current search query. */ + public SphinxResult Query ( String query, String index, String comment ) throws SphinxException + { + myAssert ( _reqs==null || _reqs.size()==0, "AddQuery() and Query() can not be combined; use RunQueries() instead" ); + + AddQuery ( query, index, comment ); + SphinxResult[] results = RunQueries(); + _reqs = new ArrayList(); /* just in case it failed too early */ + if ( results==null || results.length<1 ) + return null; /* probably network error; error message should be already filled */ + + SphinxResult res = results[0]; + _warning = res.warning; + _error = res.error; + if ( res==null || res.getStatus()==SEARCHD_ERROR ) + return null; + return res; + } + + /** Add new query with current settings to current search request. */ + public int AddQuery ( String query, String index, String comment ) throws SphinxException + { + ByteArrayOutputStream req = new ByteArrayOutputStream(); + + /* build request */ + try { + DataOutputStream out = new DataOutputStream(req); + out.writeInt(_offset); + out.writeInt(_limit); + out.writeInt(_mode); + out.writeInt(_ranker); + out.writeInt(_sort); + writeNetUTF8(out, _sortby); + writeNetUTF8(out, query); + int weightLen = _weights != null ? _weights.length : 0; + + out.writeInt(weightLen); + if (_weights != null) { + for (int i = 0; i < _weights.length; i++) + out.writeInt(_weights[i]); + } + + writeNetUTF8(out, index); + out.writeInt(0); + out.writeInt(_minId); + out.writeInt(_maxId); + + /* filters */ + out.writeInt(_filterCount); + out.write(_rawFilters.toByteArray()); + + /* group-by, max matches, sort-by-group flag */ + out.writeInt(_groupFunc); + writeNetUTF8(out, _groupBy); + out.writeInt(_maxMatches); + writeNetUTF8(out, _groupSort); + + out.writeInt(_cutoff); + out.writeInt(_retrycount); + out.writeInt(_retrydelay); + + writeNetUTF8(out, _groupDistinct); + + /* anchor point */ + if (_latitudeAttr == null || _latitudeAttr.length() == 0 || _longitudeAttr == null || _longitudeAttr.length() == 0) { + out.writeInt(0); + } else { + out.writeInt(1); + writeNetUTF8(out, _latitudeAttr); + writeNetUTF8(out, _longitudeAttr); + out.writeFloat(_latitude); + out.writeFloat(_longitude); + + } + + /* per-index weights */ + out.writeInt(_indexWeights.size()); + for (Iterator e = _indexWeights.keySet().iterator(); e.hasNext();) { + String indexName = (String) e.next(); + Integer weight = (Integer) _indexWeights.get(indexName); + writeNetUTF8(out, indexName); + out.writeInt(weight.intValue()); + } + + /* max query time */ + out.writeInt ( _maxQueryTime ); + + /* per-field weights */ + out.writeInt ( _fieldWeights.size() ); + for ( Iterator e=_fieldWeights.keySet().iterator(); e.hasNext(); ) + { + String field = (String) e.next(); + Integer weight = (Integer) _fieldWeights.get ( field ); + writeNetUTF8 ( out, field ); + out.writeInt ( weight.intValue() ); + } + + /* comment */ + writeNetUTF8 ( out, comment ); + + /* overrides */ + out.writeInt ( _overrideTypes.size() ); + for ( Iterator e=_overrideTypes.keySet().iterator(); e.hasNext(); ) + { + String attr = (String) e.next(); + Integer type = (Integer) _overrideTypes.get ( attr ); + Map values = (Map) _overrideValues.get ( attr ); + + writeNetUTF8 ( out, attr ); + out.writeInt ( type.intValue() ); + out.writeInt ( values.size() ); + + for ( Iterator e2=values.keySet().iterator(); e2.hasNext(); ) + { + Long id = (Long) e2.next (); + out.writeLong ( id.longValue() ); + switch ( type.intValue() ) + { + case SPH_ATTR_FLOAT: out.writeFloat ( ( (Float) values.get ( id ) ).floatValue() ); break; + case SPH_ATTR_BIGINT: out.writeLong ( ( (Long)values.get ( id ) ).longValue() ); break; + default: out.writeInt ( ( (Integer)values.get ( id ) ).intValue() ); break; + } + } + } + + /* select-list */ + writeNetUTF8 ( out, _select ); + + /* done! */ + out.flush (); + int qIndex = _reqs.size(); + _reqs.add ( qIndex, req.toByteArray() ); + return qIndex; + + } catch ( Exception e ) + { + myAssert ( false, "error in AddQuery(): " + e + ": " + e.getMessage() ); + + } finally + { + try + { + _filters.close (); + _rawFilters.close (); + } catch ( IOException e ) + { + myAssert ( false, "error in AddQuery(): " + e + ": " + e.getMessage() ); + } + } + return -1; + } + + /** Run all previously added search queries. */ + public SphinxResult[] RunQueries() throws SphinxException + { + if ( _reqs==null || _reqs.size()<1 ) + { + _error = "no queries defined, issue AddQuery() first"; + return null; + } + + /* build the mega-request */ + int nreqs = _reqs.size(); + ByteArrayOutputStream reqBuf = new ByteArrayOutputStream(); + try + { + DataOutputStream req = new DataOutputStream ( reqBuf ); + /* its a client */ + req.writeInt(0); + req.writeInt ( nreqs ); + for ( int i=0; i 0, "BuildExcerpts: Have no documents to process"); + myAssert(index != null && index.length() > 0, "BuildExcerpts: Have no index to process documents"); + myAssert(words != null && words.length() > 0, "BuildExcerpts: Have no words to highlight"); + if (opts == null) opts = new LinkedHashMap(); + + /* fixup options */ + if (!opts.containsKey("before_match")) opts.put("before_match", ""); + if (!opts.containsKey("after_match")) opts.put("after_match", ""); + if (!opts.containsKey("chunk_separator")) opts.put("chunk_separator", "..."); + if (!opts.containsKey("html_strip_mode")) opts.put("html_strip_mode", "index"); + if (!opts.containsKey("limit")) opts.put("limit", new Integer(256)); + if (!opts.containsKey("limit_passages")) opts.put("limit_passages", new Integer(0)); + if (!opts.containsKey("limit_words")) opts.put("limit_words", new Integer(0)); + if (!opts.containsKey("around")) opts.put("around", new Integer(5)); + if (!opts.containsKey("start_passage_id")) opts.put("start_passage_id", new Integer(1)); + if (!opts.containsKey("exact_phrase")) opts.put("exact_phrase", new Integer(0)); + if (!opts.containsKey("single_passage")) opts.put("single_passage", new Integer(0)); + if (!opts.containsKey("use_boundaries")) opts.put("use_boundaries", new Integer(0)); + if (!opts.containsKey("weight_order")) opts.put("weight_order", new Integer(0)); + if (!opts.containsKey("load_files")) opts.put("load_files", new Integer(0)); + if (!opts.containsKey("allow_empty")) opts.put("allow_empty", new Integer(0)); + if (!opts.containsKey("query_mode")) opts.put("query_mode", new Integer(0)); + if (!opts.containsKey("force_all_words")) opts.put("force_all_words", new Integer(0)); + + /* build request */ + ByteArrayOutputStream reqBuf = new ByteArrayOutputStream(); + DataOutputStream req = new DataOutputStream ( reqBuf ); + try + { + req.writeInt(0); + int iFlags = 1; /* remove_spaces */ + if ( ((Integer)opts.get("exact_phrase")).intValue()!=0 ) iFlags |= 2; + if ( ((Integer)opts.get("single_passage")).intValue()!=0 ) iFlags |= 4; + if ( ((Integer)opts.get("use_boundaries")).intValue()!=0 ) iFlags |= 8; + if ( ((Integer)opts.get("weight_order")).intValue()!=0 ) iFlags |= 16; + if ( ((Integer)opts.get("query_mode")).intValue()!=0 ) iFlags |= 32; + if ( ((Integer)opts.get("force_all_words")).intValue()!=0 ) iFlags |= 64; + if ( ((Integer)opts.get("load_files")).intValue()!=0 ) iFlags |= 128; + if ( ((Integer)opts.get("allow_empty")).intValue()!=0 ) iFlags |= 256; + req.writeInt ( iFlags ); + writeNetUTF8 ( req, index ); + writeNetUTF8 ( req, words ); + + /* send options */ + writeNetUTF8 ( req, (String) opts.get("before_match") ); + writeNetUTF8 ( req, (String) opts.get("after_match") ); + writeNetUTF8 ( req, (String) opts.get("chunk_separator") ); + req.writeInt ( ((Integer) opts.get("limit")).intValue() ); + req.writeInt ( ((Integer) opts.get("around")).intValue() ); + + req.writeInt ( ((Integer) opts.get("limit_passages")).intValue() ); + req.writeInt ( ((Integer) opts.get("limit_words")).intValue() ); + req.writeInt ( ((Integer) opts.get("start_passage_id")).intValue() ); + writeNetUTF8 ( req, (String) opts.get("html_strip_mode") ); + + /* send documents */ + req.writeInt ( docs.length ); + for ( int i=0; i + * String[] attrs = new String[1]; + * + * attrs[0] = "group_id"; + * long[][] values = new long[2][2]; + * + * values[0] = new long[2]; values[0][0] = 1; values[0][1] = 123; + * values[1] = new long[2]; values[1][0] = 3; values[1][1] = 456; + * + * int res = cl.UpdateAttributes ( "test1", attrs, values ); + * + * + * @param index index name(s) to update; might be distributed + * @param attrs array with the names of the attributes to update + * @param values array of updates; each long[] entry must contains document ID + * in the first element, and all new attribute values in the following ones + * @return -1 on failure, amount of actually found and updated documents (might be 0) on success + * + * @throws SphinxException on invalid parameters + */ + public int UpdateAttributes ( String index, String[] attrs, long[][] values ) throws SphinxException + { + /* check args */ + myAssert ( index!=null && index.length()>0, "no index name provided" ); + myAssert ( attrs!=null && attrs.length>0, "no attribute names provided" ); + myAssert ( values!=null && values.length>0, "no update entries provided" ); + for ( int i=0; i + * String[] attrs = new String[1]; + * + * attrs[0] = "group_id"; + * int[][] values = new int[1][3]; + * + * values[0] = new int[3]; values[0][0] = 123; values[0][1] = 456; values[0][2] = 789 + * + * int res = cl.UpdateAttributesMVA ( "test1", 10, attrs, values ); + * + * + * @param index index name(s) to update; might be distributed + * @param docid id of document to update + * @param attrs array with the names of the attributes to update + * @param values array of updates; each int[] entry must contains all new attribute values + * @return -1 on failure, amount of actually found and updated documents (might be 0) on success + * + * @throws SphinxException on invalid parameters + */ + public int UpdateAttributesMVA ( String index, long docid, String[] attrs, int[][] values ) throws SphinxException + { + /* check args */ + myAssert ( index!=null && index.length()>0, "no index name provided" ); + myAssert ( docid>0, "invalid document id" ); + myAssert ( attrs!=null && attrs.length>0, "no attribute names provided" ); + myAssert ( values!=null && values.length>0, "no update entries provided" ); + myAssert ( values.length==attrs.length, "update entry has wrong length" ); + for ( int i=0; i\tconnect to searchd at host HOST\n" ); + System.out.print ( "-p, --port\t\tconnect to searchd at port PORT\n" ); + System.out.print ( "-i, --index \tsearch through index(es) specified by IDX\n" ); + System.out.print ( "-s, --sortby \tsort matches by 'CLAUSE' in sort_extended mode\n" ); + System.out.print ( "-S, --sortexpr \tsort matches by 'EXPR' DESC in sort_expr mode\n" ); + System.out.print ( "-a, --any\t\tuse 'match any word' matching mode\n" ); + System.out.print ( "-b, --boolean\t\tuse 'boolean query' matching mode\n" ); + System.out.print ( "-e, --extended\t\tuse 'extended query' matching mode\n" ); + System.out.print ( "-ph,--phrase\t\tuse 'exact phrase' matching mode\n" ); +// System.out.print ( "-f, --filter \tfilter by attribute 'ATTR' (default is 'group_id')\n" ); +// System.out.print ( "-v, --value \tadd VAL to allowed 'group_id' values list\n" ); + System.out.print ( "-g, --groupby \tgroup matches by 'EXPR'\n" ); + System.out.print ( "-gs,--groupsort \tsort groups by 'EXPR'\n" ); +// System.out.print ( "-d, --distinct \tcount distinct values of 'ATTR''\n" ); + System.out.print ( "-l, --limit \tretrieve COUNT matches (default: 20)\n" ); + System.out.print ( "-ga, --geoanchor \n" ); + System.out.print ( "\t\t\tset anchor for geodistance\n" ); + System.out.print ( "--select \tselect the listed expressions only\n" ); + + System.exit ( 0 ); + } + + StringBuffer q = new StringBuffer(); + String host = "localhost"; + int port = 9312; + int mode = SphinxClient.SPH_MATCH_ALL; + String index = "*"; + int offset = 0; + int limit = 20; + int sortMode = SphinxClient.SPH_SORT_RELEVANCE; + String sortClause = ""; + String groupBy = ""; + String groupSort = ""; + + SphinxClient cl = new SphinxClient(); + + /* parse arguments */ + if ( argv!=null) + for ( int i=0; i0 ) + cl.SetGroupBy ( groupBy, SphinxClient.SPH_GROUPBY_ATTR, groupSort ); + + SphinxResult res = cl.Query(q.toString(), index); + if ( res==null ) + { + System.err.println ( "Error: " + cl.GetLastError() ); + System.exit ( 1 ); + } + if ( cl.GetLastWarning()!=null && cl.GetLastWarning().length()>0 ) + System.out.println ( "WARNING: " + cl.GetLastWarning() + "\n" ); + + /* print me out */ + System.out.println ( "Query '" + q + "' retrieved " + res.total + " of " + res.totalFound + " matches in " + res.time + " sec." ); + System.out.println ( "Query stats:" ); + for ( int i=0; i + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/coreseek/csft-4.1/api/libsphinxclient/Makefile.am b/coreseek/csft-4.1/api/libsphinxclient/Makefile.am new file mode 100755 index 0000000..a4abfef --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/Makefile.am @@ -0,0 +1,13 @@ +AUTOMAKE_OPTIONS = foreign no-dependencies + +lib_LTLIBRARIES = libsphinxclient.la +noinst_PROGRAMS = test + +libsphinxclient_la_SOURCES = sphinxclient.c +test_SOURCES = test.c + +libsphinxclient_la_LIBADD = @LTLIBOBJS@ +libsphinxclient_la_LDFLAGS = -release @VERSION@ + +include_HEADERS = sphinxclient.h +test_LDADD = .libs/libsphinxclient.a diff --git a/coreseek/csft-4.1/api/libsphinxclient/README b/coreseek/csft-4.1/api/libsphinxclient/README new file mode 100755 index 0000000..5be7f1e --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/README @@ -0,0 +1,51 @@ +Pure C searchd client API library +Sphinx search engine, http://sphinxsearch.com/ + +API notes +---------- + +1. API can either copy the contents of passed pointer arguments, +or rely on the application that the pointer will not become invalid. +This is controlled on per-client basis; see 'copy_args' argument +to the sphinx_create() call. + +When 'copy_args' is true, API will create and manage a copy of every +string and array passed to it. This causes additional malloc() pressure, +but makes calling code easier to write. + +When 'copy_args' is false, API expects that pointers passed to +sphinx_set_xxx() calls will still be valid at the time when sphinx_query() +or sphinx_add_query() are called. + +Rule of thumb: when 'copy_args' is false, do not free query arguments +until you have the search result. Example code for that case: + +VALID CODE: + + char * my_filter_name; + + my_filter_name = malloc ( 256 ); + strncpy ( my_filter_name, "test", 256 ); + + sphinx_add_filter_range ( client, my_filter_name, 10, 20, false ); + result = sphinx_query ( client ); + + free ( my_filter_name ); + my_filter_name = NULL; + +INVALID CODE: + + void setup_my_filter ( sphinx_client * client ) + { + char buffer[256]; + strncpy ( buffer, "test", sizeof(buffer) ); + + // INVALID! by the time when sphinx_query() is called, + // buffer will be out of scope + sphinx_add_filter_range ( client, buffer, 10, 20, false ); + } + + setup_my_filter ( client ); + result = sphinx_query ( client ); + +--eof-- diff --git a/coreseek/csft-4.1/api/libsphinxclient/build.mk b/coreseek/csft-4.1/api/libsphinxclient/build.mk new file mode 100755 index 0000000..d5d5ddb --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/build.mk @@ -0,0 +1,37 @@ + +SUPPRESS_WARNINGS = 2>&1 | (egrep -v '(AC_TRY_RUN called without default to allow cross compiling|AC_PROG_CXXCPP was called before AC_PROG_CXX|defined in acinclude.m4 but never used|AC_PROG_LEX invoked multiple times|AC_DECL_YYTEXT is expanded from...|the top level)'||true) + +AUTOCONF ?= 'autoconf' +ACLOCAL ?= 'aclocal' +AUTOHEADER ?= 'autoheader' +AUTOMAKE ?= 'automake' +AUTOUPDATE ?= 'autoupdate' +LIBTOOLIZE ?= 'libtoolize' + +config_h_in = sphinxclient_config.h.in +targets = $(config_h_in) configure makefiles + +all: $(targets) + +aclocal.m4: + $(ACLOCAL) + +$(config_h_in): configure + @echo rebuilding $@ + @rm -f $@ + $(AUTOHEADER) $(SUPPRESS_WARNINGS) + +configure: aclocal.m4 configure.in + @echo rebuilding $@ + $(LIBTOOLIZE) --copy + $(AUTOCONF) $(SUPPRESS_WARNINGS) + +makefiles: configure Makefile.am + @echo rebuilding Makefile.in files + $(AUTOMAKE) --add-missing --copy + +cvsclean: + @rm -rf *.lo *.la *.o *.a .libs Makefile Makefile.in stamp-h1 test sphinxclient_config.h* + rm -rf aclocal.m4 autom4te.cache install.sh libtool Makefile Makefile.in 'configure.in~' missing config.h* configure + rm -f config.guess config.log config.status config.sub cscope.out install-sh ltmain.sh + diff --git a/coreseek/csft-4.1/api/libsphinxclient/buildconf.sh b/coreseek/csft-4.1/api/libsphinxclient/buildconf.sh new file mode 100755 index 0000000..2679a37 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/buildconf.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +eval `grep '^EXTRA_VERSION=' configure.in` +case "$EXTRA_VERSION" in + *-dev) + rebuildok=1 + ;; + *) + rebuildok=0 + ;; +esac + +cvsclean=0 + +while test $# -gt 0; do + if test "$1" = "--force"; then + rebuildok=1 + echo "Forcing buildconf" + fi + if test "$1" = "--clean"; then + cvsclean=1 + fi + shift +done + +if test "$rebuildok" = "0"; then + echo "You should not run buildconf in a release package." + echo "use buildconf --force to override this check." + exit 1 +fi + +if test "$cvsclean" = "1"; then + echo "Cleaning autogenerated files" + ${MAKE:-make} -s -f build.mk cvsclean +else + ${MAKE:-make} -s -f build.mk +fi + diff --git a/coreseek/csft-4.1/api/libsphinxclient/config.guess b/coreseek/csft-4.1/api/libsphinxclient/config.guess new file mode 100755 index 0000000..2fc3acc --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/config.guess @@ -0,0 +1,1411 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-06-17' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +## for Red Hat Linux +if test -f /etc/redhat-release ; then + VENDOR=redhat ; +else + VENDOR= ; +fi + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha*:OpenVMS:*:*) + echo alpha-hp-vms + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*|*:GNU/FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR:-unknown}-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-${VENDOR:-unknown}-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-${VENDOR:-unknown}-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR:-ibm}-linux-gnu + exit 0 ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-${VENDOR:-unknown}-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR:-pc}-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +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` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/coreseek/csft-4.1/api/libsphinxclient/config.sub b/coreseek/csft-4.1/api/libsphinxclient/config.sub new file mode 100755 index 0000000..7cee3d6 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/config.sub @@ -0,0 +1,1500 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-06-18' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | s390 | s390x \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | s390-* | s390x-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/coreseek/csft-4.1/api/libsphinxclient/configure b/coreseek/csft-4.1/api/libsphinxclient/configure new file mode 100755 index 0000000..ff655ed --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/configure @@ -0,0 +1,20207 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59 for libsphinxclient 0.0.1. +# +# Copyright (C) 2003 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 Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +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 + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; 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'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# 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 + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + 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 + + ;; + 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_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + 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=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # 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 before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, 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 + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +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$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# 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'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +tagnames=${tagnames+${tagnames},}CXX + +tagnames=${tagnames+${tagnames},}F77 + +# 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` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='libsphinxclient' +PACKAGE_TARNAME='libsphinxclient' +PACKAGE_VERSION='0.0.1' +PACKAGE_STRING='libsphinxclient 0.0.1' +PACKAGE_BUGREPORT='' + +ac_unique_file="README" +ac_unique_file="sphinxclient.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +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 datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP LIBTOOL INSTALL_STRIP_FLAG LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# 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. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +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 + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -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 | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$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" ;; + + -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'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + 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 ;; + + -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 ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + 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 ;; + + -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'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + 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; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + 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 paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +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 + + +# 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 its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$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 + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP +ac_env_CXXCPP_set=${CXXCPP+set} +ac_env_CXXCPP_value=$CXXCPP +ac_cv_env_CXXCPP_set=${CXXCPP+set} +ac_cv_env_CXXCPP_value=$CXXCPP + +# +# 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 libsphinxclient 0.0.1 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 \`..'] + +_ACEOF + + cat <<_ACEOF +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] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --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] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of libsphinxclient 0.0.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] + build shared libraries [default=yes] + --enable-static[=PKGS] + build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-debug enable debugging symbols and compile flags + + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-tags[=TAGS] + include additional configurations [automatic] + +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 + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + 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 +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style 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 + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +libsphinxclient configure 0.0.1 +generated by GNU Autoconf 2.59 + +Copyright (C) 2003 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 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by libsphinxclient $as_me 0.0.1, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +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` +hostinfo = `(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 + +} >&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_sep= +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_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + 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: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +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, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf 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 -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >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 -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; 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 `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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 sphinxclient_config.h" + +am__api_version="1.9" +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +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 "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +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}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$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 + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='libsphinxclient' + VERSION='0.0.1' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +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_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + +echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 +echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi; + echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 +echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +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 $as_executable_p "$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 + +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 $as_executable_p "$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 + +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 + + CC=$ac_ct_CC +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 $as_executable_p "$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 + +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 "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_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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +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 + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +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 + 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 $as_executable_p "$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 + +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 +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 $as_executable_p "$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 + +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 + + CC=$ac_ct_CC +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` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&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[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + 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 +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check 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' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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 | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; 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 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 +CFLAGS="-g" +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 + 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +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 ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=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 -std1 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 -std1. */ +int osf4_cc_array ['\x00' == 0 ? 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 +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f 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 +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 +if test "${lt_cv_path_SED+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && break + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +SED=$lt_cv_path_SED + +fi + +echo "$as_me:$LINENO: result: $SED" >&5 +echo "${ECHO_T}$SED" >&6 + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi; + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi; + +# Check whether --enable-fast-install or --disable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval="$enable_fast_install" + p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi; + +echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 +if test "${lt_cv_ld_reload_flag+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_ld_reload_flag='-r' +fi +echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' + +echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 +if test "${lt_cv_path_NM+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + esac + fi + done + IFS="$lt_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi +echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +echo "${ECHO_T}$lt_cv_path_NM" >&6 +NM="$lt_cv_path_NM" + +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + +echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 +if test "${lt_cv_deplibs_check_method+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump'. + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | kfreebsd*-gnu) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case "$host_cpu" in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux*) + case $host_cpu in + alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*|x86_64*) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +nto-qnx*) + lt_cv_deplibs_check_method=unknown + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 3668 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 +if test "${lt_cv_cc_needs_belf+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >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 conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + lt_cv_cc_needs_belf=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +lt_cv_cc_needs_belf=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + +esac + +need_locks="$enable_libtool_lock" + + +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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_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 + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+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. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + 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 (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + 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 (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+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. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in dlfcn.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the libsphinxclient lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +ac_ext=cc +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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_cxx_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_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=cc +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 + + + + + +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + +# find the maximum length of command line arguments +echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + *) + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ + = "XX$teststring") >/dev/null 2>&1 && + new_result=`expr "X$teststring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + teststring= + # Add a significant safety factor because C++ compilers can tack on massive + # amounts of additional arguments before passing them to the linker. + # It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 +else + echo "$as_me:$LINENO: result: none" >&5 +echo "${ECHO_T}none" >&6 +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris* | sysv5*) + symcode='[BDRT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if grep ' nm_test_var$' "$nlist" >/dev/null; then + if grep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + echo "$as_me:$LINENO: result: failed" >&5 +echo "${ECHO_T}failed" >&6 +else + echo "$as_me:$LINENO: result: ok" >&5 +echo "${ECHO_T}ok" >&6 +fi + +echo "$as_me:$LINENO: checking for objdir" >&5 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6 +if test "${lt_cv_objdir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +echo "${ECHO_T}$lt_cv_objdir" >&6 +objdir=$lt_cv_objdir + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +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_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +echo "${ECHO_T}$ac_ct_AR" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + AR=$ac_ct_AR +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +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 $as_executable_p "$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 + +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 $as_executable_p "$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 + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +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 + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +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_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$SED" && SED=sed +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo "$as_me:$LINENO: checking for file" >&5 +echo $ECHO_N "checking for file... $ECHO_C" >&6 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +echo "${ECHO_T}$MAGIC_CMD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +enable_dlopen=no +enable_win32_dll=no + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + +fi; +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + +# Check whether --with-pic or --without-pic was given. +if test "${with_pic+set}" = set; then + withval="$with_pic" + pic_mode="$withval" +else + pic_mode=default +fi; +test -z "$pic_mode" && pic_mode=default + +# Use C for the default configuration in the libtool script +tagname= +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}\n' + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# +# Check for any special shared library compilation flags. +# +lt_prog_cc_shlib= +if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + lt_prog_cc_shlib='-belf' + ;; + esac +fi +if test -n "$lt_prog_cc_shlib"; then + { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 +echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} + if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : + else + { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 +echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} + lt_cv_prog_cc_can_build_shared=no + fi +fi + + +# +# Check to make sure the static flag actually works. +# +echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 +echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 +if test "${lt_prog_compiler_static_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_prog_compiler_static" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + else + lt_prog_compiler_static_works=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 + +if test x"$lt_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:5576: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:5580: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic='-Kpic' + lt_prog_compiler_static='-dn' + ;; + + solaris*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:5809: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:5813: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 + +if test x"$lt_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:5869: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:5873: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag= + enable_shared_with_static_runtimes=no + archive_cmds= + archive_expsym_cmds= + old_archive_From_new_cmds= + old_archive_from_expsyms_cmds= + export_dynamic_flag_spec= + whole_archive_flag_spec= + thread_safe_flag_spec= + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_direct=no + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + link_all_deplibs=unknown + hardcode_automatic=no + module_cmds= + module_expsym_cmds= + always_export_symbols=no + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds="$tmp_archive_cmds" + fi + else + ld_shlibs=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an empty executable. + 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 conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + 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 conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec=' ' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + bsdi4*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + hardcode_shlibpath_var=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld='-rpath $libdir' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +echo "${ECHO_T}$ld_shlibs" >&6 +test "$ld_shlibs" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +echo "${ECHO_T}$archive_cmds_need_lc" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 7203 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var " || \ + test "X$hardcode_automatic"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action" >&5 +echo "${ECHO_T}$hardcode_action" >&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+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. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+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. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# Report which librarie types wil actually be built +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4* | aix5*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if test "$GCC" = yes; then + archive_cmds_need_lc=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + output_verbose_link_cmd='echo' + archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='-all_load $convenience' + link_all_deplibs=yes + else + ld_shlibs=no + fi + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler \ + CC \ + LD \ + lt_prog_compiler_wl \ + lt_prog_compiler_pic \ + lt_prog_compiler_static \ + lt_prog_compiler_no_builtin_flag \ + export_dynamic_flag_spec \ + thread_safe_flag_spec \ + whole_archive_flag_spec \ + enable_shared_with_static_runtimes \ + old_archive_cmds \ + old_archive_from_new_cmds \ + predep_objects \ + postdep_objects \ + predeps \ + postdeps \ + compiler_lib_search_path \ + archive_cmds \ + archive_expsym_cmds \ + postinstall_cmds \ + postuninstall_cmds \ + old_archive_from_expsyms_cmds \ + allow_undefined_flag \ + no_undefined_flag \ + export_symbols_cmds \ + hardcode_libdir_flag_spec \ + hardcode_libdir_flag_spec_ld \ + hardcode_libdir_separator \ + hardcode_automatic \ + module_cmds \ + module_expsym_cmds \ + lt_cv_prog_compiler_c_o \ + exclude_expsyms \ + include_expsyms; do + + case $var in + old_archive_cmds | \ + old_archive_from_new_cmds | \ + archive_cmds | \ + archive_expsym_cmds | \ + module_cmds | \ + module_expsym_cmds | \ + old_archive_from_expsyms_cmds | \ + export_symbols_cmds | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="${ofile}T" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + $rm -f "$cfgfile" + { echo "$as_me:$LINENO: creating $ofile" >&5 +echo "$as_me: creating $ofile" >&6;} + + cat <<__EOF__ >> "$cfgfile" +#! $SHELL + +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# +# This file is part of GNU Libtool: +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# The names of the tagged configurations supported by this script. +available_tags= + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + + case $host_os in + aix3*) + cat <<\EOF >> "$cfgfile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + 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 + +CC="$lt_save_CC" + + +# Check whether --with-tags or --without-tags was given. +if test "${with_tags+set}" = set; then + withval="$with_tags" + tagnames="$withval" +fi; + +if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + else + { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in + "") ;; + *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 +echo "$as_me: error: invalid tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} + { (exit 1); exit 1; }; } + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + ac_ext=cc +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 + + + + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_automatic_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +# Source file extension for C++ test sources. +ac_ext=cc + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(int, char *) { return(0); }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_LD=$LD +lt_save_GCC=$GCC +GCC=$GXX +lt_save_with_gnu_ld=$with_gnu_ld +lt_save_path_LD=$lt_cv_path_LD +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx +else + unset lt_cv_prog_gnu_ld +fi +if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX +else + unset lt_cv_path_LD +fi +test -z "${LDCXX+set}" || LD=$LDCXX +CC=${CXX-"c++"} +compiler=$CC +compiler_CXX=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +# We don't want -fno-exception wen compiling C++ code, so set the +# no_builtin_flag separately +if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +else + lt_prog_compiler_no_builtin_flag_CXX= +fi + +if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${lt_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${lt_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ + grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + +else + GXX=no + with_gnu_ld=no + wlarc= +fi + +# PORTME: fill in a description of your system's C++ link characteristics +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +ld_shlibs_CXX=yes +case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + + if test "$GXX" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_CXX=yes + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty executable. + 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 conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + 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 conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_CXX=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX=' ' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs_CXX=no + fi + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes; then + archive_cmds_need_lc_CXX=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_CXX='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_CXX='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_CXX='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_CXX='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='-all_load $convenience' + link_all_deplibs_CXX=yes + else + ld_shlibs_CXX=no + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + freebsd12*) + # C++ shared libraries reported to be fairly broken before switch to ELF + ld_shlibs_CXX=no + ;; + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + gnu*) + ;; + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC) + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_CXX='+b $libdir' + hardcode_libdir_separator_CXX=: + ;; + ia64*) + hardcode_libdir_flag_spec_CXX='-L$libdir' + ;; + *) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + ;; + linux*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + archive_cmds_need_lc_CXX=no + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + osf3*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + osf4* | osf5*) + case $cc_basename in + KCC) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ + $rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + sco*) + archive_cmds_need_lc_CXX=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.0-5 | solaris2.0-5.*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + archive_cmds_need_lc_CXX=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; +esac +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +GCC_CXX="$GXX" +LD_CXX="$LD" + + +cat > conftest.$ac_ext <&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + # The `*' in the case matches for architectures that use `case' in + # $output_verbose_cmd can trigger glob expansion during the loop + # eval without this substitution. + output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" + + for p in `eval $output_verbose_link_cmd`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" \ + || test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$rm -f confest.$objext + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + +lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | kfreebsd*-gnu) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + icpc) + # Intel C++ + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:10351: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:10355: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_CXX=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 + +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:10411: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:10415: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 +echo "${ECHO_T}$ld_shlibs_CXX" >&6 +test "$ld_shlibs_CXX" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 10922 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || \ + test -n "$runpath_var CXX" || \ + test "X$hardcode_automatic_CXX"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 +echo "${ECHO_T}$hardcode_action_CXX" >&6 + +if test "$hardcode_action_CXX" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+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. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+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. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_CXX \ + CC_CXX \ + LD_CXX \ + lt_prog_compiler_wl_CXX \ + lt_prog_compiler_pic_CXX \ + lt_prog_compiler_static_CXX \ + lt_prog_compiler_no_builtin_flag_CXX \ + export_dynamic_flag_spec_CXX \ + thread_safe_flag_spec_CXX \ + whole_archive_flag_spec_CXX \ + enable_shared_with_static_runtimes_CXX \ + old_archive_cmds_CXX \ + old_archive_from_new_cmds_CXX \ + predep_objects_CXX \ + postdep_objects_CXX \ + predeps_CXX \ + postdeps_CXX \ + compiler_lib_search_path_CXX \ + archive_cmds_CXX \ + archive_expsym_cmds_CXX \ + postinstall_cmds_CXX \ + postuninstall_cmds_CXX \ + old_archive_from_expsyms_cmds_CXX \ + allow_undefined_flag_CXX \ + no_undefined_flag_CXX \ + export_symbols_cmds_CXX \ + hardcode_libdir_flag_spec_CXX \ + hardcode_libdir_flag_spec_ld_CXX \ + hardcode_libdir_separator_CXX \ + hardcode_automatic_CXX \ + module_cmds_CXX \ + module_expsym_cmds_CXX \ + lt_cv_prog_compiler_c_o_CXX \ + exclude_expsyms_CXX \ + include_expsyms_CXX; do + + case $var in + old_archive_cmds_CXX | \ + old_archive_from_new_cmds_CXX | \ + archive_cmds_CXX | \ + archive_expsym_cmds_CXX | \ + module_cmds_CXX | \ + module_expsym_cmds_CXX | \ + old_archive_from_expsyms_cmds_CXX | \ + export_symbols_cmds_CXX | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_CXX + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_CXX +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_CXX + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_CXX + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_CXX" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + 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 + +CC=$lt_save_CC +LDCXX=$LD +LD=$lt_save_LD +GCC=$lt_save_GCC +with_gnu_ldcxx=$with_gnu_ld +with_gnu_ld=$lt_save_with_gnu_ld +lt_cv_path_LDCXX=$lt_cv_path_LD +lt_cv_path_LD=$lt_save_path_LD +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld + + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + +archive_cmds_need_lc_F77=no +allow_undefined_flag_F77= +always_export_symbols_F77=no +archive_expsym_cmds_F77= +export_dynamic_flag_spec_F77= +hardcode_direct_F77=no +hardcode_libdir_flag_spec_F77= +hardcode_libdir_flag_spec_ld_F77= +hardcode_libdir_separator_F77= +hardcode_minus_L_F77=no +hardcode_automatic_F77=no +module_cmds_F77= +module_expsym_cmds_F77= +link_all_deplibs_F77=unknown +old_archive_cmds_F77=$old_archive_cmds +no_undefined_flag_F77= +whole_archive_flag_spec_F77= +enable_shared_with_static_runtimes_F77=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +objext_F77=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code=" subroutine t\n return\n end\n" + +# Code to be used in simple link tests +lt_simple_link_test_code=" program t\n end\n" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${F77-"f77"} +compiler=$CC +compiler_F77=$CC +cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $can_build_shared" >&5 +echo "${ECHO_T}$can_build_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; +aix4* | aix5*) + test "$enable_shared" = yes && enable_static=no + ;; +esac +echo "$as_me:$LINENO: result: $enable_shared" >&5 +echo "${ECHO_T}$enable_shared" >&6 + +echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$as_me:$LINENO: result: $enable_static" >&5 +echo "${ECHO_T}$enable_static" >&6 + +test "$ld_shlibs_F77" = no && can_build_shared=no + +GCC_F77="$G77" +LD_F77="$LD" + +lt_prog_compiler_wl_F77= +lt_prog_compiler_pic_F77= +lt_prog_compiler_static_F77= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_static_F77='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_F77='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_F77=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_F77=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_F77='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_F77='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_F77='-Bstatic' + else + lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_F77='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_F77='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_F77='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_F77='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_F77='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-static' + ;; + ccc*) + lt_prog_compiler_wl_F77='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_F77='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_F77='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_F77='-Kpic' + lt_prog_compiler_static_F77='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_F77='-Qoption ld ' + lt_prog_compiler_pic_F77='-PIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_F77='-Wl,' + lt_prog_compiler_pic_F77='-KPIC' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_F77='-Kconform_pic' + lt_prog_compiler_static_F77='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_F77='-pic' + lt_prog_compiler_static_F77='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_F77"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_F77=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_F77" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12718: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:12722: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_F77=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 + +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then + case $lt_prog_compiler_pic_F77 in + "" | " "*) ;; + *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; + esac +else + lt_prog_compiler_pic_F77= + lt_prog_compiler_can_build_shared_F77=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_F77= + ;; + *) + lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_F77=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:12778: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:12782: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_F77=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_F77= + enable_shared_with_static_runtimes_F77=no + archive_cmds_F77= + archive_expsym_cmds_F77= + old_archive_From_new_cmds_F77= + old_archive_from_expsyms_cmds_F77= + export_dynamic_flag_spec_F77= + whole_archive_flag_spec_F77= + thread_safe_flag_spec_F77= + hardcode_libdir_flag_spec_F77= + hardcode_libdir_flag_spec_ld_F77= + hardcode_libdir_separator_F77= + hardcode_direct_F77=no + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=unsupported + link_all_deplibs_F77=unknown + hardcode_automatic_F77=no + module_cmds_F77= + module_expsym_cmds_F77= + always_export_symbols_F77=no + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_F77= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_F77=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_F77=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_F77=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_F77='-L$libdir' + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=no + enable_shared_with_static_runtimes_F77=yes + export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_F77=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + + sunos4*) + archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_F77="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds_F77="$tmp_archive_cmds" + fi + else + ld_shlibs_F77=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_F77=no + fi + ;; + esac + + if test "$ld_shlibs_F77" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_F77='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_F77= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_F77=unsupported + always_export_symbols_F77=yes + archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_F77=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_F77=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_F77='' + hardcode_direct_F77=yes + hardcode_libdir_separator_F77=':' + link_all_deplibs_F77=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_F77=yes + else + # We have old collect2 + hardcode_direct_F77=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_F77=yes + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_libdir_separator_F77= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_F77=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_F77='-berok' + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_f77_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_F77="-z nodefs" + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + cat >conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_f77_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_F77=' ${wl}-bernotok' + allow_undefined_flag_F77=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_F77=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_F77=' ' + archive_cmds_need_lc_F77=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_F77=no + ;; + + bsdi4*) + export_dynamic_flag_spec_F77=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_F77=' ' + allow_undefined_flag_F77=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_F77='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_F77=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_F77=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_F77='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_F77='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_F77='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_F77='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_F77=no + hardcode_automatic_F77=yes + hardcode_shlibpath_var_F77=unsupported + whole_archive_flag_spec_F77='-all_load $convenience' + link_all_deplibs_F77=yes + else + ld_shlibs_F77=no + fi + ;; + + dgux*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + freebsd1*) + ld_shlibs_F77=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_F77='+b $libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + ;; + ia64*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=no + hardcode_shlibpath_var_F77=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + *) + hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_direct_F77=yes + export_dynamic_flag_spec_F77='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_F77=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + link_all_deplibs_F77=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + newsos6) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + hardcode_shlibpath_var_F77=no + ;; + + openbsd*) + hardcode_direct_F77=yes + hardcode_shlibpath_var_F77=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + export_dynamic_flag_spec_F77='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-R$libdir' + ;; + *) + archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_minus_L_F77=yes + allow_undefined_flag_F77=unsupported + archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_F77=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_F77=' -expect_unresolved \*' + archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_F77='-rpath $libdir' + fi + hardcode_libdir_separator_F77=: + ;; + + sco3.2v5*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_F77=' -z text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_F77='-R$libdir' + hardcode_shlibpath_var_F77=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_F77=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_direct_F77=yes + hardcode_minus_L_F77=yes + hardcode_shlibpath_var_F77=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_F77='$CC -r -o $output$reload_objs' + hardcode_direct_F77=no + ;; + motorola) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv4.3*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + export_dynamic_flag_spec_F77='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_F77=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_F77=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_F77=yes + hardcode_minus_L_F77=no + hardcode_shlibpath_var_F77=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_F77='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_F77=no + ;; + + sysv5*) + no_undefined_flag_F77=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec_F77= + hardcode_shlibpath_var_F77=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_F77='-L$libdir' + hardcode_shlibpath_var_F77=no + ;; + + *) + ld_shlibs_F77=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 +echo "${ECHO_T}$ld_shlibs_F77" >&6 +test "$ld_shlibs_F77" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_F77" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_F77=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_F77 in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_F77 + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_F77 + allow_undefined_flag_F77= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_F77=no + else + archive_cmds_need_lc_F77=yes + fi + allow_undefined_flag_F77=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 14092 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_F77= +if test -n "$hardcode_libdir_flag_spec_F77" || \ + test -n "$runpath_var F77" || \ + test "X$hardcode_automatic_F77"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_F77" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && + test "$hardcode_minus_L_F77" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_F77=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_F77=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_F77=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 +echo "${ECHO_T}$hardcode_action_F77" >&6 + +if test "$hardcode_action_F77" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_F77 \ + CC_F77 \ + LD_F77 \ + lt_prog_compiler_wl_F77 \ + lt_prog_compiler_pic_F77 \ + lt_prog_compiler_static_F77 \ + lt_prog_compiler_no_builtin_flag_F77 \ + export_dynamic_flag_spec_F77 \ + thread_safe_flag_spec_F77 \ + whole_archive_flag_spec_F77 \ + enable_shared_with_static_runtimes_F77 \ + old_archive_cmds_F77 \ + old_archive_from_new_cmds_F77 \ + predep_objects_F77 \ + postdep_objects_F77 \ + predeps_F77 \ + postdeps_F77 \ + compiler_lib_search_path_F77 \ + archive_cmds_F77 \ + archive_expsym_cmds_F77 \ + postinstall_cmds_F77 \ + postuninstall_cmds_F77 \ + old_archive_from_expsyms_cmds_F77 \ + allow_undefined_flag_F77 \ + no_undefined_flag_F77 \ + export_symbols_cmds_F77 \ + hardcode_libdir_flag_spec_F77 \ + hardcode_libdir_flag_spec_ld_F77 \ + hardcode_libdir_separator_F77 \ + hardcode_automatic_F77 \ + module_cmds_F77 \ + module_expsym_cmds_F77 \ + lt_cv_prog_compiler_c_o_F77 \ + exclude_expsyms_F77 \ + include_expsyms_F77; do + + case $var in + old_archive_cmds_F77 | \ + old_archive_from_new_cmds_F77 | \ + archive_cmds_F77 | \ + archive_expsym_cmds_F77 | \ + module_cmds_F77 | \ + module_expsym_cmds_F77 | \ + old_archive_from_expsyms_cmds_F77 | \ + export_symbols_cmds_F77 | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_F77 + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_F77 + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_F77 + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_F77 + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_F77 + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_F77 +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_F77 + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_F77 +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_F77 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77 +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_F77 +module_expsym_cmds=$lt_module_expsym_cmds_F77 + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_F77 + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_F77 + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_F77 + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_F77 + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_F77 + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_F77 + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_F77 + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_F77 + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_F77 + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_F77 + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_F77 + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_F77" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_F77 + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_F77 + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_F77 + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_F77 + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + 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 + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + + + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +objext_GCJ=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}\n" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${GCJ-"gcj"} +compiler=$CC +compiler_GCJ=$CC + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +archive_cmds_need_lc_GCJ=no + + +lt_prog_compiler_no_builtin_flag_GCJ= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' + + +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:14833: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:14837: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" +else + : +fi + +fi + +lt_prog_compiler_wl_GCJ= +lt_prog_compiler_pic_GCJ= +lt_prog_compiler_static_GCJ= + +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 + + if test "$GCC" = yes; then + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_static_GCJ='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_GCJ='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared_GCJ=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_GCJ=-Kconform_pic + fi + ;; + + hpux*) + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + ;; + + *) + lt_prog_compiler_pic_GCJ='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl_GCJ='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_GCJ='-Bstatic' + else + lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_GCJ='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl_GCJ='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + newsos6) + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + linux*) + case $CC in + icc* | ecc*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-static' + ;; + ccc*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl_GCJ='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static_GCJ='-non_shared' + ;; + + sco3.2v5*) + lt_prog_compiler_pic_GCJ='-Kpic' + lt_prog_compiler_static_GCJ='-dn' + ;; + + solaris*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sunos4*) + lt_prog_compiler_wl_GCJ='-Qoption ld ' + lt_prog_compiler_pic_GCJ='-PIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_prog_compiler_wl_GCJ='-Wl,' + lt_prog_compiler_pic_GCJ='-KPIC' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic_GCJ='-Kconform_pic' + lt_prog_compiler_static_GCJ='-Bstatic' + fi + ;; + + uts4*) + lt_prog_compiler_pic_GCJ='-pic' + lt_prog_compiler_static_GCJ='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_GCJ"; then + +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_prog_compiler_pic_works_GCJ=no + ac_outfile=conftest.$ac_objext + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_GCJ" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:15066: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:15070: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s conftest.err; then + lt_prog_compiler_pic_works_GCJ=yes + fi + fi + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 + +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then + case $lt_prog_compiler_pic_GCJ in + "" | " "*) ;; + *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; + esac +else + lt_prog_compiler_pic_GCJ= + lt_prog_compiler_can_build_shared_GCJ=no +fi + +fi +case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_GCJ= + ;; + *) + lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" + ;; +esac + +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + lt_cv_prog_compiler_c_o_GCJ=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:15126: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:15130: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test ! -s out/conftest.err; then + lt_cv_prog_compiler_c_o_GCJ=yes + fi + fi + chmod u+w . + $rm conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files + $rm out/* && rmdir out + cd .. + rmdir conftest + $rm conftest* + +fi +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$as_me:$LINENO: result: $hard_links" >&5 +echo "${ECHO_T}$hard_links" >&6 + if test "$hard_links" = no; then + { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 + + runpath_var= + allow_undefined_flag_GCJ= + enable_shared_with_static_runtimes_GCJ=no + archive_cmds_GCJ= + archive_expsym_cmds_GCJ= + old_archive_From_new_cmds_GCJ= + old_archive_from_expsyms_cmds_GCJ= + export_dynamic_flag_spec_GCJ= + whole_archive_flag_spec_GCJ= + thread_safe_flag_spec_GCJ= + hardcode_libdir_flag_spec_GCJ= + hardcode_libdir_flag_spec_ld_GCJ= + hardcode_libdir_separator_GCJ= + hardcode_direct_GCJ=no + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=unsupported + link_all_deplibs_GCJ=unknown + hardcode_automatic_GCJ=no + module_cmds_GCJ= + module_expsym_cmds_GCJ= + always_export_symbols_GCJ=no + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms_GCJ= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs_GCJ=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + ld_shlibs_GCJ=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_GCJ=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_GCJ='-L$libdir' + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=no + enable_shared_with_static_runtimes_GCJ=yes + export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs_GCJ=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + + sunos4*) + archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_cmds_GCJ="$tmp_archive_cmds" + supports_anon_versioning=no + case `$LD -v 2>/dev/null` in + *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + if test $supports_anon_versioning = yes; then + archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ +cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ +$echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + else + archive_expsym_cmds_GCJ="$tmp_archive_cmds" + fi + else + ld_shlibs_GCJ=no + fi + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs_GCJ=no + fi + ;; + esac + + if test "$ld_shlibs_GCJ" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_GCJ= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag_GCJ=unsupported + always_export_symbols_GCJ=yes + archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L_GCJ=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct_GCJ=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_GCJ='' + hardcode_direct_GCJ=yes + hardcode_libdir_separator_GCJ=':' + link_all_deplibs_GCJ=yes + + if test "$GCC" = yes; then + case $host_os in aix4.012|aix4.012.*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct_GCJ=yes + else + # We have old collect2 + hardcode_direct_GCJ=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_GCJ=yes + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_libdir_separator_GCJ= + fi + esac + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols_GCJ=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_GCJ='-berok' + # Determine the default libpath from the value encoded in an empty executable. + 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 conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_GCJ="-z nodefs" + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + 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 conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'`; fi +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_GCJ=' ${wl}-bernotok' + allow_undefined_flag_GCJ=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + always_export_symbols_GCJ=yes + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_GCJ=' ' + archive_cmds_need_lc_GCJ=yes + # This is similar to how AIX traditionally builds it's shared libraries. + archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + # see comment about different semantics on the GNU ld section + ld_shlibs_GCJ=no + ;; + + bsdi4*) + export_dynamic_flag_spec_GCJ=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_GCJ=' ' + allow_undefined_flag_GCJ=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_From_new_cmds_GCJ='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes_GCJ=yes + ;; + + darwin* | rhapsody*) + if test "$GXX" = yes ; then + archive_cmds_need_lc_GCJ=no + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag_GCJ='-undefined suppress' + ;; + *) # Darwin 1.3 on + if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then + allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' + else + case ${MACOSX_DEPLOYMENT_TARGET} in + 10.[012]) + allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' + ;; + 10.*) + allow_undefined_flag_GCJ='-undefined dynamic_lookup' + ;; + esac + fi + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + fi + module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + hardcode_direct_GCJ=no + hardcode_automatic_GCJ=yes + hardcode_shlibpath_var_GCJ=unsupported + whole_archive_flag_spec_GCJ='-all_load $convenience' + link_all_deplibs_GCJ=yes + else + ld_shlibs_GCJ=no + fi + ;; + + dgux*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + freebsd1*) + ld_shlibs_GCJ=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | kfreebsd*-gnu) + archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + ;; + ia64*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=no + hardcode_shlibpath_var_GCJ=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + *) + hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_direct_GCJ=yes + export_dynamic_flag_spec_GCJ='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L_GCJ=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + link_all_deplibs_GCJ=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + newsos6) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + hardcode_shlibpath_var_GCJ=no + ;; + + openbsd*) + hardcode_direct_GCJ=yes + hardcode_shlibpath_var_GCJ=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + export_dynamic_flag_spec_GCJ='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-R$libdir' + ;; + *) + archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_minus_L_GCJ=yes + allow_undefined_flag_GCJ=unsupported + archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_GCJ=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag_GCJ=' -expect_unresolved \*' + archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec_GCJ='-rpath $libdir' + fi + hardcode_libdir_separator_GCJ=: + ;; + + sco3.2v5*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag_GCJ=' -z text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + fi + hardcode_libdir_flag_spec_GCJ='-R$libdir' + hardcode_shlibpath_var_GCJ=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs_GCJ=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=yes + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds_GCJ='$CC -r -o $output$reload_objs' + hardcode_direct_GCJ=no + ;; + motorola) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv4.3*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + export_dynamic_flag_spec_GCJ='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var_GCJ=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs_GCJ=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct_GCJ=yes + hardcode_minus_L_GCJ=no + hardcode_shlibpath_var_GCJ=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + no_undefined_flag_GCJ='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var_GCJ=no + ;; + + sysv5*) + no_undefined_flag_GCJ=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec_GCJ= + hardcode_shlibpath_var_GCJ=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec_GCJ='-L$libdir' + hardcode_shlibpath_var_GCJ=no + ;; + + *) + ld_shlibs_GCJ=no + ;; + esac + fi + +echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6 +test "$ld_shlibs_GCJ" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_GCJ" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_GCJ=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_GCJ in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + $rm conftest* + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_GCJ + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ + allow_undefined_flag_GCJ= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc_GCJ=no + else + archive_cmds_need_lc_GCJ=yes + fi + allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 + ;; + esac + fi + ;; +esac + +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + else + sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +kfreebsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.01* | freebsdelf3.01*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case "$host_cpu" in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # find out which ABI we are using + libsuff= + case "$host_cpu" in + x86_64*|s390x*|powerpc64*) + echo '#line 16460 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *64-bit*) + libsuff=64 + sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/local/lib${libsuff}" + ;; + esac + fi + rm -rf conftest* + ;; + esac + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +knetbsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +nto-qnx*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=yes + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +echo "${ECHO_T}$dynamic_linker" >&6 +test "$dynamic_linker" = no && can_build_shared=no + +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +hardcode_action_GCJ= +if test -n "$hardcode_libdir_flag_spec_GCJ" || \ + test -n "$runpath_var GCJ" || \ + test "X$hardcode_automatic_GCJ"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct_GCJ" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && + test "$hardcode_minus_L_GCJ" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_GCJ=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_GCJ=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_GCJ=unsupported +fi +echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 +echo "${ECHO_T}$hardcode_action_GCJ" >&6 + +if test "$hardcode_action_GCJ" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +striplib= +old_striplib= +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + *) + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + ;; + esac +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + echo "$as_me:$LINENO: checking for shl_load" >&5 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 +if test "${ac_cv_func_shl_load+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. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +char (*f) () = shl_load; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != shl_load; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6 +if test $ac_cv_func_shl_load = yes; then + lt_cv_dlopen="shl_load" +else + echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load (); +int +main () +{ +shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_shl_load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_shl_load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 +if test $ac_cv_lib_dld_shl_load = yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$as_me:$LINENO: checking for dlopen" >&5 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 +if test "${ac_cv_func_dlopen+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. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +char (*f) () = dlopen; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != dlopen; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6 +if test $ac_cv_func_dlopen = yes; then + lt_cv_dlopen="dlopen" +else + echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dl_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dl_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 +if test $ac_cv_lib_dl_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen (); +int +main () +{ +dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_svld_dlopen=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_svld_dlopen=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 +if test $ac_cv_lib_svld_dlopen = yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link (); +int +main () +{ +dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_dld_dld_link=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_dld_dld_link=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 +if test $ac_cv_lib_dld_dld_link = yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_GCJ \ + CC_GCJ \ + LD_GCJ \ + lt_prog_compiler_wl_GCJ \ + lt_prog_compiler_pic_GCJ \ + lt_prog_compiler_static_GCJ \ + lt_prog_compiler_no_builtin_flag_GCJ \ + export_dynamic_flag_spec_GCJ \ + thread_safe_flag_spec_GCJ \ + whole_archive_flag_spec_GCJ \ + enable_shared_with_static_runtimes_GCJ \ + old_archive_cmds_GCJ \ + old_archive_from_new_cmds_GCJ \ + predep_objects_GCJ \ + postdep_objects_GCJ \ + predeps_GCJ \ + postdeps_GCJ \ + compiler_lib_search_path_GCJ \ + archive_cmds_GCJ \ + archive_expsym_cmds_GCJ \ + postinstall_cmds_GCJ \ + postuninstall_cmds_GCJ \ + old_archive_from_expsyms_cmds_GCJ \ + allow_undefined_flag_GCJ \ + no_undefined_flag_GCJ \ + export_symbols_cmds_GCJ \ + hardcode_libdir_flag_spec_GCJ \ + hardcode_libdir_flag_spec_ld_GCJ \ + hardcode_libdir_separator_GCJ \ + hardcode_automatic_GCJ \ + module_cmds_GCJ \ + module_expsym_cmds_GCJ \ + lt_cv_prog_compiler_c_o_GCJ \ + exclude_expsyms_GCJ \ + include_expsyms_GCJ; do + + case $var in + old_archive_cmds_GCJ | \ + old_archive_from_new_cmds_GCJ | \ + archive_cmds_GCJ | \ + archive_expsym_cmds_GCJ | \ + module_cmds_GCJ | \ + module_expsym_cmds_GCJ | \ + old_archive_from_expsyms_cmds_GCJ | \ + export_symbols_cmds_GCJ | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_GCJ + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_GCJ + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_GCJ + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_GCJ + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_GCJ + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_GCJ +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_GCJ + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_GCJ +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_GCJ +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_GCJ +module_expsym_cmds=$lt_module_expsym_cmds_GCJ + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_GCJ + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_GCJ + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_GCJ + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_GCJ + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_GCJ + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_GCJ + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_GCJ + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_GCJ + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_GCJ + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_GCJ + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_GCJ" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_GCJ + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_GCJ + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_GCJ + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_GCJ + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + 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 + +CC="$lt_save_CC" + + else + tagname="" + fi + ;; + + RC) + + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +lt_cv_prog_compiler_c_o_RC=yes + +# The else clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + # See if we are running on zsh, and set the options which allow our commands through + # without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ + SED SHELL STRIP \ + libname_spec library_names_spec soname_spec extract_expsyms_cmds \ + old_striplib striplib file_magic_cmd finish_cmds finish_eval \ + deplibs_check_method reload_flag reload_cmds need_locks \ + lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ + lt_cv_sys_global_symbol_to_c_name_address \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + old_postinstall_cmds old_postuninstall_cmds \ + compiler_RC \ + CC_RC \ + LD_RC \ + lt_prog_compiler_wl_RC \ + lt_prog_compiler_pic_RC \ + lt_prog_compiler_static_RC \ + lt_prog_compiler_no_builtin_flag_RC \ + export_dynamic_flag_spec_RC \ + thread_safe_flag_spec_RC \ + whole_archive_flag_spec_RC \ + enable_shared_with_static_runtimes_RC \ + old_archive_cmds_RC \ + old_archive_from_new_cmds_RC \ + predep_objects_RC \ + postdep_objects_RC \ + predeps_RC \ + postdeps_RC \ + compiler_lib_search_path_RC \ + archive_cmds_RC \ + archive_expsym_cmds_RC \ + postinstall_cmds_RC \ + postuninstall_cmds_RC \ + old_archive_from_expsyms_cmds_RC \ + allow_undefined_flag_RC \ + no_undefined_flag_RC \ + export_symbols_cmds_RC \ + hardcode_libdir_flag_spec_RC \ + hardcode_libdir_flag_spec_ld_RC \ + hardcode_libdir_separator_RC \ + hardcode_automatic_RC \ + module_cmds_RC \ + module_expsym_cmds_RC \ + lt_cv_prog_compiler_c_o_RC \ + exclude_expsyms_RC \ + include_expsyms_RC; do + + case $var in + old_archive_cmds_RC | \ + old_archive_from_new_cmds_RC | \ + archive_cmds_RC | \ + archive_expsym_cmds_RC | \ + module_cmds_RC | \ + module_expsym_cmds_RC | \ + old_archive_from_expsyms_cmds_RC | \ + export_symbols_cmds_RC | \ + extract_expsyms_cmds | reload_cmds | finish_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case $lt_echo in + *'\$0 --fallback-echo"') + lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + +cfgfile="$ofile" + + cat <<__EOF__ >> "$cfgfile" +# ### BEGIN LIBTOOL TAG CONFIG: $tagname + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A C compiler. +LTCC=$lt_LTCC + +# A language-specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC_RC + +# An ERE matcher. +EGREP=$lt_EGREP + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$lt_STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Shared library suffix (normally ".so"). +shrext_cmds='$shrext_cmds' + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC +pic_mode=$pic_mode + +# What is the maximum length of a command? +max_cmd_len=$lt_cv_sys_max_cmd_len + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds_RC +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to build a loadable module (assumed same as above if empty) +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Dependencies to place before the objects being linked to create a +# shared library. +predep_objects=$lt_predep_objects_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdep_objects=$lt_postdep_objects_RC + +# Dependencies to place before the objects being linked to create a +# shared library. +predeps=$lt_predeps_RC + +# Dependencies to place after the objects being linked to create a +# shared library. +postdeps=$lt_postdeps_RC + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_RC + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into +# a binary during linking. This must work even if \$libdir does +# not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to yes if building a shared library automatically hardcodes DIR into the library +# and all subsequent libraries and executables linked against it. +hardcode_automatic=$hardcode_automatic_RC + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path_RC" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# ### END LIBTOOL TAG CONFIG: $tagname + +__EOF__ + + +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` + if test -f "$ltmain_in"; then + test -f Makefile && make "$ltmain" + 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 + +CC="$lt_save_CC" + + ;; + + *) + { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;} + { (exit 1); exit 1; }; } + fi +fi + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + + + + + + + + + + + + + + + + + + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +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 "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +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}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + +echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6 +if test "${ac_cv_type_size_t+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. */ +$ac_includes_default +int +main () +{ +if ((size_t *) 0) + return 0; +if (sizeof (size_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_size_t=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6 +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned +_ACEOF + +fi + + + + + + +for ac_header in string.h strings.h unistd.h stdint.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------------ ## +## Report this to the libsphinxclient lists. ## +## ------------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +DEFAULT_INSTALL_PREFIX="/usr/local" + +# Check whether --enable-debug or --disable-debug was given. +if test "${enable_debug+set}" = set; then + enableval="$enable_debug" + + if test x"$enableval" = xyes ; then + debug="yes" + else + debug="no" + fi + + +fi; + +if test x"$debug" = xyes ; then + +cat >>confdefs.h <<\_ACEOF +#define SPHINXCLIENT_DEBUG +_ACEOF + + + if test x"$GCC" = xyes; then + + + CFLAGS=`echo "$CFLAGS" | /usr/bin/sed -e 's/-O[0-9s]*//g'` + CFLAGS=`echo "$CFLAGS" | /usr/bin/sed -e 's/-g[0-2]\? //g'` + + CFLAGS="$CFLAGS -g3 -Wall -O0" + + fi + + INSTALL_STRIP_FLAG="" +else + INSTALL_STRIP_FLAG="-s" +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, don't put newlines in cache variables' values. +# 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. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *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 \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!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 "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + 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}' + +# 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 + +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_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${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 Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +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 + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; 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'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# 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 + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + 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 + + ;; + 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_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + 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=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # 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 before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, 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 + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +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$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# 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'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by libsphinxclient $as_me 0.0.1, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +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, 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 + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +libsphinxclient config.status 0.0.1 +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_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 + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +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 0 ;; + --debug | --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;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +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" ;; + + 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 $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "sphinxclient_config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS sphinxclient_config.h" ;; + *) { { 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 + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $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 -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# 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 + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@mkdir_p@,$mkdir_p,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@AMTAR@,$AMTAR,;t t +s,@am__tar@,$am__tar,;t t +s,@am__untar@,$am__untar,;t t +s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t +s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t +s,@MAINT@,$MAINT,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@EGREP@,$EGREP,;t t +s,@LN_S@,$LN_S,;t t +s,@ECHO@,$ECHO,;t t +s,@AR@,$AR,;t t +s,@ac_ct_AR@,$ac_ct_AR,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@CPP@,$CPP,;t t +s,@CXXCPP@,$CXXCPP,;t t +s,@LIBTOOL@,$LIBTOOL,;t t +s,@INSTALL_STRIP_FLAG@,$INSTALL_STRIP_FLAG,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$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'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$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'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # 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. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +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,@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,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #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. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # 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. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + 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 + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$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'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$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'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$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'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$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'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$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'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (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/coreseek/csft-4.1/api/libsphinxclient/configure.in b/coreseek/csft-4.1/api/libsphinxclient/configure.in new file mode 100755 index 0000000..d7dd8c9 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/configure.in @@ -0,0 +1,75 @@ +dnl this file has to be processed by autoconf +AC_PREREQ(2.59) + +MAJOR_VERSION=0 +MINOR_VERSION=0 +BUGFIX_VERSION=1 +EXTRA_VERSION="-dev" + +LIBSPHINXCLIENT_VERSION="${MAJOR_VERSION}.${MINOR_VERSION}.${BUGFIX_VERSION}${EXTRA_VERSION}" + +AC_INIT([libsphinxclient],[0.0.1]) +AC_CONFIG_SRCDIR([README]) +AC_CONFIG_SRCDIR(sphinxclient.h) +AC_CONFIG_HEADERS(sphinxclient_config.h) +AM_INIT_AUTOMAKE([no-define]) +AM_MAINTAINER_MODE + +dnl Checks for programs. +AC_PROG_CC +AC_PROG_LD + +m4_undefine([AC_PROG_CXX]) +m4_defun([AC_PROG_CXX],[]) +m4_undefine([AC_PROG_F77]) +m4_defun([AC_PROG_F77],[]) +AM_PROG_LIBTOOL + +AC_PROG_INSTALL + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_SIZE_T + +dnl Checks for header files. +AC_CHECK_HEADERS(string.h strings.h unistd.h stdint.h) + +DEFAULT_INSTALL_PREFIX="/usr/local" + +AC_ARG_ENABLE(debug, + [AS_HELP_STRING([--enable-debug],[enable debugging symbols and compile flags]) + ], + [ + if test x"$enableval" = xyes ; then + debug="yes" + else + debug="no" + fi + ] +) + +if test x"$debug" = xyes ; then + AC_DEFINE([SPHINXCLIENT_DEBUG], [], [debug build]) + + if test x"$GCC" = xyes; then + + dnl Remove any optimization flags from CFLAGS + changequote({,}) + CFLAGS=`echo "$CFLAGS" | /usr/bin/sed -e 's/-O[0-9s]*//g'` + CFLAGS=`echo "$CFLAGS" | /usr/bin/sed -e 's/-g[0-2]\? //g'` + changequote([,]) + CFLAGS="$CFLAGS -g3 -Wall -O0" + + fi + + dnl Do not strip symbols from developer object files. + INSTALL_STRIP_FLAG="" +else + dnl Make sure to strip symbols from non-developer object files. + INSTALL_STRIP_FLAG="-s" +fi + +AC_SUBST(INSTALL_STRIP_FLAG) + +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT + diff --git a/coreseek/csft-4.1/api/libsphinxclient/install-sh b/coreseek/csft-4.1/api/libsphinxclient/install-sh new file mode 100755 index 0000000..dd97db7 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/install-sh @@ -0,0 +1,322 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2004-09-10.20 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +chmodcmd="$chmodprog 0755" +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= +dstarg= +no_target_directory= + +usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: +-c (ignored) +-d create directories instead of installing files. +-g GROUP $chgrpprog installed files to GROUP. +-m MODE $chmodprog installed files to MODE. +-o USER $chownprog installed files to USER. +-s $stripprog installed files. +-t DIRECTORY install into DIRECTORY. +-T report an error if DSTFILE is a directory. +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test -n "$1"; do + case $1 in + -c) shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit 0;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t) dstarg=$2 + shift + shift + continue;; + + -T) no_target_directory=true + shift + continue;; + + --version) echo "$0 $scriptversion"; exit 0;; + + *) # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + test -n "$dir_arg$dstarg" && break + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dstarg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dstarg" + shift # fnord + fi + shift # arg + dstarg=$arg + done + break;; + esac +done + +if test -z "$1"; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + src= + + if test -d "$dst"; then + mkdircmd=: + chmodcmd= + else + mkdircmd=$mkdirprog + fi + else + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dstarg: Is a directory" >&2 + exit 1 + fi + dst=$dst/`basename "$src"` + fi + fi + + # This sed command emulates the dirname command. + dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + + # Skip lots of stat calls in the usual case. + if test ! -d "$dstdir"; then + defaultIFS=' + ' + IFS="${IFS-$defaultIFS}" + + oIFS=$IFS + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` + IFS=$oIFS + + pathcomp= + + while test $# -ne 0 ; do + pathcomp=$pathcomp$1 + shift + if test ! -d "$pathcomp"; then + $mkdirprog "$pathcomp" + # mkdir can fail with a `File exist' error in case several + # install-sh are creating the directory concurrently. This + # is OK. + test -d "$pathcomp" || exit + fi + pathcomp=$pathcomp/ + done + fi + + if test -n "$dir_arg"; then + $doit $mkdircmd "$dst" \ + && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } + + else + dstfile=`basename "$dst"` + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + trap '(exit $?); exit' 1 2 13 15 + + # Copy the file name to the temp name. + $doit $cpprog "$src" "$dsttmp" && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ + || { + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + if test -f "$dstdir/$dstfile"; then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ + || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ + || { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + } + } + fi || { (exit 1); exit; } +done + +# The final little trick to "correctly" pass the exit status to the exit trap. +{ + (exit 0); exit +} + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/csft-4.1/api/libsphinxclient/libsphinxclient.vcproj b/coreseek/csft-4.1/api/libsphinxclient/libsphinxclient.vcproj new file mode 100755 index 0000000..54bb68e --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/libsphinxclient.vcproj @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/api/libsphinxclient/ltmain.sh b/coreseek/csft-4.1/api/libsphinxclient/ltmain.sh new file mode 100755 index 0000000..23f82e3 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/ltmain.sh @@ -0,0 +1,6425 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +basename="s,^.*/,,g" + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# RH: define SED for historic ltconfig's generated by Libtool 1.3 +[ -z "$SED" ] && SED=sed + +# The name of this program: +progname=`echo "$progpath" | $SED $basename` +modename="$progname" + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.5.6 +TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42)" + + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +##################################### +# Shell function definitions: +# This seems to be the best place for them + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () { + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` + if test "X$win32_nmres" = "Ximport" ; then + win32_libid_type="x86 archive import" + else + win32_libid_type="x86 archive static" + fi + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $echo $win32_libid_type +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () { + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + CC_quoted="$CC_quoted $arg" + done + case "$@ " in + " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit $EXIT_FAILURE +# else +# $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi +} +# End of Shell function definitions +##################################### + +# Darwin sucks +eval std_shrext=\"$shrext_cmds\" + +# Parse our command line options once, thoroughly. +while test "$#" -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + preserve_args="${preserve_args}=$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + $echo + $echo "Copyright (C) 2003 Free Software Foundation, Inc." + $echo "This is free software; see the source for copying conditions. There is NO" + $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit $EXIT_SUCCESS + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" + done + exit $EXIT_SUCCESS + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + preserve_args="$preserve_args $arg" + ;; + + --dry-run | -n) + run=: + ;; + + --features) + $echo "host: $host" + if test "$build_libtool_libs" = yes; then + $echo "enable shared libraries" + else + $echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + $echo "enable static libraries" + else + $echo "disable static libraries" + fi + exit $EXIT_SUCCESS + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + preserve_args="$preserve_args $arg" + ;; + + --tag) prevopt="--tag" prev=tag ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + preserve_args="$preserve_args --tag" + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE +fi + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + + for arg + do + case "$arg_mode" in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit $EXIT_FAILURE + fi + arg_mode=target + continue + ;; + + -static | -prefer-pic | -prefer-non-pic) + later="$later $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$base_compile $lastarg" + continue + ;; + + * ) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit $EXIT_FAILURE + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit $EXIT_FAILURE + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$progpath" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + $echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then + $echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit $EXIT_FAILURE + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit $EXIT_FAILURE + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit $EXIT_FAILURE + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit $EXIT_FAILURE + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs -framework System" + continue + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # gcc -m* arguments should be passed to the linker via $compiler_flags + # in order to pass architecture information to the linker + # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo + # but this is not reliable with gcc because gcc may use -mfoo to + # select a different linker, different libraries, etc, while + # -Wl,-mfoo simply passes -mfoo to the linker. + -m*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + if test "$with_gcc" = "yes" ; then + compiler_flags="$compiler_flags $arg" + fi + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit $EXIT_FAILURE + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit $EXIT_FAILURE + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$libobjs $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit $EXIT_FAILURE + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test "$status" -ne 0 && test ! -d "$output_objdir"; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplications in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + esac + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; then + $echo + $echo "*** Warning: Trying to link with static lib archive $deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because the file extensions .$libext of this argument makes me believe" + $echo "*** that it is just a static archive that I should not used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit $EXIT_FAILURE + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit $EXIT_FAILURE + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on + # some systems (darwin) + if test "$shouldnotlink" = yes && test "$pass" = link ; then + $echo + if test "$linkmode" = prog; then + $echo "*** Warning: Linking the executable $output against the loadable module" + else + $echo "*** Warning: Linking the shared library $output against the loadable module" + fi + $echo "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$extract_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + cmds=$old_archive_from_expsyms_cmds + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5* ) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against + # it, someone is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then + $echo "** Warning, lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $echo + $echo "** And there doesn't seem to be a static archive available" + $echo "** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit $EXIT_FAILURE + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $echo + $echo "*** Warning: This system can not link to static lib archive $lib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $echo "*** But as you try to build a module library, libtool will still create " + $echo "*** a static module, that should work as long as the dlopening application" + $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, + # but need to link against shared + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + # do not add paths which are already there + case " $newlib_search_path " in + *" $path "*) ;; + *) newlib_search_path="$newlib_search_path $path";; + esac + fi + path="" + ;; + *) + path="-L$path" + ;; + esac + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$depdepl $deplibs" ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit $EXIT_FAILURE + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$2" + number_minor="$3" + number_revision="$4" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + [0-9]*) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $revision in + [0-9]*) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + case $age in + [0-9]*) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit $EXIT_FAILURE + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$echo "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for file magic test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval $echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $echo + $echo "*** Warning: linker path does not have real file for library $a_deplib." + $echo "*** I have the capability to make that library automatically link in when" + $echo "*** you link to this library. But I can only do this if you have a" + $echo "*** shared version of the library, which you do not appear to have" + $echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $echo "*** with $libname and none of the candidates passed a file format test" + $echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $echo + if test "X$deplibs_check_method" = "Xnone"; then + $echo "*** Warning: inter-library dependencies are not supported in this platform." + else + $echo "*** Warning: inter-library dependencies are not known to be supported." + fi + $echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $echo + $echo "*** Warning: libtool could not satisfy all declared inter-library" + $echo "*** dependencies of module $libname. Therefore, libtool will create" + $echo "*** a static module, that should work as long as the dlopening" + $echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $echo + $echo "*** However, this would only work if libtool was able to extract symbol" + $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + $echo "*** not find such a program. So, this module is probably useless." + $echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $echo "*** The inter-library dependencies that have been dropped here will be" + $echo "*** automatically added whenever a program is linked with this library" + $echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $echo + $echo "*** Since this library must not contain undefined symbols," + $echo "*** because either the platform does not support them or" + $echo "*** it was explicitly requested with -no-undefined," + $echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$save_output-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$objlist $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$save_output-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$save_output-${k}.$objext + objlist=$obj + len=1 + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadale object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" + done + + $echo "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~\$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit $EXIT_FAILURE + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $run eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + cmds=$reload_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit $EXIT_FAILURE + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + cwrappersource=`$echo ${objdir}/lt-${output}.c` + cwrapper=`$echo ${output}.exe` + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef DIR_SEPARATOR +#define DIR_SEPARATOR '/' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +#define HAVE_DOS_BASED_FILE_SYSTEM +#ifndef DIR_SEPARATOR_2 +#define DIR_SEPARATOR_2 '\\' +#endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +const char *program_name = NULL; + +void * xmalloc (size_t num); +char * xstrdup (const char *string); +char * basename (const char *name); +char * fnqualify(const char *path); +char * strendzap(char *str, const char *pat); +void lt_fatal (const char *message, ...); + +int +main (int argc, char *argv[]) +{ + char **newargz; + int i; + + program_name = (char *) xstrdup ((char *) basename (argv[0])); + newargz = XMALLOC(char *, argc+2); +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = fnqualify(argv[0]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; +EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL +; +} + +char * +basename (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha (name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return (char *) base; +} + +char * +fnqualify(const char *path) +{ + size_t size; + char *p; + char tmp[LT_PATHMAX + 1]; + + assert(path != NULL); + + /* Is it qualified already? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha (path[0]) && path[1] == ':') + return xstrdup (path); +#endif + if (IS_DIR_SEPARATOR (path[0])) + return xstrdup (path); + + /* prepend the current directory */ + /* doesn't handle '~' */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ + p = XMALLOC(char, size); + sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); + return p; +} + +char * +strendzap(char *str, const char *pat) +{ + size_t len, patlen; + + assert(str != NULL); + assert(pat != NULL); + + len = strlen(str); + patlen = strlen(pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp(str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} +EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + $echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit $EXIT_FAILURE + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + $echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit $EXIT_FAILURE + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + $echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit $EXIT_FAILURE + fi +fi\ +" + chmod +x $output + fi + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + # GNU ar 2.10+ was changed to match POSIX; thus no paths are + # encoded into archives. This makes 'ar r' malfunction in + # this piecewise linking case whenever conflicting object + # names appear in distinct ar calls; check, warn and compensate. + if (for obj in $save_oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 + $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 + AR_FLAGS=cq + fi + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + eval cmd=\"$cmd\" + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit $EXIT_FAILURE + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit $EXIT_SUCCESS + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit $EXIT_FAILURE + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit $EXIT_FAILURE + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + cmds=$postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit $EXIT_FAILURE + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + save_umask=`umask` + umask 0077 + if $mkdir "$tmpdir"; then + umask $save_umask + else + umask $save_umask + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$old_striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + cmds=$old_postinstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + cmds=$finish_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit $EXIT_SUCCESS + + $echo "----------------------------------------------------------------------" + $echo "Libraries have been installed in:" + for libdir in $libdirs; do + $echo " $libdir" + done + $echo + $echo "If you ever happen to want to link against installed libraries" + $echo "in a given directory, LIBDIR, you must either use libtool, and" + $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + $echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + $echo " during execution" + fi + if test -n "$runpath_var"; then + $echo " - add LIBDIR to the \`$runpath_var' environment variable" + $echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $echo + $echo "See any operating system documentation about shared libraries for" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "----------------------------------------------------------------------" + exit $EXIT_SUCCESS + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit $EXIT_FAILURE + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit $EXIT_FAILURE + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit $EXIT_SUCCESS + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test "$mode" = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + cmds=$postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + cmds=$old_postuninstall_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" \ + && test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit $EXIT_FAILURE + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit $EXIT_FAILURE +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE. + +Report bugs to ." + exit $EXIT_SUCCESS + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit $EXIT_FAILURE + ;; +esac + +$echo +$echo "Try \`$modename --help' for more information about other modes." + +exit $EXIT_SUCCESS + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/coreseek/csft-4.1/api/libsphinxclient/missing b/coreseek/csft-4.1/api/libsphinxclient/missing new file mode 100755 index 0000000..64b5f90 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/missing @@ -0,0 +1,353 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2004-09-07.08 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit 0 + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit 0 + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case "$1" in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/csft-4.1/api/libsphinxclient/smoke_ref.txt b/coreseek/csft-4.1/api/libsphinxclient/smoke_ref.txt new file mode 100755 index 0000000..1efd803 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/smoke_ref.txt @@ -0,0 +1,213 @@ +exact_phrase=0 +n=1, res=this is my test text to be highlighted ... +n=2, res=another test text to be highlighted, below limit +n=3, res=test number three, without phrase match +n=4, res=final test, not only without ... with swapped phrase text test as well + +exact_phrase=1 +n=1, res=this is my test text to be highlighted ... +n=2, res=another test text to be highlighted, below limit +n=3, res=test number three, without phrase match +n=4, res=final test, not only without phrase match, but also above ... + +passage_boundary=zone +n=1, res= ... manager it. Is Filing this report and. It is signed hereby represent. That it is all information.are It or is cool It is cooler It is another ... + +passage_boundary=sentence +n=1, res= ... The institutional investment manager it. ... Is Filing this report and. ... It is signed hereby represent. ... That it is all information.are It or is cool It is cooler It is another place! ... + +build_keywords result: +1. tokenized=hello, normalized=hello, docs=0, hits=0 +2. tokenized=test, normalized=test, docs=3, hits=5 +3. tokenized=one, normalized=one, docs=1, hits=2 + +Query 'is' retrieved 4 of 4 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) +2. doc_id=2, weight=1304, idd=2, group_id=1, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6) +3. doc_id=3, weight=1304, idd=3, group_id=2, tag=(15), tag64=(15), tag2=(15) +4. doc_id=4, weight=1304, idd=4, group_id=2, tag=(7,40), tag64=(7,40), tag2=(7,40) + +Query 'is test' retrieved 3 of 3 matches. +Query stats: + 'is' found 4 times in 4 documents + 'test' found 5 times in 3 documents + +Matches: +1. doc_id=1, weight=101362, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) +2. doc_id=2, weight=101362, idd=2, group_id=1, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6) +3. doc_id=4, weight=1373, idd=4, group_id=2, tag=(7,40), tag64=(7,40), tag2=(7,40) + +Query 'test number' retrieved 3 of 3 matches. +Query stats: + 'test' found 5 times in 3 documents + 'number' found 3 times in 3 documents + +Matches: +1. doc_id=4, weight=101442, idd=4, group_id=2, tag=(7,40), tag64=(7,40), tag2=(7,40) +2. doc_id=1, weight=101432, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) +3. doc_id=2, weight=101432, idd=2, group_id=1, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6) + +Query 'is' retrieved 2 of 2 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=1, @count=2 +2. doc_id=3, weight=1304, idd=3, group_id=2, tag=(15), tag64=(15), tag2=(15), @groupby=2, @count=2 + +Query 'is' retrieved 9 of 9 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=1, @count=1 +2. doc_id=2, weight=1304, idd=2, group_id=1, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), @groupby=2, @count=1 +3. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=3, @count=1 +4. doc_id=2, weight=1304, idd=2, group_id=1, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), @groupby=4, @count=1 +5. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=5, @count=1 +6. doc_id=2, weight=1304, idd=2, group_id=1, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), @groupby=6, @count=1 +7. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=7, @count=2 +8. doc_id=3, weight=1304, idd=3, group_id=2, tag=(15), tag64=(15), tag2=(15), @groupby=15, @count=1 +9. doc_id=4, weight=1304, idd=4, group_id=2, tag=(7,40), tag64=(7,40), tag2=(7,40), @groupby=40, @count=1 + +Query 'is' retrieved 2 of 2 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) +2. doc_id=2, weight=1304, idd=2, group_id=1, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6) + +Query 'is' retrieved 2 of 2 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) +2. doc_id=4, weight=1304, idd=4, group_id=2, tag=(7,40), tag64=(7,40), tag2=(7,40) + +update success, 1 rows updated + +update mva success, 1 rows updated + +Query 'is' retrieved 4 of 4 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=4, weight=1304, idd=4, group_id=2, tag=(7,40), tag64=(7,40), tag2=(7,40) +2. doc_id=3, weight=1304, idd=3, group_id=2, tag=(7,77,177), tag64=(15), tag2=(15) +3. doc_id=2, weight=1304, idd=2, group_id=123, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6) +4. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) + +update success, 1 rows updated + +update success, 1 rows updated + +Query 'is' retrieved 4 of 4 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) +2. doc_id=2, weight=1304, idd=2, group_id=123, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6) +3. doc_id=3, weight=1304, idd=3, group_id=123, tag=(7,77,177), tag64=(15), tag2=(15) +4. doc_id=4, weight=1304, idd=4, group_id=123, tag=(7,40), tag64=(7,40), tag2=(7,40) + +Query 'is' retrieved 2 of 2 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=1, @count=1 +2. doc_id=2, weight=1304, idd=2, group_id=123, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), @groupby=123, @count=3 + +Query 'is' retrieved 10 of 10 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=1, @count=1 +2. doc_id=2, weight=1304, idd=2, group_id=123, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), @groupby=2, @count=1 +3. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=3, @count=1 +4. doc_id=2, weight=1304, idd=2, group_id=123, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), @groupby=4, @count=1 +5. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=5, @count=1 +6. doc_id=2, weight=1304, idd=2, group_id=123, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), @groupby=6, @count=1 +7. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), @groupby=7, @count=3 +8. doc_id=4, weight=1304, idd=4, group_id=123, tag=(7,40), tag64=(7,40), tag2=(7,40), @groupby=40, @count=1 +9. doc_id=3, weight=1304, idd=3, group_id=123, tag=(7,77,177), tag64=(15), tag2=(15), @groupby=77, @count=1 +10. doc_id=3, weight=1304, idd=3, group_id=123, tag=(7,77,177), tag64=(15), tag2=(15), @groupby=177, @count=1 + +Query 'is' retrieved 1 of 1 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) + +Query 'is' retrieved 3 of 3 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7) +2. doc_id=3, weight=1304, idd=3, group_id=123, tag=(7,77,177), tag64=(15), tag2=(15) +3. doc_id=4, weight=1304, idd=4, group_id=123, tag=(7,40), tag64=(7,40), tag2=(7,40) + +Query 'is' retrieved 4 of 4 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, group_id=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), q=1010 +2. doc_id=2, weight=1304, idd=2, group_id=123, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), q=123020 +3. doc_id=3, weight=1304, idd=3, group_id=123, tag=(7,77,177), tag64=(15), tag2=(15), q=123030 +4. doc_id=4, weight=1304, idd=4, group_id=123, tag=(7,40), tag64=(7,40), tag2=(7,40), q=123040 + +Query 'is' retrieved 4 of 4 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), group_id=1, q=1010 +2. doc_id=2, weight=1304, idd=2, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), group_id=2000, q=2000020 +3. doc_id=3, weight=1304, idd=3, tag=(7,77,177), tag64=(15), tag2=(15), group_id=123, q=123030 +4. doc_id=4, weight=1304, idd=4, tag=(7,40), tag64=(7,40), tag2=(7,40), group_id=123, q=123040 + +Query 'is' retrieved 3 of 3 matches. +Query stats: + 'is' found 4 times in 4 documents + +Matches: +1. doc_id=1, weight=1304, idd=1, tag=(1,3,5,7), tag64=(1,3,5,7), tag2=(1,3,5,7), group_id=1, q=1010, @groupby=1, @count=1 +2. doc_id=3, weight=1304, idd=3, tag=(7,77,177), tag64=(15), tag2=(15), group_id=123, q=123030, @groupby=123, @count=2 +3. doc_id=2, weight=1304, idd=2, tag=(2,4,6), tag64=(2,4,6), tag2=(2,4,6), group_id=2000, q=2000020, @groupby=2000, @count=1 + +connections: 17 +maxed_out: 0 +command_search: 16 +command_excerpt: 4 +command_update: 4 +command_keywords: 1 +command_persist: 1 +command_status: 1 +command_flushattrs: 0 +agent_connect: 0 +agent_retry: 0 +queries: 16 +dist_queries: 0 +query_cpu: OFF +dist_local: 0.000 +dist_wait: 0.000 +query_reads: OFF +query_readkb: OFF +avg_query_cpu: OFF +avg_dist_local: 0.000 +avg_dist_wait: 0.000 +avg_query_reads: OFF +avg_query_readkb: OFF + diff --git a/coreseek/csft-4.1/api/libsphinxclient/smoke_test.conf b/coreseek/csft-4.1/api/libsphinxclient/smoke_test.conf new file mode 100755 index 0000000..b72ca0f --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/smoke_test.conf @@ -0,0 +1,48 @@ + +source src1 +{ + type = mysql + + sql_host = localhost + sql_user = test + sql_pass = + sql_db = test + sql_port = 3306 # optional, default is 3306 + + sql_query = SELECT id, id as idd, group_id, title, content FROM documents + + sql_attr_uint = group_id + sql_attr_uint = idd + sql_attr_multi = uint tag from query; SELECT docid, tagid FROM tags + sql_attr_multi = bigint tag64 from query; SELECT docid, tagid FROM tags + sql_attr_multi = uint tag2 from query; SELECT docid, tagid FROM tags +} + + +index test1 +{ + source = src1 + path = ../../test/data/test1 + docinfo = extern + charset_type = utf-8 +} + +indexer +{ + mem_limit = 32M +} + + +searchd +{ + listen = 10312 + listen = 10306:mysql41 + read_timeout = 5 + max_children = 30 + pid_file = searchd.pid + log = ../../test/searchd.log + query_log = ../../test/query.log + max_matches = 1000 + workers = threads # for RT to work + binlog_path = +} diff --git a/coreseek/csft-4.1/api/libsphinxclient/smoke_test.sh b/coreseek/csft-4.1/api/libsphinxclient/smoke_test.sh new file mode 100755 index 0000000..cd17456 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/smoke_test.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +FAILLOG="/tmp/faillog1" +DIFF='smoke_diff.txt' +RES='smoke_test.txt' +REF='smoke_ref.txt' +LINE='-----------------------------\n' + +die() +{ + cat $FAILLOG + echo $LINE + [ ! "z$2" = "z" ] && { eval $2; echo "$LINE"; } + echo "C API:$1" + [ -e "$FAILLOG" ] && rm $FAILLOG + exit 1 +} + +cmd () +{ + echo "Executing: $1\n">$FAILLOG + eval $1 1>>$FAILLOG 2>&1 || die "$2" "$3" +} + +cmd "./configure --with-debug" "configure failed" +cmd "make clean" "make clean failed" +cmd "make" "make failed" + + +cmd "../../src/indexer -c smoke_test.conf --all" "indexing failed" +cmd "../../src/searchd -c smoke_test.conf --test" "searchd start failed" +cmd "./test --smoke --port 10312>$RES" "test --smoke --port 10312 failed" +cmd "../../src/searchd -c smoke_test.conf --stop" "searchd stop failed" + +cmd "make clean" " " + +cmd "diff --unified=3 $REF $RES >$DIFF" 'diff failed' "cat $DIFF" + +rm $RES +rm $DIFF +rm $FAILLOG + +echo "all ok" +exit 0 + diff --git a/coreseek/csft-4.1/api/libsphinxclient/sphinxclient.c b/coreseek/csft-4.1/api/libsphinxclient/sphinxclient.c new file mode 100755 index 0000000..1d8c61d --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/sphinxclient.c @@ -0,0 +1,2471 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU Library General Public License. You should +// have received a copy of the LGPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifdef _WIN32 +#if _MSC_VER>=1400 +// VS 2005 and above +#define _CRT_SECURE_NO_DEPRECATE 1 +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#else +// VS 2003 and below +#define vsnprintf _vsnprintf +#endif +#endif + +#include +#include +#include +#include + +#ifndef _WIN32 +#include "sphinxclient_config.h" +#endif + +#include "sphinxclient.h" + +#if _WIN32 + // Win-specific headers, calls, libraries + #include + #include + + #pragma comment(linker, "/defaultlib:wsock32.lib") + #pragma message("Automatically linking with wsock32.lib") + + #define EWOULDBLOCK WSAEWOULDBLOCK + #define EINTR WSAEINTR + +#else + // UNIX-specific headers and calls + #include + #include + #include + #include + #include + #include + #include + #include + #include +#endif + +////////////////////////////////////////////////////////////////////////// + +#define MAX_REQS 32 +#define CONNECT_TIMEOUT_MSEC 1000 +#define MAX_PACKET_LEN (8*1024*1024) + +enum +{ + SEARCHD_COMMAND_SEARCH = 0, + SEARCHD_COMMAND_EXCERPT = 1, + SEARCHD_COMMAND_UPDATE = 2, + SEARCHD_COMMAND_KEYWORDS = 3, + SEARCHD_COMMAND_PERSIST = 4, + SEARCHD_COMMAND_STATUS = 5 +}; + +enum +{ + VER_COMMAND_EXCERPT = 0x103, + VER_COMMAND_UPDATE = 0x102, + VER_COMMAND_KEYWORDS = 0x100, + VER_COMMAND_STATUS = 0x100 +}; + +////////////////////////////////////////////////////////////////////////// + +struct st_filter +{ + const char * attr; + int filter_type; + int num_values; + const sphinx_int64_t * values; + sphinx_int64_t umin; + sphinx_int64_t umax; + float fmin; + float fmax; + int exclude; +}; + + +union un_attr_value +{ + sphinx_int64_t int_value; + float float_value; + unsigned int * mva_value; + const char * string; +}; + + +struct st_override +{ + const char * attr; + const sphinx_uint64_t * docids; + int num_values; + const unsigned int * uint_values; +}; + + +struct st_sphinx_client +{ + unsigned short ver_search; ///< compatibility mode + sphinx_bool copy_args; ///< whether to create a copy of each passed argument + void * head_alloc; ///< head of client-owned allocations list + + const char * error; ///< last error + const char * warning; ///< last warning + char local_error_buf[256]; ///< buffer to store 'local' error messages (eg. connect() error) + + const char * host; + int port; + float timeout; + int offset; + int limit; + int mode; + int num_weights; + const int * weights; + int sort; + const char * sortby; + sphinx_uint64_t minid; + sphinx_uint64_t maxid; + const char * group_by; + int group_func; + const char * group_sort; + const char * group_distinct; + int max_matches; + int cutoff; + int retry_count; + int retry_delay; + const char * geoanchor_attr_lat; + const char * geoanchor_attr_long; + float geoanchor_lat; + float geoanchor_long; + int num_filters; + int max_filters; + struct st_filter * filters; + int num_index_weights; + const char ** index_weights_names; + const int * index_weights_values; + int ranker; + int max_query_time; + int num_field_weights; + const char ** field_weights_names; + const int * field_weights_values; + int num_overrides; + int max_overrides; + struct st_override * overrides; + const char * select_list; + + int num_reqs; + int req_lens [ MAX_REQS ]; + char * reqs [ MAX_REQS ]; + + int response_len; + char * response_buf; ///< where the buffer begins (might also contain heading warning) + char * response_start; ///< where the data to parse starts + + int num_results; + sphinx_result results [ MAX_REQS ]; + + int sock; ///< open socket for pconns; -1 if none + sphinx_bool persist; +}; + +////////////////////////////////////////////////////////////////////////// + +static void * chain ( sphinx_client * client, const void * ptr, size_t len ); +static const char * strchain ( sphinx_client * client, const char * s ); +static void unchain ( sphinx_client * client, const void * ptr ); +static void unchain_all ( sphinx_client * client ); + +sphinx_client * sphinx_create ( sphinx_bool copy_args ) +{ + sphinx_client * client; + int i; + + // allocate + client = malloc ( sizeof(sphinx_client) ); + if ( !client ) + return NULL; + + // initialize defaults and return + client->ver_search = 0x119; // 0x113 for 0.9.8, 0x116 for 0.9.9rc2 + client->copy_args = copy_args; + client->head_alloc = NULL; + + client->error = NULL; + client->warning = NULL; + client->local_error_buf[0] = '\0'; + + client->host = strchain ( client, "localhost" ); + client->port = 9312; + client->timeout = 0.0f; + client->offset = 0; + client->limit = 20; + client->mode = SPH_MATCH_ALL; + client->num_weights = 0; + client->weights = NULL; + client->sort = SPH_SORT_RELEVANCE; + client->sortby = NULL; + client->minid = 0; + client->maxid = 0; + client->group_by = NULL; + client->group_func = SPH_GROUPBY_ATTR; + client->group_sort = strchain ( client, "@groupby desc" ); + client->group_distinct = NULL; + client->max_matches = 1000; + client->cutoff = 0; + client->retry_count = 0; + client->retry_delay = 0; + client->geoanchor_attr_lat = NULL; + client->geoanchor_attr_long = NULL; + client->geoanchor_lat = 0.0f; + client->geoanchor_long = 0.0f; + client->num_filters = 0; + client->max_filters = 0; + client->filters = NULL; + client->num_index_weights = 0; + client->index_weights_names = NULL; + client->index_weights_values = NULL; + client->ranker = SPH_RANK_DEFAULT; + client->max_query_time = 0; + client->num_field_weights = 0; + client->field_weights_names = NULL; + client->field_weights_values = NULL; + client->num_overrides = 0; + client->max_overrides = 0; + client->overrides = NULL; + client->select_list = NULL; + + client->num_reqs = 0; + client->response_len = 0; + client->response_buf = NULL; + client->num_results = 0; + + for ( i=0; iresults[i].values_pool = NULL; + client->results[i].words = NULL; + client->results[i].fields = NULL; + client->results[i].attr_names = NULL; + client->results[i].attr_types = NULL; + } + + client->sock = -1; + client->persist = SPH_FALSE; + return client; +} + + +static void sphinx_free_results ( sphinx_client * client ) +{ + int i; + for ( i=0; inum_results; i++ ) + { + free ( client->results[i].values_pool ); + free ( client->results[i].words ); + free ( client->results[i].fields ); + free ( client->results[i].attr_names ); + free ( client->results[i].attr_types ); + + client->results[i].values_pool = NULL; + client->results[i].words = NULL; + client->results[i].fields = NULL; + client->results[i].attr_names = NULL; + client->results[i].attr_types = NULL; + } + client->num_results = 0; +} + + +void sock_close ( int sock ); + + +#define safe_free(_ptr) \ + if ( _ptr ) \ + { \ + free ( _ptr ); \ + _ptr = NULL; \ +} + + +void sphinx_cleanup ( sphinx_client * client ) +{ + int i; + if ( !client ) + return; + + for ( i=0; inum_reqs; i++ ) + safe_free ( client->reqs[i] ); + client->num_reqs = 0; + + sphinx_free_results ( client ); + client->num_results = 0; + + client->num_results = 0; + safe_free ( client->response_buf ); +} + + +void sphinx_destroy ( sphinx_client * client ) +{ + int i; + if ( !client ) + return; + + for ( i=0; inum_reqs; i++ ) + safe_free ( client->reqs[i] ); + + sphinx_free_results ( client ); + unchain_all ( client ); + safe_free ( client->filters ); + safe_free ( client->response_buf ); + + if ( client->sock>=0 ) + sock_close ( client->sock ); + + free ( client ); +} + + +const char * sphinx_error ( sphinx_client * client ) +{ + return client->error ? client->error : ""; +} + + +const char * sphinx_warning ( sphinx_client * client ) +{ + return client->warning ? client->warning : ""; +} + + +static void set_error ( sphinx_client * client, const char * template, ... ) +{ + va_list ap; + + if ( !client ) + return; + + va_start ( ap, template ); + vsnprintf ( client->local_error_buf, sizeof(client->local_error_buf), template, ap ); + va_end ( ap ); + + client->error = client->local_error_buf; + client->warning = NULL; +} + + +////////////////////////////////////////////////////////////////////////// + +struct st_memblock +{ + struct st_memblock * prev; + struct st_memblock * next; +}; + + +static void * chain ( sphinx_client * client, const void * ptr, size_t len ) +{ + struct st_memblock * entry; + + if ( !client->copy_args || !ptr ) + return (void*) ptr; + + entry = malloc ( sizeof(struct st_memblock) + len ); + if ( !entry ) + { + set_error ( client, "malloc() failed (bytes=%d)", sizeof(struct st_memblock) + len ); + return NULL; + } + + entry->prev = NULL; + entry->next = client->head_alloc; + if ( entry->next ) + entry->next->prev = entry; + client->head_alloc = entry; + + entry++; + memcpy ( entry, ptr, len ); + return entry; +} + + +static const char * strchain ( sphinx_client * client, const char * s ) +{ + return s ? chain ( client, s, 1+strlen(s) ) : NULL; +} + + +static void unchain ( sphinx_client * client, const void * ptr ) +{ + struct st_memblock * entry; + + if ( !client->copy_args || !ptr ) + return; + + entry = (struct st_memblock*) ptr; + entry--; + + if ( entry->prev ) + entry->prev->next = entry->next; + else + client->head_alloc = entry->next; + + if ( entry->next ) + entry->next->prev = entry->prev; + + free ( entry ); +} + + +static void unchain_all ( sphinx_client * client ) +{ + struct st_memblock *to_free, *cur; + + if ( !client || !client->copy_args ) + return; + + cur = client->head_alloc; + while ( cur ) + { + to_free = cur; + cur = cur->next; + free ( to_free ); + } + client->head_alloc = NULL; +} + +////////////////////////////////////////////////////////////////////////// + +sphinx_bool sphinx_set_server ( sphinx_client * client, const char * host, int port ) +{ + if ( !client || !host || !host[0] ) + { + set_error ( client, "invalid arguments (host must not be empty)" ); + return SPH_FALSE; + } + + unchain ( client, client->host ); + client->host = strchain ( client, host ); + client->port = port; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_connect_timeout ( sphinx_client * client, float seconds ) +{ + if ( !client ) + return SPH_FALSE; + + client->timeout = seconds; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_limits ( sphinx_client * client, int offset, int limit, int max_matches, int cutoff ) +{ + if ( !client || offset<0 || limit<=0 || max_matches<0 || cutoff<0 ) + { + if ( offset<0 ) set_error ( client, "invalid arguments (offset must be >= 0)" ); + else if ( limit<=0 ) set_error ( client, "invalid arguments (limit must be > 0)" ); + else if ( max_matches<0 ) set_error ( client, "invalid arguments (max_matches must be >= 0)" ); + else if ( cutoff<0 ) set_error ( client, "invalid arguments (cutoff must be >= 0)" ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + client->offset = offset; + client->limit = limit; + if ( max_matches>=0 ) + client->max_matches = max_matches; + if ( cutoff>=0 ) + client->cutoff = cutoff; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_max_query_time ( sphinx_client * client, int max_query_time ) +{ + if ( !client || max_query_time<=0 ) + { + set_error ( client, "invalid arguments (max_query_time must be > 0)" ); + return SPH_FALSE; + } + + client->max_query_time = max_query_time; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_match_mode ( sphinx_client * client, int mode ) +{ + if ( !client || modeSPH_MATCH_EXTENDED2 ) // FIXME? + { + set_error ( client, "invalid arguments (matching mode %d out of bounds)", mode ); + return SPH_FALSE; + } + + client->mode = mode; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_ranking_mode ( sphinx_client * client, int ranker ) +{ + if ( !client || rankerSPH_RANK_SPH04 ) // FIXME? + { + set_error ( client, "invalid arguments (ranking mode %d out of bounds)", ranker ); + return SPH_FALSE; + } + + client->ranker = ranker; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_sort_mode ( sphinx_client * client, int mode, const char * sortby ) +{ + if ( !client + || modeSPH_SORT_EXPR + || ( mode!=SPH_SORT_RELEVANCE && ( !sortby || !sortby[0] ) ) ) + { + if ( modeSPH_SORT_EXPR ) + { + set_error ( client, "invalid arguments (sorting mode %d out of bounds)", mode ); + + } else if ( mode!=SPH_SORT_RELEVANCE && ( !sortby || !sortby[0] ) ) + { + set_error ( client, "invalid arguments (sortby clause must not be empty)", mode ); + + } else + { + set_error ( client, "invalid arguments", mode ); + } + return SPH_FALSE; + } + + client->sort = mode; + unchain ( client, client->sortby ); + client->sortby = strchain ( client, sortby ); + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_field_weights ( sphinx_client * client, int num_weights, const char ** field_names, const int * field_weights ) +{ + int i; + + if ( !client || num_weights<=0 || !field_names || !field_weights ) + { + if ( num_weights<=0 ) set_error ( client, "invalid arguments (num_weights must be > 0)" ); + else if ( !field_names ) set_error ( client, "invalid arguments (field_names must not be NULL)" ); + else if ( !field_names ) set_error ( client, "invalid arguments (field_weights must not be NULL)" ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + if ( client->copy_args ) + { + for ( i=0; inum_field_weights; i++ ) + unchain ( client, client->field_weights_names[i] ); + unchain ( client, client->field_weights_names ); + unchain ( client, client->field_weights_values ); + + field_names = chain ( client, field_names, num_weights*sizeof(const char*) ); + for ( i=0; inum_field_weights = num_weights; + client->field_weights_names = field_names; + client->field_weights_values = field_weights; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_index_weights ( sphinx_client * client, int num_weights, const char ** index_names, const int * index_weights ) +{ + int i; + + if ( !client || num_weights<=0 || !index_names || !index_weights ) + { + if ( num_weights<=0 ) set_error ( client, "invalid arguments (num_weights must be > 0)" ); + else if ( !index_names ) set_error ( client, "invalid arguments (index_names must not be NULL)" ); + else if ( !index_names ) set_error ( client, "invalid arguments (index_weights must not be NULL)" ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + if ( client->copy_args ) + { + for ( i=0; inum_index_weights; i++ ) + unchain ( client, client->index_weights_names[i] ); + unchain ( client, client->index_weights_names ); + unchain ( client, client->index_weights_values ); + + index_names = chain ( client, index_names, num_weights*sizeof(const char*) ); + for ( i=0; inum_index_weights = num_weights; + client->index_weights_names = index_names; + client->index_weights_values = index_weights; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_id_range ( sphinx_client * client, sphinx_uint64_t minid, sphinx_uint64_t maxid ) +{ + if ( !client || minid>maxid ) + { + set_error ( client, "invalid arguments (minid must be <= maxid)" ); + return SPH_FALSE; + } + + client->minid = minid; + client->maxid = maxid; + return SPH_TRUE; +} + + +static struct st_filter * sphinx_add_filter_entry ( sphinx_client * client ) +{ + int len; + if ( client->num_filters>=client->max_filters ) + { + len = ( client->max_filters<=0 ) ? client->num_filters + 8 : 2*client->max_filters; + len *= sizeof(struct st_filter); + client->filters = realloc ( client->filters, len ); + if ( !client->filters ) + { + set_error ( client, "realloc() failed (bytes=%d)", len ); + return NULL; + } + } + return client->filters + client->num_filters++; +} + + +sphinx_bool sphinx_add_filter ( sphinx_client * client, const char * attr, int num_values, const sphinx_int64_t * values, sphinx_bool exclude ) +{ + struct st_filter * filter; + + if ( !client || !attr || num_values<=0 || !values ) + { + if ( !attr ) set_error ( client, "invalid arguments (attr must not be empty)" ); + else if ( num_values<=0 ) set_error ( client, "invalid arguments (num_values must be > 0)" ); + else if ( !values ) set_error ( client, "invalid arguments (values must not be NULL)" ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + filter = sphinx_add_filter_entry ( client ); + if ( !filter ) + return SPH_FALSE; + + filter->attr = strchain ( client, attr ); + filter->filter_type = SPH_FILTER_VALUES; + filter->num_values = num_values; + filter->values = chain ( client, values, num_values*sizeof(sphinx_int64_t) ); + filter->exclude = exclude; + return SPH_TRUE; +} + + +sphinx_bool sphinx_add_filter_range ( sphinx_client * client, const char * attr, sphinx_int64_t umin, sphinx_int64_t umax, sphinx_bool exclude ) +{ + struct st_filter * filter; + + if ( !client || !attr || umin>umax ) + { + if ( !attr ) set_error ( client, "invalid arguments (attr must not be empty)" ); + else if ( umin>umax ) set_error ( client, "invalid arguments (umin must be <= umax)" ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + filter = sphinx_add_filter_entry ( client ); + if ( !filter ) + return SPH_FALSE; + + filter->attr = strchain ( client, attr ); + filter->filter_type = SPH_FILTER_RANGE; + filter->umin = umin; + filter->umax = umax; + filter->exclude = exclude; + return SPH_TRUE; +} + + +sphinx_bool sphinx_add_filter_float_range ( sphinx_client * client, const char * attr, float fmin, float fmax, sphinx_bool exclude ) +{ + struct st_filter * filter; + + if ( !client || !attr || fmin>fmax ) + { + if ( !attr ) set_error ( client, "invalid arguments (attr must not be empty)" ); + else if ( fmin>fmax ) set_error ( client, "invalid arguments (fmin must be <= fmax)" ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + filter = sphinx_add_filter_entry ( client ); + if ( !filter ) + return SPH_FALSE; + + filter->attr = strchain ( client, attr ); + filter->filter_type = SPH_FILTER_FLOATRANGE; + filter->fmin = fmin; + filter->fmax = fmax; + filter->exclude = exclude; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_geoanchor ( sphinx_client * client, const char * attr_latitude, const char * attr_longitude, float latitude, float longitude ) +{ + if ( !client || !attr_latitude || !attr_latitude[0] || !attr_longitude || !attr_longitude[0] ) + { + if ( !attr_latitude || !attr_latitude[0] ) set_error ( client, "invalid arguments (attr_latitude must not be empty)" ); + else if ( !attr_longitude || !attr_longitude[0] ) set_error ( client, "invalid arguments (attr_longitude must not be empty)" ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + unchain ( client, client->geoanchor_attr_lat ); + unchain ( client, client->geoanchor_attr_long ); + client->geoanchor_attr_lat = strchain ( client, attr_latitude ); + client->geoanchor_attr_long = strchain ( client, attr_longitude ); + client->geoanchor_lat = latitude; + client->geoanchor_long = longitude; + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_groupby ( sphinx_client * client, const char * attr, int groupby_func, const char * group_sort ) +{ + if ( !client || !attr || groupby_funcSPH_GROUPBY_ATTRPAIR ) + { + if ( !attr ) + { + set_error ( client, "invalid arguments (attr must not be empty)" ); + + } else if ( groupby_funcSPH_GROUPBY_ATTRPAIR ) + { + set_error ( client, "invalid arguments (groupby_func %d out of bounds)", groupby_func ); + + } else + { + set_error ( client, "invalid arguments" ); + } + return SPH_FALSE; + } + + unchain ( client, client->group_by ); + unchain ( client, client->group_sort ); + client->group_by = strchain ( client, attr ); + client->group_func = groupby_func; + client->group_sort = strchain ( client, group_sort ? group_sort : "@groupby desc" ); + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_groupby_distinct ( sphinx_client * client, const char * attr ) +{ + if ( !client || !attr ) + { + if ( !attr ) set_error ( client, "invalid arguments (attr must not be empty)" ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + unchain ( client, client->group_distinct ); + client->group_distinct = strchain ( client, attr ); + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_retries ( sphinx_client * client, int count, int delay ) +{ + if ( !client || count<0 || count>1000 || delay<0 || delay>100000 ) + { + if ( count<0 || count>1000 ) set_error ( client, "invalid arguments (count value %d out of bounds)", count ); + else if ( delay<0 || delay>100000 ) set_error ( client, "invalid arguments (delay value %d out of bounds)", delay ); + else set_error ( client, "invalid arguments" ); + return SPH_FALSE; + } + + client->retry_count = count; + client->retry_delay = delay; + return SPH_TRUE; +} + + +sphinx_bool sphinx_add_override ( sphinx_client * client, const char * attr, const sphinx_uint64_t * docids, int num_values, const unsigned int * values ) +{ + struct st_override * p; + + if ( !client ) + return SPH_FALSE; + + if ( client->ver_search<0x115 ) + { + set_error ( client, "sphinx_add_override not supported by chosen protocol version" ); + return SPH_FALSE; + } + + if ( client->num_overrides>=client->max_overrides ) + { + client->max_overrides = ( client->max_overrides<=0 ) ? 8 : 2*client->max_overrides; + client->overrides = realloc ( client->overrides, client->max_overrides *sizeof(struct st_override) ); + } + + p = client->overrides + client->num_overrides; + client->num_overrides++; + + p->attr = strchain ( client, attr ); + p->docids = chain ( client, docids, sizeof(sphinx_uint64_t)*num_values ); + p->num_values = num_values; + p->uint_values = chain ( client, values, sizeof(unsigned int)*num_values ); + return SPH_TRUE; +} + + +sphinx_bool sphinx_set_select ( sphinx_client * client, const char * select_list ) +{ + if ( !client ) + return SPH_FALSE; + + if ( client->ver_search<0x116 ) + { + set_error ( client, "sphinx_set_select not supported by chosen protocol version" ); + return SPH_FALSE; + } + + unchain ( client, client->select_list ); + client->select_list = strchain ( client, select_list ); + return SPH_TRUE; +} + + +void sphinx_reset_filters ( sphinx_client * client ) +{ + int i; + + if ( !client ) + return; + + if ( client->filters ) + { + if ( client->copy_args ) + for ( i=0; inum_filters; i++ ) + { + unchain ( client, client->filters[i].attr ); + if ( client->filters[i].filter_type==SPH_FILTER_VALUES ) + unchain ( client, client->filters[i].values ); + } + + free ( client->filters ); + client->filters = NULL; + } + client->num_filters = client->max_filters = 0; +} + + +void sphinx_reset_groupby ( sphinx_client * client ) +{ + if ( !client ) + return; + + unchain ( client, client->group_by ); + unchain ( client, client->group_sort ); + client->group_by = NULL; + client->group_func = SPH_GROUPBY_ATTR; + client->group_sort = strchain ( client, "@groupby desc" ); + client->group_distinct = NULL; +} + +////////////////////////////////////////////////////////////////////////// + +static int sphinx_dismiss_requests ( sphinx_client * client ) +{ + int nreqs = client->num_reqs, i; + for ( i=0; inum_reqs; i++ ) + free ( client->reqs[i] ); + client->num_reqs = 0; + return nreqs; +} + + +sphinx_result * sphinx_query ( sphinx_client * client, const char * query, const char * index_list, const char * comment ) +{ + sphinx_result * res; + + if ( !client ) + return NULL; + + if ( client->num_reqs!=0 ) + { + set_error ( client, "sphinx_query() must not be called after sphinx_add_query()" ); + return NULL; + } + + if ( sphinx_add_query ( client, query, index_list, comment )!=0 ) + return NULL; + + res = sphinx_run_queries ( client ); // just a shortcut for client->results[0] + sphinx_dismiss_requests ( client ); // sphinx_query() is fire and forget; dismiss request in all cases + if ( !res ) + return NULL; + + client->error = res->error; + client->warning = res->warning; + return ( res->status==SEARCHD_ERROR ) ? NULL : res; +} + + +static size_t safestrlen ( const char * s ) +{ + return s ? strlen(s) : 0; +} + + +static int calc_req_len ( sphinx_client * client, const char * query, const char * index_list, const char * comment ) +{ + int i, filter_val_size; + size_t res; + + res = 96 + 2*(int)sizeof(sphinx_uint64_t) + 4*client->num_weights + + safestrlen ( client->sortby ) + + safestrlen ( query ) + + safestrlen ( index_list ) + + safestrlen ( client->group_by ) + + safestrlen ( client->group_sort ) + + safestrlen ( client->group_distinct ) + + safestrlen ( comment ); + + filter_val_size = ( client->ver_search>=0x114 ) ? 8 : 4; + for ( i=0; inum_filters; i++ ) + { + const struct st_filter * filter = &client->filters[i]; + res += 12 + safestrlen ( filter->attr ); // string attr-name; int type; int exclude-flag + + switch ( filter->filter_type ) + { + case SPH_FILTER_VALUES: res += 4 + filter_val_size*filter->num_values; break; // int values-count; uint32/int64[] values + case SPH_FILTER_RANGE: res += 2*filter_val_size; break; // uint32/int64 min-val, max-val + case SPH_FILTER_FLOATRANGE: res += 8; break; // float min-val,max-val + } + } + + if ( client->geoanchor_attr_lat && client->geoanchor_attr_long ) + res += 16 + safestrlen ( client->geoanchor_attr_lat ) + safestrlen ( client->geoanchor_attr_long ); // string lat-attr, long-attr; float lat, long + + for ( i=0; inum_index_weights; i++ ) + res += 8 + safestrlen ( client->index_weights_names[i] ); // string index-name; int index-weight + + for ( i=0; inum_field_weights; i++ ) + res += 8 + safestrlen ( client->field_weights_names[i] ); // string field-name; int field-weight + + if ( client->ver_search>=0x115 ) + { + res += 4; // int overrides-count + for ( i=0; inum_overrides; i++ ) + { + res += 8 + safestrlen ( client->overrides[i].attr ); // string attr, int attr-type + res += 4 + 12*client->overrides[i].num_values; // int values-count, { uint64 docid, uint32 value }[] override + } + } + + if ( client->ver_search>=0x116 ) + res += 4 + safestrlen ( client->select_list ); // string select_list + + return (int)res; +} + + +static void send_bytes ( char ** pp, const char * bytes, int len ) +{ + char * ptr; + int i; + + ptr = *pp; + if ( ptr ) + for ( i=0; i> 24 ) & 0xff; + b[1] = ( value >> 16 ) & 0xff; + b[2] = ( value >> 8 ) & 0xff; + b[3] = ( value & 0xFF ); + *pp += 4; +} + + +static void send_word ( char ** pp, unsigned short value ) +{ + unsigned char * b = (unsigned char*) *pp; + b[0] = ( value >> 8 ); + b[1] = ( value & 0xFF ); + *pp += 2; +} + + +static void send_str ( char ** pp, const char * s ) +{ + int len; + len = s ? (int)strlen(s) : 0; + send_int ( pp, len ); + send_bytes ( pp, s, len ); +} + + +static void send_qword ( char ** pp, sphinx_uint64_t value ) +{ + send_int ( pp, (int)( value >> 32 ) ); + send_int ( pp, (int)( value & ((sphinx_uint64_t)0xffffffffL) ) ); +} + + +static void send_float ( char ** pp, float value ) +{ + union + { + float f; + int i; + } u; + + u.f = value; + send_int ( pp, u.i ); +} + + +int sphinx_add_query ( sphinx_client * client, const char * query, const char * index_list, const char * comment ) +{ + int i, j, req_len; + char * req; + + if ( client->num_reqs<0 || client->num_reqs>=MAX_REQS ) + { + set_error ( client, "num_reqs=%d out of bounds (too many queries?)", client->num_reqs ); + return -1; + } + + req_len = calc_req_len ( client, query, index_list, comment ); + + req = malloc ( req_len ); + if ( !req ) + { + set_error ( client, "malloc() failed (bytes=%d)", req_len ); + return -1; + } + + client->reqs[client->num_reqs] = req; + client->req_lens[client->num_reqs] = req_len; + client->num_reqs++; + + send_int ( &req, client->offset ); + send_int ( &req, client->limit ); + send_int ( &req, client->mode ); + send_int ( &req, client->ranker ); + send_int ( &req, client->sort ); + send_str ( &req, client->sortby ); + send_str ( &req, query ); + send_int ( &req, client->num_weights ); + for ( i=0; inum_weights; i++ ) + send_int ( &req, client->weights[i] ); + send_str ( &req, index_list ); + send_int ( &req, 1 ); // id range bits + send_qword ( &req, client->minid ); + send_qword ( &req, client->maxid ); + send_int ( &req, client->num_filters ); + for ( i=0; inum_filters; i++ ) + { + send_str ( &req, client->filters[i].attr ); + send_int ( &req, client->filters[i].filter_type ); + + switch ( client->filters[i].filter_type ) + { + case SPH_FILTER_VALUES: + send_int ( &req, client->filters[i].num_values ); + if ( client->ver_search>=0x114 ) + { + for ( j=0; jfilters[i].num_values; j++ ) + send_qword ( &req, client->filters[i].values[j] ); + } else + { + for ( j=0; jfilters[i].num_values; j++ ) + send_int ( &req, (unsigned int)client->filters[i].values[j] ); + } + break; + + case SPH_FILTER_RANGE: + if ( client->ver_search>=0x114 ) + { + send_qword ( &req, client->filters[i].umin ); + send_qword ( &req, client->filters[i].umax ); + } else + { + send_int ( &req, (unsigned int)client->filters[i].umin ); + send_int ( &req, (unsigned int)client->filters[i].umax ); + } + break; + + case SPH_FILTER_FLOATRANGE: + send_float ( &req, client->filters[i].fmin ); + send_float ( &req, client->filters[i].fmax ); + break; + } + + send_int ( &req, client->filters[i].exclude ); + } + send_int ( &req, client->group_func ); + send_str ( &req, client->group_by ); + send_int ( &req, client->max_matches ); + send_str ( &req, client->group_sort ); + send_int ( &req, client->cutoff ); + send_int ( &req, client->retry_count ); + send_int ( &req, client->retry_delay ); + send_str ( &req, client->group_distinct ); + if ( client->geoanchor_attr_lat && client->geoanchor_attr_long ) + { + send_int ( &req, 1 ); + send_str ( &req, client->geoanchor_attr_lat ); + send_str ( &req, client->geoanchor_attr_long ); + send_float ( &req, client->geoanchor_lat ); + send_float ( &req, client->geoanchor_long ); + } else + { + send_int ( &req, 0 ); + } + send_int ( &req, client->num_index_weights ); + for ( i=0; inum_index_weights; i++ ) + { + send_str ( &req, client->index_weights_names[i] ); + send_int ( &req, client->index_weights_values[i] ); + } + send_int ( &req, client->max_query_time ); + send_int ( &req, client->num_field_weights ); + for ( i=0; inum_field_weights; i++ ) + { + send_str ( &req, client->field_weights_names[i] ); + send_int ( &req, client->field_weights_values[i] ); + } + send_str ( &req, comment ); + + if ( client->ver_search>=0x115 ) + { + send_int ( &req, client->num_overrides ); + for ( i=0; inum_overrides; i++ ) + { + send_str ( &req, client->overrides[i].attr ); + send_int ( &req, SPH_ATTR_INTEGER ); + send_int ( &req, client->overrides[i].num_values ); + for ( j=0; joverrides[i].num_values; j++ ) + { + send_qword ( &req, client->overrides[i].docids[j] ); + send_int ( &req, client->overrides[i].uint_values[j] ); + } + } + } + + if ( client->ver_search>=0x116 ) + send_str ( &req, client->select_list ); + + if ( !req ) + { + set_error ( client, "internal error, failed to build request" ); + free ( client->reqs [ --client->num_reqs ] ); + return -1; + } + + return client->num_reqs-1; +} + + +static const char * sock_error () +{ +#if _WIN32 + static char sBuf [ 256 ]; + int iErr; + + iErr = WSAGetLastError (); + _snprintf ( sBuf, sizeof(sBuf), "WSA error %d", iErr ); + return sBuf; +#else + return strerror ( errno ); +#endif +} + + +static int sock_errno () +{ +#ifdef _WIN32 + return WSAGetLastError (); +#else + return errno; +#endif +} + + +static int sock_set_nonblocking ( int sock ) +{ +#if _WIN32 + u_long uMode = 1; + return ioctlsocket ( sock, FIONBIO, &uMode ); +#else + return fcntl ( sock, F_SETFL, O_NONBLOCK ); +#endif +} + + +static int sock_set_blocking ( int sock ) +{ +#if _WIN32 + u_long uMode = 0; + return ioctlsocket ( sock, FIONBIO, &uMode ); +#else + return fcntl ( sock, F_SETFL, 0 ); +#endif +} + + +void sock_close ( int sock ) +{ + if ( sock<0 ) + return; + +#if _WIN32 + closesocket ( sock ); +#else + close ( sock ); +#endif +} + + +// wrap FD_SET to prevent warnings on Windows +#if _WIN32 +#pragma warning(disable:4127) // conditional expr is const +#pragma warning(disable:4389) // signed/unsigned mismatch +void SPH_FD_SET ( int fd, fd_set * fdset ) { FD_SET ( fd, fdset ); } +#pragma warning(default:4127) // conditional expr is const +#pragma warning(default:4389) // signed/unsigned mismatch +#else // !USE_WINDOWS +#define SPH_FD_SET FD_SET +#endif + + +static sphinx_bool net_write ( int fd, const char * bytes, int len, sphinx_client * client ) +{ + int res; +#if defined(_WIN32) || defined(SO_NOSIGPIPE) + res = send ( fd, bytes, len, 0 ); +#else + res = send ( fd, bytes, len, MSG_NOSIGNAL ); +#endif + + if ( res<0 ) + { + set_error ( client, "send() error: %s", sock_error() ); + return SPH_FALSE; + } + + if ( res!=len ) + { + set_error ( client, "send() error: incomplete write (len=%d, sent=%d)", len, res ); + return SPH_FALSE; + } + + return SPH_TRUE; +} + + +static sphinx_bool net_read ( int fd, char * buf, int len, sphinx_client * client ) +{ + int res, err; + for ( ;; ) + { + res = recv ( fd, buf, len, 0 ); + + if ( res<0 ) + { + err = sock_errno(); + if ( err==EINTR || err==EWOULDBLOCK ) // FIXME! remove non-blocking mode here; add timeout + continue; + set_error ( client, "recv(): read error (error=%s)", sock_error() ); + return SPH_FALSE; + } + + len -= res; + buf += res; + + if ( len==0 ) + return SPH_TRUE; + + if ( res==0 ) + { + set_error ( client, "recv(): incomplete read (len=%d, recv=%d)", len, res ); + return SPH_FALSE; + } + } +} + + +static int net_create_inet_sock ( sphinx_client * client ) +{ + struct hostent * hp; + struct sockaddr_in sa; + int sock, res, err, optval; + + hp = gethostbyname ( client->host ); + if ( !hp ) + { + set_error ( client, "host name lookup failed (host=%s, error=%s)", client->host, sock_error() ); + return -1; + } + + memset ( &sa, 0, sizeof(sa) ); + memcpy ( &sa.sin_addr, hp->h_addr_list[0], hp->h_length ); + sa.sin_family = hp->h_addrtype; + sa.sin_port = htons ( (unsigned short)client->port ); + + sock = (int) socket ( hp->h_addrtype, SOCK_STREAM, 0 ); + if ( sock<0 ) + { + set_error ( client, "socket() failed: %s", sock_error() ); + return -1; + } + + if ( sock_set_nonblocking ( sock )<0 ) + { + set_error ( client, "sock_set_nonblocking() failed: %s", sock_error() ); + return -1; + } + + optval = 1; +#if defined(SO_NOSIGPIPE) + if ( setsockopt ( sock, SOL_SOCKET, SO_NOSIGPIPE, (void *)&optval, (socklen_t)sizeof(optval) ) < 0 ) + { + set_error ( client, "setsockopt() failed: %s", sock_error() ); + return -1; + } +#endif + + res = connect ( sock, (struct sockaddr*)&sa, sizeof(sa) ); + if ( res==0 ) + return sock; + + err = sock_errno(); +#ifdef EINPROGRESS + if ( err!=EWOULDBLOCK && err!=EINPROGRESS ) +#else + if ( err!=EWOULDBLOCK ) +#endif + { + set_error ( client, "connect() failed: %s", sock_error() ); + return -1; + } + + return sock; +} + +#ifndef _WIN32 +static int net_create_unix_sock ( sphinx_client * client ) +{ + struct hostent * hp; + struct sockaddr_un uaddr; + int sock, res, err, optval, len; + + len = strlen ( client->host ); + + if ( len + 1 > sizeof( uaddr.sun_path ) ) + set_error ( client, "UNIX socket path is too long (len=%d)", len ); + + memset ( &uaddr, 0, sizeof(uaddr) ); + uaddr.sun_family = AF_UNIX; + memcpy ( uaddr.sun_path, client->host, len + 1 ); + + sock = socket ( AF_UNIX, SOCK_STREAM, 0 ); + if ( sock<0 ) + { + set_error ( client, "UNIX socket() failed: %s", sock_error() ); + return -1; + } + + if ( sock_set_nonblocking ( sock )<0 ) + { + set_error ( client, "sock_set_nonblocking() failed: %s", sock_error() ); + return -1; + } + + optval = 1; +#if defined(SO_NOSIGPIPE) + if ( setsockopt ( sock, SOL_SOCKET, SO_NOSIGPIPE, (void *)&optval, (socklen_t)sizeof(optval) ) < 0 ) + { + set_error ( client, "setsockopt() failed: %s", sock_error() ); + return -1; + } +#endif + + res = connect ( sock, (struct sockaddr *)&uaddr, sizeof(uaddr) ); + if ( res==0 ) + return sock; + + err = sock_errno(); +#ifdef EINPROGRESS + if ( err!=EWOULDBLOCK && err!=EINPROGRESS ) +#else + if ( err!=EWOULDBLOCK ) +#endif + { + set_error ( client, "connect() failed: %s", sock_error() ); + return -1; + } + + return sock; +} +#endif + + +static int net_connect_get ( sphinx_client * client ) +{ + struct timeval timeout; + fd_set fds_write; + int sock, to_wait, res, my_proto; + + if ( client->sock>=0 ) + return client->sock; + + sock = -1; + if ( client->host[0]!='/' ) + { + sock = net_create_inet_sock ( client ); + } else + { +#ifdef _WIN32 + set_error ( client, "UNIX sockets are not supported on Windows" ); + return -1; +#else + sock = net_create_unix_sock ( client ); +#endif + } + + if ( sock<0 ) + return -1; + + to_wait = (int)( 1000*client->timeout ); + if ( to_wait<=0 ) + to_wait = CONNECT_TIMEOUT_MSEC; + + { + timeout.tv_sec = to_wait / 1000; // full seconds + timeout.tv_usec = ( to_wait % 1000 ) * 1000; // remainder is msec, so *1000 for usec + FD_ZERO ( &fds_write ); + SPH_FD_SET ( sock, &fds_write ); + + res = select ( 1+sock, NULL, &fds_write, NULL, &timeout ); + + if ( res>=0 && FD_ISSET ( sock, &fds_write ) ) + { + sock_set_blocking ( sock ); + + // now send major client protocol version + my_proto = htonl ( 1 ); + if ( !net_write ( sock, (char*)&my_proto, sizeof(my_proto), client ) ) + { + sock_close ( sock ); + set_error ( client, "failed to send client protocol version" ); + return -1; + } + + // check daemon version + if ( !net_read ( sock, (char*)&my_proto, sizeof(my_proto), client ) ) + { + sock_close ( sock ); + return -1; + } + + my_proto = ntohl ( my_proto ); + if ( my_proto<1 ) + { + sock_close ( sock ); + set_error ( client, "expected searchd protocol version 1+, got version %d", my_proto ); + return -1; + } + + return sock; + } + + /*!COMMIT handle EINTR here*/ + + sock_close ( sock ); + set_error ( client, "connect() timed out" ); + return -1; + } +} + + +static sphinx_bool net_sock_eof ( int sock ) +{ + struct timeval tv; + fd_set fds_read, fds_except; + int res; + char buf; + + // wrong arg, consider dead + if ( sock<0 ) + return SPH_TRUE; + + // select() on a socket and watch for exceptions + FD_ZERO ( &fds_read ); + FD_ZERO ( &fds_except ); + SPH_FD_SET ( sock, &fds_read ); + SPH_FD_SET ( sock, &fds_except ); + tv.tv_sec = 0; + tv.tv_usec = 0; + res = select ( 1+sock, &fds_read, NULL, &fds_except, &tv ); + + // select() failed, assume something is wrong + if ( res<0 ) + return SPH_TRUE; + + // got any events to read? (either normal via fds_read, or OOB via fds_except set) + if ( FD_ISSET ( sock, &fds_read ) || FD_ISSET ( sock, &fds_except ) ) + if ( recv ( sock, &buf, sizeof(buf), MSG_PEEK )<=0 ) + if ( sock_errno()!=EWOULDBLOCK ) + return SPH_TRUE; + + // it seems alive + return SPH_FALSE; +} + + +static int net_connect_ex ( sphinx_client * client ) +{ + if ( client->sock>=0 ) + { + // in case of a persistent connection, check for eof + // then attempt to reestablish lost pconn once + if ( !net_sock_eof ( client->sock ) ) + return client->sock; + + sock_close ( client->sock ); + client->sock = -1; + } + + if ( !client->persist ) + return net_connect_get ( client ); + + sphinx_open ( client ); + return client->sock; +} + +static unsigned short unpack_short ( char ** cur ) +{ + unsigned short v; + memcpy ( &v, *cur, sizeof(unsigned short) ); + (*cur) += sizeof(unsigned short); + return ntohs ( v ); +} + + +static unsigned int unpack_int ( char ** cur ) +{ + unsigned int v; + memcpy ( &v, *cur, sizeof(unsigned int) ); + (*cur) += sizeof(unsigned int); + return ntohl ( v ); +} + + +static char * unpack_str ( char ** cur ) +{ + // we play a trick + // we move the string in-place to free space for trailing zero but avoid malloc + unsigned int len; + len = unpack_int ( cur ); + memmove ( (*cur)-1, (*cur), len ); + (*cur) += len; + (*cur)[-1] = '\0'; + return (*cur)-len-1; +} + + +static sphinx_uint64_t unpack_qword ( char ** cur ) +{ + sphinx_uint64_t hi, lo; + hi = unpack_int ( cur ); + lo = unpack_int ( cur ); + return ( hi<<32 ) + lo; +} + + +static float unpack_float ( char ** cur ) +{ + union + { + unsigned int n; + float f; + } u; + u.n = unpack_int ( cur ); + return u.f; +} + + +static void net_get_response ( int fd, sphinx_client * client ) +{ + int len; + char header_buf[32], *cur, *response; + unsigned short status, ver; + + // dismiss previous response + if ( client->response_buf ) + { + free ( client->response_buf ); + client->response_len = 0; + client->response_buf = NULL; + } + + // read and parse the header + if ( !net_read ( fd, header_buf, 8, client ) ) + { + sock_close ( fd ); + if ( client->sock>0 ) + client->sock = -1; + return; + } + + cur = header_buf; + status = unpack_short ( &cur ); + ver = unpack_short ( &cur ); + len = unpack_int ( &cur ); + + // sanity check the length, alloc the buffer + if ( len<0 || len>MAX_PACKET_LEN ) + { + set_error ( client, "response length out of bounds (len=%d)", len ); + return; + } + + response = malloc ( len ); + if ( !response ) + { + set_error ( client, "malloc() failed (bytes=%d)", len ); + return; + } + + // read the response + if ( !net_read ( fd, response, len, client ) ) + { + sock_close ( fd ); + if ( client->sock>0 ) + client->sock = -1; + free ( response ); + return; + } + + // check status + cur = response; + switch ( status ) + { + case SEARCHD_OK: + case SEARCHD_WARNING: + client->error = NULL; // so far so good + if ( status==SEARCHD_WARNING ) + client->warning = unpack_str ( &cur ); + else + client->warning = NULL; + client->response_len = len; + client->response_buf = response; + client->response_start = cur; + break; + + case SEARCHD_ERROR: + case SEARCHD_RETRY: + // copy error message, so that we can immediately free the response + set_error ( client, "%s", unpack_str ( &cur ) ); + free ( response ); + break; + + default: + set_error ( client, "unknown status code (status=%d)", status ); + free ( response ); + break; + } + + // close one-time socket on success + if ( client->sock<0 ) + sock_close ( fd ); +} + + +sphinx_bool sphinx_open ( sphinx_client * client ) +{ + char buf[16], *pbuf; + + if ( client->sock>=0 ) + { + set_error ( client, "already connected" ); + return SPH_FALSE; + } + + client->sock = net_connect_get ( client ); + if ( client->sock<0 ) + return SPH_FALSE; + + pbuf = buf; + send_word ( &pbuf, SEARCHD_COMMAND_PERSIST ); + send_word ( &pbuf, 0 ); // dummy version + send_int ( &pbuf, 4 ); // dummy body len + send_int ( &pbuf, 1 ); // dummy body + if ( !net_write ( client->sock, buf, (int)(pbuf-buf), client ) ) + { + sock_close ( client->sock ); + client->sock = -1; + return SPH_FALSE; + } + client->persist = SPH_TRUE; + return SPH_TRUE; +} + + +sphinx_bool sphinx_close ( sphinx_client * client ) +{ + if ( client->sock<0 ) + { + set_error ( client, "not connected" ); + return SPH_FALSE; + } + + sock_close ( client->sock ); + client->sock = -1; + client->persist = SPH_FALSE; + return SPH_TRUE; +} + + +static void * sphinx_malloc ( int len, sphinx_client * client ) +{ + void * res; + + if ( len<0 || len>MAX_PACKET_LEN ) + { + set_error ( client, "malloc() length out of bounds, possibly broken response packet (len=%d)", len ); + return NULL; + } + + res = malloc ( len ); + if ( !res ) + set_error ( client, "malloc() failed (bytes=%d)", len ); + + return res; +} + + +sphinx_result * sphinx_run_queries ( sphinx_client * client ) +{ + int i, j, k, l, fd, len, nreqs, id64; + char req_header[32], *req, *p, *pmax; + sphinx_result * res; + union un_attr_value * pval; + + if ( !client ) + return NULL; + + if ( client->num_reqs<=0 || client->num_reqs>MAX_REQS ) + { + set_error ( client, "num_reqs=%d out of bounds (too many queries?)", client->num_reqs ); + return NULL; + } + + fd = net_connect_ex ( client ); + if ( fd<0 ) + return NULL; + + // free previous results + sphinx_free_results ( client ); + + // send query, get response + len = 8; + for ( i=0; inum_reqs; i++ ) + len += client->req_lens[i]; + + req = req_header; + send_word ( &req, SEARCHD_COMMAND_SEARCH ); + send_word ( &req, client->ver_search ); + send_int ( &req, len ); + send_int ( &req, 0 ); // its a client + send_int ( &req, client->num_reqs ); + + if ( !net_write ( fd, req_header, (int)(req-req_header), client ) ) + return NULL; + + for ( i=0; inum_reqs; i++ ) + if ( !net_write ( fd, client->reqs[i], client->req_lens[i], client ) ) + return NULL; + + net_get_response ( fd, client ); + if ( !client->response_buf ) + return NULL; + + // dismiss request data, memorize count + nreqs = sphinx_dismiss_requests ( client ); + + // parse response + p = client->response_start; + pmax = client->response_start + client->response_len; // max position for checks, to protect against broken responses + + for ( i=0; iresults[i]; + client->num_results++; + res->error = NULL; + res->warning = NULL; + + res->status = unpack_int ( &p ); + if ( res->status!=SEARCHD_OK ) + { + if ( res->status==SEARCHD_WARNING ) + { + res->warning = unpack_str ( &p ); + } else + { + res->error = unpack_str ( &p ); + continue; + } + } + + // fields + res->num_fields = unpack_int ( &p ); + res->fields = sphinx_malloc ( res->num_fields*sizeof(const char*), client ); + if ( !res->fields ) + return NULL; + + for ( j=0; jnum_fields; j++ ) + res->fields[j] = unpack_str ( &p ); + + // attrs + res->num_attrs = unpack_int ( &p ); + res->attr_names = sphinx_malloc ( res->num_attrs*sizeof(const char*), client ); + if ( !res->attr_names ) + return NULL; + + res->attr_types = sphinx_malloc ( res->num_attrs*sizeof(int), client ); + if ( !res->attr_types ) + return NULL; + + for ( j=0; jnum_attrs; j++ ) + { + res->attr_names[j] = unpack_str ( &p ); + res->attr_types[j] = unpack_int ( &p ); + } + + // match count, id bits flag + res->num_matches = unpack_int ( &p ); + id64 = unpack_int ( &p ); + + res->values_pool = sphinx_malloc ( (2+res->num_attrs) * res->num_matches * sizeof(union un_attr_value), client ); + if ( !res->values_pool ) + return NULL; + pval = res->values_pool; + + // matches + for ( j=0; jnum_matches; j++ ) + { + // id + if ( id64 ) + pval->int_value = unpack_qword ( &p ); + else + pval->int_value = unpack_int ( &p ); + pval++; + + // weight + pval->int_value = unpack_int ( &p ); + pval++; + + // attrs + for ( k=0; knum_attrs; k++ ) + { + switch ( res->attr_types[k] ) + { + case SPH_ATTR_MULTI64: + case SPH_ATTR_MULTI: + /*!COMMIT this is totally unsafe on some arches (eg. SPARC)*/ + pval->mva_value = (unsigned int *) p; + len = unpack_int ( &p ); + for ( l=0; l<=len; l++ ) // including first one that is len + pval->mva_value[l] = ntohl ( pval->mva_value[l] ); + + if ( res->attr_types[k]==SPH_ATTR_MULTI64 ) + { + pval->mva_value[0] = pval->mva_value[0]/2; + } + p += len*sizeof(unsigned int); + break; + + case SPH_ATTR_FLOAT: pval->float_value = unpack_float ( &p ); break; + case SPH_ATTR_BIGINT: pval->int_value = unpack_qword ( &p ); break; + case SPH_ATTR_STRING: pval->string = unpack_str ( &p ); break; + default: pval->int_value = unpack_int ( &p ); break; + } + pval++; + } + } + + // totals + res->total = unpack_int ( &p ); + res->total_found = unpack_int ( &p ); + res->time_msec = unpack_int ( &p ); + res->num_words = unpack_int ( &p ); + + if ( res->words ) + free ( res->words ); + res->words = sphinx_malloc ( res->num_words*sizeof(struct st_sphinx_wordinfo), client ); + if ( !res->words ) + return NULL; + + // words + for ( j=0; jnum_words; j++ ) + { + res->words[j].word = unpack_str ( &p ); + res->words[j].docs = unpack_int ( &p ); + res->words[j].hits = unpack_int ( &p ); + } + + // sanity check + // FIXME! add it to each unpack? + if ( p>pmax ) + { + set_error ( client, "unpack error (req=%d, reqs=%d)", i, nreqs ); + return NULL; + } + } + + return client->results; +} + +////////////////////////////////////////////////////////////////////////// + +int sphinx_get_num_results ( sphinx_client * client ) +{ + return client ? client->num_results : -1; +} + + +sphinx_uint64_t sphinx_get_id ( sphinx_result * result, int match ) +{ + return sphinx_get_int ( result, match, -2 ); +} + + +int sphinx_get_weight ( sphinx_result * result, int match ) +{ + return (int)sphinx_get_int ( result, match, -1 ); +} + + +sphinx_int64_t sphinx_get_int ( sphinx_result * result, int match, int attr ) +{ + // FIXME! add safety and type checks + union un_attr_value * pval; + pval = result->values_pool; + return pval [ (2+result->num_attrs)*match+2+attr ].int_value; +} + + +float sphinx_get_float ( sphinx_result * result, int match, int attr ) +{ + // FIXME! add safety and type checks + union un_attr_value * pval; + pval = result->values_pool; + return pval [ (2+result->num_attrs)*match+2+attr ].float_value; +} + + +unsigned int * sphinx_get_mva ( sphinx_result * result, int match, int attr ) +{ + // FIXME! add safety and type checks + union un_attr_value * pval; + pval = result->values_pool; + return pval [ (2+result->num_attrs)*match+2+attr ].mva_value; +} + +sphinx_uint64_t sphinx_get_mva64_value ( unsigned int * mva, int i ) +{ + sphinx_uint64_t uVal; + uVal = ( ( ( (sphinx_uint64_t)( mva[i*2] ) )<<32 ) | (sphinx_uint64_t)( mva[i*2+1] ) ); + return uVal; +} + +const char * sphinx_get_string ( sphinx_result * result, int match, int attr ) +{ + // FIXME! add safety and type checks + union un_attr_value * pval; + pval = result->values_pool; + return pval [ (2+result->num_attrs)*match+2+attr ].string; +} + +////////////////////////////////////////////////////////////////////////// + +static sphinx_bool net_simple_query ( sphinx_client * client, char * buf, int req_len ) +{ + int fd; + + fd = net_connect_ex ( client ); + if ( fd<0 ) + { + free ( buf ); + return SPH_FALSE; + } + + if ( !net_write ( fd, buf, 8+req_len, client ) ) + { + free ( buf ); + return SPH_FALSE; + } + free ( buf ); + + net_get_response ( fd, client ); + if ( !client->response_buf ) + return SPH_FALSE; + + return SPH_TRUE; +} + + +void sphinx_init_excerpt_options ( sphinx_excerpt_options * opts ) +{ + if ( !opts ) + return; + + opts->before_match = ""; + opts->after_match = ""; + opts->chunk_separator = " ... "; + opts->html_strip_mode = "index"; + opts->passage_boundary = "none"; + + opts->limit = 256; + opts->limit_passages = 0; + opts->limit_words = 0; + opts->around = 5; + opts->start_passage_id = 1; + + opts->exact_phrase = SPH_FALSE; + opts->single_passage = SPH_FALSE; + opts->use_boundaries = SPH_FALSE; + opts->weight_order = SPH_FALSE; + opts->query_mode = SPH_FALSE; + opts->force_all_words = SPH_FALSE; + opts->load_files = SPH_FALSE; + opts->allow_empty = SPH_FALSE; + opts->emit_zones = SPH_FALSE; +} + + +char ** sphinx_build_excerpts ( sphinx_client * client, int num_docs, const char ** docs, const char * index, const char * words, sphinx_excerpt_options * opts ) +{ + sphinx_excerpt_options def_opt; + int i, req_len, flags; + char *buf, *req, *p, *pmax, **result; + + if ( !client || !docs || !index || !words || num_docs<=0 ) + { + if ( !docs ) set_error ( client, "invalid arguments (docs must not be empty)" ); + else if ( !index ) set_error ( client, "invalid arguments (index must not be empty)" ); + else if ( !words ) set_error ( client, "invalid arguments (words must not be empty)" ); + else if ( num_docs<=0 ) set_error ( client, "invalid arguments (num_docs must be positive)" ); + return NULL; + } + + // fixup options + if ( !opts ) + { + sphinx_init_excerpt_options ( &def_opt ); + opts = &def_opt; + } + + // alloc buffer + req_len = (int)( 60 + + strlen(index) + + strlen(words) + + safestrlen(opts->before_match) + + safestrlen(opts->after_match) + + safestrlen(opts->chunk_separator) + + safestrlen(opts->html_strip_mode) + + safestrlen(opts->passage_boundary) ); + for ( i=0; iexact_phrase ) flags |= 2; + if ( opts->single_passage ) flags |= 4; + if ( opts->use_boundaries ) flags |= 8; + if ( opts->weight_order ) flags |= 16; + if ( opts->query_mode ) flags |= 32; + if ( opts->force_all_words ) flags |= 64; + if ( opts->load_files ) flags |= 128; + if ( opts->allow_empty ) flags |= 256; + if ( opts->emit_zones ) flags |= 512; + + send_int ( &req, 0 ); + send_int ( &req, flags ); + send_str ( &req, index ); + send_str ( &req, words ); + + send_str ( &req, opts->before_match ); + send_str ( &req, opts->after_match ); + send_str ( &req, opts->chunk_separator ); + send_int ( &req, opts->limit ); + send_int ( &req, opts->around ); + + send_int ( &req, opts->limit_passages ); // v1.2 + send_int ( &req, opts->limit_words ); + send_int ( &req, opts->start_passage_id ); + send_str ( &req, opts->html_strip_mode ); + send_str ( &req, opts->passage_boundary ); + + send_int ( &req, num_docs ); + for ( i=0; iresponse_start; + pmax = client->response_start + client->response_len; // max position for checks, to protect against broken responses + + result = malloc ( (1+num_docs)*sizeof(char*) ); + if ( !result ) + { + set_error ( client, "malloc() failed (bytes=%d)", (1+num_docs)*sizeof(char*) ); + return NULL; + } + + for ( i=0; i<=num_docs; i++ ) + result[i] = NULL; + + for ( i=0; ipmax ) + { + for ( i=0; iresponse_len<4 ) + { + set_error ( client, "incomplete reply" ); + return -1; + } + + p = client->response_start; + return unpack_int ( &p ); +} + +int sphinx_update_attributes_mva ( sphinx_client * client, const char * index, const char * attr, sphinx_uint64_t docid, int num_values, const unsigned int * values ) +{ + int i, req_len; + char *buf, *req, *p; + + // check args + if ( !client || !index || !attr || num_values<=0 || !values ) + { + if ( !index ) set_error ( client, "invalid arguments (index must not be empty)" ); + else if ( !attr ) set_error ( client, "invalid arguments (attr must not empty)" ); + else if ( num_values<=0 ) set_error ( client, "invalid arguments (num_values must be positive)" ); + else if ( !values ) set_error ( client, "invalid arguments (values must not be empty)" ); + } + + // alloc buffer + req_len = (int)( 38 + safestrlen(index) + safestrlen(attr) + num_values*4 ); + + buf = malloc ( 12+req_len ); // request body length plus 12 header bytes + if ( !buf ) + { + set_error ( client, "malloc() failed (bytes=%d)", req_len ); + return -1; + } + + // build request + req = buf; + + send_word ( &req, SEARCHD_COMMAND_UPDATE ); + send_word ( &req, VER_COMMAND_UPDATE ); + send_int ( &req, req_len ); + + send_str ( &req, index ); + send_int ( &req, 1 ); + send_str ( &req, attr ); + send_int ( &req, 1 ); // SPH_ATTR_MULTI flag + + send_int ( &req, 1 ); + send_qword ( &req, docid ); + send_int ( &req, num_values ); + for ( i=0; iresponse_len<4 ) + { + set_error ( client, "incomplete reply" ); + return -1; + } + + p = client->response_start; + return unpack_int ( &p ); +} + +////////////////////////////////////////////////////////////////////////// + +sphinx_keyword_info * sphinx_build_keywords ( sphinx_client * client, const char * query, const char * index, sphinx_bool hits, int * out_num_keywords ) +{ + int i, req_len, nwords, len; + char *buf, *req, *p, *pmax; + sphinx_keyword_info *res; + + // check args + if ( !client || !query || !index ) + { + if ( !query ) set_error ( client, "invalid arguments (query must not be empty)" ); + else if ( !index ) set_error ( client, "invalid arguments (index must not be empty)" ); + else if ( !out_num_keywords ) set_error ( client, "invalid arguments (out_num_keywords must not be null)" ); + return NULL; + } + + // alloc buffer + req_len = (int)( safestrlen(query) + safestrlen(index) + 12 ); + + buf = malloc ( 12+req_len ); // request body length plus 12 header bytes + if ( !buf ) + { + set_error ( client, "malloc() failed (bytes=%d)", req_len ); + return NULL; + } + + // build request + req = buf; + + send_word ( &req, SEARCHD_COMMAND_KEYWORDS ); + send_word ( &req, VER_COMMAND_KEYWORDS ); + send_int ( &req, req_len ); + + send_str ( &req, query ); + send_str ( &req, index ); + send_int ( &req, hits ); + + // send query, get response + if ( !net_simple_query ( client, buf, req_len ) ) + return NULL; + + // parse response + p = client->response_start; + pmax = client->response_start + client->response_len; // max position for checks, to protect against broken responses + + nwords = unpack_int ( &p ); + *out_num_keywords = nwords; + + len = nwords*sizeof(sphinx_keyword_info); + res = (sphinx_keyword_info*) malloc ( len ); + if ( !res ) + { + set_error ( client, "malloc() failed (bytes=%d)", len ); + return NULL; + } + memset ( res, 0, len ); + + for ( i=0; iresponse_start; + pmax = client->response_start + client->response_len; // max position for checks, to protect against broken responses + + *num_rows = unpack_int ( &p ); + *num_cols = unpack_int ( &p ); + n = (*num_rows)*(*num_cols); + + res = (char**) malloc ( n*sizeof(char*) ); + for ( i=0; i header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* 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 + +/* debug build */ +#undef SPHINXCLIENT_DEBUG + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to `unsigned' if does not define. */ +#undef size_t diff --git a/coreseek/csft-4.1/api/libsphinxclient/test.c b/coreseek/csft-4.1/api/libsphinxclient/test.c new file mode 100755 index 0000000..0a3dfcc --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/test.c @@ -0,0 +1,455 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU Library General Public License. You should +// have received a copy of the LGPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include +#include +#include + +#if _WIN32 +#include +#endif + +#include "sphinxclient.h" + +static sphinx_bool g_smoke = SPH_FALSE; +static int g_failed = 0; + + +void die ( const char * template, ... ) +{ + va_list ap; + va_start ( ap, template ); + printf ( "FATAL: " ); + vprintf ( template, ap ); + printf ( "\n" ); + va_end ( ap ); + exit ( 1 ); +} + + +void net_init () +{ +#if _WIN32 + // init WSA on Windows + WSADATA wsa_data; + int wsa_startup_err; + + wsa_startup_err = WSAStartup ( WINSOCK_VERSION, &wsa_data ); + if ( wsa_startup_err ) + die ( "failed to initialize WinSock2: error %d", wsa_startup_err ); +#endif +} + + +void test_query ( sphinx_client * client, const char * query ) +{ + sphinx_result * res; + const char *index; + int i, j, k, mva_len; + unsigned int * mva; + const char * field_names[2]; + int field_weights[2]; + + index = "test1"; + + field_names[0] = "title"; + field_names[1] = "content"; + field_weights[0] = 100; + field_weights[1] = 1; + sphinx_set_field_weights ( client, 2, field_names, field_weights ); + field_weights[0] = 1; + field_weights[1] = 1; + + res = sphinx_query ( client, query, index, NULL ); + + if ( !res ) + { + g_failed += ( res==NULL ); + + if ( !g_smoke ) + die ( "query failed: %s", sphinx_error(client) ); + } + + if ( g_smoke ) + printf ( "Query '%s' retrieved %d of %d matches.\n", query, res->total, res->total_found ); + else + printf ( "Query '%s' retrieved %d of %d matches in %d.%03d sec.\n", + query, res->total, res->total_found, res->time_msec/1000, res->time_msec%1000 ); + + printf ( "Query stats:\n" ); + for ( i=0; inum_words; i++ ) + printf ( "\t'%s' found %d times in %d documents\n", + res->words[i].word, res->words[i].hits, res->words[i].docs ); + + printf ( "\nMatches:\n" ); + for ( i=0; inum_matches; i++ ) + { + printf ( "%d. doc_id=%d, weight=%d", 1+i, + (int)sphinx_get_id ( res, i ), sphinx_get_weight ( res, i ) ); + + for ( j=0; jnum_attrs; j++ ) + { + printf ( ", %s=", res->attr_names[j] ); + switch ( res->attr_types[j] ) + { + case SPH_ATTR_MULTI64: + case SPH_ATTR_MULTI: + mva = sphinx_get_mva ( res, i, j ); + mva_len = *mva++; + printf ( "(" ); + for ( k=0; kattr_types[j]==SPH_ATTR_MULTI ? mva[k] : (unsigned int)sphinx_get_mva64_value ( mva, k ) ) ); + printf ( ")" ); + break; + + case SPH_ATTR_FLOAT: printf ( "%f", sphinx_get_float ( res, i, j ) ); break; + case SPH_ATTR_STRING: printf ( "%s", sphinx_get_string ( res, i, j ) ); break; + default: printf ( "%u", (unsigned int)sphinx_get_int ( res, i, j ) ); break; + } + } + + printf ( "\n" ); + } + printf ( "\n" ); +} + + +void test_excerpt ( sphinx_client * client ) +{ + const char * docs[] = + { + "this is my test text to be highlighted, and for the sake of the testing we need to pump its length somewhat", + "another test text to be highlighted, below limit", + "test number three, without phrase match", + "final test, not only without phrase match, but also above limit and with swapped phrase text test as well" + }; + const int ndocs = sizeof(docs)/sizeof(docs[0]); + const char * words = "test text"; + const char * index = "test1"; + sphinx_excerpt_options opts; + char ** res; + int i, j; + + sphinx_init_excerpt_options ( &opts ); + opts.limit = 60; + opts.around = 3; + opts.allow_empty = SPH_TRUE; + + for ( j=0; j<2; j++ ) + { + opts.exact_phrase = j; + printf ( "exact_phrase=%d\n", j ); + + res = sphinx_build_excerpts ( client, ndocs, docs, index, words, &opts ); + + if ( !res ) + { + g_failed += ( res==NULL ); + if ( !g_smoke ) + die ( "query failed: %s", sphinx_error(client) ); + } + + for ( i=0; i" + "The institutional investment manager it. Is Filing this report and." + "" + "It is signed hereby represent. That it is all information." + "are It or is" + "" + "" + "cool It is cooler" + "" + "It is another place!" + "" + }; + const int ndocs = sizeof(docs)/sizeof(docs[0]); + const char * words = "it is"; + const char * index = "test1"; + sphinx_excerpt_options opts; + char ** res; + int i, j; + + sphinx_init_excerpt_options ( &opts ); + opts.limit = 150; + opts.limit_passages = 8; + opts.around = 8; + opts.html_strip_mode = "strip"; + opts.passage_boundary = "zone"; + opts.emit_zones = SPH_TRUE; + + for ( j=0; j<2; j++ ) + { + if ( j==1 ) + { + opts.passage_boundary = "sentence"; + opts.emit_zones = SPH_FALSE; + } + printf ( "passage_boundary=%s\n", opts.passage_boundary ); + + res = sphinx_build_excerpts ( client, ndocs, docs, index, words, &opts ); + if ( !res ) + die ( "query failed: %s", sphinx_error(client) ); + + for ( i=0; i % s <-\n\n", name ); +} + +int main ( int argc, char ** argv ) +{ + int i, port = 0; + sphinx_client * client; + sphinx_uint64_t override_docid = 2; + unsigned int override_value = 2000; + + for ( i=1; i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/api/libsphinxclient/test03.sln b/coreseek/csft-4.1/api/libsphinxclient/test03.sln new file mode 100755 index 0000000..cadf242 --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/test03.sln @@ -0,0 +1,21 @@ +Microsoft Visual Studio Solution File, Format Version 8.00 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test03", "test03.vcproj", "{3F3C7CA8-E864-4FB5-8EB0-A114FAFBE24E}" + ProjectSection(ProjectDependencies) = postProject + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfiguration) = preSolution + Debug = Debug + Release = Release + EndGlobalSection + GlobalSection(ProjectConfiguration) = postSolution + {3F3C7CA8-E864-4FB5-8EB0-A114FAFBE24E}.Debug.ActiveCfg = Debug|Win32 + {3F3C7CA8-E864-4FB5-8EB0-A114FAFBE24E}.Debug.Build.0 = Debug|Win32 + {3F3C7CA8-E864-4FB5-8EB0-A114FAFBE24E}.Release.ActiveCfg = Release|Win32 + {3F3C7CA8-E864-4FB5-8EB0-A114FAFBE24E}.Release.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + EndGlobalSection + GlobalSection(ExtensibilityAddIns) = postSolution + EndGlobalSection +EndGlobal diff --git a/coreseek/csft-4.1/api/libsphinxclient/test03.vcproj b/coreseek/csft-4.1/api/libsphinxclient/test03.vcproj new file mode 100755 index 0000000..335915a --- /dev/null +++ b/coreseek/csft-4.1/api/libsphinxclient/test03.vcproj @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/api/ruby/README.rdoc b/coreseek/csft-4.1/api/ruby/README.rdoc new file mode 100755 index 0000000..facfd67 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/README.rdoc @@ -0,0 +1,41 @@ +=Sphinx Client API 0.9.9-dev (r1299) + +This document gives an overview of what is Sphinx itself and how to use in +within Ruby on Rails. For more information or documentation, +please go to http://www.sphinxsearch.com + +==Sphinx + +Sphinx is a standalone full-text search engine, meant to provide fast, +size-efficient and relevant fulltext search functions to other applications. +Sphinx was specially designed to integrate well with SQL databases and +scripting languages. Currently built-in data sources support fetching data +either via direct connection to MySQL, or from an XML pipe. + +Simplest way to communicate with Sphinx is to use searchd - +a daemon to search through fulltext indices from external software. + +==Documentation + +You can create the documentation by running: + + rake rdoc + +==Latest version + +You can always get latest version from +http://kpumuk.info/projects/ror-plugins/sphinx + +==Credits + +Dmytro Shteflyuk http://kpumuk.info + +Andrew Aksyonoff http://sphinxsearch.com/ + +Special thanks to Alexey Kovyrin http://blog.kovyrin.net + +==License + +This library is distributed under the terms of the Ruby license. +You can freely distribute/modify this library. + diff --git a/coreseek/csft-4.1/api/ruby/Rakefile b/coreseek/csft-4.1/api/ruby/Rakefile new file mode 100755 index 0000000..f4b8504 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/Rakefile @@ -0,0 +1,21 @@ +require 'rake' +require 'spec/rake/spectask' +require 'rake/rdoctask' + +desc 'Default: run unit tests.' +task :default => :spec + +desc 'Test the sphinx plugin.' +Spec::Rake::SpecTask.new(:spec) do |t| + t.libs << 'lib' + t.pattern = 'spec/*_spec.rb' +end + +desc 'Generate documentation for the sphinx plugin.' +Rake::RDocTask.new(:rdoc) do |rdoc| + rdoc.rdoc_dir = 'rdoc' + rdoc.title = 'Sphinx Client API' + rdoc.options << '--line-numbers' << '--inline-source' + rdoc.rdoc_files.include('README') + rdoc.rdoc_files.include('lib/**/*.rb') +end diff --git a/coreseek/csft-4.1/api/ruby/init.rb b/coreseek/csft-4.1/api/ruby/init.rb new file mode 100755 index 0000000..f8ff0ea --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/init.rb @@ -0,0 +1 @@ +require File.dirname(__FILE__) + '/lib/sphinx' diff --git a/coreseek/csft-4.1/api/ruby/install.rb b/coreseek/csft-4.1/api/ruby/install.rb new file mode 100755 index 0000000..17e8798 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/install.rb @@ -0,0 +1,5 @@ +require 'fileutils' + +sphinx_config = File.dirname(__FILE__) + '/../../../config/sphinx.yml' +FileUtils.cp File.dirname(__FILE__) + '/sphinx.yml.tpl', sphinx_config unless File.exist?(sphinx_config) +puts IO.read(File.join(File.dirname(__FILE__), 'README')) diff --git a/coreseek/csft-4.1/api/ruby/lib/sphinx.rb b/coreseek/csft-4.1/api/ruby/lib/sphinx.rb new file mode 100755 index 0000000..5e7067f --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/lib/sphinx.rb @@ -0,0 +1,6 @@ +require File.dirname(__FILE__) + '/sphinx/request' +require File.dirname(__FILE__) + '/sphinx/response' +require File.dirname(__FILE__) + '/sphinx/client' + +module Sphinx +end \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/lib/sphinx/client.rb b/coreseek/csft-4.1/api/ruby/lib/sphinx/client.rb new file mode 100755 index 0000000..016a836 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/lib/sphinx/client.rb @@ -0,0 +1,1125 @@ +# = client.rb - Sphinx Client API +# +# Author:: Dmytro Shteflyuk . +# Copyright:: Copyright (c) 2006 - 2008 Dmytro Shteflyuk +# License:: Distributes under the same terms as Ruby +# Version:: 0.9.9-r1299 +# Website:: http://kpumuk.info/projects/ror-plugins/sphinx +# +# This library is distributed under the terms of the Ruby license. +# You can freely distribute/modify this library. + +# ==Sphinx Client API +# +# The Sphinx Client API is used to communicate with searchd +# daemon and get search results from Sphinx. +# +# ===Usage +# +# sphinx = Sphinx::Client.new +# result = sphinx.Query('test') +# ids = result['matches'].map { |match| match['id'] }.join(',') +# posts = Post.find :all, :conditions => "id IN (#{ids})" +# +# docs = posts.map(&:body) +# excerpts = sphinx.BuildExcerpts(docs, 'index', 'test') + +require 'socket' + +module Sphinx + # :stopdoc: + + class SphinxError < StandardError; end + class SphinxArgumentError < SphinxError; end + class SphinxConnectError < SphinxError; end + class SphinxResponseError < SphinxError; end + class SphinxInternalError < SphinxError; end + class SphinxTemporaryError < SphinxError; end + class SphinxUnknownError < SphinxError; end + + # :startdoc: + + class Client + + # :stopdoc: + + # Known searchd commands + + # search command + SEARCHD_COMMAND_SEARCH = 0 + # excerpt command + SEARCHD_COMMAND_EXCERPT = 1 + # update command + SEARCHD_COMMAND_UPDATE = 2 + # keywords command + SEARCHD_COMMAND_KEYWORDS = 3 + + # Current client-side command implementation versions + + # search command version + VER_COMMAND_SEARCH = 0x119 + # excerpt command version + VER_COMMAND_EXCERPT = 0x102 + # update command version + VER_COMMAND_UPDATE = 0x102 + # keywords command version + VER_COMMAND_KEYWORDS = 0x100 + + # Known searchd status codes + + # general success, command-specific reply follows + SEARCHD_OK = 0 + # general failure, command-specific reply may follow + SEARCHD_ERROR = 1 + # temporaty failure, client should retry later + SEARCHD_RETRY = 2 + # general success, warning message and command-specific reply follow + SEARCHD_WARNING = 3 + + # :startdoc: + + # Known match modes + + # match all query words + SPH_MATCH_ALL = 0 + # match any query word + SPH_MATCH_ANY = 1 + # match this exact phrase + SPH_MATCH_PHRASE = 2 + # match this boolean query + SPH_MATCH_BOOLEAN = 3 + # match this extended query + SPH_MATCH_EXTENDED = 4 + # match all document IDs w/o fulltext query, apply filters + SPH_MATCH_FULLSCAN = 5 + # extended engine V2 (TEMPORARY, WILL BE REMOVED IN 0.9.8-RELEASE) + SPH_MATCH_EXTENDED2 = 6 + + # Known ranking modes (ext2 only) + + # default mode, phrase proximity major factor and BM25 minor one + SPH_RANK_PROXIMITY_BM25 = 0 + # statistical mode, BM25 ranking only (faster but worse quality) + SPH_RANK_BM25 = 1 + # no ranking, all matches get a weight of 1 + SPH_RANK_NONE = 2 + # simple word-count weighting, rank is a weighted sum of per-field keyword occurence counts + SPH_RANK_WORDCOUNT = 3 + # phrase proximity + SPH_RANK_PROXIMITY = 4 + + # Known sort modes + + # sort by document relevance desc, then by date + SPH_SORT_RELEVANCE = 0 + # sort by document date desc, then by relevance desc + SPH_SORT_ATTR_DESC = 1 + # sort by document date asc, then by relevance desc + SPH_SORT_ATTR_ASC = 2 + # sort by time segments (hour/day/week/etc) desc, then by relevance desc + SPH_SORT_TIME_SEGMENTS = 3 + # sort by SQL-like expression (eg. "@relevance DESC, price ASC, @id DESC") + SPH_SORT_EXTENDED = 4 + # sort by arithmetic expression in descending order (eg. "@id + max(@weight,1000)*boost + log(price)") + SPH_SORT_EXPR = 5 + + # Known filter types + + # filter by integer values set + SPH_FILTER_VALUES = 0 + # filter by integer range + SPH_FILTER_RANGE = 1 + # filter by float range + SPH_FILTER_FLOATRANGE = 2 + + # Known attribute types + + # this attr is just an integer + SPH_ATTR_INTEGER = 1 + # this attr is a timestamp + SPH_ATTR_TIMESTAMP = 2 + # this attr is an ordinal string number (integer at search time, + # specially handled at indexing time) + SPH_ATTR_ORDINAL = 3 + # this attr is a boolean bit field + SPH_ATTR_BOOL = 4 + # this attr is a float + SPH_ATTR_FLOAT = 5 + # signed 64-bit integer + SPH_ATTR_BIGINT = 6 + # string + SPH_ATTR_STRING = 7 + # this attr has multiple values (0 or more) + SPH_ATTR_MULTI = 0x40000001 + SPH_ATTR_MULTI64 = 0x40000002 + + # Known grouping functions + + # group by day + SPH_GROUPBY_DAY = 0 + # group by week + SPH_GROUPBY_WEEK = 1 + # group by month + SPH_GROUPBY_MONTH = 2 + # group by year + SPH_GROUPBY_YEAR = 3 + # group by attribute value + SPH_GROUPBY_ATTR = 4 + # group by sequential attrs pair + SPH_GROUPBY_ATTRPAIR = 5 + + # Constructs the Sphinx::Client object and sets options to their default values. + def initialize + # per-client-object settings + @host = 'localhost' # searchd host (default is "localhost") + @port = 9312 # searchd port (default is 9312) + + # per-query settings + @offset = 0 # how many records to seek from result-set start (default is 0) + @limit = 20 # how many records to return from result-set starting at offset (default is 20) + @mode = SPH_MATCH_ALL # query matching mode (default is SPH_MATCH_ALL) + @weights = [] # per-field weights (default is 1 for all fields) + @sort = SPH_SORT_RELEVANCE # match sorting mode (default is SPH_SORT_RELEVANCE) + @sortby = '' # attribute to sort by (defualt is "") + @min_id = 0 # min ID to match (default is 0, which means no limit) + @max_id = 0 # max ID to match (default is 0, which means no limit) + @filters = [] # search filters + @groupby = '' # group-by attribute name + @groupfunc = SPH_GROUPBY_DAY # function to pre-process group-by attribute value with + @groupsort = '@group desc' # group-by sorting clause (to sort groups in result set with) + @groupdistinct = '' # group-by count-distinct attribute + @maxmatches = 1000 # max matches to retrieve + @cutoff = 0 # cutoff to stop searching at (default is 0) + @retrycount = 0 # distributed retries count + @retrydelay = 0 # distributed retries delay + @anchor = [] # geographical anchor point + @indexweights = [] # per-index weights + @ranker = SPH_RANK_PROXIMITY_BM25 # ranking mode (default is SPH_RANK_PROXIMITY_BM25) + @maxquerytime = 0 # max query time, milliseconds (default is 0, do not limit) + @fieldweights = {} # per-field-name weights + @overrides = [] # per-query attribute values overrides + @select = '*' # select-list (attributes or expressions, with optional aliases) + + # per-reply fields (for single-query case) + @error = '' # last error message + @warning = '' # last warning message + + @reqs = [] # requests storage (for multi-query case) + @mbenc = '' # stored mbstring encoding + end + + # Get last error message. + def GetLastError + @error + end + + # Get last warning message. + def GetLastWarning + @warning + end + + # Set searchd host name (string) and port (integer). + def SetServer(host, port) + assert { host.instance_of? String } + assert { port.instance_of? Fixnum } + + @host = host + @port = port + end + + # Set offset and count into result set, + # and optionally set max-matches and cutoff limits. + def SetLimits(offset, limit, max = 0, cutoff = 0) + assert { offset.instance_of? Fixnum } + assert { limit.instance_of? Fixnum } + assert { max.instance_of? Fixnum } + assert { offset >= 0 } + assert { limit > 0 } + assert { max >= 0 } + + @offset = offset + @limit = limit + @maxmatches = max if max > 0 + @cutoff = cutoff if cutoff > 0 + end + + # Set maximum query time, in milliseconds, per-index, + # integer, 0 means "do not limit" + def SetMaxQueryTime(max) + assert { max.instance_of? Fixnum } + assert { max >= 0 } + @maxquerytime = max + end + + # Set matching mode. + def SetMatchMode(mode) + assert { mode == SPH_MATCH_ALL \ + || mode == SPH_MATCH_ANY \ + || mode == SPH_MATCH_PHRASE \ + || mode == SPH_MATCH_BOOLEAN \ + || mode == SPH_MATCH_EXTENDED \ + || mode == SPH_MATCH_FULLSCAN \ + || mode == SPH_MATCH_EXTENDED2 } + + @mode = mode + end + + # Set ranking mode. + def SetRankingMode(ranker) + assert { ranker == SPH_RANK_PROXIMITY_BM25 \ + || ranker == SPH_RANK_BM25 \ + || ranker == SPH_RANK_NONE \ + || ranker == SPH_RANK_WORDCOUNT \ + || ranker == SPH_RANK_PROXIMITY } + + @ranker = ranker + end + + # Set matches sorting mode. + def SetSortMode(mode, sortby = '') + assert { mode == SPH_SORT_RELEVANCE \ + || mode == SPH_SORT_ATTR_DESC \ + || mode == SPH_SORT_ATTR_ASC \ + || mode == SPH_SORT_TIME_SEGMENTS \ + || mode == SPH_SORT_EXTENDED \ + || mode == SPH_SORT_EXPR } + assert { sortby.instance_of? String } + assert { mode == SPH_SORT_RELEVANCE || !sortby.empty? } + + @sort = mode + @sortby = sortby + end + + # Bind per-field weights by order. + # + # DEPRECATED; use SetFieldWeights() instead. + def SetWeights(weights) + assert { weights.instance_of? Array } + weights.each do |weight| + assert { weight.instance_of? Fixnum } + end + + @weights = weights + end + + # Bind per-field weights by name. + # + # Takes string (field name) to integer name (field weight) hash as an argument. + # * Takes precedence over SetWeights(). + # * Unknown names will be silently ignored. + # * Unbound fields will be silently given a weight of 1. + def SetFieldWeights(weights) + assert { weights.instance_of? Hash } + weights.each do |name, weight| + assert { name.instance_of? String } + assert { weight.instance_of? Fixnum } + end + + @fieldweights = weights + end + + # Bind per-index weights by name. + def SetIndexWeights(weights) + assert { weights.instance_of? Hash } + weights.each do |index, weight| + assert { index.instance_of? String } + assert { weight.instance_of? Fixnum } + end + + @indexweights = weights + end + + # Set IDs range to match. + # + # Only match records if document ID is beetwen min_id and max_id (inclusive). + def SetIDRange(min, max) + assert { min.instance_of?(Fixnum) or min.instance_of?(Bignum) } + assert { max.instance_of?(Fixnum) or max.instance_of?(Bignum) } + assert { min <= max } + + @min_id = min + @max_id = max + end + + # Set values filter. + # + # Only match those records where attribute column values + # are in specified set. + def SetFilter(attribute, values, exclude = false) + assert { attribute.instance_of? String } + assert { values.instance_of? Array } + assert { !values.empty? } + + if values.instance_of?(Array) && values.size > 0 + values.each do |value| + assert { value.instance_of? Fixnum } + end + + @filters << { 'type' => SPH_FILTER_VALUES, 'attr' => attribute, 'exclude' => exclude, 'values' => values } + end + end + + # Set range filter. + # + # Only match those records where attribute column value + # is beetwen min and max (including min and max). + def SetFilterRange(attribute, min, max, exclude = false) + assert { attribute.instance_of? String } + assert { min.instance_of? Fixnum or min.instance_of? Bignum } + assert { max.instance_of? Fixnum or max.instance_of? Bignum } + assert { min <= max } + + @filters << { 'type' => SPH_FILTER_RANGE, 'attr' => attribute, 'exclude' => exclude, 'min' => min, 'max' => max } + end + + # Set float range filter. + # + # Only match those records where attribute column value + # is beetwen min and max (including min and max). + def SetFilterFloatRange(attribute, min, max, exclude = false) + assert { attribute.instance_of? String } + assert { min.instance_of? Float } + assert { max.instance_of? Float } + assert { min <= max } + + @filters << { 'type' => SPH_FILTER_FLOATRANGE, 'attr' => attribute, 'exclude' => exclude, 'min' => min, 'max' => max } + end + + # Setup anchor point for geosphere distance calculations. + # + # Required to use @geodist in filters and sorting + # distance will be computed to this point. Latitude and longitude + # must be in radians. + # + # * attrlat -- is the name of latitude attribute + # * attrlong -- is the name of longitude attribute + # * lat -- is anchor point latitude, in radians + # * long -- is anchor point longitude, in radians + def SetGeoAnchor(attrlat, attrlong, lat, long) + assert { attrlat.instance_of? String } + assert { attrlong.instance_of? String } + assert { lat.instance_of? Float } + assert { long.instance_of? Float } + + @anchor = { 'attrlat' => attrlat, 'attrlong' => attrlong, 'lat' => lat, 'long' => long } + end + + # Set grouping attribute and function. + # + # In grouping mode, all matches are assigned to different groups + # based on grouping function value. + # + # Each group keeps track of the total match count, and the best match + # (in this group) according to current sorting function. + # + # The final result set contains one best match per group, with + # grouping function value and matches count attached. + # + # Groups in result set could be sorted by any sorting clause, + # including both document attributes and the following special + # internal Sphinx attributes: + # + # * @id - match document ID; + # * @weight, @rank, @relevance - match weight; + # * @group - groupby function value; + # * @count - amount of matches in group. + # + # the default mode is to sort by groupby value in descending order, + # ie. by '@group desc'. + # + # 'total_found' would contain total amount of matching groups over + # the whole index. + # + # WARNING: grouping is done in fixed memory and thus its results + # are only approximate; so there might be more groups reported + # in total_found than actually present. @count might also + # be underestimated. + # + # For example, if sorting by relevance and grouping by "published" + # attribute with SPH_GROUPBY_DAY function, then the result set will + # contain one most relevant match per each day when there were any + # matches published, with day number and per-day match count attached, + # and sorted by day number in descending order (ie. recent days first). + def SetGroupBy(attribute, func, groupsort = '@group desc') + assert { attribute.instance_of? String } + assert { groupsort.instance_of? String } + assert { func == SPH_GROUPBY_DAY \ + || func == SPH_GROUPBY_WEEK \ + || func == SPH_GROUPBY_MONTH \ + || func == SPH_GROUPBY_YEAR \ + || func == SPH_GROUPBY_ATTR \ + || func == SPH_GROUPBY_ATTRPAIR } + + @groupby = attribute + @groupfunc = func + @groupsort = groupsort + end + + # Set count-distinct attribute for group-by queries. + def SetGroupDistinct(attribute) + assert { attribute.instance_of? String } + @groupdistinct = attribute + end + + # Set distributed retries count and delay. + def SetRetries(count, delay = 0) + assert { count.instance_of? Fixnum } + assert { delay.instance_of? Fixnum } + + @retrycount = count + @retrydelay = delay + end + + # Set attribute values override + # + # There can be only one override per attribute. + # +values+ must be a hash that maps document IDs to attribute values. + def SetOverride(attrname, attrtype, values) + assert { attrname.instance_of? String } + assert { [SPH_ATTR_INTEGER, SPH_ATTR_TIMESTAMP, SPH_ATTR_BOOL, SPH_ATTR_FLOAT, SPH_ATTR_BIGINT].include?(attrtype) } + assert { values.instance_of? Hash } + + @overrides << { 'attr' => attrname, 'type' => attrtype, 'values' => values } + end + + # Set select-list (attributes or expressions), SQL-like syntax. + def SetSelect(select) + assert { select.instance_of? String } + @select = select + end + + # Clear all filters (for multi-queries). + def ResetFilters + @filters = [] + @anchor = [] + end + + # Clear groupby settings (for multi-queries). + def ResetGroupBy + @groupby = '' + @groupfunc = SPH_GROUPBY_DAY + @groupsort = '@group desc' + @groupdistinct = '' + end + + # Clear all attribute value overrides (for multi-queries). + def ResetOverrides + @overrides = [] + end + + # Connect to searchd server and run given search query. + # + # query is query string + + # index is index name (or names) to query. default value is "*" which means + # to query all indexes. Accepted characters for index names are letters, numbers, + # dash, and underscore; everything else is considered a separator. Therefore, + # all the following calls are valid and will search two indexes: + # + # sphinx.Query('test query', 'main delta') + # sphinx.Query('test query', 'main;delta') + # sphinx.Query('test query', 'main, delta') + # + # Index order matters. If identical IDs are found in two or more indexes, + # weight and attribute values from the very last matching index will be used + # for sorting and returning to client. Therefore, in the example above, + # matches from "delta" index will always "win" over matches from "main". + # + # Returns false on failure. + # Returns hash which has the following keys on success: + # + # * 'matches' -- array of hashes {'weight', 'group', 'id'}, where 'id' is document_id. + # * 'total' -- total amount of matches retrieved (upto SPH_MAX_MATCHES, see sphinx.h) + # * 'total_found' -- total amount of matching documents in index + # * 'time' -- search time + # * 'words' -- hash which maps query terms (stemmed!) to ('docs', 'hits') hash + def Query(query, index = '*', comment = '') + assert { @reqs.empty? } + @reqs = [] + + self.AddQuery(query, index, comment) + results = self.RunQueries + + # probably network error; error message should be already filled + return false unless results.instance_of?(Array) + + @error = results[0]['error'] + @warning = results[0]['warning'] + + return false if results[0]['status'] == SEARCHD_ERROR + return results[0] + end + + # Add query to batch. + # + # Batch queries enable searchd to perform internal optimizations, + # if possible; and reduce network connection overheads in all cases. + # + # For instance, running exactly the same query with different + # groupby settings will enable searched to perform expensive + # full-text search and ranking operation only once, but compute + # multiple groupby results from its output. + # + # Parameters are exactly the same as in Query call. + # Returns index to results array returned by RunQueries call. + def AddQuery(query, index = '*', comment = '') + # build request + + # mode and limits + request = Request.new + request.put_int @offset, @limit, @mode, @ranker, @sort + request.put_string @sortby + # query itself + request.put_string query + # weights + request.put_int_array @weights + # indexes + request.put_string index + # id64 range marker + request.put_int 1 + # id64 range + request.put_int64 @min_id.to_i, @max_id.to_i + + # filters + request.put_int @filters.length + @filters.each do |filter| + request.put_string filter['attr'] + request.put_int filter['type'] + + case filter['type'] + when SPH_FILTER_VALUES + request.put_int64_array filter['values'] + when SPH_FILTER_RANGE + request.put_int64 filter['min'], filter['max'] + when SPH_FILTER_FLOATRANGE + request.put_float filter['min'], filter['max'] + else + raise SphinxInternalError, 'Internal error: unhandled filter type' + end + request.put_int filter['exclude'] ? 1 : 0 + end + + # group-by clause, max-matches count, group-sort clause, cutoff count + request.put_int @groupfunc + request.put_string @groupby + request.put_int @maxmatches + request.put_string @groupsort + request.put_int @cutoff, @retrycount, @retrydelay + request.put_string @groupdistinct + + # anchor point + if @anchor.empty? + request.put_int 0 + else + request.put_int 1 + request.put_string @anchor['attrlat'], @anchor['attrlong'] + request.put_float @anchor['lat'], @anchor['long'] + end + + # per-index weights + request.put_int @indexweights.length + @indexweights.each do |idx, weight| + request.put_string idx + request.put_int weight + end + + # max query time + request.put_int @maxquerytime + + # per-field weights + request.put_int @fieldweights.length + @fieldweights.each do |field, weight| + request.put_string field + request.put_int weight + end + + # comment + request.put_string comment + + # attribute overrides + request.put_int @overrides.length + for entry in @overrides do + request.put_string entry['attr'] + request.put_int entry['type'], entry['values'].size + entry['values'].each do |id, val| + assert { id.instance_of?(Fixnum) || id.instance_of?(Bignum) } + assert { val.instance_of?(Fixnum) || val.instance_of?(Bignum) || val.instance_of?(Float) } + + request.put_int64 id + case entry['type'] + when SPH_ATTR_FLOAT + request.put_float val + when SPH_ATTR_BIGINT + request.put_int64 val + else + request.put_int val + end + end + end + + # select-list + request.put_string @select + + # store request to requests array + @reqs << request.to_s; + return @reqs.length - 1 + end + + # Run queries batch. + # + # Returns an array of result sets on success. + # Returns false on network IO failure. + # + # Each result set in returned array is a hash which containts + # the same keys as the hash returned by Query, plus: + # + # * 'error' -- search error for this query + # * 'words' -- hash which maps query terms (stemmed!) to ( "docs", "hits" ) hash + def RunQueries + if @reqs.empty? + @error = 'No queries defined, issue AddQuery() first' + return false + end + + req = @reqs.join('') + nreqs = @reqs.length + @reqs = [] + response = PerformRequest(:search, req, nreqs) + + # parse response + begin + results = [] + ires = 0 + while ires < nreqs + ires += 1 + result = {} + + result['error'] = '' + result['warning'] = '' + + # extract status + status = result['status'] = response.get_int + if status != SEARCHD_OK + message = response.get_string + if status == SEARCHD_WARNING + result['warning'] = message + else + result['error'] = message + results << result + next + end + end + + # read schema + fields = [] + attrs = {} + attrs_names_in_order = [] + + nfields = response.get_int + while nfields > 0 + nfields -= 1 + fields << response.get_string + end + result['fields'] = fields + + nattrs = response.get_int + while nattrs > 0 + nattrs -= 1 + attr = response.get_string + type = response.get_int + attrs[attr] = type + attrs_names_in_order << attr + end + result['attrs'] = attrs + + # read match count + count = response.get_int + id64 = response.get_int + + # read matches + result['matches'] = [] + while count > 0 + count -= 1 + + if id64 != 0 + doc = response.get_int64 + weight = response.get_int + else + doc, weight = response.get_ints(2) + end + + r = {} # This is a single result put in the result['matches'] array + r['id'] = doc + r['weight'] = weight + attrs_names_in_order.each do |a| + r['attrs'] ||= {} + + case attrs[a] + when SPH_ATTR_BIGINT + # handle 64-bit ints + r['attrs'][a] = response.get_int64 + when SPH_ATTR_FLOAT + # handle floats + r['attrs'][a] = response.get_float + when SPH_ATTR_STRING + # handle string + r['attrs'][a] = response.get_string + else + # handle everything else as unsigned ints + val = response.get_int + if attrs[a]==SPH_ATTR_MULTI + r['attrs'][a] = [] + 1.upto(val) do + r['attrs'][a] << response.get_int + end + elsif attrs[a]==SPH_ATTR_MULTI64 + r['attrs'][a] = [] + val = val/2 + 1.upto(val) do + r['attrs'][a] << response.get_int64 + end + else + r['attrs'][a] = val + end + end + end + result['matches'] << r + end + result['total'], result['total_found'], msecs, words = response.get_ints(4) + result['time'] = '%.3f' % (msecs / 1000.0) + + result['words'] = {} + while words > 0 + words -= 1 + word = response.get_string + docs, hits = response.get_ints(2) + result['words'][word] = { 'docs' => docs, 'hits' => hits } + end + + results << result + end + #rescue EOFError + # @error = 'incomplete reply' + # raise SphinxResponseError, @error + end + + return results + end + + # Connect to searchd server and generate exceprts from given documents. + # + # * docs -- an array of strings which represent the documents' contents + # * index -- a string specifiying the index which settings will be used + # for stemming, lexing and case folding + # * words -- a string which contains the words to highlight + # * opts is a hash which contains additional optional highlighting parameters. + # + # You can use following parameters: + # * 'before_match' -- a string to insert before a set of matching words, default is "" + # * 'after_match' -- a string to insert after a set of matching words, default is "" + # * 'chunk_separator' -- a string to insert between excerpts chunks, default is " ... " + # * 'limit' -- max excerpt size in symbols (codepoints), default is 256 + # * 'around' -- how much words to highlight around each match, default is 5 + # * 'exact_phrase' -- whether to highlight exact phrase matches only, default is false + # * 'single_passage' -- whether to extract single best passage only, default is false + # * 'use_boundaries' -- whether to extract passages by phrase boundaries setup in tokenizer + # * 'weight_order' -- whether to order best passages in document (default) or weight order + # + # Returns false on failure. + # Returns an array of string excerpts on success. + def BuildExcerpts(docs, index, words, opts = {}) + assert { docs.instance_of? Array } + assert { index.instance_of? String } + assert { words.instance_of? String } + assert { opts.instance_of? Hash } + + # fixup options + opts['before_match'] ||= ''; + opts['after_match'] ||= ''; + opts['chunk_separator'] ||= ' ... '; + opts['html_strip_mode'] ||= 'index'; + opts['limit'] ||= 256; + opts['limit_passages'] ||= 0; + opts['limit_words'] ||= 0; + opts['around'] ||= 5; + opts['start_passage_id'] ||= 1; + opts['exact_phrase'] ||= false + opts['single_passage'] ||= false + opts['use_boundaries'] ||= false + opts['weight_order'] ||= false + opts['load_files'] ||= false + opts['allow_empty'] ||= false + + # build request + + # v.1.0 req + flags = 1 + flags |= 2 if opts['exact_phrase'] + flags |= 4 if opts['single_passage'] + flags |= 8 if opts['use_boundaries'] + flags |= 16 if opts['weight_order'] + flags |= 32 if opts['query_mode'] + flags |= 64 if opts['force_all_words'] + flags |= 128 if opts['load_files'] + flags |= 256 if opts['allow_empty'] + + request = Request.new + request.put_int 0, flags # mode=0, flags=1 (remove spaces) + # req index + request.put_string index + # req words + request.put_string words + + # options + request.put_string opts['before_match'] + request.put_string opts['after_match'] + request.put_string opts['chunk_separator'] + request.put_int opts['limit'].to_i, opts['around'].to_i + + # options v1.2 + request.put_int opts['limit_passages'].to_i + request.put_int opts['limit_words'].to_i + request.put_int opts['start_passage_id'].to_i + request.put_string opts['html_strip_mode'] + + # documents + request.put_int docs.size + docs.each do |doc| + assert { doc.instance_of? String } + + request.put_string doc + end + + response = PerformRequest(:excerpt, request) + + # parse response + begin + res = [] + docs.each do |doc| + res << response.get_string + end + rescue EOFError + @error = 'incomplete reply' + raise SphinxResponseError, @error + end + return res + end + + # Connect to searchd server, and generate keyword list for a given query. + # + # Returns an array of words on success. + def BuildKeywords(query, index, hits) + assert { query.instance_of? String } + assert { index.instance_of? String } + assert { hits.instance_of?(TrueClass) || hits.instance_of?(FalseClass) } + + # build request + request = Request.new + # v.1.0 req + request.put_string query # req query + request.put_string index # req index + request.put_int hits ? 1 : 0 + + response = PerformRequest(:keywords, request) + + # parse response + begin + res = [] + nwords = response.get_int + 0.upto(nwords - 1) do |i| + tokenized = response.get_string + normalized = response.get_string + + entry = { 'tokenized' => tokenized, 'normalized' => normalized } + entry['docs'], entry['hits'] = response.get_ints(2) if hits + + res << entry + end + rescue EOFError + @error = 'incomplete reply' + raise SphinxResponseError, @error + end + + return res + end + + # Batch update given attributes in given rows in given indexes. + # + # * +index+ is a name of the index to be updated + # * +attrs+ is an array of attribute name strings. + # * +values+ is a hash where key is document id, and value is an array of + # * +mva+ identifies whether update MVA + # new attribute values + # + # Returns number of actually updated documents (0 or more) on success. + # Returns -1 on failure. + # + # Usage example: + # sphinx.UpdateAttributes('test1', ['group_id'], { 1 => [456] }) + def UpdateAttributes(index, attrs, values, mva = false) + # verify everything + assert { index.instance_of? String } + assert { mva.instance_of?(TrueClass) || mva.instance_of?(FalseClass) } + + assert { attrs.instance_of? Array } + attrs.each do |attr| + assert { attr.instance_of? String } + end + + assert { values.instance_of? Hash } + values.each do |id, entry| + assert { id.instance_of? Fixnum } + assert { entry.instance_of? Array } + assert { entry.length == attrs.length } + entry.each do |v| + if mva + assert { v.instance_of? Array } + v.each { |vv| assert { vv.instance_of? Fixnum } } + else + assert { v.instance_of? Fixnum } + end + end + end + + # build request + request = Request.new + request.put_string index + + request.put_int attrs.length + for attr in attrs + request.put_string attr + request.put_int mva ? 1 : 0 + end + + request.put_int values.length + values.each do |id, entry| + request.put_int64 id + if mva + entry.each { |v| request.put_int_array v } + else + request.put_int(*entry) + end + end + + response = PerformRequest(:update, request) + + # parse response + begin + return response.get_int + rescue EOFError + @error = 'incomplete reply' + raise SphinxResponseError, @error + end + end + + protected + + # Connect to searchd server. + def Connect + begin + if @host[0,1]=='/' + sock = UNIXSocket.new(@host) + else + sock = TCPSocket.new(@host, @port) + end + rescue => err + @error = "connection to #{@host}:#{@port} failed (error=#{err})" + raise SphinxConnectError, @error + end + + v = sock.recv(4).unpack('N*').first + if v < 1 + sock.close + @error = "expected searchd protocol version 1+, got version '#{v}'" + raise SphinxConnectError, @error + end + + sock.send([1].pack('N'), 0) + sock + end + + # Get and check response packet from searchd server. + def GetResponse(sock, client_version) + response = '' + len = 0 + + header = sock.recv(8) + if header.length == 8 + status, ver, len = header.unpack('n2N') + left = len.to_i + while left > 0 do + begin + chunk = sock.recv(left) + if chunk + response << chunk + left -= chunk.length + end + rescue EOFError + break + end + end + end + sock.close + + # check response + read = response.length + if response.empty? or read != len.to_i + @error = response.empty? \ + ? 'received zero-sized searchd response' \ + : "failed to read searchd response (status=#{status}, ver=#{ver}, len=#{len}, read=#{read})" + raise SphinxResponseError, @error + end + + # check status + if (status == SEARCHD_WARNING) + wlen = response[0, 4].unpack('N*').first + @warning = response[4, wlen] + return response[4 + wlen, response.length - 4 - wlen] + end + + if status == SEARCHD_ERROR + @error = 'searchd error: ' + response[4, response.length - 4] + raise SphinxInternalError, @error + end + + if status == SEARCHD_RETRY + @error = 'temporary searchd error: ' + response[4, response.length - 4] + raise SphinxTemporaryError, @error + end + + unless status == SEARCHD_OK + @error = "unknown status code: '#{status}'" + raise SphinxUnknownError, @error + end + + # check version + if ver < client_version + @warning = "searchd command v.#{ver >> 8}.#{ver & 0xff} older than client's " + + "v.#{client_version >> 8}.#{client_version & 0xff}, some options might not work" + end + + return response + end + + # Connect, send query, get response. + def PerformRequest(command, request, additional = nil) + cmd = command.to_s.upcase + command_id = Sphinx::Client.const_get('SEARCHD_COMMAND_' + cmd) + command_ver = Sphinx::Client.const_get('VER_COMMAND_' + cmd) + + sock = self.Connect + len = request.to_s.length + (additional != nil ? 8 : 0) + header = [command_id, command_ver, len].pack('nnN') + header << [0, additional].pack('NN') if additional != nil + sock.send(header + request.to_s, 0) + response = self.GetResponse(sock, command_ver) + return Response.new(response) + end + + # :stopdoc: + def assert + raise 'Assertion failed!' unless yield if $DEBUG + end + # :startdoc: + end +end diff --git a/coreseek/csft-4.1/api/ruby/lib/sphinx/request.rb b/coreseek/csft-4.1/api/ruby/lib/sphinx/request.rb new file mode 100755 index 0000000..ac4e03c --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/lib/sphinx/request.rb @@ -0,0 +1,50 @@ +module Sphinx + # Pack ints, floats, strings, and arrays to internal representation + # needed by Sphinx search engine. + class Request + # Initialize new request. + def initialize + @request = '' + end + + # Put int(s) to request. + def put_int(*ints) + ints.each { |i| @request << [i].pack('N') } + end + + # Put 64-bit int(s) to request. + def put_int64(*ints) + ints.each { |i| @request << [i].pack('q').reverse }#[i >> 32, i & ((1 << 32) - 1)].pack('NN') } + end + + # Put string(s) to request (first length, then the string itself). + def put_string(*strings) + strings.each { |s| @request << [s.length].pack('N') + s } + end + + # Put float(s) to request. + def put_float(*floats) + floats.each do |f| + t1 = [f].pack('f') # machine order + t2 = t1.unpack('L*').first # int in machine order + @request << [t2].pack('N') + end + end + + # Put array of ints to request (first length, then the array itself) + def put_int_array(arr) + put_int arr.length, *arr + end + + # Put array of 64-bit ints to request (first length, then the array itself) + def put_int64_array(arr) + put_int arr.length + put_int64(*arr) + end + + # Returns the entire message + def to_s + @request + end + end +end diff --git a/coreseek/csft-4.1/api/ruby/lib/sphinx/response.rb b/coreseek/csft-4.1/api/ruby/lib/sphinx/response.rb new file mode 100755 index 0000000..26b6182 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/lib/sphinx/response.rb @@ -0,0 +1,69 @@ +module Sphinx + # Unpack internal Sphinx representation of ints, floats, strings, and arrays. + # needed by Sphinx search engine. + class Response + # Initialize new request. + def initialize(response) + @response = response + @position = 0 + @size = response.length + end + + # Gets current stream position. + def position + @position + end + + # Gets response size. + def size + @size + end + + # Returns true when response stream is out. + def eof? + @position >= @size + end + + # Get int from stream. + def get_int + raise EOFError if @position + 4 > @size + value = @response[@position, 4].unpack('N*').first + @position += 4 + return value + end + + # Get 64-bit int from stream. + def get_int64 + raise EOFError if @position + 8 > @size + hi, lo = @response[@position, 8].unpack('N*N*') + @position += 8 + return (hi << 32) + lo + end + + # Get array of count ints from stream. + def get_ints(count) + length = 4 * count + raise EOFError if @position + length > @size + values = @response[@position, length].unpack('N*' * count) + @position += length + return values + end + + # Get string from stream. + def get_string + length = get_int + raise EOFError if @position + length > @size + value = length > 0 ? @response[@position, length] : '' + @position += length + return value + end + + # Get float from stream. + def get_float + raise EOFError if @position + 4 > @size + uval = @response[@position, 4].unpack('N*').first; + @position += 4 + return ([uval].pack('L')).unpack('f*').first + end + end +end \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/client_response_spec.rb b/coreseek/csft-4.1/api/ruby/spec/client_response_spec.rb new file mode 100755 index 0000000..868efb0 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/client_response_spec.rb @@ -0,0 +1,112 @@ +require File.dirname(__FILE__) + '/../init' + +# To execute these tests you need to execute sphinx_test.sql and configure sphinx using sphinx.conf +# (both files are placed under sphinx directory) +context 'The SphinxApi connected to Sphinx' do + setup do + @sphinx = Sphinx::Client.new + end + + specify 'should parse response in Query method' do + result = @sphinx.Query('wifi', 'test1') + validate_results_wifi(result) + end + + specify 'should process 64-bit keys in Query method' do + result = @sphinx.Query('wifi', 'test2') + result['total_found'].should == 3 + result['matches'].length.should == 3 + result['matches'][0]['id'].should == 4294967298 + result['matches'][1]['id'].should == 4294967299 + result['matches'][2]['id'].should == 4294967297 + end + + specify 'should parse batch-query responce in RunQueries method' do + @sphinx.AddQuery('wifi', 'test1') + @sphinx.AddQuery('gprs', 'test1') + results = @sphinx.RunQueries + results.should be_an_instance_of(Array) + results.length.should == 2 + validate_results_wifi(results[0]) + end + + specify 'should parse response in BuildExcerpts method' do + result = @sphinx.BuildExcerpts(['what the world', 'London is the capital of Great Britain'], 'test1', 'the') + result.should == ['what the world', 'London is the capital of Great Britain'] + end + + specify 'should parse response in BuildKeywords method' do + result = @sphinx.BuildKeywords('wifi gprs', 'test1', true) + result.should == [ + { 'normalized' => 'wifi', 'tokenized' => 'wifi', 'hits' => 6, 'docs' => 3 }, + { 'normalized' => 'gprs', 'tokenized' => 'gprs', 'hits' => 1, 'docs' => 1 } + ] + end + + specify 'should parse response in UpdateAttributes method' do + @sphinx.UpdateAttributes('test1', ['group_id'], { 2 => [1] }).should == 1 + result = @sphinx.Query('wifi', 'test1') + result['matches'][0]['attrs']['group_id'].should == 1 + @sphinx.UpdateAttributes('test1', ['group_id'], { 2 => [2] }).should == 1 + result = @sphinx.Query('wifi', 'test1') + result['matches'][0]['attrs']['group_id'].should == 2 + end + + specify 'should parse response in UpdateAttributes method with MVA' do + @sphinx.UpdateAttributes('test1', ['tags'], { 2 => [[1, 2, 3, 4, 5, 6, 7, 8, 9]] }, true).should == 1 + result = @sphinx.Query('wifi', 'test1') + result['matches'][0]['attrs']['tags'].should == [1, 2, 3, 4, 5, 6, 7, 8, 9] + @sphinx.UpdateAttributes('test1', ['tags'], { 2 => [[5, 6, 7, 8]] }, true).should == 1 + result = @sphinx.Query('wifi', 'test1') + result['matches'][0]['attrs']['tags'].should == [5, 6, 7, 8] + end + + specify 'should process errors in Query method' do + @sphinx.Query('wifi', 'fakeindex').should be_false + @sphinx.GetLastError.length.should_not == 0 + end + + specify 'should process errors in RunQueries method' do + @sphinx.AddQuery('wifi', 'fakeindex') + r = @sphinx.RunQueries + r[0]['error'].length.should_not == 0 + end + + def validate_results_wifi(result) + result['total_found'].should == 3 + result['matches'].length.should == 3 + result['time'].should_not be_nil + result['attrs'].should == { + 'group_id' => Sphinx::Client::SPH_ATTR_INTEGER, + 'created_at' => Sphinx::Client::SPH_ATTR_TIMESTAMP, + 'rating' => Sphinx::Client::SPH_ATTR_FLOAT, + 'tags' => Sphinx::Client::SPH_ATTR_MULTI | Sphinx::Client::SPH_ATTR_INTEGER + } + result['fields'].should == [ 'name', 'description' ] + result['total'].should == 3 + result['matches'].should be_an_instance_of(Array) + + result['matches'][0]['id'].should == 2 + result['matches'][0]['weight'].should == 2 + result['matches'][0]['attrs']['group_id'].should == 2 + result['matches'][0]['attrs']['created_at'].should == 1175658555 + result['matches'][0]['attrs']['tags'].should == [5, 6, 7, 8] + ('%0.2f' % result['matches'][0]['attrs']['rating']).should == '54.85' + + result['matches'][1]['id'].should == 3 + result['matches'][1]['weight'].should == 2 + result['matches'][1]['attrs']['group_id'].should == 1 + result['matches'][1]['attrs']['created_at'].should == 1175658647 + result['matches'][1]['attrs']['tags'].should == [1, 7, 9, 10] + ('%0.2f' % result['matches'][1]['attrs']['rating']).should == '16.25' + + result['matches'][2]['id'].should == 1 + result['matches'][2]['weight'].should == 1 + result['matches'][2]['attrs']['group_id'].should == 1 + result['matches'][2]['attrs']['created_at'].should == 1175658490 + result['matches'][2]['attrs']['tags'].should == [1, 2, 3, 4] + ('%0.2f' % result['matches'][2]['attrs']['rating']).should == '13.32' + + result['words'].should == { 'wifi' => { 'hits' => 6, 'docs' => 3 } } + end +end diff --git a/coreseek/csft-4.1/api/ruby/spec/client_spec.rb b/coreseek/csft-4.1/api/ruby/spec/client_spec.rb new file mode 100755 index 0000000..e689c75 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/client_spec.rb @@ -0,0 +1,469 @@ +require File.dirname(__FILE__) + '/../init' + +class SphinxSpecError < StandardError; end + +module SphinxFixtureHelper + def sphinx_fixture(name) + `php #{File.dirname(__FILE__)}/fixtures/#{name}.php` + end +end + +module SphinxApiCall + def create_sphinx + @sphinx = Sphinx::Client.new + @sock = mock('TCPSocket') + @sphinx.stub!(:Connect).and_return(@sock) + @sphinx.stub!(:GetResponse).and_raise(SphinxSpecError) + return @sphinx + end + + def safe_call + yield + rescue SphinxSpecError + end +end + +describe 'The Connect method of Sphinx::Client' do + before(:each) do + @sphinx = Sphinx::Client.new + @sock = mock('TCPSocket') + end + + it 'should establish TCP connection to the server and initialize session' do + TCPSocket.should_receive(:new).with('localhost', 9312).and_return(@sock) + @sock.should_receive(:recv).with(4).and_return([1].pack('N')) + @sock.should_receive(:send).with([1].pack('N'), 0) + @sphinx.send(:Connect).should be(@sock) + end + + it 'should raise exception when searchd protocol is not 1+' do + TCPSocket.should_receive(:new).with('localhost', 9312).and_return(@sock) + @sock.should_receive(:recv).with(4).and_return([0].pack('N')) + @sock.should_receive(:close) + lambda { @sphinx.send(:Connect) }.should raise_error(Sphinx::SphinxConnectError) + @sphinx.GetLastError.should == 'expected searchd protocol version 1+, got version \'0\'' + end + + it 'should raise exception on connection error' do + TCPSocket.should_receive(:new).with('localhost', 9312).and_raise(Errno::EBADF) + lambda { @sphinx.send(:Connect) }.should raise_error(Sphinx::SphinxConnectError) + @sphinx.GetLastError.should == 'connection to localhost:9312 failed' + end + + it 'should use custom host and port' do + @sphinx.SetServer('anotherhost', 55555) + TCPSocket.should_receive(:new).with('anotherhost', 55555).and_raise(Errno::EBADF) + lambda { @sphinx.send(:Connect) }.should raise_error(Sphinx::SphinxConnectError) + end +end + +describe 'The GetResponse method of Sphinx::Client' do + before(:each) do + @sphinx = Sphinx::Client.new + @sock = mock('TCPSocket') + @sock.should_receive(:close) + end + + it 'should receive response' do + @sock.should_receive(:recv).with(8).and_return([Sphinx::Client::SEARCHD_OK, 1, 4].pack('n2N')) + @sock.should_receive(:recv).with(4).and_return([0].pack('N')) + @sphinx.send(:GetResponse, @sock, 1) + end + + it 'should raise exception on zero-sized response' do + @sock.should_receive(:recv).with(8).and_return([Sphinx::Client::SEARCHD_OK, 1, 0].pack('n2N')) + lambda { @sphinx.send(:GetResponse, @sock, 1) }.should raise_error(Sphinx::SphinxResponseError) + end + + it 'should raise exception when response is incomplete' do + @sock.should_receive(:recv).with(8).and_return([Sphinx::Client::SEARCHD_OK, 1, 4].pack('n2N')) + @sock.should_receive(:recv).with(4).and_raise(EOFError) + lambda { @sphinx.send(:GetResponse, @sock, 1) }.should raise_error(Sphinx::SphinxResponseError) + end + + it 'should set warning message when SEARCHD_WARNING received' do + @sock.should_receive(:recv).with(8).and_return([Sphinx::Client::SEARCHD_WARNING, 1, 14].pack('n2N')) + @sock.should_receive(:recv).with(14).and_return([5].pack('N') + 'helloworld') + @sphinx.send(:GetResponse, @sock, 1).should == 'world' + @sphinx.GetLastWarning.should == 'hello' + end + + it 'should raise exception when SEARCHD_ERROR received' do + @sock.should_receive(:recv).with(8).and_return([Sphinx::Client::SEARCHD_ERROR, 1, 9].pack('n2N')) + @sock.should_receive(:recv).with(9).and_return([1].pack('N') + 'hello') + lambda { @sphinx.send(:GetResponse, @sock, 1) }.should raise_error(Sphinx::SphinxInternalError) + @sphinx.GetLastError.should == 'searchd error: hello' + end + + it 'should raise exception when SEARCHD_RETRY received' do + @sock.should_receive(:recv).with(8).and_return([Sphinx::Client::SEARCHD_RETRY, 1, 9].pack('n2N')) + @sock.should_receive(:recv).with(9).and_return([1].pack('N') + 'hello') + lambda { @sphinx.send(:GetResponse, @sock, 1) }.should raise_error(Sphinx::SphinxTemporaryError) + @sphinx.GetLastError.should == 'temporary searchd error: hello' + end + + it 'should raise exception when unknown status received' do + @sock.should_receive(:recv).with(8).and_return([65535, 1, 9].pack('n2N')) + @sock.should_receive(:recv).with(9).and_return([1].pack('N') + 'hello') + lambda { @sphinx.send(:GetResponse, @sock, 1) }.should raise_error(Sphinx::SphinxUnknownError) + @sphinx.GetLastError.should == 'unknown status code: \'65535\'' + end + + it 'should set warning when server is older than client' do + @sock.should_receive(:recv).with(8).and_return([Sphinx::Client::SEARCHD_OK, 1, 9].pack('n2N')) + @sock.should_receive(:recv).with(9).and_return([1].pack('N') + 'hello') + @sphinx.send(:GetResponse, @sock, 5) + @sphinx.GetLastWarning.should == 'searchd command v.0.1 older than client\'s v.0.5, some options might not work' + end +end + +describe 'The Query method of Sphinx::Client' do + include SphinxFixtureHelper + include SphinxApiCall + + before(:each) do + @sphinx = create_sphinx + end + + it 'should generate valid request with default parameters' do + expected = sphinx_fixture('default_search') + @sock.should_receive(:send).with(expected, 0) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with default parameters and index' do + expected = sphinx_fixture('default_search_index') + @sock.should_receive(:send).with(expected, 0) + @sphinx.Query('query', 'index') rescue nil? + end + + it 'should generate valid request with limits' do + expected = sphinx_fixture('limits') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetLimits(10, 20) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with limits and max number to retrieve' do + expected = sphinx_fixture('limits_max') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetLimits(10, 20, 30) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with limits and cutoff to retrieve' do + expected = sphinx_fixture('limits_cutoff') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetLimits(10, 20, 30, 40) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with max query time specified' do + expected = sphinx_fixture('max_query_time') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetMaxQueryTime(1000) + @sphinx.Query('query') rescue nil? + end + + describe 'with match' do + [ :all, :any, :phrase, :boolean, :extended, :fullscan, :extended2 ].each do |match| + it "should generate valid request for SPH_MATCH_#{match.to_s.upcase}" do + expected = sphinx_fixture("match_#{match}") + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetMatchMode(Sphinx::Client::const_get("SPH_MATCH_#{match.to_s.upcase}")) + @sphinx.Query('query') rescue nil? + end + end + end + + describe 'with rank' do + [ :proximity_bm25, :bm25, :none, :wordcount, :proximity ].each do |rank| + it "should generate valid request for SPH_RANK_#{rank.to_s.upcase}" do + expected = sphinx_fixture("ranking_#{rank}") + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetRankingMode(Sphinx::Client.const_get("SPH_RANK_#{rank.to_s.upcase}")) + @sphinx.Query('query') rescue nil? + end + end + end + + describe 'with sorting' do + [ :attr_desc, :relevance, :attr_asc, :time_segments, :extended, :expr ].each do |mode| + it "should generate valid request for SPH_SORT_#{mode.to_s.upcase}" do + expected = sphinx_fixture("sort_#{mode}") + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetSortMode(Sphinx::Client.const_get("SPH_SORT_#{mode.to_s.upcase}"), mode == :relevance ? '' : 'sortby') + @sphinx.Query('query') rescue nil? + end + end + end + + it 'should generate valid request with weights' do + expected = sphinx_fixture('weights') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetWeights([10, 20, 30, 40]) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with field weights' do + expected = sphinx_fixture('field_weights') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFieldWeights({'field1' => 10, 'field2' => 20}) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with index weights' do + expected = sphinx_fixture('index_weights') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetIndexWeights({'index1' => 10, 'index2' => 20}) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with ID range' do + expected = sphinx_fixture('id_range') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetIDRange(10, 20) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with ID range and 64-bit ints' do + expected = sphinx_fixture('id_range64') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetIDRange(8589934591, 17179869183) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with values filter' do + expected = sphinx_fixture('filter') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilter('attr', [10, 20, 30]) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with two values filters' do + expected = sphinx_fixture('filters') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilter('attr2', [40, 50]) + @sphinx.SetFilter('attr1', [10, 20, 30]) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with values filter excluded' do + expected = sphinx_fixture('filter_exclude') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilter('attr', [10, 20, 30], true) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with values filter range' do + expected = sphinx_fixture('filter_range') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilterRange('attr', 10, 20) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with two filter ranges' do + expected = sphinx_fixture('filter_ranges') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilterRange('attr2', 30, 40) + @sphinx.SetFilterRange('attr1', 10, 20) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with filter range excluded' do + expected = sphinx_fixture('filter_range_exclude') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilterRange('attr', 10, 20, true) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with signed int64-based filter range' do + expected = sphinx_fixture('filter_range_int64') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilterRange('attr1', -10, 20) + @sphinx.SetFilterRange('attr2', -1099511627770, 1099511627780) + safe_call { @sphinx.Query('query') } + end + + it 'should generate valid request with float filter range' do + expected = sphinx_fixture('filter_float_range') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilterFloatRange('attr', 10.5, 20.3) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with float filter excluded' do + expected = sphinx_fixture('filter_float_range_exclude') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilterFloatRange('attr', 10.5, 20.3, true) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with different filters' do + expected = sphinx_fixture('filters_different') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetFilterRange('attr1', 10, 20, true) + @sphinx.SetFilter('attr3', [30, 40, 50]) + @sphinx.SetFilterRange('attr1', 60, 70) + @sphinx.SetFilter('attr2', [80, 90, 100], true) + @sphinx.SetFilterFloatRange('attr1', 60.8, 70.5) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with geographical anchor point' do + expected = sphinx_fixture('geo_anchor') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetGeoAnchor('attrlat', 'attrlong', 20.3, 40.7) + @sphinx.Query('query') rescue nil? + end + + describe 'with group by' do + [ :day, :week, :month, :year, :attr, :attrpair ].each do |groupby| + it "should generate valid request for SPH_GROUPBY_#{groupby.to_s.upcase}" do + expected = sphinx_fixture("group_by_#{groupby}") + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetGroupBy('attr', Sphinx::Client::const_get("SPH_GROUPBY_#{groupby.to_s.upcase}")) + @sphinx.Query('query') rescue nil? + end + end + + it 'should generate valid request for SPH_GROUPBY_DAY with sort' do + expected = sphinx_fixture('group_by_day_sort') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetGroupBy('attr', Sphinx::Client::SPH_GROUPBY_DAY, 'somesort') + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with count-distinct attribute' do + expected = sphinx_fixture('group_distinct') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetGroupBy('attr', Sphinx::Client::SPH_GROUPBY_DAY) + @sphinx.SetGroupDistinct('attr') + @sphinx.Query('query') rescue nil? + end + end + + it 'should generate valid request with retries count specified' do + expected = sphinx_fixture('retries') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetRetries(10) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request with retries count and delay specified' do + expected = sphinx_fixture('retries_delay') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetRetries(10, 20) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request for SetOverride' do + expected = sphinx_fixture('set_override') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetOverride('attr1', Sphinx::Client::SPH_ATTR_INTEGER, { 10 => 20 }) + @sphinx.SetOverride('attr2', Sphinx::Client::SPH_ATTR_FLOAT, { 11 => 30.3 }) + @sphinx.SetOverride('attr3', Sphinx::Client::SPH_ATTR_BIGINT, { 12 => 1099511627780 }) + @sphinx.Query('query') rescue nil? + end + + it 'should generate valid request for SetSelect' do + expected = sphinx_fixture('select') + @sock.should_receive(:send).with(expected, 0) + @sphinx.SetSelect('attr1, attr2') + @sphinx.Query('query') rescue nil? + end +end + +describe 'The RunQueries method of Sphinx::Client' do + include SphinxFixtureHelper + + before(:each) do + @sphinx = Sphinx::Client.new + @sock = mock('TCPSocket') + @sphinx.stub!(:Connect).and_return(@sock) + @sphinx.stub!(:GetResponse).and_raise(Sphinx::SphinxError) + end + + it 'should generate valid request for multiple queries' do + expected = sphinx_fixture('miltiple_queries') + @sock.should_receive(:send).with(expected, 0) + + @sphinx.SetRetries(10, 20) + @sphinx.AddQuery('test1') + @sphinx.SetGroupBy('attr', Sphinx::Client::SPH_GROUPBY_DAY) + @sphinx.AddQuery('test2') rescue nil? + + @sphinx.RunQueries rescue nil? + end +end + +describe 'The BuildExcerpts method of Sphinx::Client' do + include SphinxFixtureHelper + + before(:each) do + @sphinx = Sphinx::Client.new + @sock = mock('TCPSocket') + @sphinx.stub!(:Connect).and_return(@sock) + @sphinx.stub!(:GetResponse).and_raise(Sphinx::SphinxError) + end + + it 'should generate valid request with default parameters' do + expected = sphinx_fixture('excerpt_default') + @sock.should_receive(:send).with(expected, 0) + @sphinx.BuildExcerpts(['10', '20'], 'index', 'word1 word2') rescue nil? + end + + it 'should generate valid request with custom parameters' do + expected = sphinx_fixture('excerpt_custom') + @sock.should_receive(:send).with(expected, 0) + @sphinx.BuildExcerpts(['10', '20'], 'index', 'word1 word2', { 'before_match' => 'before', + 'after_match' => 'after', + 'chunk_separator' => 'separator', + 'limit' => 10 }) rescue nil? + end + + it 'should generate valid request with flags' do + expected = sphinx_fixture('excerpt_flags') + @sock.should_receive(:send).with(expected, 0) + @sphinx.BuildExcerpts(['10', '20'], 'index', 'word1 word2', { 'exact_phrase' => true, + 'single_passage' => true, + 'use_boundaries' => true, + 'weight_order' => true }) rescue nil? + end +end + +describe 'The BuildKeywords method of Sphinx::Client' do + include SphinxFixtureHelper + include SphinxApiCall + + before(:each) do + @sphinx = create_sphinx + end + + it 'should generate valid request' do + expected = sphinx_fixture('keywords') + @sock.should_receive(:send).with(expected, 0) + safe_call { @sphinx.BuildKeywords('test', 'index', true) } + end +end + +describe 'The UpdateAttributes method of Sphinx::Client' do + include SphinxFixtureHelper + include SphinxApiCall + + before(:each) do + @sphinx = create_sphinx + end + + it 'should generate valid request' do + expected = sphinx_fixture('update_attributes') + @sock.should_receive(:send).with(expected, 0) + safe_call { @sphinx.UpdateAttributes('index', ['group'], { 123 => [456] }) } + end + + it 'should generate valid request for MVA' do + expected = sphinx_fixture('update_attributes_mva') + @sock.should_receive(:send).with(expected, 0) + safe_call { @sphinx.UpdateAttributes('index', ['group', 'category'], { 123 => [ [456, 789], [1, 2, 3] ] }, true) } + end +end diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/default_search.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/default_search.php new file mode 100755 index 0000000..4c66793 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/default_search.php @@ -0,0 +1,8 @@ +Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/default_search_index.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/default_search_index.php new file mode 100755 index 0000000..e49bed0 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/default_search_index.php @@ -0,0 +1,8 @@ +Query('query', 'index'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_custom.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_custom.php new file mode 100755 index 0000000..7f51710 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_custom.php @@ -0,0 +1,11 @@ +BuildExcerpts(array('10', '20'), 'index', 'word1 word2', array('before_match' => 'before', + 'after_match' => 'after', + 'chunk_separator' => 'separator', + 'limit' => 10)); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_default.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_default.php new file mode 100755 index 0000000..358c473 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_default.php @@ -0,0 +1,8 @@ +BuildExcerpts(array('10', '20'), 'index', 'word1 word2'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_flags.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_flags.php new file mode 100755 index 0000000..f07a9b8 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/excerpt_flags.php @@ -0,0 +1,11 @@ +BuildExcerpts(array('10', '20'), 'index', 'word1 word2', array('exact_phrase' => true, + 'single_passage' => true, + 'use_boundaries' => true, + 'weight_order' => true)); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/field_weights.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/field_weights.php new file mode 100755 index 0000000..fa20da6 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/field_weights.php @@ -0,0 +1,9 @@ +SetFieldWeights(array('field1' => 10, 'field2' => 20)); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filter.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter.php new file mode 100755 index 0000000..f40b3ca --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter.php @@ -0,0 +1,9 @@ +SetFilter('attr', array(10, 20, 30)); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_exclude.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_exclude.php new file mode 100755 index 0000000..5f93631 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_exclude.php @@ -0,0 +1,9 @@ +SetFilter('attr', array(10, 20, 30), true); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_float_range.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_float_range.php new file mode 100755 index 0000000..7813944 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_float_range.php @@ -0,0 +1,9 @@ +SetFilterFloatRange('attr', 10.5, 20.3); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_float_range_exclude.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_float_range_exclude.php new file mode 100755 index 0000000..8bdc2a3 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_float_range_exclude.php @@ -0,0 +1,9 @@ +SetFilterFloatRange('attr', 10.5, 20.3, true); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range.php new file mode 100755 index 0000000..1cd000c --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range.php @@ -0,0 +1,9 @@ +SetFilterRange('attr', 10, 20); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range_exclude.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range_exclude.php new file mode 100755 index 0000000..1ef7a2f --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range_exclude.php @@ -0,0 +1,9 @@ +SetFilterRange('attr', 10, 20, true); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range_int64.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range_int64.php new file mode 100755 index 0000000..7c9f63f --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_range_int64.php @@ -0,0 +1,10 @@ +SetFilterRange('attr1', -10, 20); +$cl->SetFilterRange('attr2', -1099511627770, 1099511627780); +$cl->Query('query'); + +?> diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_ranges.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_ranges.php new file mode 100755 index 0000000..1f4a60f --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filter_ranges.php @@ -0,0 +1,10 @@ +SetFilterRange('attr2', 30, 40); +$cl->SetFilterRange('attr1', 10, 20); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filters.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filters.php new file mode 100755 index 0000000..b8fa2c2 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filters.php @@ -0,0 +1,10 @@ +SetFilter('attr2', array(40, 50)); +$cl->SetFilter('attr1', array(10, 20, 30)); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/filters_different.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/filters_different.php new file mode 100755 index 0000000..0787a18 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/filters_different.php @@ -0,0 +1,13 @@ +SetFilterRange('attr1', 10, 20, true); +$cl->SetFilter('attr3', array(30, 40, 50)); +$cl->SetFilterRange('attr1', 60, 70); +$cl->SetFilter('attr2', array(80, 90, 100), true); +$cl->SetFilterFloatRange('attr1', 60.8, 70.5); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/geo_anchor.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/geo_anchor.php new file mode 100755 index 0000000..af5ff0d --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/geo_anchor.php @@ -0,0 +1,9 @@ +SetGeoAnchor('attrlat', 'attrlong', 20.3, 40.7); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_attr.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_attr.php new file mode 100755 index 0000000..a99862c --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_attr.php @@ -0,0 +1,9 @@ +SetGroupBy('attr', SPH_GROUPBY_ATTR); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_attrpair.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_attrpair.php new file mode 100755 index 0000000..d0f1d27 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_attrpair.php @@ -0,0 +1,9 @@ +SetGroupBy('attr', SPH_GROUPBY_ATTRPAIR); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_day.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_day.php new file mode 100755 index 0000000..6660999 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_day.php @@ -0,0 +1,9 @@ +SetGroupBy('attr', SPH_GROUPBY_DAY); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_day_sort.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_day_sort.php new file mode 100755 index 0000000..6e15b98 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_day_sort.php @@ -0,0 +1,9 @@ +SetGroupBy('attr', SPH_GROUPBY_DAY, 'somesort'); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_month.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_month.php new file mode 100755 index 0000000..5ce0502 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_month.php @@ -0,0 +1,9 @@ +SetGroupBy('attr', SPH_GROUPBY_MONTH); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_week.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_week.php new file mode 100755 index 0000000..10d60ff --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_week.php @@ -0,0 +1,9 @@ +SetGroupBy('attr', SPH_GROUPBY_WEEK); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_year.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_year.php new file mode 100755 index 0000000..7769c87 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_by_year.php @@ -0,0 +1,9 @@ +SetGroupBy('attr', SPH_GROUPBY_YEAR); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/group_distinct.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_distinct.php new file mode 100755 index 0000000..858bac5 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/group_distinct.php @@ -0,0 +1,10 @@ +SetGroupBy('attr', SPH_GROUPBY_DAY); +$cl->SetGroupDistinct('attr'); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/id_range.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/id_range.php new file mode 100755 index 0000000..1baf005 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/id_range.php @@ -0,0 +1,9 @@ +SetIDRange(10, 20); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/id_range64.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/id_range64.php new file mode 100755 index 0000000..4434931 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/id_range64.php @@ -0,0 +1,9 @@ +SetIDRange(8589934591, 17179869183); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/index_weights.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/index_weights.php new file mode 100755 index 0000000..8fda1f5 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/index_weights.php @@ -0,0 +1,9 @@ +SetIndexWeights(array('index1' => 10, 'index2' => 20)); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/keywords.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/keywords.php new file mode 100755 index 0000000..c2a3852 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/keywords.php @@ -0,0 +1,8 @@ +BuildKeywords('test', 'index', true); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/limits.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/limits.php new file mode 100755 index 0000000..9c01bd3 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/limits.php @@ -0,0 +1,9 @@ +SetLimits(10, 20); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_cutoff.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_cutoff.php new file mode 100755 index 0000000..0f6a308 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_cutoff.php @@ -0,0 +1,9 @@ +SetLimits(10, 20, 30, 40); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_max.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_max.php new file mode 100755 index 0000000..485333e --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_max.php @@ -0,0 +1,9 @@ +SetLimits(10, 20, 30); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_max_cutoff.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_max_cutoff.php new file mode 100755 index 0000000..0f6a308 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/limits_max_cutoff.php @@ -0,0 +1,9 @@ +SetLimits(10, 20, 30, 40); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/match_all.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_all.php new file mode 100755 index 0000000..2415757 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_all.php @@ -0,0 +1,9 @@ +SetMatchMode(SPH_MATCH_ALL); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/match_any.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_any.php new file mode 100755 index 0000000..9b6ae7a --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_any.php @@ -0,0 +1,9 @@ +SetMatchMode(SPH_MATCH_ANY); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/match_boolean.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_boolean.php new file mode 100755 index 0000000..70a9ab2 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_boolean.php @@ -0,0 +1,9 @@ +SetMatchMode(SPH_MATCH_BOOLEAN); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/match_extended.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_extended.php new file mode 100755 index 0000000..d005c0a --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_extended.php @@ -0,0 +1,9 @@ +SetMatchMode(SPH_MATCH_EXTENDED); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/match_extended2.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_extended2.php new file mode 100755 index 0000000..a7e3b7f --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_extended2.php @@ -0,0 +1,9 @@ +SetMatchMode(SPH_MATCH_EXTENDED2); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/match_fullscan.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_fullscan.php new file mode 100755 index 0000000..853ce6b --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_fullscan.php @@ -0,0 +1,9 @@ +SetMatchMode(SPH_MATCH_FULLSCAN); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/match_phrase.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_phrase.php new file mode 100755 index 0000000..f73e430 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/match_phrase.php @@ -0,0 +1,9 @@ +SetMatchMode(SPH_MATCH_PHRASE); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/max_query_time.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/max_query_time.php new file mode 100755 index 0000000..3b25198 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/max_query_time.php @@ -0,0 +1,9 @@ +SetMaxQueryTime(1000); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/miltiple_queries.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/miltiple_queries.php new file mode 100755 index 0000000..7b53d16 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/miltiple_queries.php @@ -0,0 +1,12 @@ +SetRetries(10, 20); +$cl->AddQuery('test1'); +$cl->SetGroupBy('attr', SPH_GROUPBY_DAY); +$cl->AddQuery('test2'); +$cl->RunQueries(); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_bm25.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_bm25.php new file mode 100755 index 0000000..db87c1f --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_bm25.php @@ -0,0 +1,9 @@ +SetRankingMode(SPH_RANK_BM25); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_none.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_none.php new file mode 100755 index 0000000..84cf704 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_none.php @@ -0,0 +1,9 @@ +SetRankingMode(SPH_RANK_NONE); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_proximity.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_proximity.php new file mode 100755 index 0000000..8cdb6b5 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_proximity.php @@ -0,0 +1,9 @@ +SetRankingMode(SPH_RANK_PROXIMITY); +$cl->Query('query'); + +?> diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_proximity_bm25.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_proximity_bm25.php new file mode 100755 index 0000000..cc225dd --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_proximity_bm25.php @@ -0,0 +1,9 @@ +SetRankingMode(SPH_RANK_PROXIMITY_BM25); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_wordcount.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_wordcount.php new file mode 100755 index 0000000..38c7557 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/ranking_wordcount.php @@ -0,0 +1,9 @@ +SetRankingMode(SPH_RANK_WORDCOUNT); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/retries.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/retries.php new file mode 100755 index 0000000..de6ccdf --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/retries.php @@ -0,0 +1,9 @@ +SetRetries(10); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/retries_delay.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/retries_delay.php new file mode 100755 index 0000000..f859e3a --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/retries_delay.php @@ -0,0 +1,9 @@ +SetRetries(10, 20); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/select.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/select.php new file mode 100755 index 0000000..fbdd3da --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/select.php @@ -0,0 +1,9 @@ +SetSelect('attr1, attr2'); +$cl->Query('query'); + +?> diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/set_override.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/set_override.php new file mode 100755 index 0000000..b72203c --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/set_override.php @@ -0,0 +1,11 @@ +SetOverride('attr1', SPH_ATTR_INTEGER, array(10 => 20)); +$cl->SetOverride('attr2', SPH_ATTR_FLOAT, array(11 => 30.3)); +$cl->SetOverride('attr3', SPH_ATTR_BIGINT, array(12 => 1099511627780)); +$cl->Query('query'); + +?> diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_attr_asc.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_attr_asc.php new file mode 100755 index 0000000..7030648 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_attr_asc.php @@ -0,0 +1,9 @@ +SetSortMode(SPH_SORT_ATTR_ASC, 'sortby'); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_attr_desc.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_attr_desc.php new file mode 100755 index 0000000..c269484 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_attr_desc.php @@ -0,0 +1,9 @@ +SetSortMode(SPH_SORT_ATTR_DESC, 'sortby'); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_expr.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_expr.php new file mode 100755 index 0000000..c0244a3 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_expr.php @@ -0,0 +1,9 @@ +SetSortMode(SPH_SORT_EXPR, 'sortby'); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_extended.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_extended.php new file mode 100755 index 0000000..608fb30 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_extended.php @@ -0,0 +1,9 @@ +SetSortMode(SPH_SORT_EXTENDED, 'sortby'); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_relevance.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_relevance.php new file mode 100755 index 0000000..3cb8375 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_relevance.php @@ -0,0 +1,9 @@ +SetSortMode(SPH_SORT_RELEVANCE); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_time_segments.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_time_segments.php new file mode 100755 index 0000000..a0ddd46 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/sort_time_segments.php @@ -0,0 +1,9 @@ +SetSortMode(SPH_SORT_TIME_SEGMENTS, 'sortby'); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/sphinxapi.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/sphinxapi.php new file mode 100755 index 0000000..854eb97 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/sphinxapi.php @@ -0,0 +1,1271 @@ +=8 ) + { + $i = (int)$v; + return pack ( "NN", $i>>32, $i&((1<<32)-1) ); + } + + // x32 route, bcmath + $x = "4294967296"; + if ( function_exists("bcmul") ) + { + $h = bcdiv ( $v, $x, 0 ); + $l = bcmod ( $v, $x ); + if ( $v<0 ) + { + $h = -1+(float)$h; + $l = $l+(float)$x; + } + return pack ( "NN", (float)$h, (float)$l ); // conversion to float is intentional; int would lose 31st bit + } + + // x32 route, 15 or less decimal digits + // we can use float, because its actually double and has 52 precision bits + if ( strlen($v)<=15 ) + { + $f = (float)$v; + $h = (int)($f/$x); + $l = $f-$x*(float)$h; + if ( $v<0 ) + { + $h = -1+(float)$h; + $l = $l+(float)$x; + } + return pack ( "NN", $h, $l ); + } + + // x32 route, 16 or more decimal digits + // well, let me know if you *really* need this + die ( "INTERNAL ERROR: packing more than 15-digit numeric on 32-bit PHP is not implemented yet (contact support)" ); +} + +/// portably unpack 64 signed bits, network order to numeric +function sphUnpack64 ( $v ) +{ + list($h,$l) = array_values ( unpack ( "N*N*", $v ) ); + + // x64 route + if ( PHP_INT_SIZE>=8 ) + { + if ( $h<0 ) $h += (1<<32); // because php 5.2.2 to 5.2.5 is totally fucked up again + if ( $l<0 ) $l += (1<<32); + return ($h<<32) + $l; + } + + // x32 route + $x = "4294967296"; + $y = 0; + $p = ""; + if ( $h<0 ) + { + $h = ~$h; + $l = ~$l; + $y = 1; + $p = "-"; + } + $h = sprintf ( "%u", $h ); + $l = sprintf ( "%u", $l ); + + // bcmath + if ( function_exists("bcmul") ) + return $p . bcadd ( bcadd ( $l, bcmul ( $x, $h ) ), $y ); + + // no bcmath, 15 or less decimal digits + // we can use float, because its actually double and has 52 precision bits + if ( $h<1048576 ) + { + $f = ((float)$h)*$x + (float)$l + (float)$y; + return $p . sprintf ( "%.0f", $f ); // builtin conversion is only about 39-40 bits precise! + } + + // x32 route, 16 or more decimal digits + // well, let me know if you *really* need this + die ( "INTERNAL ERROR: unpacking more than 15-digit numeric on 32-bit PHP is not implemented yet (contact support)" ); +} + + +/// sphinx searchd client class +class SphinxClient +{ + var $_host; ///< searchd host (default is "localhost") + var $_port; ///< searchd port (default is 9312) + var $_offset; ///< how many records to seek from result-set start (default is 0) + var $_limit; ///< how many records to return from result-set starting at offset (default is 20) + var $_mode; ///< query matching mode (default is SPH_MATCH_ALL) + var $_weights; ///< per-field weights (default is 1 for all fields) + var $_sort; ///< match sorting mode (default is SPH_SORT_RELEVANCE) + var $_sortby; ///< attribute to sort by (defualt is "") + var $_min_id; ///< min ID to match (default is 0, which means no limit) + var $_max_id; ///< max ID to match (default is 0, which means no limit) + var $_filters; ///< search filters + var $_groupby; ///< group-by attribute name + var $_groupfunc; ///< group-by function (to pre-process group-by attribute value with) + var $_groupsort; ///< group-by sorting clause (to sort groups in result set with) + var $_groupdistinct;///< group-by count-distinct attribute + var $_maxmatches; ///< max matches to retrieve + var $_cutoff; ///< cutoff to stop searching at (default is 0) + var $_retrycount; ///< distributed retries count + var $_retrydelay; ///< distributed retries delay + var $_anchor; ///< geographical anchor point + var $_indexweights; ///< per-index weights + var $_ranker; ///< ranking mode (default is SPH_RANK_PROXIMITY_BM25) + var $_maxquerytime; ///< max query time, milliseconds (default is 0, do not limit) + var $_fieldweights; ///< per-field-name weights + var $_overrides; ///< per-query attribute values overrides + var $_select; ///< select-list (attributes or expressions, with optional aliases) + + var $_error; ///< last error message + var $_warning; ///< last warning message + + var $_reqs; ///< requests array for multi-query + var $_mbenc; ///< stored mbstring encoding + var $_arrayresult; ///< whether $result["matches"] should be a hash or an array + + ///////////////////////////////////////////////////////////////////////////// + // common stuff + ///////////////////////////////////////////////////////////////////////////// + + /// create a new client object and fill defaults + function SphinxClient () + { + // per-client-object settings + $this->_host = "localhost"; + $this->_port = 9312; + + // per-query settings + $this->_offset = 0; + $this->_limit = 20; + $this->_mode = SPH_MATCH_ALL; + $this->_weights = array (); + $this->_sort = SPH_SORT_RELEVANCE; + $this->_sortby = ""; + $this->_min_id = 0; + $this->_max_id = 0; + $this->_filters = array (); + $this->_groupby = ""; + $this->_groupfunc = SPH_GROUPBY_DAY; + $this->_groupsort = "@group desc"; + $this->_groupdistinct= ""; + $this->_maxmatches = 1000; + $this->_cutoff = 0; + $this->_retrycount = 0; + $this->_retrydelay = 0; + $this->_anchor = array (); + $this->_indexweights= array (); + $this->_ranker = SPH_RANK_PROXIMITY_BM25; + $this->_maxquerytime= 0; + $this->_fieldweights= array(); + $this->_overrides = array(); + $this->_select = "*"; + + $this->_error = ""; // per-reply fields (for single-query case) + $this->_warning = ""; + $this->_reqs = array (); // requests storage (for multi-query case) + $this->_mbenc = ""; + $this->_arrayresult = false; + } + + /// get last error message (string) + function GetLastError () + { + return $this->_error; + } + + /// get last warning message (string) + function GetLastWarning () + { + return $this->_warning; + } + + /// set searchd host name (string) and port (integer) + function SetServer ( $host, $port ) + { + assert ( is_string($host) ); + assert ( is_int($port) ); + $this->_host = $host; + $this->_port = $port; + } + + ///////////////////////////////////////////////////////////////////////////// + + /// enter mbstring workaround mode + function _MBPush () + { + $this->_mbenc = ""; + if ( ini_get ( "mbstring.func_overload" ) & 2 ) + { + $this->_mbenc = mb_internal_encoding(); + mb_internal_encoding ( "latin1" ); + } + } + + /// leave mbstring workaround mode + function _MBPop () + { + if ( $this->_mbenc ) + mb_internal_encoding ( $this->_mbenc ); + } + + /// connect to searchd server + function _Connect () + { + return fopen('php://stdout', 'w'); + } + + function _OldConnect() + { + if (!( $fp = @fsockopen ( $this->_host, $this->_port ) ) ) + { + $this->_error = "connection to {$this->_host}:{$this->_port} failed"; + return false; + } + + // check version + list(,$v) = unpack ( "N*", fread ( $fp, 4 ) ); + $v = (int)$v; + if ( $v<1 ) + { + fclose ( $fp ); + $this->_error = "expected searchd protocol version 1+, got version '$v'"; + return false; + } + + // all ok, send my version + fwrite ( $fp, pack ( "N", 1 ) ); + return $fp; + } + + /// get and check response packet from searchd server + function _GetResponse ( $fp, $client_ver ) + { + return false; + } + + function _OldGetResponse ( $fp, $client_ver ) + { + $response = ""; + $len = 0; + + $header = fread ( $fp, 8 ); + if ( strlen($header)==8 ) + { + list ( $status, $ver, $len ) = array_values ( unpack ( "n2a/Nb", $header ) ); + $left = $len; + while ( $left>0 && !feof($fp) ) + { + $chunk = fread ( $fp, $left ); + if ( $chunk ) + { + $response .= $chunk; + $left -= strlen($chunk); + } + } + } + fclose ( $fp ); + + // check response + $read = strlen ( $response ); + if ( !$response || $read!=$len ) + { + $this->_error = $len + ? "failed to read searchd response (status=$status, ver=$ver, len=$len, read=$read)" + : "received zero-sized searchd response"; + return false; + } + + // check status + if ( $status==SEARCHD_WARNING ) + { + list(,$wlen) = unpack ( "N*", substr ( $response, 0, 4 ) ); + $this->_warning = substr ( $response, 4, $wlen ); + return substr ( $response, 4+$wlen ); + } + if ( $status==SEARCHD_ERROR ) + { + $this->_error = "searchd error: " . substr ( $response, 4 ); + return false; + } + if ( $status==SEARCHD_RETRY ) + { + $this->_error = "temporary searchd error: " . substr ( $response, 4 ); + return false; + } + if ( $status!=SEARCHD_OK ) + { + $this->_error = "unknown status code '$status'"; + return false; + } + + // check version + if ( $ver<$client_ver ) + { + $this->_warning = sprintf ( "searchd command v.%d.%d older than client's v.%d.%d, some options might not work", + $ver>>8, $ver&0xff, $client_ver>>8, $client_ver&0xff ); + } + + return $response; + } + + ///////////////////////////////////////////////////////////////////////////// + // searching + ///////////////////////////////////////////////////////////////////////////// + + /// set offset and count into result set, + /// and optionally set max-matches and cutoff limits + function SetLimits ( $offset, $limit, $max=0, $cutoff=0 ) + { + assert ( is_int($offset) ); + assert ( is_int($limit) ); + assert ( $offset>=0 ); + assert ( $limit>0 ); + assert ( $max>=0 ); + $this->_offset = $offset; + $this->_limit = $limit; + if ( $max>0 ) + $this->_maxmatches = $max; + if ( $cutoff>0 ) + $this->_cutoff = $cutoff; + } + + /// set maximum query time, in milliseconds, per-index + /// integer, 0 means "do not limit" + function SetMaxQueryTime ( $max ) + { + assert ( is_int($max) ); + assert ( $max>=0 ); + $this->_maxquerytime = $max; + } + + /// set matching mode + function SetMatchMode ( $mode ) + { + assert ( $mode==SPH_MATCH_ALL + || $mode==SPH_MATCH_ANY + || $mode==SPH_MATCH_PHRASE + || $mode==SPH_MATCH_BOOLEAN + || $mode==SPH_MATCH_EXTENDED + || $mode==SPH_MATCH_FULLSCAN + || $mode==SPH_MATCH_EXTENDED2 ); + $this->_mode = $mode; + } + + /// set ranking mode + function SetRankingMode ( $ranker ) + { + assert ( $ranker==SPH_RANK_PROXIMITY_BM25 + || $ranker==SPH_RANK_BM25 + || $ranker==SPH_RANK_NONE + || $ranker==SPH_RANK_WORDCOUNT + || $ranker==SPH_RANK_PROXIMITY ); + $this->_ranker = $ranker; + } + + /// set matches sorting mode + function SetSortMode ( $mode, $sortby="" ) + { + assert ( + $mode==SPH_SORT_RELEVANCE || + $mode==SPH_SORT_ATTR_DESC || + $mode==SPH_SORT_ATTR_ASC || + $mode==SPH_SORT_TIME_SEGMENTS || + $mode==SPH_SORT_EXTENDED || + $mode==SPH_SORT_EXPR ); + assert ( is_string($sortby) ); + assert ( $mode==SPH_SORT_RELEVANCE || strlen($sortby)>0 ); + + $this->_sort = $mode; + $this->_sortby = $sortby; + } + + /// bind per-field weights by order + /// DEPRECATED; use SetFieldWeights() instead + function SetWeights ( $weights ) + { + assert ( is_array($weights) ); + foreach ( $weights as $weight ) + assert ( is_int($weight) ); + + $this->_weights = $weights; + } + + /// bind per-field weights by name + function SetFieldWeights ( $weights ) + { + assert ( is_array($weights) ); + foreach ( $weights as $name=>$weight ) + { + assert ( is_string($name) ); + assert ( is_int($weight) ); + } + $this->_fieldweights = $weights; + } + + /// bind per-index weights by name + function SetIndexWeights ( $weights ) + { + assert ( is_array($weights) ); + foreach ( $weights as $index=>$weight ) + { + assert ( is_string($index) ); + assert ( is_int($weight) ); + } + $this->_indexweights = $weights; + } + + /// set IDs range to match + /// only match records if document ID is beetwen $min and $max (inclusive) + function SetIDRange ( $min, $max ) + { + assert ( is_numeric($min) ); + assert ( is_numeric($max) ); + assert ( $min<=$max ); + $this->_min_id = $min; + $this->_max_id = $max; + } + + /// set values set filter + /// only match records where $attribute value is in given set + function SetFilter ( $attribute, $values, $exclude=false ) + { + assert ( is_string($attribute) ); + assert ( is_array($values) ); + assert ( count($values) ); + + if ( is_array($values) && count($values) ) + { + foreach ( $values as $value ) + assert ( is_numeric($value) ); + + $this->_filters[] = array ( "type"=>SPH_FILTER_VALUES, "attr"=>$attribute, "exclude"=>$exclude, "values"=>$values ); + } + } + + /// set range filter + /// only match records if $attribute value is beetwen $min and $max (inclusive) + function SetFilterRange ( $attribute, $min, $max, $exclude=false ) + { + assert ( is_string($attribute) ); + assert ( is_numeric($min) ); + assert ( is_numeric($max) ); + assert ( $min<=$max ); + + $this->_filters[] = array ( "type"=>SPH_FILTER_RANGE, "attr"=>$attribute, "exclude"=>$exclude, "min"=>$min, "max"=>$max ); + } + + /// set float range filter + /// only match records if $attribute value is beetwen $min and $max (inclusive) + function SetFilterFloatRange ( $attribute, $min, $max, $exclude=false ) + { + assert ( is_string($attribute) ); + assert ( is_float($min) ); + assert ( is_float($max) ); + assert ( $min<=$max ); + + $this->_filters[] = array ( "type"=>SPH_FILTER_FLOATRANGE, "attr"=>$attribute, "exclude"=>$exclude, "min"=>$min, "max"=>$max ); + } + + /// setup anchor point for geosphere distance calculations + /// required to use @geodist in filters and sorting + /// latitude and longitude must be in radians + function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long ) + { + assert ( is_string($attrlat) ); + assert ( is_string($attrlong) ); + assert ( is_float($lat) ); + assert ( is_float($long) ); + + $this->_anchor = array ( "attrlat"=>$attrlat, "attrlong"=>$attrlong, "lat"=>$lat, "long"=>$long ); + } + + /// set grouping attribute and function + function SetGroupBy ( $attribute, $func, $groupsort="@group desc" ) + { + assert ( is_string($attribute) ); + assert ( is_string($groupsort) ); + assert ( $func==SPH_GROUPBY_DAY + || $func==SPH_GROUPBY_WEEK + || $func==SPH_GROUPBY_MONTH + || $func==SPH_GROUPBY_YEAR + || $func==SPH_GROUPBY_ATTR + || $func==SPH_GROUPBY_ATTRPAIR ); + + $this->_groupby = $attribute; + $this->_groupfunc = $func; + $this->_groupsort = $groupsort; + } + + /// set count-distinct attribute for group-by queries + function SetGroupDistinct ( $attribute ) + { + assert ( is_string($attribute) ); + $this->_groupdistinct = $attribute; + } + + /// set distributed retries count and delay + function SetRetries ( $count, $delay=0 ) + { + assert ( is_int($count) && $count>=0 ); + assert ( is_int($delay) && $delay>=0 ); + $this->_retrycount = $count; + $this->_retrydelay = $delay; + } + + /// set result set format (hash or array; hash by default) + /// PHP specific; needed for group-by-MVA result sets that may contain duplicate IDs + function SetArrayResult ( $arrayresult ) + { + assert ( is_bool($arrayresult) ); + $this->_arrayresult = $arrayresult; + } + + /// set attribute values override + /// there can be only one override per attribute + /// $values must be a hash that maps document IDs to attribute values + function SetOverride ( $attrname, $attrtype, $values ) + { + assert ( is_string ( $attrname ) ); + assert ( in_array ( $attrtype, array ( SPH_ATTR_INTEGER, SPH_ATTR_TIMESTAMP, SPH_ATTR_BOOL, SPH_ATTR_FLOAT, SPH_ATTR_BIGINT ) ) ); + assert ( is_array ( $values ) ); + + $this->_overrides[$attrname] = array ( "attr"=>$attrname, "type"=>$attrtype, "values"=>$values ); + } + + /// set select-list (attributes or expressions), SQL-like syntax + function SetSelect ( $select ) + { + assert ( is_string ( $select ) ); + $this->_select = $select; + } + + ////////////////////////////////////////////////////////////////////////////// + + /// clear all filters (for multi-queries) + function ResetFilters () + { + $this->_filters = array(); + $this->_anchor = array(); + } + + /// clear groupby settings (for multi-queries) + function ResetGroupBy () + { + $this->_groupby = ""; + $this->_groupfunc = SPH_GROUPBY_DAY; + $this->_groupsort = "@group desc"; + $this->_groupdistinct= ""; + } + + /// clear all attribute value overrides (for multi-queries) + function ResetOverrides () + { + $this->_overrides = array (); + } + + ////////////////////////////////////////////////////////////////////////////// + + /// connect to searchd server, run given search query through given indexes, + /// and return the search results + function Query ( $query, $index="*", $comment="" ) + { + assert ( empty($this->_reqs) ); + + $this->AddQuery ( $query, $index, $comment ); + $results = $this->RunQueries (); + + if ( !is_array($results) ) + return false; // probably network error; error message should be already filled + + $this->_error = $results[0]["error"]; + $this->_warning = $results[0]["warning"]; + if ( $results[0]["status"]==SEARCHD_ERROR ) + return false; + else + return $results[0]; + } + + /// helper to pack floats in network byte order + function _PackFloat ( $f ) + { + $t1 = pack ( "f", $f ); // machine order + list(,$t2) = unpack ( "L*", $t1 ); // int in machine order + return pack ( "N", $t2 ); + } + + /// add query to multi-query batch + /// returns index into results array from RunQueries() call + function AddQuery ( $query, $index="*", $comment="" ) + { + // mbstring workaround + $this->_MBPush (); + + // build request + $req = pack ( "NNNNN", $this->_offset, $this->_limit, $this->_mode, $this->_ranker, $this->_sort ); // mode and limits + $req .= pack ( "N", strlen($this->_sortby) ) . $this->_sortby; + $req .= pack ( "N", strlen($query) ) . $query; // query itself + $req .= pack ( "N", count($this->_weights) ); // weights + foreach ( $this->_weights as $weight ) + $req .= pack ( "N", (int)$weight ); + $req .= pack ( "N", strlen($index) ) . $index; // indexes + $req .= pack ( "N", 1 ); // id64 range marker + $req .= sphPack64 ( $this->_min_id ) . sphPack64 ( $this->_max_id ); // id64 range + + // filters + $req .= pack ( "N", count($this->_filters) ); + foreach ( $this->_filters as $filter ) + { + $req .= pack ( "N", strlen($filter["attr"]) ) . $filter["attr"]; + $req .= pack ( "N", $filter["type"] ); + switch ( $filter["type"] ) + { + case SPH_FILTER_VALUES: + $req .= pack ( "N", count($filter["values"]) ); + foreach ( $filter["values"] as $value ) + $req .= sphPack64 ( $value ); + break; + + case SPH_FILTER_RANGE: + $req .= sphPack64 ( $filter["min"] ) . sphPack64 ( $filter["max"] ); + break; + + case SPH_FILTER_FLOATRANGE: + $req .= $this->_PackFloat ( $filter["min"] ) . $this->_PackFloat ( $filter["max"] ); + break; + + default: + assert ( 0 && "internal error: unhandled filter type" ); + } + $req .= pack ( "N", $filter["exclude"] ); + } + + // group-by clause, max-matches count, group-sort clause, cutoff count + $req .= pack ( "NN", $this->_groupfunc, strlen($this->_groupby) ) . $this->_groupby; + $req .= pack ( "N", $this->_maxmatches ); + $req .= pack ( "N", strlen($this->_groupsort) ) . $this->_groupsort; + $req .= pack ( "NNN", $this->_cutoff, $this->_retrycount, $this->_retrydelay ); + $req .= pack ( "N", strlen($this->_groupdistinct) ) . $this->_groupdistinct; + + // anchor point + if ( empty($this->_anchor) ) + { + $req .= pack ( "N", 0 ); + } else + { + $a =& $this->_anchor; + $req .= pack ( "N", 1 ); + $req .= pack ( "N", strlen($a["attrlat"]) ) . $a["attrlat"]; + $req .= pack ( "N", strlen($a["attrlong"]) ) . $a["attrlong"]; + $req .= $this->_PackFloat ( $a["lat"] ) . $this->_PackFloat ( $a["long"] ); + } + + // per-index weights + $req .= pack ( "N", count($this->_indexweights) ); + foreach ( $this->_indexweights as $idx=>$weight ) + $req .= pack ( "N", strlen($idx) ) . $idx . pack ( "N", $weight ); + + // max query time + $req .= pack ( "N", $this->_maxquerytime ); + + // per-field weights + $req .= pack ( "N", count($this->_fieldweights) ); + foreach ( $this->_fieldweights as $field=>$weight ) + $req .= pack ( "N", strlen($field) ) . $field . pack ( "N", $weight ); + + // comment + $req .= pack ( "N", strlen($comment) ) . $comment; + + // attribute overrides + $req .= pack ( "N", count($this->_overrides) ); + foreach ( $this->_overrides as $key => $entry ) + { + $req .= pack ( "N", strlen($entry["attr"]) ) . $entry["attr"]; + $req .= pack ( "NN", $entry["type"], count($entry["values"]) ); + foreach ( $entry["values"] as $id=>$val ) + { + assert ( is_numeric($id) ); + assert ( is_numeric($val) ); + + $req .= sphPack64 ( $id ); + switch ( $entry["type"] ) + { + case SPH_ATTR_FLOAT: $req .= $this->_PackFloat ( $val ); break; + case SPH_ATTR_BIGINT: $req .= sphPack64 ( $val ); break; + default: $req .= pack ( "N", $val ); break; + } + } + } + + // select-list + $req .= pack ( "N", strlen($this->_select) ) . $this->_select; + + // mbstring workaround + $this->_MBPop (); + + // store request to requests array + $this->_reqs[] = $req; + return count($this->_reqs)-1; + } + + /// connect to searchd, run queries batch, and return an array of result sets + function RunQueries () + { + if ( empty($this->_reqs) ) + { + $this->_error = "no queries defined, issue AddQuery() first"; + return false; + } + + // mbstring workaround + $this->_MBPush (); + + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop (); + return false; + } + + //////////////////////////// + // send query, get response + //////////////////////////// + + $nreqs = count($this->_reqs); + $req = join ( "", $this->_reqs ); + $len = 4+strlen($req); + $req = pack ( "nnNN", SEARCHD_COMMAND_SEARCH, VER_COMMAND_SEARCH, $len, $nreqs ) . $req; // add header + + fwrite ( $fp, $req, $len+8 ); + if (!( $response = $this->_GetResponse ( $fp, VER_COMMAND_SEARCH ) )) + { + $this->_MBPop (); + return false; + } + + $this->_reqs = array (); + + ////////////////// + // parse response + ////////////////// + + $p = 0; // current position + $max = strlen($response); // max position for checks, to protect against broken responses + + $results = array (); + for ( $ires=0; $ires<$nreqs && $p<$max; $ires++ ) + { + $results[] = array(); + $result =& $results[$ires]; + + $result["error"] = ""; + $result["warning"] = ""; + + // extract status + list(,$status) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $result["status"] = $status; + if ( $status!=SEARCHD_OK ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $message = substr ( $response, $p, $len ); $p += $len; + + if ( $status==SEARCHD_WARNING ) + { + $result["warning"] = $message; + } else + { + $result["error"] = $message; + continue; + } + } + + // read schema + $fields = array (); + $attrs = array (); + + list(,$nfields) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + while ( $nfields-->0 && $p<$max ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $fields[] = substr ( $response, $p, $len ); $p += $len; + } + $result["fields"] = $fields; + + list(,$nattrs) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + while ( $nattrs-->0 && $p<$max ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $attr = substr ( $response, $p, $len ); $p += $len; + list(,$type) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $attrs[$attr] = $type; + } + $result["attrs"] = $attrs; + + // read match count + list(,$count) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + list(,$id64) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + + // read matches + $idx = -1; + while ( $count-->0 && $p<$max ) + { + // index into result array + $idx++; + + // parse document id and weight + if ( $id64 ) + { + $doc = sphUnpack64 ( substr ( $response, $p, 8 ) ); $p += 8; + list(,$weight) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + } else + { + list ( $doc, $weight ) = array_values ( unpack ( "N*N*", + substr ( $response, $p, 8 ) ) ); + $p += 8; + + if ( PHP_INT_SIZE>=8 ) + { + // x64 route, workaround broken unpack() in 5.2.2+ + if ( $doc<0 ) $doc += (1<<32); + } else + { + // x32 route, workaround php signed/unsigned braindamage + $doc = sprintf ( "%u", $doc ); + } + } + $weight = sprintf ( "%u", $weight ); + + // create match entry + if ( $this->_arrayresult ) + $result["matches"][$idx] = array ( "id"=>$doc, "weight"=>$weight ); + else + $result["matches"][$doc]["weight"] = $weight; + + // parse and create attributes + $attrvals = array (); + foreach ( $attrs as $attr=>$type ) + { + // handle 64bit ints + if ( $type==SPH_ATTR_BIGINT ) + { + $attrvals[$attr] = sphUnpack64 ( substr ( $response, $p, 8 ) ); $p += 8; + continue; + } + + // handle floats + if ( $type==SPH_ATTR_FLOAT ) + { + list(,$uval) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + list(,$fval) = unpack ( "f*", pack ( "L", $uval ) ); + $attrvals[$attr] = $fval; + continue; + } + + // handle everything else as unsigned ints + list(,$val) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + if ( $type & SPH_ATTR_MULTI ) + { + $attrvals[$attr] = array (); + $nvalues = $val; + while ( $nvalues-->0 && $p<$max ) + { + list(,$val) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $attrvals[$attr][] = sprintf ( "%u", $val ); + } + } else + { + $attrvals[$attr] = sprintf ( "%u", $val ); + } + } + + if ( $this->_arrayresult ) + $result["matches"][$idx]["attrs"] = $attrvals; + else + $result["matches"][$doc]["attrs"] = $attrvals; + } + + list ( $total, $total_found, $msecs, $words ) = + array_values ( unpack ( "N*N*N*N*", substr ( $response, $p, 16 ) ) ); + $result["total"] = sprintf ( "%u", $total ); + $result["total_found"] = sprintf ( "%u", $total_found ); + $result["time"] = sprintf ( "%.3f", $msecs/1000 ); + $p += 16; + + while ( $words-->0 && $p<$max ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $word = substr ( $response, $p, $len ); $p += $len; + list ( $docs, $hits ) = array_values ( unpack ( "N*N*", substr ( $response, $p, 8 ) ) ); $p += 8; + $result["words"][$word] = array ( + "docs"=>sprintf ( "%u", $docs ), + "hits"=>sprintf ( "%u", $hits ) ); + } + } + + $this->_MBPop (); + return $results; + } + + ///////////////////////////////////////////////////////////////////////////// + // excerpts generation + ///////////////////////////////////////////////////////////////////////////// + + /// connect to searchd server, and generate exceprts (snippets) + /// of given documents for given query. returns false on failure, + /// an array of snippets on success + function BuildExcerpts ( $docs, $index, $words, $opts=array() ) + { + assert ( is_array($docs) ); + assert ( is_string($index) ); + assert ( is_string($words) ); + assert ( is_array($opts) ); + + $this->_MBPush (); + + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop(); + return false; + } + + ///////////////// + // fixup options + ///////////////// + + if ( !isset($opts["before_match"]) ) $opts["before_match"] = ""; + if ( !isset($opts["after_match"]) ) $opts["after_match"] = ""; + if ( !isset($opts["chunk_separator"]) ) $opts["chunk_separator"] = " ... "; + if ( !isset($opts["limit"]) ) $opts["limit"] = 256; + if ( !isset($opts["around"]) ) $opts["around"] = 5; + if ( !isset($opts["exact_phrase"]) ) $opts["exact_phrase"] = false; + if ( !isset($opts["single_passage"]) ) $opts["single_passage"] = false; + if ( !isset($opts["use_boundaries"]) ) $opts["use_boundaries"] = false; + if ( !isset($opts["weight_order"]) ) $opts["weight_order"] = false; + + ///////////////// + // build request + ///////////////// + + // v.1.0 req + $flags = 1; // remove spaces + if ( $opts["exact_phrase"] ) $flags |= 2; + if ( $opts["single_passage"] ) $flags |= 4; + if ( $opts["use_boundaries"] ) $flags |= 8; + if ( $opts["weight_order"] ) $flags |= 16; + $req = pack ( "NN", 0, $flags ); // mode=0, flags=$flags + $req .= pack ( "N", strlen($index) ) . $index; // req index + $req .= pack ( "N", strlen($words) ) . $words; // req words + + // options + $req .= pack ( "N", strlen($opts["before_match"]) ) . $opts["before_match"]; + $req .= pack ( "N", strlen($opts["after_match"]) ) . $opts["after_match"]; + $req .= pack ( "N", strlen($opts["chunk_separator"]) ) . $opts["chunk_separator"]; + $req .= pack ( "N", (int)$opts["limit"] ); + $req .= pack ( "N", (int)$opts["around"] ); + + // documents + $req .= pack ( "N", count($docs) ); + foreach ( $docs as $doc ) + { + assert ( is_string($doc) ); + $req .= pack ( "N", strlen($doc) ) . $doc; + } + + //////////////////////////// + // send query, get response + //////////////////////////// + + $len = strlen($req); + $req = pack ( "nnN", SEARCHD_COMMAND_EXCERPT, VER_COMMAND_EXCERPT, $len ) . $req; // add header + $wrote = fwrite ( $fp, $req, $len+8 ); + if (!( $response = $this->_GetResponse ( $fp, VER_COMMAND_EXCERPT ) )) + { + $this->_MBPop (); + return false; + } + + ////////////////// + // parse response + ////////////////// + + $pos = 0; + $res = array (); + $rlen = strlen($response); + for ( $i=0; $i $rlen ) + { + $this->_error = "incomplete reply"; + $this->_MBPop (); + return false; + } + $res[] = $len ? substr ( $response, $pos, $len ) : ""; + $pos += $len; + } + + $this->_MBPop (); + return $res; + } + + + ///////////////////////////////////////////////////////////////////////////// + // keyword generation + ///////////////////////////////////////////////////////////////////////////// + + /// connect to searchd server, and generate keyword list for a given query + /// returns false on failure, + /// an array of words on success + function BuildKeywords ( $query, $index, $hits ) + { + assert ( is_string($query) ); + assert ( is_string($index) ); + assert ( is_bool($hits) ); + + $this->_MBPush (); + + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop(); + return false; + } + + ///////////////// + // build request + ///////////////// + + // v.1.0 req + $req = pack ( "N", strlen($query) ) . $query; // req query + $req .= pack ( "N", strlen($index) ) . $index; // req index + $req .= pack ( "N", (int)$hits ); + + //////////////////////////// + // send query, get response + //////////////////////////// + + $len = strlen($req); + $req = pack ( "nnN", SEARCHD_COMMAND_KEYWORDS, VER_COMMAND_KEYWORDS, $len ) . $req; // add header + $wrote = fwrite ( $fp, $req, $len+8 ); + if (!( $response = $this->_GetResponse ( $fp, VER_COMMAND_KEYWORDS ) )) + { + $this->_MBPop (); + return false; + } + + ////////////////// + // parse response + ////////////////// + + $pos = 0; + $res = array (); + $rlen = strlen($response); + list(,$nwords) = unpack ( "N*", substr ( $response, $pos, 4 ) ); + $pos += 4; + for ( $i=0; $i<$nwords; $i++ ) + { + list(,$len) = unpack ( "N*", substr ( $response, $pos, 4 ) ); $pos += 4; + $tokenized = $len ? substr ( $response, $pos, $len ) : ""; + $pos += $len; + + list(,$len) = unpack ( "N*", substr ( $response, $pos, 4 ) ); $pos += 4; + $normalized = $len ? substr ( $response, $pos, $len ) : ""; + $pos += $len; + + $res[] = array ( "tokenized"=>$tokenized, "normalized"=>$normalized ); + + if ( $hits ) + { + list($ndocs,$nhits) = array_values ( unpack ( "N*N*", substr ( $response, $pos, 8 ) ) ); + $pos += 8; + $res [$i]["docs"] = $ndocs; + $res [$i]["hits"] = $nhits; + } + + if ( $pos > $rlen ) + { + $this->_error = "incomplete reply"; + $this->_MBPop (); + return false; + } + } + + $this->_MBPop (); + return $res; + } + + function EscapeString ( $string ) + { + $from = array ( '(',')','|','-','!','@','~','"','&', '/' ); + $to = array ( '\(','\)','\|','\-','\!','\@','\~','\"', '\&', '\/' ); + + return str_replace ( $from, $to, $string ); + } + + ///////////////////////////////////////////////////////////////////////////// + // attribute updates + ///////////////////////////////////////////////////////////////////////////// + + /// batch update given attributes in given rows in given indexes + /// returns amount of updated documents (0 or more) on success, or -1 on failure + function UpdateAttributes ( $index, $attrs, $values, $mva=false ) + { + // verify everything + assert ( is_string($index) ); + assert ( is_bool($mva) ); + + assert ( is_array($attrs) ); + foreach ( $attrs as $attr ) + assert ( is_string($attr) ); + + assert ( is_array($values) ); + foreach ( $values as $id=>$entry ) + { + assert ( is_numeric($id) ); + assert ( is_array($entry) ); + assert ( count($entry)==count($attrs) ); + foreach ( $entry as $v ) + { + if ( $mva ) + { + assert ( is_array($v) ); + foreach ( $v as $vv ) + assert ( is_int($vv) ); + } else + assert ( is_int($v) ); + } + } + + // build request + $req = pack ( "N", strlen($index) ) . $index; + + $req .= pack ( "N", count($attrs) ); + foreach ( $attrs as $attr ) + { + $req .= pack ( "N", strlen($attr) ) . $attr; + $req .= pack ( "N", $mva ? 1 : 0 ); + } + + $req .= pack ( "N", count($values) ); + foreach ( $values as $id=>$entry ) + { + $req .= sphPack64 ( $id ); + foreach ( $entry as $v ) + { + $req .= pack ( "N", $mva ? count($v) : $v ); + if ( $mva ) + foreach ( $v as $vv ) + $req .= pack ( "N", $vv ); + } + } + + // connect, send query, get response + if (!( $fp = $this->_Connect() )) + return -1; + + $len = strlen($req); + $req = pack ( "nnN", SEARCHD_COMMAND_UPDATE, VER_COMMAND_UPDATE, $len ) . $req; // add header + fwrite ( $fp, $req, $len+8 ); + + if (!( $response = $this->_GetResponse ( $fp, VER_COMMAND_UPDATE ) )) + return -1; + + // parse response + list(,$updated) = unpack ( "N*", substr ( $response, 0, 4 ) ); + return $updated; + } +} + +// +// $Id$ +// + +?> diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/update_attributes.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/update_attributes.php new file mode 100755 index 0000000..373522f --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/update_attributes.php @@ -0,0 +1,8 @@ +UpdateAttributes('index', array('group'), array(123 => array(456))); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/update_attributes_mva.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/update_attributes_mva.php new file mode 100755 index 0000000..19d8ba4 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/update_attributes_mva.php @@ -0,0 +1,8 @@ +UpdateAttributes('index', array('group', 'category'), array(123 => array(array(456, 789), array(1, 2, 3))), true); + +?> diff --git a/coreseek/csft-4.1/api/ruby/spec/fixtures/weights.php b/coreseek/csft-4.1/api/ruby/spec/fixtures/weights.php new file mode 100755 index 0000000..ddeb198 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/fixtures/weights.php @@ -0,0 +1,9 @@ +SetWeights(array(10, 20, 30, 40)); +$cl->Query('query'); + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/ruby/spec/sphinx/sphinx-id64.conf b/coreseek/csft-4.1/api/ruby/spec/sphinx/sphinx-id64.conf new file mode 100755 index 0000000..027defe --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/sphinx/sphinx-id64.conf @@ -0,0 +1,67 @@ +source src1 +{ + type = mysql + sql_host = localhost + sql_user = root + sql_pass = + sql_db = sphinx_test + sql_port = 3306 + + sql_query = SELECT id, name, description, UNIX_TIMESTAMP(created_at) AS created_at, group_id, rating FROM links + sql_attr_uint = group_id + sql_attr_timestamp = created_at + sql_attr_float = rating + sql_attr_multi = uint tags from query; SELECT link_id, tag_id FROM links_tags + sql_query_info = SELECT * FROM links WHERE id=$id +} + +source src2 +{ + type = mysql + sql_host = localhost + sql_user = root + sql_pass = + sql_db = sphinx_test + sql_port = 3306 + + sql_query = SELECT id, name, description, UNIX_TIMESTAMP(created_at) AS created_at, group_id FROM links64 + sql_attr_uint = group_id + sql_attr_timestamp = created_at + sql_query_info = SELECT * FROM links WHERE id=$id +} + +index test1 +{ + source = src1 + path = /opt/sphinx-0.9.9-id64/var/data/test1 + docinfo = extern + morphology = none + stopwords = + charset_type = utf-8 +} + +index test2 +{ + source = src2 + path = /opt/sphinx-0.9.9-id64/var/data/test2 + docinfo = extern + morphology = none + stopwords = + charset_type = utf-8 +} + +indexer +{ + mem_limit = 32M +} + +searchd +{ + port = 9312 + log = /opt/sphinx-0.9.9-id64/var/log/searchd.log + query_log = /opt/sphinx-0.9.9-id64/var/log/query.log + read_timeout = 5 + max_children = 30 + pid_file = /opt/sphinx-0.9.9-id64/var/log/searchd.pid + max_matches = 1000 +} diff --git a/coreseek/csft-4.1/api/ruby/spec/sphinx/sphinx_test.sql b/coreseek/csft-4.1/api/ruby/spec/sphinx/sphinx_test.sql new file mode 100755 index 0000000..9356f18 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/spec/sphinx/sphinx_test.sql @@ -0,0 +1,86 @@ +/* +SQLyog Enterprise - MySQL GUI v5.20 +Host - 5.0.27-community-nt : Database - sphinx_test +********************************************************************* +Server version : 5.0.27-community-nt +*/ + +SET NAMES utf8; + +SET SQL_MODE=''; + +CREATE database IF NOT EXISTS `sphinx_test`; + +USE `sphinx_test`; + +/* Table structure for table `links` */ + +DROP TABLE IF EXISTS `links`; + +CREATE TABLE `links` ( + `id` INT(11) NOT NULL auto_increment, + `name` VARCHAR(255) NOT NULL, + `created_at` DATETIME NOT NULL, + `description` TEXT, + `group_id` INT(11) NOT NULL, + `rating` FLOAT NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +/* Table structure for table `tags` */ + +DROP TABLE IF EXISTS `tags`; + +CREATE TABLE `tags` ( + `id` INT(11) NOT NULL auto_increment, + `tag` VARCHAR(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +/* Table structure for table `links_tags` */ + +DROP TABLE IF EXISTS `links_tags`; + +CREATE TABLE `links_tags` ( + `link_id` INT(11) NOT NULL, + `tag_id` INT(11) NOT NULL, + PRIMARY KEY (`link_id`,`tag_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +/* Table structure for table `links64` */ + +DROP TABLE IF EXISTS `links64`; + +CREATE TABLE `links64` ( + `id` BIGINT(11) NOT NULL auto_increment, + `name` VARCHAR(255) NOT NULL, + `created_at` DATETIME NOT NULL, + `description` TEXT, + `group_id` INT(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +/* Data for the table `links` */ + +INSERT INTO `links`(`id`,`name`,`created_at`,`description`,`group_id`,`rating`) VALUES + (1,'Paint Protects WiFi Network from Hackers','2007-04-04 06:48:10','A company known as SEC Technologies has created a special type of paint that blocks Wi-Fi signals so that you can be sure hackers can ',1,13.32), + (2,'Airplanes To Become WiFi Hotspots','2007-04-04 06:49:15','Airlines will start turning their airplanes into WiFi hotspots beginning early next year, WSJ reports. Here\'s what you need to know...',2,54.85), + (3,'Planet VIP-195 GSM/WiFi Phone With Windows Messanger','2007-04-04 06:50:47','The phone does comply with IEEE 802.11b and IEEE 802.11g to provide phone capability via WiFi. As GSM phone the VIP-195 support 900/1800/1900 band and GPRS too. It comes with simple button to switch between WiFi or GSM mod',1,16.25); + +/* Data for the table `tags` */ +INSERT INTO `tags`(`id`,`tag`) VALUES + (1, 'tag1'),(2, 'tag2'),(3, 'tag3'),(4, 'tag4'),(5, 'tag5'), + (6, 'tag6'),(7, 'tag7'),(8, 'tag8'),(9, 'tag9'),(10, 'tag5'); + +/* Data for the table `links_tags` */ +INSERT INTO `links_tags`(`link_id`,`tag_id`) VALUES + (1, 1),(1, 2),(1, 3),(1, 4), + (2, 5),(2, 6),(2, 7),(2, 8), + (3, 9),(3, 1),(3, 7),(3, 10); + +/* Data for the table `links64` */ + +INSERT INTO `links64`(`id`,`name`,`created_at`,`description`,`group_id`) VALUES + (4294967297,'Paint Protects WiFi Network from Hackers','2007-04-04 06:48:10','A company known as SEC Technologies has created a special type of paint that blocks Wi-Fi signals so that you can be sure hackers can ',1), + (4294967298,'Airplanes To Become WiFi Hotspots','2007-04-04 06:49:15','Airlines will start turning their airplanes into WiFi hotspots beginning early next year, WSJ reports. Here\'s what you need to know...',2), + (4294967299,'Planet VIP-195 GSM/WiFi Phone With Windows Messanger','2007-04-04 06:50:47','The phone does comply with IEEE 802.11b and IEEE 802.11g to provide phone capability via WiFi. As GSM phone the VIP-195 support 900/1800/1900 band and GPRS too. It comes with simple button to switch between WiFi or GSM mod',1); diff --git a/coreseek/csft-4.1/api/ruby/sphinx.yml.tpl b/coreseek/csft-4.1/api/ruby/sphinx.yml.tpl new file mode 100755 index 0000000..43debec --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/sphinx.yml.tpl @@ -0,0 +1,3 @@ +config_file: /opt/sphinx/etc/sphinx.conf +root_dir: /opt/sphinx/bin +indexes: test1 test2 diff --git a/coreseek/csft-4.1/api/ruby/tasks/sphinx.rake b/coreseek/csft-4.1/api/ruby/tasks/sphinx.rake new file mode 100755 index 0000000..af5c6e6 --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/tasks/sphinx.rake @@ -0,0 +1,75 @@ +namespace :sphinx do + desc 'Run indexer for configured indexes' + task :index do + config = load_config + if config[:indexes] + system "#{config[:root_dir]}/indexer --config \"#{config[:config_file]}\" #{config[:indexes]}" + else + puts 'You should specify indexes in sphinx.yml' + end + end + + desc 'Run indexer for all indexes' + task :index_all do + config = load_config + system "#{config[:root_dir]}/indexer --config \"#{config[:config_file]}\" --all" + end + + desc 'Rotate configured indexes and restart searchd server' + task :rotate do + config = load_config + if config[:indexes] + system "#{config[:root_dir]}/indexer --config \"#{config[:config_file]}\" --rotate #{config[:indexes]}" + else + puts 'You should specify indexes in sphinx.yml' + end + end + + desc 'Rotate all indexes and restart searchd server' + task :rotate_all do + config = load_config + system "#{config[:root_dir]}/indexer --config \"#{config[:config_file]}\" --rotate --all" + end + + desc 'Start searchd server' + task :start do + config = load_config + if File.exists?(config[:pid_file]) + puts 'Sphinx searchd server is already started.' + else + system "#{config[:root_dir]}/searchd --config \"#{config[:config_file]}\"" + puts 'Sphinx searchd server started.' + end + end + + desc 'Stop searchd server' + task :stop do + config = load_config + unless File.exists?(config[:pid_file]) + puts 'Sphinx searchd server is not running.' + else + pid = File.read(config[:pid_file]).chomp + kill 'SIGHUP', pid + puts 'Sphinx searchd server stopped.' + end + end + + desc 'Restart searchd server' + task :restart => [:stop, :start] + + def load_config + return @sphinx_config if @sphinx_config + + options = YAML.load_file(File.dirname(__FILE__) + '/../../../../config/sphinx.yml') rescue {} + @sphinx_config = { + :config_file => options['config_file'] || '/etc/sphinx.conf', + :root_dir => options['root_dir'] || '/usr/bin', + :indexes => options['indexes'] + } + sphinx_config = File.read(@sphinx_config[:config_file]) rescue '' + + sphinx_config =~ /searchd\s*{.*pid_file\s*=\s*(.*?)\n.*}/m + @sphinx_config[:pid_file] = $1 || '/var/run/searchd.pid' + return @sphinx_config + end +end diff --git a/coreseek/csft-4.1/api/ruby/test.rb b/coreseek/csft-4.1/api/ruby/test.rb new file mode 100755 index 0000000..7b0685e --- /dev/null +++ b/coreseek/csft-4.1/api/ruby/test.rb @@ -0,0 +1,27 @@ +# +# $Id$ +# + +require 'init.rb' + +q = ARGV.join(' ') +@sphinx = Sphinx::Client.new +# @sphinx.SetSortMode(Sphinx::Client::SPH_SORT_ATTR_ASC, 'created_at') +results = @sphinx.Query(q) + +puts "Query '#{q}' retrieved #{results['total']} of #{results['total_found']} matches in #{results['time']} sec."; +puts "Query stats:"; +results['words'].each do |word, info| + puts " '#{word}' found #{info['hits']} times in #{info['docs']} documents\n" +end +puts + +n = 1 +results['matches'].each do |doc| + print "#{n}. doc_id=#{doc['id']}, weight=#{doc['weight']}" + doc['attrs'].each do |attr, value| + print ", #{attr}=#{value}" + end + puts + n = n+1 +end diff --git a/coreseek/csft-4.1/api/sphinxapi.php b/coreseek/csft-4.1/api/sphinxapi.php new file mode 100755 index 0000000..6a00a12 --- /dev/null +++ b/coreseek/csft-4.1/api/sphinxapi.php @@ -0,0 +1,1710 @@ +=8 ) + { + $v = (int)$v; + return pack ( "NN", $v>>32, $v&0xFFFFFFFF ); + } + + // x32, int + if ( is_int($v) ) + return pack ( "NN", $v < 0 ? -1 : 0, $v ); + + // x32, bcmath + if ( function_exists("bcmul") ) + { + if ( bccomp ( $v, 0 ) == -1 ) + $v = bcadd ( "18446744073709551616", $v ); + $h = bcdiv ( $v, "4294967296", 0 ); + $l = bcmod ( $v, "4294967296" ); + return pack ( "NN", (float)$h, (float)$l ); // conversion to float is intentional; int would lose 31st bit + } + + // x32, no-bcmath + $p = max(0, strlen($v) - 13); + $lo = abs((float)substr($v, $p)); + $hi = abs((float)substr($v, 0, $p)); + + $m = $lo + $hi*1316134912.0; // (10 ^ 13) % (1 << 32) = 1316134912 + $q = floor($m/4294967296.0); + $l = $m - ($q*4294967296.0); + $h = $hi*2328.0 + $q; // (10 ^ 13) / (1 << 32) = 2328 + + if ( $v<0 ) + { + if ( $l==0 ) + $h = 4294967296.0 - $h; + else + { + $h = 4294967295.0 - $h; + $l = 4294967296.0 - $l; + } + } + return pack ( "NN", $h, $l ); +} + +/// pack 64-bit unsigned +function sphPackU64 ( $v ) +{ + assert ( is_numeric($v) ); + + // x64 + if ( PHP_INT_SIZE>=8 ) + { + assert ( $v>=0 ); + + // x64, int + if ( is_int($v) ) + return pack ( "NN", $v>>32, $v&0xFFFFFFFF ); + + // x64, bcmath + if ( function_exists("bcmul") ) + { + $h = bcdiv ( $v, 4294967296, 0 ); + $l = bcmod ( $v, 4294967296 ); + return pack ( "NN", $h, $l ); + } + + // x64, no-bcmath + $p = max ( 0, strlen($v) - 13 ); + $lo = (int)substr ( $v, $p ); + $hi = (int)substr ( $v, 0, $p ); + + $m = $lo + $hi*1316134912; + $l = $m % 4294967296; + $h = $hi*2328 + (int)($m/4294967296); + + return pack ( "NN", $h, $l ); + } + + // x32, int + if ( is_int($v) ) + return pack ( "NN", 0, $v ); + + // x32, bcmath + if ( function_exists("bcmul") ) + { + $h = bcdiv ( $v, "4294967296", 0 ); + $l = bcmod ( $v, "4294967296" ); + return pack ( "NN", (float)$h, (float)$l ); // conversion to float is intentional; int would lose 31st bit + } + + // x32, no-bcmath + $p = max(0, strlen($v) - 13); + $lo = (float)substr($v, $p); + $hi = (float)substr($v, 0, $p); + + $m = $lo + $hi*1316134912.0; + $q = floor($m / 4294967296.0); + $l = $m - ($q * 4294967296.0); + $h = $hi*2328.0 + $q; + + return pack ( "NN", $h, $l ); +} + +// unpack 64-bit unsigned +function sphUnpackU64 ( $v ) +{ + list ( $hi, $lo ) = array_values ( unpack ( "N*N*", $v ) ); + + if ( PHP_INT_SIZE>=8 ) + { + if ( $hi<0 ) $hi += (1<<32); // because php 5.2.2 to 5.2.5 is totally fucked up again + if ( $lo<0 ) $lo += (1<<32); + + // x64, int + if ( $hi<=2147483647 ) + return ($hi<<32) + $lo; + + // x64, bcmath + if ( function_exists("bcmul") ) + return bcadd ( $lo, bcmul ( $hi, "4294967296" ) ); + + // x64, no-bcmath + $C = 100000; + $h = ((int)($hi / $C) << 32) + (int)($lo / $C); + $l = (($hi % $C) << 32) + ($lo % $C); + if ( $l>$C ) + { + $h += (int)($l / $C); + $l = $l % $C; + } + + if ( $h==0 ) + return $l; + return sprintf ( "%d%05d", $h, $l ); + } + + // x32, int + if ( $hi==0 ) + { + if ( $lo>0 ) + return $lo; + return sprintf ( "%u", $lo ); + } + + $hi = sprintf ( "%u", $hi ); + $lo = sprintf ( "%u", $lo ); + + // x32, bcmath + if ( function_exists("bcmul") ) + return bcadd ( $lo, bcmul ( $hi, "4294967296" ) ); + + // x32, no-bcmath + $hi = (float)$hi; + $lo = (float)$lo; + + $q = floor($hi/10000000.0); + $r = $hi - $q*10000000.0; + $m = $lo + $r*4967296.0; + $mq = floor($m/10000000.0); + $l = $m - $mq*10000000.0; + $h = $q*4294967296.0 + $r*429.0 + $mq; + + $h = sprintf ( "%.0f", $h ); + $l = sprintf ( "%07.0f", $l ); + if ( $h=="0" ) + return sprintf( "%.0f", (float)$l ); + return $h . $l; +} + +// unpack 64-bit signed +function sphUnpackI64 ( $v ) +{ + list ( $hi, $lo ) = array_values ( unpack ( "N*N*", $v ) ); + + // x64 + if ( PHP_INT_SIZE>=8 ) + { + if ( $hi<0 ) $hi += (1<<32); // because php 5.2.2 to 5.2.5 is totally fucked up again + if ( $lo<0 ) $lo += (1<<32); + + return ($hi<<32) + $lo; + } + + // x32, int + if ( $hi==0 ) + { + if ( $lo>0 ) + return $lo; + return sprintf ( "%u", $lo ); + } + // x32, int + elseif ( $hi==-1 ) + { + if ( $lo<0 ) + return $lo; + return sprintf ( "%.0f", $lo - 4294967296.0 ); + } + + $neg = ""; + $c = 0; + if ( $hi<0 ) + { + $hi = ~$hi; + $lo = ~$lo; + $c = 1; + $neg = "-"; + } + + $hi = sprintf ( "%u", $hi ); + $lo = sprintf ( "%u", $lo ); + + // x32, bcmath + if ( function_exists("bcmul") ) + return $neg . bcadd ( bcadd ( $lo, bcmul ( $hi, "4294967296" ) ), $c ); + + // x32, no-bcmath + $hi = (float)$hi; + $lo = (float)$lo; + + $q = floor($hi/10000000.0); + $r = $hi - $q*10000000.0; + $m = $lo + $r*4967296.0; + $mq = floor($m/10000000.0); + $l = $m - $mq*10000000.0 + $c; + $h = $q*4294967296.0 + $r*429.0 + $mq; + if ( $l==10000000 ) + { + $l = 0; + $h += 1; + } + + $h = sprintf ( "%.0f", $h ); + $l = sprintf ( "%07.0f", $l ); + if ( $h=="0" ) + return $neg . sprintf( "%.0f", (float)$l ); + return $neg . $h . $l; +} + + +function sphFixUint ( $value ) +{ + if ( PHP_INT_SIZE>=8 ) + { + // x64 route, workaround broken unpack() in 5.2.2+ + if ( $value<0 ) $value += (1<<32); + return $value; + } + else + { + // x32 route, workaround php signed/unsigned braindamage + return sprintf ( "%u", $value ); + } +} + + +/// sphinx searchd client class +class SphinxClient +{ + var $_host; ///< searchd host (default is "localhost") + var $_port; ///< searchd port (default is 9312) + var $_offset; ///< how many records to seek from result-set start (default is 0) + var $_limit; ///< how many records to return from result-set starting at offset (default is 20) + var $_mode; ///< query matching mode (default is SPH_MATCH_ALL) + var $_weights; ///< per-field weights (default is 1 for all fields) + var $_sort; ///< match sorting mode (default is SPH_SORT_RELEVANCE) + var $_sortby; ///< attribute to sort by (defualt is "") + var $_min_id; ///< min ID to match (default is 0, which means no limit) + var $_max_id; ///< max ID to match (default is 0, which means no limit) + var $_filters; ///< search filters + var $_groupby; ///< group-by attribute name + var $_groupfunc; ///< group-by function (to pre-process group-by attribute value with) + var $_groupsort; ///< group-by sorting clause (to sort groups in result set with) + var $_groupdistinct;///< group-by count-distinct attribute + var $_maxmatches; ///< max matches to retrieve + var $_cutoff; ///< cutoff to stop searching at (default is 0) + var $_retrycount; ///< distributed retries count + var $_retrydelay; ///< distributed retries delay + var $_anchor; ///< geographical anchor point + var $_indexweights; ///< per-index weights + var $_ranker; ///< ranking mode (default is SPH_RANK_PROXIMITY_BM25) + var $_rankexpr; ///< ranking mode expression (for SPH_RANK_EXPR) + var $_maxquerytime; ///< max query time, milliseconds (default is 0, do not limit) + var $_fieldweights; ///< per-field-name weights + var $_overrides; ///< per-query attribute values overrides + var $_select; ///< select-list (attributes or expressions, with optional aliases) + + var $_error; ///< last error message + var $_warning; ///< last warning message + var $_connerror; ///< connection error vs remote error flag + + var $_reqs; ///< requests array for multi-query + var $_mbenc; ///< stored mbstring encoding + var $_arrayresult; ///< whether $result["matches"] should be a hash or an array + var $_timeout; ///< connect timeout + + ///////////////////////////////////////////////////////////////////////////// + // common stuff + ///////////////////////////////////////////////////////////////////////////// + + /// create a new client object and fill defaults + function SphinxClient () + { + // per-client-object settings + $this->_host = "localhost"; + $this->_port = 9312; + $this->_path = false; + $this->_socket = false; + + // per-query settings + $this->_offset = 0; + $this->_limit = 20; + $this->_mode = SPH_MATCH_ALL; + $this->_weights = array (); + $this->_sort = SPH_SORT_RELEVANCE; + $this->_sortby = ""; + $this->_min_id = 0; + $this->_max_id = 0; + $this->_filters = array (); + $this->_groupby = ""; + $this->_groupfunc = SPH_GROUPBY_DAY; + $this->_groupsort = "@group desc"; + $this->_groupdistinct= ""; + $this->_maxmatches = 1000; + $this->_cutoff = 0; + $this->_retrycount = 0; + $this->_retrydelay = 0; + $this->_anchor = array (); + $this->_indexweights= array (); + $this->_ranker = SPH_RANK_PROXIMITY_BM25; + $this->_rankexpr = ""; + $this->_maxquerytime= 0; + $this->_fieldweights= array(); + $this->_overrides = array(); + $this->_select = "*"; + + $this->_error = ""; // per-reply fields (for single-query case) + $this->_warning = ""; + $this->_connerror = false; + + $this->_reqs = array (); // requests storage (for multi-query case) + $this->_mbenc = ""; + $this->_arrayresult = false; + $this->_timeout = 0; + } + + function __destruct() + { + if ( $this->_socket !== false ) + fclose ( $this->_socket ); + } + + /// get last error message (string) + function GetLastError () + { + return $this->_error; + } + + /// get last warning message (string) + function GetLastWarning () + { + return $this->_warning; + } + + /// get last error flag (to tell network connection errors from searchd errors or broken responses) + function IsConnectError() + { + return $this->_connerror; + } + + /// set searchd host name (string) and port (integer) + function SetServer ( $host, $port = 0 ) + { + assert ( is_string($host) ); + if ( $host[0] == '/') + { + $this->_path = 'unix://' . $host; + return; + } + if ( substr ( $host, 0, 7 )=="unix://" ) + { + $this->_path = $host; + return; + } + + assert ( is_int($port) ); + $this->_host = $host; + $this->_port = $port; + $this->_path = ''; + + } + + /// set server connection timeout (0 to remove) + function SetConnectTimeout ( $timeout ) + { + assert ( is_numeric($timeout) ); + $this->_timeout = $timeout; + } + + + function _Send ( $handle, $data, $length ) + { + if ( feof($handle) || fwrite ( $handle, $data, $length ) !== $length ) + { + $this->_error = 'connection unexpectedly closed (timed out?)'; + $this->_connerror = true; + return false; + } + return true; + } + + ///////////////////////////////////////////////////////////////////////////// + + /// enter mbstring workaround mode + function _MBPush () + { + $this->_mbenc = ""; + if ( ini_get ( "mbstring.func_overload" ) & 2 ) + { + $this->_mbenc = mb_internal_encoding(); + mb_internal_encoding ( "latin1" ); + } + } + + /// leave mbstring workaround mode + function _MBPop () + { + if ( $this->_mbenc ) + mb_internal_encoding ( $this->_mbenc ); + } + + /// connect to searchd server + function _Connect () + { + if ( $this->_socket!==false ) + { + // we are in persistent connection mode, so we have a socket + // however, need to check whether it's still alive + if ( !@feof ( $this->_socket ) ) + return $this->_socket; + + // force reopen + $this->_socket = false; + } + + $errno = 0; + $errstr = ""; + $this->_connerror = false; + + if ( $this->_path ) + { + $host = $this->_path; + $port = 0; + } + else + { + $host = $this->_host; + $port = $this->_port; + } + + if ( $this->_timeout<=0 ) + $fp = @fsockopen ( $host, $port, $errno, $errstr ); + else + $fp = @fsockopen ( $host, $port, $errno, $errstr, $this->_timeout ); + + if ( !$fp ) + { + if ( $this->_path ) + $location = $this->_path; + else + $location = "{$this->_host}:{$this->_port}"; + + $errstr = trim ( $errstr ); + $this->_error = "connection to $location failed (errno=$errno, msg=$errstr)"; + $this->_connerror = true; + return false; + } + + // send my version + // this is a subtle part. we must do it before (!) reading back from searchd. + // because otherwise under some conditions (reported on FreeBSD for instance) + // TCP stack could throttle write-write-read pattern because of Nagle. + if ( !$this->_Send ( $fp, pack ( "N", 1 ), 4 ) ) + { + fclose ( $fp ); + $this->_error = "failed to send client protocol version"; + return false; + } + + // check version + list(,$v) = unpack ( "N*", fread ( $fp, 4 ) ); + $v = (int)$v; + if ( $v<1 ) + { + fclose ( $fp ); + $this->_error = "expected searchd protocol version 1+, got version '$v'"; + return false; + } + + return $fp; + } + + /// get and check response packet from searchd server + function _GetResponse ( $fp, $client_ver ) + { + $response = ""; + $len = 0; + + $header = fread ( $fp, 8 ); + if ( strlen($header)==8 ) + { + list ( $status, $ver, $len ) = array_values ( unpack ( "n2a/Nb", $header ) ); + $left = $len; + while ( $left>0 && !feof($fp) ) + { + $chunk = fread ( $fp, min ( 8192, $left ) ); + if ( $chunk ) + { + $response .= $chunk; + $left -= strlen($chunk); + } + } + } + if ( $this->_socket === false ) + fclose ( $fp ); + + // check response + $read = strlen ( $response ); + if ( !$response || $read!=$len ) + { + $this->_error = $len + ? "failed to read searchd response (status=$status, ver=$ver, len=$len, read=$read)" + : "received zero-sized searchd response"; + return false; + } + + // check status + if ( $status==SEARCHD_WARNING ) + { + list(,$wlen) = unpack ( "N*", substr ( $response, 0, 4 ) ); + $this->_warning = substr ( $response, 4, $wlen ); + return substr ( $response, 4+$wlen ); + } + if ( $status==SEARCHD_ERROR ) + { + $this->_error = "searchd error: " . substr ( $response, 4 ); + return false; + } + if ( $status==SEARCHD_RETRY ) + { + $this->_error = "temporary searchd error: " . substr ( $response, 4 ); + return false; + } + if ( $status!=SEARCHD_OK ) + { + $this->_error = "unknown status code '$status'"; + return false; + } + + // check version + if ( $ver<$client_ver ) + { + $this->_warning = sprintf ( "searchd command v.%d.%d older than client's v.%d.%d, some options might not work", + $ver>>8, $ver&0xff, $client_ver>>8, $client_ver&0xff ); + } + + return $response; + } + + ///////////////////////////////////////////////////////////////////////////// + // searching + ///////////////////////////////////////////////////////////////////////////// + + /// set offset and count into result set, + /// and optionally set max-matches and cutoff limits + function SetLimits ( $offset, $limit, $max=0, $cutoff=0 ) + { + assert ( is_int($offset) ); + assert ( is_int($limit) ); + assert ( $offset>=0 ); + assert ( $limit>0 ); + assert ( $max>=0 ); + $this->_offset = $offset; + $this->_limit = $limit; + if ( $max>0 ) + $this->_maxmatches = $max; + if ( $cutoff>0 ) + $this->_cutoff = $cutoff; + } + + /// set maximum query time, in milliseconds, per-index + /// integer, 0 means "do not limit" + function SetMaxQueryTime ( $max ) + { + assert ( is_int($max) ); + assert ( $max>=0 ); + $this->_maxquerytime = $max; + } + + /// set matching mode + function SetMatchMode ( $mode ) + { + assert ( $mode==SPH_MATCH_ALL + || $mode==SPH_MATCH_ANY + || $mode==SPH_MATCH_PHRASE + || $mode==SPH_MATCH_BOOLEAN + || $mode==SPH_MATCH_EXTENDED + || $mode==SPH_MATCH_FULLSCAN + || $mode==SPH_MATCH_EXTENDED2 ); + $this->_mode = $mode; + } + + /// set ranking mode + function SetRankingMode ( $ranker, $rankexpr="" ) + { + assert ( $ranker>=0 && $ranker_ranker = $ranker; + $this->_rankexpr = $rankexpr; + } + + /// set matches sorting mode + function SetSortMode ( $mode, $sortby="" ) + { + assert ( + $mode==SPH_SORT_RELEVANCE || + $mode==SPH_SORT_ATTR_DESC || + $mode==SPH_SORT_ATTR_ASC || + $mode==SPH_SORT_TIME_SEGMENTS || + $mode==SPH_SORT_EXTENDED || + $mode==SPH_SORT_EXPR ); + assert ( is_string($sortby) ); + assert ( $mode==SPH_SORT_RELEVANCE || strlen($sortby)>0 ); + + $this->_sort = $mode; + $this->_sortby = $sortby; + } + + /// bind per-field weights by order + /// DEPRECATED; use SetFieldWeights() instead + function SetWeights ( $weights ) + { + assert ( is_array($weights) ); + foreach ( $weights as $weight ) + assert ( is_int($weight) ); + + $this->_weights = $weights; + } + + /// bind per-field weights by name + function SetFieldWeights ( $weights ) + { + assert ( is_array($weights) ); + foreach ( $weights as $name=>$weight ) + { + assert ( is_string($name) ); + assert ( is_int($weight) ); + } + $this->_fieldweights = $weights; + } + + /// bind per-index weights by name + function SetIndexWeights ( $weights ) + { + assert ( is_array($weights) ); + foreach ( $weights as $index=>$weight ) + { + assert ( is_string($index) ); + assert ( is_int($weight) ); + } + $this->_indexweights = $weights; + } + + /// set IDs range to match + /// only match records if document ID is beetwen $min and $max (inclusive) + function SetIDRange ( $min, $max ) + { + assert ( is_numeric($min) ); + assert ( is_numeric($max) ); + assert ( $min<=$max ); + $this->_min_id = $min; + $this->_max_id = $max; + } + + /// set values set filter + /// only match records where $attribute value is in given set + function SetFilter ( $attribute, $values, $exclude=false ) + { + assert ( is_string($attribute) ); + assert ( is_array($values) ); + assert ( count($values) ); + + if ( is_array($values) && count($values) ) + { + foreach ( $values as $value ) + assert ( is_numeric($value) ); + + $this->_filters[] = array ( "type"=>SPH_FILTER_VALUES, "attr"=>$attribute, "exclude"=>$exclude, "values"=>$values ); + } + } + + /// set range filter + /// only match records if $attribute value is beetwen $min and $max (inclusive) + function SetFilterRange ( $attribute, $min, $max, $exclude=false ) + { + assert ( is_string($attribute) ); + assert ( is_numeric($min) ); + assert ( is_numeric($max) ); + assert ( $min<=$max ); + + $this->_filters[] = array ( "type"=>SPH_FILTER_RANGE, "attr"=>$attribute, "exclude"=>$exclude, "min"=>$min, "max"=>$max ); + } + + /// set float range filter + /// only match records if $attribute value is beetwen $min and $max (inclusive) + function SetFilterFloatRange ( $attribute, $min, $max, $exclude=false ) + { + assert ( is_string($attribute) ); + assert ( is_float($min) ); + assert ( is_float($max) ); + assert ( $min<=$max ); + + $this->_filters[] = array ( "type"=>SPH_FILTER_FLOATRANGE, "attr"=>$attribute, "exclude"=>$exclude, "min"=>$min, "max"=>$max ); + } + + /// setup anchor point for geosphere distance calculations + /// required to use @geodist in filters and sorting + /// latitude and longitude must be in radians + function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long ) + { + assert ( is_string($attrlat) ); + assert ( is_string($attrlong) ); + assert ( is_float($lat) ); + assert ( is_float($long) ); + + $this->_anchor = array ( "attrlat"=>$attrlat, "attrlong"=>$attrlong, "lat"=>$lat, "long"=>$long ); + } + + /// set grouping attribute and function + function SetGroupBy ( $attribute, $func, $groupsort="@group desc" ) + { + assert ( is_string($attribute) ); + assert ( is_string($groupsort) ); + assert ( $func==SPH_GROUPBY_DAY + || $func==SPH_GROUPBY_WEEK + || $func==SPH_GROUPBY_MONTH + || $func==SPH_GROUPBY_YEAR + || $func==SPH_GROUPBY_ATTR + || $func==SPH_GROUPBY_ATTRPAIR ); + + $this->_groupby = $attribute; + $this->_groupfunc = $func; + $this->_groupsort = $groupsort; + } + + /// set count-distinct attribute for group-by queries + function SetGroupDistinct ( $attribute ) + { + assert ( is_string($attribute) ); + $this->_groupdistinct = $attribute; + } + + /// set distributed retries count and delay + function SetRetries ( $count, $delay=0 ) + { + assert ( is_int($count) && $count>=0 ); + assert ( is_int($delay) && $delay>=0 ); + $this->_retrycount = $count; + $this->_retrydelay = $delay; + } + + /// set result set format (hash or array; hash by default) + /// PHP specific; needed for group-by-MVA result sets that may contain duplicate IDs + function SetArrayResult ( $arrayresult ) + { + assert ( is_bool($arrayresult) ); + $this->_arrayresult = $arrayresult; + } + + /// set attribute values override + /// there can be only one override per attribute + /// $values must be a hash that maps document IDs to attribute values + function SetOverride ( $attrname, $attrtype, $values ) + { + assert ( is_string ( $attrname ) ); + assert ( in_array ( $attrtype, array ( SPH_ATTR_INTEGER, SPH_ATTR_TIMESTAMP, SPH_ATTR_BOOL, SPH_ATTR_FLOAT, SPH_ATTR_BIGINT ) ) ); + assert ( is_array ( $values ) ); + + $this->_overrides[$attrname] = array ( "attr"=>$attrname, "type"=>$attrtype, "values"=>$values ); + } + + /// set select-list (attributes or expressions), SQL-like syntax + function SetSelect ( $select ) + { + assert ( is_string ( $select ) ); + $this->_select = $select; + } + + ////////////////////////////////////////////////////////////////////////////// + + /// clear all filters (for multi-queries) + function ResetFilters () + { + $this->_filters = array(); + $this->_anchor = array(); + } + + /// clear groupby settings (for multi-queries) + function ResetGroupBy () + { + $this->_groupby = ""; + $this->_groupfunc = SPH_GROUPBY_DAY; + $this->_groupsort = "@group desc"; + $this->_groupdistinct= ""; + } + + /// clear all attribute value overrides (for multi-queries) + function ResetOverrides () + { + $this->_overrides = array (); + } + + ////////////////////////////////////////////////////////////////////////////// + + /// connect to searchd server, run given search query through given indexes, + /// and return the search results + function Query ( $query, $index="*", $comment="" ) + { + assert ( empty($this->_reqs) ); + + $this->AddQuery ( $query, $index, $comment ); + $results = $this->RunQueries (); + $this->_reqs = array (); // just in case it failed too early + + if ( !is_array($results) ) + return false; // probably network error; error message should be already filled + + $this->_error = $results[0]["error"]; + $this->_warning = $results[0]["warning"]; + if ( $results[0]["status"]==SEARCHD_ERROR ) + return false; + else + return $results[0]; + } + + /// helper to pack floats in network byte order + function _PackFloat ( $f ) + { + $t1 = pack ( "f", $f ); // machine order + list(,$t2) = unpack ( "L*", $t1 ); // int in machine order + return pack ( "N", $t2 ); + } + + /// add query to multi-query batch + /// returns index into results array from RunQueries() call + function AddQuery ( $query, $index="*", $comment="" ) + { + // mbstring workaround + $this->_MBPush (); + + // build request + $req = pack ( "NNNN", $this->_offset, $this->_limit, $this->_mode, $this->_ranker ); + if ( $this->_ranker==SPH_RANK_EXPR ) + $req .= pack ( "N", strlen($this->_rankexpr) ) . $this->_rankexpr; + $req .= pack ( "N", $this->_sort ); // (deprecated) sort mode + $req .= pack ( "N", strlen($this->_sortby) ) . $this->_sortby; + $req .= pack ( "N", strlen($query) ) . $query; // query itself + $req .= pack ( "N", count($this->_weights) ); // weights + foreach ( $this->_weights as $weight ) + $req .= pack ( "N", (int)$weight ); + $req .= pack ( "N", strlen($index) ) . $index; // indexes + $req .= pack ( "N", 1 ); // id64 range marker + $req .= sphPackU64 ( $this->_min_id ) . sphPackU64 ( $this->_max_id ); // id64 range + + // filters + $req .= pack ( "N", count($this->_filters) ); + foreach ( $this->_filters as $filter ) + { + $req .= pack ( "N", strlen($filter["attr"]) ) . $filter["attr"]; + $req .= pack ( "N", $filter["type"] ); + switch ( $filter["type"] ) + { + case SPH_FILTER_VALUES: + $req .= pack ( "N", count($filter["values"]) ); + foreach ( $filter["values"] as $value ) + $req .= sphPackI64 ( $value ); + break; + + case SPH_FILTER_RANGE: + $req .= sphPackI64 ( $filter["min"] ) . sphPackI64 ( $filter["max"] ); + break; + + case SPH_FILTER_FLOATRANGE: + $req .= $this->_PackFloat ( $filter["min"] ) . $this->_PackFloat ( $filter["max"] ); + break; + + default: + assert ( 0 && "internal error: unhandled filter type" ); + } + $req .= pack ( "N", $filter["exclude"] ); + } + + // group-by clause, max-matches count, group-sort clause, cutoff count + $req .= pack ( "NN", $this->_groupfunc, strlen($this->_groupby) ) . $this->_groupby; + $req .= pack ( "N", $this->_maxmatches ); + $req .= pack ( "N", strlen($this->_groupsort) ) . $this->_groupsort; + $req .= pack ( "NNN", $this->_cutoff, $this->_retrycount, $this->_retrydelay ); + $req .= pack ( "N", strlen($this->_groupdistinct) ) . $this->_groupdistinct; + + // anchor point + if ( empty($this->_anchor) ) + { + $req .= pack ( "N", 0 ); + } else + { + $a =& $this->_anchor; + $req .= pack ( "N", 1 ); + $req .= pack ( "N", strlen($a["attrlat"]) ) . $a["attrlat"]; + $req .= pack ( "N", strlen($a["attrlong"]) ) . $a["attrlong"]; + $req .= $this->_PackFloat ( $a["lat"] ) . $this->_PackFloat ( $a["long"] ); + } + + // per-index weights + $req .= pack ( "N", count($this->_indexweights) ); + foreach ( $this->_indexweights as $idx=>$weight ) + $req .= pack ( "N", strlen($idx) ) . $idx . pack ( "N", $weight ); + + // max query time + $req .= pack ( "N", $this->_maxquerytime ); + + // per-field weights + $req .= pack ( "N", count($this->_fieldweights) ); + foreach ( $this->_fieldweights as $field=>$weight ) + $req .= pack ( "N", strlen($field) ) . $field . pack ( "N", $weight ); + + // comment + $req .= pack ( "N", strlen($comment) ) . $comment; + + // attribute overrides + $req .= pack ( "N", count($this->_overrides) ); + foreach ( $this->_overrides as $key => $entry ) + { + $req .= pack ( "N", strlen($entry["attr"]) ) . $entry["attr"]; + $req .= pack ( "NN", $entry["type"], count($entry["values"]) ); + foreach ( $entry["values"] as $id=>$val ) + { + assert ( is_numeric($id) ); + assert ( is_numeric($val) ); + + $req .= sphPackU64 ( $id ); + switch ( $entry["type"] ) + { + case SPH_ATTR_FLOAT: $req .= $this->_PackFloat ( $val ); break; + case SPH_ATTR_BIGINT: $req .= sphPackI64 ( $val ); break; + default: $req .= pack ( "N", $val ); break; + } + } + } + + // select-list + $req .= pack ( "N", strlen($this->_select) ) . $this->_select; + + // mbstring workaround + $this->_MBPop (); + + // store request to requests array + $this->_reqs[] = $req; + return count($this->_reqs)-1; + } + + /// connect to searchd, run queries batch, and return an array of result sets + function RunQueries () + { + if ( empty($this->_reqs) ) + { + $this->_error = "no queries defined, issue AddQuery() first"; + return false; + } + + // mbstring workaround + $this->_MBPush (); + + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop (); + return false; + } + + // send query, get response + $nreqs = count($this->_reqs); + $req = join ( "", $this->_reqs ); + $len = 8+strlen($req); + $req = pack ( "nnNNN", SEARCHD_COMMAND_SEARCH, VER_COMMAND_SEARCH, $len, 0, $nreqs ) . $req; // add header + + if ( !( $this->_Send ( $fp, $req, $len+8 ) ) || + !( $response = $this->_GetResponse ( $fp, VER_COMMAND_SEARCH ) ) ) + { + $this->_MBPop (); + return false; + } + + // query sent ok; we can reset reqs now + $this->_reqs = array (); + + // parse and return response + return $this->_ParseSearchResponse ( $response, $nreqs ); + } + + /// parse and return search query (or queries) response + function _ParseSearchResponse ( $response, $nreqs ) + { + $p = 0; // current position + $max = strlen($response); // max position for checks, to protect against broken responses + + $results = array (); + for ( $ires=0; $ires<$nreqs && $p<$max; $ires++ ) + { + $results[] = array(); + $result =& $results[$ires]; + + $result["error"] = ""; + $result["warning"] = ""; + + // extract status + list(,$status) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $result["status"] = $status; + if ( $status!=SEARCHD_OK ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $message = substr ( $response, $p, $len ); $p += $len; + + if ( $status==SEARCHD_WARNING ) + { + $result["warning"] = $message; + } else + { + $result["error"] = $message; + continue; + } + } + + // read schema + $fields = array (); + $attrs = array (); + + list(,$nfields) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + while ( $nfields-->0 && $p<$max ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $fields[] = substr ( $response, $p, $len ); $p += $len; + } + $result["fields"] = $fields; + + list(,$nattrs) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + while ( $nattrs-->0 && $p<$max ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $attr = substr ( $response, $p, $len ); $p += $len; + list(,$type) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $attrs[$attr] = $type; + } + $result["attrs"] = $attrs; + + // read match count + list(,$count) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + list(,$id64) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + + // read matches + $idx = -1; + while ( $count-->0 && $p<$max ) + { + // index into result array + $idx++; + + // parse document id and weight + if ( $id64 ) + { + $doc = sphUnpackU64 ( substr ( $response, $p, 8 ) ); $p += 8; + list(,$weight) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + } + else + { + list ( $doc, $weight ) = array_values ( unpack ( "N*N*", + substr ( $response, $p, 8 ) ) ); + $p += 8; + $doc = sphFixUint($doc); + } + $weight = sprintf ( "%u", $weight ); + + // create match entry + if ( $this->_arrayresult ) + $result["matches"][$idx] = array ( "id"=>$doc, "weight"=>$weight ); + else + $result["matches"][$doc]["weight"] = $weight; + + // parse and create attributes + $attrvals = array (); + foreach ( $attrs as $attr=>$type ) + { + // handle 64bit ints + if ( $type==SPH_ATTR_BIGINT ) + { + $attrvals[$attr] = sphUnpackI64 ( substr ( $response, $p, 8 ) ); $p += 8; + continue; + } + + // handle floats + if ( $type==SPH_ATTR_FLOAT ) + { + list(,$uval) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + list(,$fval) = unpack ( "f*", pack ( "L", $uval ) ); + $attrvals[$attr] = $fval; + continue; + } + + // handle everything else as unsigned ints + list(,$val) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + if ( $type==SPH_ATTR_MULTI ) + { + $attrvals[$attr] = array (); + $nvalues = $val; + while ( $nvalues-->0 && $p<$max ) + { + list(,$val) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $attrvals[$attr][] = sphFixUint($val); + } + } else if ( $type==SPH_ATTR_MULTI64 ) + { + $attrvals[$attr] = array (); + $nvalues = $val; + while ( $nvalues>0 && $p<$max ) + { + $val = sphUnpackU64 ( substr ( $response, $p, 8 ) ); $p += 8; + $attrvals[$attr][] = strval( $val ); // FIXME!!! sphFixUint returns MVA values as string so It to + $nvalues -= 2; + } + } else if ( $type==SPH_ATTR_STRING ) + { + $attrvals[$attr] = substr ( $response, $p, $val ); + $p += $val; + } else + { + $attrvals[$attr] = sphFixUint($val); + } + } + + if ( $this->_arrayresult ) + $result["matches"][$idx]["attrs"] = $attrvals; + else + $result["matches"][$doc]["attrs"] = $attrvals; + } + + list ( $total, $total_found, $msecs, $words ) = + array_values ( unpack ( "N*N*N*N*", substr ( $response, $p, 16 ) ) ); + $result["total"] = sprintf ( "%u", $total ); + $result["total_found"] = sprintf ( "%u", $total_found ); + $result["time"] = sprintf ( "%.3f", $msecs/1000 ); + $p += 16; + + while ( $words-->0 && $p<$max ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $word = substr ( $response, $p, $len ); $p += $len; + list ( $docs, $hits ) = array_values ( unpack ( "N*N*", substr ( $response, $p, 8 ) ) ); $p += 8; + $result["words"][$word] = array ( + "docs"=>sprintf ( "%u", $docs ), + "hits"=>sprintf ( "%u", $hits ) ); + } + } + + $this->_MBPop (); + return $results; + } + + ///////////////////////////////////////////////////////////////////////////// + // excerpts generation + ///////////////////////////////////////////////////////////////////////////// + + /// connect to searchd server, and generate exceprts (snippets) + /// of given documents for given query. returns false on failure, + /// an array of snippets on success + function BuildExcerpts ( $docs, $index, $words, $opts=array() ) + { + assert ( is_array($docs) ); + assert ( is_string($index) ); + assert ( is_string($words) ); + assert ( is_array($opts) ); + + $this->_MBPush (); + + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop(); + return false; + } + + ///////////////// + // fixup options + ///////////////// + + if ( !isset($opts["before_match"]) ) $opts["before_match"] = ""; + if ( !isset($opts["after_match"]) ) $opts["after_match"] = ""; + if ( !isset($opts["chunk_separator"]) ) $opts["chunk_separator"] = " ... "; + if ( !isset($opts["limit"]) ) $opts["limit"] = 256; + if ( !isset($opts["limit_passages"]) ) $opts["limit_passages"] = 0; + if ( !isset($opts["limit_words"]) ) $opts["limit_words"] = 0; + if ( !isset($opts["around"]) ) $opts["around"] = 5; + if ( !isset($opts["exact_phrase"]) ) $opts["exact_phrase"] = false; + if ( !isset($opts["single_passage"]) ) $opts["single_passage"] = false; + if ( !isset($opts["use_boundaries"]) ) $opts["use_boundaries"] = false; + if ( !isset($opts["weight_order"]) ) $opts["weight_order"] = false; + if ( !isset($opts["query_mode"]) ) $opts["query_mode"] = false; + if ( !isset($opts["force_all_words"]) ) $opts["force_all_words"] = false; + if ( !isset($opts["start_passage_id"]) ) $opts["start_passage_id"] = 1; + if ( !isset($opts["load_files"]) ) $opts["load_files"] = false; + if ( !isset($opts["html_strip_mode"]) ) $opts["html_strip_mode"] = "index"; + if ( !isset($opts["allow_empty"]) ) $opts["allow_empty"] = false; + if ( !isset($opts["passage_boundary"]) ) $opts["passage_boundary"] = "none"; + if ( !isset($opts["emit_zones"]) ) $opts["emit_zones"] = false; + + ///////////////// + // build request + ///////////////// + + // v.1.2 req + $flags = 1; // remove spaces + if ( $opts["exact_phrase"] ) $flags |= 2; + if ( $opts["single_passage"] ) $flags |= 4; + if ( $opts["use_boundaries"] ) $flags |= 8; + if ( $opts["weight_order"] ) $flags |= 16; + if ( $opts["query_mode"] ) $flags |= 32; + if ( $opts["force_all_words"] ) $flags |= 64; + if ( $opts["load_files"] ) $flags |= 128; + if ( $opts["allow_empty"] ) $flags |= 256; + if ( $opts["emit_zones"] ) $flags |= 512; + $req = pack ( "NN", 0, $flags ); // mode=0, flags=$flags + $req .= pack ( "N", strlen($index) ) . $index; // req index + $req .= pack ( "N", strlen($words) ) . $words; // req words + + // options + $req .= pack ( "N", strlen($opts["before_match"]) ) . $opts["before_match"]; + $req .= pack ( "N", strlen($opts["after_match"]) ) . $opts["after_match"]; + $req .= pack ( "N", strlen($opts["chunk_separator"]) ) . $opts["chunk_separator"]; + $req .= pack ( "NN", (int)$opts["limit"], (int)$opts["around"] ); + $req .= pack ( "NNN", (int)$opts["limit_passages"], (int)$opts["limit_words"], (int)$opts["start_passage_id"] ); // v.1.2 + $req .= pack ( "N", strlen($opts["html_strip_mode"]) ) . $opts["html_strip_mode"]; + $req .= pack ( "N", strlen($opts["passage_boundary"]) ) . $opts["passage_boundary"]; + + // documents + $req .= pack ( "N", count($docs) ); + foreach ( $docs as $doc ) + { + assert ( is_string($doc) ); + $req .= pack ( "N", strlen($doc) ) . $doc; + } + + //////////////////////////// + // send query, get response + //////////////////////////// + + $len = strlen($req); + $req = pack ( "nnN", SEARCHD_COMMAND_EXCERPT, VER_COMMAND_EXCERPT, $len ) . $req; // add header + if ( !( $this->_Send ( $fp, $req, $len+8 ) ) || + !( $response = $this->_GetResponse ( $fp, VER_COMMAND_EXCERPT ) ) ) + { + $this->_MBPop (); + return false; + } + + ////////////////// + // parse response + ////////////////// + + $pos = 0; + $res = array (); + $rlen = strlen($response); + for ( $i=0; $i $rlen ) + { + $this->_error = "incomplete reply"; + $this->_MBPop (); + return false; + } + $res[] = $len ? substr ( $response, $pos, $len ) : ""; + $pos += $len; + } + + $this->_MBPop (); + return $res; + } + + + ///////////////////////////////////////////////////////////////////////////// + // keyword generation + ///////////////////////////////////////////////////////////////////////////// + + /// connect to searchd server, and generate keyword list for a given query + /// returns false on failure, + /// an array of words on success + function BuildKeywords ( $query, $index, $hits ) + { + assert ( is_string($query) ); + assert ( is_string($index) ); + assert ( is_bool($hits) ); + + $this->_MBPush (); + + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop(); + return false; + } + + ///////////////// + // build request + ///////////////// + + // v.1.0 req + $req = pack ( "N", strlen($query) ) . $query; // req query + $req .= pack ( "N", strlen($index) ) . $index; // req index + $req .= pack ( "N", (int)$hits ); + + //////////////////////////// + // send query, get response + //////////////////////////// + + $len = strlen($req); + $req = pack ( "nnN", SEARCHD_COMMAND_KEYWORDS, VER_COMMAND_KEYWORDS, $len ) . $req; // add header + if ( !( $this->_Send ( $fp, $req, $len+8 ) ) || + !( $response = $this->_GetResponse ( $fp, VER_COMMAND_KEYWORDS ) ) ) + { + $this->_MBPop (); + return false; + } + + ////////////////// + // parse response + ////////////////// + + $pos = 0; + $res = array (); + $rlen = strlen($response); + list(,$nwords) = unpack ( "N*", substr ( $response, $pos, 4 ) ); + $pos += 4; + for ( $i=0; $i<$nwords; $i++ ) + { + list(,$len) = unpack ( "N*", substr ( $response, $pos, 4 ) ); $pos += 4; + $tokenized = $len ? substr ( $response, $pos, $len ) : ""; + $pos += $len; + + list(,$len) = unpack ( "N*", substr ( $response, $pos, 4 ) ); $pos += 4; + $normalized = $len ? substr ( $response, $pos, $len ) : ""; + $pos += $len; + + $res[] = array ( "tokenized"=>$tokenized, "normalized"=>$normalized ); + + if ( $hits ) + { + list($ndocs,$nhits) = array_values ( unpack ( "N*N*", substr ( $response, $pos, 8 ) ) ); + $pos += 8; + $res [$i]["docs"] = $ndocs; + $res [$i]["hits"] = $nhits; + } + + if ( $pos > $rlen ) + { + $this->_error = "incomplete reply"; + $this->_MBPop (); + return false; + } + } + + $this->_MBPop (); + return $res; + } + + function EscapeString ( $string ) + { + $from = array ( '\\', '(',')','|','-','!','@','~','"','&', '/', '^', '$', '=' ); + $to = array ( '\\\\', '\(','\)','\|','\-','\!','\@','\~','\"', '\&', '\/', '\^', '\$', '\=' ); + + return str_replace ( $from, $to, $string ); + } + + ///////////////////////////////////////////////////////////////////////////// + // attribute updates + ///////////////////////////////////////////////////////////////////////////// + + /// batch update given attributes in given rows in given indexes + /// returns amount of updated documents (0 or more) on success, or -1 on failure + function UpdateAttributes ( $index, $attrs, $values, $mva=false ) + { + // verify everything + assert ( is_string($index) ); + assert ( is_bool($mva) ); + + assert ( is_array($attrs) ); + foreach ( $attrs as $attr ) + assert ( is_string($attr) ); + + assert ( is_array($values) ); + foreach ( $values as $id=>$entry ) + { + assert ( is_numeric($id) ); + assert ( is_array($entry) ); + assert ( count($entry)==count($attrs) ); + foreach ( $entry as $v ) + { + if ( $mva ) + { + assert ( is_array($v) ); + foreach ( $v as $vv ) + assert ( is_int($vv) ); + } else + assert ( is_int($v) ); + } + } + + // build request + $this->_MBPush (); + $req = pack ( "N", strlen($index) ) . $index; + + $req .= pack ( "N", count($attrs) ); + foreach ( $attrs as $attr ) + { + $req .= pack ( "N", strlen($attr) ) . $attr; + $req .= pack ( "N", $mva ? 1 : 0 ); + } + + $req .= pack ( "N", count($values) ); + foreach ( $values as $id=>$entry ) + { + $req .= sphPackU64 ( $id ); + foreach ( $entry as $v ) + { + $req .= pack ( "N", $mva ? count($v) : $v ); + if ( $mva ) + foreach ( $v as $vv ) + $req .= pack ( "N", $vv ); + } + } + + // connect, send query, get response + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop (); + return -1; + } + + $len = strlen($req); + $req = pack ( "nnN", SEARCHD_COMMAND_UPDATE, VER_COMMAND_UPDATE, $len ) . $req; // add header + if ( !$this->_Send ( $fp, $req, $len+8 ) ) + { + $this->_MBPop (); + return -1; + } + + if (!( $response = $this->_GetResponse ( $fp, VER_COMMAND_UPDATE ) )) + { + $this->_MBPop (); + return -1; + } + + // parse response + list(,$updated) = unpack ( "N*", substr ( $response, 0, 4 ) ); + $this->_MBPop (); + return $updated; + } + + ///////////////////////////////////////////////////////////////////////////// + // persistent connections + ///////////////////////////////////////////////////////////////////////////// + + function Open() + { + if ( $this->_socket !== false ) + { + $this->_error = 'already connected'; + return false; + } + if ( !$fp = $this->_Connect() ) + return false; + + // command, command version = 0, body length = 4, body = 1 + $req = pack ( "nnNN", SEARCHD_COMMAND_PERSIST, 0, 4, 1 ); + if ( !$this->_Send ( $fp, $req, 12 ) ) + return false; + + $this->_socket = $fp; + return true; + } + + function Close() + { + if ( $this->_socket === false ) + { + $this->_error = 'not connected'; + return false; + } + + fclose ( $this->_socket ); + $this->_socket = false; + + return true; + } + + ////////////////////////////////////////////////////////////////////////// + // status + ////////////////////////////////////////////////////////////////////////// + + function Status () + { + $this->_MBPush (); + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop(); + return false; + } + + $req = pack ( "nnNN", SEARCHD_COMMAND_STATUS, VER_COMMAND_STATUS, 4, 1 ); // len=4, body=1 + if ( !( $this->_Send ( $fp, $req, 12 ) ) || + !( $response = $this->_GetResponse ( $fp, VER_COMMAND_STATUS ) ) ) + { + $this->_MBPop (); + return false; + } + + $res = substr ( $response, 4 ); // just ignore length, error handling, etc + $p = 0; + list ( $rows, $cols ) = array_values ( unpack ( "N*N*", substr ( $response, $p, 8 ) ) ); $p += 8; + + $res = array(); + for ( $i=0; $i<$rows; $i++ ) + for ( $j=0; $j<$cols; $j++ ) + { + list(,$len) = unpack ( "N*", substr ( $response, $p, 4 ) ); $p += 4; + $res[$i][] = substr ( $response, $p, $len ); $p += $len; + } + + $this->_MBPop (); + return $res; + } + + ////////////////////////////////////////////////////////////////////////// + // flush + ////////////////////////////////////////////////////////////////////////// + + function FlushAttributes () + { + $this->_MBPush (); + if (!( $fp = $this->_Connect() )) + { + $this->_MBPop(); + return -1; + } + + $req = pack ( "nnN", SEARCHD_COMMAND_FLUSHATTRS, VER_COMMAND_FLUSHATTRS, 0 ); // len=0 + if ( !( $this->_Send ( $fp, $req, 8 ) ) || + !( $response = $this->_GetResponse ( $fp, VER_COMMAND_FLUSHATTRS ) ) ) + { + $this->_MBPop (); + return -1; + } + + $tag = -1; + if ( strlen($response)==4 ) + list(,$tag) = unpack ( "N*", $response ); + else + $this->_error = "unexpected response length"; + + $this->_MBPop (); + return $tag; + } +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/api/sphinxapi.py b/coreseek/csft-4.1/api/sphinxapi.py new file mode 100755 index 0000000..b0ff486 --- /dev/null +++ b/coreseek/csft-4.1/api/sphinxapi.py @@ -0,0 +1,1114 @@ +# +# $Id$ +# +# Python version of Sphinx searchd client (Python API) +# +# Copyright (c) 2006, Mike Osadnik +# Copyright (c) 2006-2011, Andrew Aksyonoff +# Copyright (c) 2008-2011, Sphinx Technologies Inc +# All rights reserved +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License. You should have +# received a copy of the GPL license along with this program; if you +# did not, you can find it at http://www.gnu.org/ +# + +import sys +import select +import socket +import re +from struct import * + + +# known searchd commands +SEARCHD_COMMAND_SEARCH = 0 +SEARCHD_COMMAND_EXCERPT = 1 +SEARCHD_COMMAND_UPDATE = 2 +SEARCHD_COMMAND_KEYWORDS = 3 +SEARCHD_COMMAND_PERSIST = 4 +SEARCHD_COMMAND_STATUS = 5 +SEARCHD_COMMAND_FLUSHATTRS = 7 + +# current client-side command implementation versions +VER_COMMAND_SEARCH = 0x119 +VER_COMMAND_EXCERPT = 0x103 +VER_COMMAND_UPDATE = 0x102 +VER_COMMAND_KEYWORDS = 0x100 +VER_COMMAND_STATUS = 0x100 +VER_COMMAND_FLUSHATTRS = 0x100 + +# known searchd status codes +SEARCHD_OK = 0 +SEARCHD_ERROR = 1 +SEARCHD_RETRY = 2 +SEARCHD_WARNING = 3 + +# known match modes +SPH_MATCH_ALL = 0 +SPH_MATCH_ANY = 1 +SPH_MATCH_PHRASE = 2 +SPH_MATCH_BOOLEAN = 3 +SPH_MATCH_EXTENDED = 4 +SPH_MATCH_FULLSCAN = 5 +SPH_MATCH_EXTENDED2 = 6 + +# known ranking modes (extended2 mode only) +SPH_RANK_PROXIMITY_BM25 = 0 # default mode, phrase proximity major factor and BM25 minor one +SPH_RANK_BM25 = 1 # statistical mode, BM25 ranking only (faster but worse quality) +SPH_RANK_NONE = 2 # no ranking, all matches get a weight of 1 +SPH_RANK_WORDCOUNT = 3 # simple word-count weighting, rank is a weighted sum of per-field keyword occurence counts +SPH_RANK_PROXIMITY = 4 +SPH_RANK_MATCHANY = 5 +SPH_RANK_FIELDMASK = 6 +SPH_RANK_SPH04 = 7 +SPH_RANK_EXPR = 8 +SPH_RANK_TOTAL = 9 + +# known sort modes +SPH_SORT_RELEVANCE = 0 +SPH_SORT_ATTR_DESC = 1 +SPH_SORT_ATTR_ASC = 2 +SPH_SORT_TIME_SEGMENTS = 3 +SPH_SORT_EXTENDED = 4 +SPH_SORT_EXPR = 5 + +# known filter types +SPH_FILTER_VALUES = 0 +SPH_FILTER_RANGE = 1 +SPH_FILTER_FLOATRANGE = 2 + +# known attribute types +SPH_ATTR_NONE = 0 +SPH_ATTR_INTEGER = 1 +SPH_ATTR_TIMESTAMP = 2 +SPH_ATTR_ORDINAL = 3 +SPH_ATTR_BOOL = 4 +SPH_ATTR_FLOAT = 5 +SPH_ATTR_BIGINT = 6 +SPH_ATTR_STRING = 7 +SPH_ATTR_MULTI = 0X40000001L +SPH_ATTR_MULTI64 = 0X40000002L + +SPH_ATTR_TYPES = (SPH_ATTR_NONE, + SPH_ATTR_INTEGER, + SPH_ATTR_TIMESTAMP, + SPH_ATTR_ORDINAL, + SPH_ATTR_BOOL, + SPH_ATTR_FLOAT, + SPH_ATTR_BIGINT, + SPH_ATTR_STRING, + SPH_ATTR_MULTI, + SPH_ATTR_MULTI64) + +# known grouping functions +SPH_GROUPBY_DAY = 0 +SPH_GROUPBY_WEEK = 1 +SPH_GROUPBY_MONTH = 2 +SPH_GROUPBY_YEAR = 3 +SPH_GROUPBY_ATTR = 4 +SPH_GROUPBY_ATTRPAIR = 5 + + +class SphinxClient: + def __init__ (self): + """ + Create a new client object, and fill defaults. + """ + self._host = 'localhost' # searchd host (default is "localhost") + self._port = 9312 # searchd port (default is 9312) + self._path = None # searchd unix-domain socket path + self._socket = None + self._offset = 0 # how much records to seek from result-set start (default is 0) + self._limit = 20 # how much records to return from result-set starting at offset (default is 20) + self._mode = SPH_MATCH_ALL # query matching mode (default is SPH_MATCH_ALL) + self._weights = [] # per-field weights (default is 1 for all fields) + self._sort = SPH_SORT_RELEVANCE # match sorting mode (default is SPH_SORT_RELEVANCE) + self._sortby = '' # attribute to sort by (defualt is "") + self._min_id = 0 # min ID to match (default is 0) + self._max_id = 0 # max ID to match (default is UINT_MAX) + self._filters = [] # search filters + self._groupby = '' # group-by attribute name + self._groupfunc = SPH_GROUPBY_DAY # group-by function (to pre-process group-by attribute value with) + self._groupsort = '@group desc' # group-by sorting clause (to sort groups in result set with) + self._groupdistinct = '' # group-by count-distinct attribute + self._maxmatches = 1000 # max matches to retrieve + self._cutoff = 0 # cutoff to stop searching at + self._retrycount = 0 # distributed retry count + self._retrydelay = 0 # distributed retry delay + self._anchor = {} # geographical anchor point + self._indexweights = {} # per-index weights + self._ranker = SPH_RANK_PROXIMITY_BM25 # ranking mode + self._rankexpr = '' # ranking expression for SPH_RANK_EXPR + self._maxquerytime = 0 # max query time, milliseconds (default is 0, do not limit) + self._timeout = 1.0 # connection timeout + self._fieldweights = {} # per-field-name weights + self._overrides = {} # per-query attribute values overrides + self._select = '*' # select-list (attributes or expressions, with optional aliases) + + self._error = '' # last error message + self._warning = '' # last warning message + self._reqs = [] # requests array for multi-query + + def __del__ (self): + if self._socket: + self._socket.close() + + + def GetLastError (self): + """ + Get last error message (string). + """ + return self._error + + + def GetLastWarning (self): + """ + Get last warning message (string). + """ + return self._warning + + + def SetServer (self, host, port = None): + """ + Set searchd server host and port. + """ + assert(isinstance(host, str)) + if host.startswith('/'): + self._path = host + return + elif host.startswith('unix://'): + self._path = host[7:] + return + assert(isinstance(port, int)) + self._host = host + self._port = port + self._path = None + + def SetConnectTimeout ( self, timeout ): + """ + Set connection timeout ( float second ) + """ + assert (isinstance(timeout, float)) + # set timeout to 0 make connaection non-blocking that is wrong so timeout got clipped to reasonable minimum + self._timeout = max ( 0.001, timeout ) + + def _Connect (self): + """ + INTERNAL METHOD, DO NOT CALL. Connects to searchd server. + """ + if self._socket: + # we have a socket, but is it still alive? + sr, sw, _ = select.select ( [self._socket], [self._socket], [], 0 ) + + # this is how alive socket should look + if len(sr)==0 and len(sw)==1: + return self._socket + + # oops, looks like it was closed, lets reopen + self._socket.close() + self._socket = None + + try: + if self._path: + af = socket.AF_UNIX + addr = self._path + desc = self._path + else: + af = socket.AF_INET + addr = ( self._host, self._port ) + desc = '%s;%s' % addr + sock = socket.socket ( af, socket.SOCK_STREAM ) + sock.settimeout ( self._timeout ) + sock.connect ( addr ) + except socket.error, msg: + if sock: + sock.close() + self._error = 'connection to %s failed (%s)' % ( desc, msg ) + return + + v = unpack('>L', sock.recv(4)) + if v<1: + sock.close() + self._error = 'expected searchd protocol version, got %s' % v + return + + # all ok, send my version + sock.send(pack('>L', 1)) + return sock + + + def _GetResponse (self, sock, client_ver): + """ + INTERNAL METHOD, DO NOT CALL. Gets and checks response packet from searchd server. + """ + (status, ver, length) = unpack('>2HL', sock.recv(8)) + response = '' + left = length + while left>0: + chunk = sock.recv(left) + if chunk: + response += chunk + left -= len(chunk) + else: + break + + if not self._socket: + sock.close() + + # check response + read = len(response) + if not response or read!=length: + if length: + self._error = 'failed to read searchd response (status=%s, ver=%s, len=%s, read=%s)' \ + % (status, ver, length, read) + else: + self._error = 'received zero-sized searchd response' + return None + + # check status + if status==SEARCHD_WARNING: + wend = 4 + unpack ( '>L', response[0:4] )[0] + self._warning = response[4:wend] + return response[wend:] + + if status==SEARCHD_ERROR: + self._error = 'searchd error: '+response[4:] + return None + + if status==SEARCHD_RETRY: + self._error = 'temporary searchd error: '+response[4:] + return None + + if status!=SEARCHD_OK: + self._error = 'unknown status code %d' % status + return None + + # check version + if ver>8, ver&0xff, client_ver>>8, client_ver&0xff) + + return response + + + def SetLimits (self, offset, limit, maxmatches=0, cutoff=0): + """ + Set offset and count into result set, and optionally set max-matches and cutoff limits. + """ + assert ( type(offset) in [int,long] and 0<=offset<16777216 ) + assert ( type(limit) in [int,long] and 0=0) + self._offset = offset + self._limit = limit + if maxmatches>0: + self._maxmatches = maxmatches + if cutoff>=0: + self._cutoff = cutoff + + + def SetMaxQueryTime (self, maxquerytime): + """ + Set maximum query time, in milliseconds, per-index. 0 means 'do not limit'. + """ + assert(isinstance(maxquerytime,int) and maxquerytime>0) + self._maxquerytime = maxquerytime + + + def SetMatchMode (self, mode): + """ + Set matching mode. + """ + assert(mode in [SPH_MATCH_ALL, SPH_MATCH_ANY, SPH_MATCH_PHRASE, SPH_MATCH_BOOLEAN, SPH_MATCH_EXTENDED, SPH_MATCH_FULLSCAN, SPH_MATCH_EXTENDED2]) + self._mode = mode + + + def SetRankingMode ( self, ranker, rankexpr='' ): + """ + Set ranking mode. + """ + assert(ranker>=0 and ranker=0) + assert(isinstance(delay,int) and delay>=0) + self._retrycount = count + self._retrydelay = delay + + + def SetOverride (self, name, type, values): + assert(isinstance(name, str)) + assert(type in SPH_ATTR_TYPES) + assert(isinstance(values, dict)) + + self._overrides[name] = {'name': name, 'type': type, 'values': values} + + def SetSelect (self, select): + assert(isinstance(select, str)) + self._select = select + + + def ResetOverrides (self): + self._overrides = {} + + + def ResetFilters (self): + """ + Clear all filters (for multi-queries). + """ + self._filters = [] + self._anchor = {} + + + def ResetGroupBy (self): + """ + Clear groupby settings (for multi-queries). + """ + self._groupby = '' + self._groupfunc = SPH_GROUPBY_DAY + self._groupsort = '@group desc' + self._groupdistinct = '' + + + def Query (self, query, index='*', comment=''): + """ + Connect to searchd server and run given search query. + Returns None on failure; result set hash on success (see documentation for details). + """ + assert(len(self._reqs)==0) + self.AddQuery(query,index,comment) + results = self.RunQueries() + self._reqs = [] # we won't re-run erroneous batch + + if not results or len(results)==0: + return None + self._error = results[0]['error'] + self._warning = results[0]['warning'] + if results[0]['status'] == SEARCHD_ERROR: + return None + return results[0] + + + def AddQuery (self, query, index='*', comment=''): + """ + Add query to batch. + """ + # build request + req = [] + req.append(pack('>4L', self._offset, self._limit, self._mode, self._ranker)) + if self._ranker==SPH_RANK_EXPR: + req.append(pack('>L', len(self._rankexpr))) + req.append(self._rankexpr) + req.append(pack('>L', self._sort)) + req.append(pack('>L', len(self._sortby))) + req.append(self._sortby) + + if isinstance(query,unicode): + query = query.encode('utf-8') + assert(isinstance(query,str)) + + req.append(pack('>L', len(query))) + req.append(query) + + req.append(pack('>L', len(self._weights))) + for w in self._weights: + req.append(pack('>L', w)) + req.append(pack('>L', len(index))) + req.append(index) + req.append(pack('>L',1)) # id64 range marker + req.append(pack('>Q', self._min_id)) + req.append(pack('>Q', self._max_id)) + + # filters + req.append ( pack ( '>L', len(self._filters) ) ) + for f in self._filters: + req.append ( pack ( '>L', len(f['attr'])) + f['attr']) + filtertype = f['type'] + req.append ( pack ( '>L', filtertype)) + if filtertype == SPH_FILTER_VALUES: + req.append ( pack ('>L', len(f['values']))) + for val in f['values']: + req.append ( pack ('>q', val)) + elif filtertype == SPH_FILTER_RANGE: + req.append ( pack ('>2q', f['min'], f['max'])) + elif filtertype == SPH_FILTER_FLOATRANGE: + req.append ( pack ('>2f', f['min'], f['max'])) + req.append ( pack ( '>L', f['exclude'] ) ) + + # group-by, max-matches, group-sort + req.append ( pack ( '>2L', self._groupfunc, len(self._groupby) ) ) + req.append ( self._groupby ) + req.append ( pack ( '>2L', self._maxmatches, len(self._groupsort) ) ) + req.append ( self._groupsort ) + req.append ( pack ( '>LLL', self._cutoff, self._retrycount, self._retrydelay)) + req.append ( pack ( '>L', len(self._groupdistinct))) + req.append ( self._groupdistinct) + + # anchor point + if len(self._anchor) == 0: + req.append ( pack ('>L', 0)) + else: + attrlat, attrlong = self._anchor['attrlat'], self._anchor['attrlong'] + latitude, longitude = self._anchor['lat'], self._anchor['long'] + req.append ( pack ('>L', 1)) + req.append ( pack ('>L', len(attrlat)) + attrlat) + req.append ( pack ('>L', len(attrlong)) + attrlong) + req.append ( pack ('>f', latitude) + pack ('>f', longitude)) + + # per-index weights + req.append ( pack ('>L',len(self._indexweights))) + for indx,weight in self._indexweights.items(): + req.append ( pack ('>L',len(indx)) + indx + pack ('>L',weight)) + + # max query time + req.append ( pack ('>L', self._maxquerytime) ) + + # per-field weights + req.append ( pack ('>L',len(self._fieldweights) ) ) + for field,weight in self._fieldweights.items(): + req.append ( pack ('>L',len(field)) + field + pack ('>L',weight) ) + + # comment + req.append ( pack('>L',len(comment)) + comment ) + + # attribute overrides + req.append ( pack('>L', len(self._overrides)) ) + for v in self._overrides.values(): + req.extend ( ( pack('>L', len(v['name'])), v['name'] ) ) + req.append ( pack('>LL', v['type'], len(v['values'])) ) + for id, value in v['values'].iteritems(): + req.append ( pack('>Q', id) ) + if v['type'] == SPH_ATTR_FLOAT: + req.append ( pack('>f', value) ) + elif v['type'] == SPH_ATTR_BIGINT: + req.append ( pack('>q', value) ) + else: + req.append ( pack('>l', value) ) + + # select-list + req.append ( pack('>L', len(self._select)) ) + req.append ( self._select ) + + # send query, get response + req = ''.join(req) + + self._reqs.append(req) + return + + + def RunQueries (self): + """ + Run queries batch. + Returns None on network IO failure; or an array of result set hashes on success. + """ + if len(self._reqs)==0: + self._error = 'no queries defined, issue AddQuery() first' + return None + + sock = self._Connect() + if not sock: + return None + + req = ''.join(self._reqs) + length = len(req)+8 + req = pack('>HHLLL', SEARCHD_COMMAND_SEARCH, VER_COMMAND_SEARCH, length, 0, len(self._reqs))+req + sock.send(req) + + response = self._GetResponse(sock, VER_COMMAND_SEARCH) + if not response: + return None + + nreqs = len(self._reqs) + + # parse response + max_ = len(response) + p = 0 + + results = [] + for i in range(0,nreqs,1): + result = {} + results.append(result) + + result['error'] = '' + result['warning'] = '' + status = unpack('>L', response[p:p+4])[0] + p += 4 + result['status'] = status + if status != SEARCHD_OK: + length = unpack('>L', response[p:p+4])[0] + p += 4 + message = response[p:p+length] + p += length + + if status == SEARCHD_WARNING: + result['warning'] = message + else: + result['error'] = message + continue + + # read schema + fields = [] + attrs = [] + + nfields = unpack('>L', response[p:p+4])[0] + p += 4 + while nfields>0 and pL', response[p:p+4])[0] + p += 4 + fields.append(response[p:p+length]) + p += length + + result['fields'] = fields + + nattrs = unpack('>L', response[p:p+4])[0] + p += 4 + while nattrs>0 and pL', response[p:p+4])[0] + p += 4 + attr = response[p:p+length] + p += length + type_ = unpack('>L', response[p:p+4])[0] + p += 4 + attrs.append([attr,type_]) + + result['attrs'] = attrs + + # read match count + count = unpack('>L', response[p:p+4])[0] + p += 4 + id64 = unpack('>L', response[p:p+4])[0] + p += 4 + + # read matches + result['matches'] = [] + while count>0 and pQL', response[p:p+12]) + p += 12 + else: + doc, weight = unpack('>2L', response[p:p+8]) + p += 8 + + match = { 'id':doc, 'weight':weight, 'attrs':{} } + for i in range(len(attrs)): + if attrs[i][1] == SPH_ATTR_FLOAT: + match['attrs'][attrs[i][0]] = unpack('>f', response[p:p+4])[0] + elif attrs[i][1] == SPH_ATTR_BIGINT: + match['attrs'][attrs[i][0]] = unpack('>q', response[p:p+8])[0] + p += 4 + elif attrs[i][1] == SPH_ATTR_STRING: + slen = unpack('>L', response[p:p+4])[0] + p += 4 + match['attrs'][attrs[i][0]] = '' + if slen>0: + match['attrs'][attrs[i][0]] = response[p:p+slen] + p += slen-4 + elif attrs[i][1] == SPH_ATTR_MULTI: + match['attrs'][attrs[i][0]] = [] + nvals = unpack('>L', response[p:p+4])[0] + p += 4 + for n in range(0,nvals,1): + match['attrs'][attrs[i][0]].append(unpack('>L', response[p:p+4])[0]) + p += 4 + p -= 4 + elif attrs[i][1] == SPH_ATTR_MULTI64: + match['attrs'][attrs[i][0]] = [] + nvals = unpack('>L', response[p:p+4])[0] + nvals = nvals/2 + p += 4 + for n in range(0,nvals,1): + match['attrs'][attrs[i][0]].append(unpack('>q', response[p:p+8])[0]) + p += 8 + p -= 4 + else: + match['attrs'][attrs[i][0]] = unpack('>L', response[p:p+4])[0] + p += 4 + + result['matches'].append ( match ) + + result['total'], result['total_found'], result['time'], words = unpack('>4L', response[p:p+16]) + + result['time'] = '%.3f' % (result['time']/1000.0) + p += 16 + + result['words'] = [] + while words>0: + words -= 1 + length = unpack('>L', response[p:p+4])[0] + p += 4 + word = response[p:p+length] + p += length + docs, hits = unpack('>2L', response[p:p+8]) + p += 8 + + result['words'].append({'word':word, 'docs':docs, 'hits':hits}) + + self._reqs = [] + return results + + + def BuildExcerpts (self, docs, index, words, opts=None): + """ + Connect to searchd server and generate exceprts from given documents. + """ + if not opts: + opts = {} + if isinstance(words,unicode): + words = words.encode('utf-8') + + assert(isinstance(docs, list)) + assert(isinstance(index, str)) + assert(isinstance(words, str)) + assert(isinstance(opts, dict)) + + sock = self._Connect() + + if not sock: + return None + + # fixup options + opts.setdefault('before_match', '') + opts.setdefault('after_match', '') + opts.setdefault('chunk_separator', ' ... ') + opts.setdefault('html_strip_mode', 'index') + opts.setdefault('limit', 256) + opts.setdefault('limit_passages', 0) + opts.setdefault('limit_words', 0) + opts.setdefault('around', 5) + opts.setdefault('start_passage_id', 1) + opts.setdefault('passage_boundary', 'none') + + # build request + # v.1.0 req + + flags = 1 # (remove spaces) + if opts.get('exact_phrase'): flags |= 2 + if opts.get('single_passage'): flags |= 4 + if opts.get('use_boundaries'): flags |= 8 + if opts.get('weight_order'): flags |= 16 + if opts.get('query_mode'): flags |= 32 + if opts.get('force_all_words'): flags |= 64 + if opts.get('load_files'): flags |= 128 + if opts.get('allow_empty'): flags |= 256 + if opts.get('emit_zones'): flags |= 256 + + # mode=0, flags + req = [pack('>2L', 0, flags)] + + # req index + req.append(pack('>L', len(index))) + req.append(index) + + # req words + req.append(pack('>L', len(words))) + req.append(words) + + # options + req.append(pack('>L', len(opts['before_match']))) + req.append(opts['before_match']) + + req.append(pack('>L', len(opts['after_match']))) + req.append(opts['after_match']) + + req.append(pack('>L', len(opts['chunk_separator']))) + req.append(opts['chunk_separator']) + + req.append(pack('>L', int(opts['limit']))) + req.append(pack('>L', int(opts['around']))) + + req.append(pack('>L', int(opts['limit_passages']))) + req.append(pack('>L', int(opts['limit_words']))) + req.append(pack('>L', int(opts['start_passage_id']))) + req.append(pack('>L', len(opts['html_strip_mode']))) + req.append((opts['html_strip_mode'])) + req.append(pack('>L', len(opts['passage_boundary']))) + req.append((opts['passage_boundary'])) + + # documents + req.append(pack('>L', len(docs))) + for doc in docs: + if isinstance(doc,unicode): + doc = doc.encode('utf-8') + assert(isinstance(doc, str)) + req.append(pack('>L', len(doc))) + req.append(doc) + + req = ''.join(req) + + # send query, get response + length = len(req) + + # add header + req = pack('>2HL', SEARCHD_COMMAND_EXCERPT, VER_COMMAND_EXCERPT, length)+req + wrote = sock.send(req) + + response = self._GetResponse(sock, VER_COMMAND_EXCERPT ) + if not response: + return [] + + # parse response + pos = 0 + res = [] + rlen = len(response) + + for i in range(len(docs)): + length = unpack('>L', response[pos:pos+4])[0] + pos += 4 + + if pos+length > rlen: + self._error = 'incomplete reply' + return [] + + res.append(response[pos:pos+length]) + pos += length + + return res + + + def UpdateAttributes ( self, index, attrs, values, mva=False ): + """ + Update given attribute values on given documents in given indexes. + Returns amount of updated documents (0 or more) on success, or -1 on failure. + + 'attrs' must be a list of strings. + 'values' must be a dict with int key (document ID) and list of int values (new attribute values). + optional boolean parameter 'mva' points that there is update of MVA attributes. + In this case the 'values' must be a dict with int key (document ID) and list of lists of int values + (new MVA attribute values). + + Example: + res = cl.UpdateAttributes ( 'test1', [ 'group_id', 'date_added' ], { 2:[123,1000000000], 4:[456,1234567890] } ) + """ + assert ( isinstance ( index, str ) ) + assert ( isinstance ( attrs, list ) ) + assert ( isinstance ( values, dict ) ) + for attr in attrs: + assert ( isinstance ( attr, str ) ) + for docid, entry in values.items(): + AssertUInt32(docid) + assert ( isinstance ( entry, list ) ) + assert ( len(attrs)==len(entry) ) + for val in entry: + if mva: + assert ( isinstance ( val, list ) ) + for vals in val: + AssertInt32(vals) + else: + AssertInt32(val) + + # build request + req = [ pack('>L',len(index)), index ] + + req.append ( pack('>L',len(attrs)) ) + mva_attr = 0 + if mva: mva_attr = 1 + for attr in attrs: + req.append ( pack('>L',len(attr)) + attr ) + req.append ( pack('>L', mva_attr ) ) + + req.append ( pack('>L',len(values)) ) + for docid, entry in values.items(): + req.append ( pack('>Q',docid) ) + for val in entry: + val_len = val + if mva: val_len = len ( val ) + req.append ( pack('>L',val_len ) ) + if mva: + for vals in val: + req.append ( pack ('>L',vals) ) + + # connect, send query, get response + sock = self._Connect() + if not sock: + return None + + req = ''.join(req) + length = len(req) + req = pack ( '>2HL', SEARCHD_COMMAND_UPDATE, VER_COMMAND_UPDATE, length ) + req + wrote = sock.send ( req ) + + response = self._GetResponse ( sock, VER_COMMAND_UPDATE ) + if not response: + return -1 + + # parse response + updated = unpack ( '>L', response[0:4] )[0] + return updated + + + def BuildKeywords ( self, query, index, hits ): + """ + Connect to searchd server, and generate keywords list for a given query. + Returns None on failure, or a list of keywords on success. + """ + assert ( isinstance ( query, str ) ) + assert ( isinstance ( index, str ) ) + assert ( isinstance ( hits, int ) ) + + # build request + req = [ pack ( '>L', len(query) ) + query ] + req.append ( pack ( '>L', len(index) ) + index ) + req.append ( pack ( '>L', hits ) ) + + # connect, send query, get response + sock = self._Connect() + if not sock: + return None + + req = ''.join(req) + length = len(req) + req = pack ( '>2HL', SEARCHD_COMMAND_KEYWORDS, VER_COMMAND_KEYWORDS, length ) + req + wrote = sock.send ( req ) + + response = self._GetResponse ( sock, VER_COMMAND_KEYWORDS ) + if not response: + return None + + # parse response + res = [] + + nwords = unpack ( '>L', response[0:4] )[0] + p = 4 + max_ = len(response) + + while nwords>0 and pL', response[p:p+4] )[0] + p += 4 + tokenized = response[p:p+length] + p += length + + length = unpack ( '>L', response[p:p+4] )[0] + p += 4 + normalized = response[p:p+length] + p += length + + entry = { 'tokenized':tokenized, 'normalized':normalized } + if hits: + entry['docs'], entry['hits'] = unpack ( '>2L', response[p:p+8] ) + p += 8 + + res.append ( entry ) + + if nwords>0 or p>max_: + self._error = 'incomplete reply' + return None + + return res + + def Status ( self ): + """ + Get the status + """ + + # connect, send query, get response + sock = self._Connect() + if not sock: + return None + + req = pack ( '>2HLL', SEARCHD_COMMAND_STATUS, VER_COMMAND_STATUS, 4, 1 ) + wrote = sock.send ( req ) + + response = self._GetResponse ( sock, VER_COMMAND_STATUS ) + if not response: + return None + + # parse response + res = [] + + p = 8 + max_ = len(response) + + while pL', response[p:p+4] )[0] + k = response[p+4:p+length+4] + p += 4+length + length = unpack ( '>L', response[p:p+4] )[0] + v = response[p+4:p+length+4] + p += 4+length + res += [[k, v]] + + return res + + ### persistent connections + + def Open(self): + if self._socket: + self._error = 'already connected' + return None + + server = self._Connect() + if not server: + return None + + # command, command version = 0, body length = 4, body = 1 + request = pack ( '>hhII', SEARCHD_COMMAND_PERSIST, 0, 4, 1 ) + server.send ( request ) + + self._socket = server + return True + + def Close(self): + if not self._socket: + self._error = 'not connected' + return + self._socket.close() + self._socket = None + + def EscapeString(self, string): + return re.sub(r"([=\(\)|\-!@~\"&/\\\^\$\=])", r"\\\1", string) + + + def FlushAttributes(self): + sock = self._Connect() + if not sock: + return -1 + + request = pack ( '>hhI', SEARCHD_COMMAND_FLUSHATTRS, VER_COMMAND_FLUSHATTRS, 0 ) # cmd, ver, bodylen + sock.send ( request ) + + response = self._GetResponse ( sock, VER_COMMAND_FLUSHATTRS ) + if not response or len(response)!=4: + self._error = 'unexpected response length' + return -1 + + tag = unpack ( '>L', response[0:4] )[0] + return tag + +def AssertInt32 ( value ): + assert(isinstance(value, (int, long))) + assert(value>=-2**32-1 and value<=2**32-1) + +def AssertUInt32 ( value ): + assert(isinstance(value, (int, long))) + assert(value>=0 and value<=2**32-1) + +# +# $Id$ +# diff --git a/coreseek/csft-4.1/api/test.php b/coreseek/csft-4.1/api/test.php new file mode 100755 index 0000000..a0d89e4 --- /dev/null +++ b/coreseek/csft-4.1/api/test.php @@ -0,0 +1,169 @@ +\tconnect to searchd at host HOST\n" ); + print ( "-p, --port\t\tconnect to searchd at port PORT\n" ); + print ( "-i, --index \tsearch through index(es) specified by IDX\n" ); + print ( "-s, --sortby \tsort matches by 'CLAUSE' in sort_extended mode\n" ); + print ( "-S, --sortexpr \tsort matches by 'EXPR' DESC in sort_expr mode\n" ); + print ( "-a, --any\t\tuse 'match any word' matching mode\n" ); + print ( "-b, --boolean\t\tuse 'boolean query' matching mode\n" ); + print ( "-e, --extended\t\tuse 'extended query' matching mode\n" ); + print ( "-ph,--phrase\t\tuse 'exact phrase' matching mode\n" ); + print ( "-f, --filter \tfilter by attribute 'ATTR' (default is 'group_id')\n" ); + print ( "-fr,--filterrange \n\t\t\tadd specified range filter\n" ); + print ( "-v, --value \tadd VAL to allowed 'group_id' values list\n" ); + print ( "-g, --groupby \tgroup matches by 'EXPR'\n" ); + print ( "-gs,--groupsort \tsort groups by 'EXPR'\n" ); + print ( "-d, --distinct \tcount distinct values of 'ATTR''\n" ); + print ( "-l, --limit \tretrieve COUNT matches (default: 20)\n" ); + print ( "--select \tuse 'EXPRLIST' as select-list (default: *)\n" ); + exit; +} + +$args = array(); +foreach ( $_SERVER["argv"] as $arg ) + $args[] = $arg; + +$cl = new SphinxClient (); + +$q = ""; +$sql = ""; +$mode = SPH_MATCH_ALL; +$host = "localhost"; +$port = 9312; +$index = "*"; +$groupby = ""; +$groupsort = "@group desc"; +$filter = "group_id"; +$filtervals = array(); +$distinct = ""; +$sortby = ""; +$sortexpr = ""; +$limit = 20; +$ranker = SPH_RANK_PROXIMITY_BM25; +$select = ""; +for ( $i=0; $iSetFilterRange ( $args[++$i], $args[++$i], $args[++$i] ); + else if ( $arg=="-r" ) + { + $arg = strtolower($args[++$i]); + if ( $arg=="bm25" ) $ranker = SPH_RANK_BM25; + if ( $arg=="none" ) $ranker = SPH_RANK_NONE; + if ( $arg=="wordcount" )$ranker = SPH_RANK_WORDCOUNT; + if ( $arg=="fieldmask" )$ranker = SPH_RANK_FIELDMASK; + if ( $arg=="sph04" ) $ranker = SPH_RANK_SPH04; + } + else + $q .= $args[$i] . " "; +} + +//////////// +// do query +//////////// + +$cl->SetServer ( $host, $port ); +$cl->SetConnectTimeout ( 1 ); +$cl->SetArrayResult ( true ); +$cl->SetWeights ( array ( 100, 1 ) ); +$cl->SetMatchMode ( $mode ); +if ( count($filtervals) ) $cl->SetFilter ( $filter, $filtervals ); +if ( $groupby ) $cl->SetGroupBy ( $groupby, SPH_GROUPBY_ATTR, $groupsort ); +if ( $sortby ) $cl->SetSortMode ( SPH_SORT_EXTENDED, $sortby ); +if ( $sortexpr ) $cl->SetSortMode ( SPH_SORT_EXPR, $sortexpr ); +if ( $distinct ) $cl->SetGroupDistinct ( $distinct ); +if ( $select ) $cl->SetSelect ( $select ); +if ( $limit ) $cl->SetLimits ( 0, $limit, ( $limit>1000 ) ? $limit : 1000 ); +$cl->SetRankingMode ( $ranker ); +$res = $cl->Query ( $q, $index ); + +//////////////// +// print me out +//////////////// + +if ( $res===false ) +{ + print "Query failed: " . $cl->GetLastError() . ".\n"; + +} else +{ + if ( $cl->GetLastWarning() ) + print "WARNING: " . $cl->GetLastWarning() . "\n\n"; + + print "Query '$q' retrieved $res[total] of $res[total_found] matches in $res[time] sec.\n"; + print "Query stats:\n"; + if ( is_array($res["words"]) ) + foreach ( $res["words"] as $word => $info ) + print " '$word' found $info[hits] times in $info[docs] documents\n"; + print "\n"; + + if ( is_array($res["matches"]) ) + { + $n = 1; + print "Matches:\n"; + foreach ( $res["matches"] as $docinfo ) + { + print "$n. doc_id=$docinfo[id], weight=$docinfo[weight]"; + foreach ( $res["attrs"] as $attrname => $attrtype ) + { + $value = $docinfo["attrs"][$attrname]; + if ( $attrtype==SPH_ATTR_MULTI || $attrtype==SPH_ATTR_MULTI64 ) + { + $value = "(" . join ( ",", $value ) .")"; + } else + { + if ( $attrtype==SPH_ATTR_TIMESTAMP ) + $value = date ( "Y-m-d H:i:s", $value ); + } + print ", $attrname=$value"; + } + print "\n"; + $n++; + } + } +} + +// +// $Id$ +// + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/test.py b/coreseek/csft-4.1/api/test.py new file mode 100755 index 0000000..1741e29 --- /dev/null +++ b/coreseek/csft-4.1/api/test.py @@ -0,0 +1,124 @@ +# +# $Id$ +# + +from sphinxapi import * +import sys, time + +if not sys.argv[1:]: + print "Usage: python test.py [OPTIONS] query words\n" + print "Options are:" + print "-h, --host \tconnect to searchd at host HOST" + print "-p, --port\t\tconnect to searchd at port PORT" + print "-i, --index \tsearch through index(es) specified by IDX" + print "-s, --sortby \tsort matches by 'EXPR'" + print "-a, --any\t\tuse 'match any word' matching mode" + print "-b, --boolean\t\tuse 'boolean query' matching mode" + print "-e, --extended\t\tuse 'extended query' matching mode" + print "-f, --filter \tfilter by attribute 'ATTR' (default is 'group_id')" + print "-v, --value \tadd VAL to allowed 'group_id' values list" + print "-g, --groupby \tgroup matches by 'EXPR'" + print "-gs,--groupsort \tsort groups by 'EXPR'" + print "-l, --limit \tretrieve COUNT matches (default is 20)" + sys.exit(0) + +q = '' +mode = SPH_MATCH_ALL +host = 'localhost' +port = 9312 +index = '*' +filtercol = 'group_id' +filtervals = [] +sortby = '' +groupby = '' +groupsort = '@group desc' +limit = 0 + +i = 1 +while (i "", + "after_match" => "", + "chunk_separator" => " ... ", + "limit" => 60, + "around" => 3, +); + +foreach ( array(0,1) as $exact ) +{ + $opts["exact_phrase"] = $exact; + print "exact_phrase=$exact\n"; + + $cl = new SphinxClient (); + $res = $cl->BuildExcerpts ( $docs, $index, $words, $opts ); + if ( !$res ) + { + die ( "ERROR: " . $cl->GetLastError() . ".\n" ); + } else + { + $n = 0; + foreach ( $res as $entry ) + { + $n++; + print "n=$n, res=$entry\n"; + } + print "\n"; + } +} + +// +// $Id$ +// + +?> \ No newline at end of file diff --git a/coreseek/csft-4.1/api/test2.py b/coreseek/csft-4.1/api/test2.py new file mode 100755 index 0000000..e330ba4 --- /dev/null +++ b/coreseek/csft-4.1/api/test2.py @@ -0,0 +1,27 @@ +# +# $Id$ +# + +from sphinxapi import * +import sys + +docs = ['this is my test text to be highlighted','this is another test text to be highlighted'] +words = 'test text' +index = 'test1' + +opts = {'before_match':'', 'after_match':'', 'chunk_separator':' ... ', 'limit':400, 'around':15} + +cl = SphinxClient() +res = cl.BuildExcerpts(docs, index, words, opts) + +if not res: + print 'ERROR:', cl.GetLastError() +else: + n = 0 + for entry in res: + n += 1 + print 'n=%d, res=%s' % (n, entry) + +# +# $Id$ +# diff --git a/coreseek/csft-4.1/autom4te.cache/output.0 b/coreseek/csft-4.1/autom4te.cache/output.0 new file mode 100644 index 0000000..acdcb40 --- /dev/null +++ b/coreseek/csft-4.1/autom4te.cache/output.0 @@ -0,0 +1,7694 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.68 for sphinx 1.11. +@%:@ +@%:@ Report bugs to . +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in @%:@ (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: shodan(at)shodan.ru about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +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='mkdir -p "$as_dir"' +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'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='sphinx' +PACKAGE_TARNAME='sphinx' +PACKAGE_VERSION='1.11' +PACKAGE_STRING='sphinx 1.11' +PACKAGE_BUGREPORT='shodan(at)shodan.ru' +PACKAGE_URL='' + +ac_unique_file="src/searchd.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='LTLIBOBJS +CONFDIR +MMSEG_CFLAGS +MMSEG_LIBS +PGSQL_CFLAGS +PGSQL_LIBS +MYSQL_CFLAGS +MYSQL_LIBS +LIBRT +LIB@&t@OBJS +EGREP +GREP +CPP +PYTHON_LIBS +PYTHON_CPPFLAGS +PYTHON +RANLIB +ac_ct_CXX +CXXFLAGS +CXX +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +with_debug +with_python +with_mysql +with_static_mysql +with_pgsql +with_mmseg +enable_id64 +with_libstemmer +with_iconv +with_unixodbc +with_syslog +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +PYTHON +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_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'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_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 .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures sphinx 1.11 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 + @<:@@S|@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/sphinx@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of sphinx 1.11:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-id64 use 64-bit document and word IDs (default is no) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-debug compile slower debug version (default is disabled) + --with-python Embedded Python datasource support @<:@no@:>@ + --with-mysql compile with MySQL support (default is enabled) + --with-static-mysql link statically with MySQL library (default is no) + --with-pgsql compile with PostgreSQL support (default is + disabled) + --with-mmseg compile with libmmseg, a mmseg Chinese Segmenter + support (default is enabled) + --with-libstemmer compile with libstemmer support (default is + disabled) + --with-iconv compile with iconv support (default is autodetect) + --with-unixodbc compile with UnixODBC support (default is + autodetect) + --with-syslog compile with possibility to use syslog for logging + (default is no) + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + PYTHON Location of Python interpretor + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + $as_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 +sphinx configure 1.11 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ---------------------------------- ## +## Report this to shodan(at)shodan.ru ## +## ---------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_mongrel + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES +@%:@ ------------------------------------------- +@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache +@%:@ variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +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 +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_type + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_run LINENO +@%:@ ------------------------ +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_run +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 sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. 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=. + $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_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'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > 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 + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in @%:@(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_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,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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 + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_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. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + +SPHINX_CONFIGURE_PART(checking build environment) + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +AM_INIT_AUTOMAKE(-Wall -Werror foreign) +AM_MAINTAINER_MODE +AM_PATH_PYTHON + +ac_config_headers="$ac_config_headers config/config.h" + + +# hack to locate expat/iconv in /usr/local on BSD systems +CPPFLAGS="$CPPFLAGS -I/usr/local/include" +LIBS="$LIBS -L/usr/local/lib" + + +SPHINX_CONFIGURE_PART(checking for compiler programs) + + +@%:@ Check whether --with-debug was given. +if test "${with_debug+set}" = set; then : + withval=$with_debug; ac_cv_use_debug=$withval +else + ac_cv_use_debug=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile debug version" >&5 +$as_echo_n "checking whether to compile debug version... " >&6; } +if test x$ac_cv_use_debug != xno; then + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +if test x$ac_env_CFLAGS_set != xset; then + CFLAGS=$SPHINX_CFLAGS +else + CFLAGS="$CFLAGS $SPHINX_INJECT_FLAGS" +fi + +if test x$ac_env_CXXFLAGS_set != xset; then + CXXFLAGS=$SPHINX_CFLAGS +else + CXXFLAGS="$CXXFLAGS $SPHINX_INJECT_FLAGS" +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+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 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$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 + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + + +@%:@ Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; case $withval in + yes) USE_PYTHON=DO + +$as_echo "@%:@define USE_PYTHON 1" >>confdefs.h + + ;; + no) USE_PYTHON=DONT ;; + *) as_fn_error $? "invalid argument to --with-python" "$LINENO" 5 ;; + esac +else + USE_PYTHON=DONT +fi + + +if test x"$USE_PYTHON" = xDO ; then + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test x"${PYTHON}" = x ; then + as_fn_error $? "python was not found in path and is required" "$LINENO" 5 +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python linkage" >&5 +$as_echo_n "checking for Python linkage... " >&6; } + py_prefix=`$PYTHON -c 'import sys; print sys.prefix'` + py_ver=`$PYTHON -c 'import sys; print sys.version[:3]'` + py_libdir="$py_prefix/lib/python$py_ver" + PYTHON_CPPFLAGS="-I$py_prefix/include/python$py_ver" + py_linkage="" + for py_linkpart in LIBS LIBC LIBM LOCALMODLIBS BASEMODLIBS \ + LINKFORSHARED LDFLAGS ; do + py_linkage="$py_linkage "`grep "^${py_linkpart}=" \ + $py_libdir/config/Makefile \ + | sed -e 's/^.*=//'` + done + PYTHON_LIBS="-L$py_libdir/config -lpython$py_ver " + PYTHON_LIBS=`echo $PYTHON_LIBS | sed -e 's/ \\t*/ /g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $py_libdir" >&5 +$as_echo "$py_libdir" >&6; } +else + PYTHON_CPPFLAGS= + PYTHON_LIBS= +fi + + + + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __GNUC__ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3) +void main() {} +#else +syntax error +#endif +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + as_fn_error $? "Gcc version error. Minspec is 3.4" "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +cat >>confdefs.h <<_ACEOF +@%:@define COMPILER "$CC `$CC -dumpversion`" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define OS_UNAME "`uname -a`" +_ACEOF + + + +SPHINX_CONFIGURE_PART(checking for header files) + +# Checks for header files. +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "@%:@define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/file.h sys/socket.h sys/time.h unistd.h pthread.h execinfo.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_fn_c_check_header_mongrel "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default" +if test "x$ac_cv_header_expat_h" = xyes; then : + have_expat_h=yes +else + have_expat_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" +if test "x$ac_cv_header_iconv_h" = xyes; then : + have_iconv_h=yes +else + have_iconv_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + have_zlib_h=yes +else + have_zlib_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "sql.h" "ac_cv_header_sql_h" "$ac_includes_default" +if test "x$ac_cv_header_sql_h" = xyes; then : + have_sql_h=yes +else + have_sql_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" +if test "x$ac_cv_header_syslog_h" = xyes; then : + have_syslog_h=yes +else + have_syslog_h=no +fi + + + + +SPHINX_CONFIGURE_PART(checking for types) + +# Checks for typedefs, structures, and compiler characteristics. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } +ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE__BOOL 1 +_ACEOF + + +fi + +if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "@%:@define HAVE_STDBOOL_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "@%:@define const /**/" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define off_t long int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define size_t unsigned int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if ${ac_cv_header_time+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +$as_echo "@%:@define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi + + + +SPHINX_CONFIGURE_PART(checking for library functions) + +# Checks for library functions. +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define pid_t int +_ACEOF + +fi + +for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if ${ac_cv_func_fork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if ${ac_cv_func_vfork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include +#ifdef HAVE_VFORK_H +# include +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include , but some compilers + (e.g. gcc -O) don't grok . Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "@%:@define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "@%:@define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "@%:@define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "@%:@define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "@%:@define HAVE_MALLOC 0" >>confdefs.h + + case " $LIB@&t@OBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "@%:@define malloc rpl_malloc" >>confdefs.h + +fi + + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 +$as_echo_n "checking for GNU libc compatible realloc... " >&6; } +if ${ac_cv_func_realloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_realloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *realloc (); +#endif + +int +main () +{ +return ! realloc (0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_realloc_0_nonnull=yes +else + ac_cv_func_realloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } +if test $ac_cv_func_realloc_0_nonnull = yes; then : + +$as_echo "@%:@define HAVE_REALLOC 1" >>confdefs.h + +else + $as_echo "@%:@define HAVE_REALLOC 0" >>confdefs.h + + case " $LIB@&t@OBJS " in + *" realloc.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS realloc.$ac_objext" + ;; +esac + + +$as_echo "@%:@define realloc rpl_realloc" >>confdefs.h + +fi + + +for ac_header in sys/select.h sys/socket.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 +$as_echo_n "checking types of arguments for select... " >&6; } +if ${ac_cv_func_select_args+:} false; then : + $as_echo_n "(cached) " >&6 +else + for ac_arg234 in 'fd_set *' 'int *' 'void *'; do + for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do + for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#ifdef HAVE_SYS_SELECT_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif + +int +main () +{ +extern int select ($ac_arg1, + $ac_arg234, $ac_arg234, $ac_arg234, + $ac_arg5); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + done +done +# Provide a safe default value. +: "${ac_cv_func_select_args=int,int *,struct timeval *}" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 +$as_echo "$ac_cv_func_select_args" >&6; } +ac_save_IFS=$IFS; IFS=',' +set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` +IFS=$ac_save_IFS +shift + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG1 $1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG234 ($2) +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG5 ($3) +_ACEOF + +rm -f conftest* + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +$as_echo_n "checking return type of signal handlers... " >&6; } +if ${ac_cv_type_signal+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_signal=int +else + ac_cv_type_signal=void +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +$as_echo "$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +@%:@define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +@%:@define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIB@&t@OBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS lstat.$ac_objext" + ;; +esac + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 +$as_echo_n "checking whether stat accepts an empty string... " >&6; } +if ${ac_cv_func_stat_empty_string_bug+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_stat_empty_string_bug=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + return stat ("", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_stat_empty_string_bug=no +else + ac_cv_func_stat_empty_string_bug=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 +$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } +if test $ac_cv_func_stat_empty_string_bug = yes; then + case " $LIB@&t@OBJS " in + *" stat.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS stat.$ac_objext" + ;; +esac + + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STAT_EMPTY_STRING_BUG 1 +_ACEOF + +fi + +for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VPRINTF 1 +_ACEOF + +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = xyes; then : + +$as_echo "@%:@define HAVE_DOPRNT 1" >>confdefs.h + +fi + +fi +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 +$as_echo_n "checking for library containing setsockopt... " >&6; } +if ${ac_cv_search_setsockopt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char setsockopt (); +int +main () +{ +return setsockopt (); + ; + return 0; +} +_ACEOF +for ac_lib in '' socket; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_setsockopt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_setsockopt+:} false; then : + break +fi +done +if ${ac_cv_search_setsockopt+:} false; then : + +else + ac_cv_search_setsockopt=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5 +$as_echo "$ac_cv_search_setsockopt" >&6; } +ac_res=$ac_cv_search_setsockopt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5 +$as_echo_n "checking for library containing gethostbyname... " >&6; } +if ${ac_cv_search_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +for ac_lib in '' nsl socket resolv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gethostbyname=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_gethostbyname+:} false; then : + break +fi +done +if ${ac_cv_search_gethostbyname+:} false; then : + +else + ac_cv_search_gethostbyname=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 +$as_echo "$ac_cv_search_gethostbyname" >&6; } +ac_res=$ac_cv_search_gethostbyname +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XML_Parse" >&5 +$as_echo_n "checking for library containing XML_Parse... " >&6; } +if ${ac_cv_search_XML_Parse+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XML_Parse (); +int +main () +{ +return XML_Parse (); + ; + return 0; +} +_ACEOF +for ac_lib in '' expat; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_XML_Parse=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_XML_Parse+:} false; then : + break +fi +done +if ${ac_cv_search_XML_Parse+:} false; then : + +else + ac_cv_search_XML_Parse=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XML_Parse" >&5 +$as_echo "$ac_cv_search_XML_Parse" >&6; } +ac_res=$ac_cv_search_XML_Parse +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libexpat=yes +else + have_libexpat=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv" >&5 +$as_echo_n "checking for library containing iconv... " >&6; } +if ${ac_cv_search_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char iconv (); +int +main () +{ +return iconv (); + ; + return 0; +} +_ACEOF +for ac_lib in '' iconv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_iconv=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_iconv+:} false; then : + break +fi +done +if ${ac_cv_search_iconv+:} false; then : + +else + ac_cv_search_iconv=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv" >&5 +$as_echo "$ac_cv_search_iconv" >&6; } +ac_res=$ac_cv_search_iconv +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libiconv=yes +else + have_libiconv=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflate" >&5 +$as_echo_n "checking for library containing inflate... " >&6; } +if ${ac_cv_search_inflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflate (); +int +main () +{ +return inflate (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_inflate=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_inflate+:} false; then : + break +fi +done +if ${ac_cv_search_inflate+:} false; then : + +else + ac_cv_search_inflate=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflate" >&5 +$as_echo "$ac_cv_search_inflate" >&6; } +ac_res=$ac_cv_search_inflate +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_lz=yes +else + have_lz=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing logf" >&5 +$as_echo_n "checking for library containing logf... " >&6; } +if ${ac_cv_search_logf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char logf (); +int +main () +{ +return logf (); + ; + return 0; +} +_ACEOF +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_logf=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_logf+:} false; then : + break +fi +done +if ${ac_cv_search_logf+:} false; then : + +else + ac_cv_search_logf=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_logf" >&5 +$as_echo "$ac_cv_search_logf" >&6; } +ac_res=$ac_cv_search_logf +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +for ac_func in dup2 gethostbyname gettimeofday memmove memset select socket strcasecmp strchr strerror strncasecmp strstr strtol logf pread +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +for ac_func in backtrace backtrace_symbols +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# most systems require the program be linked with librt library to use +# the function clock_gettime +my_save_LIBS="$LIBS" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_clock_gettime=yes +else + ac_cv_lib_rt_clock_gettime=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBRT 1 +_ACEOF + + LIBS="-lrt $LIBS" + +fi + + +LIBRT=$LIBS +LIBS="$my_save_LIBS" + + +LIBS="$LIBS $LIBRT" +for ac_func in clock_gettime +do : + ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" +if test "x$ac_cv_func_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_CLOCK_GETTIME 1 +_ACEOF + +fi +done + + +SPHINX_CHECK_DEFINE(LOCK_EX,sys/file.h) +SPHINX_CHECK_DEFINE(F_SETLKW,fcntl.h) + +# check for dlopen +# FIXME! technically, only needed in searchd +# but as UDF manager is curently in libsphinx, we link everything +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +for ac_func in dlopen dlerror +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + +SPHINX_CONFIGURE_PART(configuring Sphinx) + + +# check for pthreads + +pthread_prog=" +#include +#include + +void * thread_routine ( void * data ) +{ + return data; +} + +int main () +{ + pthread_t thd; + pthread_mutexattr_t mattr; + pthread_once_t once_init = PTHREAD_ONCE_INIT; + int data = 1; + + pthread_mutexattr_init ( &mattr ); + return pthread_create ( &thd, NULL, thread_routine, &data ); +} +" + + + + + + +# check for needed cflags +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLAGS needed for pthreads" >&5 +$as_echo_n "checking for CFLAGS needed for pthreads... " >&6; } +if ${sphinx_cv_pthreads_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else + + save_cflags=$CFLAGS + for flag in none -kthread -pthread -pthreads -mt -mthreads -Kthread -threads; do + CFLAGS=$save_cflags + test "x$flag" != "xnone" && CFLAGS="$CFLAGS $flag" + +if test x$cross_compiling = xno ; then + if test "$cross_compiling" = yes; then : + pthreads_try_run=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + pthreads_try_run=yes +else + pthreads_try_run=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$pthreads_try_run = xyes ; then + + sphinx_cv_pthreads_cflags="$flag" + break + + fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + pthreads_try_compile=yes +else + pthreads_try_compile=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$pthreads_try_compile = xyes ; then + + sphinx_cv_pthreads_cflags="$flag" + break + + fi +fi + + done + CFLAGS=$save_cflags + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_pthreads_cflags" >&5 +$as_echo "$sphinx_cv_pthreads_cflags" >&6; } + +if test -n "$sphinx_cv_pthreads_cflags"; then + have_pthreads=yes + if test "x$sphinx_cv_pthreads_cflags" != "xnone"; then + CPPFLAGS="$CPPFLAGS $sphinx_cv_pthreads_cflags" + fi +fi + +# check for needed libs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBS needed for pthreads" >&5 +$as_echo_n "checking for LIBS needed for pthreads... " >&6; } +if ${sphinx_cv_pthreads_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + + save_libs=$LIBS + for lib in -lpthread -lpthreads -lc_r; do + LIBS="$save_libs $lib" + +if test x$cross_compiling = xno ; then + if test "$cross_compiling" = yes; then : + pthreads_try_run=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + pthreads_try_run=yes +else + pthreads_try_run=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$pthreads_try_run = xyes ; then + + sphinx_cv_pthreads_libs=$lib + break + + fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pthreads_try_link=yes +else + pthreads_try_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test x$pthreads_try_link = xyes ; then + + sphinx_cv_pthreads_libs=$lib + break + + fi +fi + + done + LIBS=$save_libs + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_pthreads_libs" >&5 +$as_echo "$sphinx_cv_pthreads_libs" >&6; } + +if test -n "$sphinx_cv_pthreads_libs"; then + have_pthreads=yes + LIBS="$LIBS $sphinx_cv_pthreads_libs" +fi + +# final check +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthreads" >&5 +$as_echo_n "checking for pthreads... " >&6; } +if test x$have_pthreads = xyes; then + if test x$cross_compiling = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: assumed as found (cross-compiling)" >&5 +$as_echo "assumed as found (cross-compiling)" >&6; } + fi +else + as_fn_error $? "no working pthreads library found" "$LINENO" 5 +fi + +for ac_func in pthread_mutex_timedlock +do : + ac_fn_c_check_func "$LINENO" "pthread_mutex_timedlock" "ac_cv_func_pthread_mutex_timedlock" +if test "x$ac_cv_func_pthread_mutex_timedlock" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 +_ACEOF + +fi +done + + + +# check if we should compile with MySQL support + +@%:@ Check whether --with-mysql was given. +if test "${with_mysql+set}" = set; then : + withval=$with_mysql; ac_cv_use_mysql=$withval +else + ac_cv_use_mysql=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with MySQL support" >&5 +$as_echo_n "checking whether to compile with MySQL support... " >&6; } +if test x$ac_cv_use_mysql != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + AC_CHECK_MYSQL($ac_cv_use_mysql) + +$as_echo "@%:@define USE_MYSQL 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +AM_CONDITIONAL(USE_MYSQL, test x$ac_cv_use_mysql != xno) + +# check if we should statically link the mysql library + +@%:@ Check whether --with-static-mysql was given. +if test "${with_static_mysql+set}" = set; then : + withval=$with_static_mysql; ac_cv_use_static_mysql=$withval +else + ac_cv_use_static_mysql=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to link statically with MySQL support" >&5 +$as_echo_n "checking whether to link statically with MySQL support... " >&6; } +if test x$ac_cv_use_mysql != xno; then +if test x$ac_cv_use_static_mysql != xno; then + AC_CHECK_MYSQL($ac_cv_use_static_mysql) + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/\-Bdynamic/\-Bstatic/g'` + MYSQL_LIBS="-Wl,-Bstatic $MYSQL_LIBS -Wl,-Bdynamic" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi + +# check if we should compile with PostgreSQL support + +@%:@ Check whether --with-pgsql was given. +if test "${with_pgsql+set}" = set; then : + withval=$with_pgsql; ac_cv_use_pgsql=$withval +else + ac_cv_use_pgsql=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with PostgreSQL support" >&5 +$as_echo_n "checking whether to compile with PostgreSQL support... " >&6; } +if test x$ac_cv_use_pgsql != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + AC_CHECK_PGSQL($ac_cv_use_pgsql) + +$as_echo "@%:@define USE_PGSQL 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +AM_CONDITIONAL(USE_PGSQL, test x$ac_cv_use_pgsql != xno) + +# check if we should complie with libmmseg (a mmseg Chinese Segmenter) support + +@%:@ Check whether --with-mmseg was given. +if test "${with_mmseg+set}" = set; then : + withval=$with_mmseg; ac_cv_use_mmseg=$withval +else + ac_cv_use_mmseg=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with libmmseg support" >&5 +$as_echo_n "checking whether to compile with libmmseg support... " >&6; } +if test x$ac_cv_use_mmseg != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + AC_CHECK_MMSEG($ac_cv_use_mmseg) + +$as_echo "@%:@define USE_MMSEG 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +AM_CONDITIONAL(USE_MMSEG, test x$ac_cv_use_mmseg != xno) + +# add macports include directory +if (echo $MYSQL_LIBS | grep -q -- -L/opt/local/lib); then + MYSQL_CFLAGS="$MYSQL_CFLAGS -I/opt/local/include" +fi + +# we can now set preprocessor flags for both C and C++ compilers +CPPFLAGS="$CPPFLAGS $MYSQL_CFLAGS $PGSQL_CFLAGS $MMSEG_CFLAGS" + +AM_CONDITIONAL(USE_PYTHON, test x"$USE_PYTHON" = xDO) +CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" +LIBS="$LIBS $PYTHON_LIBS" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use 64-bit document/word IDs" >&5 +$as_echo_n "checking whether to use 64-bit document/word IDs... " >&6; } +sph_enable_id64=no +@%:@ Check whether --enable-id64 was given. +if test "${enable_id64+set}" = set; then : + enableval=$enable_id64; sph_enable_id64=$enableval +fi + +if test x$sph_enable_id64 != xno; then + +$as_echo "@%:@define USE_64BIT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + +$as_echo "@%:@define USE_64BIT 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +@%:@ Check whether --with-libstemmer was given. +if test "${with_libstemmer+set}" = set; then : + withval=$with_libstemmer; ac_cv_use_libstemmer=$withval +else + ac_cv_use_libstemmer=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with libstemmer support" >&5 +$as_echo_n "checking whether to compile with libstemmer support... " >&6; } +if test x$ac_cv_use_libstemmer != xno; then + if test -d libstemmer_c && test -f libstemmer_c/include/libstemmer.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "@%:@define USE_LIBSTEMMER 1" >>confdefs.h + + else + as_fn_error $? "missing libstemmer sources from libstemmer_c. + +Please download the C version of libstemmer library from +http://snowball.tartarus.org/ and extract its sources over libstemmer_c/ +subdirectory in order to build Sphinx with libstemmer support. +" "$LINENO" 5 + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "@%:@define USE_LIBSTEMMER 0" >>confdefs.h + +fi +AM_CONDITIONAL(USE_LIBSTEMMER, test x$ac_cv_use_libstemmer != xno) + + +got_expat=0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5 +$as_echo_n "checking for libexpat... " >&6; } +if test $have_expat_h = yes -a $have_libexpat = yes ; then + +$as_echo "@%:@define USE_LIBEXPAT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + got_expat=1 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlpipe2 will NOT be available" >&5 +$as_echo "$as_me: WARNING: xmlpipe2 will NOT be available" >&2;} +fi + + + +@%:@ Check whether --with-iconv was given. +if test "${with_iconv+set}" = set; then : + withval=$with_iconv; ac_cv_use_iconv=$withval +else + ac_cv_use_iconv=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiconv" >&5 +$as_echo_n "checking for libiconv... " >&6; } +if test $have_iconv_h = yes \ + -a $have_libiconv = yes \ + -a $got_expat -eq 1 \ + -a $ac_cv_use_iconv != no ; \ +then + +$as_echo "@%:@define USE_LIBICONV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv() arg types" >&5 +$as_echo_n "checking for iconv() arg types... " >&6; } + 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ +const char * inbuf; + iconv_t cd; + iconv ( cd, &inbuf, NULL, NULL, NULL ); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + iconv_inbuf_const=yes +else + iconv_inbuf_const=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 + + if test $iconv_inbuf_const = yes ; then + +$as_echo "@%:@define ICONV_INBUF_CONST 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: const char **" >&5 +$as_echo "const char **" >&6; } + else + +$as_echo "@%:@define ICONV_INBUF_CONST 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: char **" >&5 +$as_echo "char **" >&6; } + fi +else + if test $got_expat -eq 1 ; then + if test $ac_cv_use_iconv = no ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlpipe2 will only support default encodings (latin-1, utf-8)" >&5 +$as_echo "$as_me: WARNING: xmlpipe2 will only support default encodings (latin-1, utf-8)" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not required" >&5 +$as_echo "not required" >&6; } + fi +fi + + +if test $have_zlib_h = yes -a $have_lz = yes ; then + +$as_echo "@%:@define USE_ZLIB 1" >>confdefs.h + +fi + + + +@%:@ Check whether --with-unixodbc was given. +if test "${with_unixodbc+set}" = set; then : + withval=$with_unixodbc; ac_cv_use_unixodbc=$withval +else + ac_cv_use_unixodbc=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UnixODBC" >&5 +$as_echo_n "checking for UnixODBC... " >&6; } +if test $ac_cv_use_unixodbc != no ; then + if test $have_sql_h = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing SQLConnect" >&5 +$as_echo_n "checking for library containing SQLConnect... " >&6; } +if ${ac_cv_search_SQLConnect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SQLConnect (); +int +main () +{ +return SQLConnect (); + ; + return 0; +} +_ACEOF +for ac_lib in '' odbc iodbc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_SQLConnect=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_SQLConnect+:} false; then : + break +fi +done +if ${ac_cv_search_SQLConnect+:} false; then : + +else + ac_cv_search_SQLConnect=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SQLConnect" >&5 +$as_echo "$ac_cv_search_SQLConnect" >&6; } +ac_res=$ac_cv_search_SQLConnect +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libodbc=yes +else + have_libodbc=no +fi + + if test $have_libodbc = yes ; then + +$as_echo "@%:@define USE_ODBC 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ODBC source support will NOT be available" >&5 +$as_echo "$as_me: WARNING: ODBC source support will NOT be available" >&2;} + fi + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi + + + + +@%:@ Check whether --with-syslog was given. +if test "${with_syslog+set}" = set; then : + withval=$with_syslog; ac_cv_use_syslog=$withval +else + ac_cv_use_syslog=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Syslog" >&5 +$as_echo_n "checking for Syslog... " >&6; } +if test $ac_cv_use_syslog != no ; then + if test $have_syslog_h = yes ; then + +$as_echo "@%:@define USE_SYSLOG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unaligned RAM access" >&5 +$as_echo_n "checking for unaligned RAM access... " >&6; } +if ${sphinx_cv_unaligned_ram_access+:} false; then : + $as_echo_n "(cached) " >&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 + +if test "$cross_compiling" = yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown (cross-compiling), assume no" >&5 +$as_echo "unknown (cross-compiling), assume no" >&6; } + sphinx_cv_unaligned_ram_access=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ +char * sBuf = new char [ 8*sizeof(int) ]; + for ( int i=0; i<8*sizeof(int); i++ ) + sBuf[i] = i; + + // check for crashes (SPARC) + volatile int iRes = 0; + for ( int i=0; i<(int)sizeof(int); i++ ) + { + int * pPtr = (int*)( sBuf+i ); + iRes += *pPtr; + } + + // check for correct values (ARM) + iRes = *(int*)( sBuf+1 ); + if (!( iRes==0x01020304 || iRes==0x04030201 )) + return 1; + // all seems ok + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + sphinx_cv_unaligned_ram_access=yes +else + sphinx_cv_unaligned_ram_access=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_unaligned_ram_access" >&5 +$as_echo "$sphinx_cv_unaligned_ram_access" >&6; } + +if test x$sphinx_cv_unaligned_ram_access = xyes ; then + +$as_echo "@%:@define UNALIGNED_RAM_ACCESS 1" >>confdefs.h + +else + $as_echo "@%:@define UNALIGNED_RAM_ACCESS 0" >>confdefs.h + +fi + +# check endianness + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + +$as_echo "@%:@define USE_LITTLE_ENDIAN 0" >>confdefs.h +;; #( + no) + +$as_echo "@%:@define USE_LITTLE_ENDIAN 1" >>confdefs.h + ;; #( + universal) + as_fn_error $? "universial endianess not supported" "$LINENO" 5 + + ;; #( + *) + as_fn_error $? "unknown endianess not supported" "$LINENO" 5 ;; + esac + + + +SPHINX_CONFIGURE_PART(generating configuration files) + +if test "$prefix" = "NONE"; then + my_op_prefix="/var" +else + my_op_prefix="$localstatedir" +fi + + +CONFDIR=`eval echo "${my_op_prefix}"` + + +ac_config_files="$ac_config_files Makefile src/Makefile libstemmer_c/Makefile doc/Makefile sphinx.conf.dist:sphinx.conf.in sphinx-min.conf.dist:sphinx-min.conf.in" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+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 + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_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= +U= +for ac_i in : $LIB@&t@OBJS; 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=`$as_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. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +sphinx config.status 1.11 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config/config.h") CONFIG_HEADERS="$CONFIG_HEADERS config/config.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "libstemmer_c/Makefile") CONFIG_FILES="$CONFIG_FILES libstemmer_c/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "sphinx.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx.conf.dist:sphinx.conf.in" ;; + "sphinx-min.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx-min.conf.dist:sphinx-min.conf.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+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= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + + esac + +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + + +SPHINX_CONFIGURE_PART(configuration done) + +echo "You can now run 'make install' to build and install Sphinx binaries." +echo "On a multi-core machine, try 'make -j4 install' to speed up the build." +echo +echo "Updates, articles, help forum, and commercial support, consulting, training," +echo "and development services are available at http://sphinxsearch.com/" +echo +echo "Thank you for choosing Sphinx!" +echo diff --git a/coreseek/csft-4.1/autom4te.cache/output.1 b/coreseek/csft-4.1/autom4te.cache/output.1 new file mode 100644 index 0000000..ccf70b5 --- /dev/null +++ b/coreseek/csft-4.1/autom4te.cache/output.1 @@ -0,0 +1,9854 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.68 for sphinx 1.11. +@%:@ +@%:@ Report bugs to . +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in @%:@ (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: shodan(at)shodan.ru about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +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='mkdir -p "$as_dir"' +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'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='sphinx' +PACKAGE_TARNAME='sphinx' +PACKAGE_VERSION='1.11' +PACKAGE_STRING='sphinx 1.11' +PACKAGE_BUGREPORT='shodan(at)shodan.ru' +PACKAGE_URL='' + +ac_unique_file="src/searchd.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +CONFDIR +USE_LIBSTEMMER_FALSE +USE_LIBSTEMMER_TRUE +USE_PYTHON_FALSE +USE_PYTHON_TRUE +USE_MMSEG_FALSE +USE_MMSEG_TRUE +MMSEG_CFLAGS +MMSEG_LIBS +USE_PGSQL_FALSE +USE_PGSQL_TRUE +PGSQL_CFLAGS +PGSQL_LIBS +pgconfig +USE_MYSQL_FALSE +USE_MYSQL_TRUE +MYSQL_CFLAGS +MYSQL_LIBS +LIBRT +LIB@&t@OBJS +EGREP +GREP +CPP +PYTHON_LIBS +PYTHON_CPPFLAGS +RANLIB +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +with_debug +enable_dependency_tracking +with_python +with_mysql +with_mysql_includes +with_mysql_libs +with_static_mysql +with_pgsql +with_pgsql_includes +with_pgsql_libs +with_mmseg +with_mmseg_includes +with_mmseg_libs +enable_id64 +with_libstemmer +with_iconv +with_unixodbc +with_syslog +' + ac_precious_vars='build_alias +host_alias +target_alias +PYTHON +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_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'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_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 .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures sphinx 1.11 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 + @<:@@S|@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/sphinx@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of sphinx 1.11:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-id64 use 64-bit document and word IDs (default is no) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-debug compile slower debug version (default is disabled) + --with-python Embedded Python datasource support @<:@no@:>@ + --with-mysql compile with MySQL support (default is enabled) + --with-mysql-includes path to MySQL header files + --with-mysql-libs path to MySQL libraries + --with-static-mysql link statically with MySQL library (default is no) + --with-pgsql compile with PostgreSQL support (default is + disabled) + --with-pgsql-includes path to PostgreSQL header files + --with-pgsql-libs path to PostgreSQL libraries + --with-mmseg compile with libmmseg, a mmseg Chinese Segmenter + support (default is enabled) + --with-mmseg-includes path to libmmseg header files + --with-mmseg-libs path to libmmseg libraries + --with-libstemmer compile with libstemmer support (default is + disabled) + --with-iconv compile with iconv support (default is autodetect) + --with-unixodbc compile with UnixODBC support (default is + autodetect) + --with-syslog compile with possibility to use syslog for logging + (default is no) + +Some influential environment variables: + PYTHON the Python interpreter + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + $as_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 +sphinx configure 1.11 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ---------------------------------- ## +## Report this to shodan(at)shodan.ru ## +## ---------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_mongrel + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES +@%:@ ------------------------------------------- +@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache +@%:@ variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +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 +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_type + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_run LINENO +@%:@ ------------------------ +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_run +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 sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. 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=. + $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_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'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > 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 + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in @%:@(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_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,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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 + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_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. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking build environment" >&5 +$as_echo "checking build environment" >&6; } + TMP=`echo checking build environment | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='sphinx' + VERSION='1.11' + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + @%:@ Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + + + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + +ac_config_headers="$ac_config_headers config/config.h" + + +# hack to locate expat/iconv in /usr/local on BSD systems +CPPFLAGS="$CPPFLAGS -I/usr/local/include" +LIBS="$LIBS -L/usr/local/lib" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for compiler programs" >&5 +$as_echo "checking for compiler programs" >&6; } + TMP=`echo checking for compiler programs | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + + +@%:@ Check whether --with-debug was given. +if test "${with_debug+set}" = set; then : + withval=$with_debug; ac_cv_use_debug=$withval +else + ac_cv_use_debug=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile debug version" >&5 +$as_echo_n "checking whether to compile debug version... " >&6; } +if test x$ac_cv_use_debug != xno; then + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +if test x$ac_env_CFLAGS_set != xset; then + CFLAGS=$SPHINX_CFLAGS +else + CFLAGS="$CFLAGS $SPHINX_INJECT_FLAGS" +fi + +if test x$ac_env_CXXFLAGS_set != xset; then + CXXFLAGS=$SPHINX_CFLAGS +else + CXXFLAGS="$CXXFLAGS $SPHINX_INJECT_FLAGS" +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+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 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$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 + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + + +@%:@ Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; case $withval in + yes) USE_PYTHON=DO + +$as_echo "@%:@define USE_PYTHON 1" >>confdefs.h + + ;; + no) USE_PYTHON=DONT ;; + *) as_fn_error $? "invalid argument to --with-python" "$LINENO" 5 ;; + esac +else + USE_PYTHON=DONT +fi + + +if test x"$USE_PYTHON" = xDO ; then + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test x"${PYTHON}" = x ; then + as_fn_error $? "python was not found in path and is required" "$LINENO" 5 +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python linkage" >&5 +$as_echo_n "checking for Python linkage... " >&6; } + py_prefix=`$PYTHON -c 'import sys; print sys.prefix'` + py_ver=`$PYTHON -c 'import sys; print sys.version[:3]'` + py_libdir="$py_prefix/lib/python$py_ver" + PYTHON_CPPFLAGS="-I$py_prefix/include/python$py_ver" + py_linkage="" + for py_linkpart in LIBS LIBC LIBM LOCALMODLIBS BASEMODLIBS \ + LINKFORSHARED LDFLAGS ; do + py_linkage="$py_linkage "`grep "^${py_linkpart}=" \ + $py_libdir/config/Makefile \ + | sed -e 's/^.*=//'` + done + PYTHON_LIBS="-L$py_libdir/config -lpython$py_ver " + PYTHON_LIBS=`echo $PYTHON_LIBS | sed -e 's/ \\t*/ /g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $py_libdir" >&5 +$as_echo "$py_libdir" >&6; } +else + PYTHON_CPPFLAGS= + PYTHON_LIBS= +fi + + + + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __GNUC__ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3) +void main() {} +#else +syntax error +#endif +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + as_fn_error $? "Gcc version error. Minspec is 3.4" "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +cat >>confdefs.h <<_ACEOF +@%:@define COMPILER "$CC `$CC -dumpversion`" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define OS_UNAME "`uname -a`" +_ACEOF + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for header files" >&5 +$as_echo "checking for header files" >&6; } + TMP=`echo checking for header files | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for header files. +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "@%:@define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/file.h sys/socket.h sys/time.h unistd.h pthread.h execinfo.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_fn_c_check_header_mongrel "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default" +if test "x$ac_cv_header_expat_h" = xyes; then : + have_expat_h=yes +else + have_expat_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" +if test "x$ac_cv_header_iconv_h" = xyes; then : + have_iconv_h=yes +else + have_iconv_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + have_zlib_h=yes +else + have_zlib_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "sql.h" "ac_cv_header_sql_h" "$ac_includes_default" +if test "x$ac_cv_header_sql_h" = xyes; then : + have_sql_h=yes +else + have_sql_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" +if test "x$ac_cv_header_syslog_h" = xyes; then : + have_syslog_h=yes +else + have_syslog_h=no +fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for types" >&5 +$as_echo "checking for types" >&6; } + TMP=`echo checking for types | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for typedefs, structures, and compiler characteristics. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } +ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE__BOOL 1 +_ACEOF + + +fi + +if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "@%:@define HAVE_STDBOOL_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "@%:@define const /**/" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define off_t long int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define size_t unsigned int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if ${ac_cv_header_time+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +$as_echo "@%:@define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for library functions" >&5 +$as_echo "checking for library functions" >&6; } + TMP=`echo checking for library functions | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for library functions. +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define pid_t int +_ACEOF + +fi + +for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if ${ac_cv_func_fork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if ${ac_cv_func_vfork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include +#ifdef HAVE_VFORK_H +# include +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include , but some compilers + (e.g. gcc -O) don't grok . Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "@%:@define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "@%:@define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "@%:@define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "@%:@define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "@%:@define HAVE_MALLOC 0" >>confdefs.h + + case " $LIB@&t@OBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "@%:@define malloc rpl_malloc" >>confdefs.h + +fi + + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 +$as_echo_n "checking for GNU libc compatible realloc... " >&6; } +if ${ac_cv_func_realloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_realloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *realloc (); +#endif + +int +main () +{ +return ! realloc (0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_realloc_0_nonnull=yes +else + ac_cv_func_realloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } +if test $ac_cv_func_realloc_0_nonnull = yes; then : + +$as_echo "@%:@define HAVE_REALLOC 1" >>confdefs.h + +else + $as_echo "@%:@define HAVE_REALLOC 0" >>confdefs.h + + case " $LIB@&t@OBJS " in + *" realloc.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS realloc.$ac_objext" + ;; +esac + + +$as_echo "@%:@define realloc rpl_realloc" >>confdefs.h + +fi + + +for ac_header in sys/select.h sys/socket.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 +$as_echo_n "checking types of arguments for select... " >&6; } +if ${ac_cv_func_select_args+:} false; then : + $as_echo_n "(cached) " >&6 +else + for ac_arg234 in 'fd_set *' 'int *' 'void *'; do + for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do + for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#ifdef HAVE_SYS_SELECT_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif + +int +main () +{ +extern int select ($ac_arg1, + $ac_arg234, $ac_arg234, $ac_arg234, + $ac_arg5); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + done +done +# Provide a safe default value. +: "${ac_cv_func_select_args=int,int *,struct timeval *}" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 +$as_echo "$ac_cv_func_select_args" >&6; } +ac_save_IFS=$IFS; IFS=',' +set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` +IFS=$ac_save_IFS +shift + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG1 $1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG234 ($2) +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG5 ($3) +_ACEOF + +rm -f conftest* + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +$as_echo_n "checking return type of signal handlers... " >&6; } +if ${ac_cv_type_signal+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_signal=int +else + ac_cv_type_signal=void +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +$as_echo "$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +@%:@define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +@%:@define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIB@&t@OBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS lstat.$ac_objext" + ;; +esac + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 +$as_echo_n "checking whether stat accepts an empty string... " >&6; } +if ${ac_cv_func_stat_empty_string_bug+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_stat_empty_string_bug=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + return stat ("", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_stat_empty_string_bug=no +else + ac_cv_func_stat_empty_string_bug=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 +$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } +if test $ac_cv_func_stat_empty_string_bug = yes; then + case " $LIB@&t@OBJS " in + *" stat.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS stat.$ac_objext" + ;; +esac + + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STAT_EMPTY_STRING_BUG 1 +_ACEOF + +fi + +for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VPRINTF 1 +_ACEOF + +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = xyes; then : + +$as_echo "@%:@define HAVE_DOPRNT 1" >>confdefs.h + +fi + +fi +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 +$as_echo_n "checking for library containing setsockopt... " >&6; } +if ${ac_cv_search_setsockopt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char setsockopt (); +int +main () +{ +return setsockopt (); + ; + return 0; +} +_ACEOF +for ac_lib in '' socket; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_setsockopt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_setsockopt+:} false; then : + break +fi +done +if ${ac_cv_search_setsockopt+:} false; then : + +else + ac_cv_search_setsockopt=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5 +$as_echo "$ac_cv_search_setsockopt" >&6; } +ac_res=$ac_cv_search_setsockopt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5 +$as_echo_n "checking for library containing gethostbyname... " >&6; } +if ${ac_cv_search_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +for ac_lib in '' nsl socket resolv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gethostbyname=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_gethostbyname+:} false; then : + break +fi +done +if ${ac_cv_search_gethostbyname+:} false; then : + +else + ac_cv_search_gethostbyname=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 +$as_echo "$ac_cv_search_gethostbyname" >&6; } +ac_res=$ac_cv_search_gethostbyname +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XML_Parse" >&5 +$as_echo_n "checking for library containing XML_Parse... " >&6; } +if ${ac_cv_search_XML_Parse+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XML_Parse (); +int +main () +{ +return XML_Parse (); + ; + return 0; +} +_ACEOF +for ac_lib in '' expat; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_XML_Parse=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_XML_Parse+:} false; then : + break +fi +done +if ${ac_cv_search_XML_Parse+:} false; then : + +else + ac_cv_search_XML_Parse=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XML_Parse" >&5 +$as_echo "$ac_cv_search_XML_Parse" >&6; } +ac_res=$ac_cv_search_XML_Parse +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libexpat=yes +else + have_libexpat=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv" >&5 +$as_echo_n "checking for library containing iconv... " >&6; } +if ${ac_cv_search_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char iconv (); +int +main () +{ +return iconv (); + ; + return 0; +} +_ACEOF +for ac_lib in '' iconv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_iconv=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_iconv+:} false; then : + break +fi +done +if ${ac_cv_search_iconv+:} false; then : + +else + ac_cv_search_iconv=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv" >&5 +$as_echo "$ac_cv_search_iconv" >&6; } +ac_res=$ac_cv_search_iconv +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libiconv=yes +else + have_libiconv=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflate" >&5 +$as_echo_n "checking for library containing inflate... " >&6; } +if ${ac_cv_search_inflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflate (); +int +main () +{ +return inflate (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_inflate=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_inflate+:} false; then : + break +fi +done +if ${ac_cv_search_inflate+:} false; then : + +else + ac_cv_search_inflate=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflate" >&5 +$as_echo "$ac_cv_search_inflate" >&6; } +ac_res=$ac_cv_search_inflate +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_lz=yes +else + have_lz=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing logf" >&5 +$as_echo_n "checking for library containing logf... " >&6; } +if ${ac_cv_search_logf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char logf (); +int +main () +{ +return logf (); + ; + return 0; +} +_ACEOF +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_logf=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_logf+:} false; then : + break +fi +done +if ${ac_cv_search_logf+:} false; then : + +else + ac_cv_search_logf=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_logf" >&5 +$as_echo "$ac_cv_search_logf" >&6; } +ac_res=$ac_cv_search_logf +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +for ac_func in dup2 gethostbyname gettimeofday memmove memset select socket strcasecmp strchr strerror strncasecmp strstr strtol logf pread +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +for ac_func in backtrace backtrace_symbols +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# most systems require the program be linked with librt library to use +# the function clock_gettime +my_save_LIBS="$LIBS" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_clock_gettime=yes +else + ac_cv_lib_rt_clock_gettime=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBRT 1 +_ACEOF + + LIBS="-lrt $LIBS" + +fi + + +LIBRT=$LIBS +LIBS="$my_save_LIBS" + + +LIBS="$LIBS $LIBRT" +for ac_func in clock_gettime +do : + ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" +if test "x$ac_cv_func_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_CLOCK_GETTIME 1 +_ACEOF + +fi +done + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LOCK_EX in sys/file.h" >&5 +$as_echo_n "checking for LOCK_EX in sys/file.h... " >&6; } +if ${ac_cv_define_LOCK_EX+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef LOCK_EX +YES_IS_DEFINED +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + ac_cv_define_LOCK_EX=yes +else + ac_cv_define_LOCK_EX=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_define_LOCK_EX" >&5 +$as_echo "$ac_cv_define_LOCK_EX" >&6; } + if test "$ac_cv_define_LOCK_EX" = "yes"; then + +$as_echo "@%:@define HAVE_LOCK_EX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for F_SETLKW in fcntl.h" >&5 +$as_echo_n "checking for F_SETLKW in fcntl.h... " >&6; } +if ${ac_cv_define_F_SETLKW+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef F_SETLKW +YES_IS_DEFINED +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + ac_cv_define_F_SETLKW=yes +else + ac_cv_define_F_SETLKW=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_define_F_SETLKW" >&5 +$as_echo "$ac_cv_define_F_SETLKW" >&6; } + if test "$ac_cv_define_F_SETLKW" = "yes"; then + +$as_echo "@%:@define HAVE_F_SETLKW 1" >>confdefs.h + + fi + + +# check for dlopen +# FIXME! technically, only needed in searchd +# but as UDF manager is curently in libsphinx, we link everything +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +for ac_func in dlopen dlerror +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: configuring Sphinx" >&5 +$as_echo "configuring Sphinx" >&6; } + TMP=`echo configuring Sphinx | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + + +# check for pthreads + +pthread_prog=" +#include +#include + +void * thread_routine ( void * data ) +{ + return data; +} + +int main () +{ + pthread_t thd; + pthread_mutexattr_t mattr; + pthread_once_t once_init = PTHREAD_ONCE_INIT; + int data = 1; + + pthread_mutexattr_init ( &mattr ); + return pthread_create ( &thd, NULL, thread_routine, &data ); +} +" + + + + + + +# check for needed cflags +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLAGS needed for pthreads" >&5 +$as_echo_n "checking for CFLAGS needed for pthreads... " >&6; } +if ${sphinx_cv_pthreads_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else + + save_cflags=$CFLAGS + for flag in none -kthread -pthread -pthreads -mt -mthreads -Kthread -threads; do + CFLAGS=$save_cflags + test "x$flag" != "xnone" && CFLAGS="$CFLAGS $flag" + +if test x$cross_compiling = xno ; then + if test "$cross_compiling" = yes; then : + pthreads_try_run=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + pthreads_try_run=yes +else + pthreads_try_run=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$pthreads_try_run = xyes ; then + + sphinx_cv_pthreads_cflags="$flag" + break + + fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + pthreads_try_compile=yes +else + pthreads_try_compile=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$pthreads_try_compile = xyes ; then + + sphinx_cv_pthreads_cflags="$flag" + break + + fi +fi + + done + CFLAGS=$save_cflags + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_pthreads_cflags" >&5 +$as_echo "$sphinx_cv_pthreads_cflags" >&6; } + +if test -n "$sphinx_cv_pthreads_cflags"; then + have_pthreads=yes + if test "x$sphinx_cv_pthreads_cflags" != "xnone"; then + CPPFLAGS="$CPPFLAGS $sphinx_cv_pthreads_cflags" + fi +fi + +# check for needed libs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBS needed for pthreads" >&5 +$as_echo_n "checking for LIBS needed for pthreads... " >&6; } +if ${sphinx_cv_pthreads_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + + save_libs=$LIBS + for lib in -lpthread -lpthreads -lc_r; do + LIBS="$save_libs $lib" + +if test x$cross_compiling = xno ; then + if test "$cross_compiling" = yes; then : + pthreads_try_run=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + pthreads_try_run=yes +else + pthreads_try_run=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$pthreads_try_run = xyes ; then + + sphinx_cv_pthreads_libs=$lib + break + + fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pthreads_try_link=yes +else + pthreads_try_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test x$pthreads_try_link = xyes ; then + + sphinx_cv_pthreads_libs=$lib + break + + fi +fi + + done + LIBS=$save_libs + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_pthreads_libs" >&5 +$as_echo "$sphinx_cv_pthreads_libs" >&6; } + +if test -n "$sphinx_cv_pthreads_libs"; then + have_pthreads=yes + LIBS="$LIBS $sphinx_cv_pthreads_libs" +fi + +# final check +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthreads" >&5 +$as_echo_n "checking for pthreads... " >&6; } +if test x$have_pthreads = xyes; then + if test x$cross_compiling = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: assumed as found (cross-compiling)" >&5 +$as_echo "assumed as found (cross-compiling)" >&6; } + fi +else + as_fn_error $? "no working pthreads library found" "$LINENO" 5 +fi + +for ac_func in pthread_mutex_timedlock +do : + ac_fn_c_check_func "$LINENO" "pthread_mutex_timedlock" "ac_cv_func_pthread_mutex_timedlock" +if test "x$ac_cv_func_pthread_mutex_timedlock" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 +_ACEOF + +fi +done + + + +# check if we should compile with MySQL support + +@%:@ Check whether --with-mysql was given. +if test "${with_mysql+set}" = set; then : + withval=$with_mysql; ac_cv_use_mysql=$withval +else + ac_cv_use_mysql=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with MySQL support" >&5 +$as_echo_n "checking whether to compile with MySQL support... " >&6; } +if test x$ac_cv_use_mysql != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +mysqlconfig_locations="mysql_config /usr/bin/mysql_config /usr/local/bin/mysql_config /usr/local/mysql/bin/mysql_config /opt/mysql/bin/mysql_config /usr/pkg/bin/mysql_config" +user_mysql_includes= +user_mysql_libs= + +# check explicit MySQL root for mysql_config, include, lib +if test x$ac_cv_use_mysql != xyes -a x$ac_cv_use_mysql != xno +then + mysqlroot=`echo $ac_cv_use_mysql | sed -e 's+/$++'` + if test -x "$mysqlroot/bin/mysql_config" + then + # if there's mysql_config, that's the best route + mysqlconfig_locations="$mysqlroot/bin/mysql_config" + elif test -d "$mysqlroot/include" -a -d "$mysqlroot/lib" + then + # explicit root; do not check well-known paths + mysqlconfig_locations= + + # includes + if test -d "$mysqlroot/include/mysql" + then + user_mysql_includes="$mysqlroot/include/mysql" + else + user_mysql_includes="$mysqlroot/include" + fi + + # libs + if test -d "$mysqlroot/lib/mysql" + then + user_mysql_libs="$mysqlroot/lib/mysql" + else + user_mysql_libs="$mysqlroot/lib" + fi + else + as_fn_error $? "invalid MySQL root directory '$mysqlroot'; neither bin/mysql_config, nor include/ and lib/ were found there" "$LINENO" 5 + fi +fi + + +# try running mysql_config +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_config" >&5 +$as_echo_n "checking for mysql_config... " >&6; } +for mysqlconfig in $mysqlconfig_locations +do + if test -n "$mysqlconfig" + then + MYSQL_CFLAGS=`${mysqlconfig} --cflags 2>/dev/null` + MYSQL_LIBS=`${mysqlconfig} --libs 2>/dev/null` + + if test $? -eq 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mysqlconfig" >&5 +$as_echo "$mysqlconfig" >&6; } + mysqlconfig= + break + else + MYSQL_CFLAGS= + MYSQL_LIBS= + fi + fi +done +if test -n "$mysqlconfig" +then + mysqlconfig_used= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +else + mysqlconfig_used=yes +fi + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MYSQL_CFLAGS" +then + for CANDIDATE in "$user_mysql_includes" "/usr/local/mysql/include" "/usr/local/mysql/include/mysql" \ + "/usr/include/mysql" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/mysql.h" + then + MYSQL_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MYSQL_LIBS" +then + for CANDIDATE in "$user_mysql_libs" "/usr/lib64/mysql" \ + "/usr/local/mysql/lib/mysql" "/usr/local/mysql/lib" \ + "/usr/local/lib/mysql" "/usr/lib/mysql" \ + "/opt/mysql/lib/mysql" "/usr/pkg/lib/mysql" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MYSQL_LIBS="-L$CANDIDATE -lmysqlclient -lz" + break + fi + done +fi + + +# apply explicit include path overrides + +@%:@ Check whether --with-mysql-includes was given. +if test "${with_mysql_includes+set}" = set; then : + withval=$with_mysql_includes; ac_cv_mysql_includes=$withval +fi + +if test -n "$ac_cv_mysql_includes" +then + MYSQL_CFLAGS="-I$ac_cv_mysql_includes" +fi + + +# apply explicit lib path overrides + +@%:@ Check whether --with-mysql-libs was given. +if test "${with_mysql_libs+set}" = set; then : + withval=$with_mysql_libs; ac_cv_mysql_libs=$withval +fi + +if test -n "$ac_cv_mysql_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mysql_libs=`echo ${ac_cv_mysql_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MYSQL_LIBS="-L$ac_cv_mysql_libs -lmysqlclient -lz" +fi + +# if we got options from mysqlconfig try to actually use them +if test -n "$mysqlconfig_used" -a -n "$MYSQL_CFLAGS" -a -n "$MYSQL_LIBS" +then + _CFLAGS=$CFLAGS + _LIBS=$LIBS + + CFLAGS="$CFLAGS $MYSQL_CFLAGS" + LIBS="$LIBS $MYSQL_LIBS" + + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # if mysql binary was built using a different compiler and we + # got options from mysql_config some of them might not work + # with compiler we will be using + + # throw away everything that isn't one of -D -L -I -l and retry + MYSQL_CFLAGS=`echo $MYSQL_CFLAGS | sed -e 's/-[^DLIl][^ ]*//g'` + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/-[^DLIl][^ ]*//g'` + + CFLAGS="$_CFLAGS $MYSQL_CFLAGS" + LIBS="$_LIBS $MYSQL_LIBS" + + unset ac_cv_func_mysql_real_connect + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # ... that didn't help + # clear flags, the code below will complain + MYSQL_CFLAGS= + MYSQL_LIBS= + +fi + + +fi + + CFLAGS=$_CFLAGS + LIBS=$_LIBS +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL include files" >&5 +$as_echo_n "checking MySQL include files... " >&6; } +if test -z "$MYSQL_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find MySQL include files. + +Check that you do have MySQL include files installed. +The package name is typically 'mysql-devel'. + +If include files are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify includes location explicitly, using --with-mysql-includes; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CFLAGS" >&5 +$as_echo "$MYSQL_CFLAGS" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL libraries" >&5 +$as_echo_n "checking MySQL libraries... " >&6; } +if test -z "$MYSQL_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find MySQL libraries. + +Check that you do have MySQL libraries installed. +The package name is typically 'mysql-devel'. + +If libraries are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify libraries location explicitly, using --with-mysql-libs; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_LIBS" >&5 +$as_echo "$MYSQL_LIBS" >&6; } +fi + + + + +$as_echo "@%:@define USE_MYSQL 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_mysql != xno; then + USE_MYSQL_TRUE= + USE_MYSQL_FALSE='#' +else + USE_MYSQL_TRUE='#' + USE_MYSQL_FALSE= +fi + + +# check if we should statically link the mysql library + +@%:@ Check whether --with-static-mysql was given. +if test "${with_static_mysql+set}" = set; then : + withval=$with_static_mysql; ac_cv_use_static_mysql=$withval +else + ac_cv_use_static_mysql=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to link statically with MySQL support" >&5 +$as_echo_n "checking whether to link statically with MySQL support... " >&6; } +if test x$ac_cv_use_mysql != xno; then +if test x$ac_cv_use_static_mysql != xno; then + + +mysqlconfig_locations="mysql_config /usr/bin/mysql_config /usr/local/bin/mysql_config /usr/local/mysql/bin/mysql_config /opt/mysql/bin/mysql_config /usr/pkg/bin/mysql_config" +user_mysql_includes= +user_mysql_libs= + +# check explicit MySQL root for mysql_config, include, lib +if test x$ac_cv_use_static_mysql != xyes -a x$ac_cv_use_static_mysql != xno +then + mysqlroot=`echo $ac_cv_use_static_mysql | sed -e 's+/$++'` + if test -x "$mysqlroot/bin/mysql_config" + then + # if there's mysql_config, that's the best route + mysqlconfig_locations="$mysqlroot/bin/mysql_config" + elif test -d "$mysqlroot/include" -a -d "$mysqlroot/lib" + then + # explicit root; do not check well-known paths + mysqlconfig_locations= + + # includes + if test -d "$mysqlroot/include/mysql" + then + user_mysql_includes="$mysqlroot/include/mysql" + else + user_mysql_includes="$mysqlroot/include" + fi + + # libs + if test -d "$mysqlroot/lib/mysql" + then + user_mysql_libs="$mysqlroot/lib/mysql" + else + user_mysql_libs="$mysqlroot/lib" + fi + else + as_fn_error $? "invalid MySQL root directory '$mysqlroot'; neither bin/mysql_config, nor include/ and lib/ were found there" "$LINENO" 5 + fi +fi + + +# try running mysql_config +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_config" >&5 +$as_echo_n "checking for mysql_config... " >&6; } +for mysqlconfig in $mysqlconfig_locations +do + if test -n "$mysqlconfig" + then + MYSQL_CFLAGS=`${mysqlconfig} --cflags 2>/dev/null` + MYSQL_LIBS=`${mysqlconfig} --libs 2>/dev/null` + + if test $? -eq 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mysqlconfig" >&5 +$as_echo "$mysqlconfig" >&6; } + mysqlconfig= + break + else + MYSQL_CFLAGS= + MYSQL_LIBS= + fi + fi +done +if test -n "$mysqlconfig" +then + mysqlconfig_used= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +else + mysqlconfig_used=yes +fi + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MYSQL_CFLAGS" +then + for CANDIDATE in "$user_mysql_includes" "/usr/local/mysql/include" "/usr/local/mysql/include/mysql" \ + "/usr/include/mysql" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/mysql.h" + then + MYSQL_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MYSQL_LIBS" +then + for CANDIDATE in "$user_mysql_libs" "/usr/lib64/mysql" \ + "/usr/local/mysql/lib/mysql" "/usr/local/mysql/lib" \ + "/usr/local/lib/mysql" "/usr/lib/mysql" \ + "/opt/mysql/lib/mysql" "/usr/pkg/lib/mysql" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MYSQL_LIBS="-L$CANDIDATE -lmysqlclient -lz" + break + fi + done +fi + + +# apply explicit include path overrides + +@%:@ Check whether --with-mysql-includes was given. +if test "${with_mysql_includes+set}" = set; then : + withval=$with_mysql_includes; ac_cv_mysql_includes=$withval +fi + +if test -n "$ac_cv_mysql_includes" +then + MYSQL_CFLAGS="-I$ac_cv_mysql_includes" +fi + + +# apply explicit lib path overrides + +@%:@ Check whether --with-mysql-libs was given. +if test "${with_mysql_libs+set}" = set; then : + withval=$with_mysql_libs; ac_cv_mysql_libs=$withval +fi + +if test -n "$ac_cv_mysql_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mysql_libs=`echo ${ac_cv_mysql_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MYSQL_LIBS="-L$ac_cv_mysql_libs -lmysqlclient -lz" +fi + +# if we got options from mysqlconfig try to actually use them +if test -n "$mysqlconfig_used" -a -n "$MYSQL_CFLAGS" -a -n "$MYSQL_LIBS" +then + _CFLAGS=$CFLAGS + _LIBS=$LIBS + + CFLAGS="$CFLAGS $MYSQL_CFLAGS" + LIBS="$LIBS $MYSQL_LIBS" + + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # if mysql binary was built using a different compiler and we + # got options from mysql_config some of them might not work + # with compiler we will be using + + # throw away everything that isn't one of -D -L -I -l and retry + MYSQL_CFLAGS=`echo $MYSQL_CFLAGS | sed -e 's/-[^DLIl][^ ]*//g'` + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/-[^DLIl][^ ]*//g'` + + CFLAGS="$_CFLAGS $MYSQL_CFLAGS" + LIBS="$_LIBS $MYSQL_LIBS" + + unset ac_cv_func_mysql_real_connect + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # ... that didn't help + # clear flags, the code below will complain + MYSQL_CFLAGS= + MYSQL_LIBS= + +fi + + +fi + + CFLAGS=$_CFLAGS + LIBS=$_LIBS +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL include files" >&5 +$as_echo_n "checking MySQL include files... " >&6; } +if test -z "$MYSQL_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find MySQL include files. + +Check that you do have MySQL include files installed. +The package name is typically 'mysql-devel'. + +If include files are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify includes location explicitly, using --with-mysql-includes; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CFLAGS" >&5 +$as_echo "$MYSQL_CFLAGS" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL libraries" >&5 +$as_echo_n "checking MySQL libraries... " >&6; } +if test -z "$MYSQL_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find MySQL libraries. + +Check that you do have MySQL libraries installed. +The package name is typically 'mysql-devel'. + +If libraries are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify libraries location explicitly, using --with-mysql-libs; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_LIBS" >&5 +$as_echo "$MYSQL_LIBS" >&6; } +fi + + + + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/\-Bdynamic/\-Bstatic/g'` + MYSQL_LIBS="-Wl,-Bstatic $MYSQL_LIBS -Wl,-Bdynamic" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi + +# check if we should compile with PostgreSQL support + +@%:@ Check whether --with-pgsql was given. +if test "${with_pgsql+set}" = set; then : + withval=$with_pgsql; ac_cv_use_pgsql=$withval +else + ac_cv_use_pgsql=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with PostgreSQL support" >&5 +$as_echo_n "checking whether to compile with PostgreSQL support... " >&6; } +if test x$ac_cv_use_pgsql != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# Check for custom includes path +if test -z "$ac_cv_pgsql_includes" +then + +@%:@ Check whether --with-pgsql-includes was given. +if test "${with_pgsql_includes+set}" = set; then : + withval=$with_pgsql_includes; ac_cv_pgsql_includes=$withval +fi + +fi +if test -n "$ac_cv_pgsql_includes" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL includes" >&5 +$as_echo_n "checking PostgreSQL includes... " >&6; } +if ${ac_cv_pgsql_includes+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_pgsql_includes="" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pgsql_includes" >&5 +$as_echo "$ac_cv_pgsql_includes" >&6; } + PGSQL_CFLAGS="-I$ac_cv_pgsql_includes" +fi + +# Check for custom library path +if test -z "$ac_cv_pgsql_libs" +then + +@%:@ Check whether --with-pgsql-libs was given. +if test "${with_pgsql_libs+set}" = set; then : + withval=$with_pgsql_libs; ac_cv_pgsql_libs=$withval +fi + +fi +if test -n "$ac_cv_pgsql_libs" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL libraries" >&5 +$as_echo_n "checking PostgreSQL libraries... " >&6; } +if ${ac_cv_pgsql_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_pgsql_libs="" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pgsql_libs" >&5 +$as_echo "$ac_cv_pgsql_libs" >&6; } + PGSQL_LIBS="-L$ac_cv_pgsql_libs -lpq" +fi + +# If some path is missing, try to autodetermine with pgsql_config +if test -z "$ac_cv_pgsql_includes" -o -z "$ac_cv_pgsql_libs" +then + if test -z "$pgconfig" + then + # Extract the first word of "pg_config", so it can be a program name with args. +set dummy pg_config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_pgconfig+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $pgconfig in + [\\/]* | ?:[\\/]*) + ac_cv_path_pgconfig="$pgconfig" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_pgconfig="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +pgconfig=$ac_cv_path_pgconfig +if test -n "$pgconfig"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgconfig" >&5 +$as_echo "$pgconfig" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + if test -z "$pgconfig" + then + as_fn_error $? "pg_config executable not found +******************************************************************************** +ERROR: cannot find PostgreSQL libraries. If you want to compile with PosgregSQL support, + you must either specify file locations explicitly using + --with-pgsql-includes and --with-pgsql-libs options, or make sure path to + pg_config is listed in your PATH environment variable. If you want to + disable PostgreSQL support, use --without-pgsql option. +******************************************************************************** +" "$LINENO" 5 + else + if test -z "$ac_cv_pgsql_includes" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL C flags" >&5 +$as_echo_n "checking PostgreSQL C flags... " >&6; } + PGSQL_CFLAGS="-I`${pgconfig} --includedir`" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_CFLAGS" >&5 +$as_echo "$PGSQL_CFLAGS" >&6; } + fi + if test -z "$ac_cv_pgsql_libs" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL linker flags" >&5 +$as_echo_n "checking PostgreSQL linker flags... " >&6; } + PGSQL_LIBS="-L`${pgconfig} --libdir` -lpq" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_LIBS" >&5 +$as_echo "$PGSQL_LIBS" >&6; } + fi + fi +fi + + +$as_echo "@%:@define USE_PGSQL 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_pgsql != xno; then + USE_PGSQL_TRUE= + USE_PGSQL_FALSE='#' +else + USE_PGSQL_TRUE='#' + USE_PGSQL_FALSE= +fi + + +# check if we should complie with libmmseg (a mmseg Chinese Segmenter) support + +@%:@ Check whether --with-mmseg was given. +if test "${with_mmseg+set}" = set; then : + withval=$with_mmseg; ac_cv_use_mmseg=$withval +else + ac_cv_use_mmseg=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with libmmseg support" >&5 +$as_echo_n "checking whether to compile with libmmseg support... " >&6; } +if test x$ac_cv_use_mmseg != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MMSEG_CFLAGS" +then + for CANDIDATE in "$user_mmseg_includes" "/usr/local/include/mmseg" "/usr/include/mmseg" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/Segmenter.h" + then + MMSEG_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MMSEG_LIBS" +then + for CANDIDATE in "$user_mmseg_libs" "/usr/lib64" \ + "/usr/local/lib" "/usr/local/mmseg/lib" \ + "/usr/local/lib/mmseg" "/usr/lib" \ + "/opt/mmseg/lib" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MMSEG_LIBS="-L$CANDIDATE -lmmseg" + break + fi + done +fi + + + +# apply explicit include path overrides + +@%:@ Check whether --with-mmseg-includes was given. +if test "${with_mmseg_includes+set}" = set; then : + withval=$with_mmseg_includes; ac_cv_mmseg_includes=$withval +fi + +if test -n "$ac_cv_mmseg_includes" +then + MMSEG_CFLAGS="-I$ac_cv_mmseg_includes" +fi + + +# apply explicit lib path overrides + +@%:@ Check whether --with-mmseg-libs was given. +if test "${with_mmseg_libs+set}" = set; then : + withval=$with_mmseg_libs; ac_cv_mmseg_libs=$withval +fi + +if test -n "$ac_cv_mmseg_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mmseg_libs=`echo ${ac_cv_mmseg_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MMSEG_LIBS="-L$ac_cv_mmseg_libs -lmmseg" +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking libmmseg include files" >&5 +$as_echo_n "checking libmmseg include files... " >&6; } +if test -z "$MMSEG_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find libmmseg include files. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MMSEG_CFLAGS" >&5 +$as_echo "$MMSEG_CFLAGS" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking libmmseg libraries" >&5 +$as_echo_n "checking libmmseg libraries... " >&6; } +if test -z "$MMSEG_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find libmmseg libraries. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MMSEG_LIBS" >&5 +$as_echo "$MMSEG_LIBS" >&6; } +fi + + + +$as_echo "@%:@define USE_MMSEG 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_mmseg != xno; then + USE_MMSEG_TRUE= + USE_MMSEG_FALSE='#' +else + USE_MMSEG_TRUE='#' + USE_MMSEG_FALSE= +fi + + +# add macports include directory +if (echo $MYSQL_LIBS | grep -q -- -L/opt/local/lib); then + MYSQL_CFLAGS="$MYSQL_CFLAGS -I/opt/local/include" +fi + +# we can now set preprocessor flags for both C and C++ compilers +CPPFLAGS="$CPPFLAGS $MYSQL_CFLAGS $PGSQL_CFLAGS $MMSEG_CFLAGS" + + if test x"$USE_PYTHON" = xDO; then + USE_PYTHON_TRUE= + USE_PYTHON_FALSE='#' +else + USE_PYTHON_TRUE='#' + USE_PYTHON_FALSE= +fi + +CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" +LIBS="$LIBS $PYTHON_LIBS" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use 64-bit document/word IDs" >&5 +$as_echo_n "checking whether to use 64-bit document/word IDs... " >&6; } +sph_enable_id64=no +@%:@ Check whether --enable-id64 was given. +if test "${enable_id64+set}" = set; then : + enableval=$enable_id64; sph_enable_id64=$enableval +fi + +if test x$sph_enable_id64 != xno; then + +$as_echo "@%:@define USE_64BIT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + +$as_echo "@%:@define USE_64BIT 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +@%:@ Check whether --with-libstemmer was given. +if test "${with_libstemmer+set}" = set; then : + withval=$with_libstemmer; ac_cv_use_libstemmer=$withval +else + ac_cv_use_libstemmer=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with libstemmer support" >&5 +$as_echo_n "checking whether to compile with libstemmer support... " >&6; } +if test x$ac_cv_use_libstemmer != xno; then + if test -d libstemmer_c && test -f libstemmer_c/include/libstemmer.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "@%:@define USE_LIBSTEMMER 1" >>confdefs.h + + else + as_fn_error $? "missing libstemmer sources from libstemmer_c. + +Please download the C version of libstemmer library from +http://snowball.tartarus.org/ and extract its sources over libstemmer_c/ +subdirectory in order to build Sphinx with libstemmer support. +" "$LINENO" 5 + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "@%:@define USE_LIBSTEMMER 0" >>confdefs.h + +fi + if test x$ac_cv_use_libstemmer != xno; then + USE_LIBSTEMMER_TRUE= + USE_LIBSTEMMER_FALSE='#' +else + USE_LIBSTEMMER_TRUE='#' + USE_LIBSTEMMER_FALSE= +fi + + + +got_expat=0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5 +$as_echo_n "checking for libexpat... " >&6; } +if test $have_expat_h = yes -a $have_libexpat = yes ; then + +$as_echo "@%:@define USE_LIBEXPAT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + got_expat=1 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlpipe2 will NOT be available" >&5 +$as_echo "$as_me: WARNING: xmlpipe2 will NOT be available" >&2;} +fi + + + +@%:@ Check whether --with-iconv was given. +if test "${with_iconv+set}" = set; then : + withval=$with_iconv; ac_cv_use_iconv=$withval +else + ac_cv_use_iconv=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiconv" >&5 +$as_echo_n "checking for libiconv... " >&6; } +if test $have_iconv_h = yes \ + -a $have_libiconv = yes \ + -a $got_expat -eq 1 \ + -a $ac_cv_use_iconv != no ; \ +then + +$as_echo "@%:@define USE_LIBICONV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv() arg types" >&5 +$as_echo_n "checking for iconv() arg types... " >&6; } + 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ +const char * inbuf; + iconv_t cd; + iconv ( cd, &inbuf, NULL, NULL, NULL ); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + iconv_inbuf_const=yes +else + iconv_inbuf_const=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 + + if test $iconv_inbuf_const = yes ; then + +$as_echo "@%:@define ICONV_INBUF_CONST 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: const char **" >&5 +$as_echo "const char **" >&6; } + else + +$as_echo "@%:@define ICONV_INBUF_CONST 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: char **" >&5 +$as_echo "char **" >&6; } + fi +else + if test $got_expat -eq 1 ; then + if test $ac_cv_use_iconv = no ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlpipe2 will only support default encodings (latin-1, utf-8)" >&5 +$as_echo "$as_me: WARNING: xmlpipe2 will only support default encodings (latin-1, utf-8)" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not required" >&5 +$as_echo "not required" >&6; } + fi +fi + + +if test $have_zlib_h = yes -a $have_lz = yes ; then + +$as_echo "@%:@define USE_ZLIB 1" >>confdefs.h + +fi + + + +@%:@ Check whether --with-unixodbc was given. +if test "${with_unixodbc+set}" = set; then : + withval=$with_unixodbc; ac_cv_use_unixodbc=$withval +else + ac_cv_use_unixodbc=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UnixODBC" >&5 +$as_echo_n "checking for UnixODBC... " >&6; } +if test $ac_cv_use_unixodbc != no ; then + if test $have_sql_h = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing SQLConnect" >&5 +$as_echo_n "checking for library containing SQLConnect... " >&6; } +if ${ac_cv_search_SQLConnect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SQLConnect (); +int +main () +{ +return SQLConnect (); + ; + return 0; +} +_ACEOF +for ac_lib in '' odbc iodbc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_SQLConnect=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_SQLConnect+:} false; then : + break +fi +done +if ${ac_cv_search_SQLConnect+:} false; then : + +else + ac_cv_search_SQLConnect=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SQLConnect" >&5 +$as_echo "$ac_cv_search_SQLConnect" >&6; } +ac_res=$ac_cv_search_SQLConnect +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libodbc=yes +else + have_libodbc=no +fi + + if test $have_libodbc = yes ; then + +$as_echo "@%:@define USE_ODBC 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ODBC source support will NOT be available" >&5 +$as_echo "$as_me: WARNING: ODBC source support will NOT be available" >&2;} + fi + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi + + + + +@%:@ Check whether --with-syslog was given. +if test "${with_syslog+set}" = set; then : + withval=$with_syslog; ac_cv_use_syslog=$withval +else + ac_cv_use_syslog=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Syslog" >&5 +$as_echo_n "checking for Syslog... " >&6; } +if test $ac_cv_use_syslog != no ; then + if test $have_syslog_h = yes ; then + +$as_echo "@%:@define USE_SYSLOG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unaligned RAM access" >&5 +$as_echo_n "checking for unaligned RAM access... " >&6; } +if ${sphinx_cv_unaligned_ram_access+:} false; then : + $as_echo_n "(cached) " >&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 + +if test "$cross_compiling" = yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown (cross-compiling), assume no" >&5 +$as_echo "unknown (cross-compiling), assume no" >&6; } + sphinx_cv_unaligned_ram_access=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ +char * sBuf = new char [ 8*sizeof(int) ]; + for ( int i=0; i<8*sizeof(int); i++ ) + sBuf[i] = i; + + // check for crashes (SPARC) + volatile int iRes = 0; + for ( int i=0; i<(int)sizeof(int); i++ ) + { + int * pPtr = (int*)( sBuf+i ); + iRes += *pPtr; + } + + // check for correct values (ARM) + iRes = *(int*)( sBuf+1 ); + if (!( iRes==0x01020304 || iRes==0x04030201 )) + return 1; + // all seems ok + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + sphinx_cv_unaligned_ram_access=yes +else + sphinx_cv_unaligned_ram_access=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_unaligned_ram_access" >&5 +$as_echo "$sphinx_cv_unaligned_ram_access" >&6; } + +if test x$sphinx_cv_unaligned_ram_access = xyes ; then + +$as_echo "@%:@define UNALIGNED_RAM_ACCESS 1" >>confdefs.h + +else + $as_echo "@%:@define UNALIGNED_RAM_ACCESS 0" >>confdefs.h + +fi + +# check endianness + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + +$as_echo "@%:@define USE_LITTLE_ENDIAN 0" >>confdefs.h +;; #( + no) + +$as_echo "@%:@define USE_LITTLE_ENDIAN 1" >>confdefs.h + ;; #( + universal) + as_fn_error $? "universial endianess not supported" "$LINENO" 5 + + ;; #( + *) + as_fn_error $? "unknown endianess not supported" "$LINENO" 5 ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: generating configuration files" >&5 +$as_echo "generating configuration files" >&6; } + TMP=`echo generating configuration files | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +if test "$prefix" = "NONE"; then + my_op_prefix="/var" +else + my_op_prefix="$localstatedir" +fi + + +CONFDIR=`eval echo "${my_op_prefix}"` + + +ac_config_files="$ac_config_files Makefile src/Makefile libstemmer_c/Makefile doc/Makefile sphinx.conf.dist:sphinx.conf.in sphinx-min.conf.dist:sphinx-min.conf.in" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+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 + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_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= +U= +for ac_i in : $LIB@&t@OBJS; 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=`$as_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. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_MYSQL_TRUE}" && test -z "${USE_MYSQL_FALSE}"; then + as_fn_error $? "conditional \"USE_MYSQL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PGSQL_TRUE}" && test -z "${USE_PGSQL_FALSE}"; then + as_fn_error $? "conditional \"USE_PGSQL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_MMSEG_TRUE}" && test -z "${USE_MMSEG_FALSE}"; then + as_fn_error $? "conditional \"USE_MMSEG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then + as_fn_error $? "conditional \"USE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_LIBSTEMMER_TRUE}" && test -z "${USE_LIBSTEMMER_FALSE}"; then + as_fn_error $? "conditional \"USE_LIBSTEMMER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +sphinx config.status 1.11 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config/config.h") CONFIG_HEADERS="$CONFIG_HEADERS config/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "libstemmer_c/Makefile") CONFIG_FILES="$CONFIG_FILES libstemmer_c/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "sphinx.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx.conf.dist:sphinx.conf.in" ;; + "sphinx-min.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx-min.conf.dist:sphinx-min.conf.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: configuration done" >&5 +$as_echo "configuration done" >&6; } + TMP=`echo configuration done | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +echo "You can now run 'make install' to build and install Sphinx binaries." +echo "On a multi-core machine, try 'make -j4 install' to speed up the build." +echo +echo "Updates, articles, help forum, and commercial support, consulting, training," +echo "and development services are available at http://sphinxsearch.com/" +echo +echo "Thank you for choosing Sphinx!" +echo diff --git a/coreseek/csft-4.1/autom4te.cache/output.2 b/coreseek/csft-4.1/autom4te.cache/output.2 new file mode 100644 index 0000000..ccf70b5 --- /dev/null +++ b/coreseek/csft-4.1/autom4te.cache/output.2 @@ -0,0 +1,9854 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.68 for sphinx 1.11. +@%:@ +@%:@ Report bugs to . +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in @%:@ (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: shodan(at)shodan.ru about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +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='mkdir -p "$as_dir"' +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'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='sphinx' +PACKAGE_TARNAME='sphinx' +PACKAGE_VERSION='1.11' +PACKAGE_STRING='sphinx 1.11' +PACKAGE_BUGREPORT='shodan(at)shodan.ru' +PACKAGE_URL='' + +ac_unique_file="src/searchd.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +CONFDIR +USE_LIBSTEMMER_FALSE +USE_LIBSTEMMER_TRUE +USE_PYTHON_FALSE +USE_PYTHON_TRUE +USE_MMSEG_FALSE +USE_MMSEG_TRUE +MMSEG_CFLAGS +MMSEG_LIBS +USE_PGSQL_FALSE +USE_PGSQL_TRUE +PGSQL_CFLAGS +PGSQL_LIBS +pgconfig +USE_MYSQL_FALSE +USE_MYSQL_TRUE +MYSQL_CFLAGS +MYSQL_LIBS +LIBRT +LIB@&t@OBJS +EGREP +GREP +CPP +PYTHON_LIBS +PYTHON_CPPFLAGS +RANLIB +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +with_debug +enable_dependency_tracking +with_python +with_mysql +with_mysql_includes +with_mysql_libs +with_static_mysql +with_pgsql +with_pgsql_includes +with_pgsql_libs +with_mmseg +with_mmseg_includes +with_mmseg_libs +enable_id64 +with_libstemmer +with_iconv +with_unixodbc +with_syslog +' + ac_precious_vars='build_alias +host_alias +target_alias +PYTHON +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_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'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_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 .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures sphinx 1.11 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 + @<:@@S|@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/sphinx@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of sphinx 1.11:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-id64 use 64-bit document and word IDs (default is no) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-debug compile slower debug version (default is disabled) + --with-python Embedded Python datasource support @<:@no@:>@ + --with-mysql compile with MySQL support (default is enabled) + --with-mysql-includes path to MySQL header files + --with-mysql-libs path to MySQL libraries + --with-static-mysql link statically with MySQL library (default is no) + --with-pgsql compile with PostgreSQL support (default is + disabled) + --with-pgsql-includes path to PostgreSQL header files + --with-pgsql-libs path to PostgreSQL libraries + --with-mmseg compile with libmmseg, a mmseg Chinese Segmenter + support (default is enabled) + --with-mmseg-includes path to libmmseg header files + --with-mmseg-libs path to libmmseg libraries + --with-libstemmer compile with libstemmer support (default is + disabled) + --with-iconv compile with iconv support (default is autodetect) + --with-unixodbc compile with UnixODBC support (default is + autodetect) + --with-syslog compile with possibility to use syslog for logging + (default is no) + +Some influential environment variables: + PYTHON the Python interpreter + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + $as_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 +sphinx configure 1.11 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ---------------------------------- ## +## Report this to shodan(at)shodan.ru ## +## ---------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_mongrel + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES +@%:@ ------------------------------------------- +@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache +@%:@ variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +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 +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_type + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_run LINENO +@%:@ ------------------------ +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_run +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 sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. 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=. + $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_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'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > 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 + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in @%:@(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_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,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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 + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_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. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking build environment" >&5 +$as_echo "checking build environment" >&6; } + TMP=`echo checking build environment | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='sphinx' + VERSION='1.11' + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + @%:@ Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + + + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + +ac_config_headers="$ac_config_headers config/config.h" + + +# hack to locate expat/iconv in /usr/local on BSD systems +CPPFLAGS="$CPPFLAGS -I/usr/local/include" +LIBS="$LIBS -L/usr/local/lib" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for compiler programs" >&5 +$as_echo "checking for compiler programs" >&6; } + TMP=`echo checking for compiler programs | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + + +@%:@ Check whether --with-debug was given. +if test "${with_debug+set}" = set; then : + withval=$with_debug; ac_cv_use_debug=$withval +else + ac_cv_use_debug=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile debug version" >&5 +$as_echo_n "checking whether to compile debug version... " >&6; } +if test x$ac_cv_use_debug != xno; then + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +if test x$ac_env_CFLAGS_set != xset; then + CFLAGS=$SPHINX_CFLAGS +else + CFLAGS="$CFLAGS $SPHINX_INJECT_FLAGS" +fi + +if test x$ac_env_CXXFLAGS_set != xset; then + CXXFLAGS=$SPHINX_CFLAGS +else + CXXFLAGS="$CXXFLAGS $SPHINX_INJECT_FLAGS" +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+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 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$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 + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + + +@%:@ Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; case $withval in + yes) USE_PYTHON=DO + +$as_echo "@%:@define USE_PYTHON 1" >>confdefs.h + + ;; + no) USE_PYTHON=DONT ;; + *) as_fn_error $? "invalid argument to --with-python" "$LINENO" 5 ;; + esac +else + USE_PYTHON=DONT +fi + + +if test x"$USE_PYTHON" = xDO ; then + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test x"${PYTHON}" = x ; then + as_fn_error $? "python was not found in path and is required" "$LINENO" 5 +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python linkage" >&5 +$as_echo_n "checking for Python linkage... " >&6; } + py_prefix=`$PYTHON -c 'import sys; print sys.prefix'` + py_ver=`$PYTHON -c 'import sys; print sys.version[:3]'` + py_libdir="$py_prefix/lib/python$py_ver" + PYTHON_CPPFLAGS="-I$py_prefix/include/python$py_ver" + py_linkage="" + for py_linkpart in LIBS LIBC LIBM LOCALMODLIBS BASEMODLIBS \ + LINKFORSHARED LDFLAGS ; do + py_linkage="$py_linkage "`grep "^${py_linkpart}=" \ + $py_libdir/config/Makefile \ + | sed -e 's/^.*=//'` + done + PYTHON_LIBS="-L$py_libdir/config -lpython$py_ver " + PYTHON_LIBS=`echo $PYTHON_LIBS | sed -e 's/ \\t*/ /g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $py_libdir" >&5 +$as_echo "$py_libdir" >&6; } +else + PYTHON_CPPFLAGS= + PYTHON_LIBS= +fi + + + + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __GNUC__ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3) +void main() {} +#else +syntax error +#endif +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + as_fn_error $? "Gcc version error. Minspec is 3.4" "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +cat >>confdefs.h <<_ACEOF +@%:@define COMPILER "$CC `$CC -dumpversion`" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define OS_UNAME "`uname -a`" +_ACEOF + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for header files" >&5 +$as_echo "checking for header files" >&6; } + TMP=`echo checking for header files | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for header files. +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "@%:@define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/file.h sys/socket.h sys/time.h unistd.h pthread.h execinfo.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_fn_c_check_header_mongrel "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default" +if test "x$ac_cv_header_expat_h" = xyes; then : + have_expat_h=yes +else + have_expat_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" +if test "x$ac_cv_header_iconv_h" = xyes; then : + have_iconv_h=yes +else + have_iconv_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + have_zlib_h=yes +else + have_zlib_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "sql.h" "ac_cv_header_sql_h" "$ac_includes_default" +if test "x$ac_cv_header_sql_h" = xyes; then : + have_sql_h=yes +else + have_sql_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" +if test "x$ac_cv_header_syslog_h" = xyes; then : + have_syslog_h=yes +else + have_syslog_h=no +fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for types" >&5 +$as_echo "checking for types" >&6; } + TMP=`echo checking for types | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for typedefs, structures, and compiler characteristics. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } +ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE__BOOL 1 +_ACEOF + + +fi + +if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "@%:@define HAVE_STDBOOL_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "@%:@define const /**/" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define off_t long int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define size_t unsigned int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if ${ac_cv_header_time+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +$as_echo "@%:@define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for library functions" >&5 +$as_echo "checking for library functions" >&6; } + TMP=`echo checking for library functions | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for library functions. +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define pid_t int +_ACEOF + +fi + +for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if ${ac_cv_func_fork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if ${ac_cv_func_vfork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include +#ifdef HAVE_VFORK_H +# include +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include , but some compilers + (e.g. gcc -O) don't grok . Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "@%:@define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "@%:@define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "@%:@define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "@%:@define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "@%:@define HAVE_MALLOC 0" >>confdefs.h + + case " $LIB@&t@OBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "@%:@define malloc rpl_malloc" >>confdefs.h + +fi + + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 +$as_echo_n "checking for GNU libc compatible realloc... " >&6; } +if ${ac_cv_func_realloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_realloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *realloc (); +#endif + +int +main () +{ +return ! realloc (0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_realloc_0_nonnull=yes +else + ac_cv_func_realloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } +if test $ac_cv_func_realloc_0_nonnull = yes; then : + +$as_echo "@%:@define HAVE_REALLOC 1" >>confdefs.h + +else + $as_echo "@%:@define HAVE_REALLOC 0" >>confdefs.h + + case " $LIB@&t@OBJS " in + *" realloc.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS realloc.$ac_objext" + ;; +esac + + +$as_echo "@%:@define realloc rpl_realloc" >>confdefs.h + +fi + + +for ac_header in sys/select.h sys/socket.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 +$as_echo_n "checking types of arguments for select... " >&6; } +if ${ac_cv_func_select_args+:} false; then : + $as_echo_n "(cached) " >&6 +else + for ac_arg234 in 'fd_set *' 'int *' 'void *'; do + for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do + for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#ifdef HAVE_SYS_SELECT_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif + +int +main () +{ +extern int select ($ac_arg1, + $ac_arg234, $ac_arg234, $ac_arg234, + $ac_arg5); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + done +done +# Provide a safe default value. +: "${ac_cv_func_select_args=int,int *,struct timeval *}" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 +$as_echo "$ac_cv_func_select_args" >&6; } +ac_save_IFS=$IFS; IFS=',' +set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` +IFS=$ac_save_IFS +shift + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG1 $1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG234 ($2) +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define SELECT_TYPE_ARG5 ($3) +_ACEOF + +rm -f conftest* + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +$as_echo_n "checking return type of signal handlers... " >&6; } +if ${ac_cv_type_signal+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_signal=int +else + ac_cv_type_signal=void +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +$as_echo "$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +@%:@define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +@%:@define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIB@&t@OBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS lstat.$ac_objext" + ;; +esac + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 +$as_echo_n "checking whether stat accepts an empty string... " >&6; } +if ${ac_cv_func_stat_empty_string_bug+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_stat_empty_string_bug=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + return stat ("", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_stat_empty_string_bug=no +else + ac_cv_func_stat_empty_string_bug=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 +$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } +if test $ac_cv_func_stat_empty_string_bug = yes; then + case " $LIB@&t@OBJS " in + *" stat.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS stat.$ac_objext" + ;; +esac + + +cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STAT_EMPTY_STRING_BUG 1 +_ACEOF + +fi + +for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VPRINTF 1 +_ACEOF + +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = xyes; then : + +$as_echo "@%:@define HAVE_DOPRNT 1" >>confdefs.h + +fi + +fi +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 +$as_echo_n "checking for library containing setsockopt... " >&6; } +if ${ac_cv_search_setsockopt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char setsockopt (); +int +main () +{ +return setsockopt (); + ; + return 0; +} +_ACEOF +for ac_lib in '' socket; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_setsockopt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_setsockopt+:} false; then : + break +fi +done +if ${ac_cv_search_setsockopt+:} false; then : + +else + ac_cv_search_setsockopt=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5 +$as_echo "$ac_cv_search_setsockopt" >&6; } +ac_res=$ac_cv_search_setsockopt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5 +$as_echo_n "checking for library containing gethostbyname... " >&6; } +if ${ac_cv_search_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +for ac_lib in '' nsl socket resolv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gethostbyname=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_gethostbyname+:} false; then : + break +fi +done +if ${ac_cv_search_gethostbyname+:} false; then : + +else + ac_cv_search_gethostbyname=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 +$as_echo "$ac_cv_search_gethostbyname" >&6; } +ac_res=$ac_cv_search_gethostbyname +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XML_Parse" >&5 +$as_echo_n "checking for library containing XML_Parse... " >&6; } +if ${ac_cv_search_XML_Parse+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XML_Parse (); +int +main () +{ +return XML_Parse (); + ; + return 0; +} +_ACEOF +for ac_lib in '' expat; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_XML_Parse=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_XML_Parse+:} false; then : + break +fi +done +if ${ac_cv_search_XML_Parse+:} false; then : + +else + ac_cv_search_XML_Parse=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XML_Parse" >&5 +$as_echo "$ac_cv_search_XML_Parse" >&6; } +ac_res=$ac_cv_search_XML_Parse +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libexpat=yes +else + have_libexpat=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv" >&5 +$as_echo_n "checking for library containing iconv... " >&6; } +if ${ac_cv_search_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char iconv (); +int +main () +{ +return iconv (); + ; + return 0; +} +_ACEOF +for ac_lib in '' iconv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_iconv=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_iconv+:} false; then : + break +fi +done +if ${ac_cv_search_iconv+:} false; then : + +else + ac_cv_search_iconv=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv" >&5 +$as_echo "$ac_cv_search_iconv" >&6; } +ac_res=$ac_cv_search_iconv +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libiconv=yes +else + have_libiconv=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflate" >&5 +$as_echo_n "checking for library containing inflate... " >&6; } +if ${ac_cv_search_inflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflate (); +int +main () +{ +return inflate (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_inflate=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_inflate+:} false; then : + break +fi +done +if ${ac_cv_search_inflate+:} false; then : + +else + ac_cv_search_inflate=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflate" >&5 +$as_echo "$ac_cv_search_inflate" >&6; } +ac_res=$ac_cv_search_inflate +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_lz=yes +else + have_lz=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing logf" >&5 +$as_echo_n "checking for library containing logf... " >&6; } +if ${ac_cv_search_logf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char logf (); +int +main () +{ +return logf (); + ; + return 0; +} +_ACEOF +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_logf=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_logf+:} false; then : + break +fi +done +if ${ac_cv_search_logf+:} false; then : + +else + ac_cv_search_logf=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_logf" >&5 +$as_echo "$ac_cv_search_logf" >&6; } +ac_res=$ac_cv_search_logf +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +for ac_func in dup2 gethostbyname gettimeofday memmove memset select socket strcasecmp strchr strerror strncasecmp strstr strtol logf pread +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +for ac_func in backtrace backtrace_symbols +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# most systems require the program be linked with librt library to use +# the function clock_gettime +my_save_LIBS="$LIBS" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_clock_gettime=yes +else + ac_cv_lib_rt_clock_gettime=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBRT 1 +_ACEOF + + LIBS="-lrt $LIBS" + +fi + + +LIBRT=$LIBS +LIBS="$my_save_LIBS" + + +LIBS="$LIBS $LIBRT" +for ac_func in clock_gettime +do : + ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" +if test "x$ac_cv_func_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_CLOCK_GETTIME 1 +_ACEOF + +fi +done + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LOCK_EX in sys/file.h" >&5 +$as_echo_n "checking for LOCK_EX in sys/file.h... " >&6; } +if ${ac_cv_define_LOCK_EX+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef LOCK_EX +YES_IS_DEFINED +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + ac_cv_define_LOCK_EX=yes +else + ac_cv_define_LOCK_EX=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_define_LOCK_EX" >&5 +$as_echo "$ac_cv_define_LOCK_EX" >&6; } + if test "$ac_cv_define_LOCK_EX" = "yes"; then + +$as_echo "@%:@define HAVE_LOCK_EX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for F_SETLKW in fcntl.h" >&5 +$as_echo_n "checking for F_SETLKW in fcntl.h... " >&6; } +if ${ac_cv_define_F_SETLKW+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef F_SETLKW +YES_IS_DEFINED +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + ac_cv_define_F_SETLKW=yes +else + ac_cv_define_F_SETLKW=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_define_F_SETLKW" >&5 +$as_echo "$ac_cv_define_F_SETLKW" >&6; } + if test "$ac_cv_define_F_SETLKW" = "yes"; then + +$as_echo "@%:@define HAVE_F_SETLKW 1" >>confdefs.h + + fi + + +# check for dlopen +# FIXME! technically, only needed in searchd +# but as UDF manager is curently in libsphinx, we link everything +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +for ac_func in dlopen dlerror +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: configuring Sphinx" >&5 +$as_echo "configuring Sphinx" >&6; } + TMP=`echo configuring Sphinx | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + + +# check for pthreads + +pthread_prog=" +#include +#include + +void * thread_routine ( void * data ) +{ + return data; +} + +int main () +{ + pthread_t thd; + pthread_mutexattr_t mattr; + pthread_once_t once_init = PTHREAD_ONCE_INIT; + int data = 1; + + pthread_mutexattr_init ( &mattr ); + return pthread_create ( &thd, NULL, thread_routine, &data ); +} +" + + + + + + +# check for needed cflags +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLAGS needed for pthreads" >&5 +$as_echo_n "checking for CFLAGS needed for pthreads... " >&6; } +if ${sphinx_cv_pthreads_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else + + save_cflags=$CFLAGS + for flag in none -kthread -pthread -pthreads -mt -mthreads -Kthread -threads; do + CFLAGS=$save_cflags + test "x$flag" != "xnone" && CFLAGS="$CFLAGS $flag" + +if test x$cross_compiling = xno ; then + if test "$cross_compiling" = yes; then : + pthreads_try_run=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + pthreads_try_run=yes +else + pthreads_try_run=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$pthreads_try_run = xyes ; then + + sphinx_cv_pthreads_cflags="$flag" + break + + fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + pthreads_try_compile=yes +else + pthreads_try_compile=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$pthreads_try_compile = xyes ; then + + sphinx_cv_pthreads_cflags="$flag" + break + + fi +fi + + done + CFLAGS=$save_cflags + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_pthreads_cflags" >&5 +$as_echo "$sphinx_cv_pthreads_cflags" >&6; } + +if test -n "$sphinx_cv_pthreads_cflags"; then + have_pthreads=yes + if test "x$sphinx_cv_pthreads_cflags" != "xnone"; then + CPPFLAGS="$CPPFLAGS $sphinx_cv_pthreads_cflags" + fi +fi + +# check for needed libs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBS needed for pthreads" >&5 +$as_echo_n "checking for LIBS needed for pthreads... " >&6; } +if ${sphinx_cv_pthreads_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + + save_libs=$LIBS + for lib in -lpthread -lpthreads -lc_r; do + LIBS="$save_libs $lib" + +if test x$cross_compiling = xno ; then + if test "$cross_compiling" = yes; then : + pthreads_try_run=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + pthreads_try_run=yes +else + pthreads_try_run=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$pthreads_try_run = xyes ; then + + sphinx_cv_pthreads_libs=$lib + break + + fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pthreads_try_link=yes +else + pthreads_try_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test x$pthreads_try_link = xyes ; then + + sphinx_cv_pthreads_libs=$lib + break + + fi +fi + + done + LIBS=$save_libs + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_pthreads_libs" >&5 +$as_echo "$sphinx_cv_pthreads_libs" >&6; } + +if test -n "$sphinx_cv_pthreads_libs"; then + have_pthreads=yes + LIBS="$LIBS $sphinx_cv_pthreads_libs" +fi + +# final check +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthreads" >&5 +$as_echo_n "checking for pthreads... " >&6; } +if test x$have_pthreads = xyes; then + if test x$cross_compiling = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: assumed as found (cross-compiling)" >&5 +$as_echo "assumed as found (cross-compiling)" >&6; } + fi +else + as_fn_error $? "no working pthreads library found" "$LINENO" 5 +fi + +for ac_func in pthread_mutex_timedlock +do : + ac_fn_c_check_func "$LINENO" "pthread_mutex_timedlock" "ac_cv_func_pthread_mutex_timedlock" +if test "x$ac_cv_func_pthread_mutex_timedlock" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 +_ACEOF + +fi +done + + + +# check if we should compile with MySQL support + +@%:@ Check whether --with-mysql was given. +if test "${with_mysql+set}" = set; then : + withval=$with_mysql; ac_cv_use_mysql=$withval +else + ac_cv_use_mysql=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with MySQL support" >&5 +$as_echo_n "checking whether to compile with MySQL support... " >&6; } +if test x$ac_cv_use_mysql != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +mysqlconfig_locations="mysql_config /usr/bin/mysql_config /usr/local/bin/mysql_config /usr/local/mysql/bin/mysql_config /opt/mysql/bin/mysql_config /usr/pkg/bin/mysql_config" +user_mysql_includes= +user_mysql_libs= + +# check explicit MySQL root for mysql_config, include, lib +if test x$ac_cv_use_mysql != xyes -a x$ac_cv_use_mysql != xno +then + mysqlroot=`echo $ac_cv_use_mysql | sed -e 's+/$++'` + if test -x "$mysqlroot/bin/mysql_config" + then + # if there's mysql_config, that's the best route + mysqlconfig_locations="$mysqlroot/bin/mysql_config" + elif test -d "$mysqlroot/include" -a -d "$mysqlroot/lib" + then + # explicit root; do not check well-known paths + mysqlconfig_locations= + + # includes + if test -d "$mysqlroot/include/mysql" + then + user_mysql_includes="$mysqlroot/include/mysql" + else + user_mysql_includes="$mysqlroot/include" + fi + + # libs + if test -d "$mysqlroot/lib/mysql" + then + user_mysql_libs="$mysqlroot/lib/mysql" + else + user_mysql_libs="$mysqlroot/lib" + fi + else + as_fn_error $? "invalid MySQL root directory '$mysqlroot'; neither bin/mysql_config, nor include/ and lib/ were found there" "$LINENO" 5 + fi +fi + + +# try running mysql_config +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_config" >&5 +$as_echo_n "checking for mysql_config... " >&6; } +for mysqlconfig in $mysqlconfig_locations +do + if test -n "$mysqlconfig" + then + MYSQL_CFLAGS=`${mysqlconfig} --cflags 2>/dev/null` + MYSQL_LIBS=`${mysqlconfig} --libs 2>/dev/null` + + if test $? -eq 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mysqlconfig" >&5 +$as_echo "$mysqlconfig" >&6; } + mysqlconfig= + break + else + MYSQL_CFLAGS= + MYSQL_LIBS= + fi + fi +done +if test -n "$mysqlconfig" +then + mysqlconfig_used= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +else + mysqlconfig_used=yes +fi + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MYSQL_CFLAGS" +then + for CANDIDATE in "$user_mysql_includes" "/usr/local/mysql/include" "/usr/local/mysql/include/mysql" \ + "/usr/include/mysql" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/mysql.h" + then + MYSQL_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MYSQL_LIBS" +then + for CANDIDATE in "$user_mysql_libs" "/usr/lib64/mysql" \ + "/usr/local/mysql/lib/mysql" "/usr/local/mysql/lib" \ + "/usr/local/lib/mysql" "/usr/lib/mysql" \ + "/opt/mysql/lib/mysql" "/usr/pkg/lib/mysql" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MYSQL_LIBS="-L$CANDIDATE -lmysqlclient -lz" + break + fi + done +fi + + +# apply explicit include path overrides + +@%:@ Check whether --with-mysql-includes was given. +if test "${with_mysql_includes+set}" = set; then : + withval=$with_mysql_includes; ac_cv_mysql_includes=$withval +fi + +if test -n "$ac_cv_mysql_includes" +then + MYSQL_CFLAGS="-I$ac_cv_mysql_includes" +fi + + +# apply explicit lib path overrides + +@%:@ Check whether --with-mysql-libs was given. +if test "${with_mysql_libs+set}" = set; then : + withval=$with_mysql_libs; ac_cv_mysql_libs=$withval +fi + +if test -n "$ac_cv_mysql_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mysql_libs=`echo ${ac_cv_mysql_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MYSQL_LIBS="-L$ac_cv_mysql_libs -lmysqlclient -lz" +fi + +# if we got options from mysqlconfig try to actually use them +if test -n "$mysqlconfig_used" -a -n "$MYSQL_CFLAGS" -a -n "$MYSQL_LIBS" +then + _CFLAGS=$CFLAGS + _LIBS=$LIBS + + CFLAGS="$CFLAGS $MYSQL_CFLAGS" + LIBS="$LIBS $MYSQL_LIBS" + + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # if mysql binary was built using a different compiler and we + # got options from mysql_config some of them might not work + # with compiler we will be using + + # throw away everything that isn't one of -D -L -I -l and retry + MYSQL_CFLAGS=`echo $MYSQL_CFLAGS | sed -e 's/-[^DLIl][^ ]*//g'` + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/-[^DLIl][^ ]*//g'` + + CFLAGS="$_CFLAGS $MYSQL_CFLAGS" + LIBS="$_LIBS $MYSQL_LIBS" + + unset ac_cv_func_mysql_real_connect + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # ... that didn't help + # clear flags, the code below will complain + MYSQL_CFLAGS= + MYSQL_LIBS= + +fi + + +fi + + CFLAGS=$_CFLAGS + LIBS=$_LIBS +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL include files" >&5 +$as_echo_n "checking MySQL include files... " >&6; } +if test -z "$MYSQL_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find MySQL include files. + +Check that you do have MySQL include files installed. +The package name is typically 'mysql-devel'. + +If include files are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify includes location explicitly, using --with-mysql-includes; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CFLAGS" >&5 +$as_echo "$MYSQL_CFLAGS" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL libraries" >&5 +$as_echo_n "checking MySQL libraries... " >&6; } +if test -z "$MYSQL_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find MySQL libraries. + +Check that you do have MySQL libraries installed. +The package name is typically 'mysql-devel'. + +If libraries are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify libraries location explicitly, using --with-mysql-libs; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_LIBS" >&5 +$as_echo "$MYSQL_LIBS" >&6; } +fi + + + + +$as_echo "@%:@define USE_MYSQL 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_mysql != xno; then + USE_MYSQL_TRUE= + USE_MYSQL_FALSE='#' +else + USE_MYSQL_TRUE='#' + USE_MYSQL_FALSE= +fi + + +# check if we should statically link the mysql library + +@%:@ Check whether --with-static-mysql was given. +if test "${with_static_mysql+set}" = set; then : + withval=$with_static_mysql; ac_cv_use_static_mysql=$withval +else + ac_cv_use_static_mysql=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to link statically with MySQL support" >&5 +$as_echo_n "checking whether to link statically with MySQL support... " >&6; } +if test x$ac_cv_use_mysql != xno; then +if test x$ac_cv_use_static_mysql != xno; then + + +mysqlconfig_locations="mysql_config /usr/bin/mysql_config /usr/local/bin/mysql_config /usr/local/mysql/bin/mysql_config /opt/mysql/bin/mysql_config /usr/pkg/bin/mysql_config" +user_mysql_includes= +user_mysql_libs= + +# check explicit MySQL root for mysql_config, include, lib +if test x$ac_cv_use_static_mysql != xyes -a x$ac_cv_use_static_mysql != xno +then + mysqlroot=`echo $ac_cv_use_static_mysql | sed -e 's+/$++'` + if test -x "$mysqlroot/bin/mysql_config" + then + # if there's mysql_config, that's the best route + mysqlconfig_locations="$mysqlroot/bin/mysql_config" + elif test -d "$mysqlroot/include" -a -d "$mysqlroot/lib" + then + # explicit root; do not check well-known paths + mysqlconfig_locations= + + # includes + if test -d "$mysqlroot/include/mysql" + then + user_mysql_includes="$mysqlroot/include/mysql" + else + user_mysql_includes="$mysqlroot/include" + fi + + # libs + if test -d "$mysqlroot/lib/mysql" + then + user_mysql_libs="$mysqlroot/lib/mysql" + else + user_mysql_libs="$mysqlroot/lib" + fi + else + as_fn_error $? "invalid MySQL root directory '$mysqlroot'; neither bin/mysql_config, nor include/ and lib/ were found there" "$LINENO" 5 + fi +fi + + +# try running mysql_config +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_config" >&5 +$as_echo_n "checking for mysql_config... " >&6; } +for mysqlconfig in $mysqlconfig_locations +do + if test -n "$mysqlconfig" + then + MYSQL_CFLAGS=`${mysqlconfig} --cflags 2>/dev/null` + MYSQL_LIBS=`${mysqlconfig} --libs 2>/dev/null` + + if test $? -eq 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mysqlconfig" >&5 +$as_echo "$mysqlconfig" >&6; } + mysqlconfig= + break + else + MYSQL_CFLAGS= + MYSQL_LIBS= + fi + fi +done +if test -n "$mysqlconfig" +then + mysqlconfig_used= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +else + mysqlconfig_used=yes +fi + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MYSQL_CFLAGS" +then + for CANDIDATE in "$user_mysql_includes" "/usr/local/mysql/include" "/usr/local/mysql/include/mysql" \ + "/usr/include/mysql" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/mysql.h" + then + MYSQL_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MYSQL_LIBS" +then + for CANDIDATE in "$user_mysql_libs" "/usr/lib64/mysql" \ + "/usr/local/mysql/lib/mysql" "/usr/local/mysql/lib" \ + "/usr/local/lib/mysql" "/usr/lib/mysql" \ + "/opt/mysql/lib/mysql" "/usr/pkg/lib/mysql" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MYSQL_LIBS="-L$CANDIDATE -lmysqlclient -lz" + break + fi + done +fi + + +# apply explicit include path overrides + +@%:@ Check whether --with-mysql-includes was given. +if test "${with_mysql_includes+set}" = set; then : + withval=$with_mysql_includes; ac_cv_mysql_includes=$withval +fi + +if test -n "$ac_cv_mysql_includes" +then + MYSQL_CFLAGS="-I$ac_cv_mysql_includes" +fi + + +# apply explicit lib path overrides + +@%:@ Check whether --with-mysql-libs was given. +if test "${with_mysql_libs+set}" = set; then : + withval=$with_mysql_libs; ac_cv_mysql_libs=$withval +fi + +if test -n "$ac_cv_mysql_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mysql_libs=`echo ${ac_cv_mysql_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MYSQL_LIBS="-L$ac_cv_mysql_libs -lmysqlclient -lz" +fi + +# if we got options from mysqlconfig try to actually use them +if test -n "$mysqlconfig_used" -a -n "$MYSQL_CFLAGS" -a -n "$MYSQL_LIBS" +then + _CFLAGS=$CFLAGS + _LIBS=$LIBS + + CFLAGS="$CFLAGS $MYSQL_CFLAGS" + LIBS="$LIBS $MYSQL_LIBS" + + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # if mysql binary was built using a different compiler and we + # got options from mysql_config some of them might not work + # with compiler we will be using + + # throw away everything that isn't one of -D -L -I -l and retry + MYSQL_CFLAGS=`echo $MYSQL_CFLAGS | sed -e 's/-[^DLIl][^ ]*//g'` + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/-[^DLIl][^ ]*//g'` + + CFLAGS="$_CFLAGS $MYSQL_CFLAGS" + LIBS="$_LIBS $MYSQL_LIBS" + + unset ac_cv_func_mysql_real_connect + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # ... that didn't help + # clear flags, the code below will complain + MYSQL_CFLAGS= + MYSQL_LIBS= + +fi + + +fi + + CFLAGS=$_CFLAGS + LIBS=$_LIBS +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL include files" >&5 +$as_echo_n "checking MySQL include files... " >&6; } +if test -z "$MYSQL_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find MySQL include files. + +Check that you do have MySQL include files installed. +The package name is typically 'mysql-devel'. + +If include files are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify includes location explicitly, using --with-mysql-includes; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CFLAGS" >&5 +$as_echo "$MYSQL_CFLAGS" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL libraries" >&5 +$as_echo_n "checking MySQL libraries... " >&6; } +if test -z "$MYSQL_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find MySQL libraries. + +Check that you do have MySQL libraries installed. +The package name is typically 'mysql-devel'. + +If libraries are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify libraries location explicitly, using --with-mysql-libs; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_LIBS" >&5 +$as_echo "$MYSQL_LIBS" >&6; } +fi + + + + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/\-Bdynamic/\-Bstatic/g'` + MYSQL_LIBS="-Wl,-Bstatic $MYSQL_LIBS -Wl,-Bdynamic" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi + +# check if we should compile with PostgreSQL support + +@%:@ Check whether --with-pgsql was given. +if test "${with_pgsql+set}" = set; then : + withval=$with_pgsql; ac_cv_use_pgsql=$withval +else + ac_cv_use_pgsql=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with PostgreSQL support" >&5 +$as_echo_n "checking whether to compile with PostgreSQL support... " >&6; } +if test x$ac_cv_use_pgsql != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# Check for custom includes path +if test -z "$ac_cv_pgsql_includes" +then + +@%:@ Check whether --with-pgsql-includes was given. +if test "${with_pgsql_includes+set}" = set; then : + withval=$with_pgsql_includes; ac_cv_pgsql_includes=$withval +fi + +fi +if test -n "$ac_cv_pgsql_includes" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL includes" >&5 +$as_echo_n "checking PostgreSQL includes... " >&6; } +if ${ac_cv_pgsql_includes+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_pgsql_includes="" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pgsql_includes" >&5 +$as_echo "$ac_cv_pgsql_includes" >&6; } + PGSQL_CFLAGS="-I$ac_cv_pgsql_includes" +fi + +# Check for custom library path +if test -z "$ac_cv_pgsql_libs" +then + +@%:@ Check whether --with-pgsql-libs was given. +if test "${with_pgsql_libs+set}" = set; then : + withval=$with_pgsql_libs; ac_cv_pgsql_libs=$withval +fi + +fi +if test -n "$ac_cv_pgsql_libs" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL libraries" >&5 +$as_echo_n "checking PostgreSQL libraries... " >&6; } +if ${ac_cv_pgsql_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_pgsql_libs="" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pgsql_libs" >&5 +$as_echo "$ac_cv_pgsql_libs" >&6; } + PGSQL_LIBS="-L$ac_cv_pgsql_libs -lpq" +fi + +# If some path is missing, try to autodetermine with pgsql_config +if test -z "$ac_cv_pgsql_includes" -o -z "$ac_cv_pgsql_libs" +then + if test -z "$pgconfig" + then + # Extract the first word of "pg_config", so it can be a program name with args. +set dummy pg_config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_pgconfig+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $pgconfig in + [\\/]* | ?:[\\/]*) + ac_cv_path_pgconfig="$pgconfig" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_pgconfig="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +pgconfig=$ac_cv_path_pgconfig +if test -n "$pgconfig"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgconfig" >&5 +$as_echo "$pgconfig" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + if test -z "$pgconfig" + then + as_fn_error $? "pg_config executable not found +******************************************************************************** +ERROR: cannot find PostgreSQL libraries. If you want to compile with PosgregSQL support, + you must either specify file locations explicitly using + --with-pgsql-includes and --with-pgsql-libs options, or make sure path to + pg_config is listed in your PATH environment variable. If you want to + disable PostgreSQL support, use --without-pgsql option. +******************************************************************************** +" "$LINENO" 5 + else + if test -z "$ac_cv_pgsql_includes" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL C flags" >&5 +$as_echo_n "checking PostgreSQL C flags... " >&6; } + PGSQL_CFLAGS="-I`${pgconfig} --includedir`" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_CFLAGS" >&5 +$as_echo "$PGSQL_CFLAGS" >&6; } + fi + if test -z "$ac_cv_pgsql_libs" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL linker flags" >&5 +$as_echo_n "checking PostgreSQL linker flags... " >&6; } + PGSQL_LIBS="-L`${pgconfig} --libdir` -lpq" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_LIBS" >&5 +$as_echo "$PGSQL_LIBS" >&6; } + fi + fi +fi + + +$as_echo "@%:@define USE_PGSQL 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_pgsql != xno; then + USE_PGSQL_TRUE= + USE_PGSQL_FALSE='#' +else + USE_PGSQL_TRUE='#' + USE_PGSQL_FALSE= +fi + + +# check if we should complie with libmmseg (a mmseg Chinese Segmenter) support + +@%:@ Check whether --with-mmseg was given. +if test "${with_mmseg+set}" = set; then : + withval=$with_mmseg; ac_cv_use_mmseg=$withval +else + ac_cv_use_mmseg=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with libmmseg support" >&5 +$as_echo_n "checking whether to compile with libmmseg support... " >&6; } +if test x$ac_cv_use_mmseg != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MMSEG_CFLAGS" +then + for CANDIDATE in "$user_mmseg_includes" "/usr/local/include/mmseg" "/usr/include/mmseg" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/Segmenter.h" + then + MMSEG_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MMSEG_LIBS" +then + for CANDIDATE in "$user_mmseg_libs" "/usr/lib64" \ + "/usr/local/lib" "/usr/local/mmseg/lib" \ + "/usr/local/lib/mmseg" "/usr/lib" \ + "/opt/mmseg/lib" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MMSEG_LIBS="-L$CANDIDATE -lmmseg" + break + fi + done +fi + + + +# apply explicit include path overrides + +@%:@ Check whether --with-mmseg-includes was given. +if test "${with_mmseg_includes+set}" = set; then : + withval=$with_mmseg_includes; ac_cv_mmseg_includes=$withval +fi + +if test -n "$ac_cv_mmseg_includes" +then + MMSEG_CFLAGS="-I$ac_cv_mmseg_includes" +fi + + +# apply explicit lib path overrides + +@%:@ Check whether --with-mmseg-libs was given. +if test "${with_mmseg_libs+set}" = set; then : + withval=$with_mmseg_libs; ac_cv_mmseg_libs=$withval +fi + +if test -n "$ac_cv_mmseg_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mmseg_libs=`echo ${ac_cv_mmseg_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MMSEG_LIBS="-L$ac_cv_mmseg_libs -lmmseg" +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking libmmseg include files" >&5 +$as_echo_n "checking libmmseg include files... " >&6; } +if test -z "$MMSEG_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find libmmseg include files. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MMSEG_CFLAGS" >&5 +$as_echo "$MMSEG_CFLAGS" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking libmmseg libraries" >&5 +$as_echo_n "checking libmmseg libraries... " >&6; } +if test -z "$MMSEG_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find libmmseg libraries. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MMSEG_LIBS" >&5 +$as_echo "$MMSEG_LIBS" >&6; } +fi + + + +$as_echo "@%:@define USE_MMSEG 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_mmseg != xno; then + USE_MMSEG_TRUE= + USE_MMSEG_FALSE='#' +else + USE_MMSEG_TRUE='#' + USE_MMSEG_FALSE= +fi + + +# add macports include directory +if (echo $MYSQL_LIBS | grep -q -- -L/opt/local/lib); then + MYSQL_CFLAGS="$MYSQL_CFLAGS -I/opt/local/include" +fi + +# we can now set preprocessor flags for both C and C++ compilers +CPPFLAGS="$CPPFLAGS $MYSQL_CFLAGS $PGSQL_CFLAGS $MMSEG_CFLAGS" + + if test x"$USE_PYTHON" = xDO; then + USE_PYTHON_TRUE= + USE_PYTHON_FALSE='#' +else + USE_PYTHON_TRUE='#' + USE_PYTHON_FALSE= +fi + +CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" +LIBS="$LIBS $PYTHON_LIBS" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use 64-bit document/word IDs" >&5 +$as_echo_n "checking whether to use 64-bit document/word IDs... " >&6; } +sph_enable_id64=no +@%:@ Check whether --enable-id64 was given. +if test "${enable_id64+set}" = set; then : + enableval=$enable_id64; sph_enable_id64=$enableval +fi + +if test x$sph_enable_id64 != xno; then + +$as_echo "@%:@define USE_64BIT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + +$as_echo "@%:@define USE_64BIT 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +@%:@ Check whether --with-libstemmer was given. +if test "${with_libstemmer+set}" = set; then : + withval=$with_libstemmer; ac_cv_use_libstemmer=$withval +else + ac_cv_use_libstemmer=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with libstemmer support" >&5 +$as_echo_n "checking whether to compile with libstemmer support... " >&6; } +if test x$ac_cv_use_libstemmer != xno; then + if test -d libstemmer_c && test -f libstemmer_c/include/libstemmer.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "@%:@define USE_LIBSTEMMER 1" >>confdefs.h + + else + as_fn_error $? "missing libstemmer sources from libstemmer_c. + +Please download the C version of libstemmer library from +http://snowball.tartarus.org/ and extract its sources over libstemmer_c/ +subdirectory in order to build Sphinx with libstemmer support. +" "$LINENO" 5 + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "@%:@define USE_LIBSTEMMER 0" >>confdefs.h + +fi + if test x$ac_cv_use_libstemmer != xno; then + USE_LIBSTEMMER_TRUE= + USE_LIBSTEMMER_FALSE='#' +else + USE_LIBSTEMMER_TRUE='#' + USE_LIBSTEMMER_FALSE= +fi + + + +got_expat=0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5 +$as_echo_n "checking for libexpat... " >&6; } +if test $have_expat_h = yes -a $have_libexpat = yes ; then + +$as_echo "@%:@define USE_LIBEXPAT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + got_expat=1 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlpipe2 will NOT be available" >&5 +$as_echo "$as_me: WARNING: xmlpipe2 will NOT be available" >&2;} +fi + + + +@%:@ Check whether --with-iconv was given. +if test "${with_iconv+set}" = set; then : + withval=$with_iconv; ac_cv_use_iconv=$withval +else + ac_cv_use_iconv=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiconv" >&5 +$as_echo_n "checking for libiconv... " >&6; } +if test $have_iconv_h = yes \ + -a $have_libiconv = yes \ + -a $got_expat -eq 1 \ + -a $ac_cv_use_iconv != no ; \ +then + +$as_echo "@%:@define USE_LIBICONV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv() arg types" >&5 +$as_echo_n "checking for iconv() arg types... " >&6; } + 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ +const char * inbuf; + iconv_t cd; + iconv ( cd, &inbuf, NULL, NULL, NULL ); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + iconv_inbuf_const=yes +else + iconv_inbuf_const=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 + + if test $iconv_inbuf_const = yes ; then + +$as_echo "@%:@define ICONV_INBUF_CONST 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: const char **" >&5 +$as_echo "const char **" >&6; } + else + +$as_echo "@%:@define ICONV_INBUF_CONST 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: char **" >&5 +$as_echo "char **" >&6; } + fi +else + if test $got_expat -eq 1 ; then + if test $ac_cv_use_iconv = no ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlpipe2 will only support default encodings (latin-1, utf-8)" >&5 +$as_echo "$as_me: WARNING: xmlpipe2 will only support default encodings (latin-1, utf-8)" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not required" >&5 +$as_echo "not required" >&6; } + fi +fi + + +if test $have_zlib_h = yes -a $have_lz = yes ; then + +$as_echo "@%:@define USE_ZLIB 1" >>confdefs.h + +fi + + + +@%:@ Check whether --with-unixodbc was given. +if test "${with_unixodbc+set}" = set; then : + withval=$with_unixodbc; ac_cv_use_unixodbc=$withval +else + ac_cv_use_unixodbc=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UnixODBC" >&5 +$as_echo_n "checking for UnixODBC... " >&6; } +if test $ac_cv_use_unixodbc != no ; then + if test $have_sql_h = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing SQLConnect" >&5 +$as_echo_n "checking for library containing SQLConnect... " >&6; } +if ${ac_cv_search_SQLConnect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SQLConnect (); +int +main () +{ +return SQLConnect (); + ; + return 0; +} +_ACEOF +for ac_lib in '' odbc iodbc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_SQLConnect=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_SQLConnect+:} false; then : + break +fi +done +if ${ac_cv_search_SQLConnect+:} false; then : + +else + ac_cv_search_SQLConnect=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SQLConnect" >&5 +$as_echo "$ac_cv_search_SQLConnect" >&6; } +ac_res=$ac_cv_search_SQLConnect +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libodbc=yes +else + have_libodbc=no +fi + + if test $have_libodbc = yes ; then + +$as_echo "@%:@define USE_ODBC 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ODBC source support will NOT be available" >&5 +$as_echo "$as_me: WARNING: ODBC source support will NOT be available" >&2;} + fi + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi + + + + +@%:@ Check whether --with-syslog was given. +if test "${with_syslog+set}" = set; then : + withval=$with_syslog; ac_cv_use_syslog=$withval +else + ac_cv_use_syslog=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Syslog" >&5 +$as_echo_n "checking for Syslog... " >&6; } +if test $ac_cv_use_syslog != no ; then + if test $have_syslog_h = yes ; then + +$as_echo "@%:@define USE_SYSLOG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unaligned RAM access" >&5 +$as_echo_n "checking for unaligned RAM access... " >&6; } +if ${sphinx_cv_unaligned_ram_access+:} false; then : + $as_echo_n "(cached) " >&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 + +if test "$cross_compiling" = yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown (cross-compiling), assume no" >&5 +$as_echo "unknown (cross-compiling), assume no" >&6; } + sphinx_cv_unaligned_ram_access=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ +char * sBuf = new char [ 8*sizeof(int) ]; + for ( int i=0; i<8*sizeof(int); i++ ) + sBuf[i] = i; + + // check for crashes (SPARC) + volatile int iRes = 0; + for ( int i=0; i<(int)sizeof(int); i++ ) + { + int * pPtr = (int*)( sBuf+i ); + iRes += *pPtr; + } + + // check for correct values (ARM) + iRes = *(int*)( sBuf+1 ); + if (!( iRes==0x01020304 || iRes==0x04030201 )) + return 1; + // all seems ok + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + sphinx_cv_unaligned_ram_access=yes +else + sphinx_cv_unaligned_ram_access=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_unaligned_ram_access" >&5 +$as_echo "$sphinx_cv_unaligned_ram_access" >&6; } + +if test x$sphinx_cv_unaligned_ram_access = xyes ; then + +$as_echo "@%:@define UNALIGNED_RAM_ACCESS 1" >>confdefs.h + +else + $as_echo "@%:@define UNALIGNED_RAM_ACCESS 0" >>confdefs.h + +fi + +# check endianness + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + +$as_echo "@%:@define USE_LITTLE_ENDIAN 0" >>confdefs.h +;; #( + no) + +$as_echo "@%:@define USE_LITTLE_ENDIAN 1" >>confdefs.h + ;; #( + universal) + as_fn_error $? "universial endianess not supported" "$LINENO" 5 + + ;; #( + *) + as_fn_error $? "unknown endianess not supported" "$LINENO" 5 ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: generating configuration files" >&5 +$as_echo "generating configuration files" >&6; } + TMP=`echo generating configuration files | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +if test "$prefix" = "NONE"; then + my_op_prefix="/var" +else + my_op_prefix="$localstatedir" +fi + + +CONFDIR=`eval echo "${my_op_prefix}"` + + +ac_config_files="$ac_config_files Makefile src/Makefile libstemmer_c/Makefile doc/Makefile sphinx.conf.dist:sphinx.conf.in sphinx-min.conf.dist:sphinx-min.conf.in" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+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 + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_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= +U= +for ac_i in : $LIB@&t@OBJS; 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=`$as_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. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_MYSQL_TRUE}" && test -z "${USE_MYSQL_FALSE}"; then + as_fn_error $? "conditional \"USE_MYSQL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PGSQL_TRUE}" && test -z "${USE_PGSQL_FALSE}"; then + as_fn_error $? "conditional \"USE_PGSQL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_MMSEG_TRUE}" && test -z "${USE_MMSEG_FALSE}"; then + as_fn_error $? "conditional \"USE_MMSEG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then + as_fn_error $? "conditional \"USE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_LIBSTEMMER_TRUE}" && test -z "${USE_LIBSTEMMER_FALSE}"; then + as_fn_error $? "conditional \"USE_LIBSTEMMER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +sphinx config.status 1.11 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config/config.h") CONFIG_HEADERS="$CONFIG_HEADERS config/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "libstemmer_c/Makefile") CONFIG_FILES="$CONFIG_FILES libstemmer_c/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "sphinx.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx.conf.dist:sphinx.conf.in" ;; + "sphinx-min.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx-min.conf.dist:sphinx-min.conf.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: configuration done" >&5 +$as_echo "configuration done" >&6; } + TMP=`echo configuration done | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +echo "You can now run 'make install' to build and install Sphinx binaries." +echo "On a multi-core machine, try 'make -j4 install' to speed up the build." +echo +echo "Updates, articles, help forum, and commercial support, consulting, training," +echo "and development services are available at http://sphinxsearch.com/" +echo +echo "Thank you for choosing Sphinx!" +echo diff --git a/coreseek/csft-4.1/autom4te.cache/requests b/coreseek/csft-4.1/autom4te.cache/requests new file mode 100644 index 0000000..2e5de0f --- /dev/null +++ b/coreseek/csft-4.1/autom4te.cache/requests @@ -0,0 +1,228 @@ +# This file was generated by Autom4te Sun Nov 6 20:57:04 UTC 2011. +# It contains the lists of macros which have been traced. +# It can be safely removed. + +@request = ( + bless( [ + '0', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + 'configure.ac' + ], + { + 'AM_PROG_F77_C_O' => 1, + '_LT_AC_TAGCONFIG' => 1, + 'm4_pattern_forbid' => 1, + 'AC_INIT' => 1, + 'AC_CANONICAL_TARGET' => 1, + '_AM_COND_IF' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, + 'AC_SUBST' => 1, + 'AC_CANONICAL_HOST' => 1, + 'AC_FC_SRCEXT' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_CONFIG_SUBDIRS' => 1, + 'AM_PATH_GUILE' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_CONFIG_LINKS' => 1, + 'AC_REQUIRE_AUX_FILE' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'm4_sinclude' => 1, + 'AM_MAINTAINER_MODE' => 1, + 'AM_NLS' => 1, + 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + '_m4_warn' => 1, + 'AM_MAKEFILE_INCLUDE' => 1, + 'AM_PROG_CXX_C_O' => 1, + '_AM_MAKEFILE_INCLUDE' => 1, + '_AM_COND_ENDIF' => 1, + 'AM_ENABLE_MULTILIB' => 1, + 'AM_SILENT_RULES' => 1, + 'AM_PROG_MOC' => 1, + 'AC_CONFIG_FILES' => 1, + 'LT_INIT' => 1, + 'include' => 1, + 'AM_GNU_GETTEXT' => 1, + 'AM_PROG_AR' => 1, + 'AC_LIBSOURCE' => 1, + 'AC_CANONICAL_BUILD' => 1, + 'AM_PROG_FC_C_O' => 1, + 'AC_FC_FREEFORM' => 1, + 'AH_OUTPUT' => 1, + 'AC_CONFIG_AUX_DIR' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'm4_pattern_allow' => 1, + 'AM_PROG_CC_C_O' => 1, + 'sinclude' => 1, + 'AM_CONDITIONAL' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'AM_XGETTEXT_OPTION' => 1, + 'AC_CONFIG_HEADERS' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, + 'AM_POT_TOOLS' => 1, + 'm4_include' => 1, + '_AM_COND_ELSE' => 1, + 'AC_SUBST_TRACE' => 1 + } + ], 'Autom4te::Request' ), + bless( [ + '1', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + '/usr/share/aclocal-1.11/amversion.m4', + '/usr/share/aclocal-1.11/auxdir.m4', + '/usr/share/aclocal-1.11/cond.m4', + '/usr/share/aclocal-1.11/depend.m4', + '/usr/share/aclocal-1.11/depout.m4', + '/usr/share/aclocal-1.11/init.m4', + '/usr/share/aclocal-1.11/install-sh.m4', + '/usr/share/aclocal-1.11/lead-dot.m4', + '/usr/share/aclocal-1.11/maintainer.m4', + '/usr/share/aclocal-1.11/make.m4', + '/usr/share/aclocal-1.11/missing.m4', + '/usr/share/aclocal-1.11/mkdirp.m4', + '/usr/share/aclocal-1.11/options.m4', + '/usr/share/aclocal-1.11/python.m4', + '/usr/share/aclocal-1.11/runlog.m4', + '/usr/share/aclocal-1.11/sanity.m4', + '/usr/share/aclocal-1.11/silent.m4', + '/usr/share/aclocal-1.11/strip.m4', + '/usr/share/aclocal-1.11/substnot.m4', + '/usr/share/aclocal-1.11/tar.m4', + 'acinclude.m4', + 'configure.ac' + ], + { + 'SPHINX_CONFIGURE_PART' => 1, + 'm4_pattern_forbid' => 1, + 'PTHREADS_TRY_RUNLINK' => 1, + 'jm_MAINTAINER_MODE' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + '_AM_SET_OPTION' => 1, + 'AC_CHECK_MYSQL' => 1, + 'AC_DEFUN' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'AM_PYTHON_CHECK_VERSION' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'AM_MISSING_HAS_RUN' => 1, + 'AM_SUBST_NOTMAKE' => 1, + 'AM_MISSING_PROG' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AM_MAINTAINER_MODE' => 1, + 'AC_DEFUN_ONCE' => 1, + 'AC_CHECK_PGSQL' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + 'SPHINX_CHECK_DEFINE' => 1, + '_m4_warn' => 1, + 'AM_SANITY_CHECK' => 1, + 'AM_SILENT_RULES' => 1, + 'include' => 1, + 'INN_PATH_PROG_ENSURE' => 1, + 'INN_ARG_PYTHON' => 1, + 'AC_CHECK_MMSEG' => 1, + '_AM_PROG_TAR' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + 'AM_DEP_TRACK' => 1, + 'PTHREADS_TRY_RUNCOMPILE' => 1, + '_AM_SET_OPTIONS' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AM_RUN_LOG' => 1, + '_AM_IF_OPTION' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'm4_pattern_allow' => 1, + '_AM_AUTOCONF_VERSION' => 1, + '_AM_MANGLE_OPTION' => 1, + 'AM_SET_LEADING_DOT' => 1, + 'AM_CONDITIONAL' => 1, + 'AM_SET_DEPDIR' => 1, + '_AM_DEPENDENCIES' => 1, + 'm4_include' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'AM_PATH_PYTHON' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AU_DEFUN' => 1, + 'AM_MAKE_INCLUDE' => 1 + } + ], 'Autom4te::Request' ), + bless( [ + '2', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + 'aclocal.m4', + 'configure.ac' + ], + { + '_LT_AC_TAGCONFIG' => 1, + 'AM_PROG_F77_C_O' => 1, + 'AC_INIT' => 1, + 'm4_pattern_forbid' => 1, + 'AC_CANONICAL_TARGET' => 1, + '_AM_COND_IF' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, + 'AC_SUBST' => 1, + 'AC_CANONICAL_HOST' => 1, + 'AC_FC_SRCEXT' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_CONFIG_SUBDIRS' => 1, + 'AM_PATH_GUILE' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_REQUIRE_AUX_FILE' => 1, + 'AC_CONFIG_LINKS' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'm4_sinclude' => 1, + 'AM_MAINTAINER_MODE' => 1, + 'AM_NLS' => 1, + 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + '_m4_warn' => 1, + 'AM_MAKEFILE_INCLUDE' => 1, + 'AM_PROG_CXX_C_O' => 1, + '_AM_COND_ENDIF' => 1, + '_AM_MAKEFILE_INCLUDE' => 1, + 'AM_ENABLE_MULTILIB' => 1, + 'AM_PROG_MOC' => 1, + 'AM_SILENT_RULES' => 1, + 'AC_CONFIG_FILES' => 1, + 'include' => 1, + 'LT_INIT' => 1, + 'AM_PROG_AR' => 1, + 'AM_GNU_GETTEXT' => 1, + 'AC_LIBSOURCE' => 1, + 'AC_CANONICAL_BUILD' => 1, + 'AM_PROG_FC_C_O' => 1, + 'AC_FC_FREEFORM' => 1, + 'AH_OUTPUT' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'AC_CONFIG_AUX_DIR' => 1, + 'AM_PROG_CC_C_O' => 1, + 'sinclude' => 1, + 'm4_pattern_allow' => 1, + 'AM_CONDITIONAL' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'AM_XGETTEXT_OPTION' => 1, + 'AC_CONFIG_HEADERS' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, + 'AM_POT_TOOLS' => 1, + 'm4_include' => 1, + '_AM_COND_ELSE' => 1, + 'AC_SUBST_TRACE' => 1 + } + ], 'Autom4te::Request' ) + ); + diff --git a/coreseek/csft-4.1/autom4te.cache/traces.0 b/coreseek/csft-4.1/autom4te.cache/traces.0 new file mode 100644 index 0000000..d8eba1d --- /dev/null +++ b/coreseek/csft-4.1/autom4te.cache/traces.0 @@ -0,0 +1,682 @@ +m4trace:configure.ac:4: -1- AC_INIT([sphinx], [1.11], [shodan(at)shodan.ru]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:4: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:4: -1- AC_SUBST([SHELL]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([SHELL]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:4: -1- AC_SUBST([PATH_SEPARATOR]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_NAME]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_STRING]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_URL]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:4: -1- AC_SUBST([exec_prefix], [NONE]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([exec_prefix]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:4: -1- AC_SUBST([prefix], [NONE]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([prefix]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:4: -1- AC_SUBST([program_transform_name], [s,x,x,]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([program_transform_name]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:4: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([bindir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:4: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([sbindir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:4: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([libexecdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([datarootdir], ['${prefix}/share']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([datarootdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([datadir], ['${datarootdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([datadir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:4: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([sysconfdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([sharedstatedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([localstatedir], ['${prefix}/var']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([localstatedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([includedir], ['${prefix}/include']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([includedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([oldincludedir], ['/usr/include']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([oldincludedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], + ['${datarootdir}/doc/${PACKAGE_TARNAME}'], + ['${datarootdir}/doc/${PACKAGE}'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([docdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([infodir], ['${datarootdir}/info']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([infodir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:4: -1- AC_SUBST([htmldir], ['${docdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([htmldir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:4: -1- AC_SUBST([dvidir], ['${docdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([dvidir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:4: -1- AC_SUBST([pdfdir], ['${docdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([pdfdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([psdir], ['${docdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([psdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([libdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([localedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([mandir], ['${datarootdir}/man']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([mandir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ +@%:@undef PACKAGE_NAME]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ +@%:@undef PACKAGE_TARNAME]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ +@%:@undef PACKAGE_VERSION]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ +@%:@undef PACKAGE_STRING]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ +@%:@undef PACKAGE_BUGREPORT]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ +@%:@undef PACKAGE_URL]) +m4trace:configure.ac:4: -1- AC_SUBST([DEFS]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([DEFS]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:4: -1- AC_SUBST([ECHO_C]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([ECHO_C]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:4: -1- AC_SUBST([ECHO_N]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([ECHO_N]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:4: -1- AC_SUBST([ECHO_T]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([ECHO_T]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:4: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:4: -1- AC_SUBST([build_alias]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([build_alias]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:4: -1- AC_SUBST([host_alias]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([host_alias]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:4: -1- AC_SUBST([target_alias]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([target_alias]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:6: -1- m4_include([python.m4]) +m4trace:configure.ac:12: -1- AC_CONFIG_AUX_DIR([config]) +m4trace:configure.ac:17: -1- AC_CONFIG_HEADERS([config/config.h]) +m4trace:configure.ac:28: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:28: the top level]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([CFLAGS]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CFLAGS]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:59: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:59: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:59: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([ac_ct_CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([ac_ct_CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([EXEEXT]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:59: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([OBJEXT]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:60: -1- AC_SUBST([CXX]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:60: -1- AC_SUBST([CXXFLAGS]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CXXFLAGS]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:60: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:60: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:60: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:60: -1- AC_SUBST([CXX]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:60: -1- AC_SUBST([ac_ct_CXX]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([ac_ct_CXX]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:61: -1- AC_SUBST([RANLIB]) +m4trace:configure.ac:61: -1- AC_SUBST_TRACE([RANLIB]) +m4trace:configure.ac:61: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:64: -1- AC_SUBST([PYTHON]) +m4trace:configure.ac:64: -1- AC_SUBST_TRACE([PYTHON]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:64: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1482: AC_ARG_WITH is expanded from... +python.m4:21: INN_ARG_PYTHON is expanded from... +configure.ac:64: the top level]) +m4trace:configure.ac:64: -1- AC_DEFINE_TRACE_LITERAL([USE_PYTHON]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^USE_PYTHON$]) +m4trace:configure.ac:64: -1- AH_OUTPUT([USE_PYTHON], [/* Define to compile in Python datasource support. */ +@%:@undef USE_PYTHON]) +m4trace:configure.ac:64: -1- AC_SUBST([PYTHON]) +m4trace:configure.ac:64: -1- AC_SUBST_TRACE([PYTHON]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:64: -1- AC_SUBST([PYTHON_CPPFLAGS]) +m4trace:configure.ac:64: -1- AC_SUBST_TRACE([PYTHON_CPPFLAGS]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON_CPPFLAGS$]) +m4trace:configure.ac:64: -1- AC_SUBST([PYTHON_LIBS]) +m4trace:configure.ac:64: -1- AC_SUBST_TRACE([PYTHON_LIBS]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON_LIBS$]) +m4trace:configure.ac:66: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from... +../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from... +configure.ac:66: the top level]) +m4trace:configure.ac:76: -1- AC_DEFINE_TRACE_LITERAL([COMPILER]) +m4trace:configure.ac:76: -1- m4_pattern_allow([^COMPILER$]) +m4trace:configure.ac:76: -1- AH_OUTPUT([COMPILER], [/* Define to be the name of the compiler. */ +@%:@undef COMPILER]) +m4trace:configure.ac:77: -1- AC_DEFINE_TRACE_LITERAL([OS_UNAME]) +m4trace:configure.ac:77: -1- m4_pattern_allow([^OS_UNAME$]) +m4trace:configure.ac:77: -1- AH_OUTPUT([OS_UNAME], [/* Full name OS */ +@%:@undef OS_UNAME]) +m4trace:configure.ac:84: -1- AC_SUBST([CPP]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:84: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:84: -1- AC_SUBST([CPP]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:84: -1- AC_SUBST([GREP]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:84: -1- AC_SUBST([EGREP]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([EGREP]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:84: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:84: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +@%:@undef STDC_HEADERS]) +m4trace:configure.ac:85: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_WAIT_H]) +m4trace:configure.ac:85: -1- m4_pattern_allow([^HAVE_SYS_WAIT_H$]) +m4trace:configure.ac:85: -1- AH_OUTPUT([HAVE_SYS_WAIT_H], [/* Define to 1 if you have that is POSIX.1 compatible. */ +@%:@undef HAVE_SYS_WAIT_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_FCNTL_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_LIMITS_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_NETDB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_NETDB_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_NETINET_IN_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_NETINET_IN_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRING_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_FILE_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_FILE_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_SOCKET_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_TIME_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_UNISTD_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_PTHREAD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_PTHREAD_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_EXECINFO_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_EXECINFO_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_TYPES_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_STAT_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRING_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_MEMORY_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRINGS_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_INTTYPES_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDINT_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_UNISTD_H]) +m4trace:configure.ac:98: -1- AC_DEFINE_TRACE_LITERAL([HAVE__BOOL]) +m4trace:configure.ac:98: -1- m4_pattern_allow([^HAVE__BOOL$]) +m4trace:configure.ac:98: -1- AH_OUTPUT([HAVE__BOOL], [/* Define to 1 if the system has the type `_Bool\'. */ +@%:@undef HAVE__BOOL]) +m4trace:configure.ac:98: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDBOOL_H]) +m4trace:configure.ac:98: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) +m4trace:configure.ac:98: -1- AH_OUTPUT([HAVE_STDBOOL_H], [/* Define to 1 if stdbool.h conforms to C99. */ +@%:@undef HAVE_STDBOOL_H]) +m4trace:configure.ac:99: -1- AC_DEFINE_TRACE_LITERAL([const]) +m4trace:configure.ac:99: -1- m4_pattern_allow([^const$]) +m4trace:configure.ac:99: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */ +@%:@undef const]) +m4trace:configure.ac:100: -1- AH_OUTPUT([inline], [/* Define to `__inline__\' or `__inline\' if that\'s what the C compiler + calls it, or to nothing if \'inline\' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif]) +m4trace:configure.ac:101: -1- AC_DEFINE_TRACE_LITERAL([off_t]) +m4trace:configure.ac:101: -1- m4_pattern_allow([^off_t$]) +m4trace:configure.ac:101: -1- AH_OUTPUT([off_t], [/* Define to `long int\' if does not define. */ +@%:@undef off_t]) +m4trace:configure.ac:102: -1- AC_DEFINE_TRACE_LITERAL([size_t]) +m4trace:configure.ac:102: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.ac:102: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if does not define. */ +@%:@undef size_t]) +m4trace:configure.ac:103: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME]) +m4trace:configure.ac:103: -1- m4_pattern_allow([^TIME_WITH_SYS_TIME$]) +m4trace:configure.ac:103: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both and . */ +@%:@undef TIME_WITH_SYS_TIME]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([pid_t]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^pid_t$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([pid_t], [/* Define to `int\' if does not define. */ +@%:@undef pid_t]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_VFORK_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_VFORK_H]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VFORK_H]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_VFORK_H$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_FORK], [/* Define to 1 if you have the `fork\' function. */ +@%:@undef HAVE_FORK]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_VFORK], [/* Define to 1 if you have the `vfork\' function. */ +@%:@undef HAVE_VFORK]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_VFORK]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_WORKING_VFORK$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_WORKING_VFORK], [/* Define to 1 if `vfork\' works. */ +@%:@undef HAVE_WORKING_VFORK]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([vfork]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^vfork$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([vfork], [/* Define as `fork\' if `vfork\' does not work. */ +@%:@undef vfork]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_FORK]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_WORKING_FORK$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_WORKING_FORK], [/* Define to 1 if `fork\' works. */ +@%:@undef HAVE_WORKING_FORK]) +m4trace:configure.ac:111: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:111: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDLIB_H]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) +m4trace:configure.ac:111: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:111: -1- AH_OUTPUT([HAVE_MALLOC], [/* Define to 1 if your system has a GNU libc compatible `malloc\' function, and + to 0 otherwise. */ +@%:@undef HAVE_MALLOC]) +m4trace:configure.ac:111: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:111: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS malloc.$ac_objext"]) +m4trace:configure.ac:111: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:111: -1- AC_LIBSOURCE([malloc.c]) +m4trace:configure.ac:111: -1- AC_DEFINE_TRACE_LITERAL([malloc]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^malloc$]) +m4trace:configure.ac:111: -1- AH_OUTPUT([malloc], [/* Define to rpl_malloc if the replacement function should be used. */ +@%:@undef malloc]) +m4trace:configure.ac:112: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:112: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDLIB_H]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) +m4trace:configure.ac:112: -1- AC_DEFINE_TRACE_LITERAL([HAVE_REALLOC]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_REALLOC$]) +m4trace:configure.ac:112: -1- AH_OUTPUT([HAVE_REALLOC], [/* Define to 1 if your system has a GNU libc compatible `realloc\' function, + and to 0 otherwise. */ +@%:@undef HAVE_REALLOC]) +m4trace:configure.ac:112: -1- AC_DEFINE_TRACE_LITERAL([HAVE_REALLOC]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_REALLOC$]) +m4trace:configure.ac:112: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS realloc.$ac_objext"]) +m4trace:configure.ac:112: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:112: -1- AC_LIBSOURCE([realloc.c]) +m4trace:configure.ac:112: -1- AC_DEFINE_TRACE_LITERAL([realloc]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^realloc$]) +m4trace:configure.ac:112: -1- AH_OUTPUT([realloc], [/* Define to rpl_realloc if the replacement function should be used. */ +@%:@undef realloc]) +m4trace:configure.ac:113: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_SELECT_H]) +m4trace:configure.ac:113: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_SOCKET_H]) +m4trace:configure.ac:113: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG1]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG1$]) +m4trace:configure.ac:113: -1- AH_OUTPUT([SELECT_TYPE_ARG1], [/* Define to the type of arg 1 for `select\'. */ +@%:@undef SELECT_TYPE_ARG1]) +m4trace:configure.ac:113: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG234]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG234$]) +m4trace:configure.ac:113: -1- AH_OUTPUT([SELECT_TYPE_ARG234], [/* Define to the type of args 2, 3 and 4 for `select\'. */ +@%:@undef SELECT_TYPE_ARG234]) +m4trace:configure.ac:113: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG5]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG5$]) +m4trace:configure.ac:113: -1- AH_OUTPUT([SELECT_TYPE_ARG5], [/* Define to the type of arg 5 for `select\'. */ +@%:@undef SELECT_TYPE_ARG5]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete. +You should run autoupdate.], [../../lib/autoconf/types.m4:738: AC_TYPE_SIGNAL is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^RETSIGTYPE$]) +m4trace:configure.ac:114: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */ +@%:@undef RETSIGTYPE]) +m4trace:configure.ac:115: -1- AC_DEFINE_TRACE_LITERAL([LSTAT_FOLLOWS_SLASHED_SYMLINK]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LSTAT_FOLLOWS_SLASHED_SYMLINK$]) +m4trace:configure.ac:115: -1- AH_OUTPUT([LSTAT_FOLLOWS_SLASHED_SYMLINK], [/* Define to 1 if `lstat\' dereferences a symlink specified with a trailing + slash. */ +@%:@undef LSTAT_FOLLOWS_SLASHED_SYMLINK]) +m4trace:configure.ac:115: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS lstat.$ac_objext"]) +m4trace:configure.ac:115: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:115: -1- AC_LIBSOURCE([lstat.c]) +m4trace:configure.ac:115: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS stat.$ac_objext"]) +m4trace:configure.ac:115: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:115: -1- AC_LIBSOURCE([stat.c]) +m4trace:configure.ac:115: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STAT_EMPTY_STRING_BUG]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^HAVE_STAT_EMPTY_STRING_BUG$]) +m4trace:configure.ac:115: -1- AH_OUTPUT([HAVE_STAT_EMPTY_STRING_BUG], [/* Define to 1 if `stat\' has the bug that it succeeds when given the + zero-length file name argument. */ +@%:@undef HAVE_STAT_EMPTY_STRING_BUG]) +m4trace:configure.ac:116: -1- AH_OUTPUT([HAVE_VPRINTF], [/* Define to 1 if you have the `vprintf\' function. */ +@%:@undef HAVE_VPRINTF]) +m4trace:configure.ac:116: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VPRINTF]) +m4trace:configure.ac:116: -1- m4_pattern_allow([^HAVE_VPRINTF$]) +m4trace:configure.ac:116: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOPRNT]) +m4trace:configure.ac:116: -1- m4_pattern_allow([^HAVE_DOPRNT$]) +m4trace:configure.ac:116: -1- AH_OUTPUT([HAVE_DOPRNT], [/* Define to 1 if you don\'t have `vprintf\' but do have `_doprnt.\' */ +@%:@undef HAVE_DOPRNT]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_DUP2], [/* Define to 1 if you have the `dup2\' function. */ +@%:@undef HAVE_DUP2]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_GETHOSTBYNAME], [/* Define to 1 if you have the `gethostbyname\' function. */ +@%:@undef HAVE_GETHOSTBYNAME]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_GETTIMEOFDAY], [/* Define to 1 if you have the `gettimeofday\' function. */ +@%:@undef HAVE_GETTIMEOFDAY]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_MEMMOVE], [/* Define to 1 if you have the `memmove\' function. */ +@%:@undef HAVE_MEMMOVE]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */ +@%:@undef HAVE_MEMSET]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_SELECT], [/* Define to 1 if you have the `select\' function. */ +@%:@undef HAVE_SELECT]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_SOCKET], [/* Define to 1 if you have the `socket\' function. */ +@%:@undef HAVE_SOCKET]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\' function. */ +@%:@undef HAVE_STRCASECMP]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRCHR], [/* Define to 1 if you have the `strchr\' function. */ +@%:@undef HAVE_STRCHR]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */ +@%:@undef HAVE_STRERROR]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRNCASECMP], [/* Define to 1 if you have the `strncasecmp\' function. */ +@%:@undef HAVE_STRNCASECMP]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRSTR], [/* Define to 1 if you have the `strstr\' function. */ +@%:@undef HAVE_STRSTR]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRTOL], [/* Define to 1 if you have the `strtol\' function. */ +@%:@undef HAVE_STRTOL]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_LOGF], [/* Define to 1 if you have the `logf\' function. */ +@%:@undef HAVE_LOGF]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_PREAD], [/* Define to 1 if you have the `pread\' function. */ +@%:@undef HAVE_PREAD]) +m4trace:configure.ac:124: -1- AH_OUTPUT([HAVE_BACKTRACE], [/* Define to 1 if you have the `backtrace\' function. */ +@%:@undef HAVE_BACKTRACE]) +m4trace:configure.ac:124: -1- AH_OUTPUT([HAVE_BACKTRACE_SYMBOLS], [/* Define to 1 if you have the `backtrace_symbols\' function. */ +@%:@undef HAVE_BACKTRACE_SYMBOLS]) +m4trace:configure.ac:130: -1- AH_OUTPUT([HAVE_LIBRT], [/* Define to 1 if you have the `rt\' library (-lrt). */ +@%:@undef HAVE_LIBRT]) +m4trace:configure.ac:130: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBRT]) +m4trace:configure.ac:130: -1- m4_pattern_allow([^HAVE_LIBRT$]) +m4trace:configure.ac:134: -1- AC_SUBST([LIBRT]) +m4trace:configure.ac:134: -1- AC_SUBST_TRACE([LIBRT]) +m4trace:configure.ac:134: -1- m4_pattern_allow([^LIBRT$]) +m4trace:configure.ac:137: -1- AH_OUTPUT([HAVE_CLOCK_GETTIME], [/* Define to 1 if you have the `clock_gettime\' function. */ +@%:@undef HAVE_CLOCK_GETTIME]) +m4trace:configure.ac:137: -1- AC_DEFINE_TRACE_LITERAL([HAVE_CLOCK_GETTIME]) +m4trace:configure.ac:137: -1- m4_pattern_allow([^HAVE_CLOCK_GETTIME$]) +m4trace:configure.ac:145: -1- AH_OUTPUT([HAVE_LIBDL], [/* Define to 1 if you have the `dl\' library (-ldl). */ +@%:@undef HAVE_LIBDL]) +m4trace:configure.ac:145: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL]) +m4trace:configure.ac:145: -1- m4_pattern_allow([^HAVE_LIBDL$]) +m4trace:configure.ac:146: -1- AH_OUTPUT([HAVE_DLOPEN], [/* Define to 1 if you have the `dlopen\' function. */ +@%:@undef HAVE_DLOPEN]) +m4trace:configure.ac:146: -1- AH_OUTPUT([HAVE_DLERROR], [/* Define to 1 if you have the `dlerror\' function. */ +@%:@undef HAVE_DLERROR]) +m4trace:configure.ac:208: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from... +configure.ac:178: PTHREADS_TRY_RUNCOMPILE is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:208: the top level]) +m4trace:configure.ac:208: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from... +../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from... +configure.ac:178: PTHREADS_TRY_RUNCOMPILE is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:208: the top level]) +m4trace:configure.ac:230: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from... +configure.ac:193: PTHREADS_TRY_RUNLINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:230: the top level]) +m4trace:configure.ac:230: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2662: _AC_LINK_IFELSE is expanded from... +../../lib/autoconf/general.m4:2679: AC_LINK_IFELSE is expanded from... +configure.ac:193: PTHREADS_TRY_RUNLINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:230: the top level]) +m4trace:configure.ac:259: -1- AH_OUTPUT([HAVE_PTHREAD_MUTEX_TIMEDLOCK], [/* Define to 1 if you have the `pthread_mutex_timedlock\' function. */ +@%:@undef HAVE_PTHREAD_MUTEX_TIMEDLOCK]) +m4trace:configure.ac:259: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PTHREAD_MUTEX_TIMEDLOCK]) +m4trace:configure.ac:259: -1- m4_pattern_allow([^HAVE_PTHREAD_MUTEX_TIMEDLOCK$]) +m4trace:configure.ac:265: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:265: the top level]) +m4trace:configure.ac:272: -1- AC_DEFINE_TRACE_LITERAL([USE_MYSQL]) +m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_MYSQL$]) +m4trace:configure.ac:272: -1- AH_OUTPUT([USE_MYSQL], [/* Define to 1 if you want to compile with MySQL support */ +@%:@undef USE_MYSQL]) +m4trace:configure.ac:273: -1- AC_SUBST([MYSQL_LIBS]) +m4trace:configure.ac:273: -1- AC_SUBST_TRACE([MYSQL_LIBS]) +m4trace:configure.ac:273: -1- m4_pattern_allow([^MYSQL_LIBS$]) +m4trace:configure.ac:274: -1- AC_SUBST([MYSQL_CFLAGS]) +m4trace:configure.ac:274: -1- AC_SUBST_TRACE([MYSQL_CFLAGS]) +m4trace:configure.ac:274: -1- m4_pattern_allow([^MYSQL_CFLAGS$]) +m4trace:configure.ac:282: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:282: the top level]) +m4trace:configure.ac:299: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:299: the top level]) +m4trace:configure.ac:306: -1- AC_DEFINE_TRACE_LITERAL([USE_PGSQL]) +m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PGSQL$]) +m4trace:configure.ac:306: -1- AH_OUTPUT([USE_PGSQL], [/* Define to 1 if you want to compile with PostgreSQL support */ +@%:@undef USE_PGSQL]) +m4trace:configure.ac:307: -1- AC_SUBST([PGSQL_LIBS]) +m4trace:configure.ac:307: -1- AC_SUBST_TRACE([PGSQL_LIBS]) +m4trace:configure.ac:307: -1- m4_pattern_allow([^PGSQL_LIBS$]) +m4trace:configure.ac:308: -1- AC_SUBST([PGSQL_CFLAGS]) +m4trace:configure.ac:308: -1- AC_SUBST_TRACE([PGSQL_CFLAGS]) +m4trace:configure.ac:308: -1- m4_pattern_allow([^PGSQL_CFLAGS$]) +m4trace:configure.ac:317: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:317: the top level]) +m4trace:configure.ac:324: -1- AC_DEFINE_TRACE_LITERAL([USE_MMSEG]) +m4trace:configure.ac:324: -1- m4_pattern_allow([^USE_MMSEG$]) +m4trace:configure.ac:324: -1- AH_OUTPUT([USE_MMSEG], [/* Define to 1 if you want to compile with libmmseg support */ +@%:@undef USE_MMSEG]) +m4trace:configure.ac:325: -1- AC_SUBST([MMSEG_LIBS]) +m4trace:configure.ac:325: -1- AC_SUBST_TRACE([MMSEG_LIBS]) +m4trace:configure.ac:325: -1- m4_pattern_allow([^MMSEG_LIBS$]) +m4trace:configure.ac:326: -1- AC_SUBST([MMSEG_CFLAGS]) +m4trace:configure.ac:326: -1- AC_SUBST_TRACE([MMSEG_CFLAGS]) +m4trace:configure.ac:326: -1- m4_pattern_allow([^MMSEG_CFLAGS$]) +m4trace:configure.ac:352: -1- AC_DEFINE_TRACE_LITERAL([USE_64BIT]) +m4trace:configure.ac:352: -1- m4_pattern_allow([^USE_64BIT$]) +m4trace:configure.ac:352: -1- AH_OUTPUT([USE_64BIT], [/* 64-bit document and word IDs */ +@%:@undef USE_64BIT]) +m4trace:configure.ac:355: -1- AC_DEFINE_TRACE_LITERAL([USE_64BIT]) +m4trace:configure.ac:355: -1- m4_pattern_allow([^USE_64BIT$]) +m4trace:configure.ac:355: -1- AH_OUTPUT([USE_64BIT], [/* 64-bit document and word IDs */ +@%:@undef USE_64BIT]) +m4trace:configure.ac:362: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:362: the top level]) +m4trace:configure.ac:370: -1- AC_DEFINE_TRACE_LITERAL([USE_LIBSTEMMER]) +m4trace:configure.ac:370: -1- m4_pattern_allow([^USE_LIBSTEMMER$]) +m4trace:configure.ac:370: -1- AH_OUTPUT([USE_LIBSTEMMER], [/* libstemmer support */ +@%:@undef USE_LIBSTEMMER]) +m4trace:configure.ac:381: -1- AC_DEFINE_TRACE_LITERAL([USE_LIBSTEMMER]) +m4trace:configure.ac:381: -1- m4_pattern_allow([^USE_LIBSTEMMER$]) +m4trace:configure.ac:381: -1- AH_OUTPUT([USE_LIBSTEMMER], [/* libstemmer support */ +@%:@undef USE_LIBSTEMMER]) +m4trace:configure.ac:390: -1- AC_DEFINE_TRACE_LITERAL([USE_LIBEXPAT]) +m4trace:configure.ac:390: -1- m4_pattern_allow([^USE_LIBEXPAT$]) +m4trace:configure.ac:390: -1- AH_OUTPUT([USE_LIBEXPAT], [/* define to use expat XML library */ +@%:@undef USE_LIBEXPAT]) +m4trace:configure.ac:401: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:401: the top level]) +m4trace:configure.ac:410: -1- AC_DEFINE_TRACE_LITERAL([USE_LIBICONV]) +m4trace:configure.ac:410: -1- m4_pattern_allow([^USE_LIBICONV$]) +m4trace:configure.ac:410: -1- AH_OUTPUT([USE_LIBICONV], [/* define to use iconv library */ +@%:@undef USE_LIBICONV]) +m4trace:configure.ac:427: -1- AC_DEFINE_TRACE_LITERAL([ICONV_INBUF_CONST]) +m4trace:configure.ac:427: -1- m4_pattern_allow([^ICONV_INBUF_CONST$]) +m4trace:configure.ac:427: -1- AH_OUTPUT([ICONV_INBUF_CONST], [/* whether 2nd arg to iconv() is const ptr */ +@%:@undef ICONV_INBUF_CONST]) +m4trace:configure.ac:430: -1- AC_DEFINE_TRACE_LITERAL([ICONV_INBUF_CONST]) +m4trace:configure.ac:430: -1- m4_pattern_allow([^ICONV_INBUF_CONST$]) +m4trace:configure.ac:430: -1- AH_OUTPUT([ICONV_INBUF_CONST], [/* whether 2nd arg to iconv() is const ptr */ +@%:@undef ICONV_INBUF_CONST]) +m4trace:configure.ac:449: -1- AC_DEFINE_TRACE_LITERAL([USE_ZLIB]) +m4trace:configure.ac:449: -1- m4_pattern_allow([^USE_ZLIB$]) +m4trace:configure.ac:449: -1- AH_OUTPUT([USE_ZLIB], [/* define to use Zlib */ +@%:@undef USE_ZLIB]) +m4trace:configure.ac:455: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:455: the top level]) +m4trace:configure.ac:463: -1- AC_DEFINE_TRACE_LITERAL([USE_ODBC]) +m4trace:configure.ac:463: -1- m4_pattern_allow([^USE_ODBC$]) +m4trace:configure.ac:463: -1- AH_OUTPUT([USE_ODBC], [/* define to use ODBC library */ +@%:@undef USE_ODBC]) +m4trace:configure.ac:478: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:478: the top level]) +m4trace:configure.ac:484: -1- AC_DEFINE_TRACE_LITERAL([USE_SYSLOG]) +m4trace:configure.ac:484: -1- m4_pattern_allow([^USE_SYSLOG$]) +m4trace:configure.ac:484: -1- AH_OUTPUT([USE_SYSLOG], [/* define to use POSIX Syslog for logging */ +@%:@undef USE_SYSLOG]) +m4trace:configure.ac:526: -1- AC_DEFINE_TRACE_LITERAL([UNALIGNED_RAM_ACCESS]) +m4trace:configure.ac:526: -1- m4_pattern_allow([^UNALIGNED_RAM_ACCESS$]) +m4trace:configure.ac:526: -1- AH_OUTPUT([UNALIGNED_RAM_ACCESS], [/* whether unaligned RAM access is possible */ +@%:@undef UNALIGNED_RAM_ACCESS]) +m4trace:configure.ac:528: -1- AC_DEFINE_TRACE_LITERAL([UNALIGNED_RAM_ACCESS]) +m4trace:configure.ac:528: -1- m4_pattern_allow([^UNALIGNED_RAM_ACCESS$]) +m4trace:configure.ac:533: -2- AC_DEFINE_TRACE_LITERAL([USE_LITTLE_ENDIAN]) +m4trace:configure.ac:533: -2- m4_pattern_allow([^USE_LITTLE_ENDIAN$]) +m4trace:configure.ac:533: -2- AH_OUTPUT([USE_LITTLE_ENDIAN], [/* big-endian */ +@%:@undef USE_LITTLE_ENDIAN]) +m4trace:configure.ac:534: -2- AC_DEFINE_TRACE_LITERAL([USE_LITTLE_ENDIAN]) +m4trace:configure.ac:534: -2- m4_pattern_allow([^USE_LITTLE_ENDIAN$]) +m4trace:configure.ac:534: -2- AH_OUTPUT([USE_LITTLE_ENDIAN], [/* little-endian */ +@%:@undef USE_LITTLE_ENDIAN]) +m4trace:configure.ac:532: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif]) +m4trace:configure.ac:551: -1- AC_SUBST([CONFDIR]) +m4trace:configure.ac:551: -1- AC_SUBST_TRACE([CONFDIR]) +m4trace:configure.ac:551: -1- m4_pattern_allow([^CONFDIR$]) +m4trace:configure.ac:553: -1- AC_CONFIG_FILES([Makefile src/Makefile libstemmer_c/Makefile doc/Makefile sphinx.conf.dist:sphinx.conf.in \ + sphinx-min.conf.dist:sphinx-min.conf.in]) +m4trace:configure.ac:555: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:555: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([LTLIBOBJS]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([top_builddir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([top_build_prefix]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([srcdir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([abs_srcdir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([top_srcdir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([abs_top_srcdir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([builddir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([abs_builddir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([abs_top_builddir]) diff --git a/coreseek/csft-4.1/autom4te.cache/traces.1 b/coreseek/csft-4.1/autom4te.cache/traces.1 new file mode 100644 index 0000000..0adfdff --- /dev/null +++ b/coreseek/csft-4.1/autom4te.cache/traces.1 @@ -0,0 +1,1687 @@ +m4trace:/usr/share/aclocal-1.11/amversion.m4:17: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.3], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:36: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.3])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +m4trace:/usr/share/aclocal-1.11/auxdir.m4:49: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) +m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) +m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:164: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:172: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) +m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) +m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) +m4trace:/usr/share/aclocal-1.11/install-sh.m4:14: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) +m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) +m4trace:/usr/share/aclocal-1.11/maintainer.m4:19: -1- AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl + +]) +m4trace:/usr/share/aclocal-1.11/maintainer.m4:39: -1- AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) +m4trace:/usr/share/aclocal-1.11/maintainer.m4:39: -1- AC_DEFUN([jm_MAINTAINER_MODE], [AC_DIAGNOSE([obsolete], [The macro `jm_MAINTAINER_MODE' is obsolete. +You should run autoupdate.])dnl +AM_MAINTAINER_MODE]) +m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) +m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) +m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) +m4trace:/usr/share/aclocal-1.11/mkdirp.m4:14: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) +m4trace:/usr/share/aclocal-1.11/options.m4:14: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) +m4trace:/usr/share/aclocal-1.11/options.m4:20: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +m4trace:/usr/share/aclocal-1.11/options.m4:26: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +m4trace:/usr/share/aclocal-1.11/options.m4:32: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +m4trace:/usr/share/aclocal-1.11/python.m4:37: -1- AC_DEFUN([AM_PATH_PYTHON], [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], +[python python2 python3 python3.2 python3.1 python3.0 python2.7 dnl + python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0]) + + AC_ARG_VAR([PYTHON], [the Python interpreter]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) +m4trace:/usr/share/aclocal-1.11/python.m4:197: -1- AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) +m4trace:/usr/share/aclocal-1.11/runlog.m4:14: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) +m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) +m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few `make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using `$V' instead of `$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/strip.m4:19: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) +m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) +m4trace:acinclude.m4:7: -1- AC_DEFUN([AC_CHECK_MYSQL], [ + +mysqlconfig_locations="mysql_config /usr/bin/mysql_config /usr/local/bin/mysql_config /usr/local/mysql/bin/mysql_config /opt/mysql/bin/mysql_config /usr/pkg/bin/mysql_config" +user_mysql_includes= +user_mysql_libs= + +# check explicit MySQL root for mysql_config, include, lib +if test [ x$1 != xyes -a x$1 != xno ] +then + mysqlroot=`echo $1 | sed -e 's+/$++'` + if test [ -x "$mysqlroot/bin/mysql_config" ] + then + # if there's mysql_config, that's the best route + mysqlconfig_locations="$mysqlroot/bin/mysql_config" + elif test [ -d "$mysqlroot/include" -a -d "$mysqlroot/lib" ] + then + # explicit root; do not check well-known paths + mysqlconfig_locations= + + # includes + if test [ -d "$mysqlroot/include/mysql" ] + then + user_mysql_includes="$mysqlroot/include/mysql" + else + user_mysql_includes="$mysqlroot/include" + fi + + # libs + if test [ -d "$mysqlroot/lib/mysql" ] + then + user_mysql_libs="$mysqlroot/lib/mysql" + else + user_mysql_libs="$mysqlroot/lib" + fi + else + AC_MSG_ERROR([invalid MySQL root directory '$mysqlroot'; neither bin/mysql_config, nor include/ and lib/ were found there]) + fi +fi + + +# try running mysql_config +AC_MSG_CHECKING([for mysql_config]) +for mysqlconfig in $mysqlconfig_locations +do + if test [ -n "$mysqlconfig" ] + then + MYSQL_CFLAGS=`${mysqlconfig} --cflags 2>/dev/null` + MYSQL_LIBS=`${mysqlconfig} --libs 2>/dev/null` + + if test [ $? -eq 0 ] + then + AC_MSG_RESULT([$mysqlconfig]) + mysqlconfig= + break + else + MYSQL_CFLAGS= + MYSQL_LIBS= + fi + fi +done +if test [ -n "$mysqlconfig" ] +then + mysqlconfig_used= + AC_MSG_RESULT([not found]) +else + mysqlconfig_used=yes +fi + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test [ -z "$MYSQL_CFLAGS" ] +then + for CANDIDATE in "$user_mysql_includes" "/usr/local/mysql/include" "/usr/local/mysql/include/mysql" \ + "/usr/include/mysql" + do + if test [ -n "$CANDIDATE" -a -r "$CANDIDATE/mysql.h" ] + then + MYSQL_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test [ -z "$MYSQL_LIBS" ] +then + for CANDIDATE in "$user_mysql_libs" "/usr/lib64/mysql" \ + "/usr/local/mysql/lib/mysql" "/usr/local/mysql/lib" \ + "/usr/local/lib/mysql" "/usr/lib/mysql" \ + "/opt/mysql/lib/mysql" "/usr/pkg/lib/mysql" + do + if test [ -n "$CANDIDATE" -a -d "$CANDIDATE" ] + then + MYSQL_LIBS="-L$CANDIDATE -lmysqlclient -lz" + break + fi + done +fi + + +# apply explicit include path overrides +AC_ARG_WITH([mysql-includes], + AC_HELP_STRING([--with-mysql-includes], [path to MySQL header files]), + [ac_cv_mysql_includes=$withval]) +if test [ -n "$ac_cv_mysql_includes" ] +then + MYSQL_CFLAGS="-I$ac_cv_mysql_includes" +fi + + +# apply explicit lib path overrides +AC_ARG_WITH([mysql-libs], + AC_HELP_STRING([--with-mysql-libs], [path to MySQL libraries]), + [ac_cv_mysql_libs=$withval]) +if test [ -n "$ac_cv_mysql_libs" ] +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mysql_libs=`echo ${ac_cv_mysql_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MYSQL_LIBS="-L$ac_cv_mysql_libs -lmysqlclient -lz" +fi + +# if we got options from mysqlconfig try to actually use them +if test [ -n "$mysqlconfig_used" -a -n "$MYSQL_CFLAGS" -a -n "$MYSQL_LIBS" ] +then + _CFLAGS=$CFLAGS + _LIBS=$LIBS + + CFLAGS="$CFLAGS $MYSQL_CFLAGS" + LIBS="$LIBS $MYSQL_LIBS" + + AC_CHECK_FUNC(mysql_real_connect,[], + [ + # if mysql binary was built using a different compiler and we + # got options from mysql_config some of them might not work + # with compiler we will be using + + # throw away everything that isn't one of -D -L -I -l and retry + MYSQL_CFLAGS=`echo $MYSQL_CFLAGS | sed -e 's/-[[^DLIl]][[^ ]]*//g'` + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/-[[^DLIl]][[^ ]]*//g'` + + CFLAGS="$_CFLAGS $MYSQL_CFLAGS" + LIBS="$_LIBS $MYSQL_LIBS" + + unset ac_cv_func_mysql_real_connect + AC_CHECK_FUNC(mysql_real_connect,[], + [ + # ... that didn't help + # clear flags, the code below will complain + MYSQL_CFLAGS= + MYSQL_LIBS= + ]) + ]) + CFLAGS=$_CFLAGS + LIBS=$_LIBS +fi + +# now that we did all we could, perform final checks +AC_MSG_CHECKING([MySQL include files]) +if test [ -z "$MYSQL_CFLAGS" ] +then + AC_MSG_ERROR([missing include files. + +****************************************************************************** +ERROR: cannot find MySQL include files. + +Check that you do have MySQL include files installed. +The package name is typically 'mysql-devel'. + +If include files are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify includes location explicitly, using --with-mysql-includes; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +]) +else + AC_MSG_RESULT([$MYSQL_CFLAGS]) +fi + + +AC_MSG_CHECKING([MySQL libraries]) +if test [ -z "$MYSQL_LIBS" ] +then + AC_MSG_ERROR([missing libraries. + +****************************************************************************** +ERROR: cannot find MySQL libraries. + +Check that you do have MySQL libraries installed. +The package name is typically 'mysql-devel'. + +If libraries are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify libraries location explicitly, using --with-mysql-libs; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +]) +else + AC_MSG_RESULT([$MYSQL_LIBS]) +fi + + +]) +m4trace:acinclude.m4:230: -1- AC_DEFUN([AC_CHECK_PGSQL], [ + +# Check for custom includes path +if test [ -z "$ac_cv_pgsql_includes" ] +then + AC_ARG_WITH([pgsql-includes], + AC_HELP_STRING([--with-pgsql-includes], [path to PostgreSQL header files]), + [ac_cv_pgsql_includes=$withval]) +fi +if test [ -n "$ac_cv_pgsql_includes" ] +then + AC_CACHE_CHECK([PostgreSQL includes], [ac_cv_pgsql_includes], [ac_cv_pgsql_includes=""]) + PGSQL_CFLAGS="-I$ac_cv_pgsql_includes" +fi + +# Check for custom library path +if test [ -z "$ac_cv_pgsql_libs" ] +then + AC_ARG_WITH([pgsql-libs], + AC_HELP_STRING([--with-pgsql-libs], [path to PostgreSQL libraries]), + [ac_cv_pgsql_libs=$withval]) +fi +if test [ -n "$ac_cv_pgsql_libs" ] +then + AC_CACHE_CHECK([PostgreSQL libraries], [ac_cv_pgsql_libs], [ac_cv_pgsql_libs=""]) + PGSQL_LIBS="-L$ac_cv_pgsql_libs -lpq" +fi + +# If some path is missing, try to autodetermine with pgsql_config +if test [ -z "$ac_cv_pgsql_includes" -o -z "$ac_cv_pgsql_libs" ] +then + if test [ -z "$pgconfig" ] + then + AC_PATH_PROG(pgconfig,pg_config) + fi + if test [ -z "$pgconfig" ] + then + AC_MSG_ERROR([pg_config executable not found +******************************************************************************** +ERROR: cannot find PostgreSQL libraries. If you want to compile with PosgregSQL support, + you must either specify file locations explicitly using + --with-pgsql-includes and --with-pgsql-libs options, or make sure path to + pg_config is listed in your PATH environment variable. If you want to + disable PostgreSQL support, use --without-pgsql option. +******************************************************************************** +]) + else + if test [ -z "$ac_cv_pgsql_includes" ] + then + AC_MSG_CHECKING(PostgreSQL C flags) + PGSQL_CFLAGS="-I`${pgconfig} --includedir`" + AC_MSG_RESULT($PGSQL_CFLAGS) + fi + if test [ -z "$ac_cv_pgsql_libs" ] + then + AC_MSG_CHECKING(PostgreSQL linker flags) + PGSQL_LIBS="-L`${pgconfig} --libdir` -lpq" + AC_MSG_RESULT($PGSQL_LIBS) + fi + fi +fi +]) +m4trace:acinclude.m4:299: -1- AC_DEFUN([AC_CHECK_MMSEG], [ + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test [ -z "$MMSEG_CFLAGS" ] +then + for CANDIDATE in "$user_mmseg_includes" "/usr/local/include/mmseg" "/usr/include/mmseg" + do + if test [ -n "$CANDIDATE" -a -r "$CANDIDATE/Segmenter.h" ] + then + MMSEG_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test [ -z "$MMSEG_LIBS" ] +then + for CANDIDATE in "$user_mmseg_libs" "/usr/lib64" \ + "/usr/local/lib" "/usr/local/mmseg/lib" \ + "/usr/local/lib/mmseg" "/usr/lib" \ + "/opt/mmseg/lib" + do + if test [ -n "$CANDIDATE" -a -d "$CANDIDATE" ] + then + MMSEG_LIBS="-L$CANDIDATE -lmmseg" + break + fi + done +fi + + + +# apply explicit include path overrides +AC_ARG_WITH([mmseg-includes], + AC_HELP_STRING([--with-mmseg-includes], [path to libmmseg header files]), + [ac_cv_mmseg_includes=$withval]) +if test [ -n "$ac_cv_mmseg_includes" ] +then + MMSEG_CFLAGS="-I$ac_cv_mmseg_includes" +fi + + +# apply explicit lib path overrides +AC_ARG_WITH([mmseg-libs], + AC_HELP_STRING([--with-mmseg-libs], [path to libmmseg libraries]), + [ac_cv_mmseg_libs=$withval]) +if test [ -n "$ac_cv_mmseg_libs" ] +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mmseg_libs=`echo ${ac_cv_mmseg_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MMSEG_LIBS="-L$ac_cv_mmseg_libs -lmmseg" +fi + +# now that we did all we could, perform final checks +AC_MSG_CHECKING([libmmseg include files]) +if test [ -z "$MMSEG_CFLAGS" ] +then + AC_MSG_ERROR([missing include files. + +****************************************************************************** +ERROR: cannot find libmmseg include files. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +]) +else + AC_MSG_RESULT([$MMSEG_CFLAGS]) +fi + +AC_MSG_CHECKING([libmmseg libraries]) +if test [ -z "$MMSEG_LIBS" ] +then + AC_MSG_ERROR([missing libraries. + +****************************************************************************** +ERROR: cannot find libmmseg libraries. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +]) +else + AC_MSG_RESULT([$MMSEG_LIBS]) +fi + +]) +m4trace:acinclude.m4:397: -1- AC_DEFUN([SPHINX_CONFIGURE_PART], [ + AC_MSG_RESULT() + AC_MSG_RESULT([$1]) + TMP=`echo $1 | sed -e sX.X-Xg` + AC_MSG_RESULT([$TMP]) + AC_MSG_RESULT() +]) +m4trace:acinclude.m4:411: -1- AC_DEFUN([SPHINX_CHECK_DEFINE], [ + AC_CACHE_CHECK([for $1 in $2],ac_cv_define_$1,[ + AC_EGREP_CPP(YES_IS_DEFINED, [ +#include <$2> +#ifdef $1 +YES_IS_DEFINED +#endif + ], ac_cv_define_$1=yes, ac_cv_define_$1=no) + ]) + if test "$ac_cv_define_$1" = "yes"; then + AC_DEFINE(HAVE_$1, 1, [Define if $1 is defined in $2]) + fi +]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:4: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:6: -1- m4_include([python.m4]) +m4trace:python.m4:7: -1- AC_DEFUN([INN_PATH_PROG_ENSURE], [AC_PATH_PROG([$1], [$2]) +if test x"${$1}" = x ; then + AC_MSG_ERROR([$2 was not found in path and is required]) +fi]) +m4trace:python.m4:21: -1- AC_DEFUN([INN_ARG_PYTHON], [AC_ARG_VAR([PYTHON], [Location of Python interpretor]) +AC_ARG_WITH([python], + [AC_HELP_STRING([--with-python], [Embedded Python datasource support [no]])], + [case $withval in + yes) USE_PYTHON=DO + AC_DEFINE(USE_PYTHON, 1, + [Define to compile in Python datasource support.]) + ;; + no) USE_PYTHON=DONT ;; + *) AC_MSG_ERROR([invalid argument to --with-python]) ;; + esac], + USE_PYTHON=DONT) + +dnl A better way of doing this rather than grepping through the Makefile would +dnl be to use distutils.sysconfig, but this module isn't available in older +dnl versions of Python. +if test x"$USE_PYTHON" = xDO ; then + INN_PATH_PROG_ENSURE([PYTHON], [python]) + AC_MSG_CHECKING([for Python linkage]) + py_prefix=`$PYTHON -c 'import sys; print sys.prefix'` + py_ver=`$PYTHON -c 'import sys; print sys.version[[:3]]'` + py_libdir="$py_prefix/lib/python$py_ver" + PYTHON_CPPFLAGS="-I$py_prefix/include/python$py_ver" + py_linkage="" + for py_linkpart in LIBS LIBC LIBM LOCALMODLIBS BASEMODLIBS \ + LINKFORSHARED LDFLAGS ; do + py_linkage="$py_linkage "`grep "^${py_linkpart}=" \ + $py_libdir/config/Makefile \ + | sed -e 's/^.*=//'` + done + dnl PYTHON_LIBS="-L$py_libdir/config -lpython$py_ver $py_linkage" + PYTHON_LIBS="-L$py_libdir/config -lpython$py_ver " + PYTHON_LIBS=`echo $PYTHON_LIBS | sed -e 's/[ \\t]*/ /g'` + AC_MSG_RESULT([$py_libdir]) +else + PYTHON_CPPFLAGS= + PYTHON_LIBS= +fi +AC_SUBST([PYTHON_CPPFLAGS]) +AC_SUBST([PYTHON_LIBS])]) +m4trace:configure.ac:10: -1- SPHINX_CONFIGURE_PART([checking build environment]) +m4trace:configure.ac:13: -1- AM_INIT_AUTOMAKE([-Wall -Werror foreign]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.ac:13: -1- AM_SET_CURRENT_AUTOMAKE_VERSION +m4trace:configure.ac:13: -1- AM_AUTOMAKE_VERSION([1.11.3]) +m4trace:configure.ac:13: -1- _AM_AUTOCONF_VERSION([2.68]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.ac:13: -1- _AM_SET_OPTIONS([-Wall -Werror foreign]) +m4trace:configure.ac:13: -1- _AM_SET_OPTION([-Wall]) +m4trace:configure.ac:13: -2- _AM_MANGLE_OPTION([-Wall]) +m4trace:configure.ac:13: -1- _AM_SET_OPTION([-Werror]) +m4trace:configure.ac:13: -2- _AM_MANGLE_OPTION([-Werror]) +m4trace:configure.ac:13: -1- _AM_SET_OPTION([foreign]) +m4trace:configure.ac:13: -2- _AM_MANGLE_OPTION([foreign]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:13: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) +m4trace:configure.ac:13: -2- _AM_MANGLE_OPTION([no-define]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:13: -1- AM_SANITY_CHECK +m4trace:configure.ac:13: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +m4trace:configure.ac:13: -1- AM_MISSING_HAS_RUN +m4trace:configure.ac:13: -1- AM_AUX_DIR_EXPAND +m4trace:configure.ac:13: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.ac:13: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.ac:13: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.ac:13: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.ac:13: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.ac:13: -1- AM_PROG_INSTALL_SH +m4trace:configure.ac:13: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.ac:13: -1- AM_PROG_INSTALL_STRIP +m4trace:configure.ac:13: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.ac:13: -1- AM_PROG_MKDIR_P +m4trace:configure.ac:13: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.ac:13: -1- AM_SET_LEADING_DOT +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.ac:13: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +m4trace:configure.ac:13: -2- _AM_MANGLE_OPTION([tar-ustar]) +m4trace:configure.ac:13: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) +m4trace:configure.ac:13: -2- _AM_MANGLE_OPTION([tar-pax]) +m4trace:configure.ac:13: -1- _AM_PROG_TAR([v7]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.ac:13: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +m4trace:configure.ac:13: -2- _AM_MANGLE_OPTION([no-dependencies]) +m4trace:configure.ac:13: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])]) +m4trace:configure.ac:13: -2- _AM_MANGLE_OPTION([silent-rules]) +m4trace:configure.ac:14: -1- AM_MAINTAINER_MODE +m4trace:configure.ac:14: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^MAINTAINER_MODE_TRUE$]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^MAINTAINER_MODE_FALSE$]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_TRUE]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_FALSE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^MAINT$]) +m4trace:configure.ac:15: -1- AM_PATH_PYTHON +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON_PREFIX$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON_PLATFORM$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^pythondir$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^pkgpythondir$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^pyexecdir$]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^pkgpyexecdir$]) +m4trace:configure.ac:25: -1- SPHINX_CONFIGURE_PART([checking for compiler programs]) +m4trace:configure.ac:28: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:28: the top level]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:59: -1- _AM_DEPENDENCIES([CC]) +m4trace:configure.ac:59: -1- AM_SET_DEPDIR +m4trace:configure.ac:59: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.ac:59: -1- AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:59: -1- AM_MAKE_INCLUDE +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.ac:59: -1- AM_DEP_TRACK +m4trace:configure.ac:59: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__nodep$]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([am__nodep]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.ac:59: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:60: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:60: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:60: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:60: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:61: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:64: -1- INN_ARG_PYTHON +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:64: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1482: AC_ARG_WITH is expanded from... +python.m4:21: INN_ARG_PYTHON is expanded from... +configure.ac:64: the top level]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^USE_PYTHON$]) +m4trace:configure.ac:64: -1- INN_PATH_PROG_ENSURE([PYTHON], [python]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON_CPPFLAGS$]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON_LIBS$]) +m4trace:configure.ac:66: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from... +../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from... +configure.ac:66: the top level]) +m4trace:configure.ac:76: -1- m4_pattern_allow([^COMPILER$]) +m4trace:configure.ac:77: -1- m4_pattern_allow([^OS_UNAME$]) +m4trace:configure.ac:81: -1- SPHINX_CONFIGURE_PART([checking for header files]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:85: -1- m4_pattern_allow([^HAVE_SYS_WAIT_H$]) +m4trace:configure.ac:95: -1- SPHINX_CONFIGURE_PART([checking for types]) +m4trace:configure.ac:98: -1- m4_pattern_allow([^HAVE__BOOL$]) +m4trace:configure.ac:98: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) +m4trace:configure.ac:99: -1- m4_pattern_allow([^const$]) +m4trace:configure.ac:101: -1- m4_pattern_allow([^off_t$]) +m4trace:configure.ac:102: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.ac:103: -1- m4_pattern_allow([^TIME_WITH_SYS_TIME$]) +m4trace:configure.ac:107: -1- SPHINX_CONFIGURE_PART([checking for library functions]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^pid_t$]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_VFORK_H$]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_WORKING_VFORK$]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^vfork$]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_WORKING_FORK$]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^malloc$]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_REALLOC$]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_REALLOC$]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^realloc$]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG1$]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG234$]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG5$]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete. +You should run autoupdate.], [../../lib/autoconf/types.m4:738: AC_TYPE_SIGNAL is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^RETSIGTYPE$]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LSTAT_FOLLOWS_SLASHED_SYMLINK$]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^HAVE_STAT_EMPTY_STRING_BUG$]) +m4trace:configure.ac:116: -1- m4_pattern_allow([^HAVE_VPRINTF$]) +m4trace:configure.ac:116: -1- m4_pattern_allow([^HAVE_DOPRNT$]) +m4trace:configure.ac:130: -1- m4_pattern_allow([^HAVE_LIBRT$]) +m4trace:configure.ac:134: -1- m4_pattern_allow([^LIBRT$]) +m4trace:configure.ac:137: -1- m4_pattern_allow([^HAVE_CLOCK_GETTIME$]) +m4trace:configure.ac:139: -1- SPHINX_CHECK_DEFINE([LOCK_EX], [sys/file.h]) +m4trace:configure.ac:139: -1- m4_pattern_allow([^HAVE_LOCK_EX$]) +m4trace:configure.ac:140: -1- SPHINX_CHECK_DEFINE([F_SETLKW], [fcntl.h]) +m4trace:configure.ac:140: -1- m4_pattern_allow([^HAVE_F_SETLKW$]) +m4trace:configure.ac:145: -1- m4_pattern_allow([^HAVE_LIBDL$]) +m4trace:configure.ac:150: -1- SPHINX_CONFIGURE_PART([configuring Sphinx]) +m4trace:configure.ac:178: -1- AC_DEFUN([PTHREADS_TRY_RUNCOMPILE], [ +if test x$cross_compiling = xno ; then + AC_TRY_RUN($pthread_prog, [pthreads_try_run=yes], [pthreads_try_run=no], [pthreads_try_run=no]) + if test x$pthreads_try_run = xyes ; then + $1 + fi +else + AC_COMPILE_IFELSE($pthread_prog, [pthreads_try_compile=yes], [pthreads_try_compile=no], [pthreads_try_compile=no]) + if test x$pthreads_try_compile = xyes ; then + $1 + fi +fi +]) +m4trace:configure.ac:193: -1- AC_DEFUN([PTHREADS_TRY_RUNLINK], [ +if test x$cross_compiling = xno ; then + AC_TRY_RUN($pthread_prog, [pthreads_try_run=yes], [pthreads_try_run=no], [pthreads_try_run=no]) + if test x$pthreads_try_run = xyes ; then + $1 + fi +else + AC_LINK_IFELSE($pthread_prog, [pthreads_try_link=yes], [pthreads_try_link=no], [pthreads_try_link=no]) + if test x$pthreads_try_link = xyes ; then + $1 + fi +fi +]) +m4trace:configure.ac:208: -1- PTHREADS_TRY_RUNCOMPILE([ + sphinx_cv_pthreads_cflags="$flag" + break + ]) +m4trace:configure.ac:208: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from... +configure.ac:178: PTHREADS_TRY_RUNCOMPILE is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:208: the top level]) +m4trace:configure.ac:208: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from... +../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from... +configure.ac:178: PTHREADS_TRY_RUNCOMPILE is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:208: the top level]) +m4trace:configure.ac:230: -1- PTHREADS_TRY_RUNLINK([ + sphinx_cv_pthreads_libs=$lib + break + ]) +m4trace:configure.ac:230: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from... +configure.ac:193: PTHREADS_TRY_RUNLINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:230: the top level]) +m4trace:configure.ac:230: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2662: _AC_LINK_IFELSE is expanded from... +../../lib/autoconf/general.m4:2679: AC_LINK_IFELSE is expanded from... +configure.ac:193: PTHREADS_TRY_RUNLINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:230: the top level]) +m4trace:configure.ac:259: -1- m4_pattern_allow([^HAVE_PTHREAD_MUTEX_TIMEDLOCK$]) +m4trace:configure.ac:265: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:265: the top level]) +m4trace:configure.ac:271: -1- AC_CHECK_MYSQL([$ac_cv_use_mysql]) +m4trace:configure.ac:271: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:7: AC_CHECK_MYSQL is expanded from... +configure.ac:271: the top level]) +m4trace:configure.ac:271: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:7: AC_CHECK_MYSQL is expanded from... +configure.ac:271: the top level]) +m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_MYSQL$]) +m4trace:configure.ac:273: -1- m4_pattern_allow([^MYSQL_LIBS$]) +m4trace:configure.ac:274: -1- m4_pattern_allow([^MYSQL_CFLAGS$]) +m4trace:configure.ac:278: -1- AM_CONDITIONAL([USE_MYSQL], [test x$ac_cv_use_mysql != xno]) +m4trace:configure.ac:278: -1- m4_pattern_allow([^USE_MYSQL_TRUE$]) +m4trace:configure.ac:278: -1- m4_pattern_allow([^USE_MYSQL_FALSE$]) +m4trace:configure.ac:278: -1- _AM_SUBST_NOTMAKE([USE_MYSQL_TRUE]) +m4trace:configure.ac:278: -1- _AM_SUBST_NOTMAKE([USE_MYSQL_FALSE]) +m4trace:configure.ac:282: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:282: the top level]) +m4trace:configure.ac:288: -1- AC_CHECK_MYSQL([$ac_cv_use_static_mysql]) +m4trace:configure.ac:288: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:7: AC_CHECK_MYSQL is expanded from... +configure.ac:288: the top level]) +m4trace:configure.ac:288: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:7: AC_CHECK_MYSQL is expanded from... +configure.ac:288: the top level]) +m4trace:configure.ac:299: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:299: the top level]) +m4trace:configure.ac:305: -1- AC_CHECK_PGSQL([$ac_cv_use_pgsql]) +m4trace:configure.ac:305: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:230: AC_CHECK_PGSQL is expanded from... +configure.ac:305: the top level]) +m4trace:configure.ac:305: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:230: AC_CHECK_PGSQL is expanded from... +configure.ac:305: the top level]) +m4trace:configure.ac:305: -1- m4_pattern_allow([^pgconfig$]) +m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PGSQL$]) +m4trace:configure.ac:307: -1- m4_pattern_allow([^PGSQL_LIBS$]) +m4trace:configure.ac:308: -1- m4_pattern_allow([^PGSQL_CFLAGS$]) +m4trace:configure.ac:312: -1- AM_CONDITIONAL([USE_PGSQL], [test x$ac_cv_use_pgsql != xno]) +m4trace:configure.ac:312: -1- m4_pattern_allow([^USE_PGSQL_TRUE$]) +m4trace:configure.ac:312: -1- m4_pattern_allow([^USE_PGSQL_FALSE$]) +m4trace:configure.ac:312: -1- _AM_SUBST_NOTMAKE([USE_PGSQL_TRUE]) +m4trace:configure.ac:312: -1- _AM_SUBST_NOTMAKE([USE_PGSQL_FALSE]) +m4trace:configure.ac:317: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:317: the top level]) +m4trace:configure.ac:323: -1- AC_CHECK_MMSEG([$ac_cv_use_mmseg]) +m4trace:configure.ac:323: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:299: AC_CHECK_MMSEG is expanded from... +configure.ac:323: the top level]) +m4trace:configure.ac:323: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:299: AC_CHECK_MMSEG is expanded from... +configure.ac:323: the top level]) +m4trace:configure.ac:324: -1- m4_pattern_allow([^USE_MMSEG$]) +m4trace:configure.ac:325: -1- m4_pattern_allow([^MMSEG_LIBS$]) +m4trace:configure.ac:326: -1- m4_pattern_allow([^MMSEG_CFLAGS$]) +m4trace:configure.ac:330: -1- AM_CONDITIONAL([USE_MMSEG], [test x$ac_cv_use_mmseg != xno]) +m4trace:configure.ac:330: -1- m4_pattern_allow([^USE_MMSEG_TRUE$]) +m4trace:configure.ac:330: -1- m4_pattern_allow([^USE_MMSEG_FALSE$]) +m4trace:configure.ac:330: -1- _AM_SUBST_NOTMAKE([USE_MMSEG_TRUE]) +m4trace:configure.ac:330: -1- _AM_SUBST_NOTMAKE([USE_MMSEG_FALSE]) +m4trace:configure.ac:340: -1- AM_CONDITIONAL([USE_PYTHON], [test x"$USE_PYTHON" = xDO]) +m4trace:configure.ac:340: -1- m4_pattern_allow([^USE_PYTHON_TRUE$]) +m4trace:configure.ac:340: -1- m4_pattern_allow([^USE_PYTHON_FALSE$]) +m4trace:configure.ac:340: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_TRUE]) +m4trace:configure.ac:340: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_FALSE]) +m4trace:configure.ac:352: -1- m4_pattern_allow([^USE_64BIT$]) +m4trace:configure.ac:355: -1- m4_pattern_allow([^USE_64BIT$]) +m4trace:configure.ac:362: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:362: the top level]) +m4trace:configure.ac:370: -1- m4_pattern_allow([^USE_LIBSTEMMER$]) +m4trace:configure.ac:381: -1- m4_pattern_allow([^USE_LIBSTEMMER$]) +m4trace:configure.ac:383: -1- AM_CONDITIONAL([USE_LIBSTEMMER], [test x$ac_cv_use_libstemmer != xno]) +m4trace:configure.ac:383: -1- m4_pattern_allow([^USE_LIBSTEMMER_TRUE$]) +m4trace:configure.ac:383: -1- m4_pattern_allow([^USE_LIBSTEMMER_FALSE$]) +m4trace:configure.ac:383: -1- _AM_SUBST_NOTMAKE([USE_LIBSTEMMER_TRUE]) +m4trace:configure.ac:383: -1- _AM_SUBST_NOTMAKE([USE_LIBSTEMMER_FALSE]) +m4trace:configure.ac:390: -1- m4_pattern_allow([^USE_LIBEXPAT$]) +m4trace:configure.ac:401: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:401: the top level]) +m4trace:configure.ac:410: -1- m4_pattern_allow([^USE_LIBICONV$]) +m4trace:configure.ac:427: -1- m4_pattern_allow([^ICONV_INBUF_CONST$]) +m4trace:configure.ac:430: -1- m4_pattern_allow([^ICONV_INBUF_CONST$]) +m4trace:configure.ac:449: -1- m4_pattern_allow([^USE_ZLIB$]) +m4trace:configure.ac:455: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:455: the top level]) +m4trace:configure.ac:463: -1- m4_pattern_allow([^USE_ODBC$]) +m4trace:configure.ac:478: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:478: the top level]) +m4trace:configure.ac:484: -1- m4_pattern_allow([^USE_SYSLOG$]) +m4trace:configure.ac:526: -1- m4_pattern_allow([^UNALIGNED_RAM_ACCESS$]) +m4trace:configure.ac:528: -1- m4_pattern_allow([^UNALIGNED_RAM_ACCESS$]) +m4trace:configure.ac:533: -2- m4_pattern_allow([^USE_LITTLE_ENDIAN$]) +m4trace:configure.ac:534: -2- m4_pattern_allow([^USE_LITTLE_ENDIAN$]) +m4trace:configure.ac:541: -1- SPHINX_CONFIGURE_PART([generating configuration files]) +m4trace:configure.ac:551: -1- m4_pattern_allow([^CONFDIR$]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:555: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:555: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:555: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:555: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) +m4trace:configure.ac:555: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:559: -1- SPHINX_CONFIGURE_PART([configuration done]) diff --git a/coreseek/csft-4.1/autom4te.cache/traces.2 b/coreseek/csft-4.1/autom4te.cache/traces.2 new file mode 100644 index 0000000..5b4152f --- /dev/null +++ b/coreseek/csft-4.1/autom4te.cache/traces.2 @@ -0,0 +1,963 @@ +m4trace:aclocal.m4:1215: -1- m4_include([acinclude.m4]) +m4trace:configure.ac:4: -1- AC_INIT([sphinx], [1.11], [shodan(at)shodan.ru]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:4: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:4: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:4: -1- AC_SUBST([SHELL]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([SHELL]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:4: -1- AC_SUBST([PATH_SEPARATOR]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_NAME]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_STRING]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:4: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([PACKAGE_URL]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:4: -1- AC_SUBST([exec_prefix], [NONE]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([exec_prefix]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:4: -1- AC_SUBST([prefix], [NONE]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([prefix]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:4: -1- AC_SUBST([program_transform_name], [s,x,x,]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([program_transform_name]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:4: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([bindir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:4: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([sbindir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:4: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([libexecdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([datarootdir], ['${prefix}/share']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([datarootdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([datadir], ['${datarootdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([datadir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:4: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([sysconfdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([sharedstatedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([localstatedir], ['${prefix}/var']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([localstatedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([includedir], ['${prefix}/include']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([includedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([oldincludedir], ['/usr/include']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([oldincludedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], + ['${datarootdir}/doc/${PACKAGE_TARNAME}'], + ['${datarootdir}/doc/${PACKAGE}'])]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([docdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([infodir], ['${datarootdir}/info']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([infodir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:4: -1- AC_SUBST([htmldir], ['${docdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([htmldir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:4: -1- AC_SUBST([dvidir], ['${docdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([dvidir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:4: -1- AC_SUBST([pdfdir], ['${docdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([pdfdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([psdir], ['${docdir}']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([psdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([libdir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:4: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([localedir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:4: -1- AC_SUBST([mandir], ['${datarootdir}/man']) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([mandir]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ +@%:@undef PACKAGE_NAME]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ +@%:@undef PACKAGE_TARNAME]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ +@%:@undef PACKAGE_VERSION]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ +@%:@undef PACKAGE_STRING]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ +@%:@undef PACKAGE_BUGREPORT]) +m4trace:configure.ac:4: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:4: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ +@%:@undef PACKAGE_URL]) +m4trace:configure.ac:4: -1- AC_SUBST([DEFS]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([DEFS]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:4: -1- AC_SUBST([ECHO_C]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([ECHO_C]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:4: -1- AC_SUBST([ECHO_N]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([ECHO_N]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:4: -1- AC_SUBST([ECHO_T]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([ECHO_T]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:4: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:4: -1- AC_SUBST([build_alias]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([build_alias]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:4: -1- AC_SUBST([host_alias]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([host_alias]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:4: -1- AC_SUBST([target_alias]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([target_alias]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:6: -1- m4_include([python.m4]) +m4trace:configure.ac:12: -1- AC_CONFIG_AUX_DIR([config]) +m4trace:configure.ac:13: -1- AM_INIT_AUTOMAKE([-Wall -Werror foreign]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.ac:13: -1- AM_AUTOMAKE_VERSION([1.11.3]) +m4trace:configure.ac:13: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.ac:13: -1- AC_SUBST([INSTALL_PROGRAM]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.ac:13: -1- AC_SUBST([INSTALL_SCRIPT]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.ac:13: -1- AC_SUBST([INSTALL_DATA]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([INSTALL_DATA]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.ac:13: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([am__isrc]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.ac:13: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.ac:13: -1- AC_SUBST([CYGPATH_W]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([CYGPATH_W]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:13: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([VERSION]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ +@%:@undef PACKAGE]) +m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:13: -1- AH_OUTPUT([VERSION], [/* Version number of package */ +@%:@undef VERSION]) +m4trace:configure.ac:13: -1- AC_REQUIRE_AUX_FILE([missing]) +m4trace:configure.ac:13: -1- AC_SUBST([ACLOCAL]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ACLOCAL]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.ac:13: -1- AC_SUBST([AUTOCONF]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([AUTOCONF]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.ac:13: -1- AC_SUBST([AUTOMAKE]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([AUTOMAKE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.ac:13: -1- AC_SUBST([AUTOHEADER]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([AUTOHEADER]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.ac:13: -1- AC_SUBST([MAKEINFO]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([MAKEINFO]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.ac:13: -1- AC_SUBST([install_sh]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([install_sh]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.ac:13: -1- AC_SUBST([STRIP]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:13: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.ac:13: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.ac:13: -1- AC_SUBST([MKDIR_P]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.ac:13: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([mkdir_p]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.ac:13: -1- AC_SUBST([AWK]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([AWK]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.ac:13: -1- AC_SUBST([SET_MAKE]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([SET_MAKE]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.ac:13: -1- AC_SUBST([am__leading_dot]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([am__leading_dot]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.ac:13: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([AMTAR]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.ac:13: -1- AC_SUBST([am__tar]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([am__tar]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.ac:13: -1- AC_SUBST([am__untar]) +m4trace:configure.ac:13: -1- AC_SUBST_TRACE([am__untar]) +m4trace:configure.ac:13: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.ac:14: -1- AM_MAINTAINER_MODE +m4trace:configure.ac:14: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) +m4trace:configure.ac:14: -1- AC_SUBST([MAINTAINER_MODE_TRUE]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([MAINTAINER_MODE_TRUE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^MAINTAINER_MODE_TRUE$]) +m4trace:configure.ac:14: -1- AC_SUBST([MAINTAINER_MODE_FALSE]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([MAINTAINER_MODE_FALSE]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^MAINTAINER_MODE_FALSE$]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_TRUE]) +m4trace:configure.ac:14: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_FALSE]) +m4trace:configure.ac:14: -1- AC_SUBST([MAINT]) +m4trace:configure.ac:14: -1- AC_SUBST_TRACE([MAINT]) +m4trace:configure.ac:14: -1- m4_pattern_allow([^MAINT$]) +m4trace:configure.ac:15: -1- AC_SUBST([PYTHON]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PYTHON]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:15: -1- AC_SUBST([PYTHON]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PYTHON]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:15: -1- AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PYTHON_VERSION]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:15: -1- AC_SUBST([PYTHON_PREFIX], ['${prefix}']) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PYTHON_PREFIX]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON_PREFIX$]) +m4trace:configure.ac:15: -1- AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PYTHON_EXEC_PREFIX]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$]) +m4trace:configure.ac:15: -1- AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PYTHON_PLATFORM]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^PYTHON_PLATFORM$]) +m4trace:configure.ac:15: -1- AC_SUBST([pythondir], [$am_cv_python_pythondir]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([pythondir]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^pythondir$]) +m4trace:configure.ac:15: -1- AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([pkgpythondir]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^pkgpythondir$]) +m4trace:configure.ac:15: -1- AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([pyexecdir]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^pyexecdir$]) +m4trace:configure.ac:15: -1- AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) +m4trace:configure.ac:15: -1- AC_SUBST_TRACE([pkgpyexecdir]) +m4trace:configure.ac:15: -1- m4_pattern_allow([^pkgpyexecdir$]) +m4trace:configure.ac:17: -1- AC_CONFIG_HEADERS([config/config.h]) +m4trace:configure.ac:28: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:28: the top level]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([CFLAGS]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CFLAGS]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:59: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:59: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:59: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([ac_ct_CC]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([ac_ct_CC]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:59: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([EXEEXT]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:59: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([OBJEXT]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:59: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([DEPDIR]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.ac:59: -1- AC_SUBST([am__include]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([am__include]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.ac:59: -1- AC_SUBST([am__quote]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([am__quote]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.ac:59: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.ac:59: -1- AC_SUBST([AMDEP_TRUE]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([AMDEP_TRUE]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.ac:59: -1- AC_SUBST([AMDEP_FALSE]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([AMDEP_FALSE]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.ac:59: -1- AC_SUBST([AMDEPBACKSLASH]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.ac:59: -1- AC_SUBST([am__nodep]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([am__nodep]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__nodep$]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([am__nodep]) +m4trace:configure.ac:59: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([CCDEPMODE]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.ac:59: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:59: -1- AC_SUBST([am__fastdepCC_TRUE]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.ac:59: -1- AC_SUBST([am__fastdepCC_FALSE]) +m4trace:configure.ac:59: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) +m4trace:configure.ac:59: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.ac:59: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.ac:60: -1- AC_SUBST([CXX]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:60: -1- AC_SUBST([CXXFLAGS]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CXXFLAGS]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:60: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:60: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:60: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:60: -1- AC_SUBST([CXX]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:60: -1- AC_SUBST([ac_ct_CXX]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([ac_ct_CXX]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:60: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([CXXDEPMODE]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:60: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:60: -1- AC_SUBST([am__fastdepCXX_TRUE]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:60: -1- AC_SUBST([am__fastdepCXX_FALSE]) +m4trace:configure.ac:60: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:60: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:60: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:60: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:61: -1- AC_SUBST([RANLIB]) +m4trace:configure.ac:61: -1- AC_SUBST_TRACE([RANLIB]) +m4trace:configure.ac:61: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:64: -1- AC_SUBST([PYTHON]) +m4trace:configure.ac:64: -1- AC_SUBST_TRACE([PYTHON]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:64: -1- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +../../lib/autoconf/general.m4:1482: AC_ARG_WITH is expanded from... +python.m4:21: INN_ARG_PYTHON is expanded from... +configure.ac:64: the top level]) +m4trace:configure.ac:64: -1- AC_DEFINE_TRACE_LITERAL([USE_PYTHON]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^USE_PYTHON$]) +m4trace:configure.ac:64: -1- AH_OUTPUT([USE_PYTHON], [/* Define to compile in Python datasource support. */ +@%:@undef USE_PYTHON]) +m4trace:configure.ac:64: -1- AC_SUBST([PYTHON]) +m4trace:configure.ac:64: -1- AC_SUBST_TRACE([PYTHON]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:64: -1- AC_SUBST([PYTHON_CPPFLAGS]) +m4trace:configure.ac:64: -1- AC_SUBST_TRACE([PYTHON_CPPFLAGS]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON_CPPFLAGS$]) +m4trace:configure.ac:64: -1- AC_SUBST([PYTHON_LIBS]) +m4trace:configure.ac:64: -1- AC_SUBST_TRACE([PYTHON_LIBS]) +m4trace:configure.ac:64: -1- m4_pattern_allow([^PYTHON_LIBS$]) +m4trace:configure.ac:66: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from... +../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from... +configure.ac:66: the top level]) +m4trace:configure.ac:76: -1- AC_DEFINE_TRACE_LITERAL([COMPILER]) +m4trace:configure.ac:76: -1- m4_pattern_allow([^COMPILER$]) +m4trace:configure.ac:76: -1- AH_OUTPUT([COMPILER], [/* Define to be the name of the compiler. */ +@%:@undef COMPILER]) +m4trace:configure.ac:77: -1- AC_DEFINE_TRACE_LITERAL([OS_UNAME]) +m4trace:configure.ac:77: -1- m4_pattern_allow([^OS_UNAME$]) +m4trace:configure.ac:77: -1- AH_OUTPUT([OS_UNAME], [/* Full name OS */ +@%:@undef OS_UNAME]) +m4trace:configure.ac:84: -1- AC_SUBST([CPP]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:84: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:84: -1- AC_SUBST([CPP]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:84: -1- AC_SUBST([GREP]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:84: -1- AC_SUBST([EGREP]) +m4trace:configure.ac:84: -1- AC_SUBST_TRACE([EGREP]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:84: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.ac:84: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:84: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +@%:@undef STDC_HEADERS]) +m4trace:configure.ac:85: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_WAIT_H]) +m4trace:configure.ac:85: -1- m4_pattern_allow([^HAVE_SYS_WAIT_H$]) +m4trace:configure.ac:85: -1- AH_OUTPUT([HAVE_SYS_WAIT_H], [/* Define to 1 if you have that is POSIX.1 compatible. */ +@%:@undef HAVE_SYS_WAIT_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_FCNTL_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_LIMITS_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_NETDB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_NETDB_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_NETINET_IN_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_NETINET_IN_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRING_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_FILE_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_FILE_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_SOCKET_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_TIME_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_UNISTD_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_PTHREAD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_PTHREAD_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_EXECINFO_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_EXECINFO_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_TYPES_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_STAT_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRING_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_MEMORY_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRINGS_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_INTTYPES_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDINT_H]) +m4trace:configure.ac:86: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_UNISTD_H]) +m4trace:configure.ac:98: -1- AC_DEFINE_TRACE_LITERAL([HAVE__BOOL]) +m4trace:configure.ac:98: -1- m4_pattern_allow([^HAVE__BOOL$]) +m4trace:configure.ac:98: -1- AH_OUTPUT([HAVE__BOOL], [/* Define to 1 if the system has the type `_Bool\'. */ +@%:@undef HAVE__BOOL]) +m4trace:configure.ac:98: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDBOOL_H]) +m4trace:configure.ac:98: -1- m4_pattern_allow([^HAVE_STDBOOL_H$]) +m4trace:configure.ac:98: -1- AH_OUTPUT([HAVE_STDBOOL_H], [/* Define to 1 if stdbool.h conforms to C99. */ +@%:@undef HAVE_STDBOOL_H]) +m4trace:configure.ac:99: -1- AC_DEFINE_TRACE_LITERAL([const]) +m4trace:configure.ac:99: -1- m4_pattern_allow([^const$]) +m4trace:configure.ac:99: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */ +@%:@undef const]) +m4trace:configure.ac:100: -1- AH_OUTPUT([inline], [/* Define to `__inline__\' or `__inline\' if that\'s what the C compiler + calls it, or to nothing if \'inline\' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif]) +m4trace:configure.ac:101: -1- AC_DEFINE_TRACE_LITERAL([off_t]) +m4trace:configure.ac:101: -1- m4_pattern_allow([^off_t$]) +m4trace:configure.ac:101: -1- AH_OUTPUT([off_t], [/* Define to `long int\' if does not define. */ +@%:@undef off_t]) +m4trace:configure.ac:102: -1- AC_DEFINE_TRACE_LITERAL([size_t]) +m4trace:configure.ac:102: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.ac:102: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if does not define. */ +@%:@undef size_t]) +m4trace:configure.ac:103: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME]) +m4trace:configure.ac:103: -1- m4_pattern_allow([^TIME_WITH_SYS_TIME$]) +m4trace:configure.ac:103: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both and . */ +@%:@undef TIME_WITH_SYS_TIME]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([pid_t]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^pid_t$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([pid_t], [/* Define to `int\' if does not define. */ +@%:@undef pid_t]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_VFORK_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_VFORK_H]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VFORK_H]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_VFORK_H$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_FORK], [/* Define to 1 if you have the `fork\' function. */ +@%:@undef HAVE_FORK]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_VFORK], [/* Define to 1 if you have the `vfork\' function. */ +@%:@undef HAVE_VFORK]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_VFORK]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_WORKING_VFORK$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_WORKING_VFORK], [/* Define to 1 if `vfork\' works. */ +@%:@undef HAVE_WORKING_VFORK]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([vfork]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^vfork$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([vfork], [/* Define as `fork\' if `vfork\' does not work. */ +@%:@undef vfork]) +m4trace:configure.ac:110: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WORKING_FORK]) +m4trace:configure.ac:110: -1- m4_pattern_allow([^HAVE_WORKING_FORK$]) +m4trace:configure.ac:110: -1- AH_OUTPUT([HAVE_WORKING_FORK], [/* Define to 1 if `fork\' works. */ +@%:@undef HAVE_WORKING_FORK]) +m4trace:configure.ac:111: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:111: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDLIB_H]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) +m4trace:configure.ac:111: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:111: -1- AH_OUTPUT([HAVE_MALLOC], [/* Define to 1 if your system has a GNU libc compatible `malloc\' function, and + to 0 otherwise. */ +@%:@undef HAVE_MALLOC]) +m4trace:configure.ac:111: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MALLOC]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^HAVE_MALLOC$]) +m4trace:configure.ac:111: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS malloc.$ac_objext"]) +m4trace:configure.ac:111: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:111: -1- AC_LIBSOURCE([malloc.c]) +m4trace:configure.ac:111: -1- AC_DEFINE_TRACE_LITERAL([malloc]) +m4trace:configure.ac:111: -1- m4_pattern_allow([^malloc$]) +m4trace:configure.ac:111: -1- AH_OUTPUT([malloc], [/* Define to rpl_malloc if the replacement function should be used. */ +@%:@undef malloc]) +m4trace:configure.ac:112: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:112: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDLIB_H]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_STDLIB_H$]) +m4trace:configure.ac:112: -1- AC_DEFINE_TRACE_LITERAL([HAVE_REALLOC]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_REALLOC$]) +m4trace:configure.ac:112: -1- AH_OUTPUT([HAVE_REALLOC], [/* Define to 1 if your system has a GNU libc compatible `realloc\' function, + and to 0 otherwise. */ +@%:@undef HAVE_REALLOC]) +m4trace:configure.ac:112: -1- AC_DEFINE_TRACE_LITERAL([HAVE_REALLOC]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^HAVE_REALLOC$]) +m4trace:configure.ac:112: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS realloc.$ac_objext"]) +m4trace:configure.ac:112: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:112: -1- AC_LIBSOURCE([realloc.c]) +m4trace:configure.ac:112: -1- AC_DEFINE_TRACE_LITERAL([realloc]) +m4trace:configure.ac:112: -1- m4_pattern_allow([^realloc$]) +m4trace:configure.ac:112: -1- AH_OUTPUT([realloc], [/* Define to rpl_realloc if the replacement function should be used. */ +@%:@undef realloc]) +m4trace:configure.ac:113: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_SELECT_H]) +m4trace:configure.ac:113: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_SOCKET_H]) +m4trace:configure.ac:113: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG1]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG1$]) +m4trace:configure.ac:113: -1- AH_OUTPUT([SELECT_TYPE_ARG1], [/* Define to the type of arg 1 for `select\'. */ +@%:@undef SELECT_TYPE_ARG1]) +m4trace:configure.ac:113: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG234]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG234$]) +m4trace:configure.ac:113: -1- AH_OUTPUT([SELECT_TYPE_ARG234], [/* Define to the type of args 2, 3 and 4 for `select\'. */ +@%:@undef SELECT_TYPE_ARG234]) +m4trace:configure.ac:113: -1- AC_DEFINE_TRACE_LITERAL([SELECT_TYPE_ARG5]) +m4trace:configure.ac:113: -1- m4_pattern_allow([^SELECT_TYPE_ARG5$]) +m4trace:configure.ac:113: -1- AH_OUTPUT([SELECT_TYPE_ARG5], [/* Define to the type of arg 5 for `select\'. */ +@%:@undef SELECT_TYPE_ARG5]) +m4trace:configure.ac:114: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete. +You should run autoupdate.], [../../lib/autoconf/types.m4:738: AC_TYPE_SIGNAL is expanded from... +configure.ac:114: the top level]) +m4trace:configure.ac:114: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE]) +m4trace:configure.ac:114: -1- m4_pattern_allow([^RETSIGTYPE$]) +m4trace:configure.ac:114: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */ +@%:@undef RETSIGTYPE]) +m4trace:configure.ac:115: -1- AC_DEFINE_TRACE_LITERAL([LSTAT_FOLLOWS_SLASHED_SYMLINK]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LSTAT_FOLLOWS_SLASHED_SYMLINK$]) +m4trace:configure.ac:115: -1- AH_OUTPUT([LSTAT_FOLLOWS_SLASHED_SYMLINK], [/* Define to 1 if `lstat\' dereferences a symlink specified with a trailing + slash. */ +@%:@undef LSTAT_FOLLOWS_SLASHED_SYMLINK]) +m4trace:configure.ac:115: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS lstat.$ac_objext"]) +m4trace:configure.ac:115: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:115: -1- AC_LIBSOURCE([lstat.c]) +m4trace:configure.ac:115: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS stat.$ac_objext"]) +m4trace:configure.ac:115: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:115: -1- AC_LIBSOURCE([stat.c]) +m4trace:configure.ac:115: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STAT_EMPTY_STRING_BUG]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^HAVE_STAT_EMPTY_STRING_BUG$]) +m4trace:configure.ac:115: -1- AH_OUTPUT([HAVE_STAT_EMPTY_STRING_BUG], [/* Define to 1 if `stat\' has the bug that it succeeds when given the + zero-length file name argument. */ +@%:@undef HAVE_STAT_EMPTY_STRING_BUG]) +m4trace:configure.ac:116: -1- AH_OUTPUT([HAVE_VPRINTF], [/* Define to 1 if you have the `vprintf\' function. */ +@%:@undef HAVE_VPRINTF]) +m4trace:configure.ac:116: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VPRINTF]) +m4trace:configure.ac:116: -1- m4_pattern_allow([^HAVE_VPRINTF$]) +m4trace:configure.ac:116: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOPRNT]) +m4trace:configure.ac:116: -1- m4_pattern_allow([^HAVE_DOPRNT$]) +m4trace:configure.ac:116: -1- AH_OUTPUT([HAVE_DOPRNT], [/* Define to 1 if you don\'t have `vprintf\' but do have `_doprnt.\' */ +@%:@undef HAVE_DOPRNT]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_DUP2], [/* Define to 1 if you have the `dup2\' function. */ +@%:@undef HAVE_DUP2]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_GETHOSTBYNAME], [/* Define to 1 if you have the `gethostbyname\' function. */ +@%:@undef HAVE_GETHOSTBYNAME]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_GETTIMEOFDAY], [/* Define to 1 if you have the `gettimeofday\' function. */ +@%:@undef HAVE_GETTIMEOFDAY]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_MEMMOVE], [/* Define to 1 if you have the `memmove\' function. */ +@%:@undef HAVE_MEMMOVE]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */ +@%:@undef HAVE_MEMSET]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_SELECT], [/* Define to 1 if you have the `select\' function. */ +@%:@undef HAVE_SELECT]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_SOCKET], [/* Define to 1 if you have the `socket\' function. */ +@%:@undef HAVE_SOCKET]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\' function. */ +@%:@undef HAVE_STRCASECMP]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRCHR], [/* Define to 1 if you have the `strchr\' function. */ +@%:@undef HAVE_STRCHR]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */ +@%:@undef HAVE_STRERROR]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRNCASECMP], [/* Define to 1 if you have the `strncasecmp\' function. */ +@%:@undef HAVE_STRNCASECMP]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRSTR], [/* Define to 1 if you have the `strstr\' function. */ +@%:@undef HAVE_STRSTR]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_STRTOL], [/* Define to 1 if you have the `strtol\' function. */ +@%:@undef HAVE_STRTOL]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_LOGF], [/* Define to 1 if you have the `logf\' function. */ +@%:@undef HAVE_LOGF]) +m4trace:configure.ac:123: -1- AH_OUTPUT([HAVE_PREAD], [/* Define to 1 if you have the `pread\' function. */ +@%:@undef HAVE_PREAD]) +m4trace:configure.ac:124: -1- AH_OUTPUT([HAVE_BACKTRACE], [/* Define to 1 if you have the `backtrace\' function. */ +@%:@undef HAVE_BACKTRACE]) +m4trace:configure.ac:124: -1- AH_OUTPUT([HAVE_BACKTRACE_SYMBOLS], [/* Define to 1 if you have the `backtrace_symbols\' function. */ +@%:@undef HAVE_BACKTRACE_SYMBOLS]) +m4trace:configure.ac:130: -1- AH_OUTPUT([HAVE_LIBRT], [/* Define to 1 if you have the `rt\' library (-lrt). */ +@%:@undef HAVE_LIBRT]) +m4trace:configure.ac:130: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBRT]) +m4trace:configure.ac:130: -1- m4_pattern_allow([^HAVE_LIBRT$]) +m4trace:configure.ac:134: -1- AC_SUBST([LIBRT]) +m4trace:configure.ac:134: -1- AC_SUBST_TRACE([LIBRT]) +m4trace:configure.ac:134: -1- m4_pattern_allow([^LIBRT$]) +m4trace:configure.ac:137: -1- AH_OUTPUT([HAVE_CLOCK_GETTIME], [/* Define to 1 if you have the `clock_gettime\' function. */ +@%:@undef HAVE_CLOCK_GETTIME]) +m4trace:configure.ac:137: -1- AC_DEFINE_TRACE_LITERAL([HAVE_CLOCK_GETTIME]) +m4trace:configure.ac:137: -1- m4_pattern_allow([^HAVE_CLOCK_GETTIME$]) +m4trace:configure.ac:139: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCK_EX]) +m4trace:configure.ac:139: -1- m4_pattern_allow([^HAVE_LOCK_EX$]) +m4trace:configure.ac:139: -1- AH_OUTPUT([HAVE_LOCK_EX], [/* Define if LOCK_EX is defined in sys/file.h */ +@%:@undef HAVE_LOCK_EX]) +m4trace:configure.ac:140: -1- AC_DEFINE_TRACE_LITERAL([HAVE_F_SETLKW]) +m4trace:configure.ac:140: -1- m4_pattern_allow([^HAVE_F_SETLKW$]) +m4trace:configure.ac:140: -1- AH_OUTPUT([HAVE_F_SETLKW], [/* Define if F_SETLKW is defined in fcntl.h */ +@%:@undef HAVE_F_SETLKW]) +m4trace:configure.ac:145: -1- AH_OUTPUT([HAVE_LIBDL], [/* Define to 1 if you have the `dl\' library (-ldl). */ +@%:@undef HAVE_LIBDL]) +m4trace:configure.ac:145: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL]) +m4trace:configure.ac:145: -1- m4_pattern_allow([^HAVE_LIBDL$]) +m4trace:configure.ac:146: -1- AH_OUTPUT([HAVE_DLOPEN], [/* Define to 1 if you have the `dlopen\' function. */ +@%:@undef HAVE_DLOPEN]) +m4trace:configure.ac:146: -1- AH_OUTPUT([HAVE_DLERROR], [/* Define to 1 if you have the `dlerror\' function. */ +@%:@undef HAVE_DLERROR]) +m4trace:configure.ac:208: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from... +configure.ac:178: PTHREADS_TRY_RUNCOMPILE is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:208: the top level]) +m4trace:configure.ac:208: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from... +../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from... +configure.ac:178: PTHREADS_TRY_RUNCOMPILE is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:208: the top level]) +m4trace:configure.ac:230: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from... +configure.ac:193: PTHREADS_TRY_RUNLINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:230: the top level]) +m4trace:configure.ac:230: -1- _m4_warn([syntax], [AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body], [../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from... +../../lib/autoconf/general.m4:2662: _AC_LINK_IFELSE is expanded from... +../../lib/autoconf/general.m4:2679: AC_LINK_IFELSE is expanded from... +configure.ac:193: PTHREADS_TRY_RUNLINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +configure.ac:230: the top level]) +m4trace:configure.ac:259: -1- AH_OUTPUT([HAVE_PTHREAD_MUTEX_TIMEDLOCK], [/* Define to 1 if you have the `pthread_mutex_timedlock\' function. */ +@%:@undef HAVE_PTHREAD_MUTEX_TIMEDLOCK]) +m4trace:configure.ac:259: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PTHREAD_MUTEX_TIMEDLOCK]) +m4trace:configure.ac:259: -1- m4_pattern_allow([^HAVE_PTHREAD_MUTEX_TIMEDLOCK$]) +m4trace:configure.ac:265: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:265: the top level]) +m4trace:configure.ac:271: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:7: AC_CHECK_MYSQL is expanded from... +configure.ac:271: the top level]) +m4trace:configure.ac:271: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:7: AC_CHECK_MYSQL is expanded from... +configure.ac:271: the top level]) +m4trace:configure.ac:272: -1- AC_DEFINE_TRACE_LITERAL([USE_MYSQL]) +m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_MYSQL$]) +m4trace:configure.ac:272: -1- AH_OUTPUT([USE_MYSQL], [/* Define to 1 if you want to compile with MySQL support */ +@%:@undef USE_MYSQL]) +m4trace:configure.ac:273: -1- AC_SUBST([MYSQL_LIBS]) +m4trace:configure.ac:273: -1- AC_SUBST_TRACE([MYSQL_LIBS]) +m4trace:configure.ac:273: -1- m4_pattern_allow([^MYSQL_LIBS$]) +m4trace:configure.ac:274: -1- AC_SUBST([MYSQL_CFLAGS]) +m4trace:configure.ac:274: -1- AC_SUBST_TRACE([MYSQL_CFLAGS]) +m4trace:configure.ac:274: -1- m4_pattern_allow([^MYSQL_CFLAGS$]) +m4trace:configure.ac:278: -1- AM_CONDITIONAL([USE_MYSQL], [test x$ac_cv_use_mysql != xno]) +m4trace:configure.ac:278: -1- AC_SUBST([USE_MYSQL_TRUE]) +m4trace:configure.ac:278: -1- AC_SUBST_TRACE([USE_MYSQL_TRUE]) +m4trace:configure.ac:278: -1- m4_pattern_allow([^USE_MYSQL_TRUE$]) +m4trace:configure.ac:278: -1- AC_SUBST([USE_MYSQL_FALSE]) +m4trace:configure.ac:278: -1- AC_SUBST_TRACE([USE_MYSQL_FALSE]) +m4trace:configure.ac:278: -1- m4_pattern_allow([^USE_MYSQL_FALSE$]) +m4trace:configure.ac:278: -1- _AM_SUBST_NOTMAKE([USE_MYSQL_TRUE]) +m4trace:configure.ac:278: -1- _AM_SUBST_NOTMAKE([USE_MYSQL_FALSE]) +m4trace:configure.ac:282: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:282: the top level]) +m4trace:configure.ac:288: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:7: AC_CHECK_MYSQL is expanded from... +configure.ac:288: the top level]) +m4trace:configure.ac:288: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:7: AC_CHECK_MYSQL is expanded from... +configure.ac:288: the top level]) +m4trace:configure.ac:299: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:299: the top level]) +m4trace:configure.ac:305: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:230: AC_CHECK_PGSQL is expanded from... +configure.ac:305: the top level]) +m4trace:configure.ac:305: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:230: AC_CHECK_PGSQL is expanded from... +configure.ac:305: the top level]) +m4trace:configure.ac:305: -1- AC_SUBST([pgconfig]) +m4trace:configure.ac:305: -1- AC_SUBST_TRACE([pgconfig]) +m4trace:configure.ac:305: -1- m4_pattern_allow([^pgconfig$]) +m4trace:configure.ac:306: -1- AC_DEFINE_TRACE_LITERAL([USE_PGSQL]) +m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PGSQL$]) +m4trace:configure.ac:306: -1- AH_OUTPUT([USE_PGSQL], [/* Define to 1 if you want to compile with PostgreSQL support */ +@%:@undef USE_PGSQL]) +m4trace:configure.ac:307: -1- AC_SUBST([PGSQL_LIBS]) +m4trace:configure.ac:307: -1- AC_SUBST_TRACE([PGSQL_LIBS]) +m4trace:configure.ac:307: -1- m4_pattern_allow([^PGSQL_LIBS$]) +m4trace:configure.ac:308: -1- AC_SUBST([PGSQL_CFLAGS]) +m4trace:configure.ac:308: -1- AC_SUBST_TRACE([PGSQL_CFLAGS]) +m4trace:configure.ac:308: -1- m4_pattern_allow([^PGSQL_CFLAGS$]) +m4trace:configure.ac:312: -1- AM_CONDITIONAL([USE_PGSQL], [test x$ac_cv_use_pgsql != xno]) +m4trace:configure.ac:312: -1- AC_SUBST([USE_PGSQL_TRUE]) +m4trace:configure.ac:312: -1- AC_SUBST_TRACE([USE_PGSQL_TRUE]) +m4trace:configure.ac:312: -1- m4_pattern_allow([^USE_PGSQL_TRUE$]) +m4trace:configure.ac:312: -1- AC_SUBST([USE_PGSQL_FALSE]) +m4trace:configure.ac:312: -1- AC_SUBST_TRACE([USE_PGSQL_FALSE]) +m4trace:configure.ac:312: -1- m4_pattern_allow([^USE_PGSQL_FALSE$]) +m4trace:configure.ac:312: -1- _AM_SUBST_NOTMAKE([USE_PGSQL_TRUE]) +m4trace:configure.ac:312: -1- _AM_SUBST_NOTMAKE([USE_PGSQL_FALSE]) +m4trace:configure.ac:317: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:317: the top level]) +m4trace:configure.ac:323: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:299: AC_CHECK_MMSEG is expanded from... +configure.ac:323: the top level]) +m4trace:configure.ac:323: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +acinclude.m4:299: AC_CHECK_MMSEG is expanded from... +configure.ac:323: the top level]) +m4trace:configure.ac:324: -1- AC_DEFINE_TRACE_LITERAL([USE_MMSEG]) +m4trace:configure.ac:324: -1- m4_pattern_allow([^USE_MMSEG$]) +m4trace:configure.ac:324: -1- AH_OUTPUT([USE_MMSEG], [/* Define to 1 if you want to compile with libmmseg support */ +@%:@undef USE_MMSEG]) +m4trace:configure.ac:325: -1- AC_SUBST([MMSEG_LIBS]) +m4trace:configure.ac:325: -1- AC_SUBST_TRACE([MMSEG_LIBS]) +m4trace:configure.ac:325: -1- m4_pattern_allow([^MMSEG_LIBS$]) +m4trace:configure.ac:326: -1- AC_SUBST([MMSEG_CFLAGS]) +m4trace:configure.ac:326: -1- AC_SUBST_TRACE([MMSEG_CFLAGS]) +m4trace:configure.ac:326: -1- m4_pattern_allow([^MMSEG_CFLAGS$]) +m4trace:configure.ac:330: -1- AM_CONDITIONAL([USE_MMSEG], [test x$ac_cv_use_mmseg != xno]) +m4trace:configure.ac:330: -1- AC_SUBST([USE_MMSEG_TRUE]) +m4trace:configure.ac:330: -1- AC_SUBST_TRACE([USE_MMSEG_TRUE]) +m4trace:configure.ac:330: -1- m4_pattern_allow([^USE_MMSEG_TRUE$]) +m4trace:configure.ac:330: -1- AC_SUBST([USE_MMSEG_FALSE]) +m4trace:configure.ac:330: -1- AC_SUBST_TRACE([USE_MMSEG_FALSE]) +m4trace:configure.ac:330: -1- m4_pattern_allow([^USE_MMSEG_FALSE$]) +m4trace:configure.ac:330: -1- _AM_SUBST_NOTMAKE([USE_MMSEG_TRUE]) +m4trace:configure.ac:330: -1- _AM_SUBST_NOTMAKE([USE_MMSEG_FALSE]) +m4trace:configure.ac:340: -1- AM_CONDITIONAL([USE_PYTHON], [test x"$USE_PYTHON" = xDO]) +m4trace:configure.ac:340: -1- AC_SUBST([USE_PYTHON_TRUE]) +m4trace:configure.ac:340: -1- AC_SUBST_TRACE([USE_PYTHON_TRUE]) +m4trace:configure.ac:340: -1- m4_pattern_allow([^USE_PYTHON_TRUE$]) +m4trace:configure.ac:340: -1- AC_SUBST([USE_PYTHON_FALSE]) +m4trace:configure.ac:340: -1- AC_SUBST_TRACE([USE_PYTHON_FALSE]) +m4trace:configure.ac:340: -1- m4_pattern_allow([^USE_PYTHON_FALSE$]) +m4trace:configure.ac:340: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_TRUE]) +m4trace:configure.ac:340: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_FALSE]) +m4trace:configure.ac:352: -1- AC_DEFINE_TRACE_LITERAL([USE_64BIT]) +m4trace:configure.ac:352: -1- m4_pattern_allow([^USE_64BIT$]) +m4trace:configure.ac:352: -1- AH_OUTPUT([USE_64BIT], [/* 64-bit document and word IDs */ +@%:@undef USE_64BIT]) +m4trace:configure.ac:355: -1- AC_DEFINE_TRACE_LITERAL([USE_64BIT]) +m4trace:configure.ac:355: -1- m4_pattern_allow([^USE_64BIT$]) +m4trace:configure.ac:355: -1- AH_OUTPUT([USE_64BIT], [/* 64-bit document and word IDs */ +@%:@undef USE_64BIT]) +m4trace:configure.ac:362: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:362: the top level]) +m4trace:configure.ac:370: -1- AC_DEFINE_TRACE_LITERAL([USE_LIBSTEMMER]) +m4trace:configure.ac:370: -1- m4_pattern_allow([^USE_LIBSTEMMER$]) +m4trace:configure.ac:370: -1- AH_OUTPUT([USE_LIBSTEMMER], [/* libstemmer support */ +@%:@undef USE_LIBSTEMMER]) +m4trace:configure.ac:381: -1- AC_DEFINE_TRACE_LITERAL([USE_LIBSTEMMER]) +m4trace:configure.ac:381: -1- m4_pattern_allow([^USE_LIBSTEMMER$]) +m4trace:configure.ac:381: -1- AH_OUTPUT([USE_LIBSTEMMER], [/* libstemmer support */ +@%:@undef USE_LIBSTEMMER]) +m4trace:configure.ac:383: -1- AM_CONDITIONAL([USE_LIBSTEMMER], [test x$ac_cv_use_libstemmer != xno]) +m4trace:configure.ac:383: -1- AC_SUBST([USE_LIBSTEMMER_TRUE]) +m4trace:configure.ac:383: -1- AC_SUBST_TRACE([USE_LIBSTEMMER_TRUE]) +m4trace:configure.ac:383: -1- m4_pattern_allow([^USE_LIBSTEMMER_TRUE$]) +m4trace:configure.ac:383: -1- AC_SUBST([USE_LIBSTEMMER_FALSE]) +m4trace:configure.ac:383: -1- AC_SUBST_TRACE([USE_LIBSTEMMER_FALSE]) +m4trace:configure.ac:383: -1- m4_pattern_allow([^USE_LIBSTEMMER_FALSE$]) +m4trace:configure.ac:383: -1- _AM_SUBST_NOTMAKE([USE_LIBSTEMMER_TRUE]) +m4trace:configure.ac:383: -1- _AM_SUBST_NOTMAKE([USE_LIBSTEMMER_FALSE]) +m4trace:configure.ac:390: -1- AC_DEFINE_TRACE_LITERAL([USE_LIBEXPAT]) +m4trace:configure.ac:390: -1- m4_pattern_allow([^USE_LIBEXPAT$]) +m4trace:configure.ac:390: -1- AH_OUTPUT([USE_LIBEXPAT], [/* define to use expat XML library */ +@%:@undef USE_LIBEXPAT]) +m4trace:configure.ac:401: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:401: the top level]) +m4trace:configure.ac:410: -1- AC_DEFINE_TRACE_LITERAL([USE_LIBICONV]) +m4trace:configure.ac:410: -1- m4_pattern_allow([^USE_LIBICONV$]) +m4trace:configure.ac:410: -1- AH_OUTPUT([USE_LIBICONV], [/* define to use iconv library */ +@%:@undef USE_LIBICONV]) +m4trace:configure.ac:427: -1- AC_DEFINE_TRACE_LITERAL([ICONV_INBUF_CONST]) +m4trace:configure.ac:427: -1- m4_pattern_allow([^ICONV_INBUF_CONST$]) +m4trace:configure.ac:427: -1- AH_OUTPUT([ICONV_INBUF_CONST], [/* whether 2nd arg to iconv() is const ptr */ +@%:@undef ICONV_INBUF_CONST]) +m4trace:configure.ac:430: -1- AC_DEFINE_TRACE_LITERAL([ICONV_INBUF_CONST]) +m4trace:configure.ac:430: -1- m4_pattern_allow([^ICONV_INBUF_CONST$]) +m4trace:configure.ac:430: -1- AH_OUTPUT([ICONV_INBUF_CONST], [/* whether 2nd arg to iconv() is const ptr */ +@%:@undef ICONV_INBUF_CONST]) +m4trace:configure.ac:449: -1- AC_DEFINE_TRACE_LITERAL([USE_ZLIB]) +m4trace:configure.ac:449: -1- m4_pattern_allow([^USE_ZLIB$]) +m4trace:configure.ac:449: -1- AH_OUTPUT([USE_ZLIB], [/* define to use Zlib */ +@%:@undef USE_ZLIB]) +m4trace:configure.ac:455: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:455: the top level]) +m4trace:configure.ac:463: -1- AC_DEFINE_TRACE_LITERAL([USE_ODBC]) +m4trace:configure.ac:463: -1- m4_pattern_allow([^USE_ODBC$]) +m4trace:configure.ac:463: -1- AH_OUTPUT([USE_ODBC], [/* define to use ODBC library */ +@%:@undef USE_ODBC]) +m4trace:configure.ac:478: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from... +configure.ac:478: the top level]) +m4trace:configure.ac:484: -1- AC_DEFINE_TRACE_LITERAL([USE_SYSLOG]) +m4trace:configure.ac:484: -1- m4_pattern_allow([^USE_SYSLOG$]) +m4trace:configure.ac:484: -1- AH_OUTPUT([USE_SYSLOG], [/* define to use POSIX Syslog for logging */ +@%:@undef USE_SYSLOG]) +m4trace:configure.ac:526: -1- AC_DEFINE_TRACE_LITERAL([UNALIGNED_RAM_ACCESS]) +m4trace:configure.ac:526: -1- m4_pattern_allow([^UNALIGNED_RAM_ACCESS$]) +m4trace:configure.ac:526: -1- AH_OUTPUT([UNALIGNED_RAM_ACCESS], [/* whether unaligned RAM access is possible */ +@%:@undef UNALIGNED_RAM_ACCESS]) +m4trace:configure.ac:528: -1- AC_DEFINE_TRACE_LITERAL([UNALIGNED_RAM_ACCESS]) +m4trace:configure.ac:528: -1- m4_pattern_allow([^UNALIGNED_RAM_ACCESS$]) +m4trace:configure.ac:533: -2- AC_DEFINE_TRACE_LITERAL([USE_LITTLE_ENDIAN]) +m4trace:configure.ac:533: -2- m4_pattern_allow([^USE_LITTLE_ENDIAN$]) +m4trace:configure.ac:533: -2- AH_OUTPUT([USE_LITTLE_ENDIAN], [/* big-endian */ +@%:@undef USE_LITTLE_ENDIAN]) +m4trace:configure.ac:534: -2- AC_DEFINE_TRACE_LITERAL([USE_LITTLE_ENDIAN]) +m4trace:configure.ac:534: -2- m4_pattern_allow([^USE_LITTLE_ENDIAN$]) +m4trace:configure.ac:534: -2- AH_OUTPUT([USE_LITTLE_ENDIAN], [/* little-endian */ +@%:@undef USE_LITTLE_ENDIAN]) +m4trace:configure.ac:532: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif]) +m4trace:configure.ac:551: -1- AC_SUBST([CONFDIR]) +m4trace:configure.ac:551: -1- AC_SUBST_TRACE([CONFDIR]) +m4trace:configure.ac:551: -1- m4_pattern_allow([^CONFDIR$]) +m4trace:configure.ac:553: -1- AC_CONFIG_FILES([Makefile src/Makefile libstemmer_c/Makefile doc/Makefile sphinx.conf.dist:sphinx.conf.in \ + sphinx-min.conf.dist:sphinx-min.conf.in]) +m4trace:configure.ac:555: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:555: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([LTLIBOBJS]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:555: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:555: -1- AC_SUBST([am__EXEEXT_TRUE]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:555: -1- AC_SUBST([am__EXEEXT_FALSE]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) +m4trace:configure.ac:555: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:555: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:555: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([top_builddir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([top_build_prefix]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([srcdir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([abs_srcdir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([top_srcdir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([abs_top_srcdir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([builddir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([abs_builddir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([abs_top_builddir]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([INSTALL]) +m4trace:configure.ac:555: -1- AC_SUBST_TRACE([MKDIR_P]) diff --git a/coreseek/csft-4.1/buildconf.sh b/coreseek/csft-4.1/buildconf.sh new file mode 100755 index 0000000..8d0da8a --- /dev/null +++ b/coreseek/csft-4.1/buildconf.sh @@ -0,0 +1,6 @@ +#! /bin/sh + +autoheader \ +&& aclocal \ +&& automake --foreign \ +&& autoconf diff --git a/coreseek/csft-4.1/codeblocks/README.txt b/coreseek/csft-4.1/codeblocks/README.txt new file mode 100755 index 0000000..dae1ef2 --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/README.txt @@ -0,0 +1 @@ +You need to run ../configure script in order to use Code::Blocks projects \ No newline at end of file diff --git a/coreseek/csft-4.1/codeblocks/indexer.cbp b/coreseek/csft-4.1/codeblocks/indexer.cbp new file mode 100755 index 0000000..1229fa2 --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/indexer.cbp @@ -0,0 +1,64 @@ + + + + + + diff --git a/coreseek/csft-4.1/codeblocks/indextool.cbp b/coreseek/csft-4.1/codeblocks/indextool.cbp new file mode 100755 index 0000000..063e5df --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/indextool.cbp @@ -0,0 +1,63 @@ + + + + + + diff --git a/coreseek/csft-4.1/codeblocks/libsphinx.cbp b/coreseek/csft-4.1/codeblocks/libsphinx.cbp new file mode 100755 index 0000000..0007df5 --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/libsphinx.cbp @@ -0,0 +1,85 @@ + + + + + + diff --git a/coreseek/csft-4.1/codeblocks/search.cbp b/coreseek/csft-4.1/codeblocks/search.cbp new file mode 100755 index 0000000..8cb86fb --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/search.cbp @@ -0,0 +1,63 @@ + + + + + + diff --git a/coreseek/csft-4.1/codeblocks/searchd.cbp b/coreseek/csft-4.1/codeblocks/searchd.cbp new file mode 100755 index 0000000..e030b6b --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/searchd.cbp @@ -0,0 +1,95 @@ + + + + + + diff --git a/coreseek/csft-4.1/codeblocks/spelldump.cbp b/coreseek/csft-4.1/codeblocks/spelldump.cbp new file mode 100755 index 0000000..cc30aaf --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/spelldump.cbp @@ -0,0 +1,63 @@ + + + + + + diff --git a/coreseek/csft-4.1/codeblocks/testrt.cbp b/coreseek/csft-4.1/codeblocks/testrt.cbp new file mode 100755 index 0000000..c4f0ddd --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/testrt.cbp @@ -0,0 +1,63 @@ + + + + + + diff --git a/coreseek/csft-4.1/codeblocks/tests.cbp b/coreseek/csft-4.1/codeblocks/tests.cbp new file mode 100755 index 0000000..75ca2c3 --- /dev/null +++ b/coreseek/csft-4.1/codeblocks/tests.cbp @@ -0,0 +1,63 @@ + + + + + + diff --git a/coreseek/csft-4.1/config.log b/coreseek/csft-4.1/config.log new file mode 100644 index 0000000..1c429d4 --- /dev/null +++ b/coreseek/csft-4.1/config.log @@ -0,0 +1,2641 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by sphinx configure 1.11, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ ./configure --prefix=/usr/local/coreseek --without-unixodbc --with-mmseg --with-mmseg-includes=/usr/local/mmseg3/include/mmseg/ --with-mmseg-libs=/usr/local/mmseg3/lib/ --with-mysql + +## --------- ## +## Platform. ## +## --------- ## + +hostname = data-center +uname -m = x86_64 +uname -r = 3.2.0-100-generic +uname -s = Linux +uname -v = #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin +PATH: /opt/chef/embedded/bin +PATH: /opt/chef/embedded/bin +PATH: /var/lib/gems/1.8/bin + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:2354: result: +configure:2356: result: checking build environment +configure:2359: result: -------------------------- +configure:2361: result: +configure:2410: checking for a BSD-compatible install +configure:2478: result: /usr/bin/install -c +configure:2489: checking whether build environment is sane +configure:2539: result: yes +configure:2680: checking for a thread-safe mkdir -p +configure:2719: result: /bin/mkdir -p +configure:2732: checking for gawk +configure:2748: found /usr/bin/gawk +configure:2759: result: gawk +configure:2770: checking whether make sets $(MAKE) +configure:2792: result: yes +configure:2873: checking whether to enable maintainer-specific portions of Makefiles +configure:2882: result: no +configure:2907: checking for python +configure:2925: found /usr/bin/python +configure:2937: result: /usr/bin/python +configure:2958: checking for python version +configure:2965: result: 2.7 +configure:2977: checking for python platform +configure:2984: result: linux2 +configure:2991: checking for python script directory +configure:3019: result: ${prefix}/lib/python2.7/site-packages +configure:3028: checking for python extension module directory +configure:3056: result: ${exec_prefix}/lib/python2.7/site-packages +configure:3079: result: +configure:3081: result: checking for compiler programs +configure:3084: result: ------------------------------ +configure:3086: result: +configure:3100: checking whether to compile debug version +configure:3110: result: no +configure:3174: checking for gcc +configure:3190: found /usr/bin/gcc +configure:3201: result: gcc +configure:3430: checking for C compiler version +configure:3439: gcc --version >&5 +gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 +Copyright (C) 2011 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:3450: $? = 0 +configure:3439: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) +configure:3450: $? = 0 +configure:3439: gcc -V >&5 +gcc: error: unrecognized option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:3450: $? = 4 +configure:3439: gcc -qversion >&5 +gcc: error: unrecognized option '-qversion' +gcc: fatal error: no input files +compilation terminated. +configure:3450: $? = 4 +configure:3470: checking whether the C compiler works +configure:3492: gcc -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:3496: $? = 0 +configure:3544: result: yes +configure:3547: checking for C compiler default output file name +configure:3549: result: a.out +configure:3555: checking for suffix of executables +configure:3562: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:3566: $? = 0 +configure:3588: result: +configure:3610: checking whether we are cross compiling +configure:3618: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:3622: $? = 0 +configure:3629: ./conftest +configure:3633: $? = 0 +configure:3648: result: no +configure:3653: checking for suffix of object files +configure:3675: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:3679: $? = 0 +configure:3700: result: o +configure:3704: checking whether we are using the GNU C compiler +configure:3723: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:3723: $? = 0 +configure:3732: result: yes +configure:3741: checking whether gcc accepts -g +configure:3761: gcc -c -g -I/usr/local/include conftest.c >&5 +configure:3761: $? = 0 +configure:3802: result: yes +configure:3819: checking for gcc option to accept ISO C89 +configure:3883: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:3883: $? = 0 +configure:3896: result: none needed +configure:3927: checking for style of include used by make +configure:3955: result: GNU +configure:3981: checking dependency style of gcc +configure:4092: result: gcc3 +configure:4165: checking for g++ +configure:4181: found /usr/bin/g++ +configure:4192: result: g++ +configure:4219: checking for C++ compiler version +configure:4228: g++ --version >&5 +g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 +Copyright (C) 2011 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:4239: $? = 0 +configure:4228: g++ -v >&5 +Using built-in specs. +COLLECT_GCC=g++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) +configure:4239: $? = 0 +configure:4228: g++ -V >&5 +g++: error: unrecognized option '-V' +g++: fatal error: no input files +compilation terminated. +configure:4239: $? = 4 +configure:4228: g++ -qversion >&5 +g++: error: unrecognized option '-qversion' +g++: fatal error: no input files +compilation terminated. +configure:4239: $? = 4 +configure:4243: checking whether we are using the GNU C++ compiler +configure:4262: g++ -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.cpp >&5 +configure:4262: $? = 0 +configure:4271: result: yes +configure:4280: checking whether g++ accepts -g +configure:4300: g++ -c -g -I/usr/local/include conftest.cpp >&5 +configure:4300: $? = 0 +configure:4341: result: yes +configure:4366: checking dependency style of g++ +configure:4477: result: gcc3 +configure:4535: checking for ranlib +configure:4551: found /usr/bin/ranlib +configure:4562: result: ranlib +configure:4684: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c:14:6: warning: return type of 'main' is not 'int' [-Wmain] +configure:4684: $? = 0 +configure:4704: result: +configure:4706: result: checking for header files +configure:4709: result: ------------------------- +configure:4711: result: +configure:4721: checking how to run the C preprocessor +configure:4752: gcc -E -I/usr/local/include conftest.c +configure:4752: $? = 0 +configure:4766: gcc -E -I/usr/local/include conftest.c +conftest.c:13:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:4766: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| /* end confdefs.h. */ +| #include +configure:4791: result: gcc -E +configure:4811: gcc -E -I/usr/local/include conftest.c +configure:4811: $? = 0 +configure:4825: gcc -E -I/usr/local/include conftest.c +conftest.c:13:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:4825: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| /* end confdefs.h. */ +| #include +configure:4854: checking for grep that handles long lines and -e +configure:4912: result: /bin/grep +configure:4917: checking for egrep +configure:4979: result: /bin/grep -E +configure:4984: checking for ANSI C header files +configure:5004: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5004: $? = 0 +configure:5077: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:5077: $? = 0 +configure:5077: ./conftest +configure:5077: $? = 0 +configure:5088: result: yes +configure:5096: checking for sys/wait.h that is POSIX.1 compatible +configure:5122: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5122: $? = 0 +configure:5129: result: yes +configure:5142: checking for sys/types.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5142: checking for sys/stat.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5142: checking for stdlib.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5142: checking for string.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5142: checking for memory.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5142: checking for strings.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5142: checking for inttypes.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5142: checking for stdint.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5142: checking for unistd.h +configure:5142: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5142: $? = 0 +configure:5142: result: yes +configure:5157: checking fcntl.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking fcntl.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for fcntl.h +configure:5157: result: yes +configure:5157: checking limits.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking limits.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for limits.h +configure:5157: result: yes +configure:5157: checking netdb.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking netdb.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for netdb.h +configure:5157: result: yes +configure:5157: checking netinet/in.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking netinet/in.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for netinet/in.h +configure:5157: result: yes +configure:5157: checking for stdlib.h +configure:5157: result: yes +configure:5157: checking for string.h +configure:5157: result: yes +configure:5157: checking sys/file.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking sys/file.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for sys/file.h +configure:5157: result: yes +configure:5157: checking sys/socket.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking sys/socket.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for sys/socket.h +configure:5157: result: yes +configure:5157: checking sys/time.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking sys/time.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for sys/time.h +configure:5157: result: yes +configure:5157: checking for unistd.h +configure:5157: result: yes +configure:5157: checking pthread.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking pthread.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for pthread.h +configure:5157: result: yes +configure:5157: checking execinfo.h usability +configure:5157: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking execinfo.h presence +configure:5157: gcc -E -I/usr/local/include conftest.c +configure:5157: $? = 0 +configure:5157: result: yes +configure:5157: checking for execinfo.h +configure:5157: result: yes +configure:5167: checking expat.h usability +configure:5167: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5167: $? = 0 +configure:5167: result: yes +configure:5167: checking expat.h presence +configure:5167: gcc -E -I/usr/local/include conftest.c +configure:5167: $? = 0 +configure:5167: result: yes +configure:5167: checking for expat.h +configure:5167: result: yes +configure:5175: checking iconv.h usability +configure:5175: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5175: $? = 0 +configure:5175: result: yes +configure:5175: checking iconv.h presence +configure:5175: gcc -E -I/usr/local/include conftest.c +configure:5175: $? = 0 +configure:5175: result: yes +configure:5175: checking for iconv.h +configure:5175: result: yes +configure:5183: checking zlib.h usability +configure:5183: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5183: $? = 0 +configure:5183: result: yes +configure:5183: checking zlib.h presence +configure:5183: gcc -E -I/usr/local/include conftest.c +configure:5183: $? = 0 +configure:5183: result: yes +configure:5183: checking for zlib.h +configure:5183: result: yes +configure:5191: checking sql.h usability +configure:5191: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c:69:17: fatal error: sql.h: No such file or directory +compilation terminated. +configure:5191: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5191: result: no +configure:5191: checking sql.h presence +configure:5191: gcc -E -I/usr/local/include conftest.c +conftest.c:36:17: fatal error: sql.h: No such file or directory +compilation terminated. +configure:5191: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| /* end confdefs.h. */ +| #include +configure:5191: result: no +configure:5191: checking for sql.h +configure:5191: result: no +configure:5199: checking syslog.h usability +configure:5199: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5199: $? = 0 +configure:5199: result: yes +configure:5199: checking syslog.h presence +configure:5199: gcc -E -I/usr/local/include conftest.c +configure:5199: $? = 0 +configure:5199: result: yes +configure:5199: checking for syslog.h +configure:5199: result: yes +configure:5210: result: +configure:5212: result: checking for types +configure:5215: result: ------------------ +configure:5217: result: +configure:5222: checking for stdbool.h that conforms to C99 +configure:5289: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c: In function 'main': +conftest.c:85:2: warning: the address of 's' will always evaluate as 'true' [-Waddress] +conftest.c:89:10: warning: the address of 'a' will always evaluate as 'true' [-Waddress] +conftest.c:89:15: warning: the address of 'b' will always evaluate as 'true' [-Waddress] +conftest.c:89:20: warning: the address of 'c' will always evaluate as 'true' [-Waddress] +conftest.c:89:25: warning: the address of 'd' will always evaluate as 'true' [-Waddress] +conftest.c:89:35: warning: the address of 'f' will always evaluate as 'true' [-Waddress] +conftest.c:89:40: warning: the address of 'g' will always evaluate as 'true' [-Waddress] +conftest.c:89:45: warning: the address of 'h' will always evaluate as 'true' [-Waddress] +conftest.c:89:50: warning: the address of 'i' will always evaluate as 'true' [-Waddress] +conftest.c:90:10: warning: the address of 'n' will always evaluate as 'true' [-Waddress] +conftest.c:90:15: warning: the address of 'o' will always evaluate as 'true' [-Waddress] +conftest.c:90:20: warning: the address of 'p' will always evaluate as 'true' [-Waddress] +configure:5289: $? = 0 +configure:5296: result: yes +configure:5298: checking for _Bool +configure:5298: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5298: $? = 0 +configure:5298: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c: In function 'main': +conftest.c:72:20: error: expected expression before ')' token +configure:5298: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if (sizeof ((_Bool))) +| return 0; +| ; +| return 0; +| } +configure:5298: result: yes +configure:5314: checking for an ANSI C-conforming const +configure:5379: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c: In function 'main': +conftest.c:67:10: warning: 't' is used uninitialized in this function [-Wuninitialized] +configure:5379: $? = 0 +configure:5386: result: yes +configure:5394: checking for inline +configure:5410: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5410: $? = 0 +configure:5418: result: inline +configure:5436: checking for off_t +configure:5436: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5436: $? = 0 +configure:5436: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c: In function 'main': +conftest.c:74:20: error: expected expression before ')' token +configure:5436: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if (sizeof ((off_t))) +| return 0; +| ; +| return 0; +| } +configure:5436: result: yes +configure:5447: checking for size_t +configure:5447: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5447: $? = 0 +configure:5447: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c: In function 'main': +conftest.c:74:21: error: expected expression before ')' token +configure:5447: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if (sizeof ((size_t))) +| return 0; +| ; +| return 0; +| } +configure:5447: result: yes +configure:5458: checking whether time.h and sys/time.h may both be included +configure:5478: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5478: $? = 0 +configure:5485: result: yes +configure:5496: result: +configure:5498: result: checking for library functions +configure:5501: result: ------------------------------ +configure:5503: result: +configure:5508: checking for pid_t +configure:5508: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5508: $? = 0 +configure:5508: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c: In function 'main': +conftest.c:75:20: error: expected expression before ')' token +configure:5508: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if (sizeof ((pid_t))) +| return 0; +| ; +| return 0; +| } +configure:5508: result: yes +configure:5521: checking vfork.h usability +configure:5521: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c:72:19: fatal error: vfork.h: No such file or directory +compilation terminated. +configure:5521: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| #include +configure:5521: result: no +configure:5521: checking vfork.h presence +configure:5521: gcc -E -I/usr/local/include conftest.c +conftest.c:39:19: fatal error: vfork.h: No such file or directory +compilation terminated. +configure:5521: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| /* end confdefs.h. */ +| #include +configure:5521: result: no +configure:5521: checking for vfork.h +configure:5521: result: no +configure:5534: checking for fork +configure:5534: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +conftest.c:62:6: warning: conflicting types for built-in function 'fork' [enabled by default] +configure:5534: $? = 0 +configure:5534: result: yes +configure:5534: checking for vfork +configure:5534: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:5534: $? = 0 +configure:5534: result: yes +configure:5544: checking for working fork +configure:5566: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:5566: $? = 0 +configure:5566: ./conftest +configure:5566: $? = 0 +configure:5576: result: yes +configure:5597: checking for working vfork +configure:5707: result: yes +configure:5734: checking for stdlib.h +configure:5734: result: yes +configure:5744: checking for GNU libc compatible malloc +configure:5768: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:5768: $? = 0 +configure:5768: ./conftest +configure:5768: $? = 0 +configure:5778: result: yes +configure:5801: checking for stdlib.h +configure:5801: result: yes +configure:5811: checking for GNU libc compatible realloc +configure:5835: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:5835: $? = 0 +configure:5835: ./conftest +configure:5835: $? = 0 +configure:5845: result: yes +configure:5869: checking sys/select.h usability +configure:5869: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5869: $? = 0 +configure:5869: result: yes +configure:5869: checking sys/select.h presence +configure:5869: gcc -E -I/usr/local/include conftest.c +configure:5869: $? = 0 +configure:5869: result: yes +configure:5869: checking for sys/select.h +configure:5869: result: yes +configure:5869: checking for sys/socket.h +configure:5869: result: yes +configure:5879: checking types of arguments for select +configure:5907: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +configure:5907: $? = 0 +configure:5918: result: int,fd_set *,struct timeval * +configure:5941: checking return type of signal handlers +configure:5959: gcc -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c >&5 +conftest.c: In function 'main': +conftest.c:58:1: error: void value not ignored as it ought to be +configure:5959: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| /* end confdefs.h. */ +| #include +| #include +| +| int +| main () +| { +| return *(signal (0, 0)) (0) == 1; +| ; +| return 0; +| } +configure:5966: result: void +configure:5974: checking whether lstat correctly handles trailing slash +configure:6000: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:6000: $? = 0 +configure:6000: ./conftest +configure:6000: $? = 0 +configure:6017: result: yes +configure:6036: checking whether stat accepts an empty string +configure:6056: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:6056: $? = 0 +configure:6056: ./conftest +configure:6056: $? = 0 +configure:6066: result: no +configure:6084: checking for vprintf +configure:6084: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +conftest.c:77:6: warning: conflicting types for built-in function 'vprintf' [enabled by default] +configure:6084: $? = 0 +configure:6084: result: yes +configure:6090: checking for _doprnt +configure:6090: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +/tmp/ccuM9q7a.o: In function `main': +/home/coreseek/coreseek-4.1-beta/csft-4.1/conftest.c:89: undefined reference to `_doprnt' +collect2: ld returned 1 exit status +configure:6090: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| /* end confdefs.h. */ +| /* Define _doprnt to an innocuous variant, in case declares _doprnt. +| For example, HP-UX 11i declares gettimeofday. */ +| #define _doprnt innocuous__doprnt +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char _doprnt (); below. +| Prefer to if __STDC__ is defined, since +| exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include +| #else +| # include +| #endif +| +| #undef _doprnt +| +| /* 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 _doprnt (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub__doprnt || defined __stub____doprnt +| choke me +| #endif +| +| int +| main () +| { +| return _doprnt (); +| ; +| return 0; +| } +configure:6090: result: no +configure:6101: checking for library containing setsockopt +configure:6132: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:6132: $? = 0 +configure:6149: result: none required +configure:6157: checking for library containing gethostbyname +configure:6188: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +configure:6188: $? = 0 +configure:6205: result: none required +configure:6213: checking for library containing XML_Parse +configure:6244: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -L/usr/local/lib >&5 +/tmp/ccOuIFyh.o: In function `main': +/home/coreseek/coreseek-4.1-beta/csft-4.1/conftest.c:66: undefined reference to `XML_Parse' +collect2: ld returned 1 exit status +configure:6244: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| /* 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 XML_Parse (); +| int +| main () +| { +| return XML_Parse (); +| ; +| return 0; +| } +configure:6244: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lexpat -L/usr/local/lib >&5 +configure:6244: $? = 0 +configure:6261: result: -lexpat +configure:6271: checking for library containing iconv +configure:6302: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lexpat -L/usr/local/lib >&5 +configure:6302: $? = 0 +configure:6319: result: none required +configure:6329: checking for library containing inflate +configure:6360: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lexpat -L/usr/local/lib >&5 +/tmp/ccsWBQJs.o: In function `main': +/home/coreseek/coreseek-4.1-beta/csft-4.1/conftest.c:66: undefined reference to `inflate' +collect2: ld returned 1 exit status +configure:6360: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| /* 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 inflate (); +| int +| main () +| { +| return inflate (); +| ; +| return 0; +| } +configure:6360: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lz -lexpat -L/usr/local/lib >&5 +configure:6360: $? = 0 +configure:6377: result: -lz +configure:6387: checking for library containing logf +configure:6418: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lz -lexpat -L/usr/local/lib >&5 +conftest.c:62:6: warning: conflicting types for built-in function 'logf' [enabled by default] +/tmp/ccmw6V5v.o: In function `main': +/home/coreseek/coreseek-4.1-beta/csft-4.1/conftest.c:66: undefined reference to `logf' +collect2: ld returned 1 exit status +configure:6418: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| /* 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 logf (); +| int +| main () +| { +| return logf (); +| ; +| return 0; +| } +configure:6418: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +conftest.c:62:6: warning: conflicting types for built-in function 'logf' [enabled by default] +configure:6418: $? = 0 +configure:6435: result: -lm +configure:6446: checking for dup2 +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for gethostbyname +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for gettimeofday +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for memmove +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +conftest.c:81:6: warning: conflicting types for built-in function 'memmove' [enabled by default] +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for memset +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +conftest.c:82:6: warning: conflicting types for built-in function 'memset' [enabled by default] +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for select +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for socket +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for strcasecmp +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +conftest.c:85:6: warning: conflicting types for built-in function 'strcasecmp' [enabled by default] +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for strchr +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +conftest.c:86:6: warning: conflicting types for built-in function 'strchr' [enabled by default] +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for strerror +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for strncasecmp +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +conftest.c:88:6: warning: conflicting types for built-in function 'strncasecmp' [enabled by default] +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for strstr +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +conftest.c:89:6: warning: conflicting types for built-in function 'strstr' [enabled by default] +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for strtol +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for logf +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +conftest.c:91:6: warning: conflicting types for built-in function 'logf' [enabled by default] +configure:6446: $? = 0 +configure:6446: result: yes +configure:6446: checking for pread +configure:6446: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6446: $? = 0 +configure:6446: result: yes +configure:6458: checking for backtrace +configure:6458: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6458: $? = 0 +configure:6458: result: yes +configure:6458: checking for backtrace_symbols +configure:6458: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib >&5 +configure:6458: $? = 0 +configure:6458: result: yes +configure:6472: checking for clock_gettime in -lrt +configure:6497: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lrt >&5 +configure:6497: $? = 0 +configure:6506: result: yes +configure:6525: checking for clock_gettime +configure:6525: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -lm -lz -lexpat -L/usr/local/lib -lrt >&5 +configure:6525: $? = 0 +configure:6525: result: yes +configure:6536: checking for LOCK_EX in sys/file.h +configure:6561: result: yes +configure:6570: checking for F_SETLKW in fcntl.h +configure:6595: result: yes +configure:6607: checking for dlopen in -ldl +configure:6632: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt >&5 +configure:6632: $? = 0 +configure:6641: result: yes +configure:6655: checking for dlopen +configure:6655: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt >&5 +configure:6655: $? = 0 +configure:6655: result: yes +configure:6655: checking for dlerror +configure:6655: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt >&5 +configure:6655: $? = 0 +configure:6655: result: yes +configure:6667: result: +configure:6669: result: configuring Sphinx +configure:6672: result: ------------------ +configure:6674: result: +configure:6708: checking for CFLAGS needed for pthreads +configure:6727: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt >&5 +conftest.c: In function 'main': +conftest.c:92:17: warning: unused variable 'once_init' [-Wunused-variable] +/tmp/ccmvPmMz.o: In function `main': +/home/coreseek/coreseek-4.1-beta/csft-4.1/conftest.c:95: undefined reference to `pthread_mutexattr_init' +/home/coreseek/coreseek-4.1-beta/csft-4.1/conftest.c:96: undefined reference to `pthread_create' +collect2: ld returned 1 exit status +configure:6727: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| #define HAVE_DUP2 1 +| #define HAVE_GETHOSTBYNAME 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_MEMMOVE 1 +| #define HAVE_MEMSET 1 +| #define HAVE_SELECT 1 +| #define HAVE_SOCKET 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRCHR 1 +| #define HAVE_STRERROR 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_STRSTR 1 +| #define HAVE_STRTOL 1 +| #define HAVE_LOGF 1 +| #define HAVE_PREAD 1 +| #define HAVE_BACKTRACE 1 +| #define HAVE_BACKTRACE_SYMBOLS 1 +| #define HAVE_LIBRT 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_LOCK_EX 1 +| #define HAVE_F_SETLKW 1 +| #define HAVE_LIBDL 1 +| #define HAVE_DLOPEN 1 +| #define HAVE_DLERROR 1 +| /* end confdefs.h. */ +| +| #include +| #include +| +| void * thread_routine ( void * data ) +| { +| return data; +| } +| +| int main () +| { +| pthread_t thd; +| pthread_mutexattr_t mattr; +| pthread_once_t once_init = PTHREAD_ONCE_INIT; +| int data = 1; +| +| pthread_mutexattr_init ( &mattr ); +| return pthread_create ( &thd, NULL, thread_routine, &data ); +| } +| +configure:6727: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -kthread -I/usr/local/include conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt >&5 +gcc: error: unrecognized option '-kthread' +configure:6727: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| #define HAVE_DUP2 1 +| #define HAVE_GETHOSTBYNAME 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_MEMMOVE 1 +| #define HAVE_MEMSET 1 +| #define HAVE_SELECT 1 +| #define HAVE_SOCKET 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRCHR 1 +| #define HAVE_STRERROR 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_STRSTR 1 +| #define HAVE_STRTOL 1 +| #define HAVE_LOGF 1 +| #define HAVE_PREAD 1 +| #define HAVE_BACKTRACE 1 +| #define HAVE_BACKTRACE_SYMBOLS 1 +| #define HAVE_LIBRT 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_LOCK_EX 1 +| #define HAVE_F_SETLKW 1 +| #define HAVE_LIBDL 1 +| #define HAVE_DLOPEN 1 +| #define HAVE_DLERROR 1 +| /* end confdefs.h. */ +| +| #include +| #include +| +| void * thread_routine ( void * data ) +| { +| return data; +| } +| +| int main () +| { +| pthread_t thd; +| pthread_mutexattr_t mattr; +| pthread_once_t once_init = PTHREAD_ONCE_INIT; +| int data = 1; +| +| pthread_mutexattr_init ( &mattr ); +| return pthread_create ( &thd, NULL, thread_routine, &data ); +| } +| +configure:6727: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -pthread -I/usr/local/include conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt >&5 +conftest.c: In function 'main': +conftest.c:92:17: warning: unused variable 'once_init' [-Wunused-variable] +configure:6727: $? = 0 +configure:6727: ./conftest +configure:6727: $? = 0 +configure:6765: result: -pthread +configure:6776: checking for LIBS needed for pthreads +configure:6794: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include -pthread conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread >&5 +conftest.c: In function 'main': +conftest.c:92:17: warning: unused variable 'once_init' [-Wunused-variable] +configure:6794: $? = 0 +configure:6794: ./conftest +configure:6794: $? = 0 +configure:6833: result: -lpthread +configure:6842: checking for pthreads +configure:6846: result: found +configure:6858: checking for pthread_mutex_timedlock +configure:6858: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include -pthread conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread >&5 +configure:6858: $? = 0 +configure:6858: result: yes +configure:6879: checking whether to compile with MySQL support +configure:6882: result: yes +configure:6925: checking for mysql_config +configure:6936: result: mysql_config +configure:7027: checking for mysql_real_connect +configure:7027: gcc -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/include -pthread conftest.c -ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl >&5 +configure:7027: $? = 0 +configure:7027: result: yes +configure:7064: checking MySQL include files +configure:7088: result: -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g +configure:7093: checking MySQL libraries +configure:7117: result: -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl +configure:7151: checking whether to link statically with MySQL support +configure:7399: result: no +configure:7414: checking whether to compile with PostgreSQL support +configure:7552: result: no +configure:7574: checking whether to compile with libmmseg support +configure:7577: result: yes +configure:7644: checking libmmseg include files +configure:7657: result: -I/usr/local/mmseg3/include/mmseg/ +configure:7661: checking libmmseg libraries +configure:7674: result: -L/usr/local/mmseg3/lib/ -lmmseg +configure:7717: checking whether to use 64-bit document/word IDs +configure:7735: result: no +configure:7750: checking whether to compile with libstemmer support +configure:7768: result: no +configure:7785: checking for libexpat +configure:7791: result: found +configure:7811: checking for libiconv +configure:7821: result: found +configure:7824: checking for iconv() arg types +configure:7849: g++ -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ conftest.cpp >&5 +conftest.cpp: In function 'int main()': +conftest.cpp:94:41: error: invalid conversion from 'const char**' to 'char**' [-fpermissive] +/usr/include/iconv.h:43:15: error: initializing argument 2 of 'size_t iconv(iconv_t, char**, size_t*, char**, size_t*)' [-fpermissive] +configure:7849: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| #define HAVE_DUP2 1 +| #define HAVE_GETHOSTBYNAME 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_MEMMOVE 1 +| #define HAVE_MEMSET 1 +| #define HAVE_SELECT 1 +| #define HAVE_SOCKET 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRCHR 1 +| #define HAVE_STRERROR 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_STRSTR 1 +| #define HAVE_STRTOL 1 +| #define HAVE_LOGF 1 +| #define HAVE_PREAD 1 +| #define HAVE_BACKTRACE 1 +| #define HAVE_BACKTRACE_SYMBOLS 1 +| #define HAVE_LIBRT 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_LOCK_EX 1 +| #define HAVE_F_SETLKW 1 +| #define HAVE_LIBDL 1 +| #define HAVE_DLOPEN 1 +| #define HAVE_DLERROR 1 +| #define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 +| #define USE_MYSQL 1 +| #define USE_MMSEG 1 +| #define USE_64BIT 0 +| #define USE_LIBSTEMMER 0 +| #define USE_LIBEXPAT 1 +| #define USE_LIBICONV 1 +| /* end confdefs.h. */ +| +| #include +| #include +| int +| main () +| { +| const char * inbuf; +| iconv_t cd; +| iconv ( cd, &inbuf, NULL, NULL, NULL ); +| +| ; +| return 0; +| } +configure:7871: result: char ** +configure:7908: checking for UnixODBC +configure:7984: result: disabled +configure:7999: checking for Syslog +configure:8013: result: disabled +configure:8018: checking for unaligned RAM access +configure:8065: g++ -o conftest -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ conftest.cpp -ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread >&5 +conftest.cpp: In function 'int main()': +conftest.cpp:95:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] +configure:8065: $? = 0 +configure:8065: ./conftest +configure:8065: $? = 0 +configure:8076: result: yes +configure:8089: checking whether byte ordering is bigendian +configure:8104: g++ -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ conftest.cpp >&5 +conftest.cpp:90:9: error: expected unqualified-id before 'not' token +configure:8104: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| #define HAVE_DUP2 1 +| #define HAVE_GETHOSTBYNAME 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_MEMMOVE 1 +| #define HAVE_MEMSET 1 +| #define HAVE_SELECT 1 +| #define HAVE_SOCKET 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRCHR 1 +| #define HAVE_STRERROR 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_STRSTR 1 +| #define HAVE_STRTOL 1 +| #define HAVE_LOGF 1 +| #define HAVE_PREAD 1 +| #define HAVE_BACKTRACE 1 +| #define HAVE_BACKTRACE_SYMBOLS 1 +| #define HAVE_LIBRT 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_LOCK_EX 1 +| #define HAVE_F_SETLKW 1 +| #define HAVE_LIBDL 1 +| #define HAVE_DLOPEN 1 +| #define HAVE_DLERROR 1 +| #define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 +| #define USE_MYSQL 1 +| #define USE_MMSEG 1 +| #define USE_64BIT 0 +| #define USE_LIBSTEMMER 0 +| #define USE_LIBEXPAT 1 +| #define USE_LIBICONV 1 +| #define ICONV_INBUF_CONST 0 +| #define USE_ZLIB 1 +| #define UNALIGNED_RAM_ACCESS 1 +| /* end confdefs.h. */ +| #ifndef __APPLE_CC__ +| not a universal capable compiler +| #endif +| typedef int dummy; +| +configure:8149: g++ -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ conftest.cpp >&5 +configure:8149: $? = 0 +configure:8167: g++ -c -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ conftest.cpp >&5 +conftest.cpp: In function 'int main()': +conftest.cpp:96:8: error: 'big' was not declared in this scope +conftest.cpp:96:12: error: expected ';' before 'endian' +configure:8167: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "sphinx" +| #define PACKAGE_TARNAME "sphinx" +| #define PACKAGE_VERSION "1.11" +| #define PACKAGE_STRING "sphinx 1.11" +| #define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +| #define PACKAGE_URL "" +| #define PACKAGE "sphinx" +| #define VERSION "1.11" +| #define COMPILER "gcc 4.6" +| #define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_NETDB_H 1 +| #define HAVE_NETINET_IN_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_FILE_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_PTHREAD_H 1 +| #define HAVE_EXECINFO_H 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define TIME_WITH_SYS_TIME 1 +| #define HAVE_FORK 1 +| #define HAVE_VFORK 1 +| #define HAVE_WORKING_VFORK 1 +| #define HAVE_WORKING_FORK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_REALLOC 1 +| #define HAVE_SYS_SELECT_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define SELECT_TYPE_ARG1 int +| #define SELECT_TYPE_ARG234 (fd_set *) +| #define SELECT_TYPE_ARG5 (struct timeval *) +| #define RETSIGTYPE void +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_VPRINTF 1 +| #define HAVE_DUP2 1 +| #define HAVE_GETHOSTBYNAME 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_MEMMOVE 1 +| #define HAVE_MEMSET 1 +| #define HAVE_SELECT 1 +| #define HAVE_SOCKET 1 +| #define HAVE_STRCASECMP 1 +| #define HAVE_STRCHR 1 +| #define HAVE_STRERROR 1 +| #define HAVE_STRNCASECMP 1 +| #define HAVE_STRSTR 1 +| #define HAVE_STRTOL 1 +| #define HAVE_LOGF 1 +| #define HAVE_PREAD 1 +| #define HAVE_BACKTRACE 1 +| #define HAVE_BACKTRACE_SYMBOLS 1 +| #define HAVE_LIBRT 1 +| #define HAVE_CLOCK_GETTIME 1 +| #define HAVE_LOCK_EX 1 +| #define HAVE_F_SETLKW 1 +| #define HAVE_LIBDL 1 +| #define HAVE_DLOPEN 1 +| #define HAVE_DLERROR 1 +| #define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 +| #define USE_MYSQL 1 +| #define USE_MMSEG 1 +| #define USE_64BIT 0 +| #define USE_LIBSTEMMER 0 +| #define USE_LIBEXPAT 1 +| #define USE_LIBICONV 1 +| #define ICONV_INBUF_CONST 0 +| #define USE_ZLIB 1 +| #define UNALIGNED_RAM_ACCESS 1 +| /* end confdefs.h. */ +| #include +| #include +| +| int +| main () +| { +| #if BYTE_ORDER != BIG_ENDIAN +| not big endian +| #endif +| +| ; +| return 0; +| } +configure:8295: result: no +configure:8317: result: +configure:8319: result: generating configuration files +configure:8322: result: ------------------------------ +configure:8324: result: +configure:8498: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by sphinx config.status 1.11, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on data-center + +config.status:974: creating Makefile +config.status:974: creating src/Makefile +config.status:974: creating libstemmer_c/Makefile +config.status:974: creating doc/Makefile +config.status:974: creating sphinx.conf.dist +config.status:974: creating sphinx-min.conf.dist +config.status:974: creating config/config.h +config.status:1203: executing depfiles commands +configure:9836: result: +configure:9838: result: configuration done +configure:9841: result: ------------------ +configure:9843: result: + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_c_bigendian=no +ac_cv_c_compiler_gnu=yes +ac_cv_c_const=yes +ac_cv_c_inline=inline +ac_cv_cxx_compiler_gnu=yes +ac_cv_define_F_SETLKW=yes +ac_cv_define_LOCK_EX=yes +ac_cv_env_CCC_set= +ac_cv_env_CCC_value= +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_CXXFLAGS_set= +ac_cv_env_CXXFLAGS_value= +ac_cv_env_CXX_set= +ac_cv_env_CXX_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_PYTHON_set= +ac_cv_env_PYTHON_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_func__doprnt=no +ac_cv_func_backtrace=yes +ac_cv_func_backtrace_symbols=yes +ac_cv_func_clock_gettime=yes +ac_cv_func_dlerror=yes +ac_cv_func_dlopen=yes +ac_cv_func_dup2=yes +ac_cv_func_fork=yes +ac_cv_func_fork_works=yes +ac_cv_func_gethostbyname=yes +ac_cv_func_gettimeofday=yes +ac_cv_func_logf=yes +ac_cv_func_lstat_dereferences_slashed_symlink=yes +ac_cv_func_malloc_0_nonnull=yes +ac_cv_func_memmove=yes +ac_cv_func_memset=yes +ac_cv_func_mysql_real_connect=yes +ac_cv_func_pread=yes +ac_cv_func_pthread_mutex_timedlock=yes +ac_cv_func_realloc_0_nonnull=yes +ac_cv_func_select=yes +ac_cv_func_select_args='int,fd_set *,struct timeval *' +ac_cv_func_socket=yes +ac_cv_func_stat_empty_string_bug=no +ac_cv_func_strcasecmp=yes +ac_cv_func_strchr=yes +ac_cv_func_strerror=yes +ac_cv_func_strncasecmp=yes +ac_cv_func_strstr=yes +ac_cv_func_strtol=yes +ac_cv_func_vfork=yes +ac_cv_func_vfork_works=yes +ac_cv_func_vprintf=yes +ac_cv_header_execinfo_h=yes +ac_cv_header_expat_h=yes +ac_cv_header_fcntl_h=yes +ac_cv_header_iconv_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_limits_h=yes +ac_cv_header_memory_h=yes +ac_cv_header_netdb_h=yes +ac_cv_header_netinet_in_h=yes +ac_cv_header_pthread_h=yes +ac_cv_header_sql_h=no +ac_cv_header_stdbool_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_file_h=yes +ac_cv_header_sys_select_h=yes +ac_cv_header_sys_socket_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_time_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_sys_wait_h=yes +ac_cv_header_syslog_h=yes +ac_cv_header_time=yes +ac_cv_header_unistd_h=yes +ac_cv_header_vfork_h=no +ac_cv_header_zlib_h=yes +ac_cv_lib_dl_dlopen=yes +ac_cv_lib_rt_clock_gettime=yes +ac_cv_mmseg_includes=/usr/local/mmseg3/include/mmseg/ +ac_cv_mmseg_libs=/usr/local/mmseg3/lib/ +ac_cv_objext=o +ac_cv_path_EGREP='/bin/grep -E' +ac_cv_path_GREP=/bin/grep +ac_cv_path_PYTHON=/usr/bin/python +ac_cv_path_install='/usr/bin/install -c' +ac_cv_path_mkdir=/bin/mkdir +ac_cv_prog_AWK=gawk +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_CXX=g++ +ac_cv_prog_ac_ct_RANLIB=ranlib +ac_cv_prog_cc_c89= +ac_cv_prog_cc_g=yes +ac_cv_prog_cxx_g=yes +ac_cv_prog_make_make_set=yes +ac_cv_search_XML_Parse=-lexpat +ac_cv_search_gethostbyname='none required' +ac_cv_search_iconv='none required' +ac_cv_search_inflate=-lz +ac_cv_search_logf=-lm +ac_cv_search_setsockopt='none required' +ac_cv_type__Bool=yes +ac_cv_type_off_t=yes +ac_cv_type_pid_t=yes +ac_cv_type_signal=void +ac_cv_type_size_t=yes +ac_cv_use_debug=no +ac_cv_use_iconv=yes +ac_cv_use_libstemmer=no +ac_cv_use_mmseg=yes +ac_cv_use_mysql=yes +ac_cv_use_pgsql=no +ac_cv_use_static_mysql=no +ac_cv_use_syslog=no +ac_cv_use_unixodbc=no +am_cv_CC_dependencies_compiler_type=gcc3 +am_cv_CXX_dependencies_compiler_type=gcc3 +am_cv_python_platform=linux2 +am_cv_python_pyexecdir='${exec_prefix}/lib/python2.7/site-packages' +am_cv_python_pythondir='${prefix}/lib/python2.7/site-packages' +am_cv_python_version=2.7 +sphinx_cv_pthreads_cflags=-pthread +sphinx_cv_pthreads_libs=-lpthread +sphinx_cv_unaligned_ram_access=yes + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run aclocal-1.11' +AMDEPBACKSLASH='\' +AMDEP_FALSE='#' +AMDEP_TRUE='' +AMTAR='$${TAR-tar}' +AUTOCONF='${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoconf' +AUTOHEADER='${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoheader' +AUTOMAKE='${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run automake-1.11' +AWK='gawk' +CC='gcc' +CCDEPMODE='depmode=gcc3' +CFLAGS='-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG' +CONFDIR='/usr/local/coreseek/var' +CPP='gcc -E' +CPPFLAGS=' -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ ' +CXX='g++' +CXXDEPMODE='depmode=gcc3' +CXXFLAGS='-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG' +CYGPATH_W='echo' +DEFS='-DHAVE_CONFIG_H' +DEPDIR='.deps' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/bin/grep -E' +EXEEXT='' +GREP='/bin/grep' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' +LDFLAGS='' +LIBOBJS='' +LIBRT='-lrt ' +LIBS='-ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread ' +LTLIBOBJS='' +MAINT='#' +MAINTAINER_MODE_FALSE='' +MAINTAINER_MODE_TRUE='#' +MAKEINFO='${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run makeinfo' +MKDIR_P='/bin/mkdir -p' +MMSEG_CFLAGS='-I/usr/local/mmseg3/include/mmseg/' +MMSEG_LIBS='-L/usr/local/mmseg3/lib/ -lmmseg' +MYSQL_CFLAGS='-I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g' +MYSQL_LIBS='-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl' +OBJEXT='o' +PACKAGE='sphinx' +PACKAGE_BUGREPORT='shodan(at)shodan.ru' +PACKAGE_NAME='sphinx' +PACKAGE_STRING='sphinx 1.11' +PACKAGE_TARNAME='sphinx' +PACKAGE_URL='' +PACKAGE_VERSION='1.11' +PATH_SEPARATOR=':' +PGSQL_CFLAGS='' +PGSQL_LIBS='' +PYTHON='/usr/bin/python' +PYTHON_CPPFLAGS='' +PYTHON_EXEC_PREFIX='${exec_prefix}' +PYTHON_LIBS='' +PYTHON_PLATFORM='linux2' +PYTHON_PREFIX='${prefix}' +PYTHON_VERSION='2.7' +RANLIB='ranlib' +SET_MAKE='' +SHELL='/bin/bash' +STRIP='' +USE_LIBSTEMMER_FALSE='' +USE_LIBSTEMMER_TRUE='#' +USE_MMSEG_FALSE='#' +USE_MMSEG_TRUE='' +USE_MYSQL_FALSE='#' +USE_MYSQL_TRUE='' +USE_PGSQL_FALSE='' +USE_PGSQL_TRUE='#' +USE_PYTHON_FALSE='' +USE_PYTHON_TRUE='#' +VERSION='1.11' +ac_ct_CC='gcc' +ac_ct_CXX='g++' +am__EXEEXT_FALSE='' +am__EXEEXT_TRUE='#' +am__fastdepCC_FALSE='#' +am__fastdepCC_TRUE='' +am__fastdepCXX_FALSE='#' +am__fastdepCXX_TRUE='' +am__include='include' +am__isrc='' +am__leading_dot='.' +am__nodep='_no' +am__quote='' +am__tar='$${TAR-tar} chof - "$$tardir"' +am__untar='$${TAR-tar} xf -' +bindir='${exec_prefix}/bin' +build_alias='' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host_alias='' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +install_sh='${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/install-sh' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +mkdir_p='/bin/mkdir -p' +oldincludedir='/usr/include' +pdfdir='${docdir}' +pgconfig='' +pkgpyexecdir='${pyexecdir}/sphinx' +pkgpythondir='${pythondir}/sphinx' +prefix='/usr/local/coreseek' +program_transform_name='s,x,x,' +psdir='${docdir}' +pyexecdir='${exec_prefix}/lib/python2.7/site-packages' +pythondir='${prefix}/lib/python2.7/site-packages' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +/* confdefs.h */ +#define PACKAGE_NAME "sphinx" +#define PACKAGE_TARNAME "sphinx" +#define PACKAGE_VERSION "1.11" +#define PACKAGE_STRING "sphinx 1.11" +#define PACKAGE_BUGREPORT "shodan(at)shodan.ru" +#define PACKAGE_URL "" +#define PACKAGE "sphinx" +#define VERSION "1.11" +#define COMPILER "gcc 4.6" +#define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" +#define STDC_HEADERS 1 +#define HAVE_SYS_WAIT_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_FCNTL_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_NETDB_H 1 +#define HAVE_NETINET_IN_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_SYS_FILE_H 1 +#define HAVE_SYS_SOCKET_H 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_PTHREAD_H 1 +#define HAVE_EXECINFO_H 1 +#define HAVE__BOOL 1 +#define HAVE_STDBOOL_H 1 +#define TIME_WITH_SYS_TIME 1 +#define HAVE_FORK 1 +#define HAVE_VFORK 1 +#define HAVE_WORKING_VFORK 1 +#define HAVE_WORKING_FORK 1 +#define HAVE_STDLIB_H 1 +#define HAVE_MALLOC 1 +#define HAVE_STDLIB_H 1 +#define HAVE_REALLOC 1 +#define HAVE_SYS_SELECT_H 1 +#define HAVE_SYS_SOCKET_H 1 +#define SELECT_TYPE_ARG1 int +#define SELECT_TYPE_ARG234 (fd_set *) +#define SELECT_TYPE_ARG5 (struct timeval *) +#define RETSIGTYPE void +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +#define HAVE_VPRINTF 1 +#define HAVE_DUP2 1 +#define HAVE_GETHOSTBYNAME 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMSET 1 +#define HAVE_SELECT 1 +#define HAVE_SOCKET 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRCHR 1 +#define HAVE_STRERROR 1 +#define HAVE_STRNCASECMP 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOL 1 +#define HAVE_LOGF 1 +#define HAVE_PREAD 1 +#define HAVE_BACKTRACE 1 +#define HAVE_BACKTRACE_SYMBOLS 1 +#define HAVE_LIBRT 1 +#define HAVE_CLOCK_GETTIME 1 +#define HAVE_LOCK_EX 1 +#define HAVE_F_SETLKW 1 +#define HAVE_LIBDL 1 +#define HAVE_DLOPEN 1 +#define HAVE_DLERROR 1 +#define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 +#define USE_MYSQL 1 +#define USE_MMSEG 1 +#define USE_64BIT 0 +#define USE_LIBSTEMMER 0 +#define USE_LIBEXPAT 1 +#define USE_LIBICONV 1 +#define ICONV_INBUF_CONST 0 +#define USE_ZLIB 1 +#define UNALIGNED_RAM_ACCESS 1 +#define USE_LITTLE_ENDIAN 1 + +configure: exit 0 diff --git a/coreseek/csft-4.1/config.status b/coreseek/csft-4.1/config.status new file mode 100755 index 0000000..461d1aa --- /dev/null +++ b/coreseek/csft-4.1/config.status @@ -0,0 +1,1310 @@ +#! /bin/bash +# Generated by configure. +# 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-/bin/bash} +export SHELL +## -------------------- ## +## 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +# 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 sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. 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` +" + +# Files that config.status was made for. +config_files=" Makefile src/Makefile libstemmer_c/Makefile doc/Makefile sphinx.conf.dist:sphinx.conf.in sphinx-min.conf.dist:sphinx-min.conf.in" +config_headers=" config/config.h" +config_commands=" depfiles" + +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +ac_cs_config="'--prefix=/usr/local/coreseek' '--without-unixodbc' '--with-mmseg' '--with-mmseg-includes=/usr/local/mmseg3/include/mmseg/' '--with-mmseg-libs=/usr/local/mmseg3/lib/' '--with-mysql'" +ac_cs_version="\ +sphinx config.status 1.11 +configured by ./configure, generated by GNU Autoconf 2.68, + with options \"$ac_cs_config\" + +Copyright (C) 2010 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='/home/coreseek/coreseek-4.1-beta/csft-4.1' +srcdir='.' +INSTALL='/usr/bin/install -c' +MKDIR_P='/bin/mkdir -p' +AWK='gawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X '/bin/bash' './configure' '--prefix=/usr/local/coreseek' '--without-unixodbc' '--with-mmseg' '--with-mmseg-includes=/usr/local/mmseg3/include/mmseg/' '--with-mmseg-libs=/usr/local/mmseg3/lib/' '--with-mysql' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 + CONFIG_SHELL='/bin/bash' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +# +# INIT-COMMANDS +# +AMDEP_TRUE="" ac_aux_dir="config" + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config/config.h") CONFIG_HEADERS="$CONFIG_HEADERS config/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "libstemmer_c/Makefile") CONFIG_FILES="$CONFIG_FILES libstemmer_c/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "sphinx.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx.conf.dist:sphinx.conf.in" ;; + "sphinx-min.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx-min.conf.dist:sphinx-min.conf.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]="" +S["CONFDIR"]="/usr/local/coreseek/var" +S["USE_LIBSTEMMER_FALSE"]="" +S["USE_LIBSTEMMER_TRUE"]="#" +S["USE_PYTHON_FALSE"]="" +S["USE_PYTHON_TRUE"]="#" +S["USE_MMSEG_FALSE"]="#" +S["USE_MMSEG_TRUE"]="" +S["MMSEG_CFLAGS"]="-I/usr/local/mmseg3/include/mmseg/" +S["MMSEG_LIBS"]="-L/usr/local/mmseg3/lib/ -lmmseg" +S["USE_PGSQL_FALSE"]="" +S["USE_PGSQL_TRUE"]="#" +S["PGSQL_CFLAGS"]="" +S["PGSQL_LIBS"]="" +S["pgconfig"]="" +S["USE_MYSQL_FALSE"]="#" +S["USE_MYSQL_TRUE"]="" +S["MYSQL_CFLAGS"]="-I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g" +S["MYSQL_LIBS"]="-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl" +S["LIBRT"]="-lrt " +S["LIBOBJS"]="" +S["EGREP"]="/bin/grep -E" +S["GREP"]="/bin/grep" +S["CPP"]="gcc -E" +S["PYTHON_LIBS"]="" +S["PYTHON_CPPFLAGS"]="" +S["RANLIB"]="ranlib" +S["am__fastdepCXX_FALSE"]="#" +S["am__fastdepCXX_TRUE"]="" +S["CXXDEPMODE"]="depmode=gcc3" +S["ac_ct_CXX"]="g++" +S["CXXFLAGS"]="-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG" +S["CXX"]="g++" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["am__nodep"]="_no" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]=" -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ " +S["LDFLAGS"]="" +S["CFLAGS"]="-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG" +S["CC"]="gcc" +S["pkgpyexecdir"]="${pyexecdir}/sphinx" +S["pyexecdir"]="${exec_prefix}/lib/python2.7/site-packages" +S["pkgpythondir"]="${pythondir}/sphinx" +S["pythondir"]="${prefix}/lib/python2.7/site-packages" +S["PYTHON_PLATFORM"]="linux2" +S["PYTHON_EXEC_PREFIX"]="${exec_prefix}" +S["PYTHON_PREFIX"]="${prefix}" +S["PYTHON_VERSION"]="2.7" +S["PYTHON"]="/usr/bin/python" +S["MAINT"]="#" +S["MAINTAINER_MODE_FALSE"]="" +S["MAINTAINER_MODE_TRUE"]="#" +S["am__untar"]="$${TAR-tar} xf -" +S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" +S["AMTAR"]="$${TAR-tar}" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="gawk" +S["mkdir_p"]="/bin/mkdir -p" +S["MKDIR_P"]="/bin/mkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="" +S["install_sh"]="${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/install-sh" +S["MAKEINFO"]="${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run makeinfo" +S["AUTOHEADER"]="${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoheader" +S["AUTOMAKE"]="${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run automake-1.11" +S["AUTOCONF"]="${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoconf" +S["ACLOCAL"]="${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run aclocal-1.11" +S["VERSION"]="1.11" +S["PACKAGE"]="sphinx" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="-ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread " +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local/coreseek" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="" +S["PACKAGE_BUGREPORT"]="shodan(at)shodan.ru" +S["PACKAGE_STRING"]="sphinx 1.11" +S["PACKAGE_VERSION"]="1.11" +S["PACKAGE_TARNAME"]="sphinx" +S["PACKAGE_NAME"]="sphinx" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/bash" +_ACAWK +cat >>"$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"sphinx\"" +D["PACKAGE_TARNAME"]=" \"sphinx\"" +D["PACKAGE_VERSION"]=" \"1.11\"" +D["PACKAGE_STRING"]=" \"sphinx 1.11\"" +D["PACKAGE_BUGREPORT"]=" \"shodan(at)shodan.ru\"" +D["PACKAGE_URL"]=" \"\"" +D["PACKAGE"]=" \"sphinx\"" +D["VERSION"]=" \"1.11\"" +D["COMPILER"]=" \"gcc 4.6\"" +D["OS_UNAME"]=" \"Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux\"" +D["STDC_HEADERS"]=" 1" +D["HAVE_SYS_WAIT_H"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_MEMORY_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_FCNTL_H"]=" 1" +D["HAVE_LIMITS_H"]=" 1" +D["HAVE_NETDB_H"]=" 1" +D["HAVE_NETINET_IN_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_SYS_FILE_H"]=" 1" +D["HAVE_SYS_SOCKET_H"]=" 1" +D["HAVE_SYS_TIME_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_PTHREAD_H"]=" 1" +D["HAVE_EXECINFO_H"]=" 1" +D["HAVE__BOOL"]=" 1" +D["HAVE_STDBOOL_H"]=" 1" +D["TIME_WITH_SYS_TIME"]=" 1" +D["HAVE_FORK"]=" 1" +D["HAVE_VFORK"]=" 1" +D["HAVE_WORKING_VFORK"]=" 1" +D["HAVE_WORKING_FORK"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_MALLOC"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_REALLOC"]=" 1" +D["HAVE_SYS_SELECT_H"]=" 1" +D["HAVE_SYS_SOCKET_H"]=" 1" +D["SELECT_TYPE_ARG1"]=" int" +D["SELECT_TYPE_ARG234"]=" (fd_set *)" +D["SELECT_TYPE_ARG5"]=" (struct timeval *)" +D["RETSIGTYPE"]=" void" +D["LSTAT_FOLLOWS_SLASHED_SYMLINK"]=" 1" +D["HAVE_VPRINTF"]=" 1" +D["HAVE_DUP2"]=" 1" +D["HAVE_GETHOSTBYNAME"]=" 1" +D["HAVE_GETTIMEOFDAY"]=" 1" +D["HAVE_MEMMOVE"]=" 1" +D["HAVE_MEMSET"]=" 1" +D["HAVE_SELECT"]=" 1" +D["HAVE_SOCKET"]=" 1" +D["HAVE_STRCASECMP"]=" 1" +D["HAVE_STRCHR"]=" 1" +D["HAVE_STRERROR"]=" 1" +D["HAVE_STRNCASECMP"]=" 1" +D["HAVE_STRSTR"]=" 1" +D["HAVE_STRTOL"]=" 1" +D["HAVE_LOGF"]=" 1" +D["HAVE_PREAD"]=" 1" +D["HAVE_BACKTRACE"]=" 1" +D["HAVE_BACKTRACE_SYMBOLS"]=" 1" +D["HAVE_LIBRT"]=" 1" +D["HAVE_CLOCK_GETTIME"]=" 1" +D["HAVE_LOCK_EX"]=" 1" +D["HAVE_F_SETLKW"]=" 1" +D["HAVE_LIBDL"]=" 1" +D["HAVE_DLOPEN"]=" 1" +D["HAVE_DLERROR"]=" 1" +D["HAVE_PTHREAD_MUTEX_TIMEDLOCK"]=" 1" +D["USE_MYSQL"]=" 1" +D["USE_MMSEG"]=" 1" +D["USE_64BIT"]=" 0" +D["USE_LIBSTEMMER"]=" 0" +D["USE_LIBEXPAT"]=" 1" +D["USE_LIBICONV"]=" 1" +D["ICONV_INBUF_CONST"]=" 0" +D["USE_ZLIB"]=" 1" +D["UNALIGNED_RAM_ACCESS"]=" 1" +D["USE_LITTLE_ENDIAN"]=" 1" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 diff --git a/coreseek/csft-4.1/config/config.h b/coreseek/csft-4.1/config/config.h new file mode 100644 index 0000000..c1ccafa --- /dev/null +++ b/coreseek/csft-4.1/config/config.h @@ -0,0 +1,297 @@ +/* config/config.h. Generated from config.h.in by configure. */ +/* config/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to be the name of the compiler. */ +#define COMPILER "gcc 4.6" + +/* Define to 1 if you have the `backtrace' function. */ +#define HAVE_BACKTRACE 1 + +/* Define to 1 if you have the `backtrace_symbols' function. */ +#define HAVE_BACKTRACE_SYMBOLS 1 + +/* Define to 1 if you have the `clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if you have the `dlerror' function. */ +#define HAVE_DLERROR 1 + +/* Define to 1 if you have the `dlopen' function. */ +#define HAVE_DLOPEN 1 + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +/* #undef HAVE_DOPRNT */ + +/* Define to 1 if you have the `dup2' function. */ +#define HAVE_DUP2 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_EXECINFO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `fork' function. */ +#define HAVE_FORK 1 + +/* Define to 1 if you have the `gethostbyname' function. */ +#define HAVE_GETHOSTBYNAME 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `dl' library (-ldl). */ +#define HAVE_LIBDL 1 + +/* Define to 1 if you have the `rt' library (-lrt). */ +#define HAVE_LIBRT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the `logf' function. */ +#define HAVE_LOGF 1 + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#define HAVE_MALLOC 1 + +/* Define to 1 if you have the `memmove' function. */ +#define HAVE_MEMMOVE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `memset' function. */ +#define HAVE_MEMSET 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_NETDB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the `pread' function. */ +#define HAVE_PREAD 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_PTHREAD_H 1 + +/* Define to 1 if you have the `pthread_mutex_timedlock' function. */ +#define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#define HAVE_REALLOC 1 + +/* Define to 1 if you have the `select' function. */ +#define HAVE_SELECT 1 + +/* Define to 1 if you have the `socket' function. */ +#define HAVE_SOCKET 1 + +/* Define to 1 if `stat' has the bug that it succeeds when given the + zero-length file name argument. */ +/* #undef HAVE_STAT_EMPTY_STRING_BUG */ + +/* Define to 1 if stdbool.h conforms to C99. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strcasecmp' function. */ +#define HAVE_STRCASECMP 1 + +/* Define to 1 if you have the `strchr' function. */ +#define HAVE_STRCHR 1 + +/* Define to 1 if you have the `strerror' function. */ +#define HAVE_STRERROR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strncasecmp' function. */ +#define HAVE_STRNCASECMP 1 + +/* Define to 1 if you have the `strstr' function. */ +#define HAVE_STRSTR 1 + +/* Define to 1 if you have the `strtol' function. */ +#define HAVE_STRTOL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `vfork' function. */ +#define HAVE_VFORK 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VFORK_H */ + +/* Define to 1 if you have the `vprintf' function. */ +#define HAVE_VPRINTF 1 + +/* Define to 1 if `fork' works. */ +#define HAVE_WORKING_FORK 1 + +/* Define to 1 if `vfork' works. */ +#define HAVE_WORKING_VFORK 1 + +/* Define to 1 if the system has the type `_Bool'. */ +#define HAVE__BOOL 1 + +/* whether 2nd arg to iconv() is const ptr */ +#define ICONV_INBUF_CONST 0 + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 + +/* Full name OS */ +#define OS_UNAME "Linux data-center 3.2.0-100-generic #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "shodan(at)shodan.ru" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "sphinx" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "sphinx 1.11" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "sphinx" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.11" + +/* Define as the return type of signal handlers (`int' or `void'). */ +#define RETSIGTYPE void + +/* Define to the type of arg 1 for `select'. */ +#define SELECT_TYPE_ARG1 int + +/* Define to the type of args 2, 3 and 4 for `select'. */ +#define SELECT_TYPE_ARG234 (fd_set *) + +/* Define to the type of arg 5 for `select'. */ +#define SELECT_TYPE_ARG5 (struct timeval *) + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to 1 if you can safely include both and . */ +#define TIME_WITH_SYS_TIME 1 + +/* whether unaligned RAM access is possible */ +#define UNALIGNED_RAM_ACCESS 1 + +/* 64-bit document and word IDs */ +#define USE_64BIT 0 + +/* define to use expat XML library */ +#define USE_LIBEXPAT 1 + +/* define to use iconv library */ +#define USE_LIBICONV 1 + +/* libstemmer support */ +#define USE_LIBSTEMMER 0 + +/* little-endian */ +#define USE_LITTLE_ENDIAN 1 + +/* Define to 1 if you want to compile with libmmseg support */ +#define USE_MMSEG 1 + +/* Define to 1 if you want to compile with MySQL support */ +#define USE_MYSQL 1 + +/* define to use ODBC library */ +/* #undef USE_ODBC */ + +/* Define to 1 if you want to compile with PostgreSQL support */ +/* #undef USE_PGSQL */ + +/* Define to compile in Python datasource support. */ +/* #undef USE_PYTHON */ + +/* define to use POSIX Syslog for logging */ +/* #undef USE_SYSLOG */ + +/* define to use Zlib */ +#define USE_ZLIB 1 + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to rpl_malloc if the replacement function should be used. */ +/* #undef malloc */ + +/* Define to `long int' if does not define. */ +/* #undef off_t */ + +/* Define to `int' if does not define. */ +/* #undef pid_t */ + +/* Define to rpl_realloc if the replacement function should be used. */ +/* #undef realloc */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define as `fork' if `vfork' does not work. */ +/* #undef vfork */ diff --git a/coreseek/csft-4.1/config/config.h.in b/coreseek/csft-4.1/config/config.h.in new file mode 100644 index 0000000..b5f34f6 --- /dev/null +++ b/coreseek/csft-4.1/config/config.h.in @@ -0,0 +1,308 @@ +/* config/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to be the name of the compiler. */ +#undef COMPILER + +/* Define to 1 if you have the `backtrace' function. */ +#undef HAVE_BACKTRACE + +/* Define to 1 if you have the `backtrace_symbols' function. */ +#undef HAVE_BACKTRACE_SYMBOLS + +/* Define to 1 if you have the `clock_gettime' function. */ +#undef HAVE_CLOCK_GETTIME + +/* Define to 1 if you have the `dlerror' function. */ +#undef HAVE_DLERROR + +/* Define to 1 if you have the `dlopen' function. */ +#undef HAVE_DLOPEN + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +#undef HAVE_DOPRNT + +/* Define to 1 if you have the `dup2' function. */ +#undef HAVE_DUP2 + +/* Define to 1 if you have the header file. */ +#undef HAVE_EXECINFO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define if F_SETLKW is defined in fcntl.h */ +#undef HAVE_F_SETLKW + +/* Define to 1 if you have the `gethostbyname' function. */ +#undef HAVE_GETHOSTBYNAME + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `dl' library (-ldl). */ +#undef HAVE_LIBDL + +/* Define to 1 if you have the `rt' library (-lrt). */ +#undef HAVE_LIBRT + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define if LOCK_EX is defined in sys/file.h */ +#undef HAVE_LOCK_EX + +/* Define to 1 if you have the `logf' function. */ +#undef HAVE_LOGF + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the `pread' function. */ +#undef HAVE_PREAD + +/* Define to 1 if you have the header file. */ +#undef HAVE_PTHREAD_H + +/* Define to 1 if you have the `pthread_mutex_timedlock' function. */ +#undef HAVE_PTHREAD_MUTEX_TIMEDLOCK + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#undef HAVE_REALLOC + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the `socket' function. */ +#undef HAVE_SOCKET + +/* Define to 1 if `stat' has the bug that it succeeds when given the + zero-length file name argument. */ +#undef HAVE_STAT_EMPTY_STRING_BUG + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strstr' function. */ +#undef HAVE_STRSTR + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_FILE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the header file. */ +#undef HAVE_VFORK_H + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF + +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* whether 2nd arg to iconv() is const ptr */ +#undef ICONV_INBUF_CONST + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* Full name OS */ +#undef OS_UNAME + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define as the return type of signal handlers (`int' or `void'). */ +#undef RETSIGTYPE + +/* Define to the type of arg 1 for `select'. */ +#undef SELECT_TYPE_ARG1 + +/* Define to the type of args 2, 3 and 4 for `select'. */ +#undef SELECT_TYPE_ARG234 + +/* Define to the type of arg 5 for `select'. */ +#undef SELECT_TYPE_ARG5 + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* whether unaligned RAM access is possible */ +#undef UNALIGNED_RAM_ACCESS + +/* 64-bit document and word IDs */ +#undef USE_64BIT + +/* define to use expat XML library */ +#undef USE_LIBEXPAT + +/* define to use iconv library */ +#undef USE_LIBICONV + +/* libstemmer support */ +#undef USE_LIBSTEMMER + +/* little-endian */ +#undef USE_LITTLE_ENDIAN + +/* Define to 1 if you want to compile with libmmseg support */ +#undef USE_MMSEG + +/* Define to 1 if you want to compile with MySQL support */ +#undef USE_MYSQL + +/* define to use ODBC library */ +#undef USE_ODBC + +/* Define to 1 if you want to compile with PostgreSQL support */ +#undef USE_PGSQL + +/* Define to compile in Python datasource support. */ +#undef USE_PYTHON + +/* define to use POSIX Syslog for logging */ +#undef USE_SYSLOG + +/* define to use Zlib */ +#undef USE_ZLIB + +/* Version number of package */ +#undef VERSION + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to `long int' if does not define. */ +#undef off_t + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define to rpl_realloc if the replacement function should be used. */ +#undef realloc + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork diff --git a/coreseek/csft-4.1/config/config.h.in~ b/coreseek/csft-4.1/config/config.h.in~ new file mode 100644 index 0000000..5c6e836 --- /dev/null +++ b/coreseek/csft-4.1/config/config.h.in~ @@ -0,0 +1,296 @@ +/* config/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to be the name of the compiler. */ +#undef COMPILER + +/* Define to 1 if you have the `backtrace' function. */ +#undef HAVE_BACKTRACE + +/* Define to 1 if you have the `backtrace_symbols' function. */ +#undef HAVE_BACKTRACE_SYMBOLS + +/* Define to 1 if you have the `clock_gettime' function. */ +#undef HAVE_CLOCK_GETTIME + +/* Define to 1 if you have the `dlerror' function. */ +#undef HAVE_DLERROR + +/* Define to 1 if you have the `dlopen' function. */ +#undef HAVE_DLOPEN + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +#undef HAVE_DOPRNT + +/* Define to 1 if you have the `dup2' function. */ +#undef HAVE_DUP2 + +/* Define to 1 if you have the header file. */ +#undef HAVE_EXECINFO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define to 1 if you have the `gethostbyname' function. */ +#undef HAVE_GETHOSTBYNAME + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `dl' library (-ldl). */ +#undef HAVE_LIBDL + +/* Define to 1 if you have the `rt' library (-lrt). */ +#undef HAVE_LIBRT + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if you have the `logf' function. */ +#undef HAVE_LOGF + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the `pread' function. */ +#undef HAVE_PREAD + +/* Define to 1 if you have the header file. */ +#undef HAVE_PTHREAD_H + +/* Define to 1 if you have the `pthread_mutex_timedlock' function. */ +#undef HAVE_PTHREAD_MUTEX_TIMEDLOCK + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#undef HAVE_REALLOC + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the `socket' function. */ +#undef HAVE_SOCKET + +/* Define to 1 if `stat' has the bug that it succeeds when given the + zero-length file name argument. */ +#undef HAVE_STAT_EMPTY_STRING_BUG + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strstr' function. */ +#undef HAVE_STRSTR + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_FILE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the header file. */ +#undef HAVE_VFORK_H + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF + +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* whether 2nd arg to iconv() is const ptr */ +#undef ICONV_INBUF_CONST + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* Full name OS */ +#undef OS_UNAME + +/* 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 home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define as the return type of signal handlers (`int' or `void'). */ +#undef RETSIGTYPE + +/* Define to the type of arg 1 for `select'. */ +#undef SELECT_TYPE_ARG1 + +/* Define to the type of args 2, 3 and 4 for `select'. */ +#undef SELECT_TYPE_ARG234 + +/* Define to the type of arg 5 for `select'. */ +#undef SELECT_TYPE_ARG5 + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both and . */ +#undef TIME_WITH_SYS_TIME + +/* whether unaligned RAM access is possible */ +#undef UNALIGNED_RAM_ACCESS + +/* 64-bit document and word IDs */ +#undef USE_64BIT + +/* define to use expat XML library */ +#undef USE_LIBEXPAT + +/* define to use iconv library */ +#undef USE_LIBICONV + +/* libstemmer support */ +#undef USE_LIBSTEMMER + +/* little-endian */ +#undef USE_LITTLE_ENDIAN + +/* Define to 1 if you want to compile with libmmseg support */ +#undef USE_MMSEG + +/* Define to 1 if you want to compile with MySQL support */ +#undef USE_MYSQL + +/* define to use ODBC library */ +#undef USE_ODBC + +/* Define to 1 if you want to compile with PostgreSQL support */ +#undef USE_PGSQL + +/* Define to compile in Python datasource support. */ +#undef USE_PYTHON + +/* define to use POSIX Syslog for logging */ +#undef USE_SYSLOG + +/* define to use Zlib */ +#undef USE_ZLIB + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to `long int' if does not define. */ +#undef off_t + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define to rpl_realloc if the replacement function should be used. */ +#undef realloc + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork diff --git a/coreseek/csft-4.1/config/depcomp b/coreseek/csft-4.1/config/depcomp new file mode 100755 index 0000000..04701da --- /dev/null +++ b/coreseek/csft-4.1/config/depcomp @@ -0,0 +1,530 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2005-07-09.11 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mecanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/csft-4.1/config/install-sh b/coreseek/csft-4.1/config/install-sh new file mode 100755 index 0000000..4d4a951 --- /dev/null +++ b/coreseek/csft-4.1/config/install-sh @@ -0,0 +1,323 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2005-05-14.22 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +chmodcmd="$chmodprog 0755" +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= +dstarg= +no_target_directory= + +usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: +-c (ignored) +-d create directories instead of installing files. +-g GROUP $chgrpprog installed files to GROUP. +-m MODE $chmodprog installed files to MODE. +-o USER $chownprog installed files to USER. +-s $stripprog installed files. +-t DIRECTORY install into DIRECTORY. +-T report an error if DSTFILE is a directory. +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test -n "$1"; do + case $1 in + -c) shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit $?;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t) dstarg=$2 + shift + shift + continue;; + + -T) no_target_directory=true + shift + continue;; + + --version) echo "$0 $scriptversion"; exit $?;; + + *) # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + test -n "$dir_arg$dstarg" && break + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dstarg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dstarg" + shift # fnord + fi + shift # arg + dstarg=$arg + done + break;; + esac +done + +if test -z "$1"; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + src= + + if test -d "$dst"; then + mkdircmd=: + chmodcmd= + else + mkdircmd=$mkdirprog + fi + else + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dstarg: Is a directory" >&2 + exit 1 + fi + dst=$dst/`basename "$src"` + fi + fi + + # This sed command emulates the dirname command. + dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + + # Skip lots of stat calls in the usual case. + if test ! -d "$dstdir"; then + defaultIFS=' + ' + IFS="${IFS-$defaultIFS}" + + oIFS=$IFS + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` + shift + IFS=$oIFS + + pathcomp= + + while test $# -ne 0 ; do + pathcomp=$pathcomp$1 + shift + if test ! -d "$pathcomp"; then + $mkdirprog "$pathcomp" + # mkdir can fail with a `File exist' error in case several + # install-sh are creating the directory concurrently. This + # is OK. + test -d "$pathcomp" || exit + fi + pathcomp=$pathcomp/ + done + fi + + if test -n "$dir_arg"; then + $doit $mkdircmd "$dst" \ + && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } + + else + dstfile=`basename "$dst"` + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + trap '(exit $?); exit' 1 2 13 15 + + # Copy the file name to the temp name. + $doit $cpprog "$src" "$dsttmp" && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ + || { + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + if test -f "$dstdir/$dstfile"; then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ + || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ + || { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit 1 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + } + } + fi || { (exit 1); exit 1; } +done + +# The final little trick to "correctly" pass the exit status to the exit trap. +{ + (exit 0); exit 0 +} + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/csft-4.1/config/missing b/coreseek/csft-4.1/config/missing new file mode 100755 index 0000000..894e786 --- /dev/null +++ b/coreseek/csft-4.1/config/missing @@ -0,0 +1,360 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2005-06-08.21 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case "$1" in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/csft-4.1/config/stamp-h1 b/coreseek/csft-4.1/config/stamp-h1 new file mode 100644 index 0000000..22326a7 --- /dev/null +++ b/coreseek/csft-4.1/config/stamp-h1 @@ -0,0 +1 @@ +timestamp for config/config.h diff --git a/coreseek/csft-4.1/configure b/coreseek/csft-4.1/configure new file mode 100755 index 0000000..67b7243 --- /dev/null +++ b/coreseek/csft-4.1/configure @@ -0,0 +1,9854 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68 for sphinx 1.11. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: shodan(at)shodan.ru about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +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='mkdir -p "$as_dir"' +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'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='sphinx' +PACKAGE_TARNAME='sphinx' +PACKAGE_VERSION='1.11' +PACKAGE_STRING='sphinx 1.11' +PACKAGE_BUGREPORT='shodan(at)shodan.ru' +PACKAGE_URL='' + +ac_unique_file="src/searchd.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +CONFDIR +USE_LIBSTEMMER_FALSE +USE_LIBSTEMMER_TRUE +USE_PYTHON_FALSE +USE_PYTHON_TRUE +USE_MMSEG_FALSE +USE_MMSEG_TRUE +MMSEG_CFLAGS +MMSEG_LIBS +USE_PGSQL_FALSE +USE_PGSQL_TRUE +PGSQL_CFLAGS +PGSQL_LIBS +pgconfig +USE_MYSQL_FALSE +USE_MYSQL_TRUE +MYSQL_CFLAGS +MYSQL_LIBS +LIBRT +LIBOBJS +EGREP +GREP +CPP +PYTHON_LIBS +PYTHON_CPPFLAGS +RANLIB +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +with_debug +enable_dependency_tracking +with_python +with_mysql +with_mysql_includes +with_mysql_libs +with_static_mysql +with_pgsql +with_pgsql_includes +with_pgsql_libs +with_mmseg +with_mmseg_includes +with_mmseg_libs +enable_id64 +with_libstemmer +with_iconv +with_unixodbc +with_syslog +' + ac_precious_vars='build_alias +host_alias +target_alias +PYTHON +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_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'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_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 .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures sphinx 1.11 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/sphinx] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of sphinx 1.11:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-id64 use 64-bit document and word IDs (default is no) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-debug compile slower debug version (default is disabled) + --with-python Embedded Python datasource support [no] + --with-mysql compile with MySQL support (default is enabled) + --with-mysql-includes path to MySQL header files + --with-mysql-libs path to MySQL libraries + --with-static-mysql link statically with MySQL library (default is no) + --with-pgsql compile with PostgreSQL support (default is + disabled) + --with-pgsql-includes path to PostgreSQL header files + --with-pgsql-libs path to PostgreSQL libraries + --with-mmseg compile with libmmseg, a mmseg Chinese Segmenter + support (default is enabled) + --with-mmseg-includes path to libmmseg header files + --with-mmseg-libs path to libmmseg libraries + --with-libstemmer compile with libstemmer support (default is + disabled) + --with-iconv compile with iconv support (default is autodetect) + --with-unixodbc compile with UnixODBC support (default is + autodetect) + --with-syslog compile with possibility to use syslog for logging + (default is no) + +Some influential environment variables: + PYTHON the Python interpreter + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + $as_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 +sphinx configure 1.11 +generated by GNU Autoconf 2.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ---------------------------------- ## +## Report this to shodan(at)shodan.ru ## +## ---------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +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 +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_run LINENO +# ------------------------ +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_cxx_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_run +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 sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. 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=. + $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_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'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > 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 + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_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,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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 + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_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. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking build environment" >&5 +$as_echo "checking build environment" >&6; } + TMP=`echo checking build environment | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='sphinx' + VERSION='1.11' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + + + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.2 python3.1 python3.0 python2.7 python2.6 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if ${am_cv_python_version+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if ${am_cv_python_platform+:} false; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if ${am_cv_python_pythondir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if ${am_cv_python_pyexecdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + +ac_config_headers="$ac_config_headers config/config.h" + + +# hack to locate expat/iconv in /usr/local on BSD systems +CPPFLAGS="$CPPFLAGS -I/usr/local/include" +LIBS="$LIBS -L/usr/local/lib" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for compiler programs" >&5 +$as_echo "checking for compiler programs" >&6; } + TMP=`echo checking for compiler programs | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + + +# Check whether --with-debug was given. +if test "${with_debug+set}" = set; then : + withval=$with_debug; ac_cv_use_debug=$withval +else + ac_cv_use_debug=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile debug version" >&5 +$as_echo_n "checking whether to compile debug version... " >&6; } +if test x$ac_cv_use_debug != xno; then + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + +if test x$ac_env_CFLAGS_set != xset; then + CFLAGS=$SPHINX_CFLAGS +else + CFLAGS="$CFLAGS $SPHINX_INJECT_FLAGS" +fi + +if test x$ac_env_CXXFLAGS_set != xset; then + CXXFLAGS=$SPHINX_CFLAGS +else + CXXFLAGS="$CXXFLAGS $SPHINX_INJECT_FLAGS" +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+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 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$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 + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + + +# Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; case $withval in + yes) USE_PYTHON=DO + +$as_echo "#define USE_PYTHON 1" >>confdefs.h + + ;; + no) USE_PYTHON=DONT ;; + *) as_fn_error $? "invalid argument to --with-python" "$LINENO" 5 ;; + esac +else + USE_PYTHON=DONT +fi + + +if test x"$USE_PYTHON" = xDO ; then + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test x"${PYTHON}" = x ; then + as_fn_error $? "python was not found in path and is required" "$LINENO" 5 +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python linkage" >&5 +$as_echo_n "checking for Python linkage... " >&6; } + py_prefix=`$PYTHON -c 'import sys; print sys.prefix'` + py_ver=`$PYTHON -c 'import sys; print sys.version[:3]'` + py_libdir="$py_prefix/lib/python$py_ver" + PYTHON_CPPFLAGS="-I$py_prefix/include/python$py_ver" + py_linkage="" + for py_linkpart in LIBS LIBC LIBM LOCALMODLIBS BASEMODLIBS \ + LINKFORSHARED LDFLAGS ; do + py_linkage="$py_linkage "`grep "^${py_linkpart}=" \ + $py_libdir/config/Makefile \ + | sed -e 's/^.*=//'` + done + PYTHON_LIBS="-L$py_libdir/config -lpython$py_ver " + PYTHON_LIBS=`echo $PYTHON_LIBS | sed -e 's/ \\t*/ /g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $py_libdir" >&5 +$as_echo "$py_libdir" >&6; } +else + PYTHON_CPPFLAGS= + PYTHON_LIBS= +fi + + + + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef __GNUC__ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3) +void main() {} +#else +syntax error +#endif +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + as_fn_error $? "Gcc version error. Minspec is 3.4" "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +cat >>confdefs.h <<_ACEOF +#define COMPILER "$CC `$CC -dumpversion`" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define OS_UNAME "`uname -a`" +_ACEOF + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for header files" >&5 +$as_echo "checking for header files" >&6; } + TMP=`echo checking for header files | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for header files. +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/file.h sys/socket.h sys/time.h unistd.h pthread.h execinfo.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +ac_fn_c_check_header_mongrel "$LINENO" "expat.h" "ac_cv_header_expat_h" "$ac_includes_default" +if test "x$ac_cv_header_expat_h" = xyes; then : + have_expat_h=yes +else + have_expat_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" +if test "x$ac_cv_header_iconv_h" = xyes; then : + have_iconv_h=yes +else + have_iconv_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = xyes; then : + have_zlib_h=yes +else + have_zlib_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "sql.h" "ac_cv_header_sql_h" "$ac_includes_default" +if test "x$ac_cv_header_sql_h" = xyes; then : + have_sql_h=yes +else + have_sql_h=no +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default" +if test "x$ac_cv_header_syslog_h" = xyes; then : + have_syslog_h=yes +else + have_syslog_h=no +fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for types" >&5 +$as_echo "checking for types" >&6; } + TMP=`echo checking for types | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for typedefs, structures, and compiler characteristics. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if ${ac_cv_header_stdbool_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + /* See body of main program for 'e'. */ + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + /* The following fails for + HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + bool e = &s; + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } +ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + +if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if ${ac_cv_header_time+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes +else + ac_cv_header_time=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then + +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h + +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: checking for library functions" >&5 +$as_echo "checking for library functions" >&6; } + TMP=`echo checking for library functions | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +# Checks for library functions. +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if ${ac_cv_func_fork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if ${ac_cv_func_vfork_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include +#ifdef HAVE_VFORK_H +# include +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include , but some compilers + (e.g. gcc -O) don't grok . Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "#define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if ${ac_cv_func_malloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +fi + + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 +$as_echo_n "checking for GNU libc compatible realloc... " >&6; } +if ${ac_cv_func_realloc_0_nonnull+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_realloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *realloc (); +#endif + +int +main () +{ +return ! realloc (0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_realloc_0_nonnull=yes +else + ac_cv_func_realloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } +if test $ac_cv_func_realloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_REALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_REALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" realloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS realloc.$ac_objext" + ;; +esac + + +$as_echo "#define realloc rpl_realloc" >>confdefs.h + +fi + + +for ac_header in sys/select.h sys/socket.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking types of arguments for select" >&5 +$as_echo_n "checking types of arguments for select... " >&6; } +if ${ac_cv_func_select_args+:} false; then : + $as_echo_n "(cached) " >&6 +else + for ac_arg234 in 'fd_set *' 'int *' 'void *'; do + for ac_arg1 in 'int' 'size_t' 'unsigned long int' 'unsigned int'; do + for ac_arg5 in 'struct timeval *' 'const struct timeval *'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#ifdef HAVE_SYS_SELECT_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif + +int +main () +{ +extern int select ($ac_arg1, + $ac_arg234, $ac_arg234, $ac_arg234, + $ac_arg5); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_func_select_args="$ac_arg1,$ac_arg234,$ac_arg5"; break 3 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done + done +done +# Provide a safe default value. +: "${ac_cv_func_select_args=int,int *,struct timeval *}" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_select_args" >&5 +$as_echo "$ac_cv_func_select_args" >&6; } +ac_save_IFS=$IFS; IFS=',' +set dummy `echo "$ac_cv_func_select_args" | sed 's/\*/\*/g'` +IFS=$ac_save_IFS +shift + +cat >>confdefs.h <<_ACEOF +#define SELECT_TYPE_ARG1 $1 +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define SELECT_TYPE_ARG234 ($2) +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define SELECT_TYPE_ARG5 ($3) +_ACEOF + +rm -f conftest* + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +$as_echo_n "checking return type of signal handlers... " >&6; } +if ${ac_cv_type_signal+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include + +int +main () +{ +return *(signal (0, 0)) (0) == 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_signal=int +else + ac_cv_type_signal=void +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +$as_echo "$ac_cv_type_signal" >&6; } + +cat >>confdefs.h <<_ACEOF +#define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if ${ac_cv_func_lstat_dereferences_slashed_symlink+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIBOBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS lstat.$ac_objext" + ;; +esac + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat accepts an empty string" >&5 +$as_echo_n "checking whether stat accepts an empty string... " >&6; } +if ${ac_cv_func_stat_empty_string_bug+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_stat_empty_string_bug=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + return stat ("", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_stat_empty_string_bug=no +else + ac_cv_func_stat_empty_string_bug=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_stat_empty_string_bug" >&5 +$as_echo "$ac_cv_func_stat_empty_string_bug" >&6; } +if test $ac_cv_func_stat_empty_string_bug = yes; then + case " $LIBOBJS " in + *" stat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS stat.$ac_objext" + ;; +esac + + +cat >>confdefs.h <<_ACEOF +#define HAVE_STAT_EMPTY_STRING_BUG 1 +_ACEOF + +fi + +for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VPRINTF 1 +_ACEOF + +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = xyes; then : + +$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h + +fi + +fi +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 +$as_echo_n "checking for library containing setsockopt... " >&6; } +if ${ac_cv_search_setsockopt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char setsockopt (); +int +main () +{ +return setsockopt (); + ; + return 0; +} +_ACEOF +for ac_lib in '' socket; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_setsockopt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_setsockopt+:} false; then : + break +fi +done +if ${ac_cv_search_setsockopt+:} false; then : + +else + ac_cv_search_setsockopt=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5 +$as_echo "$ac_cv_search_setsockopt" >&6; } +ac_res=$ac_cv_search_setsockopt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5 +$as_echo_n "checking for library containing gethostbyname... " >&6; } +if ${ac_cv_search_gethostbyname+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char gethostbyname (); +int +main () +{ +return gethostbyname (); + ; + return 0; +} +_ACEOF +for ac_lib in '' nsl socket resolv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gethostbyname=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_gethostbyname+:} false; then : + break +fi +done +if ${ac_cv_search_gethostbyname+:} false; then : + +else + ac_cv_search_gethostbyname=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 +$as_echo "$ac_cv_search_gethostbyname" >&6; } +ac_res=$ac_cv_search_gethostbyname +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing XML_Parse" >&5 +$as_echo_n "checking for library containing XML_Parse... " >&6; } +if ${ac_cv_search_XML_Parse+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char XML_Parse (); +int +main () +{ +return XML_Parse (); + ; + return 0; +} +_ACEOF +for ac_lib in '' expat; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_XML_Parse=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_XML_Parse+:} false; then : + break +fi +done +if ${ac_cv_search_XML_Parse+:} false; then : + +else + ac_cv_search_XML_Parse=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_XML_Parse" >&5 +$as_echo "$ac_cv_search_XML_Parse" >&6; } +ac_res=$ac_cv_search_XML_Parse +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libexpat=yes +else + have_libexpat=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing iconv" >&5 +$as_echo_n "checking for library containing iconv... " >&6; } +if ${ac_cv_search_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char iconv (); +int +main () +{ +return iconv (); + ; + return 0; +} +_ACEOF +for ac_lib in '' iconv; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_iconv=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_iconv+:} false; then : + break +fi +done +if ${ac_cv_search_iconv+:} false; then : + +else + ac_cv_search_iconv=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_iconv" >&5 +$as_echo "$ac_cv_search_iconv" >&6; } +ac_res=$ac_cv_search_iconv +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libiconv=yes +else + have_libiconv=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflate" >&5 +$as_echo_n "checking for library containing inflate... " >&6; } +if ${ac_cv_search_inflate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflate (); +int +main () +{ +return inflate (); + ; + return 0; +} +_ACEOF +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_inflate=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_inflate+:} false; then : + break +fi +done +if ${ac_cv_search_inflate+:} false; then : + +else + ac_cv_search_inflate=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflate" >&5 +$as_echo "$ac_cv_search_inflate" >&6; } +ac_res=$ac_cv_search_inflate +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_lz=yes +else + have_lz=no +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing logf" >&5 +$as_echo_n "checking for library containing logf... " >&6; } +if ${ac_cv_search_logf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char logf (); +int +main () +{ +return logf (); + ; + return 0; +} +_ACEOF +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_logf=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_logf+:} false; then : + break +fi +done +if ${ac_cv_search_logf+:} false; then : + +else + ac_cv_search_logf=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_logf" >&5 +$as_echo "$ac_cv_search_logf" >&6; } +ac_res=$ac_cv_search_logf +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +for ac_func in dup2 gethostbyname gettimeofday memmove memset select socket strcasecmp strchr strerror strncasecmp strstr strtol logf pread +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +for ac_func in backtrace backtrace_symbols +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +# most systems require the program be linked with librt library to use +# the function clock_gettime +my_save_LIBS="$LIBS" +LIBS="" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_clock_gettime=yes +else + ac_cv_lib_rt_clock_gettime=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBRT 1 +_ACEOF + + LIBS="-lrt $LIBS" + +fi + + +LIBRT=$LIBS +LIBS="$my_save_LIBS" + + +LIBS="$LIBS $LIBRT" +for ac_func in clock_gettime +do : + ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" +if test "x$ac_cv_func_clock_gettime" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_CLOCK_GETTIME 1 +_ACEOF + +fi +done + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LOCK_EX in sys/file.h" >&5 +$as_echo_n "checking for LOCK_EX in sys/file.h... " >&6; } +if ${ac_cv_define_LOCK_EX+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef LOCK_EX +YES_IS_DEFINED +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + ac_cv_define_LOCK_EX=yes +else + ac_cv_define_LOCK_EX=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_define_LOCK_EX" >&5 +$as_echo "$ac_cv_define_LOCK_EX" >&6; } + if test "$ac_cv_define_LOCK_EX" = "yes"; then + +$as_echo "#define HAVE_LOCK_EX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for F_SETLKW in fcntl.h" >&5 +$as_echo_n "checking for F_SETLKW in fcntl.h... " >&6; } +if ${ac_cv_define_F_SETLKW+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef F_SETLKW +YES_IS_DEFINED +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "YES_IS_DEFINED" >/dev/null 2>&1; then : + ac_cv_define_F_SETLKW=yes +else + ac_cv_define_F_SETLKW=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_define_F_SETLKW" >&5 +$as_echo "$ac_cv_define_F_SETLKW" >&6; } + if test "$ac_cv_define_F_SETLKW" = "yes"; then + +$as_echo "#define HAVE_F_SETLKW 1" >>confdefs.h + + fi + + +# check for dlopen +# FIXME! technically, only needed in searchd +# but as UDF manager is curently in libsphinx, we link everything +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBDL 1 +_ACEOF + + LIBS="-ldl $LIBS" + +fi + +for ac_func in dlopen dlerror +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: configuring Sphinx" >&5 +$as_echo "configuring Sphinx" >&6; } + TMP=`echo configuring Sphinx | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + + +# check for pthreads + +pthread_prog=" +#include +#include + +void * thread_routine ( void * data ) +{ + return data; +} + +int main () +{ + pthread_t thd; + pthread_mutexattr_t mattr; + pthread_once_t once_init = PTHREAD_ONCE_INIT; + int data = 1; + + pthread_mutexattr_init ( &mattr ); + return pthread_create ( &thd, NULL, thread_routine, &data ); +} +" + + + + + + +# check for needed cflags +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLAGS needed for pthreads" >&5 +$as_echo_n "checking for CFLAGS needed for pthreads... " >&6; } +if ${sphinx_cv_pthreads_cflags+:} false; then : + $as_echo_n "(cached) " >&6 +else + + save_cflags=$CFLAGS + for flag in none -kthread -pthread -pthreads -mt -mthreads -Kthread -threads; do + CFLAGS=$save_cflags + test "x$flag" != "xnone" && CFLAGS="$CFLAGS $flag" + +if test x$cross_compiling = xno ; then + if test "$cross_compiling" = yes; then : + pthreads_try_run=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + pthreads_try_run=yes +else + pthreads_try_run=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$pthreads_try_run = xyes ; then + + sphinx_cv_pthreads_cflags="$flag" + break + + fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + pthreads_try_compile=yes +else + pthreads_try_compile=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test x$pthreads_try_compile = xyes ; then + + sphinx_cv_pthreads_cflags="$flag" + break + + fi +fi + + done + CFLAGS=$save_cflags + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_pthreads_cflags" >&5 +$as_echo "$sphinx_cv_pthreads_cflags" >&6; } + +if test -n "$sphinx_cv_pthreads_cflags"; then + have_pthreads=yes + if test "x$sphinx_cv_pthreads_cflags" != "xnone"; then + CPPFLAGS="$CPPFLAGS $sphinx_cv_pthreads_cflags" + fi +fi + +# check for needed libs +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBS needed for pthreads" >&5 +$as_echo_n "checking for LIBS needed for pthreads... " >&6; } +if ${sphinx_cv_pthreads_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + + save_libs=$LIBS + for lib in -lpthread -lpthreads -lc_r; do + LIBS="$save_libs $lib" + +if test x$cross_compiling = xno ; then + if test "$cross_compiling" = yes; then : + pthreads_try_run=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + pthreads_try_run=yes +else + pthreads_try_run=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + if test x$pthreads_try_run = xyes ; then + + sphinx_cv_pthreads_libs=$lib + break + + fi +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$pthread_prog +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + pthreads_try_link=yes +else + pthreads_try_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test x$pthreads_try_link = xyes ; then + + sphinx_cv_pthreads_libs=$lib + break + + fi +fi + + done + LIBS=$save_libs + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_pthreads_libs" >&5 +$as_echo "$sphinx_cv_pthreads_libs" >&6; } + +if test -n "$sphinx_cv_pthreads_libs"; then + have_pthreads=yes + LIBS="$LIBS $sphinx_cv_pthreads_libs" +fi + +# final check +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthreads" >&5 +$as_echo_n "checking for pthreads... " >&6; } +if test x$have_pthreads = xyes; then + if test x$cross_compiling = xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: assumed as found (cross-compiling)" >&5 +$as_echo "assumed as found (cross-compiling)" >&6; } + fi +else + as_fn_error $? "no working pthreads library found" "$LINENO" 5 +fi + +for ac_func in pthread_mutex_timedlock +do : + ac_fn_c_check_func "$LINENO" "pthread_mutex_timedlock" "ac_cv_func_pthread_mutex_timedlock" +if test "x$ac_cv_func_pthread_mutex_timedlock" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_PTHREAD_MUTEX_TIMEDLOCK 1 +_ACEOF + +fi +done + + + +# check if we should compile with MySQL support + +# Check whether --with-mysql was given. +if test "${with_mysql+set}" = set; then : + withval=$with_mysql; ac_cv_use_mysql=$withval +else + ac_cv_use_mysql=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with MySQL support" >&5 +$as_echo_n "checking whether to compile with MySQL support... " >&6; } +if test x$ac_cv_use_mysql != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +mysqlconfig_locations="mysql_config /usr/bin/mysql_config /usr/local/bin/mysql_config /usr/local/mysql/bin/mysql_config /opt/mysql/bin/mysql_config /usr/pkg/bin/mysql_config" +user_mysql_includes= +user_mysql_libs= + +# check explicit MySQL root for mysql_config, include, lib +if test x$ac_cv_use_mysql != xyes -a x$ac_cv_use_mysql != xno +then + mysqlroot=`echo $ac_cv_use_mysql | sed -e 's+/$++'` + if test -x "$mysqlroot/bin/mysql_config" + then + # if there's mysql_config, that's the best route + mysqlconfig_locations="$mysqlroot/bin/mysql_config" + elif test -d "$mysqlroot/include" -a -d "$mysqlroot/lib" + then + # explicit root; do not check well-known paths + mysqlconfig_locations= + + # includes + if test -d "$mysqlroot/include/mysql" + then + user_mysql_includes="$mysqlroot/include/mysql" + else + user_mysql_includes="$mysqlroot/include" + fi + + # libs + if test -d "$mysqlroot/lib/mysql" + then + user_mysql_libs="$mysqlroot/lib/mysql" + else + user_mysql_libs="$mysqlroot/lib" + fi + else + as_fn_error $? "invalid MySQL root directory '$mysqlroot'; neither bin/mysql_config, nor include/ and lib/ were found there" "$LINENO" 5 + fi +fi + + +# try running mysql_config +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_config" >&5 +$as_echo_n "checking for mysql_config... " >&6; } +for mysqlconfig in $mysqlconfig_locations +do + if test -n "$mysqlconfig" + then + MYSQL_CFLAGS=`${mysqlconfig} --cflags 2>/dev/null` + MYSQL_LIBS=`${mysqlconfig} --libs 2>/dev/null` + + if test $? -eq 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mysqlconfig" >&5 +$as_echo "$mysqlconfig" >&6; } + mysqlconfig= + break + else + MYSQL_CFLAGS= + MYSQL_LIBS= + fi + fi +done +if test -n "$mysqlconfig" +then + mysqlconfig_used= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +else + mysqlconfig_used=yes +fi + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MYSQL_CFLAGS" +then + for CANDIDATE in "$user_mysql_includes" "/usr/local/mysql/include" "/usr/local/mysql/include/mysql" \ + "/usr/include/mysql" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/mysql.h" + then + MYSQL_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MYSQL_LIBS" +then + for CANDIDATE in "$user_mysql_libs" "/usr/lib64/mysql" \ + "/usr/local/mysql/lib/mysql" "/usr/local/mysql/lib" \ + "/usr/local/lib/mysql" "/usr/lib/mysql" \ + "/opt/mysql/lib/mysql" "/usr/pkg/lib/mysql" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MYSQL_LIBS="-L$CANDIDATE -lmysqlclient -lz" + break + fi + done +fi + + +# apply explicit include path overrides + +# Check whether --with-mysql-includes was given. +if test "${with_mysql_includes+set}" = set; then : + withval=$with_mysql_includes; ac_cv_mysql_includes=$withval +fi + +if test -n "$ac_cv_mysql_includes" +then + MYSQL_CFLAGS="-I$ac_cv_mysql_includes" +fi + + +# apply explicit lib path overrides + +# Check whether --with-mysql-libs was given. +if test "${with_mysql_libs+set}" = set; then : + withval=$with_mysql_libs; ac_cv_mysql_libs=$withval +fi + +if test -n "$ac_cv_mysql_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mysql_libs=`echo ${ac_cv_mysql_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MYSQL_LIBS="-L$ac_cv_mysql_libs -lmysqlclient -lz" +fi + +# if we got options from mysqlconfig try to actually use them +if test -n "$mysqlconfig_used" -a -n "$MYSQL_CFLAGS" -a -n "$MYSQL_LIBS" +then + _CFLAGS=$CFLAGS + _LIBS=$LIBS + + CFLAGS="$CFLAGS $MYSQL_CFLAGS" + LIBS="$LIBS $MYSQL_LIBS" + + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # if mysql binary was built using a different compiler and we + # got options from mysql_config some of them might not work + # with compiler we will be using + + # throw away everything that isn't one of -D -L -I -l and retry + MYSQL_CFLAGS=`echo $MYSQL_CFLAGS | sed -e 's/-[^DLIl][^ ]*//g'` + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/-[^DLIl][^ ]*//g'` + + CFLAGS="$_CFLAGS $MYSQL_CFLAGS" + LIBS="$_LIBS $MYSQL_LIBS" + + unset ac_cv_func_mysql_real_connect + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # ... that didn't help + # clear flags, the code below will complain + MYSQL_CFLAGS= + MYSQL_LIBS= + +fi + + +fi + + CFLAGS=$_CFLAGS + LIBS=$_LIBS +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL include files" >&5 +$as_echo_n "checking MySQL include files... " >&6; } +if test -z "$MYSQL_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find MySQL include files. + +Check that you do have MySQL include files installed. +The package name is typically 'mysql-devel'. + +If include files are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify includes location explicitly, using --with-mysql-includes; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CFLAGS" >&5 +$as_echo "$MYSQL_CFLAGS" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL libraries" >&5 +$as_echo_n "checking MySQL libraries... " >&6; } +if test -z "$MYSQL_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find MySQL libraries. + +Check that you do have MySQL libraries installed. +The package name is typically 'mysql-devel'. + +If libraries are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify libraries location explicitly, using --with-mysql-libs; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_LIBS" >&5 +$as_echo "$MYSQL_LIBS" >&6; } +fi + + + + +$as_echo "#define USE_MYSQL 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_mysql != xno; then + USE_MYSQL_TRUE= + USE_MYSQL_FALSE='#' +else + USE_MYSQL_TRUE='#' + USE_MYSQL_FALSE= +fi + + +# check if we should statically link the mysql library + +# Check whether --with-static-mysql was given. +if test "${with_static_mysql+set}" = set; then : + withval=$with_static_mysql; ac_cv_use_static_mysql=$withval +else + ac_cv_use_static_mysql=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to link statically with MySQL support" >&5 +$as_echo_n "checking whether to link statically with MySQL support... " >&6; } +if test x$ac_cv_use_mysql != xno; then +if test x$ac_cv_use_static_mysql != xno; then + + +mysqlconfig_locations="mysql_config /usr/bin/mysql_config /usr/local/bin/mysql_config /usr/local/mysql/bin/mysql_config /opt/mysql/bin/mysql_config /usr/pkg/bin/mysql_config" +user_mysql_includes= +user_mysql_libs= + +# check explicit MySQL root for mysql_config, include, lib +if test x$ac_cv_use_static_mysql != xyes -a x$ac_cv_use_static_mysql != xno +then + mysqlroot=`echo $ac_cv_use_static_mysql | sed -e 's+/$++'` + if test -x "$mysqlroot/bin/mysql_config" + then + # if there's mysql_config, that's the best route + mysqlconfig_locations="$mysqlroot/bin/mysql_config" + elif test -d "$mysqlroot/include" -a -d "$mysqlroot/lib" + then + # explicit root; do not check well-known paths + mysqlconfig_locations= + + # includes + if test -d "$mysqlroot/include/mysql" + then + user_mysql_includes="$mysqlroot/include/mysql" + else + user_mysql_includes="$mysqlroot/include" + fi + + # libs + if test -d "$mysqlroot/lib/mysql" + then + user_mysql_libs="$mysqlroot/lib/mysql" + else + user_mysql_libs="$mysqlroot/lib" + fi + else + as_fn_error $? "invalid MySQL root directory '$mysqlroot'; neither bin/mysql_config, nor include/ and lib/ were found there" "$LINENO" 5 + fi +fi + + +# try running mysql_config +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mysql_config" >&5 +$as_echo_n "checking for mysql_config... " >&6; } +for mysqlconfig in $mysqlconfig_locations +do + if test -n "$mysqlconfig" + then + MYSQL_CFLAGS=`${mysqlconfig} --cflags 2>/dev/null` + MYSQL_LIBS=`${mysqlconfig} --libs 2>/dev/null` + + if test $? -eq 0 + then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mysqlconfig" >&5 +$as_echo "$mysqlconfig" >&6; } + mysqlconfig= + break + else + MYSQL_CFLAGS= + MYSQL_LIBS= + fi + fi +done +if test -n "$mysqlconfig" +then + mysqlconfig_used= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +else + mysqlconfig_used=yes +fi + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MYSQL_CFLAGS" +then + for CANDIDATE in "$user_mysql_includes" "/usr/local/mysql/include" "/usr/local/mysql/include/mysql" \ + "/usr/include/mysql" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/mysql.h" + then + MYSQL_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MYSQL_LIBS" +then + for CANDIDATE in "$user_mysql_libs" "/usr/lib64/mysql" \ + "/usr/local/mysql/lib/mysql" "/usr/local/mysql/lib" \ + "/usr/local/lib/mysql" "/usr/lib/mysql" \ + "/opt/mysql/lib/mysql" "/usr/pkg/lib/mysql" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MYSQL_LIBS="-L$CANDIDATE -lmysqlclient -lz" + break + fi + done +fi + + +# apply explicit include path overrides + +# Check whether --with-mysql-includes was given. +if test "${with_mysql_includes+set}" = set; then : + withval=$with_mysql_includes; ac_cv_mysql_includes=$withval +fi + +if test -n "$ac_cv_mysql_includes" +then + MYSQL_CFLAGS="-I$ac_cv_mysql_includes" +fi + + +# apply explicit lib path overrides + +# Check whether --with-mysql-libs was given. +if test "${with_mysql_libs+set}" = set; then : + withval=$with_mysql_libs; ac_cv_mysql_libs=$withval +fi + +if test -n "$ac_cv_mysql_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mysql_libs=`echo ${ac_cv_mysql_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MYSQL_LIBS="-L$ac_cv_mysql_libs -lmysqlclient -lz" +fi + +# if we got options from mysqlconfig try to actually use them +if test -n "$mysqlconfig_used" -a -n "$MYSQL_CFLAGS" -a -n "$MYSQL_LIBS" +then + _CFLAGS=$CFLAGS + _LIBS=$LIBS + + CFLAGS="$CFLAGS $MYSQL_CFLAGS" + LIBS="$LIBS $MYSQL_LIBS" + + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # if mysql binary was built using a different compiler and we + # got options from mysql_config some of them might not work + # with compiler we will be using + + # throw away everything that isn't one of -D -L -I -l and retry + MYSQL_CFLAGS=`echo $MYSQL_CFLAGS | sed -e 's/-[^DLIl][^ ]*//g'` + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/-[^DLIl][^ ]*//g'` + + CFLAGS="$_CFLAGS $MYSQL_CFLAGS" + LIBS="$_LIBS $MYSQL_LIBS" + + unset ac_cv_func_mysql_real_connect + ac_fn_c_check_func "$LINENO" "mysql_real_connect" "ac_cv_func_mysql_real_connect" +if test "x$ac_cv_func_mysql_real_connect" = xyes; then : + +else + + # ... that didn't help + # clear flags, the code below will complain + MYSQL_CFLAGS= + MYSQL_LIBS= + +fi + + +fi + + CFLAGS=$_CFLAGS + LIBS=$_LIBS +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL include files" >&5 +$as_echo_n "checking MySQL include files... " >&6; } +if test -z "$MYSQL_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find MySQL include files. + +Check that you do have MySQL include files installed. +The package name is typically 'mysql-devel'. + +If include files are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify includes location explicitly, using --with-mysql-includes; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_CFLAGS" >&5 +$as_echo "$MYSQL_CFLAGS" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking MySQL libraries" >&5 +$as_echo_n "checking MySQL libraries... " >&6; } +if test -z "$MYSQL_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find MySQL libraries. + +Check that you do have MySQL libraries installed. +The package name is typically 'mysql-devel'. + +If libraries are installed on your system, but you are still getting +this message, you should do one of the following: + +1) either specify libraries location explicitly, using --with-mysql-libs; +2) or specify MySQL installation root location explicitly, using --with-mysql; +3) or make sure that the path to 'mysql_config' program is listed in + your PATH environment variable. + +To disable MySQL support, use --without-mysql option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MYSQL_LIBS" >&5 +$as_echo "$MYSQL_LIBS" >&6; } +fi + + + + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/\-Bdynamic/\-Bstatic/g'` + MYSQL_LIBS="-Wl,-Bstatic $MYSQL_LIBS -Wl,-Bdynamic" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +fi + +# check if we should compile with PostgreSQL support + +# Check whether --with-pgsql was given. +if test "${with_pgsql+set}" = set; then : + withval=$with_pgsql; ac_cv_use_pgsql=$withval +else + ac_cv_use_pgsql=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with PostgreSQL support" >&5 +$as_echo_n "checking whether to compile with PostgreSQL support... " >&6; } +if test x$ac_cv_use_pgsql != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# Check for custom includes path +if test -z "$ac_cv_pgsql_includes" +then + +# Check whether --with-pgsql-includes was given. +if test "${with_pgsql_includes+set}" = set; then : + withval=$with_pgsql_includes; ac_cv_pgsql_includes=$withval +fi + +fi +if test -n "$ac_cv_pgsql_includes" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL includes" >&5 +$as_echo_n "checking PostgreSQL includes... " >&6; } +if ${ac_cv_pgsql_includes+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_pgsql_includes="" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pgsql_includes" >&5 +$as_echo "$ac_cv_pgsql_includes" >&6; } + PGSQL_CFLAGS="-I$ac_cv_pgsql_includes" +fi + +# Check for custom library path +if test -z "$ac_cv_pgsql_libs" +then + +# Check whether --with-pgsql-libs was given. +if test "${with_pgsql_libs+set}" = set; then : + withval=$with_pgsql_libs; ac_cv_pgsql_libs=$withval +fi + +fi +if test -n "$ac_cv_pgsql_libs" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL libraries" >&5 +$as_echo_n "checking PostgreSQL libraries... " >&6; } +if ${ac_cv_pgsql_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_pgsql_libs="" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_pgsql_libs" >&5 +$as_echo "$ac_cv_pgsql_libs" >&6; } + PGSQL_LIBS="-L$ac_cv_pgsql_libs -lpq" +fi + +# If some path is missing, try to autodetermine with pgsql_config +if test -z "$ac_cv_pgsql_includes" -o -z "$ac_cv_pgsql_libs" +then + if test -z "$pgconfig" + then + # Extract the first word of "pg_config", so it can be a program name with args. +set dummy pg_config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_pgconfig+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $pgconfig in + [\\/]* | ?:[\\/]*) + ac_cv_path_pgconfig="$pgconfig" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_path_pgconfig="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +pgconfig=$ac_cv_path_pgconfig +if test -n "$pgconfig"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgconfig" >&5 +$as_echo "$pgconfig" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + if test -z "$pgconfig" + then + as_fn_error $? "pg_config executable not found +******************************************************************************** +ERROR: cannot find PostgreSQL libraries. If you want to compile with PosgregSQL support, + you must either specify file locations explicitly using + --with-pgsql-includes and --with-pgsql-libs options, or make sure path to + pg_config is listed in your PATH environment variable. If you want to + disable PostgreSQL support, use --without-pgsql option. +******************************************************************************** +" "$LINENO" 5 + else + if test -z "$ac_cv_pgsql_includes" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL C flags" >&5 +$as_echo_n "checking PostgreSQL C flags... " >&6; } + PGSQL_CFLAGS="-I`${pgconfig} --includedir`" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_CFLAGS" >&5 +$as_echo "$PGSQL_CFLAGS" >&6; } + fi + if test -z "$ac_cv_pgsql_libs" + then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking PostgreSQL linker flags" >&5 +$as_echo_n "checking PostgreSQL linker flags... " >&6; } + PGSQL_LIBS="-L`${pgconfig} --libdir` -lpq" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PGSQL_LIBS" >&5 +$as_echo "$PGSQL_LIBS" >&6; } + fi + fi +fi + + +$as_echo "#define USE_PGSQL 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_pgsql != xno; then + USE_PGSQL_TRUE= + USE_PGSQL_FALSE='#' +else + USE_PGSQL_TRUE='#' + USE_PGSQL_FALSE= +fi + + +# check if we should complie with libmmseg (a mmseg Chinese Segmenter) support + +# Check whether --with-mmseg was given. +if test "${with_mmseg+set}" = set; then : + withval=$with_mmseg; ac_cv_use_mmseg=$withval +else + ac_cv_use_mmseg=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with libmmseg support" >&5 +$as_echo_n "checking whether to compile with libmmseg support... " >&6; } +if test x$ac_cv_use_mmseg != xno; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + +# if there's nothing from mysql_config, check well-known include paths +# explicit overrides will be applied later +if test -z "$MMSEG_CFLAGS" +then + for CANDIDATE in "$user_mmseg_includes" "/usr/local/include/mmseg" "/usr/include/mmseg" + do + if test -n "$CANDIDATE" -a -r "$CANDIDATE/Segmenter.h" + then + MMSEG_CFLAGS="-I$CANDIDATE" + break + fi + done +fi + + +# if there's nothing from mysql_config, check well-known library paths +# explicit overrides will be applied later +if test -z "$MMSEG_LIBS" +then + for CANDIDATE in "$user_mmseg_libs" "/usr/lib64" \ + "/usr/local/lib" "/usr/local/mmseg/lib" \ + "/usr/local/lib/mmseg" "/usr/lib" \ + "/opt/mmseg/lib" + do + if test -n "$CANDIDATE" -a -d "$CANDIDATE" + then + MMSEG_LIBS="-L$CANDIDATE -lmmseg" + break + fi + done +fi + + + +# apply explicit include path overrides + +# Check whether --with-mmseg-includes was given. +if test "${with_mmseg_includes+set}" = set; then : + withval=$with_mmseg_includes; ac_cv_mmseg_includes=$withval +fi + +if test -n "$ac_cv_mmseg_includes" +then + MMSEG_CFLAGS="-I$ac_cv_mmseg_includes" +fi + + +# apply explicit lib path overrides + +# Check whether --with-mmseg-libs was given. +if test "${with_mmseg_libs+set}" = set; then : + withval=$with_mmseg_libs; ac_cv_mmseg_libs=$withval +fi + +if test -n "$ac_cv_mmseg_libs" +then + # Trim trailing '.libs' if user passed it in --with-mysql-libs option + ac_cv_mmseg_libs=`echo ${ac_cv_mmseg_libs} | sed -e 's/.libs$//' \ + -e 's+.libs/$++'` + MMSEG_LIBS="-L$ac_cv_mmseg_libs -lmmseg" +fi + +# now that we did all we could, perform final checks +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking libmmseg include files" >&5 +$as_echo_n "checking libmmseg include files... " >&6; } +if test -z "$MMSEG_CFLAGS" +then + as_fn_error $? "missing include files. + +****************************************************************************** +ERROR: cannot find libmmseg include files. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MMSEG_CFLAGS" >&5 +$as_echo "$MMSEG_CFLAGS" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking libmmseg libraries" >&5 +$as_echo_n "checking libmmseg libraries... " >&6; } +if test -z "$MMSEG_LIBS" +then + as_fn_error $? "missing libraries. + +****************************************************************************** +ERROR: cannot find libmmseg libraries. + +To disable libmmseg support, use --without-mmseg option. +****************************************************************************** +" "$LINENO" 5 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MMSEG_LIBS" >&5 +$as_echo "$MMSEG_LIBS" >&6; } +fi + + + +$as_echo "#define USE_MMSEG 1" >>confdefs.h + + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test x$ac_cv_use_mmseg != xno; then + USE_MMSEG_TRUE= + USE_MMSEG_FALSE='#' +else + USE_MMSEG_TRUE='#' + USE_MMSEG_FALSE= +fi + + +# add macports include directory +if (echo $MYSQL_LIBS | grep -q -- -L/opt/local/lib); then + MYSQL_CFLAGS="$MYSQL_CFLAGS -I/opt/local/include" +fi + +# we can now set preprocessor flags for both C and C++ compilers +CPPFLAGS="$CPPFLAGS $MYSQL_CFLAGS $PGSQL_CFLAGS $MMSEG_CFLAGS" + + if test x"$USE_PYTHON" = xDO; then + USE_PYTHON_TRUE= + USE_PYTHON_FALSE='#' +else + USE_PYTHON_TRUE='#' + USE_PYTHON_FALSE= +fi + +CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" +LIBS="$LIBS $PYTHON_LIBS" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use 64-bit document/word IDs" >&5 +$as_echo_n "checking whether to use 64-bit document/word IDs... " >&6; } +sph_enable_id64=no +# Check whether --enable-id64 was given. +if test "${enable_id64+set}" = set; then : + enableval=$enable_id64; sph_enable_id64=$enableval +fi + +if test x$sph_enable_id64 != xno; then + +$as_echo "#define USE_64BIT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + +$as_echo "#define USE_64BIT 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +# Check whether --with-libstemmer was given. +if test "${with_libstemmer+set}" = set; then : + withval=$with_libstemmer; ac_cv_use_libstemmer=$withval +else + ac_cv_use_libstemmer=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to compile with libstemmer support" >&5 +$as_echo_n "checking whether to compile with libstemmer support... " >&6; } +if test x$ac_cv_use_libstemmer != xno; then + if test -d libstemmer_c && test -f libstemmer_c/include/libstemmer.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define USE_LIBSTEMMER 1" >>confdefs.h + + else + as_fn_error $? "missing libstemmer sources from libstemmer_c. + +Please download the C version of libstemmer library from +http://snowball.tartarus.org/ and extract its sources over libstemmer_c/ +subdirectory in order to build Sphinx with libstemmer support. +" "$LINENO" 5 + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define USE_LIBSTEMMER 0" >>confdefs.h + +fi + if test x$ac_cv_use_libstemmer != xno; then + USE_LIBSTEMMER_TRUE= + USE_LIBSTEMMER_FALSE='#' +else + USE_LIBSTEMMER_TRUE='#' + USE_LIBSTEMMER_FALSE= +fi + + + +got_expat=0 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libexpat" >&5 +$as_echo_n "checking for libexpat... " >&6; } +if test $have_expat_h = yes -a $have_libexpat = yes ; then + +$as_echo "#define USE_LIBEXPAT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + got_expat=1 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlpipe2 will NOT be available" >&5 +$as_echo "$as_me: WARNING: xmlpipe2 will NOT be available" >&2;} +fi + + + +# Check whether --with-iconv was given. +if test "${with_iconv+set}" = set; then : + withval=$with_iconv; ac_cv_use_iconv=$withval +else + ac_cv_use_iconv=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiconv" >&5 +$as_echo_n "checking for libiconv... " >&6; } +if test $have_iconv_h = yes \ + -a $have_libiconv = yes \ + -a $got_expat -eq 1 \ + -a $ac_cv_use_iconv != no ; \ +then + +$as_echo "#define USE_LIBICONV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv() arg types" >&5 +$as_echo_n "checking for iconv() arg types... " >&6; } + 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ +const char * inbuf; + iconv_t cd; + iconv ( cd, &inbuf, NULL, NULL, NULL ); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + iconv_inbuf_const=yes +else + iconv_inbuf_const=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 + + if test $iconv_inbuf_const = yes ; then + +$as_echo "#define ICONV_INBUF_CONST 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: const char **" >&5 +$as_echo "const char **" >&6; } + else + +$as_echo "#define ICONV_INBUF_CONST 0" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: char **" >&5 +$as_echo "char **" >&6; } + fi +else + if test $got_expat -eq 1 ; then + if test $ac_cv_use_iconv = no ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: xmlpipe2 will only support default encodings (latin-1, utf-8)" >&5 +$as_echo "$as_me: WARNING: xmlpipe2 will only support default encodings (latin-1, utf-8)" >&2;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not required" >&5 +$as_echo "not required" >&6; } + fi +fi + + +if test $have_zlib_h = yes -a $have_lz = yes ; then + +$as_echo "#define USE_ZLIB 1" >>confdefs.h + +fi + + + +# Check whether --with-unixodbc was given. +if test "${with_unixodbc+set}" = set; then : + withval=$with_unixodbc; ac_cv_use_unixodbc=$withval +else + ac_cv_use_unixodbc=yes + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UnixODBC" >&5 +$as_echo_n "checking for UnixODBC... " >&6; } +if test $ac_cv_use_unixodbc != no ; then + if test $have_sql_h = yes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing SQLConnect" >&5 +$as_echo_n "checking for library containing SQLConnect... " >&6; } +if ${ac_cv_search_SQLConnect+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char SQLConnect (); +int +main () +{ +return SQLConnect (); + ; + return 0; +} +_ACEOF +for ac_lib in '' odbc iodbc; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_SQLConnect=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_SQLConnect+:} false; then : + break +fi +done +if ${ac_cv_search_SQLConnect+:} false; then : + +else + ac_cv_search_SQLConnect=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_SQLConnect" >&5 +$as_echo "$ac_cv_search_SQLConnect" >&6; } +ac_res=$ac_cv_search_SQLConnect +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + have_libodbc=yes +else + have_libodbc=no +fi + + if test $have_libodbc = yes ; then + +$as_echo "#define USE_ODBC 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ODBC source support will NOT be available" >&5 +$as_echo "$as_me: WARNING: ODBC source support will NOT be available" >&2;} + fi + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi + + + + +# Check whether --with-syslog was given. +if test "${with_syslog+set}" = set; then : + withval=$with_syslog; ac_cv_use_syslog=$withval +else + ac_cv_use_syslog=no + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Syslog" >&5 +$as_echo_n "checking for Syslog... " >&6; } +if test $ac_cv_use_syslog != no ; then + if test $have_syslog_h = yes ; then + +$as_echo "#define USE_SYSLOG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: disabled" >&5 +$as_echo "disabled" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unaligned RAM access" >&5 +$as_echo_n "checking for unaligned RAM access... " >&6; } +if ${sphinx_cv_unaligned_ram_access+:} false; then : + $as_echo_n "(cached) " >&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 + +if test "$cross_compiling" = yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown (cross-compiling), assume no" >&5 +$as_echo "unknown (cross-compiling), assume no" >&6; } + sphinx_cv_unaligned_ram_access=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include + #include +int +main () +{ +char * sBuf = new char [ 8*sizeof(int) ]; + for ( int i=0; i<8*sizeof(int); i++ ) + sBuf[i] = i; + + // check for crashes (SPARC) + volatile int iRes = 0; + for ( int i=0; i<(int)sizeof(int); i++ ) + { + int * pPtr = (int*)( sBuf+i ); + iRes += *pPtr; + } + + // check for correct values (ARM) + iRes = *(int*)( sBuf+1 ); + if (!( iRes==0x01020304 || iRes==0x04030201 )) + return 1; + // all seems ok + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + sphinx_cv_unaligned_ram_access=yes +else + sphinx_cv_unaligned_ram_access=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_cv_unaligned_ram_access" >&5 +$as_echo "$sphinx_cv_unaligned_ram_access" >&6; } + +if test x$sphinx_cv_unaligned_ram_access = xyes ; then + +$as_echo "#define UNALIGNED_RAM_ACCESS 1" >>confdefs.h + +else + $as_echo "#define UNALIGNED_RAM_ACCESS 0" >>confdefs.h + +fi + +# check endianness + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + +$as_echo "#define USE_LITTLE_ENDIAN 0" >>confdefs.h +;; #( + no) + +$as_echo "#define USE_LITTLE_ENDIAN 1" >>confdefs.h + ;; #( + universal) + as_fn_error $? "universial endianess not supported" "$LINENO" 5 + + ;; #( + *) + as_fn_error $? "unknown endianess not supported" "$LINENO" 5 ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: generating configuration files" >&5 +$as_echo "generating configuration files" >&6; } + TMP=`echo generating configuration files | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +if test "$prefix" = "NONE"; then + my_op_prefix="/var" +else + my_op_prefix="$localstatedir" +fi + + +CONFDIR=`eval echo "${my_op_prefix}"` + + +ac_config_files="$ac_config_files Makefile src/Makefile libstemmer_c/Makefile doc/Makefile sphinx.conf.dist:sphinx.conf.in sphinx-min.conf.dist:sphinx-min.conf.in" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+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 + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_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= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_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. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_MYSQL_TRUE}" && test -z "${USE_MYSQL_FALSE}"; then + as_fn_error $? "conditional \"USE_MYSQL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PGSQL_TRUE}" && test -z "${USE_PGSQL_FALSE}"; then + as_fn_error $? "conditional \"USE_PGSQL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_MMSEG_TRUE}" && test -z "${USE_MMSEG_FALSE}"; then + as_fn_error $? "conditional \"USE_MMSEG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then + as_fn_error $? "conditional \"USE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_LIBSTEMMER_TRUE}" && test -z "${USE_LIBSTEMMER_FALSE}"; then + as_fn_error $? "conditional \"USE_LIBSTEMMER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by sphinx $as_me 1.11, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +sphinx config.status 1.11 +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config/config.h") CONFIG_HEADERS="$CONFIG_HEADERS config/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "libstemmer_c/Makefile") CONFIG_FILES="$CONFIG_FILES libstemmer_c/Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "sphinx.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx.conf.dist:sphinx.conf.in" ;; + "sphinx-min.conf.dist") CONFIG_FILES="$CONFIG_FILES sphinx-min.conf.dist:sphinx-min.conf.in" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: configuration done" >&5 +$as_echo "configuration done" >&6; } + TMP=`echo configuration done | sed -e sX.X-Xg` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TMP" >&5 +$as_echo "$TMP" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 +$as_echo "" >&6; } + + +echo "You can now run 'make install' to build and install Sphinx binaries." +echo "On a multi-core machine, try 'make -j4 install' to speed up the build." +echo +echo "Updates, articles, help forum, and commercial support, consulting, training," +echo "and development services are available at http://sphinxsearch.com/" +echo +echo "Thank you for choosing Sphinx!" +echo diff --git a/coreseek/csft-4.1/configure.ac b/coreseek/csft-4.1/configure.ac new file mode 100755 index 0000000..9ecada6 --- /dev/null +++ b/coreseek/csft-4.1/configure.ac @@ -0,0 +1,568 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) +AC_INIT([sphinx], [1.11], [shodan(at)shodan.ru]) + +m4_include([python.m4]) + +dnl -------------------------------------------------------------------------- + +SPHINX_CONFIGURE_PART([checking build environment]) + +AC_CONFIG_AUX_DIR([config]) +AM_INIT_AUTOMAKE([-Wall -Werror foreign]) +AM_MAINTAINER_MODE +AM_PATH_PYTHON +AC_CONFIG_SRCDIR([src/searchd.cpp]) +AC_CONFIG_HEADER([config/config.h]) + +# hack to locate expat/iconv in /usr/local on BSD systems +CPPFLAGS="$CPPFLAGS -I/usr/local/include" +LIBS="$LIBS -L/usr/local/lib" + +dnl -------------------------------------------------------------------------- + +SPHINX_CONFIGURE_PART([checking for compiler programs]) + +AC_ARG_WITH([debug], + AC_HELP_STRING([--with-debug], [compile slower debug version (default is disabled)]), + [ac_cv_use_debug=$withval], [ac_cv_use_debug=no] +) + +AC_MSG_CHECKING([whether to compile debug version]) +if test x$ac_cv_use_debug != xno; then + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64" + AC_MSG_RESULT([yes]) +else + SPHINX_CFLAGS="-Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG" + SPHINX_INJECT_FLAGS="-D_FILE_OFFSET_BITS=64 -DNDEBUG" + AC_MSG_RESULT([no]) +fi + +dnl set flags for C compiler if there are no user overrides +dnl inject required defines if there are +if test x$ac_env_CFLAGS_set != xset; then + CFLAGS=$SPHINX_CFLAGS +else + CFLAGS="$CFLAGS $SPHINX_INJECT_FLAGS" +fi + +dnl set flags for C++ compiler if there are no user overrides +dnl inject required defines if there are +if test x$ac_env_CXXFLAGS_set != xset; then + CXXFLAGS=$SPHINX_CFLAGS +else + CXXFLAGS="$CXXFLAGS $SPHINX_INJECT_FLAGS" +fi + +AC_PROG_CC +AC_PROG_CXX +AC_PROG_RANLIB + +dnl Checks for embedded interpretors. +INN_ARG_PYTHON + +AC_COMPILE_IFELSE([ +#ifdef __GNUC__ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3) +void main() {} +#else +syntax error +#endif +#endif +], [], [AC_MSG_ERROR([Gcc version error. Minspec is 3.4])]) + +AC_DEFINE_UNQUOTED([COMPILER],"$CC `$CC -dumpversion`",[Define to be the name of the compiler.]) +AC_DEFINE_UNQUOTED([OS_UNAME],"`uname -a`",[Full name OS]) + +dnl -------------------------------------------------------------------------- + +SPHINX_CONFIGURE_PART([checking for header files]) + +# Checks for header files. +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS([fcntl.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/file.h sys/socket.h sys/time.h unistd.h pthread.h execinfo.h]) +AC_CHECK_HEADER(expat.h,[have_expat_h=yes],[have_expat_h=no]) +AC_CHECK_HEADER(iconv.h,[have_iconv_h=yes],[have_iconv_h=no]) +AC_CHECK_HEADER(zlib.h,[have_zlib_h=yes],[have_zlib_h=no]) +AC_CHECK_HEADER(sql.h,[have_sql_h=yes],[have_sql_h=no]) +AC_CHECK_HEADER(syslog.h,[have_syslog_h=yes],[have_syslog_h=no]) + +dnl -------------------------------------------------------------------------- + +SPHINX_CONFIGURE_PART([checking for types]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_HEADER_STDBOOL +AC_C_CONST +AC_C_INLINE +AC_TYPE_OFF_T +AC_TYPE_SIZE_T +AC_HEADER_TIME + +dnl -------------------------------------------------------------------------- + +SPHINX_CONFIGURE_PART([checking for library functions]) + +# Checks for library functions. +AC_FUNC_FORK +AC_FUNC_MALLOC +AC_FUNC_REALLOC +AC_FUNC_SELECT_ARGTYPES +AC_TYPE_SIGNAL +AC_FUNC_STAT +AC_FUNC_VPRINTF +AC_SEARCH_LIBS([setsockopt],[socket]) +AC_SEARCH_LIBS([gethostbyname],[nsl socket resolv]) +AC_SEARCH_LIBS([XML_Parse],[expat],[have_libexpat=yes],[have_libexpat=no]) +AC_SEARCH_LIBS([iconv],[iconv],[have_libiconv=yes],[have_libiconv=no]) +AC_SEARCH_LIBS([inflate],[z],[have_lz=yes],[have_lz=no]) +AC_SEARCH_LIBS([logf],[m]) +AC_CHECK_FUNCS([dup2 gethostbyname gettimeofday memmove memset select socket strcasecmp strchr strerror strncasecmp strstr strtol logf pread]) +AC_CHECK_FUNCS([backtrace backtrace_symbols]) + +# most systems require the program be linked with librt library to use +# the function clock_gettime +my_save_LIBS="$LIBS" +LIBS="" +AC_CHECK_LIB(rt,clock_gettime) + +LIBRT=$LIBS +LIBS="$my_save_LIBS" +AC_SUBST(LIBRT) + +LIBS="$LIBS $LIBRT" +AC_CHECK_FUNCS(clock_gettime) + +SPHINX_CHECK_DEFINE(LOCK_EX,sys/file.h) +SPHINX_CHECK_DEFINE(F_SETLKW,fcntl.h) + +# check for dlopen +# FIXME! technically, only needed in searchd +# but as UDF manager is curently in libsphinx, we link everything +AC_CHECK_LIB(dl,dlopen) +AC_CHECK_FUNCS(dlopen dlerror) + +dnl -------------------------------------------------------------------------- + +SPHINX_CONFIGURE_PART([configuring Sphinx]) + +dnl --- + +# check for pthreads + +dnl helper that runs a test program and checks for success +pthread_prog=" +#include +#include + +void * thread_routine ( void * data ) +{ + return data; +} + +int main () +{ + pthread_t thd; + pthread_mutexattr_t mattr; + pthread_once_t once_init = PTHREAD_ONCE_INIT; + int data = 1; + + pthread_mutexattr_init ( &mattr ); + return pthread_create ( &thd, NULL, thread_routine, &data ); +} +" + +AC_DEFUN([PTHREADS_TRY_RUNCOMPILE],[ +if test x$cross_compiling = xno ; then + AC_TRY_RUN($pthread_prog, [pthreads_try_run=yes], [pthreads_try_run=no], [pthreads_try_run=no]) + if test x$pthreads_try_run = xyes ; then + $1 + fi +else + AC_COMPILE_IFELSE($pthread_prog, [pthreads_try_compile=yes], [pthreads_try_compile=no], [pthreads_try_compile=no]) + if test x$pthreads_try_compile = xyes ; then + $1 + fi +fi +]) + + +AC_DEFUN([PTHREADS_TRY_RUNLINK],[ +if test x$cross_compiling = xno ; then + AC_TRY_RUN($pthread_prog, [pthreads_try_run=yes], [pthreads_try_run=no], [pthreads_try_run=no]) + if test x$pthreads_try_run = xyes ; then + $1 + fi +else + AC_LINK_IFELSE($pthread_prog, [pthreads_try_link=yes], [pthreads_try_link=no], [pthreads_try_link=no]) + if test x$pthreads_try_link = xyes ; then + $1 + fi +fi +]) + +# check for needed cflags +AC_CACHE_CHECK([for CFLAGS needed for pthreads], [sphinx_cv_pthreads_cflags], +[ + save_cflags=$CFLAGS + for flag in none -kthread -pthread -pthreads -mt -mthreads -Kthread -threads; do + CFLAGS=$save_cflags + test "x$flag" != "xnone" && CFLAGS="$CFLAGS $flag" + PTHREADS_TRY_RUNCOMPILE([ + sphinx_cv_pthreads_cflags="$flag" + break + ]) + done + CFLAGS=$save_cflags +]) + +if test -n "$sphinx_cv_pthreads_cflags"; then + have_pthreads=yes + if test "x$sphinx_cv_pthreads_cflags" != "xnone"; then + CPPFLAGS="$CPPFLAGS $sphinx_cv_pthreads_cflags" + fi +fi + +# check for needed libs +AC_CACHE_CHECK([for LIBS needed for pthreads], [sphinx_cv_pthreads_libs], [ + save_libs=$LIBS + for lib in -lpthread -lpthreads -lc_r; do + LIBS="$save_libs $lib" + PTHREADS_TRY_RUNLINK([ + sphinx_cv_pthreads_libs=$lib + break + ]) + done + LIBS=$save_libs +]) + +if test -n "$sphinx_cv_pthreads_libs"; then + have_pthreads=yes + LIBS="$LIBS $sphinx_cv_pthreads_libs" +fi + +# final check +AC_MSG_CHECKING([for pthreads]) +if test x$have_pthreads = xyes; then + if test x$cross_compiling = xno; then + AC_MSG_RESULT([found]) + else + AC_MSG_RESULT([assumed as found (cross-compiling)]) + fi +else + AC_MSG_ERROR([no working pthreads library found]) +fi + +AC_CHECK_FUNCS([pthread_mutex_timedlock]) + +dnl --- + +# check if we should compile with MySQL support +AC_ARG_WITH([mysql], + AC_HELP_STRING([--with-mysql], [compile with MySQL support (default is enabled)]), + [ac_cv_use_mysql=$withval], [ac_cv_use_mysql=yes] +) +AC_MSG_CHECKING([whether to compile with MySQL support]) +if test x$ac_cv_use_mysql != xno; then + AC_MSG_RESULT([yes]) + AC_CHECK_MYSQL([$ac_cv_use_mysql]) + AC_DEFINE(USE_MYSQL,1,[Define to 1 if you want to compile with MySQL support]) + AC_SUBST([MYSQL_LIBS]) + AC_SUBST([MYSQL_CFLAGS]) +else + AC_MSG_RESULT([no]) +fi +AM_CONDITIONAL(USE_MYSQL, test x$ac_cv_use_mysql != xno) + +# check if we should statically link the mysql library +AC_ARG_WITH([static-mysql], + AC_HELP_STRING([--with-static-mysql], [link statically with MySQL library (default is no)]), + [ac_cv_use_static_mysql=$withval], [ac_cv_use_static_mysql=no] +) +AC_MSG_CHECKING([whether to link statically with MySQL support]) +if test x$ac_cv_use_mysql != xno; then +if test x$ac_cv_use_static_mysql != xno; then + AC_CHECK_MYSQL([$ac_cv_use_static_mysql]) + MYSQL_LIBS=`echo $MYSQL_LIBS | sed -e 's/\-Bdynamic/\-Bstatic/g'` + MYSQL_LIBS="-Wl,-Bstatic $MYSQL_LIBS -Wl,-Bdynamic" + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi +fi + +# check if we should compile with PostgreSQL support +AC_ARG_WITH([pgsql], + AC_HELP_STRING([--with-pgsql], [compile with PostgreSQL support (default is disabled)]), + [ac_cv_use_pgsql=$withval], [ac_cv_use_pgsql=no] +) +AC_MSG_CHECKING([whether to compile with PostgreSQL support]) +if test x$ac_cv_use_pgsql != xno; then + AC_MSG_RESULT([yes]) + AC_CHECK_PGSQL([$ac_cv_use_pgsql]) + AC_DEFINE(USE_PGSQL,1,[Define to 1 if you want to compile with PostgreSQL support]) + AC_SUBST([PGSQL_LIBS]) + AC_SUBST([PGSQL_CFLAGS]) +else + AC_MSG_RESULT([no]) +fi +AM_CONDITIONAL(USE_PGSQL, test x$ac_cv_use_pgsql != xno) + +dnl --- +# check if we should complie with libmmseg (a mmseg Chinese Segmenter) support +AC_ARG_WITH([mmseg], + AC_HELP_STRING([--with-mmseg], [compile with libmmseg, a mmseg Chinese Segmenter support (default is enabled)]), + [ac_cv_use_mmseg=$withval], [ac_cv_use_mmseg=yes] +) +AC_MSG_CHECKING([whether to compile with libmmseg support]) +if test x$ac_cv_use_mmseg != xno; then + AC_MSG_RESULT([yes]) + AC_CHECK_MMSEG([$ac_cv_use_mmseg]) + AC_DEFINE(USE_MMSEG,1,[Define to 1 if you want to compile with libmmseg support]) + AC_SUBST([MMSEG_LIBS]) + AC_SUBST([MMSEG_CFLAGS]) +else + AC_MSG_RESULT([no]) +fi +AM_CONDITIONAL(USE_MMSEG, test x$ac_cv_use_mmseg != xno) + +# add macports include directory +if (echo $MYSQL_LIBS | grep -q -- -L/opt/local/lib); then + MYSQL_CFLAGS="$MYSQL_CFLAGS -I/opt/local/include" +fi + +# we can now set preprocessor flags for both C and C++ compilers +CPPFLAGS="$CPPFLAGS $MYSQL_CFLAGS $PGSQL_CFLAGS $MMSEG_CFLAGS" + +AM_CONDITIONAL(USE_PYTHON, test x"$USE_PYTHON" = xDO) +CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS" +LIBS="$LIBS $PYTHON_LIBS" + +dnl --- + +AC_MSG_CHECKING([whether to use 64-bit document/word IDs]) +sph_enable_id64=no +AC_ARG_ENABLE([id64], + [ --enable-id64 use 64-bit document and word IDs (default is no)], + [sph_enable_id64=$enableval]) +if test x$sph_enable_id64 != xno; then + AC_DEFINE(USE_64BIT, 1, [64-bit document and word IDs]) + AC_MSG_RESULT([yes]) +else + AC_DEFINE(USE_64BIT, 0, [64-bit document and word IDs]) + AC_MSG_RESULT([no]) +fi + +dnl --- + +AC_ARG_WITH([libstemmer], + AC_HELP_STRING([--with-libstemmer], [compile with libstemmer support (default is disabled)]), + [ac_cv_use_libstemmer=$withval], [ac_cv_use_libstemmer=no] +) + +AC_MSG_CHECKING([whether to compile with libstemmer support]) +if test x$ac_cv_use_libstemmer != xno; then + if test -d libstemmer_c && test -f libstemmer_c/include/libstemmer.h; then + AC_MSG_RESULT([yes]) + AC_DEFINE(USE_LIBSTEMMER, 1, [libstemmer support]) + else + AC_MSG_ERROR([missing libstemmer sources from libstemmer_c. + +Please download the C version of libstemmer library from +http://snowball.tartarus.org/ and extract its sources over libstemmer_c/ +subdirectory in order to build Sphinx with libstemmer support. +]) + fi +else + AC_MSG_RESULT([no]) + AC_DEFINE(USE_LIBSTEMMER, 0, [libstemmer support]) +fi +AM_CONDITIONAL(USE_LIBSTEMMER, test x$ac_cv_use_libstemmer != xno) + +dnl --- + +got_expat=0 +AC_MSG_CHECKING([for libexpat]) +if test [ $have_expat_h = yes -a $have_libexpat = yes ]; then + AC_DEFINE([USE_LIBEXPAT],1,[define to use expat XML library]) + AC_MSG_RESULT([found]) + got_expat=1 +else + AC_MSG_RESULT([not found]) + AC_MSG_WARN([xmlpipe2 will NOT be available]) +fi + +dnl --- + +AC_ARG_WITH([iconv], + AC_HELP_STRING([--with-iconv], [compile with iconv support (default is autodetect)]), + [ac_cv_use_iconv=$withval], [ac_cv_use_iconv=yes] +) +AC_MSG_CHECKING([for libiconv]) +if test [ $have_iconv_h = yes \ + -a $have_libiconv = yes \ + -a $got_expat -eq 1 \ + -a $ac_cv_use_iconv != no ]; \ +then + AC_DEFINE([USE_LIBICONV],1,[define to use iconv library]) + AC_MSG_RESULT([found]) + + AC_MSG_CHECKING([for iconv() arg types]) + AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + #include + #include ]], + [const char * inbuf; + iconv_t cd; + iconv ( cd, &inbuf, NULL, NULL, NULL ); + ])], + [iconv_inbuf_const=yes], + [iconv_inbuf_const=no]) + AC_LANG_POP([C++]) + if test [ $iconv_inbuf_const = yes ]; then + AC_DEFINE([ICONV_INBUF_CONST],1,[whether 2nd arg to iconv() is const ptr]) + AC_MSG_RESULT([const char **]) + else + AC_DEFINE([ICONV_INBUF_CONST],0,[whether 2nd arg to iconv() is const ptr]) + AC_MSG_RESULT([char **]) + fi +else + if test [ $got_expat -eq 1 ]; then + if test [ $ac_cv_use_iconv = no ]; then + AC_MSG_RESULT([disabled]) + else + AC_MSG_RESULT([not found]) + fi + AC_MSG_WARN([xmlpipe2 will only support default encodings (latin-1, utf-8)]) + else + AC_MSG_RESULT([not required]) + fi +fi + +dnl --- + +if test [ $have_zlib_h = yes -a $have_lz = yes ]; then + AC_DEFINE([USE_ZLIB],1,[define to use Zlib]) +fi + +dnl --- + +AC_ARG_WITH([unixodbc], + AC_HELP_STRING([--with-unixodbc], [compile with UnixODBC support (default is autodetect)]), + [ac_cv_use_unixodbc=$withval], [ac_cv_use_unixodbc=yes] +) +AC_MSG_CHECKING([for UnixODBC]) +if test [ $ac_cv_use_unixodbc != no ]; then + if test [ $have_sql_h = yes ]; then + AC_SEARCH_LIBS([SQLConnect],[odbc iodbc],[have_libodbc=yes],[have_libodbc=no]) + if test [ $have_libodbc = yes ]; then + AC_DEFINE([USE_ODBC],1,[define to use ODBC library]) + AC_MSG_RESULT([found]) + else + AC_MSG_RESULT([not found]) + AC_MSG_WARN([ODBC source support will NOT be available]) + fi + fi +else + AC_MSG_RESULT([disabled]) +fi + +dnl --- + + +AC_ARG_WITH([syslog], + AC_HELP_STRING([--with-syslog], [compile with possibility to use syslog for logging (default is no)]), + [ac_cv_use_syslog=$withval], [ac_cv_use_syslog=no] +) +AC_MSG_CHECKING([for Syslog]) +if test [ $ac_cv_use_syslog != no ]; then + if test [ $have_syslog_h = yes ]; then + AC_DEFINE([USE_SYSLOG],1,[define to use POSIX Syslog for logging]) + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi +else + AC_MSG_RESULT([disabled]) +fi + +dnl --- + +AC_CACHE_CHECK([for unaligned RAM access],[sphinx_cv_unaligned_ram_access],[ +AC_LANG_PUSH([C++]) +AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[ + #include + #include ]], + [[char * sBuf = new char [ 8*sizeof(int) ]; + for ( int i=0; i<8*sizeof(int); i++ ) + sBuf[i] = i; + + // check for crashes (SPARC) + volatile int iRes = 0; + for ( int i=0; i<(int)sizeof(int); i++ ) + { + int * pPtr = (int*)( sBuf+i ); + iRes += *pPtr; + } + + // check for correct values (ARM) + iRes = *(int*)( sBuf+1 ); + if (!( iRes==0x01020304 || iRes==0x04030201 )) + return 1; + // all seems ok + return 0;]])], + [sphinx_cv_unaligned_ram_access=yes], + [sphinx_cv_unaligned_ram_access=no], + [AC_MSG_RESULT([unknown (cross-compiling), assume no]) + sphinx_cv_unaligned_ram_access=no]) +]) + +if test x$sphinx_cv_unaligned_ram_access = xyes ; then + AC_DEFINE([UNALIGNED_RAM_ACCESS],1,[whether unaligned RAM access is possible]) +else + AC_DEFINE([UNALIGNED_RAM_ACCESS],0) +fi + +# check endianness +AC_C_BIGENDIAN( + AC_DEFINE(USE_LITTLE_ENDIAN, 0, [big-endian]), + AC_DEFINE(USE_LITTLE_ENDIAN, 1, [little-endian]), + AC_MSG_ERROR(unknown endianess not supported), + AC_MSG_ERROR(universial endianess not supported) +) + +dnl -------------------------------------------------------------------------- + +SPHINX_CONFIGURE_PART([generating configuration files]) + +if test "$prefix" = "NONE"; then + my_op_prefix="/var" +else + my_op_prefix="$localstatedir" +fi + + +CONFDIR=`eval echo "${my_op_prefix}"` +AC_SUBST(CONFDIR) + +AC_CONFIG_FILES([Makefile src/Makefile libstemmer_c/Makefile doc/Makefile sphinx.conf.dist:sphinx.conf.in \ + sphinx-min.conf.dist:sphinx-min.conf.in]) +AC_OUTPUT + +dnl -------------------------------------------------------------------------- + +SPHINX_CONFIGURE_PART([configuration done]) + +echo "You can now run 'make install' to build and install Sphinx binaries." +echo "On a multi-core machine, try 'make -j4 install' to speed up the build." +echo +echo "Updates, articles, help forum, and commercial support, consulting, training," +echo "and development services are available at http://sphinxsearch.com/" +echo +echo "Thank you for choosing Sphinx!" +echo diff --git a/coreseek/csft-4.1/contrib/README b/coreseek/csft-4.1/contrib/README new file mode 100755 index 0000000..c63081e --- /dev/null +++ b/coreseek/csft-4.1/contrib/README @@ -0,0 +1,19 @@ +User contributions +------------------- + +This directory contains user-contributed Sphinx stuff - +native API ports to different programming languages, useful +scripts, not-yet-official patches, etc. + +All materials within this directory are copyright their +respective authors, including (but not limited to): + + * Perl API is copyright (c) 2006, Len Kranendonk + http://www.ilance.nl/sphinx_perl_api + + * Ruby API is copyright (c) 2006, Dmytro Shteflyuk + http://kpumuk.info + +Many thanks to everyone who contributed! + +--eof-- diff --git a/coreseek/csft-4.1/contrib/scripts/cachecleanup.sh b/coreseek/csft-4.1/contrib/scripts/cachecleanup.sh new file mode 100755 index 0000000..4475063 --- /dev/null +++ b/coreseek/csft-4.1/contrib/scripts/cachecleanup.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# cache directory cleanup script example +# +# removes all old cached files with mtime older than index mtime +# +# there MUST be your ACTUAL index names and FULL PATHS to indexfiles + +indexnames=( test1 test2 ) +indexfiles=( /usr/local/sphinx/test1.spd /benchmarks/work/test/test2.spd ) +cachedir=/tmp/cache + +for element in $(seq 0 $((${#indexnames[@]} - 1))) +do + echo "processing index ${indexnames[$element]}" + find "$cachedir/${indexnames[$element]}" \( ! -newer "${indexfiles[$element]}" \) -type f -print0 | xargs -0 -r rm -f +done diff --git a/coreseek/csft-4.1/contrib/scripts/searchd b/coreseek/csft-4.1/contrib/scripts/searchd new file mode 100755 index 0000000..4658ff0 --- /dev/null +++ b/coreseek/csft-4.1/contrib/scripts/searchd @@ -0,0 +1,83 @@ +#!/bin/bash +# +# Init file for searchd +# +# chkconfig: 2345 55 25 +# +# description: searchd +# +# USE "chkconfig --add searchd" to configure Sphinx searchd service +# +# by Vladimir Fedorkov Mar 1, 2006, info@astellar.com +# public domain + +SUDO_USER=searchd + +BASE_PATH=/release/search +PID_FILE=$BASE_PATH/searchd.pid +CONFIG_FILE=$BASE_PATH/sphinx.conf + +EXEC_PATH=$BASE_PATH +LOG_PATH=$EXEC_PATH + +RETVAL=0 +prog="searchd" + +do_config() { + mkdir -p $EXEC_PATH + mkdir $EXEC_PATH/data + mkdir -p $LOG_PATH + chown -R $SUDO_USER $EXEC_PATH + chown -R $SUDO_USER $EXEC_PATH/$CONFIG_FILE + chown -R $SUDO_USER $LOG_PATH + + chmod 600 $EXEC_PATH/$CONFIG_FILE + chmod u+rwx $EXEC_PATH/* + chmod -R u+rw,go-rwx $EXEC_PATH/data + chmod -R u+rw,go-rwx $LOG_PATH +} + +do_start() { + echo "Starting $prog" + sudo -u $SUDO_USER $EXEC_PATH/$prog --config $CONFIG_FILE + RETVAL=$? + echo + return $RETVAL +} + +do_stop() { + echo "Stopping $prog" + if [ -e $PID_FILE ] ; then + kill -15 `cat $PID_FILE` + sleep 5 + if [ -e $PID_FILE ] ; then + kill -9 `cat $PID_FILE` + fi + fi + RETVAL=$? + echo + return $RETVAL +} + +case $* in + +config) + do_config + ;; + +start) + do_start + ;; + +stop) + do_stop + ;; + +*) + echo "usage: $0 {start|stop|config}" >&2 + + exit 1 + ;; +esac + +exit $RETVAL diff --git a/coreseek/csft-4.1/cs_test/t_cjk_mmseg/README b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/README new file mode 100755 index 0000000..fc14fc7 --- /dev/null +++ b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/README @@ -0,0 +1,18 @@ +测试中文分词法 +- 使用 xmlpipe2 测试 +- 测试事项 + = 普通分词 + = mmseg 的同义词 + = sphinx 的同义词 + = --rotate时,同时重新加载词库 + * 需要增加新接口,在mmseg上 + = 英文与符号的混合 + = 中文英文与符号的混合 + = 切分过程的调试输出 + +[ISSUE] + - 当 charset_debug = 1 并且 wordforms 有规则时,控制台无输出 + - 暂时不支持 --rotate 时,更新分词词库 + +[TIPS] + - 使用wordforms 可以将多个 token 混合在一起 diff --git a/coreseek/csft-4.1/cs_test/t_cjk_mmseg/csft.conf b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/csft.conf new file mode 100755 index 0000000..a28503c --- /dev/null +++ b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/csft.conf @@ -0,0 +1,98 @@ +# +# Minimal Sphinx configuration sample (clean, simple, functional) +# + +source src1 +{ + type = xmlpipe2 + xmlpipe_command = cat data.xml +} + + +index test_utf8 +{ + source = src1 + path = ./idx/test_utf8 + docinfo = extern + #charset_debug = 1 + charset_type = utf-8 +} + +index test_mmseg +{ + source = src1 + path = ./idx/test_mmseg + docinfo = extern + #charset_debug = 1 + charset_type = zh_cn.utf-8 + charset_dictpath = ./dict +} + +index test_mmseg_thesaurus +{ + source = src1 + path = ./idx/test_mmseg_thesaurus + docinfo = extern + #charset_debug = 1 + charset_type = zh_cn.utf-8 + charset_dictpath = ./dict_thesaurus +} + +index test_sym +{ + source = src1 + path = ./idx/test_mmseg + docinfo = extern + #charset_debug = 1 + charset_type = utf-8 + #charset_type = zh_cn.utf-8 + #charset_dictpath = ./dict + exceptions = ./dict/exceptions.txt +} + +index test_sym_cjk +{ + source = src1 + path = ./idx/test_sym_cjk + docinfo = extern + charset_debug = 1 + charset_type = zh_cn.utf-8 + charset_dictpath = ./dict + exceptions = ./dict/exceptions.txt + wordforms = ./dict/wordform.txt +} + + + +index test2 +{ + source = src1 + path = .\idx\test2 + docinfo = extern + + #charset_debug = 1 + #prefix_token_fields = message, + charset_type = utf-8 + #charset_type = zh_cn.utf-8 + #charset_dictpath = .\dict +} + +indexer +{ + mem_limit = 32M +} + + +searchd +{ + port = 9312 + log = @CONFDIR@/log/searchd.log + query_log = @CONFDIR@/log/query.log + read_timeout = 5 + max_children = 30 + pid_file = @CONFDIR@/log/searchd.pid + max_matches = 1000 + seamless_rotate = 1 + preopen_indexes = 0 + unlink_old = 1 +} diff --git a/coreseek/csft-4.1/cs_test/t_cjk_mmseg/data.xml b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/data.xml new file mode 100755 index 0000000..b6942ab --- /dev/null +++ b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/data.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + 1 + + + + + + + 2 + + + + + + + 2 + + + + + + + 2 + + + + + + + 2 + + + + diff --git a/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/exceptions.txt b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/exceptions.txt new file mode 100755 index 0000000..2644ffd --- /dev/null +++ b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/exceptions.txt @@ -0,0 +1,6 @@ +MS Windows => ms windows +Microsoft Windows => ms windows +C++ => cplusplus +c++ => cplusplus +C plus plus => cplusplus +test 中文 => 测试中文 diff --git a/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/uni.lib b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/uni.lib new file mode 100755 index 0000000..adc821a Binary files /dev/null and b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/uni.lib differ diff --git a/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/wordform.txt b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/wordform.txt new file mode 100755 index 0000000..7abe7ae --- /dev/null +++ b/coreseek/csft-4.1/cs_test/t_cjk_mmseg/dict/wordform.txt @@ -0,0 +1,2 @@ +ak 47 > ak47 +test 中文> fffff diff --git a/coreseek/csft-4.1/cs_test/t_pysource/csft.conf b/coreseek/csft-4.1/cs_test/t_pysource/csft.conf new file mode 100755 index 0000000..fba7f2d --- /dev/null +++ b/coreseek/csft-4.1/cs_test/t_pysource/csft.conf @@ -0,0 +1,54 @@ +# +# Minimal Sphinx configuration sample (clean, simple, functional) +# +python +{ + path = ./src + path = . +} + +source src1 +{ + type = python + name = dummy.MainSource + py_key1 = abc +} + +index test_pysource +{ + + source = src1 + path = ./idx/test1 + docinfo = extern + #charset_debug = 1 + #charset_dictpath = .\dict + + min_prefix_len = 2 + enable_star = 1 + prefix_fields = context + + charset_type = utf-8 + + html_strip=1 + index_sp = 1 +} + +indexer +{ + mem_limit = 32M +} + + +searchd +{ + listen = 3312 + #log = /var/log/searchd.log + #query_log = /var/log/query.log + read_timeout = 5 + max_children = 30 + pid_file = /searchd.pid + max_matches = 1000 + seamless_rotate = 1 + preopen_indexes = 0 + unlink_old = 1 +} diff --git a/coreseek/csft-4.1/cs_test/t_pysource/src/dummy/__init__.py b/coreseek/csft-4.1/cs_test/t_pysource/src/dummy/__init__.py new file mode 100755 index 0000000..2eb087c --- /dev/null +++ b/coreseek/csft-4.1/cs_test/t_pysource/src/dummy/__init__.py @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- + +g_cnt = 0 + +class MainSource(object): + def __init__(self, conf): + self.conf = conf + self.data = [ + {'id':1, 'Filename':'cm-05 test1', 'context':u'world c++ bbbb aaaaa zzzz hello world . zzzz Test phrase ', 'attr':1, 'tags':[2,4,5]}, + {'id':2, 'Filename':'test2', 'context':'c# asp.net hello .net', 'attr':1, 'tags':[1,2,3]}, + #{'id':3, 'Filename':'test2111', 'context':'world c# zzzz hello golf zzzz wwww', 'attr':3, 'tags':[5,6,7]}, + {'id':4, 'Filename':'test21112', 'context':'中文 分 词算 法 222 我是最好的.', 'attr':3, 'tags':[9,8]}, + #{'id':4, 'Filename':'test21112', 'context':'中文分词算法 222我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错. 今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错.我是最好的.今天天气不错. 测试结尾', 'attr':3, 'tags':[9,8]}, + ] + self.idx = 0 + self.join_idx = 0 + self.max_iter = 1 + self.docfield_gen = None + self.docmva = None + + def GetScheme(self): + return [ + ('id' , {'docid':True, } ), + ('filename', { 'type':'string'} ), #wordpart can be whole, infix, prefix + ('context', { 'type':'text'} ), + ('attr', {'type':'integer'} ), + ('tags', {'type':'list-query'} ), + ] + + def GetKillList(self): + return [3,1] + + def GetFieldOrder(self): + ''' + - can return a tuple + - if return two tuple, the first used as traditional field fetch -> attribute; + the second used as sql join like, can fetch context via GetDocField + ''' + #return [('Filename','context'),] + return [('context',) , ()] + #return [('Filename',), ('Filename', 'context'),] + #return [('Filename',), ('context',),] + + def _DocFieldGen(self, fieldname): + # 1 2 4 + #print self.join_idx , self.max_iter + while self.join_idx < 1: + yield {'Filename':(self.join_idx*10 + 1, 'hello world', 20), 'context':(self.join_idx*10 + 1, 'hello cccc')} + yield {'Filename':(self.join_idx*10 + 2, 'baal6tio12 gave rise to al o hole centres whereas no paramagnetic, centres corresponding to boron could be detected on b2o3 addition. Hello1 world.', 10), 'context':(self.join_idx*10 + 2, 'hello cccc world nz')} + yield {'Filename':(self.join_idx*10 + 4, 'test', 10), 'context':(self.join_idx*10 + 4, 'hello cccc world nz')} + self.join_idx += 1 + #yield (2, 'test', 10) + #yield (4, '123', 10) + + def GetDocField(self, fieldname, hitc): + ''' + return (docid, context_of_field, [ipos] ) + return {'fieldname':(docid, context_of_field, [ipos] )} #used to return multi-fields. eg. a single joined table with multi field. + ''' + #print hitc.getFieldName(),'--------------' + + if self.docfield_gen == None: + self.docfield_gen = self._DocFieldGen(fieldname) + try: + rs = self.docfield_gen.next() + #print '====', rs + return rs + except StopIteration, e: + print e + return None + pass + + def GetMVAValue(self, fieldname, hitc): + ''' + return (docid, value), return multi time for an attribute of a single document. + return {'fieldname':(docid, value)} #used to return multi-value. + ''' + if self.docmva == None: + self.docmva = 1 + return (1, 3) + if self.docmva == 1: + self.docmva = 2 + return (1, 4) + + def Connected(self): + pass + + def NextDocument(self, hitc): + hitc.pushWord('__2_1999', fieldindex = 0) + if self.idx < len(self.data): + item = self.data[self.idx] + self.id = item['id']+self.max_iter*4 + self.Filename = item['Filename'] + self.filename = item['Filename'] + self.context = item['context'] + self.attr = item['attr'] + self.tags = item['tags'] + self.idx += 1 + return True + else: + if self.max_iter: + self.max_iter -= 1 + self.idx = 0 + return self.NextDocument(hitc); + return False + + def BuildHits(self, hitc): + ''' + If you do NOT wanna to build hit by hand, must return false. + ''' + global g_cnt + hitc.pushWord("coreseek", fieldindex = 4) + #hitc.pushWord(None, 100, 10) + #return True + #print hitc.getFieldName() + return False + if "context" == hitc.getFieldName(): + ctx = self.context + toks = ctx.split() + hitc.pushWord(None, 100, 10) + for tok in toks: + g_cnt += 1 + print self.id, g_cnt, ctx + hitc.pushWord(tok) + if tok == "222": + hitc.pushWord("coreseek", fieldindex = 4) + pass + #print tok + return True + return False + #return False + #pass + diff --git a/coreseek/csft-4.1/doc/Makefile b/coreseek/csft-4.1/doc/Makefile new file mode 100644 index 0000000..7c683c0 --- /dev/null +++ b/coreseek/csft-4.1/doc/Makefile @@ -0,0 +1,453 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# doc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/sphinx +pkgincludedir = $(includedir)/sphinx +pkglibdir = $(libdir)/sphinx +pkglibexecdir = $(libexecdir)/sphinx +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +man1dir = $(mandir)/man1 +am__installdirs = "$(DESTDIR)$(man1dir)" +NROFF = nroff +MANS = $(man1_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run aclocal-1.11 +AMTAR = $${TAR-tar} +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run automake-1.11 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG +CONFDIR = /usr/local/coreseek/var +CPP = gcc -E +CPPFLAGS = -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ +CXX = g++ +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBOBJS = +LIBRT = -lrt +LIBS = -ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +MMSEG_CFLAGS = -I/usr/local/mmseg3/include/mmseg/ +MMSEG_LIBS = -L/usr/local/mmseg3/lib/ -lmmseg +MYSQL_CFLAGS = -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g +MYSQL_LIBS = -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl +OBJEXT = o +PACKAGE = sphinx +PACKAGE_BUGREPORT = shodan(at)shodan.ru +PACKAGE_NAME = sphinx +PACKAGE_STRING = sphinx 1.11 +PACKAGE_TARNAME = sphinx +PACKAGE_URL = +PACKAGE_VERSION = 1.11 +PATH_SEPARATOR = : +PGSQL_CFLAGS = +PGSQL_LIBS = +PYTHON = /usr/bin/python +PYTHON_CPPFLAGS = +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_LIBS = +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.7 +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/bash +STRIP = +VERSION = 1.11 +abs_builddir = /home/coreseek/coreseek-4.1-beta/csft-4.1/doc +abs_srcdir = /home/coreseek/coreseek-4.1-beta/csft-4.1/doc +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +ac_ct_CC = gcc +ac_ct_CXX = g++ +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build_alias = +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host_alias = +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pgconfig = +pkgpyexecdir = ${pyexecdir}/sphinx +pkgpythondir = ${pythondir}/sphinx +prefix = /usr/local/coreseek +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.7/site-packages +pythondir = ${prefix}/lib/python2.7/site-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +man1_MANS = searchd.1 search.1 indexer.1 indextool.1 spelldump.1 + +# apt-get install docbook-xsl +# apt-get install xsltproc +# +DOCBOOKXSL = /usr/share/xml/docbook/stylesheet/docbook-xsl +XSLTARGSMAN = $(DOCBOOKXSL)/manpages/docbook.xsl +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-man1: $(man1_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) +installdirs: + for dir in "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-man + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-man + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ + uninstall-am uninstall-man uninstall-man1 + + +all: + @echo "All docs are already pre-built by developer." + @echo "If you want to rebuild them, install docbook-xsl" + @echo "and xsltproc and then run 'make docs' instead of simple 'make'." + +docs: sphinx.html sphinx.txt my_manpages + +my_manpages: manpages.xml + xsltproc $(XSLTARGSMAN) manpages.xml + +sphinx.html: sphinx.xml + sed -r 's///g;s/<\/b>/<\/emphasis>/g;s/(fixed|bug) #([0-9]+)/\1 \#\2<\/ulink>/g' sphinx.xml \ + | xsltproc sphinx.xsl - \ + | sed -r 's/\xA0/\ /g;s/\xA9/\©/g;s/((<\/(li|dt|dt|head|div)>)+)/\1\n/g;s/<\/a>//g;s/<\/head>/\n diff --git a/coreseek/csft-4.1/doc/sphinx.html b/coreseek/csft-4.1/doc/sphinx.html new file mode 100755 index 0000000..6f48120 --- /dev/null +++ b/coreseek/csft-4.1/doc/sphinx.html @@ -0,0 +1,8418 @@ +Sphinx 2.0.1-beta reference manual + + +
+

Table of Contents

1. Introduction
+
1.1. About
+
1.2. Sphinx features
+
1.3. Where to get Sphinx
+
1.4. License
+
1.5. Credits
+
1.6. History
+
2. Installation
+
2.1. Supported systems
+
2.2. Required tools
+
2.3. Installing Sphinx on Linux
+
2.4. Installing Sphinx on Windows
+
2.5. Known installation issues
+
2.6. Quick Sphinx usage tour
+
3. Indexing
+
3.1. Data sources
+
3.2. Attributes
+
3.3. MVA (multi-valued attributes)
+
3.4. Indexes
+
3.5. Restrictions on the source data
+
3.6. Charsets, case folding, and translation tables
+
3.7. SQL data sources (MySQL, PostgreSQL)
+
3.8. xmlpipe data source
+
3.9. xmlpipe2 data source
+
3.10. Live index updates
+
3.11. Delta index updates
+
3.12. Index merging
+
4. Real-time indexes
+
4.1. RT indexes overview
+
4.2. Known caveats with RT indexes
+
4.3. RT index internals
+
4.4. Binary logging
+
5. Searching
+
5.1. Matching modes
+
5.2. Boolean query syntax
+
5.3. Extended query syntax
+
5.4. Weighting
+
5.5. Expressions, functions, and operators
+
5.5.1. Operators
+
5.5.2. Numeric functions
+
5.5.3. Date and time functions
+
5.5.4. Type conversion functions
+
5.5.5. Comparison functions
+
5.5.6. Miscellaneous functions
+
5.6. Sorting modes
+
5.7. Grouping (clustering) search results
+
5.8. Distributed searching
+
5.9. searchd query log formats
+
5.9.1. Plain log format
+
5.9.2. SphinxQL log format
+
5.10. MySQL protocol support and SphinxQL
+
5.11. Multi-queries
+
5.12. Collations
+
5.13. User-defined functions (UDF)
+
6. Command line tools reference
+
6.1. indexer command reference
+
6.2. searchd command reference
+
6.3. search command reference
+
6.4. spelldump command reference
+
6.5. indextool command reference
+
7. SphinxQL reference
+
7.1. SELECT syntax
+
7.2. SHOW META syntax
+
7.3. SHOW WARNINGS syntax
+
7.4. SHOW STATUS syntax
+
7.5. INSERT and REPLACE syntax
+
7.6. DELETE syntax
+
7.7. SET syntax
+
7.8. BEGIN, COMMIT, and ROLLBACK syntax
+
7.9. CALL SNIPPETS syntax
+
7.10. CALL KEYWORDS syntax
+
7.11. SHOW TABLES syntax
+
7.12. DESCRIBE syntax
+
7.13. CREATE FUNCTION syntax
+
7.14. DROP FUNCTION syntax
+
7.15. SHOW VARIABLES syntax
+
7.16. SHOW COLLATION syntax
+
7.17. UPDATE syntax
+
7.18. Multi-statement queries
+
7.19. Comment syntax
+
7.20. List of SphinxQL reserved keywords
+
7.21. SphinxQL upgrade notes, version 2.0.1-beta
+
8. API reference
+
8.1. General API functions
+
8.1.1. GetLastError
+
8.1.2. GetLastWarning
+
8.1.3. SetServer
+
8.1.4. SetRetries
+
8.1.5. SetConnectTimeout
+
8.1.6. SetArrayResult
+
8.1.7. IsConnectError
+
8.2. General query settings
+
8.2.1. SetLimits
+
8.2.2. SetMaxQueryTime
+
8.2.3. SetOverride
+
8.2.4. SetSelect
+
8.3. Full-text search query settings
+
8.3.1. SetMatchMode
+
8.3.2. SetRankingMode
+
8.3.3. SetSortMode
+
8.3.4. SetWeights
+
8.3.5. SetFieldWeights
+
8.3.6. SetIndexWeights
+
8.4. Result set filtering settings
+
8.4.1. SetIDRange
+
8.4.2. SetFilter
+
8.4.3. SetFilterRange
+
8.4.4. SetFilterFloatRange
+
8.4.5. SetGeoAnchor
+
8.5. GROUP BY settings
+
8.5.1. SetGroupBy
+
8.5.2. SetGroupDistinct
+
8.6. Querying
+
8.6.1. Query
+
8.6.2. AddQuery
+
8.6.3. RunQueries
+
8.6.4. ResetFilters
+
8.6.5. ResetGroupBy
+
8.7. Additional functionality
+
8.7.1. BuildExcerpts
+
8.7.2. UpdateAttributes
+
8.7.3. BuildKeywords
+
8.7.4. EscapeString
+
8.7.5. Status
+
8.7.6. FlushAttributes
+
8.8. Persistent connections
+
8.8.1. Open
+
8.8.2. Close
+
9. MySQL storage engine (SphinxSE)
+
9.1. SphinxSE overview
+
9.2. Installing SphinxSE
+
9.2.1. Compiling MySQL 5.0.x with SphinxSE
+
9.2.2. Compiling MySQL 5.1.x with SphinxSE
+
9.2.3. Checking SphinxSE installation
+
9.3. Using SphinxSE
+
9.4. Building snippets (excerpts) via MySQL
+
10. Reporting bugs
+
11. sphinx.conf options reference
+
11.1. Data source configuration options
+
11.1.1. type
+
11.1.2. sql_host
+
11.1.3. sql_port
+
11.1.4. sql_user
+
11.1.5. sql_pass
+
11.1.6. sql_db
+
11.1.7. sql_sock
+
11.1.8. mysql_connect_flags
+
11.1.9. mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca
+
11.1.10. odbc_dsn
+
11.1.11. sql_query_pre
+
11.1.12. sql_query
+
11.1.13. sql_joined_field
+
11.1.14. sql_query_range
+
11.1.15. sql_range_step
+
11.1.16. sql_query_killlist
+
11.1.17. sql_attr_uint
+
11.1.18. sql_attr_bool
+
11.1.19. sql_attr_bigint
+
11.1.20. sql_attr_timestamp
+
11.1.21. sql_attr_str2ordinal
+
11.1.22. sql_attr_float
+
11.1.23. sql_attr_multi
+
11.1.24. sql_attr_string
+
11.1.25. sql_attr_str2wordcount
+
11.1.26. sql_column_buffers
+
11.1.27. sql_field_string
+
11.1.28. sql_field_str2wordcount
+
11.1.29. sql_file_field
+
11.1.30. sql_query_post
+
11.1.31. sql_query_post_index
+
11.1.32. sql_ranged_throttle
+
11.1.33. sql_query_info
+
11.1.34. xmlpipe_command
+
11.1.35. xmlpipe_field
+
11.1.36. xmlpipe_field_string
+
11.1.37. xmlpipe_field_wordcount
+
11.1.38. xmlpipe_attr_uint
+
11.1.39. xmlpipe_attr_bool
+
11.1.40. xmlpipe_attr_timestamp
+
11.1.41. xmlpipe_attr_str2ordinal
+
11.1.42. xmlpipe_attr_float
+
11.1.43. xmlpipe_attr_multi
+
11.1.44. xmlpipe_attr_string
+
11.1.45. xmlpipe_fixup_utf8
+
11.1.46. mssql_winauth
+
11.1.47. mssql_unicode
+
11.1.48. unpack_zlib
+
11.1.49. unpack_mysqlcompress
+
11.1.50. unpack_mysqlcompress_maxsize
+
11.2. Index configuration options
+
11.2.1. type
+
11.2.2. source
+
11.2.3. path
+
11.2.4. docinfo
+
11.2.5. mlock
+
11.2.6. morphology
+
11.2.7. dict
+
11.2.8. index_sp
+
11.2.9. index_zones
+
11.2.10. min_stemming_len
+
11.2.11. stopwords
+
11.2.12. wordforms
+
11.2.13. exceptions
+
11.2.14. min_word_len
+
11.2.15. charset_type
+
11.2.16. charset_table
+
11.2.17. ignore_chars
+
11.2.18. min_prefix_len
+
11.2.19. min_infix_len
+
11.2.20. prefix_fields
+
11.2.21. infix_fields
+
11.2.22. enable_star
+
11.2.23. ngram_len
+
11.2.24. ngram_chars
+
11.2.25. phrase_boundary
+
11.2.26. phrase_boundary_step
+
11.2.27. html_strip
+
11.2.28. html_index_attrs
+
11.2.29. html_remove_elements
+
11.2.30. local
+
11.2.31. agent
+
11.2.32. agent_blackhole
+
11.2.33. agent_connect_timeout
+
11.2.34. agent_query_timeout
+
11.2.35. preopen
+
11.2.36. ondisk_dict
+
11.2.37. inplace_enable
+
11.2.38. inplace_hit_gap
+
11.2.39. inplace_docinfo_gap
+
11.2.40. inplace_reloc_factor
+
11.2.41. inplace_write_factor
+
11.2.42. index_exact_words
+
11.2.43. overshort_step
+
11.2.44. stopword_step
+
11.2.45. hitless_words
+
11.2.46. expand_keywords
+
11.2.47. blend_chars
+
11.2.48. blend_mode
+
11.2.49. rt_mem_limit
+
11.2.50. rt_field
+
11.2.51. rt_attr_uint
+
11.2.52. rt_attr_bigint
+
11.2.53. rt_attr_float
+
11.2.54. rt_attr_timestamp
+
11.2.55. rt_attr_string
+
11.3. indexer program configuration + options
+
11.3.1. mem_limit
+
11.3.2. max_iops
+
11.3.3. max_iosize
+
11.3.4. max_xmlpipe2_field
+
11.3.5. write_buffer
+
11.3.6. max_file_field_buffer
+
11.4. searchd program configuration + options
+
11.4.1. listen
+
11.4.2. address
+
11.4.3. port
+
11.4.4. log
+
11.4.5. query_log
+
11.4.6. query_log_format
+
11.4.7. read_timeout
+
11.4.8. client_timeout
+
11.4.9. max_children
+
11.4.10. pid_file
+
11.4.11. max_matches
+
11.4.12. seamless_rotate
+
11.4.13. preopen_indexes
+
11.4.14. unlink_old
+
11.4.15. attr_flush_period
+
11.4.16. ondisk_dict_default
+
11.4.17. max_packet_size
+
11.4.18. mva_updates_pool
+
11.4.19. crash_log_path
+
11.4.20. max_filters
+
11.4.21. max_filter_values
+
11.4.22. listen_backlog
+
11.4.23. read_buffer
+
11.4.24. read_unhinted
+
11.4.25. max_batch_queries
+
11.4.26. subtree_docs_cache
+
11.4.27. subtree_hits_cache
+
11.4.28. workers
+
11.4.29. dist_threads
+
11.4.30. binlog_path
+
11.4.31. binlog_flush
+
11.4.32. binlog_max_log_size
+
11.4.33. collation_server
+
11.4.34. collation_libc_locale
+
11.4.35. plugin_dir
+
11.4.36. mysql_version_string
+
11.4.37. rt_flush_period
+
11.4.38. thread_stack
+
11.4.39. expansion_limit
+
11.4.40. compat_sphinxql_magics
+
11.4.41. watchdog
+
A. Sphinx revision history
+
A.1. Version 2.0.1-beta, 22 apr 2011
+
A.2. Version 1.10-beta, 19 jul 2010
+
A.3. Version 0.9.9-release, 02 dec 2009
+
A.4. Version 0.9.9-rc2, 08 apr 2009
+
A.5. Version 0.9.9-rc1, 17 nov 2008
+
A.6. Version 0.9.8.1, 30 oct 2008
+
A.7. Version 0.9.8, 14 jul 2008
+
A.8. Version 0.9.7, 02 apr 2007
+
A.9. Version 0.9.7-rc2, 15 dec 2006
+
A.10. Version 0.9.7-rc1, 26 oct 2006
+
A.11. Version 0.9.6, 24 jul 2006
+
A.12. Version 0.9.6-rc1, 26 jun 2006
+
+ +

Chapter 1. Introduction

+ +

1.1. About

+

Sphinx is a full-text search engine, publicly distributed under + GPL version 2. Commercial licensing (eg. for embedded use) is available + upon request.

Technically, Sphinx is a standalone software package provides fast + and relevant full-text search functionality to client applications. It + was specially designed to integrate well with SQL databases storing the + data, and to be easily accessed scripting languages. However, Sphinx + does not depend on nor require any specific database to function.

Applications can access Sphinx search daemon (searchd) using any + of the three different access methods: a) via native search API + (SphinxAPI), b) via Sphinx own implementation of MySQL network protocol + (using a small SQL subset called SphinxQL), or c) via MySQL server with + a pluggable storage engine (SphinxSE).

Official native SphinxAPI implementations for PHP, Perl, Ruby, and + Java are included within the distribution package. API is very + lightweight so porting it to a new language is known to take a few hours + or days. Third party API ports and plugins exist for Perl, C#, Haskell, + Ruby-on-Rails, and possibly other languages and frameworks.

Starting version 1.10-beta, Sphinx supports two different indexing + backends: "disk" index backend, and "realtime" (RT) index backend. Disk + indexes support online full-text index rebuilds, but online updates can + only be done on non-text (attribute) data. RT indexes additionally allow + for online full-text index updates. Previous versions only supported + disk indexes.

Data can be loaded into disk indexes using a so-called data + source. Built-in sources can fetch data directly from MySQL, PostgreSQL, + ODBC compliant database (MS SQL, Oracle, etc), or a pipe in a custom XML + format. Adding new data sources drivers (eg. to natively support other + DBMSes) is designed to be as easy as possible. RT indexes, as of + 1.10-beta, can only be populated using SphinxQL.

As for the name, Sphinx is an acronym which is officially decoded + as SQL Phrase Index. Yes, I know about CMU's Sphinx project.

+

1.2. Sphinx features

+

Key Sphinx features are:

  • high indexing and searching performance;

  • +
  • advanced indexing and querying tools (flexible and + feature-rich text tokenizer, querying language, several different + ranking modes, etc);

  • +
  • advanced result set post-processing (SELECT with expressions, + WHERE, ORDER BY, GROUP BY etc over text search results);

  • +
  • proven scalability up to billions of documents, terabytes of + data, and thousands of queries per second;

  • +
  • easy integration with SQL and XML data sources, and SphinxAPI, + SphinxQL, or SphinxSE search interfaces;

  • +
  • easy scaling with distributed searches.

  • +
+

To expand a bit, Sphinx:

  • has high indexing speed (upto 10-15 MB/sec per core on an + internal benchmark);

  • +
  • has high search speed (upto 150-250 queries/sec per core + against 1,000,000 documents, 1.2 GB of data on an internal + benchmark);

  • +
  • has high scalability (biggest known cluster indexes over + 3,000,000,000 documents, and busiest one peaks over 50,000,000 + queries/day);

  • +
  • provides good relevance ranking through combination of phrase + proximity ranking and statistical (BM25) ranking;

  • +
  • provides distributed searching capabilities;

  • +
  • provides document excerpts (snippets) generation;

  • +
  • provides searching from within application with SphinxAPI or + SphinxQL interfaces, and from within MySQL with pluggable SphinxSE + storage engine;

  • +
  • supports boolean, phrase, word proximity and other types of + queries;

  • +
  • supports multiple full-text fields per document (upto 32 by + default);

  • +
  • supports multiple additional attributes per document (ie. + groups, timestamps, etc);

  • +
  • supports stopwords;

  • +
  • supports morphological word forms dictionaries;

  • +
  • supports tokenizing exceptions;

  • +
  • supports both single-byte encodings and UTF-8;

  • +
  • supports stemming (stemmers for English, Russian and Czech are + built-in; and stemmers for French, Spanish, Portuguese, Italian, + Romanian, German, Dutch, Swedish, Norwegian, Danish, Finnish, + Hungarian, are available by building third party libstemmer + library);

  • +
  • supports MySQL natively (all types of tables, including + MyISAM, InnoDB, NDB, Archive, etc are supported);

  • +
  • supports PostgreSQL natively;

  • +
  • supports ODBC compliant databases (MS SQL, Oracle, etc) + natively;

  • +
  • ...has 50+ other features not listed here, refer to API and + configuration manual!

  • +
+

1.3. Where to get Sphinx

+

Sphinx is available through its official Web site at http://sphinxsearch.com/.

Currently, Sphinx distribution tarball includes the following + software:

  • indexer: an utility which creates + fulltext indexes;

  • +
  • search: a simple command-line (CLI) + test utility which searches through fulltext indexes;

  • +
  • searchd: a daemon which enables + external software (eg. Web applications) to search through + fulltext indexes;

  • +
  • sphinxapi: a set of searchd client API + libraries for popular Web scripting languages (PHP, Python, Perl, + Ruby).

  • +
  • spelldump: a simple command-line tool + to extract the items from an ispell or + MySpell (as bundled with OpenOffice) format + dictionary to help customize your index, for use with wordforms.

  • +
  • indextool: an utility to dump + miscellaneous debug information about the index, added in version + 0.9.9-rc2.

  • +
+

1.4. License

+

This program is free software; you can 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. See COPYING file for details.

This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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

Non-GPL licensing (for OEM/ISV embedded use) can also be arranged, + please contact + us to discuss commercial licensing possibilities.

+

1.5. Credits

+

Author

Sphinx initial author (and a benevolent dictator ever since): +

+

Team

Past and present employees of Sphinx Technologies Inc who should + be noted on their work on Sphinx (in alphabetical order):

  • Alexander Klimenko

  • +
  • Alexey Dvoichenkov

  • +
  • Alexey Vinogradov

  • +
  • Ilya Kuznetsov

  • +
  • Stanislav Klinov

  • +
+

Contributors

People who contributed to Sphinx and their contributions (in no + particular order):

  • Robert "coredev" Bengtsson (Sweden), initial version of + PostgreSQL data source

  • +
  • Len Kranendonk, Perl API

  • +
  • Dmytro Shteflyuk, Ruby API

  • +
+

Many other people have contributed ideas, bug reports, fixes, etc. + Thank you!

+

1.6. History

+

Sphinx development was started back in 2001, because I didn't + manage to find an acceptable search solution (for a database driven Web + site) which would meet my requirements. Actually, each and every + important aspect was a problem:

  • search quality (ie. good relevance)

    • statistical ranking methods performed rather bad, + especially on large collections of small documents (forums, + blogs, etc)

    • +
  • +
  • search speed

    • especially if searching for phrases which contain + stopwords, as in "to be or not to be"

    • +
  • +
  • moderate disk and CPU requirements when indexing +

    • important in shared hosting enivronment, not to + mention the indexing speed.

    • +
  • +
+

Despite the amount of time passed and numerous improvements made + in the other solutions, there's still no solution which I personally + would be eager to migrate to.

Considering that and a lot of positive feedback received from + Sphinx users during last years, the obvious decision is to continue + developing Sphinx (and, eventually, to take over the world).

+

Chapter 2. Installation

+ +

2.1. Supported systems

+

Most modern UNIX systems with a C++ compiler should be able to + compile and run Sphinx without any modifications.

Currently known systems Sphinx has been successfully running on + are:

  • Linux 2.4.x, 2.6.x (many various distributions)

  • +
  • Windows 2000, XP

  • +
  • FreeBSD 4.x, 5.x, 6.x, 7.x

  • +
  • NetBSD 1.6, 3.0

  • +
  • Solaris 9, 11

  • +
  • Mac OS X

  • +
+

CPU architectures known to work include X86, X86-64, SPARC64, + ARM.

Chance are good that Sphinx should work on other Unix platforms as + well; please report any platforms missing from this list that worked for + you!

+

2.2. Required tools

+

On UNIX, you will need the following tools to build and install + Sphinx:

  • a working C++ compiler. GNU gcc is known to work.

  • +
  • a good make program. GNU make is known to work.

  • +
+

On Windows, you will need Microsoft Visual C/C++ Studio .NET 2003 + or 2005. Other compilers/environments will probably work as well, but + for the time being, you will have to build makefile (or other + environment specific project files) manually.

+

2.3. Installing Sphinx on Linux

+
  1. Extract everything from the distribution tarball (haven't + you already?) and go to the sphinx + subdirectory. (We are using version 2.0.1-beta here for the sake + of example only; be sure to change this to a specific version + you're using.)

    $ tar xzvf sphinx-2.0.1-beta.tar.gz
    +$ cd sphinx
    +

  2. +
  3. Run the configuration program:

    $ ./configure

    +

    There's a number of options to configure. The complete + listing may be obtained by using --help switch. + The most important ones are:

    • --prefix, which specifies where to + install Sphinx; such as + --prefix=/usr/local/sphinx (all of the + examples use this prefix)

    • +
    • --with-mysql, which specifies where + to look for MySQL include and library files, if + auto-detection fails;

    • +
    • --with-pgsql, which specifies where + to look for PostgreSQL include and library files.

    • +
  4. +
  5. Build the binaries:

    $ make

  6. +
  7. Install the binaries in the directory of your choice: + (defaults to /usr/local/bin/ on *nix systems, + but is overridden with configure --prefix)

    $ make install

  8. +
+

2.4. Installing Sphinx on Windows

+

Installing Sphinx on a Windows server is often easier than + installing on a Linux environment; unless you are preparing code + patches, you can use the pre-compiled binary files from the Downloads + area on the website.

  1. Extract everything from the .zip file you have downloaded - + sphinx-2.0.1-beta-win32.zip, or + sphinx-2.0.1-beta-win32-pgsql.zip if you need + PostgresSQL support as well. (We are using version 2.0.1-beta here + for the sake of example only; be sure to change this to a specific + version you're using.) You can use Windows Explorer in Windows XP + and up to extract the files, or a freeware package like 7Zip to open + the archive.

    For the remainder of this guide, we will assume that the + folders are unzipped into C:\Sphinx, such that + searchd.exe can be found in + C:\Sphinx\bin\searchd.exe. If you decide to use + any different location for the folders or configuration file, please + change it accordingly.

  2. +
  3. Edit the contents of sphinx.conf.in - specifically entries + relating to @CONFDIR@ - to paths suitable for your system.

  4. +
  5. Install the searchd system as a Windows + service:

    C:\Sphinx\bin> C:\Sphinx\bin\searchd --install --config
    +C:\Sphinx\sphinx.conf.in --servicename SphinxSearch

  6. +
  7. The searchd service will now be listed in + the Services panel within the Management Console, available from + Administrative Tools. It will not have been started, as you will + need to configure it and build your indexes with + indexer before starting the service. A guide to + do this can be found under Quick + tour.

    During the next steps of the install (which involve running + indexer pretty much as you would on Linux) you may find that you get + an error relating to libmysql.dll not being found. If you have MySQL + installed, you should find a copy of this library in your Windows + directory, or sometimes in Windows\System32, or failing that in the + MySQL core directories. If you do receive an error please copy + libmysql.dll into the bin directory.

  8. +
+

2.5. Known installation issues

+

If configure fails to locate MySQL headers + and/or libraries, try checking for and installing + mysql-devel package. On some systems, it is not + installed by default.

If make fails with a message which look like +

+/bin/sh: g++: command not found
+make[1]: *** [libsphinx_a-sphinx.o] Error 127
+

try checking for and installing gcc-c++ + package.

If you are getting compile-time errors which look like +

+sphinx.cpp:67: error: invalid application of `sizeof' to
+    incomplete type `Private::SizeError<false>'
+

this means that some compile-time type size check failed. + The most probable reason is that off_t type is less than 64-bit on your + system. As a quick hack, you can edit sphinx.h and replace off_t with + DWORD in a typedef for SphOffset_t, but note that this will prohibit you + from using full-text indexes larger than 2 GB. Even if the hack helps, + please report such issues, providing the exact error message and + compiler/OS details, so I could properly fix them in next + releases.

If you keep getting any other error, or the suggestions above do + not seem to help you, please don't hesitate to contact me.

+

2.6. Quick Sphinx usage tour

+

All the example commands below assume that you installed Sphinx in + /usr/local/sphinx, so searchd + can be found in + /usr/local/sphinx/bin/searchd.

To use Sphinx, you will need to:

  1. Create a configuration file.

    Default configuration file name is + sphinx.conf. All Sphinx programs look for this + file in current working directory by default.

    Sample configuration file, + sphinx.conf.dist, which has all the options + documented, is created by configure. Copy and + edit that sample file to make your own configuration: (assuming + Sphinx is installed into + /usr/local/sphinx/)

    $ cd /usr/local/sphinx/etc
    +$ cp sphinx.conf.dist sphinx.conf
    +$ vi sphinx.conf

    +

    Sample configuration file is setup to index + documents table from MySQL database + test; so there's + example.sql sample data file to populate that + table with a few documents for testing purposes:

    $ mysql -u test < /usr/local/sphinx/etc/example.sql

  2. +
  3. Run the indexer to create full-text index from your + data:

    $ cd /usr/local/sphinx/etc
    +$ /usr/local/sphinx/bin/indexer --all

  4. +
  5. Query your newly created index!

  6. +
+

To query the index from command line, use + search utility:

$ cd /usr/local/sphinx/etc
+$ /usr/local/sphinx/bin/search test

+

To query the index from your PHP scripts, you need to:

  1. Run the search daemon which your script will talk to:

    $ cd /usr/local/sphinx/etc
    +$ /usr/local/sphinx/bin/searchd

  2. +
  3. Run the attached PHP API test script (to ensure that the + daemon was succesfully started and is ready to serve the + queries):

    $ cd sphinx/api
    +$ php test.php test

  4. +
  5. Include the API (it's located in + api/sphinxapi.php) into your own scripts and + use it.

  6. +
+

Happy searching!

+

Chapter 3. Indexing

+ +

3.1. Data sources

+

The data to be indexed can generally come from very different + sources: SQL databases, plain text files, HTML files, mailboxes, and so + on. From Sphinx point of view, the data it indexes is a set of + structured documents, each of which has the same + set of fields. This is biased towards SQL, where + each row correspond to a document, and each column to a field.

Depending on what source Sphinx should get the data from, + different code is required to fetch the data and prepare it for + indexing. This code is called data source driver + (or simply driver or data + source for brevity).

At the time of this writing, there are drivers for MySQL and + PostgreSQL databases, which can connect to the database using its native + C/C++ API, run queries and fetch the data. There's also a driver called + xmlpipe, which runs a specified command and reads the data from its + stdout. See Section 3.8, “xmlpipe data source” section for + the format description.

There can be as many sources per index as necessary. They will be + sequentially processed in the very same order which was specifed in + index definition. All the documents coming from those sources will be + merged as if they were coming from a single source.

+

3.2. Attributes

+

Attributes are additional values associated with each document + that can be used to perform additional filtering and sorting during + search.

It is often desired to additionally process full-text search + results based not only on matching document ID and its rank, but on a + number of other per-document values as well. For instance, one might + need to sort news search results by date and then relevance, or search + through products within specified price range, or limit blog search to + posts made by selected users, or group results by month. To do that + efficiently, Sphinx allows to attach a number of additional + attributes to each document, and store their + values in the full-text index. It's then possible to use stored values + to filter, sort, or group full-text matches.

Attributes, unlike the fields, are not full-text indexed. They are + stored in the index, but it is not possible to search them as full-text, + and attempting to do so results in an error.

For example, it is impossible to use the extended matching mode + expression @column 1 to match documents where column is + 1, if column is an attribute, and this is still true even if the numeric + digits are normally indexed.

Attributes can be used for filtering, though, to restrict returned + rows, as well as sorting or result + grouping; it is entirely possible to sort results purely based on + attributes, and ignore the search relevance tools. Additionally, + attributes are returned from the search daemon, while the indexed text + is not.

A good example for attributes would be a forum posts table. Assume + that only title and content fields need to be full-text searchable - but + that sometimes it is also required to limit search to a certain author + or a sub-forum (ie. search only those rows that have some specific + values of author_id or forum_id columns in the SQL table); or to sort + matches by post_date column; or to group matching posts by month of the + post_date and calculate per-group match counts.

This can be achieved by specifying all the mentioned columns + (excluding title and content, that are full-text fields) as attributes, + indexing them, and then using API calls to setup filtering, sorting, and + grouping. Here as an example.

Example sphinx.conf part:

+...
+sql_query = SELECT id, title, content, \
+	author_id, forum_id, post_date FROM my_forum_posts
+sql_attr_uint = author_id
+sql_attr_uint = forum_id
+sql_attr_timestamp = post_date
+...
+

Example application code (in PHP):

+// only search posts by author whose ID is 123
+$cl->SetFilter ( "author_id", array ( 123 ) );
+
+// only search posts in sub-forums 1, 3 and 7
+$cl->SetFilter ( "forum_id", array ( 1,3,7 ) );
+
+// sort found posts by posting date in descending order
+$cl->SetSortMode ( SPH_SORT_ATTR_DESC, "post_date" );
+

Attributes are named. Attribute names are case insensitive. + Attributes are not full-text indexed; they are + stored in the index as is. Currently supported attribute types are: +

  • unsigned integers (1-bit to 32-bit wide);

  • +
  • UNIX timestamps;

  • +
  • floating point values (32-bit, IEEE 754 single + precision);

  • +
  • string ordinals (specially computed integers);

  • +
  • strings (since + 1.10-beta);

  • +
  • MVA, multi-value attributes + (variable-length lists of 32-bit unsigned integers).

  • +
+

The complete set of per-document attribute values is sometimes + referred to as docinfo. Docinfos can either be +

  • stored separately from the main full-text index data + ("extern" storage, in .spa file), or

  • +
  • attached to each occurence of document ID in full-text index + data ("inline" storage, in .spd file).

  • +
+

When using extern storage, a copy of .spa + file (with all the attribute values for all the documents) is kept in + RAM by searchd at all times. This is for + performance reasons; random disk I/O would be too slow. On the contrary, + inline storage does not require any additional RAM at all, but that + comes at the cost of greatly inflating the index size: remember that it + copies all attribute value + every time when the document ID is mentioned, and + that is exactly as many times as there are different keywords in the + document. Inline may be the only viable option if you have only a few + attributes and need to work with big datasets in limited RAM. However, + in most cases extern storage makes both indexing and searching + much more efficient.

Search-time memory requirements for extern storage are + (1+number_of_attrs)*number_of_docs*4 bytes, ie. 10 million docs with 2 + groups and 1 timestamp will take (1+2+1)*10M*4 = 160 MB of RAM. This is + PER DAEMON, not per query. + searchd will allocate 160 MB on startup, read the + data and keep it shared between queries. The children will + NOT allocate any additional copies of this + data.

+

3.3. MVA (multi-valued attributes)

+

MVAs, or multi-valued attributes, are an important special type of + per-document attributes in Sphinx. MVAs make it possible to attach lists + of values to every document. They are useful for article tags, product + categories, etc. Filtering and group-by (but not sorting) on MVA + attributes is supported.

Currently, MVA list entries are limited to unsigned 32-bit + integers. The list length is not limited, you can have an arbitrary + number of values attached to each document as long as RAM permits + (.spm file that contains the MVA values will be + precached in RAM by searchd). The source data can + be taken either from a separate query, or from a document field; see + source type in sql_attr_multi. In the first case + the query will have to return pairs of document ID and MVA values, in + the second one the field will be parsed for integer values. There are + absolutely no requirements as to incoming data order; the values will be + automatically grouped by document ID (and internally sorted within the + same ID) during indexing anyway.

When filtering, a document will match the filter on MVA attribute + if any of the values satisfy the filtering + condition. (Therefore, documents that pass through exclude filters will + not contain any of the forbidden values.) When grouping by MVA + attribute, a document will contribute to as many groups as there are + different MVA values associated with that document. For instance, if the + collection contains exactly 1 document having a 'tag' MVA with values 5, + 7, and 11, grouping on 'tag' will produce 3 groups with '@count' equal + to 1 and '@groupby' key values of 5, 7, and 11 respectively. Also note + that grouping by MVA might lead to duplicate documents in the result + set: because each document can participate in many groups, it can be + chosen as the best one in in more than one group, leading to duplicate + IDs. PHP API historically uses ordered hash on the document ID for the + resulting rows; so you'll also need to use SetArrayResult() in order to + employ group-by on MVA with PHP API.

+

3.4. Indexes

+

To be able to answer full-text search queries fast, Sphinx needs + to build a special data structure optimized for such queries from your + text data. This structure is called index; and + the process of building index from text is called + indexing.

Different index types are well suited for different tasks. For + example, a disk-based tree-based index would be easy to update (ie. + insert new documents to existing index), but rather slow to search. + Therefore, Sphinx architecture allows for different index + types to be implemented easily.

The only index type which is implemented in Sphinx at the moment + is designed for maximum indexing and searching speed. This comes at a + cost of updates being really slow; theoretically, it might be slower to + update this type of index than than to reindex it from scratch. However, + this very frequently could be worked around with muiltiple indexes, see + Section 3.10, “Live index updates” for details.

It is planned to implement more index types, including the type + which would be updateable in real time.

There can be as many indexes per configuration file as necessary. + indexer utility can reindex either all of them (if + --all option is specified), or a certain explicitly + specified subset. searchd utility will serve all + the specified indexes, and the clients can specify what indexes to + search in run time.

+

3.5. Restrictions on the source data

+

There are a few different restrictions imposed on the source data + which is going to be indexed by Sphinx, of which the single most + important one is:

ALL DOCUMENT IDS MUST BE UNIQUE UNSIGNED + NON-ZERO INTEGER NUMBERS (32-BIT OR 64-BIT, DEPENDING ON BUILD TIME + SETTINGS).

If this requirement is not met, different bad things can happen. + For instance, Sphinx can crash with an internal assertion while + indexing; or produce strange results when searching due to conflicting + IDs. Also, a 1000-pound gorilla might eventually come out of your + display and start throwing barrels at you. You've been warned.

+

3.6. Charsets, case folding, and translation tables

+

When indexing some index, Sphinx fetches documents from the + specified sources, splits the text into words, and does case folding so + that "Abc", "ABC" and "abc" would be treated as the same word (or, to be + pedantic, term).

To do that properly, Sphinx needs to know

  • what encoding is the source text in;

  • +
  • what characters are letters and what are not;

  • +
  • what letters should be folded to what letters.

  • +
+

This should be configured on a per-index basis using + charset_type + and charset_table options. + charset_type + specifies whether the document encoding is single-byte (SBCS) or UTF-8. + charset_table + specifies the table that maps letter characters to their case folded + versions. The characters that are not in the table are considered to be + non-letters and will be treated as word separators when indexing or + searching through this index.

Note that while default tables do not include space character + (ASCII code 0x20, Unicode U+0020) as a letter, it's in fact + perfectly legal to do so. This can be useful, for + instance, for indexing tag clouds, so that space-separated word sets + would index as a single search query term.

Default tables currently include English and Russian characters. + Please do submit your tables for other languages!

+

3.7. SQL data sources (MySQL, PostgreSQL)

+

With all the SQL drivers, indexing generally works as follows. +

  • connection to the database is established;

  • +
  • pre-query (see Section 11.1.11, “sql_query_pre”) is + executed to perform any necessary initial setup, such as setting + per-connection encoding with MySQL;

  • +
  • main query (see Section 11.1.12, “sql_query”) is + executed and the rows it returns are indexed;

  • +
  • post-query (see Section 11.1.30, “sql_query_post”) is + executed to perform any necessary cleanup;

  • +
  • connection to the database is closed;

  • +
  • indexer does the sorting phase (to be pedantic, index-type + specific post-processing);

  • +
  • connection to the database is established again;

  • +
  • post-index query (see Section 11.1.31, “sql_query_post_index”) is executed to perform any + necessary final cleanup;

  • +
  • connection to the database is closed again.

  • +
+

Most options, such as database user/host/password, are + straightforward. However, there are a few subtle things, which are + discussed in more detail here.

Ranged queries

Main query, which needs to fetch all the documents, can impose a + read lock on the whole table and stall the concurrent queries (eg. + INSERTs to MyISAM table), waste a lot of memory for result set, etc. To + avoid this, Sphinx supports so-called ranged + queries. With ranged queries, Sphinx first fetches min and + max document IDs from the table, and then substitutes different ID + intervals into main query text and runs the modified query to fetch + another chunk of documents. Here's an example.

Example 3.1. Ranged query usage example

+# in sphinx.conf
+
+sql_query_range	= SELECT MIN(id),MAX(id) FROM documents
+sql_range_step = 1000
+sql_query = SELECT * FROM documents WHERE id>=$start AND id<=$end
+
+

If the table contains document IDs from 1 to, say, 2345, then + sql_query would be run three times:

  1. with $start replaced with 1 and + $end replaced with 1000;

  2. +
  3. with $start replaced with 1001 and + $end replaced with 2000;

  4. +
  5. with $start replaced with 2000 and + $end replaced with 2345.

  6. +
+

Obviously, that's not much of a difference for 2000-row + table, but when it comes to indexing 10-million-row MyISAM table, ranged + queries might be of some help.

sql_post vs. + sql_post_index

The difference between post-query and post-index query is in that + post-query is run immediately when Sphinx received all the documents, + but further indexing may still fail for + some other reason. On the contrary, by the time the post-index query + gets executed, it is guaranteed that + the indexing was succesful. Database connection is dropped and + re-established because sorting phase can be very lengthy and would just + timeout otherwise.

+

3.8. xmlpipe data source

+

xmlpipe data source was designed to enable users to plug data into + Sphinx without having to implement new data sources drivers themselves. + It is limited to 2 fixed fields and 2 fixed attributes, and is + deprecated in favor of Section 3.9, “xmlpipe2 data source” now. For new streams, + use xmlpipe2.

To use xmlpipe, configure the data source in your configuration + file as follows:

+source example_xmlpipe_source
+{
+    type = xmlpipe
+    xmlpipe_command = perl /www/mysite.com/bin/sphinxpipe.pl
+}
+

The indexer will run the command + specified in xmlpipe_command, and then + read, parse and index the data it prints to stdout. + More formally, it opens a pipe to given command and then reads from that + pipe.

indexer will expect one or more documents in custom XML format. + Here's the example document stream, consisting of two documents: +

Example 3.2. XMLpipe document stream

<document>
+<id>123</id>
+<group>45</group>
+<timestamp>1132223498</timestamp>
+<title>test title</title>
+<body>
+this is my document body
+</body>
+</document>
+
+<document>
+<id>124</id>
+<group>46</group>
+<timestamp>1132223498</timestamp>
+<title>another test</title>
+<body>
+this is another document
+</body>
+</document>
+
+


Legacy xmlpipe legacy driver uses a builtin parser which is pretty + fast but really strict and does not actually fully support XML. It + requires that all the fields must be present, + formatted exactly as in this example, and occur + exactly in the same order. The only optional field + is timestamp; it defaults to 1.

+

3.9. xmlpipe2 data source

+

xmlpipe2 lets you pass arbitrary full-text and attribute data to + Sphinx in yet another custom XML format. It also allows to specify the + schema (ie. the set of fields and attributes) either in the XML stream + itself, or in the source settings.

When indexing xmlpipe2 source, indexer runs the given command, + opens a pipe to its stdout, and expects well-formed XML stream. Here's + sample stream data:

Example 3.3. xmlpipe2 document stream

<?xml version="1.0" encoding="utf-8"?>
+<sphinx:docset>
+
+<sphinx:schema>
+<sphinx:field name="subject"/> 
+<sphinx:field name="content"/>
+<sphinx:attr name="published" type="timestamp"/>
+<sphinx:attr name="author_id" type="int" bits="16" default="1"/>
+</sphinx:schema>
+
+<sphinx:document id="1234">
+<content>this is the main content <![CDATA[[and this <cdata> entry
+must be handled properly by xml parser lib]]></content>
+<published>1012325463</published>
+<subject>note how field/attr tags can be
+in <b class="red">randomized</b> order</subject>
+<misc>some undeclared element</misc>
+</sphinx:document>
+
+<sphinx:document id="1235">
+<subject>another subject</subject>
+<content>here comes another document, and i am given to understand,
+that in-document field order must not matter, sir</content>
+<published>1012325467</published>
+</sphinx:document>
+
+<!-- ... even more sphinx:document entries here ... -->
+
+<sphinx:killlist>
+<id>1234</id>
+<id>4567</id>
+</sphinx:killlist>
+
+</sphinx:docset>
+
+


Arbitrary fields and attributes are allowed. They also can occur + in the stream in arbitrary order within each document; the order is + ignored. There is a restriction on maximum field length; fields longer + than 2 MB will be truncated to 2 MB (this limit can be changed in the + source).

The schema, ie. complete fields and attributes list, must be + declared before any document could be parsed. This can be done either in + the configuration file using xmlpipe_field and + xmlpipe_attr_XXX settings, or right in the stream using + <sphinx:schema> element. <sphinx:schema> is optional. It is + only allowed to occur as the very first sub-element in + <sphinx:docset>. If there is no in-stream schema definition, + settings from the configuration file will be used. Otherwise, stream + settings take precedence.

Unknown tags (which were not declared neither as fields nor as + attributes) will be ignored with a warning. In the example above, + <misc> will be ignored. All embedded tags and their attributes + (such as <b> in <subject> in the example above) will be + silently ignored.

Support for incoming stream encodings depends on whether + iconv is installed on the system. xmlpipe2 is + parsed using libexpat parser that understands + US-ASCII, ISO-8859-1, UTF-8 and a few UTF-16 variants natively. Sphinx + configure script will also check for + libiconv presence, and utilize it to handle other + encodings. libexpat also enforces the requirement + to use UTF-8 charset on Sphinx side, because the parsed data it returns + is always in UTF-8.

XML elements (tags) recognized by xmlpipe2 (and their attributes + where applicable) are:

sphinx:docset
+

Mandatory top-level element, denotes and contains xmlpipe2 + document set.

sphinx:schema
+

Optional element, must either occur as the very first + child of sphinx:docset, or never occur at all. Declares the + document schema. Contains field and attribute declarations. If + present, overrides per-source settings from the configuration + file.

sphinx:field
+

Optional element, child of sphinx:schema. Declares a + full-text field. Known attributes are:

  • "name", specifies the XML element name that will be + treated as a full-text field in the subsequent + documents.

  • +
  • "attr", specifies whether to also index this field + as a string or word count attribute. Possible values are + "string" and "wordcount". Introduced in version + 1.10-beta.

  • +
+
sphinx:attr
+

Optional element, child of sphinx:schema. Declares an + attribute. Known attributes are:

  • "name", specifies the element name that should be + treated as an attribute in the subsequent + documents.

  • +
  • "type", specifies the attribute type. Possible + values are "int", "timestamp", "str2ordinal", "bool", + "float" and "multi".

  • +
  • "bits", specifies the bit size for "int" attribute + type. Valid values are 1 to 32.

  • +
  • "default", specifies the default value for this + attribute that should be used if the attribute's element + is not present in the document.

  • +
+
sphinx:document
+

Mandatory element, must be a child of sphinx:docset. + Contains arbitrary other elements with field and attribute + values to be indexed, as declared either using sphinx:field and + sphinx:attr elements or in the configuration file. The only + known attribute is "id" that must contain the unique integer + document ID.

sphinx:killlist
+

Optional element, child of sphinx:docset. Contains a + number of "id" elements whose contents are document IDs to be + put into a kill-list for this + index.

+

3.10. Live index updates

+

There are two major approaches to maintaining the full-text index + contents up to date. Note, however, that both these approaches deal with + the task of full-text data updates, and not + attribute updates. Instant attribute updates are supported since version + 0.9.8. Refer to UpdateAttributes() API call + description for details.

First, you can use disk-based indexes, partition them manually, + and only rebuild the smaller partitions (so-called "deltas") frequently. + By minimizing the rebuild size, you can reduce the average indexing lag + to something as low as 30-60 seconds. This approach was the the only one + available in versions 0.9.x. On huge collections it actually might be + the most efficient one. Refer to Section 3.11, “Delta index updates” for + details.

Second, versions 1.x (starting with 1.10-beta) add support for + so-called real-time indexes (RT indexes for short) that on-the-fly + updates of the full-text data. Updates on a RT index can appear in the + search results in 1-2 milliseconds, ie. 0.001-0.002 seconds. However, RT + index are less efficient for bulk indexing huge amounts of data. Refer + to Chapter 4, Real-time indexes for details.

+

3.11. Delta index updates

+

There's a frequent situation when the total dataset is too big to + be reindexed from scratch often, but the amount of new records is rather + small. Example: a forum with a 1,000,000 archived posts, but only 1,000 + new posts per day.

In this case, "live" (almost real time) index updates could be + implemented using so called "main+delta" scheme.

The idea is to set up two sources and two indexes, with one "main" + index for the data which only changes rarely (if ever), and one "delta" + for the new documents. In the example above, 1,000,000 archived posts + would go to the main index, and newly inserted 1,000 posts/day would go + to the delta index. Delta index could then be reindexed very frequently, + and the documents can be made available to search in a matter of + minutes.

Specifying which documents should go to what index and reindexing + main index could also be made fully automatical. One option would be to + make a counter table which would track the ID which would split the + documents, and update it whenever the main index is reindexed.

Example 3.4. Fully automated live updates

+# in MySQL
+CREATE TABLE sph_counter
+(
+    counter_id INTEGER PRIMARY KEY NOT NULL,
+    max_doc_id INTEGER NOT NULL
+);
+
+# in sphinx.conf
+source main
+{
+    # ...
+    sql_query_pre = SET NAMES utf8
+    sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
+    sql_query = SELECT id, title, body FROM documents \
+        WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
+}
+
+source delta : main
+{
+    sql_query_pre = SET NAMES utf8
+    sql_query = SELECT id, title, body FROM documents \
+        WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 )
+}
+
+index main
+{
+    source = main
+    path = /path/to/main
+    # ... all the other settings
+}
+
+# note how all other settings are copied from main,
+# but source and path are overridden (they MUST be)
+index delta : main
+{
+    source = delta
+    path = /path/to/delta
+}
+
+


Note how we're overriding sql_query_pre in the delta + source. We need to explicitly have that override. Otherwise + REPLACE query would be run when indexing delta source too, + effectively nullifying it. However, when we issue the directive in the + inherited source for the first time, it removes all + inherited values, so the encoding setup is also lost. So + sql_query_pre in the delta can not just be empty; and we + need to issue the encoding setup query explicitly once again.

+

3.12. Index merging

+

Merging two existing indexes can be more efficient that indexing + the data from scratch, and desired in some cases (such as merging 'main' + and 'delta' indexes instead of simply reindexing 'main' in 'main+delta' + partitioning scheme). So indexer has an option to + do that. Merging the indexes is normally faster than reindexing but + still not instant on huge indexes. Basically, it + will need to read the contents of both indexes once and write the result + once. Merging 100 GB and 1 GB index, for example, will result in 202 GB + of IO (but that's still likely less than the indexing from scratch + requires).

The basic command syntax is as follows:


+indexer --merge DSTINDEX SRCINDEX [--rotate]
+

+

Only the DSTINDEX index will be affected: the + contents of SRCINDEX will be merged into it. --rotate + switch will be required if DSTINDEX is already being served by + searchd. The initially devised usage pattern is to + merge a smaller update from SRCINDEX into DSTINDEX. Thus, when merging + the attributes, values from SRCINDEX will win if duplicate document IDs + are encountered. Note, however, that the "old" keywords will + not be automatically removed in such cases. For + example, if there's a keyword "old" associated with document 123 in + DSTINDEX, and a keyword "new" associated with it in SRCINDEX, document + 123 will be found by both keywords after the merge. + You can supply an explicit condition to remove documents from DSTINDEX + to mitigate that; the relevant switch is + --merge-dst-range:


+indexer --merge main delta --merge-dst-range deleted 0 0
+

+

This switch lets you apply filters to the + destination index along with merging. There can be several filters; all + of their conditions must be met in order to include the document in the + resulting mergid index. In the example above, the filter passes only + those records where 'deleted' is 0, eliminating all records that were + flagged as deleted (for instance, using UpdateAttributes() + call).

+

Chapter 4. Real-time indexes

+ +

Real-time indexes (or RT indexes for brevity) are a new backend that + lets you insert, update, or delete documents (rows) on the fly. RT indexes + were added in version 1.10-beta. While querying of RT indexes is possible + using any of the SphinxAPI, SphinxQL, or SphinxSE, updating them is only + possible via SphinxQL at the moment. Full SphinxQL reference is available + in Chapter 7, SphinxQL reference.

4.1. RT indexes overview

+

RT indexes should be declared in sphinx.conf, + just as every other index type. Notable differences from the regular, + disk-based indexes are that a) data sources are not required and + ignored, and b) you should explicitly enumerate all the text fields, not + just attributes. Here's an example:

Example 4.1. RT index declaration

+index rt
+{
+	type = rt
+	path = /usr/local/sphinx/data/rt
+	rt_field = title
+	rt_field = content
+	rt_attr_uint = gid
+}
+
+

RT INDEXES ARE CURRENTLY (AS OF VERSION 1.10-beta) A WORK IN + PROGRESS. Therefore, they might lack certain features: for instance, + prefix/infix indexing, MVA attributes, etc are not supported yet. There + also might be performance and stability issues. However, all the regular + indexing features and most of the searching features are already in + place, our internal testing passes, and last but not least a number of + production instances are already using RT indexes with good + results.

RT index can be accessed using MySQL protocol. INSERT, REPLACE, + DELETE, and SELECT statements against RT index are supported. For + instance, this is an example session with the sample index above:

+$ mysql -h 127.0.0.1 -P 9306
+Welcome to the MySQL monitor.  Commands end with ; or \g.
+Your MySQL connection id is 1
+Server version: 1.10-dev (r2153)
+
+Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
+
+mysql> INSERT INTO rt VALUES ( 1, 'first record', 'test one', 123 );
+Query OK, 1 row affected (0.05 sec)
+
+mysql> INSERT INTO rt VALUES ( 2, 'second record', 'test two', 234 );
+Query OK, 1 row affected (0.00 sec)
+
+mysql> SELECT * FROM rt;
++------+--------+------+
+| id   | weight | gid  |
++------+--------+------+
+|    1 |      1 |  123 |
+|    2 |      1 |  234 |
++------+--------+------+
+2 rows in set (0.02 sec)
+
+mysql> SELECT * FROM rt WHERE MATCH('test');
++------+--------+------+
+| id   | weight | gid  |
++------+--------+------+
+|    1 |   1643 |  123 |
+|    2 |   1643 |  234 |
++------+--------+------+
+2 rows in set (0.01 sec)
+
+mysql> SELECT * FROM rt WHERE MATCH('@title test');
+Empty set (0.00 sec)
+

Both partial and batch INSERT syntaxes are supported, ie. you can + specify a subset of columns, and insert several rows at a time. + Deletions are also possible using DELETE statement; the only currently + supported syntax is DELETE FROM <index> WHERE id=<id>. + REPLACE is also supported, enabling you to implement updates.

+mysql> INSERT INTO rt ( id, title ) VALUES ( 3, 'third row' ), ( 4, 'fourth entry' );
+Query OK, 2 rows affected (0.01 sec)
+
+mysql> SELECT * FROM rt;
++------+--------+------+
+| id   | weight | gid  |
++------+--------+------+
+|    1 |      1 |  123 |
+|    2 |      1 |  234 |
+|    3 |      1 |    0 |
+|    4 |      1 |    0 |
++------+--------+------+
+4 rows in set (0.00 sec)
+
+mysql> DELETE FROM rt WHERE id=2;
+Query OK, 0 rows affected (0.00 sec)
+
+mysql> SELECT * FROM rt WHERE MATCH('test');
++------+--------+------+
+| id   | weight | gid  |
++------+--------+------+
+|    1 |   1500 |  123 |
++------+--------+------+
+1 row in set (0.00 sec)
+
+mysql> INSERT INTO rt VALUES ( 1, 'first record on steroids', 'test one', 123 );
+ERROR 1064 (42000): duplicate id '1'
+
+mysql> REPLACE INTO rt VALUES ( 1, 'first record on steroids', 'test one', 123 );
+Query OK, 1 row affected (0.01 sec)
+
+mysql> SELECT * FROM rt WHERE MATCH('steroids');
++------+--------+------+
+| id   | weight | gid  |
++------+--------+------+
+|    1 |   1500 |  123 |
++------+--------+------+
+1 row in set (0.01 sec)
+

Data stored in RT index should survive clean shutdown. When binary + logging is enabled, it should also survive crash and/or dirty shutdown, + and recover on subsequent startup.

+

4.2. Known caveats with RT indexes

+

As of 1.10-beta, RT indexes are a beta quality feature: while no + major, showstopper-class issues are known, there still are a few known + usage quirks. Those quirks are listed in this section.

  • Prefix and infix indexing are not supported yet.

  • +
  • MVAs are not supported yet.

  • +
  • Disk chunks optimization routine is not implemented + yet.

  • +
  • On initial index creation, attributes are reordered by type, + in the following order: uint, bigint, float, timestamp, string. So + when using INSERT without an explicit column names list, specify all + uint column values first, then bigint, etc.

  • +
  • Default conservative RAM chunk limit + (rt_mem_limit) of 32M can lead to poor performance + on bigger indexes, you should raise it to 256..1024M if you're + planning to index gigabytes.

  • +
  • High DELETE/REPLACE rate can lead to kill-list fragmentation + and impact searching performance.

  • +
  • No transaction size limits are currently imposed; too many + concurrent INSERT/REPLACE transactions might therefore consume a lot + of RAM.

  • +
  • In case of a damaged binlog, recovery will stop on the first + damaged transaction, even though it's technically possible to keep + looking further for subsequent undamaged transactions, and recover + those. This mid-file damage case (due to flaky HDD/CDD/tape?) is + supposed to be extremely rare, though.

  • +
  • Multiple INSERTs grouped in a single transaction perform + better than equivalent single-row transactions and are recommended + for batch loading of data.

  • +
+

4.3. RT index internals

+

RT index is internally chunked. It keeps a so-called RAM chunk + that stores all the most recent changes. RAM chunk memory usage is + rather strictly limited with per-index rt_mem_limit directive. Once RAM + chunk grows over this limit, a new disk chunk is created from its data, + and RAM chunk is reset. Thus, while most changes on the RT index will be + performed in RAM only and complete instantly (in milliseconds), those + changes that overflow the RAM chunk will stall for the duration of disk + chunk creation (a few seconds).

Disk chunks are, in fact, just regular disk-based indexes. But + they're a part of an RT index and automatically managed by it, so you + need not configure nor manage them manually. Because a new disk chunk is + created every time RT chunk overflows the limit, and because in-memory + chunk format is close to on-disk format, the disk chunks will be + approximately rt_mem_limit bytes in size each.

Generally, it is better to set the limit bigger, to minimize both + the frequency of flushes, and the index fragmentation (number of disk + chunks). For instance, on a dedicated search server that handles a big + RT index, it can be advised to set rt_mem_limit to 1-2 + GB. A global limit on all indexes is also planned, but not yet + implemented yet as of 1.10-beta.

Disk chunk full-text index data can not be actually modified, so + the full-text field changes (ie. row deletions and updates) suppress a + previous row version from a disk chunk using a kill-list, but do not + actually physically purge the data. Therefore, on workloads with high + full-text updates ratio index might eventually get polluted by these + previous row versions, and searching performance would degrade. Physical + index purging that would improve the performance is planned, but not yet + implemented as of 1.10-beta.

Data in RAM chunk gets saved to disk on clean daemon shutdown, and + then loaded back on startup. However, on daemon or server crash, updates + from RAM chunk might be lost. To prevent that, binary logging of + transactions can be used; see Section 4.4, “Binary logging” for + details.

Full-text changes in RT index are transactional. They are stored + in a per-thread accumulator until COMMIT, then applied at once. Bigger + batches per single COMMIT should result in faster indexing.

+

4.4. Binary logging

+

Binary logs are essentially a recovery mechanism. With binary logs + enabled, searchd writes every given transaction to + the binlog file, and uses that for recovery after an unclean shutdown. + On clean shutdown, RAM chunks are saved to disk, and then all the binlog + files are unlinked.

During normal operation, a new binlog file will be opened every + time when binlog_max_log_size limit (which defaults to + 128M) is reached. Older, already closed binlog files are kept until all + of the transactions stored in them (from all indexes) are flushed as a + disk chunk. Setting the limit to 0 pretty much prevents binlog from + being unlinked at all while searchd is running; + however, it will still be unlinked on clean shutdown.

There are 3 different binlog flushing strategies, controlled by + binlog_flush directive which + takes the values of 0, 1, or 2. 0 means to flush the log to OS and sync + it to disk every second; 1 means flush and sync every transaction; and 2 + (the default mode) means flush every transaction but sync every second. + Sync is relatively slow because it has to perform physical disk writes, + so mode 1 is the safest (every committed transaction is guaranteed to be + written on disk) but the slowest. Flushing log to OS prevents from data + loss on searchd crashes but not system crashes. + Mode 2 is the default.

On recovery after an unclean shutdown, binlogs are replayed and + all logged transactions since the last good on-disk state are restored. + Transactions are checksummed so in case of binlog file corruption + garbage data will not be replayed; such a broken transaction will + be detected and, currently, will stop replay. Transactions also start + with a magic marker and timestamped, so in case of binlog damage in the + middle of the file, it's technically possible to skip broken + transactions and keep replaying from the next good one, and/or it's + possible to replay transactions until a given timestamp (point-in-time + recovery), but none of that is implemented yet as of 1.10-beta.

One unwanted side effect of binlogs is that activel updating a + small RT index that fully fits into a RAM chunk part will lead to an + ever-growing binlog that can never be unlinked until clean shutdown. + Binlogs are essentially append-only deltas against the last known good + saved state on disk, and unless RAM chunk gets saved, they can not be + unlinked. An ever-growing binlog is not very good for disk use and crash + recovery time. Starting with 2.0.1-beta you can configure + searchd to perform a periodic RAM chunk flush to + fix that problem using a rt_flush_period directive. With + periodic flushes enabled, searchd will keep a + separate thread, checking whether RT indexes RAM chunks need to be + written back to disk. Once that happens, the respective binlogs can be + (and are) safely unlinked.

Note that rt_flush_period only controls the frequency + at which the checks happen. There are no + guarantees that the particular RAM chunk will get + saved. For instance, it does not make sense to regularly re-save a huge + RAM chunk that only gets a few rows worh of updates. The search daemon + determine whether to actually perform the flush with a few + heuristics.

+

Chapter 5. Searching

+ +

5.1. Matching modes

+

There are the following matching modes available:

  • SPH_MATCH_ALL, matches all query words (default + mode);

  • +
  • SPH_MATCH_ANY, matches any of the query words;

  • +
  • SPH_MATCH_PHRASE, matches query as a phrase, requiring + perfect match;

  • +
  • SPH_MATCH_BOOLEAN, matches query as a boolean expression + (see Section 5.2, “Boolean query syntax”);

  • +
  • SPH_MATCH_EXTENDED, matches query as an expression in Sphinx + internal query language (see Section 5.3, “Extended query syntax”). + As of 0.9.9, this has been superceded by SPH_MATCH_EXTENDED2, + providing additional functionality and better performance. The + ident is retained for legacy application code that will continue + to be compatible once Sphinx and its components, including the + API, are upgraded.

  • +
  • SPH_MATCH_EXTENDED2, matches query using the second version + of the Extended matching mode.

  • +
  • SPH_MATCH_FULLSCAN, matches query, forcibly using the "full + scan" mode as below. NB, any query terms will be ignored, such + that filters, filter-ranges and grouping will still be applied, + but no text-matching.

  • +
+

The SPH_MATCH_FULLSCAN mode will be automatically activated in + place of the specified matching mode when the following conditions are + met:

  1. The query string is empty (ie. its length is zero).

  2. +
  3. docinfo storage is set + to extern.

  4. +
+

In full scan mode, all the indexed documents will be + considered as matching. Such queries will still apply filters, sorting, + and group by, but will not perform any full-text searching. This can be + useful to unify full-text and non-full-text searching code, or to + offload SQL server (there are cases when Sphinx scans will perform + better than analogous MySQL queries). An example of using the full scan + mode might be to find posts in a forum. By selecting the forum's user ID + via SetFilter() but not actually providing any search text, + Sphinx will match every document (i.e. every post) where + SetFilter() would match - in this case providing every post + from that user. By default this will be ordered by relevancy, followed + by Sphinx document ID in ascending order (earliest first).

+

5.2. Boolean query syntax

+

Boolean queries allow the following special operators to be used: +

  • explicit operator AND:

    hello & world
  • +
  • operator OR:

    hello | world
  • +
  • operator NOT:

    +hello -world
    +hello !world
    +
  • +
  • grouping:

    ( hello world )
  • +
+

Here's an example query which uses all these + operators:

Example 5.1. Boolean query example

+( cat -dog ) | ( cat -mouse)
+
+


There always is implicit AND operator, so "hello world" query + actually means "hello & world".

OR operator precedence is higher than AND, so "looking for cat | + dog | mouse" means "looking for ( cat | dog | mouse )" and + not "(looking for cat) | dog | mouse".

Queries like "-dog", which implicitly include all documents from + the collection, can not be evaluated. This is both for technical and + performance reasons. Technically, Sphinx does not always keep a list of + all IDs. Performance-wise, when the collection is huge (ie. 10-100M + documents), evaluating such queries could take very long.

+

5.3. Extended query syntax

+

The following special operators and modifiers can be used when + using the extended matching mode:

  • operator OR:

    hello | world
  • +
  • operator NOT:

    +hello -world
    +hello !world
    +
  • +
  • field search operator:

    @title hello @body world
  • +
  • field position limit modifier (introduced in version + 0.9.9-rc1):

    @body[50] hello
  • +
  • multiple-field search operator:

    @(title,body) hello world
  • +
  • all-field search operator:

    @* hello
  • +
  • phrase search operator:

    "hello world"
  • +
  • proximity search operator:

    "hello world"~10
  • +
  • quorum matching operator:

    "the world is a wonderful place"/3
  • +
  • strict order operator (aka operator "before"): +

    aaa << bbb << ccc
  • +
  • exact form modifier (introduced in version 0.9.9-rc1): +

    raining =cats and =dogs
  • +
  • field-start and field-end modifier (introduced in version + 0.9.9-rc2):

    ^hello world$
  • +
  • NEAR, generalized proximity operator (introduced in version + 2.0.1-beta):

    hello NEAR/3 world NEAR/4 "my test"
  • +
  • SENTENCE operator (introduced in version 2.0.1-beta): +

    all SENTENCE words SENTENCE "in one sentence"
  • +
  • PARAGRAPH operator (introduced in version 2.0.1-beta): +

    "Bill Gates" PARAGRAPH "Steve Jobs"
  • +
  • zone limit operator:

    ZONE:(h3,h4) only in these titles
  • +
+

Here's an example query that uses some of these + operators:

Example 5.2. Extended matching mode: query example

+"hello world" @title "example program"~5 @body python -(php|perl) @* code
+
+


The full meaning of this search is:

  • Find the words 'hello' and 'world' adjacently in any field + in a document;

  • +
  • Additionally, the same document must also contain the words + 'example' and 'program' in the title field, with up to, but not + including, 10 words between the words in question; (E.g. "example + PHP program" would be matched however "example script to introduce + outside data into the correct context for your program" would not + because two terms have 10 or more words between them)

  • +
  • Additionally, the same document must contain the word + 'python' in the body field, but not contain either 'php' or + 'perl';

  • +
  • Additionally, the same document must contain the word 'code' + in any field.

  • +
+

There always is implicit AND operator, so "hello world" means that + both "hello" and "world" must be present in matching document.

OR operator precedence is higher than AND, so "looking for cat | + dog | mouse" means "looking for ( cat | dog | mouse )" and + not "(looking for cat) | dog | mouse".

Field limit operator limits subsequent searching to a given field. + Normally, query will fail with an error message if given field name does + not exist in the searched index. However, that can be suppressed by + specifying "@@relaxed" option at the very beginning of the query: +

+@@relaxed @nosuchfield my query
+

This can be helpful when searching through heterogeneous + indexes with different schemas.

Field position limit, introduced in version 0.9.9-rc1, additionaly + restricts the searching to first N position within given field (or + fields). For example, "@body[50] hello" will not match the + documents where the keyword 'hello' occurs at position 51 and below in + the body.

Proximity distance is specified in words, adjusted for word count, + and applies to all words within quotes. For instance, "cat dog mouse"~5 + query means that there must be less than 8-word span which contains all + 3 words, ie. "CAT aaa bbb ccc DOG eee fff MOUSE" document will + not match this query, because this span is exactly + 8 words long.

Quorum matching operator introduces a kind of fuzzy matching. It + will only match those documents that pass a given threshold of given + words. The example above ("the world is a wonderful place"/3) will match + all documents that have at least 3 of the 6 specified words.

Strict order operator (aka operator "before"), introduced in + version 0.9.9-rc2, will match the document only if its argument keywords + occur in the document exactly in the query order. For instance, "black + << cat" query (without quotes) will match the document "black and + white cat" but not the "that cat was black" + document. Order operator has the lowest priority. It can be applied both + to just keywords and more complex expressions, ie. this is a valid + query:

+(bag of words) << "exact phrase" << red|green|blue
+

Exact form keyword modifier, introduced in version 0.9.9-rc1, will + match the document only if the keyword occurred in exactly the specified + form. The default behaviour is to match the document if the stemmed + keyword matches. For instance, "runs" query will match both the document + that contains "runs" and the document that contains + "running", because both forms stem to just "run" - while "=runs" query + will only match the first document. Exact form operator requires index_exact_words option to be + enabled. This is a modifier that affects the keyword and thus can be + used within operators such as phrase, proximity, and quorum + operators.

Field-start and field-end keyword modifiers, introduced in version + 0.9.9-rc2, will make the keyword match only if it occurred at the very + start or the very end of a fulltext field, respectively. For instance, + the query "^hello world$" (with quotes and thus combining phrase + operator and start/end modifiers) will only match documents that contain + at least one field that has exactly these two keywords.

Starting with 0.9.9-rc1, arbitrarily nested brackets and negations + are allowed. However, the query must be possible to compute without + involving an implicit list of all documents:

+// correct query
+aaa -(bbb -(ccc ddd))
+
+// queries that are non-computable
+-aaa
+aaa | -bbb
+

NEAR operator, added in 2.0.1-beta, is a generalized + version of a proximity operator. The syntax is NEAR/N, it + is case-sensitive, and no spaces are allowed beetwen the NEAR keyword, + the slash sign, and the distance value.

The original proximity operator only worked on sets of keywords. + NEAR is more generic and can accept arbitrary subexpressions as its two + arguments, matching the document when both subexpressions are found + within N words of each other, no matter in which order. NEAR is left + associative and has the same (lowest) precedence as BEFORE.

You should also note how a (one NEAR/7 two NEAR/7 + three) query using NEAR is not really equivalent to a ("one + two three"~7) one using keyword proximity operator. The + difference here is that the proximity operator allows for up to 6 + non-matching words between all the 3 matching words, but the version + with NEAR is less restrictive: it would allow for up to 6 words between + 'one' and 'two' and then for up to 6 more between that two-word matching + and a 'three' keyword.

SENTENCE and PARAGRAPH operators, added in 2.0.1-beta, + matches the document when both its arguments are within the same + sentence or the same paragraph of text, respectively. The arguments can + be either keywords, or phrases, or the instances of the same operator. + Here are a few examples:

+one SENTENCE two
+one SENTENCE "two three"
+one SENTENCE "two three" SENTENCE four
+

The order of the arguments within the sentence or paragraph + does not matter. These operators only work on indexes built with index_sp (sentence and paragraph indexing + feature) enabled, and revert to a mere AND otherwise. Refer to the + index_sp directive documentation for the notes on what's + considered a sentence and a paragraph.

ZONE limit operator, added in 2.0.1-beta, is quite similar + to field limit operator, but restricts matching to a given in-field zone + or a list of zones. Note that the subsequent subexpressions are + not required to match in a single contiguous span + of a given zone, and may match in multiple spans. For instance, + (ZONE:th hello world) query will match + this example document:

+<th>Table 1. Local awareness of Hello Kitty brand.</th>
+.. some table data goes here ..
+<th>Table 2. World-wide brand awareness.</th>
+

ZONE operator affects the query until the next field or ZONE + limit operator, or the closing parenthesis. It only works on the indexes + built with zones support (see Section 11.2.9, “index_zones”) and + will be ignored otherwise.

+

5.4. Weighting

+

Specific weighting function (currently) depends on the search + mode.

There are these major parts which are used in the weighting + functions:

  1. phrase rank,

  2. +
  3. statistical rank.

  4. +
+

Phrase rank is based on a length of longest common subsequence + (LCS) of search words between document body and query phrase. So if + there's a perfect phrase match in some document then its phrase rank + would be the highest possible, and equal to query words count.

Statistical rank is based on classic BM25 function which only + takes word frequencies into account. If the word is rare in the whole + database (ie. low frequency over document collection) or mentioned a lot + in specific document (ie. high frequency over matching document), it + receives more weight. Final BM25 weight is a floating point number + between 0 and 1.

In all modes, per-field weighted phrase ranks are computed as a + product of LCS multiplied by per-field weight speficifed by user. + Per-field weights are integer, default to 1, and can not be set lower + than 1.

In SPH_MATCH_BOOLEAN mode, no weighting is performed at all, every + match weight is set to 1.

In SPH_MATCH_ALL and SPH_MATCH_PHRASE modes, final weight is a sum + of weighted phrase ranks.

In SPH_MATCH_ANY mode, the idea is essentially the same, but it + also adds a count of matching words in each field. Before that, weighted + phrase ranks are additionally mutliplied by a value big enough to + guarantee that higher phrase rank in any field will make the match ranked higher, even + if it's field weight is low.

In SPH_MATCH_EXTENDED mode, final weight is a sum of weighted + phrase ranks and BM25 weight, multiplied by 1000 and rounded to + integer.

This is going to be changed, so that MATCH_ALL and MATCH_ANY modes + use BM25 weights as well. This would improve search results in those + match spans where phrase ranks are equal; this is especially useful for + 1-word queries.

The key idea (in all modes, besides boolean) is that better + subphrase matches are ranked higher, and perfect matches are pulled to + the top. Author's experience is that this phrase proximity based ranking + provides noticeably better search quality than any statistical scheme + alone (such as BM25, which is commonly used in other search + engines).

+

5.5. Expressions, functions, and operators

+

Sphinx lets you use arbitrary arithmetic expressions both via + SphinxQL and SphinxAPI, involving attribute values, internal attributes + (document ID and relevance weight), arithmetic operations, a number of + built-in functions, and user-defined functions. This section documents + the supported operators and functions. Here's the complete reference + list for quick access.

+

5.5.1. Operators

+
Arithmetic operators: +, -, *, /, %, DIV, + MOD
+

The standard arithmetic operators. Arithmetic calculations + involving those can be performed in three different modes: (a) + using single-precision, 32-bit IEEE 754 floating point values + (the default), (b) using signed 32-bit integers, (c) using + 64-bit signed integers. The expression parser will automatically + switch to integer mode if there are no operations the result in + a floating point value. Otherwise, it will use the default + floating point mode. For instance, a+b will be + computed using 32-bit integers if both arguments are 32-bit + integers; or using 64-bit integers if both arguments are + integers but one of them is 64-bit; or in floats otherwise. + However, a/b or sqrt(a) will always be + computed in floats, because these operations return a result of + non-integer type. To avoid the first, you can either use + IDIV(a,b) or a DIV b form. Also, + a*b will not be automatically promoted to 64-bit + when the arguments are 32-bit. To enforce 64-bit results, you + can use BIGINT(). (But note that if there are non-integer + operations, BIGINT() will simply be ignored.)

Comparison operators: <, > <=, + >=, =, <>
+

Comparison operators (eg. = or <=) return 1.0 when the + condition is true and 0.0 otherwise. For instance, + (a=b)+3 will evaluate to 4 when attribute 'a' is + equal to attribute 'b', and to 3 when 'a' is not. Unlike MySQL, + the equality comparisons (ie. = and <> operators) + introduce a small equality threshold (1e-6 by default). If the + difference between compared values is within the threshold, they + will be considered equal.

Boolean operators: AND, OR, NOT
+

Boolean operators (AND, OR, NOT) were introduced in + 0.9.9-rc2 and behave as usual. They are left-associative and + have the least priority compared to other operators. NOT has + more priority than AND and OR but nevertheless less than any + other operator. AND and OR have the same priority so brackets + use is recommended to avoid confusion in complex + expressions.

Bitwise operators: &, |
+

These operators perform bitwise AND and OR respectively. + The operands must be of an integer types. Introduced in version + 1.10-beta.

+

5.5.2. Numeric functions

+
ABS()
+

Returns the absolute value of the argument.

CEIL()
+

Returns the smallest integer value greater or equal to the + argument.

COS()
+

Returns the cosine of the argument.

EXP()
+

Returns the exponent of the argument (e=2.718... to the + power of the argument).

FLOOR()
+

Returns the largest integer value lesser or equal to the + argument.

IDIV()
+

Returns the result of an integer division of the first + argument by the second argument. Both arguments must be of an + integer type.

LN()
+

Returns the natural logarithm of the argument (with the + base of e=2.718...).

LOG10()
+

Returns the common logarithm of the argument (with the + base of 10).

LOG2()
+

Returns the binary logarithm of the argument (with the + base of 2).

MAX()
+

Returns the bigger of two arguments.

MIN()
+

Returns the smaller of two arguments.

POW()
+

Returns the first argument raised to the power of the + second argument.

SIN()
+

Returns the sine of the argument.

SQRT()
+

Returns the square root of the argument.

+

5.5.3. Date and time functions

+
DAY()
+

Returns the integer day of month (in 1..31 range) from a + timestamp argument, according to the current timezone. + Introduced in version 2.0.1-beta.

MONTH()
+

Returns the integer month (in 1..12 range) from a + timestamp argument, according to the current timezone. + Introduced in version 2.0.1-beta.

NOW()
+

Returns the current timestamp as an INTEGER. Introduced in + version 0.9.9-rc1.

YEAR()
+

Returns the integer year (in 1969..2038 range) from a + timestamp argument, according to the current timezone. + Introduced in version 2.0.1-beta.

YEARMONTH()
+

Returns the integer year and month code (in 196912..203801 + range) from a timestamp argument, according to the current + timezone. Introduced in version 2.0.1-beta.

YEARMONTHDAY()
+

Returns the integer year, month, and date code (in + 19691231..20380119 range) from a timestamp argument, according + to the current timezone. Introduced in version + 2.0.1-beta.

+

5.5.4. Type conversion functions

+
BIGINT()
+

Forcibly promotes the integer argument to 64-bit type, and + does nothing on floating point argument. It's intended to help + enforce evaluation of certain expressions (such as + a*b) in 64-bit mode even though all the arguments + are 32-bit. Introduced in version 0.9.9-rc1.

SINT()
+

Forcibly reinterprets its 32-bit unsigned integer argument + as signed, and also expands it to 64-bit type (because 32-bit + type is unsigned). It's easily illustrated by the following + example: 1-2 normally evaluates to 4294967295, but SINT(1-2) + evaluates to -1. Introduced in version 1.10-beta.

+

5.5.5. Comparison functions

+
IF()
+

IF() behavior is slightly different that that + of its MySQL counterpart. It takes 3 arguments, check whether + the 1st argument is equal to 0.0, returns the 2nd argument if it + is not zero, or the 3rd one when it is. Note that unlike + comparison operators, IF() does not use a + threshold! Therefore, it's safe to use comparison results as its + 1st argument, but arithmetic operators might produce unexpected + results. For instance, the following two calls will produce + different results even though they are + logically equivalent:

+IF ( sqrt(3)*sqrt(3)-3<>0, a, b )
+IF ( sqrt(3)*sqrt(3)-3, a, b )
+

In the first case, the comparison operator <> will + return 0.0 (false) because of a threshold, and IF() + will always return 'b' as a result. In the second one, the same + sqrt(3)*sqrt(3)-3 expression will be compared with + zero without threshold by the + IF() function itself. But its value will be + slightly different from zero because of limited floating point + calculations precision. Because of that, the comparison with 0.0 + done by IF() will not pass, and the second variant + will return 'a' as a result.

IN()
+

IN(expr,val1,val2,...), introduced in version 0.9.9-rc1, + takes 2 or more arguments, and returns 1 if 1st argument (expr) + is equal to any of the other arguments (val1..valN), or 0 + otherwise. Currently, all the checked values (but not the + expression itself!) are required to be constant. (Its + technically possible to implement arbitrary expressions too, and + that might be implemented in the future.) Constants are + pre-sorted and then binary search is used, so IN() even against + a big arbitrary list of constants will be very quick. Starting + with 0.9.9-rc2, first argument can also be a MVA attribute. In + that case, IN() will return 1 if any of the MVA values is equal + to any of the other arguments. Starting with 2.0.1-beta, IN() + also supports IN(expr,@uservar) syntax to check + whether the value belongs to the list in the given global user + variable.

INTERVAL()
+

INTERVAL(expr,point1,point2,point3,...), introduced in + version 0.9.9-rc1, takes 2 or more arguments, and returns the + index of the argument that is less than the first argument: it + returns 0 if expr<point1, 1 if point1<=expr<point2, and + so on. It is required that point1<point2<...<pointN for + this function to work correctly.

+

5.5.6. Miscellaneous functions

+
CRC32()
+

Returns the CRC32 value of a string argument. Introduced + in version 2.0.1-beta.

GEODIST()
+

GEODIST(lat1,long1,lat2,long2) function, introduced in + version 0.9.9-rc2, computes geosphere distance between two given + points specified by their coordinates. Note that both latitudes + and longitudes must be in radians and the result will be in + meters. You can use arbitrary expression as any of the four + coordinates. An optimized path will be selected when one pair of + the arguments refers directly to a pair attributes and the other + one is constant.

+

5.6. Sorting modes

+

There are the following result sorting modes available: +

  • SPH_SORT_RELEVANCE mode, that sorts by relevance in + descending order (best matches first);

  • +
  • SPH_SORT_ATTR_DESC mode, that sorts by an attribute in + descending order (bigger attribute values first);

  • +
  • SPH_SORT_ATTR_ASC mode, that sorts by an attribute in + ascending order (smaller attribute values first);

  • +
  • SPH_SORT_TIME_SEGMENTS mode, that sorts by time segments + (last hour/day/week/month) in descending order, and then by + relevance in descending order;

  • +
  • SPH_SORT_EXTENDED mode, that sorts by SQL-like combination + of columns in ASC/DESC order;

  • +
  • SPH_SORT_EXPR mode, that sorts by an arithmetic + expression.

  • +
+

SPH_SORT_RELEVANCE ignores any additional parameters and always + sorts matches by relevance rank. All other modes require an additional + sorting clause, with the syntax depending on specific mode. + SPH_SORT_ATTR_ASC, SPH_SORT_ATTR_DESC and SPH_SORT_TIME_SEGMENTS modes + require simply an attribute name. SPH_SORT_RELEVANCE is equivalent to + sorting by "@weight DESC, @id ASC" in extended sorting mode, + SPH_SORT_ATTR_ASC is equivalent to "attribute ASC, @weight DESC, @id + ASC", and SPH_SORT_ATTR_DESC to "attribute DESC, @weight DESC, @id ASC" + respectively.

SPH_SORT_TIME_SEGMENTS mode

In SPH_SORT_TIME_SEGMENTS mode, attribute values are split into + so-called time segments, and then sorted by time segment first, and by + relevance second.

The segments are calculated according to the current + timestamp at the time when the search is performed, so the + results would change over time. The segments are as follows: +

  • last hour,

  • +
  • last day,

  • +
  • last week,

  • +
  • last month,

  • +
  • last 3 months,

  • +
  • everything else.

  • +
+

These segments are hardcoded, but it is trivial to + change them if necessary.

This mode was added to support searching through blogs, news + headlines, etc. When using time segments, recent records would be ranked + higher because of segment, but withing the same segment, more relevant + records would be ranked higher - unlike sorting by just the timestamp + attribute, which would not take relevance into account at all.

SPH_SORT_EXTENDED mode

In SPH_SORT_EXTENDED mode, you can specify an SQL-like sort + expression with up to 5 attributes (including internal attributes), eg: +

+@relevance DESC, price ASC, @id DESC
+

Both internal attributes (that are computed by the engine on the + fly) and user attributes that were configured for this index are + allowed. Internal attribute names must start with magic @-symbol; user + attribute names can be used as is. In the example above, + @relevance and @id are internal + attributes and price is user-specified.

Known internal attributes are:

  • @id (match ID)

  • +
  • @weight (match weight)

  • +
  • @rank (match weight)

  • +
  • @relevance (match weight)

  • +
  • @random (return results in random order)

  • +
+

@rank and @relevance + are just additional aliases to @weight.

SPH_SORT_EXPR mode

Expression sorting mode lets you sort the matches by an arbitrary + arithmetic expression, involving attribute values, internal attributes + (@id and @weight), arithmetic operations, and a number of built-in + functions. Here's an example:

+$cl->SetSortMode ( SPH_SORT_EXPR,
+	"@weight + ( user_karma + ln(pageviews) )*0.1" );
+

The operators and functions supported in the expressions are + discussed in a separate section, Section 5.5, “Expressions, functions, and operators”.

+

5.7. Grouping (clustering) search results

+

Sometimes it could be useful to group (or in other terms, cluster) + search results and/or count per-group match counts - for instance, to + draw a nice graph of how much maching blog posts were there per each + month; or to group Web search results by site; or to group matching + forum posts by author; etc.

In theory, this could be performed by doing only the full-text + search in Sphinx and then using found IDs to group on SQL server side. + However, in practice doing this with a big result set (10K-10M matches) + would typically kill performance.

To avoid that, Sphinx offers so-called grouping mode. It is + enabled with SetGroupBy() API call. When grouping, all matches are + assigned to different groups based on group-by value. This value is + computed from specified attribute using one of the following built-in + functions:

  • SPH_GROUPBY_DAY, extracts year, month and day in YYYYMMDD + format from timestamp;

  • +
  • SPH_GROUPBY_WEEK, extracts year and first day of the week + number (counting from year start) in YYYYNNN format from + timestamp;

  • +
  • SPH_GROUPBY_MONTH, extracts month in YYYYMM format from + timestamp;

  • +
  • SPH_GROUPBY_YEAR, extracts year in YYYY format from + timestamp;

  • +
  • SPH_GROUPBY_ATTR, uses attribute value itself for + grouping.

  • +
+

The final search result set then contains one best match per + group. Grouping function value and per-group match count are returned + along as "virtual" attributes named @group and @count respectively.

The result set is sorted by group-by sorting clause, with the + syntax similar to SPH_SORT_EXTENDED sorting + clause syntax. In addition to @id and + @weight, group-by sorting clause may also include: +

  • @group (groupby function value),

  • +
  • @count (amount of matches in group).

  • +
+

The default mode is to sort by groupby value in descending order, + ie. by "@group desc".

On completion, total_found result parameter would + contain total amount of matching groups over he whole index.

WARNING: grouping is done in + fixed memory and thus its results are only approximate; so there might + be more groups reported in total_found than actually + present. @count might also be underestimated. To reduce + inaccuracy, one should raise max_matches. If + max_matches allows to store all found groups, results + will be 100% correct.

For example, if sorting by relevance and grouping by + "published" attribute with SPH_GROUPBY_DAY + function, then the result set will contain

  • one most relevant match per each day when there were any + matches published,

  • +
  • with day number and per-day match count attached,

  • +
  • sorted by day number in descending order (ie. recent days + first).

  • +
+

Starting with version 0.9.9-rc2, aggregate functions (AVG(), + MIN(), MAX(), SUM()) are supported through SetSelect() API call when using + GROUP BY.

+

5.8. Distributed searching

+

To scale well, Sphinx has distributed searching capabilities. + Distributed searching is useful to improve query latency (ie. search + time) and throughput (ie. max queries/sec) in multi-server, multi-CPU or + multi-core environments. This is essential for applications which need + to search through huge amounts data (ie. billions of records and + terabytes of text).

The key idea is to horizontally partition (HP) searched data + accross search nodes and then process it in parallel.

Partitioning is done manually. You should

  • setup several instances of Sphinx programs + (indexer and searchd) on + different servers;

  • +
  • make the instances index (and search) different parts of + data;

  • +
  • configure a special distributed index on some of the + searchd instances;

  • +
  • and query this index.

  • +
+

This index only contains references to other local and + remote indexes - so it could not be directly reindexed, and you should + reindex those indexes which it references instead.

When searchd receives a query against + distributed index, it does the following:

  1. connects to configured remote agents;

  2. +
  3. issues the query;

  4. +
  5. sequentially searches configured local indexes (while the + remote agents are searching);

  6. +
  7. retrieves remote agents' search results;

  8. +
  9. merges all the results together, removing the + duplicates;

  10. +
  11. sends the merged resuls to client.

  12. +
+

From the application's point of view, there are no differences + between searching through a regular index, or a distributed index at + all. That is, distributed indexes are fully transparent to the + application, and actually there's no way to tell whether the index you + queried was distributed or local. (Even though as of 0.9.9 Sphinx does + not allow to combine searching through distributed indexes with anything + else, this constraint will be lifted in the future.)

Any searchd instance could serve both as a + master (which aggregates the results) and a slave (which only does local + searching) at the same time. This has a number of uses:

  1. every machine in a cluster could serve as a master which + searches the whole cluster, and search requests could be balanced + between masters to achieve a kind of HA (high availability) in + case any of the nodes fails;

  2. +
  3. if running within a single multi-CPU or multi-core machine, + there would be only 1 searchd instance quering itself as an agent + and thus utilizing all CPUs/core.

  4. +
+

It is scheduled to implement better HA support which would allow + to specify which agents mirror each other, do health checks, keep track + of alive agents, load-balance requests, etc.

+

5.9. searchd query log formats

+

In version 2.0.1-beta and above two query log formats are + supported. Previous versions only supported a custom plain text format. + That format is still the default one. However, while it might be more + convenient for manual monitoring and review, but hard to replay for + benchmarks, it only logs search queries but not the + other types of requests, does not always contain the complete search + query data, etc. The default text format is also harder (and sometimes + impossible) to replay for benchmarking purposes. The new + sphinxql format alleviates that. It aims to be complete and + automatable, even though at the cost of brevity and readability.

5.9.1. Plain log format

+

By default, searchd logs all succesfully + executed search queries into a query log file. Here's an example: +

+[Fri Jun 29 21:17:58 2007] 0.004 sec [all/0/rel 35254 (0,20)] [lj] test
+[Fri Jun 29 21:20:34 2007] 0.024 sec [all/0/rel 19886 (0,20) @channel_id] [lj] test
+

This log format is as follows:

+[query-date] query-time [match-mode/filters-count/sort-mode
+    total-matches (offset,limit) @groupby-attr] [index-name] query
+

Match mode can take one of the following values: +

  • "all" for SPH_MATCH_ALL mode;

  • +
  • "any" for SPH_MATCH_ANY mode;

  • +
  • "phr" for SPH_MATCH_PHRASE mode;

  • +
  • "bool" for SPH_MATCH_BOOLEAN mode;

  • +
  • "ext" for SPH_MATCH_EXTENDED mode;

  • +
  • "ext2" for SPH_MATCH_EXTENDED2 mode;

  • +
  • "scan" if the full scan mode was used, either by being + specified with SPH_MATCH_FULLSCAN, or if the query was empty (as + documented under Matching + Modes)

  • +
+

Sort mode can take one of the following values: +

  • "rel" for SPH_SORT_RELEVANCE mode;

  • +
  • "attr-" for SPH_SORT_ATTR_DESC mode;

  • +
  • "attr+" for SPH_SORT_ATTR_ASC mode;

  • +
  • "tsegs" for SPH_SORT_TIME_SEGMENTS mode;

  • +
  • "ext" for SPH_SORT_EXTENDED mode.

  • +
+

Additionally, if searchd was started with + --iostats, there will be a block of data after where + the index(es) searched are listed.

A query log entry might take the form of:

+[Fri Jun 29 21:17:58 2007] 0.004 sec [all/0/rel 35254 (0,20)] [lj]
+   [ios=6 kb=111.1 ms=0.5] test
+

This additional block is information regarding I/O operations in + performing the search: the number of file I/O operations carried out, + the amount of data in kilobytes read from the index files and time + spent on I/O operations (although there is a background processing + component, the bulk of this time is the I/O operation time).

+

5.9.2. SphinxQL log format

+

This is a new log format introduced in 2.0.1-beta, with the + goals begin logging everything and then some, and in a format easy to + automate (for insance, automatically replay). New format can either be + enabled via the query_log_format directive in + the configuration file, or switched back and forth on the fly with the + + SET GLOBAL query_log_format=... + statement via SphinxQL. In the new format, the example from + the previous section would look as follows. (Wrapped below for + readability, but with just one query per line in the actual log.) +

+/* Fri Jun 29 21:17:58.609 2007 2011 conn 2 wall 0.004 found 35254 */
+SELECT * FROM lj WHERE MATCH('test') OPTION ranker=proximity;
+
+/* Fri Jun 29 21:20:34 2007.555 conn 3 wall 0.024 found 19886 */
+SELECT * FROM lj WHERE MATCH('test') GROUP BY channel_id
+OPTION ranker=proximity;
+

Note that all requests would be logged in this + format, including those sent via SphinxAPI and SphinxSE, not just + those sent via SphinxQL. Also note, that this kind of logging works + only with plain log files and will not work if you use 'syslog' for + logging.

The features of SphinxQL log format compared to the default text + one are as follows.

  • All request types should be logged. (This is still work in + progress.)

  • +
  • Full statement data will be logged where possible.

  • +
  • Errors and warnings are logged.

  • +
  • The log should be automatically replayable via + SphinxQL.

  • +
  • Additional performance counters (currently, per-agent + distributed query times) are logged.

  • +
+

Every request (including both SphinxAPI and SphinxQL) request + must result in exactly one log line. All request types, including + INSERT, CALL SNIPPETS, etc will eventually get logged, though as of + time of this writing, that is a work in progress). Every log line must + be a valid SphinxQL statement that reconstructs the full request, + except if the logged request is too big and needs shortening for + performance reasons. Additional messages, counters, etc can be logged + in the comments section after the request.

+

5.10. MySQL protocol support and SphinxQL

+

Starting with version 0.9.9-rc2, Sphinx searchd daemon supports + MySQL binary network protocol and can be accessed with regular MySQL + API. For instance, 'mysql' CLI client program works well. Here's an + example of querying Sphinx using MySQL client:

+$ mysql -P 9306
+Welcome to the MySQL monitor.  Commands end with ; or \g.
+Your MySQL connection id is 1
+Server version: 0.9.9-dev (r1734)
+
+Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
+
+mysql> SELECT * FROM test1 WHERE MATCH('test') 
+    -> ORDER BY group_id ASC OPTION ranker=bm25;
++------+--------+----------+------------+
+| id   | weight | group_id | date_added |
++------+--------+----------+------------+
+|    4 |   1442 |        2 | 1231721236 |
+|    2 |   2421 |      123 | 1231721236 |
+|    1 |   2421 |      456 | 1231721236 |
++------+--------+----------+------------+
+3 rows in set (0.00 sec)
+

Note that mysqld was not even running on the test machine. + Everything was handled by searchd itself.

The new access method is supported in + addition to native APIs which all still work perfectly well. + In fact, both access methods can be used at the same time. Also, native + API is still the default access method. MySQL protocol support needs to + be additionally configured. This is a matter of 1-line config change, + adding a new listener with mysql41 + specified as a protocol:

+listen = localhost:9306:mysql41
+

Just supporting the protocol and not the SQL syntax would be + useless so Sphinx now also supports a subset of SQL that we dubbed + SphinxQL. It supports the standard querying all the index types with + SELECT, modifying RT indexes with INSERT, REPLACE, and DELETE, and much + more. Full SphinxQL reference is available in Chapter 7, SphinxQL reference.

+

5.11. Multi-queries

+

Multi-queries, or query batches, let you send multiple queries to + Sphinx in one go (more formally, one network request).

Two API methods that implement multi-query mechanism are AddQuery() and RunQueries(). You can also run + multiple queries with SphinxQL, see Section 7.18, “Multi-statement queries”. (In fact, regular Query() call is internally + implemented as a single AddQuery() call immediately followed by + RunQueries() call.) AddQuery() captures the current state of all the + query settings set by previous API calls, and memorizes the query. + RunQueries() actually sends all the memorized queries, and returns + multiple result sets. There are no restrictions on the queries at all, + except just a sanity check on a number of queries in a single batch (see + Section 11.4.25, “max_batch_queries”).

Why use multi-queries? Generally, it all boils down to + performance. First, by sending requests to searchd + in a batch instead of one by one, you always save a bit by doing less + network roundtrips. Second, and somewhat more important, sending queries + in a batch enables searchd to perform certain + internal optimizations. As new types of optimizations are being added + over time, it generally makes sense to pack all the queries into batches + where possible, so that simply upgrading Sphinx to a new version would + automatically enable new optimizations. In the case when there aren't + any possible batch optimizations to apply, queries will be processed one + by one internally.

Why (or rather when) not use multi-queries? Multi-queries requires + all the queries in a batch to be independent, and sometimes they aren't. + That is, sometimes query B is based on query A results, and so can only + be set up after executing query A. For instance, you might want to + display results from a secondary index if and only if there were no + results found in a primary index. Or maybe just specify offset into 2nd + result set based on the amount of matches in the 1st result set. In that + case, you will have to use separate queries (or separate + batches).

As of 0.9.10, there are two major optimizations to be aware of: + common query optimization (available since 0.9.8); and common subtree + optimization (available since 0.9.10).

Common query optimization means that + searchd will identify all those queries in a batch + where only the sorting and group-by settings differ, and only + perform searching once. For instance, if a batch consists of + 3 queries, all of them are for "ipod nano", but 1st query requests + top-10 results sorted by price, 2nd query groups by vendor ID and + requests top-5 vendors sorted by rating, and 3rd query requests max + price, full-text search for "ipod nano" will only be performed once, and + its results will be reused to build 3 different result sets.

So-called faceted searching is a particularly important + case that benefits from this optimization. Indeed, faceted searching can + be implemented by running a number of queries, one to retrieve search + results themselves, and a few other ones with same full-text query but + different group-by settings to retrieve all the required groups of + results (top-3 authors, top-5 vendors, etc). And as long as full-text + query and filtering settings stay the same, common query optimization + will trigger, and greatly improve performance.

Common subtree optimization is even more interesting. It + lets searchd exploit similarities between batched + full-text queries. It identifies common full-text query parts (subtress) + in all queries, and caches them between queries. For instance, look at + the following query batch:

+barack obama president
+barack obama john mccain
+barack obama speech
+

There's a common two-word part ("barack obama") that can be + computed only once, then cached and shared across the queries. And + common subtree optimization does just that. Per-query cache size is + strictly controlled by subtree_docs_cache and subtree_hits_cache directives + (so that caching all sxiteen gazillions of + documents that match "i am" does not exhaust the RAM and instantly kill + your server).

Here's a code sample (in PHP) that fire the same query in 3 + different sorting modes:

+require ( "sphinxapi.php" );
+$cl = new SphinxClient ();
+$cl->SetMatchMode ( SPH_MATCH_EXTENDED2 );
+
+$cl->SetSortMode ( SPH_SORT_RELEVANCE );
+$cl->AddQuery ( "the", "lj" );
+$cl->SetSortMode ( SPH_SORT_EXTENDED, "published desc" );
+$cl->AddQuery ( "the", "lj" );
+$cl->SetSortMode ( SPH_SORT_EXTENDED, "published asc" );
+$cl->AddQuery ( "the", "lj" );
+$res = $cl->RunQueries();
+

How to tell whether the queries in the batch were actually + optimized? If they were, respective query log will have a "multiplier" + field that specifies how many queries were processed together: +

+[Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext2/0/rel 747541 (0,20)] [lj] the
+[Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext2/0/ext 747541 (0,20)] [lj] the
+[Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext2/0/ext 747541 (0,20)] [lj] the
+

Note the "x3" field. It means that this query was optimized + and processed in a sub-batch of 3 queries. For reference, this is how + the regular log would look like if the queries were not batched: +

+[Sun Jul 12 15:18:17.062 2009] 0.059 sec [ext2/0/rel 747541 (0,20)] [lj] the
+[Sun Jul 12 15:18:17.156 2009] 0.091 sec [ext2/0/ext 747541 (0,20)] [lj] the
+[Sun Jul 12 15:18:17.250 2009] 0.092 sec [ext2/0/ext 747541 (0,20)] [lj] the
+

Note how per-query time in multi-query case was improved by + a factor of 1.5x to 2.3x, depending on a particular sorting mode. In + fact, for both common query and common subtree optimizations, there were + reports of 3x and even more improvements, and that's from production + instances, not just synthetic tests.

+

5.12. Collations

+

Introduced to Sphinx in version 2.0.1-beta to supplement string + sorting, collations essentially affect the string attribute comparisons. + They specify both the character set encoding and the strategy that + Sphinx uses to compare strings when doing ORDER BY or GROUP BY with a + string attribute involved.

String attributes are stored as is when indexing, and no character + set or language information is attached to them. That's okay as long as + Sphinx only needs to store and return the strings to the calling + application verbatim. But when you ask Sphinx to sort by a string value, + that request immediately becomes quite ambiguous.

First, single-byte (ASCII, or ISO-8859-1, or Windows-1251) strings + need to be processed differently that the UTF-8 ones that may encode + every character with a variable number of bytes. So we need to know what + is the character set type to interepret the raw bytes as meaningful + characters properly.

Second, we additionally need to know the language-specific string + sorting rules. For instance, when sorting according to US rules in en_US + locale, the accented character '' (small letter i with diaeresis) + should be placed somewhere after 'z'. However, when sorting with French + rules and fr_FR locale in mind, it should be placed between 'i' and 'j'. + And some other set of rules might choose to ignore accents at all, + allowing '' and 'i' to be mixed arbitrarily.

Third, but not least, we might need case-sensitive sorting in some + scenarios and case-insensitive sorting in some others.

Collations combine all of the above: the character set, the + lanugage rules, and the case sensitivity. Sphinx currently provides the + following four collations.

  1. libc_ci

  2. +
  3. libc_cs

  4. +
  5. utf8_general_ci

  6. +
  7. binary

  8. +
+

The first two collations rely on several standard C library (libc) + calls and can thus support any locale that is installed on your system. + They provide case-insensitive (_ci) and case-sensitive (_cs) comparisons + respectively. By default they will use C locale, effectively resorting + to bytewise comparisons. To change that, you need to specify a different + available locale using collation_libc_locale + directive. The list of locales available on your system can usually be + obtained with the locale command:

+$ locale -a
+C
+en_AG
+en_AU.utf8
+en_BW.utf8
+en_CA.utf8
+en_DK.utf8
+en_GB.utf8
+en_HK.utf8
+en_IE.utf8
+en_IN
+en_NG
+en_NZ.utf8
+en_PH.utf8
+en_SG.utf8
+en_US.utf8
+en_ZA.utf8
+en_ZW.utf8
+es_ES
+fr_FR
+POSIX
+ru_RU.utf8
+ru_UA.utf8
+

The specific list of the system locales may vary. Consult your OS + documentation to install additional needed locales.

utf8_general_ci and binary + locales are built-in into Sphinx. The first one is a generic collation + for UTF-8 data (without any so-called language tailoring); it should + behave similar to utf8_general_ci collation in MySQL. + The second one is a simple bytewise comparison.

Collation can be overriden via SphinxQL on a per-session basis + using SET collation_connection statement. All subsequent + SphinxQL queries will use this collation. SphinxAPI and SphinxSE queries + will use the server default collation, as specified in collation_server configuration + directive. Sphinx currently defaults to libc_ci + collation.

Collations should affect all string attribute comparisons, + including those within ORDER BY and GROUP BY, so differently ordered or + grouped results can be returned depending on the collation + chosen.

+

5.13. User-defined functions (UDF)

+

Starting with 2.0.1-beta, Sphinx supports User-Defined Functions, + or UDF for short. They can be loaded and unloaded dynamically into + searchd without having to restart the daemon, and + used in expressions when searching. UDF features at a glance are as + follows.

  • Functions can take integer (both 32-bit and 64-bit), float, + string, or MVA arguments.

  • +
  • Functions can return integer or float values.

  • +
  • Functions can check the argument number, types, and names + and raise errors.

  • +
  • Only simple functions (that is, non-aggregate ones) are + currently supported.

  • +
+

User-defined functions need your OS to support dynamically + loadable libraries (aka shared objects). Most of the modern OSes are + eligible, including Linux, Windows, MacOS, Solaris, BSD and others. (The + internal testing has been done on Linux and Windows.) The UDF libraries + must reside in a directory specified by plugin_dir directive, and the server + must be configured to use workers = threads mode. + Relative paths to the library files are not allowed. Once the library is + succesfully built and copied to the trusted location, you can then + dynamically install and deinstall the functions using CREATE FUNCTION and DROP FUNCTION statements + respectively. A single library can contain multiple functions. A library + gets loaded when you first install a function from it, and unloaded when + you deinstall all the functions from that library.

The library functions that will implement a UDF visible to SQL + statements need to follow C calling convention, and a simple naming + convention. Sphinx source distribution provides a sample file, src/udfexample.c, + that defines a few simple functions showing how to work with integer, + string, and MVA arguments; you can use that one as a foundation for your + new functions. It includes the UDF interface header file, src/sphinxudf.h, + that defines the required types and structures. + sphinxudf.h header is standalone, that is, does not + require any other parts of Sphinx source to compile.

Every function that you intend to use in your SELECT statements + requires at least two corresponding C/C++ functions: the initialization + call, and the function call itself. You can also optionally define the + deinitialization call if your function requires any post-query cleanup. + (For instance, if you were allocating any memory in either the + initialization call or the function calls.) Function names in SQL are + case insensitive, C function names are not. They need to be all + lower-case. Mistakes in function name prevent UDFs from loading. You + also have to pay special attention to the calling convention used when + compiling, the list and the types of arguments, and the return type of + the main function call. Mistakes in either are likely to crash the + server, or result in unexpected results in the best case. Last but not + least, all functions need to be thread-safe.

Let's assume for the sake of example that your UDF name in + SphinxQL will be MYFUNC. The initialization, main, and + deinitialization functions would then need to be named as follows and + take the following arguments:

+/// initialization function
+/// called once during query initialization
+/// returns 0 on success
+/// returns non-zero and fills error_message buffer on failure
+int myfunc_init ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args,
+                  char * error_message );
+
+/// main call function
+/// returns the computed value
+/// writes non-zero value into error_flag to indicate errors
+RETURN_TYPE myfunc ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args,
+                     char * error_flag );
+
+/// optional deinitialization function
+/// called once to cleanup once query processing is done
+void myfunc_deinit ( SPH_UDF_INIT * init );
+

The two mentioned structures, SPH_UDF_INIT and + SPH_UDF_ARGS, are defined in the + src/sphinxudf.h interface header and documented + there. RETURN_TYPE of the main function must be one of the + following:

  • int for the functions that return INT.

  • +
  • sphinx_int64_t for the functions that return + BIGINT.

  • +
  • float for the functions that return + FLOAT.

  • +
+

The calling sequence is as follows. myfunc_init() is + called once when initializing the query. It can return a non-zero code + to indicate a failure; in that case query is not executed, and the error + message from the error_message buffer is returned. + Otherwise, myfunc() is be called for every row, and a + myfunc_deinit() is then called when the query ends. + myfunc() can indicate an error by writing a non-zero byte + value to error_flag, in that case, it will no more be + called for subsequent rows, and a default value of 0 will be + substituted. Sphinx might or might not choose to terminate such queries + early, neither behavior is currently guaranteed.

+

Chapter 6. Command line tools reference

+ +

As mentioned elsewhere, Sphinx is not a single program called + 'sphinx', but a collection of 4 separate programs which collectively form + Sphinx. This section covers these tools and how to use them.

6.1. indexer command reference

+

indexer is the first of the two principle + tools as part of Sphinx. Invoked from either the command line directly, + or as part of a larger script, indexer is solely + responsible for gathering the data that will be searchable.

The calling syntax for indexer is as + follows:

+indexer [OPTIONS] [indexname1 [indexname2 [...]]]
+

Essentially you would list the different possible indexes (that + you would later make available to search) in + sphinx.conf, so when calling + indexer, as a minimum you need to be telling it + what index (or indexes) you want to index.

If sphinx.conf contained details on 2 + indexes, mybigindex and + mysmallindex, you could do the following:

+$ indexer mybigindex
+$ indexer mysmallindex mybigindex
+

As part of the configuration file, + sphinx.conf, you specify one or more indexes for + your data. You might call indexer to reindex one of + them, ad-hoc, or you can tell it to process all indexes - you are not + limited to calling just one, or all at once, you can always pick some + combination of the available indexes.

The majority of the options for indexer are + given in the configuration file, however there are some options you + might need to specify on the command line as well, as they can affect + how the indexing operation is performed. These options are: +

  • --config <file> (-c + <file> for short) tells + indexer to use the given file as its + configuration. Normally, it will look for + sphinx.conf in the installation directory + (e.g. /usr/local/sphinx/etc/sphinx.conf if + installed into /usr/local/sphinx), followed + by the current directory you are in when calling + indexer from the shell. This is most of use + in shared environments where the binary files are installed + somewhere like /usr/local/sphinx/ but you + want to provide users with the ability to make their own custom + Sphinx set-ups, or if you want to run multiple instances on a + single server. In cases like those you could allow them to create + their own sphinx.conf files and pass them to + indexer with this option. For example: +

    +$ indexer --config /home/myuser/sphinx.conf myindex
    +
  • +
  • --all tells indexer to + update every index listed in sphinx.conf, + instead of listing individual indexes. This would be useful in + small configurations, or cron-type or + maintenance jobs where the entire index set will get rebuilt each + day, or week, or whatever period is best. Example usage: +

    +$ indexer --config /home/myuser/sphinx.conf --all
    +
  • +
  • --rotate is used for rotating indexes. + Unless you have the situation where you can take the search + function offline without troubling users, you will almost + certainly need to keep search running whilst indexing new + documents. --rotate creates a second index, + parallel to the first (in the same place, simply including + .new in the filenames). Once complete, + indexer notifies searchd + via sending the SIGHUP signal, and + searchd will attempt to rename the indexes + (renaming the existing ones to include .old + and renaming the .new to replace them), and + then start serving from the newer files. Depending on the setting + of seamless_rotate, + there may be a slight delay in being able to search the newer + indexes. Example usage:

    +$ indexer --rotate --all
    +
  • +
  • --quiet tells indexer + not to output anything, unless there is an error. Again, most used + for cron-type, or other script jobs where the + output is irrelevant or unnecessary, except in the event of some + kind of error. Example usage:

    +$ indexer --rotate --all --quiet
    +
  • +
  • --noprogress does not display progress + details as they occur; instead, the final status details (such as + documents indexed, speed of indexing and so on are only reported + at completion of indexing. In instances where the script is not + being run on a console (or 'tty'), this will be on by default. + Example usage:

    +$ indexer --rotate --all --noprogress
    +
  • +
  • --buildstops <outputfile.text> + <N> reviews the index source, as if it were + indexing the data, and produces a list of the terms that are being + indexed. In other words, it produces a list of all the searchable + terms that are becoming part of the index. Note; it does not + update the index in question, it simply processes the data 'as if' + it were indexing, including running queries defined with + sql_query_pre or sql_query_post. + outputfile.txt will contain the list of + words, one per line, sorted by frequency with most frequent first, + and N specifies the maximum number of words + that will be listed; if sufficiently large to encompass every word + in the index, only that many words will be returned. Such a + dictionary list could be used for client application features + around "Did you mean..." functionality, usually in conjunction + with --buildfreqs, below. Example: +

    +$ indexer myindex --buildstops word_freq.txt 1000
    +

    This would produce a document in the current directory, + word_freq.txt with the 1,000 most common + words in 'myindex', ordered by most common first. Note that the + file will pertain to the last index indexed when specified with + multiple indexes or --all (i.e. the last one + listed in the configuration file)

  • +
  • --buildfreqs works with + --buildstops (and is ignored if + --buildstops is not specified). As + --buildstops provides the list of words used + within the index, --buildfreqs adds the quantity + present in the index, which would be useful in establishing + whether certain words should be considered stopwords if they are + too prevalent. It will also help with developing "Did you mean..." + features where you can how much more common a given word compared + to another, similar one. Example:

    +$ indexer myindex --buildstops word_freq.txt 1000 --buildfreqs
    +

    This would produce the word_freq.txt as + above, however after each word would be the number of times it + occurred in the index in question.

  • +
  • --merge <dst-index> <src-index> + is used for physically merging indexes together, for example if + you have a main+delta scheme, where the main index rarely changes, + but the delta index is rebuilt frequently, and + --merge would be used to combine the two. The + operation moves from right to left - the contents of + src-index get examined and physically + combined with the contents of dst-index and + the result is left in dst-index. In + pseudo-code, it might be expressed as: dst-index += + src-index An example:

    +$ indexer --merge main delta --rotate
    +

    In the above example, where the main is the master, rarely + modified index, and delta is the less frequently modified one, you + might use the above to call indexer to + combine the contents of the delta into the main index and rotate + the indexes.

  • +
  • --merge-dst-range <attr> <min> + <max> runs the filter range given upon merging. + Specifically, as the merge is applied to the destination index (as + part of --merge, and is ignored if + --merge is not specified), + indexer will also filter the documents ending + up in the destination index, and only documents will pass through + the filter given will end up in the final index. This could be + used for example, in an index where there is a 'deleted' + attribute, where 0 means 'not deleted'. Such an index could be + merged with:

    +$ indexer --merge main delta --merge-dst-range deleted 0 0
    +

    Any documents marked as deleted (value 1) would be removed + from the newly-merged destination index. It can be added several + times to the command line, to add successive filters to the merge, + all of which must be met in order for a document to become part of + the final index.

  • +
  • --dump-rows <FILE> dumps rows fetched + by SQL source(s) into the specified file, in a MySQL compatible + syntax. Resulting dumps are the exact representation of data as + received by indexer and help to repeat + indexing-time issues.

  • +
  • --verbose guarantees that every row that + caused problems indexing (duplicate, zero, or missing document ID; + or file field IO issues; etc) will be reported. By default, this + option is off, and problem summaries may be reported + instead.

  • +
  • --sighup-each is useful when you are + rebuilding many big indexes, and want each one rotated into + searchd as soon as possible. With + --sighup-each, indexer will + send a SIGHUP signal to searchd after succesfully completing the + work on each index. (The default behavior is to send a single + SIGHUP after all the indexes were built.)

  • +
  • --print-queries prints out SQL queries that + indexer sends to the database, along with SQL + connection and disconnection events. That is useful to diagnose + and fix problems with SQL sources.

  • +
+

6.2. searchd command reference

+

searchd is the second of the two principle + tools as part of Sphinx. searchd is the part of the + system which actually handles searches; it functions as a server and is + responsible for receiving queries, processing them and returning a + dataset back to the different APIs for client applications.

Unlike indexer, searchd + is not designed to be run either from a regular script or command-line + calling, but instead either as a daemon to be called from init.d (on + Unix/Linux type systems) or to be called as a service (on Windows-type + systems), so not all of the command line options will always apply, and + so will be build-dependent.

Calling searchd is simply a case of:

+$ searchd [OPTIONS]
+

The options available to searchd on all + builds are:

  • --help (-h for short) lists + all of the parameters that can be called in your particular build of + searchd.

  • +
  • --config <file> (-c + <file> for short) tells searchd + to use the given file as its configuration, just as with + indexer above.

  • +
  • --stop is used to asynchronously stop + searchd, using the details of the PID file as + specified in the sphinx.conf file, so you may + also need to confirm to searchd which + configuration file to use with the --config option. + NB, calling --stop will also make sure any changes + applied to the indexes with UpdateAttributes() + will be applied to the index files themselves. Example: +

    +$ searchd --config /home/myuser/sphinx.conf --stop
    +
  • +
  • --stopwait is used to synchronously stop + searchd. --stop essentially + tells the running instance to exit (by sending it a SIGTERM) and + then immediately returns. --stopwait will also + attempt to wait until the running searchd + instance actually finishes the shutdown (eg. saves all the pending + attribute changes) and exits. Example:

    +$ searchd --config /home/myuser/sphinx.conf --stopwait
    +

    Possible exit codes are as follows:

    • 0 on success;

    • +
    • 1 if connection to running searchd daemon failed;

    • +
    • 2 if daemon reported an error during shutdown;

    • +
    • 3 if daemon crashed during shutdown.

    • +
  • +
  • --status command is used to query running + searchd instance status, using the connection + details from the (optionally) provided configuration file. It will + try to connect to the running instance using the first configured + UNIX socket or TCP port. On success, it will query for a number of + status and performance counter values and print them. You can use + Status() API call to access + the very same counters from your application. Examples: +

    +$ searchd --status
    +$ searchd --config /home/myuser/sphinx.conf --status
    +
  • +
  • --pidfile is used to explicitly state a PID + file, where the process information is stored regarding + searchd, used for inter-process communications + (for example, indexer will need to know the PID + to contact searchd for rotating indexes). + Normally, searchd would use a PID if running in + regular mode (i.e. not with --console), but it is + possible that you will be running it in console mode whilst the + index is being updated and rotated, for which a PID file will be + needed.

    +$ searchd --config /home/myuser/sphinx.conf --pidfile /home/myuser/sphinx.pid
    +
  • +
  • --console is used to force + searchd into console mode; typically it will be + running as a conventional server application, and will aim to dump + information into the log files (as specified in + sphinx.conf). Sometimes though, when debugging + issues in the configuration or the daemon itself, or trying to + diagnose hard-to-track-down problems, it may be easier to force it + to dump information directly to the console/command line from which + it is being called. Running in console mode also means that the + process will not be forked (so searches are done in sequence) and + logs will not be written to. (It should be noted that console mode + is not the intended method for running + searchd.) You can invoke it as such: +

    +$ searchd --config /home/myuser/sphinx.conf --console
    +
  • +
  • --logdebug enables additional debug output in + the daemon log. Should only be needed rarely, to assist with + debugging issues that could not be easily reproduced on + request.

  • +
  • --iostats is used in conjuction with the + logging options (the query_log will need to have + been activated in sphinx.conf) to provide more + detailed information on a per-query basis as to the input/output + operations carried out in the course of that query, with a slight + performance hit and of course bigger logs. Further details are + available under the query log + format section. You might start searchd + thus:

    +$ searchd --config /home/myuser/sphinx.conf --iostats
    +
  • +
  • --cpustats is used to provide actual CPU time + report (in addition to wall time) in both query log file (for every + given query) and status report (aggregated). It depends on + clock_gettime() system call and might therefore be unavailable on + certain systems. You might start searchd thus: +

    +$ searchd --config /home/myuser/sphinx.conf --cpustats
    +
  • +
  • --port portnumber (-p for + short) is used to specify the port that searchd + should listen on, usually for debugging purposes. This will usually + default to 9312, but sometimes you need to run it on a different + port. Specifying it on the command line will override anything + specified in the configuration file. The valid range is 0 to 65535, + but ports numbered 1024 and below usually require a privileged + account in order to run. An example of usage:

    +$ searchd --port 9313
    +
  • +
  • --listen ( address ":" port | port | path ) [ ":" + protocol ] (or -l for short) Works as + --port, but allow you to specify not only the port, + but full path, as IP address and port, or Unix-domain socket path, + that searchd will listen on. Otherwords, you + can specify either an IP address (or hostname) and port number, or + just a port number, or Unix socket path. If you specify port number + but not the address, searchd will listen on all network interfaces. + Unix path is identified by a leading slash. As the last param you + can also specify a protocol handler (listener) to be used for + connections on this socket. Supported protocol values are 'sphinx' + (Sphinx 0.9.x API protocol) and 'mysql41' (MySQL protocol used since + 4.1 upto at least 5.1).

  • +
  • --index <index> (or -i + <index> for short) forces this instance of + searchd only to serve the specified index. Like + --port, above, this is usually for debugging + purposes; more long-term changes would generally be applied to the + configuration file itself. Example usage:

    +$ searchd --index myindex
    +
  • +
  • --strip-path strips the path names from all + the file names referenced from the index (stopwords, wordforms, + exceptions, etc). This is useful for picking up indexes built on + another machine with possibly different path layouts.

  • +
+

There are some options for searchd that are + specific to Windows platforms, concerning handling as a service, are + only be available on Windows binaries.

Note that on Windows searchd will default to + --console mode, unless you install it as a + service.

  • --install installs + searchd as a service into the Microsoft + Management Console (Control Panel / Administrative Tools / + Services). Any other parameters specified on the command line, where + --install is specified will also become part of the + command line on future starts of the service. For example, as part + of calling searchd, you will likely also need + to specify the configuration file with --config, + and you would do that as well as specifying + --install. Once called, the usual start/stop + facilities will become available via the management console, so any + methods you could use for starting, stopping and restarting services + would also apply to searchd. Example: +

    +C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install
    +   --config C:\Sphinx\sphinx.conf
    +

    If you wanted to have the I/O stats every time you started + searchd, you would specify its option on the + same line as the --install command thus: +

    +C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install
    +   --config C:\Sphinx\sphinx.conf --iostats
    +
  • +
  • --delete removes the service from the + Microsoft Management Console and other places where services are + registered, after previously installed with + --install. Note, this does not uninstall the + software or delete the indexes. It means the service will not be + called from the services systems, and will not be started on the + machine's next start. If currently running as a service, the current + instance will not be terminated (until the next reboot, or + searchd is called with + --stop). If the service was installed with a custom + name (with --servicename), the same name will need + to be specified with --servicename when calling to + uninstall. Example:

    +C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --delete
    +
  • +
  • --servicename <name> applies the given + name to searchd when installing or deleting the + service, as would appear in the Management Console; this will + default to searchd, but if being deployed on servers where multiple + administrators may log into the system, or a system with multiple + searchd instances, a more descriptive name may + be applicable. Note that unless combined with + --install or --delete, this option + does not do anything. Example:

    +C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install
    +   --config C:\Sphinx\sphinx.conf --servicename SphinxSearch
    +
  • +
  • --ntservice is the option that is passed by + the Management Console to searchd to invoke it + as a service on Windows platforms. It would not normally be + necessary to call this directly; this would normally be called by + Windows when the service would be started, although if you wanted to + call this as a regular service from the command-line (as the + complement to --console) you could do so in + theory.

  • +
+

Last but not least, as every other daemon, + searchd supports a number of signals.

SIGTERM
+

Initiates a clean shutdown. New queries will not be + handled; but queries that are already started will not be + forcibly interrupted.

SIGHUP
+

Initiates index rotation. Depending on the value of seamless_rotate setting, + new queries might be shortly stalled; clients will receive + temporary errors.

SIGUSR1
+

Forces reopen of searchd log and query log files, letting + you implement log file rotation.

+

6.3. search command reference

+

search is one of the helper tools within the + Sphinx package. Whereas searchd is responsible for + searches in a server-type environment, search is + aimed at testing the index from the command line, and testing the index + quickly without building a framework to make the connection to the + server and process its response.

Note: search is not intended to be deployed + as part of a client application; it is strongly recommended you do not + write an interface to search instead of + searchd, and none of the bundled client APIs + support this method. (In any event, search will + reload files each time, whereas searchd will cache + them in memory for performance.)

That said, many types of query that you could build in the APIs + could also be made with search, however for very + complex searches it may be easier to construct them using a small script + and the corresponding API. Additionally, some newer features may be + available in the searchd system that have not yet + been brought into search.

The calling syntax for search is as + follows:

+search [OPTIONS] word1 [word2 [word3 [...]]]
+

When calling search, it is not necessary to + have searchd running; simply make sure that the + account running the search program has read access + to the configuration file and the index files.

The default behaviour is to apply a search for word1 (AND word2 + AND word3... as specified) to all fields in all indexes as given in the + configuration file. If constructing the equivalent in the API, this + would be the equivalent to passing SPH_MATCH_ALL to + SetMatchMode, and specifying * as the + indexes to query as part of Query.

There are many options available to search. + Firstly, the general options:

  • --config <file> (-c + <file> for short) tells search + to use the given file as its configuration, just as with + indexer above.

  • +
  • --index <index> (-i + <index> for short) tells + search to limit searching to the specified + index only; normally it would attempt to search all of the + physical indexes listed in sphinx.conf, not + any distributed ones.

  • +
  • --stdin tells search + to accept the query from the standard input, rather than the + command line. This can be useful for testing purposes whereby you + could feed input via pipes and from scripts.

  • +
+

Options for setting matches:

  • --any (-a for short) + changes the matching mode to match any of the words as part of the + query (word1 OR word2 OR word3). In the API this would be + equivalent to passing SPH_MATCH_ANY to + SetMatchMode.

  • +
  • --phrase (-p for short) + changes the matching mode to match all of the words as part of the + query, and do so in the phrase given (not including punctuation). + In the API this would be equivalent to passing + SPH_MATCH_PHRASE to + SetMatchMode.

  • +
  • --boolean (-b for short) + changes the matching mode to Boolean matching. Note if using + Boolean syntax matching on the command line, you may need to + escape the symbols (with a backslash) to avoid the shell/command + line processor applying them, such as ampersands being escaped on + a Unix/Linux system to avoid it forking to the + search process, although this can be resolved + by using --stdin, as below. In the API this would + be equivalent to passing SPH_MATCH_BOOLEAN to + SetMatchMode.

  • +
  • --ext (-e for short) + changes the matching mode to Extended matching. In the API + this would be equivalent to passing + SPH_MATCH_EXTENDED to SetMatchMode, + and it should be noted that use of this mode is being discouraged + in favour of Extended2, below.

  • +
  • --ext2 (-e2 for short) + changes the matching mode to Extended matching, version 2. In + the API this would be equivalent to passing + SPH_MATCH_EXTENDED2 to SetMatchMode, + and it should be noted that use of this mode is being recommended + in favour of Extended, due to being more efficient and providing + other features.

  • +
  • --filter <attr> <v> (-f + <attr> <v> for short) filters the results + such that only documents where the attribute given (attr) matches + the value given (v). For example, --filter deleted + 0 only matches documents with an attribute called + 'deleted' where its value is 0. You can also add multiple filters + on the command line, by specifying multiple + --filter multiple times, however if you apply a + second filter to an attribute it will override the first defined + filter.

  • +
+

Options for handling the results:

  • --limit <count> (-l + count for short) limits the total number of matches back + to the number given. If a 'group' is specified, this will be the + number of grouped results. This defaults to 20 results if not + specified (as do the APIs)

  • +
  • --offset <count> (-o + <count> for short) offsets the result list by the + number of places set by the count; this would be used for + pagination through results, where if you have 20 results per + 'page', the second page would begin at offset 20, the third page + at offset 40, etc.

  • +
  • --group <attr> (-g + <attr> for short) specifies that results should be + grouped together based on the attribute specified. Like the GROUP + BY clause in SQL, it will combine all results where the attribute + given matches, and returns a set of results where each returned + result is the best from each group. Unless otherwise specified, + this will be the best match on relevance.

  • +
  • --groupsort <expr> (-gs + <expr> for short) instructs that when results are + grouped with --group, the expression given in + <expr> shall determine the order of the groups. Note, this + does not specify which is the best item within the group, only the + order in which the groups themselves shall be returned.

  • +
  • --sortby <clause> (-s + <clause> for short) specifies that results should + be sorted in the order listed in <clause>. This allows you + to specify the order you wish results to be presented in, ordering + by different columns. For example, you could say --sortby + "@weight DESC entrytime DESC" to sort entries first by + weight (or relevance) and where two or more entries have the same + weight, to then sort by the time with the highest time (newest) + first. You will usually need to put the items in quotes + (--sortby "@weight DESC") or use commas + (--sortby @weight,DESC) to avoid the items being + treated separately. Additionally, like the regular sorting modes, + if --group (grouping) is being used, this will + state how to establish the best match within each group.

  • +
  • --sortexpr expr (-S expr + for short) specifies that the search results should be presented + in an order determined by an arithmetic expression, stated in + expr. For example: --sortexpr "@weight + ( user_karma + + ln(pageviews) )*0.1" (again noting that this will have to + be quoted to avoid the shell dealing with the asterisk). Extended + sort mode is discussed in more detail under the + SPH_SORT_EXTENDED entry under the Sorting modes section of the + manual.

  • +
  • --sort=date specifies that the results + should be sorted by descending (i.e. most recent first) date. This + requires that there is an attribute in the index that is set as a + timestamp.

  • +
  • --rsort=date specifies that the results + should be sorted by ascending (i.e. oldest first) date. This + requires that there is an attribute in the index that is set as a + timestamp.

  • +
  • --sort=ts specifies that the results should + be sorted by timestamp in groups; it will return all of the + documents whose timestamp is within the last hour, then sorted + within that bracket for relevance. After, it would return the + documents from the last day, sorted by relevance, then the last + week and then the last month. It is discussed in more detail under + the SPH_SORT_TIME_SEGMENTS entry under the Sorting modes section of the + manual.

  • +
+

Other options:

  • --noinfo (-q for short) + instructs search not to look-up data in your + SQL database. Specifically, for debugging with MySQL and + search, you can provide it with a query to + look up the full article based on the returned document ID. It is + explained in more detail under the sql_query_info + directive.

  • +
+

6.4. spelldump command reference

+

spelldump is one of the helper tools within + the Sphinx package.

It is used to extract the contents of a dictionary file that uses + ispell or MySpell format, + which can help build word lists for wordforms - + all of the possible forms are pre-built for you.

Its general usage is:

+spelldump [options] <dictionary> <affix> [result] [locale-name]
+

The two main parameters are the dictionary's main file and its + affix file; usually these are named as + [language-prefix].dict and + [language-prefix].aff and will be available with + most common Linux distributions, as well as various places + online.

[result] specifies where the dictionary data + should be output to, and [locale-name] additionally + specifies the locale details you wish to use.

There is an additional option, -c [file], which + specifies a file for case conversion details.

Examples of its usage are:

+spelldump en.dict en.aff
+spelldump ru.dict ru.aff ru.txt ru_RU.CP1251
+spelldump ru.dict ru.aff ru.txt .1251
+

The results file will contain a list of all the words in the + dictionary in alphabetical order, output in the format of a wordforms + file, which you can use to customise for your specific circumstances. An + example of the result file:

+zone > zone
+zoned > zoned
+zoning > zoning
+
+

6.5. indextool command reference

+

indextool is one of the helper tools within + the Sphinx package, introduced in version 0.9.9-rc2. It is used to dump + miscellaneous debug information about the physical index. (Additional + functionality such as index verification is planned in the future, hence + the indextool name rather than just indexdump.) Its general usage + is:

+indextool <command> [options]
+

The only currently available option applies to all commands and + lets you specify the configuration file:

  • --config <file> (-c + <file> for short) overrides the built-in config + file names.

  • +
+

The commands are as follows:

  • --dumpheader FILENAME.sph quickly dumps the + provided index header file without touching any other index files or + even the configuration file. The report provides a breakdown of all + the index settings, in particular the entire attribute and field + list. Prior to 0.9.9-rc2, this command was present in CLI search + utility.

  • +
  • --dumpconfig FILENAME.sph dumps the index + definition from the given index header file in (almost) compliant + sphinx.conf file format. Added in version + 2.0.1-beta.

  • +
  • --dumpheader INDEXNAME dumps index header by + index name with looking up the header path in the configuration + file.

  • +
  • --dumpdocids INDEXNAME dumps document IDs by + index name. It takes the data from attribute (.spa) file and + therefore requires docinfo=extern to work.

  • +
  • --dumphitlist INDEXNAME KEYWORD dumps all the + hits (occurences) of a given keyword in a given index, with keyword + specified as text.

  • +
  • --dumphitlist INDEXNAME --wordid ID dumps all + the hits (occurences) of a given keyword in a given index, with + keyword specified as internal numeric ID.

  • +
  • --htmlstrip INDEXNAME filters stdin using + HTML stripper settings for a given index, and prints the filtering + results to stdout. Note that the settings will be taken from + sphinx.conf, and not the index header.

  • +
  • --check INDEXNAME checks the index data files + for consistency errors that might be introduced either by bugs in + indexer and/or hardware faults.

  • +
  • --strip-path strips the path names from all + the file names referenced from the index (stopwords, wordforms, + exceptions, etc). This is useful for checking indexes built on + another machine with possibly different path layouts.

  • +
+

Chapter 7. SphinxQL reference

+ +

SphinxQL is our SQL dialect that exposes all of the search daemon + functionality using a standard SQL syntax with a few Sphinx-specific + extensions. Everything available via the SphinxAPI is also available + SphinxQL but not vice versa; for instance, writes into RT indexes are only + available via SphinxQL. This chapter documents supported SphinxQL + statements syntax.

7.1. SELECT syntax

+
+SELECT
+    select_expr [, select_expr ...]
+    FROM index [, index2 ...]
+    [WHERE where_condition]
+    [GROUP BY {col_name | expr_alias}]
+    [ORDER BY {col_name | expr_alias} {ASC | DESC} [, ...]]
+    [WITHIN GROUP ORDER BY {col_name | expr_alias} {ASC | DESC}]
+    [LIMIT offset, row_count]
+    [OPTION opt_name = opt_value [, ...]]
+

SELECT statement was introduced in version 0.9.9-rc2. It's + syntax is based upon regular SQL but adds several Sphinx-specific + extensions and has a few omissions (such as (currently) missing support + for JOINs). Specifically,

  • Column list clause. Column names, arbitrary expressions, and + star ('*') are all allowed (ie. SELECT @id, group_id*123+456 + AS expr1 FROM test1 will work). Unlike in regular SQL, all + computed expressions must be aliased with a valid identifier. + Starting with version 2.0.1-beta, AS is optional. + Special names such as @id and @weight should currently be used + with leading at-sign. This at-sign requirement will be lifted in + the future.

  • +
  • FROM clause. FROM clause should contain the list of indexes + to search through. Unlike in regular SQL, comma means enumeration + of full-text indexes as in Query() API call rather than + JOIN.

  • +
  • WHERE clause. This clause will map both to fulltext query + and filters. Comparison operators (=, !=, <, >, <=, + >=), IN, AND, NOT, and BETWEEN are all supported and map + directly to filters. OR is not supported yet but will be in the + future. MATCH('query') is supported and maps to fulltext query. + Query will be interpreted according to full-text query language rules. + There must be at most one MATCH() in the clause. Starting with + version 2.0.1-beta, {col_name | expr_alias} [NOT] IN + @uservar condition syntax is supported. (Refer to Section 7.7, “SET syntax” for a discussion of global user + variables.)

  • +
  • GROUP BY clause. Currently only supports grouping by a + single column. The column however can be a computed expression: +

    +SELECT *, group_id*1000+article_type AS gkey FROM example GROUP BY gkey
    +

    Aggregate functions (AVG(), MIN(), MAX(), SUM()) in column + list clause are supported. Arguments to aggregate functions can be + either plain attributes or arbitrary expressions. COUNT(*) is + implicitly supported as using GROUP BY will add @count column to + result set. Explicit support might be added in the future. + COUNT(DISTINCT attr) is supported. Currently there can be at most + one COUNT(DISTINCT) per query and an argument needs to be an + attribute. Both current restrictions on COUNT(DISTINCT) might be + lifted in the future.

    +SELECT *, AVG(price) AS avgprice, COUNT(DISTINCT storeid)
    +FROM products
    +WHERE MATCH('ipod')
    +GROUP BY vendorid
    +

    Starting with 2.0.1-beta, GROUP BY on a string attribute is + supported, with respect for current collation (see Section 5.12, “Collations”).

  • +
  • WITHIN GROUP ORDER BY clause. This is a Sphinx specific + extension that lets you control how the best row within a group + will to be selected. The syntax matches that of regular ORDER BY + clause:

    +SELECT *, INTERVAL(posted,NOW()-7*86400,NOW()-86400) AS timeseg
    +FROM example WHERE MATCH('my search query')
    +GROUP BY siteid
    +WITHIN GROUP ORDER BY @weight DESC
    +ORDER BY timeseg DESC, @weight DESC
    +

    Starting with 2.0.1-beta, WITHIN GROUP ORDER BY on a string + attribute is supported, with respect for current collation (see + Section 5.12, “Collations”).

  • +
  • ORDER BY clause. Unlike in regular SQL, only column names + (not expressions) are allowed and explicit ASC and DESC are + required. The columns however can be computed expressions: +

    +SELECT *, @weight*10+docboost AS skey FROM example ORDER BY skey
    +

    Starting with 2.0.1-beta, ORDER BY on a string attribute is + supported, with respect for current collation (see Section 5.12, “Collations”).

  • +
  • LIMIT clause. Both LIMIT N and LIMIT M,N forms are + supported. Unlike in regular SQL (but like in Sphinx API), an + implicit LIMIT 0,20 is present by default.

  • +
  • OPTION clause. This is a Sphinx specific extension that lets + you control a number of per-query options. The syntax is: +

    +OPTION <optionname>=<value> [ , ... ]
    +

    Supported options and respectively allowed values are: +

    • 'ranker' - any of 'proximity_bm25', 'bm25', 'none', + 'wordcount', 'proximity', 'matchany', or 'fieldmask'

    • +
    • 'max_matches' - integer (per-query max matches + value)

    • +
    • 'cutoff' - integer (max found matches + threshold)

    • +
    • 'max_query_time' - integer (max search time threshold, + msec)

    • +
    • 'retry_count' - integer (distributed retries + count)

    • +
    • 'retry_delay' - integer (distributed retry delay, + msec)

    • +
    • 'field_weights' - a named integer list (per-field user + weights for ranking)

    • +
    • 'index_weights' - a named integer list (per-index user + weights for ranking)

    • +
    • 'reverse_scan' - 0 or 1, lets you control the order in + which full-scan query processes the rows

    • +
    +

    Example:

    +SELECT * FROM test WHERE MATCH('@title hello @body world')
    +OPTION ranker=bm25, max_matches=3000,
    +    field_weights=(title=10, body=3)
    +
  • +
+

7.2. SHOW META syntax

+
+SHOW META
+

SHOW META shows additional meta-information about the + latest query such as query time and keyword statistics:

+mysql> SELECT * FROM test1 WHERE MATCH('test|one|two');
++------+--------+----------+------------+
+| id   | weight | group_id | date_added |
++------+--------+----------+------------+
+|    1 |   3563 |      456 | 1231721236 |
+|    2 |   2563 |      123 | 1231721236 |
+|    4 |   1480 |        2 | 1231721236 |
++------+--------+----------+------------+
+3 rows in set (0.01 sec)
+
+mysql> SHOW META;
++---------------+-------+
+| Variable_name | Value |
++---------------+-------+
+| total         | 3     |
+| total_found   | 3     |
+| time          | 0.005 |
+| keyword[0]    | test  |
+| docs[0]       | 3     |
+| hits[0]       | 5     |
+| keyword[1]    | one   |
+| docs[1]       | 1     |
+| hits[1]       | 2     |
+| keyword[2]    | two   |
+| docs[2]       | 1     |
+| hits[2]       | 2     |
++---------------+-------+
+12 rows in set (0.00 sec)
+
+

7.3. SHOW WARNINGS syntax

+
+SHOW WARNINGS
+

SHOW WARNINGS statement, introduced in version 0.9.9-rc2, + can be used to retrieve the warning produced by the latest query. The + error message will be returned along with the query itself: +

+mysql> SELECT * FROM test1 WHERE MATCH('@@title hello') \G
+ERROR 1064 (42000): index test1: syntax error, unexpected TOK_FIELDLIMIT
+near '@title hello'
+
+mysql> SELECT * FROM test1 WHERE MATCH('@title -hello') \G
+ERROR 1064 (42000): index test1: query is non-computable (single NOT operator)
+
+mysql> SELECT * FROM test1 WHERE MATCH('"test doc"/3') \G
+*************************** 1. row ***************************
+        id: 4
+    weight: 2500
+  group_id: 2
+date_added: 1231721236
+1 row in set, 1 warning (0.00 sec)
+
+mysql> SHOW WARNINGS \G
+*************************** 1. row ***************************
+  Level: warning
+   Code: 1000
+Message: quorum threshold too high (words=2, thresh=3); replacing quorum operator
+         with AND operator
+1 row in set (0.00 sec)
+
+

7.4. SHOW STATUS syntax

+

SHOW STATUS, introduced in version 0.9.9-rc2, displays a + number of useful performance counters. IO and CPU counters will only be + available if searchd was started with --iostats and --cpustats switches + respectively.

+mysql> SHOW STATUS;
++--------------------+-------+
+| Variable_name      | Value |
++--------------------+-------+
+| uptime             | 216   |
+| connections        | 3     |
+| maxed_out          | 0     |
+| command_search     | 0     |
+| command_excerpt    | 0     |
+| command_update     | 0     |
+| command_keywords   | 0     |
+| command_persist    | 0     |
+| command_status     | 0     |
+| agent_connect      | 0     |
+| agent_retry        | 0     |
+| queries            | 10    |
+| dist_queries       | 0     |
+| query_wall         | 0.075 |
+| query_cpu          | OFF   |
+| dist_wall          | 0.000 |
+| dist_local         | 0.000 |
+| dist_wait          | 0.000 |
+| query_reads        | OFF   |
+| query_readkb       | OFF   |
+| query_readtime     | OFF   |
+| avg_query_wall     | 0.007 |
+| avg_query_cpu      | OFF   |
+| avg_dist_wall      | 0.000 |
+| avg_dist_local     | 0.000 |
+| avg_dist_wait      | 0.000 |
+| avg_query_reads    | OFF   |
+| avg_query_readkb   | OFF   |
+| avg_query_readtime | OFF   |
++--------------------+-------+
+29 rows in set (0.00 sec)
+
+

7.5. INSERT and REPLACE syntax

+
+{INSERT | REPLACE} INTO index [(column, ...)]
+	VALUES (value, ...)
+	[, (...)]
+

INSERT statement, introduced in version 1.10-beta, is only + supported for RT indexes. It inserts new rows (documents) into an + existing index, with the provided column values.

ID column must be present in all cases. Rows with duplicate IDs + will not be overwritten by INSERT; use REPLACE to do that.

index is the name of RT index into which the new + row(s) should be inserted. The optional column names list lets you only + explicitly specify values for some of the columns present in the index. + All the other columns will be filled with their default values (0 for + scalar types, empty string for text types).

Expressions are not currently supported in INSERT and values + should be explicitly specified.

Multiple rows can be inserted using a single INSERT statement by + providing several comma-separated, parens-enclosed lists of rows + values.

+

7.6. DELETE syntax

+
+DELETE FROM index WHERE {id = value | id IN (val1 [, val2 [, ...]])}
+

DELETE statement, introduced in version 1.10-beta, is only + supported for RT indexes. It deletes existing rows (documents) from an + existing index based on ID.

index is the name of RT index from which the row + should be deleted. value is the row ID to be deleted. + Support for batch id IN (2,3,5) syntax was added in version + 2.0.1-beta.

Additional types of WHERE conditions (such as conditions on + attributes, etc) are planned, but not supported yet as of + 1.10-beta.

+

7.7. SET syntax

+
+SET [GLOBAL] server_variable_name = value
+SET GLOBAL @user_variable_name = (int_val1 [, int_val2, ...])
+

SET statement, introduced in version 1.10-beta, modifies a server + variable value. The variable names are case-insensitive. No variable + value changes survive server restart. There are the following classes of + the variables:

  1. per-session server variable (1.10-beta and above)

  2. +
  3. global server variable (2.0.1-beta and above)

  4. +
  5. global user variable (2.0.1-beta and above)

  6. +
+

Global user variables are shared between concurrent sessions. + Currently, the only supported value type is the list of BIGINTs, and + these variables can only be used along with IN() for filtering purpose. + The intended usage scenario is uploading huge lists of values to + searchd (once) and reusing them (many times) later, + saving on network overheads. Example:

+// in session 1
+mysql> SET GLOBAL @myfilter=(2,3,5,7,11,13);
+Query OK, 0 rows affected (0.00 sec)
+
+// later in session 2
+mysql> SELECT * FROM test1 WHERE group_id IN @myfilter;
++------+--------+----------+------------+-----------------+------+
+| id   | weight | group_id | date_added | title           | tag  |
++------+--------+----------+------------+-----------------+------+
+|    3 |      1 |        2 | 1299338153 | another doc     | 15   |
+|    4 |      1 |        2 | 1299338153 | doc number four | 7,40 |
++------+--------+----------+------------+-----------------+------+
+2 rows in set (0.02 sec)
+

Per-session and global server variables affect certain server + settings in the respective scope. Known per-session server variables + are:

AUTOCOMMIT = {0 | 1}
+

Whether any data modification statement should be + implicitly wrapped by BEGIN and COMMIT. Introduced in version + 1.10-beta.

COLLATION_CONNECTION = collation_name
+

Selects the collation to be used for ORDER BY or GROUP BY + on string values in the subsequent queries. Refer to Section 5.12, “Collations” for a list of known collation names. + Introduced in version 2.0.1-beta.

CHARACTER_SET_RESULTS = charset_name
+

Does nothing; a placeholder to support frameworks, + clients, and connectors that attempt to automatically enforce a + charset when connecting to a Sphinx server. Introduced in + version 2.0.1-beta.

+

Known global server variables are:

QUERY_LOG_FORMAT = {plain | sphinxql}
+

Changes the current log format. Introduced in version + 2.0.1-beta.

LOG_LEVEL = {info | debug | debugv | + debugvv}
+

Changes the current log verboseness level. Introduced in + version 2.0.1-beta.

+

Examples:

+mysql> SET autocommit=0;
+Query OK, 0 rows affected (0.00 sec)
+
+mysql> SET GLOBAL query_log_format=sphinxql;
+Query OK, 0 rows affected (0.00 sec)
+
+

7.8. BEGIN, COMMIT, and ROLLBACK syntax

+
+START TRANSACTION | BEGIN
+COMMIT
+ROLLBACK
+SET AUTOCOMMIT = {0 | 1}
+

BEGIN, COMMIT, and ROLLBACK statements were introduced in version + 1.10-beta. BEGIN statement (or its START TRANSACTION alias) forcibly + commits pending transaction, if any, and begins a new one. COMMIT + statement commits the current transaction, making all its changes + permanent. ROLLBACK statement rolls back the current transaction, + canceling all its changes. SET AUTOCOMMIT controls the autocommit mode + in the active session.

AUTOCOMMIT is set to 1 by default, meaning that every statement + that perfoms any changes on any index is implicitly wrapped in BEGIN and + COMMIT.

Transactions are limited to a single RT index, and also limited in + size. They are atomic, consistent, overly isolated, and durable. Overly + isolated means that the changes are not only invisible to the concurrent + transactions but even to the current session itself.

+

7.9. CALL SNIPPETS syntax

+
+CALL SNIPPETS(data, index, query[, opt_value AS opt_name[, ...]])
+

CALL SNIPPETS statement, introduced in version 1.10-beta, builds a + snippet from provided data and query, using specified index + settings.

data is the source data string to extract a + snippet from. index is the name of the index from which + to take the text processing settings. query is the + full-text query to build snippets for. Additional options are documented + in Section 8.7.1, “BuildExcerpts”. Usage example:

+CALL SNIPPETS('this is my document text', 'test1', 'hello world',
+    5 AS around, 200 AS limit)
+
+

7.10. CALL KEYWORDS syntax

+
+CALL KEYWORDS(text, index, [hits])
+

CALL KEYWORDS statement, introduced in version 1.10-beta, splits + text into particular keywords. It returns tokenized and normalized forms + of the keywords, and, optionally, keyword statistics.

text is the text to break down to keywords. + index is the name of the index from which to take the + text processing settings. hits is an optional boolean + parameter that specifies whether to return document and hit occurrence + statistics.

+

7.11. SHOW TABLES syntax

+
+SHOW TABLES
+

SHOW TABLES statement, introduced in version 2.0.1-beta, + enumerates all currently active indexes along with their types. As of + 2.0.1-beta, existing index types are local, + distributed, and rt respectively. + Example:

+mysql> SHOW TABLES;
++-------+-------------+
+| Index | Type        |
++-------+-------------+
+| dist1 | distributed |
+| rt    | rt          |
+| test1 | local       |
+| test2 | local       |
++-------+-------------+
+4 rows in set (0.00 sec)
+
+

7.12. DESCRIBE syntax

+
+{DESC | DESCRIBE} index
+

DESCRIBE statement, introduced in version 2.0.1-beta, lists index + columns and their associated types. Columns are document ID, full-text + fields, and attributes. The order matches that in which fields and + attributes are expected by INSERT and REPLACE statements. As of + 2.0.1-beta, column types are field, + integer, timestamp, + ordinal, bool, float, + bigint, string, and + mva. ID column will be typed either + integer or bigint based on whether the + binaries were built with 32-bit or 64-bit document ID support. + Example:

+mysql> DESC rt;
++---------+---------+
+| Field   | Type    |
++---------+---------+
+| id      | integer |
+| title   | field   |
+| content | field   |
+| gid     | integer |
++---------+---------+
+4 rows in set (0.00 sec)
+
+

7.13. CREATE FUNCTION syntax

+
+CREATE FUNCTION udf_name
+	RETURNS {INT | BIGINT | FLOAT}
+	SONAME 'udf_lib_file'
+

CREATE FUNCTION statement, introduced in version 2.0.1-beta, + installs a user-defined function (UDF) with + the given name and type from the given library file. The library file + must reside in a trusted plugin_dir directory. On success, the + function is available for use in all subsequent queries that the server + receives. Example:

+mysql> CREATE FUNCTION avgmva RETURNS INT SONAME 'udfexample.dll';
+Query OK, 0 rows affected (0.03 sec)
+
+mysql> SELECT *, AVGMVA(tag) AS q from test1;
++------+--------+---------+-----------+
+| id   | weight | tag     | q         |
++------+--------+---------+-----------+
+|    1 |      1 | 1,3,5,7 | 4.000000  |
+|    2 |      1 | 2,4,6   | 4.000000  |
+|    3 |      1 | 15      | 15.000000 |
+|    4 |      1 | 7,40    | 23.500000 |
++------+--------+---------+-----------+
+
+

7.14. DROP FUNCTION syntax

+
+DROP FUNCTION udf_name
+

DROP FUNCTION statement, introduced in version 2.0.1-beta, + deinstalls a user-defined function (UDF) with + the given name. On success, the function is no longer available for use + in subsequent queries. Pending concurrent queries will not be affected + and the library unload, if necessary, will be postponed until those + queries complete. Example:

+mysql> DROP FUNCTION avgmva;
+Query OK, 0 rows affected (0.00 sec)
+
+

7.15. SHOW VARIABLES syntax

+
+SHOW VARIABLES
+

Added in version 2.0.1-beta, this is currently a placeholder query + that does nothing and reports success. That is in order to keep + compatibility with frameworks and connectors that automatically execute + this statement.

+mysql> SHOW VARIABLES;
+Query OK, 0 rows affected (0.00 sec)
+
+

7.16. SHOW COLLATION syntax

+
+SHOW COLLATION
+

Added in version 2.0.1-beta, this is currently a placeholder query + that does nothing and reports success. That is in order to keep + compatibility with frameworks and connectors that automatically execute + this statement.

+mysql> SHOW COLLATION;
+Query OK, 0 rows affected (0.00 sec)
+
+

7.17. UPDATE syntax

+
+UPDATE index SET col1 = newval1 [, ...] WHERE ID = docid
+

UPDATE statement was added in version 2.0.1-beta. It can currently + update 32-bit integer attributes only. Multiple attributes and values + can be specified. Both RT and disk indexes are supported. Updates on + other attribute types are also planned.

+mysql> UPDATE myindex SET enabled=0 WHERE id=123;
+Query OK, 1 rows affected (0.00 sec)
+
+

7.18. Multi-statement queries

+

Starting version 2.0.1-beta, SphinxQL supports multi-statement + queries, or batches. Possible inter-statement optimizations described in + Section 5.11, “Multi-queries” do apply to SphinxQL just as well. The + batched queries should be separated by a semicolon. Your MySQL client + library needs to support MySQL multi-query mechanism and multiple result + set. For instance, mysqli interface in PHP and DBI/DBD libraries in Perl + are known to work.

Here's a PHP sample showing how to utilize mysqli interface with + Sphinx.

+<?php
+
+$link = mysqli_connect ( "127.0.0.1", "root", "", "", 9306 );
+if ( mysqli_connect_errno() )
+    die ( "connect failed: " . mysqli_connect_error() );
+
+$batch = "SELECT * FROM test1 ORDER BY group_id ASC;";
+$batch .= "SELECT * FROM test1 ORDER BY group_id DESC";
+
+if ( !mysqli_multi_query ( $link, $batch ) )
+    die ( "query failed" );
+
+do
+{
+    // fetch and print result set
+    if ( $result = mysqli_store_result($link) )
+    {
+        while ( $row = mysqli_fetch_row($result) )
+            printf ( "id=%s\n", $row[0] );
+        mysqli_free_result($result);
+    }
+
+    // print divider
+    if ( mysqli_more_results($link) )
+        printf ( "------\n" );
+
+} while ( mysqli_next_result($link) );
+

Its output with the sample test1 index included + with Sphinx is as follows.

+$ php test_multi.php
+id=1
+id=2
+id=3
+id=4
+------
+id=3
+id=4
+id=1
+id=2
+

The following statements can currently be used in a batch: SELECT, + SHOW WARNINGS, SHOW STATUS, and SHOW META. Arbitrary sequence of these + statements are allowed. The results sets returned should match those + that would be returned if the batched queries were sent one by + one.

+

7.19. Comment syntax

+

Since version 2.0.1-beta, SphinxQL supports C-style comment + syntax. Everything from an opening /* sequence to a closing + */ sequence is ignored. Comments can span multiple lines, + can not nest, and should not get logged. MySQL specific /*! ... + */ comments are also currently ignored. (As the comments support + was rather added for better compatibility with + mysqldump produced dumps, rather than improving + generaly query interoperability between Sphinx and MySQL.) +

+SELECT /*! SQL_CALC_FOUND_ROWS */ col1 FROM table1 WHERE ...
+
+

7.20. List of SphinxQL reserved keywords

+

A complete alphabetical list of keywords that are currently + reserved in SphinxQL syntax (and therefore can not be used as + identifiers).

+AND
+AS
+ASC
+AVG
+BEGIN
+BETWEEN
+BY
+CALL
+COLLATION
+COMMIT
+COUNT
+DELETE
+DESC
+DESCRIBE
+DISTINCT
+FALSE
+FROM
+GLOBAL
+GROUP
+ID
+IN
+INSERT
+INTO
+LIMIT
+MATCH
+MAX
+META
+MIN
+NOT
+NULL
+OPTION
+OR
+ORDER
+REPLACE
+ROLLBACK
+SELECT
+SET
+SHOW
+START
+STATUS
+SUM
+TABLES
+TRANSACTION
+TRUE
+UPDATE
+VALUES
+VARIABLES
+WARNINGS
+WEIGHT
+WHERE
+WITHIN
+
+

7.21. SphinxQL upgrade notes, version 2.0.1-beta

+

This section only applies to existing applications that use + SphinxQL versions prior to 2.0.1-beta.

In previous versions, SphinxQL just wrapped around SphinxAPI and + inherited its magic columns and column set quirks. Essentially, SphinxQL + queries could return (slightly) different columns and in a (slightly) + different order than it was explicitly requested in the query. Namely, + weight magic column (which is not a real column in any + index) was added at all times, and GROUP BY related @count, + @group, and @distinct magic columns were + conditionally added when grouping. Also, the order of columns + (attributes) in the result set was actually taken from the index rather + than the query. (So if you asked for columns C, B, A in your query but + they were in the A, B, C order in the index, they would have been + returned in the A, B, C order.)

In version 2.0.1-beta, we fixed that. SphinxQL is now more SQL + compliant (and will be further brought in as much compliance with + standard SQL syntax as possible). That is not yet a breaking change, + because searchd now supports compat_sphinxql_magics + directive that flips between the old "compatibility" mode and the new + "compliance" mode. However, the compatibility mode support is going to + be removed in future, so it's strongly advised to update SphinxQL + applications and switch to the compliance mode.

The important changes are as follows:

  • @ID magic name is deprecated in favor of + ID. Document ID is considered an + attribute.

  • +
  • WEIGHT is no longer implicitly returned, + because it is not actually a column (an index attribute), but + rather an internal function computed per each row (a match). You + have to explicitly ask for it, using the WEIGHT() + function. (The requirement to alias the result will be lifted in + the next release.)

    +SELECT id, WEIGHT() w FROM myindex WHERE MATCH('test')
    +
  • +
  • You can now use quoted reserved keywords as aliases. + The quote character is backtick ("`", ASCII code 96 decimal, 60 + hex). One particularly useful example would be returning + weight column like the old mode:

    +SELECT id, WEIGHT() `weight` FROM myindex WHERE MATCH('test')
    +
  • +
  • The column order is now different and should now match the + one expliclitly defined in the query. So if you are accessing + columns based on their position in the result set rather than the + name (for instance, by using mysql_fetch_row() rather + than mysql_fetch_assoc() in PHP), check and fix + the order of columns in your queries.

  • +
  • SELECT * return the columns in index order, as + it used to, including the ID column. However, SELECT + * does not automatically return WEIGHT(). To update + such queries in case you access columns by names, simply add it to + the query:

    +SELECT *, WEIGHT() `weight` FROM myindex WHERE MATCH('test')
    +

    Otherwise, i.e., in case you rely on column order, select + ID, weight, and then other columns:

    +SELECT id, *, WEIGHT() `weight` FROM myindex WHERE MATCH('test')
    +
  • +
  • Magic @count and @distinct + attributes are no longer implicitly returned. You now have to + explicitly ask for them when using GROUP BY. (Also note that you + currently have to alias them; that requirement will be lifted in + the future.)

    +SELECT gid, COUNT(*) q FROM myindex WHERE MATCH('test')
    +GROUP BY gid ORDER BY q DESC
    +
  • +
+

Chapter 8. API reference

+ +

There is a number of native searchd client API implementations for + Sphinx. As of time of this writing, we officially support our own PHP, + Python, and Java implementations. There also are third party free, + open-source API implementations for Perl, Ruby, and C++.

The reference API implementation is in PHP, because (we believe) + Sphinx is most widely used with PHP than any other language. This + reference documentation is in turn based on reference PHP API, and all + code samples in this section will be given in PHP.

However, all other APIs provide the same methods and implement the + very same network protocol. Therefore the documentation does apply to them + as well. There might be minor differences as to the method naming + conventions or specific data structures used. But the provided + functionality must not differ across languages.

8.1. General API functions

+

8.1.1. GetLastError

+

Prototype: function GetLastError()

Returns last error message, as a string, in human readable + format. If there were no errors during the previous API call, empty + string is returned.

You should call it when any other function (such as Query()) fails (typically, the failing + function returns false). The returned string will contain the error + description.

The error message is not reset by this + call; so you can safely call it several times if needed.

+

8.1.2. GetLastWarning

+

Prototype: function GetLastWarning ()

Returns last warning message, as a string, in human readable + format. If there were no warnings during the previous API call, empty + string is returned.

You should call it to verify whether your request (such as Query()) was completed but with + warnings. For instance, search query against a distributed index might + complete succesfully even if several remote agents timed out. In that + case, a warning message would be produced.

The warning message is not reset by this + call; so you can safely call it several times if needed.

+

8.1.3. SetServer

+

Prototype: function SetServer ( $host, $port )

Sets searchd host name and TCP port. All + subsequent requests will use the new host and port settings. Default + host and port are 'localhost' and 9312, respectively.

+

8.1.4. SetRetries

+

Prototype: function SetRetries ( $count, $delay=0 + )

Sets distributed retry count and delay.

On temporary failures searchd will attempt + up to $count retries per agent. $delay is + the delay between the retries, in milliseconds. Retries are disabled + by default. Note that this call will not make the API itself + retry on temporary failure; it only tells searchd + to do so. Currently, the list of temporary failures includes all kinds + of connect() failures and maxed out (too busy) remote agents.

+

8.1.5. SetConnectTimeout

+

Prototype: function SetConnectTimeout ( $timeout )

Sets the time allowed to spend connecting to the server before + giving up.

Under some circumstances, the server can be delayed in + responding, either due to network delays, or a query backlog. In + either instance, this allows the client application programmer some + degree of control over how their program interacts with + searchd when not available, and can ensure that + the client application does not fail due to exceeding the script + execution limits (especially in PHP).

In the event of a failure to connect, an appropriate error code + should be returned back to the application in order for + application-level error handling to advise the user.

+

8.1.6. SetArrayResult

+

Prototype: function SetArrayResult ( $arrayresult + )

PHP specific. Controls matches format in the search results set + (whether matches should be returned as an array or a hash).

$arrayresult argument must be boolean. If + $arrayresult is false (the default mode), + matches will returned in PHP hash format with document IDs as keys, + and other information (weight, attributes) as values. If + $arrayresult is true, matches will be returned as a plain + array with complete per-match information including document + ID.

Introduced along with GROUP BY support on MVA attributes. + Group-by-MVA result sets may contain duplicate document IDs. Thus they + need to be returned as plain arrays, because hashes will only keep one + entry per document ID.

+

8.1.7. IsConnectError

+

Prototype: function IsConnectError ()

Checks whether the last error was a network error on API side, + or a remote error reported by searchd. Returns true if the last + connection attempt to searchd failed on API side, false otherwise (if + the error was remote, or there were no connection attempts at all). + Introduced in version 0.9.9-rc1.

+

8.2. General query settings

+

8.2.1. SetLimits

+

Prototype: function SetLimits ( $offset, $limit, + $max_matches=0, $cutoff=0 )

Sets offset into server-side result set ($offset) + and amount of matches to return to client starting from that offset + ($limit). Can additionally control maximum server-side + result set size for current query ($max_matches) and the + threshold amount of matches to stop searching at + ($cutoff). All parameters must be non-negative + integers.

First two parameters to SetLimits() are identical in behavior to + MySQL LIMIT clause. They instruct searchd to + return at most $limit matches starting from match number + $offset. The default offset and limit settings are 0 and + 20, that is, to return first 20 matches.

max_matches setting controls how much matches + searchd will keep in RAM while searching. + All matching documents will be normally processed, ranked, + filtered, and sorted even if max_matches is set to 1. But + only best N documents are stored in memory at any given moment for + performance and RAM usage reasons, and this setting controls that N. + Note that there are two places where max_matches + limit is enforced. Per-query limit is controlled by this API call, but + there also is per-server limit controlled by max_matches + setting in the config file. To prevent RAM usage abuse, server will + not allow to set per-query limit higher than the per-server + limit.

You can't retrieve more than max_matches matches to + the client application. The default limit is set to 1000. Normally, + you must not have to go over this limit. One thousand records is + enough to present to the end user. And if you're thinking about + pulling the results to application for further sorting or filtering, + that would be much more efficient if performed on Sphinx + side.

$cutoff setting is intended for advanced + performance control. It tells searchd to forcibly + stop search query once $cutoff matches had been found and + processed.

+

8.2.2. SetMaxQueryTime

+

Prototype: function SetMaxQueryTime ( $max_query_time + )

Sets maximum search query time, in milliseconds. Parameter must + be a non-negative integer. Default valus is 0 which means "do not + limit".

Similar to $cutoff setting from SetLimits(), but limits elapsed + query time instead of processed matches count. Local search queries + will be stopped once that much time has elapsed. Note that if you're + performing a search which queries several local indexes, this limit + applies to each index separately.

+

8.2.3. SetOverride

+

Prototype: function SetOverride ( $attrname, $attrtype, + $values )

Sets temporary (per-query) per-document attribute value + overrides. Only supports scalar attributes. $values must be a hash + that maps document IDs to overridden attribute values. Introduced in + version 0.9.9-rc1.

Override feature lets you "temporary" update attribute values + for some documents within a single query, leaving all other queries + unaffected. This might be useful for personalized data. For example, + assume you're implementing a personalized search function that wants + to boost the posts that the user's friends recommend. Such data is not + just dynamic, but also personal; so you can't simply put it in the + index because you don't want everyone's searches affected. Overrides, + on the other hand, are local to a single query and invisible to + everyone else. So you can, say, setup a "friends_weight" value for + every document, defaulting to 0, then temporary override it with 1 for + documents 123, 456 and 789 (recommended by exactly the friends of + current user), and use that value when ranking.

+

8.2.4. SetSelect

+

Prototype: function SetSelect ( $clause )

Sets the select clause, listing specific attributes to fetch, + and expressions to compute and fetch. + Clause syntax mimics SQL. Introduced in version 0.9.9-rc1.

SetSelect() is very similar to the part of a typical SQL query + between SELECT and FROM. It lets you choose what attributes (columns) + to fetch, and also what expressions over the columns to compute and + fetch. A certain difference from SQL is that expressions must + always be aliased to a correct identifier (consisting of letters and + digits) using 'AS' keyword. SQL also lets you do that but does not + require to. Sphinx enforces aliases so that the computation results + can always be returned under a "normal" name in the result set, used + in other clauses, etc.

Everything else is basically identical to SQL. Star ('*') is + supported. Functions are supported. Arbitrary amount of expressions is + supported. Computed expressions can be used for sorting, filtering, + and grouping, just as the regular attributes.

Starting with version 0.9.9-rc2, aggregate functions (AVG(), + MIN(), MAX(), SUM()) are supported when using GROUP BY.

Expression sorting (Section 5.6, “SPH_SORT_EXPR mode”) and + geodistance functions (Section 8.4.5, “SetGeoAnchor”) are + now internally implemented using this computed expressions mechanism, + using magic names '@expr' and '@geodist' respectively.

Example:

+$cl->SetSelect ( "*, @weight+(user_karma+ln(pageviews))*0.1 AS myweight" );
+$cl->SetSelect ( "exp_years, salary_gbp*{$gbp_usd_rate} AS salary_usd,
+   IF(age>40,1,0) AS over40" );
+$cl->SetSelect ( "*, AVG(price) AS avgprice" );
+
+

8.3. Full-text search query settings

+

8.3.1. SetMatchMode

+

Prototype: function SetMatchMode ( $mode )

Sets full-text query matching mode, as described in Section 5.1, “Matching modes”. Parameter must be a constant specifying + one of the known modes.

WARNING: (PHP specific) you must not take the + matching mode constant name in quotes, that syntax specifies a string + and is incorrect:

+$cl->SetMatchMode ( "SPH_MATCH_ANY" ); // INCORRECT! will not work as expected
+$cl->SetMatchMode ( SPH_MATCH_ANY ); // correct, works OK
+
+

8.3.2. SetRankingMode

+

Prototype: function SetRankingMode ( $ranker )

Sets ranking mode. Only available in SPH_MATCH_EXTENDED2 + matching mode at the time of this writing. Parameter must be a + constant specifying one of the known modes.

By default, Sphinx computes two factors which contribute to the + final match weight. The major part is query phrase proximity to + document text. The minor part is so-called BM25 statistical function, + which varies from 0 to 1 depending on the keyword frequency within + document (more occurrences yield higher weight) and within the whole + index (more rare keywords yield higher weight).

However, in some cases you'd want to compute weight differently + - or maybe avoid computing it at all for performance reasons because + you're sorting the result set by something else anyway. This can be + accomplished by setting the appropriate ranking mode.

Currently implemented modes are:

  • SPH_RANK_PROXIMITY_BM25, default ranking mode which uses + and combines both phrase proximity and BM25 ranking.

  • +
  • SPH_RANK_BM25, statistical ranking mode which uses BM25 + ranking only (similar to most other full-text engines). This + mode is faster but may result in worse quality on queries which + contain more than 1 keyword.

  • +
  • SPH_RANK_NONE, disabled ranking mode. This mode is the + fastest. It is essentially equivalent to boolean searching. A + weight of 1 is assigned to all matches.

  • +
  • SPH_RANK_WORDCOUNT, ranking by keyword occurrences count. + This ranker computes the amount of per-field keyword + occurrences, then multiplies the amounts by field weights, then + sums the resulting values for the final result.

  • +
  • SPH_RANK_PROXIMITY, added in version 0.9.9-rc1, returns + raw phrase proximity value as a result. This mode is internally + used to emulate SPH_MATCH_ALL queries.

  • +
  • SPH_RANK_MATCHANY, added in version 0.9.9-rc1, returns + rank as it was computed in SPH_MATCH_ANY mode ealier, and is + internally used to emulate SPH_MATCH_ANY queries.

  • +
  • SPH_RANK_FIELDMASK, added in version 0.9.9-rc2, returns a + 32-bit mask with N-th bit corresponding to N-th fulltext field, + numbering from 0. The bit will only be set when the respective + field has any keyword occurences satisfiying the query.

  • +
  • SPH_RANK_SPH04, added in version 1.10-beta, is generally + based on the default SPH_RANK_PROXIMITY_BM25 ranker, but + additionally boosts the matches when they occur in the very + beginning or the very end of a text field. Thus, if a field + equals the exact query, SPH04 should rank it higher than a field + that contains the exact query but is not equal to it. (For + instance, when the query is "Hyde Park", a document entitled + "Hyde Park" should be ranked higher than a one entitled "Hyde + Park, London" or "The Hyde Park Cafe".)

  • +
+

8.3.3. SetSortMode

+

Prototype: function SetSortMode ( $mode, $sortby="" + )

Set matches sorting mode, as described in Section 5.6, “Sorting modes”. Parameter must be a constant specifying + one of the known modes.

WARNING: (PHP specific) you must not take the + matching mode constant name in quotes, that syntax specifies a string + and is incorrect:

+$cl->SetSortMode ( "SPH_SORT_ATTR_DESC" ); // INCORRECT! will not work as expected
+$cl->SetSortMode ( SPH_SORT_ATTR_ASC ); // correct, works OK
+
+

8.3.4. SetWeights

+

Prototype: function SetWeights ( $weights )

Binds per-field weights in the order of appearance in the index. + DEPRECATED, use SetFieldWeights() + instead.

+

8.3.5. SetFieldWeights

+

Prototype: function SetFieldWeights ( $weights )

Binds per-field weights by name. Parameter must be a hash + (associative array) mapping string field names to integer + weights.

Match ranking can be affected by per-field weights. For + instance, see Section 5.4, “Weighting” for an explanation how + phrase proximity ranking is affected. This call lets you specify what + non-default weights to assign to different full-text fields.

The weights must be positive 32-bit integers. The final weight + will be a 32-bit integer too. Default weight value is 1. Unknown field + names will be silently ignored.

There is no enforced limit on the maximum weight value at the + moment. However, beware that if you set it too high you can start + hitting 32-bit wraparound issues. For instance, if you set a weight of + 10,000,000 and search in extended mode, then maximum possible weight + will be equal to 10 million (your weight) by 1 thousand (internal BM25 + scaling factor, see Section 5.4, “Weighting”) by 1 or more (phrase + proximity rank). The result is at least 10 billion that does not fit + in 32 bits and will be wrapped around, producing unexpected + results.

+

8.3.6. SetIndexWeights

+

Prototype: function SetIndexWeights ( $weights )

Sets per-index weights, and enables weighted summing of match + weights across different indexes. Parameter must be a hash + (associative array) mapping string index names to integer weights. + Default is empty array that means to disable weighting summing.

When a match with the same document ID is found in several + different local indexes, by default Sphinx simply chooses the match + from the index specified last in the query. This is to support + searching through partially overlapping index partitions.

However in some cases the indexes are not just partitions, and + you might want to sum the weights across the indexes instead of + picking one. SetIndexWeights() lets you do that. With + summing enabled, final match weight in result set will be computed as + a sum of match weight coming from the given index multiplied by + respective per-index weight specified in this call. Ie. if the + document 123 is found in index A with the weight of 2, and also in + index B with the weight of 3, and you called SetIndexWeights ( + array ( "A"=>100, "B"=>10 ) ), the final weight return to + the client will be 2*100+3*10 = 230.

+

8.4. Result set filtering settings

+

8.4.1. SetIDRange

+

Prototype: function SetIDRange ( $min, $max )

Sets an accepted range of document IDs. Parameters must be + integers. Defaults are 0 and 0; that combination means to not limit by + range.

After this call, only those records that have document ID + between $min and $max (including IDs exactly + equal to $min or $max) will be + matched.

+

8.4.2. SetFilter

+

Prototype: function SetFilter ( $attribute, $values, + $exclude=false )

Adds new integer values set filter.

On this call, additional new filter is added to the existing + list of filters. $attribute must be a string with + attribute name. $values must be a plain array containing + integer values. $exclude must be a boolean value; it + controls whether to accept the matching documents (default mode, when + $exclude is false) or reject them.

Only those documents where $attribute column value + stored in the index matches any of the values from + $values array will be matched (or rejected, if + $exclude is true).

+

8.4.3. SetFilterRange

+

Prototype: function SetFilterRange ( $attribute, $min, + $max, $exclude=false )

Adds new integer range filter.

On this call, additional new filter is added to the existing + list of filters. $attribute must be a string with + attribute name. $min and $max must be + integers that define the acceptable attribute values range (including + the boundaries). $exclude must be a boolean value; it + controls whether to accept the matching documents (default mode, when + $exclude is false) or reject them.

Only those documents where $attribute column value + stored in the index is between $min and $max + (including values that are exactly equal to $min or + $max) will be matched (or rejected, if + $exclude is true).

+

8.4.4. SetFilterFloatRange

+

Prototype: function SetFilterFloatRange ( $attribute, + $min, $max, $exclude=false )

Adds new float range filter.

On this call, additional new filter is added to the existing + list of filters. $attribute must be a string with + attribute name. $min and $max must be floats + that define the acceptable attribute values range (including the + boundaries). $exclude must be a boolean value; it + controls whether to accept the matching documents (default mode, when + $exclude is false) or reject them.

Only those documents where $attribute column value + stored in the index is between $min and $max + (including values that are exactly equal to $min or + $max) will be matched (or rejected, if + $exclude is true).

+

8.4.5. SetGeoAnchor

+

Prototype: function SetGeoAnchor ( $attrlat, $attrlong, + $lat, $long )

Sets anchor point for and geosphere distance (geodistance) + calculations, and enable them.

$attrlat and $attrlong must be strings + that contain the names of latitude and longitude attributes, + respectively. $lat and $long are floats that + specify anchor point latitude and longitude, in radians.

Once an anchor point is set, you can use magic + "@geodist" attribute name in your filters and/or sorting + expressions. Sphinx will compute geosphere distance between the given + anchor point and a point specified by latitude and lognitude + attributes from each full-text match, and attach this value to the + resulting match. The latitude and longitude values both in + SetGeoAnchor and the index attribute data are expected to + be in radians. The result will be returned in meters, so geodistance + value of 1000.0 means 1 km. 1 mile is approximately 1609.344 + meters.

+

8.5. GROUP BY settings

+

8.5.1. SetGroupBy

+

Prototype: function SetGroupBy ( $attribute, $func, + $groupsort="@group desc" )

Sets grouping attribute, function, and groups sorting mode; and + enables grouping (as described in Section 5.7, “Grouping (clustering) search results”).

$attribute is a string that contains group-by + attribute name. $func is a constant that chooses a + function applied to the attribute value in order to compute group-by + key. $groupsort is a clause that controls how the groups + will be sorted. Its syntax is similar to that described in Section 5.6, “SPH_SORT_EXTENDED mode”.

Grouping feature is very similar in nature to GROUP BY clause + from SQL. Results produces by this function call are going to be the + same as produced by the following pseudo code:

+SELECT ... GROUP BY $func($attribute) ORDER BY $groupsort
+

Note that it's $groupsort that affects the + order of matches in the final result set. Sorting mode (see Section 8.3.3, “SetSortMode”) affect the ordering of matches + within group, ie. what match will be selected as + the best one from the group. So you can for instance order the groups + by matches count and select the most relevant match within each group + at the same time.

Starting with version 0.9.9-rc2, aggregate functions (AVG(), + MIN(), MAX(), SUM()) are supported through SetSelect() API call when using + GROUP BY.

Starting with version 2.0.1-beta, grouping on string attributes + is supported, with respect to current collation.

+

8.5.2. SetGroupDistinct

+

Prototype: function SetGroupDistinct ( $attribute + )

Sets attribute name for per-group distinct values count + calculations. Only available for grouping queries.

$attribute is a string that contains the attribute + name. For each group, all values of this attribute will be stored (as + RAM limits permit), then the amount of distinct values will be + calculated and returned to the client. This feature is similar to + COUNT(DISTINCT) clause in standard SQL; so these Sphinx + calls:

+$cl->SetGroupBy ( "category", SPH_GROUPBY_ATTR, "@count desc" );
+$cl->SetGroupDistinct ( "vendor" );
+

can be expressed using the following SQL clauses: +

+SELECT id, weight, all-attributes,
+	COUNT(DISTINCT vendor) AS @distinct,
+	COUNT(*) AS @count
+FROM products
+GROUP BY category
+ORDER BY @count DESC
+

In the sample pseudo code shown just above, + SetGroupDistinct() call corresponds to + COUNT(DISINCT vendor) clause only. GROUP BY, + ORDER BY, and COUNT(*) clauses are all an + equivalent of SetGroupBy() settings. Both queries will + return one matching row for each category. In addition to indexed + attributes, matches will also contain total per-category matches + count, and the count of distinct vendor IDs within each + category.

+

8.6. Querying

+

8.6.1. Query

+

Prototype: function Query ( $query, $index="*", + $comment="" )

Connects to searchd server, runs given + search query with current settings, obtains and returns the result + set.

$query is a query string. $index is an + index name (or names) string. Returns false and sets + GetLastError() message on general error. Returns search + result set on success. Additionally, the contents of + $comment are sent to the query log, marked in square + brackets, just before the search terms, which can be very useful for + debugging. Currently, the comment is limited to 128 characters.

Default value for $index is "*" that + means to query all local indexes. Characters allowed in index names + include Latin letters (a-z), numbers (0-9), minus sign (-), and + underscore (_); everything else is considered a separator. Therefore, + all of the following samples calls are valid and will search the same + two indexes:

+$cl->Query ( "test query", "main delta" );
+$cl->Query ( "test query", "main;delta" );
+$cl->Query ( "test query", "main, delta" );
+

Index specification order matters. If document with + identical IDs are found in two or more indexes, weight and attribute + values from the very last matching index will be used for sorting and + returning to client (unless explicitly overridden with SetIndexWeights()). + Therefore, in the example above, matches from "delta" index will + always win over matches from "main".

On success, Query() returns a result set that + contains some of the found matches (as requested by SetLimits()) and additional + general per-query statistics. The result set is a hash (PHP specific; + other languages might utilize other structures instead of hash) with + the following keys and values:

"matches":
+

Hash which maps found document IDs to another small hash + containing document weight and attribute values (or an array + of the similar small hashes if SetArrayResult() was + enabled).

"total":
+

Total amount of matches retrieved on + server (ie. to the server side result set) by this + query. You can retrieve up to this amount of matches from + server for this query text with current query settings.

"total_found":
+

Total amount of matching documents in index (that were + found and procesed on server).

"words":
+

Hash which maps query keywords (case-folded, stemmed, + and otherwise processed) to a small hash with per-keyword + statitics ("docs", "hits").

"error":
+

Query error message reported by + searchd (string, human readable). Empty + if there were no errors.

"warning":
+

Query warning message reported by + searchd (string, human readable). Empty + if there were no warnings.

+

It should be noted that Query() carries out the + same actions as AddQuery() and RunQueries() + without the intermediate steps; it is analoguous to a single + AddQuery() call, followed by a corresponding + RunQueries(), then returning the first array element of + matches (from the first, and only, query.)

+

8.6.2. AddQuery

+

Prototype: function AddQuery ( $query, $index="*", + $comment="" )

Adds additional query with current settings to multi-query + batch. $query is a query string. $index is + an index name (or names) string. Additionally if provided, the + contents of $comment are sent to the query log, marked in + square brackets, just before the search terms, which can be very + useful for debugging. Currently, this is limited to 128 characters. + Returns index to results array returned from RunQueries().

Batch queries (or multi-queries) enable + searchd to perform internal optimizations if + possible. They also reduce network connection overheads and search + process creation overheads in all cases. They do not result in any + additional overheads compared to simple queries. Thus, if you run + several different queries from your web page, you should always + consider using multi-queries.

For instance, running the same full-text query but with + different sorting or group-by settings will enable + searchd to perform expensive full-text search and + ranking operation only once, but compute multiple group-by results + from its output.

This can be a big saver when you need to display not just plain + search results but also some per-category counts, such as the amount + of products grouped by vendor. Without multi-query, you would have to + run several queries which perform essentially the same search and + retrieve the same matches, but create result sets differently. With + multi-query, you simply pass all these querys in a single batch and + Sphinx optimizes the redundant full-text search internally.

AddQuery() internally saves full current settings + state along with the query, and you can safely change them afterwards + for subsequent AddQuery() calls. Already added queries + will not be affected; there's actually no way to change them at all. + Here's an example:

+$cl->SetSortMode ( SPH_SORT_RELEVANCE );
+$cl->AddQuery ( "hello world", "documents" );
+
+$cl->SetSortMode ( SPH_SORT_ATTR_DESC, "price" );
+$cl->AddQuery ( "ipod", "products" );
+
+$cl->AddQuery ( "harry potter", "books" );
+
+$results = $cl->RunQueries ();
+

With the code above, 1st query will search for "hello world" + in "documents" index and sort results by relevance, 2nd query will + search for "ipod" in "products" index and sort results by price, and + 3rd query will search for "harry potter" in "books" index while still + sorting by price. Note that 2nd SetSortMode() call does + not affect the first query (because it's already added) but affects + both other subsequent queries.

Additionally, any filters set up before an + AddQuery() will fall through to subsequent queries. So, + if SetFilter() is called before the first query, the same + filter will be in place for the second (and subsequent) queries + batched through AddQuery() unless you call + ResetFilters() first. Alternatively, you can add + additional filters as well.

This would also be true for grouping options and sorting + options; no current sorting, filtering, and grouping settings are + affected by this call; so subsequent queries will reuse current query + settings.

AddQuery() returns an index into an array of + results that will be returned from RunQueries() call. It + is simply a sequentially increasing 0-based integer, ie. first call + will return 0, second will return 1, and so on. Just a small helper so + you won't have to track the indexes manualy if you need then.

+

8.6.3. RunQueries

+

Prototype: function RunQueries ()

Connect to searchd, runs a batch of all queries added using + AddQuery(), obtains and returns the result sets. Returns + false and sets GetLastError() message on general error + (such as network I/O failure). Returns a plain array of result sets on + success.

Each result set in the returned array is exactly the same as the + result set returned from Query().

Note that the batch query request itself almost always succeds - + unless there's a network error, blocking index rotation in progress, + or another general failure which prevents the whole request from being + processed.

However individual queries within the batch might very well + fail. In this case their respective result sets will contain non-empty + "error" message, but no matches or query statistics. In + the extreme case all queries within the batch could fail. There still + will be no general error reported, because API was able to succesfully + connect to searchd, submit the batch, and receive + the results - but every result set will have a specific error + message.

+

8.6.4. ResetFilters

+

Prototype: function ResetFilters ()

Clears all currently set filters.

This call is only normally required when using multi-queries. + You might want to set different filters for different queries in the + batch. To do that, you should call ResetFilters() and add + new filters using the respective calls.

+

8.6.5. ResetGroupBy

+

Prototype: function ResetGroupBy ()

Clears all currently group-by settings, and disables + group-by.

This call is only normally required when using multi-queries. + You can change individual group-by settings using + SetGroupBy() and SetGroupDistinct() calls, + but you can not disable group-by using those calls. + ResetGroupBy() fully resets previous group-by settings + and disables group-by mode in the current state, so that subsequent + AddQuery() calls can perform non-grouping + searches.

+

8.7. Additional functionality

+

8.7.1. BuildExcerpts

+

Prototype: function BuildExcerpts ( $docs, $index, + $words, $opts=array() )

Excerpts (snippets) builder function. Connects to + searchd, asks it to generate excerpts (snippets) + from given documents, and returns the results.

$docs is a plain array of strings that carry the + documents' contents. $index is an index name string. + Different settings (such as charset, morphology, wordforms) from given + index will be used. $words is a string that contains the + keywords to highlight. They will be processed with respect to index + settings. For instance, if English stemming is enabled in the index, + "shoes" will be highlighted even if keyword is "shoe". Starting with + version 0.9.9-rc1, keywords can contain wildcards, that work similarly + to star-syntax available in + queries. $opts is a hash which contains additional + optional highlighting parameters:

"before_match":
+

A string to insert before a keyword match. Starting with + version 1.10-beta, a %PASSAGE_ID% macro can be used in this + string. The macro is replaced with an incrementing passage + number within a current snippet. Numbering starts at 1 by + default but can be overridden with "start_passage_id" option. + In a multi-document call, %PASSAGE_ID% would restart at every + given document. Default is "<b>".

"after_match":
+

A string to insert after a keyword match. Starting with + version 1.10-beta, a %PASSAGE_ID% macro can be used in this + string. Default is "</b>".

"chunk_separator":
+

A string to insert between snippet chunks (passages). + Default is " ... ".

"limit":
+

Maximum snippet size, in symbols (codepoints). Integer, + default is 256.

"around":
+

How much words to pick around each matching keywords + block. Integer, default is 5.

"exact_phrase":
+

Whether to highlight exact query phrase matches only + instead of individual keywords. Boolean, default is + false.

"single_passage":
+

Whether to extract single best passage only. Boolean, + default is false.

"use_boundaries":
+

Whether to additionaly break passages by phrase boundary + characters, as configured in index settings with phrase_boundary + directive. Boolean, default is false.

"weight_order":
+

Whether to sort the extracted passages in order of + relevance (decreasing weight), or in order of appearance in + the document (increasing position). Boolean, default is + false.

"query_mode":
+

Added in version 1.10-beta. Whether to handle $words as + a query in extended + syntax, or as a bag of words (default behavior). For + instance, in query mode ("one two" | "three four") will only + highlight and include those occurrences "one two" or "three + four" when the two words from each pair are adjacent to each + other. In default mode, any single occurrence of "one", "two", + "three", or "four" would be highlighted. Boolean, default is + false.

"force_all_words":
+

Added in version 1.10-beta. Ignores the snippet length + limit until it includes all the keywords. Boolean, default is + false.

"limit_passages":
+

Added in version 1.10-beta. Limits the maximum number of + passages that can be included into the snippet. Integer, + default is 0 (no limit).

"limit_words":
+

Added in version 1.10-beta. Limits the maximum number of + keywords that can be included into the snippet. Integer, + default is 0 (no limit).

"start_passage_id":
+

Added in version 1.10-beta. Specifies the starting value + of %PASSAGE_ID% macro (that gets detected and expanded in + before_match, after_match + strings). Integer, default is 1.

"load_files":
+

Added in version 1.10-beta. Whether to handle $docs as + data to extract snippets from (default behavior), or to treat + it as file names, and load data from specified files on the + server side. Starting with version 2.0.1-beta, up to dist_threads worker threads + per request will be created to parallelize the work when this + flag is enabled. Boolean, default is false.

"html_strip_mode":
+

Added in version 1.10-beta. HTML stripping mode setting. + Defaults to "index", which means that index settings will be + used. The other values are "none" and "strip", that forcibly + skip or apply stripping irregardless of index settings; and + "retain", that retains HTML markup and protects it from + highlighting. The "retain" mode can only be used when + highlighting full documents and thus requires that no snippet + size limits are set. String, allowed values are "none", + "strip", "index", and "retain".

"allow_empty":
+

Added in version 1.10-beta. Allows empty string to be + returned as highlighting result when a snippet could not be + generated (no keywords match, or no passages fit the limit). + By default, the beginning of original text would be returned + instead of an empty string. Boolean, default is false.

"passage_boundary":
+

Added in version 2.0.1-beta. Ensures that passages do + not cross a sentence, paragraph, or zone boundary (when used + with an index that has the respective indexing settings + enabled). String, allowed values are "sentence", "paragraph", + and "zone".

"passage_boundary":
+

Added in version 2.0.1-beta. Ensures that passages do + not cross a sentence, paragraph, or zone boundary (when used + with an index that has the respective indexing settings + enabled). String, allowed values are "sentence", "paragraph", + and "zone".

"emit_zones":
+

Added in version 2.0.1-beta. Emits an HTML tag with an + enclosing zone name before each passage. Boolean, default is + false.

+

Snippets extraction algorithm currently favors better passages + (with closer phrase matches), and then passages with keywords not yet + in snippet. Generally, it will try to highlight the best match with + the query, and it will also to highlight all the query keywords, as + made possible by the limtis. In case the document does not match the + query, beginning of the document trimmed down according to the limits + will be return by default. Starting with 1.10-beta, you can also + return an empty snippet instead case by setting "allow_empty" option + to true.

Returns false on failure. Returns a plain array of strings with + excerpts (snippets) on success.

+

8.7.2. UpdateAttributes

+

Prototype: function UpdateAttributes ( $index, $attrs, + $values )

Instantly updates given attribute values in given documents. + Returns number of actually updated documents (0 or more) on success, + or -1 on failure.

$index is a name of the index (or indexes) to be + updated. $attrs is a plain array with string attribute + names, listing attributes that are updated. $values is a + hash where key is document ID, and value is a plain array of new + attribute values.

$index can be either a single index name or a list, + like in Query(). Unlike Query(), wildcard is + not allowed and all the indexes to update must be specified + explicitly. The list of indexes can include distributed index names. + Updates on distributed indexes will be pushed to all agents.

The updates only work with docinfo=extern storage + strategy. They are very fast because they're working fully in RAM, but + they can also be made persistent: updates are saved on disk on clean + searchd shutdown initiated by SIGTERM signal. + With additional restrictions, updates are also possible on MVA + attributes; refer to mva_updates_pool directive for + details.

Usage example:

+$cl->UpdateAttributes ( "test1", array("group_id"), array(1=>array(456)) );
+$cl->UpdateAttributes ( "products", array ( "price", "amount_in_stock" ),
+	array ( 1001=>array(123,5), 1002=>array(37,11), 1003=>(25,129) ) );
+

The first sample statement will update document 1 in index + "test1", setting "group_id" to 456. The second one will update + documents 1001, 1002 and 1003 in index "products". For document 1001, + the new price will be set to 123 and the new amount in stock to 5; for + document 1002, the new price will be 37 and the new amount will be 11; + etc.

+

8.7.3. BuildKeywords

+

Prototype: function BuildKeywords ( $query, $index, $hits + )

Extracts keywords from query using tokenizer settings for given + index, optionally with per-keyword occurrence statistics. Returns an + array of hashes with per-keyword information.

$query is a query to extract keywords from. + $index is a name of the index to get tokenizing settings + and keyword occurrence statistics from. $hits is a + boolean flag that indicates whether keyword occurrence statistics are + required.

Usage example:

+$keywords = $cl->BuildKeywords ( "this.is.my query", "test1", false );
+
+

8.7.4. EscapeString

+

Prototype: function EscapeString ( $string )

Escapes characters that are treated as special operators by the + query language parser. Returns an escaped string.

$string is a string to escape.

This function might seem redundant because it's trivial to + implement in any calling application. However, as the set of special + characters might change over time, it makes sense to have an API call + that is guaranteed to escape all such characters at all times.

Usage example:

+$escaped = $cl->EscapeString ( "escaping-sample@query/string" );
+
+

8.7.5. Status

+

Prototype: function Status ()

Queries searchd status, and returns an array of status variable + name and value pairs.

Usage example:

+$status = $cl->Status ();
+foreach ( $status as $row )
+	print join ( ": ", $row ) . "\n";
+
+

8.7.6. FlushAttributes

+

Prototype: function FlushAttributes ()

Forces searchd to flush pending attribute + updates to disk, and blocks until completion. Returns a non-negative + internal "flush tag" on success. Returns -1 and sets an error message + on error. Introduced in version 1.10-beta.

Attribute values updated using UpdateAttributes() API + call are only kept in RAM until a so-called flush (which writes the + current, possibly updated attribute values back to disk). + FlushAttributes() call lets you enforce a flush. The call will block + until searchd finishes writing the data to disk, + which might take seconds or even minutes depending on the total data + size (.spa file size). All the currently updated indexes will be + flushed.

Flush tag should be treated as an ever growing magic number that + does not mean anything. It's guaranteed to be non-negative. It is + guaranteed to grow over time, though not necessarily in a sequential + fashion; for instance, two calls that return 10 and then 1000 + respectively are a valid situation. If two calls to FlushAttrs() + return the same tag, it means that there were no actual attribute + updates in between them, and therefore current flushed state remained + the same (for all indexes).

Usage example:

+$status = $cl->FlushAttributes ();
+if ( $status<0 )
+	print "ERROR: " . $cl->GetLastError(); 
+
+

8.8. Persistent connections

+

Persistent connections allow to use single network connection to + run multiple commands that would otherwise require reconnects.

8.8.1. Open

+

Prototype: function Open ()

Opens persistent connection to the server.

+

8.8.2. Close

+

Prototype: function Close ()

Closes previously opened persistent connection.

+

Chapter 9. MySQL storage engine (SphinxSE)

+ +

9.1. SphinxSE overview

+

SphinxSE is MySQL storage engine which can be compiled into MySQL + server 5.x using its pluggable architecure. It is not available for + MySQL 4.x series. It also requires MySQL 5.0.22 or higher in 5.0.x + series, or MySQL 5.1.12 or higher in 5.1.x series.

Despite the name, SphinxSE does not actually + store any data itself. It is actually a built-in client which allows + MySQL server to talk to searchd, run search + queries, and obtain search results. All indexing and searching happen + outside MySQL.

Obvious SphinxSE applications include:

  • easier porting of MySQL FTS applications to Sphinx;

  • +
  • allowing Sphinx use with progamming languages for which + native APIs are not available yet;

  • +
  • optimizations when additional Sphinx result set processing + on MySQL side is required (eg. JOINs with original document + tables, additional MySQL-side filtering, etc).

  • +
+

9.2. Installing SphinxSE

+

You will need to obtain a copy of MySQL sources, prepare those, + and then recompile MySQL binary. MySQL sources (mysql-5.x.yy.tar.gz) + could be obtained from dev.mysql.com Web site.

For some MySQL versions, there are delta tarballs with already + prepared source versions available from Sphinx Web site. After unzipping + those over original sources MySQL would be ready to be configured and + built with Sphinx support.

If such tarball is not available, or does not work for you for any + reason, you would have to prepare sources manually. You will need to GNU + Autotools framework (autoconf, automake and libtool) installed to do + that.

9.2.1. Compiling MySQL 5.0.x with SphinxSE

+

Skips steps 1-3 if using already prepared delta tarball.

  1. copy sphinx.5.0.yy.diff patch file into + MySQL sources directory and run

    +patch -p1 < sphinx.5.0.yy.diff
    +

    If there's no .diff file exactly for the specific version + you need to build, try applying .diff with closest version + numbers. It is important that the patch should apply with no + rejects.

  2. +
  3. in MySQL sources directory, run

    +sh BUILD/autorun.sh
    +
  4. +
  5. in MySQL sources directory, create + sql/sphinx directory in and copy all files in + mysqlse directory from Sphinx sources there. + Example:

    +cp -R /root/builds/sphinx-0.9.7/mysqlse /root/builds/mysql-5.0.24/sql/sphinx
    +
  6. +
  7. configure MySQL and enable Sphinx engine:

    +./configure --with-sphinx-storage-engine
    +
  8. +
  9. build and install MySQL:

    +make
    +make install
    +
  10. +
+

9.2.2. Compiling MySQL 5.1.x with SphinxSE

+

Skip steps 1-2 if using already prepared delta tarball.

  1. in MySQL sources directory, create + storage/sphinx directory in and copy all + files in mysqlse directory from Sphinx + sources there. Example:

    +cp -R /root/builds/sphinx-0.9.7/mysqlse /root/builds/mysql-5.1.14/storage/sphinx
    +
  2. +
  3. in MySQL sources directory, run

    +sh BUILD/autorun.sh
    +
  4. +
  5. configure MySQL and enable Sphinx engine:

    +./configure --with-plugins=sphinx
    +
  6. +
  7. build and install MySQL:

    +make
    +make install
    +
  8. +
+

9.2.3. Checking SphinxSE installation

+

To check whether SphinxSE has been succesfully compiled into + MySQL, launch newly built servers, run mysql client and issue + SHOW ENGINES query. You should see a list of all + available engines. Sphinx should be present and "Support" column + should contain "YES":

+mysql> show engines;
++------------+----------+-------------------------------------------------------------+
+| Engine     | Support  | Comment                                                     |
++------------+----------+-------------------------------------------------------------+
+| MyISAM     | DEFAULT  | Default engine as of MySQL 3.23 with great performance      |
+  ...
+| SPHINX     | YES      | Sphinx storage engine                                       |
+  ...
++------------+----------+-------------------------------------------------------------+
+13 rows in set (0.00 sec)
+
+

9.3. Using SphinxSE

+

To search via SphinxSE, you would need to create special + ENGINE=SPHINX "search table", and then SELECT from it with full text + query put into WHERE clause for query column.

Let's begin with an example create statement and search query: +

+CREATE TABLE t1
+(
+    id          INTEGER UNSIGNED NOT NULL,
+    weight      INTEGER NOT NULL,
+    query       VARCHAR(3072) NOT NULL,
+    group_id    INTEGER,
+    INDEX(query)
+) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test";
+
+SELECT * FROM t1 WHERE query='test it;mode=any';
+

First 3 columns of search table must have a + types of INTEGER UNSINGED or BIGINT for the + 1st column (document id), INTEGER or BIGINT + for the 2nd column (match weight), and VARCHAR or + TEXT for the 3rd column (your query), respectively. This + mapping is fixed; you can not omit any of these three required columns, + or move them around, or change types. Also, query column must be + indexed; all the others must be kept unindexed. Columns' names are + ignored so you can use arbitrary ones.

Additional columns must be either INTEGER, + TIMESTAMP, BIGINT, VARCHAR, or + FLOAT. They will be bound to attributes provided in Sphinx + result set by name, so their names must match attribute names specified + in sphinx.conf. If there's no such attribute name + in Sphinx search results, column will have NULL + values.

Special "virtual" attributes names can also be bound to SphinxSE + columns. _sph_ needs to be used instead of @ + for that. For instance, to obtain the values of @groupby, + @count, or @distinct virtual attributes, use + _sph_groupby, _sph_count or + _sph_distinct column names, respectively.

CONNECTION string parameter can be used to specify + default searchd host, port and indexes for queries issued using this + table. If no connection string is specified in CREATE + TABLE, index name "*" (ie. search all indexes) and localhost:9312 + are assumed. Connection string syntax is as follows:

+CONNECTION="sphinx://HOST:PORT/INDEXNAME"
+

You can change the default connection string later: +

+ALTER TABLE t1 CONNECTION="sphinx://NEWHOST:NEWPORT/NEWINDEXNAME";
+

You can also override all these parameters per-query.

As seen in example, both query text and search options should be + put into WHERE clause on search query column (ie. 3rd column); the + options are separated by semicolons; and their names from values by + equality sign. Any number of options can be specified. Available options + are:

  • query - query text;

  • +
  • mode - matching mode. Must be one of "all", "any", "phrase", + "boolean", "extended", or "extended2". Default is "all";

  • +
  • sort - match sorting mode. Must be one of "relevance", + "attr_desc", "attr_asc", "time_segments", or "extended". In all + modes besides "relevance" attribute name (or sorting clause for + "extended") is also required after a colon:

    +... WHERE query='test;sort=attr_asc:group_id';
    +... WHERE query='test;sort=extended:@weight desc, group_id asc';
    +
  • +
  • offset - offset into result set, default is 0;

  • +
  • limit - amount of matches to retrieve from result set, + default is 20;

  • +
  • index - names of the indexes to search:

    +... WHERE query='test;index=test1;';
    +... WHERE query='test;index=test1,test2,test3;';
    +
  • +
  • minid, maxid - min and max document ID to match;

  • +
  • weights - comma-separated list of weights to be assigned to + Sphinx full-text fields:

    +... WHERE query='test;weights=1,2,3;';
    +
  • +
  • filter, !filter - comma-separated attribute name and a set + of values to match:

    +# only include groups 1, 5 and 19
    +... WHERE query='test;filter=group_id,1,5,19;';
    +
    +# exclude groups 3 and 11
    +... WHERE query='test;!filter=group_id,3,11;';
    +
  • +
  • range, !range - comma-separated attribute name, min and max + value to match:

    +# include groups from 3 to 7, inclusive
    +... WHERE query='test;range=group_id,3,7;';
    +
    +# exclude groups from 5 to 25
    +... WHERE query='test;!range=group_id,5,25;';
    +
  • +
  • maxmatches - per-query max matches value, as in max_matches + parameter to SetLimits() + API call:

    +... WHERE query='test;maxmatches=2000;';
    +
  • +
  • cutoff - maximum allowed matches, as in cutoff parameter to + SetLimits() API call: +

    +... WHERE query='test;cutoff=10000;';
    +
  • +
  • maxquerytme - maximum allowed query time (in milliseconds), + as in SetMaxQueryTime() API + call:

    +... WHERE query='test;maxquerytime=1000;';
    +
  • +
  • groupby - group-by function and attribute, corresponding to + SetGroupBy() API call: +

    +... WHERE query='test;groupby=day:published_ts;';
    +... WHERE query='test;groupby=attr:group_id;';
    +
  • +
  • groupsort - group-by sorting clause:

    +... WHERE query='test;groupsort=@count desc;';
    +
  • +
  • distinct - an attribute to compute COUNT(DISTINCT) for when + doing group-by, as in SetGroupDistinct() API + call:

    +... WHERE query='test;groupby=attr:country_id;distinct=site_id';
    +
  • +
  • indexweights - comma-separated list of index names and + weights to use when searching through several indexes: +

    +... WHERE query='test;indexweights=idx_exact,2,idx_stemmed,1;';
    +
  • +
  • comment - a string to mark this query in query log (mapping + to $comment parameter in Query() API call): +

    +... WHERE query='test;comment=marker001;';
    +
  • +
  • select - a string with expressions to compute (mapping to + SetSelect() API call): +

    +... WHERE query='test;select=2*a+3*b as myexpr;';
    +
  • +
  • host, port - remote searchd host name + and TCP port, respectively:

    +... WHERE query='test;host=sphinx-test.loc;port=7312;';
    +
  • +
  • ranker - a ranking function to use when matching mode is + extended2 (i.e. with query syntax), as in SetRankingMode() API + call. Known values are "proximity_bm25", "bm25", "none", + "wordcount", "proximity", "matchany", and "fieldmask". +

    +... WHERE query='test;mode=extended2;ranker=bm25;';
    +
  • +
  • geoanchor - geodistance anchor, as in SetGeoAnchor() API call. + Takes 4 parameters which are latitude and longiture attribute + names, and anchor point coordinates respectively:

    +... WHERE query='test;geoanchor=latattr,lonattr,0.123,0.456';
    +
  • +
+

One very important note that it + is much more efficient to allow Sphinx + to perform sorting, filtering and slicing the result set than to raise + max matches count and use WHERE, ORDER BY and LIMIT clauses on MySQL + side. This is for two reasons. First, Sphinx does a number of + optimizations and performs better than MySQL on these tasks. Second, + less data would need to be packed by searchd, transferred and unpacked + by SphinxSE.

Starting with version 0.9.9-rc1, additional query info besides + result set could be retrieved with SHOW ENGINE SPHINX + STATUS statement:

+mysql> SHOW ENGINE SPHINX STATUS;
++--------+-------+-------------------------------------------------+
+| Type   | Name  | Status                                          |
++--------+-------+-------------------------------------------------+
+| SPHINX | stats | total: 25, total found: 25, time: 126, words: 2 | 
+| SPHINX | words | sphinx:591:1256 soft:11076:15945                | 
++--------+-------+-------------------------------------------------+
+2 rows in set (0.00 sec)
+

This information can also be accessed through status + variables. Note that this method does not require super-user privileges. +

+mysql> SHOW STATUS LIKE 'sphinx_%';
++--------------------+----------------------------------+
+| Variable_name      | Value                            |
++--------------------+----------------------------------+
+| sphinx_total       | 25                               | 
+| sphinx_total_found | 25                               | 
+| sphinx_time        | 126                              | 
+| sphinx_word_count  | 2                                | 
+| sphinx_words       | sphinx:591:1256 soft:11076:15945 | 
++--------------------+----------------------------------+
+5 rows in set (0.00 sec)
+

You could perform JOINs on SphinxSE search table and tables using + other engines. Here's an example with "documents" from example.sql: +

+mysql> SELECT content, date_added FROM test.documents docs
+-> JOIN t1 ON (docs.id=t1.id) 
+-> WHERE query="one document;mode=any";
++-------------------------------------+---------------------+
+| content                             | docdate             |
++-------------------------------------+---------------------+
+| this is my test document number two | 2006-06-17 14:04:28 | 
+| this is my test document number one | 2006-06-17 14:04:28 | 
++-------------------------------------+---------------------+
+2 rows in set (0.00 sec)
+
+mysql> SHOW ENGINE SPHINX STATUS;
++--------+-------+---------------------------------------------+
+| Type   | Name  | Status                                      |
++--------+-------+---------------------------------------------+
+| SPHINX | stats | total: 2, total found: 2, time: 0, words: 2 | 
+| SPHINX | words | one:1:2 document:2:2                        | 
++--------+-------+---------------------------------------------+
+2 rows in set (0.00 sec)
+
+

9.4. Building snippets (excerpts) via MySQL

+

Starting with version 0.9.9-rc2, SphinxSE also includes a UDF + function that lets you create snippets through MySQL. The functionality + is fully similar to BuildExcerprts API call but + accesible through MySQL+SphinxSE.

The binary that provides the UDF is named + sphinx.so and should be automatically built and + installed to proper location along with SphinxSE itself. If it does not + get installed automatically for some reason, look for + sphinx.so in the build directory and copy it to the + plugins directory of your MySQL instance. After that, register the UDF + using the following statement:

+CREATE FUNCTION sphinx_snippets RETURNS STRING SONAME 'sphinx.so';
+

Function name must be sphinx_snippets, you + can not use an arbitrary name. Function arguments are as follows:

Prototype: function sphinx_snippets ( document, index, + words, [options] );

Document and words arguments can be either strings or table + columns. Options must be specified like this: 'value' AS + option_name. For a list of supported options, refer to BuildExcerprts() API call. The + only UDF-specific additional option is named 'sphinx' and + lets you specify searchd location (host and port).

Usage examples:

+SELECT sphinx_snippets('hello world doc', 'main', 'world',
+    'sphinx://192.168.1.1/' AS sphinx, true AS exact_phrase,
+    '[b]' AS before_match, '[/b]' AS after_match)
+FROM documents;
+
+SELECT title, sphinx_snippets(text, 'index', 'mysql php') AS text
+    FROM sphinx, documents
+    WHERE query='mysql php' AND sphinx.id=documents.id;
+
+

Chapter 10. Reporting bugs

+

Unfortunately, Sphinx is not yet 100% bug free (even though I'm + working hard towards that), so you might occasionally run into some + issues.

Reporting as much as possible about each bug is very important - + because to fix it, I need to be able either to reproduce and debug the + bug, or to deduce what's causing it from the information that you provide. + So here are some instructions on how to do that.

Build-time issues

If Sphinx fails to build for some reason, please do the + following:

  1. check that headers and libraries for your DBMS are properly + installed (for instance, check that mysql-devel + package is present);

  2. +
  3. report Sphinx version and config file (be sure to remove the + passwords!), MySQL (or PostgreSQL) configuration info, gcc version, OS + version and CPU type (ie. x86, x86-64, PowerPC, etc):

    +mysql_config
    +gcc --version
    +uname -a
    +
  4. +
  5. report the error message which is produced by + configure or gcc (it should + be to include error message itself only, not the whole build + log).

  6. +
+

Run-time issues

If Sphinx builds and runs, but there are any problems running it, + please do the following:

  1. describe the bug (ie. both the expected behavior and actual + behavior) and all the steps necessary to reproduce it;

  2. +
  3. include Sphinx version and config file (be sure to remove the + passwords!), MySQL (or PostgreSQL) version, gcc version, OS version + and CPU type (ie. x86, x86-64, PowerPC, etc):

    +mysql --version
    +gcc --version
    +uname -a
    +
  4. +
  5. build, install and run debug versions of all Sphinx programs + (this is to enable a lot of additional internal checks, so-called + assertions):

    +make distclean
    +./configure --with-debug
    +make install
    +killall -TERM searchd
    +
  6. +
  7. reindex to check if any assertions are triggered (in this case, + it's likely that the index is corrupted and causing problems);

  8. +
  9. if the bug does not reproduce with debug versions, revert to + non-debug and mention it in your report;

  10. +
  11. if the bug could be easily reproduced with a small (1-100 + record) part of your database, please provide a gzipped dump of that + part;

  12. +
  13. if the problem is related to searchd, + include relevant entries from searchd.log and + query.log in your bug report;

  14. +
  15. if the problem is related to searchd, try + running it in console mode and check if it dies with an assertion: +

    +./searchd --console
    +
  16. +
  17. if any program dies with an assertion, provide the assertion + message.

  18. +
+

Debugging assertions, crashes and hangups

If any program dies with an assertion, crashes without an assertion + or hangs up, you would additionally need to generate a core dump and + examine it.

  1. enable core dumps. On most Linux systems, this is done using + ulimit:

    +ulimit -c 32768
    +
  2. +
  3. run the program and try to reproduce the bug;

  4. +
  5. if the program crashes (either with or without an assertion), + find the core file in current directory (it should typically print out + "Segmentation fault (core dumped)" message);

  6. +
  7. if the program hangs, use kill -SEGV from + another console to force it to exit and dump core:

    +kill -SEGV HANGED-PROCESS-ID
    +
  8. +
  9. use gdb to examine the core file and obtain + a backtrace:

    +gdb ./CRASHED-PROGRAM-FILE-NAME CORE-DUMP-FILE-NAME
    +(gdb) bt
    +(gdb) quit
    +
  10. +
+

Note that HANGED-PROCESS-ID, CRASHED-PROGRAM-FILE-NAME and + CORE-DUMP-FILE-NAME must all be replaced with specific numbers and file + names. For example, hanged searchd debugging session would look like: +

+# kill -SEGV 12345
+# ls *core*
+core.12345
+# gdb ./searchd core.12345
+(gdb) bt
+...
+(gdb) quit
+

Note that ulimit is not server-wide and only + affects current shell session. This means that you will not have to + restore any server-wide limits - but if you relogin, you will have to set + ulimit again.

Core dumps should be placed in current working directory (and Sphinx + programs do not change it), so this is where you would look for + them.

Please do not immediately remove the core file because there could + be additional helpful information which could be retrieved from it. You do + not need to send me this file (as the debug info there is closely tied to + your system) but I might need to ask you a few additional questions about + it.

+

Chapter 11. sphinx.conf options reference

+

Table of Contents

11.1. Data source configuration options
+
11.1.1. type
+
11.1.2. sql_host
+
11.1.3. sql_port
+
11.1.4. sql_user
+
11.1.5. sql_pass
+
11.1.6. sql_db
+
11.1.7. sql_sock
+
11.1.8. mysql_connect_flags
+
11.1.9. mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca
+
11.1.10. odbc_dsn
+
11.1.11. sql_query_pre
+
11.1.12. sql_query
+
11.1.13. sql_joined_field
+
11.1.14. sql_query_range
+
11.1.15. sql_range_step
+
11.1.16. sql_query_killlist
+
11.1.17. sql_attr_uint
+
11.1.18. sql_attr_bool
+
11.1.19. sql_attr_bigint
+
11.1.20. sql_attr_timestamp
+
11.1.21. sql_attr_str2ordinal
+
11.1.22. sql_attr_float
+
11.1.23. sql_attr_multi
+
11.1.24. sql_attr_string
+
11.1.25. sql_attr_str2wordcount
+
11.1.26. sql_column_buffers
+
11.1.27. sql_field_string
+
11.1.28. sql_field_str2wordcount
+
11.1.29. sql_file_field
+
11.1.30. sql_query_post
+
11.1.31. sql_query_post_index
+
11.1.32. sql_ranged_throttle
+
11.1.33. sql_query_info
+
11.1.34. xmlpipe_command
+
11.1.35. xmlpipe_field
+
11.1.36. xmlpipe_field_string
+
11.1.37. xmlpipe_field_wordcount
+
11.1.38. xmlpipe_attr_uint
+
11.1.39. xmlpipe_attr_bool
+
11.1.40. xmlpipe_attr_timestamp
+
11.1.41. xmlpipe_attr_str2ordinal
+
11.1.42. xmlpipe_attr_float
+
11.1.43. xmlpipe_attr_multi
+
11.1.44. xmlpipe_attr_string
+
11.1.45. xmlpipe_fixup_utf8
+
11.1.46. mssql_winauth
+
11.1.47. mssql_unicode
+
11.1.48. unpack_zlib
+
11.1.49. unpack_mysqlcompress
+
11.1.50. unpack_mysqlcompress_maxsize
+
11.2. Index configuration options
+
11.2.1. type
+
11.2.2. source
+
11.2.3. path
+
11.2.4. docinfo
+
11.2.5. mlock
+
11.2.6. morphology
+
11.2.7. dict
+
11.2.8. index_sp
+
11.2.9. index_zones
+
11.2.10. min_stemming_len
+
11.2.11. stopwords
+
11.2.12. wordforms
+
11.2.13. exceptions
+
11.2.14. min_word_len
+
11.2.15. charset_type
+
11.2.16. charset_table
+
11.2.17. ignore_chars
+
11.2.18. min_prefix_len
+
11.2.19. min_infix_len
+
11.2.20. prefix_fields
+
11.2.21. infix_fields
+
11.2.22. enable_star
+
11.2.23. ngram_len
+
11.2.24. ngram_chars
+
11.2.25. phrase_boundary
+
11.2.26. phrase_boundary_step
+
11.2.27. html_strip
+
11.2.28. html_index_attrs
+
11.2.29. html_remove_elements
+
11.2.30. local
+
11.2.31. agent
+
11.2.32. agent_blackhole
+
11.2.33. agent_connect_timeout
+
11.2.34. agent_query_timeout
+
11.2.35. preopen
+
11.2.36. ondisk_dict
+
11.2.37. inplace_enable
+
11.2.38. inplace_hit_gap
+
11.2.39. inplace_docinfo_gap
+
11.2.40. inplace_reloc_factor
+
11.2.41. inplace_write_factor
+
11.2.42. index_exact_words
+
11.2.43. overshort_step
+
11.2.44. stopword_step
+
11.2.45. hitless_words
+
11.2.46. expand_keywords
+
11.2.47. blend_chars
+
11.2.48. blend_mode
+
11.2.49. rt_mem_limit
+
11.2.50. rt_field
+
11.2.51. rt_attr_uint
+
11.2.52. rt_attr_bigint
+
11.2.53. rt_attr_float
+
11.2.54. rt_attr_timestamp
+
11.2.55. rt_attr_string
+
11.3. indexer program configuration + options
+
11.3.1. mem_limit
+
11.3.2. max_iops
+
11.3.3. max_iosize
+
11.3.4. max_xmlpipe2_field
+
11.3.5. write_buffer
+
11.3.6. max_file_field_buffer
+
11.4. searchd program configuration + options
+
11.4.1. listen
+
11.4.2. address
+
11.4.3. port
+
11.4.4. log
+
11.4.5. query_log
+
11.4.6. query_log_format
+
11.4.7. read_timeout
+
11.4.8. client_timeout
+
11.4.9. max_children
+
11.4.10. pid_file
+
11.4.11. max_matches
+
11.4.12. seamless_rotate
+
11.4.13. preopen_indexes
+
11.4.14. unlink_old
+
11.4.15. attr_flush_period
+
11.4.16. ondisk_dict_default
+
11.4.17. max_packet_size
+
11.4.18. mva_updates_pool
+
11.4.19. crash_log_path
+
11.4.20. max_filters
+
11.4.21. max_filter_values
+
11.4.22. listen_backlog
+
11.4.23. read_buffer
+
11.4.24. read_unhinted
+
11.4.25. max_batch_queries
+
11.4.26. subtree_docs_cache
+
11.4.27. subtree_hits_cache
+
11.4.28. workers
+
11.4.29. dist_threads
+
11.4.30. binlog_path
+
11.4.31. binlog_flush
+
11.4.32. binlog_max_log_size
+
11.4.33. collation_server
+
11.4.34. collation_libc_locale
+
11.4.35. plugin_dir
+
11.4.36. mysql_version_string
+
11.4.37. rt_flush_period
+
11.4.38. thread_stack
+
11.4.39. expansion_limit
+
11.4.40. compat_sphinxql_magics
+
11.4.41. watchdog
+
+

11.1. Data source configuration options

+

11.1.1. type

+

Data source type. Mandatory, no default value. Known types are + mysql, pgsql, + mssql, xmlpipe and + xmlpipe2, and odbc.

All other per-source options depend on source type selected by + this option. Names of the options used for SQL sources (ie. MySQL, + PostgreSQL, MS SQL) start with "sql_"; names of the ones used for + xmlpipe and xmlpipe2 start with "xmlpipe_". All source types except + xmlpipe are conditional; they might or might not be + supported depending on your build settings, installed client + libraries, etc. mssql type is currently only + available on Windows. odbc type is available both on + Windows natively and on Linux through UnixODBC library.

Example:

+type = mysql
+
+

11.1.2. sql_host

+

SQL server host to connect to. Mandatory, no default value. + Applies to SQL source types (mysql, + pgsql, mssql) only.

In the simplest case when Sphinx resides on the same host with + your MySQL or PostgreSQL installation, you would simply specify + "localhost". Note that MySQL client library chooses whether to connect + over TCP/IP or over UNIX socket based on the host name. Specifically + "localhost" will force it to use UNIX socket (this is the default and + generally recommended mode) and "127.0.0.1" will force TCP/IP usage. + Refer to MySQL + manual for more details.

Example:

+sql_host = localhost
+
+

11.1.3. sql_port

+

SQL server IP port to connect to. Optional, default is 3306 for + mysql source type and 5432 for pgsql + type. Applies to SQL source types (mysql, + pgsql, mssql) only. Note that it + depends on sql_host setting + whether this value will actually be used.

Example:

+sql_port = 3306
+
+

11.1.4. sql_user

+

SQL user to use when connecting to sql_host. Mandatory, no default value. + Applies to SQL source types (mysql, + pgsql, mssql) only.

Example:

+sql_user = test
+
+

11.1.5. sql_pass

+

SQL user password to use when connecting to sql_host. Mandatory, no default value. + Applies to SQL source types (mysql, + pgsql, mssql) only.

Example:

+sql_pass = mysecretpassword
+
+

11.1.6. sql_db

+

SQL database (in MySQL terms) to use after the connection and + perform further queries within. Mandatory, no default value. Applies + to SQL source types (mysql, pgsql, + mssql) only.

Example:

+sql_db = test
+
+

11.1.7. sql_sock

+

UNIX socket name to connect to for local SQL servers. Optional, + default value is empty (use client library default settings). Applies + to SQL source types (mysql, pgsql, + mssql) only.

On Linux, it would typically be + /var/lib/mysql/mysql.sock. On FreeBSD, it would + typically be /tmp/mysql.sock. Note that it + depends on sql_host setting + whether this value will actually be used.

Example:

+sql_sock = /tmp/mysql.sock
+
+

11.1.8. mysql_connect_flags

+

MySQL client connection flags. Optional, default value is 0 (do + not set any flags). Applies to mysql source type + only.

This option must contain an integer value with the sum of the + flags. The value will be passed to mysql_real_connect() + verbatim. The flags are enumerated in mysql_com.h include file. Flags + that are especially interesting in regard to indexing, with their + respective values, are as follows:

  • CLIENT_COMPRESS = 32; can use compression protocol

  • +
  • CLIENT_SSL = 2048; switch to SSL after handshake

  • +
  • CLIENT_SECURE_CONNECTION = 32768; new 4.1 + authentication

  • +
+

For instance, you can specify 2080 (2048+32) to use + both compression and SSL, or 32768 to use new authentication only. + Initially, this option was introduced to be able to use compression + when the indexer and mysqld + are on different hosts. Compression on 1 Gbps links is most likely to + hurt indexing time though it reduces network traffic, both in theory + and in practice. However, enabling compression on 100 Mbps links may + improve indexing time significantly (upto 20-30% of the total indexing + time improvement was reported). Your mileage may vary.

Example:

+mysql_connect_flags = 32 # enable compression
+
+

11.1.9. mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca

+

SSL certificate settings to use for connecting to MySQL server. + Optional, default values are empty strings (do not use SSL). Applies + to mysql source type only.

These directives let you set up secure SSL connection between + indexer and MySQL. The details on creating the + certificates and setting up MySQL server can be found in MySQL + documentation.

Example:

+mysql_ssl_cert = /etc/ssl/client-cert.pem
+mysql_ssl_key = /etc/ssl/client-key.pem
+mysql_ssl_ca = /etc/ssl/cacert.pem
+
+

11.1.10. odbc_dsn

+

ODBC DSN to connect to. Mandatory, no default value. Applies to + odbc source type only.

ODBC DSN (Data Source Name) specifies the credentials (host, + user, password, etc) to use when connecting to ODBC data source. The + format depends on specific ODBC driver used.

Example:

+odbc_dsn = Driver={Oracle ODBC Driver};Dbq=myDBName;Uid=myUsername;Pwd=myPassword
+
+

11.1.11. sql_query_pre

+

Pre-fetch query, or pre-query. Multi-value, optional, default is + empty list of queries. Applies to SQL source types + (mysql, pgsql, + mssql) only.

Multi-value means that you can specify several pre-queries. They + are executed before the main fetch + query, and they will be exectued exactly in order of + appeareance in the configuration file. Pre-query results are + ignored.

Pre-queries are useful in a lot of ways. They are used to setup + encoding, mark records that are going to be indexed, update internal + counters, set various per-connection SQL server options and variables, + and so on.

Perhaps the most frequent pre-query usage is to specify the + encoding that the server will use for the rows it returnes. It + must match the encoding that Sphinx expects (as specified by + charset_type and charset_table options). Two MySQL + specific examples of setting the encoding are:

+sql_query_pre = SET CHARACTER_SET_RESULTS=cp1251
+sql_query_pre = SET NAMES utf8
+

Also specific to MySQL sources, it is useful to disable + query cache (for indexer connection only) in pre-query, because + indexing queries are not going to be re-run frequently anyway, and + there's no sense in caching their results. That could be achieved + with:

+sql_query_pre = SET SESSION query_cache_type=OFF
+

Example:

+sql_query_pre = SET NAMES utf8
+sql_query_pre = SET SESSION query_cache_type=OFF
+
+

11.1.12. sql_query

+

Main document fetch query. Mandatory, no default value. Applies + to SQL source types (mysql, pgsql, + mssql) only.

There can be only one main query. This is the query which is + used to retrieve documents from SQL server. You can specify up to 32 + full-text fields (formally, upto SPH_MAX_FIELDS from sphinx.h), and an + arbitrary amount of attributes. All of the columns that are neither + document ID (the first one) nor attributes will be full-text + indexed.

Document ID MUST be the very + first field, and it MUST BE UNIQUE UNSIGNED + POSITIVE (NON-ZERO, NON-NEGATIVE) INTEGER NUMBER. It can be + either 32-bit or 64-bit, depending on how you built Sphinx; by default + it builds with 32-bit IDs support but --enable-id64 + option to configure allows to build with 64-bit + document and word IDs support.

Example:

+sql_query = \
+	SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, \
+		title, content \
+	FROM documents
+
+

11.1.13. sql_joined_field

+

Joined/payload field fetch query. Multi-value, optional, default + is empty list of queries. Applies to SQL source types + (mysql, pgsql, + mssql) only.

sql_joined_field lets you use two different + features: joined fields, and payloads (payload fields). It's syntax is + as follows:

+sql_joined_field = FIELD-NAME 'from'  ( 'query' | 'payload-query' ); \
+    QUERY [ ; RANGE-QUERY ]
+

where

  • FIELD-NAME is a joined/payload field name;

  • +
  • QUERY is an SQL query that must fetch values to + index.

  • +
  • RANGE-QUERY is an optional SQL query that fetches a range + of values to index. (Added in version 2.0.1-beta.)

  • +
+

Joined fields let you avoid JOIN and/or GROUP_CONCAT + statements in the main document fetch query (sql_query). This can be + useful when SQL-side JOIN is slow, or needs to be offloaded on Sphinx + side, or simply to emulate MySQL-specific GROUP_CONCAT funcionality in + case your database server does not support it.

The query must return exactly 2 columns: document ID, and text + to append to a joined field. Document IDs can be duplicate, but they + must be in ascending order. All the text rows fetched for a + given ID will be concatented together, and the concatenation result + will be indexed as the entire contents of a joined field. Rows will be + concatenated in the order returned from the query, and separating + whitespace will be inserted between them. For instance, if joined + field query returns the following rows:

+( 1, 'red' )
+( 1, 'right' )
+( 1, 'hand' )
+( 2, 'mysql' )
+( 2, 'sphinx' )
+

then the indexing results would be equivalent to that of + adding a new text field with a value of 'red right hand' to document 1 + and 'mysql sphinx' to document 2.

Joined fields are only indexed differently. There are no other + differences between joined fields and regular text fields.

Starting with 2.0.1-beta, ranged queries can be used when + a single query is not efficient enough or does not work because of the + database driver limitations. It works similar to the ranged queries in + the main indexing loop, see Section 3.7, “Ranged queries”. The + range will be queried for and fetched upfront once, then multiple + queries with different $start and $end + substitutions will be run to fetch the actual data.

Payloads let you create a special field in which, instead + of keyword positions, so-called user payloads are stored. Payloads are + custom integer values attached to every keyword. They can then be used + in search time to affect the ranking.

The payload query must return exactly 3 columns: document ID; + keyword; and integer payload value. Document IDs can be duplicate, but + they must be in ascending order. Payloads must be unsigned + integers within 24-bit range, ie. from 0 to 16777215. For reference, + payloads are currently internally stored as in-field keyword + positions, but that is not guaranteed and might change in the + future.

Currently, the only method to account for payloads is to use + SPH_RANK_PROXIMITY_BM25 ranker. On indexes with payload fields, it + will automatically switch to a variant that matches keywords in those + fields, computes a sum of matched payloads multiplied by field + wieghts, and adds that sum to the final rank.

Example:

+sql_joined_field = \
+	tagstext from query; \
+	SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC
+
+

11.1.14. sql_query_range

+

Range query setup. Optional, default is empty. Applies to SQL + source types (mysql, pgsql, + mssql) only.

Setting this option enables ranged document fetch queries (see + Section 3.7, “Ranged queries”). Ranged queries are useful to avoid + notorious MyISAM table locks when indexing lots of data. (They also + help with other less notorious issues, such as reduced performance + caused by big result sets, or additional resources consumed by InnoDB + to serialize big read transactions.)

The query specified in this option must fetch min and max + document IDs that will be used as range boundaries. It must return + exactly two integer fields, min ID first and max ID second; the field + names are ignored.

When ranged queries are enabled, sql_query will be required to contain + $start and $end macros (because it + obviously would be a mistake to index the whole table many times + over). Note that the intervals specified by + $start..$end will not overlap, so + you should not remove document IDs that are exactly equal to + $start or $end from your query. The + example in Section 3.7, “Ranged queries”) illustrates that; note + how it uses greater-or-equal and less-or-equal comparisons.

Example:

+sql_query_range = SELECT MIN(id),MAX(id) FROM documents
+
+

11.1.15. sql_range_step

+

Range query step. Optional, default is 1024. Applies to SQL + source types (mysql, pgsql, + mssql) only.

Only used when ranged + queries are enabled. The full document IDs interval fetched by + sql_query_range will be + walked in this big steps. For example, if min and max IDs fetched are + 12 and 3456 respectively, and the step is 1000, indexer will call + sql_query several times with the + following substitutions:

  • $start=12, $end=1011

  • +
  • $start=1012, $end=2011

  • +
  • $start=2012, $end=3011

  • +
  • $start=3012, $end=3456

  • +
+

Example:

+sql_range_step = 1000
+
+

11.1.16. sql_query_killlist

+

Kill-list query. Optional, default is empty (no query). Applies + to SQL source types (mysql, pgsql, + mssql) only. Introduced in version 0.9.9-rc1.

This query is expected to return a number of 1-column rows, each + containing just the document ID. The returned document IDs are stored + within an index. Kill-list for a given index suppresses results from + other indexes, depending on index order in the + query. The intended use is to help implement deletions and updates on + existing indexes without rebuilding (actually even touching them), and + especially to fight phantom results problem.

Let us dissect an example. Assume we have two indexes, 'main' + and 'delta'. Assume that documents 2, 3, and 5 were deleted since last + reindex of 'main', and documents 7 and 11 were updated (ie. their text + contents were changed). Assume that a keyword 'test' occurred in all + these mentioned documents when we were indexing 'main'; still occurs + in document 7 as we index 'delta'; but does not occur in document 11 + any more. We now reindex delta and then search through both these + indexes in proper (least to most recent) order:

+$res = $cl->Query ( "test", "main delta" );
+

First, we need to properly handle deletions. The result set + should not contain documents 2, 3, or 5. Second, we also need to avoid + phantom results. Unless we do something about it, document 11 + will appear in search results! It will be found + in 'main' (but not 'delta'). And it will make it to the final result + set unless something stops it.

Kill-list, or K-list for short, is that something. Kill-list + attached to 'delta' will suppress the specified rows from all + the preceding indexes, in this case just 'main'. So to get the + expected results, we should put all the updated + and deleted document IDs into it.

Example:

+sql_query_killlist = \
+	SELECT id FROM documents WHERE updated_ts>=@last_reindex UNION \
+	SELECT id FROM documents_deleted WHERE deleted_ts>=@last_reindex
+
+

11.1.17. sql_attr_uint

+

Unsigned integer attribute + declaration. Multi-value (there might be multiple attributes + declared), optional. Applies to SQL source types + (mysql, pgsql, + mssql) only.

The column value should fit into 32-bit unsigned integer range. + Values outside this range will be accepted but wrapped around. For + instance, -1 will be wrapped around to 2^32-1 or 4,294,967,295.

You can specify bit count for integer attributes by appending + ':BITCOUNT' to attribute name (see example below). Attributes with + less than default 32-bit size, or bitfields, perform slower. But they + require less RAM when using extern + storage: such bitfields are packed together in 32-bit chunks in + .spa attribute data file. Bit size settings are + ignored if using inline + storage.

Example:

+sql_attr_uint = group_id
+sql_attr_uint = forum_id:9 # 9 bits for forum_id
+
+

11.1.18. sql_attr_bool

+

Boolean attribute declaration. + Multi-value (there might be multiple attributes declared), optional. + Applies to SQL source types (mysql, + pgsql, mssql) only. Equivalent to + sql_attr_uint declaration + with a bit count of 1.

Example:

+sql_attr_bool = is_deleted # will be packed to 1 bit
+
+

11.1.19. sql_attr_bigint

+

64-bit signed integer attribute declaration. Multi-value (there + might be multiple attributes declared), optional. Applies to SQL + source types (mysql, pgsql, + mssql) only. Note that unlike sql_attr_uint, these values are + signed. Introduced in version 0.9.9-rc1.

Example:

+sql_attr_bigint = my_bigint_id
+
+

11.1.20. sql_attr_timestamp

+

UNIX timestamp attribute + declaration. Multi-value (there might be multiple attributes + declared), optional. Applies to SQL source types + (mysql, pgsql, + mssql) only.

Timestamps can store date and time in the range of Jan 01, 1970 + to Jan 19, 2038 with a precision of one second. The expected column + value should be a timestamp in UNIX format, ie. 32-bit unsigned + integer number of seconds elapsed since midnight, January 01, 1970, + GMT. Timestamps are internally stored and handled as integers + everywhere. But in addition to working with timestamps as integers, + it's also legal to use them along with different date-based functions, + such as time segments sorting mode, or day/week/month/year extraction + for GROUP BY.

Note that DATE or DATETIME column types in MySQL can not + be directly used as timestamp attributes in Sphinx; you need to + explicitly convert such columns using UNIX_TIMESTAMP function (if data + is in range).

Note timestamps can not represent dates before January 01, 1970, + and UNIX_TIMESTAMP() in MySQL will not return anything expected. If + you only needs to work with dates, not times, consider TO_DAYS() + function in MySQL instead.

Example:

+sql_attr_timestamp = UNIX_TIMESTAMP(added_datetime) AS added_ts
+
+

11.1.21. sql_attr_str2ordinal

+

Ordinal string number attribute declaration. Multi-value (there + might be multiple attributes declared), optional. Applies to SQL + source types (mysql, pgsql, + mssql) only.

This attribute type (so-called ordinal, for brevity) is intended + to allow sorting by string values, but without storing the strings + themselves. When indexing ordinals, string values are fetched from + database, temporarily stored, sorted, and then replaced by their + respective ordinal numbers in the array of sorted strings. So, the + ordinal number is an integer such that sorting by it produces the same + result as if lexicographically sorting by original strings. by string + values lexicographically.

Earlier versions could consume a lot of RAM for indexing + ordinals. Starting with revision r1112, ordinals accumulation and + sorting also runs in fixed memory (at the cost of using additional + temporary disk space), and honors mem_limit settings.

Ideally the strings should be sorted differently, depending on + the encoding and locale. For instance, if the strings are known to be + Russian text in KOI8R encoding, sorting the bytes 0xE0, 0xE1, and 0xE2 + should produce 0xE1, 0xE2 and 0xE0, because in KOI8R value 0xE0 + encodes a character that is (noticeably) after characters encoded by + 0xE1 and 0xE2. Unfortunately, Sphinx does not support that at the + moment and will simply sort the strings bytewise.

Note that the ordinals are by construction local to each index, + and it's therefore impossible to merge ordinals while retaining the + proper order. The processed strings are replaced by their sequential + number in the index they occurred in, but different indexes have + different sets of strings. For instance, if 'main' index contains + strings "aaa", "bbb", "ccc", and so on up to "zzz", they'll be + assigned numbers 1, 2, 3, and so on up to 26, respectively. But then + if 'delta' only contains "zzz" the assigned number will be 1. And + after the merge, the order will be broken. Unfortunately, this is + impossible to workaround without storing the original strings (and + once Sphinx supports storing the original strings, ordinals will not + be necessary any more).

Example:

+sql_attr_str2ordinal = author_name
+
+

11.1.22. sql_attr_float

+

Floating point attribute + declaration. Multi-value (there might be multiple attributes + declared), optional. Applies to SQL source types + (mysql, pgsql, + mssql) only.

The values will be stored in single precision, 32-bit IEEE 754 + format. Represented range is approximately from 1e-38 to 1e+38. The + amount of decimal digits that can be stored precisely is approximately + 7. One important usage of the float attributes is storing latitude and + longitude values (in radians), for further usage in query-time + geosphere distance calculations.

Example:

+sql_attr_float = lat_radians
+sql_attr_float = long_radians
+
+

11.1.23. sql_attr_multi

+

Multi-valued attribute (MVA) + declaration. Multi-value (ie. there may be more than one such + attribute declared), optional. Applies to SQL source types + (mysql, pgsql, + mssql) only.

Plain attributes only allow to attach 1 value per each document. + However, there are cases (such as tags or categories) when it is + desired to attach multiple values of the same attribute and be able to + apply filtering or grouping to value lists.

The declaration format is as follows (backslashes are for + clarity only; everything can be declared in a single line as well): +

+sql_attr_multi = ATTR-TYPE ATTR-NAME 'from' SOURCE-TYPE \
+	[;QUERY] \
+	[;RANGE-QUERY]
+

where

  • ATTR-TYPE is 'uint' or 'timestamp'

  • +
  • SOURCE-TYPE is 'field', 'query', or 'ranged-query'

  • +
  • QUERY is SQL query used to fetch all ( docid, attrvalue ) + pairs

  • +
  • RANGE-QUERY is SQL query used to fetch min and max ID + values, similar to 'sql_query_range'

  • +
+

Example:

+sql_attr_multi = uint tag from query; SELECT id, tag FROM tags
+sql_attr_multi = uint tag from ranged-query; \
+	SELECT id, tag FROM tags WHERE id>=$start AND id<=$end; \
+	SELECT MIN(id), MAX(id) FROM tags
+
+

11.1.24. sql_attr_string

+

String attribute declaration. Multi-value (ie. there may be more + than one such attribute declared), optional. Applies to SQL source + types (mysql, pgsql, + mssql) only. Introduced in version 1.10-beta.

String attributes can store arbitrary strings attached to every + document. There's a fixed size limit of 4 MB per value. Also, + searchd will currently cache all the values in + RAM, which is an additional implicit limit.

As of 1.10-beta, strings can only be used for storage and + retrieval. They can not participate in expressions, be used for + filtering, sorting, or grouping (ie. in WHERE, ORDER or GROUP + clauses). Note that attributes declared using + sql_attr_string will not be full-text indexed; + you can use sql_field_string directive for + that.

Example:

+sql_attr_string = title # will be stored but will not be indexed
+
+

11.1.25. sql_attr_str2wordcount

+

Word-count attribute declaration. Multi-value (ie. there may be + more than one such attribute declared), optional. Applies to SQL + source types (mysql, pgsql, + mssql) only. Introduced in version 1.10-beta.

Word-count attribute takes a string column, tokenizes it + according to index settings, and stores the resulting number of tokens + in an attribute. This number of tokens ("word count") is a normal + integer that can be later used, for instance, in custom ranking + expressions (boost shorter titles, help identify exact field matches, + etc).

Example:

+sql_attr_str2wordcount = title_wc
+
+

11.1.26. sql_column_buffers

+

Per-column buffer sizes. Optional, default is empty (deduce the + sizes automatically). Applies to odbc, + mssql source types only. Introduced in version + 2.0.1-beta.

ODBC and MS SQL drivers sometimes can not return the maximum + actual column size to be expected. For instance, NVARCHAR(MAX) columns + always report their length as 2147483647 bytes to + indexer even though the actually used length is + likely considerably less. However, the receiving buffers still need to + be allocated upfront, and their sizes have to be determined. When the + driver does not report the column length at all, Sphinx allocates + default 1 KB buffers for each non-char column, and 1 MB buffers for + each char column. Driver-reported column length also gets clamped by + an upper limie of 8 MB, so in case the driver reports (almost) a 2 GB + column length, it will be clamped and a 8 MB buffer will be allocated + instead for that column. These hard-coded limits can be overridden + using the sql_column_buffers directive, either in order + to save memory on actually shorter columns, or overcome the 8 MB limit + on actually longer columns. The directive values must be a + comma-separated lists of selected column names and sizes: +

+sql_column_buffers = <colname>=<size>[K|M] [, ...]
+

Example:

+sql_query = SELECT id, mytitle, mycontent FROM documents
+sql_column_buffers = mytitle=64K, mycontent=10M
+
+

11.1.27. sql_field_string

+

Combined string attribute and full-text field declaration. + Multi-value (ie. there may be more than one such attribute declared), + optional. Applies to SQL source types (mysql, + pgsql, mssql) only. Introduced in + version 1.10-beta.

sql_attr_string only + stores the column value but does not full-text index it. In some cases + it might be desired to both full-text index the column and store it as + attribute. sql_field_string lets you do exactly that. + Both the field and the attribute will be named the same.

Example:

+sql_field_string = title # will be both indexed and stored
+
+

11.1.28. sql_field_str2wordcount

+

Combined word-count attribute and full-text field declaration. + Multi-value (ie. there may be more than one such attribute declared), + optional. Applies to SQL source types (mysql, + pgsql, mssql) only. Introduced in + version 1.10-beta.

sql_attr_str2wordcount + only stores the column word count but does not full-text index it. In + some cases it might be desired to both full-text index the column and + also have the count. sql_field_str2wordcount lets you + do exactly that. Both the field and the attribute will be named the + same.

Example:

+sql_field_str2wordcount = title # will be indexed, and counted/stored
+
+

11.1.29. sql_file_field

+

File based field declaration. Applies to SQL source types + (mysql, pgsql, + mssql) only. Introduced in version 1.10-beta.

This directive makes indexer interpret + field contents as a file name, and load and index the referred file. + Files larger than max_file_field_buffer in + size are skipped. Any errors during the file loading (IO errors, + missed limits, etc) will be reported as indexing warnings and will + not early terminate the indexing. No content will be indexed + for such files.

Example:

+sql_file_field = my_file_path # load and index files referred to by my_file_path
+
+

11.1.30. sql_query_post

+

Post-fetch query. Optional, default value is empty. Applies to + SQL source types (mysql, pgsql, + mssql) only.

This query is executed immediately after sql_query completes successfully. When + post-fetch query produces errors, they are reported as warnings, but + indexing is not terminated. It's result set is ignored. Note + that indexing is not yet completed at the point when this query + gets executed, and further indexing still may fail. Therefore, any + permanent updates should not be done from here. For instance, updates + on helper table that permanently change the last successfully indexed + ID should not be run from post-fetch query; they should be run from + post-index query + instead.

Example:

+sql_query_post = DROP TABLE my_tmp_table
+
+

11.1.31. sql_query_post_index

+

Post-index query. Optional, default value is empty. Applies to + SQL source types (mysql, pgsql, + mssql) only.

This query is executed when indexing is fully and succesfully + completed. If this query produces errors, they are reported as + warnings, but indexing is not terminated. It's result set is + ignored. $maxid macro can be used in its text; it will be + expanded to maximum document ID which was actually fetched from the + database during indexing. If no documents were indexed, $maxid will be + expanded to 0.

Example:

+sql_query_post_index = REPLACE INTO counters ( id, val ) \
+    VALUES ( 'max_indexed_id', $maxid )
+
+

11.1.32. sql_ranged_throttle

+

Ranged query throttling period, in milliseconds. Optional, + default is 0 (no throttling). Applies to SQL source types + (mysql, pgsql, + mssql) only.

Throttling can be useful when indexer imposes too much load on + the database server. It causes the indexer to sleep for given amount + of milliseconds once per each ranged query step. This sleep is + unconditional, and is performed before the fetch query.

Example:

+sql_ranged_throttle = 1000 # sleep for 1 sec before each query step
+
+

11.1.33. sql_query_info

+

Document info query. Optional, default is empty. Applies to + mysql source type only.

Only used by CLI search to fetch and display document + information, only works with MySQL at the moment, and only intended + for debugging purposes. This query fetches the row that will be + displayed by CLI search utility for each document ID. It is required + to contain $id macro that expands to the queried document + ID.

Example:

+sql_query_info = SELECT * FROM documents WHERE id=$id
+
+

11.1.34. xmlpipe_command

+

Shell command that invokes xmlpipe stream producer. Mandatory. + Applies to xmlpipe and xmlpipe2 + source types only.

Specifies a command that will be executed and which output will + be parsed for documents. Refer to Section 3.8, “xmlpipe data source” or Section 3.9, “xmlpipe2 data source” for specific format description.

Example:

+xmlpipe_command = cat /home/sphinx/test.xml
+
+

11.1.35. xmlpipe_field

+

xmlpipe field declaration. Multi-value, optional. Applies to + xmlpipe2 source type only. Refer to Section 3.9, “xmlpipe2 data source”.

Example:

+xmlpipe_field = subject
+xmlpipe_field = content
+
+

11.1.36. xmlpipe_field_string

+

xmlpipe field and string attribute declaration. Multi-value, + optional. Applies to xmlpipe2 source type only. Refer + to Section 3.9, “xmlpipe2 data source”. Introduced in version + 1.10-beta.

Makes the specified XML element indexed as both a full-text + field and a string attribute. Equivalent to <sphinx:field + name="field" attr="string"/> declaration within the XML + file.

Example:

+xmlpipe_field_string = subject
+
+

11.1.37. xmlpipe_field_wordcount

+

xmlpipe field and word count attribute declaration. Multi-value, + optional. Applies to xmlpipe2 source type only. Refer + to Section 3.9, “xmlpipe2 data source”. Introduced in version + 1.10-beta.

Makes the specified XML element indexed as both a full-text + field and a word count attribute. Equivalent to <sphinx:field + name="field" attr="wordcount"/> declaration within the XML + file.

Example:

+xmlpipe_field_wordcount = subject
+
+

11.1.38. xmlpipe_attr_uint

+

xmlpipe integer attribute declaration. Multi-value, optional. + Applies to xmlpipe2 source type only. Syntax fully + matches that of sql_attr_uint.

Example:

+xmlpipe_attr_uint = author
+
+

11.1.39. xmlpipe_attr_bool

+

xmlpipe boolean attribute declaration. Multi-value, optional. + Applies to xmlpipe2 source type only. Syntax fully + matches that of sql_attr_bool.

Example:

+xmlpipe_attr_bool = is_deleted # will be packed to 1 bit
+
+

11.1.40. xmlpipe_attr_timestamp

+

xmlpipe UNIX timestamp attribute declaration. Multi-value, + optional. Applies to xmlpipe2 source type only. + Syntax fully matches that of sql_attr_timestamp.

Example:

+xmlpipe_attr_timestamp = published
+
+

11.1.41. xmlpipe_attr_str2ordinal

+

xmlpipe string ordinal attribute declaration. Multi-value, + optional. Applies to xmlpipe2 source type only. + Syntax fully matches that of sql_attr_str2ordinal.

Example:

+xmlpipe_attr_str2ordinal = author_sort
+
+

11.1.42. xmlpipe_attr_float

+

xmlpipe floating point attribute declaration. Multi-value, + optional. Applies to xmlpipe2 source type only. + Syntax fully matches that of sql_attr_float.

Example:

+xmlpipe_attr_float = lat_radians
+xmlpipe_attr_float = long_radians
+
+

11.1.43. xmlpipe_attr_multi

+

xmlpipe MVA attribute declaration. Multi-value, optional. + Applies to xmlpipe2 source type only.

This setting declares an MVA attribute tag in xmlpipe2 stream. + The contents of the specified tag will be parsed and a list of + integers that will constitute the MVA will be extracted, similar to + how sql_attr_multi parses + SQL column contents when 'field' MVA source type is specified.

Example:

+xmlpipe_attr_multi = taglist
+
+

11.1.44. xmlpipe_attr_string

+

xmlpipe string declaration. Multi-value, optional. Applies to + xmlpipe2 source type only. Introduced in version + 1.10-beta.

This setting declares a string attribute tag in xmlpipe2 stream. + The contents of the specified tag will be parsed and stored as a + string value.

Example:

+xmlpipe_attr_string = subject
+
+

11.1.45. xmlpipe_fixup_utf8

+

Perform Sphinx-side UTF-8 validation and filtering to prevent + XML parser from choking on non-UTF-8 documents. Optional, default is + 0. Applies to xmlpipe2 source type only.

Under certain occasions it might be hard or even impossible to + guarantee that the incoming XMLpipe2 document bodies are in perfectly + valid and conforming UTF-8 encoding. For instance, documents with + national single-byte encodings could sneak into the stream. libexpat + XML parser is fragile, meaning that it will stop processing in such + cases. UTF8 fixup feature lets you avoid that. When fixup is enabled, + Sphinx will preprocess the incoming stream before passing it to the + XML parser and replace invalid UTF-8 sequences with spaces.

Example:

+xmlpipe_fixup_utf8 = 1
+
+

11.1.46. mssql_winauth

+

MS SQL Windows authentication flag. Boolean, optional, default + value is 0 (false). Applies to mssql source type + only. Introduced in version 0.9.9-rc1.

Whether to use currently logged in Windows account credentials + for authentication when connecting to MS SQL Server. Note that when + running searchd as a service, account user can + differ from the account you used to install the service.

Example:

+mssql_winauth = 1
+
+

11.1.47. mssql_unicode

+

MS SQL encoding type flag. Boolean, optional, default value is 0 + (false). Applies to mssql source type only. + Introduced in version 0.9.9-rc1.

Whether to ask for Unicode or single-byte data when querying MS + SQL Server. This flag must be in sync with charset_type directive; that is, to + index Unicode data, you must set both charset_type in + the index (to 'utf-8') and mssql_unicode in the + source (to 1). For reference, MS SQL will actually return data in + UCS-2 encoding instead of UTF-8, but Sphinx will automatically handle + that.

Example:

+mssql_unicode = 1
+
+

11.1.48. unpack_zlib

+

Columns to unpack using zlib (aka deflate, aka gunzip). + Multi-value, optional, default value is empty list of columns. Applies + to SQL source types (mysql, pgsql, + mssql) only. Introduced in version 0.9.9-rc1.

Columns specified using this directive will be unpacked by + indexer using standard zlib algorithm (called + deflate and also implemented by gunzip). When + indexing on a different box than the database, this lets you offload + the database, and save on network traffic. The feature is only + available if zlib and zlib-devel were both available during build + time.

Example:

+unpack_zlib = col1
+unpack_zlib = col2
+
+

11.1.49. unpack_mysqlcompress

+

Columns to unpack using MySQL UNCOMPRESS() algorithm. + Multi-value, optional, default value is empty list of columns. Applies + to SQL source types (mysql, pgsql, + mssql) only. Introduced in version 0.9.9-rc1.

Columns specified using this directive will be unpacked by + indexer using modified zlib algorithm used by + MySQL COMPRESS() and UNCOMPRESS() functions. When indexing on a + different box than the database, this lets you offload the database, + and save on network traffic. The feature is only available if zlib and + zlib-devel were both available during build time.

Example:

+unpack_mysqlcompress = body_compressed
+unpack_mysqlcompress = description_compressed
+
+

11.1.50. unpack_mysqlcompress_maxsize

+

Buffer size for UNCOMPRESS()ed data. Optional, default value is + 16M. Introduced in version 0.9.9-rc1.

When using unpack_mysqlcompress, due + to implementation intrincacies it is not possible to deduce the + required buffer size from the compressed data. So the buffer must be + preallocated in advance, and unpacked data can not go over the buffer + size. This option lets you control the buffer size, both to limit + indexer memory use, and to enable unpacking of + really long data fields if necessary.

Example:

+unpack_mysqlcompress_maxsize = 1M
+
+

11.2. Index configuration options

+

11.2.1. type

+

Index type. Known values are 'plain', 'distributed', and 'rt'. + Optional, default is 'plain' (plain local index).

Sphinx supports several different types of indexes. Versions + 0.9.x supported two index types: plain local indexes that are stored + and processed on the local machine; and distributed indexes, that + involve not only local searching but querying remote + searchd instances over the network as well (see + Section 5.8, “Distributed searching”). Version 1.10-beta also adds support + for so-called real-time indexes (or RT indexes for short) that are + also stored and processed locally, but additionally allow for + on-the-fly updates of the full-text index (see Chapter 4, Real-time indexes). Note that attributes + can be updated on-the-fly using either plain local indexes or RT + ones.

Index type setting lets you choose the needed type. By default, + plain local index type will be assumed.

Example:

+type = distributed
+
+

11.2.2. source

+

Adds document source to local index. Multi-value, + mandatory.

Specifies document source to get documents from when the current + index is indexed. There must be at least one source. There may be + multiple sources, without any restrictions on the source types: ie. + you can pull part of the data from MySQL server, part from PostgreSQL, + part from the filesystem using xmlpipe2 wrapper.

However, there are some restrictions on the source data. First, + document IDs must be globally unique across all sources. If that + condition is not met, you might get unexpected search results. Second, + source schemas must be the same in order to be stored within the same + index.

No source ID is stored automatically. Therefore, in order to be + able to tell what source the matched document came from, you will need + to store some additional information yourself. Two typical approaches + include:

  1. mangling document ID and encoding source ID in it: +

    +source src1
    +{
    +	sql_query = SELECT id*10+1, ... FROM table1
    +	...
    +}
    +
    +source src2
    +{
    +	sql_query = SELECT id*10+2, ... FROM table2
    +	...
    +}
    +
  2. +
  3. storing source ID simply as an attribute:

    +source src1
    +{
    +	sql_query = SELECT id, 1 AS source_id FROM table1
    +	sql_attr_uint = source_id
    +	...
    +}
    +
    +source src2
    +{
    +	sql_query = SELECT id, 2 AS source_id FROM table2
    +	sql_attr_uint = source_id
    +	...
    +}
    +
  4. +
+

Example:

+source = srcpart1
+source = srcpart2
+source = srcpart3
+
+

11.2.3. path

+

Index files path and file name (without extension). + Mandatory.

Path specifies both directory and file name, but without + extension. indexer will append different + extensions to this path when generating final names for both permanent + and temporary index files. Permanent data files have several different + extensions starting with '.sp'; temporary files' extensions start with + '.tmp'. It's safe to remove .tmp* files is if + indexer fails to remove them automatically.

For reference, different index files store the following data: +

  • .spa stores document attributes (used + in extern docinfo storage + mode only);

  • +
  • .spd stores matching document ID + lists for each word ID;

  • +
  • .sph stores index header + information;

  • +
  • .spi stores word lists (word IDs and + pointers to .spd file);

  • +
  • .spk stores kill-lists;

  • +
  • .spm stores MVA data;

  • +
  • .spp stores hit (aka posting, aka + word occurence) lists for each word ID;

  • +
  • .sps stores string attribute + data.

  • +
+

Example:

+path = /var/data/test1
+
+

11.2.4. docinfo

+

Document attribute values (docinfo) storage mode. Optional, + default is 'extern'. Known values are 'none', 'extern' and + 'inline'.

Docinfo storage mode defines how exactly docinfo will be + physically stored on disk and RAM. "none" means that there will be no + docinfo at all (ie. no attributes). Normally you need not to set + "none" explicitly because Sphinx will automatically select "none" when + there are no attributes configured. "inline" means that the docinfo + will be stored in the .spd file, along with the + document ID lists. "extern" means that the docinfo will be stored + separately (externally) from document ID lists, in a special + .spa file.

Basically, externally stored docinfo must be kept in RAM when + querying. for performance reasons. So in some cases "inline" might be + the only option. However, such cases are infrequent, and docinfo + defaults to "extern". Refer to Section 3.2, “Attributes” for + in-depth discussion and RAM usage estimates.

Example:

+docinfo = inline
+
+

11.2.5. mlock

+

Memory locking for cached data. Optional, default is 0 (do not + call mlock()).

For search performance, searchd preloads a + copy of .spa and .spi files + in RAM, and keeps that copy in RAM at all times. But if there are no + searches on the index for some time, there are no accesses to that + cached copy, and OS might decide to swap it out to disk. First queries + to such "cooled down" index will cause swap-in and their latency will + suffer.

Setting mlock option to 1 makes Sphinx lock physical RAM used + for that cached data using mlock(2) system call, and that prevents + swapping (see man 2 mlock for details). mlock(2) is a privileged call, + so it will require searchd to be either run from + root account, or be granted enough privileges otherwise. If mlock() + fails, a warning is emitted, but index continues working.

Example:

+mlock = 1
+
+

11.2.6. morphology

+

A list of morphology preprocessors to apply. Optional, default + is empty (do not apply any preprocessor).

Morphology preprocessors can be applied to the words being + indexed to replace different forms of the same word with the base, + normalized form. For instance, English stemmer will normalize both + "dogs" and "dog" to "dog", making search results for both searches the + same.

Built-in preprocessors include English stemmer, Russian stemmer + (that supports UTF-8 and Windows-1251 encodings), Soundex, and + Metaphone. The latter two replace the words with special phonetic + codes that are equal is words are phonetically close. Additional + stemmers provided by Snowball project libstemmer + library can be enabled at compile time using + --with-libstemmer configure + option. Built-in English and Russian stemmers should be faster than + their libstemmer counterparts, but can produce slightly different + results, because they are based on an older version. Metaphone + implementation is based on Double Metaphone algorithm and indexes the + primary code.

Built-in values that are available for use in + morphology option are as follows:

  • none - do not perform any morphology processing;

  • +
  • stem_en - apply Porter's English stemmer;

  • +
  • stem_ru - apply Porter's Russian stemmer;

  • +
  • stem_enru - apply Porter's English and Russian + stemmers;

  • +
  • stem_cz - apply Czech stemmer;

  • +
  • soundex - replace keywords with their SOUNDEX code;

  • +
  • metaphone - replace keywords with their METAPHONE + code.

  • +
+

Additional values provided by libstemmer are in + 'libstemmer_XXX' format, where XXX is libstemmer algorithm codename + (refer to libstemmer_c/libstemmer/modules.txt for + a complete list).

Several stemmers can be specified (comma-separated). They will + be applied to incoming words in the order they are listed, and the + processing will stop once one of the stemmers actually modifies the + word. Also when wordforms + feature is enabled the word will be looked up in word forms dictionary + first, and if there is a matching entry in the dictionary, stemmers + will not be applied at all. Or in other words, wordforms can be used to implement + stemming exceptions.

Example:

+morphology = stem_en, libstemmer_sv
+
+

11.2.7. dict

+

The keywords dictionary type. Known values are 'crc' and + 'keywords'. Optional, default is 'crc'. Introduced in version + 2.0.1-beta.

The default dictionary type in Sphinx, and the only one + available until version 2.0.1-beta, is a so-called CRC dictionary + which never stores the original keyword text in the index. Instead, + keywords are replaced with their control sum value (either CRC32 or + FNV64, depending whether Sphinx was built with + --enable-id64) both when searching and indexing, and + that value is used internally in the index.

That approach has two drawbacks. First, in CRC32 case there is a + chance of control sum collision between several pairs of different + keywords, growing quadratically with the number of unique keywords in + the index. (FNV64 case is unaffected in practice, as a chance of a + single FNV64 collision in a dictionary of 1 billion entries is + approximately 1:16, or 6.25 percent. And most dictionaries will be + much more compact that a billion keywords, as a typical spoken human + language has in the region of 1 to 10 million word forms.) Second, and + more importantly, substring searches are not directly possible with + control sums. Sphinx alleviated that by pre-indexing all the possible + substrings as separate keywords (see Section 11.2.18, “min_prefix_len”, Section 11.2.19, “min_infix_len” directives). That actually has an + added benefit of matching substrings in the quickest way possible. But + at the same time pre-indexing all substrings grows the index size a + lot (factors of 3-10x and even more would not be unusual) and impacts + the indexing time respectively, rendering substring searches on big + indexes rather impractical.

Keywords dictionary, introduced in 2.0.1-beta, fixes both these + drawbacks. It stores the keywords in the index and performs + search-time wildcard expansion. For example, a search for a 'test*' + prefix could internally expand to 'test|tests|testing' query based on + the dictionary contents. That expansion is fully transparent to the + application, except that the separate per-keyword statistics for all + the actually matched keywords would now also be reported.

Indexing with keywords dictionary should be 1.1x to 1.3x slower + compared to regular, non-substring indexing - but times faster + compared to substring indexing (either prefix or infix). Index size + should only be slightly bigger that than of the regular non-substring + index, with a 1..10% percent total difference Regular keyword + searching time must be very close or identical across all three + discussed index kinds (CRC non-substring, CRC substring, keywords). + Substring searching time can vary greatly depending on how many actual + keywords match the given substring (in other words, into how many + keywords does the search term expand). The maximum number of keywords + matched is restricted by the expansion_limit + directive.

Essentially, keywords and CRC dictionaries represent the two + different trade-off substring searching decisions. You can choose to + either sacrifice indexing time and index size in favor of top-speed + worst-case searches (CRC dictionary), or only slightly impact indexing + time but sacrifice worst-case searching time when the prefix expands + into very many keywords (keywords dictionary).

Example:

+dict = keywords
+
+

11.2.8. index_sp

+

Whether to detect and index sentence and paragraph boundaries. + Optional, default is 0 (do not detect and index). Introduced in + version 2.0.1-beta.

This directive enables sentence and paragraph boundary indexing. + It's required for the SENTENCE and PARAGRAPH operators to work. + Sentence boundary detection is based on plain text analysis, so you + only need to set index_sp = 1 to enable it. Paragraph + detection is however based on HTML markup, and happens in the HTML stripper. So to index paragraph + locations you also need to enable the stripper by specifying + html_strip = 1. Both types of boundaries are detected + based on a few built-in rules enumerated just below.

Sentence boundary detection rules are as follows.

  • Question and excalamation signs (? and !) are always a + sentence boundary.

  • +
  • Trailing dot (.) is a sentence boundary, except: +

    • When followed by a letter. That's considered a part + of an abbreviation (as in "S.T.A.L.K.E.R" or "Goldman + Sachs S.p.A.").

    • +
    • When followed by a comma. That's considered an + abbreviation followed by a comma (as in "Telecom Italia + S.p.A., founded in 1994").

    • +
    • When followed by a space and a small letter. That's + considered an abbreviation within a sentence (as in "News + Corp. announced in Februrary").

    • +
    • When preceded by a space and a capital letter, and + followed by a space. That's considered a middle initial + (as in "John D. Doe").

    • +
  • +
+

Paragraph boundaries are inserted at every block-level HTML tag. + Namely, those are (as taken from HTML 4 standard) ADDRESS, BLOCKQUOTE, + CAPTION, CENTER, DD, DIV, DL, DT, H1, H2, H3, H4, H5, LI, MENU, OL, P, + PRE, TABLE, TBODY, TD, TFOOT, TH, THEAD, TR, and UL.

Both sentences and paragraphs increment the keyword position + counter by 1.

Example:

+index_sp = 1
+
+

11.2.9. index_zones

+

A list of in-field HTML/XML zones to index. Optional, default is + empty (do not index zones). Introduced in version 2.0.1-beta.

Zones can be formally defined as follows. Everything between an + opening and a matching closing tag is called a span, and the aggregate + of all spans corresponding sharing the same tag name is called a zone. + For instance, everything between the occurrences of <H1> and + </H1> in the document field belongs to H1 zone.

Zone indexing, enabled by index_zones directive, is + an optional extension of the HTML stripper. So it will also require + that the stripper is enabled + (with html_strip = 1). The value of the + index_zones should be a comma-separated list of those tag + names and wildcards (ending with a star) that should be indexed as + zones.

Zones can nest and overlap arbitrarily. The only requirement is + that every opening tag has a matching tag. You can also have an + arbitrary number of both zones (as in unique zone names, such as H1) + and spans (all the occurrences of those H1 tags) in a document. Once + indexed, zones can then be used for matching with the ZONE operator, + see Section 5.3, “Extended query syntax”.

Example:

+index_zones = h*, th, title
+
+

11.2.10. min_stemming_len

+

Minimum word length at which to enable stemming. Optional, + default is 1 (stem everything). Introduced in version + 0.9.9-rc1.

Stemmers are not perfect, and might sometimes produce undesired + results. For instance, running "gps" keyword through Porter stemmer + for English results in "gp", which is not really the intent. + min_stemming_len feature lets you suppress stemming + based on the source word length, ie. to avoid stemming too short + words. Keywords that are shorter than the given threshold will not be + stemmed. Note that keywords that are exactly as long as specified + will be stemmed. So in order to avoid stemming 3-character + keywords, you should specify 4 for the value. For more finely grained + control, refer to wordforms + feature.

Example:

+min_stemming_len = 4
+
+

11.2.11. stopwords

+

Stopword files list (space separated). Optional, default is + empty.

Stopwords are the words that will not be indexed. Typically + you'd put most frequent words in the stopwords list because they do + not add much value to search results but consume a lot of resources to + process.

You can specify several file names, separated by spaces. All the + files will be loaded. Stopwords file format is simple plain text. The + encoding must match index encoding specified in charset_type. File data will be + tokenized with respect to charset_table settings, so you can + use the same separators as in the indexed data. The stemmers will also be applied when + parsing stopwords file.

While stopwords are not indexed, they still do affect the + keyword positions. For instance, assume that "the" is a stopword, that + document 1 contains the line "in office", and that document 2 contains + "in the office". Searching for "in office" as for exact phrase will + only return the first document, as expected, even though "the" in the + second one is stopped.

Example:

+stopwords = /usr/local/sphinx/data/stopwords.txt
+stopwords = stopwords-ru.txt stopwords-en.txt
+
+

11.2.12. wordforms

+

Word forms dictionary. Optional, default is empty.

Word forms are applied after tokenizing the incoming text by + charset_table rules. They + essentialy let you replace one word with another. Normally, that would + be used to bring different word forms to a single normal form (eg. to + normalize all the variants such as "walks", "walked", "walking" to the + normal form "walk"). It can also be used to implement stemming + exceptions, because stemming is not applied to words found in the + forms list.

Dictionaries are used to normalize incoming words both during + indexing and searching. Therefore, to pick up changes in wordforms + file it's required to reindex and restart + searchd.

Word forms support in Sphinx is designed to support big + dictionaries well. They moderately affect indexing speed: for + instance, a dictionary with 1 million entries slows down indexing + about 1.5 times. Searching speed is not affected at all. Additional + RAM impact is roughly equal to the dictionary file size, and + dictionaries are shared across indexes: ie. if the very same 50 MB + wordforms file is specified for 10 different indexes, additional + searchd RAM usage will be about 50 MB.

Dictionary file should be in a simple plain text format. Each + line should contain source and destination word forms, in exactly the + same encoding as specified in charset_type, separated by + "greater" sign. Rules from the charset_table will be applied when + the file is loaded. So basically it's as case sensitive as your other + full-text indexed data, ie. typically case insensitive. Here's the + file contents sample:

+walks > walk
+walked > walk
+walking > walk
+

There is a bundled spelldump utility that + helps you create a dictionary file in the format Sphinx can read from + source .dict and .aff + dictionary files in ispell or + MySpell format (as bundled with + OpenOffice).

Starting with version 0.9.9-rc1, you can map several source + words to a single destination word. Because the work happens on + tokens, not the source text, differences in whitespace and markup are + ignored.

+core 2 duo > c2d
+e6600 > c2d
+core 2duo > c2d
+

Notice however that the destination + wordforms are still always interpreted as a + single keyword! Having a mapping like "St John + > Saint John" will result in not matching "St John" when + searching for "Saint" or "John", because the destination keyword will + be "Saint John" with a space character in it (and it's barely possible + to input a destination keyword with a space).

Example:

+wordforms = /usr/local/sphinx/data/wordforms.txt
+
+

11.2.13. exceptions

+

Tokenizing exceptions file. Optional, default is empty.

Exceptions allow to map one or more tokens (including tokens + with characters that would normally be excluded) to a single keyword. + They are similar to wordforms in + that they also perform mapping, but have a number of important + differences.

Short summary of the differences is as follows:

  • exceptions are case sensitive, wordforms are not;

  • +
  • exceptions allow to detect sequences of tokens, wordforms + work with single words only;

  • +
  • exceptions can use special characters that are not + in charset_table, wordforms fully obey charset_table;

  • +
  • exceptions can underperform on huge dictionaries, + wordforms handle millions of entries well.

  • +
+

The expected file format is also plain text, with one line per + exception, and the line format is as follows:

+map-from-tokens => map-to-token
+

Example file:

+AT & T => AT&T
+AT&T => AT&T
+Standarten   Fuehrer => standartenfuhrer
+Standarten Fuhrer => standartenfuhrer
+MS Windows => ms windows
+Microsoft Windows => ms windows
+C++ => cplusplus
+c++ => cplusplus
+C plus plus => cplusplus
+

All tokens here are case sensitive: they will not be + processed by charset_table + rules. Thus, with the example exceptions file above, "At&t" text + will be tokenized as two keywords "at" and "t", because of lowercase + letters. On the other hand, "AT&T" will match exactly and produce + single "AT&T" keyword.

Note that this map-to keyword is a) always interpereted as a + single word, and b) is both case and space + sensitive! In our sample, "ms windows" query will + not match the document with "MS Windows" text. + The query will be interpreted as a query for two keywords, "ms" and + "windows". And what "MS Windows" gets mapped to is a + single keyword "ms windows", with a space in the + middle. On the other hand, "standartenfuhrer" will retrieve documents + with "Standarten Fuhrer" or "Standarten Fuehrer" contents (capitalized + exactly like this), or any capitalization variant of the keyword + itself, eg. "staNdarTenfUhreR". (It won't catch "standarten fuhrer", + however: this text does not match any of the listed exceptions because + of case sensitivity, and gets indexed as two separate + keywords.)

Whitespace in the map-from tokens list matters, but its amount + does not. Any amount of the whitespace in the map-form list will match + any other amount of whitespace in the indexed document or query. For + instance, "AT & T" map-from token will match "AT    &  T" + text, whatever the amount of space in both map-from part and the + indexed text. Such text will therefore be indexed as a special + "AT&T" keyword, thanks to the very first entry from the + sample.

Exceptions also allow to capture special characters (that are + exceptions from general charset_table rules; hence the + name). Assume that you generally do not want to treat '+' as a valid + character, but still want to be able search for some exceptions from + this rule such as 'C++'. The sample above will do just that, totally + independent of what characters are in the table and what are + not.

Exceptions are applied to raw incoming document and query data + during indexing and searching respectively. Therefore, to pick up + changes in the file it's required to reindex and restart + searchd.

Example:

+exceptions = /usr/local/sphinx/data/exceptions.txt
+
+

11.2.14. min_word_len

+

Minimum indexed word length. Optional, default is 1 (index + everything).

Only those words that are not shorter than this minimum will be + indexed. For instance, if min_word_len is 4, then 'the' won't be + indexed, but 'they' will be.

Example:

+min_word_len = 4
+
+

11.2.15. charset_type

+

Character set encoding type. Optional, default is 'sbcs'. Known + values are 'sbcs' and 'utf-8'.

Different encodings have different methods for mapping their + internal characters codes into specific byte sequences. Two most + common methods in use today are single-byte encoding and UTF-8. Their + corresponding charset_type values are 'sbcs' (stands for Single Byte + Character Set) and 'utf-8'. The selected encoding type will be used + everywhere where the index is used: when indexing the data, when + parsing the query against this index, when generating snippets, + etc.

Note that while 'utf-8' implies that the decoded values must be + treated as Unicode codepoint numbers, there's a family of 'sbcs' + encodings that may in turn treat different byte values differently, + and that should be properly reflected in your charset_table settings. For + example, the same byte value of 224 (0xE0 hex) maps to different + Russian letters depending on whether koi-8r or windows-1251 encoding + is used.

Example:

+charset_type = utf-8
+
+

11.2.16. charset_table

+

Accepted characters table, with case folding rules. Optional, + default value depends on charset_type value.

charset_table is the main workhorse of Sphinx tokenizing + process, ie. the process of extracting keywords from document text or + query txet. It controls what characters are accepted as valid and what + are not, and how the accepted characters should be transformed (eg. + should the case be removed or not).

You can think of charset_table as of a big table that has a + mapping for each and every of 100K+ characters in Unicode (or as of a + small 256-character table if you're using SBCS). By default, every + character maps to 0, which means that it does not occur within + keywords and should be treated as a separator. Once mentioned in the + table, character is mapped to some other character (most frequently, + either to itself or to a lowercase letter), and is treated as a valid + keyword part.

The expected value format is a commas-separated list of + mappings. Two simplest mappings simply declare a character as valid, + and map a single character to another single character, respectively. + But specifying the whole table in such form would result in bloated + and barely manageable specifications. So there are several syntax + shortcuts that let you map ranges of characters at once. The complete + list is as follows:

A->a
+

Single char mapping, declares source char 'A' as allowed + to occur within keywords and maps it to destination char 'a' + (but does not declare 'a' as + allowed).

A..Z->a..z
+

Range mapping, declares all chars in source range as + allowed and maps them to the destination range. Does + not declare destination range as allowed. + Also checks ranges' lengths (the lengths must be + equal).

a
+

Stray char mapping, declares a character as allowed and + maps it to itself. Equivalent to a->a single char + mapping.

a..z
+

Stray range mapping, declares all characters in range as + allowed and maps them to themselves. Equivalent to + a..z->a..z range mapping.

A..Z/2
+

Checkerboard range map. Maps every pair of chars to the + second char. More formally, declares odd characters in range + as allowed and maps them to the even ones; also declares even + characters as allowed and maps them to themselves. For + instance, A..Z/2 is equivalent to A->B, B->B, C->D, + D->D, ..., Y->Z, Z->Z. This mapping shortcut is + helpful for a number of Unicode blocks where uppercase and + lowercase letters go in such interleaved order instead of + contiguous chunks.

+

Control characters with codes from 0 to 31 are always treated as + separators. Characters with codes 32 to 127, ie. 7-bit ASCII + characters, can be used in the mappings as is. To avoid configuration + file encoding issues, 8-bit ASCII characters and Unicode characters + must be specified in U+xxx form, where 'xxx' is hexadecimal codepoint + number. This form can also be used for 7-bit ASCII characters to + encode special ones: eg. use U+20 to encode space, U+2E to encode dot, + U+2C to encode comma.

Example:

+# 'sbcs' defaults for English and Russian
+charset_table = 0..9, A..Z->a..z, _, a..z, \
+	U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF
+
+# 'utf-8' defaults for English and Russian
+charset_table = 0..9, A..Z->a..z, _, a..z, \
+	U+410..U+42F->U+430..U+44F, U+430..U+44F
+
+

11.2.17. ignore_chars

+

Ignored characters list. Optional, default is empty.

Useful in the cases when some characters, such as soft + hyphenation mark (U+00AD), should be not just treated as separators + but rather fully ignored. For example, if '-' is simply not in the + charset_table, "abc-def" text will be indexed as "abc" and "def" + keywords. On the contrary, if '-' is added to ignore_chars list, the + same text will be indexed as a single "abcdef" keyword.

The syntax is the same as for charset_table, but it's only + allowed to declare characters, and not allowed to map them. Also, the + ignored characters must not be present in charset_table.

Example:

+ignore_chars = U+AD
+
+

11.2.18. min_prefix_len

+

Minimum word prefix length to index. Optional, default is 0 (do + not index prefixes).

Prefix indexing allows to implement wildcard searching by + 'wordstart*' wildcards (refer to enable_star option for details on + wildcard syntax). When mininum prefix length is set to a positive + number, indexer will index all the possible keyword prefixes (ie. word + beginnings) in addition to the keywords themselves. Too short prefixes + (below the minimum allowed length) will not be indexed.

For instance, indexing a keyword "example" with min_prefix_len=3 + will result in indexing "exa", "exam", "examp", "exampl" prefixes + along with the word itself. Searches against such index for "exam" + will match documents that contain "example" word, even if they do not + contain "exam" on itself. However, indexing prefixes will make the + index grow significantly (because of many more indexed keywords), and + will degrade both indexing and searching times.

There's no automatic way to rank perfect word matches higher in + a prefix index, but there's a number of tricks to achieve that. First, + you can setup two indexes, one with prefix indexing and one without + it, search through both, and use SetIndexWeights() call to + combine weights. Second, you can enable star-syntax and rewrite your + extended-mode queries:

+# in sphinx.conf
+enable_star = 1
+
+// in query
+$cl->Query ( "( keyword | keyword* ) other keywords" );
+

Example:

+min_prefix_len = 3
+
+

11.2.19. min_infix_len

+

Minimum infix prefix length to index. Optional, default is 0 (do + not index infixes).

Infix indexing allows to implement wildcard searching by + 'start*', '*end', and '*middle*' wildcards (refer to enable_star option for details on + wildcard syntax). When mininum infix length is set to a positive + number, indexer will index all the possible keyword infixes (ie. + substrings) in addition to the keywords themselves. Too short infixes + (below the minimum allowed length) will not be indexed. For instance, + indexing a keyword "test" with min_infix_len=2 will result in indexing + "te", "es", "st", "tes", "est" infixes along with the word itself. + Searches against such index for "es" will match documents that contain + "test" word, even if they do not contain "es" on itself. However, + indexing infixes will make the index grow significantly (because of + many more indexed keywords), and will degrade both indexing and + searching times.

There's no automatic way to rank perfect word matches higher in + an infix index, but the same tricks as with prefix indexes can be + applied.

Example:

+min_infix_len = 3
+
+

11.2.20. prefix_fields

+

The list of full-text fields to limit prefix indexing to. + Optional, default is empty (index all fields in prefix mode).

Because prefix indexing impacts both indexing and searching + performance, it might be desired to limit it to specific full-text + fields only: for instance, to provide prefix searching through URLs, + but not through page contents. prefix_fields specifies what fields + will be prefix-indexed; all other fields will be indexed in normal + mode. The value format is a comma-separated list of field + names.

Example:

+prefix_fields = url, domain
+
+

11.2.21. infix_fields

+

The list of full-text fields to limit infix indexing to. + Optional, default is empty (index all fields in infix mode).

Similar to prefix_fields, but lets you limit + infix-indexing to given fields.

Example:

+infix_fields = url, domain
+
+

11.2.22. enable_star

+

Enables star-syntax (or wildcard syntax) when searching through + prefix/infix indexes. Optional, default is is 0 (do not use wildcard + syntax), for compatibility with 0.9.7. Known values are 0 and + 1.

This feature enables "star-syntax", or wildcard syntax, when + searching through indexes which were created with prefix or infix + indexing enabled. It only affects searching; so it can be changed + without reindexing by simply restarting + searchd.

The default value is 0, that means to disable star-syntax and + treat all keywords as prefixes or infixes respectively, depending on + indexing-time min_prefix_len and min_infix_len settings. The value + of 1 means that star ('*') can be used at the start and/or the end of + the keyword. The star will match zero or more characters.

For example, assume that the index was built with infixes and + that enable_star is 1. Searching should work as follows:

  1. "abcdef" query will match only those documents that + contain the exact "abcdef" word in them.

  2. +
  3. "abc*" query will match those documents that contain any + words starting with "abc" (including the documents which contain + the exact "abc" word only);

  4. +
  5. "*cde*" query will match those documents that contain any + words which have "cde" characters in any part of the word + (including the documents which contain the exact "cde" word + only).

  6. +
  7. "*def" query will match those documents that contain any + words ending with "def" (including the documents that contain + the exact "def" word only).

  8. +
+

Example:

+enable_star = 1
+
+

11.2.23. ngram_len

+

N-gram lengths for N-gram indexing. Optional, default is 0 + (disable n-gram indexing). Known values are 0 and 1 (other lengths to + be implemented).

N-grams provide basic CJK (Chinese, Japanese, Korean) support + for unsegmented texts. The issue with CJK searching is that there + could be no clear separators between the words. Ideally, the texts + would be filtered through a special program called segmenter that + would insert separators in proper locations. However, segmenters are + slow and error prone, and it's common to index contiguous groups of N + characters, or n-grams, instead.

When this feature is enabled, streams of CJK characters are + indexed as N-grams. For example, if incoming text is "ABCDEF" (where A + to F represent some CJK characters) and length is 1, in will be + indexed as if it was "A B C D E F". (With length equal to 2, it would + produce "AB BC CD DE EF"; but only 1 is supported at the moment.) Only + those characters that are listed in ngram_chars table will be split this + way; other ones will not be affected.

Note that if search query is segmented, ie. there are separators + between individual words, then wrapping the words in quotes and using + extended mode will resut in proper matches being found even if the + text was not segmented. For instance, assume that the original + query is BC DEF. After wrapping in quotes on the application side, it + should look like "BC" "DEF" (with quotes). This + query will be passed to Sphinx and internally split into 1-grams too, + resulting in "B C" "D E F" query, still with quotes that are the + phrase matching operator. And it will match the text even though there + were no separators in the text.

Even if the search query is not segmented, Sphinx should still + produce good results, thanks to phrase based ranking: it will pull + closer phrase matches (which in case of N-gram CJK words can mean + closer multi-character word matches) to the top.

Example:

+ngram_len = 1
+
+

11.2.24. ngram_chars

+

N-gram characters list. Optional, default is empty.

To be used in conjunction with in ngram_len, this list defines + characters, sequences of which are subject to N-gram extraction. Words + comprised of other characters will not be affected by N-gram indexing + feature. The value format is identical to charset_table.

Example:

+ngram_chars = U+3000..U+2FA1F
+
+

11.2.25. phrase_boundary

+

Phrase boundary characters list. Optional, default is + empty.

This list controls what characters will be treated as phrase + boundaries, in order to adjust word positions and enable phrase-level + search emulation through proximity search. The syntax is similar to + charset_table. Mappings are + not allowed and the boundary characters must not overlap with anything + else.

On phrase boundary, additional word position increment + (specified by phrase_boundary_step) will + be added to current word position. This enables phrase-level searching + through proximity queries: words in different phrases will be + guaranteed to be more than phrase_boundary_step distance away from + each other; so proximity search within that distance will be + equivalent to phrase-level search.

Phrase boundary condition will be raised if and only if such + character is followed by a separator; this is to avoid abbreviations + such as S.T.A.L.K.E.R or URLs being treated as several phrases.

Example:

+phrase_boundary = ., ?, !, U+2026 # horizontal ellipsis
+
+

11.2.26. phrase_boundary_step

+

Phrase boundary word position increment. Optional, default is + 0.

On phrase boundary, current word position will be additionally + incremented by this number. See phrase_boundary for + details.

Example:

+phrase_boundary_step = 100
+
+

11.2.27. html_strip

+

Whether to strip HTML markup from incoming full-text data. + Optional, default is 0. Known values are 0 (disable stripping) and 1 + (enable stripping).

Both HTML tags and entities and considered markup and get + processed.

HTML tags are removed, their contents (i.e., everything between + <P> and </P>) are left intact by default. You can choose + to keep and index attributes of the tags (e.g., HREF attribute in an A + tag, or ALT in an IMG one). Several well-known inline tags are + completely removed, all other tags are treated as block level and + replaced with whitespace. For example, 'te<B>st</B>' text + will be indexed as a single keyword 'test', however, + 'te<P>st</P>' will be indexed as two keywords 'te' and + 'st'. Known inline tags are as follows: A, B, I, S, U, BASEFONT, BIG, + EM, FONT, IMG, LABEL, SMALL, SPAN, STRIKE, STRONG, SUB, SUP, + TT.

HTML entities get decoded and replaced with corresponding UTF-8 + characters. Stripper supports both numeric forms (such as &#239;) + and text forms (such as &oacute; or &nbsp;). All entities as + specified by HTML4 standard are supported.

Stripping does not work with xmlpipe source + type (it's suggested to upgrade to xmlpipe2 anyway). It should work + with properly formed HTML and XHTML, but, just as most browsers, may + produce unexpected results on malformed input (such as HTML with stray + <'s or unclosed >'s).

Only the tags themselves, and also HTML comments, are stripped. + To strip the contents of the tags too (eg. to strip embedded scripts), + see html_remove_elements + option. There are no restrictions on tag names; ie. everything that + looks like a valid tag start, or end, or a comment will be + stripped.

Example:

+html_strip = 1
+
+

11.2.28. html_index_attrs

+

A list of markup attributes to index when stripping HTML. + Optional, default is empty (do not index markup attributes).

Specifies HTML markup attributes whose contents should be + retained and indexed even though other HTML markup is stripped. The + format is per-tag enumeration of indexable attributes, as shown in the + example below.

Example:

+html_index_attrs = img=alt,title; a=title;
+
+

11.2.29. html_remove_elements

+

A list of HTML elements for which to strip contents along with + the elements themselves. Optional, default is empty string (do not + strip contents of any elements).

This feature allows to strip element contents, ie. everything + that is between the opening and the closing tags. It is useful to + remove embedded scripts, CSS, etc. Short tag form for empty elements + (ie. <br />) is properly supported; ie. the text that follows + such tag will not be removed.

The value is a comma-separated list of element (tag) names whose + contents should be removed. Tag names are case insensitive.

Example:

+html_remove_elements = style, script
+
+

11.2.30. local

+

Local index declaration in the distributed index. Multi-value, optional, + default is empty.

This setting is used to declare local indexes that will be + searched when given distributed index is searched. All local indexes + will be searched sequentially, utilizing only 1 CPU or core; to + parallelize processing, you can configure searchd + to query itself (refer to Section 11.2.31, “agent” for the + details). There might be several local indexes declared per each + distributed index. Any local index can be mentioned several times in + other distributed indexes.

Example:

+local = chunk1
+local = chunk2
+
+

11.2.31. agent

+

Remote agent declaration in the distributed index. Multi-value, optional, + default is empty.

This setting is used to declare remote agents that will be + searched when given distributed index is searched. The agents can be + thought of as network pointers that specify host, port, and index + names. In the basic case agents would correspond to remote physical + machines. More formally, that is not always correct: you can point + several agents to the same remote machine; or you can even point + agents to the very same single instance of + searchd (in order to utilize many CPUs or + cores).

The value format is as follows:

+agent = specification:remote-indexes-list
+specification = hostname ":" port | path
+

Where 'hostname' is remote host name; 'port' is remote TCP + port; 'path' is Unix-domain socket path and 'remote-indexes-list' is a + comma-separated list of remote index names.

All agents will be searched in parallel. However, all indexes + specified for a given agent will be searched sequentially in this + agent. This lets you fine-tune the configuration to the hardware. For + instance, if two remote indexes are stored on the same physical HDD, + it's better to configure one agent with several sequentially searched + indexes to avoid HDD steping. If they are stored on different HDDs, + having two agents will be advantageous, because the work will be fully + parallelized. The same applies to CPUs; though CPU performance impact + caused by two processes stepping on each other is somewhat smaller and + frequently can be ignored at all.

On machines with many CPUs and/or HDDs, agents can be pointed to + the same machine to utilize all of the hardware in parallel and reduce + query latency. There is no need to setup several + searchd instances for that; it's legal to + configure the instance to contact itself. Here's an example setup, + intended for a 4-CPU machine, that will use up to 4 CPUs in parallel + to process each query:

+index dist
+{
+	type = distributed
+	local = chunk1
+	agent = localhost:9312:chunk2
+	agent = localhost:9312:chunk3
+	agent = localhost:9312:chunk4
+}
+

Note how one of the chunks is searched locally and the same + instance of searchd queries itself to launch searches through three + other ones in parallel.

Example:

+agent = localhost:9312:chunk2 # contact itself
+agent = /var/run/searchd.s:chunk2
+agent = searchbox2:9312:chunk3,chunk4 # search remote indexes
+
+

11.2.32. agent_blackhole

+

Remote blackhole agent declaration in the distributed index. Multi-value, optional, + default is empty. Introduced in version 0.9.9-rc1.

agent_blackhole lets you fire-and-forget + queries to remote agents. That is useful for debugging (or just + testing) production clusters: you can setup a separate + debugging/testing searchd instance, and forward the requests to this + instance from your production master (aggregator) instance without + interfering with production work. Master searchd will attempt to + connect and query blackhole agent normally, but it will neither wait + nor process any responses. Also, all network errors on blackhole + agents will be ignored. The value format is completely identical to + regular agent directive.

Example:

+agent_blackhole = testbox:9312:testindex1,testindex2
+
+

11.2.33. agent_connect_timeout

+

Remote agent connection timeout, in milliseconds. Optional, + default is 1000 (ie. 1 second).

When connecting to remote agents, searchd + will wait at most this much time for connect() call to complete + succesfully. If the timeout is reached but connect() does not + complete, and retries are + enabled, retry will be initiated.

Example:

+agent_connect_timeout = 300
+
+

11.2.34. agent_query_timeout

+

Remote agent query timeout, in milliseconds. Optional, default + is 3000 (ie. 3 seconds).

After connection, searchd will wait at most + this much time for remote queries to complete. This timeout is fully + separate from connection timeout; so the maximum possible delay caused + by a remote agent equals to the sum of + agent_connection_timeout and + agent_query_timeout. Queries will not be retried + if this timeout is reached; a warning will be produced instead.

Example:

+agent_query_timeout = 10000 # our query can be long, allow up to 10 sec
+
+

11.2.35. preopen

+

Whether to pre-open all index files, or open them per each + query. Optional, default is 0 (do not preopen).

This option tells searchd that it should + pre-open all index files on startup (or rotation) and keep them open + while it runs. Currently, the default mode is not to pre-open + the files (this may change in the future). Preopened indexes take a + few (currently 2) file descriptors per index. However, they save on + per-query open() calls; and also they are invulnerable to + subtle race conditions that may happen during index rotation under + high load. On the other hand, when serving many indexes (100s to + 1000s), it still might be desired to open the on per-query basis in + order to save file descriptors.

This directive does not affect indexer in + any way, it only affects searchd.

Example:

+preopen = 1
+
+

11.2.36. ondisk_dict

+

Whether to keep the dictionary file (.spi) for this index on + disk, or precache it in RAM. Optional, default is 0 (precache in RAM). + Introduced in version 0.9.9-rc1.

The dictionary (.spi) can be either kept on RAM or on disk. The + default is to fully cache it in RAM. That improves performance, but + might cause too much RAM pressure, especially if prefixes or infixes + were used. Enabling ondisk_dict results in 1 + additional disk IO per keyword per query, but reduces memory + footprint.

This directive does not affect indexer in + any way, it only affects searchd.

Example:

+ondisk_dict = 1
+
+

11.2.37. inplace_enable

+

Whether to enable in-place index inversion. Optional, default is + 0 (use separate temporary files). Introduced in version + 0.9.9-rc1.

inplace_enable greatly reduces indexing disk + footprint, at a cost of slightly slower indexing (it uses around 2x + less disk, but yields around 90-95% the original performance).

Indexing involves two major phases. The first phase collects, + processes, and partially sorts documents by keyword, and writes the + intermediate result to temporary files (.tmp*). The second phase fully + sorts the documents, and creates the final index files. Thus, + rebuilding a production index on the fly involves around 3x peak disk + footprint: 1st copy for the intermediate temporary files, 2nd copy for + newly constructed copy, and 3rd copy for the old index that will be + serving production queries in the meantime. (Intermediate data is + comparable in size to the final index.) That might be too much disk + footprint for big data collections, and + inplace_enable allows to reduce it. When enabled, it + reuses the temporary files, outputs the final data back to them, and + renames them on completion. However, this might require additional + temporary data chunk relocation, which is where the performance impact + comes from.

This directive does not affect searchd in + any way, it only affects indexer.

Example:

+inplace_enable = 1
+
+

11.2.38. inplace_hit_gap

+

In-place inversion + fine-tuning option. Controls preallocated hitlist gap size. Optional, + default is 0. Introduced in version 0.9.9-rc1.

This directive does not affect searchd in + any way, it only affects indexer.

Example:

+inplace_hit_gap = 1M
+
+

11.2.39. inplace_docinfo_gap

+

In-place inversion + fine-tuning option. Controls preallocated docinfo gap size. Optional, + default is 0. Introduced in version 0.9.9-rc1.

This directive does not affect searchd in + any way, it only affects indexer.

Example:

+inplace_docinfo_gap = 1M
+
+

11.2.40. inplace_reloc_factor

+

In-place + inversion fine-tuning option. Controls relocation buffer size + within indexing memory arena. Optional, default is 0.1. Introduced in + version 0.9.9-rc1.

This directive does not affect searchd in + any way, it only affects indexer.

Example:

+inplace_reloc_factor = 0.1
+
+

11.2.41. inplace_write_factor

+

In-place + inversion fine-tuning option. Controls in-place write buffer + size within indexing memory arena. Optional, default is 0.1. + Introduced in version 0.9.9-rc1.

This directive does not affect searchd in + any way, it only affects indexer.

Example:

+inplace_write_factor = 0.1
+
+

11.2.42. index_exact_words

+

Whether to index the original keywords along with the + stemmed/remapped versions. Optional, default is 0 (do not index). + Introduced in version 0.9.9-rc1.

When enabled, index_exact_words forces + indexer to put the raw keywords in the index + along with the stemmed versions. That, in turn, enables exact form operator in the query + language to work. This impacts the index size and the indexing time. + However, searching performance is not impacted at all.

Example:

+index_exact_words = 1
+
+

11.2.43. overshort_step

+

Position increment on overshort (less that min_word_len) keywords. Optional, + allowed values are 0 and 1, default is 1. Introduced in version + 0.9.9-rc1.

This directive does not affect searchd in + any way, it only affects indexer.

Example:

+overshort_step = 1
+
+

11.2.44. stopword_step

+

Position increment on stopwords. Optional, allowed values + are 0 and 1, default is 1. Introduced in version 0.9.9-rc1.

This directive does not affect searchd in + any way, it only affects indexer.

Example:

+stopword_step = 1
+
+

11.2.45. hitless_words

+

Hitless words list. Optional, allowed values are 'all', or a + list file name. Introduced in version 1.10-beta.

By default, Sphinx full-text index stores not only a list of + matching documents for every given keyword, but also a list of its + in-document positions (aka hitlist). Hitlists enables phrase, + proximity, strict order and other advanced types of searching, as well + as phrase proximity ranking. However, hitlists for specific frequent + keywords (that can not be stopped for some reason despite being + frequent) can get huge and thus slow to process while querying. Also, + in some cases we might only care about boolean keyword matching, and + never need position-based searching operators (such as phrase + matching) nor phrase ranking.

hitless_words lets you create indexes that + either do not have positional information (hitlists) at all, or skip + it for specific keywords.

Hitless index will generally use less space than the respective + regular index (about 1.5x can be expected). Both indexing and + searching should be faster, at a cost of missing positional query and + ranking support. When searching, positional queries (eg. phrase + queries) will be automatically converted to respective non-positional + (document-level) or combined queries. For instance, if keywords + "hello" and "world" are hitless, "hello world" phrase query will be + converted to (hello & world) bag-of-words query, matching all + documents that mention either of the keywords but not necessarily the + exact phrase. And if, in addition, keywords "simon" and "says" are not + hitless, "simon says hello world" will be converted to ("simon says" + & hello & world) query, matching all documents that contain + "hello" and "world" anywhere in the document, and also "simon says" as + an exact phrase.

Example:

+hitless_words = all
+
+

11.2.46. expand_keywords

+

Expand keywords with exact forms and/or stars when possible. + Optional, default is 0 (do not expand keywords). Introduced in version + 1.10-beta.

Queries against indexes with expand_keywords + feature enabled are internally expanded as follows. If the index was + built with prefix or infix indexing enabled, every keyword gets + internally replaced with a disjunction of keyword itself and a + respective prefix or infix (keyword with stars). If the index was + built with both stemming and index_exact_words enabled, + exact form is also added. Here's an example that shows how internal + expansion works when all of the above (infixes, stemming, and exact + words) are combined:

+running -> ( running | *running* | =running )
+

Expanded queries take naturally longer to complete, but can + possibly improve the search quality, as the documents with exact form + matches should be ranked generally higher than documents with stemmed + or infix matches.

Note that the existing query syntax does not allowe to emulate + this kind of expansion, because internal expansion works on keyword + level and expands keywords within phrase or quorum operators too + (which is not possible through the query syntax).

This directive does not affect indexer in + any way, it only affects searchd.

Example:

+expand_keywords = 1
+
+

11.2.47. blend_chars

+

Blended characters list. Optional, default is empty. Introduced + in version 1.10-beta.

Blended characters are indexed both as separators and valid + characters. For instance, assume that & is configured as blended + and AT&T occurs in an indexed document. Three different keywords + will get indexed, namely "at&t", treating blended characters as + valid, plus "at" and "t", treating them as separators.

Positions for tokens obtained by replacing blended characters + with whitespace are assigned as usual, so regular keywords will be + indexed just as if there was no blend_chars specified + at all. An additional token that mixes blended and non-blended + characters will be put at the starting position. For instance, if the + field contents are "AT&T company" occurs in the very beginning of + the text field, "at" will be given position 1, "t" position 2, + "company" positin 3, and "AT&T" will also be given position 1 + ("blending" with the opening regular keyword). Thus, querying for + either AT&T or just AT will match that document, and querying for + "AT T" as a phrase also match it. Last but not least, phrase query for + "AT&T company" will also match it, despite + the position

Blended characters can overlap with special characters used in + query syntax (think of T-Mobile or @twitter). Where possible, query + parser will automatically handle blended character as blended. For + instance, "hello @twitter" within quotes (a phrase operator) would + handle @-sign as blended, because @-syntax for field operator is not + allowed within phrases. Otherwise, the character would be handled as + an operator. So you might want to escape the keywords.

Starting with version 2.0.1-beta, blended characters can be + remapped, so that multiple different blended characters could be + normalized into just one base form. This is useful when indexing + multiple alternative Unicode codepoints with equivalent glyphs.

Example:

+blend_chars = +, &, U+23
+blend_chars = +, &->+ # 2.0.1 and above
+
+

11.2.48. blend_mode

+

Blended tokens indexing mode. Optional, default is + trim_none. Introduced in version 2.0.1-beta.

By default, tokens that mix blended and non-blended characters + get indexed in there entirety. For instance, when both at-sign and an + exclamation are in blend_chars, "@dude!" will get + result in two tokens indexed: "@dude!" (with all the blended + characters) and "dude" (without any). Therefore "@dude" query will + not match it.

blend_mode directive adds flexibility to this + indexing behavior. It takes a comma-separated list of options. +

+blend_mode = option [, option [, ...]]
+option = trim_none | trim_head | trim_tail | trim_both | skip_pure
+

Options specify token indexing variants. If multiple options are + specified, multiple variants of the same token will be indexed. + Regular keywords (resulting from that token by replacing blended with + whitespace) are always be indexed.

trim_none
+

Index the entire token.

trim_head
+

Trim heading blended characters, and index the resulting + token.

trim_tail
+

Trim trailing blended characters, and index the + resulting token.

trim_both
+

Trim both heading and trailing blended characters, and + index the resulting token.

skip_pure
+

Do not index the token if it's purely blended, that is, + consists of blended characters only.

+

Returning to the "@dude!" example above, setting + blend_mode = trim_head, trim_tail will result in two + tokens being indexed, "@dude" and "dude!". In this particular example, + trim_both would have no effect, because trimming both + blended characters results in "dude" which is already indexed as a + regular keyword. Indexing "@U.S.A." with trim_both + (and assuming that dot is blended two) would result in "U.S.A" being + indexed. Last but not least, skip_pure enables you to + fully ignore sequences of blended characters only. For example, "one + @@@ two" would be indexed exactly as "one two", and match that as a + phrase. That is not the case by default because a fully blended token + gets indexed and offsets the second keyword position.

Default behavior is to index the entire token, equivalent to + blend_mode = trim_none.

Example:

+blend_mode = trim_tail, skip_pure
+
+

11.2.49. rt_mem_limit

+

RAM chunk size limit. Optional, default is empty. Introduced in + version 1.10-beta.

RT index keeps some data in memory (so-called RAM chunk) and + also maintains a number of on-disk indexes (so-called disk chunks). + This directive lets you control the RAM chunk size. Once there's too + much data to keep in RAM, RT index will flush it to disk, activate a + newly created disk chunk, and reset the RAM chunk.

The limit is pretty strict; RT index should never allocate more + memory than it's limited to. The memory is not preallocated either, + hence, specifying 512 MB limit and only inserting 3 MB of data should + result in allocating 3 MB, not 512 MB.

Example:

+rt_mem_limit = 512M
+
+

11.2.50. rt_field

+

Full-text field declaration. Multi-value, mandatory Introduced + in version 1.10-beta.

Full-text fields to be indexed are declared using + rt_field directive. The names must be unique. The + order is preserved; and so field values in INSERT statements without + an explicit list of inserted columns will have to be in the same order + as configured.

Example:

+rt_field = author
+rt_field = title
+rt_field = content
+
+

11.2.51. rt_attr_uint

+

Unsigned integer attribute declaration. Multi-value (an + arbitrary number of attributes is allowed), optional. Declares an + unsigned 32-bit attribute. Introduced in version 1.10-beta.

Example:

+rt_attr_uint = gid
+
+

11.2.52. rt_attr_bigint

+

BIGINT attribute declaration. Multi-value (an arbitrary number + of attributes is allowed), optional. Declares a signed 64-bit + attribute. Introduced in version 1.10-beta.

Example:

+rt_attr_bigint = guid
+
+

11.2.53. rt_attr_float

+

Floating point attribute declaration. Multi-value (an arbitrary + number of attributes is allowed), optional. Declares a single + precision, 32-bit IEEE 754 format float attribute. Introduced in + version 1.10-beta.

Example:

+rt_attr_float = gpa
+
+

11.2.54. rt_attr_timestamp

+

Timestamp attribute declaration. Multi-value (an arbitrary + number of attributes is allowed), optional. Introduced in version + 1.10-beta.

Example:

+rt_attr_timestamp = date_added
+
+

11.2.55. rt_attr_string

+

String attribute declaration. Multi-value (an arbitrary number + of attributes is allowed), optional. Introduced in version + 1.10-beta.

Example:

+rt_attr_string = author
+
+

11.3. indexer program configuration + options

+

11.3.1. mem_limit

+

Indexing RAM usage limit. Optional, default is 32M.

Enforced memory usage limit that the + indexer will not go above. Can be specified in + bytes, or kilobytes (using K postfix), or megabytes (using M postfix); + see the example. This limit will be automatically raised if set to + extremely low value causing I/O buffers to be less than 8 KB; the + exact lower bound for that depends on the indexed data size. If the + buffers are less than 256 KB, a warning will be produced.

Maximum possible limit is 2047M. Too low values can hurt + indexing speed, but 256M to 1024M should be enough for most if not all + datasets. Setting this value too high can cause SQL server timeouts. + During the document collection phase, there will be periods when the + memory buffer is partially sorted and no communication with the + database is performed; and the database server can timeout. You can + resolve that either by raising timeouts on SQL server side or by + lowering mem_limit.

Example:

+mem_limit = 256M
+# mem_limit = 262144K # same, but in KB
+# mem_limit = 268435456 # same, but in bytes
+
+

11.3.2. max_iops

+

Maximum I/O operations per second, for I/O throttling. Optional, + default is 0 (unlimited).

I/O throttling related option. It limits maximum count of I/O + operations (reads or writes) per any given second. A value of 0 means + that no limit is imposed.

indexer can cause bursts of intensive disk + I/O during indexing, and it might desired to limit its disk activity + (and keep something for other programs running on the same machine, + such as searchd). I/O throttling helps to do + that. It works by enforcing a minimum guaranteed delay between + subsequent disk I/O operations performed by + indexer. Modern SATA HDDs are able to perform up + to 70-100+ I/O operations per second (that's mostly limited by disk + heads seek time). Limiting indexing I/O to a fraction of that can help + reduce search performance dedgradation caused by indexing.

Example:

+max_iops = 40
+
+

11.3.3. max_iosize

+

Maximum allowed I/O operation size, in bytes, for I/O + throttling. Optional, default is 0 (unlimited).

I/O throttling related option. It limits maximum file I/O + operation (read or write) size for all operations performed by + indexer. A value of 0 means that no limit is + imposed. Reads or writes that are bigger than the limit will be split + in several smaller operations, and counted as several operation by + max_iops setting. At the time of + this writing, all I/O calls should be under 256 KB (default internal + buffer size) anyway, so max_iosize values higher than 256 + KB must not affect anything.

Example:

+max_iosize = 1048576
+
+

11.3.4. max_xmlpipe2_field

+

Maximum allowed field size for XMLpipe2 source type, bytes. + Optional, default is 2 MB.

Example:

+max_xmlpipe2_field = 8M
+
+

11.3.5. write_buffer

+

Write buffer size, bytes. Optional, default is 1 MB.

Write buffers are used to write both temporary and final index + files when indexing. Larger buffers reduce the number of required disk + writes. Memory for the buffers is allocated in addition to mem_limit. Note that several + (currently up to 4) buffers for different files will be allocated, + proportionally increasing the RAM usage.

Example:

+write_buffer = 4M
+
+

11.3.6. max_file_field_buffer

+

Maximum file field adaptive buffer size, bytes. Optional, + default is 8 MB, minimum is 1 MB.

File field buffer is used to load files referred to from sql_file_field columns. This + buffer is adaptive, starting at 1 MB at first allocation, and growing + in 2x steps until either file contents can be loaded, or maximum + buffer size, specified by max_file_field_buffer + directive, is reached.

Thus, if there are no file fields are specified, no buffer is + allocated at all. If all files loaded during indexing are under (for + example) 2 MB in size, but max_file_field_buffer + value is 128 MB, peak buffer usage would still be only 2 MB. However, + files over 128 MB would be entirely skipped.

Example:

+max_file_field_buffer = 128M
+
+

11.4. searchd program configuration + options

+

11.4.1. listen

+

This setting lets you specify IP address and port, or + Unix-domain socket path, that searchd will listen on. + Introduced in version 0.9.9-rc1.

The informal grammar for listen setting is: +

+listen = ( address ":" port | port | path ) [ ":" protocol ]
+

I.e. you can specify either an IP address (or hostname) and + port number, or just a port number, or Unix socket path. If you + specify port number but not the address, searchd will + listen on all network interfaces. Unix path is identified by a leading + slash.

Starting with version 0.9.9-rc2, you can also specify a protocol + handler (listener) to be used for connections on this socket. + Supported protocol values are 'sphinx' (Sphinx 0.9.x API protocol) and + 'mysql41' (MySQL protocol used since 4.1 upto at least 5.1). More + details on MySQL protocol support can be found in Section 5.10, “MySQL protocol support and SphinxQL” section.

Examples:

+listen = localhost
+listen = localhost:5000
+listen = 192.168.0.1:5000
+listen = /var/run/sphinx.s
+listen = 9312
+listen = localhost:9306:mysql41
+

There can be multiple listen directives, searchd + will listen for client connections on all specified ports and sockets. + If no listen directives are found then the server will + listen on all available interfaces using the default SphinxAPI port + 9312. Starting with 1.10-beta, it will also listen on default SphinxQL + port 9306. Both port numbers are assigned by IANA (see http://www.iana.org/assignments/port-numbers + for details) and should therefore be available.

Unix-domain sockets are not supported on Windows.

+

11.4.2. address

+

Interface IP address to bind on. Optional, default is 0.0.0.0 + (ie. listen on all interfaces). DEPRECATED, use listen instead.

address setting lets you specify which network + interface searchd will bind to, listen on, and + accept incoming network connections on. The default value is 0.0.0.0 + which means to listen on all interfaces. At the time, you can + not specify multiple interfaces.

Example:

+address = 192.168.0.1
+
+

11.4.3. port

+

searchd TCP port number. DEPRECATED, + use listen instead. Used to be + mandatory. Default port number is 9312.

Example:

+port = 9312
+
+

11.4.4. log

+

Log file name. Optional, default is 'searchd.log'. All + searchd run time events will be logged in this + file.

Also you can use the 'syslog' as the file name. In this case the + events will be sent to syslog daemon. To use the syslog option the + sphinx must be configured '--with-syslog' on building.

Example:

+log = /var/log/searchd.log
+
+

11.4.5. query_log

+

Query log file name. Optional, default is empty (do not log + queries). All search queries will be logged in this file. The format + is described in Section 5.9, “searchd query log formats”.

In case of 'plain' format, you can use the 'syslog' as the path + to the log file. In this case all search queries will be sent to + syslog daemon with LOG_INFO priority, prefixed with '[query]' instead + of timestamp. To use the syslog option the sphinx must be configured + '--with-syslog' on building.

Example:

+query_log = /var/log/query.log
+
+

11.4.6. query_log_format

+

Query log format. Optional, allowed values are 'plain' and + 'sphinxql', default is 'plain'. Introduced in version + 2.0.1-beta.

Starting with version 2.0.1-beta, two different log formats are + supported. The default one logs queries in a custom text format. The + new one logs valid SphinxQL statements. This directive allows to + switch between the two formats on search daemon startup. The log + format can also be altered on the fly, using SET GLOBAL + query_log_format=sphinxql syntax. Refer to Section 5.9, “searchd query log formats” for more discussion and format + details.

Example:

+query_log_format = sphinxql
+
+

11.4.7. read_timeout

+

Network client request read timeout, in seconds. Optional, + default is 5 seconds. searchd will forcibly close + the client connections which fail to send a query within this + timeout.

Example:

+read_timeout = 1
+
+

11.4.8. client_timeout

+

Maximum time to wait between requests (in seconds) when using + persistent connections. Optional, default is five minutes.

Example:

+client_timeout = 3600
+
+

11.4.9. max_children

+

Maximum amount of children to fork (or in other words, + concurrent searches to run in parallel). Optional, default is 0 + (unlimited).

Useful to control server load. There will be no more than this + much concurrent searches running, at all times. When the limit is + reached, additional incoming clients are dismissed with temporarily + failure (SEARCHD_RETRY) status code and a message stating that the + server is maxed out.

Example:

+max_children = 10
+
+

11.4.10. pid_file

+

searchd process ID file name. + Mandatory.

PID file will be re-created (and locked) on startup. It will + contain head daemon process ID while the daemon is running, and it + will be unlinked on daemon shutdown. It's mandatory because Sphinx + uses it internally for a number of things: to check whether there + already is a running instance of searchd; to stop + searchd; to notify it that it should rotate the + indexes. Can also be used for different external automation + scripts.

Example:

+pid_file = /var/run/searchd.pid
+
+

11.4.11. max_matches

+

Maximum amount of matches that the daemon keeps in RAM for each + index and can return to the client. Optional, default is 1000.

Introduced in order to control and limit RAM usage, + max_matches setting defines how much matches will be kept + in RAM while searching each index. Every match found will still be + processed; but only best N of them will be kept + in memory and return to the client in the end. Assume that the index + contains 2,000,000 matches for the query. You rarely (if ever) need to + retrieve all of them. Rather, you need to scan + all of them, but only choose "best" at most, say, 500 by some criteria + (ie. sorted by relevance, or price, or anything else), and display + those 500 matches to the end user in pages of 20 to 100 matches. And + tracking only the best 500 matches is much more RAM and CPU efficient + than keeping all 2,000,000 matches, sorting them, and then discarding + everything but the first 20 needed to display the search results page. + max_matches controls N in that "best N" amount.

This parameter noticeably affects per-query RAM and CPU usage. + Values of 1,000 to 10,000 are generally fine, but higher limits must + be used with care. Recklessly raising max_matches to + 1,000,000 means that searchd will have to + allocate and initialize 1-million-entry matches buffer for + every query. That will obviously increase + per-query RAM usage, and in some cases can also noticeably impact + performance.

CAVEAT EMPTOR! Note that there also is another + place where this limit is enforced. max_matches can be + decreased on the fly through the corresponding API call, and the + default value in the API is also set to 1,000. So in order to + retrieve more than 1,000 matches to your application, you will have to + change the configuration file, restart searchd, and set proper limit + in SetLimits() call. Also + note that you can not set the value in the API higher than the value + in the .conf file. This is prohibited in order to have some protection + against malicious and/or malformed requests.

Example:

+max_matches = 10000
+
+

11.4.12. seamless_rotate

+

Prevents searchd stalls while rotating + indexes with huge amounts of data to precache. Optional, default is 1 + (enable seamless rotation).

Indexes may contain some data that needs to be precached in RAM. + At the moment, .spa, .spi + and .spm files are fully precached (they contain + attribute data, MVA data, and keyword index, respectively.) Without + seamless rotate, rotating an index tries to use as little RAM as + possible and works as follows:

  1. new queries are temporarly rejected (with "retry" error + code);

  2. +
  3. searchd waits for all currently + running queries to finish;

  4. +
  5. old index is deallocated and its files are renamed;

  6. +
  7. new index files are renamed and required RAM is + allocated;

  8. +
  9. new index attribute and dictionary data is preloaded to + RAM;

  10. +
  11. searchd resumes serving queries from + new index.

  12. +
+

However, if there's a lot of attribute or dictionary data, then + preloading step could take noticeble time - up to several minutes in + case of preloading 1-5+ GB files.

With seamless rotate enabled, rotation works as follows: +

  1. new index RAM storage is allocated;

  2. +
  3. new index attribute and dictionary data is asynchronously + preloaded to RAM;

  4. +
  5. on success, old index is deallocated and both indexes' + files are renamed;

  6. +
  7. on failure, new index is deallocated;

  8. +
  9. at any given moment, queries are served either from old or + new index copy.

  10. +
+

Seamless rotate comes at the cost of higher peak memory usage during the rotation (because + both old and new copies of .spa/.spi/.spm data + need to be in RAM while preloading new copy). Average usage stays the + same.

Example:

+seamless_rotate = 1
+
+

11.4.13. preopen_indexes

+

Whether to forcibly preopen all indexes on startup. Optional, + default is 1 (preopen everything).

Starting with 2.0.1-beta, the default value for this option is + now 1 (foribly preopen all indexes). In prior versions, it used to be + 0 (use per-index settings).

When set to 1, this directive overrides and enforces preopen on all indexes. They will be + preopened, no matter what is the per-index preopen + setting. When set to 0, per-index settings can take effect. (And they + default to 0.)

Pre-opened indexes avoid races between search queries and + rotations that can cause queries to fail occasionally. They also make + searchd use more file handles. In most scenarios + it's therefore preferred and recommended to preopen indexes.

Example:

+preopen_indexes = 1
+
+

11.4.14. unlink_old

+

Whether to unlink .old index copies on succesful rotation. + Optional, default is 1 (do unlink).

Example:

+unlink_old = 0
+
+

11.4.15. attr_flush_period

+

When calling UpdateAttributes() to update document + attributes in real-time, changes are first written to the in-memory + copy of attributes (docinfo must be set to + extern). Then, once searchd + shuts down normally (via SIGTERM being sent), the changes + are written to disk. Introduced in version 0.9.9-rc1.

Starting with 0.9.9-rc1, it is possible to tell + searchd to periodically write these changes back + to disk, to avoid them being lost. The time between those intervals is + set with attr_flush_period, in seconds.

It defaults to 0, which disables the periodic flushing, but + flushing will still occur at normal shut-down.

Example:

+attr_flush_period = 900 # persist updates to disk every 15 minutes
+
+

11.4.16. ondisk_dict_default

+

Instance-wide defaults for ondisk_dict directive. Optional, + default it 0 (precache dictionaries in RAM). Introduced in version + 0.9.9-rc1.

This directive lets you specify the default value of ondisk_dict for all the indexes + served by this copy of searchd. Per-index + directive take precedence, and will overwrite this instance-wide + default value, allowing for fine-grain control.

Example:

+ondisk_dict_default = 1 # keep all dictionaries on disk
+
+

11.4.17. max_packet_size

+

Maximum allowed network packet size. Limits both query packets + from clients, and response packets from remote agents in distributed + environment. Only used for internal sanity checks, does not directly + affect RAM use or performance. Optional, default is 8M. Introduced in + version 0.9.9-rc1.

Example:

+max_packet_size = 32M
+
+

11.4.18. mva_updates_pool

+

Shared pool size for in-memory MVA updates storage. Optional, + default size is 1M. Introduced in version 0.9.9-rc1.

This setting controls the size of the shared storage pool for + updated MVA values. Specifying 0 for the size disable MVA updates at + all. Once the pool size limit is hit, MVA update attempts will result + in an error. However, updates on regular (scalar) attributes will + still work. Due to internal technical difficulties, currently it is + not possible to store (flush) any updates on indexes + where MVA were updated; though this might be implemented in the + future. In the meantime, MVA updates are intended to be used as a + measure to quickly catchup with latest changes in the database until + the next index rebuild; not as a persistent storage mechanism.

Example:

+mva_updates_pool = 16M
+
+

11.4.19. crash_log_path

+

Deprecated debugging setting, path (formally prefix) for crash + log files. Introduced in version 0.9.9-rc1. Deprecated in version + 2.0.1-beta, as crash debugging information now gets logged into + searchd.log in text form, and separate binary crash logs are no longer + needed.

+

11.4.20. max_filters

+

Maximum allowed per-query filter count. Only used for internal + sanity checks, does not directly affect RAM use or performance. + Optional, default is 256. Introduced in version 0.9.9-rc1.

Example:

+max_filters = 1024
+
+

11.4.21. max_filter_values

+

Maximum allowed per-filter values count. Only used for internal + sanity checks, does not directly affect RAM use or performance. + Optional, default is 4096. Introduced in version 0.9.9-rc1.

Example:

+max_filter_values = 16384
+
+

11.4.22. listen_backlog

+

TCP listen backlog. Optional, default is 5.

Windows builds currently (as of 0.9.9) can only process the + requests one by one. Concurrent requests will be enqueued by the TCP + stack on OS level, and requests that can not be enqueued will + immediately fail with "connection refused" message. listen_backlog + directive controls the length of the connection queue. Non-Windows + builds should work fine with the default value.

Example:

+listen_backlog = 20
+
+

11.4.23. read_buffer

+

Per-keyword read buffer size. Optional, default is 256K.

For every keyword occurrence in every search query, there are + two associated read buffers (one for document list and one for hit + list). This setting lets you control their sizes, increasing per-query + RAM use, but possibly decreasing IO time.

Example:

+read_buffer = 1M
+
+

11.4.24. read_unhinted

+

Unhinted read size. Optional, default is 32K.

When querying, some reads know in advance exactly how much data + is there to be read, but some currently do not. Most prominently, hit + list size in not currently known in advance. This setting lest you + control how much data to read in such cases. It will impact hit list + IO time, reducing it for lists larger than unhinted read size, but + raising it for smaller lists. It will not affect RAM use + because read buffer will be already allocated. So it should be not + greater than read_buffer.

Example:

+read_unhinted = 32K
+
+

11.4.25. max_batch_queries

+

Limits the amount of queries per batch. Optional, default is + 32.

Makes searchd perform a sanity check of the amount of the + queries submitted in a single batch when using multi-queries. Set it to 0 to skip the + check.

Example:

+max_batch_queries = 256
+
+

11.4.26. subtree_docs_cache

+

Max common subtree document cache size, per-query. Optional, + default is 0 (disabled).

Limits RAM usage of a common subtree optimizer (see Section 5.11, “Multi-queries”). At most this much RAM will be spent to + cache document entries per each query. Setting the limit to 0 disables + the optimizer.

Example:

+subtree_docs_cache = 8M
+
+

11.4.27. subtree_hits_cache

+

Max common subtree hit cache size, per-query. Optional, default + is 0 (disabled).

Limits RAM usage of a common subtree optimizer (see Section 5.11, “Multi-queries”). At most this much RAM will be spent to + cache keyword occurrences (hits) per each query. Setting the limit to + 0 disables the optimizer.

Example:

+subtree_hits_cache = 16M
+
+

11.4.28. workers

+

Multi-processing mode (MPM). Optional; allowed values are none, + fork, prefork, and threads. Default is fork on Unix based systems, and + threads on Windows. Introduced in version 1.10-beta.

Lets you choose how searchd processes + multiple concurrent requests. The possible values are:

none
+

All requests will be handled serially, one-by-one. Prior + to 1.x, this was the only mode available on Windows.

fork
+

A new child process will be forked to handle every + incoming request. Historically, this is the default + mode.

prefork
+

On startup, searchd will pre-fork a + number of worker processes, and pass the incoming requests to + one of those children.

threads
+

A new thread will be created to handle every incoming + request. This is the only mode compatible with RT indexing + backend.

+

Historically, searchd used fork-based + model, which generally performs OK but spends a noticeable amount of + CPU in fork() system call when there's a high amount of (tiny) + requests per second. Prefork mode was implemented to alleviate that; + with prefork, worker processes are basically only created on startup + and re-created on index rotation, somewhat reducing fork() call + pressure.

Threads mode was implemented along with RT backend and is + required to use RT indexes. (Regular disk-based indexes work in all + the available modes.)

Example:

+workers = threads
+
+

11.4.29. dist_threads

+

Max local worker threads to use for parallelizable requests + (searching a distributed index; building a batch of snippets). + Optional, default is 0, which means to disable in-request parallelism. + Introduced in version 1.10-beta.

Distributed index can include several local indexes. + dist_threads lets you easily utilize multiple + CPUs/cores for that (previously existing alternative was to specify + the indexes as remote agents, pointing searchd to itself and paying + some network overheads).

When set to a value N greater than 1, this directive will create + up to N threads for every query, and schedule the specific searches + within these threads. For example, if there are 7 local indexes to + search and dist_threads is set to 2, then 2 parallel threads would be + created: one that sequentially searches 4 indexes, and another one + that searches the other 3 indexes.

In case of CPU bound workload, setting + dist_threads to 1x the number of cores is advised + (creating more threads than cores will not improve query time). In + case of mixed CPU/disk bound workload it might sometimes make sense to + use more (so that all cores could be utilizes even when there are + threads that wait for I/O completion).

Note that dist_threads does not require + threads MPM. You can perfectly use it with fork or prefork MPMs + too.

Starting with version 2.0.1-beta, building a batch of snippets + with load_files flag enabled can also be + parallelized. Up to dist_threads threads are be + created to process those files. That speeds up snippet extraction when + the total amount of document data to process is significant (hundreds + of megabytes).

Example:

+index dist_test
+{
+	type = distributed
+	local = chunk1
+	local = chunk2
+	local = chunk3
+	local = chunk4
+}
+
+# ...
+
+dist_threads = 4
+
+

11.4.30. binlog_path

+

Binary log (aka transaction log) files path. Optional, default + is build-time configured data directory. Introduced in version + 1.10-beta.

Binary logs are used for crash recovery of RT index data that + would otherwise only be stored in RAM. When logging is enabled, every + transaction COMMIT-ted into RT index gets written into a log file. + Logs are then automatically replayed on startup after an unclean + shutdown, recovering the logged changes.

binlog_path directive specifies the binary log + files location. It should contain just the path; + searchd will create and unlink multiple binlog.* + files in that path as necessary (binlog data, metadata, and lock + files, etc).

Empty value disables binary logging. That improves performance, + but puts RT index data at risk.

Example:

+binlog_path = # disable logging
+binlog_path = /var/data # /var/data/binlog.001 etc will be created
+
+

11.4.31. binlog_flush

+

Binary log transaction flush/sync mode. Optional, default is 2 + (flush every transaction, sync every second). Introduced in version + 1.10-beta.

This directive controls how frequently will binary log be + flushed to OS and synced to disk. Three modes are supported: +

  • 0, flush and sync every second. Best performance, but up + to 1 second worth of committed transactions can be lost both on + daemon crash, or OS/hardware crash.

  • +
  • 1, flush and sync every transaction. Worst performance, + but every committed transaction data is guaranteed to be + saved.

  • +
  • 2, flush every transaction, sync every second. Good + performance, and every committed transaction is guaranteed to be + saved in case of daemon crash. However, in case of OS/hardware + crash up to 1 second worth of committed transactions can be + lost.

  • +
+

For those familiar with MySQL and InnoDB, this directive is + entirely similar to innodb_flush_log_at_trx_commit. + In most cases, the default hybrid mode 2 provides a nice balance of + speed and safety, with full RT index data protection against daemon + crashes, and some protection against hardware ones.

Example:

+binlog_flush = 1 # ultimate safety, low speed
+
+

11.4.32. binlog_max_log_size

+

Maximum binary log file size. Optional, default is 0 (do not + reopen binlog file based on size). Introduced in version + 1.10-beta.

A new binlog file will be forcibly opened once the current + binlog file reaches this limit. This achieves a finer granularity of + logs and can yield more efficient binlog disk usage under certain + borderline workloads.

Example:

+binlog_max_log_size = 16M
+
+

11.4.33. collation_server

+

Default server collation. Optional, default is libc_ci. + Introduced in version 2.0.1-beta.

Specifies the default collation used for incoming requests. The + collation can be overridden on a per-query basis. Refer to Section 5.12, “Collations” section for the list of available collations + and other details.

Example:

+collation_server = utf8_ci
+
+

11.4.34. collation_libc_locale

+

Server libc locale. Optional, default is C. Introduced in + version 2.0.1-beta.

Specifies the libc locale, affecting the libc-based collations. + Refer to Section 5.12, “Collations” section for the details.

Example:

+collation_libc_locale = fr_FR
+
+

11.4.35. plugin_dir

+

Trusted location for the dynamic libraries (UDFs). Optional, + default is empty (no location). Introduced in version + 2.0.1-beta.

Specifies the trusted directory from which the UDF libraries can be loaded. Requires workers = thread to take effect.

Example:

+workers = threads
+plugin_dir = /usr/local/sphinx/lib
+
+

11.4.36. mysql_version_string

+

A server version string to return via MySQL protocol. Optional, + default is empty (return Sphinx version). Introduced in version + 2.0.1-beta.

Several picky MySQL client libraries depend on a particular + version number format used by MySQL, and moreover, sometimes choose a + different execution path based on the reported version number (rather + than the indicated capabilities flags). For instance, Python MySQLdb + 1.2.2 throws an exception when the version number is not in X.Y.ZZ + format; MySQL .NET connector 6.3.x fails internally on version numbers + 1.x along with a certain combination of flags, etc. To workaround + that, you can use mysql_version_string directive and + have searchd report a different version to + clients connecting over MySQL protocol. (By default, it reports its + own version.)

Example:

+mysql_version_string = 5.0.37
+
+

11.4.37. rt_flush_period

+

RT indexes RAM chunk flush check period, in seconds. Optional, + default is 0 (do not flush). Introduced in version 2.0.1-beta.

Actively updated RT indexes that however fully fit in RAM chunks + can result in ever-growing binlogs, impacting disk use and crash + recovery time. With this directive the search daemon performs periodic + flush checks, and eligible RAM chunks can get saved, enabling + consequential binlog cleanup. See Section 4.4, “Binary logging” for + more details.

Example:

+rt_flush_period = 3600
+
+

11.4.38. thread_stack

+

Per-thread stack size. Optional, default is 64K. Introduced in + version 2.0.1-beta.

In the workers = threads mode, every request is + processed with a separate thread that needs its own stack space. By + default, 64K per thread are allocated for stack. However, extremely + complex search requests might eventually exhaust the default stack and + require more. For instance, a query that matches a few thousand + keywords (either directly or through term expansion) can eventually + run out of stack. Previously, that resulted in crashes. Starting with + 2.0.1-beta, searchd attempts to estimate the + expected stack use, and blocks the potentially dangerous queries. To + process such queries, you can either the thread stack size by using + the thread_stack directive (or switch to a different + workers setting if that is possible).

A query with N levels of nesting is estimated to require + approximately 30+0.12*N KB of stack, meaning that the default 64K is + enough for queries with upto 300 levels, 150K for upto 1000 levels, + etc. If the stack size limit is not met, searchd + fails the query and reports the required stack size in the error + message.

Example:

+thread_stack = 256K
+
+

11.4.39. expansion_limit

+

The maximum number of expanded keywords for a single wildcard. + Optional, default is 0 (no limit). Introduced in version + 2.0.1-beta.

When doing substring searches against indexes built with + dict = keywords enabled, a single wildcard may + potentially result in thousands and even millions of matched keywords + (think of matching 'a*' against the entire Oxford dictionary). This + directive lets you limit the impact of such expansions. Setting + expansion_limit = N restricts expansions to no more than + N of the most frequent matching keywords (per each wildcard in the + query).

Example:

+expansion_limit = 16
+
+

11.4.40. compat_sphinxql_magics

+

Legacy SphinxQL quirks compatiblity mode. Optional, default is 1 + (keep compatibility). Introduced in version 2.0.1-beta.

Starting with version 2.0.1-beta, we're bringing SphinxQL in + closer compliance with standard SQL. However, existing applications + must not get broken, and compat_sphinxql_magics lets you + upgrade safely. It defauls to 1, which enables the compatibility mode. + However, SphinxQL compatibility mode is now deprecated and will be + removed once we complete bringing SphinxQL in line with standard + SQL syntax. So it's advised to update the applications utilising + SphinxQL and then switch the daemon to the new, more SQL compliant + mode by setting compat_sphinxql_magics = 0. Please refer + to Section 7.21, “SphinxQL upgrade notes, version 2.0.1-beta” for the details and + update instruction.

Example:

+compat_sphinxql_magics = 0 # the future is now
+
+

11.4.41. watchdog

+

Threaded server watchdog. Optional, default is 1 (watchdog + enabled). Introduced in version 2.0.1-beta.

A crashed query in threads multi-processing mode + (workers = threads) + can take down the entire server. With watchdog feature enabled, + searchd additionally keeps a separate lightweight + process that monitors the main server process, and automatically + restarts the latter in case of abnormal termination. Watchdog is + enabled by default.

Example:

+watchdog = 0 # disable watchdog
+
+

Appendix A. Sphinx revision history

+ +

A.1. Version 2.0.1-beta, 22 apr 2011

+

New general features

+

New SphinxQL features

+

New command-line switches

  • added --print-queries switch to + indexer that dumps SQL queries it runs

  • +
  • added --sighup-each switch to + indexer that rotates indexes one by one

  • +
  • added --strip-path switch to + searchd that skips file paths embedded in the + index(-es)

  • +
  • added --dumpconfig switch to + indextool that dumps an index header in + sphinx.conf format

  • +
+

Major changes and optimizations

  • changed default preopen_indexes value to 1

  • +
  • optimized English stemmer (results in 1.3x faster snippets and + indexing with morphology=stem_en)

  • +
  • optimized snippets, 1.6x general speedup

  • +
  • optimized const-list parsing in SphinxQL

  • +
  • optimized full-document highlighting CPU/RAM use

  • +
  • optimized binlog replay (improved performance on K-list + update)

  • +
+

Bug fixes

  • fixed #767, joined fields vs ODBC sources

  • +
  • fixed #757, wordforms shared by indexes with different + settings

  • +
  • fixed #733, loading of indexes in formats prior to v.14

  • +
  • fixed #763, occasional snippets failures

  • +
  • fixed #648, occasionally missed rotations on multiple + SIGHUPs

  • +
  • fixed #750, an RT segment merge leading to false positives + and/or crashes in some cases

  • +
  • fixed #755, zones in snippets output

  • +
  • fixed #754, stopwords counting at snippet passage + generation

  • +
  • fixed #723, fork/prefork index rotation in children + processes

  • +
  • fixed #696, freeze on zero threshold in quorum operator

  • +
  • fixed #732, query escaping in SphinxSE

  • +
  • fixed #739, occasional crashes in MT mode on result set + send

  • +
  • fixed #746, crash with a named list in SphinxQL option

  • +
  • fixed #674, AVG vs group order

  • +
  • fixed #734, occasional crashes attempting to report NULL + errors

  • +
  • fixed #829, tail hits within field position modifier

  • +
  • fixed #712, missing query_mode, force_all_words snippet option + defaults in Java API

  • +
  • fixed #721, added dupe removal on RT batch + INSERT/REPLACE

  • +
  • fixed #720, potential extraneous highlighting after a blended + keyword

  • +
  • fixed #702, exceptions vs star search

  • +
  • fixed #666, ext2 query grouping vs exceptions

  • +
  • fixed #688, WITHIN GROUP ORDER BY related crash

  • +
  • fixed #660, multi-queue batches vs dist_threads

  • +
  • fixed #678, crash on dict=keywords vs xmlpipe vs + min_prefix_len

  • +
  • fixed #596, ECHILD vs scripted configs

  • +
  • fixed #653, dependency in expression, sorting, grouping

  • +
  • fixed #661, concurrent distributed searches vs + workers=threads

  • +
  • fixed #646, crash on status query via UNIX socket

  • +
  • fixed #589, libexpat.dll missing from some Win32 build + types

  • +
  • fixed #574, quorum match order

  • +
  • fixed multiple documentation issues (#372, #483, #495, #601, + #623, #632, #654)

  • +
  • fixed that ondisk_dict did not affect RT indexes

  • +
  • fixed that string attributes check in indextool --check was + erroneously sensitive to string data order

  • +
  • fixed a rare crash when using BEFORE operator

  • +
  • fixed an issue with multiforms vs BuildKeywords()

  • +
  • fixed an edge case in OR operator (emitted wrong hits order + sometimes)

  • +
  • fixed aliasing in docinfo accessors that lead to very rare + crashes and/or missing results

  • +
  • fixed a syntax error on a short token at the end of a + query

  • +
  • fixed id64 filtering and performance degradation with range + filters

  • +
  • fixed missing rankers in libsphinxclient

  • +
  • fixed missing SPH04 ranker in SphinxSE

  • +
  • fixed column names in sql_attr_multi sample (works with + example.sql now)

  • +
  • fixed an issue with distributed local+remote setup vs + aggregate functions

  • +
  • fixed case sensitive columns names in RT indexes

  • +
  • fixed a crash vs strings from multiple indexes in result + set

  • +
  • fixed blended keywords vs snippets

  • +
  • fixed secure_connection vs MySQL protocol vs MySQL.NET + connector

  • +
  • fixed that Python API did not works with Python 2.3

  • +
  • fixed overshort_step vs snippets

  • +
  • fixed keyword staistics vs dist_threads searching

  • +
  • fixed multiforms vs query parsing (vs quorum)

  • +
  • fixed missed quorum words vs RT segments

  • +
  • fixed blended keywords occasionally skipping extra character + when querying (eg "abc[]")

  • +
  • fixed Python API to handle int32 values

  • +
  • fixed prefix and infix indexing of joined fields

  • +
  • fixed MVA ranged query

  • +
  • fixed missing blended state reset on document boundary

  • +
  • fixed a crash on missing index while replaying binlog

  • +
  • fixed an error message on filter values overrun

  • +
  • fixed passage duplication in snippets in weight_order + mode

  • +
  • fixed select clauses over 1K vs remote agents

  • +
  • fixed overshort accounting vs soft-whitespace tokens

  • +
  • fixed rotation vs workers=threads

  • +
  • fixed schema issues vs distributed indexes

  • +
  • fixed blended-escaped sequence parsing issue

  • +
  • fixed MySQL IN clause (values order etc)

  • +
  • fixed that post_index did not execute when 0 documents were + succesfully indexed

  • +
  • fixed field position limit vs many hits

  • +
  • fixed that joined fields missed an end marker at field + end

  • +
  • fixed that xxx_step settings were missing from .sph index + header

  • +
  • fixed libsphinxclient missing request cleanup in + sphinx_query() (eg after network errors)

  • +
  • fixed that index_weights were ignored when grouping

  • +
  • fixed multi wordforms vs blend_chars

  • +
  • fixed broken MVA output in SphinxQL

  • +
  • fixed a few RT leaks

  • +
  • fixed an issue with RT string storage going missing

  • +
  • fixed an issue with repeated queries vs dist_threads

  • +
  • fixed an issue with string attributes vs buffer overrun in + SphinxQL

  • +
  • fixed unexpected character data warnings within ignored + xmlpipe tags

  • +
  • fixed a crash in snippets with NEAR syntax query

  • +
  • fixed passage duplication in snippets

  • +
  • fixed libsphinxclient SIGPIPE handling

  • +
  • fixed libsphinxclient vs VS2003 compiler bug

  • +
+

A.2. Version 1.10-beta, 19 jul 2010

+
  • added RT indexes support (Chapter 4, Real-time indexes)

  • +
  • added prefork and threads support (workers directives)

  • +
  • added multi-threaded local searches in distributed indexes + (dist_threads + directive)

  • +
  • added common subquery cache (subtree_docs_cache, subtree_hits_cache + directives)

  • +
  • added string attributes support (sql_attr_string, sql_field_string, xml_attr_string, xml_field_string + directives)

  • +
  • added indexing-time word counter (sql_attr_str2wordcount, + sql_field_str2wordcount + directives)

  • +
  • added CALL + SNIPPETS(), CALL + KEYWORDS() SphinxQL statements

  • +
  • added field_weights, + index_weights options to SphinxQL SELECT statement

  • +
  • added insert-only SphinxQL-talking tables to SphinxSE + (connection='sphinxql://host[:port]/index')

  • +
  • added select option to SphinxSE + queries

  • +
  • added backtrace on crash to + searchd

  • +
  • added SQL+FS indexing, aka loading files by names fetched from + SQL (sql_file_field + directive)

  • +
  • added a watchdog in threads mode to + searchd

  • +
  • added automatic row phantoms elimination to index merge

  • +
  • added hitless indexing support (hitless_words + directive)

  • +
  • added --check, --strip-path, --htmlstrip, --dumphitlist ... + --wordid switches to indextool

  • +
  • added --stopwait, --logdebug switches to searchd

  • +
  • added --dump-rows, --verbose switches to indexer

  • +
  • added "blended" characters indexing support (blend_chars directive)

  • +
  • added joined/payload field indexing (sql_joined_field + directive)

  • +
  • added FlushAttributes() API + call

  • +
  • added query_mode, force_all_words, limit_passages, + limit_words, start_passage_id, load_files, html_strip_mode, + allow_empty options, and %PASSAGE_ID% macro in before_match, + after_match options to BuildExcerpts() API + call

  • +
  • added @groupby/@count/@distinct columns support to SELECT (but + not to expressions)

  • +
  • added query-time keyword expansion support (expand_keywords directive, + SPH_RANK_SPH04 + ranker)

  • +
  • added query batch size limit option (max_batch_queries directive; + was hardcoded)

  • +
  • added SINT() function to expressions

  • +
  • improved SphinxQL syntax error reporting

  • +
  • improved expression optimizer (better constant + handling)

  • +
  • improved dash handling within keywords (no longer treated as + an operator)

  • +
  • improved snippets (better passage selection/trimming, around + option now a hard limit)

  • +
  • optimized index format that yields ~20-30% smaller + indexes

  • +
  • optimized sorting code (indexing time 1-5% faster on average; + 100x faster in worst case)

  • +
  • optimized searchd startup time (moved .spa preindexing to + indexer), added a progress bar

  • +
  • optimized queries against indexes with many attributes + (eliminated redundant copying)

  • +
  • optimized 1-keyword queries (performace regression introduced + in 0.9.9)

  • +
  • optimized SphinxQL protocol overheads, and performance on + bigger result sets

  • +
  • optimized unbuffered attributes writes on index merge

  • +
  • changed attribute handling, duplicate names are strictly + forbidden now

  • +
  • fixed that SphinxQL sessions could stall shutdown

  • +
  • fixed consts with leading minus in SphinxQL

  • +
  • fixed AND/OR precedence in expressions

  • +
  • fixed #334, AVG() on integers was not computed in + floats

  • +
  • fixed #371, attribute flush vs 2+ GB files

  • +
  • fixed #373, segfault on distributed queries vs certain libc + versions

  • +
  • fixed #398, stopwords not stopped in prefix/infix + indexes

  • +
  • fixed #404, erroneous MVA failures in indextool --check

  • +
  • fixed #408, segfault on certain query batches (regular scan, + plus a scan with MVA groupby)

  • +
  • fixed #431, occasional shutdown hangs in preforked + workers

  • +
  • fixed #436, trunk checkout builds vs Solaris sh

  • +
  • fixed #440, escaping vs parentheses declared as valid in + charset_table

  • +
  • fixed #442, occasional non-aligned free in MVA indexing

  • +
  • fixed #447, occasional crashes in MVA indexing

  • +
  • fixed #449, pconn busyloop on aborted clients on certain + arches

  • +
  • fixed #465, build issue on Alpha

  • +
  • fixed #468, build issue in libsphinxclient

  • +
  • fixed #472, multiple stopword files failing to load

  • +
  • fixed #489, buffer overflow in query logging

  • +
  • fixed #493, Python API assertion after error returned from + Query()

  • +
  • fixed #500, malformed MySQL packet when sending MVAs

  • +
  • fixed #504, SIGPIPE in libsphinxclient

  • +
  • fixed #506, better MySQL protocol commands support in SphinxQL + (PING etc)

  • +
  • fixed #509, indexing ranged results from stored + procedures

  • +
+

A.3. Version 0.9.9-release, 02 dec 2009

+
  • added Open, Close, Status calls to libsphinxclient (C + API)

  • +
  • added automatic persistent connection reopening to PHP, Python + APIs

  • +
  • added 64-bit value/range filters, fullscan mode support to + SphinxSE

  • +
  • MAJOR CHANGE, our IANA assigned ports are 9312 and 9306 + respectively (goodbye, trusty 3312)

  • +
  • MAJOR CHANGE, erroneous filters now fail with an error (were + silently ignored before)

  • +
  • optimized unbuffered .spa writes on merge

  • +
  • optimized 1-keyword queries ranking in extended2 mode

  • +
  • fixed #441 (IO race in case of highly conccurent load on a + preopened)

  • +
  • fixed #434 (distrubuted indexes were not searchable via MySQL + protocol)

  • +
  • fixed #317 (indexer MVA progress counter)

  • +
  • fixed #398 (stopwords not removed from search query)

  • +
  • fixed #328 (broken cutoff)

  • +
  • fixed #250 (now quoting paths w/spaces when installing Windows + service)

  • +
  • fixed #348 (K-list was not updated on merge)

  • +
  • fixed #357 (destination index were not K-list-filtered on + merge)

  • +
  • fixed #369 (precaching .spi files over 2 GBs)

  • +
  • fixed #438 (missing boundary proximity matches)

  • +
  • fixed #371 (.spa flush in case of files over 2 GBs)

  • +
  • fixed #373 (crashes on distributed queries via mysql + proto)

  • +
  • fixed critical bugs in hit merging code

  • +
  • fixed #424 (ordinals could be misplaced during indexing in + case of bitfields etc)

  • +
  • fixed #426 (failing SE build on Solaris; thanks to Ben + Beecher)

  • +
  • fixed #423 (typo in SE caused crash on SHOW STATUS)

  • +
  • fixed #363 (handling of read_timeout over 2147 seconds)

  • +
  • fixed #376 (minor error message mismatch)

  • +
  • fixed #413 (minus in SphinxQL)

  • +
  • fixed #417 (floats w/o leading digit in SphinxQL)

  • +
  • fixed #403 (typo in SetFieldWeights name in Java API)

  • +
  • fixed index rotation vs persistent connections

  • +
  • fixed backslash handling in SphinxQL parser

  • +
  • fixed uint unpacking vs. PHP 5.2.9 (possibly other + versions)

  • +
  • fixed #325 (filter settings send from SphinxSE)

  • +
  • fixed #352 (removed mysql wrapper around close() in + SphinxSE)

  • +
  • fixed #389 (display error messages through SphinxSE status + variable)

  • +
  • fixed linking with port-installed iconv on OS X

  • +
  • fixed negative 64-bit unpacking in PHP API

  • +
  • fixed #349 (escaping backslash in query emulation mode)

  • +
  • fixed #320 (disabled multi-query route when select items + differ)

  • +
  • fixed #353 (better quorum counts check)

  • +
  • fixed #341 (merging of trailing hits; maybe other ranking + issues too)

  • +
  • fixed #368 (partially; @field "" caused crashes; now resets + field limit)

  • +
  • fixed #365 (field mask was leaking on field-limited + terms)

  • +
  • fixed #339 (updated debug query dumper)

  • +
  • fixed #361 (added SetConnectTimeout() to Java API)

  • +
  • fixed #338 (added missing fullscan to mode check in Java + API)

  • +
  • fixed #323 (added floats support to SphinxQL)

  • +
  • fixed #340 (support listen=port:proto syntax too)

  • +
  • fixed #332 (\r is legal SphinxQL space now)

  • +
  • fixed xmlpipe2 K-lists

  • +
  • fixed #322 (safety gaps in mysql protocol row buffer)

  • +
  • fixed #313 (return keyword stats for empty indexes too)

  • +
  • fixed #344 (invalid checkpoints after merge)

  • +
  • fixed #326 (missing CLOCK_xxx on FreeBSD)

  • +
+

A.4. Version 0.9.9-rc2, 08 apr 2009

+
  • added IsConnectError(), Open(), Close() calls to Java API (bug + #240)

  • +
  • added read_buffer, + read_unhinted + directives

  • +
  • added checks for build options returned by mysql_config + (builds on Solaris now)

  • +
  • added fixed-RAM index merge (bug #169)

  • +
  • added logging chained queries count in case of (optimized) + multi-queries

  • +
  • added GEODIST() + function

  • +
  • added --status switch to + searchd

  • +
  • added MySpell (OpenOffice) affix file support (bug + #281)

  • +
  • added ODBC support (both + Windows and UnixODBC)

  • +
  • added support for @id in IN() (bug #292)

  • +
  • added support for aggregate + functions in GROUP BY (namely AVG, MAX, MIN, SUM)

  • +
  • added MySQL UDF that builds + snippets using searchd

  • +
  • added write_buffer + directive (defaults to 1M)

  • +
  • added xmlpipe_fixup_utf8 + directive

  • +
  • added suggestions sample

  • +
  • added microsecond precision int64 timer (bug #282)

  • +
  • added listen_backlog + directive

  • +
  • added max_xmlpipe2_field + directive

  • +
  • added initial SphinxQL support + to mysql41 handler, SELECT .../SHOW WARNINGS/STATUS/META are + handled

  • +
  • added support for different network protocols, and mysql41 + protocol

  • +
  • added fieldmask + ranker, updated SphinxSE list of rankers

  • +
  • added mysql_ssl_xxx + directives

  • +
  • added --cpustats (requires + clock_gettime()) and --status switches to searchd

  • +
  • added performance counters, Status() API call

  • +
  • added overshort_step and stopword_step directives

  • +
  • added strict order + operator (aka operator before, eg. "one << two << + three")

  • +
  • added indextool utility, + moved --dumpheader there, added --debugdocids, --dumphitlist + options

  • +
  • added own RNG, reseeded on @random sort query (bug + #183)

  • +
  • added field-start and + field-end modifiers support (syntax is "^hello world$"; + field-end requires reindex)

  • +
  • added MVA attribute support to IN() function

  • +
  • added AND, OR, and NOT + support to expressions

  • +
  • improved logging of (optimized) multi-queries (now logging + chained query count)

  • +
  • improved handshake error handling, fixed protocol version byte + order (omg)

  • +
  • updated SphinxSE to protocol 1.22

  • +
  • allowed phrase_boundary_step=-1 (trick to emulate keyword + expansion)

  • +
  • removed SPH_MAX_QUERY_WORDS limit

  • +
  • fixed CLI search vs documents missing from DB (bug + #257)

  • +
  • fixed libsphinxclient results leak on subsequent + sphinx_run_queries call (bug #256)

  • +
  • fixed libsphinxclient handling of zero max_matches and cutoff + (bug #208)

  • +
  • fixed Java API over-64K string reads (eg. big snippets) in + Java API (bug #181)

  • +
  • fixed Java API 2nd Query() after network error in 1st Query() + call (bug #308)

  • +
  • fixed typo-class bugs in SetFilterFloatRange (bug #259), + SetSortMode (bug #248)

  • +
  • fixed missing @@relaxed support (bug #276), fixed missing + error on @nosuchfield queries, documented @@relaxed

  • +
  • fixed UNIX socket permissions to 0777 (bug #288)

  • +
  • fixed xmlpipe2 crash on schemas with no fields, added better + document structure checks

  • +
  • fixed (and optimized) expr parser vs IN() with huge (10K+) + args count

  • +
  • fixed double EarlyCalc() in fullscan mode (minor performance + impact)

  • +
  • fixed phrase boundary handling in some cases (on buffer end, + on trailing whitespace)

  • +
  • fixes in snippets (aka excerpts) generation

  • +
  • fixed inline attrs vs id64 index corruption

  • +
  • fixed head searchd crash on config re-parse failure

  • +
  • fixed handling of numeric keywords with leading zeroes such as + "007" (bug #251)

  • +
  • fixed junk in SphinxSE status variables (bug #304)

  • +
  • fixed wordlist checkpoints serialization (bug #236)

  • +
  • fixed unaligned docinfo id access (bug #230)

  • +
  • fixed GetRawBytes() vs oversized blocks (headers with over 32K + charset_table should now work, bug #300)

  • +
  • fixed buffer overflow caused by too long dest wordform, + updated tests

  • +
  • fixed IF() return type (was always int, is deduced now)

  • +
  • fixed legacy queries vs. special chars vs. multiple + indexes

  • +
  • fixed write-write-read socket access pattern vs Nagle vs + delays vs FreeBSD (oh wow)

  • +
  • fixed exceptions vs query-parser issue

  • +
  • fixed late calc vs @weight in expressions (bug #285)

  • +
  • fixed early lookup/calc vs filters (bug #284)

  • +
  • fixed emulated MATCH_ANY queries (empty proximity and phrase + queries are allowed now)

  • +
  • fixed MATCH_ANY ranker vs fields with no matches

  • +
  • fixed index file size vs inplace_enable (bug #245)

  • +
  • fixed that old logs were not closed on USR1 (bug #221)

  • +
  • fixed handling of '!' alias to NOT operator (bug #237)

  • +
  • fixed error handling vs query steps (step failure was not + reported)

  • +
  • fixed querying vs inline attributes

  • +
  • fixed stupid bug in escaping code, fixed EscapeString() and + made it static

  • +
  • fixed parser vs @field -keyword, foo|@field bar, "" queries + (bug #310)

  • +
+

A.5. Version 0.9.9-rc1, 17 nov 2008

+
  • added min_stemming_len + directive

  • +
  • added IsConnectError() API call + (helps distingusih API vs remote errors)

  • +
  • added duplicate log messages filter to searchd

  • +
  • added --nodetach debugging switch to searchd

  • +
  • added blackhole agents support for debugging/testing (agent_blackhole + directive)

  • +
  • added max_filters, + max_filter_values + directives (were hardcoded before)

  • +
  • added int64 expression evaluation path, automatic inference, + and BIGINT() enforcer function

  • +
  • added crash handler for debugging (crash_log_path + directive)

  • +
  • added MS SQL (aka SQL Server) source support (Windows only, + mssql_winauth and mssql_unicode directives)

  • +
  • added indexer-side column unpacking feature (unpack_zlib, unpack_mysqlcompress + directives)

  • +
  • added nested brackers and NOTs support to query language, rewritten query + parser

  • +
  • added persistent connections support (Open() and Close() API calls)

  • +
  • added index_exact_words feature, + and exact form operator to query language ("hello =world")

  • +
  • added status variables support to SphinxSE (SHOW STATUS LIKE + 'sphinx_%')

  • +
  • added max_packet_size directive (was + hardcoded at 8M before)

  • +
  • added UNIX socket support, and multi-interface support (listen directive)

  • +
  • added star-syntax support to BuildExcerpts() API + call

  • +
  • added inplace inversion of .spa and .spp (inplace_enable directive, + 1.5-2x less disk space for indexing)

  • +
  • added builtin Czech stemmer (morphology=stem_cz)

  • +
  • added IDIV(), NOW(), INTERVAL(), + IN() functions to expressions

  • +
  • added index-level early-reject based on filters

  • +
  • added MVA updates feature (mva_updates_pool + directive)

  • +
  • added select-list feature with computed expressions support + (see SetSelect() API call, + test.php --select switch), protocol 1.22

  • +
  • added integer expressions support (2x faster than + float)

  • +
  • added multiforms support (multiple source words in wordforms + file)

  • +
  • added legacy + rankers (MATCH_ALL/MATCH_ANY/etc), removed legacy matching + code (everything runs on V2 engine now)

  • +
  • added field position + limit modifier to field operator (syntax: @title[50] hello + world)

  • +
  • added killlist support (sql_query_killlist + directive, --merge-killlists switch)

  • +
  • added on-disk SPI support (ondisk_dict directive)

  • +
  • added indexer IO stats

  • +
  • added periodic .spa flush (attr_flush_period + directive)

  • +
  • added config reload on SIGHUP

  • +
  • added per-query attribute overrides feature (see SetOverride() API call); + protocol 1.21

  • +
  • added signed 64bit attrs support (sql_attr_bigint + directive)

  • +
  • improved HTML stripper to also skip PIs (<? ... ?>, such + as <?php ... ?>)

  • +
  • improved excerpts speed (upto 50x faster on big + documents)

  • +
  • fixed a short window of searchd inaccessibility on startup + (started listen()ing too early before)

  • +
  • fixed .spa loading on systems where read() is 2GB + capped

  • +
  • fixed infixes vs morphology issues

  • +
  • fixed backslash escaping, added backslash to + EscapeString()

  • +
  • fixed handling of over-2GB dictionary files (.spi)

  • +
+

A.6. Version 0.9.8.1, 30 oct 2008

+
  • added configure script to libsphinxclient

  • +
  • changed proximity/quorum operator syntax to require whitespace + after length

  • +
  • fixed potential head process crash on SIGPIPE during "maxed + out" message

  • +
  • fixed handling of incomplete remote replies (caused + over-degraded distributed results, in rare cases)

  • +
  • fixed sending of big remote requests (caused distributed + requests to fail, in rare cases)

  • +
  • fixed FD_SET() overflow (caused searchd to crash on startup, + in rare cases)

  • +
  • fixed MVA vs distributed indexes (caused loss of 1st MVA value + in result set)

  • +
  • fixed tokenizing of exceptions terminated by specials (eg. + "GPS AT&T" in extended mode)

  • +
  • fixed buffer overrun in stemmer on overlong tokens + occasionally emitted by proximity/quorum operator parser (caused + crashes on certain proximity/quorum queries)

  • +
  • fixed wordcount ranker (could be dropping hits)

  • +
  • fixed --merge feature (numerous different fixes, caused broken + indexes)

  • +
  • fixed --merge-dst-range performance

  • +
  • fixed prefix/infix generation for stopwords

  • +
  • fixed ignore_chars vs specials

  • +
  • fixed misplaced F_SETLKW check (caused certain build types, + eg. RPM build on FC8, to fail)

  • +
  • fixed dictionary-defined charsets support in spelldump, added + \x-style wordchars support

  • +
  • fixed Java API to properly send long strings (over 64K; eg. + long document bodies for excerpts)

  • +
  • fixed Python API to accept offset/limit of 'long' type

  • +
  • fixed default ID range (that filtered out all 64-bit values) + in Java and Python APIs

  • +
+

A.7. Version 0.9.8, 14 jul 2008

+

Indexing

  • added support for 64-bit document and keyword IDs, + --enable-id64 switch to configure

  • +
  • added support for floating point attributes

  • +
  • added support for bitfields in attributes, sql_attr_bool directive and + bit-widths part in sql_attr_uint directive

  • +
  • added support for multi-valued attributes (MVA)

  • +
  • added metaphone preprocessor

  • +
  • added libstemmer library support, provides stemmers for a + number of additional languages

  • +
  • added xmlpipe2 source type, that supports arbitrary fields and + attributes

  • +
  • added word form dictionaries, wordforms directive (and spelldump + utility)

  • +
  • added tokenizing exceptions, exceptions directive

  • +
  • added an option to fully remove element contents to HTML + stripper, html_remove_elements + directive

  • +
  • added HTML entities decoder (with full XHTML1 set support) to + HTML stripper

  • +
  • added per-index HTML stripping settings, html_strip, html_index_attrs, and html_remove_elements + directives

  • +
  • added IO load throttling, max_iops and max_iosize directives

  • +
  • added SQL load throttling, sql_ranged_throttle + directive

  • +
  • added an option to index prefixes/infixes for given fields + only, prefix_fields and + infix_fields + directives

  • +
  • added an option to ignore certain characters (instead of just + treating them as whitespace), ignore_chars directive

  • +
  • added an option to increment word position on phrase boundary + characters, phrase_boundary and phrase_boundary_step + directives

  • +
  • added --merge-dst-range switch (and filters) to index merging + feature (--merge switch)

  • +
  • added mysql_connect_flags + directive (eg. to reduce indexing time MySQL network traffic and/or + time)

  • +
  • improved ordinals sorting; now runs in fixed RAM

  • +
  • improved handling of documents with zero/NULL ids, now + skipping them instead of aborting

  • +
+

Search daemon

  • added an option to unlink old index on succesful rotation, + unlink_old directive

  • +
  • added an option to keep index files open at all times (fixes + subtle races on rotation), preopen and preopen_indexes + directives

  • +
  • added an option to profile searchd disk I/O, --iostats + command-line option

  • +
  • added an option to rotate index seamlessly (fully avoids query + stalls), seamless_rotate + directive

  • +
  • added HTML stripping support to excerpts (uses per-index + settings)

  • +
  • added 'exact_phrase', 'single_passage', 'use_boundaries', + 'weight_order 'options to BuildExcerpts() API + call

  • +
  • added distributed attribute updates propagation

  • +
  • added distributed retries on master node side

  • +
  • added log reopen on SIGUSR1

  • +
  • added --stop switch (sends SIGTERM to running instance)

  • +
  • added Windows service mode, and --servicename switch

  • +
  • added Windows --rotate support

  • +
  • improved log timestamping, now with millisecond + precision

  • +
+

Querying

  • added extended engine V2 (faster, cleaner, better; + SPH_MATCH_EXTENDED2 mode)

  • +
  • added ranking modes support (V2 engine only; SetRankingMode() API + call)

  • +
  • added quorum searching support to query language (V2 engine + only; example: "any three of all these words"/3)

  • +
  • added query escaping support to query language, and EscapeString() API + call

  • +
  • added multi-field syntax support to query language (example: + "@(field1,field2) something"), and @@relaxed field checks + option

  • +
  • added optional star-syntax ('word*') support in keywords, + enable_star directive (for + prefix/infix indexes only)

  • +
  • added full-scan support (query must be fully empty; can + perform block-reject optimization)

  • +
  • added COUNT(DISTINCT(attr)) calculation support, SetGroupDistinct() API + call

  • +
  • added group-by on MVA support, SetArrayResult() PHP API + call

  • +
  • added per-index weights feature, SetIndexWeights() API + call

  • +
  • added geodistance support, SetGeoAnchor() API + call

  • +
  • added result set sorting by arbitrary expressions in run time + (eg. "@weight+log(price)*2.5"), SPH_SORT_EXPR mode

  • +
  • added result set sorting by @custom compile-time sorting + function (see src/sphinxcustomsort.inl)

  • +
  • added result set sorting by @random value

  • +
  • added result set merging for indexes with different + schemas

  • +
  • added query comments support (3rd arg to Query()/AddQuery() API calls, copied + verbatim to query log)

  • +
  • added keyword extraction support, BuildKeywords() API + call

  • +
  • added binding field weights by name, SetFieldWeights() API + call

  • +
  • added optional limit on query time, SetMaxQueryTime() API + call

  • +
  • added optional limit on found matches count (4rd arg to SetLimits() API call, so-called + 'cutoff')

  • +
+

APIs and SphinxSE

  • added pure C API (libsphinxclient)

  • +
  • added Ruby API (thanks to Dmytro Shteflyuk)

  • +
  • added Java API

  • +
  • added SphinxSE support for MVAs (use varchar), floats (use + float), 64bit docids (use bigint)

  • +
  • added SphinxSE options "floatrange", "geoanchor", + "fieldweights", "indexweights", "maxquerytime", "comment", "host" + and "port"; and support for "expr:CLAUSE"

  • +
  • improved SphinxSE max query size (using MySQL condition + pushdown), upto 256K now

  • +
+

General

  • added scripting (shebang syntax) support to config files + (example: #!/usr/bin/php in the first line)

  • +
  • added unified config handling and validation to all + programs

  • +
  • added unified documentation

  • +
  • added .spec file for RPM builds

  • +
  • added automated testing suite

  • +
  • improved index locking, now fcntl()-based instead of buggy + file-existence-based

  • +
  • fixed unaligned RAM accesses, now works on SPARC and + ARM

  • +
+

Changes and fixes since + 0.9.8-rc2

  • added pure C API (libsphinxclient)

  • +
  • added Ruby API

  • +
  • added SetConnectTimeout() PHP API call

  • +
  • added allowed type check to UpdateAttributes() handler (bug + #174)

  • +
  • added defensive MVA checks on index preload (protection + against broken indexes, bug #168)

  • +
  • added sphinx-min.conf sample file

  • +
  • added --without-iconv switch to configure

  • +
  • removed redundant -lz dependency in searchd

  • +
  • removed erroneous "xmlpipe2 deprecated" warning

  • +
  • fixed EINTR handling in piped read (bug #166)

  • +
  • fixup query time before logging and sending to client (bug + #153)

  • +
  • fixed attribute updates vs full-scan early-reject index (bug + #149)

  • +
  • fixed gcc warnings (bug #160)

  • +
  • fixed mysql connection attempt vs pgsql source type (bug + #165)

  • +
  • fixed 32-bit wraparound when preloading over 2 GB files

  • +
  • fixed "out of memory" message vs over 2 GB allocs (bug + #116)

  • +
  • fixed unaligned RAM access detection on ARM (where unaligned + reads do not crash but produce wrong results)

  • +
  • fixed missing full scan results in some cases

  • +
  • fixed several bugs in --merge, --merge-dst-range

  • +
  • fixed @geodist vs MultiQuery and filters, @expr vs + MultiQuery

  • +
  • fixed GetTokenEnd() vs 1-grams (was causing crash in + excerpts)

  • +
  • fixed sql_query_range to handle empty strings in addition to + NULL strings (Postgres specific)

  • +
  • fixed morphology=none vs infixes

  • +
  • fixed case sensitive attributes names in + UpdateAttributes()

  • +
  • fixed ext2 ranking vs. stopwords (now using atompos from query + parser)

  • +
  • fixed EscapeString() call

  • +
  • fixed escaped specials (now handled as whitespace if not in + charset)

  • +
  • fixed schema minimizer (now handles type/size + mismatches)

  • +
  • fixed word stats in extended2; stemmed form is now + returned

  • +
  • fixed spelldump case folding vs dictionary-defined character + sets

  • +
  • fixed Postgres BOOLEAN handling

  • +
  • fixed enforced "inline" docinfo on empty indexes (normally ok, + but index merge was really confused)

  • +
  • fixed rare count(distinct) out-of-bounds issue (it occasionaly + caused too high @distinct values)

  • +
  • fixed hangups on documents with id=DOCID_MAX in some + cases

  • +
  • fixed rare crash in tokenizer (prefixed synonym vs. input + stream eof)

  • +
  • fixed query parser vs "aaa (bbb ccc)|ddd" queries

  • +
  • fixed BuildExcerpts() request in Java API

  • +
  • fixed Postgres specific memory leak

  • +
  • fixed handling of overshort keywords (less than + min_word_len)

  • +
  • fixed HTML stripper (now emits space after indexed + attributes)

  • +
  • fixed 32-field case in query parser

  • +
  • fixed rare count(distinct) vs. querying multiple local indexes + vs. reusable sorter issue

  • +
  • fixed sorting of negative floats in SPH_SORT_EXTENDED + mode

  • +
+

A.8. Version 0.9.7, 02 apr 2007

+
  • added support for + sql_str2ordinal_column

  • +
  • added support for upto 5 sort-by attrs (in extended sorting + mode)

  • +
  • added support for separate groups sorting clause (in group-by + mode)

  • +
  • added support for on-the-fly attribute updates (PRE-ALPHA; + will change heavily; use for preliminary testing ONLY)

  • +
  • added support for zero/NULL attributes

  • +
  • added support for 0.9.7 features to SphinxSE

  • +
  • added support for n-grams (alpha, 1-grams only for now)

  • +
  • added support for warnings reported to client

  • +
  • added support for exclude-filters

  • +
  • added support for prefix and infix indexing (see + max_prefix_len, + max_infix_len)

  • +
  • added @* syntax to reset current field to + query language

  • +
  • added removal of duplicate entries in query index order

  • +
  • added PHP API workarounds for PHP signed/unsigned + braindamage

  • +
  • added locks to avoid two concurrent indexers working on same + index

  • +
  • added check for existing attributes vs. + docinfo=none case

  • +
  • improved groupby code a lot (better precision, and upto 25x + times faster in extreme cases)

  • +
  • improved error handling and reporting

  • +
  • improved handling of broken indexes (reports error instead of + hanging/crashing)

  • +
  • improved mmap() limits for attributes and + wordlists (now able to map over 4 GB on x64 and over 2 GB on x32 + where possible)

  • +
  • improved malloc() pressure in head daemon + (search time should not degrade with time any more)

  • +
  • improved test.php command line + options

  • +
  • improved error reporting (distributed query, broken index etc + issues now reported to client)

  • +
  • changed default network packet size to be 8M, added extra + checks

  • +
  • fixed division by zero in BM25 on 1-document collections (in + extended matching mode)

  • +
  • fixed .spl files getting unlinked

  • +
  • fixed crash in schema compatibility test

  • +
  • fixed UTF-8 Russian stemmer

  • +
  • fixed requested matches count when querying distributed + agents

  • +
  • fixed signed vs. unsigned issues everywhere (ranged queries, + CLI search output, and obtaining docid)

  • +
  • fixed potential crashes vs. negative query offsets

  • +
  • fixed 0-match docs vs. extended mode vs. stats

  • +
  • fixed group/timestamp filters being ignored if querying from + older clients

  • +
  • fixed docs to mention pgsql source + type

  • +
  • fixed issues with explicit '&' in extended matching + mode

  • +
  • fixed wrong assertion in SBCS encoder

  • +
  • fixed crashes with no-attribute indexes after rotate

  • +
+

A.9. Version 0.9.7-rc2, 15 dec 2006

+
  • added support for extended matching mode (query + language)

  • +
  • added support for extended sorting mode (sorting + clauses)

  • +
  • added support for SBCS excerpts

  • +
  • added mmap()ing for attributes and wordlist + (improves search time, speeds up fork() + greatly)

  • +
  • fixed attribute name handling to be case insensitive

  • +
  • fixed default compiler options to simplify post-mortem + debugging (added -g, removed + -fomit-frame-pointer)

  • +
  • fixed rare memory leak

  • +
  • fixed "hello hello" queries in "match phrase" mode

  • +
  • fixed issue with excerpts, texts and overlong queries

  • +
  • fixed logging multiple index name (no longer tokenized)

  • +
  • fixed trailing stopword not flushed from tokenizer

  • +
  • fixed boolean evaluation

  • +
  • fixed pidfile being wrongly unlink()ed on + bind() failure

  • +
  • fixed --with-mysql-includes/libs (they + conflicted with well-known paths)

  • +
  • fixes for 64-bit platforms

  • +
+

A.10. Version 0.9.7-rc1, 26 oct 2006

+
  • added alpha index merging code

  • +
  • added an option to decrease max_matches + per-query

  • +
  • added an option to specify IP address for searchd to listen + on

  • +
  • added support for unlimited amount of configured sources and + indexes

  • +
  • added support for group-by queries

  • +
  • added support for /2 range modifier in charset_table

  • +
  • added support for arbitrary amount of document + attributes

  • +
  • added logging filter count and index name

  • +
  • added --with-debug option to configure to + compile in debug mode

  • +
  • added -DNDEBUG when compiling in default + mode

  • +
  • improved search time (added doclist size hints, in-memory + wordlist cache, and used VLB coding everywhere)

  • +
  • improved (refactored) SQL driver code (adding new drivers + should be very easy now)

  • +
  • improved exceprts generation

  • +
  • fixed issue with empty sources and ranged queries

  • +
  • fixed querying purely remote distributed indexes

  • +
  • fixed suffix length check in English stemmer in some + cases

  • +
  • fixed UTF-8 decoder for codes over U+20000 (for CJK)

  • +
  • fixed UTF-8 encoder for 3-byte sequences (for CJK)

  • +
  • fixed overshort (less than min_word_len) + words prepended to next field

  • +
  • fixed source connection order (indexer does not connect to all + sources at once now)

  • +
  • fixed line numbering in config parser

  • +
  • fixed some issues with index rotation

  • +
+

A.11. Version 0.9.6, 24 jul 2006

+
  • added support for empty indexes

  • +
  • added support for multiple + sql_query_pre/post/post_index

  • +
  • fixed timestamp ranges filter in "match any" mode

  • +
  • fixed configure issues with --without-mysql and --with-pgsql + options

  • +
  • fixed building on Solaris 9

  • +
+

A.12. Version 0.9.6-rc1, 26 jun 2006

+
  • added boolean queries support (experimental, beta + version)

  • +
  • added simple file-based query cache (experimental, beta + version)

  • +
  • added storage engine for MySQL 5.0 and 5.1 (experimental, beta + version)

  • +
  • added GNU style configure script

  • +
  • added new searchd protocol (all binary, and should be + backwards compatible)

  • +
  • added distributed searching support to searchd

  • +
  • added PostgreSQL driver

  • +
  • added excerpts generation

  • +
  • added min_word_len option to index

  • +
  • added max_matches option to searchd, removed + hardcoded MAX_MATCHES limit

  • +
  • added initial documentation, and a working + example.sql

  • +
  • added support for multiple sources per index

  • +
  • added soundex support

  • +
  • added group ID ranges support

  • +
  • added --stdin command-line option to search + utility

  • +
  • added --noprogress option to indexer

  • +
  • added --index option to search

  • +
  • fixed UTF-8 decoder (3-byte codepoints did not work)

  • +
  • fixed PHP API to handle big result sets faster

  • +
  • fixed config parser to handle empty values properly

  • +
  • fixed redundant time(NULL) calls in time-segments + mode

  • +
+ diff --git a/coreseek/csft-4.1/doc/sphinx.txt b/coreseek/csft-4.1/doc/sphinx.txt new file mode 100755 index 0000000..7f33d9a --- /dev/null +++ b/coreseek/csft-4.1/doc/sphinx.txt @@ -0,0 +1,11140 @@ +Sphinx 2.0.1-beta reference manual +================================== + +Free open-source SQL full-text search engine +============================================ + +Copyright (c) 2001-2011 Andrew Aksyonoff + +Copyright (c) 2008-2011 Sphinx Technologies Inc, http://sphinxsearch.com + +---------------------------------------------------------------------------- + +Table of Contents + +1. Introduction + 1.1. About + 1.2. Sphinx features + 1.3. Where to get Sphinx + 1.4. License + 1.5. Credits + 1.6. History + +2. Installation + 2.1. Supported systems + 2.2. Required tools + 2.3. Installing Sphinx on Linux + 2.4. Installing Sphinx on Windows + 2.5. Known installation issues + 2.6. Quick Sphinx usage tour + +3. Indexing + 3.1. Data sources + 3.2. Attributes + 3.3. MVA (multi-valued attributes) + 3.4. Indexes + 3.5. Restrictions on the source data + 3.6. Charsets, case folding, and translation tables + 3.7. SQL data sources (MySQL, PostgreSQL) + 3.8. xmlpipe data source + 3.9. xmlpipe2 data source + 3.10. Live index updates + 3.11. Delta index updates + 3.12. Index merging + +4. Real-time indexes + 4.1. RT indexes overview + 4.2. Known caveats with RT indexes + 4.3. RT index internals + 4.4. Binary logging + +5. Searching + 5.1. Matching modes + 5.2. Boolean query syntax + 5.3. Extended query syntax + 5.4. Weighting + 5.5. Expressions, functions, and operators + 5.5.1. Operators + 5.5.2. Numeric functions + 5.5.3. Date and time functions + 5.5.4. Type conversion functions + 5.5.5. Comparison functions + 5.5.6. Miscellaneous functions + + 5.6. Sorting modes + 5.7. Grouping (clustering) search results + 5.8. Distributed searching + 5.9. searchd query log formats + 5.9.1. Plain log format + 5.9.2. SphinxQL log format + + 5.10. MySQL protocol support and SphinxQL + 5.11. Multi-queries + 5.12. Collations + 5.13. User-defined functions (UDF) + +6. Command line tools reference + 6.1. indexer command reference + 6.2. searchd command reference + 6.3. search command reference + 6.4. spelldump command reference + 6.5. indextool command reference + +7. SphinxQL reference + 7.1. SELECT syntax + 7.2. SHOW META syntax + 7.3. SHOW WARNINGS syntax + 7.4. SHOW STATUS syntax + 7.5. INSERT and REPLACE syntax + 7.6. DELETE syntax + 7.7. SET syntax + 7.8. BEGIN, COMMIT, and ROLLBACK syntax + 7.9. CALL SNIPPETS syntax + 7.10. CALL KEYWORDS syntax + 7.11. SHOW TABLES syntax + 7.12. DESCRIBE syntax + 7.13. CREATE FUNCTION syntax + 7.14. DROP FUNCTION syntax + 7.15. SHOW VARIABLES syntax + 7.16. SHOW COLLATION syntax + 7.17. UPDATE syntax + 7.18. Multi-statement queries + 7.19. Comment syntax + 7.20. List of SphinxQL reserved keywords + 7.21. SphinxQL upgrade notes, version 2.0.1-beta + +8. API reference + 8.1. General API functions + 8.1.1. GetLastError + 8.1.2. GetLastWarning + 8.1.3. SetServer + 8.1.4. SetRetries + 8.1.5. SetConnectTimeout + 8.1.6. SetArrayResult + 8.1.7. IsConnectError + + 8.2. General query settings + 8.2.1. SetLimits + 8.2.2. SetMaxQueryTime + 8.2.3. SetOverride + 8.2.4. SetSelect + + 8.3. Full-text search query settings + 8.3.1. SetMatchMode + 8.3.2. SetRankingMode + 8.3.3. SetSortMode + 8.3.4. SetWeights + 8.3.5. SetFieldWeights + 8.3.6. SetIndexWeights + + 8.4. Result set filtering settings + 8.4.1. SetIDRange + 8.4.2. SetFilter + 8.4.3. SetFilterRange + 8.4.4. SetFilterFloatRange + 8.4.5. SetGeoAnchor + + 8.5. GROUP BY settings + 8.5.1. SetGroupBy + 8.5.2. SetGroupDistinct + + 8.6. Querying + 8.6.1. Query + 8.6.2. AddQuery + 8.6.3. RunQueries + 8.6.4. ResetFilters + 8.6.5. ResetGroupBy + + 8.7. Additional functionality + 8.7.1. BuildExcerpts + 8.7.2. UpdateAttributes + 8.7.3. BuildKeywords + 8.7.4. EscapeString + 8.7.5. Status + 8.7.6. FlushAttributes + + 8.8. Persistent connections + 8.8.1. Open + 8.8.2. Close + +9. MySQL storage engine (SphinxSE) + 9.1. SphinxSE overview + 9.2. Installing SphinxSE + 9.2.1. Compiling MySQL 5.0.x with SphinxSE + 9.2.2. Compiling MySQL 5.1.x with SphinxSE + 9.2.3. Checking SphinxSE installation + + 9.3. Using SphinxSE + 9.4. Building snippets (excerpts) via MySQL + +10. Reporting bugs +11. sphinx.conf options reference + 11.1. Data source configuration options + 11.1.1. type + 11.1.2. sql_host + 11.1.3. sql_port + 11.1.4. sql_user + 11.1.5. sql_pass + 11.1.6. sql_db + 11.1.7. sql_sock + 11.1.8. mysql_connect_flags + 11.1.9. mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca + 11.1.10. odbc_dsn + 11.1.11. sql_query_pre + 11.1.12. sql_query + 11.1.13. sql_joined_field + 11.1.14. sql_query_range + 11.1.15. sql_range_step + 11.1.16. sql_query_killlist + 11.1.17. sql_attr_uint + 11.1.18. sql_attr_bool + 11.1.19. sql_attr_bigint + 11.1.20. sql_attr_timestamp + 11.1.21. sql_attr_str2ordinal + 11.1.22. sql_attr_float + 11.1.23. sql_attr_multi + 11.1.24. sql_attr_string + 11.1.25. sql_attr_str2wordcount + 11.1.26. sql_column_buffers + 11.1.27. sql_field_string + 11.1.28. sql_field_str2wordcount + 11.1.29. sql_file_field + 11.1.30. sql_query_post + 11.1.31. sql_query_post_index + 11.1.32. sql_ranged_throttle + 11.1.33. sql_query_info + 11.1.34. xmlpipe_command + 11.1.35. xmlpipe_field + 11.1.36. xmlpipe_field_string + 11.1.37. xmlpipe_field_wordcount + 11.1.38. xmlpipe_attr_uint + 11.1.39. xmlpipe_attr_bool + 11.1.40. xmlpipe_attr_timestamp + 11.1.41. xmlpipe_attr_str2ordinal + 11.1.42. xmlpipe_attr_float + 11.1.43. xmlpipe_attr_multi + 11.1.44. xmlpipe_attr_string + 11.1.45. xmlpipe_fixup_utf8 + 11.1.46. mssql_winauth + 11.1.47. mssql_unicode + 11.1.48. unpack_zlib + 11.1.49. unpack_mysqlcompress + 11.1.50. unpack_mysqlcompress_maxsize + + 11.2. Index configuration options + 11.2.1. type + 11.2.2. source + 11.2.3. path + 11.2.4. docinfo + 11.2.5. mlock + 11.2.6. morphology + 11.2.7. dict + 11.2.8. index_sp + 11.2.9. index_zones + 11.2.10. min_stemming_len + 11.2.11. stopwords + 11.2.12. wordforms + 11.2.13. exceptions + 11.2.14. min_word_len + 11.2.15. charset_type + 11.2.16. charset_table + 11.2.17. ignore_chars + 11.2.18. min_prefix_len + 11.2.19. min_infix_len + 11.2.20. prefix_fields + 11.2.21. infix_fields + 11.2.22. enable_star + 11.2.23. ngram_len + 11.2.24. ngram_chars + 11.2.25. phrase_boundary + 11.2.26. phrase_boundary_step + 11.2.27. html_strip + 11.2.28. html_index_attrs + 11.2.29. html_remove_elements + 11.2.30. local + 11.2.31. agent + 11.2.32. agent_blackhole + 11.2.33. agent_connect_timeout + 11.2.34. agent_query_timeout + 11.2.35. preopen + 11.2.36. ondisk_dict + 11.2.37. inplace_enable + 11.2.38. inplace_hit_gap + 11.2.39. inplace_docinfo_gap + 11.2.40. inplace_reloc_factor + 11.2.41. inplace_write_factor + 11.2.42. index_exact_words + 11.2.43. overshort_step + 11.2.44. stopword_step + 11.2.45. hitless_words + 11.2.46. expand_keywords + 11.2.47. blend_chars + 11.2.48. blend_mode + 11.2.49. rt_mem_limit + 11.2.50. rt_field + 11.2.51. rt_attr_uint + 11.2.52. rt_attr_bigint + 11.2.53. rt_attr_float + 11.2.54. rt_attr_timestamp + 11.2.55. rt_attr_string + + 11.3. indexer program configuration options + 11.3.1. mem_limit + 11.3.2. max_iops + 11.3.3. max_iosize + 11.3.4. max_xmlpipe2_field + 11.3.5. write_buffer + 11.3.6. max_file_field_buffer + + 11.4. searchd program configuration options + 11.4.1. listen + 11.4.2. address + 11.4.3. port + 11.4.4. log + 11.4.5. query_log + 11.4.6. query_log_format + 11.4.7. read_timeout + 11.4.8. client_timeout + 11.4.9. max_children + 11.4.10. pid_file + 11.4.11. max_matches + 11.4.12. seamless_rotate + 11.4.13. preopen_indexes + 11.4.14. unlink_old + 11.4.15. attr_flush_period + 11.4.16. ondisk_dict_default + 11.4.17. max_packet_size + 11.4.18. mva_updates_pool + 11.4.19. crash_log_path + 11.4.20. max_filters + 11.4.21. max_filter_values + 11.4.22. listen_backlog + 11.4.23. read_buffer + 11.4.24. read_unhinted + 11.4.25. max_batch_queries + 11.4.26. subtree_docs_cache + 11.4.27. subtree_hits_cache + 11.4.28. workers + 11.4.29. dist_threads + 11.4.30. binlog_path + 11.4.31. binlog_flush + 11.4.32. binlog_max_log_size + 11.4.33. collation_server + 11.4.34. collation_libc_locale + 11.4.35. plugin_dir + 11.4.36. mysql_version_string + 11.4.37. rt_flush_period + 11.4.38. thread_stack + 11.4.39. expansion_limit + 11.4.40. compat_sphinxql_magics + 11.4.41. watchdog + +A. Sphinx revision history + A.1. Version 2.0.1-beta, 22 apr 2011 + A.2. Version 1.10-beta, 19 jul 2010 + A.3. Version 0.9.9-release, 02 dec 2009 + A.4. Version 0.9.9-rc2, 08 apr 2009 + A.5. Version 0.9.9-rc1, 17 nov 2008 + A.6. Version 0.9.8.1, 30 oct 2008 + A.7. Version 0.9.8, 14 jul 2008 + A.8. Version 0.9.7, 02 apr 2007 + A.9. Version 0.9.7-rc2, 15 dec 2006 + A.10. Version 0.9.7-rc1, 26 oct 2006 + A.11. Version 0.9.6, 24 jul 2006 + A.12. Version 0.9.6-rc1, 26 jun 2006 + +List of Examples + +3.1. Ranged query usage example +3.2. XMLpipe document stream +3.3. xmlpipe2 document stream +3.4. Fully automated live updates +4.1. RT index declaration +5.1. Boolean query example +5.2. Extended matching mode: query example + +Chapter 1. Introduction +======================= + +Table of Contents + +1.1. About +1.2. Sphinx features +1.3. Where to get Sphinx +1.4. License +1.5. Credits +1.6. History + +1.1. About +========== + +Sphinx is a full-text search engine, publicly distributed under GPL version +2. Commercial licensing (eg. for embedded use) is available upon request. + +Technically, Sphinx is a standalone software package provides fast and +relevant full-text search functionality to client applications. It was +specially designed to integrate well with SQL databases storing the data, +and to be easily accessed scripting languages. However, Sphinx does not +depend on nor require any specific database to function. + +Applications can access Sphinx search daemon (searchd) using any of the +three different access methods: a) via native search API (SphinxAPI), b) +via Sphinx own implementation of MySQL network protocol (using a small SQL +subset called SphinxQL), or c) via MySQL server with a pluggable storage +engine (SphinxSE). + +Official native SphinxAPI implementations for PHP, Perl, Ruby, and Java are +included within the distribution package. API is very lightweight so +porting it to a new language is known to take a few hours or days. Third +party API ports and plugins exist for Perl, C#, Haskell, Ruby-on-Rails, and +possibly other languages and frameworks. + +Starting version 1.10-beta, Sphinx supports two different indexing +backends: "disk" index backend, and "realtime" (RT) index backend. Disk +indexes support online full-text index rebuilds, but online updates can +only be done on non-text (attribute) data. RT indexes additionally allow +for online full-text index updates. Previous versions only supported disk +indexes. + +Data can be loaded into disk indexes using a so-called data source. +Built-in sources can fetch data directly from MySQL, PostgreSQL, ODBC +compliant database (MS SQL, Oracle, etc), or a pipe in a custom XML format. +Adding new data sources drivers (eg. to natively support other DBMSes) is +designed to be as easy as possible. RT indexes, as of 1.10-beta, can only +be populated using SphinxQL. + +As for the name, Sphinx is an acronym which is officially decoded as SQL +Phrase Index. Yes, I know about CMU's Sphinx project. + +1.2. Sphinx features +==================== + +Key Sphinx features are: + + * high indexing and searching performance; + + * advanced indexing and querying tools (flexible and feature-rich text + tokenizer, querying language, several different ranking modes, etc); + + * advanced result set post-processing (SELECT with expressions, WHERE, + ORDER BY, GROUP BY etc over text search results); + + * proven scalability up to billions of documents, terabytes of data, and + thousands of queries per second; + + * easy integration with SQL and XML data sources, and SphinxAPI, + SphinxQL, or SphinxSE search interfaces; + + * easy scaling with distributed searches. + +To expand a bit, Sphinx: + + * has high indexing speed (upto 10-15 MB/sec per core on an internal + benchmark); + + * has high search speed (upto 150-250 queries/sec per core against + 1,000,000 documents, 1.2 GB of data on an internal benchmark); + + * has high scalability (biggest known cluster indexes over 3,000,000,000 + documents, and busiest one peaks over 50,000,000 queries/day); + + * provides good relevance ranking through combination of phrase + proximity ranking and statistical (BM25) ranking; + + * provides distributed searching capabilities; + + * provides document excerpts (snippets) generation; + + * provides searching from within application with SphinxAPI or SphinxQL + interfaces, and from within MySQL with pluggable SphinxSE storage + engine; + + * supports boolean, phrase, word proximity and other types of queries; + + * supports multiple full-text fields per document (upto 32 by default); + + * supports multiple additional attributes per document (ie. groups, + timestamps, etc); + + * supports stopwords; + + * supports morphological word forms dictionaries; + + * supports tokenizing exceptions; + + * supports both single-byte encodings and UTF-8; + + * supports stemming (stemmers for English, Russian and Czech are + built-in; and stemmers for French, Spanish, Portuguese, Italian, + Romanian, German, Dutch, Swedish, Norwegian, Danish, Finnish, + Hungarian, are available by building third party libstemmer library); + + * supports MySQL natively (all types of tables, including MyISAM, + InnoDB, NDB, Archive, etc are supported); + + * supports PostgreSQL natively; + + * supports ODBC compliant databases (MS SQL, Oracle, etc) natively; + + * ...has 50+ other features not listed here, refer to API and + configuration manual! + +1.3. Where to get Sphinx +======================== + +Sphinx is available through its official Web site at +http://sphinxsearch.com/. + +Currently, Sphinx distribution tarball includes the following software: + + * indexer: an utility which creates fulltext indexes; + + * search: a simple command-line (CLI) test utility which searches + through fulltext indexes; + + * searchd: a daemon which enables external software (eg. Web + applications) to search through fulltext indexes; + + * sphinxapi: a set of searchd client API libraries for popular Web + scripting languages (PHP, Python, Perl, Ruby). + + * spelldump: a simple command-line tool to extract the items from an + ispell or MySpell (as bundled with OpenOffice) format dictionary to + help customize your index, for use with wordforms. + + * indextool: an utility to dump miscellaneous debug information about + the index, added in version 0.9.9-rc2. + +1.4. License +============ + +This program is free software; you can 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. See COPYING file for details. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 + +Non-GPL licensing (for OEM/ISV embedded use) can also be arranged, please +contact us to discuss commercial licensing possibilities. + +1.5. Credits +============ + +Author +------ + +Sphinx initial author (and a benevolent dictator ever since): + + * Andrew Aksyonoff, http://shodan.ru + +Team +---- + +Past and present employees of Sphinx Technologies Inc who should be noted +on their work on Sphinx (in alphabetical order): + + * Alexander Klimenko + + * Alexey Dvoichenkov + + * Alexey Vinogradov + + * Ilya Kuznetsov + + * Stanislav Klinov + +Contributors +------------ + +People who contributed to Sphinx and their contributions (in no particular +order): + + * Robert "coredev" Bengtsson (Sweden), initial version of PostgreSQL + data source + + * Len Kranendonk, Perl API + + * Dmytro Shteflyuk, Ruby API + +Many other people have contributed ideas, bug reports, fixes, etc. Thank +you! + +1.6. History +============ + +Sphinx development was started back in 2001, because I didn't manage to +find an acceptable search solution (for a database driven Web site) which +would meet my requirements. Actually, each and every important aspect was +a problem: + + * search quality (ie. good relevance) + + * statistical ranking methods performed rather bad, especially on + large collections of small documents (forums, blogs, etc) + + * search speed + + * especially if searching for phrases which contain stopwords, as in + "to be or not to be" + + * moderate disk and CPU requirements when indexing + + * important in shared hosting enivronment, not to mention the + indexing speed. + +Despite the amount of time passed and numerous improvements made in the +other solutions, there's still no solution which I personally would be +eager to migrate to. + +Considering that and a lot of positive feedback received from Sphinx users +during last years, the obvious decision is to continue developing Sphinx +(and, eventually, to take over the world). + +Chapter 2. Installation +======================= + +Table of Contents + +2.1. Supported systems +2.2. Required tools +2.3. Installing Sphinx on Linux +2.4. Installing Sphinx on Windows +2.5. Known installation issues +2.6. Quick Sphinx usage tour + +2.1. Supported systems +====================== + +Most modern UNIX systems with a C++ compiler should be able to compile and +run Sphinx without any modifications. + +Currently known systems Sphinx has been successfully running on are: + + * Linux 2.4.x, 2.6.x (many various distributions) + + * Windows 2000, XP + + * FreeBSD 4.x, 5.x, 6.x, 7.x + + * NetBSD 1.6, 3.0 + + * Solaris 9, 11 + + * Mac OS X + +CPU architectures known to work include X86, X86-64, SPARC64, ARM. + +Chance are good that Sphinx should work on other Unix platforms as well; +please report any platforms missing from this list that worked for you! + +2.2. Required tools +=================== + +On UNIX, you will need the following tools to build and install Sphinx: + + * a working C++ compiler. GNU gcc is known to work. + + * a good make program. GNU make is known to work. + +On Windows, you will need Microsoft Visual C/C++ Studio .NET 2003 or 2005. +Other compilers/environments will probably work as well, but for the time +being, you will have to build makefile (or other environment specific +project files) manually. + +2.3. Installing Sphinx on Linux +=============================== + + 1. Extract everything from the distribution tarball (haven't you + already?) and go to the sphinx subdirectory. (We are using version + 2.0.1-beta here for the sake of example only; be sure to change this + to a specific version you're using.) + + | $ tar xzvf sphinx-2.0.1-beta.tar.gz + | $ cd sphinx + + 2. Run the configuration program: + + | $ ./configure + + There's a number of options to configure. The complete listing may be + obtained by using --help switch. The most important ones are: + + * --prefix, which specifies where to install Sphinx; such as + --prefix=/usr/local/sphinx (all of the examples use this prefix) + + * --with-mysql, which specifies where to look for MySQL include and + library files, if auto-detection fails; + + * --with-pgsql, which specifies where to look for PostgreSQL include + and library files. + + 3. Build the binaries: + + | $ make + + 4. Install the binaries in the directory of your choice: (defaults to + /usr/local/bin/ on *nix systems, but is overridden with configure + --prefix) + + | $ make install + +2.4. Installing Sphinx on Windows +================================= + +Installing Sphinx on a Windows server is often easier than installing on +a Linux environment; unless you are preparing code patches, you can use the +pre-compiled binary files from the Downloads area on the website. + + 1. Extract everything from the .zip file you have downloaded - + sphinx-2.0.1-beta-win32.zip, or sphinx-2.0.1-beta-win32-pgsql.zip if + you need PostgresSQL support as well. (We are using version + 2.0.1-beta here for the sake of example only; be sure to change this + to a specific version you're using.) You can use Windows Explorer in + Windows XP and up to extract the files, or a freeware package like + 7Zip to open the archive. + + For the remainder of this guide, we will assume that the folders are + unzipped into C:\Sphinx, such that searchd.exe can be found in + C:\Sphinx\bin\searchd.exe. If you decide to use any different + location for the folders or configuration file, please change it + accordingly. + + 2. Edit the contents of sphinx.conf.in - specifically entries relating + to @CONFDIR@ - to paths suitable for your system. + + 3. Install the searchd system as a Windows service: + + | C:\Sphinx\bin> C:\Sphinx\bin\searchd --install --config + | C:\Sphinx\sphinx.conf.in --servicename SphinxSearch + + 4. The searchd service will now be listed in the Services panel within + the Management Console, available from Administrative Tools. It will + not have been started, as you will need to configure it and build + your indexes with indexer before starting the service. A guide to do + this can be found under Quick tour. + + During the next steps of the install (which involve running indexer + pretty much as you would on Linux) you may find that you get an error + relating to libmysql.dll not being found. If you have MySQL + installed, you should find a copy of this library in your Windows + directory, or sometimes in Windows\System32, or failing that in the + MySQL core directories. If you do receive an error please copy + libmysql.dll into the bin directory. + +2.5. Known installation issues +============================== + +If configure fails to locate MySQL headers and/or libraries, try checking +for and installing mysql-devel package. On some systems, it is not +installed by default. + +If make fails with a message which look like + + | /bin/sh: g++: command not found + | make[1]: *** [libsphinx_a-sphinx.o] Error 127 + +try checking for and installing gcc-c++ package. + +If you are getting compile-time errors which look like + + | sphinx.cpp:67: error: invalid application of `sizeof' to + | incomplete type `Private::SizeError' + +this means that some compile-time type size check failed. The most probable +reason is that off_t type is less than 64-bit on your system. As a quick +hack, you can edit sphinx.h and replace off_t with DWORD in a typedef for +SphOffset_t, but note that this will prohibit you from using full-text +indexes larger than 2 GB. Even if the hack helps, please report such +issues, providing the exact error message and compiler/OS details, so +I could properly fix them in next releases. + +If you keep getting any other error, or the suggestions above do not seem +to help you, please don't hesitate to contact me. + +2.6. Quick Sphinx usage tour +============================ + +All the example commands below assume that you installed Sphinx in +/usr/local/sphinx, so searchd can be found in +/usr/local/sphinx/bin/searchd. + +To use Sphinx, you will need to: + + 1. Create a configuration file. + + Default configuration file name is sphinx.conf. All Sphinx programs + look for this file in current working directory by default. + + Sample configuration file, sphinx.conf.dist, which has all the + options documented, is created by configure. Copy and edit that + sample file to make your own configuration: (assuming Sphinx is + installed into /usr/local/sphinx/) + + | $ cd /usr/local/sphinx/etc + | $ cp sphinx.conf.dist sphinx.conf + | $ vi sphinx.conf + + Sample configuration file is setup to index documents table from + MySQL database test; so there's example.sql sample data file to + populate that table with a few documents for testing purposes: + + | $ mysql -u test < /usr/local/sphinx/etc/example.sql + + 2. Run the indexer to create full-text index from your data: + + | $ cd /usr/local/sphinx/etc + | $ /usr/local/sphinx/bin/indexer --all + + 3. Query your newly created index! + +To query the index from command line, use search utility: + + | $ cd /usr/local/sphinx/etc + | $ /usr/local/sphinx/bin/search test + +To query the index from your PHP scripts, you need to: + + 1. Run the search daemon which your script will talk to: + + | $ cd /usr/local/sphinx/etc + | $ /usr/local/sphinx/bin/searchd + + 2. Run the attached PHP API test script (to ensure that the daemon was + succesfully started and is ready to serve the queries): + + | $ cd sphinx/api + | $ php test.php test + + 3. Include the API (it's located in api/sphinxapi.php) into your own + scripts and use it. + +Happy searching! + +Chapter 3. Indexing +=================== + +Table of Contents + +3.1. Data sources +3.2. Attributes +3.3. MVA (multi-valued attributes) +3.4. Indexes +3.5. Restrictions on the source data +3.6. Charsets, case folding, and translation tables +3.7. SQL data sources (MySQL, PostgreSQL) +3.8. xmlpipe data source +3.9. xmlpipe2 data source +3.10. Live index updates +3.11. Delta index updates +3.12. Index merging + +3.1. Data sources +================= + +The data to be indexed can generally come from very different sources: SQL +databases, plain text files, HTML files, mailboxes, and so on. From Sphinx +point of view, the data it indexes is a set of structured documents, each +of which has the same set of fields. This is biased towards SQL, where each +row correspond to a document, and each column to a field. + +Depending on what source Sphinx should get the data from, different code is +required to fetch the data and prepare it for indexing. This code is called +data source driver (or simply driver or data source for brevity). + +At the time of this writing, there are drivers for MySQL and PostgreSQL +databases, which can connect to the database using its native C/C++ API, +run queries and fetch the data. There's also a driver called xmlpipe, which +runs a specified command and reads the data from its stdout. See +Section 3.8, <> section for the format description. + +There can be as many sources per index as necessary. They will be +sequentially processed in the very same order which was specifed in index +definition. All the documents coming from those sources will be merged as +if they were coming from a single source. + +3.2. Attributes +=============== + +Attributes are additional values associated with each document that can be +used to perform additional filtering and sorting during search. + +It is often desired to additionally process full-text search results based +not only on matching document ID and its rank, but on a number of other +per-document values as well. For instance, one might need to sort news +search results by date and then relevance, or search through products +within specified price range, or limit blog search to posts made by +selected users, or group results by month. To do that efficiently, Sphinx +allows to attach a number of additional attributes to each document, and +store their values in the full-text index. It's then possible to use stored +values to filter, sort, or group full-text matches. + +Attributes, unlike the fields, are not full-text indexed. They are stored +in the index, but it is not possible to search them as full-text, and +attempting to do so results in an error. + +For example, it is impossible to use the extended matching mode expression +@column 1 to match documents where column is 1, if column is an attribute, +and this is still true even if the numeric digits are normally indexed. + +Attributes can be used for filtering, though, to restrict returned rows, as +well as sorting or result grouping; it is entirely possible to sort results +purely based on attributes, and ignore the search relevance tools. +Additionally, attributes are returned from the search daemon, while the +indexed text is not. + +A good example for attributes would be a forum posts table. Assume that +only title and content fields need to be full-text searchable - but that +sometimes it is also required to limit search to a certain author or +a sub-forum (ie. search only those rows that have some specific values of +author_id or forum_id columns in the SQL table); or to sort matches by +post_date column; or to group matching posts by month of the post_date and +calculate per-group match counts. + +This can be achieved by specifying all the mentioned columns (excluding +title and content, that are full-text fields) as attributes, indexing them, +and then using API calls to setup filtering, sorting, and grouping. Here as +an example. + +Example sphinx.conf part: +------------------------- + + | ... + | sql_query = SELECT id, title, content, \ + | author_id, forum_id, post_date FROM my_forum_posts + | sql_attr_uint = author_id + | sql_attr_uint = forum_id + | sql_attr_timestamp = post_date + | ... + +Example application code (in PHP): +---------------------------------- + + | // only search posts by author whose ID is 123 + | $cl->SetFilter ( "author_id", array ( 123 ) ); + | + | // only search posts in sub-forums 1, 3 and 7 + | $cl->SetFilter ( "forum_id", array ( 1,3,7 ) ); + | + | // sort found posts by posting date in descending order + | $cl->SetSortMode ( SPH_SORT_ATTR_DESC, "post_date" ); + +Attributes are named. Attribute names are case insensitive. Attributes are +not full-text indexed; they are stored in the index as is. Currently +supported attribute types are: + + * unsigned integers (1-bit to 32-bit wide); + + * UNIX timestamps; + + * floating point values (32-bit, IEEE 754 single precision); + + * string ordinals (specially computed integers); + + * strings (since 1.10-beta); + + * MVA, multi-value attributes (variable-length lists of 32-bit unsigned + integers). + +The complete set of per-document attribute values is sometimes referred to +as docinfo. Docinfos can either be + + * stored separately from the main full-text index data ("extern" + storage, in .spa file), or + + * attached to each occurence of document ID in full-text index data + ("inline" storage, in .spd file). + +When using extern storage, a copy of .spa file (with all the attribute +values for all the documents) is kept in RAM by searchd at all times. This +is for performance reasons; random disk I/O would be too slow. On the +contrary, inline storage does not require any additional RAM at all, but +that comes at the cost of greatly inflating the index size: remember that +it copies all attribute value every time when the document ID is mentioned, +and that is exactly as many times as there are different keywords in the +document. Inline may be the only viable option if you have only a few +attributes and need to work with big datasets in limited RAM. However, in +most cases extern storage makes both indexing and searching much more +efficient. + +Search-time memory requirements for extern storage are +(1+number_of_attrs)*number_of_docs*4 bytes, ie. 10 million docs with +2 groups and 1 timestamp will take (1+2+1)*10M*4 = 160 MB of RAM. This is +PER DAEMON, not per query. searchd will allocate 160 MB on startup, read +the data and keep it shared between queries. The children will NOT allocate +any additional copies of this data. + +3.3. MVA (multi-valued attributes) +================================== + +MVAs, or multi-valued attributes, are an important special type of +per-document attributes in Sphinx. MVAs make it possible to attach lists of +values to every document. They are useful for article tags, product +categories, etc. Filtering and group-by (but not sorting) on MVA attributes +is supported. + +Currently, MVA list entries are limited to unsigned 32-bit integers. The +list length is not limited, you can have an arbitrary number of values +attached to each document as long as RAM permits (.spm file that contains +the MVA values will be precached in RAM by searchd). The source data can be +taken either from a separate query, or from a document field; see source +type in sql_attr_multi. In the first case the query will have to return +pairs of document ID and MVA values, in the second one the field will be +parsed for integer values. There are absolutely no requirements as to +incoming data order; the values will be automatically grouped by document +ID (and internally sorted within the same ID) during indexing anyway. + +When filtering, a document will match the filter on MVA attribute if any of +the values satisfy the filtering condition. (Therefore, documents that pass +through exclude filters will not contain any of the forbidden values.) When +grouping by MVA attribute, a document will contribute to as many groups as +there are different MVA values associated with that document. For instance, +if the collection contains exactly 1 document having a 'tag' MVA with +values 5, 7, and 11, grouping on 'tag' will produce 3 groups with '@count' +equal to 1 and '@groupby' key values of 5, 7, and 11 respectively. Also +note that grouping by MVA might lead to duplicate documents in the result +set: because each document can participate in many groups, it can be chosen +as the best one in in more than one group, leading to duplicate IDs. PHP +API historically uses ordered hash on the document ID for the resulting +rows; so you'll also need to use SetArrayResult() in order to employ +group-by on MVA with PHP API. + +3.4. Indexes +============ + +To be able to answer full-text search queries fast, Sphinx needs to build +a special data structure optimized for such queries from your text data. +This structure is called index; and the process of building index from text +is called indexing. + +Different index types are well suited for different tasks. For example, +a disk-based tree-based index would be easy to update (ie. insert new +documents to existing index), but rather slow to search. Therefore, Sphinx +architecture allows for different index types to be implemented easily. + +The only index type which is implemented in Sphinx at the moment is +designed for maximum indexing and searching speed. This comes at a cost of +updates being really slow; theoretically, it might be slower to update this +type of index than than to reindex it from scratch. However, this very +frequently could be worked around with muiltiple indexes, see Section 3.10, +<> for details. + +It is planned to implement more index types, including the type which would +be updateable in real time. + +There can be as many indexes per configuration file as necessary. indexer +utility can reindex either all of them (if --all option is specified), or +a certain explicitly specified subset. searchd utility will serve all the +specified indexes, and the clients can specify what indexes to search in +run time. + +3.5. Restrictions on the source data +==================================== + +There are a few different restrictions imposed on the source data which is +going to be indexed by Sphinx, of which the single most important one is: + +ALL DOCUMENT IDS MUST BE UNIQUE UNSIGNED NON-ZERO INTEGER NUMBERS (32-BIT +OR 64-BIT, DEPENDING ON BUILD TIME SETTINGS). + +If this requirement is not met, different bad things can happen. For +instance, Sphinx can crash with an internal assertion while indexing; or +produce strange results when searching due to conflicting IDs. Also, +a 1000-pound gorilla might eventually come out of your display and start +throwing barrels at you. You've been warned. + +3.6. Charsets, case folding, and translation tables +=================================================== + +When indexing some index, Sphinx fetches documents from the specified +sources, splits the text into words, and does case folding so that "Abc", +"ABC" and "abc" would be treated as the same word (or, to be pedantic, +term). + +To do that properly, Sphinx needs to know + + * what encoding is the source text in; + + * what characters are letters and what are not; + + * what letters should be folded to what letters. + +This should be configured on a per-index basis using charset_type and +charset_table options. charset_type specifies whether the document encoding +is single-byte (SBCS) or UTF-8. charset_table specifies the table that maps +letter characters to their case folded versions. The characters that are +not in the table are considered to be non-letters and will be treated as +word separators when indexing or searching through this index. + +Note that while default tables do not include space character (ASCII code +0x20, Unicode U+0020) as a letter, it's in fact perfectly legal to do so. +This can be useful, for instance, for indexing tag clouds, so that +space-separated word sets would index as a single search query term. + +Default tables currently include English and Russian characters. Please do +submit your tables for other languages! + +3.7. SQL data sources (MySQL, PostgreSQL) +========================================= + +With all the SQL drivers, indexing generally works as follows. + + * connection to the database is established; + + * pre-query (see Section 11.1.11, <>) is executed to + perform any necessary initial setup, such as setting per-connection + encoding with MySQL; + + * main query (see Section 11.1.12, <>) is executed and the + rows it returns are indexed; + + * post-query (see Section 11.1.30, <>) is executed to + perform any necessary cleanup; + + * connection to the database is closed; + + * indexer does the sorting phase (to be pedantic, index-type specific + post-processing); + + * connection to the database is established again; + + * post-index query (see Section 11.1.31, <>) is + executed to perform any necessary final cleanup; + + * connection to the database is closed again. + +Most options, such as database user/host/password, are straightforward. +However, there are a few subtle things, which are discussed in more detail +here. + +Ranged queries +-------------- + +Main query, which needs to fetch all the documents, can impose a read lock +on the whole table and stall the concurrent queries (eg. INSERTs to MyISAM +table), waste a lot of memory for result set, etc. To avoid this, Sphinx +supports so-called ranged queries. With ranged queries, Sphinx first +fetches min and max document IDs from the table, and then substitutes +different ID intervals into main query text and runs the modified query to +fetch another chunk of documents. Here's an example. + +Example 3.1. Ranged query usage example + + | # in sphinx.conf + | + | sql_query_range = SELECT MIN(id),MAX(id) FROM documents + | sql_range_step = 1000 + | sql_query = SELECT * FROM documents WHERE id>=$start AND id<=$end + +If the table contains document IDs from 1 to, say, 2345, then sql_query +would be run three times: + + 1. with $start replaced with 1 and $end replaced with 1000; + + 2. with $start replaced with 1001 and $end replaced with 2000; + + 3. with $start replaced with 2000 and $end replaced with 2345. + +Obviously, that's not much of a difference for 2000-row table, but when it +comes to indexing 10-million-row MyISAM table, ranged queries might be of +some help. + +sql_post vs. sql_post_index +--------------------------- + +The difference between post-query and post-index query is in that +post-query is run immediately when Sphinx received all the documents, but +further indexing may still fail for some other reason. On the contrary, by +the time the post-index query gets executed, it is guaranteed that the +indexing was succesful. Database connection is dropped and re-established +because sorting phase can be very lengthy and would just timeout otherwise. + +3.8. xmlpipe data source +======================== + +xmlpipe data source was designed to enable users to plug data into Sphinx +without having to implement new data sources drivers themselves. It is +limited to 2 fixed fields and 2 fixed attributes, and is deprecated in +favor of Section 3.9, <> now. For new streams, use +xmlpipe2. + +To use xmlpipe, configure the data source in your configuration file as +follows: + + | source example_xmlpipe_source + | { + | type = xmlpipe + | xmlpipe_command = perl /www/mysite.com/bin/sphinxpipe.pl + | } + +The indexer will run the command specified in xmlpipe_command, and then +read, parse and index the data it prints to stdout. More formally, it opens +a pipe to given command and then reads from that pipe. + +indexer will expect one or more documents in custom XML format. Here's the +example document stream, consisting of two documents: + +Example 3.2. XMLpipe document stream + + | + | 123 + | 45 + | 1132223498 + | test title + | + | this is my document body + | + | + | + | + | 124 + | 46 + | 1132223498 + | another test + | + | this is another document + | + | + +Legacy xmlpipe legacy driver uses a builtin parser which is pretty fast but +really strict and does not actually fully support XML. It requires that all +the fields must be present, formatted exactly as in this example, and occur +exactly in the same order. The only optional field is timestamp; it +defaults to 1. + +3.9. xmlpipe2 data source +========================= + +xmlpipe2 lets you pass arbitrary full-text and attribute data to Sphinx in +yet another custom XML format. It also allows to specify the schema (ie. +the set of fields and attributes) either in the XML stream itself, or in +the source settings. + +When indexing xmlpipe2 source, indexer runs the given command, opens a pipe +to its stdout, and expects well-formed XML stream. Here's sample stream +data: + +Example 3.3. xmlpipe2 document stream + + | + | + | + | + | + | + | + | + | + | + | + | this is the main content entry + | must be handled properly by xml parser lib]]> + | 1012325463 + | note how field/attr tags can be + | in randomized order + | some undeclared element + | + | + | + | another subject + | here comes another document, and i am given to understand, + | that in-document field order must not matter, sir + | 1012325467 + | + | + | + | + | + | 1234 + | 4567 + | + | + | + +Arbitrary fields and attributes are allowed. They also can occur in the +stream in arbitrary order within each document; the order is ignored. There +is a restriction on maximum field length; fields longer than 2 MB will be +truncated to 2 MB (this limit can be changed in the source). + +The schema, ie. complete fields and attributes list, must be declared +before any document could be parsed. This can be done either in the +configuration file using xmlpipe_field and xmlpipe_attr_XXX settings, or +right in the stream using element. is +optional. It is only allowed to occur as the very first sub-element in +. If there is no in-stream schema definition, settings from +the configuration file will be used. Otherwise, stream settings take +precedence. + +Unknown tags (which were not declared neither as fields nor as attributes) +will be ignored with a warning. In the example above, will be +ignored. All embedded tags and their attributes (such as in +in the example above) will be silently ignored. + +Support for incoming stream encodings depends on whether iconv is installed +on the system. xmlpipe2 is parsed using libexpat parser that understands +US-ASCII, ISO-8859-1, UTF-8 and a few UTF-16 variants natively. Sphinx +configure script will also check for libiconv presence, and utilize it to +handle other encodings. libexpat also enforces the requirement to use UTF-8 +charset on Sphinx side, because the parsed data it returns is always in +UTF-8. + +XML elements (tags) recognized by xmlpipe2 (and their attributes where +applicable) are: + +sphinx:docset + Mandatory top-level element, denotes and contains xmlpipe2 document set. + +sphinx:schema + Optional element, must either occur as the very first child of + sphinx:docset, or never occur at all. Declares the document schema. + Contains field and attribute declarations. If present, overrides + per-source settings from the configuration file. + +sphinx:field + Optional element, child of sphinx:schema. Declares a full-text field. + Known attributes are: + + * "name", specifies the XML element name that will be treated as + a full-text field in the subsequent documents. + + * "attr", specifies whether to also index this field as a string or + word count attribute. Possible values are "string" and "wordcount". + Introduced in version 1.10-beta. + +sphinx:attr + Optional element, child of sphinx:schema. Declares an attribute. Known + attributes are: + + * "name", specifies the element name that should be treated as an + attribute in the subsequent documents. + + * "type", specifies the attribute type. Possible values are "int", + "timestamp", "str2ordinal", "bool", "float" and "multi". + + * "bits", specifies the bit size for "int" attribute type. Valid + values are 1 to 32. + + * "default", specifies the default value for this attribute that + should be used if the attribute's element is not present in the + document. + +sphinx:document + Mandatory element, must be a child of sphinx:docset. Contains arbitrary + other elements with field and attribute values to be indexed, as + declared either using sphinx:field and sphinx:attr elements or in the + configuration file. The only known attribute is "id" that must contain + the unique integer document ID. + +sphinx:killlist + Optional element, child of sphinx:docset. Contains a number of "id" + elements whose contents are document IDs to be put into a kill-list for + this index. + +3.10. Live index updates +======================== + +There are two major approaches to maintaining the full-text index contents +up to date. Note, however, that both these approaches deal with the task of +full-text data updates, and not attribute updates. Instant attribute +updates are supported since version 0.9.8. Refer to UpdateAttributes() API +call description for details. + +First, you can use disk-based indexes, partition them manually, and only +rebuild the smaller partitions (so-called "deltas") frequently. By +minimizing the rebuild size, you can reduce the average indexing lag to +something as low as 30-60 seconds. This approach was the the only one +available in versions 0.9.x. On huge collections it actually might be the +most efficient one. Refer to Section 3.11, <> for +details. + +Second, versions 1.x (starting with 1.10-beta) add support for so-called +real-time indexes (RT indexes for short) that on-the-fly updates of the +full-text data. Updates on a RT index can appear in the search results in +1-2 milliseconds, ie. 0.001-0.002 seconds. However, RT index are less +efficient for bulk indexing huge amounts of data. Refer to Chapter 4, +Real-time indexes for details. + +3.11. Delta index updates +========================= + +There's a frequent situation when the total dataset is too big to be +reindexed from scratch often, but the amount of new records is rather +small. Example: a forum with a 1,000,000 archived posts, but only 1,000 new +posts per day. + +In this case, "live" (almost real time) index updates could be implemented +using so called "main+delta" scheme. + +The idea is to set up two sources and two indexes, with one "main" index +for the data which only changes rarely (if ever), and one "delta" for the +new documents. In the example above, 1,000,000 archived posts would go to +the main index, and newly inserted 1,000 posts/day would go to the delta +index. Delta index could then be reindexed very frequently, and the +documents can be made available to search in a matter of minutes. + +Specifying which documents should go to what index and reindexing main +index could also be made fully automatical. One option would be to make +a counter table which would track the ID which would split the documents, +and update it whenever the main index is reindexed. + +Example 3.4. Fully automated live updates + + | # in MySQL + | CREATE TABLE sph_counter + | ( + | counter_id INTEGER PRIMARY KEY NOT NULL, + | max_doc_id INTEGER NOT NULL + | ); + | + | # in sphinx.conf + | source main + | { + | # ... + | sql_query_pre = SET NAMES utf8 + | sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents + | sql_query = SELECT id, title, body FROM documents \ + | WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) + | } + | + | source delta : main + | { + | sql_query_pre = SET NAMES utf8 + | sql_query = SELECT id, title, body FROM documents \ + | WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) + | } + | + | index main + | { + | source = main + | path = /path/to/main + | # ... all the other settings + | } + | + | # note how all other settings are copied from main, + | # but source and path are overridden (they MUST be) + | index delta : main + | { + | source = delta + | path = /path/to/delta + | } + +Note how we're overriding sql_query_pre in the delta source. We need to +explicitly have that override. Otherwise REPLACE query would be run when +indexing delta source too, effectively nullifying it. However, when we +issue the directive in the inherited source for the first time, it removes +all inherited values, so the encoding setup is also lost. So sql_query_pre +in the delta can not just be empty; and we need to issue the encoding setup +query explicitly once again. + +3.12. Index merging +=================== + +Merging two existing indexes can be more efficient that indexing the data +from scratch, and desired in some cases (such as merging 'main' and 'delta' +indexes instead of simply reindexing 'main' in 'main+delta' partitioning +scheme). So indexer has an option to do that. Merging the indexes is +normally faster than reindexing but still not instant on huge indexes. +Basically, it will need to read the contents of both indexes once and write +the result once. Merging 100 GB and 1 GB index, for example, will result in +202 GB of IO (but that's still likely less than the indexing from scratch +requires). + +The basic command syntax is as follows: + + | indexer --merge DSTINDEX SRCINDEX [--rotate] + +Only the DSTINDEX index will be affected: the contents of SRCINDEX will be +merged into it. --rotate switch will be required if DSTINDEX is already +being served by searchd. The initially devised usage pattern is to merge +a smaller update from SRCINDEX into DSTINDEX. Thus, when merging the +attributes, values from SRCINDEX will win if duplicate document IDs are +encountered. Note, however, that the "old" keywords will not be +automatically removed in such cases. For example, if there's a keyword +"old" associated with document 123 in DSTINDEX, and a keyword "new" +associated with it in SRCINDEX, document 123 will be found by both keywords +after the merge. You can supply an explicit condition to remove documents +from DSTINDEX to mitigate that; the relevant switch is --merge-dst-range: + + | indexer --merge main delta --merge-dst-range deleted 0 0 + +This switch lets you apply filters to the destination index along with +merging. There can be several filters; all of their conditions must be met +in order to include the document in the resulting mergid index. In the +example above, the filter passes only those records where 'deleted' is 0, +eliminating all records that were flagged as deleted (for instance, using +UpdateAttributes() call). + +Chapter 4. Real-time indexes +============================ + +Table of Contents + +4.1. RT indexes overview +4.2. Known caveats with RT indexes +4.3. RT index internals +4.4. Binary logging + +Real-time indexes (or RT indexes for brevity) are a new backend that lets +you insert, update, or delete documents (rows) on the fly. RT indexes were +added in version 1.10-beta. While querying of RT indexes is possible using +any of the SphinxAPI, SphinxQL, or SphinxSE, updating them is only possible +via SphinxQL at the moment. Full SphinxQL reference is available in +Chapter 7, SphinxQL reference. + +4.1. RT indexes overview +======================== + +RT indexes should be declared in sphinx.conf, just as every other index +type. Notable differences from the regular, disk-based indexes are that a) +data sources are not required and ignored, and b) you should explicitly +enumerate all the text fields, not just attributes. Here's an example: + +Example 4.1. RT index declaration + + | index rt + | { + | type = rt + | path = /usr/local/sphinx/data/rt + | rt_field = title + | rt_field = content + | rt_attr_uint = gid + | } + +RT INDEXES ARE CURRENTLY (AS OF VERSION 1.10-beta) A WORK IN PROGRESS. +Therefore, they might lack certain features: for instance, prefix/infix +indexing, MVA attributes, etc are not supported yet. There also might be +performance and stability issues. However, all the regular indexing +features and most of the searching features are already in place, our +internal testing passes, and last but not least a number of production +instances are already using RT indexes with good results. + +RT index can be accessed using MySQL protocol. INSERT, REPLACE, DELETE, and +SELECT statements against RT index are supported. For instance, this is an +example session with the sample index above: + + | $ mysql -h 127.0.0.1 -P 9306 + | Welcome to the MySQL monitor. Commands end with ; or \g. + | Your MySQL connection id is 1 + | Server version: 1.10-dev (r2153) + | + | Type 'help;' or '\h' for help. Type '\c' to clear the buffer. + | + | mysql> INSERT INTO rt VALUES ( 1, 'first record', 'test one', 123 ); + | Query OK, 1 row affected (0.05 sec) + | + | mysql> INSERT INTO rt VALUES ( 2, 'second record', 'test two', 234 ); + | Query OK, 1 row affected (0.00 sec) + | + | mysql> SELECT * FROM rt; + | +------+--------+------+ + | | id | weight | gid | + | +------+--------+------+ + | | 1 | 1 | 123 | + | | 2 | 1 | 234 | + | +------+--------+------+ + | 2 rows in set (0.02 sec) + | + | mysql> SELECT * FROM rt WHERE MATCH('test'); + | +------+--------+------+ + | | id | weight | gid | + | +------+--------+------+ + | | 1 | 1643 | 123 | + | | 2 | 1643 | 234 | + | +------+--------+------+ + | 2 rows in set (0.01 sec) + | + | mysql> SELECT * FROM rt WHERE MATCH('@title test'); + | Empty set (0.00 sec) + +Both partial and batch INSERT syntaxes are supported, ie. you can specify +a subset of columns, and insert several rows at a time. Deletions are also +possible using DELETE statement; the only currently supported syntax is +DELETE FROM WHERE id=. REPLACE is also supported, enabling you +to implement updates. + + | mysql> INSERT INTO rt ( id, title ) VALUES ( 3, 'third row' ), ( 4, 'fourth entry' ); + | Query OK, 2 rows affected (0.01 sec) + | + | mysql> SELECT * FROM rt; + | +------+--------+------+ + | | id | weight | gid | + | +------+--------+------+ + | | 1 | 1 | 123 | + | | 2 | 1 | 234 | + | | 3 | 1 | 0 | + | | 4 | 1 | 0 | + | +------+--------+------+ + | 4 rows in set (0.00 sec) + | + | mysql> DELETE FROM rt WHERE id=2; + | Query OK, 0 rows affected (0.00 sec) + | + | mysql> SELECT * FROM rt WHERE MATCH('test'); + | +------+--------+------+ + | | id | weight | gid | + | +------+--------+------+ + | | 1 | 1500 | 123 | + | +------+--------+------+ + | 1 row in set (0.00 sec) + | + | mysql> INSERT INTO rt VALUES ( 1, 'first record on steroids', 'test one', 123 ); + | ERROR 1064 (42000): duplicate id '1' + | + | mysql> REPLACE INTO rt VALUES ( 1, 'first record on steroids', 'test one', 123 ); + | Query OK, 1 row affected (0.01 sec) + | + | mysql> SELECT * FROM rt WHERE MATCH('steroids'); + | +------+--------+------+ + | | id | weight | gid | + | +------+--------+------+ + | | 1 | 1500 | 123 | + | +------+--------+------+ + | 1 row in set (0.01 sec) + +Data stored in RT index should survive clean shutdown. When binary logging +is enabled, it should also survive crash and/or dirty shutdown, and recover +on subsequent startup. + +4.2. Known caveats with RT indexes +================================== + +As of 1.10-beta, RT indexes are a beta quality feature: while no major, +showstopper-class issues are known, there still are a few known usage +quirks. Those quirks are listed in this section. + + * Prefix and infix indexing are not supported yet. + + * MVAs are not supported yet. + + * Disk chunks optimization routine is not implemented yet. + + * On initial index creation, attributes are reordered by type, in the + following order: uint, bigint, float, timestamp, string. So when using + INSERT without an explicit column names list, specify all uint column + values first, then bigint, etc. + + * Default conservative RAM chunk limit (rt_mem_limit) of 32M can lead to + poor performance on bigger indexes, you should raise it to 256..1024M + if you're planning to index gigabytes. + + * High DELETE/REPLACE rate can lead to kill-list fragmentation and + impact searching performance. + + * No transaction size limits are currently imposed; too many concurrent + INSERT/REPLACE transactions might therefore consume a lot of RAM. + + * In case of a damaged binlog, recovery will stop on the first damaged + transaction, even though it's technically possible to keep looking + further for subsequent undamaged transactions, and recover those. This + mid-file damage case (due to flaky HDD/CDD/tape?) is supposed to be + extremely rare, though. + + * Multiple INSERTs grouped in a single transaction perform better than + equivalent single-row transactions and are recommended for batch + loading of data. + +4.3. RT index internals +======================= + +RT index is internally chunked. It keeps a so-called RAM chunk that stores +all the most recent changes. RAM chunk memory usage is rather strictly +limited with per-index rt_mem_limit directive. Once RAM chunk grows over +this limit, a new disk chunk is created from its data, and RAM chunk is +reset. Thus, while most changes on the RT index will be performed in RAM +only and complete instantly (in milliseconds), those changes that overflow +the RAM chunk will stall for the duration of disk chunk creation (a few +seconds). + +Disk chunks are, in fact, just regular disk-based indexes. But they're +a part of an RT index and automatically managed by it, so you need not +configure nor manage them manually. Because a new disk chunk is created +every time RT chunk overflows the limit, and because in-memory chunk format +is close to on-disk format, the disk chunks will be approximately +rt_mem_limit bytes in size each. + +Generally, it is better to set the limit bigger, to minimize both the +frequency of flushes, and the index fragmentation (number of disk chunks). +For instance, on a dedicated search server that handles a big RT index, it +can be advised to set rt_mem_limit to 1-2 GB. A global limit on all indexes +is also planned, but not yet implemented yet as of 1.10-beta. + +Disk chunk full-text index data can not be actually modified, so the +full-text field changes (ie. row deletions and updates) suppress a previous +row version from a disk chunk using a kill-list, but do not actually +physically purge the data. Therefore, on workloads with high full-text +updates ratio index might eventually get polluted by these previous row +versions, and searching performance would degrade. Physical index purging +that would improve the performance is planned, but not yet implemented as +of 1.10-beta. + +Data in RAM chunk gets saved to disk on clean daemon shutdown, and then +loaded back on startup. However, on daemon or server crash, updates from +RAM chunk might be lost. To prevent that, binary logging of transactions +can be used; see Section 4.4, <> for details. + +Full-text changes in RT index are transactional. They are stored in +a per-thread accumulator until COMMIT, then applied at once. Bigger batches +per single COMMIT should result in faster indexing. + +4.4. Binary logging +=================== + +Binary logs are essentially a recovery mechanism. With binary logs enabled, +searchd writes every given transaction to the binlog file, and uses that +for recovery after an unclean shutdown. On clean shutdown, RAM chunks are +saved to disk, and then all the binlog files are unlinked. + +During normal operation, a new binlog file will be opened every time when +binlog_max_log_size limit (which defaults to 128M) is reached. Older, +already closed binlog files are kept until all of the transactions stored +in them (from all indexes) are flushed as a disk chunk. Setting the limit +to 0 pretty much prevents binlog from being unlinked at all while searchd +is running; however, it will still be unlinked on clean shutdown. + +There are 3 different binlog flushing strategies, controlled by +binlog_flush directive which takes the values of 0, 1, or 2. 0 means to +flush the log to OS and sync it to disk every second; 1 means flush and +sync every transaction; and 2 (the default mode) means flush every +transaction but sync every second. Sync is relatively slow because it has +to perform physical disk writes, so mode 1 is the safest (every committed +transaction is guaranteed to be written on disk) but the slowest. Flushing +log to OS prevents from data loss on searchd crashes but not system +crashes. Mode 2 is the default. + +On recovery after an unclean shutdown, binlogs are replayed and all logged +transactions since the last good on-disk state are restored. Transactions +are checksummed so in case of binlog file corruption garbage data will not +be replayed; such a broken transaction will be detected and, currently, +will stop replay. Transactions also start with a magic marker and +timestamped, so in case of binlog damage in the middle of the file, it's +technically possible to skip broken transactions and keep replaying from +the next good one, and/or it's possible to replay transactions until +a given timestamp (point-in-time recovery), but none of that is implemented +yet as of 1.10-beta. + +One unwanted side effect of binlogs is that activel updating a small RT +index that fully fits into a RAM chunk part will lead to an ever-growing +binlog that can never be unlinked until clean shutdown. Binlogs are +essentially append-only deltas against the last known good saved state on +disk, and unless RAM chunk gets saved, they can not be unlinked. An +ever-growing binlog is not very good for disk use and crash recovery time. +Starting with 2.0.1-beta you can configure searchd to perform a periodic +RAM chunk flush to fix that problem using a rt_flush_period directive. With +periodic flushes enabled, searchd will keep a separate thread, checking +whether RT indexes RAM chunks need to be written back to disk. Once that +happens, the respective binlogs can be (and are) safely unlinked. + +Note that rt_flush_period only controls the frequency at which the checks +happen. There are no guarantees that the particular RAM chunk will get +saved. For instance, it does not make sense to regularly re-save a huge RAM +chunk that only gets a few rows worh of updates. The search daemon +determine whether to actually perform the flush with a few heuristics. + +Chapter 5. Searching +==================== + +Table of Contents + +5.1. Matching modes +5.2. Boolean query syntax +5.3. Extended query syntax +5.4. Weighting +5.5. Expressions, functions, and operators + 5.5.1. Operators + 5.5.2. Numeric functions + 5.5.3. Date and time functions + 5.5.4. Type conversion functions + 5.5.5. Comparison functions + 5.5.6. Miscellaneous functions + +5.6. Sorting modes +5.7. Grouping (clustering) search results +5.8. Distributed searching +5.9. searchd query log formats + 5.9.1. Plain log format + 5.9.2. SphinxQL log format + +5.10. MySQL protocol support and SphinxQL +5.11. Multi-queries +5.12. Collations +5.13. User-defined functions (UDF) + +5.1. Matching modes +=================== + +There are the following matching modes available: + + * SPH_MATCH_ALL, matches all query words (default mode); + + * SPH_MATCH_ANY, matches any of the query words; + + * SPH_MATCH_PHRASE, matches query as a phrase, requiring perfect match; + + * SPH_MATCH_BOOLEAN, matches query as a boolean expression (see + Section 5.2, <>); + + * SPH_MATCH_EXTENDED, matches query as an expression in Sphinx internal + query language (see Section 5.3, <>). As of + 0.9.9, this has been superceded by SPH_MATCH_EXTENDED2, providing + additional functionality and better performance. The ident is retained + for legacy application code that will continue to be compatible once + Sphinx and its components, including the API, are upgraded. + + * SPH_MATCH_EXTENDED2, matches query using the second version of the + Extended matching mode. + + * SPH_MATCH_FULLSCAN, matches query, forcibly using the "full scan" mode + as below. NB, any query terms will be ignored, such that filters, + filter-ranges and grouping will still be applied, but no + text-matching. + +The SPH_MATCH_FULLSCAN mode will be automatically activated in place of the +specified matching mode when the following conditions are met: + + 1. The query string is empty (ie. its length is zero). + + 2. docinfo storage is set to extern. + +In full scan mode, all the indexed documents will be considered as +matching. Such queries will still apply filters, sorting, and group by, but +will not perform any full-text searching. This can be useful to unify +full-text and non-full-text searching code, or to offload SQL server (there +are cases when Sphinx scans will perform better than analogous MySQL +queries). An example of using the full scan mode might be to find posts in +a forum. By selecting the forum's user ID via SetFilter() but not actually +providing any search text, Sphinx will match every document (i.e. every +post) where SetFilter() would match - in this case providing every post +from that user. By default this will be ordered by relevancy, followed by +Sphinx document ID in ascending order (earliest first). + +5.2. Boolean query syntax +========================= + +Boolean queries allow the following special operators to be used: + + * explicit operator AND: + + | hello & world + + * operator OR: + + | hello | world + + * operator NOT: + + | hello -world + | hello !world + + * grouping: + + | ( hello world ) + +Here's an example query which uses all these operators: + +Example 5.1. Boolean query example + + | ( cat -dog ) | ( cat -mouse) + +There always is implicit AND operator, so "hello world" query actually +means "hello & world". + +OR operator precedence is higher than AND, so "looking for cat | dog | +mouse" means "looking for ( cat | dog | mouse )" and not "(looking for cat) +| dog | mouse". + +Queries like "-dog", which implicitly include all documents from the +collection, can not be evaluated. This is both for technical and +performance reasons. Technically, Sphinx does not always keep a list of all +IDs. Performance-wise, when the collection is huge (ie. 10-100M documents), +evaluating such queries could take very long. + +5.3. Extended query syntax +========================== + +The following special operators and modifiers can be used when using the +extended matching mode: + + * operator OR: + + | hello | world + + * operator NOT: + + | hello -world + | hello !world + + * field search operator: + + | @title hello @body world + + * field position limit modifier (introduced in version 0.9.9-rc1): + + | @body[50] hello + + * multiple-field search operator: + + | @(title,body) hello world + + * all-field search operator: + + | @* hello + + * phrase search operator: + + | "hello world" + + * proximity search operator: + + | "hello world"~10 + + * quorum matching operator: + + | "the world is a wonderful place"/3 + + * strict order operator (aka operator "before"): + + | aaa << bbb << ccc + + * exact form modifier (introduced in version 0.9.9-rc1): + + | raining =cats and =dogs + + * field-start and field-end modifier (introduced in version 0.9.9-rc2): + + | ^hello world$ + + * NEAR, generalized proximity operator (introduced in version + 2.0.1-beta): + + | hello NEAR/3 world NEAR/4 "my test" + + * SENTENCE operator (introduced in version 2.0.1-beta): + + | all SENTENCE words SENTENCE "in one sentence" + + * PARAGRAPH operator (introduced in version 2.0.1-beta): + + | "Bill Gates" PARAGRAPH "Steve Jobs" + + * zone limit operator: + + | ZONE:(h3,h4) only in these titles + +Here's an example query that uses some of these operators: + +Example 5.2. Extended matching mode: query example + + | "hello world" @title "example program"~5 @body python -(php|perl) @* code + +The full meaning of this search is: + + * Find the words 'hello' and 'world' adjacently in any field in + a document; + + * Additionally, the same document must also contain the words 'example' + and 'program' in the title field, with up to, but not including, 10 + words between the words in question; (E.g. "example PHP program" would + be matched however "example script to introduce outside data into the + correct context for your program" would not because two terms have 10 + or more words between them) + + * Additionally, the same document must contain the word 'python' in the + body field, but not contain either 'php' or 'perl'; + + * Additionally, the same document must contain the word 'code' in any + field. + +There always is implicit AND operator, so "hello world" means that both +"hello" and "world" must be present in matching document. + +OR operator precedence is higher than AND, so "looking for cat | dog | +mouse" means "looking for ( cat | dog | mouse )" and not "(looking for cat) +| dog | mouse". + +Field limit operator limits subsequent searching to a given field. +Normally, query will fail with an error message if given field name does +not exist in the searched index. However, that can be suppressed by +specifying "@@relaxed" option at the very beginning of the query: + + | @@relaxed @nosuchfield my query + +This can be helpful when searching through heterogeneous indexes with +different schemas. + +Field position limit, introduced in version 0.9.9-rc1, additionaly +restricts the searching to first N position within given field (or fields). +For example, "@body[50] hello" will not match the documents where the +keyword 'hello' occurs at position 51 and below in the body. + +Proximity distance is specified in words, adjusted for word count, and +applies to all words within quotes. For instance, "cat dog mouse"~5 query +means that there must be less than 8-word span which contains all 3 words, +ie. "CAT aaa bbb ccc DOG eee fff MOUSE" document will not match this query, +because this span is exactly 8 words long. + +Quorum matching operator introduces a kind of fuzzy matching. It will only +match those documents that pass a given threshold of given words. The +example above ("the world is a wonderful place"/3) will match all documents +that have at least 3 of the 6 specified words. + +Strict order operator (aka operator "before"), introduced in version +0.9.9-rc2, will match the document only if its argument keywords occur in +the document exactly in the query order. For instance, "black << cat" query +(without quotes) will match the document "black and white cat" but not the +"that cat was black" document. Order operator has the lowest priority. It +can be applied both to just keywords and more complex expressions, ie. this +is a valid query: + + | (bag of words) << "exact phrase" << red|green|blue + +Exact form keyword modifier, introduced in version 0.9.9-rc1, will match +the document only if the keyword occurred in exactly the specified form. +The default behaviour is to match the document if the stemmed keyword +matches. For instance, "runs" query will match both the document that +contains "runs" and the document that contains "running", because both +forms stem to just "run" - while "=runs" query will only match the first +document. Exact form operator requires index_exact_words option to be +enabled. This is a modifier that affects the keyword and thus can be used +within operators such as phrase, proximity, and quorum operators. + +Field-start and field-end keyword modifiers, introduced in version +0.9.9-rc2, will make the keyword match only if it occurred at the very +start or the very end of a fulltext field, respectively. For instance, the +query "^hello world$" (with quotes and thus combining phrase operator and +start/end modifiers) will only match documents that contain at least one +field that has exactly these two keywords. + +Starting with 0.9.9-rc1, arbitrarily nested brackets and negations are +allowed. However, the query must be possible to compute without involving +an implicit list of all documents: + + | // correct query + | aaa -(bbb -(ccc ddd)) + | + | // queries that are non-computable + | -aaa + | aaa | -bbb + +NEAR operator, added in 2.0.1-beta, is a generalized version of a proximity +operator. The syntax is NEAR/N, it is case-sensitive, and no spaces are +allowed beetwen the NEAR keyword, the slash sign, and the distance value. + +The original proximity operator only worked on sets of keywords. NEAR is +more generic and can accept arbitrary subexpressions as its two arguments, +matching the document when both subexpressions are found within N words of +each other, no matter in which order. NEAR is left associative and has the +same (lowest) precedence as BEFORE. + +You should also note how a (one NEAR/7 two NEAR/7 three) query using NEAR +is not really equivalent to a ("one two three"~7) one using keyword +proximity operator. The difference here is that the proximity operator +allows for up to 6 non-matching words between all the 3 matching words, but +the version with NEAR is less restrictive: it would allow for up to 6 words +between 'one' and 'two' and then for up to 6 more between that two-word +matching and a 'three' keyword. + +SENTENCE and PARAGRAPH operators, added in 2.0.1-beta, matches the document +when both its arguments are within the same sentence or the same paragraph +of text, respectively. The arguments can be either keywords, or phrases, or +the instances of the same operator. Here are a few examples: + + | one SENTENCE two + | one SENTENCE "two three" + | one SENTENCE "two three" SENTENCE four + +The order of the arguments within the sentence or paragraph does not +matter. These operators only work on indexes built with index_sp (sentence +and paragraph indexing feature) enabled, and revert to a mere AND +otherwise. Refer to the index_sp directive documentation for the notes on +what's considered a sentence and a paragraph. + +ZONE limit operator, added in 2.0.1-beta, is quite similar to field limit +operator, but restricts matching to a given in-field zone or a list of +zones. Note that the subsequent subexpressions are not required to match in +a single contiguous span of a given zone, and may match in multiple spans. +For instance, (ZONE:th hello world) query will match this example document: + + | Table 1. Local awareness of Hello Kitty brand. + | .. some table data goes here .. + | Table 2. World-wide brand awareness. + +ZONE operator affects the query until the next field or ZONE limit +operator, or the closing parenthesis. It only works on the indexes built +with zones support (see Section 11.2.9, <>) and will be +ignored otherwise. + +5.4. Weighting +============== + +Specific weighting function (currently) depends on the search mode. + +There are these major parts which are used in the weighting functions: + + 1. phrase rank, + + 2. statistical rank. + +Phrase rank is based on a length of longest common subsequence (LCS) of +search words between document body and query phrase. So if there's +a perfect phrase match in some document then its phrase rank would be the +highest possible, and equal to query words count. + +Statistical rank is based on classic BM25 function which only takes word +frequencies into account. If the word is rare in the whole database (ie. +low frequency over document collection) or mentioned a lot in specific +document (ie. high frequency over matching document), it receives more +weight. Final BM25 weight is a floating point number between 0 and 1. + +In all modes, per-field weighted phrase ranks are computed as a product of +LCS multiplied by per-field weight speficifed by user. Per-field weights +are integer, default to 1, and can not be set lower than 1. + +In SPH_MATCH_BOOLEAN mode, no weighting is performed at all, every match +weight is set to 1. + +In SPH_MATCH_ALL and SPH_MATCH_PHRASE modes, final weight is a sum of +weighted phrase ranks. + +In SPH_MATCH_ANY mode, the idea is essentially the same, but it also adds +a count of matching words in each field. Before that, weighted phrase ranks +are additionally mutliplied by a value big enough to guarantee that higher +phrase rank in any field will make the match ranked higher, even if it's +field weight is low. + +In SPH_MATCH_EXTENDED mode, final weight is a sum of weighted phrase ranks +and BM25 weight, multiplied by 1000 and rounded to integer. + +This is going to be changed, so that MATCH_ALL and MATCH_ANY modes use BM25 +weights as well. This would improve search results in those match spans +where phrase ranks are equal; this is especially useful for 1-word queries. + +The key idea (in all modes, besides boolean) is that better subphrase +matches are ranked higher, and perfect matches are pulled to the top. +Author's experience is that this phrase proximity based ranking provides +noticeably better search quality than any statistical scheme alone (such as +BM25, which is commonly used in other search engines). + +5.5. Expressions, functions, and operators +========================================== + +Sphinx lets you use arbitrary arithmetic expressions both via SphinxQL and +SphinxAPI, involving attribute values, internal attributes (document ID and +relevance weight), arithmetic operations, a number of built-in functions, +and user-defined functions. This section documents the supported operators +and functions. Here's the complete reference list for quick access. + + * Arithmetic operators: +, -, *, /, %, DIV, MOD + + * Comparison operators: <, > <=, >=, =, <> + + * Boolean operators: AND, OR, NOT + + * Bitwise operators: &, | + + * ABS() + + * BIGINT() + + * CEIL() + + * COS() + + * CRC32() + + * DAY() + + * EXP() + + * FLOOR() + + * GEODIST() + + * IDIV() + + * IF() + + * IN() + + * INTERVAL() + + * LN() + + * LOG10() + + * LOG2() + + * MAX() + + * MIN() + + * MONTH() + + * NOW() + + * POW() + + * SIN() + + * SINT() + + * SQRT() + + * YEAR() + + * YEARMONTH() + + * YEARMONTHDAY() + +5.5.1. Operators +---------------- + +Arithmetic operators: +, -, *, /, %, DIV, MOD + The standard arithmetic operators. Arithmetic calculations involving + those can be performed in three different modes: (a) using + single-precision, 32-bit IEEE 754 floating point values (the default), + (b) using signed 32-bit integers, (c) using 64-bit signed integers. The + expression parser will automatically switch to integer mode if there are + no operations the result in a floating point value. Otherwise, it will + use the default floating point mode. For instance, a+b will be computed + using 32-bit integers if both arguments are 32-bit integers; or using + 64-bit integers if both arguments are integers but one of them is + 64-bit; or in floats otherwise. However, a/b or sqrt(a) will always be + computed in floats, because these operations return a result of + non-integer type. To avoid the first, you can either use IDIV(a,b) or + a DIV b form. Also, a*b will not be automatically promoted to 64-bit + when the arguments are 32-bit. To enforce 64-bit results, you can use + BIGINT(). (But note that if there are non-integer operations, BIGINT() + will simply be ignored.) + +Comparison operators: <, > <=, >=, =, <> + Comparison operators (eg. = or <=) return 1.0 when the condition is true + and 0.0 otherwise. For instance, (a=b)+3 will evaluate to 4 when + attribute 'a' is equal to attribute 'b', and to 3 when 'a' is not. + Unlike MySQL, the equality comparisons (ie. = and <> operators) + introduce a small equality threshold (1e-6 by default). If the + difference between compared values is within the threshold, they will be + considered equal. + +Boolean operators: AND, OR, NOT + Boolean operators (AND, OR, NOT) were introduced in 0.9.9-rc2 and behave + as usual. They are left-associative and have the least priority compared + to other operators. NOT has more priority than AND and OR but + nevertheless less than any other operator. AND and OR have the same + priority so brackets use is recommended to avoid confusion in complex + expressions. + +Bitwise operators: &, | + These operators perform bitwise AND and OR respectively. The operands + must be of an integer types. Introduced in version 1.10-beta. + +5.5.2. Numeric functions +------------------------ + +ABS() + Returns the absolute value of the argument. + +CEIL() + Returns the smallest integer value greater or equal to the argument. + +COS() + Returns the cosine of the argument. + +EXP() + Returns the exponent of the argument (e=2.718... to the power of the + argument). + +FLOOR() + Returns the largest integer value lesser or equal to the argument. + +IDIV() + Returns the result of an integer division of the first argument by the + second argument. Both arguments must be of an integer type. + +LN() + Returns the natural logarithm of the argument (with the base of + e=2.718...). + +LOG10() + Returns the common logarithm of the argument (with the base of 10). + +LOG2() + Returns the binary logarithm of the argument (with the base of 2). + +MAX() + Returns the bigger of two arguments. + +MIN() + Returns the smaller of two arguments. + +POW() + Returns the first argument raised to the power of the second argument. + +SIN() + Returns the sine of the argument. + +SQRT() + Returns the square root of the argument. + +5.5.3. Date and time functions +------------------------------ + +DAY() + Returns the integer day of month (in 1..31 range) from a timestamp + argument, according to the current timezone. Introduced in version + 2.0.1-beta. + +MONTH() + Returns the integer month (in 1..12 range) from a timestamp argument, + according to the current timezone. Introduced in version 2.0.1-beta. + +NOW() + Returns the current timestamp as an INTEGER. Introduced in version + 0.9.9-rc1. + +YEAR() + Returns the integer year (in 1969..2038 range) from a timestamp + argument, according to the current timezone. Introduced in version + 2.0.1-beta. + +YEARMONTH() + Returns the integer year and month code (in 196912..203801 range) from + a timestamp argument, according to the current timezone. Introduced in + version 2.0.1-beta. + +YEARMONTHDAY() + Returns the integer year, month, and date code (in 19691231..20380119 + range) from a timestamp argument, according to the current timezone. + Introduced in version 2.0.1-beta. + +5.5.4. Type conversion functions +-------------------------------- + +BIGINT() + Forcibly promotes the integer argument to 64-bit type, and does nothing + on floating point argument. It's intended to help enforce evaluation of + certain expressions (such as a*b) in 64-bit mode even though all the + arguments are 32-bit. Introduced in version 0.9.9-rc1. + +SINT() + Forcibly reinterprets its 32-bit unsigned integer argument as signed, + and also expands it to 64-bit type (because 32-bit type is unsigned). + It's easily illustrated by the following example: 1-2 normally evaluates + to 4294967295, but SINT(1-2) evaluates to -1. Introduced in version + 1.10-beta. + +5.5.5. Comparison functions +--------------------------- + +IF() + IF() behavior is slightly different that that of its MySQL counterpart. + It takes 3 arguments, check whether the 1st argument is equal to 0.0, + returns the 2nd argument if it is not zero, or the 3rd one when it is. + Note that unlike comparison operators, IF() does not use a threshold! + Therefore, it's safe to use comparison results as its 1st argument, but + arithmetic operators might produce unexpected results. For instance, the + following two calls will produce different results even though they are + logically equivalent: + + | IF ( sqrt(3)*sqrt(3)-3<>0, a, b ) + | IF ( sqrt(3)*sqrt(3)-3, a, b ) + + In the first case, the comparison operator <> will return 0.0 (false) + because of a threshold, and IF() will always return 'b' as a result. In + the second one, the same sqrt(3)*sqrt(3)-3 expression will be compared + with zero without threshold by the IF() function itself. But its value + will be slightly different from zero because of limited floating point + calculations precision. Because of that, the comparison with 0.0 done by + IF() will not pass, and the second variant will return 'a' as a result. + +IN() + IN(expr,val1,val2,...), introduced in version 0.9.9-rc1, takes 2 or more + arguments, and returns 1 if 1st argument (expr) is equal to any of the + other arguments (val1..valN), or 0 otherwise. Currently, all the checked + values (but not the expression itself!) are required to be constant. + (Its technically possible to implement arbitrary expressions too, and + that might be implemented in the future.) Constants are pre-sorted and + then binary search is used, so IN() even against a big arbitrary list of + constants will be very quick. Starting with 0.9.9-rc2, first argument + can also be a MVA attribute. In that case, IN() will return 1 if any of + the MVA values is equal to any of the other arguments. Starting with + 2.0.1-beta, IN() also supports IN(expr,@uservar) syntax to check whether + the value belongs to the list in the given global user variable. + +INTERVAL() + INTERVAL(expr,point1,point2,point3,...), introduced in version + 0.9.9-rc1, takes 2 or more arguments, and returns the index of the + argument that is less than the first argument: it returns 0 if + exprSetSortMode ( SPH_SORT_EXPR, + | "@weight + ( user_karma + ln(pageviews) )*0.1" ); + +The operators and functions supported in the expressions are discussed in +a separate section, Section 5.5, <>. + +5.7. Grouping (clustering) search results +========================================= + +Sometimes it could be useful to group (or in other terms, cluster) search +results and/or count per-group match counts - for instance, to draw a nice +graph of how much maching blog posts were there per each month; or to group +Web search results by site; or to group matching forum posts by author; +etc. + +In theory, this could be performed by doing only the full-text search in +Sphinx and then using found IDs to group on SQL server side. However, in +practice doing this with a big result set (10K-10M matches) would typically +kill performance. + +To avoid that, Sphinx offers so-called grouping mode. It is enabled with +SetGroupBy() API call. When grouping, all matches are assigned to different +groups based on group-by value. This value is computed from specified +attribute using one of the following built-in functions: + + * SPH_GROUPBY_DAY, extracts year, month and day in YYYYMMDD format from + timestamp; + + * SPH_GROUPBY_WEEK, extracts year and first day of the week number + (counting from year start) in YYYYNNN format from timestamp; + + * SPH_GROUPBY_MONTH, extracts month in YYYYMM format from timestamp; + + * SPH_GROUPBY_YEAR, extracts year in YYYY format from timestamp; + + * SPH_GROUPBY_ATTR, uses attribute value itself for grouping. + +The final search result set then contains one best match per group. +Grouping function value and per-group match count are returned along as +"virtual" attributes named @group and @count respectively. + +The result set is sorted by group-by sorting clause, with the syntax +similar to SPH_SORT_EXTENDED sorting clause syntax. In addition to @id and +@weight, group-by sorting clause may also include: + + * @group (groupby function value), + + * @count (amount of matches in group). + +The default mode is to sort by groupby value in descending order, ie. by +"@group desc". + +On completion, total_found result parameter would contain total amount of +matching groups over he whole index. + +WARNING: grouping is done in fixed memory and thus its results are only +approximate; so there might be more groups reported in total_found than +actually present. @count might also be underestimated. To reduce +inaccuracy, one should raise max_matches. If max_matches allows to store +all found groups, results will be 100% correct. + +For example, if sorting by relevance and grouping by "published" attribute +with SPH_GROUPBY_DAY function, then the result set will contain + + * one most relevant match per each day when there were any matches + published, + + * with day number and per-day match count attached, + + * sorted by day number in descending order (ie. recent days first). + +Starting with version 0.9.9-rc2, aggregate functions (AVG(), MIN(), MAX(), +SUM()) are supported through SetSelect() API call when using GROUP BY. + +5.8. Distributed searching +========================== + +To scale well, Sphinx has distributed searching capabilities. Distributed +searching is useful to improve query latency (ie. search time) and +throughput (ie. max queries/sec) in multi-server, multi-CPU or multi-core +environments. This is essential for applications which need to search +through huge amounts data (ie. billions of records and terabytes of text). + +The key idea is to horizontally partition (HP) searched data accross search +nodes and then process it in parallel. + +Partitioning is done manually. You should + + * setup several instances of Sphinx programs (indexer and searchd) on + different servers; + + * make the instances index (and search) different parts of data; + + * configure a special distributed index on some of the searchd + instances; + + * and query this index. + +This index only contains references to other local and remote indexes - so +it could not be directly reindexed, and you should reindex those indexes +which it references instead. + +When searchd receives a query against distributed index, it does the +following: + + 1. connects to configured remote agents; + + 2. issues the query; + + 3. sequentially searches configured local indexes (while the remote + agents are searching); + + 4. retrieves remote agents' search results; + + 5. merges all the results together, removing the duplicates; + + 6. sends the merged resuls to client. + +From the application's point of view, there are no differences between +searching through a regular index, or a distributed index at all. That is, +distributed indexes are fully transparent to the application, and actually +there's no way to tell whether the index you queried was distributed or +local. (Even though as of 0.9.9 Sphinx does not allow to combine searching +through distributed indexes with anything else, this constraint will be +lifted in the future.) + +Any searchd instance could serve both as a master (which aggregates the +results) and a slave (which only does local searching) at the same time. +This has a number of uses: + + 1. every machine in a cluster could serve as a master which searches the + whole cluster, and search requests could be balanced between masters + to achieve a kind of HA (high availability) in case any of the nodes + fails; + + 2. if running within a single multi-CPU or multi-core machine, there + would be only 1 searchd instance quering itself as an agent and thus + utilizing all CPUs/core. + +It is scheduled to implement better HA support which would allow to specify +which agents mirror each other, do health checks, keep track of alive +agents, load-balance requests, etc. + +5.9. searchd query log formats +============================== + +In version 2.0.1-beta and above two query log formats are supported. +Previous versions only supported a custom plain text format. That format is +still the default one. However, while it might be more convenient for +manual monitoring and review, but hard to replay for benchmarks, it only +logs search queries but not the other types of requests, does not always +contain the complete search query data, etc. The default text format is +also harder (and sometimes impossible) to replay for benchmarking purposes. +The new sphinxql format alleviates that. It aims to be complete and +automatable, even though at the cost of brevity and readability. + +5.9.1. Plain log format +----------------------- + +By default, searchd logs all succesfully executed search queries into +a query log file. Here's an example: + + | [Fri Jun 29 21:17:58 2007] 0.004 sec [all/0/rel 35254 (0,20)] [lj] test + | [Fri Jun 29 21:20:34 2007] 0.024 sec [all/0/rel 19886 (0,20) @channel_id] [lj] test + +This log format is as follows: + + | [query-date] query-time [match-mode/filters-count/sort-mode + | total-matches (offset,limit) @groupby-attr] [index-name] query + +Match mode can take one of the following values: + + * "all" for SPH_MATCH_ALL mode; + + * "any" for SPH_MATCH_ANY mode; + + * "phr" for SPH_MATCH_PHRASE mode; + + * "bool" for SPH_MATCH_BOOLEAN mode; + + * "ext" for SPH_MATCH_EXTENDED mode; + + * "ext2" for SPH_MATCH_EXTENDED2 mode; + + * "scan" if the full scan mode was used, either by being specified with + SPH_MATCH_FULLSCAN, or if the query was empty (as documented under + Matching Modes) + +Sort mode can take one of the following values: + + * "rel" for SPH_SORT_RELEVANCE mode; + + * "attr-" for SPH_SORT_ATTR_DESC mode; + + * "attr+" for SPH_SORT_ATTR_ASC mode; + + * "tsegs" for SPH_SORT_TIME_SEGMENTS mode; + + * "ext" for SPH_SORT_EXTENDED mode. + +Additionally, if searchd was started with --iostats, there will be a block +of data after where the index(es) searched are listed. + +A query log entry might take the form of: + + | [Fri Jun 29 21:17:58 2007] 0.004 sec [all/0/rel 35254 (0,20)] [lj] + | [ios=6 kb=111.1 ms=0.5] test + +This additional block is information regarding I/O operations in performing +the search: the number of file I/O operations carried out, the amount of +data in kilobytes read from the index files and time spent on I/O +operations (although there is a background processing component, the bulk +of this time is the I/O operation time). + +5.9.2. SphinxQL log format +-------------------------- + +This is a new log format introduced in 2.0.1-beta, with the goals begin +logging everything and then some, and in a format easy to automate (for +insance, automatically replay). New format can either be enabled via the +query_log_format directive in the configuration file, or switched back and +forth on the fly with the SET GLOBAL query_log_format=... statement via +SphinxQL. In the new format, the example from the previous section would +look as follows. (Wrapped below for readability, but with just one query +per line in the actual log.) + + | /* Fri Jun 29 21:17:58.609 2007 2011 conn 2 wall 0.004 found 35254 */ + | SELECT * FROM lj WHERE MATCH('test') OPTION ranker=proximity; + | + | /* Fri Jun 29 21:20:34 2007.555 conn 3 wall 0.024 found 19886 */ + | SELECT * FROM lj WHERE MATCH('test') GROUP BY channel_id + | OPTION ranker=proximity; + +Note that all requests would be logged in this format, including those sent +via SphinxAPI and SphinxSE, not just those sent via SphinxQL. Also note, +that this kind of logging works only with plain log files and will not work +if you use 'syslog' for logging. + +The features of SphinxQL log format compared to the default text one are as +follows. + + * All request types should be logged. (This is still work in progress.) + + * Full statement data will be logged where possible. + + * Errors and warnings are logged. + + * The log should be automatically replayable via SphinxQL. + + * Additional performance counters (currently, per-agent distributed + query times) are logged. + +Every request (including both SphinxAPI and SphinxQL) request must result +in exactly one log line. All request types, including INSERT, CALL +SNIPPETS, etc will eventually get logged, though as of time of this +writing, that is a work in progress). Every log line must be a valid +SphinxQL statement that reconstructs the full request, except if the logged +request is too big and needs shortening for performance reasons. Additional +messages, counters, etc can be logged in the comments section after the +request. + +5.10. MySQL protocol support and SphinxQL +========================================= + +Starting with version 0.9.9-rc2, Sphinx searchd daemon supports MySQL +binary network protocol and can be accessed with regular MySQL API. For +instance, 'mysql' CLI client program works well. Here's an example of +querying Sphinx using MySQL client: + + | $ mysql -P 9306 + | Welcome to the MySQL monitor. Commands end with ; or \g. + | Your MySQL connection id is 1 + | Server version: 0.9.9-dev (r1734) + | + | Type 'help;' or '\h' for help. Type '\c' to clear the buffer. + | + | mysql> SELECT * FROM test1 WHERE MATCH('test') + | -> ORDER BY group_id ASC OPTION ranker=bm25; + | +------+--------+----------+------------+ + | | id | weight | group_id | date_added | + | +------+--------+----------+------------+ + | | 4 | 1442 | 2 | 1231721236 | + | | 2 | 2421 | 123 | 1231721236 | + | | 1 | 2421 | 456 | 1231721236 | + | +------+--------+----------+------------+ + | 3 rows in set (0.00 sec) + +Note that mysqld was not even running on the test machine. Everything was +handled by searchd itself. + +The new access method is supported in addition to native APIs which all +still work perfectly well. In fact, both access methods can be used at the +same time. Also, native API is still the default access method. MySQL +protocol support needs to be additionally configured. This is a matter of +1-line config change, adding a new listener with mysql41 specified as +a protocol: + + | listen = localhost:9306:mysql41 + +Just supporting the protocol and not the SQL syntax would be useless so +Sphinx now also supports a subset of SQL that we dubbed SphinxQL. It +supports the standard querying all the index types with SELECT, modifying +RT indexes with INSERT, REPLACE, and DELETE, and much more. Full SphinxQL +reference is available in Chapter 7, SphinxQL reference. + +5.11. Multi-queries +=================== + +Multi-queries, or query batches, let you send multiple queries to Sphinx in +one go (more formally, one network request). + +Two API methods that implement multi-query mechanism are AddQuery() and +RunQueries(). You can also run multiple queries with SphinxQL, see +Section 7.18, <>. (In fact, regular Query() call +is internally implemented as a single AddQuery() call immediately followed +by RunQueries() call.) AddQuery() captures the current state of all the +query settings set by previous API calls, and memorizes the query. +RunQueries() actually sends all the memorized queries, and returns multiple +result sets. There are no restrictions on the queries at all, except just +a sanity check on a number of queries in a single batch (see +Section 11.4.25, <>). + +Why use multi-queries? Generally, it all boils down to performance. First, +by sending requests to searchd in a batch instead of one by one, you always +save a bit by doing less network roundtrips. Second, and somewhat more +important, sending queries in a batch enables searchd to perform certain +internal optimizations. As new types of optimizations are being added over +time, it generally makes sense to pack all the queries into batches where +possible, so that simply upgrading Sphinx to a new version would +automatically enable new optimizations. In the case when there aren't any +possible batch optimizations to apply, queries will be processed one by one +internally. + +Why (or rather when) not use multi-queries? Multi-queries requires all the +queries in a batch to be independent, and sometimes they aren't. That is, +sometimes query B is based on query A results, and so can only be set up +after executing query A. For instance, you might want to display results +from a secondary index if and only if there were no results found in +a primary index. Or maybe just specify offset into 2nd result set based on +the amount of matches in the 1st result set. In that case, you will have to +use separate queries (or separate batches). + +As of 0.9.10, there are two major optimizations to be aware of: common +query optimization (available since 0.9.8); and common subtree optimization +(available since 0.9.10). + +Common query optimization means that searchd will identify all those +queries in a batch where only the sorting and group-by settings differ, and +only perform searching once. For instance, if a batch consists of +3 queries, all of them are for "ipod nano", but 1st query requests top-10 +results sorted by price, 2nd query groups by vendor ID and requests top-5 +vendors sorted by rating, and 3rd query requests max price, full-text +search for "ipod nano" will only be performed once, and its results will be +reused to build 3 different result sets. + +So-called faceted searching is a particularly important case that benefits +from this optimization. Indeed, faceted searching can be implemented by +running a number of queries, one to retrieve search results themselves, and +a few other ones with same full-text query but different group-by settings +to retrieve all the required groups of results (top-3 authors, top-5 +vendors, etc). And as long as full-text query and filtering settings stay +the same, common query optimization will trigger, and greatly improve +performance. + +Common subtree optimization is even more interesting. It lets searchd +exploit similarities between batched full-text queries. It identifies +common full-text query parts (subtress) in all queries, and caches them +between queries. For instance, look at the following query batch: + + | barack obama president + | barack obama john mccain + | barack obama speech + +There's a common two-word part ("barack obama") that can be computed only +once, then cached and shared across the queries. And common subtree +optimization does just that. Per-query cache size is strictly controlled by +subtree_docs_cache and subtree_hits_cache directives (so that caching all +sxiteen gazillions of documents that match "i am" does not exhaust the RAM +and instantly kill your server). + +Here's a code sample (in PHP) that fire the same query in 3 different +sorting modes: + + | require ( "sphinxapi.php" ); + | $cl = new SphinxClient (); + | $cl->SetMatchMode ( SPH_MATCH_EXTENDED2 ); + | + | $cl->SetSortMode ( SPH_SORT_RELEVANCE ); + | $cl->AddQuery ( "the", "lj" ); + | $cl->SetSortMode ( SPH_SORT_EXTENDED, "published desc" ); + | $cl->AddQuery ( "the", "lj" ); + | $cl->SetSortMode ( SPH_SORT_EXTENDED, "published asc" ); + | $cl->AddQuery ( "the", "lj" ); + | $res = $cl->RunQueries(); + +How to tell whether the queries in the batch were actually optimized? If +they were, respective query log will have a "multiplier" field that +specifies how many queries were processed together: + + | [Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext2/0/rel 747541 (0,20)] [lj] the + | [Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext2/0/ext 747541 (0,20)] [lj] the + | [Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext2/0/ext 747541 (0,20)] [lj] the + +Note the "x3" field. It means that this query was optimized and processed +in a sub-batch of 3 queries. For reference, this is how the regular log +would look like if the queries were not batched: + + | [Sun Jul 12 15:18:17.062 2009] 0.059 sec [ext2/0/rel 747541 (0,20)] [lj] the + | [Sun Jul 12 15:18:17.156 2009] 0.091 sec [ext2/0/ext 747541 (0,20)] [lj] the + | [Sun Jul 12 15:18:17.250 2009] 0.092 sec [ext2/0/ext 747541 (0,20)] [lj] the + +Note how per-query time in multi-query case was improved by a factor of +1.5x to 2.3x, depending on a particular sorting mode. In fact, for both +common query and common subtree optimizations, there were reports of 3x and +even more improvements, and that's from production instances, not just +synthetic tests. + +5.12. Collations +================ + +Introduced to Sphinx in version 2.0.1-beta to supplement string sorting, +collations essentially affect the string attribute comparisons. They +specify both the character set encoding and the strategy that Sphinx uses +to compare strings when doing ORDER BY or GROUP BY with a string attribute +involved. + +String attributes are stored as is when indexing, and no character set or +language information is attached to them. That's okay as long as Sphinx +only needs to store and return the strings to the calling application +verbatim. But when you ask Sphinx to sort by a string value, that request +immediately becomes quite ambiguous. + +First, single-byte (ASCII, or ISO-8859-1, or Windows-1251) strings need to +be processed differently that the UTF-8 ones that may encode every +character with a variable number of bytes. So we need to know what is the +character set type to interepret the raw bytes as meaningful characters +properly. + +Second, we additionally need to know the language-specific string sorting +rules. For instance, when sorting according to US rules in en_US locale, +the accented character '' (small letter i with diaeresis) should be placed +somewhere after 'z'. However, when sorting with French rules and fr_FR +locale in mind, it should be placed between 'i' and 'j'. And some other set +of rules might choose to ignore accents at all, allowing '' and 'i' to be +mixed arbitrarily. + +Third, but not least, we might need case-sensitive sorting in some +scenarios and case-insensitive sorting in some others. + +Collations combine all of the above: the character set, the lanugage rules, +and the case sensitivity. Sphinx currently provides the following four +collations. + + 1. libc_ci + + 2. libc_cs + + 3. utf8_general_ci + + 4. binary + +The first two collations rely on several standard C library (libc) calls +and can thus support any locale that is installed on your system. They +provide case-insensitive (_ci) and case-sensitive (_cs) comparisons +respectively. By default they will use C locale, effectively resorting to +bytewise comparisons. To change that, you need to specify a different +available locale using collation_libc_locale directive. The list of locales +available on your system can usually be obtained with the locale command: + + | $ locale -a + | C + | en_AG + | en_AU.utf8 + | en_BW.utf8 + | en_CA.utf8 + | en_DK.utf8 + | en_GB.utf8 + | en_HK.utf8 + | en_IE.utf8 + | en_IN + | en_NG + | en_NZ.utf8 + | en_PH.utf8 + | en_SG.utf8 + | en_US.utf8 + | en_ZA.utf8 + | en_ZW.utf8 + | es_ES + | fr_FR + | POSIX + | ru_RU.utf8 + | ru_UA.utf8 + +The specific list of the system locales may vary. Consult your OS +documentation to install additional needed locales. + +utf8_general_ci and binary locales are built-in into Sphinx. The first one +is a generic collation for UTF-8 data (without any so-called language +tailoring); it should behave similar to utf8_general_ci collation in MySQL. +The second one is a simple bytewise comparison. + +Collation can be overriden via SphinxQL on a per-session basis using SET +collation_connection statement. All subsequent SphinxQL queries will use +this collation. SphinxAPI and SphinxSE queries will use the server default +collation, as specified in collation_server configuration directive. Sphinx +currently defaults to libc_ci collation. + +Collations should affect all string attribute comparisons, including those +within ORDER BY and GROUP BY, so differently ordered or grouped results can +be returned depending on the collation chosen. + +5.13. User-defined functions (UDF) +================================== + +Starting with 2.0.1-beta, Sphinx supports User-Defined Functions, or UDF +for short. They can be loaded and unloaded dynamically into searchd without +having to restart the daemon, and used in expressions when searching. UDF +features at a glance are as follows. + + * Functions can take integer (both 32-bit and 64-bit), float, string, or + MVA arguments. + + * Functions can return integer or float values. + + * Functions can check the argument number, types, and names and raise + errors. + + * Only simple functions (that is, non-aggregate ones) are currently + supported. + +User-defined functions need your OS to support dynamically loadable +libraries (aka shared objects). Most of the modern OSes are eligible, +including Linux, Windows, MacOS, Solaris, BSD and others. (The internal +testing has been done on Linux and Windows.) The UDF libraries must reside +in a directory specified by plugin_dir directive, and the server must be +configured to use workers = threads mode. Relative paths to the library +files are not allowed. Once the library is succesfully built and copied to +the trusted location, you can then dynamically install and deinstall the +functions using CREATE FUNCTION and DROP FUNCTION statements respectively. +A single library can contain multiple functions. A library gets loaded when +you first install a function from it, and unloaded when you deinstall all +the functions from that library. + +The library functions that will implement a UDF visible to SQL statements +need to follow C calling convention, and a simple naming convention. Sphinx +source distribution provides a sample file, src/udfexample.c, that defines +a few simple functions showing how to work with integer, string, and MVA +arguments; you can use that one as a foundation for your new functions. It +includes the UDF interface header file, src/sphinxudf.h, that defines the +required types and structures. sphinxudf.h header is standalone, that is, +does not require any other parts of Sphinx source to compile. + +Every function that you intend to use in your SELECT statements requires at +least two corresponding C/C++ functions: the initialization call, and the +function call itself. You can also optionally define the deinitialization +call if your function requires any post-query cleanup. (For instance, if +you were allocating any memory in either the initialization call or the +function calls.) Function names in SQL are case insensitive, C function +names are not. They need to be all lower-case. Mistakes in function name +prevent UDFs from loading. You also have to pay special attention to the +calling convention used when compiling, the list and the types of +arguments, and the return type of the main function call. Mistakes in +either are likely to crash the server, or result in unexpected results in +the best case. Last but not least, all functions need to be thread-safe. + +Let's assume for the sake of example that your UDF name in SphinxQL will be +MYFUNC. The initialization, main, and deinitialization functions would then +need to be named as follows and take the following arguments: + + | /// initialization function + | /// called once during query initialization + | /// returns 0 on success + | /// returns non-zero and fills error_message buffer on failure + | int myfunc_init ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, + | char * error_message ); + | + | /// main call function + | /// returns the computed value + | /// writes non-zero value into error_flag to indicate errors + | RETURN_TYPE myfunc ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, + | char * error_flag ); + | + | /// optional deinitialization function + | /// called once to cleanup once query processing is done + | void myfunc_deinit ( SPH_UDF_INIT * init ); + +The two mentioned structures, SPH_UDF_INIT and SPH_UDF_ARGS, are defined in +the src/sphinxudf.h interface header and documented there. RETURN_TYPE of +the main function must be one of the following: + + * int for the functions that return INT. + + * sphinx_int64_t for the functions that return BIGINT. + + * float for the functions that return FLOAT. + +The calling sequence is as follows. myfunc_init() is called once when +initializing the query. It can return a non-zero code to indicate +a failure; in that case query is not executed, and the error message from +the error_message buffer is returned. Otherwise, myfunc() is be called for +every row, and a myfunc_deinit() is then called when the query ends. +myfunc() can indicate an error by writing a non-zero byte value to +error_flag, in that case, it will no more be called for subsequent rows, +and a default value of 0 will be substituted. Sphinx might or might not +choose to terminate such queries early, neither behavior is currently +guaranteed. + +Chapter 6. Command line tools reference +======================================= + +Table of Contents + +6.1. indexer command reference +6.2. searchd command reference +6.3. search command reference +6.4. spelldump command reference +6.5. indextool command reference + +As mentioned elsewhere, Sphinx is not a single program called 'sphinx', but +a collection of 4 separate programs which collectively form Sphinx. This +section covers these tools and how to use them. + +6.1. indexer command reference +============================== + +indexer is the first of the two principle tools as part of Sphinx. Invoked +from either the command line directly, or as part of a larger script, +indexer is solely responsible for gathering the data that will be +searchable. + +The calling syntax for indexer is as follows: + + | indexer [OPTIONS] [indexname1 [indexname2 [...]]] + +Essentially you would list the different possible indexes (that you would +later make available to search) in sphinx.conf, so when calling indexer, as +a minimum you need to be telling it what index (or indexes) you want to +index. + +If sphinx.conf contained details on 2 indexes, mybigindex and mysmallindex, +you could do the following: + + | $ indexer mybigindex + | $ indexer mysmallindex mybigindex + +As part of the configuration file, sphinx.conf, you specify one or more +indexes for your data. You might call indexer to reindex one of them, +ad-hoc, or you can tell it to process all indexes - you are not limited to +calling just one, or all at once, you can always pick some combination of +the available indexes. + +The majority of the options for indexer are given in the configuration +file, however there are some options you might need to specify on the +command line as well, as they can affect how the indexing operation is +performed. These options are: + + * --config (-c for short) tells indexer to use the given + file as its configuration. Normally, it will look for sphinx.conf in + the installation directory (e.g. /usr/local/sphinx/etc/sphinx.conf if + installed into /usr/local/sphinx), followed by the current directory + you are in when calling indexer from the shell. This is most of use in + shared environments where the binary files are installed somewhere + like /usr/local/sphinx/ but you want to provide users with the ability + to make their own custom Sphinx set-ups, or if you want to run + multiple instances on a single server. In cases like those you could + allow them to create their own sphinx.conf files and pass them to + indexer with this option. For example: + + | $ indexer --config /home/myuser/sphinx.conf myindex + + * --all tells indexer to update every index listed in sphinx.conf, + instead of listing individual indexes. This would be useful in small + configurations, or cron-type or maintenance jobs where the entire + index set will get rebuilt each day, or week, or whatever period is + best. Example usage: + + | $ indexer --config /home/myuser/sphinx.conf --all + + * --rotate is used for rotating indexes. Unless you have the situation + where you can take the search function offline without troubling + users, you will almost certainly need to keep search running whilst + indexing new documents. --rotate creates a second index, parallel to + the first (in the same place, simply including .new in the filenames). + Once complete, indexer notifies searchd via sending the SIGHUP signal, + and searchd will attempt to rename the indexes (renaming the existing + ones to include .old and renaming the .new to replace them), and then + start serving from the newer files. Depending on the setting of + seamless_rotate, there may be a slight delay in being able to search + the newer indexes. Example usage: + + | $ indexer --rotate --all + + * --quiet tells indexer not to output anything, unless there is an + error. Again, most used for cron-type, or other script jobs where the + output is irrelevant or unnecessary, except in the event of some kind + of error. Example usage: + + | $ indexer --rotate --all --quiet + + * --noprogress does not display progress details as they occur; instead, + the final status details (such as documents indexed, speed of indexing + and so on are only reported at completion of indexing. In instances + where the script is not being run on a console (or 'tty'), this will + be on by default. Example usage: + + | $ indexer --rotate --all --noprogress + + * --buildstops reviews the index source, as if it + were indexing the data, and produces a list of the terms that are + being indexed. In other words, it produces a list of all the + searchable terms that are becoming part of the index. Note; it does + not update the index in question, it simply processes the data 'as if' + it were indexing, including running queries defined with sql_query_pre + or sql_query_post. outputfile.txt will contain the list of words, one + per line, sorted by frequency with most frequent first, and + N specifies the maximum number of words that will be listed; if + sufficiently large to encompass every word in the index, only that + many words will be returned. Such a dictionary list could be used for + client application features around "Did you mean..." functionality, + usually in conjunction with --buildfreqs, below. Example: + + | $ indexer myindex --buildstops word_freq.txt 1000 + + This would produce a document in the current directory, word_freq.txt + with the 1,000 most common words in 'myindex', ordered by most common + first. Note that the file will pertain to the last index indexed when + specified with multiple indexes or --all (i.e. the last one listed in + the configuration file) + + * --buildfreqs works with --buildstops (and is ignored if --buildstops + is not specified). As --buildstops provides the list of words used + within the index, --buildfreqs adds the quantity present in the index, + which would be useful in establishing whether certain words should be + considered stopwords if they are too prevalent. It will also help with + developing "Did you mean..." features where you can how much more + common a given word compared to another, similar one. Example: + + | $ indexer myindex --buildstops word_freq.txt 1000 --buildfreqs + + This would produce the word_freq.txt as above, however after each word + would be the number of times it occurred in the index in question. + + * --merge is used for physically merging indexes + together, for example if you have a main+delta scheme, where the main + index rarely changes, but the delta index is rebuilt frequently, and + --merge would be used to combine the two. The operation moves from + right to left - the contents of src-index get examined and physically + combined with the contents of dst-index and the result is left in + dst-index. In pseudo-code, it might be expressed as: dst-index += + src-index An example: + + | $ indexer --merge main delta --rotate + + In the above example, where the main is the master, rarely modified + index, and delta is the less frequently modified one, you might use + the above to call indexer to combine the contents of the delta into + the main index and rotate the indexes. + + * --merge-dst-range runs the filter range given upon + merging. Specifically, as the merge is applied to the destination + index (as part of --merge, and is ignored if --merge is not + specified), indexer will also filter the documents ending up in the + destination index, and only documents will pass through the filter + given will end up in the final index. This could be used for example, + in an index where there is a 'deleted' attribute, where 0 means 'not + deleted'. Such an index could be merged with: + + | $ indexer --merge main delta --merge-dst-range deleted 0 0 + + Any documents marked as deleted (value 1) would be removed from the + newly-merged destination index. It can be added several times to the + command line, to add successive filters to the merge, all of which + must be met in order for a document to become part of the final index. + + * --dump-rows dumps rows fetched by SQL source(s) into the + specified file, in a MySQL compatible syntax. Resulting dumps are the + exact representation of data as received by indexer and help to repeat + indexing-time issues. + + * --verbose guarantees that every row that caused problems indexing + (duplicate, zero, or missing document ID; or file field IO issues; + etc) will be reported. By default, this option is off, and problem + summaries may be reported instead. + + * --sighup-each is useful when you are rebuilding many big indexes, and + want each one rotated into searchd as soon as possible. With + --sighup-each, indexer will send a SIGHUP signal to searchd after + succesfully completing the work on each index. (The default behavior + is to send a single SIGHUP after all the indexes were built.) + + * --print-queries prints out SQL queries that indexer sends to the + database, along with SQL connection and disconnection events. That is + useful to diagnose and fix problems with SQL sources. + +6.2. searchd command reference +============================== + +searchd is the second of the two principle tools as part of Sphinx. searchd +is the part of the system which actually handles searches; it functions as +a server and is responsible for receiving queries, processing them and +returning a dataset back to the different APIs for client applications. + +Unlike indexer, searchd is not designed to be run either from a regular +script or command-line calling, but instead either as a daemon to be called +from init.d (on Unix/Linux type systems) or to be called as a service (on +Windows-type systems), so not all of the command line options will always +apply, and so will be build-dependent. + +Calling searchd is simply a case of: + + | $ searchd [OPTIONS] + +The options available to searchd on all builds are: + + * --help (-h for short) lists all of the parameters that can be called + in your particular build of searchd. + + * --config (-c for short) tells searchd to use the given + file as its configuration, just as with indexer above. + + * --stop is used to asynchronously stop searchd, using the details of + the PID file as specified in the sphinx.conf file, so you may also + need to confirm to searchd which configuration file to use with the + --config option. NB, calling --stop will also make sure any changes + applied to the indexes with UpdateAttributes() will be applied to the + index files themselves. Example: + + | $ searchd --config /home/myuser/sphinx.conf --stop + + * --stopwait is used to synchronously stop searchd. --stop essentially + tells the running instance to exit (by sending it a SIGTERM) and then + immediately returns. --stopwait will also attempt to wait until the + running searchd instance actually finishes the shutdown (eg. saves all + the pending attribute changes) and exits. Example: + + | $ searchd --config /home/myuser/sphinx.conf --stopwait + + Possible exit codes are as follows: + + * 0 on success; + + * 1 if connection to running searchd daemon failed; + + * 2 if daemon reported an error during shutdown; + + * 3 if daemon crashed during shutdown. + + * --status command is used to query running searchd instance status, + using the connection details from the (optionally) provided + configuration file. It will try to connect to the running instance + using the first configured UNIX socket or TCP port. On success, it + will query for a number of status and performance counter values and + print them. You can use Status() API call to access the very same + counters from your application. Examples: + + | $ searchd --status + | $ searchd --config /home/myuser/sphinx.conf --status + + * --pidfile is used to explicitly state a PID file, where the process + information is stored regarding searchd, used for inter-process + communications (for example, indexer will need to know the PID to + contact searchd for rotating indexes). Normally, searchd would use + a PID if running in regular mode (i.e. not with --console), but it is + possible that you will be running it in console mode whilst the index + is being updated and rotated, for which a PID file will be needed. + + | $ searchd --config /home/myuser/sphinx.conf --pidfile /home/myuser/sphinx.pid + + * --console is used to force searchd into console mode; typically it + will be running as a conventional server application, and will aim to + dump information into the log files (as specified in sphinx.conf). + Sometimes though, when debugging issues in the configuration or the + daemon itself, or trying to diagnose hard-to-track-down problems, it + may be easier to force it to dump information directly to the + console/command line from which it is being called. Running in console + mode also means that the process will not be forked (so searches are + done in sequence) and logs will not be written to. (It should be noted + that console mode is not the intended method for running searchd.) You + can invoke it as such: + + | $ searchd --config /home/myuser/sphinx.conf --console + + * --logdebug enables additional debug output in the daemon log. Should + only be needed rarely, to assist with debugging issues that could not + be easily reproduced on request. + + * --iostats is used in conjuction with the logging options (the + query_log will need to have been activated in sphinx.conf) to provide + more detailed information on a per-query basis as to the input/output + operations carried out in the course of that query, with a slight + performance hit and of course bigger logs. Further details are + available under the query log format section. You might start searchd + thus: + + | $ searchd --config /home/myuser/sphinx.conf --iostats + + * --cpustats is used to provide actual CPU time report (in addition to + wall time) in both query log file (for every given query) and status + report (aggregated). It depends on clock_gettime() system call and + might therefore be unavailable on certain systems. You might start + searchd thus: + + | $ searchd --config /home/myuser/sphinx.conf --cpustats + + * --port portnumber (-p for short) is used to specify the port that + searchd should listen on, usually for debugging purposes. This will + usually default to 9312, but sometimes you need to run it on + a different port. Specifying it on the command line will override + anything specified in the configuration file. The valid range is 0 to + 65535, but ports numbered 1024 and below usually require a privileged + account in order to run. An example of usage: + + | $ searchd --port 9313 + + * --listen ( address ":" port | port | path ) [ ":" protocol ] (or -l + for short) Works as --port, but allow you to specify not only the + port, but full path, as IP address and port, or Unix-domain socket + path, that searchd will listen on. Otherwords, you can specify either + an IP address (or hostname) and port number, or just a port number, or + Unix socket path. If you specify port number but not the address, + searchd will listen on all network interfaces. Unix path is identified + by a leading slash. As the last param you can also specify a protocol + handler (listener) to be used for connections on this socket. + Supported protocol values are 'sphinx' (Sphinx 0.9.x API protocol) and + 'mysql41' (MySQL protocol used since 4.1 upto at least 5.1). + + * --index (or -i for short) forces this instance of + searchd only to serve the specified index. Like --port, above, this is + usually for debugging purposes; more long-term changes would generally + be applied to the configuration file itself. Example usage: + + | $ searchd --index myindex + + * --strip-path strips the path names from all the file names referenced + from the index (stopwords, wordforms, exceptions, etc). This is useful + for picking up indexes built on another machine with possibly + different path layouts. + +There are some options for searchd that are specific to Windows platforms, +concerning handling as a service, are only be available on Windows +binaries. + +Note that on Windows searchd will default to --console mode, unless you +install it as a service. + + * --install installs searchd as a service into the Microsoft Management + Console (Control Panel / Administrative Tools / Services). Any other + parameters specified on the command line, where --install is specified + will also become part of the command line on future starts of the + service. For example, as part of calling searchd, you will likely also + need to specify the configuration file with --config, and you would do + that as well as specifying --install. Once called, the usual + start/stop facilities will become available via the management + console, so any methods you could use for starting, stopping and + restarting services would also apply to searchd. Example: + + | C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install + | --config C:\Sphinx\sphinx.conf + + If you wanted to have the I/O stats every time you started searchd, + you would specify its option on the same line as the --install command + thus: + + | C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install + | --config C:\Sphinx\sphinx.conf --iostats + + * --delete removes the service from the Microsoft Management Console and + other places where services are registered, after previously installed + with --install. Note, this does not uninstall the software or delete + the indexes. It means the service will not be called from the services + systems, and will not be started on the machine's next start. If + currently running as a service, the current instance will not be + terminated (until the next reboot, or searchd is called with --stop). + If the service was installed with a custom name (with --servicename), + the same name will need to be specified with --servicename when + calling to uninstall. Example: + + | C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --delete + + * --servicename applies the given name to searchd when installing + or deleting the service, as would appear in the Management Console; + this will default to searchd, but if being deployed on servers where + multiple administrators may log into the system, or a system with + multiple searchd instances, a more descriptive name may be applicable. + Note that unless combined with --install or --delete, this option does + not do anything. Example: + + | C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install + | --config C:\Sphinx\sphinx.conf --servicename SphinxSearch + + * --ntservice is the option that is passed by the Management Console to + searchd to invoke it as a service on Windows platforms. It would not + normally be necessary to call this directly; this would normally be + called by Windows when the service would be started, although if you + wanted to call this as a regular service from the command-line (as the + complement to --console) you could do so in theory. + +Last but not least, as every other daemon, searchd supports a number of +signals. + +SIGTERM + Initiates a clean shutdown. New queries will not be handled; but queries + that are already started will not be forcibly interrupted. + +SIGHUP + Initiates index rotation. Depending on the value of seamless_rotate + setting, new queries might be shortly stalled; clients will receive + temporary errors. + +SIGUSR1 + Forces reopen of searchd log and query log files, letting you implement + log file rotation. + +6.3. search command reference +============================= + +search is one of the helper tools within the Sphinx package. Whereas +searchd is responsible for searches in a server-type environment, search is +aimed at testing the index from the command line, and testing the index +quickly without building a framework to make the connection to the server +and process its response. + +Note: search is not intended to be deployed as part of a client +application; it is strongly recommended you do not write an interface to +search instead of searchd, and none of the bundled client APIs support this +method. (In any event, search will reload files each time, whereas searchd +will cache them in memory for performance.) + +That said, many types of query that you could build in the APIs could also +be made with search, however for very complex searches it may be easier to +construct them using a small script and the corresponding API. +Additionally, some newer features may be available in the searchd system +that have not yet been brought into search. + +The calling syntax for search is as follows: + + | search [OPTIONS] word1 [word2 [word3 [...]]] + +When calling search, it is not necessary to have searchd running; simply +make sure that the account running the search program has read access to +the configuration file and the index files. + +The default behaviour is to apply a search for word1 (AND word2 AND +word3... as specified) to all fields in all indexes as given in the +configuration file. If constructing the equivalent in the API, this would +be the equivalent to passing SPH_MATCH_ALL to SetMatchMode, and specifying +* as the indexes to query as part of Query. + +There are many options available to search. Firstly, the general options: + + * --config (-c for short) tells search to use the given + file as its configuration, just as with indexer above. + + * --index (-i for short) tells search to limit searching + to the specified index only; normally it would attempt to search all + of the physical indexes listed in sphinx.conf, not any distributed + ones. + + * --stdin tells search to accept the query from the standard input, + rather than the command line. This can be useful for testing purposes + whereby you could feed input via pipes and from scripts. + +Options for setting matches: + + * --any (-a for short) changes the matching mode to match any of the + words as part of the query (word1 OR word2 OR word3). In the API this + would be equivalent to passing SPH_MATCH_ANY to SetMatchMode. + + * --phrase (-p for short) changes the matching mode to match all of the + words as part of the query, and do so in the phrase given (not + including punctuation). In the API this would be equivalent to passing + SPH_MATCH_PHRASE to SetMatchMode. + + * --boolean (-b for short) changes the matching mode to Boolean + matching. Note if using Boolean syntax matching on the command line, + you may need to escape the symbols (with a backslash) to avoid the + shell/command line processor applying them, such as ampersands being + escaped on a Unix/Linux system to avoid it forking to the search + process, although this can be resolved by using --stdin, as below. In + the API this would be equivalent to passing SPH_MATCH_BOOLEAN to + SetMatchMode. + + * --ext (-e for short) changes the matching mode to Extended matching. + In the API this would be equivalent to passing SPH_MATCH_EXTENDED to + SetMatchMode, and it should be noted that use of this mode is being + discouraged in favour of Extended2, below. + + * --ext2 (-e2 for short) changes the matching mode to Extended matching, + version 2. In the API this would be equivalent to passing + SPH_MATCH_EXTENDED2 to SetMatchMode, and it should be noted that use + of this mode is being recommended in favour of Extended, due to being + more efficient and providing other features. + + * --filter (-f for short) filters the results such + that only documents where the attribute given (attr) matches the value + given (v). For example, --filter deleted 0 only matches documents with + an attribute called 'deleted' where its value is 0. You can also add + multiple filters on the command line, by specifying multiple --filter + multiple times, however if you apply a second filter to an attribute + it will override the first defined filter. + +Options for handling the results: + + * --limit (-l count for short) limits the total number of + matches back to the number given. If a 'group' is specified, this will + be the number of grouped results. This defaults to 20 results if not + specified (as do the APIs) + + * --offset (-o for short) offsets the result list by the + number of places set by the count; this would be used for pagination + through results, where if you have 20 results per 'page', the second + page would begin at offset 20, the third page at offset 40, etc. + + * --group (-g for short) specifies that results should be + grouped together based on the attribute specified. Like the GROUP BY + clause in SQL, it will combine all results where the attribute given + matches, and returns a set of results where each returned result is + the best from each group. Unless otherwise specified, this will be the + best match on relevance. + + * --groupsort (-gs for short) instructs that when results + are grouped with --group, the expression given in shall + determine the order of the groups. Note, this does not specify which + is the best item within the group, only the order in which the groups + themselves shall be returned. + + * --sortby (-s for short) specifies that results + should be sorted in the order listed in . This allows you to + specify the order you wish results to be presented in, ordering by + different columns. For example, you could say --sortby "@weight DESC + entrytime DESC" to sort entries first by weight (or relevance) and + where two or more entries have the same weight, to then sort by the + time with the highest time (newest) first. You will usually need to + put the items in quotes (--sortby "@weight DESC") or use commas + (--sortby @weight,DESC) to avoid the items being treated separately. + Additionally, like the regular sorting modes, if --group (grouping) is + being used, this will state how to establish the best match within + each group. + + * --sortexpr expr (-S expr for short) specifies that the search results + should be presented in an order determined by an arithmetic + expression, stated in expr. For example: --sortexpr "@weight + ( + user_karma + ln(pageviews) )*0.1" (again noting that this will have to + be quoted to avoid the shell dealing with the asterisk). Extended sort + mode is discussed in more detail under the SPH_SORT_EXTENDED entry + under the Sorting modes section of the manual. + + * --sort=date specifies that the results should be sorted by descending + (i.e. most recent first) date. This requires that there is an + attribute in the index that is set as a timestamp. + + * --rsort=date specifies that the results should be sorted by ascending + (i.e. oldest first) date. This requires that there is an attribute in + the index that is set as a timestamp. + + * --sort=ts specifies that the results should be sorted by timestamp in + groups; it will return all of the documents whose timestamp is within + the last hour, then sorted within that bracket for relevance. After, + it would return the documents from the last day, sorted by relevance, + then the last week and then the last month. It is discussed in more + detail under the SPH_SORT_TIME_SEGMENTS entry under the Sorting modes + section of the manual. + +Other options: + + * --noinfo (-q for short) instructs search not to look-up data in your + SQL database. Specifically, for debugging with MySQL and search, you + can provide it with a query to look up the full article based on the + returned document ID. It is explained in more detail under the + sql_query_info directive. + +6.4. spelldump command reference +================================ + +spelldump is one of the helper tools within the Sphinx package. + +It is used to extract the contents of a dictionary file that uses ispell or +MySpell format, which can help build word lists for wordforms - all of the +possible forms are pre-built for you. + +Its general usage is: + + | spelldump [options] [result] [locale-name] + +The two main parameters are the dictionary's main file and its affix file; +usually these are named as [language-prefix].dict and [language-prefix].aff +and will be available with most common Linux distributions, as well as +various places online. + +[result] specifies where the dictionary data should be output to, and +[locale-name] additionally specifies the locale details you wish to use. + +There is an additional option, -c [file], which specifies a file for case +conversion details. + +Examples of its usage are: + + | spelldump en.dict en.aff + | spelldump ru.dict ru.aff ru.txt ru_RU.CP1251 + | spelldump ru.dict ru.aff ru.txt .1251 + +The results file will contain a list of all the words in the dictionary in +alphabetical order, output in the format of a wordforms file, which you can +use to customise for your specific circumstances. An example of the result +file: + + | zone > zone + | zoned > zoned + | zoning > zoning + +6.5. indextool command reference +================================ + +indextool is one of the helper tools within the Sphinx package, introduced +in version 0.9.9-rc2. It is used to dump miscellaneous debug information +about the physical index. (Additional functionality such as index +verification is planned in the future, hence the indextool name rather than +just indexdump.) Its general usage is: + + | indextool [options] + +The only currently available option applies to all commands and lets you +specify the configuration file: + + * --config (-c for short) overrides the built-in config + file names. + +The commands are as follows: + + * --dumpheader FILENAME.sph quickly dumps the provided index header file + without touching any other index files or even the configuration file. + The report provides a breakdown of all the index settings, in + particular the entire attribute and field list. Prior to 0.9.9-rc2, + this command was present in CLI search utility. + + * --dumpconfig FILENAME.sph dumps the index definition from the given + index header file in (almost) compliant sphinx.conf file format. Added + in version 2.0.1-beta. + + * --dumpheader INDEXNAME dumps index header by index name with looking + up the header path in the configuration file. + + * --dumpdocids INDEXNAME dumps document IDs by index name. It takes the + data from attribute (.spa) file and therefore requires docinfo=extern + to work. + + * --dumphitlist INDEXNAME KEYWORD dumps all the hits (occurences) of + a given keyword in a given index, with keyword specified as text. + + * --dumphitlist INDEXNAME --wordid ID dumps all the hits (occurences) of + a given keyword in a given index, with keyword specified as internal + numeric ID. + + * --htmlstrip INDEXNAME filters stdin using HTML stripper settings for + a given index, and prints the filtering results to stdout. Note that + the settings will be taken from sphinx.conf, and not the index header. + + * --check INDEXNAME checks the index data files for consistency errors + that might be introduced either by bugs in indexer and/or hardware + faults. + + * --strip-path strips the path names from all the file names referenced + from the index (stopwords, wordforms, exceptions, etc). This is useful + for checking indexes built on another machine with possibly different + path layouts. + +Chapter 7. SphinxQL reference +============================= + +Table of Contents + +7.1. SELECT syntax +7.2. SHOW META syntax +7.3. SHOW WARNINGS syntax +7.4. SHOW STATUS syntax +7.5. INSERT and REPLACE syntax +7.6. DELETE syntax +7.7. SET syntax +7.8. BEGIN, COMMIT, and ROLLBACK syntax +7.9. CALL SNIPPETS syntax +7.10. CALL KEYWORDS syntax +7.11. SHOW TABLES syntax +7.12. DESCRIBE syntax +7.13. CREATE FUNCTION syntax +7.14. DROP FUNCTION syntax +7.15. SHOW VARIABLES syntax +7.16. SHOW COLLATION syntax +7.17. UPDATE syntax +7.18. Multi-statement queries +7.19. Comment syntax +7.20. List of SphinxQL reserved keywords +7.21. SphinxQL upgrade notes, version 2.0.1-beta + +SphinxQL is our SQL dialect that exposes all of the search daemon +functionality using a standard SQL syntax with a few Sphinx-specific +extensions. Everything available via the SphinxAPI is also available +SphinxQL but not vice versa; for instance, writes into RT indexes are only +available via SphinxQL. This chapter documents supported SphinxQL +statements syntax. + +7.1. SELECT syntax +================== + + | SELECT + | select_expr [, select_expr ...] + | FROM index [, index2 ...] + | [WHERE where_condition] + | [GROUP BY {col_name | expr_alias}] + | [ORDER BY {col_name | expr_alias} {ASC | DESC} [, ...]] + | [WITHIN GROUP ORDER BY {col_name | expr_alias} {ASC | DESC}] + | [LIMIT offset, row_count] + | [OPTION opt_name = opt_value [, ...]] + +SELECT statement was introduced in version 0.9.9-rc2. It's syntax is based +upon regular SQL but adds several Sphinx-specific extensions and has a few +omissions (such as (currently) missing support for JOINs). Specifically, + + * Column list clause. Column names, arbitrary expressions, and star + ('*') are all allowed (ie. SELECT @id, group_id*123+456 AS expr1 FROM + test1 will work). Unlike in regular SQL, all computed expressions must + be aliased with a valid identifier. Starting with version 2.0.1-beta, + AS is optional. Special names such as @id and @weight should currently + be used with leading at-sign. This at-sign requirement will be lifted + in the future. + + * FROM clause. FROM clause should contain the list of indexes to search + through. Unlike in regular SQL, comma means enumeration of full-text + indexes as in Query() API call rather than JOIN. + + * WHERE clause. This clause will map both to fulltext query and filters. + Comparison operators (=, !=, <, >, <=, >=), IN, AND, NOT, and BETWEEN + are all supported and map directly to filters. OR is not supported yet + but will be in the future. MATCH('query') is supported and maps to + fulltext query. Query will be interpreted according to full-text query + language rules. There must be at most one MATCH() in the clause. + Starting with version 2.0.1-beta, {col_name | expr_alias} [NOT] IN + @uservar condition syntax is supported. (Refer to Section 7.7, <> for a discussion of global user variables.) + + * GROUP BY clause. Currently only supports grouping by a single column. + The column however can be a computed expression: + + | SELECT *, group_id*1000+article_type AS gkey FROM example GROUP BY gkey + + Aggregate functions (AVG(), MIN(), MAX(), SUM()) in column list clause + are supported. Arguments to aggregate functions can be either plain + attributes or arbitrary expressions. COUNT(*) is implicitly supported + as using GROUP BY will add @count column to result set. Explicit + support might be added in the future. COUNT(DISTINCT attr) is + supported. Currently there can be at most one COUNT(DISTINCT) per + query and an argument needs to be an attribute. Both current + restrictions on COUNT(DISTINCT) might be lifted in the future. + + | SELECT *, AVG(price) AS avgprice, COUNT(DISTINCT storeid) + | FROM products + | WHERE MATCH('ipod') + | GROUP BY vendorid + + Starting with 2.0.1-beta, GROUP BY on a string attribute is supported, + with respect for current collation (see Section 5.12, <>). + + * WITHIN GROUP ORDER BY clause. This is a Sphinx specific extension that + lets you control how the best row within a group will to be selected. + The syntax matches that of regular ORDER BY clause: + + | SELECT *, INTERVAL(posted,NOW()-7*86400,NOW()-86400) AS timeseg + | FROM example WHERE MATCH('my search query') + | GROUP BY siteid + | WITHIN GROUP ORDER BY @weight DESC + | ORDER BY timeseg DESC, @weight DESC + + Starting with 2.0.1-beta, WITHIN GROUP ORDER BY on a string attribute + is supported, with respect for current collation (see Section 5.12, + <>). + + * ORDER BY clause. Unlike in regular SQL, only column names (not + expressions) are allowed and explicit ASC and DESC are required. The + columns however can be computed expressions: + + | SELECT *, @weight*10+docboost AS skey FROM example ORDER BY skey + + Starting with 2.0.1-beta, ORDER BY on a string attribute is supported, + with respect for current collation (see Section 5.12, <>). + + * LIMIT clause. Both LIMIT N and LIMIT M,N forms are supported. Unlike + in regular SQL (but like in Sphinx API), an implicit LIMIT 0,20 is + present by default. + + * OPTION clause. This is a Sphinx specific extension that lets you + control a number of per-query options. The syntax is: + + | OPTION = [ , ... ] + + Supported options and respectively allowed values are: + + * 'ranker' - any of 'proximity_bm25', 'bm25', 'none', 'wordcount', + 'proximity', 'matchany', or 'fieldmask' + + * 'max_matches' - integer (per-query max matches value) + + * 'cutoff' - integer (max found matches threshold) + + * 'max_query_time' - integer (max search time threshold, msec) + + * 'retry_count' - integer (distributed retries count) + + * 'retry_delay' - integer (distributed retry delay, msec) + + * 'field_weights' - a named integer list (per-field user weights for + ranking) + + * 'index_weights' - a named integer list (per-index user weights for + ranking) + + * 'reverse_scan' - 0 or 1, lets you control the order in which + full-scan query processes the rows + + Example: + + | SELECT * FROM test WHERE MATCH('@title hello @body world') + | OPTION ranker=bm25, max_matches=3000, + | field_weights=(title=10, body=3) + +7.2. SHOW META syntax +===================== + + | SHOW META + +SHOW META shows additional meta-information about the latest query such as +query time and keyword statistics: + + | mysql> SELECT * FROM test1 WHERE MATCH('test|one|two'); + | +------+--------+----------+------------+ + | | id | weight | group_id | date_added | + | +------+--------+----------+------------+ + | | 1 | 3563 | 456 | 1231721236 | + | | 2 | 2563 | 123 | 1231721236 | + | | 4 | 1480 | 2 | 1231721236 | + | +------+--------+----------+------------+ + | 3 rows in set (0.01 sec) + | + | mysql> SHOW META; + | +---------------+-------+ + | | Variable_name | Value | + | +---------------+-------+ + | | total | 3 | + | | total_found | 3 | + | | time | 0.005 | + | | keyword[0] | test | + | | docs[0] | 3 | + | | hits[0] | 5 | + | | keyword[1] | one | + | | docs[1] | 1 | + | | hits[1] | 2 | + | | keyword[2] | two | + | | docs[2] | 1 | + | | hits[2] | 2 | + | +---------------+-------+ + | 12 rows in set (0.00 sec) + +7.3. SHOW WARNINGS syntax +========================= + + | SHOW WARNINGS + +SHOW WARNINGS statement, introduced in version 0.9.9-rc2, can be used to +retrieve the warning produced by the latest query. The error message will +be returned along with the query itself: + + | mysql> SELECT * FROM test1 WHERE MATCH('@@title hello') \G + | ERROR 1064 (42000): index test1: syntax error, unexpected TOK_FIELDLIMIT + | near '@title hello' + | + | mysql> SELECT * FROM test1 WHERE MATCH('@title -hello') \G + | ERROR 1064 (42000): index test1: query is non-computable (single NOT operator) + | + | mysql> SELECT * FROM test1 WHERE MATCH('"test doc"/3') \G + | *************************** 1. row *************************** + | id: 4 + | weight: 2500 + | group_id: 2 + | date_added: 1231721236 + | 1 row in set, 1 warning (0.00 sec) + | + | mysql> SHOW WARNINGS \G + | *************************** 1. row *************************** + | Level: warning + | Code: 1000 + | Message: quorum threshold too high (words=2, thresh=3); replacing quorum operator + | with AND operator + | 1 row in set (0.00 sec) + +7.4. SHOW STATUS syntax +======================= + +SHOW STATUS, introduced in version 0.9.9-rc2, displays a number of useful +performance counters. IO and CPU counters will only be available if searchd +was started with --iostats and --cpustats switches respectively. + + | mysql> SHOW STATUS; + | +--------------------+-------+ + | | Variable_name | Value | + | +--------------------+-------+ + | | uptime | 216 | + | | connections | 3 | + | | maxed_out | 0 | + | | command_search | 0 | + | | command_excerpt | 0 | + | | command_update | 0 | + | | command_keywords | 0 | + | | command_persist | 0 | + | | command_status | 0 | + | | agent_connect | 0 | + | | agent_retry | 0 | + | | queries | 10 | + | | dist_queries | 0 | + | | query_wall | 0.075 | + | | query_cpu | OFF | + | | dist_wall | 0.000 | + | | dist_local | 0.000 | + | | dist_wait | 0.000 | + | | query_reads | OFF | + | | query_readkb | OFF | + | | query_readtime | OFF | + | | avg_query_wall | 0.007 | + | | avg_query_cpu | OFF | + | | avg_dist_wall | 0.000 | + | | avg_dist_local | 0.000 | + | | avg_dist_wait | 0.000 | + | | avg_query_reads | OFF | + | | avg_query_readkb | OFF | + | | avg_query_readtime | OFF | + | +--------------------+-------+ + | 29 rows in set (0.00 sec) + +7.5. INSERT and REPLACE syntax +============================== + + | {INSERT | REPLACE} INTO index [(column, ...)] + | VALUES (value, ...) + | [, (...)] + +INSERT statement, introduced in version 1.10-beta, is only supported for RT +indexes. It inserts new rows (documents) into an existing index, with the +provided column values. + +ID column must be present in all cases. Rows with duplicate IDs will not be +overwritten by INSERT; use REPLACE to do that. + +index is the name of RT index into which the new row(s) should be inserted. +The optional column names list lets you only explicitly specify values for +some of the columns present in the index. All the other columns will be +filled with their default values (0 for scalar types, empty string for text +types). + +Expressions are not currently supported in INSERT and values should be +explicitly specified. + +Multiple rows can be inserted using a single INSERT statement by providing +several comma-separated, parens-enclosed lists of rows values. + +7.6. DELETE syntax +================== + + | DELETE FROM index WHERE {id = value | id IN (val1 [, val2 [, ...]])} + +DELETE statement, introduced in version 1.10-beta, is only supported for RT +indexes. It deletes existing rows (documents) from an existing index based +on ID. + +index is the name of RT index from which the row should be deleted. value +is the row ID to be deleted. Support for batch id IN (2,3,5) syntax was +added in version 2.0.1-beta. + +Additional types of WHERE conditions (such as conditions on attributes, +etc) are planned, but not supported yet as of 1.10-beta. + +7.7. SET syntax +=============== + + | SET [GLOBAL] server_variable_name = value + | SET GLOBAL @user_variable_name = (int_val1 [, int_val2, ...]) + +SET statement, introduced in version 1.10-beta, modifies a server variable +value. The variable names are case-insensitive. No variable value changes +survive server restart. There are the following classes of the variables: + + 1. per-session server variable (1.10-beta and above) + + 2. global server variable (2.0.1-beta and above) + + 3. global user variable (2.0.1-beta and above) + +Global user variables are shared between concurrent sessions. Currently, +the only supported value type is the list of BIGINTs, and these variables +can only be used along with IN() for filtering purpose. The intended usage +scenario is uploading huge lists of values to searchd (once) and reusing +them (many times) later, saving on network overheads. Example: + + | // in session 1 + | mysql> SET GLOBAL @myfilter=(2,3,5,7,11,13); + | Query OK, 0 rows affected (0.00 sec) + | + | // later in session 2 + | mysql> SELECT * FROM test1 WHERE group_id IN @myfilter; + | +------+--------+----------+------------+-----------------+------+ + | | id | weight | group_id | date_added | title | tag | + | +------+--------+----------+------------+-----------------+------+ + | | 3 | 1 | 2 | 1299338153 | another doc | 15 | + | | 4 | 1 | 2 | 1299338153 | doc number four | 7,40 | + | +------+--------+----------+------------+-----------------+------+ + | 2 rows in set (0.02 sec) + +Per-session and global server variables affect certain server settings in +the respective scope. Known per-session server variables are: + +AUTOCOMMIT = {0 | 1} + Whether any data modification statement should be implicitly wrapped by + BEGIN and COMMIT. Introduced in version 1.10-beta. + +COLLATION_CONNECTION = collation_name + Selects the collation to be used for ORDER BY or GROUP BY on string + values in the subsequent queries. Refer to Section 5.12, <> + for a list of known collation names. Introduced in version 2.0.1-beta. + +CHARACTER_SET_RESULTS = charset_name + Does nothing; a placeholder to support frameworks, clients, and + connectors that attempt to automatically enforce a charset when + connecting to a Sphinx server. Introduced in version 2.0.1-beta. + +Known global server variables are: + +QUERY_LOG_FORMAT = {plain | sphinxql} + Changes the current log format. Introduced in version 2.0.1-beta. + +LOG_LEVEL = {info | debug | debugv | debugvv} + Changes the current log verboseness level. Introduced in version + 2.0.1-beta. + +Examples: + + | mysql> SET autocommit=0; + | Query OK, 0 rows affected (0.00 sec) + | + | mysql> SET GLOBAL query_log_format=sphinxql; + | Query OK, 0 rows affected (0.00 sec) + +7.8. BEGIN, COMMIT, and ROLLBACK syntax +======================================= + + | START TRANSACTION | BEGIN + | COMMIT + | ROLLBACK + | SET AUTOCOMMIT = {0 | 1} + +BEGIN, COMMIT, and ROLLBACK statements were introduced in version +1.10-beta. BEGIN statement (or its START TRANSACTION alias) forcibly +commits pending transaction, if any, and begins a new one. COMMIT statement +commits the current transaction, making all its changes permanent. ROLLBACK +statement rolls back the current transaction, canceling all its changes. +SET AUTOCOMMIT controls the autocommit mode in the active session. + +AUTOCOMMIT is set to 1 by default, meaning that every statement that +perfoms any changes on any index is implicitly wrapped in BEGIN and COMMIT. + +Transactions are limited to a single RT index, and also limited in size. +They are atomic, consistent, overly isolated, and durable. Overly isolated +means that the changes are not only invisible to the concurrent +transactions but even to the current session itself. + +7.9. CALL SNIPPETS syntax +========================= + + | CALL SNIPPETS(data, index, query[, opt_value AS opt_name[, ...]]) + +CALL SNIPPETS statement, introduced in version 1.10-beta, builds a snippet +from provided data and query, using specified index settings. + +data is the source data string to extract a snippet from. index is the name +of the index from which to take the text processing settings. query is the +full-text query to build snippets for. Additional options are documented in +Section 8.7.1, <>. Usage example: + + | CALL SNIPPETS('this is my document text', 'test1', 'hello world', + | 5 AS around, 200 AS limit) + +7.10. CALL KEYWORDS syntax +========================== + + | CALL KEYWORDS(text, index, [hits]) + +CALL KEYWORDS statement, introduced in version 1.10-beta, splits text into +particular keywords. It returns tokenized and normalized forms of the +keywords, and, optionally, keyword statistics. + +text is the text to break down to keywords. index is the name of the index +from which to take the text processing settings. hits is an optional +boolean parameter that specifies whether to return document and hit +occurrence statistics. + +7.11. SHOW TABLES syntax +======================== + + | SHOW TABLES + +SHOW TABLES statement, introduced in version 2.0.1-beta, enumerates all +currently active indexes along with their types. As of 2.0.1-beta, existing +index types are local, distributed, and rt respectively. Example: + + | mysql> SHOW TABLES; + | +-------+-------------+ + | | Index | Type | + | +-------+-------------+ + | | dist1 | distributed | + | | rt | rt | + | | test1 | local | + | | test2 | local | + | +-------+-------------+ + | 4 rows in set (0.00 sec) + +7.12. DESCRIBE syntax +===================== + + | {DESC | DESCRIBE} index + +DESCRIBE statement, introduced in version 2.0.1-beta, lists index columns +and their associated types. Columns are document ID, full-text fields, and +attributes. The order matches that in which fields and attributes are +expected by INSERT and REPLACE statements. As of 2.0.1-beta, column types +are field, integer, timestamp, ordinal, bool, float, bigint, string, and +mva. ID column will be typed either integer or bigint based on whether the +binaries were built with 32-bit or 64-bit document ID support. Example: + + | mysql> DESC rt; + | +---------+---------+ + | | Field | Type | + | +---------+---------+ + | | id | integer | + | | title | field | + | | content | field | + | | gid | integer | + | +---------+---------+ + | 4 rows in set (0.00 sec) + +7.13. CREATE FUNCTION syntax +============================ + + | CREATE FUNCTION udf_name + | RETURNS {INT | BIGINT | FLOAT} + | SONAME 'udf_lib_file' + +CREATE FUNCTION statement, introduced in version 2.0.1-beta, installs +a user-defined function (UDF) with the given name and type from the given +library file. The library file must reside in a trusted plugin_dir +directory. On success, the function is available for use in all subsequent +queries that the server receives. Example: + + | mysql> CREATE FUNCTION avgmva RETURNS INT SONAME 'udfexample.dll'; + | Query OK, 0 rows affected (0.03 sec) + | + | mysql> SELECT *, AVGMVA(tag) AS q from test1; + | +------+--------+---------+-----------+ + | | id | weight | tag | q | + | +------+--------+---------+-----------+ + | | 1 | 1 | 1,3,5,7 | 4.000000 | + | | 2 | 1 | 2,4,6 | 4.000000 | + | | 3 | 1 | 15 | 15.000000 | + | | 4 | 1 | 7,40 | 23.500000 | + | +------+--------+---------+-----------+ + +7.14. DROP FUNCTION syntax +========================== + + | DROP FUNCTION udf_name + +DROP FUNCTION statement, introduced in version 2.0.1-beta, deinstalls +a user-defined function (UDF) with the given name. On success, the function +is no longer available for use in subsequent queries. Pending concurrent +queries will not be affected and the library unload, if necessary, will be +postponed until those queries complete. Example: + + | mysql> DROP FUNCTION avgmva; + | Query OK, 0 rows affected (0.00 sec) + +7.15. SHOW VARIABLES syntax +=========================== + + | SHOW VARIABLES + +Added in version 2.0.1-beta, this is currently a placeholder query that +does nothing and reports success. That is in order to keep compatibility +with frameworks and connectors that automatically execute this statement. + + | mysql> SHOW VARIABLES; + | Query OK, 0 rows affected (0.00 sec) + +7.16. SHOW COLLATION syntax +=========================== + + | SHOW COLLATION + +Added in version 2.0.1-beta, this is currently a placeholder query that +does nothing and reports success. That is in order to keep compatibility +with frameworks and connectors that automatically execute this statement. + + | mysql> SHOW COLLATION; + | Query OK, 0 rows affected (0.00 sec) + +7.17. UPDATE syntax +=================== + + | UPDATE index SET col1 = newval1 [, ...] WHERE ID = docid + +UPDATE statement was added in version 2.0.1-beta. It can currently update +32-bit integer attributes only. Multiple attributes and values can be +specified. Both RT and disk indexes are supported. Updates on other +attribute types are also planned. + + | mysql> UPDATE myindex SET enabled=0 WHERE id=123; + | Query OK, 1 rows affected (0.00 sec) + +7.18. Multi-statement queries +============================= + +Starting version 2.0.1-beta, SphinxQL supports multi-statement queries, or +batches. Possible inter-statement optimizations described in Section 5.11, +<> do apply to SphinxQL just as well. The batched queries +should be separated by a semicolon. Your MySQL client library needs to +support MySQL multi-query mechanism and multiple result set. For instance, +mysqli interface in PHP and DBI/DBD libraries in Perl are known to work. + +Here's a PHP sample showing how to utilize mysqli interface with Sphinx. + + | >) and geodistance +functions (Section 8.4.5, <>) are now internally implemented +using this computed expressions mechanism, using magic names '@expr' and +'@geodist' respectively. + +Example: + + | $cl->SetSelect ( "*, @weight+(user_karma+ln(pageviews))*0.1 AS myweight" ); + | $cl->SetSelect ( "exp_years, salary_gbp*{$gbp_usd_rate} AS salary_usd, + | IF(age>40,1,0) AS over40" ); + | $cl->SetSelect ( "*, AVG(price) AS avgprice" ); + +8.3. Full-text search query settings +==================================== + +8.3.1. SetMatchMode +------------------- + +Prototype: function SetMatchMode ( $mode ) + +Sets full-text query matching mode, as described in Section 5.1, <>. Parameter must be a constant specifying one of the known modes. + +WARNING: (PHP specific) you must not take the matching mode constant name +in quotes, that syntax specifies a string and is incorrect: + + | $cl->SetMatchMode ( "SPH_MATCH_ANY" ); // INCORRECT! will not work as expected + | $cl->SetMatchMode ( SPH_MATCH_ANY ); // correct, works OK + +8.3.2. SetRankingMode +--------------------- + +Prototype: function SetRankingMode ( $ranker ) + +Sets ranking mode. Only available in SPH_MATCH_EXTENDED2 matching mode at +the time of this writing. Parameter must be a constant specifying one of +the known modes. + +By default, Sphinx computes two factors which contribute to the final match +weight. The major part is query phrase proximity to document text. The +minor part is so-called BM25 statistical function, which varies from 0 to +1 depending on the keyword frequency within document (more occurrences +yield higher weight) and within the whole index (more rare keywords yield +higher weight). + +However, in some cases you'd want to compute weight differently - or maybe +avoid computing it at all for performance reasons because you're sorting +the result set by something else anyway. This can be accomplished by +setting the appropriate ranking mode. + +Currently implemented modes are: + + * SPH_RANK_PROXIMITY_BM25, default ranking mode which uses and combines + both phrase proximity and BM25 ranking. + + * SPH_RANK_BM25, statistical ranking mode which uses BM25 ranking only + (similar to most other full-text engines). This mode is faster but may + result in worse quality on queries which contain more than 1 keyword. + + * SPH_RANK_NONE, disabled ranking mode. This mode is the fastest. It is + essentially equivalent to boolean searching. A weight of 1 is assigned + to all matches. + + * SPH_RANK_WORDCOUNT, ranking by keyword occurrences count. This ranker + computes the amount of per-field keyword occurrences, then multiplies + the amounts by field weights, then sums the resulting values for the + final result. + + * SPH_RANK_PROXIMITY, added in version 0.9.9-rc1, returns raw phrase + proximity value as a result. This mode is internally used to emulate + SPH_MATCH_ALL queries. + + * SPH_RANK_MATCHANY, added in version 0.9.9-rc1, returns rank as it was + computed in SPH_MATCH_ANY mode ealier, and is internally used to + emulate SPH_MATCH_ANY queries. + + * SPH_RANK_FIELDMASK, added in version 0.9.9-rc2, returns a 32-bit mask + with N-th bit corresponding to N-th fulltext field, numbering from 0. + The bit will only be set when the respective field has any keyword + occurences satisfiying the query. + + * SPH_RANK_SPH04, added in version 1.10-beta, is generally based on the + default SPH_RANK_PROXIMITY_BM25 ranker, but additionally boosts the + matches when they occur in the very beginning or the very end of + a text field. Thus, if a field equals the exact query, SPH04 should + rank it higher than a field that contains the exact query but is not + equal to it. (For instance, when the query is "Hyde Park", a document + entitled "Hyde Park" should be ranked higher than a one entitled "Hyde + Park, London" or "The Hyde Park Cafe".) + +8.3.3. SetSortMode +------------------ + +Prototype: function SetSortMode ( $mode, $sortby="" ) + +Set matches sorting mode, as described in Section 5.6, <>. +Parameter must be a constant specifying one of the known modes. + +WARNING: (PHP specific) you must not take the matching mode constant name +in quotes, that syntax specifies a string and is incorrect: + + | $cl->SetSortMode ( "SPH_SORT_ATTR_DESC" ); // INCORRECT! will not work as expected + | $cl->SetSortMode ( SPH_SORT_ATTR_ASC ); // correct, works OK + +8.3.4. SetWeights +----------------- + +Prototype: function SetWeights ( $weights ) + +Binds per-field weights in the order of appearance in the index. +DEPRECATED, use SetFieldWeights() instead. + +8.3.5. SetFieldWeights +---------------------- + +Prototype: function SetFieldWeights ( $weights ) + +Binds per-field weights by name. Parameter must be a hash (associative +array) mapping string field names to integer weights. + +Match ranking can be affected by per-field weights. For instance, see +Section 5.4, <> for an explanation how phrase proximity ranking +is affected. This call lets you specify what non-default weights to assign +to different full-text fields. + +The weights must be positive 32-bit integers. The final weight will be +a 32-bit integer too. Default weight value is 1. Unknown field names will +be silently ignored. + +There is no enforced limit on the maximum weight value at the moment. +However, beware that if you set it too high you can start hitting 32-bit +wraparound issues. For instance, if you set a weight of 10,000,000 and +search in extended mode, then maximum possible weight will be equal to 10 +million (your weight) by 1 thousand (internal BM25 scaling factor, see +Section 5.4, <>) by 1 or more (phrase proximity rank). The +result is at least 10 billion that does not fit in 32 bits and will be +wrapped around, producing unexpected results. + +8.3.6. SetIndexWeights +---------------------- + +Prototype: function SetIndexWeights ( $weights ) + +Sets per-index weights, and enables weighted summing of match weights +across different indexes. Parameter must be a hash (associative array) +mapping string index names to integer weights. Default is empty array that +means to disable weighting summing. + +When a match with the same document ID is found in several different local +indexes, by default Sphinx simply chooses the match from the index +specified last in the query. This is to support searching through partially +overlapping index partitions. + +However in some cases the indexes are not just partitions, and you might +want to sum the weights across the indexes instead of picking one. +SetIndexWeights() lets you do that. With summing enabled, final match +weight in result set will be computed as a sum of match weight coming from +the given index multiplied by respective per-index weight specified in this +call. Ie. if the document 123 is found in index A with the weight of 2, and +also in index B with the weight of 3, and you called SetIndexWeights ( +array ( "A"=>100, "B"=>10 ) ), the final weight return to the client will +be 2*100+3*10 = 230. + +8.4. Result set filtering settings +================================== + +8.4.1. SetIDRange +----------------- + +Prototype: function SetIDRange ( $min, $max ) + +Sets an accepted range of document IDs. Parameters must be integers. +Defaults are 0 and 0; that combination means to not limit by range. + +After this call, only those records that have document ID between $min and +$max (including IDs exactly equal to $min or $max) will be matched. + +8.4.2. SetFilter +---------------- + +Prototype: function SetFilter ( $attribute, $values, $exclude=false ) + +Adds new integer values set filter. + +On this call, additional new filter is added to the existing list of +filters. $attribute must be a string with attribute name. $values must be +a plain array containing integer values. $exclude must be a boolean value; +it controls whether to accept the matching documents (default mode, when +$exclude is false) or reject them. + +Only those documents where $attribute column value stored in the index +matches any of the values from $values array will be matched (or rejected, +if $exclude is true). + +8.4.3. SetFilterRange +--------------------- + +Prototype: function SetFilterRange ( $attribute, $min, $max, $exclude=false +) + +Adds new integer range filter. + +On this call, additional new filter is added to the existing list of +filters. $attribute must be a string with attribute name. $min and $max +must be integers that define the acceptable attribute values range +(including the boundaries). $exclude must be a boolean value; it controls +whether to accept the matching documents (default mode, when $exclude is +false) or reject them. + +Only those documents where $attribute column value stored in the index is +between $min and $max (including values that are exactly equal to $min or +$max) will be matched (or rejected, if $exclude is true). + +8.4.4. SetFilterFloatRange +-------------------------- + +Prototype: function SetFilterFloatRange ( $attribute, $min, $max, +$exclude=false ) + +Adds new float range filter. + +On this call, additional new filter is added to the existing list of +filters. $attribute must be a string with attribute name. $min and $max +must be floats that define the acceptable attribute values range (including +the boundaries). $exclude must be a boolean value; it controls whether to +accept the matching documents (default mode, when $exclude is false) or +reject them. + +Only those documents where $attribute column value stored in the index is +between $min and $max (including values that are exactly equal to $min or +$max) will be matched (or rejected, if $exclude is true). + +8.4.5. SetGeoAnchor +------------------- + +Prototype: function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long ) + +Sets anchor point for and geosphere distance (geodistance) calculations, +and enable them. + +$attrlat and $attrlong must be strings that contain the names of latitude +and longitude attributes, respectively. $lat and $long are floats that +specify anchor point latitude and longitude, in radians. + +Once an anchor point is set, you can use magic "@geodist" attribute name in +your filters and/or sorting expressions. Sphinx will compute geosphere +distance between the given anchor point and a point specified by latitude +and lognitude attributes from each full-text match, and attach this value +to the resulting match. The latitude and longitude values both in +SetGeoAnchor and the index attribute data are expected to be in radians. +The result will be returned in meters, so geodistance value of 1000.0 means +1 km. 1 mile is approximately 1609.344 meters. + +8.5. GROUP BY settings +====================== + +8.5.1. SetGroupBy +----------------- + +Prototype: function SetGroupBy ( $attribute, $func, $groupsort="@group +desc" ) + +Sets grouping attribute, function, and groups sorting mode; and enables +grouping (as described in Section 5.7, <>). + +$attribute is a string that contains group-by attribute name. $func is +a constant that chooses a function applied to the attribute value in order +to compute group-by key. $groupsort is a clause that controls how the +groups will be sorted. Its syntax is similar to that described in +Section 5.6, <>. + +Grouping feature is very similar in nature to GROUP BY clause from SQL. +Results produces by this function call are going to be the same as produced +by the following pseudo code: + + | SELECT ... GROUP BY $func($attribute) ORDER BY $groupsort + +Note that it's $groupsort that affects the order of matches in the final +result set. Sorting mode (see Section 8.3.3, <>) affect the +ordering of matches within group, ie. what match will be selected as the +best one from the group. So you can for instance order the groups by +matches count and select the most relevant match within each group at the +same time. + +Starting with version 0.9.9-rc2, aggregate functions (AVG(), MIN(), MAX(), +SUM()) are supported through SetSelect() API call when using GROUP BY. + +Starting with version 2.0.1-beta, grouping on string attributes is +supported, with respect to current collation. + +8.5.2. SetGroupDistinct +----------------------- + +Prototype: function SetGroupDistinct ( $attribute ) + +Sets attribute name for per-group distinct values count calculations. Only +available for grouping queries. + +$attribute is a string that contains the attribute name. For each group, +all values of this attribute will be stored (as RAM limits permit), then +the amount of distinct values will be calculated and returned to the +client. This feature is similar to COUNT(DISTINCT) clause in standard SQL; +so these Sphinx calls: + + | $cl->SetGroupBy ( "category", SPH_GROUPBY_ATTR, "@count desc" ); + | $cl->SetGroupDistinct ( "vendor" ); + +can be expressed using the following SQL clauses: + + | SELECT id, weight, all-attributes, + | COUNT(DISTINCT vendor) AS @distinct, + | COUNT(*) AS @count + | FROM products + | GROUP BY category + | ORDER BY @count DESC + +In the sample pseudo code shown just above, SetGroupDistinct() call +corresponds to COUNT(DISINCT vendor) clause only. GROUP BY, ORDER BY, and +COUNT(*) clauses are all an equivalent of SetGroupBy() settings. Both +queries will return one matching row for each category. In addition to +indexed attributes, matches will also contain total per-category matches +count, and the count of distinct vendor IDs within each category. + +8.6. Querying +============= + +8.6.1. Query +------------ + +Prototype: function Query ( $query, $index="*", $comment="" ) + +Connects to searchd server, runs given search query with current settings, +obtains and returns the result set. + +$query is a query string. $index is an index name (or names) string. +Returns false and sets GetLastError() message on general error. Returns +search result set on success. Additionally, the contents of $comment are +sent to the query log, marked in square brackets, just before the search +terms, which can be very useful for debugging. Currently, the comment is +limited to 128 characters. + +Default value for $index is "*" that means to query all local indexes. +Characters allowed in index names include Latin letters (a-z), numbers +(0-9), minus sign (-), and underscore (_); everything else is considered +a separator. Therefore, all of the following samples calls are valid and +will search the same two indexes: + + | $cl->Query ( "test query", "main delta" ); + | $cl->Query ( "test query", "main;delta" ); + | $cl->Query ( "test query", "main, delta" ); + +Index specification order matters. If document with identical IDs are found +in two or more indexes, weight and attribute values from the very last +matching index will be used for sorting and returning to client (unless +explicitly overridden with SetIndexWeights()). Therefore, in the example +above, matches from "delta" index will always win over matches from "main". + +On success, Query() returns a result set that contains some of the found +matches (as requested by SetLimits()) and additional general per-query +statistics. The result set is a hash (PHP specific; other languages might +utilize other structures instead of hash) with the following keys and +values: + +"matches": + Hash which maps found document IDs to another small hash containing + document weight and attribute values (or an array of the similar small + hashes if SetArrayResult() was enabled). + +"total": + Total amount of matches retrieved on server (ie. to the server side + result set) by this query. You can retrieve up to this amount of matches + from server for this query text with current query settings. + +"total_found": + Total amount of matching documents in index (that were found and + procesed on server). + +"words": + Hash which maps query keywords (case-folded, stemmed, and otherwise + processed) to a small hash with per-keyword statitics ("docs", "hits"). + +"error": + Query error message reported by searchd (string, human readable). Empty + if there were no errors. + +"warning": + Query warning message reported by searchd (string, human readable). + Empty if there were no warnings. + +It should be noted that Query() carries out the same actions as AddQuery() +and RunQueries() without the intermediate steps; it is analoguous to +a single AddQuery() call, followed by a corresponding RunQueries(), then +returning the first array element of matches (from the first, and only, +query.) + +8.6.2. AddQuery +--------------- + +Prototype: function AddQuery ( $query, $index="*", $comment="" ) + +Adds additional query with current settings to multi-query batch. $query is +a query string. $index is an index name (or names) string. Additionally if +provided, the contents of $comment are sent to the query log, marked in +square brackets, just before the search terms, which can be very useful for +debugging. Currently, this is limited to 128 characters. Returns index to +results array returned from RunQueries(). + +Batch queries (or multi-queries) enable searchd to perform internal +optimizations if possible. They also reduce network connection overheads +and search process creation overheads in all cases. They do not result in +any additional overheads compared to simple queries. Thus, if you run +several different queries from your web page, you should always consider +using multi-queries. + +For instance, running the same full-text query but with different sorting +or group-by settings will enable searchd to perform expensive full-text +search and ranking operation only once, but compute multiple group-by +results from its output. + +This can be a big saver when you need to display not just plain search +results but also some per-category counts, such as the amount of products +grouped by vendor. Without multi-query, you would have to run several +queries which perform essentially the same search and retrieve the same +matches, but create result sets differently. With multi-query, you simply +pass all these querys in a single batch and Sphinx optimizes the redundant +full-text search internally. + +AddQuery() internally saves full current settings state along with the +query, and you can safely change them afterwards for subsequent AddQuery() +calls. Already added queries will not be affected; there's actually no way +to change them at all. Here's an example: + + | $cl->SetSortMode ( SPH_SORT_RELEVANCE ); + | $cl->AddQuery ( "hello world", "documents" ); + | + | $cl->SetSortMode ( SPH_SORT_ATTR_DESC, "price" ); + | $cl->AddQuery ( "ipod", "products" ); + | + | $cl->AddQuery ( "harry potter", "books" ); + | + | $results = $cl->RunQueries (); + +With the code above, 1st query will search for "hello world" in "documents" +index and sort results by relevance, 2nd query will search for "ipod" in +"products" index and sort results by price, and 3rd query will search for +"harry potter" in "books" index while still sorting by price. Note that 2nd +SetSortMode() call does not affect the first query (because it's already +added) but affects both other subsequent queries. + +Additionally, any filters set up before an AddQuery() will fall through to +subsequent queries. So, if SetFilter() is called before the first query, +the same filter will be in place for the second (and subsequent) queries +batched through AddQuery() unless you call ResetFilters() first. +Alternatively, you can add additional filters as well. + +This would also be true for grouping options and sorting options; no +current sorting, filtering, and grouping settings are affected by this +call; so subsequent queries will reuse current query settings. + +AddQuery() returns an index into an array of results that will be returned +from RunQueries() call. It is simply a sequentially increasing 0-based +integer, ie. first call will return 0, second will return 1, and so on. +Just a small helper so you won't have to track the indexes manualy if you +need then. + +8.6.3. RunQueries +----------------- + +Prototype: function RunQueries () + +Connect to searchd, runs a batch of all queries added using AddQuery(), +obtains and returns the result sets. Returns false and sets GetLastError() +message on general error (such as network I/O failure). Returns a plain +array of result sets on success. + +Each result set in the returned array is exactly the same as the result set +returned from Query(). + +Note that the batch query request itself almost always succeds - unless +there's a network error, blocking index rotation in progress, or another +general failure which prevents the whole request from being processed. + +However individual queries within the batch might very well fail. In this +case their respective result sets will contain non-empty "error" message, +but no matches or query statistics. In the extreme case all queries within +the batch could fail. There still will be no general error reported, +because API was able to succesfully connect to searchd, submit the batch, +and receive the results - but every result set will have a specific error +message. + +8.6.4. ResetFilters +------------------- + +Prototype: function ResetFilters () + +Clears all currently set filters. + +This call is only normally required when using multi-queries. You might +want to set different filters for different queries in the batch. To do +that, you should call ResetFilters() and add new filters using the +respective calls. + +8.6.5. ResetGroupBy +------------------- + +Prototype: function ResetGroupBy () + +Clears all currently group-by settings, and disables group-by. + +This call is only normally required when using multi-queries. You can +change individual group-by settings using SetGroupBy() and +SetGroupDistinct() calls, but you can not disable group-by using those +calls. ResetGroupBy() fully resets previous group-by settings and disables +group-by mode in the current state, so that subsequent AddQuery() calls can +perform non-grouping searches. + +8.7. Additional functionality +============================= + +8.7.1. BuildExcerpts +-------------------- + +Prototype: function BuildExcerpts ( $docs, $index, $words, $opts=array() ) + +Excerpts (snippets) builder function. Connects to searchd, asks it to +generate excerpts (snippets) from given documents, and returns the results. + +$docs is a plain array of strings that carry the documents' contents. +$index is an index name string. Different settings (such as charset, +morphology, wordforms) from given index will be used. $words is a string +that contains the keywords to highlight. They will be processed with +respect to index settings. For instance, if English stemming is enabled in +the index, "shoes" will be highlighted even if keyword is "shoe". Starting +with version 0.9.9-rc1, keywords can contain wildcards, that work similarly +to star-syntax available in queries. $opts is a hash which contains +additional optional highlighting parameters: + +"before_match": + A string to insert before a keyword match. Starting with version + 1.10-beta, a %PASSAGE_ID% macro can be used in this string. The macro is + replaced with an incrementing passage number within a current snippet. + Numbering starts at 1 by default but can be overridden with + "start_passage_id" option. In a multi-document call, %PASSAGE_ID% would + restart at every given document. Default is "". + +"after_match": + A string to insert after a keyword match. Starting with version + 1.10-beta, a %PASSAGE_ID% macro can be used in this string. Default is + "". + +"chunk_separator": + A string to insert between snippet chunks (passages). Default is + " ... ". + +"limit": + Maximum snippet size, in symbols (codepoints). Integer, default is 256. + +"around": + How much words to pick around each matching keywords block. Integer, + default is 5. + +"exact_phrase": + Whether to highlight exact query phrase matches only instead of + individual keywords. Boolean, default is false. + +"single_passage": + Whether to extract single best passage only. Boolean, default is false. + +"use_boundaries": + Whether to additionaly break passages by phrase boundary characters, as + configured in index settings with phrase_boundary directive. Boolean, + default is false. + +"weight_order": + Whether to sort the extracted passages in order of relevance (decreasing + weight), or in order of appearance in the document (increasing + position). Boolean, default is false. + +"query_mode": + Added in version 1.10-beta. Whether to handle $words as a query in + extended syntax, or as a bag of words (default behavior). For instance, + in query mode ("one two" | "three four") will only highlight and include + those occurrences "one two" or "three four" when the two words from each + pair are adjacent to each other. In default mode, any single occurrence + of "one", "two", "three", or "four" would be highlighted. Boolean, + default is false. + +"force_all_words": + Added in version 1.10-beta. Ignores the snippet length limit until it + includes all the keywords. Boolean, default is false. + +"limit_passages": + Added in version 1.10-beta. Limits the maximum number of passages that + can be included into the snippet. Integer, default is 0 (no limit). + +"limit_words": + Added in version 1.10-beta. Limits the maximum number of keywords that + can be included into the snippet. Integer, default is 0 (no limit). + +"start_passage_id": + Added in version 1.10-beta. Specifies the starting value of %PASSAGE_ID% + macro (that gets detected and expanded in before_match, after_match + strings). Integer, default is 1. + +"load_files": + Added in version 1.10-beta. Whether to handle $docs as data to extract + snippets from (default behavior), or to treat it as file names, and load + data from specified files on the server side. Starting with version + 2.0.1-beta, up to dist_threads worker threads per request will be + created to parallelize the work when this flag is enabled. Boolean, + default is false. + +"html_strip_mode": + Added in version 1.10-beta. HTML stripping mode setting. Defaults to + "index", which means that index settings will be used. The other values + are "none" and "strip", that forcibly skip or apply stripping + irregardless of index settings; and "retain", that retains HTML markup + and protects it from highlighting. The "retain" mode can only be used + when highlighting full documents and thus requires that no snippet size + limits are set. String, allowed values are "none", "strip", "index", and + "retain". + +"allow_empty": + Added in version 1.10-beta. Allows empty string to be returned as + highlighting result when a snippet could not be generated (no keywords + match, or no passages fit the limit). By default, the beginning of + original text would be returned instead of an empty string. Boolean, + default is false. + +"passage_boundary": + Added in version 2.0.1-beta. Ensures that passages do not cross + a sentence, paragraph, or zone boundary (when used with an index that + has the respective indexing settings enabled). String, allowed values + are "sentence", "paragraph", and "zone". + +"passage_boundary": + Added in version 2.0.1-beta. Ensures that passages do not cross + a sentence, paragraph, or zone boundary (when used with an index that + has the respective indexing settings enabled). String, allowed values + are "sentence", "paragraph", and "zone". + +"emit_zones": + Added in version 2.0.1-beta. Emits an HTML tag with an enclosing zone + name before each passage. Boolean, default is false. + +Snippets extraction algorithm currently favors better passages (with closer +phrase matches), and then passages with keywords not yet in snippet. +Generally, it will try to highlight the best match with the query, and it +will also to highlight all the query keywords, as made possible by the +limtis. In case the document does not match the query, beginning of the +document trimmed down according to the limits will be return by default. +Starting with 1.10-beta, you can also return an empty snippet instead case +by setting "allow_empty" option to true. + +Returns false on failure. Returns a plain array of strings with excerpts +(snippets) on success. + +8.7.2. UpdateAttributes +----------------------- + +Prototype: function UpdateAttributes ( $index, $attrs, $values ) + +Instantly updates given attribute values in given documents. Returns number +of actually updated documents (0 or more) on success, or -1 on failure. + +$index is a name of the index (or indexes) to be updated. $attrs is a plain +array with string attribute names, listing attributes that are updated. +$values is a hash where key is document ID, and value is a plain array of +new attribute values. + +$index can be either a single index name or a list, like in Query(). Unlike +Query(), wildcard is not allowed and all the indexes to update must be +specified explicitly. The list of indexes can include distributed index +names. Updates on distributed indexes will be pushed to all agents. + +The updates only work with docinfo=extern storage strategy. They are very +fast because they're working fully in RAM, but they can also be made +persistent: updates are saved on disk on clean searchd shutdown initiated +by SIGTERM signal. With additional restrictions, updates are also possible +on MVA attributes; refer to mva_updates_pool directive for details. + +Usage example: + + | $cl->UpdateAttributes ( "test1", array("group_id"), array(1=>array(456)) ); + | $cl->UpdateAttributes ( "products", array ( "price", "amount_in_stock" ), + | array ( 1001=>array(123,5), 1002=>array(37,11), 1003=>(25,129) ) ); + +The first sample statement will update document 1 in index "test1", setting +"group_id" to 456. The second one will update documents 1001, 1002 and 1003 +in index "products". For document 1001, the new price will be set to 123 +and the new amount in stock to 5; for document 1002, the new price will be +37 and the new amount will be 11; etc. + +8.7.3. BuildKeywords +-------------------- + +Prototype: function BuildKeywords ( $query, $index, $hits ) + +Extracts keywords from query using tokenizer settings for given index, +optionally with per-keyword occurrence statistics. Returns an array of +hashes with per-keyword information. + +$query is a query to extract keywords from. $index is a name of the index +to get tokenizing settings and keyword occurrence statistics from. $hits is +a boolean flag that indicates whether keyword occurrence statistics are +required. + +Usage example: + + | $keywords = $cl->BuildKeywords ( "this.is.my query", "test1", false ); + +8.7.4. EscapeString +------------------- + +Prototype: function EscapeString ( $string ) + +Escapes characters that are treated as special operators by the query +language parser. Returns an escaped string. + +$string is a string to escape. + +This function might seem redundant because it's trivial to implement in any +calling application. However, as the set of special characters might change +over time, it makes sense to have an API call that is guaranteed to escape +all such characters at all times. + +Usage example: + + | $escaped = $cl->EscapeString ( "escaping-sample@query/string" ); + +8.7.5. Status +------------- + +Prototype: function Status () + +Queries searchd status, and returns an array of status variable name and +value pairs. + +Usage example: + + | $status = $cl->Status (); + | foreach ( $status as $row ) + | print join ( ": ", $row ) . "\n"; + +8.7.6. FlushAttributes +---------------------- + +Prototype: function FlushAttributes () + +Forces searchd to flush pending attribute updates to disk, and blocks until +completion. Returns a non-negative internal "flush tag" on success. Returns +-1 and sets an error message on error. Introduced in version 1.10-beta. + +Attribute values updated using UpdateAttributes() API call are only kept in +RAM until a so-called flush (which writes the current, possibly updated +attribute values back to disk). FlushAttributes() call lets you enforce +a flush. The call will block until searchd finishes writing the data to +disk, which might take seconds or even minutes depending on the total data +size (.spa file size). All the currently updated indexes will be flushed. + +Flush tag should be treated as an ever growing magic number that does not +mean anything. It's guaranteed to be non-negative. It is guaranteed to grow +over time, though not necessarily in a sequential fashion; for instance, +two calls that return 10 and then 1000 respectively are a valid situation. +If two calls to FlushAttrs() return the same tag, it means that there were +no actual attribute updates in between them, and therefore current flushed +state remained the same (for all indexes). + +Usage example: + + | $status = $cl->FlushAttributes (); + | if ( $status<0 ) + | print "ERROR: " . $cl->GetLastError(); + +8.8. Persistent connections +=========================== + +Persistent connections allow to use single network connection to run +multiple commands that would otherwise require reconnects. + +8.8.1. Open +----------- + +Prototype: function Open () + +Opens persistent connection to the server. + +8.8.2. Close +------------ + +Prototype: function Close () + +Closes previously opened persistent connection. + +Chapter 9. MySQL storage engine (SphinxSE) +========================================== + +Table of Contents + +9.1. SphinxSE overview +9.2. Installing SphinxSE + 9.2.1. Compiling MySQL 5.0.x with SphinxSE + 9.2.2. Compiling MySQL 5.1.x with SphinxSE + 9.2.3. Checking SphinxSE installation + +9.3. Using SphinxSE +9.4. Building snippets (excerpts) via MySQL + +9.1. SphinxSE overview +====================== + +SphinxSE is MySQL storage engine which can be compiled into MySQL server +5.x using its pluggable architecure. It is not available for MySQL 4.x +series. It also requires MySQL 5.0.22 or higher in 5.0.x series, or MySQL +5.1.12 or higher in 5.1.x series. + +Despite the name, SphinxSE does not actually store any data itself. It is +actually a built-in client which allows MySQL server to talk to searchd, +run search queries, and obtain search results. All indexing and searching +happen outside MySQL. + +Obvious SphinxSE applications include: + + * easier porting of MySQL FTS applications to Sphinx; + + * allowing Sphinx use with progamming languages for which native APIs + are not available yet; + + * optimizations when additional Sphinx result set processing on MySQL + side is required (eg. JOINs with original document tables, additional + MySQL-side filtering, etc). + +9.2. Installing SphinxSE +======================== + +You will need to obtain a copy of MySQL sources, prepare those, and then +recompile MySQL binary. MySQL sources (mysql-5.x.yy.tar.gz) could be +obtained from dev.mysql.com Web site. + +For some MySQL versions, there are delta tarballs with already prepared +source versions available from Sphinx Web site. After unzipping those over +original sources MySQL would be ready to be configured and built with +Sphinx support. + +If such tarball is not available, or does not work for you for any reason, +you would have to prepare sources manually. You will need to GNU Autotools +framework (autoconf, automake and libtool) installed to do that. + +9.2.1. Compiling MySQL 5.0.x with SphinxSE +------------------------------------------ + +Skips steps 1-3 if using already prepared delta tarball. + + 1. copy sphinx.5.0.yy.diff patch file into MySQL sources directory and + run + + | patch -p1 < sphinx.5.0.yy.diff + + If there's no .diff file exactly for the specific version you need to + build, try applying .diff with closest version numbers. It is + important that the patch should apply with no rejects. + + 2. in MySQL sources directory, run + + | sh BUILD/autorun.sh + + 3. in MySQL sources directory, create sql/sphinx directory in and copy + all files in mysqlse directory from Sphinx sources there. Example: + + | cp -R /root/builds/sphinx-0.9.7/mysqlse /root/builds/mysql-5.0.24/sql/sphinx + + 4. configure MySQL and enable Sphinx engine: + + | ./configure --with-sphinx-storage-engine + + 5. build and install MySQL: + + | make + | make install + +9.2.2. Compiling MySQL 5.1.x with SphinxSE +------------------------------------------ + +Skip steps 1-2 if using already prepared delta tarball. + + 1. in MySQL sources directory, create storage/sphinx directory in and + copy all files in mysqlse directory from Sphinx sources there. + Example: + + | cp -R /root/builds/sphinx-0.9.7/mysqlse /root/builds/mysql-5.1.14/storage/sphinx + + 2. in MySQL sources directory, run + + | sh BUILD/autorun.sh + + 3. configure MySQL and enable Sphinx engine: + + | ./configure --with-plugins=sphinx + + 4. build and install MySQL: + + | make + | make install + +9.2.3. Checking SphinxSE installation +------------------------------------- + +To check whether SphinxSE has been succesfully compiled into MySQL, launch +newly built servers, run mysql client and issue SHOW ENGINES query. You +should see a list of all available engines. Sphinx should be present and +"Support" column should contain "YES": + + | mysql> show engines; + | +------------+----------+-------------------------------------------------------------+ + | | Engine | Support | Comment | + | +------------+----------+-------------------------------------------------------------+ + | | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | + | ... + | | SPHINX | YES | Sphinx storage engine | + | ... + | +------------+----------+-------------------------------------------------------------+ + | 13 rows in set (0.00 sec) + +9.3. Using SphinxSE +=================== + +To search via SphinxSE, you would need to create special ENGINE=SPHINX +"search table", and then SELECT from it with full text query put into WHERE +clause for query column. + +Let's begin with an example create statement and search query: + + | CREATE TABLE t1 + | ( + | id INTEGER UNSIGNED NOT NULL, + | weight INTEGER NOT NULL, + | query VARCHAR(3072) NOT NULL, + | group_id INTEGER, + | INDEX(query) + | ) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test"; + | + | SELECT * FROM t1 WHERE query='test it;mode=any'; + +First 3 columns of search table must have a types of INTEGER UNSINGED or +BIGINT for the 1st column (document id), INTEGER or BIGINT for the 2nd +column (match weight), and VARCHAR or TEXT for the 3rd column (your query), +respectively. This mapping is fixed; you can not omit any of these three +required columns, or move them around, or change types. Also, query column +must be indexed; all the others must be kept unindexed. Columns' names are +ignored so you can use arbitrary ones. + +Additional columns must be either INTEGER, TIMESTAMP, BIGINT, VARCHAR, or +FLOAT. They will be bound to attributes provided in Sphinx result set by +name, so their names must match attribute names specified in sphinx.conf. +If there's no such attribute name in Sphinx search results, column will +have NULL values. + +Special "virtual" attributes names can also be bound to SphinxSE columns. +_sph_ needs to be used instead of @ for that. For instance, to obtain the +values of @groupby, @count, or @distinct virtual attributes, use +_sph_groupby, _sph_count or _sph_distinct column names, respectively. + +CONNECTION string parameter can be used to specify default searchd host, +port and indexes for queries issued using this table. If no connection +string is specified in CREATE TABLE, index name "*" (ie. search all +indexes) and localhost:9312 are assumed. Connection string syntax is as +follows: + + | CONNECTION="sphinx://HOST:PORT/INDEXNAME" + +You can change the default connection string later: + + | ALTER TABLE t1 CONNECTION="sphinx://NEWHOST:NEWPORT/NEWINDEXNAME"; + +You can also override all these parameters per-query. + +As seen in example, both query text and search options should be put into +WHERE clause on search query column (ie. 3rd column); the options are +separated by semicolons; and their names from values by equality sign. Any +number of options can be specified. Available options are: + + * query - query text; + + * mode - matching mode. Must be one of "all", "any", "phrase", + "boolean", "extended", or "extended2". Default is "all"; + + * sort - match sorting mode. Must be one of "relevance", "attr_desc", + "attr_asc", "time_segments", or "extended". In all modes besides + "relevance" attribute name (or sorting clause for "extended") is also + required after a colon: + + | ... WHERE query='test;sort=attr_asc:group_id'; + | ... WHERE query='test;sort=extended:@weight desc, group_id asc'; + + * offset - offset into result set, default is 0; + + * limit - amount of matches to retrieve from result set, default is 20; + + * index - names of the indexes to search: + + | ... WHERE query='test;index=test1;'; + | ... WHERE query='test;index=test1,test2,test3;'; + + * minid, maxid - min and max document ID to match; + + * weights - comma-separated list of weights to be assigned to Sphinx + full-text fields: + + | ... WHERE query='test;weights=1,2,3;'; + + * filter, !filter - comma-separated attribute name and a set of values + to match: + + | # only include groups 1, 5 and 19 + | ... WHERE query='test;filter=group_id,1,5,19;'; + | + | # exclude groups 3 and 11 + | ... WHERE query='test;!filter=group_id,3,11;'; + + * range, !range - comma-separated attribute name, min and max value to + match: + + | # include groups from 3 to 7, inclusive + | ... WHERE query='test;range=group_id,3,7;'; + | + | # exclude groups from 5 to 25 + | ... WHERE query='test;!range=group_id,5,25;'; + + * maxmatches - per-query max matches value, as in max_matches parameter + to SetLimits() API call: + + | ... WHERE query='test;maxmatches=2000;'; + + * cutoff - maximum allowed matches, as in cutoff parameter to + SetLimits() API call: + + | ... WHERE query='test;cutoff=10000;'; + + * maxquerytme - maximum allowed query time (in milliseconds), as in + SetMaxQueryTime() API call: + + | ... WHERE query='test;maxquerytime=1000;'; + + * groupby - group-by function and attribute, corresponding to + SetGroupBy() API call: + + | ... WHERE query='test;groupby=day:published_ts;'; + | ... WHERE query='test;groupby=attr:group_id;'; + + * groupsort - group-by sorting clause: + + | ... WHERE query='test;groupsort=@count desc;'; + + * distinct - an attribute to compute COUNT(DISTINCT) for when doing + group-by, as in SetGroupDistinct() API call: + + | ... WHERE query='test;groupby=attr:country_id;distinct=site_id'; + + * indexweights - comma-separated list of index names and weights to use + when searching through several indexes: + + | ... WHERE query='test;indexweights=idx_exact,2,idx_stemmed,1;'; + + * comment - a string to mark this query in query log (mapping to + $comment parameter in Query() API call): + + | ... WHERE query='test;comment=marker001;'; + + * select - a string with expressions to compute (mapping to SetSelect() + API call): + + | ... WHERE query='test;select=2*a+3*b as myexpr;'; + + * host, port - remote searchd host name and TCP port, respectively: + + | ... WHERE query='test;host=sphinx-test.loc;port=7312;'; + + * ranker - a ranking function to use when matching mode is extended2 + (i.e. with query syntax), as in SetRankingMode() API call. Known + values are "proximity_bm25", "bm25", "none", "wordcount", "proximity", + "matchany", and "fieldmask". + + | ... WHERE query='test;mode=extended2;ranker=bm25;'; + + * geoanchor - geodistance anchor, as in SetGeoAnchor() API call. Takes + 4 parameters which are latitude and longiture attribute names, and + anchor point coordinates respectively: + + | ... WHERE query='test;geoanchor=latattr,lonattr,0.123,0.456'; + +One very important note that it is much more efficient to allow Sphinx to +perform sorting, filtering and slicing the result set than to raise max +matches count and use WHERE, ORDER BY and LIMIT clauses on MySQL side. This +is for two reasons. First, Sphinx does a number of optimizations and +performs better than MySQL on these tasks. Second, less data would need to +be packed by searchd, transferred and unpacked by SphinxSE. + +Starting with version 0.9.9-rc1, additional query info besides result set +could be retrieved with SHOW ENGINE SPHINX STATUS statement: + + | mysql> SHOW ENGINE SPHINX STATUS; + | +--------+-------+-------------------------------------------------+ + | | Type | Name | Status | + | +--------+-------+-------------------------------------------------+ + | | SPHINX | stats | total: 25, total found: 25, time: 126, words: 2 | + | | SPHINX | words | sphinx:591:1256 soft:11076:15945 | + | +--------+-------+-------------------------------------------------+ + | 2 rows in set (0.00 sec) + +This information can also be accessed through status variables. Note that +this method does not require super-user privileges. + + | mysql> SHOW STATUS LIKE 'sphinx_%'; + | +--------------------+----------------------------------+ + | | Variable_name | Value | + | +--------------------+----------------------------------+ + | | sphinx_total | 25 | + | | sphinx_total_found | 25 | + | | sphinx_time | 126 | + | | sphinx_word_count | 2 | + | | sphinx_words | sphinx:591:1256 soft:11076:15945 | + | +--------------------+----------------------------------+ + | 5 rows in set (0.00 sec) + +You could perform JOINs on SphinxSE search table and tables using other +engines. Here's an example with "documents" from example.sql: + + | mysql> SELECT content, date_added FROM test.documents docs + | -> JOIN t1 ON (docs.id=t1.id) + | -> WHERE query="one document;mode=any"; + | +-------------------------------------+---------------------+ + | | content | docdate | + | +-------------------------------------+---------------------+ + | | this is my test document number two | 2006-06-17 14:04:28 | + | | this is my test document number one | 2006-06-17 14:04:28 | + | +-------------------------------------+---------------------+ + | 2 rows in set (0.00 sec) + | + | mysql> SHOW ENGINE SPHINX STATUS; + | +--------+-------+---------------------------------------------+ + | | Type | Name | Status | + | +--------+-------+---------------------------------------------+ + | | SPHINX | stats | total: 2, total found: 2, time: 0, words: 2 | + | | SPHINX | words | one:1:2 document:2:2 | + | +--------+-------+---------------------------------------------+ + | 2 rows in set (0.00 sec) + +9.4. Building snippets (excerpts) via MySQL +=========================================== + +Starting with version 0.9.9-rc2, SphinxSE also includes a UDF function that +lets you create snippets through MySQL. The functionality is fully similar +to BuildExcerprts API call but accesible through MySQL+SphinxSE. + +The binary that provides the UDF is named sphinx.so and should be +automatically built and installed to proper location along with SphinxSE +itself. If it does not get installed automatically for some reason, look +for sphinx.so in the build directory and copy it to the plugins directory +of your MySQL instance. After that, register the UDF using the following +statement: + + | CREATE FUNCTION sphinx_snippets RETURNS STRING SONAME 'sphinx.so'; + +Function name must be sphinx_snippets, you can not use an arbitrary name. +Function arguments are as follows: + +Prototype: function sphinx_snippets ( document, index, words, [options] ); + +Document and words arguments can be either strings or table columns. +Options must be specified like this: 'value' AS option_name. For a list of +supported options, refer to BuildExcerprts() API call. The only +UDF-specific additional option is named 'sphinx' and lets you specify +searchd location (host and port). + +Usage examples: + + | SELECT sphinx_snippets('hello world doc', 'main', 'world', + | 'sphinx://192.168.1.1/' AS sphinx, true AS exact_phrase, + | '[b]' AS before_match, '[/b]' AS after_match) + | FROM documents; + | + | SELECT title, sphinx_snippets(text, 'index', 'mysql php') AS text + | FROM sphinx, documents + | WHERE query='mysql php' AND sphinx.id=documents.id; + +Chapter 10. Reporting bugs +========================== + +Unfortunately, Sphinx is not yet 100% bug free (even though I'm working +hard towards that), so you might occasionally run into some issues. + +Reporting as much as possible about each bug is very important - because to +fix it, I need to be able either to reproduce and debug the bug, or to +deduce what's causing it from the information that you provide. So here are +some instructions on how to do that. + +Build-time issues +================= + +If Sphinx fails to build for some reason, please do the following: + + 1. check that headers and libraries for your DBMS are properly installed + (for instance, check that mysql-devel package is present); + + 2. report Sphinx version and config file (be sure to remove the + passwords!), MySQL (or PostgreSQL) configuration info, gcc version, + OS version and CPU type (ie. x86, x86-64, PowerPC, etc): + + | mysql_config + | gcc --version + | uname -a + + 3. report the error message which is produced by configure or gcc (it + should be to include error message itself only, not the whole build + log). + +Run-time issues +=============== + +If Sphinx builds and runs, but there are any problems running it, please do +the following: + + 1. describe the bug (ie. both the expected behavior and actual behavior) + and all the steps necessary to reproduce it; + + 2. include Sphinx version and config file (be sure to remove the + passwords!), MySQL (or PostgreSQL) version, gcc version, OS version + and CPU type (ie. x86, x86-64, PowerPC, etc): + + | mysql --version + | gcc --version + | uname -a + + 3. build, install and run debug versions of all Sphinx programs (this is + to enable a lot of additional internal checks, so-called assertions): + + | make distclean + | ./configure --with-debug + | make install + | killall -TERM searchd + + 4. reindex to check if any assertions are triggered (in this case, it's + likely that the index is corrupted and causing problems); + + 5. if the bug does not reproduce with debug versions, revert to + non-debug and mention it in your report; + + 6. if the bug could be easily reproduced with a small (1-100 record) + part of your database, please provide a gzipped dump of that part; + + 7. if the problem is related to searchd, include relevant entries from + searchd.log and query.log in your bug report; + + 8. if the problem is related to searchd, try running it in console mode + and check if it dies with an assertion: + + | ./searchd --console + + 9. if any program dies with an assertion, provide the assertion message. + +Debugging assertions, crashes and hangups +========================================= + +If any program dies with an assertion, crashes without an assertion or +hangs up, you would additionally need to generate a core dump and examine +it. + + 1. enable core dumps. On most Linux systems, this is done using ulimit: + + | ulimit -c 32768 + + 2. run the program and try to reproduce the bug; + + 3. if the program crashes (either with or without an assertion), find + the core file in current directory (it should typically print out + "Segmentation fault (core dumped)" message); + + 4. if the program hangs, use kill -SEGV from another console to force it + to exit and dump core: + + | kill -SEGV HANGED-PROCESS-ID + + 5. use gdb to examine the core file and obtain a backtrace: + + | gdb ./CRASHED-PROGRAM-FILE-NAME CORE-DUMP-FILE-NAME + | (gdb) bt + | (gdb) quit + +Note that HANGED-PROCESS-ID, CRASHED-PROGRAM-FILE-NAME and +CORE-DUMP-FILE-NAME must all be replaced with specific numbers and file +names. For example, hanged searchd debugging session would look like: + + | # kill -SEGV 12345 + | # ls *core* + | core.12345 + | # gdb ./searchd core.12345 + | (gdb) bt + | ... + | (gdb) quit + +Note that ulimit is not server-wide and only affects current shell session. +This means that you will not have to restore any server-wide limits - but +if you relogin, you will have to set ulimit again. + +Core dumps should be placed in current working directory (and Sphinx +programs do not change it), so this is where you would look for them. + +Please do not immediately remove the core file because there could be +additional helpful information which could be retrieved from it. You do not +need to send me this file (as the debug info there is closely tied to your +system) but I might need to ask you a few additional questions about it. + +Chapter 11. sphinx.conf options reference +========================================= + +Table of Contents + +11.1. Data source configuration options + 11.1.1. type + 11.1.2. sql_host + 11.1.3. sql_port + 11.1.4. sql_user + 11.1.5. sql_pass + 11.1.6. sql_db + 11.1.7. sql_sock + 11.1.8. mysql_connect_flags + 11.1.9. mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca + 11.1.10. odbc_dsn + 11.1.11. sql_query_pre + 11.1.12. sql_query + 11.1.13. sql_joined_field + 11.1.14. sql_query_range + 11.1.15. sql_range_step + 11.1.16. sql_query_killlist + 11.1.17. sql_attr_uint + 11.1.18. sql_attr_bool + 11.1.19. sql_attr_bigint + 11.1.20. sql_attr_timestamp + 11.1.21. sql_attr_str2ordinal + 11.1.22. sql_attr_float + 11.1.23. sql_attr_multi + 11.1.24. sql_attr_string + 11.1.25. sql_attr_str2wordcount + 11.1.26. sql_column_buffers + 11.1.27. sql_field_string + 11.1.28. sql_field_str2wordcount + 11.1.29. sql_file_field + 11.1.30. sql_query_post + 11.1.31. sql_query_post_index + 11.1.32. sql_ranged_throttle + 11.1.33. sql_query_info + 11.1.34. xmlpipe_command + 11.1.35. xmlpipe_field + 11.1.36. xmlpipe_field_string + 11.1.37. xmlpipe_field_wordcount + 11.1.38. xmlpipe_attr_uint + 11.1.39. xmlpipe_attr_bool + 11.1.40. xmlpipe_attr_timestamp + 11.1.41. xmlpipe_attr_str2ordinal + 11.1.42. xmlpipe_attr_float + 11.1.43. xmlpipe_attr_multi + 11.1.44. xmlpipe_attr_string + 11.1.45. xmlpipe_fixup_utf8 + 11.1.46. mssql_winauth + 11.1.47. mssql_unicode + 11.1.48. unpack_zlib + 11.1.49. unpack_mysqlcompress + 11.1.50. unpack_mysqlcompress_maxsize + +11.2. Index configuration options + 11.2.1. type + 11.2.2. source + 11.2.3. path + 11.2.4. docinfo + 11.2.5. mlock + 11.2.6. morphology + 11.2.7. dict + 11.2.8. index_sp + 11.2.9. index_zones + 11.2.10. min_stemming_len + 11.2.11. stopwords + 11.2.12. wordforms + 11.2.13. exceptions + 11.2.14. min_word_len + 11.2.15. charset_type + 11.2.16. charset_table + 11.2.17. ignore_chars + 11.2.18. min_prefix_len + 11.2.19. min_infix_len + 11.2.20. prefix_fields + 11.2.21. infix_fields + 11.2.22. enable_star + 11.2.23. ngram_len + 11.2.24. ngram_chars + 11.2.25. phrase_boundary + 11.2.26. phrase_boundary_step + 11.2.27. html_strip + 11.2.28. html_index_attrs + 11.2.29. html_remove_elements + 11.2.30. local + 11.2.31. agent + 11.2.32. agent_blackhole + 11.2.33. agent_connect_timeout + 11.2.34. agent_query_timeout + 11.2.35. preopen + 11.2.36. ondisk_dict + 11.2.37. inplace_enable + 11.2.38. inplace_hit_gap + 11.2.39. inplace_docinfo_gap + 11.2.40. inplace_reloc_factor + 11.2.41. inplace_write_factor + 11.2.42. index_exact_words + 11.2.43. overshort_step + 11.2.44. stopword_step + 11.2.45. hitless_words + 11.2.46. expand_keywords + 11.2.47. blend_chars + 11.2.48. blend_mode + 11.2.49. rt_mem_limit + 11.2.50. rt_field + 11.2.51. rt_attr_uint + 11.2.52. rt_attr_bigint + 11.2.53. rt_attr_float + 11.2.54. rt_attr_timestamp + 11.2.55. rt_attr_string + +11.3. indexer program configuration options + 11.3.1. mem_limit + 11.3.2. max_iops + 11.3.3. max_iosize + 11.3.4. max_xmlpipe2_field + 11.3.5. write_buffer + 11.3.6. max_file_field_buffer + +11.4. searchd program configuration options + 11.4.1. listen + 11.4.2. address + 11.4.3. port + 11.4.4. log + 11.4.5. query_log + 11.4.6. query_log_format + 11.4.7. read_timeout + 11.4.8. client_timeout + 11.4.9. max_children + 11.4.10. pid_file + 11.4.11. max_matches + 11.4.12. seamless_rotate + 11.4.13. preopen_indexes + 11.4.14. unlink_old + 11.4.15. attr_flush_period + 11.4.16. ondisk_dict_default + 11.4.17. max_packet_size + 11.4.18. mva_updates_pool + 11.4.19. crash_log_path + 11.4.20. max_filters + 11.4.21. max_filter_values + 11.4.22. listen_backlog + 11.4.23. read_buffer + 11.4.24. read_unhinted + 11.4.25. max_batch_queries + 11.4.26. subtree_docs_cache + 11.4.27. subtree_hits_cache + 11.4.28. workers + 11.4.29. dist_threads + 11.4.30. binlog_path + 11.4.31. binlog_flush + 11.4.32. binlog_max_log_size + 11.4.33. collation_server + 11.4.34. collation_libc_locale + 11.4.35. plugin_dir + 11.4.36. mysql_version_string + 11.4.37. rt_flush_period + 11.4.38. thread_stack + 11.4.39. expansion_limit + 11.4.40. compat_sphinxql_magics + 11.4.41. watchdog + +11.1. Data source configuration options +======================================= + +11.1.1. type +------------ + +Data source type. Mandatory, no default value. Known types are mysql, +pgsql, mssql, xmlpipe and xmlpipe2, and odbc. + +All other per-source options depend on source type selected by this option. +Names of the options used for SQL sources (ie. MySQL, PostgreSQL, MS SQL) +start with "sql_"; names of the ones used for xmlpipe and xmlpipe2 start +with "xmlpipe_". All source types except xmlpipe are conditional; they +might or might not be supported depending on your build settings, installed +client libraries, etc. mssql type is currently only available on Windows. +odbc type is available both on Windows natively and on Linux through +UnixODBC library. + +Example: + + | type = mysql + +11.1.2. sql_host +---------------- + +SQL server host to connect to. Mandatory, no default value. Applies to SQL +source types (mysql, pgsql, mssql) only. + +In the simplest case when Sphinx resides on the same host with your MySQL +or PostgreSQL installation, you would simply specify "localhost". Note that +MySQL client library chooses whether to connect over TCP/IP or over UNIX +socket based on the host name. Specifically "localhost" will force it to +use UNIX socket (this is the default and generally recommended mode) and +"127.0.0.1" will force TCP/IP usage. Refer to MySQL manual for more +details. + +Example: + + | sql_host = localhost + +11.1.3. sql_port +---------------- + +SQL server IP port to connect to. Optional, default is 3306 for mysql +source type and 5432 for pgsql type. Applies to SQL source types (mysql, +pgsql, mssql) only. Note that it depends on sql_host setting whether this +value will actually be used. + +Example: + + | sql_port = 3306 + +11.1.4. sql_user +---------------- + +SQL user to use when connecting to sql_host. Mandatory, no default value. +Applies to SQL source types (mysql, pgsql, mssql) only. + +Example: + + | sql_user = test + +11.1.5. sql_pass +---------------- + +SQL user password to use when connecting to sql_host. Mandatory, no default +value. Applies to SQL source types (mysql, pgsql, mssql) only. + +Example: + + | sql_pass = mysecretpassword + +11.1.6. sql_db +-------------- + +SQL database (in MySQL terms) to use after the connection and perform +further queries within. Mandatory, no default value. Applies to SQL source +types (mysql, pgsql, mssql) only. + +Example: + + | sql_db = test + +11.1.7. sql_sock +---------------- + +UNIX socket name to connect to for local SQL servers. Optional, default +value is empty (use client library default settings). Applies to SQL source +types (mysql, pgsql, mssql) only. + +On Linux, it would typically be /var/lib/mysql/mysql.sock. On FreeBSD, it +would typically be /tmp/mysql.sock. Note that it depends on sql_host +setting whether this value will actually be used. + +Example: + + | sql_sock = /tmp/mysql.sock + +11.1.8. mysql_connect_flags +--------------------------- + +MySQL client connection flags. Optional, default value is 0 (do not set any +flags). Applies to mysql source type only. + +This option must contain an integer value with the sum of the flags. The +value will be passed to mysql_real_connect() verbatim. The flags are +enumerated in mysql_com.h include file. Flags that are especially +interesting in regard to indexing, with their respective values, are as +follows: + + * CLIENT_COMPRESS = 32; can use compression protocol + + * CLIENT_SSL = 2048; switch to SSL after handshake + + * CLIENT_SECURE_CONNECTION = 32768; new 4.1 authentication + +For instance, you can specify 2080 (2048+32) to use both compression and +SSL, or 32768 to use new authentication only. Initially, this option was +introduced to be able to use compression when the indexer and mysqld are on +different hosts. Compression on 1 Gbps links is most likely to hurt +indexing time though it reduces network traffic, both in theory and in +practice. However, enabling compression on 100 Mbps links may improve +indexing time significantly (upto 20-30% of the total indexing time +improvement was reported). Your mileage may vary. + +Example: + + | mysql_connect_flags = 32 # enable compression + +11.1.9. mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca +--------------------------------------------------- + +SSL certificate settings to use for connecting to MySQL server. Optional, +default values are empty strings (do not use SSL). Applies to mysql source +type only. + +These directives let you set up secure SSL connection between indexer and +MySQL. The details on creating the certificates and setting up MySQL server +can be found in MySQL documentation. + +Example: + + | mysql_ssl_cert = /etc/ssl/client-cert.pem + | mysql_ssl_key = /etc/ssl/client-key.pem + | mysql_ssl_ca = /etc/ssl/cacert.pem + +11.1.10. odbc_dsn +----------------- + +ODBC DSN to connect to. Mandatory, no default value. Applies to odbc source +type only. + +ODBC DSN (Data Source Name) specifies the credentials (host, user, +password, etc) to use when connecting to ODBC data source. The format +depends on specific ODBC driver used. + +Example: + + | odbc_dsn = Driver={Oracle ODBC Driver};Dbq=myDBName;Uid=myUsername;Pwd=myPassword + +11.1.11. sql_query_pre +---------------------- + +Pre-fetch query, or pre-query. Multi-value, optional, default is empty list +of queries. Applies to SQL source types (mysql, pgsql, mssql) only. + +Multi-value means that you can specify several pre-queries. They are +executed before the main fetch query, and they will be exectued exactly in +order of appeareance in the configuration file. Pre-query results are +ignored. + +Pre-queries are useful in a lot of ways. They are used to setup encoding, +mark records that are going to be indexed, update internal counters, set +various per-connection SQL server options and variables, and so on. + +Perhaps the most frequent pre-query usage is to specify the encoding that +the server will use for the rows it returnes. It must match the encoding +that Sphinx expects (as specified by charset_type and charset_table +options). Two MySQL specific examples of setting the encoding are: + + | sql_query_pre = SET CHARACTER_SET_RESULTS=cp1251 + | sql_query_pre = SET NAMES utf8 + +Also specific to MySQL sources, it is useful to disable query cache (for +indexer connection only) in pre-query, because indexing queries are not +going to be re-run frequently anyway, and there's no sense in caching their +results. That could be achieved with: + + | sql_query_pre = SET SESSION query_cache_type=OFF + +Example: + + | sql_query_pre = SET NAMES utf8 + | sql_query_pre = SET SESSION query_cache_type=OFF + +11.1.12. sql_query +------------------ + +Main document fetch query. Mandatory, no default value. Applies to SQL +source types (mysql, pgsql, mssql) only. + +There can be only one main query. This is the query which is used to +retrieve documents from SQL server. You can specify up to 32 full-text +fields (formally, upto SPH_MAX_FIELDS from sphinx.h), and an arbitrary +amount of attributes. All of the columns that are neither document ID (the +first one) nor attributes will be full-text indexed. + +Document ID MUST be the very first field, and it MUST BE UNIQUE UNSIGNED +POSITIVE (NON-ZERO, NON-NEGATIVE) INTEGER NUMBER. It can be either 32-bit +or 64-bit, depending on how you built Sphinx; by default it builds with +32-bit IDs support but --enable-id64 option to configure allows to build +with 64-bit document and word IDs support. + +Example: + + | sql_query = \ + | SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, \ + | title, content \ + | FROM documents + +11.1.13. sql_joined_field +------------------------- + +Joined/payload field fetch query. Multi-value, optional, default is empty +list of queries. Applies to SQL source types (mysql, pgsql, mssql) only. + +sql_joined_field lets you use two different features: joined fields, and +payloads (payload fields). It's syntax is as follows: + + | sql_joined_field = FIELD-NAME 'from' ( 'query' | 'payload-query' ); \ + | QUERY [ ; RANGE-QUERY ] + +where + + * FIELD-NAME is a joined/payload field name; + + * QUERY is an SQL query that must fetch values to index. + + * RANGE-QUERY is an optional SQL query that fetches a range of values to + index. (Added in version 2.0.1-beta.) + +Joined fields let you avoid JOIN and/or GROUP_CONCAT statements in the main +document fetch query (sql_query). This can be useful when SQL-side JOIN is +slow, or needs to be offloaded on Sphinx side, or simply to emulate +MySQL-specific GROUP_CONCAT funcionality in case your database server does +not support it. + +The query must return exactly 2 columns: document ID, and text to append to +a joined field. Document IDs can be duplicate, but they must be in +ascending order. All the text rows fetched for a given ID will be +concatented together, and the concatenation result will be indexed as the +entire contents of a joined field. Rows will be concatenated in the order +returned from the query, and separating whitespace will be inserted between +them. For instance, if joined field query returns the following rows: + + | ( 1, 'red' ) + | ( 1, 'right' ) + | ( 1, 'hand' ) + | ( 2, 'mysql' ) + | ( 2, 'sphinx' ) + +then the indexing results would be equivalent to that of adding a new text +field with a value of 'red right hand' to document 1 and 'mysql sphinx' to +document 2. + +Joined fields are only indexed differently. There are no other differences +between joined fields and regular text fields. + +Starting with 2.0.1-beta, ranged queries can be used when a single query is +not efficient enough or does not work because of the database driver +limitations. It works similar to the ranged queries in the main indexing +loop, see Section 3.7, <>. The range will be queried for +and fetched upfront once, then multiple queries with different $start and +$end substitutions will be run to fetch the actual data. + +Payloads let you create a special field in which, instead of keyword +positions, so-called user payloads are stored. Payloads are custom integer +values attached to every keyword. They can then be used in search time to +affect the ranking. + +The payload query must return exactly 3 columns: document ID; keyword; and +integer payload value. Document IDs can be duplicate, but they must be in +ascending order. Payloads must be unsigned integers within 24-bit range, +ie. from 0 to 16777215. For reference, payloads are currently internally +stored as in-field keyword positions, but that is not guaranteed and might +change in the future. + +Currently, the only method to account for payloads is to use +SPH_RANK_PROXIMITY_BM25 ranker. On indexes with payload fields, it will +automatically switch to a variant that matches keywords in those fields, +computes a sum of matched payloads multiplied by field wieghts, and adds +that sum to the final rank. + +Example: + + | sql_joined_field = \ + | tagstext from query; \ + | SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC + +11.1.14. sql_query_range +------------------------ + +Range query setup. Optional, default is empty. Applies to SQL source types +(mysql, pgsql, mssql) only. + +Setting this option enables ranged document fetch queries (see Section 3.7, +<>). Ranged queries are useful to avoid notorious MyISAM +table locks when indexing lots of data. (They also help with other less +notorious issues, such as reduced performance caused by big result sets, or +additional resources consumed by InnoDB to serialize big read +transactions.) + +The query specified in this option must fetch min and max document IDs that +will be used as range boundaries. It must return exactly two integer +fields, min ID first and max ID second; the field names are ignored. + +When ranged queries are enabled, sql_query will be required to contain +$start and $end macros (because it obviously would be a mistake to index +the whole table many times over). Note that the intervals specified by +$start..$end will not overlap, so you should not remove document IDs that +are exactly equal to $start or $end from your query. The example in +Section 3.7, <>) illustrates that; note how it uses +greater-or-equal and less-or-equal comparisons. + +Example: + + | sql_query_range = SELECT MIN(id),MAX(id) FROM documents + +11.1.15. sql_range_step +----------------------- + +Range query step. Optional, default is 1024. Applies to SQL source types +(mysql, pgsql, mssql) only. + +Only used when ranged queries are enabled. The full document IDs interval +fetched by sql_query_range will be walked in this big steps. For example, +if min and max IDs fetched are 12 and 3456 respectively, and the step is +1000, indexer will call sql_query several times with the following +substitutions: + + * $start=12, $end=1011 + + * $start=1012, $end=2011 + + * $start=2012, $end=3011 + + * $start=3012, $end=3456 + +Example: + + | sql_range_step = 1000 + +11.1.16. sql_query_killlist +--------------------------- + +Kill-list query. Optional, default is empty (no query). Applies to SQL +source types (mysql, pgsql, mssql) only. Introduced in version 0.9.9-rc1. + +This query is expected to return a number of 1-column rows, each containing +just the document ID. The returned document IDs are stored within an index. +Kill-list for a given index suppresses results from other indexes, +depending on index order in the query. The intended use is to help +implement deletions and updates on existing indexes without rebuilding +(actually even touching them), and especially to fight phantom results +problem. + +Let us dissect an example. Assume we have two indexes, 'main' and 'delta'. +Assume that documents 2, 3, and 5 were deleted since last reindex of +'main', and documents 7 and 11 were updated (ie. their text contents were +changed). Assume that a keyword 'test' occurred in all these mentioned +documents when we were indexing 'main'; still occurs in document 7 as we +index 'delta'; but does not occur in document 11 any more. We now reindex +delta and then search through both these indexes in proper (least to most +recent) order: + + | $res = $cl->Query ( "test", "main delta" ); + +First, we need to properly handle deletions. The result set should not +contain documents 2, 3, or 5. Second, we also need to avoid phantom +results. Unless we do something about it, document 11 will appear in search +results! It will be found in 'main' (but not 'delta'). And it will make it +to the final result set unless something stops it. + +Kill-list, or K-list for short, is that something. Kill-list attached to +'delta' will suppress the specified rows from all the preceding indexes, in +this case just 'main'. So to get the expected results, we should put all +the updated and deleted document IDs into it. + +Example: + + | sql_query_killlist = \ + | SELECT id FROM documents WHERE updated_ts>=@last_reindex UNION \ + | SELECT id FROM documents_deleted WHERE deleted_ts>=@last_reindex + +11.1.17. sql_attr_uint +---------------------- + +Unsigned integer attribute declaration. Multi-value (there might be +multiple attributes declared), optional. Applies to SQL source types +(mysql, pgsql, mssql) only. + +The column value should fit into 32-bit unsigned integer range. Values +outside this range will be accepted but wrapped around. For instance, -1 +will be wrapped around to 2^32-1 or 4,294,967,295. + +You can specify bit count for integer attributes by appending ':BITCOUNT' +to attribute name (see example below). Attributes with less than default +32-bit size, or bitfields, perform slower. But they require less RAM when +using extern storage: such bitfields are packed together in 32-bit chunks +in .spa attribute data file. Bit size settings are ignored if using inline +storage. + +Example: + + | sql_attr_uint = group_id + | sql_attr_uint = forum_id:9 # 9 bits for forum_id + +11.1.18. sql_attr_bool +---------------------- + +Boolean attribute declaration. Multi-value (there might be multiple +attributes declared), optional. Applies to SQL source types (mysql, pgsql, +mssql) only. Equivalent to sql_attr_uint declaration with a bit count of 1. + +Example: + + | sql_attr_bool = is_deleted # will be packed to 1 bit + +11.1.19. sql_attr_bigint +------------------------ + +64-bit signed integer attribute declaration. Multi-value (there might be +multiple attributes declared), optional. Applies to SQL source types +(mysql, pgsql, mssql) only. Note that unlike sql_attr_uint, these values +are signed. Introduced in version 0.9.9-rc1. + +Example: + + | sql_attr_bigint = my_bigint_id + +11.1.20. sql_attr_timestamp +--------------------------- + +UNIX timestamp attribute declaration. Multi-value (there might be multiple +attributes declared), optional. Applies to SQL source types (mysql, pgsql, +mssql) only. + +Timestamps can store date and time in the range of Jan 01, 1970 to Jan 19, +2038 with a precision of one second. The expected column value should be +a timestamp in UNIX format, ie. 32-bit unsigned integer number of seconds +elapsed since midnight, January 01, 1970, GMT. Timestamps are internally +stored and handled as integers everywhere. But in addition to working with +timestamps as integers, it's also legal to use them along with different +date-based functions, such as time segments sorting mode, or +day/week/month/year extraction for GROUP BY. + +Note that DATE or DATETIME column types in MySQL can not be directly used +as timestamp attributes in Sphinx; you need to explicitly convert such +columns using UNIX_TIMESTAMP function (if data is in range). + +Note timestamps can not represent dates before January 01, 1970, and +UNIX_TIMESTAMP() in MySQL will not return anything expected. If you only +needs to work with dates, not times, consider TO_DAYS() function in MySQL +instead. + +Example: + + | sql_attr_timestamp = UNIX_TIMESTAMP(added_datetime) AS added_ts + +11.1.21. sql_attr_str2ordinal +----------------------------- + +Ordinal string number attribute declaration. Multi-value (there might be +multiple attributes declared), optional. Applies to SQL source types +(mysql, pgsql, mssql) only. + +This attribute type (so-called ordinal, for brevity) is intended to allow +sorting by string values, but without storing the strings themselves. When +indexing ordinals, string values are fetched from database, temporarily +stored, sorted, and then replaced by their respective ordinal numbers in +the array of sorted strings. So, the ordinal number is an integer such that +sorting by it produces the same result as if lexicographically sorting by +original strings. by string values lexicographically. + +Earlier versions could consume a lot of RAM for indexing ordinals. Starting +with revision r1112, ordinals accumulation and sorting also runs in fixed +memory (at the cost of using additional temporary disk space), and honors +mem_limit settings. + +Ideally the strings should be sorted differently, depending on the encoding +and locale. For instance, if the strings are known to be Russian text in +KOI8R encoding, sorting the bytes 0xE0, 0xE1, and 0xE2 should produce 0xE1, +0xE2 and 0xE0, because in KOI8R value 0xE0 encodes a character that is +(noticeably) after characters encoded by 0xE1 and 0xE2. Unfortunately, +Sphinx does not support that at the moment and will simply sort the strings +bytewise. + +Note that the ordinals are by construction local to each index, and it's +therefore impossible to merge ordinals while retaining the proper order. +The processed strings are replaced by their sequential number in the index +they occurred in, but different indexes have different sets of strings. For +instance, if 'main' index contains strings "aaa", "bbb", "ccc", and so on +up to "zzz", they'll be assigned numbers 1, 2, 3, and so on up to 26, +respectively. But then if 'delta' only contains "zzz" the assigned number +will be 1. And after the merge, the order will be broken. Unfortunately, +this is impossible to workaround without storing the original strings (and +once Sphinx supports storing the original strings, ordinals will not be +necessary any more). + +Example: + + | sql_attr_str2ordinal = author_name + +11.1.22. sql_attr_float +----------------------- + +Floating point attribute declaration. Multi-value (there might be multiple +attributes declared), optional. Applies to SQL source types (mysql, pgsql, +mssql) only. + +The values will be stored in single precision, 32-bit IEEE 754 format. +Represented range is approximately from 1e-38 to 1e+38. The amount of +decimal digits that can be stored precisely is approximately 7. One +important usage of the float attributes is storing latitude and longitude +values (in radians), for further usage in query-time geosphere distance +calculations. + +Example: + + | sql_attr_float = lat_radians + | sql_attr_float = long_radians + +11.1.23. sql_attr_multi +----------------------- + +Multi-valued attribute (MVA) declaration. Multi-value (ie. there may be +more than one such attribute declared), optional. Applies to SQL source +types (mysql, pgsql, mssql) only. + +Plain attributes only allow to attach 1 value per each document. However, +there are cases (such as tags or categories) when it is desired to attach +multiple values of the same attribute and be able to apply filtering or +grouping to value lists. + +The declaration format is as follows (backslashes are for clarity only; +everything can be declared in a single line as well): + + | sql_attr_multi = ATTR-TYPE ATTR-NAME 'from' SOURCE-TYPE \ + | [;QUERY] \ + | [;RANGE-QUERY] + +where + + * ATTR-TYPE is 'uint' or 'timestamp' + + * SOURCE-TYPE is 'field', 'query', or 'ranged-query' + + * QUERY is SQL query used to fetch all ( docid, attrvalue ) pairs + + * RANGE-QUERY is SQL query used to fetch min and max ID values, similar + to 'sql_query_range' + +Example: + + | sql_attr_multi = uint tag from query; SELECT id, tag FROM tags + | sql_attr_multi = uint tag from ranged-query; \ + | SELECT id, tag FROM tags WHERE id>=$start AND id<=$end; \ + | SELECT MIN(id), MAX(id) FROM tags + +11.1.24. sql_attr_string +------------------------ + +String attribute declaration. Multi-value (ie. there may be more than one +such attribute declared), optional. Applies to SQL source types (mysql, +pgsql, mssql) only. Introduced in version 1.10-beta. + +String attributes can store arbitrary strings attached to every document. +There's a fixed size limit of 4 MB per value. Also, searchd will currently +cache all the values in RAM, which is an additional implicit limit. + +As of 1.10-beta, strings can only be used for storage and retrieval. They +can not participate in expressions, be used for filtering, sorting, or +grouping (ie. in WHERE, ORDER or GROUP clauses). Note that attributes +declared using sql_attr_string will not be full-text indexed; you can use +sql_field_string directive for that. + +Example: + + | sql_attr_string = title # will be stored but will not be indexed + +11.1.25. sql_attr_str2wordcount +------------------------------- + +Word-count attribute declaration. Multi-value (ie. there may be more than +one such attribute declared), optional. Applies to SQL source types (mysql, +pgsql, mssql) only. Introduced in version 1.10-beta. + +Word-count attribute takes a string column, tokenizes it according to index +settings, and stores the resulting number of tokens in an attribute. This +number of tokens ("word count") is a normal integer that can be later used, +for instance, in custom ranking expressions (boost shorter titles, help +identify exact field matches, etc). + +Example: + + | sql_attr_str2wordcount = title_wc + +11.1.26. sql_column_buffers +--------------------------- + +Per-column buffer sizes. Optional, default is empty (deduce the sizes +automatically). Applies to odbc, mssql source types only. Introduced in +version 2.0.1-beta. + +ODBC and MS SQL drivers sometimes can not return the maximum actual column +size to be expected. For instance, NVARCHAR(MAX) columns always report +their length as 2147483647 bytes to indexer even though the actually used +length is likely considerably less. However, the receiving buffers still +need to be allocated upfront, and their sizes have to be determined. When +the driver does not report the column length at all, Sphinx allocates +default 1 KB buffers for each non-char column, and 1 MB buffers for each +char column. Driver-reported column length also gets clamped by an upper +limie of 8 MB, so in case the driver reports (almost) a 2 GB column length, +it will be clamped and a 8 MB buffer will be allocated instead for that +column. These hard-coded limits can be overridden using the +sql_column_buffers directive, either in order to save memory on actually +shorter columns, or overcome the 8 MB limit on actually longer columns. The +directive values must be a comma-separated lists of selected column names +and sizes: + + | sql_column_buffers = =[K|M] [, ...] + +Example: + + | sql_query = SELECT id, mytitle, mycontent FROM documents + | sql_column_buffers = mytitle=64K, mycontent=10M + +11.1.27. sql_field_string +------------------------- + +Combined string attribute and full-text field declaration. Multi-value (ie. +there may be more than one such attribute declared), optional. Applies to +SQL source types (mysql, pgsql, mssql) only. Introduced in version +1.10-beta. + +sql_attr_string only stores the column value but does not full-text index +it. In some cases it might be desired to both full-text index the column +and store it as attribute. sql_field_string lets you do exactly that. Both +the field and the attribute will be named the same. + +Example: + + | sql_field_string = title # will be both indexed and stored + +11.1.28. sql_field_str2wordcount +-------------------------------- + +Combined word-count attribute and full-text field declaration. Multi-value +(ie. there may be more than one such attribute declared), optional. Applies +to SQL source types (mysql, pgsql, mssql) only. Introduced in version +1.10-beta. + +sql_attr_str2wordcount only stores the column word count but does not +full-text index it. In some cases it might be desired to both full-text +index the column and also have the count. sql_field_str2wordcount lets you +do exactly that. Both the field and the attribute will be named the same. + +Example: + + | sql_field_str2wordcount = title # will be indexed, and counted/stored + +11.1.29. sql_file_field +----------------------- + +File based field declaration. Applies to SQL source types (mysql, pgsql, +mssql) only. Introduced in version 1.10-beta. + +This directive makes indexer interpret field contents as a file name, and +load and index the referred file. Files larger than max_file_field_buffer +in size are skipped. Any errors during the file loading (IO errors, missed +limits, etc) will be reported as indexing warnings and will not early +terminate the indexing. No content will be indexed for such files. + +Example: + + | sql_file_field = my_file_path # load and index files referred to by my_file_path + +11.1.30. sql_query_post +----------------------- + +Post-fetch query. Optional, default value is empty. Applies to SQL source +types (mysql, pgsql, mssql) only. + +This query is executed immediately after sql_query completes successfully. +When post-fetch query produces errors, they are reported as warnings, but +indexing is not terminated. It's result set is ignored. Note that indexing +is not yet completed at the point when this query gets executed, and +further indexing still may fail. Therefore, any permanent updates should +not be done from here. For instance, updates on helper table that +permanently change the last successfully indexed ID should not be run from +post-fetch query; they should be run from post-index query instead. + +Example: + + | sql_query_post = DROP TABLE my_tmp_table + +11.1.31. sql_query_post_index +----------------------------- + +Post-index query. Optional, default value is empty. Applies to SQL source +types (mysql, pgsql, mssql) only. + +This query is executed when indexing is fully and succesfully completed. If +this query produces errors, they are reported as warnings, but indexing is +not terminated. It's result set is ignored. $maxid macro can be used in its +text; it will be expanded to maximum document ID which was actually fetched +from the database during indexing. If no documents were indexed, $maxid +will be expanded to 0. + +Example: + + | sql_query_post_index = REPLACE INTO counters ( id, val ) \ + | VALUES ( 'max_indexed_id', $maxid ) + +11.1.32. sql_ranged_throttle +---------------------------- + +Ranged query throttling period, in milliseconds. Optional, default is 0 (no +throttling). Applies to SQL source types (mysql, pgsql, mssql) only. + +Throttling can be useful when indexer imposes too much load on the database +server. It causes the indexer to sleep for given amount of milliseconds +once per each ranged query step. This sleep is unconditional, and is +performed before the fetch query. + +Example: + + | sql_ranged_throttle = 1000 # sleep for 1 sec before each query step + +11.1.33. sql_query_info +----------------------- + +Document info query. Optional, default is empty. Applies to mysql source +type only. + +Only used by CLI search to fetch and display document information, only +works with MySQL at the moment, and only intended for debugging purposes. +This query fetches the row that will be displayed by CLI search utility for +each document ID. It is required to contain $id macro that expands to the +queried document ID. + +Example: + + | sql_query_info = SELECT * FROM documents WHERE id=$id + +11.1.34. xmlpipe_command +------------------------ + +Shell command that invokes xmlpipe stream producer. Mandatory. Applies to +xmlpipe and xmlpipe2 source types only. + +Specifies a command that will be executed and which output will be parsed +for documents. Refer to Section 3.8, <> or +Section 3.9, <> for specific format description. + +Example: + + | xmlpipe_command = cat /home/sphinx/test.xml + +11.1.35. xmlpipe_field +---------------------- + +xmlpipe field declaration. Multi-value, optional. Applies to xmlpipe2 +source type only. Refer to Section 3.9, <>. + +Example: + + | xmlpipe_field = subject + | xmlpipe_field = content + +11.1.36. xmlpipe_field_string +----------------------------- + +xmlpipe field and string attribute declaration. Multi-value, optional. +Applies to xmlpipe2 source type only. Refer to Section 3.9, <>. Introduced in version 1.10-beta. + +Makes the specified XML element indexed as both a full-text field and +a string attribute. Equivalent to declaration within the XML file. + +Example: + + | xmlpipe_field_string = subject + +11.1.37. xmlpipe_field_wordcount +-------------------------------- + +xmlpipe field and word count attribute declaration. Multi-value, optional. +Applies to xmlpipe2 source type only. Refer to Section 3.9, <>. Introduced in version 1.10-beta. + +Makes the specified XML element indexed as both a full-text field and +a word count attribute. Equivalent to declaration within the XML file. + +Example: + + | xmlpipe_field_wordcount = subject + +11.1.38. xmlpipe_attr_uint +-------------------------- + +xmlpipe integer attribute declaration. Multi-value, optional. Applies to +xmlpipe2 source type only. Syntax fully matches that of sql_attr_uint. + +Example: + + | xmlpipe_attr_uint = author + +11.1.39. xmlpipe_attr_bool +-------------------------- + +xmlpipe boolean attribute declaration. Multi-value, optional. Applies to +xmlpipe2 source type only. Syntax fully matches that of sql_attr_bool. + +Example: + + | xmlpipe_attr_bool = is_deleted # will be packed to 1 bit + +11.1.40. xmlpipe_attr_timestamp +------------------------------- + +xmlpipe UNIX timestamp attribute declaration. Multi-value, optional. +Applies to xmlpipe2 source type only. Syntax fully matches that of +sql_attr_timestamp. + +Example: + + | xmlpipe_attr_timestamp = published + +11.1.41. xmlpipe_attr_str2ordinal +--------------------------------- + +xmlpipe string ordinal attribute declaration. Multi-value, optional. +Applies to xmlpipe2 source type only. Syntax fully matches that of +sql_attr_str2ordinal. + +Example: + + | xmlpipe_attr_str2ordinal = author_sort + +11.1.42. xmlpipe_attr_float +--------------------------- + +xmlpipe floating point attribute declaration. Multi-value, optional. +Applies to xmlpipe2 source type only. Syntax fully matches that of +sql_attr_float. + +Example: + + | xmlpipe_attr_float = lat_radians + | xmlpipe_attr_float = long_radians + +11.1.43. xmlpipe_attr_multi +--------------------------- + +xmlpipe MVA attribute declaration. Multi-value, optional. Applies to +xmlpipe2 source type only. + +This setting declares an MVA attribute tag in xmlpipe2 stream. The contents +of the specified tag will be parsed and a list of integers that will +constitute the MVA will be extracted, similar to how sql_attr_multi parses +SQL column contents when 'field' MVA source type is specified. + +Example: + + | xmlpipe_attr_multi = taglist + +11.1.44. xmlpipe_attr_string +---------------------------- + +xmlpipe string declaration. Multi-value, optional. Applies to xmlpipe2 +source type only. Introduced in version 1.10-beta. + +This setting declares a string attribute tag in xmlpipe2 stream. The +contents of the specified tag will be parsed and stored as a string value. + +Example: + + | xmlpipe_attr_string = subject + +11.1.45. xmlpipe_fixup_utf8 +--------------------------- + +Perform Sphinx-side UTF-8 validation and filtering to prevent XML parser +from choking on non-UTF-8 documents. Optional, default is 0. Applies to +xmlpipe2 source type only. + +Under certain occasions it might be hard or even impossible to guarantee +that the incoming XMLpipe2 document bodies are in perfectly valid and +conforming UTF-8 encoding. For instance, documents with national +single-byte encodings could sneak into the stream. libexpat XML parser is +fragile, meaning that it will stop processing in such cases. UTF8 fixup +feature lets you avoid that. When fixup is enabled, Sphinx will preprocess +the incoming stream before passing it to the XML parser and replace invalid +UTF-8 sequences with spaces. + +Example: + + | xmlpipe_fixup_utf8 = 1 + +11.1.46. mssql_winauth +---------------------- + +MS SQL Windows authentication flag. Boolean, optional, default value is +0 (false). Applies to mssql source type only. Introduced in version +0.9.9-rc1. + +Whether to use currently logged in Windows account credentials for +authentication when connecting to MS SQL Server. Note that when running +searchd as a service, account user can differ from the account you used to +install the service. + +Example: + + | mssql_winauth = 1 + +11.1.47. mssql_unicode +---------------------- + +MS SQL encoding type flag. Boolean, optional, default value is 0 (false). +Applies to mssql source type only. Introduced in version 0.9.9-rc1. + +Whether to ask for Unicode or single-byte data when querying MS SQL Server. +This flag must be in sync with charset_type directive; that is, to index +Unicode data, you must set both charset_type in the index (to 'utf-8') and +mssql_unicode in the source (to 1). For reference, MS SQL will actually +return data in UCS-2 encoding instead of UTF-8, but Sphinx will +automatically handle that. + +Example: + + | mssql_unicode = 1 + +11.1.48. unpack_zlib +-------------------- + +Columns to unpack using zlib (aka deflate, aka gunzip). Multi-value, +optional, default value is empty list of columns. Applies to SQL source +types (mysql, pgsql, mssql) only. Introduced in version 0.9.9-rc1. + +Columns specified using this directive will be unpacked by indexer using +standard zlib algorithm (called deflate and also implemented by gunzip). +When indexing on a different box than the database, this lets you offload +the database, and save on network traffic. The feature is only available if +zlib and zlib-devel were both available during build time. + +Example: + + | unpack_zlib = col1 + | unpack_zlib = col2 + +11.1.49. unpack_mysqlcompress +----------------------------- + +Columns to unpack using MySQL UNCOMPRESS() algorithm. Multi-value, +optional, default value is empty list of columns. Applies to SQL source +types (mysql, pgsql, mssql) only. Introduced in version 0.9.9-rc1. + +Columns specified using this directive will be unpacked by indexer using +modified zlib algorithm used by MySQL COMPRESS() and UNCOMPRESS() +functions. When indexing on a different box than the database, this lets +you offload the database, and save on network traffic. The feature is only +available if zlib and zlib-devel were both available during build time. + +Example: + + | unpack_mysqlcompress = body_compressed + | unpack_mysqlcompress = description_compressed + +11.1.50. unpack_mysqlcompress_maxsize +------------------------------------- + +Buffer size for UNCOMPRESS()ed data. Optional, default value is 16M. +Introduced in version 0.9.9-rc1. + +When using unpack_mysqlcompress, due to implementation intrincacies it is +not possible to deduce the required buffer size from the compressed data. +So the buffer must be preallocated in advance, and unpacked data can not go +over the buffer size. This option lets you control the buffer size, both to +limit indexer memory use, and to enable unpacking of really long data +fields if necessary. + +Example: + + | unpack_mysqlcompress_maxsize = 1M + +11.2. Index configuration options +================================= + +11.2.1. type +------------ + +Index type. Known values are 'plain', 'distributed', and 'rt'. Optional, +default is 'plain' (plain local index). + +Sphinx supports several different types of indexes. Versions 0.9.x +supported two index types: plain local indexes that are stored and +processed on the local machine; and distributed indexes, that involve not +only local searching but querying remote searchd instances over the network +as well (see Section 5.8, <>). Version 1.10-beta +also adds support for so-called real-time indexes (or RT indexes for short) +that are also stored and processed locally, but additionally allow for +on-the-fly updates of the full-text index (see Chapter 4, Real-time +indexes). Note that attributes can be updated on-the-fly using either plain +local indexes or RT ones. + +Index type setting lets you choose the needed type. By default, plain local +index type will be assumed. + +Example: + + | type = distributed + +11.2.2. source +-------------- + +Adds document source to local index. Multi-value, mandatory. + +Specifies document source to get documents from when the current index is +indexed. There must be at least one source. There may be multiple sources, +without any restrictions on the source types: ie. you can pull part of the +data from MySQL server, part from PostgreSQL, part from the filesystem +using xmlpipe2 wrapper. + +However, there are some restrictions on the source data. First, document +IDs must be globally unique across all sources. If that condition is not +met, you might get unexpected search results. Second, source schemas must +be the same in order to be stored within the same index. + +No source ID is stored automatically. Therefore, in order to be able to +tell what source the matched document came from, you will need to store +some additional information yourself. Two typical approaches include: + + 1. mangling document ID and encoding source ID in it: + + | source src1 + | { + | sql_query = SELECT id*10+1, ... FROM table1 + | ... + | } + | + | source src2 + | { + | sql_query = SELECT id*10+2, ... FROM table2 + | ... + | } + + 2. storing source ID simply as an attribute: + + | source src1 + | { + | sql_query = SELECT id, 1 AS source_id FROM table1 + | sql_attr_uint = source_id + | ... + | } + | + | source src2 + | { + | sql_query = SELECT id, 2 AS source_id FROM table2 + | sql_attr_uint = source_id + | ... + | } + +Example: + + | source = srcpart1 + | source = srcpart2 + | source = srcpart3 + +11.2.3. path +------------ + +Index files path and file name (without extension). Mandatory. + +Path specifies both directory and file name, but without extension. indexer +will append different extensions to this path when generating final names +for both permanent and temporary index files. Permanent data files have +several different extensions starting with '.sp'; temporary files' +extensions start with '.tmp'. It's safe to remove .tmp* files is if indexer +fails to remove them automatically. + +For reference, different index files store the following data: + + * .spa stores document attributes (used in extern docinfo storage mode + only); + + * .spd stores matching document ID lists for each word ID; + + * .sph stores index header information; + + * .spi stores word lists (word IDs and pointers to .spd file); + + * .spk stores kill-lists; + + * .spm stores MVA data; + + * .spp stores hit (aka posting, aka word occurence) lists for each word + ID; + + * .sps stores string attribute data. + +Example: + + | path = /var/data/test1 + +11.2.4. docinfo +--------------- + +Document attribute values (docinfo) storage mode. Optional, default is +'extern'. Known values are 'none', 'extern' and 'inline'. + +Docinfo storage mode defines how exactly docinfo will be physically stored +on disk and RAM. "none" means that there will be no docinfo at all (ie. no +attributes). Normally you need not to set "none" explicitly because Sphinx +will automatically select "none" when there are no attributes configured. +"inline" means that the docinfo will be stored in the .spd file, along with +the document ID lists. "extern" means that the docinfo will be stored +separately (externally) from document ID lists, in a special .spa file. + +Basically, externally stored docinfo must be kept in RAM when querying. for +performance reasons. So in some cases "inline" might be the only option. +However, such cases are infrequent, and docinfo defaults to "extern". Refer +to Section 3.2, <> for in-depth discussion and RAM usage +estimates. + +Example: + + | docinfo = inline + +11.2.5. mlock +------------- + +Memory locking for cached data. Optional, default is 0 (do not call +mlock()). + +For search performance, searchd preloads a copy of .spa and .spi files in +RAM, and keeps that copy in RAM at all times. But if there are no searches +on the index for some time, there are no accesses to that cached copy, and +OS might decide to swap it out to disk. First queries to such "cooled down" +index will cause swap-in and their latency will suffer. + +Setting mlock option to 1 makes Sphinx lock physical RAM used for that +cached data using mlock(2) system call, and that prevents swapping (see man +2 mlock for details). mlock(2) is a privileged call, so it will require +searchd to be either run from root account, or be granted enough privileges +otherwise. If mlock() fails, a warning is emitted, but index continues +working. + +Example: + + | mlock = 1 + +11.2.6. morphology +------------------ + +A list of morphology preprocessors to apply. Optional, default is empty (do +not apply any preprocessor). + +Morphology preprocessors can be applied to the words being indexed to +replace different forms of the same word with the base, normalized form. +For instance, English stemmer will normalize both "dogs" and "dog" to +"dog", making search results for both searches the same. + +Built-in preprocessors include English stemmer, Russian stemmer (that +supports UTF-8 and Windows-1251 encodings), Soundex, and Metaphone. The +latter two replace the words with special phonetic codes that are equal is +words are phonetically close. Additional stemmers provided by Snowball +project libstemmer library can be enabled at compile time using +--with-libstemmer configure option. Built-in English and Russian stemmers +should be faster than their libstemmer counterparts, but can produce +slightly different results, because they are based on an older version. +Metaphone implementation is based on Double Metaphone algorithm and indexes +the primary code. + +Built-in values that are available for use in morphology option are as +follows: + + * none - do not perform any morphology processing; + + * stem_en - apply Porter's English stemmer; + + * stem_ru - apply Porter's Russian stemmer; + + * stem_enru - apply Porter's English and Russian stemmers; + + * stem_cz - apply Czech stemmer; + + * soundex - replace keywords with their SOUNDEX code; + + * metaphone - replace keywords with their METAPHONE code. + +Additional values provided by libstemmer are in 'libstemmer_XXX' format, +where XXX is libstemmer algorithm codename (refer to +libstemmer_c/libstemmer/modules.txt for a complete list). + +Several stemmers can be specified (comma-separated). They will be applied +to incoming words in the order they are listed, and the processing will +stop once one of the stemmers actually modifies the word. Also when +wordforms feature is enabled the word will be looked up in word forms +dictionary first, and if there is a matching entry in the dictionary, +stemmers will not be applied at all. Or in other words, wordforms can be +used to implement stemming exceptions. + +Example: + + | morphology = stem_en, libstemmer_sv + +11.2.7. dict +------------ + +The keywords dictionary type. Known values are 'crc' and 'keywords'. +Optional, default is 'crc'. Introduced in version 2.0.1-beta. + +The default dictionary type in Sphinx, and the only one available until +version 2.0.1-beta, is a so-called CRC dictionary which never stores the +original keyword text in the index. Instead, keywords are replaced with +their control sum value (either CRC32 or FNV64, depending whether Sphinx +was built with --enable-id64) both when searching and indexing, and that +value is used internally in the index. + +That approach has two drawbacks. First, in CRC32 case there is a chance of +control sum collision between several pairs of different keywords, growing +quadratically with the number of unique keywords in the index. (FNV64 case +is unaffected in practice, as a chance of a single FNV64 collision in +a dictionary of 1 billion entries is approximately 1:16, or 6.25 percent. +And most dictionaries will be much more compact that a billion keywords, as +a typical spoken human language has in the region of 1 to 10 million word +forms.) Second, and more importantly, substring searches are not directly +possible with control sums. Sphinx alleviated that by pre-indexing all the +possible substrings as separate keywords (see Section 11.2.18, +<>, Section 11.2.19, <> directives). That +actually has an added benefit of matching substrings in the quickest way +possible. But at the same time pre-indexing all substrings grows the index +size a lot (factors of 3-10x and even more would not be unusual) and +impacts the indexing time respectively, rendering substring searches on big +indexes rather impractical. + +Keywords dictionary, introduced in 2.0.1-beta, fixes both these drawbacks. +It stores the keywords in the index and performs search-time wildcard +expansion. For example, a search for a 'test*' prefix could internally +expand to 'test|tests|testing' query based on the dictionary contents. That +expansion is fully transparent to the application, except that the separate +per-keyword statistics for all the actually matched keywords would now also +be reported. + +Indexing with keywords dictionary should be 1.1x to 1.3x slower compared to +regular, non-substring indexing - but times faster compared to substring +indexing (either prefix or infix). Index size should only be slightly +bigger that than of the regular non-substring index, with a 1..10% percent +total difference Regular keyword searching time must be very close or +identical across all three discussed index kinds (CRC non-substring, CRC +substring, keywords). Substring searching time can vary greatly depending +on how many actual keywords match the given substring (in other words, into +how many keywords does the search term expand). The maximum number of +keywords matched is restricted by the expansion_limit directive. + +Essentially, keywords and CRC dictionaries represent the two different +trade-off substring searching decisions. You can choose to either sacrifice +indexing time and index size in favor of top-speed worst-case searches (CRC +dictionary), or only slightly impact indexing time but sacrifice worst-case +searching time when the prefix expands into very many keywords (keywords +dictionary). + +Example: + + | dict = keywords + +11.2.8. index_sp +---------------- + +Whether to detect and index sentence and paragraph boundaries. Optional, +default is 0 (do not detect and index). Introduced in version 2.0.1-beta. + +This directive enables sentence and paragraph boundary indexing. It's +required for the SENTENCE and PARAGRAPH operators to work. Sentence +boundary detection is based on plain text analysis, so you only need to set +index_sp = 1 to enable it. Paragraph detection is however based on HTML +markup, and happens in the HTML stripper. So to index paragraph locations +you also need to enable the stripper by specifying html_strip = 1. Both +types of boundaries are detected based on a few built-in rules enumerated +just below. + +Sentence boundary detection rules are as follows. + + * Question and excalamation signs (? and !) are always a sentence + boundary. + + * Trailing dot (.) is a sentence boundary, except: + + * When followed by a letter. That's considered a part of an + abbreviation (as in "S.T.A.L.K.E.R" or "Goldman Sachs S.p.A."). + + * When followed by a comma. That's considered an abbreviation + followed by a comma (as in "Telecom Italia S.p.A., founded in + 1994"). + + * When followed by a space and a small letter. That's considered an + abbreviation within a sentence (as in "News Corp. announced in + Februrary"). + + * When preceded by a space and a capital letter, and followed by + a space. That's considered a middle initial (as in "John D. Doe"). + +Paragraph boundaries are inserted at every block-level HTML tag. Namely, +those are (as taken from HTML 4 standard) ADDRESS, BLOCKQUOTE, CAPTION, +CENTER, DD, DIV, DL, DT, H1, H2, H3, H4, H5, LI, MENU, OL, P, PRE, TABLE, +TBODY, TD, TFOOT, TH, THEAD, TR, and UL. + +Both sentences and paragraphs increment the keyword position counter by 1. + +Example: + + | index_sp = 1 + +11.2.9. index_zones +------------------- + +A list of in-field HTML/XML zones to index. Optional, default is empty (do +not index zones). Introduced in version 2.0.1-beta. + +Zones can be formally defined as follows. Everything between an opening and +a matching closing tag is called a span, and the aggregate of all spans +corresponding sharing the same tag name is called a zone. For instance, +everything between the occurrences of

and

in the document field +belongs to H1 zone. + +Zone indexing, enabled by index_zones directive, is an optional extension +of the HTML stripper. So it will also require that the stripper is enabled +(with html_strip = 1). The value of the index_zones should be +a comma-separated list of those tag names and wildcards (ending with +a star) that should be indexed as zones. + +Zones can nest and overlap arbitrarily. The only requirement is that every +opening tag has a matching tag. You can also have an arbitrary number of +both zones (as in unique zone names, such as H1) and spans (all the +occurrences of those H1 tags) in a document. Once indexed, zones can then +be used for matching with the ZONE operator, see Section 5.3, <>. + +Example: + + | index_zones = h*, th, title + +11.2.10. min_stemming_len +------------------------- + +Minimum word length at which to enable stemming. Optional, default is +1 (stem everything). Introduced in version 0.9.9-rc1. + +Stemmers are not perfect, and might sometimes produce undesired results. +For instance, running "gps" keyword through Porter stemmer for English +results in "gp", which is not really the intent. min_stemming_len feature +lets you suppress stemming based on the source word length, ie. to avoid +stemming too short words. Keywords that are shorter than the given +threshold will not be stemmed. Note that keywords that are exactly as long +as specified will be stemmed. So in order to avoid stemming 3-character +keywords, you should specify 4 for the value. For more finely grained +control, refer to wordforms feature. + +Example: + + | min_stemming_len = 4 + +11.2.11. stopwords +------------------ + +Stopword files list (space separated). Optional, default is empty. + +Stopwords are the words that will not be indexed. Typically you'd put most +frequent words in the stopwords list because they do not add much value to +search results but consume a lot of resources to process. + +You can specify several file names, separated by spaces. All the files will +be loaded. Stopwords file format is simple plain text. The encoding must +match index encoding specified in charset_type. File data will be tokenized +with respect to charset_table settings, so you can use the same separators +as in the indexed data. The stemmers will also be applied when parsing +stopwords file. + +While stopwords are not indexed, they still do affect the keyword +positions. For instance, assume that "the" is a stopword, that document +1 contains the line "in office", and that document 2 contains "in the +office". Searching for "in office" as for exact phrase will only return the +first document, as expected, even though "the" in the second one is +stopped. + +Example: + + | stopwords = /usr/local/sphinx/data/stopwords.txt + | stopwords = stopwords-ru.txt stopwords-en.txt + +11.2.12. wordforms +------------------ + +Word forms dictionary. Optional, default is empty. + +Word forms are applied after tokenizing the incoming text by charset_table +rules. They essentialy let you replace one word with another. Normally, +that would be used to bring different word forms to a single normal form +(eg. to normalize all the variants such as "walks", "walked", "walking" to +the normal form "walk"). It can also be used to implement stemming +exceptions, because stemming is not applied to words found in the forms +list. + +Dictionaries are used to normalize incoming words both during indexing and +searching. Therefore, to pick up changes in wordforms file it's required to +reindex and restart searchd. + +Word forms support in Sphinx is designed to support big dictionaries well. +They moderately affect indexing speed: for instance, a dictionary with +1 million entries slows down indexing about 1.5 times. Searching speed is +not affected at all. Additional RAM impact is roughly equal to the +dictionary file size, and dictionaries are shared across indexes: ie. if +the very same 50 MB wordforms file is specified for 10 different indexes, +additional searchd RAM usage will be about 50 MB. + +Dictionary file should be in a simple plain text format. Each line should +contain source and destination word forms, in exactly the same encoding as +specified in charset_type, separated by "greater" sign. Rules from the +charset_table will be applied when the file is loaded. So basically it's as +case sensitive as your other full-text indexed data, ie. typically case +insensitive. Here's the file contents sample: + + | walks > walk + | walked > walk + | walking > walk + +There is a bundled spelldump utility that helps you create a dictionary +file in the format Sphinx can read from source .dict and .aff dictionary +files in ispell or MySpell format (as bundled with OpenOffice). + +Starting with version 0.9.9-rc1, you can map several source words to +a single destination word. Because the work happens on tokens, not the +source text, differences in whitespace and markup are ignored. + + | core 2 duo > c2d + | e6600 > c2d + | core 2duo > c2d + +Notice however that the destination wordforms are still always interpreted +as a single keyword! Having a mapping like "St John > Saint John" will +result in not matching "St John" when searching for "Saint" or "John", +because the destination keyword will be "Saint John" with a space character +in it (and it's barely possible to input a destination keyword with +a space). + +Example: + + | wordforms = /usr/local/sphinx/data/wordforms.txt + +11.2.13. exceptions +------------------- + +Tokenizing exceptions file. Optional, default is empty. + +Exceptions allow to map one or more tokens (including tokens with +characters that would normally be excluded) to a single keyword. They are +similar to wordforms in that they also perform mapping, but have a number +of important differences. + +Short summary of the differences is as follows: + + * exceptions are case sensitive, wordforms are not; + + * exceptions allow to detect sequences of tokens, wordforms work with + single words only; + + * exceptions can use special characters that are not in charset_table, + wordforms fully obey charset_table; + + * exceptions can underperform on huge dictionaries, wordforms handle + millions of entries well. + +The expected file format is also plain text, with one line per exception, +and the line format is as follows: + + | map-from-tokens => map-to-token + +Example file: + + | AT & T => AT&T + | AT&T => AT&T + | Standarten Fuehrer => standartenfuhrer + | Standarten Fuhrer => standartenfuhrer + | MS Windows => ms windows + | Microsoft Windows => ms windows + | C++ => cplusplus + | c++ => cplusplus + | C plus plus => cplusplus + +All tokens here are case sensitive: they will not be processed by +charset_table rules. Thus, with the example exceptions file above, "At&t" +text will be tokenized as two keywords "at" and "t", because of lowercase +letters. On the other hand, "AT&T" will match exactly and produce single +"AT&T" keyword. + +Note that this map-to keyword is a) always interpereted as a single word, +and b) is both case and space sensitive! In our sample, "ms windows" query +will not match the document with "MS Windows" text. The query will be +interpreted as a query for two keywords, "ms" and "windows". And what "MS +Windows" gets mapped to is a single keyword "ms windows", with a space in +the middle. On the other hand, "standartenfuhrer" will retrieve documents +with "Standarten Fuhrer" or "Standarten Fuehrer" contents (capitalized +exactly like this), or any capitalization variant of the keyword itself, +eg. "staNdarTenfUhreR". (It won't catch "standarten fuhrer", however: this +text does not match any of the listed exceptions because of case +sensitivity, and gets indexed as two separate keywords.) + +Whitespace in the map-from tokens list matters, but its amount does not. +Any amount of the whitespace in the map-form list will match any other +amount of whitespace in the indexed document or query. For instance, +"AT & T" map-from token will match "AT & T" text, whatever the amount +of space in both map-from part and the indexed text. Such text will +therefore be indexed as a special "AT&T" keyword, thanks to the very first +entry from the sample. + +Exceptions also allow to capture special characters (that are exceptions +from general charset_table rules; hence the name). Assume that you +generally do not want to treat '+' as a valid character, but still want to +be able search for some exceptions from this rule such as 'C++'. The sample +above will do just that, totally independent of what characters are in the +table and what are not. + +Exceptions are applied to raw incoming document and query data during +indexing and searching respectively. Therefore, to pick up changes in the +file it's required to reindex and restart searchd. + +Example: + + | exceptions = /usr/local/sphinx/data/exceptions.txt + +11.2.14. min_word_len +--------------------- + +Minimum indexed word length. Optional, default is 1 (index everything). + +Only those words that are not shorter than this minimum will be indexed. +For instance, if min_word_len is 4, then 'the' won't be indexed, but 'they' +will be. + +Example: + + | min_word_len = 4 + +11.2.15. charset_type +--------------------- + +Character set encoding type. Optional, default is 'sbcs'. Known values are +'sbcs' and 'utf-8'. + +Different encodings have different methods for mapping their internal +characters codes into specific byte sequences. Two most common methods in +use today are single-byte encoding and UTF-8. Their corresponding +charset_type values are 'sbcs' (stands for Single Byte Character Set) and +'utf-8'. The selected encoding type will be used everywhere where the index +is used: when indexing the data, when parsing the query against this index, +when generating snippets, etc. + +Note that while 'utf-8' implies that the decoded values must be treated as +Unicode codepoint numbers, there's a family of 'sbcs' encodings that may in +turn treat different byte values differently, and that should be properly +reflected in your charset_table settings. For example, the same byte value +of 224 (0xE0 hex) maps to different Russian letters depending on whether +koi-8r or windows-1251 encoding is used. + +Example: + + | charset_type = utf-8 + +11.2.16. charset_table +---------------------- + +Accepted characters table, with case folding rules. Optional, default value +depends on charset_type value. + +charset_table is the main workhorse of Sphinx tokenizing process, ie. the +process of extracting keywords from document text or query txet. It +controls what characters are accepted as valid and what are not, and how +the accepted characters should be transformed (eg. should the case be +removed or not). + +You can think of charset_table as of a big table that has a mapping for +each and every of 100K+ characters in Unicode (or as of a small +256-character table if you're using SBCS). By default, every character maps +to 0, which means that it does not occur within keywords and should be +treated as a separator. Once mentioned in the table, character is mapped to +some other character (most frequently, either to itself or to a lowercase +letter), and is treated as a valid keyword part. + +The expected value format is a commas-separated list of mappings. Two +simplest mappings simply declare a character as valid, and map a single +character to another single character, respectively. But specifying the +whole table in such form would result in bloated and barely manageable +specifications. So there are several syntax shortcuts that let you map +ranges of characters at once. The complete list is as follows: + +A->a + Single char mapping, declares source char 'A' as allowed to occur within + keywords and maps it to destination char 'a' (but does not declare 'a' + as allowed). + +A..Z->a..z + Range mapping, declares all chars in source range as allowed and maps + them to the destination range. Does not declare destination range as + allowed. Also checks ranges' lengths (the lengths must be equal). + +a + Stray char mapping, declares a character as allowed and maps it to + itself. Equivalent to a->a single char mapping. + +a..z + Stray range mapping, declares all characters in range as allowed and + maps them to themselves. Equivalent to a..z->a..z range mapping. + +A..Z/2 + Checkerboard range map. Maps every pair of chars to the second char. + More formally, declares odd characters in range as allowed and maps them + to the even ones; also declares even characters as allowed and maps them + to themselves. For instance, A..Z/2 is equivalent to A->B, B->B, C->D, + D->D, ..., Y->Z, Z->Z. This mapping shortcut is helpful for a number of + Unicode blocks where uppercase and lowercase letters go in such + interleaved order instead of contiguous chunks. + +Control characters with codes from 0 to 31 are always treated as +separators. Characters with codes 32 to 127, ie. 7-bit ASCII characters, +can be used in the mappings as is. To avoid configuration file encoding +issues, 8-bit ASCII characters and Unicode characters must be specified in +U+xxx form, where 'xxx' is hexadecimal codepoint number. This form can also +be used for 7-bit ASCII characters to encode special ones: eg. use U+20 to +encode space, U+2E to encode dot, U+2C to encode comma. + +Example: + + | # 'sbcs' defaults for English and Russian + | charset_table = 0..9, A..Z->a..z, _, a..z, \ + | U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF + | + | # 'utf-8' defaults for English and Russian + | charset_table = 0..9, A..Z->a..z, _, a..z, \ + | U+410..U+42F->U+430..U+44F, U+430..U+44F + +11.2.17. ignore_chars +--------------------- + +Ignored characters list. Optional, default is empty. + +Useful in the cases when some characters, such as soft hyphenation mark +(U+00AD), should be not just treated as separators but rather fully +ignored. For example, if '-' is simply not in the charset_table, "abc-def" +text will be indexed as "abc" and "def" keywords. On the contrary, if '-' +is added to ignore_chars list, the same text will be indexed as a single +"abcdef" keyword. + +The syntax is the same as for charset_table, but it's only allowed to +declare characters, and not allowed to map them. Also, the ignored +characters must not be present in charset_table. + +Example: + + | ignore_chars = U+AD + +11.2.18. min_prefix_len +----------------------- + +Minimum word prefix length to index. Optional, default is 0 (do not index +prefixes). + +Prefix indexing allows to implement wildcard searching by 'wordstart*' +wildcards (refer to enable_star option for details on wildcard syntax). +When mininum prefix length is set to a positive number, indexer will index +all the possible keyword prefixes (ie. word beginnings) in addition to the +keywords themselves. Too short prefixes (below the minimum allowed length) +will not be indexed. + +For instance, indexing a keyword "example" with min_prefix_len=3 will +result in indexing "exa", "exam", "examp", "exampl" prefixes along with the +word itself. Searches against such index for "exam" will match documents +that contain "example" word, even if they do not contain "exam" on itself. +However, indexing prefixes will make the index grow significantly (because +of many more indexed keywords), and will degrade both indexing and +searching times. + +There's no automatic way to rank perfect word matches higher in a prefix +index, but there's a number of tricks to achieve that. First, you can setup +two indexes, one with prefix indexing and one without it, search through +both, and use SetIndexWeights() call to combine weights. Second, you can +enable star-syntax and rewrite your extended-mode queries: + + | # in sphinx.conf + | enable_star = 1 + | + | // in query + | $cl->Query ( "( keyword | keyword* ) other keywords" ); + +Example: + + | min_prefix_len = 3 + +11.2.19. min_infix_len +---------------------- + +Minimum infix prefix length to index. Optional, default is 0 (do not index +infixes). + +Infix indexing allows to implement wildcard searching by 'start*', '*end', +and '*middle*' wildcards (refer to enable_star option for details on +wildcard syntax). When mininum infix length is set to a positive number, +indexer will index all the possible keyword infixes (ie. substrings) in +addition to the keywords themselves. Too short infixes (below the minimum +allowed length) will not be indexed. For instance, indexing a keyword +"test" with min_infix_len=2 will result in indexing "te", "es", "st", +"tes", "est" infixes along with the word itself. Searches against such +index for "es" will match documents that contain "test" word, even if they +do not contain "es" on itself. However, indexing infixes will make the +index grow significantly (because of many more indexed keywords), and will +degrade both indexing and searching times. + +There's no automatic way to rank perfect word matches higher in an infix +index, but the same tricks as with prefix indexes can be applied. + +Example: + + | min_infix_len = 3 + +11.2.20. prefix_fields +---------------------- + +The list of full-text fields to limit prefix indexing to. Optional, default +is empty (index all fields in prefix mode). + +Because prefix indexing impacts both indexing and searching performance, it +might be desired to limit it to specific full-text fields only: for +instance, to provide prefix searching through URLs, but not through page +contents. prefix_fields specifies what fields will be prefix-indexed; all +other fields will be indexed in normal mode. The value format is +a comma-separated list of field names. + +Example: + + | prefix_fields = url, domain + +11.2.21. infix_fields +--------------------- + +The list of full-text fields to limit infix indexing to. Optional, default +is empty (index all fields in infix mode). + +Similar to prefix_fields, but lets you limit infix-indexing to given +fields. + +Example: + + | infix_fields = url, domain + +11.2.22. enable_star +-------------------- + +Enables star-syntax (or wildcard syntax) when searching through +prefix/infix indexes. Optional, default is is 0 (do not use wildcard +syntax), for compatibility with 0.9.7. Known values are 0 and 1. + +This feature enables "star-syntax", or wildcard syntax, when searching +through indexes which were created with prefix or infix indexing enabled. +It only affects searching; so it can be changed without reindexing by +simply restarting searchd. + +The default value is 0, that means to disable star-syntax and treat all +keywords as prefixes or infixes respectively, depending on indexing-time +min_prefix_len and min_infix_len settings. The value of 1 means that star +('*') can be used at the start and/or the end of the keyword. The star will +match zero or more characters. + +For example, assume that the index was built with infixes and that +enable_star is 1. Searching should work as follows: + + 1. "abcdef" query will match only those documents that contain the exact + "abcdef" word in them. + + 2. "abc*" query will match those documents that contain any words + starting with "abc" (including the documents which contain the exact + "abc" word only); + + 3. "*cde*" query will match those documents that contain any words which + have "cde" characters in any part of the word (including the + documents which contain the exact "cde" word only). + + 4. "*def" query will match those documents that contain any words ending + with "def" (including the documents that contain the exact "def" word + only). + +Example: + + | enable_star = 1 + +11.2.23. ngram_len +------------------ + +N-gram lengths for N-gram indexing. Optional, default is 0 (disable n-gram +indexing). Known values are 0 and 1 (other lengths to be implemented). + +N-grams provide basic CJK (Chinese, Japanese, Korean) support for +unsegmented texts. The issue with CJK searching is that there could be no +clear separators between the words. Ideally, the texts would be filtered +through a special program called segmenter that would insert separators in +proper locations. However, segmenters are slow and error prone, and it's +common to index contiguous groups of N characters, or n-grams, instead. + +When this feature is enabled, streams of CJK characters are indexed as +N-grams. For example, if incoming text is "ABCDEF" (where A to F represent +some CJK characters) and length is 1, in will be indexed as if it was "A +B C D E F". (With length equal to 2, it would produce "AB BC CD DE EF"; but +only 1 is supported at the moment.) Only those characters that are listed +in ngram_chars table will be split this way; other ones will not be +affected. + +Note that if search query is segmented, ie. there are separators between +individual words, then wrapping the words in quotes and using extended mode +will resut in proper matches being found even if the text was not +segmented. For instance, assume that the original query is BC DEF. After +wrapping in quotes on the application side, it should look like "BC" "DEF" +(with quotes). This query will be passed to Sphinx and internally split +into 1-grams too, resulting in "B C" "D E F" query, still with quotes that +are the phrase matching operator. And it will match the text even though +there were no separators in the text. + +Even if the search query is not segmented, Sphinx should still produce good +results, thanks to phrase based ranking: it will pull closer phrase matches +(which in case of N-gram CJK words can mean closer multi-character word +matches) to the top. + +Example: + + | ngram_len = 1 + +11.2.24. ngram_chars +-------------------- + +N-gram characters list. Optional, default is empty. + +To be used in conjunction with in ngram_len, this list defines characters, +sequences of which are subject to N-gram extraction. Words comprised of +other characters will not be affected by N-gram indexing feature. The value +format is identical to charset_table. + +Example: + + | ngram_chars = U+3000..U+2FA1F + +11.2.25. phrase_boundary +------------------------ + +Phrase boundary characters list. Optional, default is empty. + +This list controls what characters will be treated as phrase boundaries, in +order to adjust word positions and enable phrase-level search emulation +through proximity search. The syntax is similar to charset_table. Mappings +are not allowed and the boundary characters must not overlap with anything +else. + +On phrase boundary, additional word position increment (specified by +phrase_boundary_step) will be added to current word position. This enables +phrase-level searching through proximity queries: words in different +phrases will be guaranteed to be more than phrase_boundary_step distance +away from each other; so proximity search within that distance will be +equivalent to phrase-level search. + +Phrase boundary condition will be raised if and only if such character is +followed by a separator; this is to avoid abbreviations such as +S.T.A.L.K.E.R or URLs being treated as several phrases. + +Example: + + | phrase_boundary = ., ?, !, U+2026 # horizontal ellipsis + +11.2.26. phrase_boundary_step +----------------------------- + +Phrase boundary word position increment. Optional, default is 0. + +On phrase boundary, current word position will be additionally incremented +by this number. See phrase_boundary for details. + +Example: + + | phrase_boundary_step = 100 + +11.2.27. html_strip +------------------- + +Whether to strip HTML markup from incoming full-text data. Optional, +default is 0. Known values are 0 (disable stripping) and 1 (enable +stripping). + +Both HTML tags and entities and considered markup and get processed. + +HTML tags are removed, their contents (i.e., everything between

and +

) are left intact by default. You can choose to keep and index +attributes of the tags (e.g., HREF attribute in an A tag, or ALT in an IMG +one). Several well-known inline tags are completely removed, all other tags +are treated as block level and replaced with whitespace. For example, +'test' text will be indexed as a single keyword 'test', however, +'te

st

' will be indexed as two keywords 'te' and 'st'. Known inline +tags are as follows: A, B, I, S, U, BASEFONT, BIG, EM, FONT, IMG, LABEL, +SMALL, SPAN, STRIKE, STRONG, SUB, SUP, TT. + +HTML entities get decoded and replaced with corresponding UTF-8 characters. +Stripper supports both numeric forms (such as ï) and text forms (such +as ó or  ). All entities as specified by HTML4 standard are +supported. + +Stripping does not work with xmlpipe source type (it's suggested to upgrade +to xmlpipe2 anyway). It should work with properly formed HTML and XHTML, +but, just as most browsers, may produce unexpected results on malformed +input (such as HTML with stray <'s or unclosed >'s). + +Only the tags themselves, and also HTML comments, are stripped. To strip +the contents of the tags too (eg. to strip embedded scripts), see +html_remove_elements option. There are no restrictions on tag names; ie. +everything that looks like a valid tag start, or end, or a comment will be +stripped. + +Example: + + | html_strip = 1 + +11.2.28. html_index_attrs +------------------------- + +A list of markup attributes to index when stripping HTML. Optional, default +is empty (do not index markup attributes). + +Specifies HTML markup attributes whose contents should be retained and +indexed even though other HTML markup is stripped. The format is per-tag +enumeration of indexable attributes, as shown in the example below. + +Example: + + | html_index_attrs = img=alt,title; a=title; + +11.2.29. html_remove_elements +----------------------------- + +A list of HTML elements for which to strip contents along with the elements +themselves. Optional, default is empty string (do not strip contents of any +elements). + +This feature allows to strip element contents, ie. everything that is +between the opening and the closing tags. It is useful to remove embedded +scripts, CSS, etc. Short tag form for empty elements (ie.
) is +properly supported; ie. the text that follows such tag will not be removed. + +The value is a comma-separated list of element (tag) names whose contents +should be removed. Tag names are case insensitive. + +Example: + + | html_remove_elements = style, script + +11.2.30. local +-------------- + +Local index declaration in the distributed index. Multi-value, optional, +default is empty. + +This setting is used to declare local indexes that will be searched when +given distributed index is searched. All local indexes will be searched +sequentially, utilizing only 1 CPU or core; to parallelize processing, you +can configure searchd to query itself (refer to Section 11.2.31, <> +for the details). There might be several local indexes declared per each +distributed index. Any local index can be mentioned several times in other +distributed indexes. + +Example: + + | local = chunk1 + | local = chunk2 + +11.2.31. agent +-------------- + +Remote agent declaration in the distributed index. Multi-value, optional, +default is empty. + +This setting is used to declare remote agents that will be searched when +given distributed index is searched. The agents can be thought of as +network pointers that specify host, port, and index names. In the basic +case agents would correspond to remote physical machines. More formally, +that is not always correct: you can point several agents to the same remote +machine; or you can even point agents to the very same single instance of +searchd (in order to utilize many CPUs or cores). + +The value format is as follows: + + | agent = specification:remote-indexes-list + | specification = hostname ":" port | path + +Where 'hostname' is remote host name; 'port' is remote TCP port; 'path' is +Unix-domain socket path and 'remote-indexes-list' is a comma-separated list +of remote index names. + +All agents will be searched in parallel. However, all indexes specified for +a given agent will be searched sequentially in this agent. This lets you +fine-tune the configuration to the hardware. For instance, if two remote +indexes are stored on the same physical HDD, it's better to configure one +agent with several sequentially searched indexes to avoid HDD steping. If +they are stored on different HDDs, having two agents will be advantageous, +because the work will be fully parallelized. The same applies to CPUs; +though CPU performance impact caused by two processes stepping on each +other is somewhat smaller and frequently can be ignored at all. + +On machines with many CPUs and/or HDDs, agents can be pointed to the same +machine to utilize all of the hardware in parallel and reduce query +latency. There is no need to setup several searchd instances for that; it's +legal to configure the instance to contact itself. Here's an example setup, +intended for a 4-CPU machine, that will use up to 4 CPUs in parallel to +process each query: + + | index dist + | { + | type = distributed + | local = chunk1 + | agent = localhost:9312:chunk2 + | agent = localhost:9312:chunk3 + | agent = localhost:9312:chunk4 + | } + +Note how one of the chunks is searched locally and the same instance of +searchd queries itself to launch searches through three other ones in +parallel. + +Example: + + | agent = localhost:9312:chunk2 # contact itself + | agent = /var/run/searchd.s:chunk2 + | agent = searchbox2:9312:chunk3,chunk4 # search remote indexes + +11.2.32. agent_blackhole +------------------------ + +Remote blackhole agent declaration in the distributed index. Multi-value, +optional, default is empty. Introduced in version 0.9.9-rc1. + +agent_blackhole lets you fire-and-forget queries to remote agents. That is +useful for debugging (or just testing) production clusters: you can setup +a separate debugging/testing searchd instance, and forward the requests to +this instance from your production master (aggregator) instance without +interfering with production work. Master searchd will attempt to connect +and query blackhole agent normally, but it will neither wait nor process +any responses. Also, all network errors on blackhole agents will be +ignored. The value format is completely identical to regular agent +directive. + +Example: + + | agent_blackhole = testbox:9312:testindex1,testindex2 + +11.2.33. agent_connect_timeout +------------------------------ + +Remote agent connection timeout, in milliseconds. Optional, default is 1000 +(ie. 1 second). + +When connecting to remote agents, searchd will wait at most this much time +for connect() call to complete succesfully. If the timeout is reached but +connect() does not complete, and retries are enabled, retry will be +initiated. + +Example: + + | agent_connect_timeout = 300 + +11.2.34. agent_query_timeout +---------------------------- + +Remote agent query timeout, in milliseconds. Optional, default is 3000 (ie. +3 seconds). + +After connection, searchd will wait at most this much time for remote +queries to complete. This timeout is fully separate from connection +timeout; so the maximum possible delay caused by a remote agent equals to +the sum of agent_connection_timeout and agent_query_timeout. Queries will +not be retried if this timeout is reached; a warning will be produced +instead. + +Example: + + | agent_query_timeout = 10000 # our query can be long, allow up to 10 sec + +11.2.35. preopen +---------------- + +Whether to pre-open all index files, or open them per each query. Optional, +default is 0 (do not preopen). + +This option tells searchd that it should pre-open all index files on +startup (or rotation) and keep them open while it runs. Currently, the +default mode is not to pre-open the files (this may change in the future). +Preopened indexes take a few (currently 2) file descriptors per index. +However, they save on per-query open() calls; and also they are +invulnerable to subtle race conditions that may happen during index +rotation under high load. On the other hand, when serving many indexes +(100s to 1000s), it still might be desired to open the on per-query basis +in order to save file descriptors. + +This directive does not affect indexer in any way, it only affects searchd. + +Example: + + | preopen = 1 + +11.2.36. ondisk_dict +-------------------- + +Whether to keep the dictionary file (.spi) for this index on disk, or +precache it in RAM. Optional, default is 0 (precache in RAM). Introduced in +version 0.9.9-rc1. + +The dictionary (.spi) can be either kept on RAM or on disk. The default is +to fully cache it in RAM. That improves performance, but might cause too +much RAM pressure, especially if prefixes or infixes were used. Enabling +ondisk_dict results in 1 additional disk IO per keyword per query, but +reduces memory footprint. + +This directive does not affect indexer in any way, it only affects searchd. + +Example: + + | ondisk_dict = 1 + +11.2.37. inplace_enable +----------------------- + +Whether to enable in-place index inversion. Optional, default is 0 (use +separate temporary files). Introduced in version 0.9.9-rc1. + +inplace_enable greatly reduces indexing disk footprint, at a cost of +slightly slower indexing (it uses around 2x less disk, but yields around +90-95% the original performance). + +Indexing involves two major phases. The first phase collects, processes, +and partially sorts documents by keyword, and writes the intermediate +result to temporary files (.tmp*). The second phase fully sorts the +documents, and creates the final index files. Thus, rebuilding a production +index on the fly involves around 3x peak disk footprint: 1st copy for the +intermediate temporary files, 2nd copy for newly constructed copy, and 3rd +copy for the old index that will be serving production queries in the +meantime. (Intermediate data is comparable in size to the final index.) +That might be too much disk footprint for big data collections, and +inplace_enable allows to reduce it. When enabled, it reuses the temporary +files, outputs the final data back to them, and renames them on completion. +However, this might require additional temporary data chunk relocation, +which is where the performance impact comes from. + +This directive does not affect searchd in any way, it only affects indexer. + +Example: + + | inplace_enable = 1 + +11.2.38. inplace_hit_gap +------------------------ + +In-place inversion fine-tuning option. Controls preallocated hitlist gap +size. Optional, default is 0. Introduced in version 0.9.9-rc1. + +This directive does not affect searchd in any way, it only affects indexer. + +Example: + + | inplace_hit_gap = 1M + +11.2.39. inplace_docinfo_gap +---------------------------- + +In-place inversion fine-tuning option. Controls preallocated docinfo gap +size. Optional, default is 0. Introduced in version 0.9.9-rc1. + +This directive does not affect searchd in any way, it only affects indexer. + +Example: + + | inplace_docinfo_gap = 1M + +11.2.40. inplace_reloc_factor +----------------------------- + +In-place inversion fine-tuning option. Controls relocation buffer size +within indexing memory arena. Optional, default is 0.1. Introduced in +version 0.9.9-rc1. + +This directive does not affect searchd in any way, it only affects indexer. + +Example: + + | inplace_reloc_factor = 0.1 + +11.2.41. inplace_write_factor +----------------------------- + +In-place inversion fine-tuning option. Controls in-place write buffer size +within indexing memory arena. Optional, default is 0.1. Introduced in +version 0.9.9-rc1. + +This directive does not affect searchd in any way, it only affects indexer. + +Example: + + | inplace_write_factor = 0.1 + +11.2.42. index_exact_words +-------------------------- + +Whether to index the original keywords along with the stemmed/remapped +versions. Optional, default is 0 (do not index). Introduced in version +0.9.9-rc1. + +When enabled, index_exact_words forces indexer to put the raw keywords in +the index along with the stemmed versions. That, in turn, enables exact +form operator in the query language to work. This impacts the index size +and the indexing time. However, searching performance is not impacted at +all. + +Example: + + | index_exact_words = 1 + +11.2.43. overshort_step +----------------------- + +Position increment on overshort (less that min_word_len) keywords. +Optional, allowed values are 0 and 1, default is 1. Introduced in version +0.9.9-rc1. + +This directive does not affect searchd in any way, it only affects indexer. + +Example: + + | overshort_step = 1 + +11.2.44. stopword_step +---------------------- + +Position increment on stopwords. Optional, allowed values are 0 and 1, +default is 1. Introduced in version 0.9.9-rc1. + +This directive does not affect searchd in any way, it only affects indexer. + +Example: + + | stopword_step = 1 + +11.2.45. hitless_words +---------------------- + +Hitless words list. Optional, allowed values are 'all', or a list file +name. Introduced in version 1.10-beta. + +By default, Sphinx full-text index stores not only a list of matching +documents for every given keyword, but also a list of its in-document +positions (aka hitlist). Hitlists enables phrase, proximity, strict order +and other advanced types of searching, as well as phrase proximity ranking. +However, hitlists for specific frequent keywords (that can not be stopped +for some reason despite being frequent) can get huge and thus slow to +process while querying. Also, in some cases we might only care about +boolean keyword matching, and never need position-based searching operators +(such as phrase matching) nor phrase ranking. + +hitless_words lets you create indexes that either do not have positional +information (hitlists) at all, or skip it for specific keywords. + +Hitless index will generally use less space than the respective regular +index (about 1.5x can be expected). Both indexing and searching should be +faster, at a cost of missing positional query and ranking support. When +searching, positional queries (eg. phrase queries) will be automatically +converted to respective non-positional (document-level) or combined +queries. For instance, if keywords "hello" and "world" are hitless, "hello +world" phrase query will be converted to (hello & world) bag-of-words +query, matching all documents that mention either of the keywords but not +necessarily the exact phrase. And if, in addition, keywords "simon" and +"says" are not hitless, "simon says hello world" will be converted to +("simon says" & hello & world) query, matching all documents that contain +"hello" and "world" anywhere in the document, and also "simon says" as an +exact phrase. + +Example: + + | hitless_words = all + +11.2.46. expand_keywords +------------------------ + +Expand keywords with exact forms and/or stars when possible. Optional, +default is 0 (do not expand keywords). Introduced in version 1.10-beta. + +Queries against indexes with expand_keywords feature enabled are internally +expanded as follows. If the index was built with prefix or infix indexing +enabled, every keyword gets internally replaced with a disjunction of +keyword itself and a respective prefix or infix (keyword with stars). If +the index was built with both stemming and index_exact_words enabled, exact +form is also added. Here's an example that shows how internal expansion +works when all of the above (infixes, stemming, and exact words) are +combined: + + | running -> ( running | *running* | =running ) + +Expanded queries take naturally longer to complete, but can possibly +improve the search quality, as the documents with exact form matches should +be ranked generally higher than documents with stemmed or infix matches. + +Note that the existing query syntax does not allowe to emulate this kind of +expansion, because internal expansion works on keyword level and expands +keywords within phrase or quorum operators too (which is not possible +through the query syntax). + +This directive does not affect indexer in any way, it only affects searchd. + +Example: + + | expand_keywords = 1 + +11.2.47. blend_chars +-------------------- + +Blended characters list. Optional, default is empty. Introduced in version +1.10-beta. + +Blended characters are indexed both as separators and valid characters. For +instance, assume that & is configured as blended and AT&T occurs in an +indexed document. Three different keywords will get indexed, namely "at&t", +treating blended characters as valid, plus "at" and "t", treating them as +separators. + +Positions for tokens obtained by replacing blended characters with +whitespace are assigned as usual, so regular keywords will be indexed just +as if there was no blend_chars specified at all. An additional token that +mixes blended and non-blended characters will be put at the starting +position. For instance, if the field contents are "AT&T company" occurs in +the very beginning of the text field, "at" will be given position 1, "t" +position 2, "company" positin 3, and "AT&T" will also be given position +1 ("blending" with the opening regular keyword). Thus, querying for either +AT&T or just AT will match that document, and querying for "AT T" as +a phrase also match it. Last but not least, phrase query for "AT&T company" +will also match it, despite the position + +Blended characters can overlap with special characters used in query syntax +(think of T-Mobile or @twitter). Where possible, query parser will +automatically handle blended character as blended. For instance, "hello +@twitter" within quotes (a phrase operator) would handle @-sign as blended, +because @-syntax for field operator is not allowed within phrases. +Otherwise, the character would be handled as an operator. So you might want +to escape the keywords. + +Starting with version 2.0.1-beta, blended characters can be remapped, so +that multiple different blended characters could be normalized into just +one base form. This is useful when indexing multiple alternative Unicode +codepoints with equivalent glyphs. + +Example: + + | blend_chars = +, &, U+23 + | blend_chars = +, &->+ # 2.0.1 and above + +11.2.48. blend_mode +------------------- + +Blended tokens indexing mode. Optional, default is trim_none. Introduced in +version 2.0.1-beta. + +By default, tokens that mix blended and non-blended characters get indexed +in there entirety. For instance, when both at-sign and an exclamation are +in blend_chars, "@dude!" will get result in two tokens indexed: "@dude!" +(with all the blended characters) and "dude" (without any). Therefore +"@dude" query will not match it. + +blend_mode directive adds flexibility to this indexing behavior. It takes +a comma-separated list of options. + + | blend_mode = option [, option [, ...]] + | option = trim_none | trim_head | trim_tail | trim_both | skip_pure + +Options specify token indexing variants. If multiple options are specified, +multiple variants of the same token will be indexed. Regular keywords +(resulting from that token by replacing blended with whitespace) are always +be indexed. + +trim_none + Index the entire token. + +trim_head + Trim heading blended characters, and index the resulting token. + +trim_tail + Trim trailing blended characters, and index the resulting token. + +trim_both + Trim both heading and trailing blended characters, and index the + resulting token. + +skip_pure + Do not index the token if it's purely blended, that is, consists of + blended characters only. + +Returning to the "@dude!" example above, setting blend_mode = trim_head, +trim_tail will result in two tokens being indexed, "@dude" and "dude!". In +this particular example, trim_both would have no effect, because trimming +both blended characters results in "dude" which is already indexed as +a regular keyword. Indexing "@U.S.A." with trim_both (and assuming that dot +is blended two) would result in "U.S.A" being indexed. Last but not least, +skip_pure enables you to fully ignore sequences of blended characters only. +For example, "one @@@ two" would be indexed exactly as "one two", and match +that as a phrase. That is not the case by default because a fully blended +token gets indexed and offsets the second keyword position. + +Default behavior is to index the entire token, equivalent to blend_mode = +trim_none. + +Example: + + | blend_mode = trim_tail, skip_pure + +11.2.49. rt_mem_limit +--------------------- + +RAM chunk size limit. Optional, default is empty. Introduced in version +1.10-beta. + +RT index keeps some data in memory (so-called RAM chunk) and also maintains +a number of on-disk indexes (so-called disk chunks). This directive lets +you control the RAM chunk size. Once there's too much data to keep in RAM, +RT index will flush it to disk, activate a newly created disk chunk, and +reset the RAM chunk. + +The limit is pretty strict; RT index should never allocate more memory than +it's limited to. The memory is not preallocated either, hence, specifying +512 MB limit and only inserting 3 MB of data should result in allocating +3 MB, not 512 MB. + +Example: + + | rt_mem_limit = 512M + +11.2.50. rt_field +----------------- + +Full-text field declaration. Multi-value, mandatory Introduced in version +1.10-beta. + +Full-text fields to be indexed are declared using rt_field directive. The +names must be unique. The order is preserved; and so field values in INSERT +statements without an explicit list of inserted columns will have to be in +the same order as configured. + +Example: + + | rt_field = author + | rt_field = title + | rt_field = content + +11.2.51. rt_attr_uint +--------------------- + +Unsigned integer attribute declaration. Multi-value (an arbitrary number of +attributes is allowed), optional. Declares an unsigned 32-bit attribute. +Introduced in version 1.10-beta. + +Example: + + | rt_attr_uint = gid + +11.2.52. rt_attr_bigint +----------------------- + +BIGINT attribute declaration. Multi-value (an arbitrary number of +attributes is allowed), optional. Declares a signed 64-bit attribute. +Introduced in version 1.10-beta. + +Example: + + | rt_attr_bigint = guid + +11.2.53. rt_attr_float +---------------------- + +Floating point attribute declaration. Multi-value (an arbitrary number of +attributes is allowed), optional. Declares a single precision, 32-bit IEEE +754 format float attribute. Introduced in version 1.10-beta. + +Example: + + | rt_attr_float = gpa + +11.2.54. rt_attr_timestamp +-------------------------- + +Timestamp attribute declaration. Multi-value (an arbitrary number of +attributes is allowed), optional. Introduced in version 1.10-beta. + +Example: + + | rt_attr_timestamp = date_added + +11.2.55. rt_attr_string +----------------------- + +String attribute declaration. Multi-value (an arbitrary number of +attributes is allowed), optional. Introduced in version 1.10-beta. + +Example: + + | rt_attr_string = author + +11.3. indexer program configuration options +=========================================== + +11.3.1. mem_limit +----------------- + +Indexing RAM usage limit. Optional, default is 32M. + +Enforced memory usage limit that the indexer will not go above. Can be +specified in bytes, or kilobytes (using K postfix), or megabytes (using +M postfix); see the example. This limit will be automatically raised if set +to extremely low value causing I/O buffers to be less than 8 KB; the exact +lower bound for that depends on the indexed data size. If the buffers are +less than 256 KB, a warning will be produced. + +Maximum possible limit is 2047M. Too low values can hurt indexing speed, +but 256M to 1024M should be enough for most if not all datasets. Setting +this value too high can cause SQL server timeouts. During the document +collection phase, there will be periods when the memory buffer is partially +sorted and no communication with the database is performed; and the +database server can timeout. You can resolve that either by raising +timeouts on SQL server side or by lowering mem_limit. + +Example: + + | mem_limit = 256M + | # mem_limit = 262144K # same, but in KB + | # mem_limit = 268435456 # same, but in bytes + +11.3.2. max_iops +---------------- + +Maximum I/O operations per second, for I/O throttling. Optional, default is +0 (unlimited). + +I/O throttling related option. It limits maximum count of I/O operations +(reads or writes) per any given second. A value of 0 means that no limit is +imposed. + +indexer can cause bursts of intensive disk I/O during indexing, and it +might desired to limit its disk activity (and keep something for other +programs running on the same machine, such as searchd). I/O throttling +helps to do that. It works by enforcing a minimum guaranteed delay between +subsequent disk I/O operations performed by indexer. Modern SATA HDDs are +able to perform up to 70-100+ I/O operations per second (that's mostly +limited by disk heads seek time). Limiting indexing I/O to a fraction of +that can help reduce search performance dedgradation caused by indexing. + +Example: + + | max_iops = 40 + +11.3.3. max_iosize +------------------ + +Maximum allowed I/O operation size, in bytes, for I/O throttling. Optional, +default is 0 (unlimited). + +I/O throttling related option. It limits maximum file I/O operation (read +or write) size for all operations performed by indexer. A value of 0 means +that no limit is imposed. Reads or writes that are bigger than the limit +will be split in several smaller operations, and counted as several +operation by max_iops setting. At the time of this writing, all I/O calls +should be under 256 KB (default internal buffer size) anyway, so max_iosize +values higher than 256 KB must not affect anything. + +Example: + + | max_iosize = 1048576 + +11.3.4. max_xmlpipe2_field +-------------------------- + +Maximum allowed field size for XMLpipe2 source type, bytes. Optional, +default is 2 MB. + +Example: + + | max_xmlpipe2_field = 8M + +11.3.5. write_buffer +-------------------- + +Write buffer size, bytes. Optional, default is 1 MB. + +Write buffers are used to write both temporary and final index files when +indexing. Larger buffers reduce the number of required disk writes. Memory +for the buffers is allocated in addition to mem_limit. Note that several +(currently up to 4) buffers for different files will be allocated, +proportionally increasing the RAM usage. + +Example: + + | write_buffer = 4M + +11.3.6. max_file_field_buffer +----------------------------- + +Maximum file field adaptive buffer size, bytes. Optional, default is 8 MB, +minimum is 1 MB. + +File field buffer is used to load files referred to from sql_file_field +columns. This buffer is adaptive, starting at 1 MB at first allocation, and +growing in 2x steps until either file contents can be loaded, or maximum +buffer size, specified by max_file_field_buffer directive, is reached. + +Thus, if there are no file fields are specified, no buffer is allocated at +all. If all files loaded during indexing are under (for example) 2 MB in +size, but max_file_field_buffer value is 128 MB, peak buffer usage would +still be only 2 MB. However, files over 128 MB would be entirely skipped. + +Example: + + | max_file_field_buffer = 128M + +11.4. searchd program configuration options +=========================================== + +11.4.1. listen +-------------- + +This setting lets you specify IP address and port, or Unix-domain socket +path, that searchd will listen on. Introduced in version 0.9.9-rc1. + +The informal grammar for listen setting is: + + | listen = ( address ":" port | port | path ) [ ":" protocol ] + +I.e. you can specify either an IP address (or hostname) and port number, or +just a port number, or Unix socket path. If you specify port number but not +the address, searchd will listen on all network interfaces. Unix path is +identified by a leading slash. + +Starting with version 0.9.9-rc2, you can also specify a protocol handler +(listener) to be used for connections on this socket. Supported protocol +values are 'sphinx' (Sphinx 0.9.x API protocol) and 'mysql41' (MySQL +protocol used since 4.1 upto at least 5.1). More details on MySQL protocol +support can be found in Section 5.10, <> section. + +Examples: + + | listen = localhost + | listen = localhost:5000 + | listen = 192.168.0.1:5000 + | listen = /var/run/sphinx.s + | listen = 9312 + | listen = localhost:9306:mysql41 + +There can be multiple listen directives, searchd will listen for client +connections on all specified ports and sockets. If no listen directives are +found then the server will listen on all available interfaces using the +default SphinxAPI port 9312. Starting with 1.10-beta, it will also listen +on default SphinxQL port 9306. Both port numbers are assigned by IANA (see +http://www.iana.org/assignments/port-numbers for details) and should +therefore be available. + +Unix-domain sockets are not supported on Windows. + +11.4.2. address +--------------- + +Interface IP address to bind on. Optional, default is 0.0.0.0 (ie. listen +on all interfaces). DEPRECATED, use listen instead. + +address setting lets you specify which network interface searchd will bind +to, listen on, and accept incoming network connections on. The default +value is 0.0.0.0 which means to listen on all interfaces. At the time, you +can not specify multiple interfaces. + +Example: + + | address = 192.168.0.1 + +11.4.3. port +------------ + +searchd TCP port number. DEPRECATED, use listen instead. Used to be +mandatory. Default port number is 9312. + +Example: + + | port = 9312 + +11.4.4. log +----------- + +Log file name. Optional, default is 'searchd.log'. All searchd run time +events will be logged in this file. + +Also you can use the 'syslog' as the file name. In this case the events +will be sent to syslog daemon. To use the syslog option the sphinx must be +configured '--with-syslog' on building. + +Example: + + | log = /var/log/searchd.log + +11.4.5. query_log +----------------- + +Query log file name. Optional, default is empty (do not log queries). All +search queries will be logged in this file. The format is described in +Section 5.9, <>. + +In case of 'plain' format, you can use the 'syslog' as the path to the log +file. In this case all search queries will be sent to syslog daemon with +LOG_INFO priority, prefixed with '[query]' instead of timestamp. To use the +syslog option the sphinx must be configured '--with-syslog' on building. + +Example: + + | query_log = /var/log/query.log + +11.4.6. query_log_format +------------------------ + +Query log format. Optional, allowed values are 'plain' and 'sphinxql', +default is 'plain'. Introduced in version 2.0.1-beta. + +Starting with version 2.0.1-beta, two different log formats are supported. +The default one logs queries in a custom text format. The new one logs +valid SphinxQL statements. This directive allows to switch between the two +formats on search daemon startup. The log format can also be altered on the +fly, using SET GLOBAL query_log_format=sphinxql syntax. Refer to +Section 5.9, <> for more discussion and format +details. + +Example: + + | query_log_format = sphinxql + +11.4.7. read_timeout +-------------------- + +Network client request read timeout, in seconds. Optional, default is +5 seconds. searchd will forcibly close the client connections which fail to +send a query within this timeout. + +Example: + + | read_timeout = 1 + +11.4.8. client_timeout +---------------------- + +Maximum time to wait between requests (in seconds) when using persistent +connections. Optional, default is five minutes. + +Example: + + | client_timeout = 3600 + +11.4.9. max_children +-------------------- + +Maximum amount of children to fork (or in other words, concurrent searches +to run in parallel). Optional, default is 0 (unlimited). + +Useful to control server load. There will be no more than this much +concurrent searches running, at all times. When the limit is reached, +additional incoming clients are dismissed with temporarily failure +(SEARCHD_RETRY) status code and a message stating that the server is maxed +out. + +Example: + + | max_children = 10 + +11.4.10. pid_file +----------------- + +searchd process ID file name. Mandatory. + +PID file will be re-created (and locked) on startup. It will contain head +daemon process ID while the daemon is running, and it will be unlinked on +daemon shutdown. It's mandatory because Sphinx uses it internally for +a number of things: to check whether there already is a running instance of +searchd; to stop searchd; to notify it that it should rotate the indexes. +Can also be used for different external automation scripts. + +Example: + + | pid_file = /var/run/searchd.pid + +11.4.11. max_matches +-------------------- + +Maximum amount of matches that the daemon keeps in RAM for each index and +can return to the client. Optional, default is 1000. + +Introduced in order to control and limit RAM usage, max_matches setting +defines how much matches will be kept in RAM while searching each index. +Every match found will still be processed; but only best N of them will be +kept in memory and return to the client in the end. Assume that the index +contains 2,000,000 matches for the query. You rarely (if ever) need to +retrieve all of them. Rather, you need to scan all of them, but only choose +"best" at most, say, 500 by some criteria (ie. sorted by relevance, or +price, or anything else), and display those 500 matches to the end user in +pages of 20 to 100 matches. And tracking only the best 500 matches is much +more RAM and CPU efficient than keeping all 2,000,000 matches, sorting +them, and then discarding everything but the first 20 needed to display the +search results page. max_matches controls N in that "best N" amount. + +This parameter noticeably affects per-query RAM and CPU usage. Values of +1,000 to 10,000 are generally fine, but higher limits must be used with +care. Recklessly raising max_matches to 1,000,000 means that searchd will +have to allocate and initialize 1-million-entry matches buffer for every +query. That will obviously increase per-query RAM usage, and in some cases +can also noticeably impact performance. + +CAVEAT EMPTOR! Note that there also is another place where this limit is +enforced. max_matches can be decreased on the fly through the corresponding +API call, and the default value in the API is also set to 1,000. So in +order to retrieve more than 1,000 matches to your application, you will +have to change the configuration file, restart searchd, and set proper +limit in SetLimits() call. Also note that you can not set the value in the +API higher than the value in the .conf file. This is prohibited in order to +have some protection against malicious and/or malformed requests. + +Example: + + | max_matches = 10000 + +11.4.12. seamless_rotate +------------------------ + +Prevents searchd stalls while rotating indexes with huge amounts of data to +precache. Optional, default is 1 (enable seamless rotation). + +Indexes may contain some data that needs to be precached in RAM. At the +moment, .spa, .spi and .spm files are fully precached (they contain +attribute data, MVA data, and keyword index, respectively.) Without +seamless rotate, rotating an index tries to use as little RAM as possible +and works as follows: + + 1. new queries are temporarly rejected (with "retry" error code); + + 2. searchd waits for all currently running queries to finish; + + 3. old index is deallocated and its files are renamed; + + 4. new index files are renamed and required RAM is allocated; + + 5. new index attribute and dictionary data is preloaded to RAM; + + 6. searchd resumes serving queries from new index. + +However, if there's a lot of attribute or dictionary data, then preloading +step could take noticeble time - up to several minutes in case of +preloading 1-5+ GB files. + +With seamless rotate enabled, rotation works as follows: + + 1. new index RAM storage is allocated; + + 2. new index attribute and dictionary data is asynchronously preloaded + to RAM; + + 3. on success, old index is deallocated and both indexes' files are + renamed; + + 4. on failure, new index is deallocated; + + 5. at any given moment, queries are served either from old or new index + copy. + +Seamless rotate comes at the cost of higher peak memory usage during the +rotation (because both old and new copies of .spa/.spi/.spm data need to be +in RAM while preloading new copy). Average usage stays the same. + +Example: + + | seamless_rotate = 1 + +11.4.13. preopen_indexes +------------------------ + +Whether to forcibly preopen all indexes on startup. Optional, default is +1 (preopen everything). + +Starting with 2.0.1-beta, the default value for this option is now +1 (foribly preopen all indexes). In prior versions, it used to be 0 (use +per-index settings). + +When set to 1, this directive overrides and enforces preopen on all +indexes. They will be preopened, no matter what is the per-index preopen +setting. When set to 0, per-index settings can take effect. (And they +default to 0.) + +Pre-opened indexes avoid races between search queries and rotations that +can cause queries to fail occasionally. They also make searchd use more +file handles. In most scenarios it's therefore preferred and recommended to +preopen indexes. + +Example: + + | preopen_indexes = 1 + +11.4.14. unlink_old +------------------- + +Whether to unlink .old index copies on succesful rotation. Optional, +default is 1 (do unlink). + +Example: + + | unlink_old = 0 + +11.4.15. attr_flush_period +-------------------------- + +When calling UpdateAttributes() to update document attributes in real-time, +changes are first written to the in-memory copy of attributes (docinfo must +be set to extern). Then, once searchd shuts down normally (via SIGTERM +being sent), the changes are written to disk. Introduced in version +0.9.9-rc1. + +Starting with 0.9.9-rc1, it is possible to tell searchd to periodically +write these changes back to disk, to avoid them being lost. The time +between those intervals is set with attr_flush_period, in seconds. + +It defaults to 0, which disables the periodic flushing, but flushing will +still occur at normal shut-down. + +Example: + + | attr_flush_period = 900 # persist updates to disk every 15 minutes + +11.4.16. ondisk_dict_default +---------------------------- + +Instance-wide defaults for ondisk_dict directive. Optional, default it +0 (precache dictionaries in RAM). Introduced in version 0.9.9-rc1. + +This directive lets you specify the default value of ondisk_dict for all +the indexes served by this copy of searchd. Per-index directive take +precedence, and will overwrite this instance-wide default value, allowing +for fine-grain control. + +Example: + + | ondisk_dict_default = 1 # keep all dictionaries on disk + +11.4.17. max_packet_size +------------------------ + +Maximum allowed network packet size. Limits both query packets from +clients, and response packets from remote agents in distributed +environment. Only used for internal sanity checks, does not directly affect +RAM use or performance. Optional, default is 8M. Introduced in version +0.9.9-rc1. + +Example: + + | max_packet_size = 32M + +11.4.18. mva_updates_pool +------------------------- + +Shared pool size for in-memory MVA updates storage. Optional, default size +is 1M. Introduced in version 0.9.9-rc1. + +This setting controls the size of the shared storage pool for updated MVA +values. Specifying 0 for the size disable MVA updates at all. Once the pool +size limit is hit, MVA update attempts will result in an error. However, +updates on regular (scalar) attributes will still work. Due to internal +technical difficulties, currently it is not possible to store (flush) any +updates on indexes where MVA were updated; though this might be implemented +in the future. In the meantime, MVA updates are intended to be used as +a measure to quickly catchup with latest changes in the database until the +next index rebuild; not as a persistent storage mechanism. + +Example: + + | mva_updates_pool = 16M + +11.4.19. crash_log_path +----------------------- + +Deprecated debugging setting, path (formally prefix) for crash log files. +Introduced in version 0.9.9-rc1. Deprecated in version 2.0.1-beta, as crash +debugging information now gets logged into searchd.log in text form, and +separate binary crash logs are no longer needed. + +11.4.20. max_filters +-------------------- + +Maximum allowed per-query filter count. Only used for internal sanity +checks, does not directly affect RAM use or performance. Optional, default +is 256. Introduced in version 0.9.9-rc1. + +Example: + + | max_filters = 1024 + +11.4.21. max_filter_values +-------------------------- + +Maximum allowed per-filter values count. Only used for internal sanity +checks, does not directly affect RAM use or performance. Optional, default +is 4096. Introduced in version 0.9.9-rc1. + +Example: + + | max_filter_values = 16384 + +11.4.22. listen_backlog +----------------------- + +TCP listen backlog. Optional, default is 5. + +Windows builds currently (as of 0.9.9) can only process the requests one by +one. Concurrent requests will be enqueued by the TCP stack on OS level, and +requests that can not be enqueued will immediately fail with "connection +refused" message. listen_backlog directive controls the length of the +connection queue. Non-Windows builds should work fine with the default +value. + +Example: + + | listen_backlog = 20 + +11.4.23. read_buffer +-------------------- + +Per-keyword read buffer size. Optional, default is 256K. + +For every keyword occurrence in every search query, there are two +associated read buffers (one for document list and one for hit list). This +setting lets you control their sizes, increasing per-query RAM use, but +possibly decreasing IO time. + +Example: + + | read_buffer = 1M + +11.4.24. read_unhinted +---------------------- + +Unhinted read size. Optional, default is 32K. + +When querying, some reads know in advance exactly how much data is there to +be read, but some currently do not. Most prominently, hit list size in not +currently known in advance. This setting lest you control how much data to +read in such cases. It will impact hit list IO time, reducing it for lists +larger than unhinted read size, but raising it for smaller lists. It will +not affect RAM use because read buffer will be already allocated. So it +should be not greater than read_buffer. + +Example: + + | read_unhinted = 32K + +11.4.25. max_batch_queries +-------------------------- + +Limits the amount of queries per batch. Optional, default is 32. + +Makes searchd perform a sanity check of the amount of the queries submitted +in a single batch when using multi-queries. Set it to 0 to skip the check. + +Example: + + | max_batch_queries = 256 + +11.4.26. subtree_docs_cache +--------------------------- + +Max common subtree document cache size, per-query. Optional, default is +0 (disabled). + +Limits RAM usage of a common subtree optimizer (see Section 5.11, +<>). At most this much RAM will be spent to cache document +entries per each query. Setting the limit to 0 disables the optimizer. + +Example: + + | subtree_docs_cache = 8M + +11.4.27. subtree_hits_cache +--------------------------- + +Max common subtree hit cache size, per-query. Optional, default is +0 (disabled). + +Limits RAM usage of a common subtree optimizer (see Section 5.11, +<>). At most this much RAM will be spent to cache keyword +occurrences (hits) per each query. Setting the limit to 0 disables the +optimizer. + +Example: + + | subtree_hits_cache = 16M + +11.4.28. workers +---------------- + +Multi-processing mode (MPM). Optional; allowed values are none, fork, +prefork, and threads. Default is fork on Unix based systems, and threads on +Windows. Introduced in version 1.10-beta. + +Lets you choose how searchd processes multiple concurrent requests. The +possible values are: + +none + All requests will be handled serially, one-by-one. Prior to 1.x, this + was the only mode available on Windows. + +fork + A new child process will be forked to handle every incoming request. + Historically, this is the default mode. + +prefork + On startup, searchd will pre-fork a number of worker processes, and pass + the incoming requests to one of those children. + +threads + A new thread will be created to handle every incoming request. This is + the only mode compatible with RT indexing backend. + +Historically, searchd used fork-based model, which generally performs OK +but spends a noticeable amount of CPU in fork() system call when there's +a high amount of (tiny) requests per second. Prefork mode was implemented +to alleviate that; with prefork, worker processes are basically only +created on startup and re-created on index rotation, somewhat reducing +fork() call pressure. + +Threads mode was implemented along with RT backend and is required to use +RT indexes. (Regular disk-based indexes work in all the available modes.) + +Example: + + | workers = threads + +11.4.29. dist_threads +--------------------- + +Max local worker threads to use for parallelizable requests (searching +a distributed index; building a batch of snippets). Optional, default is 0, +which means to disable in-request parallelism. Introduced in version +1.10-beta. + +Distributed index can include several local indexes. dist_threads lets you +easily utilize multiple CPUs/cores for that (previously existing +alternative was to specify the indexes as remote agents, pointing searchd +to itself and paying some network overheads). + +When set to a value N greater than 1, this directive will create up to +N threads for every query, and schedule the specific searches within these +threads. For example, if there are 7 local indexes to search and +dist_threads is set to 2, then 2 parallel threads would be created: one +that sequentially searches 4 indexes, and another one that searches the +other 3 indexes. + +In case of CPU bound workload, setting dist_threads to 1x the number of +cores is advised (creating more threads than cores will not improve query +time). In case of mixed CPU/disk bound workload it might sometimes make +sense to use more (so that all cores could be utilizes even when there are +threads that wait for I/O completion). + +Note that dist_threads does not require threads MPM. You can perfectly use +it with fork or prefork MPMs too. + +Starting with version 2.0.1-beta, building a batch of snippets with +load_files flag enabled can also be parallelized. Up to dist_threads +threads are be created to process those files. That speeds up snippet +extraction when the total amount of document data to process is significant +(hundreds of megabytes). + +Example: + + | index dist_test + | { + | type = distributed + | local = chunk1 + | local = chunk2 + | local = chunk3 + | local = chunk4 + | } + | + | # ... + | + | dist_threads = 4 + +11.4.30. binlog_path +-------------------- + +Binary log (aka transaction log) files path. Optional, default is +build-time configured data directory. Introduced in version 1.10-beta. + +Binary logs are used for crash recovery of RT index data that would +otherwise only be stored in RAM. When logging is enabled, every transaction +COMMIT-ted into RT index gets written into a log file. Logs are then +automatically replayed on startup after an unclean shutdown, recovering the +logged changes. + +binlog_path directive specifies the binary log files location. It should +contain just the path; searchd will create and unlink multiple binlog.* +files in that path as necessary (binlog data, metadata, and lock files, +etc). + +Empty value disables binary logging. That improves performance, but puts RT +index data at risk. + +Example: + + | binlog_path = # disable logging + | binlog_path = /var/data # /var/data/binlog.001 etc will be created + +11.4.31. binlog_flush +--------------------- + +Binary log transaction flush/sync mode. Optional, default is 2 (flush every +transaction, sync every second). Introduced in version 1.10-beta. + +This directive controls how frequently will binary log be flushed to OS and +synced to disk. Three modes are supported: + + * 0, flush and sync every second. Best performance, but up to 1 second + worth of committed transactions can be lost both on daemon crash, or + OS/hardware crash. + + * 1, flush and sync every transaction. Worst performance, but every + committed transaction data is guaranteed to be saved. + + * 2, flush every transaction, sync every second. Good performance, and + every committed transaction is guaranteed to be saved in case of + daemon crash. However, in case of OS/hardware crash up to 1 second + worth of committed transactions can be lost. + +For those familiar with MySQL and InnoDB, this directive is entirely +similar to innodb_flush_log_at_trx_commit. In most cases, the default +hybrid mode 2 provides a nice balance of speed and safety, with full RT +index data protection against daemon crashes, and some protection against +hardware ones. + +Example: + + | binlog_flush = 1 # ultimate safety, low speed + +11.4.32. binlog_max_log_size +---------------------------- + +Maximum binary log file size. Optional, default is 0 (do not reopen binlog +file based on size). Introduced in version 1.10-beta. + +A new binlog file will be forcibly opened once the current binlog file +reaches this limit. This achieves a finer granularity of logs and can yield +more efficient binlog disk usage under certain borderline workloads. + +Example: + + | binlog_max_log_size = 16M + +11.4.33. collation_server +------------------------- + +Default server collation. Optional, default is libc_ci. Introduced in +version 2.0.1-beta. + +Specifies the default collation used for incoming requests. The collation +can be overridden on a per-query basis. Refer to Section 5.12, +<> section for the list of available collations and other +details. + +Example: + + | collation_server = utf8_ci + +11.4.34. collation_libc_locale +------------------------------ + +Server libc locale. Optional, default is C. Introduced in version +2.0.1-beta. + +Specifies the libc locale, affecting the libc-based collations. Refer to +Section 5.12, <> section for the details. + +Example: + + | collation_libc_locale = fr_FR + +11.4.35. plugin_dir +------------------- + +Trusted location for the dynamic libraries (UDFs). Optional, default is +empty (no location). Introduced in version 2.0.1-beta. + +Specifies the trusted directory from which the UDF libraries can be loaded. +Requires workers = thread to take effect. + +Example: + + | workers = threads + | plugin_dir = /usr/local/sphinx/lib + +11.4.36. mysql_version_string +----------------------------- + +A server version string to return via MySQL protocol. Optional, default is +empty (return Sphinx version). Introduced in version 2.0.1-beta. + +Several picky MySQL client libraries depend on a particular version number +format used by MySQL, and moreover, sometimes choose a different execution +path based on the reported version number (rather than the indicated +capabilities flags). For instance, Python MySQLdb 1.2.2 throws an exception +when the version number is not in X.Y.ZZ format; MySQL .NET connector 6.3.x +fails internally on version numbers 1.x along with a certain combination of +flags, etc. To workaround that, you can use mysql_version_string directive +and have searchd report a different version to clients connecting over +MySQL protocol. (By default, it reports its own version.) + +Example: + + | mysql_version_string = 5.0.37 + +11.4.37. rt_flush_period +------------------------ + +RT indexes RAM chunk flush check period, in seconds. Optional, default is +0 (do not flush). Introduced in version 2.0.1-beta. + +Actively updated RT indexes that however fully fit in RAM chunks can result +in ever-growing binlogs, impacting disk use and crash recovery time. With +this directive the search daemon performs periodic flush checks, and +eligible RAM chunks can get saved, enabling consequential binlog cleanup. +See Section 4.4, <> for more details. + +Example: + + | rt_flush_period = 3600 + +11.4.38. thread_stack +--------------------- + +Per-thread stack size. Optional, default is 64K. Introduced in version +2.0.1-beta. + +In the workers = threads mode, every request is processed with a separate +thread that needs its own stack space. By default, 64K per thread are +allocated for stack. However, extremely complex search requests might +eventually exhaust the default stack and require more. For instance, +a query that matches a few thousand keywords (either directly or through +term expansion) can eventually run out of stack. Previously, that resulted +in crashes. Starting with 2.0.1-beta, searchd attempts to estimate the +expected stack use, and blocks the potentially dangerous queries. To +process such queries, you can either the thread stack size by using the +thread_stack directive (or switch to a different workers setting if that is +possible). + +A query with N levels of nesting is estimated to require approximately +30+0.12*N KB of stack, meaning that the default 64K is enough for queries +with upto 300 levels, 150K for upto 1000 levels, etc. If the stack size +limit is not met, searchd fails the query and reports the required stack +size in the error message. + +Example: + + | thread_stack = 256K + +11.4.39. expansion_limit +------------------------ + +The maximum number of expanded keywords for a single wildcard. Optional, +default is 0 (no limit). Introduced in version 2.0.1-beta. + +When doing substring searches against indexes built with dict = keywords +enabled, a single wildcard may potentially result in thousands and even +millions of matched keywords (think of matching 'a*' against the entire +Oxford dictionary). This directive lets you limit the impact of such +expansions. Setting expansion_limit = N restricts expansions to no more +than N of the most frequent matching keywords (per each wildcard in the +query). + +Example: + + | expansion_limit = 16 + +11.4.40. compat_sphinxql_magics +------------------------------- + +Legacy SphinxQL quirks compatiblity mode. Optional, default is 1 (keep +compatibility). Introduced in version 2.0.1-beta. + +Starting with version 2.0.1-beta, we're bringing SphinxQL in closer +compliance with standard SQL. However, existing applications must not get +broken, and compat_sphinxql_magics lets you upgrade safely. It defauls to +1, which enables the compatibility mode. However, SphinxQL compatibility +mode is now deprecated and will be removed once we complete bringing +SphinxQL in line with standard SQL syntax. So it's advised to update the +applications utilising SphinxQL and then switch the daemon to the new, more +SQL compliant mode by setting compat_sphinxql_magics = 0. Please refer to +Section 7.21, <> for the +details and update instruction. + +Example: + + | compat_sphinxql_magics = 0 # the future is now + +11.4.41. watchdog +----------------- + +Threaded server watchdog. Optional, default is 1 (watchdog enabled). +Introduced in version 2.0.1-beta. + +A crashed query in threads multi-processing mode (workers = threads) can +take down the entire server. With watchdog feature enabled, searchd +additionally keeps a separate lightweight process that monitors the main +server process, and automatically restarts the latter in case of abnormal +termination. Watchdog is enabled by default. + +Example: + + | watchdog = 0 # disable watchdog + +Appendix A. Sphinx revision history +=================================== + +Table of Contents + +A.1. Version 2.0.1-beta, 22 apr 2011 +A.2. Version 1.10-beta, 19 jul 2010 +A.3. Version 0.9.9-release, 02 dec 2009 +A.4. Version 0.9.9-rc2, 08 apr 2009 +A.5. Version 0.9.9-rc1, 17 nov 2008 +A.6. Version 0.9.8.1, 30 oct 2008 +A.7. Version 0.9.8, 14 jul 2008 +A.8. Version 0.9.7, 02 apr 2007 +A.9. Version 0.9.7-rc2, 15 dec 2006 +A.10. Version 0.9.7-rc1, 26 oct 2006 +A.11. Version 0.9.6, 24 jul 2006 +A.12. Version 0.9.6-rc1, 26 jun 2006 + +A.1. Version 2.0.1-beta, 22 apr 2011 +==================================== + +New general features +-------------------- + + * added remapping support to blend_chars directive + + * added multi-threaded snippet batches support (requires a batch sent + via API, dist_threads, and load_files) + + * added collations (collation_server, collation_libc_locale directives) + + * added support for sorting and grouping on string attributes (ORDER BY, + GROUP BY, WITHING GROUP ORDER BY) + + * added UDF support (plugin_dir directive; CREATE FUNCTION, DROP + FUNCTION statements) + + * added query_log_format directive, SET GLOBAL query_log_format | + log_level = ... statements; and connection id tracking + + * added sql_column_buffers directive, fixed out-of-buffer column + handling in ODBC/MS SQL sources + + * added blend_mode directive that enables indexing multiple variants of + a blended sequence + + * added UNIX socket support to C, Ruby APIs + + * added ranged query support to sql_joined_field + + * added rt_flush_period directive + + * added thread_stack directive + + * added SENTENCE, PARAGRAPH, ZONE operators (and index_sp, index_zones + directives) + + * added keywords dictionary support (and dict, expansion_limit + directives) + + * added passage_boundary, emit_zones options to snippets + + * added a watchdog process in threaded mode + + * added persistent MVA updates + + * added crash dumps to searchd.log, deprecated crash_log_path directive + + * added id32 index support in id64 binaries (EXPERIMENTAL) + + * added SphinxSE support for DELETE and REPLACE on SphinxQL tables + +New SphinxQL features +--------------------- + + * added new, more SQL compliant SphinxQL syntax; and + a compat_sphinxql_magics directive + + * added CRC32(), DAY(), MONTH(), YEAR(), YEARMONTH(), YEARMONTHDAY() + functions + + * added DIV, MOD, and % operators + + * added reverse_scan=(0|1) option to SELECT + + * added support for MySQL packets over 16M + + * added dummy SHOW VARIABLES, SHOW COLLATION, and SET + character_set_results support (to support handshake with certain + client libraries and frameworks) + + * added mysql_version_string directive (to workaround picky MySQL client + libraries) + + * added support for global filter variables, SET GLOBAL + @uservar=(int_list) + + * added DELETE ... IN (id_list) syntax support + + * added C-style comments syntax (for example, SELECT /*!40000 some + comment*/ id FROM test) + + * added UPDATE ... WHERE id=X syntax support + + * added SphinxQL multi-query support + + * added DESCRIBE, SHOW TABLES statements + +New command-line switches +------------------------- + + * added --print-queries switch to indexer that dumps SQL queries it runs + + * added --sighup-each switch to indexer that rotates indexes one by one + + * added --strip-path switch to searchd that skips file paths embedded in + the index(-es) + + * added --dumpconfig switch to indextool that dumps an index header in + sphinx.conf format + +Major changes and optimizations +------------------------------- + + * changed default preopen_indexes value to 1 + + * optimized English stemmer (results in 1.3x faster snippets and + indexing with morphology=stem_en) + + * optimized snippets, 1.6x general speedup + + * optimized const-list parsing in SphinxQL + + * optimized full-document highlighting CPU/RAM use + + * optimized binlog replay (improved performance on K-list update) + +Bug fixes +--------- + + * fixed #767, joined fields vs ODBC sources + + * fixed #757, wordforms shared by indexes with different settings + + * fixed #733, loading of indexes in formats prior to v.14 + + * fixed #763, occasional snippets failures + + * fixed #648, occasionally missed rotations on multiple SIGHUPs + + * fixed #750, an RT segment merge leading to false positives and/or + crashes in some cases + + * fixed #755, zones in snippets output + + * fixed #754, stopwords counting at snippet passage generation + + * fixed #723, fork/prefork index rotation in children processes + + * fixed #696, freeze on zero threshold in quorum operator + + * fixed #732, query escaping in SphinxSE + + * fixed #739, occasional crashes in MT mode on result set send + + * fixed #746, crash with a named list in SphinxQL option + + * fixed #674, AVG vs group order + + * fixed #734, occasional crashes attempting to report NULL errors + + * fixed #829, tail hits within field position modifier + + * fixed #712, missing query_mode, force_all_words snippet option + defaults in Java API + + * fixed #721, added dupe removal on RT batch INSERT/REPLACE + + * fixed #720, potential extraneous highlighting after a blended keyword + + * fixed #702, exceptions vs star search + + * fixed #666, ext2 query grouping vs exceptions + + * fixed #688, WITHIN GROUP ORDER BY related crash + + * fixed #660, multi-queue batches vs dist_threads + + * fixed #678, crash on dict=keywords vs xmlpipe vs min_prefix_len + + * fixed #596, ECHILD vs scripted configs + + * fixed #653, dependency in expression, sorting, grouping + + * fixed #661, concurrent distributed searches vs workers=threads + + * fixed #646, crash on status query via UNIX socket + + * fixed #589, libexpat.dll missing from some Win32 build types + + * fixed #574, quorum match order + + * fixed multiple documentation issues (#372, #483, #495, #601, #623, + #632, #654) + + * fixed that ondisk_dict did not affect RT indexes + + * fixed that string attributes check in indextool --check was + erroneously sensitive to string data order + + * fixed a rare crash when using BEFORE operator + + * fixed an issue with multiforms vs BuildKeywords() + + * fixed an edge case in OR operator (emitted wrong hits order sometimes) + + * fixed aliasing in docinfo accessors that lead to very rare crashes + and/or missing results + + * fixed a syntax error on a short token at the end of a query + + * fixed id64 filtering and performance degradation with range filters + + * fixed missing rankers in libsphinxclient + + * fixed missing SPH04 ranker in SphinxSE + + * fixed column names in sql_attr_multi sample (works with example.sql + now) + + * fixed an issue with distributed local+remote setup vs aggregate + functions + + * fixed case sensitive columns names in RT indexes + + * fixed a crash vs strings from multiple indexes in result set + + * fixed blended keywords vs snippets + + * fixed secure_connection vs MySQL protocol vs MySQL.NET connector + + * fixed that Python API did not works with Python 2.3 + + * fixed overshort_step vs snippets + + * fixed keyword staistics vs dist_threads searching + + * fixed multiforms vs query parsing (vs quorum) + + * fixed missed quorum words vs RT segments + + * fixed blended keywords occasionally skipping extra character when + querying (eg "abc[]") + + * fixed Python API to handle int32 values + + * fixed prefix and infix indexing of joined fields + + * fixed MVA ranged query + + * fixed missing blended state reset on document boundary + + * fixed a crash on missing index while replaying binlog + + * fixed an error message on filter values overrun + + * fixed passage duplication in snippets in weight_order mode + + * fixed select clauses over 1K vs remote agents + + * fixed overshort accounting vs soft-whitespace tokens + + * fixed rotation vs workers=threads + + * fixed schema issues vs distributed indexes + + * fixed blended-escaped sequence parsing issue + + * fixed MySQL IN clause (values order etc) + + * fixed that post_index did not execute when 0 documents were + succesfully indexed + + * fixed field position limit vs many hits + + * fixed that joined fields missed an end marker at field end + + * fixed that xxx_step settings were missing from .sph index header + + * fixed libsphinxclient missing request cleanup in sphinx_query() (eg + after network errors) + + * fixed that index_weights were ignored when grouping + + * fixed multi wordforms vs blend_chars + + * fixed broken MVA output in SphinxQL + + * fixed a few RT leaks + + * fixed an issue with RT string storage going missing + + * fixed an issue with repeated queries vs dist_threads + + * fixed an issue with string attributes vs buffer overrun in SphinxQL + + * fixed unexpected character data warnings within ignored xmlpipe tags + + * fixed a crash in snippets with NEAR syntax query + + * fixed passage duplication in snippets + + * fixed libsphinxclient SIGPIPE handling + + * fixed libsphinxclient vs VS2003 compiler bug + +A.2. Version 1.10-beta, 19 jul 2010 +=================================== + + * added RT indexes support (Chapter 4, Real-time indexes) + + * added prefork and threads support (workers directives) + + * added multi-threaded local searches in distributed indexes + (dist_threads directive) + + * added common subquery cache (subtree_docs_cache, subtree_hits_cache + directives) + + * added string attributes support (sql_attr_string, sql_field_string, + xml_attr_string, xml_field_string directives) + + * added indexing-time word counter (sql_attr_str2wordcount, + sql_field_str2wordcount directives) + + * added CALL SNIPPETS(), CALL KEYWORDS() SphinxQL statements + + * added field_weights, index_weights options to SphinxQL SELECT + statement + + * added insert-only SphinxQL-talking tables to SphinxSE + (connection='sphinxql://host[:port]/index') + + * added select option to SphinxSE queries + + * added backtrace on crash to searchd + + * added SQL+FS indexing, aka loading files by names fetched from SQL + (sql_file_field directive) + + * added a watchdog in threads mode to searchd + + * added automatic row phantoms elimination to index merge + + * added hitless indexing support (hitless_words directive) + + * added --check, --strip-path, --htmlstrip, --dumphitlist ... --wordid + switches to indextool + + * added --stopwait, --logdebug switches to searchd + + * added --dump-rows, --verbose switches to indexer + + * added "blended" characters indexing support (blend_chars directive) + + * added joined/payload field indexing (sql_joined_field directive) + + * added FlushAttributes() API call + + * added query_mode, force_all_words, limit_passages, limit_words, + start_passage_id, load_files, html_strip_mode, allow_empty options, + and %PASSAGE_ID% macro in before_match, after_match options to + BuildExcerpts() API call + + * added @groupby/@count/@distinct columns support to SELECT (but not to + expressions) + + * added query-time keyword expansion support (expand_keywords directive, + SPH_RANK_SPH04 ranker) + + * added query batch size limit option (max_batch_queries directive; was + hardcoded) + + * added SINT() function to expressions + + * improved SphinxQL syntax error reporting + + * improved expression optimizer (better constant handling) + + * improved dash handling within keywords (no longer treated as an + operator) + + * improved snippets (better passage selection/trimming, around option + now a hard limit) + + * optimized index format that yields ~20-30% smaller indexes + + * optimized sorting code (indexing time 1-5% faster on average; 100x + faster in worst case) + + * optimized searchd startup time (moved .spa preindexing to indexer), + added a progress bar + + * optimized queries against indexes with many attributes (eliminated + redundant copying) + + * optimized 1-keyword queries (performace regression introduced in + 0.9.9) + + * optimized SphinxQL protocol overheads, and performance on bigger + result sets + + * optimized unbuffered attributes writes on index merge + + * changed attribute handling, duplicate names are strictly forbidden now + + * fixed that SphinxQL sessions could stall shutdown + + * fixed consts with leading minus in SphinxQL + + * fixed AND/OR precedence in expressions + + * fixed #334, AVG() on integers was not computed in floats + + * fixed #371, attribute flush vs 2+ GB files + + * fixed #373, segfault on distributed queries vs certain libc versions + + * fixed #398, stopwords not stopped in prefix/infix indexes + + * fixed #404, erroneous MVA failures in indextool --check + + * fixed #408, segfault on certain query batches (regular scan, plus + a scan with MVA groupby) + + * fixed #431, occasional shutdown hangs in preforked workers + + * fixed #436, trunk checkout builds vs Solaris sh + + * fixed #440, escaping vs parentheses declared as valid in charset_table + + * fixed #442, occasional non-aligned free in MVA indexing + + * fixed #447, occasional crashes in MVA indexing + + * fixed #449, pconn busyloop on aborted clients on certain arches + + * fixed #465, build issue on Alpha + + * fixed #468, build issue in libsphinxclient + + * fixed #472, multiple stopword files failing to load + + * fixed #489, buffer overflow in query logging + + * fixed #493, Python API assertion after error returned from Query() + + * fixed #500, malformed MySQL packet when sending MVAs + + * fixed #504, SIGPIPE in libsphinxclient + + * fixed #506, better MySQL protocol commands support in SphinxQL (PING + etc) + + * fixed #509, indexing ranged results from stored procedures + +A.3. Version 0.9.9-release, 02 dec 2009 +======================================= + + * added Open, Close, Status calls to libsphinxclient (C API) + + * added automatic persistent connection reopening to PHP, Python APIs + + * added 64-bit value/range filters, fullscan mode support to SphinxSE + + * MAJOR CHANGE, our IANA assigned ports are 9312 and 9306 respectively + (goodbye, trusty 3312) + + * MAJOR CHANGE, erroneous filters now fail with an error (were silently + ignored before) + + * optimized unbuffered .spa writes on merge + + * optimized 1-keyword queries ranking in extended2 mode + + * fixed #441 (IO race in case of highly conccurent load on a preopened) + + * fixed #434 (distrubuted indexes were not searchable via MySQL + protocol) + + * fixed #317 (indexer MVA progress counter) + + * fixed #398 (stopwords not removed from search query) + + * fixed #328 (broken cutoff) + + * fixed #250 (now quoting paths w/spaces when installing Windows + service) + + * fixed #348 (K-list was not updated on merge) + + * fixed #357 (destination index were not K-list-filtered on merge) + + * fixed #369 (precaching .spi files over 2 GBs) + + * fixed #438 (missing boundary proximity matches) + + * fixed #371 (.spa flush in case of files over 2 GBs) + + * fixed #373 (crashes on distributed queries via mysql proto) + + * fixed critical bugs in hit merging code + + * fixed #424 (ordinals could be misplaced during indexing in case of + bitfields etc) + + * fixed #426 (failing SE build on Solaris; thanks to Ben Beecher) + + * fixed #423 (typo in SE caused crash on SHOW STATUS) + + * fixed #363 (handling of read_timeout over 2147 seconds) + + * fixed #376 (minor error message mismatch) + + * fixed #413 (minus in SphinxQL) + + * fixed #417 (floats w/o leading digit in SphinxQL) + + * fixed #403 (typo in SetFieldWeights name in Java API) + + * fixed index rotation vs persistent connections + + * fixed backslash handling in SphinxQL parser + + * fixed uint unpacking vs. PHP 5.2.9 (possibly other versions) + + * fixed #325 (filter settings send from SphinxSE) + + * fixed #352 (removed mysql wrapper around close() in SphinxSE) + + * fixed #389 (display error messages through SphinxSE status variable) + + * fixed linking with port-installed iconv on OS X + + * fixed negative 64-bit unpacking in PHP API + + * fixed #349 (escaping backslash in query emulation mode) + + * fixed #320 (disabled multi-query route when select items differ) + + * fixed #353 (better quorum counts check) + + * fixed #341 (merging of trailing hits; maybe other ranking issues too) + + * fixed #368 (partially; @field "" caused crashes; now resets field + limit) + + * fixed #365 (field mask was leaking on field-limited terms) + + * fixed #339 (updated debug query dumper) + + * fixed #361 (added SetConnectTimeout() to Java API) + + * fixed #338 (added missing fullscan to mode check in Java API) + + * fixed #323 (added floats support to SphinxQL) + + * fixed #340 (support listen=port:proto syntax too) + + * fixed #332 (\r is legal SphinxQL space now) + + * fixed xmlpipe2 K-lists + + * fixed #322 (safety gaps in mysql protocol row buffer) + + * fixed #313 (return keyword stats for empty indexes too) + + * fixed #344 (invalid checkpoints after merge) + + * fixed #326 (missing CLOCK_xxx on FreeBSD) + +A.4. Version 0.9.9-rc2, 08 apr 2009 +=================================== + + * added IsConnectError(), Open(), Close() calls to Java API (bug #240) + + * added read_buffer, read_unhinted directives + + * added checks for build options returned by mysql_config (builds on + Solaris now) + + * added fixed-RAM index merge (bug #169) + + * added logging chained queries count in case of (optimized) + multi-queries + + * added GEODIST() function + + * added --status switch to searchd + + * added MySpell (OpenOffice) affix file support (bug #281) + + * added ODBC support (both Windows and UnixODBC) + + * added support for @id in IN() (bug #292) + + * added support for aggregate functions in GROUP BY (namely AVG, MAX, + MIN, SUM) + + * added MySQL UDF that builds snippets using searchd + + * added write_buffer directive (defaults to 1M) + + * added xmlpipe_fixup_utf8 directive + + * added suggestions sample + + * added microsecond precision int64 timer (bug #282) + + * added listen_backlog directive + + * added max_xmlpipe2_field directive + + * added initial SphinxQL support to mysql41 handler, SELECT .../SHOW + WARNINGS/STATUS/META are handled + + * added support for different network protocols, and mysql41 protocol + + * added fieldmask ranker, updated SphinxSE list of rankers + + * added mysql_ssl_xxx directives + + * added --cpustats (requires clock_gettime()) and --status switches to + searchd + + * added performance counters, Status() API call + + * added overshort_step and stopword_step directives + + * added strict order operator (aka operator before, eg. "one << two << + three") + + * added indextool utility, moved --dumpheader there, added + --debugdocids, --dumphitlist options + + * added own RNG, reseeded on @random sort query (bug #183) + + * added field-start and field-end modifiers support (syntax is "^hello + world$"; field-end requires reindex) + + * added MVA attribute support to IN() function + + * added AND, OR, and NOT support to expressions + + * improved logging of (optimized) multi-queries (now logging chained + query count) + + * improved handshake error handling, fixed protocol version byte order + (omg) + + * updated SphinxSE to protocol 1.22 + + * allowed phrase_boundary_step=-1 (trick to emulate keyword expansion) + + * removed SPH_MAX_QUERY_WORDS limit + + * fixed CLI search vs documents missing from DB (bug #257) + + * fixed libsphinxclient results leak on subsequent sphinx_run_queries + call (bug #256) + + * fixed libsphinxclient handling of zero max_matches and cutoff (bug + #208) + + * fixed Java API over-64K string reads (eg. big snippets) in Java API + (bug #181) + + * fixed Java API 2nd Query() after network error in 1st Query() call + (bug #308) + + * fixed typo-class bugs in SetFilterFloatRange (bug #259), SetSortMode + (bug #248) + + * fixed missing @@relaxed support (bug #276), fixed missing error on + @nosuchfield queries, documented @@relaxed + + * fixed UNIX socket permissions to 0777 (bug #288) + + * fixed xmlpipe2 crash on schemas with no fields, added better document + structure checks + + * fixed (and optimized) expr parser vs IN() with huge (10K+) args count + + * fixed double EarlyCalc() in fullscan mode (minor performance impact) + + * fixed phrase boundary handling in some cases (on buffer end, on + trailing whitespace) + + * fixes in snippets (aka excerpts) generation + + * fixed inline attrs vs id64 index corruption + + * fixed head searchd crash on config re-parse failure + + * fixed handling of numeric keywords with leading zeroes such as "007" + (bug #251) + + * fixed junk in SphinxSE status variables (bug #304) + + * fixed wordlist checkpoints serialization (bug #236) + + * fixed unaligned docinfo id access (bug #230) + + * fixed GetRawBytes() vs oversized blocks (headers with over 32K + charset_table should now work, bug #300) + + * fixed buffer overflow caused by too long dest wordform, updated tests + + * fixed IF() return type (was always int, is deduced now) + + * fixed legacy queries vs. special chars vs. multiple indexes + + * fixed write-write-read socket access pattern vs Nagle vs delays vs + FreeBSD (oh wow) + + * fixed exceptions vs query-parser issue + + * fixed late calc vs @weight in expressions (bug #285) + + * fixed early lookup/calc vs filters (bug #284) + + * fixed emulated MATCH_ANY queries (empty proximity and phrase queries + are allowed now) + + * fixed MATCH_ANY ranker vs fields with no matches + + * fixed index file size vs inplace_enable (bug #245) + + * fixed that old logs were not closed on USR1 (bug #221) + + * fixed handling of '!' alias to NOT operator (bug #237) + + * fixed error handling vs query steps (step failure was not reported) + + * fixed querying vs inline attributes + + * fixed stupid bug in escaping code, fixed EscapeString() and made it + static + + * fixed parser vs @field -keyword, foo|@field bar, "" queries (bug #310) + +A.5. Version 0.9.9-rc1, 17 nov 2008 +=================================== + + * added min_stemming_len directive + + * added IsConnectError() API call (helps distingusih API vs remote + errors) + + * added duplicate log messages filter to searchd + + * added --nodetach debugging switch to searchd + + * added blackhole agents support for debugging/testing (agent_blackhole + directive) + + * added max_filters, max_filter_values directives (were hardcoded + before) + + * added int64 expression evaluation path, automatic inference, and + BIGINT() enforcer function + + * added crash handler for debugging (crash_log_path directive) + + * added MS SQL (aka SQL Server) source support (Windows only, + mssql_winauth and mssql_unicode directives) + + * added indexer-side column unpacking feature (unpack_zlib, + unpack_mysqlcompress directives) + + * added nested brackers and NOTs support to query language, rewritten + query parser + + * added persistent connections support (Open() and Close() API calls) + + * added index_exact_words feature, and exact form operator to query + language ("hello =world") + + * added status variables support to SphinxSE (SHOW STATUS LIKE + 'sphinx_%') + + * added max_packet_size directive (was hardcoded at 8M before) + + * added UNIX socket support, and multi-interface support (listen + directive) + + * added star-syntax support to BuildExcerpts() API call + + * added inplace inversion of .spa and .spp (inplace_enable directive, + 1.5-2x less disk space for indexing) + + * added builtin Czech stemmer (morphology=stem_cz) + + * added IDIV(), NOW(), INTERVAL(), IN() functions to expressions + + * added index-level early-reject based on filters + + * added MVA updates feature (mva_updates_pool directive) + + * added select-list feature with computed expressions support (see + SetSelect() API call, test.php --select switch), protocol 1.22 + + * added integer expressions support (2x faster than float) + + * added multiforms support (multiple source words in wordforms file) + + * added legacy rankers (MATCH_ALL/MATCH_ANY/etc), removed legacy + matching code (everything runs on V2 engine now) + + * added field position limit modifier to field operator (syntax: + @title[50] hello world) + + * added killlist support (sql_query_killlist directive, + --merge-killlists switch) + + * added on-disk SPI support (ondisk_dict directive) + + * added indexer IO stats + + * added periodic .spa flush (attr_flush_period directive) + + * added config reload on SIGHUP + + * added per-query attribute overrides feature (see SetOverride() API + call); protocol 1.21 + + * added signed 64bit attrs support (sql_attr_bigint directive) + + * improved HTML stripper to also skip PIs (, such as ) + + * improved excerpts speed (upto 50x faster on big documents) + + * fixed a short window of searchd inaccessibility on startup (started + listen()ing too early before) + + * fixed .spa loading on systems where read() is 2GB capped + + * fixed infixes vs morphology issues + + * fixed backslash escaping, added backslash to EscapeString() + + * fixed handling of over-2GB dictionary files (.spi) + +A.6. Version 0.9.8.1, 30 oct 2008 +================================= + + * added configure script to libsphinxclient + + * changed proximity/quorum operator syntax to require whitespace after + length + + * fixed potential head process crash on SIGPIPE during "maxed out" + message + + * fixed handling of incomplete remote replies (caused over-degraded + distributed results, in rare cases) + + * fixed sending of big remote requests (caused distributed requests to + fail, in rare cases) + + * fixed FD_SET() overflow (caused searchd to crash on startup, in rare + cases) + + * fixed MVA vs distributed indexes (caused loss of 1st MVA value in + result set) + + * fixed tokenizing of exceptions terminated by specials (eg. "GPS AT&T" + in extended mode) + + * fixed buffer overrun in stemmer on overlong tokens occasionally + emitted by proximity/quorum operator parser (caused crashes on certain + proximity/quorum queries) + + * fixed wordcount ranker (could be dropping hits) + + * fixed --merge feature (numerous different fixes, caused broken + indexes) + + * fixed --merge-dst-range performance + + * fixed prefix/infix generation for stopwords + + * fixed ignore_chars vs specials + + * fixed misplaced F_SETLKW check (caused certain build types, eg. RPM + build on FC8, to fail) + + * fixed dictionary-defined charsets support in spelldump, added \x-style + wordchars support + + * fixed Java API to properly send long strings (over 64K; eg. long + document bodies for excerpts) + + * fixed Python API to accept offset/limit of 'long' type + + * fixed default ID range (that filtered out all 64-bit values) in Java + and Python APIs + +A.7. Version 0.9.8, 14 jul 2008 +=============================== + +Indexing +-------- + + * added support for 64-bit document and keyword IDs, --enable-id64 + switch to configure + + * added support for floating point attributes + + * added support for bitfields in attributes, sql_attr_bool directive and + bit-widths part in sql_attr_uint directive + + * added support for multi-valued attributes (MVA) + + * added metaphone preprocessor + + * added libstemmer library support, provides stemmers for a number of + additional languages + + * added xmlpipe2 source type, that supports arbitrary fields and + attributes + + * added word form dictionaries, wordforms directive (and spelldump + utility) + + * added tokenizing exceptions, exceptions directive + + * added an option to fully remove element contents to HTML stripper, + html_remove_elements directive + + * added HTML entities decoder (with full XHTML1 set support) to HTML + stripper + + * added per-index HTML stripping settings, html_strip, html_index_attrs, + and html_remove_elements directives + + * added IO load throttling, max_iops and max_iosize directives + + * added SQL load throttling, sql_ranged_throttle directive + + * added an option to index prefixes/infixes for given fields only, + prefix_fields and infix_fields directives + + * added an option to ignore certain characters (instead of just treating + them as whitespace), ignore_chars directive + + * added an option to increment word position on phrase boundary + characters, phrase_boundary and phrase_boundary_step directives + + * added --merge-dst-range switch (and filters) to index merging feature + (--merge switch) + + * added mysql_connect_flags directive (eg. to reduce indexing time MySQL + network traffic and/or time) + + * improved ordinals sorting; now runs in fixed RAM + + * improved handling of documents with zero/NULL ids, now skipping them + instead of aborting + +Search daemon +------------- + + * added an option to unlink old index on succesful rotation, unlink_old + directive + + * added an option to keep index files open at all times (fixes subtle + races on rotation), preopen and preopen_indexes directives + + * added an option to profile searchd disk I/O, --iostats command-line + option + + * added an option to rotate index seamlessly (fully avoids query + stalls), seamless_rotate directive + + * added HTML stripping support to excerpts (uses per-index settings) + + * added 'exact_phrase', 'single_passage', 'use_boundaries', + 'weight_order 'options to BuildExcerpts() API call + + * added distributed attribute updates propagation + + * added distributed retries on master node side + + * added log reopen on SIGUSR1 + + * added --stop switch (sends SIGTERM to running instance) + + * added Windows service mode, and --servicename switch + + * added Windows --rotate support + + * improved log timestamping, now with millisecond precision + +Querying +-------- + + * added extended engine V2 (faster, cleaner, better; SPH_MATCH_EXTENDED2 + mode) + + * added ranking modes support (V2 engine only; SetRankingMode() API + call) + + * added quorum searching support to query language (V2 engine only; + example: "any three of all these words"/3) + + * added query escaping support to query language, and EscapeString() API + call + + * added multi-field syntax support to query language (example: + "@(field1,field2) something"), and @@relaxed field checks option + + * added optional star-syntax ('word*') support in keywords, enable_star + directive (for prefix/infix indexes only) + + * added full-scan support (query must be fully empty; can perform + block-reject optimization) + + * added COUNT(DISTINCT(attr)) calculation support, SetGroupDistinct() + API call + + * added group-by on MVA support, SetArrayResult() PHP API call + + * added per-index weights feature, SetIndexWeights() API call + + * added geodistance support, SetGeoAnchor() API call + + * added result set sorting by arbitrary expressions in run time (eg. + "@weight+log(price)*2.5"), SPH_SORT_EXPR mode + + * added result set sorting by @custom compile-time sorting function (see + src/sphinxcustomsort.inl) + + * added result set sorting by @random value + + * added result set merging for indexes with different schemas + + * added query comments support (3rd arg to Query()/AddQuery() API calls, + copied verbatim to query log) + + * added keyword extraction support, BuildKeywords() API call + + * added binding field weights by name, SetFieldWeights() API call + + * added optional limit on query time, SetMaxQueryTime() API call + + * added optional limit on found matches count (4rd arg to SetLimits() + API call, so-called 'cutoff') + +APIs and SphinxSE +----------------- + + * added pure C API (libsphinxclient) + + * added Ruby API (thanks to Dmytro Shteflyuk) + + * added Java API + + * added SphinxSE support for MVAs (use varchar), floats (use float), + 64bit docids (use bigint) + + * added SphinxSE options "floatrange", "geoanchor", "fieldweights", + "indexweights", "maxquerytime", "comment", "host" and "port"; and + support for "expr:CLAUSE" + + * improved SphinxSE max query size (using MySQL condition pushdown), + upto 256K now + +General +------- + + * added scripting (shebang syntax) support to config files (example: + #!/usr/bin/php in the first line) + + * added unified config handling and validation to all programs + + * added unified documentation + + * added .spec file for RPM builds + + * added automated testing suite + + * improved index locking, now fcntl()-based instead of buggy + file-existence-based + + * fixed unaligned RAM accesses, now works on SPARC and ARM + +Changes and fixes since 0.9.8-rc2 +--------------------------------- + + * added pure C API (libsphinxclient) + + * added Ruby API + + * added SetConnectTimeout() PHP API call + + * added allowed type check to UpdateAttributes() handler (bug #174) + + * added defensive MVA checks on index preload (protection against broken + indexes, bug #168) + + * added sphinx-min.conf sample file + + * added --without-iconv switch to configure + + * removed redundant -lz dependency in searchd + + * removed erroneous "xmlpipe2 deprecated" warning + + * fixed EINTR handling in piped read (bug #166) + + * fixup query time before logging and sending to client (bug #153) + + * fixed attribute updates vs full-scan early-reject index (bug #149) + + * fixed gcc warnings (bug #160) + + * fixed mysql connection attempt vs pgsql source type (bug #165) + + * fixed 32-bit wraparound when preloading over 2 GB files + + * fixed "out of memory" message vs over 2 GB allocs (bug #116) + + * fixed unaligned RAM access detection on ARM (where unaligned reads do + not crash but produce wrong results) + + * fixed missing full scan results in some cases + + * fixed several bugs in --merge, --merge-dst-range + + * fixed @geodist vs MultiQuery and filters, @expr vs MultiQuery + + * fixed GetTokenEnd() vs 1-grams (was causing crash in excerpts) + + * fixed sql_query_range to handle empty strings in addition to NULL + strings (Postgres specific) + + * fixed morphology=none vs infixes + + * fixed case sensitive attributes names in UpdateAttributes() + + * fixed ext2 ranking vs. stopwords (now using atompos from query parser) + + * fixed EscapeString() call + + * fixed escaped specials (now handled as whitespace if not in charset) + + * fixed schema minimizer (now handles type/size mismatches) + + * fixed word stats in extended2; stemmed form is now returned + + * fixed spelldump case folding vs dictionary-defined character sets + + * fixed Postgres BOOLEAN handling + + * fixed enforced "inline" docinfo on empty indexes (normally ok, but + index merge was really confused) + + * fixed rare count(distinct) out-of-bounds issue (it occasionaly caused + too high @distinct values) + + * fixed hangups on documents with id=DOCID_MAX in some cases + + * fixed rare crash in tokenizer (prefixed synonym vs. input stream eof) + + * fixed query parser vs "aaa (bbb ccc)|ddd" queries + + * fixed BuildExcerpts() request in Java API + + * fixed Postgres specific memory leak + + * fixed handling of overshort keywords (less than min_word_len) + + * fixed HTML stripper (now emits space after indexed attributes) + + * fixed 32-field case in query parser + + * fixed rare count(distinct) vs. querying multiple local indexes vs. + reusable sorter issue + + * fixed sorting of negative floats in SPH_SORT_EXTENDED mode + +A.8. Version 0.9.7, 02 apr 2007 +=============================== + + * added support for sql_str2ordinal_column + + * added support for upto 5 sort-by attrs (in extended sorting mode) + + * added support for separate groups sorting clause (in group-by mode) + + * added support for on-the-fly attribute updates (PRE-ALPHA; will change + heavily; use for preliminary testing ONLY) + + * added support for zero/NULL attributes + + * added support for 0.9.7 features to SphinxSE + + * added support for n-grams (alpha, 1-grams only for now) + + * added support for warnings reported to client + + * added support for exclude-filters + + * added support for prefix and infix indexing (see max_prefix_len, + max_infix_len) + + * added @* syntax to reset current field to query language + + * added removal of duplicate entries in query index order + + * added PHP API workarounds for PHP signed/unsigned braindamage + + * added locks to avoid two concurrent indexers working on same index + + * added check for existing attributes vs. docinfo=none case + + * improved groupby code a lot (better precision, and upto 25x times + faster in extreme cases) + + * improved error handling and reporting + + * improved handling of broken indexes (reports error instead of + hanging/crashing) + + * improved mmap() limits for attributes and wordlists (now able to map + over 4 GB on x64 and over 2 GB on x32 where possible) + + * improved malloc() pressure in head daemon (search time should not + degrade with time any more) + + * improved test.php command line options + + * improved error reporting (distributed query, broken index etc issues + now reported to client) + + * changed default network packet size to be 8M, added extra checks + + * fixed division by zero in BM25 on 1-document collections (in extended + matching mode) + + * fixed .spl files getting unlinked + + * fixed crash in schema compatibility test + + * fixed UTF-8 Russian stemmer + + * fixed requested matches count when querying distributed agents + + * fixed signed vs. unsigned issues everywhere (ranged queries, CLI + search output, and obtaining docid) + + * fixed potential crashes vs. negative query offsets + + * fixed 0-match docs vs. extended mode vs. stats + + * fixed group/timestamp filters being ignored if querying from older + clients + + * fixed docs to mention pgsql source type + + * fixed issues with explicit '&' in extended matching mode + + * fixed wrong assertion in SBCS encoder + + * fixed crashes with no-attribute indexes after rotate + +A.9. Version 0.9.7-rc2, 15 dec 2006 +=================================== + + * added support for extended matching mode (query language) + + * added support for extended sorting mode (sorting clauses) + + * added support for SBCS excerpts + + * added mmap()ing for attributes and wordlist (improves search time, + speeds up fork() greatly) + + * fixed attribute name handling to be case insensitive + + * fixed default compiler options to simplify post-mortem debugging + (added -g, removed -fomit-frame-pointer) + + * fixed rare memory leak + + * fixed "hello hello" queries in "match phrase" mode + + * fixed issue with excerpts, texts and overlong queries + + * fixed logging multiple index name (no longer tokenized) + + * fixed trailing stopword not flushed from tokenizer + + * fixed boolean evaluation + + * fixed pidfile being wrongly unlink()ed on bind() failure + + * fixed --with-mysql-includes/libs (they conflicted with well-known + paths) + + * fixes for 64-bit platforms + +A.10. Version 0.9.7-rc1, 26 oct 2006 +==================================== + + * added alpha index merging code + + * added an option to decrease max_matches per-query + + * added an option to specify IP address for searchd to listen on + + * added support for unlimited amount of configured sources and indexes + + * added support for group-by queries + + * added support for /2 range modifier in charset_table + + * added support for arbitrary amount of document attributes + + * added logging filter count and index name + + * added --with-debug option to configure to compile in debug mode + + * added -DNDEBUG when compiling in default mode + + * improved search time (added doclist size hints, in-memory wordlist + cache, and used VLB coding everywhere) + + * improved (refactored) SQL driver code (adding new drivers should be + very easy now) + + * improved exceprts generation + + * fixed issue with empty sources and ranged queries + + * fixed querying purely remote distributed indexes + + * fixed suffix length check in English stemmer in some cases + + * fixed UTF-8 decoder for codes over U+20000 (for CJK) + + * fixed UTF-8 encoder for 3-byte sequences (for CJK) + + * fixed overshort (less than min_word_len) words prepended to next field + + * fixed source connection order (indexer does not connect to all sources + at once now) + + * fixed line numbering in config parser + + * fixed some issues with index rotation + +A.11. Version 0.9.6, 24 jul 2006 +================================ + + * added support for empty indexes + + * added support for multiple sql_query_pre/post/post_index + + * fixed timestamp ranges filter in "match any" mode + + * fixed configure issues with --without-mysql and --with-pgsql options + + * fixed building on Solaris 9 + +A.12. Version 0.9.6-rc1, 26 jun 2006 +==================================== + + * added boolean queries support (experimental, beta version) + + * added simple file-based query cache (experimental, beta version) + + * added storage engine for MySQL 5.0 and 5.1 (experimental, beta + version) + + * added GNU style configure script + + * added new searchd protocol (all binary, and should be backwards + compatible) + + * added distributed searching support to searchd + + * added PostgreSQL driver + + * added excerpts generation + + * added min_word_len option to index + + * added max_matches option to searchd, removed hardcoded MAX_MATCHES + limit + + * added initial documentation, and a working example.sql + + * added support for multiple sources per index + + * added soundex support + + * added group ID ranges support + + * added --stdin command-line option to search utility + + * added --noprogress option to indexer + + * added --index option to search + + * fixed UTF-8 decoder (3-byte codepoints did not work) + + * fixed PHP API to handle big result sets faster + + * fixed config parser to handle empty values properly + + * fixed redundant time(NULL) calls in time-segments mode + +--eof-- diff --git a/coreseek/csft-4.1/doc/sphinx.xml b/coreseek/csft-4.1/doc/sphinx.xml new file mode 100755 index 0000000..d4e07bf --- /dev/null +++ b/coreseek/csft-4.1/doc/sphinx.xml @@ -0,0 +1,11471 @@ + + +]> + + +Sphinx 2.0.1-beta reference manual +Free open-source SQL full-text search engine + + + +2001-2011 +Andrew Aksyonoff + + +2008-2011 +Sphinx Technologies Inc, http://sphinxsearch.com + + + + +Introduction + + +About + +Sphinx is a full-text search engine, publicly distributed under GPL version 2. +Commercial licensing (eg. for embedded use) is available upon request. + + +Technically, Sphinx is a standalone software package provides +fast and relevant full-text search functionality to client applications. +It was specially designed to integrate well with SQL databases storing +the data, and to be easily accessed scripting languages. However, Sphinx +does not depend on nor require any specific database to function. + + +Applications can access Sphinx search daemon (searchd) using any of +the three different access methods: a) via native search API (SphinxAPI), +b) via Sphinx own implementation of MySQL network protocol (using a small +SQL subset called SphinxQL), or c) via MySQL server with a pluggable +storage engine (SphinxSE). + + +Official native SphinxAPI implementations for PHP, Perl, Ruby, and Java +are included within the distribution package. API is very lightweight +so porting it to a new language is known to take a few hours or days. +Third party API ports and plugins exist for Perl, C#, Haskell, +Ruby-on-Rails, and possibly other languages and frameworks. + + +Starting version 1.10-beta, Sphinx supports two different indexing +backends: "disk" index backend, and "realtime" (RT) index backend. +Disk indexes support online full-text index rebuilds, but online updates +can only be done on non-text (attribute) data. RT indexes additionally +allow for online full-text index updates. Previous versions only +supported disk indexes. + + +Data can be loaded into disk indexes using a so-called data source. +Built-in sources can fetch data directly from MySQL, PostgreSQL, ODBC +compliant database (MS SQL, Oracle, etc), or a pipe in a custom XML format. +Adding new data sources drivers (eg. to natively support other DBMSes) +is designed to be as easy as possible. RT indexes, as of 1.10-beta, +can only be populated using SphinxQL. + + +As for the name, Sphinx is an acronym which is officially decoded +as SQL Phrase Index. Yes, I know about CMU's Sphinx project. + + + + +Sphinx features + +Key Sphinx features are: + +high indexing and searching performance; +advanced indexing and querying tools (flexible and feature-rich text tokenizer, querying language, several different ranking modes, etc); +advanced result set post-processing (SELECT with expressions, WHERE, ORDER BY, GROUP BY etc over text search results); +proven scalability up to billions of documents, terabytes of data, and thousands of queries per second; +easy integration with SQL and XML data sources, and SphinxAPI, SphinxQL, or SphinxSE search interfaces; +easy scaling with distributed searches. + +To expand a bit, Sphinx: + +has high indexing speed (upto 10-15 MB/sec per core on an internal benchmark); +has high search speed (upto 150-250 queries/sec per core against 1,000,000 documents, 1.2 GB of data on an internal benchmark); +has high scalability (biggest known cluster indexes over 3,000,000,000 documents, and busiest one peaks over 50,000,000 queries/day); +provides good relevance ranking through combination of phrase proximity ranking and statistical (BM25) ranking; +provides distributed searching capabilities; +provides document excerpts (snippets) generation; +provides searching from within application with SphinxAPI or SphinxQL interfaces, and from within MySQL with pluggable SphinxSE storage engine; +supports boolean, phrase, word proximity and other types of queries; +supports multiple full-text fields per document (upto 32 by default); +supports multiple additional attributes per document (ie. groups, timestamps, etc); +supports stopwords; +supports morphological word forms dictionaries; +supports tokenizing exceptions; +supports both single-byte encodings and UTF-8; +supports stemming (stemmers for English, Russian and Czech are built-in; and stemmers for +French, Spanish, Portuguese, Italian, Romanian, German, Dutch, Swedish, Norwegian, Danish, Finnish, Hungarian, +are available by building third party libstemmer library); +supports MySQL natively (all types of tables, including MyISAM, InnoDB, NDB, Archive, etc are supported); +supports PostgreSQL natively; +supports ODBC compliant databases (MS SQL, Oracle, etc) natively; +...has 50+ other features not listed here, refer to API and configuration manual! + + + + + +Where to get Sphinx +Sphinx is available through its official Web site at http://sphinxsearch.com/. + +Currently, Sphinx distribution tarball includes the following software: + +indexer: an utility which creates fulltext indexes; +search: a simple command-line (CLI) test utility which searches through fulltext indexes; +searchd: a daemon which enables external software (eg. Web applications) to search through fulltext indexes; +sphinxapi: a set of searchd client API libraries for popular Web scripting languages (PHP, Python, Perl, Ruby). +spelldump: a simple command-line tool to extract the items from an ispell or MySpell +(as bundled with OpenOffice) format dictionary to help customize your index, for use with wordforms. +indextool: an utility to dump miscellaneous debug information about the index, added in version 0.9.9-rc2. + + + + + +License + +This program is free software; you can 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. See COPYING file for details. + + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 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 + + +Non-GPL licensing (for OEM/ISV embedded use) can also be arranged, please +contact us to discuss +commercial licensing possibilities. + + + + +Credits +Author + +Sphinx initial author (and a benevolent dictator ever since): + +Andrew Aksyonoff, http://shodan.ru + + +Team + +Past and present employees of Sphinx Technologies Inc who should be +noted on their work on Sphinx (in alphabetical order): + +Alexander Klimenko +Alexey Dvoichenkov +Alexey Vinogradov +Ilya Kuznetsov +Stanislav Klinov + + +Contributors +People who contributed to Sphinx and their contributions (in no particular order): + +Robert "coredev" Bengtsson (Sweden), initial version of PostgreSQL data source +Len Kranendonk, Perl API +Dmytro Shteflyuk, Ruby API + + + +Many other people have contributed ideas, bug reports, fixes, etc. +Thank you! + + + + +History + +Sphinx development was started back in 2001, because I didn't manage +to find an acceptable search solution (for a database driven Web site) +which would meet my requirements. Actually, each and every important aspect was a problem: + +search quality (ie. good relevance) +statistical ranking methods performed rather bad, especially on large collections of small documents (forums, blogs, etc) + +search speed +especially if searching for phrases which contain stopwords, as in "to be or not to be" + +moderate disk and CPU requirements when indexing +important in shared hosting enivronment, not to mention the indexing speed. + + + + +Despite the amount of time passed and numerous improvements made in the +other solutions, there's still no solution which I personally would +be eager to migrate to. + + +Considering that and a lot of positive feedback received from Sphinx users +during last years, the obvious decision is to continue developing Sphinx +(and, eventually, to take over the world). + + + + + +Installation + + +Supported systems + +Most modern UNIX systems with a C++ compiler should be able +to compile and run Sphinx without any modifications. + + +Currently known systems Sphinx has been successfully running on are: + +Linux 2.4.x, 2.6.x (many various distributions) +Windows 2000, XP +FreeBSD 4.x, 5.x, 6.x, 7.x +NetBSD 1.6, 3.0 +Solaris 9, 11 +Mac OS X + + + +CPU architectures known to work include X86, X86-64, SPARC64, ARM. + + +Chance are good that Sphinx should work on other Unix platforms as well; +please report any platforms missing from this list that worked for you! + + + + +Required tools + +On UNIX, you will need the following tools to build +and install Sphinx: + +a working C++ compiler. GNU gcc is known to work. +a good make program. GNU make is known to work. + + + +On Windows, you will need Microsoft Visual C/C++ Studio .NET 2003 or 2005. +Other compilers/environments will probably work as well, but for the +time being, you will have to build makefile (or other environment +specific project files) manually. + + + + +Installing Sphinx on Linux + + + + Extract everything from the distribution tarball (haven't you already?) + and go to the sphinx subdirectory. (We are using + version 2.0.1-beta here for the sake of example only; be sure to change this + to a specific version you're using.) + +$ tar xzvf sphinx-2.0.1-beta.tar.gz +$ cd sphinx + + + Run the configuration program: + $ ./configure + + There's a number of options to configure. The complete listing may + be obtained by using switch. The most important ones are: + + , which specifies where to install Sphinx; such as (all of the examples use this prefix) + , which specifies where to look for MySQL + include and library files, if auto-detection fails; + , which specifies where to look for PostgreSQL + include and library files. + + + + Build the binaries: + $ make + + Install the binaries in the directory of your choice: + (defaults to /usr/local/bin/ on *nix systems, + but is overridden with ) + $ make install + + + +Installing Sphinx on Windows +Installing Sphinx on a Windows server is often easier than installing on a Linux environment; +unless you are preparing code patches, you can use the pre-compiled binary files from the Downloads +area on the website. + + + Extract everything from the .zip file you have downloaded - + sphinx-2.0.1-beta-win32.zip, + or sphinx-2.0.1-beta-win32-pgsql.zip if you need PostgresSQL support as well. + (We are using version 2.0.1-beta here for the sake of example only; + be sure to change this to a specific version you're using.) + You can use Windows Explorer in Windows XP and up to extract the files, + or a freeware package like 7Zip to open the archive. + For the remainder of this guide, we will assume that the folders are unzipped into C:\Sphinx, + such that searchd.exe can be found in C:\Sphinx\bin\searchd.exe. If you decide + to use any different location for the folders or configuration file, please change it accordingly. + + Edit the contents of sphinx.conf.in - specifically entries relating to @CONFDIR@ - to paths suitable for your system. + + Install the searchd system as a Windows service: + C:\Sphinx\bin> C:\Sphinx\bin\searchd --install --config C:\Sphinx\sphinx.conf.in --servicename SphinxSearch + + The searchd service will now be listed in the Services panel + within the Management Console, available from Administrative Tools. It will not have been + started, as you will need to configure it and build your indexes with indexer + before starting the service. A guide to do this can be found under + Quick tour. + During the next steps of the install (which involve running indexer pretty much as + you would on Linux) you may find that you get an error relating to libmysql.dll not being found. + If you have MySQL installed, you should find a copy of this library in your Windows directory, + or sometimes in Windows\System32, or failing that in the MySQL core directories. If you + do receive an error please copy libmysql.dll into the bin directory. + + + +Known installation issues + +If configure fails to locate MySQL headers and/or libraries, +try checking for and installing mysql-devel package. On some systems, +it is not installed by default. + + +If make fails with a message which look like + +/bin/sh: g++: command not found +make[1]: *** [libsphinx_a-sphinx.o] Error 127 + +try checking for and installing gcc-c++ package. + + +If you are getting compile-time errors which look like + +sphinx.cpp:67: error: invalid application of `sizeof' to + incomplete type `Private::SizeError<false>' + +this means that some compile-time type size check failed. +The most probable reason is that off_t type is less than 64-bit +on your system. As a quick hack, you can edit sphinx.h and replace off_t +with DWORD in a typedef for SphOffset_t, but note that this will prohibit +you from using full-text indexes larger than 2 GB. Even if the hack helps, +please report such issues, providing the exact error message and +compiler/OS details, so I could properly fix them in next releases. + + +If you keep getting any other error, or the suggestions above +do not seem to help you, please don't hesitate to contact me. + + + + +Quick Sphinx usage tour + +All the example commands below assume that you installed Sphinx +in /usr/local/sphinx, so searchd can +be found in /usr/local/sphinx/bin/searchd. + + +To use Sphinx, you will need to: + + + + Create a configuration file. + + Default configuration file name is sphinx.conf. + All Sphinx programs look for this file in current working directory + by default. + + + Sample configuration file, sphinx.conf.dist, which has + all the options documented, is created by configure. + Copy and edit that sample file to make your own configuration: (assuming Sphinx is installed into /usr/local/sphinx/) + +$ cd /usr/local/sphinx/etc +$ cp sphinx.conf.dist sphinx.conf +$ vi sphinx.conf + + Sample configuration file is setup to index documents + table from MySQL database test; so there's example.sql + sample data file to populate that table with a few documents for testing purposes: + + $ mysql -u test < /usr/local/sphinx/etc/example.sql + + Run the indexer to create full-text index from your data: +$ cd /usr/local/sphinx/etc +$ /usr/local/sphinx/bin/indexer --all + + Query your newly created index! + + +To query the index from command line, use search utility: + +$ cd /usr/local/sphinx/etc +$ /usr/local/sphinx/bin/search test + +To query the index from your PHP scripts, you need to: + + + + Run the search daemon which your script will talk to: +$ cd /usr/local/sphinx/etc +$ /usr/local/sphinx/bin/searchd + + + + Run the attached PHP API test script (to ensure that the daemon + was succesfully started and is ready to serve the queries): + +$ cd sphinx/api +$ php test.php test + + + + Include the API (it's located in api/sphinxapi.php) + into your own scripts and use it. + + + +Happy searching! + + + + + +Indexing + + +Data sources + +The data to be indexed can generally come from very different +sources: SQL databases, plain text files, HTML files, mailboxes, +and so on. From Sphinx point of view, the data it indexes is a +set of structured documents, each of which has the +same set of fields. This is biased towards SQL, where +each row correspond to a document, and each column to a field. + + +Depending on what source Sphinx should get the data from, +different code is required to fetch the data and prepare it for indexing. +This code is called data source driver (or simply +driver or data source for brevity). + + +At the time of this writing, there are drivers for MySQL and +PostgreSQL databases, which can connect to the database using +its native C/C++ API, run queries and fetch the data. There's +also a driver called xmlpipe, which runs a specified command +and reads the data from its stdout. +See section for the format description. + + +There can be as many sources per index as necessary. They will be +sequentially processed in the very same order which was specifed in +index definition. All the documents coming from those sources +will be merged as if they were coming from a single source. + + + + +Attributes + +Attributes are additional values associated with each document +that can be used to perform additional filtering and sorting during search. + + +It is often desired to additionally process full-text search results +based not only on matching document ID and its rank, but on a number +of other per-document values as well. For instance, one might need to +sort news search results by date and then relevance, +or search through products within specified price range, +or limit blog search to posts made by selected users, +or group results by month. To do that efficiently, Sphinx allows +to attach a number of additional attributes +to each document, and store their values in the full-text index. +It's then possible to use stored values to filter, sort, +or group full-text matches. + +Attributes, unlike the fields, are not full-text indexed. They +are stored in the index, but it is not possible to search them as full-text, +and attempting to do so results in an error. +For example, it is impossible to use the extended matching mode expression + to match documents where column is 1, if column is an +attribute, and this is still true even if the numeric digits are normally indexed. +Attributes can be used for filtering, though, to restrict returned +rows, as well as sorting or result grouping; +it is entirely possible to sort results purely based on attributes, and ignore the search +relevance tools. Additionally, attributes are returned from the search daemon, while the +indexed text is not. + +A good example for attributes would be a forum posts table. Assume +that only title and content fields need to be full-text searchable - +but that sometimes it is also required to limit search to a certain +author or a sub-forum (ie. search only those rows that have some +specific values of author_id or forum_id columns in the SQL table); +or to sort matches by post_date column; or to group matching posts +by month of the post_date and calculate per-group match counts. + + +This can be achieved by specifying all the mentioned columns +(excluding title and content, that are full-text fields) as +attributes, indexing them, and then using API calls to +setup filtering, sorting, and grouping. Here as an example. + +Example sphinx.conf part: + +... +sql_query = SELECT id, title, content, \ + author_id, forum_id, post_date FROM my_forum_posts +sql_attr_uint = author_id +sql_attr_uint = forum_id +sql_attr_timestamp = post_date +... + +Example application code (in PHP): + +// only search posts by author whose ID is 123 +$cl->SetFilter ( "author_id", array ( 123 ) ); + +// only search posts in sub-forums 1, 3 and 7 +$cl->SetFilter ( "forum_id", array ( 1,3,7 ) ); + +// sort found posts by posting date in descending order +$cl->SetSortMode ( SPH_SORT_ATTR_DESC, "post_date" ); + + +Attributes are named. Attribute names are case insensitive. +Attributes are not full-text indexed; they are stored in the index as is. +Currently supported attribute types are: + +unsigned integers (1-bit to 32-bit wide); +UNIX timestamps; +floating point values (32-bit, IEEE 754 single precision); +string ordinals (specially computed integers); +strings (since 1.10-beta); +MVA, multi-value attributes (variable-length lists of 32-bit unsigned integers). + + + +The complete set of per-document attribute values is sometimes +referred to as docinfo. Docinfos can either be + +stored separately from the main full-text index data ("extern" storage, in .spa file), or +attached to each occurence of document ID in full-text index data ("inline" storage, in .spd file). + + + +When using extern storage, a copy of .spa file +(with all the attribute values for all the documents) is kept in RAM by +searchd at all times. This is for performance reasons; +random disk I/O would be too slow. On the contrary, inline storage does not +require any additional RAM at all, but that comes at the cost of greatly +inflating the index size: remember that it copies all +attribute value every time when the document ID +is mentioned, and that is exactly as many times as there are +different keywords in the document. Inline may be the only viable +option if you have only a few attributes and need to work with big +datasets in limited RAM. However, in most cases extern storage +makes both indexing and searching much more efficient. + + +Search-time memory requirements for extern storage are +(1+number_of_attrs)*number_of_docs*4 bytes, ie. 10 million docs with +2 groups and 1 timestamp will take (1+2+1)*10M*4 = 160 MB of RAM. +This is PER DAEMON, not per query. searchd +will allocate 160 MB on startup, read the data and keep it shared between queries. +The children will NOT allocate any additional +copies of this data. + + + + +MVA (multi-valued attributes) + +MVAs, or multi-valued attributes, are an important special type of per-document attributes in Sphinx. +MVAs make it possible to attach lists of values to every document. +They are useful for article tags, product categories, etc. +Filtering and group-by (but not sorting) on MVA attributes is supported. + + +Currently, MVA list entries are limited to unsigned 32-bit integers. +The list length is not limited, you can have an arbitrary number of values +attached to each document as long as RAM permits (.spm file +that contains the MVA values will be precached in RAM by searchd). +The source data can be taken either from a separate query, or from a document field; +see source type in sql_attr_multi. +In the first case the query will have to return pairs of document ID and MVA values, +in the second one the field will be parsed for integer values. +There are absolutely no requirements as to incoming data order; the values will be +automatically grouped by document ID (and internally sorted within the same ID) +during indexing anyway. + + +When filtering, a document will match the filter on MVA attribute +if any of the values satisfy the filtering condition. +(Therefore, documents that pass through exclude filters will not +contain any of the forbidden values.) +When grouping by MVA attribute, a document will contribute to as +many groups as there are different MVA values associated with that document. +For instance, if the collection contains exactly 1 document having a 'tag' MVA +with values 5, 7, and 11, grouping on 'tag' will produce 3 groups with +'@count' equal to 1 and '@groupby' key values of 5, 7, and 11 respectively. +Also note that grouping by MVA might lead to duplicate documents in the result set: +because each document can participate in many groups, it can be chosen as the best +one in in more than one group, leading to duplicate IDs. PHP API historically +uses ordered hash on the document ID for the resulting rows; so you'll also need to use +SetArrayResult() in order +to employ group-by on MVA with PHP API. + + + + +Indexes + +To be able to answer full-text search queries fast, Sphinx needs +to build a special data structure optimized for such queries from +your text data. This structure is called index; and +the process of building index from text is called indexing. + + +Different index types are well suited for different tasks. +For example, a disk-based tree-based index would be easy to +update (ie. insert new documents to existing index), but rather +slow to search. Therefore, Sphinx architecture allows for different +index types to be implemented easily. + + +The only index type which is implemented in Sphinx at the moment is +designed for maximum indexing and searching speed. This comes at a cost +of updates being really slow; theoretically, it might be slower to +update this type of index than than to reindex it from scratch. +However, this very frequently could be worked around with +muiltiple indexes, see for details. + + +It is planned to implement more index types, including the +type which would be updateable in real time. + + +There can be as many indexes per configuration file as necessary. +indexer utility can reindex either all of them +(if option is specified), or a certain explicitly +specified subset. searchd utility will serve all +the specified indexes, and the clients can specify what indexes to +search in run time. + + + + +Restrictions on the source data + +There are a few different restrictions imposed on the source data +which is going to be indexed by Sphinx, of which the single most +important one is: + + +ALL DOCUMENT IDS MUST BE UNIQUE UNSIGNED NON-ZERO INTEGER NUMBERS (32-BIT OR 64-BIT, DEPENDING ON BUILD TIME SETTINGS). + + +If this requirement is not met, different bad things can happen. +For instance, Sphinx can crash with an internal assertion while indexing; +or produce strange results when searching due to conflicting IDs. +Also, a 1000-pound gorilla might eventually come out of your +display and start throwing barrels at you. You've been warned. + + + + +Charsets, case folding, and translation tables + +When indexing some index, Sphinx fetches documents from +the specified sources, splits the text into words, and does +case folding so that "Abc", "ABC" and "abc" would be treated +as the same word (or, to be pedantic, term). + + +To do that properly, Sphinx needs to know + +what encoding is the source text in; +what characters are letters and what are not; +what letters should be folded to what letters. + +This should be configured on a per-index basis using + and + options. + +specifies whether the document encoding is single-byte (SBCS) or UTF-8. + +specifies the table that maps letter characters to their case +folded versions. The characters that are not in the table are considered +to be non-letters and will be treated as word separators when indexing +or searching through this index. + + +Note that while default tables do not include space character +(ASCII code 0x20, Unicode U+0020) as a letter, it's in fact +perfectly legal to do so. This can be +useful, for instance, for indexing tag clouds, so that space-separated +word sets would index as a single search query term. + + +Default tables currently include English and Russian characters. +Please do submit your tables for other languages! + + + + +SQL data sources (MySQL, PostgreSQL) + +With all the SQL drivers, indexing generally works as follows. + +connection to the database is established; +pre-query (see ) is executed + to perform any necessary initial setup, such as setting per-connection encoding with MySQL; +main query (see ) is executed and the rows it returns are indexed; +post-query (see ) is executed + to perform any necessary cleanup; +connection to the database is closed; +indexer does the sorting phase (to be pedantic, index-type specific post-processing); +connection to the database is established again; +post-index query (see ) is executed + to perform any necessary final cleanup; +connection to the database is closed again. + +Most options, such as database user/host/password, are straightforward. +However, there are a few subtle things, which are discussed in more detail here. + +Ranged queries + +Main query, which needs to fetch all the documents, can impose +a read lock on the whole table and stall the concurrent queries +(eg. INSERTs to MyISAM table), waste a lot of memory for result set, etc. +To avoid this, Sphinx supports so-called ranged queries. +With ranged queries, Sphinx first fetches min and max document IDs from +the table, and then substitutes different ID intervals into main query text +and runs the modified query to fetch another chunk of documents. +Here's an example. + +Ranged query usage example + +# in sphinx.conf + +sql_query_range = SELECT MIN(id),MAX(id) FROM documents +sql_range_step = 1000 +sql_query = SELECT * FROM documents WHERE id>=$start AND id<=$end + + + +If the table contains document IDs from 1 to, say, 2345, then sql_query would +be run three times: + +with replaced with 1 and replaced with 1000; +with replaced with 1001 and replaced with 2000; +with replaced with 2000 and replaced with 2345. + +Obviously, that's not much of a difference for 2000-row table, +but when it comes to indexing 10-million-row MyISAM table, +ranged queries might be of some help. + + vs. + +The difference between post-query and post-index query is in that post-query +is run immediately when Sphinx received all the documents, but further indexing +may still fail for some other reason. On the contrary, +by the time the post-index query gets executed, it is guaranteed +that the indexing was succesful. Database connection is dropped and re-established +because sorting phase can be very lengthy and would just timeout otherwise. + + + + +xmlpipe data source + +xmlpipe data source was designed to enable users to plug data into +Sphinx without having to implement new data sources drivers themselves. +It is limited to 2 fixed fields and 2 fixed attributes, and is deprecated +in favor of now. For new streams, use xmlpipe2. + + +To use xmlpipe, configure the data source in your configuration file +as follows: + +source example_xmlpipe_source +{ + type = xmlpipe + xmlpipe_command = perl /www/mysite.com/bin/sphinxpipe.pl +} + +The indexer will run the command specified +in , +and then read, parse and index the data it prints to stdout. +More formally, it opens a pipe to given command and then reads +from that pipe. + + +indexer will expect one or more documents in custom XML format. +Here's the example document stream, consisting of two documents: +XMLpipe document stream + +<document> +<id>123</id> +<group>45</group> +<timestamp>1132223498</timestamp> +<title>test title</title> +<body> +this is my document body +</body> +</document> + +<document> +<id>124</id> +<group>46</group> +<timestamp>1132223498</timestamp> +<title>another test</title> +<body> +this is another document +</body> +</document> + + + + +Legacy xmlpipe legacy driver uses a builtin parser +which is pretty fast but really strict and does not actually +fully support XML. It requires that all the fields must +be present, formatted exactly as in this example, and +occur exactly in the same order. The only optional +field is ; it defaults to 1. + + + + +xmlpipe2 data source + +xmlpipe2 lets you pass arbitrary full-text and attribute data to Sphinx +in yet another custom XML format. It also allows to specify the schema +(ie. the set of fields and attributes) either in the XML stream itself, +or in the source settings. + + +When indexing xmlpipe2 source, indexer runs the given command, opens +a pipe to its stdout, and expects well-formed XML stream. Here's sample +stream data: +xmlpipe2 document stream + +<?xml version="1.0" encoding="utf-8"?> +<sphinx:docset> + +<sphinx:schema> +<sphinx:field name="subject"/> +<sphinx:field name="content"/> +<sphinx:attr name="published" type="timestamp"/> +<sphinx:attr name="author_id" type="int" bits="16" default="1"/> +</sphinx:schema> + +<sphinx:document id="1234"> +<content>this is the main content <![CDATA[[and this <cdata> entry +must be handled properly by xml parser lib]]></content> +<published>1012325463</published> +<subject>note how field/attr tags can be +in <b class="red">randomized</b> order</subject> +<misc>some undeclared element</misc> +</sphinx:document> + +<sphinx:document id="1235"> +<subject>another subject</subject> +<content>here comes another document, and i am given to understand, +that in-document field order must not matter, sir</content> +<published>1012325467</published> +</sphinx:document> + +<!-- ... even more sphinx:document entries here ... --> + +<sphinx:killlist> +<id>1234</id> +<id>4567</id> +</sphinx:killlist> + +</sphinx:docset> + + + + +Arbitrary fields and attributes are allowed. +They also can occur in the stream in arbitrary order within each document; the order is ignored. +There is a restriction on maximum field length; fields longer than 2 MB will be truncated to 2 MB (this limit can be changed in the source). + + +The schema, ie. complete fields and attributes list, must be declared +before any document could be parsed. This can be done either in the +configuration file using and +settings, or right in the stream using <sphinx:schema> element. +<sphinx:schema> is optional. It is only allowed to occur as the very +first sub-element in <sphinx:docset>. If there is no in-stream +schema definition, settings from the configuration file will be used. +Otherwise, stream settings take precedence. + + +Unknown tags (which were not declared neither as fields nor as attributes) +will be ignored with a warning. In the example above, <misc> will be ignored. +All embedded tags and their attributes (such as <b> in <subject> +in the example above) will be silently ignored. + + +Support for incoming stream encodings depends on whether iconv +is installed on the system. xmlpipe2 is parsed using libexpat +parser that understands US-ASCII, ISO-8859-1, UTF-8 and a few UTF-16 variants +natively. Sphinx configure script will also check +for libiconv presence, and utilize it to handle +other encodings. libexpat also enforces the +requirement to use UTF-8 charset on Sphinx side, because the +parsed data it returns is always in UTF-8. + + + +XML elements (tags) recognized by xmlpipe2 (and their attributes where applicable) are: + + + sphinx:docset + Mandatory top-level element, denotes and contains xmlpipe2 document set. + + + sphinx:schema + Optional element, must either occur as the very first child + of sphinx:docset, or never occur at all. Declares the document schema. + Contains field and attribute declarations. If present, overrides + per-source settings from the configuration file. + + + + sphinx:field + Optional element, child of sphinx:schema. Declares a full-text field. + Known attributes are: + + "name", specifies the XML element name that will be treated as a full-text field in the subsequent documents. + "attr", specifies whether to also index this field as a string or word count attribute. Possible values are "string" and "wordcount". Introduced in version 1.10-beta. + + + + + sphinx:attr + Optional element, child of sphinx:schema. Declares an attribute. + Known attributes are: + + "name", specifies the element name that should be treated as an attribute in the subsequent documents. + "type", specifies the attribute type. Possible values are "int", "timestamp", "str2ordinal", "bool", "float" and "multi". + "bits", specifies the bit size for "int" attribute type. Valid values are 1 to 32. + "default", specifies the default value for this attribute that should be used if the attribute's element is not present in the document. + + + + + sphinx:document + Mandatory element, must be a child of sphinx:docset. + Contains arbitrary other elements with field and attribute values + to be indexed, as declared either using sphinx:field and sphinx:attr + elements or in the configuration file. The only known attribute + is "id" that must contain the unique integer document ID. + + + + sphinx:killlist + Optional element, child of sphinx:docset. + Contains a number of "id" elements whose contents are document IDs + to be put into a kill-list for this index. + + + + + + + +Live index updates + +There are two major approaches to maintaining the full-text index +contents up to date. Note, however, that both these approaches deal +with the task of full-text data updates, and not +attribute updates. Instant attribute updates are supported since +version 0.9.8. Refer to UpdateAttributes() +API call description for details. + + +First, you can use disk-based indexes, partition them manually, +and only rebuild the smaller partitions (so-called "deltas") frequently. +By minimizing the rebuild size, you can reduce the average indexing lag +to something as low as 30-60 seconds. This approach was the the only one +available in versions 0.9.x. On huge collections it actually might be +the most efficient one. Refer to +for details. + + +Second, versions 1.x (starting with 1.10-beta) add support for so-called +real-time indexes (RT indexes for short) that on-the-fly updates of the +full-text data. Updates on a RT index can appear in the search results in +1-2 milliseconds, ie. 0.001-0.002 seconds. However, RT index are less +efficient for bulk indexing huge amounts of data. Refer to + for details. + + + + +Delta index updates + +There's a frequent situation when the total dataset is too big +to be reindexed from scratch often, but the amount of new records +is rather small. Example: a forum with a 1,000,000 archived posts, +but only 1,000 new posts per day. + + +In this case, "live" (almost real time) index updates could be +implemented using so called "main+delta" scheme. + + +The idea is to set up two sources and two indexes, with one +"main" index for the data which only changes rarely (if ever), +and one "delta" for the new documents. In the example above, +1,000,000 archived posts would go to the main index, and newly +inserted 1,000 posts/day would go to the delta index. Delta index +could then be reindexed very frequently, and the documents can +be made available to search in a matter of minutes. + + +Specifying which documents should go to what index and +reindexing main index could also be made fully automatical. +One option would be to make a counter table which would track +the ID which would split the documents, and update it +whenever the main index is reindexed. + +Fully automated live updates + +# in MySQL +CREATE TABLE sph_counter +( + counter_id INTEGER PRIMARY KEY NOT NULL, + max_doc_id INTEGER NOT NULL +); + +# in sphinx.conf +source main +{ + # ... + sql_query_pre = SET NAMES utf8 + sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents + sql_query = SELECT id, title, body FROM documents \ + WHERE id<=( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) +} + +source delta : main +{ + sql_query_pre = SET NAMES utf8 + sql_query = SELECT id, title, body FROM documents \ + WHERE id>( SELECT max_doc_id FROM sph_counter WHERE counter_id=1 ) +} + +index main +{ + source = main + path = /path/to/main + # ... all the other settings +} + +# note how all other settings are copied from main, +# but source and path are overridden (they MUST be) +index delta : main +{ + source = delta + path = /path/to/delta +} + + + + +Note how we're overriding sql_query_pre in the delta source. +We need to explicitly have that override. Otherwise REPLACE query +would be run when indexing delta source too, effectively nullifying it. However, +when we issue the directive in the inherited source for the first time, it removes +all inherited values, so the encoding setup is also lost. +So sql_query_pre in the delta can not just be empty; and we need +to issue the encoding setup query explicitly once again. + + + + +Index merging + +Merging two existing indexes can be more efficient that indexing the data +from scratch, and desired in some cases (such as merging 'main' and 'delta' +indexes instead of simply reindexing 'main' in 'main+delta' partitioning +scheme). So indexer has an option to do that. +Merging the indexes is normally faster than reindexing but still +not instant on huge indexes. Basically, +it will need to read the contents of both indexes once and write +the result once. Merging 100 GB and 1 GB index, for example, +will result in 202 GB of IO (but that's still likely less than +the indexing from scratch requires). + + +The basic command syntax is as follows: + +indexer --merge DSTINDEX SRCINDEX [--rotate] + +Only the DSTINDEX index will be affected: the contents of SRCINDEX will be merged into it. + switch will be required if DSTINDEX is already being served by searchd. +The initially devised usage pattern is to merge a smaller update from SRCINDEX into DSTINDEX. +Thus, when merging the attributes, values from SRCINDEX will win if duplicate document IDs are encountered. +Note, however, that the "old" keywords will not be automatically removed in such cases. +For example, if there's a keyword "old" associated with document 123 in DSTINDEX, and a keyword "new" associated +with it in SRCINDEX, document 123 will be found by both keywords after the merge. +You can supply an explicit condition to remove documents from DSTINDEX to mitigate that; +the relevant switch is : + +indexer --merge main delta --merge-dst-range deleted 0 0 + +This switch lets you apply filters to the destination index along with merging. +There can be several filters; all of their conditions must be met in order +to include the document in the resulting mergid index. In the example above, +the filter passes only those records where 'deleted' is 0, eliminating all +records that were flagged as deleted (for instance, using +UpdateAttributes() call). + + + + + +Real-time indexes + +Real-time indexes (or RT indexes for brevity) are a new backend +that lets you insert, update, or delete documents (rows) on the fly. +RT indexes were added in version 1.10-beta. While querying of RT indexes +is possible using any of the SphinxAPI, SphinxQL, or SphinxSE, updating +them is only possible via SphinxQL at the moment. Full SphinxQL +reference is available in . + + + +RT indexes overview + +RT indexes should be declared in sphinx.conf, +just as every other index type. Notable differences from the regular, +disk-based indexes are that a) data sources are not required and ignored, +and b) you should explicitly enumerate all the text fields, not just +attributes. Here's an example: + + +RT index declaration + +index rt +{ + type = rt + path = /usr/local/sphinx/data/rt + rt_field = title + rt_field = content + rt_attr_uint = gid +} + + + +RT INDEXES ARE CURRENTLY (AS OF VERSION 1.10-beta) A WORK IN PROGRESS. +Therefore, they might lack certain features: for instance, prefix/infix +indexing, MVA attributes, etc are not supported yet. There also might be +performance and stability issues. However, all the regular indexing features +and most of the searching features are already in place, our internal +testing passes, and last but not least a number of production instances +are already using RT indexes with good results. + + +RT index can be accessed using MySQL protocol. INSERT, REPLACE, DELETE, and +SELECT statements against RT index are supported. For instance, this +is an example session with the sample index above: + + +$ mysql -h 127.0.0.1 -P 9306 +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 1 +Server version: 1.10-dev (r2153) + +Type 'help;' or '\h' for help. Type '\c' to clear the buffer. + +mysql> INSERT INTO rt VALUES ( 1, 'first record', 'test one', 123 ); +Query OK, 1 row affected (0.05 sec) + +mysql> INSERT INTO rt VALUES ( 2, 'second record', 'test two', 234 ); +Query OK, 1 row affected (0.00 sec) + +mysql> SELECT * FROM rt; ++------+--------+------+ +| id | weight | gid | ++------+--------+------+ +| 1 | 1 | 123 | +| 2 | 1 | 234 | ++------+--------+------+ +2 rows in set (0.02 sec) + +mysql> SELECT * FROM rt WHERE MATCH('test'); ++------+--------+------+ +| id | weight | gid | ++------+--------+------+ +| 1 | 1643 | 123 | +| 2 | 1643 | 234 | ++------+--------+------+ +2 rows in set (0.01 sec) + +mysql> SELECT * FROM rt WHERE MATCH('@title test'); +Empty set (0.00 sec) + + +Both partial and batch INSERT syntaxes are supported, ie. +you can specify a subset of columns, and insert several rows at a time. +Deletions are also possible using DELETE statement; the only currently +supported syntax is DELETE FROM <index> WHERE id=<id>. +REPLACE is also supported, enabling you to implement updates. + + +mysql> INSERT INTO rt ( id, title ) VALUES ( 3, 'third row' ), ( 4, 'fourth entry' ); +Query OK, 2 rows affected (0.01 sec) + +mysql> SELECT * FROM rt; ++------+--------+------+ +| id | weight | gid | ++------+--------+------+ +| 1 | 1 | 123 | +| 2 | 1 | 234 | +| 3 | 1 | 0 | +| 4 | 1 | 0 | ++------+--------+------+ +4 rows in set (0.00 sec) + +mysql> DELETE FROM rt WHERE id=2; +Query OK, 0 rows affected (0.00 sec) + +mysql> SELECT * FROM rt WHERE MATCH('test'); ++------+--------+------+ +| id | weight | gid | ++------+--------+------+ +| 1 | 1500 | 123 | ++------+--------+------+ +1 row in set (0.00 sec) + +mysql> INSERT INTO rt VALUES ( 1, 'first record on steroids', 'test one', 123 ); +ERROR 1064 (42000): duplicate id '1' + +mysql> REPLACE INTO rt VALUES ( 1, 'first record on steroids', 'test one', 123 ); +Query OK, 1 row affected (0.01 sec) + +mysql> SELECT * FROM rt WHERE MATCH('steroids'); ++------+--------+------+ +| id | weight | gid | ++------+--------+------+ +| 1 | 1500 | 123 | ++------+--------+------+ +1 row in set (0.01 sec) + + +Data stored in RT index should survive clean shutdown. When binary logging +is enabled, it should also survive crash and/or dirty shutdown, and recover +on subsequent startup. + + + + +Known caveats with RT indexes + +As of 1.10-beta, RT indexes are a beta quality feature: while no major, +showstopper-class issues are known, there still are a few known usage quirks. +Those quirks are listed in this section. + + +Prefix and infix indexing are not supported yet. +MVAs are not supported yet. +Disk chunks optimization routine is not implemented yet. +On initial index creation, attributes are reordered by type, +in the following order: uint, bigint, float, timestamp, string. So when +using INSERT without an explicit column names list, specify all uint +column values first, then bigint, etc. +Default conservative RAM chunk limit () +of 32M can lead to poor performance on bigger indexes, you should raise it to +256..1024M if you're planning to index gigabytes. +High DELETE/REPLACE rate can lead to kill-list fragmentation +and impact searching performance. +No transaction size limits are currently imposed; +too many concurrent INSERT/REPLACE transactions might therefore +consume a lot of RAM. +In case of a damaged binlog, recovery will stop on the +first damaged transaction, even though it's technically possible +to keep looking further for subsequent undamaged transactions, and +recover those. This mid-file damage case (due to flaky HDD/CDD/tape?) +is supposed to be extremely rare, though. +Multiple INSERTs grouped in a single transaction perform +better than equivalent single-row transactions and are recommended for +batch loading of data. + + + + +RT index internals + +RT index is internally chunked. It keeps a so-called RAM chunk +that stores all the most recent changes. RAM chunk memory usage +is rather strictly limited with per-index +rt_mem_limit directive. +Once RAM chunk grows over this limit, a new disk chunk is created +from its data, and RAM chunk is reset. Thus, while most changes +on the RT index will be performed in RAM only and complete instantly +(in milliseconds), those changes that overflow the RAM chunk will +stall for the duration of disk chunk creation (a few seconds). + + +Disk chunks are, in fact, just regular disk-based indexes. +But they're a part of an RT index and automatically managed by it, +so you need not configure nor manage them manually. Because a new +disk chunk is created every time RT chunk overflows the limit, and +because in-memory chunk format is close to on-disk format, the disk +chunks will be approximately bytes +in size each. + + +Generally, it is better to set the limit bigger, to minimize both +the frequency of flushes, and the index fragmentation (number of disk +chunks). For instance, on a dedicated search server that handles +a big RT index, it can be advised to set +to 1-2 GB. A global limit on all indexes is also planned, but not yet +implemented yet as of 1.10-beta. + + +Disk chunk full-text index data can not be actually modified, +so the full-text field changes (ie. row deletions and updates) +suppress a previous row version from a disk chunk using a kill-list, +but do not actually physically purge the data. Therefore, on workloads +with high full-text updates ratio index might eventually get polluted +by these previous row versions, and searching performance would +degrade. Physical index purging that would improve the performance +is planned, but not yet implemented as of 1.10-beta. + + +Data in RAM chunk gets saved to disk on clean daemon shutdown, and +then loaded back on startup. However, on daemon or server crash, +updates from RAM chunk might be lost. To prevent that, binary logging +of transactions can be used; see for details. + + +Full-text changes in RT index are transactional. They are stored +in a per-thread accumulator until COMMIT, then applied at once. +Bigger batches per single COMMIT should result in faster indexing. + + + + +Binary logging + +Binary logs are essentially a recovery mechanism. With binary logs +enabled, searchd writes every given transaction +to the binlog file, and uses that for recovery after an unclean shutdown. +On clean shutdown, RAM chunks are saved to disk, and then all the binlog +files are unlinked. + + +During normal operation, a new binlog file will be opened every time +when limit (which defaults to 128M) +is reached. Older, already closed binlog files are kept until all of the +transactions stored in them (from all indexes) are flushed as a disk chunk. +Setting the limit to 0 pretty much prevents binlog from being unlinked +at all while searchd is running; however, it will +still be unlinked on clean shutdown. + + +There are 3 different binlog flushing strategies, controlled by +binlog_flush directive +which takes the values of 0, 1, or 2. 0 means to flush the log +to OS and sync it to disk every second; 1 means flush and sync +every transaction; and 2 (the default mode) means flush every +transaction but sync every second. Sync is relatively slow because +it has to perform physical disk writes, so mode 1 is the safest +(every committed transaction is guaranteed to be written on disk) +but the slowest. Flushing log to OS prevents from data loss on +searchd crashes but not system crashes. +Mode 2 is the default. + + +On recovery after an unclean shutdown, binlogs are replayed +and all logged transactions since the last good on-disk state +are restored. Transactions are checksummed so in case of binlog +file corruption garbage data will not be replayed; such +a broken transaction will be detected and, currently, will stop +replay. Transactions also start with a magic marker and timestamped, +so in case of binlog damage in the middle of the file, it's technically +possible to skip broken transactions and keep replaying from the next +good one, and/or it's possible to replay transactions until a given +timestamp (point-in-time recovery), but none of that is implemented yet +as of 1.10-beta. + + +One unwanted side effect of binlogs is that activel updating +a small RT index that fully fits into a RAM chunk part will lead +to an ever-growing binlog that can never be unlinked until clean +shutdown. Binlogs are essentially append-only deltas against +the last known good saved state on disk, and unless RAM chunk +gets saved, they can not be unlinked. An ever-growing binlog +is not very good for disk use and crash recovery time. Starting +with 2.0.1-beta you can configure searchd +to perform a periodic RAM chunk flush to fix that problem +using a rt_flush_period +directive. With periodic flushes enabled, searchd +will keep a separate thread, checking whether RT indexes RAM +chunks need to be written back to disk. Once that happens, +the respective binlogs can be (and are) safely unlinked. + + +Note that rt_flush_period only controls the +frequency at which the checks happen. +There are no guarantees that the +particular RAM chunk will get saved. For instance, it does +not make sense to regularly re-save a huge RAM chunk that +only gets a few rows worh of updates. The search daemon +determine whether to actually perform the flush with a few +heuristics. + + + + + +Searching + + + + + +Matching modes + +So-called matching modes are a legacy feature that used to provide +(very) limited query syntax and ranking support. Currently, they are +deprecated in favor of full-text query +language and so-called rankers. +Starting with version 0.9.9-release, it is thus strongly recommended +to use SPH_MATCH_EXTENDED and proper query syntax rather than any other +legacy mode. All those other modes are actually internally converted +to extended syntax anyway. SphinxAPI still defaults to SPH_MATCH_ALL +but that is for compatibility reasons only. + + +There are the following matching modes available: + +SPH_MATCH_ALL, matches all query words (default mode); +SPH_MATCH_ANY, matches any of the query words; +SPH_MATCH_PHRASE, matches query as a phrase, requiring perfect match; +SPH_MATCH_BOOLEAN, matches query as a boolean expression (see ); +SPH_MATCH_EXTENDED, matches query as an expression in Sphinx internal query language + (see ); +SPH_MATCH_EXTENDED2, an alias for SPH_MATCH_EXTENDED; +SPH_MATCH_FULLSCAN, matches query, forcibly using the "full scan" mode as below. + NB, any query terms will be ignored, such that filters, filter-ranges and grouping + will still be applied, but no text-matching. + + + +SPH_MATCH_EXTENDED2 was used during 0.9.8 and 0.9.9 development cycle, +when the internal matching engine was being rewritten (for the sake of +additional functionality and better performance). By 0.9.9-release, +the older version was removed, and SPH_MATCH_EXTENDED and SPH_MATCH_EXTENDED2 +are now just aliases. + + +The SPH_MATCH_FULLSCAN mode will be automatically activated in place of the specified matching mode when the following conditions are met: + +The query string is empty (ie. its length is zero). +docinfo storage is set to extern. + +In full scan mode, all the indexed documents will be considered as matching. +Such queries will still apply filters, sorting, and group by, but will not perform any full-text searching. +This can be useful to unify full-text and non-full-text searching code, or to offload SQL server +(there are cases when Sphinx scans will perform better than analogous MySQL queries). +An example of using the full scan mode might be to find posts in a forum. +By selecting the forum's user ID via SetFilter() but not actually providing any search text, +Sphinx will match every document (i.e. every post) where SetFilter() would match - +in this case providing every post from that user. By default this will be ordered by relevancy, +followed by Sphinx document ID in ascending order (earliest first). + + + + +Boolean query syntax + +Boolean queries allow the following special operators to be used: + +explicit operator AND: hello & world +operator OR: hello | world +operator NOT: + +hello -world +hello !world + + +grouping: ( hello world ) + +Here's an example query which uses all these operators: +Boolean query example + +( cat -dog ) | ( cat -mouse) + + + + +There always is implicit AND operator, so "hello world" query actually +means "hello & world". + + +OR operator precedence is higher than AND, so "looking for cat | dog | mouse" +means "looking for ( cat | dog | mouse )" and not +"(looking for cat) | dog | mouse". + + +Queries like "-dog", which implicitly include all documents from the +collection, can not be evaluated. This is both for technical and performance +reasons. Technically, Sphinx does not always keep a list of all IDs. +Performance-wise, when the collection is huge (ie. 10-100M documents), +evaluating such queries could take very long. + + + + +Extended query syntax + +The following special operators and modifiers can be used when using the extended matching mode: + +operator OR: hello | world +operator NOT: + +hello -world +hello !world + + +field search operator: @title hello @body world +field position limit modifier (introduced in version 0.9.9-rc1): @body[50] hello +multiple-field search operator: @(title,body) hello world +all-field search operator: @* hello +phrase search operator: "hello world" +proximity search operator: "hello world"~10 +quorum matching operator: "the world is a wonderful place"/3 +strict order operator (aka operator "before"): aaa << bbb << ccc +exact form modifier (introduced in version 0.9.9-rc1): raining =cats and =dogs +field-start and field-end modifier (introduced in version 0.9.9-rc2): ^hello world$ +NEAR, generalized proximity operator (introduced in version 2.0.1-beta): hello NEAR/3 world NEAR/4 "my test" +SENTENCE operator (introduced in version 2.0.1-beta): all SENTENCE words SENTENCE "in one sentence" +PARAGRAPH operator (introduced in version 2.0.1-beta): "Bill Gates" PARAGRAPH "Steve Jobs" +zone limit operator: ZONE:(h3,h4) only in these titles + + +Here's an example query that uses some of these operators: +Extended matching mode: query example + +"hello world" @title "example program"~5 @body python -(php|perl) @* code + + +The full meaning of this search is: + + +Find the words 'hello' and 'world' adjacently in any field in a document; +Additionally, the same document must also contain the words 'example' and 'program' + in the title field, with up to, but not including, 10 words between the words in question; + (E.g. "example PHP program" would be matched however "example script to introduce outside data + into the correct context for your program" would not because two terms have 10 or more words between them) +Additionally, the same document must contain the word 'python' in the body field, but not contain either 'php' or 'perl'; +Additionally, the same document must contain the word 'code' in any field. + + + +There always is implicit AND operator, so "hello world" means that +both "hello" and "world" must be present in matching document. + + +OR operator precedence is higher than AND, so "looking for cat | dog | mouse" +means "looking for ( cat | dog | mouse )" and not +"(looking for cat) | dog | mouse". + + +Field limit operator limits subsequent searching to a given field. +Normally, query will fail with an error message if given field name does not exist +in the searched index. However, that can be suppressed by specifying "@@relaxed" +option at the very beginning of the query: + +@@relaxed @nosuchfield my query + +This can be helpful when searching through heterogeneous indexes with +different schemas. + + +Field position limit, introduced in version 0.9.9-rc1, additionaly restricts the searching +to first N position within given field (or fields). For example, "@body[50] hello" will +not match the documents where the keyword 'hello' occurs at position 51 and below +in the body. + + +Proximity distance is specified in words, adjusted for word count, and +applies to all words within quotes. For instance, "cat dog mouse"~5 query +means that there must be less than 8-word span which contains all 3 words, +ie. "CAT aaa bbb ccc DOG eee fff MOUSE" document will not +match this query, because this span is exactly 8 words long. + + +Quorum matching operator introduces a kind of fuzzy matching. +It will only match those documents that pass a given threshold of given words. +The example above ("the world is a wonderful place"/3) will match all documents +that have at least 3 of the 6 specified words. + + +Strict order operator (aka operator "before"), introduced in version 0.9.9-rc2, +will match the document only if its argument keywords occur in the document +exactly in the query order. For instance, "black << cat" query (without +quotes) will match the document "black and white cat" but not +the "that cat was black" document. Order operator has the lowest priority. +It can be applied both to just keywords and more complex expressions, +ie. this is a valid query: + +(bag of words) << "exact phrase" << red|green|blue + + + +Exact form keyword modifier, introduced in version 0.9.9-rc1, will match the document only if the keyword occurred +in exactly the specified form. The default behaviour is to match the document +if the stemmed keyword matches. For instance, "runs" query will match both +the document that contains "runs" and the document that +contains "running", because both forms stem to just "run" - while "=runs" +query will only match the first document. Exact form operator requires +index_exact_words option to be enabled. +This is a modifier that affects the keyword and thus can be used within +operators such as phrase, proximity, and quorum operators. + + +Field-start and field-end keyword modifiers, introduced in version 0.9.9-rc2, +will make the keyword match only if it occurred at the very start or the very end +of a fulltext field, respectively. For instance, the query "^hello world$" +(with quotes and thus combining phrase operator and start/end modifiers) +will only match documents that contain at least one field that has exactly +these two keywords. + + +Starting with 0.9.9-rc1, arbitrarily nested brackets and negations are allowed. +However, the query must be possible to compute without involving an implicit +list of all documents: + +// correct query +aaa -(bbb -(ccc ddd)) + +// queries that are non-computable +-aaa +aaa | -bbb + + + +NEAR operator, added in 2.0.1-beta, is a generalized version +of a proximity operator. The syntax is NEAR/N, it is +case-sensitive, and no spaces are allowed beetwen the NEAR keyword, +the slash sign, and the distance value. + + +The original proximity operator only worked on sets of keywords. +NEAR is more generic and can accept arbitrary subexpressions as +its two arguments, matching the document when both subexpressions +are found within N words of each other, no matter in which order. +NEAR is left associative and has the same (lowest) precedence +as BEFORE. + + +You should also note how a (one NEAR/7 two NEAR/7 three) +query using NEAR is not really equivalent to a +("one two three"~7) one using keyword proximity operator. +The difference here is that the proximity operator allows for up to +6 non-matching words between all the 3 matching words, but the version +with NEAR is less restrictive: it would allow for up to 6 words between +'one' and 'two' and then for up to 6 more between that two-word +matching and a 'three' keyword. + + +SENTENCE and PARAGRAPH operators, added in 2.0.1-beta, +matches the document when both its arguments are within the same +sentence or the same paragraph of text, respectively. The arguments +can be either keywords, or phrases, or the instances of the same +operator. Here are a few examples: + +one SENTENCE two +one SENTENCE "two three" +one SENTENCE "two three" SENTENCE four + +The order of the arguments within the sentence or paragraph +does not matter. These operators only work on indexes built +with index_sp (sentence +and paragraph indexing feature) enabled, and revert to a mere +AND otherwise. Refer to the index_sp directive +documentation for the notes on what's considered a sentence +and a paragraph. + + +ZONE limit operator, added in 2.0.1-beta, is quite similar +to field limit operator, but restricts matching to a given in-field +zone or a list of zones. Note that the subsequent subexpressions +are not required to match in a single contiguous +span of a given zone, and may match in multiple spans. +For instance, (ZONE:th hello world) query +will match this example document: + +<th>Table 1. Local awareness of Hello Kitty brand.</th> +.. some table data goes here .. +<th>Table 2. World-wide brand awareness.</th> + +ZONE operator affects the query until the next +field or ZONE limit operator, or the closing parenthesis. +It only works on the indexes built with zones support +(see ) and will be ignored +otherwise. + + + + +Search results ranking +Ranking overview + +Ranking (aka weighting) of the search results can be defined +as a process of computing a so-called relevance (aka weight) +for every given matched document with regards to a given query +that matched it. So relevance is in the end just a number attached +to every document that estimates how relevant the document is to +the query. Search results can then be sorted based on this number +and/or some additional parameters, so that the most sought after +results would come up higher on the results page. + + +There is no single standard one-size-fits-all way to rank +any document in any scenario. Moreover, there can not ever be +such a way, because relevance is subjective. +As in, what seems relevant to you might not seem relevant to me. +Hence, in general case it's not just hard to compute, it's +theoretically impossible. + + +So ranking in Sphinx is configurable. It has a notion of +a so-called ranker. A ranker can formally be defined +as a function that takes document and query as its input and +produces a relevance value as output. In layman's terms, +a ranker controls exactly how (using which specific algorithm) +will Sphinx assign weights to the document. + + +Previously, this ranking function was rigidly bound to the matching mode. +So in the legacy matching modes (that is, SPH_MATCH_ALL, SPH_MATCH_ANY, +SPH_MATCH_PHRASE, and SPH_MATCH_BOOLEAN) you can not choose the ranker. +You can only do that in the SPH_MATCH_EXTENDED mode. (Which is the only +mode in SphinxQL and the suggested mode in SphinxAPI anyway.) To choose +a non-default ranker you can either use +SetRankingMode() +with SphinxAPI, or OPTION ranker +clause in SELECT statement when using SphinxQL. + + +As a sidenote, legacy matching modes are internally implemented via +the unified syntax anyway. When you use one of those modes, Sphinx just +internally adjusts the query and sets the associated ranker, then +executes the query using the very same unified code path. + +Available rankers + +Sphinx ships with a number of built-in rankers suited for different +purposes. A number of them uses two factors, phrase proximity (aka LCS) +and BM25. Phrase proximity works on the keyword positions, while BM25 +works on the keyword frequencies. Basically, the better the degree of +the phrase match between the document body and the query, the higher +is the phrase proximity (it maxes out when the document contains +the entire query as a verbatim quote). And BM25 is higher when +the document containers more rare words. We'll save the detailed +discussion for later. + + +Currently implemented rankers are: + + +SPH_RANK_PROXIMITY_BM25, the default ranking mode that uses and combines +both phrase proximity and BM25 ranking. + + +SPH_RANK_BM25, statistical ranking mode which uses BM25 ranking only (similar to +most other full-text engines). This mode is faster but may result in worse quality +on queries which contain more than 1 keyword. + + +SPH_RANK_NONE, no ranking mode. This mode is obviously the fastest. +A weight of 1 is assigned to all matches. This is sometimes called boolean +searching that just matches the documents but does not rank them. + +SPH_RANK_WORDCOUNT, ranking by the keyword occurrences count. +This ranker computes the per-field keyword occurrence counts, then multiplies +them by field weights, and sums the resulting values. + + +SPH_RANK_PROXIMITY, added in version 0.9.9-rc1, returns raw phrase proximity +value as a result. This mode is internally used to emulate SPH_MATCH_ALL queries. + + +SPH_RANK_MATCHANY, added in version 0.9.9-rc1, returns rank as it was computed +in SPH_MATCH_ANY mode ealier, and is internally used to emulate SPH_MATCH_ANY queries. + + +SPH_RANK_FIELDMASK, added in version 0.9.9-rc2, returns a 32-bit mask with +N-th bit corresponding to N-th fulltext field, numbering from 0. The bit will +only be set when the respective field has any keyword occurences satisfiying +the query. + + +SPH_RANK_SPH04, added in version 1.10-beta, is generally based on the default +SPH_RANK_PROXIMITY_BM25 ranker, but additionally boosts the matches when +they occur in the very beginning or the very end of a text field. Thus, +if a field equals the exact query, SPH04 should rank it higher than a field +that contains the exact query but is not equal to it. (For instance, when +the query is "Hyde Park", a document entitled "Hyde Park" should be ranked +higher than a one entitled "Hyde Park, London" or "The Hyde Park Cafe".) + + +SPH_RANK_EXPR, added in version 2.0.2-beta, lets you specify the ranking +formula in run time. It exposes a number of internal text factors and lets +you defined how the final weight should be computed from those factors. +You can find more details about its syntax and a reference available +factors in a subsection below. + + + + +You should specify the SPH_RANK_ prefix and use capital letters only +when using the SetRankingMode() +call from the SphinxAPI. The API ports expose these as global constants. +Using SphinxQL syntax, the prefix should be omitted and the ranker name +is case insensitive. Example: + +// SphinxAPI +$client->SetRankingMode ( SPH_RANK_SPH04 ); + +// SphinxQL +mysql_query ( "SELECT ... OPTION ranker=sph04" ); + + +Legacy matching modes rankers + +Legacy matching modes automatically select a ranker as follows: + +SPH_MATCH_ALL uses SPH_RANK_PROXIMITY ranker; +SPH_MATCH_ANY uses SPH_RANK_MATCHANY ranker; +SPH_MATCH_PHRASE uses SPH_RANK_PROXIMITY ranker; +SPH_MATCH_BOOLEAN uses SPH_RANK_NONE ranker. + + +Expression based ranker (SPH_RANK_EXPR) + +Expression ranker, added in version 2.0.2-beta, lets you change the ranking +formula on the fly, on a per-query basis. For a quick kickoff, this is how you +emulate PROXIMITY_BM25 ranker using the expression based one: + +SELECT *, WEIGHT() FROM myindex WHERE MATCH('hello world') +OPTION ranker=expr('sum(lcs*user_weight)*1000+bm25') + +The output of this query must not change if you omit the OPTION +clause, because the default ranker (PROXIMITY_BM25) behaves exactly like +specified in the ranker formula above. But the expression ranker is somewhat +more flexible than just that and provides access to many more factors. + + +The ranking formula is an arbitrary arithmetic expression that can use +constants, document attributes, built-in functions and operators (described +in ), and also a few ranking-specific things +that are only accessible in a ranking formula. Namely, those are field +aggregation functions, field-level, and document-level ranking factors. + + +A document-level factor is a numeric value computed by the ranking +engine for every matched document with regards to the current query. +(So it differs from a plain document attribute in that the attribute +do not depend on the full text query, while factors might.) Those +factors can be used anywhere in the ranking expression. +Currently implemented document-level factors are: + + +bm25 (integer), a document-level BM25 estimate (computed without +keyword occurrence filtering). + + +max_lcs (integer), a query-level maximum possible value that +the sum(lcs*user_weight) expression can ever take. This can be +useful for weight boost scaling. For instance, MATCHANY ranker +formula uses this to guarantee that a full phrase match in any +field rankes higher than any combination of partial matches +in all fields. + + +field_mask (integer), a document-level 32-bit mask of matched +fields. + + +query_word_count (integer), the number of unique keywords +in a query, adjusted for a number of excluded keywords. For instance, +both (one one one one) and (one !two) queries +should assign a value of 1 to this factor, because there is just one unique +non-excluded keyword. + + +doc_word_count (integer), the number of unique keywords +matched in the entire document. + + + + +A field-level factor is a numeric value computed by the ranking +engine for every matched in-document text field with regards to the +current query. As more than one field can be matched by a query, +but the final weight needs to be a single integer value, these +values need to be folded into a single one. To achieve that, +field-level factors can only be used within a field aggregation +function, they can not be used anywhere in the expression. +For example, you can not use (lcs+bm25) as your +ranking expression, as lcs takes multiple values (one +in every matched field). You shoudl use (sum(lcs)+bm25) +instead, that expression sums lcs over all matching fields, +and then adds bm25 to that per-field sum. +Currently implemented field-level factors are: + + +lcs (integer), the length of a maximum verbatim match between +the document and the query, coutned in words. LCS stands for Longest Common +Subsequence (or Subset). Takes a minimum value of 1 when only stray keywords +were matched in a field, and a maximum value of query keywords count +when the entire query was matched in a field verbatim (in the exact +query keywords order). For example, if the query is 'hello world' +and the field contains these two words quoted from the query (that is, +adjacent to each other, and exaclty in the query order), lcs +will be 2. For example, if the query is 'hello world program' and +the field contains 'hello world', lcs will be 2. +Note that any subset of the query keyword works, not just a subset +of adjacent keywords. For example, if the query is 'hello world program' +and the field contains 'hello (test program)', lcs will be 2 +just as well, because both 'hello' and 'program' matched in the same +respective positions as they were in the query. Finally, if the query +is 'hello world program' and the field contains 'hello world program', +lcs will be 3. (Hopefully that is unsurpising at this point.) + + +user_weight (integer), the user specified per-field weight +(refer to SetFieldWeights() +in SphinxAPI and OPTION field_weights +in SphinxQL respectively). The weights default to 1 if not specified +explicitly. + + +hit_count (integer), the number of keyword occurrences +that matched in the field. Note that a single keyword may occur multiple +times. For example, if 'hello' occurs 3 times in a field and 'world' +occurs 5 times, hit_count will be 8. + + +word_count (integer), the number of unique keywords matched +in the field. For example, if 'hello' and 'world' occur anywhere in a field, +word_count will be 2, irregardless of how many times do both +keywords occur. + + +tf_idf (float), the sum of TF*IDF over all the keywords matched in the +field. IDF is the Inverse Document Frequency, a floating point value +between 0 and 1 that describes how frequent is the keywords (basically, +0 for a keyword that occurs in every document indexed, and 1 for a unique +keyword that occurs in just a single document). TF is the Term Frequency, +the number of matched keyword occurrences in the field. As a side note, +tf_idf is actually computed by summing IDF over all matched +occurences. That's by construction equivalent to summing TF*IDF over +all matched keywords. + + +min_hit_pos (integer), the position of the first matched keyword occurrence, +counted in words. Indexing begins from position 1. + + +min_best_span_pos (integer), the position of the first maximum LCS +occurrences span. For example, assume that our query was 'hello world +program' and 'hello world' subphrase was matched twice in the field, +in positions 13 and 21. Assume that 'hello' and 'world' additionally +occurred elsewhere in the field, but never next to each other and thus +never as a subphrase match. In that case, min_best_span_pos +will be 13. Note how for the single keyword queries +min_best_span_pos will always equal min_hit_pos. + + +exact_hit (boolean), whether a query was an exact match +of the entire current field. Used in the SPH04 ranker. + + + + +A field aggregation function is a single argument function +that takes an expression with field-level factors, iterates it over +all the matched fields, and computes the final results. +Currently implemented field aggregation functions are: + + +sum, sums the argument expression over all matched +fields. For instance, sum(1) should return a number +of matched fields. + + + +Expressions for the built-in rankers + +Most of the other rankers can actually be emulated with the expression +based ranker. You just need to pass a proper expression. Such emulation is, +of course, going to be slower than using the built-in, compiled ranker but +still might be of interest if you want to fine-tune your ranking formula +starting with one of the existing ones. Also, the formulas define the +nitty gritty ranker details in a nicely readable fashion. + + + +SPH_RANK_PROXIMITY_BM25 = sum(lcs*user_weight)*1000+bm25 + + +SPH_RANK_BM25 = bm25 + + +SPH_RANK_NONE = 1 + + +SPH_RANK_WORDCOUNT = sum(hit_count*user_weight) + + +SPH_RANK_PROXIMITY = sum(lcs*user_weight) + + +SPH_RANK_MATCHANY = sum((word_count+(lcs-1)*max_lcs)*user_weight) + + +SPH_RANK_FIELDMASK = field_mask + + +SPH_RANK_SPH04 = sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight)*1000+bm25 + + + + + + +Expressions, functions, and operators + +Sphinx lets you use arbitrary arithmetic expressions both via SphinxQL +and SphinxAPI, involving attribute values, internal attributes (document ID +and relevance weight), arithmetic operations, a number of built-in functions, +and user-defined functions. +This section documents the supported operators and functions. +Here's the complete reference list for quick access. + +Arithmetic operators: +, -, *, /, %, DIV, MOD +Comparison operators: <, > <=, >=, =, <> +Boolean operators: AND, OR, NOT +Bitwise operators: &, | +ABS() +BIGINT() +CEIL() +COS() +CRC32() +DAY() +EXP() +FLOOR() +GEODIST() +IDIV() +IF() +IN() +INTERVAL() +LN() +LOG10() +LOG2() +MAX() +MIN() +MONTH() +NOW() +POW() +SIN() +SINT() +SQRT() +YEAR() +YEARMONTH() +YEARMONTHDAY() + + + + + +Operators + + + +Arithmetic operators: +, -, *, /, %, DIV, MOD + +The standard arithmetic operators. Arithmetic calculations involving those +can be performed in three different modes: (a) using single-precision, +32-bit IEEE 754 floating point values (the default), (b) using signed 32-bit integers, +(c) using 64-bit signed integers. The expression parser will automatically switch +to integer mode if there are no operations the result in a floating point value. +Otherwise, it will use the default floating point mode. For instance, a+b +will be computed using 32-bit integers if both arguments are 32-bit integers; +or using 64-bit integers if both arguments are integers but one of them is +64-bit; or in floats otherwise. However, a/b or sqrt(a) +will always be computed in floats, because these operations return a result +of non-integer type. To avoid the first, you can either use IDIV(a,b) +or a DIV b form. Also, a*b +will not be automatically promoted to 64-bit when the arguments are 32-bit. +To enforce 64-bit results, you can use BIGINT(). (But note that if there are +non-integer operations, BIGINT() will simply be ignored.) + + + + +Comparison operators: <, > <=, >=, =, <> + +Comparison operators (eg. = or <=) return 1.0 when the condition is true and 0.0 otherwise. +For instance, (a=b)+3 will evaluate to 4 when attribute 'a' is equal to attribute 'b', and to 3 when 'a' is not. +Unlike MySQL, the equality comparisons (ie. = and <> operators) introduce a small equality threshold (1e-6 by default). +If the difference between compared values is within the threshold, they will be considered equal. + + + + +Boolean operators: AND, OR, NOT + +Boolean operators (AND, OR, NOT) were introduced in 0.9.9-rc2 and behave as usual. +They are left-associative and have the least priority compared to other operators. +NOT has more priority than AND and OR but nevertheless less than any other operator. +AND and OR have the same priority so brackets use is recommended to avoid confusion +in complex expressions. + + + + +Bitwise operators: &, | + +These operators perform bitwise AND and OR respectively. The operands +must be of an integer types. Introduced in version 1.10-beta. + + + + + + + + +Numeric functions + + + +ABS() +Returns the absolute value of the argument. + + + +CEIL() +Returns the smallest integer value greater or equal to the argument. + + + +COS() +Returns the cosine of the argument. + + + +EXP() +Returns the exponent of the argument (e=2.718... to the power of the argument). + + + +FLOOR() +Returns the largest integer value lesser or equal to the argument. + + + +IDIV() + +Returns the result of an integer division of the first +argument by the second argument. Both arguments must be +of an integer type. + + + + +LN() +Returns the natural logarithm of the argument (with the base of e=2.718...). + + + +LOG10() +Returns the common logarithm of the argument (with the base of 10). + + + +LOG2() +Returns the binary logarithm of the argument (with the base of 2). + + + +MAX() +Returns the bigger of two arguments. + + + +MIN() +Returns the smaller of two arguments. + + + +POW() +Returns the first argument raised to the power of the second argument. + + + +SIN() +Returns the sine of the argument. + + + +SQRT() +Returns the square root of the argument. + + + + + + + +Date and time functions + + + +DAY() +Returns the integer day of month (in 1..31 range) from a timestamp argument, according to the current timezone. Introduced in version 2.0.1-beta. + + + +MONTH() +Returns the integer month (in 1..12 range) from a timestamp argument, according to the current timezone. Introduced in version 2.0.1-beta. + + + +NOW() +Returns the current timestamp as an INTEGER. Introduced in version 0.9.9-rc1. + + + +YEAR() +Returns the integer year (in 1969..2038 range) from a timestamp argument, according to the current timezone. Introduced in version 2.0.1-beta. + + + +YEARMONTH() +Returns the integer year and month code (in 196912..203801 range) from a timestamp argument, according to the current timezone. Introduced in version 2.0.1-beta. + + + +YEARMONTHDAY() +Returns the integer year, month, and date code (in 19691231..20380119 range) from a timestamp argument, according to the current timezone. Introduced in version 2.0.1-beta. + + + + + + + +Type conversion functions + + + +BIGINT() + +Forcibly promotes the integer argument to 64-bit type, +and does nothing on floating point argument. It's intended to help enforce evaluation +of certain expressions (such as a*b) in 64-bit mode even though all the arguments +are 32-bit. +Introduced in version 0.9.9-rc1. + + + + +SINT() + +Forcibly reinterprets its +32-bit unsigned integer argument as signed, and also expands it to 64-bit type +(because 32-bit type is unsigned). It's easily illustrated by the following +example: 1-2 normally evaluates to 4294967295, but SINT(1-2) evaluates to -1. +Introduced in version 1.10-beta. + + + + + + + + +Comparison functions + + + +IF() + +IF() behavior is slightly different that that of its MySQL counterpart. +It takes 3 arguments, check whether the 1st argument is equal to 0.0, returns the 2nd argument if it is not zero, or the 3rd one when it is. +Note that unlike comparison operators, IF() does not use a threshold! +Therefore, it's safe to use comparison results as its 1st argument, but arithmetic operators might produce unexpected results. +For instance, the following two calls will produce different results even though they are logically equivalent: + +IF ( sqrt(3)*sqrt(3)-3<>0, a, b ) +IF ( sqrt(3)*sqrt(3)-3, a, b ) + +In the first case, the comparison operator <> will return 0.0 (false) +because of a threshold, and IF() will always return 'b' as a result. +In the second one, the same sqrt(3)*sqrt(3)-3 expression will be compared +with zero without threshold by the IF() function itself. +But its value will be slightly different from zero because of limited floating point +calculations precision. Because of that, the comparison with 0.0 done by IF() +will not pass, and the second variant will return 'a' as a result. + + + + +IN() + +IN(expr,val1,val2,...), introduced in version 0.9.9-rc1, takes 2 or more arguments, and returns 1 if 1st argument +(expr) is equal to any of the other arguments (val1..valN), or 0 otherwise. +Currently, all the checked values (but not the expression itself!) are required +to be constant. (Its technically possible to implement arbitrary expressions too, +and that might be implemented in the future.) Constants are pre-sorted and then +binary search is used, so IN() even against a big arbitrary list of constants +will be very quick. Starting with 0.9.9-rc2, first argument can also be +a MVA attribute. In that case, IN() will return 1 if any of the MVA values +is equal to any of the other arguments. Starting with 2.0.1-beta, IN() also +supports IN(expr,@uservar) syntax to check whether the value +belongs to the list in the given global user variable. + + + + +INTERVAL() + +INTERVAL(expr,point1,point2,point3,...), introduced in version 0.9.9-rc1, takes 2 or more arguments, and returns +the index of the argument that is less than the first argument: it returns +0 if expr<point1, 1 if point1<=expr<point2, and so on. +It is required that point1<point2<...<pointN for this function +to work correctly. + + + + + + + + +Miscellaneous functions + + + +CRC32() + +Returns the CRC32 value of a string argument. Introduced in version 2.0.1-beta. + + + + +GEODIST() + +GEODIST(lat1,long1,lat2,long2) function, introduced in version 0.9.9-rc2, +computes geosphere distance between two given points specified by their +coordinates. Note that both latitudes and longitudes must be in radians +and the result will be in meters. You can use arbitrary expression as any +of the four coordinates. An optimized path will be selected when one pair +of the arguments refers directly to a pair attributes and the other one +is constant. + + + + + + + + + +Sorting modes + +There are the following result sorting modes available: + +SPH_SORT_RELEVANCE mode, that sorts by relevance in descending order (best matches first); +SPH_SORT_ATTR_DESC mode, that sorts by an attribute in descending order (bigger attribute values first); +SPH_SORT_ATTR_ASC mode, that sorts by an attribute in ascending order (smaller attribute values first); +SPH_SORT_TIME_SEGMENTS mode, that sorts by time segments (last hour/day/week/month) in descending order, and then by relevance in descending order; +SPH_SORT_EXTENDED mode, that sorts by SQL-like combination of columns in ASC/DESC order; +SPH_SORT_EXPR mode, that sorts by an arithmetic expression. + + + +SPH_SORT_RELEVANCE ignores any additional parameters and always sorts matches +by relevance rank. All other modes require an additional sorting clause, with the +syntax depending on specific mode. SPH_SORT_ATTR_ASC, SPH_SORT_ATTR_DESC and +SPH_SORT_TIME_SEGMENTS modes require simply an attribute name. + +SPH_SORT_RELEVANCE is equivalent to sorting by "@weight DESC, @id ASC" in extended sorting mode, +SPH_SORT_ATTR_ASC is equivalent to "attribute ASC, @weight DESC, @id ASC", +and SPH_SORT_ATTR_DESC to "attribute DESC, @weight DESC, @id ASC" respectively. + + +SPH_SORT_TIME_SEGMENTS mode + +In SPH_SORT_TIME_SEGMENTS mode, attribute values are split into so-called +time segments, and then sorted by time segment first, and by relevance second. + + +The segments are calculated according to the current timestamp +at the time when the search is performed, so the results would change over time. +The segments are as follows: + +last hour, +last day, +last week, +last month, +last 3 months, +everything else. + +These segments are hardcoded, but it is trivial to change them if necessary. + + +This mode was added to support searching through blogs, news headlines, etc. +When using time segments, recent records would be ranked higher because of segment, +but withing the same segment, more relevant records would be ranked higher - +unlike sorting by just the timestamp attribute, which would not take relevance +into account at all. + + +SPH_SORT_EXTENDED mode + +In SPH_SORT_EXTENDED mode, you can specify an SQL-like sort expression +with up to 5 attributes (including internal attributes), eg: + +@relevance DESC, price ASC, @id DESC + + + +Both internal attributes (that are computed by the engine on the fly) +and user attributes that were configured for this index are allowed. +Internal attribute names must start with magic @-symbol; user attribute +names can be used as is. In the example above, +and are internal attributes and is user-specified. + + +Known internal attributes are: + +@id (match ID) +@weight (match weight) +@rank (match weight) +@relevance (match weight) +@random (return results in random order) + + and are just additional +aliases to . + + +SPH_SORT_EXPR mode + +Expression sorting mode lets you sort the matches by an arbitrary arithmetic +expression, involving attribute values, internal attributes (@id and @weight), +arithmetic operations, and a number of built-in functions. Here's an example: + +$cl->SetSortMode ( SPH_SORT_EXPR, + "@weight + ( user_karma + ln(pageviews) )*0.1" ); + +The operators and functions supported in the expressions are discussed +in a separate section, . + + + + +Grouping (clustering) search results + +Sometimes it could be useful to group (or in other terms, cluster) +search results and/or count per-group match counts - for instance, +to draw a nice graph of how much maching blog posts were there per +each month; or to group Web search results by site; or to group +matching forum posts by author; etc. + + +In theory, this could be performed by doing only the full-text search +in Sphinx and then using found IDs to group on SQL server side. However, +in practice doing this with a big result set (10K-10M matches) would +typically kill performance. + + +To avoid that, Sphinx offers so-called grouping mode. It is enabled +with SetGroupBy() API call. When grouping, all matches are assigned to +different groups based on group-by value. This value is computed from +specified attribute using one of the following built-in functions: + +SPH_GROUPBY_DAY, extracts year, month and day in YYYYMMDD format from timestamp; +SPH_GROUPBY_WEEK, extracts year and first day of the week number (counting from year start) in YYYYNNN format from timestamp; +SPH_GROUPBY_MONTH, extracts month in YYYYMM format from timestamp; +SPH_GROUPBY_YEAR, extracts year in YYYY format from timestamp; +SPH_GROUPBY_ATTR, uses attribute value itself for grouping. + + + +The final search result set then contains one best match per group. +Grouping function value and per-group match count are returned along +as "virtual" attributes named +@group and +@count respectively. + + +The result set is sorted by group-by sorting clause, with the syntax similar +to sorting clause +syntax. In addition to and , +group-by sorting clause may also include: + +@group (groupby function value), +@count (amount of matches in group). + + + +The default mode is to sort by groupby value in descending order, +ie. by . + + +On completion, result parameter would +contain total amount of matching groups over he whole index. + + +WARNING: grouping is done in fixed memory +and thus its results are only approximate; so there might be more groups reported +in than actually present. might also +be underestimated. To reduce inaccuracy, one should raise . +If allows to store all found groups, results will be 100% correct. + + +For example, if sorting by relevance and grouping by "published" +attribute with SPH_GROUPBY_DAY function, then the result set will +contain + +one most relevant match per each day when there were any +matches published, +with day number and per-day match count attached, +sorted by day number in descending order (ie. recent days first). + + + +Starting with version 0.9.9-rc2, aggregate functions (AVG(), MIN(), +MAX(), SUM()) are supported through SetSelect() API call +when using GROUP BY. + + + + +Distributed searching + +To scale well, Sphinx has distributed searching capabilities. +Distributed searching is useful to improve query latency (ie. search +time) and throughput (ie. max queries/sec) in multi-server, multi-CPU +or multi-core environments. This is essential for applications which +need to search through huge amounts data (ie. billions of records +and terabytes of text). + + +The key idea is to horizontally partition (HP) searched data +accross search nodes and then process it in parallel. + + +Partitioning is done manually. You should + +setup several instances +of Sphinx programs (indexer and searchd) +on different servers; +make the instances index (and search) different parts of data; +configure a special distributed index on some of the searchd +instances; +and query this index. + +This index only contains references to other +local and remote indexes - so it could not be directly reindexed, +and you should reindex those indexes which it references instead. + + +When searchd receives a query against distributed index, +it does the following: + +connects to configured remote agents; +issues the query; +sequentially searches configured local indexes (while the remote agents are searching); +retrieves remote agents' search results; +merges all the results together, removing the duplicates; +sends the merged resuls to client. + + + +From the application's point of view, there are no differences +between searching through a regular index, or a distributed index at all. +That is, distributed indexes are fully transparent to the application, +and actually there's no way to tell whether the index you queried +was distributed or local. (Even though as of 0.9.9 Sphinx does not +allow to combine searching through distributed indexes with anything else, +this constraint will be lifted in the future.) + + +Any searchd instance could serve both as a master +(which aggregates the results) and a slave (which only does local searching) +at the same time. This has a number of uses: + +every machine in a cluster could serve as a master which +searches the whole cluster, and search requests could be balanced between +masters to achieve a kind of HA (high availability) in case any of the nodes fails; + + +if running within a single multi-CPU or multi-core machine, there +would be only 1 searchd instance quering itself as an agent and thus +utilizing all CPUs/core. + + + + +It is scheduled to implement better HA support which would allow +to specify which agents mirror each other, do health checks, keep track +of alive agents, load-balance requests, etc. + + + + +<filename>searchd</filename> query log formats + +In version 2.0.1-beta and above two query log formats are supported. +Previous versions only supported a custom plain text format. That format +is still the default one. However, while it might be more convenient for +manual monitoring and review, but hard to replay for benchmarks, it only +logs search queries but not the other types +of requests, does not always contain the complete search query +data, etc. The default text format is also harder (and sometimes +impossible) to replay for benchmarking purposes. The new sphinxql +format alleviates that. It aims to be complete and automatable, +even though at the cost of brevity and readability. + + +Plain log format + +By default, searchd logs all succesfully executed search queries +into a query log file. Here's an example: + +[Fri Jun 29 21:17:58 2007] 0.004 sec [all/0/rel 35254 (0,20)] [lj] test +[Fri Jun 29 21:20:34 2007] 0.024 sec [all/0/rel 19886 (0,20) @channel_id] [lj] test + +This log format is as follows: + +[query-date] query-time [match-mode/filters-count/sort-mode + total-matches (offset,limit) @groupby-attr] [index-name] query + +Match mode can take one of the following values: + +"all" for SPH_MATCH_ALL mode; +"any" for SPH_MATCH_ANY mode; +"phr" for SPH_MATCH_PHRASE mode; +"bool" for SPH_MATCH_BOOLEAN mode; +"ext" for SPH_MATCH_EXTENDED mode; +"scan" if the full scan mode was used, either by being specified with SPH_MATCH_FULLSCAN, or if the query was empty (as documented under Matching Modes) + +Sort mode can take one of the following values: + +"rel" for SPH_SORT_RELEVANCE mode; +"attr-" for SPH_SORT_ATTR_DESC mode; +"attr+" for SPH_SORT_ATTR_ASC mode; +"tsegs" for SPH_SORT_TIME_SEGMENTS mode; +"ext" for SPH_SORT_EXTENDED mode. + + +Additionally, if searchd was started with , there will be a block of data after where the index(es) searched are listed. +A query log entry might take the form of: + +[Fri Jun 29 21:17:58 2007] 0.004 sec [all/0/rel 35254 (0,20)] [lj] + [ios=6 kb=111.1 ms=0.5] test + + +This additional block is information regarding I/O operations in performing the search: +the number of file I/O operations carried out, the amount of data in kilobytes read from +the index files and time spent on I/O operations (although there is a background processing +component, the bulk of this time is the I/O operation time). + + + +SphinxQL log format + +This is a new log format introduced in 2.0.1-beta, with the goals +begin logging everything and then some, and in a format easy to automate +(for insance, automatically replay). New format can either be enabled +via the query_log_format +directive in the configuration file, or switched back and forth +on the fly with the +SET GLOBAL query_log_format=... +statement via SphinxQL. In the new format, the example from the previous +section would look as follows. (Wrapped below for readability, but with +just one query per line in the actual log.) + +/* Fri Jun 29 21:17:58.609 2007 2011 conn 2 wall 0.004 found 35254 */ +SELECT * FROM lj WHERE MATCH('test') OPTION ranker=proximity; + +/* Fri Jun 29 21:20:34 2007.555 conn 3 wall 0.024 found 19886 */ +SELECT * FROM lj WHERE MATCH('test') GROUP BY channel_id +OPTION ranker=proximity; + +Note that all requests would be logged in this format, +including those sent via SphinxAPI and SphinxSE, not just those +sent via SphinxQL. Also note, that this kind of logging works only with plain log +files and will not work if you use 'syslog' for logging. + + +The features of SphinxQL log format compared to the default text +one are as follows. + +All request types should be logged. (This is still work in progress.) +Full statement data will be logged where possible. +Errors and warnings are logged. +The log should be automatically replayable via SphinxQL. +Additional performance counters (currently, per-agent distributed query times) are logged. + + + + +Every request (including both SphinxAPI and SphinxQL) request +must result in exactly one log line. All request types, including +INSERT, CALL SNIPPETS, etc will eventually get logged, though as of +time of this writing, that is a work in progress). Every log line +must be a valid SphinxQL statement that reconstructs the full request, +except if the logged request is too big and needs shortening +for performance reasons. Additional messages, counters, etc can be +logged in the comments section after the request. + + + + + +MySQL protocol support and SphinxQL + +Starting with version 0.9.9-rc2, Sphinx searchd daemon supports MySQL binary +network protocol and can be accessed with regular MySQL API. For instance, +'mysql' CLI client program works well. Here's an example of querying +Sphinx using MySQL client: + +$ mysql -P 9306 +Welcome to the MySQL monitor. Commands end with ; or \g. +Your MySQL connection id is 1 +Server version: 0.9.9-dev (r1734) + +Type 'help;' or '\h' for help. Type '\c' to clear the buffer. + +mysql> SELECT * FROM test1 WHERE MATCH('test') + -> ORDER BY group_id ASC OPTION ranker=bm25; ++------+--------+----------+------------+ +| id | weight | group_id | date_added | ++------+--------+----------+------------+ +| 4 | 1442 | 2 | 1231721236 | +| 2 | 2421 | 123 | 1231721236 | +| 1 | 2421 | 456 | 1231721236 | ++------+--------+----------+------------+ +3 rows in set (0.00 sec) + + + +Note that mysqld was not even running on the test machine. Everything was +handled by searchd itself. + + +The new access method is supported in addition +to native APIs which all still work perfectly well. In fact, both +access methods can be used at the same time. Also, native API is still +the default access method. MySQL protocol support needs to be additionally +configured. This is a matter of 1-line config change, adding a new +listener with mysql41 specified +as a protocol: + +listen = localhost:9306:mysql41 + + + +Just supporting the protocol and not the SQL syntax would be useless +so Sphinx now also supports a subset of SQL that we dubbed SphinxQL. +It supports the standard querying all the index types with SELECT, +modifying RT indexes with INSERT, REPLACE, and DELETE, and much more. +Full SphinxQL reference is available in . + + + + +Multi-queries + +Multi-queries, or query batches, let you send multiple queries to Sphinx +in one go (more formally, one network request). + + +Two API methods that implement multi-query mechanism are +AddQuery() and +RunQueries(). +You can also run multiple queries with SphinxQL, see +. +(In fact, regular Query() +call is internally implemented as a single AddQuery() call immediately +followed by RunQueries() call.) AddQuery() captures the current state +of all the query settings set by previous API calls, and memorizes +the query. RunQueries() actually sends all the memorized queries, +and returns multiple result sets. There are no restrictions on +the queries at all, except just a sanity check on a number of queries +in a single batch (see ). + + +Why use multi-queries? Generally, it all boils down to performance. +First, by sending requests to searchd in a batch +instead of one by one, you always save a bit by doing less network +roundtrips. Second, and somewhat more important, sending queries +in a batch enables searchd to perform certain +internal optimizations. As new types of optimizations are being +added over time, it generally makes sense to pack all the queries +into batches where possible, so that simply upgrading Sphinx +to a new version would automatically enable new optimizations. +In the case when there aren't any possible batch optimizations +to apply, queries will be processed one by one internally. + + +Why (or rather when) not use multi-queries? Multi-queries requires +all the queries in a batch to be independent, and sometimes they aren't. +That is, sometimes query B is based on query A results, and so can only be +set up after executing query A. For instance, you might want to display +results from a secondary index if and only if there were no results +found in a primary index. Or maybe just specify offset into 2nd result set +based on the amount of matches in the 1st result set. In that case, +you will have to use separate queries (or separate batches). + + +As of 0.9.10, there are two major optimizations to be aware of: +common query optimization (available since 0.9.8); and common +subtree optimization (available since 0.9.10). + + +Common query optimization means that searchd +will identify all those queries in a batch where only the sorting +and group-by settings differ, and only perform searching once. +For instance, if a batch consists of 3 queries, all of them are for +"ipod nano", but 1st query requests top-10 results sorted by price, +2nd query groups by vendor ID and requests top-5 vendors sorted by +rating, and 3rd query requests max price, full-text search for +"ipod nano" will only be performed once, and its results will be +reused to build 3 different result sets. + + +So-called faceted searching is a particularly important case +that benefits from this optimization. Indeed, faceted searching +can be implemented by running a number of queries, one to retrieve +search results themselves, and a few other ones with same full-text +query but different group-by settings to retrieve all the required +groups of results (top-3 authors, top-5 vendors, etc). And as long +as full-text query and filtering settings stay the same, common +query optimization will trigger, and greatly improve performance. + + +Common subtree optimization is even more interesting. +It lets searchd exploit similarities between +batched full-text queries. It identifies common full-text query parts +(subtress) in all queries, and caches them between queries. For instance, +look at the following query batch: + +barack obama president +barack obama john mccain +barack obama speech + +There's a common two-word part ("barack obama") that can be computed +only once, then cached and shared across the queries. And common subtree +optimization does just that. Per-query cache size is strictly controlled +by subtree_docs_cache +and subtree_hits_cache +directives (so that caching all sxiteen gazillions +of documents that match "i am" does not exhaust the RAM and instantly +kill your server). + + +Here's a code sample (in PHP) that fire the same query in 3 different +sorting modes: + +require ( "sphinxapi.php" ); +$cl = new SphinxClient (); +$cl->SetMatchMode ( SPH_MATCH_EXTENDED ); + +$cl->SetSortMode ( SPH_SORT_RELEVANCE ); +$cl->AddQuery ( "the", "lj" ); +$cl->SetSortMode ( SPH_SORT_EXTENDED, "published desc" ); +$cl->AddQuery ( "the", "lj" ); +$cl->SetSortMode ( SPH_SORT_EXTENDED, "published asc" ); +$cl->AddQuery ( "the", "lj" ); +$res = $cl->RunQueries(); + + + +How to tell whether the queries in the batch were actually optimized? +If they were, respective query log will have a "multiplier" field that +specifies how many queries were processed together: + +[Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext/0/rel 747541 (0,20)] [lj] the +[Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext/0/ext 747541 (0,20)] [lj] the +[Sun Jul 12 15:18:17.000 2009] 0.040 sec x3 [ext/0/ext 747541 (0,20)] [lj] the + +Note the "x3" field. It means that this query was optimized and +processed in a sub-batch of 3 queries. For reference, this is how +the regular log would look like if the queries were not batched: + +[Sun Jul 12 15:18:17.062 2009] 0.059 sec [ext/0/rel 747541 (0,20)] [lj] the +[Sun Jul 12 15:18:17.156 2009] 0.091 sec [ext/0/ext 747541 (0,20)] [lj] the +[Sun Jul 12 15:18:17.250 2009] 0.092 sec [ext/0/ext 747541 (0,20)] [lj] the + +Note how per-query time in multi-query case was improved by a factor +of 1.5x to 2.3x, depending on a particular sorting mode. In fact, for both +common query and common subtree optimizations, there were reports of 3x and +even more improvements, and that's from production instances, not just +synthetic tests. + + + + +Collations + +Introduced to Sphinx in version 2.0.1-beta to supplement string sorting, +collations essentially affect the string attribute comparisons. They specify +both the character set encoding and the strategy that Sphinx uses to compare +strings when doing ORDER BY or GROUP BY with a string attribute involved. + + +String attributes are stored as is when indexing, and no character set +or language information is attached to them. That's okay as long as Sphinx +only needs to store and return the strings to the calling application verbatim. +But when you ask Sphinx to sort by a string value, that request immediately +becomes quite ambiguous. + + +First, single-byte (ASCII, or ISO-8859-1, or Windows-1251) strings +need to be processed differently that the UTF-8 ones that may encode +every character with a variable number of bytes. So we need to know +what is the character set type to interepret the raw bytes as meaningful +characters properly. + + +Second, we additionally need to know the language-specific +string sorting rules. For instance, when sorting according to US rules +in en_US locale, the accented character 'ï' (small letter i with diaeresis) +should be placed somewhere after 'z'. However, when sorting with French rules +and fr_FR locale in mind, it should be placed between 'i' and 'j'. And some +other set of rules might choose to ignore accents at all, allowing 'ï' +and 'i' to be mixed arbitrarily. + + +Third, but not least, we might need case-sensitive sorting in some +scenarios and case-insensitive sorting in some others. + + +Collations combine all of the above: the character set, the lanugage rules, +and the case sensitivity. Sphinx currently provides the following four +collations. + + + + + + + + +The first two collations rely on several standard C library (libc) calls +and can thus support any locale that is installed on your system. They provide +case-insensitive (_ci) and case-sensitive (_cs) comparisons respectively. +By default they will use C locale, effectively resorting to bytewise +comparisons. To change that, you need to specify a different available +locale using collation_libc_locale +directive. The list of locales available on your system can usually be obtained +with the locale command: + +$ locale -a +C +en_AG +en_AU.utf8 +en_BW.utf8 +en_CA.utf8 +en_DK.utf8 +en_GB.utf8 +en_HK.utf8 +en_IE.utf8 +en_IN +en_NG +en_NZ.utf8 +en_PH.utf8 +en_SG.utf8 +en_US.utf8 +en_ZA.utf8 +en_ZW.utf8 +es_ES +fr_FR +POSIX +ru_RU.utf8 +ru_UA.utf8 + + + +The specific list of the system locales may vary. Consult your OS documentation +to install additional needed locales. + + + and locales are +built-in into Sphinx. The first one is a generic collation for UTF-8 data +(without any so-called language tailoring); it should behave similar to + collation in MySQL. The second one +is a simple bytewise comparison. + + +Collation can be overriden via SphinxQL on a per-session basis using +SET collation_connection statement. All subsequent SphinxQL +queries will use this collation. SphinxAPI and SphinxSE queries will use +the server default collation, as specified in +collation_server configuration +directive. Sphinx currently defaults to collation. + + +Collations should affect all string attribute comparisons, including +those within ORDER BY and GROUP BY, so differently ordered or grouped results +can be returned depending on the collation chosen. + + + + +User-defined functions (UDF) + +Starting with 2.0.1-beta, Sphinx supports User-Defined Functions, +or UDF for short. They can be loaded and unloaded dynamically into +searchd without having to restart the daemon, +and used in expressions when searching. UDF features at a glance +are as follows. + +Functions can take integer (both 32-bit and 64-bit), float, string, or MVA arguments. +Functions can return integer or float values. +Functions can check the argument number, types, and names and raise errors. +Only simple functions (that is, non-aggregate ones) are currently supported. + + + +User-defined functions need your OS to support dynamically loadable +libraries (aka shared objects). Most of the modern OSes are eligible, +including Linux, Windows, MacOS, Solaris, BSD and others. (The internal +testing has been done on Linux and Windows.) The UDF libraries must +reside in a directory specified by +plugin_dir directive, and the +server must be configured to use mode. +Relative paths to the library files are not allowed. Once the library +is succesfully built and copied to the trusted location, you can then +dynamically install and deinstall the functions using +CREATE FUNCTION and +DROP FUNCTION statements +respectively. A single library can contain multiple functions. A library +gets loaded when you first install a function from it, and unloaded +when you deinstall all the functions from that library. + + +The library functions that will implement a UDF visible to SQL statements +need to follow C calling convention, and a simple naming convention. Sphinx +source distribution provides a sample file, +src/udfexample.c, +that defines a few simple functions showing how to work with integer, +string, and MVA arguments; you can use that one as a foundation for +your new functions. It includes the UDF interface header file, +src/sphinxudf.h, +that defines the required types and structures. sphinxudf.h +header is standalone, that is, does not require any other parts of Sphinx +source to compile. + + +Every function that you intend to use in your SELECT statements +requires at least two corresponding C/C++ functions: the initialization +call, and the function call itself. You can also optionally define +the deinitialization call if your function requires any post-query +cleanup. (For instance, if you were allocating any memory in either +the initialization call or the function calls.) Function names +in SQL are case insensitive, C function names are not. They need +to be all lower-case. Mistakes in function name prevent UDFs +from loading. You also have to pay special attention to the calling +convention used when compiling, the list and the types of arguments, +and the return type of the main function call. Mistakes in either +are likely to crash the server, or result in unexpected results +in the best case. Last but not least, all functions need to be +thread-safe. + + +Let's assume for the sake of example that your UDF name in SphinxQL +will be MYFUNC. The initialization, main, and deinitialization +functions would then need to be named as follows and take the following +arguments: + +/// initialization function +/// called once during query initialization +/// returns 0 on success +/// returns non-zero and fills error_message buffer on failure +int myfunc_init ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, + char * error_message ); + +/// main call function +/// returns the computed value +/// writes non-zero value into error_flag to indicate errors +RETURN_TYPE myfunc ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, + char * error_flag ); + +/// optional deinitialization function +/// called once to cleanup once query processing is done +void myfunc_deinit ( SPH_UDF_INIT * init ); + +The two mentioned structures, SPH_UDF_INIT and +SPH_UDF_ARGS, are defined in the src/sphinxudf.h +interface header and documented there. RETURN_TYPE of the +main function must be one of the following: + +int for the functions that return INT. +sphinx_int64_t for the functions that return BIGINT. +float for the functions that return FLOAT. + + + +The calling sequence is as follows. myfunc_init() is called +once when initializing the query. It can return a non-zero code to indicate +a failure; in that case query is not executed, and the error message from +the error_message buffer is returned. Otherwise, myfunc() +is be called for every row, and a myfunc_deinit() is then called +when the query ends. myfunc() can indicate an error by writing +a non-zero byte value to error_flag, in that case, it will +no more be called for subsequent rows, and a default value of 0 will be +substituted. Sphinx might or might not choose to terminate such queries +early, neither behavior is currently guaranteed. + + + + + +Command line tools reference + + +As mentioned elsewhere, Sphinx is not a single program called 'sphinx', +but a collection of 4 separate programs which collectively form Sphinx. This section +covers these tools and how to use them. + + +<filename>indexer</filename> command reference +indexer is the first of the two principle tools +as part of Sphinx. Invoked from either the command line directly, or as part +of a larger script, indexer is solely responsible +for gathering the data that will be searchable. +The calling syntax for indexer is as follows: + +indexer [OPTIONS] [indexname1 [indexname2 [...]]] + +Essentially you would list the different possible indexes (that you would later +make available to search) in sphinx.conf, so when calling +indexer, as a minimum you need to be telling it what index +(or indexes) you want to index. +If sphinx.conf contained details on 2 indexes, +mybigindex and mysmallindex, +you could do the following: + +$ indexer mybigindex +$ indexer mysmallindex mybigindex + +As part of the configuration file, sphinx.conf, you specify +one or more indexes for your data. You might call indexer to reindex +one of them, ad-hoc, or you can tell it to process all indexes - you are not limited +to calling just one, or all at once, you can always pick some combination +of the available indexes. +The majority of the options for indexer are given +in the configuration file, however there are some options you might need to specify +on the command line as well, as they can affect how the indexing operation is performed. +These options are: + + + ( for short) +tells indexer to use the given file as its configuration. Normally, +it will look for sphinx.conf in the installation directory +(e.g. /usr/local/sphinx/etc/sphinx.conf if installed into +/usr/local/sphinx), followed by the current directory you are +in when calling indexer from the shell. This is most of use +in shared environments where the binary files are installed somewhere like +/usr/local/sphinx/ but you want to provide users with +the ability to make their own custom Sphinx set-ups, or if you want to run +multiple instances on a single server. In cases like those you could allow them +to create their own sphinx.conf files and pass them to +indexer with this option. For example: + +$ indexer --config /home/myuser/sphinx.conf myindex + + + + tells indexer to update +every index listed in sphinx.conf, instead of listing individual indexes. +This would be useful in small configurations, or cron-type or maintenance +jobs where the entire index set will get rebuilt each day, or week, or whatever period is best. +Example usage: + +$ indexer --config /home/myuser/sphinx.conf --all + + + + is used for rotating indexes. Unless you have the situation +where you can take the search function offline without troubling users, you will almost certainly +need to keep search running whilst indexing new documents. creates +a second index, parallel to the first (in the same place, simply including .new +in the filenames). Once complete, indexer notifies searchd +via sending the signal, and searchd will attempt +to rename the indexes (renaming the existing ones to include .old +and renaming the .new to replace them), and then start serving +from the newer files. Depending on the setting of +seamless_rotate, there may be a slight delay +in being able to search the newer indexes. Example usage: + +$ indexer --rotate --all + + + + tells indexer not to output anything, +unless there is an error. Again, most used for cron-type, or other script +jobs where the output is irrelevant or unnecessary, except in the event of some kind of error. +Example usage: + +$ indexer --rotate --all --quiet + + + + does not display progress details as they occur; +instead, the final status details (such as documents indexed, speed of indexing and so on +are only reported at completion of indexing. In instances where the script is not being +run on a console (or 'tty'), this will be on by default. Example usage: + +$ indexer --rotate --all --noprogress + + + + reviews +the index source, as if it were indexing the data, and produces a list of the terms +that are being indexed. In other words, it produces a list of all the searchable terms +that are becoming part of the index. Note; it does not update the index in question, +it simply processes the data 'as if' it were indexing, including running queries +defined with or . +outputfile.txt will contain the list of words, one per line, +sorted by frequency with most frequent first, and N specifies +the maximum number of words that will be listed; if sufficiently large to encompass +every word in the index, only that many words will be returned. Such a dictionary list +could be used for client application features around "Did you mean..." functionality, +usually in conjunction with , below. Example: + +$ indexer myindex --buildstops word_freq.txt 1000 + +This would produce a document in the current directory, word_freq.txt +with the 1,000 most common words in 'myindex', ordered by most common first. Note that +the file will pertain to the last index indexed when specified with multiple indexes or + (i.e. the last one listed in the configuration file) + + + works with +(and is ignored if is not specified). +As provides the list of words used within the index, + adds the quantity present in the index, which would be +useful in establishing whether certain words should be considered stopwords +if they are too prevalent. It will also help with developing "Did you mean..." +features where you can how much more common a given word compared to another, +similar one. Example: + +$ indexer myindex --buildstops word_freq.txt 1000 --buildfreqs + +This would produce the word_freq.txt as above, however after each word would be the number of times it occurred in the index in question. + + + is used +for physically merging indexes together, for example if you have a main+delta scheme, +where the main index rarely changes, but the delta index is rebuilt frequently, +and would be used to combine the two. The operation moves +from right to left - the contents of src-index get examined +and physically combined with the contents of dst-index +and the result is left in dst-index. +In pseudo-code, it might be expressed as: dst-index += src-index +An example: + +$ indexer --merge main delta --rotate + +In the above example, where the main is the master, rarely modified index, +and delta is the less frequently modified one, you might use the above to call +indexer to combine the contents of the delta into the +main index and rotate the indexes. + + + +runs the filter range given upon merging. Specifically, as the merge is applied +to the destination index (as part of , and is ignored +if is not specified), indexer +will also filter the documents ending up in the destination index, and only +documents will pass through the filter given will end up in the final index. +This could be used for example, in an index where there is a 'deleted' attribute, +where 0 means 'not deleted'. Such an index could be merged with: + +$ indexer --merge main delta --merge-dst-range deleted 0 0 + +Any documents marked as deleted (value 1) would be removed from the newly-merged +destination index. It can be added several times to the command line, +to add successive filters to the merge, all of which must be met in order +for a document to become part of the final index. + + + dumps rows fetched +by SQL source(s) into the specified file, in a MySQL compatible syntax. +Resulting dumps are the exact representation of data as received by +indexer and help to repeat indexing-time issues. + + + guarantees that every row that +caused problems indexing (duplicate, zero, or missing document ID; +or file field IO issues; etc) will be reported. By default, this option +is off, and problem summaries may be reported instead. + + + is useful when you are +rebuilding many big indexes, and want each one rotated into +searchd as soon as possible. With +, indexer +will send a SIGHUP signal to searchd after succesfully +completing the work on each index. (The default behavior +is to send a single SIGHUP after all the indexes were built.) + + + prints out +SQL queries that indexer sends to +the database, along with SQL connection and disconnection +events. That is useful to diagnose and fix problems with +SQL sources. + + + + + + + +<filename>searchd</filename> command reference +searchd is the second of the two principle tools as part of Sphinx. +searchd is the part of the system which actually handles searches; +it functions as a server and is responsible for receiving queries, processing them and +returning a dataset back to the different APIs for client applications. +Unlike indexer, searchd is not designed +to be run either from a regular script or command-line calling, but instead either +as a daemon to be called from init.d (on Unix/Linux type systems) or to be called +as a service (on Windows-type systems), so not all of the command line options will +always apply, and so will be build-dependent. +Calling searchd is simply a case of: + +$ searchd [OPTIONS] + +The options available to searchd on all builds are: + + + ( for short) lists all of the + parameters that can be called in your particular build of searchd. + + + ( for short) + tells searchd to use the given file as its configuration, + just as with indexer above. + + + is used to asynchronously stop searchd, + using the details of the PID file as specified in the sphinx.conf file, + so you may also need to confirm to searchd which configuration + file to use with the option. NB, calling + will also make sure any changes applied to the indexes with + UpdateAttributes() + will be applied to the index files themselves. Example: + +$ searchd --config /home/myuser/sphinx.conf --stop + + + + is used to synchronously stop searchd. + essentially tells the running instance to exit (by sending it a SIGTERM) +and then immediately returns. will also attempt to wait until the +running searchd instance actually finishes the shutdown (eg. saves all +the pending attribute changes) and exits. Example: + +$ searchd --config /home/myuser/sphinx.conf --stopwait + +Possible exit codes are as follows: + + 0 on success; + 1 if connection to running searchd daemon failed; + 2 if daemon reported an error during shutdown; + 3 if daemon crashed during shutdown. + + + + command is used to query running +searchd instance status, using the connection details +from the (optionally) provided configuration file. It will try to connect +to the running instance using the first configured UNIX socket or TCP port. +On success, it will query for a number of status and performance counter +values and print them. You can use Status() +API call to access the very same counters from your application. Examples: + +$ searchd --status +$ searchd --config /home/myuser/sphinx.conf --status + + + + is used to explicitly state a PID file, +where the process information is stored regarding searchd, +used for inter-process communications (for example, indexer +will need to know the PID to contact searchd for rotating +indexes). Normally, searchd would use a PID if running +in regular mode (i.e. not with ), but it is possible +that you will be running it in console mode whilst the index is being updated +and rotated, for which a PID file will be needed. + +$ searchd --config /home/myuser/sphinx.conf --pidfile /home/myuser/sphinx.pid + + + + is used to force searchd +into console mode; typically it will be running as a conventional server application, +and will aim to dump information into the log files (as specified in +sphinx.conf). Sometimes though, when debugging issues +in the configuration or the daemon itself, or trying to diagnose hard-to-track-down +problems, it may be easier to force it to dump information directly +to the console/command line from which it is being called. Running in console mode +also means that the process will not be forked (so searches are done in sequence) +and logs will not be written to. (It should be noted that console mode +is not the intended method for running searchd.) +You can invoke it as such: + +$ searchd --config /home/myuser/sphinx.conf --console + + + + enables additional debug output +in the daemon log. Should only be needed rarely, to assist with debugging +issues that could not be easily reproduced on request. + + + is used in conjuction with the +logging options (the will need to have been +activated in sphinx.conf) to provide more detailed +information on a per-query basis as to the input/output operations +carried out in the course of that query, with a slight performance hit +and of course bigger logs. Further details are available under the +query log format section. +You might start searchd thus: + +$ searchd --config /home/myuser/sphinx.conf --iostats + + + + is used to provide actual CPU time +report (in addition to wall time) in both query log file (for every given +query) and status report (aggregated). It depends on clock_gettime() system +call and might therefore be unavailable on certain systems. You might start +searchd thus: + +$ searchd --config /home/myuser/sphinx.conf --cpustats + + + + ( for short) +is used to specify the port that searchd should listen on, +usually for debugging purposes. This will usually default to 9312, but sometimes +you need to run it on a different port. Specifying it on the command line +will override anything specified in the configuration file. The valid range +is 0 to 65535, but ports numbered 1024 and below usually require +a privileged account in order to run. An example of usage: + +$ searchd --port 9313 + + + + + +(or for short) Works as , but allow +you to specify not only the port, but full path, as IP address and port, or +Unix-domain socket path, that searchd will listen on. +Otherwords, you can specify either an IP address (or hostname) and port number, or +just a port number, or Unix socket path. If you specify port number +but not the address, searchd will listen on all network interfaces. +Unix path is identified by a leading slash. As the last param you +can also specify a protocol handler (listener) to be used for +connections on this socket. Supported protocol values are 'sphinx' +(Sphinx 0.9.x API protocol) and 'mysql41' (MySQL protocol used since +4.1 upto at least 5.1). + + + (or for short) forces this instance of +searchd only to serve the specified index. +Like , above, this is usually for debugging purposes; +more long-term changes would generally be applied to the configuration file +itself. Example usage: + +$ searchd --index myindex + + + + strips the path names from +all the file names referenced from the index (stopwords, wordforms, +exceptions, etc). This is useful for picking up indexes built on another +machine with possibly different path layouts. + + + +There are some options for searchd that are specific +to Windows platforms, concerning handling as a service, are only be available on Windows binaries. +Note that on Windows searchd will default to mode, unless you install it as a service. + + + installs searchd as a service +into the Microsoft Management Console (Control Panel / Administrative Tools / Services). +Any other parameters specified on the command line, where +is specified will also become part of the command line on future starts of the service. +For example, as part of calling searchd, you will likely also need +to specify the configuration file with , and you would do that +as well as specifying . Once called, the usual start/stop +facilities will become available via the management console, so any methods you could +use for starting, stopping and restarting services would also apply to +searchd. Example: + +C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install + --config C:\Sphinx\sphinx.conf + +If you wanted to have the I/O stats every time you started searchd, +you would specify its option on the same line as the command thus: + +C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install + --config C:\Sphinx\sphinx.conf --iostats + + + + removes the service from the Microsoft Management Console +and other places where services are registered, after previously installed with +. Note, this does not uninstall the software or delete the indexes. +It means the service will not be called from the services systems, and will not be started +on the machine's next start. If currently running as a service, the current instance +will not be terminated (until the next reboot, or searchd is called +with ). If the service was installed with a custom name +(with ), the same name will need to be specified +with when calling to uninstall. Example: + +C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --delete + + + + applies the given name to +searchd when installing or deleting the service, as would appear +in the Management Console; this will default to searchd, but if being deployed on servers +where multiple administrators may log into the system, or a system with multiple +searchd instances, a more descriptive name may be applicable. +Note that unless combined with or , +this option does not do anything. Example: + +C:\WINDOWS\system32> C:\Sphinx\bin\searchd.exe --install + --config C:\Sphinx\sphinx.conf --servicename SphinxSearch + + + + is the option that is passed by the +Management Console to searchd to invoke it as a service +on Windows platforms. It would not normally be necessary to call this directly; +this would normally be called by Windows when the service would be started, +although if you wanted to call this as a regular service from the command-line +(as the complement to ) you could do so in theory. + + + + +Last but not least, as every other daemon, searchd supports a number of signals. + + + SIGTERM + Initiates a clean shutdown. New queries will not be handled; but queries + that are already started will not be forcibly interrupted. + + + SIGHUP + Initiates index rotation. Depending on the value of + seamless_rotate setting, + new queries might be shortly stalled; clients will receive temporary + errors. + + + SIGUSR1 + Forces reopen of searchd log and query log files, letting + you implement log file rotation. + + + + + + +<filename>search</filename> command reference +search is one of the helper tools within the +Sphinx package. Whereas searchd is responsible for +searches in a server-type environment, search is +aimed at testing the index from the command line, and testing the index +quickly without building a framework to make the connection to the server +and process its response. +Note: search is not intended to be deployed as +part of a client application; it is strongly recommended you do not write +an interface to search instead of +searchd, and none of the bundled client APIs support +this method. (In any event, search will reload files +each time, whereas searchd will cache them in memory +for performance.) +That said, many types of query that you could build in the APIs +could also be made with search, however for very +complex searches it may be easier to construct them using a small script +and the corresponding API. Additionally, some newer features may be +available in the searchd system that have not yet +been brought into search. +The calling syntax for search is as +follows: + +search [OPTIONS] word1 [word2 [word3 [...]]] + +When calling search, it is not necessary +to have searchd running; simply make sure that +the account running the search program has read +access to the configuration file and the index files. +The default behaviour is to apply a search for word1 (AND word2 AND +word3... as specified) to all fields in all indexes as given in the +configuration file. If constructing the equivalent in the API, this would +be the equivalent to passing to +SetMatchMode, and specifying as the +indexes to query as part of Query. +There are many options available to search. +Firstly, the general options: + + ( for short) tells search to use +the given file as its configuration, just as with +indexer above. + ( for short) tells search to +limit searching to the specified index only; normally it would attempt to +search all of the physical indexes listed in +sphinx.conf, not any distributed ones. + tells search to +accept the query from the standard input, rather than the command line. +This can be useful for testing purposes whereby you could feed input via +pipes and from scripts. + + +Options for setting matches: + + ( for short) changes +the matching mode to match any of the words as part of the query (word1 OR +word2 OR word3). In the API this would be equivalent to passing + to SetMatchMode. + ( for short) +changes the matching mode to match all of the words as part of the query, +and do so in the phrase given (not including punctuation). In the API this +would be equivalent to passing to +SetMatchMode. + ( for short) +changes the matching mode to Boolean +matching. Note if using Boolean syntax matching on the command +line, you may need to escape the symbols (with a backslash) to avoid the +shell/command line processor applying them, such as ampersands being +escaped on a Unix/Linux system to avoid it forking to the +search process, although this can be resolved by +using , as below. In the API this would be +equivalent to passing to +SetMatchMode. + ( for short) changes +the matching mode to extended +matching which provides various text querying operators. +In the API this would be equivalent to passing + to SetMatchMode. + + ( for short) filters the results such that +only documents where the attribute given (attr) matches the value given +(v). For example, only matches +documents with an attribute called 'deleted' where its value is 0. You can +also add multiple filters on the command line, by specifying multiple + multiple times, however if you apply a second +filter to an attribute it will override the first defined +filter. + + +Options for handling the results: + + ( for short) limits the total number of matches back to the +number given. If a 'group' is specified, this will be the number of +grouped results. This defaults to 20 results if not specified (as do the +APIs) + ( for short) offsets the result list by the number of +places set by the count; this would be used for pagination through +results, where if you have 20 results per 'page', the second page would +begin at offset 20, the third page at offset 40, etc. + ( for short) specifies that results should be grouped +together based on the attribute specified. Like the GROUP BY clause in +SQL, it will combine all results where the attribute given matches, and +returns a set of results where each returned result is the best from each +group. Unless otherwise specified, this will be the best match on +relevance. + ( for short) instructs that when results are grouped +with , the expression given in <expr> shall +determine the order of the groups. Note, this does not specify which is +the best item within the group, only the order in which the groups +themselves shall be returned. + ( for short) specifies that results should be sorted +in the order listed in <clause>. This allows you to specify the +order you wish results to be presented in, ordering by different columns. +For example, you could say to sort entries first by weight (or relevance) and where +two or more entries have the same weight, to then sort by the time with +the highest time (newest) first. You will usually need to put the items in +quotes () or use commas +() to avoid the items being treated +separately. Additionally, like the regular sorting modes, if + (grouping) is being used, this will state how to +establish the best match within each group. + ( for +short) specifies that the search results should be presented in an order +determined by an arithmetic expression, stated in expr. For example: + +(again noting that this will have to be quoted to avoid the shell dealing +with the asterisk). Extended sort mode is discussed in more detail under +the entry under the Sorting modes section of the +manual. + specifies that the results should +be sorted by descending (i.e. most recent first) date. This requires that +there is an attribute in the index that is set as a timestamp. + specifies that the results should +be sorted by ascending (i.e. oldest first) date. This requires that there +is an attribute in the index that is set as a timestamp. + specifies that the results should be +sorted by timestamp in groups; it will return all of the documents whose +timestamp is within the last hour, then sorted within that bracket for +relevance. After, it would return the documents from the last day, sorted +by relevance, then the last week and then the last month. It is discussed +in more detail under the entry +under the Sorting modes section of +the manual. + + +Other options: + + ( for short) +instructs search not to look-up data in your SQL +database. Specifically, for debugging with MySQL and +search, you can provide it with a query to look up +the full article based on the returned document ID. It is explained in +more detail under the sql_query_info directive. + + + + + +<filename>spelldump</filename> command reference +spelldump is one of the helper tools within the Sphinx package. +It is used to extract the contents of a dictionary file that uses +ispell or MySpell format, which +can help build word lists for wordforms - all of +the possible forms are pre-built for you. +Its general usage is: + +spelldump [options] <dictionary> <affix> [result] [locale-name] + +The two main parameters are the dictionary's main file and its affix +file; usually these are named as +[language-prefix].dict and +[language-prefix].aff and will be available with most +common Linux distributions, as well as various places online. + specifies where the dictionary data should +be output to, and additionally specifies +the locale details you wish to use. +There is an additional option, , which +specifies a file for case conversion details. +Examples of its usage are: + +spelldump en.dict en.aff +spelldump ru.dict ru.aff ru.txt ru_RU.CP1251 +spelldump ru.dict ru.aff ru.txt .1251 + +The results file will contain a list of all the words in the +dictionary in alphabetical order, output in the format of a wordforms file, +which you can use to customise for your specific circumstances. An example +of the result file: + +zone > zone +zoned > zoned +zoning > zoning + + + + +<filename>indextool</filename> command reference + +indextool is one of the helper tools within +the Sphinx package, introduced in version 0.9.9-rc2. It is used to +dump miscellaneous debug information about the physical index. +(Additional functionality such as index verification is planned +in the future, hence the indextool name rather than just indexdump.) +Its general usage is: + + +indextool <command> [options] + + +The only currently available option applies to all commands +and lets you specify the configuration file: + + ( for short) +overrides the built-in config file names. + + + + +The commands are as follows: + + + quickly dumps +the provided index header file without touching any other index files +or even the configuration file. The report provides a breakdown of +all the index settings, in particular the entire attribute and +field list. Prior to 0.9.9-rc2, this command was present in +CLI search utility. + + dumps +the index definition from the given index header file in (almost) +compliant sphinx.conf file format. +Added in version 2.0.1-beta. + + dumps index header +by index name with looking up the header path in the configuration file. + + dumps document IDs +by index name. It takes the data from attribute (.spa) file and therefore +requires docinfo=extern to work. + + dumps all +the hits (occurences) of a given keyword in a given index, with keyword +specified as text. + + dumps all +the hits (occurences) of a given keyword in a given index, with keyword +specified as internal numeric ID. + + filters stdin using +HTML stripper settings for a given index, and prints the filtering +results to stdout. Note that the settings will be taken from sphinx.conf, +and not the index header. + + checks the index data +files for consistency errors that might be introduced either by bugs +in indexer and/or hardware faults. + + strips the path names from +all the file names referenced from the index (stopwords, wordforms, +exceptions, etc). This is useful for checking indexes built on another +machine with possibly different path layouts. + + + + + + +SphinxQL reference + + + +SphinxQL is our SQL dialect that exposes all of the search daemon +functionality using a standard SQL syntax with a few Sphinx-specific +extensions. Everything available via the SphinxAPI is also available +SphinxQL but not vice versa; for instance, writes into RT indexes +are only available via SphinxQL. This chapter documents supported +SphinxQL statements syntax. + + + +SELECT syntax + +SELECT + select_expr [, select_expr ...] + FROM index [, index2 ...] + [WHERE where_condition] + [GROUP BY {col_name | expr_alias}] + [ORDER BY {col_name | expr_alias} {ASC | DESC} [, ...]] + [WITHIN GROUP ORDER BY {col_name | expr_alias} {ASC | DESC}] + [LIMIT offset, row_count] + [OPTION opt_name = opt_value [, ...]] + + +SELECT statement was introduced in version 0.9.9-rc2. +It's syntax is based upon regular SQL but adds several Sphinx-specific +extensions and has a few omissions (such as (currently) missing support for JOINs). +Specifically, + +Column list clause. Column names, arbitrary expressions, +and star ('*') are all allowed (ie. +SELECT @id, group_id*123+456 AS expr1 FROM test1 +will work). Unlike in regular SQL, all computed expressions must be aliased +with a valid identifier. Starting with version 2.0.1-beta, AS +is optional. Special names such as @id and @weight should currently +be used with leading at-sign. This at-sign requirement will be lifted in +the future. + +FROM clause. FROM clause should contain the list of indexes +to search through. Unlike in regular SQL, comma means enumeration of +full-text indexes as in Query() +API call rather than JOIN. + +WHERE clause. This clause will map both to fulltext query +and filters. Comparison operators (=, !=, <, >, <=, >=), IN, +AND, NOT, and BETWEEN are all supported and map directly to filters. +OR is not supported yet but will be in the future. MATCH('query') +is supported and maps to fulltext query. Query will be interpreted +according to full-text query language rules. +There must be at most one MATCH() in the clause. Starting with version +2.0.1-beta, {col_name | expr_alias} [NOT] IN @uservar +condition syntax is supported. (Refer to +for a discussion of global user variables.) + +GROUP BY clause. Currently only supports grouping by a single +column. The column however can be a computed expression: + +SELECT *, group_id*1000+article_type AS gkey FROM example GROUP BY gkey + +Aggregate functions (AVG(), MIN(), MAX(), SUM()) in column list +clause are supported. Arguments to aggregate functions can be either +plain attributes or arbitrary expressions. COUNT(*) is implicitly +supported as using GROUP BY will add @count column to result set. +Explicit support might be added in the future. COUNT(DISTINCT attr) +is supported. Currently there can be at most one COUNT(DISTINCT) +per query and an argument needs to be an attribute. Both current +restrictions on COUNT(DISTINCT) might be lifted in the future. + +SELECT *, AVG(price) AS avgprice, COUNT(DISTINCT storeid) +FROM products +WHERE MATCH('ipod') +GROUP BY vendorid + +Starting with 2.0.1-beta, GROUP BY on a string attribute is supported, +with respect for current collation (see ). + +WITHIN GROUP ORDER BY clause. This is a Sphinx specific +extension that lets you control how the best row within a group +will to be selected. The syntax matches that of regular ORDER BY +clause: + +SELECT *, INTERVAL(posted,NOW()-7*86400,NOW()-86400) AS timeseg +FROM example WHERE MATCH('my search query') +GROUP BY siteid +WITHIN GROUP ORDER BY @weight DESC +ORDER BY timeseg DESC, @weight DESC + +Starting with 2.0.1-beta, WITHIN GROUP ORDER BY on a string attribute is supported, +with respect for current collation (see ). + +ORDER BY clause. Unlike in regular SQL, only column names +(not expressions) are allowed and explicit ASC and DESC are required. +The columns however can be computed expressions: + +SELECT *, @weight*10+docboost AS skey FROM example ORDER BY skey + +Starting with 2.0.1-beta, ORDER BY on a string attribute is supported, +with respect for current collation (see ). + +LIMIT clause. Both LIMIT N and LIMIT M,N forms are supported. +Unlike in regular SQL (but like in Sphinx API), an implicit LIMIT 0,20 +is present by default. + +OPTION clause. This is a Sphinx specific extension that +lets you control a number of per-query options. The syntax is: + +OPTION <optionname>=<value> [ , ... ] + +Supported options and respectively allowed values are: + +'ranker' - any of 'proximity_bm25', 'bm25', 'none', 'wordcount', 'proximity', 'matchany', or 'fieldmask' +'max_matches' - integer (per-query max matches value) +'cutoff' - integer (max found matches threshold) +'max_query_time' - integer (max search time threshold, msec) +'retry_count' - integer (distributed retries count) +'retry_delay' - integer (distributed retry delay, msec) +'field_weights' - a named integer list (per-field user weights for ranking) +'index_weights' - a named integer list (per-index user weights for ranking) +'reverse_scan' - 0 or 1, lets you control the order in which full-scan query processes the rows + +Example: + +SELECT * FROM test WHERE MATCH('@title hello @body world') +OPTION ranker=bm25, max_matches=3000, + field_weights=(title=10, body=3) + + + + + + + +SHOW META syntax + +SHOW META + +SHOW META shows additional meta-information about the latest +query such as query time and keyword statistics: + +mysql> SELECT * FROM test1 WHERE MATCH('test|one|two'); ++------+--------+----------+------------+ +| id | weight | group_id | date_added | ++------+--------+----------+------------+ +| 1 | 3563 | 456 | 1231721236 | +| 2 | 2563 | 123 | 1231721236 | +| 4 | 1480 | 2 | 1231721236 | ++------+--------+----------+------------+ +3 rows in set (0.01 sec) + +mysql> SHOW META; ++---------------+-------+ +| Variable_name | Value | ++---------------+-------+ +| total | 3 | +| total_found | 3 | +| time | 0.005 | +| keyword[0] | test | +| docs[0] | 3 | +| hits[0] | 5 | +| keyword[1] | one | +| docs[1] | 1 | +| hits[1] | 2 | +| keyword[2] | two | +| docs[2] | 1 | +| hits[2] | 2 | ++---------------+-------+ +12 rows in set (0.00 sec) + + + + + +SHOW WARNINGS syntax + +SHOW WARNINGS + +SHOW WARNINGS statement, introduced in version 0.9.9-rc2, +can be used to retrieve the warning +produced by the latest query. The error message will be returned along with +the query itself: + +mysql> SELECT * FROM test1 WHERE MATCH('@@title hello') \G +ERROR 1064 (42000): index test1: syntax error, unexpected TOK_FIELDLIMIT +near '@title hello' + +mysql> SELECT * FROM test1 WHERE MATCH('@title -hello') \G +ERROR 1064 (42000): index test1: query is non-computable (single NOT operator) + +mysql> SELECT * FROM test1 WHERE MATCH('"test doc"/3') \G +*************************** 1. row *************************** + id: 4 + weight: 2500 + group_id: 2 +date_added: 1231721236 +1 row in set, 1 warning (0.00 sec) + +mysql> SHOW WARNINGS \G +*************************** 1. row *************************** + Level: warning + Code: 1000 +Message: quorum threshold too high (words=2, thresh=3); replacing quorum operator + with AND operator +1 row in set (0.00 sec) + + + + + +SHOW STATUS syntax +SHOW STATUS, introduced in version 0.9.9-rc2, +displays a number of useful performance counters. IO and CPU +counters will only be available if searchd was started with --iostats and --cpustats +switches respectively. + +mysql> SHOW STATUS; ++--------------------+-------+ +| Variable_name | Value | ++--------------------+-------+ +| uptime | 216 | +| connections | 3 | +| maxed_out | 0 | +| command_search | 0 | +| command_excerpt | 0 | +| command_update | 0 | +| command_keywords | 0 | +| command_persist | 0 | +| command_status | 0 | +| agent_connect | 0 | +| agent_retry | 0 | +| queries | 10 | +| dist_queries | 0 | +| query_wall | 0.075 | +| query_cpu | OFF | +| dist_wall | 0.000 | +| dist_local | 0.000 | +| dist_wait | 0.000 | +| query_reads | OFF | +| query_readkb | OFF | +| query_readtime | OFF | +| avg_query_wall | 0.007 | +| avg_query_cpu | OFF | +| avg_dist_wall | 0.000 | +| avg_dist_local | 0.000 | +| avg_dist_wait | 0.000 | +| avg_query_reads | OFF | +| avg_query_readkb | OFF | +| avg_query_readtime | OFF | ++--------------------+-------+ +29 rows in set (0.00 sec) + + + + + +INSERT and REPLACE syntax + +{INSERT | REPLACE} INTO index [(column, ...)] + VALUES (value, ...) + [, (...)] + + +INSERT statement, introduced in version 1.10-beta, is only supported for RT indexes. +It inserts new rows (documents) into an existing index, with the provided column values. + + +ID column must be present in all cases. Rows with duplicate IDs will not +be overwritten by INSERT; use REPLACE to do that. + + + is the name of RT index into which the new row(s) +should be inserted. The optional column names list lets you only explicitly specify +values for some of the columns present in the index. All the other columns will be +filled with their default values (0 for scalar types, empty string for text types). + + +Expressions are not currently supported in INSERT and values should be explicitly +specified. + + +Multiple rows can be inserted using a single INSERT statement by providing +several comma-separated, parens-enclosed lists of rows values. + + + + +DELETE syntax + +DELETE FROM index WHERE {id = value | id IN (val1 [, val2 [, ...]])} + + +DELETE statement, introduced in version 1.10-beta, is only supported for RT indexes. +It deletes existing rows (documents) from an existing index based on ID. + + + is the name of RT index from which the row should be deleted. + is the row ID to be deleted. Support for batch +id IN (2,3,5) syntax was added in version 2.0.1-beta. + + +Additional types of WHERE conditions (such as conditions on attributes, etc) +are planned, but not supported yet as of 1.10-beta. + + + + +SET syntax + +SET [GLOBAL] server_variable_name = value +SET GLOBAL @user_variable_name = (int_val1 [, int_val2, ...]) + + +SET statement, introduced in version 1.10-beta, modifies a server variable value. +The variable names are case-insensitive. No variable value changes survive +server restart. There are the following classes of the variables: + +per-session server variable (1.10-beta and above) +global server variable (2.0.1-beta and above) +global user variable (2.0.1-beta and above) + + + +Global user variables are shared between concurrent sessions. Currently, +the only supported value type is the list of BIGINTs, and these variables +can only be used along with IN() for filtering purpose. The intended usage +scenario is uploading huge lists of values to searchd +(once) and reusing them (many times) later, saving on network overheads. +Example: + +// in session 1 +mysql> SET GLOBAL @myfilter=(2,3,5,7,11,13); +Query OK, 0 rows affected (0.00 sec) + +// later in session 2 +mysql> SELECT * FROM test1 WHERE group_id IN @myfilter; ++------+--------+----------+------------+-----------------+------+ +| id | weight | group_id | date_added | title | tag | ++------+--------+----------+------------+-----------------+------+ +| 3 | 1 | 2 | 1299338153 | another doc | 15 | +| 4 | 1 | 2 | 1299338153 | doc number four | 7,40 | ++------+--------+----------+------------+-----------------+------+ +2 rows in set (0.02 sec) + + + +Per-session and global server variables affect certain server settings in the respective scope. +Known per-session server variables are: + + +AUTOCOMMIT = {0 | 1} + +Whether any data modification statement should be implicitly +wrapped by BEGIN and COMMIT. +Introduced in version 1.10-beta. + + + +COLLATION_CONNECTION = collation_name + +Selects the collation to be used for ORDER BY or GROUP BY on string +values in the subsequent queries. Refer to +for a list of known collation names. +Introduced in version 2.0.1-beta. + + + +CHARACTER_SET_RESULTS = charset_name + +Does nothing; a placeholder to support frameworks, clients, and +connectors that attempt to automatically enforce a charset when +connecting to a Sphinx server. +Introduced in version 2.0.1-beta. + + + + + +Known global server variables are: + + +QUERY_LOG_FORMAT = {plain | sphinxql} + +Changes the current log format. +Introduced in version 2.0.1-beta. + + + +LOG_LEVEL = {info | debug | debugv | debugvv} + +Changes the current log verboseness level. +Introduced in version 2.0.1-beta. + + + + + +Examples: + +mysql> SET autocommit=0; +Query OK, 0 rows affected (0.00 sec) + +mysql> SET GLOBAL query_log_format=sphinxql; +Query OK, 0 rows affected (0.00 sec) + + + + + +BEGIN, COMMIT, and ROLLBACK syntax + +START TRANSACTION | BEGIN +COMMIT +ROLLBACK +SET AUTOCOMMIT = {0 | 1} + + +BEGIN, COMMIT, and ROLLBACK statements were introduced in version 1.10-beta. +BEGIN statement (or its START TRANSACTION alias) forcibly commits pending +transaction, if any, and begins a new one. COMMIT statement commits the current +transaction, making all its changes permanent. ROLLBACK statement rolls back the +current transaction, canceling all its changes. SET AUTOCOMMIT controls the +autocommit mode in the active session. + + +AUTOCOMMIT is set to 1 by default, meaning that every statement that perfoms +any changes on any index is implicitly wrapped in BEGIN and COMMIT. + + +Transactions are limited to a single RT index, and also limited in size. +They are atomic, consistent, overly isolated, and durable. Overly isolated +means that the changes are not only invisible to the concurrent transactions +but even to the current session itself. + + + + +CALL SNIPPETS syntax + +CALL SNIPPETS(data, index, query[, opt_value AS opt_name[, ...]]) + + +CALL SNIPPETS statement, introduced in version 1.10-beta, builds a snippet +from provided data and query, using specified index settings. + + + is the source data string to extract a snippet from. + is the name of the index from which to take the text +processing settings. is the full-text query to build +snippets for. Additional options are documented in +. Usage example: + + +CALL SNIPPETS('this is my document text', 'test1', 'hello world', + 5 AS around, 200 AS limit) + + + + +CALL KEYWORDS syntax + +CALL KEYWORDS(text, index, [hits]) + + +CALL KEYWORDS statement, introduced in version 1.10-beta, splits text +into particular keywords. It returns tokenized and normalized forms +of the keywords, and, optionally, keyword statistics. + + + is the text to break down to keywords. + is the name of the index from which to take the text +processing settings. is an optional boolean parameter +that specifies whether to return document and hit occurrence statistics. + + + + +SHOW TABLES syntax + +SHOW TABLES + + +SHOW TABLES statement, introduced in version 2.0.1-beta, enumerates +all currently active indexes along with their types. As of 2.0.1-beta, +existing index types are , , +and respectively. +Example: + +mysql> SHOW TABLES; ++-------+-------------+ +| Index | Type | ++-------+-------------+ +| dist1 | distributed | +| rt | rt | +| test1 | local | +| test2 | local | ++-------+-------------+ +4 rows in set (0.00 sec) + + + + + +DESCRIBE syntax + +{DESC | DESCRIBE} index + + +DESCRIBE statement, introduced in version 2.0.1-beta, lists +index columns and their associated types. Columns are document ID, +full-text fields, and attributes. The order matches that in which +fields and attributes are expected by INSERT and REPLACE statements. +As of 2.0.1-beta, column types are , +, , +, , +, , +, and . +ID column will be typed either +or based on whether the binaries +were built with 32-bit or 64-bit document ID support. +Example: + + +mysql> DESC rt; ++---------+---------+ +| Field | Type | ++---------+---------+ +| id | integer | +| title | field | +| content | field | +| gid | integer | ++---------+---------+ +4 rows in set (0.00 sec) + + + + +CREATE FUNCTION syntax + +CREATE FUNCTION udf_name + RETURNS {INT | BIGINT | FLOAT} + SONAME 'udf_lib_file' + + +CREATE FUNCTION statement, introduced in version 2.0.1-beta, +installs a user-defined function (UDF) +with the given name and type from the given library file. +The library file must reside in a trusted +plugin_dir directory. +On success, the function is available for use in all subsequent +queries that the server receives. Example: + + +mysql> CREATE FUNCTION avgmva RETURNS INT SONAME 'udfexample.dll'; +Query OK, 0 rows affected (0.03 sec) + +mysql> SELECT *, AVGMVA(tag) AS q from test1; ++------+--------+---------+-----------+ +| id | weight | tag | q | ++------+--------+---------+-----------+ +| 1 | 1 | 1,3,5,7 | 4.000000 | +| 2 | 1 | 2,4,6 | 4.000000 | +| 3 | 1 | 15 | 15.000000 | +| 4 | 1 | 7,40 | 23.500000 | ++------+--------+---------+-----------+ + + + + +DROP FUNCTION syntax + +DROP FUNCTION udf_name + + +DROP FUNCTION statement, introduced in version 2.0.1-beta, +deinstalls a user-defined function (UDF) +with the given name. On success, the function is no longer available +for use in subsequent queries. Pending concurrent queries will not be +affected and the library unload, if necessary, will be postponed +until those queries complete. Example: + + +mysql> DROP FUNCTION avgmva; +Query OK, 0 rows affected (0.00 sec) + + + + +SHOW VARIABLES syntax + +SHOW VARIABLES + + +Added in version 2.0.1-beta, this is currently a placeholder +query that does nothing and reports success. That is in order +to keep compatibility with frameworks and connectors that +automatically execute this statement. + + +mysql> SHOW VARIABLES; +Query OK, 0 rows affected (0.00 sec) + + + + +SHOW COLLATION syntax + +SHOW COLLATION + + +Added in version 2.0.1-beta, this is currently a placeholder +query that does nothing and reports success. That is in order +to keep compatibility with frameworks and connectors that +automatically execute this statement. + + +mysql> SHOW COLLATION; +Query OK, 0 rows affected (0.00 sec) + + + + +UPDATE syntax + +UPDATE index SET col1 = newval1 [, ...] WHERE ID = docid + + +UPDATE statement was added in version 2.0.1-beta. It can currently +update 32-bit integer attributes only. Multiple attributes and values +can be specified. Both RT and disk indexes are supported. +Updates on other attribute types are also planned. + + +mysql> UPDATE myindex SET enabled=0 WHERE id=123; +Query OK, 1 rows affected (0.00 sec) + + + + + +Multi-statement queries + +Starting version 2.0.1-beta, SphinxQL supports multi-statement +queries, or batches. Possible inter-statement optimizations described +in do apply to SphinxQL just as well. +The batched queries should be separated by a semicolon. Your MySQL +client library needs to support MySQL multi-query mechanism and +multiple result set. For instance, mysqli interface in PHP +and DBI/DBD libraries in Perl are known to work. + + +Here's a PHP sample showing how to utilize mysqli interface +with Sphinx. + +Its output with the sample test1 index included +with Sphinx is as follows. + +$ php test_multi.php +id=1 +id=2 +id=3 +id=4 +------ +id=3 +id=4 +id=1 +id=2 + + + +The following statements can currently be used in a batch: +SELECT, SHOW WARNINGS, SHOW STATUS, and SHOW META. Arbitrary +sequence of these statements are allowed. The results sets +returned should match those that would be returned if the +batched queries were sent one by one. + + + + + +Comment syntax + +Since version 2.0.1-beta, SphinxQL supports C-style comment syntax. +Everything from an opening /* sequence to a closing +*/ sequence is ignored. Comments can span multiple lines, +can not nest, and should not get logged. MySQL specific +/*! ... */ comments are also currently ignored. +(As the comments support was rather added for better compatibility +with mysqldump produced dumps, rather than +improving generaly query interoperability between Sphinx and MySQL.) + +SELECT /*! SQL_CALC_FOUND_ROWS */ col1 FROM table1 WHERE ... + + + + + + +List of SphinxQL reserved keywords +A complete alphabetical list of keywords that are currently reserved +in SphinxQL syntax (and therefore can not be used as identifiers). + +AND +AS +ASC +AVG +BEGIN +BETWEEN +BY +CALL +COLLATION +COMMIT +COUNT +DELETE +DESC +DESCRIBE +DISTINCT +FALSE +FROM +GLOBAL +GROUP +ID +IN +INSERT +INTO +LIMIT +MATCH +MAX +META +MIN +NOT +NULL +OPTION +OR +ORDER +REPLACE +ROLLBACK +SELECT +SET +SHOW +START +STATUS +SUM +TABLES +TRANSACTION +TRUE +UPDATE +VALUES +VARIABLES +WARNINGS +WEIGHT +WHERE +WITHIN + + + + + +SphinxQL upgrade notes, version 2.0.1-beta + +This section only applies to existing applications that +use SphinxQL versions prior to 2.0.1-beta. + + +In previous versions, SphinxQL just wrapped around SphinxAPI +and inherited its magic columns and column set quirks. Essentially, +SphinxQL queries could return (slightly) different columns and +in a (slightly) different order than it was explicitly requested +in the query. Namely, weight magic column (which is not +a real column in any index) was added at all times, and GROUP BY +related @count, @group, and @distinct +magic columns were conditionally added when grouping. Also, the order +of columns (attributes) in the result set was actually taken from the +index rather than the query. (So if you asked for columns C, B, A +in your query but they were in the A, B, C order in the index, +they would have been returned in the A, B, C order.) + + +In version 2.0.1-beta, we fixed that. SphinxQL is now more +SQL compliant (and will be further brought in as much compliance +with standard SQL syntax as possible). That is not yet a breaking +change, because searchd now supports +compat_sphinxql_magics +directive that flips between the old "compatibility" mode and the new +"compliance" mode. However, the compatibility mode support is going +to be removed in future, so it's strongly advised to update SphinxQL +applications and switch to the compliance mode. + + +The important changes are as follows: + + +@ID magic name is deprecated in favor of +ID. Document ID is considered an attribute. + + +WEIGHT is no longer implicitly returned, +because it is not actually a column (an index attribute), +but rather an internal function computed per each row (a match). +You have to explicitly ask for it, using the WEIGHT() +function. (The requirement to alias the result will be lifted +in the next release.) + +SELECT id, WEIGHT() w FROM myindex WHERE MATCH('test') + + + +You can now use quoted reserved keywords as aliases. +The quote character is backtick ("`", ASCII code 96 decimal, +60 hex). One particularly useful example would be returning +weight column like the old mode: + +SELECT id, WEIGHT() `weight` FROM myindex WHERE MATCH('test') + + + +The column order is now different and should now match the +one expliclitly defined in the query. So if you are accessing +columns based on their position in the result set rather than +the name (for instance, by using mysql_fetch_row() +rather than mysql_fetch_assoc() in PHP), +check and fix the order of columns in your queries. + + +SELECT * return the columns in index order, +as it used to, including the ID column. However, +SELECT * does not automatically return WEIGHT(). +To update such queries in case you access columns by names, +simply add it to the query: + +SELECT *, WEIGHT() `weight` FROM myindex WHERE MATCH('test') + +Otherwise, i.e., in case you rely on column order, select +ID, weight, and then other columns: + +SELECT id, *, WEIGHT() `weight` FROM myindex WHERE MATCH('test') + + + +Magic @count and @distinct +attributes are no longer implicitly returned. You now +have to explicitly ask for them when using GROUP BY. +(Also note that you currently have to alias them; +that requirement will be lifted in the future.) + +SELECT gid, COUNT(*) q FROM myindex WHERE MATCH('test') +GROUP BY gid ORDER BY q DESC + + + + + + + + +API reference + + + +There is a number of native searchd client API implementations +for Sphinx. As of time of this writing, we officially support our own +PHP, Python, and Java implementations. There also are third party +free, open-source API implementations for Perl, Ruby, and C++. + + +The reference API implementation is in PHP, because (we believe) +Sphinx is most widely used with PHP than any other language. +This reference documentation is in turn based on reference PHP API, +and all code samples in this section will be given in PHP. + + +However, all other APIs provide the same methods and implement +the very same network protocol. Therefore the documentation does +apply to them as well. There might be minor differences as to the +method naming conventions or specific data structures used. +But the provided functionality must not differ across languages. + + + +General API functions + + +GetLastError +Prototype: function GetLastError() + +Returns last error message, as a string, in human readable format. +If there were no errors during the previous API call, empty string is returned. + + +You should call it when any other function (such as Query()) +fails (typically, the failing function returns false). The returned string will +contain the error description. + + +The error message is not reset by this call; so you can safely +call it several times if needed. + + + +GetLastWarning +Prototype: function GetLastWarning () + +Returns last warning message, as a string, in human readable format. +If there were no warnings during the previous API call, empty string is returned. + + +You should call it to verify whether your request +(such as Query()) was completed but with warnings. +For instance, search query against a distributed index might complete +succesfully even if several remote agents timed out. In that case, +a warning message would be produced. + + +The warning message is not reset by this call; so you can safely +call it several times if needed. + + + +SetServer +Prototype: function SetServer ( $host, $port ) + +Sets searchd host name and TCP port. +All subsequent requests will use the new host and port settings. +Default host and port are 'localhost' and 9312, respectively. + + + +SetRetries +Prototype: function SetRetries ( $count, $delay=0 ) + +Sets distributed retry count and delay. + + +On temporary failures searchd will attempt up to +$count retries per agent. $delay is the delay +between the retries, in milliseconds. Retries are disabled by default. +Note that this call will not make the API itself retry on +temporary failure; it only tells searchd to do so. +Currently, the list of temporary failures includes all kinds of connect() +failures and maxed out (too busy) remote agents. + + + +SetConnectTimeout +Prototype: function SetConnectTimeout ( $timeout ) + +Sets the time allowed to spend connecting to the server before giving up. + +Under some circumstances, the server can be delayed in responding, either +due to network delays, or a query backlog. In either instance, this allows +the client application programmer some degree of control over how their +program interacts with searchd when not available, +and can ensure that the client application does not fail due to exceeding +the script execution limits (especially in PHP). + +In the event of a failure to connect, an appropriate error code should +be returned back to the application in order for application-level error handling +to advise the user. + + + +SetArrayResult +Prototype: function SetArrayResult ( $arrayresult ) + +PHP specific. Controls matches format in the search results set +(whether matches should be returned as an array or a hash). + + +$arrayresult argument must be boolean. If $arrayresult is false +(the default mode), matches will returned in PHP hash format with +document IDs as keys, and other information (weight, attributes) +as values. If $arrayresult is true, matches will be returned +as a plain array with complete per-match information including +document ID. + + +Introduced along with GROUP BY support on MVA attributes. +Group-by-MVA result sets may contain duplicate document IDs. +Thus they need to be returned as plain arrays, because hashes +will only keep one entry per document ID. + + + + +IsConnectError +Prototype: function IsConnectError () + +Checks whether the last error was a network error on API side, or a remote error +reported by searchd. Returns true if the last connection attempt to searchd failed on API side, +false otherwise (if the error was remote, or there were no connection attempts at all). +Introduced in version 0.9.9-rc1. + + + + + +General query settings + + +SetLimits +Prototype: function SetLimits ( $offset, $limit, $max_matches=0, $cutoff=0 ) + +Sets offset into server-side result set ($offset) and amount of matches +to return to client starting from that offset ($limit). Can additionally +control maximum server-side result set size for current query ($max_matches) +and the threshold amount of matches to stop searching at ($cutoff). +All parameters must be non-negative integers. + + +First two parameters to SetLimits() are identical in behavior to MySQL +LIMIT clause. They instruct searchd to return at +most $limit matches starting from match number $offset. +The default offset and limit settings are 0 and 20, that is, to return +first 20 matches. + + +max_matches setting controls how much matches searchd +will keep in RAM while searching. All matching documents will be normally +processed, ranked, filtered, and sorted even if max_matches is set to 1. +But only best N documents are stored in memory at any given moment for performance +and RAM usage reasons, and this setting controls that N. Note that there are +two places where max_matches limit is enforced. Per-query +limit is controlled by this API call, but there also is per-server limit +controlled by max_matches setting in the config file. To prevent +RAM usage abuse, server will not allow to set per-query limit +higher than the per-server limit. + + +You can't retrieve more than max_matches matches to the client application. +The default limit is set to 1000. Normally, you must not have to go over +this limit. One thousand records is enough to present to the end user. +And if you're thinking about pulling the results to application +for further sorting or filtering, that would be much more efficient +if performed on Sphinx side. + + +$cutoff setting is intended for advanced performance control. +It tells searchd to forcibly stop search query +once $cutoff matches had been found and processed. + + + +SetMaxQueryTime +Prototype: function SetMaxQueryTime ( $max_query_time ) + +Sets maximum search query time, in milliseconds. Parameter must be +a non-negative integer. Default valus is 0 which means "do not limit". + +Similar to $cutoff setting from SetLimits(), +but limits elapsed query time instead of processed matches count. Local search queries +will be stopped once that much time has elapsed. Note that if you're performing +a search which queries several local indexes, this limit applies to each index +separately. + + + +SetOverride +Prototype: function SetOverride ( $attrname, $attrtype, $values ) + +Sets temporary (per-query) per-document attribute value overrides. +Only supports scalar attributes. $values must be a hash that maps document +IDs to overridden attribute values. Introduced in version 0.9.9-rc1. + + +Override feature lets you "temporary" update attribute values for some documents +within a single query, leaving all other queries unaffected. This might be useful +for personalized data. For example, assume you're implementing a personalized +search function that wants to boost the posts that the user's friends recommend. +Such data is not just dynamic, but also personal; so you can't simply put it +in the index because you don't want everyone's searches affected. Overrides, +on the other hand, are local to a single query and invisible to everyone else. +So you can, say, setup a "friends_weight" value for every document, defaulting to 0, +then temporary override it with 1 for documents 123, 456 and 789 (recommended by +exactly the friends of current user), and use that value when ranking. + + + + +SetSelect +Prototype: function SetSelect ( $clause ) + +Sets the select clause, listing specific attributes to fetch, and expressions +to compute and fetch. Clause syntax mimics SQL. Introduced in version 0.9.9-rc1. + +SetSelect() is very similar to the part of a typical SQL query between SELECT and FROM. +It lets you choose what attributes (columns) to fetch, and also what expressions +over the columns to compute and fetch. A certain difference from SQL is that expressions +must always be aliased to a correct identifier (consisting of letters and digits) +using 'AS' keyword. SQL also lets you do that but does not require to. Sphinx enforces +aliases so that the computation results can always be returned under a "normal" name +in the result set, used in other clauses, etc. + + +Everything else is basically identical to SQL. Star ('*') is supported. +Functions are supported. Arbitrary amount of expressions is supported. +Computed expressions can be used for sorting, filtering, and grouping, +just as the regular attributes. + + +Starting with version 0.9.9-rc2, aggregate functions (AVG(), MIN(), +MAX(), SUM()) are supported when using GROUP BY. + + +Expression sorting () and geodistance functions +() are now internally implemented using +this computed expressions mechanism, using magic names '@expr' and '@geodist' +respectively. + +Example: + +$cl->SetSelect ( "*, @weight+(user_karma+ln(pageviews))*0.1 AS myweight" ); +$cl->SetSelect ( "exp_years, salary_gbp*{$gbp_usd_rate} AS salary_usd, + IF(age>40,1,0) AS over40" ); +$cl->SetSelect ( "*, AVG(price) AS avgprice" ); + + + + + +Full-text search query settings + + +SetMatchMode +Prototype: function SetMatchMode ( $mode ) + +Sets full-text query matching mode, as described in . +Parameter must be a constant specifying one of the known modes. + + +WARNING: (PHP specific) you must not take the matching mode +constant name in quotes, that syntax specifies a string and is incorrect: + +$cl->SetMatchMode ( "SPH_MATCH_ANY" ); // INCORRECT! will not work as expected +$cl->SetMatchMode ( SPH_MATCH_ANY ); // correct, works OK + + + + +SetRankingMode +Prototype: function SetRankingMode ( $ranker ) + +Sets ranking mode (aka ranker). Only available in SPH_MATCH_EXTENDED +matching mode. Parameter must be a constant specifying one of the known +rankers. + + +By default, in the EXTENDED matching mode Sphinx computes two factors +which contribute to the final match weight. The major part is a phrase +proximity value between the document text and the query. +The minor part is so-called BM25 statistical function, which varies +from 0 to 1 depending on the keyword frequency within document +(more occurrences yield higher weight) and within the whole index +(more rare keywords yield higher weight). + + +However, in some cases you'd want to compute weight differently - +or maybe avoid computing it at all for performance reasons because +you're sorting the result set by something else anyway. This can be +accomplished by setting the appropriate ranking mode. The list of +the modes is available in . + + + + +SetSortMode +Prototype: function SetSortMode ( $mode, $sortby="" ) + +Set matches sorting mode, as described in . +Parameter must be a constant specifying one of the known modes. + + +WARNING: (PHP specific) you must not take the matching mode +constant name in quotes, that syntax specifies a string and is incorrect: + +$cl->SetSortMode ( "SPH_SORT_ATTR_DESC" ); // INCORRECT! will not work as expected +$cl->SetSortMode ( SPH_SORT_ATTR_ASC ); // correct, works OK + + + + +SetWeights +Prototype: function SetWeights ( $weights ) + +Binds per-field weights in the order of appearance in the index. +DEPRECATED, use SetFieldWeights() instead. + + + +SetFieldWeights +Prototype: function SetFieldWeights ( $weights ) + +Binds per-field weights by name. Parameter must be a hash (associative array) +mapping string field names to integer weights. + + +Match ranking can be affected by per-field weights. For instance, +see for an explanation how phrase proximity +ranking is affected. This call lets you specify what non-default +weights to assign to different full-text fields. + + +The weights must be positive 32-bit integers. The final weight +will be a 32-bit integer too. Default weight value is 1. Unknown +field names will be silently ignored. + + +There is no enforced limit on the maximum weight value at the +moment. However, beware that if you set it too high you can start +hitting 32-bit wraparound issues. For instance, if you set +a weight of 10,000,000 and search in extended mode, then +maximum possible weight will be equal to 10 million (your weight) +by 1 thousand (internal BM25 scaling factor, see ) +by 1 or more (phrase proximity rank). The result is at least 10 billion +that does not fit in 32 bits and will be wrapped around, producing +unexpected results. + + + +SetIndexWeights +Prototype: function SetIndexWeights ( $weights ) + +Sets per-index weights, and enables weighted summing of match weights +across different indexes. Parameter must be a hash (associative array) +mapping string index names to integer weights. Default is empty array +that means to disable weighting summing. + + +When a match with the same document ID is found in several different +local indexes, by default Sphinx simply chooses the match from the index +specified last in the query. This is to support searching through +partially overlapping index partitions. + + +However in some cases the indexes are not just partitions, and you +might want to sum the weights across the indexes instead of picking one. +SetIndexWeights() lets you do that. With summing enabled, +final match weight in result set will be computed as a sum of match +weight coming from the given index multiplied by respective per-index +weight specified in this call. Ie. if the document 123 is found in +index A with the weight of 2, and also in index B with the weight of 3, +and you called SetIndexWeights ( array ( "A"=>100, "B"=>10 ) ), +the final weight return to the client will be 2*100+3*10 = 230. + + + + + +Result set filtering settings + + +SetIDRange +Prototype: function SetIDRange ( $min, $max ) + +Sets an accepted range of document IDs. Parameters must be integers. +Defaults are 0 and 0; that combination means to not limit by range. + + +After this call, only those records that have document ID +between $min and $max (including IDs +exactly equal to $min or $max) +will be matched. + + + +SetFilter +Prototype: function SetFilter ( $attribute, $values, $exclude=false ) + +Adds new integer values set filter. + + +On this call, additional new filter is added to the existing +list of filters. $attribute must be a string with +attribute name. $values must be a plain array +containing integer values. $exclude must be a boolean +value; it controls whether to accept the matching documents +(default mode, when $exclude is false) or reject them. + + +Only those documents where $attribute column value +stored in the index matches any of the values from $values +array will be matched (or rejected, if $exclude is true). + + + +SetFilterRange +Prototype: function SetFilterRange ( $attribute, $min, $max, $exclude=false ) + +Adds new integer range filter. + + +On this call, additional new filter is added to the existing +list of filters. $attribute must be a string with +attribute name. $min and $max must be +integers that define the acceptable attribute values range +(including the boundaries). $exclude must be a boolean +value; it controls whether to accept the matching documents +(default mode, when $exclude is false) or reject them. + + +Only those documents where $attribute column value +stored in the index is between $min and $max +(including values that are exactly equal to $min or $max) +will be matched (or rejected, if $exclude is true). + + + +SetFilterFloatRange +Prototype: function SetFilterFloatRange ( $attribute, $min, $max, $exclude=false ) + +Adds new float range filter. + + +On this call, additional new filter is added to the existing +list of filters. $attribute must be a string with +attribute name. $min and $max must be +floats that define the acceptable attribute values range +(including the boundaries). $exclude must be a boolean +value; it controls whether to accept the matching documents +(default mode, when $exclude is false) or reject them. + + +Only those documents where $attribute column value +stored in the index is between $min and $max +(including values that are exactly equal to $min or $max) +will be matched (or rejected, if $exclude is true). + + + +SetGeoAnchor +Prototype: function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long ) + +Sets anchor point for and geosphere distance (geodistance) calculations, and enable them. + + +$attrlat and $attrlong must be strings that contain the names +of latitude and longitude attributes, respectively. $lat and $long +are floats that specify anchor point latitude and longitude, in radians. + + +Once an anchor point is set, you can use magic "@geodist" attribute +name in your filters and/or sorting expressions. Sphinx will compute geosphere distance +between the given anchor point and a point specified by latitude and lognitude +attributes from each full-text match, and attach this value to the resulting match. +The latitude and longitude values both in SetGeoAnchor and the index +attribute data are expected to be in radians. The result will be returned in meters, +so geodistance value of 1000.0 means 1 km. 1 mile is approximately 1609.344 meters. + + + + + +GROUP BY settings + + +SetGroupBy +Prototype: function SetGroupBy ( $attribute, $func, $groupsort="@group desc" ) + +Sets grouping attribute, function, and groups sorting mode; and enables grouping +(as described in ). + + +$attribute is a string that contains group-by attribute name. +$func is a constant that chooses a function applied to the attribute value in order to compute group-by key. +$groupsort is a clause that controls how the groups will be sorted. Its syntax is similar +to that described in . + + +Grouping feature is very similar in nature to GROUP BY clause from SQL. +Results produces by this function call are going to be the same as produced +by the following pseudo code: + +SELECT ... GROUP BY $func($attribute) ORDER BY $groupsort + +Note that it's $groupsort that affects the order of matches +in the final result set. Sorting mode (see ) +affect the ordering of matches within group, ie. +what match will be selected as the best one from the group. +So you can for instance order the groups by matches count +and select the most relevant match within each group at the same time. + + +Starting with version 0.9.9-rc2, aggregate functions (AVG(), MIN(), +MAX(), SUM()) are supported through SetSelect() API call +when using GROUP BY. + + +Starting with version 2.0.1-beta, grouping on string attributes +is supported, with respect to current collation. + + + +SetGroupDistinct +Prototype: function SetGroupDistinct ( $attribute ) + +Sets attribute name for per-group distinct values count calculations. +Only available for grouping queries. + + +$attribute is a string that contains the attribute name. +For each group, all values of this attribute will be stored (as RAM limits +permit), then the amount of distinct values will be calculated and returned +to the client. This feature is similar to COUNT(DISTINCT) +clause in standard SQL; so these Sphinx calls: + +$cl->SetGroupBy ( "category", SPH_GROUPBY_ATTR, "@count desc" ); +$cl->SetGroupDistinct ( "vendor" ); + +can be expressed using the following SQL clauses: + +SELECT id, weight, all-attributes, + COUNT(DISTINCT vendor) AS @distinct, + COUNT(*) AS @count +FROM products +GROUP BY category +ORDER BY @count DESC + +In the sample pseudo code shown just above, SetGroupDistinct() call +corresponds to COUNT(DISINCT vendor) clause only. +GROUP BY, ORDER BY, and COUNT(*) +clauses are all an equivalent of SetGroupBy() settings. Both queries +will return one matching row for each category. In addition to indexed attributes, +matches will also contain total per-category matches count, and the count +of distinct vendor IDs within each category. + + + + + +Querying + + +Query +Prototype: function Query ( $query, $index="*", $comment="" ) + +Connects to searchd server, runs given search query +with current settings, obtains and returns the result set. + + +$query is a query string. $index is an index name (or names) string. +Returns false and sets GetLastError() message on general error. +Returns search result set on success. +Additionally, the contents of $comment are sent to the query log, marked in square brackets, just before the search terms, which can be very useful for debugging. + +Currently, the comment is limited to 128 characters. + + +Default value for $index is "*" that means +to query all local indexes. Characters allowed in index names include +Latin letters (a-z), numbers (0-9), minus sign (-), and underscore (_); +everything else is considered a separator. Therefore, all of the +following samples calls are valid and will search the same +two indexes: + +$cl->Query ( "test query", "main delta" ); +$cl->Query ( "test query", "main;delta" ); +$cl->Query ( "test query", "main, delta" ); + +Index specification order matters. If document with identical IDs are found +in two or more indexes, weight and attribute values from the very last matching +index will be used for sorting and returning to client (unless explicitly +overridden with SetIndexWeights()). Therefore, +in the example above, matches from "delta" index will always win over +matches from "main". + + +On success, Query() returns a result set that contains +some of the found matches (as requested by SetLimits()) +and additional general per-query statistics. The result set is a hash +(PHP specific; other languages might utilize other structures instead +of hash) with the following keys and values: + + + "matches": + Hash which maps found document IDs to another small hash containing document weight and attribute values + (or an array of the similar small hashes if SetArrayResult() was enabled). + + + + "total": + Total amount of matches retrieved on server (ie. to the server side result set) by this query. + You can retrieve up to this amount of matches from server for this query text with current query settings. + + + + "total_found": + Total amount of matching documents in index (that were found and procesed on server). + + + "words": + Hash which maps query keywords (case-folded, stemmed, and otherwise processed) to a small hash with per-keyword statitics ("docs", "hits"). + + + "error": + Query error message reported by searchd (string, human readable). Empty if there were no errors. + + + "warning": + Query warning message reported by searchd (string, human readable). Empty if there were no warnings. + + + + +It should be noted that Query() carries out the same actions as +AddQuery() and RunQueries() without the intermediate steps; +it is analoguous to a single AddQuery() call, followed by a corresponding +RunQueries(), then returning the first array element of matches +(from the first, and only, query.) + + + +AddQuery +Prototype: function AddQuery ( $query, $index="*", $comment="" ) + +Adds additional query with current settings to multi-query batch. +$query is a query string. $index is an index name (or names) string. +Additionally if provided, the contents of $comment are sent to the query log, +marked in square brackets, just before the search terms, which can be very useful for debugging. +Currently, this is limited to 128 characters. +Returns index to results array returned from RunQueries(). + + +Batch queries (or multi-queries) enable searchd to perform internal +optimizations if possible. They also reduce network connection overheads and search process +creation overheads in all cases. They do not result in any additional overheads compared +to simple queries. Thus, if you run several different queries from your web page, +you should always consider using multi-queries. + + +For instance, running the same full-text query but with different +sorting or group-by settings will enable searchd +to perform expensive full-text search and ranking operation only once, +but compute multiple group-by results from its output. + + +This can be a big saver when you need to display not just plain +search results but also some per-category counts, such as the amount of +products grouped by vendor. Without multi-query, you would have to run several +queries which perform essentially the same search and retrieve the +same matches, but create result sets differently. With multi-query, +you simply pass all these querys in a single batch and Sphinx +optimizes the redundant full-text search internally. + + +AddQuery() internally saves full current settings state +along with the query, and you can safely change them afterwards for subsequent +AddQuery() calls. Already added queries will not be affected; +there's actually no way to change them at all. Here's an example: + +$cl->SetSortMode ( SPH_SORT_RELEVANCE ); +$cl->AddQuery ( "hello world", "documents" ); + +$cl->SetSortMode ( SPH_SORT_ATTR_DESC, "price" ); +$cl->AddQuery ( "ipod", "products" ); + +$cl->AddQuery ( "harry potter", "books" ); + +$results = $cl->RunQueries (); + +With the code above, 1st query will search for "hello world" in "documents" index +and sort results by relevance, 2nd query will search for "ipod" in "products" +index and sort results by price, and 3rd query will search for "harry potter" +in "books" index while still sorting by price. Note that 2nd SetSortMode() call +does not affect the first query (because it's already added) but affects both other +subsequent queries. + + +Additionally, any filters set up before an AddQuery() will fall through to subsequent +queries. So, if SetFilter() is called before the first query, the same filter +will be in place for the second (and subsequent) queries batched through AddQuery() +unless you call ResetFilters() first. Alternatively, you can add additional filters +as well. +This would also be true for grouping options and sorting options; no current sorting, +filtering, and grouping settings are affected by this call; so subsequent queries will reuse +current query settings. + + +AddQuery() returns an index into an array of results +that will be returned from RunQueries() call. It is simply +a sequentially increasing 0-based integer, ie. first call will return 0, +second will return 1, and so on. Just a small helper so you won't have +to track the indexes manualy if you need then. + + + +RunQueries +Prototype: function RunQueries () + +Connect to searchd, runs a batch of all queries added using AddQuery(), +obtains and returns the result sets. Returns false and sets GetLastError() +message on general error (such as network I/O failure). Returns a plain array +of result sets on success. + + +Each result set in the returned array is exactly the same as +the result set returned from Query(). + + +Note that the batch query request itself almost always succeds - +unless there's a network error, blocking index rotation in progress, +or another general failure which prevents the whole request from being +processed. + + +However individual queries within the batch might very well fail. +In this case their respective result sets will contain non-empty "error" message, +but no matches or query statistics. In the extreme case all queries within the batch +could fail. There still will be no general error reported, because API was able to +succesfully connect to searchd, submit the batch, and receive +the results - but every result set will have a specific error message. + + + +ResetFilters +Prototype: function ResetFilters () + +Clears all currently set filters. + + +This call is only normally required when using multi-queries. You might want +to set different filters for different queries in the batch. To do that, +you should call ResetFilters() and add new filters using +the respective calls. + + + +ResetGroupBy +Prototype: function ResetGroupBy () + +Clears all currently group-by settings, and disables group-by. + + +This call is only normally required when using multi-queries. +You can change individual group-by settings using SetGroupBy() +and SetGroupDistinct() calls, but you can not disable +group-by using those calls. ResetGroupBy() +fully resets previous group-by settings and disables group-by mode +in the current state, so that subsequent AddQuery() +calls can perform non-grouping searches. + + + + + +Additional functionality + + +BuildExcerpts +Prototype: function BuildExcerpts ( $docs, $index, $words, $opts=array() ) + +Excerpts (snippets) builder function. Connects to searchd, +asks it to generate excerpts (snippets) from given documents, and returns the results. + + +$docs is a plain array of strings that carry the documents' contents. +$index is an index name string. Different settings (such as charset, +morphology, wordforms) from given index will be used. +$words is a string that contains the keywords to highlight. They will +be processed with respect to index settings. For instance, if English stemming +is enabled in the index, "shoes" will be highlighted even if keyword is "shoe". +Starting with version 0.9.9-rc1, keywords can contain wildcards, that work similarly to +star-syntax available in queries. +$opts is a hash which contains additional optional highlighting parameters: + + + "before_match": + A string to insert before a keyword match. Starting with version 1.10-beta, + a %PASSAGE_ID% macro can be used in this string. The macro is replaced with an incrementing + passage number within a current snippet. Numbering starts at 1 by default but can be + overridden with "start_passage_id" option. In a multi-document call, %PASSAGE_ID% would + restart at every given document. Default is "<b>". + + + "after_match": + A string to insert after a keyword match. Starting with version 1.10-beta, + a %PASSAGE_ID% macro can be used in this string. Default is "</b>". + + + "chunk_separator": + A string to insert between snippet chunks (passages). Default is " ... ". + + + "limit": + Maximum snippet size, in symbols (codepoints). Integer, default is 256. + + + "around": + How much words to pick around each matching keywords block. Integer, default is 5. + + + "exact_phrase": + Whether to highlight exact query phrase matches only instead of individual keywords. Boolean, default is false. + + + "single_passage": + Whether to extract single best passage only. Boolean, default is false. + + + "use_boundaries": + Whether to additionaly break passages by phrase + boundary characters, as configured in index settings with + phrase_boundary + directive. Boolean, default is false. + + + + "weight_order": + Whether to sort the extracted passages in order of relevance (decreasing weight), + or in order of appearance in the document (increasing position). Boolean, default is false. + + + "query_mode": + Added in version 1.10-beta. Whether to handle $words as a query in + extended syntax, or as a bag of words + (default behavior). For instance, in query mode ("one two" | "three four") will + only highlight and include those occurrences "one two" or "three four" when + the two words from each pair are adjacent to each other. In default mode, + any single occurrence of "one", "two", "three", or "four" would be + highlighted. Boolean, default is false. + + + + "force_all_words": + Added in version 1.10-beta. Ignores the snippet length limit until it + includes all the keywords. Boolean, default is false. + + + + "limit_passages": + Added in version 1.10-beta. Limits the maximum number of passages + that can be included into the snippet. Integer, default is 0 (no limit). + + + + "limit_words": + Added in version 1.10-beta. Limits the maximum number of keywords + that can be included into the snippet. Integer, default is 0 (no limit). + + + + "start_passage_id": + Added in version 1.10-beta. Specifies the starting value of + %PASSAGE_ID% macro (that gets detected and expanded in , + strings). Integer, default is 1. + + + + "load_files": + Added in version 1.10-beta. Whether to handle $docs as data + to extract snippets from (default behavior), or to treat it as file names, + and load data from specified files on the server side. Starting with + version 2.0.1-beta, up to dist_threads + worker threads per request will be created to parallelize the work + when this flag is enabled. Boolean, default is false. + + + + "html_strip_mode": + Added in version 1.10-beta. HTML stripping mode setting. + Defaults to "index", which means that index settings will be used. + The other values are "none" and "strip", that forcibly skip or apply + stripping irregardless of index settings; and "retain", that retains + HTML markup and protects it from highlighting. The "retain" mode can + only be used when highlighting full documents and thus requires that + no snippet size limits are set. String, allowed values are "none", + "strip", "index", and "retain". + + + + "allow_empty": + Added in version 1.10-beta. Allows empty string to be + returned as highlighting result when a snippet could not be generated + (no keywords match, or no passages fit the limit). By default, + the beginning of original text would be returned instead of an empty + string. Boolean, default is false. + + + + "passage_boundary": + Added in version 2.0.1-beta. Ensures that passages do not + cross a sentence, paragraph, or zone boundary (when used with an index + that has the respective indexing settings enabled). String, allowed + values are "sentence", "paragraph", and "zone". + + + + "emit_zones": + Added in version 2.0.1-beta. Emits an HTML tag with + an enclosing zone name before each passage. Boolean, default is false. + + + + + +Snippets extraction algorithm currently favors better passages +(with closer phrase matches), and then passages with keywords not +yet in snippet. Generally, it will try to highlight the best match +with the query, and it will also to highlight all the query keywords, +as made possible by the limtis. In case the document does not match +the query, beginning of the document trimmed down according to the +limits will be return by default. Starting with 1.10-beta, you can +also return an empty snippet instead case by setting "allow_empty" +option to true. + + +Returns false on failure. Returns a plain array of strings with excerpts (snippets) on success. + + + + +UpdateAttributes +Prototype: function UpdateAttributes ( $index, $attrs, $values ) + +Instantly updates given attribute values in given documents. +Returns number of actually updated documents (0 or more) on success, or -1 on failure. + + +$index is a name of the index (or indexes) to be updated. +$attrs is a plain array with string attribute names, listing attributes that are updated. +$values is a hash where key is document ID, and value is a plain array of new attribute values. + + +$index can be either a single index name or a list, like in Query(). +Unlike Query(), wildcard is not allowed and all the indexes +to update must be specified explicitly. The list of indexes can include +distributed index names. Updates on distributed indexes will be pushed +to all agents. + + +The updates only work with docinfo=extern storage strategy. +They are very fast because they're working fully in RAM, but they can also +be made persistent: updates are saved on disk on clean searchd +shutdown initiated by SIGTERM signal. With additional restrictions, updates +are also possible on MVA attributes; refer to mva_updates_pool +directive for details. + + +Usage example: + +$cl->UpdateAttributes ( "test1", array("group_id"), array(1=>array(456)) ); +$cl->UpdateAttributes ( "products", array ( "price", "amount_in_stock" ), + array ( 1001=>array(123,5), 1002=>array(37,11), 1003=>(25,129) ) ); + +The first sample statement will update document 1 in index "test1", setting "group_id" to 456. +The second one will update documents 1001, 1002 and 1003 in index "products". For document 1001, +the new price will be set to 123 and the new amount in stock to 5; for document 1002, the new price +will be 37 and the new amount will be 11; etc. + + + + +BuildKeywords +Prototype: function BuildKeywords ( $query, $index, $hits ) + +Extracts keywords from query using tokenizer settings for given index, optionally with per-keyword occurrence statistics. +Returns an array of hashes with per-keyword information. + + +$query is a query to extract keywords from. +$index is a name of the index to get tokenizing settings and keyword occurrence statistics from. +$hits is a boolean flag that indicates whether keyword occurrence statistics are required. + + +Usage example: + + +$keywords = $cl->BuildKeywords ( "this.is.my query", "test1", false ); + + + + +EscapeString +Prototype: function EscapeString ( $string ) + +Escapes characters that are treated as special operators by the query language parser. +Returns an escaped string. + + +$string is a string to escape. + + +This function might seem redundant because it's trivial to implement in any calling +application. However, as the set of special characters might change over time, it makes +sense to have an API call that is guaranteed to escape all such characters at all times. + + +Usage example: + + +$escaped = $cl->EscapeString ( "escaping-sample@query/string" ); + + + + +Status +Prototype: function Status () + +Queries searchd status, and returns an array of status variable name and value pairs. + + +Usage example: + + +$status = $cl->Status (); +foreach ( $status as $row ) + print join ( ": ", $row ) . "\n"; + + + + +FlushAttributes +Prototype: function FlushAttributes () + +Forces searchd to flush pending attribute updates +to disk, and blocks until completion. Returns a non-negative internal +"flush tag" on success. Returns -1 and sets an error message on error. +Introduced in version 1.10-beta. + + +Attribute values updated using UpdateAttributes() +API call are only kept in RAM until a so-called flush (which writes +the current, possibly updated attribute values back to disk). FlushAttributes() +call lets you enforce a flush. The call will block until searchd +finishes writing the data to disk, which might take seconds or even minutes +depending on the total data size (.spa file size). All the currently updated +indexes will be flushed. + + +Flush tag should be treated as an ever growing magic number that does not +mean anything. It's guaranteed to be non-negative. It is guaranteed to grow over +time, though not necessarily in a sequential fashion; for instance, two calls that +return 10 and then 1000 respectively are a valid situation. If two calls to +FlushAttrs() return the same tag, it means that there were no actual attribute +updates in between them, and therefore current flushed state remained the same +(for all indexes). + + +Usage example: + + +$status = $cl->FlushAttributes (); +if ( $status<0 ) + print "ERROR: " . $cl->GetLastError(); + + + + + + +Persistent connections + +Persistent connections allow to use single network connection to run +multiple commands that would otherwise require reconnects. + + +Open +Prototype: function Open () + +Opens persistent connection to the server. + + + +Close +Prototype: function Close () + +Closes previously opened persistent connection. + + + + + + +MySQL storage engine (SphinxSE) + + +SphinxSE overview + +SphinxSE is MySQL storage engine which can be compiled +into MySQL server 5.x using its pluggable architecure. +It is not available for MySQL 4.x series. It also requires +MySQL 5.0.22 or higher in 5.0.x series, or MySQL 5.1.12 +or higher in 5.1.x series. + + +Despite the name, SphinxSE does not +actually store any data itself. It is actually a built-in client +which allows MySQL server to talk to searchd, +run search queries, and obtain search results. All indexing and +searching happen outside MySQL. + + +Obvious SphinxSE applications include: + +easier porting of MySQL FTS applications to Sphinx; +allowing Sphinx use with progamming languages for which native APIs are not available yet; +optimizations when additional Sphinx result set processing on MySQL side is required + (eg. JOINs with original document tables, additional MySQL-side filtering, etc). + + + + + +Installing SphinxSE + +You will need to obtain a copy of MySQL sources, prepare those, +and then recompile MySQL binary. +MySQL sources (mysql-5.x.yy.tar.gz) could be obtained from +dev.mysql.com Web site. + + +For some MySQL versions, there are delta tarballs with already +prepared source versions available from Sphinx Web site. After unzipping +those over original sources MySQL would be ready to be configured and +built with Sphinx support. + + +If such tarball is not available, or does not work for you for any +reason, you would have to prepare sources manually. You will need to +GNU Autotools framework (autoconf, automake and libtool) installed +to do that. + + + +Compiling MySQL 5.0.x with SphinxSE + +Skips steps 1-3 if using already prepared delta tarball. + + +copy sphinx.5.0.yy.diff patch file +into MySQL sources directory and run + +patch -p1 < sphinx.5.0.yy.diff + +If there's no .diff file exactly for the specific version you need +to build, try applying .diff with closest version numbers. It is important +that the patch should apply with no rejects. + +in MySQL sources directory, run + +sh BUILD/autorun.sh + + +in MySQL sources directory, create sql/sphinx +directory in and copy all files in mysqlse directory +from Sphinx sources there. Example: + +cp -R /root/builds/sphinx-0.9.7/mysqlse /root/builds/mysql-5.0.24/sql/sphinx + + + +configure MySQL and enable Sphinx engine: + +./configure --with-sphinx-storage-engine + + + +build and install MySQL: + +make +make install + + + + + + +Compiling MySQL 5.1.x with SphinxSE + +Skip steps 1-2 if using already prepared delta tarball. + + +in MySQL sources directory, create storage/sphinx +directory in and copy all files in mysqlse directory +from Sphinx sources there. Example: + +cp -R /root/builds/sphinx-0.9.7/mysqlse /root/builds/mysql-5.1.14/storage/sphinx + + +in MySQL sources directory, run + +sh BUILD/autorun.sh + + + +configure MySQL and enable Sphinx engine: + +./configure --with-plugins=sphinx + + + +build and install MySQL: + +make +make install + + + + + + +Checking SphinxSE installation + +To check whether SphinxSE has been succesfully compiled +into MySQL, launch newly built servers, run mysql client and +issue SHOW ENGINES query. You should see a list +of all available engines. Sphinx should be present and "Support" +column should contain "YES": + + +mysql> show engines; ++------------+----------+-------------------------------------------------------------+ +| Engine | Support | Comment | ++------------+----------+-------------------------------------------------------------+ +| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | + ... +| SPHINX | YES | Sphinx storage engine | + ... ++------------+----------+-------------------------------------------------------------+ +13 rows in set (0.00 sec) + + + + + +Using SphinxSE + +To search via SphinxSE, you would need to create special ENGINE=SPHINX "search table", +and then SELECT from it with full text query put into WHERE clause for query column. + + +Let's begin with an example create statement and search query: + +CREATE TABLE t1 +( + id INTEGER UNSIGNED NOT NULL, + weight INTEGER NOT NULL, + query VARCHAR(3072) NOT NULL, + group_id INTEGER, + INDEX(query) +) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test"; + +SELECT * FROM t1 WHERE query='test it;mode=any'; + + + +First 3 columns of search table must have a types of +INTEGER UNSINGED or BIGINT for the 1st column (document id), +INTEGER or BIGINT for the 2nd column (match weight), and +VARCHAR or TEXT for the 3rd column (your query), respectively. +This mapping is fixed; you can not omit any of these three required columns, +or move them around, or change types. Also, query column must be indexed; +all the others must be kept unindexed. Columns' names are ignored so you +can use arbitrary ones. + + +Additional columns must be either INTEGER, TIMESTAMP, +BIGINT, VARCHAR, or FLOAT. +They will be bound to attributes provided in Sphinx result set by name, so their +names must match attribute names specified in sphinx.conf. +If there's no such attribute name in Sphinx search results, column will have +NULL values. + + +Special "virtual" attributes names can also be bound to SphinxSE columns. +_sph_ needs to be used instead of @ for that. +For instance, to obtain the values of @groupby, @count, +or @distinct virtual attributes, use _sph_groupby, +_sph_count or _sph_distinct column names, respectively. + + +CONNECTION string parameter can be used to specify default +searchd host, port and indexes for queries issued using this table. +If no connection string is specified in CREATE TABLE, +index name "*" (ie. search all indexes) and localhost:9312 are assumed. +Connection string syntax is as follows: + +CONNECTION="sphinx://HOST:PORT/INDEXNAME" + +You can change the default connection string later: + +ALTER TABLE t1 CONNECTION="sphinx://NEWHOST:NEWPORT/NEWINDEXNAME"; + +You can also override all these parameters per-query. + + +As seen in example, both query text and search options should be put +into WHERE clause on search query column (ie. 3rd column); the options +are separated by semicolons; and their names from values by equality sign. +Any number of options can be specified. Available options are: + +query - query text; +mode - matching mode. Must be one of "all", "any", "phrase", + "boolean", or "extended". Default is "all"; +sort - match sorting mode. Must be one of "relevance", "attr_desc", +"attr_asc", "time_segments", or "extended". In all modes besides "relevance" +attribute name (or sorting clause for "extended") is also required after a colon: + +... WHERE query='test;sort=attr_asc:group_id'; +... WHERE query='test;sort=extended:@weight desc, group_id asc'; + + +offset - offset into result set, default is 0; +limit - amount of matches to retrieve from result set, default is 20; +index - names of the indexes to search: + +... WHERE query='test;index=test1;'; +... WHERE query='test;index=test1,test2,test3;'; + + +minid, maxid - min and max document ID to match; +weights - comma-separated list of weights to be assigned to Sphinx full-text fields: + +... WHERE query='test;weights=1,2,3;'; + + +filter, !filter - comma-separated attribute name and a set of values to match: + +# only include groups 1, 5 and 19 +... WHERE query='test;filter=group_id,1,5,19;'; + +# exclude groups 3 and 11 +... WHERE query='test;!filter=group_id,3,11;'; + + +range, !range - comma-separated attribute name, min and max value to match: + +# include groups from 3 to 7, inclusive +... WHERE query='test;range=group_id,3,7;'; + +# exclude groups from 5 to 25 +... WHERE query='test;!range=group_id,5,25;'; + + +maxmatches - per-query max matches value, as in max_matches parameter to +SetLimits() API call: + +... WHERE query='test;maxmatches=2000;'; + + +cutoff - maximum allowed matches, as in cutoff parameter to +SetLimits() API call: + +... WHERE query='test;cutoff=10000;'; + + +maxquerytme - maximum allowed query time (in milliseconds), as in +SetMaxQueryTime() API call: + +... WHERE query='test;maxquerytime=1000;'; + + +groupby - group-by function and attribute, corresponding to +SetGroupBy() API call: + +... WHERE query='test;groupby=day:published_ts;'; +... WHERE query='test;groupby=attr:group_id;'; + + +groupsort - group-by sorting clause: + +... WHERE query='test;groupsort=@count desc;'; + + +distinct - an attribute to compute COUNT(DISTINCT) for when doing group-by, as in +SetGroupDistinct() API call: + +... WHERE query='test;groupby=attr:country_id;distinct=site_id'; + + +indexweights - comma-separated list of index names and weights +to use when searching through several indexes: + +... WHERE query='test;indexweights=idx_exact,2,idx_stemmed,1;'; + + +comment - a string to mark this query in query log +(mapping to $comment parameter in Query() API call): + +... WHERE query='test;comment=marker001;'; + + +select - a string with expressions to compute +(mapping to SetSelect() API call): + +... WHERE query='test;select=2*a+3*b as myexpr;'; + + +host, port - remote searchd host name +and TCP port, respectively: + +... WHERE query='test;host=sphinx-test.loc;port=7312;'; + + +ranker - a ranking function to use with "extended" matching mode, +as in SetRankingMode() API call +(the only mode that supports full query syntax). +Known values are "proximity_bm25", "bm25", "none", "wordcount", "proximity", +"matchany", and "fieldmask". + +... WHERE query='test;mode=extended;ranker=bm25;'; + + +geoanchor - geodistance anchor, as in +SetGeoAnchor() API call. +Takes 4 parameters which are latitude and longiture attribute names, +and anchor point coordinates respectively: + +... WHERE query='test;geoanchor=latattr,lonattr,0.123,0.456'; + + + + + +One very important note that it is +much more efficient to allow Sphinx +to perform sorting, filtering and slicing the result set than to raise +max matches count and use WHERE, ORDER BY and LIMIT clauses on MySQL +side. This is for two reasons. First, Sphinx does a number of +optimizations and performs better than MySQL on these tasks. +Second, less data would need to be packed by searchd, transferred +and unpacked by SphinxSE. + + +Starting with version 0.9.9-rc1, additional query info besides result set could be +retrieved with SHOW ENGINE SPHINX STATUS statement: + +mysql> SHOW ENGINE SPHINX STATUS; ++--------+-------+-------------------------------------------------+ +| Type | Name | Status | ++--------+-------+-------------------------------------------------+ +| SPHINX | stats | total: 25, total found: 25, time: 126, words: 2 | +| SPHINX | words | sphinx:591:1256 soft:11076:15945 | ++--------+-------+-------------------------------------------------+ +2 rows in set (0.00 sec) + +This information can also be accessed through status variables. Note +that this method does not require super-user privileges. + +mysql> SHOW STATUS LIKE 'sphinx_%'; ++--------------------+----------------------------------+ +| Variable_name | Value | ++--------------------+----------------------------------+ +| sphinx_total | 25 | +| sphinx_total_found | 25 | +| sphinx_time | 126 | +| sphinx_word_count | 2 | +| sphinx_words | sphinx:591:1256 soft:11076:15945 | ++--------------------+----------------------------------+ +5 rows in set (0.00 sec) + + + +You could perform JOINs on SphinxSE search table and tables using +other engines. Here's an example with "documents" from example.sql: + +mysql> SELECT content, date_added FROM test.documents docs +-> JOIN t1 ON (docs.id=t1.id) +-> WHERE query="one document;mode=any"; ++-------------------------------------+---------------------+ +| content | docdate | ++-------------------------------------+---------------------+ +| this is my test document number two | 2006-06-17 14:04:28 | +| this is my test document number one | 2006-06-17 14:04:28 | ++-------------------------------------+---------------------+ +2 rows in set (0.00 sec) + +mysql> SHOW ENGINE SPHINX STATUS; ++--------+-------+---------------------------------------------+ +| Type | Name | Status | ++--------+-------+---------------------------------------------+ +| SPHINX | stats | total: 2, total found: 2, time: 0, words: 2 | +| SPHINX | words | one:1:2 document:2:2 | ++--------+-------+---------------------------------------------+ +2 rows in set (0.00 sec) + + + + + +Building snippets (excerpts) via MySQL + +Starting with version 0.9.9-rc2, SphinxSE also includes a UDF function +that lets you create snippets through MySQL. The functionality is fully +similar to BuildExcerprts +API call but accesible through MySQL+SphinxSE. + + +The binary that provides the UDF is named sphinx.so +and should be automatically built and installed to proper location +along with SphinxSE itself. If it does not get installed automatically +for some reason, look for sphinx.so in the build +directory and copy it to the plugins directory of your MySQL instance. +After that, register the UDF using the following statement: + +CREATE FUNCTION sphinx_snippets RETURNS STRING SONAME 'sphinx.so'; + + + +Function name must be sphinx_snippets, +you can not use an arbitrary name. Function arguments are as follows: + + +Prototype: function sphinx_snippets ( document, index, words, [options] ); + + +Document and words arguments can be either strings or table columns. +Options must be specified like this: 'value' AS option_name. +For a list of supported options, refer to +BuildExcerprts() API call. +The only UDF-specific additional option is named 'sphinx' +and lets you specify searchd location (host and port). + + +Usage examples: + +SELECT sphinx_snippets('hello world doc', 'main', 'world', + 'sphinx://192.168.1.1/' AS sphinx, true AS exact_phrase, + '[b]' AS before_match, '[/b]' AS after_match) +FROM documents; + +SELECT title, sphinx_snippets(text, 'index', 'mysql php') AS text + FROM sphinx, documents + WHERE query='mysql php' AND sphinx.id=documents.id; + + + + + + +Reporting bugs + + + +Unfortunately, Sphinx is not yet 100% bug free (even though I'm working hard +towards that), so you might occasionally run into some issues. + + +Reporting as much as possible about each bug is very important - +because to fix it, I need to be able either to reproduce and debug the bug, +or to deduce what's causing it from the information that you provide. +So here are some instructions on how to do that. + + + +Build-time issues +If Sphinx fails to build for some reason, please do the following: + +check that headers and libraries for your DBMS are properly installed +(for instance, check that mysql-devel package is present); + +report Sphinx version and config file (be sure to remove the passwords!), +MySQL (or PostgreSQL) configuration info, gcc version, OS version and CPU type +(ie. x86, x86-64, PowerPC, etc): + +mysql_config +gcc --version +uname -a + + + +report the error message which is produced by configure +or gcc (it should be to include error message itself only, +not the whole build log). + + + + +Run-time issues + +If Sphinx builds and runs, but there are any problems running it, +please do the following: + + +describe the bug (ie. both the expected behavior and actual behavior) +and all the steps necessary to reproduce it; +include Sphinx version and config file (be sure to remove the passwords!), +MySQL (or PostgreSQL) version, gcc version, OS version and CPU type (ie. x86, x86-64, +PowerPC, etc): + +mysql --version +gcc --version +uname -a + + +build, install and run debug versions of all Sphinx programs (this is +to enable a lot of additional internal checks, so-called assertions): + +make distclean +./configure --with-debug +make install +killall -TERM searchd + + +reindex to check if any assertions are triggered (in this case, +it's likely that the index is corrupted and causing problems); + +if the bug does not reproduce with debug versions, +revert to non-debug and mention it in your report; + +if the bug could be easily reproduced with a small (1-100 record) +part of your database, please provide a gzipped dump of that part; + +if the problem is related to searchd, include +relevant entries from searchd.log and +query.log in your bug report; + +if the problem is related to searchd, try +running it in console mode and check if it dies with an assertion: + +./searchd --console + + +if any program dies with an assertion, provide the assertion message. + + + +Debugging assertions, crashes and hangups + +If any program dies with an assertion, crashes without an assertion or hangs up, +you would additionally need to generate a core dump and examine it. + + + +enable core dumps. On most Linux systems, this is done +using ulimit: + +ulimit -c 32768 + + + +run the program and try to reproduce the bug; + + +if the program crashes (either with or without an assertion), +find the core file in current directory (it should typically print +out "Segmentation fault (core dumped)" message); + + +if the program hangs, use kill -SEGV +from another console to force it to exit and dump core: + +kill -SEGV HANGED-PROCESS-ID + + + +use gdb to examine the core file +and obtain a backtrace: + +gdb ./CRASHED-PROGRAM-FILE-NAME CORE-DUMP-FILE-NAME +(gdb) bt +(gdb) quit + + + + +Note that HANGED-PROCESS-ID, CRASHED-PROGRAM-FILE-NAME and +CORE-DUMP-FILE-NAME must all be replaced with specific numbers +and file names. For example, hanged searchd debugging session +would look like: + +# kill -SEGV 12345 +# ls *core* +core.12345 +# gdb ./searchd core.12345 +(gdb) bt +... +(gdb) quit + + + +Note that ulimit is not server-wide +and only affects current shell session. This means that you will not +have to restore any server-wide limits - but if you relogin, +you will have to set ulimit again. + + +Core dumps should be placed in current working directory +(and Sphinx programs do not change it), so this is where you +would look for them. + + +Please do not immediately remove the core file because there could +be additional helpful information which could be retrieved from it. +You do not need to send me this file (as the debug info there is +closely tied to your system) but I might need to ask +you a few additional questions about it. + + + + +<filename>sphinx.conf</filename> options reference + + +Data source configuration options + + +type + +Data source type. +Mandatory, no default value. +Known types are , , , + and , and . + + +All other per-source options depend on source type selected by this option. +Names of the options used for SQL sources (ie. MySQL, PostgreSQL, MS SQL) start with "sql_"; +names of the ones used for xmlpipe and xmlpipe2 start with "xmlpipe_". +All source types except are conditional; they might or might +not be supported depending on your build settings, installed client libraries, etc. + type is currently only available on Windows. + type is available both on Windows natively and on +Linux through UnixODBC library. + +Example: + +type = mysql + + + + +sql_host + +SQL server host to connect to. +Mandatory, no default value. +Applies to SQL source types (, , ) only. + + +In the simplest case when Sphinx resides on the same host with your MySQL +or PostgreSQL installation, you would simply specify "localhost". Note that +MySQL client library chooses whether to connect over TCP/IP or over UNIX +socket based on the host name. Specifically "localhost" will force it +to use UNIX socket (this is the default and generally recommended mode) +and "127.0.0.1" will force TCP/IP usage. Refer to +MySQL manual +for more details. + +Example: + +sql_host = localhost + + + + +sql_port + +SQL server IP port to connect to. +Optional, default is 3306 for source type and 5432 for type. +Applies to SQL source types (, , ) only. +Note that it depends on sql_host setting whether this value will actually be used. + +Example: + +sql_port = 3306 + + + + +sql_user + +SQL user to use when connecting to sql_host. +Mandatory, no default value. +Applies to SQL source types (, , ) only. + +Example: + +sql_user = test + + + + +sql_pass + +SQL user password to use when connecting to sql_host. +Mandatory, no default value. +Applies to SQL source types (, , ) only. + +Example: + +sql_pass = mysecretpassword + + + + +sql_db + +SQL database (in MySQL terms) to use after the connection and perform further queries within. +Mandatory, no default value. +Applies to SQL source types (, , ) only. + +Example: + +sql_db = test + + + + +sql_sock + +UNIX socket name to connect to for local SQL servers. +Optional, default value is empty (use client library default settings). +Applies to SQL source types (, , ) only. + + +On Linux, it would typically be /var/lib/mysql/mysql.sock. +On FreeBSD, it would typically be /tmp/mysql.sock. +Note that it depends on sql_host setting whether this value will actually be used. + +Example: + +sql_sock = /tmp/mysql.sock + + + + +mysql_connect_flags + +MySQL client connection flags. +Optional, default value is 0 (do not set any flags). +Applies to source type only. + + +This option must contain an integer value with the sum of the flags. +The value will be passed to mysql_real_connect() verbatim. +The flags are enumerated in mysql_com.h include file. +Flags that are especially interesting in regard to indexing, with their respective values, are as follows: + +CLIENT_COMPRESS = 32; can use compression protocol +CLIENT_SSL = 2048; switch to SSL after handshake +CLIENT_SECURE_CONNECTION = 32768; new 4.1 authentication + +For instance, you can specify 2080 (2048+32) to use both compression and SSL, +or 32768 to use new authentication only. Initially, this option was introduced +to be able to use compression when the indexer +and mysqld are on different hosts. Compression on 1 Gbps +links is most likely to hurt indexing time though it reduces network traffic, +both in theory and in practice. However, enabling compression on 100 Mbps links +may improve indexing time significantly (upto 20-30% of the total indexing time +improvement was reported). Your mileage may vary. + +Example: + +mysql_connect_flags = 32 # enable compression + + + + +mysql_ssl_cert, mysql_ssl_key, mysql_ssl_ca + +SSL certificate settings to use for connecting to MySQL server. +Optional, default values are empty strings (do not use SSL). +Applies to source type only. + + +These directives let you set up secure SSL connection between +indexer and MySQL. The details on creating +the certificates and setting up MySQL server can be found in +MySQL documentation. + +Example: + +mysql_ssl_cert = /etc/ssl/client-cert.pem +mysql_ssl_key = /etc/ssl/client-key.pem +mysql_ssl_ca = /etc/ssl/cacert.pem + + + + +odbc_dsn + +ODBC DSN to connect to. +Mandatory, no default value. +Applies to source type only. + + +ODBC DSN (Data Source Name) specifies the credentials (host, user, password, etc) +to use when connecting to ODBC data source. The format depends on specific ODBC +driver used. + +Example: + +odbc_dsn = Driver={Oracle ODBC Driver};Dbq=myDBName;Uid=myUsername;Pwd=myPassword + + + + +sql_query_pre + +Pre-fetch query, or pre-query. +Multi-value, optional, default is empty list of queries. +Applies to SQL source types (, , ) only. + + +Multi-value means that you can specify several pre-queries. +They are executed before the main fetch query, +and they will be exectued exactly in order of appeareance in the configuration file. +Pre-query results are ignored. + + +Pre-queries are useful in a lot of ways. They are used to setup encoding, +mark records that are going to be indexed, update internal counters, +set various per-connection SQL server options and variables, and so on. + + +Perhaps the most frequent pre-query usage is to specify the encoding +that the server will use for the rows it returnes. It must match +the encoding that Sphinx expects (as specified by charset_type +and charset_table options). +Two MySQL specific examples of setting the encoding are: + +sql_query_pre = SET CHARACTER_SET_RESULTS=cp1251 +sql_query_pre = SET NAMES utf8 + +Also specific to MySQL sources, it is useful to disable query cache +(for indexer connection only) in pre-query, because indexing queries +are not going to be re-run frequently anyway, and there's no sense +in caching their results. That could be achieved with: + +sql_query_pre = SET SESSION query_cache_type=OFF + + +Example: + +sql_query_pre = SET NAMES utf8 +sql_query_pre = SET SESSION query_cache_type=OFF + + + + +sql_query + +Main document fetch query. +Mandatory, no default value. +Applies to SQL source types (, , ) only. + + +There can be only one main query. +This is the query which is used to retrieve documents from SQL server. +You can specify up to 32 full-text fields (formally, upto SPH_MAX_FIELDS from sphinx.h), and an arbitrary amount of attributes. +All of the columns that are neither document ID (the first one) nor attributes will be full-text indexed. + + +Document ID MUST be the very first field, +and it MUST BE UNIQUE UNSIGNED POSITIVE (NON-ZERO, NON-NEGATIVE) INTEGER NUMBER. +It can be either 32-bit or 64-bit, depending on how you built Sphinx; +by default it builds with 32-bit IDs support but option +to configure allows to build with 64-bit document and word IDs support. + + +Example: + +sql_query = \ + SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, \ + title, content \ + FROM documents + + + + +sql_joined_field + +Joined/payload field fetch query. +Multi-value, optional, default is empty list of queries. +Applies to SQL source types (, , ) only. + + + lets you use two different features: +joined fields, and payloads (payload fields). It's syntax is as follows: + +sql_joined_field = FIELD-NAME 'from' ( 'query' | 'payload-query' ); \ + QUERY [ ; RANGE-QUERY ] + +where + +FIELD-NAME is a joined/payload field name; +QUERY is an SQL query that must fetch values to index. +RANGE-QUERY is an optional SQL query that fetches a range +of values to index. (Added in version 2.0.1-beta.) + + + +Joined fields let you avoid JOIN and/or GROUP_CONCAT statements in the main +document fetch query (sql_query). This can be useful when SQL-side JOIN is slow, +or needs to be offloaded on Sphinx side, or simply to emulate MySQL-specific +GROUP_CONCAT funcionality in case your database server does not support it. + + +The query must return exactly 2 columns: document ID, and text to append +to a joined field. Document IDs can be duplicate, but they must be +in ascending order. All the text rows fetched for a given ID will be +concatented together, and the concatenation result will be indexed +as the entire contents of a joined field. Rows will be concatenated +in the order returned from the query, and separating whitespace +will be inserted between them. For instance, if joined field query +returns the following rows: + +( 1, 'red' ) +( 1, 'right' ) +( 1, 'hand' ) +( 2, 'mysql' ) +( 2, 'sphinx' ) + +then the indexing results would be equivalent to that of adding +a new text field with a value of 'red right hand' to document 1 and +'mysql sphinx' to document 2. + + +Joined fields are only indexed differently. There are no other differences +between joined fields and regular text fields. + + +Starting with 2.0.1-beta, ranged queries can be used when +a single query is not efficient enough or does not work because of +the database driver limitations. It works similar to the ranged +queries in the main indexing loop, see . +The range will be queried for and fetched upfront once, +then multiple queries with different $start +and $end substitutions will be run to fetch +the actual data. + + +Payloads let you create a special field in which, instead of +keyword positions, so-called user payloads are stored. Payloads are +custom integer values attached to every keyword. They can then be used +in search time to affect the ranking. + + +The payload query must return exactly 3 columns: document ID; keyword; +and integer payload value. Document IDs can be duplicate, but they must be +in ascending order. Payloads must be unsigned integers within 24-bit range, +ie. from 0 to 16777215. For reference, payloads are currently internally +stored as in-field keyword positions, but that is not guaranteed +and might change in the future. + + +Currently, the only method to account for payloads is to use +SPH_RANK_PROXIMITY_BM25 ranker. On indexes with payload fields, +it will automatically switch to a variant that matches keywords +in those fields, computes a sum of matched payloads multiplied +by field wieghts, and adds that sum to the final rank. + +Example: + +sql_joined_field = \ + tagstext from query; \ + SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC + + + + +sql_query_range + +Range query setup. +Optional, default is empty. +Applies to SQL source types (, , ) only. + + +Setting this option enables ranged document fetch queries (see ). +Ranged queries are useful to avoid notorious MyISAM table locks when indexing +lots of data. (They also help with other less notorious issues, such as reduced +performance caused by big result sets, or additional resources consumed by InnoDB +to serialize big read transactions.) + + +The query specified in this option must fetch min and max document IDs that will be +used as range boundaries. It must return exactly two integer fields, min ID first +and max ID second; the field names are ignored. + + +When ranged queries are enabled, sql_query +will be required to contain and macros +(because it obviously would be a mistake to index the whole table many times over). +Note that the intervals specified by .. +will not overlap, so you should not remove document IDs that are +exactly equal to or from your query. +The example in ) illustrates that; note how it +uses greater-or-equal and less-or-equal comparisons. + +Example: + +sql_query_range = SELECT MIN(id),MAX(id) FROM documents + + + + +sql_range_step + +Range query step. +Optional, default is 1024. +Applies to SQL source types (, , ) only. + + +Only used when ranged queries are enabled. +The full document IDs interval fetched by sql_query_range +will be walked in this big steps. For example, if min and max IDs fetched +are 12 and 3456 respectively, and the step is 1000, indexer will call +sql_query several times with the +following substitutions: + +$start=12, $end=1011 +$start=1012, $end=2011 +$start=2012, $end=3011 +$start=3012, $end=3456 + + +Example: + +sql_range_step = 1000 + + + + +sql_query_killlist + +Kill-list query. +Optional, default is empty (no query). +Applies to SQL source types (, , ) only. +Introduced in version 0.9.9-rc1. + + +This query is expected to return a number of 1-column rows, each containing +just the document ID. The returned document IDs are stored within an index. +Kill-list for a given index suppresses results from other +indexes, depending on index order in the query. The intended use is to help +implement deletions and updates on existing indexes without rebuilding +(actually even touching them), and especially to fight phantom results +problem. + + +Let us dissect an example. Assume we have two indexes, 'main' and 'delta'. +Assume that documents 2, 3, and 5 were deleted since last reindex of 'main', +and documents 7 and 11 were updated (ie. their text contents were changed). +Assume that a keyword 'test' occurred in all these mentioned documents +when we were indexing 'main'; still occurs in document 7 as we index 'delta'; +but does not occur in document 11 any more. We now reindex delta and then +search through both these indexes in proper (least to most recent) order: + +$res = $cl->Query ( "test", "main delta" ); + + + +First, we need to properly handle deletions. The result set should not +contain documents 2, 3, or 5. Second, we also need to avoid phantom results. +Unless we do something about it, document 11 will +appear in search results! It will be found in 'main' (but not 'delta'). +And it will make it to the final result set unless something stops it. + + +Kill-list, or K-list for short, is that something. Kill-list attached +to 'delta' will suppress the specified rows from all the preceding +indexes, in this case just 'main'. So to get the expected results, +we should put all the updated and deleted +document IDs into it. + +Example: + +sql_query_killlist = \ + SELECT id FROM documents WHERE updated_ts>=@last_reindex UNION \ + SELECT id FROM documents_deleted WHERE deleted_ts>=@last_reindex + + + + +sql_attr_uint + +Unsigned integer attribute declaration. +Multi-value (there might be multiple attributes declared), optional. +Applies to SQL source types (, , ) only. + + +The column value should fit into 32-bit unsigned integer range. +Values outside this range will be accepted but wrapped around. +For instance, -1 will be wrapped around to 2^32-1 or 4,294,967,295. + + +You can specify bit count for integer attributes by appending +':BITCOUNT' to attribute name (see example below). Attributes with +less than default 32-bit size, or bitfields, perform slower. +But they require less RAM when using extern storage: +such bitfields are packed together in 32-bit chunks in .spa +attribute data file. Bit size settings are ignored if using +inline storage. + +Example: + +sql_attr_uint = group_id +sql_attr_uint = forum_id:9 # 9 bits for forum_id + + + + +sql_attr_bool + +Boolean attribute declaration. +Multi-value (there might be multiple attributes declared), optional. +Applies to SQL source types (, , ) only. +Equivalent to sql_attr_uint declaration with a bit count of 1. + +Example: + +sql_attr_bool = is_deleted # will be packed to 1 bit + + + + +sql_attr_bigint + +64-bit signed integer attribute declaration. +Multi-value (there might be multiple attributes declared), optional. +Applies to SQL source types (, , ) only. +Note that unlike sql_attr_uint, +these values are signed. +Introduced in version 0.9.9-rc1. + +Example: + +sql_attr_bigint = my_bigint_id + + + + +sql_attr_timestamp + +UNIX timestamp attribute declaration. +Multi-value (there might be multiple attributes declared), optional. +Applies to SQL source types (, , ) only. + + +Timestamps can store date and time in the range of Jan 01, 1970 +to Jan 19, 2038 with a precision of one second. +The expected column value should be a timestamp in UNIX format, ie. 32-bit unsigned +integer number of seconds elapsed since midnight, January 01, 1970, GMT. +Timestamps are internally stored and handled as integers everywhere. +But in addition to working with timestamps as integers, it's also legal +to use them along with different date-based functions, such as time segments +sorting mode, or day/week/month/year extraction for GROUP BY. + + +Note that DATE or DATETIME column types in MySQL can not be directly +used as timestamp attributes in Sphinx; you need to explicitly convert such +columns using UNIX_TIMESTAMP function (if data is in range). + + +Note timestamps can not represent dates before January 01, 1970, +and UNIX_TIMESTAMP() in MySQL will not return anything expected. +If you only needs to work with dates, not times, consider TO_DAYS() +function in MySQL instead. + +Example: + +sql_attr_timestamp = UNIX_TIMESTAMP(added_datetime) AS added_ts + + + + +sql_attr_str2ordinal + +Ordinal string number attribute declaration. +Multi-value (there might be multiple attributes declared), optional. +Applies to SQL source types (, , ) only. + + +This attribute type (so-called ordinal, for brevity) is intended +to allow sorting by string values, but without storing the strings +themselves. When indexing ordinals, string values are fetched from +database, temporarily stored, sorted, and then replaced by their +respective ordinal numbers in the array of sorted strings. +So, the ordinal number is an integer such that sorting by it +produces the same result as if lexicographically sorting by original strings. +by string values lexicographically. + + +Earlier versions could consume a lot of RAM for indexing ordinals. +Starting with revision r1112, ordinals accumulation and sorting +also runs in fixed memory (at the cost of using additional temporary +disk space), and honors +mem_limit settings. + + +Ideally the strings should be sorted differently, depending +on the encoding and locale. For instance, if the strings are known +to be Russian text in KOI8R encoding, sorting the bytes 0xE0, 0xE1, +and 0xE2 should produce 0xE1, 0xE2 and 0xE0, because in KOI8R +value 0xE0 encodes a character that is (noticeably) after +characters encoded by 0xE1 and 0xE2. Unfortunately, Sphinx +does not support that at the moment and will simply sort +the strings bytewise. + + +Note that the ordinals are by construction local to each index, +and it's therefore impossible to merge ordinals while retaining +the proper order. The processed strings are replaced by their +sequential number in the index they occurred in, but different +indexes have different sets of strings. For instance, if 'main' index +contains strings "aaa", "bbb", "ccc", and so on up to "zzz", +they'll be assigned numbers 1, 2, 3, and so on up to 26, +respectively. But then if 'delta' only contains "zzz" the assigned +number will be 1. And after the merge, the order will be broken. +Unfortunately, this is impossible to workaround without storing +the original strings (and once Sphinx supports storing the +original strings, ordinals will not be necessary any more). + +Example: + +sql_attr_str2ordinal = author_name + + + + +sql_attr_float + +Floating point attribute declaration. +Multi-value (there might be multiple attributes declared), optional. +Applies to SQL source types (, , ) only. + + +The values will be stored in single precision, 32-bit IEEE 754 format. +Represented range is approximately from 1e-38 to 1e+38. The amount +of decimal digits that can be stored precisely is approximately 7. +One important usage of the float attributes is storing latitude +and longitude values (in radians), for further usage in query-time +geosphere distance calculations. + +Example: + +sql_attr_float = lat_radians +sql_attr_float = long_radians + + + + +sql_attr_multi + +Multi-valued attribute (MVA) declaration. +Multi-value (ie. there may be more than one such attribute declared), optional. +Applies to SQL source types (, , ) only. + + +Plain attributes only allow to attach 1 value per each document. +However, there are cases (such as tags or categories) when it is +desired to attach multiple values of the same attribute and be able +to apply filtering or grouping to value lists. + + +The declaration format is as follows (backslashes are for clarity only; +everything can be declared in a single line as well): + +sql_attr_multi = ATTR-TYPE ATTR-NAME 'from' SOURCE-TYPE \ + [;QUERY] \ + [;RANGE-QUERY] + +where + +ATTR-TYPE is 'uint' or 'timestamp' +SOURCE-TYPE is 'field', 'query', or 'ranged-query' +QUERY is SQL query used to fetch all ( docid, attrvalue ) pairs +RANGE-QUERY is SQL query used to fetch min and max ID values, similar to 'sql_query_range' + + +Example: + +sql_attr_multi = uint tag from query; SELECT id, tag FROM tags +sql_attr_multi = uint tag from ranged-query; \ + SELECT id, tag FROM tags WHERE id>=$start AND id<=$end; \ + SELECT MIN(id), MAX(id) FROM tags + + + + +sql_attr_string + +String attribute declaration. +Multi-value (ie. there may be more than one such attribute declared), optional. +Applies to SQL source types (, , ) only. +Introduced in version 1.10-beta. + + +String attributes can store arbitrary strings attached to every document. +There's a fixed size limit of 4 MB per value. Also, searchd +will currently cache all the values in RAM, which is an additional implicit limit. + + +As of 1.10-beta, strings can only be used for storage and retrieval. +They can not participate in expressions, be used for filtering, sorting, +or grouping (ie. in WHERE, ORDER or GROUP clauses). Note that attributes +declared using will not be full-text +indexed; you can use sql_field_string +directive for that. + +Example: + +sql_attr_string = title # will be stored but will not be indexed + + + + +sql_attr_str2wordcount + +Word-count attribute declaration. +Multi-value (ie. there may be more than one such attribute declared), optional. +Applies to SQL source types (, , ) only. +Introduced in version 1.10-beta. + + +Word-count attribute takes a string column, tokenizes it according +to index settings, and stores the resulting number of tokens in an attribute. +This number of tokens ("word count") is a normal integer that can be later +used, for instance, in custom ranking expressions (boost shorter titles, +help identify exact field matches, etc). + +Example: + +sql_attr_str2wordcount = title_wc + + + + +sql_column_buffers + +Per-column buffer sizes. +Optional, default is empty (deduce the sizes automatically). +Applies to , source types only. +Introduced in version 2.0.1-beta. + + +ODBC and MS SQL drivers sometimes can not return the maximum +actual column size to be expected. For instance, NVARCHAR(MAX) columns +always report their length as 2147483647 bytes to +indexer even though the actually used length +is likely considerably less. However, the receiving buffers still +need to be allocated upfront, and their sizes have to be determined. +When the driver does not report the column length at all, Sphinx +allocates default 1 KB buffers for each non-char column, and 1 MB +buffers for each char column. Driver-reported column length +also gets clamped by an upper limie of 8 MB, so in case the +driver reports (almost) a 2 GB column length, it will be clamped +and a 8 MB buffer will be allocated instead for that column. +These hard-coded limits can be overridden using the +sql_column_buffers directive, either in order +to save memory on actually shorter columns, or overcome +the 8 MB limit on actually longer columns. The directive values +must be a comma-separated lists of selected column names and sizes: + +sql_column_buffers = <colname>=<size>[K|M] [, ...] + + +Example: + +sql_query = SELECT id, mytitle, mycontent FROM documents +sql_column_buffers = mytitle=64K, mycontent=10M + + + + + +sql_field_string + +Combined string attribute and full-text field declaration. +Multi-value (ie. there may be more than one such attribute declared), optional. +Applies to SQL source types (, , ) only. +Introduced in version 1.10-beta. + + +sql_attr_string only stores the column +value but does not full-text index it. In some cases it might be desired to both full-text +index the column and store it as attribute. lets you do +exactly that. Both the field and the attribute will be named the same. + +Example: + +sql_field_string = title # will be both indexed and stored + + + + +sql_field_str2wordcount + +Combined word-count attribute and full-text field declaration. +Multi-value (ie. there may be more than one such attribute declared), optional. +Applies to SQL source types (, , ) only. +Introduced in version 1.10-beta. + +sql_attr_str2wordcount only stores the column +word count but does not full-text index it. In some cases it might be desired to both full-text +index the column and also have the count. lets you do +exactly that. Both the field and the attribute will be named the same. +Example: + +sql_field_str2wordcount = title # will be indexed, and counted/stored + + + + +sql_file_field + +File based field declaration. +Applies to SQL source types (, , ) only. +Introduced in version 1.10-beta. + + +This directive makes indexer interpret field contents +as a file name, and load and index the referred file. Files larger than +max_file_field_buffer +in size are skipped. Any errors during the file loading (IO errors, missed +limits, etc) will be reported as indexing warnings and will not early +terminate the indexing. No content will be indexed for such files. + +Example: + +sql_file_field = my_file_path # load and index files referred to by my_file_path + + + + +sql_query_post + +Post-fetch query. +Optional, default value is empty. +Applies to SQL source types (, , ) only. + + +This query is executed immediately after sql_query +completes successfully. When post-fetch query produces errors, +they are reported as warnings, but indexing is not terminated. +It's result set is ignored. Note that indexing is not yet completed +at the point when this query gets executed, and further indexing still may fail. +Therefore, any permanent updates should not be done from here. +For instance, updates on helper table that permanently change +the last successfully indexed ID should not be run from post-fetch +query; they should be run from post-index query instead. + +Example: + +sql_query_post = DROP TABLE my_tmp_table + + + + +sql_query_post_index + +Post-index query. +Optional, default value is empty. +Applies to SQL source types (, , ) only. + + +This query is executed when indexing is fully and succesfully completed. +If this query produces errors, they are reported as warnings, +but indexing is not terminated. It's result set is ignored. +$maxid macro can be used in its text; it will be +expanded to maximum document ID which was actually fetched +from the database during indexing. If no documents were indexed, +$maxid will be expanded to 0. + +Example: + +sql_query_post_index = REPLACE INTO counters ( id, val ) \ + VALUES ( 'max_indexed_id', $maxid ) + + + + +sql_ranged_throttle + +Ranged query throttling period, in milliseconds. +Optional, default is 0 (no throttling). +Applies to SQL source types (, , ) only. + + +Throttling can be useful when indexer imposes too much load on the +database server. It causes the indexer to sleep for given amount of +milliseconds once per each ranged query step. This sleep is unconditional, +and is performed before the fetch query. + +Example: + +sql_ranged_throttle = 1000 # sleep for 1 sec before each query step + + + + +sql_query_info + +Document info query. +Optional, default is empty. +Applies to source type only. + + +Only used by CLI search to fetch and display document information, +only works with MySQL at the moment, and only intended for debugging purposes. +This query fetches the row that will be displayed by CLI search utility +for each document ID. It is required to contain $id macro +that expands to the queried document ID. + +Example: + +sql_query_info = SELECT * FROM documents WHERE id=$id + + + + +xmlpipe_command + +Shell command that invokes xmlpipe stream producer. +Mandatory. +Applies to and source types only. + + +Specifies a command that will be executed and which output +will be parsed for documents. Refer to +or for specific format description. + +Example: + +xmlpipe_command = cat /home/sphinx/test.xml + + + + +xmlpipe_field + +xmlpipe field declaration. +Multi-value, optional. +Applies to source type only. Refer to . + +Example: + +xmlpipe_field = subject +xmlpipe_field = content + + + + +xmlpipe_field_string + +xmlpipe field and string attribute declaration. +Multi-value, optional. +Applies to source type only. Refer to . +Introduced in version 1.10-beta. + + +Makes the specified XML element indexed as both a full-text field and a string attribute. +Equivalent to ]]> declaration within the XML file. + +Example: + +xmlpipe_field_string = subject + + + + +xmlpipe_field_wordcount + +xmlpipe field and word count attribute declaration. +Multi-value, optional. +Applies to source type only. Refer to . +Introduced in version 1.10-beta. + + +Makes the specified XML element indexed as both a full-text field and a word count attribute. +Equivalent to ]]> declaration within the XML file. + +Example: + +xmlpipe_field_wordcount = subject + + + + +xmlpipe_attr_uint + +xmlpipe integer attribute declaration. +Multi-value, optional. +Applies to source type only. +Syntax fully matches that of sql_attr_uint. + +Example: + +xmlpipe_attr_uint = author + + + + +xmlpipe_attr_bool + +xmlpipe boolean attribute declaration. +Multi-value, optional. +Applies to source type only. +Syntax fully matches that of sql_attr_bool. + +Example: + +xmlpipe_attr_bool = is_deleted # will be packed to 1 bit + + + + +xmlpipe_attr_timestamp + +xmlpipe UNIX timestamp attribute declaration. +Multi-value, optional. +Applies to source type only. +Syntax fully matches that of sql_attr_timestamp. + +Example: + +xmlpipe_attr_timestamp = published + + + + +xmlpipe_attr_str2ordinal + +xmlpipe string ordinal attribute declaration. +Multi-value, optional. +Applies to source type only. +Syntax fully matches that of sql_attr_str2ordinal. + +Example: + +xmlpipe_attr_str2ordinal = author_sort + + + + +xmlpipe_attr_float + +xmlpipe floating point attribute declaration. +Multi-value, optional. +Applies to source type only. +Syntax fully matches that of sql_attr_float. + +Example: + +xmlpipe_attr_float = lat_radians +xmlpipe_attr_float = long_radians + + + + +xmlpipe_attr_multi + +xmlpipe MVA attribute declaration. +Multi-value, optional. +Applies to source type only. + + +This setting declares an MVA attribute tag in xmlpipe2 stream. +The contents of the specified tag will be parsed and a list of integers +that will constitute the MVA will be extracted, similar to how +sql_attr_multi parses +SQL column contents when 'field' MVA source type is specified. + +Example: + +xmlpipe_attr_multi = taglist + + + + +xmlpipe_attr_string + +xmlpipe string declaration. +Multi-value, optional. +Applies to source type only. +Introduced in version 1.10-beta. + + +This setting declares a string attribute tag in xmlpipe2 stream. +The contents of the specified tag will be parsed and stored as a string value. + +Example: + +xmlpipe_attr_string = subject + + + + +xmlpipe_fixup_utf8 + +Perform Sphinx-side UTF-8 validation and filtering to prevent XML parser from choking on non-UTF-8 documents. +Optional, default is 0. +Applies to source type only. + + +Under certain occasions it might be hard or even impossible to guarantee +that the incoming XMLpipe2 document bodies are in perfectly valid and +conforming UTF-8 encoding. For instance, documents with national +single-byte encodings could sneak into the stream. libexpat XML parser +is fragile, meaning that it will stop processing in such cases. +UTF8 fixup feature lets you avoid that. When fixup is enabled, +Sphinx will preprocess the incoming stream before passing it to the +XML parser and replace invalid UTF-8 sequences with spaces. + +Example: + +xmlpipe_fixup_utf8 = 1 + + + + +mssql_winauth + +MS SQL Windows authentication flag. +Boolean, optional, default value is 0 (false). +Applies to source type only. +Introduced in version 0.9.9-rc1. + + +Whether to use currently logged in Windows account credentials for +authentication when connecting to MS SQL Server. Note that when running +searchd as a service, account user can differ +from the account you used to install the service. + +Example: + +mssql_winauth = 1 + + + + +mssql_unicode + +MS SQL encoding type flag. +Boolean, optional, default value is 0 (false). +Applies to source type only. +Introduced in version 0.9.9-rc1. + + +Whether to ask for Unicode or single-byte data when querying MS SQL Server. +This flag must be in sync with charset_type directive; +that is, to index Unicode data, you must set both in the index +(to 'utf-8') and in the source (to 1). +For reference, MS SQL will actually return data in UCS-2 encoding instead of UTF-8, +but Sphinx will automatically handle that. + +Example: + +mssql_unicode = 1 + + + + +unpack_zlib + +Columns to unpack using zlib (aka deflate, aka gunzip). +Multi-value, optional, default value is empty list of columns. +Applies to SQL source types (, , ) only. +Introduced in version 0.9.9-rc1. + + +Columns specified using this directive will be unpacked by indexer +using standard zlib algorithm (called deflate and also implemented by gunzip). +When indexing on a different box than the database, this lets you offload the database, and save on network traffic. +The feature is only available if zlib and zlib-devel were both available during build time. + +Example: + +unpack_zlib = col1 +unpack_zlib = col2 + + + + +unpack_mysqlcompress + +Columns to unpack using MySQL UNCOMPRESS() algorithm. +Multi-value, optional, default value is empty list of columns. +Applies to SQL source types (, , ) only. +Introduced in version 0.9.9-rc1. + + +Columns specified using this directive will be unpacked by indexer +using modified zlib algorithm used by MySQL COMPRESS() and UNCOMPRESS() functions. +When indexing on a different box than the database, this lets you offload the database, and save on network traffic. +The feature is only available if zlib and zlib-devel were both available during build time. + +Example: + +unpack_mysqlcompress = body_compressed +unpack_mysqlcompress = description_compressed + + + + +unpack_mysqlcompress_maxsize + +Buffer size for UNCOMPRESS()ed data. +Optional, default value is 16M. +Introduced in version 0.9.9-rc1. + + +When using unpack_mysqlcompress, +due to implementation intrincacies it is not possible to deduce the required buffer size +from the compressed data. So the buffer must be preallocated in advance, and unpacked +data can not go over the buffer size. This option lets you control the buffer size, +both to limit indexer memory use, and to enable unpacking +of really long data fields if necessary. + +Example: + +unpack_mysqlcompress_maxsize = 1M + + + + + +Index configuration options + + +type + +Index type. +Known values are 'plain', 'distributed', and 'rt'. +Optional, default is 'plain' (plain local index). + + +Sphinx supports several different types of indexes. +Versions 0.9.x supported two index types: plain local indexes +that are stored and processed on the local machine; and distributed indexes, +that involve not only local searching but querying remote searchd +instances over the network as well (see ). +Version 1.10-beta also adds support +for so-called real-time indexes (or RT indexes for short) that +are also stored and processed locally, but additionally allow +for on-the-fly updates of the full-text index (see ). +Note that attributes can be updated on-the-fly using +either plain local indexes or RT ones. + + +Index type setting lets you choose the needed type. +By default, plain local index type will be assumed. + +Example: + +type = distributed + + + + +source + +Adds document source to local index. +Multi-value, mandatory. + + +Specifies document source to get documents from when the current +index is indexed. There must be at least one source. There may be multiple +sources, without any restrictions on the source types: ie. you can pull +part of the data from MySQL server, part from PostgreSQL, part from +the filesystem using xmlpipe2 wrapper. + + +However, there are some restrictions on the source data. First, +document IDs must be globally unique across all sources. If that +condition is not met, you might get unexpected search results. +Second, source schemas must be the same in order to be stored +within the same index. + + +No source ID is stored automatically. Therefore, in order to be able +to tell what source the matched document came from, you will need to +store some additional information yourself. Two typical approaches +include: + +mangling document ID and encoding source ID in it: + +source src1 +{ + sql_query = SELECT id*10+1, ... FROM table1 + ... +} + +source src2 +{ + sql_query = SELECT id*10+2, ... FROM table2 + ... +} + + + +storing source ID simply as an attribute: + +source src1 +{ + sql_query = SELECT id, 1 AS source_id FROM table1 + sql_attr_uint = source_id + ... +} + +source src2 +{ + sql_query = SELECT id, 2 AS source_id FROM table2 + sql_attr_uint = source_id + ... +} + + + + +Example: + +source = srcpart1 +source = srcpart2 +source = srcpart3 + + + + +path + +Index files path and file name (without extension). +Mandatory. + + +Path specifies both directory and file name, but without extension. +indexer will append different extensions +to this path when generating final names for both permanent and +temporary index files. Permanent data files have several different +extensions starting with '.sp'; temporary files' extensions +start with '.tmp'. It's safe to remove .tmp* +files is if indexer fails to remove them automatically. + + +For reference, different index files store the following data: + +.spa stores document attributes (used in extern docinfo storage mode only); +.spd stores matching document ID lists for each word ID; +.sph stores index header information; +.spi stores word lists (word IDs and pointers to .spd file); +.spk stores kill-lists; +.spm stores MVA data; +.spp stores hit (aka posting, aka word occurence) lists for each word ID; +.sps stores string attribute data. + + +Example: + +path = /var/data/test1 + + + + +docinfo + +Document attribute values (docinfo) storage mode. +Optional, default is 'extern'. +Known values are 'none', 'extern' and 'inline'. + + +Docinfo storage mode defines how exactly docinfo will be +physically stored on disk and RAM. "none" means that there will be +no docinfo at all (ie. no attributes). Normally you need not to set +"none" explicitly because Sphinx will automatically select "none" +when there are no attributes configured. "inline" means that the +docinfo will be stored in the .spd file, +along with the document ID lists. "extern" means that the docinfo +will be stored separately (externally) from document ID lists, +in a special .spa file. + + +Basically, externally stored docinfo must be kept in RAM when querying. +for performance reasons. So in some cases "inline" might be the only option. +However, such cases are infrequent, and docinfo defaults to "extern". +Refer to for in-depth discussion +and RAM usage estimates. + +Example: + +docinfo = inline + + + + +mlock + +Memory locking for cached data. +Optional, default is 0 (do not call mlock()). + + +For search performance, searchd preloads +a copy of .spa and .spi +files in RAM, and keeps that copy in RAM at all times. But if there +are no searches on the index for some time, there are no accesses +to that cached copy, and OS might decide to swap it out to disk. +First queries to such "cooled down" index will cause swap-in +and their latency will suffer. + + +Setting mlock option to 1 makes Sphinx lock physical RAM used +for that cached data using mlock(2) system call, and that prevents +swapping (see man 2 mlock for details). mlock(2) is a privileged call, +so it will require searchd to be either run +from root account, or be granted enough privileges otherwise. +If mlock() fails, a warning is emitted, but index continues +working. + +Example: + +mlock = 1 + + + + +morphology + +A list of morphology preprocessors to apply. +Optional, default is empty (do not apply any preprocessor). + + +Morphology preprocessors can be applied to the words being +indexed to replace different forms of the same word with the base, +normalized form. For instance, English stemmer will normalize +both "dogs" and "dog" to "dog", making search results for +both searches the same. + + +Built-in preprocessors include English stemmer, Russian stemmer +(that supports UTF-8 and Windows-1251 encodings), Soundex, +and Metaphone. The latter two replace the words with special +phonetic codes that are equal is words are phonetically close. +Additional stemmers provided by Snowball +project libstemmer library +can be enabled at compile time using configure option. +Built-in English and Russian stemmers should be faster than their +libstemmer counterparts, but can produce slightly different results, +because they are based on an older version. Metaphone implementation +is based on Double Metaphone algorithm and indexes the primary code. + + +Built-in values that are available for use in +option are as follows: + +none - do not perform any morphology processing; +stem_en - apply Porter's English stemmer; +stem_ru - apply Porter's Russian stemmer; +stem_enru - apply Porter's English and Russian stemmers; +stem_cz - apply Czech stemmer; +soundex - replace keywords with their SOUNDEX code; +metaphone - replace keywords with their METAPHONE code. + +Additional values provided by libstemmer are in 'libstemmer_XXX' format, +where XXX is libstemmer algorithm codename (refer to +libstemmer_c/libstemmer/modules.txt for a complete list). + + +Several stemmers can be specified (comma-separated). They will be applied +to incoming words in the order they are listed, and the processing will stop +once one of the stemmers actually modifies the word. +Also when wordforms feature is enabled +the word will be looked up in word forms dictionary first, and if there is +a matching entry in the dictionary, stemmers will not be applied at all. +Or in other words, wordforms can be +used to implement stemming exceptions. + +Example: + +morphology = stem_en, libstemmer_sv + + + + +dict + +The keywords dictionary type. +Known values are 'crc' and 'keywords'. +Optional, default is 'crc'. +Introduced in version 2.0.1-beta. + + +The default dictionary type in Sphinx, and the only one available +until version 2.0.1-beta, is a so-called CRC dictionary which never +stores the original keyword text in the index. Instead, keywords are +replaced with their control sum value (either CRC32 or FNV64, depending +whether Sphinx was built with ) both +when searching and indexing, and that value is used internally +in the index. + + +That approach has two drawbacks. First, in CRC32 case there is +a chance of control sum collision between several pairs of different +keywords, growing quadratically with the number of unique keywords +in the index. (FNV64 case is unaffected in practice, as a chance +of a single FNV64 collision in a dictionary of 1 billion entries +is approximately 1:16, or 6.25 percent. And most dictionaries +will be much more compact that a billion keywords, as a typical +spoken human language has in the region of 1 to 10 million word +forms.) Second, and more importantly, substring searches are not +directly possible with control sums. Sphinx alleviated that by +pre-indexing all the possible substrings as separate keywords +(see , +directives). That actually has an added benefit of matching +substrings in the quickest way possible. But at the same time +pre-indexing all substrings grows the index size a lot (factors +of 3-10x and even more would not be unusual) and impacts the +indexing time respectively, rendering substring searches +on big indexes rather impractical. + + +Keywords dictionary, introduced in 2.0.1-beta, fixes both these +drawbacks. It stores the keywords in the index and performs +search-time wildcard expansion. For example, a search for a +'test*' prefix could internally expand to 'test|tests|testing' +query based on the dictionary contents. That expansion is fully +transparent to the application, except that the separate +per-keyword statistics for all the actually matched keywords +would now also be reported. + + +Indexing with keywords dictionary should be 1.1x to 1.3x slower +compared to regular, non-substring indexing - but times faster +compared to substring indexing (either prefix or infix). Index size +should only be slightly bigger that than of the regular non-substring +index, with a 1..10% percent total difference +Regular keyword searching time must be very close or identical across +all three discussed index kinds (CRC non-substring, CRC substring, +keywords). Substring searching time can vary greatly depending +on how many actual keywords match the given substring (in other +words, into how many keywords does the search term expand). +The maximum number of keywords matched is restricted by the +expansion_limit +directive. + + +Essentially, keywords and CRC dictionaries represent the two +different trade-off substring searching decisions. You can choose +to either sacrifice indexing time and index size in favor of +top-speed worst-case searches (CRC dictionary), or only slightly +impact indexing time but sacrifice worst-case searching time when +the prefix expands into very many keywords (keywords dictionary). + +Example: + +dict = keywords + + + + +index_sp + +Whether to detect and index sentence and paragraph boundaries. +Optional, default is 0 (do not detect and index). +Introduced in version 2.0.1-beta. + + +This directive enables sentence and paragraph boundary indexing. +It's required for the SENTENCE and PARAGRAPH operators to work. +Sentence boundary detection is based on plain text analysis, so you +only need to set index_sp = 1 to enable it. Paragraph +detection is however based on HTML markup, and happens in the +HTML stripper. +So to index paragraph locations you also need to enable the stripper +by specifying html_strip = 1. Both types of boundaries +are detected based on a few built-in rules enumerated just below. + + +Sentence boundary detection rules are as follows. + +Question and excalamation signs (? and !) are always a sentence boundary. +Trailing dot (.) is a sentence boundary, except: + + When followed by a letter. That's considered a part of an abbreviation (as in "S.T.A.L.K.E.R" or "Goldman Sachs S.p.A."). + When followed by a comma. That's considered an abbreviation followed by a comma (as in "Telecom Italia S.p.A., founded in 1994"). + When followed by a space and a small letter. That's considered an abbreviation within a sentence (as in "News Corp. announced in Februrary"). + When preceded by a space and a capital letter, and followed by a space. That's considered a middle initial (as in "John D. Doe"). + + + + + +Paragraph boundaries are inserted at every block-level HTML tag. +Namely, those are (as taken from HTML 4 standard) ADDRESS, BLOCKQUOTE, +CAPTION, CENTER, DD, DIV, DL, DT, H1, H2, H3, H4, H5, LI, MENU, OL, P, +PRE, TABLE, TBODY, TD, TFOOT, TH, THEAD, TR, and UL. + + +Both sentences and paragraphs increment the keyword position counter by 1. + +Example: + +index_sp = 1 + + + + +index_zones + +A list of in-field HTML/XML zones to index. +Optional, default is empty (do not index zones). +Introduced in version 2.0.1-beta. + + +Zones can be formally defined as follows. Everything between +an opening and a matching closing tag is called a span, and +the aggregate of all spans corresponding sharing the same +tag name is called a zone. For instance, everything between +the occurrences of <H1> and </H1> in the document +field belongs to H1 zone. + + +Zone indexing, enabled by index_zones directive, +is an optional extension of the HTML stripper. So it will also +require that the stripper +is enabled (with html_strip = 1). The value of the +index_zones should be a comma-separated list of +those tag names and wildcards (ending with a star) that should +be indexed as zones. + + +Zones can nest and overlap arbitrarily. The only requirement +is that every opening tag has a matching tag. You can also have +an arbitrary number of both zones (as in unique zone names, +such as H1) and spans (all the occurrences of those H1 tags) +in a document. +Once indexed, zones can then be used for matching with +the ZONE operator, see . + +Example: + +index_zones = h*, th, title + + + + +min_stemming_len + +Minimum word length at which to enable stemming. +Optional, default is 1 (stem everything). +Introduced in version 0.9.9-rc1. + + +Stemmers are not perfect, and might sometimes produce undesired results. +For instance, running "gps" keyword through Porter stemmer for English +results in "gp", which is not really the intent. +feature lets you suppress stemming based on the source word length, +ie. to avoid stemming too short words. Keywords that are shorter than +the given threshold will not be stemmed. Note that keywords that are +exactly as long as specified will be stemmed. So in order to avoid +stemming 3-character keywords, you should specify 4 for the value. +For more finely grained control, refer to wordforms feature. + +Example: + +min_stemming_len = 4 + + + + +stopwords + +Stopword files list (space separated). +Optional, default is empty. + + +Stopwords are the words that will not be indexed. Typically you'd +put most frequent words in the stopwords list because they do not add +much value to search results but consume a lot of resources to process. + + +You can specify several file names, separated by spaces. All the files +will be loaded. Stopwords file format is simple plain text. The encoding +must match index encoding specified in charset_type. +File data will be tokenized with respect to charset_table +settings, so you can use the same separators as in the indexed data. +The stemmers will also be +applied when parsing stopwords file. + + +While stopwords are not indexed, they still do affect the keyword positions. +For instance, assume that "the" is a stopword, that document 1 contains the line +"in office", and that document 2 contains "in the office". Searching for "in office" +as for exact phrase will only return the first document, as expected, even though +"the" in the second one is stopped. + +Example: + +stopwords = /usr/local/sphinx/data/stopwords.txt +stopwords = stopwords-ru.txt stopwords-en.txt + + + + +wordforms + +Word forms dictionary. +Optional, default is empty. + + +Word forms are applied after tokenizing the incoming text +by charset_table rules. +They essentialy let you replace one word with another. Normally, +that would be used to bring different word forms to a single +normal form (eg. to normalize all the variants such as "walks", +"walked", "walking" to the normal form "walk"). It can also be used +to implement stemming exceptions, because stemming is not applied +to words found in the forms list. + + +Dictionaries are used to normalize incoming words both during indexing +and searching. Therefore, to pick up changes in wordforms file +it's required to reindex and restart searchd. + + +Word forms support in Sphinx is designed to support big dictionaries well. +They moderately affect indexing speed: for instance, a dictionary with 1 million +entries slows down indexing about 1.5 times. Searching speed is not affected at all. +Additional RAM impact is roughly equal to the dictionary file size, +and dictionaries are shared across indexes: ie. if the very same 50 MB wordforms +file is specified for 10 different indexes, additional searchd +RAM usage will be about 50 MB. + + +Dictionary file should be in a simple plain text format. Each line +should contain source and destination word forms, in exactly the same +encoding as specified in charset_type, +separated by "greater" sign. Rules from the +charset_table will be +applied when the file is loaded. So basically it's as case sensitive +as your other full-text indexed data, ie. typically case insensitive. +Here's the file contents sample: + +walks > walk +walked > walk +walking > walk + + + +There is a bundled spelldump utility that +helps you create a dictionary file in the format Sphinx can read +from source .dict and .aff +dictionary files in ispell or MySpell +format (as bundled with OpenOffice). + + +Starting with version 0.9.9-rc1, you can map several source words +to a single destination word. Because the work happens on tokens, +not the source text, differences in whitespace and markup are ignored. + +core 2 duo > c2d +e6600 > c2d +core 2duo > c2d + + + +Notice however that the destination wordforms +are still always interpreted as a single keyword! +Having a mapping like "St John > Saint John" will result in not +matching "St John" when searching for "Saint" or "John", because the +destination keyword will be "Saint John" with a space character in it +(and it's barely possible to input a destination keyword with a space). + +Example: + +wordforms = /usr/local/sphinx/data/wordforms.txt + + + + +exceptions + +Tokenizing exceptions file. +Optional, default is empty. + + +Exceptions allow to map one or more tokens (including tokens with +characters that would normally be excluded) to a single keyword. +They are similar to wordforms +in that they also perform mapping, but have a number of important +differences. + + +Short summary of the differences is as follows: + +exceptions are case sensitive, wordforms are not; +exceptions allow to detect sequences of tokens, wordforms work with single words only; +exceptions can use special characters that are not in charset_table, wordforms fully obey charset_table; +exceptions can underperform on huge dictionaries, wordforms handle millions of entries well. + + + +The expected file format is also plain text, with one line per exception, +and the line format is as follows: + +map-from-tokens => map-to-token + +Example file: + +AT & T => AT&T +AT&T => AT&T +Standarten Fuehrer => standartenfuhrer +Standarten Fuhrer => standartenfuhrer +MS Windows => ms windows +Microsoft Windows => ms windows +C++ => cplusplus +c++ => cplusplus +C plus plus => cplusplus + +All tokens here are case sensitive: they will not be processed by +charset_table rules. Thus, with +the example exceptions file above, "At&t" text will be tokenized as two +keywords "at" and "t", because of lowercase letters. On the other hand, +"AT&T" will match exactly and produce single "AT&T" keyword. + + +Note that this map-to keyword is a) always interpereted +as a single word, and b) is both case and space +sensitive! In our sample, "ms windows" query will not +match the document with "MS Windows" text. The query will be interpreted +as a query for two keywords, "ms" and "windows". And what "MS Windows" +gets mapped to is a single keyword "ms windows", +with a space in the middle. On the other hand, "standartenfuhrer" +will retrieve documents with "Standarten Fuhrer" or "Standarten Fuehrer" +contents (capitalized exactly like this), or any capitalization variant +of the keyword itself, eg. "staNdarTenfUhreR". (It won't catch +"standarten fuhrer", however: this text does not match any of the +listed exceptions because of case sensitivity, and gets indexed +as two separate keywords.) + + +Whitespace in the map-from tokens list matters, but its amount does not. +Any amount of the whitespace in the map-form list will match any other amount +of whitespace in the indexed document or query. For instance, "AT & T" +map-from token will match "AT    &  T" text, +whatever the amount of space in both map-from part and the indexed text. +Such text will therefore be indexed as a special "AT&T" keyword, +thanks to the very first entry from the sample. + + +Exceptions also allow to capture special characters (that are exceptions +from general charset_table rules; +hence the name). Assume that you generally do not want to treat '+' +as a valid character, but still want to be able search for some exceptions +from this rule such as 'C++'. The sample above will do just that, totally +independent of what characters are in the table and what are not. + + +Exceptions are applied to raw incoming document and query data +during indexing and searching respectively. Therefore, to pick up +changes in the file it's required to reindex and restart +searchd. + +Example: + +exceptions = /usr/local/sphinx/data/exceptions.txt + + + + +min_word_len + +Minimum indexed word length. +Optional, default is 1 (index everything). + + +Only those words that are not shorter than this minimum will be indexed. +For instance, if min_word_len is 4, then 'the' won't be indexed, but 'they' will be. + +Example: + +min_word_len = 4 + + + + +charset_type + +Character set encoding type. +Optional, default is 'sbcs'. +Known values are 'sbcs' and 'utf-8'. + + +Different encodings have different methods for mapping their internal +characters codes into specific byte sequences. Two most common methods +in use today are single-byte encoding and UTF-8. Their corresponding +charset_type values are 'sbcs' (stands for Single Byte Character Set) +and 'utf-8'. The selected encoding type will be used everywhere where +the index is used: when indexing the data, when parsing the query +against this index, when generating snippets, etc. + + +Note that while 'utf-8' implies that the decoded values must be treated +as Unicode codepoint numbers, there's a family of 'sbcs' encodings that +may in turn treat different byte values differently, and that should be +properly reflected in your charset_table settings. +For example, the same byte value of 224 (0xE0 hex) maps to different Russian letters +depending on whether koi-8r or windows-1251 encoding is used. + +Example: + +charset_type = utf-8 + + + + +charset_table + +Accepted characters table, with case folding rules. +Optional, default value depends on charset_type value. + + +charset_table is the main workhorse of Sphinx tokenizing process, +ie. the process of extracting keywords from document text or query txet. +It controls what characters are accepted as valid and what are not, +and how the accepted characters should be transformed (eg. should +the case be removed or not). + + +You can think of charset_table as of a big table that has a mapping +for each and every of 100K+ characters in Unicode (or as of a small +256-character table if you're using SBCS). By default, every character +maps to 0, which means that it does not occur within keywords and +should be treated as a separator. Once mentioned in the table, +character is mapped to some other character (most frequently, +either to itself or to a lowercase letter), and is treated +as a valid keyword part. + + +The expected value format is a commas-separated list of mappings. +Two simplest mappings simply declare a character as valid, and map +a single character to another single character, respectively. +But specifying the whole table in such form would result +in bloated and barely manageable specifications. So there are +several syntax shortcuts that let you map ranges of characters +at once. The complete list is as follows: + + + A->a + Single char mapping, declares source char 'A' as allowed + to occur within keywords and maps it to destination char 'a' + (but does not declare 'a' as allowed). + + + + A..Z->a..z + Range mapping, declares all chars in source range + as allowed and maps them to the destination range. Does not + declare destination range as allowed. Also checks ranges' lengths + (the lengths must be equal). + + + + a + Stray char mapping, declares a character as allowed + and maps it to itself. Equivalent to a->a single char mapping. + + + + a..z + Stray range mapping, declares all characters in range + as allowed and maps them to themselves. Equivalent to + a..z->a..z range mapping. + + + + A..Z/2 + Checkerboard range map. Maps every pair of chars + to the second char. More formally, declares odd characters + in range as allowed and maps them to the even ones; also + declares even characters as allowed and maps them to themselves. + For instance, A..Z/2 is equivalent to A->B, B->B, C->D, D->D, + ..., Y->Z, Z->Z. This mapping shortcut is helpful for + a number of Unicode blocks where uppercase and lowercase + letters go in such interleaved order instead of contiguous + chunks. + + + + + +Control characters with codes from 0 to 31 are always treated as separators. +Characters with codes 32 to 127, ie. 7-bit ASCII characters, can be used +in the mappings as is. To avoid configuration file encoding issues, +8-bit ASCII characters and Unicode characters must be specified in U+xxx form, +where 'xxx' is hexadecimal codepoint number. This form can also be used +for 7-bit ASCII characters to encode special ones: eg. use U+20 to +encode space, U+2E to encode dot, U+2C to encode comma. + +Example: + +# 'sbcs' defaults for English and Russian +charset_table = 0..9, A..Z->a..z, _, a..z, \ + U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF + +# 'utf-8' defaults for English and Russian +charset_table = 0..9, A..Z->a..z, _, a..z, \ + U+410..U+42F->U+430..U+44F, U+430..U+44F + + + + +ignore_chars + +Ignored characters list. +Optional, default is empty. + + +Useful in the cases when some characters, such as soft hyphenation mark (U+00AD), +should be not just treated as separators but rather fully ignored. +For example, if '-' is simply not in the charset_table, +"abc-def" text will be indexed as "abc" and "def" keywords. +On the contrary, if '-' is added to ignore_chars list, the same +text will be indexed as a single "abcdef" keyword. + + +The syntax is the same as for charset_table, +but it's only allowed to declare characters, and not allowed to map them. Also, +the ignored characters must not be present in charset_table. + +Example: + +ignore_chars = U+AD + + + + +min_prefix_len + +Minimum word prefix length to index. +Optional, default is 0 (do not index prefixes). + + +Prefix indexing allows to implement wildcard searching by 'wordstart*' wildcards +(refer to enable_star option for details on wildcard syntax). +When mininum prefix length is set to a positive number, indexer will index +all the possible keyword prefixes (ie. word beginnings) in addition to the keywords +themselves. Too short prefixes (below the minimum allowed length) will not +be indexed. + + +For instance, indexing a keyword "example" with min_prefix_len=3 +will result in indexing "exa", "exam", "examp", "exampl" prefixes along +with the word itself. Searches against such index for "exam" will match +documents that contain "example" word, even if they do not contain "exam" +on itself. However, indexing prefixes will make the index grow significantly +(because of many more indexed keywords), and will degrade both indexing +and searching times. + + +There's no automatic way to rank perfect word matches higher +in a prefix index, but there's a number of tricks to achieve that. +First, you can setup two indexes, one with prefix indexing and one +without it, search through both, and use SetIndexWeights() +call to combine weights. Second, you can enable star-syntax and rewrite +your extended-mode queries: + +# in sphinx.conf +enable_star = 1 + +// in query +$cl->Query ( "( keyword | keyword* ) other keywords" ); + + +Example: + +min_prefix_len = 3 + + + + +min_infix_len + +Minimum infix prefix length to index. +Optional, default is 0 (do not index infixes). + + +Infix indexing allows to implement wildcard searching by 'start*', '*end', and '*middle*' wildcards +(refer to enable_star option for details on wildcard syntax). +When mininum infix length is set to a positive number, indexer will index all the possible keyword infixes +(ie. substrings) in addition to the keywords themselves. Too short infixes +(below the minimum allowed length) will not be indexed. For instance, +indexing a keyword "test" with min_infix_len=2 will result in indexing +"te", "es", "st", "tes", "est" infixes along with the word itself. +Searches against such index for "es" will match documents that contain +"test" word, even if they do not contain "es" on itself. However, +indexing infixes will make the index grow significantly (because of +many more indexed keywords), and will degrade both indexing and +searching times. + +There's no automatic way to rank perfect word matches higher +in an infix index, but the same tricks as with prefix indexes +can be applied. + +Example: + +min_infix_len = 3 + + + + +prefix_fields + +The list of full-text fields to limit prefix indexing to. +Optional, default is empty (index all fields in prefix mode). + + +Because prefix indexing impacts both indexing and searching performance, +it might be desired to limit it to specific full-text fields only: +for instance, to provide prefix searching through URLs, but not through +page contents. prefix_fields specifies what fields will be prefix-indexed; +all other fields will be indexed in normal mode. The value format is a +comma-separated list of field names. + +Example: + +prefix_fields = url, domain + + + + +infix_fields + +The list of full-text fields to limit infix indexing to. +Optional, default is empty (index all fields in infix mode). + + +Similar to prefix_fields, +but lets you limit infix-indexing to given fields. + +Example: + +infix_fields = url, domain + + + + +enable_star + +Enables star-syntax (or wildcard syntax) when searching through prefix/infix indexes. +Optional, default is is 0 (do not use wildcard syntax), for compatibility with 0.9.7. +Known values are 0 and 1. + + +This feature enables "star-syntax", or wildcard syntax, when searching +through indexes which were created with prefix or infix indexing enabled. +It only affects searching; so it can be changed without reindexing +by simply restarting searchd. + + +The default value is 0, that means to disable star-syntax +and treat all keywords as prefixes or infixes respectively, +depending on indexing-time min_prefix_len +and min_infix_len settings. +The value of 1 means that star ('*') can be used at the start +and/or the end of the keyword. The star will match zero or more characters. + + +For example, assume that the index was built with infixes and +that enable_star is 1. Searching should work as follows: + +"abcdef" query will match only those documents that contain the exact "abcdef" word in them. +"abc*" query will match those documents that contain +any words starting with "abc" (including the documents which +contain the exact "abc" word only); +"*cde*" query will match those documents that contain +any words which have "cde" characters in any part of the word +(including the documents which contain the exact "cde" word only). +"*def" query will match those documents that contain +any words ending with "def" (including the documents that +contain the exact "def" word only). + + +Example: + +enable_star = 1 + + + + +ngram_len + +N-gram lengths for N-gram indexing. +Optional, default is 0 (disable n-gram indexing). +Known values are 0 and 1 (other lengths to be implemented). + + +N-grams provide basic CJK (Chinese, Japanese, Korean) support for +unsegmented texts. The issue with CJK searching is that there could be no +clear separators between the words. Ideally, the texts would be filtered +through a special program called segmenter that would insert separators +in proper locations. However, segmenters are slow and error prone, +and it's common to index contiguous groups of N characters, or n-grams, +instead. + + +When this feature is enabled, streams of CJK characters are indexed +as N-grams. For example, if incoming text is "ABCDEF" (where A to F represent +some CJK characters) and length is 1, in will be indexed as if +it was "A B C D E F". (With length equal to 2, it would produce "AB BC CD DE EF"; +but only 1 is supported at the moment.) Only those characters that are +listed in ngram_chars table +will be split this way; other ones will not be affected. + + +Note that if search query is segmented, ie. there are separators between +individual words, then wrapping the words in quotes and using extended mode +will resut in proper matches being found even if the text was not +segmented. For instance, assume that the original query is BC DEF. +After wrapping in quotes on the application side, it should look +like "BC" "DEF" (with quotes). This query +will be passed to Sphinx and internally split into 1-grams too, +resulting in "B C" "D E F" query, still with +quotes that are the phrase matching operator. And it will match +the text even though there were no separators in the text. + + +Even if the search query is not segmented, Sphinx should still produce +good results, thanks to phrase based ranking: it will pull closer phrase +matches (which in case of N-gram CJK words can mean closer multi-character +word matches) to the top. + +Example: + +ngram_len = 1 + + + + +ngram_chars + +N-gram characters list. +Optional, default is empty. + + +To be used in conjunction with in ngram_len, +this list defines characters, sequences of which are subject to N-gram extraction. +Words comprised of other characters will not be affected by N-gram indexing +feature. The value format is identical to charset_table. + +Example: + +ngram_chars = U+3000..U+2FA1F + + + + +phrase_boundary + +Phrase boundary characters list. +Optional, default is empty. + + +This list controls what characters will be treated as phrase boundaries, +in order to adjust word positions and enable phrase-level search +emulation through proximity search. The syntax is similar +to charset_table. +Mappings are not allowed and the boundary characters must not +overlap with anything else. + + +On phrase boundary, additional word position increment (specified by +phrase_boundary_step) +will be added to current word position. This enables phrase-level +searching through proximity queries: words in different phrases +will be guaranteed to be more than phrase_boundary_step distance +away from each other; so proximity search within that distance +will be equivalent to phrase-level search. + + +Phrase boundary condition will be raised if and only if such character +is followed by a separator; this is to avoid abbreviations such as +S.T.A.L.K.E.R or URLs being treated as several phrases. + +Example: + +phrase_boundary = ., ?, !, U+2026 # horizontal ellipsis + + + + +phrase_boundary_step + +Phrase boundary word position increment. +Optional, default is 0. + + +On phrase boundary, current word position will be additionally incremented +by this number. See phrase_boundary for details. + +Example: + +phrase_boundary_step = 100 + + + + +html_strip + +Whether to strip HTML markup from incoming full-text data. +Optional, default is 0. +Known values are 0 (disable stripping) and 1 (enable stripping). + + +Both HTML tags and entities and considered markup and get processed. + +HTML tags are removed, their contents (i.e., everything between +<P> and </P>) are left intact by default. You can choose +to keep and index attributes of the tags (e.g., HREF attribute in +an A tag, or ALT in an IMG one). Several well-known inline tags are +completely removed, all other tags are treated as block level and +replaced with whitespace. For example, 'te<B>st</B>' +text will be indexed as a single keyword 'test', however, +'te<P>st</P>' will be indexed as two keywords +'te' and 'st'. Known inline tags are as follows: A, B, I, S, U, BASEFONT, +BIG, EM, FONT, IMG, LABEL, SMALL, SPAN, STRIKE, STRONG, SUB, SUP, TT. + + +HTML entities get decoded and replaced with corresponding UTF-8 +characters. Stripper supports both numeric forms (such as &#239;) +and text forms (such as &oacute; or &nbsp;). All entities +as specified by HTML4 standard are supported. + + +Stripping does not work with source type +(it's suggested to upgrade to xmlpipe2 anyway). It should work with +properly formed HTML and XHTML, but, just as most browsers, may produce +unexpected results on malformed input (such as HTML with stray <'s +or unclosed >'s). + + +Only the tags themselves, and also HTML comments, are stripped. +To strip the contents of the tags too (eg. to strip embedded scripts), +see html_remove_elements option. +There are no restrictions on tag names; ie. everything +that looks like a valid tag start, or end, or a comment +will be stripped. + +Example: + +html_strip = 1 + + + + +html_index_attrs + +A list of markup attributes to index when stripping HTML. +Optional, default is empty (do not index markup attributes). + + +Specifies HTML markup attributes whose contents should be retained and indexed +even though other HTML markup is stripped. The format is per-tag enumeration of +indexable attributes, as shown in the example below. + +Example: + +html_index_attrs = img=alt,title; a=title; + + + + +html_remove_elements + +A list of HTML elements for which to strip contents along with the elements themselves. +Optional, default is empty string (do not strip contents of any elements). + + +This feature allows to strip element contents, ie. everything that +is between the opening and the closing tags. It is useful to remove +embedded scripts, CSS, etc. Short tag form for empty elements +(ie. <br />) is properly supported; ie. the text that +follows such tag will not be removed. + + +The value is a comma-separated list of element (tag) names whose +contents should be removed. Tag names are case insensitive. + +Example: + +html_remove_elements = style, script + + + + +local + +Local index declaration in the distributed index. +Multi-value, optional, default is empty. + + +This setting is used to declare local indexes that will be searched when +given distributed index is searched. All local indexes will be searched +sequentially, utilizing only 1 CPU or core; to parallelize processing, +you can configure searchd to query itself (refer to + for the details). There might be several local +indexes declared per each distributed index. Any local index can be mentioned +several times in other distributed indexes. + +Example: + +local = chunk1 +local = chunk2 + + + + +agent + +Remote agent declaration in the distributed index. +Multi-value, optional, default is empty. + + +This setting is used to declare remote agents that will be searched +when given distributed index is searched. The agents can be thought of +as network pointers that specify host, port, and index names. In the basic +case agents would correspond to remote physical machines. More formally, +that is not always correct: you can point several agents to the +same remote machine; or you can even point agents to the very same +single instance of searchd (in order to utilize +many CPUs or cores). + + +The value format is as follows: + +agent = specification:remote-indexes-list +specification = hostname ":" port | path + +Where 'hostname' is remote host name; 'port' is remote TCP port; 'path' +is Unix-domain socket path and 'remote-indexes-list' is a +comma-separated list of remote index names. + + +All agents will be searched in parallel. However, all indexes +specified for a given agent will be searched sequentially +in this agent. This lets you fine-tune the configuration +to the hardware. For instance, if two remote indexes are stored +on the same physical HDD, it's better to configure one agent +with several sequentially searched indexes to avoid HDD steping. +If they are stored on different HDDs, having two agents will be +advantageous, because the work will be fully parallelized. +The same applies to CPUs; though CPU performance impact caused +by two processes stepping on each other is somewhat smaller +and frequently can be ignored at all. + + +On machines with many CPUs and/or HDDs, agents can be pointed +to the same machine to utilize all of the hardware in parallel +and reduce query latency. There is no need to setup several +searchd instances for that; it's legal +to configure the instance to contact itself. Here's an example +setup, intended for a 4-CPU machine, that will use up to +4 CPUs in parallel to process each query: + +index dist +{ + type = distributed + local = chunk1 + agent = localhost:9312:chunk2 + agent = localhost:9312:chunk3 + agent = localhost:9312:chunk4 +} + +Note how one of the chunks is searched locally and the same instance +of searchd queries itself to launch searches through three other ones +in parallel. + +Example: + +agent = localhost:9312:chunk2 # contact itself +agent = /var/run/searchd.s:chunk2 +agent = searchbox2:9312:chunk3,chunk4 # search remote indexes + + + + +agent_blackhole + +Remote blackhole agent declaration in the distributed index. +Multi-value, optional, default is empty. +Introduced in version 0.9.9-rc1. + + + lets you fire-and-forget queries +to remote agents. That is useful for debugging (or just testing) +production clusters: you can setup a separate debugging/testing searchd +instance, and forward the requests to this instance from your production +master (aggregator) instance without interfering with production work. +Master searchd will attempt to connect and query blackhole agent +normally, but it will neither wait nor process any responses. +Also, all network errors on blackhole agents will be ignored. +The value format is completely identical to regular +agent directive. + +Example: + +agent_blackhole = testbox:9312:testindex1,testindex2 + + + + +agent_connect_timeout + +Remote agent connection timeout, in milliseconds. +Optional, default is 1000 (ie. 1 second). + + +When connecting to remote agents, searchd +will wait at most this much time for connect() call to complete +succesfully. If the timeout is reached but connect() does not complete, +and retries are enabled, +retry will be initiated. + +Example: + +agent_connect_timeout = 300 + + + + +agent_query_timeout + +Remote agent query timeout, in milliseconds. +Optional, default is 3000 (ie. 3 seconds). + + +After connection, searchd will wait at most this +much time for remote queries to complete. This timeout is fully separate +from connection timeout; so the maximum possible delay caused by +a remote agent equals to the sum of agent_connection_timeout and +agent_query_timeout. Queries will not be retried +if this timeout is reached; a warning will be produced instead. + +Example: + +agent_query_timeout = 10000 # our query can be long, allow up to 10 sec + + + + +preopen + +Whether to pre-open all index files, or open them per each query. +Optional, default is 0 (do not preopen). + + +This option tells searchd that it should pre-open +all index files on startup (or rotation) and keep them open while it runs. +Currently, the default mode is not to pre-open the files (this may +change in the future). Preopened indexes take a few (currently 2) file +descriptors per index. However, they save on per-query open() calls; +and also they are invulnerable to subtle race conditions that may happen during +index rotation under high load. On the other hand, when serving many indexes +(100s to 1000s), it still might be desired to open the on per-query basis +in order to save file descriptors. + + +This directive does not affect indexer in any way, +it only affects searchd. + +Example: + +preopen = 1 + + + + +ondisk_dict + +Whether to keep the dictionary file (.spi) for this index on disk, or precache it in RAM. +Optional, default is 0 (precache in RAM). +Introduced in version 0.9.9-rc1. + + +The dictionary (.spi) can be either kept on RAM or on disk. The default +is to fully cache it in RAM. That improves performance, but might cause +too much RAM pressure, especially if prefixes or infixes were used. +Enabling results in 1 additional disk IO +per keyword per query, but reduces memory footprint. + + +This directive does not affect indexer in any way, +it only affects searchd. + +Example: + +ondisk_dict = 1 + + + + +inplace_enable + +Whether to enable in-place index inversion. +Optional, default is 0 (use separate temporary files). +Introduced in version 0.9.9-rc1. + + + greatly reduces indexing disk footprint, +at a cost of slightly slower indexing (it uses around 2x less disk, +but yields around 90-95% the original performance). + + +Indexing involves two major phases. The first phase collects, +processes, and partially sorts documents by keyword, and writes +the intermediate result to temporary files (.tmp*). The second +phase fully sorts the documents, and creates the final index +files. Thus, rebuilding a production index on the fly involves +around 3x peak disk footprint: 1st copy for the intermediate +temporary files, 2nd copy for newly constructed copy, and 3rd copy +for the old index that will be serving production queries in the meantime. +(Intermediate data is comparable in size to the final index.) +That might be too much disk footprint for big data collections, +and allows to reduce it. +When enabled, it reuses the temporary files, outputs the +final data back to them, and renames them on completion. +However, this might require additional temporary data chunk +relocation, which is where the performance impact comes from. + + +This directive does not affect searchd in any way, +it only affects indexer. + +Example: + +inplace_enable = 1 + + + + +inplace_hit_gap + +In-place inversion fine-tuning option. +Controls preallocated hitlist gap size. +Optional, default is 0. +Introduced in version 0.9.9-rc1. + + +This directive does not affect searchd in any way, +it only affects indexer. + +Example: + +inplace_hit_gap = 1M + + + + +inplace_docinfo_gap + +In-place inversion fine-tuning option. +Controls preallocated docinfo gap size. +Optional, default is 0. +Introduced in version 0.9.9-rc1. + + +This directive does not affect searchd in any way, +it only affects indexer. + +Example: + +inplace_docinfo_gap = 1M + + + + +inplace_reloc_factor + +In-place inversion fine-tuning option. +Controls relocation buffer size within indexing memory arena. +Optional, default is 0.1. +Introduced in version 0.9.9-rc1. + + +This directive does not affect searchd in any way, +it only affects indexer. + +Example: + +inplace_reloc_factor = 0.1 + + + + +inplace_write_factor + +In-place inversion fine-tuning option. +Controls in-place write buffer size within indexing memory arena. +Optional, default is 0.1. +Introduced in version 0.9.9-rc1. + + +This directive does not affect searchd in any way, +it only affects indexer. + +Example: + +inplace_write_factor = 0.1 + + + + +index_exact_words + +Whether to index the original keywords along with the stemmed/remapped versions. +Optional, default is 0 (do not index). +Introduced in version 0.9.9-rc1. + + +When enabled, forces indexer +to put the raw keywords in the index along with the stemmed versions. That, in turn, +enables exact form operator in the query language to work. +This impacts the index size and the indexing time. However, searching performance +is not impacted at all. + +Example: + +index_exact_words = 1 + + + + +overshort_step + +Position increment on overshort (less that min_word_len) keywords. +Optional, allowed values are 0 and 1, default is 1. +Introduced in version 0.9.9-rc1. + + +This directive does not affect searchd in any way, +it only affects indexer. + +Example: + +overshort_step = 1 + + + + +stopword_step + +Position increment on stopwords. +Optional, allowed values are 0 and 1, default is 1. +Introduced in version 0.9.9-rc1. + + +This directive does not affect searchd in any way, +it only affects indexer. + +Example: + +stopword_step = 1 + + + + +hitless_words + +Hitless words list. +Optional, allowed values are 'all', or a list file name. +Introduced in version 1.10-beta. + + +By default, Sphinx full-text index stores not only a list of matching +documents for every given keyword, but also a list of its in-document positions +(aka hitlist). Hitlists enables phrase, proximity, strict order and other +advanced types of searching, as well as phrase proximity ranking. However, +hitlists for specific frequent keywords (that can not be stopped for +some reason despite being frequent) can get huge and thus slow to process +while querying. Also, in some cases we might only care about boolean +keyword matching, and never need position-based searching operators +(such as phrase matching) nor phrase ranking. + + + lets you create indexes that either +do not have positional information (hitlists) at all, or skip it for +specific keywords. + + +Hitless index will generally use less space than the respective +regular index (about 1.5x can be expected). Both indexing and searching +should be faster, at a cost of missing positional query and ranking support. +When searching, positional queries (eg. phrase queries) will be automatically +converted to respective non-positional (document-level) or combined queries. +For instance, if keywords "hello" and "world" are hitless, "hello world" +phrase query will be converted to (hello & world) bag-of-words query, +matching all documents that mention either of the keywords but not necessarily +the exact phrase. And if, in addition, keywords "simon" and "says" are not +hitless, "simon says hello world" will be converted to ("simon says" & +hello & world) query, matching all documents that contain "hello" and +"world" anywhere in the document, and also "simon says" as an exact phrase. + +Example: + +hitless_words = all + + + + +expand_keywords + +Expand keywords with exact forms and/or stars when possible. +Optional, default is 0 (do not expand keywords). +Introduced in version 1.10-beta. + + +Queries against indexes with feature +enabled are internally expanded as follows. If the index was built with +prefix or infix indexing enabled, every keyword gets internally replaced +with a disjunction of keyword itself and a respective prefix or infix +(keyword with stars). If the index was built with both stemming and +index_exact_words enabled, +exact form is also added. Here's an example that shows how internal +expansion works when all of the above (infixes, stemming, and exact +words) are combined: + +running -> ( running | *running* | =running ) + + + +Expanded queries take naturally longer to complete, but can possibly +improve the search quality, as the documents with exact form matches +should be ranked generally higher than documents with stemmed or infix matches. + + +Note that the existing query syntax does not allowe to emulate this +kind of expansion, because internal expansion works on keyword level and +expands keywords within phrase or quorum operators too (which is not +possible through the query syntax). + + +This directive does not affect indexer in any way, +it only affects searchd. + +Example: + +expand_keywords = 1 + + + + +blend_chars + +Blended characters list. +Optional, default is empty. +Introduced in version 1.10-beta. + + +Blended characters are indexed both as separators and valid characters. +For instance, assume that & is configured as blended and AT&T +occurs in an indexed document. Three different keywords will get indexed, +namely "at&t", treating blended characters as valid, plus "at" and "t", +treating them as separators. + + +Positions for tokens obtained by replacing blended characters with whitespace +are assigned as usual, so regular keywords will be indexed just as if there was +no specified at all. An additional token that +mixes blended and non-blended characters will be put at the starting position. +For instance, if the field contents are "AT&T company" occurs in the very +beginning of the text field, "at" will be given position 1, "t" position 2, +"company" positin 3, and "AT&T" will also be given position 1 ("blending" +with the opening regular keyword). Thus, querying for either AT&T or just +AT will match that document, and querying for "AT T" as a phrase also match it. +Last but not least, phrase query for "AT&T company" will also +match it, despite the position + + +Blended characters can overlap with special characters used in query +syntax (think of T-Mobile or @twitter). Where possible, query parser will +automatically handle blended character as blended. For instance, "hello @twitter" +within quotes (a phrase operator) would handle @-sign as blended, because +@-syntax for field operator is not allowed within phrases. Otherwise, +the character would be handled as an operator. So you might want to +escape the keywords. + + +Starting with version 2.0.1-beta, blended characters can be remapped, +so that multiple different blended characters could be normalized into +just one base form. This is useful when indexing multiple alternative +Unicode codepoints with equivalent glyphs. + +Example: + +blend_chars = +, &, U+23 +blend_chars = +, &->+ # 2.0.1 and above + + + + +blend_mode + +Blended tokens indexing mode. +Optional, default is . +Introduced in version 2.0.1-beta. + + +By default, tokens that mix blended and non-blended characters +get indexed in there entirety. For instance, when both at-sign and +an exclamation are in , "@dude!" will get +result in two tokens indexed: "@dude!" (with all the blended characters) +and "dude" (without any). Therefore "@dude" query will not +match it. + + + directive adds flexibility to this indexing +behavior. It takes a comma-separated list of options. + +blend_mode = option [, option [, ...]] +option = trim_none | trim_head | trim_tail | trim_both | skip_pure + + + +Options specify token indexing variants. If multiple options are +specified, multiple variants of the same token will be indexed. +Regular keywords (resulting from that token by replacing blended +with whitespace) are always be indexed. + + + trim_none + Index the entire token. + + + trim_head + Trim heading blended characters, and index the resulting token. + + + trim_tail + Trim trailing blended characters, and index the resulting token. + + + trim_both + Trim both heading and trailing blended characters, and index the resulting token. + + + skip_pure + Do not index the token if it's purely blended, that is, consists of blended characters only. + + +Returning to the "@dude!" example above, setting will result in two tokens being indexed, "@dude" and "dude!". +In this particular example, would have no effect, +because trimming both blended characters results in "dude" which is already +indexed as a regular keyword. Indexing "@U.S.A." with +(and assuming that dot is blended two) would result in "U.S.A" being indexed. +Last but not least, enables you to fully ignore +sequences of blended characters only. For example, "one @@@ two" would be +indexed exactly as "one two", and match that as a phrase. That is not the case +by default because a fully blended token gets indexed and offsets the second +keyword position. + + +Default behavior is to index the entire token, equivalent to +. + +Example: + +blend_mode = trim_tail, skip_pure + + + + +rt_mem_limit + +RAM chunk size limit. +Optional, default is empty. +Introduced in version 1.10-beta. + + +RT index keeps some data in memory (so-called RAM chunk) and +also maintains a number of on-disk indexes (so-called disk chunks). +This directive lets you control the RAM chunk size. Once there's +too much data to keep in RAM, RT index will flush it to disk, +activate a newly created disk chunk, and reset the RAM chunk. + + +The limit is pretty strict; RT index should never allocate more +memory than it's limited to. The memory is not preallocated either, +hence, specifying 512 MB limit and only inserting 3 MB of data +should result in allocating 3 MB, not 512 MB. + + + +Example: + +rt_mem_limit = 512M + + + + +rt_field + +Full-text field declaration. +Multi-value, mandatory +Introduced in version 1.10-beta. + + +Full-text fields to be indexed are declared using +directive. The names must be unique. The order is preserved; and so field values +in INSERT statements without an explicit list of inserted columns will have to be +in the same order as configured. + + + +Example: + +rt_field = author +rt_field = title +rt_field = content + + + + +rt_attr_uint + +Unsigned integer attribute declaration. +Multi-value (an arbitrary number of attributes is allowed), optional. +Declares an unsigned 32-bit attribute. +Introduced in version 1.10-beta. + +Example: + +rt_attr_uint = gid + + + + +rt_attr_bigint + +BIGINT attribute declaration. +Multi-value (an arbitrary number of attributes is allowed), optional. +Declares a signed 64-bit attribute. +Introduced in version 1.10-beta. + +Example: + +rt_attr_bigint = guid + + + + +rt_attr_float + +Floating point attribute declaration. +Multi-value (an arbitrary number of attributes is allowed), optional. +Declares a single precision, 32-bit IEEE 754 format float attribute. +Introduced in version 1.10-beta. + +Example: + +rt_attr_float = gpa + + + + +rt_attr_timestamp + +Timestamp attribute declaration. +Multi-value (an arbitrary number of attributes is allowed), optional. +Introduced in version 1.10-beta. + +Example: + +rt_attr_timestamp = date_added + + + + +rt_attr_string + +String attribute declaration. +Multi-value (an arbitrary number of attributes is allowed), optional. +Introduced in version 1.10-beta. + +Example: + +rt_attr_string = author + + + + + +<filename>indexer</filename> program configuration options + + +mem_limit + +Indexing RAM usage limit. +Optional, default is 32M. + + +Enforced memory usage limit that the indexer +will not go above. Can be specified in bytes, or kilobytes +(using K postfix), or megabytes (using M postfix); see the example. +This limit will be automatically raised if set to extremely low value +causing I/O buffers to be less than 8 KB; the exact lower bound +for that depends on the indexed data size. If the buffers are +less than 256 KB, a warning will be produced. + + +Maximum possible limit is 2047M. Too low values can hurt +indexing speed, but 256M to 1024M should be enough for most +if not all datasets. Setting this value too high can cause +SQL server timeouts. During the document collection phase, +there will be periods when the memory buffer is partially +sorted and no communication with the database is performed; +and the database server can timeout. You can resolve that +either by raising timeouts on SQL server side or by lowering +mem_limit. + +Example: + +mem_limit = 256M +# mem_limit = 262144K # same, but in KB +# mem_limit = 268435456 # same, but in bytes + + + + +max_iops + +Maximum I/O operations per second, for I/O throttling. +Optional, default is 0 (unlimited). + + +I/O throttling related option. +It limits maximum count of I/O operations (reads or writes) per any given second. +A value of 0 means that no limit is imposed. + + +indexer can cause bursts of intensive disk I/O during +indexing, and it might desired to limit its disk activity (and keep something +for other programs running on the same machine, such as searchd). +I/O throttling helps to do that. It works by enforcing a minimum guaranteed +delay between subsequent disk I/O operations performed by indexer. +Modern SATA HDDs are able to perform up to 70-100+ I/O operations per second +(that's mostly limited by disk heads seek time). Limiting indexing I/O +to a fraction of that can help reduce search performance dedgradation +caused by indexing. + +Example: + +max_iops = 40 + + + + +max_iosize + +Maximum allowed I/O operation size, in bytes, for I/O throttling. +Optional, default is 0 (unlimited). + + +I/O throttling related option. It limits maximum file I/O operation +(read or write) size for all operations performed by indexer. +A value of 0 means that no limit is imposed. +Reads or writes that are bigger than the limit +will be split in several smaller operations, and counted as several operation +by max_iops setting. At the time of this +writing, all I/O calls should be under 256 KB (default internal buffer size) +anyway, so max_iosize values higher than 256 KB must not affect anything. + +Example: + +max_iosize = 1048576 + + + + +max_xmlpipe2_field + +Maximum allowed field size for XMLpipe2 source type, bytes. +Optional, default is 2 MB. + +Example: + +max_xmlpipe2_field = 8M + + + + +write_buffer + +Write buffer size, bytes. +Optional, default is 1 MB. + + +Write buffers are used to write both temporary and final index +files when indexing. Larger buffers reduce the number of required +disk writes. Memory for the buffers is allocated in addition to +mem_limit. Note that several +(currently up to 4) buffers for different files will be allocated, +proportionally increasing the RAM usage. + +Example: + +write_buffer = 4M + + + + +max_file_field_buffer + +Maximum file field adaptive buffer size, bytes. +Optional, default is 8 MB, minimum is 1 MB. + + +File field buffer is used to load files referred to from +sql_file_field columns. +This buffer is adaptive, starting at 1 MB at first allocation, +and growing in 2x steps until either file contents can be loaded, +or maximum buffer size, specified by +directive, is reached. + + +Thus, if there are no file fields are specified, no buffer +is allocated at all. If all files loaded during indexing are under +(for example) 2 MB in size, but +value is 128 MB, peak buffer usage would still be only 2 MB. However, +files over 128 MB would be entirely skipped. + +Example: + +max_file_field_buffer = 128M + + + +on_file_field_error + +How to handle IO errors in file fields. +Optional, default is ignore_field. +Introduced in version 2.0.2-beta. + + +When there is a problem indexing a file referenced by a file field +(), indexer can +either index the document, assuming empty content in this particular field, +or skip the document, or fail indexing entirely. +directive controls that behavior. The values it takes are: + +ignore_field, index the current document without field; +skip_document, skip the current document but continue indexing; +fail_index, fail indexing with an error message. + + + +The problems that can arise are: open error, size error (file too big), +and data read error. Warning messages on any problem will be given at all times, +irregardless of the phase and the on_file_field_error setting. + + +Note that with +documents will only be ignored if problems are detected during +an early check phase, and not during the actual file parsing +phase. indexer will open every referenced file +and check its size before doing any work, and then open it again +when doing actual parsing work. So in case a file goes away +between these two open attempts, the document will still be +indexed. + +Example: + +on_file_field_errors = skip_document + + + + +<filename>searchd</filename> program configuration options + + +listen + +This setting lets you specify IP address and port, or Unix-domain +socket path, that searchd will listen on. +Introduced in version 0.9.9-rc1. + + +The informal grammar for listen setting is: + +listen = ( address ":" port | port | path ) [ ":" protocol ] + +I.e. you can specify either an IP address (or hostname) and port +number, or just a port number, or Unix socket path. If you specify +port number but not the address, searchd will listen on +all network interfaces. Unix path is identified by a leading slash. + + +Starting with version 0.9.9-rc2, you can also specify a protocol +handler (listener) to be used for connections on this socket. +Supported protocol values are 'sphinx' (Sphinx 0.9.x API protocol) +and 'mysql41' (MySQL protocol used since 4.1 upto at least 5.1). +More details on MySQL protocol support can be found in + section. + +Examples: + +listen = localhost +listen = localhost:5000 +listen = 192.168.0.1:5000 +listen = /var/run/sphinx.s +listen = 9312 +listen = localhost:9306:mysql41 + + +There can be multiple listen directives, searchd will +listen for client connections on all specified ports and sockets. If +no listen directives are found then the server will listen +on all available interfaces using the default SphinxAPI port 9312. +Starting with 1.10-beta, it will also listen on default SphinxQL +port 9306. Both port numbers are assigned by IANA (see +http://www.iana.org/assignments/port-numbers +for details) and should therefore be available. + + +Unix-domain sockets are not supported on Windows. + + + + +address + +Interface IP address to bind on. +Optional, default is 0.0.0.0 (ie. listen on all interfaces). +DEPRECATED, use listen instead. + + +address setting lets you specify which network interface +searchd will bind to, listen on, and accept incoming +network connections on. The default value is 0.0.0.0 which means to listen +on all interfaces. At the time, you can not specify multiple interfaces. + +Example: + +address = 192.168.0.1 + + + + +port + +searchd TCP port number. +DEPRECATED, use listen instead. +Used to be mandatory. Default port number is 9312. + +Example: + +port = 9312 + + + + +log + +Log file name. +Optional, default is 'searchd.log'. +All searchd run time events will be logged in this file. + + +Also you can use the 'syslog' as the file name. In this case the events will be sent to syslog daemon. +To use the syslog option the sphinx must be configured '--with-syslog' on building. + +Example: + +log = /var/log/searchd.log + + + + +query_log + +Query log file name. +Optional, default is empty (do not log queries). +All search queries will be logged in this file. The format is described in . + + +In case of 'plain' format, you can use the 'syslog' as the path to the log file. +In this case all search queries will be sent to syslog daemon with LOG_INFO priority, +prefixed with '[query]' instead of timestamp. +To use the syslog option the sphinx must be configured '--with-syslog' on building. + +Example: + +query_log = /var/log/query.log + + + + +query_log_format + +Query log format. +Optional, allowed values are 'plain' and 'sphinxql', default is 'plain'. +Introduced in version 2.0.1-beta. + + +Starting with version 2.0.1-beta, two different log formats are supported. +The default one logs queries in a custom text format. The new one logs +valid SphinxQL statements. This directive allows to switch between the two +formats on search daemon startup. The log format can also be altered +on the fly, using SET GLOBAL query_log_format=sphinxql syntax. +Refer to for more discussion and format +details. + +Example: + +query_log_format = sphinxql + + + + +read_timeout + +Network client request read timeout, in seconds. +Optional, default is 5 seconds. +searchd will forcibly close the client connections which fail to send a query within this timeout. + +Example: + +read_timeout = 1 + + + + +client_timeout + +Maximum time to wait between requests (in seconds) when using +persistent connections. Optional, default is five minutes. + +Example: + +client_timeout = 3600 + + + + +max_children + +Maximum amount of children to fork (or in other words, concurrent searches to run in parallel). +Optional, default is 0 (unlimited). + + +Useful to control server load. There will be no more than this much concurrent +searches running, at all times. When the limit is reached, additional incoming +clients are dismissed with temporarily failure (SEARCHD_RETRY) status code +and a message stating that the server is maxed out. + +Example: + +max_children = 10 + + + + +pid_file + +searchd process ID file name. +Mandatory. + + +PID file will be re-created (and locked) on startup. It will contain +head daemon process ID while the daemon is running, and it will be unlinked +on daemon shutdown. It's mandatory because Sphinx uses it internally +for a number of things: to check whether there already is a running instance +of searchd; to stop searchd; +to notify it that it should rotate the indexes. Can also be used for +different external automation scripts. + +Example: + +pid_file = /var/run/searchd.pid + + + + +max_matches + +Maximum amount of matches that the daemon keeps in RAM for each index and can return to the client. +Optional, default is 1000. + + +Introduced in order to control and limit RAM usage, max_matches +setting defines how much matches will be kept in RAM while searching each index. +Every match found will still be processed; but only +best N of them will be kept in memory and return to the client in the end. +Assume that the index contains 2,000,000 matches for the query. You rarely +(if ever) need to retrieve all of them. Rather, you need +to scan all of them, but only choose "best" at most, say, 500 by some criteria +(ie. sorted by relevance, or price, or anything else), and display those +500 matches to the end user in pages of 20 to 100 matches. And tracking +only the best 500 matches is much more RAM and CPU efficient than keeping +all 2,000,000 matches, sorting them, and then discarding everything but +the first 20 needed to display the search results page. max_matches +controls N in that "best N" amount. + + +This parameter noticeably affects per-query RAM and CPU usage. +Values of 1,000 to 10,000 are generally fine, but higher limits must be +used with care. Recklessly raising max_matches to 1,000,000 +means that searchd will have to allocate and +initialize 1-million-entry matches buffer for every +query. That will obviously increase per-query RAM usage, and in some cases +can also noticeably impact performance. + + +CAVEAT EMPTOR! Note that there also is another place where this limit +is enforced. max_matches can be decreased on the fly +through the corresponding API call, +and the default value in the API is also set to 1,000. So in order +to retrieve more than 1,000 matches to your application, you will have +to change the configuration file, restart searchd, and set proper limit +in SetLimits() call. +Also note that you can not set the value in the API higher than the value +in the .conf file. This is prohibited in order to have some protection +against malicious and/or malformed requests. + +Example: + +max_matches = 10000 + + + + +seamless_rotate + +Prevents searchd stalls while rotating indexes with huge amounts of data to precache. +Optional, default is 1 (enable seamless rotation). + + +Indexes may contain some data that needs to be precached in RAM. +At the moment, .spa, .spi and +.spm files are fully precached (they contain attribute data, +MVA data, and keyword index, respectively.) +Without seamless rotate, rotating an index tries to use as little RAM +as possible and works as follows: + +new queries are temporarly rejected (with "retry" error code); +searchd waits for all currently running queries to finish; +old index is deallocated and its files are renamed; +new index files are renamed and required RAM is allocated; +new index attribute and dictionary data is preloaded to RAM; +searchd resumes serving queries from new index. + + + +However, if there's a lot of attribute or dictionary data, then preloading step +could take noticeble time - up to several minutes in case of preloading 1-5+ GB files. + + +With seamless rotate enabled, rotation works as follows: + +new index RAM storage is allocated; +new index attribute and dictionary data is asynchronously preloaded to RAM; +on success, old index is deallocated and both indexes' files are renamed; +on failure, new index is deallocated; +at any given moment, queries are served either from old or new index copy. + + + +Seamless rotate comes at the cost of higher peak +memory usage during the rotation (because both old and new copies of +.spa/.spi/.spm data need to be in RAM while +preloading new copy). Average usage stays the same. + +Example: + +seamless_rotate = 1 + + + + +preopen_indexes + +Whether to forcibly preopen all indexes on startup. +Optional, default is 1 (preopen everything). + + +Starting with 2.0.1-beta, the default value for this +option is now 1 (foribly preopen all indexes). In prior +versions, it used to be 0 (use per-index settings). + + +When set to 1, this directive overrides and enforces +preopen on all indexes. +They will be preopened, no matter what is the per-index +preopen setting. When set to 0, per-index +settings can take effect. (And they default to 0.) + + +Pre-opened indexes avoid races between search queries +and rotations that can cause queries to fail occasionally. +They also make searchd use more file +handles. In most scenarios it's therefore preferred and +recommended to preopen indexes. + +Example: + +preopen_indexes = 1 + + + + +unlink_old + +Whether to unlink .old index copies on succesful rotation. +Optional, default is 1 (do unlink). + +Example: + +unlink_old = 0 + + + +attr_flush_period + +When calling UpdateAttributes() to update document attributes in +real-time, changes are first written to the in-memory copy of attributes +( must be set to ). +Then, once searchd shuts down normally (via SIGTERM +being sent), the changes are written to disk. +Introduced in version 0.9.9-rc1. + +Starting with 0.9.9-rc1, it is possible to tell searchd +to periodically write these changes back to disk, to avoid them being lost. The time +between those intervals is set with , in seconds. + +It defaults to 0, which disables the periodic flushing, but flushing will +still occur at normal shut-down. + +Example: + +attr_flush_period = 900 # persist updates to disk every 15 minutes + + + + +ondisk_dict_default + +Instance-wide defaults for ondisk_dict directive. +Optional, default it 0 (precache dictionaries in RAM). +Introduced in version 0.9.9-rc1. + + +This directive lets you specify the default value of +ondisk_dict for all the indexes +served by this copy of searchd. Per-index directive +take precedence, and will overwrite this instance-wide default value, +allowing for fine-grain control. + +Example: + +ondisk_dict_default = 1 # keep all dictionaries on disk + + + + +max_packet_size + +Maximum allowed network packet size. +Limits both query packets from clients, and response packets from remote agents in distributed environment. +Only used for internal sanity checks, does not directly affect RAM use or performance. +Optional, default is 8M. +Introduced in version 0.9.9-rc1. + +Example: + +max_packet_size = 32M + + + + +mva_updates_pool + +Shared pool size for in-memory MVA updates storage. +Optional, default size is 1M. +Introduced in version 0.9.9-rc1. + + +This setting controls the size of the shared storage pool for updated MVA values. +Specifying 0 for the size disable MVA updates at all. Once the pool size limit +is hit, MVA update attempts will result in an error. However, updates on regular +(scalar) attributes will still work. Due to internal technical difficulties, +currently it is not possible to store (flush) any updates on indexes +where MVA were updated; though this might be implemented in the future. +In the meantime, MVA updates are intended to be used as a measure to quickly +catchup with latest changes in the database until the next index rebuild; +not as a persistent storage mechanism. + +Example: + +mva_updates_pool = 16M + + + + +crash_log_path + +Deprecated debugging setting, path (formally prefix) for crash log files. +Introduced in version 0.9.9-rc1. Deprecated in version 2.0.1-beta, +as crash debugging information now gets logged into searchd.log +in text form, and separate binary crash logs are no longer needed. + + + + +max_filters + +Maximum allowed per-query filter count. +Only used for internal sanity checks, does not directly affect RAM use or performance. +Optional, default is 256. +Introduced in version 0.9.9-rc1. + +Example: + +max_filters = 1024 + + + + +max_filter_values + +Maximum allowed per-filter values count. +Only used for internal sanity checks, does not directly affect RAM use or performance. +Optional, default is 4096. +Introduced in version 0.9.9-rc1. + +Example: + +max_filter_values = 16384 + + + + +listen_backlog + +TCP listen backlog. +Optional, default is 5. + + +Windows builds currently (as of 0.9.9) can only process the requests +one by one. Concurrent requests will be enqueued by the TCP stack +on OS level, and requests that can not be enqueued will immediately +fail with "connection refused" message. listen_backlog directive +controls the length of the connection queue. Non-Windows builds +should work fine with the default value. + +Example: + +listen_backlog = 20 + + + + +read_buffer + +Per-keyword read buffer size. +Optional, default is 256K. + + +For every keyword occurrence in every search query, there are +two associated read buffers (one for document list and one for +hit list). This setting lets you control their sizes, increasing +per-query RAM use, but possibly decreasing IO time. + +Example: + +read_buffer = 1M + + + + +read_unhinted + +Unhinted read size. +Optional, default is 32K. + + +When querying, some reads know in advance exactly how much data +is there to be read, but some currently do not. Most prominently, +hit list size in not currently known in advance. This setting +lest you control how much data to read in such cases. It will +impact hit list IO time, reducing it for lists larger than +unhinted read size, but raising it for smaller lists. It will +not affect RAM use because read buffer will be already +allocated. So it should be not greater than read_buffer. + +Example: + +read_unhinted = 32K + + + + +max_batch_queries + +Limits the amount of queries per batch. +Optional, default is 32. + + +Makes searchd perform a sanity check of the amount of the queries +submitted in a single batch when using multi-queries. +Set it to 0 to skip the check. + +Example: + +max_batch_queries = 256 + + + + +subtree_docs_cache + +Max common subtree document cache size, per-query. +Optional, default is 0 (disabled). + + +Limits RAM usage of a common subtree optimizer (see ). +At most this much RAM will be spent to cache document entries per each query. +Setting the limit to 0 disables the optimizer. + +Example: + +subtree_docs_cache = 8M + + + + +subtree_hits_cache + +Max common subtree hit cache size, per-query. +Optional, default is 0 (disabled). + + +Limits RAM usage of a common subtree optimizer (see ). +At most this much RAM will be spent to cache keyword occurrences (hits) per each query. +Setting the limit to 0 disables the optimizer. + +Example: + +subtree_hits_cache = 16M + + + + +workers + +Multi-processing mode (MPM). +Optional; allowed values are none, fork, prefork, and threads. +Default is fork on Unix based systems, and threads on Windows. +Introduced in version 1.10-beta. + + +Lets you choose how searchd processes multiple +concurrent requests. The possible values are: + + + none + All requests will be handled serially, one-by-one. + Prior to 1.x, this was the only mode available on Windows. + + + + fork + A new child process will be forked to handle every + incoming request. Historically, this is the default mode. + + + + prefork + On startup, searchd will pre-fork + a number of worker processes, and pass the incoming requests + to one of those children. + + + + threads + A new thread will be created to handle every + incoming request. This is the only mode compatible with + RT indexing backend. + + + + + +Historically, searchd used fork-based model, +which generally performs OK but spends a noticeable amount of CPU +in fork() system call when there's a high amount of (tiny) requests +per second. Prefork mode was implemented to alleviate that; with +prefork, worker processes are basically only created on startup +and re-created on index rotation, somewhat reducing fork() call +pressure. + + +Threads mode was implemented along with RT backend and is required +to use RT indexes. (Regular disk-based indexes work in all the +available modes.) + +Example: + +workers = threads + + + + +dist_threads + +Max local worker threads to use for parallelizable requests (searching a distributed index; building a batch of snippets). +Optional, default is 0, which means to disable in-request parallelism. +Introduced in version 1.10-beta. + + +Distributed index can include several local indexes. +lets you easily utilize multiple CPUs/cores for that (previously existing +alternative was to specify the indexes as remote agents, pointing searchd +to itself and paying some network overheads). + + +When set to a value N greater than 1, this directive will create up to +N threads for every query, and schedule the specific searches within these +threads. For example, if there are 7 local indexes to search and dist_threads +is set to 2, then 2 parallel threads would be created: one that sequentially +searches 4 indexes, and another one that searches the other 3 indexes. + + +In case of CPU bound workload, setting +to 1x the number of cores is advised (creating more threads than cores +will not improve query time). In case of mixed CPU/disk bound workload +it might sometimes make sense to use more (so that all cores could be +utilizes even when there are threads that wait for I/O completion). + + +Note that does not require +threads MPM. You can perfectly use it with fork or prefork MPMs too. + + +Starting with version 2.0.1-beta, building a batch of snippets +with flag enabled can also be parallelized. +Up to threads are be created to process +those files. That speeds up snippet extraction when the total amount +of document data to process is significant (hundreds of megabytes). + +Example: + +index dist_test +{ + type = distributed + local = chunk1 + local = chunk2 + local = chunk3 + local = chunk4 +} + +# ... + +dist_threads = 4 + + + + +binlog_path + +Binary log (aka transaction log) files path. +Optional, default is build-time configured data directory. +Introduced in version 1.10-beta. + + +Binary logs are used for crash recovery of RT index data that +would otherwise only be stored in RAM. When logging is enabled, +every transaction COMMIT-ted into RT index gets written into +a log file. Logs are then automatically replayed on startup +after an unclean shutdown, recovering the logged changes. + + + directive specifies the binary log +files location. It should contain just the path; +will create and unlink multiple binlog.* files in that path as necessary +(binlog data, metadata, and lock files, etc). + + +Empty value disables binary logging. That improves performance, +but puts RT index data at risk. + +Example: + +binlog_path = # disable logging +binlog_path = /var/data # /var/data/binlog.001 etc will be created + + + + +binlog_flush + +Binary log transaction flush/sync mode. +Optional, default is 2 (flush every transaction, sync every second). +Introduced in version 1.10-beta. + + +This directive controls how frequently will binary log be flushed +to OS and synced to disk. Three modes are supported: + +0, flush and sync every second. Best performance, +but up to 1 second worth of committed transactions can be lost +both on daemon crash, or OS/hardware crash. + +1, flush and sync every transaction. Worst performance, +but every committed transaction data is guaranteed to be saved. + +2, flush every transaction, sync every second. +Good performance, and every committed transaction is guaranteed +to be saved in case of daemon crash. However, in case of OS/hardware +crash up to 1 second worth of committed transactions can be lost. + + + + +For those familiar with MySQL and InnoDB, this directive is entirely +similar to . In most +cases, the default hybrid mode 2 provides a nice balance of speed +and safety, with full RT index data protection against daemon crashes, +and some protection against hardware ones. + +Example: + +binlog_flush = 1 # ultimate safety, low speed + + + + +binlog_max_log_size + +Maximum binary log file size. +Optional, default is 0 (do not reopen binlog file based on size). +Introduced in version 1.10-beta. + + +A new binlog file will be forcibly opened once the current binlog file +reaches this limit. This achieves a finer granularity of logs and can yield +more efficient binlog disk usage under certain borderline workloads. + +Example: + +binlog_max_log_size = 16M + + + + +collation_server + +Default server collation. +Optional, default is libc_ci. +Introduced in version 2.0.1-beta. + + +Specifies the default collation used for incoming requests. +The collation can be overridden on a per-query basis. +Refer to section for the list of available collations and other details. + +Example: + +collation_server = utf8_ci + + + + +collation_libc_locale + +Server libc locale. +Optional, default is C. +Introduced in version 2.0.1-beta. + + +Specifies the libc locale, affecting the libc-based collations. +Refer to section for the details. + +Example: + +collation_libc_locale = fr_FR + + + + +plugin_dir + +Trusted location for the dynamic libraries (UDFs). +Optional, default is empty (no location). +Introduced in version 2.0.1-beta. + + +Specifies the trusted directory from which the +UDF libraries can be loaded. Requires +workers = thread to take effect. + +Example: + +workers = threads +plugin_dir = /usr/local/sphinx/lib + + + + +mysql_version_string + +A server version string to return via MySQL protocol. +Optional, default is empty (return Sphinx version). +Introduced in version 2.0.1-beta. + + +Several picky MySQL client libraries depend on a particular version +number format used by MySQL, and moreover, sometimes choose a different +execution path based on the reported version number (rather than the +indicated capabilities flags). For instance, Python MySQLdb 1.2.2 throws +an exception when the version number is not in X.Y.ZZ format; MySQL .NET +connector 6.3.x fails internally on version numbers 1.x along with +a certain combination of flags, etc. To workaround that, you can use + directive and have searchd +report a different version to clients connecting over MySQL protocol. +(By default, it reports its own version.) + +Example: + +mysql_version_string = 5.0.37 + + + + +rt_flush_period + +RT indexes RAM chunk flush check period, in seconds. +Optional, default is 0 (do not flush). +Introduced in version 2.0.1-beta. + + +Actively updated RT indexes that however fully fit in RAM chunks +can result in ever-growing binlogs, impacting disk use and crash +recovery time. With this directive the search daemon performs +periodic flush checks, and eligible RAM chunks can get saved, +enabling consequential binlog cleanup. See +for more details. + +Example: + +rt_flush_period = 3600 + + + + +thread_stack + +Per-thread stack size. +Optional, default is 64K. +Introduced in version 2.0.1-beta. + + +In the workers = threads mode, every request is processed +with a separate thread that needs its own stack space. By default, 64K per +thread are allocated for stack. However, extremely complex search requests +might eventually exhaust the default stack and require more. For instance, +a query that matches a few thousand keywords (either directly or through +term expansion) can eventually run out of stack. Previously, that resulted +in crashes. Starting with 2.0.1-beta, searchd attempts +to estimate the expected stack use, and blocks the potentially dangerous +queries. To process such queries, you can either the thread stack size +by using the thread_stack directive (or switch to a different +workers setting if that is possible). + + +A query with N levels of nesting is estimated to require approximately +30+0.12*N KB of stack, meaning that the default 64K is enough for queries +with upto 300 levels, 150K for upto 1000 levels, etc. If the stack size limit +is not met, searchd fails the query and reports +the required stack size in the error message. + +Example: + +thread_stack = 256K + + + + +expansion_limit + +The maximum number of expanded keywords for a single wildcard. +Optional, default is 0 (no limit). +Introduced in version 2.0.1-beta. + + +When doing substring searches against indexes built with +dict = keywords enabled, a single wildcard may +potentially result in thousands and even millions of matched +keywords (think of matching 'a*' against the entire Oxford +dictionary). This directive lets you limit the impact +of such expansions. Setting expansion_limit = N +restricts expansions to no more than N of the most frequent +matching keywords (per each wildcard in the query). + +Example: + +expansion_limit = 16 + + + + +compat_sphinxql_magics + +Legacy SphinxQL quirks compatiblity mode. +Optional, default is 1 (keep compatibility). +Introduced in version 2.0.1-beta. + + +Starting with version 2.0.1-beta, we're bringing SphinxQL in closer +compliance with standard SQL. However, existing applications must not +get broken, and compat_sphinxql_magics lets you upgrade +safely. It defauls to 1, which enables the compatibility mode. +However, SphinxQL compatibility mode is now deprecated and +will be removed once we complete bringing SphinxQL in line +with standard SQL syntax. So it's advised to update the applications +utilising SphinxQL and then switch the daemon to the new, more SQL +compliant mode by setting compat_sphinxql_magics = 0. +Please refer to +for the details and update instruction. + +Example: + +compat_sphinxql_magics = 0 # the future is now + + + + +watchdog + +Threaded server watchdog. +Optional, default is 1 (watchdog enabled). +Introduced in version 2.0.1-beta. + + +A crashed query in threads multi-processing mode +(workers = threads) +can take down the entire server. With watchdog feature enabled, +searchd additionally keeps a separate lightweight +process that monitors the main server process, and automatically +restarts the latter in case of abnormal termination. Watchdog +is enabled by default. + +Example: + +watchdog = 0 # disable watchdog + + + + + + + + + + + +Sphinx revision history + +Version 2.0.1-beta, 22 apr 2011 +New general features + +added remapping support to blend_chars directive +added multi-threaded snippet batches support (requires a batch sent via API, dist_threads, and load_files) +added collations (collation_server, collation_libc_locale directives) +added support for sorting and grouping on string attributes (ORDER BY, GROUP BY, WITHING GROUP ORDER BY) +added UDF support (plugin_dir directive; CREATE FUNCTION, DROP FUNCTION statements) +added query_log_format directive, SET GLOBAL query_log_format | log_level = ... statements; and connection id tracking +added sql_column_buffers directive, fixed out-of-buffer column handling in ODBC/MS SQL sources +added blend_mode directive that enables indexing multiple variants of a blended sequence +added UNIX socket support to C, Ruby APIs +added ranged query support to sql_joined_field +added rt_flush_period directive +added thread_stack directive +added SENTENCE, PARAGRAPH, ZONE operators (and index_sp, index_zones directives) +added keywords dictionary support (and dict, expansion_limit directives) +added passage_boundary, emit_zones options to snippets +added a watchdog process in threaded mode +added persistent MVA updates +added crash dumps to searchd.log, deprecated crash_log_path directive +added id32 index support in id64 binaries (EXPERIMENTAL) +added SphinxSE support for DELETE and REPLACE on SphinxQL tables + +New SphinxQL features + +added new, more SQL compliant SphinxQL syntax; and a compat_sphinxql_magics directive +added CRC32(), DAY(), MONTH(), YEAR(), YEARMONTH(), YEARMONTHDAY() functions +added DIV, MOD, and % operators +added reverse_scan=(0|1) option to SELECT +added support for MySQL packets over 16M +added dummy SHOW VARIABLES, SHOW COLLATION, and SET character_set_results support (to support handshake with certain client libraries and frameworks) +added mysql_version_string directive (to workaround picky MySQL client libraries) +added support for global filter variables, SET GLOBAL @uservar=(int_list) +added DELETE ... IN (id_list) syntax support +added C-style comments syntax (for example, SELECT /*!40000 some comment*/ id FROM test) +added UPDATE ... WHERE id=X syntax support +added SphinxQL multi-query support +added DESCRIBE, SHOW TABLES statements + +New command-line switches + +added --print-queries switch to indexer that dumps SQL queries it runs +added --sighup-each switch to indexer that rotates indexes one by one +added --strip-path switch to searchd that skips file paths embedded in the index(-es) +added --dumpconfig switch to indextool that dumps an index header in sphinx.conf format + +Major changes and optimizations + +changed default preopen_indexes value to 1 +optimized English stemmer (results in 1.3x faster snippets and indexing with morphology=stem_en) +optimized snippets, 1.6x general speedup +optimized const-list parsing in SphinxQL +optimized full-document highlighting CPU/RAM use +optimized binlog replay (improved performance on K-list update) + +Bug fixes + +fixed #767, joined fields vs ODBC sources +fixed #757, wordforms shared by indexes with different settings +fixed #733, loading of indexes in formats prior to v.14 +fixed #763, occasional snippets failures +fixed #648, occasionally missed rotations on multiple SIGHUPs +fixed #750, an RT segment merge leading to false positives and/or crashes in some cases +fixed #755, zones in snippets output +fixed #754, stopwords counting at snippet passage generation +fixed #723, fork/prefork index rotation in children processes +fixed #696, freeze on zero threshold in quorum operator +fixed #732, query escaping in SphinxSE +fixed #739, occasional crashes in MT mode on result set send +fixed #746, crash with a named list in SphinxQL option +fixed #674, AVG vs group order +fixed #734, occasional crashes attempting to report NULL errors +fixed #829, tail hits within field position modifier +fixed #712, missing query_mode, force_all_words snippet option defaults in Java API +fixed #721, added dupe removal on RT batch INSERT/REPLACE +fixed #720, potential extraneous highlighting after a blended keyword +fixed #702, exceptions vs star search +fixed #666, ext2 query grouping vs exceptions +fixed #688, WITHIN GROUP ORDER BY related crash +fixed #660, multi-queue batches vs dist_threads +fixed #678, crash on dict=keywords vs xmlpipe vs min_prefix_len +fixed #596, ECHILD vs scripted configs +fixed #653, dependency in expression, sorting, grouping +fixed #661, concurrent distributed searches vs workers=threads +fixed #646, crash on status query via UNIX socket +fixed #589, libexpat.dll missing from some Win32 build types +fixed #574, quorum match order +fixed multiple documentation issues (#372, #483, #495, #601, #623, #632, #654) +fixed that ondisk_dict did not affect RT indexes +fixed that string attributes check in indextool --check was erroneously sensitive to string data order +fixed a rare crash when using BEFORE operator +fixed an issue with multiforms vs BuildKeywords() +fixed an edge case in OR operator (emitted wrong hits order sometimes) +fixed aliasing in docinfo accessors that lead to very rare crashes and/or missing results +fixed a syntax error on a short token at the end of a query +fixed id64 filtering and performance degradation with range filters +fixed missing rankers in libsphinxclient +fixed missing SPH04 ranker in SphinxSE +fixed column names in sql_attr_multi sample (works with example.sql now) +fixed an issue with distributed local+remote setup vs aggregate functions +fixed case sensitive columns names in RT indexes +fixed a crash vs strings from multiple indexes in result set +fixed blended keywords vs snippets +fixed secure_connection vs MySQL protocol vs MySQL.NET connector +fixed that Python API did not works with Python 2.3 +fixed overshort_step vs snippets +fixed keyword staistics vs dist_threads searching +fixed multiforms vs query parsing (vs quorum) +fixed missed quorum words vs RT segments +fixed blended keywords occasionally skipping extra character when querying (eg "abc[]") +fixed Python API to handle int32 values +fixed prefix and infix indexing of joined fields +fixed MVA ranged query +fixed missing blended state reset on document boundary +fixed a crash on missing index while replaying binlog +fixed an error message on filter values overrun +fixed passage duplication in snippets in weight_order mode +fixed select clauses over 1K vs remote agents +fixed overshort accounting vs soft-whitespace tokens +fixed rotation vs workers=threads +fixed schema issues vs distributed indexes +fixed blended-escaped sequence parsing issue +fixed MySQL IN clause (values order etc) +fixed that post_index did not execute when 0 documents were succesfully indexed +fixed field position limit vs many hits +fixed that joined fields missed an end marker at field end +fixed that xxx_step settings were missing from .sph index header +fixed libsphinxclient missing request cleanup in sphinx_query() (eg after network errors) +fixed that index_weights were ignored when grouping +fixed multi wordforms vs blend_chars +fixed broken MVA output in SphinxQL +fixed a few RT leaks +fixed an issue with RT string storage going missing +fixed an issue with repeated queries vs dist_threads +fixed an issue with string attributes vs buffer overrun in SphinxQL +fixed unexpected character data warnings within ignored xmlpipe tags +fixed a crash in snippets with NEAR syntax query +fixed passage duplication in snippets +fixed libsphinxclient SIGPIPE handling +fixed libsphinxclient vs VS2003 compiler bug + + + +Version 1.10-beta, 19 jul 2010 + +added RT indexes support () +added prefork and threads support (workers directives) +added multi-threaded local searches in distributed indexes (dist_threads directive) +added common subquery cache (subtree_docs_cache, + subtree_hits_cache directives) +added string attributes support (sql_attr_string, + sql_field_string, + xml_attr_string, + xml_field_string directives) +added indexing-time word counter (sql_attr_str2wordcount, + sql_field_str2wordcount directives) +added CALL SNIPPETS(), + CALL KEYWORDS() SphinxQL statements +added , options to + SphinxQL SELECT statement +added insert-only SphinxQL-talking tables to SphinxSE (connection='sphinxql://host[:port]/index') +added option to SphinxSE queries +added backtrace on crash to searchd +added SQL+FS indexing, aka loading files by names fetched from SQL + (sql_file_field directive) +added a watchdog in threads mode to searchd +added automatic row phantoms elimination to index merge +added hitless indexing support (hitless_words directive) +added --check, --strip-path, --htmlstrip, --dumphitlist ... --wordid switches to indextool +added --stopwait, --logdebug switches to searchd +added --dump-rows, --verbose switches to indexer +added "blended" characters indexing support (blend_chars directive) +added joined/payload field indexing (sql_joined_field directive) +added FlushAttributes() API call +added query_mode, force_all_words, limit_passages, limit_words, start_passage_id, load_files, html_strip_mode, + allow_empty options, and %PASSAGE_ID% macro in before_match, after_match options + to BuildExcerpts() API call +added @groupby/@count/@distinct columns support to SELECT (but not to expressions) +added query-time keyword expansion support (expand_keywords directive, + SPH_RANK_SPH04 ranker) +added query batch size limit option (max_batch_queries directive; was hardcoded) +added SINT() function to expressions +improved SphinxQL syntax error reporting +improved expression optimizer (better constant handling) +improved dash handling within keywords (no longer treated as an operator) +improved snippets (better passage selection/trimming, around option now a hard limit) +optimized index format that yields ~20-30% smaller indexes +optimized sorting code (indexing time 1-5% faster on average; 100x faster in worst case) +optimized searchd startup time (moved .spa preindexing to indexer), added a progress bar +optimized queries against indexes with many attributes (eliminated redundant copying) +optimized 1-keyword queries (performace regression introduced in 0.9.9) +optimized SphinxQL protocol overheads, and performance on bigger result sets +optimized unbuffered attributes writes on index merge +changed attribute handling, duplicate names are strictly forbidden now +fixed that SphinxQL sessions could stall shutdown +fixed consts with leading minus in SphinxQL +fixed AND/OR precedence in expressions +fixed #334, AVG() on integers was not computed in floats +fixed #371, attribute flush vs 2+ GB files +fixed #373, segfault on distributed queries vs certain libc versions +fixed #398, stopwords not stopped in prefix/infix indexes +fixed #404, erroneous MVA failures in indextool --check +fixed #408, segfault on certain query batches (regular scan, plus a scan with MVA groupby) +fixed #431, occasional shutdown hangs in preforked workers +fixed #436, trunk checkout builds vs Solaris sh +fixed #440, escaping vs parentheses declared as valid in charset_table +fixed #442, occasional non-aligned free in MVA indexing +fixed #447, occasional crashes in MVA indexing +fixed #449, pconn busyloop on aborted clients on certain arches +fixed #465, build issue on Alpha +fixed #468, build issue in libsphinxclient +fixed #472, multiple stopword files failing to load +fixed #489, buffer overflow in query logging +fixed #493, Python API assertion after error returned from Query() +fixed #500, malformed MySQL packet when sending MVAs +fixed #504, SIGPIPE in libsphinxclient +fixed #506, better MySQL protocol commands support in SphinxQL (PING etc) +fixed #509, indexing ranged results from stored procedures + + + +Version 0.9.9-release, 02 dec 2009 + +added Open, Close, Status calls to libsphinxclient (C API) +added automatic persistent connection reopening to PHP, Python APIs +added 64-bit value/range filters, fullscan mode support to SphinxSE +MAJOR CHANGE, our IANA assigned ports are 9312 and 9306 respectively (goodbye, trusty 3312) +MAJOR CHANGE, erroneous filters now fail with an error (were silently ignored before) +optimized unbuffered .spa writes on merge +optimized 1-keyword queries ranking in extended2 mode +fixed #441 (IO race in case of highly conccurent load on a preopened) +fixed #434 (distrubuted indexes were not searchable via MySQL protocol) +fixed #317 (indexer MVA progress counter) +fixed #398 (stopwords not removed from search query) +fixed #328 (broken cutoff) +fixed #250 (now quoting paths w/spaces when installing Windows service) +fixed #348 (K-list was not updated on merge) +fixed #357 (destination index were not K-list-filtered on merge) +fixed #369 (precaching .spi files over 2 GBs) +fixed #438 (missing boundary proximity matches) +fixed #371 (.spa flush in case of files over 2 GBs) +fixed #373 (crashes on distributed queries via mysql proto) +fixed critical bugs in hit merging code +fixed #424 (ordinals could be misplaced during indexing in case of bitfields etc) +fixed #426 (failing SE build on Solaris; thanks to Ben Beecher) +fixed #423 (typo in SE caused crash on SHOW STATUS) +fixed #363 (handling of read_timeout over 2147 seconds) +fixed #376 (minor error message mismatch) +fixed #413 (minus in SphinxQL) +fixed #417 (floats w/o leading digit in SphinxQL) +fixed #403 (typo in SetFieldWeights name in Java API) +fixed index rotation vs persistent connections +fixed backslash handling in SphinxQL parser +fixed uint unpacking vs. PHP 5.2.9 (possibly other versions) +fixed #325 (filter settings send from SphinxSE) +fixed #352 (removed mysql wrapper around close() in SphinxSE) +fixed #389 (display error messages through SphinxSE status variable) +fixed linking with port-installed iconv on OS X +fixed negative 64-bit unpacking in PHP API +fixed #349 (escaping backslash in query emulation mode) +fixed #320 (disabled multi-query route when select items differ) +fixed #353 (better quorum counts check) +fixed #341 (merging of trailing hits; maybe other ranking issues too) +fixed #368 (partially; @field "" caused crashes; now resets field limit) +fixed #365 (field mask was leaking on field-limited terms) +fixed #339 (updated debug query dumper) +fixed #361 (added SetConnectTimeout() to Java API) +fixed #338 (added missing fullscan to mode check in Java API) +fixed #323 (added floats support to SphinxQL) +fixed #340 (support listen=port:proto syntax too) +fixed #332 (\r is legal SphinxQL space now) +fixed xmlpipe2 K-lists +fixed #322 (safety gaps in mysql protocol row buffer) +fixed #313 (return keyword stats for empty indexes too) +fixed #344 (invalid checkpoints after merge) +fixed #326 (missing CLOCK_xxx on FreeBSD) + + + +Version 0.9.9-rc2, 08 apr 2009 + +added IsConnectError(), Open(), Close() calls to Java API (bug #240) +added read_buffer, read_unhinted directives +added checks for build options returned by mysql_config (builds on Solaris now) +added fixed-RAM index merge (bug #169) +added logging chained queries count in case of (optimized) multi-queries +added GEODIST() function +added --status switch to searchd +added MySpell (OpenOffice) affix file support (bug #281) +added ODBC support (both Windows and UnixODBC) +added support for @id in IN() (bug #292) +added support for aggregate functions in GROUP BY (namely AVG, MAX, MIN, SUM) +added MySQL UDF that builds snippets using searchd +added write_buffer directive (defaults to 1M) +added xmlpipe_fixup_utf8 directive +added suggestions sample +added microsecond precision int64 timer (bug #282) +added listen_backlog directive +added max_xmlpipe2_field directive +added initial SphinxQL support to mysql41 handler, SELECT .../SHOW WARNINGS/STATUS/META are handled +added support for different network protocols, and mysql41 protocol +added fieldmask ranker, updated SphinxSE list of rankers +added mysql_ssl_xxx directives +added --cpustats (requires clock_gettime()) and --status switches to searchd +added performance counters, Status() API call +added overshort_step and stopword_step directives +added strict order operator (aka operator before, eg. "one << two << three") +added indextool utility, moved --dumpheader there, added --debugdocids, --dumphitlist options +added own RNG, reseeded on @random sort query (bug #183) +added field-start and field-end modifiers support (syntax is "^hello world$"; field-end requires reindex) +added MVA attribute support to IN() function +added AND, OR, and NOT support to expressions +improved logging of (optimized) multi-queries (now logging chained query count) +improved handshake error handling, fixed protocol version byte order (omg) +updated SphinxSE to protocol 1.22 +allowed phrase_boundary_step=-1 (trick to emulate keyword expansion) +removed SPH_MAX_QUERY_WORDS limit +fixed CLI search vs documents missing from DB (bug #257) +fixed libsphinxclient results leak on subsequent sphinx_run_queries call (bug #256) +fixed libsphinxclient handling of zero max_matches and cutoff (bug #208) +fixed Java API over-64K string reads (eg. big snippets) in Java API (bug #181) +fixed Java API 2nd Query() after network error in 1st Query() call (bug #308) +fixed typo-class bugs in SetFilterFloatRange (bug #259), SetSortMode (bug #248) +fixed missing @@relaxed support (bug #276), fixed missing error on @nosuchfield queries, documented @@relaxed +fixed UNIX socket permissions to 0777 (bug #288) +fixed xmlpipe2 crash on schemas with no fields, added better document structure checks +fixed (and optimized) expr parser vs IN() with huge (10K+) args count +fixed double EarlyCalc() in fullscan mode (minor performance impact) +fixed phrase boundary handling in some cases (on buffer end, on trailing whitespace) +fixes in snippets (aka excerpts) generation +fixed inline attrs vs id64 index corruption +fixed head searchd crash on config re-parse failure +fixed handling of numeric keywords with leading zeroes such as "007" (bug #251) +fixed junk in SphinxSE status variables (bug #304) +fixed wordlist checkpoints serialization (bug #236) +fixed unaligned docinfo id access (bug #230) +fixed GetRawBytes() vs oversized blocks (headers with over 32K charset_table should now work, bug #300) +fixed buffer overflow caused by too long dest wordform, updated tests +fixed IF() return type (was always int, is deduced now) +fixed legacy queries vs. special chars vs. multiple indexes +fixed write-write-read socket access pattern vs Nagle vs delays vs FreeBSD (oh wow) +fixed exceptions vs query-parser issue +fixed late calc vs @weight in expressions (bug #285) +fixed early lookup/calc vs filters (bug #284) +fixed emulated MATCH_ANY queries (empty proximity and phrase queries are allowed now) +fixed MATCH_ANY ranker vs fields with no matches +fixed index file size vs inplace_enable (bug #245) +fixed that old logs were not closed on USR1 (bug #221) +fixed handling of '!' alias to NOT operator (bug #237) +fixed error handling vs query steps (step failure was not reported) +fixed querying vs inline attributes +fixed stupid bug in escaping code, fixed EscapeString() and made it static +fixed parser vs @field -keyword, foo|@field bar, "" queries (bug #310) + + + +Version 0.9.9-rc1, 17 nov 2008 + +added min_stemming_len directive +added IsConnectError() API call (helps distingusih API vs remote errors) +added duplicate log messages filter to searchd +added --nodetach debugging switch to searchd +added blackhole agents support for debugging/testing (agent_blackhole directive) +added max_filters, max_filter_values directives (were hardcoded before) +added int64 expression evaluation path, automatic inference, and BIGINT() enforcer function +added crash handler for debugging (crash_log_path directive) +added MS SQL (aka SQL Server) source support (Windows only, mssql_winauth and mssql_unicode directives) +added indexer-side column unpacking feature (unpack_zlib, unpack_mysqlcompress directives) +added nested brackers and NOTs support to query language, rewritten query parser +added persistent connections support (Open() and Close() API calls) +added index_exact_words feature, and exact form operator to query language ("hello =world") +added status variables support to SphinxSE (SHOW STATUS LIKE 'sphinx_%') +added max_packet_size directive (was hardcoded at 8M before) +added UNIX socket support, and multi-interface support (listen directive) +added star-syntax support to BuildExcerpts() API call +added inplace inversion of .spa and .spp (inplace_enable directive, 1.5-2x less disk space for indexing) +added builtin Czech stemmer (morphology=stem_cz) +added IDIV(), NOW(), INTERVAL(), IN() functions to expressions +added index-level early-reject based on filters +added MVA updates feature (mva_updates_pool directive) +added select-list feature with computed expressions support (see SetSelect() API call, test.php --select switch), protocol 1.22 +added integer expressions support (2x faster than float) +added multiforms support (multiple source words in wordforms file) +added legacy rankers (MATCH_ALL/MATCH_ANY/etc), removed legacy matching code (everything runs on V2 engine now) +added field position limit modifier to field operator (syntax: @title[50] hello world) +added killlist support (sql_query_killlist directive, --merge-killlists switch) +added on-disk SPI support (ondisk_dict directive) +added indexer IO stats +added periodic .spa flush (attr_flush_period directive) +added config reload on SIGHUP +added per-query attribute overrides feature (see SetOverride() API call); protocol 1.21 +added signed 64bit attrs support (sql_attr_bigint directive) +improved HTML stripper to also skip PIs (<? ... ?>, such as <?php ... ?>) +improved excerpts speed (upto 50x faster on big documents) +fixed a short window of searchd inaccessibility on startup (started listen()ing too early before) +fixed .spa loading on systems where read() is 2GB capped +fixed infixes vs morphology issues +fixed backslash escaping, added backslash to EscapeString() +fixed handling of over-2GB dictionary files (.spi) + + + +Version 0.9.8.1, 30 oct 2008 + +added configure script to libsphinxclient +changed proximity/quorum operator syntax to require whitespace after length +fixed potential head process crash on SIGPIPE during "maxed out" message +fixed handling of incomplete remote replies (caused over-degraded distributed results, in rare cases) +fixed sending of big remote requests (caused distributed requests to fail, in rare cases) +fixed FD_SET() overflow (caused searchd to crash on startup, in rare cases) +fixed MVA vs distributed indexes (caused loss of 1st MVA value in result set) +fixed tokenizing of exceptions terminated by specials (eg. "GPS AT&T" in extended mode) +fixed buffer overrun in stemmer on overlong tokens occasionally emitted by proximity/quorum operator parser (caused crashes on certain proximity/quorum queries) +fixed wordcount ranker (could be dropping hits) +fixed --merge feature (numerous different fixes, caused broken indexes) +fixed --merge-dst-range performance +fixed prefix/infix generation for stopwords +fixed ignore_chars vs specials +fixed misplaced F_SETLKW check (caused certain build types, eg. RPM build on FC8, to fail) +fixed dictionary-defined charsets support in spelldump, added \x-style wordchars support +fixed Java API to properly send long strings (over 64K; eg. long document bodies for excerpts) +fixed Python API to accept offset/limit of 'long' type +fixed default ID range (that filtered out all 64-bit values) in Java and Python APIs + + + +Version 0.9.8, 14 jul 2008 +Indexing + +added support for 64-bit document and keyword IDs, --enable-id64 switch to configure +added support for floating point attributes +added support for bitfields in attributes, sql_attr_bool directive and bit-widths part in sql_attr_uint directive +added support for multi-valued attributes (MVA) +added metaphone preprocessor +added libstemmer library support, provides stemmers for a number of additional languages +added xmlpipe2 source type, that supports arbitrary fields and attributes +added word form dictionaries, wordforms directive (and spelldump utility) +added tokenizing exceptions, exceptions directive +added an option to fully remove element contents to HTML stripper, html_remove_elements directive +added HTML entities decoder (with full XHTML1 set support) to HTML stripper +added per-index HTML stripping settings, html_strip, html_index_attrs, and html_remove_elements directives +added IO load throttling, max_iops and max_iosize directives +added SQL load throttling, sql_ranged_throttle directive +added an option to index prefixes/infixes for given fields only, prefix_fields and infix_fields directives +added an option to ignore certain characters (instead of just treating them as whitespace), ignore_chars directive +added an option to increment word position on phrase boundary characters, phrase_boundary and phrase_boundary_step directives +added --merge-dst-range switch (and filters) to index merging feature (--merge switch) +added mysql_connect_flags directive (eg. to reduce indexing time MySQL network traffic and/or time) +improved ordinals sorting; now runs in fixed RAM +improved handling of documents with zero/NULL ids, now skipping them instead of aborting + +Search daemon + +added an option to unlink old index on succesful rotation, unlink_old directive +added an option to keep index files open at all times (fixes subtle races on rotation), preopen and preopen_indexes directives +added an option to profile searchd disk I/O, --iostats command-line option +added an option to rotate index seamlessly (fully avoids query stalls), seamless_rotate directive +added HTML stripping support to excerpts (uses per-index settings) +added 'exact_phrase', 'single_passage', 'use_boundaries', 'weight_order 'options to BuildExcerpts() API call +added distributed attribute updates propagation +added distributed retries on master node side +added log reopen on SIGUSR1 +added --stop switch (sends SIGTERM to running instance) +added Windows service mode, and --servicename switch +added Windows --rotate support +improved log timestamping, now with millisecond precision + +Querying + +added extended engine V2 (faster, cleaner, better; SPH_MATCH_EXTENDED2 mode) +added ranking modes support (V2 engine only; SetRankingMode() API call) +added quorum searching support to query language (V2 engine only; example: "any three of all these words"/3) +added query escaping support to query language, and EscapeString() API call +added multi-field syntax support to query language (example: "@(field1,field2) something"), and @@relaxed field checks option +added optional star-syntax ('word*') support in keywords, enable_star directive (for prefix/infix indexes only) +added full-scan support (query must be fully empty; can perform block-reject optimization) +added COUNT(DISTINCT(attr)) calculation support, SetGroupDistinct() API call +added group-by on MVA support, SetArrayResult() PHP API call +added per-index weights feature, SetIndexWeights() API call +added geodistance support, SetGeoAnchor() API call +added result set sorting by arbitrary expressions in run time (eg. "@weight+log(price)*2.5"), SPH_SORT_EXPR mode +added result set sorting by @custom compile-time sorting function (see src/sphinxcustomsort.inl) +added result set sorting by @random value +added result set merging for indexes with different schemas +added query comments support (3rd arg to Query()/AddQuery() API calls, copied verbatim to query log) +added keyword extraction support, BuildKeywords() API call +added binding field weights by name, SetFieldWeights() API call +added optional limit on query time, SetMaxQueryTime() API call +added optional limit on found matches count (4rd arg to SetLimits() API call, so-called 'cutoff') + +APIs and SphinxSE + +added pure C API (libsphinxclient) +added Ruby API (thanks to Dmytro Shteflyuk) +added Java API +added SphinxSE support for MVAs (use varchar), floats (use float), 64bit docids (use bigint) +added SphinxSE options "floatrange", "geoanchor", "fieldweights", "indexweights", "maxquerytime", "comment", "host" and "port"; and support for "expr:CLAUSE" +improved SphinxSE max query size (using MySQL condition pushdown), upto 256K now + +General + +added scripting (shebang syntax) support to config files (example: #!/usr/bin/php in the first line) +added unified config handling and validation to all programs +added unified documentation +added .spec file for RPM builds +added automated testing suite +improved index locking, now fcntl()-based instead of buggy file-existence-based +fixed unaligned RAM accesses, now works on SPARC and ARM + +Changes and fixes since 0.9.8-rc2 + +added pure C API (libsphinxclient) +added Ruby API +added SetConnectTimeout() PHP API call +added allowed type check to UpdateAttributes() handler (bug #174) +added defensive MVA checks on index preload (protection against broken indexes, bug #168) +added sphinx-min.conf sample file +added --without-iconv switch to configure +removed redundant -lz dependency in searchd +removed erroneous "xmlpipe2 deprecated" warning +fixed EINTR handling in piped read (bug #166) +fixup query time before logging and sending to client (bug #153) +fixed attribute updates vs full-scan early-reject index (bug #149) +fixed gcc warnings (bug #160) +fixed mysql connection attempt vs pgsql source type (bug #165) +fixed 32-bit wraparound when preloading over 2 GB files +fixed "out of memory" message vs over 2 GB allocs (bug #116) +fixed unaligned RAM access detection on ARM (where unaligned reads do not crash but produce wrong results) +fixed missing full scan results in some cases +fixed several bugs in --merge, --merge-dst-range +fixed @geodist vs MultiQuery and filters, @expr vs MultiQuery +fixed GetTokenEnd() vs 1-grams (was causing crash in excerpts) +fixed sql_query_range to handle empty strings in addition to NULL strings (Postgres specific) +fixed morphology=none vs infixes +fixed case sensitive attributes names in UpdateAttributes() +fixed ext2 ranking vs. stopwords (now using atompos from query parser) +fixed EscapeString() call +fixed escaped specials (now handled as whitespace if not in charset) +fixed schema minimizer (now handles type/size mismatches) +fixed word stats in extended2; stemmed form is now returned +fixed spelldump case folding vs dictionary-defined character sets +fixed Postgres BOOLEAN handling +fixed enforced "inline" docinfo on empty indexes (normally ok, but index merge was really confused) +fixed rare count(distinct) out-of-bounds issue (it occasionaly caused too high @distinct values) +fixed hangups on documents with id=DOCID_MAX in some cases +fixed rare crash in tokenizer (prefixed synonym vs. input stream eof) +fixed query parser vs "aaa (bbb ccc)|ddd" queries +fixed BuildExcerpts() request in Java API +fixed Postgres specific memory leak +fixed handling of overshort keywords (less than min_word_len) +fixed HTML stripper (now emits space after indexed attributes) +fixed 32-field case in query parser +fixed rare count(distinct) vs. querying multiple local indexes vs. reusable sorter issue +fixed sorting of negative floats in SPH_SORT_EXTENDED mode + + + +Version 0.9.7, 02 apr 2007 + +added support for +added support for upto 5 sort-by attrs (in extended sorting mode) +added support for separate groups sorting clause (in group-by mode) +added support for on-the-fly attribute updates (PRE-ALPHA; will change heavily; use for preliminary testing ONLY) +added support for zero/NULL attributes +added support for 0.9.7 features to SphinxSE +added support for n-grams (alpha, 1-grams only for now) +added support for warnings reported to client +added support for exclude-filters +added support for prefix and infix indexing (see , ) +added syntax to reset current field to query language +added removal of duplicate entries in query index order +added PHP API workarounds for PHP signed/unsigned braindamage +added locks to avoid two concurrent indexers working on same index +added check for existing attributes vs. case +improved groupby code a lot (better precision, and upto 25x times faster in extreme cases) +improved error handling and reporting +improved handling of broken indexes (reports error instead of hanging/crashing) +improved limits for attributes and wordlists (now able to map over 4 GB on x64 and over 2 GB on x32 where possible) +improved pressure in head daemon (search time should not degrade with time any more) +improved test.php command line options +improved error reporting (distributed query, broken index etc issues now reported to client) +changed default network packet size to be 8M, added extra checks +fixed division by zero in BM25 on 1-document collections (in extended matching mode) +fixed .spl files getting unlinked +fixed crash in schema compatibility test +fixed UTF-8 Russian stemmer +fixed requested matches count when querying distributed agents +fixed signed vs. unsigned issues everywhere (ranged queries, CLI search output, and obtaining docid) +fixed potential crashes vs. negative query offsets +fixed 0-match docs vs. extended mode vs. stats +fixed group/timestamp filters being ignored if querying from older clients +fixed docs to mention source type +fixed issues with explicit '&' in extended matching mode +fixed wrong assertion in SBCS encoder +fixed crashes with no-attribute indexes after rotate + + + +Version 0.9.7-rc2, 15 dec 2006 + +added support for extended matching mode (query language) +added support for extended sorting mode (sorting clauses) +added support for SBCS excerpts +added for attributes and wordlist (improves search time, speeds up greatly) +fixed attribute name handling to be case insensitive +fixed default compiler options to simplify post-mortem debugging (added , removed ) +fixed rare memory leak +fixed "hello hello" queries in "match phrase" mode +fixed issue with excerpts, texts and overlong queries +fixed logging multiple index name (no longer tokenized) +fixed trailing stopword not flushed from tokenizer +fixed boolean evaluation +fixed pidfile being wrongly on failure +fixed (they conflicted with well-known paths) +fixes for 64-bit platforms + + + +Version 0.9.7-rc1, 26 oct 2006 + +added alpha index merging code +added an option to decrease per-query +added an option to specify IP address for searchd to listen on +added support for unlimited amount of configured sources and indexes +added support for group-by queries +added support for /2 range modifier in charset_table +added support for arbitrary amount of document attributes +added logging filter count and index name +added option to configure to compile in debug mode +added when compiling in default mode +improved search time (added doclist size hints, in-memory wordlist cache, and used VLB coding everywhere) +improved (refactored) SQL driver code (adding new drivers should be very easy now) +improved exceprts generation +fixed issue with empty sources and ranged queries +fixed querying purely remote distributed indexes +fixed suffix length check in English stemmer in some cases +fixed UTF-8 decoder for codes over U+20000 (for CJK) +fixed UTF-8 encoder for 3-byte sequences (for CJK) +fixed overshort (less than ) words prepended to next field +fixed source connection order (indexer does not connect to all sources at once now) +fixed line numbering in config parser +fixed some issues with index rotation + + + +Version 0.9.6, 24 jul 2006 + +added support for empty indexes +added support for multiple sql_query_pre/post/post_index +fixed timestamp ranges filter in "match any" mode +fixed configure issues with --without-mysql and --with-pgsql options +fixed building on Solaris 9 + + + +Version 0.9.6-rc1, 26 jun 2006 + +added boolean queries support (experimental, beta version) +added simple file-based query cache (experimental, beta version) +added storage engine for MySQL 5.0 and 5.1 (experimental, beta version) +added GNU style configure script +added new searchd protocol (all binary, and should be backwards compatible) +added distributed searching support to searchd +added PostgreSQL driver +added excerpts generation +added option to index +added option to searchd, removed hardcoded MAX_MATCHES limit +added initial documentation, and a working example.sql +added support for multiple sources per index +added soundex support +added group ID ranges support +added command-line option to search utility +added option to indexer +added option to search +fixed UTF-8 decoder (3-byte codepoints did not work) +fixed PHP API to handle big result sets faster +fixed config parser to handle empty values properly +fixed redundant time(NULL) calls in time-segments mode + + + + + + diff --git a/coreseek/csft-4.1/doc/sphinx.xsl b/coreseek/csft-4.1/doc/sphinx.xsl new file mode 100755 index 0000000..7fa29fb --- /dev/null +++ b/coreseek/csft-4.1/doc/sphinx.xsl @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/coreseek/csft-4.1/example.sql b/coreseek/csft-4.1/example.sql new file mode 100755 index 0000000..5c58bb9 --- /dev/null +++ b/coreseek/csft-4.1/example.sql @@ -0,0 +1,30 @@ +DROP TABLE IF EXISTS test.documents; +CREATE TABLE test.documents +( + id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, + group_id INTEGER NOT NULL, + group_id2 INTEGER NOT NULL, + date_added DATETIME NOT NULL, + title VARCHAR(255) NOT NULL, + content TEXT NOT NULL +); + +REPLACE INTO test.documents ( id, group_id, group_id2, date_added, title, content ) VALUES + ( 1, 1, 5, NOW(), 'test one', 'this is my test document number one. also checking search within phrases.' ), + ( 2, 1, 6, NOW(), 'test two', 'this is my test document number two' ), + ( 3, 2, 7, NOW(), 'another doc', 'this is another group' ), + ( 4, 2, 8, NOW(), 'doc number four', 'this is to test groups' ); + +DROP TABLE IF EXISTS test.tags; +CREATE TABLE test.tags +( + docid INTEGER NOT NULL, + tagid INTEGER NOT NULL, + UNIQUE(docid,tagid) +); + +INSERT INTO test.tags VALUES + (1,1), (1,3), (1,5), (1,7), + (2,6), (2,4), (2,2), + (3,15), + (4,7), (4,40); diff --git a/coreseek/csft-4.1/libexpat/libexpat.sln b/coreseek/csft-4.1/libexpat/libexpat.sln new file mode 100755 index 0000000..a864d55 --- /dev/null +++ b/coreseek/csft-4.1/libexpat/libexpat.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libexpat", "libexpat.vcproj", "{7010C937-28B3-46A2-903C-BEBA2F5EAE4D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7010C937-28B3-46A2-903C-BEBA2F5EAE4D}.Debug|Win32.ActiveCfg = Debug|Win32 + {7010C937-28B3-46A2-903C-BEBA2F5EAE4D}.Debug|Win32.Build.0 = Debug|Win32 + {7010C937-28B3-46A2-903C-BEBA2F5EAE4D}.Release|Win32.ActiveCfg = Release|Win32 + {7010C937-28B3-46A2-903C-BEBA2F5EAE4D}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/coreseek/csft-4.1/libexpat/libexpat.vcproj b/coreseek/csft-4.1/libexpat/libexpat.vcproj new file mode 100755 index 0000000..042f808 --- /dev/null +++ b/coreseek/csft-4.1/libexpat/libexpat.vcproj @@ -0,0 +1,177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/api.Po b/coreseek/csft-4.1/libstemmer_c/.deps/api.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/api.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/libstemmer.Po b/coreseek/csft-4.1/libstemmer_c/.deps/libstemmer.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/libstemmer.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_danish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_danish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_danish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_dutch.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_dutch.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_dutch.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_english.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_english.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_english.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_finnish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_finnish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_finnish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_french.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_french.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_french.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_german.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_german.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_german.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_hungarian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_hungarian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_hungarian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_italian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_italian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_italian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_norwegian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_norwegian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_norwegian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_porter.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_porter.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_porter.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_portuguese.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_portuguese.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_portuguese.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_spanish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_spanish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_spanish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_swedish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_swedish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_1_swedish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_2_romanian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_2_romanian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_ISO_8859_2_romanian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_KOI8_R_russian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_KOI8_R_russian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_KOI8_R_russian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_danish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_danish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_danish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_dutch.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_dutch.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_dutch.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_english.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_english.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_english.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_finnish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_finnish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_finnish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_french.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_french.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_french.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_german.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_german.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_german.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_hungarian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_hungarian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_hungarian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_italian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_italian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_italian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_norwegian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_norwegian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_norwegian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_porter.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_porter.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_porter.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_portuguese.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_portuguese.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_portuguese.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_romanian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_romanian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_romanian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_russian.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_russian.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_russian.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_spanish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_spanish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_spanish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_swedish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_swedish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_swedish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_turkish.Po b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_turkish.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/stem_UTF_8_turkish.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/.deps/utilities.Po b/coreseek/csft-4.1/libstemmer_c/.deps/utilities.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/.deps/utilities.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/libstemmer_c/Makefile b/coreseek/csft-4.1/libstemmer_c/Makefile new file mode 100644 index 0000000..e58fa40 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/Makefile @@ -0,0 +1,1111 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# libstemmer_c/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# libstemmer/mkinc.mak: List of stemming module source files +# +# This file is generated by mkmodules.pl from a list of module names. +# Do not edit manually. +# +# Modules included by this file are: danish, dutch, english, finnish, french, +# german, hungarian, italian, norwegian, porter, portuguese, romanian, +# russian, spanish, swedish, turkish + + + +pkgdatadir = $(datadir)/sphinx +pkgincludedir = $(includedir)/sphinx +pkglibdir = $(libdir)/sphinx +pkglibexecdir = $(libexecdir)/sphinx +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +DIST_COMMON = README $(am__noinst_HEADERS_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/mkinc.mak +subdir = libstemmer_c +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +libstemmer_a_AR = $(AR) $(ARFLAGS) +libstemmer_a_LIBADD = +am__libstemmer_a_SOURCES_DIST = src_c/stem_ISO_8859_1_danish.c \ + src_c/stem_UTF_8_danish.c src_c/stem_ISO_8859_1_dutch.c \ + src_c/stem_UTF_8_dutch.c src_c/stem_ISO_8859_1_english.c \ + src_c/stem_UTF_8_english.c src_c/stem_ISO_8859_1_finnish.c \ + src_c/stem_UTF_8_finnish.c src_c/stem_ISO_8859_1_french.c \ + src_c/stem_UTF_8_french.c src_c/stem_ISO_8859_1_german.c \ + src_c/stem_UTF_8_german.c src_c/stem_ISO_8859_1_hungarian.c \ + src_c/stem_UTF_8_hungarian.c src_c/stem_ISO_8859_1_italian.c \ + src_c/stem_UTF_8_italian.c src_c/stem_ISO_8859_1_norwegian.c \ + src_c/stem_UTF_8_norwegian.c src_c/stem_ISO_8859_1_porter.c \ + src_c/stem_UTF_8_porter.c src_c/stem_ISO_8859_1_portuguese.c \ + src_c/stem_UTF_8_portuguese.c src_c/stem_ISO_8859_2_romanian.c \ + src_c/stem_UTF_8_romanian.c src_c/stem_KOI8_R_russian.c \ + src_c/stem_UTF_8_russian.c src_c/stem_ISO_8859_1_spanish.c \ + src_c/stem_UTF_8_spanish.c src_c/stem_ISO_8859_1_swedish.c \ + src_c/stem_UTF_8_swedish.c src_c/stem_UTF_8_turkish.c \ + runtime/api.c runtime/utilities.c libstemmer/libstemmer.c +#am__objects_1 = stem_ISO_8859_1_danish.$(OBJEXT) \ +# stem_UTF_8_danish.$(OBJEXT) \ +# stem_ISO_8859_1_dutch.$(OBJEXT) \ +# stem_UTF_8_dutch.$(OBJEXT) \ +# stem_ISO_8859_1_english.$(OBJEXT) \ +# stem_UTF_8_english.$(OBJEXT) \ +# stem_ISO_8859_1_finnish.$(OBJEXT) \ +# stem_UTF_8_finnish.$(OBJEXT) \ +# stem_ISO_8859_1_french.$(OBJEXT) \ +# stem_UTF_8_french.$(OBJEXT) \ +# stem_ISO_8859_1_german.$(OBJEXT) \ +# stem_UTF_8_german.$(OBJEXT) \ +# stem_ISO_8859_1_hungarian.$(OBJEXT) \ +# stem_UTF_8_hungarian.$(OBJEXT) \ +# stem_ISO_8859_1_italian.$(OBJEXT) \ +# stem_UTF_8_italian.$(OBJEXT) \ +# stem_ISO_8859_1_norwegian.$(OBJEXT) \ +# stem_UTF_8_norwegian.$(OBJEXT) \ +# stem_ISO_8859_1_porter.$(OBJEXT) \ +# stem_UTF_8_porter.$(OBJEXT) \ +# stem_ISO_8859_1_portuguese.$(OBJEXT) \ +# stem_UTF_8_portuguese.$(OBJEXT) \ +# stem_ISO_8859_2_romanian.$(OBJEXT) \ +# stem_UTF_8_romanian.$(OBJEXT) \ +# stem_KOI8_R_russian.$(OBJEXT) \ +# stem_UTF_8_russian.$(OBJEXT) \ +# stem_ISO_8859_1_spanish.$(OBJEXT) \ +# stem_UTF_8_spanish.$(OBJEXT) \ +# stem_ISO_8859_1_swedish.$(OBJEXT) \ +# stem_UTF_8_swedish.$(OBJEXT) \ +# stem_UTF_8_turkish.$(OBJEXT) \ +# api.$(OBJEXT) utilities.$(OBJEXT) \ +# libstemmer.$(OBJEXT) +#am_libstemmer_a_OBJECTS = $(am__objects_1) +libstemmer_a_OBJECTS = $(am_libstemmer_a_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(top_builddir)/config +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libstemmer_a_SOURCES) +DIST_SOURCES = $(am__libstemmer_a_SOURCES_DIST) +am__noinst_HEADERS_DIST = src_c/stem_ISO_8859_1_danish.h \ + src_c/stem_UTF_8_danish.h src_c/stem_ISO_8859_1_dutch.h \ + src_c/stem_UTF_8_dutch.h src_c/stem_ISO_8859_1_english.h \ + src_c/stem_UTF_8_english.h src_c/stem_ISO_8859_1_finnish.h \ + src_c/stem_UTF_8_finnish.h src_c/stem_ISO_8859_1_french.h \ + src_c/stem_UTF_8_french.h src_c/stem_ISO_8859_1_german.h \ + src_c/stem_UTF_8_german.h src_c/stem_ISO_8859_1_hungarian.h \ + src_c/stem_UTF_8_hungarian.h src_c/stem_ISO_8859_1_italian.h \ + src_c/stem_UTF_8_italian.h src_c/stem_ISO_8859_1_norwegian.h \ + src_c/stem_UTF_8_norwegian.h src_c/stem_ISO_8859_1_porter.h \ + src_c/stem_UTF_8_porter.h src_c/stem_ISO_8859_1_portuguese.h \ + src_c/stem_UTF_8_portuguese.h src_c/stem_ISO_8859_2_romanian.h \ + src_c/stem_UTF_8_romanian.h src_c/stem_KOI8_R_russian.h \ + src_c/stem_UTF_8_russian.h src_c/stem_ISO_8859_1_spanish.h \ + src_c/stem_UTF_8_spanish.h src_c/stem_ISO_8859_1_swedish.h \ + src_c/stem_UTF_8_swedish.h src_c/stem_UTF_8_turkish.h \ + include/libstemmer.h libstemmer/modules.h runtime/api.h \ + runtime/header.h +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run aclocal-1.11 +AMTAR = $${TAR-tar} +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run automake-1.11 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG +CONFDIR = /usr/local/coreseek/var +CPP = gcc -E +CPPFLAGS = -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ +CXX = g++ +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBOBJS = +LIBRT = -lrt +LIBS = -ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +MMSEG_CFLAGS = -I/usr/local/mmseg3/include/mmseg/ +MMSEG_LIBS = -L/usr/local/mmseg3/lib/ -lmmseg +MYSQL_CFLAGS = -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g +MYSQL_LIBS = -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl +OBJEXT = o +PACKAGE = sphinx +PACKAGE_BUGREPORT = shodan(at)shodan.ru +PACKAGE_NAME = sphinx +PACKAGE_STRING = sphinx 1.11 +PACKAGE_TARNAME = sphinx +PACKAGE_URL = +PACKAGE_VERSION = 1.11 +PATH_SEPARATOR = : +PGSQL_CFLAGS = +PGSQL_LIBS = +PYTHON = /usr/bin/python +PYTHON_CPPFLAGS = +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_LIBS = +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.7 +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/bash +STRIP = +VERSION = 1.11 +abs_builddir = /home/coreseek/coreseek-4.1-beta/csft-4.1/libstemmer_c +abs_srcdir = /home/coreseek/coreseek-4.1-beta/csft-4.1/libstemmer_c +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +ac_ct_CC = gcc +ac_ct_CXX = g++ +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build_alias = +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host_alias = +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pgconfig = +pkgpyexecdir = ${pyexecdir}/sphinx +pkgpythondir = ${pythondir}/sphinx +prefix = /usr/local/coreseek +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.7/site-packages +pythondir = ${prefix}/lib/python2.7/site-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +#noinst_LIBRARIES = libstemmer.a +#snowball_sources = \ +# src_c/stem_ISO_8859_1_danish.c \ +# src_c/stem_UTF_8_danish.c \ +# src_c/stem_ISO_8859_1_dutch.c \ +# src_c/stem_UTF_8_dutch.c \ +# src_c/stem_ISO_8859_1_english.c \ +# src_c/stem_UTF_8_english.c \ +# src_c/stem_ISO_8859_1_finnish.c \ +# src_c/stem_UTF_8_finnish.c \ +# src_c/stem_ISO_8859_1_french.c \ +# src_c/stem_UTF_8_french.c \ +# src_c/stem_ISO_8859_1_german.c \ +# src_c/stem_UTF_8_german.c \ +# src_c/stem_ISO_8859_1_hungarian.c \ +# src_c/stem_UTF_8_hungarian.c \ +# src_c/stem_ISO_8859_1_italian.c \ +# src_c/stem_UTF_8_italian.c \ +# src_c/stem_ISO_8859_1_norwegian.c \ +# src_c/stem_UTF_8_norwegian.c \ +# src_c/stem_ISO_8859_1_porter.c \ +# src_c/stem_UTF_8_porter.c \ +# src_c/stem_ISO_8859_1_portuguese.c \ +# src_c/stem_UTF_8_portuguese.c \ +# src_c/stem_ISO_8859_2_romanian.c \ +# src_c/stem_UTF_8_romanian.c \ +# src_c/stem_KOI8_R_russian.c \ +# src_c/stem_UTF_8_russian.c \ +# src_c/stem_ISO_8859_1_spanish.c \ +# src_c/stem_UTF_8_spanish.c \ +# src_c/stem_ISO_8859_1_swedish.c \ +# src_c/stem_UTF_8_swedish.c \ +# src_c/stem_UTF_8_turkish.c \ +# runtime/api.c \ +# runtime/utilities.c \ +# libstemmer/libstemmer.c + +#snowball_headers = \ +# src_c/stem_ISO_8859_1_danish.h \ +# src_c/stem_UTF_8_danish.h \ +# src_c/stem_ISO_8859_1_dutch.h \ +# src_c/stem_UTF_8_dutch.h \ +# src_c/stem_ISO_8859_1_english.h \ +# src_c/stem_UTF_8_english.h \ +# src_c/stem_ISO_8859_1_finnish.h \ +# src_c/stem_UTF_8_finnish.h \ +# src_c/stem_ISO_8859_1_french.h \ +# src_c/stem_UTF_8_french.h \ +# src_c/stem_ISO_8859_1_german.h \ +# src_c/stem_UTF_8_german.h \ +# src_c/stem_ISO_8859_1_hungarian.h \ +# src_c/stem_UTF_8_hungarian.h \ +# src_c/stem_ISO_8859_1_italian.h \ +# src_c/stem_UTF_8_italian.h \ +# src_c/stem_ISO_8859_1_norwegian.h \ +# src_c/stem_UTF_8_norwegian.h \ +# src_c/stem_ISO_8859_1_porter.h \ +# src_c/stem_UTF_8_porter.h \ +# src_c/stem_ISO_8859_1_portuguese.h \ +# src_c/stem_UTF_8_portuguese.h \ +# src_c/stem_ISO_8859_2_romanian.h \ +# src_c/stem_UTF_8_romanian.h \ +# src_c/stem_KOI8_R_russian.h \ +# src_c/stem_UTF_8_russian.h \ +# src_c/stem_ISO_8859_1_spanish.h \ +# src_c/stem_UTF_8_spanish.h \ +# src_c/stem_ISO_8859_1_swedish.h \ +# src_c/stem_UTF_8_swedish.h \ +# src_c/stem_UTF_8_turkish.h \ +# include/libstemmer.h \ +# libstemmer/modules.h \ +# runtime/api.h \ +# runtime/header.h + +#noinst_HEADERS = $(snowball_headers) +#libstemmer_a_SOURCES = $(snowball_sources) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(srcdir)/mkinc.mak $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libstemmer_c/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libstemmer_c/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(srcdir)/mkinc.mak: + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libstemmer.a: $(libstemmer_a_OBJECTS) $(libstemmer_a_DEPENDENCIES) $(EXTRA_libstemmer_a_DEPENDENCIES) + -rm -f libstemmer.a + $(libstemmer_a_AR) libstemmer.a $(libstemmer_a_OBJECTS) $(libstemmer_a_LIBADD) + $(RANLIB) libstemmer.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/api.Po +include ./$(DEPDIR)/libstemmer.Po +include ./$(DEPDIR)/stem_ISO_8859_1_danish.Po +include ./$(DEPDIR)/stem_ISO_8859_1_dutch.Po +include ./$(DEPDIR)/stem_ISO_8859_1_english.Po +include ./$(DEPDIR)/stem_ISO_8859_1_finnish.Po +include ./$(DEPDIR)/stem_ISO_8859_1_french.Po +include ./$(DEPDIR)/stem_ISO_8859_1_german.Po +include ./$(DEPDIR)/stem_ISO_8859_1_hungarian.Po +include ./$(DEPDIR)/stem_ISO_8859_1_italian.Po +include ./$(DEPDIR)/stem_ISO_8859_1_norwegian.Po +include ./$(DEPDIR)/stem_ISO_8859_1_porter.Po +include ./$(DEPDIR)/stem_ISO_8859_1_portuguese.Po +include ./$(DEPDIR)/stem_ISO_8859_1_spanish.Po +include ./$(DEPDIR)/stem_ISO_8859_1_swedish.Po +include ./$(DEPDIR)/stem_ISO_8859_2_romanian.Po +include ./$(DEPDIR)/stem_KOI8_R_russian.Po +include ./$(DEPDIR)/stem_UTF_8_danish.Po +include ./$(DEPDIR)/stem_UTF_8_dutch.Po +include ./$(DEPDIR)/stem_UTF_8_english.Po +include ./$(DEPDIR)/stem_UTF_8_finnish.Po +include ./$(DEPDIR)/stem_UTF_8_french.Po +include ./$(DEPDIR)/stem_UTF_8_german.Po +include ./$(DEPDIR)/stem_UTF_8_hungarian.Po +include ./$(DEPDIR)/stem_UTF_8_italian.Po +include ./$(DEPDIR)/stem_UTF_8_norwegian.Po +include ./$(DEPDIR)/stem_UTF_8_porter.Po +include ./$(DEPDIR)/stem_UTF_8_portuguese.Po +include ./$(DEPDIR)/stem_UTF_8_romanian.Po +include ./$(DEPDIR)/stem_UTF_8_russian.Po +include ./$(DEPDIR)/stem_UTF_8_spanish.Po +include ./$(DEPDIR)/stem_UTF_8_swedish.Po +include ./$(DEPDIR)/stem_UTF_8_turkish.Po +include ./$(DEPDIR)/utilities.Po + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +stem_ISO_8859_1_danish.o: src_c/stem_ISO_8859_1_danish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_danish.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_danish.Tpo -c -o stem_ISO_8859_1_danish.o `test -f 'src_c/stem_ISO_8859_1_danish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_danish.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_danish.Tpo $(DEPDIR)/stem_ISO_8859_1_danish.Po +# source='src_c/stem_ISO_8859_1_danish.c' object='stem_ISO_8859_1_danish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_danish.o `test -f 'src_c/stem_ISO_8859_1_danish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_danish.c + +stem_ISO_8859_1_danish.obj: src_c/stem_ISO_8859_1_danish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_danish.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_danish.Tpo -c -o stem_ISO_8859_1_danish.obj `if test -f 'src_c/stem_ISO_8859_1_danish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_danish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_danish.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_danish.Tpo $(DEPDIR)/stem_ISO_8859_1_danish.Po +# source='src_c/stem_ISO_8859_1_danish.c' object='stem_ISO_8859_1_danish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_danish.obj `if test -f 'src_c/stem_ISO_8859_1_danish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_danish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_danish.c'; fi` + +stem_UTF_8_danish.o: src_c/stem_UTF_8_danish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_danish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_danish.Tpo -c -o stem_UTF_8_danish.o `test -f 'src_c/stem_UTF_8_danish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_danish.c + $(am__mv) $(DEPDIR)/stem_UTF_8_danish.Tpo $(DEPDIR)/stem_UTF_8_danish.Po +# source='src_c/stem_UTF_8_danish.c' object='stem_UTF_8_danish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_danish.o `test -f 'src_c/stem_UTF_8_danish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_danish.c + +stem_UTF_8_danish.obj: src_c/stem_UTF_8_danish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_danish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_danish.Tpo -c -o stem_UTF_8_danish.obj `if test -f 'src_c/stem_UTF_8_danish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_danish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_danish.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_danish.Tpo $(DEPDIR)/stem_UTF_8_danish.Po +# source='src_c/stem_UTF_8_danish.c' object='stem_UTF_8_danish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_danish.obj `if test -f 'src_c/stem_UTF_8_danish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_danish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_danish.c'; fi` + +stem_ISO_8859_1_dutch.o: src_c/stem_ISO_8859_1_dutch.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_dutch.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_dutch.Tpo -c -o stem_ISO_8859_1_dutch.o `test -f 'src_c/stem_ISO_8859_1_dutch.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_dutch.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_dutch.Tpo $(DEPDIR)/stem_ISO_8859_1_dutch.Po +# source='src_c/stem_ISO_8859_1_dutch.c' object='stem_ISO_8859_1_dutch.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_dutch.o `test -f 'src_c/stem_ISO_8859_1_dutch.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_dutch.c + +stem_ISO_8859_1_dutch.obj: src_c/stem_ISO_8859_1_dutch.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_dutch.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_dutch.Tpo -c -o stem_ISO_8859_1_dutch.obj `if test -f 'src_c/stem_ISO_8859_1_dutch.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_dutch.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_dutch.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_dutch.Tpo $(DEPDIR)/stem_ISO_8859_1_dutch.Po +# source='src_c/stem_ISO_8859_1_dutch.c' object='stem_ISO_8859_1_dutch.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_dutch.obj `if test -f 'src_c/stem_ISO_8859_1_dutch.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_dutch.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_dutch.c'; fi` + +stem_UTF_8_dutch.o: src_c/stem_UTF_8_dutch.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_dutch.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_dutch.Tpo -c -o stem_UTF_8_dutch.o `test -f 'src_c/stem_UTF_8_dutch.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_dutch.c + $(am__mv) $(DEPDIR)/stem_UTF_8_dutch.Tpo $(DEPDIR)/stem_UTF_8_dutch.Po +# source='src_c/stem_UTF_8_dutch.c' object='stem_UTF_8_dutch.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_dutch.o `test -f 'src_c/stem_UTF_8_dutch.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_dutch.c + +stem_UTF_8_dutch.obj: src_c/stem_UTF_8_dutch.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_dutch.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_dutch.Tpo -c -o stem_UTF_8_dutch.obj `if test -f 'src_c/stem_UTF_8_dutch.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_dutch.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_dutch.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_dutch.Tpo $(DEPDIR)/stem_UTF_8_dutch.Po +# source='src_c/stem_UTF_8_dutch.c' object='stem_UTF_8_dutch.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_dutch.obj `if test -f 'src_c/stem_UTF_8_dutch.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_dutch.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_dutch.c'; fi` + +stem_ISO_8859_1_english.o: src_c/stem_ISO_8859_1_english.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_english.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_english.Tpo -c -o stem_ISO_8859_1_english.o `test -f 'src_c/stem_ISO_8859_1_english.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_english.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_english.Tpo $(DEPDIR)/stem_ISO_8859_1_english.Po +# source='src_c/stem_ISO_8859_1_english.c' object='stem_ISO_8859_1_english.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_english.o `test -f 'src_c/stem_ISO_8859_1_english.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_english.c + +stem_ISO_8859_1_english.obj: src_c/stem_ISO_8859_1_english.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_english.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_english.Tpo -c -o stem_ISO_8859_1_english.obj `if test -f 'src_c/stem_ISO_8859_1_english.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_english.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_english.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_english.Tpo $(DEPDIR)/stem_ISO_8859_1_english.Po +# source='src_c/stem_ISO_8859_1_english.c' object='stem_ISO_8859_1_english.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_english.obj `if test -f 'src_c/stem_ISO_8859_1_english.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_english.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_english.c'; fi` + +stem_UTF_8_english.o: src_c/stem_UTF_8_english.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_english.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_english.Tpo -c -o stem_UTF_8_english.o `test -f 'src_c/stem_UTF_8_english.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_english.c + $(am__mv) $(DEPDIR)/stem_UTF_8_english.Tpo $(DEPDIR)/stem_UTF_8_english.Po +# source='src_c/stem_UTF_8_english.c' object='stem_UTF_8_english.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_english.o `test -f 'src_c/stem_UTF_8_english.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_english.c + +stem_UTF_8_english.obj: src_c/stem_UTF_8_english.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_english.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_english.Tpo -c -o stem_UTF_8_english.obj `if test -f 'src_c/stem_UTF_8_english.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_english.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_english.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_english.Tpo $(DEPDIR)/stem_UTF_8_english.Po +# source='src_c/stem_UTF_8_english.c' object='stem_UTF_8_english.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_english.obj `if test -f 'src_c/stem_UTF_8_english.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_english.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_english.c'; fi` + +stem_ISO_8859_1_finnish.o: src_c/stem_ISO_8859_1_finnish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_finnish.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_finnish.Tpo -c -o stem_ISO_8859_1_finnish.o `test -f 'src_c/stem_ISO_8859_1_finnish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_finnish.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_finnish.Tpo $(DEPDIR)/stem_ISO_8859_1_finnish.Po +# source='src_c/stem_ISO_8859_1_finnish.c' object='stem_ISO_8859_1_finnish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_finnish.o `test -f 'src_c/stem_ISO_8859_1_finnish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_finnish.c + +stem_ISO_8859_1_finnish.obj: src_c/stem_ISO_8859_1_finnish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_finnish.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_finnish.Tpo -c -o stem_ISO_8859_1_finnish.obj `if test -f 'src_c/stem_ISO_8859_1_finnish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_finnish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_finnish.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_finnish.Tpo $(DEPDIR)/stem_ISO_8859_1_finnish.Po +# source='src_c/stem_ISO_8859_1_finnish.c' object='stem_ISO_8859_1_finnish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_finnish.obj `if test -f 'src_c/stem_ISO_8859_1_finnish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_finnish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_finnish.c'; fi` + +stem_UTF_8_finnish.o: src_c/stem_UTF_8_finnish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_finnish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_finnish.Tpo -c -o stem_UTF_8_finnish.o `test -f 'src_c/stem_UTF_8_finnish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_finnish.c + $(am__mv) $(DEPDIR)/stem_UTF_8_finnish.Tpo $(DEPDIR)/stem_UTF_8_finnish.Po +# source='src_c/stem_UTF_8_finnish.c' object='stem_UTF_8_finnish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_finnish.o `test -f 'src_c/stem_UTF_8_finnish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_finnish.c + +stem_UTF_8_finnish.obj: src_c/stem_UTF_8_finnish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_finnish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_finnish.Tpo -c -o stem_UTF_8_finnish.obj `if test -f 'src_c/stem_UTF_8_finnish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_finnish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_finnish.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_finnish.Tpo $(DEPDIR)/stem_UTF_8_finnish.Po +# source='src_c/stem_UTF_8_finnish.c' object='stem_UTF_8_finnish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_finnish.obj `if test -f 'src_c/stem_UTF_8_finnish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_finnish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_finnish.c'; fi` + +stem_ISO_8859_1_french.o: src_c/stem_ISO_8859_1_french.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_french.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_french.Tpo -c -o stem_ISO_8859_1_french.o `test -f 'src_c/stem_ISO_8859_1_french.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_french.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_french.Tpo $(DEPDIR)/stem_ISO_8859_1_french.Po +# source='src_c/stem_ISO_8859_1_french.c' object='stem_ISO_8859_1_french.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_french.o `test -f 'src_c/stem_ISO_8859_1_french.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_french.c + +stem_ISO_8859_1_french.obj: src_c/stem_ISO_8859_1_french.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_french.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_french.Tpo -c -o stem_ISO_8859_1_french.obj `if test -f 'src_c/stem_ISO_8859_1_french.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_french.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_french.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_french.Tpo $(DEPDIR)/stem_ISO_8859_1_french.Po +# source='src_c/stem_ISO_8859_1_french.c' object='stem_ISO_8859_1_french.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_french.obj `if test -f 'src_c/stem_ISO_8859_1_french.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_french.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_french.c'; fi` + +stem_UTF_8_french.o: src_c/stem_UTF_8_french.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_french.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_french.Tpo -c -o stem_UTF_8_french.o `test -f 'src_c/stem_UTF_8_french.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_french.c + $(am__mv) $(DEPDIR)/stem_UTF_8_french.Tpo $(DEPDIR)/stem_UTF_8_french.Po +# source='src_c/stem_UTF_8_french.c' object='stem_UTF_8_french.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_french.o `test -f 'src_c/stem_UTF_8_french.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_french.c + +stem_UTF_8_french.obj: src_c/stem_UTF_8_french.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_french.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_french.Tpo -c -o stem_UTF_8_french.obj `if test -f 'src_c/stem_UTF_8_french.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_french.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_french.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_french.Tpo $(DEPDIR)/stem_UTF_8_french.Po +# source='src_c/stem_UTF_8_french.c' object='stem_UTF_8_french.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_french.obj `if test -f 'src_c/stem_UTF_8_french.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_french.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_french.c'; fi` + +stem_ISO_8859_1_german.o: src_c/stem_ISO_8859_1_german.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_german.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_german.Tpo -c -o stem_ISO_8859_1_german.o `test -f 'src_c/stem_ISO_8859_1_german.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_german.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_german.Tpo $(DEPDIR)/stem_ISO_8859_1_german.Po +# source='src_c/stem_ISO_8859_1_german.c' object='stem_ISO_8859_1_german.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_german.o `test -f 'src_c/stem_ISO_8859_1_german.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_german.c + +stem_ISO_8859_1_german.obj: src_c/stem_ISO_8859_1_german.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_german.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_german.Tpo -c -o stem_ISO_8859_1_german.obj `if test -f 'src_c/stem_ISO_8859_1_german.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_german.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_german.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_german.Tpo $(DEPDIR)/stem_ISO_8859_1_german.Po +# source='src_c/stem_ISO_8859_1_german.c' object='stem_ISO_8859_1_german.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_german.obj `if test -f 'src_c/stem_ISO_8859_1_german.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_german.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_german.c'; fi` + +stem_UTF_8_german.o: src_c/stem_UTF_8_german.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_german.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_german.Tpo -c -o stem_UTF_8_german.o `test -f 'src_c/stem_UTF_8_german.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_german.c + $(am__mv) $(DEPDIR)/stem_UTF_8_german.Tpo $(DEPDIR)/stem_UTF_8_german.Po +# source='src_c/stem_UTF_8_german.c' object='stem_UTF_8_german.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_german.o `test -f 'src_c/stem_UTF_8_german.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_german.c + +stem_UTF_8_german.obj: src_c/stem_UTF_8_german.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_german.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_german.Tpo -c -o stem_UTF_8_german.obj `if test -f 'src_c/stem_UTF_8_german.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_german.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_german.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_german.Tpo $(DEPDIR)/stem_UTF_8_german.Po +# source='src_c/stem_UTF_8_german.c' object='stem_UTF_8_german.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_german.obj `if test -f 'src_c/stem_UTF_8_german.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_german.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_german.c'; fi` + +stem_ISO_8859_1_hungarian.o: src_c/stem_ISO_8859_1_hungarian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_hungarian.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_hungarian.Tpo -c -o stem_ISO_8859_1_hungarian.o `test -f 'src_c/stem_ISO_8859_1_hungarian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_hungarian.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_hungarian.Tpo $(DEPDIR)/stem_ISO_8859_1_hungarian.Po +# source='src_c/stem_ISO_8859_1_hungarian.c' object='stem_ISO_8859_1_hungarian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_hungarian.o `test -f 'src_c/stem_ISO_8859_1_hungarian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_hungarian.c + +stem_ISO_8859_1_hungarian.obj: src_c/stem_ISO_8859_1_hungarian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_hungarian.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_hungarian.Tpo -c -o stem_ISO_8859_1_hungarian.obj `if test -f 'src_c/stem_ISO_8859_1_hungarian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_hungarian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_hungarian.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_hungarian.Tpo $(DEPDIR)/stem_ISO_8859_1_hungarian.Po +# source='src_c/stem_ISO_8859_1_hungarian.c' object='stem_ISO_8859_1_hungarian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_hungarian.obj `if test -f 'src_c/stem_ISO_8859_1_hungarian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_hungarian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_hungarian.c'; fi` + +stem_UTF_8_hungarian.o: src_c/stem_UTF_8_hungarian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_hungarian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_hungarian.Tpo -c -o stem_UTF_8_hungarian.o `test -f 'src_c/stem_UTF_8_hungarian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_hungarian.c + $(am__mv) $(DEPDIR)/stem_UTF_8_hungarian.Tpo $(DEPDIR)/stem_UTF_8_hungarian.Po +# source='src_c/stem_UTF_8_hungarian.c' object='stem_UTF_8_hungarian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_hungarian.o `test -f 'src_c/stem_UTF_8_hungarian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_hungarian.c + +stem_UTF_8_hungarian.obj: src_c/stem_UTF_8_hungarian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_hungarian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_hungarian.Tpo -c -o stem_UTF_8_hungarian.obj `if test -f 'src_c/stem_UTF_8_hungarian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_hungarian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_hungarian.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_hungarian.Tpo $(DEPDIR)/stem_UTF_8_hungarian.Po +# source='src_c/stem_UTF_8_hungarian.c' object='stem_UTF_8_hungarian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_hungarian.obj `if test -f 'src_c/stem_UTF_8_hungarian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_hungarian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_hungarian.c'; fi` + +stem_ISO_8859_1_italian.o: src_c/stem_ISO_8859_1_italian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_italian.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_italian.Tpo -c -o stem_ISO_8859_1_italian.o `test -f 'src_c/stem_ISO_8859_1_italian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_italian.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_italian.Tpo $(DEPDIR)/stem_ISO_8859_1_italian.Po +# source='src_c/stem_ISO_8859_1_italian.c' object='stem_ISO_8859_1_italian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_italian.o `test -f 'src_c/stem_ISO_8859_1_italian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_italian.c + +stem_ISO_8859_1_italian.obj: src_c/stem_ISO_8859_1_italian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_italian.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_italian.Tpo -c -o stem_ISO_8859_1_italian.obj `if test -f 'src_c/stem_ISO_8859_1_italian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_italian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_italian.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_italian.Tpo $(DEPDIR)/stem_ISO_8859_1_italian.Po +# source='src_c/stem_ISO_8859_1_italian.c' object='stem_ISO_8859_1_italian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_italian.obj `if test -f 'src_c/stem_ISO_8859_1_italian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_italian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_italian.c'; fi` + +stem_UTF_8_italian.o: src_c/stem_UTF_8_italian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_italian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_italian.Tpo -c -o stem_UTF_8_italian.o `test -f 'src_c/stem_UTF_8_italian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_italian.c + $(am__mv) $(DEPDIR)/stem_UTF_8_italian.Tpo $(DEPDIR)/stem_UTF_8_italian.Po +# source='src_c/stem_UTF_8_italian.c' object='stem_UTF_8_italian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_italian.o `test -f 'src_c/stem_UTF_8_italian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_italian.c + +stem_UTF_8_italian.obj: src_c/stem_UTF_8_italian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_italian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_italian.Tpo -c -o stem_UTF_8_italian.obj `if test -f 'src_c/stem_UTF_8_italian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_italian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_italian.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_italian.Tpo $(DEPDIR)/stem_UTF_8_italian.Po +# source='src_c/stem_UTF_8_italian.c' object='stem_UTF_8_italian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_italian.obj `if test -f 'src_c/stem_UTF_8_italian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_italian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_italian.c'; fi` + +stem_ISO_8859_1_norwegian.o: src_c/stem_ISO_8859_1_norwegian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_norwegian.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_norwegian.Tpo -c -o stem_ISO_8859_1_norwegian.o `test -f 'src_c/stem_ISO_8859_1_norwegian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_norwegian.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_norwegian.Tpo $(DEPDIR)/stem_ISO_8859_1_norwegian.Po +# source='src_c/stem_ISO_8859_1_norwegian.c' object='stem_ISO_8859_1_norwegian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_norwegian.o `test -f 'src_c/stem_ISO_8859_1_norwegian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_norwegian.c + +stem_ISO_8859_1_norwegian.obj: src_c/stem_ISO_8859_1_norwegian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_norwegian.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_norwegian.Tpo -c -o stem_ISO_8859_1_norwegian.obj `if test -f 'src_c/stem_ISO_8859_1_norwegian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_norwegian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_norwegian.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_norwegian.Tpo $(DEPDIR)/stem_ISO_8859_1_norwegian.Po +# source='src_c/stem_ISO_8859_1_norwegian.c' object='stem_ISO_8859_1_norwegian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_norwegian.obj `if test -f 'src_c/stem_ISO_8859_1_norwegian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_norwegian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_norwegian.c'; fi` + +stem_UTF_8_norwegian.o: src_c/stem_UTF_8_norwegian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_norwegian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_norwegian.Tpo -c -o stem_UTF_8_norwegian.o `test -f 'src_c/stem_UTF_8_norwegian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_norwegian.c + $(am__mv) $(DEPDIR)/stem_UTF_8_norwegian.Tpo $(DEPDIR)/stem_UTF_8_norwegian.Po +# source='src_c/stem_UTF_8_norwegian.c' object='stem_UTF_8_norwegian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_norwegian.o `test -f 'src_c/stem_UTF_8_norwegian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_norwegian.c + +stem_UTF_8_norwegian.obj: src_c/stem_UTF_8_norwegian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_norwegian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_norwegian.Tpo -c -o stem_UTF_8_norwegian.obj `if test -f 'src_c/stem_UTF_8_norwegian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_norwegian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_norwegian.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_norwegian.Tpo $(DEPDIR)/stem_UTF_8_norwegian.Po +# source='src_c/stem_UTF_8_norwegian.c' object='stem_UTF_8_norwegian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_norwegian.obj `if test -f 'src_c/stem_UTF_8_norwegian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_norwegian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_norwegian.c'; fi` + +stem_ISO_8859_1_porter.o: src_c/stem_ISO_8859_1_porter.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_porter.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_porter.Tpo -c -o stem_ISO_8859_1_porter.o `test -f 'src_c/stem_ISO_8859_1_porter.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_porter.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_porter.Tpo $(DEPDIR)/stem_ISO_8859_1_porter.Po +# source='src_c/stem_ISO_8859_1_porter.c' object='stem_ISO_8859_1_porter.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_porter.o `test -f 'src_c/stem_ISO_8859_1_porter.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_porter.c + +stem_ISO_8859_1_porter.obj: src_c/stem_ISO_8859_1_porter.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_porter.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_porter.Tpo -c -o stem_ISO_8859_1_porter.obj `if test -f 'src_c/stem_ISO_8859_1_porter.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_porter.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_porter.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_porter.Tpo $(DEPDIR)/stem_ISO_8859_1_porter.Po +# source='src_c/stem_ISO_8859_1_porter.c' object='stem_ISO_8859_1_porter.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_porter.obj `if test -f 'src_c/stem_ISO_8859_1_porter.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_porter.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_porter.c'; fi` + +stem_UTF_8_porter.o: src_c/stem_UTF_8_porter.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_porter.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_porter.Tpo -c -o stem_UTF_8_porter.o `test -f 'src_c/stem_UTF_8_porter.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_porter.c + $(am__mv) $(DEPDIR)/stem_UTF_8_porter.Tpo $(DEPDIR)/stem_UTF_8_porter.Po +# source='src_c/stem_UTF_8_porter.c' object='stem_UTF_8_porter.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_porter.o `test -f 'src_c/stem_UTF_8_porter.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_porter.c + +stem_UTF_8_porter.obj: src_c/stem_UTF_8_porter.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_porter.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_porter.Tpo -c -o stem_UTF_8_porter.obj `if test -f 'src_c/stem_UTF_8_porter.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_porter.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_porter.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_porter.Tpo $(DEPDIR)/stem_UTF_8_porter.Po +# source='src_c/stem_UTF_8_porter.c' object='stem_UTF_8_porter.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_porter.obj `if test -f 'src_c/stem_UTF_8_porter.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_porter.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_porter.c'; fi` + +stem_ISO_8859_1_portuguese.o: src_c/stem_ISO_8859_1_portuguese.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_portuguese.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_portuguese.Tpo -c -o stem_ISO_8859_1_portuguese.o `test -f 'src_c/stem_ISO_8859_1_portuguese.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_portuguese.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_portuguese.Tpo $(DEPDIR)/stem_ISO_8859_1_portuguese.Po +# source='src_c/stem_ISO_8859_1_portuguese.c' object='stem_ISO_8859_1_portuguese.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_portuguese.o `test -f 'src_c/stem_ISO_8859_1_portuguese.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_portuguese.c + +stem_ISO_8859_1_portuguese.obj: src_c/stem_ISO_8859_1_portuguese.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_portuguese.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_portuguese.Tpo -c -o stem_ISO_8859_1_portuguese.obj `if test -f 'src_c/stem_ISO_8859_1_portuguese.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_portuguese.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_portuguese.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_portuguese.Tpo $(DEPDIR)/stem_ISO_8859_1_portuguese.Po +# source='src_c/stem_ISO_8859_1_portuguese.c' object='stem_ISO_8859_1_portuguese.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_portuguese.obj `if test -f 'src_c/stem_ISO_8859_1_portuguese.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_portuguese.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_portuguese.c'; fi` + +stem_UTF_8_portuguese.o: src_c/stem_UTF_8_portuguese.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_portuguese.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_portuguese.Tpo -c -o stem_UTF_8_portuguese.o `test -f 'src_c/stem_UTF_8_portuguese.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_portuguese.c + $(am__mv) $(DEPDIR)/stem_UTF_8_portuguese.Tpo $(DEPDIR)/stem_UTF_8_portuguese.Po +# source='src_c/stem_UTF_8_portuguese.c' object='stem_UTF_8_portuguese.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_portuguese.o `test -f 'src_c/stem_UTF_8_portuguese.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_portuguese.c + +stem_UTF_8_portuguese.obj: src_c/stem_UTF_8_portuguese.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_portuguese.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_portuguese.Tpo -c -o stem_UTF_8_portuguese.obj `if test -f 'src_c/stem_UTF_8_portuguese.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_portuguese.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_portuguese.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_portuguese.Tpo $(DEPDIR)/stem_UTF_8_portuguese.Po +# source='src_c/stem_UTF_8_portuguese.c' object='stem_UTF_8_portuguese.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_portuguese.obj `if test -f 'src_c/stem_UTF_8_portuguese.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_portuguese.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_portuguese.c'; fi` + +stem_ISO_8859_2_romanian.o: src_c/stem_ISO_8859_2_romanian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_2_romanian.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_2_romanian.Tpo -c -o stem_ISO_8859_2_romanian.o `test -f 'src_c/stem_ISO_8859_2_romanian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_2_romanian.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_2_romanian.Tpo $(DEPDIR)/stem_ISO_8859_2_romanian.Po +# source='src_c/stem_ISO_8859_2_romanian.c' object='stem_ISO_8859_2_romanian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_2_romanian.o `test -f 'src_c/stem_ISO_8859_2_romanian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_2_romanian.c + +stem_ISO_8859_2_romanian.obj: src_c/stem_ISO_8859_2_romanian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_2_romanian.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_2_romanian.Tpo -c -o stem_ISO_8859_2_romanian.obj `if test -f 'src_c/stem_ISO_8859_2_romanian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_2_romanian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_2_romanian.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_2_romanian.Tpo $(DEPDIR)/stem_ISO_8859_2_romanian.Po +# source='src_c/stem_ISO_8859_2_romanian.c' object='stem_ISO_8859_2_romanian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_2_romanian.obj `if test -f 'src_c/stem_ISO_8859_2_romanian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_2_romanian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_2_romanian.c'; fi` + +stem_UTF_8_romanian.o: src_c/stem_UTF_8_romanian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_romanian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_romanian.Tpo -c -o stem_UTF_8_romanian.o `test -f 'src_c/stem_UTF_8_romanian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_romanian.c + $(am__mv) $(DEPDIR)/stem_UTF_8_romanian.Tpo $(DEPDIR)/stem_UTF_8_romanian.Po +# source='src_c/stem_UTF_8_romanian.c' object='stem_UTF_8_romanian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_romanian.o `test -f 'src_c/stem_UTF_8_romanian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_romanian.c + +stem_UTF_8_romanian.obj: src_c/stem_UTF_8_romanian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_romanian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_romanian.Tpo -c -o stem_UTF_8_romanian.obj `if test -f 'src_c/stem_UTF_8_romanian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_romanian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_romanian.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_romanian.Tpo $(DEPDIR)/stem_UTF_8_romanian.Po +# source='src_c/stem_UTF_8_romanian.c' object='stem_UTF_8_romanian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_romanian.obj `if test -f 'src_c/stem_UTF_8_romanian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_romanian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_romanian.c'; fi` + +stem_KOI8_R_russian.o: src_c/stem_KOI8_R_russian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_KOI8_R_russian.o -MD -MP -MF $(DEPDIR)/stem_KOI8_R_russian.Tpo -c -o stem_KOI8_R_russian.o `test -f 'src_c/stem_KOI8_R_russian.c' || echo '$(srcdir)/'`src_c/stem_KOI8_R_russian.c + $(am__mv) $(DEPDIR)/stem_KOI8_R_russian.Tpo $(DEPDIR)/stem_KOI8_R_russian.Po +# source='src_c/stem_KOI8_R_russian.c' object='stem_KOI8_R_russian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_KOI8_R_russian.o `test -f 'src_c/stem_KOI8_R_russian.c' || echo '$(srcdir)/'`src_c/stem_KOI8_R_russian.c + +stem_KOI8_R_russian.obj: src_c/stem_KOI8_R_russian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_KOI8_R_russian.obj -MD -MP -MF $(DEPDIR)/stem_KOI8_R_russian.Tpo -c -o stem_KOI8_R_russian.obj `if test -f 'src_c/stem_KOI8_R_russian.c'; then $(CYGPATH_W) 'src_c/stem_KOI8_R_russian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_KOI8_R_russian.c'; fi` + $(am__mv) $(DEPDIR)/stem_KOI8_R_russian.Tpo $(DEPDIR)/stem_KOI8_R_russian.Po +# source='src_c/stem_KOI8_R_russian.c' object='stem_KOI8_R_russian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_KOI8_R_russian.obj `if test -f 'src_c/stem_KOI8_R_russian.c'; then $(CYGPATH_W) 'src_c/stem_KOI8_R_russian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_KOI8_R_russian.c'; fi` + +stem_UTF_8_russian.o: src_c/stem_UTF_8_russian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_russian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_russian.Tpo -c -o stem_UTF_8_russian.o `test -f 'src_c/stem_UTF_8_russian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_russian.c + $(am__mv) $(DEPDIR)/stem_UTF_8_russian.Tpo $(DEPDIR)/stem_UTF_8_russian.Po +# source='src_c/stem_UTF_8_russian.c' object='stem_UTF_8_russian.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_russian.o `test -f 'src_c/stem_UTF_8_russian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_russian.c + +stem_UTF_8_russian.obj: src_c/stem_UTF_8_russian.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_russian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_russian.Tpo -c -o stem_UTF_8_russian.obj `if test -f 'src_c/stem_UTF_8_russian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_russian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_russian.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_russian.Tpo $(DEPDIR)/stem_UTF_8_russian.Po +# source='src_c/stem_UTF_8_russian.c' object='stem_UTF_8_russian.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_russian.obj `if test -f 'src_c/stem_UTF_8_russian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_russian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_russian.c'; fi` + +stem_ISO_8859_1_spanish.o: src_c/stem_ISO_8859_1_spanish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_spanish.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_spanish.Tpo -c -o stem_ISO_8859_1_spanish.o `test -f 'src_c/stem_ISO_8859_1_spanish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_spanish.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_spanish.Tpo $(DEPDIR)/stem_ISO_8859_1_spanish.Po +# source='src_c/stem_ISO_8859_1_spanish.c' object='stem_ISO_8859_1_spanish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_spanish.o `test -f 'src_c/stem_ISO_8859_1_spanish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_spanish.c + +stem_ISO_8859_1_spanish.obj: src_c/stem_ISO_8859_1_spanish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_spanish.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_spanish.Tpo -c -o stem_ISO_8859_1_spanish.obj `if test -f 'src_c/stem_ISO_8859_1_spanish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_spanish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_spanish.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_spanish.Tpo $(DEPDIR)/stem_ISO_8859_1_spanish.Po +# source='src_c/stem_ISO_8859_1_spanish.c' object='stem_ISO_8859_1_spanish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_spanish.obj `if test -f 'src_c/stem_ISO_8859_1_spanish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_spanish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_spanish.c'; fi` + +stem_UTF_8_spanish.o: src_c/stem_UTF_8_spanish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_spanish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_spanish.Tpo -c -o stem_UTF_8_spanish.o `test -f 'src_c/stem_UTF_8_spanish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_spanish.c + $(am__mv) $(DEPDIR)/stem_UTF_8_spanish.Tpo $(DEPDIR)/stem_UTF_8_spanish.Po +# source='src_c/stem_UTF_8_spanish.c' object='stem_UTF_8_spanish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_spanish.o `test -f 'src_c/stem_UTF_8_spanish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_spanish.c + +stem_UTF_8_spanish.obj: src_c/stem_UTF_8_spanish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_spanish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_spanish.Tpo -c -o stem_UTF_8_spanish.obj `if test -f 'src_c/stem_UTF_8_spanish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_spanish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_spanish.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_spanish.Tpo $(DEPDIR)/stem_UTF_8_spanish.Po +# source='src_c/stem_UTF_8_spanish.c' object='stem_UTF_8_spanish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_spanish.obj `if test -f 'src_c/stem_UTF_8_spanish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_spanish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_spanish.c'; fi` + +stem_ISO_8859_1_swedish.o: src_c/stem_ISO_8859_1_swedish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_swedish.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_swedish.Tpo -c -o stem_ISO_8859_1_swedish.o `test -f 'src_c/stem_ISO_8859_1_swedish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_swedish.c + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_swedish.Tpo $(DEPDIR)/stem_ISO_8859_1_swedish.Po +# source='src_c/stem_ISO_8859_1_swedish.c' object='stem_ISO_8859_1_swedish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_swedish.o `test -f 'src_c/stem_ISO_8859_1_swedish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_swedish.c + +stem_ISO_8859_1_swedish.obj: src_c/stem_ISO_8859_1_swedish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_swedish.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_swedish.Tpo -c -o stem_ISO_8859_1_swedish.obj `if test -f 'src_c/stem_ISO_8859_1_swedish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_swedish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_swedish.c'; fi` + $(am__mv) $(DEPDIR)/stem_ISO_8859_1_swedish.Tpo $(DEPDIR)/stem_ISO_8859_1_swedish.Po +# source='src_c/stem_ISO_8859_1_swedish.c' object='stem_ISO_8859_1_swedish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_swedish.obj `if test -f 'src_c/stem_ISO_8859_1_swedish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_swedish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_swedish.c'; fi` + +stem_UTF_8_swedish.o: src_c/stem_UTF_8_swedish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_swedish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_swedish.Tpo -c -o stem_UTF_8_swedish.o `test -f 'src_c/stem_UTF_8_swedish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_swedish.c + $(am__mv) $(DEPDIR)/stem_UTF_8_swedish.Tpo $(DEPDIR)/stem_UTF_8_swedish.Po +# source='src_c/stem_UTF_8_swedish.c' object='stem_UTF_8_swedish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_swedish.o `test -f 'src_c/stem_UTF_8_swedish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_swedish.c + +stem_UTF_8_swedish.obj: src_c/stem_UTF_8_swedish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_swedish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_swedish.Tpo -c -o stem_UTF_8_swedish.obj `if test -f 'src_c/stem_UTF_8_swedish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_swedish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_swedish.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_swedish.Tpo $(DEPDIR)/stem_UTF_8_swedish.Po +# source='src_c/stem_UTF_8_swedish.c' object='stem_UTF_8_swedish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_swedish.obj `if test -f 'src_c/stem_UTF_8_swedish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_swedish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_swedish.c'; fi` + +stem_UTF_8_turkish.o: src_c/stem_UTF_8_turkish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_turkish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_turkish.Tpo -c -o stem_UTF_8_turkish.o `test -f 'src_c/stem_UTF_8_turkish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_turkish.c + $(am__mv) $(DEPDIR)/stem_UTF_8_turkish.Tpo $(DEPDIR)/stem_UTF_8_turkish.Po +# source='src_c/stem_UTF_8_turkish.c' object='stem_UTF_8_turkish.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_turkish.o `test -f 'src_c/stem_UTF_8_turkish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_turkish.c + +stem_UTF_8_turkish.obj: src_c/stem_UTF_8_turkish.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_turkish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_turkish.Tpo -c -o stem_UTF_8_turkish.obj `if test -f 'src_c/stem_UTF_8_turkish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_turkish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_turkish.c'; fi` + $(am__mv) $(DEPDIR)/stem_UTF_8_turkish.Tpo $(DEPDIR)/stem_UTF_8_turkish.Po +# source='src_c/stem_UTF_8_turkish.c' object='stem_UTF_8_turkish.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_turkish.obj `if test -f 'src_c/stem_UTF_8_turkish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_turkish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_turkish.c'; fi` + +api.o: runtime/api.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT api.o -MD -MP -MF $(DEPDIR)/api.Tpo -c -o api.o `test -f 'runtime/api.c' || echo '$(srcdir)/'`runtime/api.c + $(am__mv) $(DEPDIR)/api.Tpo $(DEPDIR)/api.Po +# source='runtime/api.c' object='api.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o api.o `test -f 'runtime/api.c' || echo '$(srcdir)/'`runtime/api.c + +api.obj: runtime/api.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT api.obj -MD -MP -MF $(DEPDIR)/api.Tpo -c -o api.obj `if test -f 'runtime/api.c'; then $(CYGPATH_W) 'runtime/api.c'; else $(CYGPATH_W) '$(srcdir)/runtime/api.c'; fi` + $(am__mv) $(DEPDIR)/api.Tpo $(DEPDIR)/api.Po +# source='runtime/api.c' object='api.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o api.obj `if test -f 'runtime/api.c'; then $(CYGPATH_W) 'runtime/api.c'; else $(CYGPATH_W) '$(srcdir)/runtime/api.c'; fi` + +utilities.o: runtime/utilities.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utilities.o -MD -MP -MF $(DEPDIR)/utilities.Tpo -c -o utilities.o `test -f 'runtime/utilities.c' || echo '$(srcdir)/'`runtime/utilities.c + $(am__mv) $(DEPDIR)/utilities.Tpo $(DEPDIR)/utilities.Po +# source='runtime/utilities.c' object='utilities.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utilities.o `test -f 'runtime/utilities.c' || echo '$(srcdir)/'`runtime/utilities.c + +utilities.obj: runtime/utilities.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utilities.obj -MD -MP -MF $(DEPDIR)/utilities.Tpo -c -o utilities.obj `if test -f 'runtime/utilities.c'; then $(CYGPATH_W) 'runtime/utilities.c'; else $(CYGPATH_W) '$(srcdir)/runtime/utilities.c'; fi` + $(am__mv) $(DEPDIR)/utilities.Tpo $(DEPDIR)/utilities.Po +# source='runtime/utilities.c' object='utilities.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utilities.obj `if test -f 'runtime/utilities.c'; then $(CYGPATH_W) 'runtime/utilities.c'; else $(CYGPATH_W) '$(srcdir)/runtime/utilities.c'; fi` + +libstemmer.o: libstemmer/libstemmer.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libstemmer.o -MD -MP -MF $(DEPDIR)/libstemmer.Tpo -c -o libstemmer.o `test -f 'libstemmer/libstemmer.c' || echo '$(srcdir)/'`libstemmer/libstemmer.c + $(am__mv) $(DEPDIR)/libstemmer.Tpo $(DEPDIR)/libstemmer.Po +# source='libstemmer/libstemmer.c' object='libstemmer.o' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libstemmer.o `test -f 'libstemmer/libstemmer.c' || echo '$(srcdir)/'`libstemmer/libstemmer.c + +libstemmer.obj: libstemmer/libstemmer.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libstemmer.obj -MD -MP -MF $(DEPDIR)/libstemmer.Tpo -c -o libstemmer.obj `if test -f 'libstemmer/libstemmer.c'; then $(CYGPATH_W) 'libstemmer/libstemmer.c'; else $(CYGPATH_W) '$(srcdir)/libstemmer/libstemmer.c'; fi` + $(am__mv) $(DEPDIR)/libstemmer.Tpo $(DEPDIR)/libstemmer.Po +# source='libstemmer/libstemmer.c' object='libstemmer.obj' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libstemmer.obj `if test -f 'libstemmer/libstemmer.c'; then $(CYGPATH_W) 'libstemmer/libstemmer.c'; else $(CYGPATH_W) '$(srcdir)/libstemmer/libstemmer.c'; fi` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/csft-4.1/libstemmer_c/Makefile.am b/coreseek/csft-4.1/libstemmer_c/Makefile.am new file mode 100755 index 0000000..a973921 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/Makefile.am @@ -0,0 +1,6 @@ +if USE_LIBSTEMMER +noinst_LIBRARIES = libstemmer.a +include $(srcdir)/mkinc.mak +noinst_HEADERS = $(snowball_headers) +libstemmer_a_SOURCES = $(snowball_sources) +endif diff --git a/coreseek/csft-4.1/libstemmer_c/Makefile.in b/coreseek/csft-4.1/libstemmer_c/Makefile.in new file mode 100644 index 0000000..f62b059 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/Makefile.in @@ -0,0 +1,1111 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# libstemmer/mkinc.mak: List of stemming module source files +# +# This file is generated by mkmodules.pl from a list of module names. +# Do not edit manually. +# +# Modules included by this file are: danish, dutch, english, finnish, french, +# german, hungarian, italian, norwegian, porter, portuguese, romanian, +# russian, spanish, swedish, turkish + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +DIST_COMMON = README $(am__noinst_HEADERS_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/mkinc.mak +subdir = libstemmer_c +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +libstemmer_a_AR = $(AR) $(ARFLAGS) +libstemmer_a_LIBADD = +am__libstemmer_a_SOURCES_DIST = src_c/stem_ISO_8859_1_danish.c \ + src_c/stem_UTF_8_danish.c src_c/stem_ISO_8859_1_dutch.c \ + src_c/stem_UTF_8_dutch.c src_c/stem_ISO_8859_1_english.c \ + src_c/stem_UTF_8_english.c src_c/stem_ISO_8859_1_finnish.c \ + src_c/stem_UTF_8_finnish.c src_c/stem_ISO_8859_1_french.c \ + src_c/stem_UTF_8_french.c src_c/stem_ISO_8859_1_german.c \ + src_c/stem_UTF_8_german.c src_c/stem_ISO_8859_1_hungarian.c \ + src_c/stem_UTF_8_hungarian.c src_c/stem_ISO_8859_1_italian.c \ + src_c/stem_UTF_8_italian.c src_c/stem_ISO_8859_1_norwegian.c \ + src_c/stem_UTF_8_norwegian.c src_c/stem_ISO_8859_1_porter.c \ + src_c/stem_UTF_8_porter.c src_c/stem_ISO_8859_1_portuguese.c \ + src_c/stem_UTF_8_portuguese.c src_c/stem_ISO_8859_2_romanian.c \ + src_c/stem_UTF_8_romanian.c src_c/stem_KOI8_R_russian.c \ + src_c/stem_UTF_8_russian.c src_c/stem_ISO_8859_1_spanish.c \ + src_c/stem_UTF_8_spanish.c src_c/stem_ISO_8859_1_swedish.c \ + src_c/stem_UTF_8_swedish.c src_c/stem_UTF_8_turkish.c \ + runtime/api.c runtime/utilities.c libstemmer/libstemmer.c +@USE_LIBSTEMMER_TRUE@am__objects_1 = stem_ISO_8859_1_danish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_danish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_dutch.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_dutch.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_english.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_english.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_finnish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_finnish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_french.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_french.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_german.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_german.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_hungarian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_hungarian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_italian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_italian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_norwegian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_norwegian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_porter.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_porter.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_portuguese.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_portuguese.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_2_romanian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_romanian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_KOI8_R_russian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_russian.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_spanish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_spanish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_ISO_8859_1_swedish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_swedish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ stem_UTF_8_turkish.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ api.$(OBJEXT) utilities.$(OBJEXT) \ +@USE_LIBSTEMMER_TRUE@ libstemmer.$(OBJEXT) +@USE_LIBSTEMMER_TRUE@am_libstemmer_a_OBJECTS = $(am__objects_1) +libstemmer_a_OBJECTS = $(am_libstemmer_a_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/config +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libstemmer_a_SOURCES) +DIST_SOURCES = $(am__libstemmer_a_SOURCES_DIST) +am__noinst_HEADERS_DIST = src_c/stem_ISO_8859_1_danish.h \ + src_c/stem_UTF_8_danish.h src_c/stem_ISO_8859_1_dutch.h \ + src_c/stem_UTF_8_dutch.h src_c/stem_ISO_8859_1_english.h \ + src_c/stem_UTF_8_english.h src_c/stem_ISO_8859_1_finnish.h \ + src_c/stem_UTF_8_finnish.h src_c/stem_ISO_8859_1_french.h \ + src_c/stem_UTF_8_french.h src_c/stem_ISO_8859_1_german.h \ + src_c/stem_UTF_8_german.h src_c/stem_ISO_8859_1_hungarian.h \ + src_c/stem_UTF_8_hungarian.h src_c/stem_ISO_8859_1_italian.h \ + src_c/stem_UTF_8_italian.h src_c/stem_ISO_8859_1_norwegian.h \ + src_c/stem_UTF_8_norwegian.h src_c/stem_ISO_8859_1_porter.h \ + src_c/stem_UTF_8_porter.h src_c/stem_ISO_8859_1_portuguese.h \ + src_c/stem_UTF_8_portuguese.h src_c/stem_ISO_8859_2_romanian.h \ + src_c/stem_UTF_8_romanian.h src_c/stem_KOI8_R_russian.h \ + src_c/stem_UTF_8_russian.h src_c/stem_ISO_8859_1_spanish.h \ + src_c/stem_UTF_8_spanish.h src_c/stem_ISO_8859_1_swedish.h \ + src_c/stem_UTF_8_swedish.h src_c/stem_UTF_8_turkish.h \ + include/libstemmer.h libstemmer/modules.h runtime/api.h \ + runtime/header.h +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFDIR = @CONFDIR@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRT = @LIBRT@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MMSEG_CFLAGS = @MMSEG_CFLAGS@ +MMSEG_LIBS = @MMSEG_LIBS@ +MYSQL_CFLAGS = @MYSQL_CFLAGS@ +MYSQL_LIBS = @MYSQL_LIBS@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PGSQL_CFLAGS = @PGSQL_CFLAGS@ +PGSQL_LIBS = @PGSQL_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pgconfig = @pgconfig@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@USE_LIBSTEMMER_TRUE@noinst_LIBRARIES = libstemmer.a +@USE_LIBSTEMMER_TRUE@snowball_sources = \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_danish.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_danish.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_dutch.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_dutch.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_english.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_english.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_finnish.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_finnish.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_french.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_french.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_german.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_german.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_hungarian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_hungarian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_italian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_italian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_norwegian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_norwegian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_porter.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_porter.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_portuguese.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_portuguese.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_2_romanian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_romanian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_KOI8_R_russian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_russian.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_spanish.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_spanish.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_swedish.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_swedish.c \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_turkish.c \ +@USE_LIBSTEMMER_TRUE@ runtime/api.c \ +@USE_LIBSTEMMER_TRUE@ runtime/utilities.c \ +@USE_LIBSTEMMER_TRUE@ libstemmer/libstemmer.c + +@USE_LIBSTEMMER_TRUE@snowball_headers = \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_danish.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_danish.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_dutch.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_dutch.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_english.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_english.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_finnish.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_finnish.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_french.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_french.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_german.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_german.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_hungarian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_hungarian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_italian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_italian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_norwegian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_norwegian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_porter.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_porter.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_portuguese.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_portuguese.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_2_romanian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_romanian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_KOI8_R_russian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_russian.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_spanish.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_spanish.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_ISO_8859_1_swedish.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_swedish.h \ +@USE_LIBSTEMMER_TRUE@ src_c/stem_UTF_8_turkish.h \ +@USE_LIBSTEMMER_TRUE@ include/libstemmer.h \ +@USE_LIBSTEMMER_TRUE@ libstemmer/modules.h \ +@USE_LIBSTEMMER_TRUE@ runtime/api.h \ +@USE_LIBSTEMMER_TRUE@ runtime/header.h + +@USE_LIBSTEMMER_TRUE@noinst_HEADERS = $(snowball_headers) +@USE_LIBSTEMMER_TRUE@libstemmer_a_SOURCES = $(snowball_sources) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/mkinc.mak $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libstemmer_c/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libstemmer_c/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; +$(srcdir)/mkinc.mak: + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libstemmer.a: $(libstemmer_a_OBJECTS) $(libstemmer_a_DEPENDENCIES) $(EXTRA_libstemmer_a_DEPENDENCIES) + -rm -f libstemmer.a + $(libstemmer_a_AR) libstemmer.a $(libstemmer_a_OBJECTS) $(libstemmer_a_LIBADD) + $(RANLIB) libstemmer.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/api.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstemmer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_danish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_dutch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_english.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_finnish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_french.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_german.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_hungarian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_italian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_norwegian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_porter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_portuguese.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_spanish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_1_swedish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_ISO_8859_2_romanian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_KOI8_R_russian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_danish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_dutch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_english.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_finnish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_french.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_german.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_hungarian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_italian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_norwegian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_porter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_portuguese.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_romanian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_russian.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_spanish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_swedish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stem_UTF_8_turkish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilities.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +stem_ISO_8859_1_danish.o: src_c/stem_ISO_8859_1_danish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_danish.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_danish.Tpo -c -o stem_ISO_8859_1_danish.o `test -f 'src_c/stem_ISO_8859_1_danish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_danish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_danish.Tpo $(DEPDIR)/stem_ISO_8859_1_danish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_danish.c' object='stem_ISO_8859_1_danish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_danish.o `test -f 'src_c/stem_ISO_8859_1_danish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_danish.c + +stem_ISO_8859_1_danish.obj: src_c/stem_ISO_8859_1_danish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_danish.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_danish.Tpo -c -o stem_ISO_8859_1_danish.obj `if test -f 'src_c/stem_ISO_8859_1_danish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_danish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_danish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_danish.Tpo $(DEPDIR)/stem_ISO_8859_1_danish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_danish.c' object='stem_ISO_8859_1_danish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_danish.obj `if test -f 'src_c/stem_ISO_8859_1_danish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_danish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_danish.c'; fi` + +stem_UTF_8_danish.o: src_c/stem_UTF_8_danish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_danish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_danish.Tpo -c -o stem_UTF_8_danish.o `test -f 'src_c/stem_UTF_8_danish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_danish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_danish.Tpo $(DEPDIR)/stem_UTF_8_danish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_danish.c' object='stem_UTF_8_danish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_danish.o `test -f 'src_c/stem_UTF_8_danish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_danish.c + +stem_UTF_8_danish.obj: src_c/stem_UTF_8_danish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_danish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_danish.Tpo -c -o stem_UTF_8_danish.obj `if test -f 'src_c/stem_UTF_8_danish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_danish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_danish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_danish.Tpo $(DEPDIR)/stem_UTF_8_danish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_danish.c' object='stem_UTF_8_danish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_danish.obj `if test -f 'src_c/stem_UTF_8_danish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_danish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_danish.c'; fi` + +stem_ISO_8859_1_dutch.o: src_c/stem_ISO_8859_1_dutch.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_dutch.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_dutch.Tpo -c -o stem_ISO_8859_1_dutch.o `test -f 'src_c/stem_ISO_8859_1_dutch.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_dutch.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_dutch.Tpo $(DEPDIR)/stem_ISO_8859_1_dutch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_dutch.c' object='stem_ISO_8859_1_dutch.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_dutch.o `test -f 'src_c/stem_ISO_8859_1_dutch.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_dutch.c + +stem_ISO_8859_1_dutch.obj: src_c/stem_ISO_8859_1_dutch.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_dutch.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_dutch.Tpo -c -o stem_ISO_8859_1_dutch.obj `if test -f 'src_c/stem_ISO_8859_1_dutch.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_dutch.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_dutch.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_dutch.Tpo $(DEPDIR)/stem_ISO_8859_1_dutch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_dutch.c' object='stem_ISO_8859_1_dutch.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_dutch.obj `if test -f 'src_c/stem_ISO_8859_1_dutch.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_dutch.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_dutch.c'; fi` + +stem_UTF_8_dutch.o: src_c/stem_UTF_8_dutch.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_dutch.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_dutch.Tpo -c -o stem_UTF_8_dutch.o `test -f 'src_c/stem_UTF_8_dutch.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_dutch.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_dutch.Tpo $(DEPDIR)/stem_UTF_8_dutch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_dutch.c' object='stem_UTF_8_dutch.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_dutch.o `test -f 'src_c/stem_UTF_8_dutch.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_dutch.c + +stem_UTF_8_dutch.obj: src_c/stem_UTF_8_dutch.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_dutch.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_dutch.Tpo -c -o stem_UTF_8_dutch.obj `if test -f 'src_c/stem_UTF_8_dutch.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_dutch.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_dutch.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_dutch.Tpo $(DEPDIR)/stem_UTF_8_dutch.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_dutch.c' object='stem_UTF_8_dutch.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_dutch.obj `if test -f 'src_c/stem_UTF_8_dutch.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_dutch.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_dutch.c'; fi` + +stem_ISO_8859_1_english.o: src_c/stem_ISO_8859_1_english.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_english.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_english.Tpo -c -o stem_ISO_8859_1_english.o `test -f 'src_c/stem_ISO_8859_1_english.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_english.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_english.Tpo $(DEPDIR)/stem_ISO_8859_1_english.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_english.c' object='stem_ISO_8859_1_english.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_english.o `test -f 'src_c/stem_ISO_8859_1_english.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_english.c + +stem_ISO_8859_1_english.obj: src_c/stem_ISO_8859_1_english.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_english.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_english.Tpo -c -o stem_ISO_8859_1_english.obj `if test -f 'src_c/stem_ISO_8859_1_english.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_english.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_english.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_english.Tpo $(DEPDIR)/stem_ISO_8859_1_english.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_english.c' object='stem_ISO_8859_1_english.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_english.obj `if test -f 'src_c/stem_ISO_8859_1_english.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_english.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_english.c'; fi` + +stem_UTF_8_english.o: src_c/stem_UTF_8_english.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_english.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_english.Tpo -c -o stem_UTF_8_english.o `test -f 'src_c/stem_UTF_8_english.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_english.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_english.Tpo $(DEPDIR)/stem_UTF_8_english.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_english.c' object='stem_UTF_8_english.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_english.o `test -f 'src_c/stem_UTF_8_english.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_english.c + +stem_UTF_8_english.obj: src_c/stem_UTF_8_english.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_english.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_english.Tpo -c -o stem_UTF_8_english.obj `if test -f 'src_c/stem_UTF_8_english.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_english.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_english.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_english.Tpo $(DEPDIR)/stem_UTF_8_english.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_english.c' object='stem_UTF_8_english.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_english.obj `if test -f 'src_c/stem_UTF_8_english.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_english.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_english.c'; fi` + +stem_ISO_8859_1_finnish.o: src_c/stem_ISO_8859_1_finnish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_finnish.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_finnish.Tpo -c -o stem_ISO_8859_1_finnish.o `test -f 'src_c/stem_ISO_8859_1_finnish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_finnish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_finnish.Tpo $(DEPDIR)/stem_ISO_8859_1_finnish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_finnish.c' object='stem_ISO_8859_1_finnish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_finnish.o `test -f 'src_c/stem_ISO_8859_1_finnish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_finnish.c + +stem_ISO_8859_1_finnish.obj: src_c/stem_ISO_8859_1_finnish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_finnish.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_finnish.Tpo -c -o stem_ISO_8859_1_finnish.obj `if test -f 'src_c/stem_ISO_8859_1_finnish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_finnish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_finnish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_finnish.Tpo $(DEPDIR)/stem_ISO_8859_1_finnish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_finnish.c' object='stem_ISO_8859_1_finnish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_finnish.obj `if test -f 'src_c/stem_ISO_8859_1_finnish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_finnish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_finnish.c'; fi` + +stem_UTF_8_finnish.o: src_c/stem_UTF_8_finnish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_finnish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_finnish.Tpo -c -o stem_UTF_8_finnish.o `test -f 'src_c/stem_UTF_8_finnish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_finnish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_finnish.Tpo $(DEPDIR)/stem_UTF_8_finnish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_finnish.c' object='stem_UTF_8_finnish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_finnish.o `test -f 'src_c/stem_UTF_8_finnish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_finnish.c + +stem_UTF_8_finnish.obj: src_c/stem_UTF_8_finnish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_finnish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_finnish.Tpo -c -o stem_UTF_8_finnish.obj `if test -f 'src_c/stem_UTF_8_finnish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_finnish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_finnish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_finnish.Tpo $(DEPDIR)/stem_UTF_8_finnish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_finnish.c' object='stem_UTF_8_finnish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_finnish.obj `if test -f 'src_c/stem_UTF_8_finnish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_finnish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_finnish.c'; fi` + +stem_ISO_8859_1_french.o: src_c/stem_ISO_8859_1_french.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_french.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_french.Tpo -c -o stem_ISO_8859_1_french.o `test -f 'src_c/stem_ISO_8859_1_french.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_french.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_french.Tpo $(DEPDIR)/stem_ISO_8859_1_french.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_french.c' object='stem_ISO_8859_1_french.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_french.o `test -f 'src_c/stem_ISO_8859_1_french.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_french.c + +stem_ISO_8859_1_french.obj: src_c/stem_ISO_8859_1_french.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_french.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_french.Tpo -c -o stem_ISO_8859_1_french.obj `if test -f 'src_c/stem_ISO_8859_1_french.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_french.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_french.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_french.Tpo $(DEPDIR)/stem_ISO_8859_1_french.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_french.c' object='stem_ISO_8859_1_french.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_french.obj `if test -f 'src_c/stem_ISO_8859_1_french.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_french.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_french.c'; fi` + +stem_UTF_8_french.o: src_c/stem_UTF_8_french.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_french.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_french.Tpo -c -o stem_UTF_8_french.o `test -f 'src_c/stem_UTF_8_french.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_french.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_french.Tpo $(DEPDIR)/stem_UTF_8_french.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_french.c' object='stem_UTF_8_french.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_french.o `test -f 'src_c/stem_UTF_8_french.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_french.c + +stem_UTF_8_french.obj: src_c/stem_UTF_8_french.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_french.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_french.Tpo -c -o stem_UTF_8_french.obj `if test -f 'src_c/stem_UTF_8_french.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_french.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_french.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_french.Tpo $(DEPDIR)/stem_UTF_8_french.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_french.c' object='stem_UTF_8_french.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_french.obj `if test -f 'src_c/stem_UTF_8_french.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_french.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_french.c'; fi` + +stem_ISO_8859_1_german.o: src_c/stem_ISO_8859_1_german.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_german.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_german.Tpo -c -o stem_ISO_8859_1_german.o `test -f 'src_c/stem_ISO_8859_1_german.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_german.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_german.Tpo $(DEPDIR)/stem_ISO_8859_1_german.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_german.c' object='stem_ISO_8859_1_german.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_german.o `test -f 'src_c/stem_ISO_8859_1_german.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_german.c + +stem_ISO_8859_1_german.obj: src_c/stem_ISO_8859_1_german.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_german.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_german.Tpo -c -o stem_ISO_8859_1_german.obj `if test -f 'src_c/stem_ISO_8859_1_german.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_german.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_german.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_german.Tpo $(DEPDIR)/stem_ISO_8859_1_german.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_german.c' object='stem_ISO_8859_1_german.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_german.obj `if test -f 'src_c/stem_ISO_8859_1_german.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_german.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_german.c'; fi` + +stem_UTF_8_german.o: src_c/stem_UTF_8_german.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_german.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_german.Tpo -c -o stem_UTF_8_german.o `test -f 'src_c/stem_UTF_8_german.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_german.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_german.Tpo $(DEPDIR)/stem_UTF_8_german.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_german.c' object='stem_UTF_8_german.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_german.o `test -f 'src_c/stem_UTF_8_german.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_german.c + +stem_UTF_8_german.obj: src_c/stem_UTF_8_german.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_german.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_german.Tpo -c -o stem_UTF_8_german.obj `if test -f 'src_c/stem_UTF_8_german.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_german.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_german.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_german.Tpo $(DEPDIR)/stem_UTF_8_german.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_german.c' object='stem_UTF_8_german.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_german.obj `if test -f 'src_c/stem_UTF_8_german.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_german.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_german.c'; fi` + +stem_ISO_8859_1_hungarian.o: src_c/stem_ISO_8859_1_hungarian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_hungarian.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_hungarian.Tpo -c -o stem_ISO_8859_1_hungarian.o `test -f 'src_c/stem_ISO_8859_1_hungarian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_hungarian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_hungarian.Tpo $(DEPDIR)/stem_ISO_8859_1_hungarian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_hungarian.c' object='stem_ISO_8859_1_hungarian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_hungarian.o `test -f 'src_c/stem_ISO_8859_1_hungarian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_hungarian.c + +stem_ISO_8859_1_hungarian.obj: src_c/stem_ISO_8859_1_hungarian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_hungarian.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_hungarian.Tpo -c -o stem_ISO_8859_1_hungarian.obj `if test -f 'src_c/stem_ISO_8859_1_hungarian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_hungarian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_hungarian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_hungarian.Tpo $(DEPDIR)/stem_ISO_8859_1_hungarian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_hungarian.c' object='stem_ISO_8859_1_hungarian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_hungarian.obj `if test -f 'src_c/stem_ISO_8859_1_hungarian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_hungarian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_hungarian.c'; fi` + +stem_UTF_8_hungarian.o: src_c/stem_UTF_8_hungarian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_hungarian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_hungarian.Tpo -c -o stem_UTF_8_hungarian.o `test -f 'src_c/stem_UTF_8_hungarian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_hungarian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_hungarian.Tpo $(DEPDIR)/stem_UTF_8_hungarian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_hungarian.c' object='stem_UTF_8_hungarian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_hungarian.o `test -f 'src_c/stem_UTF_8_hungarian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_hungarian.c + +stem_UTF_8_hungarian.obj: src_c/stem_UTF_8_hungarian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_hungarian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_hungarian.Tpo -c -o stem_UTF_8_hungarian.obj `if test -f 'src_c/stem_UTF_8_hungarian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_hungarian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_hungarian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_hungarian.Tpo $(DEPDIR)/stem_UTF_8_hungarian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_hungarian.c' object='stem_UTF_8_hungarian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_hungarian.obj `if test -f 'src_c/stem_UTF_8_hungarian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_hungarian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_hungarian.c'; fi` + +stem_ISO_8859_1_italian.o: src_c/stem_ISO_8859_1_italian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_italian.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_italian.Tpo -c -o stem_ISO_8859_1_italian.o `test -f 'src_c/stem_ISO_8859_1_italian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_italian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_italian.Tpo $(DEPDIR)/stem_ISO_8859_1_italian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_italian.c' object='stem_ISO_8859_1_italian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_italian.o `test -f 'src_c/stem_ISO_8859_1_italian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_italian.c + +stem_ISO_8859_1_italian.obj: src_c/stem_ISO_8859_1_italian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_italian.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_italian.Tpo -c -o stem_ISO_8859_1_italian.obj `if test -f 'src_c/stem_ISO_8859_1_italian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_italian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_italian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_italian.Tpo $(DEPDIR)/stem_ISO_8859_1_italian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_italian.c' object='stem_ISO_8859_1_italian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_italian.obj `if test -f 'src_c/stem_ISO_8859_1_italian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_italian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_italian.c'; fi` + +stem_UTF_8_italian.o: src_c/stem_UTF_8_italian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_italian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_italian.Tpo -c -o stem_UTF_8_italian.o `test -f 'src_c/stem_UTF_8_italian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_italian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_italian.Tpo $(DEPDIR)/stem_UTF_8_italian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_italian.c' object='stem_UTF_8_italian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_italian.o `test -f 'src_c/stem_UTF_8_italian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_italian.c + +stem_UTF_8_italian.obj: src_c/stem_UTF_8_italian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_italian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_italian.Tpo -c -o stem_UTF_8_italian.obj `if test -f 'src_c/stem_UTF_8_italian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_italian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_italian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_italian.Tpo $(DEPDIR)/stem_UTF_8_italian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_italian.c' object='stem_UTF_8_italian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_italian.obj `if test -f 'src_c/stem_UTF_8_italian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_italian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_italian.c'; fi` + +stem_ISO_8859_1_norwegian.o: src_c/stem_ISO_8859_1_norwegian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_norwegian.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_norwegian.Tpo -c -o stem_ISO_8859_1_norwegian.o `test -f 'src_c/stem_ISO_8859_1_norwegian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_norwegian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_norwegian.Tpo $(DEPDIR)/stem_ISO_8859_1_norwegian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_norwegian.c' object='stem_ISO_8859_1_norwegian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_norwegian.o `test -f 'src_c/stem_ISO_8859_1_norwegian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_norwegian.c + +stem_ISO_8859_1_norwegian.obj: src_c/stem_ISO_8859_1_norwegian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_norwegian.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_norwegian.Tpo -c -o stem_ISO_8859_1_norwegian.obj `if test -f 'src_c/stem_ISO_8859_1_norwegian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_norwegian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_norwegian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_norwegian.Tpo $(DEPDIR)/stem_ISO_8859_1_norwegian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_norwegian.c' object='stem_ISO_8859_1_norwegian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_norwegian.obj `if test -f 'src_c/stem_ISO_8859_1_norwegian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_norwegian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_norwegian.c'; fi` + +stem_UTF_8_norwegian.o: src_c/stem_UTF_8_norwegian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_norwegian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_norwegian.Tpo -c -o stem_UTF_8_norwegian.o `test -f 'src_c/stem_UTF_8_norwegian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_norwegian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_norwegian.Tpo $(DEPDIR)/stem_UTF_8_norwegian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_norwegian.c' object='stem_UTF_8_norwegian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_norwegian.o `test -f 'src_c/stem_UTF_8_norwegian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_norwegian.c + +stem_UTF_8_norwegian.obj: src_c/stem_UTF_8_norwegian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_norwegian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_norwegian.Tpo -c -o stem_UTF_8_norwegian.obj `if test -f 'src_c/stem_UTF_8_norwegian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_norwegian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_norwegian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_norwegian.Tpo $(DEPDIR)/stem_UTF_8_norwegian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_norwegian.c' object='stem_UTF_8_norwegian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_norwegian.obj `if test -f 'src_c/stem_UTF_8_norwegian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_norwegian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_norwegian.c'; fi` + +stem_ISO_8859_1_porter.o: src_c/stem_ISO_8859_1_porter.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_porter.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_porter.Tpo -c -o stem_ISO_8859_1_porter.o `test -f 'src_c/stem_ISO_8859_1_porter.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_porter.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_porter.Tpo $(DEPDIR)/stem_ISO_8859_1_porter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_porter.c' object='stem_ISO_8859_1_porter.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_porter.o `test -f 'src_c/stem_ISO_8859_1_porter.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_porter.c + +stem_ISO_8859_1_porter.obj: src_c/stem_ISO_8859_1_porter.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_porter.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_porter.Tpo -c -o stem_ISO_8859_1_porter.obj `if test -f 'src_c/stem_ISO_8859_1_porter.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_porter.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_porter.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_porter.Tpo $(DEPDIR)/stem_ISO_8859_1_porter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_porter.c' object='stem_ISO_8859_1_porter.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_porter.obj `if test -f 'src_c/stem_ISO_8859_1_porter.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_porter.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_porter.c'; fi` + +stem_UTF_8_porter.o: src_c/stem_UTF_8_porter.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_porter.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_porter.Tpo -c -o stem_UTF_8_porter.o `test -f 'src_c/stem_UTF_8_porter.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_porter.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_porter.Tpo $(DEPDIR)/stem_UTF_8_porter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_porter.c' object='stem_UTF_8_porter.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_porter.o `test -f 'src_c/stem_UTF_8_porter.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_porter.c + +stem_UTF_8_porter.obj: src_c/stem_UTF_8_porter.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_porter.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_porter.Tpo -c -o stem_UTF_8_porter.obj `if test -f 'src_c/stem_UTF_8_porter.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_porter.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_porter.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_porter.Tpo $(DEPDIR)/stem_UTF_8_porter.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_porter.c' object='stem_UTF_8_porter.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_porter.obj `if test -f 'src_c/stem_UTF_8_porter.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_porter.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_porter.c'; fi` + +stem_ISO_8859_1_portuguese.o: src_c/stem_ISO_8859_1_portuguese.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_portuguese.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_portuguese.Tpo -c -o stem_ISO_8859_1_portuguese.o `test -f 'src_c/stem_ISO_8859_1_portuguese.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_portuguese.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_portuguese.Tpo $(DEPDIR)/stem_ISO_8859_1_portuguese.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_portuguese.c' object='stem_ISO_8859_1_portuguese.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_portuguese.o `test -f 'src_c/stem_ISO_8859_1_portuguese.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_portuguese.c + +stem_ISO_8859_1_portuguese.obj: src_c/stem_ISO_8859_1_portuguese.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_portuguese.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_portuguese.Tpo -c -o stem_ISO_8859_1_portuguese.obj `if test -f 'src_c/stem_ISO_8859_1_portuguese.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_portuguese.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_portuguese.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_portuguese.Tpo $(DEPDIR)/stem_ISO_8859_1_portuguese.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_portuguese.c' object='stem_ISO_8859_1_portuguese.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_portuguese.obj `if test -f 'src_c/stem_ISO_8859_1_portuguese.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_portuguese.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_portuguese.c'; fi` + +stem_UTF_8_portuguese.o: src_c/stem_UTF_8_portuguese.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_portuguese.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_portuguese.Tpo -c -o stem_UTF_8_portuguese.o `test -f 'src_c/stem_UTF_8_portuguese.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_portuguese.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_portuguese.Tpo $(DEPDIR)/stem_UTF_8_portuguese.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_portuguese.c' object='stem_UTF_8_portuguese.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_portuguese.o `test -f 'src_c/stem_UTF_8_portuguese.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_portuguese.c + +stem_UTF_8_portuguese.obj: src_c/stem_UTF_8_portuguese.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_portuguese.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_portuguese.Tpo -c -o stem_UTF_8_portuguese.obj `if test -f 'src_c/stem_UTF_8_portuguese.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_portuguese.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_portuguese.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_portuguese.Tpo $(DEPDIR)/stem_UTF_8_portuguese.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_portuguese.c' object='stem_UTF_8_portuguese.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_portuguese.obj `if test -f 'src_c/stem_UTF_8_portuguese.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_portuguese.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_portuguese.c'; fi` + +stem_ISO_8859_2_romanian.o: src_c/stem_ISO_8859_2_romanian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_2_romanian.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_2_romanian.Tpo -c -o stem_ISO_8859_2_romanian.o `test -f 'src_c/stem_ISO_8859_2_romanian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_2_romanian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_2_romanian.Tpo $(DEPDIR)/stem_ISO_8859_2_romanian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_2_romanian.c' object='stem_ISO_8859_2_romanian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_2_romanian.o `test -f 'src_c/stem_ISO_8859_2_romanian.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_2_romanian.c + +stem_ISO_8859_2_romanian.obj: src_c/stem_ISO_8859_2_romanian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_2_romanian.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_2_romanian.Tpo -c -o stem_ISO_8859_2_romanian.obj `if test -f 'src_c/stem_ISO_8859_2_romanian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_2_romanian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_2_romanian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_2_romanian.Tpo $(DEPDIR)/stem_ISO_8859_2_romanian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_2_romanian.c' object='stem_ISO_8859_2_romanian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_2_romanian.obj `if test -f 'src_c/stem_ISO_8859_2_romanian.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_2_romanian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_2_romanian.c'; fi` + +stem_UTF_8_romanian.o: src_c/stem_UTF_8_romanian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_romanian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_romanian.Tpo -c -o stem_UTF_8_romanian.o `test -f 'src_c/stem_UTF_8_romanian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_romanian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_romanian.Tpo $(DEPDIR)/stem_UTF_8_romanian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_romanian.c' object='stem_UTF_8_romanian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_romanian.o `test -f 'src_c/stem_UTF_8_romanian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_romanian.c + +stem_UTF_8_romanian.obj: src_c/stem_UTF_8_romanian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_romanian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_romanian.Tpo -c -o stem_UTF_8_romanian.obj `if test -f 'src_c/stem_UTF_8_romanian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_romanian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_romanian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_romanian.Tpo $(DEPDIR)/stem_UTF_8_romanian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_romanian.c' object='stem_UTF_8_romanian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_romanian.obj `if test -f 'src_c/stem_UTF_8_romanian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_romanian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_romanian.c'; fi` + +stem_KOI8_R_russian.o: src_c/stem_KOI8_R_russian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_KOI8_R_russian.o -MD -MP -MF $(DEPDIR)/stem_KOI8_R_russian.Tpo -c -o stem_KOI8_R_russian.o `test -f 'src_c/stem_KOI8_R_russian.c' || echo '$(srcdir)/'`src_c/stem_KOI8_R_russian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_KOI8_R_russian.Tpo $(DEPDIR)/stem_KOI8_R_russian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_KOI8_R_russian.c' object='stem_KOI8_R_russian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_KOI8_R_russian.o `test -f 'src_c/stem_KOI8_R_russian.c' || echo '$(srcdir)/'`src_c/stem_KOI8_R_russian.c + +stem_KOI8_R_russian.obj: src_c/stem_KOI8_R_russian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_KOI8_R_russian.obj -MD -MP -MF $(DEPDIR)/stem_KOI8_R_russian.Tpo -c -o stem_KOI8_R_russian.obj `if test -f 'src_c/stem_KOI8_R_russian.c'; then $(CYGPATH_W) 'src_c/stem_KOI8_R_russian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_KOI8_R_russian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_KOI8_R_russian.Tpo $(DEPDIR)/stem_KOI8_R_russian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_KOI8_R_russian.c' object='stem_KOI8_R_russian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_KOI8_R_russian.obj `if test -f 'src_c/stem_KOI8_R_russian.c'; then $(CYGPATH_W) 'src_c/stem_KOI8_R_russian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_KOI8_R_russian.c'; fi` + +stem_UTF_8_russian.o: src_c/stem_UTF_8_russian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_russian.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_russian.Tpo -c -o stem_UTF_8_russian.o `test -f 'src_c/stem_UTF_8_russian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_russian.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_russian.Tpo $(DEPDIR)/stem_UTF_8_russian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_russian.c' object='stem_UTF_8_russian.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_russian.o `test -f 'src_c/stem_UTF_8_russian.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_russian.c + +stem_UTF_8_russian.obj: src_c/stem_UTF_8_russian.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_russian.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_russian.Tpo -c -o stem_UTF_8_russian.obj `if test -f 'src_c/stem_UTF_8_russian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_russian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_russian.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_russian.Tpo $(DEPDIR)/stem_UTF_8_russian.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_russian.c' object='stem_UTF_8_russian.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_russian.obj `if test -f 'src_c/stem_UTF_8_russian.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_russian.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_russian.c'; fi` + +stem_ISO_8859_1_spanish.o: src_c/stem_ISO_8859_1_spanish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_spanish.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_spanish.Tpo -c -o stem_ISO_8859_1_spanish.o `test -f 'src_c/stem_ISO_8859_1_spanish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_spanish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_spanish.Tpo $(DEPDIR)/stem_ISO_8859_1_spanish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_spanish.c' object='stem_ISO_8859_1_spanish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_spanish.o `test -f 'src_c/stem_ISO_8859_1_spanish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_spanish.c + +stem_ISO_8859_1_spanish.obj: src_c/stem_ISO_8859_1_spanish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_spanish.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_spanish.Tpo -c -o stem_ISO_8859_1_spanish.obj `if test -f 'src_c/stem_ISO_8859_1_spanish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_spanish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_spanish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_spanish.Tpo $(DEPDIR)/stem_ISO_8859_1_spanish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_spanish.c' object='stem_ISO_8859_1_spanish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_spanish.obj `if test -f 'src_c/stem_ISO_8859_1_spanish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_spanish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_spanish.c'; fi` + +stem_UTF_8_spanish.o: src_c/stem_UTF_8_spanish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_spanish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_spanish.Tpo -c -o stem_UTF_8_spanish.o `test -f 'src_c/stem_UTF_8_spanish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_spanish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_spanish.Tpo $(DEPDIR)/stem_UTF_8_spanish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_spanish.c' object='stem_UTF_8_spanish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_spanish.o `test -f 'src_c/stem_UTF_8_spanish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_spanish.c + +stem_UTF_8_spanish.obj: src_c/stem_UTF_8_spanish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_spanish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_spanish.Tpo -c -o stem_UTF_8_spanish.obj `if test -f 'src_c/stem_UTF_8_spanish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_spanish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_spanish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_spanish.Tpo $(DEPDIR)/stem_UTF_8_spanish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_spanish.c' object='stem_UTF_8_spanish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_spanish.obj `if test -f 'src_c/stem_UTF_8_spanish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_spanish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_spanish.c'; fi` + +stem_ISO_8859_1_swedish.o: src_c/stem_ISO_8859_1_swedish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_swedish.o -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_swedish.Tpo -c -o stem_ISO_8859_1_swedish.o `test -f 'src_c/stem_ISO_8859_1_swedish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_swedish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_swedish.Tpo $(DEPDIR)/stem_ISO_8859_1_swedish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_swedish.c' object='stem_ISO_8859_1_swedish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_swedish.o `test -f 'src_c/stem_ISO_8859_1_swedish.c' || echo '$(srcdir)/'`src_c/stem_ISO_8859_1_swedish.c + +stem_ISO_8859_1_swedish.obj: src_c/stem_ISO_8859_1_swedish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_ISO_8859_1_swedish.obj -MD -MP -MF $(DEPDIR)/stem_ISO_8859_1_swedish.Tpo -c -o stem_ISO_8859_1_swedish.obj `if test -f 'src_c/stem_ISO_8859_1_swedish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_swedish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_swedish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_ISO_8859_1_swedish.Tpo $(DEPDIR)/stem_ISO_8859_1_swedish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_ISO_8859_1_swedish.c' object='stem_ISO_8859_1_swedish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_ISO_8859_1_swedish.obj `if test -f 'src_c/stem_ISO_8859_1_swedish.c'; then $(CYGPATH_W) 'src_c/stem_ISO_8859_1_swedish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_ISO_8859_1_swedish.c'; fi` + +stem_UTF_8_swedish.o: src_c/stem_UTF_8_swedish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_swedish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_swedish.Tpo -c -o stem_UTF_8_swedish.o `test -f 'src_c/stem_UTF_8_swedish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_swedish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_swedish.Tpo $(DEPDIR)/stem_UTF_8_swedish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_swedish.c' object='stem_UTF_8_swedish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_swedish.o `test -f 'src_c/stem_UTF_8_swedish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_swedish.c + +stem_UTF_8_swedish.obj: src_c/stem_UTF_8_swedish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_swedish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_swedish.Tpo -c -o stem_UTF_8_swedish.obj `if test -f 'src_c/stem_UTF_8_swedish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_swedish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_swedish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_swedish.Tpo $(DEPDIR)/stem_UTF_8_swedish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_swedish.c' object='stem_UTF_8_swedish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_swedish.obj `if test -f 'src_c/stem_UTF_8_swedish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_swedish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_swedish.c'; fi` + +stem_UTF_8_turkish.o: src_c/stem_UTF_8_turkish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_turkish.o -MD -MP -MF $(DEPDIR)/stem_UTF_8_turkish.Tpo -c -o stem_UTF_8_turkish.o `test -f 'src_c/stem_UTF_8_turkish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_turkish.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_turkish.Tpo $(DEPDIR)/stem_UTF_8_turkish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_turkish.c' object='stem_UTF_8_turkish.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_turkish.o `test -f 'src_c/stem_UTF_8_turkish.c' || echo '$(srcdir)/'`src_c/stem_UTF_8_turkish.c + +stem_UTF_8_turkish.obj: src_c/stem_UTF_8_turkish.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT stem_UTF_8_turkish.obj -MD -MP -MF $(DEPDIR)/stem_UTF_8_turkish.Tpo -c -o stem_UTF_8_turkish.obj `if test -f 'src_c/stem_UTF_8_turkish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_turkish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_turkish.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/stem_UTF_8_turkish.Tpo $(DEPDIR)/stem_UTF_8_turkish.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src_c/stem_UTF_8_turkish.c' object='stem_UTF_8_turkish.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o stem_UTF_8_turkish.obj `if test -f 'src_c/stem_UTF_8_turkish.c'; then $(CYGPATH_W) 'src_c/stem_UTF_8_turkish.c'; else $(CYGPATH_W) '$(srcdir)/src_c/stem_UTF_8_turkish.c'; fi` + +api.o: runtime/api.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT api.o -MD -MP -MF $(DEPDIR)/api.Tpo -c -o api.o `test -f 'runtime/api.c' || echo '$(srcdir)/'`runtime/api.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/api.Tpo $(DEPDIR)/api.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/api.c' object='api.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o api.o `test -f 'runtime/api.c' || echo '$(srcdir)/'`runtime/api.c + +api.obj: runtime/api.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT api.obj -MD -MP -MF $(DEPDIR)/api.Tpo -c -o api.obj `if test -f 'runtime/api.c'; then $(CYGPATH_W) 'runtime/api.c'; else $(CYGPATH_W) '$(srcdir)/runtime/api.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/api.Tpo $(DEPDIR)/api.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/api.c' object='api.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o api.obj `if test -f 'runtime/api.c'; then $(CYGPATH_W) 'runtime/api.c'; else $(CYGPATH_W) '$(srcdir)/runtime/api.c'; fi` + +utilities.o: runtime/utilities.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utilities.o -MD -MP -MF $(DEPDIR)/utilities.Tpo -c -o utilities.o `test -f 'runtime/utilities.c' || echo '$(srcdir)/'`runtime/utilities.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/utilities.Tpo $(DEPDIR)/utilities.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/utilities.c' object='utilities.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utilities.o `test -f 'runtime/utilities.c' || echo '$(srcdir)/'`runtime/utilities.c + +utilities.obj: runtime/utilities.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT utilities.obj -MD -MP -MF $(DEPDIR)/utilities.Tpo -c -o utilities.obj `if test -f 'runtime/utilities.c'; then $(CYGPATH_W) 'runtime/utilities.c'; else $(CYGPATH_W) '$(srcdir)/runtime/utilities.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/utilities.Tpo $(DEPDIR)/utilities.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='runtime/utilities.c' object='utilities.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o utilities.obj `if test -f 'runtime/utilities.c'; then $(CYGPATH_W) 'runtime/utilities.c'; else $(CYGPATH_W) '$(srcdir)/runtime/utilities.c'; fi` + +libstemmer.o: libstemmer/libstemmer.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libstemmer.o -MD -MP -MF $(DEPDIR)/libstemmer.Tpo -c -o libstemmer.o `test -f 'libstemmer/libstemmer.c' || echo '$(srcdir)/'`libstemmer/libstemmer.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libstemmer.Tpo $(DEPDIR)/libstemmer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libstemmer/libstemmer.c' object='libstemmer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libstemmer.o `test -f 'libstemmer/libstemmer.c' || echo '$(srcdir)/'`libstemmer/libstemmer.c + +libstemmer.obj: libstemmer/libstemmer.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libstemmer.obj -MD -MP -MF $(DEPDIR)/libstemmer.Tpo -c -o libstemmer.obj `if test -f 'libstemmer/libstemmer.c'; then $(CYGPATH_W) 'libstemmer/libstemmer.c'; else $(CYGPATH_W) '$(srcdir)/libstemmer/libstemmer.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libstemmer.Tpo $(DEPDIR)/libstemmer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libstemmer/libstemmer.c' object='libstemmer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libstemmer.obj `if test -f 'libstemmer/libstemmer.c'; then $(CYGPATH_W) 'libstemmer/libstemmer.c'; else $(CYGPATH_W) '$(srcdir)/libstemmer/libstemmer.c'; fi` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/csft-4.1/libstemmer_c/README b/coreseek/csft-4.1/libstemmer_c/README new file mode 100755 index 0000000..5873b42 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/README @@ -0,0 +1,3 @@ +Dummy file for automake. +Should be overwritten after libstemmer_c.tgz is properly extracted. +The latest should be available at http://snowball.tartarus.org/dist/libstemmer_c.tgz diff --git a/coreseek/csft-4.1/libstemmer_c/libstemmer_c.sln b/coreseek/csft-4.1/libstemmer_c/libstemmer_c.sln new file mode 100755 index 0000000..58dce7f --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/libstemmer_c.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libstemmer_c", "libstemmer_c.vcproj", "{0F64D11C-6E40-4F63-8B7F-E5B615D38301}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0F64D11C-6E40-4F63-8B7F-E5B615D38301}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F64D11C-6E40-4F63-8B7F-E5B615D38301}.Debug|Win32.Build.0 = Debug|Win32 + {0F64D11C-6E40-4F63-8B7F-E5B615D38301}.Release|Win32.ActiveCfg = Release|Win32 + {0F64D11C-6E40-4F63-8B7F-E5B615D38301}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/coreseek/csft-4.1/libstemmer_c/libstemmer_c.vcproj b/coreseek/csft-4.1/libstemmer_c/libstemmer_c.vcproj new file mode 100755 index 0000000..00333b2 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/libstemmer_c.vcproj @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/libstemmer_c/mkinc.mak b/coreseek/csft-4.1/libstemmer_c/mkinc.mak new file mode 100755 index 0000000..0c07199 --- /dev/null +++ b/coreseek/csft-4.1/libstemmer_c/mkinc.mak @@ -0,0 +1,82 @@ +# libstemmer/mkinc.mak: List of stemming module source files +# +# This file is generated by mkmodules.pl from a list of module names. +# Do not edit manually. +# +# Modules included by this file are: danish, dutch, english, finnish, french, +# german, hungarian, italian, norwegian, porter, portuguese, romanian, +# russian, spanish, swedish, turkish + +snowball_sources= \ + src_c/stem_ISO_8859_1_danish.c \ + src_c/stem_UTF_8_danish.c \ + src_c/stem_ISO_8859_1_dutch.c \ + src_c/stem_UTF_8_dutch.c \ + src_c/stem_ISO_8859_1_english.c \ + src_c/stem_UTF_8_english.c \ + src_c/stem_ISO_8859_1_finnish.c \ + src_c/stem_UTF_8_finnish.c \ + src_c/stem_ISO_8859_1_french.c \ + src_c/stem_UTF_8_french.c \ + src_c/stem_ISO_8859_1_german.c \ + src_c/stem_UTF_8_german.c \ + src_c/stem_ISO_8859_1_hungarian.c \ + src_c/stem_UTF_8_hungarian.c \ + src_c/stem_ISO_8859_1_italian.c \ + src_c/stem_UTF_8_italian.c \ + src_c/stem_ISO_8859_1_norwegian.c \ + src_c/stem_UTF_8_norwegian.c \ + src_c/stem_ISO_8859_1_porter.c \ + src_c/stem_UTF_8_porter.c \ + src_c/stem_ISO_8859_1_portuguese.c \ + src_c/stem_UTF_8_portuguese.c \ + src_c/stem_ISO_8859_2_romanian.c \ + src_c/stem_UTF_8_romanian.c \ + src_c/stem_KOI8_R_russian.c \ + src_c/stem_UTF_8_russian.c \ + src_c/stem_ISO_8859_1_spanish.c \ + src_c/stem_UTF_8_spanish.c \ + src_c/stem_ISO_8859_1_swedish.c \ + src_c/stem_UTF_8_swedish.c \ + src_c/stem_UTF_8_turkish.c \ + runtime/api.c \ + runtime/utilities.c \ + libstemmer/libstemmer.c + +snowball_headers= \ + src_c/stem_ISO_8859_1_danish.h \ + src_c/stem_UTF_8_danish.h \ + src_c/stem_ISO_8859_1_dutch.h \ + src_c/stem_UTF_8_dutch.h \ + src_c/stem_ISO_8859_1_english.h \ + src_c/stem_UTF_8_english.h \ + src_c/stem_ISO_8859_1_finnish.h \ + src_c/stem_UTF_8_finnish.h \ + src_c/stem_ISO_8859_1_french.h \ + src_c/stem_UTF_8_french.h \ + src_c/stem_ISO_8859_1_german.h \ + src_c/stem_UTF_8_german.h \ + src_c/stem_ISO_8859_1_hungarian.h \ + src_c/stem_UTF_8_hungarian.h \ + src_c/stem_ISO_8859_1_italian.h \ + src_c/stem_UTF_8_italian.h \ + src_c/stem_ISO_8859_1_norwegian.h \ + src_c/stem_UTF_8_norwegian.h \ + src_c/stem_ISO_8859_1_porter.h \ + src_c/stem_UTF_8_porter.h \ + src_c/stem_ISO_8859_1_portuguese.h \ + src_c/stem_UTF_8_portuguese.h \ + src_c/stem_ISO_8859_2_romanian.h \ + src_c/stem_UTF_8_romanian.h \ + src_c/stem_KOI8_R_russian.h \ + src_c/stem_UTF_8_russian.h \ + src_c/stem_ISO_8859_1_spanish.h \ + src_c/stem_UTF_8_spanish.h \ + src_c/stem_ISO_8859_1_swedish.h \ + src_c/stem_UTF_8_swedish.h \ + src_c/stem_UTF_8_turkish.h \ + include/libstemmer.h \ + libstemmer/modules.h \ + runtime/api.h \ + runtime/header.h + diff --git a/coreseek/csft-4.1/misc/build.cmd b/coreseek/csft-4.1/misc/build.cmd new file mode 100755 index 0000000..df195db --- /dev/null +++ b/coreseek/csft-4.1/misc/build.cmd @@ -0,0 +1,170 @@ +@echo off + + +set URL=http://sphinxsearch.googlecode.com/svn/trunk +set REL=1.11 + + +set PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;%PATH%; +set ICONVROOT=C:\Bin\Iconv +set EXPATROOT=C:\Bin\Expat +set MYSQLROOT=C:\Program Files\MySQL\MySQL Server 5.0 +set PGSQLROOT=C:\Program Files\PostgreSQL\8.3 + + +if "%1" EQU "" ( + echo *** FATAL: specify build tag as 1st argument (eg. build.cmd rc2 or build.cmd r2345^). + exit +) else ( + set TAG=-%1 +) + + +rmdir /s /q sphinxbuild 2>nul +mkdir sphinxbuild +cd sphinxbuild +if %ERRORLEVEL% NEQ 0 ( + echo *** FATAL: failed to create build directory. + exit +) + + +svn co %URL% checkout +if %ERRORLEVEL% NEQ 0 ( + echo *** FATAL: checkout error. + exit +) + + +call checkout\src\svnxrev.cmd checkout +echo #define SPHINX_TAG "%TAG%" >> checkout\src\sphinxversion.h +perl -i.bak -p -e "s/(_TAGREV \").*(r\d+\")/\1\2/g;" checkout\src\sphinxversion.h +rmdir /s /q checkout\.svn + +@rem strip "release" tag from zip names +if "%1" EQU "release" ( + set TAG= +) + +@rem ========================================== +@rem === regular build and common packaging === +@rem ========================================== + +cd checkout +devenv sphinx05.sln /Rebuild Release +if %ERRORLEVEL% NEQ 0 ( + echo *** FATAL: build error. + exit +) +del /q bin\release\test*.* + +cd .. +mkdir common +for %%i in (api doc contrib) do ( + svn export checkout\%%i common\%%i +) +for %%i in (COPYING INSTALL sphinx.conf.in sphinx-min.conf.in example.sql) do ( + copy checkout\%%i common\%%i +) + + +set BASE=sphinx-%REL%%TAG%-win32 +mkdir %BASE% +mkdir %BASE%\bin +copy checkout\bin\release\*.exe %BASE%\bin +copy "%ICONVROOT%\bin\iconv.dll" %BASE%\bin +copy "%EXPATROOT%\libs\libexpat.dll" %BASE%\bin +copy "%MYSQLROOT%\bin\libmysql.dll" %BASE%\bin +xcopy /q /s common\* %BASE% +pkzip25 -add %BASE%.zip -dir %BASE%\* +move %BASE%.zip .. + +set PDBS=sphinx-%REL%%TAG%-win32-debug +mkdir %PDBS% +mkdir %PDBS%\regular +copy checkout\bin\release\*.pdb %PDBS%\regular + +@rem =================== +@rem === pgsql build === +@rem =================== + +cd checkout +perl -i.bak -p -e "s/USE_PGSQL\s+\d/USE_PGSQL 1/g;" src\sphinx.h +devenv sphinx05.sln /Rebuild Release +if %ERRORLEVEL% NEQ 0 ( + echo *** FATAL: build error. + exit +) +del /q bin\release\test*.* + +cd .. +set BASE=sphinx-%REL%%TAG%-win32-pgsql +mkdir %BASE% +mkdir %BASE%\bin +copy checkout\bin\release\*.exe %BASE%\bin + +for %%i in (comerr32.dll gssapi32.dll iconv.dll k5sprt32.dll krb5_32.dll libeay32.dll libiconv2.dll libintl3.dll libpq.dll ssleay32.dll) do ( + copy "%PGSQLROOT%\bin\%%i" %BASE%\bin +) + +copy "%EXPATROOT%\libs\libexpat.dll" %BASE%\bin +copy "%MYSQLROOT%\bin\libmysql.dll" %BASE%\bin +xcopy /q /s common\* %BASE% +pkzip25 -add %BASE%.zip -dir %BASE%\* +move %BASE%.zip .. + +mkdir %PDBS%\pgsql +copy checkout\bin\release\*.pdb %PDBS%\pgsql + +@rem ======================= +@rem === id64-full build === +@rem ======================= + +cd checkout +perl -i.bak -p -e "s/USE_LIBSTEMMER\s+\d/USE_LIBSTEMMER 1/g;" src\sphinx.h +perl -i.bak -p -e "s/USE_64BIT\s+\d/USE_64BIT 1/g;" src\sphinx.h + +wget http://snowball.tartarus.org/dist/libstemmer_c.tgz +gunzip libstemmer_c.tgz +tar xvf libstemmer_c.tar + +cd libstemmer_c +devenv libstemmer_c.sln /Rebuild Release +if %ERRORLEVEL% NEQ 0 ( + echo *** FATAL: build error. + exit +) + +cd .. +devenv sphinx05.sln /Rebuild Release +if %ERRORLEVEL% NEQ 0 ( + echo *** FATAL: build error. + exit +) +del /q bin\release\test*.* + +cd .. +set BASE=sphinx-%REL%%TAG%-win32-id64-full +mkdir %BASE% +mkdir %BASE%\bin +copy checkout\bin\release\*.exe %BASE%\bin + +for %%i in (comerr32.dll gssapi32.dll iconv.dll k5sprt32.dll krb5_32.dll libeay32.dll libiconv2.dll libintl3.dll libpq.dll ssleay32.dll) do ( + copy "%PGSQLROOT%\bin\%%i" %BASE%\bin +) + +copy "%EXPATROOT%\libs\libexpat.dll" %BASE%\bin +copy "%MYSQLROOT%\bin\libmysql.dll" %BASE%\bin +xcopy /q /s common\* %BASE% +pkzip25 -add %BASE%.zip -dir %BASE%\* +move %BASE%.zip .. + +mkdir %PDBS%\id64full +copy checkout\bin\release\*.pdb %PDBS%\id64full + +@rem ============================= +@rem === debug symbols archive === +@rem ============================== + +pkzip25 -add %PDBS%.zip -dir %PDBS%\* +move %PDBS%.zip .. diff --git a/coreseek/csft-4.1/misc/resolve.py b/coreseek/csft-4.1/misc/resolve.py new file mode 100755 index 0000000..a46d880 --- /dev/null +++ b/coreseek/csft-4.1/misc/resolve.py @@ -0,0 +1,50 @@ +# +# $Id$ +# + +import sys, re + +if len(sys.argv)!=3: + print 'Usage: python resolve.py BACKTRACE SYMBOLS' + sys.exit(0) + +def myopen(name): + if name == '-': + return sys.stdin + fh = open(name, 'r') + if not fh: + print 'FATAL: failed to open %s' % name + sys.exit(1) + return fh + +syms = [] +fp = myopen(sys.argv[2]) +for line in fp.readlines(): + line = line.rstrip() + match = re.match('([0-9a-fA-F]+) \w ', line) + if match: + addr = int(match.group(1), 16) + name = line[len(match.group(0)):] + syms.append([addr, name]) +fp.close() + +fp = myopen(sys.argv[1]) +for line in fp.readlines(): + line = line.rstrip() + + # skip plain boring log entries + if re.search('^\[\w+\s+\w+\s+\d+\s+\d+:\d+:\d+\.\d+ \d+\] \[\d+\] \S', line): + continue + + # resolve symbols, if any + match = re.search('\[0x([0-9a-fA-F]+)\]', line) + if match: + addr = int(match.group(1), 16) + resolved = '???' + for i in range(len(syms)-1): + if syms[i][0]<=addr and addr dict.sql +mysql -u root test < dict.sql +indexer --config suggest.conf --all +searchd --config suggest.conf +php suggest.php --query sphynx + +--eof-- diff --git a/coreseek/csft-4.1/misc/suggest/suggest.conf b/coreseek/csft-4.1/misc/suggest/suggest.conf new file mode 100755 index 0000000..70ac9da --- /dev/null +++ b/coreseek/csft-4.1/misc/suggest/suggest.conf @@ -0,0 +1,45 @@ +source suggest +{ + type = mysql + sql_host = localhost + sql_user = root + sql_pass = + sql_db = test + + sql_query_pre = SET NAMES utf8 + sql_query = SELECT id, trigrams, freq, LENGTH(keyword) AS len, keyword FROM suggest + + sql_attr_uint = freq + sql_attr_uint = len + sql_attr_string = keyword +} + + +index suggest +{ + source = suggest + path = suggest + docinfo = extern + charset_type = utf-8 +} + + +indexer +{ + mem_limit = 32M +} + + +searchd +{ + port = 9312 + log = searchd.log + query_log = query.log + read_timeout = 5 + max_children = 30 + pid_file = searchd.pid + max_matches = 1000 + seamless_rotate = 1 + preopen_indexes = 0 + unlink_old = 1 +} diff --git a/coreseek/csft-4.1/misc/suggest/suggest.php b/coreseek/csft-4.1/misc/suggest/suggest.php new file mode 100755 index 0000000..ba108d1 --- /dev/null +++ b/coreseek/csft-4.1/misc/suggest/suggest.php @@ -0,0 +1,144 @@ +SetMatchMode ( SPH_MATCH_EXTENDED2 ); + $cl->SetRankingMode ( SPH_RANK_WORDCOUNT ); + $cl->SetFilterRange ( "len", $len-$delta, $len+$delta ); + $cl->SetSelect ( "*, @weight+$delta-abs(len-$len) AS myrank" ); + $cl->SetSortMode ( SPH_SORT_EXTENDED, "myrank DESC, freq DESC" ); + $cl->SetArrayResult ( true ); + + // pull top-N best trigram matches and run them through Levenshtein + $res = $cl->Query ( $query, "suggest", 0, TOP_COUNT ); + + if ( !$res || !$res["matches"] ) + return false; + + if ( SUGGEST_DEBUG ) + { + print "--- DEBUG START ---\n"; + + foreach ( $res["matches"] as $match ) + { + $w = $match["keyword"]; + $myrank = @$match["attrs"]["myrank"]; + if ( $myrank ) + $myrank = ", myrank=$myrank"; + $levdist = levenshtein ( $keyword, $w ); + + print "id=$match[id], weight=$match[weight], freq={$match[attrs][freq]}{$myrank}, word=$w, levdist=$levdist\n"; + } + + print "--- DEBUG END ---\n"; + } + + // further restrict trigram matches with a sane Levenshtein distance limit + foreach ( $res["matches"] as $match ) + { + $suggested = $match["attrs"]["keyword"]; + if ( levenshtein ( $keyword, $suggested )<=LEVENSHTEIN_THRESHOLD ) + return $suggested; + } + return $keyword; +} + +/// main +if ( $_SERVER["argc"]<2 ) +{ + die ( "usage:\n" + . "php suggest.php --builddict\treads stopwords from stdin, prints SQL dump of the dictionary to stdout\n" + . "php suggest.php --query WORD\tqueries Sphinx, prints suggestion\n" ); +} + +if ( $_SERVER["argv"][1]=="--builddict" ) +{ + $in = fopen ( "php://stdin", "r" ); + $out = fopen ( "php://stdout", "w+" ); + BuildDictionarySQL ( $out, $in ); +} + +if ( $_SERVER["argv"][1]=="--query" ) +{ + mysql_connect ( "localhost", "root", "" ) or die ( "mysql_connect() failed: ".mysql_error() ); + mysql_select_db ( "test" ) or die ( "mysql_select_db() failed: ".mysql_error() ); + + $keyword = $_SERVER["argv"][2]; + printf ( "keyword: %s\nsuggestion: %s\n", $keyword, MakeSuggestion($keyword) ); +} diff --git a/coreseek/csft-4.1/mysqlse/CMakeLists.txt b/coreseek/csft-4.1/mysqlse/CMakeLists.txt new file mode 100755 index 0000000..611a12d --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/CMakeLists.txt @@ -0,0 +1,16 @@ +SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX") +ADD_DEFINITIONS(-DMYSQL_SERVER) + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/sql + ${CMAKE_SOURCE_DIR}/extra/yassl/include + ${CMAKE_SOURCE_DIR}/regex) + +SET(SPHINX_SOURCES ha_sphinx.cc) +IF(MYSQL_VERSION_ID LESS 50515) +ADD_LIBRARY(sphinx ha_sphinx.cc) +ELSE() +SET(SPHINX_PLUGIN_DYNAMIC "ha_sphinx") +MYSQL_ADD_PLUGIN(sphinx ${SPHINX_SOURCES} STORAGE_ENGINE MODULE_ONLY LINK_LIBRARIES mysys) +ENDIF() diff --git a/coreseek/csft-4.1/mysqlse/INSTALL b/coreseek/csft-4.1/mysqlse/INSTALL new file mode 100755 index 0000000..1a65402 --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/INSTALL @@ -0,0 +1,48 @@ +Building MySQL with SphinxSE +============================= + +Note: BUILD/autorun.sh step on Linux might malfunction with some +versions of automake; autorun.sh will not fail but the build will. +automake 1.9.6 is known to work. + + + +MySQL 5.0.x on Linux +--------------------- + +tar zxvf mysql-5.0.91.tar.gz +cp -R mysqlse mysql-5.0.91/sql/sphinx +cd mysql-5.0.91 + +patch -p1 -i sql/sphinx/sphinx.5.0.91.diff +sh BUILD/autorun.sh +./configure --with-sphinx-storage-engine +make + + + +MySQL 5.1.x on Linux +--------------------- + +tar zxvf mysql-5.1.47.tar.gz +cp -R -p mysqlse mysql-5.1.47/storage/sphinx +cd mysql-5.1.47 + +sh BUILD/autorun.sh +./configure --with-plugins=sphinx +make + + + +MySQL 5.0.x on Windows +----------------------- + +tar zxvf mysql-5.0.91.tar.gz +cp -R mysqlse mysql-5.0.91/sql/sphinx +cd mysql-5.0.91 + +patch -p1 -i sql/sphinx/sphinx.5.0.91.diff +win/configure.js WITH_SPHINX_STORAGE_ENGINE +win/build-vs8 + +--eof-- diff --git a/coreseek/csft-4.1/mysqlse/Makefile.am b/coreseek/csft-4.1/mysqlse/Makefile.am new file mode 100755 index 0000000..9341fc3 --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/Makefile.am @@ -0,0 +1,59 @@ +# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB +# +# This program is free software; you can 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 + +#called from the top level Makefile + +MYSQLDATAdir = $(localstatedir) +MYSQLSHAREdir = $(pkgdatadir) +MYSQLBASEdir= $(prefix) +MYSQLLIBdir= $(pkglibdir) +pkgplugindir = $(pkglibdir)/plugin +INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/include \ + -I$(top_srcdir)/regex \ + -I$(top_srcdir)/sql \ + -I$(srcdir) +SUBDIRS = ../../include ../../mysys ../../strings ../../dbug ../../extra +WRAPLIBS= + +LDADD = + +DEFS= @DEFS@ \ + -D_REENTRANT -D_PTHREADS -DENGINE -DSTORAGE_ENGINE -DMYSQL_SERVER + +noinst_HEADERS = ha_sphinx.h + +EXTRA_LTLIBRARIES = ha_sphinx.la +pkgplugin_LTLIBRARIES = @plugin_sphinx_shared_target@ sphinx.la + +ha_sphinx_la_LDFLAGS = -module -rpath $(MYSQLLIBdir) +ha_sphinx_la_CXXFLAGS= $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN +ha_sphinx_la_CFLAGS = $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN +ha_sphinx_la_SOURCES = ha_sphinx.cc + +sphinx_la_LDFLAGS = -module +sphinx_la_CXXFLAGS = $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN +sphinx_la_CFLAGS = $(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN +sphinx_la_SOURCES = snippets_udf.cc + +EXTRA_LIBRARIES = libsphinx.a +noinst_LIBRARIES = @plugin_sphinx_static_target@ +libsphinx_a_CXXFLAGS = $(AM_CFLAGS) +libsphinx_a_CFLAGS = $(AM_CFLAGS) +libsphinx_a_SOURCES= ha_sphinx.cc + +EXTRA_DIST = cmakelists.txt +# Don't update the files from bitkeeper +%::SCCS/s.% diff --git a/coreseek/csft-4.1/mysqlse/gen_data.php b/coreseek/csft-4.1/mysqlse/gen_data.php new file mode 100755 index 0000000..dac374f --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/gen_data.php @@ -0,0 +1,37 @@ + diff --git a/coreseek/csft-4.1/mysqlse/ha_sphinx.cc b/coreseek/csft-4.1/mysqlse/ha_sphinx.cc new file mode 100755 index 0000000..afb43ef --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/ha_sphinx.cc @@ -0,0 +1,3591 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifdef USE_PRAGMA_IMPLEMENTATION +#pragma implementation // gcc: Class implementation +#endif + +#if _MSC_VER>=1400 +#define _CRT_SECURE_NO_DEPRECATE 1 +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif + +#include + +#if MYSQL_VERSION_ID>=50515 +#include "sql_class.h" +#include "sql_array.h" +#elif MYSQL_VERSION_ID>50100 +#include "mysql_priv.h" +#include +#else +#include "../mysql_priv.h" +#endif + +#include +#include +#include // include client for INSERT table (sort of redoing federated..) + +#ifndef __WIN__ + // UNIX-specific + #include + #include + #include + + #define RECV_FLAGS MSG_WAITALL + + #define sphSockClose(_sock) ::close(_sock) +#else + // Windows-specific + #include + #define strcasecmp stricmp + #define snprintf _snprintf + + #define RECV_FLAGS 0 + + #define sphSockClose(_sock) ::closesocket(_sock) +#endif + +#include +#include "ha_sphinx.h" + +#ifndef MSG_WAITALL +#define MSG_WAITALL 0 +#endif + +#if _MSC_VER>=1400 +#pragma warning(push,4) +#endif + +///////////////////////////////////////////////////////////////////////////// + +/// there might be issues with min() on different platforms (eg. Gentoo, they say) +#define Min(a,b) ((a)<(b)?(a):(b)) + +/// unaligned RAM accesses are forbidden on SPARC +#if defined(sparc) || defined(__sparc__) +#define UNALIGNED_RAM_ACCESS 0 +#else +#define UNALIGNED_RAM_ACCESS 1 +#endif + + +#if UNALIGNED_RAM_ACCESS + +/// pass-through wrapper +template < typename T > inline T sphUnalignedRead ( const T & tRef ) +{ + return tRef; +} + +/// pass-through wrapper +template < typename T > void sphUnalignedWrite ( void * pPtr, const T & tVal ) +{ + *(T*)pPtr = tVal; +} + +#else + +/// unaligned read wrapper for some architectures (eg. SPARC) +template < typename T > +inline T sphUnalignedRead ( const T & tRef ) +{ + T uTmp; + byte * pSrc = (byte *) &tRef; + byte * pDst = (byte *) &uTmp; + for ( int i=0; i<(int)sizeof(T); i++ ) + *pDst++ = *pSrc++; + return uTmp; +} + +/// unaligned write wrapper for some architectures (eg. SPARC) +template < typename T > +void sphUnalignedWrite ( void * pPtr, const T & tVal ) +{ + byte * pDst = (byte *) pPtr; + byte * pSrc = (byte *) &tVal; + for ( int i=0; i<(int)sizeof(T); i++ ) + *pDst++ = *pSrc++; +} + +#endif + +#if MYSQL_VERSION_ID>=50515 + +#define sphinx_hash_init my_hash_init +#define sphinx_hash_free my_hash_free +#define sphinx_hash_search my_hash_search +#define sphinx_hash_delete my_hash_delete + +#else + +#define sphinx_hash_init hash_init +#define sphinx_hash_free hash_free +#define sphinx_hash_search hash_search +#define sphinx_hash_delete hash_delete + +#endif + +///////////////////////////////////////////////////////////////////////////// + +// FIXME! make this all dynamic +#define SPHINXSE_MAX_FILTERS 32 + +#define SPHINXAPI_DEFAULT_HOST "127.0.0.1" +#define SPHINXAPI_DEFAULT_PORT 9312 +#define SPHINXAPI_DEFAULT_INDEX "*" + +#define SPHINXQL_DEFAULT_PORT 9306 + +#define SPHINXSE_SYSTEM_COLUMNS 3 + +#define SPHINXSE_MAX_ALLOC (16*1024*1024) +#define SPHINXSE_MAX_KEYWORDSTATS 4096 + +#define SPHINXSE_VERSION "2.0.2-dev ($Revision: 2917)" + +// FIXME? the following is cut-n-paste from sphinx.h and searchd.cpp +// cut-n-paste is somewhat simpler that adding dependencies however.. + +enum +{ + SPHINX_SEARCHD_PROTO = 1, + SEARCHD_COMMAND_SEARCH = 0, + VER_COMMAND_SEARCH = 0x119, +}; + +/// search query sorting orders +enum ESphSortOrder +{ + SPH_SORT_RELEVANCE = 0, ///< sort by document relevance desc, then by date + SPH_SORT_ATTR_DESC = 1, ///< sort by document date desc, then by relevance desc + SPH_SORT_ATTR_ASC = 2, ///< sort by document date asc, then by relevance desc + SPH_SORT_TIME_SEGMENTS = 3, ///< sort by time segments (hour/day/week/etc) desc, then by relevance desc + SPH_SORT_EXTENDED = 4, ///< sort by SQL-like expression (eg. "@relevance DESC, price ASC, @id DESC") + SPH_SORT_EXPR = 5, ///< sort by expression + + SPH_SORT_TOTAL +}; + +/// search query matching mode +enum ESphMatchMode +{ + SPH_MATCH_ALL = 0, ///< match all query words + SPH_MATCH_ANY, ///< match any query word + SPH_MATCH_PHRASE, ///< match this exact phrase + SPH_MATCH_BOOLEAN, ///< match this boolean query + SPH_MATCH_EXTENDED, ///< match this extended query + SPH_MATCH_FULLSCAN, ///< match all document IDs w/o fulltext query, apply filters + SPH_MATCH_EXTENDED2, ///< extended engine V2 + + SPH_MATCH_TOTAL +}; + +/// search query relevance ranking mode +enum ESphRankMode +{ + SPH_RANK_PROXIMITY_BM25 = 0, ///< default mode, phrase proximity major factor and BM25 minor one + SPH_RANK_BM25 = 1, ///< statistical mode, BM25 ranking only (faster but worse quality) + SPH_RANK_NONE = 2, ///< no ranking, all matches get a weight of 1 + SPH_RANK_WORDCOUNT = 3, ///< simple word-count weighting, rank is a weighted sum of per-field keyword occurence counts + SPH_RANK_PROXIMITY = 4, ///< phrase proximity + SPH_RANK_MATCHANY = 5, ///< emulate old match-any weighting + SPH_RANK_FIELDMASK = 6, ///< sets bits where there were matches + SPH_RANK_SPH04 = 7, ///< codename SPH04, phrase proximity + bm25 + head/exact boost + + SPH_RANK_TOTAL, + SPH_RANK_DEFAULT = SPH_RANK_PROXIMITY_BM25 +}; + +/// search query grouping mode +enum ESphGroupBy +{ + SPH_GROUPBY_DAY = 0, ///< group by day + SPH_GROUPBY_WEEK = 1, ///< group by week + SPH_GROUPBY_MONTH = 2, ///< group by month + SPH_GROUPBY_YEAR = 3, ///< group by year + SPH_GROUPBY_ATTR = 4 ///< group by attribute value +}; + +/// known attribute types +enum +{ + SPH_ATTR_NONE = 0, ///< not an attribute at all + SPH_ATTR_INTEGER = 1, ///< this attr is just an integer + SPH_ATTR_TIMESTAMP = 2, ///< this attr is a timestamp + SPH_ATTR_ORDINAL = 3, ///< this attr is an ordinal string number (integer at search time, specially handled at indexing time) + SPH_ATTR_BOOL = 4, ///< this attr is a boolean bit field + SPH_ATTR_FLOAT = 5, + SPH_ATTR_BIGINT = 6, + SPH_ATTR_STRING = 7, ///< string (binary; in-memory) + + SPH_ATTR_UINT32SET = 0x40000001UL, ///< this attr is multiple int32 values (0 or more) + SPH_ATTR_UINT64SET = 0x40000002UL ///< this attr is multiple int64 values (0 or more) +}; + +/// known answers +enum +{ + SEARCHD_OK = 0, ///< general success, command-specific reply follows + SEARCHD_ERROR = 1, ///< general failure, error message follows + SEARCHD_RETRY = 2, ///< temporary failure, error message follows, client should retry later + SEARCHD_WARNING = 3 ///< general success, warning message and command-specific reply follow +}; + +////////////////////////////////////////////////////////////////////////////// + +#define SPHINX_DEBUG_OUTPUT 0 +#define SPHINX_DEBUG_CALLS 0 + +#include + +#if SPHINX_DEBUG_OUTPUT +inline void SPH_DEBUG ( const char * format, ... ) +{ + va_list ap; + va_start ( ap, format ); + fprintf ( stderr, "SphinxSE: " ); + vfprintf ( stderr, format, ap ); + fprintf ( stderr, "\n" ); + va_end ( ap ); +} +#else +inline void SPH_DEBUG ( const char *, ... ) {} +#endif + +#if SPHINX_DEBUG_CALLS + +#define SPH_ENTER_FUNC() { SPH_DEBUG ( "enter %s", __FUNCTION__ ); } +#define SPH_ENTER_METHOD() { SPH_DEBUG ( "enter %s(this=%08x)", __FUNCTION__, this ); } +#define SPH_RET(_arg) { SPH_DEBUG ( "leave %s", __FUNCTION__ ); return _arg; } +#define SPH_VOID_RET() { SPH_DEBUG ( "leave %s", __FUNCTION__ ); return; } + +#else + +#define SPH_ENTER_FUNC() +#define SPH_ENTER_METHOD() +#define SPH_RET(_arg) { return(_arg); } +#define SPH_VOID_RET() { return; } + +#endif + + +#define SafeDelete(_arg) { if ( _arg ) delete ( _arg ); (_arg) = NULL; } +#define SafeDeleteArray(_arg) { if ( _arg ) delete [] ( _arg ); (_arg) = NULL; } + +////////////////////////////////////////////////////////////////////////////// + +/// per-table structure that will be shared among all open Sphinx SE handlers +struct CSphSEShare +{ + pthread_mutex_t m_tMutex; + THR_LOCK m_tLock; + + char * m_sTable; + char * m_sScheme; ///< our connection string + char * m_sHost; ///< points into m_sScheme buffer, DO NOT FREE EXPLICITLY + char * m_sSocket; ///< points into m_sScheme buffer, DO NOT FREE EXPLICITLY + char * m_sIndex; ///< points into m_sScheme buffer, DO NOT FREE EXPLICITLY + ushort m_iPort; + bool m_bSphinxQL; ///< is this read-only SphinxAPI table, or write-only SphinxQL table? + uint m_iTableNameLen; + uint m_iUseCount; + CHARSET_INFO * m_pTableQueryCharset; + + int m_iTableFields; + char ** m_sTableField; + enum_field_types * m_eTableFieldType; + + CSphSEShare () + : m_sTable ( NULL ) + , m_sScheme ( NULL ) + , m_sHost ( NULL ) + , m_sSocket ( NULL ) + , m_sIndex ( NULL ) + , m_iPort ( 0 ) + , m_bSphinxQL ( false ) + , m_iTableNameLen ( 0 ) + , m_iUseCount ( 1 ) + , m_pTableQueryCharset ( NULL ) + + , m_iTableFields ( 0 ) + , m_sTableField ( NULL ) + , m_eTableFieldType ( NULL ) + { + thr_lock_init ( &m_tLock ); + pthread_mutex_init ( &m_tMutex, MY_MUTEX_INIT_FAST ); + } + + ~CSphSEShare () + { + pthread_mutex_destroy ( &m_tMutex ); + thr_lock_delete ( &m_tLock ); + + SafeDeleteArray ( m_sTable ); + SafeDeleteArray ( m_sScheme ); + ResetTable (); + } + + void ResetTable () + { + for ( int i=0; i m_dIds; + Dynamic_array m_dValues; + }; + Dynamic_array m_dOverrides; + +public: + char m_sParseError[256]; + +public: + CSphSEQuery ( const char * sQuery, int iLength, const char * sIndex ); + ~CSphSEQuery (); + + bool Parse (); + int BuildRequest ( char ** ppBuffer ); + +protected: + char * m_pBuf; + char * m_pCur; + int m_iBufLeft; + bool m_bBufOverrun; + + template < typename T > int ParseArray ( T ** ppValues, const char * sValue ); + bool ParseField ( char * sField ); + + void SendBytes ( const void * pBytes, int iBytes ); + void SendWord ( short int v ) { v = ntohs(v); SendBytes ( &v, sizeof(v) ); } + void SendInt ( int v ) { v = ntohl(v); SendBytes ( &v, sizeof(v) ); } + void SendDword ( uint v ) { v = ntohl(v) ;SendBytes ( &v, sizeof(v) ); } + void SendUint64 ( ulonglong v ) { SendDword ( (uint)(v>>32) ); SendDword ( (uint)(v&0xFFFFFFFFUL) ); } + void SendString ( const char * v ) { int iLen = strlen(v); SendDword(iLen); SendBytes ( v, iLen ); } + void SendFloat ( float v ) { SendDword ( sphF2DW(v) ); } +}; + +template int CSphSEQuery::ParseArray ( uint32 **, const char * ); +template int CSphSEQuery::ParseArray ( longlong **, const char * ); + +////////////////////////////////////////////////////////////////////////////// + +#if MYSQL_VERSION_ID>50100 + +#if MYSQL_VERSION_ID<50114 +#error Sphinx SE requires MySQL 5.1.14 or higher if compiling for 5.1.x series! +#endif + +static handler * sphinx_create_handler ( handlerton * hton, TABLE_SHARE * table, MEM_ROOT * mem_root ); +static int sphinx_init_func ( void * p ); +static int sphinx_close_connection ( handlerton * hton, THD * thd ); +static int sphinx_panic ( handlerton * hton, enum ha_panic_function flag ); +static bool sphinx_show_status ( handlerton * hton, THD * thd, stat_print_fn * stat_print, enum ha_stat_type stat_type ); + +#else + +static bool sphinx_init_func_for_handlerton (); +static int sphinx_close_connection ( THD * thd ); +bool sphinx_show_status ( THD * thd ); + +#endif // >50100 + +////////////////////////////////////////////////////////////////////////////// + +static const char sphinx_hton_name[] = "SPHINX"; +static const char sphinx_hton_comment[] = "Sphinx storage engine " SPHINXSE_VERSION; + +#if MYSQL_VERSION_ID<50100 +handlerton sphinx_hton = +{ + #ifdef MYSQL_HANDLERTON_INTERFACE_VERSION + MYSQL_HANDLERTON_INTERFACE_VERSION, + #endif + sphinx_hton_name, + SHOW_OPTION_YES, + sphinx_hton_comment, + DB_TYPE_SPHINX_DB, + sphinx_init_func_for_handlerton, + 0, // slot + 0, // savepoint size + sphinx_close_connection, // close_connection + NULL, // savepoint + NULL, // rollback to savepoint + NULL, // release savepoint + NULL, // commit + NULL, // rollback + NULL, // prepare + NULL, // recover + NULL, // commit_by_xid + NULL, // rollback_by_xid + NULL, // create_cursor_read_view + NULL, // set_cursor_read_view + NULL, // close_cursor_read_view + HTON_CAN_RECREATE +}; +#else +static handlerton * sphinx_hton_ptr = NULL; +#endif + +////////////////////////////////////////////////////////////////////////////// + +// variables for Sphinx shared methods +pthread_mutex_t sphinx_mutex; // mutex to init the hash +static int sphinx_init = 0; // flag whether the hash was initialized +static HASH sphinx_open_tables; // hash used to track open tables + +////////////////////////////////////////////////////////////////////////////// +// INITIALIZATION AND SHUTDOWN +////////////////////////////////////////////////////////////////////////////// + +// hashing function +#if MYSQL_VERSION_ID>=50120 +typedef size_t GetKeyLength_t; +#else +typedef uint GetKeyLength_t; +#endif + +static byte * sphinx_get_key ( const byte * pSharePtr, GetKeyLength_t * pLength, my_bool ) +{ + CSphSEShare * pShare = (CSphSEShare *) pSharePtr; + *pLength = (size_t) pShare->m_iTableNameLen; + return (byte*) pShare->m_sTable; +} + +#if MYSQL_VERSION_ID<50100 +static int sphinx_init_func ( void * ) // to avoid unused arg warning +#else +static int sphinx_init_func ( void * p ) +#endif +{ + SPH_ENTER_FUNC(); + if ( !sphinx_init ) + { + sphinx_init = 1; + void ( pthread_mutex_init ( &sphinx_mutex, MY_MUTEX_INIT_FAST ) ); + sphinx_hash_init ( &sphinx_open_tables, system_charset_info, 32, 0, 0, + sphinx_get_key, 0, 0 ); + + #if MYSQL_VERSION_ID > 50100 + handlerton * hton = (handlerton*) p; + hton->state = SHOW_OPTION_YES; + hton->db_type = DB_TYPE_FIRST_DYNAMIC; + hton->create = sphinx_create_handler; + hton->close_connection = sphinx_close_connection; + hton->show_status = sphinx_show_status; + hton->panic = sphinx_panic; + hton->flags = HTON_CAN_RECREATE; + #endif + } + SPH_RET(0); +} + + +#if MYSQL_VERSION_ID<50100 +static bool sphinx_init_func_for_handlerton () +{ + return sphinx_init_func ( &sphinx_hton ); +} +#endif + + +#if MYSQL_VERSION_ID>50100 + +static int sphinx_close_connection ( handlerton * hton, THD * thd ) +{ + // deallocate common handler data + SPH_ENTER_FUNC(); + void ** tmp = thd_ha_data ( thd, hton ); + CSphSEThreadData * pTls = (CSphSEThreadData*) (*tmp); + SafeDelete ( pTls ); + *tmp = NULL; + SPH_RET(0); +} + + +static int sphinx_done_func ( void * ) +{ + SPH_ENTER_FUNC(); + + int error = 0; + if ( sphinx_init ) + { + sphinx_init = 0; + if ( sphinx_open_tables.records ) + error = 1; + sphinx_hash_free ( &sphinx_open_tables ); + pthread_mutex_destroy ( &sphinx_mutex ); + } + + SPH_RET(0); +} + + +static int sphinx_panic ( handlerton * hton, enum ha_panic_function ) +{ + return sphinx_done_func ( hton ); +} + +#else + +static int sphinx_close_connection ( THD * thd ) +{ + // deallocate common handler data + SPH_ENTER_FUNC(); + CSphSEThreadData * pTls = (CSphSEThreadData*) thd->ha_data[sphinx_hton.slot]; + SafeDelete ( pTls ); + thd->ha_data[sphinx_hton.slot] = NULL; + SPH_RET(0); +} + +#endif // >50100 + +////////////////////////////////////////////////////////////////////////////// +// SHOW STATUS +////////////////////////////////////////////////////////////////////////////// + +#if MYSQL_VERSION_ID>50100 +static bool sphinx_show_status ( handlerton * hton, THD * thd, stat_print_fn * stat_print, + enum ha_stat_type ) +#else +bool sphinx_show_status ( THD * thd ) +#endif +{ + SPH_ENTER_FUNC(); + +#if MYSQL_VERSION_ID<50100 + Protocol * protocol = thd->protocol; + List field_list; +#endif + + char buf1[IO_SIZE]; + uint buf1len; + char buf2[IO_SIZE]; + uint buf2len = 0; + String words; + + buf1[0] = '\0'; + buf2[0] = '\0'; + + +#if MYSQL_VERSION_ID>50100 + // 5.1.x style stats + CSphSEThreadData * pTls = (CSphSEThreadData*) ( *thd_ha_data ( thd, hton ) ); + +#define LOC_STATS(_key,_keylen,_val,_vallen) \ + stat_print ( thd, sphinx_hton_name, strlen(sphinx_hton_name), _key, _keylen, _val, _vallen ); + +#else + // 5.0.x style stats + if ( have_sphinx_db!=SHOW_OPTION_YES ) + { + my_message ( ER_NOT_SUPPORTED_YET, + "failed to call SHOW SPHINX STATUS: --skip-sphinx was specified", + MYF(0) ); + SPH_RET(TRUE); + } + CSphSEThreadData * pTls = (CSphSEThreadData*) thd->ha_data[sphinx_hton.slot]; + + field_list.push_back ( new Item_empty_string ( "Type", 10 ) ); + field_list.push_back ( new Item_empty_string ( "Name", FN_REFLEN ) ); + field_list.push_back ( new Item_empty_string ( "Status", 10 ) ); + if ( protocol->send_fields ( &field_list, Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF ) ) + SPH_RET(TRUE); + +#define LOC_STATS(_key,_keylen,_val,_vallen) \ + protocol->prepare_for_resend (); \ + protocol->store ( "SPHINX", 6, system_charset_info ); \ + protocol->store ( _key, _keylen, system_charset_info ); \ + protocol->store ( _val, _vallen, system_charset_info ); \ + if ( protocol->write() ) \ + SPH_RET(TRUE); + +#endif + + + // show query stats + if ( pTls && pTls->m_bStats ) + { + const CSphSEStats * pStats = &pTls->m_tStats; + buf1len = my_snprintf ( buf1, sizeof(buf1), + "total: %d, total found: %d, time: %d, words: %d", + pStats->m_iMatchesTotal, pStats->m_iMatchesFound, pStats->m_iQueryMsec, pStats->m_iWords ); + + LOC_STATS ( "stats", 5, buf1, buf1len ); + + if ( pStats->m_iWords ) + { + for ( int i=0; im_iWords; i++ ) + { + CSphSEWordStats & tWord = pStats->m_dWords[i]; + buf2len = my_snprintf ( buf2, sizeof(buf2), "%s%s:%d:%d ", + buf2, tWord.m_sWord, tWord.m_iDocs, tWord.m_iHits ); + } + + // convert it if we can + const char * sWord = buf2; + int iWord = buf2len; + + String sBuf3; + if ( pTls->m_pQueryCharset ) + { + uint iErrors; + sBuf3.copy ( buf2, buf2len, pTls->m_pQueryCharset, system_charset_info, &iErrors ); + sWord = sBuf3.c_ptr(); + iWord = sBuf3.length(); + } + + LOC_STATS ( "words", 5, sWord, iWord ); + } + } + + // show last error or warning (either in addition to stats, or on their own) + if ( pTls && pTls->m_tStats.m_sLastMessage && pTls->m_tStats.m_sLastMessage[0] ) + { + const char * sMessageType = pTls->m_tStats.m_bLastError ? "error" : "warning"; + + LOC_STATS ( + sMessageType, strlen ( sMessageType ), + pTls->m_tStats.m_sLastMessage, strlen ( pTls->m_tStats.m_sLastMessage ) ); + + } else + { + // well, nothing to show just yet +#if MYSQL_VERSION_ID < 50100 + LOC_STATS ( "stats", 5, "no query has been executed yet", sizeof("no query has been executed yet")-1 ); +#endif + } + +#if MYSQL_VERSION_ID < 50100 + send_eof(thd); +#endif + + SPH_RET(FALSE); +} + +////////////////////////////////////////////////////////////////////////////// +// HELPERS +////////////////////////////////////////////////////////////////////////////// + +static char * sphDup ( const char * sSrc, int iLen=-1 ) +{ + if ( !sSrc ) + return NULL; + + if ( iLen<0 ) + iLen = strlen(sSrc); + + char * sRes = new char [ 1+iLen ]; + memcpy ( sRes, sSrc, iLen ); + sRes[iLen] = '\0'; + return sRes; +} + + +static void sphLogError ( const char * sFmt, ... ) +{ + // emit timestamp +#ifdef __WIN__ + SYSTEMTIME t; + GetLocalTime ( &t ); + + fprintf ( stderr, "%02d%02d%02d %2d:%02d:%02d SphinxSE: internal error: ", + (int)t.wYear % 100, (int)t.wMonth, (int)t.wDay, + (int)t.wHour, (int)t.wMinute, (int)t.wSecond ); +#else + // Unix version + time_t tStamp; + time ( &tStamp ); + + struct tm * pParsed; +#ifdef HAVE_LOCALTIME_R + struct tm tParsed; + localtime_r ( &tStamp, &tParsed ); + pParsed = &tParsed; +#else + pParsed = localtime ( &tStamp ); +#endif // HAVE_LOCALTIME_R + + fprintf ( stderr, "%02d%02d%02d %2d:%02d:%02d SphinxSE: internal error: ", + pParsed->tm_year % 100, pParsed->tm_mon + 1, pParsed->tm_mday, + pParsed->tm_hour, pParsed->tm_min, pParsed->tm_sec); +#endif // __WIN__ + + // emit message + va_list ap; + va_start ( ap, sFmt ); + vfprintf ( stderr, sFmt, ap ); + va_end ( ap ); + + // emit newline + fprintf ( stderr, "\n" ); +} + + + +// the following scheme variants are recognized +// +// sphinx://host[:port]/index +// sphinxql://host[:port]/index +// unix://unix/domain/socket[:index] +static bool ParseUrl ( CSphSEShare * share, TABLE * table, bool bCreate ) +{ + SPH_ENTER_FUNC(); + + if ( share ) + { + // check incoming stuff + if ( !table ) + { + sphLogError ( "table==NULL in ParseUrl()" ); + return false; + } + if ( !table->s ) + { + sphLogError ( "(table->s)==NULL in ParseUrl()" ); + return false; + } + + // free old stuff + share->ResetTable (); + + // fill new stuff + share->m_iTableFields = table->s->fields; + if ( share->m_iTableFields ) + { + share->m_sTableField = new char * [ share->m_iTableFields ]; + share->m_eTableFieldType = new enum_field_types [ share->m_iTableFields ]; + + for ( int i=0; im_iTableFields; i++ ) + { + share->m_sTableField[i] = sphDup ( table->field[i]->field_name ); + share->m_eTableFieldType[i] = table->field[i]->type(); + } + } + } + + // defaults + bool bOk = true; + bool bQL = false; + char * sScheme = NULL; + char * sHost = SPHINXAPI_DEFAULT_HOST; + char * sIndex = SPHINXAPI_DEFAULT_INDEX; + int iPort = SPHINXAPI_DEFAULT_PORT; + + // parse connection string, if any + while ( table->s->connect_string.length!=0 ) + { + sScheme = sphDup ( table->s->connect_string.str, table->s->connect_string.length ); + + sHost = strstr ( sScheme, "://" ); + if ( !sHost ) + { + bOk = false; + break; + } + sHost[0] = '\0'; + sHost += 3; + + ///////////////////////////// + // sphinxapi via unix socket + ///////////////////////////// + + if ( !strcmp ( sScheme, "unix" ) ) + { + sHost--; // reuse last slash + iPort = 0; + if (!( sIndex = strrchr ( sHost, ':' ) )) + sIndex = SPHINXAPI_DEFAULT_INDEX; + else + { + *sIndex++ = '\0'; + if ( !*sIndex ) + sIndex = SPHINXAPI_DEFAULT_INDEX; + } + bOk = true; + break; + } + + ///////////////////// + // sphinxapi via tcp + ///////////////////// + + if ( !strcmp ( sScheme, "sphinx" ) ) + { + char * sPort = strchr ( sHost, ':' ); + if ( sPort ) + { + *sPort++ = '\0'; + if ( *sPort ) + { + sIndex = strchr ( sPort, '/' ); + if ( sIndex ) + *sIndex++ = '\0'; + else + sIndex = SPHINXAPI_DEFAULT_INDEX; + + iPort = atoi(sPort); + if ( !iPort ) + iPort = SPHINXAPI_DEFAULT_PORT; + } + } else + { + sIndex = strchr ( sHost, '/' ); + if ( sIndex ) + *sIndex++ = '\0'; + else + sIndex = SPHINXAPI_DEFAULT_INDEX; + } + bOk = true; + break; + } + + //////////// + // sphinxql + //////////// + + if ( !strcmp ( sScheme, "sphinxql" ) ) + { + bQL = true; + iPort = SPHINXQL_DEFAULT_PORT; + + // handle port + char * sPort = strchr ( sHost, ':' ); + sIndex = sHost; // starting point for index name search + + if ( sPort ) + { + *sPort++ = '\0'; + sIndex = sPort; + + iPort = atoi(sPort); + if ( !iPort ) + { + bOk = false; // invalid port; can report ER_FOREIGN_DATA_STRING_INVALID + break; + } + } + + // find index + sIndex = strchr ( sIndex, '/' ); + if ( sIndex ) + *sIndex++ = '\0'; + + // final checks + // host and index names are required + bOk = ( sHost && *sHost && sIndex && *sIndex ); + break; + } + + // unknown case + bOk = false; + break; + } + + if ( !bOk ) + { + my_error ( bCreate ? ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE : ER_FOREIGN_DATA_STRING_INVALID, + MYF(0), table->s->connect_string ); + } else + { + if ( share ) + { + SafeDeleteArray ( share->m_sScheme ); + share->m_sScheme = sScheme; + share->m_sHost = sHost; + share->m_sIndex = sIndex; + share->m_iPort = (ushort)iPort; + share->m_bSphinxQL = bQL; + } + } + if ( !bOk && !share ) + SafeDeleteArray ( sScheme ); + + SPH_RET(bOk); +} + + +// Example of simple lock controls. The "share" it creates is structure we will +// pass to each sphinx handler. Do you have to have one of these? Well, you have +// pieces that are used for locking, and they are needed to function. +static CSphSEShare * get_share ( const char * table_name, TABLE * table ) +{ + SPH_ENTER_FUNC(); + pthread_mutex_lock ( &sphinx_mutex ); + + CSphSEShare * pShare = NULL; + for ( ;; ) + { + // check if we already have this share +#if MYSQL_VERSION_ID>=50120 + pShare = (CSphSEShare*) sphinx_hash_search ( &sphinx_open_tables, (const uchar *) table_name, strlen(table_name) ); +#else +#ifdef __WIN__ + pShare = (CSphSEShare*) sphinx_hash_search ( &sphinx_open_tables, (const byte *) table_name, strlen(table_name) ); +#else + pShare = (CSphSEShare*) sphinx_hash_search ( &sphinx_open_tables, table_name, strlen(table_name) ); +#endif // win +#endif // pre-5.1.20 + + if ( pShare ) + { + pShare->m_iUseCount++; + break; + } + + // try to allocate new share + pShare = new CSphSEShare (); + if ( !pShare ) + break; + + // try to setup it + if ( !ParseUrl ( pShare, table, false ) ) + { + SafeDelete ( pShare ); + break; + } + + if ( !pShare->m_bSphinxQL ) + pShare->m_pTableQueryCharset = table->field[2]->charset(); + + // try to hash it + pShare->m_iTableNameLen = strlen(table_name); + pShare->m_sTable = sphDup ( table_name ); + if ( my_hash_insert ( &sphinx_open_tables, (const byte *)pShare ) ) + { + SafeDelete ( pShare ); + break; + } + + // all seems fine + break; + } + + pthread_mutex_unlock ( &sphinx_mutex ); + SPH_RET(pShare); +} + + +// Free lock controls. We call this whenever we close a table. If the table had +// the last reference to the share then we free memory associated with it. +static int free_share ( CSphSEShare * pShare ) +{ + SPH_ENTER_FUNC(); + pthread_mutex_lock ( &sphinx_mutex ); + + if ( !--pShare->m_iUseCount ) + { + sphinx_hash_delete ( &sphinx_open_tables, (byte *)pShare ); + SafeDelete ( pShare ); + } + + pthread_mutex_unlock ( &sphinx_mutex ); + SPH_RET(0); +} + + +#if MYSQL_VERSION_ID>50100 +static handler * sphinx_create_handler ( handlerton * hton, TABLE_SHARE * table, MEM_ROOT * mem_root ) +{ + sphinx_hton_ptr = hton; + return new ( mem_root ) ha_sphinx ( hton, table ); +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// CLIENT-SIDE REQUEST STUFF +////////////////////////////////////////////////////////////////////////////// + +CSphSEQuery::CSphSEQuery ( const char * sQuery, int iLength, const char * sIndex ) + : m_sHost ( "" ) + , m_iPort ( 0 ) + , m_sIndex ( sIndex ? sIndex : "*" ) + , m_iOffset ( 0 ) + , m_iLimit ( 20 ) + , m_bQuery ( false ) + , m_sQuery ( "" ) + , m_pWeights ( NULL ) + , m_iWeights ( 0 ) + , m_eMode ( SPH_MATCH_ALL ) + , m_eRanker ( SPH_RANK_PROXIMITY_BM25 ) + , m_eSort ( SPH_SORT_RELEVANCE ) + , m_sSortBy ( "" ) + , m_iMaxMatches ( 1000 ) + , m_iMaxQueryTime ( 0 ) + , m_iMinID ( 0 ) + , m_iMaxID ( 0 ) + , m_iFilters ( 0 ) + , m_eGroupFunc ( SPH_GROUPBY_DAY ) + , m_sGroupBy ( "" ) + , m_sGroupSortBy ( "@group desc" ) + , m_iCutoff ( 0 ) + , m_iRetryCount ( 0 ) + , m_iRetryDelay ( 0 ) + , m_sGroupDistinct ( "" ) + , m_iIndexWeights ( 0 ) + , m_iFieldWeights ( 0 ) + , m_bGeoAnchor ( false ) + , m_sGeoLatAttr ( "" ) + , m_sGeoLongAttr ( "" ) + , m_fGeoLatitude ( 0.0f ) + , m_fGeoLongitude ( 0.0f ) + , m_sComment ( "" ) + , m_sSelect ( "" ) + + , m_pBuf ( NULL ) + , m_pCur ( NULL ) + , m_iBufLeft ( 0 ) + , m_bBufOverrun ( false ) +{ + m_sQueryBuffer = new char [ iLength+2 ]; + memcpy ( m_sQueryBuffer, sQuery, iLength ); + m_sQueryBuffer[iLength] = ';'; + m_sQueryBuffer[iLength+1] = '\0'; +} + + +CSphSEQuery::~CSphSEQuery () +{ + SPH_ENTER_METHOD(); + SafeDeleteArray ( m_sQueryBuffer ); + SafeDeleteArray ( m_pWeights ); + SafeDeleteArray ( m_pBuf ); + for ( int i=0; i +int CSphSEQuery::ParseArray ( T ** ppValues, const char * sValue ) +{ + SPH_ENTER_METHOD(); + + assert ( ppValues ); + assert ( !(*ppValues) ); + + const char * pValue; + bool bPrevDigit = false; + int iValues = 0; + + // count the values + for ( pValue=sValue; *pValue; pValue++ ) + { + bool bDigit = (*pValue)>='0' && (*pValue)<='9'; + if ( bDigit && !bPrevDigit ) + iValues++; + bPrevDigit = bDigit; + } + if ( !iValues ) + SPH_RET(0); + + // extract the values + T * pValues = new T [ iValues ]; + *ppValues = pValues; + + int iIndex = 0, iSign = 1; + T uValue = 0; + + bPrevDigit = false; + for ( pValue=sValue ;; pValue++ ) + { + bool bDigit = (*pValue)>='0' && (*pValue)<='9'; + + if ( bDigit ) + { + if ( !bPrevDigit ) + uValue = 0; + uValue = uValue*10 + ( (*pValue)-'0' ); + } else if ( bPrevDigit ) + { + assert ( iIndexs && isspace ( p[-1] ) ) + p--; + *p = '\0'; + + return s; +} + + +static bool myisattr ( char c ) +{ + return + ( c>='0' && c<='9' ) || + ( c>='a' && c<='z' ) || + ( c>='A' && c<='Z' ) || + c=='_'; +} + + +bool CSphSEQuery::ParseField ( char * sField ) +{ + SPH_ENTER_METHOD(); + + // look for option name/value separator + char * sValue = strchr ( sField, '=' ); + if ( !sValue || sValue==sField || sValue[-1]=='\\' ) + { + // by default let's assume it's just query + if ( sField[0] ) + { + if ( m_bQuery ) + { + snprintf ( m_sParseError, sizeof(m_sParseError), "search query already specified; '%s' is redundant", sField ); + SPH_RET(false); + } else + { + m_sQuery = sField; + m_bQuery = true; + + // unescape only 1st one + char *s = sField, *d = sField; + int iSlashes = 0; + while ( *s ) + { + iSlashes = ( *s=='\\' ) ? iSlashes+1 : 0; + if ( ( iSlashes%2 )==0 ) *d++ = *s; + s++; + } + *d = '\0'; + } + } + SPH_RET(true); + } + + // split + *sValue++ = '\0'; + sValue = chop ( sValue ); + int iValue = atoi ( sValue ); + + // handle options + char * sName = chop ( sField ); + + if ( !strcmp ( sName, "query" ) ) m_sQuery = sValue; + else if ( !strcmp ( sName, "host" ) ) m_sHost = sValue; + else if ( !strcmp ( sName, "port" ) ) m_iPort = iValue; + else if ( !strcmp ( sName, "index" ) ) m_sIndex = sValue; + else if ( !strcmp ( sName, "offset" ) ) m_iOffset = iValue; + else if ( !strcmp ( sName, "limit" ) ) m_iLimit = iValue; + else if ( !strcmp ( sName, "weights" ) ) m_iWeights = ParseArray ( &m_pWeights, sValue ); + else if ( !strcmp ( sName, "minid" ) ) m_iMinID = iValue; + else if ( !strcmp ( sName, "maxid" ) ) m_iMaxID = iValue; + else if ( !strcmp ( sName, "maxmatches" ) ) m_iMaxMatches = iValue; + else if ( !strcmp ( sName, "maxquerytime" ) ) m_iMaxQueryTime = iValue; + else if ( !strcmp ( sName, "groupsort" ) ) m_sGroupSortBy = sValue; + else if ( !strcmp ( sName, "distinct" ) ) m_sGroupDistinct = sValue; + else if ( !strcmp ( sName, "cutoff" ) ) m_iCutoff = iValue; + else if ( !strcmp ( sName, "comment" ) ) m_sComment = sValue; + else if ( !strcmp ( sName, "select" ) ) m_sSelect = sValue; + + else if ( !strcmp ( sName, "mode" ) ) + { + m_eMode = SPH_MATCH_ALL; + if ( !strcmp ( sValue, "any" ) ) m_eMode = SPH_MATCH_ANY; + else if ( !strcmp ( sValue, "phrase" ) ) m_eMode = SPH_MATCH_PHRASE; + else if ( !strcmp ( sValue, "boolean" ) ) m_eMode = SPH_MATCH_BOOLEAN; + else if ( !strcmp ( sValue, "ext" ) ) m_eMode = SPH_MATCH_EXTENDED; + else if ( !strcmp ( sValue, "extended" ) ) m_eMode = SPH_MATCH_EXTENDED; + else if ( !strcmp ( sValue, "ext2" ) ) m_eMode = SPH_MATCH_EXTENDED2; + else if ( !strcmp ( sValue, "extended2" ) ) m_eMode = SPH_MATCH_EXTENDED2; + else if ( !strcmp ( sValue, "all" ) ) m_eMode = SPH_MATCH_ALL; + else if ( !strcmp ( sValue, "fullscan" ) ) m_eMode = SPH_MATCH_FULLSCAN; + else + { + snprintf ( m_sParseError, sizeof(m_sParseError), "unknown matching mode '%s'", sValue ); + SPH_RET(false); + } + } else if ( !strcmp ( sName, "ranker" ) ) + { + m_eRanker = SPH_RANK_PROXIMITY_BM25; + if ( !strcmp ( sValue, "proximity_bm25" ) ) m_eRanker = SPH_RANK_PROXIMITY_BM25; + else if ( !strcmp ( sValue, "bm25" ) ) m_eRanker = SPH_RANK_BM25; + else if ( !strcmp ( sValue, "none" ) ) m_eRanker = SPH_RANK_NONE; + else if ( !strcmp ( sValue, "wordcount" ) ) m_eRanker = SPH_RANK_WORDCOUNT; + else if ( !strcmp ( sValue, "proximity" ) ) m_eRanker = SPH_RANK_PROXIMITY; + else if ( !strcmp ( sValue, "matchany" ) ) m_eRanker = SPH_RANK_MATCHANY; + else if ( !strcmp ( sValue, "fieldmask" ) ) m_eRanker = SPH_RANK_FIELDMASK; + else if ( !strcmp ( sValue, "sph04" ) ) m_eRanker = SPH_RANK_SPH04; + else + { + snprintf ( m_sParseError, sizeof(m_sParseError), "unknown ranking mode '%s'", sValue ); + SPH_RET(false); + } + } else if ( !strcmp ( sName, "sort" ) ) + { + static const struct + { + const char * m_sName; + ESphSortOrder m_eSort; + } dSortModes[] = + { + { "relevance", SPH_SORT_RELEVANCE }, + { "attr_desc:", SPH_SORT_ATTR_DESC }, + { "attr_asc:", SPH_SORT_ATTR_ASC }, + { "time_segments:", SPH_SORT_TIME_SEGMENTS }, + { "extended:", SPH_SORT_EXTENDED }, + { "expr:", SPH_SORT_EXPR } + }; + + int i; + const int nModes = sizeof(dSortModes)/sizeof(dSortModes[0]); + for ( i=0; i ( &tFilter.m_pValues, sValue ); + if ( !tFilter.m_iValues ) + { + assert ( !tFilter.m_pValues ); + break; + } + + // all ok + m_iFilters++; + break; + } + + } else if ( !strcmp ( sName, "indexweights" ) || !strcmp ( sName, "fieldweights" ) ) + { + bool bIndex = !strcmp ( sName, "indexweights" ); + int * pCount = bIndex ? &m_iIndexWeights : &m_iFieldWeights; + char ** pNames = bIndex ? &m_sIndexWeight[0] : &m_sFieldWeight[0]; + int * pWeights = bIndex ? &m_iIndexWeight[0] : &m_iFieldWeight[0]; + + *pCount = 0; + + char * p = sValue; + while ( *p && *pCountm_sName = chop(sName); + pOverride->m_iType = iType; + m_dOverrides.append ( pOverride ); + } + + ulonglong uId = strtoull ( sId, NULL, 10 ); + CSphSEQuery::Override_t::Value_t tValue; + if ( iType==SPH_ATTR_FLOAT ) + tValue.m_fValue = (float)atof(sValue); + else if ( iType==SPH_ATTR_BIGINT ) + tValue.m_iValue64 = strtoll ( sValue, NULL, 10 ); + else + tValue.m_uValue = (uint32)strtoul ( sValue, NULL, 10 ); + + pOverride->m_dIds.append ( uId ); + pOverride->m_dValues.append ( tValue ); + } + + if ( !pOverride ) + { + snprintf ( m_sParseError, sizeof(m_sParseError), "override: id:value mapping expected" ); + SPH_RET(false); + } + SPH_RET(true); + } else + { + snprintf ( m_sParseError, sizeof(m_sParseError), "unknown parameter '%s'", sName ); + SPH_RET(false); + } + + // !COMMIT handle syntax errors + + SPH_RET(true); +} + + +bool CSphSEQuery::Parse () +{ + SPH_ENTER_METHOD(); + SPH_DEBUG ( "query [[ %s ]]", m_sQueryBuffer ); + + m_bQuery = false; + char * pCur = m_sQueryBuffer; + char * pNext = pCur; + + while ( ( pNext = strchr ( pNext, ';' ) )!=NULL ) + { + // handle escaped semicolons + if ( pNext>m_sQueryBuffer && pNext[-1]=='\\' && pNext[1]!='\0' ) + { + pNext++; + continue; + } + + // handle semicolon-separated clauses + *pNext++ = '\0'; + if ( !ParseField ( pCur ) ) + SPH_RET(false); + pCur = pNext; + } + + SPH_DEBUG ( "q [[ %s ]]", m_sQuery ); + + SPH_RET(true); +} + + +void CSphSEQuery::SendBytes ( const void * pBytes, int iBytes ) +{ + SPH_ENTER_METHOD(); + if ( m_iBufLeftm_iType==SPH_ATTR_BIGINT ? 16 : 12; // id64 + value + iReqSize += strlen ( pOverride->m_sName ) + 12 + uSize*pOverride->m_dIds.elements(); + } + // select + iReqSize += 4; + + m_iBufLeft = 0; + SafeDeleteArray ( m_pBuf ); + + m_pBuf = new char [ iReqSize ]; + if ( !m_pBuf ) + SPH_RET(-1); + + m_pCur = m_pBuf; + m_iBufLeft = iReqSize; + m_bBufOverrun = false; + (*ppBuffer) = m_pBuf; + + // build request + SendWord ( SEARCHD_COMMAND_SEARCH ); // command id + SendWord ( VER_COMMAND_SEARCH ); // command version + SendInt ( iReqSize-8 ); // packet body length + SendInt ( 0 ); // its a client + + SendInt ( 1 ); // number of queries + SendInt ( m_iOffset ); + SendInt ( m_iLimit ); + SendInt ( m_eMode ); + SendInt ( m_eRanker ); // 1.16+ + SendInt ( m_eSort ); + SendString ( m_sSortBy ); // sort attr + SendString ( m_sQuery ); // query + SendInt ( m_iWeights ); + for ( int j=0; jm_sName ); + SendDword ( pOverride->m_iType ); + SendInt ( pOverride->m_dIds.elements() ); + for ( int j=0; jm_dIds.elements(); j++ ) + { + SendUint64 ( pOverride->m_dIds.at(j) ); + if ( pOverride->m_iType==SPH_ATTR_FLOAT ) + SendFloat ( pOverride->m_dValues.at(j).m_fValue ); + else if ( pOverride->m_iType==SPH_ATTR_BIGINT ) + SendUint64 ( pOverride->m_dValues.at(j).m_iValue64 ); + else + SendDword ( pOverride->m_dValues.at(j).m_uValue ); + } + } + + // select + SendString ( m_sSelect ); + + // detect buffer overruns and underruns, and report internal error + if ( m_bBufOverrun || m_iBufLeft!=0 || m_pCur-m_pBuf!=iReqSize ) + SPH_RET(-1); + + // all fine + SPH_RET ( iReqSize ); +} + +////////////////////////////////////////////////////////////////////////////// +// SPHINX HANDLER +////////////////////////////////////////////////////////////////////////////// + +static const char * ha_sphinx_exts[] = { NullS }; + + +#if MYSQL_VERSION_ID<50100 +ha_sphinx::ha_sphinx ( TABLE_ARG * table ) + : handler ( &sphinx_hton, table ) +#else +ha_sphinx::ha_sphinx ( handlerton * hton, TABLE_ARG * table ) + : handler ( hton, table ) +#endif + , m_pShare ( NULL ) + , m_iMatchesTotal ( 0 ) + , m_iCurrentPos ( 0 ) + , m_pCurrentKey ( NULL ) + , m_iCurrentKeyLen ( 0 ) + , m_pResponse ( NULL ) + , m_pResponseEnd ( NULL ) + , m_pCur ( NULL ) + , m_bUnpackError ( false ) + , m_iFields ( 0 ) + , m_dFields ( NULL ) + , m_iAttrs ( 0 ) + , m_dAttrs ( NULL ) + , m_bId64 ( 0 ) + , m_dUnboundFields ( NULL ) +{ + SPH_ENTER_METHOD(); + if ( current_thd ) + current_thd->variables.engine_condition_pushdown = true; + SPH_VOID_RET(); +} + + +// If frm_error() is called then we will use this to to find out what file extentions +// exist for the storage engine. This is also used by the default rename_table and +// delete_table method in handler.cc. +const char ** ha_sphinx::bas_ext() const +{ + return ha_sphinx_exts; +} + + +// Used for opening tables. The name will be the name of the file. +// A table is opened when it needs to be opened. For instance +// when a request comes in for a select on the table (tables are not +// open and closed for each request, they are cached). +// +// Called from handler.cc by handler::ha_open(). The server opens all tables by +// calling ha_open() which then calls the handler specific open(). +int ha_sphinx::open ( const char * name, int, uint ) +{ + SPH_ENTER_METHOD(); + m_pShare = get_share ( name, table ); + if ( !m_pShare ) + SPH_RET(1); + + thr_lock_data_init ( &m_pShare->m_tLock, &m_tLock, NULL ); + + #if MYSQL_VERSION_ID>50100 + *thd_ha_data ( table->in_use, ht ) = NULL; + #else + table->in_use->ha_data [ sphinx_hton.slot ] = NULL; + #endif + + SPH_RET(0); +} + + +int ha_sphinx::Connect ( const char * sHost, ushort uPort ) +{ + struct sockaddr_in sin; +#ifndef __WIN__ + struct sockaddr_un saun; +#endif + + int iDomain = 0; + int iSockaddrSize = 0; + struct sockaddr * pSockaddr = NULL; + + in_addr_t ip_addr; + + if ( uPort ) + { + iDomain = AF_INET; + iSockaddrSize = sizeof(sin); + pSockaddr = (struct sockaddr *) &sin; + + memset ( &sin, 0, sizeof(sin) ); + sin.sin_family = AF_INET; + sin.sin_port = htons(uPort); + + // prepare host address + if ( (int)( ip_addr = inet_addr(sHost) )!=(int)INADDR_NONE ) + { + memcpy ( &sin.sin_addr, &ip_addr, sizeof(ip_addr) ); + } else + { + int tmp_errno; + bool bError = false; + +#if MYSQL_VERSION_ID>=50515 + struct addrinfo tmp_hostent, *hp; + tmp_errno = getaddrinfo ( sHost, NULL, &tmp_hostent, &hp ); + if ( !tmp_errno ) + { + freeaddrinfo ( hp ); + bError = true; + } +#else + struct hostent tmp_hostent, *hp; + char buff2 [ GETHOSTBYNAME_BUFF_SIZE ]; + hp = my_gethostbyname_r ( sHost, &tmp_hostent, buff2, sizeof(buff2), &tmp_errno ); + if ( !hp ) + { + my_gethostbyname_r_free(); + bError = true; + } +#endif + + if ( bError ) + { + char sError[256]; + my_snprintf ( sError, sizeof(sError), "failed to resolve searchd host (name=%s)", sHost ); + + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), sError ); + SPH_RET(-1); + } + +#if MYSQL_VERSION_ID>=50515 + memcpy ( &sin.sin_addr, hp->ai_addr, Min ( sizeof(sin.sin_addr), (size_t)hp->ai_addrlen ) ); + freeaddrinfo ( hp ); +#else + memcpy ( &sin.sin_addr, hp->h_addr, Min ( sizeof(sin.sin_addr), (size_t)hp->h_length ) ); + my_gethostbyname_r_free(); +#endif + } + } else + { +#ifndef __WIN__ + iDomain = AF_UNIX; + iSockaddrSize = sizeof(saun); + pSockaddr = (struct sockaddr *) &saun; + + memset ( &saun, 0, sizeof(saun) ); + saun.sun_family = AF_UNIX; + strncpy ( saun.sun_path, sHost, sizeof(saun.sun_path)-1 ); +#else + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), "UNIX sockets are not supported on Windows" ); + SPH_RET(-1); +#endif + } + + char sError[512]; + int iSocket = socket ( iDomain, SOCK_STREAM, 0 ); + + if ( iSocket<0 ) + { + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), "failed to create client socket" ); + SPH_RET(-1); + } + + if ( connect ( iSocket, pSockaddr, iSockaddrSize )<0 ) + { + sphSockClose ( iSocket ); + my_snprintf ( sError, sizeof(sError), "failed to connect to searchd (host=%s, errno=%d, port=%d)", + sHost, errno, (int)uPort ); + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), sError ); + SPH_RET(-1); + } + + return iSocket; +} + + +int ha_sphinx::ConnectAPI ( const char * sQueryHost, int iQueryPort ) +{ + SPH_ENTER_METHOD(); + + const char * sHost = ( sQueryHost && *sQueryHost ) ? sQueryHost : m_pShare->m_sHost; + ushort uPort = iQueryPort ? (ushort)iQueryPort : m_pShare->m_iPort; + + int iSocket = Connect ( sHost, uPort ); + if ( iSocket<0 ) + SPH_RET ( iSocket ); + + char sError[512]; + + int version; + if ( ::recv ( iSocket, (char *)&version, sizeof(version), 0 )!=sizeof(version) ) + { + sphSockClose ( iSocket ); + my_snprintf ( sError, sizeof(sError), "failed to receive searchd version (host=%s, port=%d)", + sHost, (int)uPort ); + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), sError ); + SPH_RET(-1); + } + + uint uClientVersion = htonl ( SPHINX_SEARCHD_PROTO ); + if ( ::send ( iSocket, (char*)&uClientVersion, sizeof(uClientVersion), 0 )!=sizeof(uClientVersion) ) + { + sphSockClose ( iSocket ); + my_snprintf ( sError, sizeof(sError), "failed to send client version (host=%s, port=%d)", + sHost, (int)uPort ); + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), sError ); + SPH_RET(-1); + } + + SPH_RET ( iSocket ); +} + + +// Closes a table. We call the free_share() function to free any resources +// that we have allocated in the "shared" structure. +// +// Called from sql_base.cc, sql_select.cc, and table.cc. +// In sql_select.cc it is only used to close up temporary tables or during +// the process where a temporary table is converted over to being a +// myisam table. +// For sql_base.cc look at close_data_tables(). +int ha_sphinx::close() +{ + SPH_ENTER_METHOD(); + SPH_RET ( free_share ( m_pShare ) ); +} + + +int ha_sphinx::HandleMysqlError ( MYSQL * pConn, int iErrCode ) +{ + CSphSEThreadData * pTls = GetTls (); + if ( pTls ) + { + strncpy ( pTls->m_tStats.m_sLastMessage, mysql_error ( pConn ), sizeof ( pTls->m_tStats.m_sLastMessage ) ); + pTls->m_tStats.m_bLastError = true; + } + + mysql_close ( pConn ); + + my_error ( iErrCode, MYF(0), pTls->m_tStats.m_sLastMessage ); + return -1; +} + + +int ha_sphinx::extra ( enum ha_extra_function op ) +{ + CSphSEThreadData * pTls = GetTls(); + if ( pTls ) + { + if ( op==HA_EXTRA_WRITE_CAN_REPLACE ) + pTls->m_bReplace = true; + else if ( op==HA_EXTRA_WRITE_CANNOT_REPLACE ) + pTls->m_bReplace = false; + } + return 0; +} + + +int ha_sphinx::write_row ( byte * ) +{ + SPH_ENTER_METHOD(); + if ( !m_pShare || !m_pShare->m_bSphinxQL ) + SPH_RET ( HA_ERR_WRONG_COMMAND ); + + // SphinxQL inserts only, pretty much similar to abandoned federated + char sQueryBuf[1024]; + char sValueBuf[1024]; + + String sQuery ( sQueryBuf, sizeof(sQueryBuf), &my_charset_bin ); + String sValue ( sValueBuf, sizeof(sQueryBuf), &my_charset_bin ); + sQuery.length ( 0 ); + sValue.length ( 0 ); + + CSphSEThreadData * pTls = GetTls (); + sQuery.append ( pTls && pTls->m_bReplace ? "REPLACE INTO " : "INSERT INTO " ); + sQuery.append ( m_pShare->m_sIndex ); + sQuery.append ( " (" ); + + for ( Field ** ppField = table->field; *ppField; ppField++ ) + { + sQuery.append ( (*ppField)->field_name ); + if ( ppField[1] ) + sQuery.append ( ", " ); + } + sQuery.append ( ") VALUES (" ); + + for ( Field ** ppField = table->field; *ppField; ppField++ ) + { + if ( (*ppField)->is_null() ) + { + sQuery.append ( "''" ); + + } else + { + if ( (*ppField)->type()==MYSQL_TYPE_TIMESTAMP ) + { + Item_field * pWrap = new Item_field ( *ppField ); // autofreed by query arena, I assume + Item_func_unix_timestamp * pConv = new Item_func_unix_timestamp ( pWrap ); + pConv->quick_fix_field(); + unsigned int uTs = (unsigned int) pConv->val_int(); + + snprintf ( sValueBuf, sizeof(sValueBuf), "'%u'", uTs ); + sQuery.append ( sValueBuf ); + + } else + { + (*ppField)->val_str ( &sValue ); + sQuery.append ( "'" ); + sValue.print ( &sQuery ); + sQuery.append ( "'" ); + sValue.length(0); + } + } + + if ( ppField[1] ) + sQuery.append ( ", " ); + } + sQuery.append ( ")" ); + + // FIXME? pretty inefficient to reconnect every time under high load, + // but this was intentionally written for a low load scenario.. + MYSQL * pConn = mysql_init ( NULL ); + if ( !pConn ) + SPH_RET ( ER_OUT_OF_RESOURCES ); + + unsigned int uTimeout = 1; + mysql_options ( pConn, MYSQL_OPT_CONNECT_TIMEOUT, (const char*)&uTimeout ); + + if ( !mysql_real_connect ( pConn, m_pShare->m_sHost, "root", "", "", m_pShare->m_iPort, m_pShare->m_sSocket, 0 ) ) + SPH_RET ( HandleMysqlError ( pConn, ER_CONNECT_TO_FOREIGN_DATA_SOURCE ) ); + + if ( mysql_real_query ( pConn, sQuery.ptr(), sQuery.length() ) ) + SPH_RET ( HandleMysqlError ( pConn, ER_QUERY_ON_FOREIGN_DATA_SOURCE ) ); + + // all ok! + mysql_close ( pConn ); + SPH_RET(0); +} + + +static inline bool IsIntegerFieldType ( enum_field_types eType ) +{ + return eType==MYSQL_TYPE_LONG || eType==MYSQL_TYPE_LONGLONG; +} + + +static inline bool IsIDField ( Field * pField ) +{ + enum_field_types eType = pField->type(); + + if ( eType==MYSQL_TYPE_LONGLONG ) + return true; + + if ( eType==MYSQL_TYPE_LONG && ((Field_num*)pField)->unsigned_flag ) + return true; + + return false; +} + + +int ha_sphinx::delete_row ( const byte * ) +{ + SPH_ENTER_METHOD(); + if ( !m_pShare || !m_pShare->m_bSphinxQL ) + SPH_RET ( HA_ERR_WRONG_COMMAND ); + + char sQueryBuf[1024]; + String sQuery ( sQueryBuf, sizeof(sQueryBuf), &my_charset_bin ); + sQuery.length ( 0 ); + + sQuery.append ( "DELETE FROM " ); + sQuery.append ( m_pShare->m_sIndex ); + sQuery.append ( " WHERE id=" ); + + char sValue[32]; + snprintf ( sValue, sizeof(sValue), "%lld", table->field[0]->val_int() ); + sQuery.append ( sValue ); + + // FIXME? pretty inefficient to reconnect every time under high load, + // but this was intentionally written for a low load scenario.. + MYSQL * pConn = mysql_init ( NULL ); + if ( !pConn ) + SPH_RET ( ER_OUT_OF_RESOURCES ); + + unsigned int uTimeout = 1; + mysql_options ( pConn, MYSQL_OPT_CONNECT_TIMEOUT, (const char*)&uTimeout ); + + if ( !mysql_real_connect ( pConn, m_pShare->m_sHost, "root", "", "", m_pShare->m_iPort, m_pShare->m_sSocket, 0 ) ) + SPH_RET ( HandleMysqlError ( pConn, ER_CONNECT_TO_FOREIGN_DATA_SOURCE ) ); + + if ( mysql_real_query ( pConn, sQuery.ptr(), sQuery.length() ) ) + SPH_RET ( HandleMysqlError ( pConn, ER_QUERY_ON_FOREIGN_DATA_SOURCE ) ); + + // all ok! + mysql_close ( pConn ); + SPH_RET(0); +} + + +int ha_sphinx::update_row ( const byte *, byte * ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( HA_ERR_WRONG_COMMAND ); +} + + +// keynr is key (index) number +// sorted is 1 if result MUST be sorted according to index +int ha_sphinx::index_init ( uint keynr, bool ) +{ + SPH_ENTER_METHOD(); + active_index = keynr; + + CSphSEThreadData * pTls = GetTls(); + if ( pTls ) + pTls->m_bCondDone = false; + + SPH_RET(0); +} + + +int ha_sphinx::index_end() +{ + SPH_ENTER_METHOD(); + SPH_RET(0); +} + + +bool ha_sphinx::CheckResponcePtr ( int iLen ) +{ + if ( m_pCur+iLen>m_pResponseEnd ) + { + m_pCur = m_pResponseEnd; + m_bUnpackError = true; + return false; + } + + return true; +} + + +uint32 ha_sphinx::UnpackDword () +{ + if ( !CheckResponcePtr ( sizeof(uint32) ) ) // NOLINT + { + return 0; + } + + uint32 uRes = ntohl ( sphUnalignedRead ( *(uint32*)m_pCur ) ); + m_pCur += sizeof(uint32); // NOLINT + return uRes; +} + + +char * ha_sphinx::UnpackString () +{ + uint32 iLen = UnpackDword (); + if ( !iLen ) + return NULL; + + if ( !CheckResponcePtr ( iLen ) ) + { + return NULL; + } + + char * sRes = new char [ 1+iLen ]; + memcpy ( sRes, m_pCur, iLen ); + sRes[iLen] = '\0'; + m_pCur += iLen; + return sRes; +} + + +static inline const char * FixNull ( const char * s ) +{ + return s ? s : "(null)"; +} + + +bool ha_sphinx::UnpackSchema () +{ + SPH_ENTER_METHOD(); + + // cleanup + if ( m_dFields ) + for ( int i=0; i<(int)m_iFields; i++ ) + SafeDeleteArray ( m_dFields[i] ); + SafeDeleteArray ( m_dFields ); + + // unpack network packet + uint32 uStatus = UnpackDword (); + char * sMessage = NULL; + + if ( uStatus!=SEARCHD_OK ) + { + sMessage = UnpackString (); + CSphSEThreadData * pTls = GetTls (); + if ( pTls ) + { + strncpy ( pTls->m_tStats.m_sLastMessage, sMessage, sizeof(pTls->m_tStats.m_sLastMessage) ); + pTls->m_tStats.m_bLastError = ( uStatus==SEARCHD_ERROR ); + } + + if ( uStatus==SEARCHD_ERROR ) + { + char sError[1024]; + my_snprintf ( sError, sizeof(sError), "searchd error: %s", sMessage ); + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), sError ); + SafeDeleteArray ( sMessage ); + SPH_RET ( false ); + } + } + + m_iFields = UnpackDword (); + m_dFields = new char * [ m_iFields ]; + if ( !m_dFields ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: UnpackSchema() failed (fields alloc error)" ); + SPH_RET(false); + } + + for ( uint32 i=0; im_iTableFields; j++ ) + { + const char * sTableField = m_pShare->m_sTableField[j]; + const char * sAttrField = m_dAttrs[i].m_sName; + if ( m_dAttrs[i].m_sName[0]=='@' ) + { + const char * sAtPrefix = "_sph_"; + if ( strncmp ( sTableField, sAtPrefix, strlen(sAtPrefix) ) ) + continue; + sTableField += strlen(sAtPrefix); + sAttrField++; + } + + if ( !strcasecmp ( sAttrField, sTableField ) ) + { + // we're almost good, but + // let's enforce that timestamp columns can only receive timestamp attributes + if ( m_pShare->m_eTableFieldType[j]!=MYSQL_TYPE_TIMESTAMP || m_dAttrs[i].m_uType==SPH_ATTR_TIMESTAMP ) + m_dAttrs[i].m_iField = j; + break; + } + } + } + + m_iMatchesTotal = UnpackDword (); + + m_bId64 = UnpackDword (); + if ( m_bId64 && m_pShare->m_eTableFieldType[0]!=MYSQL_TYPE_LONGLONG ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: 1st column must be bigint to accept 64-bit DOCIDs" ); + SPH_RET(false); + } + + // network packet unpacked; build unbound fields map + SafeDeleteArray ( m_dUnboundFields ); + m_dUnboundFields = new int [ m_pShare->m_iTableFields ]; + + for ( int i=0; im_iTableFields; i++ ) + { + if ( im_eTableFieldType[i]==MYSQL_TYPE_TIMESTAMP ) + m_dUnboundFields[i] = SPH_ATTR_TIMESTAMP; + + else + m_dUnboundFields[i] = SPH_ATTR_INTEGER; + } + + for ( uint32 i=0; i=0 ) + m_dUnboundFields [ m_dAttrs[i].m_iField ] = SPH_ATTR_NONE; + + if ( m_bUnpackError ) + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: UnpackSchema() failed (unpack error)" ); + + SPH_RET ( !m_bUnpackError ); +} + + +bool ha_sphinx::UnpackStats ( CSphSEStats * pStats ) +{ + assert ( pStats ); + + char * pCurSave = m_pCur; + for ( uint i=0; im_iMatchesTotal = UnpackDword (); + pStats->m_iMatchesFound = UnpackDword (); + pStats->m_iQueryMsec = UnpackDword (); + pStats->m_iWords = UnpackDword (); + + if ( m_bUnpackError ) + return false; + + SafeDeleteArray ( pStats->m_dWords ); + if ( pStats->m_iWords<0 || pStats->m_iWords>=SPHINXSE_MAX_KEYWORDSTATS ) + return false; + pStats->m_dWords = new CSphSEWordStats [ pStats->m_iWords ]; + if ( !pStats->m_dWords ) + return false; + + for ( int i=0; im_iWords; i++ ) + { + CSphSEWordStats & tWord = pStats->m_dWords[i]; + tWord.m_sWord = UnpackString (); + tWord.m_iDocs = UnpackDword (); + tWord.m_iHits = UnpackDword (); + } + + if ( m_bUnpackError ) + return false; + + m_pCur = pCurSave; + return true; +} + + +/// condition pushdown implementation, to properly intercept WHERE clauses on my columns +const COND * ha_sphinx::cond_push ( const COND * cond ) +{ + // catch the simplest case: query_column="some text" + for ( ;; ) + { + if ( cond->type()!=COND::FUNC_ITEM ) + break; + + Item_func * condf = (Item_func *)cond; + if ( condf->functype()!=Item_func::EQ_FUNC || condf->argument_count()!=2 ) + break; + + // get my tls + CSphSEThreadData * pTls = GetTls (); + if ( !pTls ) + break; + + Item ** args = condf->arguments(); + if ( !m_pShare->m_bSphinxQL ) + { + // on non-QL tables, intercept query=value condition for SELECT + if (!( args[0]->type()==COND::FIELD_ITEM && args[1]->type()==COND::STRING_ITEM )) + break; + + Item_field * pField = (Item_field *) args[0]; + if ( pField->field->field_index!=2 ) // FIXME! magic key index + break; + + // copy the query, and let know that we intercepted this condition + Item_string * pString = (Item_string *) args[1]; + pTls->m_bQuery = true; + strncpy ( pTls->m_sQuery, pString->str_value.c_ptr(), sizeof(pTls->m_sQuery) ); + pTls->m_sQuery[sizeof(pTls->m_sQuery)-1] = '\0'; + pTls->m_pQueryCharset = pString->str_value.charset(); + + } else + { + if (!( args[0]->type()==COND::FIELD_ITEM && args[1]->type()==COND::INT_ITEM )) + break; + + // on QL tables, intercept id=value condition for DELETE + Item_field * pField = (Item_field *) args[0]; + if ( pField->field->field_index!=0 ) // FIXME! magic key index + break; + + Item_int * pVal = (Item_int *) args[1]; + pTls->m_iCondId = pVal->val_int(); + pTls->m_bCondId = true; + } + + // we intercepted this condition + return NULL; + } + + // don't change anything + return cond; +} + + +/// condition popup +void ha_sphinx::cond_pop () +{ + CSphSEThreadData * pTls = GetTls (); + if ( pTls ) + pTls->m_bQuery = false; +} + + +/// get TLS (maybe allocate it, too) +CSphSEThreadData * ha_sphinx::GetTls() +{ + // where do we store that pointer in today's version? + CSphSEThreadData ** ppTls; +#if MYSQL_VERSION_ID>50100 + ppTls = (CSphSEThreadData**) thd_ha_data ( table->in_use, ht ); +#else + ppTls = (CSphSEThreadData**) ¤t_thd->ha_data[sphinx_hton.slot]; +#endif // >50100 + + // allocate if needed + if ( !*ppTls ) + *ppTls = new CSphSEThreadData (); + + // errors will be handled by caller + return *ppTls; +} + + +// Positions an index cursor to the index specified in the handle. Fetches the +// row if available. If the key value is null, begin at the first key of the +// index. +int ha_sphinx::index_read ( byte * buf, const byte * key, uint key_len, enum ha_rkey_function ) +{ + SPH_ENTER_METHOD(); + char sError[256]; + + // set new data for thd->ha_data, it is used in show_status + CSphSEThreadData * pTls = GetTls(); + if ( !pTls ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: TLS malloc() failed" ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + pTls->m_tStats.Reset (); + + // sphinxql table, just return the key once + if ( m_pShare->m_bSphinxQL ) + { + // over and out + if ( pTls->m_bCondDone ) + SPH_RET ( HA_ERR_END_OF_FILE ); + + // return a value from pushdown, if any + if ( pTls->m_bCondId ) + { + table->field[0]->store ( pTls->m_iCondId, 1 ); + pTls->m_bCondDone = true; + SPH_RET(0); + } + + // return a value from key + longlong iRef = 0; + if ( key_len==4 ) + iRef = uint4korr ( key ); + else if ( key_len==8 ) + iRef = uint8korr ( key ); + else + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: unexpected key length" ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + table->field[0]->store ( iRef, 1 ); + pTls->m_bCondDone = true; + SPH_RET(0); + } + + // parse query + if ( pTls->m_bQuery ) + { + // we have a query from condition pushdown + m_pCurrentKey = (const byte *) pTls->m_sQuery; + m_iCurrentKeyLen = strlen(pTls->m_sQuery); + } else + { + // just use the key (might be truncated) + m_pCurrentKey = key+HA_KEY_BLOB_LENGTH; + m_iCurrentKeyLen = uint2korr(key); // or maybe key_len? + pTls->m_pQueryCharset = m_pShare ? m_pShare->m_pTableQueryCharset : NULL; + } + + CSphSEQuery q ( (const char*)m_pCurrentKey, m_iCurrentKeyLen, m_pShare->m_sIndex ); + if ( !q.Parse () ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), q.m_sParseError ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + // do connect + int iSocket = ConnectAPI ( q.m_sHost, q.m_iPort ); + if ( iSocket<0 ) + SPH_RET ( HA_ERR_END_OF_FILE ); + + // my buffer + char * pBuffer; // will be free by CSphSEQuery dtor; do NOT free manually + int iReqLen = q.BuildRequest ( &pBuffer ); + + if ( iReqLen<=0 ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: q.BuildRequest() failed" ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + // send request + ::send ( iSocket, pBuffer, iReqLen, 0 ); + + // receive reply + char sHeader[8]; + int iGot = ::recv ( iSocket, sHeader, sizeof(sHeader), RECV_FLAGS ); + if ( iGot!=sizeof(sHeader) ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "failed to receive response header (searchd went away?)" ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + short int uRespStatus = ntohs ( sphUnalignedRead ( *(short int*)( &sHeader[0] ) ) ); + short int uRespVersion = ntohs ( sphUnalignedRead ( *(short int*)( &sHeader[2] ) ) ); + uint uRespLength = ntohl ( sphUnalignedRead ( *(uint *)( &sHeader[4] ) ) ); + SPH_DEBUG ( "got response header (status=%d version=%d length=%d)", + uRespStatus, uRespVersion, uRespLength ); + + SafeDeleteArray ( m_pResponse ); + if ( uRespLength<=SPHINXSE_MAX_ALLOC ) + m_pResponse = new char [ uRespLength+1 ]; + + if ( !m_pResponse ) + { + my_snprintf ( sError, sizeof(sError), "bad searchd response length (length=%u)", uRespLength ); + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), sError ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + int iRecvLength = 0; + while ( iRecvLength<(int)uRespLength ) + { + int iRecv = ::recv ( iSocket, m_pResponse+iRecvLength, uRespLength-iRecvLength, RECV_FLAGS ); + if ( iRecv<0 ) + break; + iRecvLength += iRecv; + } + + ::closesocket ( iSocket ); + iSocket = -1; + + if ( iRecvLength!=(int)uRespLength ) + { + my_snprintf ( sError, sizeof(sError), "net read error (expected=%d, got=%d)", uRespLength, iRecvLength ); + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), sError ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + // we'll have a message, at least + pTls->m_bStats = true; + + // parse reply + m_iCurrentPos = 0; + m_pCur = m_pResponse; + m_pResponseEnd = m_pResponse + uRespLength; + m_bUnpackError = false; + + if ( uRespStatus!=SEARCHD_OK ) + { + char * sMessage = UnpackString (); + if ( !sMessage ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "no valid response from searchd (status=%d, resplen=%d)", + uRespStatus, uRespLength ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + strncpy ( pTls->m_tStats.m_sLastMessage, sMessage, sizeof(pTls->m_tStats.m_sLastMessage) ); + SafeDeleteArray ( sMessage ); + + if ( uRespStatus!=SEARCHD_WARNING ) + { + my_snprintf ( sError, sizeof(sError), "searchd error: %s", pTls->m_tStats.m_sLastMessage ); + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), sError ); + + pTls->m_tStats.m_bLastError = true; + SPH_RET ( HA_ERR_END_OF_FILE ); + } + } + + if ( !UnpackSchema () ) + SPH_RET ( HA_ERR_END_OF_FILE ); + + if ( !UnpackStats ( &pTls->m_tStats ) ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: UnpackStats() failed" ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + SPH_RET ( get_rec ( buf, key, key_len ) ); +} + + +// Positions an index cursor to the index specified in key. Fetches the +// row if any. This is only used to read whole keys. +int ha_sphinx::index_read_idx ( byte *, uint, const byte *, uint, enum ha_rkey_function ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( HA_ERR_WRONG_COMMAND ); +} + + +// Used to read forward through the index. +int ha_sphinx::index_next ( byte * buf ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( get_rec ( buf, m_pCurrentKey, m_iCurrentKeyLen ) ); +} + + +int ha_sphinx::index_next_same ( byte * buf, const byte * key, uint keylen ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( get_rec ( buf, key, keylen ) ); +} + + +int ha_sphinx::get_rec ( byte * buf, const byte *, uint ) +{ + SPH_ENTER_METHOD(); + + if ( m_iCurrentPos>=m_iMatchesTotal ) + { + SafeDeleteArray ( m_pResponse ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + #if MYSQL_VERSION_ID>50100 + my_bitmap_map * org_bitmap = dbug_tmp_use_all_columns ( table, table->write_set ); + #endif + Field ** field = table->field; + + // unpack and return the match + longlong uMatchID = UnpackDword (); + if ( m_bId64 ) + uMatchID = ( uMatchID<<32 ) + UnpackDword(); + uint32 uMatchWeight = UnpackDword (); + + field[0]->store ( uMatchID, 1 ); + field[1]->store ( uMatchWeight, 1 ); + field[2]->store ( (const char*)m_pCurrentKey, m_iCurrentKeyLen, &my_charset_bin ); + + for ( uint32 i=0; i0 && !m_bUnpackError; uValue-- ) + UnpackDword(); + continue; + } + + Field * af = field [ m_dAttrs[i].m_iField ]; + switch ( m_dAttrs[i].m_uType ) + { + case SPH_ATTR_INTEGER: + case SPH_ATTR_ORDINAL: + case SPH_ATTR_BOOL: + af->store ( uValue, 1 ); + break; + + case SPH_ATTR_FLOAT: + af->store ( sphDW2F(uValue) ); + break; + + case SPH_ATTR_TIMESTAMP: + if ( af->type()==MYSQL_TYPE_TIMESTAMP ) + longstore ( af->ptr, uValue ); // because store() does not accept timestamps + else + af->store ( uValue, 1 ); + break; + + case SPH_ATTR_BIGINT: + af->store ( iValue64, 0 ); + break; + + case SPH_ATTR_STRING: + if ( !uValue ) + af->store ( "", 0, &my_charset_bin ); + else if ( CheckResponcePtr ( uValue ) ) + { + af->store ( m_pCur, uValue, &my_charset_bin ); + m_pCur += uValue; + } + break; + + case SPH_ATTR_UINT64SET: + case SPH_ATTR_UINT32SET : + if ( uValue<=0 ) + { + // shortcut, empty MVA set + af->store ( "", 0, &my_charset_bin ); + + } else + { + // convert MVA set to comma-separated string + char sBuf[1024]; // FIXME! magic size + char * pCur = sBuf; + + if ( m_dAttrs[i].m_uType==SPH_ATTR_UINT32SET ) + { + for ( ; uValue>0 && !m_bUnpackError; uValue-- ) + { + uint32 uEntry = UnpackDword (); + if ( pCur < sBuf+sizeof(sBuf)-16 ) // 10 chars per 32bit value plus some safety bytes + { + snprintf ( pCur, sBuf+sizeof(sBuf)-pCur, "%u", uEntry ); + while ( *pCur ) *pCur++; + if ( uValue>1 ) + *pCur++ = ','; // non-trailing commas + } + } + } else + { + for ( ; uValue>0 && !m_bUnpackError; uValue-=2 ) + { + uint64 uEntry = UnpackDword (); + uEntry = ( uEntry<<32 ) | UnpackDword(); + if ( pCur < sBuf+sizeof(sBuf)-24 ) // 20 chars per 64bit value plus some safety bytes + { + snprintf ( pCur, sBuf+sizeof(sBuf)-pCur, "%llu", uEntry ); + while ( *pCur ) *pCur++; + if ( uValue>2 ) + *pCur++ = ','; // non-trailing commas + } + } + } + + af->store ( sBuf, pCur-sBuf, &my_charset_bin ); + } + break; + + default: + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: unhandled attr type" ); + SafeDeleteArray ( m_pResponse ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + } + + if ( m_bUnpackError ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: response unpacker failed" ); + SafeDeleteArray ( m_pResponse ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + // zero out unmapped fields + for ( int i=SPHINXSE_SYSTEM_COLUMNS; i<(int)table->s->fields; i++ ) + if ( m_dUnboundFields[i]!=SPH_ATTR_NONE ) + switch ( m_dUnboundFields[i] ) + { + case SPH_ATTR_INTEGER: table->field[i]->store ( 0, 1 ); break; + case SPH_ATTR_TIMESTAMP: longstore ( table->field[i]->ptr, 0 ); break; + default: + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), + "INTERNAL ERROR: unhandled unbound field type %d", m_dUnboundFields[i] ); + SafeDeleteArray ( m_pResponse ); + SPH_RET ( HA_ERR_END_OF_FILE ); + } + + memset ( buf, 0, table->s->null_bytes ); + m_iCurrentPos++; + + #if MYSQL_VERSION_ID > 50100 + dbug_tmp_restore_column_map ( table->write_set, org_bitmap ); + #endif + + SPH_RET(0); +} + + +// Used to read backwards through the index. +int ha_sphinx::index_prev ( byte * ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( HA_ERR_WRONG_COMMAND ); +} + + +// index_first() asks for the first key in the index. +// +// Called from opt_range.cc, opt_sum.cc, sql_handler.cc, +// and sql_select.cc. +int ha_sphinx::index_first ( byte * ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( HA_ERR_END_OF_FILE ); +} + +// index_last() asks for the last key in the index. +// +// Called from opt_range.cc, opt_sum.cc, sql_handler.cc, +// and sql_select.cc. +int ha_sphinx::index_last ( byte * ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( HA_ERR_WRONG_COMMAND ); +} + + +int ha_sphinx::rnd_init ( bool ) +{ + SPH_ENTER_METHOD(); + SPH_RET(0); +} + + +int ha_sphinx::rnd_end() +{ + SPH_ENTER_METHOD(); + SPH_RET(0); +} + + +int ha_sphinx::rnd_next ( byte * ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( HA_ERR_END_OF_FILE ); +} + + +void ha_sphinx::position ( const byte * ) +{ + SPH_ENTER_METHOD(); + SPH_VOID_RET(); +} + + +// This is like rnd_next, but you are given a position to use +// to determine the row. The position will be of the type that you stored in +// ref. You can use ha_get_ptr(pos,ref_length) to retrieve whatever key +// or position you saved when position() was called. +// Called from filesort.cc records.cc sql_insert.cc sql_select.cc sql_update.cc. +int ha_sphinx::rnd_pos ( byte *, byte * ) +{ + SPH_ENTER_METHOD(); + SPH_RET ( HA_ERR_WRONG_COMMAND ); +} + + +#if MYSQL_VERSION_ID>=50030 +int ha_sphinx::info ( uint ) +#else +void ha_sphinx::info ( uint ) +#endif +{ + SPH_ENTER_METHOD(); + + if ( table->s->keys>0 ) + table->key_info[0].rec_per_key[0] = 1; + + #if MYSQL_VERSION_ID>50100 + stats.records = 20; + #else + records = 20; + #endif + +#if MYSQL_VERSION_ID>=50030 + SPH_RET(0); +#else + SPH_VOID_RET(); +#endif +} + + +int ha_sphinx::reset () +{ + SPH_ENTER_METHOD(); + CSphSEThreadData * pTls = GetTls (); + if ( pTls ) + pTls->m_bQuery = false; + SPH_RET(0); +} + + +int ha_sphinx::delete_all_rows() +{ + SPH_ENTER_METHOD(); + SPH_RET ( HA_ERR_WRONG_COMMAND ); +} + + +// First you should go read the section "locking functions for mysql" in +// lock.cc to understand this. +// This create a lock on the table. If you are implementing a storage engine +// that can handle transacations look at ha_berkely.cc to see how you will +// want to go about doing this. Otherwise you should consider calling flock() +// here. +// +// Called from lock.cc by lock_external() and unlock_external(). Also called +// from sql_table.cc by copy_data_between_tables(). +int ha_sphinx::external_lock ( THD *, int ) +{ + SPH_ENTER_METHOD(); + SPH_RET(0); +} + + +THR_LOCK_DATA ** ha_sphinx::store_lock ( THD *, THR_LOCK_DATA ** to, + enum thr_lock_type lock_type ) +{ + SPH_ENTER_METHOD(); + + if ( lock_type!=TL_IGNORE && m_tLock.type==TL_UNLOCK ) + m_tLock.type = lock_type; + + *to++ = &m_tLock; + SPH_RET(to); +} + + +int ha_sphinx::delete_table ( const char * ) +{ + SPH_ENTER_METHOD(); + SPH_RET(0); +} + + +// Renames a table from one name to another from alter table call. +// +// If you do not implement this, the default rename_table() is called from +// handler.cc and it will delete all files with the file extentions returned +// by bas_ext(). +// +// Called from sql_table.cc by mysql_rename_table(). +int ha_sphinx::rename_table ( const char *, const char * ) +{ + SPH_ENTER_METHOD(); + SPH_RET(0); +} + + +// Given a starting key, and an ending key estimate the number of rows that +// will exist between the two. end_key may be empty which in case determine +// if start_key matches any rows. +// +// Called from opt_range.cc by check_quick_keys(). +ha_rows ha_sphinx::records_in_range ( uint, key_range *, key_range * ) +{ + SPH_ENTER_METHOD(); + SPH_RET(3); // low number to force index usage +} + + +// create() is called to create a database. The variable name will have the name +// of the table. When create() is called you do not need to worry about opening +// the table. Also, the FRM file will have already been created so adjusting +// create_info will not do you any good. You can overwrite the frm file at this +// point if you wish to change the table definition, but there are no methods +// currently provided for doing that. +// +// Called from handle.cc by ha_create_table(). +int ha_sphinx::create ( const char * name, TABLE * table, HA_CREATE_INFO * ) +{ + SPH_ENTER_METHOD(); + char sError[256]; + + CSphSEShare tInfo; + if ( !ParseUrl ( &tInfo, table, true ) ) + SPH_RET(-1); + + // check SphinxAPI table + for ( ; !tInfo.m_bSphinxQL; ) + { + // check system fields (count and types) + if ( table->s->fieldsfield[0] ) ) + { + my_snprintf ( sError, sizeof(sError), "%s: 1st column (docid) MUST be unsigned integer or bigint", name ); + break; + } + + if ( !IsIntegerFieldType ( table->field[1]->type() ) ) + { + my_snprintf ( sError, sizeof(sError), "%s: 2nd column (weight) MUST be integer or bigint", name ); + break; + } + + enum_field_types f2 = table->field[2]->type(); + if ( f2!=MYSQL_TYPE_VARCHAR + && f2!=MYSQL_TYPE_BLOB && f2!=MYSQL_TYPE_MEDIUM_BLOB && f2!=MYSQL_TYPE_LONG_BLOB && f2!=MYSQL_TYPE_TINY_BLOB ) + { + my_snprintf ( sError, sizeof(sError), "%s: 3rd column (search query) MUST be varchar or text", name ); + break; + } + + // check attributes + int i; + for ( i=3; i<(int)table->s->fields; i++ ) + { + enum_field_types eType = table->field[i]->type(); + if ( eType!=MYSQL_TYPE_TIMESTAMP && !IsIntegerFieldType(eType) && eType!=MYSQL_TYPE_VARCHAR && eType!=MYSQL_TYPE_FLOAT ) + { + my_snprintf ( sError, sizeof(sError), "%s: %dth column (attribute %s) MUST be integer, bigint, timestamp, varchar, or float", + name, i+1, table->field[i]->field_name ); + break; + } + } + + if ( i!=(int)table->s->fields ) + break; + + // check index + if ( + table->s->keys!=1 || + table->key_info[0].key_parts!=1 || + strcasecmp ( table->key_info[0].key_part[0].field->field_name, table->field[2]->field_name ) ) + { + my_snprintf ( sError, sizeof(sError), "%s: there must be an index on '%s' column", + name, table->field[2]->field_name ); + break; + } + + // all good + sError[0] = '\0'; + break; + } + + // check SphinxQL table + for ( ; tInfo.m_bSphinxQL; ) + { + sError[0] = '\0'; + + // check that 1st column is id, is of int type, and has an index + if ( strcmp ( table->field[0]->field_name, "id" ) ) + { + my_snprintf ( sError, sizeof(sError), "%s: 1st column must be called 'id'", name ); + break; + } + + if ( !IsIDField ( table->field[0] ) ) + { + my_snprintf ( sError, sizeof(sError), "%s: 'id' column must be INT UNSIGNED or BIGINT", name ); + break; + } + + // check index + if ( + table->s->keys!=1 || + table->key_info[0].key_parts!=1 || + strcasecmp ( table->key_info[0].key_part[0].field->field_name, "id" ) ) + { + my_snprintf ( sError, sizeof(sError), "%s: 'id' column must be indexed", name ); + break; + } + + // check column types + for ( int i=1; i<(int)table->s->fields; i++ ) + { + enum_field_types eType = table->field[i]->type(); + if ( eType!=MYSQL_TYPE_TIMESTAMP && !IsIntegerFieldType(eType) && eType!=MYSQL_TYPE_VARCHAR && eType!=MYSQL_TYPE_FLOAT ) + { + my_snprintf ( sError, sizeof(sError), "%s: column %s is of unsupported type (use int/bigint/timestamp/varchar/float)", + name, i+1, table->field[i]->field_name ); + break; + } + } + if ( sError[0] ) + break; + + // all good + break; + } + + // report and bail + if ( sError[0] ) + { + my_error ( ER_CANT_CREATE_TABLE, MYF(0), sError, -1 ); + SPH_RET(-1); + } + + SPH_RET(0); +} + +// show functions + +#if MYSQL_VERSION_ID<50100 +#define SHOW_VAR_FUNC_BUFF_SIZE 1024 +#endif + +CSphSEStats * sphinx_get_stats ( THD * thd, SHOW_VAR * out ) +{ +#if MYSQL_VERSION_ID>50100 + if ( sphinx_hton_ptr ) + { + CSphSEThreadData *pTls = (CSphSEThreadData *) *thd_ha_data ( thd, sphinx_hton_ptr ); + + if ( pTls && pTls->m_bStats ) + return &pTls->m_tStats; + } +#else + CSphSEThreadData *pTls = (CSphSEThreadData *) thd->ha_data[sphinx_hton.slot]; + if ( pTls && pTls->m_bStats ) + return &pTls->m_tStats; +#endif + + out->type = SHOW_CHAR; + out->value = ""; + return 0; +} + +int sphinx_showfunc_total ( THD * thd, SHOW_VAR * out, char * ) +{ + CSphSEStats * pStats = sphinx_get_stats ( thd, out ); + if ( pStats ) + { + out->type = SHOW_INT; + out->value = (char *) &pStats->m_iMatchesTotal; + } + return 0; +} + +int sphinx_showfunc_total_found ( THD * thd, SHOW_VAR * out, char * ) +{ + CSphSEStats * pStats = sphinx_get_stats ( thd, out ); + if ( pStats ) + { + out->type = SHOW_INT; + out->value = (char *) &pStats->m_iMatchesFound; + } + return 0; +} + +int sphinx_showfunc_time ( THD * thd, SHOW_VAR * out, char * ) +{ + CSphSEStats * pStats = sphinx_get_stats ( thd, out ); + if ( pStats ) + { + out->type = SHOW_INT; + out->value = (char *) &pStats->m_iQueryMsec; + } + return 0; +} + +int sphinx_showfunc_word_count ( THD * thd, SHOW_VAR * out, char * ) +{ + CSphSEStats * pStats = sphinx_get_stats ( thd, out ); + if ( pStats ) + { + out->type = SHOW_INT; + out->value = (char *) &pStats->m_iWords; + } + return 0; +} + +int sphinx_showfunc_words ( THD * thd, SHOW_VAR * out, char * sBuffer ) +{ +#if MYSQL_VERSION_ID>50100 + if ( sphinx_hton_ptr ) + { + CSphSEThreadData * pTls = (CSphSEThreadData *) *thd_ha_data ( thd, sphinx_hton_ptr ); +#else + { + CSphSEThreadData * pTls = (CSphSEThreadData *) thd->ha_data[sphinx_hton.slot]; +#endif + if ( pTls && pTls->m_bStats ) + { + CSphSEStats * pStats = &pTls->m_tStats; + if ( pStats && pStats->m_iWords ) + { + uint uBuffLen = 0; + + out->type = SHOW_CHAR; + out->value = sBuffer; + + // the following is partially based on code in sphinx_show_status() + sBuffer[0] = 0; + for ( int i=0; im_iWords; i++ ) + { + CSphSEWordStats & tWord = pStats->m_dWords[i]; + uBuffLen = my_snprintf ( sBuffer, SHOW_VAR_FUNC_BUFF_SIZE, "%s%s:%d:%d ", sBuffer, + tWord.m_sWord, tWord.m_iDocs, tWord.m_iHits ); + } + + if ( uBuffLen > 0 ) + { + // trim last space + sBuffer [ --uBuffLen ] = 0; + + if ( pTls->m_pQueryCharset ) + { + // String::c_ptr() will nul-terminate the buffer. + // + // NOTE: It's not entirely clear whether this conversion is necessary at all. + + String sConvert; + uint iErrors; + sConvert.copy ( sBuffer, uBuffLen, pTls->m_pQueryCharset, system_charset_info, &iErrors ); + memcpy ( sBuffer, sConvert.c_ptr(), sConvert.length() + 1 ); + } + } + + return 0; + } + } + } + + out->type = SHOW_CHAR; + out->value = ""; + return 0; +} + +int sphinx_showfunc_error ( THD * thd, SHOW_VAR * out, char * ) +{ + CSphSEStats * pStats = sphinx_get_stats ( thd, out ); + if ( pStats && pStats->m_bLastError ) + { + out->type = SHOW_CHAR; + out->value = pStats->m_sLastMessage; + } + return 0; +} + +#if MYSQL_VERSION_ID>50100 +struct st_mysql_storage_engine sphinx_storage_engine = +{ + MYSQL_HANDLERTON_INTERFACE_VERSION +}; + +struct st_mysql_show_var sphinx_status_vars[] = +{ + {"sphinx_total", (char *)sphinx_showfunc_total, SHOW_FUNC}, + {"sphinx_total_found", (char *)sphinx_showfunc_total_found, SHOW_FUNC}, + {"sphinx_time", (char *)sphinx_showfunc_time, SHOW_FUNC}, + {"sphinx_word_count", (char *)sphinx_showfunc_word_count, SHOW_FUNC}, + {"sphinx_words", (char *)sphinx_showfunc_words, SHOW_FUNC}, + {"sphinx_error", (char *)sphinx_showfunc_error, SHOW_FUNC}, + {0, 0, (enum_mysql_show_type)0} +}; + + +mysql_declare_plugin(sphinx) +{ + MYSQL_STORAGE_ENGINE_PLUGIN, + &sphinx_storage_engine, + sphinx_hton_name, + "Sphinx developers", + sphinx_hton_comment, + PLUGIN_LICENSE_GPL, + sphinx_init_func, // Plugin Init + sphinx_done_func, // Plugin Deinit + 0x0001, // 0.1 + sphinx_status_vars, + NULL, + NULL +} +mysql_declare_plugin_end; + +#endif // >50100 + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/mysqlse/ha_sphinx.h b/coreseek/csft-4.1/mysqlse/ha_sphinx.h new file mode 100755 index 0000000..c37967e --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/ha_sphinx.h @@ -0,0 +1,170 @@ +// +// $Id$ +// + +#ifdef USE_PRAGMA_INTERFACE +#pragma interface // gcc class implementation +#endif + + +#if MYSQL_VERSION_ID>=50515 +#define TABLE_ARG TABLE_SHARE +#elif MYSQL_VERSION_ID>50100 +#define TABLE_ARG st_table_share +#else +#define TABLE_ARG st_table +#endif + + +#if MYSQL_VERSION_ID>=50120 +typedef uchar byte; +#endif + + +/// forward decls +class THD; +struct CSphReqQuery; +struct CSphSEShare; +struct CSphSEAttr; +struct CSphSEStats; +struct CSphSEThreadData; + +/// Sphinx SE handler class +class ha_sphinx : public handler +{ +protected: + THR_LOCK_DATA m_tLock; ///< MySQL lock + + CSphSEShare * m_pShare; ///< shared lock info + + uint m_iMatchesTotal; + uint m_iCurrentPos; + const byte * m_pCurrentKey; + uint m_iCurrentKeyLen; + + char * m_pResponse; ///< searchd response storage + char * m_pResponseEnd; ///< searchd response storage end (points to wilderness!) + char * m_pCur; ///< current position into response + bool m_bUnpackError; ///< any errors while unpacking response + +public: +#if MYSQL_VERSION_ID<50100 + ha_sphinx ( TABLE_ARG * table_arg ); // NOLINT +#else + ha_sphinx ( handlerton * hton, TABLE_ARG * table_arg ); +#endif + ~ha_sphinx () {} + + const char * table_type () const { return "SPHINX"; } ///< SE name for display purposes + const char * index_type ( uint ) { return "HASH"; } ///< index type name for display purposes + const char ** bas_ext () const; ///< my file extensions + + #if MYSQL_VERSION_ID>50100 + ulonglong table_flags () const { return HA_CAN_INDEX_BLOBS; } ///< bitmap of implemented flags (see handler.h for more info) + #else + ulong table_flags () const { return HA_CAN_INDEX_BLOBS; } ///< bitmap of implemented flags (see handler.h for more info) + #endif + + ulong index_flags ( uint, uint, bool ) const { return 0; } ///< bitmap of flags that says how SE implements indexes + uint max_supported_record_length () const { return HA_MAX_REC_LENGTH; } + uint max_supported_keys () const { return 1; } + uint max_supported_key_parts () const { return 1; } + uint max_supported_key_length () const { return MAX_KEY_LENGTH; } + uint max_supported_key_part_length () const { return MAX_KEY_LENGTH; } + + #if MYSQL_VERSION_ID>50100 + virtual double scan_time () { return (double)( stats.records+stats.deleted )/20.0 + 10; } ///< called in test_quick_select to determine if indexes should be used + #else + virtual double scan_time () { return (double)( records+deleted )/20.0 + 10; } ///< called in test_quick_select to determine if indexes should be used + #endif + + virtual double read_time ( ha_rows rows ) { return (double)rows/20.0 + 1; } ///< index read time estimate + +public: + int open ( const char * name, int mode, uint test_if_locked ); + int close (); + + int write_row ( byte * buf ); + int update_row ( const byte * old_data, byte * new_data ); + int delete_row ( const byte * buf ); + int extra ( enum ha_extra_function op ); + + int index_init ( uint keynr, bool sorted ); // 5.1.x + int index_init ( uint keynr ) { return index_init ( keynr, false ); } // 5.0.x + + int index_end (); + int index_read ( byte * buf, const byte * key, uint key_len, enum ha_rkey_function find_flag ); + int index_read_idx ( byte * buf, uint idx, const byte * key, uint key_len, enum ha_rkey_function find_flag ); + int index_next ( byte * buf ); + int index_next_same ( byte * buf, const byte * key, uint keylen ); + int index_prev ( byte * buf ); + int index_first ( byte * buf ); + int index_last ( byte * buf ); + + int get_rec ( byte * buf, const byte * key, uint keylen ); + + int rnd_init ( bool scan ); + int rnd_end (); + int rnd_next ( byte * buf ); + int rnd_pos ( byte * buf, byte * pos ); + void position ( const byte * record ); + +#if MYSQL_VERSION_ID>=50030 + int info ( uint ); +#else + void info ( uint ); +#endif + + int reset(); + int external_lock ( THD * thd, int lock_type ); + int delete_all_rows (); + ha_rows records_in_range ( uint inx, key_range * min_key, key_range * max_key ); + + int delete_table ( const char * from ); + int rename_table ( const char * from, const char * to ); + int create ( const char * name, TABLE * form, HA_CREATE_INFO * create_info ); + + THR_LOCK_DATA ** store_lock ( THD * thd, THR_LOCK_DATA ** to, enum thr_lock_type lock_type ); + +public: + virtual const COND * cond_push ( const COND *cond ); + virtual void cond_pop (); + +private: + uint32 m_iFields; + char ** m_dFields; + + uint32 m_iAttrs; + CSphSEAttr * m_dAttrs; + int m_bId64; + + int * m_dUnboundFields; + +private: + int Connect ( const char * sQueryHost, ushort uPort ); + int ConnectAPI ( const char * sQueryHost, int iQueryPort ); + int HandleMysqlError ( struct st_mysql * pConn, int iErrCode ); + + uint32 UnpackDword (); + char * UnpackString (); + bool UnpackSchema (); + bool UnpackStats ( CSphSEStats * pStats ); + bool CheckResponcePtr ( int iLen ); + + CSphSEThreadData * GetTls (); +}; + + +#if MYSQL_VERSION_ID < 50100 +bool sphinx_show_status ( THD * thd ); +#endif + +int sphinx_showfunc_total_found ( THD *, SHOW_VAR *, char * ); +int sphinx_showfunc_total ( THD *, SHOW_VAR *, char * ); +int sphinx_showfunc_time ( THD *, SHOW_VAR *, char * ); +int sphinx_showfunc_word_count ( THD *, SHOW_VAR *, char * ); +int sphinx_showfunc_words ( THD *, SHOW_VAR *, char * ); + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/mysqlse/make-patch.sh b/coreseek/csft-4.1/mysqlse/make-patch.sh new file mode 100755 index 0000000..6fca583 --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/make-patch.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +OUT=$1 +ORIG=$2 +NEW=$3 + +if [ ! \( "$1" -a "$2" -a "$3" \) ]; then + echo "$0 " + exit 1 +fi + +FILES=' +/config/ac-macros/ha_sphinx.m4 +/configure.in +/libmysqld/Makefile.am +/sql/handler.cc +/sql/handler.h +/sql/Makefile.am +/sql/mysqld.cc +/sql/mysql_priv.h +/sql/set_var.cc +/sql/sql_lex.h +/sql/sql_parse.cc +/sql/sql_yacc.yy +/sql/structs.h +/sql/sql_show.cc +' + +rm -f $OUT +if [ -e $OUT ]; then + exit 1 +fi + +for name in $FILES; do + diff -BNru "$ORIG$name" "$NEW$name" >> $OUT +done diff --git a/coreseek/csft-4.1/mysqlse/plug.in b/coreseek/csft-4.1/mysqlse/plug.in new file mode 100755 index 0000000..1ded1be --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/plug.in @@ -0,0 +1,5 @@ +MYSQL_STORAGE_ENGINE(sphinx,, [Sphinx Storage Engine], + [Sphinx Storage Engines], [max,max-no-ndb]) +MYSQL_PLUGIN_DIRECTORY(sphinx, [storage/sphinx]) +MYSQL_PLUGIN_STATIC(sphinx, [libsphinx.a]) +MYSQL_PLUGIN_DYNAMIC(sphinx, [ha_sphinx.la]) diff --git a/coreseek/csft-4.1/mysqlse/snippets_udf.cc b/coreseek/csft-4.1/mysqlse/snippets_udf.cc new file mode 100755 index 0000000..25cfb66 --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/snippets_udf.cc @@ -0,0 +1,791 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include +#include +#include + +#include +#include + +#include + +#if MYSQL_VERSION_ID>50100 +#include "mysql_priv.h" +#include +#else +#include "../mysql_priv.h" +#endif + +#include +#include + +#if MYSQL_VERSION_ID>=50120 +typedef uchar byte; +#endif + +/// partially copy-pasted stuff that should be moved elsewhere + +#if UNALIGNED_RAM_ACCESS + +/// pass-through wrapper +template < typename T > inline T sphUnalignedRead ( const T & tRef ) +{ + return tRef; +} + +/// pass-through wrapper +template < typename T > void sphUnalignedWrite ( void * pPtr, const T & tVal ) +{ + *(T*)pPtr = tVal; +} + +#else + +/// unaligned read wrapper for some architectures (eg. SPARC) +template < typename T > +inline T sphUnalignedRead ( const T & tRef ) +{ + T uTmp; + byte * pSrc = (byte *) &tRef; + byte * pDst = (byte *) &uTmp; + for ( int i=0; i<(int)sizeof(T); i++ ) + *pDst++ = *pSrc++; + return uTmp; +} + +/// unaligned write wrapper for some architectures (eg. SPARC) +template < typename T > +void sphUnalignedWrite ( void * pPtr, const T & tVal ) +{ + byte * pDst = (byte *) pPtr; + byte * pSrc = (byte *) &tVal; + for ( int i=0; i<(int)sizeof(T); i++ ) + *pDst++ = *pSrc++; +} + +#endif + +#define SPHINXSE_MAX_ALLOC (16*1024*1024) + +#define SafeDelete(_arg) { if ( _arg ) delete ( _arg ); (_arg) = NULL; } +#define SafeDeleteArray(_arg) { if ( _arg ) delete [] ( _arg ); (_arg) = NULL; } + +#define Min(a,b) ((a)<(b)?(a):(b)) + +typedef unsigned int DWORD; + +inline DWORD sphF2DW ( float f ) { union { float f; uint32 d; } u; u.f = f; return u.d; } + +static char * sphDup ( const char * sSrc, int iLen=-1 ) +{ + if ( !sSrc ) + return NULL; + + if ( iLen<0 ) + iLen = strlen(sSrc); + + char * sRes = new char [ 1+iLen ]; + memcpy ( sRes, sSrc, iLen ); + sRes[iLen] = '\0'; + return sRes; +} + +static inline void sphShowErrno ( const char * sCall ) +{ + char sError[256]; + snprintf ( sError, sizeof(sError), "%s() failed: [%d] %s", sCall, errno, strerror(errno) ); + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), sError ); +} + +static const bool sphReportErrors = true; + +static bool sphSend ( int iFd, const char * pBuffer, int iSize, bool bReportErrors = false ) +{ + assert ( pBuffer ); + assert ( iSize > 0 ); + + const int iResult = send ( iFd, pBuffer, iSize, 0 ); + if ( iResult!=iSize ) + { + if ( bReportErrors ) sphShowErrno("send"); + return false; + } + return true; +} + +static bool sphRecv ( int iFd, char * pBuffer, int iSize, bool bReportErrors = false ) +{ + assert ( pBuffer ); + assert ( iSize > 0 ); + + while ( iSize ) + { + const int iResult = recv ( iFd, pBuffer, iSize, 0 ); + if ( iResult > 0 ) + { + iSize -= iResult; + pBuffer += iSize; + } else if ( iResult==0 ) + { + if ( bReportErrors ) + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), "recv() failed: disconnected" ); + return false; + } else + { + if ( bReportErrors ) sphShowErrno("recv"); + return false; + } + } + return true; +} + +enum +{ + SPHINX_SEARCHD_PROTO = 1, + + SEARCHD_COMMAND_EXCERPT = 1, + + VER_COMMAND_EXCERPT = 0x103, +}; + +/// known answers +enum +{ + SEARCHD_OK = 0, ///< general success, command-specific reply follows + SEARCHD_ERROR = 1, ///< general failure, error message follows + SEARCHD_RETRY = 2, ///< temporary failure, error message follows, client should retry later + SEARCHD_WARNING = 3 ///< general success, warning message and command-specific reply follow +}; + +#define SPHINXSE_DEFAULT_SCHEME "sphinx" +#define SPHINXSE_DEFAULT_HOST "127.0.0.1" +#define SPHINXSE_DEFAULT_PORT 9312 +#define SPHINXSE_DEFAULT_INDEX "*" + +class CSphBuffer +{ +private: + bool m_bOverrun; + int m_iSize; + int m_iLeft; + char * m_pBuffer; + char * m_pCurrent; + +public: + explicit CSphBuffer ( const int iSize ) + : m_bOverrun ( false ) + , m_iSize ( iSize ) + , m_iLeft ( iSize ) + { + assert ( iSize > 0 ); + m_pBuffer = new char[iSize]; + m_pCurrent = m_pBuffer; + } + + ~CSphBuffer () + { + SafeDeleteArray ( m_pBuffer ); + } + + const char * Ptr() const { return m_pBuffer; } + + bool Finalize() + { + return !( m_bOverrun || m_iLeft!=0 || ( m_pCurrent - m_pBuffer )!=m_iSize ); + } + + void SendBytes ( const void * pBytes, int iBytes ); + + void SendWord ( short int v ) { v = ntohs(v); SendBytes ( &v, sizeof(v) ); } // NOLINT + void SendInt ( int v ) { v = ntohl(v); SendBytes ( &v, sizeof(v) ); } + void SendDword ( DWORD v ) { v = ntohl(v) ;SendBytes ( &v, sizeof(v) ); } + void SendUint64 ( ulonglong v ) { SendDword ( uint ( v>>32 ) ); SendDword ( uint ( v&0xFFFFFFFFUL ) ); } + void SendString ( const char * v ) { SendString ( v, strlen(v) ); } + void SendString ( const char * v, int iLen ) { SendDword(iLen); SendBytes ( v, iLen ); } + void SendFloat ( float v ) { SendDword ( sphF2DW(v) ); } +}; + +void CSphBuffer::SendBytes ( const void * pBytes, int iBytes ) +{ + if ( m_iLeft < iBytes ) + { + m_bOverrun = true; + return; + } + + memcpy ( m_pCurrent, pBytes, iBytes ); + + m_pCurrent += iBytes; + m_iLeft -= iBytes; +} + +struct CSphUrl +{ + char * m_sBuffer; + char * m_sFormatted; + + char * m_sScheme; + char * m_sHost; + char * m_sIndex; + + int m_iPort; + + CSphUrl() + : m_sBuffer ( NULL ) + , m_sFormatted ( NULL ) + , m_sScheme ( SPHINXSE_DEFAULT_SCHEME ) + , m_sHost ( SPHINXSE_DEFAULT_HOST ) + , m_sIndex ( SPHINXSE_DEFAULT_INDEX ) + , m_iPort ( SPHINXSE_DEFAULT_PORT ) + {} + + ~CSphUrl() + { + SafeDeleteArray ( m_sFormatted ); + SafeDeleteArray ( m_sBuffer ); + } + + bool Parse ( const char * sUrl, int iLen ); + int Connect(); + const char * Format(); +}; + +const char * CSphUrl::Format() +{ + if ( !m_sFormatted ) + { + int iSize = 15 + strlen(m_sHost) + strlen(m_sIndex); + m_sFormatted = new char [ iSize ]; + if ( m_iPort ) + snprintf ( m_sFormatted, iSize, "inet://%s:%d/%s", m_sHost, m_iPort, m_sIndex ); + else + snprintf ( m_sFormatted, iSize, "unix://%s/%s", m_sHost, m_sIndex ); + } + return m_sFormatted; +} + +// the following scheme variants are recognized +// +// inet://host/index +// inet://host:port/index +// unix://unix/domain/socket:index +// unix://unix/domain/socket +bool CSphUrl::Parse ( const char * sUrl, int iLen ) +{ + bool bOk = true; + while ( iLen ) + { + bOk = false; + + m_sBuffer = sphDup ( sUrl, iLen ); + m_sScheme = m_sBuffer; + + m_sHost = strstr ( m_sBuffer, "://" ); + if ( !m_sHost ) + break; + m_sHost[0] = '\0'; + m_sHost += 2; + + if ( !strcmp ( m_sScheme, "unix" ) ) + { + // unix-domain socket + m_iPort = 0; + if (!( m_sIndex = strrchr ( m_sHost, ':' ) )) + m_sIndex = SPHINXSE_DEFAULT_INDEX; + else + { + *m_sIndex++ = '\0'; + if ( !*m_sIndex ) + m_sIndex = SPHINXSE_DEFAULT_INDEX; + } + bOk = true; + break; + } + if ( strcmp ( m_sScheme, "sphinx" )!=0 && strcmp ( m_sScheme, "inet" )!=0 ) + break; + + // inet + m_sHost++; + char * sPort = strchr ( m_sHost, ':' ); + if ( sPort ) + { + *sPort++ = '\0'; + if ( *sPort ) + { + m_sIndex = strchr ( sPort, '/' ); + if ( m_sIndex ) + *m_sIndex++ = '\0'; + else + m_sIndex = SPHINXSE_DEFAULT_INDEX; + + m_iPort = atoi(sPort); + if ( !m_iPort ) + m_iPort = SPHINXSE_DEFAULT_PORT; + } + } else + { + m_sIndex = strchr ( m_sHost, '/' ); + if ( m_sIndex ) + *m_sIndex++ = '\0'; + else + m_sIndex = SPHINXSE_DEFAULT_INDEX; + } + + bOk = true; + break; + } + + return bOk; +} + +int CSphUrl::Connect() +{ + struct sockaddr_in sin; +#ifndef __WIN__ + struct sockaddr_un saun; +#endif + + int iDomain = 0; + int iSockaddrSize = 0; + struct sockaddr * pSockaddr = NULL; + + in_addr_t ip_addr; + + if ( m_iPort ) + { + iDomain = AF_INET; + iSockaddrSize = sizeof(sin); + pSockaddr = (struct sockaddr *) &sin; + + memset ( &sin, 0, sizeof(sin) ); + sin.sin_family = AF_INET; + sin.sin_port = htons ( m_iPort ); + + // resolve address + if ( (int)( ip_addr = inet_addr ( m_sHost ) )!=(int)INADDR_NONE ) + memcpy ( &sin.sin_addr, &ip_addr, sizeof(ip_addr) ); + else + { + int tmp_errno; + struct hostent tmp_hostent, *hp; + char buff2 [ GETHOSTBYNAME_BUFF_SIZE ]; + + hp = my_gethostbyname_r ( m_sHost, &tmp_hostent, buff2, sizeof(buff2), &tmp_errno ); + if ( !hp ) + { + my_gethostbyname_r_free(); + + char sError[256]; + snprintf ( sError, sizeof(sError), "failed to resolve searchd host (name=%s)", m_sHost ); + + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), sError ); + return -1; + } + + memcpy ( &sin.sin_addr, hp->h_addr, Min ( sizeof(sin.sin_addr), (size_t)hp->h_length ) ); + my_gethostbyname_r_free(); + } + } else + { +#ifndef __WIN__ + iDomain = AF_UNIX; + iSockaddrSize = sizeof(saun); + pSockaddr = (struct sockaddr *) &saun; + + memset ( &saun, 0, sizeof(saun) ); + saun.sun_family = AF_UNIX; + strncpy ( saun.sun_path, m_sHost, sizeof(saun.sun_path)-1 ); +#else + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), "Unix-domain sockets are not supported on Windows" ); + return -1; +#endif + } + + // connect to searchd and exchange versions + uint uServerVersion; + uint uClientVersion = htonl ( SPHINX_SEARCHD_PROTO ); + int iSocket = -1; + char * pError = NULL; + do + { + iSocket = socket ( iDomain, SOCK_STREAM, 0 ); + if ( iSocket==-1 ) + { + pError = "Failed to create client socket"; + break; + } + + if ( connect ( iSocket, pSockaddr, iSockaddrSize )==-1 ) + { + pError = "Failed to connect to searchd"; + break; + } + + if ( !sphRecv ( iSocket, (char *)&uServerVersion, sizeof(uServerVersion) ) ) + { + pError = "Failed to receive searchd version"; + break; + } + + if ( !sphSend ( iSocket, (char *)&uClientVersion, sizeof(uClientVersion) ) ) + { + pError = "Failed to send client version"; + break; + } + } + while(0); + + // fixme: compare versions? + + if ( pError ) + { + char sError[1024]; + snprintf ( sError, sizeof(sError), "%s [%d] %s", Format(), errno, strerror(errno) ); + my_error ( ER_CONNECT_TO_FOREIGN_DATA_SOURCE, MYF(0), sError ); + + if ( iSocket!=-1 ) + close ( iSocket ); + + return -1; + } + + return iSocket; +} + +struct CSphResponse +{ + char * m_pBuffer; + char * m_pBody; + + CSphResponse () + : m_pBuffer ( NULL ) + , m_pBody ( NULL ) + {} + + explicit CSphResponse ( DWORD uSize ) + : m_pBody ( NULL ) + { + m_pBuffer = new char[uSize]; + } + + ~CSphResponse () + { + SafeDeleteArray ( m_pBuffer ); + } + + static CSphResponse * Read ( int iSocket, int iClientVersion ); +}; + +CSphResponse * +CSphResponse::Read ( int iSocket, int iClientVersion ) +{ + char sHeader[8]; + if ( !sphRecv ( iSocket, sHeader, sizeof(sHeader) ) ) + return NULL; + + int iStatus = ntohs ( sphUnalignedRead ( *(short int *) &sHeader[0] ) ); + int iVersion = ntohs ( sphUnalignedRead ( *(short int *) &sHeader[2] ) ); + DWORD uLength = ntohl ( sphUnalignedRead ( *(DWORD *) &sHeader[4] ) ); + + if ( iVersionm_pBuffer, uLength ) ) + { + SafeDelete ( pResponse ); + return NULL; + } + + pResponse->m_pBody = pResponse->m_pBuffer; + if ( iStatus!=SEARCHD_OK ) + { + DWORD uSize = ntohl ( *(DWORD *)pResponse->m_pBuffer ); + if ( iStatus==SEARCHD_WARNING ) + { + pResponse->m_pBody += uSize; // fixme: report the warning somehow + } else + { + char * sMessage = sphDup ( pResponse->m_pBuffer + sizeof(DWORD), uSize ); + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), sMessage ); + SafeDeleteArray ( sMessage ); + SafeDelete ( pResponse ); + return NULL; + } + } + return pResponse; + } + return NULL; +} + +/// udf + +extern "C" +{ + my_bool sphinx_snippets_init ( UDF_INIT * pUDF, UDF_ARGS * pArgs, char * sMessage ); + void sphinx_snippets_deinit ( UDF_INIT * pUDF ); + char * sphinx_snippets ( UDF_INIT * pUDF, UDF_ARGS * pArgs, char * sResult, unsigned long * pLength, char * pIsNull, char * sError ); +}; + +#define MAX_MESSAGE_LENGTH 255 +#define MAX_RESULT_LENGTH 255 + +struct CSphSnippets +{ + CSphUrl m_tUrl; + CSphResponse * m_pResponse; + + int m_iBeforeMatch; + int m_iAfterMatch; + int m_iChunkSeparator; + int m_iStripMode; + int m_iPassageBoundary; + int m_iLimit; + int m_iLimitWords; + int m_iLimitPassages; + int m_iAround; + int m_iPassageId; + int m_iFlags; + + CSphSnippets() + : m_pResponse(NULL) + , m_iBeforeMatch(0) + , m_iAfterMatch(0) + , m_iChunkSeparator(0) + , m_iStripMode(0) + , m_iPassageBoundary(0) + // defaults + , m_iLimit(256) + , m_iLimitWords(0) + , m_iLimitPassages(0) + , m_iAround(5) + , m_iPassageId(1) + , m_iFlags(1) + { + } + + ~CSphSnippets() + { + SafeDelete ( m_pResponse ); + } +}; + +#define KEYWORD(NAME) else if ( strncmp ( NAME, pArgs->attributes[i], pArgs->attribute_lengths[i] )==0 ) + +#define CHECK_TYPE(TYPE) \ + if ( pArgs->arg_type[i]!=TYPE ) \ + { \ + snprintf ( sMessage, MAX_MESSAGE_LENGTH, \ + "%.*s argument must be a string", \ + (int)pArgs->attribute_lengths[i], \ + pArgs->attributes[i] ); \ + bFail = true; \ + break; \ + } \ + if ( TYPE==STRING_RESULT && !pArgs->args[i] ) \ + { \ + snprintf ( sMessage, MAX_MESSAGE_LENGTH, \ + "%.*s argument must be constant (and not NULL)", \ + (int)pArgs->attribute_lengths[i], \ + pArgs->attributes[i] ); \ + bFail = true; \ + break; \ + } + +#define STRING CHECK_TYPE(STRING_RESULT) +#define INT CHECK_TYPE(INT_RESULT); int iValue = *(long long *)pArgs->args[i] + +my_bool sphinx_snippets_init ( UDF_INIT * pUDF, UDF_ARGS * pArgs, char * sMessage ) +{ + if ( pArgs->arg_count < 3 ) + { + strncpy ( sMessage, "insufficient arguments", MAX_MESSAGE_LENGTH ); + return 1; + } + + bool bFail = false; + CSphSnippets * pOpts = new CSphSnippets; + for ( uint i = 0; i < pArgs->arg_count; i++ ) + { + if ( i < 3 ) + { + if ( pArgs->arg_type[i]!=STRING_RESULT ) + { + strncpy ( sMessage, "first three arguments must be of string type", MAX_MESSAGE_LENGTH ); + bFail = true; + break; + } + } + KEYWORD("sphinx") + { + STRING; + if ( !pOpts->m_tUrl.Parse ( pArgs->args[i], pArgs->lengths[i] ) ) + { + strncpy ( sMessage, "failed to parse connection string", MAX_MESSAGE_LENGTH ); + bFail = true; + break; + } + } + KEYWORD("before_match") { STRING; pOpts->m_iBeforeMatch = i; } + KEYWORD("after_match") { STRING; pOpts->m_iAfterMatch = i; } + KEYWORD("chunk_separator") { STRING; pOpts->m_iChunkSeparator = i; } + KEYWORD("html_strip_mode") { STRING; pOpts->m_iStripMode = i; } + KEYWORD("passage_boundary") { STRING; pOpts->m_iPassageBoundary = i; } + + KEYWORD("limit") { INT; pOpts->m_iLimit = iValue; } + KEYWORD("limit_words") { INT; pOpts->m_iLimitWords = iValue; } + KEYWORD("limit_passages") { INT; pOpts->m_iLimitPassages = iValue; } + KEYWORD("around") { INT; pOpts->m_iAround = iValue; } + KEYWORD("start_passage_id") { INT; pOpts->m_iPassageId = iValue; } + + KEYWORD("exact_phrase") { INT; if ( iValue ) pOpts->m_iFlags |= 2; } + KEYWORD("single_passage") { INT; if ( iValue ) pOpts->m_iFlags |= 4; } + KEYWORD("use_boundaries") { INT; if ( iValue ) pOpts->m_iFlags |= 8; } + KEYWORD("weight_order") { INT; if ( iValue ) pOpts->m_iFlags |= 16; } + KEYWORD("query_mode") { INT; if ( iValue ) pOpts->m_iFlags |= 32; } + KEYWORD("force_all_words") { INT; if ( iValue ) pOpts->m_iFlags |= 64; } + KEYWORD("load_files") { INT; if ( iValue ) pOpts->m_iFlags |= 128; } + KEYWORD("allow_empty") { INT; if ( iValue ) pOpts->m_iFlags |= 256; } + KEYWORD("emit_zones") { INT; if ( iValue ) pOpts->m_iFlags |= 512; } + else + { + snprintf ( sMessage, MAX_MESSAGE_LENGTH, "unrecognized argument: %.*s", + (int)pArgs->attribute_lengths[i], pArgs->attributes[i] ); + bFail = true; + break; + } + } + + if ( bFail ) + { + SafeDelete ( pOpts ); + return 1; + } + pUDF->ptr = (char *)pOpts; + return 0; +} + +#undef STRING +#undef INT +#undef KEYWORD +#undef CHECK_TYPE + +#define ARG(i) pArgs->args[i], pArgs->lengths[i] +#define ARG_LEN(VAR, LEN) ( VAR ? pArgs->lengths[VAR] : LEN ) + +#define SEND_STRING(INDEX, DEFAULT) \ + if ( INDEX ) \ + tBuffer.SendString ( ARG(INDEX) ); \ + else \ + tBuffer.SendString ( DEFAULT, sizeof(DEFAULT) - 1 ); + + +char * sphinx_snippets ( UDF_INIT * pUDF, UDF_ARGS * pArgs, char * sResult, unsigned long * pLength, char * pIsNull, char * pError ) +{ + CSphSnippets * pOpts = (CSphSnippets *)pUDF->ptr; + assert ( pOpts ); + + if ( !pArgs->args[0] || !pArgs->args[1] || !pArgs->args[2] ) + { + *pIsNull = 1; + return sResult; + } + + const int iSize = 68 + + pArgs->lengths[1] + // index + pArgs->lengths[2] + // words + ARG_LEN ( pOpts->m_iBeforeMatch, 3 ) + + ARG_LEN ( pOpts->m_iAfterMatch, 4 ) + + ARG_LEN ( pOpts->m_iChunkSeparator, 5 ) + + ARG_LEN ( pOpts->m_iStripMode, 5 ) + + ARG_LEN ( pOpts->m_iPassageBoundary, 0 ) + + 4 + pArgs->lengths[0]; // document + + CSphBuffer tBuffer(iSize); + + tBuffer.SendWord ( SEARCHD_COMMAND_EXCERPT ); + tBuffer.SendWord ( VER_COMMAND_EXCERPT ); + tBuffer.SendDword ( iSize - 8 ); + + tBuffer.SendDword ( 0 ); + tBuffer.SendDword ( pOpts->m_iFlags ); + + tBuffer.SendString ( ARG(1) ); // index + tBuffer.SendString ( ARG(2) ); // words + + SEND_STRING ( pOpts->m_iBeforeMatch, "" ); + SEND_STRING ( pOpts->m_iAfterMatch, "" ); + SEND_STRING ( pOpts->m_iChunkSeparator, " ... " ); + + tBuffer.SendInt ( pOpts->m_iLimit ); + tBuffer.SendInt ( pOpts->m_iAround ); + + tBuffer.SendInt ( pOpts->m_iLimitPassages ); + tBuffer.SendInt ( pOpts->m_iLimitWords ); + tBuffer.SendInt ( pOpts->m_iPassageId ); + + SEND_STRING ( pOpts->m_iStripMode, "index" ); + SEND_STRING ( pOpts->m_iPassageBoundary, "" ); + + // single document + tBuffer.SendInt ( 1 ); + tBuffer.SendString ( ARG(0) ); + + int iSocket = -1; + do + { + if ( !tBuffer.Finalize() ) + { + my_error ( ER_QUERY_ON_FOREIGN_DATA_SOURCE, MYF(0), "INTERNAL ERROR: failed to build request" ); + break; + } + + iSocket = pOpts->m_tUrl.Connect(); + if ( iSocket==-1 ) break; + if ( !sphSend ( iSocket, tBuffer.Ptr(), iSize, sphReportErrors ) ) break; + + CSphResponse * pResponse = CSphResponse::Read ( iSocket, VER_COMMAND_EXCERPT ); + if ( !pResponse ) break; + + close ( iSocket ); + pOpts->m_pResponse = pResponse; + *pLength = ntohl ( *(DWORD *)pResponse->m_pBody ); + return pResponse->m_pBody + sizeof(DWORD); + } + while(0); + + if ( iSocket!=-1 ) + close ( iSocket ); + + *pError = 1; + return sResult; +} + +#undef SEND_STRING +#undef ARG_LEN +#undef ARG + +void sphinx_snippets_deinit ( UDF_INIT * pUDF ) +{ + CSphSnippets * pOpts = (CSphSnippets *)pUDF->ptr; + SafeDelete ( pOpts ); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/mysqlse/sphinx.5.0.22.diff b/coreseek/csft-4.1/mysqlse/sphinx.5.0.22.diff new file mode 100755 index 0000000..7dd4ebf --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/sphinx.5.0.22.diff @@ -0,0 +1,284 @@ +diff -B -N -r -u mysql-5.0.22/config/ac-macros/ha_sphinx.m4 mysql-5.0.22.sx/config/ac-macros/ha_sphinx.m4 +--- mysql-5.0.22/config/ac-macros/ha_sphinx.m4 1970-01-01 01:00:00.000000000 +0100 ++++ mysql-5.0.22.sx/config/ac-macros/ha_sphinx.m4 2006-06-06 19:49:38.000000000 +0200 +@@ -0,0 +1,30 @@ ++dnl --------------------------------------------------------------------------- ++dnl Macro: MYSQL_CHECK_EXAMPLEDB ++dnl Sets HAVE_SPHINX_DB if --with-sphinx-storage-engine is used ++dnl --------------------------------------------------------------------------- ++AC_DEFUN([MYSQL_CHECK_SPHINXDB], [ ++ AC_ARG_WITH([sphinx-storage-engine], ++ [ ++ --with-sphinx-storage-engine ++ Enable the Sphinx Storage Engine], ++ [sphinxdb="$withval"], ++ [sphinxdb=no]) ++ AC_MSG_CHECKING([for example storage engine]) ++ ++ case "$sphinxdb" in ++ yes ) ++ AC_DEFINE([HAVE_SPHINX_DB], [1], [Builds Sphinx Engine]) ++ AC_MSG_RESULT([yes]) ++ [sphinxdb=yes] ++ ;; ++ * ) ++ AC_MSG_RESULT([no]) ++ [sphinxdb=no] ++ ;; ++ esac ++ ++]) ++dnl --------------------------------------------------------------------------- ++dnl END OF MYSQL_CHECK_EXAMPLE SECTION ++dnl --------------------------------------------------------------------------- ++ +diff -B -N -r -u mysql-5.0.22/configure.in mysql-5.0.22.sx/configure.in +--- mysql-5.0.22/configure.in 2006-05-25 10:56:45.000000000 +0200 ++++ mysql-5.0.22.sx/configure.in 2006-06-06 19:49:38.000000000 +0200 +@@ -41,6 +41,7 @@ + sinclude(config/ac-macros/ha_berkeley.m4) + sinclude(config/ac-macros/ha_blackhole.m4) + sinclude(config/ac-macros/ha_example.m4) ++sinclude(config/ac-macros/ha_sphinx.m4) + sinclude(config/ac-macros/ha_federated.m4) + sinclude(config/ac-macros/ha_innodb.m4) + sinclude(config/ac-macros/ha_ndbcluster.m4) +@@ -2450,6 +2451,7 @@ + MYSQL_CHECK_BDB + MYSQL_CHECK_INNODB + MYSQL_CHECK_EXAMPLEDB ++MYSQL_CHECK_SPHINXDB + MYSQL_CHECK_ARCHIVEDB + MYSQL_CHECK_CSVDB + MYSQL_CHECK_BLACKHOLEDB +diff -B -N -r -u mysql-5.0.22/libmysqld/Makefile.am mysql-5.0.22.sx/libmysqld/Makefile.am +--- mysql-5.0.22/libmysqld/Makefile.am 2006-05-25 10:56:55.000000000 +0200 ++++ mysql-5.0.22.sx/libmysqld/Makefile.am 2006-06-06 19:49:38.000000000 +0200 +@@ -27,7 +27,7 @@ + -DSHAREDIR="\"$(MYSQLSHAREdir)\"" + INCLUDES= @bdb_includes@ \ + -I$(top_builddir)/include -I$(top_srcdir)/include \ +- -I$(top_srcdir)/sql -I$(top_srcdir)/sql/examples \ ++ -I$(top_srcdir)/sql -I$(top_srcdir)/sql/examples -I$(top_srcdir)/sql/sphinx \ + -I$(top_srcdir)/regex \ + $(openssl_includes) $(yassl_includes) @ZLIB_INCLUDES@ + +@@ -38,6 +38,7 @@ + libmysqlsources = errmsg.c get_password.c libmysql.c client.c pack.c \ + my_time.c + sqlexamplessources = ha_example.cc ha_tina.cc ++sqlsphinxsources = ha_sphinx.cc + + noinst_HEADERS = embedded_priv.h emb_qcache.h + +@@ -65,7 +66,7 @@ + parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \ + ha_blackhole.cc ha_archive.cc my_user.c + +-libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources) ++libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources) $(sqlsphinxsources) + libmysqld_a_SOURCES= + + # automake misses these +@@ -133,12 +134,16 @@ + rm -f $$f; \ + @LN_CP_F@ $(top_srcdir)/sql/examples/$$f $$f; \ + done; \ ++ for f in $(sqlsphinxsources); do \ ++ rm -f $$f; \ ++ @LN_CP_F@ $(top_srcdir)/sql/sphinx/$$f $$f; \ ++ done; \ + rm -f client_settings.h; \ + @LN_CP_F@ $(top_srcdir)/libmysql/client_settings.h client_settings.h + + + clean-local: +- rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlexamplessources) | sed "s;\.lo;.c;g"` \ ++ rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlexamplessources) $(sqlsphinxsources) | sed "s;\.lo;.c;g"` \ + $(top_srcdir)/linked_libmysqld_sources; \ + rm -f client_settings.h + +diff -B -N -r -u mysql-5.0.22/sql/handler.cc mysql-5.0.22.sx/sql/handler.cc +--- mysql-5.0.22/sql/handler.cc 2006-05-25 10:56:42.000000000 +0200 ++++ mysql-5.0.22.sx/sql/handler.cc 2006-06-06 19:49:38.000000000 +0200 +@@ -78,6 +78,15 @@ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + HTON_NO_FLAGS }; + #endif ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++extern handlerton sphinx_hton; ++#else ++handlerton sphinx_hton = { "SPHINX", SHOW_OPTION_NO, "SPHINX storage engine", ++ DB_TYPE_SPHINX_DB, NULL, 0, 0, NULL, NULL, ++ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ++ HTON_NO_FLAGS }; ++#endif + #ifdef HAVE_INNOBASE_DB + #include "ha_innodb.h" + extern handlerton innobase_hton; +@@ -147,6 +156,7 @@ + &example_hton, + &archive_hton, + &tina_hton, ++ &sphinx_hton, + &ndbcluster_hton, + &federated_hton, + &myisammrg_hton, +@@ -345,6 +355,12 @@ + return new (alloc) ha_tina(table); + return NULL; + #endif ++#ifdef HAVE_SPHINX_DB ++ case DB_TYPE_SPHINX_DB: ++ if (have_sphinx_db == SHOW_OPTION_YES) ++ return new (alloc) ha_sphinx(table); ++ return NULL; ++#endif + #ifdef HAVE_NDBCLUSTER_DB + case DB_TYPE_NDBCLUSTER: + if (have_ndbcluster == SHOW_OPTION_YES) +diff -B -N -r -u mysql-5.0.22/sql/handler.h mysql-5.0.22.sx/sql/handler.h +--- mysql-5.0.22/sql/handler.h 2006-05-25 10:56:55.000000000 +0200 ++++ mysql-5.0.22.sx/sql/handler.h 2006-06-06 19:49:38.000000000 +0200 +@@ -183,8 +183,9 @@ + DB_TYPE_BERKELEY_DB, DB_TYPE_INNODB, + DB_TYPE_GEMINI, DB_TYPE_NDBCLUSTER, + DB_TYPE_EXAMPLE_DB, DB_TYPE_ARCHIVE_DB, DB_TYPE_CSV_DB, +- DB_TYPE_FEDERATED_DB, ++ DB_TYPE_FEDERATED_DB, + DB_TYPE_BLACKHOLE_DB, ++ DB_TYPE_SPHINX_DB, + DB_TYPE_DEFAULT // Must be last + }; + +diff -B -N -r -u mysql-5.0.22/sql/Makefile.am mysql-5.0.22.sx/sql/Makefile.am +--- mysql-5.0.22/sql/Makefile.am 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/Makefile.am 2006-06-06 19:49:38.000000000 +0200 +@@ -66,6 +66,7 @@ + sql_array.h sql_cursor.h \ + examples/ha_example.h ha_archive.h \ + examples/ha_tina.h ha_blackhole.h \ ++ sphinx/ha_sphinx.h \ + ha_federated.h + mysqld_SOURCES = sql_lex.cc sql_handler.cc \ + item.cc item_sum.cc item_buff.cc item_func.cc \ +@@ -102,6 +103,7 @@ + sp_cache.cc parse_file.cc sql_trigger.cc \ + examples/ha_example.cc ha_archive.cc \ + examples/ha_tina.cc ha_blackhole.cc \ ++ sphinx/ha_sphinx.cc \ + ha_federated.cc + + gen_lex_hash_SOURCES = gen_lex_hash.cc +diff -B -N -r -u mysql-5.0.22/sql/mysqld.cc mysql-5.0.22.sx/sql/mysqld.cc +--- mysql-5.0.22/sql/mysqld.cc 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/mysqld.cc 2006-06-06 19:49:38.000000000 +0200 +@@ -6420,6 +6420,11 @@ + #else + have_csv_db= SHOW_OPTION_NO; + #endif ++#ifdef HAVE_SPHINX_DB ++ have_sphinx_db= SHOW_OPTION_YES; ++#else ++ have_sphinx_db= SHOW_OPTION_NO; ++#endif + #ifdef HAVE_NDBCLUSTER_DB + have_ndbcluster=SHOW_OPTION_DISABLED; + #else +@@ -7457,6 +7462,7 @@ + #undef have_example_db + #undef have_archive_db + #undef have_csv_db ++#undef have_sphinx_db + #undef have_federated_db + #undef have_partition_db + #undef have_blackhole_db +@@ -7467,6 +7473,7 @@ + SHOW_COMP_OPTION have_example_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_archive_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_csv_db= SHOW_OPTION_NO; ++SHOW_COMP_OPTION have_sphinx_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_federated_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_partition_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_blackhole_db= SHOW_OPTION_NO; +diff -B -N -r -u mysql-5.0.22/sql/mysql_priv.h mysql-5.0.22.sx/sql/mysql_priv.h +--- mysql-5.0.22/sql/mysql_priv.h 2006-05-25 10:56:43.000000000 +0200 ++++ mysql-5.0.22.sx/sql/mysql_priv.h 2006-06-06 19:49:38.000000000 +0200 +@@ -1279,6 +1279,12 @@ + #else + extern SHOW_COMP_OPTION have_csv_db; + #endif ++#ifdef HAVE_SPHINX_DB ++extern handlerton sphinx_hton; ++#define have_sphinx_db sphinx_hton.state ++#else ++extern SHOW_COMP_OPTION have_sphinx_db; ++#endif + #ifdef HAVE_FEDERATED_DB + extern handlerton federated_hton; + #define have_federated_db federated_hton.state +diff -B -N -r -u mysql-5.0.22/sql/set_var.cc mysql-5.0.22.sx/sql/set_var.cc +--- mysql-5.0.22/sql/set_var.cc 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/set_var.cc 2006-06-06 19:49:38.000000000 +0200 +@@ -809,6 +809,7 @@ + {"have_compress", (char*) &have_compress, SHOW_HAVE}, + {"have_crypt", (char*) &have_crypt, SHOW_HAVE}, + {"have_csv", (char*) &have_csv_db, SHOW_HAVE}, ++ {"have_sphinx", (char*) &have_sphinx_db, SHOW_HAVE}, + {"have_example_engine", (char*) &have_example_db, SHOW_HAVE}, + {"have_federated_engine", (char*) &have_federated_db, SHOW_HAVE}, + {"have_geometry", (char*) &have_geometry, SHOW_HAVE}, +diff -B -N -r -u mysql-5.0.22/sql/sql_lex.h mysql-5.0.22.sx/sql/sql_lex.h +--- mysql-5.0.22/sql/sql_lex.h 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/sql_lex.h 2006-06-06 19:49:38.000000000 +0200 +@@ -58,6 +58,7 @@ + SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS, + SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_LOGS, SQLCOM_SHOW_STATUS, + SQLCOM_SHOW_INNODB_STATUS, SQLCOM_SHOW_NDBCLUSTER_STATUS, SQLCOM_SHOW_MUTEX_STATUS, ++ SQLCOM_SHOW_SPHINX_STATUS, + SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, + SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS, + SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB, SQLCOM_SHOW_TABLE_STATUS, +diff -B -N -r -u mysql-5.0.22/sql/sql_parse.cc mysql-5.0.22.sx/sql/sql_parse.cc +--- mysql-5.0.22/sql/sql_parse.cc 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/sql_parse.cc 2006-06-06 19:49:38.000000000 +0200 +@@ -25,6 +25,9 @@ + #ifdef HAVE_INNOBASE_DB + #include "ha_innodb.h" + #endif ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++#endif + + #ifdef HAVE_NDBCLUSTER_DB + #include "ha_ndbcluster.h" +@@ -2722,6 +2725,15 @@ + break; + } + #endif ++#ifdef HAVE_SPHINX_DB ++ case SQLCOM_SHOW_SPHINX_STATUS: ++ { ++ if (check_global_access(thd, SUPER_ACL)) ++ goto error; ++ res = sphinx_show_status(thd); ++ break; ++ } ++#endif + #ifdef HAVE_REPLICATION + case SQLCOM_LOAD_MASTER_TABLE: + { +diff -B -N -r -u mysql-5.0.22/sql/sql_yacc.yy mysql-5.0.22.sx/sql/sql_yacc.yy +--- mysql-5.0.22/sql/sql_yacc.yy 2006-05-25 10:56:43.000000000 +0200 ++++ mysql-5.0.22.sx/sql/sql_yacc.yy 2006-06-06 19:49:38.000000000 +0200 +@@ -6584,6 +6584,9 @@ + case DB_TYPE_INNODB: + Lex->sql_command = SQLCOM_SHOW_INNODB_STATUS; + break; ++ case DB_TYPE_SPHINX_DB: ++ Lex->sql_command = SQLCOM_SHOW_SPHINX_STATUS; ++ break; + default: + my_error(ER_NOT_SUPPORTED_YET, MYF(0), "STATUS"); + YYABORT; diff --git a/coreseek/csft-4.1/mysqlse/sphinx.5.0.27.diff b/coreseek/csft-4.1/mysqlse/sphinx.5.0.27.diff new file mode 100755 index 0000000..9ff6cf4 --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/sphinx.5.0.27.diff @@ -0,0 +1,284 @@ +diff -B -N -r -u mysql-5.0.22/config/ac-macros/ha_sphinx.m4 mysql-5.0.22.sx/config/ac-macros/ha_sphinx.m4 +--- mysql-5.0.22/config/ac-macros/ha_sphinx.m4 1970-01-01 01:00:00.000000000 +0100 ++++ mysql-5.0.22.sx/config/ac-macros/ha_sphinx.m4 2006-06-06 19:49:38.000000000 +0200 +@@ -0,0 +1,30 @@ ++dnl --------------------------------------------------------------------------- ++dnl Macro: MYSQL_CHECK_EXAMPLEDB ++dnl Sets HAVE_SPHINX_DB if --with-sphinx-storage-engine is used ++dnl --------------------------------------------------------------------------- ++AC_DEFUN([MYSQL_CHECK_SPHINXDB], [ ++ AC_ARG_WITH([sphinx-storage-engine], ++ [ ++ --with-sphinx-storage-engine ++ Enable the Sphinx Storage Engine], ++ [sphinxdb="$withval"], ++ [sphinxdb=no]) ++ AC_MSG_CHECKING([for example storage engine]) ++ ++ case "$sphinxdb" in ++ yes ) ++ AC_DEFINE([HAVE_SPHINX_DB], [1], [Builds Sphinx Engine]) ++ AC_MSG_RESULT([yes]) ++ [sphinxdb=yes] ++ ;; ++ * ) ++ AC_MSG_RESULT([no]) ++ [sphinxdb=no] ++ ;; ++ esac ++ ++]) ++dnl --------------------------------------------------------------------------- ++dnl END OF MYSQL_CHECK_EXAMPLE SECTION ++dnl --------------------------------------------------------------------------- ++ +diff -B -N -r -u mysql-5.0.22/configure.in mysql-5.0.22.sx/configure.in +--- mysql-5.0.22/configure.in 2006-05-25 10:56:45.000000000 +0200 ++++ mysql-5.0.22.sx/configure.in 2006-06-06 19:49:38.000000000 +0200 +@@ -41,6 +41,7 @@ + sinclude(config/ac-macros/ha_berkeley.m4) + sinclude(config/ac-macros/ha_blackhole.m4) + sinclude(config/ac-macros/ha_example.m4) ++sinclude(config/ac-macros/ha_sphinx.m4) + sinclude(config/ac-macros/ha_federated.m4) + sinclude(config/ac-macros/ha_innodb.m4) + sinclude(config/ac-macros/ha_ndbcluster.m4) +@@ -2450,6 +2451,7 @@ + MYSQL_CHECK_BDB + MYSQL_CHECK_INNODB + MYSQL_CHECK_EXAMPLEDB ++MYSQL_CHECK_SPHINXDB + MYSQL_CHECK_ARCHIVEDB + MYSQL_CHECK_CSVDB + MYSQL_CHECK_BLACKHOLEDB +diff -B -N -r -u mysql-5.0.22/libmysqld/Makefile.am mysql-5.0.22.sx/libmysqld/Makefile.am +--- mysql-5.0.22/libmysqld/Makefile.am 2006-05-25 10:56:55.000000000 +0200 ++++ mysql-5.0.22.sx/libmysqld/Makefile.am 2006-06-06 19:49:38.000000000 +0200 +@@ -27,7 +27,7 @@ + -DSHAREDIR="\"$(MYSQLSHAREdir)\"" + INCLUDES= @bdb_includes@ \ + -I$(top_builddir)/include -I$(top_srcdir)/include \ +- -I$(top_srcdir)/sql -I$(top_srcdir)/sql/examples \ ++ -I$(top_srcdir)/sql -I$(top_srcdir)/sql/examples -I$(top_srcdir)/sql/sphinx \ + -I$(top_srcdir)/regex \ + $(openssl_includes) $(yassl_includes) @ZLIB_INCLUDES@ + +@@ -38,6 +38,7 @@ + libmysqlsources = errmsg.c get_password.c libmysql.c client.c pack.c \ + my_time.c + sqlexamplessources = ha_example.cc ha_tina.cc ++sqlsphinxsources = ha_sphinx.cc + + noinst_HEADERS = embedded_priv.h emb_qcache.h + +@@ -65,7 +66,7 @@ + parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \ + ha_blackhole.cc ha_archive.cc my_user.c + +-libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources) ++libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources) $(sqlsphinxsources) + libmysqld_a_SOURCES= + + # automake misses these +@@ -133,12 +134,16 @@ + rm -f $$f; \ + @LN_CP_F@ $(top_srcdir)/sql/examples/$$f $$f; \ + done; \ ++ for f in $(sqlsphinxsources); do \ ++ rm -f $$f; \ ++ @LN_CP_F@ $(top_srcdir)/sql/sphinx/$$f $$f; \ ++ done; \ + rm -f client_settings.h; \ + @LN_CP_F@ $(top_srcdir)/libmysql/client_settings.h client_settings.h + + + clean-local: +- rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlexamplessources) | sed "s;\.lo;.c;g"` \ ++ rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlexamplessources) $(sqlsphinxsources) | sed "s;\.lo;.c;g"` \ + $(top_srcdir)/linked_libmysqld_sources; \ + rm -f client_settings.h + +diff -B -N -r -u mysql-5.0.22/sql/handler.cc mysql-5.0.22.sx/sql/handler.cc +--- mysql-5.0.22/sql/handler.cc 2006-05-25 10:56:42.000000000 +0200 ++++ mysql-5.0.22.sx/sql/handler.cc 2006-06-06 19:49:38.000000000 +0200 +@@ -78,6 +78,15 @@ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + HTON_NO_FLAGS }; + #endif ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++extern handlerton sphinx_hton; ++#else ++handlerton sphinx_hton = { "SPHINX", SHOW_OPTION_NO, "SPHINX storage engine", ++ DB_TYPE_SPHINX_DB, NULL, 0, 0, NULL, NULL, ++ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ++ HTON_NO_FLAGS }; ++#endif + #ifdef HAVE_INNOBASE_DB + #include "ha_innodb.h" + extern handlerton innobase_hton; +@@ -147,6 +156,7 @@ + &example_hton, + &archive_hton, + &tina_hton, ++ &sphinx_hton, + &ndbcluster_hton, + &federated_hton, + &myisammrg_hton, +@@ -345,6 +355,12 @@ + return new (alloc) ha_tina(table); + return NULL; + #endif ++#ifdef HAVE_SPHINX_DB ++ case DB_TYPE_SPHINX_DB: ++ if (have_sphinx_db == SHOW_OPTION_YES) ++ return new (alloc) ha_sphinx(table); ++ return NULL; ++#endif + #ifdef HAVE_NDBCLUSTER_DB + case DB_TYPE_NDBCLUSTER: + if (have_ndbcluster == SHOW_OPTION_YES) +diff -B -N -r -u mysql-5.0.22/sql/handler.h mysql-5.0.22.sx/sql/handler.h +--- mysql-5.0.22/sql/handler.h 2006-05-25 10:56:55.000000000 +0200 ++++ mysql-5.0.22.sx/sql/handler.h 2006-06-06 19:49:38.000000000 +0200 +@@ -183,8 +183,9 @@ + DB_TYPE_BERKELEY_DB, DB_TYPE_INNODB, + DB_TYPE_GEMINI, DB_TYPE_NDBCLUSTER, + DB_TYPE_EXAMPLE_DB, DB_TYPE_ARCHIVE_DB, DB_TYPE_CSV_DB, +- DB_TYPE_FEDERATED_DB, ++ DB_TYPE_FEDERATED_DB, + DB_TYPE_BLACKHOLE_DB, ++ DB_TYPE_SPHINX_DB, + DB_TYPE_DEFAULT // Must be last + }; + +diff -B -N -r -u mysql-5.0.22/sql/Makefile.am mysql-5.0.22.sx/sql/Makefile.am +--- mysql-5.0.22/sql/Makefile.am 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/Makefile.am 2006-06-06 19:49:38.000000000 +0200 +@@ -66,6 +66,7 @@ + sql_array.h sql_cursor.h \ + examples/ha_example.h ha_archive.h \ + examples/ha_tina.h ha_blackhole.h \ ++ sphinx/ha_sphinx.h \ + ha_federated.h + mysqld_SOURCES = sql_lex.cc sql_handler.cc \ + item.cc item_sum.cc item_buff.cc item_func.cc \ +@@ -102,6 +103,7 @@ + sp_cache.cc parse_file.cc sql_trigger.cc \ + examples/ha_example.cc ha_archive.cc \ + examples/ha_tina.cc ha_blackhole.cc \ ++ sphinx/ha_sphinx.cc \ + ha_federated.cc + + gen_lex_hash_SOURCES = gen_lex_hash.cc +diff -B -N -r -u mysql-5.0.22/sql/mysqld.cc mysql-5.0.22.sx/sql/mysqld.cc +--- mysql-5.0.22/sql/mysqld.cc 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/mysqld.cc 2006-06-06 19:49:38.000000000 +0200 +@@ -6420,6 +6420,11 @@ + #else + have_csv_db= SHOW_OPTION_NO; + #endif ++#ifdef HAVE_SPHINX_DB ++ have_sphinx_db= SHOW_OPTION_YES; ++#else ++ have_sphinx_db= SHOW_OPTION_NO; ++#endif + #ifdef HAVE_NDBCLUSTER_DB + have_ndbcluster=SHOW_OPTION_DISABLED; + #else +@@ -7457,6 +7462,7 @@ + #undef have_example_db + #undef have_archive_db + #undef have_csv_db ++#undef have_sphinx_db + #undef have_federated_db + #undef have_partition_db + #undef have_blackhole_db +@@ -7467,6 +7473,7 @@ + SHOW_COMP_OPTION have_example_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_archive_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_csv_db= SHOW_OPTION_NO; ++SHOW_COMP_OPTION have_sphinx_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_federated_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_partition_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_blackhole_db= SHOW_OPTION_NO; +diff -B -N -r -u mysql-5.0.22/sql/mysql_priv.h mysql-5.0.22.sx/sql/mysql_priv.h +--- mysql-5.0.22/sql/mysql_priv.h 2006-05-25 10:56:43.000000000 +0200 ++++ mysql-5.0.22.sx/sql/mysql_priv.h 2006-06-06 19:49:38.000000000 +0200 +@@ -1279,6 +1279,12 @@ + #else + extern SHOW_COMP_OPTION have_csv_db; + #endif ++#ifdef HAVE_SPHINX_DB ++extern handlerton sphinx_hton; ++#define have_sphinx_db sphinx_hton.state ++#else ++extern SHOW_COMP_OPTION have_sphinx_db; ++#endif + #ifdef HAVE_FEDERATED_DB + extern handlerton federated_hton; + #define have_federated_db federated_hton.state +diff -B -N -r -u mysql-5.0.22/sql/set_var.cc mysql-5.0.22.sx/sql/set_var.cc +--- mysql-5.0.22/sql/set_var.cc 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/set_var.cc 2006-06-06 19:49:38.000000000 +0200 +@@ -864,6 +864,7 @@ + {"have_compress", (char*) &have_compress, SHOW_HAVE}, + {"have_crypt", (char*) &have_crypt, SHOW_HAVE}, + {"have_csv", (char*) &have_csv_db, SHOW_HAVE}, ++ {"have_sphinx", (char*) &have_sphinx_db, SHOW_HAVE}, + {"have_dynamic_loading", (char*) &have_dlopen, SHOW_HAVE}, + {"have_example_engine", (char*) &have_example_db, SHOW_HAVE}, + {"have_federated_engine", (char*) &have_federated_db, SHOW_HAVE}, +diff -B -N -r -u mysql-5.0.22/sql/sql_lex.h mysql-5.0.22.sx/sql/sql_lex.h +--- mysql-5.0.22/sql/sql_lex.h 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/sql_lex.h 2006-06-06 19:49:38.000000000 +0200 +@@ -58,6 +58,7 @@ + SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS, + SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_LOGS, SQLCOM_SHOW_STATUS, + SQLCOM_SHOW_INNODB_STATUS, SQLCOM_SHOW_NDBCLUSTER_STATUS, SQLCOM_SHOW_MUTEX_STATUS, ++ SQLCOM_SHOW_SPHINX_STATUS, + SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, + SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS, + SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB, SQLCOM_SHOW_TABLE_STATUS, +diff -B -N -r -u mysql-5.0.22/sql/sql_parse.cc mysql-5.0.22.sx/sql/sql_parse.cc +--- mysql-5.0.22/sql/sql_parse.cc 2006-05-25 10:56:41.000000000 +0200 ++++ mysql-5.0.22.sx/sql/sql_parse.cc 2006-06-06 19:49:38.000000000 +0200 +@@ -25,6 +25,9 @@ + #ifdef HAVE_INNOBASE_DB + #include "ha_innodb.h" + #endif ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++#endif + + #ifdef HAVE_NDBCLUSTER_DB + #include "ha_ndbcluster.h" +@@ -2722,6 +2725,15 @@ + break; + } + #endif ++#ifdef HAVE_SPHINX_DB ++ case SQLCOM_SHOW_SPHINX_STATUS: ++ { ++ if (check_global_access(thd, SUPER_ACL)) ++ goto error; ++ res = sphinx_show_status(thd); ++ break; ++ } ++#endif + #ifdef HAVE_REPLICATION + case SQLCOM_LOAD_MASTER_TABLE: + { +diff -B -N -r -u mysql-5.0.22/sql/sql_yacc.yy mysql-5.0.22.sx/sql/sql_yacc.yy +--- mysql-5.0.22/sql/sql_yacc.yy 2006-05-25 10:56:43.000000000 +0200 ++++ mysql-5.0.22.sx/sql/sql_yacc.yy 2006-06-06 19:49:38.000000000 +0200 +@@ -6584,6 +6584,9 @@ + case DB_TYPE_INNODB: + Lex->sql_command = SQLCOM_SHOW_INNODB_STATUS; + break; ++ case DB_TYPE_SPHINX_DB: ++ Lex->sql_command = SQLCOM_SHOW_SPHINX_STATUS; ++ break; + default: + my_error(ER_NOT_SUPPORTED_YET, MYF(0), "STATUS"); + YYABORT; diff --git a/coreseek/csft-4.1/mysqlse/sphinx.5.0.37.diff b/coreseek/csft-4.1/mysqlse/sphinx.5.0.37.diff new file mode 100755 index 0000000..3f86e54 --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/sphinx.5.0.37.diff @@ -0,0 +1,338 @@ +--- mysql-5.0.67/config/ac-macros/ha_sphinx.m4 1970-01-01 10:00:00.000000000 +1000 ++++ mysql-5.0.67-sphinx/config/ac-macros/ha_sphinx.m4 2009-02-14 09:15:48.000000000 +1000 +@@ -0,0 +1,30 @@ ++dnl --------------------------------------------------------------------------- ++dnl Macro: MYSQL_CHECK_EXAMPLEDB ++dnl Sets HAVE_SPHINX_DB if --with-sphinx-storage-engine is used ++dnl --------------------------------------------------------------------------- ++AC_DEFUN([MYSQL_CHECK_SPHINXDB], [ ++ AC_ARG_WITH([sphinx-storage-engine], ++ [ ++ --with-sphinx-storage-engine ++ Enable the Sphinx Storage Engine], ++ [sphinxdb="$withval"], ++ [sphinxdb=no]) ++ AC_MSG_CHECKING([for example storage engine]) ++ ++ case "$sphinxdb" in ++ yes ) ++ AC_DEFINE([HAVE_SPHINX_DB], [1], [Builds Sphinx Engine]) ++ AC_MSG_RESULT([yes]) ++ [sphinxdb=yes] ++ ;; ++ * ) ++ AC_MSG_RESULT([no]) ++ [sphinxdb=no] ++ ;; ++ esac ++ ++]) ++dnl --------------------------------------------------------------------------- ++dnl END OF MYSQL_CHECK_EXAMPLE SECTION ++dnl --------------------------------------------------------------------------- ++ +--- mysql-5.0.67/configure.in 2008-08-04 23:19:07.000000000 +1100 ++++ mysql-5.0.67-sphinx/configure.in 2009-02-14 09:15:48.000000000 +1000 +@@ -58,6 +58,7 @@ + sinclude(config/ac-macros/ha_berkeley.m4) + sinclude(config/ac-macros/ha_blackhole.m4) + sinclude(config/ac-macros/ha_example.m4) ++sinclude(config/ac-macros/ha_sphinx.m4) + sinclude(config/ac-macros/ha_federated.m4) + sinclude(config/ac-macros/ha_innodb.m4) + sinclude(config/ac-macros/ha_ndbcluster.m4) +@@ -2625,6 +2626,7 @@ + MYSQL_CHECK_BDB + MYSQL_CHECK_INNODB + MYSQL_CHECK_EXAMPLEDB ++MYSQL_CHECK_SPHINXDB + MYSQL_CHECK_ARCHIVEDB + MYSQL_CHECK_CSVDB + MYSQL_CHECK_BLACKHOLEDB +--- mysql-5.0.67/libmysqld/Makefile.am 2008-08-04 23:19:18.000000000 +1100 ++++ mysql-5.0.67-sphinx/libmysqld/Makefile.am 2009-02-14 09:15:48.000000000 +1000 +@@ -29,6 +29,7 @@ + -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_builddir)/sql -I$(top_srcdir)/sql \ + -I$(top_srcdir)/sql/examples \ ++ -I$(top_srcdir)/sql/sphinx \ + -I$(top_srcdir)/regex \ + $(openssl_includes) @ZLIB_INCLUDES@ + +@@ -39,6 +40,7 @@ + libmysqlsources = errmsg.c get_password.c libmysql.c client.c pack.c \ + my_time.c + sqlexamplessources = ha_example.cc ha_tina.cc ++sqlsphinxsources = ha_sphinx.cc + + noinst_HEADERS = embedded_priv.h emb_qcache.h + +@@ -67,7 +69,7 @@ + parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \ + ha_blackhole.cc ha_archive.cc my_user.c + +-libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources) ++libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources) $(sqlsphinxsources) + libmysqld_a_SOURCES= + + # automake misses these +@@ -147,12 +149,16 @@ + rm -f $$f; \ + @LN_CP_F@ $(top_srcdir)/sql/examples/$$f $$f; \ + done; \ ++ for f in $(sqlsphinxsources); do \ ++ rm -f $$f; \ ++ @LN_CP_F@ $(top_srcdir)/sql/sphinx/$$f $$f; \ ++ done; \ + rm -f client_settings.h; \ + @LN_CP_F@ $(top_srcdir)/libmysql/client_settings.h client_settings.h + + + clean-local: +- rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlexamplessources) | sed "s;\.lo;.c;g"` \ ++ rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlexamplessources) $(sqlsphinxsources) | sed "s;\.lo;.c;g"` \ + $(top_srcdir)/linked_libmysqld_sources; \ + rm -f client_settings.h + +--- mysql-5.0.67/sql/handler.cc 2008-08-04 23:20:04.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/handler.cc 2009-02-14 09:15:48.000000000 +1000 +@@ -77,6 +77,15 @@ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + HTON_NO_FLAGS }; + #endif ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++extern handlerton sphinx_hton; ++#else ++handlerton sphinx_hton = { "SPHINX", SHOW_OPTION_NO, "SPHINX storage engine", ++ DB_TYPE_SPHINX_DB, NULL, 0, 0, NULL, NULL, ++ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ++ HTON_NO_FLAGS }; ++#endif + #ifdef HAVE_INNOBASE_DB + #include "ha_innodb.h" + extern handlerton innobase_hton; +@@ -141,6 +150,7 @@ + &example_hton, + &archive_hton, + &tina_hton, ++ &sphinx_hton, + &ndbcluster_hton, + &federated_hton, + &myisammrg_hton, +@@ -341,6 +351,12 @@ + return new (alloc) ha_tina(table); + return NULL; + #endif ++#ifdef HAVE_SPHINX_DB ++ case DB_TYPE_SPHINX_DB: ++ if (have_sphinx_db == SHOW_OPTION_YES) ++ return new (alloc) ha_sphinx(table); ++ return NULL; ++#endif + #ifdef HAVE_NDBCLUSTER_DB + case DB_TYPE_NDBCLUSTER: + if (have_ndbcluster == SHOW_OPTION_YES) +--- mysql-5.0.67/sql/handler.h 2008-08-04 23:20:04.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/handler.h 2009-02-14 09:15:48.000000000 +1000 +@@ -186,8 +186,9 @@ + DB_TYPE_BERKELEY_DB, DB_TYPE_INNODB, + DB_TYPE_GEMINI, DB_TYPE_NDBCLUSTER, + DB_TYPE_EXAMPLE_DB, DB_TYPE_ARCHIVE_DB, DB_TYPE_CSV_DB, +- DB_TYPE_FEDERATED_DB, ++ DB_TYPE_FEDERATED_DB, + DB_TYPE_BLACKHOLE_DB, ++ DB_TYPE_SPHINX_DB, + DB_TYPE_DEFAULT // Must be last + }; + +--- mysql-5.0.67/sql/Makefile.am 2008-08-04 23:20:02.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/Makefile.am 2009-02-14 09:23:28.000000000 +1000 +@@ -68,6 +68,7 @@ + sql_array.h sql_cursor.h \ + examples/ha_example.h ha_archive.h \ + examples/ha_tina.h ha_blackhole.h \ ++ sphinx/ha_sphinx.h \ + ha_federated.h + mysqld_SOURCES = sql_lex.cc sql_handler.cc \ + item.cc item_sum.cc item_buff.cc item_func.cc \ +@@ -105,6 +106,7 @@ + sp_cache.cc parse_file.cc sql_trigger.cc \ + examples/ha_example.cc ha_archive.cc \ + examples/ha_tina.cc ha_blackhole.cc \ ++ sphinx/ha_sphinx.cc \ + ha_federated.cc + + gen_lex_hash_SOURCES = gen_lex_hash.cc +@@ -174,6 +176,10 @@ + udf_example_la_SOURCES= udf_example.c + udf_example_la_LDFLAGS= -module -rpath $(pkglibdir) + ++pkglib_LTLIBRARIES = sphinx/sphinx.la ++sphinx_sphinx_la_SOURCES = sphinx/snippets_udf.cc ++sphinx_sphinx_la_LDFLAGS = -module ++ + + # Don't update the files from bitkeeper + %::SCCS/s.% +--- mysql-5.0.67/sql/mysqld.cc 2008-08-04 23:20:07.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/mysqld.cc 2009-02-14 09:15:48.000000000 +1000 +@@ -36,6 +36,10 @@ + #include + #endif + ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++#endif ++ + #ifdef HAVE_INNOBASE_DB + #define OPT_INNODB_DEFAULT 1 + #else +@@ -6633,6 +6637,13 @@ + {"Threads_running", (char*) &thread_running, SHOW_INT_CONST}, + {"Uptime", (char*) 0, SHOW_STARTTIME}, + {"Uptime_since_flush_status",(char*) 0, SHOW_FLUSHTIME}, ++#ifdef HAVE_SPHINX_DB ++ {"sphinx_total", (char *)sphinx_showfunc_total, SHOW_SPHINX_FUNC}, ++ {"sphinx_total_found", (char *)sphinx_showfunc_total_found, SHOW_SPHINX_FUNC}, ++ {"sphinx_time", (char *)sphinx_showfunc_time, SHOW_SPHINX_FUNC}, ++ {"sphinx_word_count", (char *)sphinx_showfunc_word_count, SHOW_SPHINX_FUNC}, ++ {"sphinx_words", (char *)sphinx_showfunc_words, SHOW_SPHINX_FUNC}, ++#endif + {NullS, NullS, SHOW_LONG} + }; + +@@ -6875,6 +6886,11 @@ + #else + have_csv_db= SHOW_OPTION_NO; + #endif ++#ifdef HAVE_SPHINX_DB ++ have_sphinx_db= SHOW_OPTION_YES; ++#else ++ have_sphinx_db= SHOW_OPTION_NO; ++#endif + #ifdef HAVE_NDBCLUSTER_DB + have_ndbcluster=SHOW_OPTION_DISABLED; + #else +@@ -7983,6 +7999,7 @@ + #undef have_example_db + #undef have_archive_db + #undef have_csv_db ++#undef have_sphinx_db + #undef have_federated_db + #undef have_partition_db + #undef have_blackhole_db +@@ -7993,6 +8010,7 @@ + SHOW_COMP_OPTION have_example_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_archive_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_csv_db= SHOW_OPTION_NO; ++SHOW_COMP_OPTION have_sphinx_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_federated_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_partition_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_blackhole_db= SHOW_OPTION_NO; +--- mysql-5.0.67/sql/mysql_priv.h 2008-08-04 23:20:07.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/mysql_priv.h 2009-02-14 09:15:48.000000000 +1000 +@@ -1439,6 +1439,12 @@ + #else + extern SHOW_COMP_OPTION have_csv_db; + #endif ++#ifdef HAVE_SPHINX_DB ++extern handlerton sphinx_hton; ++#define have_sphinx_db sphinx_hton.state ++#else ++extern SHOW_COMP_OPTION have_sphinx_db; ++#endif + #ifdef HAVE_FEDERATED_DB + extern handlerton federated_hton; + #define have_federated_db federated_hton.state +--- mysql-5.0.67/sql/set_var.cc 2008-08-04 23:20:08.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/set_var.cc 2009-02-14 09:15:48.000000000 +1000 +@@ -888,6 +888,7 @@ + {"have_compress", (char*) &have_compress, SHOW_HAVE}, + {"have_crypt", (char*) &have_crypt, SHOW_HAVE}, + {"have_csv", (char*) &have_csv_db, SHOW_HAVE}, ++ {"have_sphinx", (char*) &have_sphinx_db, SHOW_HAVE}, + {"have_dynamic_loading", (char*) &have_dlopen, SHOW_HAVE}, + {"have_example_engine", (char*) &have_example_db, SHOW_HAVE}, + {"have_federated_engine", (char*) &have_federated_db, SHOW_HAVE}, +--- mysql-5.0.67/sql/sql_lex.h 2008-08-04 23:20:10.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/sql_lex.h 2009-02-14 09:15:48.000000000 +1000 +@@ -57,6 +57,7 @@ + SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS, + SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_LOGS, SQLCOM_SHOW_STATUS, + SQLCOM_SHOW_INNODB_STATUS, SQLCOM_SHOW_NDBCLUSTER_STATUS, SQLCOM_SHOW_MUTEX_STATUS, ++ SQLCOM_SHOW_SPHINX_STATUS, + SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, + SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS, + SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB, SQLCOM_SHOW_TABLE_STATUS, +--- mysql-5.0.67/sql/sql_parse.cc 2008-08-04 23:20:10.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/sql_parse.cc 2009-02-14 09:15:48.000000000 +1000 +@@ -24,6 +24,9 @@ + #ifdef HAVE_INNOBASE_DB + #include "ha_innodb.h" + #endif ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++#endif + + #ifdef HAVE_NDBCLUSTER_DB + #include "ha_ndbcluster.h" +@@ -3006,6 +3009,15 @@ + break; + } + #endif ++#ifdef HAVE_SPHINX_DB ++ case SQLCOM_SHOW_SPHINX_STATUS: ++ { ++ if (check_global_access(thd, SUPER_ACL)) ++ goto error; ++ res = sphinx_show_status(thd); ++ break; ++ } ++#endif + #ifdef HAVE_REPLICATION + case SQLCOM_LOAD_MASTER_TABLE: + { +--- mysql-5.0.67/sql/sql_yacc.yy 2008-08-04 23:20:12.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/sql_yacc.yy 2009-02-14 09:15:48.000000000 +1000 +@@ -7393,6 +7393,9 @@ + case DB_TYPE_INNODB: + Lex->sql_command = SQLCOM_SHOW_INNODB_STATUS; + break; ++ case DB_TYPE_SPHINX_DB: ++ Lex->sql_command = SQLCOM_SHOW_SPHINX_STATUS; ++ break; + default: + my_error(ER_NOT_SUPPORTED_YET, MYF(0), "STATUS"); + MYSQL_YYABORT; +--- mysql-5.0.67/sql/structs.h 2008-08-04 23:20:12.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/structs.h 2009-02-14 09:15:48.000000000 +1000 +@@ -188,6 +188,9 @@ + SHOW_SSL_CTX_SESS_TIMEOUTS, SHOW_SSL_CTX_SESS_CACHE_FULL, + SHOW_SSL_GET_CIPHER_LIST, + #endif /* HAVE_OPENSSL */ ++#ifdef HAVE_SPHINX_DB ++ SHOW_SPHINX_FUNC, ++#endif + SHOW_NET_COMPRESSION, + SHOW_RPL_STATUS, SHOW_SLAVE_RUNNING, SHOW_SLAVE_RETRIED_TRANS, + SHOW_KEY_CACHE_LONG, SHOW_KEY_CACHE_CONST_LONG, SHOW_KEY_CACHE_LONGLONG, +--- mysql-5.0.67/sql/sql_show.cc 2008-08-04 23:20:11.000000000 +1100 ++++ mysql-5.0.67-sphinx/sql/sql_show.cc 2009-02-14 09:15:48.000000000 +1000 +@@ -1473,6 +1473,16 @@ + value= (char*) ((sys_var*) value)->value_ptr(thd, value_type, + &null_lex_str); + } ++ #ifdef HAVE_SPHINX_DB ++ else if (show_type == SHOW_SPHINX_FUNC) ++ { ++ SHOW_VAR var; ++ ((int (*)(THD *, SHOW_VAR *, char *))value)(thd, &var, buff); ++ ++ value = var.value; ++ show_type = var.type; ++ } ++ #endif /* HAVE_SPHINX_DB */ + + pos= end= buff; + switch (show_type) { diff --git a/coreseek/csft-4.1/mysqlse/sphinx.5.0.91.diff b/coreseek/csft-4.1/mysqlse/sphinx.5.0.91.diff new file mode 100755 index 0000000..92ee9f7 --- /dev/null +++ b/coreseek/csft-4.1/mysqlse/sphinx.5.0.91.diff @@ -0,0 +1,400 @@ +diff -r 319c65835581 CMakeLists.txt +--- a/CMakeLists.txt Sun Jun 20 15:15:01 2010 +0400 ++++ b/CMakeLists.txt Sun Jun 20 15:59:31 2010 +0400 +@@ -70,6 +70,10 @@ + ADD_DEFINITIONS(-DHAVE_INNOBASE_DB) + ENDIF(WITH_INNOBASE_STORAGE_ENGINE) + ++IF(WITH_SPHINX_STORAGE_ENGINE) ++ ADD_DEFINITIONS(-DHAVE_SPHINX_DB) ++ENDIF(WITH_SPHINX_STORAGE_ENGINE) ++ + SET(localstatedir "C:\\mysql\\data") + CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/support-files/my-huge.cnf.sh + ${CMAKE_SOURCE_DIR}/support-files/my-huge.ini @ONLY) +diff -r 319c65835581 configure.in +--- a/configure.in Sun Jun 20 15:15:01 2010 +0400 ++++ b/configure.in Sun Jun 20 15:59:31 2010 +0400 +@@ -60,6 +60,7 @@ + sinclude(config/ac-macros/ha_berkeley.m4) + sinclude(config/ac-macros/ha_blackhole.m4) + sinclude(config/ac-macros/ha_example.m4) ++sinclude(config/ac-macros/ha_sphinx.m4) + sinclude(config/ac-macros/ha_federated.m4) + sinclude(config/ac-macros/ha_innodb.m4) + sinclude(config/ac-macros/ha_ndbcluster.m4) +@@ -2696,6 +2697,7 @@ + MYSQL_CHECK_BDB + MYSQL_CHECK_INNODB + MYSQL_CHECK_EXAMPLEDB ++MYSQL_CHECK_SPHINXDB + MYSQL_CHECK_ARCHIVEDB + MYSQL_CHECK_CSVDB + MYSQL_CHECK_BLACKHOLEDB +diff -r 319c65835581 libmysqld/Makefile.am +--- a/libmysqld/Makefile.am Sun Jun 20 15:15:01 2010 +0400 ++++ b/libmysqld/Makefile.am Sun Jun 20 15:59:31 2010 +0400 +@@ -29,6 +29,7 @@ + -I$(top_builddir)/include -I$(top_srcdir)/include \ + -I$(top_builddir)/sql -I$(top_srcdir)/sql \ + -I$(top_srcdir)/sql/examples \ ++ -I$(top_srcdir)/sql/sphinx \ + -I$(top_srcdir)/regex \ + $(openssl_includes) @ZLIB_INCLUDES@ + +@@ -39,6 +40,7 @@ + libmysqlsources = errmsg.c get_password.c libmysql.c client.c pack.c \ + my_time.c + sqlexamplessources = ha_example.cc ha_tina.cc ++sqlsphinxsources = ha_sphinx.cc + + noinst_HEADERS = embedded_priv.h emb_qcache.h + +@@ -67,7 +69,7 @@ + parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \ + ha_blackhole.cc ha_archive.cc my_user.c + +-libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources) ++libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources) $(sqlsphinxsources) + libmysqld_a_SOURCES= + + # automake misses these +@@ -147,12 +149,16 @@ + rm -f $$f; \ + @LN_CP_F@ $(top_srcdir)/sql/examples/$$f $$f; \ + done; \ ++ for f in $(sqlsphinxsources); do \ ++ rm -f $$f; \ ++ @LN_CP_F@ $(top_srcdir)/sql/sphinx/$$f $$f; \ ++ done; \ + rm -f client_settings.h; \ + @LN_CP_F@ $(top_srcdir)/libmysql/client_settings.h client_settings.h + + + clean-local: +- rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlexamplessources) | sed "s;\.lo;.c;g"` \ ++ rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlexamplessources) $(sqlsphinxsources) | sed "s;\.lo;.c;g"` \ + $(top_srcdir)/linked_libmysqld_sources; \ + rm -f client_settings.h + +diff -r 319c65835581 sql/CMakeLists.txt +--- a/sql/CMakeLists.txt Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/CMakeLists.txt Sun Jun 20 15:59:31 2010 +0400 +@@ -50,6 +50,7 @@ + filesort.cc gstream.cc ha_blackhole.cc + ha_archive.cc ha_heap.cc ha_myisam.cc ha_myisammrg.cc + ha_innodb.cc ha_federated.cc ha_berkeley.cc ++ sphinx/ha_sphinx.cc + handler.cc hash_filo.cc hash_filo.h + hostname.cc init.cc item.cc item_buff.cc item_cmpfunc.cc + item_create.cc item_func.cc item_geofunc.cc item_row.cc +diff -r 319c65835581 sql/Makefile.am +--- a/sql/Makefile.am Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/Makefile.am Sun Jun 20 15:59:31 2010 +0400 +@@ -68,6 +68,7 @@ + sql_array.h sql_cursor.h \ + examples/ha_example.h ha_archive.h \ + examples/ha_tina.h ha_blackhole.h \ ++ sphinx/ha_sphinx.h \ + ha_federated.h + mysqld_SOURCES = sql_lex.cc sql_handler.cc \ + item.cc item_sum.cc item_buff.cc item_func.cc \ +@@ -105,6 +106,7 @@ + sp_cache.cc parse_file.cc sql_trigger.cc \ + examples/ha_example.cc ha_archive.cc \ + examples/ha_tina.cc ha_blackhole.cc \ ++ sphinx/ha_sphinx.cc \ + ha_federated.cc + + gen_lex_hash_SOURCES = gen_lex_hash.cc +@@ -175,6 +177,10 @@ + udf_example_la_SOURCES= udf_example.c + udf_example_la_LDFLAGS= -module -rpath $(pkglibdir) + ++pkglib_LTLIBRARIES = sphinx/sphinx.la ++sphinx_sphinx_la_SOURCES = sphinx/snippets_udf.cc ++sphinx_sphinx_la_LDFLAGS = -module ++ + + # Don't update the files from bitkeeper + %::SCCS/s.% +diff -r 319c65835581 sql/handler.cc +--- a/sql/handler.cc Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/handler.cc Sun Jun 20 15:59:31 2010 +0400 +@@ -77,6 +77,15 @@ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + HTON_NO_FLAGS }; + #endif ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++extern handlerton sphinx_hton; ++#else ++handlerton sphinx_hton = { "SPHINX", SHOW_OPTION_NO, "SPHINX storage engine", ++ DB_TYPE_SPHINX_DB, NULL, 0, 0, NULL, NULL, ++ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ++ HTON_NO_FLAGS }; ++#endif + #ifdef HAVE_INNOBASE_DB + #include "ha_innodb.h" + extern handlerton innobase_hton; +@@ -141,6 +150,7 @@ + &example_hton, + &archive_hton, + &tina_hton, ++ &sphinx_hton, + &ndbcluster_hton, + &federated_hton, + &myisammrg_hton, +@@ -342,6 +352,12 @@ + return new (alloc) ha_tina(table); + return NULL; + #endif ++#ifdef HAVE_SPHINX_DB ++ case DB_TYPE_SPHINX_DB: ++ if (have_sphinx_db == SHOW_OPTION_YES) ++ return new (alloc) ha_sphinx(table); ++ return NULL; ++#endif + #ifdef HAVE_NDBCLUSTER_DB + case DB_TYPE_NDBCLUSTER: + if (have_ndbcluster == SHOW_OPTION_YES) +diff -r 319c65835581 sql/handler.h +--- a/sql/handler.h Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/handler.h Sun Jun 20 15:59:31 2010 +0400 +@@ -186,8 +186,9 @@ + DB_TYPE_BERKELEY_DB, DB_TYPE_INNODB, + DB_TYPE_GEMINI, DB_TYPE_NDBCLUSTER, + DB_TYPE_EXAMPLE_DB, DB_TYPE_ARCHIVE_DB, DB_TYPE_CSV_DB, +- DB_TYPE_FEDERATED_DB, ++ DB_TYPE_FEDERATED_DB, + DB_TYPE_BLACKHOLE_DB, ++ DB_TYPE_SPHINX_DB, + DB_TYPE_DEFAULT // Must be last + }; + +diff -r 319c65835581 sql/mysql_priv.h +--- a/sql/mysql_priv.h Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/mysql_priv.h Sun Jun 20 15:59:31 2010 +0400 +@@ -1462,6 +1462,12 @@ + #else + extern SHOW_COMP_OPTION have_csv_db; + #endif ++#ifdef HAVE_SPHINX_DB ++extern handlerton sphinx_hton; ++#define have_sphinx_db sphinx_hton.state ++#else ++extern SHOW_COMP_OPTION have_sphinx_db; ++#endif + #ifdef HAVE_FEDERATED_DB + extern handlerton federated_hton; + #define have_federated_db federated_hton.state +diff -r 319c65835581 sql/mysqld.cc +--- a/sql/mysqld.cc Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/mysqld.cc Sun Jun 20 15:59:31 2010 +0400 +@@ -36,6 +36,10 @@ + #include + #endif + ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++#endif ++ + #ifdef HAVE_INNOBASE_DB + #define OPT_INNODB_DEFAULT 1 + #else +@@ -6721,6 +6725,13 @@ + #ifdef COMMUNITY_SERVER + {"Uptime_since_flush_status",(char*) 0, SHOW_FLUSHTIME}, + #endif ++#ifdef HAVE_SPHINX_DB ++ {"sphinx_total", (char *)sphinx_showfunc_total, SHOW_SPHINX_FUNC}, ++ {"sphinx_total_found", (char *)sphinx_showfunc_total_found, SHOW_SPHINX_FUNC}, ++ {"sphinx_time", (char *)sphinx_showfunc_time, SHOW_SPHINX_FUNC}, ++ {"sphinx_word_count", (char *)sphinx_showfunc_word_count, SHOW_SPHINX_FUNC}, ++ {"sphinx_words", (char *)sphinx_showfunc_words, SHOW_SPHINX_FUNC}, ++#endif + {NullS, NullS, SHOW_LONG} + }; + +@@ -6964,6 +6975,11 @@ + #else + have_csv_db= SHOW_OPTION_NO; + #endif ++#ifdef HAVE_SPHINX_DB ++ have_sphinx_db= SHOW_OPTION_YES; ++#else ++ have_sphinx_db= SHOW_OPTION_NO; ++#endif + #ifdef HAVE_NDBCLUSTER_DB + have_ndbcluster=SHOW_OPTION_DISABLED; + #else +@@ -8087,6 +8103,7 @@ + #undef have_example_db + #undef have_archive_db + #undef have_csv_db ++#undef have_sphinx_db + #undef have_federated_db + #undef have_partition_db + #undef have_blackhole_db +@@ -8097,6 +8114,7 @@ + SHOW_COMP_OPTION have_example_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_archive_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_csv_db= SHOW_OPTION_NO; ++SHOW_COMP_OPTION have_sphinx_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_federated_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_partition_db= SHOW_OPTION_NO; + SHOW_COMP_OPTION have_blackhole_db= SHOW_OPTION_NO; +diff -r 319c65835581 sql/set_var.cc +--- a/sql/set_var.cc Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/set_var.cc Sun Jun 20 15:59:31 2010 +0400 +@@ -913,6 +913,7 @@ + {"have_profiling", (char*) &have_profiling, SHOW_HAVE}, + {"have_crypt", (char*) &have_crypt, SHOW_HAVE}, + {"have_csv", (char*) &have_csv_db, SHOW_HAVE}, ++ {"have_sphinx", (char*) &have_sphinx_db, SHOW_HAVE}, + {"have_dynamic_loading", (char*) &have_dlopen, SHOW_HAVE}, + {"have_example_engine", (char*) &have_example_db, SHOW_HAVE}, + {"have_federated_engine", (char*) &have_federated_db, SHOW_HAVE}, +diff -r 319c65835581 sql/sql_lex.h +--- a/sql/sql_lex.h Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/sql_lex.h Sun Jun 20 15:59:31 2010 +0400 +@@ -57,6 +57,7 @@ + SQLCOM_SHOW_DATABASES, SQLCOM_SHOW_TABLES, SQLCOM_SHOW_FIELDS, + SQLCOM_SHOW_KEYS, SQLCOM_SHOW_VARIABLES, SQLCOM_SHOW_LOGS, SQLCOM_SHOW_STATUS, + SQLCOM_SHOW_INNODB_STATUS, SQLCOM_SHOW_NDBCLUSTER_STATUS, SQLCOM_SHOW_MUTEX_STATUS, ++ SQLCOM_SHOW_SPHINX_STATUS, + SQLCOM_SHOW_PROCESSLIST, SQLCOM_SHOW_MASTER_STAT, SQLCOM_SHOW_SLAVE_STAT, + SQLCOM_SHOW_GRANTS, SQLCOM_SHOW_CREATE, SQLCOM_SHOW_CHARSETS, + SQLCOM_SHOW_COLLATIONS, SQLCOM_SHOW_CREATE_DB, SQLCOM_SHOW_TABLE_STATUS, +diff -r 319c65835581 sql/sql_parse.cc +--- a/sql/sql_parse.cc Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/sql_parse.cc Sun Jun 20 15:59:31 2010 +0400 +@@ -24,6 +24,9 @@ + #ifdef HAVE_INNOBASE_DB + #include "ha_innodb.h" + #endif ++#ifdef HAVE_SPHINX_DB ++#include "sphinx/ha_sphinx.h" ++#endif + + #ifdef HAVE_NDBCLUSTER_DB + #include "ha_ndbcluster.h" +@@ -3166,6 +3169,15 @@ + break; + } + #endif ++#ifdef HAVE_SPHINX_DB ++ case SQLCOM_SHOW_SPHINX_STATUS: ++ { ++ if (check_global_access(thd, SUPER_ACL)) ++ goto error; ++ res = sphinx_show_status(thd); ++ break; ++ } ++#endif + #ifdef HAVE_REPLICATION + case SQLCOM_LOAD_MASTER_TABLE: + { +diff -r 319c65835581 sql/sql_show.cc +--- a/sql/sql_show.cc Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/sql_show.cc Sun Jun 20 15:59:31 2010 +0400 +@@ -1500,6 +1500,16 @@ + value= (char*) var->value_ptr(thd, value_type, &null_lex_str); + charset= var->charset(thd); + } ++ #ifdef HAVE_SPHINX_DB ++ else if (show_type == SHOW_SPHINX_FUNC) ++ { ++ SHOW_VAR var; ++ ((int (*)(THD *, SHOW_VAR *, char *))value)(thd, &var, buff); ++ ++ value = var.value; ++ show_type = var.type; ++ } ++ #endif /* HAVE_SPHINX_DB */ + + pos= end= buff; + switch (show_type) { +diff -r 319c65835581 sql/sql_yacc.yy +--- a/sql/sql_yacc.yy Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/sql_yacc.yy Sun Jun 20 15:59:31 2010 +0400 +@@ -8342,6 +8342,9 @@ + case DB_TYPE_INNODB: + Lex->sql_command = SQLCOM_SHOW_INNODB_STATUS; + break; ++ case DB_TYPE_SPHINX_DB: ++ Lex->sql_command = SQLCOM_SHOW_SPHINX_STATUS; ++ break; + default: + my_error(ER_NOT_SUPPORTED_YET, MYF(0), "STATUS"); + MYSQL_YYABORT; +diff -r 319c65835581 sql/sql_yacc.cc +--- a/sql/sql_yacc.cc Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/sql_yacc.cc Sun Jun 20 15:59:31 2010 +0400 +@@ -27003,6 +27003,9 @@ + case DB_TYPE_INNODB: + Lex->sql_command = SQLCOM_SHOW_INNODB_STATUS; + break; ++ case DB_TYPE_SPHINX_DB: ++ Lex->sql_command = SQLCOM_SHOW_SPHINX_STATUS; ++ break; + default: + my_error(ER_NOT_SUPPORTED_YET, MYF(0), "STATUS"); + MYSQL_YYABORT; +diff -r 319c65835581 sql/structs.h +--- a/sql/structs.h Sun Jun 20 15:15:01 2010 +0400 ++++ b/sql/structs.h Sun Jun 20 15:59:31 2010 +0400 +@@ -194,6 +194,9 @@ + SHOW_SSL_CTX_SESS_TIMEOUTS, SHOW_SSL_CTX_SESS_CACHE_FULL, + SHOW_SSL_GET_CIPHER_LIST, + #endif /* HAVE_OPENSSL */ ++#ifdef HAVE_SPHINX_DB ++ SHOW_SPHINX_FUNC, ++#endif + SHOW_NET_COMPRESSION, + SHOW_RPL_STATUS, SHOW_SLAVE_RUNNING, SHOW_SLAVE_RETRIED_TRANS, + SHOW_KEY_CACHE_LONG, SHOW_KEY_CACHE_CONST_LONG, SHOW_KEY_CACHE_LONGLONG, +diff -r 319c65835581 win/configure.js +--- a/win/configure.js Sun Jun 20 15:15:01 2010 +0400 ++++ b/win/configure.js Sun Jun 20 15:59:31 2010 +0400 +@@ -45,6 +45,7 @@ + case "WITH_EXAMPLE_STORAGE_ENGINE": + case "WITH_FEDERATED_STORAGE_ENGINE": + case "WITH_INNOBASE_STORAGE_ENGINE": ++ case "WITH_SPHINX_STORAGE_ENGINE": + case "__NT__": + case "DISABLE_GRANT_OPTIONS": + case "EMBED_MANIFESTS": +--- mysql-5.0.67/config/ac-macros/ha_sphinx.m4 1970-01-01 10:00:00.000000000 +1000 ++++ mysql-5.0.67-sphinx/config/ac-macros/ha_sphinx.m4 2009-02-14 09:15:48.000000000 +1000 +@@ -0,0 +1,30 @@ ++dnl --------------------------------------------------------------------------- ++dnl Macro: MYSQL_CHECK_EXAMPLEDB ++dnl Sets HAVE_SPHINX_DB if --with-sphinx-storage-engine is used ++dnl --------------------------------------------------------------------------- ++AC_DEFUN([MYSQL_CHECK_SPHINXDB], [ ++ AC_ARG_WITH([sphinx-storage-engine], ++ [ ++ --with-sphinx-storage-engine ++ Enable the Sphinx Storage Engine], ++ [sphinxdb="$withval"], ++ [sphinxdb=no]) ++ AC_MSG_CHECKING([for example storage engine]) ++ ++ case "$sphinxdb" in ++ yes ) ++ AC_DEFINE([HAVE_SPHINX_DB], [1], [Builds Sphinx Engine]) ++ AC_MSG_RESULT([yes]) ++ [sphinxdb=yes] ++ ;; ++ * ) ++ AC_MSG_RESULT([no]) ++ [sphinxdb=no] ++ ;; ++ esac ++ ++]) ++dnl --------------------------------------------------------------------------- ++dnl END OF MYSQL_CHECK_EXAMPLE SECTION ++dnl --------------------------------------------------------------------------- ++ diff --git a/coreseek/csft-4.1/python.m4 b/coreseek/csft-4.1/python.m4 new file mode 100755 index 0000000..4503ebc --- /dev/null +++ b/coreseek/csft-4.1/python.m4 @@ -0,0 +1,61 @@ +dnl prog-ensure.m4 -- Require that a program be found in the PATH. +dnl $Id: prog-ensure.m4 6544 2003-12-26 03:23:31Z rra $ +dnl +dnl This is a version of AC_PATH_PROG that requires that the program being +dnl searched for is found in the user's PATH. + +AC_DEFUN([INN_PATH_PROG_ENSURE], +[AC_PATH_PROG([$1], [$2]) +if test x"${$1}" = x ; then + AC_MSG_ERROR([$2 was not found in path and is required]) +fi]) + + +dnl python.m4 -- Probe for the details needed to embed Python. +dnl $Id: python.m4 6544 2003-12-26 03:23:31Z rra $ +dnl +dnl Defines INN_ARG_PYTHON, which sets up the --with-python command line +dnl argument and also sets various flags needed for embedded Python if it is +dnl requested. + +AC_DEFUN([INN_ARG_PYTHON], +[AC_ARG_VAR([PYTHON], [Location of Python interpretor]) +AC_ARG_WITH([python], + [AC_HELP_STRING([--with-python], [Embedded Python datasource support [no]])], + [case $withval in + yes) USE_PYTHON=DO + AC_DEFINE(USE_PYTHON, 1, + [Define to compile in Python datasource support.]) + ;; + no) USE_PYTHON=DONT ;; + *) AC_MSG_ERROR([invalid argument to --with-python]) ;; + esac], + USE_PYTHON=DONT) + +dnl A better way of doing this rather than grepping through the Makefile would +dnl be to use distutils.sysconfig, but this module isn't available in older +dnl versions of Python. +if test x"$USE_PYTHON" = xDO ; then + INN_PATH_PROG_ENSURE([PYTHON], [python]) + AC_MSG_CHECKING([for Python linkage]) + py_prefix=`$PYTHON -c 'import sys; print sys.prefix'` + py_ver=`$PYTHON -c 'import sys; print sys.version[[:3]]'` + py_libdir="$py_prefix/lib/python$py_ver" + PYTHON_CPPFLAGS="-I$py_prefix/include/python$py_ver" + py_linkage="" + for py_linkpart in LIBS LIBC LIBM LOCALMODLIBS BASEMODLIBS \ + LINKFORSHARED LDFLAGS ; do + py_linkage="$py_linkage "`grep "^${py_linkpart}=" \ + $py_libdir/config/Makefile \ + | sed -e 's/^.*=//'` + done + dnl PYTHON_LIBS="-L$py_libdir/config -lpython$py_ver $py_linkage" + PYTHON_LIBS="-L$py_libdir/config -lpython$py_ver " + PYTHON_LIBS=`echo $PYTHON_LIBS | sed -e 's/[ \\t]*/ /g'` + AC_MSG_RESULT([$py_libdir]) +else + PYTHON_CPPFLAGS= + PYTHON_LIBS= +fi +AC_SUBST([PYTHON_CPPFLAGS]) +AC_SUBST([PYTHON_LIBS])]) diff --git a/coreseek/csft-4.1/smoke.sh b/coreseek/csft-4.1/smoke.sh new file mode 100755 index 0000000..0bc78c1 --- /dev/null +++ b/coreseek/csft-4.1/smoke.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +jobs=$(grep -c processor /proc/cpuinfo) +FAILLOG="/tmp/faillog" +LINE="-------------------------------\n" +if [ q"1" = q"$jobs" ] ; then + jobs="" +else + jobs="-j$jobs" +fi + +die() +{ + cat $FAILLOG + echo $LINE + [ ! "z$2" = "z" ] && { eval $2; echo "$LINE"; } + echo "$1" + [ -e "$FAILLOG" ] && rm $FAILLOG + exit 1 +} + + +cmd1 () +{ + echo "Executing: $2\n">$FAILLOG + eval $2 1>>$1 2>&1 || die "$3" "$4" +} + +cmd () +{ + cmd1 "$FAILLOG" "$1" "$2" "$3" +} + +cmd "mysql -u root test < example.sql" "Documents setup failed" + +for CONFARGS in "--with-debug" "--with-debug --enable-id64"; +do + BANNER="testing $CONFARGS build" + cmd "./configure $CONFARGS" "$BANNER: configure failed" + cmd "make clean" "$BANNER: make clean failed" + cmd "make $jobs" "$BANNER: make failed" + + cmd1 "/dev/null" "cd ./test; php ubertest.php t -u test --strict-verbose --no-demo" "$BANNER: regression suite failed" "cat report.txt; rm report.txt" + cd .. + + cmd "cd ./src; ./tests" "$BANNER: unit tests failed" + cd .. + + cmd "cd ./api/libsphinxclient; ./smoke_test.sh" "$BANNER: C API tests failed" + cd ../../ +done + +make clean 1>/dev/null 2>&1 +[ -e "$FAILLOG" ] && rm "$FAILLOG" + +echo "all ok\n" +exit 0 diff --git a/coreseek/csft-4.1/sphinx-min.conf.dist b/coreseek/csft-4.1/sphinx-min.conf.dist new file mode 100644 index 0000000..eb4385d --- /dev/null +++ b/coreseek/csft-4.1/sphinx-min.conf.dist @@ -0,0 +1,69 @@ +# +# Minimal Sphinx configuration sample (clean, simple, functional) +# + +source src1 +{ + type = mysql + + sql_host = localhost + sql_user = test + sql_pass = + sql_db = test + sql_port = 3306 # optional, default is 3306 + + sql_query = \ + SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \ + FROM documents + + sql_attr_uint = group_id + sql_attr_timestamp = date_added + + sql_query_info = SELECT * FROM documents WHERE id=$id +} + + +index test1 +{ + source = src1 + path = /usr/local/coreseek/var/data/test1 + docinfo = extern + charset_type = sbcs +} + + +index testrt +{ + type = rt + rt_mem_limit = 32M + + path = /usr/local/coreseek/var/data/testrt + charset_type = utf-8 + + rt_field = title + rt_field = content + rt_attr_uint = gid +} + + +indexer +{ + mem_limit = 32M +} + + +searchd +{ + listen = 9312 + listen = 9306:mysql41 + log = /usr/local/coreseek/var/log/searchd.log + query_log = /usr/local/coreseek/var/log/query.log + read_timeout = 5 + max_children = 30 + pid_file = /usr/local/coreseek/var/log/searchd.pid + max_matches = 1000 + seamless_rotate = 1 + preopen_indexes = 1 + unlink_old = 1 + workers = threads # for RT to work +} diff --git a/coreseek/csft-4.1/sphinx-min.conf.in b/coreseek/csft-4.1/sphinx-min.conf.in new file mode 100755 index 0000000..e7b75d2 --- /dev/null +++ b/coreseek/csft-4.1/sphinx-min.conf.in @@ -0,0 +1,69 @@ +# +# Minimal Sphinx configuration sample (clean, simple, functional) +# + +source src1 +{ + type = mysql + + sql_host = localhost + sql_user = test + sql_pass = + sql_db = test + sql_port = 3306 # optional, default is 3306 + + sql_query = \ + SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \ + FROM documents + + sql_attr_uint = group_id + sql_attr_timestamp = date_added + + sql_query_info = SELECT * FROM documents WHERE id=$id +} + + +index test1 +{ + source = src1 + path = @CONFDIR@/data/test1 + docinfo = extern + charset_type = sbcs +} + + +index testrt +{ + type = rt + rt_mem_limit = 32M + + path = @CONFDIR@/data/testrt + charset_type = utf-8 + + rt_field = title + rt_field = content + rt_attr_uint = gid +} + + +indexer +{ + mem_limit = 32M +} + + +searchd +{ + listen = 9312 + listen = 9306:mysql41 + log = @CONFDIR@/log/searchd.log + query_log = @CONFDIR@/log/query.log + read_timeout = 5 + max_children = 30 + pid_file = @CONFDIR@/log/searchd.pid + max_matches = 1000 + seamless_rotate = 1 + preopen_indexes = 1 + unlink_old = 1 + workers = threads # for RT to work +} diff --git a/coreseek/csft-4.1/sphinx.conf.dist b/coreseek/csft-4.1/sphinx.conf.dist new file mode 100644 index 0000000..8057769 --- /dev/null +++ b/coreseek/csft-4.1/sphinx.conf.dist @@ -0,0 +1,933 @@ +# +# Sphinx configuration file sample +# +# WARNING! While this sample file mentions all available options, +# it contains (very) short helper descriptions only. Please refer to +# doc/sphinx.html for details. +# + +############################################################################# +## data source definition +############################################################################# + +source src1 +{ + # data source type. mandatory, no default value + # known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc + type = mysql + + ##################################################################### + ## SQL settings (for 'mysql' and 'pgsql' types) + ##################################################################### + + # some straightforward parameters for SQL source types + sql_host = localhost + sql_user = test + sql_pass = + sql_db = test + sql_port = 3306 # optional, default is 3306 + + # UNIX socket name + # optional, default is empty (reuse client library defaults) + # usually '/var/lib/mysql/mysql.sock' on Linux + # usually '/tmp/mysql.sock' on FreeBSD + # + # sql_sock = /tmp/mysql.sock + + + # MySQL specific client connection flags + # optional, default is 0 + # + # mysql_connect_flags = 32 # enable compression + + # MySQL specific SSL certificate settings + # optional, defaults are empty + # + # mysql_ssl_cert = /etc/ssl/client-cert.pem + # mysql_ssl_key = /etc/ssl/client-key.pem + # mysql_ssl_ca = /etc/ssl/cacert.pem + + # MS SQL specific Windows authentication mode flag + # MUST be in sync with charset_type index-level setting + # optional, default is 0 + # + # mssql_winauth = 1 # use currently logged on user credentials + + + # MS SQL specific Unicode indexing flag + # optional, default is 0 (request SBCS data) + # + # mssql_unicode = 1 # request Unicode data from server + + + # ODBC specific DSN (data source name) + # mandatory for odbc source type, no default value + # + # odbc_dsn = DBQ=C:\data;DefaultDir=C:\data;Driver={Microsoft Text Driver (*.txt; *.csv)}; + # sql_query = SELECT id, data FROM documents.csv + + + # ODBC and MS SQL specific, per-column buffer sizes + # optional, default is auto-detect + # + # sql_column_buffers = content=12M, comments=1M + + + # pre-query, executed before the main fetch query + # multi-value, optional, default is empty list of queries + # + # sql_query_pre = SET NAMES utf8 + # sql_query_pre = SET SESSION query_cache_type=OFF + + + # main document fetch query + # mandatory, integer document ID field MUST be the first selected column + sql_query = \ + SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \ + FROM documents + + + # joined/payload field fetch query + # joined fields let you avoid (slow) JOIN and GROUP_CONCAT + # payload fields let you attach custom per-keyword values (eg. for ranking) + # + # syntax is FIELD-NAME 'from' ( 'query' | 'payload-query' ); QUERY + # joined field QUERY should return 2 columns (docid, text) + # payload field QUERY should return 3 columns (docid, keyword, weight) + # + # REQUIRES that query results are in ascending document ID order! + # multi-value, optional, default is empty list of queries + # + # sql_joined_field = tags from query; SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC + # sql_joined_field = wtags from payload-query; SELECT docid, tag, tagweight FROM tags ORDER BY docid ASC + + + # file based field declaration + # + # content of this field is treated as a file name + # and the file gets loaded and indexed in place of a field + # + # max file size is limited by max_file_field_buffer indexer setting + # file IO errors are non-fatal and get reported as warnings + # + # sql_file_field = content_file_path + + + # range query setup, query that must return min and max ID values + # optional, default is empty + # + # sql_query will need to reference $start and $end boundaries + # if using ranged query: + # + # sql_query = \ + # SELECT doc.id, doc.id AS group, doc.title, doc.data \ + # FROM documents doc \ + # WHERE id>=$start AND id<=$end + # + # sql_query_range = SELECT MIN(id),MAX(id) FROM documents + + + # range query step + # optional, default is 1024 + # + # sql_range_step = 1000 + + + # unsigned integer attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # optional bit size can be specified, default is 32 + # + # sql_attr_uint = author_id + # sql_attr_uint = forum_id:9 # 9 bits for forum_id + sql_attr_uint = group_id + + # boolean attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # equivalent to sql_attr_uint with 1-bit size + # + # sql_attr_bool = is_deleted + + + # bigint attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # declares a signed (unlike uint!) 64-bit attribute + # + # sql_attr_bigint = my_bigint_id + + + # UNIX timestamp attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # similar to integer, but can also be used in date functions + # + # sql_attr_timestamp = posted_ts + # sql_attr_timestamp = last_edited_ts + sql_attr_timestamp = date_added + + # string ordinal attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # sorts strings (bytewise), and stores their indexes in the sorted list + # sorting by this attr is equivalent to sorting by the original strings + # + # sql_attr_str2ordinal = author_name + + + # floating point attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # values are stored in single precision, 32-bit IEEE 754 format + # + # sql_attr_float = lat_radians + # sql_attr_float = long_radians + + + # multi-valued attribute (MVA) attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # MVA values are variable length lists of unsigned 32-bit integers + # + # syntax is ATTR-TYPE ATTR-NAME 'from' SOURCE-TYPE [;QUERY] [;RANGE-QUERY] + # ATTR-TYPE is 'uint' or 'timestamp' + # SOURCE-TYPE is 'field', 'query', or 'ranged-query' + # QUERY is SQL query used to fetch all ( docid, attrvalue ) pairs + # RANGE-QUERY is SQL query used to fetch min and max ID values, similar to 'sql_query_range' + # + # sql_attr_multi = uint tag from query; SELECT docid, tagid FROM tags + # sql_attr_multi = uint tag from ranged-query; \ + # SELECT docid, tagid FROM tags WHERE id>=$start AND id<=$end; \ + # SELECT MIN(docid), MAX(docid) FROM tags + + + # string attribute declaration + # multi-value (an arbitrary number of these is allowed), optional + # lets you store and retrieve strings + # + # sql_attr_string = stitle + + + # wordcount attribute declaration + # multi-value (an arbitrary number of these is allowed), optional + # lets you count the words at indexing time + # + # sql_attr_str2wordcount = stitle + + + # combined field plus attribute declaration (from a single column) + # stores column as an attribute, but also indexes it as a full-text field + # + # sql_field_string = author + # sql_field_str2wordcount = title + + + # post-query, executed on sql_query completion + # optional, default is empty + # + # sql_query_post = + + + # post-index-query, executed on successful indexing completion + # optional, default is empty + # $maxid expands to max document ID actually fetched from DB + # + # sql_query_post_index = REPLACE INTO counters ( id, val ) \ + # VALUES ( 'max_indexed_id', $maxid ) + + + # ranged query throttling, in milliseconds + # optional, default is 0 which means no delay + # enforces given delay before each query step + sql_ranged_throttle = 0 + + # document info query, ONLY for CLI search (ie. testing and debugging) + # optional, default is empty + # must contain $id macro and must fetch the document by that id + sql_query_info = SELECT * FROM documents WHERE id=$id + + # kill-list query, fetches the document IDs for kill-list + # k-list will suppress matches from preceding indexes in the same query + # optional, default is empty + # + # sql_query_killlist = SELECT id FROM documents WHERE edited>=@last_reindex + + + # columns to unpack on indexer side when indexing + # multi-value, optional, default is empty list + # + # unpack_zlib = zlib_column + # unpack_mysqlcompress = compressed_column + # unpack_mysqlcompress = compressed_column_2 + + + # maximum unpacked length allowed in MySQL COMPRESS() unpacker + # optional, default is 16M + # + # unpack_mysqlcompress_maxsize = 16M + + + ##################################################################### + ## xmlpipe2 settings + ##################################################################### + + # type = xmlpipe + + # shell command to invoke xmlpipe stream producer + # mandatory + # + # xmlpipe_command = cat /usr/local/coreseek/var/test.xml + + # xmlpipe2 field declaration + # multi-value, optional, default is empty + # + # xmlpipe_field = subject + # xmlpipe_field = content + + + # xmlpipe2 attribute declaration + # multi-value, optional, default is empty + # all xmlpipe_attr_XXX options are fully similar to sql_attr_XXX + # + # xmlpipe_attr_timestamp = published + # xmlpipe_attr_uint = author_id + + + # perform UTF-8 validation, and filter out incorrect codes + # avoids XML parser choking on non-UTF-8 documents + # optional, default is 0 + # + # xmlpipe_fixup_utf8 = 1 +} + + +# inherited source example +# +# all the parameters are copied from the parent source, +# and may then be overridden in this source definition +source src1throttled : src1 +{ + sql_ranged_throttle = 100 +} + +############################################################################# +## index definition +############################################################################# + +# local index example +# +# this is an index which is stored locally in the filesystem +# +# all indexing-time options (such as morphology and charsets) +# are configured per local index +index test1 +{ + # index type + # optional, default is 'plain' + # known values are 'plain', 'distributed', and 'rt' (see samples below) + # type = plain + + # document source(s) to index + # multi-value, mandatory + # document IDs must be globally unique across all sources + source = src1 + + # index files path and file name, without extension + # mandatory, path must be writable, extensions will be auto-appended + path = /usr/local/coreseek/var/data/test1 + + # document attribute values (docinfo) storage mode + # optional, default is 'extern' + # known values are 'none', 'extern' and 'inline' + docinfo = extern + + # memory locking for cached data (.spa and .spi), to prevent swapping + # optional, default is 0 (do not mlock) + # requires searchd to be run from root + mlock = 0 + + # a list of morphology preprocessors to apply + # optional, default is empty + # + # builtin preprocessors are 'none', 'stem_en', 'stem_ru', 'stem_enru', + # 'soundex', and 'metaphone'; additional preprocessors available from + # libstemmer are 'libstemmer_XXX', where XXX is algorithm code + # (see libstemmer_c/libstemmer/modules.txt) + # + # morphology = stem_en, stem_ru, soundex + # morphology = libstemmer_german + # morphology = libstemmer_sv + morphology = none + + # minimum word length at which to enable stemming + # optional, default is 1 (stem everything) + # + # min_stemming_len = 1 + + + # stopword files list (space separated) + # optional, default is empty + # contents are plain text, charset_table and stemming are both applied + # + # stopwords = /usr/local/coreseek/var/data/stopwords.txt + + + # wordforms file, in "mapfrom > mapto" plain text format + # optional, default is empty + # + # wordforms = /usr/local/coreseek/var/data/wordforms.txt + + + # tokenizing exceptions file + # optional, default is empty + # + # plain text, case sensitive, space insensitive in map-from part + # one "Map Several Words => ToASingleOne" entry per line + # + # exceptions = /usr/local/coreseek/var/data/exceptions.txt + + + # minimum indexed word length + # default is 1 (index everything) + min_word_len = 1 + + # charset encoding type + # optional, default is 'sbcs' + # known types are 'sbcs' (Single Byte CharSet) and 'utf-8' + charset_type = sbcs + + # charset definition and case folding rules "table" + # optional, default value depends on charset_type + # + # defaults are configured to include English and Russian characters only + # you need to change the table to include additional ones + # this behavior MAY change in future versions + # + # 'sbcs' default value is + # charset_table = 0..9, A..Z->a..z, _, a..z, U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF + # + # 'utf-8' default value is + # charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F + + + # ignored characters list + # optional, default value is empty + # + # ignore_chars = U+00AD + + + # minimum word prefix length to index + # optional, default is 0 (do not index prefixes) + # + # min_prefix_len = 0 + + + # minimum word infix length to index + # optional, default is 0 (do not index infixes) + # + # min_infix_len = 0 + + + # list of fields to limit prefix/infix indexing to + # optional, default value is empty (index all fields in prefix/infix mode) + # + # prefix_fields = filename + # infix_fields = url, domain + + + # enable star-syntax (wildcards) when searching prefix/infix indexes + # search-time only, does not affect indexing, can be 0 or 1 + # optional, default is 0 (do not use wildcard syntax) + # + # enable_star = 1 + + + # expand keywords with exact forms and/or stars when searching fit indexes + # search-time only, does not affect indexing, can be 0 or 1 + # optional, default is 0 (do not expand keywords) + # + # expand_keywords = 1 + + + # n-gram length to index, for CJK indexing + # only supports 0 and 1 for now, other lengths to be implemented + # optional, default is 0 (disable n-grams) + # + # ngram_len = 1 + + + # n-gram characters list, for CJK indexing + # optional, default is empty + # + # ngram_chars = U+3000..U+2FA1F + + + # phrase boundary characters list + # optional, default is empty + # + # phrase_boundary = ., ?, !, U+2026 # horizontal ellipsis + + + # phrase boundary word position increment + # optional, default is 0 + # + # phrase_boundary_step = 100 + + + # blended characters list + # blended chars are indexed both as separators and valid characters + # for instance, AT&T will results in 3 tokens ("at", "t", and "at&t") + # optional, default is empty + # + # blend_chars = +, &, U+23 + + + # blended token indexing mode + # a comma separated list of blended token indexing variants + # known variants are trim_none, trim_head, trim_tail, trim_both, skip_pure + # optional, default is trim_none + # + # blend_mode = trim_tail, skip_pure + + + # whether to strip HTML tags from incoming documents + # known values are 0 (do not strip) and 1 (do strip) + # optional, default is 0 + html_strip = 0 + + # what HTML attributes to index if stripping HTML + # optional, default is empty (do not index anything) + # + # html_index_attrs = img=alt,title; a=title; + + + # what HTML elements contents to strip + # optional, default is empty (do not strip element contents) + # + # html_remove_elements = style, script + + + # whether to preopen index data files on startup + # optional, default is 0 (do not preopen), searchd-only + # + # preopen = 1 + + + # whether to keep dictionary (.spi) on disk, or cache it in RAM + # optional, default is 0 (cache in RAM), searchd-only + # + # ondisk_dict = 1 + + + # whether to enable in-place inversion (2x less disk, 90-95% speed) + # optional, default is 0 (use separate temporary files), indexer-only + # + # inplace_enable = 1 + + + # in-place fine-tuning options + # optional, defaults are listed below + # + # inplace_hit_gap = 0 # preallocated hitlist gap size + # inplace_docinfo_gap = 0 # preallocated docinfo gap size + # inplace_reloc_factor = 0.1 # relocation buffer size within arena + # inplace_write_factor = 0.1 # write buffer size within arena + + + # whether to index original keywords along with stemmed versions + # enables "=exactform" operator to work + # optional, default is 0 + # + # index_exact_words = 1 + + + # position increment on overshort (less that min_word_len) words + # optional, allowed values are 0 and 1, default is 1 + # + # overshort_step = 1 + + + # position increment on stopword + # optional, allowed values are 0 and 1, default is 1 + # + # stopword_step = 1 + + + # hitless words list + # positions for these keywords will not be stored in the index + # optional, allowed values are 'all', or a list file name + # + # hitless_words = all + # hitless_words = hitless.txt + + + # detect and index sentence and paragraph boundaries + # required for the SENTENCE and PARAGRAPH operators to work + # optional, allowed values are 0 and 1, default is 0 + # + # index_sp = 1 + + + # index zones, delimited by HTML/XML tags + # a comma separated list of tags and wildcards + # required for the ZONE operator to work + # optional, default is empty string (do not index zones) + # + # index_zones = title, h*, th +} + + +# inherited index example +# +# all the parameters are copied from the parent index, +# and may then be overridden in this index definition +index test1stemmed : test1 +{ + path = /usr/local/coreseek/var/data/test1stemmed + morphology = stem_en +} + + +# distributed index example +# +# this is a virtual index which can NOT be directly indexed, +# and only contains references to other local and/or remote indexes +index dist1 +{ + # 'distributed' index type MUST be specified + type = distributed + + # local index to be searched + # there can be many local indexes configured + local = test1 + local = test1stemmed + + # remote agent + # multiple remote agents may be specified + # syntax for TCP connections is 'hostname:port:index1,[index2[,...]]' + # syntax for local UNIX connections is '/path/to/socket:index1,[index2[,...]]' + agent = localhost:9313:remote1 + agent = localhost:9314:remote2,remote3 + # agent = /var/run/searchd.sock:remote4 + + # blackhole remote agent, for debugging/testing + # network errors and search results will be ignored + # + # agent_blackhole = testbox:9312:testindex1,testindex2 + + + # remote agent connection timeout, milliseconds + # optional, default is 1000 ms, ie. 1 sec + agent_connect_timeout = 1000 + + # remote agent query timeout, milliseconds + # optional, default is 3000 ms, ie. 3 sec + agent_query_timeout = 3000 +} + + +# realtime index example +# +# you can run INSERT, REPLACE, and DELETE on this index on the fly +# using MySQL protocol (see 'listen' directive below) +index rt +{ + # 'rt' index type must be specified to use RT index + type = rt + + # index files path and file name, without extension + # mandatory, path must be writable, extensions will be auto-appended + path = /usr/local/coreseek/var/data/rt + + # RAM chunk size limit + # RT index will keep at most this much data in RAM, then flush to disk + # optional, default is 32M + # + # rt_mem_limit = 512M + + # full-text field declaration + # multi-value, mandatory + rt_field = title + rt_field = content + + # unsigned integer attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # declares an unsigned 32-bit attribute + rt_attr_uint = gid + + # RT indexes currently support the following attribute types: + # uint, bigint, float, timestamp, string + # + # rt_attr_bigint = guid + # rt_attr_float = gpa + # rt_attr_timestamp = ts_added + # rt_attr_string = author +} + +############################################################################# +## indexer settings +############################################################################# + +indexer +{ + # memory limit, in bytes, kiloytes (16384K) or megabytes (256M) + # optional, default is 32M, max is 2047M, recommended is 256M to 1024M + mem_limit = 32M + + # maximum IO calls per second (for I/O throttling) + # optional, default is 0 (unlimited) + # + # max_iops = 40 + + + # maximum IO call size, bytes (for I/O throttling) + # optional, default is 0 (unlimited) + # + # max_iosize = 1048576 + + + # maximum xmlpipe2 field length, bytes + # optional, default is 2M + # + # max_xmlpipe2_field = 4M + + + # write buffer size, bytes + # several (currently up to 4) buffers will be allocated + # write buffers are allocated in addition to mem_limit + # optional, default is 1M + # + # write_buffer = 1M + + + # maximum file field adaptive buffer size + # optional, default is 8M, minimum is 1M + # + # max_file_field_buffer = 32M +} + +############################################################################# +## searchd settings +############################################################################# + +searchd +{ + # [hostname:]port[:protocol], or /unix/socket/path to listen on + # known protocols are 'sphinx' (SphinxAPI) and 'mysql41' (SphinxQL) + # + # multi-value, multiple listen points are allowed + # optional, defaults are 9312:sphinx and 9306:mysql41, as below + # + # listen = 127.0.0.1 + # listen = 192.168.0.1:9312 + # listen = 9312 + # listen = /var/run/searchd.sock + listen = 9312 + listen = 9306:mysql41 + + # log file, searchd run info is logged here + # optional, default is 'searchd.log' + log = /usr/local/coreseek/var/log/searchd.log + + # query log file, all search queries are logged here + # optional, default is empty (do not log queries) + query_log = /usr/local/coreseek/var/log/query.log + + # client read timeout, seconds + # optional, default is 5 + read_timeout = 5 + + # request timeout, seconds + # optional, default is 5 minutes + client_timeout = 300 + + # maximum amount of children to fork (concurrent searches to run) + # optional, default is 0 (unlimited) + max_children = 30 + + # PID file, searchd process ID file name + # mandatory + pid_file = /usr/local/coreseek/var/log/searchd.pid + + # max amount of matches the daemon ever keeps in RAM, per-index + # WARNING, THERE'S ALSO PER-QUERY LIMIT, SEE SetLimits() API CALL + # default is 1000 (just like Google) + max_matches = 1000 + + # seamless rotate, prevents rotate stalls if precaching huge datasets + # optional, default is 1 + seamless_rotate = 1 + + # whether to forcibly preopen all indexes on startup + # optional, default is 1 (preopen everything) + preopen_indexes = 1 + + # whether to unlink .old index copies on succesful rotation. + # optional, default is 1 (do unlink) + unlink_old = 1 + + # attribute updates periodic flush timeout, seconds + # updates will be automatically dumped to disk this frequently + # optional, default is 0 (disable periodic flush) + # + # attr_flush_period = 900 + + + # instance-wide ondisk_dict defaults (per-index value take precedence) + # optional, default is 0 (precache all dictionaries in RAM) + # + # ondisk_dict_default = 1 + + + # MVA updates pool size + # shared between all instances of searchd, disables attr flushes! + # optional, default size is 1M + mva_updates_pool = 1M + + # max allowed network packet size + # limits both query packets from clients, and responses from agents + # optional, default size is 8M + max_packet_size = 8M + + # crash log path + # searchd will (try to) log crashed query to 'crash_log_path.PID' file + # optional, default is empty (do not create crash logs) + # + # crash_log_path = /usr/local/coreseek/var/log/crash + + + # max allowed per-query filter count + # optional, default is 256 + max_filters = 256 + + # max allowed per-filter values count + # optional, default is 4096 + max_filter_values = 4096 + + + # socket listen queue length + # optional, default is 5 + # + # listen_backlog = 5 + + + # per-keyword read buffer size + # optional, default is 256K + # + # read_buffer = 256K + + + # unhinted read size (currently used when reading hits) + # optional, default is 32K + # + # read_unhinted = 32K + + + # max allowed per-batch query count (aka multi-query count) + # optional, default is 32 + max_batch_queries = 32 + + + # max common subtree document cache size, per-query + # optional, default is 0 (disable subtree optimization) + # + # subtree_docs_cache = 4M + + + # max common subtree hit cache size, per-query + # optional, default is 0 (disable subtree optimization) + # + # subtree_hits_cache = 8M + + + # multi-processing mode (MPM) + # known values are none, fork, prefork, and threads + # optional, default is fork + # + workers = threads # for RT to work + + + # max threads to create for searching local parts of a distributed index + # optional, default is 0, which means disable multi-threaded searching + # should work with all MPMs (ie. does NOT require workers=threads) + # + # dist_threads = 4 + + + # binlog files path; use empty string to disable binlog + # optional, default is build-time configured data directory + # + # binlog_path = # disable logging + # binlog_path = /usr/local/coreseek/var/data # binlog.001 etc will be created there + + + # binlog flush/sync mode + # 0 means flush and sync every second + # 1 means flush and sync every transaction + # 2 means flush every transaction, sync every second + # optional, default is 2 + # + # binlog_flush = 2 + + + # binlog per-file size limit + # optional, default is 128M, 0 means no limit + # + # binlog_max_log_size = 256M + + + # per-thread stack size, only affects workers=threads mode + # optional, default is 64K + # + # thread_stack = 128K + + + # per-keyword expansion limit (for dict=keywords prefix searches) + # optional, default is 0 (no limit) + # + # expansion_limit = 1000 + + + # RT RAM chunks flush period + # optional, default is 0 (no periodic flush) + # + # rt_flush_period = 900 + + + # query log file format + # optional, known values are plain and sphinxql, default is plain + # + # query_log_format = sphinxql + + + # version string returned to MySQL network protocol clients + # optional, default is empty (use Sphinx version) + # + # mysql_version_string = 5.0.37 + + + # trusted plugin directory + # optional, default is empty (disable UDFs) + # + # plugin_dir = /usr/local/sphinx/lib + + + # default server-wide collation + # optional, default is libc_ci + # + # collation_server = utf8_general_ci + + + # server-wide locale for libc based collations + # optional, default is C + # + # collation_libc_locale = ru_RU.UTF-8 + + + # threaded server watchdog (only used in workers=threads mode) + # optional, values are 0 and 1, default is 1 (watchdog on) + # + # watchdog = 1 + + + # SphinxQL compatibility mode (legacy columns and their names) + # optional, default is 0 (SQL compliant syntax and result sets) + # + # compat_sphinxql_magics = 1 +} + +# --eof-- diff --git a/coreseek/csft-4.1/sphinx.conf.in b/coreseek/csft-4.1/sphinx.conf.in new file mode 100755 index 0000000..25dba91 --- /dev/null +++ b/coreseek/csft-4.1/sphinx.conf.in @@ -0,0 +1,933 @@ +# +# Sphinx configuration file sample +# +# WARNING! While this sample file mentions all available options, +# it contains (very) short helper descriptions only. Please refer to +# doc/sphinx.html for details. +# + +############################################################################# +## data source definition +############################################################################# + +source src1 +{ + # data source type. mandatory, no default value + # known types are mysql, pgsql, mssql, xmlpipe, xmlpipe2, odbc + type = mysql + + ##################################################################### + ## SQL settings (for 'mysql' and 'pgsql' types) + ##################################################################### + + # some straightforward parameters for SQL source types + sql_host = localhost + sql_user = test + sql_pass = + sql_db = test + sql_port = 3306 # optional, default is 3306 + + # UNIX socket name + # optional, default is empty (reuse client library defaults) + # usually '/var/lib/mysql/mysql.sock' on Linux + # usually '/tmp/mysql.sock' on FreeBSD + # + # sql_sock = /tmp/mysql.sock + + + # MySQL specific client connection flags + # optional, default is 0 + # + # mysql_connect_flags = 32 # enable compression + + # MySQL specific SSL certificate settings + # optional, defaults are empty + # + # mysql_ssl_cert = /etc/ssl/client-cert.pem + # mysql_ssl_key = /etc/ssl/client-key.pem + # mysql_ssl_ca = /etc/ssl/cacert.pem + + # MS SQL specific Windows authentication mode flag + # MUST be in sync with charset_type index-level setting + # optional, default is 0 + # + # mssql_winauth = 1 # use currently logged on user credentials + + + # MS SQL specific Unicode indexing flag + # optional, default is 0 (request SBCS data) + # + # mssql_unicode = 1 # request Unicode data from server + + + # ODBC specific DSN (data source name) + # mandatory for odbc source type, no default value + # + # odbc_dsn = DBQ=C:\data;DefaultDir=C:\data;Driver={Microsoft Text Driver (*.txt; *.csv)}; + # sql_query = SELECT id, data FROM documents.csv + + + # ODBC and MS SQL specific, per-column buffer sizes + # optional, default is auto-detect + # + # sql_column_buffers = content=12M, comments=1M + + + # pre-query, executed before the main fetch query + # multi-value, optional, default is empty list of queries + # + # sql_query_pre = SET NAMES utf8 + # sql_query_pre = SET SESSION query_cache_type=OFF + + + # main document fetch query + # mandatory, integer document ID field MUST be the first selected column + sql_query = \ + SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, title, content \ + FROM documents + + + # joined/payload field fetch query + # joined fields let you avoid (slow) JOIN and GROUP_CONCAT + # payload fields let you attach custom per-keyword values (eg. for ranking) + # + # syntax is FIELD-NAME 'from' ( 'query' | 'payload-query' ); QUERY + # joined field QUERY should return 2 columns (docid, text) + # payload field QUERY should return 3 columns (docid, keyword, weight) + # + # REQUIRES that query results are in ascending document ID order! + # multi-value, optional, default is empty list of queries + # + # sql_joined_field = tags from query; SELECT docid, CONCAT('tag',tagid) FROM tags ORDER BY docid ASC + # sql_joined_field = wtags from payload-query; SELECT docid, tag, tagweight FROM tags ORDER BY docid ASC + + + # file based field declaration + # + # content of this field is treated as a file name + # and the file gets loaded and indexed in place of a field + # + # max file size is limited by max_file_field_buffer indexer setting + # file IO errors are non-fatal and get reported as warnings + # + # sql_file_field = content_file_path + + + # range query setup, query that must return min and max ID values + # optional, default is empty + # + # sql_query will need to reference $start and $end boundaries + # if using ranged query: + # + # sql_query = \ + # SELECT doc.id, doc.id AS group, doc.title, doc.data \ + # FROM documents doc \ + # WHERE id>=$start AND id<=$end + # + # sql_query_range = SELECT MIN(id),MAX(id) FROM documents + + + # range query step + # optional, default is 1024 + # + # sql_range_step = 1000 + + + # unsigned integer attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # optional bit size can be specified, default is 32 + # + # sql_attr_uint = author_id + # sql_attr_uint = forum_id:9 # 9 bits for forum_id + sql_attr_uint = group_id + + # boolean attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # equivalent to sql_attr_uint with 1-bit size + # + # sql_attr_bool = is_deleted + + + # bigint attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # declares a signed (unlike uint!) 64-bit attribute + # + # sql_attr_bigint = my_bigint_id + + + # UNIX timestamp attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # similar to integer, but can also be used in date functions + # + # sql_attr_timestamp = posted_ts + # sql_attr_timestamp = last_edited_ts + sql_attr_timestamp = date_added + + # string ordinal attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # sorts strings (bytewise), and stores their indexes in the sorted list + # sorting by this attr is equivalent to sorting by the original strings + # + # sql_attr_str2ordinal = author_name + + + # floating point attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # values are stored in single precision, 32-bit IEEE 754 format + # + # sql_attr_float = lat_radians + # sql_attr_float = long_radians + + + # multi-valued attribute (MVA) attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # MVA values are variable length lists of unsigned 32-bit integers + # + # syntax is ATTR-TYPE ATTR-NAME 'from' SOURCE-TYPE [;QUERY] [;RANGE-QUERY] + # ATTR-TYPE is 'uint' or 'timestamp' + # SOURCE-TYPE is 'field', 'query', or 'ranged-query' + # QUERY is SQL query used to fetch all ( docid, attrvalue ) pairs + # RANGE-QUERY is SQL query used to fetch min and max ID values, similar to 'sql_query_range' + # + # sql_attr_multi = uint tag from query; SELECT docid, tagid FROM tags + # sql_attr_multi = uint tag from ranged-query; \ + # SELECT docid, tagid FROM tags WHERE id>=$start AND id<=$end; \ + # SELECT MIN(docid), MAX(docid) FROM tags + + + # string attribute declaration + # multi-value (an arbitrary number of these is allowed), optional + # lets you store and retrieve strings + # + # sql_attr_string = stitle + + + # wordcount attribute declaration + # multi-value (an arbitrary number of these is allowed), optional + # lets you count the words at indexing time + # + # sql_attr_str2wordcount = stitle + + + # combined field plus attribute declaration (from a single column) + # stores column as an attribute, but also indexes it as a full-text field + # + # sql_field_string = author + # sql_field_str2wordcount = title + + + # post-query, executed on sql_query completion + # optional, default is empty + # + # sql_query_post = + + + # post-index-query, executed on successful indexing completion + # optional, default is empty + # $maxid expands to max document ID actually fetched from DB + # + # sql_query_post_index = REPLACE INTO counters ( id, val ) \ + # VALUES ( 'max_indexed_id', $maxid ) + + + # ranged query throttling, in milliseconds + # optional, default is 0 which means no delay + # enforces given delay before each query step + sql_ranged_throttle = 0 + + # document info query, ONLY for CLI search (ie. testing and debugging) + # optional, default is empty + # must contain $id macro and must fetch the document by that id + sql_query_info = SELECT * FROM documents WHERE id=$id + + # kill-list query, fetches the document IDs for kill-list + # k-list will suppress matches from preceding indexes in the same query + # optional, default is empty + # + # sql_query_killlist = SELECT id FROM documents WHERE edited>=@last_reindex + + + # columns to unpack on indexer side when indexing + # multi-value, optional, default is empty list + # + # unpack_zlib = zlib_column + # unpack_mysqlcompress = compressed_column + # unpack_mysqlcompress = compressed_column_2 + + + # maximum unpacked length allowed in MySQL COMPRESS() unpacker + # optional, default is 16M + # + # unpack_mysqlcompress_maxsize = 16M + + + ##################################################################### + ## xmlpipe2 settings + ##################################################################### + + # type = xmlpipe + + # shell command to invoke xmlpipe stream producer + # mandatory + # + # xmlpipe_command = cat @CONFDIR@/test.xml + + # xmlpipe2 field declaration + # multi-value, optional, default is empty + # + # xmlpipe_field = subject + # xmlpipe_field = content + + + # xmlpipe2 attribute declaration + # multi-value, optional, default is empty + # all xmlpipe_attr_XXX options are fully similar to sql_attr_XXX + # + # xmlpipe_attr_timestamp = published + # xmlpipe_attr_uint = author_id + + + # perform UTF-8 validation, and filter out incorrect codes + # avoids XML parser choking on non-UTF-8 documents + # optional, default is 0 + # + # xmlpipe_fixup_utf8 = 1 +} + + +# inherited source example +# +# all the parameters are copied from the parent source, +# and may then be overridden in this source definition +source src1throttled : src1 +{ + sql_ranged_throttle = 100 +} + +############################################################################# +## index definition +############################################################################# + +# local index example +# +# this is an index which is stored locally in the filesystem +# +# all indexing-time options (such as morphology and charsets) +# are configured per local index +index test1 +{ + # index type + # optional, default is 'plain' + # known values are 'plain', 'distributed', and 'rt' (see samples below) + # type = plain + + # document source(s) to index + # multi-value, mandatory + # document IDs must be globally unique across all sources + source = src1 + + # index files path and file name, without extension + # mandatory, path must be writable, extensions will be auto-appended + path = @CONFDIR@/data/test1 + + # document attribute values (docinfo) storage mode + # optional, default is 'extern' + # known values are 'none', 'extern' and 'inline' + docinfo = extern + + # memory locking for cached data (.spa and .spi), to prevent swapping + # optional, default is 0 (do not mlock) + # requires searchd to be run from root + mlock = 0 + + # a list of morphology preprocessors to apply + # optional, default is empty + # + # builtin preprocessors are 'none', 'stem_en', 'stem_ru', 'stem_enru', + # 'soundex', and 'metaphone'; additional preprocessors available from + # libstemmer are 'libstemmer_XXX', where XXX is algorithm code + # (see libstemmer_c/libstemmer/modules.txt) + # + # morphology = stem_en, stem_ru, soundex + # morphology = libstemmer_german + # morphology = libstemmer_sv + morphology = none + + # minimum word length at which to enable stemming + # optional, default is 1 (stem everything) + # + # min_stemming_len = 1 + + + # stopword files list (space separated) + # optional, default is empty + # contents are plain text, charset_table and stemming are both applied + # + # stopwords = @CONFDIR@/data/stopwords.txt + + + # wordforms file, in "mapfrom > mapto" plain text format + # optional, default is empty + # + # wordforms = @CONFDIR@/data/wordforms.txt + + + # tokenizing exceptions file + # optional, default is empty + # + # plain text, case sensitive, space insensitive in map-from part + # one "Map Several Words => ToASingleOne" entry per line + # + # exceptions = @CONFDIR@/data/exceptions.txt + + + # minimum indexed word length + # default is 1 (index everything) + min_word_len = 1 + + # charset encoding type + # optional, default is 'sbcs' + # known types are 'sbcs' (Single Byte CharSet) and 'utf-8' + charset_type = sbcs + + # charset definition and case folding rules "table" + # optional, default value depends on charset_type + # + # defaults are configured to include English and Russian characters only + # you need to change the table to include additional ones + # this behavior MAY change in future versions + # + # 'sbcs' default value is + # charset_table = 0..9, A..Z->a..z, _, a..z, U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF + # + # 'utf-8' default value is + # charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F + + + # ignored characters list + # optional, default value is empty + # + # ignore_chars = U+00AD + + + # minimum word prefix length to index + # optional, default is 0 (do not index prefixes) + # + # min_prefix_len = 0 + + + # minimum word infix length to index + # optional, default is 0 (do not index infixes) + # + # min_infix_len = 0 + + + # list of fields to limit prefix/infix indexing to + # optional, default value is empty (index all fields in prefix/infix mode) + # + # prefix_fields = filename + # infix_fields = url, domain + + + # enable star-syntax (wildcards) when searching prefix/infix indexes + # search-time only, does not affect indexing, can be 0 or 1 + # optional, default is 0 (do not use wildcard syntax) + # + # enable_star = 1 + + + # expand keywords with exact forms and/or stars when searching fit indexes + # search-time only, does not affect indexing, can be 0 or 1 + # optional, default is 0 (do not expand keywords) + # + # expand_keywords = 1 + + + # n-gram length to index, for CJK indexing + # only supports 0 and 1 for now, other lengths to be implemented + # optional, default is 0 (disable n-grams) + # + # ngram_len = 1 + + + # n-gram characters list, for CJK indexing + # optional, default is empty + # + # ngram_chars = U+3000..U+2FA1F + + + # phrase boundary characters list + # optional, default is empty + # + # phrase_boundary = ., ?, !, U+2026 # horizontal ellipsis + + + # phrase boundary word position increment + # optional, default is 0 + # + # phrase_boundary_step = 100 + + + # blended characters list + # blended chars are indexed both as separators and valid characters + # for instance, AT&T will results in 3 tokens ("at", "t", and "at&t") + # optional, default is empty + # + # blend_chars = +, &, U+23 + + + # blended token indexing mode + # a comma separated list of blended token indexing variants + # known variants are trim_none, trim_head, trim_tail, trim_both, skip_pure + # optional, default is trim_none + # + # blend_mode = trim_tail, skip_pure + + + # whether to strip HTML tags from incoming documents + # known values are 0 (do not strip) and 1 (do strip) + # optional, default is 0 + html_strip = 0 + + # what HTML attributes to index if stripping HTML + # optional, default is empty (do not index anything) + # + # html_index_attrs = img=alt,title; a=title; + + + # what HTML elements contents to strip + # optional, default is empty (do not strip element contents) + # + # html_remove_elements = style, script + + + # whether to preopen index data files on startup + # optional, default is 0 (do not preopen), searchd-only + # + # preopen = 1 + + + # whether to keep dictionary (.spi) on disk, or cache it in RAM + # optional, default is 0 (cache in RAM), searchd-only + # + # ondisk_dict = 1 + + + # whether to enable in-place inversion (2x less disk, 90-95% speed) + # optional, default is 0 (use separate temporary files), indexer-only + # + # inplace_enable = 1 + + + # in-place fine-tuning options + # optional, defaults are listed below + # + # inplace_hit_gap = 0 # preallocated hitlist gap size + # inplace_docinfo_gap = 0 # preallocated docinfo gap size + # inplace_reloc_factor = 0.1 # relocation buffer size within arena + # inplace_write_factor = 0.1 # write buffer size within arena + + + # whether to index original keywords along with stemmed versions + # enables "=exactform" operator to work + # optional, default is 0 + # + # index_exact_words = 1 + + + # position increment on overshort (less that min_word_len) words + # optional, allowed values are 0 and 1, default is 1 + # + # overshort_step = 1 + + + # position increment on stopword + # optional, allowed values are 0 and 1, default is 1 + # + # stopword_step = 1 + + + # hitless words list + # positions for these keywords will not be stored in the index + # optional, allowed values are 'all', or a list file name + # + # hitless_words = all + # hitless_words = hitless.txt + + + # detect and index sentence and paragraph boundaries + # required for the SENTENCE and PARAGRAPH operators to work + # optional, allowed values are 0 and 1, default is 0 + # + # index_sp = 1 + + + # index zones, delimited by HTML/XML tags + # a comma separated list of tags and wildcards + # required for the ZONE operator to work + # optional, default is empty string (do not index zones) + # + # index_zones = title, h*, th +} + + +# inherited index example +# +# all the parameters are copied from the parent index, +# and may then be overridden in this index definition +index test1stemmed : test1 +{ + path = @CONFDIR@/data/test1stemmed + morphology = stem_en +} + + +# distributed index example +# +# this is a virtual index which can NOT be directly indexed, +# and only contains references to other local and/or remote indexes +index dist1 +{ + # 'distributed' index type MUST be specified + type = distributed + + # local index to be searched + # there can be many local indexes configured + local = test1 + local = test1stemmed + + # remote agent + # multiple remote agents may be specified + # syntax for TCP connections is 'hostname:port:index1,[index2[,...]]' + # syntax for local UNIX connections is '/path/to/socket:index1,[index2[,...]]' + agent = localhost:9313:remote1 + agent = localhost:9314:remote2,remote3 + # agent = /var/run/searchd.sock:remote4 + + # blackhole remote agent, for debugging/testing + # network errors and search results will be ignored + # + # agent_blackhole = testbox:9312:testindex1,testindex2 + + + # remote agent connection timeout, milliseconds + # optional, default is 1000 ms, ie. 1 sec + agent_connect_timeout = 1000 + + # remote agent query timeout, milliseconds + # optional, default is 3000 ms, ie. 3 sec + agent_query_timeout = 3000 +} + + +# realtime index example +# +# you can run INSERT, REPLACE, and DELETE on this index on the fly +# using MySQL protocol (see 'listen' directive below) +index rt +{ + # 'rt' index type must be specified to use RT index + type = rt + + # index files path and file name, without extension + # mandatory, path must be writable, extensions will be auto-appended + path = @CONFDIR@/data/rt + + # RAM chunk size limit + # RT index will keep at most this much data in RAM, then flush to disk + # optional, default is 32M + # + # rt_mem_limit = 512M + + # full-text field declaration + # multi-value, mandatory + rt_field = title + rt_field = content + + # unsigned integer attribute declaration + # multi-value (an arbitrary number of attributes is allowed), optional + # declares an unsigned 32-bit attribute + rt_attr_uint = gid + + # RT indexes currently support the following attribute types: + # uint, bigint, float, timestamp, string + # + # rt_attr_bigint = guid + # rt_attr_float = gpa + # rt_attr_timestamp = ts_added + # rt_attr_string = author +} + +############################################################################# +## indexer settings +############################################################################# + +indexer +{ + # memory limit, in bytes, kiloytes (16384K) or megabytes (256M) + # optional, default is 32M, max is 2047M, recommended is 256M to 1024M + mem_limit = 32M + + # maximum IO calls per second (for I/O throttling) + # optional, default is 0 (unlimited) + # + # max_iops = 40 + + + # maximum IO call size, bytes (for I/O throttling) + # optional, default is 0 (unlimited) + # + # max_iosize = 1048576 + + + # maximum xmlpipe2 field length, bytes + # optional, default is 2M + # + # max_xmlpipe2_field = 4M + + + # write buffer size, bytes + # several (currently up to 4) buffers will be allocated + # write buffers are allocated in addition to mem_limit + # optional, default is 1M + # + # write_buffer = 1M + + + # maximum file field adaptive buffer size + # optional, default is 8M, minimum is 1M + # + # max_file_field_buffer = 32M +} + +############################################################################# +## searchd settings +############################################################################# + +searchd +{ + # [hostname:]port[:protocol], or /unix/socket/path to listen on + # known protocols are 'sphinx' (SphinxAPI) and 'mysql41' (SphinxQL) + # + # multi-value, multiple listen points are allowed + # optional, defaults are 9312:sphinx and 9306:mysql41, as below + # + # listen = 127.0.0.1 + # listen = 192.168.0.1:9312 + # listen = 9312 + # listen = /var/run/searchd.sock + listen = 9312 + listen = 9306:mysql41 + + # log file, searchd run info is logged here + # optional, default is 'searchd.log' + log = @CONFDIR@/log/searchd.log + + # query log file, all search queries are logged here + # optional, default is empty (do not log queries) + query_log = @CONFDIR@/log/query.log + + # client read timeout, seconds + # optional, default is 5 + read_timeout = 5 + + # request timeout, seconds + # optional, default is 5 minutes + client_timeout = 300 + + # maximum amount of children to fork (concurrent searches to run) + # optional, default is 0 (unlimited) + max_children = 30 + + # PID file, searchd process ID file name + # mandatory + pid_file = @CONFDIR@/log/searchd.pid + + # max amount of matches the daemon ever keeps in RAM, per-index + # WARNING, THERE'S ALSO PER-QUERY LIMIT, SEE SetLimits() API CALL + # default is 1000 (just like Google) + max_matches = 1000 + + # seamless rotate, prevents rotate stalls if precaching huge datasets + # optional, default is 1 + seamless_rotate = 1 + + # whether to forcibly preopen all indexes on startup + # optional, default is 1 (preopen everything) + preopen_indexes = 1 + + # whether to unlink .old index copies on succesful rotation. + # optional, default is 1 (do unlink) + unlink_old = 1 + + # attribute updates periodic flush timeout, seconds + # updates will be automatically dumped to disk this frequently + # optional, default is 0 (disable periodic flush) + # + # attr_flush_period = 900 + + + # instance-wide ondisk_dict defaults (per-index value take precedence) + # optional, default is 0 (precache all dictionaries in RAM) + # + # ondisk_dict_default = 1 + + + # MVA updates pool size + # shared between all instances of searchd, disables attr flushes! + # optional, default size is 1M + mva_updates_pool = 1M + + # max allowed network packet size + # limits both query packets from clients, and responses from agents + # optional, default size is 8M + max_packet_size = 8M + + # crash log path + # searchd will (try to) log crashed query to 'crash_log_path.PID' file + # optional, default is empty (do not create crash logs) + # + # crash_log_path = @CONFDIR@/log/crash + + + # max allowed per-query filter count + # optional, default is 256 + max_filters = 256 + + # max allowed per-filter values count + # optional, default is 4096 + max_filter_values = 4096 + + + # socket listen queue length + # optional, default is 5 + # + # listen_backlog = 5 + + + # per-keyword read buffer size + # optional, default is 256K + # + # read_buffer = 256K + + + # unhinted read size (currently used when reading hits) + # optional, default is 32K + # + # read_unhinted = 32K + + + # max allowed per-batch query count (aka multi-query count) + # optional, default is 32 + max_batch_queries = 32 + + + # max common subtree document cache size, per-query + # optional, default is 0 (disable subtree optimization) + # + # subtree_docs_cache = 4M + + + # max common subtree hit cache size, per-query + # optional, default is 0 (disable subtree optimization) + # + # subtree_hits_cache = 8M + + + # multi-processing mode (MPM) + # known values are none, fork, prefork, and threads + # optional, default is fork + # + workers = threads # for RT to work + + + # max threads to create for searching local parts of a distributed index + # optional, default is 0, which means disable multi-threaded searching + # should work with all MPMs (ie. does NOT require workers=threads) + # + # dist_threads = 4 + + + # binlog files path; use empty string to disable binlog + # optional, default is build-time configured data directory + # + # binlog_path = # disable logging + # binlog_path = @CONFDIR@/data # binlog.001 etc will be created there + + + # binlog flush/sync mode + # 0 means flush and sync every second + # 1 means flush and sync every transaction + # 2 means flush every transaction, sync every second + # optional, default is 2 + # + # binlog_flush = 2 + + + # binlog per-file size limit + # optional, default is 128M, 0 means no limit + # + # binlog_max_log_size = 256M + + + # per-thread stack size, only affects workers=threads mode + # optional, default is 64K + # + # thread_stack = 128K + + + # per-keyword expansion limit (for dict=keywords prefix searches) + # optional, default is 0 (no limit) + # + # expansion_limit = 1000 + + + # RT RAM chunks flush period + # optional, default is 0 (no periodic flush) + # + # rt_flush_period = 900 + + + # query log file format + # optional, known values are plain and sphinxql, default is plain + # + # query_log_format = sphinxql + + + # version string returned to MySQL network protocol clients + # optional, default is empty (use Sphinx version) + # + # mysql_version_string = 5.0.37 + + + # trusted plugin directory + # optional, default is empty (disable UDFs) + # + # plugin_dir = /usr/local/sphinx/lib + + + # default server-wide collation + # optional, default is libc_ci + # + # collation_server = utf8_general_ci + + + # server-wide locale for libc based collations + # optional, default is C + # + # collation_libc_locale = ru_RU.UTF-8 + + + # threaded server watchdog (only used in workers=threads mode) + # optional, values are 0 and 1, default is 1 (watchdog on) + # + # watchdog = 1 + + + # SphinxQL compatibility mode (legacy columns and their names) + # optional, default is 0 (SQL compliant syntax and result sets) + # + # compat_sphinxql_magics = 1 +} + +# --eof-- diff --git a/coreseek/csft-4.1/sphinx.spec b/coreseek/csft-4.1/sphinx.spec new file mode 100755 index 0000000..9608810 --- /dev/null +++ b/coreseek/csft-4.1/sphinx.spec @@ -0,0 +1,45 @@ +Summary: Sphinx full-text search engine +Name: sphinx +Version: 0.9.9 +Release: r1207 +License: GPL +Group: Development +BuildRoot: /tmp/sphinx-%{version}-svn-%{release} +Source: http://sphinxsearch.com/downloads/sphinx-%{version}-svn-%{release}.tar.gz +URL: http://sphinxsearch.com/ +BuildRequires: mysql-devel +Requires: mysql + + +%description +Sphinx is a free, open-source full-text search engine, +designed with indexing database content in mind. + + +%prep +%setup -n sphinx-%{version}-svn-%{release} + + +%build +CPPFLAGS="-D_FILE_OFFSET_BITS=64" +export CPPFLAGS +%configure +make + + +%install +mkdir -p $RPM_BUILD_ROOT +make DESTDIR=$RPM_BUILD_ROOT install +mkdir -p $RPM_BUILD_ROOT/%{_libdir}/sphinx +cp -R -p api $RPM_BUILD_ROOT/%{_libdir}/sphinx + + +%files +/usr/bin/* +%{_libdir}/sphinx +%config /etc/* +%doc INSTALL doc/sphinx.* + + +%clean +rm -rf $RPM_BUILD_ROOT diff --git a/coreseek/csft-4.1/sphinx.workspace b/coreseek/csft-4.1/sphinx.workspace new file mode 100755 index 0000000..860c7df --- /dev/null +++ b/coreseek/csft-4.1/sphinx.workspace @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/sphinx05.sln b/coreseek/csft-4.1/sphinx05.sln new file mode 100755 index 0000000..a4e9749 --- /dev/null +++ b/coreseek/csft-4.1/sphinx05.sln @@ -0,0 +1,82 @@ +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "indexer", "win\indexer05.vcproj", "{405619C7-CC22-4FB8-9237-B196CB897355}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsphinx", "win\libsphinx05.vcproj", "{6A1685DE-0265-4243-965F-96CB53EBBCA6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "search", "win\search05.vcproj", "{571DC41A-2665-476C-ABED-3899324E19AB}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "searchd", "win\searchd05.vcproj", "{0BBD34CB-5891-477F-B665-3D7C9FC22A02}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "win\tests05.vcproj", "{B47166A1-4827-4D80-97E3-743BDE61146F}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spelldump", "win\spelldump05.vcproj", "{AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "indextool", "win\indextool05.vcproj", "{6A78A67D-A743-4594-858A-A4F1C536A8C1}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testrt", "win\testrt05.vcproj", "{651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {405619C7-CC22-4FB8-9237-B196CB897355}.Debug|Win32.ActiveCfg = Debug|Win32 + {405619C7-CC22-4FB8-9237-B196CB897355}.Debug|Win32.Build.0 = Debug|Win32 + {405619C7-CC22-4FB8-9237-B196CB897355}.Release|Win32.ActiveCfg = Release|Win32 + {405619C7-CC22-4FB8-9237-B196CB897355}.Release|Win32.Build.0 = Release|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Debug|Win32.ActiveCfg = Debug|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Debug|Win32.Build.0 = Debug|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Release|Win32.ActiveCfg = Release|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Release|Win32.Build.0 = Release|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Debug|Win32.ActiveCfg = Debug|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Debug|Win32.Build.0 = Debug|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Release|Win32.ActiveCfg = Release|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Release|Win32.Build.0 = Release|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Debug|Win32.ActiveCfg = Debug|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Debug|Win32.Build.0 = Debug|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Release|Win32.ActiveCfg = Release|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Release|Win32.Build.0 = Release|Win32 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Debug|Win32.ActiveCfg = Debug|Win32 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Debug|Win32.Build.0 = Debug|Win32 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Release|Win32.ActiveCfg = Release|Win32 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Release|Win32.Build.0 = Release|Win32 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Debug|Win32.ActiveCfg = Debug|Win32 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Debug|Win32.Build.0 = Debug|Win32 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Release|Win32.ActiveCfg = Release|Win32 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Release|Win32.Build.0 = Release|Win32 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Debug|Win32.Build.0 = Debug|Win32 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Release|Win32.ActiveCfg = Release|Win32 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Release|Win32.Build.0 = Release|Win32 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Debug|Win32.ActiveCfg = Debug|Win32 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Debug|Win32.Build.0 = Debug|Win32 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Release|Win32.ActiveCfg = Release|Win32 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/coreseek/csft-4.1/sphinx08.sln b/coreseek/csft-4.1/sphinx08.sln new file mode 100755 index 0000000..def046a --- /dev/null +++ b/coreseek/csft-4.1/sphinx08.sln @@ -0,0 +1,110 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C++ Express 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "indexer", "win\indexer08.vcproj", "{405619C7-CC22-4FB8-9237-B196CB897355}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsphinx", "win\libsphinx08.vcproj", "{6A1685DE-0265-4243-965F-96CB53EBBCA6}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "search", "win\search08.vcproj", "{571DC41A-2665-476C-ABED-3899324E19AB}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "searchd", "win\searchd08.vcproj", "{0BBD34CB-5891-477F-B665-3D7C9FC22A02}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spelldump", "win\spelldump08.vcproj", "{AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "indextool", "win\indextool08.vcproj", "{6A78A67D-A743-4594-858A-A4F1C536A8C1}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testrt", "win\testrt08.vcproj", "{651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tests", "win\tests08.vcproj", "{B47166A1-4827-4D80-97E3-743BDE61146F}" + ProjectSection(ProjectDependencies) = postProject + {6A1685DE-0265-4243-965F-96CB53EBBCA6} = {6A1685DE-0265-4243-965F-96CB53EBBCA6} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {405619C7-CC22-4FB8-9237-B196CB897355}.Debug|Win32.ActiveCfg = Debug|Win32 + {405619C7-CC22-4FB8-9237-B196CB897355}.Debug|Win32.Build.0 = Debug|Win32 + {405619C7-CC22-4FB8-9237-B196CB897355}.Debug|x64.ActiveCfg = Debug|Win32 + {405619C7-CC22-4FB8-9237-B196CB897355}.Release|Win32.ActiveCfg = Release|Win32 + {405619C7-CC22-4FB8-9237-B196CB897355}.Release|Win32.Build.0 = Release|Win32 + {405619C7-CC22-4FB8-9237-B196CB897355}.Release|x64.ActiveCfg = Release|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Debug|Win32.ActiveCfg = Debug|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Debug|Win32.Build.0 = Debug|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Debug|x64.ActiveCfg = Debug|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Release|Win32.ActiveCfg = Release|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Release|Win32.Build.0 = Release|Win32 + {6A1685DE-0265-4243-965F-96CB53EBBCA6}.Release|x64.ActiveCfg = Release|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Debug|Win32.ActiveCfg = Debug|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Debug|Win32.Build.0 = Debug|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Debug|x64.ActiveCfg = Debug|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Release|Win32.ActiveCfg = Release|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Release|Win32.Build.0 = Release|Win32 + {571DC41A-2665-476C-ABED-3899324E19AB}.Release|x64.ActiveCfg = Release|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Debug|Win32.ActiveCfg = Debug|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Debug|Win32.Build.0 = Debug|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Debug|x64.ActiveCfg = Debug|x64 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Debug|x64.Build.0 = Debug|x64 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Release|Win32.ActiveCfg = Release|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Release|Win32.Build.0 = Release|Win32 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Release|x64.ActiveCfg = Release|x64 + {0BBD34CB-5891-477F-B665-3D7C9FC22A02}.Release|x64.Build.0 = Release|x64 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Debug|Win32.ActiveCfg = Debug|Win32 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Debug|Win32.Build.0 = Debug|Win32 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Debug|x64.ActiveCfg = Debug|x64 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Debug|x64.Build.0 = Debug|x64 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Release|Win32.ActiveCfg = Release|Win32 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Release|Win32.Build.0 = Release|Win32 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Release|x64.ActiveCfg = Release|x64 + {AE5236EB-62AC-4AD9-81A3-F4BDC85D3876}.Release|x64.Build.0 = Release|x64 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Debug|Win32.ActiveCfg = Debug|Win32 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Debug|Win32.Build.0 = Debug|Win32 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Debug|x64.ActiveCfg = Debug|x64 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Debug|x64.Build.0 = Debug|x64 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Release|Win32.ActiveCfg = Release|Win32 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Release|Win32.Build.0 = Release|Win32 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Release|x64.ActiveCfg = Release|x64 + {6A78A67D-A743-4594-858A-A4F1C536A8C1}.Release|x64.Build.0 = Release|x64 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Debug|Win32.ActiveCfg = Debug|Win32 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Debug|Win32.Build.0 = Debug|Win32 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Debug|x64.ActiveCfg = Debug|x64 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Debug|x64.Build.0 = Debug|x64 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Release|Win32.ActiveCfg = Release|Win32 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Release|Win32.Build.0 = Release|Win32 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Release|x64.ActiveCfg = Release|x64 + {651CEFE5-9BDB-4003-9D35-8D05FA2C06D7}.Release|x64.Build.0 = Release|x64 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Debug|Win32.ActiveCfg = Debug|Win32 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Debug|Win32.Build.0 = Debug|Win32 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Debug|x64.ActiveCfg = Debug|x64 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Debug|x64.Build.0 = Debug|x64 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Release|Win32.ActiveCfg = Release|Win32 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Release|Win32.Build.0 = Release|Win32 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Release|x64.ActiveCfg = Release|x64 + {B47166A1-4827-4D80-97E3-743BDE61146F}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/coreseek/csft-4.1/src/.deps/indexer.Po b/coreseek/csft-4.1/src/.deps/indexer.Po new file mode 100644 index 0000000..ad17ad6 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/indexer.Po @@ -0,0 +1,383 @@ +indexer.o: indexer.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h sphinxutils.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h py_layer.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +sphinxutils.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +py_layer.h: diff --git a/coreseek/csft-4.1/src/.deps/indextool.Po b/coreseek/csft-4.1/src/.deps/indextool.Po new file mode 100644 index 0000000..b591fb5 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/indextool.Po @@ -0,0 +1,360 @@ +indextool.o: indextool.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxutils.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h sphinxrt.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxutils.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +sphinxrt.h: diff --git a/coreseek/csft-4.1/src/.deps/md5.Po b/coreseek/csft-4.1/src/.deps/md5.Po new file mode 100644 index 0000000..757b0d0 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/md5.Po @@ -0,0 +1,30 @@ +md5.o: md5.cpp md5.h /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h + +md5.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: diff --git a/coreseek/csft-4.1/src/.deps/py_helper.Po b/coreseek/csft-4.1/src/.deps/py_helper.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/py_helper.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/src/.deps/py_layer.Po b/coreseek/csft-4.1/src/.deps/py_layer.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/py_layer.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/src/.deps/py_source.Po b/coreseek/csft-4.1/src/.deps/py_source.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/py_source.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/csft-4.1/src/.deps/search.Po b/coreseek/csft-4.1/src/.deps/search.Po new file mode 100644 index 0000000..d1afb4d --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/search.Po @@ -0,0 +1,360 @@ +search.o: search.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxutils.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h py_layer.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxutils.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +py_layer.h: diff --git a/coreseek/csft-4.1/src/.deps/searchd.Po b/coreseek/csft-4.1/src/.deps/searchd.Po new file mode 100644 index 0000000..4dfd517 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/searchd.Po @@ -0,0 +1,456 @@ +searchd.o: searchd.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxutils.h sphinxexcerpt.h sphinxrt.h sphinxint.h \ + sphinxfilter.h /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h py_layer.h \ + /usr/include/netinet/in.h /usr/include/x86_64-linux-gnu/sys/socket.h \ + /usr/include/x86_64-linux-gnu/sys/uio.h \ + /usr/include/x86_64-linux-gnu/bits/socket.h \ + /usr/include/x86_64-linux-gnu/bits/sockaddr.h \ + /usr/include/x86_64-linux-gnu/asm/socket.h \ + /usr/include/asm-generic/socket.h \ + /usr/include/x86_64-linux-gnu/asm/sockios.h \ + /usr/include/asm-generic/sockios.h \ + /usr/include/x86_64-linux-gnu/bits/socket2.h \ + /usr/include/x86_64-linux-gnu/bits/in.h \ + /usr/include/x86_64-linux-gnu/sys/file.h \ + /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h \ + /usr/include/x86_64-linux-gnu/sys/resource.h \ + /usr/include/x86_64-linux-gnu/bits/resource.h \ + /usr/include/x86_64-linux-gnu/sys/un.h /usr/include/netdb.h \ + /usr/include/rpc/netdb.h /usr/include/x86_64-linux-gnu/bits/netdb.h \ + llsphinxql.c yysphinxql.h yysphinxql.c + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxutils.h: + +sphinxexcerpt.h: + +sphinxrt.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +py_layer.h: + +/usr/include/netinet/in.h: + +/usr/include/x86_64-linux-gnu/sys/socket.h: + +/usr/include/x86_64-linux-gnu/sys/uio.h: + +/usr/include/x86_64-linux-gnu/bits/socket.h: + +/usr/include/x86_64-linux-gnu/bits/sockaddr.h: + +/usr/include/x86_64-linux-gnu/asm/socket.h: + +/usr/include/asm-generic/socket.h: + +/usr/include/x86_64-linux-gnu/asm/sockios.h: + +/usr/include/asm-generic/sockios.h: + +/usr/include/x86_64-linux-gnu/bits/socket2.h: + +/usr/include/x86_64-linux-gnu/bits/in.h: + +/usr/include/x86_64-linux-gnu/sys/file.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/x86_64-linux-gnu/sys/wait.h: + +/usr/include/x86_64-linux-gnu/sys/resource.h: + +/usr/include/x86_64-linux-gnu/bits/resource.h: + +/usr/include/x86_64-linux-gnu/sys/un.h: + +/usr/include/netdb.h: + +/usr/include/rpc/netdb.h: + +/usr/include/x86_64-linux-gnu/bits/netdb.h: + +llsphinxql.c: + +yysphinxql.h: + +yysphinxql.c: diff --git a/coreseek/csft-4.1/src/.deps/spelldump.Po b/coreseek/csft-4.1/src/.deps/spelldump.Po new file mode 100644 index 0000000..49f067d --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/spelldump.Po @@ -0,0 +1,339 @@ +spelldump.o: spelldump.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxutils.h /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxutils.h: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinx.Po b/coreseek/csft-4.1/src/.deps/sphinx.Po new file mode 100644 index 0000000..e18f74f --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinx.Po @@ -0,0 +1,636 @@ +sphinx.o: sphinx.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxstem.h sphinxquery.h sphinxutils.h sphinxfilter.h \ + sphinxint.h /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h sphinxsearch.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h /usr/include/expat.h \ + /usr/include/expat_external.h /usr/include/iconv.h /usr/include/zlib.h \ + /usr/include/zconf.h /usr/include/zlibdefs.h \ + /usr/include/x86_64-linux-gnu/sys/time.h tokenizer_zhcn.h \ + /usr/include/c++/4.6/fstream /usr/include/c++/4.6/istream \ + /usr/include/c++/4.6/ios /usr/include/c++/4.6/iosfwd \ + /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc /usr/include/c++/4.6/ostream \ + /usr/include/c++/4.6/bits/ostream.tcc \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/codecvt.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + /usr/include/c++/4.6/map /usr/include/c++/4.6/bits/stl_tree.h \ + /usr/include/c++/4.6/bits/stl_map.h \ + /usr/include/c++/4.6/bits/stl_multimap.h \ + /usr/local/mmseg3/include/mmseg/SegmenterManager.h \ + /usr/local/mmseg3/include/mmseg/freelist.h \ + /usr/local/mmseg3/include/mmseg/UnigramDict.h \ + /usr/local/mmseg3/include/mmseg/darts.h \ + /usr/local/mmseg3/include/mmseg/csr_typedefs.h \ + /usr/local/mmseg3/include/mmseg/SynonymsDict.h \ + /usr/local/mmseg3/include/mmseg/csr_mmap.h \ + /usr/local/mmseg3/include/mmseg/ThesaurusDict.h \ + /usr/local/mmseg3/include/mmseg/csr.h \ + /usr/local/mmseg3/include/mmseg/Utf8_16.h \ + /usr/local/mmseg3/include/mmseg/StringTokenizer.h \ + /usr/local/mmseg3/include/mmseg/Segmenter.h \ + /usr/include/c++/4.6/ext/hash_map \ + /usr/include/c++/4.6/backward/backward_warning.h \ + /usr/include/c++/4.6/backward/hashtable.h /usr/include/c++/4.6/iterator \ + /usr/include/c++/4.6/bits/stream_iterator.h \ + /usr/include/c++/4.6/backward/hash_fun.h \ + /usr/local/mmseg3/include/mmseg/SegmentPkg.h \ + /usr/local/mmseg3/include/mmseg/Singleton.h \ + /usr/local/mmseg3/include/mmseg/tolowercase.h \ + /usr/local/mmseg3/include/mmseg/mmthunk.h \ + /usr/local/mmseg3/include/mmseg/UnigramCorpusReader.h \ + /usr/local/mmseg3/include/mmseg/ICorpusReader.h \ + /usr/local/mmseg3/include/mmseg/UnigramRecord.h \ + /usr/local/mmseg3/include/mmseg/Segmenter.h yysphinxselect.h \ + yysphinxselect.c + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxstem.h: + +sphinxquery.h: + +sphinxutils.h: + +sphinxfilter.h: + +sphinxint.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +sphinxsearch.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/expat.h: + +/usr/include/expat_external.h: + +/usr/include/iconv.h: + +/usr/include/zlib.h: + +/usr/include/zconf.h: + +/usr/include/zlibdefs.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +tokenizer_zhcn.h: + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +/usr/include/c++/4.6/map: + +/usr/include/c++/4.6/bits/stl_tree.h: + +/usr/include/c++/4.6/bits/stl_map.h: + +/usr/include/c++/4.6/bits/stl_multimap.h: + +/usr/local/mmseg3/include/mmseg/SegmenterManager.h: + +/usr/local/mmseg3/include/mmseg/freelist.h: + +/usr/local/mmseg3/include/mmseg/UnigramDict.h: + +/usr/local/mmseg3/include/mmseg/darts.h: + +/usr/local/mmseg3/include/mmseg/csr_typedefs.h: + +/usr/local/mmseg3/include/mmseg/SynonymsDict.h: + +/usr/local/mmseg3/include/mmseg/csr_mmap.h: + +/usr/local/mmseg3/include/mmseg/ThesaurusDict.h: + +/usr/local/mmseg3/include/mmseg/csr.h: + +/usr/local/mmseg3/include/mmseg/Utf8_16.h: + +/usr/local/mmseg3/include/mmseg/StringTokenizer.h: + +/usr/local/mmseg3/include/mmseg/Segmenter.h: + +/usr/include/c++/4.6/ext/hash_map: + +/usr/include/c++/4.6/backward/backward_warning.h: + +/usr/include/c++/4.6/backward/hashtable.h: + +/usr/include/c++/4.6/iterator: + +/usr/include/c++/4.6/bits/stream_iterator.h: + +/usr/include/c++/4.6/backward/hash_fun.h: + +/usr/local/mmseg3/include/mmseg/SegmentPkg.h: + +/usr/local/mmseg3/include/mmseg/Singleton.h: + +/usr/local/mmseg3/include/mmseg/tolowercase.h: + +/usr/local/mmseg3/include/mmseg/mmthunk.h: + +/usr/local/mmseg3/include/mmseg/UnigramCorpusReader.h: + +/usr/local/mmseg3/include/mmseg/ICorpusReader.h: + +/usr/local/mmseg3/include/mmseg/UnigramRecord.h: + +/usr/local/mmseg3/include/mmseg/Segmenter.h: + +yysphinxselect.h: + +yysphinxselect.c: diff --git a/coreseek/csft-4.1/src/.deps/sphinxexcerpt.Po b/coreseek/csft-4.1/src/.deps/sphinxexcerpt.Po new file mode 100644 index 0000000..b966ef7 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxexcerpt.Po @@ -0,0 +1,391 @@ +sphinxexcerpt.o: sphinxexcerpt.cpp sphinx.h sphinxstd.h \ + ../config/config.h /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxexcerpt.h sphinxutils.h sphinxsearch.h \ + sphinxquery.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxexcerpt.h: + +sphinxutils.h: + +sphinxsearch.h: + +sphinxquery.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxexpr.Po b/coreseek/csft-4.1/src/.deps/sphinxexpr.Po new file mode 100644 index 0000000..d3dd36d --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxexpr.Po @@ -0,0 +1,398 @@ +sphinxexpr.o: sphinxexpr.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxudf.h sphinxutils.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/sys/time.h /usr/include/dlfcn.h \ + /usr/include/x86_64-linux-gnu/bits/dlfcn.h yysphinxexpr.h yysphinxexpr.c + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxudf.h: + +sphinxutils.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/include/dlfcn.h: + +/usr/include/x86_64-linux-gnu/bits/dlfcn.h: + +yysphinxexpr.h: + +yysphinxexpr.c: diff --git a/coreseek/csft-4.1/src/.deps/sphinxfilter.Po b/coreseek/csft-4.1/src/.deps/sphinxfilter.Po new file mode 100644 index 0000000..297a539 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxfilter.Po @@ -0,0 +1,355 @@ +sphinxfilter.o: sphinxfilter.cpp sphinxfilter.h sphinx.h sphinxstd.h \ + ../config/config.h /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxint.h /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h + +sphinxfilter.h: + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxint.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxmetaphone.Po b/coreseek/csft-4.1/src/.deps/sphinxmetaphone.Po new file mode 100644 index 0000000..9b31bf3 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxmetaphone.Po @@ -0,0 +1,356 @@ +sphinxmetaphone.o: sphinxmetaphone.cpp sphinx.h sphinxstd.h \ + ../config/config.h /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxquery.Po b/coreseek/csft-4.1/src/.deps/sphinxquery.Po new file mode 100644 index 0000000..1487e51 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxquery.Po @@ -0,0 +1,341 @@ +sphinxquery.o: sphinxquery.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxquery.h sphinxutils.h yysphinxquery.h \ + yysphinxquery.c + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxquery.h: + +sphinxutils.h: + +yysphinxquery.h: + +yysphinxquery.c: diff --git a/coreseek/csft-4.1/src/.deps/sphinxrt.Po b/coreseek/csft-4.1/src/.deps/sphinxrt.Po new file mode 100644 index 0000000..a643c46 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxrt.Po @@ -0,0 +1,368 @@ +sphinxrt.o: sphinxrt.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h sphinxrt.h \ + sphinxutils.h sphinxsearch.h sphinxquery.h \ + /usr/include/x86_64-linux-gnu/sys/time.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +sphinxrt.h: + +sphinxutils.h: + +sphinxsearch.h: + +sphinxquery.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxsearch.Po b/coreseek/csft-4.1/src/.deps/sphinxsearch.Po new file mode 100644 index 0000000..a8b2f86 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxsearch.Po @@ -0,0 +1,386 @@ +sphinxsearch.o: sphinxsearch.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxsearch.h sphinxquery.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxsearch.h: + +sphinxquery.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxsort.Po b/coreseek/csft-4.1/src/.deps/sphinxsort.Po new file mode 100644 index 0000000..a000286 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxsort.Po @@ -0,0 +1,387 @@ +sphinxsort.o: sphinxsort.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/x86_64-linux-gnu/sys/time.h sphinxcustomsort.inl + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +sphinxcustomsort.inl: diff --git a/coreseek/csft-4.1/src/.deps/sphinxsoundex.Po b/coreseek/csft-4.1/src/.deps/sphinxsoundex.Po new file mode 100644 index 0000000..d0e9ce3 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxsoundex.Po @@ -0,0 +1,332 @@ +sphinxsoundex.o: sphinxsoundex.cpp sphinx.h sphinxstd.h \ + ../config/config.h /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxstd.Po b/coreseek/csft-4.1/src/.deps/sphinxstd.Po new file mode 100644 index 0000000..688bdbe --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxstd.Po @@ -0,0 +1,363 @@ +sphinxstd.o: sphinxstd.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxint.h sphinxfilter.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h sphinxutils.h \ + /usr/include/x86_64-linux-gnu/sys/time.h py_layer.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +sphinxutils.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +py_layer.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxstemcz.Po b/coreseek/csft-4.1/src/.deps/sphinxstemcz.Po new file mode 100644 index 0000000..03e4dca --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxstemcz.Po @@ -0,0 +1,332 @@ +sphinxstemcz.o: sphinxstemcz.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxstemen.Po b/coreseek/csft-4.1/src/.deps/sphinxstemen.Po new file mode 100644 index 0000000..e038b03 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxstemen.Po @@ -0,0 +1,332 @@ +sphinxstemen.o: sphinxstemen.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: diff --git a/coreseek/csft-4.1/src/.deps/sphinxstemru.Po b/coreseek/csft-4.1/src/.deps/sphinxstemru.Po new file mode 100644 index 0000000..60f0b3f --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxstemru.Po @@ -0,0 +1,334 @@ +sphinxstemru.o: sphinxstemru.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxstemru.inl + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxstemru.inl: diff --git a/coreseek/csft-4.1/src/.deps/sphinxutils.Po b/coreseek/csft-4.1/src/.deps/sphinxutils.Po new file mode 100644 index 0000000..a26705c --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/sphinxutils.Po @@ -0,0 +1,382 @@ +sphinxutils.o: sphinxutils.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxutils.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h /usr/include/execinfo.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/sys/resource.h \ + /usr/include/x86_64-linux-gnu/bits/resource.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxutils.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/include/execinfo.h: + +/usr/include/x86_64-linux-gnu/sys/wait.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/x86_64-linux-gnu/sys/resource.h: + +/usr/include/x86_64-linux-gnu/bits/resource.h: diff --git a/coreseek/csft-4.1/src/.deps/tests.Po b/coreseek/csft-4.1/src/.deps/tests.Po new file mode 100644 index 0000000..3cdb0fa --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/tests.Po @@ -0,0 +1,390 @@ +tests.o: tests.cpp sphinx.h sphinxstd.h ../config/config.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + /usr/include/ctype.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h \ + /usr/include/stdint.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h sphinxexpr.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/c++/4.6/cstdio /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/mysql/mysql.h \ + /usr/include/mysql/mysql_version.h /usr/include/mysql/mysql_com.h \ + /usr/include/mysql/mysql_time.h /usr/include/mysql/my_list.h \ + /usr/include/mysql/typelib.h /usr/include/mysql/my_alloc.h \ + sphinxversion.h sphinxutils.h sphinxquery.h sphinxrt.h sphinxint.h \ + sphinxfilter.h /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h sphinxstem.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/c++/4.6/cstdio: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +sphinxutils.h: + +sphinxquery.h: + +sphinxrt.h: + +sphinxint.h: + +sphinxfilter.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +sphinxstem.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: diff --git a/coreseek/csft-4.1/src/.deps/tokenizer_zhcn.Po b/coreseek/csft-4.1/src/.deps/tokenizer_zhcn.Po new file mode 100644 index 0000000..9f1c120 --- /dev/null +++ b/coreseek/csft-4.1/src/.deps/tokenizer_zhcn.Po @@ -0,0 +1,586 @@ +tokenizer_zhcn.o: tokenizer_zhcn.cpp /usr/include/c++/4.6/fstream \ + /usr/include/c++/4.6/istream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/iosfwd \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc /usr/include/c++/4.6/ostream \ + /usr/include/c++/4.6/bits/ostream.tcc \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/codecvt.h /usr/include/c++/4.6/cstdio \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + /usr/include/c++/4.6/algorithm /usr/include/c++/4.6/utility \ + /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h \ + /usr/include/c++/4.6/bits/stl_construct.h /usr/include/c++/4.6/map \ + /usr/include/c++/4.6/bits/stl_tree.h /usr/include/c++/4.6/bits/stl_map.h \ + /usr/include/c++/4.6/bits/stl_multimap.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h sphinx.h sphinxstd.h \ + ../config/config.h /usr/include/assert.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/inttypes.h /usr/include/x86_64-linux-gnu/sys/mman.h \ + /usr/include/x86_64-linux-gnu/bits/mman.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + sphinxexpr.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h sph_darts.h \ + /usr/include/c++/4.6/vector \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/cstring \ + /usr/include/mysql/mysql.h /usr/include/mysql/mysql_version.h \ + /usr/include/mysql/mysql_com.h /usr/include/mysql/mysql_time.h \ + /usr/include/mysql/my_list.h /usr/include/mysql/typelib.h \ + /usr/include/mysql/my_alloc.h sphinxversion.h \ + /usr/local/mmseg3/include/mmseg/SegmenterManager.h \ + /usr/local/mmseg3/include/mmseg/freelist.h \ + /usr/local/mmseg3/include/mmseg/UnigramDict.h \ + /usr/local/mmseg3/include/mmseg/darts.h \ + /usr/local/mmseg3/include/mmseg/csr_typedefs.h \ + /usr/local/mmseg3/include/mmseg/SynonymsDict.h \ + /usr/local/mmseg3/include/mmseg/csr_mmap.h \ + /usr/local/mmseg3/include/mmseg/ThesaurusDict.h \ + /usr/local/mmseg3/include/mmseg/csr.h \ + /usr/local/mmseg3/include/mmseg/Utf8_16.h \ + /usr/local/mmseg3/include/mmseg/StringTokenizer.h \ + /usr/local/mmseg3/include/mmseg/Segmenter.h \ + /usr/include/c++/4.6/ext/hash_map \ + /usr/include/c++/4.6/backward/backward_warning.h \ + /usr/include/c++/4.6/backward/hashtable.h /usr/include/c++/4.6/iterator \ + /usr/include/c++/4.6/bits/stream_iterator.h \ + /usr/include/c++/4.6/backward/hash_fun.h \ + /usr/local/mmseg3/include/mmseg/SegmentPkg.h \ + /usr/local/mmseg3/include/mmseg/Singleton.h \ + /usr/local/mmseg3/include/mmseg/tolowercase.h \ + /usr/local/mmseg3/include/mmseg/mmthunk.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/local/mmseg3/include/mmseg/UnigramCorpusReader.h \ + /usr/local/mmseg3/include/mmseg/ICorpusReader.h \ + /usr/local/mmseg3/include/mmseg/UnigramRecord.h \ + /usr/local/mmseg3/include/mmseg/Segmenter.h tokenizer_zhcn.h \ + /usr/include/iconv.h + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/cstdio: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/map: + +/usr/include/c++/4.6/bits/stl_tree.h: + +/usr/include/c++/4.6/bits/stl_map.h: + +/usr/include/c++/4.6/bits/stl_multimap.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +sphinx.h: + +sphinxstd.h: + +../config/config.h: + +/usr/include/assert.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/inttypes.h: + +/usr/include/x86_64-linux-gnu/sys/mman.h: + +/usr/include/x86_64-linux-gnu/bits/mman.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +sphinxexpr.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +sph_darts.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/cstring: + +/usr/include/mysql/mysql.h: + +/usr/include/mysql/mysql_version.h: + +/usr/include/mysql/mysql_com.h: + +/usr/include/mysql/mysql_time.h: + +/usr/include/mysql/my_list.h: + +/usr/include/mysql/typelib.h: + +/usr/include/mysql/my_alloc.h: + +sphinxversion.h: + +/usr/local/mmseg3/include/mmseg/SegmenterManager.h: + +/usr/local/mmseg3/include/mmseg/freelist.h: + +/usr/local/mmseg3/include/mmseg/UnigramDict.h: + +/usr/local/mmseg3/include/mmseg/darts.h: + +/usr/local/mmseg3/include/mmseg/csr_typedefs.h: + +/usr/local/mmseg3/include/mmseg/SynonymsDict.h: + +/usr/local/mmseg3/include/mmseg/csr_mmap.h: + +/usr/local/mmseg3/include/mmseg/ThesaurusDict.h: + +/usr/local/mmseg3/include/mmseg/csr.h: + +/usr/local/mmseg3/include/mmseg/Utf8_16.h: + +/usr/local/mmseg3/include/mmseg/StringTokenizer.h: + +/usr/local/mmseg3/include/mmseg/Segmenter.h: + +/usr/include/c++/4.6/ext/hash_map: + +/usr/include/c++/4.6/backward/backward_warning.h: + +/usr/include/c++/4.6/backward/hashtable.h: + +/usr/include/c++/4.6/iterator: + +/usr/include/c++/4.6/bits/stream_iterator.h: + +/usr/include/c++/4.6/backward/hash_fun.h: + +/usr/local/mmseg3/include/mmseg/SegmentPkg.h: + +/usr/local/mmseg3/include/mmseg/Singleton.h: + +/usr/local/mmseg3/include/mmseg/tolowercase.h: + +/usr/local/mmseg3/include/mmseg/mmthunk.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/local/mmseg3/include/mmseg/UnigramCorpusReader.h: + +/usr/local/mmseg3/include/mmseg/ICorpusReader.h: + +/usr/local/mmseg3/include/mmseg/UnigramRecord.h: + +/usr/local/mmseg3/include/mmseg/Segmenter.h: + +tokenizer_zhcn.h: + +/usr/include/iconv.h: diff --git a/coreseek/csft-4.1/src/Makefile b/coreseek/csft-4.1/src/Makefile new file mode 100644 index 0000000..fad0328 --- /dev/null +++ b/coreseek/csft-4.1/src/Makefile @@ -0,0 +1,620 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# src/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + +pkgdatadir = $(datadir)/sphinx +pkgincludedir = $(includedir)/sphinx +pkglibdir = $(libdir)/sphinx +pkglibexecdir = $(libexecdir)/sphinx +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +bin_PROGRAMS = indexer$(EXEEXT) searchd$(EXEEXT) search$(EXEEXT) \ + spelldump$(EXEEXT) indextool$(EXEEXT) +noinst_PROGRAMS = tests$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +libsphinx_a_AR = $(AR) $(ARFLAGS) +libsphinx_a_LIBADD = +am__libsphinx_a_SOURCES_DIST = sphinx.cpp sphinxexcerpt.cpp \ + sphinxquery.cpp sphinxsoundex.cpp sphinxmetaphone.cpp \ + sphinxstemen.cpp sphinxstemru.cpp sphinxstemcz.cpp \ + sphinxutils.cpp md5.cpp sphinxstd.cpp sphinxsort.cpp \ + sphinxexpr.cpp sphinxfilter.cpp sphinxsearch.cpp sphinxrt.cpp \ + py_helper.cpp py_layer.cpp py_source.cpp tokenizer_zhcn.cpp +am__objects_1 = sphinx.$(OBJEXT) sphinxexcerpt.$(OBJEXT) \ + sphinxquery.$(OBJEXT) sphinxsoundex.$(OBJEXT) \ + sphinxmetaphone.$(OBJEXT) sphinxstemen.$(OBJEXT) \ + sphinxstemru.$(OBJEXT) sphinxstemcz.$(OBJEXT) \ + sphinxutils.$(OBJEXT) md5.$(OBJEXT) sphinxstd.$(OBJEXT) \ + sphinxsort.$(OBJEXT) sphinxexpr.$(OBJEXT) \ + sphinxfilter.$(OBJEXT) sphinxsearch.$(OBJEXT) \ + sphinxrt.$(OBJEXT) +#am__objects_2 = py_helper.$(OBJEXT) \ +# py_layer.$(OBJEXT) py_source.$(OBJEXT) +am__objects_3 = tokenizer_zhcn.$(OBJEXT) +am_libsphinx_a_OBJECTS = $(am__objects_1) $(am__objects_2) \ + $(am__objects_3) +libsphinx_a_OBJECTS = $(am_libsphinx_a_OBJECTS) +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) +am_indexer_OBJECTS = indexer.$(OBJEXT) +indexer_OBJECTS = $(am_indexer_OBJECTS) +indexer_LDADD = $(LDADD) +#am__DEPENDENCIES_1 = \ +# $(top_srcdir)/libstemmer_c/libstemmer.a +am__DEPENDENCIES_2 = +am__DEPENDENCIES_3 = libsphinx.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_2) +indexer_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_indextool_OBJECTS = indextool.$(OBJEXT) +indextool_OBJECTS = $(am_indextool_OBJECTS) +indextool_LDADD = $(LDADD) +indextool_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_search_OBJECTS = search.$(OBJEXT) +search_OBJECTS = $(am_search_OBJECTS) +search_LDADD = $(LDADD) +search_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_searchd_OBJECTS = searchd.$(OBJEXT) +searchd_OBJECTS = $(am_searchd_OBJECTS) +searchd_LDADD = $(LDADD) +searchd_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_spelldump_OBJECTS = spelldump.$(OBJEXT) +spelldump_OBJECTS = $(am_spelldump_OBJECTS) +spelldump_LDADD = $(LDADD) +spelldump_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_tests_OBJECTS = tests.$(OBJEXT) +tests_OBJECTS = $(am_tests_OBJECTS) +tests_LDADD = $(LDADD) +tests_DEPENDENCIES = $(am__DEPENDENCIES_3) +DEFAULT_INCLUDES = -I. -I$(top_builddir)/config +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +SOURCES = $(libsphinx_a_SOURCES) $(indexer_SOURCES) \ + $(indextool_SOURCES) $(search_SOURCES) $(searchd_SOURCES) \ + $(spelldump_SOURCES) $(tests_SOURCES) +DIST_SOURCES = $(am__libsphinx_a_SOURCES_DIST) $(indexer_SOURCES) \ + $(indextool_SOURCES) $(search_SOURCES) $(searchd_SOURCES) \ + $(spelldump_SOURCES) $(tests_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run aclocal-1.11 +AMTAR = $${TAR-tar} +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run automake-1.11 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG +CONFDIR = /usr/local/coreseek/var +CPP = gcc -E +CPPFLAGS = -I/usr/local/include -pthread -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -I/usr/local/mmseg3/include/mmseg/ +CXX = g++ +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBOBJS = +LIBRT = -lrt +LIBS = -ldl -lm -lz -lexpat -L/usr/local/lib -lrt -lpthread +LTLIBOBJS = +MAINT = # +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +MMSEG_CFLAGS = -I/usr/local/mmseg3/include/mmseg/ +MMSEG_LIBS = -L/usr/local/mmseg3/lib/ -lmmseg +MYSQL_CFLAGS = -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g +MYSQL_LIBS = -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl +OBJEXT = o +PACKAGE = sphinx +PACKAGE_BUGREPORT = shodan(at)shodan.ru +PACKAGE_NAME = sphinx +PACKAGE_STRING = sphinx 1.11 +PACKAGE_TARNAME = sphinx +PACKAGE_URL = +PACKAGE_VERSION = 1.11 +PATH_SEPARATOR = : +PGSQL_CFLAGS = +PGSQL_LIBS = +PYTHON = /usr/bin/python +PYTHON_CPPFLAGS = +PYTHON_EXEC_PREFIX = ${exec_prefix} +PYTHON_LIBS = +PYTHON_PLATFORM = linux2 +PYTHON_PREFIX = ${prefix} +PYTHON_VERSION = 2.7 +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/bash +STRIP = +VERSION = 1.11 +abs_builddir = /home/coreseek/coreseek-4.1-beta/csft-4.1/src +abs_srcdir = /home/coreseek/coreseek-4.1-beta/csft-4.1/src +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/csft-4.1 +ac_ct_CC = gcc +ac_ct_CXX = g++ +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build_alias = +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host_alias = +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/csft-4.1/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +pgconfig = +pkgpyexecdir = ${pyexecdir}/sphinx +pkgpythondir = ${pythondir}/sphinx +prefix = /usr/local/coreseek +program_transform_name = s,x,x, +psdir = ${docdir} +pyexecdir = ${exec_prefix}/lib/python2.7/site-packages +pythondir = ${prefix}/lib/python2.7/site-packages +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +SRC_SPHINX = sphinx.cpp sphinxexcerpt.cpp sphinxquery.cpp \ + sphinxsoundex.cpp sphinxmetaphone.cpp sphinxstemen.cpp sphinxstemru.cpp sphinxstemcz.cpp \ + sphinxutils.cpp md5.cpp sphinxstd.cpp sphinxsort.cpp sphinxexpr.cpp sphinxfilter.cpp \ + sphinxsearch.cpp sphinxrt.cpp + +SRC_MMSEG = tokenizer_zhcn.cpp +#SRC_PYTHONLAYER = py_helper.cpp py_layer.cpp py_source.cpp +noinst_LIBRARIES = libsphinx.a +libsphinx_a_SOURCES = $(SRC_SPHINX) $(SRC_PYTHONLAYER) $(SRC_MMSEG) +indexer_SOURCES = indexer.cpp +searchd_SOURCES = searchd.cpp +search_SOURCES = search.cpp +spelldump_SOURCES = spelldump.cpp +indextool_SOURCES = indextool.cpp +tests_SOURCES = tests.cpp +BUILT_SOURCES = extract-version +LIBSTEMMER_LIBS = +#LIBSTEMMER_LIBS = $(top_srcdir)/libstemmer_c/libstemmer.a +AM_CPPFLAGS = -DSYSCONFDIR="\"$(sysconfdir)\"" -DDATADIR="\"$(localstatedir)/data\"" +#AM_CPPFLAGS = -I$(top_srcdir)/libstemmer_c/include -DSYSCONFDIR="\"$(sysconfdir)\"" -DDATADIR="\"$(localstatedir)/data\"" +COMMON_LIBS = libsphinx.a $(LIBSTEMMER_LIBS) $(MYSQL_LIBS) $(PGSQL_LIBS) $(MMSEG_LIBS) +LDADD = $(COMMON_LIBS) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o .obj +$(srcdir)/Makefile.in: # $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: # $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): # $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libsphinx.a: $(libsphinx_a_OBJECTS) $(libsphinx_a_DEPENDENCIES) $(EXTRA_libsphinx_a_DEPENDENCIES) + -rm -f libsphinx.a + $(libsphinx_a_AR) libsphinx.a $(libsphinx_a_OBJECTS) $(libsphinx_a_LIBADD) + $(RANLIB) libsphinx.a +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +indexer$(EXEEXT): $(indexer_OBJECTS) $(indexer_DEPENDENCIES) $(EXTRA_indexer_DEPENDENCIES) + @rm -f indexer$(EXEEXT) + $(CXXLINK) $(indexer_OBJECTS) $(indexer_LDADD) $(LIBS) +indextool$(EXEEXT): $(indextool_OBJECTS) $(indextool_DEPENDENCIES) $(EXTRA_indextool_DEPENDENCIES) + @rm -f indextool$(EXEEXT) + $(CXXLINK) $(indextool_OBJECTS) $(indextool_LDADD) $(LIBS) +search$(EXEEXT): $(search_OBJECTS) $(search_DEPENDENCIES) $(EXTRA_search_DEPENDENCIES) + @rm -f search$(EXEEXT) + $(CXXLINK) $(search_OBJECTS) $(search_LDADD) $(LIBS) +searchd$(EXEEXT): $(searchd_OBJECTS) $(searchd_DEPENDENCIES) $(EXTRA_searchd_DEPENDENCIES) + @rm -f searchd$(EXEEXT) + $(CXXLINK) $(searchd_OBJECTS) $(searchd_LDADD) $(LIBS) +spelldump$(EXEEXT): $(spelldump_OBJECTS) $(spelldump_DEPENDENCIES) $(EXTRA_spelldump_DEPENDENCIES) + @rm -f spelldump$(EXEEXT) + $(CXXLINK) $(spelldump_OBJECTS) $(spelldump_LDADD) $(LIBS) +tests$(EXEEXT): $(tests_OBJECTS) $(tests_DEPENDENCIES) $(EXTRA_tests_DEPENDENCIES) + @rm -f tests$(EXEEXT) + $(CXXLINK) $(tests_OBJECTS) $(tests_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/indexer.Po +include ./$(DEPDIR)/indextool.Po +include ./$(DEPDIR)/md5.Po +include ./$(DEPDIR)/py_helper.Po +include ./$(DEPDIR)/py_layer.Po +include ./$(DEPDIR)/py_source.Po +include ./$(DEPDIR)/search.Po +include ./$(DEPDIR)/searchd.Po +include ./$(DEPDIR)/spelldump.Po +include ./$(DEPDIR)/sphinx.Po +include ./$(DEPDIR)/sphinxexcerpt.Po +include ./$(DEPDIR)/sphinxexpr.Po +include ./$(DEPDIR)/sphinxfilter.Po +include ./$(DEPDIR)/sphinxmetaphone.Po +include ./$(DEPDIR)/sphinxquery.Po +include ./$(DEPDIR)/sphinxrt.Po +include ./$(DEPDIR)/sphinxsearch.Po +include ./$(DEPDIR)/sphinxsort.Po +include ./$(DEPDIR)/sphinxsoundex.Po +include ./$(DEPDIR)/sphinxstd.Po +include ./$(DEPDIR)/sphinxstemcz.Po +include ./$(DEPDIR)/sphinxstemen.Po +include ./$(DEPDIR)/sphinxstemru.Po +include ./$(DEPDIR)/sphinxutils.Po +include ./$(DEPDIR)/tests.Po +include ./$(DEPDIR)/tokenizer_zhcn.Po + +.cpp.o: + $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: + $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ + distclean distclean-compile distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-binPROGRAMS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags uninstall uninstall-am uninstall-binPROGRAMS + +.PHONY: extract-version +extract-version: + /bin/sh svnxrev.sh .. + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/csft-4.1/src/Makefile.am b/coreseek/csft-4.1/src/Makefile.am new file mode 100755 index 0000000..ae0a2e5 --- /dev/null +++ b/coreseek/csft-4.1/src/Makefile.am @@ -0,0 +1,41 @@ +SRC_SPHINX = sphinx.cpp sphinxexcerpt.cpp sphinxquery.cpp \ + sphinxsoundex.cpp sphinxmetaphone.cpp sphinxstemen.cpp sphinxstemru.cpp sphinxstemcz.cpp \ + sphinxutils.cpp md5.cpp sphinxstd.cpp sphinxsort.cpp sphinxexpr.cpp sphinxfilter.cpp \ + sphinxsearch.cpp sphinxrt.cpp + +if USE_MMSEG +SRC_MMSEG = tokenizer_zhcn.cpp +endif + +if USE_PYTHON +SRC_PYTHONLAYER = py_helper.cpp py_layer.cpp py_source.cpp +endif + +noinst_LIBRARIES = libsphinx.a +libsphinx_a_SOURCES = $(SRC_SPHINX) $(SRC_PYTHONLAYER) $(SRC_MMSEG) + +bin_PROGRAMS = indexer searchd search spelldump indextool +noinst_PROGRAMS = tests + +indexer_SOURCES = indexer.cpp +searchd_SOURCES = searchd.cpp +search_SOURCES = search.cpp +spelldump_SOURCES = spelldump.cpp +indextool_SOURCES = indextool.cpp +tests_SOURCES = tests.cpp + +BUILT_SOURCES = extract-version +.PHONY: extract-version +extract-version: + /bin/sh svnxrev.sh .. + +if USE_LIBSTEMMER +LIBSTEMMER_LIBS = $(top_srcdir)/libstemmer_c/libstemmer.a +AM_CPPFLAGS = -I$(top_srcdir)/libstemmer_c/include -DSYSCONFDIR="\"$(sysconfdir)\"" -DDATADIR="\"$(localstatedir)/data\"" +else +LIBSTEMMER_LIBS = +AM_CPPFLAGS = -DSYSCONFDIR="\"$(sysconfdir)\"" -DDATADIR="\"$(localstatedir)/data\"" +endif + +COMMON_LIBS = libsphinx.a $(LIBSTEMMER_LIBS) $(MYSQL_LIBS) $(PGSQL_LIBS) $(MMSEG_LIBS) +LDADD = $(COMMON_LIBS) diff --git a/coreseek/csft-4.1/src/Makefile.in b/coreseek/csft-4.1/src/Makefile.in new file mode 100644 index 0000000..78a17f7 --- /dev/null +++ b/coreseek/csft-4.1/src/Makefile.in @@ -0,0 +1,620 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +bin_PROGRAMS = indexer$(EXEEXT) searchd$(EXEEXT) search$(EXEEXT) \ + spelldump$(EXEEXT) indextool$(EXEEXT) +noinst_PROGRAMS = tests$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +libsphinx_a_AR = $(AR) $(ARFLAGS) +libsphinx_a_LIBADD = +am__libsphinx_a_SOURCES_DIST = sphinx.cpp sphinxexcerpt.cpp \ + sphinxquery.cpp sphinxsoundex.cpp sphinxmetaphone.cpp \ + sphinxstemen.cpp sphinxstemru.cpp sphinxstemcz.cpp \ + sphinxutils.cpp md5.cpp sphinxstd.cpp sphinxsort.cpp \ + sphinxexpr.cpp sphinxfilter.cpp sphinxsearch.cpp sphinxrt.cpp \ + py_helper.cpp py_layer.cpp py_source.cpp tokenizer_zhcn.cpp +am__objects_1 = sphinx.$(OBJEXT) sphinxexcerpt.$(OBJEXT) \ + sphinxquery.$(OBJEXT) sphinxsoundex.$(OBJEXT) \ + sphinxmetaphone.$(OBJEXT) sphinxstemen.$(OBJEXT) \ + sphinxstemru.$(OBJEXT) sphinxstemcz.$(OBJEXT) \ + sphinxutils.$(OBJEXT) md5.$(OBJEXT) sphinxstd.$(OBJEXT) \ + sphinxsort.$(OBJEXT) sphinxexpr.$(OBJEXT) \ + sphinxfilter.$(OBJEXT) sphinxsearch.$(OBJEXT) \ + sphinxrt.$(OBJEXT) +@USE_PYTHON_TRUE@am__objects_2 = py_helper.$(OBJEXT) \ +@USE_PYTHON_TRUE@ py_layer.$(OBJEXT) py_source.$(OBJEXT) +@USE_MMSEG_TRUE@am__objects_3 = tokenizer_zhcn.$(OBJEXT) +am_libsphinx_a_OBJECTS = $(am__objects_1) $(am__objects_2) \ + $(am__objects_3) +libsphinx_a_OBJECTS = $(am_libsphinx_a_OBJECTS) +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) +am_indexer_OBJECTS = indexer.$(OBJEXT) +indexer_OBJECTS = $(am_indexer_OBJECTS) +indexer_LDADD = $(LDADD) +@USE_LIBSTEMMER_TRUE@am__DEPENDENCIES_1 = \ +@USE_LIBSTEMMER_TRUE@ $(top_srcdir)/libstemmer_c/libstemmer.a +am__DEPENDENCIES_2 = +am__DEPENDENCIES_3 = libsphinx.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_2) +indexer_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_indextool_OBJECTS = indextool.$(OBJEXT) +indextool_OBJECTS = $(am_indextool_OBJECTS) +indextool_LDADD = $(LDADD) +indextool_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_search_OBJECTS = search.$(OBJEXT) +search_OBJECTS = $(am_search_OBJECTS) +search_LDADD = $(LDADD) +search_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_searchd_OBJECTS = searchd.$(OBJEXT) +searchd_OBJECTS = $(am_searchd_OBJECTS) +searchd_LDADD = $(LDADD) +searchd_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_spelldump_OBJECTS = spelldump.$(OBJEXT) +spelldump_OBJECTS = $(am_spelldump_OBJECTS) +spelldump_LDADD = $(LDADD) +spelldump_DEPENDENCIES = $(am__DEPENDENCIES_3) +am_tests_OBJECTS = tests.$(OBJEXT) +tests_OBJECTS = $(am_tests_OBJECTS) +tests_LDADD = $(LDADD) +tests_DEPENDENCIES = $(am__DEPENDENCIES_3) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/config +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ +SOURCES = $(libsphinx_a_SOURCES) $(indexer_SOURCES) \ + $(indextool_SOURCES) $(search_SOURCES) $(searchd_SOURCES) \ + $(spelldump_SOURCES) $(tests_SOURCES) +DIST_SOURCES = $(am__libsphinx_a_SOURCES_DIST) $(indexer_SOURCES) \ + $(indextool_SOURCES) $(search_SOURCES) $(searchd_SOURCES) \ + $(spelldump_SOURCES) $(tests_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CONFDIR = @CONFDIR@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBRT = @LIBRT@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MMSEG_CFLAGS = @MMSEG_CFLAGS@ +MMSEG_LIBS = @MMSEG_LIBS@ +MYSQL_CFLAGS = @MYSQL_CFLAGS@ +MYSQL_LIBS = @MYSQL_LIBS@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PGSQL_CFLAGS = @PGSQL_CFLAGS@ +PGSQL_LIBS = @PGSQL_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build_alias = @build_alias@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host_alias = @host_alias@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pgconfig = @pgconfig@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SRC_SPHINX = sphinx.cpp sphinxexcerpt.cpp sphinxquery.cpp \ + sphinxsoundex.cpp sphinxmetaphone.cpp sphinxstemen.cpp sphinxstemru.cpp sphinxstemcz.cpp \ + sphinxutils.cpp md5.cpp sphinxstd.cpp sphinxsort.cpp sphinxexpr.cpp sphinxfilter.cpp \ + sphinxsearch.cpp sphinxrt.cpp + +@USE_MMSEG_TRUE@SRC_MMSEG = tokenizer_zhcn.cpp +@USE_PYTHON_TRUE@SRC_PYTHONLAYER = py_helper.cpp py_layer.cpp py_source.cpp +noinst_LIBRARIES = libsphinx.a +libsphinx_a_SOURCES = $(SRC_SPHINX) $(SRC_PYTHONLAYER) $(SRC_MMSEG) +indexer_SOURCES = indexer.cpp +searchd_SOURCES = searchd.cpp +search_SOURCES = search.cpp +spelldump_SOURCES = spelldump.cpp +indextool_SOURCES = indextool.cpp +tests_SOURCES = tests.cpp +BUILT_SOURCES = extract-version +@USE_LIBSTEMMER_FALSE@LIBSTEMMER_LIBS = +@USE_LIBSTEMMER_TRUE@LIBSTEMMER_LIBS = $(top_srcdir)/libstemmer_c/libstemmer.a +@USE_LIBSTEMMER_FALSE@AM_CPPFLAGS = -DSYSCONFDIR="\"$(sysconfdir)\"" -DDATADIR="\"$(localstatedir)/data\"" +@USE_LIBSTEMMER_TRUE@AM_CPPFLAGS = -I$(top_srcdir)/libstemmer_c/include -DSYSCONFDIR="\"$(sysconfdir)\"" -DDATADIR="\"$(localstatedir)/data\"" +COMMON_LIBS = libsphinx.a $(LIBSTEMMER_LIBS) $(MYSQL_LIBS) $(PGSQL_LIBS) $(MMSEG_LIBS) +LDADD = $(COMMON_LIBS) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .cpp .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libsphinx.a: $(libsphinx_a_OBJECTS) $(libsphinx_a_DEPENDENCIES) $(EXTRA_libsphinx_a_DEPENDENCIES) + -rm -f libsphinx.a + $(libsphinx_a_AR) libsphinx.a $(libsphinx_a_OBJECTS) $(libsphinx_a_LIBADD) + $(RANLIB) libsphinx.a +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +indexer$(EXEEXT): $(indexer_OBJECTS) $(indexer_DEPENDENCIES) $(EXTRA_indexer_DEPENDENCIES) + @rm -f indexer$(EXEEXT) + $(CXXLINK) $(indexer_OBJECTS) $(indexer_LDADD) $(LIBS) +indextool$(EXEEXT): $(indextool_OBJECTS) $(indextool_DEPENDENCIES) $(EXTRA_indextool_DEPENDENCIES) + @rm -f indextool$(EXEEXT) + $(CXXLINK) $(indextool_OBJECTS) $(indextool_LDADD) $(LIBS) +search$(EXEEXT): $(search_OBJECTS) $(search_DEPENDENCIES) $(EXTRA_search_DEPENDENCIES) + @rm -f search$(EXEEXT) + $(CXXLINK) $(search_OBJECTS) $(search_LDADD) $(LIBS) +searchd$(EXEEXT): $(searchd_OBJECTS) $(searchd_DEPENDENCIES) $(EXTRA_searchd_DEPENDENCIES) + @rm -f searchd$(EXEEXT) + $(CXXLINK) $(searchd_OBJECTS) $(searchd_LDADD) $(LIBS) +spelldump$(EXEEXT): $(spelldump_OBJECTS) $(spelldump_DEPENDENCIES) $(EXTRA_spelldump_DEPENDENCIES) + @rm -f spelldump$(EXEEXT) + $(CXXLINK) $(spelldump_OBJECTS) $(spelldump_LDADD) $(LIBS) +tests$(EXEEXT): $(tests_OBJECTS) $(tests_DEPENDENCIES) $(EXTRA_tests_DEPENDENCIES) + @rm -f tests$(EXEEXT) + $(CXXLINK) $(tests_OBJECTS) $(tests_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indexer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indextool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/py_helper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/py_layer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/py_source.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/search.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/searchd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spelldump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxexcerpt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxexpr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxfilter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxmetaphone.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxquery.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxrt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxsearch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxsort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxsoundex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxstd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxstemcz.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxstemen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxstemru.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sphinxutils.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tokenizer_zhcn.Po@am__quote@ + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LIBRARIES) $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ + distclean distclean-compile distclean-generic distclean-tags \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-binPROGRAMS install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ + ps ps-am tags uninstall uninstall-am uninstall-binPROGRAMS + +.PHONY: extract-version +extract-version: + /bin/sh svnxrev.sh .. + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/csft-4.1/src/indexer b/coreseek/csft-4.1/src/indexer new file mode 100755 index 0000000..20d8c24 Binary files /dev/null and b/coreseek/csft-4.1/src/indexer differ diff --git a/coreseek/csft-4.1/src/indexer.cpp b/coreseek/csft-4.1/src/indexer.cpp new file mode 100755 index 0000000..d889796 --- /dev/null +++ b/coreseek/csft-4.1/src/indexer.cpp @@ -0,0 +1,1846 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxint.h" +#include "sphinxutils.h" +#include +#include +#include +#include +#include + +#include "py_layer.h" + +#if USE_WINDOWS + #define snprintf _snprintf + + #include + #include +#else + #include +#endif + +///////////////////////////////////////////////////////////////////////////// + +bool g_bQuiet = false; +bool g_bProgress = true; +bool g_bPrintQueries = false; + +const char * g_sBuildStops = NULL; +int g_iTopStops = 100; +bool g_bRotate = false; +bool g_bRotateEach = false; +bool g_bBuildFreqs = false; + +int g_iMemLimit = 0; +int g_iMaxXmlpipe2Field = 0; +int g_iWriteBuffer = 0; +int g_iMaxFileFieldBuffer = 1024*1024; + +ESphOnFileFieldError g_eOnFileFieldError = FFE_IGNORE_FIELD; + +const int EXT_COUNT = 8; +const char * g_dExt[EXT_COUNT] = { "sph", "spa", "spi", "spd", "spp", "spm", "spk", "sps" }; + +char g_sMinidump[256]; + +#define ROTATE_MIN_INTERVAL 100000 // rotate interval 100 ms + +///////////////////////////////////////////////////////////////////////////// +/* +// -- this block moved to sphinxutils.h -coreseek -pysource + +template < typename T > struct CSphMTFHashEntry +{ + CSphString m_sKey; + CSphMTFHashEntry * m_pNext; + int m_iSlot; + T m_tValue; +}; + + +template < typename T, int SIZE, class HASHFUNC > class CSphMTFHash +{ +public: + /// ctor + CSphMTFHash () + { + m_pData = new CSphMTFHashEntry * [ SIZE ]; + for ( int i=0; i * pHead = m_pData[i]; + while ( pHead ) + { + CSphMTFHashEntry * pNext = pHead->m_pNext; + SafeDelete ( pHead ); + pHead = pNext; + } + } + } + + /// add record to hash + /// OPTIMIZE: should pass T not by reference for simple types + T & Add ( const char * sKey, int iKeyLen, T & tValue ) + { + DWORD uHash = HASHFUNC::Hash ( sKey ) % SIZE; + + // find matching entry + CSphMTFHashEntry * pEntry = m_pData [ uHash ]; + CSphMTFHashEntry * pPrev = NULL; + while ( pEntry && strcmp ( sKey, pEntry->m_sKey.cstr() ) ) + { + pPrev = pEntry; + pEntry = pEntry->m_pNext; + } + + if ( !pEntry ) + { + // not found, add it, but don't MTF + pEntry = new CSphMTFHashEntry; + if ( iKeyLen ) + pEntry->m_sKey.SetBinary ( sKey, iKeyLen ); + else + pEntry->m_sKey = sKey; + pEntry->m_pNext = NULL; + pEntry->m_iSlot = (int)uHash; + pEntry->m_tValue = tValue; + if ( !pPrev ) + m_pData [ uHash ] = pEntry; + else + pPrev->m_pNext = pEntry; + } else + { + // MTF on access + if ( pPrev ) + { + pPrev->m_pNext = pEntry->m_pNext; + pEntry->m_pNext = m_pData [ uHash ]; + m_pData [ uHash ] = pEntry; + } + } + + return pEntry->m_tValue; + } + + /// find first non-empty entry + const CSphMTFHashEntry * FindFirst () + { + for ( int i=0; i * FindNext ( const CSphMTFHashEntry * pEntry ) + { + assert ( pEntry ); + if ( pEntry->m_pNext ) + return pEntry->m_pNext; + + for ( int i=1+pEntry->m_iSlot; i ** m_pData; +}; + +#define HASH_FOREACH(_it,_hash) \ + for ( _it=_hash.FindFirst(); _it; _it=_hash.FindNext(_it) ) +*/ +///////////////////////////////////////////////////////////////////////////// + +struct Word_t +{ + const char * m_sWord; + int m_iCount; +}; + + +inline bool operator < ( const Word_t & a, const Word_t & b) +{ + return a.m_iCount < b.m_iCount; +}; + + +class CSphStopwordBuilderDict : public CSphDict +{ +public: + CSphStopwordBuilderDict () {} + void Save ( const char * sOutput, int iTop, bool bFreqs ); + +public: + virtual SphWordID_t GetWordID ( BYTE * pWord ); + virtual SphWordID_t GetWordID ( const BYTE * pWord, int iLen, bool ); + + virtual void LoadStopwords ( const char *, ISphTokenizer * ) {} + virtual bool LoadWordforms ( const char *, ISphTokenizer *, const char * ) { return true; } + virtual bool SetMorphology ( const char *, bool, CSphString & ) { return true; } + + virtual void Setup ( const CSphDictSettings & tSettings ) { m_tSettings = tSettings; } + virtual const CSphDictSettings & GetSettings () const { return m_tSettings; } + virtual const CSphVector & GetStopwordsFileInfos () { return m_dSWFileInfos; } + virtual const CSphSavedFile & GetWordformsFileInfo () { return m_tWFFileInfo; } + virtual const CSphMultiformContainer * GetMultiWordforms () const { return NULL; } + + virtual bool IsStopWord ( const BYTE * ) const { return false; } + +protected: + struct HashFunc_t + { + static inline DWORD Hash ( const char * sKey ) + { + return sphCRC32 ( (const BYTE*)sKey ); + } + }; + +protected: + CSphMTFHash < int, 1048576, HashFunc_t > m_hWords; + + // fake setttings + CSphDictSettings m_tSettings; + CSphVector m_dSWFileInfos; + CSphSavedFile m_tWFFileInfo; +}; + + +void CSphStopwordBuilderDict::Save ( const char * sOutput, int iTop, bool bFreqs ) +{ + FILE * fp = fopen ( sOutput, "w+" ); + if ( !fp ) + return; + + CSphVector dTop; + dTop.Reserve ( 1024 ); + + const CSphMTFHashEntry * it; + HASH_FOREACH ( it, m_hWords ) + { + Word_t t; + t.m_sWord = it->m_sKey.cstr(); + t.m_iCount = it->m_tValue; + dTop.Add ( t ); + } + + dTop.RSort (); + + ARRAY_FOREACH ( i, dTop ) + { + if ( i>=iTop ) + break; + if ( bFreqs ) + fprintf ( fp, "%s %d\n", dTop[i].m_sWord, dTop[i].m_iCount ); + else + fprintf ( fp, "%s\n", dTop[i].m_sWord ); + } + + fclose ( fp ); +} + + +SphWordID_t CSphStopwordBuilderDict::GetWordID ( BYTE * pWord ) +{ + int iZero = 0; + m_hWords.Add ( (const char *)pWord, 0, iZero )++; + return 1; +} + + +SphWordID_t CSphStopwordBuilderDict::GetWordID ( const BYTE * pWord, int iLen, bool ) +{ + int iZero = 0; + m_hWords.Add ( (const char *)pWord, iLen, iZero )++; + return 1; +} + +///////////////////////////////////////////////////////////////////////////// + +void ShowProgress ( const CSphIndexProgress * pProgress, bool bPhaseEnd ) +{ + // if in quiet mode, do not show anything at all + // if in no-progress mode, only show phase ends + if ( g_bQuiet || ( !g_bProgress && !bPhaseEnd ) ) + return; + + fprintf ( stdout, "%s%c", pProgress->BuildMessage(), bPhaseEnd ? '\n' : '\r' ); + fflush ( stdout ); +} + +static void Logger ( ESphLogLevel eLevel, const char * sFmt, va_list ap ) +{ + if ( eLevel>=SPH_LOG_DEBUG ) + return; + + switch ( eLevel ) + { + case SPH_LOG_FATAL: fprintf ( stdout, "FATAL: " ); break; + case SPH_LOG_WARNING: fprintf ( stdout, "WARNING: " ); break; + case SPH_LOG_INFO: fprintf ( stdout, "WARNING: " ); break; + case SPH_LOG_DEBUG: // yes, I know that this branch will never execute because of the condition above. + case SPH_LOG_VERBOSE_DEBUG: + case SPH_LOG_VERY_VERBOSE_DEBUG: fprintf ( stdout, "DEBUG: " ); break; + } + + vfprintf ( stdout, sFmt, ap ); + fprintf ( stdout, "\n" ); +} + +///////////////////////////////////////////////////////////////////////////// + +/// parse multi-valued attr definition +bool ParseMultiAttr ( const char * sBuf, CSphColumnInfo & tAttr, const char * sSourceName ) +{ + // format is as follows: + // + // multi-valued-attr := ATTR-TYPE ATTR-NAME 'from' SOURCE-TYPE [;QUERY] [;RANGE-QUERY] + // ATTR-TYPE := 'uint' | 'timestamp' | 'bigint' + // SOURCE-TYPE := 'field' | 'query' | 'ranged-query' + + const char * sTok = NULL; + int iTokLen = -1; + +#define LOC_ERR(_arg,_pos) \ + { \ + if ( !*(_pos) ) \ + fprintf ( stdout, "ERROR: source '%s': unexpected end of line in sql_attr_multi.\n", sSourceName ); \ + else \ + fprintf ( stdout, "ERROR: source '%s': expected " _arg " in sql_attr_multi, got '%s'.\n", sSourceName, _pos ); \ + return false; \ + } +#define LOC_SPACE0() { while ( isspace(*sBuf) ) sBuf++; } +#define LOC_SPACE1() { if ( !isspace(*sBuf) ) LOC_ERR ( "token", sBuf ) ; LOC_SPACE0(); } +#define LOC_TOK() { sTok = sBuf; while ( sphIsAlpha(*sBuf) ) sBuf++; iTokLen = sBuf-sTok; } +#define LOC_TOKEQ(_arg) ( iTokLen==(int)strlen(_arg) && strncasecmp ( sTok, _arg, iTokLen )==0 ) +#define LOC_TEXT() { if ( *sBuf!=';') LOC_ERR ( "';'", sBuf ); sTok = ++sBuf; while ( *sBuf && *sBuf!=';' ) sBuf++; iTokLen = sBuf-sTok; } + + // handle ATTR-TYPE + LOC_SPACE0(); LOC_TOK(); + if ( LOC_TOKEQ("uint") ) tAttr.m_eAttrType = SPH_ATTR_UINT32SET; + else if ( LOC_TOKEQ("timestamp") ) tAttr.m_eAttrType = SPH_ATTR_UINT32SET; + else if ( LOC_TOKEQ("bigint") ) tAttr.m_eAttrType = SPH_ATTR_UINT64SET; + else LOC_ERR ( "attr type ('uint' or 'timestamp' or 'bigint')", sTok ); + + // handle ATTR-NAME + LOC_SPACE1(); LOC_TOK (); + if ( iTokLen ) tAttr.m_sName.SetBinary ( sTok, iTokLen ); + else LOC_ERR ( "attr name", sTok ); + + // handle 'from' + LOC_SPACE1(); LOC_TOK(); + if ( !LOC_TOKEQ("from") ) LOC_ERR ( "'from' keyword", sTok ); + + // handle SOURCE-TYPE + LOC_SPACE1(); LOC_TOK(); LOC_SPACE0(); + if ( LOC_TOKEQ("field") ) tAttr.m_eSrc = SPH_ATTRSRC_FIELD; + else if ( LOC_TOKEQ("query") ) tAttr.m_eSrc = SPH_ATTRSRC_QUERY; + else if ( LOC_TOKEQ("ranged-query") ) tAttr.m_eSrc = SPH_ATTRSRC_RANGEDQUERY; + else LOC_ERR ( "value source type ('field', or 'query', or 'ranged-query')", sTok ); + + if ( tAttr.m_eSrc==SPH_ATTRSRC_FIELD ) return true; + + // handle QUERY + LOC_TEXT(); + if ( iTokLen ) tAttr.m_sQuery.SetBinary ( sTok, iTokLen ); + else LOC_ERR ( "query", sTok ); + + if ( tAttr.m_eSrc==SPH_ATTRSRC_QUERY ) return true; + + // handle RANGE-QUERY + LOC_TEXT(); + if ( iTokLen ) tAttr.m_sQueryRange.SetBinary ( sTok, iTokLen ); + else LOC_ERR ( "range query", sTok ); + +#undef LOC_ERR +#undef LOC_SPACE0 +#undef LOC_SPACE1 +#undef LOC_TOK +#undef LOC_TOKEQ +#undef LOC_TEXT + + return true; +} + + +#define LOC_CHECK(_hash,_key,_msg,_add) \ + if (!( _hash.Exists ( _key ) )) \ + { \ + fprintf ( stdout, "ERROR: key '%s' not found " _msg "\n", _key, _add ); \ + return false; \ + } + +// get string +#define LOC_GETS(_arg,_key) \ + if ( hSource.Exists(_key) ) \ + _arg = hSource[_key]; + +// get int +#define LOC_GETI(_arg,_key) \ + if ( hSource.Exists(_key) && hSource[_key].intval() ) \ + _arg = hSource[_key].intval(); + +// get bool +#define LOC_GETB(_arg,_key) \ + if ( hSource.Exists(_key) ) \ + _arg = ( hSource[_key].intval()!=0 ); + +// get array of strings +#define LOC_GETA(_arg,_key) \ + for ( CSphVariant * pVal = hSource(_key); pVal; pVal = pVal->m_pNext ) \ + _arg.Add ( pVal->cstr() ); + +void SqlAttrsConfigure ( CSphSourceParams_SQL & tParams, const CSphVariant * pHead, ESphAttr eAttrType, const char * sSourceName, bool bIndexedAttr=false ) +{ + for ( const CSphVariant * pCur = pHead; pCur; pCur= pCur->m_pNext ) + { + CSphColumnInfo tCol ( pCur->cstr(), eAttrType ); + char * pColon = strchr ( const_cast ( tCol.m_sName.cstr() ), ':' ); + if ( pColon ) + { + *pColon = '\0'; + + if ( eAttrType==SPH_ATTR_INTEGER ) + { + int iBits = strtol ( pColon+1, NULL, 10 ); + if ( iBits<=0 || iBits>ROWITEM_BITS ) + { + fprintf ( stdout, "WARNING: source '%s': attribute '%s': invalid bitcount=%d (bitcount ignored)\n", + sSourceName, tCol.m_sName.cstr(), iBits ); + iBits = -1; + } + tCol.m_tLocator.m_iBitCount = iBits; + + } else + { + fprintf ( stdout, "WARNING: source '%s': attribute '%s': bitcount is only supported for integer types\n", + sSourceName, tCol.m_sName.cstr() ); + } + } + tParams.m_dAttrs.Add ( tCol ); + if ( bIndexedAttr ) + tParams.m_dAttrs.Last().m_bIndexed = true; + } +} + + +#if USE_ZLIB +bool ConfigureUnpack ( CSphVariant * pHead, ESphUnpackFormat eFormat, CSphSourceParams_SQL & tParams, const char * sSourceName ) +{ + for ( CSphVariant * pVal = pHead; pVal; pVal = pVal->m_pNext ) + { + CSphUnpackInfo & tUnpack = tParams.m_dUnpack.Add(); + tUnpack.m_sName = CSphString ( pVal->cstr() ); + tUnpack.m_eFormat = eFormat; + } + return true; +} + +#else + +bool ConfigureUnpack ( CSphVariant * pHead, ESphUnpackFormat, CSphSourceParams_SQL &, const char * sSourceName ) +{ + if ( pHead ) + { + fprintf ( stdout, "ERROR: source '%s': unpack is not supported, rebuild with zlib\n", sSourceName ); + return false; + } + return true; +} +#endif // USE_ZLIB + + +bool ParseJoinedField ( const char * sBuf, CSphJoinedField * pField, const char * sSourceName ) +{ + // sanity checks + assert ( pField ); + if ( !sBuf || !sBuf[0] ) + { + fprintf ( stdout, "ERROR: source '%s': sql_joined_field must not be empty.\n", sSourceName ); + return false; + } + +#define LOC_ERR(_exp) \ + { \ + fprintf ( stdout, "ERROR: source '%s': expected " _exp " in sql_joined_field, got '%s'.\n", sSourceName, sBuf ); \ + return false; \ + } +#define LOC_TEXT() { if ( *sBuf!=';') LOC_ERR ( "';'" ); sTmp = ++sBuf; while ( *sBuf && *sBuf!=';' ) sBuf++; iTokLen = sBuf-sTmp; } + + // parse field name + while ( isspace(*sBuf) ) + sBuf++; + + const char * sName = sBuf; + while ( sphIsAlpha(*sBuf) ) + sBuf++; + if ( sBuf==sName ) + LOC_ERR ( "field name" ); + pField->m_sName.SetBinary ( sName, sBuf-sName ); + + if ( !isspace(*sBuf) ) + LOC_ERR ( "space" ); + while ( isspace(*sBuf) ) + sBuf++; + + // parse 'from' + if ( strncasecmp ( sBuf, "from", 4 ) ) + LOC_ERR ( "'from'" ); + sBuf += 4; + + if ( !isspace(*sBuf) ) + LOC_ERR ( "space" ); + while ( isspace(*sBuf) ) + sBuf++; + + bool bGotRanged = false; + pField->m_bPayload = false; + + // parse 'query' + if ( strncasecmp ( sBuf, "payload-query", 13 )==0 ) + { + pField->m_bPayload = true; + sBuf += 13; + + } else if ( strncasecmp ( sBuf, "query", 5 )==0 ) + { + sBuf += 5; + + } else if ( strncasecmp ( sBuf, "ranged-query", 12 )==0 ) + { + bGotRanged = true; + sBuf += 12; + + } else + LOC_ERR ( "'query'" ); + + // parse ';' + while ( isspace(*sBuf) && *sBuf!=';' ) + sBuf++; + + if ( *sBuf!=';' ) + LOC_ERR ( "';'" ); + + // handle QUERY + const char * sTmp = sBuf; + int iTokLen = 0; + LOC_TEXT(); + if ( iTokLen ) + pField->m_sQuery.SetBinary ( sTmp, iTokLen ); + else + LOC_ERR ( "query" ); + + if ( !bGotRanged ) + return true; + + // handle RANGE-QUERY + LOC_TEXT(); + if ( iTokLen ) + pField->m_sRanged.SetBinary ( sTmp, iTokLen ); + else + LOC_ERR ( "range query" ); + +#undef LOC_ERR +#undef LOC_TEXT + + return true; +} + + +bool SqlParamsConfigure ( CSphSourceParams_SQL & tParams, const CSphConfigSection & hSource, const char * sSourceName ) +{ + if ( !hSource.Exists("odbc_dsn") ) // in case of odbc source, the host, user, pass and db are not mandatory, since they may be already defined in dsn string. + { + LOC_CHECK ( hSource, "sql_host", "in source '%s'", sSourceName ); + LOC_CHECK ( hSource, "sql_user", "in source '%s'", sSourceName ); + LOC_CHECK ( hSource, "sql_pass", "in source '%s'", sSourceName ); + LOC_CHECK ( hSource, "sql_db", "in source '%s'", sSourceName ); + } + LOC_CHECK ( hSource, "sql_query", "in source '%s'", sSourceName ); + + LOC_GETS ( tParams.m_sHost, "sql_host" ); + LOC_GETS ( tParams.m_sUser, "sql_user" ); + LOC_GETS ( tParams.m_sPass, "sql_pass" ); + LOC_GETS ( tParams.m_sDB, "sql_db" ); + LOC_GETI ( tParams.m_iPort, "sql_port" ); + + LOC_GETS ( tParams.m_sQuery, "sql_query" ); + LOC_GETA ( tParams.m_dQueryPre, "sql_query_pre" ); + LOC_GETA ( tParams.m_dQueryPost, "sql_query_post" ); + LOC_GETS ( tParams.m_sQueryRange, "sql_query_range" ); + LOC_GETA ( tParams.m_dQueryPostIndex, "sql_query_post_index" ); + LOC_GETI ( tParams.m_iRangeStep, "sql_range_step" ); + LOC_GETS ( tParams.m_sQueryKilllist, "sql_query_killlist" ); + + LOC_GETI ( tParams.m_iRangedThrottle, "sql_ranged_throttle" ); + + SqlAttrsConfigure ( tParams, hSource("sql_group_column"), SPH_ATTR_INTEGER, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_date_column"), SPH_ATTR_TIMESTAMP, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_str2ordinal_column"), SPH_ATTR_ORDINAL, sSourceName ); + + SqlAttrsConfigure ( tParams, hSource("sql_attr_uint"), SPH_ATTR_INTEGER, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_attr_timestamp"), SPH_ATTR_TIMESTAMP, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_attr_str2ordinal"), SPH_ATTR_ORDINAL, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_attr_bool"), SPH_ATTR_BOOL, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_attr_float"), SPH_ATTR_FLOAT, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_attr_bigint"), SPH_ATTR_BIGINT, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_attr_string"), SPH_ATTR_STRING, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_attr_str2wordcount"), SPH_ATTR_WORDCOUNT, sSourceName ); + SqlAttrsConfigure ( tParams, hSource("sql_field_string"), SPH_ATTR_STRING, sSourceName, true ); + SqlAttrsConfigure ( tParams, hSource("sql_field_str2wordcount"), SPH_ATTR_STRING, sSourceName, true ); + + LOC_GETA ( tParams.m_dFileFields, "sql_file_field" ); + + tParams.m_iMaxFileBufferSize = g_iMaxFileFieldBuffer; + tParams.m_iRefRangeStep = tParams.m_iRangeStep; + tParams.m_eOnFileFieldError = g_eOnFileFieldError; + + // unpack + if ( !ConfigureUnpack ( hSource("unpack_zlib"), SPH_UNPACK_ZLIB, tParams, sSourceName ) ) + return false; + + if ( !ConfigureUnpack ( hSource("unpack_mysqlcompress"), SPH_UNPACK_MYSQL_COMPRESS, tParams, sSourceName ) ) + return false; + + tParams.m_uUnpackMemoryLimit = hSource.GetSize ( "unpack_mysqlcompress_maxsize", 16777216 ); + + // parse multi-attrs + for ( CSphVariant * pVal = hSource("sql_attr_multi"); pVal; pVal = pVal->m_pNext ) + { + CSphColumnInfo tAttr; + if ( !ParseMultiAttr ( pVal->cstr(), tAttr, sSourceName ) ) + return false; + tParams.m_dAttrs.Add ( tAttr ); + } + + // parse joined fields + for ( CSphVariant * pVal = hSource("sql_joined_field"); pVal; pVal = pVal->m_pNext ) + if ( !ParseJoinedField ( pVal->cstr(), &tParams.m_dJoinedFields.Add(), sSourceName ) ) + return false; + + // make sure attr names are unique + ARRAY_FOREACH ( i, tParams.m_dAttrs ) + for ( int j = i + 1; j < tParams.m_dAttrs.GetLength(); j++ ) + { + const CSphString & sName = tParams.m_dAttrs[i].m_sName; + if ( sName==tParams.m_dAttrs[j].m_sName ) + { + fprintf ( stdout, "ERROR: duplicate attribute name: %s\n", sName.cstr() ); + return false; + } + } + + // additional checks + if ( tParams.m_iRangedThrottle<0 ) + { + fprintf ( stdout, "WARNING: sql_ranged_throttle must not be negative; throttling disabled\n" ); + tParams.m_iRangedThrottle = 0; + } + + // debug printer + if ( g_bPrintQueries ) + tParams.m_bPrintQueries = true; + + return true; +} + + +#if USE_PGSQL +CSphSource * SpawnSourcePgSQL ( const CSphConfigSection & hSource, const char * sSourceName ) +{ + assert ( hSource["type"]=="pgsql" ); + + CSphSourceParams_PgSQL tParams; + if ( !SqlParamsConfigure ( tParams, hSource, sSourceName ) ) + return NULL; + + LOC_GETS ( tParams.m_sClientEncoding, "sql_client_encoding" ); + + CSphSource_PgSQL * pSrcPgSQL = new CSphSource_PgSQL ( sSourceName ); + if ( !pSrcPgSQL->Setup ( tParams ) ) + SafeDelete ( pSrcPgSQL ); + + return pSrcPgSQL; +} +#endif // USE_PGSQL + + +#if USE_MYSQL +CSphSource * SpawnSourceMySQL ( const CSphConfigSection & hSource, const char * sSourceName ) +{ + assert ( hSource["type"]=="mysql" ); + + CSphSourceParams_MySQL tParams; + if ( !SqlParamsConfigure ( tParams, hSource, sSourceName ) ) + return NULL; + + LOC_GETS ( tParams.m_sUsock, "sql_sock" ); + LOC_GETI ( tParams.m_iFlags, "mysql_connect_flags" ); + LOC_GETS ( tParams.m_sSslKey, "mysql_ssl_key" ); + LOC_GETS ( tParams.m_sSslCert, "mysql_ssl_cert" ); + LOC_GETS ( tParams.m_sSslCA, "mysql_ssl_ca" ); + + CSphSource_MySQL * pSrcMySQL = new CSphSource_MySQL ( sSourceName ); + if ( !pSrcMySQL->Setup ( tParams ) ) + SafeDelete ( pSrcMySQL ); + + return pSrcMySQL; +} +#endif // USE_MYSQL + + +#if USE_ODBC +CSphSource * SpawnSourceODBC ( const CSphConfigSection & hSource, const char * sSourceName ) +{ + assert ( hSource["type"]=="odbc" ); + + CSphSourceParams_ODBC tParams; + if ( !SqlParamsConfigure ( tParams, hSource, sSourceName ) ) + return NULL; + + LOC_GETS ( tParams.m_sOdbcDSN, "odbc_dsn" ); + LOC_GETS ( tParams.m_sColBuffers, "sql_column_buffers" ); + + CSphSource_ODBC * pSrc = new CSphSource_ODBC ( sSourceName ); + if ( !pSrc->Setup ( tParams ) ) + SafeDelete ( pSrc ); + + return pSrc; +} + + +CSphSource * SpawnSourceMSSQL ( const CSphConfigSection & hSource, const char * sSourceName ) +{ + assert ( hSource["type"]=="mssql" ); + + CSphSourceParams_ODBC tParams; + if ( !SqlParamsConfigure ( tParams, hSource, sSourceName ) ) + return NULL; + + LOC_GETB ( tParams.m_bWinAuth, "mssql_winauth" ); + LOC_GETB ( tParams.m_bUnicode, "mssql_unicode" ); + LOC_GETS ( tParams.m_sColBuffers, "sql_column_buffers" ); + + CSphSource_MSSQL * pSrc = new CSphSource_MSSQL ( sSourceName ); + if ( !pSrc->Setup ( tParams ) ) + SafeDelete ( pSrc ); + + return pSrc; +} +#endif // USE_ODBC + + +CSphSource * SpawnSourceXMLPipe ( const CSphConfigSection & hSource, const char * sSourceName, bool bUTF8 ) +{ + assert ( hSource["type"]=="xmlpipe" || hSource["type"]=="xmlpipe2" ); + + LOC_CHECK ( hSource, "xmlpipe_command", "in source '%s'.", sSourceName ); + + CSphSource * pSrcXML = NULL; + + CSphString sCommand = hSource["xmlpipe_command"]; + const int MAX_BUF_SIZE = 1024; + BYTE dBuffer [MAX_BUF_SIZE]; + int iBufSize = 0; + bool bUsePipe2 = true; + + FILE * pPipe = sphDetectXMLPipe ( sCommand.cstr (), dBuffer, iBufSize, MAX_BUF_SIZE, bUsePipe2 ); + if ( !pPipe ) + { + fprintf ( stdout, "ERROR: xmlpipe: failed to popen '%s'", sCommand.cstr() ); + return NULL; + } + + if ( bUsePipe2 ) + { +#if USE_LIBEXPAT || USE_LIBXML + pSrcXML = sphCreateSourceXmlpipe2 ( &hSource, pPipe, dBuffer, iBufSize, sSourceName, g_iMaxXmlpipe2Field ); + + if ( !bUTF8 ) + { + SafeDelete ( pSrcXML ); + fprintf ( stdout, "ERROR: source '%s': xmlpipe2 should only be used with charset_type=utf-8\n", sSourceName ); + } +#else + fprintf ( stdout, "WARNING: source '%s': xmlpipe2 support NOT compiled in. To use xmlpipe2, install missing XML libraries, reconfigure, and rebuild Sphinx\n", sSourceName ); +#endif + } else + { + CSphSource_XMLPipe * pXmlPipe = new CSphSource_XMLPipe ( dBuffer, iBufSize, sSourceName ); + if ( !pXmlPipe->Setup ( pPipe, sCommand.cstr () ) ) + SafeDelete ( pXmlPipe ); + + pSrcXML = pXmlPipe; + } + + return pSrcXML; +} + + +CSphSource * SpawnSource ( const CSphConfigSection & hSource, const char * sSourceName, bool bUTF8, bool bWordDict ) +{ + if ( !hSource.Exists ( "type" ) ) + { + fprintf ( stdout, "ERROR: source '%s': type not found; skipping.\n", sSourceName ); + return NULL; + } + + #if USE_PGSQL + if ( hSource["type"]=="pgsql" ) + return SpawnSourcePgSQL ( hSource, sSourceName ); + #endif + + #if USE_MYSQL + if ( hSource["type"]=="mysql" ) + return SpawnSourceMySQL ( hSource, sSourceName ); + #endif + + #if USE_PYTHON + if ( hSource["type"]=="python") + return SpawnSourcePython ( hSource, sSourceName ); + #endif + + #if USE_ODBC + if ( hSource["type"]=="odbc" ) + return SpawnSourceODBC ( hSource, sSourceName ); + + if ( hSource["type"]=="mssql" ) + return SpawnSourceMSSQL ( hSource, sSourceName ); + #endif + + if ( hSource["type"]=="xmlpipe" && bWordDict ) + { + fprintf ( stdout, "ERROR: source '%s': type xmlpipe incompatible with dict=keywords option use xmlpipe2 instead; skipping.\n", sSourceName ); + return NULL; + } + + if ( hSource["type"]=="xmlpipe" || hSource["type"]=="xmlpipe2" ) + return SpawnSourceXMLPipe ( hSource, sSourceName, bUTF8 ); + + fprintf ( stdout, "ERROR: source '%s': unknown type '%s'; skipping.\n", sSourceName, + hSource["type"].cstr() ); + return NULL; +} + +#undef LOC_CHECK +#undef LOC_GETS +#undef LOC_GETI +#undef LOC_GETA + +////////////////////////////////////////////////////////////////////////// +// INDEXING +////////////////////////////////////////////////////////////////////////// + +bool DoIndex ( const CSphConfigSection & hIndex, const char * sIndexName, const CSphConfigType & hSources, bool bVerbose, FILE * fpDumpRows ) +{ + // check index type + bool bPlain = true; + if ( hIndex("type") ) + { + const CSphString & sType = hIndex["type"]; + bPlain = ( sType=="plain" ); + + if ( sType!="plain" && sType!="distributed" && sType!="rt" ) + { + fprintf ( stdout, "ERROR: index '%s': unknown type '%s'; fix your config file.\n", sIndexName, sType.cstr() ); + fflush ( stdout ); + return false; + } + } + if ( !bPlain ) + { + if ( !g_bQuiet ) + { + fprintf ( stdout, "skipping non-plain index '%s'...\n", sIndexName ); + fflush ( stdout ); + } + return false; + } + + // progress bar + if ( !g_bQuiet ) + { + fprintf ( stdout, "indexing index '%s'...\n", sIndexName ); + fflush ( stdout ); + } + + // check config + if ( !hIndex("path") ) + { + fprintf ( stdout, "ERROR: index '%s': key 'path' not found.\n", sIndexName ); + return false; + } + + bool bInfix = hIndex.GetInt ( "min_infix_len", 0 ) > 0; + if ( ( hIndex.GetInt ( "min_prefix_len", 0 ) > 0 || bInfix ) + && hIndex.GetInt ( "enable_star" )==0 ) + { + const char * szMorph = hIndex.GetStr ( "morphology", "" ); + if ( szMorph && *szMorph && strcmp ( szMorph, "none" ) ) + { + fprintf ( stdout, "ERROR: index '%s': infixes and morphology are enabled, enable_star=0\n", sIndexName ); + return false; + } + } + + /////////////////// + // spawn tokenizer + /////////////////// + + CSphString sError; + CSphTokenizerSettings tTokSettings; + if ( !sphConfTokenizer ( hIndex, tTokSettings, sError ) ) + sphDie ( "index '%s': %s", sIndexName, sError.cstr() ); + + ISphTokenizer * pTokenizer = ISphTokenizer::Create ( tTokSettings, sError ); + if ( !pTokenizer ) + sphDie ( "index '%s': %s", sIndexName, sError.cstr() ); + + // enable sentence indexing on tokenizer + // (not in Create() because search time tokenizer does not care) + bool bIndexSP = ( hIndex.GetInt ( "index_sp" )!=0 ); + if ( bIndexSP ) + if ( !pTokenizer->EnableSentenceIndexing ( sError ) ) + sphDie ( "index '%s': %s", sIndexName, sError.cstr() ); + + if ( hIndex("index_zones") ) + if ( !pTokenizer->EnableZoneIndexing ( sError ) ) + sphDie ( "index '%s': %s", sIndexName, sError.cstr() ); + + CSphDict * pDict = NULL; + CSphDictSettings tDictSettings; + + if ( !g_sBuildStops ) + { + ISphTokenizer * pTokenFilter = NULL; + sphConfDictionary ( hIndex, tDictSettings ); + + // FIXME! no support for infixes in keywords dict yet + if ( tDictSettings.m_bWordDict && bInfix ) + { + tDictSettings.m_bWordDict = false; + fprintf ( stdout, "WARNING: min_infix_len is not supported yet with dict=keywords; using dict=crc\n" ); + } + + pDict = tDictSettings.m_bWordDict + ? sphCreateDictionaryKeywords ( tDictSettings, pTokenizer, sError, sIndexName ) + : sphCreateDictionaryCRC ( tDictSettings, pTokenizer, sError, sIndexName ); + if ( !pDict ) + sphDie ( "index '%s': %s", sIndexName, sError.cstr() ); + + if ( !sError.IsEmpty () ) + fprintf ( stdout, "WARNING: index '%s': %s\n", sIndexName, sError.cstr() ); + + pTokenFilter = ISphTokenizer::CreateTokenFilter ( pTokenizer, pDict->GetMultiWordforms () ); + pTokenizer = pTokenFilter ? pTokenFilter : pTokenizer; + } + + // boundary + bool bInplaceEnable = hIndex.GetInt ( "inplace_enable", 0 )!=0; + int iHitGap = hIndex.GetSize ( "inplace_hit_gap", 0 ); + int iDocinfoGap = hIndex.GetSize ( "inplace_docinfo_gap", 0 ); + float fRelocFactor = hIndex.GetFloat ( "inplace_reloc_factor", 0.1f ); + float fWriteFactor = hIndex.GetFloat ( "inplace_write_factor", 0.1f ); + + if ( bInplaceEnable ) + { + if ( fRelocFactor < 0.01f || fRelocFactor > 0.9f ) + { + fprintf ( stdout, "WARNING: inplace_reloc_factor must be 0.01 to 0.9, clamped\n" ); + fRelocFactor = Min ( Max ( fRelocFactor, 0.01f ), 0.9f ); + } + + if ( fWriteFactor < 0.01f || fWriteFactor > 0.9f ) + { + fprintf ( stdout, "WARNING: inplace_write_factor must be 0.01 to 0.9, clamped\n" ); + fWriteFactor = Min ( Max ( fWriteFactor, 0.01f ), 0.9f ); + } + + if ( fWriteFactor+fRelocFactor > 1.0f ) + { + fprintf ( stdout, "WARNING: inplace_write_factor+inplace_reloc_factor must be less than 0.9, scaled\n" ); + float fScale = 0.9f/(fWriteFactor+fRelocFactor); + fRelocFactor *= fScale; + fWriteFactor *= fScale; + } + } + + ///////////////////// + // spawn datasources + ///////////////////// + + // check for per-index HTML stipping override + bool bStripOverride = false; + + bool bHtmlStrip = false; + CSphString sHtmlIndexAttrs, sHtmlRemoveElements; + + if ( hIndex("html_strip") ) + { + bStripOverride = true; + bHtmlStrip = hIndex.GetInt ( "html_strip" )!=0; + sHtmlIndexAttrs = hIndex.GetStr ( "html_index_attrs" ); + sHtmlRemoveElements = hIndex.GetStr ( "html_remove_elements" ); + } else + { + if ( bIndexSP ) + sphWarning ( "index '%s': index_sp=1 requires html_strip=1 to index paragraphs", sIndexName ); + + if ( hIndex("index_zones") ) + sphDie ( "index '%s': index_zones requires html_strip=1", sIndexName ); + } + + // parse all sources + CSphVector dSources; + bool bGotAttrs = false; + bool bGotJoinedFields = false; + bool bSpawnFailed = false; + + for ( CSphVariant * pSourceName = hIndex("source"); pSourceName; pSourceName = pSourceName->m_pNext ) + { + if ( !hSources ( pSourceName->cstr() ) ) + { + fprintf ( stdout, "ERROR: index '%s': source '%s' not found.\n", sIndexName, pSourceName->cstr() ); + continue; + } + const CSphConfigSection & hSource = hSources [ pSourceName->cstr() ]; + + CSphSource * pSource = SpawnSource ( hSource, pSourceName->cstr(), pTokenizer->IsUtf8 (), tDictSettings.m_bWordDict ); + if ( !pSource ) + { + bSpawnFailed = true; + continue; + } + + if ( pSource->HasAttrsConfigured() ) + bGotAttrs = true; + + if ( pSource->HasJoinedFields() ) + bGotJoinedFields = true; + + // strip_html, index_html_attrs + CSphString sError; + if ( bStripOverride ) + { + // apply per-index overrides + if ( bHtmlStrip ) + { + if ( !pSource->SetStripHTML ( sHtmlIndexAttrs.cstr(), sHtmlRemoveElements.cstr(), bIndexSP, hIndex.GetStr("index_zones"), sError ) ) + { + fprintf ( stdout, "ERROR: source '%s': %s.\n", pSourceName->cstr(), sError.cstr() ); + return false; + } + } + + } else if ( hSource.GetInt ( "strip_html" ) ) + { + // apply deprecated per-source settings if there are no overrides + if ( !pSource->SetStripHTML ( hSource.GetStr ( "index_html_attrs" ), "", false, NULL, sError ) ) + { + fprintf ( stdout, "ERROR: source '%s': %s.\n", pSourceName->cstr(), sError.cstr() ); + return false; + } + } + + pSource->SetTokenizer ( pTokenizer ); + pSource->SetDumpRows ( fpDumpRows ); + dSources.Add ( pSource ); + } + + if ( bSpawnFailed ) + { + fprintf ( stdout, "ERROR: index '%s': failed to configure some of the sources, will not index.\n", sIndexName ); + return false; + } + + if ( !dSources.GetLength() ) + { + fprintf ( stdout, "ERROR: index '%s': no valid sources configured; skipping.\n", sIndexName ); + return false; + } + + /////////// + // do work + /////////// + + int64_t tmTime = sphMicroTimer(); + bool bOK = false; + + if ( g_sBuildStops ) + { + /////////////////// + // build stopwords + /////////////////// + + if ( !g_bQuiet ) + { + fprintf ( stdout, "building stopwords list...\n" ); + fflush ( stdout ); + } + + CSphStopwordBuilderDict tDict; + ARRAY_FOREACH ( i, dSources ) + { + CSphString sError; + dSources[i]->SetDict ( &tDict ); + if ( !dSources[i]->Connect ( sError ) || !dSources[i]->IterateStart ( sError ) ) + { + if ( !sError.IsEmpty() ) + fprintf ( stdout, "ERROR: index '%s': %s\n", sIndexName, sError.cstr() ); + continue; + } + while ( dSources[i]->IterateDocument ( sError ) && dSources[i]->m_tDocInfo.m_iDocID ) + while ( dSources[i]->IterateHits ( sError ) ) + { + } + } + tDict.Save ( g_sBuildStops, g_iTopStops, g_bBuildFreqs ); + + SafeDelete ( pTokenizer ); + + } else + { + ////////// + // index! + ////////// + + // if searchd is running, we want to reindex to .tmp files + CSphString sIndexPath; + sIndexPath.SetSprintf ( g_bRotate ? "%s.tmp" : "%s", hIndex["path"].cstr() ); + + // do index + CSphIndex * pIndex = sphCreateIndexPhrase ( sIndexName, sIndexPath.cstr() ); + assert ( pIndex ); + + // check lock file + if ( !pIndex->Lock() ) + { + fprintf ( stdout, "FATAL: %s, will not index. Try --rotate option.\n", pIndex->GetLastError().cstr() ); + exit ( 1 ); + } + + CSphString sError; + CSphIndexSettings tSettings; + if ( !sphConfIndex ( hIndex, tSettings, sError ) ) + sphDie ( "index '%s': %s.", sIndexName, sError.cstr() ); + tSettings.m_bVerbose = bVerbose; + + if ( tSettings.m_bIndexExactWords && !pDict->HasMorphology () ) + { + tSettings.m_bIndexExactWords = false; + fprintf ( stdout, "WARNING: index '%s': no morphology, index_exact_words=1 has no effect, ignoring\n", sIndexName ); + } + + if ( tDictSettings.m_bWordDict && pDict->HasMorphology() && tSettings.m_iMinPrefixLen && !tSettings.m_bIndexExactWords ) + { + tSettings.m_bIndexExactWords = true; + fprintf ( stdout, "WARNING: index '%s': dict=keywords and prefixes and morphology enabled, forcing index_exact_words=1\n", sIndexName ); + } + + if ( bGotAttrs && tSettings.m_eDocinfo==SPH_DOCINFO_NONE ) + { + fprintf ( stdout, "FATAL: index '%s': got attributes, but docinfo is 'none' (fix your config file).\n", sIndexName ); + exit ( 1 ); + } + + if ( bGotJoinedFields && tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + { + fprintf ( stdout, "FATAL: index '%s': got joined fields, but docinfo is 'inline' (fix your config file).\n", sIndexName ); + exit ( 1 ); + } + + pIndex->SetProgressCallback ( ShowProgress ); + if ( bInplaceEnable ) + pIndex->SetInplaceSettings ( iHitGap, iDocinfoGap, fRelocFactor, fWriteFactor ); + + pIndex->SetTokenizer ( pTokenizer ); + pIndex->SetDictionary ( pDict ); + pIndex->Setup ( tSettings ); + + bOK = pIndex->Build ( dSources, g_iMemLimit, g_iWriteBuffer )!=0; + if ( bOK && g_bRotate ) + { + sIndexPath.SetSprintf ( "%s.new", hIndex["path"].cstr() ); + bOK = pIndex->Rename ( sIndexPath.cstr() ); + } + + if ( !bOK ) + fprintf ( stdout, "ERROR: index '%s': %s.\n", sIndexName, pIndex->GetLastError().cstr() ); + + if ( !pIndex->GetLastWarning().IsEmpty() ) + fprintf ( stdout, "WARNING: index '%s': %s.\n", sIndexName, pIndex->GetLastWarning().cstr() ); + + pIndex->Unlock (); + + SafeDelete ( pIndex ); + } + + // trip report + tmTime = sphMicroTimer() - tmTime; + if ( !g_bQuiet ) + { + tmTime = Max ( tmTime, 1 ); + int64_t iTotalDocs = 0; + int64_t iTotalBytes = 0; + + ARRAY_FOREACH ( i, dSources ) + { + const CSphSourceStats & tSource = dSources[i]->GetStats(); + iTotalDocs += tSource.m_iTotalDocuments; + iTotalBytes += tSource.m_iTotalBytes; + } + + fprintf ( stdout, "total %d docs, "INT64_FMT" bytes\n", (int)iTotalDocs, iTotalBytes ); + + fprintf ( stdout, "total %d.%03d sec, %d bytes/sec, %d.%02d docs/sec\n", + (int)(tmTime/1000000), (int)(tmTime%1000000)/1000, // sec + (int)(iTotalBytes*1000000/tmTime), // bytes/sec + (int)(iTotalDocs*1000000/tmTime), (int)(iTotalDocs*1000000*100/tmTime)%100 ); // docs/sec + } + + // cleanup and go on + ARRAY_FOREACH ( i, dSources ) + SafeDelete ( dSources[i] ); + + return bOK; +} + +////////////////////////////////////////////////////////////////////////// +// MERGING +////////////////////////////////////////////////////////////////////////// + +bool DoMerge ( const CSphConfigSection & hDst, const char * sDst, + const CSphConfigSection & hSrc, const char * sSrc, CSphVector & tPurge, bool bRotate, bool bMergeKillLists ) +{ + // check config + if ( !hDst("path") ) + { + fprintf ( stdout, "ERROR: index '%s': key 'path' not found.\n", sDst ); + return false; + } + if ( !hSrc("path") ) + { + fprintf ( stdout, "ERROR: index '%s': key 'path' not found.\n", sSrc ); + return false; + } + + // do the merge + CSphIndex * pSrc = sphCreateIndexPhrase ( NULL, hSrc["path"].cstr() ); + CSphIndex * pDst = sphCreateIndexPhrase ( NULL, hDst["path"].cstr() ); + assert ( pSrc ); + assert ( pDst ); + + CSphString sError; + if ( !sphFixupIndexSettings ( pSrc, hSrc, sError ) ) + { + fprintf ( stdout, "ERROR: index '%s': %s\n", sSrc, sError.cstr () ); + return false; + } + + if ( !sphFixupIndexSettings ( pDst, hDst, sError ) ) + { + fprintf ( stdout, "ERROR: index '%s': %s\n", sDst, sError.cstr () ); + return false; + } + + pSrc->SetWordlistPreload ( hSrc.GetInt ( "ondisk_dict" )==0 ); + pDst->SetWordlistPreload ( hDst.GetInt ( "ondisk_dict" )==0 ); + + if ( !pSrc->Lock() && !bRotate ) + { + fprintf ( stdout, "ERROR: index '%s' is already locked; lock: %s\n", sSrc, pSrc->GetLastError().cstr() ); + return false; + } + + if ( !pDst->Lock() && !bRotate ) + { + fprintf ( stdout, "ERROR: index '%s' is already locked; lock: %s\n", sDst, pDst->GetLastError().cstr() ); + return false; + } + + pDst->SetProgressCallback ( ShowProgress ); + + int64_t tmMergeTime = sphMicroTimer(); + if ( !pDst->Merge ( pSrc, tPurge, bMergeKillLists ) ) + sphDie ( "failed to merge index '%s' into index '%s': %s", sSrc, sDst, pDst->GetLastError().cstr() ); + if ( !pDst->GetLastWarning().IsEmpty() ) + fprintf ( stdout, "WARNING: index '%s': %s\n", sDst, pDst->GetLastWarning().cstr() ); + tmMergeTime = sphMicroTimer() - tmMergeTime; + if ( !g_bQuiet ) + printf ( "merged in %d.%03d sec\n", (int)(tmMergeTime/1000000), (int)(tmMergeTime%1000000)/1000 ); + + // pick up merge result + const char * sPath = hDst["path"].cstr(); + char sFrom [ SPH_MAX_FILENAME_LEN ]; + char sTo [ SPH_MAX_FILENAME_LEN ]; + struct stat tFileInfo; + + int iExt; + for ( iExt=0; iExtUnlock(); + pDst->Unlock(); + } + + SafeDelete ( pSrc ); + SafeDelete ( pDst ); + + // all good? + return ( iExt==EXT_COUNT ); +} + +////////////////////////////////////////////////////////////////////////// +// ENTRY +////////////////////////////////////////////////////////////////////////// + +void ReportIOStats ( const char * sType, int iReads, int64_t iReadTime, int64_t iReadBytes ) +{ + if ( iReads==0 ) + { + fprintf ( stdout, "total %d %s, %d.%03d sec, 0.0 kb/call avg, 0.0 msec/call avg\n", + iReads, sType, + (int)(iReadTime/1000000), (int)(iReadTime%1000000)/1000 ); + } else + { + iReadBytes /= iReads; + fprintf ( stdout, "total %d %s, %d.%03d sec, %d.%d kb/call avg, %d.%d msec/call avg\n", + iReads, sType, + (int)(iReadTime/1000000), (int)(iReadTime%1000000)/1000, + (int)(iReadBytes/1024), (int)(iReadBytes%1024)*10/1024, + (int)(iReadTime/iReads/1000), (int)(iReadTime/iReads/100)%10 ); + } +} + + +extern int64_t g_iIndexerCurrentDocID; +extern int64_t g_iIndexerCurrentHits; +extern int64_t g_iIndexerCurrentRangeMin; +extern int64_t g_iIndexerCurrentRangeMax; +extern int64_t g_iIndexerPoolStartDocID; +extern int64_t g_iIndexerPoolStartHit; + +#if !USE_WINDOWS + +void sigsegv ( int sig ) +{ + sphSafeInfo ( STDERR_FILENO, "*** Oops, indexer crashed! Please send the following report to developers." ); + sphSafeInfo ( STDERR_FILENO, "Sphinx " SPHINX_VERSION ); + sphSafeInfo ( STDERR_FILENO, "-------------- report begins here ---------------" ); + sphSafeInfo ( STDERR_FILENO, "Current document: docid=%l, hits=%l", g_iIndexerCurrentDocID, g_iIndexerCurrentHits ); + sphSafeInfo ( STDERR_FILENO, "Current batch: minid=%l, maxid=%l", g_iIndexerCurrentRangeMin, g_iIndexerCurrentRangeMax ); + sphSafeInfo ( STDERR_FILENO, "Hit pool start: docid=%l, hit=%l", g_iIndexerPoolStartDocID, g_iIndexerPoolStartHit ); + sphBacktrace ( STDERR_FILENO ); + CRASH_EXIT; +} + +void SetSignalHandlers () +{ + struct sigaction sa; + sigfillset ( &sa.sa_mask ); + + bool bSignalsSet = false; + for ( ;; ) + { + sa.sa_flags = SA_NOCLDSTOP; + sa.sa_handler = SIG_IGN; if ( sigaction ( SIGCHLD, &sa, NULL )!=0 ) break; + + sa.sa_flags |= SA_RESETHAND; + sa.sa_handler = sigsegv; if ( sigaction ( SIGSEGV, &sa, NULL )!=0 ) break; + sa.sa_handler = sigsegv; if ( sigaction ( SIGBUS, &sa, NULL )!=0 ) break; + sa.sa_handler = sigsegv; if ( sigaction ( SIGABRT, &sa, NULL )!=0 ) break; + sa.sa_handler = sigsegv; if ( sigaction ( SIGILL, &sa, NULL )!=0 ) break; + sa.sa_handler = sigsegv; if ( sigaction ( SIGFPE, &sa, NULL )!=0 ) break; + + bSignalsSet = true; + break; + } + if ( !bSignalsSet ) + { + fprintf ( stderr, "sigaction(): %s", strerror(errno) ); + exit ( 1 ); + } +} + +#else // if USE_WINDOWS + +LONG WINAPI sigsegv ( EXCEPTION_POINTERS * pExc ) +{ + const char * sFail1 = "*** Oops, indexer crashed! Please send "; + const char * sFail2 = " minidump file to developers.\n"; + const char * sFailVer = "Sphinx " SPHINX_VERSION "\n"; + + sphBacktrace ( pExc, g_sMinidump ); + ::write ( STDERR_FILENO, sFail1, strlen(sFail1) ); + ::write ( STDERR_FILENO, g_sMinidump, strlen(g_sMinidump) ); + ::write ( STDERR_FILENO, sFail2, strlen(sFail2) ); + ::write ( STDERR_FILENO, sFailVer, strlen(sFailVer) ); + + CRASH_EXIT; +} + + +void SetSignalHandlers () +{ + snprintf ( g_sMinidump, sizeof(g_sMinidump), "indexer.%d.mdmp", GetCurrentProcessId() ); + SetUnhandledExceptionFilter ( sigsegv ); +} + +#endif // USE_WINDOWS + +bool SendRotate ( int iPID, bool bForce ) +{ + if ( iPID<0 ) + return false; + + if ( !( g_bRotate && ( g_bRotateEach || bForce ) ) ) + return false; + +#if USE_WINDOWS + char szPipeName[64]; + snprintf ( szPipeName, sizeof(szPipeName), "\\\\.\\pipe\\searchd_%d", iPID ); + + HANDLE hPipe = INVALID_HANDLE_VALUE; + + while ( hPipe==INVALID_HANDLE_VALUE ) + { + hPipe = CreateFile ( szPipeName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); + + if ( hPipe==INVALID_HANDLE_VALUE ) + { + if ( GetLastError()!=ERROR_PIPE_BUSY ) + { + fprintf ( stdout, "WARNING: could not open pipe (GetLastError()=%d)\n", GetLastError () ); + return false; + } + + if ( !WaitNamedPipe ( szPipeName, 1000 ) ) + { + fprintf ( stdout, "WARNING: could not open pipe (GetLastError()=%d)\n", GetLastError () ); + return false; + } + } + } + + if ( hPipe!=INVALID_HANDLE_VALUE ) + { + DWORD uWritten = 0; + BYTE uWrite = 0; + BOOL bResult = WriteFile ( hPipe, &uWrite, 1, &uWritten, NULL ); + if ( bResult ) + fprintf ( stdout, "rotating indices: succesfully sent SIGHUP to searchd (pid=%d).\n", iPID ); + else + fprintf ( stdout, "WARNING: failed to send SIGHUP to searchd (pid=%d, GetLastError()=%d)\n", iPID, GetLastError () ); + + CloseHandle ( hPipe ); + } +#else + // signal + int iErr = kill ( iPID, SIGHUP ); + if ( iErr==0 ) + { + if ( !g_bQuiet ) + fprintf ( stdout, "rotating indices: succesfully sent SIGHUP to searchd (pid=%d).\n", iPID ); + } else + { + switch ( errno ) + { + case ESRCH: fprintf ( stdout, "WARNING: no process found by PID %d.\n", iPID ); break; + case EPERM: fprintf ( stdout, "WARNING: access denied to PID %d.\n", iPID ); break; + default: fprintf ( stdout, "WARNING: kill() error: %s.\n", strerror(errno) ); break; + } + return false; + } +#endif + + // all ok + return true; +} + + +int main ( int argc, char ** argv ) +{ + sphSetLogger ( Logger ); + + const char * sOptConfig = NULL; + bool bMerge = false; + CSphVector dMergeDstFilters; + + CSphVector dIndexes; + bool bIndexAll = false; + bool bMergeKillLists = false; + bool bVerbose = false; + CSphString sDumpRows; + + int i; + for ( i=1; i='a' && argv[i][0]<='z' ) || ( argv[i][0]>='A' && argv[i][0]<='Z' ) ) + { + dIndexes.Add ( argv[i] ); + + } else if ( strcasecmp ( argv[i], "--dump-rows" )==0 && (i+1)1 ) + { + fprintf ( stdout, "ERROR: malformed or unknown option near '%s'.\n", argv[i] ); + + } else + { + fprintf ( stdout, + "Usage: indexer [OPTIONS] [indexname1 [indexname2 [...]]]\n" + "\n" + "Options are:\n" + "--config \t\tread configuration from specified file\n" + "\t\t\t(default is csft.conf)\n" + "--all\t\t\treindex all configured indexes\n" + "--quiet\t\t\tbe quiet, only print errors\n" + "--verbose\t\tverbose indexing issues report\n" + "--noprogress\t\tdo not display progress\n" + "\t\t\t(automatically on if output is not to a tty)\n" + "--rotate\t\tsend SIGHUP to searchd when indexing is over\n" + "\t\t\tto rotate updated indexes automatically\n" + "--sighup-each\t\tsend SIGHUP to searchd after each index\n" + "\t\t\t(used with --rotate only)\n" + "--buildstops \n" + "\t\t\tbuild top N stopwords and write them to given file\n" + "--buildfreqs\t\tstore words frequencies to output.txt\n" + "\t\t\t(used with --buildstops only)\n" + "--merge \n" + "\t\t\tmerge 'src-index' into 'dst-index'\n" + "\t\t\t'dst-index' will receive merge result\n" + "\t\t\t'src-index' will not be modified\n" + "--merge-dst-range \n" + "\t\t\tfilter 'dst-index' on merge, keep only those documents\n" + "\t\t\twhere 'attr' is between 'min' and 'max' (inclusive)\n" + "--merge-klists\n" + "--merge-killlists\tmerge src and dst kill-lists (default is to\n" + "\t\t\tapply src kill-list to dst index)\n" + "--dump-rows \tdump indexed rows into FILE\n" + "--print-queries\t\tprint SQL queries (for debugging)\n" + "\n" + "Examples:\n" + "indexer --quiet myidx1\treindex 'myidx1' defined in 'csft.conf'\n" + "indexer --all\t\treindex all indexes defined in 'csft.conf'\n" ); + } + + return 1; + } + + if ( !bMerge && !bIndexAll && !dIndexes.GetLength() ) + { + fprintf ( stdout, "ERROR: nothing to do.\n" ); + return 1; + } + + SetSignalHandlers(); + + /////////////// + // load config + /////////////// + + CSphConfigParser cp; + CSphConfig & hConf = cp.m_tConf; + sOptConfig = sphLoadConfig ( sOptConfig, g_bQuiet, cp ); + + if ( !hConf ( "source" ) ) + sphDie ( "no indexes found in config file '%s'", sOptConfig ); + + g_iMemLimit = 0; + if ( hConf("indexer") && hConf["indexer"]("indexer") ) + { + CSphConfigSection & hIndexer = hConf["indexer"]["indexer"]; + + g_iMemLimit = hIndexer.GetSize ( "mem_limit", 0 ); + g_iMaxXmlpipe2Field = hIndexer.GetSize ( "max_xmlpipe2_field", 2*1024*1024 ); + g_iWriteBuffer = hIndexer.GetSize ( "write_buffer", 1024*1024 ); + g_iMaxFileFieldBuffer = Max ( 1024*1024, hIndexer.GetSize ( "max_file_field_buffer", 8*1024*1024 ) ); + + if ( hIndexer("on_file_field_error") ) + { + const CSphString & sVal = hIndexer["on_file_field_error"]; + if ( sVal=="ignore_field" ) + g_eOnFileFieldError = FFE_IGNORE_FIELD; + else if ( sVal=="skip_document" ) + g_eOnFileFieldError = FFE_SKIP_DOCUMENT; + else if ( sVal=="fail_index" ) + g_eOnFileFieldError = FFE_FAIL_INDEX; + else + sphDie ( "unknown on_field_field_error value (must be one of ignore_field, skip_document, fail_index)" ); + } + + sphSetThrottling ( hIndexer.GetInt ( "max_iops", 0 ), hIndexer.GetSize ( "max_iosize", 0 ) ); + } + + int iPID = -1; + while ( g_bRotate ) + { + // load config + if ( !hConf.Exists ( "searchd" ) ) + { + fprintf ( stdout, "WARNING: 'searchd' section not found in config file.\n" ); + break; + } + + const CSphConfigSection & hSearchd = hConf["searchd"]["searchd"]; + if ( !hSearchd.Exists ( "pid_file" ) ) + { + fprintf ( stdout, "WARNING: 'pid_file' parameter not found in 'searchd' config section.\n" ); + break; + } + + // read in PID + FILE * fp = fopen ( hSearchd["pid_file"].cstr(), "r" ); + if ( !fp ) + { + fprintf ( stdout, "WARNING: failed to open pid_file '%s'.\n", hSearchd["pid_file"].cstr() ); + break; + } + if ( fscanf ( fp, "%d", &iPID )!=1 || iPID<=0 ) + { + fprintf ( stdout, "WARNING: failed to scanf pid from pid_file '%s'.\n", hSearchd["pid_file"].cstr() ); + break; + } + fclose ( fp ); + + break; + } + + ///////////////////// + // init python layer + //////////////////// + if ( hConf("python") && hConf["python"]("python") ) + { +#if USE_PYTHON + CSphConfigSection & hPython = hConf["python"]["python"]; + if(!cftInitialize(hPython)) + sphDie ( "Python layer's initiation failed."); +#else + sphDie ( "Python layer defined, but indexer does Not supports python. used --with-python to recompile."); +#endif + } + + ///////////////////// + // index each index + //////////////////// + + FILE * fpDumpRows = NULL; + if ( !bMerge && !sDumpRows.IsEmpty() ) + { + fpDumpRows = fopen ( sDumpRows.cstr(), "wb+" ); + if ( !fpDumpRows ) + sphDie ( "failed to open %s: %s", sDumpRows.cstr(), strerror(errno) ); + } + + sphStartIOStats (); + + bool bIndexedOk = false; // if any of the indexes are ok + if ( bMerge ) + { + if ( dIndexes.GetLength()!=2 ) + sphDie ( "there must be 2 indexes to merge specified" ); + + if ( !hConf["index"](dIndexes[0]) ) + sphDie ( "no merge destination index '%s'", dIndexes[0] ); + + if ( !hConf["index"](dIndexes[1]) ) + sphDie ( "no merge source index '%s'", dIndexes[1] ); + + bIndexedOk = DoMerge ( + hConf["index"][dIndexes[0]], dIndexes[0], + hConf["index"][dIndexes[1]], dIndexes[1], dMergeDstFilters, g_bRotate, bMergeKillLists ); + } else if ( bIndexAll ) + { + uint64_t tmRotated = sphMicroTimer(); + hConf["index"].IterateStart (); + while ( hConf["index"].IterateNext() ) + { + bool bLastOk = DoIndex ( hConf["index"].IterateGet (), hConf["index"].IterateGetKey().cstr(), hConf["source"], bVerbose, fpDumpRows ); + bIndexedOk |= bLastOk; + if ( bLastOk && ( sphMicroTimer() - tmRotated > ROTATE_MIN_INTERVAL ) && SendRotate ( iPID, false ) ) + tmRotated = sphMicroTimer(); + } + } else + { + uint64_t tmRotated = sphMicroTimer(); + ARRAY_FOREACH ( i, dIndexes ) + { + if ( !hConf["index"](dIndexes[i]) ) + fprintf ( stdout, "WARNING: no such index '%s', skipping.\n", dIndexes[i] ); + else + { + bool bLastOk = DoIndex ( hConf["index"][dIndexes[i]], dIndexes[i], hConf["source"], bVerbose, fpDumpRows ); + bIndexedOk |= bLastOk; + if ( bLastOk && ( sphMicroTimer() - tmRotated > ROTATE_MIN_INTERVAL ) && SendRotate ( iPID, false ) ) + tmRotated = sphMicroTimer(); + } + } + } + + sphShutdownWordforms (); + + const CSphIOStats & tStats = sphStopIOStats (); + + if ( !g_bQuiet ) + { + ReportIOStats ( "reads", tStats.m_iReadOps, tStats.m_iReadTime, tStats.m_iReadBytes ); + ReportIOStats ( "writes", tStats.m_iWriteOps, tStats.m_iWriteTime, tStats.m_iWriteBytes ); + } + + //////////////////////////// + // rotating searchd indices + //////////////////////////// + + if ( bIndexedOk && g_bRotate ) + { + if ( !SendRotate ( iPID, true ) ) + fprintf ( stdout, "WARNING: indices NOT rotated.\n" ); + } + +#if SPH_DEBUG_LEAKS + sphAllocsStats (); +#endif + +#if USE_PYTHON + cftShutdown(); //clean up +#endif + + return bIndexedOk ? 0 : 1; +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/indexer.o b/coreseek/csft-4.1/src/indexer.o new file mode 100644 index 0000000..a1ea236 Binary files /dev/null and b/coreseek/csft-4.1/src/indexer.o differ diff --git a/coreseek/csft-4.1/src/indextool b/coreseek/csft-4.1/src/indextool new file mode 100755 index 0000000..1c6f344 Binary files /dev/null and b/coreseek/csft-4.1/src/indextool differ diff --git a/coreseek/csft-4.1/src/indextool.cpp b/coreseek/csft-4.1/src/indextool.cpp new file mode 100755 index 0000000..fbd9152 --- /dev/null +++ b/coreseek/csft-4.1/src/indextool.cpp @@ -0,0 +1,553 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxutils.h" +#include "sphinxint.h" +#include "sphinxrt.h" +#include + + +void StripStdin ( const char * sIndexAttrs, const char * sRemoveElements ) +{ + CSphString sError; + CSphHTMLStripper tStripper ( true ); + if ( !tStripper.SetIndexedAttrs ( sIndexAttrs, sError ) + || !tStripper.SetRemovedElements ( sRemoveElements, sError ) ) + sphDie ( "failed to configure stripper: %s", sError.cstr() ); + + CSphVector dBuffer; + while ( !feof(stdin) ) + { + char sBuffer[1024]; + int iLen = fread ( sBuffer, 1, sizeof(sBuffer), stdin ); + if ( !iLen ) + break; + + int iPos = dBuffer.GetLength(); + dBuffer.Resize ( iPos+iLen ); + memcpy ( &dBuffer[iPos], sBuffer, iLen ); + } + dBuffer.Add ( 0 ); + + tStripper.Strip ( &dBuffer[0] ); + fprintf ( stdout, "dumping stripped results...\n%s\n", &dBuffer[0] ); +} + +void DoOptimization ( const CSphString & sIndex, const CSphConfig & hConfig ); + +int main ( int argc, char ** argv ) +{ + fprintf ( stdout, SPHINX_BANNER ); + if ( argc<=1 ) + { + fprintf ( stdout, + "Usage: indextool [OPTIONS]\n" + "\n" + "Commands are:\n" + "--dumpheader \tdump index header by file name\n" + "--dumpconfig \tdump index header in config format by file name\n" + "--dumpheader \tdump index header by index name\n" + "--dumpdocids \tdump docids by index name\n" + "--dumphitlist \n" + "--dumphitlist --wordid \n" + "\t\t\t\tdump hits for given keyword\n" + "--check \t\tperform index consistency check\n" + "--htmlstrip \t\tfilter stdin usng HTML stripper settings\n" + "\t\t\t\tfor a given index (taken from csft.conf)\n" + "--optimize-rt-klists \n" + "\t\t\t\tperform kill list opimization in rt's disk chunks\n" + "\t\t\t\tfor a given index (taken from csft.conf) or --all\n" + "\n" + "Options are:\n" + "-c, --config \t\tuse given config file instead of defaults\n" + "--strip-path\t\t\tstrip path from filenames referenced by index\n" + "\t\t\t\t(eg. stopwords, exceptions, etc)\n" + ); + exit ( 0 ); + } + + ////////////////////// + // parse command line + ////////////////////// + + #define OPT(_a1,_a2) else if ( !strcmp(argv[i],_a1) || !strcmp(argv[i],_a2) ) + #define OPT1(_a1) else if ( !strcmp(argv[i],_a1) ) + + const char * sOptConfig = NULL; + CSphString sDumpHeader, sIndex, sKeyword; + bool bWordid = false; + bool bStripPath = false; + + enum + { + CMD_NOTHING, + CMD_DUMPHEADER, + CMD_DUMPCONFIG, + CMD_DUMPDOCIDS, + CMD_DUMPHITLIST, + CMD_CHECK, + CMD_STRIP, + CMD_OPTIMIZE + } eCommand = CMD_NOTHING; + + int i; + for ( i=1; i=argc ) break; + OPT ( "-c", "--config" ) sOptConfig = argv[++i]; + OPT1 ( "--dumpheader" ) { eCommand = CMD_DUMPHEADER; sDumpHeader = argv[++i]; } + OPT1 ( "--dumpconfig" ) { eCommand = CMD_DUMPCONFIG; sDumpHeader = argv[++i]; } + OPT1 ( "--dumpdocids" ) { eCommand = CMD_DUMPDOCIDS; sIndex = argv[++i]; } + OPT1 ( "--check" ) { eCommand = CMD_CHECK; sIndex = argv[++i]; } + OPT1 ( "--htmlstrip" ) { eCommand = CMD_STRIP; sIndex = argv[++i]; } + OPT1 ( "--strip-path" ) { bStripPath = true; } + OPT1 ( "--optimize-rt-klists" ) + { + eCommand = CMD_OPTIMIZE; + sIndex = argv[++i]; + if ( sIndex=="--all" ) + sIndex = ""; + } + + // options with 2 args + else if ( (i+2)>=argc ) // NOLINT + { + // not enough args + break; + + } else if ( !strcmp ( argv[i], "--dumphitlist" ) ) + { + eCommand = CMD_DUMPHITLIST; + sIndex = argv[++i]; + + if ( !strcmp ( argv[i+1], "--wordid" ) ) + { + if ( (i+3)SetWordlistPreload ( false ); + + CSphString sWarn; + if ( !pIndex->Prealloc ( false, bStripPath, sWarn ) ) + sphDie ( "index '%s': prealloc failed: %s\n", sIndex.cstr(), pIndex->GetLastError().cstr() ); + + if ( !pIndex->Preread() ) + sphDie ( "index '%s': preread failed: %s\n", sIndex.cstr(), pIndex->GetLastError().cstr() ); + + break; + } + + // do the dew + switch ( eCommand ) + { + case CMD_NOTHING: + sphDie ( "nothing to do; specify a command (run indextool w/o switches for help)" ); + + case CMD_DUMPHEADER: + case CMD_DUMPCONFIG: + { + if ( hConf("index") && hConf["index"](sDumpHeader) ) + { + fprintf ( stdout, "dumping header for index '%s'...\n", sDumpHeader.cstr() ); + + if ( !hConf["index"][sDumpHeader]("path") ) + sphDie ( "missing 'path' for index '%s'\n", sDumpHeader.cstr() ); + + sDumpHeader.SetSprintf ( "%s.sph", hConf["index"][sDumpHeader]["path"].cstr() ); + } + + fprintf ( stdout, "dumping header file '%s'...\n", sDumpHeader.cstr() ); + CSphIndex * pIndex = sphCreateIndexPhrase ( NULL, "" ); + pIndex->DebugDumpHeader ( stdout, sDumpHeader.cstr(), eCommand==CMD_DUMPCONFIG ); + break; + } + + case CMD_DUMPDOCIDS: + fprintf ( stdout, "dumping docids for index '%s'...\n", sIndex.cstr() ); + pIndex->DebugDumpDocids ( stdout ); + break; + + case CMD_DUMPHITLIST: + fprintf ( stdout, "dumping hitlist for index '%s' keyword '%s'...\n", sIndex.cstr(), sKeyword.cstr() ); + pIndex->DebugDumpHitlist ( stdout, sKeyword.cstr(), bWordid ); + break; + + case CMD_CHECK: + fprintf ( stdout, "checking index '%s'...\n", sIndex.cstr() ); + return pIndex->DebugCheck ( stdout ); + + case CMD_STRIP: + { + const CSphConfigSection & hIndex = hConf["index"][sIndex]; + if ( hIndex.GetInt ( "html_strip" )==0 ) + sphDie ( "HTML stripping is not enabled in index '%s'", sIndex.cstr() ); + StripStdin ( hIndex.GetStr ( "html_index_attrs" ), hIndex.GetStr ( "html_remove_elements" ) ); + } + break; + + case CMD_OPTIMIZE: + DoOptimization ( sIndex, hConf ); + break; + + default: + sphDie ( "INTERNAL ERROR: unhandled command (id=%d)", (int)eCommand ); + } + + return 0; +} + +#if USE_WINDOWS +#include // for open() +#define sphSeek _lseeki64 +#else +#define sphSeek lseek +#endif + +bool FixupFiles ( const CSphVector & dFiles, CSphString & sError ) +{ + ARRAY_FOREACH ( i, dFiles ) + { + const CSphString & sPath = dFiles[i]; + CSphString sKlistOld, sKlistNew, sHeader; + sKlistOld.SetSprintf ( "%s.spk", sPath.cstr() ); + sKlistNew.SetSprintf ( "%s.new.spk", sPath.cstr() ); + sHeader.SetSprintf ( "%s.sph", sPath.cstr() ); + + DWORD iCount = 0; + { + CSphAutoreader rdHeader, rdKlistNew, rdKlistOld; + if ( !rdHeader.Open ( sHeader, sError ) || !rdKlistNew.Open ( sKlistNew, sError ) || !rdKlistOld.Open ( sKlistOld, sError ) ) + return false; + + const SphOffset_t iSize = rdKlistNew.GetFilesize(); + iCount = (DWORD)( iSize / sizeof(SphAttr_t) ); + } + + if ( ::unlink ( sKlistOld.cstr() )!=0 ) + { + sError.SetSprintf ( "file: '%s', error: '%s'", sKlistOld.cstr(), strerror(errno) ); + return false; + } + + if ( ::rename ( sKlistNew.cstr(), sKlistOld.cstr() )!=0 ) + { + sError.SetSprintf ( "files: '%s'->'%s', error: '%s'", sKlistNew.cstr(), sKlistOld.cstr(), strerror(errno) ); + return false; + } + + int iFD = ::open ( sHeader.cstr(), SPH_O_BINARY | O_RDWR, 0644 ); + if ( iFD<0 ) + { + sError.SetSprintf ( "file: '%s', error: '%s'", sHeader.cstr(), strerror(errno) ); + return false; + } + + if ( sphSeek ( iFD, -4, SEEK_END )==-1L ) + { + sError.SetSprintf ( "file: '%s', error: '%s'", sHeader.cstr(), strerror(errno) ); + SafeClose ( iFD ); + return false; + } + + if ( ::write ( iFD, &iCount, 4 )==-1 ) + { + sError.SetSprintf ( "file: '%s', error: '%s'", sHeader.cstr(), strerror(errno) ); + SafeClose ( iFD ); + return false; + } + + SafeClose ( iFD ); + } + + return true; +} + +bool DoKlistsOptimization ( int iRowSize, const char * sPath, int iChunkCount, CSphVector & dFiles ) +{ + CSphTightVector dLiveID; + + CSphString sError; + + for ( int iChunk=0; iChunk dKlist; + + if ( dLiveID.GetLength()>0 ) + { + assert ( rdKList.GetFilesize()0 ) + ARRAY_FOREACH ( i, dLiveID ) + if ( dLiveID[i]==0 ) + dLiveID.RemoveFast ( i-- ); + + assert ( dLiveID.GetLength()+dKlist.GetLength()==iWasLive ); + + dLiveID.Sort(); + } + + // 3d step write new k-list + + if ( dKlist.GetLength()>0 ) + wrNew.PutBytes ( dKlist.Begin(), dKlist.GetLength()*sizeof(SphAttr_t) ); + + dKlist.Reset(); + wrNew.CloseFile(); + + // 4th step merge ID from this segment into live ids + if ( iChunk!=iChunkCount-1 ) + { + const int iWasLive = Max ( dLiveID.GetLength()-1, 0 ); + const int iRowCount = (int)( rdAttr.GetFilesize() / ( (DOCINFO_IDSIZE+iRowSize)*4 ) ); + + for ( int i=0; i dFiles; + + hConf["index"].IterateStart (); + while ( hConf["index"].IterateNext () ) + { + CSphString sError; + + const CSphConfigSection & hIndex = hConf["index"].IterateGet (); + const char * sIndexName = hConf["index"].IterateGetKey().cstr(); + + if ( !hIndex("type") || hIndex["type"]!="rt" ) + continue; + + if ( !sIndex.IsEmpty() && sIndex!=sIndexName ) + continue; + + if ( !hIndex.Exists ( "path" ) ) + { + fprintf ( stdout, "key 'path' not found in index '%s' - skiped\n", sIndexName ); + continue; + } + + const int64_t tmIndexStart = sphMicroTimer(); + + CSphSchema tSchema ( sIndexName ); + CSphColumnInfo tCol; + + // fields + for ( CSphVariant * v=hIndex("rt_field"); v; v=v->m_pNext ) + { + tCol.m_sName = v->cstr(); + tSchema.m_dFields.Add ( tCol ); + } + if ( !tSchema.m_dFields.GetLength() ) + { + fprintf ( stdout, "index '%s': no fields configured (use rt_field directive) - skiped\n", sIndexName ); + continue; + } + + // attrs + const int iNumTypes = 5; + const char * sTypes[iNumTypes] = { "rt_attr_uint", "rt_attr_bigint", "rt_attr_float", "rt_attr_timestamp", "rt_attr_string" }; + const ESphAttr iTypes[iNumTypes] = { SPH_ATTR_INTEGER, SPH_ATTR_BIGINT, SPH_ATTR_FLOAT, SPH_ATTR_TIMESTAMP, SPH_ATTR_STRING }; + + for ( int iType=0; iTypem_pNext ) + { + tCol.m_sName = v->cstr(); + tCol.m_eAttrType = iTypes[iType]; + tSchema.AddAttr ( tCol, false ); + } + } + + const char * sPath = hIndex["path"].cstr(); + + CSphString sMeta; + sMeta.SetSprintf ( "%s.meta", sPath ); + CSphAutoreader rdMeta; + if ( !rdMeta.Open ( sMeta.cstr(), sError ) ) + { + fprintf ( stdout, "%s\n", sError.cstr() ); + continue; + } + + rdMeta.SeekTo ( 8, 4 ); + const int iDiskCunkCount = rdMeta.GetDword(); + + if ( !DoKlistsOptimization ( tSchema.GetRowSize(), sPath, iDiskCunkCount, dFiles ) ) + sphDie ( "can't cook k-list '%s'", sPath ); + + const int64_t tmIndexDone = sphMicroTimer(); + fprintf ( stdout, "\nindex '%s' done in %.3f sec\n", sIndexName, float(tmIndexDone-tmIndexStart )/1000000.0f ); + iDone++; + } + + const int64_t tmIndexesDone = sphMicroTimer(); + fprintf ( stdout, "\ntotal processed=%d in %.3f sec\n", iDone, float(tmIndexesDone-tmStart )/1000000.0f ); + + CSphString sError("none"); + if ( !FixupFiles ( dFiles, sError ) ) + fprintf ( stdout, "error during files fixup: %s\n", sError.cstr() ); + + const int64_t tmDone = sphMicroTimer(); + fprintf ( stdout, "\nfinished in %.3f sec\n", float(tmDone-tmStart )/1000000.0f ); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/indextool.o b/coreseek/csft-4.1/src/indextool.o new file mode 100644 index 0000000..b13d694 Binary files /dev/null and b/coreseek/csft-4.1/src/indextool.o differ diff --git a/coreseek/csft-4.1/src/libsphinx.a b/coreseek/csft-4.1/src/libsphinx.a new file mode 100644 index 0000000..855c251 Binary files /dev/null and b/coreseek/csft-4.1/src/libsphinx.a differ diff --git a/coreseek/csft-4.1/src/llsphinxql.c b/coreseek/csft-4.1/src/llsphinxql.c new file mode 100755 index 0000000..030657d --- /dev/null +++ b/coreseek/csft-4.1/src/llsphinxql.c @@ -0,0 +1,2577 @@ +#line 2 "llsphinxql.c" + +#line 4 "llsphinxql.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart(yyin ,yyscanner ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#define YY_BUF_SIZE 16384 +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void yypop_buffer_state (yyscan_t yyscanner ); + +static void yyensure_buffer_stack (yyscan_t yyscanner ); +static void yy_load_buffer_state (yyscan_t yyscanner ); +static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); + +#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) + +YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void yyfree (void * ,yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define yywrap(n) 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); +static int yy_get_next_buffer (yyscan_t yyscanner ); +static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; + +#define YY_NUM_RULES 84 +#define YY_END_OF_BUFFER 85 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[312] = + { 0, + 0, 0, 0, 0, 85, 83, 82, 82, 83, 83, + 73, 83, 74, 83, 83, 83, 83, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 83, 2, 84, 2, 82, + 67, 0, 72, 0, 73, 1, 73, 74, 71, 69, + 68, 70, 0, 79, 79, 79, 79, 78, 78, 5, + 78, 78, 10, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 28, 29, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 43, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + + 78, 78, 78, 0, 3, 0, 80, 79, 79, 75, + 79, 4, 6, 7, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 20, 78, 78, 78, 78, 78, + 78, 78, 78, 31, 78, 78, 35, 78, 37, 38, + 78, 40, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 50, 78, 78, 78, 56, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 0, 81, 80, 79, + 79, 78, 78, 11, 78, 78, 78, 78, 78, 17, + 78, 21, 78, 78, 24, 78, 78, 78, 78, 32, + 78, 78, 36, 78, 41, 78, 78, 45, 78, 78, + + 78, 78, 78, 52, 78, 78, 78, 78, 78, 59, + 78, 78, 78, 78, 78, 78, 78, 79, 79, 8, + 78, 78, 78, 14, 78, 78, 78, 78, 22, 23, + 78, 78, 27, 78, 33, 34, 39, 78, 44, 78, + 78, 78, 78, 78, 78, 54, 78, 78, 78, 78, + 78, 78, 78, 78, 65, 78, 77, 79, 78, 78, + 13, 15, 16, 78, 78, 78, 26, 30, 42, 78, + 78, 78, 49, 78, 53, 55, 57, 78, 60, 61, + 78, 78, 64, 66, 76, 9, 78, 78, 78, 78, + 46, 47, 78, 51, 78, 78, 78, 78, 18, 19, + + 25, 48, 78, 78, 63, 12, 78, 62, 78, 58, + 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 4, 1, 1, 1, 1, 1, 5, 1, + 1, 6, 1, 1, 1, 7, 8, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 10, 1, 11, + 12, 13, 1, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 24, 31, 32, 33, 34, 35, 36, 37, 38, 24, + 1, 39, 1, 1, 24, 40, 41, 42, 43, 44, + + 45, 46, 47, 48, 49, 24, 50, 51, 52, 53, + 54, 55, 24, 56, 57, 58, 59, 60, 61, 62, + 63, 24, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[64] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 3, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 1, 5, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4 + } ; + +static yyconst flex_int16_t yy_base[321] = + { 0, + 0, 0, 61, 62, 437, 636, 67, 69, 338, 61, + 331, 244, 66, 233, 64, 181, 65, 46, 64, 76, + 66, 0, 97, 90, 66, 64, 110, 120, 112, 121, + 161, 129, 63, 83, 169, 0, 636, 636, 179, 93, + 636, 81, 636, 134, 160, 636, 156, 83, 636, 636, + 636, 636, 0, 0, 118, 127, 133, 0, 145, 159, + 156, 165, 0, 131, 170, 162, 173, 176, 171, 175, + 184, 187, 199, 199, 202, 0, 202, 205, 206, 204, + 212, 226, 215, 213, 221, 215, 231, 223, 225, 228, + 252, 232, 235, 251, 242, 258, 267, 263, 264, 246, + + 264, 272, 256, 118, 636, 288, 0, 0, 262, 0, + 274, 0, 0, 0, 275, 268, 279, 280, 284, 284, + 284, 297, 301, 289, 0, 298, 300, 304, 306, 317, + 319, 304, 320, 312, 320, 329, 0, 333, 0, 0, + 330, 0, 325, 329, 335, 337, 333, 328, 338, 337, + 335, 0, 332, 355, 346, 0, 347, 355, 352, 370, + 354, 363, 362, 370, 363, 373, 94, 636, 0, 371, + 379, 375, 382, 0, 390, 383, 376, 377, 381, 385, + 384, 0, 399, 387, 0, 389, 408, 395, 398, 0, + 397, 414, 0, 406, 0, 411, 411, 0, 428, 415, + + 432, 434, 429, 0, 429, 424, 424, 434, 427, 0, + 427, 442, 449, 443, 446, 451, 449, 442, 451, 0, + 457, 447, 453, 0, 469, 470, 468, 465, 0, 0, + 472, 471, 0, 468, 0, 0, 0, 475, 0, 487, + 478, 492, 476, 481, 493, 0, 484, 487, 498, 501, + 491, 508, 499, 496, 0, 504, 0, 503, 509, 502, + 0, 0, 0, 524, 525, 516, 0, 0, 0, 524, + 515, 532, 0, 525, 0, 0, 0, 538, 0, 0, + 532, 535, 0, 0, 0, 0, 530, 541, 530, 536, + 0, 0, 540, 0, 534, 552, 541, 546, 0, 0, + + 0, 0, 553, 547, 0, 0, 551, 0, 557, 0, + 636, 610, 615, 618, 621, 100, 76, 624, 627, 631 + } ; + +static yyconst flex_int16_t yy_def[321] = + { 0, + 311, 1, 312, 312, 311, 311, 311, 311, 311, 313, + 311, 311, 311, 311, 311, 311, 314, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 316, 311, 311, 311, 311, + 311, 313, 311, 313, 311, 311, 311, 311, 311, 311, + 311, 311, 317, 318, 318, 318, 318, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + + 315, 315, 315, 319, 311, 313, 320, 318, 318, 318, + 318, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 319, 311, 320, 318, + 318, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 318, 318, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 318, 318, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 318, 315, 315, 315, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + + 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, + 0, 311, 311, 311, 311, 311, 311, 311, 311, 311 + } ; + +static yyconst flex_int16_t yy_nxt[700] = + { 0, + 6, 7, 8, 9, 10, 6, 11, 12, 13, 14, + 15, 6, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 22, 25, 22, 22, 26, 27, 28, 29, 22, + 30, 31, 32, 33, 34, 35, 22, 22, 6, 36, + 18, 19, 20, 21, 22, 23, 24, 22, 25, 22, + 26, 27, 28, 29, 22, 30, 31, 32, 33, 34, + 35, 22, 22, 38, 38, 43, 39, 39, 40, 40, + 40, 40, 47, 59, 48, 50, 51, 60, 53, 107, + 61, 55, 62, 76, 67, 43, 78, 56, 68, 47, + 64, 48, 98, 77, 40, 40, 69, 99, 59, 44, + + 57, 63, 60, 104, 65, 61, 66, 55, 62, 76, + 67, 70, 78, 56, 68, 74, 64, 98, 77, 44, + 75, 69, 71, 99, 79, 57, 63, 72, 80, 65, + 73, 66, 81, 168, 83, 88, 311, 70, 82, 89, + 74, 86, 87, 96, 110, 75, 109, 71, 84, 90, + 79, 111, 72, 85, 80, 73, 117, 168, 81, 97, + 83, 88, 112, 82, 45, 89, 86, 87, 45, 96, + 110, 109, 106, 84, 90, 113, 114, 111, 85, 91, + 121, 117, 92, 100, 97, 115, 105, 101, 112, 93, + 102, 103, 52, 94, 95, 118, 119, 116, 122, 126, + + 127, 113, 114, 120, 123, 91, 121, 124, 92, 100, + 125, 115, 128, 101, 93, 129, 102, 103, 94, 95, + 118, 119, 116, 122, 126, 127, 130, 131, 120, 123, + 132, 135, 124, 133, 134, 125, 138, 128, 136, 139, + 129, 141, 137, 140, 49, 142, 143, 144, 145, 46, + 146, 130, 131, 149, 147, 132, 135, 148, 133, 134, + 153, 138, 154, 136, 139, 155, 141, 137, 156, 140, + 142, 143, 144, 157, 145, 146, 163, 150, 149, 147, + 160, 158, 148, 151, 152, 153, 164, 154, 166, 161, + 165, 155, 43, 156, 162, 170, 171, 172, 178, 157, + + 159, 163, 150, 173, 174, 175, 160, 158, 151, 152, + 176, 177, 164, 166, 161, 179, 165, 180, 184, 162, + 170, 181, 171, 172, 178, 159, 44, 182, 173, 174, + 175, 183, 185, 186, 187, 176, 177, 188, 189, 45, + 190, 179, 191, 180, 184, 192, 181, 193, 194, 41, + 195, 196, 182, 197, 198, 202, 183, 185, 199, 186, + 187, 200, 188, 201, 189, 190, 203, 204, 191, 205, + 210, 192, 208, 193, 194, 195, 206, 196, 207, 197, + 198, 202, 209, 199, 211, 213, 200, 212, 201, 214, + 215, 203, 204, 216, 217, 205, 210, 208, 218, 219, + + 221, 206, 220, 207, 222, 223, 228, 209, 224, 225, + 211, 213, 212, 226, 214, 227, 215, 229, 216, 230, + 217, 231, 232, 218, 233, 219, 221, 220, 234, 235, + 222, 223, 228, 224, 225, 236, 311, 237, 226, 238, + 227, 239, 240, 229, 230, 241, 231, 242, 232, 233, + 243, 244, 248, 234, 235, 245, 246, 247, 249, 250, + 251, 236, 237, 252, 238, 253, 239, 254, 240, 255, + 241, 256, 258, 242, 257, 259, 243, 244, 248, 260, + 245, 246, 247, 249, 250, 261, 251, 262, 263, 252, + 264, 253, 265, 254, 266, 255, 267, 256, 258, 257, + + 268, 259, 269, 270, 260, 271, 272, 311, 273, 274, + 261, 275, 278, 262, 263, 276, 264, 265, 277, 279, + 266, 267, 280, 281, 287, 268, 282, 269, 283, 270, + 271, 284, 272, 273, 274, 285, 286, 275, 278, 288, + 276, 289, 291, 277, 290, 279, 292, 280, 293, 281, + 287, 282, 294, 283, 295, 297, 284, 296, 298, 299, + 285, 286, 300, 301, 302, 288, 303, 289, 291, 290, + 304, 292, 305, 306, 293, 307, 311, 294, 308, 309, + 295, 297, 296, 298, 310, 299, 311, 300, 301, 302, + 311, 303, 311, 311, 311, 311, 304, 305, 306, 311, + + 311, 307, 311, 308, 309, 311, 311, 311, 311, 310, + 37, 37, 37, 37, 37, 42, 42, 42, 42, 42, + 54, 54, 58, 311, 58, 108, 311, 108, 167, 311, + 167, 167, 169, 311, 169, 5, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311 + + } ; + +static yyconst flex_int16_t yy_chk[700] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 4, 10, 3, 4, 7, 7, + 8, 8, 13, 18, 13, 15, 15, 18, 17, 317, + 18, 17, 19, 25, 21, 42, 26, 17, 21, 48, + 20, 48, 33, 25, 40, 40, 21, 34, 18, 10, + + 17, 19, 18, 316, 20, 18, 20, 17, 19, 25, + 21, 23, 26, 17, 21, 24, 20, 33, 25, 42, + 24, 21, 23, 34, 27, 17, 19, 23, 27, 20, + 23, 20, 27, 167, 28, 30, 44, 23, 27, 30, + 24, 29, 29, 32, 56, 24, 55, 23, 28, 30, + 27, 57, 23, 28, 27, 23, 64, 104, 27, 32, + 28, 30, 59, 27, 47, 30, 29, 29, 45, 32, + 56, 55, 44, 28, 30, 60, 61, 57, 28, 31, + 66, 64, 31, 35, 32, 62, 39, 35, 59, 31, + 35, 35, 16, 31, 31, 65, 65, 62, 67, 69, + + 70, 60, 61, 65, 67, 31, 66, 68, 31, 35, + 68, 62, 71, 35, 31, 72, 35, 35, 31, 31, + 65, 65, 62, 67, 69, 70, 73, 74, 65, 67, + 75, 78, 68, 77, 77, 68, 80, 71, 79, 81, + 72, 83, 79, 82, 14, 84, 85, 86, 87, 12, + 88, 73, 74, 90, 89, 75, 78, 89, 77, 77, + 92, 80, 93, 79, 81, 94, 83, 79, 95, 82, + 84, 85, 86, 96, 87, 88, 100, 91, 90, 89, + 98, 97, 89, 91, 91, 92, 101, 93, 103, 99, + 102, 94, 106, 95, 99, 109, 111, 115, 121, 96, + + 97, 100, 91, 116, 117, 118, 98, 97, 91, 91, + 119, 120, 101, 103, 99, 122, 102, 123, 128, 99, + 109, 124, 111, 115, 121, 97, 106, 126, 116, 117, + 118, 127, 129, 130, 131, 119, 120, 132, 133, 11, + 134, 122, 135, 123, 128, 136, 124, 138, 141, 9, + 143, 144, 126, 145, 146, 150, 127, 129, 147, 130, + 131, 148, 132, 149, 133, 134, 151, 153, 135, 154, + 159, 136, 157, 138, 141, 143, 155, 144, 155, 145, + 146, 150, 158, 147, 160, 162, 148, 161, 149, 163, + 164, 151, 153, 165, 166, 154, 159, 157, 170, 171, + + 173, 155, 172, 155, 175, 176, 181, 158, 177, 178, + 160, 162, 161, 179, 163, 180, 164, 183, 165, 184, + 166, 186, 187, 170, 188, 171, 173, 172, 189, 191, + 175, 176, 181, 177, 178, 192, 5, 194, 179, 196, + 180, 197, 199, 183, 184, 200, 186, 201, 187, 188, + 202, 203, 208, 189, 191, 205, 206, 207, 209, 211, + 212, 192, 194, 213, 196, 214, 197, 215, 199, 216, + 200, 217, 219, 201, 218, 221, 202, 203, 208, 222, + 205, 206, 207, 209, 211, 223, 212, 225, 226, 213, + 227, 214, 228, 215, 231, 216, 232, 217, 219, 218, + + 234, 221, 238, 240, 222, 241, 242, 0, 243, 244, + 223, 245, 249, 225, 226, 247, 227, 228, 248, 250, + 231, 232, 251, 252, 260, 234, 253, 238, 254, 240, + 241, 256, 242, 243, 244, 258, 259, 245, 249, 264, + 247, 265, 270, 248, 266, 250, 271, 251, 272, 252, + 260, 253, 274, 254, 278, 282, 256, 281, 287, 288, + 258, 259, 289, 290, 293, 264, 295, 265, 270, 266, + 296, 271, 297, 298, 272, 303, 0, 274, 304, 307, + 278, 282, 281, 287, 309, 288, 0, 289, 290, 293, + 0, 295, 0, 0, 0, 0, 296, 297, 298, 0, + + 0, 303, 0, 304, 307, 0, 0, 0, 0, 309, + 312, 312, 312, 312, 312, 313, 313, 313, 313, 313, + 314, 314, 315, 0, 315, 318, 0, 318, 319, 0, + 319, 319, 320, 0, 320, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, + 311, 311, 311, 311, 311, 311, 311, 311, 311 + + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "sphinxql.l" +#line 2 "sphinxql.l" +#include "yysphinxql.h" + +#if USE_WINDOWS +#pragma warning(push,1) +#endif + +// warning, lexer generator dependent! +// this macro relies on that in flex yytext points to the actual location in the buffer +#define YYSTOREBOUNDS \ + { \ + lvalp->m_iStart = yytext - pParser->m_pBuf; \ + lvalp->m_iEnd = lvalp->m_iStart + yyleng; \ + pParser->m_pLastTokenStart = yytext; \ + } + + +#line 709 "llsphinxql.c" + +#define INITIAL 0 +#define ccomment 1 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#if !USE_WINDOWS +#include +#endif +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals (yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (yyscan_t yyscanner ); + +int yyget_debug (yyscan_t yyscanner ); + +void yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *yyget_in (yyscan_t yyscanner ); + +void yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *yyget_out (yyscan_t yyscanner ); + +void yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int yyget_leng (yyscan_t yyscanner ); + +char *yyget_text (yyscan_t yyscanner ); + +int yyget_lineno (yyscan_t yyscanner ); + +void yyset_lineno (int line_number ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap (yyscan_t yyscanner ); +#else +extern int yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (yyscan_t yyscanner ); +#else +static int input (yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO fwrite( yytext, yyleng, 1, yyout ) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + +#line 29 "sphinxql.l" + + +#line 932 "llsphinxql.c" + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + yy_load_buffer_state(yyscanner ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 312 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 636 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 31 "sphinxql.l" +{ BEGIN(ccomment); } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 32 "sphinxql.l" +{ } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 33 "sphinxql.l" +{ BEGIN(INITIAL); } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 35 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_AND; } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 36 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_AS; } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 37 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_ASC; } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 38 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_AVG; } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 39 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_BEGIN; } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 40 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_BETWEEN; } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 41 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_BY; } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 42 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_CALL; } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 43 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_COLLATION; } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 44 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_COMMIT; } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 45 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_COUNT; } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 46 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_CREATE; } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 47 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_DELETE; } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 48 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_DESC; } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 49 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_DESCRIBE; } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 50 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_DISTINCT; } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 51 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_DIV; } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 52 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_DROP; } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 53 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_FALSE; } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 54 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_FLOAT; } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 55 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_FROM; } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 56 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_FUNCTION; } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 57 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_GLOBAL; } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 58 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_GROUP; } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 59 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_ID; } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 60 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_IN; } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 61 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_INSERT; } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 62 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_INT; } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 63 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_INTO; } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 64 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_LIMIT; } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 65 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_MATCH; } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 66 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_MAX; } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 67 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_META; } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 68 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_MIN; } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 69 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_MOD; } + YY_BREAK +case 39: +YY_RULE_SETUP +#line 70 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_NAMES; } + YY_BREAK +case 40: +YY_RULE_SETUP +#line 71 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_NOT; } + YY_BREAK +case 41: +YY_RULE_SETUP +#line 72 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_NULL; } + YY_BREAK +case 42: +YY_RULE_SETUP +#line 73 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_OPTION; } + YY_BREAK +case 43: +YY_RULE_SETUP +#line 74 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_OR; } + YY_BREAK +case 44: +YY_RULE_SETUP +#line 75 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_ORDER; } + YY_BREAK +case 45: +YY_RULE_SETUP +#line 76 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_RAND; } + YY_BREAK +case 46: +YY_RULE_SETUP +#line 77 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_REPLACE; } + YY_BREAK +case 47: +YY_RULE_SETUP +#line 78 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_RETURNS; } + YY_BREAK +case 48: +YY_RULE_SETUP +#line 79 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_ROLLBACK; } + YY_BREAK +case 49: +YY_RULE_SETUP +#line 80 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_SELECT; } + YY_BREAK +case 50: +YY_RULE_SETUP +#line 81 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_SET; } + YY_BREAK +case 51: +YY_RULE_SETUP +#line 82 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_SESSION; } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 83 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_SHOW; } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 84 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_SONAME; } + YY_BREAK +case 54: +YY_RULE_SETUP +#line 85 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_START; } + YY_BREAK +case 55: +YY_RULE_SETUP +#line 86 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_STATUS; } + YY_BREAK +case 56: +YY_RULE_SETUP +#line 87 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_SUM; } + YY_BREAK +case 57: +YY_RULE_SETUP +#line 88 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_TABLES; } + YY_BREAK +case 58: +YY_RULE_SETUP +#line 89 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_TRANSACTION; } + YY_BREAK +case 59: +YY_RULE_SETUP +#line 90 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_TRUE; } + YY_BREAK +case 60: +YY_RULE_SETUP +#line 91 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_UPDATE; } + YY_BREAK +case 61: +YY_RULE_SETUP +#line 92 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_VALUES; } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 93 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_VARIABLES; } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 94 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_WARNINGS; } + YY_BREAK +case 64: +YY_RULE_SETUP +#line 95 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_WEIGHT; } + YY_BREAK +case 65: +YY_RULE_SETUP +#line 96 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_WHERE; } + YY_BREAK +case 66: +YY_RULE_SETUP +#line 97 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_WITHIN; } + YY_BREAK +case 67: +YY_RULE_SETUP +#line 99 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_NE; } + YY_BREAK +case 68: +YY_RULE_SETUP +#line 100 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_NE; } + YY_BREAK +case 69: +YY_RULE_SETUP +#line 101 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_LTE; } + YY_BREAK +case 70: +YY_RULE_SETUP +#line 102 "sphinxql.l" +{ YYSTOREBOUNDS; return TOK_GTE; } + YY_BREAK +case 71: +YY_RULE_SETUP +#line 103 "sphinxql.l" +{ YYSTOREBOUNDS; return '='; } + YY_BREAK +case 72: +/* rule 72 can match eol */ +YY_RULE_SETUP +#line 105 "sphinxql.l" +{ YYSTOREBOUNDS; SqlUnescape ( lvalp->m_sValue, yytext, yyleng ); return TOK_QUOTED_STRING; } + YY_BREAK +case 73: +YY_RULE_SETUP +#line 107 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_sValue = yytext; lvalp->m_fValue = (float)strtod ( yytext, NULL ); return TOK_CONST_FLOAT; } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 108 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_sValue = yytext; lvalp->m_iValue = strtoll ( yytext, NULL, 10 ); return TOK_CONST_INT; } + YY_BREAK +case 75: +YY_RULE_SETUP +#line 110 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_ATIDENT; } + YY_BREAK +case 76: +YY_RULE_SETUP +#line 111 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_ATIDENT; } + YY_BREAK +case 77: +YY_RULE_SETUP +#line 112 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_ATIDENT; } + YY_BREAK +case 78: +YY_RULE_SETUP +#line 113 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_IDENT; } + YY_BREAK +case 79: +YY_RULE_SETUP +#line 114 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_USERVAR; } + YY_BREAK +case 80: +YY_RULE_SETUP +#line 115 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_SYSVAR; } + YY_BREAK +case 81: +YY_RULE_SETUP +#line 116 "sphinxql.l" +{ YYSTOREBOUNDS; lvalp->m_iStart++; lvalp->m_iEnd--; lvalp->m_sValue.SetBinary ( yytext+1, strlen(yytext)-2 ); return TOK_IDENT; } + YY_BREAK +case 82: +/* rule 82 can match eol */ +YY_RULE_SETUP +#line 118 "sphinxql.l" +{ ; } + YY_BREAK +case 83: +YY_RULE_SETUP +#line 119 "sphinxql.l" +{ YYSTOREBOUNDS; return yytext[0]; } + YY_BREAK +case 84: +YY_RULE_SETUP +#line 121 "sphinxql.l" +ECHO; + YY_BREAK +#line 1437 "llsphinxql.c" +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(ccomment): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap(yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = yyg->yytext_ptr; + register int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart(yyin ,yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 312 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + register int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + register char *yy_cp = yyg->yy_c_buf_p; + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 312 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 311); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart(yyin ,yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap(yyscanner ) ) + return EOF; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); + yy_load_buffer_state(yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state(yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ,yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer(b,file ,yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree((void *) b->yy_ch_buf ,yyscanner ); + + yyfree((void *) b ,yyscanner ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer(b ,yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state(yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + int num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer(b ,yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param bytes the byte buffer to scan + * @param len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) yyalloc(n ,yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer(buf,n ,yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param line_number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "yyset_lineno called with no buffer" , yyscanner); + + yylineno = line_number; +} + +/** Set the current column. + * @param line_number + * @param yyscanner The scanner object. + */ +void yyset_column (int column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "yyset_column called with no buffer" , yyscanner); + + yycolumn = column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = in_str ; +} + +void yyset_out (FILE * out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ + +int yylex_init(yyscan_t* ptr_yy_globals) + +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ + +int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) + +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = 0; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = (char *) 0; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack ,yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree(yyg->yy_start_stack ,yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + return (void *) malloc( size ); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 121 "sphinxql.l" + + + +// warning, lexer generator dependent! +// flex inserts trailing zero as needed into the buffer when lexing +// but we need that rolled back when doing error reporting from yyerror +void yylex_unhold ( yyscan_t yyscanner ) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( YY_CURRENT_BUFFER ) + { + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } +} + +#if USE_WINDOWS +#pragma warning(pop) +#endif + diff --git a/coreseek/csft-4.1/src/md5.cpp b/coreseek/csft-4.1/src/md5.cpp new file mode 100755 index 0000000..2c9c2fc --- /dev/null +++ b/coreseek/csft-4.1/src/md5.cpp @@ -0,0 +1,381 @@ +/* + Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + L. Peter Deutsch + ghost@aladdin.com + + */ +/* $Id$ */ +/* + Independent implementation of MD5 (RFC 1321). + + This code implements the MD5 Algorithm defined in RFC 1321, whose + text is available at + http://www.ietf.org/rfc/rfc1321.txt + The code is derived from the text of the RFC, including the test suite + (section A.5) but excluding the rest of Appendix A. It does not include + any code or documentation that is identified in the RFC as being + copyrighted. + + The original and principal author of md5.c is L. Peter Deutsch + . Other authors are noted in the change history + that follows (in reverse chronological order): + + 2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order + either statically or dynamically; added missing #include + in library. + 2002-03-11 lpd Corrected argument list for main(), and added int return + type, in test program and T value program. + 2002-02-21 lpd Added missing #include in test program. + 2000-07-03 lpd Patched to eliminate warnings about "constant is + unsigned in ANSI C, signed in traditional"; made test program + self-checking. + 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. + 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). + 1999-05-03 lpd Original version. + */ + +#include "md5.h" +#include + +#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */ +#ifdef ARCH_IS_BIG_ENDIAN +# define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1) +#else +# define BYTE_ORDER 0 +#endif + +#define T_MASK ((md5_word_t)~0) +#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87) +#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9) +#define T3 0x242070db +#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111) +#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050) +#define T6 0x4787c62a +#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec) +#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe) +#define T9 0x698098d8 +#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850) +#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e) +#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841) +#define T13 0x6b901122 +#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c) +#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71) +#define T16 0x49b40821 +#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d) +#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf) +#define T19 0x265e5a51 +#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855) +#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2) +#define T22 0x02441453 +#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e) +#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437) +#define T25 0x21e1cde6 +#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829) +#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278) +#define T28 0x455a14ed +#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa) +#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07) +#define T31 0x676f02d9 +#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375) +#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd) +#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e) +#define T35 0x6d9d6122 +#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3) +#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb) +#define T38 0x4bdecfa9 +#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f) +#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f) +#define T41 0x289b7ec6 +#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805) +#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a) +#define T44 0x04881d05 +#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6) +#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a) +#define T47 0x1fa27cf8 +#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a) +#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb) +#define T50 0x432aff97 +#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58) +#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6) +#define T53 0x655b59c3 +#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d) +#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82) +#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e) +#define T57 0x6fa87e4f +#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f) +#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb) +#define T60 0x4e0811a1 +#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d) +#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca) +#define T63 0x2ad7d2bb +#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e) + + +static void +md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/) +{ + md5_word_t + a = pms->abcd[0], b = pms->abcd[1], + c = pms->abcd[2], d = pms->abcd[3]; + md5_word_t t; +#if BYTE_ORDER > 0 + /* Define storage only for big-endian CPUs. */ + md5_word_t X[16]; +#else + /* Define storage for little-endian or both types of CPUs. */ + md5_word_t xbuf[16]; + const md5_word_t *X; +#endif + + { +#if BYTE_ORDER == 0 + /* + * Determine dynamically whether this is a big-endian or + * little-endian machine, since we can use a more efficient + * algorithm on the latter. + */ + static const int w = 1; + + if (*((const md5_byte_t *)&w)) /* dynamic little-endian */ +#endif +#if BYTE_ORDER <= 0 /* little-endian */ + { + /* + * On little-endian machines, we can process properly aligned + * data without copying it. + */ + if (!((data - (const md5_byte_t *)0) & 3)) { + /* data are properly aligned */ + X = (const md5_word_t *)data; + } else { + /* not aligned */ + memcpy(xbuf, data, 64); + X = xbuf; + } + } +#endif +#if BYTE_ORDER == 0 + else /* dynamic big-endian */ +#endif +#if BYTE_ORDER >= 0 /* big-endian */ + { + /* + * On big-endian machines, we must arrange the bytes in the + * right order. + */ + const md5_byte_t *xp = data; + int i; + +# if BYTE_ORDER == 0 + X = xbuf; /* (dynamic only) */ +# else +# define xbuf X /* (static only) */ +# endif + for (i = 0; i < 16; ++i, xp += 4) + xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24); + } +#endif + } + +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) + + /* Round 1. */ + /* Let [abcd k s i] denote the operation + a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ +#define F(x, y, z) (((x) & (y)) | (~(x) & (z))) +#define SET(a, b, c, d, k, s, Ti)\ + t = a + F(b,c,d) + X[k] + Ti;\ + a = ROTATE_LEFT(t, s) + b + /* Do the following 16 operations. */ + SET(a, b, c, d, 0, 7, T1); + SET(d, a, b, c, 1, 12, T2); + SET(c, d, a, b, 2, 17, T3); + SET(b, c, d, a, 3, 22, T4); + SET(a, b, c, d, 4, 7, T5); + SET(d, a, b, c, 5, 12, T6); + SET(c, d, a, b, 6, 17, T7); + SET(b, c, d, a, 7, 22, T8); + SET(a, b, c, d, 8, 7, T9); + SET(d, a, b, c, 9, 12, T10); + SET(c, d, a, b, 10, 17, T11); + SET(b, c, d, a, 11, 22, T12); + SET(a, b, c, d, 12, 7, T13); + SET(d, a, b, c, 13, 12, T14); + SET(c, d, a, b, 14, 17, T15); + SET(b, c, d, a, 15, 22, T16); +#undef SET + + /* Round 2. */ + /* Let [abcd k s i] denote the operation + a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ +#define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) +#define SET(a, b, c, d, k, s, Ti)\ + t = a + G(b,c,d) + X[k] + Ti;\ + a = ROTATE_LEFT(t, s) + b + /* Do the following 16 operations. */ + SET(a, b, c, d, 1, 5, T17); + SET(d, a, b, c, 6, 9, T18); + SET(c, d, a, b, 11, 14, T19); + SET(b, c, d, a, 0, 20, T20); + SET(a, b, c, d, 5, 5, T21); + SET(d, a, b, c, 10, 9, T22); + SET(c, d, a, b, 15, 14, T23); + SET(b, c, d, a, 4, 20, T24); + SET(a, b, c, d, 9, 5, T25); + SET(d, a, b, c, 14, 9, T26); + SET(c, d, a, b, 3, 14, T27); + SET(b, c, d, a, 8, 20, T28); + SET(a, b, c, d, 13, 5, T29); + SET(d, a, b, c, 2, 9, T30); + SET(c, d, a, b, 7, 14, T31); + SET(b, c, d, a, 12, 20, T32); +#undef SET + + /* Round 3. */ + /* Let [abcd k s t] denote the operation + a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define SET(a, b, c, d, k, s, Ti)\ + t = a + H(b,c,d) + X[k] + Ti;\ + a = ROTATE_LEFT(t, s) + b + /* Do the following 16 operations. */ + SET(a, b, c, d, 5, 4, T33); + SET(d, a, b, c, 8, 11, T34); + SET(c, d, a, b, 11, 16, T35); + SET(b, c, d, a, 14, 23, T36); + SET(a, b, c, d, 1, 4, T37); + SET(d, a, b, c, 4, 11, T38); + SET(c, d, a, b, 7, 16, T39); + SET(b, c, d, a, 10, 23, T40); + SET(a, b, c, d, 13, 4, T41); + SET(d, a, b, c, 0, 11, T42); + SET(c, d, a, b, 3, 16, T43); + SET(b, c, d, a, 6, 23, T44); + SET(a, b, c, d, 9, 4, T45); + SET(d, a, b, c, 12, 11, T46); + SET(c, d, a, b, 15, 16, T47); + SET(b, c, d, a, 2, 23, T48); +#undef SET + + /* Round 4. */ + /* Let [abcd k s t] denote the operation + a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ +#define I(x, y, z) ((y) ^ ((x) | ~(z))) +#define SET(a, b, c, d, k, s, Ti)\ + t = a + I(b,c,d) + X[k] + Ti;\ + a = ROTATE_LEFT(t, s) + b + /* Do the following 16 operations. */ + SET(a, b, c, d, 0, 6, T49); + SET(d, a, b, c, 7, 10, T50); + SET(c, d, a, b, 14, 15, T51); + SET(b, c, d, a, 5, 21, T52); + SET(a, b, c, d, 12, 6, T53); + SET(d, a, b, c, 3, 10, T54); + SET(c, d, a, b, 10, 15, T55); + SET(b, c, d, a, 1, 21, T56); + SET(a, b, c, d, 8, 6, T57); + SET(d, a, b, c, 15, 10, T58); + SET(c, d, a, b, 6, 15, T59); + SET(b, c, d, a, 13, 21, T60); + SET(a, b, c, d, 4, 6, T61); + SET(d, a, b, c, 11, 10, T62); + SET(c, d, a, b, 2, 15, T63); + SET(b, c, d, a, 9, 21, T64); +#undef SET + + /* Then perform the following additions. (That is increment each + of the four registers by the value it had before this block + was started.) */ + pms->abcd[0] += a; + pms->abcd[1] += b; + pms->abcd[2] += c; + pms->abcd[3] += d; +} + +void +md5_init(md5_state_t *pms) +{ + pms->count[0] = pms->count[1] = 0; + pms->abcd[0] = 0x67452301; + pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; + pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; + pms->abcd[3] = 0x10325476; +} + +void +md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes) +{ + const md5_byte_t *p = data; + int left = nbytes; + int offset = (pms->count[0] >> 3) & 63; + md5_word_t nbits = (md5_word_t)(nbytes << 3); + + if (nbytes <= 0) + return; + + /* Update the message length. */ + pms->count[1] += nbytes >> 29; + pms->count[0] += nbits; + if (pms->count[0] < nbits) + pms->count[1]++; + + /* Process an initial partial block. */ + if (offset) { + int copy = (offset + nbytes > 64 ? 64 - offset : nbytes); + + memcpy(pms->buf + offset, p, copy); + if (offset + copy < 64) + return; + p += copy; + left -= copy; + md5_process(pms, pms->buf); + } + + /* Process full blocks. */ + for (; left >= 64; p += 64, left -= 64) + md5_process(pms, p); + + /* Process a final partial block. */ + if (left) + memcpy(pms->buf, p, left); +} + +void +md5_finish(md5_state_t *pms, md5_byte_t digest[16]) +{ + static const md5_byte_t pad[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }; + md5_byte_t data[8]; + int i; + + /* Save the length before padding. */ + for (i = 0; i < 8; ++i) + data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3)); + /* Pad to 56 bytes mod 64. */ + md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1); + /* Append the length. */ + md5_append(pms, data, 8); + for (i = 0; i < 16; ++i) + digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3)); +} diff --git a/coreseek/csft-4.1/src/md5.h b/coreseek/csft-4.1/src/md5.h new file mode 100755 index 0000000..5eb6d6c --- /dev/null +++ b/coreseek/csft-4.1/src/md5.h @@ -0,0 +1,91 @@ +/* + Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + L. Peter Deutsch + ghost@aladdin.com + + */ +/* $Id$ */ +/* + Independent implementation of MD5 (RFC 1321). + + This code implements the MD5 Algorithm defined in RFC 1321, whose + text is available at + http://www.ietf.org/rfc/rfc1321.txt + The code is derived from the text of the RFC, including the test suite + (section A.5) but excluding the rest of Appendix A. It does not include + any code or documentation that is identified in the RFC as being + copyrighted. + + The original and principal author of md5.h is L. Peter Deutsch + . Other authors are noted in the change history + that follows (in reverse chronological order): + + 2002-04-13 lpd Removed support for non-ANSI compilers; removed + references to Ghostscript; clarified derivation from RFC 1321; + now handles byte order either statically or dynamically. + 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. + 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); + added conditionalization for C++ compilation from Martin + Purschke . + 1999-05-03 lpd Original version. + */ + +#ifndef md5_INCLUDED +# define md5_INCLUDED + +/* + * This package supports both compile-time and run-time determination of CPU + * byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be + * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is + * defined as non-zero, the code will be compiled to run only on big-endian + * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to + * run on either big- or little-endian CPUs, but will run slightly less + * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined. + */ + +typedef unsigned char md5_byte_t; /* 8-bit byte */ +typedef unsigned int md5_word_t; /* 32-bit word */ + +/* Define the state of the MD5 Algorithm. */ +typedef struct md5_state_s { + md5_word_t count[2]; /* message length in bits, lsw first */ + md5_word_t abcd[4]; /* digest buffer */ + md5_byte_t buf[64]; /* accumulate block */ +} md5_state_t; + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* Initialize the algorithm. */ +void md5_init(md5_state_t *pms); + +/* Append a string to the message. */ +void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); + +/* Finish the message and return the digest. */ +void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); + +#ifdef __cplusplus +} /* end extern "C" */ +#endif + +#endif /* md5_INCLUDED */ diff --git a/coreseek/csft-4.1/src/md5.o b/coreseek/csft-4.1/src/md5.o new file mode 100644 index 0000000..64617ec Binary files /dev/null and b/coreseek/csft-4.1/src/md5.o differ diff --git a/coreseek/csft-4.1/src/py_helper.cpp b/coreseek/csft-4.1/src/py_helper.cpp new file mode 100755 index 0000000..33e4ec7 --- /dev/null +++ b/coreseek/csft-4.1/src/py_helper.cpp @@ -0,0 +1,730 @@ +#ifdef _WIN32 +#pragma warning(disable:4996) +#endif + + +#include "sphinx.h" +#include "sphinxutils.h" + +//#include "sphinx_internal.h" +#include "sphinxsearch.h" + +#include "py_layer.h" + +#include "sphinxquery.h" +#include "sphinxint.h" + +#include "py_helper.h" +#include "py_source.h" + +//py-layer HITMAN, -> change it if sphinx.cpp changed. +typedef Hitman_c<8> HITMAN; + +#if USE_PYTHON + +#define RET_PYNONE { Py_INCREF(Py_None); return Py_None; } + +PyObject * PyLowercaser_Helper_ToLower(PyObject *, PyObject* args) ; + +int Lowercaser_Helper::ToLower(int iCode) +{ + if(m_lower) { + return m_lower->ToLower(iCode); + } + + return 0; +} + + +static PyMethodDef Helper_methods[] = { + //{"Numbers", Example_new_Numbers, METH_VARARGS}, + {"toLower", PyLowercaser_Helper_ToLower, METH_VARARGS}, + {NULL, NULL} +}; + +typedef struct { + PyObject_HEAD + /* Type-specific fields go here. */ + CSphLowercaser* m_Lower; +} csfHelper_ToLowerObject; + +static PyTypeObject csfHelper_ToLowerType = { + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "csfHelper.ToLower", /*tp_name*/ + sizeof(csfHelper_ToLowerObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "ToLower Helper", /* tp_doc */ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + Helper_methods, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ +}; + +//PyObject *PyNewLowercaser_Helper(PyObject *, PyObject* args) +PyObject *PyNewLowercaser_Helper(CSphLowercaser* aLower) +{ + + if(!aLower) return NULL; + + csfHelper_ToLowerObject *self; + self = (csfHelper_ToLowerObject *)PyType_GenericNew(&csfHelper_ToLowerType, NULL, NULL); + self->m_Lower = aLower; + return (PyObject*)self; +} + +PyObject * PyLowercaser_Helper_ToLower(PyObject * self, PyObject* args) +{ + int arg1; + int ok = PyArg_ParseTuple( args, "i", &arg1); + if(!ok) { + if(PyErr_Occurred()) { + PyErr_Print(); + PyErr_Clear(); + } + RET_PYNONE; + } + + csfHelper_ToLowerObject *self2 = (csfHelper_ToLowerObject *)self; + //PyObject* instance = PyObject_GetAttrString(self, "__c_lower"); + if(self2) { + int result = self2->m_Lower->ToLower(arg1); + return Py_BuildValue("i",result); + } + return Py_BuildValue("i",0); +} + +////////////////////////////////////////////////////////////////////////// + + +typedef struct { + PyObject_HEAD + /* Type-specific fields go here. */ + CSphSource_Python* m_Document; //only PySource is supported for the leak support of setField in other documents + +} csfHelper_DocumentObject; + +PyObject * PyDocument_Helper_SetAttr(PyObject * self, PyObject* args) { + char* key = NULL; + PyObject* pV = NULL; + int ok = PyArg_ParseTuple( args, "sO", &key, &pV); //not inc the value refer + if(!ok) return NULL; + + csfHelper_DocumentObject *self2 = (csfHelper_DocumentObject *)self; + if(self2) { + int nRet = self2->m_Document->SetAttr(key, pV); + return Py_BuildValue("i",nRet); + } + + return NULL; +} + +PyObject * PyDocument_Helper_GetAttr(PyObject * self, PyObject* args) { + char* key = NULL; + int ok = PyArg_ParseTuple( args, "s", &key); + if(!ok) return NULL; + + csfHelper_DocumentObject *self2 = (csfHelper_DocumentObject *)self; + if(self2) { + return self2->m_Document->GetAttr(key); + } + return NULL; +} + +static PyMethodDef PyDocument_Helper_methods[] = { + //{"Numbers", Example_new_Numbers, METH_VARARGS}, + {"SetAttr", PyDocument_Helper_SetAttr, METH_VARARGS}, + {"GetAttr", PyDocument_Helper_GetAttr, METH_VARARGS}, + {NULL, NULL} +}; + +static PyTypeObject csfHelper_DocumentType = { + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "csfHelper.Document", /*tp_name*/ + sizeof(csfHelper_DocumentObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + 0, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, /*tp_flags*/ + "Document Helper", /* tp_doc */ + 0, /*tp_traverse*/ + 0, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + PyDocument_Helper_methods, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ +}; + +PyObject *PyNewDocument_Helper( CSphSource* pSource) +{ + if(!pSource) return NULL; + + CSphSource_Python* pPySource = dynamic_cast(pSource); + if(!pPySource) return NULL; + + + csfHelper_DocumentObject *self; + self = (csfHelper_DocumentObject *)PyType_GenericNew(&csfHelper_DocumentType, NULL, NULL); + self->m_Document = pPySource; + return (PyObject*)self; +} + +PyObject * PyHit_Push(PyObject * pSelf, PyObject* args, PyObject* kwargs); +PyObject * PyHit_PushWord(PyObject * pSelf, PyObject* args, PyObject* kwargs); +PyObject * PyHit_GetWordID(PyObject * pSelf, PyObject* args, PyObject* kwargs); + +PyObject * PyHit_GetFieldName(PyObject *, PyObject* args); +PyObject * PyHit_GetFieldID(PyObject *, PyObject* args); +PyObject * PyHit_GetCurPos(PyObject *, PyObject* args); +PyObject * PyHit_GetCurPhraseID(PyObject *, PyObject* args); + + + +static PyMethodDef HitCollector_methods[] = { + {"getFieldName", PyHit_GetFieldName, METH_VARARGS}, + {"getFieldID", PyHit_GetFieldID, METH_VARARGS}, + {"getCurrentPos", PyHit_GetCurPos, METH_VARARGS}, + {"getCurrentPhraseID", PyHit_GetCurPhraseID, METH_VARARGS}, + {"push", (PyCFunction)PyHit_Push, METH_VARARGS|METH_KEYWORDS}, + {"pushWord", (PyCFunction)PyHit_PushWord, METH_VARARGS|METH_KEYWORDS}, + {"wordID", (PyCFunction)PyHit_GetWordID, METH_VARARGS|METH_KEYWORDS}, + {NULL, NULL} +}; + +static void PyHit_dealloc(csfHelper_HitCollectorObject* self); +static PyObject * PyHit_new(PyTypeObject *type, PyObject *args, PyObject *kwds); +static int PyHit_clear(csfHelper_HitCollectorObject *self); +static int PyHit_traverse(csfHelper_HitCollectorObject *self, visitproc visit, void *arg); + +static PyTypeObject csfHelper_HitCollectorType = { + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "csfHelper.HitCollector", /*tp_name*/ + sizeof(csfHelper_HitCollectorObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)PyHit_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_compare*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT, // | Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + "Hits Collector", /* tp_doc */ + (traverseproc)PyHit_traverse, /*tp_traverse*/ + (inquiry)PyHit_clear, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + HitCollector_methods, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + 0, /*tp_dictoffset*/ + 0, /*tp_init*/ + 0, /*tp_alloc*/ + 0, //(newfunc)PyHit_new, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ +}; + + +////////////////////////////////////////////////////////////////////////// + +static PyObject * +PyHit_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + csfHelper_HitCollectorObject *x; + x = (csfHelper_HitCollectorObject *)PyType_GenericNew(type, args, kwds); + if (x == NULL) + return NULL; + //x->p_status = UNSAVED; + //x->p_serial = Integer_FromLong(0L); + //if (x->p_serial == NULL) + // return NULL; + //x->p_connection = Py_None; + //Py_INCREF(x->p_connection); + //x->p_oid = Py_None; + //Py_INCREF(x->p_oid); + return (PyObject *)x; +} + +void AddHit(csfHelper_HitCollectorObject *self, SphWordID_t iWordID, int iPos, int iPhrase) +{ + // copy from AddHitFor. + // TODO: append iPhrase here? + if ( !iWordID ) + return; + + self->m_pSource->AddHit( self->m_pSource->m_tDocInfo.m_iDocID, iWordID, iPos); +} + +// static void PyHit_dealloc(csfHelper_HitCollectorObject* self) +static void +PyHit_dealloc(csfHelper_HitCollectorObject *self) +{ + /* + PyObject_GC_UnTrack(self); + Py_TRASHCAN_SAFE_BEGIN(self); + //Py_XDECREF(self->p_connection); + //Py_XDECREF(self->p_oid); + //Py_XDECREF(self->p_serial); + PyObject_GC_Del(self); + Py_TRASHCAN_SAFE_END(self); + */ + if(self->m_FieldName) + { + delete self->m_FieldName; + self->m_FieldName = NULL; + } + if(self->m_tSchema) + delete self->m_tSchema; + self->m_tSchema = NULL; + + // i've no source. + self->ob_type->tp_free((PyObject *)self); +} + +static int +PyHit_traverse(csfHelper_HitCollectorObject *self, visitproc visit, void *arg) +{ + //Py_VISIT(self->p_connection); + //Py_VISIT(self->p_oid); + //Py_VISIT(self->p_serial); + return 0; +} + +static int +PyHit_clear(csfHelper_HitCollectorObject *self) +{ + //Py_CLEAR(self->p_connection); + //Py_CLEAR(self->p_oid); + //Py_CLEAR(self->p_serial); + return 0; +} + +PyObject * PyHit_Push(PyObject * pSelf, PyObject* args, PyObject* kwargs) +{ + + //int iPos = HIT_PACK ( iField, iStartPos ); + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)pSelf; + static char *kwlist[] = {"wordid", "pos", "phrase", "fieldindex", NULL}; + + SphWordID_t iWord; + int iPos = -1; + int iPhrase = -1; + int iField = -1; +#if USE_64BIT + int ok = PyArg_ParseTupleAndKeywords( args, kwargs, "K|iii", kwlist, &iWord, +#else + int ok = PyArg_ParseTupleAndKeywords( args, kwargs, "k|iii", kwlist, &iWord, +#endif + &iPos , &iPhrase, &iField ); //not inc the value refer + + if(!ok) { + if(PyErr_Occurred()) { + PyErr_Print(); + //PyErr_Clear(); + } + return NULL; + } + + if(iPos < 1 ) iPos = -1; // 0 and < is invalid. + if(iPhrase <1) iPhrase = -1; + + // fast setting + if(!iWord) { + if(iPos != -1) + self->iPos = iPos; + + if(iPhrase == -1) + self->iPhrase = iPhrase; //refresh iPos + + RET_PYNONE; + } + + // push hit + if(iPos == -1) + iPos = self->iPos; + else + { + if(iField == -1) + self->iPos = iPos; //refresh iPos + } + + // no more than 24, if greater than 24, just leave field as current. + if(iField > SPH_MAX_FIELDS || iField < 0) + iField = -1; + + + + if(iPhrase == -1) + iPhrase = self->iPhrase; + else + { + if(iField == -1) + self->iPhrase = iPhrase; //refresh iPos + } + + if(iField == -1) + iField = self->iField; //NO, NO, u can NOT change field via a filled parameters' pushWord call... + + + { + iPos = HITMAN::Create(iField, iPos); + AddHit(self, iWord, iPos, iPhrase); + self->iPos++ ; + } + RET_PYNONE; +} + +PyObject * PyHit_PushWord(PyObject * pSelf, PyObject* args, PyObject* kwargs) +{ + /* + = You can change the iPos & iPhrase setting without add a real hit by push a Empty word(""). + @param: + - pos: + - phrase: + */ + + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)pSelf; + static char *kwlist[] = {"word", "pos", "phrase", "fieldindex", NULL}; + + const char* sWord = NULL; + int iPos = -1; + int iPhrase = -1; + int iField = -1; + + int ok = PyArg_ParseTupleAndKeywords( args, kwargs, "z|iii", kwlist, &sWord, + &iPos , &iPhrase, &iField ); //not inc the value refer + + if(!ok) { + if(PyErr_Occurred()) { + PyErr_Print(); + PyErr_Clear(); + } + return NULL; + } + + if(iPos < 1 ) iPos = -1; // 0 and < is invalid. + if(iPhrase <1) iPhrase = -1; + + //fast setting + if(!sWord) { + if(iPos != -1) + self->iPos = iPos; + + if(iPhrase == -1) + self->iPhrase = iPhrase; //refresh iPos + + RET_PYNONE; + } + + if(iPos == -1) + iPos = self->iPos; + else + { + if(iField == -1) + self->iPos = iPos; //refresh iPos + } + + // no more than 24, if greater than 24, just leave field as current. + if(iField > SPH_MAX_FIELDS || iField < 0) + iField = -1; + + if(iPhrase == -1) + iPhrase = self->iPhrase; + else + { + if(iField == -1) + self->iPhrase = iPhrase; //refresh iPos + } + + if(iField == -1) + iField = self->iField; //NO, NO, u can NOT change field via a filled parameters' pushWord call... + + + { + CSphSource_Python* pPySource = dynamic_cast(self->m_pSource); + BYTE sBuf [ 16+3*SPH_MAX_WORD_LEN + 1024 ]; + + if(pPySource){ + CSphDict* pDict = pPySource->GetDict(); + bool bWordDict = pDict->GetSettings().m_bWordDict; + bool bGlobalPartialMatch = !bWordDict && ( pPySource->m_iMinPrefixLen > 0 || pPySource->m_iMinInfixLen > 0 ); + + { + SphWordID_t iWord = pDict->GetWordID ((BYTE*) sWord ); + iPos = HITMAN::Create(iField, iPos); + AddHit(self, iWord, iPos, iPhrase); + } + + if ( bGlobalPartialMatch ) + { + int iBytes = strlen ( (const char*)sWord ); + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD; + sBuf[iBytes+1] = '\0'; + AddHit(self, pDict->GetWordIDWithMarkers ( sBuf ), iPos, iPhrase); + } + + if ( pPySource->m_bIndexExactWords ) + { + int iBytes = strlen ( (const char*)sWord ); + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD_NONSTEMMED; + sBuf[iBytes+1] = '\0'; + AddHit(self, pDict->GetWordIDNonStemmed ( sBuf ), iPos, iPhrase); + } + + self->iPos++ ; + } + } + RET_PYNONE; +} + +PyObject * PyHit_GetFieldID(PyObject * pSelf, PyObject* args) +{ + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)pSelf; + const char* key = NULL; + int ok = PyArg_ParseTuple( args, "s", &key); + if(!ok) { + return NULL; + } + int idx = self->m_tSchema->GetFieldIndex(key); + return PyInt_FromLong(idx); +} + +PyObject * PyHit_GetWordID(PyObject * pSelf, PyObject* args, PyObject* kwargs) +{ + /* + @param: + - Exact: + - Steam: + - ID with Marker: + */ + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)pSelf; + static char *kwlist[] = {"word", "exact", "steam", "idmarker", NULL }; + + char* sWord = NULL; + unsigned char bExact = 1; + unsigned char bSteam = 0; + unsigned char bIdMarker = 0; + int ok = PyArg_ParseTupleAndKeywords( args, kwargs, "s|BBB", kwlist, &sWord, + &bExact , &bSteam, &bIdMarker ); //not inc the value refer + + if(!ok) { + if(PyErr_Occurred()) { + PyErr_Print(); + PyErr_Clear(); + } + return NULL; + } + + { + CSphSource_Python* pPySource = dynamic_cast(self->m_pSource); + CSphDict* pDict = pPySource->GetDict(); + SphWordID_t iWord = 0; + BYTE sBuf [ 16+3*SPH_MAX_WORD_LEN + 1024 ]; //user's input term might be very long.... + + size_t iBytes = strlen ( (const char*)sWord ); + + if ( bExact ) + { + size_t iBytes = strlen ( (const char*)sWord ); + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD_NONSTEMMED; + sBuf[iBytes+1] = '\0'; + iWord = pDict->GetWordIDNonStemmed ( sBuf ); + } else + if (bIdMarker) + { + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD; + sBuf[iBytes+1] = '\0'; + iWord = pDict->GetWordIDWithMarkers ( sBuf ) ; + } + else + { + iWord = pDict->GetWordID ((BYTE*) sWord ); + } + + if(!iWord) + RET_PYNONE; + +#if USE_64BIT + return PyLong_FromUnsignedLongLong(iWord); +#else + return PyLong_FromUnsignedLong(iWord); +#endif + } +} + +PyObject * PyHit_GetFieldName(PyObject * pSelf, PyObject* ) +{ + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)pSelf; + return PyString_FromString(self->m_FieldName->cstr()); +} + +PyObject * PyHit_GetCurPos(PyObject * pSelf, PyObject* ) +{ + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)pSelf; + return PyInt_FromLong(self->iPos); +} + +PyObject * PyHit_GetCurPhraseID(PyObject * pSelf, PyObject* ) +{ + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)pSelf; + return PyInt_FromLong(self->iPhrase); +} + +////////////////////////////////////////////////////////////////////////// + +PyObject *PyNewHitCollector(CSphSource* pSource, const CSphString & aFieldName, int iField) +{ + if(!pSource) RET_PYNONE; + + CSphSource_Python* pPySource = dynamic_cast(pSource); + if(!pPySource) RET_PYNONE; + + csfHelper_HitCollectorObject *self; + self = (csfHelper_HitCollectorObject *)PyType_GenericNew(&csfHelper_HitCollectorType, NULL, NULL); + //self = PyObject_New(csfHelper_HitCollectorObject, &csfHelper_HitCollectorType); + self->m_tSchema = new CSphSchema(); + self->m_FieldName = new CSphString(); + self->iPhrase = 1; + self->iPos = 1; //all pos started with 1. + *(self->m_FieldName) = aFieldName; + self->m_pSource = pPySource; + CSphString sError; + pPySource->UpdateSchema(self->m_tSchema, sError); + self->iField = iField; + return (PyObject*)self; +} + +PyMODINIT_FUNC initCsfHelper (void) +{ + int nRet = 0; + /* + csfHelper_ToLowerType.tp_new = PyType_GenericNew; + if (PyType_Ready(&csfHelper_ToLowerType) < 0) + return; + + csfHelper_DocumentType.tp_new = PyType_GenericNew; + if (PyType_Ready(&csfHelper_DocumentType) < 0) + return; + + */ + + csfHelper_HitCollectorType.tp_new = PyType_GenericNew; + if (PyType_Ready(&csfHelper_HitCollectorType) < 0) + return; + + Py_INCREF(&csfHelper_HitCollectorType); + + PyObject* m = Py_InitModule("csfHelper", Helper_methods); + + //nRet = PyModule_AddObject(m, "ToLower", (PyObject *)&csfHelper_ToLowerType); + //nRet = PyModule_AddObject(m, "Document", (PyObject *)&csfHelper_DocumentType); + nRet = PyModule_AddObject(m, "HitCollector", (PyObject *)&csfHelper_HitCollectorType); + +} + +PyMODINIT_FUNC initCsfHelperWithModule (PyObject* m) +{ + csfHelper_HitCollectorType.tp_new = PyType_GenericNew; + if (PyType_Ready(&csfHelper_HitCollectorType) < 0) + return; + + Py_INCREF(&csfHelper_HitCollectorType); + int nRet = 0; + nRet = PyModule_AddObject(m, "HitCollector", (PyObject *)&csfHelper_HitCollectorType); +} + +#endif //USE_PYTHON + diff --git a/coreseek/csft-4.1/src/py_helper.h b/coreseek/csft-4.1/src/py_helper.h new file mode 100755 index 0000000..b81b020 --- /dev/null +++ b/coreseek/csft-4.1/src/py_helper.h @@ -0,0 +1,32 @@ +#ifndef _PY_HELPER_H_ +#define _PY_HELPER_H_ +#include "sphinx.h" + +#include "py_layer.h" + +#if USE_PYTHON + +////////////////////////////////////////////////////////////////////////// +class Lowercaser_Helper +{ +public: + Lowercaser_Helper() :m_lower(NULL) {} + int ToLower ( int iCode ); + //FIXME: append other functions here. + +protected: + CSphLowercaser* m_lower; +}; + +PyObject *PyNewLowercaser_Helper(CSphLowercaser* aLower); + +PyObject *PyNewDocument_Helper( CSphSource* pSource); + +PyObject *PyNewHitCollector(CSphSource* pSource, const CSphString & aFieldName, int iField); + +PyMODINIT_FUNC initCsfHelper (void); +PyMODINIT_FUNC initCsfHelperWithModule (PyObject* m); +#endif //USE_PYTHON + +#endif + diff --git a/coreseek/csft-4.1/src/py_layer.cpp b/coreseek/csft-4.1/src/py_layer.cpp new file mode 100755 index 0000000..c4ad80d --- /dev/null +++ b/coreseek/csft-4.1/src/py_layer.cpp @@ -0,0 +1,156 @@ +#ifdef _WIN32 +#pragma warning(disable:4996) +#pragma warning(disable:4127) +#endif + +#include "sphinx.h" +#include "sphinxutils.h" + +#include "py_layer.h" + +#include "py_source.h" +#include "py_helper.h" + +#if USE_PYTHON + +#define LOC_CHECK(_hash,_key,_msg,_add) \ + if (!( _hash.Exists ( _key ) )) \ + { \ + fprintf ( stdout, "ERROR: key '%s' not found " _msg "\n", _key, _add ); \ + return false; \ + } + +CSphSource * SpawnSourcePython ( const CSphConfigSection & hSource, const char * sSourceName) +{ + assert ( hSource["type"]=="python" ); + + LOC_CHECK ( hSource, "name", "in source '%s'.", sSourceName ); + + CSphSource * pSrcPython = NULL; + + CSphSource_Python * pPySource = new CSphSource_Python ( sSourceName ); + if ( !pPySource->Setup ( hSource ) ) { + if(pPySource->m_sError.Length()) + fprintf ( stdout, "ERROR: %s\n", pPySource->m_sError.cstr()); + SafeDelete ( pPySource ); + } + + pSrcPython = pPySource; + + return pSrcPython; +} + +////////////////////////////////////////////////////////////////////////// +// get array of strings +#define LOC_GETAS(_sec, _arg,_key) \ + for ( CSphVariant * pVal = _sec(_key); pVal; pVal = pVal->m_pNext ) \ + _arg.Add ( pVal->cstr() ); + +// helper functions +#if USE_PYTHON + +int init_python_layer_helpers() +{ + int nRet = 0; + nRet = PyRun_SimpleString("import sys\nimport os\n"); + if(nRet) return nRet; + //helper function to append path to env. + nRet = PyRun_SimpleString("\n\ +def __coreseek_set_python_path(sPath):\n\ + sPaths = [x.lower() for x in sys.path]\n\ + sPath = os.path.abspath(sPath)\n\ + if sPath not in sPaths:\n\ + sys.path.append(sPath)\n\ + #print sPaths\n\ +\n"); + if(nRet) return nRet; + // helper function to find data source + nRet = PyRun_SimpleString("\n\ +def __coreseek_find_pysource(sName): \n\ + pos = sName.find('.') \n\ + module_name = sName[:pos]\n\ + try:\n\ + exec ('%s=__import__(\"%s\")' % (module_name, module_name))\n\ + return eval(sName)\n\ + except ImportError, e:\n\ + print e\n\ + return None\n\ +\n"); + return nRet; +} + +#endif + +bool cftInitialize( const CSphConfigSection & hPython) +{ +#if USE_PYTHON + if (!Py_IsInitialized()) { + Py_Initialize(); + //PyEval_InitThreads(); + + if (!Py_IsInitialized()) { + return false; + } + int nRet = init_python_layer_helpers(); + if(nRet != 0) { + PyErr_Print(); + PyErr_Clear(); + return false; + } + } + //init paths + PyObject * main_module = NULL; + //try //to disable -GX + { + + CSphVector m_dPyPaths; + LOC_GETAS(hPython, m_dPyPaths, "path"); + ///XXX: append system pre-defined path here. + { + main_module = PyImport_AddModule("__main__"); //+1 + //init paths + PyObject* pFunc = PyObject_GetAttrString(main_module, "__coreseek_set_python_path"); + + if(pFunc && PyCallable_Check(pFunc)){ + ARRAY_FOREACH ( i, m_dPyPaths ) + { + PyObject* pArgsKey = Py_BuildValue("(s)",m_dPyPaths[i].cstr() ); + PyObject* pResult = PyEval_CallObject(pFunc, pArgsKey); + Py_XDECREF(pArgsKey); + Py_XDECREF(pResult); + } + } // end if + if (pFunc) + Py_XDECREF(pFunc); + //Py_XDECREF(main_module); //no needs to decrease refer to __main__ module, else will got a crash! + } + }/* + catch (...) { + PyErr_Print(); + PyErr_Clear(); //is function can be undefined + Py_XDECREF(main_module); + return false; + }*/ + ///XXX: hook the ext interface here. + + initCsfHelper(); //the Csf + + return true; +#endif +} + +void cftShutdown() +{ + +#if USE_PYTHON + //FIXME: avoid the debug warning. + if (Py_IsInitialized()) { + //to avoid crash in release mode. + Py_Finalize(); + } + +#endif +} + +#endif //USE_PYTHON + diff --git a/coreseek/csft-4.1/src/py_layer.h b/coreseek/csft-4.1/src/py_layer.h new file mode 100755 index 0000000..c450c44 --- /dev/null +++ b/coreseek/csft-4.1/src/py_layer.h @@ -0,0 +1,45 @@ +#ifndef _PY_LAYER_H_ +#define _PY_LAYER_H_ +#include "sphinx.h" + +#if USE_PYTHON + +#if USE_PYTHON_DEBUG + #include + +#else + + #ifdef _DEBUG + #define D_E_B_U_G + #undef _DEBUG + #endif + #include + #ifdef D_E_B_U_G + #undef D_E_B_U_G + #define _DEBUG + #endif + +#endif //USE_PYTHON_DEBUG + +////////////////////////////////////////////////////////////////////////// + +bool cftInitialize( const CSphConfigSection & hPython); +void cftShutdown(); + +CSphSource * SpawnSourcePython ( const CSphConfigSection & hSource, const char * sSourceName); + +typedef struct { + PyObject_HEAD + /* Type-specific fields go here. */ + CSphSource* m_pSource; + CSphSchema* m_tSchema; + CSphString* m_FieldName; + int iPos; + int iPhrase; + int iField; +} csfHelper_HitCollectorObject; + +#endif //USE_PYTHON + +#endif + diff --git a/coreseek/csft-4.1/src/py_source.cpp b/coreseek/csft-4.1/src/py_source.cpp new file mode 100755 index 0000000..a2ff750 --- /dev/null +++ b/coreseek/csft-4.1/src/py_source.cpp @@ -0,0 +1,2076 @@ +#ifdef _WIN32 +#pragma warning(disable:4996) +#pragma warning(disable:4127) +#endif + +#include "sphinx.h" +#include "sphinxutils.h" +//#include "sphinx_internal.h" +#include "py_helper.h" +#include "py_source.h" +#include "sphinxsearch.h" + + +//py-layer HITMAN, -> change it if sphinx.cpp changed. +typedef Hitman_c<8> HITMAN; + +//just copy from sphinx.cpp +#define SPH_INTERNAL_PROFILER 0 + +#if SPH_INTERNAL_PROFILER + +enum ESphTimer +{ + TIMER_root = 0, + +#define DECLARE_TIMER(_arg) TIMER_##_arg, +#include "sphinxtimers.h" +#undef DECLARE_TIMER + + TIMERS_TOTAL +}; + + +static const char * const g_dTimerNames [ TIMERS_TOTAL ] = +{ + "root", + +#define DECLARE_TIMER(_arg) #_arg, +#include "sphinxtimers.h" +#undef DECLARE_TIMER +}; + + +struct CSphTimer +{ + int64_t m_iMicroSec; + ESphTimer m_eTimer; + int m_iParent; + int m_iChild; + int m_iNext; + int m_iPrev; + int m_iCalls; + + CSphTimer () + { + Alloc ( TIMER_root, -1 ); + } + + void Alloc ( ESphTimer eTimer, int iParent ) + { + m_iParent = iParent; + m_iChild = -1; + m_iNext = -1; + m_iPrev = -1; + m_eTimer = eTimer; + m_iMicroSec = 0; + m_iCalls = 0; + } + + void Start () + { + m_iMicroSec -= sphMicroTimer (); + m_iCalls++; + } + + void Stop () + { + m_iMicroSec += sphMicroTimer (); + } +}; + +static const int SPH_MAX_TIMERS = 128; +static int g_iTimer = -1; +static int g_iTimers = 0; +static CSphTimer g_dTimers [ SPH_MAX_TIMERS ]; + + +void sphProfilerInit () +{ + assert ( g_iTimers==0 ); + assert ( g_iTimer==-1 ); + + // start root timer + g_iTimers = 1; + g_iTimer = 0; + g_dTimers[g_iTimer].Alloc ( TIMER_root, -1 ); + g_dTimers[g_iTimer].Start (); +} + + +void sphProfilerPush ( ESphTimer eTimer ) +{ + assert ( g_iTimer>=0 && g_iTimer0; + iTimer=g_dTimers[iTimer].m_iNext ) + { + if ( g_dTimers[iTimer].m_eTimer==eTimer ) + break; + } + + // not found? let's alloc + if ( iTimer<0 ) + { + assert ( g_iTimers=0 ) + g_dTimers [ g_dTimers[g_iTimer].m_iChild ].m_iPrev = iTimer; + g_dTimers[g_iTimer].m_iChild = iTimer; + } + + // make it new current one + assert ( iTimer>0 ); + g_dTimers[iTimer].Start (); + g_iTimer = iTimer; +} + + +void sphProfilerPop ( ESphTimer eTimer ) +{ + assert ( g_iTimer>0 && g_iTimer=0 && g_iTimer0 ); + assert ( g_iTimer==0 ); + + // stop root timer + g_iTimers = 0; + g_iTimer = -1; + g_dTimers[0].Stop (); +} + + +void sphProfilerShow ( int iTimer=0, int iLevel=0 ) +{ + assert ( g_iTimers==0 ); + assert ( g_iTimer==-1 ); + + if ( iTimer==0 ) + fprintf ( stdout, "--- PROFILE ---\n" ); + + CSphTimer & tTimer = g_dTimers[iTimer]; + int iChild; + + // calc me + int iChildren = 0; + int64_t tmSelf = tTimer.m_iMicroSec; + for ( iChild=tTimer.m_iChild; iChild>0; iChild=g_dTimers[iChild].m_iNext, iChildren++ ) + tmSelf -= g_dTimers[iChild].m_iMicroSec; + + // dump me + if ( tTimer.m_iMicroSec<50 ) + return; + + char sName[32]; + for ( int i=0; i0 && g_dTimers[iChild].m_iNext>0 ) + iChild = g_dTimers[iChild].m_iNext; + + while ( iChild>0 ) + { + sphProfilerShow ( iChild, 1+iLevel ); + iChild = g_dTimers[iChild].m_iPrev; + } + + if ( iTimer==0 ) + fprintf ( stdout, "---------------\n" ); +} + + +class CSphEasyTimer +{ +public: + CSphEasyTimer ( ESphTimer eTimer ) + : m_eTimer ( eTimer ) + { + if ( g_iTimer>=0 ) + sphProfilerPush ( m_eTimer ); + } + + ~CSphEasyTimer () + { + if ( g_iTimer>=0 ) + sphProfilerPop ( m_eTimer ); + } + +protected: + ESphTimer m_eTimer; +}; + + +#define PROFILER_INIT() sphProfilerInit() +#define PROFILER_DONE() sphProfilerDone() +#define PROFILE_BEGIN(_arg) sphProfilerPush(TIMER_##_arg) +#define PROFILE_END(_arg) sphProfilerPop(TIMER_##_arg) +#define PROFILE_SHOW() sphProfilerShow() +#define PROFILE(_arg) CSphEasyTimer __t_##_arg ( TIMER_##_arg ); + +#else + +#define PROFILER_INIT() +#define PROFILER_DONE() +#define PROFILE_BEGIN(_arg) +#define PROFILE_END(_arg) +#define PROFILE_SHOW() +#define PROFILE(_arg) + +#endif // SPH_INTERNAL_PROFILER + + +#if USE_PYTHON + + +#define LOC_ERROR2(_msg,_arg,_arg2) { sError.SetSprintf ( _msg, _arg, _arg2 ); return false; } + +PyObject* GetObjectAttr(PyObject *pInst, char* name); + +CSphSource_Python::CSphSource_Python ( const char * sName ) + : CSphSource_Document ( sName ),m_uMaxFetchedID(0), m_sError() + , m_iKillListSize( 0 ) + , m_iKillListPos( 0 ) + , m_iJoinedHitID( 0 ) + , m_iJoinedHitField( 0 ) + , m_JoinFieldsResultPos( 0 ) +{ + //sName the data source's name + main_module = NULL; + builtin_module = NULL; + m_pInstance = NULL; + m_pInstance_BuildHit = NULL; + m_pInstance_NextDocument = NULL; + m_pInstance_GetDocField = NULL; + m_pInstance_GetMVAValue = NULL; + + m_bHaveCheckBuildHit = false; + m_Hit_collector = NULL; + m_JoinFieldsResult = NULL; + + for(int i = 0; i< SPH_MAX_FIELDS; i++){ + m_dFields[i] = NULL; + m_iJoinedHitPositions[i] = 0; + } + + m_pKillList = NULL; +} + +CSphSource_Python::~CSphSource_Python (){ + Disconnect (); + + if(m_pInstance_BuildHit) { + Py_XDECREF(m_pInstance_BuildHit); + m_pInstance_BuildHit = NULL; + } + + if(m_pInstance_NextDocument){ + Py_XDECREF(m_pInstance_BuildHit); + m_pInstance_BuildHit = NULL; + } + + if(m_Hit_collector) { + Py_XDECREF(m_Hit_collector); + m_Hit_collector = NULL; + } + + if(m_pInstance_GetDocField){ + Py_XDECREF(m_pInstance_GetDocField); + m_pInstance_GetDocField = NULL; + } + + if(m_pInstance_GetMVAValue){ + Py_XDECREF(m_pInstance_GetMVAValue); + m_pInstance_GetMVAValue = NULL; + } + + if(m_JoinFieldsResult){ + Py_XDECREF(m_JoinFieldsResult); + m_JoinFieldsResult = NULL; + } + + //can not be in Disconnect for OnIndexFinished still needs this. + if(m_pInstance) { + Py_XDECREF(m_pInstance); + m_pInstance = NULL; + } +} + +// get string +#define LOC_GETS(_arg,_key) \ + if ( hSource.Exists(_key) ) \ + _arg = hSource[_key]; + +// get array of strings +#define LOC_GETAS(_arg,_key) \ + for ( CSphVariant * pVal = hSource(_key); pVal; pVal = pVal->m_pNext ) \ + _arg.Add ( pVal->cstr() ); + +bool CSphSource_Python::Setup ( const CSphConfigSection & hSource){ + + //check have python_name? + CSphString PySourceName; + LOC_GETS(PySourceName, "name"); + if(PySourceName.Length() == 0) { + Error ( "field 'name' must be assigned."); + return false; + } + + //Shame on me!! __main__ __builtin__ time no Refcnt +1 + main_module = PyImport_AddModule("__main__"); + builtin_module = PyImport_AddModule("__builtin__"); + + //do schema read, ready to used. + if (!main_module) { goto DONE; } + if (!builtin_module) { + //Py_XDECREF(main_module); + goto DONE; + } + + if(InitDataSchema(hSource, PySourceName.cstr())!=0) + return false; + + return true; +DONE: + return false; +} + +////////////////////////////////////////////////////////////////////////// +// Helper Functions +////////////////////////////////////////////////////////////////////////// +bool CheckResult(PyObject * pResult) +{ + if(!pResult) //no return default true + return true; + + if(PyBool_Check(pResult)){ + if(Py_False == pResult) + return false; + } + if(PyInt_Check(pResult)) { + if(PyInt_AsLong(pResult) == 0) + return false; + } + return true; +} + +int CSphSource_Python::UpdatePySchema( PyObject * pList, CSphSchema * pInfo, CSphString & docid, CSphString & sError ) +{ + /* + - Update pInfo via pList. + - Most copy from pysource, for no pysource needed in pyExt mode. + @return 0, ok + @return <0, error happend. + */ + assert(pInfo); + pInfo->Reset(); + char* doc_id_col = NULL; //used to save docid. + + // + if(!pList || !PyList_Check(pList)) { + sError = "Feed list object to schema."; + return -1; + } + + int size = (int)PyList_Size(pList); + for(int i = 0; i < size; i++) { + PyObject* item = PyList_GetItem(pList,i); + + // item -> tuple ( name, {props} ) + if(!PyTuple_Check(item)){ + sError = "The schema list must be build by tuples."; + return -2; + } + + if(PyTuple_GET_SIZE(item) < 2) { + // name, props + return -3; + } + + PyObject* key = PyTuple_GetItem(item, 0); + PyObject* props = PyTuple_GetItem(item, 1); + //check type + if(PyString_Check(key) && PyDict_Check(props)) + { + char* strkey = PyString_AsString(key); + CSphString skey(strkey); + + // Currently support case-sensive column while indexing + //check key +#if USE_PYTHON_CASE_SENSIVE_ATTR +#else + { + CSphString skey_low = skey; + skey_low.ToLower(); + if(skey_low != skey) { + sError.SetSprintf("The schema column name must be in lower case [%s]", skey.cstr()); + return -3; + } + } +#endif + + //check docid + PyObject * propValue = NULL; + PyObject * sizeValue = NULL; + PyObject * wordPartValue = NULL; + PyObject * delayCollectionValue = NULL; + + int iBitCount = -1; + propValue = PyDict_GetItemString(props, "docid"); //+0 + if(propValue && CheckResult(propValue)){ + doc_id_col = strkey; + continue; + } + + propValue = PyDict_GetItemString(props, "type"); + if (propValue && !PyString_Check(propValue)) { + sError.SetSprintf( "Attribute %s's type is not a string value", strkey); + continue; + } + + // set tCol.m_tLocator.m_iBitCount, to make index smaller + sizeValue = PyDict_GetItemString(props, "size"); + if(sizeValue && (PyInt_Check(sizeValue))) { + //PyErr_Print(); + iBitCount = PyInt_AsLong(sizeValue); + } + if(sizeValue && (PyLong_Check(sizeValue))) { + //PyErr_Print(); + iBitCount = (int)PyLong_AsLongLong(sizeValue); + } + + wordPartValue = PyDict_GetItemString(props, "wordpart"); //+0 + if (wordPartValue){ + if (PyString_Check(wordPartValue)) { + CSphString szFieldName(strkey); + char* strval = PyString_AsString(wordPartValue); + + if(strcmp(strval,"prefix") == 0) { + if(!m_dPrefixFields.Contains ( strkey )) + m_dPrefixFields.AddUnique(strkey); + } + if(strcmp(strval,"infix") == 0 ) { + if(!m_dInfixFields.Contains ( strkey )) + m_dInfixFields.AddUnique(strkey); + } + + }else { + sError.SetSprintf( "Attribute %s's type is not a string value, skip", "wordpart"); + wordPartValue = NULL; + } + } + + delayCollectionValue = PyDict_GetItemString(props, "delay"); //+0 + if(delayCollectionValue && CheckResult(delayCollectionValue)){ + //doc_id_col = strkey; + //continue; + } + + // assign types + if(strcmp(PyString_AsString(propValue) , "float") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_FLOAT ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + tCol.m_tLocator.m_iBitCount = iBitCount; + pInfo->AddAttr ( tCol, true); + }else + if(strcmp(PyString_AsString(propValue) , "integer") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_INTEGER ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + tCol.m_tLocator.m_iBitCount = iBitCount; + pInfo->AddAttr ( tCol, true); + }else + if(strcmp(PyString_AsString(propValue) , "long") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_BIGINT ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + tCol.m_tLocator.m_iBitCount = iBitCount; + pInfo->AddAttr ( tCol, true); + }else + if(strcmp(PyString_AsString(propValue) , "list") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_INTEGER ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + tCol.m_eAttrType = SPH_ATTR_UINT32SET; + tCol.m_eSrc = SPH_ATTRSRC_FIELD; + // tCol.m_tLocator.m_iBitCount = iBitCount; //XXX: ???? + pInfo->AddAttr ( tCol, true); + }else + if(strcmp(PyString_AsString(propValue) , "list-query") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_INTEGER ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + tCol.m_eAttrType = SPH_ATTR_UINT32SET; + tCol.m_eSrc = SPH_ATTRSRC_QUERY; + // tCol.m_tLocator.m_iBitCount = iBitCount; //XXX: ???? + pInfo->AddAttr ( tCol, true); + }else + if(strcmp(PyString_AsString(propValue) , "bool") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_BOOL ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + pInfo->AddAttr ( tCol, true ); + }else + if(strcmp(PyString_AsString(propValue) , "str2ord") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_ORDINAL ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + pInfo->AddAttr ( tCol, true ); + }else + if(strcmp(PyString_AsString(propValue) , "timestamp") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_TIMESTAMP ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + pInfo->AddAttr ( tCol, true ); + }else + if(strcmp(PyString_AsString(propValue) , "string") == 0){ + CSphColumnInfo tCol ( strkey, SPH_ATTR_STRING ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + pInfo->AddAttr ( tCol , true); + }else + //if(propValue == csft_string_fulltext) + { + //-> to support sql_field_string "string_text" + if(strcmp(PyString_AsString(propValue) , "string_text") == 0){ + //append strings + CSphColumnInfo tCol ( strkey, SPH_ATTR_STRING ); + tCol.m_iIndex = i; //m_tSchema.GetAttrsCount (); //should be i in pList? + pInfo->AddAttr ( tCol , true); + }else + if(strcmp(PyString_AsString(propValue) , "text") != 0){ + sError.SetSprintf("Type %s is invalid, treated as full-text", PyString_AsString(propValue)); + } + //default fulltext field + // AddFieldToSchema(skey.cstr(), i); + { + CSphColumnInfo tCol ( strkey ); + // TODO: setup prefix, infix + //this used to set SPH_WORDPART_PREFIX | SPH_WORDPART_INFIX, in push hit mode, no needs at all. + SetupFieldMatch ( tCol ); + tCol.m_iIndex = i; + pInfo->m_dFields.Add ( tCol ); + } + } + }else{ + ///XXX? report error | continue; + } + } // for + + if(!doc_id_col) { + if(PyErr_Occurred()) PyErr_Print(); + sError.SetSprintf("Must set docid = True attribute in DataSource Scheme to declare document unique id"); + PyErr_Clear(); + return -1; + } + docid = doc_id_col; + + return 0; +} +////////////////////////////////////////////////////////////////////////// + +int CSphSource_Python::InitDataSchema_Python( CSphString & sError ) +{ + if (!m_pInstance) { + PyErr_Print(); + m_sError.SetSprintf ( "Can no create source object"); + return -1; + } + //all condition meets + m_tSchema.m_dFields.Reset (); + + + //enum all attrs + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + PyObject* pFunc = PyObject_GetAttrString(m_pInstance, "GetScheme"); // +1 + if (!pFunc) { + sError = ("Method SourceObj->GetScheme():{dict of attributes} missing."); + //fprintf(stderr,m_sError.cstr()); + return -2; //Next Document must exist + } + + if(!pFunc||!PyCallable_Check(pFunc)){ + Py_XDECREF(pFunc); + sError = ("Method SourceObj->GetScheme():{dict of attributes} missing."); + //fprintf(stderr,m_sError.cstr()); + return -2; + } + pArgs = Py_BuildValue("()"); + + pResult = PyEval_CallObject(pFunc, pArgs); + Py_XDECREF(pArgs); + Py_XDECREF(pFunc); + + if(PyErr_Occurred()) PyErr_Print(); + + { + int nRet = UpdatePySchema(pResult, &m_tSchema, m_Doc_id_col, sError); + if(nRet) + return nRet; + } + + Py_XDECREF(pResult); + + /* + char sBuf [ 1024 ]; + snprintf ( sBuf, sizeof(sBuf), "pysource(%s)", m_sCommand.cstr() ); + m_tSchema.m_sName = sBuf; + */ + + m_tDocInfo.Reset ( m_tSchema.GetRowSize() ); + m_dStrAttrs.Resize ( m_tSchema.GetAttrsCount() ); + + // check it + if ( m_tSchema.m_dFields.GetLength()>SPH_MAX_FIELDS ) + LOC_ERROR2 ( "too many fields (fields=%d, max=%d); raise SPH_MAX_FIELDS in sphinx.h and rebuild", + m_tSchema.m_dFields.GetLength(), SPH_MAX_FIELDS ); + + return 0; +} + +/// connect to the source (eg. to the database) +/// connection settings are specific for each source type and as such +/// are implemented in specific descendants +bool CSphSource_Python::Connect ( CSphString & sError ){ + //init the schema + if (!m_pInstance) { + PyErr_Print(); + sError.SetSprintf ( "Can no create source object"); + return false; + } + + m_tHits.m_dData.Reserve ( m_iMaxHits ); + //try to do connect + { + if (!m_pInstance) + { + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + return false; + }else{ + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + PyObject* pFunc = PyObject_GetAttrString(m_pInstance, "Connected"); + if (!pFunc){ + sError = ("'SourceObj->Connected():None' missing.\n"); + PyErr_Clear(); + //return false; + }else{ + if(!PyCallable_Check(pFunc)){ + Py_XDECREF(pFunc); + return false; + } + pArgs = Py_BuildValue("()"); + + pResult = PyEval_CallObject(pFunc, pArgs); + Py_XDECREF(pArgs); + Py_XDECREF(pFunc); + //check result + + if(PyErr_Occurred()) PyErr_Print(); + + if(!CheckResult(pResult)) { + Py_XDECREF(pResult); + return false; + } + Py_XDECREF(pResult); + } + + // init data-schema when connect + if(InitDataSchema_Python(sError) != 0) + return false; + + // build the cache. + m_tSchema.BuildFieldIndexCache(); + } + } + return true; +} +bool CSphSource_Python::CheckResult(PyObject * pResult) +{ + if(!pResult) //no return default true + return true; + + if(PyBool_Check(pResult)){ + if(Py_False == pResult) + return false; + } + if(PyInt_Check(pResult)) { + if(PyInt_AsLong(pResult) == 0) + return false; + } + return true; +} +/// disconnect from the source +void CSphSource_Python::Disconnect (){ + m_tSchema.Reset (); + m_tHits.m_dData.Reset(); +} +/// check if there are any attributes configured +/// note that there might be NO actual attributes in the case if configured +/// ones do not match those actually returned by the source +bool CSphSource_Python::HasAttrsConfigured () { + return true; +} + +void CSphSource_Python::PostIndex () +{ + if (!m_pInstance) + { + PyErr_Print(); + goto DONE; + }else{ + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + PyObject* pFunc = PyObject_GetAttrString(m_pInstance, "OnIndexFinished"); + if (!pFunc) + PyErr_Clear(); //is function can be undefined + + if(!pFunc || pFunc == Py_None ||!PyCallable_Check(pFunc)){ + Py_XDECREF(pFunc); + goto DONE; + } + pArgs = Py_BuildValue("()"); + + pResult = PyEval_CallObject(pFunc, pArgs); + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + Py_XDECREF(pArgs); + Py_XDECREF(pFunc); + Py_XDECREF(pResult); + } +DONE: + return ; +} + +/// begin iterating document hits +/// to be implemented by descendants +bool CSphSource_Python::IterateStart ( CSphString & sError ){ + int iFieldMVA = 0; + ///TODO: call on_before_index function + if (!m_pInstance) + { + PyErr_Print(); + goto DONE; + }else{ + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + PyObject* pFunc = PyObject_GetAttrString(m_pInstance, "OnBeforeIndex"); + if (!pFunc) + PyErr_Clear(); //is function can be undefined + + if(!pFunc || pFunc == Py_None ||!PyCallable_Check(pFunc)){ + Py_XDECREF(pFunc); + goto DONE; + } + pArgs = Py_BuildValue("()"); + + pResult = PyEval_CallObject(pFunc, pArgs); + Py_XDECREF(pArgs); + Py_XDECREF(pFunc); + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + if(!CheckResult(pResult)) { + Py_XDECREF(pResult); + return false; + } + Py_XDECREF(pResult); + + + } + +DONE: + + //process GetFieldOrder + { + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + PyObject* pFunc = PyObject_GetAttrString(m_pInstance, "GetFieldOrder"); + if (!pFunc) + PyErr_Clear(); //is function can be undefined + + if(!pFunc||!PyCallable_Check(pFunc)){ + Py_XDECREF(pFunc); + //goto DONE; + } + pArgs = Py_BuildValue("()"); + + pResult = PyEval_CallObject(pFunc, pArgs); + Py_XDECREF(pArgs); + Py_XDECREF(pFunc); + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + //this is list -> list is supported by python source level-3 + if (PyList_Check(pResult)) { + int iSize = (int)PyList_Size(pResult); + if(iSize>=1) { //must have at least one element + PyObject* pResult2 = PyList_GetItem(pResult,0); //borrow + m_tSchema.m_iBaseFields = 0; + + if (PyTuple_Check(pResult2)) { + + m_tSchema.m_iBaseFields = (int)PyTuple_Size(pResult2); //the base fields. +#if HAVE_SSIZE_T + for(Py_ssize_t iField = 0; iField< PyTuple_Size(pResult2); iField++) +#else + for(int iField = 0; iField< PyTuple_Size(pResult2); iField++) +#endif + { + PyObject* pItem = PyTuple_GetItem(pResult2, iField); + if(PyString_Check(pItem)){ + //int j = this->m_tSchema.GetFieldIndex (PyString_AsString(pItem)); + this->m_baseFields.Add(PyString_AsString(pItem)); + } + } + }//end PyTuple_Check + else + //might be string only + if(PyString_Check(pResult2)){ + this->m_baseFields.Add(PyString_AsString(pResult2)); + } + else{ + sError.SetSprintf ( "Must have at least one field as a first order field" ); + return 0; + } + }//end if iSize >= 1 + + if(iSize==2) { //have joined fields + PyObject* pResult2 = PyList_GetItem(pResult,1); //borrow + + if (PyTuple_Check(pResult2)) { +#if HAVE_SSIZE_T + for(Py_ssize_t iField = 0; iField< PyTuple_Size(pResult2); iField++) +#else + for(int iField = 0; iField< PyTuple_Size(pResult2); iField++) +#endif + { + PyObject* pItem = PyTuple_GetItem(pResult2, iField); + if(PyString_Check(pItem)){ + //int j = this->m_tSchema.GetFieldIndex (PyString_AsString(pItem)); + this->m_joinFields.Add(PyString_AsString(pItem)); + } + } + }//end PyTuple_Check + if(PyString_Check(pResult2)){ + this->m_joinFields.Add(PyString_AsString(pResult2)); + } + } + }else + { + sError = ("Method SourceObj->GetFieldOrder():[list of fields tuple]). Only list is acceptable."); + Py_XDECREF(pResult); + return false; + } + Py_XDECREF(pResult); + } //end of get field order + + // process of prefetch GetDocField, DocField can be NULL, if no delay collection field. + { + if(m_pInstance_GetDocField == NULL) + { + //PyObject* pFunc = NULL; + if (m_pInstance) + { + m_pInstance_GetDocField = PyObject_GetAttrString(m_pInstance, "GetDocField"); + } + + if(!m_pInstance_GetDocField){ + // GetDocField CAN '404 Not found.' + if(PyErr_Occurred()) + PyErr_Clear(); + // just pass it. + } + } + } + // process MVA checking. + m_iFieldMVA = 0; + m_iFieldMVAIterator = 0; + m_dAttrToFieldMVA.Resize ( 0 ); + + for ( int i = 0; i < m_tSchema.GetAttrsCount (); i++ ) + { + const CSphColumnInfo & tCol = m_tSchema.GetAttr ( i ); + if ( ( tCol.m_eAttrType == SPH_ATTR_UINT32SET ) && tCol.m_eSrc == SPH_ATTRSRC_FIELD ) + m_dAttrToFieldMVA.Add ( iFieldMVA++ ); + else + m_dAttrToFieldMVA.Add ( -1 ); + } + + m_dFieldMVAs.Resize ( iFieldMVA ); + ARRAY_FOREACH ( i, m_dFieldMVAs ) + m_dFieldMVAs [i].Reserve ( 16 ); + + return true; +} + +/// begin iterating values of out-of-document multi-valued attribute iAttr +/// will fail if iAttr is out of range, or is not multi-valued +/// can also fail if configured settings are invalid (eg. SQL query can not be executed) +bool CSphSource_Python::IterateMultivaluedStart ( int iAttr, CSphString & sError ) +{ + if ( iAttr<0 || iAttr>=m_tSchema.GetAttrsCount() ) + return false; + + m_iMultiAttr = iAttr; + const CSphColumnInfo & tAttr = m_tSchema.GetAttr(iAttr); + + if ( !(tAttr.m_eAttrType == SPH_ATTR_UINT32SET) ) + return false; + + switch ( tAttr.m_eSrc ) + { + case SPH_ATTRSRC_FIELD: + return false; + case SPH_ATTRSRC_QUERY: + { + if(m_pInstance_GetMVAValue == NULL) + { + //PyObject* pFunc = NULL; + if (m_pInstance) + { + m_pInstance_GetMVAValue = PyObject_GetAttrString(m_pInstance, "GetMVAValue"); + } + + if(!m_pInstance_GetMVAValue){ + // GetDocField CAN '404 Not found.' + if(PyErr_Occurred()) + PyErr_Clear(); + sError = ("Method SourceObj->GetMVAValue():(docid, [list of values]) missing."); + return false; + } + } + if(m_pInstance_GetMVAValue) + return true; + } + default: + sError.SetSprintf ( "INTERNAL ERROR: unknown multi-valued attr source type %d", tAttr.m_eSrc ); + return false; + } // end of switch + //return true; +} + +/// get next multi-valued (id,attr-value) tuple to m_tDocInfo +bool CSphSource_Python::IterateMultivaluedNext () +{ + const CSphColumnInfo & tAttr = m_tSchema.GetAttr ( m_iMultiAttr ); + assert ( tAttr.m_eAttrType == SPH_ATTR_UINT32SET ); + + //m_iMultiAttr + if(m_pInstance_GetMVAValue) + { + //call GetMVA + { + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + + //create hit_c + if(m_Hit_collector == NULL) + m_Hit_collector = PyNewHitCollector(this, tAttr.m_sName, m_iJoinedHitField); + else{ + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)m_Hit_collector; + self->iField = m_iJoinedHitField; + *(self->m_FieldName) = tAttr.m_sName; + } + +#if USE_PYTHON_CASE_SENSIVE_ATTR + pArgs = Py_BuildValue("(sO)", tAttr.m_sNameExactly.cstr(), m_Hit_collector); +#else + pArgs = Py_BuildValue("(sO)", tAttr.m_sName.cstr(), m_Hit_collector); +#endif + pResult = PyEval_CallObject(m_pInstance_GetMVAValue, pArgs); + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + Py_XDECREF(pArgs); + + if(Py_None == pResult || pResult == NULL) { + return false; + } + + if(!PyTuple_Check(pResult)){ + Py_XDECREF(pResult); + //sError.SetSprintf("SourceObj->GetMVAValue():(id, [list]) missing, Can not continue"); + return false; + } + if(PyTuple_GET_SIZE(pResult) == 2) { + + const CSphAttrLocator & tLoc = m_tSchema.GetAttr ( m_iMultiAttr ).m_tLocator; + // (docid, text) + PyObject* pDocId = PyTuple_GetItem(pResult, 0); + PyObject* py_var = PyTuple_GetItem(pResult, 1); + + // convert docid + if(pDocId && PyLong_Check(pDocId)) { +#if USE_64BIT + m_tDocInfo.m_iDocID = PyLong_AsLongLong(pDocId); +#else + m_tDocInfo.m_iDocID = (SphDocID_t)(PyLong_AsLong(pDocId)); +#endif + }else + if(pDocId && PyInt_Check(pDocId)) + m_tDocInfo.m_iDocID = PyInt_AsLong(pDocId); + + /* + if(PyList_Check(py_varlist)) { + + int size = (int)PyList_Size(py_varlist); + for(int i = 0; i < size; i++) { + PyObject* item = PyList_GetItem(py_varlist,i); + DWORD dVal = (DWORD)(PyInt_AsLong(item)); + m_tDocInfo.SetAttr ( tLoc, dVal ); + } + + } // end of if list check + */ + if(PyInt_Check(py_var)) + { + DWORD dVal = (DWORD)(PyInt_AsUnsignedLongMask(py_var)); + m_tDocInfo.SetAttr ( tLoc, dVal ); + } + if(PyLong_Check(py_var)) + { +/* +#if USE_64BIT + SphAttr_t dVal = (SphAttr_t)(PyLong_AsLongLong(py_var)); +#else +*/ + SphAttr_t dVal = (SphAttr_t)(PyInt_AsUnsignedLongLongMask(py_var)); +//#endif + m_tDocInfo.SetAttr ( tLoc, dVal ); + } + } + Py_XDECREF(pResult); + } + } + // return that tuple + return true; +} + +/// begin iterating values of multi-valued attribute iAttr stored in a field +/// will fail if iAttr is out of range, or is not multi-valued +bool CSphSource_Python::IterateFieldMVAStart ( int iAttr, CSphString & /* sError */ ){ + if ( iAttr<0 || iAttr>=m_tSchema.GetAttrsCount() ) + return false; + + if ( m_dAttrToFieldMVA [iAttr] == -1 ) + return false; + + m_iFieldMVA = iAttr; + m_iFieldMVAIterator = 0; + return true; +} + +/// get next multi-valued (id,attr-value) tuple to m_tDocInfo +bool CSphSource_Python::IterateFieldMVANext (){ + int iFieldMVA = m_dAttrToFieldMVA [m_iFieldMVA]; + if ( m_iFieldMVAIterator >= m_dFieldMVAs [iFieldMVA].GetLength () ) + return false; + + const CSphColumnInfo & tAttr = m_tSchema.GetAttr ( m_iFieldMVA ); + m_tDocInfo.SetAttr ( tAttr.m_tLocator, m_dFieldMVAs [iFieldMVA][m_iFieldMVAIterator] ); + + ++m_iFieldMVAIterator; + return true; +} + +BYTE* CSphSource_Python::GetField ( int iFieldIndex) +{ + assert(iFieldIndex < m_tSchema.m_dFields.GetLength()); + + //int iEndField = m_tSchema.m_iBaseFields; + + //check cache + if(m_dFields[iFieldIndex]) + return m_dFields[iFieldIndex]; + + //pysource is case sensitive +#if USE_PYTHON_CASE_SENSIVE_ATTR + char* ptr_Name = (char*)m_tSchema.m_dFields[iFieldIndex].m_sNameExactly.cstr(); +#else + char* ptr_Name = (char*)m_tSchema.m_dFields[iFieldIndex].m_sName.cstr(); +#endif + + PyObject* item = PyObject_GetAttrString(m_pInstance,ptr_Name); + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + //PyList_GetItem(pList,m_tSchema.m_dFields[i].m_iIndex); + //check as string? + BYTE* ptr = NULL; + if(item && Py_None!=item && PyString_Check(item)) { + char* data = PyString_AsString(item); + //m_dFields[i] = (BYTE*)PyString_AsString(item); //error!!! this pointer might be move later. + ptr = (BYTE*)strdup(data); + } + //check is unicode? + if(ptr == NULL && item && Py_None!=item && PyUnicode_Check(item)) { + PyObject* utf8str = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(item), + PyUnicode_GET_SIZE(item), + "ignore"); //ignore all error unicode char. + if(utf8str) { + //if convert successfully. + char* data = PyString_AsString(utf8str); + ptr = (BYTE*)strdup(data); + Py_XDECREF(utf8str); + } + } + //check is integer & long + if(ptr == NULL && item && Py_None!=item && PyLong_Check(item)) { + // convert long & integer to string. + char buf[128]; + memset(buf,0,sizeof(buf)); + PY_LONG_LONG dVal = PyLong_AsLongLong(item); +#ifdef _WIN32 + snprintf(buf,sizeof(buf), "%I64u\0", dVal); +#else + snprintf(buf,sizeof(buf), "%llu\0", dVal); +#endif + ptr = (BYTE*)strdup(buf); + } + + if(ptr == NULL && item && Py_None!=item && PyInt_Check(item)) { + // convert long & integer to string. + long dVal = PyInt_AsLong(item); + char buf[128]; + memset(buf,0,sizeof(buf)); + snprintf(buf,sizeof(buf), "%d\0", dVal); + ptr = (BYTE*)strdup(buf); + } + + Py_XDECREF(item); + m_dFields[iFieldIndex] = ptr; + return ptr; +} + +void CSphSource_Python::BuildHits ( CSphString & sError, bool bSkipEndMarker) +{ + //fixme: restore buildhit call later. + assert ( m_pTokenizer ); + PROFILE ( src_document ); + + if (!m_pInstance) + { + PyErr_Print(); + }else{ + if(m_baseFields.GetLength() !=0) + { + ARRAY_FOREACH ( i, m_baseFields ) + { + int j = this->m_tSchema.GetFieldIndex (m_baseFields[i].cstr()); + if(j == -1) { + //must die, else might cause infinit loop + sphDie( "Can Not found field named %s.\n" , m_baseFields[i].cstr()); + } + else{ + m_tState.m_iField = j; + m_tState.m_iEndField = j+1; + BuildHits_Python( sError, bSkipEndMarker); + } + } + } + } + m_tState.m_bDocumentDone = !m_tState.m_bProcessingHits; +} + +void CSphSource_Python::BuildHits_Python ( CSphString & sError, bool bSkipEndMarker ) +{ + //check have python layer? + if(m_bHaveCheckBuildHit && (m_pInstance_BuildHit == NULL || m_pInstance_BuildHit == Py_None) ) + { + return CSphSource_Document::BuildHits( sError, bSkipEndMarker); + } + + if(m_pInstance_BuildHit == NULL) + { + //PyObject* pFunc = NULL; + if (m_pInstance) + { + m_pInstance_BuildHit = PyObject_GetAttrString(m_pInstance, "BuildHits"); // +1 + } + + m_bHaveCheckBuildHit = true; + + if(!m_pInstance_BuildHit || m_pInstance_BuildHit == Py_None){ + // BuildHits CAN '404 Not found.' + if(PyErr_Occurred()) + PyErr_Clear(); + return CSphSource_Document::BuildHits(sError, bSkipEndMarker); + } + } + + if(!m_pInstance_BuildHit) + return; //do nothing + + if(m_Hit_collector == NULL){ +#if USE_PYTHON_CASE_SENSIVE_ATTR + m_Hit_collector = PyNewHitCollector(this, m_tSchema.m_dFields[m_tState.m_iField].m_sNameExactly, m_tState.m_iField); +#else + m_Hit_collector = PyNewHitCollector(this, m_tSchema.m_dFields[m_tState.m_iField].m_sName, m_tState.m_iField); +#endif + }else{ + //re-init the collector + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)m_Hit_collector; + self->iField = m_tState.m_iField; +#if USE_PYTHON_CASE_SENSIVE_ATTR + *(self->m_FieldName) = m_tSchema.m_dFields[m_tState.m_iField].m_sNameExactly; +#else + *(self->m_FieldName) = m_tSchema.m_dFields[m_tState.m_iField].m_sName; +#endif + //as we are in buildhit reset the position. + self->iPhrase = 1; + self->iPos = 1; //all pos started with 1. + } + + PyObject* pargs = Py_BuildValue("(O)", m_Hit_collector); //+1 + PyObject* pResult = Py_None; + pResult = PyEval_CallObject(m_pInstance_BuildHit, pargs); + + // check result. + if(!pResult && PyErr_Occurred()) { + PyErr_Print(); //report the error. + Py_XDECREF(pargs); + } + // check result value, if false, call default index + if(!CheckResult(pResult)) + { + CSphSource_Document::BuildHits(sError, bSkipEndMarker); + }else{ + if ( !bSkipEndMarker && !m_tState.m_bProcessingHits && m_tHits.Length() ) + { + CSphWordHit * pHit = const_cast < CSphWordHit * > ( m_tHits.Last() ); + HITMAN::SetEndMarker ( &pHit->m_iWordPos ); + } + } + + Py_XDECREF(pResult); + Py_XDECREF(pargs); +} + +BYTE ** CSphSource_Python::NextDocument ( CSphString & sError ){ + //1st call document to load the data into pyobject. + //call on_nextdocument function in py side. + //call get_docId function to get the DocID attr's name + // __getattr__ not work with PyObject_GetAttrString + //clean the m_dFields 's data + unsigned int iPrevHitPos = 0; + + ARRAY_FOREACH ( i, m_tSchema.m_dFields ) { + if(m_dFields[i]) + free(m_dFields[i]); + m_dFields[i] = NULL; + } + + if(m_Doc_id_col.IsEmpty()) + return NULL; //no init yet! + + if(m_pInstance_NextDocument == NULL) + { + //PyObject* pFunc = NULL; + if (m_pInstance) + { + m_pInstance_NextDocument = PyObject_GetAttrString(m_pInstance, "NextDocument"); + } + + if(!m_pInstance_NextDocument){ + // BuildHits CAN '404 Not found.' + if(PyErr_Occurred()) + PyErr_Clear(); + + sError.SetSprintf("SourceObj->NextDocument():Bool missing, Can not continue"); + return NULL; //Next Document must exist + } + } + + if(!m_pInstance_NextDocument) + return NULL; + + { + //call next_document + if (!m_pInstance) + { + PyErr_Print(); + return NULL; + }else{ + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + PyObject* pFunc = m_pInstance_NextDocument; + + //mark the hit position + m_tHits.m_dData.Resize( 0 ); + iPrevHitPos = m_tHits.m_dData.GetLength(); + + //we do NOT care the Field + if(m_Hit_collector == NULL) + m_Hit_collector = PyNewHitCollector(this, m_tSchema.m_dFields[0].m_sName, 0); + + pArgs = Py_BuildValue("(O)", m_Hit_collector); + + pResult = PyEval_CallObject(pFunc, pArgs); + Py_XDECREF(pArgs); + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + if(!pResult) { + sError.SetSprintf("Exception happens in python source"); + m_tDocInfo.m_iDocID = 0; + goto CHECK_TO_CALL_AFTER_INDEX; + } + + if(!CheckResult(pResult)) { + Py_XDECREF(pResult); + m_tDocInfo.m_iDocID = 0; + goto CHECK_TO_CALL_AFTER_INDEX; + //return NULL; //if return false , the source finished + } + Py_XDECREF(pResult); + //We do NOT care about doc_id, but doc_id must be > 0 + } + } + { + PyObject* pDocId = GetObjectAttr(m_pInstance, (char*)m_Doc_id_col.cstr()); + + if(pDocId && PyLong_Check(pDocId)) { +#if USE_64BIT + m_tDocInfo.m_iDocID = PyLong_AsLongLong(pDocId); +#else + m_tDocInfo.m_iDocID = (SphDocID_t)(PyLong_AsLong(pDocId)); +#endif + }else + if(pDocId && PyInt_Check(pDocId)) + m_tDocInfo.m_iDocID = PyInt_AsLong(pDocId); + + Py_XDECREF(pDocId); + + m_uMaxFetchedID = Max ( m_uMaxFetchedID, m_tDocInfo.m_iDocID ); + + //re-set docid, user might push hit while in nextdocument + for(; iPrevHitPos < m_tHits.m_dData.GetLength(); iPrevHitPos++) { + m_tHits.m_dData[iPrevHitPos].m_iDocID = m_tDocInfo.m_iDocID; + } + + } +CHECK_TO_CALL_AFTER_INDEX: + //check doc_id + if(m_tDocInfo.m_iDocID <= 0) + { + //call sql_query_post + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + PyObject* pFunc = PyObject_GetAttrString(m_pInstance, "OnAfterIndex"); + if (!pFunc) + PyErr_Clear(); //is function can be undefined + + if(!pFunc || pFunc == Py_None ||!PyCallable_Check(pFunc)){ + Py_XDECREF(pFunc); + goto DONE; + } + pArgs = Py_BuildValue("()"); + + pResult = PyEval_CallObject(pFunc, pArgs); + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + Py_XDECREF(pArgs); + Py_XDECREF(pFunc); + Py_XDECREF(pResult); //we do not care about the result. +DONE: + return NULL; + } + + int iFieldMVA = 0; + for ( int i=0; i(tAttr); + tAttr2.m_iMVAIndex = iFieldMVA; //assign the index. + + iFieldMVA++; + Py_XDECREF(pList); + } + continue; + } + //deal other attributes +#if USE_PYTHON_CASE_SENSIVE_ATTR + PyObject* item = PyObject_GetAttrString(m_pInstance, (char*)tAttr.m_sNameExactly.cstr()); //+1 +#else + PyObject* item = PyObject_GetAttrString(m_pInstance, (char*)tAttr.m_sName.cstr()); //+1 +#endif + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + SetAttr(i, item); + //Py_XDECREF(item); + } + return m_dFields; +} + +ISphHits * CSphSource_Python::IterateJoinedHits ( CSphString & sError){ + // - join field. + m_tHits.m_dData.Resize ( 0 ); + + // eof check + if ( m_iJoinedHitField >= m_joinFields.GetLength() ) + { + m_tDocInfo.m_iDocID = 0; + return &m_tHits; + } + + /* + NOTE; A bit complicated still, for a joint field might be very large. Needs some mechanism to break the loop. + Or, total memory might be run out. + */ + // check GetDocField's existence + if(m_pInstance_GetDocField == NULL) + { + sError.SetSprintf("SourceObj->GetDocField():(id, string) missing, Can not continue"); + return false; + } + + /* + - m_iJoinedHitPos: mark current field's indexing pos. ->should be an array., + - m_iJoinedHitField + */ + + if(m_joinFields.GetLength() !=0) + { + while(m_iJoinedHitField < m_joinFields.GetLength()) + { + //the position in schema field. + int iJoinedHitField = m_tSchema.GetFieldIndex (m_joinFields[m_iJoinedHitField].cstr()); + if(iJoinedHitField == -1) { + fprintf(stderr, "Can Not found field named %s, skipping\n" , m_joinFields[m_iJoinedHitField].cstr()); + m_iJoinedHitField ++; + continue; + } + + // join: call GetDocField, -> return (docid, text) + while (true) + { + if(m_tState.m_bProcessingHits) + { + // if still in processing, continue the job. + CSphSource_Document::BuildHits ( sError, true ); + // update current position + if ( !m_tSchema.m_dFields[m_iJoinedHitField].m_bPayload && !m_tState.m_bProcessingHits && m_tHits.Length() ) + m_iJoinedHitPositions[iJoinedHitField] = HITMAN::GetPos ( m_tHits.Last()->m_iWordPos ); + + if(m_tState.m_bProcessingHits) + break; //too large in one pass. + + // check and free ptr -> strdup created. + if(m_dFields[0] && !m_tState.m_bProcessingHits) { + free(m_dFields[0]); + m_dFields[0] = NULL; + } + + } + + PyObject* pArgs = NULL; + PyObject* pResult = NULL; + PyObject* pResultItem = NULL; + PyObject* pResultKeys = NULL; +#if HAVE_SSIZE_T + Py_ssize_t key_count = 0; + Py_ssize_t i = 0; +#else + int key_count = 0; + int i = 0; +#endif + + //create hit_c + if(m_Hit_collector == NULL) + m_Hit_collector = PyNewHitCollector(this, m_joinFields[m_iJoinedHitField], m_iJoinedHitField); + else{ + csfHelper_HitCollectorObject *self = (csfHelper_HitCollectorObject *)m_Hit_collector; + self->iField = m_iJoinedHitField; + *(self->m_FieldName) = m_joinFields[m_iJoinedHitField]; + self->iPhrase = 1; + self->iPos = 1; //all pos started with 1. + } + + pArgs = Py_BuildValue("(sO)", m_joinFields[m_iJoinedHitField].cstr(), m_Hit_collector); + + //Ѿֵ򲻼 + + if(!m_JoinFieldsResult) + pResult = PyEval_CallObject(m_pInstance_GetDocField, pArgs); + else + pResult = m_JoinFieldsResult; + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + Py_XDECREF(pArgs); + + if(Py_None == pResult || pResult == NULL) { + //no more data, in this field!(all document). + m_iJoinedHitID = 0; + m_iJoinedHitField ++ ; + memset(m_iJoinedHitPositions,0,sizeof(m_iJoinedHitPositions)); + break; //this field is over, next. + } + + /* + * ֵ Dict Tuple + */ + if(!PyDict_Check(pResult)) + pResultItem = pResult; //is the tuple. + else{ + pResultKeys = PyDict_Keys(pResult); //+1 + key_count = PyList_GET_SIZE(pResultKeys); + if(pResult == m_JoinFieldsResult) + i = m_JoinFieldsResultPos; + else + i = 0; + } + + while(true) { + + if(pResultKeys && i>= key_count) break; //stop the while loop + + if(pResultKeys) { + PyObject* pItemKey = PyList_GET_ITEM(pResultKeys, i); //+0 + + if (! PyString_Check(pItemKey)) { + i++; + continue; //if return a hash table, field name must be string + } + pResultItem = PyDict_GetItem(pResult, pItemKey); + + iJoinedHitField = m_tSchema.GetFieldIndex (PyString_AsString(pItemKey)); + + if(iJoinedHitField == -1) { + //The Column PySource Given not found. + fprintf(stderr, "[Error in PySource] Can Not found field named %s, skipping\n" ,PyString_AsString(pItemKey)); + i++; + continue;; + } + } + + // check the result. + if(!PyTuple_Check(pResultItem)){ + sError.SetSprintf("SourceObj->GetDocField():(id, string) missing, Can not continue"); + return false; + } + + if(PyTuple_GET_SIZE(pResultItem) >= 2) { + // (docid, text) + PyObject* pDocId = PyTuple_GetItem(pResultItem, 0); + PyObject* py_text = PyTuple_GetItem(pResultItem, 1); + + // convert docid + if(pDocId && PyLong_Check(pDocId)) { +#if USE_64BIT + m_tDocInfo.m_iDocID = PyLong_AsLongLong(pDocId); +#else + m_tDocInfo.m_iDocID = (SphDocID_t)(PyLong_AsLong(pDocId)); +#endif + }else + if(pDocId && PyInt_Check(pDocId)) + m_tDocInfo.m_iDocID = PyInt_AsLong(pDocId); + + if ( !m_iJoinedHitID ) + m_iJoinedHitID = m_tDocInfo.m_iDocID; + + // docid asc requirement violated? report an error + if ( m_iJoinedHitID>m_tDocInfo.m_iDocID ) + { + sError.SetSprintf ( "joined field '%s': query MUST return document IDs in ASC order", + m_joinFields[m_iJoinedHitField].cstr() ); + return false; + } + + // next document? update tracker, reset position + if ( m_iJoinedHitID avoid read from pysource. + // build those hits + if(PyTuple_GET_SIZE(pResultItem) == 3) { + PyObject* py_ipos = PyTuple_GetItem(pResultItem, 2); +#if USE_64BIT + DWORD uPosition = PyLong_AsLong(py_ipos); //use long as the doc it. +#else + DWORD uPosition = (DWORD)(PyInt_AsLong(py_ipos)); +#endif + m_tState.m_iStartPos = uPosition; + } + + { + m_tState.m_iField = iJoinedHitField; + m_tState.m_iStartField = iJoinedHitField; + m_tState.m_iEndField = iJoinedHitField+1; + } + + CSphSource_Document::BuildHits ( sError, true ); + // update current position + if ( !m_tSchema.m_dFields[m_iJoinedHitField].m_bPayload && !m_tState.m_bProcessingHits && m_tHits.Length() ) + m_iJoinedHitPositions[iJoinedHitField] = HITMAN::GetPos ( m_tHits.Last()->m_iWordPos ); + }//end if ptr + + // check and free ptr -> strdup created. + if(ptr && !m_tState.m_bProcessingHits) { + m_dFields[0] = NULL; + free(ptr); + } + + } //end process pResultItem + + if(pResultKeys == NULL) break; + i ++; //Why I increase i, for the tokenizer have stored the current fields context. + if ( m_tState.m_bProcessingHits ) break; //break if m_tState is full. + } //end while + + Py_XDECREF(pResultKeys); + + if ( m_tState.m_bProcessingHits ) //break + { + m_JoinFieldsResult = pResult; //save the result + m_JoinFieldsResultPos = i; + break; + }else + { + // clear the continue + if(m_JoinFieldsResult) { + if(pResult == m_JoinFieldsResult) + pResult = NULL; + Py_XDECREF(m_JoinFieldsResult); + m_JoinFieldsResult = NULL; + } + } + Py_XDECREF(pResult); //we do not care about the result. + } //end while + if ( m_tState.m_bProcessingHits ) //break + break; + } //end for + + //reset all. + m_iJoinedHitID = 0; + //TODO? how about continuous build + memset(m_iJoinedHitPositions,0,sizeof(m_iJoinedHitPositions)); + } + + // no more fields + //m_tDocInfo.m_iDocID = 0; // pretend that's an eof + return &m_tHits; +} + +////////////////////////////////////////////////////////////////////////// +PyObject* CSphSource_Python::GetAttr(char* key) +{ + int iIndex = m_tSchema.GetAttrIndex(key); + if(iIndex < 0){ + iIndex = m_tSchema.GetFieldIndex(key); + if(iIndex < 0) + return NULL; + PyObject* item = PyObject_GetAttrString(m_pInstance, key); + return item; //new refer, might leak memory? almost NOT + } + return PyObject_GetAttrString(m_pInstance, key); +} + +int CSphSource_Python::SetAttr(char* key, PyObject* v) +{ + int iIndex = m_tSchema.GetAttrIndex(key); + if(iIndex >= 0) { + int nRet = SetAttr(iIndex, v); + PyObject_SetAttrString(m_pInstance, key, v); //set to the py document for easy getter code. + return nRet; + } + + iIndex = m_tSchema.GetFieldIndex(key); + if(iIndex < 0) + return -1; + //set field values, for set on the python object is what we needs later + return PyObject_SetAttrString(m_pInstance, key, v); +} + +int CSphSource_Python::SetAttr( int iIndex, PyObject* v) +{ + const CSphColumnInfo & tAttr = m_tSchema.GetAttr(iIndex); // shortcut + if ( tAttr.m_eAttrType == SPH_ATTR_UINT32SET ){ + PyObject* pList = v; + int iFieldMVA = tAttr.m_iMVAIndex; + size_t size = PyList_Size(pList); + m_dFieldMVAs [iFieldMVA].Resize ( 0 ); + for(size_t j = 0; j < size; j++) { + //PyList_GetItem just a borrowed reference + PyObject* item = PyList_GetItem(pList,j); + PY_LONG_LONG dVal = 0; + if(item && (PyInt_Check(item))) + dVal = PyInt_AsLong(item); + + if(item && (PyLong_Check(item))) + dVal = PyLong_AsLongLong(item); + + m_dFieldMVAs [iFieldMVA].Add ( (DWORD)dVal); + } + Py_XDECREF(pList); + } + + PyObject* item = v; + //normal attribute + switch(tAttr.m_eAttrType){ + case SPH_ATTR_FLOAT: { + double dVal = 0.0; + if(item && PyFloat_Check(item)) + dVal = PyFloat_AsDouble(item); + m_tDocInfo.SetAttrFloat ( tAttr.m_tLocator, (float)dVal); + Py_XDECREF(item); + } + break; + + case SPH_ATTR_INTEGER: + case SPH_ATTR_BIGINT:{ + PY_LONG_LONG dVal = 0; + if(item && PyInt_Check(item)) { + dVal = PyInt_AsLong(item); + m_tDocInfo.SetAttr ( tAttr.m_tLocator,(DWORD)dVal); + } + + if(item && PyLong_Check(item)) { + dVal = PyLong_AsLongLong(item); + m_tDocInfo.SetAttr ( tAttr.m_tLocator,dVal); + } + Py_XDECREF(item); + } + break; + case SPH_ATTR_BOOL: { + long dVal = (item == Py_True)?1:0; + m_tDocInfo.SetAttr ( tAttr.m_tLocator,(DWORD)dVal); + Py_XDECREF(item); + } + break; + case SPH_ATTR_TIMESTAMP: { + //time stamp can be float and long + PY_LONG_LONG dVal = 0; + if(item && PyLong_Check(item)) + dVal = PyLong_AsLongLong(item); + if(item && PyFloat_Check(item)) + dVal = (long)PyFloat_AsDouble(item); + m_tDocInfo.SetAttr (tAttr.m_tLocator,dVal); + Py_XDECREF(item); + } + break; + case SPH_ATTR_STRING: + case SPH_ATTR_ORDINAL: + { + //check as string? + if(item && Py_None!=item && PyString_Check(item)) { + char* data = PyString_AsString(item); + //if(m_dStrAttrs[iIndex].IsEmpty()) + // m_dStrAttrs[iIndex].; //clear prev setting. + m_dStrAttrs[iIndex] = data; //strdup(data); //same no needs to dup + }else + if( item && Py_None!=item && PyUnicode_Check(item)) { + PyObject* utf8str = PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(item), + PyUnicode_GET_SIZE(item), + "ignore"); //ignore all error unicode char. + if(utf8str) { + //if convert successfully. + char* data = PyString_AsString(utf8str); + m_dStrAttrs[iIndex] = data; //CSphString will clone the data + //ptr = (BYTE*)strdup(data); + Py_XDECREF(utf8str); + } + } + Py_XDECREF(item); + } + break; + default: + return -1; + break; + } + + return 0; +} + +void CSphSource_Python::AddHit ( SphDocID_t uDocid, SphWordID_t uWordid, Hitpos_t uPos ) +{ + m_tHits.AddHit ( uDocid, uWordid , uPos ); +} + +////////////////////////////////////////////////////////////////////////// +// helper functions +void CSphSource_Python::SetupFieldMatch ( CSphColumnInfo & tCol ) +{ + const bool bWordDict = m_pDict->GetSettings().m_bWordDict; + + tCol.m_eWordpart = GetWordpart ( tCol.m_sName.cstr(), bWordDict ); +} + +void CSphSource_Python::AddFieldToSchema ( const char * szName , int iIndex) +{ + CSphColumnInfo tCol ( szName ); + SetupFieldMatch ( tCol ); + tCol.m_iIndex = iIndex; + m_tSchema.m_dFields.Add ( tCol ); +} + +int CSphSource_Python::InitDataSchema(const CSphConfigSection & hSource,const char* dsName) { + + PyObject* pFunc = PyObject_GetAttrString(main_module, "__coreseek_find_pysource"); + PyObject* m_pTypeObj = NULL; + if(pFunc && PyCallable_Check(pFunc)){ + PyObject* pArgsKey = Py_BuildValue("(s)", dsName); + m_pTypeObj = PyEval_CallObject(pFunc, pArgsKey); + Py_XDECREF(pArgsKey); + } // end if + if (pFunc) + Py_XDECREF(pFunc); + + if (m_pTypeObj == NULL || m_pTypeObj == Py_None) { + Error("Can NOT found data source %s.\n", dsName); + return 0; + } + + if (!PyClass_Check(m_pTypeObj) && !PyType_Check(m_pTypeObj)) { + Py_XDECREF(m_pTypeObj); + Error("%s is NOT a Python class.\n", dsName); + return -1; //not a valid type file + } + + if(!m_pTypeObj||!PyCallable_Check(m_pTypeObj)){ + Py_XDECREF(m_pTypeObj); + return -2; + }else{ + PyObject* pConf = PyDict_New(); // +1 + hSource.IterateStart (); + while ( hSource.IterateNext() ){ + //Add ( hSource.IterateGet(), hSource.IterateGetKey() ); + const char* key = hSource.IterateGetKey().cstr(); + + CSphVector values; + LOC_GETAS(values, key); + if(values.GetLength() >1) + { + PyObject* pVals = PyList_New(0); // +1 + ARRAY_FOREACH ( i, values ) + { + PyList_Append(pVals, PyString_FromString(values[i].cstr())); + } + PyDict_SetItem(pConf, PyString_FromString(key), pVals); //0 ok ; -1 error + Py_XDECREF(pVals); + }else{ + const char* val = hSource.IterateGet().cstr(); + //hSource.IterateGet(); + PyDict_SetItemString(pConf, key, PyString_FromString(val)); + } + } + + PyObject* pargs = Py_BuildValue("O", pConf); //+1 + PyObject* pArg = PyTuple_New(1); //+1 + PyTuple_SetItem(pArg, 0, pargs); //steal one reference + + m_pInstance = PyEval_CallObject(m_pTypeObj, pArg); + if(!m_pInstance){ + PyErr_Print(); + Py_XDECREF(pArg); + Py_XDECREF(m_pTypeObj); + return -3; //source file error. + } + Py_XDECREF(pArg); + Py_XDECREF(pConf); + + } + Py_XDECREF(m_pTypeObj); + return 0; +} + +////////////////////////////////////////////////////////////////////////// +bool CSphSource_Python::IterateKillListStart ( CSphString & ) +{ + if (!m_pInstance) + return false; + + Py_XDECREF(m_pKillList); + + PyObject* pArgs = NULL; + PyObject* pFunc = PyObject_GetAttrString(m_pInstance, "GetKillList"); + if (!pFunc || pFunc == Py_None ||!PyCallable_Check(pFunc)) { + PyErr_Clear(); //GetKillList is a optional feature. + return false; + } + + m_pKillList = PyEval_CallObject(pFunc, pArgs); + Py_XDECREF(pArgs); + Py_XDECREF(pFunc); + + if(PyErr_Occurred()) PyErr_Print(); + PyErr_Clear(); + + if(!m_pKillList) + { + this->m_sError = ("Exception happens in python source.(GetKillList)\n"); + return false; + } + if(!PyList_Check(m_pKillList)) { + this->m_sError = "Feed list object to schema."; + return false; + } + + m_iKillListSize = (int)PyList_Size(m_pKillList); + m_iKillListPos = 0; + + return true; +} + +bool CSphSource_Python::IterateKillListNext ( SphDocID_t & aID) +{ + if( !m_pKillList ) + return false; + if( m_iKillListPos >= m_iKillListSize ) + return false; + + PyObject* item = PyList_GetItem(m_pKillList,m_iKillListPos); + if(PyInt_Check(item)) + { + aID = PyInt_AsLong(item); + } + if(PyLong_Check(item)){ + +#if USE_64BIT + aID = PyLong_AsLongLong(item); +#else + aID = (SphDocID_t)(PyLong_AsLong(item)); +#endif + + } + m_iKillListPos ++; //move next + return true; +} + +////////////////////////////////////////////////////////////////////////// + +void CSphSource_Python::Error ( const char * sTemplate, ... ) +{ + if ( !m_sError.IsEmpty() ) + return; + + va_list ap; + va_start ( ap, sTemplate ); + m_sError.SetSprintf( sTemplate, ap ); + va_end ( ap ); +} + +PyObject* GetObjectAttr(PyObject *pInst, char* name) //+1 +{ + PyObject* item = PyObject_GetAttrString(pInst, name); + if(item) + return item; + PyObject* pFunc = PyObject_GetAttrString(pInst, "__getattr__"); + if(!pFunc) + return NULL; + PyObject* pArgsKey = Py_BuildValue("(s)",name); + PyObject* pResult = PyEval_CallObject(pFunc, pArgsKey); + Py_XDECREF(pArgsKey); + Py_XDECREF(pFunc); + return pResult; +} + +#endif diff --git a/coreseek/csft-4.1/src/py_source.h b/coreseek/csft-4.1/src/py_source.h new file mode 100755 index 0000000..4f8ebd0 --- /dev/null +++ b/coreseek/csft-4.1/src/py_source.h @@ -0,0 +1,136 @@ +#ifndef _PY_SOURCE_H_ +#define _PY_SOURCE_H_ +#include "sphinx.h" + +#include "py_layer.h" + +#if USE_PYTHON + +BYTE* GetStringValueWithMalloc(PyObject* item); + +class CSphSource_Python : public CSphSource_Document +{ +public: + CSphSource_Python ( const char * sName ); + ~CSphSource_Python (); + bool Setup ( const CSphConfigSection & hSource); +public: + /// connect to the source (eg. to the database) + /// connection settings are specific for each source type and as such + /// are implemented in specific descendants + virtual bool Connect ( CSphString & sError ); + + /// disconnect from the source + virtual void Disconnect (); + /// check if there are any attributes configured + /// note that there might be NO actual attributes in the case if configured + /// ones do not match those actually returned by the source + virtual bool HasAttrsConfigured (); + + /// begin iterating document hits + /// to be implemented by descendants + virtual bool IterateStart ( CSphString & sError ); + + virtual void BuildHits ( CSphString & sError, bool bSkipEndMarker ); + virtual void BuildHits_Python ( CSphString & sError, bool bSkipEndMarker ); + //bool BuildHits ( BYTE ** dFields, int iFieldIndex, int iStartPos, CSphString & sError , bool bIgnoreFieldIndex ); + + /// begin iterating values of out-of-document multi-valued attribute iAttr + /// will fail if iAttr is out of range, or is not multi-valued + /// can also fail if configured settings are invalid (eg. SQL query can not be executed) + virtual bool IterateMultivaluedStart ( int iAttr, CSphString & sError ); + + /// get next multi-valued (id,attr-value) tuple to m_tDocInfo + virtual bool IterateMultivaluedNext (); + + /// begin iterating values of multi-valued attribute iAttr stored in a field + /// will fail if iAttr is out of range, or is not multi-valued + virtual bool IterateFieldMVAStart ( int iAttr, CSphString & sError ); + + /// get next multi-valued (id,attr-value) tuple to m_tDocInfo + virtual bool IterateFieldMVANext (); + + /// helper function for prefix & infix + void AppendPrefix(CSphString & ); + void AppendInfix (CSphString & ); + + /// append to support joined field. + virtual ISphHits * IterateJoinedHits ( CSphString & ); + virtual bool HasJoinedFields () { return m_tSchema.m_iBaseFields!=m_tSchema.m_dFields.GetLength(); } + + + virtual bool IterateKillListStart ( CSphString & ); + virtual bool IterateKillListNext ( SphDocID_t & ); + + virtual BYTE* GetField ( int iFieldIndex); + + virtual BYTE ** NextDocument ( CSphString & sError ); + virtual void PostIndex (); + + void Error ( const char * sTemplate, ... ); + +public: + virtual PyObject* GetAttr(char* key); + virtual int SetAttr(char* key, PyObject* v); + virtual int SetAttr( int iIndex, PyObject* v); + CSphDict * GetDict() { return m_pDict; } //used by py layer (hit collector) + +public: + virtual void AddHit ( SphDocID_t uDocid, SphWordID_t uWordid, Hitpos_t uPos ); //used to push hit by hand. + +protected: + int InitDataSchema_Python(CSphString & sError ); + int InitDataSchema(const CSphConfigSection & hSource,const char* dsName); + int UpdatePySchema( PyObject * pList, CSphSchema * pInfo, CSphString & docid, CSphString & sError ); + + void SetupFieldMatch ( CSphColumnInfo & tCol ); + void AddFieldToSchema ( const char * szName, int iIndex ); + bool CheckResult(PyObject * pResult); + +protected: + PyObject * main_module; + PyObject * builtin_module; + PyObject * m_pInstance; + + PyObject * m_pInstance_BuildHit; + PyObject * m_pInstance_NextDocument; + PyObject * m_pInstance_GetDocField; + PyObject * m_pInstance_GetMVAValue; + bool m_bHaveCheckBuildHit; + PyObject* m_Hit_collector; + PyObject* m_JoinFieldsResult; ///<- used to store GetDocField + int m_JoinFieldsResultPos; + + CSphString m_Doc_id_col; +protected: + BYTE * m_dFields [ SPH_MAX_FIELDS ]; + SphDocID_t m_uMaxFetchedID;///< max actually fetched ID + + CSphVector < CSphVector > m_dFieldMVAs; + CSphVector < int > m_dAttrToFieldMVA; + int m_iFieldMVA ; + int m_iFieldMVAIterator; + + //handle sql_join. + SphDocID_t m_iJoinedHitID; ///< last document id + int m_iJoinedHitPositions[ SPH_MAX_FIELDS ]; ///< last hit position + + int m_iMultiAttr; ///< multi-valued attr being currently fetched + +public: + CSphString m_sError; + +protected: + int m_iKillListSize; + int m_iKillListPos; + PyObject* m_pKillList; +protected: + CSphVector m_baseFields; + CSphVector m_joinFields; + int m_iJoinedHitField; //the index of m_joinFields +}; + +#endif //USE_PYTHON + +#endif + diff --git a/coreseek/csft-4.1/src/search b/coreseek/csft-4.1/src/search new file mode 100755 index 0000000..f8babc9 Binary files /dev/null and b/coreseek/csft-4.1/src/search differ diff --git a/coreseek/csft-4.1/src/search.cpp b/coreseek/csft-4.1/src/search.cpp new file mode 100755 index 0000000..47d615b --- /dev/null +++ b/coreseek/csft-4.1/src/search.cpp @@ -0,0 +1,503 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxutils.h" +#include "sphinxint.h" +#include + +#include "py_layer.h" + +#define CONF_CHECK(_hash,_key,_msg,_add) \ + if (!( _hash.Exists ( _key ) )) \ + { \ + fprintf ( stdout, "ERROR: key '%s' not found " _msg, _key, _add ); \ + continue; \ + } + + +const char * myctime ( DWORD uStamp ) +{ + static char sBuf[256]; + time_t tStamp = uStamp; // for 64-bit + strncpy ( sBuf, ctime ( &tStamp ), sizeof(sBuf) ); + + char * p = sBuf; + while ( (*p) && (*p)!='\n' && (*p)!='\r' ) p++; + *p = '\0'; + + return sBuf; +} + + +int main ( int argc, char ** argv ) +{ + fprintf ( stdout, SPHINX_BANNER ); + if ( argc<=1 ) + { + fprintf ( stdout, + "Usage: search [OPTIONS] \n" + "\n" + "Options are:\n" + "-c, --config \tuse given config file instead of defaults\n" + "-i, --index \tsearch given index only (default: all indexes)\n" + "-a, --any\t\tmatch any query word (default: match all words)\n" + "-b, --boolean\t\tmatch in boolean mode\n" + "-p, --phrase\t\tmatch exact phrase\n" + "-e, --extended\t\tmatch in extended mode\n" + "-f, --filter \tonly match if attribute attr value is v\n" + "-s, --sortby \tsort matches by 'CLAUSE' in sort_extended mode\n" + "-S, --sortexpr \tsort matches by 'EXPR' DESC in sort_expr mode\n" + "-o, --offset \tprint matches starting from this offset (default: 0)\n" + "-l, --limit \tprint this many matches (default: 20)\n" + "-q, --noinfo\t\tdon't print document info from SQL database\n" + "-g, --group \tgroup by attribute named attr\n" + "-gs,--groupsort \tsort groups by \n" + "--sort=date\t\tsort by date, descending\n" + "--rsort=date\t\tsort by date, ascending\n" + "--sort=ts\t\tsort by time segments\n" + "--stdin\t\t\tread query from stdin\n" + "\n" + "This program (CLI search) is for testing and debugging purposes only;\n" + "it is NOT intended for production use.\n" + ); + exit ( 0 ); + } + + /////////////////////////////////////////// + // get query and other commandline options + /////////////////////////////////////////// + + CSphQuery tQuery; + char sQuery [ 1024 ]; + sQuery[0] = '\0'; + + const char * sOptConfig = NULL; + const char * sIndex = NULL; + bool bNoInfo = false; + bool bStdin = false; + int iStart = 0; + int iLimit = 20; + + #define OPT(_a1,_a2) else if ( !strcmp(argv[i],_a1) || !strcmp(argv[i],_a2) ) + #define OPT1(_a1) else if ( !strcmp(argv[i],_a1) ) + + int i; + for ( i=1; i=argc ) break; + OPT ( "-o", "--offset" ) iStart = atoi ( argv[++i] ); + OPT ( "-l", "--limit" ) iLimit = atoi ( argv[++i] ); + OPT ( "-c", "--config" ) sOptConfig = argv[++i]; + OPT ( "-i", "--index" ) sIndex = argv[++i]; + OPT ( "-g", "--group" ) { tQuery.m_eGroupFunc = SPH_GROUPBY_ATTR; tQuery.m_sGroupBy = argv[++i]; } + OPT ( "-gs","--groupsort" ) { tQuery.m_sGroupSortBy = argv[++i]; } // NOLINT + OPT ( "-s", "--sortby" ) { tQuery.m_eSort = SPH_SORT_EXTENDED; tQuery.m_sSortBy = argv[++i]; } + OPT ( "-S", "--sortexpr" ) { tQuery.m_eSort = SPH_SORT_EXPR; tQuery.m_sSortBy = argv[++i]; } + + else if ( (i+2)>=argc ) break; + OPT ( "-f", "--filter" ) + { + DWORD uVal = strtoul ( argv[i+2], NULL, 10 ); + tQuery.m_dFilters.Reset (); + tQuery.m_dFilters.Resize ( 1 ); + tQuery.m_dFilters[0].m_eType = SPH_FILTER_VALUES; + tQuery.m_dFilters[0].m_dValues.Reset (); + tQuery.m_dFilters[0].m_dValues.Add ( uVal ); + tQuery.m_dFilters[0].m_sAttrName = argv[i+1]; + i += 2; + } else break; // unknown option + + } else if ( strlen(sQuery) + strlen(argv[i]) + 1 < sizeof(sQuery) ) + { + // this is a search term + strcat ( sQuery, argv[i] ); // NOLINT + strcat ( sQuery, " " ); // NOLINT + } + } + iStart = Max ( iStart, 0 ); + iLimit = Max ( iLimit, 0 ); + + if ( i!=argc ) + { + fprintf ( stdout, "ERROR: malformed or unknown option near '%s'.\n", argv[i] ); + return 1; + } + + #undef OPT + + if ( bStdin ) + { + int iPos = 0, iLeft = sizeof(sQuery)-1; + char sThrowaway [ 256 ]; + + while ( !feof(stdin) ) + { + if ( iLeft>0 ) + { + int iLen = fread ( sQuery, 1, iLeft, stdin ); + iPos += iLen; + iLeft -= iLen; + } else + { + int iDummy; // to avoid gcc unused result warning + iDummy = fread ( sThrowaway, 1, sizeof(sThrowaway), stdin ); + } + } + + assert ( iPos<(int)sizeof(sQuery) ); + sQuery[iPos] = '\0'; + } + + ///////////// + // configure + ///////////// + + tQuery.m_iMaxMatches = Max ( 1000, iStart + iLimit ); + + CSphConfigParser cp; + CSphConfig & hConf = cp.m_tConf; + sphLoadConfig ( sOptConfig, false, cp ); + + ///////////////////// + // init python layer + //////////////////// + if ( hConf("python") && hConf["python"]("python") ) + { + CSphConfigSection & hPython = hConf["python"]["python"]; +#if USE_PYTHON + if(!cftInitialize(hPython)) + sphDie ( "Python layer's initiation failed."); +#else + sphDie ( "Python layer defined, but search does Not supports python. used --with-python to recompile."); +#endif + } + + ///////////////////// + // search each index + ///////////////////// + + hConf["index"].IterateStart (); + while ( hConf["index"].IterateNext () ) + { + const CSphConfigSection & hIndex = hConf["index"].IterateGet (); + const char * sIndexName = hConf["index"].IterateGetKey().cstr(); + + if ( sIndex && strcmp ( sIndex, sIndexName ) ) + continue; + + if ( hIndex("type") && hIndex["type"]=="distributed" ) + continue; + + if ( !hIndex.Exists ( "path" ) ) + sphDie ( "key 'path' not found in index '%s'", sIndexName ); + + CSphString sError; + + // do we want to show document info from database? + #if USE_MYSQL + MYSQL tSqlDriver; + const char * sQueryInfo = NULL; + const char * sQueryInfoPre = NULL; //for set names + + while ( !bNoInfo ) + { + if ( !hIndex("source") || !hConf("source") || !hConf["source"]( hIndex["source"] ) ) + break; + + const CSphConfigSection & hSource = hConf["source"][ hIndex["source"] ]; + if ( !hSource("type") || hSource["type"]!="mysql" + || !hSource("sql_host") || !hSource("sql_user") || !hSource("sql_db") || !hSource("sql_pass") || !hSource("sql_query_info") ) + { + break; + } + if (hSource("sql_query_info_pre")) + { + sQueryInfoPre = hSource["sql_query_info_pre"].cstr(); + } + + sQueryInfo = hSource["sql_query_info"].cstr(); + if ( !strstr ( sQueryInfo, "$id" ) ) + sphDie ( "'sql_query_info' value must contain '$id'" ); + + int iPort = 3306; + if ( hSource.Exists ( "sql_port" ) && hSource["sql_port"].intval() ) + iPort = hSource["sql_port"].intval(); + + mysql_init ( &tSqlDriver ); + if ( !mysql_real_connect ( &tSqlDriver, + hSource["sql_host"].cstr(), + hSource["sql_user"].cstr(), + hSource["sql_pass"].cstr(), + hSource["sql_db"].cstr(), + iPort, + hSource.Exists ( "sql_sock" ) ? hSource["sql_sock"].cstr() : NULL, + 0 ) ) + { + sphDie ( "failed to connect to MySQL (error=%s)", mysql_error ( &tSqlDriver ) ); + } + + // all good + break; + } + #endif + + ////////// + // search + ////////// + + tQuery.m_sQuery = sQuery; + CSphQueryResult * pResult = NULL; + + CSphIndex * pIndex = sphCreateIndexPhrase ( NULL, hIndex["path"].cstr() ); + pIndex->m_bEnableStar = ( hIndex.GetInt("enable_star")!=0 ); + pIndex->SetWordlistPreload ( hIndex.GetInt("ondisk_dict")==0 ); + + CSphString sWarning; + + sError = "could not create index (check that files exist)"; + for ( ; pIndex; ) + { + if ( !pIndex->Prealloc ( false, false, sWarning ) || !pIndex->Preread() ) + { + sError = pIndex->GetLastError (); + break; + } + const CSphSchema * pSchema = &pIndex->GetMatchSchema(); + + if ( !sWarning.IsEmpty () ) + fprintf ( stdout, "WARNING: index '%s': %s\n", sIndexName, sWarning.cstr () ); + + // handle older index versions (<9) + if ( !sphFixupIndexSettings ( pIndex, hIndex, sError ) ) + sphDie ( "index '%s': %s", sIndexName, sError.cstr() ); + + // lookup first timestamp if needed + // FIXME! remove this? + if ( tQuery.m_eSort!=SPH_SORT_RELEVANCE && tQuery.m_eSort!=SPH_SORT_EXTENDED && tQuery.m_eSort!=SPH_SORT_EXPR ) + { + int iTS = -1; + for ( int i=0; iGetAttrsCount(); i++ ) + if ( pSchema->GetAttr(i).m_eAttrType==SPH_ATTR_TIMESTAMP ) + { + tQuery.m_sSortBy = pSchema->GetAttr(i).m_sName; + iTS = i; + break; + } + if ( iTS<0 ) + { + fprintf ( stdout, "index '%s': no timestamp attributes found, sorting by relevance.\n", sIndexName ); + tQuery.m_eSort = SPH_SORT_RELEVANCE; + } + } + + // do querying + ISphMatchSorter * pTop = sphCreateQueue ( &tQuery, pIndex->GetMatchSchema(), sError ); + if ( !pTop ) + { + sError.SetSprintf ( "failed to create sorting queue: %s", sError.cstr() ); + break; + } + + pResult = new CSphQueryResult(); + if ( !pIndex->MultiQuery ( &tQuery, pResult, 1, &pTop, NULL ) ) + { + // failure; pull that error message + sError = pIndex->GetLastError(); + SafeDelete ( pResult ); + } else + { + // success; fold them matches + pResult->m_dMatches.Reset (); + pResult->m_iTotalMatches += pTop->GetTotalCount(); + pResult->m_tSchema = pTop->GetSchema(); + sphFlattenQueue ( pTop, pResult, 0 ); + } + + SafeDelete ( pTop ); + break; + } + + ///////// + // print + ///////// + + if ( !pResult ) + { + fprintf ( stdout, "index '%s': search error: %s.\n", sIndexName, sError.cstr() ); + return 1; + } + + fprintf ( stdout, "index '%s': query '%s': returned %d matches of %d total in %d.%03d sec\n", + sIndexName, sQuery, pResult->m_dMatches.GetLength(), pResult->m_iTotalMatches, + pResult->m_iQueryTime/1000, pResult->m_iQueryTime%1000 ); + + if ( !pResult->m_sWarning.IsEmpty() ) + fprintf ( stdout, "WARNING: %s\n", pResult->m_sWarning.cstr() ); + + if ( pResult->m_dMatches.GetLength() ) + { + fprintf ( stdout, "\ndisplaying matches:\n" ); + + int iMaxIndex = Min ( iStart+iLimit, pResult->m_dMatches.GetLength() ); + for ( int i=iStart; im_dMatches[i]; + fprintf ( stdout, "%d. document=" DOCID_FMT ", weight=%d", 1+i, tMatch.m_iDocID, tMatch.m_iWeight ); + + for ( int j=0; jm_tSchema.GetAttrsCount(); j++ ) + { + const CSphColumnInfo & tAttr = pResult->m_tSchema.GetAttr(j); + fprintf ( stdout, ", %s=", tAttr.m_sName.cstr() ); + + if ( tAttr.m_eAttrType==SPH_ATTR_UINT32SET || tAttr.m_eAttrType==SPH_ATTR_UINT64SET ) + { + fprintf ( stdout, "(" ); + SphAttr_t iIndex = tMatch.GetAttr ( tAttr.m_tLocator ); + if ( iIndex ) + { + const DWORD * pValues = pResult->m_pMva + iIndex; + int iValues = *pValues++; + if ( tAttr.m_eAttrType==SPH_ATTR_UINT64SET ) + { + assert ( ( iValues%2 )==0 ); + for ( int k=0; km_pStrings + tMatch.GetAttr ( tAttr.m_tLocator ), &pStr ); + fwrite ( pStr, 1, iLen, stdout ); + break; + } + default: fprintf ( stdout, "(unknown-type-%d)", tAttr.m_eAttrType ); + } + } + fprintf ( stdout, "\n" ); + + #if USE_MYSQL + if ( sQueryInfo ) + { + char * sQuery = sphStrMacro ( sQueryInfo, "$id", tMatch.m_iDocID ); + const char * sError = NULL; + + #define LOC_MYSQL_ERROR(_arg) { sError = _arg; break; } + if (sQueryInfoPre) + { + if(mysql_query ( &tSqlDriver, sQueryInfoPre )) + LOC_MYSQL_ERROR ( "mysql_query" ); + } + + for ( ;; ) + { + if ( mysql_query ( &tSqlDriver, sQuery ) ) + LOC_MYSQL_ERROR ( "mysql_query" ); + + MYSQL_RES * pSqlResult = mysql_use_result ( &tSqlDriver ); + if ( !pSqlResult ) + LOC_MYSQL_ERROR ( "mysql_use_result" ); + + MYSQL_ROW tRow = mysql_fetch_row ( pSqlResult ); + if ( !tRow ) + { + fprintf ( stdout, "\t(document not found in db)\n" ); + break; + } + + for ( int iField=0; iField<(int)pSqlResult->field_count; iField++ ) + fprintf ( stdout, "\t%s=%s\n", + ( pSqlResult->fields && pSqlResult->fields[iField].name ) ? pSqlResult->fields[iField].name : "(NULL)", + tRow[iField] ? tRow[iField] : "(NULL)" ); + + mysql_free_result ( pSqlResult ); + break; + } + + if ( sError ) + sphDie ( "sql_query_info: %s: %s", sError, mysql_error ( &tSqlDriver ) ); + + delete [] sQuery; + } + #endif + } + } + + fprintf ( stdout, "\nwords:\n" ); + pResult->m_hWordStats.IterateStart(); + int iWord = 1; + while ( pResult->m_hWordStats.IterateNext() ) + { + const CSphQueryResultMeta::WordStat_t & tStat = pResult->m_hWordStats.IterateGet(); + fprintf ( stdout, "%d. '%s': %d documents, %d hits\n", + iWord, + pResult->m_hWordStats.IterateGetKey().cstr(), + tStat.m_iDocs, + tStat.m_iHits ); + iWord++; + } + fprintf ( stdout, "\n" ); + + /////////// + // cleanup + /////////// + + SafeDelete ( pIndex ); + } + + sphShutdownWordforms (); + +#if USE_PYTHON + cftShutdown(); //clean up +#endif + +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/search.o b/coreseek/csft-4.1/src/search.o new file mode 100644 index 0000000..8101f6d Binary files /dev/null and b/coreseek/csft-4.1/src/search.o differ diff --git a/coreseek/csft-4.1/src/searchd b/coreseek/csft-4.1/src/searchd new file mode 100755 index 0000000..739c4ae Binary files /dev/null and b/coreseek/csft-4.1/src/searchd differ diff --git a/coreseek/csft-4.1/src/searchd.cpp b/coreseek/csft-4.1/src/searchd.cpp new file mode 100755 index 0000000..8afa94d --- /dev/null +++ b/coreseek/csft-4.1/src/searchd.cpp @@ -0,0 +1,15061 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxutils.h" +#include "sphinxexcerpt.h" +#include "sphinxrt.h" +#include "sphinxint.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "py_layer.h" + +#define SEARCHD_BACKLOG 5 +#define SPHINXAPI_PORT 9312 +#define SPHINXQL_PORT 9306 +#define SPH_ADDRESS_SIZE sizeof("000.000.000.000") +#define SPH_ADDRPORT_SIZE sizeof("000.000.000.000:00000") +#define MVA_UPDATES_POOL 1048576 + + +// don't shutdown on SIGKILL (debug purposes) +// 1 - SIGKILL will shut down the whole daemon; 0 - watchdog will reincarnate the daemon +#define WATCHDOG_SIGKILL 1 + + +///////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS + // Win-specific headers and calls + #include + #include + #include + + #define sphSockRecv(_sock,_buf,_len) ::recv(_sock,_buf,_len,0) + #define sphSockSend(_sock,_buf,_len) ::send(_sock,_buf,_len,0) + #define sphSockClose(_sock) ::closesocket(_sock) + + #define stat _stat + +#else + // UNIX-specific headers and calls + #include + #include + #include + #include + #include + #include + #include + #include + + // there's no MSG_NOSIGNAL on OS X + #ifndef MSG_NOSIGNAL + #define MSG_NOSIGNAL 0 + #endif + + #define sphSockRecv(_sock,_buf,_len) ::recv(_sock,_buf,_len,MSG_NOSIGNAL) + #define sphSockSend(_sock,_buf,_len) ::send(_sock,_buf,_len,MSG_NOSIGNAL) + #define sphSockClose(_sock) ::close(_sock) + +#endif + +#if USE_SYSLOG + #include +#endif + +///////////////////////////////////////////////////////////////////////////// +// MISC GLOBALS +///////////////////////////////////////////////////////////////////////////// + +struct ServedIndex_t +{ + CSphIndex * m_pIndex; + CSphString m_sIndexPath; + bool m_bEnabled; ///< to disable index in cases when rotation fails + bool m_bMlock; + bool m_bPreopen; + bool m_bOnDiskDict; + bool m_bStar; + bool m_bExpand; + bool m_bToDelete; + bool m_bOnlyNew; + bool m_bRT; + +public: + ServedIndex_t (); + ~ServedIndex_t (); + void Reset (); + + void ReadLock () const; + void WriteLock () const; + void Unlock () const; + +private: + mutable CSphRwlock m_tLock; +}; + +///////////////////////////////////////////////////////////////////////////// + +enum ESphAddIndex +{ + ADD_ERROR = 0, + ADD_LOCAL = 1, + ADD_DISTR = 2, + ADD_RT = 3 +}; + + +enum ProtocolType_e +{ + PROTO_SPHINX = 0, + PROTO_MYSQL41, + + PROTO_TOTAL +}; + + +const char * g_dProtoNames[PROTO_TOTAL] = +{ + "sphinxapi", "sphinxql" +}; + + +static bool g_bService = false; +#if USE_WINDOWS +static bool g_bServiceStop = false; +static const char * g_sServiceName = "searchd"; +HANDLE g_hPipe = INVALID_HANDLE_VALUE; +#endif + +static CSphVector g_dArgs; + +static bool g_bHeadDaemon = false; +static bool g_bLogStdout = true; + +class SphCrashLogger_c +{ +public: + SphCrashLogger_c (); + + static void Init (); + static void Done (); + +#if !USE_WINDOWS + static void HandleCrash ( int ); +#else + static LONG WINAPI HandleCrash ( EXCEPTION_POINTERS * pExc ); +#endif + static void SetLastQuery ( const BYTE * pQuery, int iSize, bool bMySQL, int uCmd=0, int uVer=0 ); + static void SetupTimePID (); + void SetupTLS (); + +private: + const BYTE * m_pQuery; // last query + int m_iSize; // last query size + WORD m_uCMD; // last command (header) + WORD m_uVer; // last command's version (header) + bool m_bMySQL; // is query from MySQL or API + + static SphCrashLogger_c m_tLastQuery; // non threaded mode last query + static SphThreadKey_t m_tLastQueryTLS; // threaded mode last query +}; + +enum LogFormat_e +{ + LOG_FORMAT_PLAIN, + LOG_FORMAT_SPHINXQL +}; + +static ESphLogLevel g_eLogLevel = SPH_LOG_INFO; +static int g_iLogFile = STDOUT_FILENO; // log file descriptor +static bool g_bLogSyslog = false; +static bool g_bQuerySyslog = false; +static CSphString g_sLogFile; // log file name +static bool g_bLogTty = false; // cached isatty(g_iLogFile) +static LogFormat_e g_eLogFormat = LOG_FORMAT_PLAIN; + +static int g_iReadTimeout = 5; // sec +static int g_iWriteTimeout = 5; +static int g_iClientTimeout = 300; +static int g_iMaxChildren = 0; +#if !USE_WINDOWS +static bool g_bPreopenIndexes = true; +#else +static bool g_bPreopenIndexes = false; +#endif +static bool g_bOnDiskDicts = false; +static bool g_bUnlinkOld = true; +static bool g_bWatchdog = true; +static int g_iExpansionLimit = 0; +static bool g_bCompatResults = true; + +struct Listener_t +{ + int m_iSock; + ProtocolType_e m_eProto; +}; +static CSphVector g_dListeners; + +static int g_iQueryLogFile = -1; +static CSphString g_sQueryLogFile; +static const char * g_sPidFile = NULL; +static int g_iPidFD = -1; +static int g_iMaxMatches = 1000; + +static int g_iMaxCachedDocs = 0; // in bytes +static int g_iMaxCachedHits = 0; // in bytes + +static int g_iAttrFlushPeriod = 0; // in seconds; 0 means "do not flush" +static int g_iMaxPacketSize = 8*1024*1024; // in bytes; for both query packets from clients and response packets from agents +static int g_iMaxFilters = 256; +static int g_iMaxFilterValues = 4096; +static int g_iMaxBatchQueries = 32; +static ESphCollation g_eCollation = SPH_COLLATION_DEFAULT; +#if !USE_WINDOWS +static CSphProcessSharedVariable g_tHaveTTY ( true ); +#endif +enum Mpm_e +{ + MPM_NONE, ///< process queries in a loop one by one (eg. in --console) + MPM_FORK, ///< fork a worker process for each query + MPM_PREFORK, ///< keep a number of pre-forked processes + MPM_THREADS ///< create a worker thread for each query +}; + +static Mpm_e g_eWorkers = USE_WINDOWS ? MPM_THREADS : MPM_FORK; + +static int g_iPreforkChildren = 10; // how much workers to keep +static CSphVector g_dChildren; +static volatile bool g_bAcceptUnlocked = true; // whether this preforked child is guaranteed to be *not* holding a lock around accept +static int g_iClientFD = -1; +static int g_iDistThreads = 0; + +enum ThdState_e +{ + THD_HANDSHAKE, + THD_NET_READ, + THD_NET_WRITE, + THD_QUERY, + + THD_STATE_TOTAL +}; + +const char * g_dThdStates[THD_STATE_TOTAL] = { + "handshake", "net_read", "net_write", "query" +}; + +struct ThdDesc_t +{ + SphThread_t m_tThd; + ProtocolType_e m_eProto; + int m_iClientSock; + CSphString m_sClientName; + + ThdState_e m_eThdState; + const char * m_sCommand; + + int m_iConnID; ///< current conn-id for this thread + + ThdDesc_t () + : m_iClientSock ( 0 ) + , m_sCommand ( NULL ) + , m_iConnID ( -1 ) + {} +}; + +static CSphStaticMutex g_tThdMutex; +static CSphVector g_dThd; ///< existing threads table + +static int g_iConnID = 0; ///< global conn-id in none/fork/threads; current conn-id in prefork +static SphThreadKey_t g_tConnKey; ///< current conn-id TLS in threads +static int * g_pConnID = NULL; ///< global conn-id ptr in prefork +static CSphSharedBuffer g_dConnID; ///< global conn-id storage in prefork (protected by accept mutex) + +// handshake +static char g_sMysqlHandshake[128]; +static int g_iMysqlHandshake = 0; + +////////////////////////////////////////////////////////////////////////// + +static CSphString g_sConfigFile; +static DWORD g_uCfgCRC32 = 0; +static struct stat g_tCfgStat; + +static CSphConfigParser * g_pCfg = NULL; + +#if USE_WINDOWS +static bool g_bSeamlessRotate = false; +#else +static bool g_bSeamlessRotate = true; +#endif + +static bool g_bIOStats = false; +static bool g_bCpuStats = false; +static bool g_bOptNoDetach = false; +static bool g_bOptNoLock = false; +static bool g_bSafeTrace = false; +static bool g_bStripPath = false; + +static volatile bool g_bDoDelete = false; // do we need to delete any indexes? +static volatile int g_iRotateCount = 0; // flag that we are rotating now; set from SIGHUP; cleared on rotation success +static volatile sig_atomic_t g_bGotSighup = 0; // we just received SIGHUP; need to log +static volatile sig_atomic_t g_bGotSigterm = 0; // we just received SIGTERM; need to shutdown +static volatile sig_atomic_t g_bGotSigchld = 0; // we just received SIGCHLD; need to count dead children +static volatile sig_atomic_t g_bGotSigusr1 = 0; // we just received SIGUSR1; need to reopen logs + +static CSphVector g_dTermChildren; // children to send term signal on rotation is done +static int64_t g_tmRotateChildren = 0; // pause to next children term signal after rotation is done +static int g_iRotationThrottle = 0; // pause between children term signals after rotation is done + +/// global index hash +/// used in both non-threaded and multi-threaded modes +/// +/// hash entry is a CSphIndex pointer, rwlock, and a few flags (see ServedIndex_t) +/// rlock on entry guarantees it won't change, eg. that index pointer will stay alive +/// wlock on entry allows to change (delete/replace) the index pointer +/// +/// note that entry locks are held outside the hash +/// and Delete() honours that by acquiring wlock on an entry first +class IndexHash_c : protected SmallStringHash_T +{ + friend class IndexHashIterator_c; + typedef SmallStringHash_T BASE; + +public: + explicit IndexHash_c (); + virtual ~IndexHash_c (); + + int GetLength () const { return BASE::GetLength(); } + void Reset () { BASE::Reset(); } + + bool Add ( const ServedIndex_t & tValue, const CSphString & tKey ); + bool Delete ( const CSphString & tKey ); + + const ServedIndex_t * GetRlockedEntry ( const CSphString & tKey ) const; + ServedIndex_t * GetWlockedEntry ( const CSphString & tKey ) const; + ServedIndex_t & GetUnlockedEntry ( const CSphString & tKey ) const; + bool Exists ( const CSphString & tKey ) const; + +protected: + void Rlock () const; + void Wlock () const; + void Unlock () const; + +private: + mutable CSphRwlock m_tLock; +}; + + +/// multi-threaded hash iterator +class IndexHashIterator_c : public ISphNoncopyable +{ +public: + explicit IndexHashIterator_c ( const IndexHash_c * pHash, bool bWrite=false ); + ~IndexHashIterator_c (); + + bool Next (); + ServedIndex_t & Get (); + const CSphString & GetKey (); + +private: + const IndexHash_c * m_pHash; + IndexHash_c::HashEntry_t * m_pIterator; +}; + + +static IndexHash_c * g_pIndexes = NULL; // served indexes hash +static CSphVector g_dRotating; // names of indexes to be rotated this time +static const char * g_sPrereading = NULL; // name of index currently being preread +static CSphIndex * g_pPrereading = NULL; // rotation "buffer" + +static CSphMutex g_tRotateQueueMutex; +static CSphVector g_dRotateQueue; // FIXME? maybe replace it with lockless ring buffer +static CSphMutex g_tRotateConfigMutex; +static SphThread_t g_tRotateThread; +static volatile bool g_bRotateShutdown = false; + +/// flush parameters of rt indexes +static SphThread_t g_tRtFlushThread; +static volatile bool g_bRtFlushShutdown = false; + +struct DistributedMutex_t +{ + void Init (); + void Done (); + void Lock (); + void Unlock (); + +private: + CSphMutex m_tLock; +}; +static DistributedMutex_t g_tDistLock; + +enum +{ + SPH_PIPE_PREREAD +}; + +struct PipeInfo_t +{ + int m_iFD; ///< read-pipe to child + int m_iHandler; ///< who's my handler (SPH_PIPE_xxx) + + PipeInfo_t () : m_iFD ( -1 ), m_iHandler ( -1 ) {} +}; + +static CSphVector g_dPipes; ///< currently open read-pipes to children processes + +struct PoolPtrs_t +{ + const DWORD * m_pMva; + const BYTE * m_pStrings; + + PoolPtrs_t () + : m_pMva ( NULL ) + , m_pStrings ( NULL ) + {} +}; + +///////////////////////////////////////////////////////////////////////////// + +/// known commands +enum SearchdCommand_e +{ + SEARCHD_COMMAND_SEARCH = 0, + SEARCHD_COMMAND_EXCERPT = 1, + SEARCHD_COMMAND_UPDATE = 2, + SEARCHD_COMMAND_KEYWORDS = 3, + SEARCHD_COMMAND_PERSIST = 4, + SEARCHD_COMMAND_STATUS = 5, + SEARCHD_COMMAND_FLUSHATTRS = 7, + + SEARCHD_COMMAND_TOTAL +}; + + +/// known command versions +enum +{ + VER_COMMAND_SEARCH = 0x119, + VER_COMMAND_EXCERPT = 0x103, + VER_COMMAND_UPDATE = 0x102, + VER_COMMAND_KEYWORDS = 0x100, + VER_COMMAND_STATUS = 0x100, + VER_COMMAND_FLUSHATTRS = 0x100 +}; + + +/// known status return codes +enum SearchdStatus_e +{ + SEARCHD_OK = 0, ///< general success, command-specific reply follows + SEARCHD_ERROR = 1, ///< general failure, error message follows + SEARCHD_RETRY = 2, ///< temporary failure, error message follows, client should retry later + SEARCHD_WARNING = 3 ///< general success, warning message and command-specific reply follow +}; + + +enum +{ + VER_MASTER = 1 +}; + + +/// command names +const char * g_dApiCommands[SEARCHD_COMMAND_TOTAL] = +{ + "search", "excerpt", "update", "keywords", "persist", "status", "query", "flushattrs" +}; + +const int MAX_RETRY_COUNT = 8; +const int MAX_RETRY_DELAY = 1000; + +////////////////////////////////////////////////////////////////////////// + +const int STATS_MAX_AGENTS = 1024; ///< we'll track stats for this much remote agents + +/// per-agent query stats +struct AgentStats_t +{ + int64_t m_iTimeoutsQuery; ///< number of time-outed queries + int64_t m_iTimeoutsConnect; ///< number of time-outed connections + int64_t m_iConnectFailures; ///< failed to connect + int64_t m_iNetworkErrors; ///< network error + int64_t m_iWrongReplies; ///< incomplete reply + int64_t m_iUnexpectedClose; ///< agent closed the connection +}; + +struct SearchdStats_t +{ + DWORD m_uStarted; + int64_t m_iConnections; + int64_t m_iMaxedOut; + int64_t m_iCommandCount[SEARCHD_COMMAND_TOTAL]; + int64_t m_iAgentConnect; + int64_t m_iAgentRetry; + + int64_t m_iQueries; ///< search queries count (differs from search commands count because of multi-queries) + int64_t m_iQueryTime; ///< wall time spent (including network wait time) + int64_t m_iQueryCpuTime; ///< CPU time spent + + int64_t m_iDistQueries; ///< distributed queries count + int64_t m_iDistWallTime; ///< wall time spent on distributed queries + int64_t m_iDistLocalTime; ///< wall time spent searching local indexes in distributed queries + int64_t m_iDistWaitTime; ///< time spent waiting for remote agents in distributed queries + + int64_t m_iDiskReads; ///< total read IO calls (fired by search queries) + int64_t m_iDiskReadBytes; ///< total read IO traffic + int64_t m_iDiskReadTime; ///< total read IO time + + DWORD m_bmAgentStats[STATS_MAX_AGENTS/32]; ///< per-agent storage usage bitmap + AgentStats_t m_dAgentStats[STATS_MAX_AGENTS]; ///< per-agent storage +}; + +static SearchdStats_t * g_pStats = NULL; +static CSphSharedBuffer g_tStatsBuffer; +static CSphProcessSharedMutex g_tStatsMutex; + +////////////////////////////////////////////////////////////////////////// + +struct FlushState_t +{ + int m_bFlushing; ///< update flushing in progress + int m_iFlushTag; ///< last flushed tag + bool m_bForceCheck; ///< forced check/flush flag +}; + +static volatile FlushState_t * g_pFlush = NULL; +static CSphSharedBuffer g_tFlushBuffer; +static CSphMutex g_tFlushMutex; + +////////////////////////////////////////////////////////////////////////// + +enum Uservar_e +{ + USERVAR_INT_SET +}; + +struct Uservar_t +{ + Uservar_e m_eType; + CSphVector * m_pVal; +}; + +static CSphStaticMutex g_tUservarsMutex; +static SmallStringHash_T g_hUservars; + +///////////////////////////////////////////////////////////////////////////// +// MACHINE-DEPENDENT STUFF +///////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS + +// Windows hacks +#undef EINTR +#define LOCK_EX 0 +#define LOCK_UN 1 +#define STDIN_FILENO fileno(stdin) +#define STDOUT_FILENO fileno(stdout) +#define STDERR_FILENO fileno(stderr) +#define ETIMEDOUT WSAETIMEDOUT +#define EWOULDBLOCK WSAEWOULDBLOCK +#define EINPROGRESS WSAEINPROGRESS +#define EINTR WSAEINTR +#define ECONNRESET WSAECONNRESET +#define ECONNABORTED WSAECONNABORTED +#define socklen_t int + +#define ftruncate _chsize +#define getpid GetCurrentProcessId + +#endif // USE_WINDOWS + +const int EXT_COUNT = 8; +const int EXT_MVP = 8; +const char * g_dNewExts[EXT_COUNT] = { ".new.sph", ".new.spa", ".new.spi", ".new.spd", ".new.spp", ".new.spm", ".new.spk", ".new.sps" }; +const char * g_dOldExts[] = { ".old.sph", ".old.spa", ".old.spi", ".old.spd", ".old.spp", ".old.spm", ".old.spk", ".old.sps", ".old.mvp" }; +const char * g_dCurExts[] = { ".sph", ".spa", ".spi", ".spd", ".spp", ".spm", ".spk", ".sps", ".mvp" }; + +///////////////////////////////////////////////////////////////////////////// +// MISC +///////////////////////////////////////////////////////////////////////////// + +void ReleaseTTYFlag() +{ +#if !USE_WINDOWS + g_tHaveTTY.WriteValue(false); +#endif +} + +ServedIndex_t::ServedIndex_t () +{ + Reset (); +} + +void ServedIndex_t::Reset () +{ + m_pIndex = NULL; + m_bEnabled = true; + m_bMlock = false; + m_bPreopen = false; + m_bOnDiskDict = false; + m_bStar = false; + m_bExpand = false; + m_bToDelete = false; + m_bOnlyNew = false; + m_bRT = false; + + m_tLock = CSphRwlock(); + if ( g_eWorkers==MPM_THREADS ) + m_tLock.Init(); +} + +ServedIndex_t::~ServedIndex_t () +{ + SafeDelete ( m_pIndex ); + if ( g_eWorkers==MPM_THREADS ) + Verify ( m_tLock.Done() ); +} + +void ServedIndex_t::ReadLock () const +{ + if ( g_eWorkers==MPM_THREADS ) + { + if ( m_tLock.ReadLock() ) + sphLogDebugvv ( "ReadLock %p", this ); + else + { + sphLogDebug ( "ReadLock %p failed", this ); + assert ( false ); + } + } +} + +void ServedIndex_t::WriteLock () const +{ + if ( g_eWorkers==MPM_THREADS ) + { + if ( m_tLock.WriteLock() ) + sphLogDebugvv ( "WriteLock %p", this ); + else + { + sphLogDebug ( "WriteLock %p failed", this ); + assert ( false ); + } + } +} + +void ServedIndex_t::Unlock () const +{ + if ( g_eWorkers==MPM_THREADS ) + { + if ( m_tLock.Unlock() ) + sphLogDebugvv ( "Unlock %p", this ); + else + { + sphLogDebug ( "Unlock %p failed", this ); + assert ( false ); + } + } +} + +////////////////////////////////////////////////////////////////////////// + +IndexHashIterator_c::IndexHashIterator_c ( const IndexHash_c * pHash, bool bWrite ) + : m_pHash ( pHash ) + , m_pIterator ( NULL ) +{ + if ( !bWrite ) + m_pHash->Rlock(); + else + m_pHash->Wlock(); +} + +IndexHashIterator_c::~IndexHashIterator_c () +{ + m_pHash->Unlock(); +} + +bool IndexHashIterator_c::Next () +{ + m_pIterator = m_pIterator ? m_pIterator->m_pNextByOrder : m_pHash->m_pFirstByOrder; + return m_pIterator!=NULL; +} + +ServedIndex_t & IndexHashIterator_c::Get () +{ + assert ( m_pIterator ); + return m_pIterator->m_tValue; +} + +const CSphString & IndexHashIterator_c::GetKey () +{ + assert ( m_pIterator ); + return m_pIterator->m_tKey; +} + +////////////////////////////////////////////////////////////////////////// + +IndexHash_c::IndexHash_c () +{ + if ( g_eWorkers==MPM_THREADS ) + if ( !m_tLock.Init() ) + sphDie ( "failed to init hash indexes rwlock" ); +} + + +IndexHash_c::~IndexHash_c() +{ + if ( g_eWorkers==MPM_THREADS ) + Verify ( m_tLock.Done() ); +} + + +void IndexHash_c::Rlock () const +{ + if ( g_eWorkers==MPM_THREADS ) + Verify ( m_tLock.ReadLock() ); +} + + +void IndexHash_c::Wlock () const +{ + if ( g_eWorkers==MPM_THREADS ) + Verify ( m_tLock.WriteLock() ); +} + + +void IndexHash_c::Unlock () const +{ + if ( g_eWorkers==MPM_THREADS ) + Verify ( m_tLock.Unlock() ); +} + + +bool IndexHash_c::Add ( const ServedIndex_t & tValue, const CSphString & tKey ) +{ + Wlock(); + bool bRes = BASE::Add ( tValue, tKey ); + Unlock(); + return bRes; +} + + +bool IndexHash_c::Delete ( const CSphString & tKey ) +{ + // tricky part + // hash itself might be unlocked, but entry (!) might still be locked + // hence, we also need to acquire a lock on entry, and an exclusive one + Wlock(); + bool bRes = false; + ServedIndex_t * pEntry = GetWlockedEntry ( tKey ); + if ( pEntry ) + { + pEntry->Unlock(); + bRes = BASE::Delete ( tKey ); + } + Unlock(); + return bRes; +} + + +const ServedIndex_t * IndexHash_c::GetRlockedEntry ( const CSphString & tKey ) const +{ + Rlock(); + ServedIndex_t * pEntry = BASE::operator() ( tKey ); + if ( pEntry ) + pEntry->ReadLock(); + Unlock(); + return pEntry; +} + + +ServedIndex_t * IndexHash_c::GetWlockedEntry ( const CSphString & tKey ) const +{ + Rlock(); + ServedIndex_t * pEntry = BASE::operator() ( tKey ); + if ( pEntry ) + pEntry->WriteLock(); + Unlock(); + return pEntry; +} + + +ServedIndex_t & IndexHash_c::GetUnlockedEntry ( const CSphString & tKey ) const +{ + return BASE::operator[] ( tKey ); +} + + +bool IndexHash_c::Exists ( const CSphString & tKey ) const +{ + Rlock(); + bool bRes = BASE::Exists ( tKey ); + Unlock(); + return bRes; +} + +////////////////////////////////////////////////////////////////////////// + + +void DistributedMutex_t::Init () +{ + if ( g_eWorkers==MPM_THREADS ) + m_tLock.Init(); +} + +void DistributedMutex_t::Done () +{ + if ( g_eWorkers==MPM_THREADS ) + m_tLock.Done(); +} + +void DistributedMutex_t::Lock () +{ + if ( g_eWorkers==MPM_THREADS ) + m_tLock.Lock(); +} + +void DistributedMutex_t::Unlock() +{ + if ( g_eWorkers==MPM_THREADS ) + m_tLock.Unlock(); +} + +///////////////////////////////////////////////////////////////////////////// +// LOGGING +///////////////////////////////////////////////////////////////////////////// + +void Shutdown (); // forward ref for sphFatal() + + +/// format current timestamp for logging +int sphFormatCurrentTime ( char * sTimeBuf, int iBufLen ) +{ + int64_t iNow = sphMicroTimer (); + time_t ts = (time_t) ( iNow/1000000 ); // on some systems (eg. FreeBSD 6.2), tv.tv_sec has another type and we can't just pass it + +#if !USE_WINDOWS + struct tm tmp; + localtime_r ( &ts, &tmp ); +#else + struct tm tmp; + tmp = *localtime ( &ts ); +#endif + + static const char * sWeekday[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; + static const char * sMonth[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; + + return snprintf ( sTimeBuf, iBufLen, "%.3s %.3s%3d %.2d:%.2d:%.2d.%.3d %d", + sWeekday [ tmp.tm_wday ], + sMonth [ tmp.tm_mon ], + tmp.tm_mday, tmp.tm_hour, + tmp.tm_min, tmp.tm_sec, (int)((iNow%1000000)/1000), + 1900+tmp.tm_year ); +} + + +/// physically emit log entry +/// buffer must have 1 extra byte for linefeed +void sphLogEntry ( ESphLogLevel eLevel, char * sBuf, char * sTtyBuf ) +{ +#if USE_WINDOWS + if ( g_bService && g_iLogFile==STDOUT_FILENO ) + { + HANDLE hEventSource; + LPCTSTR lpszStrings[2]; + + hEventSource = RegisterEventSource ( NULL, g_sServiceName ); + if ( hEventSource ) + { + lpszStrings[0] = g_sServiceName; + lpszStrings[1] = sBuf; + + WORD eType = EVENTLOG_INFORMATION_TYPE; + switch ( eLevel ) + { + case SPH_LOG_FATAL: eType = EVENTLOG_ERROR_TYPE; break; + case SPH_LOG_WARNING: eType = EVENTLOG_WARNING_TYPE; break; + case SPH_LOG_INFO: eType = EVENTLOG_INFORMATION_TYPE; break; + } + + ReportEvent ( hEventSource, // event log handle + eType, // event type + 0, // event category + 0, // event identifier + NULL, // no security identifier + 2, // size of lpszStrings array + 0, // no binary data + lpszStrings, // array of strings + NULL ); // no binary data + + DeregisterEventSource ( hEventSource ); + } + + } else +#endif + { + strcat ( sBuf, "\n" ); // NOLINT + + lseek ( g_iLogFile, 0, SEEK_END ); + if ( g_bLogTty ) + sphWrite ( g_iLogFile, sTtyBuf, strlen(sTtyBuf) ); + else + sphWrite ( g_iLogFile, sBuf, strlen(sBuf) ); + + if ( g_bLogStdout && g_iLogFile!=STDOUT_FILENO ) + sphWrite ( STDOUT_FILENO, sTtyBuf, strlen(sTtyBuf) ); + } +} + + +/// log entry (with log levels, dupe catching, etc) +/// call with NULL format for dupe flushing +void sphLog ( ESphLogLevel eLevel, const char * sFmt, va_list ap ) +{ + // dupe catcher state + static const int FLUSH_THRESH_TIME = 1000000; // in microseconds + static const int FLUSH_THRESH_COUNT = 100; + + static ESphLogLevel eLastLevel = SPH_LOG_INFO; + static DWORD uLastEntry = 0; + static int64_t tmLastStamp = -1000000-FLUSH_THRESH_TIME; + static int iLastRepeats = 0; + + // only if we can + if ( sFmt && eLevel>g_eLogLevel ) + return; + +#if USE_SYSLOG + if ( g_bLogSyslog && sFmt ) + { + const int levels[] = { LOG_EMERG, LOG_WARNING, LOG_INFO, LOG_DEBUG, LOG_DEBUG, LOG_DEBUG }; + vsyslog ( levels[eLevel], sFmt, ap ); + } +#endif + + if ( g_iLogFile<0 && !g_bService ) + return; + + // format the banner + char sTimeBuf[128]; + sphFormatCurrentTime ( sTimeBuf, sizeof(sTimeBuf) ); + + const char * sBanner = ""; + if ( sFmt==NULL ) eLevel = eLastLevel; + if ( eLevel==SPH_LOG_FATAL ) sBanner = "FATAL: "; + if ( eLevel==SPH_LOG_WARNING ) sBanner = "WARNING: "; + if ( eLevel>=SPH_LOG_DEBUG ) sBanner = "DEBUG: "; + + char sBuf [ 1024 ]; + snprintf ( sBuf, sizeof(sBuf)-1, "[%s] [%5d] ", sTimeBuf, (int)getpid() ); + + char * sTtyBuf = sBuf + strlen(sBuf); + strncpy ( sTtyBuf, sBanner, 32 ); // 32 is arbitrary; just something that is enough and keeps lint happy + + int iLen = strlen(sBuf); + + // format the message + if ( sFmt ) + vsnprintf ( sBuf+iLen, sizeof(sBuf)-iLen-1, sFmt, ap ); + + // catch dupes + DWORD uEntry = sFmt ? sphCRC32 ( (const BYTE*)( sBuf+iLen ) ) : 0; + int64_t tmNow = sphMicroTimer(); + + // accumulate while possible + if ( sFmt && eLevel==eLastLevel && uEntry==uLastEntry && iLastRepeats=tmLastStamp+FLUSH_THRESH_TIME ) ) + { + // flush if we actually have something to flush, and + // case 1: got a message we can't accumulate + // case 2: got a periodic flush and been otherwise idle for a thresh period + char sLast[256]; + strncpy ( sLast, sBuf, iLen ); + snprintf ( sLast+iLen, sizeof(sLast)-iLen, "last message repeated %d times", iLastRepeats ); + sphLogEntry ( eLastLevel, sLast, sLast + ( sTtyBuf-sBuf ) ); + + tmLastStamp = tmNow; + iLastRepeats = 0; + eLastLevel = SPH_LOG_INFO; + uLastEntry = 0; + } + + // was that a flush-only call? + if ( !sFmt ) + return; + + tmLastStamp = tmNow; + iLastRepeats = 0; + eLastLevel = eLevel; + uLastEntry = uEntry; + + // do the logging + sphLogEntry ( eLevel, sBuf, sTtyBuf ); +} + +void sphFatal ( const char * sFmt, ... ) __attribute__ ( ( format ( printf, 1, 2 ) ) ); +void sphFatal ( const char * sFmt, ... ) +{ + va_list ap; + va_start ( ap, sFmt ); + sphLog ( SPH_LOG_FATAL, sFmt, ap ); + va_end ( ap ); + Shutdown (); + exit ( 1 ); +} + +#if !USE_WINDOWS +static CSphString GetNamedPipeName ( int iPid ) +{ + CSphString sRes; + sRes.SetSprintf ( "/tmp/searchd_%d", iPid ); + return sRes; +} +#endif + +void LogWarning ( const char * sWarning ) +{ + sphWarning ( "%s", sWarning ); +} + +///////////////////////////////////////////////////////////////////////////// + +struct StrBuf_t +{ +protected: + char m_sBuf [ 2048 ]; + char * m_pBuf; + int m_iLeft; + +public: + StrBuf_t () + { + memset ( m_sBuf, 0, sizeof(m_sBuf) ); + m_iLeft = sizeof(m_sBuf)-1; + m_pBuf = m_sBuf; + } + + const char * cstr () + { + return m_sBuf; + } + + int GetLength () + { + return sizeof(m_sBuf)-1-m_iLeft; + } + + bool Append ( const char * s, bool bWhole ) + { + if ( !s ) + return false; + int iLen = strlen(s); + if ( bWhole && m_iLeft m_dLog; + +public: + void Submit ( const char * sIndex, const char * sError ) + { + SearchFailure_t & tEntry = m_dLog.Add (); + tEntry.m_sIndex = sIndex; + tEntry.m_sError = sError; + } + + void SubmitEx ( const char * sIndex, const char * sTemplate, ... ) __attribute__ ( ( format ( printf, 3, 4 ) ) ) + { + SearchFailure_t & tEntry = m_dLog.Add (); + va_list ap; + va_start ( ap, sTemplate ); + tEntry.m_sIndex = sIndex; + tEntry.m_sError.SetSprintfVa ( sTemplate, ap ); + va_end ( ap ); + } + +public: + bool IsEmpty () + { + return m_dLog.GetLength()==0; + } + + void BuildReport ( StrBuf_t & sReport ) + { + if ( IsEmpty() ) + return; + + // collapse same messages + m_dLog.Uniq (); + int iSpanStart = 0; + + for ( int i=1; i<=m_dLog.GetLength(); i++ ) + { + // keep scanning while error text is the same + if ( i!=m_dLog.GetLength() ) + if ( m_dLog[i].m_sError==m_dLog[i-1].m_sError ) + continue; + + // build current span + StrBuf_t sSpan; + if ( iSpanStart ) + sSpan += "; "; + sSpan += "index "; + for ( int j=iSpanStart; j & dChildren ) +{ + ARRAY_FOREACH ( i, dChildren ) + { + int iPID = dChildren[i]; + int iStatus = 0; + if ( iPID>0 && waitpid ( iPID, &iStatus, WNOHANG )==iPID && ( WIFEXITED ( iStatus ) || WIFSIGNALED ( iStatus ) ) ) + iPID = 0; + + if ( iPID<=0 ) + dChildren.RemoveFast ( i-- ); + } +} +#endif + + +void Shutdown () +{ + bool bAttrsSaveOk = true; + // some head-only shutdown procedures + if ( g_bHeadDaemon ) + { + const int iShutWaitPeriod = 3000000; + + if ( g_eWorkers==MPM_THREADS ) + { + // tell flush-rt thread to shutdown, and wait until it does + g_bRtFlushShutdown = true; + sphThreadJoin ( &g_tRtFlushThread ); + + // tell rotation thread to shutdown, and wait until it does + g_bRotateShutdown = true; + sphThreadJoin ( &g_tRotateThread ); + g_tRotateQueueMutex.Done(); + g_tRotateConfigMutex.Done(); + + int64_t tmShutStarted = sphMicroTimer(); + // stop search threads; up to 3 seconds long + while ( g_dThd.GetLength() > 0 && ( sphMicroTimer()-tmShutStarted )0 && ( sphMicroTimer()-tmShutStarted )SaveAttributes() ) + { + sphWarning ( "index %s: attrs save failed: %s", it.GetKey().cstr(), tServed.m_pIndex->GetLastError().cstr() ); + bAttrsSaveOk = false; + } + } + + // unlock indexes and release locks if needed + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + it.Get().m_pIndex->Unlock(); + g_pIndexes->Reset(); + + // clear shut down of rt indexes + binlog + g_tDistLock.Done(); + SafeDelete ( g_pIndexes ); + sphRTDone(); + + SphCrashLogger_c::Done(); + + sphShutdownWordforms (); + +#if USE_PYTHON + cftShutdown(); //clean up +#endif + + } + + ARRAY_FOREACH ( i, g_dListeners ) + if ( g_dListeners[i].m_iSock>=0 ) + sphSockClose ( g_dListeners[i].m_iSock ); + +#if USE_WINDOWS + CloseHandle ( g_hPipe ); +#else + if ( g_bHeadDaemon ) + { + const CSphString sPipeName = GetNamedPipeName ( getpid() ); + const int hFile = ::open ( sPipeName.cstr(), O_WRONLY | O_NONBLOCK ); + if ( hFile!=-1 ) + { + DWORD uStatus = bAttrsSaveOk; + int iDummy; // to avoid gcc unused result warning + iDummy = ::write ( hFile, &uStatus, sizeof(DWORD) ); + ::close ( hFile ); + } + } +#endif + + // remove pid + if ( g_bHeadDaemon && g_sPidFile ) + { + ::close ( g_iPidFD ); + ::unlink ( g_sPidFile ); + } + + if ( g_bHeadDaemon ) + sphInfo ( "shutdown complete" ); + + if ( g_bHeadDaemon ) + sphThreadDone ( g_iLogFile ); +} + +#if !USE_WINDOWS +void sighup ( int ) +{ + g_bGotSighup = 1; +} + + +void sigterm ( int ) +{ + // tricky bit + // we can't call exit() here because malloc()/free() are not re-entrant + // we could call _exit() but let's try to die gracefully on TERM + // and let signal sender wait and send KILL as needed + g_bGotSigterm = 1; + sphInterruptNow(); +} + + +void sigchld ( int ) +{ + g_bGotSigchld = 1; +} + + +void sigusr1 ( int ) +{ + g_bGotSigusr1 = 1; +} +#endif // !USE_WINDOWS + + +struct QueryCopyState_t +{ + BYTE * m_pDst; + BYTE * m_pDstEnd; + const BYTE * m_pSrc; + const BYTE * m_pSrcEnd; +}; + +// crash query handler +static const int g_iQueryLineLen = 80; +static const char g_dEncodeBase64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +bool sphCopyEncodedBase64 ( QueryCopyState_t & tEnc ) +{ + BYTE * pDst = tEnc.m_pDst; + const BYTE * pDstBase = tEnc.m_pDst; + const BYTE * pSrc = tEnc.m_pSrc; + const BYTE * pDstEnd = tEnc.m_pDstEnd-5; + const BYTE * pSrcEnd = tEnc.m_pSrcEnd-3; + + while ( pDst<=pDstEnd && pSrc<=pSrcEnd ) + { + // put line delimiter at max line length + if ( ( ( pDst-pDstBase ) % g_iQueryLineLen )>( ( pDst-pDstBase+4 ) % g_iQueryLineLen ) ) + *pDst++ = '\n'; + + // Convert to big endian + DWORD uSrc = ( pSrc[0] << 16 ) | ( pSrc[1] << 8 ) | ( pSrc[2] ); + pSrc += 3; + + *pDst++ = g_dEncodeBase64 [ ( uSrc & 0x00FC0000 ) >> 18 ]; + *pDst++ = g_dEncodeBase64 [ ( uSrc & 0x0003F000 ) >> 12 ]; + *pDst++ = g_dEncodeBase64 [ ( uSrc & 0x00000FC0 ) >> 6 ]; + *pDst++ = g_dEncodeBase64 [ ( uSrc & 0x0000003F ) ]; + } + + // there is a tail in source data and a room for it at destination buffer + if ( pSrc> 18 ]; + *pDst++ = g_dEncodeBase64 [ ( uSrc & 0x0003F000 ) >> 12 ]; + *pDst++ = '='; + *pDst++ = '='; + } else if ( iLeft==2 ) + { + DWORD uSrc = ( pSrc[0]<<16 ) | ( pSrc[1] << 8 ); + pSrc += 2; + *pDst++ = g_dEncodeBase64 [ ( uSrc & 0x00FC0000 ) >> 18 ]; + *pDst++ = g_dEncodeBase64 [ ( uSrc & 0x0003F000 ) >> 12 ]; + *pDst++ = g_dEncodeBase64 [ ( uSrc & 0x00000FC0 ) >> 6 ]; + *pDst++ = '='; + } + } + + tEnc.m_pDst = pDst; + tEnc.m_pSrc = pSrc; + + return ( tEnc.m_pSrcpNextLine && pDst+1>8 ) & 0xff ), + (BYTE)( tQuery.m_uCMD & 0xff ), + (BYTE)( ( tQuery.m_uVer>>8 ) & 0xff ), + (BYTE)( tQuery.m_uVer & 0xff ), + (BYTE)( ( tQuery.m_iSize>>24 ) & 0xff ), + (BYTE)( ( tQuery.m_iSize>>16 ) & 0xff ), + (BYTE)( ( tQuery.m_iSize>>8 ) & 0xff ), + (BYTE)( tQuery.m_iSize & 0xff ), + *tQuery.m_pQuery + }; + + QueryCopyState_t tHeaderState; + tHeaderState.m_pDst = g_dCrashQueryBuff; + tHeaderState.m_pDstEnd = g_dCrashQueryBuff + sizeof(g_dCrashQueryBuff); + tHeaderState.m_pSrc = dHeader; + tHeaderState.m_pSrcEnd = dHeader + sizeof(dHeader); + pfnCopy ( tHeaderState ); + assert ( tHeaderState.m_pSrc==tHeaderState.m_pSrcEnd ); + tCopyState.m_pDst = tHeaderState.m_pDst; + tCopyState.m_pSrc++; + } else + { + pfnCopy = &sphCopySphinxQL; + } + + while ( pfnCopy ( tCopyState ) ) + { + sphWrite ( g_iLogFile, g_dCrashQueryBuff, tCopyState.m_pDst-g_dCrashQueryBuff ); + tCopyState.m_pDst = g_dCrashQueryBuff; // reset the destination buffer + } + assert ( tCopyState.m_pSrc==tCopyState.m_pSrcEnd ); + + int iLeft = tCopyState.m_pDst-g_dCrashQueryBuff; + if ( iLeft>0 ) + { + sphWrite ( g_iLogFile, g_dCrashQueryBuff, iLeft ); + } + } + + // tail + sphWrite ( g_iLogFile, g_sCrashedBannerTail, sizeof(g_sCrashedBannerTail)-1 ); + + sphSafeInfo ( g_iLogFile, "Sphinx " SPHINX_VERSION ); + +#if USE_WINDOWS + // mini-dump reference + int iMiniDumpLen = snprintf ( (char *)g_dCrashQueryBuff, sizeof(g_dCrashQueryBuff), "%s %s.%p.mdmp\n", g_sMinidumpBanner, g_sMinidump, tQuery.m_pQuery ); + sphWrite ( g_iLogFile, g_dCrashQueryBuff, iMiniDumpLen ); + snprintf ( (char *)g_dCrashQueryBuff, sizeof(g_dCrashQueryBuff), "%s.%p.mdmp", g_sMinidump, tQuery.m_pQuery ); +#endif + + // log trace +#if !USE_WINDOWS + sphBacktrace ( g_iLogFile, g_bSafeTrace ); +#else + sphBacktrace ( pExc, (char *)g_dCrashQueryBuff ); +#endif + + // threads table + if ( g_eWorkers==MPM_THREADS ) + { + // FIXME? should we try to lock threads table somehow? + sphSafeInfo ( g_iLogFile, "--- %d active threads ---", g_dThd.GetLength() ); + ARRAY_FOREACH ( iThd, g_dThd ) + { + ThdDesc_t * pThd = g_dThd[iThd]; + sphSafeInfo ( g_iLogFile, "thd %d, proto %s, state %s, command %s", + iThd, + g_dProtoNames[pThd->m_eProto], + g_dThdStates[pThd->m_eThdState], + pThd->m_sCommand ? pThd->m_sCommand : "-" ); + } + } + + // memory info +#if SPH_ALLOCS_PROFILER + sphWrite ( g_iLogFile, g_sMemoryStatBanner, sizeof ( g_sMemoryStatBanner )-1 ); + sphMemStatDump ( g_iLogFile ); +#endif + + sphSafeInfo ( g_iLogFile, "------- CRASH DUMP END -------" ); + + CRASH_EXIT; +} + +void SphCrashLogger_c::SetLastQuery ( const BYTE * pQuery, int iSize, bool bMySQL, int uCmd, int uVer ) +{ + SphCrashLogger_c * pLastQuery = &m_tLastQuery; + if ( g_eWorkers==MPM_THREADS ) + pLastQuery = (SphCrashLogger_c *)sphThreadGet ( m_tLastQueryTLS ); + + pLastQuery->m_pQuery = pQuery; + pLastQuery->m_iSize = iSize; + pLastQuery->m_uCMD = (WORD)uCmd; + pLastQuery->m_uVer = (WORD)uVer; + pLastQuery->m_bMySQL = bMySQL; +} + +void SphCrashLogger_c::SetupTimePID () +{ + char sTimeBuf[SPH_TIME_PID_MAX_SIZE]; + sphFormatCurrentTime ( sTimeBuf, sizeof(sTimeBuf) ); + + g_iCrashInfoLen = snprintf ( g_sCrashInfo, SPH_TIME_PID_MAX_SIZE-1, "------- FATAL: CRASH DUMP -------\n[%s] [%5d]\n", sTimeBuf, (int)getpid() ); +} + +void SphCrashLogger_c::SetupTLS () +{ + if ( g_eWorkers!=MPM_THREADS ) + return; + + Verify ( sphThreadSet ( m_tLastQueryTLS, this ) ); +} + + +void SetSignalHandlers () +{ + SphCrashLogger_c::Init(); + +#if !USE_WINDOWS + struct sigaction sa; + sigfillset ( &sa.sa_mask ); + sa.sa_flags = SA_NOCLDSTOP; + + bool bSignalsSet = false; + for ( ;; ) + { + sa.sa_handler = sigterm; if ( sigaction ( SIGTERM, &sa, NULL )!=0 ) break; + sa.sa_handler = sigterm; if ( sigaction ( SIGINT, &sa, NULL )!=0 ) break; + sa.sa_handler = sighup; if ( sigaction ( SIGHUP, &sa, NULL )!=0 ) break; + sa.sa_handler = sigusr1; if ( sigaction ( SIGUSR1, &sa, NULL )!=0 ) break; + sa.sa_handler = sigchld; if ( sigaction ( SIGCHLD, &sa, NULL )!=0 ) break; + sa.sa_handler = SIG_IGN; if ( sigaction ( SIGPIPE, &sa, NULL )!=0 ) break; + + sa.sa_flags |= SA_RESETHAND; + sa.sa_handler = SphCrashLogger_c::HandleCrash; if ( sigaction ( SIGSEGV, &sa, NULL )!=0 ) break; + sa.sa_handler = SphCrashLogger_c::HandleCrash; if ( sigaction ( SIGBUS, &sa, NULL )!=0 ) break; + sa.sa_handler = SphCrashLogger_c::HandleCrash; if ( sigaction ( SIGABRT, &sa, NULL )!=0 ) break; + sa.sa_handler = SphCrashLogger_c::HandleCrash; if ( sigaction ( SIGILL, &sa, NULL )!=0 ) break; + sa.sa_handler = SphCrashLogger_c::HandleCrash; if ( sigaction ( SIGFPE, &sa, NULL )!=0 ) break; + + bSignalsSet = true; + break; + } + if ( !bSignalsSet ) + sphFatal ( "sigaction(): %s", strerror(errno) ); +#else + snprintf ( g_sMinidump, SPH_TIME_PID_MAX_SIZE-1, "%s.%d", g_sPidFile ? g_sPidFile : "", (int)getpid() ); + SetUnhandledExceptionFilter ( SphCrashLogger_c::HandleCrash ); +#endif +} + + +///////////////////////////////////////////////////////////////////////////// +// NETWORK STUFF +///////////////////////////////////////////////////////////////////////////// + +const int WIN32_PIPE_BUFSIZE = 32; + + +#if USE_WINDOWS + +/// on Windows, the wrapper just prevents the warnings +void sphFDSet ( int fd, fd_set * fdset ) +{ + #pragma warning(disable:4127) // conditional expr is const + #pragma warning(disable:4389) // signed/unsigned mismatch + + FD_SET ( fd, fdset ); + + #pragma warning(default:4127) // conditional expr is const + #pragma warning(default:4389) // signed/unsigned mismatch +} + +#else // !USE_WINDOWS + +#define SPH_FDSET_OVERFLOW(_fd) ( (_fd)<0 || (_fd)>=(int)FD_SETSIZE ) + +/// on UNIX, we also check that the descript won't corrupt the stack +void sphFDSet ( int fd, fd_set * set ) +{ + if ( SPH_FDSET_OVERFLOW(fd) ) + sphFatal ( "sphFDSet() failed fd=%d, FD_SETSIZE=%d", fd, FD_SETSIZE ); + else + FD_SET ( fd, set ); +} + +#endif // USE_WINDOWS + + +const char * sphSockError ( int iErr=0 ) +{ + #if USE_WINDOWS + if ( iErr==0 ) + iErr = WSAGetLastError (); + + static char sBuf [ 256 ]; + _snprintf ( sBuf, sizeof(sBuf), "WSA error %d", iErr ); + return sBuf; + #else + return strerror ( errno ); + #endif +} + + +int sphSockGetErrno () +{ + #if USE_WINDOWS + return WSAGetLastError(); + #else + return errno; + #endif +} + + +void sphSockSetErrno ( int iErr ) +{ + #if USE_WINDOWS + WSASetLastError ( iErr ); + #else + errno = iErr; + #endif +} + + +int sphSockPeekErrno () +{ + int iRes = sphSockGetErrno(); + sphSockSetErrno ( iRes ); + return iRes; +} + + +/// formats IP address given in network byte order into sBuffer +/// returns the buffer +char * sphFormatIP ( char * sBuffer, int iBufferSize, DWORD uAddress ) +{ + const BYTE *a = (const BYTE *)&uAddress; + snprintf ( sBuffer, iBufferSize, "%u.%u.%u.%u", a[0], a[1], a[2], a[3] ); + return sBuffer; +} + + +static const bool GETADDR_STRICT = true; ///< strict check, will die with sphFatal() on failure + +DWORD sphGetAddress ( const char * sHost, bool bFatal=false ) +{ + struct hostent * pHost = gethostbyname ( sHost ); + + if ( pHost==NULL || pHost->h_addrtype!=AF_INET ) + { + if ( bFatal ) + sphFatal ( "no AF_INET address found for: %s", sHost ); + return 0; + } + + struct in_addr ** ppAddrs = (struct in_addr **)pHost->h_addr_list; + assert ( ppAddrs[0] ); + + assert ( sizeof(DWORD)==pHost->h_length ); + DWORD uAddr; + memcpy ( &uAddr, ppAddrs[0], sizeof(DWORD) ); + + if ( ppAddrs[1] ) + { + char sBuf [ SPH_ADDRESS_SIZE ]; + sphWarning ( "multiple addresses found for '%s', using the first one (ip=%s)", + sHost, sphFormatIP ( sBuf, sizeof(sBuf), uAddr ) ); + } + + return uAddr; +} + + +#if !USE_WINDOWS +int sphCreateUnixSocket ( const char * sPath ) +{ + static struct sockaddr_un uaddr; + size_t len = strlen ( sPath ); + + if ( len + 1 > sizeof( uaddr.sun_path ) ) + sphFatal ( "UNIX socket path is too long (len=%d)", (int)len ); + + sphInfo ( "listening on UNIX socket %s", sPath ); + + memset ( &uaddr, 0, sizeof(uaddr) ); + uaddr.sun_family = AF_UNIX; + memcpy ( uaddr.sun_path, sPath, len + 1 ); + + int iSock = socket ( AF_UNIX, SOCK_STREAM, 0 ); + if ( iSock==-1 ) + sphFatal ( "failed to create UNIX socket: %s", sphSockError() ); + + if ( unlink ( sPath )==-1 ) + { + if ( errno!=ENOENT ) + sphFatal ( "unlink() on UNIX socket file failed: %s", sphSockError() ); + } + + int iMask = umask ( 0 ); + if ( bind ( iSock, (struct sockaddr *)&uaddr, sizeof(uaddr) )!=0 ) + sphFatal ( "bind() on UNIX socket failed: %s", sphSockError() ); + umask ( iMask ); + + return iSock; +} +#endif // !USE_WINDOWS + + +int sphCreateInetSocket ( DWORD uAddr, int iPort ) +{ + char sAddress[SPH_ADDRESS_SIZE]; + sphFormatIP ( sAddress, SPH_ADDRESS_SIZE, uAddr ); + + if ( uAddr==htonl ( INADDR_ANY ) ) + sphInfo ( "listening on all interfaces, port=%d", iPort ); + else + sphInfo ( "listening on %s:%d", sAddress, iPort ); + + static struct sockaddr_in iaddr; + memset ( &iaddr, 0, sizeof(iaddr) ); + iaddr.sin_family = AF_INET; + iaddr.sin_addr.s_addr = uAddr; + iaddr.sin_port = htons ( (short)iPort ); + + int iSock = socket ( AF_INET, SOCK_STREAM, 0 ); + if ( iSock==-1 ) + sphFatal ( "failed to create TCP socket: %s", sphSockError() ); + + int iOn = 1; + if ( setsockopt ( iSock, SOL_SOCKET, SO_REUSEADDR, (char*)&iOn, sizeof(iOn) ) ) + sphFatal ( "setsockopt() failed: %s", sphSockError() ); + + int iTries = 12; + int iRes; + do + { + iRes = bind ( iSock, (struct sockaddr *)&iaddr, sizeof(iaddr) ); + if ( iRes==0 ) + break; + + sphInfo ( "bind() failed on %s, retrying...", sAddress ); + sphSleepMsec ( 3000 ); + } while ( --iTries>0 ); + if ( iRes ) + sphFatal ( "bind() failed on %s: %s", sAddress, sphSockError() ); + + return iSock; +} + + +inline bool IsPortInRange ( int iPort ) +{ + return ( iPort>0 ) && ( iPort<=0xFFFF ); +} + + +void CheckPort ( int iPort ) +{ + if ( !IsPortInRange(iPort) ) + sphFatal ( "port %d is out of range", iPort ); +} + + +ProtocolType_e ProtoByName ( const CSphString & sProto ) +{ + if ( sProto=="sphinx" ) return PROTO_SPHINX; + else if ( sProto=="mysql41" ) return PROTO_MYSQL41; + + sphFatal ( "unknown listen protocol type '%s'", sProto.cstr() ? sProto.cstr() : "(NULL)" ); + + // funny magic + // MSVC -O2 whines about unreachable code + // everyone else whines about missing return value +#if !(USE_WINDOWS && defined(NDEBUG)) + return PROTO_SPHINX; +#endif +} + + +struct ListenerDesc_t +{ + ProtocolType_e m_eProto; + CSphString m_sUnix; + DWORD m_uIP; + int m_iPort; +}; + + +ListenerDesc_t ParseListener ( const char * sSpec ) +{ + ListenerDesc_t tRes; + tRes.m_eProto = PROTO_SPHINX; + tRes.m_sUnix = ""; + tRes.m_uIP = htonl ( INADDR_ANY ); + tRes.m_iPort = SPHINXAPI_PORT; + + // split by colon + int iParts = 0; + CSphString sParts[3]; + + const char * sPart = sSpec; + for ( const char * p = sSpec; ; p++ ) + if ( *p=='\0' || *p==':' ) + { + if ( iParts==3 ) + sphFatal ( "invalid listen format (too many fields)" ); + + sParts[iParts++].SetBinary ( sPart, p-sPart ); + if ( !*p ) + break; // bail out on zero + + sPart = p+1; + } + assert ( iParts>=1 && iParts<=3 ); + + // handle UNIX socket case + // might be either name on itself (1 part), or name+protocol (2 parts) + sPart = sParts[0].cstr(); + if ( sPart[0]=='/' ) + { + if ( iParts>2 ) + sphFatal ( "invalid listen format (too many fields)" ); + + if ( iParts==2 ) + tRes.m_eProto = ProtoByName ( sParts[1] ); + +#if USE_WINDOWS + sphFatal ( "UNIX sockets are not supported on Windows" ); +#else + tRes.m_sUnix = sPart; + return tRes; +#endif + } + + // check if it all starts with a valid port number + sPart = sParts[0].cstr(); + int iLen = strlen(sPart); + + bool bAllDigits = true; + for ( int i=0; i0 ); + + int64_t tmMaxTimer = sphMicroTimer() + I64C(1000000)*Max ( 1, iReadTimeout ); // in microseconds + int iLeftBytes = iLen; // bytes to read left + + char * pBuf = (char*) buf; + int iRes = -1, iErr = 0; + + while ( iLeftBytes>0 ) + { + int64_t tmMicroLeft = tmMaxTimer - sphMicroTimer(); + if ( tmMicroLeft<=0 ) + break; // timed out + + fd_set fdRead; + FD_ZERO ( &fdRead ); + sphFDSet ( iSock, &fdRead ); + + fd_set fdExcept; + FD_ZERO ( &fdExcept ); + sphFDSet ( iSock, &fdExcept ); + +#if USE_WINDOWS + // Windows EINTR emulation + // Ctrl-C will not interrupt select on Windows, so let's handle that manually + // forcibly limit select() to 100 ms, and check flag afterwards + if ( bIntr ) + tmMicroLeft = Min ( tmMicroLeft, 100000 ); +#endif + + struct timeval tv; + tv.tv_sec = (int)( tmMicroLeft / 1000000 ); + tv.tv_usec = (int)( tmMicroLeft % 1000000 ); + + iRes = ::select ( iSock+1, &fdRead, NULL, &fdExcept, &tv ); + + // if there was EINTR, retry + // if any other error, bail + if ( iRes==-1 ) + { + // only let SIGTERM (of all them) to interrupt, and only if explicitly allowed + iErr = sphSockGetErrno(); + if ( iErr==EINTR && !( g_bGotSigterm && bIntr )) + continue; + + if ( iErr==EINTR ) + sphLogDebug ( "sphSockRead: select got SIGTERM, exit -1" ); + + sphSockSetErrno ( iErr ); + return -1; + } + + // if there was a timeout, report it as an error + if ( iRes==0 ) + { +#if USE_WINDOWS + // Windows EINTR emulation + if ( bIntr ) + { + // got that SIGTERM + if ( g_bGotSigterm ) + { + sphLogDebug ( "sphSockRead: got SIGTERM emulation on Windows, exit -1" ); + sphSockSetErrno ( EINTR ); + return -1; + } + + // timeout might not be fully over just yet, so re-loop + continue; + } +#endif + + sphSockSetErrno ( ETIMEDOUT ); + return -1; + } + + // try to receive next chunk + iRes = sphSockRecv ( iSock, pBuf, iLeftBytes ); + + // if there was eof, we're done + if ( iRes==0 ) + { + sphSockSetErrno ( ECONNRESET ); + return -1; + } + + // if there was EINTR, retry + // if any other error, bail + if ( iRes==-1 ) + { + // only let SIGTERM (of all them) to interrupt, and only if explicitly allowed + iErr = sphSockGetErrno(); + if ( iErr==EINTR && !( g_bGotSigterm && bIntr )) + continue; + + if ( iErr==EINTR ) + sphLogDebug ( "sphSockRead: select got SIGTERM, exit -1" ); + + sphSockSetErrno ( iErr ); + return -1; + } + + // update + pBuf += iRes; + iLeftBytes -= iRes; + + // avoid partial buffer loss in case of signal during the 2nd (!) read + bIntr = false; + } + + // if there was a timeout, report it as an error + if ( iLeftBytes!=0 ) + { + sphSockSetErrno ( ETIMEDOUT ); + return -1; + } + + return iLen; +} + +///////////////////////////////////////////////////////////////////////////// +// NETWORK BUFFERS +///////////////////////////////////////////////////////////////////////////// + +/// fixed-memory response buffer +/// tracks usage, and flushes to network when necessary +class NetOutputBuffer_c +{ +public: + explicit NetOutputBuffer_c ( int iSock ); + + bool SendInt ( int iValue ) { return SendT ( htonl ( iValue ) ); } + bool SendDword ( DWORD iValue ) { return SendT ( htonl ( iValue ) ); } + bool SendLSBDword ( DWORD v ) { SendByte ( (BYTE)( v&0xff ) ); SendByte ( (BYTE)( (v>>8)&0xff ) ); SendByte ( (BYTE)( (v>>16)&0xff ) ); return SendByte ( (BYTE)( (v>>24)&0xff) ); } + bool SendWord ( WORD iValue ) { return SendT ( htons ( iValue ) ); } + bool SendUint64 ( uint64_t iValue ) { SendT ( htonl ( (DWORD)(iValue>>32) ) ); return SendT ( htonl ( (DWORD)(iValue&0xffffffffUL) ) ); } + bool SendFloat ( float fValue ) { return SendT ( htonl ( sphF2DW ( fValue ) ) ); } + bool SendByte ( BYTE uValue ) { return SendT ( uValue ); } + +#if USE_64BIT + bool SendDocid ( SphDocID_t iValue ) { return SendUint64 ( iValue ); } +#else + bool SendDocid ( SphDocID_t iValue ) { return SendDword ( iValue ); } +#endif + + bool SendString ( const char * sStr ); + bool SendMysqlString ( const char * sStr ); + + bool Flush (); + bool GetError () { return m_bError; } + int GetSentCount () { return m_iSent; } + +protected: + BYTE m_dBuffer[8192]; ///< my buffer + BYTE * m_pBuffer; ///< my current buffer position + int m_iSock; ///< my socket + bool m_bError; ///< if there were any write errors + int m_iSent; + +protected: + bool SetError ( bool bValue ); ///< set error flag + bool FlushIf ( int iToAdd ); ///< flush if there's not enough free space to add iToAdd bytes + +public: + bool SendBytes ( const void * pBuf, int iLen ); ///< (was) protected to avoid network-vs-host order bugs + template < typename T > bool SendT ( T tValue ); ///< (was) protected to avoid network-vs-host order bugs +}; + + +/// generic request buffer +class InputBuffer_c +{ +public: + InputBuffer_c ( const BYTE * pBuf, int iLen ); + virtual ~InputBuffer_c () {} + + int GetInt () { return ntohl ( GetT () ); } + WORD GetWord () { return ntohs ( GetT () ); } + DWORD GetDword () { return ntohl ( GetT () ); } + DWORD GetLSBDword () { return GetByte() + ( GetByte()<<8 ) + ( GetByte()<<16 ) + ( GetByte()<<24 ); } + uint64_t GetUint64() { uint64_t uRes = GetDword(); return (uRes<<32)+GetDword(); } + BYTE GetByte () { return GetT (); } + float GetFloat () { return sphDW2F ( ntohl ( GetT () ) ); } + CSphString GetString (); + CSphString GetRawString ( int iLen ); + int GetDwords ( DWORD ** pBuffer, int iMax, const char * sErrorTemplate ); + bool GetError () { return m_bError; } + + template < typename T > bool GetDwords ( CSphVector & dBuffer, int iMax, const char * sErrorTemplate ); + template < typename T > bool GetQwords ( CSphVector & dBuffer, int iMax, const char * sErrorTemplate ); + + virtual void SendErrorReply ( const char *, ... ) __attribute__ ( ( format ( printf, 2, 3 ) ) ) = 0; + +protected: + const BYTE * m_pBuf; + const BYTE * m_pCur; + bool m_bError; + int m_iLen; + +protected: + void SetError ( bool bError ) { m_bError = bError; } + bool GetBytes ( void * pBuf, int iLen ); + template < typename T > T GetT (); +}; + + +/// simple memory request buffer +class MemInputBuffer_c : public InputBuffer_c +{ +public: + MemInputBuffer_c ( const BYTE * pBuf, int iLen ) : InputBuffer_c ( pBuf, iLen ) {} + virtual void SendErrorReply ( const char *, ... ) __attribute__ ( ( format ( printf, 2, 3 ) ) ) {} +}; + + +/// simple network request buffer +class NetInputBuffer_c : public InputBuffer_c +{ +public: + explicit NetInputBuffer_c ( int iSock ); + virtual ~NetInputBuffer_c (); + + bool ReadFrom ( int iLen, int iTimeout, bool bIntr=false, bool bAppend=false ); + bool ReadFrom ( int iLen ) { return ReadFrom ( iLen, g_iReadTimeout ); } + + virtual void SendErrorReply ( const char *, ... ) __attribute__ ( ( format ( printf, 2, 3 ) ) ); + + const BYTE * GetBufferPtr () const { return m_pBuf; } + bool IsIntr () const { return m_bIntr; } + +protected: + static const int NET_MINIBUFFER_SIZE = 4096; + + int m_iSock; + bool m_bIntr; + + BYTE m_dMinibufer[NET_MINIBUFFER_SIZE]; + int m_iMaxibuffer; + BYTE * m_pMaxibuffer; +}; + +///////////////////////////////////////////////////////////////////////////// + +NetOutputBuffer_c::NetOutputBuffer_c ( int iSock ) + : m_pBuffer ( m_dBuffer ) + , m_iSock ( iSock ) + , m_bError ( false ) + , m_iSent ( 0 ) +{ + assert ( m_iSock>0 ); +} + + +template < typename T > bool NetOutputBuffer_c::SendT ( T tValue ) +{ + if ( m_bError ) + return false; + + FlushIf ( sizeof(T) ); + + sphUnalignedWrite ( m_pBuffer, tValue ); + m_pBuffer += sizeof(T); + assert ( m_pBuffer>8 ); + return (void*)pOutput; + } + + if ( iValue<=0xFFFFFF ) + { + *pOutput++ = '\xFD'; + *pOutput++ = (char)iValue; + *pOutput++ = (char)( iValue>>8 ); + *pOutput++ = (char)( iValue>>16 ); + return (void *) pOutput; + } + + *pOutput++ = '\xFE'; + *pOutput++ = (char)iValue; + *pOutput++ = (char)( iValue>>8 ); + *pOutput++ = (char)( iValue>>16 ); + *pOutput++ = (char)( iValue>>24 ); + *pOutput++ = 0; + *pOutput++ = 0; + *pOutput++ = 0; + *pOutput++ = 0; + return (void*)pOutput; +} + + +bool NetOutputBuffer_c::SendMysqlString ( const char * sStr ) +{ + if ( m_bError ) + return false; + + int iLen = strlen(sStr); + + BYTE dBuf[12]; + BYTE * pBuf = (BYTE*) MysqlPack ( dBuf, iLen ); + SendBytes ( dBuf, (int)( pBuf-dBuf ) ); + return SendBytes ( sStr, iLen ); +} + + +bool NetOutputBuffer_c::SendBytes ( const void * pBuf, int iLen ) +{ + BYTE * pMy = (BYTE*)pBuf; + while ( iLen>0 && !m_bError ) + { + int iLeft = sizeof(m_dBuffer) - ( m_pBuffer - m_dBuffer ); + if ( iLen<=iLeft ) + { + memcpy ( m_pBuffer, pMy, iLen ); + m_pBuffer += iLen; + break; + } + + memcpy ( m_pBuffer, pMy, iLeft ); + m_pBuffer += iLeft; + Flush (); + + pMy += iLeft; + iLen -= iLeft; + } + return !m_bError; +} + + +bool NetOutputBuffer_c::Flush () +{ + if ( m_bError ) + return false; + + int iLen = m_pBuffer-m_dBuffer; + if ( iLen==0 ) + return true; + + if ( g_bGotSigterm ) + sphLogDebug ( "SIGTERM in NetOutputBuffer::Flush" ); + + assert ( iLen>0 ); + assert ( iLen<=(int)sizeof(m_dBuffer) ); + char * pBuffer = (char *)&m_dBuffer[0]; + + const int64_t tmMaxTimer = sphMicroTimer() + g_iWriteTimeout*1000000; // in microseconds + while ( !m_bError ) + { + int iRes = sphSockSend ( m_iSock, pBuffer, iLen ); + if ( iRes < 0 ) + { + int iErrno = sphSockGetErrno(); + if ( iErrno==EINTR ) // interrupted before any data was sent; just loop + continue; + if ( iErrno!=EAGAIN ) + { + sphWarning ( "send() failed: %d: %s", iErrno, sphSockError(iErrno) ); + m_bError = true; + break; + } + } else + { + m_iSent += iRes; + pBuffer += iRes; + iLen -= iRes; + if ( iLen==0 ) + break; + } + + int64_t tmMicroLeft = tmMaxTimer - sphMicroTimer(); + if ( tmMicroLeft>0 ) + { + fd_set fdWrite; + FD_ZERO ( &fdWrite ); + sphFDSet ( m_iSock, &fdWrite ); + + struct timeval tvTimeout; + tvTimeout.tv_sec = (int)( tmMicroLeft / 1000000 ); + tvTimeout.tv_usec = (int)( tmMicroLeft % 1000000 ); + + iRes = select ( m_iSock+1, NULL, &fdWrite, NULL, &tvTimeout ); + } else + iRes = 0; + + switch ( iRes ) + { + case 1: // ready for writing + break; + + case 0: // timed out + { + sphWarning ( "timed out while trying to flush network buffers" ); + m_bError = true; + break; + } + + case -1: // error + { + int iErrno = sphSockGetErrno(); + if ( iErrno==EINTR ) + break; + sphWarning ( "select() failed: %d: %s", iErrno, sphSockError(iErrno) ); + m_bError = true; + break; + } + } + } + + m_pBuffer = m_dBuffer; + return !m_bError; +} + + +bool NetOutputBuffer_c::FlushIf ( int iToAdd ) +{ + if ( ( m_pBuffer+iToAdd )>=( m_dBuffer+sizeof(m_dBuffer) ) ) + return Flush (); + + return !m_bError; +} + +///////////////////////////////////////////////////////////////////////////// + +InputBuffer_c::InputBuffer_c ( const BYTE * pBuf, int iLen ) + : m_pBuf ( pBuf ) + , m_pCur ( pBuf ) + , m_bError ( !pBuf || iLen<0 ) + , m_iLen ( iLen ) +{} + + +template < typename T > T InputBuffer_c::GetT () +{ + if ( m_bError || ( m_pCur+sizeof(T) > m_pBuf+m_iLen ) ) + { + SetError ( true ); + return 0; + } + + T iRes = sphUnalignedRead ( *(T*)m_pCur ); + m_pCur += sizeof(T); + return iRes; +} + + +CSphString InputBuffer_c::GetString () +{ + CSphString sRes; + + int iLen = GetInt (); + if ( m_bError || iLen<0 || iLen>g_iMaxPacketSize || ( m_pCur+iLen > m_pBuf+m_iLen ) ) + { + SetError ( true ); + return sRes; + } + + sRes.SetBinary ( (char*)m_pCur, iLen ); + m_pCur += iLen; + return sRes; +} + + +CSphString InputBuffer_c::GetRawString ( int iLen ) +{ + CSphString sRes; + + if ( m_bError || iLen<0 || iLen>g_iMaxPacketSize || ( m_pCur+iLen > m_pBuf+m_iLen ) ) + { + SetError ( true ); + return sRes; + } + + sRes.SetBinary ( (char*)m_pCur, iLen ); + m_pCur += iLen; + return sRes; +} + + +bool InputBuffer_c::GetBytes ( void * pBuf, int iLen ) +{ + assert ( pBuf ); + assert ( iLen>0 && iLen<=g_iMaxPacketSize ); + + if ( m_bError || ( m_pCur+iLen > m_pBuf+m_iLen ) ) + { + SetError ( true ); + return false; + } + + memcpy ( pBuf, m_pCur, iLen ); + m_pCur += iLen; + return true; +} + + +int InputBuffer_c::GetDwords ( DWORD ** ppBuffer, int iMax, const char * sErrorTemplate ) +{ + assert ( ppBuffer ); + assert ( !(*ppBuffer) ); + + int iCount = GetInt (); + if ( iCount<0 || iCount>iMax ) + { + SendErrorReply ( sErrorTemplate, iCount, iMax ); + SetError ( true ); + return -1; + } + if ( iCount ) + { + assert ( !(*ppBuffer) ); // potential leak + (*ppBuffer) = new DWORD [ iCount ]; + if ( !GetBytes ( (*ppBuffer), sizeof(DWORD)*iCount ) ) + { + SafeDeleteArray ( (*ppBuffer) ); + return -1; + } + for ( int i=0; i bool InputBuffer_c::GetDwords ( CSphVector & dBuffer, int iMax, const char * sErrorTemplate ) +{ + int iCount = GetInt (); + if ( iCount<0 || iCount>iMax ) + { + SendErrorReply ( sErrorTemplate, iCount, iMax ); + SetError ( true ); + return false; + } + + dBuffer.Resize ( iCount ); + ARRAY_FOREACH ( i, dBuffer ) + dBuffer[i] = GetDword (); + + if ( m_bError ) + dBuffer.Reset (); + + return !m_bError; +} + + +template < typename T > bool InputBuffer_c::GetQwords ( CSphVector & dBuffer, int iMax, const char * sErrorTemplate ) +{ + int iCount = GetInt (); + if ( iCount<0 || iCount>iMax ) + { + SendErrorReply ( sErrorTemplate, iCount, iMax ); + SetError ( true ); + return false; + } + + dBuffer.Resize ( iCount ); + ARRAY_FOREACH ( i, dBuffer ) + dBuffer[i] = GetUint64 (); + + if ( m_bError ) + dBuffer.Reset (); + + return !m_bError; +} +///////////////////////////////////////////////////////////////////////////// + +NetInputBuffer_c::NetInputBuffer_c ( int iSock ) + : InputBuffer_c ( m_dMinibufer, sizeof(m_dMinibufer) ) + , m_iSock ( iSock ) + , m_bIntr ( false ) + , m_iMaxibuffer ( 0 ) + , m_pMaxibuffer ( NULL ) +{} + + +NetInputBuffer_c::~NetInputBuffer_c () +{ + SafeDeleteArray ( m_pMaxibuffer ); +} + + +bool NetInputBuffer_c::ReadFrom ( int iLen, int iTimeout, bool bIntr, bool bAppend ) +{ + assert (!( bAppend && m_pCur!=m_pBuf && m_pBuf!=m_pMaxibuffer )); // only allow appends to untouched maxi-buffers + int iCur = bAppend ? m_iLen : 0; + + m_bIntr = false; + if ( iLen<=0 || iLen>g_iMaxPacketSize || m_iSock<0 ) + return false; + + BYTE * pBuf = m_dMinibufer + iCur; + if ( ( iCur+iLen )>NET_MINIBUFFER_SIZE ) + { + if ( ( iCur+iLen )>m_iMaxibuffer ) + { + if ( iCur ) + { + BYTE * pNew = new BYTE [ iCur+iLen ]; + memcpy ( pNew, m_pCur, iCur ); + SafeDeleteArray ( m_pMaxibuffer ); + m_pMaxibuffer = pNew; + m_iMaxibuffer = iCur+iLen; + } else + { + SafeDeleteArray ( m_pMaxibuffer ); + m_pMaxibuffer = new BYTE [ iLen ]; + m_iMaxibuffer = iLen; + } + } + pBuf = m_pMaxibuffer; + } + + m_pCur = m_pBuf = pBuf; + int iGot = sphSockRead ( m_iSock, pBuf + iCur, iLen, iTimeout, bIntr ); + if ( g_bGotSigterm ) + { + sphLogDebug ( "NetInputBuffer_c::ReadFrom: got SIGTERM, return false" ); + m_bError = true; + m_bIntr = true; + return false; + } + + m_bError = ( iGot!=iLen ); + m_bIntr = m_bError && ( sphSockPeekErrno()==EINTR ); + m_iLen = m_bError ? 0 : iCur+iLen; + return !m_bError; +} + + +void NetInputBuffer_c::SendErrorReply ( const char * sTemplate, ... ) +{ + char dBuf [ 2048 ]; + + const int iHeaderLen = 12; + const int iMaxStrLen = sizeof(dBuf) - iHeaderLen - 1; + + // fill header + WORD * p0 = (WORD*)&dBuf[0]; + p0[0] = htons ( SEARCHD_ERROR ); // error code + p0[1] = 0; // version doesn't matter + + // fill error string + char * sBuf = dBuf + iHeaderLen; + + va_list ap; + va_start ( ap, sTemplate ); + vsnprintf ( sBuf, iMaxStrLen, sTemplate, ap ); + va_end ( ap ); + + sBuf[iMaxStrLen] = '\0'; + int iStrLen = strlen(sBuf); + + // fixup lengths + DWORD * p4 = (DWORD*)&dBuf[4]; + p4[0] = htonl ( 4+iStrLen ); + p4[1] = htonl ( iStrLen ); + + // send! + sphSockSend ( m_iSock, dBuf, iHeaderLen+iStrLen ); + + // --console logging + if ( g_bOptNoDetach && g_eLogFormat!=LOG_FORMAT_SPHINXQL ) + sphInfo ( "query error: %s", sBuf ); +} + +// fix MSVC 2005 fuckup +#if USE_WINDOWS +#pragma conform(forScope,on) +#endif + +///////////////////////////////////////////////////////////////////////////// +// DISTRIBUTED QUERIES +///////////////////////////////////////////////////////////////////////////// + +/// remote agent descriptor (stored in a global hash) +struct AgentDesc_t +{ + CSphString m_sHost; ///< remote searchd host + int m_iPort; ///< remote searchd port, 0 if local + CSphString m_sPath; ///< local searchd UNIX socket path + CSphString m_sIndexes; ///< remote index names to query + bool m_bBlackhole; ///< blackhole agent flag + int m_iFamily; ///< TCP or UNIX socket + DWORD m_uAddr; ///< IP address + int m_iStatsIndex; ///< index into global searchd stats array + +public: + AgentDesc_t () + : m_iPort ( -1 ) + , m_bBlackhole ( false ) + , m_iFamily ( AF_INET ) + , m_uAddr ( 0 ) + , m_iStatsIndex ( -1 ) + {} +}; + +/// remote agent state +enum AgentState_e +{ + AGENT_UNUSED, ///< agent is unused for this request + AGENT_CONNECT, ///< connecting to agent + AGENT_HELLO, ///< waiting for "VER x" hello + AGENT_QUERY, ///< query sent, waiting for reply + AGENT_PREREPLY, ///< query sent, activity detected, need to read reply + AGENT_REPLY, ///< reading reply + AGENT_RETRY ///< should retry +}; + +/// remote agent connection (local per-query state) +struct AgentConn_t : public AgentDesc_t +{ + int m_iSock; ///< socket number, -1 if not connected + AgentState_e m_eState; ///< current state + + bool m_bSuccess; ///< whether last request was succesful (ie. there are available results) + CSphString m_sFailure; ///< failure message + + int m_iReplyStatus; ///< reply status code + int m_iReplySize; ///< how many reply bytes are there + int m_iReplyRead; ///< how many reply bytes are alredy received + BYTE * m_pReplyBuf; ///< reply buffer + + CSphVector m_dResults; ///< multi-query results + + int64_t m_iWall; ///< wall time spent vs this agent + +public: + AgentConn_t () + : m_iSock ( -1 ) + , m_eState ( AGENT_UNUSED ) + , m_bSuccess ( false ) + , m_iReplyStatus ( -1 ) + , m_iReplySize ( 0 ) + , m_iReplyRead ( 0 ) + , m_pReplyBuf ( NULL ) + , m_iWall ( 0 ) + {} + + ~AgentConn_t () + { + Close (); + } + + void Close () + { + SafeDeleteArray ( m_pReplyBuf ); + if ( m_iSock>0 ) + { + sphSockClose ( m_iSock ); + m_iSock = -1; + if ( m_eState!=AGENT_RETRY ) + m_eState = AGENT_UNUSED; + } + m_iWall += sphMicroTimer (); + } + + CSphString GetName() const + { + CSphString sName; + switch ( m_iFamily ) + { + case AF_INET: sName.SetSprintf ( "%s:%u", m_sHost.cstr(), m_iPort ); break; + case AF_UNIX: sName = m_sPath; break; + } + return sName; + } + + AgentConn_t & operator = ( const AgentDesc_t & rhs ) + { + m_sHost = rhs.m_sHost; + m_iPort = rhs.m_iPort; + m_sPath = rhs.m_sPath; + m_sIndexes = rhs.m_sIndexes; + m_bBlackhole = rhs.m_bBlackhole; + m_iFamily = rhs.m_iFamily; + m_uAddr = rhs.m_uAddr; + m_iStatsIndex = rhs.m_iStatsIndex; + return *this; + } +}; + +/// distributed index +struct DistributedIndex_t +{ + CSphVector m_dAgents; ///< remote agents + CSphVector m_dLocal; ///< local indexes + int m_iAgentConnectTimeout; ///< in msec + int m_iAgentQueryTimeout; ///< in msec + bool m_bToDelete; ///< should be deleted + +public: + DistributedIndex_t () + : m_iAgentConnectTimeout ( 1000 ) + , m_iAgentQueryTimeout ( 3000 ) + , m_bToDelete ( false ) + {} +}; + +/// global distributed index definitions hash +static SmallStringHash_T < DistributedIndex_t > g_hDistIndexes; + +///////////////////////////////////////////////////////////////////////////// + +struct IRequestBuilder_t : public ISphNoncopyable +{ + virtual ~IRequestBuilder_t () {} // to avoid gcc4 warns + virtual void BuildRequest ( const char * sIndexes, NetOutputBuffer_c & tOut, int iAgent ) const = 0; +}; + + +struct IReplyParser_t +{ + virtual ~IReplyParser_t () {} // to avoid gcc4 warns + virtual bool ParseReply ( MemInputBuffer_c & tReq, AgentConn_t & tAgent, int iAgent ) const = 0; +}; + + +#define AGENT_STATS_INC(_agent,_counter) \ + if ( g_pStats && _agent.m_iStatsIndex>=0 && _agent.m_iStatsIndexm_dAgentStats [ _agent.m_iStatsIndex ]._counter++; \ + g_tStatsMutex.Unlock (); \ + } + + +void ConnectToRemoteAgents ( CSphVector & dAgents, bool bRetryOnly ) +{ + ARRAY_FOREACH ( iAgent, dAgents ) + { + AgentConn_t & tAgent = dAgents[iAgent]; + if ( bRetryOnly && ( tAgent.m_eState!=AGENT_RETRY ) ) + continue; + + tAgent.m_eState = AGENT_UNUSED; + tAgent.m_bSuccess = false; + + socklen_t len = 0; + struct sockaddr_storage ss; + memset ( &ss, 0, sizeof(ss) ); + ss.ss_family = (short)tAgent.m_iFamily; + + if ( ss.ss_family==AF_INET ) + { + struct sockaddr_in *in = (struct sockaddr_in *)&ss; + in->sin_port = htons ( (unsigned short)tAgent.m_iPort ); + in->sin_addr.s_addr = tAgent.m_uAddr; + len = sizeof(*in); + } + #if !USE_WINDOWS + else if ( ss.ss_family==AF_UNIX ) + { + struct sockaddr_un *un = (struct sockaddr_un *)&ss; + snprintf ( un->sun_path, sizeof(un->sun_path), "%s", tAgent.m_sPath.cstr() ); + len = sizeof(*un); + } + #endif + + tAgent.m_iSock = socket ( tAgent.m_iFamily, SOCK_STREAM, 0 ); + if ( tAgent.m_iSock<0 ) + { + tAgent.m_sFailure.SetSprintf ( "socket() failed: %s", sphSockError() ); + return; + } + + if ( sphSetSockNB ( tAgent.m_iSock )<0 ) + { + tAgent.m_sFailure.SetSprintf ( "sphSetSockNB() failed: %s", sphSockError() ); + return; + } + + // count connects + if ( g_pStats ) + { + g_tStatsMutex.Lock(); + g_pStats->m_iAgentConnect++; + if ( bRetryOnly ) + g_pStats->m_iAgentRetry++; + g_tStatsMutex.Unlock(); + } + + if ( !bRetryOnly ) + tAgent.m_iWall = 0; + tAgent.m_iWall -= sphMicroTimer(); + + if ( connect ( tAgent.m_iSock, (struct sockaddr*)&ss, len )<0 ) + { + int iErr = sphSockGetErrno(); + if ( iErr!=EINPROGRESS && iErr!=EINTR && iErr!=EWOULDBLOCK ) // check for EWOULDBLOCK is for winsock only + { + tAgent.Close (); + tAgent.m_sFailure.SetSprintf ( "connect() failed: %s", sphSockError(iErr) ); + tAgent.m_eState = AGENT_RETRY; // do retry on connect() failures + AGENT_STATS_INC ( tAgent, m_iConnectFailures ); + return; + + } else + { + // connection in progress + tAgent.m_eState = AGENT_CONNECT; + } + } else + { + // socket connected, ready to read hello message + tAgent.m_eState = AGENT_HELLO; + } + } +} + + +int QueryRemoteAgents ( CSphVector & dAgents, int iTimeout, const IRequestBuilder_t & tBuilder, int64_t * pWaited ) +{ + int iAgents = 0; + assert ( iTimeout>=0 ); + + int64_t tmMaxTimer = sphMicroTimer() + iTimeout*1000; // in microseconds + for ( ;; ) + { + fd_set fdsRead, fdsWrite; + FD_ZERO ( &fdsRead ); + FD_ZERO ( &fdsWrite ); + + int iMax = 0; + bool bDone = true; + ARRAY_FOREACH ( i, dAgents ) + { + const AgentConn_t & tAgent = dAgents[i]; + if ( tAgent.m_eState==AGENT_CONNECT || tAgent.m_eState==AGENT_HELLO || tAgent.m_eState==AGENT_QUERY ) + { + assert ( !tAgent.m_sPath.IsEmpty() || tAgent.m_iPort>0 ); + assert ( tAgent.m_iSock>0 ); + + sphFDSet ( tAgent.m_iSock, ( tAgent.m_eState==AGENT_CONNECT ) ? &fdsWrite : &fdsRead ); + iMax = Max ( iMax, tAgent.m_iSock ); + if ( tAgent.m_eState!=AGENT_QUERY ) + bDone = false; + } + } + if ( bDone ) + break; + + int64_t tmSelect = sphMicroTimer(); + int64_t tmMicroLeft = tmMaxTimer - tmSelect; + if ( tmMicroLeft<=0 ) + break; // FIXME? what about iTimeout==0 case? + + struct timeval tvTimeout; + tvTimeout.tv_sec = (int)( tmMicroLeft/ 1000000 ); // full seconds + tvTimeout.tv_usec = (int)( tmMicroLeft % 1000000 ); // microseconds + + // we don't care about exceptfds; they're for OOB only + int iSelected = select ( 1+iMax, &fdsRead, &fdsWrite, NULL, &tvTimeout ); + + if ( pWaited ) + *pWaited += sphMicroTimer() - tmSelect; + + if ( iSelected<=0 ) + continue; + + ARRAY_FOREACH ( i, dAgents ) + { + AgentConn_t & tAgent = dAgents[i]; + + // check if connection completed + // tricky part, we MUST use write-set ONLY here at this check + // even though we can't tell connect() success from just OS send buffer availability + // but any check involving read-set just never ever completes, so... + if ( tAgent.m_eState==AGENT_CONNECT && FD_ISSET ( tAgent.m_iSock, &fdsWrite ) ) + { + int iErr = 0; + socklen_t iErrLen = sizeof(iErr); + getsockopt ( tAgent.m_iSock, SOL_SOCKET, SO_ERROR, (char*)&iErr, &iErrLen ); + if ( iErr ) + { + // connect() failure + tAgent.m_sFailure.SetSprintf ( "connect() failed: %s", sphSockError(iErr) ); + tAgent.Close (); + AGENT_STATS_INC ( tAgent, m_iConnectFailures ); + } else + { + // connect() success + tAgent.m_eState = AGENT_HELLO; + } + continue; + } + + // check if hello was received + if ( tAgent.m_eState==AGENT_HELLO && FD_ISSET ( tAgent.m_iSock, &fdsRead ) ) + { + // read reply + int iRemoteVer; + int iRes = sphSockRecv ( tAgent.m_iSock, (char*)&iRemoteVer, sizeof(iRemoteVer) ); + if ( iRes!=sizeof(iRemoteVer) ) + { + tAgent.Close (); + if ( iRes<0 ) + { + // network error + int iErr = sphSockGetErrno(); + tAgent.m_sFailure.SetSprintf ( "handshake failure (errno=%d, msg=%s)", iErr, sphSockError(iErr) ); + AGENT_STATS_INC ( tAgent, m_iNetworkErrors ); + + } else if ( iRes>0 ) + { + // incomplete reply + tAgent.m_sFailure.SetSprintf ( "handshake failure (exp=%d, recv=%d)", (int)sizeof(iRemoteVer), iRes ); + AGENT_STATS_INC ( tAgent, m_iWrongReplies ); + + } else + { + // agent closed the connection + // this might happen in out-of-sync connect-accept case; so let's retry + tAgent.m_sFailure = "handshake failure (connection was closed)"; + tAgent.m_eState = AGENT_RETRY; + AGENT_STATS_INC ( tAgent, m_iUnexpectedClose ); + } + continue; + } + + iRemoteVer = ntohl ( iRemoteVer ); + if (!( iRemoteVer==SPHINX_SEARCHD_PROTO || iRemoteVer==0x01000000UL ) ) // workaround for all the revisions that sent it in host order... + { + tAgent.m_sFailure.SetSprintf ( "handshake failure (unexpected protocol version=%d)", iRemoteVer ); + AGENT_STATS_INC ( tAgent, m_iWrongReplies ); + tAgent.Close (); + continue; + } + + // send request + NetOutputBuffer_c tOut ( tAgent.m_iSock ); + tBuilder.BuildRequest ( tAgent.m_sIndexes.cstr(), tOut, i ); + tOut.Flush (); // FIXME! handle flush failure? + + tAgent.m_eState = AGENT_QUERY; + iAgents++; + continue; + } + + // check if queried agent replied while we were querying others + if ( tAgent.m_eState==AGENT_QUERY && FD_ISSET ( tAgent.m_iSock, &fdsRead ) ) + { + // do not account agent wall time from here; agent is probably ready + tAgent.m_iWall += sphMicroTimer(); + tAgent.m_eState = AGENT_PREREPLY; + continue; + } + } + } + + ARRAY_FOREACH ( i, dAgents ) + { + // check if connection timed out + AgentConn_t & tAgent = dAgents[i]; + if ( tAgent.m_eState!=AGENT_QUERY && tAgent.m_eState!=AGENT_UNUSED && tAgent.m_eState!=AGENT_RETRY && tAgent.m_eState!=AGENT_PREREPLY ) + { + // technically, we can end up here via two different routes + // a) connect() never finishes in given time frame + // b) agent actually accept()s the connection but keeps silence + // however, there's no way to tell the two from each other + // so we just account both cases as connect() failure + tAgent.Close (); + tAgent.m_sFailure.SetSprintf ( "connect() timed out" ); + tAgent.m_eState = AGENT_RETRY; // do retry on connect() failures + AGENT_STATS_INC ( tAgent, m_iTimeoutsConnect ); + } + } + + return iAgents; +} + + +int WaitForRemoteAgents ( CSphVector & dAgents, int iTimeout, IReplyParser_t & tParser, int64_t * pWaited ) +{ + assert ( iTimeout>=0 ); + + int iAgents = 0; + int64_t tmMaxTimer = sphMicroTimer() + iTimeout*1000; // in microseconds + for ( ;; ) + { + fd_set fdsRead; + FD_ZERO ( &fdsRead ); + + int iMax = 0; + bool bDone = true; + ARRAY_FOREACH ( iAgent, dAgents ) + { + AgentConn_t & tAgent = dAgents[iAgent]; + if ( tAgent.m_bBlackhole ) + continue; + + if ( tAgent.m_eState==AGENT_QUERY || tAgent.m_eState==AGENT_REPLY || tAgent.m_eState==AGENT_PREREPLY ) + { + assert ( !tAgent.m_sPath.IsEmpty() || tAgent.m_iPort>0 ); + assert ( tAgent.m_iSock>0 ); + + sphFDSet ( tAgent.m_iSock, &fdsRead ); + iMax = Max ( iMax, tAgent.m_iSock ); + bDone = false; + } + } + if ( bDone ) + break; + + int64_t tmSelect = sphMicroTimer(); + int64_t tmMicroLeft = tmMaxTimer - tmSelect; + if ( tmMicroLeft<=0 ) // FIXME? what about iTimeout==0 case? + break; + + struct timeval tvTimeout; + tvTimeout.tv_sec = (int)( tmMicroLeft / 1000000 ); // full seconds + tvTimeout.tv_usec = (int)( tmMicroLeft % 1000000 ); // microseconds + + int iSelected = select ( 1+iMax, &fdsRead, NULL, NULL, &tvTimeout ); + + if ( pWaited ) + *pWaited += sphMicroTimer() - tmSelect; + + if ( iSelected<=0 ) + continue; + + ARRAY_FOREACH ( iAgent, dAgents ) + { + AgentConn_t & tAgent = dAgents[iAgent]; + if ( tAgent.m_bBlackhole ) + continue; + if (!( tAgent.m_eState==AGENT_QUERY || tAgent.m_eState==AGENT_REPLY || tAgent.m_eState==AGENT_PREREPLY )) + continue; + if ( !FD_ISSET ( tAgent.m_iSock, &fdsRead ) ) + continue; + + // if there was no reply yet, read reply header + bool bFailure = true; + for ( ;; ) + { + if ( tAgent.m_eState==AGENT_QUERY || tAgent.m_eState==AGENT_PREREPLY ) + { + if ( tAgent.m_eState==AGENT_PREREPLY ) + { + tAgent.m_iWall -= sphMicroTimer(); + tAgent.m_eState = AGENT_QUERY; + } + + // try to read + struct + { + WORD m_iStatus; + WORD m_iVer; + int m_iLength; + } tReplyHeader; + STATIC_SIZE_ASSERT ( tReplyHeader, 8 ); + + if ( sphSockRecv ( tAgent.m_iSock, (char*)&tReplyHeader, sizeof(tReplyHeader) )!=sizeof(tReplyHeader) ) + { + // bail out if failed + tAgent.m_sFailure.SetSprintf ( "failed to receive reply header" ); + AGENT_STATS_INC ( tAgent, m_iNetworkErrors ); + break; + } + + tReplyHeader.m_iStatus = ntohs ( tReplyHeader.m_iStatus ); + tReplyHeader.m_iVer = ntohs ( tReplyHeader.m_iVer ); + tReplyHeader.m_iLength = ntohl ( tReplyHeader.m_iLength ); + + // check the packet + if ( tReplyHeader.m_iLength<0 || tReplyHeader.m_iLength>g_iMaxPacketSize ) // FIXME! add reasonable max packet len too + { + tAgent.m_sFailure.SetSprintf ( "invalid packet size (status=%d, len=%d, max_packet_size=%d)", tReplyHeader.m_iStatus, tReplyHeader.m_iLength, g_iMaxPacketSize ); + AGENT_STATS_INC ( tAgent, m_iWrongReplies ); + break; + } + + // header received, switch the status + assert ( tAgent.m_pReplyBuf==NULL ); + tAgent.m_eState = AGENT_REPLY; + tAgent.m_pReplyBuf = new BYTE [ tReplyHeader.m_iLength ]; + tAgent.m_iReplySize = tReplyHeader.m_iLength; + tAgent.m_iReplyRead = 0; + tAgent.m_iReplyStatus = tReplyHeader.m_iStatus; + + if ( !tAgent.m_pReplyBuf ) + { + // bail out if failed + tAgent.m_sFailure.SetSprintf ( "failed to alloc %d bytes for reply buffer", tAgent.m_iReplySize ); + break; + } + } + + // if we are reading reply, read another chunk + if ( tAgent.m_eState==AGENT_REPLY ) + { + // do read + assert ( tAgent.m_iReplyRead0 ); + assert ( tAgent.m_iReplyRead+iRes<=tAgent.m_iReplySize ); + tAgent.m_iReplyRead += iRes; + } + + // if reply was fully received, parse it + if ( tAgent.m_eState==AGENT_REPLY && tAgent.m_iReplyRead==tAgent.m_iReplySize ) + { + MemInputBuffer_c tReq ( tAgent.m_pReplyBuf, tAgent.m_iReplySize ); + + // absolve thy former sins + tAgent.m_sFailure = ""; + + // check for general errors/warnings first + if ( tAgent.m_iReplyStatus==SEARCHD_WARNING ) + { + CSphString sAgentWarning = tReq.GetString (); + tAgent.m_sFailure.SetSprintf ( "remote warning: %s", sAgentWarning.cstr() ); + + } else if ( tAgent.m_iReplyStatus==SEARCHD_RETRY ) + { + tAgent.m_eState = AGENT_RETRY; + break; + + } else if ( tAgent.m_iReplyStatus!=SEARCHD_OK ) + { + CSphString sAgentError = tReq.GetString (); + tAgent.m_sFailure.SetSprintf ( "remote error: %s", sAgentError.cstr() ); + break; + } + + // call parser + if ( !tParser.ParseReply ( tReq, tAgent, iAgent ) ) + break; + + // check if there was enough data + if ( tReq.GetError() ) + { + tAgent.m_sFailure.SetSprintf ( "incomplete reply" ); + AGENT_STATS_INC ( tAgent, m_iWrongReplies ); + break; + } + + // all is well + iAgents++; + tAgent.Close (); + + tAgent.m_bSuccess = true; + } + + bFailure = false; + break; + } + + if ( bFailure ) + { + tAgent.Close (); + tAgent.m_dResults.Reset (); + } + } + } + + // close timed-out agents + ARRAY_FOREACH ( iAgent, dAgents ) + { + AgentConn_t & tAgent = dAgents[iAgent]; + if ( tAgent.m_bBlackhole ) + tAgent.Close (); + else if ( tAgent.m_eState==AGENT_QUERY || tAgent.m_eState==AGENT_PREREPLY ) + { + assert ( !tAgent.m_dResults.GetLength() ); + assert ( !tAgent.m_bSuccess ); + tAgent.Close (); + tAgent.m_sFailure.SetSprintf ( "query timed out" ); + AGENT_STATS_INC ( tAgent, m_iTimeoutsQuery ); + } + } + + return iAgents; +} + +///////////////////////////////////////////////////////////////////////////// +// SEARCH HANDLER +///////////////////////////////////////////////////////////////////////////// + +struct SearchRequestBuilder_t : public IRequestBuilder_t +{ + SearchRequestBuilder_t ( const CSphVector & dQueries, int iStart, int iEnd ) : m_dQueries ( dQueries ), m_iStart ( iStart ), m_iEnd ( iEnd ) {} + virtual void BuildRequest ( const char * sIndexes, NetOutputBuffer_c & tOut, int ) const; + +protected: + int CalcQueryLen ( const char * sIndexes, const CSphQuery & q ) const; + void SendQuery ( const char * sIndexes, NetOutputBuffer_c & tOut, const CSphQuery & q ) const; + +protected: + const CSphVector & m_dQueries; + int m_iStart; + int m_iEnd; +}; + + +struct SearchReplyParser_t : public IReplyParser_t, public ISphNoncopyable +{ + SearchReplyParser_t ( int iStart, int iEnd, CSphVector & dMvaStorage, CSphVector & dStringsStorage ) + : m_iStart ( iStart ) + , m_iEnd ( iEnd ) + , m_dMvaStorage ( dMvaStorage ) + , m_dStringsStorage ( dStringsStorage ) + {} + + virtual bool ParseReply ( MemInputBuffer_c & tReq, AgentConn_t & tAgent, int iAgent ) const; + +protected: + int m_iStart; + int m_iEnd; + CSphVector & m_dMvaStorage; + CSphVector & m_dStringsStorage; +}; + +///////////////////////////////////////////////////////////////////////////// + +int SearchRequestBuilder_t::CalcQueryLen ( const char * sIndexes, const CSphQuery & q ) const +{ + int iReqSize = 108 + 2*sizeof(SphDocID_t) + 4*q.m_iWeights + + q.m_sSortBy.Length() + + strlen ( sIndexes ) + + q.m_sGroupBy.Length() + + q.m_sGroupSortBy.Length() + + q.m_sGroupDistinct.Length() + + q.m_sComment.Length() + + q.m_sSelect.Length(); + if ( !q.m_bAgent ) // send the magic to agent ("*,*," + real query) + iReqSize += q.m_sSelect.IsEmpty() ? 3 : 4; + iReqSize += q.m_sRawQuery.IsEmpty() + ? q.m_sQuery.Length() + : q.m_sRawQuery.Length(); + ARRAY_FOREACH ( j, q.m_dFilters ) + { + const CSphFilterSettings & tFilter = q.m_dFilters[j]; + iReqSize += 12 + tFilter.m_sAttrName.Length(); // string attr-name; int type; int exclude-flag + switch ( tFilter.m_eType ) + { + case SPH_FILTER_VALUES: iReqSize += 4 + 8*tFilter.GetNumValues (); break; // int values-count; uint64[] values + case SPH_FILTER_RANGE: iReqSize += 16; break; // uint64 min-val, max-val + case SPH_FILTER_FLOATRANGE: iReqSize += 8; break; // int/float min-val,max-val + } + } + if ( q.m_bGeoAnchor ) + iReqSize += 16 + q.m_sGeoLatAttr.Length() + q.m_sGeoLongAttr.Length(); // string lat-attr, long-attr; float lat, long + ARRAY_FOREACH ( i, q.m_dIndexWeights ) + iReqSize += 8 + q.m_dIndexWeights[i].m_sName.Length(); // string index-name; int index-weight + ARRAY_FOREACH ( i, q.m_dFieldWeights ) + iReqSize += 8 + q.m_dFieldWeights[i].m_sName.Length(); // string field-name; int field-weight + ARRAY_FOREACH ( i, q.m_dOverrides ) + iReqSize += 12 + q.m_dOverrides[i].m_sAttr.Length() + // string attr-name; int type; int values-count + ( q.m_dOverrides[i].m_eAttrType==SPH_ATTR_BIGINT ? 16 : 12 )*q.m_dOverrides[i].m_dValues.GetLength(); // ( bigint id; int/float/bigint value )[] values + return iReqSize; +} + + +void SearchRequestBuilder_t::SendQuery ( const char * sIndexes, NetOutputBuffer_c & tOut, const CSphQuery & q ) const +{ + tOut.SendInt ( 0 ); // offset is 0 + tOut.SendInt ( q.m_iMaxMatches ); // limit is MAX_MATCHES + tOut.SendInt ( (DWORD)q.m_eMode ); // match mode + tOut.SendInt ( (DWORD)q.m_eRanker ); // ranking mode + tOut.SendInt ( q.m_eSort ); // sort mode + tOut.SendString ( q.m_sSortBy.cstr() ); // sort attr + if ( q.m_sRawQuery.IsEmpty() ) + tOut.SendString ( q.m_sQuery.cstr() ); + else + tOut.SendString ( q.m_sRawQuery.cstr() ); // query + tOut.SendInt ( q.m_iWeights ); + for ( int j=0; j0 ); + + tAgent.m_dResults.Resize ( iResults ); + for ( int iRes=0; iResg_iMaxMatches ) + { + tAgent.m_sFailure.SetSprintf ( "invalid match count received (count=%d)", iMatches ); + return false; + } + + int bAgent64 = tReq.GetInt (); +#if !USE_64BIT + if ( bAgent64 ) + tAgent.m_sFailure.SetSprintf ( "id64 agent, id32 master, docids might be wrapped" ); +#endif + + assert ( !tRes.m_dMatches.GetLength() ); + if ( iMatches ) + { + tRes.m_dMatches.Resize ( iMatches ); + ARRAY_FOREACH ( i, tRes.m_dMatches ) + { + CSphMatch & tMatch = tRes.m_dMatches[i]; + tMatch.Reset ( tSchema.GetRowSize() ); + tMatch.m_iDocID = bAgent64 ? (SphDocID_t)tReq.GetUint64() : tReq.GetDword(); + tMatch.m_iWeight = tReq.GetInt (); + for ( int j=0; j>32 ) ); + } + } + + } else if ( tAttr.m_eAttrType==SPH_ATTR_FLOAT ) + { + float fRes = tReq.GetFloat(); + tMatch.SetAttr ( tAttr.m_tLocator, sphF2DW(fRes) ); + + } else if ( tAttr.m_eAttrType==SPH_ATTR_BIGINT ) + { + tMatch.SetAttr ( tAttr.m_tLocator, tReq.GetUint64() ); + + } else if ( tAttr.m_eAttrType==SPH_ATTR_STRING ) + { + CSphString sValue = tReq.GetString(); + int iLen = sValue.Length(); + + int iOff = m_dStringsStorage.GetLength(); + tMatch.SetAttr ( tAttr.m_tLocator, iOff ); + + m_dStringsStorage.Resize ( iOff+3+iLen ); + BYTE * pBuf = &m_dStringsStorage[iOff]; + pBuf += sphPackStrlen ( pBuf, iLen ); + memcpy ( pBuf, sValue.cstr(), iLen ); + + } else + { + tMatch.SetAttr ( tAttr.m_tLocator, tReq.GetDword() ); + } + } + } + } + + // read totals (retrieved count, total count, query time, word count) + int iRetrieved = tReq.GetInt (); + tRes.m_iTotalMatches = tReq.GetInt (); + tRes.m_iQueryTime = tReq.GetInt (); + const int iWordsCount = tReq.GetInt (); // FIXME! sanity check? + if ( iRetrieved!=iMatches ) + { + tAgent.m_sFailure.SetSprintf ( "expected %d retrieved documents, got %d", iMatches, iRetrieved ); + return false; + } + + // read per-word stats + for ( int i=0; i dDst; + for ( int i=0; i=0 ) + { + const CSphColumnInfo & tSrcAttr = tSrc.GetAttr ( iSrcIdx ); + if ( tSrcAttr.m_eAttrType!=dDst[i].m_eAttrType ) + { + // different types? remove the attr + iSrcIdx = -1; + bEqual = false; + + } else if ( tSrcAttr.m_tLocator.m_iBitCount!=dDst[i].m_tLocator.m_iBitCount ) + { + // different bit sizes? choose the max one + dDst[i].m_tLocator.m_iBitCount = Max ( dDst[i].m_tLocator.m_iBitCount, tSrcAttr.m_tLocator.m_iBitCount ); + bEqual = false; + } + + if ( tSrcAttr.m_tLocator.m_iBitOffset!=dDst[i].m_tLocator.m_iBitOffset ) + { + // different offsets? have to force target dynamic then, since we can't use one locator for all matches + bEqual = false; + } + + if ( tSrcAttr.m_tLocator.m_bDynamic!=dDst[i].m_tLocator.m_bDynamic ) + { + // different location? have to force target dynamic then + bEqual = false; + } + } + + // check for presence + if ( iSrcIdx<0 ) + { + dDst.Remove ( i ); + i--; + } + } + + tDst.ResetAttrs (); + ARRAY_FOREACH ( i, dDst ) + tDst.AddAttr ( dDst[i], dDst[i].m_tLocator.m_bDynamic | !bEqual ); // force dynamic attrs on inequality + + return bEqual; +} + + +bool FixupQuery ( CSphQuery * pQuery, const CSphSchema * pSchema, const char * sIndexName, CSphString & sError ) +{ + // already? + if ( !pQuery->m_iOldVersion ) + return true; + + if ( pQuery->m_iOldGroups>0 || pQuery->m_iOldMinGID!=0 || pQuery->m_iOldMaxGID!=UINT_MAX ) + { + int iAttr = -1; + for ( int i=0; iGetAttrsCount(); i++ ) + if ( pSchema->GetAttr(i).m_eAttrType==SPH_ATTR_INTEGER ) + { + iAttr = i; + break; + } + + if ( iAttr<0 ) + { + sError.SetSprintf ( "index '%s': no group attribute found", sIndexName ); + return false; + } + + CSphFilterSettings tFilter; + tFilter.m_sAttrName = pSchema->GetAttr(iAttr).m_sName; + tFilter.m_dValues.Resize ( pQuery->m_iOldGroups ); + ARRAY_FOREACH ( i, tFilter.m_dValues ) + tFilter.m_dValues[i] = pQuery->m_pOldGroups[i]; + tFilter.m_uMinValue = pQuery->m_iOldMinGID; + tFilter.m_uMaxValue = pQuery->m_iOldMaxGID; + pQuery->m_dFilters.Add ( tFilter ); + } + + if ( pQuery->m_iOldMinTS!=0 || pQuery->m_iOldMaxTS!=UINT_MAX ) + { + int iAttr = -1; + for ( int i=0; iGetAttrsCount(); i++ ) + if ( pSchema->GetAttr(i).m_eAttrType==SPH_ATTR_TIMESTAMP ) + { + iAttr = i; + break; + } + + if ( iAttr<0 ) + { + sError.SetSprintf ( "index '%s': no timestamp attribute found", sIndexName ); + return false; + } + + CSphFilterSettings tFilter; + tFilter.m_sAttrName = pSchema->GetAttr(iAttr).m_sName; + tFilter.m_uMinValue = pQuery->m_iOldMinTS; + tFilter.m_uMaxValue = pQuery->m_iOldMaxTS; + pQuery->m_dFilters.Add ( tFilter ); + } + + pQuery->m_iOldVersion = 0; + return true; +} + + +void ParseIndexList ( const CSphString & sIndexes, CSphVector & dOut ) +{ + CSphString sSplit = sIndexes; + char * p = (char*)sSplit.cstr(); + while ( *p ) + { + // skip non-alphas + while ( (*p) && !sphIsAlpha(*p) ) p++; + if ( !(*p) ) break; + + // this is my next index name + const char * sNext = p; + while ( sphIsAlpha(*p) ) p++; + + assert ( sNext!=p ); + if ( *p ) *p++ = '\0'; // if it was not the end yet, we'll continue from next char + + dOut.Add().m_sName = sNext; + } +} + + +void CheckQuery ( const CSphQuery & tQuery, CSphString & sError ) +{ + sError = NULL; + if ( tQuery.m_eMode<0 || tQuery.m_eMode>SPH_MATCH_TOTAL ) + { + sError.SetSprintf ( "invalid match mode %d", tQuery.m_eMode ); + return; + } + if ( tQuery.m_eRanker<0 || tQuery.m_eRanker>SPH_RANK_TOTAL ) + { + sError.SetSprintf ( "invalid ranking mode %d", tQuery.m_eRanker ); + return; + } + if ( tQuery.m_iMaxMatches<1 || tQuery.m_iMaxMatches>g_iMaxMatches ) + { + sError.SetSprintf ( "per-query max_matches=%d out of bounds (per-server max_matches=%d)", + tQuery.m_iMaxMatches, g_iMaxMatches ); + return; + } + if ( tQuery.m_iOffset<0 || tQuery.m_iOffset>=tQuery.m_iMaxMatches ) + { + sError.SetSprintf ( "offset out of bounds (offset=%d, max_matches=%d)", + tQuery.m_iOffset, tQuery.m_iMaxMatches ); + return; + } + if ( tQuery.m_iLimit<0 ) + { + sError.SetSprintf ( "limit out of bounds (limit=%d)", tQuery.m_iLimit ); + return; + } + if ( tQuery.m_iCutoff<0 ) + { + sError.SetSprintf ( "cutoff out of bounds (cutoff=%d)", tQuery.m_iCutoff ); + return; + } + if ( tQuery.m_iRetryCount<0 || tQuery.m_iRetryCount>MAX_RETRY_COUNT ) + { + sError.SetSprintf ( "retry count out of bounds (count=%d)", tQuery.m_iRetryCount ); + return; + } + if ( tQuery.m_iRetryDelay<0 || tQuery.m_iRetryDelay>MAX_RETRY_DELAY ) + { + sError.SetSprintf ( "retry delay out of bounds (delay=%d)", tQuery.m_iRetryDelay ); + return; + } +} + + +void PrepareQueryEmulation ( CSphQuery * pQuery ) +{ + // sort filters + ARRAY_FOREACH ( i, pQuery->m_dFilters ) + pQuery->m_dFilters[i].m_dValues.Sort(); + + // sort overrides + ARRAY_FOREACH ( i, pQuery->m_dOverrides ) + pQuery->m_dOverrides[i].m_dValues.Sort (); + + // fixup query + pQuery->m_sQuery = pQuery->m_sRawQuery; + + if ( pQuery->m_eMode==SPH_MATCH_BOOLEAN ) + pQuery->m_eRanker = SPH_RANK_NONE; + + if ( pQuery->m_eMode!=SPH_MATCH_ALL && pQuery->m_eMode!=SPH_MATCH_ANY && pQuery->m_eMode!=SPH_MATCH_PHRASE ) + return; + + const char * szQuery = pQuery->m_sRawQuery.cstr (); + int iQueryLen = szQuery ? strlen(szQuery) : 0; + + pQuery->m_sQuery.Reserve ( iQueryLen*2+8 ); + char * szRes = (char*) pQuery->m_sQuery.cstr (); + char c; + + if ( pQuery->m_eMode==SPH_MATCH_ANY || pQuery->m_eMode==SPH_MATCH_PHRASE ) + *szRes++ = '\"'; + + while ( ( c = *szQuery++ )!=0 ) + { + // must be in sync with EscapeString (php api) + if ( c=='(' || c==')' || c=='|' || c=='-' || c=='!' || c=='@' || c=='~' || c=='\"' || c=='&' || c=='/' || c=='<' || c=='\\' ) + *szRes++ = '\\'; + + *szRes++ = c; + } + + switch ( pQuery->m_eMode ) + { + case SPH_MATCH_ALL: pQuery->m_eRanker = SPH_RANK_PROXIMITY; *szRes = '\0'; break; + case SPH_MATCH_ANY: pQuery->m_eRanker = SPH_RANK_MATCHANY; strncpy ( szRes, "\"/1", 8 ); break; + case SPH_MATCH_PHRASE: pQuery->m_eRanker = SPH_RANK_PROXIMITY; *szRes++ = '\"'; *szRes = '\0'; break; + default: return; + } +} + + +bool ParseSearchQuery ( InputBuffer_c & tReq, CSphQuery & tQuery, int iVer, int iMasterVer ) +{ + tQuery.m_iOldVersion = iVer; + + // v.1.0. mode, limits, weights, ID/TS ranges + tQuery.m_iOffset = tReq.GetInt (); + tQuery.m_iLimit = tReq.GetInt (); + tQuery.m_eMode = (ESphMatchMode) tReq.GetInt (); + if ( iVer>=0x110 ) + { + tQuery.m_eRanker = (ESphRankMode) tReq.GetInt (); + if ( tQuery.m_eRanker==SPH_RANK_EXPR ) + tQuery.m_sRankerExpr = tReq.GetString(); + } + tQuery.m_eSort = (ESphSortOrder) tReq.GetInt (); + if ( iVer<=0x101 ) + tQuery.m_iOldGroups = tReq.GetDwords ( &tQuery.m_pOldGroups, g_iMaxFilterValues, "invalid group count %d (should be in 0..%d range)" ); + if ( iVer>=0x102 ) + { + tQuery.m_sSortBy = tReq.GetString (); + tQuery.m_sSortBy.ToLower (); + } + tQuery.m_sRawQuery = tReq.GetString (); + tQuery.m_iWeights = tReq.GetDwords ( (DWORD**)&tQuery.m_pWeights, SPH_MAX_FIELDS, "invalid weight count %d (should be in 0..%d range)" ); + tQuery.m_sIndexes = tReq.GetString (); + + bool bIdrange64 = false; + if ( iVer>=0x108 ) + bIdrange64 = ( tReq.GetInt()!=0 ); + + SphDocID_t uMinID = 0; + SphDocID_t uMaxID = DOCID_MAX; + if ( bIdrange64 ) + { + uMinID = (SphDocID_t)tReq.GetUint64 (); + uMaxID = (SphDocID_t)tReq.GetUint64 (); + // FIXME? could report clamp here if I'm id32 and client passed id64 range, + // but frequently this won't affect anything at all + } else + { + uMinID = tReq.GetDword (); + uMaxID = tReq.GetDword (); + } + + if ( iVer<0x108 && uMaxID==0xffffffffUL ) + uMaxID = 0; // fixup older clients which send 32-bit UINT_MAX by default + + if ( uMaxID==0 ) + uMaxID = DOCID_MAX; + + // v.1.0, v.1.1 + if ( iVer<=0x101 ) + { + tQuery.m_iOldMinTS = tReq.GetDword (); + tQuery.m_iOldMaxTS = tReq.GetDword (); + } + + // v.1.1 specific + if ( iVer==0x101 ) + { + tQuery.m_iOldMinGID = tReq.GetDword (); + tQuery.m_iOldMaxGID = tReq.GetDword (); + } + + // v.1.2 + if ( iVer>=0x102 ) + { + int iAttrFilters = tReq.GetInt (); + if ( iAttrFilters>g_iMaxFilters ) + { + tReq.SendErrorReply ( "too much attribute filters (req=%d, max=%d)", iAttrFilters, g_iMaxFilters ); + return false; + } + + const int MAX_ERROR_SET_BUFFER = 128; + char sSetError[MAX_ERROR_SET_BUFFER]; + tQuery.m_dFilters.Resize ( iAttrFilters ); + ARRAY_FOREACH ( iFilter, tQuery.m_dFilters ) + { + CSphFilterSettings & tFilter = tQuery.m_dFilters[iFilter]; + tFilter.m_sAttrName = tReq.GetString (); + tFilter.m_sAttrName.ToLower (); + + snprintf ( sSetError, MAX_ERROR_SET_BUFFER + , "invalid attribute '%s'(%d) set length %s (should be in 0..%s range)", tFilter.m_sAttrName.cstr(), iFilter, "%d", "%d" ); + + if ( iVer>=0x10E ) + { + // v.1.14+ + tFilter.m_eType = (ESphFilter) tReq.GetDword (); + switch ( tFilter.m_eType ) + { + case SPH_FILTER_RANGE: + tFilter.m_uMinValue = ( iVer>=0x114 ) ? tReq.GetUint64() : tReq.GetDword (); + tFilter.m_uMaxValue = ( iVer>=0x114 ) ? tReq.GetUint64() : tReq.GetDword (); + break; + + case SPH_FILTER_FLOATRANGE: + tFilter.m_fMinValue = tReq.GetFloat (); + tFilter.m_fMaxValue = tReq.GetFloat (); + break; + + case SPH_FILTER_VALUES: + { + bool bRes = ( iVer>=0x114 ) + ? tReq.GetQwords ( tFilter.m_dValues, g_iMaxFilterValues, sSetError ) + : tReq.GetDwords ( tFilter.m_dValues, g_iMaxFilterValues, sSetError ); + if ( !bRes ) + return false; + } + break; + + default: + tReq.SendErrorReply ( "unknown filter type (type-id=%d)", tFilter.m_eType ); + return false; + } + + } else + { + // pre-1.14 + if ( !tReq.GetDwords ( tFilter.m_dValues, g_iMaxFilterValues, sSetError ) ) + return false; + + if ( !tFilter.m_dValues.GetLength() ) + { + // 0 length means this is range, not set + tFilter.m_uMinValue = tReq.GetDword (); + tFilter.m_uMaxValue = tReq.GetDword (); + } + + tFilter.m_eType = tFilter.m_dValues.GetLength() ? SPH_FILTER_VALUES : SPH_FILTER_RANGE; + } + + if ( iVer>=0x106 ) + tFilter.m_bExclude = !!tReq.GetDword (); + } + } + + // now add id range filter + if ( uMinID!=0 || uMaxID!=DOCID_MAX ) + { + CSphFilterSettings & tFilter = tQuery.m_dFilters.Add(); + tFilter.m_sAttrName = "@id"; + tFilter.m_eType = SPH_FILTER_RANGE; + tFilter.m_uMinValue = uMinID; + tFilter.m_uMaxValue = uMaxID; + } + + // v.1.3 + if ( iVer>=0x103 ) + { + tQuery.m_eGroupFunc = (ESphGroupBy) tReq.GetDword (); + tQuery.m_sGroupBy = tReq.GetString (); + tQuery.m_sGroupBy.ToLower (); + } + + // v.1.4 + tQuery.m_iMaxMatches = g_iMaxMatches; + if ( iVer>=0x104 ) + tQuery.m_iMaxMatches = tReq.GetInt (); + + // v.1.5, v.1.7 + if ( iVer>=0x107 ) + { + tQuery.m_sGroupSortBy = tReq.GetString (); + } else if ( iVer>=0x105 ) + { + bool bSortByGroup = ( tReq.GetInt()!=0 ); + if ( !bSortByGroup ) + { + char sBuf[256]; + switch ( tQuery.m_eSort ) + { + case SPH_SORT_RELEVANCE: + tQuery.m_sGroupSortBy = "@weight desc"; + break; + + case SPH_SORT_ATTR_DESC: + case SPH_SORT_ATTR_ASC: + snprintf ( sBuf, sizeof(sBuf), "%s %s", tQuery.m_sSortBy.cstr(), + tQuery.m_eSort==SPH_SORT_ATTR_ASC ? "asc" : "desc" ); + tQuery.m_sGroupSortBy = sBuf; + break; + + case SPH_SORT_EXTENDED: + tQuery.m_sGroupSortBy = tQuery.m_sSortBy; + break; + + default: + tReq.SendErrorReply ( "INTERNAL ERROR: unsupported sort mode %d in groupby sort fixup", tQuery.m_eSort ); + return false; + } + } + } + + // v.1.9 + if ( iVer>=0x109 ) + tQuery.m_iCutoff = tReq.GetInt(); + + // v.1.10 + if ( iVer>=0x10A ) + { + tQuery.m_iRetryCount = tReq.GetInt (); + tQuery.m_iRetryDelay = tReq.GetInt (); + } + + // v.1.11 + if ( iVer>=0x10B ) + tQuery.m_sGroupDistinct = tReq.GetString (); + + // v.1.14 + if ( iVer>=0x10E ) + { + tQuery.m_bGeoAnchor = ( tReq.GetInt()!=0 ); + if ( tQuery.m_bGeoAnchor ) + { + tQuery.m_sGeoLatAttr = tReq.GetString (); + tQuery.m_sGeoLongAttr = tReq.GetString (); + tQuery.m_fGeoLatitude = tReq.GetFloat (); + tQuery.m_fGeoLongitude = tReq.GetFloat (); + } + } + + // v.1.15 + if ( iVer>=0x10F ) + { + tQuery.m_dIndexWeights.Resize ( tReq.GetInt() ); // FIXME! add sanity check + ARRAY_FOREACH ( i, tQuery.m_dIndexWeights ) + { + tQuery.m_dIndexWeights[i].m_sName = tReq.GetString (); + tQuery.m_dIndexWeights[i].m_iValue = tReq.GetInt (); + } + } + + // v.1.17 + if ( iVer>=0x111 ) + tQuery.m_uMaxQueryMsec = tReq.GetDword (); + + // v.1.18 + if ( iVer>=0x112 ) + { + tQuery.m_dFieldWeights.Resize ( tReq.GetInt() ); // FIXME! add sanity check + ARRAY_FOREACH ( i, tQuery.m_dFieldWeights ) + { + tQuery.m_dFieldWeights[i].m_sName = tReq.GetString (); + tQuery.m_dFieldWeights[i].m_iValue = tReq.GetInt (); + } + } + + // v.1.19 + if ( iVer>=0x113 ) + tQuery.m_sComment = tReq.GetString (); + + // v.1.21 + if ( iVer>=0x115 ) + { + tQuery.m_dOverrides.Resize ( tReq.GetInt() ); // FIXME! add sanity check + ARRAY_FOREACH ( i, tQuery.m_dOverrides ) + { + CSphAttrOverride & tOverride = tQuery.m_dOverrides[i]; + tOverride.m_sAttr = tReq.GetString (); + tOverride.m_eAttrType = (ESphAttr) tReq.GetDword (); + + tOverride.m_dValues.Resize ( tReq.GetInt() ); // FIXME! add sanity check + ARRAY_FOREACH ( iVal, tOverride.m_dValues ) + { + CSphAttrOverride::IdValuePair_t & tEntry = tOverride.m_dValues[iVal]; + tEntry.m_uDocID = (SphDocID_t) tReq.GetUint64 (); + + if ( tOverride.m_eAttrType==SPH_ATTR_FLOAT ) tEntry.m_fValue = tReq.GetFloat (); + else if ( tOverride.m_eAttrType==SPH_ATTR_BIGINT ) tEntry.m_uValue = tReq.GetUint64 (); + else tEntry.m_uValue = tReq.GetDword (); + } + } + } + + // v.1.22 + if ( iVer>=0x116 ) + { + CSphString sRawSelect = tReq.GetString (); + CSphString sSelect = ""; + CSphString sError; + bool bAgent = false; + if ( sRawSelect.Begins ( "*,*" ) ) // this is the mark of agent. + { + bAgent = true; + if ( sRawSelect.Length()>3 ) + sSelect = sRawSelect.SubString ( 4, sRawSelect.Length()-4 ); + } + + tQuery.m_sSelect = bAgent?sSelect:sRawSelect; + if ( !tQuery.ParseSelectList ( sError ) ) + { + tReq.SendErrorReply ( "select: %s", sError.cstr() ); + return false; + } + if ( bAgent ) + { + tQuery.m_sSelect = sRawSelect; + tQuery.m_bAgent = true; + } + } + + // master v.1.0 + tQuery.m_eCollation = g_eCollation; + if ( iMasterVer>=0x001 ) + { + tQuery.m_eCollation = (ESphCollation)tReq.GetDword(); + } + + ///////////////////// + // additional checks + ///////////////////// + + if ( tReq.GetError() ) + { + tReq.SendErrorReply ( "invalid or truncated request" ); + return false; + } + + CSphString sError; + CheckQuery ( tQuery, sError ); + if ( !sError.IsEmpty() ) + { + tReq.SendErrorReply ( "%s", sError.cstr() ); + return false; + } + + // now prepare it for the engine + PrepareQueryEmulation ( &tQuery ); + + // all ok + return true; +} + +////////////////////////////////////////////////////////////////////////// + +void LogQueryPlain ( const CSphQuery & tQuery, const CSphQueryResult & tRes ) +{ + assert ( g_eLogFormat==LOG_FORMAT_PLAIN ); + if ( ( !g_bQuerySyslog && g_iQueryLogFile<0 ) || !tRes.m_sError.IsEmpty() ) + return; + + char sBuf[2048]; + char * p = sBuf; + char * pMax = sBuf+sizeof(sBuf)-4; + + // [time] +#if USE_SYSLOG + if ( !g_bQuerySyslog ) + { +#endif + + *p++ = '['; + p += sphFormatCurrentTime ( p, pMax-p ); + *p++ = ']'; + +#if USE_SYSLOG + } else + p += snprintf ( p, pMax-p, "[query]" ); +#endif + + // querytime sec + int iQueryTime = Max ( tRes.m_iQueryTime, 0 ); + p += snprintf ( p, pMax-p, " %d.%03d sec", iQueryTime/1000, iQueryTime%1000 ); + + // optional multi-query multiplier + if ( tRes.m_iMultiplier>1 ) + p += snprintf ( p, pMax-p, " x%d", tRes.m_iMultiplier ); + + // [matchmode/numfilters/sortmode matches (offset,limit) + static const char * sModes [ SPH_MATCH_TOTAL ] = { "all", "any", "phr", "bool", "ext", "scan", "ext2" }; + static const char * sSort [ SPH_SORT_TOTAL ] = { "rel", "attr-", "attr+", "tsegs", "ext", "expr" }; + p += snprintf ( p, pMax-p, " [%s/%d/%s %d (%d,%d)", + sModes [ tQuery.m_eMode ], tQuery.m_dFilters.GetLength(), sSort [ tQuery.m_eSort ], + tRes.m_iTotalMatches, tQuery.m_iOffset, tQuery.m_iLimit ); + + // optional groupby info + if ( !tQuery.m_sGroupBy.IsEmpty() ) + p += snprintf ( p, pMax-p, " @%s", tQuery.m_sGroupBy.cstr() ); + + // ] [indexes] + p += snprintf ( p, pMax-p, "] [%s]", tQuery.m_sIndexes.cstr() ); + + // optional performance counters + if ( g_bIOStats || g_bCpuStats ) + { + const CSphIOStats & IOStats = sphStopIOStats (); + + *p++ = ' '; + char * pBracket = p; // can't fill yet, will be overwritten by sprintfs + + if ( g_bIOStats ) + p += snprintf ( p, pMax-p, " ios=%d kb=%d.%d ioms=%d.%d", + IOStats.m_iReadOps, (int)( IOStats.m_iReadBytes/1024 ), (int)( IOStats.m_iReadBytes%1024 )*10/1024, + (int)( IOStats.m_iReadTime/1000 ), (int)( IOStats.m_iReadTime%1000 )/100 ); + + if ( g_bCpuStats ) + p += snprintf ( p, pMax-p, " cpums=%d.%d", (int)( tRes.m_iCpuTime/1000 ), (int)( tRes.m_iCpuTime%1000 )/100 ); + + *pBracket = '['; + if ( p0 ) + { + va_list ap; + va_start ( ap, sFormat ); + iLen = vsnprintf ( m_pCur, Left(), sFormat, ap ); + va_end ( ap ); + } + + if ( iLen!=-1 && Length()+iLen<=m_iSize ) + { + m_pCur += iLen; + break; + } else + { + Grow(); + } + } + } + + void AppendEscapedFixupSpace ( const char * sText ) + { + if ( !sText || !*sText ) + return; + + const char * pBuf = sText; + int iEsc = 0; + for ( ; *pBuf; ) + { + char s = *pBuf++; + iEsc = ( s=='\\' || s=='\'' ) ? ( iEsc+1 ) : iEsc; + } + + int iLen = pBuf-sText; + + if ( Left()( m_iSize*2 ) ) + iNewLen = m_iSize+iAdd; + + int iUsed = Length(); + char * pDynamic = new char [iNewLen]; + memcpy ( pDynamic, m_pDynamic ? m_pDynamic : m_sStatic, iUsed ); + SafeDeleteArray ( m_pDynamic ); + m_pDynamic = pDynamic; + m_pCur = pDynamic + iUsed; + m_iSize = iNewLen; + } +}; + + +void FormatOrderBy ( StringBuffer_c * pBuf, const char * sPrefix, ESphSortOrder eSort, const CSphString & sSort ) +{ + assert ( pBuf ); + if ( eSort==SPH_SORT_EXTENDED && sSort=="@weight desc" ) + return; + + switch ( eSort ) + { + case SPH_SORT_ATTR_DESC: pBuf->Append ( " %s %s DESC", sPrefix, sSort.cstr() ); break; + case SPH_SORT_ATTR_ASC: pBuf->Append ( " %s %s ASC", sPrefix, sSort.cstr() ); break; + case SPH_SORT_TIME_SEGMENTS: pBuf->Append ( " %s TIME_SEGMENT(%s)", sPrefix, sSort.cstr() ); break; + case SPH_SORT_EXTENDED: pBuf->Append ( " %s %s", sPrefix, sSort.cstr() ); break; + case SPH_SORT_EXPR: pBuf->Append ( " %s BUILTIN_EXPR()", sPrefix ); break; + default: pBuf->Append ( " %s mode-%d", sPrefix, (int)eSort ); break; + } +} + + +void LogQuerySphinxql ( const CSphQuery & q, const CSphQueryResult & tRes, const CSphVector & dAgentTimes ) +{ + assert ( g_eLogFormat==LOG_FORMAT_SPHINXQL ); + if ( g_iQueryLogFile<0 ) + return; + + StringBuffer_c tBuf; + + // get connection id + int iCid = ( g_eWorkers!=MPM_THREADS ) ? g_iConnID : *(int*) sphThreadGet ( g_tConnKey ); + + // time, conn id, wall, found + int iQueryTime = Max ( tRes.m_iQueryTime, 0 ); + tBuf.Append ( "/""* " ); + tBuf.AppendCurrentTime(); + if ( tRes.m_iMultiplier>1 ) + tBuf.Append ( " conn %d wall %d.%03d x%d found %d *""/ ", + iCid, iQueryTime/1000, iQueryTime%1000, tRes.m_iMultiplier, tRes.m_iTotalMatches ); + else + tBuf.Append ( " conn %d wall %d.%03d found %d *""/ ", + iCid, iQueryTime/1000, iQueryTime%1000, tRes.m_iTotalMatches ); + + /////////////////////////////////// + // format request as SELECT query + /////////////////////////////////// + + tBuf.Append ( "SELECT %s FROM %s", q.m_sSelect.cstr(), q.m_sIndexes.cstr() ); + + // WHERE clause + // (m_sRawQuery is empty when using MySQL handler) + const CSphString & sQuery = q.m_sQuery; + if ( !sQuery.IsEmpty() || q.m_dFilters.GetLength() ) + { + bool bDeflowered = false; + + tBuf.Append ( " WHERE" ); + if ( !sQuery.IsEmpty() ) + { + tBuf.Append ( " MATCH('" ); + tBuf.AppendEscapedFixupSpace ( sQuery.cstr() ); + tBuf.Append ( "')" ); + bDeflowered = true; + } + + ARRAY_FOREACH ( i, q.m_dFilters ) + { + if ( bDeflowered ) + tBuf.Append ( " AND" ); + + const CSphFilterSettings & f = q.m_dFilters[i]; + switch ( f.m_eType ) + { + case SPH_FILTER_VALUES: + if ( f.m_dValues.GetLength()==1 ) + { + if ( f.m_bExclude ) + tBuf.Append ( " %s!="INT64_FMT, f.m_sAttrName.cstr(), (int64_t)f.m_dValues[0] ); + else + tBuf.Append ( " %s="INT64_FMT, f.m_sAttrName.cstr(), (int64_t)f.m_dValues[0] ); + } else + { + if ( f.m_bExclude ) + tBuf.Append ( " %s NOT IN (", f.m_sAttrName.cstr() ); + else + tBuf.Append ( " %s IN (", f.m_sAttrName.cstr() ); + + ARRAY_FOREACH ( j, f.m_dValues ) + { + if ( j ) + tBuf.Append ( ","INT64_FMT, (int64_t)f.m_dValues[j] ); + else + tBuf.Append ( INT64_FMT, (int64_t)f.m_dValues[j] ); + } + tBuf.Append ( ")" ); + } + break; + + case SPH_FILTER_RANGE: + if ( f.m_bExclude ) + tBuf.Append ( " %s NOT BETWEEN "INT64_FMT" AND "INT64_FMT, + f.m_sAttrName.cstr(), (int64_t)f.m_uMinValue, (int64_t)f.m_uMaxValue ); + else + tBuf.Append ( " %s BETWEEN "INT64_FMT" AND "INT64_FMT, + f.m_sAttrName.cstr(), (int64_t)f.m_uMinValue, (int64_t)f.m_uMaxValue ); + break; + + case SPH_FILTER_FLOATRANGE: + if ( f.m_bExclude ) + tBuf.Append ( " %s NOT BETWEEN %f AND %f", + f.m_sAttrName.cstr(), f.m_fMinValue, f.m_fMaxValue ); + else + tBuf.Append ( " %s BETWEEN %f AND %f", + f.m_sAttrName.cstr(), f.m_fMinValue, f.m_fMaxValue ); + break; + + default: + tBuf.Append ( " 1 /""* oops, unknown filter type *""/" ); + break; + } + } + } + + // ORDER BY and/or GROUP BY clause + if ( q.m_sGroupBy.IsEmpty() ) + { + if ( !q.m_sSortBy.IsEmpty() ) // case API SPH_MATCH_EXTENDED2 - SPH_SORT_RELEVANCE + tBuf.Append ( " ORDER BY %s", q.m_sSortBy.cstr() ); + + } else + { + tBuf.Append ( " GROUP BY %s", q.m_sGroupBy.cstr() ); + FormatOrderBy ( &tBuf, "WITHIN GROUP ORDER BY", q.m_eSort, q.m_sSortBy ); + if ( q.m_sGroupSortBy!="@group desc" ) + FormatOrderBy ( &tBuf, "ORDER BY", SPH_SORT_EXTENDED, q.m_sGroupSortBy ); + } + + // LIMIT clause + if ( q.m_iOffset!=0 || q.m_iLimit!=20 ) + tBuf.Append ( " LIMIT %d,%d", q.m_iOffset, q.m_iLimit ); + + // OPTION clause + int iOpts = 0; + + if ( q.m_iMaxMatches!=1000 ) + { + tBuf.Append ( iOpts++ ? ", " : " OPTION " ); + tBuf.Append ( "max_matches=%d", q.m_iMaxMatches ); + } + + if ( !q.m_sComment.IsEmpty() ) + { + tBuf.Append ( iOpts++ ? ", " : " OPTION " ); + tBuf.Append ( "comment='%s'", q.m_sComment.cstr() ); // FIXME! escape, replace newlines.. + } + + if ( q.m_eRanker!=SPH_RANK_DEFAULT ) + { + const char * sRanker = "proximity_bm25"; + switch ( q.m_eRanker ) + { + case SPH_RANK_BM25: sRanker = "bm25"; break; + case SPH_RANK_NONE: sRanker = "none"; break; + case SPH_RANK_WORDCOUNT: sRanker = "wordcount"; break; + case SPH_RANK_PROXIMITY: sRanker = "proximity"; break; + case SPH_RANK_MATCHANY: sRanker = "matchany"; break; + case SPH_RANK_FIELDMASK: sRanker = "fieldmask"; break; + case SPH_RANK_SPH04: sRanker = "sph04"; break; + case SPH_RANK_EXPR: sRanker = "expr"; break; + default: break; + } + + tBuf.Append ( iOpts++ ? ", " : " OPTION " ); + tBuf.Append ( "ranker=%s", sRanker ); + } + + // finish SQL statement + tBuf.Append ( ";" ); + + /////////////// + // query stats + /////////////// + + if ( !tRes.m_sError.IsEmpty() ) + { + // all we have is an error + tBuf.Append ( " # error=%s", tRes.m_sError.cstr() ); + + } else if ( g_bIOStats || g_bCpuStats || dAgentTimes.GetLength() || !tRes.m_sWarning.IsEmpty() ) + { + // got some extra data, add a comment + tBuf.Append ( " #" ); + + // performance counters + if ( g_bIOStats || g_bCpuStats ) + { + const CSphIOStats & IOStats = sphStopIOStats (); + + if ( g_bIOStats ) + tBuf.Append ( " ios=%d kb=%d.%d ioms=%d.%d", + IOStats.m_iReadOps, (int)( IOStats.m_iReadBytes/1024 ), (int)( IOStats.m_iReadBytes%1024 )*10/1024, + (int)( IOStats.m_iReadTime/1000 ), (int)( IOStats.m_iReadTime%1000 )/100 ); + + if ( g_bCpuStats ) + tBuf.Append ( " cpums=%d.%d", (int)( tRes.m_iCpuTime/1000 ), (int)( tRes.m_iCpuTime%1000 )/100 ); + } + + // per-agent times + if ( dAgentTimes.GetLength() ) + { + tBuf.Append ( " agents=(" ); + ARRAY_FOREACH ( i, dAgentTimes ) + tBuf.Append ( i ? ", %d.%03d" : "%d.%03d", + (int)(dAgentTimes[i]/1000000), + (int)((dAgentTimes[i]/1000)%1000) ); + + tBuf.Append ( ")" ); + } + + // warning + if ( !tRes.m_sWarning.IsEmpty() ) + tBuf.Append ( " warning=%s", tRes.m_sWarning.cstr() ); + } + + // line feed + tBuf.Append ( "\n" ); + + lseek ( g_iQueryLogFile, 0, SEEK_END ); + sphWrite ( g_iQueryLogFile, tBuf.cstr(), tBuf.Length() ); +} + + +void LogQuery ( const CSphQuery & q, const CSphQueryResult & tRes, const CSphVector & dAgentTimes ) +{ + switch ( g_eLogFormat ) + { + case LOG_FORMAT_PLAIN: LogQueryPlain ( q, tRes ); break; + case LOG_FORMAT_SPHINXQL: LogQuerySphinxql ( q, tRes, dAgentTimes ); break; + } +} + +////////////////////////////////////////////////////////////////////////// + +int CalcResultLength ( int iVer, const CSphQueryResult * pRes, const CSphVector & dTag2Pools, bool bExtendedStat ) +{ + int iRespLen = 0; + + // query status + if ( iVer>=0x10D ) + { + // multi-query status + iRespLen += 4; // status code + + if ( !pRes->m_sError.IsEmpty() ) + return iRespLen + 4 +strlen ( pRes->m_sError.cstr() ); + + if ( !pRes->m_sWarning.IsEmpty() ) + iRespLen += 4+strlen ( pRes->m_sWarning.cstr() ); + + } else if ( iVer>=0x106 ) + { + // warning message + if ( !pRes->m_sWarning.IsEmpty() ) + iRespLen += 4 + strlen ( pRes->m_sWarning.cstr() ); + } + + // query stats + iRespLen += 20; + + // schema + if ( iVer>=0x102 ) + { + iRespLen += 8; // 4 for field count, 4 for attr count + ARRAY_FOREACH ( i, pRes->m_tSchema.m_dFields ) + iRespLen += 4 + strlen ( pRes->m_tSchema.m_dFields[i].m_sName.cstr() ); // namelen, name + for ( int i=0; im_tSchema.GetAttrsCount(); i++ ) + iRespLen += 8 + strlen ( pRes->m_tSchema.GetAttr(i).m_sName.cstr() ); // namelen, name, type + } + + // matches + if ( iVer<0x102 ) + iRespLen += 16*pRes->m_iCount; // matches + else if ( iVer<0x108 ) + iRespLen += ( 8+4*pRes->m_tSchema.GetAttrsCount() )*pRes->m_iCount; // matches + else + iRespLen += 4 + ( 8+4*USE_64BIT+4*pRes->m_tSchema.GetAttrsCount() )*pRes->m_iCount; // id64 tag and matches + + if ( iVer>=0x114 ) + { + // 64bit matches + int iWideAttrs = 0; + for ( int i=0; im_tSchema.GetAttrsCount(); i++ ) + if ( pRes->m_tSchema.GetAttr(i).m_eAttrType==SPH_ATTR_BIGINT ) + iWideAttrs++; + iRespLen += 4*pRes->m_iCount*iWideAttrs; // extra 4 bytes per attr per match + } + + // agents send additional flag from words statistics + if ( bExtendedStat ) + iRespLen += pRes->m_hWordStats.GetLength(); + + pRes->m_hWordStats.IterateStart(); + while ( pRes->m_hWordStats.IterateNext() ) // per-word stats + iRespLen += 12 + strlen ( pRes->m_hWordStats.IterateGetKey().cstr() ); // wordlen, word, docs, hits + + // MVA and string values + CSphVector dMvaItems; + CSphVector dStringItems; + for ( int i=0; im_tSchema.GetAttrsCount(); i++ ) + { + const CSphColumnInfo & tCol = pRes->m_tSchema.GetAttr(i); + if ( tCol.m_eAttrType==SPH_ATTR_UINT32SET || tCol.m_eAttrType==SPH_ATTR_UINT64SET ) + dMvaItems.Add ( tCol.m_tLocator ); + if ( tCol.m_eAttrType==SPH_ATTR_STRING ) + dStringItems.Add ( tCol.m_tLocator ); + } + + if ( iVer>=0x10C && dMvaItems.GetLength() ) + { + for ( int i=0; im_iCount; i++ ) + { + const CSphMatch & tMatch = pRes->m_dMatches [ pRes->m_iOffset+i ]; + const DWORD * pMvaPool = dTag2Pools [ tMatch.m_iTag ].m_pMva; + ARRAY_FOREACH ( j, dMvaItems ) + { + assert ( tMatch.GetAttr ( dMvaItems[j] )==0 || pMvaPool ); + const DWORD * pMva = tMatch.GetAttrMVA ( dMvaItems[j], pMvaPool ); + if ( pMva ) + iRespLen += pMva[0]*4; // FIXME? maybe add some sanity check here + } + } + } + + if ( iVer>=0x117 && dStringItems.GetLength() ) + { + for ( int i=0; im_iCount; i++ ) + { + const CSphMatch & tMatch = pRes->m_dMatches [ pRes->m_iOffset+i ]; + const BYTE * pStrings = dTag2Pools [ tMatch.m_iTag ].m_pStrings; + ARRAY_FOREACH ( j, dStringItems ) + { + DWORD uOffset = (DWORD) tMatch.GetAttr ( dStringItems[j] ); + assert ( !uOffset || pStrings ); + if ( uOffset ) // magic zero + iRespLen += sphUnpackStr ( pStrings+uOffset, NULL ); + } + } + } + + return iRespLen; +} + + +void SendResult ( int iVer, NetOutputBuffer_c & tOut, const CSphQueryResult * pRes, const CSphVector & dTag2Pools, bool bExtendedStat ) +{ + // status + if ( iVer>=0x10D ) + { + // multi-query status + bool bError = !pRes->m_sError.IsEmpty(); + bool bWarning = !bError && !pRes->m_sWarning.IsEmpty(); + + if ( bError ) + { + tOut.SendInt ( SEARCHD_ERROR ); + tOut.SendString ( pRes->m_sError.cstr() ); + if ( g_bOptNoDetach && g_eLogFormat!=LOG_FORMAT_SPHINXQL ) + sphInfo ( "query error: %s", pRes->m_sError.cstr() ); + return; + + } else if ( bWarning ) + { + tOut.SendInt ( SEARCHD_WARNING ); + tOut.SendString ( pRes->m_sWarning.cstr() ); + if ( g_bOptNoDetach && g_eLogFormat!=LOG_FORMAT_SPHINXQL ) + sphInfo ( "query warning: %s", pRes->m_sWarning.cstr() ); + } else + { + tOut.SendInt ( SEARCHD_OK ); + } + + } else + { + // single-query warning + if ( iVer>=0x106 && !pRes->m_sWarning.IsEmpty() ) + tOut.SendString ( pRes->m_sWarning.cstr() ); + } + + // send schema + if ( iVer>=0x102 ) + { + tOut.SendInt ( pRes->m_tSchema.m_dFields.GetLength() ); + ARRAY_FOREACH ( i, pRes->m_tSchema.m_dFields ) + tOut.SendString ( pRes->m_tSchema.m_dFields[i].m_sName.cstr() ); + + tOut.SendInt ( pRes->m_tSchema.GetAttrsCount() ); + for ( int i=0; im_tSchema.GetAttrsCount(); i++ ) + { + const CSphColumnInfo & tCol = pRes->m_tSchema.GetAttr(i); + tOut.SendString ( tCol.m_sName.cstr() ); + tOut.SendDword ( (DWORD)tCol.m_eAttrType ); + } + } + + // send matches + CSphAttrLocator iGIDLoc, iTSLoc; + if ( iVer<=0x101 ) + { + for ( int i=0; im_tSchema.GetAttrsCount(); i++ ) + { + const CSphColumnInfo & tAttr = pRes->m_tSchema.GetAttr(i); + + if ( iTSLoc.m_iBitOffset<0 && tAttr.m_eAttrType==SPH_ATTR_TIMESTAMP ) + iTSLoc = tAttr.m_tLocator; + + if ( iGIDLoc.m_iBitOffset<0 && tAttr.m_eAttrType==SPH_ATTR_INTEGER ) + iGIDLoc = tAttr.m_tLocator; + } + } + + tOut.SendInt ( pRes->m_iCount ); + if ( iVer>=0x108 ) + tOut.SendInt ( USE_64BIT ); + + for ( int i=0; im_iCount; i++ ) + { + const CSphMatch & tMatch = pRes->m_dMatches [ pRes->m_iOffset+i ]; +#if USE_64BIT + if ( iVer>=0x108 ) + tOut.SendUint64 ( tMatch.m_iDocID ); + else +#endif + tOut.SendDword ( (DWORD)tMatch.m_iDocID ); + + if ( iVer<=0x101 ) + { + tOut.SendDword ( iGIDLoc.m_iBitOffset>=0 ? (DWORD) tMatch.GetAttr ( iGIDLoc ) : 1 ); + tOut.SendDword ( iTSLoc.m_iBitOffset>=0 ? (DWORD) tMatch.GetAttr ( iTSLoc ) : 1 ); + tOut.SendInt ( tMatch.m_iWeight ); + } else + { + tOut.SendInt ( tMatch.m_iWeight ); + + const DWORD * pMvaPool = dTag2Pools [ tMatch.m_iTag ].m_pMva; + const BYTE * pStrings = dTag2Pools [ tMatch.m_iTag ].m_pStrings; + + assert ( tMatch.m_pStatic || !pRes->m_tSchema.GetStaticSize() ); +#if 0 + // not correct any more because of internal attrs (such as string sorting ptrs) + assert ( tMatch.m_pDynamic || !pRes->m_tSchema.GetDynamicSize() ); + assert ( !tMatch.m_pDynamic || (int)tMatch.m_pDynamic[-1]==pRes->m_tSchema.GetDynamicSize() ); +#endif + + for ( int j=0; jm_tSchema.GetAttrsCount(); j++ ) + { + const CSphColumnInfo & tAttr = pRes->m_tSchema.GetAttr(j); + if ( tAttr.m_eAttrType==SPH_ATTR_UINT32SET || tAttr.m_eAttrType==SPH_ATTR_UINT64SET ) + { + assert ( tMatch.GetAttr ( tAttr.m_tLocator )==0 || pMvaPool ); + const DWORD * pValues = tMatch.GetAttrMVA ( tAttr.m_tLocator, pMvaPool ); + if ( iVer<0x10C || !pValues ) + { + // for older clients, fixups column value to 0 + // for newer clients, means that there are 0 values + tOut.SendDword ( 0 ); + } else + { + // send MVA values + int iValues = *pValues++; + tOut.SendDword ( iValues ); + if ( tAttr.m_eAttrType==SPH_ATTR_UINT64SET ) + { + assert ( ( iValues%2 )==0 ); + while ( iValues ) + { + uint64_t uVal = MVA_UPSIZE ( pValues ); + tOut.SendUint64 ( uVal ); + pValues += 2; + iValues -= 2; + } + } else + { + while ( iValues-- ) + tOut.SendDword ( *pValues++ ); + } + } + + } else if ( tAttr.m_eAttrType==SPH_ATTR_STRING ) + { + // send string attr + if ( iVer<0x117 ) + { + // for older clients, just send int value of 0 + tOut.SendDword ( 0 ); + } else + { + // for newer clients, send binary string + DWORD uOffset = (DWORD) tMatch.GetAttr ( tAttr.m_tLocator ); + if ( !uOffset ) // magic zero + { + tOut.SendDword ( 0 ); // null string + } else + { + const BYTE * pStr; + assert ( pStrings ); + int iLen = sphUnpackStr ( pStrings+uOffset, &pStr ); + tOut.SendDword ( iLen ); + tOut.SendBytes ( pStr, iLen ); + } + } + + } else + { + // send plain attr + if ( tAttr.m_eAttrType==SPH_ATTR_FLOAT ) + tOut.SendFloat ( tMatch.GetAttrFloat ( tAttr.m_tLocator ) ); + else if ( iVer>=0x114 && tAttr.m_eAttrType==SPH_ATTR_BIGINT ) + tOut.SendUint64 ( tMatch.GetAttr ( tAttr.m_tLocator ) ); + else + tOut.SendDword ( (DWORD)tMatch.GetAttr ( tAttr.m_tLocator ) ); + } + } + } + } + tOut.SendInt ( pRes->m_dMatches.GetLength() ); + tOut.SendInt ( pRes->m_iTotalMatches ); + tOut.SendInt ( Max ( pRes->m_iQueryTime, 0 ) ); + tOut.SendInt ( pRes->m_hWordStats.GetLength() ); + + pRes->m_hWordStats.IterateStart(); + while ( pRes->m_hWordStats.IterateNext() ) + { + const CSphQueryResultMeta::WordStat_t & tStat = pRes->m_hWordStats.IterateGet(); + tOut.SendString ( pRes->m_hWordStats.IterateGetKey().cstr() ); + tOut.SendInt ( tStat.m_iDocs ); + tOut.SendInt ( tStat.m_iHits ); + if ( bExtendedStat ) + tOut.SendByte ( tStat.m_bExpanded ); + } +} + +///////////////////////////////////////////////////////////////////////////// + +struct AggrResult_t : CSphQueryResult +{ + int m_iTag; ///< current tag + CSphVector m_dSchemas; ///< aggregated resultsets schemas (for schema minimization) + CSphVector m_dMatchCounts; ///< aggregated resultsets lengths (for schema minimization) + CSphVector m_dLockedAttrs; ///< indexes which are hold in the memory untill sending result + CSphVector m_dTag2Pools; ///< tag to MVA and strings storage pools mapping +}; + + +struct TaggedMatchSorter_fn : public SphAccessor_T +{ + void CopyKey ( CSphMatch * pMed, CSphMatch * pVal ) const + { + pMed->m_iDocID = pVal->m_iDocID; + pMed->m_iTag = pVal->m_iTag; + } + + bool IsLess ( const CSphMatch & a, const CSphMatch & b ) const + { + return ( a.m_iDocID < b.m_iDocID ) || ( a.m_iDocID==b.m_iDocID && a.m_iTag > b.m_iTag ); + } + + // inherited swap does not work on gcc + void Swap ( CSphMatch * a, CSphMatch * b ) const + { + ::Swap ( *a, *b ); + } +}; + +// just to avoid the const_cast of the schema (i.e, return writable columns) +// also to make possible several members refer to one and same locator. +class CVirtualSchema : public CSphSchema +{ +public: + inline CSphColumnInfo & LastColumn() { return m_dAttrs.Last(); } + inline CSphColumnInfo & GetWAttr ( int iIndex ) { return m_dAttrs[iIndex]; } + inline CSphVector & GetWAttrs () { return m_dAttrs; } + inline void AlignSizes ( const CSphSchema& tProof ) + { + m_dDynamicUsed.Resize ( tProof.GetDynamicSize() ); + m_iStaticSize = tProof.GetStaticSize(); + } +}; + +void MkIdAttribute ( CSphColumnInfo * pId ) +{ + pId->m_tLocator.m_bDynamic = true; + pId->m_sName = "id"; + pId->m_eAttrType = USE_64BIT ? SPH_ATTR_BIGINT : SPH_ATTR_INTEGER; + pId->m_tLocator.m_iBitOffset = -8*(int)sizeof(SphDocID_t); + pId->m_tLocator.m_iBitCount = 8*sizeof(SphDocID_t); +} + +void AddIDAttribute ( CVirtualSchema * pSchema ) +{ + assert ( pSchema ); + if ( pSchema->GetAttrIndex("id")>=0 ) + return; + + CSphColumnInfo tId; + MkIdAttribute ( &tId ); + pSchema->GetWAttrs().Insert ( 0, tId ); +} + +inline bool IsIDAttribute ( const CSphColumnInfo & tTarget ) +{ + return tTarget.m_tLocator.IsID(); +} + +// swap the schema into the new one +void AdoptSchema ( AggrResult_t * pRes, CSphSchema * pSchema ) +{ + pSchema->m_dFields = pRes->m_tSchema.m_dFields; + pRes->m_tSchema = *pSchema; +} + +void AdoptAliasedSchema ( AggrResult_t & tRes, CVirtualSchema * pSchema ) +{ + pSchema->AlignSizes ( tRes.m_tSchema ); + AdoptSchema ( &tRes, pSchema ); +} + +void RemapResult ( CSphSchema * pTarget, AggrResult_t * pRes, bool bMultiSchema=true ) +{ + int iCur = 0; + int * dMapFrom = NULL; + + if ( pTarget->GetAttrsCount() ) + dMapFrom = new int [ pTarget->GetAttrsCount() ]; + + ARRAY_FOREACH ( iSchema, pRes->m_dSchemas ) + { + CSphSchema& dSchema = bMultiSchema?pRes->m_dSchemas[iSchema]:pRes->m_tSchema; + for ( int i=0; iGetAttrsCount(); i++ ) + { + dMapFrom[i] = dSchema.GetAttrIndex ( pTarget->GetAttr(i).m_sName.cstr() ); + assert ( dMapFrom[i]>=0 + || IsIDAttribute ( pTarget->GetAttr(i) ) + || sphIsSortStringInternal ( pTarget->GetAttr(i).m_sName.cstr() ) + ); + } + int iLimit = bMultiSchema + ? ( iCur + pRes->m_dMatchCounts[iSchema] ) + : pRes->m_iTotalMatches; + iLimit = Min ( iLimit, pRes->m_dMatches.GetLength() ); + for ( int i=iCur;im_dMatches[i]; + + // create new and shiny (and properly sized) match + CSphMatch tRow; + tRow.Reset ( pTarget->GetDynamicSize() ); + tRow.m_iDocID = tMatch.m_iDocID; + tRow.m_iWeight = tMatch.m_iWeight; + tRow.m_iTag = tMatch.m_iTag; + + // remap attrs + for ( int j=0; jGetAttrsCount(); j++ ) + { + const CSphColumnInfo & tDst = pTarget->GetAttr(j); + // we could keep some of the rows static + // and so, avoid the duplication of the data. + if ( !tDst.m_tLocator.m_bDynamic ) + { + assert ( dMapFrom[j]<0 || !dSchema.GetAttr ( dMapFrom[j] ).m_tLocator.m_bDynamic ); + tRow.m_pStatic = tMatch.m_pStatic; + } else if ( dMapFrom[j]>=0 ) + { + const CSphColumnInfo & tSrc = dSchema.GetAttr ( dMapFrom[j] ); + tRow.SetAttr ( tDst.m_tLocator, tMatch.GetAttr ( tSrc.m_tLocator ) ); + } + } + // swap out old (most likely wrong sized) match + Swap ( tMatch, tRow ); + } + + if ( !bMultiSchema ) + break; + + iCur = iLimit; + } + + if ( bMultiSchema ) + assert ( iCur==pRes->m_dMatches.GetLength() ); + SafeDeleteArray ( dMapFrom ); + if ( &pRes->m_tSchema!=pTarget ) + AdoptSchema ( pRes, pTarget ); +} + +// rebuild the results itemlist expanding stars +const CSphVector * ExpandAsterisk ( const CSphSchema & tSchema, const CSphVector & tItems, CSphVector * pExpanded, bool bNoID=false ) +{ + // the result schema usually is the index schema + calculated items + @-items + // we need to extract the index schema only - so, look at the items + // and cutoff from calculated or @. + int iSchemaBound = tSchema.GetAttrsCount(); + bool bStar = false; + ARRAY_FOREACH ( i, tItems ) + { + const CSphQueryItem & tItem = tItems[i]; + if ( tItem.m_sAlias.cstr() ) + { + int j = tSchema.GetAttrIndex ( tItem.m_sAlias.cstr() ); + if ( j>=0 ) + iSchemaBound = Min ( iSchemaBound, j ); + } + bStar = bStar || tItem.m_sExpr=="*"; + } + // no stars? Nothing to do. + if ( !bStar ) + return & tItems; + + while ( iSchemaBound && tSchema.GetAttr ( iSchemaBound-1 ).m_sName.cstr()[0]=='@' ) + iSchemaBound--; + ARRAY_FOREACH ( i, tItems ) + { + if ( tItems[i].m_sExpr=="*" ) + { // asterisk expands to 'id' + all the items from the schema + if ( tSchema.GetAttrIndex ( "id" )<0 && !bNoID ) + { + CSphQueryItem& tItem = pExpanded->Add(); + tItem.m_sExpr = "id"; + } + for ( int j=0; jAdd(); + tItem.m_sExpr = tSchema.GetAttr ( j ).m_sName; + } + } else + pExpanded->Add ( tItems[i] ); + } + return pExpanded; +} + + +static void RemapStrings ( ISphMatchSorter * pSorter, AggrResult_t & tRes ) +{ + // do match ptr pre-calc if its "order by string" case + CSphVector dRemapAttr; + if ( pSorter && pSorter->UsesAttrs() && sphSortGetStringRemap ( pSorter->GetSchema(), tRes.m_tSchema, dRemapAttr ) ) + { + int iCur = 0; + ARRAY_FOREACH ( iSchema, tRes.m_dSchemas ) + { + for ( int i=iCur; iIsGroupby () ) + { + // groupby sorter does that automagically + pSorter->SetMVAPool ( NULL ); // because we must be able to group on @groupby anyway + pSorter->SetStringPool ( NULL ); + ARRAY_FOREACH ( i, tRes.m_dMatches ) + { + CSphMatch & tMatch = tRes.m_dMatches[i]; + + if ( !pSorter->PushGrouped ( tMatch ) ) + iDupes++; + } + } else + { + // normal sorter needs massasging + // sort by docid and then by tag to guarantee the replacement order + TaggedMatchSorter_fn fnSort; + sphSort ( tRes.m_dMatches.Begin(), tRes.m_dMatches.GetLength(), fnSort, fnSort ); + + // fold them matches + if ( tQuery.m_dIndexWeights.GetLength() ) + { + // if there were per-index weights, compute weighted ranks sum + int iCur = 0; + int iMax = tRes.m_dMatches.GetLength(); + + while ( iCurPush ( tMatch ); + } + + } else + { + // by default, simply remove dupes (select first by tag) + ARRAY_FOREACH ( i, tRes.m_dMatches ) + { + if ( i==0 || tRes.m_dMatches[i].m_iDocID!=tRes.m_dMatches[i-1].m_iDocID ) + pSorter->Push ( tRes.m_dMatches[i] ); + else + iDupes++; + } + } + } + + tRes.m_dMatches.Reset (); + sphFlattenQueue ( pSorter, &tRes, -1 ); + SafeDelete ( pSorter ); + + return iDupes; +} + + +static void RecoverAggregateFunctions ( const CSphQuery & tQuery, const AggrResult_t & tRes ) +{ + ARRAY_FOREACH ( i, tQuery.m_dItems ) + { + const CSphQueryItem & tItem = tQuery.m_dItems[i]; + if ( tItem.m_eAggrFunc==SPH_AGGR_NONE ) + continue; + + for ( int j=0; j ( tRes.m_tSchema.GetAttr(j) ); + if ( tCol.m_sName==tItem.m_sAlias ) + { + assert ( tCol.m_eAggrFunc==SPH_AGGR_NONE ); + tCol.m_eAggrFunc = tItem.m_eAggrFunc; + } + } + } +} + + +bool MinimizeAggrResult ( AggrResult_t & tRes, const CSphQuery & tQuery, bool bHadLocalIndexes, CSphSchema* pExtraSchema, bool bFromSphinxql=false ) +{ + // sanity check + int iExpected = 0; + ARRAY_FOREACH ( i, tRes.m_dMatchCounts ) + iExpected += tRes.m_dMatchCounts[i]; + + if ( iExpected!=tRes.m_dMatches.GetLength() ) + { + tRes.m_sError.SetSprintf ( "INTERNAL ERROR: expected %d matches in combined result set, got %d", + iExpected, tRes.m_dMatches.GetLength() ); + tRes.m_iSuccesses = 0; + return false; + } + + if ( !( bFromSphinxql || tRes.m_dMatches.GetLength() ) ) + return true; + + // build minimal schema + if ( !tRes.m_dSchemas.GetLength() && bFromSphinxql ) + { + AddIDAttribute ( (CVirtualSchema*) &tRes.m_tSchema ); + return true; + } + tRes.m_tSchema = tRes.m_dSchemas[0]; + bool bAllEqual = true; + bool bAgent = tQuery.m_bAgent; + bool bUsualApi = !( bAgent || bFromSphinxql ); + + for ( int i=1; i tExtItems; + const CSphVector * pSelectItems = ExpandAsterisk ( tRes.m_tSchema, tQuery.m_dItems, &tExtItems, bUsualApi ); + + if ( !bUsualApi ) + { + AddIDAttribute ( (CVirtualSchema*) &tRes.m_tSchema ); + ARRAY_FOREACH ( i, tRes.m_dSchemas ) + AddIDAttribute ( (CVirtualSchema*) &tRes.m_dSchemas[i] ); + } + + // the final result schema - for collections, etc + // we can't construct the random final schema right now, since + // the final sorter needs the schema fields in specific order: + + // shortcuts + CSphString sCount("@count"); + CSphString sWeight("@weight"); + + // truly virtual schema which contains unique necessary fields. + CVirtualSchema tInternalSchema; + // truly virtual schema for final result returning + CVirtualSchema tFrontendSchema; + tFrontendSchema.GetWAttrs().Resize ( pSelectItems->GetLength() ); + + CSphVector dKnownItems; + int iKnownItems = 0; + if ( pSelectItems->GetLength() ) + { + for ( int i=0; iGetAttrsCount() ) + { + for ( int j=0; jGetAttrsCount(); j++ ) + if ( pExtraSchema->GetAttr(j).m_sName==tCol.m_sName ) + bAdd = true; + // the extra schema is not null, but empty - and we have no local agents + // so, the schema of result is already aligned to the extra, just add it + } else if ( !bHadLocalIndexes ) + bAdd = true; + } + if ( !bAdd && bUsualApi && *tCol.m_sName.cstr()=='@' ) + bAdd = true; + + if ( !bAdd ) + continue; + } + + // if before all schemas were proved as equal, and the tCol taken from current schema is static - + // this is no reason now to make it dynamic. + bool bDynamic = bAllEqual?tCol.m_tLocator.m_bDynamic:true; + tInternalSchema.AddAttr ( tCol, bDynamic ); + if ( !bDynamic ) + { + // all schemas are equal, so all offsets and bitcounts also equal. + // If we Add the static attribute which already exists in result, we need + // not to corrupt it's locator. So, in this case let us force the locator + // to the old data. + CSphColumnInfo & tNewCol = tInternalSchema.LastColumn(); + assert ( !tNewCol.m_tLocator.m_bDynamic ); + tNewCol.m_tLocator = tCol.m_tLocator; + } + } + + bAllEqual &= tRes.m_tSchema.GetAttrsCount()==tInternalSchema.GetAttrsCount(); + } + + // check if we actually have all required columns already + if ( iKnownItemsGetLength() ) + { + tRes.m_iSuccesses = 0; + dKnownItems.Sort(); + ARRAY_FOREACH ( j, dKnownItems ) + if ( j!=dKnownItems[j] ) + { + tRes.m_sError.SetSprintf ( "INTERNAL ERROR: the column '%s/%s' does not present in result set schema", + (*pSelectItems)[j].m_sExpr.cstr(), (*pSelectItems)[j].m_sAlias.cstr() ); + return false; + } + if ( dKnownItems.GetLength()==pSelectItems->GetLength()-1 ) + { + tRes.m_sError.SetSprintf ( "INTERNAL ERROR: the column '%s/%s' does not present in result set schema", + pSelectItems->Last().m_sExpr.cstr(), pSelectItems->Last().m_sAlias.cstr() ); + return false; + } + tRes.m_sError = "INTERNAL ERROR: some columns does not present in result set schema"; + return false; + } + + // finalize the tFrontendSchema - switch back m_iIndex field + // and set up the locators for the fields + if ( !bAgent ) + { + ARRAY_FOREACH ( i, tFrontendSchema.GetWAttrs() ) + { + CSphColumnInfo & tCol = tFrontendSchema.GetWAttr(i); + const CSphColumnInfo & tSource = tInternalSchema.GetAttr ( tCol.m_iIndex ); + tCol.m_tLocator = tSource.m_tLocator; + tCol.m_eAttrType = tSource.m_eAttrType; + tCol.m_iIndex = -1; + } + } + + // tricky bit + // in purely distributed case, all schemas are received from the wire, and miss aggregate functions info + // thus, we need to re-assign that info + if ( !bHadLocalIndexes ) + RecoverAggregateFunctions ( tQuery, tRes ); + + // we do not need to re-sort if there's exactly one result set + if ( tRes.m_iSuccesses==1 ) + { + // convert all matches to minimal schema + if ( !bAllEqual ) + RemapResult ( &tInternalSchema, &tRes ); + if ( !bAgent ) + AdoptAliasedSchema ( tRes, &tFrontendSchema ); + return true; + } + + // if there's more than one result set, we need to re-sort the matches + // so we need to bring matches to the schema that the *sorter* wants + // so we need to create the sorter before conversion + // + // create queue + // at this point, we do not need to compute anything; it all must be here + ISphMatchSorter * pSorter = sphCreateQueue ( &tQuery, tRes.m_tSchema, tRes.m_sError, false ); + if ( !pSorter ) + return false; + + // reset bAllEqual flag if sorter makes new attributes + if ( bAllEqual ) + { + // at first we count already existed internal attributes + // then check if sorter makes more + CSphVector dRemapAttr; + sphSortGetStringRemap ( tRes.m_tSchema, tRes.m_tSchema, dRemapAttr ); + int iRemapCount = dRemapAttr.GetLength(); + sphSortGetStringRemap ( pSorter->GetSchema(), tRes.m_tSchema, dRemapAttr ); + + bAllEqual = ( dRemapAttr.GetLength()<=iRemapCount ); + } + + // sorter expects this + tRes.m_tSchema = pSorter->GetSchema(); + + // convert all matches to sorter schema - at least to manage all static to dynamic + if ( !bAllEqual ) + RemapResult ( &tRes.m_tSchema, &tRes ); + + RemapStrings ( pSorter, tRes ); + tRes.m_iTotalMatches -= KillAllDupes ( pSorter, tRes, tQuery ); + + if ( !bAllEqual ) + RemapResult ( &tInternalSchema, &tRes, false ); + if ( !bAgent ) + AdoptAliasedSchema ( tRes, &tFrontendSchema ); + return true; +} + + +bool MinimizeAggrResultCompat ( AggrResult_t & tRes, const CSphQuery & tQuery, bool bHadLocalIndexes ) +{ + // sanity check + int iExpected = 0; + ARRAY_FOREACH ( i, tRes.m_dMatchCounts ) + iExpected += tRes.m_dMatchCounts[i]; + + if ( iExpected!=tRes.m_dMatches.GetLength() ) + { + tRes.m_sError.SetSprintf ( "INTERNAL ERROR: expected %d matches in combined result set, got %d", + iExpected, tRes.m_dMatches.GetLength() ); + return false; + } + + if ( !tRes.m_dMatches.GetLength() ) + return true; + + // build minimal schema + bool bAllEqual = true; + tRes.m_tSchema = tRes.m_dSchemas[0]; + for ( int i=1; iGetWAttrs().Remove(iStar); + } + + if ( !bStar && tQuery.m_dItems.GetLength() ) + { + CSphSchema tItems; + for ( int i=0; i dRemapAttr; + sphSortGetStringRemap ( tRes.m_tSchema, tRes.m_tSchema, dRemapAttr ); + int iRemapCount = dRemapAttr.GetLength(); + sphSortGetStringRemap ( pSorter->GetSchema(), tRes.m_tSchema, dRemapAttr ); + + bAllEqual = ( dRemapAttr.GetLength()<=iRemapCount ); + } + + // sorter expects this + tRes.m_tSchema = pSorter->GetSchema(); + } + + // convert all matches to minimal schema + if ( !bAllEqual ) + { + int iCur = 0; + CSphVector dMapFrom ( tRes.m_tSchema.GetAttrsCount() ); + + ARRAY_FOREACH ( iSchema, tRes.m_dSchemas ) + { + dMapFrom.Resize ( 0 ); + for ( int i=0; i=0 || sphIsSortStringInternal ( tRes.m_tSchema.GetAttr(i).m_sName.cstr() ) ); + } + + for ( int i=iCur; iInit(); + } + + ~CSphSchemaMT() + { + if ( m_pLock ) + Verify ( m_pLock->Done() ); + SafeDelete ( m_pLock ) + } + + // get wlocked entry, only if it is not yet touched + inline CSphSchemaMT * GetVirgin () + { + if ( !m_pLock ) + return this; + + if ( m_pLock->WriteLock() ) + { + if ( m_dAttrs.GetLength()!=0 ) // not already a virgin + { + m_pLock->Unlock(); + return NULL; + } + return this; + } else + { + sphLogDebug ( "WriteLock %p failed", this ); + assert ( false ); + } + + return NULL; + } + + inline CSphSchemaMT * RLock() + { + if ( !m_pLock ) + return this; + + if ( !m_pLock->ReadLock() ) + { + sphLogDebug ( "ReadLock %p failed", this ); + assert ( false ); + } + return this; + } + + inline void UnLock() const + { + if ( m_pLock ) + m_pLock->Unlock(); + } + +private: + mutable CSphRwlock * m_pLock; +}; + +class UnlockOnDestroy +{ +public: + explicit UnlockOnDestroy ( const CSphSchemaMT * lock ) : m_pLock ( lock ) + {} + inline ~UnlockOnDestroy() + { + if ( m_pLock ) + m_pLock->UnLock(); + } +private: + const CSphSchemaMT * m_pLock; +}; + +class SearchHandler_c +{ + friend void LocalSearchThreadFunc ( void * pArg ); + +public: + explicit SearchHandler_c ( int iQueries, bool bSphinxql=false ); + ~SearchHandler_c(); + void RunQueries (); ///< run all queries, get all results + +public: + CSphVector m_dQueries; ///< queries which i need to search + CSphVector m_dResults; ///< results which i obtained + CSphVector m_dFailuresSet; ///< failure logs for each query + CSphVector < CSphVector > m_dAgentTimes; ///< per-agent time stats + +protected: + void RunSubset ( int iStart, int iEnd ); ///< run queries against index(es) from first query in the subset + void RunLocalSearches ( ISphMatchSorter * pLocalSorter, const char * sDistName ); + void RunLocalSearchesMT (); + bool RunLocalSearch ( int iLocal, ISphMatchSorter ** ppSorters, CSphQueryResult ** pResults ) const; + + CSphVector m_dMvaStorage; + CSphVector m_dStringsStorage; + + int m_iStart; ///< subset start + int m_iEnd; ///< subset end + bool m_bMultiQueue; ///< whether current subset is subject to multi-queue optimization + mutable CSphVector m_dLocal; ///< local indexes for the current subset + mutable CSphVector m_dExtraSchemas; ///< the extra fields for agents + mutable CSphMutex m_tLock; + bool m_bSphinxql; ///< if the query get from sphinxql - to avoid applying sphinxql magick for others + + const ServedIndex_t * UseIndex ( int iLocal ) const; + void ReleaseIndex ( int iLocal ) const; +}; + + +SearchHandler_c::SearchHandler_c ( int iQueries, bool bSphinxql ) +{ + m_dQueries.Resize ( iQueries ); + m_dResults.Resize ( iQueries ); + m_dFailuresSet.Resize ( iQueries ); + m_dExtraSchemas.Resize ( iQueries ); + m_dAgentTimes.Resize ( iQueries ); + m_tLock.Init(); + m_bSphinxql = bSphinxql; + + ARRAY_FOREACH ( i, m_dResults ) + { + m_dResults[i].m_iTag = 1; // first avail tag for local storage ptrs + m_dResults[i].m_dTag2Pools.Add (); // reserved index 0 for remote mva storage ptr; we'll fix this up later + } +} + + +SearchHandler_c::~SearchHandler_c () +{ + m_tLock.Done(); + ARRAY_FOREACH ( i, m_dLocal ) + { + if ( m_dLocal[i].m_iValue>0 ) + g_pIndexes->GetUnlockedEntry ( m_dLocal[i].m_sName ).Unlock(); + } +} + + +const ServedIndex_t * SearchHandler_c::UseIndex ( int iLocal ) const +{ + assert ( iLocal>=0 && iLocalGetRlockedEntry ( m_dLocal[iLocal].m_sName ); + + m_tLock.Lock(); + + int iUseCount = m_dLocal[iLocal].m_iValue; + + const ServedIndex_t * pServed = NULL; + if ( iUseCount ) + pServed = &g_pIndexes->GetUnlockedEntry ( m_dLocal[iLocal].m_sName ); + else + pServed = g_pIndexes->GetRlockedEntry ( m_dLocal[iLocal].m_sName ); + + m_dLocal[iLocal].m_iValue = iUseCount + (pServed!=NULL); + + m_tLock.Unlock(); + + return pServed; +} + + +void SearchHandler_c::ReleaseIndex ( int iLocal ) const +{ + assert ( iLocal>=0 && iLocal=0 ); + m_dLocal[iLocal].m_iValue = iUseCount; + + if ( !iUseCount ) + g_pIndexes->GetUnlockedEntry ( m_dLocal[iLocal].m_sName ).Unlock(); + + m_tLock.Unlock(); +} + + +void SearchHandler_c::RunQueries () +{ + /////////////////////////////// + // choose path and run queries + /////////////////////////////// + + m_dMvaStorage.Reserve ( 1024 ); + m_dMvaStorage.Resize ( 0 ); + m_dMvaStorage.Add ( 0 ); // dummy value + m_dStringsStorage.Reserve ( 1024 ); + m_dStringsStorage.Resize ( 0 ); + m_dStringsStorage.Add ( 0 ); + + // check if all queries are to the same index + bool bSameIndex = false; + if ( m_dQueries.GetLength()>1 ) + { + bSameIndex = true; + ARRAY_FOREACH ( i, m_dQueries ) + if ( m_dQueries[i].m_sIndexes!=m_dQueries[0].m_sIndexes ) + { + bSameIndex = false; + break; + } + } + + if ( bSameIndex ) + { + /////////////////////////////// + // batch queries to same index + /////////////////////////////// + + RunSubset ( 0, m_dQueries.GetLength()-1 ); + ARRAY_FOREACH ( i, m_dQueries ) + LogQuery ( m_dQueries[i], m_dResults[i], m_dAgentTimes[i] ); + + } else + { + ///////////////////////////////////////////// + // fallback; just work each query separately + ///////////////////////////////////////////// + + ARRAY_FOREACH ( i, m_dQueries ) + { + RunSubset ( i, i ); + LogQuery ( m_dQueries[i], m_dResults[i], m_dAgentTimes[i] ); + } + } + + // final fixup + ARRAY_FOREACH ( i, m_dResults ) + { + m_dResults[i].m_dTag2Pools[0].m_pMva = m_dMvaStorage.Begin(); + m_dResults[i].m_dTag2Pools[0].m_pStrings = m_dStringsStorage.Begin(); + m_dResults[i].m_iMatches = m_dResults[i].m_dMatches.GetLength(); + } +} + + +/// return cpu time, in microseconds +int64_t sphCpuTimer () +{ +#ifdef HAVE_CLOCK_GETTIME + if ( !g_bCpuStats ) + return 0; + +#if defined(CLOCK_PROCESS_CPUTIME_ID) +// CPU time (user+sys), Linux style +#define LOC_CLOCK CLOCK_PROCESS_CPUTIME_ID +#elif defined(CLOCK_PROF) +// CPU time (user+sys), FreeBSD style +#define LOC_CLOCK CLOCK_PROF +#else +// POSIX fallback (wall time) +#define LOC_CLOCK CLOCK_REALTIME +#endif + + struct timespec tp; + if ( clock_gettime ( LOC_CLOCK, &tp ) ) + return 0; + + return tp.tv_sec*1000000 + tp.tv_nsec/1000; +#else + return 0; +#endif +} + + +struct LocalSearch_t +{ + int m_iLocal; + ISphMatchSorter ** m_ppSorters; + CSphQueryResult ** m_ppResults; + bool m_bResult; +}; + + +struct LocalSearchThreadContext_t +{ + SphThread_t m_tThd; + SearchHandler_c * m_pHandler; + CSphVector m_pSearches; +}; + + +void LocalSearchThreadFunc ( void * pArg ) +{ + LocalSearchThreadContext_t * pContext = (LocalSearchThreadContext_t*) pArg; + ARRAY_FOREACH ( i, pContext->m_pSearches ) + { + LocalSearch_t * pCall = pContext->m_pSearches[i]; + pCall->m_bResult = pContext->m_pHandler->RunLocalSearch ( pCall->m_iLocal, pCall->m_ppSorters, pCall->m_ppResults ); + } +} + + +static void MergeWordStats ( CSphQueryResultMeta & tDstResult, const SmallStringHash_T & hSrc, SearchFailuresLog_c * pLog, const char * sIndex ) +{ + assert ( pLog ); + + if ( !tDstResult.m_hWordStats.GetLength() ) + { + // nothing has been set yet; just copy + tDstResult.m_hWordStats = hSrc; + return; + } + + hSrc.IterateStart(); + while ( hSrc.IterateNext() ) + { + const CSphQueryResultMeta::WordStat_t * pDstStat = tDstResult.m_hWordStats ( hSrc.IterateGetKey() ); + const CSphQueryResultMeta::WordStat_t & tSrcStat = hSrc.IterateGet(); + + // all indexes should produce same words from the query + if ( !pDstStat && !tSrcStat.m_bExpanded ) + { + pLog->SubmitEx ( sIndex, "query words mismatch '%s'", hSrc.IterateGetKey().cstr() ); + } + + tDstResult.AddStat ( hSrc.IterateGetKey(), tSrcStat.m_iDocs, tSrcStat.m_iHits, tSrcStat.m_bExpanded ); + } +} + + +static void FlattenToRes ( ISphMatchSorter * pSorter, AggrResult_t & tRes ) +{ + assert ( pSorter ); + + if ( pSorter->GetLength() ) + { + tRes.m_dMatchCounts.Add ( pSorter->GetLength() ); + tRes.m_dSchemas.Add ( tRes.m_tSchema ); + PoolPtrs_t & tPoolPtrs = tRes.m_dTag2Pools.Add (); + tPoolPtrs.m_pMva = tRes.m_pMva; + tPoolPtrs.m_pStrings = tRes.m_pStrings; + sphFlattenQueue ( pSorter, &tRes, tRes.m_iTag++ ); + + // clean up for next index search + tRes.m_pMva = NULL; + tRes.m_pStrings = NULL; + } +} + + +void SearchHandler_c::RunLocalSearchesMT () +{ + int64_t tmLocal = sphMicroTimer(); + + // setup local searches + const int iQueries = m_iEnd-m_iStart+1; + CSphVector dLocals ( m_dLocal.GetLength() ); + CSphVector dResults ( m_dLocal.GetLength()*iQueries ); + CSphVector pSorters ( m_dLocal.GetLength()*iQueries ); + CSphVector pResults ( m_dLocal.GetLength()*iQueries ); + + ARRAY_FOREACH ( i, pResults ) + pResults[i] = &dResults[i]; + + ARRAY_FOREACH ( i, m_dLocal ) + { + dLocals[i].m_iLocal = i; + dLocals[i].m_ppSorters = &pSorters [ i*iQueries ]; + dLocals[i].m_ppResults = &pResults [ i*iQueries ]; + } + + // setup threads + // FIXME! implement better than naive index:thread mapping + // FIXME! maybe implement a thread-shared jobs queue + CSphVector dThreads ( Min ( g_iDistThreads, dLocals.GetLength() ) ); + int iCurThread = 0; + + ARRAY_FOREACH ( i, dLocals ) + { + dThreads[iCurThread].m_pSearches.Add ( &dLocals[i] ); + iCurThread = ( iCurThread+1 ) % g_iDistThreads; + } + + // prepare for multithread extra schema processing + for ( int iQuery=m_iStart; iQuery<=m_iEnd; iQuery++ ) + m_dExtraSchemas[iQuery].AwareMT(); + + // fire searcher threads + ARRAY_FOREACH ( i, dThreads ) + { + dThreads[i].m_pHandler = this; + sphThreadCreate ( &dThreads[i].m_tThd, LocalSearchThreadFunc, (void*)&dThreads[i] ); // FIXME! check result + } + + // wait for them to complete + ARRAY_FOREACH ( i, dThreads ) + sphThreadJoin ( &dThreads[i].m_tThd ); + + // now merge the results + ARRAY_FOREACH ( iLocal, dLocals ) + { + bool bResult = dLocals[iLocal].m_bResult; + const char * sLocal = m_dLocal[iLocal].m_sName.cstr(); + + if ( !bResult ) + { + // failed + for ( int iQuery=m_iStart; iQuery<=m_iEnd; iQuery++ ) + { + int iResultIndex = iLocal*iQueries; + if ( !m_bMultiQueue ) + iResultIndex += iQuery - m_iStart; + m_dFailuresSet[iQuery].Submit ( sLocal, dResults[iResultIndex].m_sError.cstr() ); + } + continue; + } + + // multi-query succeeded + for ( int iQuery=m_iStart; iQuery<=m_iEnd; iQuery++ ) + { + // base result set index + // in multi-queue case, the only (!) result set actually filled with meta info + // in non-multi-queue case, just a first index, we fix it below + int iResultIndex = iLocal*iQueries; + + // current sorter ALWAYS resides at this index, in all cases + // (current as in sorter for iQuery-th query against iLocal-th index) + int iSorterIndex = iLocal*iQueries + iQuery - m_iStart; + + if ( !m_bMultiQueue ) + { + // non-multi-queue case + // means that we have mere 1:1 mapping between results and sorters + // so let's adjust result set index + iResultIndex = iSorterIndex; + + } else if ( dResults[iResultIndex].m_iMultiplier==-1 ) + { + // multi-queue case + // need to additionally check per-query failures of MultiQueryEx + // those are reported through multiplier + // note that iSorterIndex just below is NOT a typo + // separate errors still go into separate result sets + // even though regular meta does not + m_dFailuresSet[iQuery].Submit ( sLocal, dResults[iSorterIndex].m_sError.cstr() ); + continue; + } + + // no sorter, no fun + ISphMatchSorter * pSorter = pSorters[iSorterIndex]; + if ( !pSorter ) + continue; + + // this one seems OK + AggrResult_t & tRes = m_dResults[iQuery]; + CSphQueryResult & tRaw = dResults[iResultIndex]; + + tRes.m_iSuccesses++; + tRes.m_tSchema = pSorter->GetSchema(); + tRes.m_iTotalMatches += pSorter->GetTotalCount(); + + tRes.m_pMva = tRaw.m_pMva; + tRes.m_pStrings = tRaw.m_pStrings; + MergeWordStats ( tRes, tRaw.m_hWordStats, &m_dFailuresSet[iQuery], sLocal ); + + // move external attributes storage from tRaw to actual result + tRaw.LeakStorages ( tRes ); + + tRes.m_iMultiplier = m_bMultiQueue ? iQueries : 1; + tRes.m_iCpuTime += tRaw.m_iCpuTime / tRes.m_iMultiplier; + + // extract matches from sorter + FlattenToRes ( pSorter, tRes ); + } + } + + ARRAY_FOREACH ( i, pSorters ) + SafeDelete ( pSorters[i] ); + + // update our wall time for every result set + tmLocal = sphMicroTimer() - tmLocal; + for ( int iQuery=m_iStart; iQuery<=m_iEnd; iQuery++ ) + m_dResults[iQuery].m_iQueryTime += (int)( tmLocal/1000 ); +} + +// invoked from MT searches. So, must be MT-aware! +bool SearchHandler_c::RunLocalSearch ( int iLocal, ISphMatchSorter ** ppSorters, CSphQueryResult ** ppResults ) const +{ + const int iQueries = m_iEnd-m_iStart+1; + const ServedIndex_t * pServed = UseIndex ( iLocal ); + if ( !pServed ) + { + // FIXME! submit a failure? + return false; + } + assert ( pServed->m_pIndex ); + assert ( pServed->m_bEnabled ); + + // create sorters + int iValidSorters = 0; + for ( int i=0; im_sError; + const CSphQuery & tQuery = m_dQueries[i+m_iStart]; + CSphSchemaMT * pExtraSchemaMT = tQuery.m_bAgent?m_dExtraSchemas[i+m_iStart].GetVirgin():NULL; + UnlockOnDestroy dSchemaLock ( pExtraSchemaMT ); + + assert ( !tQuery.m_iOldVersion || tQuery.m_iOldVersion>=0x102 ); + ppSorters[i] = sphCreateQueue ( &tQuery, pServed->m_pIndex->GetMatchSchema(), sError, true, pExtraSchemaMT ); + + if ( ppSorters[i] ) + iValidSorters++; + } + if ( !iValidSorters ) + { + ReleaseIndex ( iLocal ); + return false; + } + + CSphVector dLocked; + + // setup kill-lists + CSphVector dKlists; + for ( int i=iLocal+1; im_pIndex->GetKillListSize() ) + { + SetupKillListFilter ( dKlists.Add(), pKlistIndex->m_pIndex->GetKillList(), pKlistIndex->m_pIndex->GetKillListSize() ); + dLocked.Add ( i ); + } else + { + ReleaseIndex ( i ); + } + } + + // do the query + bool bResult = false; + pServed->m_pIndex->SetCacheSize ( g_iMaxCachedDocs, g_iMaxCachedHits ); + if ( m_bMultiQueue ) + { + bResult = pServed->m_pIndex->MultiQuery ( &m_dQueries[m_iStart], ppResults[0], iQueries, ppSorters, &dKlists ); + } else + { + bResult = pServed->m_pIndex->MultiQueryEx ( iQueries, &m_dQueries[m_iStart], ppResults, ppSorters, &dKlists ); + } + + ARRAY_FOREACH ( i, dLocked ) + ReleaseIndex ( dLocked[i] ); + + return bResult; +} + + +void SearchHandler_c::RunLocalSearches ( ISphMatchSorter * pLocalSorter, const char * sDistName ) +{ + if ( g_iDistThreads>1 && m_dLocal.GetLength()>1 ) + { + RunLocalSearchesMT(); + return; + } + + CSphVector dLocked; + ARRAY_FOREACH ( iLocal, m_dLocal ) + { + const char * sLocal = m_dLocal[iLocal].m_sName.cstr(); + + const ServedIndex_t * pServed = UseIndex ( iLocal ); + if ( !pServed ) + { + if ( sDistName ) + for ( int i=m_iStart; i<=m_iEnd; i++ ) + m_dFailuresSet[i].SubmitEx ( sDistName, "local index %s missing", sLocal ); + continue; + } + + assert ( pServed->m_pIndex ); + assert ( pServed->m_bEnabled ); + + // create sorters + CSphVector dSorters ( m_iEnd-m_iStart+1 ); + ARRAY_FOREACH ( i, dSorters ) + dSorters[i] = NULL; + + int iValidSorters = 0; + for ( int iQuery=m_iStart; iQuery<=m_iEnd; iQuery++ ) + { + CSphString sError; + CSphQuery & tQuery = m_dQueries[iQuery]; + CSphSchemaMT * pExtraSchema = tQuery.m_bAgent?m_dExtraSchemas[iQuery].GetVirgin():NULL; + UnlockOnDestroy dSchemaLock ( pExtraSchema ); + + // create sorter, if needed + ISphMatchSorter * pSorter = pLocalSorter; + if ( !pLocalSorter ) + { + // fixup old queries + if ( !FixupQuery ( &tQuery, &pServed->m_pIndex->GetMatchSchema(), sLocal, sError ) ) + { + m_dFailuresSet[iQuery].Submit ( sLocal, sError.cstr() ); + continue; + } + + // create queue + pSorter = sphCreateQueue ( &tQuery, pServed->m_pIndex->GetMatchSchema(), sError, true, pExtraSchema ); + if ( !pSorter ) + { + m_dFailuresSet[iQuery].Submit ( sLocal, sError.cstr() ); + continue; + } + if ( !sError.IsEmpty() ) + m_dFailuresSet[iQuery].Submit ( sLocal, sError.cstr() ); + + if ( !sError.IsEmpty() ) + m_dFailuresSet[iQuery].Submit ( sLocal, sError.cstr() ); + } + + dSorters[iQuery-m_iStart] = pSorter; + iValidSorters++; + } + if ( !iValidSorters ) + { + ReleaseIndex ( iLocal ); + continue; + } + + // me shortcuts + AggrResult_t tStats; + CSphQuery * pQuery = &m_dQueries[m_iStart]; + + // set kill-list + int iNumFilters = pQuery->m_dFilters.GetLength (); + for ( int i=iLocal+1; im_pIndex->GetKillListSize () ) + { + CSphFilterSettings tKillListFilter; + SetupKillListFilter ( tKillListFilter, pServed->m_pIndex->GetKillList (), pServed->m_pIndex->GetKillListSize () ); + pQuery->m_dFilters.Add ( tKillListFilter ); + dLocked.Add ( i ); + } else + { + ReleaseIndex ( i ); + } + } + + // do the query + bool bResult = false; + pServed->m_pIndex->SetCacheSize ( g_iMaxCachedDocs, g_iMaxCachedHits ); + if ( m_bMultiQueue ) + { + bResult = pServed->m_pIndex->MultiQuery ( &m_dQueries[m_iStart], &tStats, + dSorters.GetLength(), &dSorters[0], NULL ); + } else + { + CSphVector dResults ( m_dResults.GetLength() ); + ARRAY_FOREACH ( i, m_dResults ) + dResults[i] = &m_dResults[i]; + + bResult = pServed->m_pIndex->MultiQueryEx ( dSorters.GetLength(), + &m_dQueries[m_iStart], &dResults[m_iStart], &dSorters[0], NULL ); + } + + // handle results + if ( !bResult ) + { + // failed + for ( int iQuery=m_iStart; iQuery<=m_iEnd; iQuery++ ) + m_dFailuresSet[iQuery].Submit ( sLocal, + m_dResults [ m_bMultiQueue ? m_iStart : iQuery ].m_sError.cstr() ); + } else + { + // multi-query succeeded + for ( int iQuery=m_iStart; iQuery<=m_iEnd; iQuery++ ) + { + // but some of the sorters could had failed at "create sorter" stage + ISphMatchSorter * pSorter = dSorters [ iQuery-m_iStart ]; + if ( !pSorter ) + continue; + + // this one seems OK + AggrResult_t & tRes = m_dResults[iQuery]; + // multi-queue only returned one result set meta, so we need to replicate it + if ( m_bMultiQueue ) + { + // these times will be overridden below, but let's be clean + tRes.m_iQueryTime += tStats.m_iQueryTime / ( m_iEnd-m_iStart+1 ); + tRes.m_iCpuTime += tStats.m_iCpuTime / ( m_iEnd-m_iStart+1 ); + tRes.m_pMva = tStats.m_pMva; + tRes.m_pStrings = tStats.m_pStrings; + MergeWordStats ( tRes, tStats.m_hWordStats, &m_dFailuresSet[iQuery], sLocal ); + tRes.m_iMultiplier = m_iEnd-m_iStart+1; + } else if ( tRes.m_iMultiplier==-1 ) + { + m_dFailuresSet[iQuery].Submit ( sLocal, tRes.m_sError.cstr() ); + continue; + } + + tRes.m_iSuccesses++; + tRes.m_tSchema = pSorter->GetSchema(); + tRes.m_iTotalMatches += pSorter->GetTotalCount(); + + // extract matches from sorter + FlattenToRes ( pSorter, tRes ); + + // move external attributes storage from tStats to actual result + tStats.LeakStorages ( tRes ); + } + } + + // cleanup kill-list + pQuery->m_dFilters.Resize ( iNumFilters ); + + ARRAY_FOREACH ( i, dLocked ) + ReleaseIndex ( dLocked[i] ); + + // cleanup sorters + if ( !pLocalSorter ) + ARRAY_FOREACH ( i, dSorters ) + SafeDelete ( dSorters[i] ); + } +} + + +// check expressions into a query to make sure that it's ready for multi query optimization +static bool HasExpresions ( const CSphQuery & tQuery, const CSphVector& m_dIndices ) +{ + + ARRAY_FOREACH ( i, m_dIndices ) + { + const ServedIndex_t * pServedIndex = g_pIndexes->GetRlockedEntry ( m_dIndices[i].m_sName ); + + // check that it exists + if ( !pServedIndex ) + return false; + + bool bHasExpression = false; + if ( pServedIndex->m_bEnabled ) + bHasExpression = sphHasExpressions ( tQuery, pServedIndex->m_pIndex->GetMatchSchema() ); + + pServedIndex->Unlock(); + + if ( bHasExpression ) + return true; + } + return false; +} + + +void SearchHandler_c::RunSubset ( int iStart, int iEnd ) +{ + m_iStart = iStart; + m_iEnd = iEnd; + m_dLocal.Reset (); + + // all my stats + int64_t tmSubset = sphMicroTimer(); + int64_t tmLocal = 0; + int64_t tmWait = 0; + int64_t tmCpu = sphCpuTimer (); + + if ( g_bIOStats ) + sphStartIOStats (); + + // prepare for descent + CSphQuery & tFirst = m_dQueries[iStart]; + + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + m_dResults[iRes].m_iSuccesses = 0; + + //////////////////////////////////////////////////////////////// + // check for single-query, multi-queue optimization possibility + //////////////////////////////////////////////////////////////// + + m_bMultiQueue = ( iStart dAgents; + CSphVector dDistLocal; + bool bDist = false; + int iAgentConnectTimeout = 0, iAgentQueryTimeout = 0; + + { + g_tDistLock.Lock(); + DistributedIndex_t * pDist = g_hDistIndexes ( tFirst.m_sIndexes ); + if ( pDist ) + { + bDist = true; + iAgentConnectTimeout = pDist->m_iAgentConnectTimeout; + iAgentQueryTimeout = pDist->m_iAgentQueryTimeout; + + dDistLocal = pDist->m_dLocal; + + dAgents.Resize ( pDist->m_dAgents.GetLength() ); + ARRAY_FOREACH ( i, pDist->m_dAgents ) + dAgents[i] = pDist->m_dAgents[i]; + } + g_tDistLock.Unlock(); + } + + if ( !bDist ) + { + // they're all local, build the list + if ( tFirst.m_sIndexes=="*" ) + { + // search through all local indexes + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + if ( it.Get ().m_bEnabled ) + m_dLocal.Add().m_sName = it.GetKey(); + } else + { + // search through specified local indexes + ParseIndexList ( tFirst.m_sIndexes, m_dLocal ); + //CSphVector m_dLocal; ///< local indexes for the current subset + // there should be no distributed indexes in multi-index query + int iDistFound = -1; + g_tDistLock.Lock(); + + ARRAY_FOREACH ( i, m_dLocal ) + // + if ( g_hDistIndexes.Exists ( m_dLocal[i].m_sName ) ) + { + iDistFound = i; + break; + } + + g_tDistLock.Unlock(); + + if ( iDistFound!=-1 ) + { + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + m_dResults[iRes].m_sError.SetSprintf ( "distributed index '%s' in multi-index query found", m_dLocal[iDistFound].m_sName.cstr() ); + return; + } + + ARRAY_FOREACH ( i, m_dLocal ) + { + const ServedIndex_t * pServedIndex = g_pIndexes->GetRlockedEntry ( m_dLocal[i].m_sName ); + + // check that it exists + if ( !pServedIndex ) + { + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + m_dResults[iRes].m_sError.SetSprintf ( "unknown local index '%s' in search request", m_dLocal[i].m_sName.cstr() ); + return; + } + + // if it exists but is not enabled, remove it from the list and force recheck + if ( !pServedIndex->m_bEnabled ) + m_dLocal.Remove ( i-- ); + + pServedIndex->Unlock(); + } + } + + // sanity check + if ( !m_dLocal.GetLength() ) + { + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + m_dResults[iRes].m_sError.SetSprintf ( "no enabled local indexes to search" ); + return; + } + + } else + { + // copy local indexes list from distributed definition, but filter out disabled ones + ARRAY_FOREACH ( i, dDistLocal ) + { + const ServedIndex_t * pServedIndex = g_pIndexes->GetRlockedEntry ( dDistLocal[i] ); + if ( pServedIndex ) + { + if ( pServedIndex->m_bEnabled ) + m_dLocal.Add().m_sName = dDistLocal[i]; + + pServedIndex->Unlock(); + } + } + } + + ///////////////////////////////////////////////////// + // optimize single-query, same-schema local searches + ///////////////////////////////////////////////////// + + ISphMatchSorter * pLocalSorter = NULL; + while ( iStart==iEnd && m_dLocal.GetLength()>1 ) + { + CSphString sError; + + // check if all schemas are equal + bool bAllEqual = true; + + const ServedIndex_t * pFirstIndex = g_pIndexes->GetRlockedEntry ( m_dLocal[0].m_sName ); + if ( !pFirstIndex ) + break; + + const CSphSchema & tFirstSchema = pFirstIndex->m_pIndex->GetMatchSchema(); + for ( int i=1; iGetRlockedEntry ( m_dLocal[i].m_sName ); + if ( !pNextIndex ) + { + bAllEqual = false; + break; + } + + if ( !tFirstSchema.CompareTo ( pNextIndex->m_pIndex->GetMatchSchema(), sError ) ) + bAllEqual = false; + + pNextIndex->Unlock(); + } + + // we can reuse the very same sorter + if ( bAllEqual && FixupQuery ( &m_dQueries[iStart], &tFirstSchema, "local-sorter", sError ) ) + { + CSphSchemaMT * pExtraSchemaMT = m_dQueries[iStart].m_bAgent?m_dExtraSchemas[iStart].GetVirgin():NULL; + UnlockOnDestroy ExtraLocker ( pExtraSchemaMT ); + pLocalSorter = sphCreateQueue ( &m_dQueries[iStart], tFirstSchema, sError, true, pExtraSchemaMT ); + } + + pFirstIndex->Unlock (); + break; + } + + // select lists must have no expressions + for ( int iCheck=iStart; iCheck<=iEnd && m_bMultiQueue; iCheck++ ) + { + m_bMultiQueue = !HasExpresions ( m_dQueries[iCheck], m_dLocal ); + } + + // these are mutual exclusive + assert ( !( m_bMultiQueue && pLocalSorter ) ); + + /////////////////////////////////////////////////////////// + // main query loop (with multiple retries for distributed) + /////////////////////////////////////////////////////////// + + tFirst.m_iRetryCount = Min ( Max ( tFirst.m_iRetryCount, 0 ), MAX_RETRY_COUNT ); // paranoid clamp + if ( !bDist ) + tFirst.m_iRetryCount = 0; + + for ( int iRetry=0; iRetry<=tFirst.m_iRetryCount; iRetry++ ) + { + //////////////////////// + // issue remote queries + //////////////////////// + + // delay between retries + if ( iRetry>0 ) + sphSleepMsec ( tFirst.m_iRetryDelay ); + + // connect to remote agents and query them, if required + int iRemote = 0; + if ( bDist ) + { + ConnectToRemoteAgents ( dAgents, iRetry!=0 ); + + SearchRequestBuilder_t tReqBuilder ( m_dQueries, iStart, iEnd ); + iRemote = QueryRemoteAgents ( dAgents, iAgentConnectTimeout, tReqBuilder, &tmWait ); + } + + ///////////////////// + // run local queries + ////////////////////// + + // while the remote queries are running, do local searches + // FIXME! what if the remote agents finish early, could they timeout? + if ( iRetry==0 ) + { + if ( bDist && !iRemote && !m_dLocal.GetLength() ) + { + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + m_dResults[iRes].m_sError = "all remote agents unreachable and no available local indexes found"; + + SafeDelete ( pLocalSorter ); + return; + } + + tmLocal = -sphMicroTimer(); + RunLocalSearches ( pLocalSorter, bDist ? tFirst.m_sIndexes.cstr() : NULL ); + tmLocal += sphMicroTimer(); + } + + /////////////////////// + // poll remote queries + /////////////////////// + + // wait for remote queries to complete + if ( iRemote ) + { + SearchReplyParser_t tParser ( iStart, iEnd, m_dMvaStorage, m_dStringsStorage ); + int iMsecLeft = iAgentQueryTimeout - (int)( tmLocal/1000 ); + int iReplys = WaitForRemoteAgents ( dAgents, Max ( iMsecLeft, 0 ), tParser, &tmWait ); + + // check if there were valid (though might be 0-matches) replys, and merge them + if ( iReplys ) + ARRAY_FOREACH ( iAgent, dAgents ) + { + AgentConn_t & tAgent = dAgents[iAgent]; + if ( !tAgent.m_bSuccess ) + continue; + + // merge this agent's results + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + { + const CSphQueryResult & tRemoteResult = tAgent.m_dResults[iRes-iStart]; + + // copy errors or warnings + if ( !tRemoteResult.m_sError.IsEmpty() ) + m_dFailuresSet[iRes].SubmitEx ( tFirst.m_sIndexes.cstr(), "agent %s: remote query error: %s", tAgent.GetName().cstr(), tRemoteResult.m_sError.cstr() ); + if ( !tRemoteResult.m_sWarning.IsEmpty() ) + m_dFailuresSet[iRes].SubmitEx ( tFirst.m_sIndexes.cstr(), "agent %s: remote query warning: %s", tAgent.GetName().cstr(), tRemoteResult.m_sWarning.cstr() ); + + if ( tRemoteResult.m_iSuccesses<=0 ) + continue; + + AggrResult_t & tRes = m_dResults[iRes]; + tRes.m_iSuccesses++; + + ARRAY_FOREACH ( i, tRemoteResult.m_dMatches ) + { + tRes.m_dMatches.Add(); + tRes.m_dMatches.Last().Clone ( tRemoteResult.m_dMatches[i], tRemoteResult.m_tSchema.GetRowSize() ); + tRes.m_dMatches.Last().m_iTag = 0; // all remote MVA values go to special pool which is at index 0 + } + + tRes.m_dMatchCounts.Add ( tRemoteResult.m_dMatches.GetLength() ); + tRes.m_dSchemas.Add ( tRemoteResult.m_tSchema ); + // note how we do NOT add per-index weight here; remote agents are all tagged 0 (which contains weight 1) + + // merge this agent's stats + tRes.m_iTotalMatches += tRemoteResult.m_iTotalMatches; + tRes.m_iQueryTime += tRemoteResult.m_iQueryTime; + + // merge this agent's words + MergeWordStats ( tRes, tRemoteResult.m_hWordStats, &m_dFailuresSet[iRes], tFirst.m_sIndexes.cstr() ); + } + + // dismissed + tAgent.m_dResults.Reset (); + tAgent.m_bSuccess = false; + tAgent.m_sFailure = ""; + } + } + + // check if we need to retry again + int iToRetry = 0; + if ( bDist ) + ARRAY_FOREACH ( i, dAgents ) + if ( dAgents[i].m_eState==AGENT_RETRY ) + iToRetry++; + if ( !iToRetry ) + break; + } + + // submit failures from failed agents + // copy timings from all agents + if ( bDist ) + { + ARRAY_FOREACH ( i, dAgents ) + { + const AgentConn_t & tAgent = dAgents[i]; + + for ( int j=iStart; j<=iEnd; j++ ) + m_dAgentTimes[j].Add ( tAgent.m_iWall / ( iEnd-iStart+1 ) ); + + if ( !tAgent.m_bSuccess && !tAgent.m_sFailure.IsEmpty() ) + for ( int j=iStart; j<=iEnd; j++ ) + m_dFailuresSet[j].SubmitEx ( tFirst.m_sIndexes.cstr(), tAgent.m_bBlackhole ? "blackhole %s: %s" : "agent %s: %s", + tAgent.GetName().cstr(), tAgent.m_sFailure.cstr() ); + } + } + + ARRAY_FOREACH ( i, m_dResults ) + assert ( m_dResults[i].m_iTag==m_dResults[i].m_dTag2Pools.GetLength() ); + + // cleanup + bool bWasLocalSorter = pLocalSorter!=NULL; + SafeDelete ( pLocalSorter ); + + ///////////////////// + // merge all results + ///////////////////// + + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + { + AggrResult_t & tRes = m_dResults[iRes]; + CSphQuery & tQuery = m_dQueries[iRes]; + CSphSchemaMT * pExtraSchema = tQuery.m_bAgent?&m_dExtraSchemas[bWasLocalSorter?0:iRes]:NULL; + + // minimize sorters needs these pointers + tRes.m_dTag2Pools[0].m_pMva = m_dMvaStorage.Begin(); + tRes.m_dTag2Pools[0].m_pStrings = m_dStringsStorage.Begin(); + + // if there were no succesful searches at all, this is an error + if ( !tRes.m_iSuccesses ) + { + StrBuf_t sFailures; + m_dFailuresSet[iRes].BuildReport ( sFailures ); + + tRes.m_sError = sFailures.cstr(); + continue; + } + + // minimize schema and remove dupes + if ( tRes.m_dSchemas.GetLength() ) + tRes.m_tSchema = tRes.m_dSchemas[0]; + if ( tRes.m_iSuccesses>1 || tQuery.m_dItems.GetLength() ) + { + if ( g_bCompatResults ) + { + if ( !MinimizeAggrResultCompat ( tRes, tQuery, m_dLocal.GetLength()!=0 ) ) + return; + } else + { + if ( pExtraSchema ) + pExtraSchema->RLock(); + UnlockOnDestroy SchemaLocker ( pExtraSchema ); + if ( !MinimizeAggrResult ( tRes, tQuery, m_dLocal.GetLength()!=0, pExtraSchema, m_bSphinxql ) ) + return; + } + } + + if ( !m_dFailuresSet[iRes].IsEmpty() ) + { + StrBuf_t sFailures; + m_dFailuresSet[iRes].BuildReport ( sFailures ); + tRes.m_sWarning = sFailures.cstr(); + } + + //////////// + // finalize + //////////// + + tRes.m_iOffset = tQuery.m_iOffset; + tRes.m_iCount = Max ( Min ( tQuery.m_iLimit, tRes.m_dMatches.GetLength()-tQuery.m_iOffset ), 0 ); + } + + // remove internal attributes from result schema + ARRAY_FOREACH ( i, m_dResults ) + sphSortRemoveInternalAttrs ( m_dResults[i].m_tSchema ); + + // stats + tmSubset = sphMicroTimer() - tmSubset; + tmCpu = sphCpuTimer() - tmCpu; + + // in multi-queue case (1 actual call per N queries), just divide overall query time evenly + // otherwise (N calls per N queries), divide common query time overheads evenly + const int iQueries = iEnd-iStart+1; + if ( m_bMultiQueue ) + { + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + { + m_dResults[iRes].m_iQueryTime = (int)( tmSubset/1000/iQueries ); + m_dResults[iRes].m_iCpuTime = tmCpu/iQueries; + } + } else + { + int64_t tmAccountedWall = 0; + int64_t tmAccountedCpu = 0; + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + { + tmAccountedWall += m_dResults[iRes].m_iQueryTime*1000; + tmAccountedCpu += m_dResults[iRes].m_iCpuTime; + } + + int64_t tmDeltaWall = ( tmSubset - tmAccountedWall ) / iQueries; + int64_t tmDeltaCpu = ( tmCpu - tmAccountedCpu ) / iQueries; + + for ( int iRes=iStart; iRes<=iEnd; iRes++ ) + { + m_dResults[iRes].m_iQueryTime += (int)(tmDeltaWall/1000); + m_dResults[iRes].m_iCpuTime += tmDeltaCpu; + } + } + + const CSphIOStats & tIO = sphStopIOStats (); + + if ( g_pStats ) + { + g_tStatsMutex.Lock(); + g_pStats->m_iQueries += iQueries; + g_pStats->m_iQueryTime += tmSubset; + g_pStats->m_iQueryCpuTime += tmCpu; + if ( bDist && dAgents.GetLength() ) + { + // do *not* count queries to dist indexes w/o actual remote agents + g_pStats->m_iDistQueries++; + g_pStats->m_iDistWallTime += tmSubset; + g_pStats->m_iDistLocalTime += tmLocal; + g_pStats->m_iDistWaitTime += tmWait; + } + g_pStats->m_iDiskReads += tIO.m_iReadOps; + g_pStats->m_iDiskReadTime += tIO.m_iReadTime; + g_pStats->m_iDiskReadBytes += tIO.m_iReadBytes; + g_tStatsMutex.Unlock(); + } +} + + +bool CheckCommandVersion ( int iVer, int iDaemonVersion, InputBuffer_c & tReq ) +{ + if ( (iVer>>8)!=(iDaemonVersion>>8) ) + { + tReq.SendErrorReply ( "major command version mismatch (expected v.%d.x, got v.%d.%d)", + iDaemonVersion>>8, iVer>>8, iVer&0xff ); + return false; + } + if ( iVer>iDaemonVersion ) + { + tReq.SendErrorReply ( "client version is higher than daemon version (client is v.%d.%d, daemon is v.%d.%d)", + iVer>>8, iVer&0xff, iDaemonVersion>>8, iDaemonVersion&0xff ); + return false; + } + return true; +} + + +void SendSearchResponse ( SearchHandler_c & tHandler, InputBuffer_c & tReq, int iSock, int iVer, int iMasterVer ) +{ + // serve the response + NetOutputBuffer_c tOut ( iSock ); + int iReplyLen = 0; + bool bExtendedStat = ( iMasterVer>0 ); + + if ( iVer<=0x10C ) + { + assert ( tHandler.m_dQueries.GetLength()==1 ); + assert ( tHandler.m_dResults.GetLength()==1 ); + const AggrResult_t & tRes = tHandler.m_dResults[0]; + + if ( !tRes.m_sError.IsEmpty() ) + { + tReq.SendErrorReply ( "%s", tRes.m_sError.cstr() ); + return; + } + + iReplyLen = CalcResultLength ( iVer, &tRes, tRes.m_dTag2Pools, bExtendedStat ); + bool bWarning = ( iVer>=0x106 && !tRes.m_sWarning.IsEmpty() ); + + // send it + tOut.SendWord ( (WORD)( bWarning ? SEARCHD_WARNING : SEARCHD_OK ) ); + tOut.SendWord ( VER_COMMAND_SEARCH ); + tOut.SendInt ( iReplyLen ); + + SendResult ( iVer, tOut, &tRes, tRes.m_dTag2Pools, bExtendedStat ); + + } else + { + ARRAY_FOREACH ( i, tHandler.m_dQueries ) + iReplyLen += CalcResultLength ( iVer, &tHandler.m_dResults[i], tHandler.m_dResults[i].m_dTag2Pools, bExtendedStat ); + + // send it + tOut.SendWord ( (WORD)SEARCHD_OK ); + tOut.SendWord ( VER_COMMAND_SEARCH ); + tOut.SendInt ( iReplyLen ); + + ARRAY_FOREACH ( i, tHandler.m_dQueries ) + SendResult ( iVer, tOut, &tHandler.m_dResults[i], tHandler.m_dResults[i].m_dTag2Pools, bExtendedStat ); + } + + tOut.Flush (); + assert ( tOut.GetError()==true || tOut.GetSentCount()==iReplyLen+8 ); + + // clean up + ARRAY_FOREACH ( i, tHandler.m_dQueries ) + SafeDeleteArray ( tHandler.m_dQueries[i].m_pWeights ); +} + + +void HandleCommandSearch ( int iSock, int iVer, InputBuffer_c & tReq ) +{ + MEMORY ( SPH_MEM_SEARCH_NONSQL ); + + if ( !CheckCommandVersion ( iVer, VER_COMMAND_SEARCH, tReq ) ) + return; + + int iMasterVer = 0; + if ( iVer>=0x118 ) + iMasterVer = tReq.GetInt(); + + // parse request + int iQueries = 1; + if ( iVer>=0x10D ) + iQueries = tReq.GetDword (); + + if ( g_iMaxBatchQueries>0 && ( iQueries<=0 || iQueries>g_iMaxBatchQueries ) ) + { + tReq.SendErrorReply ( "bad multi-query count %d (must be in 1..%d range)", iQueries, g_iMaxBatchQueries ); + return; + } + + SearchHandler_c tHandler ( iQueries ); + ARRAY_FOREACH ( i, tHandler.m_dQueries ) + if ( !ParseSearchQuery ( tReq, tHandler.m_dQueries[i], iVer, iMasterVer ) ) + return; + + // run queries, send response + tHandler.RunQueries (); + SendSearchResponse ( tHandler, tReq, iSock, iVer, iMasterVer ); +} + +////////////////////////////////////////////////////////////////////////// +// SQL PARSER +////////////////////////////////////////////////////////////////////////// + +enum SqlStmt_e +{ + STMT_PARSE_ERROR = 0, + STMT_DUMMY, + + STMT_SELECT, + STMT_INSERT, + STMT_REPLACE, + STMT_DELETE, + STMT_SHOW_WARNINGS, + STMT_SHOW_STATUS, + STMT_SHOW_META, + STMT_SET, + STMT_BEGIN, + STMT_COMMIT, + STMT_ROLLBACK, + STMT_CALL, + STMT_DESC, + STMT_SHOW_TABLES, + STMT_UPDATE, + STMT_CREATE_FUNC, + STMT_DROP_FUNC, + + STMT_TOTAL +}; + + +const char * g_dSqlStmts[STMT_TOTAL] = +{ + "parse_error", "select", "insert", "replace", "delete", "show_warnings", + "show_status", "show_meta", "set", "begin", "commit", "rollback", "call", + "desc", "show_tables", "update" +}; + + +/// refcounted vector +template < typename T > +class RefcountedVector_c : public CSphVector, public ISphRefcounted +{ +}; + +typedef CSphRefcountedPtr < RefcountedVector_c > AttrValues_p; + +/// insert value +struct SqlInsert_t +{ + int m_iType; + CSphString m_sVal; // OPTIMIZE? use char* and point to node? + int64_t m_iVal; + float m_fVal; + AttrValues_p m_pVals; + + SqlInsert_t () + : m_pVals ( NULL ) + {} +}; + + +/// parser view on a generic node +/// CAUTION, nodes get copied in the parser all the time, must keep assignment slim +struct SqlNode_t +{ + int m_iStart; + int m_iEnd; + CSphString m_sValue; + int64_t m_iValue; + float m_fValue; + int m_iInstype; // REMOVE? should not we know this somehow else? + AttrValues_p m_pValues; // FIXME? replace with numeric handles into parser state? + + SqlNode_t() + : m_iValue ( 0 ) + , m_pValues ( NULL ) + {} +}; +#define YYSTYPE SqlNode_t + + +enum SqlSet_e +{ + SET_LOCAL, + SET_GLOBAL_UVAR, + SET_GLOBAL_SVAR +}; + +/// parsing result +/// one day, we will start subclassing this +struct SqlStmt_t +{ + SqlStmt_e m_eStmt; + int m_iRowsAffected; + + // SELECT specific + CSphQuery m_tQuery; + + // used by INSERT, DELETE, CALL, DESC + CSphString m_sIndex; + + // INSERT (and CALL) specific + CSphVector m_dInsertValues; // reused by CALL + CSphVector m_dInsertSchema; + int m_iSchemaSz; + + // DELETE specific + CSphVector m_dDeleteIds; + + // SET specific + CSphString m_sSetName; + SqlSet_e m_eSet; + int m_iSetValue; + CSphString m_sSetValue; + CSphVector m_dSetValues; + bool m_bSetNull; + + // CALL specific + CSphString m_sCallProc; + CSphVector m_dCallOptNames; + CSphVector m_dCallOptValues; + + // UPDATE specific + CSphAttrUpdate m_tUpdate; + + // CREATE/DROP FUNCTION specific + CSphString m_sUdfName; + CSphString m_sUdfLib; + ESphAttr m_eUdfType; + + SqlStmt_t () + : m_eStmt ( STMT_PARSE_ERROR ) + , m_iRowsAffected ( 0 ) + , m_iSchemaSz ( 0 ) + , m_eSet ( SET_LOCAL ) + , m_iSetValue ( 0 ) + , m_bSetNull ( false ) + { + m_tQuery.m_eMode = SPH_MATCH_EXTENDED2; // only new and shiny matching and sorting + m_tQuery.m_eSort = SPH_SORT_EXTENDED; + m_tQuery.m_sSortBy = "@weight desc"; // default order + m_tQuery.m_sOrderBy = "@weight desc"; + } + + bool AddSchemaItem ( const char * psName ) + { + m_dInsertSchema.Add ( psName ); + m_dInsertSchema.Last().ToLower(); + m_iSchemaSz = m_dInsertSchema.GetLength(); + return true; // stub; check if the given field actually exists in the schema + } + + // check if the number of fields which would be inserted is in accordance to the given schema + bool CheckInsertIntegrity() + { + // cheat: if no schema assigned, assume the size of schema as the size of the first row. + // (if it is wrong, it will be revealed later) + if ( !m_iSchemaSz ) + m_iSchemaSz = m_dInsertValues.GetLength(); + + m_iRowsAffected++; + return m_dInsertValues.GetLength()==m_iRowsAffected*m_iSchemaSz; + } +}; + + +struct SqlParser_c : ISphNoncopyable +{ +public: + void * m_pScanner; + const char * m_pBuf; + const char * m_pLastTokenStart; + CSphString * m_pParseError; + CSphQuery * m_pQuery; + bool m_bGotQuery; + SqlStmt_t * m_pStmt; + CSphVector & m_dStmt; + ESphCollation m_eCollation; + BYTE m_uSyntaxFlags; + +public: + explicit SqlParser_c ( CSphVector & dStmt, ESphCollation eCollation ); + + void PushQuery (); + + bool AddOption ( const SqlNode_t & tIdent, const SqlNode_t & tValue ); + bool AddOption ( const SqlNode_t & tIdent, const SqlNode_t & tValue, const CSphString & sArg ); + bool AddOption ( const SqlNode_t & tIdent, CSphVector & dNamed ); + void AddItem ( SqlNode_t * pExpr, ESphAggrFunc eFunc=SPH_AGGR_NONE, SqlNode_t * pStart=NULL, SqlNode_t * pEnd=NULL ); + bool AddItem ( const char * pToken, SqlNode_t * pStart=NULL, SqlNode_t * pEnd=NULL ); + void AliasLastItem ( SqlNode_t * pAlias ); + void SetSelect ( SqlNode_t * pStart, SqlNode_t * pEnd=NULL ) + { + if ( m_pQuery ) + { + if ( pStart && ( m_pQuery->m_iSQLSelectStart<0 || m_pQuery->m_iSQLSelectStart>pStart->m_iStart ) ) + m_pQuery->m_iSQLSelectStart = pStart->m_iStart; + if ( !pEnd ) + pEnd = pStart; + if ( pEnd && ( m_pQuery->m_iSQLSelectEnd<0 || m_pQuery->m_iSQLSelectEndm_iEnd ) ) + m_pQuery->m_iSQLSelectEnd = pEnd->m_iEnd; + } + } + bool AddSchemaItem ( SqlNode_t * pNode ); + void SetValue ( const char * sName, const SqlNode_t& tValue ); + bool SetMatch ( const SqlNode_t& tValue ); + void AddConst ( int iList, const SqlNode_t& tValue ); + void SetStatement ( const SqlNode_t& tName, SqlSet_e eSet ); + bool AddFloatRangeFilter ( const CSphString & sAttr, float fMin, float fMax ); + bool AddUintRangeFilter ( const CSphString & sAttr, DWORD uMin, DWORD uMax ); + bool AddUservarFilter ( const CSphString & sCol, const CSphString & sVar, bool bExclude ); + bool AddDistinct ( SqlNode_t * pNewExpr, SqlNode_t * pStart, SqlNode_t * pEnd ); + CSphFilterSettings * AddFilter ( const CSphString & sCol, ESphFilter eType ); + inline CSphFilterSettings * AddValuesFilter ( const SqlNode_t& sCol ) + { + return AddFilter ( sCol.m_sValue, SPH_FILTER_VALUES ); + } + + inline bool SetOldSyntax() + { + m_uSyntaxFlags |= 1; + return IsGoodSyntax (); + } + + inline bool SetNewSyntax() + { + m_uSyntaxFlags |= 2; + return IsGoodSyntax (); + } + bool IsGoodSyntax (); + inline bool IsDeprecatedSyntax () const + { + return m_uSyntaxFlags & 1; + } + + int AllocNamedVec (); + CSphVector & GetNamedVec ( int iIndex ); + void FreeNamedVec ( int iIndex ); +private: + void AutoAlias ( CSphQueryItem & tItem, SqlNode_t * pStart, SqlNode_t * pEnd ); + +protected: + bool m_bNamedVecBusy; + CSphVector m_dNamedVec; +}; + +static void AddInsval ( CSphVector & dVec, const SqlNode_t & tNode ) +{ + SqlInsert_t & tIns = dVec.Add(); + tIns.m_iType = tNode.m_iInstype; + tIns.m_iVal = tNode.m_iValue; // OPTIMIZE? copy conditionally based on type? + tIns.m_fVal = tNode.m_fValue; + tIns.m_sVal = tNode.m_sValue; + tIns.m_pVals = tNode.m_pValues; +} + +////////////////////////////////////////////////////////////////////////// + +// unused parameter, simply to avoid type clash between all my yylex() functions +#define YYLEX_PARAM pParser->m_pScanner, pParser +#ifdef NDEBUG +#define YY_DECL int yylex ( YYSTYPE * lvalp, void * yyscanner, SqlParser_c * pParser ) +#else +#define YY_DECL int yylexd ( YYSTYPE * lvalp, void * yyscanner, SqlParser_c * pParser ) +#endif +#include "llsphinxql.c" + + +void yyerror ( SqlParser_c * pParser, const char * sMessage ) +{ + // flex put a zero at last token boundary; make it undo that + yylex_unhold ( pParser->m_pScanner ); + + // create our error message + pParser->m_pParseError->SetSprintf ( "sphinxql: %s near '%s'", sMessage, pParser->m_pLastTokenStart ? pParser->m_pLastTokenStart : "(null)" ); + + // fixup TOK_xxx thingies + char * s = const_cast ( pParser->m_pParseError->cstr() ); + char * d = s; + while ( *s ) + { + if ( strncmp ( s, "TOK_", 4 )==0 ) + s += 4; + else + *d++ = *s++; + } + *d = '\0'; +} + + +#ifndef NDEBUG +// using a proxy to be possible to debug inside yylex +int yylex ( YYSTYPE * lvalp, void * yyscanner, SqlParser_c * pParser ) +{ + int res = yylexd ( lvalp, yyscanner, pParser ); + return res; +} +#endif + +#include "yysphinxql.c" + +////////////////////////////////////////////////////////////////////////// + +class CSphMatchVariant : public CSphMatch +{ +public: + inline static SphAttr_t ToInt ( const SqlInsert_t & tVal ) + { + switch ( tVal.m_iType ) + { + case TOK_QUOTED_STRING : return strtoul ( tVal.m_sVal.cstr(), NULL, 10 ); // FIXME? report conversion error? + case TOK_CONST_INT: return int(tVal.m_iVal); + case TOK_CONST_FLOAT: return int(tVal.m_fVal); // FIXME? report conversion error + } + return 0; + } + inline static SphAttr_t ToBigInt ( const SqlInsert_t & tVal ) + { + switch ( tVal.m_iType ) + { + case TOK_QUOTED_STRING : return strtoll ( tVal.m_sVal.cstr(), NULL, 10 ); // FIXME? report conversion error? + case TOK_CONST_INT: return tVal.m_iVal; + case TOK_CONST_FLOAT: return int(tVal.m_fVal); // FIXME? report conversion error? + } + return 0; + } +#if USE_64BIT +#define ToDocid ToBigInt +#else +#define ToDocid ToInt +#endif // USE_64BIT + + bool SetAttr ( const CSphAttrLocator & tLoc, const SqlInsert_t & tVal, ESphAttr eTargetType ) + { + switch ( eTargetType ) + { + case SPH_ATTR_INTEGER: + case SPH_ATTR_TIMESTAMP: + CSphMatch::SetAttr ( tLoc, ToInt(tVal) ); + break; + case SPH_ATTR_BIGINT: + CSphMatch::SetAttr ( tLoc, ToBigInt(tVal) ); + break; + case SPH_ATTR_FLOAT: + if ( tVal.m_iType==TOK_QUOTED_STRING ) + SetAttrFloat ( tLoc, (float)strtod ( tVal.m_sVal.cstr(), NULL ) ); // FIXME? report conversion error? + else if ( tVal.m_iType==TOK_CONST_INT ) + SetAttrFloat ( tLoc, float(tVal.m_iVal) ); // FIXME? report conversion error? + else if ( tVal.m_iType==TOK_CONST_FLOAT ) + SetAttrFloat ( tLoc, tVal.m_fVal ); + break; + case SPH_ATTR_STRING: + case SPH_ATTR_UINT32SET: + case SPH_ATTR_UINT64SET: + CSphMatch::SetAttr ( tLoc, 0 ); + break; + default: + return false; + }; + return true; + } + + inline bool SetDefaultAttr ( const CSphAttrLocator & tLoc, ESphAttr eTargetType ) + { + SqlInsert_t tVal; + tVal.m_iType = TOK_CONST_INT; + tVal.m_iVal = 0; + return SetAttr ( tLoc, tVal, eTargetType ); + } +}; + +SqlParser_c::SqlParser_c ( CSphVector & dStmt, ESphCollation eCollation ) + : m_pQuery ( NULL ) + , m_pStmt ( NULL ) + , m_dStmt ( dStmt ) + , m_eCollation ( eCollation ) + , m_uSyntaxFlags ( 0 ) + , m_bNamedVecBusy ( false ) +{ + assert ( !m_dStmt.GetLength() ); + PushQuery (); +} + +void SqlParser_c::PushQuery () +{ + assert ( m_dStmt.GetLength() || ( !m_pQuery && !m_pStmt ) ); + + // post set proper result-set order + if ( m_dStmt.GetLength() ) + { + if ( m_pQuery->m_sGroupBy.IsEmpty() ) + m_pQuery->m_sSortBy = m_pQuery->m_sOrderBy; + else + m_pQuery->m_sGroupSortBy = m_pQuery->m_sOrderBy; + } + + // add new + m_dStmt.Add ( SqlStmt_t() ); + m_pStmt = &m_dStmt.Last(); + m_pQuery = &m_pStmt->m_tQuery; + m_pQuery->m_eCollation = m_eCollation; + + m_bGotQuery = false; +} + +bool SqlParser_c::AddOption ( const SqlNode_t& tIdent, const SqlNode_t& tValue ) +{ + CSphString sOpt = tIdent.m_sValue; + CSphString sVal = tValue.m_sValue; + sOpt.ToLower (); + sVal.ToLower (); + + if ( sOpt=="ranker" ) + { + if ( sVal=="proximity_bm25" ) m_pQuery->m_eRanker = SPH_RANK_PROXIMITY_BM25; + else if ( sVal=="bm25" ) m_pQuery->m_eRanker = SPH_RANK_BM25; + else if ( sVal=="none" ) m_pQuery->m_eRanker = SPH_RANK_NONE; + else if ( sVal=="wordcount" ) m_pQuery->m_eRanker = SPH_RANK_WORDCOUNT; + else if ( sVal=="proximity" ) m_pQuery->m_eRanker = SPH_RANK_PROXIMITY; + else if ( sVal=="matchany" ) m_pQuery->m_eRanker = SPH_RANK_MATCHANY; + else if ( sVal=="fieldmask" ) m_pQuery->m_eRanker = SPH_RANK_FIELDMASK; + else if ( sVal=="sph04" ) m_pQuery->m_eRanker = SPH_RANK_SPH04; + else if ( sVal=="expr" ) + { + m_pParseError->SetSprintf ( "missing ranker expression (use OPTION ranker=expr('1+2') for example)" ); + return false; + } else + { + m_pParseError->SetSprintf ( "unknown ranker '%s'", sVal.cstr() ); + return false; + } + + } else if ( sOpt=="max_matches" ) + { + m_pQuery->m_iMaxMatches = (int)tValue.m_iValue; + + } else if ( sOpt=="cutoff" ) + { + m_pQuery->m_iCutoff = (int)tValue.m_iValue; + + } else if ( sOpt=="max_query_time" ) + { + m_pQuery->m_uMaxQueryMsec = (int)tValue.m_iValue; + + } else if ( sOpt=="retry_count" ) + { + m_pQuery->m_iRetryCount = (int)tValue.m_iValue; + + } else if ( sOpt=="retry_delay" ) + { + m_pQuery->m_iRetryDelay = (int)tValue.m_iValue; + + } else if ( sOpt=="reverse_scan" ) + { + m_pQuery->m_bReverseScan = ( tValue.m_iValue!=0 ); + + } else + { + m_pParseError->SetSprintf ( "unknown option '%s' (or bad argument type)", tIdent.m_sValue.cstr() ); + return false; + } + + return true; +} + + +bool SqlParser_c::AddOption ( const SqlNode_t & tIdent, const SqlNode_t & tValue, const CSphString & sArg ) +{ + CSphString sOpt = tIdent.m_sValue; + CSphString sVal = tValue.m_sValue; + sOpt.ToLower (); + sVal.ToLower (); + + if ( sOpt=="ranker" && sVal=="expr" ) + { + m_pQuery->m_eRanker = SPH_RANK_EXPR; + m_pQuery->m_sRankerExpr = sArg; + return true; + } else + { + m_pParseError->SetSprintf ( "unknown option or extra argument to '%s=%s'", tIdent.m_sValue.cstr(), tValue.m_sValue.cstr() ); + return false; + } +} + + +bool SqlParser_c::AddOption ( const SqlNode_t & tIdent, CSphVector & dNamed ) +{ + CSphString sOpt = tIdent.m_sValue; + sOpt.ToLower (); + + if ( sOpt=="field_weights" ) + { + m_pQuery->m_dFieldWeights.SwapData ( dNamed ); + + } else if ( sOpt=="index_weights" ) + { + m_pQuery->m_dIndexWeights.SwapData ( dNamed ); + + } else + { + m_pParseError->SetSprintf ( "unknown option '%s' (or bad argument type)", tIdent.m_sValue.cstr() ); + return false; + } + + return true; +} + +void SqlParser_c::AliasLastItem ( SqlNode_t * pAlias ) +{ + if ( pAlias ) + { + CSphQueryItem & tItem = m_pQuery->m_dItems.Last(); + tItem.m_sAlias.SetBinary ( m_pBuf + pAlias->m_iStart, pAlias->m_iEnd - pAlias->m_iStart ); + tItem.m_sAlias.ToLower(); + SetSelect ( pAlias ); + } +} + +void SqlParser_c::AutoAlias ( CSphQueryItem & tItem, SqlNode_t * pStart, SqlNode_t * pEnd ) +{ + if ( pStart && pEnd ) + { + tItem.m_sAlias.SetBinary ( m_pBuf + pStart->m_iStart, pEnd->m_iEnd - pStart->m_iStart ); + tItem.m_sAlias.ToLower(); + } else + tItem.m_sAlias = tItem.m_sExpr; + SetSelect ( pStart, pEnd ); +} + +void SqlParser_c::AddItem ( SqlNode_t * pExpr, ESphAggrFunc eAggrFunc, SqlNode_t * pStart, SqlNode_t * pEnd ) +{ + CSphQueryItem & tItem = m_pQuery->m_dItems.Add(); + tItem.m_sExpr.SetBinary ( m_pBuf + pExpr->m_iStart, pExpr->m_iEnd - pExpr->m_iStart ); + tItem.m_sExpr.ToLower(); + tItem.m_eAggrFunc = eAggrFunc; + AutoAlias ( tItem, pStart?pStart:pExpr, pEnd?pEnd:pExpr ); +} + +bool SqlParser_c::AddItem ( const char * pToken, SqlNode_t * pStart, SqlNode_t * pEnd ) +{ + CSphQueryItem & tItem = m_pQuery->m_dItems.Add(); + tItem.m_sExpr = pToken; + tItem.m_eAggrFunc = SPH_AGGR_NONE; + tItem.m_sExpr.ToLower(); + AutoAlias ( tItem, pStart, pEnd ); + return SetNewSyntax(); +} + +bool SqlParser_c::AddDistinct ( SqlNode_t * pNewExpr, SqlNode_t * pStart, SqlNode_t * pEnd ) +{ + if ( !m_pQuery->m_sGroupDistinct.IsEmpty() ) + { + yyerror ( this, "too many COUNT(DISTINCT) clauses" ); + return false; + } + + m_pQuery->m_sGroupDistinct = pNewExpr->m_sValue; + return AddItem ( "@distinct", pStart, pEnd ); +} + +bool SqlParser_c::AddSchemaItem ( YYSTYPE * pNode ) +{ + assert ( m_pStmt ); + CSphString sItem; + sItem.SetBinary ( m_pBuf + pNode->m_iStart, pNode->m_iEnd - pNode->m_iStart ); + return m_pStmt->AddSchemaItem ( sItem.cstr() ); +} + +bool SqlParser_c::SetMatch ( const YYSTYPE& tValue ) +{ + if ( m_bGotQuery ) + { + yyerror ( this, "too many MATCH() clauses" ); + return false; + }; + + m_pQuery->m_sQuery = tValue.m_sValue; + m_pQuery->m_sRawQuery = tValue.m_sValue; + return m_bGotQuery = true; +} + +void SqlParser_c::AddConst ( int iList, const YYSTYPE& tValue ) +{ + CSphVector & dVec = GetNamedVec ( iList ); + + dVec.Add(); + dVec.Last().m_sName = tValue.m_sValue; + dVec.Last().m_sName.ToLower(); + dVec.Last().m_iValue = tValue.m_iValue; +} + +void SqlParser_c::SetStatement ( const YYSTYPE& tName, SqlSet_e eSet ) +{ + m_pStmt->m_eStmt = STMT_SET; + m_pStmt->m_eSet = eSet; + m_pStmt->m_sSetName = tName.m_sValue; +} + +CSphFilterSettings * SqlParser_c::AddFilter ( const CSphString & sCol, ESphFilter eType ) +{ + if ( sCol=="@weight" || sCol=="@count" || sCol=="count(*)" || sCol=="weight()" ) + { + yyerror ( this, "Aggregates in 'where' clause prohibited" ); + return NULL; + } + CSphFilterSettings * pFilter = &m_pQuery->m_dFilters.Add(); + pFilter->m_sAttrName = sCol; + pFilter->m_eType = eType; + pFilter->m_sAttrName.ToLower(); + return pFilter; +} + +bool SqlParser_c::AddFloatRangeFilter ( const CSphString & sAttr, float fMin, float fMax ) +{ + CSphFilterSettings * pFilter = AddFilter ( sAttr, SPH_FILTER_FLOATRANGE ); + if ( !pFilter ) + return false; + pFilter->m_fMinValue = fMin; + pFilter->m_fMaxValue = fMax; + return true; +} + +bool SqlParser_c::AddUintRangeFilter ( const CSphString & sAttr, DWORD uMin, DWORD uMax ) +{ + CSphFilterSettings * pFilter = AddFilter ( sAttr, SPH_FILTER_RANGE ); + if ( !pFilter ) + return false; + pFilter->m_uMinValue = uMin; + pFilter->m_uMaxValue = uMax; + return true; +} + +bool SqlParser_c::AddUservarFilter ( const CSphString & sCol, const CSphString & sVar, bool bExclude ) +{ + g_tUservarsMutex.Lock(); + Uservar_t * pVar = g_hUservars ( sVar ); + if ( !pVar ) + { + g_tUservarsMutex.Unlock(); + yyerror ( this, "undefined global variable in IN clause" ); + return false; + } + + assert ( pVar->m_eType==USERVAR_INT_SET ); + CSphFilterSettings * pFilter = AddFilter ( sCol, SPH_FILTER_VALUES ); + if ( !pFilter ) + return false; + pFilter->m_bExclude = bExclude; + + // INT_SET uservars must get sorted on SET once + // FIXME? maybe we should do a readlock instead of copying? + pFilter->m_dValues = *pVar->m_pVal; + g_tUservarsMutex.Unlock(); + return true; +} + +bool SqlParser_c::IsGoodSyntax () +{ + if ( ( m_uSyntaxFlags & 3 )!=3 ) + return true; + yyerror ( this, "Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited" ); + return false; +} + + +int SqlParser_c::AllocNamedVec () +{ + // we only allow one such vector at a time, right now + assert ( !m_bNamedVecBusy ); + m_bNamedVecBusy = true; + m_dNamedVec.Resize ( 0 ); + return 0; +} + +#ifndef NDEBUG +CSphVector & SqlParser_c::GetNamedVec ( int iIndex ) +#else +CSphVector & SqlParser_c::GetNamedVec ( int ) +#endif +{ + assert ( m_bNamedVecBusy && iIndex==0 ); + return m_dNamedVec; +} + +#ifndef NDEBUG +void SqlParser_c::FreeNamedVec ( int iIndex ) +#else +void SqlParser_c::FreeNamedVec ( int ) +#endif +{ + assert ( m_bNamedVecBusy && iIndex==0 ); + m_bNamedVecBusy = false; + m_dNamedVec.Resize ( 0 ); +} + +bool ParseSqlQuery ( const CSphString & sQuery, CSphVector & dStmt, CSphString & sError, ESphCollation eCollation ) +{ + SqlParser_c tParser ( dStmt, eCollation ); + tParser.m_pBuf = sQuery.cstr(); + tParser.m_pLastTokenStart = NULL; + tParser.m_pParseError = &sError; + tParser.m_eCollation = eCollation; + + int iLen = strlen ( sQuery.cstr() ); + char * sEnd = (char*)sQuery.cstr() + iLen; + sEnd[0] = 0; // prepare for yy_scan_buffer + sEnd[1] = 0; // this is ok because string allocates a small gap + + yylex_init ( &tParser.m_pScanner ); + YY_BUFFER_STATE tLexerBuffer = yy_scan_buffer ( (char*)sQuery.cstr(), iLen+2, tParser.m_pScanner ); + if ( !tLexerBuffer ) + { + sError = "internal error: yy_scan_buffer() failed"; + return false; + } + + int iRes = yyparse ( &tParser ); + yy_delete_buffer ( tLexerBuffer, tParser.m_pScanner ); + yylex_destroy ( tParser.m_pScanner ); + + dStmt.Pop(); // last query is always dummy + + ARRAY_FOREACH ( i, dStmt ) + { + CSphQuery & tQuery = dStmt[i].m_tQuery; + if ( tQuery.m_iSQLSelectStart>=0 ) + { + tQuery.m_sSelect.SetBinary ( tParser.m_pBuf + tQuery.m_iSQLSelectStart, + tQuery.m_iSQLSelectEnd - tQuery.m_iSQLSelectStart ); + + // finally check for agent magic + if ( tQuery.m_sSelect.Begins ( "*,*" ) ) // this is the mark of agent. + { + tQuery.m_dItems.Remove(0); + tQuery.m_dItems.Remove(0); + tQuery.m_bAgent = true; + } + } + } + + if ( iRes!=0 || !dStmt.GetLength() ) + return false; + + if ( tParser.IsDeprecatedSyntax() ) + sError = "Using the old-fashion @variables (@count, @weight, etc.) is deprecated"; + + return true; +} + + +///////////////////////////////////////////////////////////////////////////// + +int sphGetPassageBoundary ( const CSphString & sPassageBoundaryMode ) +{ + if ( sPassageBoundaryMode.IsEmpty() ) + return 0; + + int iMode = 0; + if ( sPassageBoundaryMode=="sentence" ) + iMode = MAGIC_CODE_SENTENCE; + else if ( sPassageBoundaryMode=="paragraph" ) + iMode = MAGIC_CODE_PARAGRAPH; + else if ( sPassageBoundaryMode=="zone" ) + iMode = MAGIC_CODE_ZONE; + + return iMode; +} + +bool sphCheckOptionsSPZ ( const ExcerptQuery_t & q, const CSphString & sPassageBoundaryMode, CSphString & sError ) +{ + if ( q.m_iPassageBoundary ) + { + if ( q.m_iAround==0 ) + { + sError.SetSprintf ( "invalid combination of passage_boundary=%s and around=%d", sPassageBoundaryMode.cstr(), q.m_iAround ); + return false; + } else if ( q.m_bUseBoundaries ) + { + sError.SetSprintf ( "invalid combination of passage_boundary=%s and use_boundaries", sPassageBoundaryMode.cstr() ); + return false; + } + } + + if ( q.m_bEmitZones ) + { + if ( q.m_iPassageBoundary!=MAGIC_CODE_ZONE ) + { + sError.SetSprintf ( "invalid combination of passage_boundary=%s and emit_zones", sPassageBoundaryMode.cstr() ); + return false; + } + if ( !( q.m_sStripMode=="strip" || q.m_sStripMode=="index" ) ) + { + sError.SetSprintf ( "invalid combination of strip=%s and emit_zones", q.m_sStripMode.cstr() ); + return false; + } + } + + return true; +} + +///////////////////////////////////////////////////////////////////////////// +// EXCERPTS HANDLER +///////////////////////////////////////////////////////////////////////////// + +enum eExcerpt_Flags +{ + EXCERPT_FLAG_REMOVESPACES = 1, + EXCERPT_FLAG_EXACTPHRASE = 2, + EXCERPT_FLAG_SINGLEPASSAGE = 4, + EXCERPT_FLAG_USEBOUNDARIES = 8, + EXCERPT_FLAG_WEIGHTORDER = 16, + EXCERPT_FLAG_QUERY = 32, + EXCERPT_FLAG_FORCE_ALL_WORDS = 64, + EXCERPT_FLAG_LOAD_FILES = 128, + EXCERPT_FLAG_ALLOW_EMPTY = 256, + EXCERPT_FLAG_EMIT_ZONES = 512 +}; + +struct SnippetWorker_t +{ + int64_t m_iTotal; + int m_iHead; + bool m_bLocal; + + SnippetWorker_t() + : m_iTotal ( 0 ) + , m_iHead ( -1 ) + , m_bLocal ( false ) + {} +}; + +struct SnippetsRemote_t : ISphNoncopyable +{ + CSphVector m_dAgents; + CSphVector m_dWorkers; + CSphVector & m_dQueries; + int m_iAgentConnectTimeout; + int m_iAgentQueryTimeout; + + explicit SnippetsRemote_t ( CSphVector & dQueries ) + : m_dQueries ( dQueries ) + , m_iAgentConnectTimeout ( 0 ) + , m_iAgentQueryTimeout ( 0 ) + {} +}; + +struct SnippetThread_t +{ + SphThread_t m_tThd; + CSphMutex * m_pLock; + int m_iQueries; + ExcerptQuery_t * m_pQueries; + volatile int * m_pCurQuery; + CSphIndex * m_pIndex; + + SnippetThread_t() + : m_pLock ( NULL ) + , m_iQueries ( 0 ) + , m_pQueries ( NULL ) + , m_pCurQuery ( NULL ) + , m_pIndex ( NULL ) + {} +}; + +struct SnippetRequestBuilder_t : public IRequestBuilder_t +{ + explicit SnippetRequestBuilder_t ( const SnippetsRemote_t * pWorker ) + : m_pWorker ( pWorker ) + , m_iLastAgent ( -1 ) + , m_iLastWorker ( -1 ) + {} + virtual void BuildRequest ( const char * sIndexes, NetOutputBuffer_c & tOut, int iNumAgent ) const; + +private: + const SnippetsRemote_t * m_pWorker; + mutable int m_iLastAgent; ///< just a helper to optimize consequental linear search + mutable int m_iLastWorker; ///< just a helper to optimize consequental linear search +}; + + +struct SnippetReplyParser_t : public IReplyParser_t +{ + explicit SnippetReplyParser_t ( SnippetsRemote_t * pWorker ) + : m_pWorker ( pWorker ) + , m_iLastAgent ( -1 ) + , m_iLastWorker ( -1 ) + {} + + virtual bool ParseReply ( MemInputBuffer_c & tReq, AgentConn_t &, int iNumAgent ) const; + +private: + SnippetsRemote_t * m_pWorker; + mutable int m_iLastAgent; ///< just a helper to optimize consequental linear search + mutable int m_iLastWorker; ///< just a helper to optimize consequental linear search +}; + + +static int SnippetGetCurrentWorker ( const int iNumAgent, const int m_iLastAgent, const int m_iLastWorker, const SnippetsRemote_t * m_pWorker ) +{ + int iCurrentWorker = 0; + if ( iNumAgent==m_iLastAgent+1 ) + { + for ( int i=m_iLastWorker+1; im_dWorkers.GetLength(); i++ ) + if ( !m_pWorker->m_dWorkers[i].m_bLocal ) + { + iCurrentWorker = i; + break; + } + } else + { + int j = iNumAgent; + ARRAY_FOREACH ( i, m_pWorker->m_dWorkers ) + if ( !m_pWorker->m_dWorkers[i].m_bLocal ) + { + if ( j-- ) + continue; + iCurrentWorker = i; + break; + } + } + return iCurrentWorker; +} + + +void SnippetRequestBuilder_t::BuildRequest ( const char * sIndex, NetOutputBuffer_c & tOut, int iNumAgent ) const +{ + m_iLastWorker = SnippetGetCurrentWorker ( iNumAgent, m_iLastAgent, m_iLastWorker, m_pWorker ); + m_iLastAgent = iNumAgent; + + const CSphVector & dQueries = m_pWorker->m_dQueries; + const ExcerptQuery_t & q = dQueries[0]; + const SnippetWorker_t & tWorker = m_pWorker->m_dWorkers[m_iLastWorker]; + + int iLen = 60 // 15 ints/dwords - params, strlens, etc. + + strlen ( sIndex ) + + q.m_sWords.Length() + + q.m_sBeforeMatch.Length() + + q.m_sAfterMatch.Length() + + q.m_sChunkSeparator.Length() + + q.m_sStripMode.Length() + + q.m_sRawPassageBoundary.Length(); + + int iNumDocs = 0; + for ( int iDoc = tWorker.m_iHead; iDoc!=-1; iDoc=dQueries[iDoc].m_iNext ) + { + ++iNumDocs; + iLen += 4 + dQueries[iDoc].m_sSource.Length(); + } + + tOut.SendDword ( SPHINX_SEARCHD_PROTO ); + tOut.SendWord ( SEARCHD_COMMAND_EXCERPT ); + tOut.SendWord ( VER_COMMAND_EXCERPT ); + + tOut.SendInt ( iLen ); + + tOut.SendInt ( 0 ); + tOut.SendInt ( q.m_iRawFlags ); + tOut.SendString ( sIndex ); + tOut.SendString ( q.m_sWords.cstr() ); + tOut.SendString ( q.m_sBeforeMatch.cstr() ); + tOut.SendString ( q.m_sAfterMatch.cstr() ); + tOut.SendString ( q.m_sChunkSeparator.cstr() ); + tOut.SendInt ( q.m_iLimit ); + tOut.SendInt ( q.m_iAround ); + + tOut.SendInt ( q.m_iLimitPassages ); + tOut.SendInt ( q.m_iLimitWords ); + tOut.SendInt ( q.m_iPassageId ); + tOut.SendString ( q.m_sStripMode.cstr() ); + tOut.SendString ( q.m_sRawPassageBoundary.cstr() ); + + tOut.SendInt ( iNumDocs ); + for ( int iDoc = tWorker.m_iHead; iDoc!=-1; iDoc=dQueries[iDoc].m_iNext ) + tOut.SendString ( dQueries[iDoc].m_sSource.cstr() ); +} + +bool SnippetReplyParser_t::ParseReply ( MemInputBuffer_c & tReq, AgentConn_t &, int iNumAgent ) const +{ + m_iLastWorker = SnippetGetCurrentWorker ( iNumAgent, m_iLastAgent, m_iLastWorker, m_pWorker ); + m_iLastAgent = iNumAgent; + + CSphVector & dQueries = m_pWorker->m_dQueries; + const SnippetWorker_t & tWorker = m_pWorker->m_dWorkers[m_iLastWorker]; + + int iDoc = tWorker.m_iHead; + while ( iDoc!=-1 ) + { + dQueries[iDoc].m_sRes = tReq.GetString().Leak(); + int iNext = dQueries[iDoc].m_iNext; + dQueries[iDoc].m_iNext = -1; // mark as processed + iDoc = iNext; + } + + return true; +} + + +static bool SnippetTransformPassageMacros ( CSphString & sSrc, CSphString & sPost ) +{ + const char sPassageMacro[] = "%PASSAGE_ID%"; + + const char * sPass = NULL; + if ( !sSrc.IsEmpty() ) + sPass = strstr ( sSrc.cstr(), sPassageMacro ); + + if ( !sPass ) + return false; + + int iSrcLen = sSrc.Length(); + int iPassLen = sizeof ( sPassageMacro ) - 1; + int iTailLen = iSrcLen - iPassLen - ( sPass - sSrc.cstr() ); + + // copy tail + if ( iTailLen ) + sPost.SetBinary ( sPass+iPassLen, iTailLen ); + + CSphString sPre; + sPre.SetBinary ( sSrc.cstr(), sPass - sSrc.cstr() ); + sSrc.Swap ( sPre ); + + return true; +} + +static bool IsSPZEnabled ( const ExcerptQuery_t & q ) +{ + return ( q.m_iPassageBoundary || ( q.m_sStripMode=="retain" && q.m_bHighlightQuery ) ); +} + + +static bool SetupStripperSPZ ( const CSphIndexSettings & tSettings, const ExcerptQuery_t & q, CSphScopedPtr & tStripper, ISphTokenizer * pTokenizer, CSphString & sError ) +{ + bool bSetupSPZ = IsSPZEnabled ( q ); + + if ( bSetupSPZ && + ( !pTokenizer->EnableSentenceIndexing ( sError ) || !pTokenizer->EnableZoneIndexing ( sError ) ) ) + { + return false; + } + + + if ( q.m_sStripMode=="strip" || q.m_sStripMode=="retain" + || ( q.m_sStripMode=="index" && tSettings.m_bHtmlStrip ) ) + { + // don't strip HTML markup in 'retain' mode - proceed zones only + tStripper = new CSphHTMLStripper ( q.m_sStripMode!="retain" ); + + if ( q.m_sStripMode=="index" ) + { + if ( + !tStripper->SetIndexedAttrs ( tSettings.m_sHtmlIndexAttrs.cstr (), sError ) || + !tStripper->SetRemovedElements ( tSettings.m_sHtmlRemoveElements.cstr (), sError ) ) + { + sError.SetSprintf ( "HTML stripper config error: %s", sError.cstr() ); + return false; + } + } + + if ( bSetupSPZ ) + { + tStripper->EnableParagraphs(); + } + + // handle zone(s) in special mode only when passage_boundary enabled + if ( bSetupSPZ && !tStripper->SetZones ( tSettings.m_sZones.cstr (), sError ) ) + { + sError.SetSprintf ( "HTML stripper config error: %s", sError.cstr() ); + return false; + } + } + + return true; +} + + +static CSphDict * SetupExactDict ( const CSphIndexSettings & tSettings, const ExcerptQuery_t & q, CSphScopedPtr & tExact, CSphDict * pDict, ISphTokenizer * pTokenizer ) +{ + // handle index_exact_words + if ( !( q.m_bHighlightQuery && tSettings.m_bIndexExactWords ) ) + return pDict; + + CSphRemapRange tEq ( '=', '=', '=' ); // FIXME? check and warn if star was already there + pTokenizer->AddCaseFolding ( tEq ); + + tExact = new CSphDictExact ( pDict ); + return tExact.Ptr(); +} + + +class SnippetContext_t : ISphNoncopyable +{ +private: + CSphScopedPtr m_tDictCloned; + CSphScopedPtr m_tExactDict; + CSphScopedPtr m_tQueryTokenizer; + +public: + CSphDict * m_pDict; + CSphScopedPtr m_tTokenizer; + CSphScopedPtr m_tStripper; + ISphTokenizer * m_pQueryTokenizer; + + SnippetContext_t() + : m_tDictCloned ( NULL ) + , m_tExactDict ( NULL ) + , m_tQueryTokenizer ( NULL ) + , m_pDict ( NULL ) + , m_tTokenizer ( NULL ) + , m_tStripper ( NULL ) + , m_pQueryTokenizer ( NULL ) + { + } + + bool Setup ( CSphIndex * pIndex, const ExcerptQuery_t & tQuery, CSphString & sError ) + { + CSphScopedPtr tDictCloned ( NULL ); + m_pDict = pIndex->GetDictionary(); + if ( m_pDict->HasState() ) + { + m_tDictCloned = m_pDict = m_pDict->Clone(); + } + + m_tTokenizer = pIndex->GetTokenizer()->Clone ( true ); + m_pQueryTokenizer = m_tTokenizer.Ptr(); + + if ( !SetupStripperSPZ ( pIndex->GetSettings(), tQuery, m_tStripper, m_tTokenizer.Ptr(), sError ) ) + return false; + + if ( IsSPZEnabled ( tQuery ) ) + { + m_tQueryTokenizer = pIndex->GetTokenizer()->Clone ( true ); + m_pQueryTokenizer = m_tQueryTokenizer.Ptr(); + } + + //////////////////////////// + // setup exact dictionary if needed + //////////////////////////// + + m_pDict = SetupExactDict ( pIndex->GetSettings(), tQuery, m_tExactDict, m_pDict, m_tTokenizer.Ptr() ); + + return true; + } +}; + + +void SnippetThreadFunc ( void * pArg ) +{ + SnippetThread_t * pDesc = (SnippetThread_t*) pArg; + + SnippetContext_t tCtx; + tCtx.Setup ( pDesc->m_pIndex, *pDesc->m_pQueries, pDesc->m_pQueries->m_sError ); + + for ( ;; ) + { + pDesc->m_pLock->Lock(); + if ( *pDesc->m_pCurQuery==pDesc->m_iQueries ) + { + pDesc->m_pLock->Unlock(); + return; + } + + ExcerptQuery_t * pQuery = pDesc->m_pQueries + (*pDesc->m_pCurQuery); + (*pDesc->m_pCurQuery)++; + bool bDone = ( *pDesc->m_pCurQuery==pDesc->m_iQueries ); + pDesc->m_pLock->Unlock(); + + if ( pQuery->m_iNext>=0 ) + continue; + + pQuery->m_sRes = sphBuildExcerpt ( *pQuery, tCtx.m_pDict, tCtx.m_tTokenizer.Ptr(), + &pDesc->m_pIndex->GetMatchSchema(), pDesc->m_pIndex, + pQuery->m_sError, tCtx.m_tStripper.Ptr(), tCtx.m_pQueryTokenizer ); + + if ( bDone ) + return; + } +} + + +void HandleCommandExcerpt ( int iSock, int iVer, InputBuffer_c & tReq ) +{ + if ( !CheckCommandVersion ( iVer, VER_COMMAND_EXCERPT, tReq ) ) + return; + + ///////////////////////////// + // parse and process request + ///////////////////////////// + + const int EXCERPT_MAX_ENTRIES = 1024; + + // v.1.1 + ExcerptQuery_t q; + + tReq.GetInt (); // mode field is for now reserved and ignored + int iFlags = tReq.GetInt (); + q.m_iRawFlags = iFlags; + CSphString sIndex = tReq.GetString (); + + q.m_sWords = tReq.GetString (); + q.m_sBeforeMatch = tReq.GetString (); + q.m_sAfterMatch = tReq.GetString (); + q.m_sChunkSeparator = tReq.GetString (); + q.m_iLimit = tReq.GetInt (); + q.m_iAround = tReq.GetInt (); + + if ( iVer>=0x102 ) + { + q.m_iLimitPassages = tReq.GetInt(); + q.m_iLimitWords = tReq.GetInt(); + q.m_iPassageId = tReq.GetInt(); + q.m_sStripMode = tReq.GetString(); + if ( q.m_sStripMode!="none" && q.m_sStripMode!="index" && q.m_sStripMode!="strip" && q.m_sStripMode!="retain" ) + { + tReq.SendErrorReply ( "unknown html_strip_mode=%s", q.m_sStripMode.cstr() ); + return; + } + } + + q.m_bHasBeforePassageMacro = SnippetTransformPassageMacros ( q.m_sBeforeMatch, q.m_sBeforeMatchPassage ); + q.m_bHasAfterPassageMacro = SnippetTransformPassageMacros ( q.m_sAfterMatch, q.m_sAfterMatchPassage ); + + CSphString sPassageBoundaryMode; + if ( iVer>=0x103 ) + q.m_sRawPassageBoundary = tReq.GetString(); + + q.m_bRemoveSpaces = ( iFlags & EXCERPT_FLAG_REMOVESPACES )!=0; + q.m_bExactPhrase = ( iFlags & EXCERPT_FLAG_EXACTPHRASE )!=0; + q.m_bUseBoundaries = ( iFlags & EXCERPT_FLAG_USEBOUNDARIES )!=0; + q.m_bWeightOrder = ( iFlags & EXCERPT_FLAG_WEIGHTORDER )!=0; + q.m_bHighlightQuery = ( iFlags & EXCERPT_FLAG_QUERY )!=0; + q.m_bForceAllWords = ( iFlags & EXCERPT_FLAG_FORCE_ALL_WORDS )!=0; + if ( iFlags & EXCERPT_FLAG_SINGLEPASSAGE ) + q.m_iLimitPassages = 1; + q.m_bLoadFiles = ( iFlags & EXCERPT_FLAG_LOAD_FILES )!=0; + q.m_bAllowEmpty = ( iFlags & EXCERPT_FLAG_ALLOW_EMPTY )!=0; + q.m_bEmitZones = ( iFlags & EXCERPT_FLAG_EMIT_ZONES )!=0; + + int iCount = tReq.GetInt (); + if ( iCount<0 || iCount>EXCERPT_MAX_ENTRIES ) + { + tReq.SendErrorReply ( "invalid entries count %d", iCount ); + return; + } + + q.m_iPassageBoundary = sphGetPassageBoundary ( q.m_sRawPassageBoundary ); + + CSphString sError; + + if ( !sphCheckOptionsSPZ ( q, q.m_sRawPassageBoundary, sError ) ) + { + tReq.SendErrorReply ( "%s", sError.cstr() ); + return; + } + + CSphVector dQueries ( iCount ); + SnippetsRemote_t dRemoteSnippets ( dQueries ); + CSphVector dDistLocal; + bool bRemote = false; + + g_tDistLock.Lock(); + DistributedIndex_t * pDist = g_hDistIndexes ( sIndex ); + if ( pDist ) + { + bRemote = true; + dRemoteSnippets.m_iAgentConnectTimeout = pDist->m_iAgentConnectTimeout; + dRemoteSnippets.m_iAgentQueryTimeout = pDist->m_iAgentQueryTimeout; + dDistLocal = pDist->m_dLocal; + dRemoteSnippets.m_dAgents.Resize ( pDist->m_dAgents.GetLength() ); + ARRAY_FOREACH ( i, pDist->m_dAgents ) + dRemoteSnippets.m_dAgents[i] = pDist->m_dAgents[i]; + } + g_tDistLock.Unlock(); + + if ( bRemote ) + { + if ( dDistLocal.GetLength()!=1 ) + { + tReq.SendErrorReply ( "%s", "The distributed index for snippets must have exactly one local agent" ); + return; + } + + if ( !q.m_bLoadFiles ) + { + tReq.SendErrorReply ( "%s", "The distributed index for snippets available only when using external files" ); + return; + } + sIndex = dDistLocal[0]; + + // no remote - roll back to simple local query + if ( dRemoteSnippets.m_dAgents.GetLength()==0 ) + bRemote = false; + } + + const ServedIndex_t * pServed = g_pIndexes->GetRlockedEntry ( sIndex ); + if ( !pServed || !pServed->m_bEnabled ) + { + tReq.SendErrorReply ( "unknown local index '%s' in search request", sIndex.cstr() ); + if ( pServed ) + pServed->Unlock(); + return; + } + + ARRAY_FOREACH ( i, dQueries ) + { + dQueries[i] = q; // copy settings + dQueries[i].m_sSource = tReq.GetString (); // fetch data + if ( tReq.GetError() ) + { + tReq.SendErrorReply ( "invalid or truncated request" ); + pServed->Unlock(); + return; + } + } + + CSphIndex * pIndex = pServed->m_pIndex; + + SnippetContext_t tCtx; + if ( !tCtx.Setup ( pIndex, q, sError ) ) // same path for single - threaded snippets, bail out here on error + { + tReq.SendErrorReply ( "%s", sError.cstr() ); + pServed->Unlock(); + return; + } + + + /////////////////// + // do highlighting + /////////////////// + + if ( g_iDistThreads<=1 || dQueries.GetLength()<2 ) + { + // boring single threaded loop + ARRAY_FOREACH ( i, dQueries ) + { + dQueries[i].m_sRes = sphBuildExcerpt ( dQueries[i], tCtx.m_pDict, tCtx.m_tTokenizer.Ptr(), &pIndex->GetMatchSchema(), pIndex, dQueries[i].m_sError, tCtx.m_tStripper.Ptr(), tCtx.m_pQueryTokenizer ); + if ( !dQueries[i].m_sRes ) + break; + } + } else + { + // get file sizes + ARRAY_FOREACH ( i, dQueries ) + { + if ( dQueries[i].m_bLoadFiles ) + { + struct stat st; + if ( ::stat ( dQueries[i].m_sSource.cstr(), &st )<0 ) + { + tReq.SendErrorReply ( "failed to stat %s: %s", dQueries[i].m_sSource.cstr(), strerror(errno) ); + pServed->Unlock(); + return; + } + dQueries[i].m_iSize = -st.st_size; // so that sort would put bigger ones first + } else + { + dQueries[i].m_iSize = -dQueries[i].m_sSource.Length(); + } + dQueries[i].m_iSeq = i; + dQueries[i].m_iNext = -1; + } + + // tough jobs first + dQueries.Sort ( bind ( &ExcerptQuery_t::m_iSize ) ); + + if ( bRemote ) + { + // schedule jobs across workers (the worker is either local thread or instance, either remote agent). + // simple LPT (Least Processing Time) scheduling for now + // might add dynamic programming or something later if needed + + int iLocalPart = 1; // one instance = one worker. Or set to = g_iDistThreads, one local thread = one worker. + int iRemoteAgents = dRemoteSnippets.m_dAgents.GetLength(); + + dRemoteSnippets.m_dWorkers.Resize ( iLocalPart + iRemoteAgents ); + for ( int i=0; i dThreads ( g_iDistThreads ); + for ( int i=0; iUnlock(); + + //////////////// + // serve result + //////////////// + + int iRespLen = 0; + ARRAY_FOREACH ( i, dQueries ) + { + // handle errors + if ( !dQueries[i].m_sRes ) + { + tReq.SendErrorReply ( "highlighting failed: %s", dQueries[i].m_sError.cstr() ); + ARRAY_FOREACH ( j, dQueries ) + SafeDeleteArray ( dQueries[j].m_sRes ); + return; + } + + // count packet size + iRespLen += 4 + strlen ( dQueries[i].m_sRes ); + } + + NetOutputBuffer_c tOut ( iSock ); + tOut.SendWord ( SEARCHD_OK ); + tOut.SendWord ( VER_COMMAND_EXCERPT ); + tOut.SendInt ( iRespLen ); + ARRAY_FOREACH ( i, dQueries ) + { + tOut.SendString ( dQueries[i].m_sRes ); + SafeDeleteArray ( dQueries[i].m_sRes ); + } + + tOut.Flush (); + assert ( tOut.GetError()==true || tOut.GetSentCount()==iRespLen+8 ); +} + +///////////////////////////////////////////////////////////////////////////// +// KEYWORDS HANDLER +///////////////////////////////////////////////////////////////////////////// + +void HandleCommandKeywords ( int iSock, int iVer, InputBuffer_c & tReq ) +{ + if ( !CheckCommandVersion ( iVer, VER_COMMAND_KEYWORDS, tReq ) ) + return; + + CSphString sQuery = tReq.GetString (); + CSphString sIndex = tReq.GetString (); + bool bGetStats = !!tReq.GetInt (); + + const ServedIndex_t * pIndex = g_pIndexes->GetRlockedEntry ( sIndex ); + if ( !pIndex ) + { + tReq.SendErrorReply ( "unknown local index '%s' in search request", sIndex.cstr() ); + return; + } + + CSphString sError; + CSphVector < CSphKeywordInfo > dKeywords; + if ( !pIndex->m_pIndex->GetKeywords ( dKeywords, sQuery.cstr (), bGetStats, sError ) ) + { + tReq.SendErrorReply ( "error generating keywords: %s", sError.cstr () ); + pIndex->Unlock(); + return; + } + + pIndex->Unlock(); + + int iRespLen = 4; + ARRAY_FOREACH ( i, dKeywords ) + { + iRespLen += 4 + strlen ( dKeywords[i].m_sTokenized.cstr () ); + iRespLen += 4 + strlen ( dKeywords[i].m_sNormalized.cstr () ); + if ( bGetStats ) + iRespLen += 8; + } + + NetOutputBuffer_c tOut ( iSock ); + tOut.SendWord ( SEARCHD_OK ); + tOut.SendWord ( VER_COMMAND_KEYWORDS ); + tOut.SendInt ( iRespLen ); + tOut.SendInt ( dKeywords.GetLength () ); + ARRAY_FOREACH ( i, dKeywords ) + { + tOut.SendString ( dKeywords[i].m_sTokenized.cstr () ); + tOut.SendString ( dKeywords[i].m_sNormalized.cstr () ); + if ( bGetStats ) + { + tOut.SendInt ( dKeywords[i].m_iDocs ); + tOut.SendInt ( dKeywords[i].m_iHits ); + } + } + + tOut.Flush (); + assert ( tOut.GetError()==true || tOut.GetSentCount()==iRespLen+8 ); +} + +///////////////////////////////////////////////////////////////////////////// +// UPDATES HANDLER +///////////////////////////////////////////////////////////////////////////// + +struct UpdateRequestBuilder_t : public IRequestBuilder_t +{ + explicit UpdateRequestBuilder_t ( const CSphAttrUpdate & pUpd ) : m_tUpd ( pUpd ) {} + virtual void BuildRequest ( const char * sIndexes, NetOutputBuffer_c & tOut, int ) const; + +protected: + const CSphAttrUpdate & m_tUpd; +}; + + +struct UpdateReplyParser_t : public IReplyParser_t +{ + explicit UpdateReplyParser_t ( int * pUpd ) + : m_pUpdated ( pUpd ) + {} + + virtual bool ParseReply ( MemInputBuffer_c & tReq, AgentConn_t &, int ) const + { + *m_pUpdated += tReq.GetDword (); + return true; + } + +protected: + int * m_pUpdated; +}; + + +void UpdateRequestBuilder_t::BuildRequest ( const char * sIndexes, NetOutputBuffer_c & tOut, int ) const +{ + int iReqSize = 4+strlen(sIndexes); // indexes string + iReqSize += 4; // attrs array len, data + ARRAY_FOREACH ( i, m_tUpd.m_dAttrs ) + iReqSize += 8 + strlen ( m_tUpd.m_dAttrs[i].m_sName.cstr() ); + iReqSize += 4; // number of updates + iReqSize += 8*m_tUpd.m_dDocids.GetLength() + 4*m_tUpd.m_dPool.GetLength(); // 64bit ids, 32bit values + + // header + tOut.SendDword ( SPHINX_SEARCHD_PROTO ); + tOut.SendWord ( SEARCHD_COMMAND_UPDATE ); + tOut.SendWord ( VER_COMMAND_UPDATE ); + tOut.SendInt ( iReqSize ); + + tOut.SendString ( sIndexes ); + tOut.SendInt ( m_tUpd.m_dAttrs.GetLength() ); + ARRAY_FOREACH ( i, m_tUpd.m_dAttrs ) + { + tOut.SendString ( m_tUpd.m_dAttrs[i].m_sName.cstr() ); + tOut.SendInt ( ( m_tUpd.m_dAttrs[i].m_eAttrType==SPH_ATTR_UINT32SET || m_tUpd.m_dAttrs[i].m_eAttrType==SPH_ATTR_UINT64SET ) ? 1 : 0 ); + } + tOut.SendInt ( m_tUpd.m_dDocids.GetLength() ); + + ARRAY_FOREACH ( i, m_tUpd.m_dDocids ) + { + int iHead = m_tUpd.m_dRowOffset[i]; + int iTail = ( (i+1)m_pIndex ) + { + dFails.Submit ( sIndex, "index not available" ); + return; + } + + CSphString sError; + int iUpd = pServed->m_pIndex->UpdateAttributes ( tUpd, -1, sError ); + + if ( iUpd<0 ) + { + dFails.Submit ( sIndex, sError.cstr() ); + + } else + { + iUpdated += iUpd; + iSuccesses++; + } +} + + +void HandleCommandUpdate ( int iSock, int iVer, InputBuffer_c & tReq ) +{ + if ( !CheckCommandVersion ( iVer, VER_COMMAND_UPDATE, tReq ) ) + return; + + // parse request + CSphString sIndexes = tReq.GetString (); + CSphAttrUpdate tUpd; + CSphVector dMva; + + tUpd.m_dAttrs.Resize ( tReq.GetDword() ); // FIXME! check this + ARRAY_FOREACH ( i, tUpd.m_dAttrs ) + { + tUpd.m_dAttrs[i].m_sName = tReq.GetString (); + tUpd.m_dAttrs[i].m_sName.ToLower (); + + tUpd.m_dAttrs[i].m_eAttrType = SPH_ATTR_INTEGER; + if ( iVer>=0x102 ) + if ( tReq.GetDword() ) + tUpd.m_dAttrs[i].m_eAttrType = SPH_ATTR_UINT32SET; + } + + int iNumUpdates = tReq.GetInt (); // FIXME! check this + tUpd.m_dDocids.Reserve ( iNumUpdates ); + tUpd.m_dRowOffset.Reserve ( iNumUpdates ); + + for ( int i=0; i=0x101 ) ? tReq.GetUint64 () : tReq.GetDword (); + + tUpd.m_dDocids.Add ( (SphDocID_t)uDocid ); // FIXME! check this + tUpd.m_dRowOffset.Add ( tUpd.m_dPool.GetLength() ); + + ARRAY_FOREACH ( iAttr, tUpd.m_dAttrs ) + { + if ( tUpd.m_dAttrs[iAttr].m_eAttrType==SPH_ATTR_UINT32SET ) + { + DWORD uCount = tReq.GetDword (); + if ( !uCount ) + { + tUpd.m_dPool.Add ( 0 ); + continue; + } + + dMva.Resize ( uCount ); + for ( DWORD j=0; j mva64 + } + } else + { + tUpd.m_dPool.Add ( tReq.GetDword() ); + } + } + } + + if ( tReq.GetError() ) + { + tReq.SendErrorReply ( "invalid or truncated request" ); + return; + } + + // check index names + CSphVector dIndexNames; + ParseIndexList ( sIndexes, dIndexNames ); + + if ( !dIndexNames.GetLength() ) + { + tReq.SendErrorReply ( "no valid indexes in update request" ); + return; + } + + CSphVector dDistributed ( dIndexNames.GetLength() ); // lock safe storage for distributed indexes + ARRAY_FOREACH ( i, dIndexNames ) + { + if ( !g_pIndexes->Exists ( dIndexNames[i].m_sName ) ) + { + // search amongst distributed and copy for further processing + g_tDistLock.Lock(); + const DistributedIndex_t * pDistIndex = g_hDistIndexes ( dIndexNames[i].m_sName ); + + if ( pDistIndex ) + { + dDistributed[i] = *pDistIndex; + dDistributed[i].m_bToDelete = true; // our presence flag + } + + g_tDistLock.Unlock(); + + if ( pDistIndex ) + continue; + else + { + tReq.SendErrorReply ( "unknown index '%s' in update request", dIndexNames[i].m_sName.cstr() ); + return; + } + } + } + + // do update + SearchFailuresLog_c dFails; + int iSuccesses = 0; + int iUpdated = 0; + + ARRAY_FOREACH ( iIdx, dIndexNames ) + { + const char * sReqIndex = dIndexNames[iIdx].m_sName.cstr(); + const ServedIndex_t * pLocked = g_pIndexes->GetRlockedEntry ( sReqIndex ); + if ( pLocked ) + { + DoCommandUpdate ( sReqIndex, tUpd, iSuccesses, iUpdated, dFails, pLocked ); + pLocked->Unlock(); + } else + { + assert ( dDistributed[iIdx].m_bToDelete ); + CSphVector& dLocal = dDistributed[iIdx].m_dLocal; + + ARRAY_FOREACH ( i, dLocal ) + { + const char * sLocal = dLocal[i].cstr(); + const ServedIndex_t * pServed = g_pIndexes->GetRlockedEntry ( sLocal ); + DoCommandUpdate ( sLocal, tUpd, iSuccesses, iUpdated, dFails, pServed ); + if ( pServed ) + pServed->Unlock(); + } + } + + // update remote agents + if ( dDistributed[iIdx].m_bToDelete ) + { + DistributedIndex_t & tDist = dDistributed[iIdx]; + + CSphVector dAgents ( tDist.m_dAgents.GetLength() ); + ARRAY_FOREACH ( i, dAgents ) + dAgents[i] = tDist.m_dAgents[i]; + + // connect to remote agents and query them + ConnectToRemoteAgents ( dAgents, false ); + + UpdateRequestBuilder_t tReqBuilder ( tUpd ); + int iRemote = QueryRemoteAgents ( dAgents, tDist.m_iAgentConnectTimeout, tReqBuilder, NULL ); // FIXME? profile update time too? + + if ( iRemote ) + { + UpdateReplyParser_t tParser ( &iUpdated ); + iSuccesses += WaitForRemoteAgents ( dAgents, tDist.m_iAgentQueryTimeout, tParser, NULL ); // FIXME? profile update time too? + } + } + } + + // serve reply to client + StrBuf_t sReport; + dFails.BuildReport ( sReport ); + + if ( !iSuccesses ) + { + tReq.SendErrorReply ( "%s", sReport.cstr() ); + return; + } + + NetOutputBuffer_c tOut ( iSock ); + if ( dFails.IsEmpty() ) + { + tOut.SendWord ( SEARCHD_OK ); + tOut.SendWord ( VER_COMMAND_UPDATE ); + tOut.SendInt ( 4 ); + } else + { + tOut.SendWord ( SEARCHD_WARNING ); + tOut.SendWord ( VER_COMMAND_UPDATE ); + tOut.SendInt ( 8 + strlen ( sReport.cstr() ) ); + tOut.SendString ( sReport.cstr() ); + } + tOut.SendInt ( iUpdated ); + tOut.Flush (); +} + +////////////////////////////////////////////////////////////////////////// +// STATUS HANDLER +////////////////////////////////////////////////////////////////////////// + +static inline void FormatMsec ( CSphString & sOut, int64_t tmTime ) +{ + sOut.SetSprintf ( "%d.%03d", (int)( tmTime/1000000 ), (int)( (tmTime%1000000)/1000 ) ); +} + + +void BuildStatus ( CSphVector & dStatus ) +{ + assert ( g_pStats ); + const char * FMT64 = INT64_FMT; + const char * OFF = "OFF"; + + const int64_t iQueriesDiv = Max ( g_pStats->m_iQueries, 1 ); + const int64_t iDistQueriesDiv = Max ( g_pStats->m_iDistQueries, 1 ); + + // FIXME? non-transactional!!! + dStatus.Add ( "uptime" ); dStatus.Add().SetSprintf ( "%u", (DWORD)time(NULL)-g_pStats->m_uStarted ); + dStatus.Add ( "connections" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iConnections ); + dStatus.Add ( "maxed_out" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iMaxedOut ); + dStatus.Add ( "command_search" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iCommandCount[SEARCHD_COMMAND_SEARCH] ); + dStatus.Add ( "command_excerpt" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iCommandCount[SEARCHD_COMMAND_EXCERPT] ); + dStatus.Add ( "command_update" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iCommandCount[SEARCHD_COMMAND_UPDATE] ); + dStatus.Add ( "command_keywords" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iCommandCount[SEARCHD_COMMAND_KEYWORDS] ); + dStatus.Add ( "command_persist" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iCommandCount[SEARCHD_COMMAND_PERSIST] ); + dStatus.Add ( "command_status" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iCommandCount[SEARCHD_COMMAND_STATUS] ); + dStatus.Add ( "command_flushattrs" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iCommandCount[SEARCHD_COMMAND_FLUSHATTRS] ); + dStatus.Add ( "agent_connect" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iAgentConnect ); + dStatus.Add ( "agent_retry" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iAgentRetry ); + dStatus.Add ( "queries" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iQueries ); + dStatus.Add ( "dist_queries" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iDistQueries ); + + g_tDistLock.Lock(); + g_hDistIndexes.IterateStart(); + while ( g_hDistIndexes.IterateNext() ) + { + const char * sIdx = g_hDistIndexes.IterateGetKey().cstr(); + CSphVector & dAgents = g_hDistIndexes.IterateGet().m_dAgents; + ARRAY_FOREACH ( i, dAgents ) + { + int iIndex = dAgents[i].m_iStatsIndex; + if ( iIndex<0 || iIndex>=STATS_MAX_AGENTS ) + continue; + + AgentStats_t & tStats = g_pStats->m_dAgentStats[iIndex]; + dStatus.Add().SetSprintf ( "ag_%s_%d_query_timeouts", sIdx, i ); dStatus.Add().SetSprintf ( FMT64, tStats.m_iTimeoutsQuery ); + dStatus.Add().SetSprintf ( "ag_%s_%d_connect_timeouts", sIdx, i ); dStatus.Add().SetSprintf ( FMT64, tStats.m_iTimeoutsConnect ); + dStatus.Add().SetSprintf ( "ag_%s_%d_connect_failures", sIdx, i ); dStatus.Add().SetSprintf ( FMT64, tStats.m_iConnectFailures ); + dStatus.Add().SetSprintf ( "ag_%s_%d_network_errors", sIdx, i ); dStatus.Add().SetSprintf ( FMT64, tStats.m_iNetworkErrors ); + dStatus.Add().SetSprintf ( "ag_%s_%d_wrong_replies", sIdx, i ); dStatus.Add().SetSprintf ( FMT64, tStats.m_iWrongReplies ); + dStatus.Add().SetSprintf ( "ag_%s_%d_unexpected_closings", sIdx, i ); dStatus.Add().SetSprintf ( FMT64, tStats.m_iUnexpectedClose ); + } + } + g_tDistLock.Unlock(); + + dStatus.Add ( "query_wall" ); FormatMsec ( dStatus.Add(), g_pStats->m_iQueryTime ); + + dStatus.Add ( "query_cpu" ); + if ( g_bCpuStats ) + FormatMsec ( dStatus.Add(), g_pStats->m_iQueryCpuTime ); + else + dStatus.Add() = OFF; + + dStatus.Add ( "dist_wall" ); FormatMsec ( dStatus.Add(), g_pStats->m_iDistWallTime ); + dStatus.Add ( "dist_local" ); FormatMsec ( dStatus.Add(), g_pStats->m_iDistLocalTime ); + dStatus.Add ( "dist_wait" ); FormatMsec ( dStatus.Add(), g_pStats->m_iDistWaitTime ); + + if ( g_bIOStats ) + { + dStatus.Add ( "query_reads" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iDiskReads ); + dStatus.Add ( "query_readkb" ); dStatus.Add().SetSprintf ( FMT64, g_pStats->m_iDiskReadBytes/1024 ); + dStatus.Add ( "query_readtime" ); FormatMsec ( dStatus.Add(), g_pStats->m_iDiskReadTime ); + } else + { + dStatus.Add ( "query_reads" ); dStatus.Add() = OFF; + dStatus.Add ( "query_readkb" ); dStatus.Add() = OFF; + dStatus.Add ( "query_readtime" ); dStatus.Add() = OFF; + } + + dStatus.Add ( "avg_query_wall" ); FormatMsec ( dStatus.Add(), g_pStats->m_iQueryTime / iQueriesDiv ); + dStatus.Add ( "avg_query_cpu" ); + if ( g_bCpuStats ) + FormatMsec ( dStatus.Add(), g_pStats->m_iQueryCpuTime / iQueriesDiv ); + else + dStatus.Add ( OFF ); + dStatus.Add ( "avg_dist_wall" ); FormatMsec ( dStatus.Add(), g_pStats->m_iDistWallTime / iDistQueriesDiv ); + dStatus.Add ( "avg_dist_local" ); FormatMsec ( dStatus.Add(), g_pStats->m_iDistLocalTime / iDistQueriesDiv ); + dStatus.Add ( "avg_dist_wait" ); FormatMsec ( dStatus.Add(), g_pStats->m_iDistWaitTime / iDistQueriesDiv ); + if ( g_bIOStats ) + { + dStatus.Add ( "avg_query_reads" ); dStatus.Add().SetSprintf ( "%.1f", (float)( g_pStats->m_iDiskReads*10/iQueriesDiv )/10.0f ); + dStatus.Add ( "avg_query_readkb" ); dStatus.Add().SetSprintf ( "%.1f", (float)( g_pStats->m_iDiskReadBytes/iQueriesDiv )/1024.0f ); + dStatus.Add ( "avg_query_readtime" ); FormatMsec ( dStatus.Add(), g_pStats->m_iDiskReadTime/iQueriesDiv ); + } else + { + dStatus.Add ( "avg_query_reads" ); dStatus.Add() = OFF; + dStatus.Add ( "avg_query_readkb" ); dStatus.Add() = OFF; + dStatus.Add ( "avg_query_readtime" ); dStatus.Add() = OFF; + } +} + + +void BuildMeta ( CSphVector & dStatus, const CSphQueryResultMeta & tMeta ) +{ + if ( !tMeta.m_sError.IsEmpty() ) + { + dStatus.Add ( "error" ); + dStatus.Add ( tMeta.m_sError ); + } + + if ( !tMeta.m_sWarning.IsEmpty() ) + { + dStatus.Add ( "warning" ); + dStatus.Add ( tMeta.m_sWarning ); + } + + dStatus.Add ( "total" ); + dStatus.Add().SetSprintf ( "%d", tMeta.m_iMatches ); + + dStatus.Add ( "total_found" ); + dStatus.Add().SetSprintf ( "%d", tMeta.m_iTotalMatches ); + + dStatus.Add ( "time" ); + dStatus.Add().SetSprintf ( "%d.%03d", tMeta.m_iQueryTime/1000, tMeta.m_iQueryTime%1000 ); + + int iWord = 0; + tMeta.m_hWordStats.IterateStart(); + while ( tMeta.m_hWordStats.IterateNext() ) + { + const CSphQueryResultMeta::WordStat_t & tStat = tMeta.m_hWordStats.IterateGet(); + + dStatus.Add().SetSprintf ( "keyword[%d]", iWord ); + dStatus.Add ( tMeta.m_hWordStats.IterateGetKey() ); + + dStatus.Add().SetSprintf ( "docs[%d]", iWord ); + dStatus.Add().SetSprintf ( "%d", tStat.m_iDocs ); + + dStatus.Add().SetSprintf ( "hits[%d]", iWord ); + dStatus.Add().SetSprintf ( "%d", tStat.m_iHits ); + + iWord++; + } +} + + +void HandleCommandStatus ( int iSock, int iVer, InputBuffer_c & tReq ) +{ + if ( !CheckCommandVersion ( iVer, VER_COMMAND_STATUS, tReq ) ) + return; + + if ( !g_pStats ) + { + tReq.SendErrorReply ( "performance counters disabled" ); + return; + } + + CSphVector dStatus; + BuildStatus ( dStatus ); + + int iRespLen = 8; // int rows, int cols + ARRAY_FOREACH ( i, dStatus ) + iRespLen += 4 + strlen ( dStatus[i].cstr() ); + + NetOutputBuffer_c tOut ( iSock ); + tOut.SendWord ( SEARCHD_OK ); + tOut.SendWord ( VER_COMMAND_STATUS ); + tOut.SendInt ( iRespLen ); + + tOut.SendInt ( dStatus.GetLength()/2 ); // rows + tOut.SendInt ( 2 ); // cols + ARRAY_FOREACH ( i, dStatus ) + tOut.SendString ( dStatus[i].cstr() ); + + tOut.Flush (); + assert ( tOut.GetError()==true || tOut.GetSentCount()==8+iRespLen ); +} + +////////////////////////////////////////////////////////////////////////// +// FLUSH HANDLER +////////////////////////////////////////////////////////////////////////// + +void HandleCommandFlush ( int iSock, int iVer, InputBuffer_c & tReq ) +{ + if ( !CheckCommandVersion ( iVer, VER_COMMAND_FLUSHATTRS, tReq ) ) + return; + + // only if flushes are enabled + if ( g_iAttrFlushPeriod<=0 ) + { + // flushes are disabled + sphLogDebug ( "attrflush: attr_flush_period<=0, command ignored" ); + + } else if ( g_eWorkers==MPM_NONE ) + { + // --console mode, no async thread/process to handle the check + sphLogDebug ( "attrflush: --console mode, command ignored" ); + + } else + { + // force a check in head process, and wait it until completes + // FIXME! semi active wait.. + sphLogDebug ( "attrflush: forcing check, tag=%d", g_pFlush->m_iFlushTag ); + g_pFlush->m_bForceCheck = true; + while ( g_pFlush->m_bForceCheck ) + sphSleepMsec ( 1 ); + + // if we are flushing now, wait until flush completes + while ( g_pFlush->m_bFlushing ) + sphSleepMsec ( 10 ); + sphLogDebug ( "attrflush: check finished, tag=%d", g_pFlush->m_iFlushTag ); + } + + // return last flush tag, just for the fun of it + NetOutputBuffer_c tOut ( iSock ); + tOut.SendWord ( SEARCHD_OK ); + tOut.SendWord ( VER_COMMAND_FLUSHATTRS ); + tOut.SendInt ( 4 ); // resplen, 1 dword + tOut.SendInt ( g_pFlush->m_iFlushTag ); + tOut.Flush (); + assert ( tOut.GetError()==true || tOut.GetSentCount()==12 ); // 8+resplen +} + +///////////////////////////////////////////////////////////////////////////// +// GENERAL HANDLER +///////////////////////////////////////////////////////////////////////////// + +#define THD_STATE(_state) { if ( pThd ) pThd->m_eThdState = _state; } + +void HandleClientSphinx ( int iSock, const char * sClientIP, ThdDesc_t * pThd ) +{ + MEMORY ( SPH_MEM_HANDLE_NONSQL ); + THD_STATE ( THD_HANDSHAKE ); + + bool bPersist = false; + int iTimeout = g_iReadTimeout; // wait 5 sec until first command + NetInputBuffer_c tBuf ( iSock ); + + // send my version + DWORD uServer = htonl ( SPHINX_SEARCHD_PROTO ); + if ( sphSockSend ( iSock, (char*)&uServer, sizeof(DWORD) )!=sizeof(DWORD) ) + { + sphWarning ( "failed to send server version (client=%s)", sClientIP ); + return; + } + + // get client version and request + tBuf.ReadFrom ( 4 ); // FIXME! magic + int iMagic = tBuf.GetInt (); // client version is for now unused + + sphLogDebugv ( "conn %s: got handshake, major v.%d, err %d", sClientIP, iMagic, (int)tBuf.GetError() ); + if ( tBuf.GetError() ) + { + sphLogDebugv ( "conn %s: exiting on handshake error", sClientIP ); + return; + } + + int iPconnIdle = 0; + do + { + // in "persistent connection" mode, we want interruptible waits + // so that the worker child could be forcibly restarted + // + // currently, the only signal allowed to interrupt this read is SIGTERM + // letting SIGHUP interrupt causes trouble under query/rotation pressure + // see sphSockRead() and ReadFrom() for details + THD_STATE ( THD_NET_READ ); + bool bCommand = tBuf.ReadFrom ( 8, iTimeout, bPersist ); + + // on SIGTERM, bail unconditionally and immediately, at all times + if ( !bCommand && g_bGotSigterm ) + { + sphLogDebugv ( "conn %s: bailing on SIGTERM", sClientIP ); + break; + } + + // on SIGHUP vs pconn, bail if a pconn was idle for 1 sec + if ( bPersist && !bCommand && g_bGotSighup && sphSockPeekErrno()==ETIMEDOUT ) + { + sphLogDebugv ( "conn %s: bailing idle pconn on SIGHUP", sClientIP ); + break; + } + + // on pconn that was idle for 300 sec (client_timeout), bail + if ( bPersist && !bCommand && sphSockPeekErrno()==ETIMEDOUT ) + { + iPconnIdle += iTimeout; + if ( iPconnIdle>=g_iClientTimeout ) + { + sphLogDebugv ( "conn %s: bailing idle pconn on client_timeout", sClientIP ); + break; + } + continue; + } else + iPconnIdle = 0; + + // on any other signals vs pconn, ignore and keep looping + // (redundant for now, as the only allowed interruption is SIGTERM, but.. let's keep it) + if ( bPersist && !bCommand && tBuf.IsIntr() ) + continue; + + // okay, signal related mess should be over, try to parse the command + // (but some other socket error still might had happened, so beware) + int iCommand = tBuf.GetWord (); + int iCommandVer = tBuf.GetWord (); + int iLength = tBuf.GetInt (); + if ( tBuf.GetError() ) + { + // under high load, there can be pretty frequent accept() vs connect() timeouts + // lets avoid agent log flood + // + // sphWarning ( "failed to receive client version and request (client=%s, error=%s)", sClientIP, sphSockError() ); + sphLogDebugv ( "conn %s: bailing on failed request header (sockerr=%s)", sClientIP, sphSockError() ); + return; + } + + // check request + if ( iCommand<0 || iCommand>=SEARCHD_COMMAND_TOTAL + || iLength<0 || iLength>g_iMaxPacketSize ) + { + // unknown command, default response header + tBuf.SendErrorReply ( "unknown command (code=%d)", iCommand ); + + // if request length is insane, low level comm is broken, so we bail out + if ( iLength<0 || iLength>g_iMaxPacketSize ) + { + sphWarning ( "ill-formed client request (length=%d out of bounds)", iLength ); + return; + } + } + + // count commands + if ( g_pStats && iCommand>=0 && iCommandm_iCommandCount[iCommand]++; + g_tStatsMutex.Unlock(); + } + + // get request body + assert ( iLength>=0 && iLength<=g_iMaxPacketSize ); + if ( iLength && !tBuf.ReadFrom ( iLength ) ) + { + sphWarning ( "failed to receive client request body (client=%s, exp=%d)", sClientIP, iLength ); + return; + } + + // set on query guard + SphCrashLogger_c::SetLastQuery ( tBuf.GetBufferPtr(), iLength, false, iCommand, iCommandVer ); + + // handle known commands + assert ( iCommand>=0 && iCommandm_sCommand = g_dApiCommands[iCommand]; + THD_STATE ( THD_QUERY ); + + sphLogDebugv ( "conn %s: got command %d, handling", sClientIP, iCommand ); + switch ( iCommand ) + { + case SEARCHD_COMMAND_SEARCH: HandleCommandSearch ( iSock, iCommandVer, tBuf ); break; + case SEARCHD_COMMAND_EXCERPT: HandleCommandExcerpt ( iSock, iCommandVer, tBuf ); break; + case SEARCHD_COMMAND_KEYWORDS: HandleCommandKeywords ( iSock, iCommandVer, tBuf ); break; + case SEARCHD_COMMAND_UPDATE: HandleCommandUpdate ( iSock, iCommandVer, tBuf ); break; + case SEARCHD_COMMAND_PERSIST: + bPersist = ( tBuf.GetInt()!=0 ); + iTimeout = 1; + sphLogDebugv ( "conn %s: pconn is now %s", sClientIP, bPersist ? "on" : "off" ); + break; + case SEARCHD_COMMAND_STATUS: HandleCommandStatus ( iSock, iCommandVer, tBuf ); break; + case SEARCHD_COMMAND_FLUSHATTRS:HandleCommandFlush ( iSock, iCommandVer, tBuf ); break; + default: assert ( 0 && "INTERNAL ERROR: unhandled command" ); break; + } + + // set off query guard + SphCrashLogger_c::SetLastQuery ( NULL, 0, false ); + } while ( bPersist ); + + sphLogDebugv ( "conn %s: exiting", sClientIP ); +} + +////////////////////////////////////////////////////////////////////////// +// MYSQLD PRETENDER +////////////////////////////////////////////////////////////////////////// + +// our copy of enum_field_types +// we can't rely on mysql_com.h because it might be unavailable +// +// MYSQL_TYPE_DECIMAL = 0 +// MYSQL_TYPE_TINY = 1 +// MYSQL_TYPE_SHORT = 2 +// MYSQL_TYPE_LONG = 3 +// MYSQL_TYPE_FLOAT = 4 +// MYSQL_TYPE_DOUBLE = 5 +// MYSQL_TYPE_NULL = 6 +// MYSQL_TYPE_TIMESTAMP = 7 +// MYSQL_TYPE_LONGLONG = 8 +// MYSQL_TYPE_INT24 = 9 +// MYSQL_TYPE_DATE = 10 +// MYSQL_TYPE_TIME = 11 +// MYSQL_TYPE_DATETIME = 12 +// MYSQL_TYPE_YEAR = 13 +// MYSQL_TYPE_NEWDATE = 14 +// MYSQL_TYPE_VARCHAR = 15 +// MYSQL_TYPE_BIT = 16 +// MYSQL_TYPE_NEWDECIMAL = 246 +// MYSQL_TYPE_ENUM = 247 +// MYSQL_TYPE_SET = 248 +// MYSQL_TYPE_TINY_BLOB = 249 +// MYSQL_TYPE_MEDIUM_BLOB = 250 +// MYSQL_TYPE_LONG_BLOB = 251 +// MYSQL_TYPE_BLOB = 252 +// MYSQL_TYPE_VAR_STRING = 253 +// MYSQL_TYPE_STRING = 254 +// MYSQL_TYPE_GEOMETRY = 255 + +enum MysqlColumnType_e +{ + MYSQL_COL_DECIMAL = 0, + MYSQL_COL_LONG = 3, + MYSQL_COL_LONGLONG = 8, + MYSQL_COL_STRING = 254 +}; + + +void SendMysqlFieldPacket ( NetOutputBuffer_c & tOut, BYTE uPacketID, const char * sCol, MysqlColumnType_e eType ) +{ + const char * sDB = ""; + const char * sTable = ""; + + int iLen = 17 + MysqlPackedLen(sDB) + 2*( MysqlPackedLen(sTable) + MysqlPackedLen(sCol) ); + + int iColLen = 0; + switch ( eType ) + { + case MYSQL_COL_DECIMAL: iColLen = 20; break; + case MYSQL_COL_LONG: iColLen = 11; break; + case MYSQL_COL_LONGLONG: iColLen = 20; break; + case MYSQL_COL_STRING: iColLen = 255; break; + } + + tOut.SendLSBDword ( (uPacketID<<24) + iLen ); + tOut.SendMysqlString ( "def" ); // catalog + tOut.SendMysqlString ( sDB ); // db + tOut.SendMysqlString ( sTable ); // table + tOut.SendMysqlString ( sTable ); // org_table + tOut.SendMysqlString ( sCol ); // name + tOut.SendMysqlString ( sCol ); // org_name + + tOut.SendByte ( 12 ); // filler, must be 12 (following pseudo-string length) + tOut.SendByte ( 8 ); // charset_nr, 8 is latin1 + tOut.SendByte ( 0 ); // charset_nr + tOut.SendLSBDword ( iColLen ); // length + tOut.SendByte ( BYTE(eType) ); // type (0=decimal) + tOut.SendWord ( 0 ); // flags + tOut.SendByte ( 0 ); // decimals + tOut.SendWord ( 0 ); // filler +} + + +// from mysqld_error.h +enum MysqlErrors_e +{ + MYSQL_ERR_UNKNOWN_COM_ERROR = 1047, + MYSQL_ERR_SERVER_SHUTDOWN = 1053, + MYSQL_ERR_PARSE_ERROR = 1064, + MYSQL_ERR_FIELD_SPECIFIED_TWICE = 1110, + MYSQL_ERR_NO_SUCH_TABLE = 1146 +}; + + +void SendMysqlErrorPacket ( NetOutputBuffer_c & tOut, BYTE uPacketID, const char * sError, MysqlErrors_e iErr=MYSQL_ERR_PARSE_ERROR ) +{ + if ( sError==NULL ) + sError = "(null)"; + + int iErrorLen = strlen(sError)+1; // including the trailing zero + int iLen = 9 + iErrorLen; + int iError = iErr; // pretend to be mysql syntax error for now + + // send packet header + tOut.SendLSBDword ( (uPacketID<<24) + iLen ); + tOut.SendByte ( 0xff ); // field count, always 0xff for error packet + tOut.SendByte ( (BYTE)( iError & 0xff ) ); + tOut.SendByte ( (BYTE)( iError>>8 ) ); + + // send sqlstate (1 byte marker, 5 byte state) + switch ( iErr ) + { + case MYSQL_ERR_SERVER_SHUTDOWN: + case MYSQL_ERR_UNKNOWN_COM_ERROR: + tOut.SendBytes ( "#08S01", 6 ); + break; + case MYSQL_ERR_NO_SUCH_TABLE: + tOut.SendBytes ( "#42S02", 6 ); + break; + default: + tOut.SendBytes ( "#42000", 6 ); + break; + } + + // send error message + tOut.SendBytes ( sError, iErrorLen ); +} + + +void SendMysqlEofPacket ( NetOutputBuffer_c & tOut, BYTE uPacketID, int iWarns, bool bMoreResults=false ) +{ + if ( iWarns<0 ) iWarns = 0; + if ( iWarns>65535 ) iWarns = 65535; + if ( bMoreResults ) +#if USE_MYSQL + iWarns |= ( SERVER_MORE_RESULTS_EXISTS<<16 ); +#else + iWarns = iWarns; +#endif + + tOut.SendLSBDword ( (uPacketID<<24) + 5 ); + tOut.SendByte ( 0xfe ); + tOut.SendLSBDword ( iWarns ); // N warnings, 0 status +} + + +void SendMysqlOkPacket ( NetOutputBuffer_c & tOut, BYTE uPacketID, int iAffectedRows=0, int iWarns=0, const char * sMessage=NULL ) +{ + DWORD iInsert_id = 0; + char sVarLen[20] = {0}; // max 18 for packed number, +1 more just for fun + void * pBuf = sVarLen; + pBuf = MysqlPack ( pBuf, iAffectedRows ); + pBuf = MysqlPack ( pBuf, iInsert_id ); + int iLen = (char *) pBuf - sVarLen; + + int iMsgLen = 0; + if ( sMessage ) + iMsgLen = strlen(sMessage) + 1; // FIXME! does or doesn't the trailing zero necessary in Ok packet? + + tOut.SendLSBDword ( (uPacketID<<24) + iLen + iMsgLen + 5); + tOut.SendByte ( 0 ); // ok packet + tOut.SendBytes ( sVarLen, iLen ); // packed affected rows & insert_id + if ( iWarns<0 ) iWarns = 0; + if ( iWarns>65535 ) iWarns = 65535; + tOut.SendLSBDword ( iWarns ); // N warnings, 0 status + if ( iMsgLen > 0 ) + tOut.SendBytes ( sMessage, iMsgLen ); +} + + +struct CmpColumns_fn +{ + inline bool IsLess ( const CSphString & a, const CSphString & b ) const + { + return CmpString ( a, b )<0; + } +}; + + +void HandleMysqlInsert ( const SqlStmt_t & tStmt, NetOutputBuffer_c & tOut, BYTE uPacketID, bool bReplace, bool bCommit ) +{ + MEMORY ( SPH_MEM_INSERT_SQL ); + + CSphString sError; + + // get that index + const ServedIndex_t * pServed = g_pIndexes->GetRlockedEntry ( tStmt.m_sIndex ); + if ( !pServed ) + { + sError.SetSprintf ( "no such index '%s'", tStmt.m_sIndex.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + if ( !pServed->m_bRT || !pServed->m_bEnabled ) + { + pServed->Unlock(); + sError.SetSprintf ( "index '%s' does not support INSERT (enabled=%d)", tStmt.m_sIndex.cstr(), pServed->m_bEnabled ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + ISphRtIndex * pIndex = dynamic_cast ( pServed->m_pIndex ); // FIXME? remove dynamic_cast? + assert ( pIndex ); + + // get schema, check values count + const CSphSchema & tSchema = pIndex->GetInternalSchema(); + int iSchemaSz = tSchema.GetAttrsCount() + tSchema.m_dFields.GetLength() + 1; + int iExp = tStmt.m_iSchemaSz; + int iGot = tStmt.m_dInsertValues.GetLength(); + if ( !tStmt.m_dInsertSchema.GetLength() && ( iSchemaSz!=tStmt.m_iSchemaSz ) ) + { + pServed->Unlock(); + sError.SetSprintf ( "column count does not match schema (expected %d, got %d)", iSchemaSz, iGot ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + if ( ( iGot % iExp )!=0 ) + { + pServed->Unlock(); + sError.SetSprintf ( "column count does not match value count (expected %d, got %d)", iExp, iGot ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + CSphVector dAttrSchema ( tSchema.GetAttrsCount() ); + CSphVector dFieldSchema ( tSchema.m_dFields.GetLength() ); + int iIdIndex = 0; + if ( !tStmt.m_dInsertSchema.GetLength() ) + { + // no columns list, use index schema + ARRAY_FOREACH ( i, dFieldSchema ) + dFieldSchema[i] = i+1; + int iFields = dFieldSchema.GetLength(); + ARRAY_FOREACH ( j, dAttrSchema ) + dAttrSchema[j] = j+iFields+1; + } else + { + // got a list of columns, check for 1) existance, 2) dupes + CSphVector dCheck = tStmt.m_dInsertSchema; + ARRAY_FOREACH ( i, dCheck ) + // OPTIMIZE! GetAttrIndex and GetFieldIndex use the linear searching. M.b. hash instead? + if ( dCheck[i]!="id" && tSchema.GetAttrIndex ( dCheck[i].cstr() )==-1 && tSchema.GetFieldIndex ( dCheck[i].cstr() )==-1 ) + { + pServed->Unlock(); + sError.SetSprintf ( "unknown column: '%s'", dCheck[i].cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr(), MYSQL_ERR_PARSE_ERROR ); + return; + } + + dCheck.Sort ( CmpColumns_fn() ); + + ARRAY_FOREACH ( i, dCheck ) + if ( i>0 && dCheck[i-1]==dCheck[i] ) + { + pServed->Unlock(); + sError.SetSprintf ( "column '%s' specified twice", dCheck[i].cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr(), MYSQL_ERR_FIELD_SPECIFIED_TWICE ); + return; + } + + // hash column list + // OPTIMIZE! hash index columns once (!) instead + SmallStringHash_T dInsertSchema; + ARRAY_FOREACH ( i, tStmt.m_dInsertSchema ) + dInsertSchema.Add ( i, tStmt.m_dInsertSchema[i] ); + + // get id index + if ( !dInsertSchema.Exists("id") ) + { + pServed->Unlock(); + SendMysqlErrorPacket ( tOut, uPacketID, "column list must contain an 'id' column" ); + return; + } + iIdIndex = dInsertSchema["id"]; + + // map fields + bool bIdDupe = false; + ARRAY_FOREACH ( i, dFieldSchema ) + { + if ( dInsertSchema.Exists ( tSchema.m_dFields[i].m_sName ) ) + { + int iField = dInsertSchema[tSchema.m_dFields[i].m_sName]; + if ( iField==iIdIndex ) + { + bIdDupe = true; + break; + } + dFieldSchema[i] = iField; + } else + dFieldSchema[i] = -1; + } + if ( bIdDupe ) + { + pServed->Unlock(); + SendMysqlErrorPacket ( tOut, uPacketID, "fields must never be named 'id' (fix your config)" ); + return; + } + + // map attrs + ARRAY_FOREACH ( j, dAttrSchema ) + { + if ( dInsertSchema.Exists ( tSchema.GetAttr(j).m_sName ) ) + { + int iField = dInsertSchema[tSchema.GetAttr(j).m_sName]; + if ( iField==iIdIndex ) + { + bIdDupe = true; + break; + } + dAttrSchema[j] = iField; + } else + dAttrSchema[j] = -1; + } + if ( bIdDupe ) + { + pServed->Unlock(); + sError.SetSprintf ( "attributes must never be named 'id' (fix your config)" ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + } + + CSphVector dStrings; + CSphVector dMvas; + + // convert attrs + for ( int c=0; cUniq(); + int iLen = tVal.m_pVals->GetLength(); + if ( tCol.m_eAttrType==SPH_ATTR_UINT64SET ) + { + dMvas.Add ( iLen*2 ); + for ( int j=0; j>32 ); + dMvas.Add ( uLow ); + dMvas.Add ( uHi ); + } + } else + { + dMvas.Add ( iLen ); + for ( int j=0; j dFields; + ARRAY_FOREACH ( i, tSchema.m_dFields ) + { + int iQuerySchemaIdx = dFieldSchema[i]; + if ( iQuerySchemaIdx < 0 ) + dFields.Add ( "" ); // default value + else + { + if ( tStmt.m_dInsertValues [ iQuerySchemaIdx + c * iExp ].m_iType!=TOK_QUOTED_STRING ) + { + sError.SetSprintf ( "row %d, column %d: string expected", 1+c, 1+iQuerySchemaIdx ); // 1 for human base + break; + } + dFields.Add ( tStmt.m_dInsertValues[ iQuerySchemaIdx + c * iExp ].m_sVal.cstr() ); + } + } + if ( !sError.IsEmpty() ) + break; + + // do add + pIndex->AddDocument ( dFields.GetLength(), dFields.Begin(), tDoc, bReplace, dStrings.Begin(), dMvas, sError ); + + if ( !sError.IsEmpty() ) + break; + } + + // fire exit + if ( !sError.IsEmpty() ) + { + pServed->Unlock(); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + // no errors so far + if ( bCommit ) + pIndex->Commit (); + + pServed->Unlock(); + + // my OK packet + SendMysqlOkPacket ( tOut, uPacketID, tStmt.m_iRowsAffected ); +} + + +// our copy of enum_server_command +// we can't rely on mysql_com.h because it might be unavailable +// +// MYSQL_COM_SLEEP = 0 +// MYSQL_COM_QUIT = 1 +// MYSQL_COM_INIT_DB = 2 +// MYSQL_COM_QUERY = 3 +// MYSQL_COM_FIELD_LIST = 4 +// MYSQL_COM_CREATE_DB = 5 +// MYSQL_COM_DROP_DB = 6 +// MYSQL_COM_REFRESH = 7 +// MYSQL_COM_SHUTDOWN = 8 +// MYSQL_COM_STATISTICS = 9 +// MYSQL_COM_PROCESS_INFO = 10 +// MYSQL_COM_CONNECT = 11 +// MYSQL_COM_PROCESS_KILL = 12 +// MYSQL_COM_DEBUG = 13 +// MYSQL_COM_PING = 14 +// MYSQL_COM_TIME = 15 +// MYSQL_COM_DELAYED_INSERT = 16 +// MYSQL_COM_CHANGE_USER = 17 +// MYSQL_COM_BINLOG_DUMP = 18 +// MYSQL_COM_TABLE_DUMP = 19 +// MYSQL_COM_CONNECT_OUT = 20 +// MYSQL_COM_REGISTER_SLAVE = 21 +// MYSQL_COM_STMT_PREPARE = 22 +// MYSQL_COM_STMT_EXECUTE = 23 +// MYSQL_COM_STMT_SEND_LONG_DATA = 24 +// MYSQL_COM_STMT_CLOSE = 25 +// MYSQL_COM_STMT_RESET = 26 +// MYSQL_COM_SET_OPTION = 27 +// MYSQL_COM_STMT_FETCH = 28 + +enum +{ + MYSQL_COM_QUIT = 1, + MYSQL_COM_INIT_DB = 2, + MYSQL_COM_QUERY = 3, + MYSQL_COM_PING = 14, + MYSQL_COM_SET_OPTION = 27 +}; + + +void HandleMysqlCallSnippets ( NetOutputBuffer_c & tOut, BYTE uPacketID, SqlStmt_t & tStmt ) +{ + CSphString sError; + + // string data, string index, string query, [named opts] + if ( tStmt.m_dInsertValues.GetLength()!=3 + || tStmt.m_dInsertValues[0].m_iType!=TOK_QUOTED_STRING + || tStmt.m_dInsertValues[1].m_iType!=TOK_QUOTED_STRING + || tStmt.m_dInsertValues[2].m_iType!=TOK_QUOTED_STRING ) + { + SendMysqlErrorPacket ( tOut, uPacketID, "bad argument count or types in SNIPPETS() call" ); + return; + } + + const ServedIndex_t * pServed = g_pIndexes->GetRlockedEntry ( tStmt.m_dInsertValues[1].m_sVal ); + if ( !pServed || !pServed->m_bEnabled || !pServed->m_pIndex ) + { + sError.SetSprintf ( "no such index %s", tStmt.m_dInsertValues[1].m_sVal.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + ExcerptQuery_t q; + q.m_sSource = tStmt.m_dInsertValues[0].m_sVal; // OPTIMIZE? + q.m_sWords = tStmt.m_dInsertValues[2].m_sVal; + + ARRAY_FOREACH ( i, tStmt.m_dCallOptNames ) + { + CSphString & sOpt = tStmt.m_dCallOptNames[i]; + const SqlInsert_t & v = tStmt.m_dCallOptValues[i]; + + sOpt.ToLower(); + int iExpType = -1; + + if ( sOpt=="before_match" ) { q.m_sBeforeMatch = v.m_sVal; iExpType = TOK_QUOTED_STRING; } + else if ( sOpt=="after_match" ) { q.m_sAfterMatch = v.m_sVal; iExpType = TOK_QUOTED_STRING; } + else if ( sOpt=="chunk_separator" ) { q.m_sChunkSeparator = v.m_sVal; iExpType = TOK_QUOTED_STRING; } + else if ( sOpt=="html_strip_mode" ) { q.m_sStripMode = v.m_sVal; iExpType = TOK_QUOTED_STRING; } + else if ( sOpt=="passage_boundary" ) { q.m_sRawPassageBoundary = v.m_sVal; iExpType = TOK_QUOTED_STRING; } + + else if ( sOpt=="limit" ) { q.m_iLimit = (int)v.m_iVal; iExpType = TOK_CONST_INT; } + else if ( sOpt=="limit_words" ) { q.m_iLimitWords = (int)v.m_iVal; iExpType = TOK_CONST_INT; } + else if ( sOpt=="limit_passages" ) { q.m_iLimitPassages = (int)v.m_iVal; iExpType = TOK_CONST_INT; } + else if ( sOpt=="around" ) { q.m_iAround = (int)v.m_iVal; iExpType = TOK_CONST_INT; } + else if ( sOpt=="start_passage_id" ) { q.m_iPassageId = (int)v.m_iVal; iExpType = TOK_CONST_INT; } + + else if ( sOpt=="exact_phrase" ) { q.m_bExactPhrase = ( v.m_iVal!=0 ); iExpType = TOK_CONST_INT; } + else if ( sOpt=="use_boundaries" ) { q.m_bUseBoundaries = ( v.m_iVal!=0 ); iExpType = TOK_CONST_INT; } + else if ( sOpt=="weight_order" ) { q.m_bWeightOrder = ( v.m_iVal!=0 ); iExpType = TOK_CONST_INT; } + else if ( sOpt=="query_mode" ) { q.m_bHighlightQuery = ( v.m_iVal!=0 ); iExpType = TOK_CONST_INT; } + else if ( sOpt=="force_all_words" ) { q.m_bForceAllWords = ( v.m_iVal!=0 ); iExpType = TOK_CONST_INT; } + else if ( sOpt=="load_files" ) { q.m_bLoadFiles = ( v.m_iVal!=0 ); iExpType = TOK_CONST_INT; } + else if ( sOpt=="allow_empty" ) { q.m_bAllowEmpty = ( v.m_iVal!=0 ); iExpType = TOK_CONST_INT; } + else if ( sOpt=="emit_zones" ) { q.m_bEmitZones = ( v.m_iVal!=0 ); iExpType = TOK_CONST_INT; } + + else + { + sError.SetSprintf ( "unknown option %s", sOpt.cstr() ); + break; + } + + // post-conf type check + if ( iExpType!=v.m_iType ) + { + sError.SetSprintf ( "unexpected option %s type", sOpt.cstr() ); + break; + } + } + if ( !sError.IsEmpty() ) + { + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + pServed->Unlock(); + return; + } + + q.m_iPassageBoundary = sphGetPassageBoundary ( q.m_sRawPassageBoundary ); + + if ( !sphCheckOptionsSPZ ( q, q.m_sRawPassageBoundary, sError ) ) + { + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + pServed->Unlock(); + return; + } + + q.m_bHasBeforePassageMacro = SnippetTransformPassageMacros ( q.m_sBeforeMatch, q.m_sBeforeMatchPassage ); + q.m_bHasAfterPassageMacro = SnippetTransformPassageMacros ( q.m_sAfterMatch, q.m_sAfterMatchPassage ); + + CSphIndex * pIndex = pServed->m_pIndex; + SnippetContext_t tCtx; + if ( !tCtx.Setup ( pIndex, q, sError ) ) + { + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + pServed->Unlock(); + return; + } + + + char * sResult = sphBuildExcerpt ( q, tCtx.m_pDict, tCtx.m_tTokenizer.Ptr(), &pIndex->GetMatchSchema(), pIndex, sError, tCtx.m_tStripper.Ptr(), tCtx.m_pQueryTokenizer ); + if ( !sResult ) + { + sError.SetSprintf ( "highlighting failed: %s", sError.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + pServed->Unlock(); + return; + } + + // all ok, ship it + pServed->Unlock (); + + // result set header packet + tOut.SendLSBDword ( ((uPacketID++)<<24) + 2 ); + tOut.SendByte ( 1 ); // field count (snippet) + tOut.SendByte ( 0 ); // extra + + // fields + SendMysqlFieldPacket ( tOut, uPacketID++, "snippet", MYSQL_COL_STRING ); + SendMysqlEofPacket ( tOut, uPacketID++, 0 ); + + // data + tOut.SendLSBDword ( ((uPacketID++)<<24) + MysqlPackedLen ( sResult ) ); + tOut.SendMysqlString ( sResult ); + + SendMysqlEofPacket ( tOut, uPacketID++, 0 ); + SafeDeleteArray ( sResult ); +} + + +void HandleMysqlCallKeywords ( NetOutputBuffer_c & tOut, BYTE uPacketID, SqlStmt_t & tStmt ) +{ + CSphString sError; + + // string query, string index, [bool hits] + int iArgs = tStmt.m_dInsertValues.GetLength(); + if ( iArgs<2 + || iArgs>3 + || tStmt.m_dInsertValues[0].m_iType!=TOK_QUOTED_STRING + || tStmt.m_dInsertValues[1].m_iType!=TOK_QUOTED_STRING + || ( iArgs==3 && tStmt.m_dInsertValues[2].m_iType!=TOK_CONST_INT ) ) + { + SendMysqlErrorPacket ( tOut, uPacketID, "bad argument count or types in KEYWORDS() call" ); + return; + } + + const ServedIndex_t * pServed = g_pIndexes->GetRlockedEntry ( tStmt.m_dInsertValues[1].m_sVal ); + if ( !pServed || !pServed->m_bEnabled || !pServed->m_pIndex ) + { + sError.SetSprintf ( "no such index %s", tStmt.m_dInsertValues[1].m_sVal.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + CSphVector dKeywords; + bool bStats = ( iArgs==3 && tStmt.m_dInsertValues[2].m_iVal!=0 ); + bool bRes = pServed->m_pIndex->GetKeywords ( dKeywords, tStmt.m_dInsertValues[0].m_sVal.cstr(), bStats, sError ); + pServed->Unlock (); + + if ( !bRes ) + { + sError.SetSprintf ( "keyword extraction failed: %s", sError.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + // result set header packet + tOut.SendLSBDword ( ((uPacketID++)<<24) + 2 ); + tOut.SendByte ( 2 + ( bStats ? 2 : 0 ) ); // field count (tokenized, normalized, docs, hits) + tOut.SendByte ( 0 ); // extra + + // fields + SendMysqlFieldPacket ( tOut, uPacketID++, "tokenized", MYSQL_COL_STRING ); + SendMysqlFieldPacket ( tOut, uPacketID++, "normalized", MYSQL_COL_STRING ); + if ( bStats ) + { + SendMysqlFieldPacket ( tOut, uPacketID++, "docs", MYSQL_COL_STRING ); + SendMysqlFieldPacket ( tOut, uPacketID++, "hits", MYSQL_COL_STRING ); + } + SendMysqlEofPacket ( tOut, uPacketID++, 0 ); + + // data + ARRAY_FOREACH ( i, dKeywords ) + { + char sDocs[16], sHits[16]; + snprintf ( sDocs, sizeof(sDocs), "%d", dKeywords[i].m_iDocs ); + snprintf ( sHits, sizeof(sHits), "%d", dKeywords[i].m_iHits ); + + int iPacketLen = MysqlPackedLen ( dKeywords[i].m_sTokenized.cstr() ) + MysqlPackedLen ( dKeywords[i].m_sNormalized.cstr() ); + if ( bStats ) + iPacketLen += MysqlPackedLen ( sDocs ) + MysqlPackedLen ( sHits ); + + tOut.SendLSBDword ( ((uPacketID++)<<24) + iPacketLen ); + tOut.SendMysqlString ( dKeywords[i].m_sTokenized.cstr() ); + tOut.SendMysqlString ( dKeywords[i].m_sNormalized.cstr() ); + if ( bStats ) + { + tOut.SendMysqlString ( sDocs ); + tOut.SendMysqlString ( sHits ); + } + } + + SendMysqlEofPacket ( tOut, uPacketID++, 0 ); +} + + +void HandleMysqlDescribe ( NetOutputBuffer_c & tOut, BYTE uPacketID, SqlStmt_t & tStmt ) +{ + const ServedIndex_t * pServed = g_pIndexes->GetRlockedEntry ( tStmt.m_sIndex ); + if ( !pServed || !pServed->m_bEnabled || !pServed->m_pIndex ) + { + CSphString sError; + sError.SetSprintf ( "no such index '%s'", tStmt.m_sIndex.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr(), MYSQL_ERR_NO_SUCH_TABLE ); + return; + } + + // result set header packet + tOut.SendLSBDword ( ((uPacketID++)<<24) + 2 ); + tOut.SendByte ( 2 ); // field count (field, type) + tOut.SendByte ( 0 ); // extra + + // fields + SendMysqlFieldPacket ( tOut, uPacketID++, "Field", MYSQL_COL_STRING ); + SendMysqlFieldPacket ( tOut, uPacketID++, "Type", MYSQL_COL_STRING ); + SendMysqlEofPacket ( tOut, uPacketID++, 0 ); + + // data + const char * sIdType = USE_64BIT ? "bigint" : "integer"; + tOut.SendLSBDword ( ((uPacketID++)<<24) + 3 + MysqlPackedLen ( sIdType ) ); + tOut.SendMysqlString ( "id" ); + tOut.SendMysqlString ( sIdType ); + + const CSphSchema & tSchema = pServed->m_pIndex->GetMatchSchema(); + ARRAY_FOREACH ( i, tSchema.m_dFields ) + { + const CSphColumnInfo & tCol = tSchema.m_dFields[i]; + tOut.SendLSBDword ( ((uPacketID++)<<24) + MysqlPackedLen ( tCol.m_sName.cstr() ) + 6 ); + tOut.SendMysqlString ( tCol.m_sName.cstr() ); + tOut.SendMysqlString ( "field" ); + } + + for ( int i=0; iUnlock(); + SendMysqlEofPacket ( tOut, uPacketID++, 0 ); +} + + +struct IndexNameLess_fn +{ + inline bool IsLess ( const CSphNamedInt & a, const CSphNamedInt & b ) const + { + return strcasecmp ( a.m_sName.cstr(), b.m_sName.cstr() )<0; + } +}; + + +void HandleMysqlShowTables ( NetOutputBuffer_c & tOut, BYTE uPacketID ) +{ + // result set header packet + tOut.SendLSBDword ( ((uPacketID++)<<24) + 2 ); + tOut.SendByte ( 2 ); // field count (index, type) + tOut.SendByte ( 0 ); // extra + + // fields + SendMysqlFieldPacket ( tOut, uPacketID++, "Index", MYSQL_COL_STRING ); + SendMysqlFieldPacket ( tOut, uPacketID++, "Type", MYSQL_COL_STRING ); + SendMysqlEofPacket ( tOut, uPacketID++, 0 ); + + // all the indexes + // 0 local, 1 distributed, 2 rt + CSphVector dIndexes; + + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + if ( it.Get().m_bEnabled ) + { + CSphNamedInt & tIdx = dIndexes.Add(); + tIdx.m_sName = it.GetKey(); + tIdx.m_iValue = it.Get().m_bRT ? 2 : 0; + } + + g_tDistLock.Lock(); + g_hDistIndexes.IterateStart(); + while ( g_hDistIndexes.IterateNext() ) + { + CSphNamedInt & tIdx = dIndexes.Add(); + tIdx.m_sName = g_hDistIndexes.IterateGetKey(); + tIdx.m_iValue = 1; + } + g_tDistLock.Unlock(); + + dIndexes.Sort ( IndexNameLess_fn() ); + ARRAY_FOREACH ( i, dIndexes ) + { + const char * sType = "?"; + switch ( dIndexes[i].m_iValue ) + { + case 0: sType = "local"; break; + case 1: sType = "distributed"; break; + case 2: sType = "rt"; break; + } + + tOut.SendLSBDword ( ((uPacketID++)<<24) + MysqlPackedLen ( dIndexes[i].m_sName.cstr() ) + MysqlPackedLen ( sType ) ); + tOut.SendMysqlString ( dIndexes[i].m_sName.cstr() ); + tOut.SendMysqlString ( sType ); + } + + SendMysqlEofPacket ( tOut, uPacketID++, 0 ); +} + +////////////////////////////////////////////////////////////////////////// + +void HandleMysqlUpdate ( NetOutputBuffer_c & tOut, BYTE uPacketID, const SqlStmt_t & tStmt, bool bCommit ) +{ + CSphString sError; + + const ServedIndex_t * pServed = g_pIndexes->GetRlockedEntry ( tStmt.m_sIndex ); + if ( !pServed ) + { + sError.SetSprintf ( "no such index '%s'", tStmt.m_sIndex.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + if ( !pServed->m_bEnabled ) + { + pServed->Unlock(); + sError.SetSprintf ( "index '%s' does not support Update (enabled=%d)", tStmt.m_sIndex.cstr(), pServed->m_bEnabled ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + int iAffected = pServed->m_pIndex->UpdateAttributes ( tStmt.m_tUpdate, -1, sError ); + if ( iAffected<0 ) + { + pServed->Unlock(); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + if ( bCommit && pServed->m_bRT ) + { + ISphRtIndex * pIndex = static_cast ( pServed->m_pIndex ); + pIndex->Commit (); + } + + pServed->Unlock(); + + SendMysqlOkPacket ( tOut, uPacketID, iAffected ); +} + +////////////////////////////////////////////////////////////////////////// + +#define SPH_MAX_NUMERIC_STR 64 +class SqlRowBuffer_c +{ +public: + + SqlRowBuffer_c () + : m_pBuf ( NULL ) + , m_iLen ( 0 ) + , m_iLimit ( sizeof ( m_dBuf ) ) + { + } + + ~SqlRowBuffer_c () + { + SafeDeleteArray ( m_pBuf ); + } + + char * Reserve ( int iLen ) + { + int iNewSize = m_iLen+iLen; + if ( iNewSize<=m_iLimit ) + return Get(); + + int iNewLimit = Max ( m_iLimit*2, iNewSize ); + char * pBuf = new char [iNewLimit]; + memcpy ( pBuf, m_pBuf ? m_pBuf : m_dBuf, m_iLen ); + SafeDeleteArray ( m_pBuf ); + m_pBuf = pBuf; + m_iLimit = iNewLimit; + return Get(); + } + + char * Get () + { + return m_pBuf ? m_pBuf+m_iLen : m_dBuf+m_iLen; + } + + char * Off ( int iOff ) + { + assert ( iOff + void PutNumeric ( const char * sFormat, T tVal ) + { + Reserve ( SPH_MAX_NUMERIC_STR ); + int iLen = snprintf ( Get()+1, SPH_MAX_NUMERIC_STR-1, sFormat, tVal ); + *Get() = BYTE(iLen); + IncPtr ( 1+iLen ); + } + + void PutString ( const char * sMsg ) + { + int iLen = sMsg ? strlen ( sMsg ) : 0; + Reserve ( 1+iLen ); + char * pBegin = Get(); + char * pStr = (char *)MysqlPack ( pBegin, iLen ); + if ( pStr>pBegin ) + { + memcpy ( pStr, sMsg, iLen ); + IncPtr ( ( pStr-pBegin )+iLen ); + } + } + + +private: + + char m_dBuf[4096]; + char * m_pBuf; + int m_iLen; + int m_iLimit; +}; + + +bool HandleMysqlSelect ( NetOutputBuffer_c & tOut, BYTE & uPacketID, SearchHandler_c & tHandler ) +{ + // lets check all query for errors + CSphString sError; + ARRAY_FOREACH ( i, tHandler.m_dQueries ) + { + CheckQuery ( tHandler.m_dQueries[i], tHandler.m_dResults[i].m_sError ); + if ( !tHandler.m_dResults[i].m_sError.IsEmpty() ) + sError.SetSprintf ( "%squery %d error: %s ; ", sError.cstr(), i, tHandler.m_dResults[i].m_sError.cstr() ); + } + + if ( sError.Length() ) + { + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return false; + } + + // actual searching + tHandler.RunQueries (); + + if ( g_bGotSigterm ) + { + sphLogDebug ( "HandleClientMySQL: got SIGTERM, sending the packet MYSQL_ERR_SERVER_SHUTDOWN" ); + SendMysqlErrorPacket ( tOut, uPacketID, "Server shutdown in progress", MYSQL_ERR_SERVER_SHUTDOWN ); + return false; + } + + return true; +} + + +void SendMysqlSelectResult ( NetOutputBuffer_c & tOut, BYTE & uPacketID, SqlRowBuffer_c & dRows, const AggrResult_t & tRes, bool bMoreResultsFollow ) +{ + if ( !tRes.m_iSuccesses ) + { + SendMysqlErrorPacket ( tOut, uPacketID++, tRes.m_sError.cstr() ); + return; + } + + // result set header packet + tOut.SendLSBDword ( ((uPacketID++)<<24) + 2 ); + if ( g_bCompatResults ) + tOut.SendByte ( BYTE ( 2+tRes.m_tSchema.GetAttrsCount() ) ); + else + tOut.SendByte ( BYTE ( tRes.m_tSchema.GetAttrsCount() ) ); + tOut.SendByte ( 0 ); // extra + + // field packets + if ( g_bCompatResults ) + { + SendMysqlFieldPacket ( tOut, uPacketID++, "id", USE_64BIT ? MYSQL_COL_LONGLONG : MYSQL_COL_LONG ); + SendMysqlFieldPacket ( tOut, uPacketID++, "weight", MYSQL_COL_LONG ); + } + + for ( int i=0; i ( DOCID_FMT, tMatch.m_iDocID ); + dRows.PutNumeric ( "%u", tMatch.m_iWeight ); + } + + const CSphSchema & tSchema = tRes.m_tSchema; + for ( int i=0; i ( INT64_FMT, tMatch.GetAttr(tLoc) ); + else + dRows.PutNumeric ( "%u", (DWORD)tMatch.GetAttr(tLoc) ); + break; + + case SPH_ATTR_FLOAT: + dRows.PutNumeric ( "%f", tMatch.GetAttrFloat(tLoc) ); + break; + + case SPH_ATTR_UINT64SET: + case SPH_ATTR_UINT32SET: + { + int iLenOff = dRows.Length(); + dRows.Reserve ( 4 ); + dRows.IncPtr ( 4 ); + + assert ( tMatch.GetAttr ( tLoc )==0 || tRes.m_dTag2Pools [ tMatch.m_iTag ].m_pMva ); + const DWORD * pValues = tMatch.GetAttrMVA ( tLoc, tRes.m_dTag2Pools [ tMatch.m_iTag ].m_pMva ); + if ( pValues ) + { + DWORD nValues = *pValues++; + assert ( eAttrType==SPH_ATTR_UINT32SET || ( nValues%2 )==0 ); + if ( eAttrType==SPH_ATTR_UINT32SET ) + { + while ( nValues-- ) + { + dRows.Reserve ( SPH_MAX_NUMERIC_STR ); + int iLen = snprintf ( dRows.Get(), SPH_MAX_NUMERIC_STR, nValues>0 ? "%u," : "%u", *pValues++ ); + dRows.IncPtr ( iLen ); + } + } else + { + for ( ; nValues; nValues-=2, pValues+=2 ) + { + uint64_t uVal = MVA_UPSIZE ( pValues ); + dRows.Reserve ( SPH_MAX_NUMERIC_STR ); + int iLen = snprintf ( dRows.Get(), SPH_MAX_NUMERIC_STR, nValues>2 ? UINT64_FMT"," : UINT64_FMT, uVal ); + dRows.IncPtr ( iLen ); + } + } + } + + // manually pack length, forcibly into exactly 3 bytes + int iLen = dRows.Length()-iLenOff-4; + char * pLen = dRows.Off ( iLenOff ); + pLen[0] = (BYTE)0xfd; + pLen[1] = (BYTE)( iLen & 0xff ); + pLen[2] = (BYTE)( ( iLen>>8 ) & 0xff ); + pLen[3] = (BYTE)( ( iLen>>16 ) & 0xff ); + break; + } + + case SPH_ATTR_STRING: + { + const BYTE * pStrings = tRes.m_dTag2Pools [ tMatch.m_iTag ].m_pStrings; + + // get that string + const BYTE * pStr = NULL; + int iLen = 0; + + DWORD uOffset = (DWORD) tMatch.GetAttr ( tLoc ); + if ( uOffset ) + { + assert ( pStrings ); + iLen = sphUnpackStr ( pStrings+uOffset, &pStr ); + } + + // send length + dRows.Reserve ( iLen+4 ); + char * pOutStr = (char*)MysqlPack ( dRows.Get(), iLen ); + + // send string data + if ( iLen ) + memcpy ( pOutStr, pStr, iLen ); + + dRows.IncPtr ( pOutStr-dRows.Get()+iLen ); + break; + } + + default: + char * pDef = dRows.Reserve ( 2 ); + pDef[0] = 1; + pDef[1] = '-'; + dRows.IncPtr ( 2 ); + break; + } + } + + tOut.SendLSBDword ( ((uPacketID++)<<24) + ( dRows.Length() ) ); + tOut.SendBytes ( dRows.Off ( 0 ), dRows.Length() ); + dRows.Reset(); + } + + // eof packet + SendMysqlEofPacket ( tOut, uPacketID++, iWarns, bMoreResultsFollow ); +} + + +void HandleMysqlWarning ( NetOutputBuffer_c & tOut, BYTE & uPacketID, const CSphQueryResultMeta & tLastMeta, SqlRowBuffer_c & dRows, bool bMoreResultsFollow ) +{ + // can't send simple ok if there are more results to send + // as it breaks order of multi-result output + if ( tLastMeta.m_sWarning.IsEmpty() && !bMoreResultsFollow ) + { + SendMysqlOkPacket ( tOut, uPacketID ); + return; + } + + // result set header packet + tOut.SendLSBDword ( ((uPacketID++)<<24) + 2 ); + tOut.SendByte ( 3 ); // field count (level+code+message) + tOut.SendByte ( 0 ); // extra + + // field packets + SendMysqlFieldPacket ( tOut, uPacketID++, "Level", MYSQL_COL_STRING ); + SendMysqlFieldPacket ( tOut, uPacketID++, "Code", MYSQL_COL_DECIMAL ); + SendMysqlFieldPacket ( tOut, uPacketID++, "Message", MYSQL_COL_STRING ); + SendMysqlEofPacket ( tOut, uPacketID++, 0, bMoreResultsFollow ); + + // row + dRows.Reset(); + dRows.PutString ( "warning" ); + dRows.PutString ( "1000" ); + dRows.PutString ( tLastMeta.m_sWarning.cstr() ); + + tOut.SendLSBDword ( ((uPacketID++)<<24) + ( dRows.Length() ) ); + tOut.SendBytes ( dRows.Off ( 0 ), dRows.Length() ); + dRows.Reset(); + + // cleanup + SendMysqlEofPacket ( tOut, uPacketID++, 0, bMoreResultsFollow ); +} + + +void HandleMysqlMeta ( NetOutputBuffer_c & tOut, BYTE & uPacketID, const CSphQueryResultMeta & tLastMeta, SqlRowBuffer_c & dRows, bool bStatus, bool bMoreResultsFollow ) +{ + CSphVector dStatus; + + if ( bStatus ) + BuildStatus ( dStatus ); + else + BuildMeta ( dStatus, tLastMeta ); + + // result set header packet + tOut.SendLSBDword ( ((uPacketID++)<<24) + 2 ); + tOut.SendByte ( 2 ); // field count (level+code+message) + tOut.SendByte ( 0 ); // extra + + // field packets + SendMysqlFieldPacket ( tOut, uPacketID++, "Variable_name", MYSQL_COL_STRING ); + SendMysqlFieldPacket ( tOut, uPacketID++, "Value", MYSQL_COL_STRING ); + SendMysqlEofPacket ( tOut, uPacketID++, 0, bMoreResultsFollow ); + + // send rows + dRows.Reset(); + + for ( int iRow=0; iRowGetRlockedEntry ( tStmt.m_sIndex ); + if ( !pServed ) + { + sError.SetSprintf ( "no such index '%s'", tStmt.m_sIndex.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + if ( !pServed->m_bRT || !pServed->m_bEnabled ) + { + pServed->Unlock(); + sError.SetSprintf ( "index '%s' does not support DELETE (enabled=%d)", tStmt.m_sIndex.cstr(), pServed->m_bEnabled ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + ISphRtIndex * pIndex = static_cast ( pServed->m_pIndex ); + + if ( !pIndex->DeleteDocument ( tStmt.m_dDeleteIds.Begin(), tStmt.m_dDeleteIds.GetLength(), sError ) ) + { + pServed->Unlock(); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + if ( bCommit ) + pIndex->Commit (); + + pServed->Unlock(); + + SendMysqlOkPacket ( tOut, uPacketID ); // FIXME? affected rows +} + + +void HandleMysqlMultiStmt ( NetOutputBuffer_c & tOut, BYTE uPacketID, const CSphVector & dStmt, CSphQueryResultMeta & tLastMeta, + SqlRowBuffer_c & dRows, ThdDesc_t * pThd, const CSphString& sWarning ) +{ + // select count + int iSelect = 0; + ARRAY_FOREACH ( i, dStmt ) + if ( dStmt[i].m_eStmt==STMT_SELECT ) + iSelect++; + + if ( !iSelect ) + { + tLastMeta = CSphQueryResultMeta(); + return; + } + + if ( pThd ) + pThd->m_sCommand = g_dSqlStmts[STMT_SELECT]; + + // setup query for searching + SearchHandler_c tHandler ( iSelect, true ); + iSelect = 0; + ARRAY_FOREACH ( i, dStmt ) + { + if ( dStmt[i].m_eStmt==STMT_SELECT ) + tHandler.m_dQueries[iSelect++] = dStmt[i].m_tQuery; + } + + // do search + bool bSearchOK = HandleMysqlSelect ( tOut, uPacketID, tHandler ); + + // save meta for SHOW * + CSphQueryResultMeta tPrevMeta = tLastMeta; + tLastMeta = tHandler.m_dResults.Last(); + + if ( !bSearchOK ) + return; + + // send multi-result set + iSelect = 0; + ARRAY_FOREACH ( i, dStmt ) + { + SqlStmt_e eStmt = dStmt[i].m_eStmt; + + THD_STATE ( THD_QUERY ); + if ( pThd ) + pThd->m_sCommand = g_dSqlStmts[eStmt]; + + const CSphQueryResultMeta & tMeta = iSelect-1>=0 ? tHandler.m_dResults[iSelect-1] : tPrevMeta; + bool bMoreResultsFollow = (i+1)SetSprintf ( "Unknown collation: '%s'", sName.cstr() ); + return SPH_COLLATION_DEFAULT; +} + + +void HandleMysqlSet ( NetOutputBuffer_c & tOut, BYTE & uPacketID, SqlStmt_t & tStmt, SessionVars_t & tVars ) +{ + MEMORY ( SPH_MEM_COMMIT_SET_SQL ); + CSphString sError; + + tStmt.m_sSetName.ToLower(); + if ( tStmt.m_eSet==SET_LOCAL && tStmt.m_sSetName=="autocommit" ) + { + // per-session AUTOCOMMIT + tVars.m_bAutoCommit = ( tStmt.m_iSetValue!=0 ); + tVars.m_bInTransaction = false; + + // commit all pending changes + if ( tVars.m_bAutoCommit ) + { + ISphRtIndex * pIndex = sphGetCurrentIndexRT(); + if ( pIndex ) + pIndex->Commit(); + } + + } else if ( tStmt.m_eSet==SET_LOCAL && tStmt.m_sSetName=="collation_connection" ) + { + // per-session COLLATION_CONNECTION + CSphString & sVal = tStmt.m_sSetValue; + sVal.ToLower(); + + tVars.m_eCollation = sphCollationFromName ( sVal, &sError ); + if ( !sError.IsEmpty() ) + { + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + } else if ( tStmt.m_eSet==SET_LOCAL && ( tStmt.m_sSetName=="character_set_results" || tStmt.m_sSetName=="sql_auto_is_null" ) ) + { + // per-session CHARACTER_SET_RESULTS; just ignore for now + + } else if ( tStmt.m_eSet==SET_GLOBAL_UVAR ) + { + // global user variable + if ( g_eWorkers!=MPM_THREADS ) + { + SendMysqlErrorPacket ( tOut, uPacketID, "SET GLOBAL currently requires workers=threads" ); + return; + } + + g_tUservarsMutex.Lock(); + Uservar_t * pVar = g_hUservars ( tStmt.m_sSetName ); + if ( pVar ) + { + assert ( pVar->m_eType==USERVAR_INT_SET ); + pVar->m_pVal->SwapData ( tStmt.m_dSetValues ); + } else + { + Uservar_t tVar; + tVar.m_eType = USERVAR_INT_SET; + tVar.m_pVal = new CSphVector; + tVar.m_pVal->SwapData ( tStmt.m_dSetValues ); + tVar.m_pVal->Sort(); + g_hUservars.Add ( tVar, tStmt.m_sSetName ); // FIXME? free those on shutdown? + } + g_tUservarsMutex.Unlock(); + + } else if ( tStmt.m_eSet==SET_GLOBAL_SVAR ) + { + // global server variable + if ( g_eWorkers!=MPM_THREADS ) + { + SendMysqlErrorPacket ( tOut, uPacketID, "SET GLOBAL currently requires workers=threads" ); + return; + } + + if ( tStmt.m_sSetName=="query_log_format" ) + { + if ( tStmt.m_sSetValue=="plain" ) + g_eLogFormat = LOG_FORMAT_PLAIN; + else if ( tStmt.m_sSetValue=="sphinxql" ) + g_eLogFormat = LOG_FORMAT_SPHINXQL; + else + { + SendMysqlErrorPacket ( tOut, uPacketID, "Unknown query_log_format value (must be plain or sphinxql)" ); + return; + } + } else if ( tStmt.m_sSetName=="log_level" ) + { + if ( tStmt.m_sSetValue=="info" ) + g_eLogLevel = SPH_LOG_INFO; + else if ( tStmt.m_sSetValue=="debug" ) + g_eLogLevel = SPH_LOG_DEBUG; + else if ( tStmt.m_sSetValue=="debugv" ) + g_eLogLevel = SPH_LOG_VERBOSE_DEBUG; + else if ( tStmt.m_sSetValue=="debugvv" ) + g_eLogLevel = SPH_LOG_VERY_VERBOSE_DEBUG; + else + { + SendMysqlErrorPacket ( tOut, uPacketID, "Unknown log_level value (must be one of info, debug, debugv, debugvv)" ); + return; + } + } else + { + sError.SetSprintf ( "Unknown system variable '%s'", tStmt.m_sSetName.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + } else + { + // unknown case, return error + sError.SetSprintf ( "Unknown session variable '%s' in SET statement", tStmt.m_sSetName.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + return; + } + + // it went ok + SendMysqlOkPacket ( tOut, uPacketID ); +} + + +void HandleClientMySQL ( int iSock, const char * sClientIP, ThdDesc_t * pThd ) +{ + MEMORY ( SPH_MEM_HANDLE_SQL ); + THD_STATE ( THD_HANDSHAKE ); + + const int INTERACTIVE_TIMEOUT = 900; + NetInputBuffer_c tIn ( iSock ); + NetOutputBuffer_c tOut ( iSock ); // OPTIMIZE? looks like buffer size matters a lot.. + + if ( sphSockSend ( iSock, g_sMysqlHandshake, g_iMysqlHandshake )!=g_iMysqlHandshake ) + { + sphWarning ( "failed to send server version (client=%s)", sClientIP ); + return; + } + + SessionVars_t tVars; // session variables and state + + bool bAuthed = false; + BYTE uPacketID = 1; + + CSphQueryResultMeta tLastMeta; + CSphString sQuery; // to keep data alive for SphCrashQuery_c + for ( ;; ) + { + // set off query guard + SphCrashLogger_c::SetLastQuery ( NULL, 0, true ); + + CSphString sError; + + // send the packet formed on the previous cycle + THD_STATE ( THD_NET_WRITE ); + if ( !tOut.Flush() ) + break; + + // get next packet + // we want interruptible calls here, so that shutdowns could be honoured + THD_STATE ( THD_NET_READ ); + if ( !tIn.ReadFrom ( 4, INTERACTIVE_TIMEOUT, true ) ) + break; + + const int MAX_PACKET_LEN = 0xffffffL; // 16777215 bytes, max low level packet size + DWORD uPacketHeader = tIn.GetLSBDword (); + int iPacketLen = ( uPacketHeader & MAX_PACKET_LEN ); + if ( !tIn.ReadFrom ( iPacketLen, INTERACTIVE_TIMEOUT, true ) ) + break; + + // handle it! + uPacketID = 1 + (BYTE)( uPacketHeader>>24 ); // client will expect this id + + // handle big packets + if ( iPacketLen==MAX_PACKET_LEN ) + { + NetInputBuffer_c tIn2 ( iSock ); + int iAddonLen = -1; + do + { + if ( !tIn2.ReadFrom ( 4, INTERACTIVE_TIMEOUT, true ) ) + break; + + DWORD uAddon = tIn2.GetLSBDword(); + uPacketID = 1 + (BYTE)( uAddon>>24 ); + iAddonLen = ( uAddon & MAX_PACKET_LEN ); + if ( !tIn.ReadFrom ( iAddonLen, INTERACTIVE_TIMEOUT, true, true ) ) + { + iAddonLen = -1; + break; + } + iPacketLen += iAddonLen; + } while ( iAddonLen==MAX_PACKET_LEN ); + if ( iAddonLen<0 ) + break; + } + + // handle auth packet + if ( !bAuthed ) + { + bAuthed = true; + SendMysqlOkPacket ( tOut, uPacketID ); + continue; + } + + // get command, handle special packets + const BYTE uMysqlCmd = tIn.GetByte (); + if ( uMysqlCmd==MYSQL_COM_QUIT ) + { + // client is done + break; + + } else if ( uMysqlCmd==MYSQL_COM_PING || uMysqlCmd==MYSQL_COM_INIT_DB ) + { + // client wants a pong + SendMysqlOkPacket ( tOut, uPacketID ); + continue; + + } else if ( uMysqlCmd==MYSQL_COM_SET_OPTION ) + { + // bMulti = ( tIn.GetWord()==MYSQL_OPTION_MULTI_STATEMENTS_ON ); // that's how we could double check and validate multi query + SendMysqlOkPacket ( tOut, uPacketID ); + continue; + + } else if ( uMysqlCmd!=MYSQL_COM_QUERY ) + { + // default case, unknown command + // (and query is handled just below) + sError.SetSprintf ( "unknown command (code=%d)", uMysqlCmd ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr(), MYSQL_ERR_UNKNOWN_COM_ERROR ); + continue; + } + + // handle query packet + assert ( uMysqlCmd==MYSQL_COM_QUERY ); + sQuery = tIn.GetRawString ( iPacketLen-1 ); + + // set on query guard + SphCrashLogger_c::SetLastQuery ( (const BYTE *)sQuery.cstr(), sQuery.Length(), true ); + + // parse SQL query + CSphVector dStmt; + bool bParsedOK = ParseSqlQuery ( sQuery, dStmt, sError, tVars.m_eCollation ); + + SqlStmt_e eStmt = bParsedOK ? dStmt.Begin()->m_eStmt : STMT_PARSE_ERROR; + + SqlStmt_t * pStmt = dStmt.Begin(); + assert ( !bParsedOK || pStmt ); + + if ( pThd ) + pThd->m_sCommand = g_dSqlStmts[eStmt]; + THD_STATE ( THD_QUERY ); + + SqlRowBuffer_c dRows; + + // handle multi SQL query + if ( bParsedOK && dStmt.GetLength()>1 ) + { + HandleMysqlMultiStmt ( tOut, uPacketID, dStmt, tLastMeta, dRows, pThd, sError ); + continue; + } + + // handle SQL query + switch ( eStmt ) + { + case STMT_PARSE_ERROR: + tLastMeta = CSphQueryResultMeta(); + tLastMeta.m_sError = sError; + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + break; + + case STMT_SELECT: + { + MEMORY ( SPH_MEM_SELECT_SQL ); + + SearchHandler_c tHandler ( 1, true ); + tHandler.m_dQueries[0] = dStmt.Begin()->m_tQuery; + + if ( HandleMysqlSelect ( tOut, uPacketID, tHandler ) ) + { + AggrResult_t & tLast = tHandler.m_dResults.Last(); + if ( !sError.IsEmpty() ) + tLast.m_sWarning = sError; + SendMysqlSelectResult ( tOut, uPacketID, dRows, tLast, false ); + } + + // save meta for SHOW META + tLastMeta = tHandler.m_dResults.Last(); + + break; + } + case STMT_SHOW_WARNINGS: + HandleMysqlWarning ( tOut, uPacketID, tLastMeta, dRows, false ); + break; + + case STMT_SHOW_STATUS: + case STMT_SHOW_META: + HandleMysqlMeta ( tOut, uPacketID, tLastMeta, dRows, eStmt==STMT_SHOW_STATUS, false ); + break; + + case STMT_INSERT: + case STMT_REPLACE: + HandleMysqlInsert ( *pStmt, tOut, uPacketID, eStmt==STMT_REPLACE, tVars.m_bAutoCommit && !tVars.m_bInTransaction ); + continue; + + case STMT_DELETE: + HandleMysqlDelete ( tOut, uPacketID, *pStmt, tVars.m_bAutoCommit && !tVars.m_bInTransaction ); + continue; + + case STMT_SET: + HandleMysqlSet ( tOut, uPacketID, *pStmt, tVars ); + continue; + + case STMT_BEGIN: + { + MEMORY ( SPH_MEM_COMMIT_BEGIN_SQL ); + + tVars.m_bInTransaction = true; + ISphRtIndex * pIndex = sphGetCurrentIndexRT(); + if ( pIndex ) + pIndex->Commit(); + SendMysqlOkPacket ( tOut, uPacketID ); + continue; + } + case STMT_COMMIT: + case STMT_ROLLBACK: + { + MEMORY ( SPH_MEM_COMMIT_SQL ); + + tVars.m_bInTransaction = false; + ISphRtIndex * pIndex = sphGetCurrentIndexRT(); + if ( pIndex ) + { + if ( eStmt==STMT_COMMIT ) + pIndex->Commit(); + else + pIndex->RollBack(); + } + SendMysqlOkPacket ( tOut, uPacketID ); + continue; + } + case STMT_CALL: + pStmt->m_sCallProc.ToUpper(); + if ( pStmt->m_sCallProc=="SNIPPETS" ) + HandleMysqlCallSnippets ( tOut, uPacketID, *pStmt ); + else if ( pStmt->m_sCallProc=="KEYWORDS" ) + HandleMysqlCallKeywords ( tOut, uPacketID, *pStmt ); + else + { + sError.SetSprintf ( "no such builtin procedure %s", pStmt->m_sCallProc.cstr() ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + } + continue; + + case STMT_DESC: + HandleMysqlDescribe ( tOut, uPacketID, *pStmt ); + continue; + + case STMT_SHOW_TABLES: + HandleMysqlShowTables ( tOut, uPacketID ); + continue; + + case STMT_UPDATE: + HandleMysqlUpdate ( tOut, uPacketID, *pStmt, tVars.m_bAutoCommit && !tVars.m_bInTransaction ); + continue; + + case STMT_DUMMY: + SendMysqlOkPacket ( tOut, uPacketID ); + continue; + + case STMT_CREATE_FUNC: + if ( !sphUDFCreate ( pStmt->m_sUdfLib.cstr(), pStmt->m_sUdfName.cstr(), pStmt->m_eUdfType, sError ) ) + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + else + SendMysqlOkPacket ( tOut, uPacketID ); + continue; + + case STMT_DROP_FUNC: + if ( !sphUDFDrop ( pStmt->m_sUdfName.cstr(), sError ) ) + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + else + SendMysqlOkPacket ( tOut, uPacketID ); + continue; + + default: + sError.SetSprintf ( "internal error: unhandled statement type (value=%d)", eStmt ); + SendMysqlErrorPacket ( tOut, uPacketID, sError.cstr() ); + break; + } // switch + } // for ( ;; ) + + // set off query guard + SphCrashLogger_c::SetLastQuery ( NULL, 0, true ); +} + +////////////////////////////////////////////////////////////////////////// +// HANDLE-BY-LISTENER +////////////////////////////////////////////////////////////////////////// + +void HandleClient ( ProtocolType_e eProto, int iSock, const char * sClientIP, ThdDesc_t * pThd ) +{ + switch ( eProto ) + { + case PROTO_SPHINX: HandleClientSphinx ( iSock, sClientIP, pThd ); break; + case PROTO_MYSQL41: HandleClientMySQL ( iSock, sClientIP, pThd ); break; + default: assert ( 0 && "unhandled protocol type" ); break; + } +} + +///////////////////////////////////////////////////////////////////////////// +// INDEX ROTATION +///////////////////////////////////////////////////////////////////////////// + +bool TryRename ( const char * sIndex, const char * sPrefix, const char * sFromPostfix, const char * sToPostfix, bool bFatal ) +{ + char sFrom [ SPH_MAX_FILENAME_LEN ]; + char sTo [ SPH_MAX_FILENAME_LEN ]; + + snprintf ( sFrom, sizeof(sFrom), "%s%s", sPrefix, sFromPostfix ); + snprintf ( sTo, sizeof(sTo), "%s%s", sPrefix, sToPostfix ); + +#if USE_WINDOWS + ::unlink ( sTo ); +#endif + + if ( rename ( sFrom, sTo ) ) + { + if ( bFatal ) + { + sphFatal ( "rotating index '%s': rollback rename '%s' to '%s' failed: %s", + sIndex, sFrom, sTo, strerror(errno) ); + } else + { + sphWarning ( "rotating index '%s': rename '%s' to '%s' failed: %s", + sIndex, sFrom, sTo, strerror(errno) ); + } + return false; + } + + return true; +} + + +bool HasFiles ( const ServedIndex_t & tIndex, const char ** dExts ) +{ + char sFile [ SPH_MAX_FILENAME_LEN ]; + const char * sPath = tIndex.m_sIndexPath.cstr(); + + for ( int i=0; i0 ) + { + if ( tIndex.m_bOnlyNew ) + sphWarning ( "rotating index '%s': '%s' unreadable: %s; NOT SERVING", sIndex, sFile, strerror(errno) ); + else + sphWarning ( "rotating index '%s': '%s' unreadable: %s; using old index", sIndex, sFile, strerror(errno) ); + } + return false; + } + } + sphLogDebug ( "RotateIndexGreedy: new index is readable" ); + + if ( !tIndex.m_bOnlyNew ) + { + // rename current to old + for ( int i=0; iLeakTokenizer (); // FIXME! disable support of that old indexes and remove this bullshit + CSphDict * pDictionary = tIndex.m_pIndex->LeakDictionary (); + + if ( !tIndex.m_pIndex->Prealloc ( tIndex.m_bMlock, g_bStripPath, sWarning ) || !tIndex.m_pIndex->Preread() ) + { + if ( tIndex.m_bOnlyNew ) + { + sphWarning ( "rotating index '%s': .new preload failed: %s; NOT SERVING", sIndex, tIndex.m_pIndex->GetLastError().cstr() ); + return false; + + } else + { + sphWarning ( "rotating index '%s': .new preload failed: %s", sIndex, tIndex.m_pIndex->GetLastError().cstr() ); + + // try to recover + for ( int j=0; jPrealloc ( tIndex.m_bMlock, g_bStripPath, sWarning ) || !tIndex.m_pIndex->Preread() ) + { + sphWarning ( "rotating index '%s': .new preload failed; ROLLBACK FAILED; INDEX UNUSABLE", sIndex ); + tIndex.m_bEnabled = false; + + } else + { + tIndex.m_bEnabled = true; + bPreread = true; + sphWarning ( "rotating index '%s': .new preload failed; using old index", sIndex ); + } + + if ( !sWarning.IsEmpty() ) + sphWarning ( "rotating index '%s': %s", sIndex, sWarning.cstr() ); + + if ( !tIndex.m_pIndex->GetTokenizer () ) + tIndex.m_pIndex->SetTokenizer ( pTokenizer ); + else + SafeDelete ( pTokenizer ); + + if ( !tIndex.m_pIndex->GetDictionary () ) + tIndex.m_pIndex->SetDictionary ( pDictionary ); + else + SafeDelete ( pDictionary ); + } + + return bPreread; + + } else + { + bPreread = true; + + if ( !sWarning.IsEmpty() ) + sphWarning ( "rotating index '%s': %s", sIndex, sWarning.cstr() ); + } + + if ( !tIndex.m_pIndex->GetTokenizer () ) + tIndex.m_pIndex->SetTokenizer ( pTokenizer ); + else + SafeDelete ( pTokenizer ); + + if ( !tIndex.m_pIndex->GetDictionary () ) + tIndex.m_pIndex->SetDictionary ( pDictionary ); + else + SafeDelete ( pDictionary ); + + // unlink .old + if ( g_bUnlinkOld && !tIndex.m_bOnlyNew ) + { + for ( int i=0; i0 && tmLastLog+iAllocLogPeriodGetSettings (); + + if ( ( tSettings.m_iMinPrefixLen>0 || tSettings.m_iMinInfixLen>0 ) && !pIndex->m_bEnableStar ) + { + CSphDict * pDict = pIndex->GetDictionary (); + assert ( pDict ); + if ( pDict->HasMorphology () ) + { + sError = "infixes and morphology are enabled, enable_star=0"; + return false; + } + } + + return true; +} + + +static bool CheckServedEntry ( const ServedIndex_t * pEntry, const char * sIndex ) +{ + if ( !pEntry ) + { + sphWarning ( "rotating index '%s': INTERNAL ERROR, index went AWOL", sIndex ); + return false; + } + + if ( pEntry->m_bToDelete || !pEntry->m_pIndex ) + { + if ( pEntry->m_bToDelete ) + sphWarning ( "rotating index '%s': INTERNAL ERROR, entry marked for deletion", sIndex ); + + if ( !pEntry->m_pIndex ) + sphWarning ( "rotating index '%s': INTERNAL ERROR, entry does not have an index", sIndex ); + + return false; + } + + return true; +} + +#define SPH_RT_AUTO_FLUSH_CHECK_PERIOD ( 5000000 ) + +static void RtFlushThreadFunc ( void * ) +{ + int64_t tmNextCheck = sphMicroTimer() + SPH_RT_AUTO_FLUSH_CHECK_PERIOD; + while ( !g_bRtFlushShutdown ) + { + // stand still till save time + if ( tmNextCheck>sphMicroTimer() ) + { + sphSleepMsec ( 50 ); + continue; + } + + // collecting available rt indexes at save time + CSphVector dRtIndexes; + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + if ( it.Get().m_bRT ) + dRtIndexes.Add ( it.GetKey() ); + + // do check+save + ARRAY_FOREACH_COND ( i, dRtIndexes, !g_bRtFlushShutdown ) + { + const ServedIndex_t * pServed = g_pIndexes->GetRlockedEntry ( dRtIndexes[i] ); + if ( !pServed ) + continue; + + if ( !pServed->m_bEnabled ) + { + pServed->Unlock(); + continue; + } + + ISphRtIndex * pRT = (ISphRtIndex *)pServed->m_pIndex; + pRT->CheckRamFlush(); + + pServed->Unlock(); + } + + tmNextCheck = sphMicroTimer() + SPH_RT_AUTO_FLUSH_CHECK_PERIOD; + } +} + + +static void RotateIndexMT ( const CSphString & sIndex ) +{ + assert ( g_eWorkers==MPM_THREADS ); + ////////////////// + // load new index + ////////////////// + + // create new index, copy some settings from existing one + const ServedIndex_t * pRotating = g_pIndexes->GetRlockedEntry ( sIndex ); + if ( !CheckServedEntry ( pRotating, sIndex.cstr() ) ) + { + if ( pRotating ) + pRotating->Unlock(); + return; + } + + sphInfo ( "rotating index '%s': started", sIndex.cstr() ); + + ServedIndex_t tNewIndex; + tNewIndex.m_bOnlyNew = pRotating->m_bOnlyNew; + + tNewIndex.m_pIndex = sphCreateIndexPhrase ( NULL, NULL ); // FIXME! check if it's ok + tNewIndex.m_pIndex->m_bEnableStar = pRotating->m_bStar; + tNewIndex.m_pIndex->m_bExpandKeywords = pRotating->m_bExpand; + tNewIndex.m_pIndex->SetPreopen ( pRotating->m_bPreopen || g_bPreopenIndexes ); + tNewIndex.m_pIndex->SetWordlistPreload ( !pRotating->m_bOnDiskDict && !g_bOnDiskDicts ); + + // rebase new index + char sNewPath [ SPH_MAX_FILENAME_LEN ]; + snprintf ( sNewPath, sizeof(sNewPath), "%s.new", pRotating->m_sIndexPath.cstr() ); + tNewIndex.m_pIndex->SetBase ( sNewPath ); + + // don't need to hold the existing index any more now + pRotating->Unlock(); + pRotating = NULL; + + // prealloc enough RAM and lock new index + sphLogDebug ( "prealloc enough RAM and lock new index" ); + CSphString sWarn, sError; + if ( !tNewIndex.m_pIndex->Prealloc ( tNewIndex.m_bMlock, g_bStripPath, sWarn ) ) + { + sphWarning ( "rotating index '%s': prealloc: %s; using old index", sIndex.cstr(), tNewIndex.m_pIndex->GetLastError().cstr() ); + return; + } + + if ( !tNewIndex.m_pIndex->Lock() ) + { + sphWarning ( "rotating index '%s': lock: %s; using old index", sIndex.cstr (), tNewIndex.m_pIndex->GetLastError().cstr() ); + return; + } + + // fixup settings if needed + sphLogDebug ( "fixup settings if needed" ); + g_tRotateConfigMutex.Lock (); + if ( tNewIndex.m_bOnlyNew && g_pCfg && g_pCfg->m_tConf ( "index" ) && g_pCfg->m_tConf["index"]( sIndex.cstr() ) ) + { + if ( !sphFixupIndexSettings ( tNewIndex.m_pIndex, g_pCfg->m_tConf["index"][sIndex.cstr()], sError ) ) + { + sphWarning ( "rotating index '%s': fixup: %s; using old index", sIndex.cstr(), sError.cstr() ); + g_tRotateConfigMutex.Unlock (); + return; + } + } + g_tRotateConfigMutex.Unlock(); + + if ( !CheckIndex ( tNewIndex.m_pIndex, sError ) ) + { + sphWarning ( "rotating index '%s': check: %s; using old index", sIndex.cstr(), sError.cstr() ); + return; + } + + if ( !tNewIndex.m_pIndex->Preread() ) + { + sphWarning ( "rotating index '%s': preread failed: %s; using old index", sIndex.cstr(), tNewIndex.m_pIndex->GetLastError().cstr() ); + return; + } + + ////////////////////// + // activate new index + ////////////////////// + + sphLogDebug ( "activate new index" ); + + ServedIndex_t * pServed = g_pIndexes->GetWlockedEntry ( sIndex ); + if ( !CheckServedEntry ( pServed, sIndex.cstr() ) ) + { + if ( pServed ) + pServed->Unlock(); + return; + } + + CSphIndex * pOld = pServed->m_pIndex; + CSphIndex * pNew = tNewIndex.m_pIndex; + + // rename files + // FIXME! factor out a common function w/ non-threaded rotation code + char sOld [ SPH_MAX_FILENAME_LEN ]; + snprintf ( sOld, sizeof(sOld), "%s.old", pServed->m_sIndexPath.cstr() ); + + if ( !pServed->m_bOnlyNew && !pOld->Rename ( sOld ) ) + { + // FIXME! rollback inside Rename() call potentially fail + sphWarning ( "rotating index '%s': cur to old rename failed: %s", sIndex.cstr(), pOld->GetLastError().cstr() ); + + } else + { + // FIXME! at this point there's no cur lock file; ie. potential race + sphLogDebug ( "no cur lock file; ie. potential race" ); + if ( !pNew->Rename ( pServed->m_sIndexPath.cstr() ) ) + { + sphWarning ( "rotating index '%s': new to cur rename failed: %s", sIndex.cstr(), pNew->GetLastError().cstr() ); + if ( !pServed->m_bOnlyNew && !pOld->Rename ( pServed->m_sIndexPath.cstr() ) ) + { + sphWarning ( "rotating index '%s': old to cur rename failed: %s; INDEX UNUSABLE", sIndex.cstr(), pOld->GetLastError().cstr() ); + pServed->m_bEnabled = false; + } + } else + { + // all went fine; swap them + sphLogDebug ( "all went fine; swap them" ); + if ( !tNewIndex.m_pIndex->GetTokenizer() ) + tNewIndex.m_pIndex->SetTokenizer ( pServed->m_pIndex->LeakTokenizer() ); + + if ( !tNewIndex.m_pIndex->GetDictionary() ) + tNewIndex.m_pIndex->SetDictionary ( pServed->m_pIndex->LeakDictionary() ); + + Swap ( pServed->m_pIndex, tNewIndex.m_pIndex ); + pServed->m_bEnabled = true; + + // unlink .old + sphLogDebug ( "unlink .old" ); + if ( g_bUnlinkOld && !pServed->m_bOnlyNew ) + { + char sFile [ SPH_MAX_FILENAME_LEN ]; + + for ( int i=0; im_bOnlyNew = false; + sphInfo ( "rotating index '%s': success", sIndex.cstr() ); + } + } + + pServed->Unlock(); +} + +void RotationThreadFunc ( void * ) +{ + assert ( g_eWorkers==MPM_THREADS ); + while ( !g_bRotateShutdown ) + { + // check if we have work to do + if ( !g_iRotateCount ) + { + sphSleepMsec ( 50 ); + continue; + } + g_tRotateQueueMutex.Lock(); + if ( !g_dRotateQueue.GetLength() ) + { + g_tRotateQueueMutex.Unlock(); + sphSleepMsec ( 50 ); + continue; + } + + CSphString sIndex = g_dRotateQueue.Pop(); + g_sPrereading = sIndex.cstr(); + g_tRotateQueueMutex.Unlock(); + + RotateIndexMT ( sIndex ); + + g_tRotateQueueMutex.Lock(); + if ( !g_dRotateQueue.GetLength() ) + { + g_iRotateCount = Max ( 0, g_iRotateCount-1 ); + sphInfo ( "rotating index: all indexes done" ); + } + g_sPrereading = NULL; + g_tRotateQueueMutex.Unlock(); + } +} + + +void IndexRotationDone () +{ +#if !USE_WINDOWS + if ( g_iRotationThrottle && g_eWorkers==MPM_PREFORK ) + { + ARRAY_FOREACH ( i, g_dChildren ) + g_dTermChildren.Add ( g_dChildren[i] ); + } else + { + // forcibly restart children serving persistent connections and/or preforked ones + // FIXME! check how both signals are handled in both cases + int iSignal = ( g_eWorkers==MPM_PREFORK ) ? SIGTERM : SIGHUP; + ARRAY_FOREACH ( i, g_dChildren ) + kill ( g_dChildren[i], iSignal ); + } +#endif + + g_iRotateCount = Max ( 0, g_iRotateCount-1 ); + sphInfo ( "rotating finished" ); +} + + +void SeamlessTryToForkPrereader () +{ + sphLogDebug ( "Invoked SeamlessTryToForkPrereader" ); + + // next in line + const char * sPrereading = g_dRotating.Pop (); + if ( !sPrereading || !g_pIndexes->Exists ( sPrereading ) ) + { + sphWarning ( "INTERNAL ERROR: preread attempt on unknown index '%s'", sPrereading ? sPrereading : "(NULL)" ); + return; + } + const ServedIndex_t & tServed = g_pIndexes->GetUnlockedEntry ( sPrereading ); + + // alloc buffer index (once per run) + if ( !g_pPrereading ) + g_pPrereading = sphCreateIndexPhrase ( NULL, NULL ); // FIXME! check if it's ok + + g_pPrereading->m_bEnableStar = tServed.m_bStar; + g_pPrereading->m_bExpandKeywords = tServed.m_bExpand; + g_pPrereading->SetPreopen ( tServed.m_bPreopen || g_bPreopenIndexes ); + g_pPrereading->SetWordlistPreload ( !tServed.m_bOnDiskDict && !g_bOnDiskDicts ); + + // rebase buffer index + char sNewPath [ SPH_MAX_FILENAME_LEN ]; + snprintf ( sNewPath, sizeof(sNewPath), "%s.new", tServed.m_sIndexPath.cstr() ); + g_pPrereading->SetBase ( sNewPath ); + + // prealloc enough RAM and lock new index + sphLogDebug ( "prealloc enough RAM and lock new index" ); + CSphString sWarn, sError; + if ( !g_pPrereading->Prealloc ( tServed.m_bMlock, g_bStripPath, sWarn ) ) + { + sphWarning ( "rotating index '%s': prealloc: %s; using old index", sPrereading, g_pPrereading->GetLastError().cstr() ); + if ( !sWarn.IsEmpty() ) + sphWarning ( "rotating index: %s", sWarn.cstr() ); + return; + } + if ( !sWarn.IsEmpty() ) + sphWarning ( "rotating index: %s: %s", sPrereading, sWarn.cstr() ); + + if ( !g_pPrereading->Lock() ) + { + sphWarning ( "rotating index '%s': lock: %s; using old index", sPrereading, g_pPrereading->GetLastError().cstr() ); + g_pPrereading->Dealloc (); + return; + } + + if ( tServed.m_bOnlyNew && g_pCfg && g_pCfg->m_tConf.Exists ( "index" ) && g_pCfg->m_tConf["index"].Exists ( sPrereading ) ) + if ( !sphFixupIndexSettings ( g_pPrereading, g_pCfg->m_tConf["index"][sPrereading], sError ) ) + { + sphWarning ( "rotating index '%s': fixup: %s; using old index", sPrereading, sError.cstr() ); + return; + } + + if ( !CheckIndex ( g_pPrereading, sError ) ) + { + sphWarning ( "rotating index '%s': check: %s; using old index", sPrereading, sError.cstr() ); + return; + } + + // fork async reader + sphLogDebug ( "fork async reader" ); + g_sPrereading = sPrereading; + int iPipeFD = PipeAndFork ( true, SPH_PIPE_PREREAD ); + + // in parent, wait for prereader process to finish + if ( g_bHeadDaemon ) + return; + + // in child, do preread + bool bRes = g_pPrereading->Preread (); + if ( !bRes ) + sphWarning ( "rotating index '%s': preread failed: %s; using old index", g_sPrereading, g_pPrereading->GetLastError().cstr() ); + // report and exit + DWORD uTmp = SPH_PIPE_PREREAD; + sphWrite ( iPipeFD, &uTmp, sizeof(DWORD) ); // FIXME? add buffering/checks? + + uTmp = bRes; + sphWrite ( iPipeFD, &uTmp, sizeof(DWORD) ); + + ::close ( iPipeFD ); + sphLogDebug ( "SeamlessTryToForkPrereader: finishing the fork and invoking exit ( 0 )" ); + exit ( 0 ); +} + + +void SeamlessForkPrereader () +{ + sphLogDebug ( "Invoked SeamlessForkPrereader" ); + // sanity checks + if ( g_sPrereading ) + { + sphWarning ( "INTERNAL ERROR: preread attempt before previous completion" ); + return; + } + + // try candidates one by one + while ( g_dRotating.GetLength() && !g_sPrereading ) + SeamlessTryToForkPrereader (); + + // if there's no more candidates, and nothing in the works, we're done + if ( !g_sPrereading && !g_dRotating.GetLength() ) + IndexRotationDone (); +} + + +/// simple wrapper to simplify reading from pipes +struct PipeReader_t +{ + explicit PipeReader_t ( int iFD ) + : m_iFD ( iFD ) + , m_bError ( false ) + { +#if !USE_WINDOWS + if ( fcntl ( iFD, F_SETFL, 0 )<0 ) + sphWarning ( "fcntl(0) on pipe failed (error=%s)", strerror(errno) ); +#endif + } + + ~PipeReader_t () + { + SafeClose ( m_iFD ); + } + + int GetFD () const + { + return m_iFD; + } + + bool IsError () const + { + return m_bError; + } + + int GetInt () + { + int iTmp; + if ( !GetBytes ( &iTmp, sizeof(iTmp) ) ) + iTmp = 0; + return iTmp; + } + + CSphString GetString () + { + int iLen = GetInt (); + CSphString sRes; + sRes.Reserve ( iLen ); + if ( !GetBytes ( const_cast ( sRes.cstr() ), iLen ) ) + sRes = ""; + return sRes; + } + +protected: + bool GetBytes ( void * pBuf, int iCount ) + { + if ( m_bError ) + return false; + + if ( m_iFD<0 ) + { + m_bError = true; + sphWarning ( "invalid pipe fd" ); + return false; + } + + for ( ;; ) + { + int iRes = ::read ( m_iFD, pBuf, iCount ); + if ( iRes<0 && errno==EINTR ) + continue; + + if ( iRes!=iCount ) + { + m_bError = true; + sphWarning ( "pipe read failed (exp=%d, res=%d, error=%s)", + iCount, iRes, iRes>0 ? "(none)" : strerror(errno) ); + return false; + } + return true; + } + } + +protected: + int m_iFD; + bool m_bError; +}; + + +/// handle pipe notifications from prereading +void HandlePipePreread ( PipeReader_t & tPipe, bool bFailure ) +{ + if ( bFailure ) + { + // clean up previous one and launch next one + g_sPrereading = NULL; + + // in any case, buffer index should now be deallocated + g_pPrereading->Dealloc (); + g_pPrereading->Unlock (); + + // work next one + SeamlessForkPrereader (); + return; + } + + assert ( g_iRotateCount && g_bSeamlessRotate && g_sPrereading ); + + // whatever the outcome, we will be done with this one + const char * sPrereading = g_sPrereading; + g_sPrereading = NULL; + + // notice that this will block! + int iRes = tPipe.GetInt(); + if ( !tPipe.IsError() && iRes ) + { + // if preread was succesful, exchange served index and prereader buffer index + ServedIndex_t & tServed = g_pIndexes->GetUnlockedEntry ( sPrereading ); + CSphIndex * pOld = tServed.m_pIndex; + CSphIndex * pNew = g_pPrereading; + + char sOld [ SPH_MAX_FILENAME_LEN ]; + snprintf ( sOld, sizeof(sOld), "%s.old", tServed.m_sIndexPath.cstr() ); + + if ( !tServed.m_bOnlyNew && !pOld->Rename ( sOld ) ) + { + // FIXME! rollback inside Rename() call potentially fail + sphWarning ( "rotating index '%s': cur to old rename failed: %s", sPrereading, pOld->GetLastError().cstr() ); + + } else + { + // FIXME! at this point there's no cur lock file; ie. potential race + if ( !pNew->Rename ( tServed.m_sIndexPath.cstr() ) ) + { + sphWarning ( "rotating index '%s': new to cur rename failed: %s", sPrereading, pNew->GetLastError().cstr() ); + if ( !tServed.m_bOnlyNew && !pOld->Rename ( tServed.m_sIndexPath.cstr() ) ) + { + sphWarning ( "rotating index '%s': old to cur rename failed: %s; INDEX UNUSABLE", sPrereading, pOld->GetLastError().cstr() ); + tServed.m_bEnabled = false; + } + } else + { + // all went fine; swap them + if ( !g_pPrereading->GetTokenizer () ) + g_pPrereading->SetTokenizer ( tServed.m_pIndex->LeakTokenizer () ); + + if ( !g_pPrereading->GetDictionary () ) + g_pPrereading->SetDictionary ( tServed.m_pIndex->LeakDictionary () ); + + Swap ( tServed.m_pIndex, g_pPrereading ); + tServed.m_bEnabled = true; + + // unlink .old + if ( g_bUnlinkOld && !tServed.m_bOnlyNew ) + { + char sFile [ SPH_MAX_FILENAME_LEN ]; + + for ( int i=0; iDealloc (); + g_pPrereading->Unlock (); + + // work next one + SeamlessForkPrereader (); +} + + +/// check if there are any notifications from the children and handle them +void CheckPipes () +{ + ARRAY_FOREACH ( i, g_dPipes ) + { + // try to get status code + DWORD uStatus; + int iRes = ::read ( g_dPipes[i].m_iFD, &uStatus, sizeof(DWORD) ); + + // no data yet? + if ( iRes==-1 && errno==EAGAIN ) + continue; + + // either if there's eof, or error, or valid data - this pipe is over + PipeReader_t tPipe ( g_dPipes[i].m_iFD ); + int iHandler = g_dPipes[i].m_iHandler; + g_dPipes.Remove ( i-- ); + + // check for eof/error + bool bFailure = false; + if ( iRes!=sizeof(DWORD) ) + { + bFailure = true; + + if ( iHandler<0 ) + continue; // no handler; we're not expecting anything + + if ( iRes!=0 || iHandler>=0 ) + sphWarning ( "pipe status read failed (handler=%d)", iHandler ); + } + + // check for handler/status mismatch + if ( !bFailure && ( iHandler>=0 && (int)uStatus!=iHandler ) ) + { + bFailure = true; + sphWarning ( "INTERNAL ERROR: pipe status mismatch (handler=%d, status=%d)", iHandler, uStatus ); + } + + // check for handler promotion (ie: we did not expect anything particular, but something happened anyway) + if ( !bFailure && iHandler<0 ) + iHandler = (int)uStatus; + + // run the proper handler + switch ( iHandler ) + { + case SPH_PIPE_PREREAD: HandlePipePreread ( tPipe, bFailure ); break; + default: if ( !bFailure ) sphWarning ( "INTERNAL ERROR: unknown pipe handler (handler=%d, status=%d)", iHandler, uStatus ); break; + } + } +} + + +void ConfigureIndex ( ServedIndex_t & tIdx, const CSphConfigSection & hIndex ) +{ + tIdx.m_bMlock = ( hIndex.GetInt ( "mlock", 0 )!=0 ) && !g_bOptNoLock; + tIdx.m_bStar = ( hIndex.GetInt ( "enable_star", 0 )!=0 ); + tIdx.m_bExpand = ( hIndex.GetInt ( "expand_keywords", 0 )!=0 ); + tIdx.m_bPreopen = ( hIndex.GetInt ( "preopen", 0 )!=0 ); + tIdx.m_bOnDiskDict = ( hIndex.GetInt ( "ondisk_dict", 0 )!=0 ); +} + + +bool PrereadNewIndex ( ServedIndex_t & tIdx, const CSphConfigSection & hIndex, const char * szIndexName ) +{ + CSphString sWarning; + + if ( !tIdx.m_pIndex->Prealloc ( tIdx.m_bMlock, g_bStripPath, sWarning ) || !tIdx.m_pIndex->Preread() ) + { + sphWarning ( "index '%s': preload: %s; NOT SERVING", szIndexName, tIdx.m_pIndex->GetLastError().cstr() ); + return false; + } + + if ( !sWarning.IsEmpty() ) + sphWarning ( "index '%s': %s", szIndexName, sWarning.cstr() ); + + CSphString sError; + if ( !sphFixupIndexSettings ( tIdx.m_pIndex, hIndex, sError ) ) + { + sphWarning ( "index '%s': %s - NOT SERVING", szIndexName, sError.cstr() ); + return false; + } + + // try to lock it + if ( !g_bOptNoLock && !tIdx.m_pIndex->Lock() ) + { + sphWarning ( "index '%s': lock: %s; NOT SERVING", szIndexName, tIdx.m_pIndex->GetLastError().cstr() ); + return false; + } + + return true; +} + + +bool ConfigureAgent ( AgentDesc_t & tAgent, const CSphVariant * pAgent, const char * szIndexName, bool bBlackhole ) +{ + // extract host name or path + const char * p = pAgent->cstr(); + while ( sphIsAlpha(*p) || *p=='.' || *p=='-' || *p=='/' ) p++; + if ( p==pAgent->cstr() ) + { + sphWarning ( "index '%s': agent '%s': host name or path expected - SKIPPING AGENT", + szIndexName, pAgent->cstr() ); + return false; + } + if ( *p++!=':' ) + { + sphWarning ( "index '%s': agent '%s': colon expected near '%s' - SKIPPING AGENT", + szIndexName, pAgent->cstr(), p ); + return false; + } + + CSphString sSub = pAgent->SubString ( 0, p-1-pAgent->cstr() ); + if ( sSub.cstr()[0]=='/' ) + { +#if USE_WINDOWS + sphWarning ( "index '%s': agent '%s': UNIX sockets are not supported on Windows - SKIPPING AGENT", + szIndexName, pAgent->cstr() ); + return false; +#else + if ( strlen ( sSub.cstr() ) + 1 > sizeof(((struct sockaddr_un *)0)->sun_path) ) + { + sphWarning ( "index '%s': agent '%s': UNIX socket path is too long - SKIPPING AGENT", + szIndexName, pAgent->cstr() ); + return false; + } + + tAgent.m_iFamily = AF_UNIX; + tAgent.m_sPath = sSub; + p--; +#endif + } else + { + tAgent.m_iFamily = AF_INET; + tAgent.m_sHost = sSub; + + // extract port + if ( !isdigit(*p) ) + { + sphWarning ( "index '%s': agent '%s': port number expected near '%s' - SKIPPING AGENT", + szIndexName, pAgent->cstr(), p ); + return false; + } + tAgent.m_iPort = atoi(p); + + if ( !IsPortInRange ( tAgent.m_iPort ) ) + { + sphWarning ( "index '%s': agent '%s': invalid port number near '%s' - SKIPPING AGENT", + szIndexName, pAgent->cstr(), p ); + return false; + } + + while ( isdigit(*p) ) p++; + } + + // extract index list + if ( *p++!=':' ) + { + sphWarning ( "index '%s': agent '%s': colon expected near '%s' - SKIPPING AGENT", + szIndexName, pAgent->cstr(), p ); + return false; + } + while ( isspace(*p) ) + p++; + const char * sIndexList = p; + while ( sphIsAlpha(*p) || isspace(*p) || *p==',' ) + p++; + if ( *p ) + { + sphWarning ( "index '%s': agent '%s': index list expected near '%s' - SKIPPING AGENT", + szIndexName, pAgent->cstr(), p ); + return false; + } + tAgent.m_sIndexes = sIndexList; + + // lookup address (if needed) + if ( tAgent.m_iFamily==AF_INET ) + { + tAgent.m_uAddr = sphGetAddress ( tAgent.m_sHost.cstr() ); + if ( tAgent.m_uAddr==0 ) + { + sphWarning ( "index '%s': agent '%s': failed to lookup host name '%s' (error=%s) - SKIPPING AGENT", + szIndexName, pAgent->cstr(), tAgent.m_sHost.cstr(), sphSockError() ); + return false; + } + } + + tAgent.m_bBlackhole = bBlackhole; + + // allocate stats slot + if ( g_pStats ) + { + g_tStatsMutex.Lock(); + for ( int i=0; im_bmAgentStats[i]!=0xffffffffUL ) + { + int j = FindBit ( g_pStats->m_bmAgentStats[i] ); + g_pStats->m_bmAgentStats[i] |= ( 1<m_dAgentStats[tAgent.m_iStatsIndex], 0, sizeof(AgentStats_t) ); + break; + } + g_tStatsMutex.Unlock(); + } + + return true; +} + +static DistributedIndex_t ConfigureDistributedIndex ( const char * szIndexName, const CSphConfigSection & hIndex ) +{ + assert ( hIndex("type") && hIndex["type"]=="distributed" ); + + DistributedIndex_t tIdx; + + // add local agents + for ( CSphVariant * pLocal = hIndex("local"); pLocal; pLocal = pLocal->m_pNext ) + { + if ( !g_pIndexes->Exists ( pLocal->cstr() ) ) + { + sphWarning ( "index '%s': no such local index '%s' - SKIPPING LOCAL INDEX", + szIndexName, pLocal->cstr() ); + continue; + } + tIdx.m_dLocal.Add ( pLocal->cstr() ); + } + + // add remote agents + for ( CSphVariant * pAgent = hIndex("agent"); pAgent; pAgent = pAgent->m_pNext ) + { + AgentDesc_t tAgent; + if ( ConfigureAgent ( tAgent, pAgent, szIndexName, false ) ) + tIdx.m_dAgents.Add ( tAgent ); + } + + for ( CSphVariant * pAgent = hIndex("agent_blackhole"); pAgent; pAgent = pAgent->m_pNext ) + { + AgentDesc_t tAgent; + if ( ConfigureAgent ( tAgent, pAgent, szIndexName, true ) ) + tIdx.m_dAgents.Add ( tAgent ); + } + + // configure options + if ( hIndex("agent_connect_timeout") ) + { + if ( hIndex["agent_connect_timeout"].intval()<=0 ) + sphWarning ( "index '%s': connect_timeout must be positive, ignored", szIndexName ); + else + tIdx.m_iAgentConnectTimeout = hIndex["agent_connect_timeout"].intval(); + } + + if ( hIndex("agent_query_timeout") ) + { + if ( hIndex["agent_query_timeout"].intval()<=0 ) + sphWarning ( "index '%s': query_timeout must be positive, ignored", szIndexName ); + else + tIdx.m_iAgentQueryTimeout = hIndex["agent_query_timeout"].intval(); + } + + return tIdx; +} + + +void FreeAgentStats ( DistributedIndex_t & tIndex ) +{ + if ( !g_pStats ) + return; + + g_tStatsMutex.Lock(); + ARRAY_FOREACH ( i, tIndex.m_dAgents ) + { + int iIndex = tIndex.m_dAgents[i].m_iStatsIndex; + if ( iIndex<0 || iIndex>=STATS_MAX_AGENTS ) + continue; + + assert ( g_pStats->m_bmAgentStats[iIndex>>5] & ( 1UL<<( iIndex & 31 ) ) ); + g_pStats->m_bmAgentStats[iIndex>>5] &= ~( 1UL<<( iIndex & 31 ) ); + } + g_tStatsMutex.Unlock(); +} + + +ESphAddIndex AddIndex ( const char * szIndexName, const CSphConfigSection & hIndex ) +{ + if ( hIndex("type") && hIndex["type"]=="distributed" ) + { + /////////////////////////////// + // configure distributed index + /////////////////////////////// + + DistributedIndex_t tIdx = ConfigureDistributedIndex ( szIndexName, hIndex ); + + // finally, check and add distributed index to global table + if ( tIdx.m_dAgents.GetLength()==0 && tIdx.m_dLocal.GetLength()==0 ) + { + FreeAgentStats ( tIdx ); + sphWarning ( "index '%s': no valid local/remote indexes in distributed index - NOT SERVING", szIndexName ); + return ADD_ERROR; + + } else + { + g_tDistLock.Lock (); + if ( !g_hDistIndexes.Add ( tIdx, szIndexName ) ) + { + g_tDistLock.Unlock (); + FreeAgentStats ( tIdx ); + sphWarning ( "index '%s': duplicate name - NOT SERVING", szIndexName ); + return ADD_ERROR; + } + g_tDistLock.Unlock (); + } + + return ADD_DISTR; + + } else if ( hIndex("type") && hIndex["type"]=="rt" ) + { + //////////////////////////// + // configure realtime index + //////////////////////////// + + if ( g_eWorkers!=MPM_THREADS ) + { + sphWarning ( "index '%s': RT index requires workers=threads - NOT SERVING", szIndexName ); + return ADD_ERROR; + } + + CSphString sError; + CSphSchema tSchema ( szIndexName ); + if ( !sphRTSchemaConfigure ( hIndex, &tSchema, &sError ) ) + { + sphWarning ( "index '%s': %s - NOT SERVING", szIndexName, sError.cstr() ); + return ADD_ERROR; + } + + // path + if ( !hIndex("path") ) + { + sphWarning ( "index '%s': path must be specified - NOT SERVING", szIndexName ); + return ADD_ERROR; + } + + // RAM chunk size + DWORD uRamSize = hIndex.GetSize ( "rt_mem_limit", 32*1024*1024 ); + if ( uRamSize<128*1024 ) + { + sphWarning ( "index '%s': rt_mem_limit extremely low, using 128K instead", szIndexName ); + uRamSize = 128*1024; + } else if ( uRamSize<8*1024*1024 ) + sphWarning ( "index '%s': rt_mem_limit very low (under 8 MB)", szIndexName ); + + // index + ServedIndex_t tIdx; + tIdx.m_pIndex = sphCreateIndexRT ( tSchema, szIndexName, uRamSize, hIndex["path"].cstr() ); + tIdx.m_bEnabled = false; + tIdx.m_sIndexPath = hIndex["path"]; + tIdx.m_bRT = true; + tIdx.m_pIndex->SetWordlistPreload ( !hIndex.GetInt("ondisk_dict") && !g_bOnDiskDicts ); + + // pick config settings + // they should be overriden later by Preload() if needed + CSphIndexSettings tSettings; + if ( !sphConfIndex ( hIndex, tSettings, sError ) ) + { + sphWarning ( "ERROR: index '%s': %s - NOT SERVING", szIndexName, sError.cstr() ); + return ADD_ERROR; + } + + tIdx.m_pIndex->Setup ( tSettings ); + + // hash it + if ( !g_pIndexes->Add ( tIdx, szIndexName ) ) + { + sphWarning ( "INTERNAL ERROR: index '%s': hash add failed - NOT SERVING", szIndexName ); + return ADD_ERROR; + } + + tIdx.Reset (); // so that the dtor wouln't delete everything + return ADD_RT; + + } else if ( !hIndex("type") || hIndex["type"]=="plain" ) + { + ///////////////////////// + // configure local index + ///////////////////////// + + ServedIndex_t tIdx; + + // check path + if ( !hIndex.Exists ( "path" ) ) + { + sphWarning ( "index '%s': key 'path' not found - NOT SERVING", szIndexName ); + return ADD_ERROR; + } + + // check name + if ( g_pIndexes->Exists ( szIndexName ) ) + { + sphWarning ( "index '%s': duplicate name - NOT SERVING", szIndexName ); + return ADD_ERROR; + } + + // configure memlocking, star + ConfigureIndex ( tIdx, hIndex ); + + // try to create index + CSphString sWarning; + tIdx.m_pIndex = sphCreateIndexPhrase ( szIndexName, hIndex["path"].cstr() ); + tIdx.m_pIndex->m_bEnableStar = tIdx.m_bStar; + tIdx.m_pIndex->m_bExpandKeywords = tIdx.m_bExpand; + tIdx.m_pIndex->m_iExpansionLimit = g_iExpansionLimit; + tIdx.m_pIndex->SetPreopen ( tIdx.m_bPreopen || g_bPreopenIndexes ); + tIdx.m_pIndex->SetWordlistPreload ( !tIdx.m_bOnDiskDict && !g_bOnDiskDicts ); + tIdx.m_bEnabled = false; + + // done + tIdx.m_sIndexPath = hIndex["path"]; + if ( !g_pIndexes->Add ( tIdx, szIndexName ) ) + { + sphWarning ( "INTERNAL ERROR: index '%s': hash add failed - NOT SERVING", szIndexName ); + return ADD_ERROR; + } + + tIdx.Reset (); // so that the dtor wouldn't delete everything + return ADD_LOCAL; + + } else + { + // unknown type + sphWarning ( "index '%s': unknown type '%s' - NOT SERVING", szIndexName, hIndex["type"].cstr() ); + return ADD_ERROR; + } +} + + +bool CheckConfigChanges () +{ + struct stat tStat; + memset ( &tStat, 0, sizeof ( tStat ) ); + if ( stat ( g_sConfigFile.cstr (), &tStat ) < 0 ) + memset ( &tStat, 0, sizeof ( tStat ) ); + + DWORD uCRC32 = 0; + sphCalcFileCRC32 ( g_sConfigFile.cstr (), uCRC32 ); + + if ( g_uCfgCRC32==uCRC32 && tStat.st_mtime==g_tCfgStat.st_mtime && tStat.st_ctime==g_tCfgStat.st_ctime && tStat.st_size==g_tCfgStat.st_size ) + return false; + + g_uCfgCRC32 = uCRC32; + g_tCfgStat = tStat; + + return true; +} + + +void ReloadIndexSettings ( CSphConfigParser * pCP ) +{ + assert ( pCP ); + + if ( !pCP->Parse ( g_sConfigFile.cstr () ) ) + { + sphWarning ( "failed to parse config file '%s'; using previous settings", g_sConfigFile.cstr () ); + return; + } + + g_bDoDelete = false; + + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + it.Get().m_bToDelete = true; ///< FIXME! What about write lock before doing this? + + g_hDistIndexes.IterateStart (); + while ( g_hDistIndexes.IterateNext () ) + g_hDistIndexes.IterateGet().m_bToDelete = true; + + int nTotalIndexes = g_pIndexes->GetLength () + g_hDistIndexes.GetLength (); + int nChecked = 0; + + const CSphConfig & hConf = pCP->m_tConf; + hConf["index"].IterateStart (); + while ( hConf["index"].IterateNext() ) + { + const CSphConfigSection & hIndex = hConf["index"].IterateGet(); + const char * sIndexName = hConf["index"].IterateGetKey().cstr(); + + ServedIndex_t * pServedIndex = g_pIndexes->GetWlockedEntry ( sIndexName ); + if ( pServedIndex ) + { + ConfigureIndex ( *pServedIndex, hIndex ); + pServedIndex->m_bToDelete = false; + nChecked++; + pServedIndex->Unlock(); + + } else if ( g_hDistIndexes.Exists ( sIndexName ) && hIndex.Exists("type") && hIndex["type"]=="distributed" ) + { + DistributedIndex_t tIdx = ConfigureDistributedIndex ( sIndexName, hIndex ); + + // finally, check and add distributed index to global table + if ( tIdx.m_dAgents.GetLength()==0 && tIdx.m_dLocal.GetLength()==0 ) + { + FreeAgentStats ( tIdx ); + sphWarning ( "index '%s': no valid local/remote indexes in distributed index; using last valid definition", sIndexName ); + g_hDistIndexes[sIndexName].m_bToDelete = false; + + } else + { + g_tDistLock.Lock(); + FreeAgentStats ( g_hDistIndexes[sIndexName] ); + g_hDistIndexes[sIndexName] = tIdx; + g_tDistLock.Unlock(); + } + + nChecked++; + + } else if ( AddIndex ( sIndexName, hIndex )==ADD_LOCAL ) + { + ServedIndex_t * pIndex = g_pIndexes->GetWlockedEntry ( sIndexName ); + if ( pIndex ) + { + pIndex->m_bOnlyNew = true; + pIndex->Unlock(); + } + } + } + + if ( nChecked < nTotalIndexes ) + g_bDoDelete = true; +} + + +void CheckDelete () +{ + if ( !g_bDoDelete ) + return; + + if ( g_dChildren.GetLength() ) + return; + + CSphVector dToDelete; + CSphVector dDistToDelete; + dToDelete.Reserve ( 8 ); + dDistToDelete.Reserve ( 8 ); + + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + { + ServedIndex_t & tIndex = it.Get(); + if ( tIndex.m_bToDelete ) + dToDelete.Add ( &it.GetKey() ); + } + + g_hDistIndexes.IterateStart (); + while ( g_hDistIndexes.IterateNext () ) + { + DistributedIndex_t & tIndex = g_hDistIndexes.IterateGet (); + if ( tIndex.m_bToDelete ) + dDistToDelete.Add ( &g_hDistIndexes.IterateGetKey () ); + } + + ARRAY_FOREACH ( i, dToDelete ) + g_pIndexes->Delete ( *dToDelete[i] ); // should result in automatic CSphIndex::Unlock() via dtor call + + g_tDistLock.Lock(); + + ARRAY_FOREACH ( i, dDistToDelete ) + { + FreeAgentStats ( g_hDistIndexes [ *dDistToDelete[i] ] ); + g_hDistIndexes.Delete ( *dDistToDelete[i] ); + } + + g_tDistLock.Unlock(); + + g_bDoDelete = false; +} + + +void CheckRotate () +{ + // do we need to rotate now? + if ( !g_iRotateCount ) + return; + + sphLogDebug ( "CheckRotate invoked" ); + + ///////////////////// + // RAM-greedy rotate + ///////////////////// + + if ( !g_bSeamlessRotate || g_eWorkers==MPM_PREFORK ) + { + // wait until there's no running queries + if ( g_dChildren.GetLength() && g_eWorkers!=MPM_PREFORK ) + return; + + CSphConfigParser * pCP = NULL; + + if ( CheckConfigChanges () ) + { + pCP = new CSphConfigParser; + ReloadIndexSettings ( pCP ); + } + + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + { + ServedIndex_t & tIndex = it.Get(); + tIndex.WriteLock(); + const char * sIndex = it.GetKey().cstr(); + assert ( tIndex.m_pIndex ); + + bool bWasAdded = tIndex.m_bOnlyNew; + RotateIndexGreedy ( tIndex, sIndex ); + if ( bWasAdded && tIndex.m_bEnabled ) + { + const CSphConfigType & hConf = pCP->m_tConf ["index"]; + if ( hConf.Exists ( sIndex ) ) + { + CSphString sError; + if ( !sphFixupIndexSettings ( tIndex.m_pIndex, hConf [sIndex], sError ) ) + { + sphWarning ( "index '%s': %s - NOT SERVING", sIndex, sError.cstr() ); + tIndex.m_bEnabled = false; + } + + if ( tIndex.m_bEnabled && !CheckIndex ( tIndex.m_pIndex, sError ) ) + { + sphWarning ( "index '%s': %s - NOT SERVING", sIndex, sError.cstr() ); + tIndex.m_bEnabled = false; + } + } + } + tIndex.Unlock(); + } + + SafeDelete ( pCP ); + IndexRotationDone (); + return; + } + + /////////////////// + // seamless rotate + /////////////////// + + if ( g_dRotating.GetLength() || g_dRotateQueue.GetLength() || g_sPrereading ) + return; // rotate in progress already; will be handled in CheckPipes() + + g_tRotateConfigMutex.Lock(); + SafeDelete ( g_pCfg ); + if ( CheckConfigChanges() ) + { + g_pCfg = new CSphConfigParser; + ReloadIndexSettings ( g_pCfg ); + } + g_tRotateConfigMutex.Unlock(); + + int iRotIndexes = 0; + // check what indexes need to be rotated + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + { + const ServedIndex_t & tIndex = it.Get(); + const CSphString & sIndex = it.GetKey(); + assert ( tIndex.m_pIndex ); + + CSphString sNewPath; + sNewPath.SetSprintf ( "%s.new", tIndex.m_sIndexPath.cstr() ); + + // check if there's a .new index incoming + // FIXME? move this code to index, and also check for exists-but-not-readable + CSphString sTmp; + sTmp.SetSprintf ( "%s.sph", sNewPath.cstr() ); + if ( !sphIsReadable ( sTmp.cstr() ) ) + { + sphLogDebug ( "%s.sph is not readable. Skipping", sNewPath.cstr() ); + continue; + } + + if ( g_eWorkers==MPM_THREADS ) + { + g_tRotateQueueMutex.Lock(); + g_dRotateQueue.Add ( sIndex ); + g_tRotateQueueMutex.Unlock(); + } else + { + g_dRotating.Add ( sIndex.cstr() ); + + if ( !( tIndex.m_bPreopen || g_bPreopenIndexes ) ) + sphWarning ( "rotating index '%s' without preopen option; use per-index propen=1 or searchd preopen_indexes=1", sIndex.cstr() ); + } + + iRotIndexes++; + } + + if ( !iRotIndexes ) + { + sphWarning ( "INTERNAL ERROR: nothing to rotate after SIGHUP" ); + g_iRotateCount = Max ( 0, g_iRotateCount-1 ); + } + + if ( g_eWorkers!=MPM_THREADS && iRotIndexes ) + SeamlessForkPrereader (); +} + + +void CheckReopen () +{ + if ( !g_bGotSigusr1 ) + return; + + // reopen searchd log + if ( g_iLogFile>=0 && !g_bLogTty ) + { + int iFD = ::open ( g_sLogFile.cstr(), O_CREAT | O_RDWR | O_APPEND, S_IREAD | S_IWRITE ); + if ( iFD<0 ) + { + sphWarning ( "failed to reopen log file '%s': %s", g_sLogFile.cstr(), strerror(errno) ); + } else + { + ::close ( g_iLogFile ); + g_iLogFile = iFD; + g_bLogTty = ( isatty ( g_iLogFile )!=0 ); + sphInfo ( "log reopened" ); + } + } + + // reopen query log + if ( !g_bQuerySyslog && g_iQueryLogFile!=g_iLogFile && g_iQueryLogFile>=0 && !isatty ( g_iQueryLogFile ) ) + { + int iFD = ::open ( g_sQueryLogFile.cstr(), O_CREAT | O_RDWR | O_APPEND, S_IREAD | S_IWRITE ); + if ( iFD<0 ) + { + sphWarning ( "failed to reopen query log file '%s': %s", g_sQueryLogFile.cstr(), strerror(errno) ); + } else + { + ::close ( g_iQueryLogFile ); + g_iQueryLogFile = iFD; + sphInfo ( "query log reopened" ); + } + } + + g_bGotSigusr1 = 0; +} + + +static void SaveIndexes () +{ + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + { + const ServedIndex_t & tServed = it.Get(); + tServed.ReadLock(); + if ( tServed.m_bEnabled ) + { + if ( !tServed.m_pIndex->SaveAttributes () ) + sphWarning ( "index %s: attrs save failed: %s", it.GetKey().cstr(), tServed.m_pIndex->GetLastError().cstr() ); + } + tServed.Unlock(); + } +} + + +static void ThdSaveIndexes ( void * ) +{ + SaveIndexes (); + + // we're no more flushing + g_tFlushMutex.Lock(); + g_pFlush->m_bFlushing = false; + g_tFlushMutex.Unlock(); +} + +#if !USE_WINDOWS +int PreforkChild (); +#endif + +void CheckFlush () +{ + if ( g_iAttrFlushPeriod<=0 || g_pFlush->m_bFlushing ) + return; + + // do a periodic check, unless we have a forced check + if ( !g_pFlush->m_bForceCheck ) + { + static int64_t tmLastCheck = -1000; + int64_t tmNow = sphMicroTimer(); + + if ( ( tmLastCheck + int64_t(g_iAttrFlushPeriod)*I64C(1000000) )>=tmNow ) + return; + + tmLastCheck = tmNow; + sphLogDebug ( "attrflush: doing periodic check" ); + } else + { + sphLogDebug ( "attrflush: doing forced check" ); + } + + // check if there are dirty indexes + bool bDirty = false; + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + { + const ServedIndex_t & tServed = it.Get(); + if ( tServed.m_bEnabled && tServed.m_pIndex->GetAttributeStatus() ) + { + bDirty = true; + break; + } + } + + // need to set this before clearing check flag + if ( bDirty ) + g_pFlush->m_bFlushing = true; + + // if there was a forced check in progress, it no longer is + if ( g_pFlush->m_bForceCheck ) + g_pFlush->m_bForceCheck = false; + + // nothing to do, no indexes were updated + if ( !bDirty ) + { + sphLogDebug ( "attrflush: no dirty indexes found" ); + return; + } + + // launch the flush! + g_pFlush->m_iFlushTag++; + + sphLogDebug ( "attrflush: starting writer, tag ( %d )", g_pFlush->m_iFlushTag ); + +#if !USE_WINDOWS + if ( g_eWorkers==MPM_FORK || g_eWorkers==MPM_PREFORK ) + { + PreforkChild(); // FIXME! gracefully handle fork() failures, Windows, etc + if ( g_bHeadDaemon ) + { + return; + } + + // child process, do the work + SaveIndexes (); + g_pFlush->m_bFlushing = false; + exit ( 0 ); + } else +#endif + { + ThdDesc_t tThd; + if ( !sphThreadCreate ( &tThd.m_tThd, ThdSaveIndexes, NULL, true ) ) + sphWarning ( "failed to create attribute save thread, error[%d] %s", errno, strerror(errno) ); + } +} + + +#if !USE_WINDOWS +#define WINAPI +#else + +SERVICE_STATUS g_ss; +SERVICE_STATUS_HANDLE g_ssHandle; + + +void MySetServiceStatus ( DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwWaitHint ) +{ + static DWORD dwCheckPoint = 1; + + if ( dwCurrentState==SERVICE_START_PENDING ) + g_ss.dwControlsAccepted = 0; + else + g_ss.dwControlsAccepted = SERVICE_ACCEPT_STOP; + + g_ss.dwCurrentState = dwCurrentState; + g_ss.dwWin32ExitCode = dwWin32ExitCode; + g_ss.dwWaitHint = dwWaitHint; + + if ( dwCurrentState==SERVICE_RUNNING || dwCurrentState==SERVICE_STOPPED ) + g_ss.dwCheckPoint = 0; + else + g_ss.dwCheckPoint = dwCheckPoint++; + + SetServiceStatus ( g_ssHandle, &g_ss ); +} + + +void WINAPI ServiceControl ( DWORD dwControlCode ) +{ + switch ( dwControlCode ) + { + case SERVICE_CONTROL_STOP: + MySetServiceStatus ( SERVICE_STOP_PENDING, NO_ERROR, 0 ); + g_bServiceStop = true; + break; + + default: + MySetServiceStatus ( g_ss.dwCurrentState, NO_ERROR, 0 ); + break; + } +} + + +// warning! static buffer, non-reentrable +const char * WinErrorInfo () +{ + static char sBuf[1024]; + + DWORD uErr = ::GetLastError (); + snprintf ( sBuf, sizeof(sBuf), "code=%d, error=", uErr ); + + int iLen = strlen(sBuf); + if ( !FormatMessage ( FORMAT_MESSAGE_FROM_SYSTEM, NULL, uErr, 0, sBuf+iLen, sizeof(sBuf)-iLen, NULL ) ) // FIXME? force US-english langid? + snprintf ( sBuf+iLen, sizeof(sBuf)-iLen, "(no message)" ); + + return sBuf; +} + + +SC_HANDLE ServiceOpenManager () +{ + SC_HANDLE hSCM = OpenSCManager ( + NULL, // local computer + NULL, // ServicesActive database + SC_MANAGER_ALL_ACCESS ); // full access rights + + if ( hSCM==NULL ) + sphFatal ( "OpenSCManager() failed: %s", WinErrorInfo() ); + + return hSCM; +} + + +void AppendArg ( char * sBuf, int iBufLimit, const char * sArg ) +{ + char * sBufMax = sBuf + iBufLimit - 2; // reserve place for opening space and trailing zero + sBuf += strlen(sBuf); + + if ( sBuf>=sBufMax ) + return; + + int iArgLen = strlen(sArg); + bool bQuote = false; + for ( int i=0; i=sBufMax ) + return; + + *sBuf++ = '"'; + while ( sBuf\tread configuration from specified file\n" + "\t\t\t(default is csft.conf)\n" + "--stop\t\t\tsend SIGTERM to currently running searchd\n" + "--stopwait\t\tsend SIGTERM and wait until actual exit\n" + "--status\t\tget ant print status variables\n" + "\t\t\t(PID is taken from pid_file specified in config file)\n" + "--iostats\t\tlog per-query io stats\n" +#ifdef HAVE_CLOCK_GETTIME + "--cpustats\t\tlog per-query cpu stats\n" +#endif +#if USE_WINDOWS + "--install\t\tinstall as Windows service\n" + "--delete\t\tdelete Windows service\n" + "--servicename \tuse given service name (default is 'searchd')\n" +#endif + "\n" + "Debugging options are:\n" + "--console\t\trun in console mode (do not fork, do not log to files)\n" + "-p, --port \tlisten on given port (overrides config setting)\n" + "-l, --listen \tlisten on given address, port or path (overrides\n" + "\t\t\tconfig settings)\n" + "-i, --index \tonly serve one given index\n" + "--logdebug\t\tenable additional debug information logging\n" +#if !USE_WINDOWS + "--nodetach\t\tdo not detach into background\n" +#endif + "\n" + "Examples:\n" + "searchd --config /usr/local/sphinx/etc/csft.conf\n" +#if USE_WINDOWS + "searchd --install --config c:\\sphinx\\csft.conf\n" +#endif + ); +} + + +#if USE_WINDOWS +BOOL WINAPI CtrlHandler ( DWORD ) +{ + if ( !g_bService ) + { + g_bGotSigterm = 1; + sphInterruptNow(); + } + return TRUE; +} +#endif + + +#if !USE_WINDOWS +int PreforkChild () +{ + // next one + int iRes = fork(); + if ( iRes==-1 ) + sphFatal ( "fork() failed during prefork (error=%s)", strerror(errno) ); + + // child process + if ( iRes==0 ) + { + g_bHeadDaemon = false; + sphSetProcessInfo ( false ); + return iRes; + } + + // parent process + g_dChildren.Add ( iRes ); + return iRes; +} + + +// returns 'true' only once - at the very start, to show it beatiful way. +bool SetWatchDog ( int iDevNull ) +{ + // Fork #1 - detach from controlling terminal + switch ( fork() ) + { + case -1: + // error + Shutdown (); + sphFatal ( "fork() failed (reason: %s)", strerror ( errno ) ); + exit ( 1 ); + case 0: + // daemonized child - or new and free watchdog :) + break; + + default: + // tty-controlled parent + while ( g_tHaveTTY.ReadValue() ) + sphSleepMsec ( 100 ); + + sphSetProcessInfo ( false ); + exit ( 0 ); + } + + // became the session leader + if ( setsid()==-1 ) + { + Shutdown (); + sphFatal ( "setsid() failed (reason: %s)", strerror ( errno ) ); + exit ( 1 ); + } + + // Fork #2 - detach from session leadership (may be not necessary, however) + switch ( fork() ) + { + case -1: + // error + Shutdown (); + sphFatal ( "fork() failed (reason: %s)", strerror ( errno ) ); + exit ( 1 ); + case 0: + // daemonized child - or new and free watchdog :) + break; + + default: + // tty-controlled parent + sphSetProcessInfo ( false ); + exit ( 0 ); + } + + // now we are the watchdog. Let us fork the actual process + int iReincarnate = 1; + bool bShutdown = false; + bool bStreamsActive = true; + int iRes = 0; + for ( ;; ) + { + if ( iReincarnate!=0 ) + iRes = fork(); + + if ( iRes==-1 ) + { + Shutdown (); + sphFatal ( "fork() failed during watchdog setup (error=%s)", strerror(errno) ); + } + + // child process; return true to show that we have to reload everything + if ( iRes==0 ) + { + atexit ( &ReleaseTTYFlag ); + return bStreamsActive; + } + + // parent process, watchdog + // close the io files + if ( bStreamsActive ) + { + close ( STDIN_FILENO ); + close ( STDOUT_FILENO ); + close ( STDERR_FILENO ); + dup2 ( iDevNull, STDIN_FILENO ); + dup2 ( iDevNull, STDOUT_FILENO ); + dup2 ( iDevNull, STDERR_FILENO ); + bStreamsActive = false; + } + + sphInfo ( "Child process %d has been forked", iRes ); + + SetSignalHandlers(); + + iReincarnate = 0; + int iPid, iStatus; + while ( ( iPid = wait ( &iStatus ) )>0 ) + { + assert ( iPid==iRes ); + if ( WIFEXITED ( iStatus ) ) + { + int iExit = WEXITSTATUS ( iStatus ); + if ( iExit==2 ) // really crash + { + sphInfo ( "Child process %d has been finished by CRASH_EXIT (exit code 2), will be restarted", iPid ); + iReincarnate = -1; + } else + { + sphInfo ( "Child process %d has been finished, exit code %d. Watchdog finishes also. Good bye!", iPid, iExit ); + bShutdown = true; + } + } else if ( WIFSIGNALED ( iStatus ) ) + { + if ( WTERMSIG ( iStatus )==SIGINT || WTERMSIG ( iStatus )==SIGTERM +#if WATCHDOG_SIGKILL + || WTERMSIG ( iStatus )==SIGKILL +#endif + ) + { + sphInfo ( "Child process %d has been killed with kill or sigterm (%i). Watchdog finishes also. Good bye!", iPid, WTERMSIG ( iStatus ) ); + bShutdown = true; + } else + { + if ( WCOREDUMP ( iStatus ) ) + sphInfo ( "Child process %i has been killed with signal %i, core dumped, will be restarted", iPid, WTERMSIG ( iStatus ) ); + else + sphInfo ( "Child process %i has been killed with signal %i, will be restarted", iPid, WTERMSIG ( iStatus ) ); + iReincarnate = -1; + } + } else if ( WIFSTOPPED ( iStatus ) ) + sphInfo ( "Child %i stopped with signal %i", iPid, WSTOPSIG ( iStatus ) ); +#ifdef WIFCONTINUED + else if ( WIFCONTINUED ( iStatus ) ) + sphInfo ( "Child %i resumed", iPid ); +#endif + } + + if ( bShutdown || g_bGotSigterm ) + { + Shutdown(); + exit ( 0 ); + } + } +} +#endif // !USE_WINDOWS + +/// check for incoming signals, and react on them +void CheckSignals () +{ +#if USE_WINDOWS + if ( g_bService && g_bServiceStop ) + { + Shutdown (); + MySetServiceStatus ( SERVICE_STOPPED, NO_ERROR, 0 ); + exit ( 0 ); + } +#endif + + if ( g_bGotSighup ) + { + g_tRotateQueueMutex.Lock(); + g_iRotateCount++; + g_tRotateQueueMutex.Unlock(); + sphInfo ( "rotating indices (seamless=%d)", (int)g_bSeamlessRotate ); // this might hang if performed from SIGHUP + g_bGotSighup = 0; + } + + if ( g_bGotSigterm ) + { + assert ( g_bHeadDaemon ); + sphInfo ( "caught SIGTERM, shutting down" ); + Shutdown (); + exit ( 0 ); + } + +#if !USE_WINDOWS + if ( g_bGotSigchld ) + { + // handle gone children + for ( ;; ) + { + int iChildPid = waitpid ( -1, NULL, WNOHANG ); + sphLogDebugvv ( "gone child %d ( %d )", iChildPid, g_dChildren.GetLength() ); // !COMMIT + if ( iChildPid<=0 ) + break; + + g_dChildren.RemoveValue ( iChildPid ); // FIXME! OPTIMIZE! can be slow + } + g_bGotSigchld = 0; + + // prefork more children, if needed + if ( g_eWorkers==MPM_PREFORK ) + while ( g_dChildren.GetLength() < g_iPreforkChildren ) + if ( PreforkChild()==0 ) // child process? break from here, go work + return; + } +#endif + +#if USE_WINDOWS + BYTE dPipeInBuf [ WIN32_PIPE_BUFSIZE ]; + DWORD nBytesRead = 0; + BOOL bSuccess = ReadFile ( g_hPipe, dPipeInBuf, WIN32_PIPE_BUFSIZE, &nBytesRead, NULL ); + if ( nBytesRead > 0 && bSuccess ) + { + for ( DWORD i=0; im_pNext ) + { + ListenerDesc_t tDesc = ParseListener ( v->cstr() ); + if ( tDesc.m_eProto!=PROTO_SPHINX ) + continue; + + int iSock = -1; +#if !USE_WINDOWS + if ( !tDesc.m_sUnix.IsEmpty() ) + { + // UNIX connection + struct sockaddr_un uaddr; + + size_t len = strlen ( tDesc.m_sUnix.cstr() ); + if ( len+1 > sizeof(uaddr.sun_path ) ) + sphFatal ( "UNIX socket path is too long (len=%d)", (int)len ); + + memset ( &uaddr, 0, sizeof(uaddr) ); + uaddr.sun_family = AF_UNIX; + memcpy ( uaddr.sun_path, tDesc.m_sUnix.cstr(), len+1 ); + + iSock = socket ( AF_UNIX, SOCK_STREAM, 0 ); + if ( iSock<0 ) + sphFatal ( "failed to create UNIX socket: %s", sphSockError() ); + + if ( connect ( iSock, (struct sockaddr*)&uaddr, sizeof(uaddr) )<0 ) + { + sphWarning ( "failed to connect to unix://%s: %s\n", tDesc.m_sUnix.cstr(), sphSockError() ); + continue; + } + + } else +#endif + { + // TCP connection + struct sockaddr_in sin; + memset ( &sin, 0, sizeof(sin) ); + sin.sin_family = AF_INET; + sin.sin_addr.s_addr = ( tDesc.m_uIP==htonl ( INADDR_ANY ) ) + ? htonl ( INADDR_LOOPBACK ) + : tDesc.m_uIP; + sin.sin_port = htons ( (short)tDesc.m_iPort ); + + iSock = socket ( AF_INET, SOCK_STREAM, 0 ); + if ( iSock<0 ) + sphFatal ( "failed to create TCP socket: %s", sphSockError() ); + + if ( connect ( iSock, (struct sockaddr*)&sin, sizeof(sin) )<0 ) + { + sphWarning ( "failed to connect to %s:%d: %s\n", sphFormatIP ( sBuf, sizeof(sBuf), tDesc.m_uIP ), tDesc.m_iPort, sphSockError() ); + continue; + } + } + + // send request + NetOutputBuffer_c tOut ( iSock ); + tOut.SendDword ( SPHINX_SEARCHD_PROTO ); + tOut.SendWord ( SEARCHD_COMMAND_STATUS ); + tOut.SendWord ( VER_COMMAND_STATUS ); + tOut.SendInt ( 4 ); // request body length + tOut.SendInt ( 1 ); // dummy body + tOut.Flush (); + + // get reply + NetInputBuffer_c tIn ( iSock ); + if ( !tIn.ReadFrom ( 12, 5 ) ) // magic_header_size=12, magic_timeout=5 + sphFatal ( "handshake failure (no response)" ); + + DWORD uVer = tIn.GetDword(); + if ( uVer!=SPHINX_SEARCHD_PROTO && uVer!=0x01000000UL ) // workaround for all the revisions that sent it in host order... + sphFatal ( "handshake failure (unexpected protocol version=%d)", uVer ); + + if ( tIn.GetWord()!=SEARCHD_OK ) + sphFatal ( "status command failed" ); + + if ( tIn.GetWord()!=VER_COMMAND_STATUS ) + sphFatal ( "status command version mismatch" ); + + if ( !tIn.ReadFrom ( tIn.GetDword(), 5 ) ) // magic_timeout=5 + sphFatal ( "failed to read status reply" ); + + fprintf ( stdout, "\nsearchd status\n--------------\n" ); + + int iRows = tIn.GetDword(); + int iCols = tIn.GetDword(); + for ( int i=0; iBuildMessage() ); + } + fflush ( stdout ); +} + + +Listener_t * DoAccept ( int * pClientSock, char * sClientName ) +{ + int iMaxFD = 0; + fd_set fdsAccept; + FD_ZERO ( &fdsAccept ); + + ARRAY_FOREACH ( i, g_dListeners ) + { + sphFDSet ( g_dListeners[i].m_iSock, &fdsAccept ); + iMaxFD = Max ( iMaxFD, g_dListeners[i].m_iSock ); + } + iMaxFD++; + + struct timeval tvTimeout; + tvTimeout.tv_sec = USE_WINDOWS ? 0 : 1; + tvTimeout.tv_usec = USE_WINDOWS ? 50000 : 0; + + int iRes = select ( iMaxFD, &fdsAccept, NULL, NULL, &tvTimeout ); + if ( iRes==0 ) + return NULL; + + if ( iRes<0 ) + { + int iErrno = sphSockGetErrno(); + if ( iErrno==EINTR || iErrno==EAGAIN || iErrno==EWOULDBLOCK ) + return NULL; + + static int iLastErrno = -1; + if ( iLastErrno!=iErrno ) + sphWarning ( "select() failed: %s", sphSockError(iErrno) ); + iLastErrno = iErrno; + return NULL; + } + + ARRAY_FOREACH ( i, g_dListeners ) + { + if ( !FD_ISSET ( g_dListeners[i].m_iSock, &fdsAccept ) ) + continue; + + // accept + struct sockaddr_storage saStorage; + socklen_t uLength = sizeof(saStorage); + int iClientSock = accept ( g_dListeners[i].m_iSock, (struct sockaddr *)&saStorage, &uLength ); + + // handle failures + if ( iClientSock<0 ) + { + const int iErrno = sphSockGetErrno(); + if ( iErrno==EINTR || iErrno==ECONNABORTED || iErrno==EAGAIN || iErrno==EWOULDBLOCK ) + return NULL; + + sphFatal ( "accept() failed: %s", sphSockError(iErrno) ); + } + + if ( g_pStats ) + { + g_tStatsMutex.Lock(); + g_pStats->m_iConnections++; + g_tStatsMutex.Unlock(); + } + + if ( g_eWorkers==MPM_PREFORK ) + { + // protected by accept mutex + if ( ++*g_pConnID<0 ) + *g_pConnID = 0; + g_iConnID = *g_pConnID; + } else + { + if ( ++g_iConnID<0 ) + g_iConnID = 0; + } + + // format client address + if ( sClientName ) + { + sClientName[0] = '\0'; + if ( saStorage.ss_family==AF_INET ) + { + struct sockaddr_in * pSa = ((struct sockaddr_in *)&saStorage); + sphFormatIP ( sClientName, SPH_ADDRESS_SIZE, pSa->sin_addr.s_addr ); + + char * d = sClientName; + while ( *d ) + d++; + snprintf ( d, 7, ":%d", (int)ntohs ( pSa->sin_port ) ); + } + if ( saStorage.ss_family==AF_UNIX ) + strncpy ( sClientName, "(local)", SPH_ADDRESS_SIZE ); + } + + // accepted! +#if !USE_WINDOWS + if ( SPH_FDSET_OVERFLOW ( iClientSock ) ) + iClientSock = dup2 ( iClientSock, g_iClientFD ); +#endif + + *pClientSock = iClientSock; + return &g_dListeners[i]; + } + + return NULL; +} + + +void TickPreforked ( CSphProcessSharedMutex * pAcceptMutex ) +{ + assert ( !g_bHeadDaemon ); + assert ( pAcceptMutex ); + + if ( g_bGotSigterm ) + exit ( 0 ); + + int iClientSock = -1; + char sClientIP[SPH_ADDRPORT_SIZE]; + Listener_t * pListener = NULL; + + for ( ; !g_bGotSigterm && !pListener; ) + { + if ( pAcceptMutex->TimedLock ( 100 ) ) + { + if ( !g_bGotSigterm ) + pListener = DoAccept ( &iClientSock, sClientIP ); + + pAcceptMutex->Unlock(); + } + } + + if ( g_bGotSigterm ) + exit ( 0 ); // clean shutdown (after mutex unlock) + + if ( pListener ) + { + HandleClient ( pListener->m_eProto, iClientSock, sClientIP, NULL ); + sphSockClose ( iClientSock ); + } +} + + +void FailClient ( int iSock, SearchdStatus_e eStatus, const char * sMessage ) +{ + assert ( eStatus==SEARCHD_RETRY || eStatus==SEARCHD_ERROR ); + + int iRespLen = 4 + strlen(sMessage); + + NetOutputBuffer_c tOut ( iSock ); + tOut.SendInt ( SPHINX_SEARCHD_PROTO ); + tOut.SendWord ( (WORD)eStatus ); + tOut.SendWord ( 0 ); // version doesn't matter + tOut.SendInt ( iRespLen ); + tOut.SendString ( sMessage ); + tOut.Flush (); + + // FIXME? without some wait, client fails to receive the response on windows + sphSockClose ( iSock ); +} + + +void HandlerThread ( void * pArg ) +{ + // setup query guard for threaded mode + SphCrashLogger_c tQueryTLS; + tQueryTLS.SetupTLS (); + + // handle that client + ThdDesc_t * pThd = (ThdDesc_t*) pArg; + sphThreadSet ( g_tConnKey, &pThd->m_iConnID ); + HandleClient ( pThd->m_eProto, pThd->m_iClientSock, pThd->m_sClientName.cstr(), pThd ); + sphSockClose ( pThd->m_iClientSock ); + + // done; remove myself from the table + g_tThdMutex.Lock (); + ARRAY_FOREACH ( i, g_dThd ) + if ( g_dThd[i]==pThd ) + { +#if USE_WINDOWS + // FIXME? this is sort of automatic on UNIX (pthread_exit() gets implicitly called on return) + CloseHandle ( pThd->m_tThd ); +#endif + SafeDelete ( pThd ); + g_dThd.RemoveFast(i); + break; + } + g_tThdMutex.Unlock (); + + // something went wrong while removing; report + if ( pThd ) + { + sphWarning ( "thread missing from thread table" ); +#if USE_WINDOWS + // FIXME? this is sort of automatic on UNIX (pthread_exit() gets implicitly called on return) + CloseHandle ( pThd->m_tThd ); +#endif + SafeDelete ( pThd ); + } +} + + +static void CheckChildrenTerm () +{ +#if !USE_WINDOWS + if ( g_eWorkers!=MPM_PREFORK || !g_dTermChildren.GetLength() || g_tmRotateChildren>sphMicroTimer() ) + return; + + sphLogDebugvv ( "killing child %d ( %d )", g_dTermChildren.Last(), g_dTermChildren.GetLength() ); + kill ( g_dTermChildren.Last(), SIGTERM ); + g_dTermChildren.Resize ( g_dTermChildren.GetLength()-1 ); + g_tmRotateChildren = sphMicroTimer() + g_iRotationThrottle*1000; +#endif +} + + +void TickHead ( CSphProcessSharedMutex * pAcceptMutex ) +{ + CheckSignals (); + if ( !g_bHeadDaemon ) + return; + + CheckLeaks (); + CheckReopen (); + CheckPipes (); + CheckDelete (); + CheckRotate (); + CheckFlush (); + CheckChildrenTerm(); + + sphInfo ( NULL ); // flush dupes + + if ( pAcceptMutex ) + { + // FIXME! what if all children are busy; we might want to accept here and temp fork more + sphSleepMsec ( 1000 ); + return; + } + + int iClientSock; + char sClientName[SPH_ADDRPORT_SIZE]; + Listener_t * pListener = DoAccept ( &iClientSock, sClientName ); + if ( !pListener ) + return; + + if ( ( g_iMaxChildren && g_dChildren.GetLength()>=g_iMaxChildren ) + || ( g_iRotateCount && !g_bSeamlessRotate ) ) + { + FailClient ( iClientSock, SEARCHD_RETRY, "server maxed out, retry in a second" ); + sphWarning ( "maxed out, dismissing client" ); + + if ( g_pStats ) + g_pStats->m_iMaxedOut++; + return; + } + + // handle the client + if ( g_eWorkers==MPM_NONE ) + { + HandleClient ( pListener->m_eProto, iClientSock, sClientName, NULL ); + sphSockClose ( iClientSock ); + return; + } + +#if !USE_WINDOWS + if ( g_eWorkers==MPM_FORK ) + { + sphLogDebugv ( "conn %s: accepted, socket %d", sClientName, iClientSock ); + int iChildPipe = PipeAndFork ( false, -1 ); + SafeClose ( iChildPipe ); + if ( !g_bHeadDaemon ) + { + // child process, handle client + sphLogDebugv ( "conn %s: forked handler, socket %d", sClientName, iClientSock ); + HandleClient ( pListener->m_eProto, iClientSock, sClientName, NULL ); + sphSockClose ( iClientSock ); + exit ( 0 ); + } else + { + // parent process, continue accept()ing + sphSockClose ( iClientSock ); + } + } +#endif // !USE_WINDOWS + + if ( g_eWorkers==MPM_THREADS ) + { + ThdDesc_t * pThd = new ThdDesc_t (); + pThd->m_eProto = pListener->m_eProto; + pThd->m_iClientSock = iClientSock; + pThd->m_sClientName = sClientName; + pThd->m_iConnID = g_iConnID; + + g_tThdMutex.Lock (); + g_dThd.Add ( pThd ); + if ( !sphThreadCreate ( &pThd->m_tThd, HandlerThread, pThd, true ) ) + { + g_dThd.Pop(); + SafeDelete ( pThd ); + + FailClient ( iClientSock, SEARCHD_RETRY, "failed to create worker thread" ); + sphWarning ( "failed to create worker thread, threads(%d), error[%d] %s", g_dThd.GetLength(), errno, strerror(errno) ); + } + g_tThdMutex.Unlock (); + return; + } + + // default (should not happen) + sphSockClose ( iClientSock ); +} + + +template +T * InitSharedBuffer ( CSphSharedBuffer & tBuffer, int iLen ) +{ + CSphString sError, sWarning; + if ( !tBuffer.Alloc ( iLen, sError, sWarning ) ) + sphDie ( "failed to allocate shared buffer (msg=%s)", sError.cstr() ); + + T * pRes = tBuffer.GetWritePtr(); + memset ( pRes, 0, iLen*sizeof(T) ); // reset + return pRes; +} + +void ConfigureSearchd ( const CSphConfig & hConf, bool bOptPIDFile ) +{ + if ( !hConf.Exists ( "searchd" ) || !hConf["searchd"].Exists ( "searchd" ) ) + sphFatal ( "'searchd' config section not found in '%s'", g_sConfigFile.cstr () ); + + const CSphConfigSection & hSearchd = hConf["searchd"]["searchd"]; + + if ( !hConf.Exists ( "index" ) ) + sphFatal ( "no indexes found in '%s'", g_sConfigFile.cstr () ); + + if ( bOptPIDFile ) + if ( !hSearchd ( "pid_file" ) ) + sphFatal ( "mandatory option 'pid_file' not found in 'searchd' section" ); + + if ( hSearchd.Exists ( "read_timeout" ) && hSearchd["read_timeout"].intval()>=0 ) + g_iReadTimeout = hSearchd["read_timeout"].intval(); + + if ( hSearchd.Exists ( "client_timeout" ) && hSearchd["client_timeout"].intval()>=0 ) + g_iClientTimeout = hSearchd["client_timeout"].intval(); + + if ( hSearchd.Exists ( "max_children" ) && hSearchd["max_children"].intval()>=0 ) + g_iMaxChildren = hSearchd["max_children"].intval(); + + g_bPreopenIndexes = hSearchd.GetInt ( "preopen_indexes", (int)g_bPreopenIndexes )!=0; + g_bOnDiskDicts = hSearchd.GetInt ( "ondisk_dict_default", (int)g_bOnDiskDicts )!=0; + g_bUnlinkOld = hSearchd.GetInt ( "unlink_old", (int)g_bUnlinkOld )!=0; + g_iExpansionLimit = hSearchd.GetInt ( "expansion_limit", 0 ); + g_bCompatResults = hSearchd.GetInt ( "compat_sphinxql_magics", (int)g_bCompatResults )!=0; + + if ( g_bCompatResults ) + sphWarning ( "compat_sphinxql_magics=1 is deprecated; please update your application and config" ); + + if ( hSearchd("max_matches") ) + { + int iMax = hSearchd["max_matches"].intval(); + if ( iMax<0 || iMax>10000000 ) + { + sphWarning ( "max_matches=%d out of bounds; using default 1000", iMax ); + } else + { + g_iMaxMatches = iMax; + } + } + + if ( hSearchd("subtree_docs_cache") ) + g_iMaxCachedDocs = hSearchd.GetSize ( "subtree_docs_cache", g_iMaxCachedDocs ); + + if ( hSearchd("subtree_hits_cache") ) + g_iMaxCachedHits = hSearchd.GetSize ( "subtree_hits_cache", g_iMaxCachedHits ); + + if ( hSearchd("seamless_rotate") ) + g_bSeamlessRotate = ( hSearchd["seamless_rotate"].intval()!=0 ); + + if ( !g_bSeamlessRotate && g_bPreopenIndexes ) + sphWarning ( "preopen_indexes=1 has no effect with seamless_rotate=0" ); + + g_iAttrFlushPeriod = hSearchd.GetInt ( "attr_flush_period", g_iAttrFlushPeriod ); + g_iMaxPacketSize = hSearchd.GetSize ( "max_packet_size", g_iMaxPacketSize ); + g_iMaxFilters = hSearchd.GetInt ( "max_filters", g_iMaxFilters ); + g_iMaxFilterValues = hSearchd.GetInt ( "max_filter_values", g_iMaxFilterValues ); + g_iMaxBatchQueries = hSearchd.GetInt ( "max_batch_queries", g_iMaxBatchQueries ); + g_iDistThreads = hSearchd.GetInt ( "dist_threads", g_iDistThreads ); + g_iPreforkChildren = hSearchd.GetInt ( "prefork", g_iPreforkChildren ); + + if ( hSearchd ( "collation_libc_locale" ) ) + { + const char * sLocale = hSearchd.GetStr ( "collation_libc_locale" ); + if ( !setlocale ( LC_COLLATE, sLocale ) ) + sphWarning ( "setlocale failed (locale='%s')", sLocale ); + } + + if ( hSearchd ( "collation_server" ) ) + { + CSphString sCollation = hSearchd.GetStr ( "collation_server" ); + CSphString sError; + g_eCollation = sphCollationFromName ( sCollation, &sError ); + if ( !sError.IsEmpty() ) + sphWarning ( "%s", sError.cstr() ); + } + + if ( hSearchd("thread_stack") ) + { + int iThreadStackSizeMin = 65536; + int iThreadStackSizeMax = 2*1024*1024; + int iStackSize = hSearchd.GetSize ( "thread_stack", iThreadStackSizeMin ); + if ( iStackSizeiThreadStackSizeMax ) + sphWarning ( "thread_stack is %d will be clamped to range ( 65k to 2M )", iStackSize ); + + iStackSize = Min ( iStackSize, iThreadStackSizeMax ); + iStackSize = Max ( iStackSize, iThreadStackSizeMin ); + sphSetMyStackSize ( iStackSize ); + } + + char sHandshake1[] = + "\x00\x00\x00" // packet length + "\x00" // packet id + "\x0A"; // protocol version; v.10 + + char sHandshake2[] = + "\x01\x00\x00\x00" // thread id + "\x01\x02\x03\x04\x05\x06\x07\x08" // scramble buffer (for auth) + "\x00" // filler + "\x08\x82" // server capabilities; CLIENT_PROTOCOL_41 | CLIENT_CONNECT_WITH_DB | SECURE_CONNECTION + "\x00" // server language + "\x02\x00" // server status + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" // filler + "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d"; // scramble buffer2 (for auth, 4.1+) + + const char * sVersion = hSearchd.GetStr ( "mysql_version_string", SPHINX_VERSION ); + int iLen = strlen ( sVersion ); + + g_iMysqlHandshake = sizeof(sHandshake1) + strlen(sVersion) + sizeof(sHandshake2) - 1; + if ( g_iMysqlHandshake>=(int)sizeof(g_sMysqlHandshake) ) + { + sphWarning ( "mysql_version_string too long; using default (version=%s)", SPHINX_VERSION ); + g_iMysqlHandshake = sizeof(sHandshake1) + strlen(SPHINX_VERSION) + sizeof(sHandshake2) - 1; + assert ( g_iMysqlHandshake < (int)sizeof(g_sMysqlHandshake) ); + } + + char * p = g_sMysqlHandshake; + memcpy ( p, sHandshake1, sizeof(sHandshake1)-1 ); + memcpy ( p+sizeof(sHandshake1)-1, sVersion, iLen+1 ); + memcpy ( p+sizeof(sHandshake1)+iLen, sHandshake2, sizeof(sHandshake2)-1 ); + g_sMysqlHandshake[0] = (char)(g_iMysqlHandshake-4); // safe, as long as buffer size is 128 +} + +void ConfigureAndPreload ( const CSphConfig & hConf, const char * sOptIndex ) +{ + int iCounter = 1; + int iValidIndexes = 0; + int64_t tmLoad = -sphMicroTimer(); + + hConf["index"].IterateStart (); + while ( hConf["index"].IterateNext() ) + { + const CSphConfigSection & hIndex = hConf["index"].IterateGet(); + const char * sIndexName = hConf["index"].IterateGetKey().cstr(); + + if ( g_bOptNoDetach && sOptIndex && strcasecmp ( sIndexName, sOptIndex )!=0 ) + continue; + + ESphAddIndex eAdd = AddIndex ( sIndexName, hIndex ); + if ( eAdd==ADD_LOCAL || eAdd==ADD_RT ) + { + ServedIndex_t & tIndex = g_pIndexes->GetUnlockedEntry ( sIndexName ); + iCounter++; + + fprintf ( stdout, "precaching index '%s'\n", sIndexName ); + fflush ( stdout ); + tIndex.m_pIndex->SetProgressCallback ( ShowProgress ); + + if ( HasFiles ( tIndex, g_dNewExts ) ) + { + tIndex.m_bOnlyNew = !HasFiles ( tIndex, g_dCurExts ); + if ( RotateIndexGreedy ( tIndex, sIndexName ) ) + { + CSphString sError; + if ( !sphFixupIndexSettings ( tIndex.m_pIndex, hIndex, sError ) ) + { + sphWarning ( "index '%s': %s - NOT SERVING", sIndexName, sError.cstr() ); + tIndex.m_bEnabled = false; + } + } else + { + if ( PrereadNewIndex ( tIndex, hIndex, sIndexName ) ) + tIndex.m_bEnabled = true; + } + } else + { + tIndex.m_bOnlyNew = false; + if ( PrereadNewIndex ( tIndex, hIndex, sIndexName ) ) + tIndex.m_bEnabled = true; + } + + CSphString sError; + if ( tIndex.m_bEnabled && !CheckIndex ( tIndex.m_pIndex, sError ) ) + { + sphWarning ( "index '%s': %s - NOT SERVING", sIndexName, sError.cstr() ); + tIndex.m_bEnabled = false; + } + + if ( !tIndex.m_bEnabled ) + continue; + } + + if ( eAdd!=ADD_ERROR ) + iValidIndexes++; + } + + tmLoad += sphMicroTimer(); + if ( !iValidIndexes ) + sphFatal ( "no valid indexes to serve" ); + else + fprintf ( stdout, "precached %d indexes in %0.3f sec\n", iCounter-1, float(tmLoad)/1000000 ); +} + +void OpenDaemonLog ( const CSphConfigSection & hSearchd ) +{ + // create log + const char * sLog = "searchd.log"; + if ( hSearchd.Exists ( "log" ) ) + { + if ( hSearchd["log"]=="syslog" ) + { +#if !USE_SYSLOG + if ( g_iLogFile<0 ) + { + g_iLogFile = STDOUT_FILENO; + sphWarning ( "failed to use syslog for logging. You have to reconfigure --with-syslog and rebuild the daemon!" ); + sphInfo ( "will use default file 'searchd.log' for logging." ); + } +#else + g_bLogSyslog = true; +#endif + } else + { + sLog = hSearchd["log"].cstr(); + } + } + + umask ( 066 ); + if ( !g_bLogSyslog ) + { + g_iLogFile = open ( sLog, O_CREAT | O_RDWR | O_APPEND, S_IREAD | S_IWRITE ); + if ( g_iLogFile<0 ) + { + g_iLogFile = STDOUT_FILENO; + sphFatal ( "failed to open log file '%s': %s", sLog, strerror(errno) ); + } + } + + g_sLogFile = sLog; + g_bLogTty = isatty ( g_iLogFile )!=0; +} + +int WINAPI ServiceMain ( int argc, char **argv ) +{ + g_bLogTty = isatty ( g_iLogFile )!=0; + +#if USE_WINDOWS + CSphVector dArgs; + if ( g_bService ) + { + g_ssHandle = RegisterServiceCtrlHandler ( g_sServiceName, ServiceControl ); + if ( !g_ssHandle ) + sphFatal ( "failed to start service: RegisterServiceCtrlHandler() failed: %s", WinErrorInfo() ); + + g_ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + MySetServiceStatus ( SERVICE_START_PENDING, NO_ERROR, 4000 ); + + if ( argc<=1 ) + { + dArgs.Resize ( g_dArgs.GetLength() ); + ARRAY_FOREACH ( i, g_dArgs ) + dArgs[i] = (char*) g_dArgs[i].cstr(); + + argc = g_dArgs.GetLength(); + argv = &dArgs[0]; + } + } + + char szPipeName[64]; + snprintf ( szPipeName, sizeof(szPipeName), "\\\\.\\pipe\\searchd_%d", getpid() ); + g_hPipe = CreateNamedPipe ( szPipeName, PIPE_ACCESS_INBOUND, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_NOWAIT, PIPE_UNLIMITED_INSTANCES, 0, WIN32_PIPE_BUFSIZE, NMPWAIT_NOWAIT, NULL ); + ConnectNamedPipe ( g_hPipe, NULL ); +#endif + + if ( !g_bService ) + fprintf ( stdout, SPHINX_BANNER ); + + ////////////////////// + // parse command line + ////////////////////// + + CSphConfig conf; + bool bOptStop = false; + bool bOptStopWait = false; + bool bOptStatus = false; + bool bOptPIDFile = false; + const char * sOptIndex = NULL; + + int iOptPort = 0; + bool bOptPort = false; + + CSphString sOptListen; + bool bOptListen = false; + bool bTestMode = false; + + #define OPT(_a1,_a2) else if ( !strcmp(argv[i],_a1) || !strcmp(argv[i],_a2) ) + #define OPT1(_a1) else if ( !strcmp(argv[i],_a1) ) + + int i; + for ( i=1; i=argc ) break; + OPT ( "-c", "--config" ) g_sConfigFile = argv[++i]; + OPT ( "-p", "--port" ) { bOptPort = true; iOptPort = atoi ( argv[++i] ); } + OPT ( "-l", "--listen" ) { bOptListen = true; sOptListen = argv[++i]; } + OPT ( "-i", "--index" ) sOptIndex = argv[++i]; +#if USE_WINDOWS + OPT1 ( "--servicename" ) ++i; // it's valid but handled elsewhere +#endif + + // handle unknown options + else + break; + } + if ( i!=argc ) + sphFatal ( "malformed or unknown option near '%s'; use '-h' or '--help' to see available options.", argv[i] ); + +#if USE_WINDOWS + // init WSA on Windows + // we need to do it this early because otherwise gethostbyname() from config parser could fail + WSADATA tWSAData; + int iStartupErr = WSAStartup ( WINSOCK_VERSION, &tWSAData ); + if ( iStartupErr ) + sphFatal ( "failed to initialize WinSock2: %s", sphSockError ( iStartupErr ) ); + +#ifndef NDEBUG + // i want my windows debugging sessions to log onto stdout + g_bOptNoDetach = true; +#endif +#endif + + if ( !bOptPIDFile ) + bOptPIDFile = !g_bOptNoLock; + + // check port and listen arguments early + if ( !g_bOptNoDetach && ( bOptPort || bOptListen ) ) + { + sphWarning ( "--listen and --port are only allowed in --console debug mode; switch ignored" ); + bOptPort = bOptListen = false; + } + + if ( bOptPort ) + { + if ( bOptListen ) + sphFatal ( "please specify either --port or --listen, not both" ); + + CheckPort ( iOptPort ); + } + + ///////////////////// + // parse config file + ///////////////////// + + // fallback to defaults if there was no explicit config specified + while ( !g_sConfigFile.cstr() ) + { +#ifdef SYSCONFDIR + g_sConfigFile = SYSCONFDIR "/csft.conf"; + if ( sphIsReadable ( g_sConfigFile.cstr () ) ) + break; +#endif + + g_sConfigFile = "./csft.conf"; + if ( sphIsReadable ( g_sConfigFile.cstr () ) ) + break; + + g_sConfigFile = NULL; + break; + } + + if ( !g_sConfigFile.cstr () ) + sphFatal ( "no readable config file (looked in " +#ifdef SYSCONFDIR + SYSCONFDIR "/csft.conf, " +#endif + "./csft.conf)." ); + + sphInfo ( "using config file '%s'...", g_sConfigFile.cstr () ); + + CheckConfigChanges (); + + // do parse + CSphConfigParser cp; + if ( !cp.Parse ( g_sConfigFile.cstr () ) ) + sphFatal ( "failed to parse config file '%s'", g_sConfigFile.cstr () ); + + const CSphConfig & hConf = cp.m_tConf; + + if ( !hConf.Exists ( "searchd" ) || !hConf["searchd"].Exists ( "searchd" ) ) + sphFatal ( "'searchd' config section not found in '%s'", g_sConfigFile.cstr () ); + + const CSphConfigSection & hSearchdpre = hConf["searchd"]["searchd"]; + + ///////////////////// + // init python layer + //////////////////// + if ( hConf("python") && hConf["python"]("python") ) + { + CSphConfigSection & hPython = hConf["python"]["python"]; +#if USE_PYTHON + if(!cftInitialize(hPython)) + sphDie ( "Python layer's initiation failed."); +#else + sphDie ( "Python layer defined, but search does Not supports python. used --with-python to recompile."); +#endif + } + + //////////////////////// + // stop running searchd + //////////////////////// + + if ( bOptStop ) + { + if ( !hSearchdpre("pid_file") ) + sphFatal ( "stop: option 'pid_file' not found in '%s' section 'searchd'", g_sConfigFile.cstr () ); + + const char * sPid = hSearchdpre["pid_file"].cstr(); // shortcut + FILE * fp = fopen ( sPid, "r" ); + if ( !fp ) + sphFatal ( "stop: pid file '%s' does not exist or is not readable", sPid ); + + char sBuf[16]; + int iLen = (int) fread ( sBuf, 1, sizeof(sBuf)-1, fp ); + sBuf[iLen] = '\0'; + fclose ( fp ); + + int iPid = atoi(sBuf); + if ( iPid<=0 ) + sphFatal ( "stop: failed to read valid pid from '%s'", sPid ); + +#if USE_WINDOWS + bool bTerminatedOk = false; + + char szPipeName[64]; + snprintf ( szPipeName, sizeof(szPipeName), "\\\\.\\pipe\\searchd_%d", iPid ); + + HANDLE hPipe = INVALID_HANDLE_VALUE; + + while ( hPipe==INVALID_HANDLE_VALUE ) + { + hPipe = CreateFile ( szPipeName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL ); + + if ( hPipe==INVALID_HANDLE_VALUE ) + { + if ( GetLastError()!=ERROR_PIPE_BUSY ) + { + fprintf ( stdout, "WARNING: could not open pipe (GetLastError()=%d)\n", GetLastError () ); + break; + } + + if ( !WaitNamedPipe ( szPipeName, 1000 ) ) + { + fprintf ( stdout, "WARNING: could not open pipe (GetLastError()=%d)\n", GetLastError () ); + break; + } + } + } + + if ( hPipe!=INVALID_HANDLE_VALUE ) + { + DWORD uWritten = 0; + BYTE uWrite = 1; + BOOL bResult = WriteFile ( hPipe, &uWrite, 1, &uWritten, NULL ); + if ( !bResult ) + fprintf ( stdout, "WARNING: failed to send SIGHTERM to searchd (pid=%d, GetLastError()=%d)\n", iPid, GetLastError () ); + + bTerminatedOk = !!bResult; + + CloseHandle ( hPipe ); + } + + if ( bTerminatedOk ) + { + sphInfo ( "stop: succesfully terminated pid %d", iPid ); + exit ( 0 ); + } else + sphFatal ( "stop: error terminating pid %d", iPid ); +#else + CSphString sPipeName; + int iPipeCreated = -1; + int hPipe = -1; + if ( bOptStopWait ) + { + sPipeName = GetNamedPipeName ( iPid ); + iPipeCreated = mkfifo ( sPipeName.cstr(), 0666 ); + if ( iPipeCreated!=-1 ) + hPipe = ::open ( sPipeName.cstr(), O_RDONLY | O_NONBLOCK ); + + if ( iPipeCreated==-1 ) + sphWarning ( "mkfifo failed (path=%s, err=%d, msg=%s); will NOT wait", sPipeName.cstr(), errno, strerror(errno) ); + else if ( hPipe==-1 ) + sphWarning ( "open failed (path=%s, err=%d, msg=%s); will NOT wait", sPipeName.cstr(), errno, strerror(errno) ); + } + + if ( kill ( iPid, SIGTERM ) ) + sphFatal ( "stop: kill() on pid %d failed: %s", iPid, strerror(errno) ); + else + sphInfo ( "stop: successfully sent SIGTERM to pid %d", iPid ); + + int iExitCode = ( bOptStopWait && ( iPipeCreated==-1 || hPipe==-1 ) ) ? 1 : 0; + if ( bOptStopWait && hPipe!=-1 ) + { + while ( sphIsReadable ( sPid, NULL ) ) + sphSleepMsec ( 5 ); + + DWORD uStatus = 0; + if ( ::read ( hPipe, &uStatus, sizeof(DWORD) )!=sizeof(DWORD) ) + iExitCode = 3; // stopped demon crashed during stop + else + iExitCode = uStatus==1 ? 0 : 2; // uStatus == 1 - AttributeSave - ok, other values - error + } + if ( hPipe!=-1 ) + ::close ( hPipe ); + if ( iPipeCreated!=-1 ) + ::unlink ( sPipeName.cstr() ); + + exit ( iExitCode ); +#endif + } + + //////////////////////////////// + // query running searchd status + //////////////////////////////// + + if ( bOptStatus ) + { + QueryStatus ( hSearchdpre("listen") ); + exit ( 0 ); + } + + ///////////////////// + // configure searchd + ///////////////////// + + ConfigureSearchd ( hConf, bOptPIDFile ); + g_bWatchdog = hSearchdpre.GetInt ( "watchdog", g_bWatchdog )!=0; + + if ( hSearchdpre("workers") ) + { + if ( hSearchdpre["workers"]=="none" ) + g_eWorkers = MPM_NONE; + else if ( hSearchdpre["workers"]=="fork" ) + g_eWorkers = MPM_FORK; + else if ( hSearchdpre["workers"]=="prefork" ) + g_eWorkers = MPM_PREFORK; + else if ( hSearchdpre["workers"]=="threads" ) + g_eWorkers = MPM_THREADS; + else + sphFatal ( "unknown workers=%s value", hSearchdpre["workers"].cstr() ); + } +#if USE_WINDOWS + if ( g_eWorkers==MPM_FORK || g_eWorkers==MPM_PREFORK ) + sphFatal ( "workers=fork and workers=prefork are not supported on Windows" ); +#endif + + if ( g_iMaxPacketSize<128*1024 || g_iMaxPacketSize>128*1024*1024 ) + sphFatal ( "max_packet_size out of bounds (128K..128M)" ); + + if ( g_iMaxFilters<1 || g_iMaxFilters>10240 ) + sphFatal ( "max_filters out of bounds (1..10240)" ); + + if ( g_iMaxFilterValues<1 || g_iMaxFilterValues>10485760 ) + sphFatal ( "max_filter_values out of bounds (1..10485760)" ); + + bool bVisualLoad = true; + bool bWatched = false; +#if !USE_WINDOWS + // Let us start watchdog right now, on foreground first. + int iDevNull = open ( "/dev/null", O_RDWR ); + if ( g_bWatchdog && g_eWorkers==MPM_THREADS && !g_bOptNoDetach ) + { + bWatched = true; + if ( !g_bOptNoLock ) + OpenDaemonLog ( hConf["searchd"]["searchd"] ); + bVisualLoad = SetWatchDog ( iDevNull ); + } +#endif + + // create the pid + if ( bOptPIDFile ) + { + g_sPidFile = hSearchdpre["pid_file"].cstr(); + + g_iPidFD = ::open ( g_sPidFile, O_CREAT | O_WRONLY, S_IREAD | S_IWRITE ); + if ( g_iPidFD<0 ) + sphFatal ( "failed to create pid file '%s': %s", g_sPidFile, strerror(errno) ); + } + if ( bOptPIDFile && !sphLockEx ( g_iPidFD, false ) ) + sphFatal ( "failed to lock pid file '%s': %s (searchd already running?)", g_sPidFile, strerror(errno) ); + + if ( bWatched && !bVisualLoad && CheckConfigChanges() ) + { + // reparse the config file + sphInfo ( "Reloading the config" ); + if ( !cp.ReParse ( g_sConfigFile.cstr () ) ) + sphFatal ( "failed to parse config file '%s'", g_sConfigFile.cstr () ); + + sphInfo ( "Reconfigure the daemon" ); + ConfigureSearchd ( hConf, bOptPIDFile ); + // reinit the arena + const CSphConfigSection & hSearchd = hConf["searchd"]["searchd"]; + + sphInfo ( "Reload the indexes" ); + sphArenaInit ( hSearchd.GetSize ( "mva_updates_pool", MVA_UPDATES_POOL ) ); + + // reload all the indexes + ConfigureAndPreload ( hConf, sOptIndex ); + } + + // hSearchdpre might be dead if we reloaded the config. + const CSphConfigSection & hSearchd = hConf["searchd"]["searchd"]; + + ////////////////////////////////////////////////// + // shared stuff (perf counters, flushing) startup + ////////////////////////////////////////////////// + + g_pStats = InitSharedBuffer ( g_tStatsBuffer, 1 ); + g_pFlush = InitSharedBuffer ( g_tFlushBuffer, 1 ); + g_pStats->m_uStarted = (DWORD)time(NULL); + + if ( g_eWorkers==MPM_PREFORK ) + g_pConnID = (int*) InitSharedBuffer ( g_dConnID, sizeof(g_iConnID) ); + + if ( g_eWorkers==MPM_THREADS ) + { + if ( !sphThreadKeyCreate ( &g_tConnKey ) ) + sphFatal ( "failed to create TLS for connection ID" ); + + // for simplicity, UDFs are going to be available in threaded mode only for now + sphUDFInit ( hSearchd.GetStr ( "plugin_dir" ) ); + } + + //////////////////// + // network startup + //////////////////// + + Listener_t tListener; + tListener.m_eProto = PROTO_SPHINX; + + // command line arguments override config (but only in --console) + if ( bOptListen ) + { + AddListener ( sOptListen ); + + } else if ( bOptPort ) + { + tListener.m_iSock = sphCreateInetSocket ( htonl ( INADDR_ANY ), iOptPort ); + g_dListeners.Add ( tListener ); + + } else + { + // listen directives in configuration file + for ( CSphVariant * v = hSearchd("listen"); v; v = v->m_pNext ) + AddListener ( *v ); + + // handle deprecated directives + if ( hSearchd("port") ) + { + DWORD uAddr = hSearchd.Exists("address") ? + sphGetAddress ( hSearchd["address"].cstr(), GETADDR_STRICT ) : htonl ( INADDR_ANY ); + + int iPort = hSearchd["port"].intval(); + CheckPort(iPort); + + tListener.m_iSock = sphCreateInetSocket ( uAddr, iPort ); + g_dListeners.Add ( tListener ); + } + + // still nothing? default is to listen on our two ports + if ( !g_dListeners.GetLength() ) + { + tListener.m_iSock = sphCreateInetSocket ( htonl ( INADDR_ANY ), SPHINXAPI_PORT ); + tListener.m_eProto = PROTO_SPHINX; + g_dListeners.Add ( tListener ); + + tListener.m_iSock = sphCreateInetSocket ( htonl ( INADDR_ANY ), SPHINXQL_PORT ); + tListener.m_eProto = PROTO_MYSQL41; + g_dListeners.Add ( tListener ); + } + } + +#if !USE_WINDOWS + // reserve an fd for clients + + g_iClientFD = dup ( iDevNull ); +#endif + + g_pIndexes = new IndexHash_c(); + + ////////////////////// + // build indexes hash + ////////////////////// + + // setup mva updates arena here, since we could have saved persistent mva updates + sphArenaInit ( hSearchd.GetSize ( "mva_updates_pool", MVA_UPDATES_POOL ) ); + + // configure and preload + + ConfigureAndPreload ( hConf, sOptIndex ); + + /////////// + // startup + /////////// + + if ( g_eWorkers==MPM_THREADS ) + sphRTInit(); + + // handle my signals + SetSignalHandlers (); + + // create logs + if ( !g_bOptNoLock ) + { + // create log + const char * sLog = "searchd.log"; + if ( hSearchd.Exists ( "log" ) ) + { + if ( hSearchd["log"]=="syslog" ) + { +#if !USE_SYSLOG + if ( g_iLogFile<0 ) + { + g_iLogFile = STDOUT_FILENO; + sphWarning ( "failed to use syslog for logging. You have to reconfigure --with-syslog and rebuild the daemon!" ); + sphInfo ( "will use default file 'searchd.log' for logging." ); + } +#else + g_bLogSyslog = true; +#endif + } else + { + sLog = hSearchd["log"].cstr(); + } + } + + umask ( 066 ); + if ( g_iLogFile!=STDOUT_FILENO ) + { + close ( g_iLogFile ); + g_iLogFile = STDOUT_FILENO; + } + if ( !g_bLogSyslog ) + { + g_iLogFile = open ( sLog, O_CREAT | O_RDWR | O_APPEND, S_IREAD | S_IWRITE ); + if ( g_iLogFile<0 ) + { + g_iLogFile = STDOUT_FILENO; + sphFatal ( "failed to open log file '%s': %s", sLog, strerror(errno) ); + } + } + + g_sLogFile = sLog; + g_bLogTty = isatty ( g_iLogFile )!=0; + + // create query log if required + if ( hSearchd.Exists ( "query_log" ) ) + { + if ( hSearchd["query_log"]=="syslog" ) + g_bQuerySyslog = true; + else + { + g_iQueryLogFile = open ( hSearchd["query_log"].cstr(), O_CREAT | O_RDWR | O_APPEND, S_IREAD | S_IWRITE ); + if ( g_iQueryLogFile<0 ) + sphFatal ( "failed to open query log file '%s': %s", hSearchd["query_log"].cstr(), strerror(errno) ); + } + g_sQueryLogFile = hSearchd["query_log"].cstr(); + } + } + + if ( !strcmp ( hSearchd.GetStr ( "query_log_format", "plain" ), "sphinxql" ) ) + g_eLogFormat = LOG_FORMAT_SPHINXQL; + + // almost ready, time to start listening + int iBacklog = hSearchd.GetInt ( "listen_backlog", SEARCHD_BACKLOG ); + ARRAY_FOREACH ( i, g_dListeners ) + if ( listen ( g_dListeners[i].m_iSock, iBacklog )==-1 ) + sphFatal ( "listen() failed: %s", sphSockError() ); + + // prepare to detach + if ( !g_bOptNoDetach ) + { +#if !USE_WINDOWS + if ( !bWatched || bVisualLoad ) + { + close ( STDIN_FILENO ); + close ( STDOUT_FILENO ); + close ( STDERR_FILENO ); + dup2 ( iDevNull, STDIN_FILENO ); + dup2 ( iDevNull, STDOUT_FILENO ); + dup2 ( iDevNull, STDERR_FILENO ); + } +#endif + ReleaseTTYFlag(); + + // explicitly unlock everything in parent immediately before fork + // + // there's a race in case another instance is started before + // child re-acquires all locks; but let's hope that's rare + if ( !bWatched ) + { + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + { + ServedIndex_t & tServed = it.Get(); + if ( tServed.m_bEnabled ) + tServed.m_pIndex->Unlock(); + } + } + } + + if ( bOptPIDFile && !bWatched ) + sphLockUn ( g_iPidFD ); + +#if !USE_WINDOWS + if ( !g_bOptNoDetach && !bWatched ) + { + switch ( fork() ) + { + case -1: + // error + Shutdown (); + sphFatal ( "fork() failed (reason: %s)", strerror ( errno ) ); + exit ( 1 ); + + case 0: + // daemonized child + break; + + default: + // tty-controlled parent + sphSetProcessInfo ( false ); + exit ( 0 ); + } + } +#endif + + if ( g_eWorkers==MPM_THREADS ) + sphRTConfigure ( hSearchd, bTestMode ); + + if ( bOptPIDFile ) + { +#if !USE_WINDOWS + // re-lock pid + // FIXME! there's a potential race here + if ( !sphLockEx ( g_iPidFD, true ) ) + sphFatal ( "failed to re-lock pid file '%s': %s", g_sPidFile, strerror(errno) ); +#endif + + char sPid[16]; + snprintf ( sPid, sizeof(sPid), "%d\n", (int)getpid() ); + int iPidLen = strlen(sPid); + + lseek ( g_iPidFD, 0, SEEK_SET ); + if ( !sphWrite ( g_iPidFD, sPid, iPidLen ) ) + sphFatal ( "failed to write to pid file '%s' (errno=%d, msg=%s)", g_sPidFile, + errno, strerror(errno) ); + + if ( ::ftruncate ( g_iPidFD, iPidLen ) ) + sphFatal ( "failed to truncate pid file '%s' (errno=%d, msg=%s)", g_sPidFile, + errno, strerror(errno) ); + } + +#if USE_WINDOWS + SetConsoleCtrlHandler ( CtrlHandler, TRUE ); +#endif + + if ( !g_bOptNoDetach && !bWatched ) + { + // re-lock indexes + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + { + ServedIndex_t & tServed = it.Get(); + if ( !tServed.m_bEnabled ) + continue; + + // obtain exclusive lock + if ( !tServed.m_pIndex->Lock() ) + { + sphWarning ( "index '%s': lock: %s; INDEX UNUSABLE", it.GetKey().cstr(), + tServed.m_pIndex->GetLastError().cstr() ); + tServed.m_bEnabled = false; + continue; + } + + // try to mlock again because mlock does not survive over fork + if ( !tServed.m_pIndex->Mlock() ) + { + sphWarning ( "index '%s': %s", it.GetKey().cstr(), + tServed.m_pIndex->GetLastError().cstr() ); + } + } + } + + // if we're running in console mode, dump queries to tty as well + if ( g_bOptNoLock && hSearchd ( "query_log" ) ) + { + g_bQuerySyslog = false; + g_bLogSyslog = false; + g_iQueryLogFile = g_iLogFile; + } + +#if USE_SYSLOG + if ( g_bLogSyslog || g_bQuerySyslog ) + { + openlog ( "searchd", LOG_PID, LOG_DAEMON ); + } +#else + if ( g_bQuerySyslog ) + sphFatal ( "Wrong query_log file! You have to reconfigure --with-syslog and rebuild daemon if you want to use syslog there." ); +#endif + ///////////////// + // serve clients + ///////////////// + + g_bHeadDaemon = true; + +#if USE_WINDOWS + if ( g_bService ) + MySetServiceStatus ( SERVICE_RUNNING, NO_ERROR, 0 ); +#endif + + sphSetReadBuffers ( hSearchd.GetSize ( "read_buffer", 0 ), hSearchd.GetSize ( "read_unhinted", 0 ) ); + + CSphProcessSharedMutex * pAcceptMutex = NULL; +#if !USE_WINDOWS + if ( g_eWorkers==MPM_PREFORK ) + { + pAcceptMutex = new CSphProcessSharedMutex(); + if ( !pAcceptMutex ) + sphFatal ( "failed to create process-shared mutex" ); + + while ( g_dChildren.GetLength() < g_iPreforkChildren ) + { + if ( PreforkChild()==0 ) // child process? break from here, go work + break; + } + + g_iRotationThrottle = hSearchd.GetInt ( "prefork_rotation_throttle", 0 ); + } +#endif + + // in threaded mode, create a dedicated rotation thread + if ( g_eWorkers==MPM_THREADS ) + { + if ( !g_tThdMutex.Init() || !g_tRotateQueueMutex.Init() || !g_tRotateConfigMutex.Init() ) + sphDie ( "failed to init mutex" ); + + if ( g_bSeamlessRotate && !sphThreadCreate ( &g_tRotateThread, RotationThreadFunc , 0 ) ) + sphDie ( "failed to create rotation thread" ); + + // reserving max to keep memory consumption constant between frames + g_dThd.Reserve ( g_iMaxChildren*2 ); + + g_tDistLock.Init(); + g_tFlushMutex.Init(); + } + + // replay last binlog + SmallStringHash_T hIndexes; + for ( IndexHashIterator_c it ( g_pIndexes ); it.Next(); ) + if ( it.Get().m_bEnabled ) + hIndexes.Add ( it.Get().m_pIndex, it.GetKey() ); + + if ( g_eWorkers==MPM_THREADS ) + sphReplayBinlog ( hIndexes, DumpMemStat ); + + if ( !g_bOptNoDetach ) + g_bLogStdout = false; + + // create flush-rt thread + if ( g_eWorkers==MPM_THREADS && !sphThreadCreate ( &g_tRtFlushThread, RtFlushThreadFunc, 0 ) ) + sphDie ( "failed to create rt-flush thread" ); + + sphInfo ( "accepting connections" ); + + for ( ;; ) + { + SphCrashLogger_c::SetupTimePID(); + + if ( !g_bHeadDaemon && pAcceptMutex ) + TickPreforked ( pAcceptMutex ); + else + TickHead ( pAcceptMutex ); + } +} // NOLINT function length + + +bool DieCallback ( const char * sMessage ) +{ + sphLogFatal ( "%s", sMessage ); + return false; // caller should not log +} + + +extern bool ( *g_pUservarsHook )( const CSphString & sUservar, CSphVector & dVals ); + +bool UservarsHook ( const CSphString & sUservar, CSphVector & dVals ) +{ + g_tUservarsMutex.Lock(); + Uservar_t * pVar = g_hUservars ( sUservar ); + if ( pVar ) + { + assert ( pVar->m_eType==USERVAR_INT_SET ); + dVals = *pVar->m_pVal; + } + g_tUservarsMutex.Unlock(); + return ( pVar!=NULL ); +} + + +int main ( int argc, char **argv ) +{ + // threads should be initialized before memory allocations + char cTopOfMainStack; + sphThreadInit(); + MemorizeStack ( &cTopOfMainStack ); + + sphSetDieCallback ( DieCallback ); + sphSetLogger ( sphLog ); + g_pUservarsHook = UservarsHook; + sphCollationInit (); + +#if USE_WINDOWS + int iNameIndex = -1; + for ( int i=1; i=0 ) + g_sServiceName = g_dArgs[iNameIndex].cstr (); + + SERVICE_TABLE_ENTRY dDispatcherTable[] = + { + { (LPSTR) g_sServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain }, + { NULL, NULL } + }; + if ( !StartServiceCtrlDispatcher ( dDispatcherTable ) ) + sphFatal ( "StartServiceCtrlDispatcher() failed: %s", WinErrorInfo() ); + } else +#endif + + return ServiceMain ( argc, argv ); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/searchd.o b/coreseek/csft-4.1/src/searchd.o new file mode 100644 index 0000000..90ef7eb Binary files /dev/null and b/coreseek/csft-4.1/src/searchd.o differ diff --git a/coreseek/csft-4.1/src/spelldump b/coreseek/csft-4.1/src/spelldump new file mode 100755 index 0000000..caf4e84 Binary files /dev/null and b/coreseek/csft-4.1/src/spelldump differ diff --git a/coreseek/csft-4.1/src/spelldump.cpp b/coreseek/csft-4.1/src/spelldump.cpp new file mode 100755 index 0000000..369196f --- /dev/null +++ b/coreseek/csft-4.1/src/spelldump.cpp @@ -0,0 +1,1195 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxutils.h" + +#include + +const int MAX_STR_LENGTH = 512; + +////////////////////////////////////////////////////////////////////////// + +BYTE GetWordchar ( const char * & szSet ) +{ + if ( *szSet=='\\' ) + { + if ( !szSet[1] || !szSet[2] || !szSet[3] ) + return 0; + + char szBuf[3]; + memcpy ( szBuf, szSet+2, 2 ); + szBuf[2] = 0; + + char * szStop = NULL; + int iRes = strtol ( szBuf, &szStop, 16 ); + if ( szStop!=szBuf+2 || iRes<0 || iRes>255 ) + return 0; + + szSet += 4; + return (BYTE) iRes; + } + + return *szSet++; +} + + +bool IsInSet ( BYTE uLetter, const char * szSet ) +{ + if ( !szSet ) + return false; + + bool bInvert = ( *szSet=='^' ); + if ( bInvert ) + ++szSet; + + const char * szSep = strchr ( szSet, '-' ); + bool bRange = ( szSep!=NULL ); + + if ( bRange ) + { + BYTE uRange1 = GetWordchar ( szSet ); + szSep++; + BYTE uRange2 = GetWordchar ( szSep ); + + if ( uLetter>=Min ( uRange1, uRange2 ) && uLetter<=Max ( uRange1, uRange2 ) ) + return !bInvert; + + } else + { + BYTE uChar = 0; + while ( ( uChar = GetWordchar ( szSet ) )!=0 ) + if ( uChar==uLetter ) + break; + + bool bEnd = !uChar; + + if ( bInvert && bEnd ) + return true; + + if ( !bInvert && !bEnd ) + return true; + } + + return false; +} + + +bool GetSetMinMax ( const char * szSet, BYTE & uMin, BYTE & uMax ) +{ + if ( !szSet || !*szSet ) + return false; + + uMin = GetWordchar ( szSet ); + uMax = uMin; + + BYTE uChar; + while ( ( uChar = GetWordchar ( szSet ) )!=0 ) + if ( uChar!='-' ) + { + uMin = Min ( uMin, uChar ); + uMax = Max ( uMax, uChar ); + } + + if ( !uMin || !uMax ) + return false; + + return true; +} + +////////////////////////////////////////////////////////////////////////// + +class CISpellDict +{ +public: + struct CISpellDictWord + { + CSphString m_sWord; + CSphString m_sFlags; + }; + + bool Load ( const char * szFilename ); + void IterateStart (); + const CISpellDictWord * IterateNext (); + +private: + CSphVector < CISpellDictWord > m_dEntries; + int m_iIterator; +}; + + +bool CISpellDict::Load ( const char * szFilename ) +{ + if ( !szFilename ) + return false; + + m_dEntries.Reset (); + m_dEntries.Reserve ( 131072 ); + + FILE * pFile = fopen ( szFilename, "rt" ); + if ( !pFile ) + return false; + + char szWordBuffer [MAX_STR_LENGTH]; + + while ( !feof ( pFile ) ) + { + char * szResult = fgets ( szWordBuffer, MAX_STR_LENGTH, pFile ); + if ( !szResult ) + break; + + int iPos = strlen ( szWordBuffer ) - 1; + while ( iPos>=0 && isspace ( (unsigned char)szWordBuffer[iPos] ) ) + szWordBuffer [iPos--] = '\0'; + + CISpellDictWord Word; + + char * szPosition = strchr ( szWordBuffer, '/' ); + if ( !szPosition ) + { + szPosition = szWordBuffer; + while ( *szPosition && !isspace ( (unsigned char)*szPosition ) ) + ++szPosition; + + *szPosition = '\0'; + Word.m_sWord = szWordBuffer; + + } else + { + *szPosition = '\0'; + Word.m_sWord = szWordBuffer; + ++szPosition; + char * szFlags = szPosition; + while ( *szPosition && !isspace ( (unsigned char)*szPosition ) ) + ++szPosition; + + *szPosition = '\0'; + Word.m_sFlags = szFlags; + } + + m_dEntries.Add ( Word ); + } + + fclose ( pFile ); + + return true; +} + + +void CISpellDict::IterateStart () +{ + m_iIterator = 0; +} + + +const CISpellDict::CISpellDictWord * CISpellDict::IterateNext () +{ + if ( m_iIterator>=m_dEntries.GetLength() ) + return NULL; + + return &m_dEntries [m_iIterator++]; +} + +////////////////////////////////////////////////////////////////////////// + +enum RuleType_e +{ + RULE_NONE, + RULE_PREFIXES, + RULE_SUFFIXES +}; + + +class CISpellAffixRule +{ +public: + CISpellAffixRule () {} + CISpellAffixRule ( RuleType_e eRule, char cFlag, bool bCrossProduct, char * szCondition, char * szStrip, char * szAppend ); + + bool Apply ( CSphString & sWord ); + char Flag () const; + bool IsCrossProduct () const; + bool IsPrefix () const; + +private: + RuleType_e m_eRule; + char m_cFlag; + bool m_bCrossProduct; + CSphString m_sCondition; + CSphString m_sStrip; + CSphString m_sAppend; + + int m_iWordLen; + int m_iCondLen; + int m_iStripLen; + int m_iAppendLen; + + bool CheckSuffix ( const CSphString & sWord ) const; + bool CheckPrefix ( const CSphString & sWord ) const; + bool StripAppendSuffix ( CSphString & sWord ) const; + bool StripAppendPrefix ( CSphString & sWord ) const; +}; + + +CISpellAffixRule::CISpellAffixRule ( RuleType_e eRule, char cFlag, bool bCrossProduct, char * szCondition, char * szStrip, char * szAppend ) + : m_eRule ( eRule ) + , m_cFlag ( cFlag ) + , m_bCrossProduct ( bCrossProduct ) + , m_sCondition ( szCondition ) + , m_sStrip ( szStrip ) + , m_sAppend ( szAppend ) + , m_iWordLen ( 0 ) +{ + m_iCondLen = szCondition ? strlen ( szCondition ) : 0; + m_iStripLen = szStrip ? strlen ( szStrip ) : 0; + m_iAppendLen = szAppend ? strlen ( szAppend ) : 0; +} + + +bool CISpellAffixRule::Apply ( CSphString & sWord ) +{ + if ( m_sCondition.IsEmpty () ) + return true; + + if ( sWord.IsEmpty () ) + return false; + + m_iWordLen = strlen ( sWord.cstr () ); + + bool bDotCond = ( m_sCondition=="." ); + if ( m_eRule==RULE_SUFFIXES ) + { + if ( !bDotCond && !CheckSuffix ( sWord ) ) + return false; + + if ( !StripAppendSuffix ( sWord ) ) + return false; + } else + { + if ( !bDotCond && !CheckPrefix ( sWord ) ) + return false; + + if ( !StripAppendPrefix ( sWord ) ) + return false; + } + return true; +} + + +bool CISpellAffixRule::CheckSuffix ( const CSphString & sWord ) const +{ + int iCondI = m_iCondLen-1; + for ( int i=m_iWordLen-1; iCondI>=0 && i>=0; --i ) + { + if ( m_sCondition.cstr()[iCondI]!=']' ) + { + if ( m_sCondition.cstr()[iCondI]!=sWord.cstr()[i] ) + return false; + + --iCondI; + + } else + { + int iRangeStart = -1; + + for ( int j=iCondI; j>=0 && iRangeStart==-1; --j ) + if ( m_sCondition.cstr()[j]=='[' ) + iRangeStart = j; + + if ( iRangeStart==-1 ) + return false; + else + { + if ( !IsInSet ( sWord.cstr () [i], m_sCondition.SubString ( iRangeStart + 1, iCondI - iRangeStart - 1 ).cstr () ) ) + return false; + + iCondI = iRangeStart - 1; + } + } + } + + return true; +} + + +bool CISpellAffixRule::StripAppendSuffix ( CSphString & sWord ) const +{ + static char szTmp [ MAX_STR_LENGTH]; + + if ( !m_sStrip.IsEmpty () ) + { + if ( m_iWordLen < m_iStripLen ) + return false; + + if ( strncmp ( sWord.cstr () + m_iWordLen - m_iStripLen, m_sStrip.cstr (), m_iStripLen ) ) + return false; + } + + strncpy ( szTmp, sWord.cstr (), m_iWordLen - m_iStripLen ); + szTmp [m_iWordLen - m_iStripLen] = '\0'; + + if ( !m_sAppend.IsEmpty () ) + strcat ( szTmp, m_sAppend.cstr () ); // NOLINT + + sWord = szTmp; + + return true; +} + + +bool CISpellAffixRule::CheckPrefix ( const CSphString & sWord ) const +{ + int iCondI = 0; + for ( int i = 0; iCondI < m_iCondLen && i < m_iWordLen; ++i ) + { + if ( m_sCondition.cstr()[iCondI]!='[' ) + { + if ( m_sCondition.cstr()[iCondI]!=sWord.cstr()[i] ) + return false; + + ++iCondI; + + } else + { + int iRangeEnd = -1; + + for ( int j=iCondI; j m_dRules; + + char m_dCharset [256]; + bool m_bFirstCaseConv; + CSphString m_sLocale; + CSphString m_sCharsetFile; + bool m_bCheckCrosses; + CSphLowercaser m_LowerCaser; + bool m_bUseLowerCaser; + bool m_bUseDictConversion; + + bool AddToCharset ( char * szRangeL, char * szRangeU ); + void AddCharPair ( BYTE uCharL, BYTE uCharU ); + void Strip ( char * szText ); + char ToLowerCase ( char cChar ); + void LoadLocale (); + + AffixFormat_e DetectFormat ( FILE * ); + bool LoadISpell ( FILE * ); + bool LoadMySpell ( FILE * ); +}; + + +CISpellAffix::CISpellAffix ( const char * szLocale, const char * szCharsetFile ) + : m_bFirstCaseConv ( true ) + , m_sLocale ( szLocale ) + , m_sCharsetFile ( szCharsetFile ) + , m_bCheckCrosses ( false ) + , m_bUseLowerCaser ( false ) + , m_bUseDictConversion ( false ) +{ +} + + +AffixFormat_e CISpellAffix::DetectFormat ( FILE * pFile ) +{ + char sBuffer [MAX_STR_LENGTH]; + + while ( !feof ( pFile ) ) + { + char * sLine = fgets ( sBuffer, MAX_STR_LENGTH, pFile ); + if ( !sLine ) + break; + + if ( !strncmp ( sLine, "SFX", 3 ) ) return AFFIX_FORMAT_MYSPELL; + if ( !strncmp ( sLine, "PFX", 3 ) ) return AFFIX_FORMAT_MYSPELL; + if ( !strncmp ( sLine, "REP", 3 ) ) return AFFIX_FORMAT_MYSPELL; + + if ( !strncasecmp ( sLine, "prefixes", 8 ) ) return AFFIX_FORMAT_ISPELL; + if ( !strncasecmp ( sLine, "suffixes", 8 ) ) return AFFIX_FORMAT_ISPELL; + if ( !strncasecmp ( sLine, "flag", 4 ) ) return AFFIX_FORMAT_ISPELL; + } + + return AFFIX_FORMAT_UNKNOWN; +} + + +bool CISpellAffix::Load ( const char * szFilename ) +{ + if ( !szFilename ) + return false; + + m_dRules.Reset (); + memset ( m_dCharset, 0, sizeof ( m_dCharset ) ); + m_bFirstCaseConv = true; + m_bUseLowerCaser = false; + m_bUseDictConversion = false; + m_LowerCaser.Reset (); + + FILE * pFile = fopen ( szFilename, "rt" ); + if ( !pFile ) + return false; + + bool bResult = false; + AffixFormat_e eFormat = DetectFormat ( pFile ); + if ( eFormat==AFFIX_FORMAT_UNKNOWN ) + printf ( "Failed to detect affix file format\n" ); + else + { + fseek ( pFile, SEEK_SET, 0 ); + printf ( "Using %s affix file format\n", AffixFormatName[eFormat] ); + switch ( eFormat ) + { + case AFFIX_FORMAT_MYSPELL: bResult = LoadMySpell ( pFile ); break; + case AFFIX_FORMAT_ISPELL: bResult = LoadISpell ( pFile ); break; + case AFFIX_FORMAT_UNKNOWN: break; + } + } + fclose ( pFile ); + + bool bHaveCrossPrefix = false; + for ( int i = 0; i < m_dRules.GetLength () && !bHaveCrossPrefix; i++ ) + if ( m_dRules[i].IsPrefix() && m_dRules[i].IsCrossProduct() ) + bHaveCrossPrefix = true; + + bool bHaveCrossSuffix = false; + for ( int i = 0; i < m_dRules.GetLength () && !bHaveCrossSuffix; i++ ) + if ( !m_dRules[i].IsPrefix() && m_dRules[i].IsCrossProduct() ) + bHaveCrossSuffix = true; + + m_bCheckCrosses = bHaveCrossPrefix && bHaveCrossSuffix; + + return bResult; +} + + +bool CISpellAffix::LoadISpell ( FILE * pFile ) +{ + char szBuffer [ MAX_STR_LENGTH ]; + char szCondition [ MAX_STR_LENGTH ]; + char szStrip [ MAX_STR_LENGTH ]; + char szAppend [ MAX_STR_LENGTH ]; + + RuleType_e eRule = RULE_NONE; + char cFlag = '\0'; + bool bCrossProduct = false; + int iLine = 0; + + // TODO: parse all .aff character replacement commands + while ( !feof ( pFile ) ) + { + char * szResult = fgets ( szBuffer, MAX_STR_LENGTH, pFile ); + if ( !szResult ) + break; + iLine++; + + if ( !strncasecmp ( szBuffer, "prefixes", 8 ) ) + { + eRule = RULE_PREFIXES; + continue; + } + + if ( !strncasecmp ( szBuffer, "suffixes", 8 ) ) + { + eRule = RULE_SUFFIXES; + continue; + } + + if ( !strncasecmp ( szBuffer, "wordchars", 9 ) ) + { + char * szStart = szBuffer + 9; + while ( *szStart && isspace ( (unsigned char) *szStart ) ) + ++szStart; + + char * szRangeL = szStart; + while ( *szStart && !isspace ( (unsigned char) *szStart ) ) + ++szStart; + + if ( !*szStart ) + { + printf ( "WARNING: Line %d: invalid 'wordchars' statement\n", iLine ); + continue; + } + + *szStart = '\0'; + ++szStart; + + while ( *szStart && isspace ( (unsigned char) *szStart ) ) + ++szStart; + + char * szRangeU = szStart; + + while ( *szStart && !isspace ( (unsigned char) *szStart ) ) + ++szStart; + + *szStart = '\0'; + + if ( !AddToCharset ( szRangeL, szRangeU ) ) + printf ( "WARNING: Line %d: cannot add to charset: '%s' '%s'\n", iLine, szRangeL, szRangeU ); + + continue; + } + + if ( !strncasecmp ( szBuffer, "flag", 4 ) ) + { + if ( eRule==RULE_NONE ) + { + printf ( "WARNING: Line %d: 'flag' appears before preffixes or suffixes\n", iLine ); + continue; + } + + char * szStart = szBuffer + 4; + while ( *szStart && isspace ( (unsigned char) *szStart ) ) + ++szStart; + + bCrossProduct = ( *szStart=='*' ); + + cFlag = bCrossProduct ? *(szStart + 1) : *(szStart); + continue; + } + + if ( eRule==RULE_NONE ) + continue; + + char * szComment = strchr ( szBuffer, '#' ); + if ( szComment ) + *szComment = '\0'; + + if ( !* szBuffer ) + continue; + + szCondition[0] = '\0'; + szStrip[0] = '\0'; + szAppend[0] = '\0'; + + int nFields = sscanf ( szBuffer, "%[^>\n]>%[^,\n],%[^\n]", szCondition, szStrip, szAppend ); // NOLINT + + Strip ( szCondition ); + Strip ( szStrip ); + Strip ( szAppend ); + + switch ( nFields ) + { + case 2: // no optional strip-string + strcpy ( szAppend, szStrip ); // NOLINT + szStrip[0] = '\0'; + break; + case 3: // all read + break; + default: // invalid repl + continue; + } + + CISpellAffixRule Rule ( eRule, cFlag, bCrossProduct, szCondition, szStrip, szAppend ); + m_dRules.Add ( Rule ); + } + + return true; +} + + +bool CISpellAffix::LoadMySpell ( FILE * pFile ) +{ + char sBuffer [MAX_STR_LENGTH]; + char sCondition [MAX_STR_LENGTH]; + char sRemove [MAX_STR_LENGTH]; + char sAppend [MAX_STR_LENGTH]; + + RuleType_e eRule = RULE_NONE; + BYTE cFlag = 0; + BYTE cCombine = 0; + int iCount = 0, iLine = 0; + const char * sMode = 0; + + while ( !feof ( pFile ) ) + { + char * sLine = fgets ( sBuffer, MAX_STR_LENGTH, pFile ); + if ( !sLine ) + break; + ++iLine; + + // prefix and suffix rules + RuleType_e eNewRule = RULE_NONE; + if ( !strncmp ( sLine, "PFX", 3 ) ) + { + eNewRule = RULE_PREFIXES; + sMode = "prefix"; + + } else if ( !strncmp ( sLine, "SFX", 3 ) ) + { + eNewRule = RULE_SUFFIXES; + sMode = "suffix"; + } + + if ( eNewRule!=RULE_NONE ) + { + sLine += 3; + while ( *sLine && isspace ( (unsigned char) *sLine ) ) + ++sLine; + + if ( eNewRule!=eRule ) // new rule header + { + if ( iCount ) + printf ( "WARNING: Line %d: Premature end of entries.\n", iLine ); + + if ( sscanf ( sLine, "%c %c %d", &cFlag, &cCombine, &iCount )!=3 ) // NOLINT + printf ( "WARNING; Line %d: Malformed %s header\n", iLine, sMode ); + + eRule = eNewRule; + + } else // current rule continued + { + *sRemove = *sAppend = 0; + char cNewFlag; + if ( sscanf ( sLine, "%c %s %s %s", &cNewFlag, sRemove, sAppend, sCondition )==4 ) // NOLINT + { + if ( cNewFlag!=cFlag ) + printf ( "WARNING: Line %d: Flag character mismatch\n", iLine ); + + if ( *sRemove=='0' && *(sRemove + 1)==0 ) *sRemove = 0; + if ( *sAppend=='0' && *(sAppend + 1)==0 ) *sAppend = 0; + + CISpellAffixRule Rule ( eRule, cFlag, cCombine=='Y', sCondition, sRemove, sAppend ); + m_dRules.Add ( Rule ); + + } else + printf ( "WARNING: Line %d: Malformed %s rule\n", iLine, sMode ); + + if ( !--iCount ) eRule = RULE_NONE; + } + continue; + } + } + return true; +} + + +CISpellAffixRule * CISpellAffix::GetRule ( int iRule ) +{ + return &m_dRules [iRule]; +} + + +int CISpellAffix::GetNumRules () const +{ + return m_dRules.GetLength (); +} + + +bool CISpellAffix::CheckCrosses () const +{ + return m_bCheckCrosses; +} + + +bool CISpellAffix::AddToCharset ( char * szRangeL, char * szRangeU ) +{ + if ( !szRangeL || !szRangeU ) + return false; + + int iLengthL = strlen ( szRangeL ); + int iLengthU = strlen ( szRangeU ); + + bool bSetL = ( iLengthL>0 && szRangeL[0]=='[' && szRangeL[iLengthL-1]==']' ); + bool bSetR = ( iLengthU>0 && szRangeU[0]=='[' && szRangeU[iLengthU-1]==']' ); + + if ( bSetL!=bSetR ) + return false; + + if ( bSetL ) + { + szRangeL [iLengthL - 1] = '\0'; + szRangeL = szRangeL + 1; + + szRangeU [iLengthU - 1] = '\0'; + szRangeU = szRangeU + 1; + + BYTE uMinL, uMaxL; + if ( !GetSetMinMax ( szRangeL, uMinL, uMaxL ) ) + return false; + + BYTE uMinU, uMaxU; + if ( !GetSetMinMax ( szRangeU, uMinU, uMaxU ) ) + return false; + + if ( ( uMaxU - uMinU )!=( uMaxL - uMinL ) ) + return false; + + for ( BYTE i=0; i<=( uMaxL - uMinL ); ++i ) + if ( IsInSet ( uMinL + i, szRangeL ) && IsInSet ( uMinU + i, szRangeU ) ) + AddCharPair ( uMinL + i, uMinU + i ); + } else + { + if ( iLengthL > 4 || iLengthU > 4 ) + return false; + + const char * szL = szRangeL; + const char * szU = szRangeU; + AddCharPair ( GetWordchar(szL), GetWordchar(szU) ); + } + + m_bUseDictConversion = true; + + return true; +} + + +void CISpellAffix::AddCharPair ( BYTE uCharL, BYTE uCharU ) +{ + m_dCharset [uCharU] = uCharL; +} + + +void CISpellAffix::Strip ( char * szText ) +{ + char * szIterator1 = szText; + char * szIterator2 = szText; + while ( *szIterator1 ) + { + if ( !isspace ( (unsigned char) *szIterator1 ) && *szIterator1!='-' ) + { + *szIterator2 = *szIterator1; + ++szIterator2; + } + ++szIterator1; + } + + *szIterator2 = '\0'; + + while ( *szText ) + { + *szText = ToLowerCase ( *szText ); + ++szText; + } +} + + +char CISpellAffix::ToLowerCase ( char cChar ) +{ + if ( m_bFirstCaseConv ) + { + LoadLocale (); + m_bFirstCaseConv = false; + } + + // dictionary conversion + if ( m_bUseDictConversion ) + return m_dCharset [(BYTE) cChar] ? m_dCharset [(BYTE) cChar] : cChar; + + // user-defined character mapping + if ( m_bUseLowerCaser ) + { + char cResult = (char)m_LowerCaser.ToLower ( (BYTE) cChar ); + return cResult ? cResult : cChar; + } + + // user-specified code page conversion + return (char)tolower ( (BYTE)cChar ); // workaround for systems (eg. FreeBSD) which default to signed char. marvelous! +} + + +void CISpellAffix::LoadLocale () +{ + if ( m_bUseDictConversion ) + printf ( "Using dictionary-defined character set\n" ); + else + if ( !m_sCharsetFile.IsEmpty () ) + { + FILE * pFile = fopen ( m_sCharsetFile.cstr (), "rt" ); + if ( pFile ) + { + printf ( "Using charater set from '%s'\n", m_sCharsetFile.cstr () ); + + const int MAX_CHARSET_LENGTH = 4096; + char szBuffer [MAX_CHARSET_LENGTH]; + + char * szResult = fgets ( szBuffer, MAX_CHARSET_LENGTH, pFile ); + if ( szResult ) + { + CSphVector dRemaps; + if ( sphParseCharset ( szBuffer, dRemaps ) ) + { + m_bUseLowerCaser = true; + m_LowerCaser.AddRemaps ( dRemaps, 0 ); + } else + { + printf ( "Failed to parse charset from '%s'\n", m_sCharsetFile.cstr() ); + } + } else + { + printf ( "Failed to read charset from '%s'\n", m_sCharsetFile.cstr() ); + } + + fclose ( pFile ); + + } else + { + printf ( "Failed to open '%s'\n", m_sCharsetFile.cstr() ); + } + + } else + { + if ( !m_sLocale.IsEmpty () ) + { + char dLocaleC[256], dLocaleUser[256]; + + setlocale ( LC_ALL, "C" ); + for ( int i=0; i<256; i++ ) + dLocaleC[i] = (char) tolower(i); + + char * szLocale = setlocale ( LC_CTYPE, m_sLocale.cstr() ); + if ( szLocale ) + { + printf ( "Using user-defined locale (locale=%s)\n", m_sLocale.cstr() ); + + for ( int i=0; i<256; i++ ) + dLocaleUser[i] = (char) tolower(i); + + if ( !memcmp ( dLocaleC, dLocaleUser, 256 ) ) + printf ( "WARNING: user-defined locale provides the same case conversion as the default \"C\" locale\n" ); + } else + printf ( "WARNING: could not set user-defined locale for case conversions (locale=%s)\n", m_sLocale.cstr() ); + } else + printf ( "WARNING: no character set specified\n" ); + } +} + +////////////////////////////////////////////////////////////////////////// + +enum OutputMode_e +{ + M_DEBUG, + M_DUPLICATES, + M_LAST, + M_EXACT_OR_LONGEST, + M_DEFAULT = M_EXACT_OR_LONGEST +}; + +const char * dModeName[] = +{ + "debug", + "duplicates", + "last" +}; + +struct MapInfo_t +{ + CSphString m_sWord; + char m_sRules[3]; +}; + +struct WordLess +{ + inline bool IsLess ( const char * a, const char * b ) const + { + return strcoll ( a, b ) < 0; + } +}; + +typedef CSphOrderedHash < CSphVector, CSphString, CSphStrHashFunc, 100000, 13 > WordMap_t; + +static void EmitResult ( WordMap_t & tMap , const CSphString & sFrom, const CSphString & sTo, char cRuleA = 0, char cRuleB = 0 ) +{ + if ( !tMap.Exists(sFrom) ) + tMap.Add ( CSphVector(), sFrom ); + + MapInfo_t tInfo; + tInfo.m_sWord = sTo; + tInfo.m_sRules[0] = cRuleA; + tInfo.m_sRules[1] = cRuleB; + tInfo.m_sRules[2] = 0; + tMap[sFrom].Add ( tInfo ); +} + +int main ( int iArgs, char ** dArgs ) +{ + OutputMode_e eMode = M_DEFAULT; + bool bUseCustomCharset = false; + CSphString sDict, sAffix, sLocale, sCharsetFile, sResult = "result.txt"; + + printf ( "spelldump, an ispell dictionary dumper\n\n" ); + + int i = 1; + for ( ; i < iArgs; i++ ) + { + if ( !strcmp ( dArgs[i], "-c" ) ) + { + if ( ++i==iArgs ) break; + bUseCustomCharset = true; + sCharsetFile = dArgs[i]; + + } else if ( !strcmp ( dArgs[i], "-m" ) ) + { + if ( ++i==iArgs ) break; + char * sMode = dArgs[i]; + + if ( !strcmp ( sMode, "debug" ) ) { eMode = M_DEBUG; continue; } + if ( !strcmp ( sMode, "duplicates" ) ) { eMode = M_DUPLICATES; continue; } + if ( !strcmp ( sMode, "last" ) ) { eMode = M_LAST; continue; } + if ( !strcmp ( sMode, "default" ) ) { eMode = M_DEFAULT; continue; } + + printf ( "Unrecognized mode: %s\n", sMode ); + return 1; + + } else + break; + } + + switch ( iArgs - i ) + { + case 4: + sLocale = dArgs[i + 3]; + case 3: + sResult = dArgs[i + 2]; + case 2: + sAffix = dArgs[i + 1]; + sDict = dArgs[i]; + break; + default: + printf ( "Usage: spelldump [options] [result] [locale-name]\n\n" + "Options:\n" + "-c \tuse case convertion defined in \n" + "-m \toutput (conflict resolution) mode:\n" + "\t\tdefault - try to guess the best way to resolve a conflict\n" + "\t\tlast - choose last entry\n" + "\t\tdebug - dump all mappings (with rules)\n" + "\t\tduplicates - dump duplicate mappings only (with rules)\n" ); + if ( iArgs>1 ) + { + printf ( "\n" + "Examples:\n" + "spelldump en.dict en.aff\n" + "spelldump ru.dict ru.aff ru.txt ru_RU.CP1251\n" + "spelldump ru.dict ru.aff ru.txt .1251\n" ); + } + return 1; + } + + printf ( "Loading dictionary...\n" ); + CISpellDict Dict; + if ( !Dict.Load ( sDict.cstr () ) ) + sphDie ( "Error loading dictionary file '%s'\n", sDict.IsEmpty () ? "" : sDict.cstr () ); + + printf ( "Loading affix file...\n" ); + CISpellAffix Affix ( sLocale.cstr (), bUseCustomCharset ? sCharsetFile.cstr () : NULL ); + if ( !Affix.Load ( sAffix.cstr () ) ) + sphDie ( "Error loading affix file '%s'\n", sAffix.IsEmpty () ? "" : sAffix.cstr () ); + + if ( sResult.IsEmpty () ) + sphDie ( "No result file specified\n" ); + + FILE * pFile = fopen ( sResult.cstr (), "wt" ); + if ( !pFile ) + sphDie ( "Unable to open '%s' for writing\n", sResult.cstr () ); + + if ( eMode!=M_DEFAULT ) + printf ( "Output mode: %s\n", dModeName[eMode] ); + + Dict.IterateStart (); + WordMap_t tWordMap; + const CISpellDict::CISpellDictWord * pWord = NULL; + int nDone = 0; + while ( ( pWord = Dict.IterateNext () )!=NULL ) + { + EmitResult ( tWordMap, pWord->m_sWord, pWord->m_sWord ); + + if ( ( ++nDone % 10 )==0 ) + { + printf ( "\rDictionary words processed: %d", nDone ); + fflush ( stdout ); + } + + if ( pWord->m_sFlags.IsEmpty() ) + continue; + + CSphString sWord, sWordForCross; + int iFlagLen = strlen ( pWord->m_sFlags.cstr () ); + for ( int iFlag1 = 0; iFlag1 < iFlagLen; ++iFlag1 ) + for ( int iRule1 = 0; iRule1 < Affix.GetNumRules (); ++iRule1 ) + { + CISpellAffixRule * pRule1 = Affix.GetRule ( iRule1 ); + if ( pRule1->Flag()!=pWord->m_sFlags.cstr()[iFlag1] ) + continue; + + sWord = pWord->m_sWord; + + if ( !pRule1->Apply ( sWord ) ) + continue; + + EmitResult ( tWordMap, sWord, pWord->m_sWord, pRule1->Flag() ); + + // apply other rules + if ( !Affix.CheckCrosses() ) + continue; + + if ( !pRule1->IsCrossProduct() ) + continue; + + for ( int iFlag2 = iFlag1 + 1; iFlag2 < iFlagLen; ++iFlag2 ) + for ( int iRule2 = 0; iRule2 < Affix.GetNumRules (); ++iRule2 ) + { + CISpellAffixRule * pRule2 = Affix.GetRule ( iRule2 ); + if ( !pRule2->IsCrossProduct () || pRule2->Flag()!=pWord->m_sFlags.cstr()[iFlag2] || + pRule2->IsPrefix()==pRule1->IsPrefix() ) + continue; + + sWordForCross = sWord; + if ( pRule2->Apply ( sWordForCross ) ) + EmitResult ( tWordMap, sWordForCross, pWord->m_sWord, pRule1->Flag(), pRule2->Flag() ); + } + } + } + printf ( "\rDictionary words processed: %d\n", nDone ); + + // output + + CSphVector dKeys; + tWordMap.IterateStart(); + while ( tWordMap.IterateNext() ) + dKeys.Add ( tWordMap.IterateGetKey().cstr() ); + dKeys.Sort ( WordLess() ); + + ARRAY_FOREACH ( iKey, dKeys ) + { + const CSphVector & dWords = tWordMap[dKeys[iKey]]; + const char * sKey = dKeys[iKey]; + + switch ( eMode ) + { + case M_LAST: + fprintf ( pFile, "%s > %s\n", sKey, dWords.Last().m_sWord.cstr() ); + break; + + case M_EXACT_OR_LONGEST: + { + int iMatch = 0; + int iLength = 0; + + ARRAY_FOREACH ( i, dWords ) + { + if ( dWords[i].m_sWord==sKey ) + { + iMatch = i; + break; + } + + int iWordLength = strlen ( dWords[i].m_sWord.cstr() ); + if ( iWordLength>iLength ) + { + iLength = iWordLength; + iMatch = i; + } + } + + fprintf ( pFile, "%s > %s\n", sKey, dWords[iMatch].m_sWord.cstr() ); + break; + } + + case M_DUPLICATES: + if ( dWords.GetLength()==1 ) break; + case M_DEBUG: + ARRAY_FOREACH ( i, dWords ) + fprintf ( pFile, "%s > %s %s/%d\n", sKey, dWords[i].m_sWord.cstr(), + dWords[i].m_sRules, dWords.GetLength() ); + break; + } + } + + fclose ( pFile ); + + return 0; +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/spelldump.o b/coreseek/csft-4.1/src/spelldump.o new file mode 100644 index 0000000..339d70c Binary files /dev/null and b/coreseek/csft-4.1/src/spelldump.o differ diff --git a/coreseek/csft-4.1/src/sph_darts.h b/coreseek/csft-4.1/src/sph_darts.h new file mode 100755 index 0000000..b565299 --- /dev/null +++ b/coreseek/csft-4.1/src/sph_darts.h @@ -0,0 +1,503 @@ +/* + Darts -- Double-ARray Trie System + + $Id: darts.h.in 1575 2007-01-27 13:24:27Z taku $; + + Copyright(C) 2001-2007 Taku Kudo +*/ +#ifndef SPH_DARTS_H_ +#define SPH_DARTS_H_ + +#define SPH_DARTS_VERSION "0.31" +#include +#include +#include + + +#ifdef HAVE_ZLIB_H +namespace zlib { +#include +} +#define SH(p)((unsigned short)(unsigned char)((p)[0]) | ((unsigned short)(unsigned char)((p)[1]) << 8)) +#define LG(p)((unsigned long)(SH(p)) |((unsigned long)(SH((p)+2)) << 16)) +#endif + +namespace SphDarts { + + template inline T _max(T x, T y) { return(x > y) ? x : y; } + template inline T* _resize(T* ptr, size_t n, size_t l, T v) { + T *tmp = new T[l]; + for (size_t i = 0; i < n; ++i) tmp[i] = ptr[i]; + for (size_t i = n; i < l; ++i) tmp[i] = v; + delete [] ptr; + return tmp; + } + + template + class Length { + public: size_t operator()(const T *key) const + { size_t i; for (i = 0; key[i] != (T)0; ++i) {} return i; } + }; + + template <> class Length { + public: size_t operator()(const char *key) const + { return std::strlen(key); } + }; + + template > + class DoubleArrayImpl { + public: + struct unit_t { + array_type_ base; + array_u_type_ check; + }; + private: + + struct node_t { + array_u_type_ code; + size_t depth; + size_t left; + size_t right; + }; + + + + unit_t *array_; + unsigned char *used_; + size_t size_; + size_t alloc_size_; + node_type_ **key_; + size_t key_size_; + size_t *length_; + array_type_ *value_; + size_t progress_; + size_t next_check_pos_; + bool no_delete_; + int error_; + int (*progress_func_)(size_t, size_t); + + size_t resize(const size_t new_size) { + unit_t tmp; + tmp.base = 0; + tmp.check = 0; + array_ = _resize(array_, alloc_size_, new_size, tmp); + used_ = _resize(used_, alloc_size_, new_size, + static_cast(0)); + alloc_size_ = new_size; + return new_size; + } + + size_t fetch(const node_t &parent, std::vector &siblings) { + if (error_ < 0) return 0; + + array_u_type_ prev = 0; + + for (size_t i = parent.left; i < parent.right; ++i) { + if ((length_ ? length_[i] : length_func_()(key_[i])) < parent.depth) + continue; + + const node_u_type_ *tmp = reinterpret_cast(key_[i]); + + array_u_type_ cur = 0; + if ((length_ ? length_[i] : length_func_()(key_[i])) != parent.depth) + cur = (array_u_type_)tmp[parent.depth] + 1; + + if (prev > cur) { + error_ = -3; + return 0; + } + + if (cur != prev || siblings.empty()) { + node_t tmp_node; + tmp_node.depth = parent.depth + 1; + tmp_node.code = cur; + tmp_node.left = i; + if (!siblings.empty()) siblings[siblings.size()-1].right = i; + + siblings.push_back(tmp_node); + } + + prev = cur; + } + + if (!siblings.empty()) + siblings[siblings.size()-1].right = parent.right; + + return siblings.size(); + } + + size_t insert(const std::vector &siblings) { + if (error_ < 0) return 0; + + size_t begin = 0; + size_t pos = _max((size_t)siblings[0].code + 1, next_check_pos_) - 1; + size_t nonzero_num = 0; + int first = 0; + + if (alloc_size_ <= pos) resize(pos + 1); + + while (true) { + next: + ++pos; + + if (alloc_size_ <= pos) resize(pos + 1); + + if (array_[pos].check) { + ++nonzero_num; + continue; + } else if (!first) { + next_check_pos_ = pos; + first = 1; + } + + begin = pos - siblings[0].code; + if (alloc_size_ <= (begin + siblings[siblings.size()-1].code)) { + size_t new_size = static_cast(alloc_size_ * + _max(1.05, 1.0 * key_size_ / progress_)); + if(!new_size) + new_size = alloc_size_ * 1.0 * key_size_; //???? + resize(new_size); + } + + if (used_[begin]) continue; + + for (size_t i = 1; i < siblings.size(); ++i) + if (array_[begin + siblings[i].code].check != 0) goto next; + + break; + } + + // -- Simple heuristics -- + // if the percentage of non-empty contents in check between the index + // 'next_check_pos' and 'check' is greater than some constant + // value(e.g. 0.9), + // new 'next_check_pos' index is written by 'check'. + if (1.0 * nonzero_num/(pos - next_check_pos_ + 1) >= 0.95) + next_check_pos_ = pos; + + used_[begin] = 1; + size_ = _max(size_, + begin + + static_cast(siblings[siblings.size() - 1].code + 1)); + + for (size_t i = 0; i < siblings.size(); ++i) + array_[begin + siblings[i].code].check = begin; + + for (size_t i = 0; i < siblings.size(); ++i) { + std::vector new_siblings; + + if (!fetch(siblings[i], new_siblings)) { + array_[begin + siblings[i].code].base = + value_ ? + static_cast(-value_[siblings[i].left]-1) : + static_cast(-1*siblings[i].left-1); + + if (value_ && (array_type_)(-value_[siblings[i].left]-1) >= 0) { + error_ = -2; + return 0; + } + + ++progress_; + if (progress_func_)(*progress_func_)(progress_, key_size_); + + } else { + size_t h = insert(new_siblings); + array_[begin + siblings[i].code].base = h; + } + } + + return begin; + } + + public: + + typedef array_type_ value_type; + typedef node_type_ key_type; + typedef array_type_ result_type; // for compatibility + + struct result_pair_type { + value_type value; + size_t length; + value_type pos; + }; + + explicit DoubleArrayImpl(): array_(0), used_(0), + size_(0), alloc_size_(0), + no_delete_(0), error_(0) {} + ~DoubleArrayImpl() { clear(); } + + void set_result(value_type& x, value_type r, size_t) const{ + x = r; + } + + void set_result(result_pair_type& x, value_type r, size_t l) const{ + x.value = r; + x.length = l; + x.pos = 0; + } + + void set_result(result_pair_type& x, value_type r, size_t l,array_u_type_ p ) const{ + x.value = r; + x.length = l; + x.pos = p; + } + + void set_array(void *ptr, size_t size = 0) { + clear(); + array_ = reinterpret_cast(ptr); + no_delete_ = true; + size_ = size; + } + + const void *array() const { + return const_cast(reinterpret_cast(array_)); + } + + void clear() { + if (!no_delete_) + delete [] array_; + delete [] used_; + array_ = 0; + used_ = 0; + alloc_size_ = 0; + size_ = 0; + no_delete_ = false; + } + + size_t unit_size() const { return sizeof(unit_t); } + size_t size() const { return size_; } + size_t total_size() const { return size_ * sizeof(unit_t); } + + size_t nonzero_size() const { + size_t result = 0; + for (size_t i = 0; i < size_; ++i) + if (array_[i].check) ++result; + return result; + } + + int build(size_t key_size, + key_type **key, + size_t *length = 0, + value_type *value = 0, + int (*progress_func)(size_t, size_t) = 0) { + if (!key_size || !key) return 0; + + progress_func_ = progress_func; + key_ = key; + length_ = length; + key_size_ = key_size; + value_ = value; + progress_ = 0; + //lower down the value to build very large(1450K word) ucs2 darts. + resize(key_size_*64); //LMN: This line is the reason why word-item can not larger than 255 + + array_[0].base = 1; + next_check_pos_ = 0; + + node_t root_node; + root_node.left = 0; + root_node.right = key_size; + root_node.depth = 0; + + std::vector siblings; + fetch(root_node, siblings); + insert(siblings); + + size_ += (1 << 8 * sizeof(key_type)) + 1; + if (size_ >= alloc_size_) resize(size_); + + delete [] used_; + used_ = 0; + + return error_; + } + + int open(const char *file, + const char *mode = "rb", + size_t offset = 0, + size_t size = 0) { + std::FILE *fp = std::fopen(file, mode); + if (!fp) return -1; + if (std::fseek(fp, (long)offset, SEEK_SET) != 0) return -1; + + if (!size) { + if (std::fseek(fp, 0L, SEEK_END) != 0) return -1; + size = std::ftell(fp); + if (std::fseek(fp, (long)offset, SEEK_SET) != 0) return -1; + } + + clear(); + + size_ = size; + size_ /= sizeof(unit_t); + array_ = new unit_t[size_]; + if (size_ != std::fread(reinterpret_cast(array_), + sizeof(unit_t), size_, fp)) return -1; + std::fclose(fp); + + return 0; + } + + int save(const char *file, + const char *mode = "wb", + size_t offset = 0) { + if (!size_) return -1; + std::FILE *fp = std::fopen(file, mode); + if (!fp) return -1; + if (size_ != std::fwrite(reinterpret_cast(array_), + sizeof(unit_t), size_, fp)) + return -1; + std::fclose(fp); + return 0; + } + +#ifdef HAVE_ZLIB_H + int gzopen(const char *file, + const char *mode = "rb", + size_t offset = 0, + size_t size = 0) { + std::FILE *fp = std::fopen(file, mode); + if (!fp) return -1; + clear(); + + size_ = size; + if (!size_) { + if (-1L != static_cast(std::fseek(fp, -8, SEEK_END))) { + char buf[8]; + if (std::fread(static_cast(buf), + 1, 8, fp) != sizeof(buf)) { + std::fclose(fp); + return -1; + } + size_ = LG(buf+4); + size_ /= sizeof(unit_t); + } + } + std::fclose(fp); + + if (!size_) return -1; + + zlib::gzFile gzfp = zlib::gzopen(file, mode); + if (!gzfp) return -1; + array_ = new unit_t[size_]; + if (zlib::gzseek(gzfp, offset, SEEK_SET) != 0) return -1; + zlib::gzread(gzfp, reinterpret_cast(array_), + sizeof(unit_t) * size_); + zlib::gzclose(gzfp); + return 0; + } + + int gzsave(const char *file, const char *mode = "wb", + size_t offset = 0) { + zlib::gzFile gzfp = zlib::gzopen(file, mode); + if (!gzfp) return -1; + zlib::gzwrite(gzfp, reinterpret_cast(array_), + sizeof(unit_t) * size_); + zlib::gzclose(gzfp); + return 0; + } +#endif + + template + inline void exactMatchSearch(const key_type *key, + T & result, + size_t len = 0, + size_t node_pos = 0) const { + result = exactMatchSearch (key, len, node_pos); + return; + } + + template + inline T exactMatchSearch(const key_type *key, + size_t len = 0, + size_t node_pos = 0) const { + if (!len) len = length_func_()(key); + + T result; + set_result(result, -1, 0); + + register array_type_ b = array_[node_pos].base; + register array_u_type_ p; + + for (register size_t i = 0; i < len; ++i) { + p = b +(node_u_type_)(key[i]) + 1; + if (static_cast(b) == array_[p].check) + b = array_[p].base; + else + return result; + } + + p = b; + array_type_ n = array_[p].base; + if (static_cast(b) == array_[p].check && n < 0) + set_result(result, -n-1, len, p); + else + set_result(result, -n-1, len, -1*p); + return result; + } + + template + size_t commonPrefixSearch(const key_type *key, + T* result, + size_t result_len, + size_t len = 0, + size_t node_pos = 0) { + return commonPrefixSearch(key, 0xFFFF, result, result_len, len, node_pos); + } + + value_type traverse(const key_type *key, + size_t &node_pos, + size_t &key_pos, + size_t len = 0) { + if (!len) len = length_func_()(key); + + register array_type_ b = array_[node_pos].base; + register array_u_type_ p; + + for (; key_pos < len; ++key_pos) { + p = b +(node_u_type_)(key[key_pos]) + 1; + if (static_cast(b) == array_[p].check) { + node_pos = p; + b = array_[p].base; + } else { + return -2; // no node + } + } + + p = b; + array_type_ n = array_[p].base; + if (static_cast(b) == array_[p].check && n < 0) + return -n-1; + + return -1; // found, but no value + } + }; + +#if 4 == 2 + typedef Darts::DoubleArrayImpl DoubleArray; +#define SPH_DARTS_ARRAY_SIZE_IS_DEFINED 1 +#endif + +#if 4 == 4 && !defined(SPH_DARTS_ARRAY_SIZE_IS_DEFINED) + typedef SphDarts::DoubleArrayImpl DoubleArray; +#define SPH_DARTS_ARRAY_SIZE_IS_DEFINED 1 +#endif + +#if 4 == 4 && !defined(SPH_DARTS_ARRAY_SIZE_IS_DEFINED) + typedef SphDarts::DoubleArrayImpl DoubleArray; +#define SPH_DARTS_ARRAY_SIZE_IS_DEFINED 1 +#endif + +#if 4 == 8 && !defined(SPH_DARTS_ARRAY_SIZE_IS_DEFINED) + typedef SphDarts::DoubleArrayImpl DoubleArray; +#endif + typedef SphDarts::DoubleArrayImpl DoubleArrayUcs2; +} +#endif diff --git a/coreseek/csft-4.1/src/sphinx.cpp b/coreseek/csft-4.1/src/sphinx.cpp new file mode 100755 index 0000000..3ef0e50 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinx.cpp @@ -0,0 +1,24480 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxstem.h" +#include "sphinxquery.h" +#include "sphinxutils.h" +#include "sphinxexpr.h" +#include "sphinxfilter.h" +#include "sphinxint.h" +#include "sphinxsearch.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SPH_UNPACK_BUFFER_SIZE 4096 +#define SPH_READ_PROGRESS_CHUNK (8192*1024) +#define SPH_READ_NOPROGRESS_CHUNK (32768*1024) + +#if USE_LIBSTEMMER +#include "libstemmer.h" +#endif + +#if USE_LIBEXPAT +#define XMLIMPORT +#include "expat.h" + +// workaround for expat versions prior to 1.95.7 +#ifndef XMLCALL +#define XMLCALL +#endif +#endif + +#if USE_LIBXML +#include +#endif + +#if USE_LIBICONV +#include "iconv.h" +#endif + +#if USE_ZLIB +#include +#endif + +#if USE_ODBC +#include +#endif + +#if USE_WINDOWS + #include // for open() + + // workaround Windows quirks + #define popen _popen + #define pclose _pclose + #define snprintf _snprintf + #define sphSeek _lseeki64 + + #define stat _stat64 + #define fstat _fstat64 + #if _MSC_VER<1400 + #define struct_stat __stat64 + #else + #define struct_stat struct _stat64 + #endif + + #define ICONV_INBUF_CONST 1 +#else + #include + #include + + #define sphSeek lseek + + #define struct_stat struct stat +#endif + +#if ( USE_WINDOWS && USE_MYSQL ) + #pragma comment(linker, "/defaultlib:libmysql.lib") + #pragma message("Automatically linking with libmysql.lib") +#endif + +#if ( USE_WINDOWS && USE_PGSQL ) + #pragma comment(linker, "/defaultlib:libpq.lib") + #pragma message("Automatically linking with libpq.lib") +#endif + +#if ( USE_WINDOWS && USE_LIBSTEMMER ) + #pragma comment(linker, "/defaultlib:libstemmer_c.lib") + #pragma message("Automatically linking with libstemmer_c.lib") +#endif + +#if ( USE_WINDOWS && USE_LIBEXPAT ) + #pragma comment(linker, "/defaultlib:libexpat.lib") + #pragma message("Automatically linking with libexpat.lib") +#endif + +#if ( USE_WINDOWS && USE_LIBICONV ) + #pragma comment(linker, "/defaultlib:iconv.lib") + #pragma message("Automatically linking with iconv.lib") +#endif + +#if ( USE_WINDOWS && USE_LIBXML ) + #pragma comment(linker, "/defaultlib:libxml.lib") + #pragma message("Automatically linking with libxml.lib") +#endif + +#if ( USE_WINDOWS && USE_MMSEG ) + #pragma comment(linker, "/defaultlib:libcss.lib") + #pragma message("Automatically linking with libcss.lib") +#endif + + +///////////////////////////////////////////////////////////////////////////// + +typedef Hitman_c<8> HITMAN; + +// logf() is not there sometimes (eg. Solaris 9) +#if !USE_WINDOWS && !HAVE_LOGF +static inline float logf ( float v ) +{ + return (float) log ( v ); +} +#endif + +// forward decl +void sphWarn ( const char * sTemplate, ... ) __attribute__ ( ( format ( printf, 1, 2 ) ) ); +size_t sphReadThrottled ( int iFD, void * pBuf, size_t iCount ); +static bool sphTruncate ( int iFD ); + +///////////////////////////////////////////////////////////////////////////// +// GLOBALS +///////////////////////////////////////////////////////////////////////////// + +const char * SPHINX_DEFAULT_SBCS_TABLE = "0..9, A..Z->a..z, _, a..z, U+A8->U+B8, U+B8, U+C0..U+DF->U+E0..U+FF, U+E0..U+FF"; +const char * SPHINX_DEFAULT_UTF8_TABLE = "0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F"; + +const char * MAGIC_WORD_SENTENCE = "\3sentence"; // emitted from source on sentence boundary, stored in dictionary +const char * MAGIC_WORD_PARAGRAPH = "\3paragraph"; // emitted from source on paragraph boundary, stored in dictionary + +static const int DEFAULT_READ_BUFFER = 262144; +static const int DEFAULT_READ_UNHINTED = 32768; +static const int MIN_READ_BUFFER = 8192; +static const int MIN_READ_UNHINTED = 1024; + +static bool g_bSphQuiet = false; + +static int g_iReadBuffer = DEFAULT_READ_BUFFER; +static int g_iReadUnhinted = DEFAULT_READ_UNHINTED; + +// quick hack for indexer crash reporting +// one day, these might turn into a callback or something +int64_t g_iIndexerCurrentDocID = 0; +int64_t g_iIndexerCurrentHits = 0; +int64_t g_iIndexerCurrentRangeMin = 0; +int64_t g_iIndexerCurrentRangeMax = 0; +int64_t g_iIndexerPoolStartDocID = 0; +int64_t g_iIndexerPoolStartHit = 0; + +///////////////////////////////////////////////////////////////////////////// +// COMPILE-TIME CHECKS +///////////////////////////////////////////////////////////////////////////// + +STATIC_SIZE_ASSERT ( SphOffset_t, 8 ); + +///////////////////////////////////////////////////////////////////////////// +// INTERNAL PROFILER +///////////////////////////////////////////////////////////////////////////// + +#define SPH_INTERNAL_PROFILER 0 + +#if SPH_INTERNAL_PROFILER + +enum ESphTimer +{ + TIMER_root = 0, + + #define DECLARE_TIMER(_arg) TIMER_##_arg, + #include "sphinxtimers.h" + #undef DECLARE_TIMER + + TIMERS_TOTAL +}; + + +static const char * const g_dTimerNames [ TIMERS_TOTAL ] = +{ + "root", + + #define DECLARE_TIMER(_arg) #_arg, + #include "sphinxtimers.h" // NOLINT + #undef DECLARE_TIMER +}; + + +struct CSphTimer +{ + int64_t m_iMicroSec; ///< time as clocked raw + int m_iCalls; ///< number of times this timer was called + + int m_iChildrenCalls; ///< number of times all subtimers (children, grandchildren etc) of this timer were called + int64_t m_iMicroSecAdj; ///< guessed (!) time after timer costs adjustment, including subtimer costs + int64_t m_iMicroSecSelf; ///< guessed (!) self time + + ESphTimer m_eTimer; + int m_iParent; + int m_iChild; + int m_iNext; + int m_iPrev; + + CSphTimer () + { + Alloc ( TIMER_root, -1 ); + } + + void Alloc ( ESphTimer eTimer, int iParent ) + { + m_iParent = iParent; + m_iChild = -1; + m_iNext = -1; + m_iPrev = -1; + m_eTimer = eTimer; + m_iMicroSec = 0; + m_iMicroSecAdj = 0; + m_iCalls = 0; + m_iChildrenCalls = 0; + } + + void Start () + { + m_iMicroSec -= sphMicroTimer (); + m_iCalls++; + } + + void Stop () + { + m_iMicroSec += sphMicroTimer (); + } +}; + +static const int SPH_MAX_TIMERS = 128; +static const int SPH_TIMER_TRIALS = 16384; + +static int g_iTimer = -1; +static int g_iTimers = 0; +static CSphTimer g_dTimers [ SPH_MAX_TIMERS ]; +static int64_t g_iTimerTrialsWall = 0; + +void sphProfilerInit () +{ + assert ( g_iTimers==0 ); + assert ( g_iTimer==-1 ); + + // start root timer + g_iTimers = 1; + g_iTimer = 0; + g_dTimers[g_iTimer].Alloc ( TIMER_root, -1 ); + g_dTimers[g_iTimer].Start (); +} + + +void sphProfilerPush ( ESphTimer eTimer ) +{ + assert ( g_iTimer>=0 && g_iTimer0; iTimer=g_dTimers[iTimer].m_iNext ) + { + if ( g_dTimers[iTimer].m_eTimer==eTimer ) + break; + } + + // not found? let's alloc + if ( iTimer<0 ) + { + assert ( g_iTimers=0 ) + g_dTimers [ g_dTimers[g_iTimer].m_iChild ].m_iPrev = iTimer; + g_dTimers[g_iTimer].m_iChild = iTimer; + } + + // make it new current one + assert ( iTimer>0 ); + g_dTimers[iTimer].Start (); + g_iTimer = iTimer; +} + + +void sphProfilerPop ( ESphTimer eTimer ) +{ + assert ( g_iTimer>0 && g_iTimer=0 && g_iTimer0; iChild=g_dTimers[iChild].m_iNext ) + { + sphProfilerAdjust ( iChild ); + tTimer.m_iChildrenCalls += g_dTimers[iChild].m_iCalls + g_dTimers[iChild].m_iChildrenCalls; + } + + // adjust my raw time, remove all the timer costs from it + // my own costs are 1x sphMicroTimer() call per start/stop cycle + // subtimer costs are 2x sphMicroTimer() calls per start/stop cycle + tTimer.m_iMicroSecAdj = tTimer.m_iMicroSec - ( ( tTimer.m_iCalls + 2*tTimer.m_iChildrenCalls )*g_iTimerTrialsWall / SPH_TIMER_TRIALS ); + + // now calculate self time + // as adjusted time (all subtimer costs removed) minus all subtimer self time + tTimer.m_iMicroSecSelf = tTimer.m_iMicroSecAdj; + for ( int iChild=tTimer.m_iChild; iChild>0; iChild=g_dTimers[iChild].m_iNext ) + tTimer.m_iMicroSecSelf -= g_dTimers[iChild].m_iMicroSecSelf; +} + + +void sphProfilerDone () +{ + assert ( g_iTimers>0 ); + assert ( g_iTimer==0 ); + + // stop root timer + g_iTimers = 0; + g_iTimer = -1; + g_dTimers[0].Stop (); + + // bench adjustments + for ( int iRun=0; iRun<3; iRun++ ) + { + int64_t iTrial = sphMicroTimer(); + for ( int i=0; i0 && g_dTimers[iChild].m_iNext>0 ) + iChild = g_dTimers[iChild].m_iNext; + + while ( iChild>0 ) + { + sphProfilerShow ( iChild, 1+iLevel ); + iChild = g_dTimers[iChild].m_iPrev; + } + + if ( iTimer==0 ) + fprintf ( stdout, "---------------\n" ); +} + + +class CSphEasyTimer +{ +public: + explicit CSphEasyTimer ( ESphTimer eTimer ) + : m_eTimer ( eTimer ) + { + if ( g_iTimer>=0 ) + sphProfilerPush ( m_eTimer ); + } + + ~CSphEasyTimer () + { + if ( g_iTimer>=0 ) + sphProfilerPop ( m_eTimer ); + } + +protected: + ESphTimer m_eTimer; +}; + + +#define PROFILER_INIT() sphProfilerInit() +#define PROFILER_DONE() sphProfilerDone() +#define PROFILE_BEGIN(_arg) sphProfilerPush(TIMER_##_arg) +#define PROFILE_END(_arg) sphProfilerPop(TIMER_##_arg) +#define PROFILE_SHOW() sphProfilerShow() +#define PROFILE(_arg) CSphEasyTimer __t_##_arg ( TIMER_##_arg ); + +#else + +#define PROFILER_INIT() +#define PROFILER_DONE() +#define PROFILE_BEGIN(_arg) +#define PROFILE_END(_arg) +#define PROFILE_SHOW() +#define PROFILE(_arg) + +#endif // SPH_INTERNAL_PROFILER + +///////////////////////////////////////////////////////////////////////////// + +#if !USE_WINDOWS + +bool g_bHeadProcess = true; + +void sphSetProcessInfo ( bool bHead ) +{ + g_bHeadProcess = bHead; +} + +#endif // USE_WINDOWS + +static bool g_bIOStats = false; +static CSphIOStats g_IOStats; + + +void sphStartIOStats () +{ + g_bIOStats = true; + memset ( &g_IOStats, 0, sizeof ( g_IOStats ) ); +} + + +const CSphIOStats & sphStopIOStats () +{ + g_bIOStats = false; + return g_IOStats; +} + + +static size_t sphRead ( int iFD, void * pBuf, size_t iCount ) +{ + int64_t tmStart = 0; + if ( g_bIOStats ) + tmStart = sphMicroTimer(); + + size_t uRead = (size_t) ::read ( iFD, pBuf, iCount ); + + if ( g_bIOStats ) + { + g_IOStats.m_iReadTime += sphMicroTimer() - tmStart; + g_IOStats.m_iReadOps++; + g_IOStats.m_iReadBytes += iCount; + } + + return uRead; +} + + +static void GetFileStats ( const char * szFilename, CSphSavedFile & tInfo ); + +///////////////////////////////////////////////////////////////////////////// +// INTERNAL SPHINX CLASSES DECLARATIONS +///////////////////////////////////////////////////////////////////////////// + +CSphAutofile::CSphAutofile () + : m_iFD ( -1 ) + , m_bTemporary ( false ) + , m_pProgress ( NULL ) + , m_pStat ( NULL ) +{ +} + + +CSphAutofile::CSphAutofile ( const CSphString & sName, int iMode, CSphString & sError, bool bTemp ) + : m_iFD ( -1 ) + , m_bTemporary ( false ) + , m_pProgress ( NULL ) + , m_pStat ( NULL ) +{ + Open ( sName, iMode, sError, bTemp ); +} + + +CSphAutofile::~CSphAutofile () +{ + Close (); +} + + +int CSphAutofile::Open ( const CSphString & sName, int iMode, CSphString & sError, bool bTemp ) +{ + assert ( m_iFD==-1 && m_sFilename.IsEmpty () ); + assert ( !sName.IsEmpty() ); + + m_iFD = ::open ( sName.cstr(), iMode, 0644 ); + m_sFilename = sName; // not exactly sure why is this uncoditional. for error reporting later, i suppose + + if ( m_iFD<0 ) + sError.SetSprintf ( "failed to open %s: %s", sName.cstr(), strerror(errno) ); + else + m_bTemporary = bTemp; // only if we managed to actually open it + + return m_iFD; +} + + +void CSphAutofile::Close () +{ + if ( m_iFD>=0 ) + { + ::close ( m_iFD ); + if ( m_bTemporary ) + ::unlink ( m_sFilename.cstr() ); + } + + m_iFD = -1; + m_sFilename = ""; + m_bTemporary = false; +} + + +const char * CSphAutofile::GetFilename () const +{ + assert ( m_sFilename.cstr() ); + return m_sFilename.cstr(); +} + + +SphOffset_t CSphAutofile::GetSize ( SphOffset_t iMinSize, bool bCheckSizeT, CSphString & sError ) +{ + struct_stat st; + if ( stat ( GetFilename(), &st )<0 ) + { + sError.SetSprintf ( "failed to stat %s: %s", GetFilename(), strerror(errno) ); + return -1; + } + if ( st.st_size0 ) + { + int64_t iToReadOnce = ( m_pProgress && m_pStat ) + ? Min ( SPH_READ_PROGRESS_CHUNK, iToRead ) + : Min ( SPH_READ_NOPROGRESS_CHUNK, iToRead ); + int64_t iGot = (int64_t) sphRead ( GetFD(), pCur, (size_t)iToReadOnce ); + if ( iGot<=0 ) + break; + + iToRead -= iGot; + pCur += iGot; + + if ( m_pProgress && m_pStat ) + { + m_pStat->m_iBytes += iGot; + m_pProgress ( m_pStat, false ); + } + } + + if ( iToRead!=0 ) + { + sError.SetSprintf ( "read error in %s; "INT64_FMT" of "INT64_FMT" bytes read", + GetFilename(), iCount-iToRead, iCount ); + return false; + } + return true; +} + + +void CSphAutofile::SetProgressCallback ( CSphIndex::ProgressCallback_t * pfnProgress, CSphIndexProgress * pStat ) +{ + m_pProgress = pfnProgress; + m_pStat = pStat; +} + +///////////////////////////////////////////////////////////////////////////// + +/// array pointer which self-destructs when going out of scope, or on demand +template < typename T > class CSphAutoArray +{ +protected: + T * m_pData; +#ifndef NDEBUG + size_t m_iLength; // for pretty-printers to work +#endif + +public: + explicit CSphAutoArray ( int iCount ) +#ifndef NDEBUG + : m_iLength ( iCount ) +#endif + { m_pData = ( iCount>0 ) ? new T [ iCount ] : NULL; } + ~CSphAutoArray () { Reset (); } + + void Reset () { SafeDeleteArray ( m_pData ); } + + const CSphAutoArray & operator = ( const CSphAutoArray & ) { assert(0); return *this; } + operator T * () { return m_pData; } +}; + +///////////////////////////////////////////////////////////////////////////// + +/// generic stateless priority queue +template < typename T, typename COMP > class CSphQueue +{ +protected: + T * m_pData; + int m_iUsed; + int m_iSize; + +public: + /// ctor + explicit CSphQueue ( int iSize ) + : m_iUsed ( 0 ) + , m_iSize ( iSize ) + { + assert ( iSize>0 ); + m_pData = new T [ iSize ]; + assert ( m_pData ); + } + + /// dtor + virtual ~CSphQueue () + { + SafeDeleteArray ( m_pData ); + } + + /// add entry to the queue + virtual bool Push ( const T & tEntry ) + { + if ( m_iUsed==m_iSize ) + { + // if it's worse that current min, reject it, else pop off current min + if ( COMP::IsLess ( tEntry, m_pData[0] ) ) + return true; + else + Pop (); + } + + // do add + m_pData [ m_iUsed ] = tEntry; + int iEntry = m_iUsed++; + + // sift up if needed, so that worst (lesser) ones float to the top + while ( iEntry ) + { + int iParent = ( iEntry-1 ) >> 1; + if ( !COMP::IsLess ( m_pData[iEntry], m_pData[iParent] ) ) + break; + + // entry is less than parent, should float to the top + Swap ( m_pData[iEntry], m_pData[iParent] ); + iEntry = iParent; + } + + return true; + } + + /// remove root (ie. top priority) entry + virtual void Pop () + { + assert ( m_iUsed ); + if ( !(--m_iUsed) ) // empty queue? just return + return; + + // make the last entry my new root + m_pData[0] = m_pData[m_iUsed]; + + // sift down if needed + int iEntry = 0; + for ( ;; ) + { + // select child + int iChild = (iEntry<<1) + 1; + if ( iChild>=m_iUsed ) + break; + + // select smallest child + if ( iChild+10 ) + m_pDictBuf = new BYTE [iDictBufSize]; + } + + virtual ~DiskIndexQwordSetup_c() + { + SafeDeleteArray ( m_pDictBuf ); + } + + virtual ISphQword * QwordSpawn ( const XQKeyword_t & tWord ) const; + virtual bool QwordSetup ( ISphQword * ) const; + +protected: + template < class T > bool Setup ( ISphQword * ) const; +}; + + +#if USE_WINDOWS +#pragma warning(disable:4127) // conditional expr is const for MSVC +#endif + + +/// query word from the searcher's point of view +class DiskIndexQwordTraits_c : public ISphQword +{ + static const int MINIBUFFER_LEN = 1024; + +public: + SphOffset_t m_uHitPosition; + Hitpos_t m_uInlinedHit; + DWORD m_uHitState; + + bool m_bDupe; ///< whether the word occurs only once in current query + + CSphMatch m_tDoc; ///< current match (partial) + Hitpos_t m_iHitPos; ///< current hit postition, from hitlist + + BYTE m_dDoclistBuf [ MINIBUFFER_LEN ]; + BYTE m_dHitlistBuf [ MINIBUFFER_LEN ]; + CSphReader m_rdDoclist; ///< my doclist reader + CSphReader m_rdHitlist; ///< my hitlist reader + + SphDocID_t m_iMinID; ///< min ID to fixup + int m_iInlineAttrs; ///< inline attributes count + CSphRowitem * m_pInlineFixup; ///< inline attributes fixup (POINTER TO EXTERNAL DATA, NOT MANAGED BY THIS CLASS!) + +#ifndef NDEBUG + bool m_bHitlistOver; +#endif + +public: + explicit DiskIndexQwordTraits_c ( bool bUseMini, bool bExcluded ) + : m_uHitPosition ( 0 ) + , m_uHitState ( 0 ) + , m_bDupe ( false ) + , m_iHitPos () + , m_rdDoclist ( bUseMini ? m_dDoclistBuf : NULL, bUseMini ? MINIBUFFER_LEN : 0 ) + , m_rdHitlist ( bUseMini ? m_dHitlistBuf : NULL, bUseMini ? MINIBUFFER_LEN : 0 ) + , m_iMinID ( 0 ) + , m_iInlineAttrs ( 0 ) + , m_pInlineFixup ( NULL ) +#ifndef NDEBUG + , m_bHitlistOver ( true ) +#endif + { + m_iHitPos = EMPTY_HIT; + m_bExcluded = bExcluded; + } +}; + + +/// query word from the searcher's point of view +template < bool INLINE_HITS, bool INLINE_DOCINFO, bool DISABLE_HITLIST_SEEK > +class DiskIndexQword_c : public DiskIndexQwordTraits_c +{ +public: + explicit DiskIndexQword_c ( bool bUseMinibuffer, bool bExcluded ) + : DiskIndexQwordTraits_c ( bUseMinibuffer, bExcluded ) + { + } + + virtual void Reset () + { + m_uHitPosition = 0; + m_uHitState = 0; + m_rdDoclist.Reset (); + m_rdHitlist.Reset (); + ISphQword::Reset(); + m_iHitPos = EMPTY_HIT; + m_iInlineAttrs = 0; + } + + void GetHitlistEntry () + { + assert ( !m_bHitlistOver ); + DWORD iDelta = m_rdHitlist.UnzipInt (); + if ( iDelta ) + { + m_iHitPos += iDelta; + } else + { + m_iHitPos = EMPTY_HIT; +#ifndef NDEBUG + m_bHitlistOver = true; +#endif + } + } + + virtual void CollectHitMask() + { + SeekHitlist ( m_iHitlistPos ); + for ( Hitpos_t uHit = GetNextHit(); uHit!=EMPTY_HIT; uHit = GetNextHit() ) + m_dFields.Set ( HITMAN::GetField ( uHit ) ); + m_bAllFieldsKnown = true; + } + + virtual const CSphMatch & GetNextDoc ( DWORD * pDocinfo ) + { + SphDocID_t iDelta = m_rdDoclist.UnzipDocid(); + if ( iDelta ) + { + m_bAllFieldsKnown = false; + m_tDoc.m_iDocID += iDelta; + if ( INLINE_DOCINFO ) + { + assert ( pDocinfo ); + for ( int i=0; i> 1 ); + m_bAllFieldsKnown = true; + } else + { + m_dFields.Assign32 ( uFirst ); + m_uHitPosition += m_rdDoclist.UnzipOffset(); + m_iHitlistPos = m_uHitPosition; + } + } else + { + SphOffset_t iDeltaPos = m_rdDoclist.UnzipOffset(); + assert ( iDeltaPos>=0 ); + + m_iHitlistPos += iDeltaPos; + + m_dFields.Assign32 ( m_rdDoclist.UnzipInt() ); + m_uMatchHits = m_rdDoclist.UnzipInt(); + } + } else + { + m_tDoc.m_iDocID = 0; + } + return m_tDoc; + } + + virtual void SeekHitlist ( SphOffset_t uOff ) + { + if ( uOff >> 63 ) + { + m_uHitState = 1; + m_uInlinedHit = (DWORD)uOff; // truncate high dword + } else + { + m_uHitState = 0; + m_iHitPos = EMPTY_HIT; + if ( DISABLE_HITLIST_SEEK ) + assert ( m_rdHitlist.GetPos()==uOff ); // make sure we're where caller thinks we are. + else + m_rdHitlist.SeekTo ( uOff, READ_NO_SIZE_HINT ); + } +#ifndef NDEBUG + m_bHitlistOver = false; +#endif + } + + virtual Hitpos_t GetNextHit () + { + assert ( m_bHasHitlist ); + switch ( m_uHitState ) + { + case 0: // read hit from hitlist + GetHitlistEntry (); + return m_iHitPos; + + case 1: // return inlined hit + m_uHitState = 2; + return m_uInlinedHit; + + case 2: // return end-of-hitlist marker after inlined hit + #ifndef NDEBUG + m_bHitlistOver = true; + #endif + m_uHitState = 0; + return EMPTY_HIT; + } + sphDie ( "INTERNAL ERROR: impossible hit emitter state" ); + return EMPTY_HIT; + } +}; + +#if USE_WINDOWS +#pragma warning(default:4127) // conditional expr is const for MSVC +#endif + +////////////////////////////////////////////////////////////////////////////// + +#define WITH_QWORD(INDEX, NO_SEEK, NAME, ACTION) \ +{ \ + CSphIndex_VLN * pIndex = (CSphIndex_VLN *)INDEX; \ + DWORD uInlineHits = pIndex->m_tSettings.m_eHitFormat==SPH_HIT_FORMAT_INLINE; \ + DWORD uInlineDocinfo = pIndex->m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE; \ + \ + switch ( ( uInlineHits<<1 ) | uInlineDocinfo ) \ + { \ + case 0: { typedef DiskIndexQword_c < false, false, NO_SEEK > NAME; ACTION; break; } \ + case 1: { typedef DiskIndexQword_c < false, true, NO_SEEK > NAME; ACTION; break; } \ + case 2: { typedef DiskIndexQword_c < true, false, NO_SEEK > NAME; ACTION; break; } \ + case 3: { typedef DiskIndexQword_c < true, true, NO_SEEK > NAME; ACTION; break; } \ + default: \ + sphDie ( "INTERNAL ERROR: impossible qword settings" ); \ + } \ +} + +///////////////////////////////////////////////////////////////////////////// + +struct CSphWordlistCheckpoint +{ + union + { + SphWordID_t m_iWordID; + const char * m_sWord; + }; + SphOffset_t m_iWordlistOffset; + + int Cmp ( const char * sWord, int iLen, SphWordID_t iWordID, bool bWordDict ) const; + int CmpStrictly ( const char * sWord, int iLen, SphWordID_t iWordID, bool bWordDict ) const; +}; + +// pre-v11 wordlist checkpoint +struct CSphWordlistCheckpoint_v10 +{ + SphWordID_t m_iWordID; + DWORD m_iWordlistOffset; +}; + +///////////////////////////////////////////////////////////////////////////// + +/// ordinals accumulation and sorting +struct Ordinal_t +{ + SphDocID_t m_uDocID; ///< doc id + CSphString m_sValue; ///< string value +}; + + +struct OrdinalEntry_t : public Ordinal_t +{ + int m_iTag; +}; + + +struct OrdinalId_t +{ + SphDocID_t m_uDocID; + DWORD m_uId; +}; + + +struct OrdinalIdEntry_t : public OrdinalId_t +{ + int m_iTag; +}; + +void Swap ( Ordinal_t & a, Ordinal_t & b ) +{ + Swap ( a.m_uDocID, b.m_uDocID ); + Swap ( a.m_sValue, b.m_sValue ); +} + +void Swap ( OrdinalEntry_t & a, OrdinalEntry_t & b ) +{ + Swap ( a.m_uDocID, b.m_uDocID ); + Swap ( a.m_sValue, b.m_sValue ); + Swap ( a.m_iTag, b.m_iTag ); +} + +////////////////////////////////////////////////////////////////////////// + +static void ReadFileInfo ( CSphReader & tReader, const char * szFilename, CSphString & sWarning ) +{ + SphOffset_t uSize = tReader.GetOffset (); + SphOffset_t uCTime = tReader.GetOffset (); + SphOffset_t uMTime = tReader.GetOffset (); + DWORD uCRC32 = tReader.GetDword (); + + if ( szFilename && *szFilename ) + { + struct_stat tFileInfo; + if ( stat ( szFilename, &tFileInfo ) < 0 ) + sWarning.SetSprintf ( "failed to stat %s: %s", szFilename, strerror(errno) ); + else + { + DWORD uMyCRC32 = 0; + if ( !sphCalcFileCRC32 ( szFilename, uMyCRC32 ) ) + sWarning.SetSprintf ( "failed to calculate CRC32 for %s", szFilename ); + else + if ( uMyCRC32!=uCRC32 || tFileInfo.st_size!=uSize || tFileInfo.st_ctime!=uCTime || tFileInfo.st_mtime!=uMTime ) + sWarning.SetSprintf ( "'%s' differs from the original", szFilename ); + } + } +} + + +static void WriteFileInfo ( CSphWriter & tWriter, const CSphSavedFile & tInfo ) +{ + tWriter.PutOffset ( tInfo.m_uSize ); + tWriter.PutOffset ( tInfo.m_uCTime ); + tWriter.PutOffset ( tInfo.m_uMTime ); + tWriter.PutDword ( tInfo.m_uCRC32 ); +} + +static ISphBinlog * g_pBinlog; + +struct WordDictInfo_t +{ + CSphString m_sWord; + SphOffset_t m_uOff; + int m_iDocs; + int m_iHits; + int m_iDoclistHint; + + WordDictInfo_t (); +}; + +struct WordReaderContext_t +{ + BYTE m_sWord [ MAX_KEYWORD_BYTES ]; + int m_iLen; + + WordReaderContext_t(); +}; + + +// !COMMIT eliminate this, move it to proper dict impls +class CWordlist +{ +public: + int64_t m_iCheckpointsPos; ///< checkpoints offset + CSphFixedVector m_dCheckpoints; ///< checkpoint offsets + + CSphAutofile m_tFile; ///< file + int64_t m_iSize; ///< file size + CSphSharedBuffer m_pBuf; ///< my cache + int m_iMaxChunk; ///< max size of entry between checkpoints + + BYTE * m_pWords; ///< arena for checkpoint's words + +public: + CWordlist (); + ~CWordlist (); + void Reset (); + + bool ReadCP ( CSphAutofile & tFile, DWORD uVer, bool bWordDict, CSphString & sError ); + + const CSphWordlistCheckpoint * FindCheckpoint ( const char * sWord, int iWordLen, SphWordID_t iWordID, bool bStarMode ) const; + + const BYTE * GetWord ( const BYTE * pBuf, const char * pStr, int iLen, WordDictInfo_t & tWord, bool bStarMode, WordReaderContext_t & tCtx ) const; + bool GetWord ( const BYTE * pBuf, SphWordID_t iWordID, WordDictInfo_t & tWord ) const; + + const BYTE * AcquireDict ( const CSphWordlistCheckpoint * pCheckpoint, int iFD, BYTE * pDictBuf ) const; + void GetPrefixedWords ( const char * sWord, int iWordLen, CSphVector & dPrefixedWords, BYTE * pDictBuf, int iFD ) const; + +private: + bool m_bWordDict; +}; + +const int WORDLIST_CHECKPOINT = 64; ///< wordlist checkpoints frequency + + +/// this is my actual VLN-compressed phrase index implementation +class CSphIndex_VLN : public ISphIndex_VLN +{ + friend class DiskIndexQwordSetup_c; + friend class CSphMerger; + friend class AttrIndexBuilder_t; + +public: + explicit CSphIndex_VLN ( const char* sIndexName, const char * sFilename ); + ~CSphIndex_VLN (); + + virtual int Build ( const CSphVector & dSources, int iMemoryLimit, int iWriteBuffer ); + + virtual bool LoadHeader ( const char * sHeaderName, bool bStripPath, CSphString & sWarning ); + virtual bool WriteHeader ( CSphWriter & fdInfo, SphOffset_t iCheckpointsPos, DWORD iCheckpointCount ); + + virtual void DebugDumpHeader ( FILE * fp, const char * sHeaderName, bool bConfig ); + virtual void DebugDumpDocids ( FILE * fp ); + virtual void DebugDumpHitlist ( FILE * fp, const char * sKeyword, bool bID ); + virtual int DebugCheck ( FILE * fp ); + template void DumpHitlist ( FILE * fp, const char * sKeyword, bool bID ); + + virtual bool Prealloc ( bool bMlock, bool bStripPath, CSphString & sWarning ); + virtual bool Mlock (); + virtual void Dealloc (); + + virtual bool Preread (); + template bool PrereadSharedBuffer ( CSphSharedBuffer & pBuffer, const char * sExt, size_t uExpected=0, DWORD uOffset=0 ); + + virtual void SetBase ( const char * sNewBase ); + virtual bool Rename ( const char * sNewBase ); + + virtual bool Lock (); + virtual void Unlock (); + virtual void PostSetup() {} + + virtual bool MultiQuery ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const; + virtual bool MultiQueryEx ( int iQueries, const CSphQuery * pQueries, CSphQueryResult ** ppResults, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const; + virtual bool GetKeywords ( CSphVector & dKeywords, const char * szQuery, bool bGetStats, CSphString & sError ) const; + template bool DoGetKeywords ( CSphVector & dKeywords, const char * szQuery, bool bGetStats, CSphString & sError ) const; + + virtual bool Merge ( CSphIndex * pSource, CSphVector & dFilters, bool bMergeKillLists ); + template bool MergeWords ( CSphIndex_VLN * pSrcIndex, ISphFilter * pFilter ); + + virtual int UpdateAttributes ( const CSphAttrUpdate & tUpd, int iIndex, CSphString & sError ); + virtual bool SaveAttributes (); + virtual DWORD GetAttributeStatus () const; + + bool EarlyReject ( CSphQueryContext * pCtx, CSphMatch & tMatch ) const; + + virtual SphAttr_t * GetKillList () const; + virtual int GetKillListSize () const { return m_iKillListSize; } + virtual bool HasDocid ( SphDocID_t uDocid ) const; + + virtual const CSphSourceStats & GetStats () const { return m_tStats; } + + virtual void SetDynamize ( const CSphVector & dDynamize ); + +private: + + static const int MIN_WRITE_BUFFER = 262144; ///< min write buffer size + static const int DEFAULT_WRITE_BUFFER = 1048576; ///< default write buffer size + + static const DWORD INDEX_MAGIC_HEADER = 0x58485053; ///< my magic 'SPHX' header + static const DWORD INDEX_FORMAT_VERSION = 26; ///< my format version + +private: + // common stuff + CSphString m_sFilename; + int m_iLockFD; + + CSphMatch * m_pMin; ///< min attribute values tracker + CSphSourceStats m_tStats; ///< my stats + SphDocID_t m_iMergeInfinum; ///< minimal docid-1 for merging + +private: + // indexing-only + BYTE * m_pWriteBuffer; ///< my write buffer (for temp files) + int m_iWriteBuffer; ///< my write buffer size + + bool m_bWordDict; + bool m_bMerging; + CSphAggregateHit m_tLastHit; ///< hitlist entry + BYTE m_sLastKeyword [ MAX_KEYWORD_BYTES ]; + + SphOffset_t m_iLastHitlistPos; ///< doclist entry + SphOffset_t m_iLastHitlistDelta; ///< doclist entry + CSphSmallBitvec m_dLastDocFields; ///< doclist entry + DWORD m_uLastDocHits; ///< doclist entry + + SphOffset_t m_iLastWordDoclist; ///< wordlist entry + int m_iLastWordDocs; ///< wordlist entry + int m_iLastWordHits; ///< wordlist entry + + CSphWriter m_wrDoclist; ///< wordlist writer + CSphWriter m_wrHitlist; ///< hitlist writer + + CSphIndexProgress m_tProgress; + + CSphVector m_dHitlessWords; + + bool LoadHitlessWords (); + +private: + // searching-only, per-index + static const int DOCINFO_HASH_BITS = 18; // FIXME! make this configurable + + CSphSharedBuffer m_pDocinfo; ///< my docinfo cache + DWORD m_uDocinfo; ///< my docinfo cache size + CSphSharedBuffer m_pDocinfoHash; ///< hashed ids, to accelerate lookups + DWORD m_uDocinfoIndex; ///< docinfo "index" entries count (each entry is 2x docinfo rows, for min/max) + DWORD * m_pDocinfoIndex; ///< docinfo "index", to accelerate filtering during full-scan (2x rows for each block, and 2x rows for the whole index, 1+m_uDocinfoIndex entries) + + CSphSharedBuffer m_pMva; ///< my multi-valued attrs cache + CSphSharedBuffer m_pStrings; ///< my in-RAM strings cache + + CWordlist m_tWordlist; ///< my wordlist + + CSphSharedBuffer m_pKillList; ///< killlist + DWORD m_iKillListSize; ///< killlist size (in elements) + + DWORD m_uMinMaxIndex; ///< stored min/max cache offset (counted in DWORDs) + + CSphAutofile m_tDoclistFile; ///< doclist file + CSphAutofile m_tHitlistFile; ///< hitlist file + +#define SPH_SHARED_VARS_COUNT 2 + + DWORD * m_pPreread; + DWORD * m_pAttrsStatus; + CSphSharedBuffer m_dShared; ///< are we ready to search + + bool m_bPreallocated; ///< are we ready to preread + DWORD m_uVersion; ///< data files version + bool m_bUse64; ///< whether the header is id64 + + int m_iIndexTag; ///< my ids for MVA updates pool + static int m_iIndexTagSeq; ///< static ids sequence + int64_t m_iTID; ///< number of times when SaveAttributes called. + + bool m_bIsEmpty; ///< do we have actually indexed documents (m_iTotalDocuments is just fetched documents, not indexed!) + + CSphVector m_dDynamize; ///< string attributes that my parent RT index wants dynamized + +private: + CSphString GetIndexFileName ( const char * sExt ) const; + + int cidxWriteRawVLB ( int fd, CSphWordHit * pHit, int iHits, DWORD * pDocinfo, int Docinfos, int iStride ); + void cidxFinishDoclistEntry ( Hitpos_t uLastPos ); + void cidxHit ( CSphAggregateHit * pHit, CSphRowitem * pDocinfos ); + bool cidxDone ( const char * sHeaderExtension, int iMemLimit ); + + void WriteSchemaColumn ( CSphWriter & fdInfo, const CSphColumnInfo & tCol ); + void ReadSchemaColumn ( CSphReader & rdInfo, CSphColumnInfo & tCol ); + + bool ParsedMultiQuery ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const XQQuery_t & tXQ, CSphDict * pDict, const CSphVector * pExtraFilters, CSphQueryNodeCache * pNodeCache, int iTag ) const; + bool MultiScan ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const; + bool MatchExtended ( CSphQueryContext * pCtx, const CSphQuery * pQuery, int iSorters, ISphMatchSorter ** ppSorters, ISphRanker * pRanker, int iTag ) const; + + const DWORD * FindDocinfo ( SphDocID_t uDocID ) const; + void CopyDocinfo ( CSphQueryContext * pCtx, CSphMatch & tMatch, const DWORD * pFound ) const; + + bool BuildMVA ( const CSphVector & dSources, CSphAutoArray & dHits, int iArenaSize, int iFieldFD, int nFieldMVAs, int iFieldMVAInPool ); + + CSphDict * SetupStarDict ( CSphScopedPtr & tContainer, CSphDict * pPrevDict, ISphTokenizer & tTokenizer ) const; + CSphDict * SetupExactDict ( CSphScopedPtr & tContainer, CSphDict * pPrevDict, ISphTokenizer & tTokenizer ) const; + + void LoadSettings ( CSphReader & tReader ); + void SaveSettings ( CSphWriter & tWriter ); + + bool RelocateBlock ( int iFile, BYTE * pBuffer, int iRelocationSize, SphOffset_t * pFileSize, CSphBin * pMinBin, SphOffset_t * pSharedOffset ); + bool PrecomputeMinMax(); + +private: + static const int MAX_ORDINAL_STR_LEN = 4096; ///< maximum ordinal string length in bytes + static const int ORDINAL_READ_SIZE = 262144; ///< sorted ordinal id read buffer size in bytes + + ESphBinRead ReadOrdinal ( CSphBin & Reader, Ordinal_t & Ordinal ); + SphOffset_t DumpOrdinals ( CSphWriter & Writer, CSphVector & dOrdinals ); + bool SortOrdinals ( const char * szToFile, int iFromFD, int iArenaSize, int iOrdinalsInPool, CSphVector< CSphVector > & dOrdBlockSize, bool bWarnOfMem ); + bool SortOrdinalIds ( const char * szToFile, int iFromFD, int iArenaSize, CSphVector < CSphVector < SphOffset_t > > & dOrdBlockSize, bool bWarnOfMem ); + + const DWORD * GetMVAPool () const { return m_pMva.GetWritePtr(); } + bool LoadPersistentMVA ( CSphString & sError ); + + bool JuggleFile ( const char* szExt, bool bNeedOrigin=true ); + XQNode_t * DoExpansion ( XQNode_t * pNode, BYTE * pBuff, int iFD, CSphQueryResultMeta * pResult ) const; + XQNode_t * ExpandPrefix ( XQNode_t * pNode, CSphString & sError, CSphQueryResultMeta * pResult ) const; +}; + +int CSphIndex_VLN::m_iIndexTagSeq = 0; + +///////////////////////////////////////////////////////////////////////////// +// UTILITY FUNCTIONS +///////////////////////////////////////////////////////////////////////////// + +/// indexer warning +void sphWarn ( const char * sTemplate, ... ) +{ + va_list ap; + va_start ( ap, sTemplate ); + fprintf ( stdout, "WARNING: " ); + vfprintf ( stdout, sTemplate, ap ); + fprintf ( stdout, "\n" ); + va_end ( ap ); +} + +////////////////////////////////////////////////////////////////////////// + +/// microsecond precision timestamp +int64_t sphMicroTimer() +{ +#if USE_WINDOWS + // Windows time query + static int64_t iBase = 0; + static int64_t iStart = 0; + static int64_t iFreq = 0; + + LARGE_INTEGER iLarge; + if ( !iBase ) + { + // get start QPC value + QueryPerformanceFrequency ( &iLarge ); iFreq = iLarge.QuadPart; + QueryPerformanceCounter ( &iLarge ); iStart = iLarge.QuadPart; + + // get start UTC timestamp + // assuming it's still approximately the same moment as iStart, give or take a msec or three + FILETIME ft; + GetSystemTimeAsFileTime ( &ft ); + + iBase = ( int64_t(ft.dwHighDateTime)<<32 ) + int64_t(ft.dwLowDateTime); + iBase = ( iBase - 116444736000000000ULL ) / 10; // rebase from 01 Jan 1601 to 01 Jan 1970, and rescale to 1 usec from 100 ns + } + + // we can't easily drag iBase into parens because iBase*iFreq/1000000 overflows 64bit int! + QueryPerformanceCounter ( &iLarge ); + return iBase + ( iLarge.QuadPart - iStart )*1000000/iFreq; + +#else + // UNIX time query + struct timeval tv; + gettimeofday ( &tv, NULL ); + return int64_t(tv.tv_sec)*int64_t(1000000) + int64_t(tv.tv_usec); +#endif // USE_WINDOWS +} + +////////////////////////////////////////////////////////////////////////// + +static int g_iMaxIOps = 0; +static int g_iMaxIOSize = 0; +static int64_t g_tmLastIOTime = 0; + + +void sphSetThrottling ( int iMaxIOps, int iMaxIOSize ) +{ + g_iMaxIOps = iMaxIOps; + g_iMaxIOSize = iMaxIOSize; +} + + +static inline void sphThrottleSleep () +{ + if ( g_iMaxIOps>0 ) + { + int64_t tmTimer = sphMicroTimer(); + int64_t tmSleep = Max ( 0, g_tmLastIOTime + 1000000/g_iMaxIOps - tmTimer ); + sphSleepMsec ( (int)(tmSleep/1000) ); + g_tmLastIOTime = tmTimer + tmSleep; + } +} + + +bool sphWriteThrottled ( int iFD, const void * pBuf, int64_t iCount, const char * sName, CSphString & sError ) +{ + if ( iCount<=0 ) + return true; + + // by default, slice ios by at most 1 GB + int iChunkSize = ( 1UL<<30 ); + + // when there's a sane max_iosize (4K to 1GB), use it + if ( g_iMaxIOSize>=4096 ) + iChunkSize = Min ( iChunkSize, g_iMaxIOSize ); + + // while there's data, write it chunk by chunk + const BYTE * p = (const BYTE*) pBuf; + while ( iCount>0 ) + { + // wait for a timely occasion + sphThrottleSleep (); + + // write (and maybe time) + int64_t tmTimer = 0; + if ( g_bIOStats ) + tmTimer = sphMicroTimer(); + + int iToWrite = iChunkSize; + if ( iCount g_iMaxIOSize ) + { + size_t nChunks = iCount / g_iMaxIOSize; + size_t nBytesLeft = iCount % g_iMaxIOSize; + + size_t nBytesRead = 0; + size_t iRead = 0; + + for ( size_t i=0; i 0 ) + { + iRead = sphReadThrottled ( iFD, (char *)pBuf + nChunks*g_iMaxIOSize, nBytesLeft ); + nBytesRead += iRead; + if ( iRead!=nBytesLeft ) + return nBytesRead; + } + + return nBytesRead; + } + + sphThrottleSleep (); + return sphRead ( iFD, pBuf, iCount ); +} + +void SafeClose ( int & iFD ) +{ + if ( iFD>=0 ) + ::close ( iFD ); + iFD = -1; +} + +////////////////////////////////////////////////////////////////////////// + +#if !USE_WINDOWS +char * strlwr ( char * s ) +{ + while ( *s ) + { + *s = tolower ( *s ); + s++; + } + return s; +} +#endif + + +char * sphStrMacro ( const char * sTemplate, const char * sMacro, SphDocID_t uValue ) +{ + // expand macro + char sExp[32]; + snprintf ( sExp, sizeof(sExp), DOCID_FMT, uValue ); + + // calc lengths + int iExp = strlen ( sExp ); + int iMacro = strlen ( sMacro ); + int iDelta = iExp-iMacro; + + // calc result length + int iRes = strlen ( sTemplate ); + const char * sCur = sTemplate; + while ( ( sCur = strstr ( sCur, sMacro ) )!=NULL ) + { + iRes += iDelta; + sCur++; + } + + // build result + char * sRes = new char [ iRes+1 ]; + char * sOut = sRes; + const char * sLast = sTemplate; + sCur = sTemplate; + + while ( ( sCur = strstr ( sCur, sMacro ) )!=NULL ) + { + strncpy ( sOut, sLast, sCur-sLast ); sOut += sCur-sLast; + strcpy ( sOut, sExp ); sOut += iExp; // NOLINT + sCur += iMacro; + sLast = sCur; + } + + if ( *sLast ) + strcpy ( sOut, sLast ); // NOLINT + + assert ( (int)strlen(sRes)==iRes ); + return sRes; +} + + +float sphToFloat ( const char * s ) +{ + if ( !s ) return 0.0f; + return (float)strtod ( s, NULL ); +} + + +DWORD sphToDword ( const char * s ) +{ + if ( !s ) return 0; + return strtoul ( s, NULL, 10 ); +} + + +uint64_t sphToUint64 ( const char * s ) +{ + if ( !s ) return 0; + return strtoull ( s, NULL, 10 ); +} + + +int64_t sphToInt64 ( const char * s ) +{ + if ( !s ) return 0; + return strtoll ( s, NULL, 10 ); +} + + +#if USE_64BIT +#define sphToDocid sphToUint64 +#else +#define sphToDocid sphToDword +#endif + + +#if USE_WINDOWS + +bool sphLockEx ( int iFile, bool bWait ) +{ + HANDLE hHandle = (HANDLE) _get_osfhandle ( iFile ); + if ( hHandle!=INVALID_HANDLE_VALUE ) + { + OVERLAPPED tOverlapped; + memset ( &tOverlapped, 0, sizeof ( tOverlapped ) ); + return !!LockFileEx ( hHandle, LOCKFILE_EXCLUSIVE_LOCK | ( bWait ? 0 : LOCKFILE_FAIL_IMMEDIATELY ), 0, 1, 0, &tOverlapped ); + } + + return false; +} + +void sphLockUn ( int iFile ) +{ + HANDLE hHandle = (HANDLE) _get_osfhandle ( iFile ); + if ( hHandle!=INVALID_HANDLE_VALUE ) + { + OVERLAPPED tOverlapped; + memset ( &tOverlapped, 0, sizeof ( tOverlapped ) ); + UnlockFileEx ( hHandle, 0, 1, 0, &tOverlapped ); + } +} + +#else + +bool sphLockEx ( int iFile, bool bWait ) +{ + struct flock tLock; + tLock.l_type = F_WRLCK; + tLock.l_whence = SEEK_SET; + tLock.l_start = 0; + tLock.l_len = 0; + + int iCmd = bWait ? F_SETLKW : F_SETLK; // FIXME! check for HAVE_F_SETLKW? + return ( fcntl ( iFile, iCmd, &tLock )!=-1 ); +} + + +void sphLockUn ( int iFile ) +{ + struct flock tLock; + tLock.l_type = F_UNLCK; + tLock.l_whence = SEEK_SET; + tLock.l_start = 0; + tLock.l_len = 0; + + fcntl ( iFile, F_SETLK, &tLock ); +} +#endif + + +void sphSleepMsec ( int iMsec ) +{ + if ( iMsec<=0 ) + return; + +#if USE_WINDOWS + Sleep ( iMsec ); + +#else + struct timeval tvTimeout; + tvTimeout.tv_sec = iMsec / 1000; // full seconds + tvTimeout.tv_usec = ( iMsec % 1000 ) * 1000; // remainder is msec, so *1000 for usec + + select ( 0, NULL, NULL, NULL, &tvTimeout ); // FIXME? could handle EINTR +#endif +} + + +bool sphIsReadable ( const char * sPath, CSphString * pError ) +{ + int iFD = ::open ( sPath, O_RDONLY ); + + if ( iFD<0 ) + { + if ( pError ) + pError->SetSprintf ( "%s unreadable: %s", sPath, strerror(errno) ); + return false; + } + + close ( iFD ); + return true; +} + +void sphSetReadBuffers ( int iReadBuffer, int iReadUnhinted ) +{ + if ( iReadBuffer<=0 ) + iReadBuffer = DEFAULT_READ_BUFFER; + g_iReadBuffer = Max ( iReadBuffer, MIN_READ_BUFFER ); + + if ( iReadUnhinted<=0 ) + iReadUnhinted = DEFAULT_READ_UNHINTED; + g_iReadUnhinted = Max ( iReadUnhinted, MIN_READ_UNHINTED ); +} + +////////////////////////////////////////////////////////////////////////// +// DOCINFO +////////////////////////////////////////////////////////////////////////// + + +static DWORD * g_pMvaArena = NULL; ///< initialized by sphArenaInit() + + +// OPTIMIZE! try to inline or otherwise simplify maybe +const DWORD * CSphMatch::GetAttrMVA ( const CSphAttrLocator & tLoc, const DWORD * pPool ) const +{ + DWORD uIndex = MVA_DOWNSIZE ( GetAttr ( tLoc ) ); + if ( !uIndex ) + return NULL; + + if ( uIndex & MVA_ARENA_FLAG ) + return g_pMvaArena + ( uIndex & MVA_OFFSET_MASK ); + + assert ( pPool ); + return pPool + uIndex; +} + +///////////////////////////////////////////////////////////////////////////// +// TOKENIZERS +///////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS +#pragma warning(disable:4127) // conditional expr is const for MSVC +#pragma warning(disable:4530) // for ugly mmseg +#endif +inline int sphUTF8Decode ( BYTE * & pBuf ); // forward ref for GCC +inline int sphUTF8Encode ( BYTE * pBuf, int iCode ); // forward ref for GCC + +#if USE_MMSEG + +/// create UTF-8 tokenizer with Chinese Segment support +ISphTokenizer * sphCreateUTF8ChineseTokenizer ( const char* dict_path ); + +#endif + +/// synonym list entry +struct CSphSynonym +{ + CSphString m_sFrom; ///< specially packed list of map-from tokens + CSphString m_sTo; ///< map-to string + int m_iFromLen; ///< cached m_sFrom length + int m_iToLen; ///< cached m_sTo length + + inline bool operator < ( const CSphSynonym & rhs ) const + { + return strcmp ( m_sFrom.cstr(), rhs.m_sFrom.cstr() ) < 0; + } +}; + + +/// tokenizer implementation traits +template < bool IS_UTF8 > +class CSphTokenizerTraits : public ISphTokenizer +{ +public: + CSphTokenizerTraits (); + + virtual bool SetCaseFolding ( const char * sConfig, CSphString & sError ); + virtual bool LoadSynonyms ( const char * sFilename, CSphString & sError ); + virtual void CloneBase ( const CSphTokenizerTraits * pFrom, bool bEscaped ); + + virtual const char * GetTokenStart () const { return (const char *) m_pTokenStart; } + virtual const char * GetTokenEnd () const { return (const char *) m_pTokenEnd; } + virtual const char * GetBufferPtr () const { return (const char *) m_pCur; } + virtual const char * GetBufferEnd () const { return (const char *) m_pBufferMax; } + virtual void SetBufferPtr ( const char * sNewPtr ); + virtual int SkipBlended (); + +protected: + virtual bool IsSegment(const BYTE * ) { return true; } //mmseg: use to sep CJK characters + BYTE * GetTokenSyn (); + bool BlendAdjust ( BYTE * pPosition ); + BYTE * GetBlendedVariant (); + int CodepointArbitration ( int iCodepoint, bool bWasEscaped, bool bSpaceAhead ); + +protected: + /// get codepoint + inline int GetCodepoint () + { + if ( IS_UTF8 ) + { + while ( m_pCur=0 ) + return iCode; // succesful decode + } + return -1; // eof + } else + { + return m_pCur>=m_pBufferMax + ? -1 + : int ( *m_pCur++ ); + } + } + + /// accum codepoint + inline void AccumCodepoint ( int iCode ) + { + assert ( iCode>0 ); + assert ( m_iAccum>=0 ); + + // throw away everything which is over the token size + if ( m_iAccum=m_sAccum && m_pAccum m_dSynonyms; ///< active synonyms + CSphVector m_dSynStart; ///< map 1st byte to candidate range start + CSphVector m_dSynEnd; ///< map 1st byte to candidate range end + + BYTE * m_pBlendStart; + BYTE * m_pBlendEnd; +}; + + +/// single-byte charset tokenizer +class CSphTokenizer_SBCS : public CSphTokenizerTraits +{ +public: + CSphTokenizer_SBCS (); + + virtual void SetBuffer ( BYTE * sBuffer, int iLength ); + virtual BYTE * GetToken (); + virtual ISphTokenizer * Clone ( bool bEscaped ) const; + virtual bool IsUtf8 () const { return false; } + virtual int GetCodepointLength ( int ) const { return 1; } +}; + + +/// UTF-8 tokenizer +class CSphTokenizer_UTF8 : public CSphTokenizerTraits +{ +public: + CSphTokenizer_UTF8 (); + + virtual void SetBuffer ( BYTE * sBuffer, int iLength ); + virtual BYTE * GetToken (); + virtual ISphTokenizer * Clone ( bool bEscaped ) const; + virtual bool IsUtf8 () const { return true; } + virtual int GetCodepointLength ( int iCode ) const; + +protected: + void FlushAccum (); +}; + + +/// UTF-8 tokenizer with n-grams +class CSphTokenizer_UTF8Ngram : public CSphTokenizer_UTF8 +{ +public: + CSphTokenizer_UTF8Ngram () : m_iNgramLen ( 1 ) {} + +public: + virtual bool SetNgramChars ( const char * sConfig, CSphString & sError ); + virtual void SetNgramLen ( int iLen ); + virtual BYTE * GetToken (); + +protected: + int m_iNgramLen; + CSphString m_sNgramCharsStr; +}; + + +struct CSphMultiform +{ + CSphString m_sNormalForm; + int m_iNormalTokenLen; + CSphVector m_dTokens; +}; + + +struct CSphMultiforms +{ + int m_iMinTokens; + int m_iMaxTokens; + CSphVector m_dWordforms; +}; + + +struct CSphMultiformContainer +{ + CSphMultiformContainer () : m_iMaxTokens ( 0 ) {} + + int m_iMaxTokens; + typedef CSphOrderedHash < CSphMultiforms *, CSphString, CSphStrHashFunc, 131072, 117 > CSphMultiformHash; + CSphMultiformHash m_Hash; +}; + + +/// Token filter +class CSphTokenizer_Filter : public ISphTokenizer +{ +public: + CSphTokenizer_Filter ( ISphTokenizer * pTokenizer, const CSphMultiformContainer * pContainer ); + ~CSphTokenizer_Filter (); + + virtual bool SetCaseFolding ( const char * sConfig, CSphString & sError ) { return m_pTokenizer->SetCaseFolding ( sConfig, sError ); } + virtual void AddCaseFolding ( CSphRemapRange & tRange ) { m_pTokenizer->AddCaseFolding ( tRange ); } + virtual void AddSpecials ( const char * sSpecials ) { m_pTokenizer->AddSpecials ( sSpecials ); } + virtual bool SetIgnoreChars ( const char * sIgnored, CSphString & sError ) { return m_pTokenizer->SetIgnoreChars ( sIgnored, sError ); } + virtual bool SetNgramChars ( const char * sConfig, CSphString & sError ) { return m_pTokenizer->SetNgramChars ( sConfig, sError ); } + virtual void SetNgramLen ( int iLen ) { m_pTokenizer->SetNgramLen ( iLen ); } + virtual bool LoadSynonyms ( const char * sFilename, CSphString & sError ) { return m_pTokenizer->LoadSynonyms ( sFilename, sError ); } + virtual bool SetBoundary ( const char * sConfig, CSphString & sError ) { return m_pTokenizer->SetBoundary ( sConfig, sError ); } + virtual void Setup ( const CSphTokenizerSettings & tSettings ) { m_pTokenizer->Setup ( tSettings ); } + virtual const CSphTokenizerSettings & GetSettings () const { return m_pTokenizer->GetSettings (); } + virtual const CSphSavedFile & GetSynFileInfo () const { return m_pTokenizer->GetSynFileInfo (); } + virtual bool EnableSentenceIndexing ( CSphString & sError ) { return m_pTokenizer->EnableSentenceIndexing ( sError ); } + virtual bool EnableZoneIndexing ( CSphString & sError ) { return m_pTokenizer->EnableZoneIndexing ( sError ); } + +public: + virtual void SetBuffer ( BYTE * sBuffer, int iLength ); + virtual BYTE * GetToken (); + virtual int GetCodepointLength ( int iCode ) const { return m_pTokenizer->GetCodepointLength ( iCode ); } + virtual void EnableQueryParserMode ( bool bEnable ) { m_pTokenizer->EnableQueryParserMode ( bEnable ); } + virtual void EnableTokenizedMultiformTracking () { m_bBuildMultiform = true; } + virtual int GetLastTokenLen () const { return m_pLastToken->m_iTokenLen; } + virtual bool GetBoundary () { return m_pLastToken->m_bBoundary; } + virtual bool WasTokenSpecial () { return m_pLastToken->m_bSpecial; } + virtual int GetOvershortCount () { return m_pLastToken->m_iOvershortCount; } + virtual BYTE * GetTokenizedMultiform () { return m_sTokenizedMultiform[0] ? m_sTokenizedMultiform : NULL; } + +public: + virtual ISphTokenizer * Clone ( bool bEscaped ) const; + virtual bool IsUtf8 () const { return m_pTokenizer->IsUtf8 (); } + virtual const char * GetTokenStart () const { return m_pLastToken->m_szTokenStart; } + virtual const char * GetTokenEnd () const { return m_pLastToken->m_szTokenEnd; } + virtual const char * GetBufferPtr () const { return m_pLastToken ? m_pLastToken->m_pBufferPtr : m_pTokenizer->GetBufferPtr(); } + virtual const char * GetBufferEnd () const { return m_pTokenizer->GetBufferEnd (); } + virtual void SetBufferPtr ( const char * sNewPtr ); + +private: + ISphTokenizer * m_pTokenizer; + const CSphMultiformContainer * m_pMultiWordforms; + int m_iStoredStart; + int m_iStoredLen; + + bool m_bBuildMultiform; + BYTE m_sTokenizedMultiform [ 3*SPH_MAX_WORD_LEN+4 ]; + BYTE m_sOutMultiform [ 3*SPH_MAX_WORD_LEN+4 ]; + + struct StoredToken_t + { + BYTE m_sToken [3*SPH_MAX_WORD_LEN+4]; + int m_iTokenLen; + bool m_bBoundary; + bool m_bSpecial; + int m_iOvershortCount; + const char * m_szTokenStart; + const char * m_szTokenEnd; + const char * m_pBufferPtr; + }; + + CSphVector m_dStoredTokens; + StoredToken_t m_tLastToken; + StoredToken_t * m_pLastToken; + + void FillTokenInfo ( StoredToken_t * pToken ); +}; + +///////////////////////////////////////////////////////////////////////////// + +#if USE_MMSEG +#include "tokenizer_zhcn.h" + + +class CSphTokenizer_UTF8MMSeg : public CSphTokenizer_UTF8 +{ + +public: + CSphTokenizer_UTF8MMSeg (); + ~CSphTokenizer_UTF8MMSeg () { + if(d_) delete d_; + } + virtual void SetBuffer ( BYTE * sBuffer, int iLength ); + virtual BYTE * GetToken (); + + virtual ISphTokenizer * Clone ( bool bEscaped ) const; + + void setDictPath(const char* path) { m_dictpath = path; } +public: + virtual const BYTE* GetThesaurus(BYTE * sBuffer, int iLength ); + + virtual const char * GetBufferPtr () const { + return (const char *) m_pCur; + } + + virtual const char * GetTokenStart () const { + return m_segToken; + } + + virtual int GetLastTokenLen () const { return m_iLastTokenLenMMSeg; } + +protected: + char* m_segToken; + +protected: + virtual bool IsSegment(const BYTE * pCur); + CSphString m_dictpath; + BYTE m_sAccumSeg [ 3*SPH_MAX_WORD_LEN+3 ]; ///< folded token accumulator + BYTE * m_pAccumSeg; ///< current accumulator position +protected: + CSphTokenizer_zh_CN_UTF8_Private* d_; + size_t m_segoffset; + int m_iLastTokenLenMMSeg; ///< last token length, in codepoints +}; + +#endif + +#if USE_WINDOWS +#pragma warning(default:4127) // conditional expr is const +#endif + +///////////////////////////////////////////////////////////////////////////// + +ISphTokenizer * sphCreateSBCSTokenizer () +{ + return new CSphTokenizer_SBCS (); +} + + +ISphTokenizer * sphCreateUTF8Tokenizer () +{ + return new CSphTokenizer_UTF8 (); +} + +ISphTokenizer * sphCreateUTF8NgramTokenizer () +{ + return new CSphTokenizer_UTF8Ngram (); +} + +#if USE_MMSEG + +ISphTokenizer * sphCreateUTF8ChineseTokenizer ( const char* dict_path ) +{ + CSphTokenizer_UTF8MMSeg* tokenizer = new CSphTokenizer_UTF8MMSeg (); + tokenizer->setDictPath(dict_path); + return tokenizer; +} + +#endif + +///////////////////////////////////////////////////////////////////////////// + +enum +{ + MASK_CODEPOINT = 0x00ffffffUL, // mask off codepoint flags + MASK_FLAGS = 0xff000000UL, // mask off codepoint value + FLAG_CODEPOINT_SPECIAL = 0x01000000UL, // this codepoint is special + FLAG_CODEPOINT_DUAL = 0x02000000UL, // this codepoint is special but also a valid word part + FLAG_CODEPOINT_NGRAM = 0x04000000UL, // this codepoint is n-gram indexed + FLAG_CODEPOINT_SYNONYM = 0x08000000UL, // this codepoint is used in synonym tokens only + FLAG_CODEPOINT_BOUNDARY = 0x10000000UL, // this codepoint is phrase boundary + FLAG_CODEPOINT_IGNORE = 0x20000000UL, // this codepoint is ignored + FLAG_CODEPOINT_BLEND = 0x40000000UL // this codepoint is "blended" (indexed both as a character, and as a separator) +}; + + +CSphLowercaser::CSphLowercaser () + : m_pData ( NULL ) +{ +} + + +void CSphLowercaser::Reset() +{ + m_iChunks = 0; + for ( int i=0; im_iChunks; + m_pData = new int [ m_iChunks*CHUNK_SIZE ]; + memcpy ( m_pData, pLC->m_pData, sizeof(int)*m_iChunks*CHUNK_SIZE ); // NOLINT sizeof(int) + + for ( int i=0; im_pChunk[i] + ? pLC->m_pChunk[i] - pLC->m_pData + m_pData + : NULL; +} + + +void CSphLowercaser::AddRemaps ( const CSphVector & dRemaps, DWORD uFlags ) +{ + if ( !dRemaps.GetLength() ) + return; + + // build new chunks map + // 0 means "was unused" + // 1 means "was used" + // 2 means "is used now" + int dUsed [ CHUNK_COUNT ]; + for ( int i=0; i=0 && (_a)> CHUNK_BITS ); iChunk<=( tRemap.m_iEnd >> CHUNK_BITS ); iChunk++ ) + if ( dUsed[iChunk]==0 ) + { + dUsed[iChunk] = 2; + iNewChunks++; + } + } + + // alloc new tables and copy, if necessary + if ( iNewChunks>m_iChunks ) + { + int * pData = new int [ iNewChunks*CHUNK_SIZE ]; + memset ( pData, 0, sizeof(int)*iNewChunks*CHUNK_SIZE ); // NOLINT sizeof(int) + + int * pChunk = pData; + for ( int i=0; i> CHUNK_BITS ] ); + int & iCodepoint = m_pChunk [ j >> CHUNK_BITS ] [ j & CHUNK_MASK ]; + bool bWordPart = ( iCodepoint & MASK_CODEPOINT ) && !( iCodepoint & FLAG_CODEPOINT_SYNONYM ); + int iNew = iRemapped | uFlags | ( iCodepoint & MASK_FLAGS ); + iCodepoint = bWordPart ? ( iNew | FLAG_CODEPOINT_DUAL ) : iNew; + + // new code-point flag removes SYNONYM + if ( ( iCodepoint & FLAG_CODEPOINT_SYNONYM ) && uFlags==0 && iRemapped!=0 ) + iCodepoint &= ~FLAG_CODEPOINT_SYNONYM; + } + } +} + + +void CSphLowercaser::AddSpecials ( const char * sSpecials ) +{ + assert ( sSpecials ); + int iSpecials = strlen(sSpecials); + + CSphVector dRemaps; + dRemaps.Resize ( iSpecials ); + ARRAY_FOREACH ( i, dRemaps ) + dRemaps[i].m_iStart = dRemaps[i].m_iEnd = dRemaps[i].m_iRemapStart = sSpecials[i]; + + AddRemaps ( dRemaps, FLAG_CODEPOINT_SPECIAL ); +} + +const CSphLowercaser & CSphLowercaser::operator = ( const CSphLowercaser & rhs ) +{ + SetRemap ( &rhs ); + return * this; +} + +uint64_t CSphLowercaser::GetFNV () const +{ + int iLen = ( sizeof(int) * m_iChunks * CHUNK_SIZE ) / sizeof(BYTE); // NOLINT + return sphFNV64 ( (BYTE *)m_pData, iLen ); +} + +///////////////////////////////////////////////////////////////////////////// + +/// parser to build lowercaser from textual config +class CSphCharsetDefinitionParser +{ +public: + CSphCharsetDefinitionParser () : m_bError ( false ) {} + bool Parse ( const char * sConfig, CSphVector & dRanges ); + const char * GetLastError (); + +protected: + bool m_bError; + char m_sError [ 1024 ]; + const char * m_pCurrent; + + bool Error ( const char * sMessage ); + void SkipSpaces (); + bool IsEof (); + bool CheckEof (); + int HexDigit ( int c ); + int ParseCharsetCode (); +}; + + +const char * CSphCharsetDefinitionParser::GetLastError () +{ + return m_bError ? m_sError : NULL; +} + + +bool CSphCharsetDefinitionParser::IsEof () +{ + return ( *m_pCurrent )==0; +} + + +bool CSphCharsetDefinitionParser::CheckEof () +{ + if ( IsEof() ) + { + Error ( "unexpected end of line" ); + return true; + } else + { + return false; + } +} + + +bool CSphCharsetDefinitionParser::Error ( const char * sMessage ) +{ + char sErrorBuffer[32]; + strncpy ( sErrorBuffer, m_pCurrent, sizeof(sErrorBuffer) ); + sErrorBuffer [ sizeof(sErrorBuffer)-1 ] = '\0'; + + snprintf ( m_sError, sizeof(m_sError), "%s near '%s'", + sMessage, sErrorBuffer ); + m_sError [ sizeof(m_sError)-1 ] = '\0'; + + m_bError = true; + return false; +} + + +int CSphCharsetDefinitionParser::HexDigit ( int c ) +{ + if ( c>='0' && c<='9' ) return c-'0'; + if ( c>='a' && c<='f' ) return c-'a'+10; + if ( c>='A' && c<='F' ) return c-'A'+10; + return 0; +} + + +void CSphCharsetDefinitionParser::SkipSpaces () +{ + while ( ( *m_pCurrent ) && isspace ( (BYTE)*m_pCurrent ) ) + m_pCurrent++; +} + + +int CSphCharsetDefinitionParser::ParseCharsetCode () +{ + const char * p = m_pCurrent; + int iCode = 0; + + if ( p[0]=='U' && p[1]=='+' ) + { + p += 2; + while ( isxdigit(*p) ) + { + iCode = iCode*16 + HexDigit ( *p++ ); + } + while ( isspace(*p) ) + p++; + + } else + { + if ( (*(BYTE*)p)<32 || (*(BYTE*)p)>127 ) + { + Error ( "non-ASCII characters not allowed, use 'U+00AB' syntax" ); + return -1; + } + + iCode = *p++; + while ( isspace(*p) ) + p++; + } + + m_pCurrent = p; + return iCode; +} + + +bool CSphCharsetDefinitionParser::Parse ( const char * sConfig, CSphVector & dRanges ) +{ + m_pCurrent = sConfig; + dRanges.Reset (); + + // do parse + while ( *m_pCurrent ) + { + SkipSpaces (); + if ( IsEof () ) + break; + + // check for stray comma + if ( *m_pCurrent==',' ) + return Error ( "stray ',' not allowed, use 'U+002C' instead" ); + + // parse char code + const char * pStart = m_pCurrent; + int iStart = ParseCharsetCode(); + if ( iStart<0 ) + return false; + + // stray char? + if ( !*m_pCurrent || *m_pCurrent==',' ) + { + // stray char + dRanges.Add ( CSphRemapRange ( iStart, iStart, iStart ) ); + if ( IsEof () ) + break; + m_pCurrent++; + continue; + } + + // stray remap? + if ( m_pCurrent[0]=='-' && m_pCurrent[1]=='>' ) + { + // parse and add + m_pCurrent += 2; + int iDest = ParseCharsetCode (); + if ( iDest<0 ) + return false; + dRanges.Add ( CSphRemapRange ( iStart, iStart, iDest ) ); + + // it's either end of line now, or must be followed by comma + if ( *m_pCurrent ) + if ( *m_pCurrent++!=',' ) + return Error ( "syntax error" ); + continue; + } + + // range start? + if (!( m_pCurrent[0]=='.' && m_pCurrent[1]=='.' )) + return Error ( "syntax error" ); + m_pCurrent += 2; + + SkipSpaces (); + if ( CheckEof () ) + return false; + + // parse range end char code + int iEnd = ParseCharsetCode (); + if ( iEnd<0 ) + return false; + if ( iStart>iEnd ) + { + m_pCurrent = pStart; + return Error ( "range end less than range start" ); + } + + // stray range? + if ( !*m_pCurrent || *m_pCurrent==',' ) + { + dRanges.Add ( CSphRemapRange ( iStart, iEnd, iStart ) ); + if ( IsEof () ) + break; + m_pCurrent++; + continue; + } + + // "checkerboard" range? + if ( m_pCurrent[0]=='/' && m_pCurrent[1]=='2' ) + { + for ( int i=iStart; i' )) + return Error ( "expected end of line, ',' or '->'" ); + m_pCurrent += 2; + + SkipSpaces (); + if ( CheckEof () ) + return false; + + // parse dest start + const char * pRemapStart = m_pCurrent; + int iRemapStart = ParseCharsetCode (); + if ( iRemapStart<0 ) + return false; + + // expect '..' + if ( CheckEof () ) + return false; + if (!( m_pCurrent[0]=='.' && m_pCurrent[1]=='.' )) + return Error ( "expected '..'" ); + m_pCurrent += 2; + + // parse dest end + int iRemapEnd = ParseCharsetCode (); + if ( iRemapEnd<0 ) + return false; + + // check dest range + if ( iRemapStart>iRemapEnd ) + { + m_pCurrent = pRemapStart; + return Error ( "dest range end less than dest range start" ); + } + + // check for length mismatch + if ( ( iRemapEnd-iRemapStart )!=( iEnd-iStart ) ) + { + m_pCurrent = pStart; + return Error ( "dest range length must match src range length" ); + } + + // remapped ok + dRanges.Add ( CSphRemapRange ( iStart, iEnd, iRemapStart ) ); + if ( IsEof () ) + break; + if ( *m_pCurrent!=',' ) + return Error ( "expected ','" ); + m_pCurrent++; + } + + dRanges.Sort (); + for ( int i=0; i=dRanges[i+1].m_iStart ) + { + // FIXME! add an ambiguity check + dRanges[i].m_iEnd = Max ( dRanges[i].m_iEnd, dRanges[i+1].m_iEnd ); + dRanges.Remove ( i+1 ); + i--; + } + } + + return true; +} + +////////////////////////////////////////////////////////////////////////// + +bool sphParseCharset ( const char * sCharset, CSphVector & dRemaps ) +{ + CSphCharsetDefinitionParser tParser; + return tParser.Parse ( sCharset, dRemaps ); +} + +///////////////////////////////////////////////////////////////////////////// + +CSphSavedFile::CSphSavedFile () + : m_uSize ( 0 ) + , m_uCTime ( 0 ) + , m_uMTime ( 0 ) + , m_uCRC32 ( 0 ) +{ +} + + +CSphTokenizerSettings::CSphTokenizerSettings () + : m_iType ( TOKENIZER_SBCS ) + , m_iMinWordLen ( 1 ) + , m_iNgramLen ( 0 ) + , m_iDebug ( 0 ) +{ +} + + +static void LoadTokenizerSettings ( CSphReader & tReader, CSphTokenizerSettings & tSettings, DWORD uVersion, CSphString & sWarning ) +{ + if ( uVersion<9 ) + return; + + tSettings.m_iType = tReader.GetByte (); + tSettings.m_sCaseFolding = tReader.GetString (); + tSettings.m_iMinWordLen = tReader.GetDword (); + tSettings.m_sSynonymsFile = tReader.GetString (); + ReadFileInfo ( tReader, tSettings.m_sSynonymsFile.cstr (), sWarning ); + tSettings.m_sBoundary = tReader.GetString (); + tSettings.m_sIgnoreChars = tReader.GetString (); + tSettings.m_iNgramLen = tReader.GetDword (); + tSettings.m_sNgramChars = tReader.GetString (); + tSettings.m_sDictPath = tReader.GetString (); //mmseg + if ( uVersion>=15 ) + tSettings.m_sBlendChars = tReader.GetString (); + if ( uVersion>=24 ) + tSettings.m_sBlendMode = tReader.GetString(); +} + + +static void SaveTokenizerSettings ( CSphWriter & tWriter, ISphTokenizer * pTokenizer ) +{ + assert ( pTokenizer ); + + const CSphTokenizerSettings & tSettings = pTokenizer->GetSettings (); + tWriter.PutByte ( tSettings.m_iType ); + tWriter.PutString ( tSettings.m_sCaseFolding.cstr () ); + tWriter.PutDword ( tSettings.m_iMinWordLen ); + tWriter.PutString ( tSettings.m_sSynonymsFile.cstr () ); + WriteFileInfo ( tWriter, pTokenizer->GetSynFileInfo () ); + tWriter.PutString ( tSettings.m_sBoundary.cstr () ); + tWriter.PutString ( tSettings.m_sIgnoreChars.cstr () ); + tWriter.PutDword ( tSettings.m_iNgramLen ); + tWriter.PutString ( tSettings.m_sNgramChars.cstr () ); + tWriter.PutString ( tSettings.m_sDictPath.cstr() ); //mmseg + tWriter.PutString ( tSettings.m_sBlendChars.cstr () ); + tWriter.PutString ( tSettings.m_sBlendMode.cstr () ); +} + + +void LoadDictionarySettings ( CSphReader & tReader, CSphDictSettings & tSettings, DWORD uVersion, CSphString & sWarning ) +{ + if ( uVersion<9 ) + return; + + tSettings.m_sMorphology = tReader.GetString (); + tSettings.m_sStopwords = tReader.GetString (); + int nFiles = tReader.GetDword (); + + CSphString sFile; + for ( int i = 0; i < nFiles; i++ ) + { + sFile = tReader.GetString (); + ReadFileInfo ( tReader, sFile.cstr (), sWarning ); + } + + tSettings.m_sWordforms = tReader.GetString (); + ReadFileInfo ( tReader, tSettings.m_sWordforms.cstr (), sWarning ); + + if ( uVersion>=13 ) + tSettings.m_iMinStemmingLen = tReader.GetDword (); + + tSettings.m_bWordDict = false; // default to crc for old indexes + if ( uVersion>=21 ) + tSettings.m_bWordDict = ( tReader.GetByte()!=0 ); +} + + +void SaveDictionarySettings ( CSphWriter & tWriter, CSphDict * pDict ) +{ + const CSphDictSettings & tSettings = pDict->GetSettings (); + + tWriter.PutString ( tSettings.m_sMorphology.cstr () ); + tWriter.PutString ( tSettings.m_sStopwords.cstr () ); + const CSphVector & dSWFileInfos = pDict->GetStopwordsFileInfos (); + tWriter.PutDword ( dSWFileInfos.GetLength () ); + ARRAY_FOREACH ( i, dSWFileInfos ) + { + tWriter.PutString ( dSWFileInfos[i].m_sFilename.cstr () ); + WriteFileInfo ( tWriter, dSWFileInfos[i] ); + } + + const CSphSavedFile & tWFFileInfo = pDict->GetWordformsFileInfo (); + + tWriter.PutString ( tSettings.m_sWordforms.cstr () ); + WriteFileInfo ( tWriter, tWFFileInfo ); + + tWriter.PutDword ( tSettings.m_iMinStemmingLen ); + tWriter.PutByte ( tSettings.m_bWordDict ); +} + + +static inline bool ShortTokenFilter ( BYTE * pToken, int iLen ) +{ + return pToken[0]=='*' || ( iLen > 0 && pToken[iLen-1]=='*' ); +} + +///////////////////////////////////////////////////////////////////////////// + +ISphTokenizer::ISphTokenizer () + : m_iLastTokenLen ( 0 ) + , m_bTokenBoundary ( false ) + , m_bBoundary ( false ) + , m_bWasSpecial ( false ) + , m_bEscaped ( false ) + , m_iOvershortCount ( 0 ) + , m_bBlended ( false ) + , m_bNonBlended ( true ) + , m_bBlendedPart ( false ) + , m_bBlendAdd ( false ) + , m_uBlendVariants ( BLEND_TRIM_NONE ) + , m_uBlendVariantsPending ( 0 ) + , m_bBlendSkipPure ( false ) + , m_bShortTokenFilter ( false ) + , m_bQueryMode ( false ) + , m_bDetectSentences ( false ) + , m_bPhrase ( false ) +{} + + +bool ISphTokenizer::SetCaseFolding ( const char * sConfig, CSphString & sError ) +{ + CSphVector dRemaps; + CSphCharsetDefinitionParser tParser; + if ( !tParser.Parse ( sConfig, dRemaps ) ) + { + sError = tParser.GetLastError(); + return false; + } + + m_tLC.Reset (); + m_tLC.AddRemaps ( dRemaps, 0 ); + return true; +} + + +void ISphTokenizer::AddCaseFolding ( CSphRemapRange & tRange ) +{ + CSphVector dTmp; + dTmp.Add ( tRange ); + m_tLC.AddRemaps ( dTmp, 0 ); +} + + +void ISphTokenizer::AddSpecials ( const char * sSpecials ) +{ + m_tLC.AddSpecials ( sSpecials ); +} + + +static int TokenizeOnWhitespace ( CSphVector & dTokens, BYTE * sFrom, bool bUtf8 ) +{ + BYTE sAccum [ 3*SPH_MAX_WORD_LEN+16 ]; + BYTE * pAccum = sAccum; + int iAccum = 0; + + for ( ;; ) + { + int iCode = bUtf8 ? sphUTF8Decode(sFrom) : *sFrom++; + + // eof or whitespace? + if ( !iCode || sphIsSpace(iCode) ) + { + // flush accum + if ( iAccum ) + { + *pAccum = '\0'; + dTokens.Add ( (char*)sAccum ); + + pAccum = sAccum; + iAccum = 0; + } + + // break on eof + if ( !iCode ) + break; + } else + { + // accumulate everything else + if ( iAccums && sphIsSpace(*sEnd) ) + sEnd--; + + *++sEnd = '\0'; + return s; +} + + +void ISphTokenizer::Setup ( const CSphTokenizerSettings & tSettings ) +{ + m_tSettings = tSettings; + m_tSettings.m_iMinWordLen = Max ( tSettings.m_iMinWordLen, 1 ); +} + + +ISphTokenizer * ISphTokenizer::Create ( const CSphTokenizerSettings & tSettings, CSphString & sError ) +{ + CSphScopedPtr pTokenizer ( NULL ); + + switch ( tSettings.m_iType ) + { + case TOKENIZER_SBCS: pTokenizer = sphCreateSBCSTokenizer (); break; + case TOKENIZER_UTF8: pTokenizer = sphCreateUTF8Tokenizer (); break; + case TOKENIZER_NGRAM: pTokenizer = sphCreateUTF8NgramTokenizer (); break; +#if USE_MMSEG + case TOKENIZER_ZHCN_UTF8: + pTokenizer = sphCreateUTF8ChineseTokenizer + (tSettings.m_sDictPath.cstr()); break; +#endif + default: + sError.SetSprintf ( "failed to create tokenizer (unknown charset type '%d')", tSettings.m_iType ); + return NULL; + } + + pTokenizer->Setup ( tSettings ); + + if ( !tSettings.m_sCaseFolding.IsEmpty () && !pTokenizer->SetCaseFolding ( tSettings.m_sCaseFolding.cstr (), sError ) ) + { + sError.SetSprintf ( "'charset_table': %s", sError.cstr() ); + return NULL; + } + + if ( !tSettings.m_sSynonymsFile.IsEmpty () && !pTokenizer->LoadSynonyms ( tSettings.m_sSynonymsFile.cstr (), sError ) ) + { + sError.SetSprintf ( "'synonyms': %s", sError.cstr() ); + return NULL; + } + + if ( !tSettings.m_sBoundary.IsEmpty () && !pTokenizer->SetBoundary ( tSettings.m_sBoundary.cstr (), sError ) ) + { + sError.SetSprintf ( "'phrase_boundary': %s", sError.cstr() ); + return NULL; + } + + if ( !tSettings.m_sIgnoreChars.IsEmpty () && !pTokenizer->SetIgnoreChars ( tSettings.m_sIgnoreChars.cstr (), sError ) ) + { + sError.SetSprintf ( "'ignore_chars': %s", sError.cstr() ); + return NULL; + } + + if ( !tSettings.m_sBlendChars.IsEmpty () && !pTokenizer->SetBlendChars ( tSettings.m_sBlendChars.cstr (), sError ) ) + { + sError.SetSprintf ( "'blend_chars': %s", sError.cstr() ); + return NULL; + } + + if ( !pTokenizer->SetBlendMode ( tSettings.m_sBlendMode.cstr (), sError ) ) + { + sError.SetSprintf ( "'blend_mode': %s", sError.cstr() ); + return NULL; + } + + pTokenizer->SetNgramLen ( tSettings.m_iNgramLen ); + + if ( !tSettings.m_sNgramChars.IsEmpty () && !pTokenizer->SetNgramChars ( tSettings.m_sNgramChars.cstr (), sError ) ) + { + sError.SetSprintf ( "'ngram_chars': %s", sError.cstr() ); + return NULL; + } + + return pTokenizer.LeakPtr (); +} + + +ISphTokenizer * ISphTokenizer::CreateTokenFilter ( ISphTokenizer * pTokenizer, const CSphMultiformContainer * pContainer ) +{ + if ( !pContainer ) + return NULL; + + return new CSphTokenizer_Filter ( pTokenizer, pContainer ); +} + + +bool ISphTokenizer::AddSpecialsSPZ ( const char * sSpecials, const char * sDirective, CSphString & sError ) +{ + for ( int i=0; sSpecials[i]; i++ ) + { + int iCode = m_tLC.ToLower ( sSpecials[i] ); + if ( iCode & ( FLAG_CODEPOINT_NGRAM | FLAG_CODEPOINT_BOUNDARY | FLAG_CODEPOINT_IGNORE ) ) + { + sError.SetSprintf ( "%s requires that character '%c' is not in ngram_chars, phrase_boundary, or ignore_chars", + sDirective, sSpecials[i] ); + return false; + } + } + + AddSpecials ( sSpecials ); + return true; +} + + +bool ISphTokenizer::EnableSentenceIndexing ( CSphString & sError ) +{ + const char sSpecials[] = { '.', '?', '!', MAGIC_CODE_PARAGRAPH, 0 }; + + if ( !AddSpecialsSPZ ( sSpecials, "index_sp", sError ) ) + return false; + + m_bDetectSentences = true; + return true; +} + + +bool ISphTokenizer::EnableZoneIndexing ( CSphString & sError ) +{ + const char sSpecials[] = { MAGIC_CODE_ZONE, 0 }; + return AddSpecialsSPZ ( sSpecials, "index_zones", sError ); +} + +////////////////////////////////////////////////////////////////////////// + +template < bool IS_UTF8 > +CSphTokenizerTraits::CSphTokenizerTraits () + : m_pBuffer ( NULL ) + , m_pBufferMax ( NULL ) + , m_pCur ( NULL ) + , m_pTokenStart ( NULL ) + , m_pTokenEnd ( NULL ) + , m_iAccum ( 0 ) + , m_pBlendStart ( NULL ) + , m_pBlendEnd ( NULL ) +{ + m_pAccum = m_sAccum; +} + + +template < bool IS_UTF8 > +bool CSphTokenizerTraits::SetCaseFolding ( const char * sConfig, CSphString & sError ) +{ + if ( m_dSynonyms.GetLength() ) + { + sError = "SetCaseFolding() must not be called after LoadSynonyms()"; + return false; + } + return ISphTokenizer::SetCaseFolding ( sConfig, sError ); +} + + +template < bool IS_UTF8 > +bool CSphTokenizerTraits::LoadSynonyms ( const char * sFilename, CSphString & sError ) +{ + m_dSynonyms.Reset (); + + if ( !sFilename || !*sFilename ) + return true; + + GetFileStats ( sFilename, m_tSynFileInfo ); + + FILE * fp = fopen ( sFilename, "r" ); + if ( !fp ) + { + sError.SetSprintf ( "failed to open '%s'", sFilename ); + return false; + } + + int iLine = 0; + char sBuffer[1024]; + + CSphOrderedHash < int, int, IdentityHash_fn, 4096, 117 > hSynonymOnly; + CSphVector dFrom; + + bool bOK = false; + for ( ;; ) + { + char * sGot = fgets ( sBuffer, sizeof(sBuffer), fp ); + if ( !sGot ) + { + if ( feof(fp) ) + bOK = true; + break; + } + + iLine++; + dFrom.Resize ( 0 ); + + // extract map-from and map-to parts + char * sSplit = strstr ( sBuffer, "=>" ); + if ( !sSplit ) + { + sError.SetSprintf ( "%s line %d: mapping token (=>) not found", sFilename, iLine ); + break; + } + + BYTE * sFrom = (BYTE *) sBuffer; + BYTE * sTo = (BYTE *)( sSplit + strlen ( "=>" ) ); + *sSplit = '\0'; + + // tokenize map-from + if ( !TokenizeOnWhitespace ( dFrom, sFrom, IsUtf8() ) ) + { + sError.SetSprintf ( "%s line %d: empty map-from part", sFilename, iLine ); + break; + } + + // trim map-to + sTo = sphTrim ( sTo ); + if ( !*sTo ) + { + sError.SetSprintf ( "%s line %d: empty map-to part", sFilename, iLine ); + break; + } + + // check lengths + ARRAY_FOREACH ( i, dFrom ) + { + int iFromLen = IsUtf8() ? sphUTF8Len ( dFrom[i].cstr() ) : strlen ( dFrom[i].cstr() ); + if ( iFromLen>SPH_MAX_WORD_LEN ) + { + sError.SetSprintf ( "%s line %d: map-from token too long (over %d bytes)", sFilename, iLine, SPH_MAX_WORD_LEN ); + break; + } + } + + int iToLen = IsUtf8() ? sphUTF8Len ( (const char*)sTo ) : strlen ( (const char*)sTo ); + if ( iToLen>SPH_MAX_WORD_LEN ) + { + sError.SetSprintf ( "%s line %d: map-to token too long (over %d bytes)", sFilename, iLine, SPH_MAX_WORD_LEN ); + break; + } + + // pack and store it + int iFromLen = 1; + ARRAY_FOREACH ( i, dFrom ) + iFromLen += strlen ( dFrom[i].cstr() ) + 1; + + if ( iFromLen>MAX_SYNONYM_LEN ) + { + sError.SetSprintf ( "%s line %d: map-from part too long (over %d bytes)", sFilename, iLine, MAX_SYNONYM_LEN ); + break; + } + + CSphSynonym & tSyn = m_dSynonyms.Add (); + tSyn.m_sFrom.Reserve ( iFromLen ); + tSyn.m_iFromLen = iFromLen; + tSyn.m_sTo = (char*)sTo; + tSyn.m_iToLen = iToLen; + + char * sCur = const_cast ( tSyn.m_sFrom.cstr() ); + ARRAY_FOREACH ( i, dFrom ) + { + int iLen = strlen ( dFrom[i].cstr() ); + memcpy ( sCur, dFrom[i].cstr(), iLen ); + + sCur[iLen] = MAGIC_SYNONYM_WHITESPACE; + sCur += iLen+1; + } + *sCur++ = '\0'; + assert ( sCur-tSyn.m_sFrom.cstr()==iFromLen ); + + // track synonym-only codepoints in map-from + for ( ;; ) + { + int iCode = IsUtf8() ? sphUTF8Decode(sFrom) : *sFrom++; + if ( !iCode ) + break; + if ( iCode>0 && !sphIsSpace(iCode) && !m_tLC.ToLower(iCode) ) + hSynonymOnly.Add ( 1, iCode ); + } + } + fclose ( fp ); + + if ( !bOK ) + { + m_dSynonyms.Reset (); + return false; + } + + // sort the list + m_dSynonyms.Sort (); + + // build simple lookup table + m_dSynStart.Resize ( 256 ); + m_dSynEnd.Resize ( 256 ); + for ( int i=0; i<256; i++ ) + { + m_dSynStart[i] = INT_MAX; + m_dSynEnd[i] = -INT_MAX; + } + ARRAY_FOREACH ( i, m_dSynonyms ) + { + int iCh = *(BYTE*)( m_dSynonyms[i].m_sFrom.cstr() ); + m_dSynStart[iCh] = Min ( m_dSynStart[iCh], i ); + m_dSynEnd[iCh] = Max ( m_dSynEnd[iCh], i ); + } + + // add synonym-only remaps + CSphVector dRemaps; + dRemaps.Reserve ( hSynonymOnly.GetLength() ); + + hSynonymOnly.IterateStart (); + while ( hSynonymOnly.IterateNext() ) + { + CSphRemapRange & tRange = dRemaps.Add (); + tRange.m_iStart = tRange.m_iEnd = tRange.m_iRemapStart = hSynonymOnly.IterateGetKey(); + } + + m_tLC.AddRemaps ( dRemaps, FLAG_CODEPOINT_SYNONYM ); + return true; +} + + +template < bool IS_UTF8 > +void CSphTokenizerTraits::CloneBase ( const CSphTokenizerTraits * pFrom, bool bEscaped ) +{ + m_tLC = pFrom->m_tLC; + m_dSynonyms = pFrom->m_dSynonyms; + m_dSynStart = pFrom->m_dSynStart; + m_dSynEnd = pFrom->m_dSynEnd; + m_tSettings = pFrom->m_tSettings; + m_bEscaped = bEscaped; + m_uBlendVariants = pFrom->m_uBlendVariants; + m_bBlendSkipPure = pFrom->m_bBlendSkipPure; + + if ( bEscaped ) + { + CSphVector dRemaps; + CSphRemapRange Range; + Range.m_iStart = Range.m_iEnd = Range.m_iRemapStart = '\\'; + dRemaps.Add ( Range ); + m_tLC.AddRemaps ( dRemaps, FLAG_CODEPOINT_SPECIAL ); + } +} + + +template < bool IS_UTF8 > +void CSphTokenizerTraits::SetBufferPtr ( const char * sNewPtr ) +{ + assert ( (BYTE*)sNewPtr>=m_pBuffer && (BYTE*)sNewPtr<=m_pBufferMax ); + m_pCur = Min ( m_pBufferMax, Max ( m_pBuffer, (BYTE*)sNewPtr ) ); + m_iAccum = 0; + m_pAccum = m_sAccum; +} + + +template < bool IS_UTF8 > +int CSphTokenizerTraits::SkipBlended() +{ + if ( !m_pBlendEnd ) + return 0; + + bool bQuery = m_bQueryMode; + BYTE * pMax = m_pBufferMax; + + m_bQueryMode = false; + m_pBufferMax = m_pBlendEnd; + + int iBlended = 0; + while ( GetToken() ) + iBlended++; + + m_bQueryMode = bQuery; + m_pBufferMax = pMax; + + return iBlended; +} + + +/// adjusts blending magic when we're about to return a token (any token) +/// returns false if current token should be skipped, true otherwise +template < bool IS_UTF8 > +bool CSphTokenizerTraits::BlendAdjust ( BYTE * pCur ) +{ + // check if all we got is a bunch of blended characters (pure-blended case) + if ( m_bBlended && !m_bNonBlended ) + { + // we either skip this token, or pretend it was normal + // in both cases, clear the flag + m_bBlended = false; + + // do we need to skip it? + if ( m_bBlendSkipPure ) + { + m_pBlendStart = NULL; + return false; + } + } + m_bNonBlended = false; + + // adjust buffer pointers + if ( m_bBlended && m_pBlendStart ) + { + // called once per blended token, on processing start + // at this point, full blended token is in the accumulator + // and we're about to return it + m_pCur = m_pBlendStart; + m_pBlendEnd = pCur; + m_pBlendStart = NULL; + m_bBlendedPart = true; + } else if ( pCur>=m_pBlendEnd ) + { + // tricky bit, as at this point, token we're about to return + // can either be a blended subtoken, or the next one + m_bBlendedPart = ( m_pTokenStart!=NULL ) && ( m_pTokenStart0 && *pSrc ) + *pDst++ = *pSrc++; + *pDst++ = '\0'; +} + + +template < bool IS_UTF8 > +BYTE * CSphTokenizerTraits::GetBlendedVariant () +{ + // we can get called on several occasions + // case 1, a new blended token was just accumulated + if ( m_bBlended && !m_bBlendAdd ) + { + // fast path for the default case (trim_none) + if ( m_uBlendVariants==BLEND_TRIM_NONE ) + return m_sAccum; + + // analyze the full token, find non-blended bounds + m_iBlendNormalStart = -1; + m_iBlendNormalEnd = -1; + + // OPTIMIZE? we can skip this based on non-blended flag from adjust + BYTE * p = m_sAccum; + while ( *p ) + { + int iLast = (int)( p-m_sAccum ); + int iCode = IS_UTF8 + ? sphUTF8Decode ( p ) + : *p++; + if (!( m_tLC.ToLower ( iCode ) & FLAG_CODEPOINT_BLEND )) + { + m_iBlendNormalEnd = (int)( p-m_sAccum ); + if ( m_iBlendNormalStart<0 ) + m_iBlendNormalStart = iLast; + } + } + + // build todo mask + // check and revert a few degenerate cases + m_uBlendVariantsPending = m_uBlendVariants; + if ( m_uBlendVariantsPending & BLEND_TRIM_BOTH ) + { + if ( m_iBlendNormalStart<0 ) + { + // no heading blended; revert BOTH to TAIL + m_uBlendVariantsPending &= ~BLEND_TRIM_BOTH; + m_uBlendVariantsPending |= BLEND_TRIM_TAIL; + } else if ( m_iBlendNormalEnd<0 ) + { + // no trailing blended; revert BOTH to HEAD + m_uBlendVariantsPending &= ~BLEND_TRIM_BOTH; + m_uBlendVariantsPending |= BLEND_TRIM_HEAD; + } + } + if ( m_uBlendVariantsPending & BLEND_TRIM_HEAD ) + { + // either no heading blended, or pure blended; revert HEAD to NONE + if ( m_iBlendNormalStart<=0 ) + { + m_uBlendVariantsPending &= ~BLEND_TRIM_HEAD; + m_uBlendVariantsPending |= BLEND_TRIM_NONE; + } + } + if ( m_uBlendVariantsPending & BLEND_TRIM_TAIL ) + { + // either no trailing blended, or pure blended; revert TAIL to NONE + if ( m_iBlendNormalEnd<=0 || m_sAccum[m_iBlendNormalEnd]==0 ) + { + m_uBlendVariantsPending &= ~BLEND_TRIM_TAIL; + m_uBlendVariantsPending |= BLEND_TRIM_NONE; + } + } + + // ok, we are going to return a few variants after all, flag that + // OPTIMIZE? add fast path for "single" variants? + m_bBlendAdd = true; + assert ( m_uBlendVariantsPending ); + + // we also have to stash the original blended token + // because accumulator contents may get trashed by caller (say, when stemming) + strncpy ( (char*)m_sAccumBlend, (char*)m_sAccum, sizeof(m_sAccumBlend) ); + } + + // case 2, caller is checking for pending variants, have we even got any? + if ( !m_bBlendAdd ) + return false; + + // handle trim_none + // this MUST be the first handler, so that we could avoid copying below, and just return the original accumulator + if ( m_uBlendVariantsPending & BLEND_TRIM_NONE ) + { + m_uBlendVariantsPending &= ~BLEND_TRIM_NONE; + m_bBlended = true; + return m_sAccum; + } + + // handle trim_both + if ( m_uBlendVariantsPending & BLEND_TRIM_BOTH ) + { + m_uBlendVariantsPending &= ~BLEND_TRIM_BOTH; + if ( m_iBlendNormalStart<0 ) + m_uBlendVariantsPending |= BLEND_TRIM_TAIL; // no heading blended; revert BOTH to TAIL + else if ( m_iBlendNormalEnd<0 ) + m_uBlendVariantsPending |= BLEND_TRIM_HEAD; // no trailing blended; revert BOTH to HEAD + else + { + assert ( m_iBlendNormalStart=0 ) + { + // FIXME! need we check for overshorts? + CopySubstring ( m_sAccum, m_sAccumBlend+m_iBlendNormalStart, sizeof(m_sAccum) ); + m_bBlended = true; + return m_sAccum; + } + } + + // handle TRIM_TAIL + if ( m_uBlendVariantsPending & BLEND_TRIM_TAIL ) + { + m_uBlendVariantsPending &= ~BLEND_TRIM_TAIL; + if ( m_iBlendNormalEnd>0 ) + { + // FIXME! need we check for overshorts? + CopySubstring ( m_sAccum, m_sAccumBlend, m_iBlendNormalEnd ); + m_bBlended = true; + return m_sAccum; + } + } + + // all clear, no more variants to go + m_bBlendAdd = false; + return NULL; +} + + +static inline bool IsModifier ( int iSymbol ) +{ + return iSymbol=='^' || iSymbol=='$' || iSymbol=='=' || iSymbol=='*'; +} + + +static inline bool IsCapital ( int iCh ) +{ + return iCh>='A' && iCh<='Z'; +} + + +template < bool IS_UTF8 > +int CSphTokenizerTraits::CodepointArbitration ( int iCode, bool bWasEscaped, bool bSpaceAhead ) +{ + ///////////////////////////// + // indexing time arbitration + ///////////////////////////// + + if ( !m_bQueryMode ) + { + int iSymbol = iCode & MASK_CODEPOINT; + + // detect sentence boundaries + // FIXME! should use charset_table (or add a new directive) and support languages other than English + if ( m_bDetectSentences ) + { + if ( iSymbol=='?' || iSymbol=='!' ) + { + // definitely a sentence boundary + return MAGIC_CODE_SENTENCE | FLAG_CODEPOINT_SPECIAL; + } + + if ( iSymbol=='.' ) + { + // inline dot ("in the U.K and"), not a boundary + bool bInwordDot = ( sphIsAlpha ( m_pCur[0] ) || m_pCur[0]==',' ); + + // followed by a small letter or an opening paren, not a boundary + // FIXME? might want to scan for more than one space + // Yoyodine Inc. exists ... + // Yoyodine Inc. (the company) .. + bool bInphraseDot = ( sphIsSpace ( m_pCur[0] ) + && ( ( 'a'<=m_pCur[1] && m_pCur[1]<='z' ) + || ( m_pCur[1]=='(' && 'a'<=m_pCur[2] && m_pCur[2]<='z' ) ) ); + + // preceded by something that looks like a middle name, opening first name, salutation + bool bMiddleName = false; + switch ( m_iAccum ) + { + case 1: + // 1-char capital letter + // example: J. R. R. Tolkien, who wrote Hobbit ... + // example: John D. Doe ... + bMiddleName = IsCapital ( m_pCur[-2] ); + break; + case 2: + // 2-char token starting with a capital + if ( IsCapital ( m_pCur[-3] ) ) + { + // capital+small + // example: Known as Mr. Doe ... + if ( !IsCapital ( m_pCur[-2] ) ) + bMiddleName = true; + + // known capital+capital (MR, DR, MS) + if ( + ( m_pCur[-3]=='M' && m_pCur[-2]=='R' ) || + ( m_pCur[-3]=='M' && m_pCur[-2]=='S' ) || + ( m_pCur[-3]=='D' && m_pCur[-2]=='R' ) ) + bMiddleName = true; + } + break; + case 3: + // preceded by a known 3-byte token (MRS, DRS) + // example: Survived by Mrs. Doe ... + if ( ( m_sAccum[0]=='m' || m_sAccum[0]=='d' ) && m_sAccum[1]=='r' && m_sAccum[2]=='s' ) + bMiddleName = true; + break; + } + + if ( !bInwordDot && !bInphraseDot && !bMiddleName ) + { + // sentence boundary + return MAGIC_CODE_SENTENCE | FLAG_CODEPOINT_SPECIAL; + } else + { + // just a character + if ( ( iCode & MASK_FLAGS )==FLAG_CODEPOINT_SPECIAL ) + return 0; // special only, not dual? then in this context, it is a separator + else + return iCode & ~( FLAG_CODEPOINT_SPECIAL | FLAG_CODEPOINT_DUAL ); // perhaps it was blended, so return the original code + } + } + } + + // pass-through + return iCode; + } + + ////////////////////////// + // query time arbitration + ////////////////////////// + + if ( iCode & FLAG_CODEPOINT_NGRAM ) + return iCode; // ngrams are handled elsewhere + + int iSymbol = iCode & MASK_CODEPOINT; + + // codepoints can't be blended and special at the same time + if ( ( iCode & FLAG_CODEPOINT_BLEND ) && ( iCode & FLAG_CODEPOINT_SPECIAL ) ) + { + bool bBlend = + bWasEscaped || // escaped characters should always act as blended + ( m_bPhrase && !IsModifier ( iSymbol ) ) || // non-modifier special inside phrase + ( m_iAccum && ( iSymbol=='@' || iSymbol=='/' || iSymbol=='-' ) ); // some specials in the middle of a token + + // clear special or blend flags + iCode &= bBlend + ? ~( FLAG_CODEPOINT_DUAL | FLAG_CODEPOINT_SPECIAL ) + : ~( FLAG_CODEPOINT_DUAL | FLAG_CODEPOINT_BLEND ); + } + + // escaped specials are not special + // dash and dollar inside the word are not special + // non-modifier specials within phrase are not special + bool bDashInside = ( m_iAccum && iSymbol=='-' ); + if ( iCode & FLAG_CODEPOINT_SPECIAL ) + if ( bWasEscaped + || bDashInside + || ( m_iAccum && iSymbol=='$' && !bSpaceAhead ) + || ( m_bPhrase && iSymbol!='"' && !IsModifier ( iSymbol ) ) ) + { + if ( iCode & FLAG_CODEPOINT_DUAL ) + iCode &= ~( FLAG_CODEPOINT_SPECIAL | FLAG_CODEPOINT_DUAL ); + else if ( bDashInside ) + // if we return zero here, we will break the tokens like 'Ms-Dos' + iCode &= ~( FLAG_CODEPOINT_SPECIAL ); + else + iCode = 0; + } + + // if we didn't remove special by now, it must win + if ( iCode & FLAG_CODEPOINT_DUAL ) + { + assert ( iCode & FLAG_CODEPOINT_SPECIAL ); + iCode = iSymbol | FLAG_CODEPOINT_SPECIAL; + } + + // ideally, all conflicts must be resolved here + // well, at least most + assert ( sphBitCount ( iCode & MASK_FLAGS )<=1 + || ( iCode & FLAG_CODEPOINT_SYNONYM ) ); + return iCode; +} + + +enum SynCheck_e +{ + SYNCHECK_LESS, + SYNCHECK_PARTIAL, + SYNCHECK_EXACT, + SYNCHECK_GREATER +}; + + +static inline SynCheck_e SynCheckPrefix ( const CSphSynonym & tCandidate, int iOff, const BYTE * sCur, int iBytes, bool bMaybeSeparator ) +{ + const BYTE * sCand = ( (const BYTE*)tCandidate.m_sFrom.cstr() ) + iOff; + + while ( iBytes-->0 ) + { + if ( *sCand!=*sCur ) + { + // incoming synonym-only char vs. ending sequence (eg. 2nd slash in "OS/2/3"); we actually have a match + if ( bMaybeSeparator && sCand[0]==MAGIC_SYNONYM_WHITESPACE && sCand[1]=='\0' ) + return SYNCHECK_EXACT; + + // otherwise, it is a mismatch + return ( *sCand<*sCur ) ? SYNCHECK_LESS : SYNCHECK_GREATER; + } + sCand++; + sCur++; + } + + // full match after a full separator + if ( sCand[0]=='\0' ) + return SYNCHECK_EXACT; + + // full match after my last synonym-only char + if ( bMaybeSeparator && sCand[0]==MAGIC_SYNONYM_WHITESPACE && sCand[1]=='\0' ) + return SYNCHECK_EXACT; + + // otherwise, partial match so far + return SYNCHECK_PARTIAL; +} + + +static inline bool IsSeparator ( int iFolded, bool bFirst ) +{ + // eternal separator + if ( iFolded<0 || ( iFolded & MASK_CODEPOINT )==0 ) + return true; + + // just a codepoint + if (!( iFolded & MASK_FLAGS )) + return false; + + // any magic flag, besides dual + if (!( iFolded & FLAG_CODEPOINT_DUAL )) + return true; + + // FIXME? n-grams currently also set dual + if ( iFolded & FLAG_CODEPOINT_NGRAM ) + return true; + + // dual depends on position + return bFirst; +} + +// handles escaped specials that are not in the character set +// returns true if the codepoint should be processed as a simple codepoint, +// returns false if it should be processed as a whitespace +// for example: aaa\!bbb => aaa bbb +static inline bool Special2Simple ( int & iCodepoint ) +{ + if ( ( iCodepoint & FLAG_CODEPOINT_DUAL ) || !( iCodepoint & FLAG_CODEPOINT_SPECIAL ) ) + { + iCodepoint &= ~( FLAG_CODEPOINT_SPECIAL | FLAG_CODEPOINT_DUAL ); + return true; + } + + return false; +} + +static inline bool IsWhitespace ( BYTE c ) +{ + return ( c=='\0' || c==' ' || c=='\t' || c=='\r' || c=='\n' ); +} + +static inline bool IsWhitespace ( int c ) +{ + return ( c=='\0' || c==' ' || c=='\t' || c=='\r' || c=='\n' ); +} + +template < bool IS_UTF8 > +BYTE * CSphTokenizerTraits::GetTokenSyn () +{ + assert ( m_dSynonyms.GetLength() ); + + bool bEscaped = m_bEscaped; + BYTE * pCur; + + m_bTokenBoundary = false; + for ( ;; ) + { + // initialize accumulators and range + BYTE * pFirstSeparator = NULL; + + m_iAccum = 0; + m_pAccum = m_sAccum; + + int iSynStart = 0; + int iSynEnd = m_dSynonyms.GetLength()-1; + int iSynOff = 0; + + int iLastCodepoint = 0; + int iLastFolded = 0; + BYTE * pRescan = NULL; + + int iExact = -1; + BYTE * pExact = NULL; + + // main refinement loop + for ( ;; ) + { + // store current position (to be able to restart from it on folded boundary) + pCur = m_pCur; + + // get next codepoint + int iCode = GetCodepoint(); + + // handle early-out + if ( iCode<0 ) + { + // eof at token start? we're done + if ( iSynOff==0 ) + return NULL; + + // eof after whitespace? we already checked the candidate last time, so break + if ( iLastFolded==0 ) + break; + } + + // fold codepoint (and lookup flags!) + int iFolded = m_tLC.ToLower ( iCode ); + + // handle boundaries + if ( m_bBoundary && ( iFolded==0 ) ) m_bTokenBoundary = true; + m_bBoundary = ( iFolded & FLAG_CODEPOINT_BOUNDARY )!=0; + + // skip continuous whitespace + if ( iLastFolded==0 && iFolded==0 ) + continue; + + if ( bEscaped ) + { + if ( iCode=='\\' && iLastCodepoint!='\\' ) + { + iLastCodepoint = iCode; + continue; + } else if ( iLastCodepoint=='\\' && !Special2Simple ( iFolded ) ) + { + iLastCodepoint = 0; + continue; + } + + iLastCodepoint = iCode; + } + + iFolded = CodepointArbitration ( iFolded, false, IsWhitespace ( *m_pCur ) ); + + iLastFolded = iFolded; + + // handle specials at the very word start + if ( ( iFolded & FLAG_CODEPOINT_SPECIAL ) && m_iAccum==0 ) + { + m_bWasSpecial = !( iFolded & FLAG_CODEPOINT_NGRAM ); + + AccumCodepoint ( iFolded & MASK_CODEPOINT ); + *m_pAccum = '\0'; + + m_iLastTokenLen = 1; + m_iLastTokenBufferLen = m_pAccum-m_sAccum; //mmseg + m_pTokenStart = pCur; + m_pTokenEnd = m_pCur; + return m_sAccum; + } + + // handle specials + bool bJustSpecial = ( iFolded & FLAG_CODEPOINT_SPECIAL ) + && !( iFolded & FLAG_CODEPOINT_DUAL ) // OPTIMIZE? + && !( iFolded & FLAG_CODEPOINT_SYNONYM ); // OPTIMIZE? + + // if candidate starts with something special, and turns out to be not a synonym, + // we will need to rescan from current position later + if ( iSynOff==0 ) + pRescan = IsSeparator ( iFolded, true ) ? m_pCur : NULL; + + // accumulate folded token + if ( !pFirstSeparator ) + { + if ( IsSeparator ( iFolded, m_iAccum==0 ) ) + { + if ( m_iAccum ) + pFirstSeparator = pCur; + } else + { + if ( m_iAccum==0 ) + m_pTokenStart = pCur; + + AccumCodepoint ( iFolded & MASK_CODEPOINT ); + } + } + + // accumulate next raw synonym symbol to refine + // note that we need a special check for whitespace here, to avoid "MS*DOS" being treated as "MS DOS" synonym + BYTE sTest[4]; + int iTest; + + int iMasked = ( iCode & MASK_CODEPOINT ); + if ( iFolded<=0 || bJustSpecial ) + { + sTest[0] = MAGIC_SYNONYM_WHITESPACE; + iTest = 1; + + if (!( iMasked==' ' || iMasked=='\t' )) + { + sTest[1] = '\0'; + iTest = 2; + } + } else + { + if ( IsUtf8() ) + { + iTest = sphUTF8Encode ( sTest, iMasked ); + } else + { + iTest = 1; + sTest[0] = BYTE(iMasked); + } + } + + // refine synonyms range + #define LOC_RETURN_SYNONYM(_idx) \ + { \ + m_pTokenEnd = pCur; \ + if ( bJustSpecial || ( iFolded & FLAG_CODEPOINT_SPECIAL )!=0 ) m_pCur = pCur; \ + strncpy ( (char*)m_sAccum, m_dSynonyms[_idx].m_sTo.cstr(), sizeof(m_sAccum) ); \ + m_iLastTokenLen = m_dSynonyms[_idx].m_iToLen; \ + m_iLastTokenBufferLen = m_dSynonyms[_idx].m_sTo.Length(); /* mmseg */ \ + return m_sAccum; \ + } + + #define LOC_REFINE_BREAK() \ + { \ + if ( iExact>=0 ) { m_pCur = pCur = pExact; LOC_RETURN_SYNONYM ( iExact ); } \ + break; \ + } + + // if this is the first symbol, use prebuilt lookup table to speedup initial range search + if ( iSynOff==0 ) + { + iSynStart = m_dSynStart[sTest[0]]; + iSynEnd = m_dSynEnd[sTest[0]]; + if ( iSynStart>iSynEnd ) + break; + } + + // this is to catch intermediate separators (eg. "OS/2/3") + bool bMaybeSeparator = ( iFolded & FLAG_CODEPOINT_SYNONYM )!=0 || ( iFolded<0 ); + + SynCheck_e eStart = SynCheckPrefix ( m_dSynonyms[iSynStart], iSynOff, sTest, iTest, bMaybeSeparator ); + if ( eStart==SYNCHECK_EXACT ) + { + if ( iSynStart==iSynEnd ) LOC_RETURN_SYNONYM ( iSynStart ); + iExact = iSynStart; + pExact = pCur; + } + if ( eStart==SYNCHECK_GREATER || ( iSynStart==iSynEnd && eStart!=SYNCHECK_PARTIAL ) ) + LOC_REFINE_BREAK(); + + SynCheck_e eEnd = SynCheckPrefix ( m_dSynonyms[iSynEnd], iSynOff, sTest, iTest, bMaybeSeparator ); + if ( eEnd==SYNCHECK_LESS ) + LOC_REFINE_BREAK(); + if ( eEnd==SYNCHECK_EXACT ) + { + iExact = iSynEnd; + pExact = pCur; + } + + + // refine left boundary + if ( eStart!=SYNCHECK_PARTIAL && eStart!=SYNCHECK_EXACT ) + { + assert ( eStart==SYNCHECK_LESS ); + + int iL = iSynStart; + int iR = iSynEnd; + SynCheck_e eL = eStart; + SynCheck_e eR = eEnd; + + while ( iR-iL>1 ) + { + int iM = iL + (iR-iL)/2; + SynCheck_e eMid = SynCheckPrefix ( m_dSynonyms[iM], iSynOff, sTest, iTest, bMaybeSeparator ); + + if ( eMid==SYNCHECK_LESS ) + { + iL = iM; + eL = eMid; + } else + { + iR = iM; + eR = eMid; + } + } + + assert ( eL==SYNCHECK_LESS ); + assert ( eR!=SYNCHECK_LESS ); + assert ( iR-iL==1 ); + + if ( eR==SYNCHECK_GREATER ) LOC_REFINE_BREAK(); + if ( eR==SYNCHECK_EXACT && iR==iSynEnd ) LOC_RETURN_SYNONYM ( iR ); + + assert ( eR==SYNCHECK_PARTIAL || eR==SYNCHECK_EXACT ); + iSynStart = iR; + eStart = eR; + } + + // refine right boundary + if ( eEnd!=SYNCHECK_PARTIAL && eEnd!=SYNCHECK_EXACT ) + { + assert ( eEnd==SYNCHECK_GREATER ); + + int iL = iSynStart; + int iR = iSynEnd; + SynCheck_e eL = eStart; + SynCheck_e eR = eEnd; + + while ( iR-iL>1 ) + { + int iM = iL + (iR-iL)/2; + SynCheck_e eMid = SynCheckPrefix ( m_dSynonyms[iM], iSynOff, sTest, iTest, bMaybeSeparator ); + + if ( eMid==SYNCHECK_GREATER ) + { + iR = iM; + eR = eMid; + } else + { + iL = iM; + eL = eMid; + } + } + + assert ( eR==SYNCHECK_GREATER ); + assert ( eL!=SYNCHECK_GREATER ); + assert ( iR-iL==1 ); + + if ( eL==SYNCHECK_LESS ) LOC_REFINE_BREAK(); + if ( eL==SYNCHECK_EXACT && iL==iSynStart ) LOC_RETURN_SYNONYM ( iL ); + + assert ( eL==SYNCHECK_PARTIAL || eL==SYNCHECK_EXACT ); + iSynEnd = iL; + eEnd = eL; + } + + // handle eof + if ( iCode<0 ) + break; + + // we still have a partial synonym match, continue; + iSynOff += iTest; + } + + // at this point, that was not a synonym + if ( pRescan ) + { + m_pCur = pRescan; + continue; + } + + // at this point, it also started with a valid char + assert ( m_iAccum>0 ); + + // find the proper separator + if ( !pFirstSeparator ) + { + int iLast = 0; + + // if there was none, scan until found + for ( ;; ) + { + pCur = m_pCur; + int iCode = *pCur; + int iFolded = m_tLC.ToLower ( GetCodepoint() ); + if ( iFolded<0 ) + break; // eof + + if ( bEscaped ) + { + if ( iCode=='\\' && iLast!='\\' ) + { + iLast = iCode; + continue; + } + + if ( iLast=='\\' && !Special2Simple ( iFolded ) ) + break; + + iLast = iCode; + } + + iFolded = CodepointArbitration ( iFolded, false, IsWhitespace ( *m_pCur ) ); + + if ( IsSeparator ( iFolded, false ) ) + { + if ( iFolded!=0 ) + m_pCur = pCur; // force rescan + break; + } + + AccumCodepoint ( iFolded & MASK_CODEPOINT ); + } + } else + { + // if there was, token is ready but we should restart from that separator + m_pCur = pFirstSeparator; + pCur = m_pCur; + } + + // return accumulated token + if ( m_iAccum dRemaps; + CSphCharsetDefinitionParser tParser; + if ( !tParser.Parse ( sConfig, dRemaps ) ) + { + sError = tParser.GetLastError(); + return false; + } + + // check + ARRAY_FOREACH ( i, dRemaps ) + { + const CSphRemapRange & r = dRemaps[i]; + + if ( !bCanRemap && r.m_iStart!=r.m_iRemapStart ) + { + sError.SetSprintf ( "%s characters must not be remapped (map-from=U+%x, map-to=U+%x)", + sSource, r.m_iStart, r.m_iRemapStart ); + return false; + } + + for ( int j=r.m_iStart; j<=r.m_iEnd; j++ ) + if ( m_tLC.ToLower(j) ) + { + sError.SetSprintf ( "%s characters must not be referenced anywhere else (code=U+%x)", sSource, j ); + return false; + } + + if ( bCanRemap ) + for ( int j=r.m_iRemapStart; j<=r.m_iRemapStart + r.m_iEnd - r.m_iStart; j++ ) + if ( m_tLC.ToLower(j) ) + { + sError.SetSprintf ( "%s characters must not be referenced anywhere else (code=U+%x)", sSource, j ); + return false; + } + } + + // add mapping + m_tLC.AddRemaps ( dRemaps, uFlags ); + return true; +} + +bool ISphTokenizer::SetBoundary ( const char * sConfig, CSphString & sError ) +{ + return RemapCharacters ( sConfig, FLAG_CODEPOINT_BOUNDARY, "phrase boundary", false, sError ); +} + +bool ISphTokenizer::SetIgnoreChars ( const char * sConfig, CSphString & sError ) +{ + return RemapCharacters ( sConfig, FLAG_CODEPOINT_IGNORE, "ignored", false, sError ); +} + +bool ISphTokenizer::SetBlendChars ( const char * sConfig, CSphString & sError ) +{ + return RemapCharacters ( sConfig, FLAG_CODEPOINT_BLEND, "blend", true, sError ); +} + + +static bool sphStrncmp ( const char * sCheck, int iCheck, const char * sRef ) +{ + return ( iCheck==(int)strlen(sRef) && memcmp ( sCheck, sRef, iCheck )==0 ); +} + + +bool ISphTokenizer::SetBlendMode ( const char * sMode, CSphString & sError ) +{ + if ( !sMode || !*sMode ) + { + m_uBlendVariants = BLEND_TRIM_NONE; + m_bBlendSkipPure = false; + return true; + } + + m_uBlendVariants = 0; + const char * p = sMode; + while ( *p ) + { + while ( !sphIsAlpha(*p) ) + p++; + if ( !*p ) + break; + + const char * sTok = p; + while ( sphIsAlpha(*p) ) + p++; + if ( sphStrncmp ( sTok, p-sTok, "trim_none" ) ) + m_uBlendVariants |= BLEND_TRIM_NONE; + else if ( sphStrncmp ( sTok, p-sTok, "trim_head" ) ) + m_uBlendVariants |= BLEND_TRIM_HEAD; + else if ( sphStrncmp ( sTok, p-sTok, "trim_tail" ) ) + m_uBlendVariants |= BLEND_TRIM_TAIL; + else if ( sphStrncmp ( sTok, p-sTok, "trim_both" ) ) + m_uBlendVariants |= BLEND_TRIM_BOTH; + else if ( sphStrncmp ( sTok, p-sTok, "skip_pure" ) ) + m_bBlendSkipPure = true; + else + { + sError.SetSprintf ( "unknown blend_mode option near '%s'", sTok ); + return false; + } + } + + if ( !m_uBlendVariants ) + { + sError.SetSprintf ( "blend_mode must define at least one variant to index" ); + m_uBlendVariants = BLEND_TRIM_NONE; + m_bBlendSkipPure = false; + return false; + } + return true; +} + +///////////////////////////////////////////////////////////////////////////// + +CSphTokenizer_SBCS::CSphTokenizer_SBCS () +{ + CSphString sTmp; + SetCaseFolding ( SPHINX_DEFAULT_SBCS_TABLE, sTmp ); +} + + +void CSphTokenizer_SBCS::SetBuffer ( BYTE * sBuffer, int iLength ) +{ + // check that old one is over and that new length is sane + assert ( iLength>=0 ); + + // set buffer + m_pBuffer = sBuffer; + m_pBufferMax = sBuffer + iLength; + m_pCur = sBuffer; + + m_iOvershortCount = 0; + m_bBoundary = m_bTokenBoundary = false; +} + + +BYTE * CSphTokenizer_SBCS::GetToken () +{ + m_bWasSpecial = false; + m_bBlended = false; + m_iOvershortCount = 0; + m_bTokenBoundary = false; + + if ( m_dSynonyms.GetLength() ) + return GetTokenSyn (); + + // return pending blending variants + BYTE * pVar = GetBlendedVariant (); + if ( pVar ) + return pVar; + m_bBlendedPart = ( m_pBlendEnd!=NULL ); + + const bool bUseEscape = m_bEscaped; + + for ( ;; ) + { + // memorize buffer start + BYTE * pCur = m_pCur; + + // get next codepoint, real or virtual + int iCodepoint = 0; + int iCode = 0; + + bool bWasEscaped = false; // whether current char was escaped + if ( m_pCur=m_pBufferMax ? m_pCur : pCur; + if ( !BlendAdjust ( pCur ) ) + continue; + if ( m_bBlended ) + return GetBlendedVariant(); + return m_sAccum; + } + + // handle specials + bool bSpecial = ( iCode & FLAG_CODEPOINT_SPECIAL )!=0; + bool bNoBlend = !( iCode & FLAG_CODEPOINT_BLEND ); + iCode &= MASK_CODEPOINT; + if ( bSpecial ) + { + // skip short words + if ( m_iAccum0 ); + if ( m_iAccumCloneBase ( this, bEscaped ); + return pClone; +} + +///////////////////////////////////////////////////////////////////////////// + +CSphTokenizer_UTF8::CSphTokenizer_UTF8 () +{ + CSphString sTmp; + SetCaseFolding ( SPHINX_DEFAULT_UTF8_TABLE, sTmp ); +} + + +void CSphTokenizer_UTF8::SetBuffer ( BYTE * sBuffer, int iLength ) +{ + // check that old one is over and that new length is sane + assert ( iLength>=0 ); + + // set buffer + m_pBuffer = sBuffer; + m_pBufferMax = sBuffer + iLength; + m_pCur = sBuffer; + + // fixup embedded zeroes with spaces + for ( BYTE * p = m_pBuffer; p < m_pBufferMax; p++ ) + if ( !*p ) + *p = ' '; + + m_iOvershortCount = 0; + m_bBoundary = m_bTokenBoundary = false; +} + + +BYTE * CSphTokenizer_UTF8::GetToken () +{ + m_bWasSpecial = false; + m_bBlended = false; + m_iOvershortCount = 0; + m_bTokenBoundary = false; + + if ( m_dSynonyms.GetLength() ) + return GetTokenSyn (); + + // return pending blending variants + BYTE * pVar = GetBlendedVariant (); + if ( pVar ) + return pVar; + m_bBlendedPart = ( m_pBlendEnd!=NULL ); + + // whether this tokenizer supports escaping + const bool bUseEscape = m_bEscaped; + + // in query mode, lets capture (soft-whitespace hard-whitespace) sequences and adjust overshort counter + // sample queries would be (one NEAR $$$) or (one | $$$ two) where $ is not a valid character + bool bGotNonToken = ( !m_bQueryMode || m_bPhrase ); // only do this in query mode, never in indexing mode, never within phrases + bool bGotSoft = false; // hey Beavis he said soft huh huhhuh + + for ( ;; ) + { + // get next codepoint + BYTE * pCur = m_pCur; // to redo special char, if there's a token already + int iCodePoint = GetCodepoint(); // advances m_pCur + int iCode = m_tLC.ToLower ( iCodePoint ); + + // handle escaping + bool bWasEscaped = ( bUseEscape && iCodePoint=='\\' ); // whether current codepoint was escaped + if ( bWasEscaped ) + { + iCodePoint = GetCodepoint(); + iCode = m_tLC.ToLower ( iCodePoint ); + if ( !Special2Simple ( iCode ) ) + iCode = 0; + } + + // handle eof + if ( iCode<0 ) + { + // skip trailing short word + FlushAccum (); + if ( m_iLastTokenLenCloneBase ( this, bEscaped ); + return pClone; +} + + +int CSphTokenizer_UTF8::GetCodepointLength ( int iCode ) const +{ + if ( iCode<128 ) + return 1; + + int iBytes = 0; + while ( iCode & 0x80 ) + { + iBytes++; + iCode <<= 1; + } + + assert ( iBytes>=2 && iBytes<=4 ); + return iBytes; +} + + +///////////////////////////////////////////////////////////////////////////// + +bool CSphTokenizer_UTF8Ngram::SetNgramChars ( const char * sConfig, CSphString & sError ) +{ + CSphVector dRemaps; + CSphCharsetDefinitionParser tParser; + if ( !tParser.Parse ( sConfig, dRemaps ) ) + { + sError = tParser.GetLastError(); + return false; + } + + m_tLC.AddRemaps ( dRemaps, FLAG_CODEPOINT_NGRAM | FLAG_CODEPOINT_SPECIAL ); // !COMMIT support other n-gram lengths than 1 + m_sNgramCharsStr = sConfig; + return true; +} + + +void CSphTokenizer_UTF8Ngram::SetNgramLen ( int iLen ) +{ + assert ( iLen>0 ); + m_iNgramLen = iLen; +} + + +BYTE * CSphTokenizer_UTF8Ngram::GetToken () +{ + // !COMMIT support other n-gram lengths than 1 + assert ( m_iNgramLen==1 ); + return CSphTokenizer_UTF8::GetToken (); +} + +#if USE_MMSEG +////////////////////////////////////////////////////////////////////////// +CSphTokenizer_UTF8MMSeg::CSphTokenizer_UTF8MMSeg () + :CSphTokenizer_UTF8(), + m_segoffset(0) +{ + m_dictpath = NULL; + d_ = new CSphTokenizer_zh_CN_UTF8_Private(); + //FIXCJK + CSphVector dRemaps; + /* + + */ + dRemaps.Add ( CSphRemapRange ( 0x4e00, 0x9fff, 0x4e00 ) ); + dRemaps.Add ( CSphRemapRange ( 0xFF00, 0xFFFF, 0xFF00 ) ); + dRemaps.Add ( CSphRemapRange ( 0x3000, 0x303F, 0x3000 ) ); + + m_tLC.AddRemaps ( dRemaps, + FLAG_CODEPOINT_NGRAM | FLAG_CODEPOINT_SPECIAL ); // !COMMIT support other n-gram lengths than 1 + //ENDCJK + this->m_pAccumSeg = m_sAccumSeg; + m_iLastTokenBufferLen = 0; + m_iLastTokenLenMMSeg = 0; +} + +void CSphTokenizer_UTF8MMSeg::SetBuffer ( BYTE * sBuffer, int iLength ) +{ + CSphTokenizer_UTF8::SetBuffer(sBuffer, iLength); + css::Segmenter* seg = d_->GetSegmenter(m_dictpath.cstr()); + if(seg) + seg->setBuffer((u1*)m_pBuffer, iLength); + else + sphDie ( " Tokenizer initialization failure. " ); + m_segoffset = 0; + m_segToken = (char*)m_pCur; +} + +bool CSphTokenizer_UTF8MMSeg::IsSegment(const BYTE * pCur) +{ + size_t offset = pCur - m_pBuffer; + //if(offset == 0) return false; + + css::Segmenter* seg = d_->GetSegmenter(m_dictpath.cstr()); //TODO fill blank here + if(seg){ + u2 len = 0, symlen = 0; + const char* tok = NULL; + while(m_segoffset < offset) { + tok = (const char*)seg->peekToken(len, symlen); + seg->popToken(len); + m_segoffset += len; + if(tok == NULL || len==0){ + //break? + break; + } + } + return (m_segoffset == offset); + } //end if seg + return true; +} + +BYTE * CSphTokenizer_UTF8MMSeg::GetToken () +{ + m_iLastTokenLenMMSeg = 0; + //BYTE* tok = CSphTokenizer_UTF8::GetToken(); + while(!IsSegment(m_pCur) || m_pAccumSeg == m_sAccumSeg) + { + BYTE* tok = CSphTokenizer_UTF8::GetToken(); + if(!tok){ + m_iLastTokenLenMMSeg = 0; + return NULL; + } + + if(m_pAccumSeg == m_sAccumSeg) + m_segToken = (char*)m_pTokenStart; + + if ( (m_pAccumSeg - m_sAccumSeg)CloneBase ( this, bEscaped ); + pClone->m_dictpath = m_dictpath; + return pClone; +} + +const BYTE* CSphTokenizer_UTF8MMSeg::GetThesaurus(BYTE * sBuffer, int iLength ) +{ + css::Segmenter* seg = d_->GetSegmenter(m_dictpath.cstr()); + if(seg) + return (const BYTE*)seg->thesaurus((const char*)sBuffer, iLength); + return NULL; +} + +#endif + +////////////////////////////////////////////////////////////////////////// + +CSphTokenizer_Filter::CSphTokenizer_Filter ( ISphTokenizer * pTokenizer, const CSphMultiformContainer * pContainer ) + : m_pTokenizer ( pTokenizer ) + , m_pMultiWordforms ( pContainer ) + , m_iStoredStart ( 0 ) + , m_iStoredLen ( 0 ) + , m_bBuildMultiform ( false ) + , m_pLastToken ( NULL ) +{ + assert ( pTokenizer && pContainer ); + m_dStoredTokens.Resize ( pContainer->m_iMaxTokens + 1 ); + m_sTokenizedMultiform[0] = '\0'; +} + + +CSphTokenizer_Filter::~CSphTokenizer_Filter () +{ + SafeDelete ( m_pTokenizer ); +} + + +void CSphTokenizer_Filter::FillTokenInfo ( StoredToken_t * pToken ) +{ + pToken->m_bBoundary = m_pTokenizer->GetBoundary (); + pToken->m_bSpecial = m_pTokenizer->WasTokenSpecial (); + pToken->m_iOvershortCount = m_pTokenizer->GetOvershortCount (); + pToken->m_iTokenLen = m_pTokenizer->GetLastTokenLen (); + pToken->m_szTokenStart = m_pTokenizer->GetTokenStart (); + pToken->m_szTokenEnd = m_pTokenizer->GetTokenEnd (); + pToken->m_pBufferPtr = m_pTokenizer->GetBufferPtr (); +} + + +BYTE * CSphTokenizer_Filter::GetToken () +{ + m_sTokenizedMultiform[0] = '\0'; + + BYTE * pToken = ( m_iStoredLen>0 ) + ? m_dStoredTokens [m_iStoredStart].m_sToken + : m_pTokenizer->GetToken (); + + if ( !pToken ) + { + memset ( &m_tLastToken, 0, sizeof ( m_tLastToken ) ); + m_pLastToken = &m_tLastToken; + return NULL; + } + + int iSize = m_dStoredTokens.GetLength (); + + CSphMultiforms ** pWordforms = m_pMultiWordforms->m_Hash ( (const char *)pToken ); + if ( !pWordforms ) + { + if ( m_iStoredLen ) + { + m_pLastToken = &(m_dStoredTokens[m_iStoredStart]); + m_iStoredLen--; + m_iStoredStart = (m_iStoredStart + 1) % iSize; + } else + { + FillTokenInfo ( &m_tLastToken ); + m_pLastToken = &m_tLastToken; + + bool bBlended = m_pTokenizer->TokenIsBlended(); + m_bBlended = bBlended; + m_bNonBlended = !bBlended; + } + + return pToken; + } + + if ( !m_iStoredLen ) + { + FillTokenInfo ( &m_dStoredTokens[m_iStoredStart] ); + strcpy ( (char *)m_dStoredTokens[m_iStoredStart].m_sToken, (const char *)pToken ); // NOLINT + m_iStoredLen++; + } + + int iTokensNeeded = (*pWordforms)->m_iMaxTokens - m_iStoredLen + 1; + for ( int i = 0; i < iTokensNeeded; i++ ) + { + pToken = m_pTokenizer->GetToken (); + + if ( !pToken ) + break; + + int iIndex = (m_iStoredStart+m_iStoredLen) % iSize; + FillTokenInfo ( &(m_dStoredTokens[iIndex]) ); + strcpy ( (char *)m_dStoredTokens[iIndex].m_sToken, (const char *)pToken ); // NOLINT + m_iStoredLen++; + } + + if ( !m_iStoredLen ) + return NULL; + + if ( m_iStoredLen<=(*pWordforms)->m_iMinTokens ) + { + m_pLastToken = &(m_dStoredTokens [m_iStoredStart]); + m_iStoredLen--; + m_iStoredStart = (m_iStoredStart + 1) % iSize; + return m_pLastToken->m_sToken; + } + + ARRAY_FOREACH ( i, (*pWordforms)->m_dWordforms ) + { + CSphMultiform * pCurForm = (*pWordforms)->m_dWordforms[i]; + + if ( m_iStoredLen<=pCurForm->m_dTokens.GetLength () ) + continue; + + bool bFound = true; + for ( int j = 0; j < pCurForm->m_dTokens.GetLength (); j++ ) + { + int iIndex = ( m_iStoredStart + j + 1 ) % iSize; + const char * szStored = (const char*)m_dStoredTokens[iIndex].m_sToken; + const char * szNormal = pCurForm->m_dTokens[j].cstr (); + + if ( *szNormal!=*szStored || strcasecmp ( szNormal, szStored ) ) + { + bFound = false; + break; + } + } + + if ( bFound ) + { + int iTokensPerForm = 1+pCurForm->m_dTokens.GetLength(); + + m_tLastToken.m_bBoundary = false; + m_tLastToken.m_bSpecial = false; + m_tLastToken.m_iOvershortCount = m_dStoredTokens[m_iStoredStart].m_iOvershortCount; + m_tLastToken.m_iTokenLen = pCurForm->m_iNormalTokenLen; + m_tLastToken.m_szTokenStart = m_dStoredTokens[m_iStoredStart].m_szTokenStart; + m_tLastToken.m_szTokenEnd = m_dStoredTokens[ ( m_iStoredStart+iTokensPerForm-1 ) % iSize ].m_szTokenEnd; + m_tLastToken.m_pBufferPtr = m_dStoredTokens[ ( m_iStoredStart+iTokensPerForm-1 ) % iSize ].m_pBufferPtr; + m_pLastToken = &m_tLastToken; + + if ( m_bBuildMultiform ) + { + BYTE * pOut = m_sTokenizedMultiform; + BYTE * pMax = pOut + sizeof(m_sTokenizedMultiform); + for ( int i=0; i=0 ); + strcpy ( (char *)m_sOutMultiform, pCurForm->m_sNormalForm.cstr () ); // NOLINT + return m_sOutMultiform; + } + } + + pToken = m_dStoredTokens[m_iStoredStart].m_sToken; + m_pLastToken = &(m_dStoredTokens[m_iStoredStart]); + + m_iStoredStart = (m_iStoredStart + 1) % iSize; + m_iStoredLen--; + + return pToken; +} + + +ISphTokenizer * CSphTokenizer_Filter::Clone ( bool bEscaped ) const +{ + ISphTokenizer * pClone = m_pTokenizer->Clone ( bEscaped ); + return CreateTokenFilter ( pClone, m_pMultiWordforms ); +} + + +void CSphTokenizer_Filter::SetBufferPtr ( const char * sNewPtr ) +{ + m_pLastToken = NULL; + m_iStoredLen = 0; + m_iStoredStart = 0; + m_pTokenizer->SetBufferPtr ( sNewPtr ); +} + +void CSphTokenizer_Filter::SetBuffer ( BYTE * sBuffer, int iLength ) +{ + m_pTokenizer->SetBuffer ( sBuffer, iLength ); + SetBufferPtr ( (const char *)sBuffer ); +} + + +///////////////////////////////////////////////////////////////////////////// +// FILTER +///////////////////////////////////////////////////////////////////////////// + +CSphFilterSettings::CSphFilterSettings () + : m_sAttrName ( "" ) + , m_bExclude ( false ) + , m_uMinValue ( 0 ) + , m_uMaxValue ( UINT_MAX ) + , m_pValues ( NULL ) + , m_nValues ( 0 ) +{} + + +CSphFilterSettings::CSphFilterSettings ( const CSphFilterSettings & rhs ) +{ + assert ( 0 ); + (*this) = rhs; +} + + +void CSphFilterSettings::SetExternalValues ( const SphAttr_t * pValues, int nValues ) +{ + m_pValues = pValues; + m_nValues = nValues; +} + + +bool CSphFilterSettings::operator == ( const CSphFilterSettings & rhs ) const +{ + // check name, mode, type + if ( m_sAttrName!=rhs.m_sAttrName || m_bExclude!=rhs.m_bExclude || m_eType!=rhs.m_eType ) + return false; + + switch ( m_eType ) + { + case SPH_FILTER_RANGE: + return m_uMinValue==rhs.m_uMinValue && m_uMaxValue==rhs.m_uMaxValue; + + case SPH_FILTER_VALUES: + if ( m_dValues.GetLength()!=rhs.m_dValues.GetLength() ) + return false; + + ARRAY_FOREACH ( i, m_dValues ) + if ( m_dValues[i]!=rhs.m_dValues[i] ) + return false; + + return true; + + default: + assert ( 0 && "internal error: unhandled filter type in comparison" ); + return false; + } +} + +///////////////////////////////////////////////////////////////////////////// +// QUERY +///////////////////////////////////////////////////////////////////////////// + +CSphQuery::CSphQuery () + : m_sIndexes ( "*" ) + , m_sQuery ( "" ) + , m_sRawQuery ( "" ) + , m_iOffset ( 0 ) + , m_iLimit ( 20 ) + , m_pWeights ( NULL ) + , m_iWeights ( 0 ) + , m_eMode ( SPH_MATCH_ALL ) + , m_eRanker ( SPH_RANK_DEFAULT ) + , m_eSort ( SPH_SORT_RELEVANCE ) + , m_iMaxMatches ( 1000 ) + , m_eGroupFunc ( SPH_GROUPBY_ATTR ) + , m_sGroupSortBy ( "@groupby desc" ) + , m_sGroupDistinct ( "" ) + , m_iCutoff ( 0 ) + , m_iRetryCount ( 0 ) + , m_iRetryDelay ( 0 ) + , m_bGeoAnchor ( false ) + , m_fGeoLatitude ( 0.0f ) + , m_fGeoLongitude ( 0.0f ) + , m_uMaxQueryMsec ( 0 ) + , m_sComment ( "" ) + , m_sSelect ( "" ) + , m_bReverseScan ( false ) + , m_iSQLSelectStart ( -1 ) + , m_iSQLSelectEnd ( -1 ) + + , m_iOldVersion ( 0 ) + , m_iOldGroups ( 0 ) + , m_pOldGroups ( NULL ) + , m_iOldMinTS ( 0 ) + , m_iOldMaxTS ( UINT_MAX ) + , m_iOldMinGID ( 0 ) + , m_iOldMaxGID ( UINT_MAX ) + + , m_eCollation ( SPH_COLLATION_DEFAULT ) + , m_bAgent ( false ) +{} + + +CSphQuery::~CSphQuery () +{ +} + + +int CSphQuery::GetIndexWeight ( const char * sName ) const +{ + ARRAY_FOREACH ( i, m_dIndexWeights ) + if ( m_dIndexWeights[i].m_sName==sName ) + return m_dIndexWeights[i].m_iValue; + return 1; +} + +////////////////////////////////////////////////////////////////////////// + +struct SelectBounds_t +{ + int m_iStart; + int m_iEnd; +}; +#define YYSTYPE SelectBounds_t +#include "yysphinxselect.h" + + +class SelectParser_t +{ +public: + int GetToken ( YYSTYPE * lvalp ); + void AddItem ( YYSTYPE * pExpr, ESphAggrFunc eAggrFunc=SPH_AGGR_NONE, YYSTYPE * pStart=NULL, YYSTYPE * pEnd=NULL ); + void AddItem ( const char * pToken, YYSTYPE * pStart=NULL, YYSTYPE * pEnd=NULL ); + void AliasLastItem ( YYSTYPE * pAlias ); +private: + void AutoAlias ( CSphQueryItem & tItem, YYSTYPE * pStart, YYSTYPE * pEnd ); + +public: + CSphString m_sParserError; + const char * m_pLastTokenStart; + + const char * m_pStart; + const char * m_pCur; + + CSphQuery * m_pQuery; +}; + +int yylex ( YYSTYPE * lvalp, SelectParser_t * pParser ) { return pParser->GetToken ( lvalp );} +void yyerror ( SelectParser_t * pParser, const char * sMessage ) { pParser->m_sParserError.SetSprintf ( "%s near '%s'", sMessage, pParser->m_pLastTokenStart ); } +#include "yysphinxselect.c" + + +int SelectParser_t::GetToken ( YYSTYPE * lvalp ) +{ + // skip whitespace, check eof + while ( isspace ( *m_pCur ) ) m_pCur++; + if ( !*m_pCur ) return 0; + + m_pLastTokenStart = m_pCur; + lvalp->m_iStart = m_pCur-m_pStart; + + // check for constant + if ( isdigit ( *m_pCur ) ) + { + char * pEnd = NULL; + double fDummy; // to avoid gcc unused result warning + fDummy = strtod ( m_pCur, &pEnd ); + + m_pCur = pEnd; + lvalp->m_iEnd = m_pCur-m_pStart; + return SEL_TOKEN; + } + + // check for token + if ( sphIsAttr ( m_pCur[0] ) || ( m_pCur[0]=='@' && sphIsAttr ( m_pCur[1] ) && !isdigit ( m_pCur[1] ) ) ) + { + m_pCur++; + while ( sphIsAttr ( *m_pCur ) ) m_pCur++; + lvalp->m_iEnd = m_pCur-m_pStart; + + #define LOC_CHECK(_str,_len,_ret) \ + if ( lvalp->m_iEnd==_len+lvalp->m_iStart && strncasecmp ( m_pStart+lvalp->m_iStart, _str, _len )==0 ) return _ret; + + LOC_CHECK ( "ID", 2, SEL_ID ); + LOC_CHECK ( "AS", 2, SEL_AS ); + LOC_CHECK ( "OR", 2, TOK_OR ); + LOC_CHECK ( "AND", 3, TOK_AND ); + LOC_CHECK ( "NOT", 3, TOK_NOT ); + LOC_CHECK ( "AVG", 3, SEL_AVG ); + LOC_CHECK ( "MIN", 3, SEL_MIN ); + LOC_CHECK ( "MAX", 3, SEL_MAX ); + LOC_CHECK ( "SUM", 3, SEL_SUM ); + LOC_CHECK ( "COUNT", 5, SEL_COUNT ); + LOC_CHECK ( "DISTINCT", 8, SEL_DISTINCT ); + LOC_CHECK ( "WEIGHT", 6, SEL_WEIGHT ); + + #undef LOC_CHECK + + return SEL_TOKEN; + } + + // check for equality checks + lvalp->m_iEnd = 1+lvalp->m_iStart; + switch ( *m_pCur ) + { + case '<': + m_pCur++; + if ( *m_pCur=='>' ) { m_pCur++; lvalp->m_iEnd++; return TOK_NE; } + if ( *m_pCur=='=' ) { m_pCur++; lvalp->m_iEnd++; return TOK_LTE; } + return '<'; + + case '>': + m_pCur++; + if ( *m_pCur=='=' ) { m_pCur++; lvalp->m_iEnd++; return TOK_GTE; } + return '>'; + + case '=': + m_pCur++; + if ( *m_pCur=='=' ) { m_pCur++; lvalp->m_iEnd++; } + return TOK_EQ; + } + + // return char as a token + return *m_pCur++; +} + +void SelectParser_t::AutoAlias ( CSphQueryItem & tItem, YYSTYPE * pStart, YYSTYPE * pEnd ) +{ + if ( pStart && pEnd ) + { + tItem.m_sAlias.SetBinary ( m_pStart + pStart->m_iStart, pEnd->m_iEnd - pStart->m_iStart ); + tItem.m_sAlias.ToLower(); + } else + tItem.m_sAlias = tItem.m_sExpr; +} + +void SelectParser_t::AddItem ( YYSTYPE * pExpr, ESphAggrFunc eAggrFunc, YYSTYPE * pStart, YYSTYPE * pEnd ) +{ + CSphQueryItem & tItem = m_pQuery->m_dItems.Add(); + tItem.m_sExpr.SetBinary ( m_pStart + pExpr->m_iStart, pExpr->m_iEnd - pExpr->m_iStart ); + tItem.m_sExpr.ToLower(); + tItem.m_eAggrFunc = eAggrFunc; + AutoAlias ( tItem, pStart, pEnd ); +} + +void SelectParser_t::AddItem ( const char * pToken, YYSTYPE * pStart, YYSTYPE * pEnd ) +{ + CSphQueryItem & tItem = m_pQuery->m_dItems.Add(); + tItem.m_sExpr = pToken; + tItem.m_eAggrFunc = SPH_AGGR_NONE; + tItem.m_sExpr.ToLower(); + AutoAlias ( tItem, pStart, pEnd ); +} + +void SelectParser_t::AliasLastItem ( YYSTYPE * pAlias ) +{ + if ( pAlias ) + { + CSphQueryItem & tItem = m_pQuery->m_dItems.Last(); + tItem.m_sAlias.SetBinary ( m_pStart + pAlias->m_iStart, pAlias->m_iEnd - pAlias->m_iStart ); + tItem.m_sAlias.ToLower(); + } +} + + +bool CSphQuery::ParseSelectList ( CSphString & sError ) +{ + m_dItems.Reset (); + if ( m_sSelect.IsEmpty() ) + return true; // empty is ok; will just return everything + + SelectParser_t tParser; + tParser.m_pStart = m_sSelect.cstr(); + tParser.m_pCur = m_sSelect.cstr(); + tParser.m_pQuery = this; + + yyparse ( &tParser ); + + sError = tParser.m_sParserError; + return sError.IsEmpty (); +} + +///////////////////////////////////////////////////////////////////////////// +// SCHEMA +///////////////////////////////////////////////////////////////////////////// + +static CSphString sphDumpAttr ( const CSphColumnInfo & tAttr ) +{ + CSphString sRes; + sRes.SetSprintf ( "%s %s:%d@%d", sphTypeName ( tAttr.m_eAttrType ), tAttr.m_sName.cstr(), tAttr.m_tLocator.m_iBitCount, tAttr.m_tLocator.m_iBitOffset ); + return sRes; +} + + +bool CSphSchema::CompareTo ( const CSphSchema & rhs, CSphString & sError ) const +{ + // check attr count + if ( GetAttrsCount()!=rhs.GetAttrsCount() ) + { + sError.SetSprintf ( "attribute count mismatch (me=%s, in=%s, myattrs=%d, inattrs=%d)", + m_sName.cstr(), rhs.m_sName.cstr(), + GetAttrsCount(), rhs.GetAttrsCount() ); + return false; + } + + // check attrs + ARRAY_FOREACH ( i, m_dAttrs ) + if (!( rhs.m_dAttrs[i]==m_dAttrs[i] )) + { + sError.SetSprintf ( "attribute mismatch (me=%s, in=%s, idx=%d, myattr=%s, inattr=%s)", + m_sName.cstr(), rhs.m_sName.cstr(), + i, sphDumpAttr ( m_dAttrs[i] ).cstr(), sphDumpAttr ( rhs.m_dAttrs[i] ).cstr() ); + return false; + } + + // check field count + if ( rhs.m_dFields.GetLength()!=m_dFields.GetLength() ) + { + sError.SetSprintf ( "fulltext fields count mismatch (me=%s, in=%s, myfields=%d, infields=%d)", + m_sName.cstr(), rhs.m_sName.cstr(), + m_dFields.GetLength(), rhs.m_dFields.GetLength() ); + return false; + } + + // check fulltext field names + ARRAY_FOREACH ( i, rhs.m_dFields ) + if ( rhs.m_dFields[i].m_sName!=m_dFields[i].m_sName ) + { + sError.SetSprintf ( "fulltext field mismatch (me=%s, myfield=%s, idx=%d, in=%s, infield=%s)", + m_sName.cstr(), rhs.m_sName.cstr(), + i, m_dFields[i].m_sName.cstr(), rhs.m_dFields[i].m_sName.cstr() ); + return false; + } + + return true; +} + +class SchemaRecord { +public: + CSphString key; + int idx; +}; + +bool Cmp(const SchemaRecord &p1, const SchemaRecord &p2) +{ + char i = 0; + while(1) { + unsigned char pu1 = p1.key.cstr()[i]; + unsigned char pu2 = p2.key.cstr()[i]; + if(pu1 == pu2) { + if(pu1 == 0) + break; + i++; + }else{ + return pu1 < pu2; + } + } + return true; +} + +int CSphSchema::BuildFieldIndexCache() +{ + int iRet = 0; + //m_field_cache.clear(); + if(!m_pfield_cache) + m_pfield_cache = new SphDarts::DoubleArray(); + + if(m_pfield_cache->array() == NULL) + { + std::vector< SchemaRecord > items; + ARRAY_FOREACH ( i, m_dFields ) { + SchemaRecord sr; + sr.key = m_dFields[i].m_sName; + sr.idx = i; + items.push_back(sr); + +#if USE_PYTHON_CASE_SENSIVE_ATTR + SchemaRecord srE; + if(m_dFields[i].m_sNameExactly != m_dFields[i].m_sName) + { + srE.key = m_dFields[i].m_sNameExactly; + srE.idx = i; + items.push_back(srE); + } +#endif + } + std::sort(items.begin(), items.end(), Cmp); + + std::vector key; + std::vector value; + for( std::vector::iterator it = items.begin(); + it != items.end(); it++) { + char* ptr = (char*)it->key.cstr(); + key.push_back(ptr); + value.push_back(it->idx); + } + iRet = m_pfield_cache->build(key.size(), &key[0], 0, &value[0] ) ; + } + return iRet; +} + +int CSphSchema::GetFieldIndex ( const char * sName ) const +{ + if ( !sName ) + return -1; + //check in cache. + if(m_pfield_cache && m_pfield_cache->array() != NULL) + { + //needs to build? + + SphDarts::DoubleArray::result_pair_type rs; + m_pfield_cache->exactMatchSearch(sName,rs); + if(rs.pos) { + //printf("cache hit! [%s]:%d.", sName, rs.value); + return rs.value; + } + } + + ARRAY_FOREACH ( i, m_dFields ) { + if ( strcasecmp ( m_dFields[i].m_sName.cstr(), sName )==0 ) + return i; +#if USE_PYTHON_CASE_SENSIVE_ATTR + if ( strcasecmp ( m_dFields[i].m_sNameExactly.cstr(), sName )==0 ) + return i; +#endif + } + return -1; +} + + +int CSphSchema::GetAttrIndex ( const char * sName ) const +{ + if ( !sName ) + return -1; + ARRAY_FOREACH ( i, m_dAttrs ) { + if ( m_dAttrs[i].m_sName==sName ) + return i; + +#if USE_PYTHON_CASE_SENSIVE_ATTR + if ( m_dAttrs[i].m_sNameExactly==sName ) + return i; +#endif + + } + return -1; +} + + +const CSphColumnInfo * CSphSchema::GetAttr ( const char * sName ) const +{ + int iIndex = GetAttrIndex ( sName ); + if ( iIndex>=0 ) + return &m_dAttrs[iIndex]; + return NULL; +} + + +void CSphSchema::Reset () +{ + if(m_pfield_cache) + m_pfield_cache->clear(); + m_dFields.Reset(); + ResetAttrs (); +} + + +void CSphSchema::ResetAttrs () +{ + m_dAttrs.Reset(); + m_dStaticUsed.Reset(); + m_dDynamicUsed.Reset(); + m_iStaticSize = 0; +} + + +void CSphSchema::AddAttr ( const CSphColumnInfo & tCol, bool bDynamic ) +{ + assert ( tCol.m_eAttrType!=SPH_ATTR_NONE ); + if ( tCol.m_eAttrType==SPH_ATTR_NONE ) + return; + + m_dAttrs.Add ( tCol ); + CSphAttrLocator & tLoc = m_dAttrs.Last().m_tLocator; + + if ( tLoc.IsID() ) + return; + + int iBits = ROWITEM_BITS; + if ( tCol.m_tLocator.m_iBitCount>0 ) iBits = tCol.m_tLocator.m_iBitCount; + if ( tCol.m_eAttrType==SPH_ATTR_BOOL ) iBits = 1; + if ( tCol.m_eAttrType==SPH_ATTR_BIGINT ) iBits = 64; + tLoc.m_iBitCount = iBits; + tLoc.m_bDynamic = bDynamic; + + CSphVector & dUsed = bDynamic ? m_dDynamicUsed : m_dStaticUsed; + if ( iBits>=ROWITEM_BITS ) + { + tLoc.m_iBitOffset = dUsed.GetLength()*ROWITEM_BITS; + + int iItems = (iBits+ROWITEM_BITS-1) / ROWITEM_BITS; + for ( int i=0; i=ROWITEM_BITS ) + { + for ( int i=0; i=0 ); + + if ( m_dStaticUsed[iItem]<=0 ) + m_iStaticSize--; + } + + // do remove + m_dAttrs.Remove ( iIndex ); +} + +/////////////////////////////////////////////////////////////////////////////// +// BIT-ENCODED FILE OUTPUT +/////////////////////////////////////////////////////////////////////////////// + +CSphWriter::CSphWriter () + : m_sName ( "" ) + , m_iPos ( -1 ) + , m_iWritten ( 0 ) + + , m_iFD ( -1 ) + , m_iPoolUsed ( 0 ) + , m_pBuffer ( NULL ) + , m_pPool ( NULL ) + , m_bOwnFile ( false ) + , m_pSharedOffset ( NULL ) + , m_iBufferSize ( 262144 ) + + , m_bError ( false ) + , m_pError ( NULL ) +{ +} + + +void CSphWriter::SetBufferSize ( int iBufferSize ) +{ + if ( iBufferSize!=m_iBufferSize ) + { + m_iBufferSize = Max ( iBufferSize, 262144 ); + if ( m_pBuffer ) + SafeDeleteArray ( m_pBuffer ); + } +} + + +bool CSphWriter::OpenFile ( const CSphString & sName, CSphString & sErrorBuffer ) +{ + assert ( !sName.IsEmpty() ); + assert ( m_iFD<0 && "already open" ); + + m_bOwnFile = true; + m_sName = sName; + m_pError = &sErrorBuffer; + + if ( !m_pBuffer ) + m_pBuffer = new BYTE [ m_iBufferSize ]; + + m_iFD = ::open ( m_sName.cstr(), SPH_O_NEW, 0644 ); + m_pPool = m_pBuffer; + m_iPoolUsed = 0; + m_iPos = 0; + m_iWritten = 0; + m_bError = ( m_iFD<0 ); + + if ( m_bError ) + m_pError->SetSprintf ( "failed to create %s: %s" , sName.cstr(), strerror(errno) ); + + return !m_bError; +} + + +void CSphWriter::SetFile ( int iFD, SphOffset_t * pSharedOffset ) +{ + assert ( m_iFD<0 && "already open" ); + m_bOwnFile = false; + + if ( !m_pBuffer ) + m_pBuffer = new BYTE [ m_iBufferSize ]; + + m_iFD = iFD; + m_pPool = m_pBuffer; + m_iPoolUsed = 0; + m_iPos = 0; + m_iWritten = 0; + m_pSharedOffset = pSharedOffset; +} + + +CSphWriter::~CSphWriter () +{ + CloseFile (); + SafeDeleteArray ( m_pBuffer ); +} + + +void CSphWriter::CloseFile ( bool bTruncate ) +{ + if ( m_iFD>=0 ) + { + Flush (); + if ( bTruncate ) + sphTruncate ( m_iFD ); + if ( m_bOwnFile ) + ::close ( m_iFD ); + m_iFD = -1; + } +} + + +void CSphWriter::PutByte ( int data ) +{ + if ( m_iPoolUsed==m_iBufferSize ) + Flush (); + *m_pPool++ = BYTE ( data & 0xff ); + m_iPoolUsed++; + m_iPos++; +} + + +void CSphWriter::PutBytes ( const void * pData, int iSize ) +{ + const BYTE * pBuf = (const BYTE *) pData; + while ( iSize>0 ) + { + int iPut = Min ( iSize, m_iBufferSize ); + if ( m_iPoolUsed+iPut>m_iBufferSize ) + Flush (); + assert ( m_iPoolUsed+iPut<=m_iBufferSize ); + + memcpy ( m_pPool, pBuf, iPut ); + m_pPool += iPut; + m_iPoolUsed += iPut; + m_iPos += iPut; + + pBuf += iPut; + iSize -= iPut; + } +} + + +void CSphWriter::ZipInt ( DWORD uValue ) +{ + int iBytes = 1; + + DWORD u = ( uValue>>7 ); + while ( u ) + { + u >>= 7; + iBytes++; + } + + while ( iBytes-- ) + PutByte ( + ( 0x7f & ( uValue >> (7*iBytes) ) ) + | ( iBytes ? 0x80 : 0 ) ); +} + + +void CSphWriter::ZipOffset ( SphOffset_t uValue ) +{ + int iBytes = 1; + + uint64_t u = ((uint64_t)uValue)>>7; + while ( u ) + { + u >>= 7; + iBytes++; + } + + while ( iBytes-- ) + PutByte ( + ( 0x7f & (DWORD)( uValue >> (7*iBytes) ) ) + | ( iBytes ? 0x80 : 0 ) ); +} + + +void CSphWriter::ZipOffsets ( CSphVector * pData ) +{ + assert ( pData ); + + SphOffset_t * pValue = &((*pData)[0]); + int n = pData->GetLength (); + + while ( n-->0 ) + { + SphOffset_t uValue = *pValue++; + + int iBytes = 1; + + uint64_t u = ((uint64_t)uValue)>>7; + while ( u ) + { + u >>= 7; + iBytes++; + } + + while ( iBytes-- ) + PutByte ( + ( 0x7f & (DWORD)( uValue >> (7*iBytes) ) ) + | ( iBytes ? 0x80 : 0 ) ); + } +} + + +void CSphWriter::Flush () +{ + PROFILE ( write_hits ); + + if ( m_pSharedOffset && *m_pSharedOffset!=m_iWritten ) + sphSeek ( m_iFD, m_iWritten, SEEK_SET ); + + if ( !sphWriteThrottled ( m_iFD, m_pBuffer, m_iPoolUsed, m_sName.cstr(), *m_pError ) ) + m_bError = true; + + m_iWritten += m_iPoolUsed; + m_iPoolUsed = 0; + m_pPool = m_pBuffer; + + if ( m_pSharedOffset ) + *m_pSharedOffset = m_iWritten; +} + + +void CSphWriter::PutString ( const char * szString ) +{ + int iLen = szString ? strlen ( szString ) : 0; + PutDword ( iLen ); + if ( iLen ) + PutBytes ( szString, iLen ); +} + +void CSphWriter::PutString ( const CSphString & sString ) +{ + int iLen = sString.Length(); + PutDword ( iLen ); + if ( iLen ) + PutBytes ( sString.cstr(), iLen ); +} + + +void CSphWriter::SeekTo ( SphOffset_t iPos ) +{ + assert ( iPos>=0 ); + + if ( iPos>=m_iWritten && iPos<=( m_iWritten + m_iPoolUsed ) ) + { + // seeking inside the buffer + m_iPoolUsed = (int)( iPos - m_iWritten ); + m_pPool = m_pBuffer + m_iPoolUsed; + } else + { + assert ( iPos0 ); +} + + +CSphReader::~CSphReader () +{ + if ( m_bBufOwned ) + SafeDeleteArray ( m_pBuff ); +} + + +void CSphReader::SetBuffers ( int iReadBuffer, int iReadUnhinted ) +{ + if ( !m_pBuff ) + m_iBufSize = iReadBuffer; + m_iReadUnhinted = iReadUnhinted; +} + + +void CSphReader::SetFile ( int iFD, const char * sFilename ) +{ + m_iFD = iFD; + m_iPos = 0; + m_iBuffPos = 0; + m_iBuffUsed = 0; + m_sFilename = sFilename; +} + + +void CSphReader::SetFile ( const CSphAutofile & tFile ) +{ + SetFile ( tFile.GetFD(), tFile.GetFilename() ); +} + + +void CSphReader::Reset () +{ + SetFile ( -1, "" ); +} + + +void CSphReader::SeekTo ( SphOffset_t iPos, int iSizeHint ) +{ + assert ( iPos>=0 ); + +#ifndef NDEBUG +#if PARANOID + struct_stat tStat; + fstat ( m_iFD, &tStat ); + if ( iPos > tStat.st_size ) + sphDie ( "INTERNAL ERROR: seeking past the end of file" ); +#endif +#endif + + if ( iPos>=m_iPos && iPos>32 ); + + DWORD uRes; + if ( !ReadFile ( hFile, pBuf, iBytes, &uRes, &tOverlapped ) ) + { + DWORD uErr = GetLastError(); + if ( uErr==ERROR_HANDLE_EOF ) + return 0; + + errno = uErr; // FIXME! should remap from Win to POSIX + return -1; + } + + if ( g_bIOStats ) + { + g_IOStats.m_iReadTime += sphMicroTimer() - tmStart; + g_IOStats.m_iReadOps++; + g_IOStats.m_iReadBytes += iBytes; + } + + return uRes; +} + +#else +#if HAVE_PREAD + +// atomic seek+read for non-Windows systems with pread() call +int sphPread ( int iFD, void * pBuf, int iBytes, SphOffset_t iOffset ) +{ + if ( !g_bIOStats ) + return ::pread ( iFD, pBuf, iBytes, iOffset ); + + int64_t tmStart = sphMicroTimer(); + int iRes = (int) ::pread ( iFD, pBuf, iBytes, iOffset ); + g_IOStats.m_iReadTime += sphMicroTimer() - tmStart; + g_IOStats.m_iReadOps++; + g_IOStats.m_iReadBytes += iBytes; + return iRes; +} + +#else + +// generic fallback; prone to races between seek and read +int sphPread ( int iFD, void * pBuf, int iBytes, SphOffset_t iOffset ) +{ + if ( sphSeek ( iFD, iOffset, SEEK_SET )==-1 ) + return -1; + + return sphReadThrottled ( iFD, pBuf, iBytes ); +} + +#endif // HAVE_PREAD +#endif // USE_WINDOWS + + +void CSphReader::UpdateCache () +{ + PROFILE ( read_hits ); + assert ( m_iFD>=0 ); + + // alloc buf on first actual read + if ( !m_pBuff ) + { + if ( m_iBufSize<=0 ) + m_iBufSize = DEFAULT_READ_BUFFER; + + m_bBufOwned = true; + m_pBuff = new BYTE [ m_iBufSize ]; + } + + // stream position could be changed externally + // so let's just hope that the OS optimizes redundant seeks + SphOffset_t iNewPos = m_iPos + Min ( m_iBuffPos, m_iBuffUsed ); + + if ( m_iSizeHint<=0 ) + m_iSizeHint = ( m_iReadUnhinted>0 ) ? m_iReadUnhinted : DEFAULT_READ_UNHINTED; + int iReadLen = Min ( m_iSizeHint, m_iBufSize ); + + m_iBuffPos = 0; + m_iBuffUsed = sphPread ( m_iFD, m_pBuff, iReadLen, iNewPos ); // FIXME! what about throttling? + + if ( m_iBuffUsed<0 ) + { + m_iBuffUsed = m_iBuffPos = 0; + m_bError = true; + m_sError.SetSprintf ( "pread error in %s: pos="INT64_FMT", len=%d, code=%d, msg=%s", + m_sFilename.cstr(), (int64_t)iNewPos, iReadLen, errno, strerror(errno) ); + return; + } + + // all fine, adjust offset and hint + m_iSizeHint -= m_iBuffUsed; + m_iPos = iNewPos; +} + + +int CSphReader::GetByte () +{ + if ( m_iBuffPos>=m_iBuffUsed ) + { + UpdateCache (); + if ( m_iBuffPos>=m_iBuffUsed ) + return 0; // unexpected io failure + } + + assert ( m_iBuffPosm_iBufSize ) + { + int iLen = m_iBuffUsed - m_iBuffPos; + assert ( iLen<=m_iBufSize ); + + memcpy ( pOut, m_pBuff+m_iBuffPos, iLen ); + m_iBuffPos += iLen; + pOut += iLen; + iSize -= iLen; + m_iSizeHint = iSize; // FIXME! + + if ( iSize>0 ) + { + UpdateCache (); + if ( !m_iBuffUsed ) + return; // unexpected io failure + } + } + + if ( m_iBuffPos+iSize>m_iBuffUsed ) + { + // move old buffer tail to buffer head to avoid losing the data + const int iLen = m_iBuffUsed - m_iBuffPos; + if ( iLen>0 ) + { + memcpy ( pOut, m_pBuff+m_iBuffPos, iLen ); + m_iBuffPos += iLen; + pOut += iLen; + iSize -= iLen; + } + + m_iSizeHint = iSize - m_iBuffUsed + m_iBuffPos; // FIXME! + UpdateCache (); + if ( m_iBuffPos+iSize>m_iBuffUsed ) + { + memset ( pOut, 0, iSize ); // unexpected io failure + return; + } + } + + assert ( (m_iBuffPos+iSize)<=m_iBuffUsed ); + memcpy ( pOut, m_pBuff+m_iBuffPos, iSize ); + m_iBuffPos += iSize; +} + + +int CSphReader::GetBytesZerocopy ( const BYTE ** ppData, int iMax ) +{ + if ( m_iBuffPos>=m_iBuffUsed ) + { + UpdateCache (); + if ( m_iBuffPos>=m_iBuffUsed ) + return 0; // unexpected io failure + } + + int iChunk = Min ( m_iBuffUsed-m_iBuffPos, iMax ); + *ppData = m_pBuff + m_iBuffPos; + m_iBuffPos += iChunk; + return iChunk; +} + + +int CSphReader::GetLine ( char * sBuffer, int iMaxLen ) +{ + int iOutPos = 0; + iMaxLen--; // reserve space for trailing '\0' + + // grab as many chars as we can + while ( iOutPos=m_iBuffUsed ) + { + UpdateCache (); + if ( m_iBuffPos>=m_iBuffUsed ) + { + if ( iOutPos==0 ) return -1; // current line is empty; indicate eof + break; // return current line; will return eof next time + } + } + + // break on CR or LF + if ( m_pBuff[m_iBuffPos]=='\r' || m_pBuff[m_iBuffPos]=='\n' ) + break; + + // one more valid char + sBuffer[iOutPos++] = m_pBuff[m_iBuffPos++]; + } + + // skip everything until the newline or eof + for ( ;; ) + { + // read next chunk if necessary + if ( m_iBuffPos>=m_iBuffUsed ) + UpdateCache (); + + // eof? + if ( m_iBuffPos>=m_iBuffUsed ) + break; + + // newline? + if ( m_pBuff[m_iBuffPos++]=='\n' ) + break; + } + + // finalize + sBuffer[iOutPos] = '\0'; + return iOutPos; +} + +///////////////////////////////////////////////////////////////////////////// + +#if PARANOID + +#define SPH_UNZIP_IMPL(_type,_getexpr) \ + register DWORD b = 0; \ + register _type v = 0; \ + int it = 0; \ + do { b = _getexpr; v = ( v<<7 ) + ( b&0x7f ); it++; } while ( b&0x80 ); \ + assert ( (it-1)*7<=sizeof(_type)*8 ); \ + return v; + +#else + +#define SPH_UNZIP_IMPL(_type,_getexpr) \ + register DWORD b = 0; \ + register _type v = 0; \ + do { b = _getexpr; v = ( v<<7 ) + ( b&0x7f ); } while ( b&0x80 ); \ + return v; + +#endif // PARANOID + +DWORD sphUnzipInt ( const BYTE * & pBuf ) { SPH_UNZIP_IMPL ( DWORD, *pBuf++ ); } +SphOffset_t sphUnzipOffset ( const BYTE * & pBuf ) { SPH_UNZIP_IMPL ( SphOffset_t, *pBuf++ ); } + +DWORD CSphReader::UnzipInt () { SPH_UNZIP_IMPL ( DWORD, GetByte() ); } +SphOffset_t CSphReader::UnzipOffset () { SPH_UNZIP_IMPL ( SphOffset_t, GetByte() ); } + + +#if USE_64BIT +#define sphUnzipWordid sphUnzipOffset +#else +#define sphUnzipWordid sphUnzipInt +#endif + +///////////////////////////////////////////////////////////////////////////// + +const CSphReader & CSphReader::operator = ( const CSphReader & rhs ) +{ + SetFile ( rhs.m_iFD, rhs.m_sFilename.cstr() ); + SeekTo ( rhs.m_iPos + rhs.m_iBuffPos, rhs.m_iSizeHint ); + return *this; +} + + +DWORD CSphReader::GetDword () +{ + DWORD uRes; + GetBytes ( &uRes, sizeof(DWORD) ); + return uRes; +} + + +SphOffset_t CSphReader::GetOffset () +{ + SphOffset_t uRes; + GetBytes ( &uRes, sizeof(SphOffset_t) ); + return uRes; +} + + +CSphString CSphReader::GetString () +{ + CSphString sRes; + + DWORD iLen = GetDword (); + if ( iLen ) + { + char * sBuf = new char [ iLen ]; + GetBytes ( sBuf, iLen ); + sRes.SetBinary ( sBuf, iLen ); + SafeDeleteArray ( sBuf ); + } + + return sRes; +} + +////////////////////////////////////////////////////////////////////////// + +CSphAutoreader::~CSphAutoreader () +{ + Close (); +} + + +bool CSphAutoreader::Open ( const CSphString & sFilename, CSphString & sError ) +{ + assert ( m_iFD<0 ); + assert ( !sFilename.IsEmpty() ); + + m_iFD = ::open ( sFilename.cstr(), SPH_O_READ, 0644 ); + m_iPos = 0; + m_iBuffPos = 0; + m_iBuffUsed = 0; + m_sFilename = sFilename; + + if ( m_iFD<0 ) + sError.SetSprintf ( "failed to open %s: %s", sFilename.cstr(), strerror(errno) ); + return ( m_iFD>=0 ); +} + + +void CSphAutoreader::Close () +{ + if ( m_iFD>=0 ) + ::close ( m_iFD ); + m_iFD = -1; +} + + +SphOffset_t CSphAutoreader::GetFilesize () +{ + assert ( m_iFD>=0 ); + + struct_stat st; + if ( m_iFD<0 || fstat ( m_iFD, &st )<0 ) + return -1; + + return st.st_size; +} + +///////////////////////////////////////////////////////////////////////////// +// QUERY RESULT +///////////////////////////////////////////////////////////////////////////// + +CSphQueryResult::CSphQueryResult () + : m_tSchema ( "query_result" ) +{ + m_iQueryTime = 0; + m_iCpuTime = 0; + m_iMultiplier = 1; + m_iTotalMatches = 0; + m_pMva = NULL; + m_pStrings = NULL; + m_iOffset = 0; + m_iCount = 0; + m_iSuccesses = 0; +} + + +CSphQueryResult::~CSphQueryResult () +{ + ARRAY_FOREACH ( i, m_dStorage2Free ) + { + SafeDeleteArray ( m_dStorage2Free[i] ); + } +} + +void CSphQueryResult::LeakStorages ( CSphQueryResult & tDst ) +{ + ARRAY_FOREACH ( i, m_dStorage2Free ) + tDst.m_dStorage2Free.Add ( m_dStorage2Free[i] ); + + m_dStorage2Free.Reset(); +} + + +///////////////////////////////////////////////////////////////////////////// +// CHUNK READER +///////////////////////////////////////////////////////////////////////////// + +CSphBin::CSphBin ( ESphHitless eMode, bool bWordDict ) + : m_eMode ( eMode ) + , m_dBuffer ( NULL ) + , m_pCurrent ( NULL ) + , m_iLeft ( 0 ) + , m_iDone ( 0 ) + , m_eState ( BIN_POS ) + , m_bWordDict ( bWordDict ) + , m_bError ( false ) + , m_iFile ( -1 ) + , m_pFilePos ( NULL ) + , m_iFilePos ( 0 ) + , m_iFileLeft ( 0 ) +{ + m_tHit.m_sKeyword = bWordDict ? m_sKeyword : NULL; + m_sKeyword[0] = '\0'; + +#ifndef NDEBUG + m_iLastWordID = 0; + m_sLastKeyword[0] = '\0'; +#endif +} + + +int CSphBin::CalcBinSize ( int iMemoryLimit, int iBlocks, const char * sPhase, bool bWarn ) +{ + if ( iBlocks<=0 ) + return CSphBin::MIN_SIZE; + + int iBinSize = ( ( iMemoryLimit/iBlocks + 2048 ) >> 12 ) << 12; // round to 4k + + if ( iBinSize=MIN_SIZE ); + assert ( pSharedOffset ); + + m_iFile = iFD; + m_pFilePos = pSharedOffset; + + m_iSize = iBinSize; + m_dBuffer = new BYTE [ iBinSize ]; + m_pCurrent = m_dBuffer; + + m_tHit.m_iDocID = 0; + m_tHit.m_iWordID = 0; + m_tHit.m_iWordPos = EMPTY_HIT; + m_tHit.m_dFieldMask.Unset(); + + m_bError = false; +} + + +CSphBin::~CSphBin () +{ + SafeDeleteArray ( m_dBuffer ); +} + + +int CSphBin::ReadByte () +{ + BYTE r; + + if ( !m_iLeft ) + { + PROFILE ( read_hits ); + if ( *m_pFilePos!=m_iFilePos ) + { + sphSeek ( m_iFile, m_iFilePos, SEEK_SET ); + *m_pFilePos = m_iFilePos; + } + + int n = m_iFileLeft > m_iSize + ? m_iSize + : (int)m_iFileLeft; + if ( n==0 ) + { + m_iDone = 1; + m_iLeft = 1; + } else + { + assert ( m_dBuffer ); + + if ( sphReadThrottled ( m_iFile, m_dBuffer, n )!=(size_t)n ) + { + m_bError = true; + return -2; + } + m_iLeft = n; + + m_iFilePos += n; + m_iFileLeft -= n; + m_pCurrent = m_dBuffer; + *m_pFilePos += n; + } + } + if ( m_iDone ) + { + m_bError = true; // unexpected (!) eof + return -1; + } + + m_iLeft--; + r = *(m_pCurrent); + m_pCurrent++; + return r; +} + + +ESphBinRead CSphBin::ReadBytes ( void * pDest, int iBytes ) +{ + assert ( iBytes>0 ); + assert ( iBytes<=m_iSize ); + + if ( m_iDone ) + return BIN_READ_EOF; + + if ( m_iLeft=iBytes ); + m_iLeft -= iBytes; + + memcpy ( pDest, m_pCurrent, iBytes ); + m_pCurrent += iBytes; + + return BIN_READ_OK; +} + + +SphWordID_t CSphBin::ReadVLB () +{ + SphWordID_t uValue = 0; + int iByte, iOffset = 0; + do + { + if ( ( iByte = ReadByte() )<0 ) + return 0; + uValue += ( ( SphWordID_t ( iByte & 0x7f ) ) << iOffset ); + iOffset += 7; + } + while ( iByte & 0x80 ); + return uValue; +} + +DWORD CSphBin::UnzipInt () +{ + register int b = 0; + register DWORD v = 0; + do + { + b = ReadByte(); + if ( b<0 ) + b = 0; + v = ( v<<7 ) + ( b & 0x7f ); + } while ( b & 0x80 ); + return v; +} + +SphOffset_t CSphBin::UnzipOffset () +{ + register int b = 0; + register SphOffset_t v = 0; + do + { + b = ReadByte(); + if ( b<0 ) + b = 0; + v = ( v<<7 ) + ( b & 0x7f ); + } while ( b & 0x80 ); + return v; +} + +int CSphBin::ReadHit ( CSphAggregateHit * pOut, int iRowitems, CSphRowitem * pRowitems ) +{ + // expected EOB + if ( m_iDone ) + { + pOut->m_iWordID = 0; + return 1; + } + + CSphAggregateHit & tHit = m_tHit; // shortcut + for ( ;; ) + { + // SPH_MAX_WORD_LEN is now 42 only to keep ReadVLB() below + // technically, we can just use different functions on different paths, if ever needed + STATIC_ASSERT ( SPH_MAX_WORD_LEN*3<=127, KEYWORD_TOO_LONG ); + SphWordID_t uDelta = ReadVLB(); + + if ( uDelta ) + { + switch ( m_eState ) + { + case BIN_WORD: + if ( m_bWordDict ) + { +#ifdef NDEBUG + // FIXME?! move this under PARANOID or something? + // or just introduce an assert() checked release build? + if ( uDelta>=sizeof(m_sKeyword) ) + sphDie ( "INTERNAL ERROR: corrupted keyword length (len="UINT64_FMT", deltapos="UINT64_FMT")", + (uint64_t)uDelta, (uint64_t)(m_iFilePos-m_iLeft) ); +#else + assert ( uDelta>0 && uDelta>= 1; + } + tHit.m_iWordPos += (DWORD)uDelta; + *pOut = tHit; + return 1; + + default: + sphDie ( "INTERNAL ERROR: unknown bin state (state=%d)", m_eState ); + } + } else + { + switch ( m_eState ) + { + case BIN_POS: m_eState = BIN_DOC; break; + case BIN_DOC: m_eState = BIN_WORD; break; + case BIN_WORD: m_iDone = 1; pOut->m_iWordID = 0; return 1; + default: sphDie ( "INTERNAL ERROR: unknown bin state (state=%d)", m_eState ); + } + } + } +} + + +bool CSphBin::IsEOF () const +{ + return m_iDone!=0 || m_iFileLeft<=0; +} + + +bool CSphBin::IsDone () const +{ + return m_iDone!=0 || ( m_iFileLeft<=0 && m_iLeft<=0 ); +} + + +ESphBinRead CSphBin::Precache () +{ + if ( m_iFileLeft > m_iSize-m_iLeft ) + { + m_bError = true; + return BIN_PRECACHE_ERROR; + } + + if ( !m_iFileLeft ) + return BIN_PRECACHE_OK; + + if ( *m_pFilePos!=m_iFilePos ) + { + sphSeek ( m_iFile, m_iFilePos, SEEK_SET ); + *m_pFilePos = m_iFilePos; + } + + assert ( m_dBuffer ); + memmove ( m_dBuffer, m_pCurrent, m_iLeft ); + + if ( sphReadThrottled ( m_iFile, m_dBuffer+m_iLeft, m_iFileLeft )!=(size_t)m_iFileLeft ) + { + m_bError = true; + return BIN_READ_ERROR; + } + + m_iLeft += m_iFileLeft; + m_iFilePos += m_iFileLeft; + m_iFileLeft -= m_iFileLeft; + m_pCurrent = m_dBuffer; + *m_pFilePos += m_iFileLeft; + + return BIN_PRECACHE_OK; +} + + +////////////////////////////////////////////////////////////////////////// +// INDEX SETTINGS +////////////////////////////////////////////////////////////////////////// + +CSphIndexSettings::CSphIndexSettings () + : m_eDocinfo ( SPH_DOCINFO_NONE ) + , m_eHitFormat ( SPH_HIT_FORMAT_PLAIN ) + , m_bHtmlStrip ( false ) + , m_eHitless ( SPH_HITLESS_NONE ) +{ +} + +////////////////////////////////////////////////////////////////////////// +// PROCESS-SHARED MUTEX +////////////////////////////////////////////////////////////////////////// + +/// scoped mutex lock +class CSphScopedMutexLock : ISphNoncopyable +{ +public: + /// lock on creation + explicit CSphScopedMutexLock ( CSphProcessSharedMutex & tMutex ) + : m_tMutexRef ( tMutex ) + { + m_tMutexRef.Lock(); + } + + /// unlock on going out of scope + ~CSphScopedMutexLock () + { + m_tMutexRef.Unlock (); + } + +protected: + CSphProcessSharedMutex & m_tMutexRef; +}; + +////////////////////////////////////////////////////////////////////////// +// GLOBAL MVA STORAGE ARENA +////////////////////////////////////////////////////////////////////////// + +class tTester : public ISphNoncopyable +{ +public: + virtual void Reset() = 0; + virtual void TestData ( int iData ) = 0; + virtual ~tTester() {} +}; + +/// shared-memory arena allocator +/// manages small tagged dword strings, upto 4096 bytes in size +class CSphArena +{ +public: + CSphArena (); + ~CSphArena (); + + bool Init ( int uMaxBytes ); + bool ReInit ( int uMaxBytes ); + DWORD * GetBasePtr () const { return m_pBasePtr; } + + int TaggedAlloc ( int iTag, int iBytes ); + void TaggedFreeIndex ( int iTag, int iIndex ); + void TaggedFreeTag ( int iTag ); + + void ExamineTag ( tTester* pTest, int iTag ); + +protected: + static const int MIN_BITS = 4; + static const int MAX_BITS = 12; + static const int NUM_SIZES = MAX_BITS-MIN_BITS+2; ///< one for 0 (empty pages), and one for each size from min to max + + static const int PAGE_SIZE = 1< m_pArena; ///< arena that stores everything (all other pointers point here) + + PageDesc_t * m_pPages; ///< page descriptors + int * m_pFreelistHeads; ///< free-list heads + int * m_pTagCount; + TagDesc_t * m_pTags; + + DWORD * m_pBasePtr; ///< base data storage pointer + +#if ARENADEBUG +protected: + int * m_pTotalAllocs; + int * m_pTotalBytes; + +public: + void CheckFreelists (); +#else + inline void CheckFreelists () {} +#endif // ARENADEBUG +}; + +class tDocCollector : public tTester +{ + CSphVector * m_dCollection; +public: + explicit tDocCollector ( CSphVector & dCollection ) + : m_dCollection ( &dCollection ) + {} + virtual void Reset() + { + m_dCollection->Reset(); + } + virtual void TestData ( int iData ) + { + if ( !g_pMvaArena ) + return; + + m_dCollection->Add ( *(SphDocID_t*)(g_pMvaArena + iData) ); + } +}; + +////////////////////////////////////////////////////////////////////////// +CSphArena::CSphArena () + : m_iPages ( 0 ) +{ +} + + +CSphArena::~CSphArena () +{ + // notify callers that arena no longer exists + g_pMvaArena = NULL; +} + +bool CSphArena::ReInit ( int uMaxBytes ) +{ + if ( m_iPages!=0 ) + { + m_pArena.Reset(); + m_iPages = 0; + } + return Init ( uMaxBytes ); +} + +bool CSphArena::Init ( int uMaxBytes ) +{ + m_iPages = ( uMaxBytes+PAGE_SIZE-1 ) / PAGE_SIZE; + + int iData = m_iPages*PAGE_SIZE; // data size, bytes + int iMyTaglist = sizeof(int) + MAX_TAGS*sizeof(TagDesc_t); // int length, TagDesc_t[] tags; NOLINT + int iMy = m_iPages*sizeof(PageDesc_t) + NUM_SIZES*sizeof(int) + iMyTaglist; // my internal structures size, bytes; NOLINT +#if ARENADEBUG + iMy += 2*sizeof(int); // debugging counters; NOLINT +#endif + + assert ( iData%sizeof(DWORD)==0 ); + assert ( iMy%sizeof(DWORD)==0 ); + + CSphString sError, sWarning; + if ( !m_pArena.Alloc ( (iData+iMy)/sizeof(DWORD), sError, sWarning ) ) + { + m_iPages = 0; + return false; + } + + // setup internal pointers + DWORD * pCur = m_pArena.GetWritePtr(); + + m_pPages = (PageDesc_t*) pCur; + pCur += sizeof(PageDesc_t)*m_iPages/sizeof(DWORD); + + m_pFreelistHeads = (int*) pCur; + pCur += NUM_SIZES; // one for each size, and one extra for zero + + m_pTagCount = (int*) pCur++; + m_pTags = (TagDesc_t*) pCur; + pCur += sizeof(TagDesc_t)*MAX_TAGS/sizeof(DWORD); + +#if ARENADEBUG + m_pTotalAllocs = (int*) pCur++; + m_pTotalBytes = (int*) pCur++; + *m_pTotalAllocs = 0; + *m_pTotalBytes = 0; +#endif + + m_pBasePtr = m_pArena.GetWritePtr() + iMy/sizeof(DWORD); + assert ( m_pBasePtr==pCur ); + + // setup initial state + for ( int i=0; i0 ) ? i-1 : -1; + m_pPages[i].m_iNext = ( i( ( 1 << MAX_BITS ) - (int)sizeof(int) ) ) + return -1; + + int iSizeBits = sphLog2 ( iBytes+sizeof(int)-1 ); // always reserve sizeof(int) for the tag; NOLINT + iSizeBits = Max ( iSizeBits, MIN_BITS ); + assert ( iSizeBits>=MIN_BITS && iSizeBits<=MAX_BITS ); + + int iSizeSlot = iSizeBits-MIN_BITS+1; + assert ( iSizeSlot>=1 && iSizeSlot=0 ) + { + // got something in the free-list + pPage = m_pPages + m_pFreelistHeads[iSizeSlot]; + + } else + { + // nothing in free-list, alloc next empty one + if ( m_pFreelistHeads[0]<0 ) + return -1; // out of memory + + // update the page + pPage = m_pPages + m_pFreelistHeads[0]; + assert ( pPage->m_iPrev==-1 ); + + m_pFreelistHeads[iSizeSlot] = m_pFreelistHeads[0]; + m_pFreelistHeads[0] = pPage->m_iNext; + if ( pPage->m_iNext>=0 ) + m_pPages[pPage->m_iNext].m_iPrev = -1; + + pPage->m_iSizeBits = iSizeBits; + pPage->m_iUsed = 0; + pPage->m_iNext = -1; + + CheckFreelists (); + + // setup bitmap + int iUsedBits = ( 1<<(MAX_BITS-iSizeBits) ); // max-used-bits = page-size/alloc-size = ( 1<0 && iUsedBits<=(PAGE_BITMAP<<5) ); + + for ( int i=0; im_uBitmap[i] = ( ( i<<5 )>=iUsedBits ) ? 0xffffffffUL : 0; + + if ( iUsedBits<32 ) + pPage->m_uBitmap[0] = ( 0xffffffffUL<m_iSizeBits==iSizeBits ); + + for ( int i=0; im_uBitmap[i]==0xffffffffUL ) + continue; + + int iFree = FindBit ( pPage->m_uBitmap[i] ); + pPage->m_uBitmap[i] |= ( 1<m_iUsed++; + if ( pPage->m_iUsed==( PAGE_SIZE >> pPage->m_iSizeBits ) ) + { + // this page is full now, unchain from the free-list + assert ( m_pFreelistHeads[iSizeSlot]==pPage-m_pPages ); + m_pFreelistHeads[iSizeSlot] = pPage->m_iNext; + if ( pPage->m_iNext>=0 ) + { + assert ( m_pPages[pPage->m_iNext].m_iPrev==pPage-m_pPages ); + m_pPages[pPage->m_iNext].m_iPrev = -1; + } + pPage->m_iNext = -1; + } + +#if ARENADEBUG + (*m_pTotalAllocs)++; + (*m_pTotalBytes) += ( 1<m_iPages ) + { + assert ( 0 && "internal error, freed index out of arena" ); + return; + } + + PageDesc_t * pPage = m_pPages + iPage; + int iBit = ( iOffset % PAGE_SIZE ) >> pPage->m_iSizeBits; + assert ( ( iOffset % PAGE_SIZE )==( iBit << pPage->m_iSizeBits ) && "internal error, freed offset is unaligned" ); + + if (!( pPage->m_uBitmap[iBit>>5] & ( 1UL<<(iBit & 31) ) )) + { + assert ( 0 && "internal error, freed index already freed" ); + return; + } + + pPage->m_uBitmap[iBit>>5] &= ~( 1UL << ( iBit & 31 ) ); + pPage->m_iUsed--; + +#if ARENADEBUG + (*m_pTotalAllocs)--; + (*m_pTotalBytes) -= ( 1<m_iSizeBits ); +#endif + + CheckFreelists (); + + int iSizeSlot = pPage->m_iSizeBits-MIN_BITS+1; + + if ( pPage->m_iUsed==( PAGE_SIZE >> pPage->m_iSizeBits )-1 ) + { + // this page was full, but it's semi-free now + // chain to free-list + assert ( pPage->m_iPrev==-1 ); // full pages must not be in any list + assert ( pPage->m_iNext==-1 ); + + pPage->m_iNext = m_pFreelistHeads[iSizeSlot]; + if ( pPage->m_iNext>=0 ) + { + assert ( m_pPages[pPage->m_iNext].m_iPrev==-1 ); + assert ( m_pPages[pPage->m_iNext].m_iSizeBits==pPage->m_iSizeBits ); + m_pPages[pPage->m_iNext].m_iPrev = iPage; + } + m_pFreelistHeads[iSizeSlot] = iPage; + } + + if ( pPage->m_iUsed==0 ) + { + // this page is empty now + // unchain from free-list + if ( pPage->m_iPrev>=0 ) + { + // non-head page + assert ( m_pPages[pPage->m_iPrev].m_iNext==iPage ); + m_pPages[pPage->m_iPrev].m_iNext = pPage->m_iNext; + + if ( pPage->m_iNext>=0 ) + { + assert ( m_pPages[pPage->m_iNext].m_iPrev==iPage ); + m_pPages[pPage->m_iNext].m_iPrev = pPage->m_iPrev; + } + + } else + { + // head page + assert ( m_pFreelistHeads[iSizeSlot]==iPage ); + assert ( pPage->m_iPrev==-1 ); + + if ( pPage->m_iNext>=0 ) + { + assert ( m_pPages[pPage->m_iNext].m_iPrev==iPage ); + m_pPages[pPage->m_iNext].m_iPrev = -1; + } + m_pFreelistHeads[iSizeSlot] = pPage->m_iNext; + } + + pPage->m_iSizeBits = 0; + pPage->m_iPrev = -1; + pPage->m_iNext = m_pFreelistHeads[0]; + if ( pPage->m_iNext>=0 ) + { + assert ( m_pPages[pPage->m_iNext].m_iPrev==-1 ); + assert ( m_pPages[pPage->m_iNext].m_iSizeBits==0 ); + m_pPages[pPage->m_iNext].m_iPrev = iPage; + } + m_pFreelistHeads[0] = iPage; + } + + CheckFreelists (); +} + + +int CSphArena::TaggedAlloc ( int iTag, int iBytes ) +{ + if ( !m_iPages ) + return -1; // uninitialized + + assert ( iTag>=0 ); + CSphScopedMutexLock tLock ( m_tMutex ); + + // find that tag first + TagDesc_t * pTag = sphBinarySearch ( m_pTags, m_pTags+(*m_pTagCount)-1, bind ( &TagDesc_t::m_iTag ), iTag ); + if ( !pTag ) + { + if ( *m_pTagCount==MAX_TAGS ) + return -1; // out of tags + + int iLogHead = RawAlloc ( sizeof(AllocsLogEntry_t) ); + if ( iLogHead<0 ) + return -1; // out of memory + + AllocsLogEntry_t * pLog = (AllocsLogEntry_t*) ( m_pBasePtr + iLogHead ); + pLog->m_iUsed = 0; + pLog->m_iNext = -1; + + // add new tag + pTag = m_pTags + (*m_pTagCount)++; + pTag->m_iTag = iTag; + pTag->m_iAllocs = 0; + pTag->m_iLogHead = iLogHead; + + // re-sort + // OPTIMIZE! full-blown sort is overkill here + sphSort ( m_pTags, *m_pTagCount, sphMemberLess ( &TagDesc_t::m_iTag ) ); + + // we must be able to find it now + pTag = sphBinarySearch ( m_pTags, m_pTags+(*m_pTagCount)-1, bind ( &TagDesc_t::m_iTag ), iTag ); + assert ( pTag && "internal error, fresh tag not found in TaggedAlloc()" ); + + if ( !pTag ) + return -1; // internal error + } + + // grow the log if needed + AllocsLogEntry_t * pLog = (AllocsLogEntry_t*) ( m_pBasePtr + pTag->m_iLogHead ); + if ( pLog->m_iUsed==MAX_LOGENTRIES ) + { + int iNewEntry = RawAlloc ( sizeof(AllocsLogEntry_t) ); + if ( iNewEntry<0 ) + return -1; // out of memory + + AllocsLogEntry_t * pNew = (AllocsLogEntry_t*) ( m_pBasePtr + iNewEntry ); + pNew->m_iUsed = 0; + pNew->m_iNext = pTag->m_iLogHead; + pTag->m_iLogHead = iNewEntry; + pLog = pNew; + } + + // do the alloc itself + int iIndex = RawAlloc ( iBytes ); + if ( iIndex<0 ) + return -1; // out of memory + + // tag it + m_pBasePtr[iIndex-1] = iTag; + + // log it + assert ( pLog->m_iUsedm_dEntries [ pLog->m_iUsed++ ] = iIndex; + pTag->m_iAllocs++; + + // and we're done + return iIndex; +} + + +void CSphArena::TaggedFreeIndex ( int iTag, int iIndex ) +{ + if ( !m_iPages ) + return; // uninitialized + + assert ( iTag>=0 ); + CSphScopedMutexLock tLock ( m_tMutex ); + + // find that tag + TagDesc_t * pTag = sphBinarySearch ( m_pTags, m_pTags+(*m_pTagCount)-1, bind ( &TagDesc_t::m_iTag ), iTag ); + assert ( pTag && "internal error, unknown tag in TaggedFreeIndex()" ); + assert ( m_pBasePtr[iIndex-1]==DWORD(iTag) && "internal error, tag mismatch in TaggedFreeIndex()" ); + + // defence against internal errors + if ( !pTag ) + return; + + // untag it + m_pBasePtr[iIndex-1] = DWORD(-1); + + // free it + RawFree ( iIndex ); + + // update the tag decsriptor + pTag->m_iAllocs--; + assert ( pTag->m_iAllocs>=0 ); + + // remove the descriptor if its empty now + if ( pTag->m_iAllocs==0 ) + RemoveTag ( pTag ); +} + + +void CSphArena::TaggedFreeTag ( int iTag ) +{ + if ( !m_iPages ) + return; // uninitialized + + assert ( iTag>=0 ); + CSphScopedMutexLock tLock ( m_tMutex ); + + // find that tag + TagDesc_t * pTag = sphBinarySearch ( m_pTags, m_pTags+(*m_pTagCount)-1, bind ( &TagDesc_t::m_iTag ), iTag ); + if ( !pTag ) + return; + + // walk the log and free it + int iLog = pTag->m_iLogHead; + while ( iLog>=0 ) + { + AllocsLogEntry_t * pLog = (AllocsLogEntry_t*) ( m_pBasePtr + iLog ); + iLog = pLog->m_iNext; + + // free each alloc if tag still matches + for ( int i=0; im_iUsed; i++ ) + { + int iIndex = pLog->m_dEntries[i]; + if ( m_pBasePtr[iIndex-1]==DWORD(iTag) ) + { + m_pBasePtr[iIndex-1] = DWORD(-1); // avoid double free + RawFree ( iIndex ); + pTag->m_iAllocs--; + } + } + } + + // check for mismatches + assert ( pTag->m_iAllocs==0 ); + + // remove the descriptor + RemoveTag ( pTag ); +} + +void CSphArena::ExamineTag ( tTester* pTest, int iTag ) +{ + if ( !pTest ) + return; + + pTest->Reset(); + + if ( !m_iPages ) + return; // uninitialized + + assert ( iTag>=0 ); + CSphScopedMutexLock tLock ( m_tMutex ); + + // find that tag + TagDesc_t * pTag = sphBinarySearch ( m_pTags, m_pTags+(*m_pTagCount)-1, bind ( &TagDesc_t::m_iTag ), iTag ); + if ( !pTag ) + return; + + // walk the log and tick it's chunks + int iLog = pTag->m_iLogHead; + while ( iLog>=0 ) + { + AllocsLogEntry_t * pLog = (AllocsLogEntry_t*) ( m_pBasePtr + iLog ); + iLog = pLog->m_iNext; + + // tick each alloc + for ( int i=0; im_iUsed; i++ ) + pTest->TestData ( pLog->m_dEntries[i] ); + } +} + +void CSphArena::RemoveTag ( TagDesc_t * pTag ) +{ + assert ( pTag ); + assert ( pTag->m_iAllocs==0 ); + + // dealloc log chain + int iLog = pTag->m_iLogHead; + while ( iLog>=0 ) + { + AllocsLogEntry_t * pLog = (AllocsLogEntry_t*) ( m_pBasePtr + iLog ); + int iNext = pLog->m_iNext; + + RawFree ( iLog ); + iLog = iNext; + } + + // remove tag from the list + int iTail = m_pTags + (*m_pTagCount) - pTag - 1; + memmove ( pTag, pTag+1, iTail*sizeof(TagDesc_t) ); + (*m_pTagCount)--; +} + + +#if ARENADEBUG +void CSphArena::CheckFreelists () +{ + assert ( m_pFreelistHeads[0]==-1 || m_pPages[m_pFreelistHeads[0]].m_iSizeBits==0 ); + for ( int iSizeSlot=1; iSizeSlot=0 && g_pMvaArena ) +#else + if ( m_iIndexTag>=0 && g_bHeadProcess && g_pMvaArena ) +#endif + g_MvaArena.TaggedFreeTag ( m_iIndexTag ); + +#if !USE_WINDOWS + if ( g_bHeadProcess ) +#endif + Unlock(); +} + + +///////////////////////////////////////////////////////////////////////////// + + +int CSphIndex_VLN::UpdateAttributes ( const CSphAttrUpdate & tUpd, int iIndex, CSphString & sError ) +{ + // check if we can + if ( m_tSettings.m_eDocinfo!=SPH_DOCINFO_EXTERN ) + { + sError.SetSprintf ( "docinfo=extern required for updates" ); + return -1; + } + + // check if we have to + assert ( tUpd.m_dDocids.GetLength()==tUpd.m_dRowOffset.GetLength() ); + if ( !m_uDocinfo || !tUpd.m_dDocids.GetLength() ) + return 0; + + if ( g_pBinlog ) + g_pBinlog->BinlogUpdateAttributes ( m_sIndexName.cstr(), ++m_iTID, tUpd ); + + // remap update schema to index schema + CSphVector dLocators; + uint64_t uDst64 = 0; + ARRAY_FOREACH ( i, tUpd.m_dAttrs ) + { + int iIndex = m_tSchema.GetAttrIndex ( tUpd.m_dAttrs[i].m_sName.cstr() ); + if ( iIndex<0 ) + { + sError.SetSprintf ( "attribute '%s' not found", tUpd.m_dAttrs[i].m_sName.cstr() ); + return -1; + } + + // forbid updates on non-int columns + const CSphColumnInfo & tCol = m_tSchema.GetAttr(iIndex); + if (!( tCol.m_eAttrType==SPH_ATTR_BOOL || tCol.m_eAttrType==SPH_ATTR_INTEGER || tCol.m_eAttrType==SPH_ATTR_TIMESTAMP + || tCol.m_eAttrType==SPH_ATTR_UINT32SET || tCol.m_eAttrType==SPH_ATTR_UINT64SET )) + { + sError.SetSprintf ( "attribute '%s' can not be updated (must be boolean, integer, timestamp, or MVA)", tUpd.m_dAttrs[i].m_sName.cstr() ); + return -1; + } + + // forbid updates on MVA columns if there's no arena + if ( ( tCol.m_eAttrType==SPH_ATTR_UINT32SET || tCol.m_eAttrType==SPH_ATTR_UINT64SET ) && !g_pMvaArena ) + { + sError.SetSprintf ( "MVA attribute '%s' can not be updated (MVA arena not initialized)", tCol.m_sName.cstr() ); + return -1; + } + + bool bSrcMva = ( tCol.m_eAttrType==SPH_ATTR_UINT32SET || tCol.m_eAttrType==SPH_ATTR_UINT64SET ); + bool bDstMva = ( tUpd.m_dAttrs[i].m_eAttrType==SPH_ATTR_UINT32SET || tUpd.m_dAttrs[i].m_eAttrType==SPH_ATTR_UINT64SET ); + if ( bSrcMva!=bDstMva ) + { + sError.SetSprintf ( "attribute '%s' MVA flag mismatch", tUpd.m_dAttrs[i].m_sName.cstr() ); + return -1; + } + + if ( tCol.m_eAttrType==SPH_ATTR_UINT32SET && tUpd.m_dAttrs[i].m_eAttrType==SPH_ATTR_UINT64SET ) + { + sError.SetSprintf ( "attribute '%s' MVA bits (dst=%d, src=%d) mismatch", tUpd.m_dAttrs[i].m_sName.cstr(), + tCol.m_eAttrType, tUpd.m_dAttrs[i].m_eAttrType ); + return -1; + } + + if ( tCol.m_eAttrType==SPH_ATTR_UINT64SET ) + uDst64 |= ( U64C(1)< dRowPtrs; + CSphVector dMvaPtrs; + + dRowPtrs.Resize ( tUpd.m_dDocids.GetLength() ); + dMvaPtrs.Resize ( tUpd.m_dDocids.GetLength()*iNumMVA ); + dMvaPtrs.Fill ( -1 ); + + // preallocate + bool bFailed = false; + for ( int iUpd=iFirst; iUpd ( FindDocinfo ( tUpd.m_dDocids[iUpd] ) ); + if ( !dRowPtrs[iUpd] ) + continue; // no such id + + int iPoolPos = tUpd.m_dRowOffset[iUpd]; + int iMvaPtr = iUpd*iNumMVA; + ARRAY_FOREACH_COND ( iCol, tUpd.m_dAttrs, !bFailed ) + { + bool bSrcMva32 = ( tUpd.m_dAttrs[iCol].m_eAttrType==SPH_ATTR_UINT32SET ); + bool bSrcMva64 = ( tUpd.m_dAttrs[iCol].m_eAttrType==SPH_ATTR_UINT64SET ); + if (!( bSrcMva32 || bSrcMva64 )) // FIXME! optimize using a prebuilt dword mask? + { + iPoolPos++; + continue; + } + + // get the requested new count + int iNewCount = (int)tUpd.m_dPool[iPoolPos++]; + iPoolPos += iNewCount; + + // try to alloc + int iAlloc = -1; + if ( iNewCount ) + { + bool bDst64 = ( uDst64 & ( U64C(1) << iCol ) )!=0; + assert ( (iNewCount%2)==0 ); + int iLen = ( bDst64 ? iNewCount : iNewCount/2 ); + iAlloc = g_MvaArena.TaggedAlloc ( m_iIndexTag, (1+iLen)*sizeof(DWORD)+sizeof(SphDocID_t) ); + if ( iAlloc<0 ) + bFailed = true; + } + + // whatever the outcome, move the pointer + dMvaPtrs[iMvaPtr++] = iAlloc; + } + } + + // if there were any allocation failures, rollback everything + if ( bFailed ) + { + ARRAY_FOREACH ( i, dMvaPtrs ) + if ( dMvaPtrs[i]>=0 ) + g_MvaArena.TaggedFreeIndex ( m_iIndexTag, dMvaPtrs[i] ); + + sError.SetSprintf ( "out of pool memory on MVA update" ); + return -1; + } + + // preallocation went OK; do the actual update + int iRowStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + int iUpdated = 0; + DWORD uUpdateMask = 0; + + for ( int iUpd=iFirst; iUpd ( &m_pDocinfoIndex[2*iBlock*iRowStride] ); + DWORD * pIndexRanges = const_cast < DWORD * > ( &m_pDocinfoIndex[2*m_uDocinfoIndex*iRowStride] ); + assert ( iBlock>=0 && iBlock<(int)m_uDocinfoIndex ); + + assert ( DOCINFO2ID(pEntry)==tUpd.m_dDocids[iUpd] ); + pEntry = DOCINFO2ATTRS(pEntry); + + int iPos = tUpd.m_dRowOffset[iUpd]; + int iMvaPtr = iUpd*iNumMVA; + ARRAY_FOREACH ( iCol, tUpd.m_dAttrs ) + { + bool bSrcMva32 = ( tUpd.m_dAttrs[iCol].m_eAttrType==SPH_ATTR_UINT32SET ); + bool bSrcMva64 = ( tUpd.m_dAttrs[iCol].m_eAttrType==SPH_ATTR_UINT64SET ); + if (!( bSrcMva32 || bSrcMva64 )) // FIXME! optimize using a prebuilt dword mask? + { + // plain update + SphAttr_t uValue = tUpd.m_dPool[iPos]; + sphSetRowAttr ( pEntry, dLocators[iCol], uValue ); + + // update block and index ranges + for ( int i=0; i<2; i++ ) + { + DWORD * pBlock = i ? pBlockRanges : pIndexRanges; + SphAttr_t uMin = sphGetRowAttr ( DOCINFO2ATTRS ( pBlock ), dLocators[iCol] ); + SphAttr_t uMax = sphGetRowAttr ( DOCINFO2ATTRS ( pBlock+iRowStride ) , dLocators[iCol] ); + if ( uValueuMax ) + { + sphSetRowAttr ( DOCINFO2ATTRS ( pBlock ), dLocators[iCol], Min ( uMin, uValue ) ); + sphSetRowAttr ( DOCINFO2ATTRS ( pBlock+iRowStride ), dLocators[iCol], Max ( uMax, uValue ) ); + } + } + + iPos++; + uUpdateMask |= ATTRS_UPDATED; + continue; + } + + // MVA update + DWORD uOldIndex = MVA_DOWNSIZE ( sphGetRowAttr ( pEntry, dLocators[iCol] ) ); + + // get new count, store new data if needed + DWORD uNew = tUpd.m_dPool[iPos++]; + uint64_t uNewMin = LLONG_MAX, uNewMax = 0; + int iNewIndex = dMvaPtrs[iMvaPtr++]; + + SphDocID_t* pDocid = (SphDocID_t*)(g_pMvaArena + iNewIndex); + *pDocid++ = tUpd.m_dDocids[iUpd]; + iNewIndex = (DWORD*)pDocid - g_pMvaArena; + + if ( uNew ) + { + assert ( iNewIndex>=0 ); + DWORD * pDst = g_pMvaArena + iNewIndex; + const DWORD * pSrc = tUpd.m_dPool.Begin() + iPos; + iPos += uNew; + + bool bDst64 = ( uDst64 & ( U64C(1) << iCol ) )!=0; + assert ( ( uNew%2 )==0 ); + int iLen = ( bDst64 ? uNew : uNew/2 ); + // setup new value (flagged index) to store within row + uNew = DWORD(iNewIndex) | MVA_ARENA_FLAG; + + // MVA values counter first + *pDst++ = iLen; + if ( bDst64 ) + { + while ( iLen ) + { + uint64_t uValue = MVA_UPSIZE ( pSrc ); + uNewMin = Min ( uNewMin, uValue ); + uNewMax = Max ( uNewMax, uValue ); + *pDst++ = *pSrc++; + *pDst++ = *pSrc++; + iLen -= 2; + } + } else + { + while ( iLen-- ) + { + DWORD uValue = *pSrc; + pSrc += 2; + *pDst++ = uValue; + uNewMin = Min ( uNewMin, uValue ); + uNewMax = Max ( uNewMax, uValue ); + } + } + } + + // store new value + sphSetRowAttr ( pEntry, dLocators[iCol], uNew ); + + // update block and index ranges + if ( uNew ) + for ( int i=0; i<2; i++ ) + { + DWORD * pBlock = i ? pBlockRanges : pIndexRanges; + uint64_t uMin = sphGetRowAttr ( DOCINFO2ATTRS ( pBlock ), dLocators[iCol] ); + uint64_t uMax = sphGetRowAttr ( DOCINFO2ATTRS ( pBlock+iRowStride ), dLocators[iCol] ); + if ( uNewMinuMax ) + { + sphSetRowAttr ( DOCINFO2ATTRS ( pBlock ), dLocators[iCol], Min ( uMin, uNewMin ) ); + sphSetRowAttr ( DOCINFO2ATTRS ( pBlock+iRowStride ), dLocators[iCol], Max ( uMax, uNewMax ) ); + } + } + + // free old storage if needed + if ( uOldIndex & MVA_ARENA_FLAG ) + { + uOldIndex = ((DWORD*)((SphDocID_t*)(g_pMvaArena + (uOldIndex & MVA_OFFSET_MASK))-1))-g_pMvaArena; + g_MvaArena.TaggedFreeIndex ( m_iIndexTag, uOldIndex ); + } + + uUpdateMask |= ATTRS_MVA_UPDATED; + } + + iUpdated++; + } + + *m_pAttrsStatus |= uUpdateMask; // FIXME! add lock/atomic? + return iUpdated; +} + +bool CSphIndex_VLN::LoadPersistentMVA ( CSphString & sError ) +{ + // prepare the file to load + CSphAutoreader fdReader; + if ( !fdReader.Open ( GetIndexFileName("mvp"), m_sLastError ) ) + { + // no mvp means no saved attributes. + m_sLastError = ""; + return true; + } + + // check if we can + if ( m_tSettings.m_eDocinfo!=SPH_DOCINFO_EXTERN ) + { + sError.SetSprintf ( "docinfo=extern required for updates" ); + return false; + } + + DWORD uDocs = fdReader.GetDword(); + + // if we have docs to update + if ( !uDocs ) + return false; + + CSphVector dAffected ( uDocs ); + fdReader.GetBytes ( &dAffected[0], uDocs*sizeof(SphDocID_t) ); + + // collect the indexes of MVA schema attributes + CSphVector dMvaLocators; + for ( int i=0; i dRowPtrs ( uDocs ); + CSphVector dAllocs; + dAllocs.Reserve ( uDocs ); + + // prealloc values (and also preload) + bool bFailed = false; + ARRAY_FOREACH ( i, dAffected ) + { + DWORD* pDocinfo = const_cast ( FindDocinfo ( dAffected[i] ) ); + assert ( pDocinfo ); + pDocinfo = DOCINFO2ATTRS ( pDocinfo ); + ARRAY_FOREACH_COND ( j, dMvaLocators, !bFailed ) + { + // if this MVA was updated + if ( MVA_DOWNSIZE ( sphGetRowAttr ( pDocinfo, dMvaLocators[j] ) ) & MVA_ARENA_FLAG ) + { + DWORD uCount = fdReader.GetDword(); + if ( uCount ) + { + assert ( j dMvaLocators; + for ( int i=0; i dAffected; + { + tDocCollector dCollect ( dAffected ); + g_MvaArena.ExamineTag ( &dCollect, m_iIndexTag ); + } + dAffected.Uniq(); + + if ( !dAffected.GetLength() ) + break; + + // prepare the file to save into; + CSphWriter fdFlushMVA; + fdFlushMVA.OpenFile ( GetIndexFileName("mvp.tmpnew"), m_sLastError ); + if ( fdFlushMVA.IsError() ) + return false; + + // save the vector of affected docids + DWORD uPos = dAffected.GetLength(); + fdFlushMVA.PutDword ( uPos ); + fdFlushMVA.PutBytes ( &dAffected[0], uPos*sizeof(SphDocID_t) ); + + // save the updated MVA vectors + ARRAY_FOREACH ( i, dAffected ) + { + DWORD* pDocinfo = const_cast ( FindDocinfo ( dAffected[i] ) ); + assert ( pDocinfo ); + pDocinfo = DOCINFO2ATTRS ( pDocinfo ); + ARRAY_FOREACH ( j, dMvaLocators ) + { + DWORD uOldIndex = MVA_DOWNSIZE ( sphGetRowAttr ( pDocinfo, dMvaLocators[j] ) ); + // if this MVA was updated + if ( uOldIndex & MVA_ARENA_FLAG ) + { + DWORD * pMva = g_pMvaArena + ( uOldIndex & MVA_OFFSET_MASK ); + DWORD uCount = *pMva; + assert ( j=20 ) + uSize += 2*(1+m_uDocinfoIndex)*uStride*sizeof(CSphRowitem); + + if ( !sphWriteThrottled ( fdTmpnew.GetFD(), m_pDocinfo.GetWritePtr(), uSize, "docinfo", m_sLastError ) ) + return false; + + fdTmpnew.Close (); + + if ( !JuggleFile("spa") ) + return false; + + if ( g_pBinlog ) + g_pBinlog->NotifyIndexFlush ( m_sIndexName.cstr(), m_iTID, false ); + + if ( *m_pAttrsStatus==uAttrStatus ) + *m_pAttrsStatus = 0; + + sphLogDebugvv ( "index '%s' attrs (%d) saved", m_sIndexName.cstr(), *m_pAttrsStatus ); + + return true; +} + +DWORD CSphIndex_VLN::GetAttributeStatus () const +{ + assert ( m_pAttrsStatus ); + return *m_pAttrsStatus; +} + + +///////////////////////////////////////////////////////////////////////////// + +#define SPH_CMPHIT_LESS(a,b) \ + ( a.m_iWordID> 23 ); + m_iLastHitlistPos -= m_iLastHitlistDelta; + assert ( m_iLastHitlistPos>=0 ); + + } else + { + m_wrDoclist.ZipInt ( m_dLastDocFields.GetMask32() ); + m_wrDoclist.ZipOffset ( m_iLastHitlistDelta ); + } + + } else // plain format - finish doclist entry + { + assert ( m_tSettings.m_eHitFormat==SPH_HIT_FORMAT_PLAIN ); + m_wrDoclist.ZipOffset ( m_iLastHitlistDelta ); + m_wrDoclist.ZipInt ( m_dLastDocFields.GetMask32() ); + m_wrDoclist.ZipInt ( m_uLastDocHits ); + } + m_dLastDocFields.Unset(); + m_uLastDocHits = 0; +} + + +void CSphIndex_VLN::cidxHit ( CSphAggregateHit * hit, CSphRowitem * pAttrs ) +{ + assert ( + ( hit->m_iWordID!=0 && hit->m_iWordPos!=EMPTY_HIT && hit->m_iDocID!=0 ) || // it's either ok hit + ( hit->m_iWordID==0 && hit->m_iWordPos==EMPTY_HIT ) ); // or "flush-hit" + + ///////////// + // next word + ///////////// + + bool bNextWord = ( m_tLastHit.m_iWordID!=hit->m_iWordID || ( m_bWordDict && strcmp ( (char*)m_tLastHit.m_sKeyword, (char*)hit->m_sKeyword ) ) ); // OPTIMIZE? + bool bNextDoc = bNextWord || ( m_tLastHit.m_iDocID!=hit->m_iDocID ); + + if ( bNextDoc ) + { + // finish hitlist, if any + Hitpos_t uLastPos = m_tLastHit.m_iWordPos; + if ( m_tLastHit.m_iWordPos!=EMPTY_HIT ) + { + m_wrHitlist.ZipInt ( 0 ); + m_tLastHit.m_iWordPos = EMPTY_HIT; + } + + // finish doclist entry, if any + if ( m_tLastHit.m_iDocID ) + cidxFinishDoclistEntry ( uLastPos ); + } + + if ( bNextWord ) + { + // finish doclist, if any + if ( m_tLastHit.m_iDocID ) + { + // emit end-of-doclist marker + m_wrDoclist.ZipInt ( 0 ); + + // emit dict entry + m_pDict->DictEntry ( m_tLastHit.m_iWordID, m_tLastHit.m_sKeyword, m_iLastWordDocs, m_iLastWordHits, m_iLastWordDoclist, m_wrDoclist.GetPos()-m_iLastWordDoclist ); + + // reset trackers + m_iLastWordDocs = 0; + m_iLastWordHits = 0; + + m_tLastHit.m_iDocID = 0; + m_iLastHitlistPos = 0; + } + + // flush wordlist, if this is the end + if ( hit->m_iWordPos==EMPTY_HIT ) + { + m_pDict->DictEndEntries ( m_wrDoclist.GetPos() ); + return; + } + + assert ( hit->m_iWordID > m_tLastHit.m_iWordID + || ( m_bWordDict && hit->m_iWordID==m_tLastHit.m_iWordID && strcmp ( (char*)hit->m_sKeyword, (char*)m_tLastHit.m_sKeyword )>0 ) + || m_bMerging ); + m_iLastWordDoclist = m_wrDoclist.GetPos(); + m_tLastHit.m_iWordID = hit->m_iWordID; + if ( m_bWordDict ) + { + assert ( strlen ( (char *)hit->m_sKeyword )m_sKeyword, sizeof(m_sLastKeyword) ); // OPTIMIZE? + } + } + + if ( bNextDoc ) + { + // begin new doclist entry for new doc id + assert ( hit->m_iDocID>m_tLastHit.m_iDocID ); + assert ( m_wrHitlist.GetPos()>=m_iLastHitlistPos ); + + m_wrDoclist.ZipOffset ( hit->m_iDocID - m_tLastHit.m_iDocID ); + if ( pAttrs ) + { + for ( int i=0; im_pDynamic[i] ); + } + m_iLastHitlistDelta = m_wrHitlist.GetPos() - m_iLastHitlistPos; + + m_tLastHit.m_iDocID = hit->m_iDocID; + m_iLastHitlistPos = m_wrHitlist.GetPos(); + + // update per-word stats + m_iLastWordDocs++; + } + + /////////// + // the hit + /////////// + + if ( !hit->m_dFieldMask.TestAll(false) ) // merge aggregate hits into the current hit + { + int iHitCount = hit->GetAggrCount(); + assert ( m_tSettings.m_eHitless ); + assert ( iHitCount ); + assert ( !hit->m_dFieldMask.TestAll(false) ); + + m_uLastDocHits += iHitCount; + m_dLastDocFields |= hit->m_dFieldMask; + m_iLastWordHits += iHitCount; + + if ( m_tSettings.m_eHitless==SPH_HITLESS_SOME ) + m_iLastWordDocs |= 0x80000000; + + } else // handle normal hits + { + // add hit delta + if ( hit->m_iWordPos==m_tLastHit.m_iWordPos ) + return; + + assert ( m_tLastHit.m_iWordPos < hit->m_iWordPos ); + m_wrHitlist.ZipInt ( hit->m_iWordPos - m_tLastHit.m_iWordPos ); + m_tLastHit.m_iWordPos = hit->m_iWordPos; + m_iLastWordHits++; + + // update matched fields mask + m_dLastDocFields.Set ( HITMAN::GetField ( hit->m_iWordPos ) ); + m_uLastDocHits++; + } +} + + +void CSphIndex_VLN::WriteSchemaColumn ( CSphWriter & fdInfo, const CSphColumnInfo & tCol ) +{ + int iLen = strlen ( tCol.m_sName.cstr() ); + fdInfo.PutDword ( iLen ); + fdInfo.PutBytes ( tCol.m_sName.cstr(), iLen ); + +#if USE_PYTHON_CASE_SENSIVE_ATTR + //coreseek python source only, used to make py source case sentive + if(tCol.m_sNameExactly.IsEmpty()) + { + // if not have m_sNameExactly, write m_sName as m_sNameExactly + iLen = strlen ( tCol.m_sName.cstr() ); + fdInfo.PutDword ( iLen ); + fdInfo.PutBytes ( tCol.m_sName.cstr(), iLen ); + }else{ + iLen = strlen ( tCol.m_sNameExactly.cstr() ); + fdInfo.PutDword ( iLen ); + fdInfo.PutBytes ( tCol.m_sNameExactly.cstr(), iLen ); + } +#endif + + + ESphAttr eAttrType = tCol.m_eAttrType; + if ( eAttrType==SPH_ATTR_WORDCOUNT ) + eAttrType = SPH_ATTR_INTEGER; + fdInfo.PutDword ( eAttrType ); + + fdInfo.PutDword ( tCol.m_tLocator.CalcRowitem() ); // for backwards compatibility + fdInfo.PutDword ( tCol.m_tLocator.m_iBitOffset ); + fdInfo.PutDword ( tCol.m_tLocator.m_iBitCount ); + + fdInfo.PutByte ( tCol.m_bPayload ); +} + + +void CSphIndex_VLN::ReadSchemaColumn ( CSphReader & rdInfo, CSphColumnInfo & tCol ) +{ + tCol.m_sName = rdInfo.GetString (); + if ( tCol.m_sName.IsEmpty () ) + tCol.m_sName = "@emptyname"; + + tCol.m_sName.ToLower (); + +#if USE_PYTHON_CASE_SENSIVE_ATTR + tCol.m_sNameExactly = rdInfo.GetString (); + if ( tCol.m_sNameExactly.IsEmpty () ) + tCol.m_sNameExactly = "@emptyname"; +#endif + + + tCol.m_eAttrType = (ESphAttr) rdInfo.GetDword (); // FIXME? check/fixup? + + if ( m_uVersion>=5 ) + { + rdInfo.GetDword (); // ignore rowitem + tCol.m_tLocator.m_iBitOffset = rdInfo.GetDword (); + tCol.m_tLocator.m_iBitCount = rdInfo.GetDword (); + } else + { + tCol.m_tLocator.m_iBitOffset = -1; + tCol.m_tLocator.m_iBitCount = -1; + } + + if ( m_uVersion>=16 ) + tCol.m_bPayload = ( rdInfo.GetByte()!=0 ); +} + + +bool CSphIndex_VLN::WriteHeader ( CSphWriter & fdInfo, SphOffset_t iCheckpointsPos, DWORD iCheckpointCount ) +{ + // version + fdInfo.PutDword ( INDEX_MAGIC_HEADER ); + fdInfo.PutDword ( INDEX_FORMAT_VERSION ); + + // bits + fdInfo.PutDword ( USE_64BIT ); + + // docinfo + fdInfo.PutDword ( m_tSettings.m_eDocinfo ); + + // schema + fdInfo.PutDword ( m_tSchema.m_dFields.GetLength() ); + ARRAY_FOREACH ( i, m_tSchema.m_dFields ) + WriteSchemaColumn ( fdInfo, m_tSchema.m_dFields[i] ); + + fdInfo.PutDword ( m_tSchema.GetAttrsCount() ); + for ( int i=0; im_iDocID ); // was dword in v.1 + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + fdInfo.PutBytes ( m_pMin->m_pDynamic, m_tSchema.GetRowSize()*sizeof(CSphRowitem) ); + + // wordlist checkpoints + fdInfo.PutOffset ( iCheckpointsPos ); + fdInfo.PutDword ( iCheckpointCount ); + + // index stats + fdInfo.PutDword ( m_tStats.m_iTotalDocuments ); + fdInfo.PutOffset ( m_tStats.m_iTotalBytes ); + + // index settings + SaveSettings ( fdInfo ); + + // tokenizer info + assert ( m_pTokenizer ); + SaveTokenizerSettings ( fdInfo, m_pTokenizer ); + + // dictionary info + assert ( m_pDict ); + SaveDictionarySettings ( fdInfo, m_pDict ); + + fdInfo.PutDword ( m_iKillListSize ); + fdInfo.PutDword ( m_uMinMaxIndex ); + + return true; +} + + +bool CSphIndex_VLN::cidxDone ( const char * sHeaderExtension, int iMemLimit ) +{ + // flush wordlist checkpoints + SphOffset_t iCheckpointsPos; + int iCheckpointsCount; + + if ( !m_pDict->DictEnd ( &iCheckpointsPos, &iCheckpointsCount, iMemLimit, m_sLastError ) ) + return false; + + ///////////////// + // create header + ///////////////// + + CSphWriter fdInfo; + fdInfo.OpenFile ( GetIndexFileName ( sHeaderExtension ), m_sLastError ); + if ( fdInfo.IsError() ) + return false; + + if ( !WriteHeader ( fdInfo, iCheckpointsPos, iCheckpointsCount ) ) + return false; + + //////////////////////// + // close all data files + //////////////////////// + + fdInfo.CloseFile (); + m_wrDoclist.CloseFile (); + m_wrHitlist.CloseFile ( true ); + + if ( fdInfo.IsError() || m_pDict->DictIsError() || m_wrDoclist.IsError() || m_wrHitlist.IsError() ) + return false; + + return true; +} + + +inline int encodeVLB ( BYTE * buf, DWORD v ) +{ + register BYTE b; + register int n = 0; + + do + { + b = (BYTE)(v & 0x7f); + v >>= 7; + if ( v ) + b |= 0x80; + *buf++ = b; + n++; + } while ( v ); + return n; +} + + +inline int encodeVLB8 ( BYTE * buf, uint64_t v ) +{ + register BYTE b; + register int n = 0; + + do { + b = (BYTE)(v & 0x7f); + v >>= 7; + if ( v ) + b |= 0x80; + *buf++ = b; + n++; + } while ( v ); + return n; +} + + +inline int encodeKeyword ( BYTE * pBuf, const char * pKeyword ) +{ + int iLen = strlen ( pKeyword ); // OPTIMIZE! remove this and memcpy and check if thats faster + assert ( iLen>0 && iLen<128 ); // so that ReadVLB() + + *pBuf = (BYTE) iLen; + memcpy ( pBuf+1, pKeyword, iLen ); + return 1+iLen; +} + + +int CSphIndex_VLN::cidxWriteRawVLB ( int fd, CSphWordHit * pHit, int iHits, DWORD * pDocinfo, int iDocinfos, int iStride ) +{ + PROFILE ( write_hits ); + + assert ( pHit ); + assert ( iHits>0 ); + + ///////////////////////////// + // do simple bitwise hashing + ///////////////////////////// + + static const int HBITS = 11; + static const int HSIZE = ( 1 << HBITS ); + + SphDocID_t iStartID = 0; + int dHash [ HSIZE+1 ]; + int iShift = 0; + + if ( pDocinfo ) + { + iStartID = DOCINFO2ID ( pDocinfo ); + int iBits = sphLog2 ( DOCINFO2ID ( pDocinfo + (iDocinfos-1)*iStride ) - iStartID ); + iShift = ( iBits> iShift ); + assert ( iHash>=0 && iHashiHashed ) + { + dHash [ iHashed+1 ] = i-1; // right boundary for prev hash value + dHash [ iHash ] = i; // left boundary for next hash value + iHashed = iHash; + } + } + dHash [ iHashed+1 ] = iDocinfos-1; // right boundary for last hash value + } + + /////////////////////////////////////// + // encode through a small write buffer + /////////////////////////////////////// + + BYTE *pBuf, *maxP; + int n = 0, w; + SphWordID_t d1, l1 = 0; + SphDocID_t d2, l2 = 0; + DWORD d3, l3 = 0; // !COMMIT must be wide enough + bool bWordDict = m_pDict->GetSettings().m_bWordDict; + + int iGap = Max ( 128, 16*sizeof(DWORD) + iStride*sizeof(DWORD) + ( bWordDict ? MAX_KEYWORD_BYTES : 0 ) ); + pBuf = m_pWriteBuffer; + maxP = m_pWriteBuffer + m_iWriteBuffer - iGap; + + SphDocID_t iAttrID = 0; // current doc id + DWORD * pAttrs = NULL; // current doc attrs + + // hit aggregation state + DWORD uHitCount = 0; + DWORD uHitFieldMask = 0; + + const int iPositionShift = m_tSettings.m_eHitless==SPH_HITLESS_SOME ? 1 : 0; + + while ( iHits-- ) + { + // find attributes by id + if ( pDocinfo && iAttrID!=pHit->m_iDocID ) + { + int iHash = (int)( ( pHit->m_iDocID - iStartID ) >> iShift ); + assert ( iHash>=0 && iHashm_iDocID==DOCINFO2ID ( pDocinfo + iStart*iStride ) ) + { + pAttrs = DOCINFO2ATTRS ( pDocinfo + iStart*iStride ); + + } else if ( pHit->m_iDocID==DOCINFO2ID ( pDocinfo + iEnd*iStride ) ) + { + pAttrs = DOCINFO2ATTRS ( pDocinfo + iEnd*iStride ); + + } else + { + pAttrs = NULL; + while ( iEnd-iStart>1 ) + { + // check if nothing found + if ( + pHit->m_iDocID < DOCINFO2ID ( pDocinfo + iStart*iStride ) || + pHit->m_iDocID > DOCINFO2ID ( pDocinfo + iEnd*iStride ) ) + break; + assert ( pHit->m_iDocID > DOCINFO2ID ( pDocinfo + iStart*iStride ) ); + assert ( pHit->m_iDocID < DOCINFO2ID ( pDocinfo + iEnd*iStride ) ); + + int iMid = iStart + (iEnd-iStart)/2; + if ( pHit->m_iDocID==DOCINFO2ID ( pDocinfo + iMid*iStride ) ) + { + pAttrs = DOCINFO2ATTRS ( pDocinfo + iMid*iStride ); + break; + } + if ( pHit->m_iDocIDm_iDocID ); + iAttrID = pHit->m_iDocID; + } + + // calc deltas + d1 = pHit->m_iWordID - l1; + d2 = pHit->m_iDocID - l2; + d3 = pHit->m_iWordPos - l3; + + // ignore duplicate hits + if ( d1==0 && d2==0 && d3==0 ) // OPTIMIZE? check if ( 0==(d1|d2|d3) ) is faster + { + pHit++; + continue; + } + + // non-zero delta restarts all the fields after it + // because their deltas might now be negative + if ( d1 ) d2 = pHit->m_iDocID; + if ( d2 ) d3 = pHit->m_iWordPos; + + // when we moved to the next word or document + bool bFlushed = false; + if ( d1 || d2 ) + { + // flush previous aggregate hit + if ( uHitCount ) + { + // we either skip all hits or the high bit must be available for marking + // failing that, we can't produce a consistent index + assert ( m_tSettings.m_eHitless!=SPH_HITLESS_NONE ); + assert ( m_tSettings.m_eHitless==SPH_HITLESS_ALL || !( uHitCount & 0x80000000UL ) ); + + if ( m_tSettings.m_eHitless!=SPH_HITLESS_ALL ) + uHitCount = ( uHitCount << 1 ) | 1; + pBuf += encodeVLB ( pBuf, uHitCount ); + pBuf += encodeVLB ( pBuf, uHitFieldMask ); + assert ( pBufm_iWordID ) ) ) + { + uHitCount = 1; + uHitFieldMask |= 1 << HITMAN::GetField ( pHit->m_iWordPos ); + } + + } else if ( uHitCount ) // next hit for the same word/doc pair, update state if we need it + { + uHitCount++; + uHitFieldMask |= 1 << HITMAN::GetField ( pHit->m_iWordPos ); + } + + // encode enough restart markers + if ( d1 ) pBuf += encodeVLB ( pBuf, 0 ); + if ( d2 && !bFlushed ) pBuf += encodeVLB ( pBuf, 0 ); + + assert ( pBufHitblockGetKeyword ( pHit->m_iWordID ) ); // keyword itself in case of keywords dict + else + pBuf += LOC_ENCODE ( pBuf, d1 ); // delta in case of CRC dict + + assert ( pBufm_iWordID; + l2 = pHit->m_iDocID; + l3 = pHit->m_iWordPos; + + pHit++; + + if ( pBuf>maxP ) + { + w = (int)(pBuf - m_pWriteBuffer); + assert ( w b.m_iWordID ) + return false; + + if ( a.m_sKeyword ) + { + int iCmp = strcmp ( (char*)a.m_sKeyword, (char*)b.m_sKeyword ); // OPTIMIZE? + if ( iCmp!=0 ) + return ( iCmp<0 ); + } + + return + ( a.m_iDocID < b.m_iDocID ) || + ( a.m_iDocID==b.m_iDocID && a.m_iWordPos0 ); + m_iSize = iSize; + m_iUsed = 0; + m_pData = new CSphHitQueueEntry [ iSize ]; + } + + /// destroy queue + ~CSphHitQueue () + { + SafeDeleteArray ( m_pData ); + } + + /// add entry to the queue + void Push ( CSphAggregateHit & tHit, int iBin ) + { + // check for overflow and do add + assert ( m_iUsed> 1; + if ( SPH_CMPAGGRHIT_LESS ( m_pData[iEntry], m_pData[iParent] ) ) + { + // entry is less than parent, should float to the top + Swap ( m_pData[iEntry], m_pData[iParent] ); + iEntry = iParent; + } else + { + break; + } + } + } + + /// remove root (ie. top priority) entry + void Pop () + { + assert ( m_iUsed ); + if ( !(--m_iUsed) ) // empty queue? just return + return; + + // make the last entry my new root + m_pData[0] = m_pData[m_iUsed]; + + // sift down if needed + int iEntry = 0; + for ( ;; ) + { + // select child + int iChild = (iEntry<<1) + 1; + if ( iChild>=m_iUsed ) + break; + + // select smallest child + if ( iChild+1 & dSources, + CSphAutoArray & dHits, int iArenaSize, int iFieldFD, + int nFieldMVAs, int iFieldMVAInPool ) +{ + // initialize writer (data file must always exist) + CSphWriter wrMva; + if ( !wrMva.OpenFile ( GetIndexFileName("spm"), m_sLastError ) ) + return false; + + // calcs and checks + bool bOnlyFieldMVAs = true; + CSphVector dMvaIndexes; + for ( int i=0; i dBlockLens; + dBlockLens.Reserve ( 1024 ); + + m_tProgress.m_ePhase = CSphIndexProgress::PHASE_COLLECT_MVA; + + if ( !bOnlyFieldMVAs ) + { + ARRAY_FOREACH ( iSource, dSources ) + { + CSphSource * pSource = dSources[iSource]; + if ( !pSource->Connect ( m_sLastError ) ) + return false; + + ARRAY_FOREACH ( i, dMvaIndexes ) + { + int iAttr = dMvaIndexes[i]; + const CSphColumnInfo & tAttr = m_tSchema.GetAttr(iAttr); + + if ( tAttr.m_eSrc==SPH_ATTRSRC_FIELD ) + continue; + + if ( !pSource->IterateMultivaluedStart ( iAttr, m_sLastError ) ) + return false; + + while ( pSource->IterateMultivaluedNext () ) + { + pMva->m_uDocID = pSource->m_tDocInfo.m_iDocID; + pMva->m_iAttr = i; + pMva->m_uValue = pSource->m_tDocInfo.GetAttr ( tAttr.m_tLocator ); + + if ( ++pMva>=pMvaMax ) + { + sphSort ( pMvaPool, pMva-pMvaPool ); + if ( !sphWriteThrottled ( fdTmpMva.GetFD(), pMvaPool, (pMva-pMvaPool)*sizeof(MvaEntry_t), "temp_mva", m_sLastError ) ) + return false; + + dBlockLens.Add ( pMva-pMvaPool ); + m_tProgress.m_iAttrs += pMva-pMvaPool; + pMva = pMvaPool; + + if ( m_pProgress ) + m_pProgress ( &m_tProgress, false ); + } + } + } + + pSource->Disconnect (); + } + + if ( pMva>pMvaPool ) + { + sphSort ( pMvaPool, pMva-pMvaPool ); + if ( !sphWriteThrottled ( fdTmpMva.GetFD(), pMvaPool, (pMva-pMvaPool)*sizeof(MvaEntry_t), "temp_mva", m_sLastError ) ) + return false; + + dBlockLens.Add ( pMva-pMvaPool ); + m_tProgress.m_iAttrs += pMva-pMvaPool; + pMva = pMvaPool; + } + } + + if ( m_pProgress ) + m_pProgress ( &m_tProgress, true ); + + /////////////////////////// + // free memory for sorting + /////////////////////////// + + dHits.Reset (); + + ////////////// + // fully sort + ////////////// + + if ( m_pProgress ) + { + m_tProgress.m_ePhase = CSphIndexProgress::PHASE_SORT_MVA; + m_tProgress.m_iAttrs = m_tProgress.m_iAttrs + nFieldMVAs; + m_tProgress.m_iAttrsTotal = m_tProgress.m_iAttrs; + m_pProgress ( &m_tProgress, false ); + } + + int nLastBlockFieldMVAs = iFieldMVAInPool ? ( nFieldMVAs % iFieldMVAInPool ) : 0; + int nFieldBlocks = iFieldMVAInPool ? ( nFieldMVAs / iFieldMVAInPool + ( nLastBlockFieldMVAs ? 1 : 0 ) ) : 0; + + // initialize readers + CSphVector dBins; + dBins.Reserve ( dBlockLens.GetLength() + nFieldBlocks ); + + int iBinSize = CSphBin::CalcBinSize ( iArenaSize, dBlockLens.GetLength() + nFieldBlocks, "sort_mva" ); + SphOffset_t iSharedOffset = -1; + + ARRAY_FOREACH ( i, dBlockLens ) + { + dBins.Add ( new CSphBin() ); + dBins[i]->m_iFileLeft = dBlockLens[i]*sizeof(MvaEntry_t); + dBins[i]->m_iFilePos = ( i==0 ) ? 0 : dBins[i-1]->m_iFilePos + dBins[i-1]->m_iFileLeft; + dBins[i]->Init ( fdTmpMva.GetFD(), &iSharedOffset, iBinSize ); + } + + SphOffset_t iSharedFieldOffset = -1; + SphOffset_t uStart = 0; + for ( int i = 0; i < nFieldBlocks; i++ ) + { + dBins.Add ( new CSphBin() ); + int iBin = dBins.GetLength () - 1; + + dBins[iBin]->m_iFileLeft = ( i==nFieldBlocks-1 ? ( nLastBlockFieldMVAs ? nLastBlockFieldMVAs : iFieldMVAInPool ): iFieldMVAInPool ) * sizeof(MvaEntry_t); + dBins[iBin]->m_iFilePos = uStart; + dBins[iBin]->Init ( iFieldFD, &iSharedFieldOffset, iBinSize ); + + uStart += dBins [iBin]->m_iFileLeft; + } + + // do the sort + CSphQueue < MvaEntryTag_t, MvaEntryCmp_fn > qMva ( Max ( 1, dBins.GetLength() ) ); + ARRAY_FOREACH ( i, dBins ) + { + MvaEntryTag_t tEntry; + if ( dBins[i]->ReadBytes ( (MvaEntry_t*) &tEntry, sizeof(MvaEntry_t) )!=BIN_READ_OK ) + { + m_sLastError.SetSprintf ( "sort_mva: warmup failed (io error?)" ); + return false; + } + + tEntry.m_iTag = i; + qMva.Push ( tEntry ); + } + + // spm-file := info-list [ 0+ ] + // info-list := docid, values-list [ index.schema.mva-count ] + // values-list := values-count, value [ values-count ] + // note that mva32 come first then mva64 + SphDocID_t uCurID = 0; + CSphVector < CSphVector > dCurInfo; + dCurInfo.Resize ( dMvaIndexes.GetLength() ); + + for ( ;; ) + { + // flush previous per-document info-list + if ( !qMva.GetLength() || qMva.Root().m_uDocID!=uCurID ) + { + if ( uCurID ) + { + wrMva.PutDocid ( uCurID ); + ARRAY_FOREACH ( i, dCurInfo ) + { + int iLen = dCurInfo[i].GetLength(); + if ( i>=iMva64 ) + { + wrMva.PutDword ( iLen*2 ); + wrMva.PutBytes ( dCurInfo[i].Begin(), sizeof(uint64_t)*iLen ); + } else + { + wrMva.PutDword ( iLen ); + ARRAY_FOREACH ( iVal, dCurInfo[i] ) + { + wrMva.PutDword ( (DWORD)dCurInfo[i][iVal] ); + } + } + } + } + + if ( !qMva.GetLength() ) + break; + + uCurID = qMva.Root().m_uDocID; + ARRAY_FOREACH ( i, dCurInfo ) + dCurInfo[i].Resize ( 0 ); + } + + // accumulate this entry +#if PARANOID + assert ( dCurInfo [ qMva.Root().m_iAttr ].GetLength()==0 + || dCurInfo [ qMva.Root().m_iAttr ].Last()<=qMva.Root().m_uValue ); +#endif + dCurInfo [ qMva.Root().m_iAttr ].AddUnique ( qMva.Root().m_uValue ); + + // get next entry + int iBin = qMva.Root().m_iTag; + qMva.Pop (); + + MvaEntryTag_t tEntry; + ESphBinRead iRes = dBins[iBin]->ReadBytes ( (MvaEntry_t*)&tEntry, sizeof(MvaEntry_t) ); + tEntry.m_iTag = iBin; + + if ( iRes==BIN_READ_OK ) + qMva.Push ( tEntry ); + + if ( iRes==BIN_READ_ERROR ) + { + m_sLastError.SetSprintf ( "sort_mva: read error" ); + return false; + } + } + + // clean up readers + ARRAY_FOREACH ( i, dBins ) + SafeDelete ( dBins[i] ); + + wrMva.CloseFile (); + if ( wrMva.IsError() ) + return false; + + if ( m_pProgress ) + m_pProgress ( &m_tProgress, true ); + + return true; +} + + +struct CmpOrdinalsValue_fn +{ + inline bool IsLess ( const Ordinal_t & a, const Ordinal_t & b ) const + { + return strcmp ( a.m_sValue.cstr(), b.m_sValue.cstr() )<0; + } +}; + +struct CmpOrdinalsEntry_fn +{ + static inline bool IsLess ( const OrdinalEntry_t & a, const OrdinalEntry_t & b ) + { + return strcmp ( a.m_sValue.cstr(), b.m_sValue.cstr() )<0; + } +}; + +struct CmpOrdinalsDocid_fn +{ + inline bool IsLess ( const OrdinalId_t & a, const OrdinalId_t & b ) const + { + return a.m_uDocID < b.m_uDocID; + } +}; + + +struct CmpMvaEntries_fn +{ + inline bool IsLess ( const MvaEntry_t & a, const MvaEntry_t & b ) const + { + return a & dOrdinals ) +{ + SphOffset_t uSize = ( sizeof ( SphDocID_t ) + sizeof ( DWORD ) ) * dOrdinals.GetLength (); + + ARRAY_FOREACH ( i, dOrdinals ) + { + Ordinal_t & Ord = dOrdinals[i]; + + DWORD uValueLen = Ord.m_sValue.cstr () ? strlen ( Ord.m_sValue.cstr () ) : 0; + Writer.PutBytes ( &(Ord.m_uDocID), sizeof ( Ord.m_uDocID ) ); + Writer.PutBytes ( &uValueLen, sizeof ( uValueLen ) ); + Writer.PutBytes ( Ord.m_sValue.cstr (), uValueLen ); + uSize += uValueLen; + + if ( Writer.IsError () ) + return 0; + } + + return uSize; +} + + +ESphBinRead CSphIndex_VLN::ReadOrdinal ( CSphBin & Reader, Ordinal_t & Ordinal ) +{ + ESphBinRead eRes = Reader.ReadBytes ( &Ordinal.m_uDocID, sizeof ( Ordinal.m_uDocID ) ); + if ( eRes!=BIN_READ_OK ) + return eRes; + + DWORD uStrLen; + eRes = Reader.ReadBytes ( &uStrLen, sizeof ( DWORD ) ); + if ( eRes!=BIN_READ_OK ) + return eRes; + + if ( uStrLen>=(DWORD)MAX_ORDINAL_STR_LEN ) + return BIN_READ_ERROR; + + char dBuffer [MAX_ORDINAL_STR_LEN]; + + if ( uStrLen > 0 ) + { + eRes = Reader.ReadBytes ( dBuffer, uStrLen ); + if ( eRes!=BIN_READ_OK ) + return eRes; + } + + dBuffer [uStrLen] = '\0'; + Ordinal.m_sValue = dBuffer; + + return BIN_READ_OK; +} + + +bool CSphIndex_VLN::SortOrdinals ( const char * szToFile, int iFromFD, int iArenaSize, int iOrdinalsInPool, CSphVector < CSphVector < SphOffset_t > > & dOrdBlockSize, bool bWarnOfMem ) +{ + int nAttrs = dOrdBlockSize.GetLength (); + int nBlocks = dOrdBlockSize[0].GetLength (); + + CSphWriter Writer; + if ( !Writer.OpenFile ( szToFile, m_sLastError ) ) + return false; + + int iBinSize = CSphBin::CalcBinSize ( iArenaSize, nBlocks, "ordinals", bWarnOfMem ); + SphOffset_t iSharedOffset = -1; + + CSphQueue < OrdinalEntry_t, CmpOrdinalsEntry_fn > qOrdinals ( Max ( 1, nBlocks ) ); + OrdinalEntry_t tOrdinalEntry; + DWORD uOrdinalId = 0; + + CSphVector < OrdinalId_t > dOrdinalIdPool; + dOrdinalIdPool.Reserve ( nBlocks ); + + CSphVector < CSphVector < SphOffset_t > > dStarts; + dStarts.Resize ( nAttrs ); + ARRAY_FOREACH ( i, dStarts ) + dStarts[i].Resize ( nBlocks ); + + SphOffset_t uStart = 0; + for ( int iBlock = 0; iBlock < nBlocks; iBlock++ ) + for ( int iAttr = 0; iAttr < nAttrs; iAttr++ ) + { + dStarts [iAttr][iBlock] = uStart; + uStart += dOrdBlockSize [iAttr][iBlock]; + } + + for ( int iAttr = 0; iAttr < nAttrs; iAttr++ ) + { + CSphVector < CSphBin > dBins; + dBins.Resize ( nBlocks ); + + ARRAY_FOREACH ( i, dBins ) + { + dBins[i].m_iFileLeft = (int)dOrdBlockSize[iAttr][i]; + dBins[i].m_iFilePos = dStarts[iAttr][i]; + dBins[i].Init ( iFromFD, &iSharedOffset, iBinSize ); + } + + dOrdBlockSize [iAttr].Resize ( 0 ); + + for ( int iBlock = 0; iBlock < nBlocks; iBlock++ ) + { + if ( ReadOrdinal ( dBins [iBlock], tOrdinalEntry )!=BIN_READ_OK ) + { + m_sLastError = "sort_ordinals: warmup failed (io error?)"; + return false; + } + + tOrdinalEntry.m_iTag = iBlock; + qOrdinals.Push ( tOrdinalEntry ); + } + + SphDocID_t uCurID = 0; + + CSphString sLastOrdValue; + int iMyBlock = 0; + + for ( ;; ) + { + if ( !qOrdinals.GetLength () || qOrdinals.Root ().m_uDocID!=uCurID ) + { + if ( uCurID ) + { + OrdinalId_t tId; + tId.m_uDocID = uCurID; + tId.m_uId = uOrdinalId; + dOrdinalIdPool.Add ( tId ); + + if ( qOrdinals.GetLength () > 0 ) + { + if ( sLastOrdValue.cstr()[0]!=qOrdinals.Root ().m_sValue.cstr()[0] ) + uOrdinalId++; + else + if ( strcmp ( sLastOrdValue.cstr (), qOrdinals.Root ().m_sValue.cstr () ) ) + uOrdinalId++; + } + + if ( dOrdinalIdPool.GetLength()==iOrdinalsInPool ) + { + dOrdinalIdPool.Sort ( CmpOrdinalsDocid_fn () ); + Writer.PutBytes ( &dOrdinalIdPool[0], sizeof(OrdinalId_t)*dOrdinalIdPool.GetLength() ); + if ( Writer.IsError () ) + { + m_sLastError = "sort_ordinals: io error"; + return false; + } + + dOrdBlockSize [iAttr].Add ( dOrdinalIdPool.GetLength () * sizeof ( OrdinalId_t ) ); + dOrdinalIdPool.Resize ( 0 ); + } + } + + if ( !qOrdinals.GetLength () ) + break; + + uCurID = qOrdinals.Root().m_uDocID; + const_cast < CSphString & > ( qOrdinals.Root ().m_sValue ).Swap ( sLastOrdValue ); + } + + // get next entry + iMyBlock = qOrdinals.Root().m_iTag; + qOrdinals.Pop (); + + ESphBinRead eRes = ReadOrdinal ( dBins [iMyBlock], tOrdinalEntry ); + tOrdinalEntry.m_iTag = iMyBlock; + if ( eRes==BIN_READ_OK ) + qOrdinals.Push ( tOrdinalEntry ); + + if ( eRes==BIN_READ_ERROR ) + { + m_sLastError = "sort_ordinals: read error"; + return false; + } + } + + // flush last ordinal ids + if ( dOrdinalIdPool.GetLength () ) + { + dOrdinalIdPool.Sort ( CmpOrdinalsDocid_fn () ); + Writer.PutBytes ( &dOrdinalIdPool[0], sizeof(OrdinalId_t)*dOrdinalIdPool.GetLength () ); + if ( Writer.IsError () ) + { + m_sLastError = "sort_ordinals: io error"; + return false; + } + + dOrdBlockSize [iAttr].Add ( dOrdinalIdPool.GetLength()*sizeof(OrdinalId_t) ); + dOrdinalIdPool.Resize ( 0 ); + } + } + + Writer.CloseFile (); + if ( Writer.IsError () ) + return false; + + return true; +} + + +bool CSphIndex_VLN::SortOrdinalIds ( const char * szToFile, int iFromFD, int iArenaSize, CSphVector < CSphVector < SphOffset_t > > & dOrdBlockSize, bool bWarnOfMem ) +{ + int nAttrs = dOrdBlockSize.GetLength (); + int nMaxBlocks = 0; + ARRAY_FOREACH ( i, dOrdBlockSize ) + if ( dOrdBlockSize[i].GetLength () > nMaxBlocks ) + nMaxBlocks = dOrdBlockSize[i].GetLength (); + + CSphWriter Writer; + if ( !Writer.OpenFile ( szToFile, m_sLastError ) ) + return false; + + int iBinSize = CSphBin::CalcBinSize ( iArenaSize, nMaxBlocks, "ordinals", bWarnOfMem ); + + SphOffset_t uStart = 0; + OrdinalIdEntry_t tOrdinalIdEntry; + OrdinalId_t tOrdinalId; + + for ( int iAttr = 0; iAttr < nAttrs; ++iAttr ) + { + int nBlocks = dOrdBlockSize [iAttr].GetLength (); + CSphQueue < OrdinalIdEntry_t, CmpOrdinalIdEntry_fn > qOrdinalIds ( Max ( 1, nBlocks ) ); + CSphVector < CSphBin > dBins; + dBins.Resize ( nBlocks ); + + SphOffset_t iSharedOffset = -1; + + ARRAY_FOREACH ( i, dBins ) + { + dBins[i].m_iFileLeft = (int)dOrdBlockSize [iAttr][i]; + dBins[i].m_iFilePos = uStart; + dBins[i].Init ( iFromFD, &iSharedOffset, iBinSize ); + + uStart += dBins[i].m_iFileLeft; + } + + for ( int iBlock = 0; iBlock < nBlocks; iBlock++ ) + { + if ( dBins[iBlock].ReadBytes ( &tOrdinalId, sizeof ( tOrdinalId ) )!=BIN_READ_OK ) + { + m_sLastError = "sort_ordinals: warmup failed (io error?)"; + return false; + } + + tOrdinalIdEntry.m_uDocID = tOrdinalId.m_uDocID; + tOrdinalIdEntry.m_uId = tOrdinalId.m_uId; + tOrdinalIdEntry.m_iTag = iBlock; + qOrdinalIds.Push ( tOrdinalIdEntry ); + } + + OrdinalId_t tCachedId; + tCachedId.m_uDocID = 0; + + SphOffset_t uResultSize = 0; + + for ( ;; ) + { + if ( !qOrdinalIds.GetLength () || qOrdinalIds.Root ().m_uDocID!=tCachedId.m_uDocID ) + { + if ( tCachedId.m_uDocID ) + { + uResultSize += sizeof ( OrdinalId_t ); + Writer.PutBytes ( &tCachedId, sizeof ( OrdinalId_t ) ); + if ( Writer.IsError () ) + { + m_sLastError = "sort_ordinals: io error"; + return false; + } + } + + if ( !qOrdinalIds.GetLength () ) + break; + + tCachedId.m_uDocID = qOrdinalIds.Root().m_uDocID; + tCachedId.m_uId = qOrdinalIds.Root ().m_uId; + } + + // get next entry + int iBlock = qOrdinalIds.Root().m_iTag; + qOrdinalIds.Pop (); + + ESphBinRead eRes = dBins [iBlock].ReadBytes ( &tOrdinalId, sizeof ( tOrdinalId ) ); + tOrdinalIdEntry.m_uDocID = tOrdinalId.m_uDocID; + tOrdinalIdEntry.m_uId = tOrdinalId.m_uId; + tOrdinalIdEntry.m_iTag = iBlock; + if ( eRes==BIN_READ_OK ) + qOrdinalIds.Push ( tOrdinalIdEntry ); + + if ( eRes==BIN_READ_ERROR ) + { + m_sLastError = "sort_ordinals: read error"; + return false; + } + } + + dOrdBlockSize [iAttr].Resize ( 0 ); + dOrdBlockSize [iAttr].Add ( uResultSize ); + } + + return true; +} + +struct FieldMVARedirect_t +{ + int m_iAttr; + int m_iMVAAttr; + CSphAttrLocator m_tLocator; +}; + + +bool CSphIndex_VLN::RelocateBlock ( int iFile, BYTE * pBuffer, int iRelocationSize, SphOffset_t * pFileSize, CSphBin * pMinBin, SphOffset_t * pSharedOffset ) +{ + assert ( pBuffer && pFileSize && pMinBin && pSharedOffset ); + + SphOffset_t iBlockStart = pMinBin->m_iFilePos; + SphOffset_t iBlockLeft = pMinBin->m_iFileLeft; + + ESphBinRead eRes = pMinBin->Precache (); + switch ( eRes ) + { + case BIN_PRECACHE_OK: + return true; + case BIN_READ_ERROR: + m_sLastError = "block relocation: preread error"; + return false; + default: + break; + } + + int nTransfers = (int)( ( iBlockLeft+iRelocationSize-1) / iRelocationSize ); + + SphOffset_t uTotalRead = 0; + SphOffset_t uNewBlockStart = *pFileSize; + + for ( int i = 0; i < nTransfers; i++ ) + { + sphSeek ( iFile, iBlockStart + uTotalRead, SEEK_SET ); + + int iToRead = i==nTransfers-1 ? (int)( iBlockLeft % iRelocationSize ) : iRelocationSize; + size_t iRead = sphReadThrottled ( iFile, pBuffer, iToRead ); + if ( iRead!=size_t(iToRead) ) + { + m_sLastError.SetSprintf ( "block relocation: read error (%d of %d bytes read): %s", (int)iRead, iToRead, strerror(errno) ); + return false; + } + + sphSeek ( iFile, *pFileSize, SEEK_SET ); + uTotalRead += iToRead; + + if ( !sphWriteThrottled ( iFile, pBuffer, iToRead, "block relocation", m_sLastError ) ) + return false; + + *pFileSize += iToRead; + } + + assert ( uTotalRead==iBlockLeft ); + + // update block pointers + pMinBin->m_iFilePos = uNewBlockStart; + *pSharedOffset = *pFileSize; + + return true; +} + + +static int CountWords ( const CSphString & sData, ISphTokenizer * pTokenizer ) +{ + BYTE * sField = (BYTE*) sData.cstr(); + if ( !sField ) + return 0; + + int iCount = 0; + pTokenizer->SetBuffer ( sField, (int)strlen ( (char*)sField ) ); + while ( pTokenizer->GetToken() ) + iCount++; + return iCount; +} + +bool CSphIndex_VLN::LoadHitlessWords () +{ + assert ( m_dHitlessWords.GetLength()==0 ); + + if ( m_tSettings.m_sHitlessFile.IsEmpty() ) + return true; + + CSphAutofile tFile ( m_tSettings.m_sHitlessFile.cstr(), SPH_O_READ, m_sLastError ); + if ( tFile.GetFD()==-1 ) + return false; + + CSphVector dBuffer ( (int)tFile.GetSize() ); + if ( !tFile.Read ( &dBuffer[0], dBuffer.GetLength(), m_sLastError ) ) + return false; + + m_pTokenizer->SetBuffer ( &dBuffer[0], dBuffer.GetLength() ); + while ( BYTE * sToken = m_pTokenizer->GetToken() ) + m_dHitlessWords.Add ( m_pDict->GetWordID ( sToken ) ); + + m_dHitlessWords.Sort(); + return true; +} + + +static bool sphTruncate ( int iFD ) +{ +#if USE_WINDOWS + return SetEndOfFile ( (HANDLE) _get_osfhandle(iFD) )!=0; +#else + return ::ftruncate ( iFD, ::lseek ( iFD, 0, SEEK_CUR ) )==0; +#endif +} + + +int CSphIndex_VLN::Build ( const CSphVector & dSources, int iMemoryLimit, int iWriteBuffer ) +{ + PROFILER_INIT (); + + assert ( dSources.GetLength() ); + + if ( !LoadHitlessWords() ) + return 0; + + m_iWriteBuffer = ( iWriteBuffer>0 ) + ? Max ( iWriteBuffer, MIN_WRITE_BUFFER ) + : DEFAULT_WRITE_BUFFER; + + if ( !m_pWriteBuffer ) + m_pWriteBuffer = new BYTE [ m_iWriteBuffer ]; + + m_bWordDict = m_pDict->GetSettings().m_bWordDict; + + // vars shared between phases + CSphVector dBins; + SphOffset_t iSharedOffset = -1; + + m_pDict->HitblockBegin(); + + // setup sources + ARRAY_FOREACH ( iSource, dSources ) + { + CSphSource * pSource = dSources[iSource]; + assert ( pSource ); + + pSource->SetDict ( m_pDict ); + pSource->Setup ( m_tSettings ); + } + + // connect 1st source and fetch its schema + if ( !dSources[0]->Connect ( m_sLastError ) + || !dSources[0]->IterateStart ( m_sLastError ) + || !dSources[0]->UpdateSchema ( &m_tSchema, m_sLastError ) ) + { + return 0; + } + + // check docinfo + if ( m_tSchema.GetAttrsCount()==0 && m_tSettings.m_eDocinfo!=SPH_DOCINFO_NONE ) + { + sphWarning ( "Attribute count is 0: switching to none docinfo" ); + m_tSettings.m_eDocinfo = SPH_DOCINFO_NONE; + } + + if ( m_tSchema.GetAttrsCount()>0 && m_tSettings.m_eDocinfo==SPH_DOCINFO_NONE ) + { + m_sLastError.SetSprintf ( "got attributes, but docinfo is 'none' (fix your config file)" ); + return 0; + } + + bool bHaveFieldMVAs = false; + CSphVector dMvaIndexes; + CSphVector dMvaLocators; + + // ordinals and strings storage + CSphVector dOrdinalAttrs; + CSphVector dStringAttrs; + CSphVector dWordcountAttrs; + + for ( int i=0; i 0 ); + if ( bHaveOrdinals && m_tSettings.m_eDocinfo!=SPH_DOCINFO_EXTERN ) + { + m_sLastError.SetSprintf ( "ordinal string attributes require docinfo=extern (fix your config file)" ); + return 0; + } + + if ( dStringAttrs.GetLength() && m_tSettings.m_eDocinfo!=SPH_DOCINFO_EXTERN ) + { + m_sLastError.SetSprintf ( "string attributes require docinfo=extern (fix your config file)" ); + return 0; + } + + //////////////////////////////////////////////// + // collect and partially sort hits and docinfos + //////////////////////////////////////////////// + + // killlist storage + CSphVector dKillList; + + // adjust memory requirements + int iOldLimit = iMemoryLimit; + + // book memory to store at least 64K attribute rows + const int iDocinfoStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + int iDocinfoMax = Max ( 65536, iMemoryLimit/16/iDocinfoStride/sizeof(DWORD) ); + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_NONE ) + iDocinfoMax = 1; + + // book at least 32 KB for ordinals, if needed + int iOrdinalPoolSize = Max ( 32768, iMemoryLimit/8 ); + if ( !bHaveOrdinals ) + iOrdinalPoolSize = 0; + + // book at least 32 KB for field MVAs, if needed + int iFieldMVAPoolSize = Max ( 32768, iMemoryLimit/16 ); + if ( bHaveFieldMVAs==0 ) + iFieldMVAPoolSize = 0; + + // book at least 2 MB for keywords dict, if needed + int iDictSize = 0; + if ( m_bWordDict ) + iDictSize = Max ( MIN_KEYWORDS_DICT, iMemoryLimit/8 ); + + // do we have enough left for hits? + int iHitsMax = 1048576; + + iMemoryLimit -= iDocinfoMax*iDocinfoStride*sizeof(DWORD) + iOrdinalPoolSize + iFieldMVAPoolSize + iDictSize; + if ( iMemoryLimit < iHitsMax*(int)sizeof(CSphWordHit) ) + { + iMemoryLimit = iOldLimit + iHitsMax*sizeof(CSphWordHit) - iMemoryLimit; + sphWarn ( "collect_hits: mem_limit=%d kb too low, increasing to %d kb", + iOldLimit/1024, iMemoryLimit/1024 ); + } else + { + iHitsMax = iMemoryLimit / sizeof(CSphWordHit); + } + + // allocate raw hits block + CSphAutoArray dHits ( iHitsMax + MAX_SOURCE_HITS ); + CSphWordHit * pHits = dHits; + CSphWordHit * pHitsMax = dHits + iHitsMax; + + // allocate docinfos buffer + CSphAutoArray dDocinfos ( iDocinfoMax*iDocinfoStride ); + DWORD * pDocinfo = dDocinfos; + const DWORD * pDocinfoMax = dDocinfos + iDocinfoMax*iDocinfoStride; + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_NONE ) + { + pDocinfo = NULL; + pDocinfoMax = NULL; + } + + int nOrdinals = 0; + SphOffset_t uMaxOrdinalAttrBlockSize = 0; + int iCurrentBlockSize = 0; + + CSphVector < CSphVector < Ordinal_t > > dOrdinals; + dOrdinals.Resize ( dOrdinalAttrs.GetLength() ); + ARRAY_FOREACH ( i, dOrdinals ) + dOrdinals[i].Reserve ( 65536 ); + + CSphVector < CSphVector > dOrdBlockSize; + dOrdBlockSize.Resize ( dOrdinalAttrs.GetLength () ); + ARRAY_FOREACH ( i, dOrdBlockSize ) + dOrdBlockSize[i].Reserve ( 8192 ); + + int iMaxOrdLen = 0; + + CSphVector < MvaEntry_t > dFieldMVAs; + dFieldMVAs.Reserve ( 16384 ); + + CSphVector < SphOffset_t > dFieldMVABlocks; + dFieldMVABlocks.Reserve ( 4096 ); + + CSphVector < FieldMVARedirect_t > dFieldMvaIndexes; + + if ( bHaveFieldMVAs ) + dFieldMvaIndexes.Reserve ( 8 ); + + int iMaxPoolFieldMVAs = iFieldMVAPoolSize / sizeof ( MvaEntry_t ); + int nFieldMVAs = 0; + + // create temp files + CSphAutofile fdLock ( GetIndexFileName("tmp0"), SPH_O_NEW, m_sLastError, true ); + CSphAutofile fdHits ( GetIndexFileName ( m_bInplaceSettings ? "spp" : "tmp1" ), SPH_O_NEW, m_sLastError, !m_bInplaceSettings ); + CSphAutofile fdDocinfos ( GetIndexFileName ( m_bInplaceSettings ? "spa" : "tmp2" ), SPH_O_NEW, m_sLastError, !m_bInplaceSettings ); + CSphAutofile fdTmpFieldMVAs ( GetIndexFileName("tmp7"), SPH_O_NEW, m_sLastError, true ); + CSphWriter tOrdWriter; + CSphWriter tStrWriter; + + CSphString sRawOrdinalsFile = GetIndexFileName("tmp4"); + if ( bHaveOrdinals && !tOrdWriter.OpenFile ( sRawOrdinalsFile.cstr (), m_sLastError ) ) + return 0; + + if ( !tStrWriter.OpenFile ( GetIndexFileName("sps"), m_sLastError ) ) + return 0; + tStrWriter.PutByte ( 0 ); // dummy byte, to reserve magic zero offset + + if ( fdLock.GetFD()<0 || fdHits.GetFD()<0 || fdDocinfos.GetFD()<0 || fdTmpFieldMVAs.GetFD ()<0 ) + return 0; + + SphOffset_t iHitsGap = 0; + SphOffset_t iDocinfosGap = 0; + + if ( m_bInplaceSettings ) + { + const int HIT_SIZE_AVG = 4; + const float HIT_BLOCK_FACTOR = 1.0f; + const float DOCINFO_BLOCK_FACTOR = 1.0f; + + if ( m_iHitGap ) + iHitsGap = (SphOffset_t) m_iHitGap; + else + iHitsGap = (SphOffset_t)( iHitsMax*HIT_BLOCK_FACTOR*HIT_SIZE_AVG ); + + iHitsGap = Max ( iHitsGap, 1 ); + sphSeek ( fdHits.GetFD (), iHitsGap, SEEK_SET ); + + if ( m_iDocinfoGap ) + iDocinfosGap = (SphOffset_t) m_iDocinfoGap; + else + iDocinfosGap = (SphOffset_t)( iDocinfoMax*DOCINFO_BLOCK_FACTOR*iDocinfoStride*sizeof(DWORD) ); + + iDocinfosGap = Max ( iDocinfosGap, 1 ); + sphSeek ( fdDocinfos.GetFD (), iDocinfosGap, SEEK_SET ); + } + + if ( !sphLockEx ( fdLock.GetFD(), false ) ) + { + m_sLastError.SetSprintf ( "failed to lock '%s': another indexer running?", fdLock.GetFilename() ); + return 0; + } + + // setup accumulating docinfo IDs range + m_pMin->Reset ( m_tSchema.GetRowSize() ); + + for ( int i=0; im_pDynamic[i] = ROWITEM_MAX; + m_pMin->m_iDocID = DOCID_MAX; + + // build raw log + PROFILE_BEGIN ( collect_hits ); + + m_tStats.Reset (); + m_tProgress.m_ePhase = CSphIndexProgress::PHASE_COLLECT; + m_tProgress.m_iAttrs = 0; + + CSphVector dHitBlocks; + dHitBlocks.Reserve ( 1024 ); + + int iDocinfoBlocks = 0; + + ARRAY_FOREACH ( iSource, dSources ) + { + // connect and check schema, if it's not the first one + CSphSource * pSource = dSources[iSource]; + + if ( iSource ) + if ( !pSource->Connect ( m_sLastError ) + || !pSource->IterateStart ( m_sLastError ) + || !pSource->UpdateSchema ( &m_tSchema, m_sLastError ) ) + { + return 0; + } + + dFieldMvaIndexes.Resize ( 0 ); + + ARRAY_FOREACH ( i, dMvaIndexes ) + { + int iAttr = dMvaIndexes[i]; + if ( m_tSchema.GetAttr(iAttr).m_eSrc==SPH_ATTRSRC_FIELD ) + { + FieldMVARedirect_t & tRedirect = dFieldMvaIndexes.Add(); + tRedirect.m_iAttr = iAttr; + tRedirect.m_iMVAAttr = i; + tRedirect.m_tLocator = m_tSchema.GetAttr ( iAttr ).m_tLocator; + } + } + + // joined filter + bool bGotJoined = ( m_tSettings.m_eDocinfo!=SPH_DOCINFO_INLINE ) && pSource->HasJoinedFields(); + CSphVector dAllIds; // FIXME! unlimited RAM use.. + + // fetch documents + for ( ;; ) + { + // get next doc, and handle errors + bool bGotDoc = pSource->IterateDocument ( m_sLastError ); + if ( !bGotDoc ) + return 0; + + // ensure docid is sane + if ( pSource->m_tDocInfo.m_iDocID==DOCID_MAX ) + { + m_sLastError.SetSprintf ( "docid[%d]==DOCID_MAX (source broken?)",pSource->m_tDocInfo.m_iDocID ); + return 0; + } + + // check for eof + if ( !pSource->m_tDocInfo.m_iDocID ) + break; + + if ( bGotJoined ) + dAllIds.Add ( pSource->m_tDocInfo.m_iDocID ); + + // show progress bar + if ( m_pProgress + && ( ( pSource->GetStats().m_iTotalDocuments % 1000 )==0 ) ) + { + m_tProgress.m_iDocuments = m_tStats.m_iTotalDocuments + pSource->GetStats().m_iTotalDocuments; + m_tProgress.m_iBytes = m_tStats.m_iTotalBytes + pSource->GetStats().m_iTotalBytes; + m_pProgress ( &m_tProgress, false ); + } + + // update crashdump + g_iIndexerCurrentDocID = pSource->m_tDocInfo.m_iDocID; + g_iIndexerCurrentHits = pHits-dHits; + + // store field MVAs + if ( bHaveFieldMVAs ) + { + ARRAY_FOREACH ( i, dFieldMvaIndexes ) + { + int iAttr = dFieldMvaIndexes[i].m_iAttr; + int iMVA = dFieldMvaIndexes[i].m_iMVAAttr; + CSphAttrLocator tLoc = dFieldMvaIndexes[i].m_tLocator; + + // store per-document MVAs + if ( pSource->IterateFieldMVAStart ( iAttr, m_sLastError ) ) + while ( pSource->IterateFieldMVANext () ) + { + MvaEntry_t & tMva = dFieldMVAs.Add(); + tMva.m_uDocID = pSource->m_tDocInfo.m_iDocID; + tMva.m_iAttr = iMVA; + tMva.m_uValue = pSource->m_tDocInfo.GetAttr ( tLoc ); + m_tProgress.m_iAttrs++; + + int iLength = dFieldMVAs.GetLength (); + if ( iLength==iMaxPoolFieldMVAs ) + { + dFieldMVAs.Sort ( CmpMvaEntries_fn () ); + if ( !sphWriteThrottled ( fdTmpFieldMVAs.GetFD (), &dFieldMVAs[0], iLength*sizeof(MvaEntry_t), "temp_field_mva", m_sLastError ) ) + return 0; + + dFieldMVAs.Resize ( 0 ); + + nFieldMVAs += iMaxPoolFieldMVAs; + } + } + } + } + + // store ordinals + iCurrentBlockSize += ( sizeof ( SphOffset_t ) + sizeof ( DWORD ) ) * dOrdinalAttrs.GetLength (); + + ARRAY_FOREACH ( i, dOrdinalAttrs ) + { + CSphVector & dCol = dOrdinals[i]; + dCol.Add(); + + Ordinal_t & tLastOrd = dCol.Last(); + tLastOrd.m_uDocID = pSource->m_tDocInfo.m_iDocID; + Swap ( tLastOrd.m_sValue, pSource->m_dStrAttrs[dOrdinalAttrs[i]] ); + int iOrdStrLen = strlen ( tLastOrd.m_sValue.cstr () ); + if ( iOrdStrLen > MAX_ORDINAL_STR_LEN ) + { + iMaxOrdLen = iOrdStrLen; + + // truncate + iOrdStrLen = MAX_ORDINAL_STR_LEN; + tLastOrd.m_sValue = tLastOrd.m_sValue.SubString ( 0, iOrdStrLen - 1 ); + } + + iCurrentBlockSize += iOrdStrLen; + } + + if ( bHaveOrdinals ) + { + if ( iCurrentBlockSize>=iOrdinalPoolSize ) + { + iCurrentBlockSize = 0; + + nOrdinals += dOrdinals[0].GetLength (); + + ARRAY_FOREACH ( i, dOrdinalAttrs ) + { + CSphVector & dCol = dOrdinals[i]; + dCol.Sort ( CmpOrdinalsValue_fn() ); + SphOffset_t uSize = DumpOrdinals ( tOrdWriter, dCol ); + if ( !uSize ) + { + m_sLastError = "dump ordinals: io error"; + return 0; + } + + if ( uSize > uMaxOrdinalAttrBlockSize ) + uMaxOrdinalAttrBlockSize = uSize; + + dOrdBlockSize[i].Add ( uSize ); + dCol.Resize ( 0 ); + } + } + } + + // store strings + ARRAY_FOREACH ( i, dStringAttrs ) + { + // FIXME! optimize locators etc? + // FIXME! support binary strings w/embedded zeroes? + // get data, calc length + const char * sData = pSource->m_dStrAttrs[dStringAttrs[i]].cstr(); + int iLen = sData ? strlen ( sData ) : 0; + + if ( iLen ) + { + // calc offset, do sanity checks + SphOffset_t uOff = tStrWriter.GetPos(); + if ( uint64_t(uOff)>>32 ) + { + m_sLastError.SetSprintf ( "too many string attributes (current index format allows up to 4 GB)" ); + return 0; + } + pSource->m_tDocInfo.SetAttr ( m_tSchema.GetAttr ( dStringAttrs[i] ).m_tLocator, DWORD(uOff) ); + + // pack length, emit it, emit data + BYTE dPackedLen[4]; + int iLenLen = sphPackStrlen ( dPackedLen, iLen ); + tStrWriter.PutBytes ( &dPackedLen, iLenLen ); + tStrWriter.PutBytes ( sData, iLen ); + } else + { + // no data + pSource->m_tDocInfo.SetAttr ( m_tSchema.GetAttr ( dStringAttrs[i] ).m_tLocator, 0 ); + } + } + + // count words + ARRAY_FOREACH ( i, dWordcountAttrs ) + { + int iAttr = dWordcountAttrs[i]; + int iNumWords = CountWords ( pSource->m_dStrAttrs[iAttr], m_pTokenizer ); + pSource->m_tDocInfo.SetAttr ( m_tSchema.GetAttr(iAttr).m_tLocator, iNumWords ); + } + + // update min docinfo + assert ( pSource->m_tDocInfo.m_iDocID ); + m_pMin->m_iDocID = Min ( m_pMin->m_iDocID, pSource->m_tDocInfo.m_iDocID ); + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + for ( int i=0; im_pDynamic[i] = Min ( m_pMin->m_pDynamic[i], pSource->m_tDocInfo.m_pDynamic[i] ); + + // store docinfo + if ( m_tSettings.m_eDocinfo!=SPH_DOCINFO_NONE ) + { + // store next entry + DOCINFOSETID ( pDocinfo, pSource->m_tDocInfo.m_iDocID ); + memcpy ( DOCINFO2ATTRS ( pDocinfo ), pSource->m_tDocInfo.m_pDynamic, sizeof(CSphRowitem)*m_tSchema.GetRowSize() ); + pDocinfo += iDocinfoStride; + + // if not inlining, flush buffer if it's full + // (if inlining, it will flushed later, along with the hits) + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN && pDocinfo>=pDocinfoMax ) + { + assert ( pDocinfo==pDocinfoMax ); + int iLen = iDocinfoMax*iDocinfoStride*sizeof(DWORD); + + sphSortDocinfos ( dDocinfos, iDocinfoMax, iDocinfoStride ); + if ( !sphWriteThrottled ( fdDocinfos.GetFD(), dDocinfos, iLen, "raw_docinfos", m_sLastError ) ) + return 0; + + pDocinfo = dDocinfos; + iDocinfoBlocks++; + } + } + + // store hits + while ( const ISphHits * pDocHits = pSource->IterateHits ( m_sLastWarning ) ) + { + int iDocHits = pDocHits->Length(); +#if PARANOID + for ( int i=0; im_dData[i].m_iDocID==pSource->m_tDocInfo.m_iDocID ); + assert ( pDocHits->m_dData[i].m_iWordID ); + assert ( pDocHits->m_dData[i].m_iWordPos ); + } +#endif + + assert ( ( pHits+iDocHits )<=( pHitsMax+MAX_SOURCE_HITS ) ); + + memcpy ( pHits, pDocHits->First(), iDocHits*sizeof(CSphWordHit) ); + pHits += iDocHits; + + // check if we need to flush + if ( pHits=pDocinfoMax ) + && !( iDictSize && m_pDict->HitblockGetMemUse() > iDictSize ) ) + { + continue; + } + + // update crashdump + g_iIndexerPoolStartDocID = pSource->m_tDocInfo.m_iDocID; + g_iIndexerPoolStartHit = pHits-dHits; + + // sort hits + int iHits = pHits - dHits; + { + PROFILE ( sort_hits ); + sphSort ( &dHits[0], iHits, CmpHit_fn() ); + m_pDict->HitblockPatch ( &dHits[0], iHits ); + } + pHits = dHits; + + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + { + // we're inlining, so let's flush both hits and docs + int iDocs = ( pDocinfo - dDocinfos ) / iDocinfoStride; + pDocinfo = dDocinfos; + + sphSortDocinfos ( pDocinfo, iDocs, iDocinfoStride ); + + dHitBlocks.Add ( cidxWriteRawVLB ( fdHits.GetFD(), dHits, iHits, + dDocinfos, iDocs, iDocinfoStride ) ); + + // we are inlining, so if there are more hits in this document, + // we'll need to know it's info next flush + if ( iDocHits ) + { + DOCINFOSETID ( pDocinfo, pSource->m_tDocInfo.m_iDocID ); + memcpy ( DOCINFO2ATTRS ( pDocinfo ), pSource->m_tDocInfo.m_pDynamic, sizeof(CSphRowitem)*m_tSchema.GetRowSize() ); + pDocinfo += iDocinfoStride; + } + } else + { + // we're not inlining, so only flush hits, docs are flushed independently + dHitBlocks.Add ( cidxWriteRawVLB ( fdHits.GetFD(), dHits, iHits, + NULL, 0, 0 ) ); + } + m_pDict->HitblockReset (); + + if ( dHitBlocks.Last()<0 ) + return 0; + + // progress bar + m_tProgress.m_iHitsTotal += iHits; + if ( m_pProgress ) + { + m_tProgress.m_iDocuments = m_tStats.m_iTotalDocuments + pSource->GetStats().m_iTotalDocuments; + m_tProgress.m_iBytes = m_tStats.m_iTotalBytes + pSource->GetStats().m_iTotalBytes; + m_pProgress ( &m_tProgress, false ); + } + } + } + + // FIXME! uncontrolled memory usage; add checks and/or diskbased sort in the future? + if ( pSource->IterateKillListStart ( m_sLastError ) ) + { + SphDocID_t tDocId; + while ( pSource->IterateKillListNext ( tDocId ) ) + dKillList.Add ( tDocId ); + } + + // fetch joined fields + if ( bGotJoined ) + { + dAllIds.Uniq(); + + SphDocID_t uLastID = 0; + bool bLastFound = 0; + + for ( ;; ) + { + // get next doc, and handle errors + ISphHits * pJoinedHits = pSource->IterateJoinedHits ( m_sLastError ); + if ( !pJoinedHits ) + return 0; + + // ensure docid is sane + if ( pSource->m_tDocInfo.m_iDocID==DOCID_MAX ) + { + m_sLastError.SetSprintf ( "joined_docid==DOCID_MAX (source broken?)" ); + return 0; + } + + // check for eof + if ( !pSource->m_tDocInfo.m_iDocID ) + break; + + // filter and store hits + for ( const CSphWordHit * pHit = pJoinedHits->First(); pHit<=pJoinedHits->Last(); pHit++ ) + { + // flush if needed + if ( pHits>=pHitsMax ) + { + // sort hits + int iHits = pHits - dHits; + { + PROFILE ( sort_hits ); + sphSort ( &dHits[0], iHits, CmpHit_fn() ); + m_pDict->HitblockPatch ( &dHits[0], iHits ); + } + pHits = dHits; + + // we're not inlining, so only flush hits, docs are flushed independently + dHitBlocks.Add ( cidxWriteRawVLB ( fdHits.GetFD(), dHits, iHits, + NULL, 0, 0 ) ); + m_pDict->HitblockReset (); + + if ( dHitBlocks.Last()<0 ) + return 0; + } + + // filter + SphDocID_t uHitID = pHit->m_iDocID; + if ( uHitID!=uLastID ) + { + uLastID = uHitID; + bLastFound = ( dAllIds.BinarySearch ( uHitID )!=NULL ); + } + + // copy next hit + if ( bLastFound ) + *pHits++ = *pHit; + } + }//end for loop + } + + // this source is over, disconnect and update stats + pSource->Disconnect (); + + m_tStats.m_iTotalDocuments += pSource->GetStats().m_iTotalDocuments; + m_tStats.m_iTotalBytes += pSource->GetStats().m_iTotalBytes; + } + + // flush last docinfo block + int iDocinfoLastBlockSize = 0; + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN && pDocinfo>dDocinfos ) + { + iDocinfoLastBlockSize = ( pDocinfo - dDocinfos ) / iDocinfoStride; + assert ( pDocinfo==( dDocinfos + iDocinfoLastBlockSize*iDocinfoStride ) ); + + int iLen = iDocinfoLastBlockSize*iDocinfoStride*sizeof(DWORD); + sphSortDocinfos ( dDocinfos, iDocinfoLastBlockSize, iDocinfoStride ); + if ( !sphWriteThrottled ( fdDocinfos.GetFD(), dDocinfos, iLen, "raw_docinfos", m_sLastError ) ) + return 0; + + iDocinfoBlocks++; + } + + // flush last hit block + if ( pHits>dHits ) + { + int iHits = pHits - dHits; + { + PROFILE ( sort_hits ); + sphSort ( &dHits[0], iHits, CmpHit_fn() ); + m_pDict->HitblockPatch ( &dHits[0], iHits ); + } + m_tProgress.m_iHitsTotal += iHits; + + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + { + int iDocs = ( pDocinfo - dDocinfos ) / iDocinfoStride; + sphSortDocinfos ( dDocinfos, iDocs, iDocinfoStride ); + dHitBlocks.Add ( cidxWriteRawVLB ( fdHits.GetFD(), dHits, iHits, + dDocinfos, iDocs, iDocinfoStride ) ); + } else + { + dHitBlocks.Add ( cidxWriteRawVLB ( fdHits.GetFD(), dHits, iHits, NULL, 0, 0 ) ); + } + m_pDict->HitblockReset (); + + if ( dHitBlocks.Last()<0 ) + return 0; + } + + // flush last field MVA block + if ( bHaveFieldMVAs && dFieldMVAs.GetLength () ) + { + int iLength = dFieldMVAs.GetLength (); + nFieldMVAs += iLength; + + dFieldMVAs.Sort ( CmpMvaEntries_fn () ); + if ( !sphWriteThrottled ( fdTmpFieldMVAs.GetFD (), &dFieldMVAs[0], iLength*sizeof(MvaEntry_t), "temp_field_mva", m_sLastError ) ) + return 0; + + dFieldMVAs.Reset (); + } + + // flush last ordinals block + if ( bHaveOrdinals && dOrdinals[0].GetLength () ) + { + nOrdinals += dOrdinals[0].GetLength (); + + ARRAY_FOREACH ( i, dOrdinalAttrs ) + { + CSphVector & dCol = dOrdinals[i]; + dCol.Sort ( CmpOrdinalsValue_fn() ); + + SphOffset_t uSize = DumpOrdinals ( tOrdWriter, dCol ); + if ( !uSize ) + { + m_sLastError = "dump ordinals: io error"; + return 0; + } + + if ( uSize > uMaxOrdinalAttrBlockSize ) + uMaxOrdinalAttrBlockSize = uSize; + + dOrdBlockSize[i].Add ( uSize ); + dCol.Reset (); + } + } + + if ( m_pProgress ) + { + m_tProgress.m_iDocuments = m_tStats.m_iTotalDocuments; + m_tProgress.m_iBytes = m_tStats.m_iTotalBytes; + m_pProgress ( &m_tProgress, true ); + } + + PROFILE_END ( collect_hits ); + + /////////////////////////////////////// + // collect and sort multi-valued attrs + /////////////////////////////////////// + + if ( !BuildMVA ( dSources, dHits, iHitsMax*sizeof(CSphWordHit), + fdTmpFieldMVAs.GetFD (), nFieldMVAs, iMaxPoolFieldMVAs ) ) + return 0; + + // reset persistent mva update pool + ::unlink ( GetIndexFileName("mvp").cstr() ); + + // reset hits pool + dHits.Reset (); + + CSphString sFieldMVAFile = fdTmpFieldMVAs.GetFilename (); + fdTmpFieldMVAs.Close (); + ::unlink ( sFieldMVAFile.cstr () ); + + ///////////////// + // sort docinfos + ///////////////// + + tOrdWriter.CloseFile (); + if ( tOrdWriter.IsError () ) + return 0; + + CSphString sSortedOrdinalIdFile = GetIndexFileName("tmp6"); + + // sort ordinals + if ( bHaveOrdinals && !dOrdBlockSize[0].GetLength () ) + { + bHaveOrdinals = false; + ::unlink ( sRawOrdinalsFile.cstr () ); + } + + if ( bHaveOrdinals ) + { + if ( iMaxOrdLen > MAX_ORDINAL_STR_LEN ) + sphWarn ( "some ordinal attributes are too long (len=%d,max=%d)", iMaxOrdLen, MAX_ORDINAL_STR_LEN ); + + CSphString sUnsortedIdFile = GetIndexFileName("tmp5"); + + CSphAutofile fdRawOrdinals ( sRawOrdinalsFile.cstr (), SPH_O_READ, m_sLastError, true ); + if ( fdRawOrdinals.GetFD () < 0 ) + return 0; + + const float ARENA_PERCENT = 0.5f; + int nBlocks = dOrdBlockSize[0].GetLength (); + + SphOffset_t uMemNeededForReaders = SphOffset_t ( nBlocks ) * uMaxOrdinalAttrBlockSize; + SphOffset_t uMemNeededForSorting = sizeof ( OrdinalId_t ) * nOrdinals; + + int iArenaSize = (int) Min ( SphOffset_t ( iMemoryLimit * ARENA_PERCENT ), uMemNeededForReaders ); + iArenaSize = Max ( CSphBin::MIN_SIZE * nBlocks, iArenaSize ); + + int iOrdinalsInPool = (int) Min ( SphOffset_t ( iMemoryLimit * ( 1.0f - ARENA_PERCENT ) ), uMemNeededForSorting ) / sizeof ( OrdinalId_t ); + + if ( !SortOrdinals ( sUnsortedIdFile.cstr (), fdRawOrdinals.GetFD (), iArenaSize, iOrdinalsInPool, dOrdBlockSize, iArenaSize < uMemNeededForReaders ) ) + return 0; + + CSphAutofile fdUnsortedId ( sUnsortedIdFile.cstr (), SPH_O_READ, m_sLastError, true ); + if ( fdUnsortedId.GetFD () < 0 ) + return 0; + + iArenaSize = Min ( iMemoryLimit, (int)uMemNeededForSorting ); + iArenaSize = Max ( CSphBin::MIN_SIZE * ( nOrdinals / iOrdinalsInPool + 1 ), iArenaSize ); + + if ( !SortOrdinalIds ( sSortedOrdinalIdFile.cstr (), fdUnsortedId.GetFD (), iArenaSize, dOrdBlockSize, iArenaSize < uMemNeededForSorting ) ) + return 0; + } + + // initialize MVA reader + CSphAutoreader rdMva; + if ( !rdMva.Open ( GetIndexFileName("spm"), m_sLastError ) ) + return false; + + SphDocID_t uMvaID = rdMva.GetDocid(); + + // initialize writer + int iDocinfoFD = -1; + SphOffset_t iDocinfoWritePos = 0; + CSphScopedPtr pfdDocinfoFinal ( NULL ); + + if ( m_bInplaceSettings ) + iDocinfoFD = fdDocinfos.GetFD (); + else + { + pfdDocinfoFinal = new CSphAutofile ( GetIndexFileName("spa"), SPH_O_NEW, m_sLastError ); + iDocinfoFD = pfdDocinfoFinal->GetFD(); + if ( iDocinfoFD < 0 ) + return 0; + } + + int iDupes = 0; + int iMinBlock = -1; + + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN && dHitBlocks.GetLength() ) + { + // initialize readers + assert ( dBins.GetLength()==0 ); + dBins.Reserve ( iDocinfoBlocks ); + + float fReadFactor = 1.0f; + float fRelocFactor = 0.0f; + if ( m_bInplaceSettings ) + { + assert ( m_fRelocFactor > 0.005f && m_fRelocFactor < 0.95f ); + fRelocFactor = m_fRelocFactor; + fReadFactor -= fRelocFactor; + } + + int iBinSize = CSphBin::CalcBinSize ( int ( iMemoryLimit * fReadFactor ), iDocinfoBlocks, "sort_docinfos" ); + int iRelocationSize = m_bInplaceSettings ? int ( iMemoryLimit * fRelocFactor ) : 0; + CSphAutoArray pRelocationBuffer ( iRelocationSize ); + iSharedOffset = -1; + + for ( int i=0; im_iFileLeft = ( ( i==iDocinfoBlocks-1 ) ? iDocinfoLastBlockSize : iDocinfoMax )*iDocinfoStride*sizeof(DWORD); + dBins[i]->m_iFilePos = ( i==0 ) ? iDocinfosGap : dBins[i-1]->m_iFilePos + dBins[i-1]->m_iFileLeft; + dBins[i]->Init ( fdDocinfos.GetFD(), &iSharedOffset, iBinSize ); + } + + SphOffset_t iDocinfoFileSize = 0; + if ( iDocinfoBlocks ) + iDocinfoFileSize = dBins [iDocinfoBlocks-1]->m_iFilePos + dBins [iDocinfoBlocks-1]->m_iFileLeft; + + // docinfo queue + CSphAutoArray dDocinfoQueue ( iDocinfoBlocks*iDocinfoStride ); + CSphQueue < int, CmpQueuedDocinfo_fn > qDocinfo ( iDocinfoBlocks ); + + CmpQueuedDocinfo_fn::m_pStorage = dDocinfoQueue; + CmpQueuedDocinfo_fn::m_iStride = iDocinfoStride; + + pDocinfo = dDocinfoQueue; + for ( int i=0; iReadBytes ( pDocinfo, iDocinfoStride*sizeof(DWORD) )!=BIN_READ_OK ) + { + m_sLastError.SetSprintf ( "sort_docinfos: warmup failed (io error?)" ); + return 0; + } + pDocinfo += iDocinfoStride; + qDocinfo.Push ( i ); + } + + CSphVector < CSphBin > dOrdReaders; + SphOffset_t iSharedOrdOffset = -1; + + CSphAutofile fdTmpSortedIds ( sSortedOrdinalIdFile.cstr (), SPH_O_READ, m_sLastError, true ); + + if ( bHaveOrdinals ) + { + if ( fdTmpSortedIds.GetFD () < 0 ) + return 0; + + dOrdReaders.Resize ( dOrdinalAttrs.GetLength () ); + SphOffset_t uStart = 0; + ARRAY_FOREACH ( i, dOrdReaders ) + { + dOrdReaders[i].m_iFileLeft = (int)dOrdBlockSize [i][0]; + dOrdReaders[i].m_iFilePos = uStart; + dOrdReaders[i].Init ( fdTmpSortedIds.GetFD(), &iSharedOrdOffset, ORDINAL_READ_SIZE ); + uStart += dOrdReaders[i].m_iFileLeft; + } + } + + // while the queue has data for us + int iOrd = 0; + pDocinfo = dDocinfos; + SphDocID_t uLastId = 0; + m_uMinMaxIndex = 0; + + // prepare the collector for min/max of attributes + AttrIndexBuilder_c tMinMax ( m_tSchema ); + CSphVector dMinMaxBuffer ( tMinMax.GetExpectedSize ( m_tStats.m_iTotalDocuments ) ); + CSphDocMVA tCurInfo ( dMvaIndexes.GetLength() ); + tMinMax.Prepare ( dMinMaxBuffer.Begin(), dMinMaxBuffer.Begin() + dMinMaxBuffer.GetLength() ); + + SphDocID_t uLastDupe = 0; + while ( qDocinfo.GetLength() ) + { + // obtain bin index and next entry + int iBin = qDocinfo.Root(); + DWORD * pEntry = dDocinfoQueue + iBin*iDocinfoStride; + + if ( DOCINFO2ID ( pEntry )=DOCINFO2ID(pEntry) ); + if ( uMvaID==DOCINFO2ID(pEntry) ) + { + ARRAY_FOREACH ( i, dMvaIndexes ) + { + sphSetRowAttr ( DOCINFO2ATTRS(pEntry), dMvaLocators[i], SphAttr_t(rdMva.GetPos()/sizeof(DWORD)) ); // intentional clamp; we'll check for 32bit overflow later + + DWORD iMvaCount = rdMva.GetDword(); + tCurInfo.m_dMVA[i].Reserve ( iMvaCount ); + while ( iMvaCount-- ) + { + tCurInfo.m_dMVA[i].Add ( rdMva.GetDword() ); + } + } + + uMvaID = rdMva.GetDocid(); + if ( !uMvaID ) + uMvaID = DOCID_MAX; + } + } + + tMinMax.Collect ( pEntry, tCurInfo ); + + ARRAY_FOREACH ( i, tCurInfo.m_dMVA ) + tCurInfo.m_dMVA[i].Resize ( 0 ); + + // emit it + memcpy ( pDocinfo, pEntry, iDocinfoStride*sizeof(DWORD) ); + pDocinfo += iDocinfoStride; + + uLastId = DOCINFO2ID(pEntry); + + if ( pDocinfo>=pDocinfoMax ) + { + int iLen = iDocinfoMax*iDocinfoStride*sizeof(DWORD); + + if ( m_bInplaceSettings ) + { + if ( iMinBlock==-1 || dBins[iMinBlock]->IsEOF () ) + { + iMinBlock = -1; + ARRAY_FOREACH ( i, dBins ) + if ( !dBins[i]->IsEOF () && ( iMinBlock==-1 || dBins [i]->m_iFilePosm_iFilePos ) ) + iMinBlock = i; + } + + if ( iMinBlock!=-1 && ( iDocinfoWritePos + iLen ) > dBins[iMinBlock]->m_iFilePos ) + { + if ( !RelocateBlock ( iDocinfoFD, (BYTE*)pRelocationBuffer, iRelocationSize, &iDocinfoFileSize, dBins[iMinBlock], &iSharedOffset ) ) + return 0; + + iMinBlock = (iMinBlock+1) % dBins.GetLength (); + } + + sphSeek ( iDocinfoFD, iDocinfoWritePos, SEEK_SET ); + iSharedOffset = iDocinfoWritePos; + } + + if ( !sphWriteThrottled ( iDocinfoFD, dDocinfos, iLen, "sort_docinfo", m_sLastError ) ) + return 0; + + iDocinfoWritePos += iLen; + pDocinfo = dDocinfos; + } + } + + // pop its index, update it, push its index again + qDocinfo.Pop (); + ESphBinRead eRes = dBins[iBin]->ReadBytes ( pEntry, iDocinfoStride*sizeof(DWORD) ); + if ( eRes==BIN_READ_ERROR ) + { + m_sLastError.SetSprintf ( "sort_docinfo: failed to read entry" ); + return 0; + } + if ( eRes==BIN_READ_OK ) + qDocinfo.Push ( iBin ); + } + + if ( pDocinfo>dDocinfos ) + { + assert ( 0==( pDocinfo-dDocinfos ) % iDocinfoStride ); + int iLen = ( pDocinfo - dDocinfos )*sizeof(DWORD); + + if ( m_bInplaceSettings ) + sphSeek ( iDocinfoFD, iDocinfoWritePos, SEEK_SET ); + + if ( !sphWriteThrottled ( iDocinfoFD, dDocinfos, iLen, "sort_docinfo", m_sLastError ) ) + return 0; + + if ( m_bInplaceSettings ) + if ( !sphTruncate ( iDocinfoFD ) ) + sphWarn ( "failed to truncate %s", fdDocinfos.GetFilename() ); + } + tMinMax.FinishCollect(); + sphWriteThrottled ( iDocinfoFD, &dMinMaxBuffer[0], + sizeof(DWORD) * tMinMax.GetActualSize(), "minmax_docinfo", m_sLastError ); + + // clean up readers + ARRAY_FOREACH ( i, dBins ) + SafeDelete ( dBins[i] ); + + dBins.Reset (); + } + + dDocinfos.Reset (); + pDocinfo = NULL; + + // it might be zero-length, but it must exist + if ( m_bInplaceSettings ) + fdDocinfos.Close (); + else + { + assert ( pfdDocinfoFinal.Ptr () ); + pfdDocinfoFinal->Close (); + } + + // dump killlist + CSphAutofile fdKillList ( GetIndexFileName("spk"), SPH_O_NEW, m_sLastError ); + if ( fdKillList.GetFD()<0 ) + return 0; + + if ( dKillList.GetLength () ) + { + dKillList.Uniq (); + + m_iKillListSize = dKillList.GetLength (); + + if ( !sphWriteThrottled ( fdKillList.GetFD (), &dKillList[0], m_iKillListSize*sizeof(SphAttr_t), "kill list", m_sLastError ) ) + return 0; + } + + fdKillList.Close (); + + /////////////////////////////////// + // sort and write compressed index + /////////////////////////////////// + + PROFILE_BEGIN ( invert_hits ); + + // initialize readers + assert ( dBins.GetLength()==0 ); + dBins.Reserve ( dHitBlocks.GetLength() ); + + iSharedOffset = -1; + + float fReadFactor = 1.0f; + int iRelocationSize = 0; + iWriteBuffer = m_iWriteBuffer; + + if ( m_bInplaceSettings ) + { + assert ( m_fRelocFactor > 0.005f && m_fRelocFactor < 0.95f ); + assert ( m_fWriteFactor > 0.005f && m_fWriteFactor < 0.95f ); + assert ( m_fWriteFactor+m_fRelocFactor < 1.0f ); + + fReadFactor -= m_fRelocFactor + m_fWriteFactor; + + iRelocationSize = int ( iMemoryLimit * m_fRelocFactor ); + iWriteBuffer = int ( iMemoryLimit * m_fWriteFactor ); + } + + int iBinSize = CSphBin::CalcBinSize ( int ( iMemoryLimit * fReadFactor ), dHitBlocks.GetLength() + m_bWordDict, "sort_hits" ); + + CSphAutoArray pRelocationBuffer ( iRelocationSize ); + iSharedOffset = -1; + + ARRAY_FOREACH ( i, dHitBlocks ) + { + dBins.Add ( new CSphBin ( m_tSettings.m_eHitless, m_pDict->GetSettings().m_bWordDict ) ); + dBins[i]->m_iFileLeft = dHitBlocks[i]; + dBins[i]->m_iFilePos = ( i==0 ) ? iHitsGap : dBins[i-1]->m_iFilePos + dBins[i-1]->m_iFileLeft; + dBins[i]->Init ( fdHits.GetFD(), &iSharedOffset, iBinSize ); + } + + // if there were no hits, create zero-length index files + int iRawBlocks = dBins.GetLength(); + + ////////////////////////////// + // create new index files set + ////////////////////////////// + + // doclist and hitlist files + m_wrDoclist.CloseFile (); + m_wrHitlist.CloseFile (); + + m_wrDoclist.SetBufferSize ( m_iWriteBuffer ); + m_wrHitlist.SetBufferSize ( m_bInplaceSettings ? iWriteBuffer : m_iWriteBuffer ); + + if ( !m_wrDoclist.OpenFile ( GetIndexFileName("spd"), m_sLastError ) ) + return 0; + + if ( m_bInplaceSettings ) + { + sphSeek ( fdHits.GetFD(), 0, SEEK_SET ); + m_wrHitlist.SetFile ( fdHits.GetFD(), &iSharedOffset ); + } else + if ( !m_wrHitlist.OpenFile ( GetIndexFileName("spp"), m_sLastError ) ) + return 0; + + // put dummy byte (otherwise offset would start from 0, first delta would be 0 + // and VLB encoding of offsets would fuckup) + BYTE bDummy = 1; + m_wrDoclist.PutBytes ( &bDummy, 1 ); + m_wrHitlist.PutBytes ( &bDummy, 1 ); + + // dict files + CSphAutofile fdTmpDict ( GetIndexFileName("tmp8"), SPH_O_NEW, m_sLastError, true ); + CSphAutofile fdDict ( GetIndexFileName("spi"), SPH_O_NEW, m_sLastError, false ); + if ( fdTmpDict.GetFD()<0 || fdDict.GetFD()<0 ) + return 0; + m_pDict->DictBegin ( fdTmpDict.GetFD(), fdDict.GetFD(), iBinSize ); + + // adjust min IDs, and fill header + assert ( m_pMin->m_iDocID>0 ); + m_pMin->m_iDocID--; + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + for ( int i=0; im_pDynamic[i]--; + + ////////////// + // final sort + ////////////// + + if ( iRawBlocks ) + { + int iLastBin = dBins.GetLength () - 1; + SphOffset_t iHitFileSize = dBins[iLastBin]->m_iFilePos + dBins [iLastBin]->m_iFileLeft; + + CSphHitQueue tQueue ( iRawBlocks ); + CSphAggregateHit tHit; + + // initialize hitlist encoder state + m_tLastHit.m_iDocID = 0; + m_tLastHit.m_iWordID = 0; + m_tLastHit.m_iWordPos = EMPTY_HIT; + m_tLastHit.m_sKeyword = m_sLastKeyword; + + // initial fill + int iRowitems = ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) ? m_tSchema.GetRowSize() : 0; + CSphAutoArray dInlineAttrs ( iRawBlocks*iRowitems ); + + int * bActive = new int [ iRawBlocks ]; + for ( int i=0; iReadHit ( &tHit, iRowitems, dInlineAttrs+i*iRowitems ) ) + { + m_sLastError.SetSprintf ( "sort_hits: warmup failed (io error?)" ); + return 0; + } + bActive[i] = ( tHit.m_iWordID!=0 ); + if ( bActive[i] ) + tQueue.Push ( tHit, i ); + } + + // init progress meter + m_tProgress.m_ePhase = CSphIndexProgress::PHASE_SORT; + m_tProgress.m_iHits = 0; + + // while the queue has data for us + // FIXME! analyze binsRead return code + int iHitsSorted = 0; + iMinBlock = -1; + while ( tQueue.m_iUsed ) + { + int iBin = tQueue.m_pData->m_iBin; + + // pack and emit queue root + tQueue.m_pData->m_iDocID -= m_pMin->m_iDocID; + + if ( m_bInplaceSettings ) + { + if ( iMinBlock==-1 || dBins[iMinBlock]->IsEOF () || !bActive[iMinBlock] ) + { + iMinBlock = -1; + ARRAY_FOREACH ( i, dBins ) + if ( !dBins[i]->IsEOF () && bActive[i] && ( iMinBlock==-1 || dBins[i]->m_iFilePos < dBins[iMinBlock]->m_iFilePos ) ) + iMinBlock = i; + } + + int iToWriteMax = 3*sizeof(DWORD); + if ( iMinBlock!=-1 && ( m_wrHitlist.GetPos () + iToWriteMax ) > dBins[iMinBlock]->m_iFilePos ) + { + if ( !RelocateBlock ( fdHits.GetFD (), (BYTE*)pRelocationBuffer, iRelocationSize, &iHitFileSize, dBins[iMinBlock], &iSharedOffset ) ) + return 0; + + iMinBlock = (iMinBlock+1) % dBins.GetLength (); + } + } + + cidxHit ( tQueue.m_pData, iRowitems ? dInlineAttrs+iBin*iRowitems : NULL ); + if ( m_pDict->DictIsError() || m_wrDoclist.IsError() || m_wrHitlist.IsError() ) + return 0; + + // pop queue root and push next hit from popped bin + tQueue.Pop (); + if ( bActive[iBin] ) + { + dBins[iBin]->ReadHit ( &tHit, iRowitems, dInlineAttrs+iBin*iRowitems ); + bActive[iBin] = ( tHit.m_iWordID!=0 ); + if ( bActive[iBin] ) + tQueue.Push ( tHit, iBin ); + } + + // progress + if ( m_pProgress && ++iHitsSorted==1000000 ) + { + m_tProgress.m_iHits += iHitsSorted; + m_pProgress ( &m_tProgress, false ); + iHitsSorted = 0; + } + } + + if ( m_pProgress ) + { + m_tProgress.m_iHits = m_tProgress.m_iHitsTotal; // sum might be less than total because of dupes! + m_pProgress ( &m_tProgress, true ); + } + + // cleanup + SafeDeleteArray ( bActive ); + + ARRAY_FOREACH ( i, dBins ) + SafeDelete ( dBins[i] ); + dBins.Reset (); + + CSphAggregateHit tFlush; + tFlush.m_iDocID = 0; + tFlush.m_iWordID = 0; + tFlush.m_sKeyword = NULL; + tFlush.m_iWordPos = EMPTY_HIT; + tFlush.m_dFieldMask.Unset(); + cidxHit ( &tFlush, NULL ); + + if ( m_bInplaceSettings ) + { + m_wrHitlist.CloseFile (); + if ( !sphTruncate ( fdHits.GetFD () ) ) + sphWarn ( "failed to truncate %s", fdHits.GetFilename() ); + } + } + + if ( iDupes ) + sphWarn ( "%d duplicate document id pairs found", iDupes ); + + PROFILE_END ( invert_hits ); + + // we're done + if ( !cidxDone ( "sph", iMemoryLimit ) ) + return 0; + + // when the party's over.. + ARRAY_FOREACH ( i, dSources ) + dSources[i]->PostIndex (); + + PROFILER_DONE (); + PROFILE_SHOW (); + return 1; +} // NOLINT function length + + +static bool CopyFile ( const char * sSrc, const char * sDst, CSphString & sErrStr ) +{ + assert ( sSrc ); + assert ( sDst ); + + const DWORD iMaxBufSize = 1024 * 1024; + + CSphAutofile tSrcFile ( sSrc, SPH_O_READ, sErrStr ); + CSphAutofile tDstFile ( sDst, SPH_O_NEW, sErrStr ); + + if ( tSrcFile.GetFD()<0 || tDstFile.GetFD()<0 ) + return false; + + SphOffset_t iFileSize = tSrcFile.GetSize(); + DWORD iBufSize = (DWORD) Min ( iFileSize, (SphOffset_t)iMaxBufSize ); + + if ( iFileSize ) + { + BYTE * pData = new BYTE[iBufSize]; + + if ( !pData ) + { + sErrStr.SetSprintf ( "memory allocation error" ); + return false; + } + + bool bError = true; + + while ( iFileSize > 0 ) + { + DWORD iSize = (DWORD) Min ( iFileSize, (SphOffset_t)iBufSize ); + + if ( !tSrcFile.Read ( pData, iSize, sErrStr ) ) + break; + + if ( !sphWriteThrottled ( tDstFile.GetFD(), pData, iSize, "CopyFile", sErrStr ) ) + break; + + iFileSize -= iSize; + + if ( !iFileSize ) + bError = false; + } + + SafeDeleteArray ( pData ); + return ( bError==false ); + } + + return true; +} + + +SphAttr_t CopyStringAttr ( CSphWriter & wrTo, CSphReader & rdFrom, SphAttr_t uOffset ) +{ + // magic offset? do nothing + if ( !uOffset ) + return 0; + + // aim + rdFrom.SeekTo ( uOffset, 0 ); + + // read and decode length + // MUST be in sync with sphUnpackStr + int iLen = rdFrom.GetByte (); + if ( iLen & 0x80 ) + { + if ( iLen & 0x40 ) + { + iLen = ( (int)( iLen & 0x3f )<<16 ) + ( rdFrom.GetByte()<<8 ); + iLen += rdFrom.GetByte(); // MUST be separate statement; cf. sequence point + } else + { + iLen = ( (int)( iLen & 0x3f )<<8 ) + rdFrom.GetByte(); + } + } + + // no data? do nothing + if ( !iLen ) + return 0; + + // copy bytes + uOffset = (SphAttr_t) wrTo.GetPos(); // FIXME! check bounds? + + BYTE dLen[4]; + wrTo.PutBytes ( dLen, sphPackStrlen ( dLen, iLen ) ); + + while ( iLen>0 ) + { + const BYTE * pBuf = NULL; + int iChunk = rdFrom.GetBytesZerocopy ( &pBuf, iLen ); + wrTo.PutBytes ( pBuf, iChunk ); + iLen -= iChunk; + } + + return uOffset; +} + + +static const int DOCLIST_HINT_THRESH = 256; + +static int DoclistHintUnpack ( int iDocs, BYTE uHint ) +{ + if ( iDocs=m_iMaxPos ) + return false; + + // get leading value + SphWordID_t iWord0 = m_pDict ? m_tReader.GetByte() : m_tReader.UnzipWordid(); + if ( !iWord0 ) + { + // handle checkpoint + m_tReader.UnzipOffset(); + + m_iWordID = 0; + m_iDoclistOffset = 0; + m_sWord[0] = '\0'; + + if ( m_tReader.GetPos()>=m_iMaxPos ) + return false; + + iWord0 = m_pDict ? m_tReader.GetByte() : m_tReader.UnzipWordid(); // get next word + } + if ( !iWord0 ) + return false; // some failure + + // get word entry + if ( m_pDict ) + { + // unpack next word + // must be in sync with DictEnd()! + assert ( iWord0<=255 ); + BYTE uPack = (BYTE) iWord0; + + int iMatch, iDelta; + if ( uPack & 0x80 ) + { + iDelta = ( ( uPack>>4 ) & 7 ) + 1; + iMatch = uPack & 15; + } else + { + iDelta = uPack & 127; + iMatch = m_tReader.GetByte(); + } + assert ( iMatch+iDelta<(int)sizeof(m_sWord)-1 ); + assert ( iMatch<=(int)strlen(m_sWord) ); + + m_tReader.GetBytes ( m_sWord + iMatch, iDelta ); + m_sWord [ iMatch+iDelta ] = '\0'; + + m_iDoclistOffset = m_tReader.UnzipOffset(); + m_iDocs = m_tReader.UnzipInt(); + m_iHits = m_tReader.UnzipInt(); + m_iHint = 0; + if ( m_iDocs>=DOCLIST_HINT_THRESH ) + m_iHint = m_tReader.GetByte(); + DoclistHintUnpack ( m_iDocs, (BYTE) m_iHint ); + + m_iWordID = (SphWordID_t) sphCRC32 ( GetWord() ); // set wordID for indexing + + } else + { + m_iWordID += iWord0; + m_iDoclistOffset += m_tReader.UnzipOffset(); + m_iDocs = m_tReader.UnzipInt(); + m_iHits = m_tReader.UnzipInt(); + } + + m_bHasHitlist = + ( m_eHitless==SPH_HITLESS_NONE ) || + ( m_eHitless==SPH_HITLESS_SOME && !( m_iDocs & 0x80000000 ) ); + m_iDocs = m_eHitless==SPH_HITLESS_SOME ? ( m_iDocs & 0x7FFFFFFF ) : m_iDocs; + + return true; // FIXME? errorflag? + } + + int CmpWord ( const CSphDictReader & tOther ) const + { + if ( m_pDict ) + return strcmp ( m_sWord, tOther.m_sWord ); + + int iRes = 0; + iRes = m_iWordIDtOther.m_iWordID ? 1 : iRes; + return iRes; + } + + BYTE * GetWord () const { return (BYTE *)m_sWord; } +}; + +static ISphFilter * CreateMergeFilters ( CSphVector & dSettings, const CSphSchema & tSchema, const DWORD * pMvaPool ) +{ + CSphString sError; + ISphFilter * pResult = NULL; + ARRAY_FOREACH ( i, dSettings ) + { + ISphFilter * pFilter = sphCreateFilter ( dSettings[i], tSchema, pMvaPool, sError ); + if ( pFilter ) + pResult = sphJoinFilters ( pResult, pFilter ); + } + return pResult; +} + +class CSphMerger +{ +private: + CSphIndex_VLN * m_pOutputIndex; + +public: + explicit CSphMerger ( CSphIndex_VLN * pOutputIndex ) + : m_pOutputIndex ( pOutputIndex ) + {} + template < typename QWORD > static inline + void PrepareQword ( QWORD & tQword, const CSphDictReader & tReader, int iDynamic, SphDocID_t iMinID, bool bWordDict ) //NOLINT + { + tQword.m_tDoc.Reset ( iDynamic ); + tQword.m_iMinID = iMinID; + tQword.m_tDoc.m_iDocID = iMinID; + + tQword.m_iDocs = tReader.m_iDocs; + tQword.m_iHits = tReader.m_iHits; + tQword.m_bHasHitlist = tReader.m_bHasHitlist; + + tQword.m_uHitPosition = 0; + tQword.m_iHitlistPos = 0; + + if ( bWordDict ) + tQword.m_rdDoclist.SeekTo ( tReader.m_iDoclistOffset, tReader.m_iHint ); + } + + template < typename QWORD > + static inline bool NextDocument ( QWORD & tQword, CSphIndex_VLN * pSourceIndex, CSphRowitem * pInline, ISphFilter * pFilter ) + { + for ( ;; ) + { + tQword.GetNextDoc ( pInline ); + if ( tQword.m_tDoc.m_iDocID ) + { + tQword.SeekHitlist ( tQword.m_iHitlistPos ); + if ( pFilter ) + { + CSphMatch tMatch; + tMatch.m_iDocID = tQword.m_tDoc.m_iDocID; + if ( pFilter->UsesAttrs() ) + { + if ( pInline ) + tMatch.m_pDynamic = pInline; + else + { + const DWORD * pInfo = pSourceIndex->FindDocinfo ( tQword.m_tDoc.m_iDocID ); + tMatch.m_pStatic = pInfo?DOCINFO2ATTRS ( pInfo ):NULL; + } + } + bool bResult = pFilter->Eval ( tMatch ); + tMatch.m_pDynamic = NULL; + if ( !bResult ) + { + while ( tQword.m_bHasHitlist && tQword.GetNextHit()!=EMPTY_HIT ); + continue; + } + } + return true; + } else + return false; + } + } + + template < typename QWORD > + inline void TransferData ( QWORD & tQword, SphWordID_t iWordID, BYTE * sWord, CSphIndex_VLN * pSourceIndex, CSphRowitem * pInline, ISphFilter * pFilter ) + { + CSphAggregateHit tHit; + tHit.m_iWordID = iWordID; + tHit.m_sKeyword = sWord; + tHit.m_dFieldMask.Unset(); + + while ( CSphMerger::NextDocument ( tQword, pSourceIndex, pInline, pFilter ) ) + { + if ( tQword.m_bHasHitlist ) + TransferHits ( tQword, pInline, tHit ); + else + { + // convert to aggregate if there is no hit-list + tHit.m_iDocID = tQword.m_tDoc.m_iDocID - m_pOutputIndex->m_pMin->m_iDocID; + tHit.m_dFieldMask = tQword.m_dFields; + tHit.SetAggrCount ( tQword.m_uMatchHits ); + m_pOutputIndex->cidxHit ( &tHit, pInline ); + } + } + } + + template < typename QWORD > + inline void TransferHits ( QWORD & tQword, CSphRowitem * pInline, CSphAggregateHit & tHit ) + { + assert ( tQword.m_bHasHitlist ); + tHit.m_iDocID = tQword.m_tDoc.m_iDocID - m_pOutputIndex->m_pMin->m_iDocID; + for ( Hitpos_t uHit = tQword.GetNextHit(); uHit!=EMPTY_HIT; uHit = tQword.GetNextHit() ) + { + tHit.m_iWordPos = uHit; + m_pOutputIndex->cidxHit ( &tHit, pInline ); + } + } + + template < typename QWORD > + static inline void ConfigureQword ( QWORD & tQword, CSphAutofile & tHits, CSphAutofile & tDocs, CSphIndex_VLN * pIndex ) + { + bool bInline = pIndex->m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE; + + tQword.m_iInlineAttrs = bInline ? pIndex->m_tSchema.GetAttrsCount() : 0; + tQword.m_pInlineFixup = bInline ? pIndex->m_pMin->m_pDynamic : NULL; + + tQword.m_rdHitlist.SetFile ( tHits ); + tQword.m_rdHitlist.GetByte(); + + tQword.m_rdDoclist.SetFile ( tDocs ); + tQword.m_rdDoclist.GetByte(); + } +}; + + +template < typename QWORDDST, typename QWORDSRC > +bool CSphIndex_VLN::MergeWords ( CSphIndex_VLN * pSrcIndex, ISphFilter * pFilter ) +{ + assert ( m_pDict->GetSettings().m_bWordDict==pSrcIndex->m_pDict->GetSettings().m_bWordDict ); + + // setup writers + m_wrDoclist.OpenFile ( GetIndexFileName("spd.tmp"), m_sLastError ); + m_wrHitlist.OpenFile ( GetIndexFileName("spp.tmp"), m_sLastError ); + + BYTE bDummy = 1; + m_wrDoclist.PutBytes ( &bDummy, 1 ); + m_wrHitlist.PutBytes ( &bDummy, 1 ); + + m_pDict->HitblockBegin(); + + CSphDictReader tDstReader; + CSphDictReader tSrcReader; + + const bool bWordDict = m_pDict->GetSettings().m_bWordDict; + + tDstReader.Setup ( GetIndexFileName("spi"), m_tWordlist.m_iCheckpointsPos, + m_tSettings.m_eHitless, m_sLastError, ( bWordDict ? m_pDict : NULL ) ); + tSrcReader.Setup ( pSrcIndex->GetIndexFileName("spi"), pSrcIndex->m_tWordlist.m_iCheckpointsPos, + pSrcIndex->m_tSettings.m_eHitless, m_sLastError, ( bWordDict ? m_pDict : NULL ) ); + + if ( !m_sLastError.IsEmpty() ) + return false; + + /// prepare for indexing + m_tLastHit.m_iDocID = 0; + m_tLastHit.m_iWordID = 0; + m_tLastHit.m_sKeyword = m_sLastKeyword; + m_tLastHit.m_iWordPos = EMPTY_HIT; + + const SphDocID_t iDstMinID = m_pMin->m_iDocID; + const SphDocID_t iSrcMinID = pSrcIndex->m_pMin->m_iDocID; + + // correct infinum might be already set during spa merging. + if ( !m_iMergeInfinum ) + m_pMin->m_iDocID = Min ( iDstMinID, iSrcMinID ); + else + m_pMin->m_iDocID = m_iMergeInfinum; + + m_tWordlist.m_dCheckpoints.Reset ( 0 ); + + const int iDstDynamic = m_tSchema.GetDynamicSize(); + const int iSrcDynamic = pSrcIndex->m_tSchema.GetDynamicSize(); + + /// setup qwords + + QWORDDST tDstQword ( false, false ); + QWORDSRC tSrcQword ( false, false ); + + CSphAutofile fSrcDocs, fSrcHits; + fSrcDocs.Open ( pSrcIndex->GetIndexFileName("spd"), SPH_O_READ, m_sLastError ); + fSrcHits.Open ( pSrcIndex->GetIndexFileName("spp"), SPH_O_READ, m_sLastError ); + + CSphAutofile fDstDocs, fDstHits; + fDstDocs.Open ( GetIndexFileName("spd"), SPH_O_READ, m_sLastError ); + fDstHits.Open ( GetIndexFileName("spp"), SPH_O_READ, m_sLastError ); + + if ( !m_sLastError.IsEmpty() ) + return false; + + CSphMerger::ConfigureQword ( tDstQword, fDstHits, fDstDocs, this ); + CSphMerger::ConfigureQword ( tSrcQword, fSrcHits, fSrcDocs, pSrcIndex ); + + int iDstInlineSize = m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ? m_tSchema.GetRowSize() : 0; + int iSrcInlineSize = pSrcIndex->m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ? pSrcIndex->m_tSchema.GetRowSize() : 0; + + CSphAutoArray dDstInline ( iDstInlineSize ); + CSphAutoArray dSrcInline ( iSrcInlineSize ); + + /// merge + + CSphMerger tMerge(this); + + bool bDstWord = tDstReader.Read(); + bool bSrcWord = tSrcReader.Read(); + + if ( m_pProgress ) + { + m_tProgress.m_ePhase = CSphIndexProgress::PHASE_MERGE; + m_pProgress ( &m_tProgress, false ); + } + + int iWords = 0; + int iHitlistsDiscarded = 0; + while ( bDstWord || bSrcWord ) + { + if ( iWords==1000 ) + { + m_tProgress.m_iWords += 1000; + iWords = 0; + m_pProgress ( &m_tProgress, false ); + } + + const int iCmp = tDstReader.CmpWord ( tSrcReader ); + + if ( !bSrcWord || ( bDstWord && iCmp<0 ) ) + { + // transfer documents and hits from destination + CSphMerger::PrepareQword ( tDstQword, tDstReader, iDstDynamic, iDstMinID, bWordDict ); + tMerge.TransferData ( tDstQword, tDstReader.m_iWordID, tDstReader.GetWord(), this, dDstInline, pFilter ); + iWords++; + bDstWord = tDstReader.Read(); + + } else if ( !bDstWord || ( bSrcWord && iCmp>0 ) ) + { + // transfer documents and hits from source + CSphMerger::PrepareQword ( tSrcQword, tSrcReader, iSrcDynamic, iSrcMinID, bWordDict ); + tMerge.TransferData ( tSrcQword, tSrcReader.m_iWordID, tSrcReader.GetWord(), pSrcIndex, dSrcInline, NULL ); + iWords++; + bSrcWord = tSrcReader.Read(); + + } else // merge documents and hits inside the word + { + assert ( iCmp==0 ); + + bool bHitless = !tDstReader.m_bHasHitlist; + if ( tDstReader.m_bHasHitlist!=tSrcReader.m_bHasHitlist ) + { + iHitlistsDiscarded++; + bHitless = true; + } + + CSphMerger::PrepareQword ( tDstQword, tDstReader, iDstDynamic, iDstMinID, bWordDict ); + CSphMerger::PrepareQword ( tSrcQword, tSrcReader, iSrcDynamic, iSrcMinID, bWordDict ); + + CSphAggregateHit tHit; + tHit.m_iWordID = tDstReader.m_iWordID; // !COMMIT m_sKeyword anyone? + tHit.m_sKeyword = tDstReader.GetWord(); + tHit.m_dFieldMask.Unset(); + + bool bDstDocs = CSphMerger::NextDocument ( tDstQword, this, dDstInline, pFilter ); + bool bSrcDocs = true; + + tSrcQword.GetNextDoc ( dSrcInline ); + tSrcQword.SeekHitlist ( tSrcQword.m_iHitlistPos ); + + while ( bDstDocs || bSrcDocs ) + { + if ( !bSrcDocs || ( bDstDocs && tDstQword.m_tDoc.m_iDocID < tSrcQword.m_tDoc.m_iDocID ) ) + { + // transfer hits from destination + if ( bHitless ) + { + while ( tDstQword.m_bHasHitlist && tDstQword.GetNextHit()!=EMPTY_HIT ); + + tHit.m_iDocID = tDstQword.m_tDoc.m_iDocID - m_pMin->m_iDocID; + tHit.m_dFieldMask = tDstQword.m_dFields; + tHit.SetAggrCount ( tDstQword.m_uMatchHits ); + cidxHit ( &tHit, dSrcInline ); + } else + tMerge.TransferHits ( tDstQword, dDstInline, tHit ); + bDstDocs = CSphMerger::NextDocument ( tDstQword, this, dDstInline, pFilter ); + + } else if ( !bDstDocs || ( bSrcDocs && tDstQword.m_tDoc.m_iDocID > tSrcQword.m_tDoc.m_iDocID ) ) + { + // transfer hits from source + if ( bHitless ) + { + while ( tSrcQword.m_bHasHitlist && tSrcQword.GetNextHit()!=EMPTY_HIT ); + + tHit.m_iDocID = tSrcQword.m_tDoc.m_iDocID - m_pMin->m_iDocID; + tHit.m_dFieldMask = tSrcQword.m_dFields; + tHit.SetAggrCount ( tSrcQword.m_uMatchHits ); + cidxHit ( &tHit, dSrcInline ); + } else + tMerge.TransferHits ( tSrcQword, dSrcInline, tHit ); + bSrcDocs = CSphMerger::NextDocument ( tSrcQword, pSrcIndex, dSrcInline, NULL ); + + } else + { + // merge hits inside the document + assert ( bDstDocs ); + assert ( bSrcDocs ); + assert ( tDstQword.m_tDoc.m_iDocID==tSrcQword.m_tDoc.m_iDocID ); + + tHit.m_iDocID = tDstQword.m_tDoc.m_iDocID - m_pMin->m_iDocID; + + if ( bHitless ) + { + while ( tDstQword.m_bHasHitlist && tDstQword.GetNextHit()!=EMPTY_HIT ); + while ( tSrcQword.m_bHasHitlist && tSrcQword.GetNextHit()!=EMPTY_HIT ); + + tHit.m_dFieldMask = tDstQword.m_dFields | tSrcQword.m_dFields; + tHit.SetAggrCount ( tDstQword.m_uMatchHits + tSrcQword.m_uMatchHits ); + cidxHit ( &tHit, dSrcInline ); + + } else + { + Hitpos_t uDstHit = tDstQword.GetNextHit(); + Hitpos_t uSrcHit = tSrcQword.GetNextHit(); + + while ( uDstHit!=EMPTY_HIT || uSrcHit!=EMPTY_HIT ) + { + if ( uSrcHit==EMPTY_HIT || ( uDstHit!=EMPTY_HIT && uDstHitm_tStats.m_iTotalDocuments; + m_tStats.m_iTotalBytes += pSrcIndex->m_tStats.m_iTotalBytes; + + m_tProgress.m_iWords += iWords; + m_pProgress ( &m_tProgress, false ); + + if ( iHitlistsDiscarded ) + m_sLastWarning.SetSprintf ( "discarded hitlists for %u words", iHitlistsDiscarded ); + + return true; +} + +bool CSphIndex_VLN::Merge ( CSphIndex * pSource, CSphVector & dFilters, bool bMergeKillLists ) +{ + assert ( pSource ); + + CSphIndex_VLN * pSrcIndex = dynamic_cast< CSphIndex_VLN * >( pSource ); + assert ( pSrcIndex ); + + CSphString sWarning; + if ( !Prealloc ( false, false, sWarning ) || !Preread() ) + return false; + if ( !pSrcIndex->Prealloc ( false, false, sWarning ) || !pSrcIndex->Preread() ) + { + m_sLastError.SetSprintf ( "source index preload failed: %s", pSrcIndex->GetLastError().cstr() ); + return false; + } + + const CSphSchema & tDstSchema = m_tSchema; + const CSphSchema & tSrcSchema = pSrcIndex->m_tSchema; + if ( !tDstSchema.CompareTo ( tSrcSchema, m_sLastError ) ) + return false; + + if ( m_tSettings.m_eHitless!=pSrcIndex->m_tSettings.m_eHitless ) + { + m_sLastError = "hitless settings must be the same on merged indices"; + return false; + } + + // FIXME! + if ( m_tSettings.m_eDocinfo!=pSrcIndex->m_tSettings.m_eDocinfo && !( m_bIsEmpty || pSrcIndex->m_bIsEmpty ) ) + { + m_sLastError.SetSprintf ( "docinfo storage on non-empty indexes must be the same (dst docinfo %d, empty %d, src docinfo %d, empty %d", + m_tSettings.m_eDocinfo, m_bIsEmpty, pSrcIndex->m_tSettings.m_eDocinfo, pSrcIndex->m_bIsEmpty ); + return false; + } + + if ( m_pDict->GetSettings().m_bWordDict!=pSrcIndex->m_pDict->GetSettings().m_bWordDict ) + { + m_sLastError.SetSprintf ( "dictionary types must be the same (dst dict=%s, src dict=%s )", + m_pDict->GetSettings().m_bWordDict ? "keywords" : "crc", + pSrcIndex->m_pDict->GetSettings().m_bWordDict ? "keywords" : "crc" ); + return false; + } + m_bWordDict = m_pDict->GetSettings().m_bWordDict; + m_bMerging = true; + + int iStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + + // create filters + ISphFilter * pFilter = CreateMergeFilters ( dFilters, m_tSchema, GetMVAPool() ); + DWORD nKillListSize = pSrcIndex->GetKillListSize (); + if ( nKillListSize ) + { + CSphFilterSettings tKillListFilter; + SphAttr_t * pKillList = pSrcIndex->GetKillList (); + + tKillListFilter.m_bExclude = true; + tKillListFilter.m_eType = SPH_FILTER_VALUES; + tKillListFilter.m_uMinValue = pKillList[0]; + tKillListFilter.m_uMaxValue = pKillList[nKillListSize -1]; + tKillListFilter.m_sAttrName = "@id"; + tKillListFilter.SetExternalValues ( pKillList, nKillListSize ); + + ISphFilter * pKillListFilter = + sphCreateFilter ( tKillListFilter, m_tSchema, GetMVAPool(), m_sLastError ); + pFilter = sphJoinFilters ( pFilter, pKillListFilter ); + } + + ///////////////////////////////////////// + // merging attributes (.spa, .spm, .sps) + ///////////////////////////////////////// + + CSphAutoreader tDstSPM, tSrcSPM, tDstSPS, tSrcSPS; + if ( !tDstSPM.Open ( GetIndexFileName("spm"), m_sLastError ) + || !tSrcSPM.Open ( pSrcIndex->GetIndexFileName("spm"), m_sLastError ) + || !tDstSPS.Open ( GetIndexFileName("sps"), m_sLastError ) + || !tSrcSPS.Open ( pSrcIndex->GetIndexFileName("sps"), m_sLastError ) ) + { + return false; + } + + CSphWriter tSPMWriter, tSPSWriter; + if ( !tSPMWriter.OpenFile ( GetIndexFileName("spm.tmp"), m_sLastError ) + || !tSPSWriter.OpenFile ( GetIndexFileName("sps.tmp"), m_sLastError ) ) + { + return false; + } + tSPSWriter.PutByte ( 0 ); // dummy byte, to reserve magic zero offset + + /// merging + CSphVector dMvaLocators; + CSphVector dStringLocators; + for ( int i=0; i dPhantomKiller; + + int iTotalDocuments = 0; + bool bNeedInfinum = true; + m_iMergeInfinum = 0; + + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN && pSrcIndex->m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN ) + { + CSphWriter wrRows; + if ( !wrRows.OpenFile ( GetIndexFileName("spa.tmp"), m_sLastError ) ) + return false; + + AttrIndexBuilder_c tMinMax ( m_tSchema ); + CSphVector dMinMaxBuffer ( tMinMax.GetExpectedSize ( + m_tStats.m_iTotalDocuments + pSrcIndex->GetStats().m_iTotalDocuments ) ); + tMinMax.Prepare ( dMinMaxBuffer.Begin(), dMinMaxBuffer.Begin() + dMinMaxBuffer.GetLength() ); + m_uMinMaxIndex = 0; + + DWORD * pSrcRow = pSrcIndex->m_pDocinfo.GetWritePtr(); // they *can* be null if the respective index is empty + DWORD * pDstRow = m_pDocinfo.GetWritePtr(); + + DWORD iSrcCount = 0; + DWORD iDstCount = 0; + + tDstMVA.Read ( tDstSPM ); + tSrcMVA.Read ( tSrcSPM ); + + CSphMatch tMatch; + while ( iSrcCount < pSrcIndex->m_uDocinfo || iDstCount < m_uDocinfo ) + { + SphDocID_t iDstDocID, iSrcDocID; + + if ( iDstCount < m_uDocinfo ) + { + iDstDocID = DOCINFO2ID ( pDstRow ); + if ( pFilter ) + { + tMatch.m_iDocID = iDstDocID; + tMatch.m_pStatic = reinterpret_cast ( DOCINFO2ATTRS ( pDstRow ) ); + tMatch.m_pDynamic = NULL; + if ( !pFilter->Eval ( tMatch ) ) + { + pDstRow += iStride; + iDstCount++; + continue; + } + } + } else + iDstDocID = 0; + + if ( iSrcCount < pSrcIndex->m_uDocinfo ) + iSrcDocID = DOCINFO2ID ( pSrcRow ); + else + iSrcDocID = 0; + + if ( ( iDstDocID && iDstDocID < iSrcDocID ) || ( iDstDocID && !iSrcDocID ) ) + { + while ( tDstMVA.m_iDocID && tDstMVA.m_iDocIDm_bIsEmpty ) + { + // one of the indexes has no documents; copy the .spa file from the other one + CSphString sSrc = !m_bIsEmpty ? GetIndexFileName("spa") : pSrcIndex->GetIndexFileName("spa"); + CSphString sDst = GetIndexFileName("spa.tmp"); + + if ( !CopyFile ( sSrc.cstr(), sDst.cstr(), m_sLastError ) ) + return false; + + } else + { + // storage is not extern; create dummy .spa file + CSphAutofile fdSpa ( GetIndexFileName("spa.tmp"), SPH_O_NEW, m_sLastError ); + fdSpa.Close(); + } + + // create phantom killlist filter + if ( dPhantomKiller.GetLength() ) + { + CSphFilterSettings tKLF; + tKLF.m_bExclude = true; + tKLF.m_eType = SPH_FILTER_VALUES; + tKLF.m_uMinValue = dPhantomKiller[0]; + tKLF.m_uMaxValue = dPhantomKiller.Last(); + tKLF.m_sAttrName = "@id"; + tKLF.SetExternalValues ( &dPhantomKiller[0], dPhantomKiller.GetLength() ); + ISphFilter * pSpaFilter = sphCreateFilter ( tKLF, m_tSchema, GetMVAPool(), m_sLastError ); + pFilter = sphJoinFilters ( pFilter, pSpaFilter ); + } + CSphScopedPtr pScopedFilter ( pFilter ); + + CSphAutofile fdTmpDict ( GetIndexFileName("spi.tmp8"), SPH_O_NEW, m_sLastError, true ); + CSphAutofile fdDict ( GetIndexFileName("spi.tmp"), SPH_O_NEW, m_sLastError ); + + if ( !m_sLastError.IsEmpty() || fdTmpDict.GetFD()<0 || fdDict.GetFD()<0 ) + return false; + + m_pDict->DictBegin ( fdTmpDict.GetFD(), fdDict.GetFD(), 8*1024*1024 ); // FIXME? is this magic dict block constant any good?.. + + // merge dictionaries, doclists and hitlists + if ( m_pDict->GetSettings().m_bWordDict ) + { + WITH_QWORD ( this, false, QwordDst, + WITH_QWORD ( pSrcIndex, false, QwordSrc, + { + if ( !MergeWords < QwordDst, QwordSrc > ( pSrcIndex, pFilter ) ) + return false; + } ) ); + } else + { + WITH_QWORD ( this, true, QwordDst, + WITH_QWORD ( pSrcIndex, true, QwordSrc, + { + if ( !MergeWords < QwordDst, QwordSrc > ( pSrcIndex, pFilter ) ) + return false; + } ) ); + } + + if ( iTotalDocuments ) + m_tStats.m_iTotalDocuments = iTotalDocuments; + // merge kill-lists + CSphAutofile fdKillList ( GetIndexFileName("spk.tmp"), SPH_O_NEW, m_sLastError ); + if ( fdKillList.GetFD () < 0 ) + return false; + + if ( bMergeKillLists ) + { + // merge spk + CSphVector dKillList; + dKillList.Reserve ( GetKillListSize() + pSrcIndex->GetKillListSize() ); + for ( int i = 0; i < pSrcIndex->GetKillListSize (); i++ ) + dKillList.Add ( pSrcIndex->GetKillList () [i] ); + + for ( int i = 0; i < GetKillListSize (); i++ ) + dKillList.Add ( GetKillList () [i] ); + + dKillList.Uniq (); + + m_iKillListSize = dKillList.GetLength (); + + if ( dKillList.GetLength() ) + { + if ( !sphWriteThrottled ( fdKillList.GetFD(), &dKillList[0], dKillList.GetLength()*sizeof(SphAttr_t), "kill_list", m_sLastError ) ) + return false; + } + } else + { + m_iKillListSize = 0; + } + + fdKillList.Close (); + + // finalize + CSphAggregateHit tFlush; + tFlush.m_iDocID = 0; + tFlush.m_iWordID = 0; + tFlush.m_sKeyword = (BYTE*)""; // tricky: assertion in cidxHit calls strcmp on this in case of empty index! + tFlush.m_iWordPos = EMPTY_HIT; + tFlush.m_dFieldMask.Unset(); + cidxHit ( &tFlush, NULL ); + cidxDone ( "sph.tmp", 8*1024*1024 ); // FIXME? is this magic dict block constant any good?.. + + // we're done + if ( m_pProgress ) + m_pProgress ( &m_tProgress, true ); + + return true; +} + + +///////////////////////////////////////////////////////////////////////////// +// THE SEARCHER +///////////////////////////////////////////////////////////////////////////// + +SphWordID_t CSphDictStar::GetWordID ( BYTE * pWord ) +{ + char sBuf [ 16+3*SPH_MAX_WORD_LEN ]; + assert ( strlen ( (const char*)pWord ) < 16+3*SPH_MAX_WORD_LEN ); + + m_pDict->ApplyStemmers ( pWord ); + + int iLen = strlen ( (const char*)pWord ); + assert ( iLen < 16+3*SPH_MAX_WORD_LEN - 1 ); + + memcpy ( sBuf, pWord, iLen+1 ); + + if ( iLen ) + { + if ( sBuf[iLen-1]=='*' ) + { + sBuf[iLen-1] = '\0'; + } else + { + sBuf[iLen] = MAGIC_WORD_TAIL; + sBuf[iLen+1] = '\0'; + } + } + + return m_pDict->GetWordID ( (BYTE*)sBuf ); +} + + +SphWordID_t CSphDictStar::GetWordIDNonStemmed ( BYTE * pWord ) +{ + return m_pDict->GetWordIDNonStemmed ( pWord ); +} + + +////////////////////////////////////////////////////////////////////////// + +CSphDictStarV8::CSphDictStarV8 ( CSphDict * pDict, bool bPrefixes, bool bInfixes ) + : CSphDictStar ( pDict ) + , m_bPrefixes ( bPrefixes ) + , m_bInfixes ( bInfixes ) +{ +} + + +SphWordID_t CSphDictStarV8::GetWordID ( BYTE * pWord ) +{ + char sBuf [ 16+3*SPH_MAX_WORD_LEN ]; + + int iLen = strlen ( (const char*)pWord ); + iLen = Min ( iLen, 16+3*SPH_MAX_WORD_LEN - 1 ); + + if ( !iLen ) + return 0; + + bool bHeadStar = ( pWord[0]=='*' ); + bool bTailStar = ( pWord[iLen-1]=='*' ) && ( iLen>1 ); + + if ( !bHeadStar && !bTailStar ) + { + m_pDict->ApplyStemmers ( pWord ); + if ( IsStopWord ( pWord ) ) + return 0; + } + + iLen = strlen ( (const char*)pWord ); + assert ( iLen < 16+3*SPH_MAX_WORD_LEN - 2 ); + + if ( !iLen || ( bHeadStar && iLen==1 ) ) + return 0; + + if ( m_bInfixes ) + { + //////////////////////////////////// + // infix or mixed infix+prefix mode + //////////////////////////////////// + + // handle head star + if ( bHeadStar ) + { + memcpy ( sBuf, pWord+1, iLen-- ); // chops star, copies trailing zero, updates iLen + } else + { + sBuf[0] = MAGIC_WORD_HEAD; + memcpy ( sBuf+1, pWord, ++iLen ); // copies everything incl trailing zero, updates iLen + } + + // handle tail star + if ( bTailStar ) + { + sBuf[--iLen] = '\0'; // got star, just chop it away + } else + { + sBuf[iLen] = MAGIC_WORD_TAIL; // no star, add tail marker + sBuf[++iLen] = '\0'; + } + + } else + { + //////////////////// + // prefix-only mode + //////////////////// + + assert ( m_bPrefixes ); + + // always ignore head star in prefix mode + if ( bHeadStar ) + { + pWord++; + iLen--; + } + + // handle tail star + if ( !bTailStar ) + { + // exact word search request, always (ie. both in infix/prefix mode) mangles to "\1word\1" in v.8+ + sBuf[0] = MAGIC_WORD_HEAD; + memcpy ( sBuf+1, pWord, iLen ); + sBuf[iLen+1] = MAGIC_WORD_TAIL; + sBuf[iLen+2] = '\0'; + iLen += 2; + + } else + { + // prefix search request, mangles to word itself (just chop away the star) + memcpy ( sBuf, pWord, iLen ); + sBuf[--iLen] = '\0'; + } + } + + // calc id for mangled word + return m_pDict->GetWordID ( (BYTE*)sBuf, iLen, !bHeadStar && !bTailStar ); +} + +////////////////////////////////////////////////////////////////////////// + +SphWordID_t CSphDictExact::GetWordID ( BYTE * pWord ) +{ + int iLen = strlen ( (const char*)pWord ); + iLen = Min ( iLen, 16+3*SPH_MAX_WORD_LEN - 1 ); + + if ( !iLen ) + return 0; + + if ( pWord[0]=='=' ) + pWord[0] = MAGIC_WORD_HEAD_NONSTEMMED; + + if ( pWord[0]<' ' ) + return m_pDict->GetWordIDNonStemmed ( pWord ); + + return m_pDict->GetWordID ( pWord ); +} + + +///////////////////////////////////////////////////////////////////////////// + +inline bool sphGroupMatch ( SphAttr_t iGroup, const SphAttr_t * pGroups, int iGroups ) +{ + if ( !pGroups ) return true; + const SphAttr_t * pA = pGroups; + const SphAttr_t * pB = pGroups+iGroups-1; + if ( iGroup==*pA || iGroup==*pB ) return true; + if ( iGroup<(*pA) || iGroup>(*pB) ) return false; + + while ( pB-pA>1 ) + { + const SphAttr_t * pM = pA + ((pB-pA)/2); + if ( iGroup==(*pM) ) + return true; + if ( iGroup<(*pM) ) + pB = pM; + else + pA = pM; + } + return false; +} + + +bool CSphIndex_VLN::EarlyReject ( CSphQueryContext * pCtx, CSphMatch & tMatch ) const +{ + // might be needed even when we do not have a filter + if ( pCtx->m_bLookupFilter ) + CopyDocinfo ( pCtx, tMatch, FindDocinfo ( tMatch.m_iDocID ) ); + pCtx->CalcFilter ( tMatch ); + + return pCtx->m_pFilter ? !pCtx->m_pFilter->Eval ( tMatch ) : false; +} + + +SphAttr_t * CSphIndex_VLN::GetKillList () const +{ + return m_pKillList.GetWritePtr (); +} + + +bool CSphIndex_VLN::HasDocid ( SphDocID_t uDocid ) const +{ + return FindDocinfo ( uDocid )!=NULL; +} + + +const DWORD * CSphIndex_VLN::FindDocinfo ( SphDocID_t uDocID ) const +{ + if ( m_uDocinfo<=0 ) + return NULL; + + assert ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN ); + assert ( !m_pDocinfo.IsEmpty() ); + assert ( m_tSchema.GetAttrsCount() ); + + int iStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + int iStart = 0; + int iEnd = m_uDocinfo-1; + + if ( m_pDocinfoHash.GetLength() ) + { + SphDocID_t uFirst = DOCINFO2ID ( &m_pDocinfo[0] ); + SphDocID_t uLast = DOCINFO2ID ( &m_pDocinfo[(m_uDocinfo-1)*iStride] ); + if ( uDocIDuLast ) + return NULL; + + DWORD uHash = (DWORD)( ( uDocID - uFirst ) >> m_pDocinfoHash[0] ); + if ( uHash > ( 1 << DOCINFO_HASH_BITS ) ) // possible in case of broken data, for instance + return NULL; + + iStart = m_pDocinfoHash [ uHash+1 ]; + iEnd = m_pDocinfoHash [ uHash+2 ] - 1; + } + + const DWORD * pFound = NULL; + if ( uDocID==DOCINFO2ID ( &m_pDocinfo [ iStart*iStride ] ) ) + { + pFound = &m_pDocinfo [ iStart*iStride ]; + + } else if ( uDocID==DOCINFO2ID ( &m_pDocinfo [ iEnd*iStride ] ) ) + { + pFound = &m_pDocinfo [ iEnd*iStride ]; + + } else + { + while ( iEnd-iStart>1 ) + { + // check if nothing found + if ( + uDocID < DOCINFO2ID ( &m_pDocinfo [ iStart*iStride ] ) || + uDocID > DOCINFO2ID ( &m_pDocinfo [ iEnd*iStride ] ) ) + break; + assert ( uDocID > DOCINFO2ID ( &m_pDocinfo [ iStart*iStride ] ) ); + assert ( uDocID < DOCINFO2ID ( &m_pDocinfo [ iEnd*iStride ] ) ); + + int iMid = iStart + (iEnd-iStart)/2; + if ( uDocID==DOCINFO2ID ( &m_pDocinfo [ iMid*iStride ] ) ) + { + pFound = &m_pDocinfo [ iMid*iStride ]; + break; + } + if ( uDocIDm_pOverrides ) + ARRAY_FOREACH ( i, (*pCtx->m_pOverrides) ) + { + const CSphAttrOverride & tOverride = (*pCtx->m_pOverrides)[i]; // shortcut + const CSphAttrOverride::IdValuePair_t * pEntry = tOverride.m_dValues.BinarySearch ( bind ( &CSphAttrOverride::IdValuePair_t::m_uDocID ), tMatch.m_iDocID ); + tMatch.SetAttr ( pCtx->m_dOverrideOut[i], pEntry + ? pEntry->m_uValue + : sphGetRowAttr ( tMatch.m_pStatic, pCtx->m_dOverrideIn[i] ) ); + } + + // dynamize if necessary + ARRAY_FOREACH ( j, m_dDynamize ) + tMatch.SetAttr ( m_dDynamize[j].m_tTo, tMatch.GetAttr ( m_dDynamize[j].m_tFrom ) ); +} + + +void CSphIndex_VLN::SetDynamize ( const CSphVector & dDynamize ) +{ + m_dDynamize = dDynamize; +} + + +static inline void CalcContextItems ( CSphMatch & tMatch, const CSphVector & dItems ) +{ + ARRAY_FOREACH ( i, dItems ) + { + const CSphQueryContext::CalcItem_t & tCalc = dItems[i]; + if ( tCalc.m_eType==SPH_ATTR_INTEGER ) + tMatch.SetAttr ( tCalc.m_tLoc, tCalc.m_pExpr->IntEval(tMatch) ); + else if ( tCalc.m_eType==SPH_ATTR_BIGINT ) + tMatch.SetAttr ( tCalc.m_tLoc, tCalc.m_pExpr->Int64Eval(tMatch) ); + else + tMatch.SetAttrFloat ( tCalc.m_tLoc, tCalc.m_pExpr->Eval(tMatch) ); + } +} + + +void CSphQueryContext::CalcFilter ( CSphMatch & tMatch ) const +{ + CalcContextItems ( tMatch, m_dCalcFilter ); +} + + +void CSphQueryContext::CalcSort ( CSphMatch & tMatch ) const +{ + CalcContextItems ( tMatch, m_dCalcSort ); +} + + +void CSphQueryContext::CalcFinal ( CSphMatch & tMatch ) const +{ + CalcContextItems ( tMatch, m_dCalcFinal ); +} + + +void CSphQueryContext::SetStringPool ( const BYTE * pStrings ) +{ + ARRAY_FOREACH ( i, m_dCalcFilter ) + m_dCalcFilter[i].m_pExpr->SetStringPool ( pStrings ); + + ARRAY_FOREACH ( i, m_dCalcSort ) + m_dCalcSort[i].m_pExpr->SetStringPool ( pStrings ); + + ARRAY_FOREACH ( i, m_dCalcFinal ) + m_dCalcFinal[i].m_pExpr->SetStringPool ( pStrings ); +} + + +void CSphQueryContext::SetMVAPool ( const DWORD * pMva ) +{ + ARRAY_FOREACH ( i, m_dCalcFilter ) + m_dCalcFilter[i].m_pExpr->SetMVAPool ( pMva ); + + ARRAY_FOREACH ( i, m_dCalcSort ) + m_dCalcSort[i].m_pExpr->SetMVAPool ( pMva ); + + ARRAY_FOREACH ( i, m_dCalcFinal ) + m_dCalcFinal[i].m_pExpr->SetMVAPool ( pMva ); + + if ( m_pFilter ) + m_pFilter->SetMVAStorage ( pMva ); + + if ( m_pWeightFilter ) + m_pWeightFilter->SetMVAStorage ( pMva ); +} + + +bool CSphIndex_VLN::MatchExtended ( CSphQueryContext * pCtx, const CSphQuery * pQuery, int iSorters, ISphMatchSorter ** ppSorters, ISphRanker * pRanker, int iTag ) const +{ + int iCutoff = pQuery->m_iCutoff; + if ( iCutoff<=0 ) + iCutoff = -1; + + // do searching + CSphMatch * pMatch = pRanker->GetMatchesBuffer(); + for ( ;; ) + { + int iMatches = pRanker->GetMatches(); + if ( iMatches<=0 ) + break; + + for ( int i=0; im_bLookupSort ) + CopyDocinfo ( pCtx, pMatch[i], FindDocinfo ( pMatch[i].m_iDocID ) ); + pCtx->CalcSort ( pMatch[i] ); + + if ( pCtx->m_pWeightFilter && !pCtx->m_pWeightFilter->Eval ( pMatch[i] ) ) + continue; + + pMatch[i].m_iTag = iTag; + + bool bRand = false; + bool bNewMatch = false; + for ( int iSorter=0; iSorterm_bRandomize ) + { + bRand = true; + pMatch[i].m_iWeight = ( sphRand() & 0xffff ); + + if ( pCtx->m_pWeightFilter && !pCtx->m_pWeightFilter->Eval ( pMatch[i] ) ) + break; + } + bNewMatch |= ppSorters[iSorter]->Push ( pMatch[i] ); + } + + if ( bNewMatch ) + if ( --iCutoff==0 ) + break; + } + + if ( iCutoff==0 ) + break; + } + return true; +} + +////////////////////////////////////////////////////////////////////////// + +bool CSphIndex_VLN::MultiScan ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const +{ + assert ( pQuery->m_sQuery.IsEmpty() ); + assert ( iTag>=0 ); + + // check if index is ready + if ( !m_pPreread || !*m_pPreread ) + { + pResult->m_sError = "index not preread"; + return false; + } + + // check if index supports scans + if ( m_tSettings.m_eDocinfo!=SPH_DOCINFO_EXTERN || !m_tSchema.GetAttrsCount() ) + { + pResult->m_sError = "fullscan requires extern docinfo"; + return false; + } + + // check if index has data + if ( m_bIsEmpty || m_uDocinfo<=0 || m_pDocinfo.IsEmpty() ) + return true; + + // start counting + int64_t tmQueryStart = sphMicroTimer(); + + // select the sorter with max schema + int iMaxSchemaSize = -1; + int iMaxSchemaIndex = -1; + for ( int i=0; iGetSchema().GetRowSize() > iMaxSchemaSize ) + { + iMaxSchemaSize = ppSorters[i]->GetSchema().GetRowSize(); + iMaxSchemaIndex = i; + } + + // setup calculations and result schema + CSphQueryContext tCtx; + if ( !tCtx.SetupCalc ( pResult, ppSorters[iMaxSchemaIndex]->GetSchema(), m_tSchema, GetMVAPool() ) ) + return false; + + // set string pool for string on_sort expression fix up + tCtx.SetStringPool ( m_pStrings.GetWritePtr() ); + + // setup filters + if ( !tCtx.CreateFilters ( true, &pQuery->m_dFilters, pResult->m_tSchema, GetMVAPool(), pResult->m_sError ) ) + return false; + if ( !tCtx.CreateFilters ( true, pExtraFilters, pResult->m_tSchema, GetMVAPool(), pResult->m_sError ) ) + return false; + + // check if we can early reject the whole index + if ( tCtx.m_pFilter && m_uDocinfoIndex ) + { + DWORD uStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + DWORD * pMinEntry = const_cast ( &m_pDocinfoIndex [ 2*m_uDocinfoIndex*uStride ] ); + DWORD * pMaxEntry = pMinEntry + uStride; + + if ( !tCtx.m_pFilter->EvalBlock ( pMinEntry, pMaxEntry ) ) + { + pResult->m_iQueryTime += (int)( ( sphMicroTimer()-tmQueryStart )/1000 ); + return true; + } + } + + // setup lookup + tCtx.m_bLookupFilter = false; + tCtx.m_bLookupSort = true; + + // setup sorters vs. MVA + for ( int i=0; iSetMVAPool ( m_pMva.GetWritePtr() ); + (ppSorters[i])->SetStringPool ( m_pStrings.GetWritePtr() ); + } + + // setup overrides + if ( !tCtx.SetupOverrides ( pQuery, pResult, m_tSchema ) ) + return false; + + // do scan + bool bRandomize = ppSorters[0]->m_bRandomize; + int iCutoff = pQuery->m_iCutoff; + if ( iCutoff<=0 ) + iCutoff = -1; + + CSphMatch tMatch; + tMatch.Reset ( pResult->m_tSchema.GetDynamicSize() ); + tMatch.m_iWeight = pQuery->GetIndexWeight ( m_sIndexName.cstr() ); + + DWORD uStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + DWORD uStart = pQuery->m_bReverseScan ? ( m_uDocinfoIndex-1 ) : 0; + int iStep = pQuery->m_bReverseScan ? -1 : 1; + int iMyTag = tCtx.m_dCalcFinal.GetLength() ? -1 : iTag; + for ( DWORD uIndexEntry=uStart; uIndexEntryEvalBlock ( pMin, pMax ) ) + continue; + + /////////////////////// + // row-level filtering + /////////////////////// + + const DWORD * pBlockStart = &m_pDocinfo [ uStride*uIndexEntry*DOCINFO_INDEX_FREQ ]; + const DWORD * pBlockEnd = &m_pDocinfo [ uStride*( Min ( (uIndexEntry+1)*DOCINFO_INDEX_FREQ, m_uDocinfo ) - 1 ) ]; + + for ( const DWORD * pDocinfo=pBlockStart; pDocinfo<=pBlockEnd; pDocinfo+=uStride ) + { + tMatch.m_iDocID = DOCINFO2ID ( pDocinfo ); + CopyDocinfo ( &tCtx, tMatch, pDocinfo ); + + // early filter only (no late filters in full-scan because of no @weight) + tCtx.CalcFilter ( tMatch ); + if ( tCtx.m_pFilter && !tCtx.m_pFilter->Eval ( tMatch ) ) + continue; + + // submit match to sorters + tCtx.CalcSort ( tMatch ); + if ( bRandomize ) + tMatch.m_iWeight = ( sphRand() & 0xffff ); + + tMatch.m_iTag = iMyTag; + + bool bNewMatch = false; + for ( int iSorter=0; iSorterPush ( tMatch ); + + // handle cutoff + if ( bNewMatch ) + if ( --iCutoff==0 ) + { + uIndexEntry = m_uDocinfoIndex; // outer break + break; + } + } + if ( iCutoff==0 ) + break; + } + + // do final expression calculations + if ( tCtx.m_dCalcFinal.GetLength() ) + for ( int iSorter=0; iSorterGetLength (); + if ( !iCount ) + continue; + + CSphMatch * const pHead = pTop->First(); + CSphMatch * const pTail = pHead + iCount; + for ( CSphMatch * pCur=pHead; pCurm_iTag<0 ) + { + tCtx.CalcFinal ( *pCur ); + pCur->m_iTag = iTag; + } + } + } + + // done + pResult->m_pMva = m_pMva.GetWritePtr(); + pResult->m_pStrings = m_pStrings.GetWritePtr(); + pResult->m_iQueryTime += (int)( ( sphMicroTimer()-tmQueryStart )/1000 ); + return true; +} + +////////////////////////////////////////////////////////////////////////////// + +ISphQword * DiskIndexQwordSetup_c::QwordSpawn ( const XQKeyword_t & tWord ) const +{ + WITH_QWORD ( m_pIndex, false, Qword, return new Qword ( tWord.m_bExpanded, tWord.m_bExcluded ) ); + return NULL; +} + + +bool DiskIndexQwordSetup_c::QwordSetup ( ISphQword * pWord ) const +{ + WITH_QWORD ( m_pIndex, false, Qword, return Setup ( pWord ) ); + return false; +} + + +template < class Qword > +bool DiskIndexQwordSetup_c::Setup ( ISphQword * pWord ) const +{ + Qword * pMyWord = dynamic_cast ( pWord ); + + if ( !pMyWord ) + return false; + + Qword & tWord = *pMyWord; + + // setup attrs + tWord.m_tDoc.Reset ( m_iDynamicRowitems ); + tWord.m_iMinID = m_tMin.m_iDocID; + tWord.m_tDoc.m_iDocID = m_tMin.m_iDocID; + + if ( m_eDocinfo==SPH_DOCINFO_INLINE ) + { + tWord.m_iInlineAttrs = m_iInlineRowitems; + tWord.m_pInlineFixup = m_tMin.m_pDynamic; + } else + { + tWord.m_iInlineAttrs = 0; + tWord.m_pInlineFixup = NULL; + } + + // setup stats + tWord.m_iDocs = 0; + tWord.m_iHits = 0; + + CSphIndex_VLN * pIndex = (CSphIndex_VLN *)m_pIndex; + + // binary search through checkpoints for a one whose range matches word ID + assert ( pIndex->m_pPreread && *pIndex->m_pPreread ); + assert ( !pIndex->m_bPreloadWordlist || !pIndex->m_tWordlist.m_pBuf.IsEmpty() ); + + // empty index? + if ( !pIndex->m_tWordlist.m_dCheckpoints.GetLength() ) + return false; + + const char * sWord = tWord.m_sDictWord.cstr(); + const bool bWordDict = pIndex->m_pDict->GetSettings().m_bWordDict; + int iWordLen = sWord ? strlen ( sWord ) : 0; + if ( pIndex->m_bEnableStar && bWordDict && tWord.m_sWord.Ends("*") ) + iWordLen = Max ( iWordLen-1, 0 ); + + // leading special symbols trimming + if ( tWord.m_sDictWord.Begins("*") ) + { + sWord++; + iWordLen = Max ( iWordLen-1, 0 ); + } + + const CSphWordlistCheckpoint * pCheckpoint = pIndex->m_tWordlist.FindCheckpoint ( sWord, iWordLen, tWord.m_iWordID, false ); + if ( !pCheckpoint ) + return false; + + // decode wordlist chunk + const BYTE * pBuf = pIndex->m_tWordlist.AcquireDict ( pCheckpoint, m_tWordlist.GetFD(), m_pDictBuf ); + assert ( pBuf ); + + WordDictInfo_t tResWord; + WordReaderContext_t tReaderCtx; + + const bool bWordFound = bWordDict + ? pIndex->m_tWordlist.GetWord ( pBuf, sWord, iWordLen, tResWord, false, tReaderCtx )!=NULL + : pIndex->m_tWordlist.GetWord ( pBuf, tWord.m_iWordID, tResWord ); + + if ( bWordFound ) + { + const ESphHitless eMode = pIndex->m_tSettings.m_eHitless; + tWord.m_iDocs = eMode==SPH_HITLESS_SOME ? ( tResWord.m_iDocs & 0x7FFFFFFF ) : tResWord.m_iDocs; + tWord.m_iHits = tResWord.m_iHits; + tWord.m_bHasHitlist = + ( eMode==SPH_HITLESS_NONE ) || + ( eMode==SPH_HITLESS_SOME && !( tResWord.m_iDocs & 0x80000000 ) ); + + if ( m_bSetupReaders ) + { + tWord.m_rdDoclist.SetBuffers ( g_iReadBuffer, g_iReadUnhinted ); + tWord.m_rdDoclist.SetFile ( m_tDoclist ); + tWord.m_rdDoclist.SeekTo ( tResWord.m_uOff, tResWord.m_iDoclistHint ); + + tWord.m_rdHitlist.SetBuffers ( g_iReadBuffer, g_iReadUnhinted ); + tWord.m_rdHitlist.SetFile ( m_tHitlist ); + } + } + + return bWordFound; +} + +////////////////////////////////////////////////////////////////////////////// + +bool CSphIndex_VLN::Lock () +{ + CSphString sName = GetIndexFileName("spl"); + sphLogDebug ( "Locking the index via file %s", sName.cstr() ); + + if ( m_iLockFD<0 ) + { + m_iLockFD = ::open ( sName.cstr(), SPH_O_NEW, 0644 ); + if ( m_iLockFD<0 ) + { + m_sLastError.SetSprintf ( "failed to open %s: %s", sName.cstr(), strerror(errno) ); + sphLogDebug ( "failed to open %s: %s", sName.cstr(), strerror(errno) ); + return false; + } + } + + if ( !sphLockEx ( m_iLockFD, false ) ) + { + m_sLastError.SetSprintf ( "failed to lock %s: %s", sName.cstr(), strerror(errno) ); + ::close ( m_iLockFD ); + m_iLockFD = -1; + return false; + } + sphLogDebug ( "lock %s success", sName.cstr() ); + return true; +} + + +void CSphIndex_VLN::Unlock() +{ + CSphString sName = GetIndexFileName("spl"); + sphLogDebug ( "Unlocking the index (lock %s)", sName.cstr() ); + if ( m_iLockFD>=0 ) + { + sphLogDebug ( "File ID ok, closing lock FD %d, unlinking %s", m_iLockFD, sName.cstr() ); + ::close ( m_iLockFD ); + ::unlink ( sName.cstr() ); + m_iLockFD = -1; + } +} + + +bool CSphIndex_VLN::Mlock () +{ + bool bRes = true; + bRes &= m_pDocinfo.Mlock ( "docinfo", m_sLastError ); + + if ( m_bPreloadWordlist ) + bRes &= m_tWordlist.m_pBuf.Mlock ( "wordlist", m_sLastError ); + + bRes &= m_pMva.Mlock ( "mva", m_sLastError ); + bRes &= m_pStrings.Mlock ( "strings", m_sLastError ); + return bRes; +} + + +void CSphIndex_VLN::Dealloc () +{ + if ( !m_bPreallocated ) + return; + + m_tDoclistFile.Close (); + m_tHitlistFile.Close (); + m_pDocinfo.Reset (); + m_pDocinfoHash.Reset (); + m_pMva.Reset (); + m_pStrings.Reset (); + m_pKillList.Reset (); + m_tWordlist.Reset (); + + m_uDocinfo = 0; + m_uMinMaxIndex = 0; + m_tSettings.m_eDocinfo = SPH_DOCINFO_NONE; + + m_bPreallocated = false; + SafeDelete ( m_pTokenizer ); + SafeDelete ( m_pDict ); + + if ( m_iIndexTag>=0 && g_pMvaArena ) + g_MvaArena.TaggedFreeTag ( m_iIndexTag ); + m_iIndexTag = -1; + + m_pPreread = NULL; + m_pAttrsStatus = NULL; + +#ifndef NDEBUG + m_dShared.Reset (); +#endif +} + + +static void StripPath ( CSphString & sPath ) +{ + if ( sPath.IsEmpty() ) + return; + + const char * s = sPath.cstr(); + if ( *s!='/' ) + return; + + const char * sLastSlash = s; + for ( ; *s; s++ ) + if ( *s=='/' ) + sLastSlash = s; + + int iPos = (int)( sLastSlash - sPath.cstr() + 1 ); + int iLen = (int)( s - sPath.cstr() ); + sPath = sPath.SubString ( iPos, iLen - iPos ); +} + + +bool CSphIndex_VLN::LoadHeader ( const char * sHeaderName, bool bStripPath, CSphString & sWarning ) +{ + const int MAX_HEADER_SIZE = 32768; + CSphAutoArray dCacheInfo ( MAX_HEADER_SIZE ); + + CSphAutoreader rdInfo ( dCacheInfo, MAX_HEADER_SIZE ); // to avoid mallocs + if ( !rdInfo.Open ( sHeaderName, m_sLastError ) ) + return false; + + // version + DWORD uHeader = rdInfo.GetDword (); + if ( uHeader!=INDEX_MAGIC_HEADER ) + { + m_sLastError.SetSprintf ( "%s is invalid header file (too old index version?)", sHeaderName ); + return false; + } + + m_uVersion = rdInfo.GetDword(); + if ( m_uVersion==0 || m_uVersion>INDEX_FORMAT_VERSION ) + { + m_sLastError.SetSprintf ( "%s is v.%d, binary is v.%d", sHeaderName, m_uVersion, INDEX_FORMAT_VERSION ); + return false; + } + + // bits + m_bUse64 = false; + if ( m_uVersion>=2 ) + m_bUse64 = ( rdInfo.GetDword ()!=0 ); + + if ( m_bUse64!=USE_64BIT ) + { +#if USE_64BIT + // TODO: may be do this param conditional and push it into the config? + m_bId32to64 = true; +#else + m_sLastError.SetSprintf ( "'%s' is id%d, and this binary is id%d", + GetIndexFileName("sph").cstr(), + m_bUse64 ? 64 : 32, USE_64BIT ? 64 : 32 ); + return false; +#endif + } + + // docinfo + m_tSettings.m_eDocinfo = (ESphDocinfo) rdInfo.GetDword(); + + // schema + m_tSchema.Reset (); + + m_tSchema.m_dFields.Resize ( rdInfo.GetDword() ); + ARRAY_FOREACH ( i, m_tSchema.m_dFields ) + ReadSchemaColumn ( rdInfo, m_tSchema.m_dFields[i] ); + + int iNumAttrs = rdInfo.GetDword(); + bool bDynamic = ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ); // inline attributes need be dynamic in searching time too + + for ( int i=0; iReset ( m_tSchema.GetRowSize() ); + if ( m_uVersion>=2 ) + m_pMin->m_iDocID = (SphDocID_t) rdInfo.GetOffset (); // v2+; losing high bits when !USE_64 is intentional, check is performed on bUse64 above + else + m_pMin->m_iDocID = rdInfo.GetDword(); // v1 + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + rdInfo.GetBytes ( m_pMin->m_pDynamic, sizeof(CSphRowitem)*m_tSchema.GetRowSize() ); + + // wordlist checkpoints + m_tWordlist.m_iCheckpointsPos = rdInfo.GetOffset(); + m_tWordlist.m_dCheckpoints.Reset ( rdInfo.GetDword() ); + + // index stats + m_tStats.m_iTotalDocuments = rdInfo.GetDword (); + m_tStats.m_iTotalBytes = rdInfo.GetOffset (); + + LoadSettings ( rdInfo ); + + if ( m_uVersion>=9 ) + { + // tokenizer stuff + CSphTokenizerSettings tSettings; + LoadTokenizerSettings ( rdInfo, tSettings, m_uVersion, sWarning ); + + if ( bStripPath ) + StripPath ( tSettings.m_sSynonymsFile ); + + ISphTokenizer * pTokenizer = ISphTokenizer::Create ( tSettings, m_sLastError ); + if ( !pTokenizer ) + return false; + + // dictionary stuff + CSphDictSettings tDictSettings; + LoadDictionarySettings ( rdInfo, tDictSettings, m_uVersion, sWarning ); + if ( m_bId32to64 ) + tDictSettings.m_bCrc32 = true; + + if ( bStripPath ) + { + StripPath ( tDictSettings.m_sStopwords ); + StripPath ( tDictSettings.m_sWordforms ); + } + + CSphDict * pDict = tDictSettings.m_bWordDict + ? sphCreateDictionaryKeywords ( tDictSettings, pTokenizer, m_sLastError, m_sIndexName.cstr() ) + : sphCreateDictionaryCRC ( tDictSettings, pTokenizer, m_sLastError, m_sIndexName.cstr() ); + + if ( !pDict ) + return false; + + SetDictionary ( pDict ); + + ISphTokenizer * pTokenFilter = ISphTokenizer::CreateTokenFilter ( pTokenizer, pDict->GetMultiWordforms () ); + SetTokenizer ( pTokenFilter ? pTokenFilter : pTokenizer ); + } else + { + if ( m_bId32to64 ) + { + m_sLastError.SetSprintf ( "too old id32 index; can not be loaded by this id64 binary" ); + return false; + } + } + + if ( m_uVersion>=10 ) + m_iKillListSize = rdInfo.GetDword (); + + if ( m_uVersion>=20 ) + m_uMinMaxIndex = rdInfo.GetDword (); + + if ( rdInfo.GetErrorFlag() ) + m_sLastError.SetSprintf ( "%s: failed to parse header (unexpected eof)", sHeaderName ); + + return !rdInfo.GetErrorFlag(); +} + + +void CSphIndex_VLN::DebugDumpHeader ( FILE * fp, const char * sHeaderName, bool bConfig ) +{ + CSphString sWarning; + if ( !LoadHeader ( sHeaderName, false, sWarning ) ) + { + fprintf ( fp, "FATAL: failed to load header: %s.\n", m_sLastError.cstr() ); + return; + } + + if ( !sWarning.IsEmpty () ) + fprintf ( fp, "WARNING: %s\n", sWarning.cstr () ); + + /////////////////////////////////////////////// + // print header in index config section format + /////////////////////////////////////////////// + + if ( bConfig ) + { + fprintf ( fp, "\nsource $dump\n{\n" ); + + fprintf ( fp, "\tsql_query = SELECT id \\\n" ); + ARRAY_FOREACH ( i, m_tSchema.m_dFields ) + fprintf ( fp, "\t, %s \\\n", m_tSchema.m_dFields[i].m_sName.cstr() ); + for ( int i=0; iGetSettings (); + fprintf ( fp, "\tcharset_type = %s\n", tSettings.m_iType==TOKENIZER_SBCS ? "sbcs" : "utf-8" ); + fprintf ( fp, "\tcharset_table = %s\n", tSettings.m_sCaseFolding.cstr () ); + if ( tSettings.m_iMinWordLen>1 ) + fprintf ( fp, "\tmin_word_len = %d\n", tSettings.m_iMinWordLen ); + if ( tSettings.m_iNgramLen && !tSettings.m_sNgramChars.IsEmpty() ) + fprintf ( fp, "\tngram_len = %d\nngram_chars = %s\n", + tSettings.m_iNgramLen, tSettings.m_sNgramChars.cstr () ); + if ( !tSettings.m_sSynonymsFile.IsEmpty() ) + fprintf ( fp, "\texceptions = %s\n", tSettings.m_sSynonymsFile.cstr () ); + if ( !tSettings.m_sBoundary.IsEmpty() ) + fprintf ( fp, "\tphrase_boundary = %s\n", tSettings.m_sBoundary.cstr () ); + if ( !tSettings.m_sIgnoreChars.IsEmpty() ) + fprintf ( fp, "\tignore_chars = %s\n", tSettings.m_sIgnoreChars.cstr () ); + if ( !tSettings.m_sBlendChars.IsEmpty() ) + fprintf ( fp, "\tblend_chars = %s\n", tSettings.m_sBlendChars.cstr () ); + if ( !tSettings.m_sBlendMode.IsEmpty() ) + fprintf ( fp, "\tblend_mode = %s\n", tSettings.m_sBlendMode.cstr () ); + } + + if ( m_pDict ) + { + const CSphDictSettings & tSettings = m_pDict->GetSettings (); + if ( tSettings.m_bWordDict ) + fprintf ( fp, "\tdict = keywords\n" ); + if ( !tSettings.m_sMorphology.IsEmpty() ) + fprintf ( fp, "\tmorphology = %s\n", tSettings.m_sMorphology.cstr () ); + if ( !tSettings.m_sStopwords.IsEmpty() ) + fprintf ( fp, "\tstopwords = %s\n", tSettings.m_sStopwords.cstr () ); + if ( !tSettings.m_sWordforms.IsEmpty() ) + fprintf ( fp, "\twordforms: %s\n", tSettings.m_sWordforms.cstr () ); + if ( tSettings.m_iMinStemmingLen>1 ) + fprintf ( fp, "\tmin_stemming_len = %d\n", tSettings.m_iMinStemmingLen ); + } + + fprintf ( fp, "}\n" ); + return; + } + + /////////////////////////////////////////////// + // print header and stats in "readable" format + /////////////////////////////////////////////// + + fprintf ( fp, "version: %d\n", m_uVersion ); + fprintf ( fp, "idbits: %d\n", m_bUse64 ? 64 : 32 ); + fprintf ( fp, "docinfo: " ); + switch ( m_tSettings.m_eDocinfo ) + { + case SPH_DOCINFO_NONE: fprintf ( fp, "none\n" ); break; + case SPH_DOCINFO_INLINE: fprintf ( fp, "inline\n" ); break; + case SPH_DOCINFO_EXTERN: fprintf ( fp, "extern\n" ); break; + default: fprintf ( fp, "unknown (value=%d)\n", m_tSettings.m_eDocinfo ); break; + } + + fprintf ( fp, "fields: %d\n", m_tSchema.m_dFields.GetLength() ); + ARRAY_FOREACH ( i, m_tSchema.m_dFields ) + fprintf ( fp, " field %d: %s\n", i, m_tSchema.m_dFields[i].m_sName.cstr() ); + + fprintf ( fp, "attrs: %d\n", m_tSchema.GetAttrsCount() ); + for ( int i=0; iGetSettings (); + fprintf ( fp, "tokenizer-type: %d\n", tSettings.m_iType ); + fprintf ( fp, "tokenizer-case-folding: %s\n", tSettings.m_sCaseFolding.cstr () ); + fprintf ( fp, "tokenizer-min-word-len: %d\n", tSettings.m_iMinWordLen ); + fprintf ( fp, "tokenizer-ngram-chars: %s\n", tSettings.m_sNgramChars.cstr () ); + fprintf ( fp, "tokenizer-ngram-len: %d\n", tSettings.m_iNgramLen ); + fprintf ( fp, "tokenizer-exceptions: %s\n", tSettings.m_sSynonymsFile.cstr () ); + fprintf ( fp, "tokenizer-phrase-boundary: %s\n", tSettings.m_sBoundary.cstr () ); + fprintf ( fp, "tokenizer-ignore-chars: %s\n", tSettings.m_sIgnoreChars.cstr () ); + fprintf ( fp, "tokenizer-blend-chars: %s\n", tSettings.m_sBlendChars.cstr () ); + fprintf ( fp, "tokenizer-blend-mode: %s\n", tSettings.m_sBlendMode.cstr () ); + } + + if ( m_pDict ) + { + const CSphDictSettings & tSettings = m_pDict->GetSettings (); + fprintf ( fp, "dictionary-morphology: %s\n", tSettings.m_sMorphology.cstr () ); + fprintf ( fp, "dictionary-stopwords: %s\n", tSettings.m_sStopwords.cstr () ); + fprintf ( fp, "dictionary-wordforms: %s\n", tSettings.m_sWordforms.cstr () ); + fprintf ( fp, "min-stemming-len: %d\n", tSettings.m_iMinStemmingLen ); + } + + fprintf ( fp, "killlist-size: %d\n", m_iKillListSize ); +} + + +void CSphIndex_VLN::DebugDumpDocids ( FILE * fp ) +{ + if ( m_tSettings.m_eDocinfo!=SPH_DOCINFO_EXTERN ) + { + fprintf ( fp, "FATAL: docids dump only supported for docinfo=extern\n" ); + return; + } + + const int iRowStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + + const DWORD uNumMinMaxRow = ( m_uVersion>=20 ) ? ( 2*(1+m_uDocinfoIndex)*iRowStride ) : 0; + const int64_t uNumRows = (m_pDocinfo.GetNumEntries()-uNumMinMaxRow) / iRowStride; // all 32bit, as we don't expect 2 billion documents per single physical index + + const uint64_t uDocinfoSize = iRowStride*size_t(m_uDocinfo)*sizeof(DWORD); + const uint64_t uMinmaxSize = uNumMinMaxRow*sizeof(CSphRowitem); + + fprintf ( fp, "docinfo-bytes: docinfo="UINT64_FMT", min-max="UINT64_FMT", total="UINT64_FMT"\n" + , uDocinfoSize, uMinmaxSize, (uint64_t)m_pDocinfo.GetLength() ); + fprintf ( fp, "docinfo-stride: %d\n", (int)(iRowStride*sizeof(DWORD)) ); + fprintf ( fp, "docinfo-rows: "INT64_FMT"\n", uNumRows ); + + if ( !m_pDocinfo.GetNumEntries() ) + return; + + DWORD * pDocinfo = m_pDocinfo.GetWritePtr(); + for ( DWORD uRow=0; uRow ( fp, sKeyword, bID ) ); +} + + +template < class Qword > +void CSphIndex_VLN::DumpHitlist ( FILE * fp, const char * sKeyword, bool bID ) +{ + // get keyword id + SphWordID_t uWordID = 0; + BYTE * sTok = NULL; + if ( !bID ) + { + CSphString sBuf ( sKeyword ); + + m_pTokenizer->SetBuffer ( (BYTE*)sBuf.cstr(), strlen ( sBuf.cstr() ) ); + sTok = m_pTokenizer->GetToken(); + + if ( !sTok ) + sphDie ( "keyword=%s, no token (too short?)", sKeyword ); + + uWordID = m_pDict->GetWordID ( sTok ); + if ( !uWordID ) + sphDie ( "keyword=%s, tok=%s, no wordid (stopped?)", sKeyword, sTok ); + + fprintf ( fp, "keyword=%s, tok=%s, wordid="UINT64_FMT"\n", sKeyword, sTok, uint64_t(uWordID) ); + + } else + { + uWordID = (SphWordID_t) strtoull ( sKeyword, NULL, 10 ); + if ( !uWordID ) + sphDie ( "failed to convert keyword=%s to id (must be integer)", sKeyword ); + + fprintf ( fp, "wordid="UINT64_FMT"\n", uint64_t(uWordID) ); + } + + // open files + CSphAutofile tDoclist, tHitlist, tWordlist; + if ( tDoclist.Open ( GetIndexFileName("spd"), SPH_O_READ, m_sLastError ) < 0 ) + sphDie ( "failed to open doclist: %s", m_sLastError.cstr() ); + + if ( tHitlist.Open ( GetIndexFileName ( m_uVersion>=3 ? "spp" : "spd" ), SPH_O_READ, m_sLastError ) < 0 ) + sphDie ( "failed to open hitlist: %s", m_sLastError.cstr() ); + + if ( tWordlist.Open ( GetIndexFileName ( "spi" ), SPH_O_READ, m_sLastError ) < 0 ) + sphDie ( "failed to open wordlist: %s", m_sLastError.cstr() ); + + // aim + DiskIndexQwordSetup_c tTermSetup ( tDoclist, tHitlist, tWordlist, m_bPreloadWordlist ? 0 : m_tWordlist.m_iMaxChunk ); + tTermSetup.m_pDict = m_pDict; + tTermSetup.m_pIndex = this; + tTermSetup.m_eDocinfo = m_tSettings.m_eDocinfo; + tTermSetup.m_tMin.Clone ( *m_pMin, m_tSchema.GetRowSize() ); + tTermSetup.m_bSetupReaders = true; + + Qword tKeyword ( false, false ); + tKeyword.m_tDoc.m_iDocID = m_pMin->m_iDocID; + tKeyword.m_iWordID = uWordID; + tKeyword.m_sWord = sKeyword; + tKeyword.m_sDictWord = (const char *)sTok; + if ( !tTermSetup.QwordSetup ( &tKeyword ) ) + sphDie ( "failed to setup keyword" ); + + int iSize = m_tSchema.GetRowSize(); + CSphVector dAttrs ( iSize ); + + // press play on tape + for ( ;; ) + { + tKeyword.GetNextDoc ( iSize ? &dAttrs[0] : NULL ); + if ( !tKeyword.m_tDoc.m_iDocID ) + break; + tKeyword.SeekHitlist ( tKeyword.m_iHitlistPos ); + + int iHits = 0; + if ( tKeyword.m_bHasHitlist ) + for ( Hitpos_t uHit = tKeyword.GetNextHit(); uHit!=EMPTY_HIT; uHit = tKeyword.GetNextHit() ) + { + fprintf ( fp, "doc="DOCID_FMT", hit=0x%08x\n", tKeyword.m_tDoc.m_iDocID, uHit ); // FIXME? + iHits++; + } + + if ( !iHits ) + { + uint64_t uOff = tKeyword.m_iHitlistPos; + fprintf ( fp, "doc="DOCID_FMT", NO HITS, inline=%d, off="UINT64_FMT"\n", + tKeyword.m_tDoc.m_iDocID, (int)(uOff>>63), (uOff<<1)>>1 ); + } + } +} + + +bool CSphIndex_VLN::Prealloc ( bool bMlock, bool bStripPath, CSphString & sWarning ) +{ + MEMORY ( SPH_MEM_IDX_DISK ); + + // reset + Dealloc (); + + // always keep shared variables flag + if ( m_dShared.IsEmpty() ) + { + if ( !m_dShared.Alloc ( SPH_SHARED_VARS_COUNT, m_sLastError, sWarning ) ) + return false; + } + memset ( m_dShared.GetWritePtr(), 0, m_dShared.GetLength() ); + m_pPreread = m_dShared.GetWritePtr()+0; + m_pAttrsStatus = m_dShared.GetWritePtr()+1; + + // set new locking flag + m_pDocinfo.SetMlock ( bMlock ); + m_tWordlist.m_pBuf.SetMlock ( bMlock ); + m_pMva.SetMlock ( bMlock ); + m_pStrings.SetMlock ( bMlock ); + m_pKillList.SetMlock ( bMlock ); + + // preload schema + if ( !LoadHeader ( GetIndexFileName("sph").cstr(), bStripPath, sWarning ) ) + return false; + + // verify that data files are readable + if ( !sphIsReadable ( GetIndexFileName("spd").cstr(), &m_sLastError ) ) + return false; + + if ( m_uVersion>=3 && !sphIsReadable ( GetIndexFileName("spp").cstr(), &m_sLastError ) ) + return false; + + ///////////////////// + // prealloc wordlist + ///////////////////// + + // try to open wordlist file in all cases + CSphAutofile tWordlist ( GetIndexFileName("spi"), SPH_O_READ, m_sLastError ); + if ( tWordlist.GetFD()<0 ) + return false; + + m_tWordlist.m_iSize = tWordlist.GetSize ( 1, true, m_sLastError ); + if ( m_tWordlist.m_iSize<0 ) + return false; + + m_bIsEmpty = ( m_tWordlist.m_iSize<=1 ); + if ( m_bIsEmpty!=( m_tWordlist.m_dCheckpoints.GetLength()==0 ) ) + sphWarning ( "wordlist size mismatch (size="INT64_FMT", checkpoints=%d)", m_tWordlist.m_iSize, m_tWordlist.m_dCheckpoints.GetLength() ); + + // make sure checkpoints are loadable + // pre-11 indices use different offset type (this is fixed up later during the loading) + assert ( m_tWordlist.m_iCheckpointsPos>0 ); + + // prealloc wordlist only !!! no need to load checkpoints here to + if ( m_bPreloadWordlist ) + if ( !m_tWordlist.m_pBuf.Alloc ( m_tWordlist.m_iCheckpointsPos, m_sLastError, sWarning ) ) + return false; + + // preopen + if ( m_bKeepFilesOpen ) + { + if ( m_tDoclistFile.Open ( GetIndexFileName("spd"), SPH_O_READ, m_sLastError ) < 0 ) + return false; + + if ( m_tHitlistFile.Open ( GetIndexFileName ( m_uVersion>=3 ? "spp" : "spd" ), SPH_O_READ, m_sLastError ) < 0 ) + return false; + + if ( !m_bPreloadWordlist && m_tWordlist.m_tFile.Open ( GetIndexFileName("spi"), SPH_O_READ, m_sLastError ) < 0 ) + return false; + } + + ///////////////////// + // prealloc docinfos + ///////////////////// + + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN && !m_bIsEmpty ) + { + ///////////// + // attr data + ///////////// + + int iStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + int iStride2 = iStride-1; // id64 - 1 DWORD = id32 + int iEntrySize = sizeof(DWORD)*iStride; + + CSphAutofile tDocinfo ( GetIndexFileName("spa"), SPH_O_READ, m_sLastError ); + if ( tDocinfo.GetFD()<0 ) + return false; + + DWORD iDocinfoSize = DWORD ( tDocinfo.GetSize ( iEntrySize, true, m_sLastError ) + / sizeof(DWORD) ); + if ( iDocinfoSize<0 ) + return false; + + DWORD iRealDocinfoSize = m_uMinMaxIndex ? m_uMinMaxIndex : iDocinfoSize; + + // intentionally losing data; we don't support more than 4B documents per instance yet + m_uDocinfo = (DWORD)( iRealDocinfoSize / iStride ); + if ( iRealDocinfoSize!=m_uDocinfo*iStride && !m_bId32to64 ) + { + m_sLastError.SetSprintf ( "docinfo size check mismatch (4B document limit hit?)" ); + return false; + } + + if ( m_bId32to64 ) + { + // check also the case of id32 here, and correct m_uDocinfo for it + m_uDocinfo = (DWORD)( iRealDocinfoSize / iStride2 ); + if ( iRealDocinfoSize!=m_uDocinfo*iStride2 ) + { + m_sLastError.SetSprintf ( "docinfo size check mismatch (4B document limit hit?)" ); + return false; + } + m_uMinMaxIndex = m_uMinMaxIndex / iStride2 * iStride; + } + + + if ( m_uVersion < 20 ) + { + if ( m_bId32to64 ) + iDocinfoSize = iDocinfoSize / iStride2 * iStride; + m_uDocinfoIndex = ( m_uDocinfo+DOCINFO_INDEX_FREQ-1 ) / DOCINFO_INDEX_FREQ; + + // prealloc docinfo + if ( !m_pDocinfo.Alloc ( iDocinfoSize + 2*(1+m_uDocinfoIndex)*iStride + ( m_bId32to64 ? m_uDocinfo : 0 ), m_sLastError, sWarning ) ) + return false; + + m_pDocinfoIndex = m_pDocinfo.GetWritePtr()+iDocinfoSize; + } else + { + if ( iDocinfoSize < iRealDocinfoSize ) + { + m_sLastError.SetSprintf ( "precomputed chunk size check mismatch" ); + return false; + } + + m_uDocinfoIndex = ( ( iDocinfoSize - iRealDocinfoSize ) / (m_bId32to64?iStride2:iStride) / 2 ) - 1; + + // prealloc docinfo + if ( !m_pDocinfo.Alloc ( iDocinfoSize + ( m_bId32to64 ? ( 2 + m_uDocinfo + 2*m_uDocinfoIndex ) : 0 ), m_sLastError, sWarning ) ) + return false; + +#if PARANOID + DWORD uDocinfoIndex = ( m_uDocinfo+DOCINFO_INDEX_FREQ-1 ) / DOCINFO_INDEX_FREQ; + assert ( uDocinfoIndex==m_uDocinfoIndex ); +#endif + + m_pDocinfoIndex = m_pDocinfo.GetWritePtr()+m_uMinMaxIndex; + } + + // prealloc docinfo hash but only if docinfo is big enough (in other words if hash is 8x+ less in size) + if ( m_pDocinfoHash.IsEmpty() && m_pDocinfo.GetLength() > ( 32 << DOCINFO_HASH_BITS ) ) + if ( !m_pDocinfoHash.Alloc ( ( 1 << DOCINFO_HASH_BITS )+4, m_sLastError, sWarning ) ) + return false; + + //////////// + // MVA data + //////////// + + if ( m_uVersion>=4 ) + { + // if index is v4, .spm must always exist, even though length could be 0 + CSphAutofile fdMva ( GetIndexFileName("spm"), SPH_O_READ, m_sLastError ); + if ( fdMva.GetFD()<0 ) + return false; + + SphOffset_t iMvaSize = fdMva.GetSize ( 0, true, m_sLastError ); + if ( iMvaSize<0 ) + return false; + + // prealloc + if ( iMvaSize>0 ) + if ( !m_pMva.Alloc ( DWORD(iMvaSize/sizeof(DWORD)), m_sLastError, sWarning ) ) + return false; + } + + /////////////// + // string data + /////////////// + + if ( m_uVersion>=17 ) + { + CSphAutofile fdStrings ( GetIndexFileName("sps"), SPH_O_READ, m_sLastError ); + if ( fdStrings.GetFD()<0 ) + return false; + + SphOffset_t iStringsSize = fdStrings.GetSize ( 0, true, m_sLastError ); + if ( iStringsSize<0 ) + return false; + + // prealloc + if ( iStringsSize>0 ) + if ( !m_pStrings.Alloc ( DWORD(iStringsSize), m_sLastError, sWarning ) ) + return false; + } + } else if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN && m_bIsEmpty ) + { + CSphAutofile tDocinfo ( GetIndexFileName("spa"), SPH_O_READ, m_sLastError ); + if ( tDocinfo.GetFD()>0 ) + { + SphOffset_t iDocinfoSize = tDocinfo.GetSize ( 0, false, m_sLastError ); + if ( iDocinfoSize ) + sphWarning ( "IsEmpty != attribute size ("INT64_FMT")", iDocinfoSize ); + } + } + + + // prealloc killlist + if ( m_uVersion>=10 ) + { + CSphAutofile fdKillList ( GetIndexFileName("spk"), SPH_O_READ, m_sLastError ); + if ( fdKillList.GetFD()<0 ) + return false; + + SphOffset_t iSize = fdKillList.GetSize ( 0, true, m_sLastError ); + if ( iSize<0 ) + return false; + + if ( iSize!=(SphOffset_t)( m_iKillListSize*sizeof(SphAttr_t) ) ) + { + m_sLastError.SetSprintf ( "header k-list size does not match .spk size (klist=" INT64_FMT ", spk=" INT64_FMT ")", + (int64_t)( m_iKillListSize*sizeof(SphAttr_t) ), + (int64_t) iSize ); + return false; + } + + // prealloc + if ( iSize>0 && !m_pKillList.Alloc ( m_iKillListSize, m_sLastError, sWarning ) ) + return false; + } + + bool bWordDict = false; + if ( m_pDict ) + bWordDict = m_pDict->GetSettings().m_bWordDict; + + // preload checkpoints (must be done here as they are not shared) + if ( !m_tWordlist.ReadCP ( tWordlist, m_uVersion, bWordDict, m_sLastError ) ) + { + m_sLastError.SetSprintf ( "failed to read %s: %s", GetIndexFileName("spi").cstr(), m_sLastError.cstr () ); + return false; + } + + // all done + m_bPreallocated = true; + m_iIndexTag = ++m_iIndexTagSeq; + return true; +} + + +template < typename T > bool CSphIndex_VLN::PrereadSharedBuffer ( CSphSharedBuffer & pBuffer, const char * sExt, size_t uExpected, DWORD uOffset ) +{ + if ( !pBuffer.GetLength() ) + return true; + + CSphAutofile fdBuf ( GetIndexFileName(sExt), SPH_O_READ, m_sLastError ); + if ( fdBuf.GetFD()<0 ) + return false; + + fdBuf.SetProgressCallback ( m_pProgress, &m_tProgress ); + if ( uExpected==0 ) + uExpected = size_t ( pBuffer.GetLength() ) - uOffset*sizeof(T); + return fdBuf.Read ( pBuffer.GetWritePtr() + uOffset, uExpected, m_sLastError ); +} + + +bool CSphIndex_VLN::Preread () +{ + MEMORY ( SPH_MEM_IDX_DISK ); + + sphLogDebug ( "CSphIndex_VLN::Preread invoked" ); + if ( !m_bPreallocated ) + { + m_sLastError = "INTERNAL ERROR: not preallocated"; + return false; + } + if ( !m_pPreread || *m_pPreread ) + { + m_sLastError = "INTERNAL ERROR: already preread"; + return false; + } + + /////////////////// + // read everything + /////////////////// + + m_tProgress.m_ePhase = CSphIndexProgress::PHASE_PREREAD; + m_tProgress.m_iBytes = 0; + m_tProgress.m_iBytesTotal = m_pDocinfo.GetLength() + m_pMva.GetLength() + m_pStrings.GetLength() + m_pKillList.GetLength(); + if ( m_bPreloadWordlist ) + m_tProgress.m_iBytesTotal += m_tWordlist.m_pBuf.GetLength(); + + sphLogDebug ( "Prereading .spa" ); + if ( !PrereadSharedBuffer ( m_pDocinfo, "spa", + ( m_uVersion<20 )? m_uDocinfo * ( ( m_bId32to64 ? 1 : DOCINFO_IDSIZE ) + m_tSchema.GetRowSize() ) * sizeof(DWORD) : 0 , m_bId32to64 ? ( 2 + m_uDocinfo + 2 * m_uDocinfoIndex ) : 0 ) ) + return false; + + sphLogDebug ( "Prereading .spm" ); + if ( !PrereadSharedBuffer ( m_pMva, "spm" ) ) + return false; + + sphLogDebug ( "Prereading .sps" ); + if ( !PrereadSharedBuffer ( m_pStrings, "sps" ) ) + return false; + + sphLogDebug ( "Prereading .spk" ); + if ( !PrereadSharedBuffer ( m_pKillList, "spk" ) ) + return false; + +#if PARANOID + for ( int i = 1; i < (int)m_iKillListSize; i++ ) + assert ( m_pKillList[i-1] < m_pKillList[i] ); +#endif + + // preload wordlist + // FIXME! OPTIMIZE! can skip checkpoints + if ( m_bPreloadWordlist ) + { + sphLogDebug ( "Prereading .spi" ); + if ( !PrereadSharedBuffer ( m_tWordlist.m_pBuf, "spi" ) ) + + return false; + } + + if ( m_pProgress ) + m_pProgress ( &m_tProgress, true ); + + sphLogDebug ( "Prereading .mvp" ); + if ( !LoadPersistentMVA ( m_sLastError ) ) + return false; + + ////////////////////// + // precalc everything + ////////////////////// + + // convert id32 to id64 + if ( m_pDocinfo.GetLength() && m_bId32to64 ) + { + DWORD *pTarget = m_pDocinfo.GetWritePtr(); + DWORD *pSource = pTarget + 2 + m_uDocinfo + 2 * m_uDocinfoIndex; + int iStride = m_tSchema.GetRowSize(); + SphDocID_t uDoc; + DWORD uLimit = m_uDocinfo + ( ( m_uVersion < 20 ) ? 0 : 2 + 2 * m_uDocinfoIndex ); + for ( DWORD u=0; u=( 1 << DOCINFO_HASH_BITS ) ) + { + iShift++; + uRange >>= 1; + } + + DWORD * pHash = m_pDocinfoHash.GetWritePtr(); + *pHash++ = iShift; + *pHash = 0; + DWORD uLastHash = 0; + + for ( DWORD i=1; iuFirst + && DOCINFO2ID ( &m_pDocinfo[(i-1)*iStride] ) < DOCINFO2ID ( &m_pDocinfo[i*iStride] ) + && "descending document ID found" ); + DWORD uHash = (DWORD)( ( DOCINFO2ID ( &m_pDocinfo[i*iStride] ) - uFirst ) >> iShift ); + if ( uHash==uLastHash ) + continue; + + while ( uLastHash dMvaRowitem; + for ( int i=0; i=0 ) + { + ::close ( m_iLockFD ); + ::unlink ( GetIndexFileName("spl").cstr() ); + sphLogDebug ( "lock %s unlinked, file with ID %d closed", GetIndexFileName("spl").cstr(), m_iLockFD ); + m_iLockFD = -1; + } + continue; + } +#endif + + snprintf ( sFrom, sizeof(sFrom), "%s.%s", m_sFilename.cstr(), sExt ); + snprintf ( sTo, sizeof(sTo), "%s.%s", sNewBase, sExt ); + +#if USE_WINDOWS + ::unlink ( sTo ); + sphLogDebug ( "%s unlinked", sTo ); +#endif + + if ( ::rename ( sFrom, sTo ) ) + { + m_sLastError.SetSprintf ( "rename %s to %s failed: %s", sFrom, sTo, strerror(errno) ); + // this is no reason to fail if spl is missing, since it is only lock and no data. + if ( strcmp ( sExt, "spl" ) ) + break; + } + uMask |= ( 1UL << iExt ); + } + + // are we good? + if ( iExt==EXT_COUNT ) + { + SetBase ( sNewBase ); + sphLogDebug ( "Base set to %s", sNewBase ); + return true; + } + + // if there were errors, rollback + for ( iExt=0; iExtm_dFieldWeights.GetLength() ) + { + ARRAY_FOREACH ( i, pQuery->m_dFieldWeights ) + { + int j = tSchema.GetFieldIndex ( pQuery->m_dFieldWeights[i].m_sName.cstr() ); + if ( j>=0 && jm_dFieldWeights[i].m_iValue ) * iIndexWeight; + } + return; + } + + // order-bound weights + if ( pQuery->m_pWeights ) + { + for ( int i=0; im_iWeights ); i++ ) + m_dWeights[i] = Max ( MIN_WEIGHT, (int)pQuery->m_pWeights[i] ) * iIndexWeight; + } +} + + +bool CSphQueryContext::SetupCalc ( CSphQueryResult * pResult, const CSphSchema & tInSchema, const CSphSchema & tSchema, const DWORD * pMvaPool ) +{ + m_dCalcFilter.Resize ( 0 ); + m_dCalcSort.Resize ( 0 ); + m_dCalcFinal.Resize ( 0 ); + + // quickly verify that all my real attributes can be stashed there + if ( tInSchema.GetAttrsCount() < tSchema.GetAttrsCount() ) + { + pResult->m_sError.SetSprintf ( "INTERNAL ERROR: incoming-schema mismatch (incount=%d, mycount=%d)", tInSchema.GetAttrsCount(), tSchema.GetAttrsCount() ); + return false; + } + + // now match everyone + for ( int iIn=0; iInm_sError.SetSprintf ( "INTERNAL ERROR: incoming-schema attr missing from index-schema (in=%s)", + sphDumpAttr(tIn).cstr() ); + return false; + } + + if ( tIn.m_eStage==SPH_EVAL_OVERRIDE ) + { + // override; check for type/size match and dynamic part + if ( tIn.m_eAttrType!=pMy->m_eAttrType + || tIn.m_tLocator.m_iBitCount!=pMy->m_tLocator.m_iBitCount + || !tIn.m_tLocator.m_bDynamic ) + { + pResult->m_sError.SetSprintf ( "INTERNAL ERROR: incoming-schema override mismatch (in=%s, my=%s)", + sphDumpAttr(tIn).cstr(), sphDumpAttr(*pMy).cstr() ); + return false; + } + } else + { + // static; check for full match + if (!( tIn==*pMy )) + { + pResult->m_sError.SetSprintf ( "INTERNAL ERROR: incoming-schema mismatch (in=%s, my=%s)", + sphDumpAttr(tIn).cstr(), sphDumpAttr(*pMy).cstr() ); + return false; + } + } + break; + } + + case SPH_EVAL_PREFILTER: + case SPH_EVAL_PRESORT: + case SPH_EVAL_FINAL: + { + ISphExpr * pExpr = tIn.m_pExpr.Ptr(); + if ( !pExpr ) + pExpr = sphSortSetupExpr ( tIn.m_sName, tSchema ); + if ( !pExpr ) + { + pResult->m_sError.SetSprintf ( "INTERNAL ERROR: incoming-schema expression missing evaluator (stage=%d, in=%s)", + (int)tIn.m_eStage, sphDumpAttr(tIn).cstr() ); + return false; + } + + // an expression that index/searcher should compute + CalcItem_t tCalc; + tCalc.m_eType = tIn.m_eAttrType; + tCalc.m_tLoc = tIn.m_tLocator; + tCalc.m_pExpr = pExpr; + tCalc.m_pExpr->SetMVAPool ( pMvaPool ); + + switch ( tIn.m_eStage ) + { + case SPH_EVAL_PREFILTER: m_dCalcFilter.Add ( tCalc ); break; + case SPH_EVAL_PRESORT: m_dCalcSort.Add ( tCalc ); break; + case SPH_EVAL_FINAL: m_dCalcFinal.Add ( tCalc ); break; + default: break; + } + break; + } + + case SPH_EVAL_SORTER: + // sorter tells it will compute itself; so just skip it + break; + + default: + pResult->m_sError.SetSprintf ( "INTERNAL ERROR: unhandled eval stage=%d", (int)tIn.m_eStage ); + return false; + } + } + + // ok, we can emit matches in this schema (incoming for sorter, outgoing for index/searcher) + pResult->m_tSchema = tInSchema; + return true; +} + + +CSphDict * CSphIndex_VLN::SetupStarDict ( CSphScopedPtr & tContainer, CSphDict * pPrevDict, ISphTokenizer & tTokenizer ) const +{ + // setup proper dict + bool bUseStarDict = false; + if ( + ( m_uVersion>=7 && ( m_tSettings.m_iMinPrefixLen>0 || m_tSettings.m_iMinInfixLen>0 ) && m_bEnableStar ) || // v.7 added mangling to infixes + ( m_uVersion==6 && ( m_tSettings.m_iMinPrefixLen>0 ) && m_bEnableStar ) ) // v.6 added mangling to prefixes + { + bUseStarDict = true; + } + + // no star? just return the original one + if ( !bUseStarDict ) + return pPrevDict; + + // spawn wrapper, and put it in the box + // wrapper type depends on version; v.8 introduced new mangling rules + if ( m_uVersion>=8 ) + tContainer = new CSphDictStarV8 ( pPrevDict, m_tSettings.m_iMinPrefixLen>0, m_tSettings.m_iMinInfixLen>0 ); + else + tContainer = new CSphDictStar ( pPrevDict ); + + CSphRemapRange tStar ( '*', '*', '*' ); // FIXME? check and warn if star was already there + tTokenizer.AddCaseFolding ( tStar ); + + return tContainer.Ptr(); +} + + +CSphDict * CSphIndex_VLN::SetupExactDict ( CSphScopedPtr & tContainer, CSphDict * pPrevDict, ISphTokenizer & tTokenizer ) const +{ + if ( m_uVersion<12 || !m_tSettings.m_bIndexExactWords ) + return pPrevDict; + + tContainer = new CSphDictExact ( pPrevDict ); + + CSphRemapRange tStar ( '=', '=', '=' ); // FIXME? check and warn if star was already there + tTokenizer.AddCaseFolding ( tStar ); + + return tContainer.Ptr(); +} + + +void CSphIndex_VLN::LoadSettings ( CSphReader & tReader ) +{ + if ( m_uVersion>=8 ) + { + m_tSettings.m_iMinPrefixLen = tReader.GetDword (); + m_tSettings.m_iMinInfixLen = tReader.GetDword (); + + } else if ( m_uVersion>=6 ) + { + bool bPrefixesOnly = ( tReader.GetByte ()!=0 ); + m_tSettings.m_iMinPrefixLen = tReader.GetDword (); + m_tSettings.m_iMinInfixLen = 0; + if ( !bPrefixesOnly ) + Swap ( m_tSettings.m_iMinPrefixLen, m_tSettings.m_iMinInfixLen ); + } + + if ( m_uVersion>=9 ) + { + m_tSettings.m_bHtmlStrip = !!tReader.GetByte (); + m_tSettings.m_sHtmlIndexAttrs = tReader.GetString (); + m_tSettings.m_sHtmlRemoveElements = tReader.GetString (); + } else + m_bStripperInited = false; + + if ( m_uVersion>=12 ) + m_tSettings.m_bIndexExactWords = !!tReader.GetByte (); + + if ( m_uVersion>=18 ) + m_tSettings.m_eHitless = (ESphHitless)tReader.GetDword(); + + if ( m_uVersion>=19 ) + m_tSettings.m_eHitFormat = (ESphHitFormat)tReader.GetDword(); + else // force plain format for old indices + m_tSettings.m_eHitFormat = SPH_HIT_FORMAT_PLAIN; + + if ( m_uVersion>=21 ) + m_tSettings.m_bIndexSP = !!tReader.GetByte(); + + if ( m_uVersion>=22 ) + { + m_tSettings.m_sZones = tReader.GetString(); + if ( m_uVersion<25 && !m_tSettings.m_sZones.IsEmpty() ) + m_tSettings.m_sZones.SetSprintf ( "%s*", m_tSettings.m_sZones.cstr() ); + } + + if ( m_uVersion>=23 ) + { + m_tSettings.m_iBoundaryStep = (int)tReader.GetDword(); + m_tSettings.m_iStopwordStep = (int)tReader.GetDword(); + } +} + + +void CSphIndex_VLN::SaveSettings ( CSphWriter & tWriter ) +{ + tWriter.PutDword ( m_tSettings.m_iMinPrefixLen ); + tWriter.PutDword ( m_tSettings.m_iMinInfixLen ); + tWriter.PutByte ( m_tSettings.m_bHtmlStrip ? 1 : 0 ); + tWriter.PutString ( m_tSettings.m_sHtmlIndexAttrs.cstr () ); + tWriter.PutString ( m_tSettings.m_sHtmlRemoveElements.cstr () ); + tWriter.PutByte ( m_tSettings.m_bIndexExactWords ? 1 : 0 ); + tWriter.PutDword ( m_tSettings.m_eHitless ); + tWriter.PutDword ( m_tSettings.m_eHitFormat ); + tWriter.PutByte ( m_tSettings.m_bIndexSP ); + tWriter.PutString ( m_tSettings.m_sZones ); + tWriter.PutDword ( m_tSettings.m_iBoundaryStep ); + tWriter.PutDword ( m_tSettings.m_iStopwordStep ); +} + + +bool CSphIndex_VLN::GetKeywords ( CSphVector & dKeywords, const char * szQuery, bool bGetStats, CSphString & sError ) const +{ + WITH_QWORD ( this, false, Qword, return DoGetKeywords ( dKeywords, szQuery, bGetStats, sError ) ); + return false; +} + + +template < class Qword > +bool CSphIndex_VLN::DoGetKeywords ( CSphVector & dKeywords, const char * szQuery, bool bGetStats, CSphString & sError ) const +{ + if ( !m_pPreread || !*m_pPreread ) + { + sError = "index not preread"; + return false; + } + + CSphScopedPtr pDoclist ( NULL ); + CSphScopedPtr pHitlist ( NULL ); + + CSphScopedPtr pTokenizer ( m_pTokenizer->Clone ( false ) ); // avoid race + pTokenizer->EnableTokenizedMultiformTracking (); + + CSphScopedPtr tDictCloned ( NULL ); + CSphDict * pDictBase = m_pDict; + if ( pDictBase->HasState() ) + { + tDictCloned = pDictBase = pDictBase->Clone(); + } + + CSphScopedPtr tDict ( NULL ); + CSphDict * pDict = SetupStarDict ( tDict, pDictBase, *pTokenizer.Ptr() ); + + CSphScopedPtr tDict2 ( NULL ); + pDict = SetupExactDict ( tDict2, pDict, *pTokenizer.Ptr() ); + + // prepare for setup + CSphAutofile tDummy1, tDummy2, tDummy3, tWordlist; + + if ( !m_bKeepFilesOpen ) + if ( tWordlist.Open ( GetIndexFileName ( "spi" ), SPH_O_READ, sError ) < 0 ) + return false; + + DiskIndexQwordSetup_c tTermSetup ( tDummy1, tDummy2 + , m_bPreloadWordlist ? tDummy3 : ( m_bKeepFilesOpen ? m_tWordlist.m_tFile : tWordlist ) + , m_bPreloadWordlist ? 0 : m_tWordlist.m_iMaxChunk ); + tTermSetup.m_pDict = pDict; + tTermSetup.m_pIndex = this; + tTermSetup.m_eDocinfo = m_tSettings.m_eDocinfo; + dKeywords.Resize ( 0 ); + + Qword QueryWord ( false, false ); + CSphString sTokenized; + BYTE * sWord; + int nWords = 0; + + CSphString sQbuf ( szQuery ); + pTokenizer->SetBuffer ( (BYTE*)sQbuf.cstr(), strlen(szQuery) ); + + while ( ( sWord = pTokenizer->GetToken() )!=NULL ) + { + BYTE * sMultiform = pTokenizer->GetTokenizedMultiform(); + if ( sMultiform ) + sTokenized = (const char*)sMultiform; + else + sTokenized = (const char*)sWord; + + SphWordID_t iWord = pDict->GetWordID ( sWord ); + if ( iWord ) + { + if ( bGetStats ) + { + QueryWord.Reset (); + QueryWord.m_sWord = (const char*)sWord; + QueryWord.m_sDictWord = (const char*)sWord; + QueryWord.m_iWordID = iWord; + tTermSetup.QwordSetup ( &QueryWord ); + } + + CSphKeywordInfo & tInfo = dKeywords.Add(); + Swap ( tInfo.m_sTokenized, sTokenized ); + tInfo.m_sNormalized = (const char*)sWord; + tInfo.m_iDocs = bGetStats ? QueryWord.m_iDocs : 0; + tInfo.m_iHits = bGetStats ? QueryWord.m_iHits : 0; + ++nWords; + } + } + + return true; +} + +// fix MSVC 2005 fuckup, template DoGetKeywords() just above somehow resets forScope +#if USE_WINDOWS +#pragma conform(forScope,on) +#endif + + +bool CSphQueryContext::CreateFilters ( bool bFullscan, const CSphVector * pdFilters, const CSphSchema & tSchema, const DWORD * pMvaPool, CSphString & sError ) +{ + if ( !pdFilters ) + return true; + ARRAY_FOREACH ( i, (*pdFilters) ) + { + const CSphFilterSettings & tFilter = (*pdFilters)[i]; + if ( tFilter.m_sAttrName.IsEmpty() ) + continue; + + if ( bFullscan && tFilter.m_sAttrName=="@weight" ) + continue; // @weight is not avaiable in fullscan mode + + ISphFilter * pFilter = sphCreateFilter ( tFilter, tSchema, pMvaPool, sError ); + if ( !pFilter ) + return false; + + ISphFilter ** pGroup = tFilter.m_sAttrName=="@weight" ? &m_pWeightFilter : &m_pFilter; + *pGroup = sphJoinFilters ( *pGroup, pFilter ); + } + return true; +} + + +bool CSphQueryContext::SetupOverrides ( const CSphQuery * pQuery, CSphQueryResult * pResult, const CSphSchema & tIndexSchema ) +{ + m_pOverrides = NULL; + m_dOverrideIn.Resize ( pQuery->m_dOverrides.GetLength() ); + m_dOverrideOut.Resize ( pQuery->m_dOverrides.GetLength() ); + + ARRAY_FOREACH ( i, pQuery->m_dOverrides ) + { + const char * sAttr = pQuery->m_dOverrides[i].m_sAttr.cstr(); // shortcut + const CSphColumnInfo * pCol = tIndexSchema.GetAttr ( sAttr ); + if ( !pCol ) + { + pResult->m_sError.SetSprintf ( "attribute override: unknown attribute name '%s'", sAttr ); + return false; + } + + if ( pCol->m_eAttrType!=pQuery->m_dOverrides[i].m_eAttrType ) + { + pResult->m_sError.SetSprintf ( "attribute override: attribute '%s' type mismatch (index=%d, query=%d)", + sAttr, pCol->m_eAttrType, pQuery->m_dOverrides[i].m_eAttrType ); + return false; + } + + const CSphColumnInfo * pOutCol = pResult->m_tSchema.GetAttr ( pQuery->m_dOverrides[i].m_sAttr.cstr() ); + if ( !pOutCol ) + { + pResult->m_sError.SetSprintf ( "attribute override: unknown attribute name '%s' in outgoing schema", sAttr ); + return false; + } + + m_dOverrideIn[i] = pCol->m_tLocator; + m_dOverrideOut[i] = pOutCol->m_tLocator; + +#ifndef NDEBUG + // check that the values are actually sorted + const CSphVector & dValues = pQuery->m_dOverrides[i].m_dValues; + for ( int j=1; jm_dOverrides.GetLength() ) + m_pOverrides = &pQuery->m_dOverrides; + return true; +} + +static int sphQueryHeightCalc ( const XQNode_t * pNode ) +{ + if ( !pNode->m_dChildren.GetLength() ) + return pNode->m_dWords.GetLength(); + + if ( pNode->GetOp()==SPH_QUERY_BEFORE ) + return 1; + + int iMaxChild = 0; + int iHeight = 0; + ARRAY_FOREACH ( i, pNode->m_dChildren ) + { + int iBottom = sphQueryHeightCalc ( pNode->m_dChildren[i] ); + int iTop = pNode->m_dChildren.GetLength()-i-1; + if ( iBottom+iTop>=iMaxChild+iHeight ) + { + iMaxChild = iBottom; + iHeight = iTop; + } + } + + return iMaxChild+iHeight; +} + +#define SPH_DAEMON_STACK_HEIGHT 30*1024 +#define SPH_EXTNODE_STACK_SIZE 120 + +bool sphCheckQueryHeight ( const XQNode_t * pRoot, CSphString & sError ) +{ + int iHeight = 0; + if ( pRoot ) + iHeight = sphQueryHeightCalc ( pRoot ); + + int iQueryStack = iHeight*SPH_EXTNODE_STACK_SIZE+SPH_DAEMON_STACK_HEIGHT; + bool bValid = ( sphMyStackSize()>=iQueryStack ); + if ( !bValid ) + sError.SetSprintf ( "query too complex, not enough stack (thread_stack_size=%dK or higher required)", + ( ( iQueryStack+1024-( iQueryStack%1024 ) ) / 1024 ) ); + + return bValid; +} + +static XQNode_t * CloneKeyword ( const XQNode_t * pNode ) +{ + assert ( pNode ); + + XQNode_t * pRes = new XQNode_t; + pRes->m_bFieldSpec = pNode->m_bFieldSpec; + pRes->m_dFieldMask = pNode->m_dFieldMask; + pRes->m_iFieldMaxPos = pNode->m_iFieldMaxPos; + pRes->m_dWords = pNode->m_dWords; + return pRes; +} + + +static XQNode_t * ExpandKeyword ( XQNode_t * pNode, const CSphIndexSettings & tSettings ) +{ + XQNode_t * pExpand = new XQNode_t; + pExpand->SetOp ( SPH_QUERY_OR, pNode ); + + if ( tSettings.m_iMinInfixLen>0 ) + { + assert ( pNode->m_dChildren.GetLength()==0 ); + assert ( pNode->m_dWords.GetLength()==1 ); + XQNode_t * pInfix = CloneKeyword ( pNode ); + pInfix->m_dWords[0].m_sWord.SetSprintf ( "*%s*", pNode->m_dWords[0].m_sWord.cstr() ); + pInfix->m_dWords[0].m_uStarPosition = STAR_BOTH; + pExpand->m_dChildren.Add ( pInfix ); + } + + if ( tSettings.m_bIndexExactWords ) + { + assert ( pNode->m_dChildren.GetLength()==0 ); + assert ( pNode->m_dWords.GetLength()==1 ); + XQNode_t * pExact = CloneKeyword ( pNode ); + pExact->m_dWords[0].m_sWord.SetSprintf ( "=%s", pNode->m_dWords[0].m_sWord.cstr() ); + pExpand->m_dChildren.Add ( pExact ); + } + + return pExpand; +} + +static XQNode_t * ExpandKeywords ( XQNode_t * pNode, const CSphIndexSettings & tSettings ) +{ + // only if expansion makes sense at all + if ( tSettings.m_iMinInfixLen<=0 && !tSettings.m_bIndexExactWords ) + return pNode; + + // process children for composite nodes + if ( pNode->m_dChildren.GetLength() ) + { + ARRAY_FOREACH ( i, pNode->m_dChildren ) + pNode->m_dChildren[i] = ExpandKeywords ( pNode->m_dChildren[i], tSettings ); + return pNode; + } + + // if that's a phrase/proximity node, create a very special, magic phrase/proximity node + if ( pNode->GetOp()==SPH_QUERY_PHRASE || pNode->GetOp()==SPH_QUERY_PROXIMITY || pNode->GetOp()==SPH_QUERY_QUORUM ) + { + assert ( pNode->m_dWords.GetLength()>1 ); + ARRAY_FOREACH ( i, pNode->m_dWords ) + { + XQNode_t * pWord = new XQNode_t; + pWord->m_dWords.Add ( pNode->m_dWords[i] ); + pNode->m_dChildren.Add ( ExpandKeyword ( pWord, tSettings ) ); + pNode->m_dChildren.Last()->m_iAtomPos = pNode->m_dWords[i].m_iAtomPos; + } + pNode->m_dWords.Reset(); + pNode->m_bVirtuallyPlain = true; + return pNode; + } + + // skip empty plain nodes + if ( pNode->m_dWords.GetLength()<=0 ) + return pNode; + + // process keywords for plain nodes + assert ( pNode->m_dWords.GetLength()==1 ); + + XQKeyword_t & tKeyword = pNode->m_dWords[0]; + if ( tKeyword.m_uStarPosition!=STAR_NONE + || tKeyword.m_sWord.Begins("=") + || tKeyword.m_sWord.Begins("*") + || tKeyword.m_sWord.Ends("*") ) + { + return pNode; + } + + // do the expansion + return ExpandKeyword ( pNode, tSettings ); +} + +// transform the "one two three"/1 quorum into one|two|three (~40% faster) +static void TransformQuorum ( XQNode_t ** ppNode ) +{ + XQNode_t *& pNode = *ppNode; + if ( pNode->GetOp()!=SPH_QUERY_QUORUM || pNode->m_iOpArg!=1 ) + return; + + assert ( pNode->m_dChildren.GetLength()==0 ); + CSphVector dArgs; + ARRAY_FOREACH ( i, pNode->m_dWords ) + { + XQNode_t * pAnd = new XQNode_t(); + pAnd->m_dWords.Add ( pNode->m_dWords[i] ); + dArgs.Add ( pAnd ); + } + pNode->m_dWords.Reset(); + pNode->SetOp ( SPH_QUERY_OR, dArgs ); +} + + +struct BinaryNode_t +{ + int m_iLo; + int m_iHi; +}; + +static void BuildExpandedTree ( const XQKeyword_t & tRootWord, CSphVector & dWordSrc, XQNode_t * pRoot ) +{ + assert ( dWordSrc.GetLength() ); + pRoot->m_dWords.Reset(); + + CSphVector dNodes; + dNodes.Reserve ( dWordSrc.GetLength() ); + + XQNode_t * pCur = pRoot; + + dNodes.Add(); + dNodes.Last().m_iLo = 0; + dNodes.Last().m_iHi = ( dWordSrc.GetLength()-1 ); + + while ( dNodes.GetLength() ) + { + BinaryNode_t tNode = dNodes.Pop(); + if ( tNode.m_iHim_pParent; + continue; + } + + int iMid = ( tNode.m_iLo+tNode.m_iHi ) / 2; + dNodes.Add (); + dNodes.Last().m_iLo = tNode.m_iLo; + dNodes.Last().m_iHi = iMid-1; + dNodes.Add (); + dNodes.Last().m_iLo = iMid+1; + dNodes.Last().m_iHi = tNode.m_iHi; + + if ( pCur->m_dWords.GetLength() ) + { + assert ( pCur->m_dWords.GetLength()==1 ); + XQNode_t * pTerm = CloneKeyword ( pRoot ); + Swap ( pTerm->m_dWords, pCur->m_dWords ); + pCur->m_dChildren.Add ( pTerm ); + } + + XQNode_t * pChild = CloneKeyword ( pRoot ); + pChild->m_dWords.Add ( tRootWord ); + pChild->m_dWords.Last().m_sWord.Swap ( dWordSrc[iMid].m_sName ); + pChild->m_dWords.Last().m_bExpanded = true; + pChild->m_bNotWeighted = ( dWordSrc[iMid].m_iValue==0 ); + + pChild->m_pParent = pCur; + pCur->m_dChildren.Add ( pChild ); + pCur->SetOp ( SPH_QUERY_OR ); + + pCur = pChild; + } +} + +void Swap ( CSphNamedInt & a, CSphNamedInt & b ) +{ + a.m_sName.Swap ( b.m_sName ); + Swap ( a.m_iValue, b.m_iValue ); +} + +struct WordDocsGreaterOp_t +{ + inline bool IsLess ( const CSphNamedInt & a, const CSphNamedInt & b ) + { + return a.m_iValue > b.m_iValue; + } +}; + +XQNode_t * CSphIndex_VLN::DoExpansion ( XQNode_t * pNode, BYTE * pBuff, int iFD, CSphQueryResultMeta * pResult ) const +{ + assert ( pNode ); + assert ( pResult ); + + // process children for composite nodes + if ( pNode->m_dChildren.GetLength() ) + { + ARRAY_FOREACH ( i, pNode->m_dChildren ) + pNode->m_dChildren[i] = DoExpansion ( pNode->m_dChildren[i], pBuff, iFD, pResult ); + return pNode; + } + + // if that's a phrase/proximity node, create a very special, magic phrase/proximity node + if ( pNode->GetOp()==SPH_QUERY_PHRASE || pNode->GetOp()==SPH_QUERY_PROXIMITY || pNode->GetOp()==SPH_QUERY_QUORUM ) + { + assert ( pNode->m_dWords.GetLength()>1 ); + ARRAY_FOREACH ( i, pNode->m_dWords ) + { + XQNode_t * pWord = new XQNode_t; + pWord->m_dWords.Add ( pNode->m_dWords[i] ); + pNode->m_dChildren.Add ( DoExpansion ( pWord, pBuff, iFD, pResult ) ); + pNode->m_dChildren.Last()->m_iAtomPos = pNode->m_dWords[i].m_iAtomPos; + + // tricky part + // current node may have field/zone limits attached + // normally those get pushed down during query parsing + // but here we create nodes manually and have to push down limits too + pWord->CopySpecs ( pNode ); + } + pNode->m_dWords.Reset(); + pNode->m_bVirtuallyPlain = true; + return pNode; + } + + // skip empty plain nodes + if ( pNode->m_dWords.GetLength()<=0 ) + return pNode; + + // process keywords for plain nodes + assert ( pNode->m_dChildren.GetLength()==0 ); + assert ( pNode->m_dWords.GetLength()==1 ); + + if ( ( m_bEnableStar && !pNode->m_dWords[0].m_sWord.Ends("*") ) ) + return pNode; + + const CSphString & sFullWord = pNode->m_dWords[0].m_sWord; + const char * sAdjustedWord = sFullWord.cstr(); + int iWordLen = sFullWord.Length(); + if ( m_bEnableStar ) + iWordLen = Max ( iWordLen-1, 0 ); + + // leading special symbols trimming + if ( sFullWord.Begins("=") || sFullWord.Begins("*") ) + { + sAdjustedWord++; + iWordLen = Max ( iWordLen-1, 0 ); + } + + // we refuse to search query less then min-prefix-len + if ( iWordLenHasMorphology(); + + // prefix expansion looking only into non stemmed words + CSphString sFixed; + if ( bMorphEnabled ) + { + sFixed = pNode->m_dWords[0].m_sWord.SubString ( sAdjustedWord-sFullWord.cstr(), iWordLen ); + sFixed.SetSprintf ( "%c%s", MAGIC_WORD_HEAD_NONSTEMMED, sFixed.cstr() ); + sAdjustedWord = sFixed.cstr(); + iWordLen++; + } + + CSphVector dPrefixedWords; + m_tWordlist.GetPrefixedWords ( sAdjustedWord, iWordLen, dPrefixedWords, pBuff, iFD ); + + if ( !dPrefixedWords.GetLength() ) + { + // mark source word as expanded to prevent warning on terms mismatch in statistics + pNode->m_dWords.Begin()->m_bExpanded = true; + return pNode; + } + + // sort word's to leftmost max documents, rightmost least documents + dPrefixedWords.Sort ( WordDocsGreaterOp_t() ); + + // clip words with the lowest doc frequency as rare words are misspelling + if ( m_iExpansionLimit && m_iExpansionLimitAddStat ( dPrefixedWords[i].m_sName, 0, 0, true ); + } + + // replace MAGIC_WORD_HEAD_NONSTEMMED symbol to '=' + if ( bMorphEnabled ) + { + ARRAY_FOREACH ( i, dPrefixedWords ) + { + ( (char *)dPrefixedWords[i].m_sName.cstr() )[0] = '='; + } + } + + const XQKeyword_t tPrefixingWord = pNode->m_dWords[0]; + BuildExpandedTree ( tPrefixingWord, dPrefixedWords, pNode ); + + return pNode; +} + +XQNode_t * CSphIndex_VLN::ExpandPrefix ( XQNode_t * pNode, CSphString & sError, CSphQueryResultMeta * pResult ) const +{ + if ( !pNode || !( m_pDict->GetSettings().m_bWordDict && m_tSettings.m_iMinPrefixLen>0 ) ) + return pNode; + + // thread safe outer storage for dictionaries chunks and file + BYTE * pBuf = NULL; + int iFD = -1; + CSphAutofile rdWordlist; + if ( !m_bPreloadWordlist ) + { + if ( m_bKeepFilesOpen ) + iFD = m_tWordlist.m_tFile.GetFD(); + else + { + iFD = rdWordlist.Open ( GetIndexFileName ( "spi" ), SPH_O_READ, sError ); + if ( iFD<0 ) + return NULL; + } + + if ( m_tWordlist.m_iMaxChunk>0 ) + pBuf = new BYTE [ m_tWordlist.m_iMaxChunk ]; + } + + assert ( m_pPreread && *m_pPreread ); + assert ( !m_bPreloadWordlist || !m_tWordlist.m_pBuf.IsEmpty() ); + pNode = DoExpansion ( pNode, pBuf, iFD, pResult ); + + SafeDeleteArray ( pBuf ); + + return pNode; +} + + +// transform the (A B) NEAR C into A NEAR B NEAR C +static void TransformNear ( XQNode_t ** ppNode ) +{ + XQNode_t *& pNode = *ppNode; + if ( pNode->GetOp()==SPH_QUERY_NEAR ) + { + assert ( pNode->m_dWords.GetLength()==0 ); + CSphVector dArgs; + int iStartFrom; + + // transform all (A B C) NEAR D into A NEAR B NEAR C NEAR D + do + { + dArgs.Reset(); + iStartFrom = 0; + ARRAY_FOREACH ( i, pNode->m_dChildren ) + { + XQNode_t * pChild = pNode->m_dChildren[i]; ///< shortcut + if ( pChild->GetOp()==SPH_QUERY_AND && pChild->m_dChildren.GetLength()>0 ) + { + ARRAY_FOREACH ( j, pChild->m_dChildren ) + if ( j==0 && iStartFrom==0 ) + { + // we will remove the node anyway, so just replace it with 1-st child instead + pNode->m_dChildren[i] = pChild->m_dChildren[j]; + iStartFrom = i+1; + } else + dArgs.Add ( pChild->m_dChildren[j] ); + pChild->m_dChildren.Reset(); + SafeDelete ( pChild ); + } else if ( iStartFrom!=0 ) + dArgs.Add ( pChild ); + } + + if ( iStartFrom!=0 ) + { + pNode->m_dChildren.Resize ( iStartFrom + dArgs.GetLength() ); + ARRAY_FOREACH ( i, dArgs ) + pNode->m_dChildren [ i + iStartFrom ] = dArgs[i]; + } + } while ( iStartFrom!=0 ); + } + + ARRAY_FOREACH ( i, pNode->m_dChildren ) + TransformNear ( &pNode->m_dChildren[i] ); +} + + +/// tag excluded keywords (rvals to operator NOT) +static void TagExcluded ( XQNode_t * pNode, bool bNot ) +{ + if ( pNode->GetOp()==SPH_QUERY_ANDNOT ) + { + assert ( pNode->m_dChildren.GetLength()==2 ); + assert ( pNode->m_dWords.GetLength()==0 ); + TagExcluded ( pNode->m_dChildren[0], bNot ); + TagExcluded ( pNode->m_dChildren[1], !bNot ); + + } else if ( pNode->m_dChildren.GetLength() ) + { + // FIXME? check if this works okay with "virtually plain" stuff? + ARRAY_FOREACH ( i, pNode->m_dChildren ) + TagExcluded ( pNode->m_dChildren[i], bNot ); + } else + { + // tricky bit + // no assert on length here and that is intended + // we have fully empty nodes (0 children, 0 words) sometimes! + ARRAY_FOREACH ( i, pNode->m_dWords ) + pNode->m_dWords[i].m_bExcluded = bNot; + } +} + + +void sphTransformExtendedQuery ( XQNode_t ** ppNode ) +{ + TransformQuorum ( ppNode ); + TransformNear ( ppNode ); + TagExcluded ( *ppNode, false ); +} + + +struct CmpPSortersByRandom_fn +{ + inline bool IsLess ( const ISphMatchSorter * a, const ISphMatchSorter * b ) const + { + assert ( a ); + assert ( b ); + return a->m_bRandomize < b->m_bRandomize; + } +}; + + +/// one regular query vs many sorters +bool CSphIndex_VLN::MultiQuery ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const +{ + assert ( pQuery ); + + MEMORY ( SPH_MEM_IDX_DISK_MULTY_QUERY ); + + // to avoid the checking of a ppSorters's element for NULL on every next step, just filter out all nulls right here + CSphVector dSorters; + dSorters.Reserve ( iSorters ); + for ( int i=0; im_sQuery.IsEmpty() ) + return MultiScan ( pQuery, pResult, iSorters, &dSorters[0], pExtraFilters, iTag ); + + CSphScopedPtr pTokenizer ( m_pTokenizer->Clone ( false ) ); + + CSphScopedPtr tDictCloned ( NULL ); + CSphDict * pDictBase = m_pDict; + if ( pDictBase->HasState() ) + { + tDictCloned = pDictBase = pDictBase->Clone(); + } + + CSphScopedPtr tDict ( NULL ); + CSphDict * pDict = SetupStarDict ( tDict, pDictBase, *pTokenizer.Ptr() ); + + CSphScopedPtr tDict2 ( NULL ); + pDict = SetupExactDict ( tDict2, pDict, *pTokenizer.Ptr() ); + + // parse query + XQQuery_t tParsed; + if ( !sphParseExtendedQuery ( tParsed, pQuery->m_sQuery.cstr(), pTokenizer.Ptr(), &m_tSchema, pDict, m_tSettings.m_iStopwordStep ) ) + { + pResult->m_sError = tParsed.m_sParseError; + return false; + } + + // transform query if needed (quorum transform, keyword expansion, etc.) + sphTransformExtendedQuery ( &tParsed.m_pRoot ); + + // expanding prefix in word dictionary case + XQNode_t * pPrefixed = ExpandPrefix ( tParsed.m_pRoot, pResult->m_sError, pResult ); + if ( !pPrefixed ) + return false; + tParsed.m_pRoot = pPrefixed; + + if ( m_bExpandKeywords ) + tParsed.m_pRoot = ExpandKeywords ( tParsed.m_pRoot, m_tSettings ); + + if ( !sphCheckQueryHeight ( tParsed.m_pRoot, pResult->m_sError ) ) + return false; + + // flag common subtrees + int iCommonSubtrees = 0; + if ( m_iMaxCachedDocs && m_iMaxCachedHits ) + iCommonSubtrees = sphMarkCommonSubtrees ( 1, &tParsed ); + + CSphQueryNodeCache tNodeCache ( iCommonSubtrees, m_iMaxCachedDocs, m_iMaxCachedHits ); + bool bResult = ParsedMultiQuery ( pQuery, pResult, iSorters, &dSorters[0], tParsed, pDict, pExtraFilters, &tNodeCache, iTag ); + + return bResult; +} + + +/// many regular queries with one sorter attached to each query. +/// returns true if at least one query succeeded. The failed queries indicated with pResult->m_iMultiplier==-1 +bool CSphIndex_VLN::MultiQueryEx ( int iQueries, const CSphQuery * pQueries, CSphQueryResult ** ppResults, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const +{ + // ensure we have multiple queries + if ( iQueries==1 ) + return MultiQuery ( pQueries, ppResults[0], 1, ppSorters, pExtraFilters, iTag ); + + MEMORY ( SPH_MEM_IDX_DISK_MULTY_QUERY_EX ); + + assert ( pQueries ); + assert ( ppResults ); + assert ( ppSorters ); + + ISphTokenizer * pTokenizer = m_pTokenizer->Clone ( false ); + + CSphScopedPtr tDictCloned ( NULL ); + CSphDict * pDictBase = m_pDict; + if ( pDictBase->HasState() ) + { + tDictCloned = pDictBase = pDictBase->Clone(); + } + + CSphScopedPtr tDict ( NULL ); + CSphDict * pDict = SetupStarDict ( tDict, pDictBase, *pTokenizer ); + + CSphScopedPtr tDict2 ( NULL ); + pDict = SetupExactDict ( tDict2, pDict, *pTokenizer ); + + CSphFixedVector dXQ ( iQueries ); + bool bResult = false; + bool bResultScan = false; + for ( int i=0; im_iMultiplier = -1; ///< show that this particular query failed + continue; + } + + // fast path for scans + if ( pQueries[i].m_sQuery.IsEmpty() ) + { + if ( MultiScan ( pQueries + i, ppResults[i], 1, &ppSorters[i], pExtraFilters, iTag ) ) + bResultScan = true; + else + ppResults[i]->m_iMultiplier = -1; ///< show that this particular query failed + continue; + } + + // parse query + if ( sphParseExtendedQuery ( dXQ[i], pQueries[i].m_sQuery.cstr(), pTokenizer, &m_tSchema, pDict, m_tSettings.m_iStopwordStep ) ) + { + // transform query if needed (quorum transform, keyword expansion, etc.) + sphTransformExtendedQuery ( &dXQ[i].m_pRoot ); + + // expanding prefix in word dictionary case + XQNode_t * pPrefixed = ExpandPrefix ( dXQ[i].m_pRoot, ppResults[i]->m_sError, ppResults[i] ); + if ( pPrefixed ) + { + dXQ[i].m_pRoot = pPrefixed; + + if ( m_bExpandKeywords ) + dXQ[i].m_pRoot = ExpandKeywords ( dXQ[i].m_pRoot, m_tSettings ); + + if ( sphCheckQueryHeight ( dXQ[i].m_pRoot, ppResults[i]->m_sError ) ) + { + bResult = true; + } else + { + ppResults[i]->m_iMultiplier = -1; + SafeDelete ( dXQ[i].m_pRoot ); + } + } else + { + ppResults[i]->m_iMultiplier = -1; + SafeDelete ( dXQ[i].m_pRoot ); + } + } else + { + ppResults[i]->m_sError = dXQ[i].m_sParseError; + ppResults[i]->m_iMultiplier = -1; + } + } + + // continue only if we have at least one non-failed + if ( bResult ) + { + int iCommonSubtrees = 0; + if ( m_iMaxCachedDocs && m_iMaxCachedHits ) + iCommonSubtrees = sphMarkCommonSubtrees ( iQueries, &dXQ[0] ); + + CSphQueryNodeCache tNodeCache ( iCommonSubtrees, m_iMaxCachedDocs, m_iMaxCachedHits ); + bResult = false; + for ( int j=0; jm_iMultiplier = iCommonSubtrees ? iQueries : 1; + } else + ppResults[j]->m_iMultiplier = -1; + } + + SafeDelete ( pTokenizer ); + return bResult | bResultScan; +} + +bool CSphIndex_VLN::ParsedMultiQuery ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const XQQuery_t & tXQ, CSphDict * pDict, const CSphVector * pExtraFilters, CSphQueryNodeCache * pNodeCache, int iTag ) const +{ + assert ( pQuery ); + assert ( pResult ); + assert ( ppSorters ); + assert ( !pQuery->m_sQuery.IsEmpty() && pQuery->m_eMode!=SPH_MATCH_FULLSCAN ); // scans must go through MultiScan() + assert ( iTag>=0 ); + + // start counting + int64_t tmQueryStart = sphMicroTimer(); + + /////////////////// + // setup searching + /////////////////// + + PROFILER_INIT (); + PROFILE_BEGIN ( query_init ); + + // non-ready index, empty response! + if ( !m_pPreread || !*m_pPreread ) + { + pResult->m_sError = "index not preread"; + return false; + } + + // select the sorter with max schema + int iMaxSchemaSize = -1; + int iMaxSchemaIndex = -1; + for ( int i=0; iGetSchema().GetRowSize() > iMaxSchemaSize ) + { + iMaxSchemaSize = ppSorters[i]->GetSchema().GetRowSize(); + iMaxSchemaIndex = i; + } + + // setup calculations and result schema + CSphQueryContext tCtx; + if ( !tCtx.SetupCalc ( pResult, ppSorters[iMaxSchemaIndex]->GetSchema(), m_tSchema, GetMVAPool() ) ) + return false; + + // set string pool for string on_sort expression fix up + tCtx.SetStringPool ( m_pStrings.GetWritePtr() ); + + // open files + CSphAutofile tDoclist, tHitlist, tWordlist, tDummy; + if ( !m_bKeepFilesOpen ) + { + if ( tDoclist.Open ( GetIndexFileName("spd"), SPH_O_READ, pResult->m_sError ) < 0 ) + return false; + + if ( tHitlist.Open ( GetIndexFileName ( m_uVersion>=3 ? "spp" : "spd" ), SPH_O_READ, pResult->m_sError ) < 0 ) + return false; + + if ( tWordlist.Open ( GetIndexFileName ( "spi" ), SPH_O_READ, pResult->m_sError ) < 0 ) + return false; + } + + // setup search terms + DiskIndexQwordSetup_c tTermSetup ( m_bKeepFilesOpen ? m_tDoclistFile : tDoclist, + m_bKeepFilesOpen ? m_tHitlistFile : tHitlist, + m_bPreloadWordlist ? tDummy : ( m_bKeepFilesOpen ? m_tWordlist.m_tFile : tWordlist ), + m_bPreloadWordlist ? 0 : m_tWordlist.m_iMaxChunk ); + + tTermSetup.m_pDict = pDict; + tTermSetup.m_pIndex = this; + tTermSetup.m_eDocinfo = m_tSettings.m_eDocinfo; + tTermSetup.m_tMin.m_iDocID = m_pMin->m_iDocID; + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + { + tTermSetup.m_tMin.Clone ( *m_pMin, m_tSchema.GetRowSize() ); + tTermSetup.m_iInlineRowitems = m_tSchema.GetRowSize(); + } + tTermSetup.m_iDynamicRowitems = pResult->m_tSchema.GetDynamicSize(); + + if ( pQuery->m_uMaxQueryMsec>0 ) + tTermSetup.m_iMaxTimer = sphMicroTimer() + pQuery->m_uMaxQueryMsec*1000; // max_query_time + tTermSetup.m_pWarning = &pResult->m_sWarning; + tTermSetup.m_bSetupReaders = true; + tTermSetup.m_pCtx = &tCtx; + tTermSetup.m_pNodeCache = pNodeCache; + + int iIndexWeight = pQuery->GetIndexWeight ( m_sIndexName.cstr() ); + + // bind weights + tCtx.BindWeights ( pQuery, m_tSchema, iIndexWeight ); + + // setup query + // must happen before index-level reject, in order to build proper keyword stats + CSphScopedPtr pRanker ( sphCreateRanker ( tXQ, pQuery, pResult, tTermSetup, tCtx ) ); + if ( !pRanker.Ptr() ) + return false; + + // empty index, empty response! + if ( m_bIsEmpty ) + return true; + assert ( m_tSettings.m_eDocinfo!=SPH_DOCINFO_EXTERN || !m_pDocinfo.IsEmpty() ); // check that docinfo is preloaded + + // setup filters + if ( !tCtx.CreateFilters ( pQuery->m_sQuery.IsEmpty(), &pQuery->m_dFilters, pResult->m_tSchema, GetMVAPool(), pResult->m_sError ) ) + return false; + if ( !tCtx.CreateFilters ( pQuery->m_sQuery.IsEmpty(), pExtraFilters, pResult->m_tSchema, GetMVAPool(), pResult->m_sError ) ) + return false; + + // check if we can early reject the whole index + if ( tCtx.m_pFilter && m_uDocinfoIndex ) + { + DWORD uStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + DWORD * pMinEntry = const_cast ( &m_pDocinfoIndex [ 2*m_uDocinfoIndex*uStride ] ); + DWORD * pMaxEntry = pMinEntry + uStride; + + if ( !tCtx.m_pFilter->EvalBlock ( pMinEntry, pMaxEntry ) ) + return true; + } + + // setup lookup + tCtx.m_bLookupFilter = ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN ) && pQuery->m_dFilters.GetLength(); + if ( tCtx.m_dCalcFilter.GetLength() || pQuery->m_eRanker==SPH_RANK_EXPR ) + tCtx.m_bLookupFilter = true; // suboptimal in case of attr-independent expressions, but we don't care + + tCtx.m_bLookupSort = false; + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN && !tCtx.m_bLookupFilter ) + for ( int iSorter=0; iSorterUsesAttrs() ) + tCtx.m_bLookupSort = true; + if ( tCtx.m_dCalcSort.GetLength() ) + tCtx.m_bLookupSort = true; // suboptimal in case of attr-independent expressions, but we don't care + + // setup sorters vs. MVA + for ( int i=0; iSetMVAPool ( m_pMva.GetWritePtr() ); + (ppSorters[i])->SetStringPool ( m_pStrings.GetWritePtr() ); + } + + // setup overrides + if ( !tCtx.SetupOverrides ( pQuery, pResult, m_tSchema ) ) + return false; + + PROFILE_END ( query_init ); + + ////////////////////////////////////// + // find and weight matching documents + ////////////////////////////////////// + + bool bFinalLookup = !tCtx.m_bLookupFilter && !tCtx.m_bLookupSort; + bool bFinalPass = bFinalLookup || tCtx.m_dCalcFinal.GetLength(); + int iMyTag = bFinalPass ? -1 : iTag; + + PROFILE_BEGIN ( query_match ); + switch ( pQuery->m_eMode ) + { + case SPH_MATCH_ALL: + case SPH_MATCH_PHRASE: + case SPH_MATCH_ANY: + case SPH_MATCH_EXTENDED: + case SPH_MATCH_EXTENDED2: + case SPH_MATCH_BOOLEAN: + if ( !MatchExtended ( &tCtx, pQuery, iSorters, ppSorters, pRanker.Ptr(), iMyTag ) ) + return false; + break; + + default: + sphDie ( "INTERNAL ERROR: unknown matching mode (mode=%d)", pQuery->m_eMode ); + } + PROFILE_END ( query_match ); + + //////////////////// + // cook result sets + //////////////////// + + // adjust result sets + for ( int iSorter=0; iSorterGetLength() && bFinalPass ) + { + const int iCount = pTop->GetLength (); + CSphMatch * const pHead = pTop->First(); + CSphMatch * const pTail = pHead + iCount; + + for ( CSphMatch * pCur=pHead; pCurm_iTag<0 ) + { + if ( bFinalLookup ) + CopyDocinfo ( &tCtx, *pCur, FindDocinfo ( pCur->m_iDocID ) ); + tCtx.CalcFinal ( *pCur ); + pCur->m_iTag = iTag; + } + } + + // mva and string pools ptrs + pResult->m_pMva = m_pMva.GetWritePtr(); + pResult->m_pStrings = m_pStrings.GetWritePtr(); + } + + PROFILER_DONE (); + PROFILE_SHOW (); + + // query timer + pResult->m_iQueryTime += (int)( ( sphMicroTimer()-tmQueryStart )/1000 ); + return true; +} + +////////////////////////////////////////////////////////////////////////// +// INDEX CHECKING +////////////////////////////////////////////////////////////////////////// + +#define LOC_FAIL(_args) \ + if ( ++iFails<=FAILS_THRESH ) \ + { \ + fprintf ( fp, "FAILED, " ); \ + fprintf _args; \ + fprintf ( fp, "\n" ); \ + iFailsPrinted++; \ + \ + if ( iFails==FAILS_THRESH ) \ + fprintf ( fp, "(threshold reached; suppressing further output)\n" ); \ + } + +static int DictCmpStrictly ( const char * pStr1, int iLen1, const char * pStr2, int iLen2 ); + +int CSphIndex_VLN::DebugCheck ( FILE * fp ) +{ + int64_t tmCheck = sphMicroTimer(); + int iFails = 0; + int iFailsPrinted = 0; + const int FAILS_THRESH = 100; + + // check if index is ready + if ( m_dShared.GetNumEntries()!=SPH_SHARED_VARS_COUNT || !m_pPreread || !*m_pPreread ) + LOC_FAIL(( fp, "index not preread" )); + + bool bProgress = isatty ( fileno ( fp ) )!=0; + + ////////////// + // open files + ////////////// + + CSphString sError; + CSphAutoreader rdDict, rdDocs, rdHits; + + if ( !rdDict.Open ( GetIndexFileName("spi"), sError ) ) + LOC_FAIL(( fp, "unable to open dictionary: %s", sError.cstr() )); + + if ( !rdDocs.Open ( GetIndexFileName("spd"), sError ) ) + LOC_FAIL(( fp, "unable to open doclist: %s", sError.cstr() )); + + if ( !rdHits.Open ( GetIndexFileName("spp"), sError ) ) + LOC_FAIL(( fp, "unable to open hitlist: %s", sError.cstr() )); + + //////////////////// + // check dictionary + //////////////////// + + fprintf ( fp, "checking dictionary...\n" ); + + SphWordID_t uWordid = 0; + int64_t iDoclistOffset = 0; + int iWordsTotal = 0; + + char sWord[MAX_KEYWORD_BYTES], sLastWord[MAX_KEYWORD_BYTES]; + memset ( sLastWord, 0, sizeof(sLastWord) ); + + const int iWordPerCP = m_uVersion>=21 ? WORDLIST_CHECKPOINT : 1024; + const bool bWordDict = m_pDict->GetSettings().m_bWordDict; + + CSphVector dCheckpoints; + + if ( bWordDict && m_uVersion<21 ) + LOC_FAIL(( fp, "dictionary needed index version not less then 21 (readed=%d)" + , m_uVersion )); + + rdDict.SeekTo ( 1, READ_NO_SIZE_HINT ); + for ( ; rdDict.GetPos()!=m_tWordlist.m_iCheckpointsPos && !m_bIsEmpty; ) + { + // sanity checks + if ( rdDict.GetPos()>=m_tWordlist.m_iCheckpointsPos ) + { + LOC_FAIL(( fp, "reading past checkpoints" )); + break; + } + + // store current entry pos (for checkpointing later), read next delta + const int64_t iDictPos = rdDict.GetPos(); + const SphWordID_t iDeltaWord = bWordDict ? rdDict.GetByte() : rdDict.UnzipWordid(); + + // checkpoint encountered, handle it + if ( !iDeltaWord ) + { + rdDict.UnzipOffset(); + + if ( ( iWordsTotal%iWordPerCP )!=0 && rdDict.GetPos()!=m_tWordlist.m_iCheckpointsPos ) + LOC_FAIL(( fp, "unexpected checkpoint (pos="INT64_FMT", word=%d, words=%d, expected=%d)", + iDictPos, iWordsTotal, ( iWordsTotal%iWordPerCP ), iWordPerCP )); + + uWordid = 0; + iDoclistOffset = 0; + continue; + } + + SphWordID_t uNewWordid = 0; + SphOffset_t iNewDoclistOffset = 0; + int iDocs = 0; + int iHits = 0; + + if ( bWordDict ) + { + // unpack next word + // must be in sync with DictEnd()! + BYTE uPack = (BYTE)iDeltaWord; + int iMatch, iDelta; + if ( uPack & 0x80 ) + { + iDelta = ( ( uPack>>4 ) & 7 ) + 1; + iMatch = uPack & 15; + } else + { + iDelta = uPack & 127; + iMatch = rdDict.GetByte(); + } + const int iLastWordLen = strlen(sLastWord); + if ( iMatch+iDelta>=(int)sizeof(sLastWord)-1 || iMatch>iLastWordLen ) + { + LOC_FAIL(( fp, "wrong word-delta (pos="INT64_FMT", word=%s, len=%d, begin=%d, delta=%d)", + iDictPos, sLastWord, iLastWordLen, iMatch, iDelta )); + rdDict.SkipBytes ( iDelta ); + } else + { + rdDict.GetBytes ( sWord + iMatch, iDelta ); + sWord [ iMatch+iDelta ] = '\0'; + } + + iNewDoclistOffset = rdDict.UnzipOffset(); + iDocs = rdDict.UnzipInt(); + iHits = rdDict.UnzipInt(); + int iHint = ( iDocs>=DOCLIST_HINT_THRESH ) ? rdDict.GetByte() : 0; + iHint = DoclistHintUnpack ( iDocs, (BYTE)iHint ); + + const int iNewWordLen = strlen(sWord); + + if ( iNewWordLen==0 ) + LOC_FAIL(( fp, "empty word in dictionary (pos="INT64_FMT")", + iDictPos )); + + if ( iLastWordLen && iNewWordLen ) + if ( DictCmpStrictly ( sWord, iNewWordLen, sLastWord, iLastWordLen )<=0 ) + LOC_FAIL(( fp, "word order decreased (pos="INT64_FMT", word=%s, prev=%s)", + iDictPos, sLastWord, sWord )); + + if ( iHint<0 ) + LOC_FAIL(( fp, "invalid word hint (pos="INT64_FMT", word=%s, hint=%d)", + iDictPos, sWord, iHint )); + + if ( iDocs<=0 || iHits<=0 || iHits>4 ) & 7 ) + 1; + iMatch = uPack & 15; + } else + { + iDelta = uPack & 127; + iMatch = rdDict.GetByte(); + } + const int iLastWordLen = strlen(sLastWord); + if ( iMatch+iDelta>=(int)sizeof(sLastWord)-1 || iMatch>iLastWordLen ) + rdDict.SkipBytes ( iDelta ); + else + { + rdDict.GetBytes ( sWord + iMatch, iDelta ); + sWord [ iMatch+iDelta ] = '\0'; + } + + iDoclistOffset = rdDict.UnzipOffset(); + iDictDocs = rdDict.UnzipInt(); + iDictHits = rdDict.UnzipInt(); + int iHint = ( iDictDocs>=DOCLIST_HINT_THRESH ) ? rdDict.GetByte() : 0; + iHint = DoclistHintUnpack ( iDictDocs, (BYTE)iHint ); + } else + { + // finish reading the entire entry + uWordid = uWordid + iDeltaWord; + iDoclistOffset = iDoclistOffset + rdDict.UnzipOffset(); + iDictDocs = rdDict.UnzipInt(); + iDictHits = rdDict.UnzipInt(); + } + + // check whether the offset is as expected + if ( iDoclistOffset!=rdDocs.GetPos() ) + { + if ( !bWordDict ) + LOC_FAIL(( fp, "unexpected doclist offset (wordid="UINT64_FMT"(%s)(%d), dictpos="INT64_FMT", doclistpos="INT64_FMT")", + (uint64_t)uWordid, sWord, iWordsChecked, iDoclistOffset, (int64_t)rdDocs.GetPos() )); + + if ( iDoclistOffset>=iDocsSize ) + { + LOC_FAIL(( fp, "unexpected doclist offset, off the file (wordid="UINT64_FMT"(%s)(%d), dictpos="INT64_FMT", doclistsize="INT64_FMT")", + (uint64_t)uWordid, sWord, iWordsChecked, iDoclistOffset, iDocsSize )); + iWordsChecked++; + continue; + } else + rdDocs.SeekTo ( iDoclistOffset, READ_NO_SIZE_HINT ); + } + + // create and manually setup doclist reader + DiskIndexQwordTraits_c * pQword = NULL; + WITH_QWORD ( this, false, T, pQword = new T ( false, false ) ); + + pQword->m_tDoc.Reset ( m_tSchema.GetDynamicSize() ); + pQword->m_iMinID = m_pMin->m_iDocID; + pQword->m_tDoc.m_iDocID = m_pMin->m_iDocID; + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_INLINE ) + { + pQword->m_iInlineAttrs = m_tSchema.GetDynamicSize(); + pQword->m_pInlineFixup = m_pMin->m_pDynamic; + } else + { + pQword->m_iInlineAttrs = 0; + pQword->m_pInlineFixup = NULL; + } + pQword->m_iDocs = 0; + pQword->m_iHits = 0; + pQword->m_rdDoclist.SetFile ( rdDocs.GetFD(), rdDocs.GetFilename().cstr() ); + pQword->m_rdDoclist.SeekTo ( rdDocs.GetPos(), READ_NO_SIZE_HINT ); + pQword->m_rdHitlist.SetFile ( rdHits.GetFD(), rdHits.GetFilename().cstr() ); + pQword->m_rdHitlist.SeekTo ( rdHits.GetPos(), READ_NO_SIZE_HINT ); + + CSphRowitem * pInlineStorage = NULL; + if ( pQword->m_iInlineAttrs ) + pInlineStorage = new CSphRowitem [ pQword->m_iInlineAttrs ]; + + // loop the doclist + SphDocID_t uLastDocid = 0; + int iDoclistDocs = 0; + int iDoclistHits = 0; + int iHitlistHits = 0; + + for ( ;; ) + { + const CSphMatch & tDoc = pQword->GetNextDoc ( pInlineStorage ); + if ( !tDoc.m_iDocID ) + break; + + // checks! + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN ) + { + const CSphRowitem * pFound = FindDocinfo ( tDoc.m_iDocID ); + if ( !pFound ) + LOC_FAIL(( fp, "row not found (wordid="UINT64_FMT"(%s), docid="DOCID_FMT")", + uint64_t(uWordid), sWord, tDoc.m_iDocID )); + + if ( pFound ) + if ( tDoc.m_iDocID!=DOCINFO2ID(pFound) ) + LOC_FAIL(( fp, "row found but id mismatches (wordid="UINT64_FMT"(%s), docid="DOCID_FMT", found="DOCID_FMT")", + uint64_t(uWordid), sWord, tDoc.m_iDocID, DOCINFO2ID(pFound) )); + } + + if ( tDoc.m_iDocID<=uLastDocid ) + LOC_FAIL(( fp, "docid decreased (wordid="UINT64_FMT"(%s), docid="DOCID_FMT", lastid="DOCID_FMT")", + uint64_t(uWordid), sWord, tDoc.m_iDocID, uLastDocid )); + + uLastDocid = tDoc.m_iDocID; + iDoclistDocs++; + iDoclistHits += pQword->m_uMatchHits; + + // check position in case of regular (not-inline) hit + if (!( pQword->m_iHitlistPos>>63 )) + { + if ( !bWordDict && pQword->m_iHitlistPos!=pQword->m_rdHitlist.GetPos() ) + LOC_FAIL(( fp, "unexpected hitlist offset (wordid="UINT64_FMT"(%s), docid="DOCID_FMT", expected="INT64_FMT", actual="INT64_FMT")", + (uint64_t)uWordid, sWord, pQword->m_tDoc.m_iDocID, + (int64_t)pQword->m_iHitlistPos, (int64_t)pQword->m_rdHitlist.GetPos() )); + } + + // aim + pQword->SeekHitlist ( pQword->m_iHitlistPos ); + + // loop the hitlist + int iDocHits = 0; + CSphSmallBitvec dFieldMask; + dFieldMask.Unset(); + Hitpos_t uLastHit = EMPTY_HIT; + + for ( ;; ) + { + Hitpos_t uHit = pQword->GetNextHit(); + if ( uHit==EMPTY_HIT ) + break; + + if (!( uLastHitm_tDoc.m_iDocID, uHit, uLastHit )); + uLastHit = uHit; + + int iField = HITMAN::GetField ( uHit ); + if ( iField<0 || iField>=SPH_MAX_FIELDS ) + { + LOC_FAIL(( fp, "hit field out of bounds (wordid="UINT64_FMT"(%s), docid="DOCID_FMT", field=%d)", + (uint64_t)uWordid, sWord, pQword->m_tDoc.m_iDocID, iField )); + + } else if ( iField>=m_tSchema.m_dFields.GetLength() ) + { + LOC_FAIL(( fp, "hit field out of schema (wordid="UINT64_FMT"(%s), docid="DOCID_FMT", field=%d)", + (uint64_t)uWordid, sWord, pQword->m_tDoc.m_iDocID, iField )); + } + + dFieldMask.Set(iField); + iDocHits++; // to check doclist entry + iHitlistHits++; // to check dictionary entry + } + + // check hit count + if ( iDocHits!=(int)pQword->m_uMatchHits ) + LOC_FAIL(( fp, "doc hit count mismatch (wordid="UINT64_FMT"(%s), docid="DOCID_FMT", doclist=%d, hitlist=%d)", + (uint64_t)uWordid, sWord, pQword->m_tDoc.m_iDocID, pQword->m_uMatchHits, iDocHits )); + + // check the mask + if ( dFieldMask!=pQword->m_dFields ) + LOC_FAIL(( fp, "field mask mismatch (wordid="UINT64_FMT"(%s), docid="DOCID_FMT")", + (uint64_t)uWordid, sWord, pQword->m_tDoc.m_iDocID )); + + // update my hitlist reader + rdHits.SeekTo ( pQword->m_rdHitlist.GetPos(), READ_NO_SIZE_HINT ); + } + + // do checks + if ( iDictDocs!=iDoclistDocs ) + LOC_FAIL(( fp, "doc count mismatch (wordid="UINT64_FMT"(%s), dict=%d, doclist=%d)", + uint64_t(uWordid), sWord, iDictDocs, iDoclistDocs )); + + if ( iDictHits!=iDoclistHits || iDictHits!=iHitlistHits ) + LOC_FAIL(( fp, "hit count mismatch (wordid="UINT64_FMT"(%s), dict=%d, doclist=%d, hitlist=%d)", + uint64_t(uWordid), sWord, iDictHits, iDoclistHits, iHitlistHits )); + + // move my reader instance forward too + rdDocs.SeekTo ( pQword->m_rdDoclist.GetPos(), READ_NO_SIZE_HINT ); + + // cleanup + SafeDelete ( pInlineStorage ); + SafeDelete ( pQword ); + + // progress bar + if ( (++iWordsChecked)%1000==0 && bProgress ) + { + fprintf ( fp, "%d/%d\r", iWordsChecked, iWordsTotal ); + fflush ( fp ); + } + } + + /////////////////////////// + // check rows (attributes) + /////////////////////////// + + if ( m_tSettings.m_eDocinfo==SPH_DOCINFO_EXTERN && !m_pDocinfo.IsEmpty() ) + { + fprintf ( fp, "checking rows...\n" ); + + // sizes and counts + DWORD uRowsTotal = m_uDocinfo; + DWORD uStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + + DWORD uAllRowsTotal = uRowsTotal; + uAllRowsTotal += 2*(1+m_uDocinfoIndex); // should had been fixed up to v.20 by the loader + + if ( uAllRowsTotal*uStride!=m_pDocinfo.GetNumEntries() ) + LOC_FAIL(( fp, "rowitems count mismatch (expected=%u, loaded="INT64_FMT")", + uAllRowsTotal*uStride, (int64_t)m_pDocinfo.GetNumEntries() )); + + // extract rowitem indexes for MVAs etc + // (ie. attr types that we can and will run additional checks on) + CSphVector dMvaItems; + CSphVector dFloatItems; + CSphVector dStrItems; + for ( int i=0; i dStringOffsets; + if ( m_pStrings.GetNumEntries()>1 ) + { + const BYTE * pBase = m_pStrings.GetWritePtr(); + const BYTE * pCur = pBase + 1; + const BYTE * pMax = pBase + m_pStrings.GetNumEntries(); + while ( pCurpMax || pStrpCur+4 ) + { + LOC_FAIL(( fp, "string length out of bounds (offset=%u, len=%d)", (DWORD)(pCur-pBase), iLen )); + break; + } + + dStringOffsets.Add ( (DWORD)(pCur-pBase) ); + pCur = pStr + iLen; + } + } + + // loop the rows + const CSphRowitem * pRow = m_pDocinfo.GetWritePtr(); + const DWORD * pMvaBase = m_pMva.GetWritePtr(); + const DWORD * pMvaMax = pMvaBase + m_pMva.GetNumEntries(); + const DWORD * pMva = pMvaBase; + + int iOrphan = 0; + SphDocID_t uLastID = 0; + + for ( DWORD uRow=0; uRow=pMvaMax ) + { + bIsSpaValid = false; + LOC_FAIL(( fp, "MVA index out of bounds (row=%u, mvaattr=%d, docid="DOCID_FMT", index=%u)", + uRow, iItem, uLastID, uOffset )); + } + + if ( uOffset && pMvaBase+uOffset=pMvaMax ) + { + LOC_FAIL(( fp, "MVA index out of bounds (row=%u, mvaattr=%d, docid expected="DOCID_FMT", got="DOCID_FMT", index=%u)", + uRow, iItem, uLastID, uMvaID, (DWORD)(pMva-pMvaBase) )); + bIsMvaCorrect = false; + continue; + } + + // check values + DWORD uValues = *pMva++; + + if ( pMva+uValues-1>=pMvaMax ) + { + LOC_FAIL(( fp, "MVA count out of bounds (row=%u, mvaattr=%d, docid expected="DOCID_FMT", got="DOCID_FMT", count=%u)", + uRow, iItem, uLastID, uMvaID, uValues )); + pMva += uValues; + bIsMvaCorrect = false; + continue; + } + // check that values are ascending + for ( DWORD uVal=(iItem>=iMva64 ? 2 : 1); uVal=iMva64 ) + { + uPrev = MVA_UPSIZE ( pMva+uVal-2 ); + uCur = MVA_UPSIZE ( pMva+uVal ); + uVal += 2; + } else + { + uPrev = pMva[uVal-1]; + uCur = pMva[uVal]; + uVal++; + } + + if ( uCur<=uPrev ) + { + LOC_FAIL(( fp, "unsorted MVA values (row=%u, mvaattr=%d, docid expected="DOCID_FMT", got="DOCID_FMT", val[%u]=%u, val[%u]=%u)", + uRow, iItem, uLastID, uMvaID, ( iItem>=iMva64 ? uVal-2 : uVal-1 ), uPrev, uVal, uCur )); + bIsMvaCorrect = false; + } + + uVal += ( iItem>=iMva64 ? 2 : 1 ); + } + pMva += uValues; + } + + if ( !bIsMvaCorrect ) + break; + + // orphan only ON no errors && ( not matched ids || ids matched multiply times ) + if ( bIsMvaCorrect && ( uMvaID!=uLastID || ( uMvaID==uLastID && bLastIDChecked ) ) ) + iOrphan++; + + bLastIDChecked |= uLastID==uMvaID; + } + + if ( !bLastIDChecked && bHasValues ) + LOC_FAIL(( fp, "missed or damaged MVA (row=%u, docid expected="DOCID_FMT")", + uRow, uLastID )); + } + + /////////////////////////// + // check floats + /////////////////////////// + + ARRAY_FOREACH ( iItem, dFloatItems ) + { + const CSphRowitem * pAttrs = DOCINFO2ATTRS(pRow); + const DWORD uValue = (DWORD)sphGetRowAttr ( pAttrs, dFloatItems[ iItem ] ); + const DWORD uExp = ( uValue >> 23 ) & 0xff; + const DWORD uMantissa = uValue & 0x003fffff; + + // check normalized + if ( uExp==0 && uMantissa!=0 ) + LOC_FAIL(( fp, "float attribute value is unnormalized (row=%u, attr=%d, id="DOCID_FMT", raw=0x%x, value=%f)", + uRow, iItem, uLastID, uValue, sphDW2F ( uValue ) )); + + // check +-inf + if ( uExp==0xff && uMantissa==0 ) + LOC_FAIL(( fp, "float attribute is infinity (row=%u, attr=%d, id="DOCID_FMT", raw=0x%x, value=%f)", + uRow, iItem, uLastID, uValue, sphDW2F ( uValue ) )); + } + + ///////////////// + // check strings + ///////////////// + + ARRAY_FOREACH ( iItem, dStrItems ) + { + const CSphRowitem * pAttrs = DOCINFO2ATTRS(pRow); + + const DWORD uOffset = (DWORD)sphGetRowAttr ( pAttrs, dStrItems[ iItem ] ); + if ( uOffset>=m_pStrings.GetNumEntries() ) + { + LOC_FAIL(( fp, "string offset out of bounds (row=%u, stringattr=%d, docid="DOCID_FMT", index=%u)", + uRow, iItem, uLastID, uOffset )); + continue; + } + + if ( !uOffset ) + continue; + + const BYTE * pStr = NULL; + const int iLen = sphUnpackStr ( m_pStrings.GetWritePtr() + uOffset, &pStr ); + + // check that length is sane + if ( pStr+iLen-1>=m_pStrings.GetWritePtr()+m_pStrings.GetLength() ) + { + LOC_FAIL(( fp, "string length out of bounds (row=%u, stringattr=%d, docid="DOCID_FMT", index=%u)", + uRow, iItem, uLastID, (unsigned int)( pStr-m_pStrings.GetWritePtr()+iLen-1 ) )); + continue; + } + + // check that offset is one of the good ones + // (that is, that we don't point in the middle of some other data) + if ( !dStringOffsets.BinarySearch ( uOffset ) ) + { + LOC_FAIL(( fp, "string offset is not a string start (row=%u, stringattr=%d, docid="DOCID_FMT", offset=%u)", + uRow, iItem, uLastID, uOffset )); + } + } + + // progress bar + if ( uRow%1000==0 && bProgress ) + { + fprintf ( fp, "%d/%d\r", uRow, uRowsTotal ); + fflush ( fp ); + } + } + + if ( iOrphan ) + fprintf ( fp, "WARNING: %d orphaned MVA entries were found\n", iOrphan ); + + /////////////////////////// + // check blocks index + /////////////////////////// + + fprintf ( fp, "checking attribute blocks index...\n" ); + + // check size + const DWORD uTempDocinfoIndex = ( m_uDocinfo+DOCINFO_INDEX_FREQ-1 ) / DOCINFO_INDEX_FREQ; + if ( uTempDocinfoIndex!=m_uDocinfoIndex ) + LOC_FAIL(( fp, "block count differs (expected=%d, got=%d)", + uTempDocinfoIndex, m_uDocinfoIndex )); + + const DWORD uMinMaxStride = DOCINFO_IDSIZE + m_tSchema.GetRowSize(); + const DWORD * pDocinfoIndexMax = m_pDocinfoIndex + 2*( 1+m_uDocinfoIndex )*uMinMaxStride; + + for ( DWORD uIndexEntry=0; uIndexEntry pDocinfoIndexMax ) + LOC_FAIL(( fp, "unexpected block index end (row=%u, docid="DOCID_FMT", block=%d, max=%u, cur=%u)", + uIndexEntry, uDocID, uBlock, (DWORD)(pDocinfoIndexMax-m_pDocinfoIndex), (DWORD)(pMaxEntry+uMinMaxStride-m_pDocinfoIndex) )); + + // check attribute location vs global range + if ( pMaxAttrs+uMinMaxStride > pDocinfoIndexMax ) + LOC_FAIL(( fp, "attribute position out of blocks index (row=%u, docid="DOCID_FMT", block=%u, expected<%u, got=%u)", + uIndexEntry, uDocID, uBlock, (DWORD)(pDocinfoIndexMax-m_pDocinfoIndex), (DWORD)(pMaxAttrs+uMinMaxStride-m_pDocinfoIndex) )); + + const SphDocID_t uMinDocID = *(SphDocID_t*)pMinEntry; + const SphDocID_t uMaxDocID = *(SphDocID_t*)pMaxEntry; + + // checks is docid min max range valid + if ( uMinDocID > uMaxDocID && bIsBordersCheckTime ) + LOC_FAIL(( fp, "invalid docid range (row=%u, block=%d, min="DOCID_FMT", max="DOCID_FMT")", + uIndexEntry, uBlock, uMinDocID, uMaxDocID )); + + // checks docid vs blocks range + if ( uDocID < uMinDocID || uDocID > uMaxDocID ) + LOC_FAIL(( fp, "unexpected docid range (row=%u, docid="DOCID_FMT", block=%d, min="DOCID_FMT", max="DOCID_FMT")", + uIndexEntry, uDocID, uBlock, uMinDocID, uMaxDocID )); + + bool bIsFirstMva = true; + + // check values vs blocks range + const DWORD * pSpaRow = DOCINFO2ATTRS(pAttr); + for ( int iItem=0; iItem uMax && bIsBordersCheckTime ) + LOC_FAIL(( fp, "invalid attribute range (row=%u, block=%d, min="INT64_FMT", max="INT64_FMT")", + uIndexEntry, uBlock, uMin, uMax )); + + if ( uVal < uMin || uVal > uMax ) + LOC_FAIL(( fp, "unexpected attribute value (row=%u, attr=%u, docid="DOCID_FMT", block=%d, value=0x%x, min=0x%x, max=0x%x)", + uIndexEntry, iItem, uDocID, uBlock, (DWORD)uVal, (DWORD)uMin, (DWORD)uMax )); + } + break; + + case SPH_ATTR_FLOAT: + { + const float fVal = sphDW2F ( (DWORD)sphGetRowAttr ( pSpaRow, tCol.m_tLocator ) ); + const float fMin = sphDW2F ( (DWORD)sphGetRowAttr ( pMinAttrs, tCol.m_tLocator ) ); + const float fMax = sphDW2F ( (DWORD)sphGetRowAttr ( pMaxAttrs, tCol.m_tLocator ) ); + + // checks is attribute min max range valid + if ( fMin > fMax && bIsBordersCheckTime ) + LOC_FAIL(( fp, "invalid attribute range (row=%u, block=%d, min=%f, max=%f)", + uIndexEntry, uBlock, fMin, fMax )); + + if ( fVal < fMin || fVal > fMax ) + LOC_FAIL(( fp, "unexpected attribute value (row=%u, attr=%u, docid="DOCID_FMT", block=%d, value=%f, min=%f, max=%f)", + uIndexEntry, iItem, uDocID, uBlock, fVal, fMin, fMax )); + } + break; + + case SPH_ATTR_UINT32SET: + { + const DWORD uMin = (DWORD)sphGetRowAttr ( pMinAttrs, tCol.m_tLocator ); + const DWORD uMax = (DWORD)sphGetRowAttr ( pMaxAttrs, tCol.m_tLocator ); + + // checks is MVA attribute min max range valid + if ( uMin > uMax && bIsBordersCheckTime && uMin!=0xffffffff && uMax!=0 ) + LOC_FAIL(( fp, "invalid MVA range (row=%u, block=%d, min=0x%x, max=0x%x)", + uIndexEntry, uBlock, uMin, uMax )); + + SphAttr_t uOff = sphGetRowAttr ( pSpaRow, tCol.m_tLocator ); + if ( !uOff ) + break; + + const DWORD * pMva = m_pMva.GetWritePtr() + uOff; + const DWORD * pMvaDocID = bIsFirstMva ? ( pMva - sizeof(SphDocID_t) / sizeof(DWORD) ) : NULL; + bIsFirstMva = false; + + if ( uOff>=(SphAttr_t)m_pMva.GetNumEntries() ) + break; + + if ( pMvaDocID && DOCINFO2ID ( pMvaDocID )!=uDocID ) + { + LOC_FAIL(( fp, "unexpected MVA docid (row=%u, mvaattr=%d, expected="DOCID_FMT", got="DOCID_FMT", block=%d, index=%u)", + uIndexEntry, iItem, uDocID, DOCINFO2ID ( pMvaDocID ), uBlock, (DWORD)uOff )); + break; + } + + // check values + const DWORD uValues = *pMva++; + if ( uOff+uValues>(SphAttr_t)m_pMva.GetNumEntries() ) + break; + + for ( DWORD iVal=0; iVal uMax ) + LOC_FAIL(( fp, "unexpected MVA value (row=%u, attr=%u, docid="DOCID_FMT", block=%d, index=%u, value=0x%x, min=0x%x, max=0x%x)", + uIndexEntry, iItem, uDocID, uBlock, iVal, (DWORD)uVal, (DWORD)uMin, (DWORD)uMax )); + } + } + break; + + default: + break; + } + } + + // progress bar + if ( uIndexEntry%1000==0 && bProgress ) + { + fprintf ( fp, "%d/%d\r", uIndexEntry, m_uDocinfo ); + fflush ( fp ); + } + } + } + + /////////////////////////// + // check kill-list + /////////////////////////// + + fprintf ( fp, "checking kill-list...\n" ); + + // check size + if ( m_pKillList.GetNumEntries()!=m_iKillListSize ) + LOC_FAIL(( fp, "kill-list size differs (expected=%d, got="INT64_FMT")", + m_iKillListSize, (int64_t)m_pKillList.GetNumEntries() )); + + // check that ids are ascending + for ( DWORD uID=1; uID m_dNormalForms; + CSphMultiformContainer * m_pMultiWordforms; + CSphOrderedHash < int, CSphString, CSphStrHashFunc, 1048576, 117 > m_dHash; + + WordformContainer_t (); + ~WordformContainer_t (); + + bool IsEqual ( const char * szFile, DWORD uCRC32 ); +}; + + +/// common CRC32/64 dictionary stuff +struct CSphDictCRCTraits : CSphDict +{ + CSphDictCRCTraits (); + virtual ~CSphDictCRCTraits (); + + virtual void LoadStopwords ( const char * sFiles, ISphTokenizer * pTokenizer ); + virtual bool LoadWordforms ( const char * szFile, ISphTokenizer * pTokenizer, const char * sIndex ); + virtual bool SetMorphology ( const char * szMorph, bool bUseUTF8, CSphString & sError ); + virtual bool HasMorphology() const; + virtual void ApplyStemmers ( BYTE * pWord ); + + virtual void Setup ( const CSphDictSettings & tSettings ) { m_tSettings = tSettings; } + virtual const CSphDictSettings & GetSettings () const { return m_tSettings; } + virtual const CSphVector & GetStopwordsFileInfos () { return m_dSWFileInfos; } + virtual const CSphSavedFile & GetWordformsFileInfo () { return m_tWFFileInfo; } + virtual const CSphMultiformContainer * GetMultiWordforms () const { return m_pWordforms ? m_pWordforms->m_pMultiWordforms : NULL; } + + static void SweepWordformContainers ( const char * szFile, DWORD uCRC32 ); + + virtual void DictBegin ( int iTmpDictFD, int iDictFD, int iDictLimit ); + virtual void DictEntry ( SphWordID_t uWordID, BYTE * sKeyword, int iDocs, int iHits, SphOffset_t iDoclistOffset, SphOffset_t iDoclistLength ); + virtual void DictEndEntries ( SphOffset_t iDoclistOffset ); + virtual bool DictEnd ( SphOffset_t * pCheckpointsPos, int * pCheckpointsCount, int iMemLimit, CSphString & sError ); + virtual bool DictIsError () const { return m_wrDict.IsError(); } + +protected: + CSphVector < int > m_dMorph; +#if USE_LIBSTEMMER + CSphVector < sb_stemmer * > m_dStemmers; + struct DescStemmer_t + { + CSphString m_sAlgo; + CSphString m_sEnc; + }; + CSphVector m_dDescStemmers; +#endif + + int m_iStopwords; ///< stopwords count + SphWordID_t * m_pStopwords; ///< stopwords ID list + CSphFixedVector m_dStopwordContainer; + +protected: + bool ToNormalForm ( BYTE * pWord ); + bool ParseMorphology ( const char * szMorph, bool bUseUTF8, CSphString & sError ); + SphWordID_t FilterStopword ( SphWordID_t uID ) const; ///< filter ID against stopwords list + CSphDict * CloneBase ( CSphDictCRCTraits * pDict ) const; + virtual bool HasState () const; + + CSphWriter m_wrDict; ///< final dict file writer + CSphTightVector m_dCheckpoints; ///< checkpoint offsets + int m_iEntries; ///< dictionary entries stored + SphOffset_t m_iLastDoclistPos; + SphWordID_t m_iLastWordID; + +private: + WordformContainer_t * m_pWordforms; + CSphVector m_dSWFileInfos; + CSphSavedFile m_tWFFileInfo; + CSphDictSettings m_tSettings; + + static CSphVector m_dWordformContainers; + + static WordformContainer_t * GetWordformContainer ( const char * szFile, DWORD uCRC32, const ISphTokenizer * pTokenizer, const char * sIndex ); + static WordformContainer_t * LoadWordformContainer ( const char * szFile, DWORD uCRC32, const ISphTokenizer * pTokenizer, const char * sIndex ); + + bool InitMorph ( const char * szMorph, int iLength, bool bUseUTF8, CSphString & sError ); + bool AddMorph ( int iMorph ); + bool StemById ( BYTE * pWord, int iStemmer ); +}; + +CSphVector < WordformContainer_t * > CSphDictCRCTraits::m_dWordformContainers; + + +/// specialized CRC32/64 implementations +template < bool CRC32DICT > +struct CSphDictCRC : public CSphDictCRCTraits +{ + inline SphWordID_t DoCrc ( const BYTE * pWord ) const; + inline SphWordID_t DoCrc ( const BYTE * pWord, int iLen ) const; + + virtual SphWordID_t GetWordID ( BYTE * pWord ); + virtual SphWordID_t GetWordID ( const BYTE * pWord, int iLen, bool bFilterStops ); + virtual SphWordID_t GetWordIDWithMarkers ( BYTE * pWord ); + virtual SphWordID_t GetWordIDNonStemmed ( BYTE * pWord ); + virtual bool IsStopWord ( const BYTE * pWord ) const; + + virtual CSphDict * Clone () const { return CloneBase ( new CSphDictCRC() ); } +}; + +///////////////////////////////////////////////////////////////////////////// + +DWORD g_dSphinxCRC32 [ 256 ] = +{ + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, + 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, + 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, + 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, + 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, + 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, + 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, + 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, + 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, + 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, + 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, + 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, + 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, + 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, + 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, + 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, + 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, + 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, + 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, + 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, + 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, + 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, + 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, + 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, + 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, + 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, + 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, + 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, + 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, + 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, + 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, + 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, + 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, + 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, + 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, +}; + + +DWORD sphCRC32 ( const BYTE * pString ) +{ + // calc CRC + DWORD crc = ~((DWORD)0); + for ( const BYTE * p=pString; *p; p++ ) + crc = (crc >> 8) ^ g_dSphinxCRC32 [ (crc ^ (*p)) & 0xff ]; + return ~crc; +} + +DWORD sphCRC32 ( const BYTE * pString, int iLen ) +{ + // calc CRC + DWORD crc = ~((DWORD)0); + for ( int i=0; i> 8) ^ g_dSphinxCRC32 [ (crc ^ pString[i]) & 0xff ]; + return ~crc; +} + +DWORD sphCRC32 ( const BYTE * pString, int iLen, DWORD uPrevCRC ) +{ + // calc CRC + DWORD crc = ~((DWORD)uPrevCRC); + for ( int i=0; i> 8) ^ g_dSphinxCRC32 [ (crc ^ pString[i]) & 0xff ]; + return ~crc; +} + +///////////////////////////////////////////////////////////////////////////// + +uint64_t sphFNV64 ( const BYTE * s ) +{ + uint64_t hval = 0xcbf29ce484222325ULL; + while ( *s ) + { + // xor the bottom with the current octet + hval ^= (uint64_t)*s++; + + // multiply by the 64 bit FNV magic prime mod 2^64 + hval += (hval << 1) + (hval << 4) + (hval << 5) + (hval << 7) + (hval << 8) + (hval << 40); // gcc optimization + } + return hval; +} + + +uint64_t sphFNV64 ( const BYTE * s, int iLen, uint64_t uPrev ) +{ + uint64_t hval = uPrev; + for ( ; iLen>0; iLen-- ) + { + // xor the bottom with the current octet + hval ^= (uint64_t)*s++; + + // multiply by the 64 bit FNV magic prime mod 2^64 + hval += (hval << 1) + (hval << 4) + (hval << 5) + (hval << 7) + (hval << 8) + (hval << 40); // gcc optimization + } + return hval; +} + +///////////////////////////////////////////////////////////////////////////// + +bool sphCalcFileCRC32 ( const char * szFilename, DWORD & uCRC32 ) +{ + uCRC32 = 0; + + if ( !szFilename ) + return false; + + FILE * pFile = fopen ( szFilename, "rb" ); + if ( !pFile ) + return false; + + DWORD crc = ~((DWORD)0); + + const int BUFFER_SIZE = 131072; + static BYTE * pBuffer = NULL; + if ( !pBuffer ) + pBuffer = new BYTE [ BUFFER_SIZE ]; + + int iBytesRead; + while ( ( iBytesRead = fread ( pBuffer, 1, BUFFER_SIZE, pFile ) )!=0 ) + { + for ( int i=0; i> 8) ^ g_dSphinxCRC32 [ (crc ^ pBuffer[i]) & 0xff ]; + } + + fclose ( pFile ); + + uCRC32 = ~crc; + return true; +} + + +static void GetFileStats ( const char * szFilename, CSphSavedFile & tInfo ) +{ + if ( !szFilename ) + { + memset ( &tInfo, 0, sizeof ( tInfo ) ); + return; + } + + tInfo.m_sFilename = szFilename; + + struct_stat tStat; + memset ( &tStat, 0, sizeof ( tStat ) ); + if ( stat ( szFilename, &tStat ) < 0 ) + memset ( &tStat, 0, sizeof ( tStat ) ); + + tInfo.m_uSize = tStat.st_size; + tInfo.m_uCTime = tStat.st_ctime; + tInfo.m_uMTime = tStat.st_mtime; + + DWORD uCRC32 = 0; + sphCalcFileCRC32 ( szFilename, uCRC32 ); + + tInfo.m_uCRC32 = uCRC32; +} + +///////////////////////////////////////////////////////////////////////////// + +WordformContainer_t::WordformContainer_t () + : m_iRefCount ( 0 ) + , m_uTokenizerFNV ( 0 ) + , m_pMultiWordforms ( NULL ) +{ +} + + +WordformContainer_t::~WordformContainer_t () +{ + if ( m_pMultiWordforms ) + { + m_pMultiWordforms->m_Hash.IterateStart (); + while ( m_pMultiWordforms->m_Hash.IterateNext () ) + { + CSphMultiforms * pWordforms = m_pMultiWordforms->m_Hash.IterateGet (); + ARRAY_FOREACH ( i, pWordforms->m_dWordforms ) + SafeDelete ( pWordforms->m_dWordforms[i] ); + + SafeDelete ( pWordforms ); + } + + SafeDelete ( m_pMultiWordforms ); + } +} + + +bool WordformContainer_t::IsEqual ( const char * szFile, DWORD uCRC32 ) +{ + if ( !szFile ) + return false; + + struct_stat FileStat; + if ( stat ( szFile, &FileStat ) < 0 ) + return false; + + return m_sFilename==szFile && m_tStat.st_ctime==FileStat.st_ctime + && m_tStat.st_mtime==FileStat.st_mtime && m_tStat.st_size==FileStat.st_size && m_uCRC32==uCRC32; +} + +///////////////////////////////////////////////////////////////////////////// + +CSphDictCRCTraits::CSphDictCRCTraits () + : m_iStopwords ( 0 ) + , m_pStopwords ( NULL ) + , m_dStopwordContainer ( 0 ) + , m_iEntries ( 0 ) + , m_iLastDoclistPos ( 0 ) + , m_iLastWordID ( 0 ) + , m_pWordforms ( NULL ) +{ +} + + +CSphDictCRCTraits::~CSphDictCRCTraits () +{ +#if USE_LIBSTEMMER + ARRAY_FOREACH ( i, m_dStemmers ) + sb_stemmer_delete ( m_dStemmers[i] ); +#endif + + if ( m_pWordforms ) + --m_pWordforms->m_iRefCount; +} + + +SphWordID_t CSphDictCRCTraits::FilterStopword ( SphWordID_t uID ) const +{ + if ( !m_iStopwords ) + return uID; + + // OPTIMIZE: binary search is not too good, could do some hashing instead + SphWordID_t * pStart = m_pStopwords; + SphWordID_t * pEnd = m_pStopwords + m_iStopwords - 1; + do + { + if ( uID==*pStart || uID==*pEnd ) + return 0; + + if ( uID<*pStart || uID>*pEnd ) + return uID; + + SphWordID_t * pMid = pStart + (pEnd-pStart)/2; + if ( uID==*pMid ) + return 0; + + if ( uID<*pMid ) + pEnd = pMid; + else + pStart = pMid; + } while ( pEnd-pStart>1 ); + + return uID; +} + + +bool CSphDictCRCTraits::ToNormalForm ( BYTE * pWord ) +{ + if ( !m_pWordforms ) + return false; + + int * pIndex = m_pWordforms->m_dHash ( (char *)pWord ); + if ( !pIndex ) + return false; + + if ( *pIndex<0 || *pIndex>=m_pWordforms->m_dNormalForms.GetLength () ) + return false; + + if ( m_pWordforms->m_dNormalForms [*pIndex].IsEmpty () ) + return false; + + strcpy ( (char *)pWord, m_pWordforms->m_dNormalForms[*pIndex].cstr() ); // NOLINT + return true; +} + + +bool CSphDictCRCTraits::ParseMorphology ( const char * szMorph, bool bUseUTF8, CSphString & sError ) +{ + const char * szStart = szMorph; + + while ( *szStart ) + { + while ( *szStart && ( sphIsSpace ( *szStart ) || *szStart==',' ) ) + ++szStart; + + if ( !*szStart ) + break; + + const char * szWordStart = szStart; + + while ( *szStart && !sphIsSpace ( *szStart ) && *szStart!=',' ) + ++szStart; + + if ( szStart - szWordStart > 0 ) + { + if ( !InitMorph ( szWordStart, szStart - szWordStart, bUseUTF8, sError ) ) + return false; + } + } + + return true; +} + + +bool CSphDictCRCTraits::InitMorph ( const char * szMorph, int iLength, bool bUseUTF8, CSphString & sError ) +{ + if ( iLength==0 ) + return true; + + if ( iLength==4 && !strncmp ( szMorph, "none", iLength ) ) + return true; + + if ( iLength==7 && !strncmp ( szMorph, "stem_en", iLength ) ) + { + stem_en_init (); + return AddMorph ( SPH_MORPH_STEM_EN ); + } + + if ( iLength==7 && !strncmp ( szMorph, "stem_ru", iLength ) ) + { + stem_ru_init (); + return AddMorph ( bUseUTF8 ? SPH_MORPH_STEM_RU_UTF8 : SPH_MORPH_STEM_RU_CP1251 ); + } + + if ( iLength==7 && !strncmp ( szMorph, "stem_cz", iLength ) ) + { + stem_cz_init (); + return AddMorph ( SPH_MORPH_STEM_CZ ); + } + + if ( iLength==9 && !strncmp ( szMorph, "stem_enru", iLength ) ) + { + stem_en_init (); + stem_ru_init (); + + if ( !AddMorph ( SPH_MORPH_STEM_EN ) ) + return false; + + return AddMorph ( bUseUTF8 ? SPH_MORPH_STEM_RU_UTF8 : SPH_MORPH_STEM_RU_CP1251 ); + } + + if ( iLength==7 && !strncmp ( szMorph, "soundex", iLength ) ) + return AddMorph ( SPH_MORPH_SOUNDEX ); + + if ( iLength==9 && !strncmp ( szMorph, "metaphone", iLength ) ) + return AddMorph ( bUseUTF8 ? SPH_MORPH_METAPHONE_UTF8 : SPH_MORPH_METAPHONE_SBCS ); + + sError = ""; + +#if USE_LIBSTEMMER + const int LIBSTEMMER_LEN = 11; + const int MAX_ALGO_LENGTH = 64; + if ( iLength > LIBSTEMMER_LEN && iLength - LIBSTEMMER_LEN < MAX_ALGO_LENGTH && !strncmp ( szMorph, "libstemmer_", LIBSTEMMER_LEN ) ) + { + CSphString sAlgo; + CSphString sEnc; + sAlgo.SetBinary ( szMorph+LIBSTEMMER_LEN, iLength - LIBSTEMMER_LEN ); + + sb_stemmer * pStemmer = NULL; + + if ( bUseUTF8 ) + { + sEnc = "UTF_8"; + pStemmer = sb_stemmer_new ( sAlgo.cstr(), sEnc.cstr() ); + } else + { + sEnc = "ISO_8859_1"; + pStemmer = sb_stemmer_new ( sAlgo.cstr(), sEnc.cstr() ); + + if ( !pStemmer ) + { + sEnc = "ISO_8859_2"; + pStemmer = sb_stemmer_new ( sAlgo.cstr(), sEnc.cstr() ); + } + + if ( !pStemmer ) + { + sEnc = "KOI8_R"; + pStemmer = sb_stemmer_new ( sAlgo.cstr(), sEnc.cstr() ); + } + } + + if ( !pStemmer ) + { + sError.SetSprintf ( "libstemmer morphology algorithm '%s' not available for %s encoding - IGNORED", + sAlgo.cstr(), bUseUTF8 ? "UTF-8" : "SBCS" ); + return false; + } + + AddMorph ( SPH_MORPH_LIBSTEMMER_FIRST + m_dStemmers.GetLength () ); + ARRAY_FOREACH ( i, m_dStemmers ) + { + if ( m_dStemmers[i]==pStemmer ) + { + sb_stemmer_delete ( pStemmer ); + return false; + } + } + + m_dStemmers.Add ( pStemmer ); + DescStemmer_t & tDesc = m_dDescStemmers.Add(); + tDesc.m_sAlgo.Swap ( sAlgo ); + tDesc.m_sEnc.Swap ( sEnc ); + return true; + } +#endif + + return false; +} + + +bool CSphDictCRCTraits::AddMorph ( int iMorph ) +{ + ARRAY_FOREACH ( i, m_dMorph ) + if ( m_dMorph[i]==iMorph ) + return false; + + m_dMorph.Add ( iMorph ); + return true; +} + + + +void CSphDictCRCTraits::ApplyStemmers ( BYTE * pWord ) +{ + // try wordforms + if ( ToNormalForm ( pWord ) ) + return; + + // check length + if ( m_tSettings.m_iMinStemmingLen>1 ) + if ( sphUTF8Len ( (const char*)pWord )m_iStopwords = m_iStopwords; + pDict->m_pStopwords = m_pStopwords; + pDict->m_pWordforms = m_pWordforms; + if ( m_pWordforms ) + m_pWordforms->m_iRefCount++; + + pDict->m_dMorph = m_dMorph; +#if USE_LIBSTEMMER + assert ( m_dDescStemmers.GetLength()==m_dStemmers.GetLength() ); + pDict->m_dDescStemmers = m_dDescStemmers; + ARRAY_FOREACH ( i, m_dDescStemmers ) + { + pDict->m_dStemmers.Add ( sb_stemmer_new ( m_dDescStemmers[i].m_sAlgo.cstr(), m_dDescStemmers[i].m_sEnc.cstr() ) ); + assert ( pDict->m_dStemmers.Last() ); + } +#endif + + return pDict; +} + +bool CSphDictCRCTraits::HasState() const +{ +#if !USE_LIBSTEMMER + return false; +#else + return ( m_dDescStemmers.GetLength()>0 ); +#endif +} + +///////////////////////////////////////////////////////////////////////////// + +template<> +SphWordID_t CSphDictCRC::DoCrc ( const BYTE * pWord ) const +{ + return sphCRC32 ( pWord ); +} + + +template<> +SphWordID_t CSphDictCRC::DoCrc ( const BYTE * pWord ) const +{ + return (SphWordID_t) sphFNV64 ( pWord ); +} + + +template<> +SphWordID_t CSphDictCRC::DoCrc ( const BYTE * pWord, int iLen ) const +{ + return sphCRC32 ( pWord, iLen ); +} + + +template<> +SphWordID_t CSphDictCRC::DoCrc ( const BYTE * pWord, int iLen ) const +{ + return (SphWordID_t) sphFNV64 ( pWord, iLen ); +} + + +template < bool CRC32DICT > +SphWordID_t CSphDictCRC::GetWordID ( BYTE * pWord ) +{ + // skip stemmers for magic words + if ( pWord[0]>=0x20 ) + ApplyStemmers ( pWord ); + return FilterStopword ( DoCrc ( pWord ) ); +} + + +template < bool CRC32DICT > +SphWordID_t CSphDictCRC::GetWordID ( const BYTE * pWord, int iLen, bool bFilterStops ) +{ + SphWordID_t uId = DoCrc ( pWord, iLen ); + return bFilterStops ? FilterStopword ( uId ) : uId; +} + + +template < bool CRC32DICT > +SphWordID_t CSphDictCRC::GetWordIDWithMarkers ( BYTE * pWord ) +{ + ApplyStemmers ( pWord + 1 ); + SphWordID_t uWordId = DoCrc ( pWord + 1 ); + int iLength = strlen ( (const char *)(pWord + 1) ); + pWord [iLength + 1] = MAGIC_WORD_TAIL; + pWord [iLength + 2] = '\0'; + return FilterStopword ( uWordId ) ? DoCrc ( pWord ) : 0; +} + + +template < bool CRC32DICT > +SphWordID_t CSphDictCRC::GetWordIDNonStemmed ( BYTE * pWord ) +{ + SphWordID_t uWordId = DoCrc ( pWord + 1 ); + if ( !FilterStopword ( uWordId ) ) + return 0; + + return DoCrc ( pWord ); +} + + +template < bool CRC32DICT > +bool CSphDictCRC::IsStopWord ( const BYTE * pWord ) const +{ + return FilterStopword ( DoCrc ( pWord ) )==0; +} + +////////////////////////////////////////////////////////////////////////// + +void CSphDictCRCTraits::LoadStopwords ( const char * sFiles, ISphTokenizer * pTokenizer ) +{ + assert ( !m_pStopwords ); + assert ( !m_iStopwords ); + + // tokenize file list + if ( !sFiles || !*sFiles ) + return; + + m_dSWFileInfos.Resize ( 0 ); + + char * sList = new char [ 1+strlen(sFiles) ]; + strcpy ( sList, sFiles ); // NOLINT + + char * pCur = sList; + char * sName = NULL; + + CSphVector dStop; + + for ( ;; ) + { + // find next name start + while ( *pCur && isspace(*pCur) ) pCur++; + if ( !*pCur ) break; + sName = pCur; + + // find next name end + while ( *pCur && !isspace(*pCur) ) pCur++; + if ( *pCur ) *pCur++ = '\0'; + + BYTE * pBuffer = NULL; + + CSphSavedFile tInfo; + tInfo.m_sFilename = sName; + GetFileStats ( sName, tInfo ); + m_dSWFileInfos.Add ( tInfo ); + + // open file + struct_stat st; + if ( stat ( sName, &st )==0 ) + pBuffer = new BYTE [(size_t)st.st_size]; + else + { + sphWarn ( "stopwords: failed to get file size for '%s'", sName ); + continue; + } + + FILE * fp = fopen ( sName, "rb" ); + if ( !fp ) + { + sphWarn ( "failed to load stopwords from '%s'", sName ); + SafeDeleteArray ( pBuffer ); + continue; + } + + // tokenize file + int iLength = (int)fread ( pBuffer, 1, (size_t)st.st_size, fp ); + + BYTE * pToken; + pTokenizer->SetBuffer ( pBuffer, iLength ); + while ( ( pToken = pTokenizer->GetToken() )!=NULL ) + dStop.Add ( GetWordID ( pToken ) ); + + // close file + fclose ( fp ); + + SafeDeleteArray ( pBuffer ); + } + + SafeDeleteArray ( sList ); + + // sort stopwords + dStop.Uniq(); + + // store IDs + if ( dStop.GetLength() ) + { + m_dStopwordContainer.Reset ( dStop.GetLength() ); + ARRAY_FOREACH ( i, dStop ) + m_dStopwordContainer[i] = dStop[i]; + + m_iStopwords = m_dStopwordContainer.GetLength (); + m_pStopwords = m_dStopwordContainer.Begin(); + } +} + + +void CSphDictCRCTraits::SweepWordformContainers ( const char * szFile, DWORD uCRC32 ) +{ + for ( int i = 0; i < m_dWordformContainers.GetLength (); ) + { + WordformContainer_t * WC = m_dWordformContainers[i]; + if ( WC->m_iRefCount==0 && !WC->IsEqual ( szFile, uCRC32 ) ) + { + delete WC; + m_dWordformContainers.Remove ( i ); + } else + ++i; + } +} + + +WordformContainer_t * CSphDictCRCTraits::GetWordformContainer ( const char * szFile, DWORD uCRC32, const ISphTokenizer * pTokenizer, const char * sIndex ) +{ + ARRAY_FOREACH ( i, m_dWordformContainers ) + if ( m_dWordformContainers[i]->IsEqual ( szFile, uCRC32 ) ) + { + WordformContainer_t * pContainer = m_dWordformContainers[i]; + if ( pTokenizer->GetSettingsFNV()==pContainer->m_uTokenizerFNV ) + return pContainer; + + sphWarning ( "index %s: wordforms file %s is shared with index %s, but tokenizer settings are different; IGNORING wordforms", sIndex, szFile, pContainer->m_sIndexName.cstr() ); + return NULL; + } + + WordformContainer_t * pContainer = LoadWordformContainer ( szFile, uCRC32, pTokenizer, sIndex ); + if ( pContainer ) + m_dWordformContainers.Add ( pContainer ); + + return pContainer; +} + + +WordformContainer_t * CSphDictCRCTraits::LoadWordformContainer ( const char * szFile, DWORD uCRC32, const ISphTokenizer * pTokenizer, const char * sIndex ) +{ + // stat it; we'll store stats for later checks + struct_stat FileStat; + if ( !szFile || !*szFile || stat ( szFile, &FileStat )<0 ) + return NULL; + + // allocate it + WordformContainer_t * pContainer = new WordformContainer_t; + if ( !pContainer ) + return NULL; + pContainer->m_sFilename = szFile; + pContainer->m_tStat = FileStat; + pContainer->m_uCRC32 = uCRC32; + pContainer->m_uTokenizerFNV = pTokenizer->GetSettingsFNV(); + pContainer->m_sIndexName = sIndex; + + // open it + CSphString sError; + CSphAutoreader rdWordforms; + if ( !rdWordforms.Open ( szFile, sError ) ) + return NULL; + + // my tokenizer + CSphScopedPtr pMyTokenizer ( pTokenizer->Clone ( false ) ); + pMyTokenizer->AddSpecials ( ">" ); + + // scan it line by line + char sBuffer [ 6*SPH_MAX_WORD_LEN + 512 ]; // enough to hold 2 UTF-8 words, plus some whitespace overhead + int iLen; + bool bSeparatorFound = false; + CSphString sFrom; + while ( ( iLen = rdWordforms.GetLine ( sBuffer, sizeof(sBuffer) ) )>=0 ) + { + // parse the line + pMyTokenizer->SetBuffer ( (BYTE*)sBuffer, iLen ); + + CSphScopedPtr tMultiWordform ( NULL ); + CSphString sKey; + + BYTE * pFrom = NULL; + while ( ( pFrom = pMyTokenizer->GetToken () )!=NULL ) + { + const BYTE * pCur = (const BYTE *) pMyTokenizer->GetBufferPtr (); + + while ( isspace(*pCur) ) pCur++; + if ( *pCur=='>' ) + { + sFrom = (const char*)pFrom; + bSeparatorFound = true; + pMyTokenizer->SetBufferPtr ( (const char*) pCur+1 ); + break; + } else + { + if ( !tMultiWordform.Ptr() ) + { + tMultiWordform = new CSphMultiform; + sKey = (const char*)pFrom; + } else + tMultiWordform->m_dTokens.Add ( (const char*)pFrom ); + } + } + + if ( !pFrom ) continue; // FIXME! report parsing error + if ( !bSeparatorFound ) continue; // FIXME! report parsing error + + BYTE * pTo = pMyTokenizer->GetToken (); + if ( !pTo ) continue; // FIXME! report parsing error + + CSphString sTo ( (const char *)pTo ); + const CSphString & sSourceWordform = tMultiWordform.Ptr() ? sTo : sFrom; + + // check wordform that source token is a new token or has same destination token + int * pRefTo = pContainer->m_dHash ( sSourceWordform ); + assert ( !pRefTo || ( *pRefTo>=0 && *pRefTom_dNormalForms.GetLength() ) ); + if ( !tMultiWordform.Ptr() && pRefTo && pContainer->m_dNormalForms[*pRefTo]!=sTo ) + { + const CSphString & sRefTo = pContainer->m_dNormalForms[*pRefTo]; + sphWarning ( "duplicate wordform found - skipped ( current='%s > %s', stored='%s > %s' ). Fix your wordforms file '%s'.", + sSourceWordform.cstr(), sTo.cstr(), sSourceWordform.cstr(), sRefTo.cstr(), szFile ); + } + + if ( pRefTo && !tMultiWordform.Ptr() ) + continue; + + if ( !pRefTo ) + { + pContainer->m_dNormalForms.AddUnique ( sTo ); + pContainer->m_dHash.Add ( pContainer->m_dNormalForms.GetLength()-1, sSourceWordform ); + } + + if ( tMultiWordform.Ptr() ) + { + CSphMultiform * pMultiWordform = tMultiWordform.LeakPtr(); + pMultiWordform->m_sNormalForm = sTo; + pMultiWordform->m_iNormalTokenLen = pMyTokenizer->GetLastTokenLen (); + pMultiWordform->m_dTokens.Add ( sFrom ); + if ( !pContainer->m_pMultiWordforms ) + pContainer->m_pMultiWordforms = new CSphMultiformContainer; + + CSphMultiforms ** pWordforms = pContainer->m_pMultiWordforms->m_Hash ( sKey ); + if ( pWordforms ) + { + (*pWordforms)->m_dWordforms.Add ( pMultiWordform ); + (*pWordforms)->m_iMinTokens = Min ( (*pWordforms)->m_iMinTokens, pMultiWordform->m_dTokens.GetLength () ); + (*pWordforms)->m_iMaxTokens = Max ( (*pWordforms)->m_iMaxTokens, pMultiWordform->m_dTokens.GetLength () ); + pContainer->m_pMultiWordforms->m_iMaxTokens = Max ( pContainer->m_pMultiWordforms->m_iMaxTokens, (*pWordforms)->m_iMaxTokens ); + } else + { + CSphMultiforms * pNewWordforms = new CSphMultiforms; + pNewWordforms->m_dWordforms.Add ( pMultiWordform ); + pNewWordforms->m_iMinTokens = pMultiWordform->m_dTokens.GetLength (); + pNewWordforms->m_iMaxTokens = pMultiWordform->m_dTokens.GetLength (); + pContainer->m_pMultiWordforms->m_iMaxTokens = Max ( pContainer->m_pMultiWordforms->m_iMaxTokens, pNewWordforms->m_iMaxTokens ); + pContainer->m_pMultiWordforms->m_Hash.Add ( pNewWordforms, sKey ); + } + } + } + + return pContainer; +} + + +bool CSphDictCRCTraits::LoadWordforms ( const char * szFile, ISphTokenizer * pTokenizer, const char * sIndex ) +{ + GetFileStats ( szFile, m_tWFFileInfo ); + + DWORD uCRC32 = m_tWFFileInfo.m_uCRC32; + + SweepWordformContainers ( szFile, uCRC32 ); + m_pWordforms = GetWordformContainer ( szFile, uCRC32, pTokenizer, sIndex ); + if ( m_pWordforms ) + m_pWordforms->m_iRefCount++; + + return !!m_pWordforms; +} + + +bool CSphDictCRCTraits::SetMorphology ( const char * szMorph, bool bUseUTF8, CSphString & sError ) +{ + m_dMorph.Reset (); + +#if USE_LIBSTEMMER + ARRAY_FOREACH ( i, m_dStemmers ) + sb_stemmer_delete ( m_dStemmers[i] ); + + m_dStemmers.Reset (); +#endif + + if ( !szMorph ) + return true; + + CSphString sOption = szMorph; + sOption.ToLower (); + + sError = ""; + if ( !ParseMorphology ( sOption.cstr (), bUseUTF8, sError ) ) + { + m_dMorph.Reset (); + + if ( sError.IsEmpty () ) + sError.SetSprintf ( "invalid morphology option '%s' - IGNORED", sOption.cstr() ); + + return false; + } + + return true; +} + + +bool CSphDictCRCTraits::HasMorphology() const +{ + return ( m_dMorph.GetLength()>0 ); +} + + +/// common id-based stemmer +bool CSphDictCRCTraits::StemById ( BYTE * pWord, int iStemmer ) +{ + char szBuf [ MAX_KEYWORD_BYTES ]; + + // safe quick strncpy without (!) padding and with a side of strlen + char * p = szBuf; + char * pMax = szBuf + sizeof(szBuf) - 1; + BYTE * pLastSBS = NULL; + while ( *pWord && p=iLen ) + break; + + // stem only UTF8 tail + if ( !pLastSBS ) + { + stem_ru_utf8 ( (WORD*)pWord ); + } else + { + stem_ru_utf8 ( (WORD *)( pLastSBS+1 ) ); + } + break; + + case SPH_MORPH_STEM_CZ: + stem_cz ( pWord ); + break; + + case SPH_MORPH_SOUNDEX: + stem_soundex ( pWord ); + break; + + case SPH_MORPH_METAPHONE_SBCS: + stem_dmetaphone ( pWord, false ); + break; + + case SPH_MORPH_METAPHONE_UTF8: + stem_dmetaphone ( pWord, true ); + break; + + default: +#if USE_LIBSTEMMER + if ( iStemmer>=SPH_MORPH_LIBSTEMMER_FIRST && iStemmer m_iLastDoclistPos ); + m_wrDict.ZipInt ( 0 ); // indicate checkpoint + m_wrDict.ZipOffset ( iDoclistOffset - m_iLastDoclistPos ); // store last length + } + + // restart delta coding, once per WORDLIST_CHECKPOINT entries + m_iLastWordID = 0; + m_iLastDoclistPos = 0; + + // begin new wordlist entry + assert ( m_wrDict.GetPos()<=UINT_MAX ); + + CSphWordlistCheckpoint & tCheckpoint = m_dCheckpoints.Add(); + tCheckpoint.m_iWordID = uWordID; + tCheckpoint.m_iWordlistOffset = m_wrDict.GetPos(); + } + + assert ( iDoclistOffset > m_iLastDoclistPos ); + m_wrDict.ZipOffset ( uWordID - m_iLastWordID ); // FIXME! slow with 32bit wordids + m_wrDict.ZipOffset ( iDoclistOffset - m_iLastDoclistPos ); + + m_iLastWordID = uWordID; + m_iLastDoclistPos = iDoclistOffset; + + assert ( iDocs ); + assert ( iHits ); + m_wrDict.ZipInt ( iDocs ); + m_wrDict.ZipInt ( iHits ); + + m_iEntries++; +} + +void CSphDictCRCTraits::DictEndEntries ( SphOffset_t iDoclistOffset ) +{ + assert ( iDoclistOffset>=m_iLastDoclistPos ); + m_wrDict.ZipInt ( 0 ); // indicate checkpoint + m_wrDict.ZipOffset ( iDoclistOffset - m_iLastDoclistPos ); // store last doclist length +} + +////////////////////////////////////////////////////////////////////////// +// KEYWORDS STORING DICTIONARY +////////////////////////////////////////////////////////////////////////// + +class CSphDictKeywords : public CSphDictCRC +{ +private: + static const int SLOTS = 65536; + static const int ENTRY_CHUNK = 65536; + static const int KEYWORD_CHUNK = 1048576; + static const int DICT_CHUNK = 65536; + +public: + // OPTIMIZE? change pointers to 8:24 locators to save RAM on x64 gear? + struct HitblockKeyword_t + { + SphWordID_t m_uWordid; // locally unique word id (crc value, adjusted in case of collsion) + HitblockKeyword_t * m_pNextHash; // next hashed entry + char * m_pKeyword; // keyword + }; + + struct HitblockException_t + { + HitblockKeyword_t * m_pEntry; // hash entry + SphWordID_t m_uCRC; // original unadjusted crc + + bool operator < ( const HitblockException_t & rhs ) const + { + return m_pEntry->m_uWordid < rhs.m_pEntry->m_uWordid; + } + }; + + struct DictKeyword_t + { + char * m_sKeyword; + SphOffset_t m_uOff; + int m_iDocs; + int m_iHits; + BYTE m_uHint; + }; + + struct DictBlock_t + { + SphOffset_t m_iPos; + int m_iLen; + }; + +private: + HitblockKeyword_t * m_dHash [ SLOTS ]; ///< hash by wordid (!) + CSphVector m_dExceptions; + + bool m_bHitblock; ///< should we store words on GetWordID or not + int m_iMemUse; ///< current memory use by all the chunks + int m_iDictLimit; ///< allowed memory limit for dict block collection + + CSphVector m_dEntryChunks; ///< hash chunks, only used when indexing hitblocks + HitblockKeyword_t * m_pEntryChunk; + int m_iEntryChunkFree; + + CSphVector m_dKeywordChunks; ///< keyword storage + BYTE * m_pKeywordChunk; + int m_iKeywordChunkFree; + + CSphVector m_dDictChunks; ///< dict entry chunks, only used when sorting final dict + DictKeyword_t * m_pDictChunk; + int m_iDictChunkFree; + + int m_iTmpFD; ///< temp dict file descriptor + CSphWriter m_wrTmpDict; ///< temp dict writer + CSphVector m_dDictBlocks; ///< on-disk locations of dict entry blocks + + char m_sClippedWord[MAX_KEYWORD_BYTES]; ///< keyword storage for cliiped word + +private: + SphWordID_t HitblockGetID ( const char * pWord, int iLen, SphWordID_t uCRC ); + HitblockKeyword_t * HitblockAddKeyword ( DWORD uHash, const char * pWord, int iLen, SphWordID_t uID ); + +public: + explicit CSphDictKeywords (); + virtual ~CSphDictKeywords (); + + virtual void HitblockBegin () { m_bHitblock = true; } + virtual void HitblockPatch ( CSphWordHit * pHits, int iHits ); + virtual const char * HitblockGetKeyword ( SphWordID_t uWordID ); + virtual int HitblockGetMemUse () { return m_iMemUse; } + virtual void HitblockReset (); + + virtual void DictBegin ( int iTmpDictFD, int iDictFD, int iDictLimit ); + virtual void DictEntry ( SphWordID_t uWordID, BYTE * sKeyword, int iDocs, int iHits, SphOffset_t iDoclistOffset, SphOffset_t iDoclistLength ); + virtual void DictEndEntries ( SphOffset_t ) {} + virtual bool DictEnd ( SphOffset_t * pCheckpointsPos, int * pCheckpointsCount, int iMemLimit, CSphString & sError ); + + virtual SphWordID_t GetWordID ( BYTE * pWord ); + virtual SphWordID_t GetWordIDWithMarkers ( BYTE * pWord ); + virtual SphWordID_t GetWordIDNonStemmed ( BYTE * pWord ); + virtual SphWordID_t GetWordID ( const BYTE * pWord, int iLen, bool bFilterStops ); + +private: + void DictFlush (); +}; + +////////////////////////////////////////////////////////////////////////// + +CSphDictKeywords::CSphDictKeywords () + : m_bHitblock ( false ) + , m_iMemUse ( 0 ) + , m_iDictLimit ( 0 ) + , m_pEntryChunk ( NULL ) + , m_iEntryChunkFree ( 0 ) + , m_pKeywordChunk ( NULL ) + , m_iKeywordChunkFree ( 0 ) + , m_pDictChunk ( NULL ) + , m_iDictChunkFree ( 0 ) +{ + memset ( m_dHash, 0, sizeof(m_dHash) ); +} + +CSphDictKeywords::~CSphDictKeywords () +{ + HitblockReset(); +} + +void CSphDictKeywords::HitblockReset() +{ + m_dExceptions.Resize ( 0 ); + + ARRAY_FOREACH ( i, m_dEntryChunks ) + SafeDeleteArray ( m_dEntryChunks[i] ); + m_dEntryChunks.Resize ( 0 ); + m_pEntryChunk = NULL; + m_iEntryChunkFree = 0; + + ARRAY_FOREACH ( i, m_dKeywordChunks ) + SafeDeleteArray ( m_dKeywordChunks[i] ); + m_dKeywordChunks.Resize ( 0 ); + m_pKeywordChunk = NULL; + m_iKeywordChunkFree = 0; + + m_iMemUse = 0; + + memset ( m_dHash, 0, sizeof(m_dHash) ); +} + +CSphDictKeywords::HitblockKeyword_t * CSphDictKeywords::HitblockAddKeyword ( DWORD uHash, const char * sWord, int iLen, SphWordID_t uID ) +{ + assert ( iLenm_pKeyword = (char*)m_pKeywordChunk; + pEntry->m_uWordid = uID; + m_pKeywordChunk += iLen; + m_iKeywordChunkFree -= iLen; + + // mtf it + pEntry->m_pNextHash = m_dHash [ uHash ]; + m_dHash [ uHash ] = pEntry; + + return pEntry; +} + +SphWordID_t CSphDictKeywords::HitblockGetID ( const char * sWord, int iLen, SphWordID_t uCRC ) +{ + if ( iLen>=MAX_KEYWORD_BYTES-4 ) // fix of very long word (zones) + { + memcpy ( m_sClippedWord, sWord, MAX_KEYWORD_BYTES-4 ); + memset ( m_sClippedWord+MAX_KEYWORD_BYTES-4, 0, 4 ); + + CSphString sOrig; + sOrig.SetBinary ( sWord, iLen ); + sphWarn ( "word overrun buffer, clipped!!!\nclipped (len=%d, word='%s')\noriginal (len=%d, word='%s')", MAX_KEYWORD_BYTES-4, m_sClippedWord, iLen, sOrig.cstr() ); + + sWord = m_sClippedWord; + iLen = MAX_KEYWORD_BYTES-4; + uCRC = sphCRC32 ( (const BYTE *)m_sClippedWord, MAX_KEYWORD_BYTES-4 ); + } + + // is this a known one? find it + // OPTIMIZE? in theory we could use something faster than crc32; but quick lookup3 test did not show any improvements + const DWORD uHash = (DWORD)( uCRC % SLOTS ); + + HitblockKeyword_t * pEntry = m_dHash [ uHash ]; + HitblockKeyword_t ** ppEntry = &m_dHash [ uHash ]; + while ( pEntry ) + { + // check crc + if ( pEntry->m_uWordid!=uCRC ) + { + // crc mismatch, try next entry + ppEntry = &pEntry->m_pNextHash; + pEntry = pEntry->m_pNextHash; + continue; + } + + // crc matches, check keyword + register int iWordLen = iLen; + register const char * a = pEntry->m_pKeyword; + register const char * b = sWord; + while ( *a==*b && iWordLen-- ) + { + if ( !*a || !iWordLen ) + { + // known word, mtf it, and return id + (*ppEntry) = pEntry->m_pNextHash; + pEntry->m_pNextHash = m_dHash [ uHash ]; + m_dHash [ uHash ] = pEntry; + return pEntry->m_uWordid; + } + a++; + b++; + } + + // collision detected! + // our crc is taken as a wordid, but keyword does not match + // welcome to the land of very tricky magic + // + // pEntry might either be a known exception, or a regular keyword + // sWord might either be a known exception, or a new one + // if they are not known, they needed to be added as exceptions now + // + // in case sWord is new, we need to assign a new unique wordid + // for that, we keep incrementing the crc until it is unique + // a starting point for wordid search loop would be handy + // + // let's scan the exceptions vector and work on all this + // + // NOTE, beware of the order, it is wordid asc, which does NOT guarantee crc asc + // example, assume crc(w1)==X, crc(w2)==X+1, crc(w3)==X (collides with w1) + // wordids will be X, X+1, X+2 but crcs will be X, X+1, X + // + // OPTIMIZE, might make sense to use binary search + // OPTIMIZE, add early out somehow + SphWordID_t uWordid = uCRC + 1; + const int iExcLen = m_dExceptions.GetLength(); + int iExc = m_dExceptions.GetLength(); + ARRAY_FOREACH ( i, m_dExceptions ) + { + const HitblockKeyword_t * pExcWord = m_dExceptions[i].m_pEntry; + + // incoming word is a known exception? just return the pre-assigned wordid + if ( m_dExceptions[i].m_uCRC==uCRC && strncmp ( pExcWord->m_pKeyword, sWord, iLen )==0 ) + return pExcWord->m_uWordid; + + // incoming word collided into a known exception? clear the matched entry; no need to re-add it (see below) + if ( pExcWord==pEntry ) + pEntry = NULL; + + // find first exception with wordid greater or equal to our candidate + if ( pExcWord->m_uWordid>=uWordid && iExc==iExcLen ) + iExc = i; + } + + // okay, this is a new collision + // if entry was a regular word, we have to add it + if ( pEntry ) + { + m_dExceptions.Add(); + m_dExceptions.Last().m_pEntry = pEntry; + m_dExceptions.Last().m_uCRC = uCRC; + } + + // need to assign a new unique wordid now + // keep scanning both exceptions and keywords for collisions + for ( ;; ) + { + // iExc must be either the first exception greater or equal to current candidate, or out of bounds + assert ( iExc==iExcLen || m_dExceptions[iExc].m_pEntry->m_uWordid>=uWordid ); + assert ( iExc==0 || m_dExceptions[iExc-1].m_pEntry->m_uWordidm_uWordid==uWordid ) + { + uWordid++; + while ( iExcm_uWordidm_uWordid==uWordid ) + break; + pCheck = pCheck->m_pNextHash; + } + + // no collisions; we've found our unique wordid! + if ( !pCheck ) + break; + + // got a collision; add it + HitblockException_t & tColl = m_dExceptions.Add(); + tColl.m_pEntry = pCheck; + tColl.m_uCRC = pCheck->m_uWordid; // not a known exception; hence, wordid must equal crc + + // and keep looking + uWordid++; + continue; + } + + // and finally, we have that precious new wordid + // so hash our new unique under its new unique adjusted wordid + pEntry = HitblockAddKeyword ( (DWORD)( uWordid % SLOTS ), sWord, iLen, uWordid ); + + // add it as a collision too + m_dExceptions.Add(); + m_dExceptions.Last().m_pEntry = pEntry; + m_dExceptions.Last().m_uCRC = uCRC; + + // keep exceptions list sorted by wordid + m_dExceptions.Sort(); + + return pEntry->m_uWordid; + } + + // new keyword with unique crc + pEntry = HitblockAddKeyword ( uHash, sWord, iLen, uCRC ); + return pEntry->m_uWordid; +} + +struct DictKeywordTagged_t : public CSphDictKeywords::DictKeyword_t +{ + int m_iBlock; +}; + +struct DictKeywordTaggedCmp_fn +{ + static inline bool IsLess ( const DictKeywordTagged_t & a, const DictKeywordTagged_t & b ) + { + return strcmp ( a.m_sKeyword, b.m_sKeyword ) < 0; + } +}; + +static void DictReadEntry ( CSphBin * pBin, DictKeywordTagged_t & tEntry, BYTE * pKeyword ) +{ + int iKeywordLen = pBin->ReadByte (); + if ( iKeywordLen<0 ) + { + // early eof or read error; flag must be raised + assert ( pBin->IsError() ); + return; + } + + assert ( iKeywordLen>0 && iKeywordLenReadBytes ( pKeyword, iKeywordLen )<0 ) + { + assert ( pBin->IsError() ); + return; + } + pKeyword[iKeywordLen] = '\0'; + + tEntry.m_sKeyword = (char*)pKeyword; + tEntry.m_uOff = pBin->UnzipOffset(); + tEntry.m_iDocs = pBin->UnzipInt(); + tEntry.m_iHits = pBin->UnzipInt(); + tEntry.m_uHint = (BYTE) pBin->ReadByte(); +} + +void CSphDictKeywords::DictBegin ( int iTmpDictFD, int iDictFD, int iDictLimit ) +{ + m_iTmpFD = iTmpDictFD; + m_wrTmpDict.CloseFile (); + m_wrTmpDict.SetFile ( iTmpDictFD, NULL ); + + m_wrDict.CloseFile (); + m_wrDict.SetFile ( iDictFD, NULL ); + m_wrDict.PutByte ( 1 ); + + m_iDictLimit = Max ( iDictLimit, KEYWORD_CHUNK + DICT_CHUNK*(int)sizeof(DictKeyword_t) ); // can't use less than 1 chunk +} + +bool CSphDictKeywords::DictEnd ( SphOffset_t * pCheckpointsPos, int * pCheckpointsCount, int iMemLimit, CSphString & sError ) +{ + DictFlush (); + m_wrTmpDict.CloseFile (); // tricky: file is not owned, so it won't get closed, and iTmpFD won't get invalidated + + if ( !m_dDictBlocks.GetLength() ) + m_wrDict.CloseFile(); + + if ( m_wrTmpDict.IsError() || m_wrDict.IsError() ) + { + sError.SetSprintf ( "dictionary write error (out of space?)" ); + return false; + } + + if ( !m_dDictBlocks.GetLength() ) + { + *pCheckpointsPos = m_wrDict.GetPos (); + *pCheckpointsCount = 0; + return true; + } + + // initialize readers + CSphVector dBins ( m_dDictBlocks.GetLength() ); + + int iMaxBlock = 0; + ARRAY_FOREACH ( i, m_dDictBlocks ) + iMaxBlock = Max ( iMaxBlock, m_dDictBlocks[i].m_iLen ); + + iMemLimit = Max ( iMemLimit, iMaxBlock*m_dDictBlocks.GetLength() ); + int iBinSize = CSphBin::CalcBinSize ( iMemLimit, m_dDictBlocks.GetLength(), "sort_dict" ); + + SphOffset_t iSharedOffset = -1; + ARRAY_FOREACH ( i, m_dDictBlocks ) + { + dBins[i] = new CSphBin(); + dBins[i]->m_iFileLeft = m_dDictBlocks[i].m_iLen; + dBins[i]->m_iFilePos = m_dDictBlocks[i].m_iPos; + dBins[i]->Init ( m_iTmpFD, &iSharedOffset, iBinSize ); + } + + // keywords storage + BYTE * pKeywords = new BYTE [ MAX_KEYWORD_BYTES*dBins.GetLength() ]; + + #define LOC_CLEANUP() \ + { \ + ARRAY_FOREACH ( i, dBins ) \ + SafeDelete ( dBins[i] ); \ + SafeDeleteArray ( pKeywords ); \ + } + + // do the sort + CSphQueue < DictKeywordTagged_t, DictKeywordTaggedCmp_fn > qWords ( dBins.GetLength() ); + DictKeywordTagged_t tEntry; + + ARRAY_FOREACH ( i, dBins ) + { + DictReadEntry ( dBins[i], tEntry, pKeywords + i*MAX_KEYWORD_BYTES ); + if ( dBins[i]->IsError() ) + { + sError.SetSprintf ( "entry read error in dictionary sort (bin %d of %d)", i, dBins.GetLength() ); + LOC_CLEANUP(); + return false; + } + + tEntry.m_iBlock = i; + qWords.Push ( tEntry ); + } + + char sLastKeyword [ MAX_KEYWORD_BYTES ]; + sLastKeyword[0] = '\0'; + + int iWords = 0; + while ( qWords.GetLength() ) + { + const DictKeywordTagged_t & tWord = qWords.Root(); + const int iLen = strlen ( tWord.m_sKeyword ); // OPTIMIZE? + + // store checkpoints as needed + if ( ( iWords % WORDLIST_CHECKPOINT )==0 ) + { + // emit a checkpoint, unless we're at the very dict beginning + if ( iWords ) + { + m_wrDict.ZipInt ( 0 ); + m_wrDict.ZipInt ( 0 ); + } + + BYTE * sClone = new BYTE [ iLen+1 ]; // OPTIMIZE? pool these? + memcpy ( sClone, tWord.m_sKeyword, iLen+1 ); + sClone[iLen] = '\0'; + + CSphWordlistCheckpoint & tCheckpoint = m_dCheckpoints.Add (); + tCheckpoint.m_sWord = (char*) sClone; + tCheckpoint.m_iWordlistOffset = m_wrDict.GetPos(); + + sLastKeyword[0] = '\0'; + } + iWords++; + + // how many bytes of a previous keyword can we reuse? + int iMatch = 0; + while ( sLastKeyword[iMatch] && sLastKeyword[iMatch]==tWord.m_sKeyword[iMatch] ) + iMatch++; + + int iDelta = iLen - iMatch; + assert ( iDelta>0 ); + + memcpy ( sLastKeyword, tWord.m_sKeyword, iLen+1 ); + sLastKeyword[iLen] = '\0'; + + // write final dict entry + assert ( iLen ); + assert ( tWord.m_uOff ); + assert ( tWord.m_iDocs ); + assert ( tWord.m_iHits ); + assert ( iMatch+iDelta<(int)sizeof(sLastKeyword) ); + + // match and delta are usually tiny, pack them together in 1 byte + // tricky bit, this byte leads the entry so it must never be 0 (aka eof mark)! + if ( iDelta<=8 && iMatch<=15 ) + { + m_wrDict.PutByte ( 0x80 + ( (iDelta-1)<<4 ) + iMatch ); + } else + { + m_wrDict.PutByte ( iDelta ); // always greater than 0 + m_wrDict.PutByte ( iMatch ); + } + + m_wrDict.PutBytes ( tWord.m_sKeyword + iMatch, iDelta ); + + m_wrDict.ZipOffset ( tWord.m_uOff ); + m_wrDict.ZipInt ( tWord.m_iDocs ); + m_wrDict.ZipInt ( tWord.m_iHits ); + if ( tWord.m_iDocs>=DOCLIST_HINT_THRESH ) + m_wrDict.PutByte ( tWord.m_uHint ); + + // next + int iBin = tWord.m_iBlock; + qWords.Pop (); + + if ( !dBins[iBin]->IsDone() ) + { + DictReadEntry ( dBins[iBin], tEntry, pKeywords + iBin*MAX_KEYWORD_BYTES ); + if ( dBins[iBin]->IsError() ) + { + sError.SetSprintf ( "entry read error in dictionary sort (bin %d of %d)", iBin, dBins.GetLength() ); + LOC_CLEANUP(); + return false; + } + + tEntry.m_iBlock = iBin; + qWords.Push ( tEntry ); + } + } + + // end of dictionary block + m_wrDict.ZipInt ( 0 ); + m_wrDict.ZipInt ( 0 ); + + LOC_CLEANUP(); + #undef LOC_CLEANUP + + // flush wordlist checkpoints + *pCheckpointsPos = m_wrDict.GetPos(); + *pCheckpointsCount = m_dCheckpoints.GetLength(); + + ARRAY_FOREACH ( i, m_dCheckpoints ) + { + const int iLen = strlen ( m_dCheckpoints[i].m_sWord ); + + assert ( m_dCheckpoints[i].m_iWordlistOffset>0 ); + assert ( iLen>0 && iLenm_sKeyword, b->m_sKeyword ) < 0; + } +}; + +void CSphDictKeywords::DictFlush () +{ + if ( !m_dDictChunks.GetLength() ) + return; + assert ( m_dDictChunks.GetLength() && m_dKeywordChunks.GetLength() ); + + // sort em + int iTotalWords = m_dDictChunks.GetLength()*DICT_CHUNK - m_iDictChunkFree; + CSphVector dWords ( iTotalWords ); + + int iIdx = 0; + ARRAY_FOREACH ( i, m_dDictChunks ) + { + int iWords = DICT_CHUNK; + if ( i==m_dDictChunks.GetLength()-1 ) + iWords -= m_iDictChunkFree; + + DictKeyword_t * pWord = m_dDictChunks[i]; + for ( int j=0; jm_sKeyword ); + m_wrTmpDict.PutByte ( iLen ); + m_wrTmpDict.PutBytes ( pWord->m_sKeyword, iLen ); + m_wrTmpDict.ZipOffset ( pWord->m_uOff ); + m_wrTmpDict.ZipInt ( pWord->m_iDocs ); + m_wrTmpDict.ZipInt ( pWord->m_iHits ); + m_wrTmpDict.PutByte ( pWord->m_uHint ); + } + + tBlock.m_iLen = (int)( m_wrTmpDict.GetPos() - tBlock.m_iPos ); + + // clean up buffers + ARRAY_FOREACH ( i, m_dDictChunks ) + SafeDeleteArray ( m_dDictChunks[i] ); + m_dDictChunks.Resize ( 0 ); + m_pDictChunk = NULL; + m_iDictChunkFree = 0; + + ARRAY_FOREACH ( i, m_dKeywordChunks ) + SafeDeleteArray ( m_dKeywordChunks[i] ); + m_dKeywordChunks.Resize ( 0 ); + m_pKeywordChunk = NULL; + m_iKeywordChunkFree = 0; + + m_iMemUse = 0; +} + +void CSphDictKeywords::DictEntry ( SphWordID_t, BYTE * sKeyword, int iDocs, int iHits, SphOffset_t iDoclistOffset, SphOffset_t iDoclistLength ) +{ + // they say, this might just happen during merge + // FIXME! can we make merge avoid sending such keywords to dict and assert here? + if ( !iDocs ) + return; + + assert ( iHits ); + assert ( iDoclistLength>0 ); + + DictKeyword_t * pWord = NULL; + int iLen = strlen ( (char*)sKeyword ) + 1; + + for ( ;; ) + { + // alloc dict entry + if ( !m_iDictChunkFree ) + { + if ( m_iDictLimit && ( m_iMemUse + (int)sizeof(DictKeyword_t)*DICT_CHUNK )>m_iDictLimit ) + DictFlush (); + + m_pDictChunk = new DictKeyword_t [ DICT_CHUNK ]; + m_iDictChunkFree = DICT_CHUNK; + m_dDictChunks.Add ( m_pDictChunk ); + m_iMemUse += sizeof(DictKeyword_t)*DICT_CHUNK; + } + + // alloc keyword + if ( m_iKeywordChunkFree < iLen ) + { + if ( m_iDictLimit && ( m_iMemUse + KEYWORD_CHUNK )>m_iDictLimit ) + { + DictFlush (); + continue; // because we just flushed pWord + } + + m_pKeywordChunk = new BYTE [ KEYWORD_CHUNK ]; + m_iKeywordChunkFree = KEYWORD_CHUNK; + m_dKeywordChunks.Add ( m_pKeywordChunk ); + m_iMemUse += KEYWORD_CHUNK; + } + // aw kay + break; + } + + pWord = m_pDictChunk++; + m_iDictChunkFree--; + pWord->m_sKeyword = (char*)m_pKeywordChunk; + memcpy ( m_pKeywordChunk, sKeyword, iLen ); + m_pKeywordChunk[iLen-1] = '\0'; + m_pKeywordChunk += iLen; + m_iKeywordChunkFree -= iLen; + + pWord->m_uOff = iDoclistOffset; + pWord->m_iDocs = iDocs; + pWord->m_iHits = iHits; + pWord->m_uHint = DoclistHintPack ( iDocs, iDoclistLength ); +} + +SphWordID_t CSphDictKeywords::GetWordID ( BYTE * pWord ) +{ + SphWordID_t uCRC = CSphDictCRC::GetWordID ( pWord ); + if ( !uCRC || !m_bHitblock ) + return uCRC; + + int iLen = strlen ( (const char *)pWord ); + return HitblockGetID ( (const char *)pWord, iLen, uCRC ); +} + +SphWordID_t CSphDictKeywords::GetWordIDWithMarkers ( BYTE * pWord ) +{ + SphWordID_t uCRC = CSphDictCRC::GetWordIDWithMarkers ( pWord ); + if ( !uCRC || !m_bHitblock ) + return uCRC; + + int iLen = strlen ( (const char *)pWord ); + return HitblockGetID ( (const char *)pWord, iLen, uCRC ); +} + +SphWordID_t CSphDictKeywords::GetWordIDNonStemmed ( BYTE * pWord ) +{ + SphWordID_t uCRC = CSphDictCRC::GetWordIDNonStemmed ( pWord ); + if ( !uCRC || !m_bHitblock ) + return uCRC; + + int iLen = strlen ( (const char *)pWord ); + return HitblockGetID ( (const char *)pWord, iLen, uCRC ); +} + +SphWordID_t CSphDictKeywords::GetWordID ( const BYTE * pWord, int iLen, bool bFilterStops ) +{ + SphWordID_t uCRC = CSphDictCRC::GetWordID ( pWord, iLen, bFilterStops ); + if ( !uCRC || !m_bHitblock ) + return uCRC; + + return HitblockGetID ( (const char *)pWord, iLen, uCRC ); // !COMMIT would break, we kind of strcmp inside; but must never get called? +} + +/// binary search for the first hit with wordid greater than or equal to reference +static CSphWordHit * FindFirstGte ( CSphWordHit * pHits, int iHits, SphWordID_t uID ) +{ + if ( pHits->m_iWordID==uID ) + return pHits; + + CSphWordHit * pL = pHits; + CSphWordHit * pR = pHits + iHits - 1; + if ( pL->m_iWordID > uID || pR->m_iWordID < uID ) + return NULL; + + while ( pR-pL!=1 ) + { + CSphWordHit * pM = pL + ( pR-pL )/2; + if ( pM->m_iWordID < uID ) + pL = pM; + else + pR = pM; + } + + assert ( pR-pL==1 ); + assert ( pL->m_iWordIDm_iWordID>=uID ); + return pR; +} + +/// full crc and keyword check +static inline bool FullIsLess ( const CSphDictKeywords::HitblockException_t & a, const CSphDictKeywords::HitblockException_t & b ) +{ + if ( a.m_uCRC!=b.m_uCRC ) + return a.m_uCRC < b.m_uCRC; + return strcmp ( a.m_pEntry->m_pKeyword, b.m_pEntry->m_pKeyword ) < 0; +} + +/// sort functor to compute collided hits reordering +struct HitblockPatchSort_fn +{ + const CSphDictKeywords::HitblockException_t * m_pExc; + + explicit HitblockPatchSort_fn ( const CSphDictKeywords::HitblockException_t * pExc ) + : m_pExc ( pExc ) + {} + + bool IsLess ( int a, int b ) const + { + return FullIsLess ( m_pExc[a], m_pExc[b] ); + } +}; + +/// do hit block patching magic +void CSphDictKeywords::HitblockPatch ( CSphWordHit * pHits, int iHits ) +{ + if ( !pHits || iHits<=0 ) + return; + + const CSphVector & dExc = m_dExceptions; // shortcut + CSphVector dChunk; + + // reorder hit chunks for exceptions (aka crc collisions) + for ( int iFirst = 0; iFirst < dExc.GetLength()-1; ) + { + // find next span of collisions, iFirst inclusive, iMax exclusive ie. [iFirst,iMax) + // (note that exceptions array is always sorted) + SphWordID_t uFirstWordid = dExc[iFirst].m_pEntry->m_uWordid; + assert ( dExc[iFirst].m_uCRC==uFirstWordid ); + + int iMax = iFirst+1; + SphWordID_t uSpan = uFirstWordid+1; + while ( iMax < dExc.GetLength() && dExc[iMax].m_pEntry->m_uWordid==uSpan ) + { + iMax++; + uSpan++; + } + + // check whether they are in proper order already + bool bSorted = true; + for ( int i=iFirst; im_iWordID==uFirstWordid ); + + // find the chunk starts + for ( int i=1; im_iWordID==uFirstWordid+i ); + } + + CSphWordHit * pTemp; + if ( iMax-iFirst==2 ) + { + // most frequent case, just two collisions + // OPTIMIZE? allocate buffer for the smaller chunk, not just first chunk + pTemp = new CSphWordHit [ dChunk[1]-dChunk[0] ]; + memcpy ( pTemp, dChunk[0], ( dChunk[1]-dChunk[0] )*sizeof(CSphWordHit) ); + memmove ( dChunk[0], dChunk[1], ( dChunk[2]-dChunk[1] )*sizeof(CSphWordHit) ); + memcpy ( dChunk[0] + ( dChunk[2]-dChunk[1] ), pTemp, ( dChunk[1]-dChunk[0] )*sizeof(CSphWordHit) ); + } else + { + // generic case, more than two + CSphVector dReorder ( iMax-iFirst ); + ARRAY_FOREACH ( i, dReorder ) + dReorder[i] = i; + + HitblockPatchSort_fn fnSort ( &dExc[iFirst] ); + dReorder.Sort ( fnSort ); + + // OPTIMIZE? could skip heading and trailing blocks that are already in position + pTemp = new CSphWordHit [ dChunk.Last()-dChunk[0] ]; + CSphWordHit * pOut = pTemp; + + ARRAY_FOREACH ( i, dReorder ) + { + int iChunk = dReorder[i]; + int iHits = dChunk[iChunk+1] - dChunk[iChunk]; + memcpy ( pOut, dChunk[iChunk], iHits*sizeof(CSphWordHit) ); + pOut += iHits; + } + + assert ( ( pOut-pTemp )==( dChunk.Last()-dChunk[0] ) ); + memcpy ( dChunk[0], pTemp, ( dChunk.Last()-dChunk[0] )*sizeof(CSphWordHit) ); + } + + // patching done + SafeDeleteArray ( pTemp ); + iFirst = iMax; + } +} + +const char * CSphDictKeywords::HitblockGetKeyword ( SphWordID_t uWordID ) +{ + const DWORD uHash = (DWORD)( uWordID % SLOTS ); + + HitblockKeyword_t * pEntry = m_dHash [ uHash ]; + while ( pEntry ) + { + // check crc + if ( pEntry->m_uWordid!=uWordID ) + { + // crc mismatch, try next entry + pEntry = pEntry->m_pNextHash; + continue; + } + + return pEntry->m_pKeyword; + } + + ARRAY_FOREACH ( i, m_dExceptions ) + if ( m_dExceptions[i].m_pEntry->m_uWordid==uWordID ) + return m_dExceptions[i].m_pEntry->m_pKeyword; + + assert ( "hash missing value in operator []" ); + return "\31oops"; +} + +////////////////////////////////////////////////////////////////////////// +// DICTIONARY FACTORIES +////////////////////////////////////////////////////////////////////////// + +static CSphDict * SetupDictionary ( CSphDict * pDict, const CSphDictSettings & tSettings, ISphTokenizer * pTokenizer, CSphString & sError, const char * sIndex ) +{ + assert ( pTokenizer ); + assert ( pDict ); + + pDict->Setup ( tSettings ); + if ( pDict->SetMorphology ( tSettings.m_sMorphology.cstr (), pTokenizer->IsUtf8(), sError ) ) + sError = ""; + + pDict->LoadStopwords ( tSettings.m_sStopwords.cstr (), pTokenizer ); + pDict->LoadWordforms ( tSettings.m_sWordforms.cstr (), pTokenizer, sIndex ); + return pDict; +} + + +CSphDict * sphCreateDictionaryCRC ( const CSphDictSettings & tSettings, ISphTokenizer * pTokenizer, CSphString & sError, const char * sIndex ) +{ + CSphDict * pDict = NULL; + if ( tSettings.m_bCrc32 ) + pDict = new CSphDictCRC (); + else + pDict = new CSphDictCRC (); + if ( !pDict ) + return NULL; + return SetupDictionary ( pDict, tSettings, pTokenizer, sError, sIndex ); +} + + +CSphDict * sphCreateDictionaryKeywords ( const CSphDictSettings & tSettings, ISphTokenizer * pTokenizer, CSphString & sError, const char * sIndex ) +{ + CSphDict * pDict = new CSphDictKeywords(); + return SetupDictionary ( pDict, tSettings, pTokenizer, sError, sIndex ); +} + + +void sphShutdownWordforms () +{ + CSphDictCRCTraits::SweepWordformContainers ( NULL, 0 ); +} + +///////////////////////////////////////////////////////////////////////////// +// HTML STRIPPER +///////////////////////////////////////////////////////////////////////////// + +static inline int sphIsTag ( int c ) +{ + return sphIsAlpha(c) || c=='.' || c==':'; +} + +static inline int sphIsTagStart ( int c ) +{ + return ( c>='a' && c<='z' ) || ( c>='A' && c<='Z' ) || c=='_' || c=='.' || c==':'; +} + +CSphHTMLStripper::CSphHTMLStripper ( bool bDefaultTags ) +{ + if ( bDefaultTags ) + { + // known inline tags + const char * dKnown[] = + { + "a", "b", "i", "s", "u", + "basefont", "big", "em", "font", "img", + "label", "small", "span", "strike", "strong", + "sub\0", "sup\0", // fix gcc 3.4.3 on solaris10 compiler bug + "tt" + }; + + m_dTags.Resize ( sizeof(dKnown)/sizeof(dKnown[0]) ); + ARRAY_FOREACH ( i, m_dTags ) + { + m_dTags[i].m_sTag = dKnown[i]; + m_dTags[i].m_iTagLen = strlen ( dKnown[i] ); + m_dTags[i].m_bInline = true; + } + } + + UpdateTags (); +} + + +int CSphHTMLStripper::GetCharIndex ( int iCh ) const +{ + if ( iCh>='a' && iCh<='z' ) return iCh-'a'; + if ( iCh>='A' && iCh<='Z' ) return iCh-'A'; + if ( iCh=='_' ) return 26; + if ( iCh==':' ) return 27; + return -1; +} + + +void CSphHTMLStripper::UpdateTags () +{ + m_dTags.Sort (); + + for ( int i=0; i=(int)sizeof(sTag) ) LOC_ERROR ( "tag name too long", s ); + strncpy ( sTag, s, p-s ); + sTag[p-s] = '\0'; + + // skip spaces + while ( *p && isspace(*p) ) p++; + if ( *p++!='=' ) LOC_ERROR ( "'=' expected", p-1 ); + + // add indexed tag entry, if not there yet + strlwr ( sTag ); + + int iIndexTag = -1; + ARRAY_FOREACH ( i, m_dTags ) + if ( m_dTags[i].m_sTag==sTag ) + { + iIndexTag = i; + break; + } + if ( iIndexTag<0 ) + { + m_dTags.Add(); + m_dTags.Last().m_sTag = sTag; + m_dTags.Last().m_iTagLen = strlen ( sTag ); + iIndexTag = m_dTags.GetLength()-1; + } + + m_dTags[iIndexTag].m_bIndexAttrs = true; + CSphVector & dAttrs = m_dTags[iIndexTag].m_dAttrs; + + // scan attributes + while ( *p ) + { + // skip spaces + while ( *p && isspace(*p) ) p++; + if ( !*p ) break; + + // check attr name + s = p; while ( sphIsTag(*p) ) p++; + if ( s==p ) LOC_ERROR ( "invalid character in attribute name", s ); + + // get attr name + if ( p-s>=(int)sizeof(sAttr) ) LOC_ERROR ( "attribute name too long", s ); + strncpy ( sAttr, s, p-s ); + sAttr[p-s] = '\0'; + + // add attr, if not there yet + int iAttr; + for ( iAttr=0; iAttr' || *p=='\r' ) + pProbEnd = p; + p++; + } + + if ( *p==cEnd ) + return p+1; + + if ( pProbEnd ) + return pProbEnd; + + return p; +} + + +struct HtmlEntity_t +{ + const char * m_sName; + int m_iCode; +}; + + +static inline DWORD HtmlEntityHash ( const BYTE * str, int len ) +{ + static const unsigned short asso_values[] = + { + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 4, + 6, 22, 1, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 170, 48, 0, 5, 44, + 0, 10, 10, 86, 421, 7, 0, 1, 42, 93, + 41, 421, 0, 5, 8, 14, 421, 421, 5, 11, + 8, 421, 421, 421, 421, 421, 421, 1, 25, 27, + 9, 2, 113, 82, 14, 3, 179, 1, 81, 91, + 12, 0, 1, 180, 56, 17, 5, 31, 60, 7, + 3, 161, 2, 3, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, + 421, 421, 421, 421, 421, 421, 421 + }; + + register int hval = len; + switch ( hval ) + { + default: hval += asso_values [ str[4] ]; + case 4: + case 3: hval += asso_values [ str[2] ]; + case 2: hval += asso_values [ str[1]+1 ]; + case 1: hval += asso_values [ str[0] ]; + break; + } + return hval + asso_values [ str[len-1] ]; +} + + +static inline int HtmlEntityLookup ( const BYTE * str, int len ) +{ + static const unsigned char lengthtable[] = + { + 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 3, + 4, 3, 3, 5, 3, 6, 5, 5, 3, 4, 4, 5, 3, 4, + 4, 0, 5, 4, 5, 6, 5, 6, 4, 5, 3, 3, 5, 0, + 0, 0, 0, 6, 0, 5, 5, 0, 5, 6, 6, 3, 0, 3, + 5, 3, 0, 6, 0, 4, 3, 6, 3, 6, 6, 6, 6, 5, + 5, 5, 5, 5, 5, 2, 6, 4, 0, 6, 3, 3, 3, 0, + 4, 5, 4, 4, 4, 3, 7, 4, 3, 6, 2, 3, 6, 4, + 3, 6, 5, 6, 5, 5, 4, 2, 0, 0, 4, 6, 8, 0, + 0, 0, 5, 5, 0, 6, 6, 2, 2, 4, 4, 6, 6, 4, + 4, 5, 6, 2, 3, 4, 6, 5, 0, 2, 0, 0, 6, 6, + 6, 6, 6, 4, 6, 5, 0, 6, 4, 5, 4, 6, 6, 0, + 0, 4, 6, 5, 6, 0, 6, 4, 5, 6, 5, 6, 4, 0, + 3, 6, 0, 4, 4, 4, 5, 4, 6, 0, 4, 4, 6, 5, + 6, 7, 2, 2, 6, 2, 5, 2, 5, 0, 0, 0, 4, 4, + 2, 4, 2, 2, 4, 0, 4, 4, 4, 5, 5, 0, 3, 7, + 5, 0, 5, 6, 5, 0, 6, 0, 6, 0, 4, 6, 4, 6, + 6, 2, 6, 0, 5, 5, 4, 6, 6, 0, 5, 6, 4, 4, + 4, 4, 0, 5, 0, 5, 0, 4, 5, 4, 0, 4, 4, 4, + 0, 0, 0, 4, 0, 0, 0, 5, 6, 5, 3, 0, 0, 6, + 5, 4, 5, 5, 5, 5, 0, 5, 5, 0, 5, 0, 0, 0, + 4, 6, 0, 3, 0, 5, 5, 0, 0, 3, 6, 5, 0, 4, + 0, 0, 0, 0, 5, 7, 5, 3, 5, 3, 0, 0, 6, 0, + 6, 0, 0, 7, 0, 0, 5, 0, 5, 0, 0, 0, 0, 5, + 4, 0, 0, 0, 0, 0, 7, 4, 0, 0, 3, 0, 0, 0, + 3, 0, 6, 0, 0, 7, 5, 5, 0, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 5, + 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 5 + }; + + static const struct HtmlEntity_t wordlist[] = + { + {""}, {""}, {""}, {""}, {""}, {""}, + {"Rho", 929}, + {""}, {""}, {""}, {""}, {""}, + {"Chi", 935}, + {"phi", 966}, + {"iota", 953}, + {"psi", 968}, + {"int", 8747}, + {"theta", 952}, + {"amp", 38}, + {"there4", 8756}, + {"Theta", 920}, + {"omega", 969}, + {"and", 8743}, + {"prop", 8733}, + {"ensp", 8194}, + {"image", 8465}, + {"not", 172}, + {"isin", 8712}, + {"sdot", 8901}, + {""}, + {"prime", 8242}, + {"prod", 8719}, + {"trade", 8482}, + {"Scaron", 352}, + {"kappa", 954}, + {"thinsp", 8201}, + {"emsp", 8195}, + {"thorn", 254}, + {"eta", 951}, + {"chi", 967}, + {"Kappa", 922}, + {""}, {""}, {""}, {""}, + {"scaron", 353}, + {""}, + {"notin", 8713}, + {"ndash", 8211}, + {""}, + {"acute", 180}, + {"otilde", 245}, + {"atilde", 227}, + {"Phi", 934}, + {""}, + {"Psi", 936}, + {"pound", 163}, + {"cap", 8745}, + {""}, + {"otimes", 8855}, + {""}, + {"nbsp", 32}, + {"rho", 961}, + {"ntilde", 241}, + {"eth", 240}, + {"oacute", 243}, + {"aacute", 225}, + {"eacute", 233}, + {"iacute", 237}, + {"nabla", 8711}, + {"Prime", 8243}, + {"ocirc", 244}, + {"acirc", 226}, + {"ecirc", 234}, + {"icirc", 238}, + {"or", 8744}, + {"Yacute", 221}, + {"nsub", 8836}, + {""}, + {"Uacute", 218}, + {"Eta", 919}, + {"ETH", 208}, + {"sup", 8835}, + {""}, + {"supe", 8839}, + {"Ucirc", 219}, + {"sup1", 185}, + {"para", 182}, + {"sup2", 178}, + {"loz", 9674}, + {"omicron", 959}, + {"part", 8706}, + {"cup", 8746}, + {"Ntilde", 209}, + {"Mu", 924}, + {"tau", 964}, + {"uacute", 250}, + {"Iota", 921}, + {"Tau", 932}, + {"rsaquo", 8250}, + {"alpha", 945}, + {"Ccedil", 199}, + {"ucirc", 251}, + {"oline", 8254}, + {"sup3", 179}, + {"nu", 957}, + {""}, {""}, + {"sube", 8838}, + {"Eacute", 201}, + {"thetasym", 977}, + {""}, {""}, {""}, + {"Omega", 937}, + {"Ecirc", 202}, + {""}, + {"lowast", 8727}, + {"iquest", 191}, + {"lt", 60}, + {"gt", 62}, + {"ordm", 186}, + {"euro", 8364}, + {"oslash", 248}, + {"lsaquo", 8249}, + {"zeta", 950}, + {"cong", 8773}, + {"mdash", 8212}, + {"ccedil", 231}, + {"ne", 8800}, + {"sub", 8834}, + {"Zeta", 918}, + {"Lambda", 923}, + {"Gamma", 915}, + {""}, + {"Nu", 925}, + {""}, {""}, + {"ograve", 242}, + {"agrave", 224}, + {"egrave", 232}, + {"igrave", 236}, + {"frac14", 188}, + {"ordf", 170}, + {"Otilde", 213}, + {"infin", 8734}, + {""}, + {"frac12", 189}, + {"beta", 946}, + {"radic", 8730}, + {"darr", 8595}, + {"Iacute", 205}, + {"Ugrave", 217}, + {""}, {""}, + {"harr", 8596}, + {"hearts", 9829}, + {"Icirc", 206}, + {"Oacute", 211}, + {""}, + {"frac34", 190}, + {"cent", 162}, + {"crarr", 8629}, + {"curren", 164}, + {"Ocirc", 212}, + {"brvbar", 166}, + {"sect", 167}, + {""}, + {"ang", 8736}, + {"ugrave", 249}, + {""}, + {"Beta", 914}, + {"uarr", 8593}, + {"dArr", 8659}, + {"asymp", 8776}, + {"perp", 8869}, + {"Dagger", 8225}, + {""}, + {"hArr", 8660}, + {"rang", 9002}, + {"dagger", 8224}, + {"exist", 8707}, + {"Egrave", 200}, + {"Omicron", 927}, + {"mu", 956}, + {"pi", 960}, + {"weierp", 8472}, + {"xi", 958}, + {"clubs", 9827}, + {"Xi", 926}, + {"aring", 229}, + {""}, {""}, {""}, + {"copy", 169}, + {"uArr", 8657}, + {"ni", 8715}, + {"rarr", 8594}, + {"le", 8804}, + {"ge", 8805}, + {"zwnj", 8204}, + {""}, + {"apos", 39}, + {"macr", 175}, + {"lang", 9001}, + {"gamma", 947}, + {"Delta", 916}, + {""}, + {"uml", 168}, + {"alefsym", 8501}, + {"delta", 948}, + {""}, + {"bdquo", 8222}, + {"lambda", 955}, + {"equiv", 8801}, + {""}, + {"Oslash", 216}, + {""}, + {"hellip", 8230}, + {""}, + {"rArr", 8658}, + {"Atilde", 195}, + {"larr", 8592}, + {"spades", 9824}, + {"Igrave", 204}, + {"Pi", 928}, + {"yacute", 253}, + {""}, + {"diams", 9830}, + {"sbquo", 8218}, + {"fnof", 402}, + {"Ograve", 210}, + {"plusmn", 177}, + {""}, + {"rceil", 8969}, + {"Aacute", 193}, + {"ouml", 246}, + {"auml", 228}, + {"euml", 235}, + {"iuml", 239}, + {""}, + {"Acirc", 194}, + {""}, + {"rdquo", 8221}, + {""}, + {"lArr", 8656}, + {"rsquo", 8217}, + {"Yuml", 376}, + {""}, + {"quot", 34}, + {"Uuml", 220}, + {"bull", 8226}, + {""}, {""}, {""}, + {"real", 8476}, + {""}, {""}, {""}, + {"lceil", 8968}, + {"permil", 8240}, + {"upsih", 978}, + {"sum", 8721}, + {""}, {""}, + {"divide", 247}, + {"raquo", 187}, + {"uuml", 252}, + {"ldquo", 8220}, + {"Alpha", 913}, + {"szlig", 223}, + {"lsquo", 8216}, + {""}, + {"Sigma", 931}, + {"tilde", 732}, + {""}, + {"THORN", 222}, + {""}, {""}, {""}, + {"Euml", 203}, + {"rfloor", 8971}, + {""}, + {"lrm", 8206}, + {""}, + {"sigma", 963}, + {"iexcl", 161}, + {""}, {""}, + {"deg", 176}, + {"middot", 183}, + {"laquo", 171}, + {""}, + {"circ", 710}, + {""}, {""}, {""}, {""}, + {"frasl", 8260}, + {"epsilon", 949}, + {"oplus", 8853}, + {"yen", 165}, + {"micro", 181}, + {"piv", 982}, + {""}, {""}, + {"lfloor", 8970}, + {""}, + {"Agrave", 192}, + {""}, {""}, + {"Upsilon", 933}, + {""}, {""}, + {"times", 215}, + {""}, + {"cedil", 184}, + {""}, {""}, {""}, {""}, + {"minus", 8722}, + {"Iuml", 207}, + {""}, {""}, {""}, {""}, {""}, + {"upsilon", 965}, + {"Ouml", 214}, + {""}, {""}, + {"rlm", 8207}, + {""}, {""}, {""}, + {"reg", 174}, + {""}, + {"forall", 8704}, + {""}, {""}, + {"Epsilon", 917}, + {"empty", 8709}, + {"OElig", 338}, + {""}, + {"shy", 173}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"Aring", 197}, + {""}, {""}, {""}, + {"oelig", 339}, + {"aelig", 230}, + {""}, + {"zwj", 8205}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, + {"sim", 8764}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"yuml", 255}, + {"sigmaf", 962}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"Auml", 196}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, + {"AElig", 198} + }; + + const int MIN_WORD_LENGTH = 2; + const int MAX_WORD_LENGTH = 8; + const int MAX_HASH_VALUE = 420; + + if ( len<=MAX_WORD_LENGTH && len>=MIN_WORD_LENGTH ) + { + register int key = HtmlEntityHash ( str, len ); + if ( key<=MAX_HASH_VALUE && key>=0 ) + if ( len==lengthtable[key] ) + { + register const char * s = wordlist[key].m_sName; + if ( *str==*s && !memcmp ( str+1, s+1, len-1 ) ) + return wordlist[key].m_iCode; + } + } + return 0; +} + + +void CSphHTMLStripper::Strip ( BYTE * sData ) const +{ + const BYTE * s = sData; + BYTE * d = sData; + for ( ;; ) + { + ///////////////////////////////////// + // scan until eof, or tag, or entity + ///////////////////////////////////// + + while ( *s && *s!='<' && *s!='&' ) + { + if ( *s>=0x20 ) + *d++ = *s; + else + *d++ = ' '; + s++; + } + if ( !*s ) + break; + + ///////////////// + // handle entity + ///////////////// + + if ( *s=='&' ) + { + if ( s[1]=='#' ) + { + // handle "&#number;" form + int iCode = 0; + s += 2; + while ( isdigit(*s) ) + iCode = iCode*10 + (*s++) - '0'; + + if ( ( iCode>=0 && iCode<=0x1f ) || *s!=';' ) // 0-31 are reserved codes + continue; + + d += sphUTF8Encode ( d, iCode ); + s++; + + } else + { + // skip until ';' or max length + if ( ( s[1]>='a' && s[1]<='z' ) || ( s[1]>='A' && s[1]<='Z' ) ) + { + const int MAX_ENTITY_LEN = 8; + const BYTE * sStart = s+1; + while ( *s && *s!=';' && s-sStart<=MAX_ENTITY_LEN ) + s++; + + if ( *s==';' ) + { + int iCode = HtmlEntityLookup ( sStart, (int)(s-sStart) ); + if ( iCode>0 ) + { + // this is a known entity; encode it + d += sphUTF8Encode ( d, iCode ); + s++; + continue; + } + } + + // rollback + s = sStart-1; + } + + // if we're here, it's not an entity; pass the leading ampersand and rescan + *d++ = *s++; + } + continue; + } + + ////////////// + // handle tag + ////////////// + + assert ( *s=='<' ); + if ( GetCharIndex(s[1])<0 ) + { + if ( s[1]=='/' ) + { + // check if it's valid closing tag + if ( GetCharIndex(s[2])<0 ) + { + *d++ = *s++; + continue; + } + + } else if ( s[1]=='!' ) + { + if ( s[2]=='-' && s[3]=='-' ) + { + // it's valid comment; scan until comment end + s += 4; // skip opening '' + continue; + + } else if ( isalpha(s[2]) ) + { + // it's style PI; scan until PI end + s += 2; + while ( *s && *s!='>' ) + { + if ( *s=='\'' || *s=='"' ) + { + s = SkipQuoted ( s ); + while ( isspace(*s) ) s++; + } else + { + s++; + } + } + if ( *s=='>' ) + s++; + continue; + + } else + { + // it's something malformed; just ignore + *d++ = *s++; + continue; + } + + } else if ( s[1]=='?' ) + { + // scan until PI end + s += 2; // skip opening '' ) + break; + s++; + } + if ( !*s ) + break; + s += 2; // skip closing '?>' + continue; + + } else + { + // simply malformed + *d++ = *s++; + continue; + } + } + s++; // skip '<' + + ////////////////////////////////////// + // lookup this tag in known tags list + ////////////////////////////////////// + + const StripperTag_t * pTag = NULL; + int iZoneNameLen = 0; + const BYTE * sZoneName = NULL; + s = FindTag ( s, &pTag, &sZoneName, &iZoneNameLen ); + + ///////////////////////////////////// + // process tag contents + // index attributes if needed + // gracefully handle malformed stuff + ///////////////////////////////////// + +#define LOC_SKIP_SPACES() { while ( sphIsSpace(*s) ) s++; if ( !*s || *s=='>' ) break; } + + bool bIndexAttrs = ( pTag && pTag->m_bIndexAttrs ); + while ( *s && *s!='>' ) + { + LOC_SKIP_SPACES(); + if ( sphIsTagStart(*s) ) + { + // skip attribute name while it's valid + const BYTE * sAttr = s; + while ( sphIsTag(*s) ) + s++; + + // blanks or a value after a valid attribute name? + if ( sphIsSpace(*s) || *s=='=' ) + { + const int iAttrLen = (int)( s - sAttr ); + LOC_SKIP_SPACES(); + + // a valid name but w/o a value; keep scanning + if ( *s!='=' ) + continue; + + // got value! + s++; + LOC_SKIP_SPACES(); + + // check attribute name + // OPTIMIZE! remove linear search + int iAttr = -1; + if ( bIndexAttrs ) + { + for ( iAttr=0; iAttrm_dAttrs.GetLength(); iAttr++ ) + { + int iLen = strlen ( pTag->m_dAttrs[iAttr].cstr() ); + if ( iLen==iAttrLen && !strncasecmp ( pTag->m_dAttrs[iAttr].cstr(), (const char*)sAttr, iLen ) ) + break; + } + if ( iAttr==pTag->m_dAttrs.GetLength() ) + iAttr = -1; + } + + // process the value + const BYTE * sVal = s; + if ( *s=='\'' || *s=='"' ) + { + // skip quoted value until a matching quote + s = SkipQuoted ( s ); + } else + { + // skip unquoted value until tag end or whitespace + while ( *s && *s!='>' && !sphIsSpace(*s) ) + s++; + } + + // if this one is to be indexed, copy it + if ( iAttr>=0 ) + { + const BYTE * sMax = s; + if ( *sVal=='\'' || *sVal=='"' ) + { + if ( sMax[-1]==sVal[0] ) + sMax--; + sVal++; + } + while ( sValm_bZone ) + { + // should be at tag's end + assert ( s[0]=='\0' || s[-1]=='>' ); + + // emit secret codes + *d++ = MAGIC_CODE_ZONE; + for ( int i=0; im_bPara ) + { + *d++ = MAGIC_CODE_PARAGRAPH; + continue; + } + + // in all cases, the tag must be fully processed at this point + // not a remove-tag? we're done + if ( !pTag->m_bRemove ) + { + if ( !pTag->m_bInline ) + *d++ = ' '; + continue; + } + + // sudden eof? bail out + if ( !*s ) + break; + + // must be a proper remove-tag end, then + assert ( pTag->m_bRemove && s[-1]=='>' ); + + // short-form? we're done + if ( s[-2]=='/' ) + continue; + + // skip everything until the closing tag + // FIXME! should we handle insane cases with quoted closing tag within tag? + for ( ;; ) + { + while ( *s && ( s[0]!='<' || s[1]!='/' ) ) s++; + if ( !*s ) break; + + s += 2; // skip m_sTag.cstr(), (const char*)s, pTag->m_iTagLen )!=0 ) continue; + if ( !sphIsTag ( s[pTag->m_iTagLen] ) ) + { + s += pTag->m_iTagLen; // skip tag + if ( *s=='>' ) s++; + break; + } + } + + if ( !pTag->m_bInline ) *d++ = ' '; + } + *d++ = '\0'; + + // space, paragraph sequences elimination pass + s = sData; + d = sData; + bool bSpaceOut = false; + bool bParaOut = false; + bool bZoneOut = false; + while ( const char c = *s++ ) + { + assert ( d<=s-1 ); + + // handle different character classes + if ( sphIsSpace(c) ) + { + // handle whitespace, skip dupes + if ( !bSpaceOut ) + *d++ = ' '; + + bSpaceOut = true; + continue; + + } else if ( c==MAGIC_CODE_PARAGRAPH ) + { + // handle paragraph marker, skip dupes + if ( !bParaOut && !bZoneOut ) + { + *d++ = c; + bParaOut = true; + } + + bSpaceOut = true; + continue; + + } else if ( c==MAGIC_CODE_ZONE ) + { + // zone marker + // rewind preceding paragraph, if any, it is redundant + if ( bParaOut ) + { + assert ( d>sData && d[-1]==MAGIC_CODE_PARAGRAPH ); + d--; + } + + // copy \4zoneid\4 + *d++ = c; + while ( *s && *s!=MAGIC_CODE_ZONE ) + *d++ = *s++; + + if ( *s ) + *d++ = *s++; + + // update state + // no spaces paragraphs allowed + bSpaceOut = bZoneOut = true; + bParaOut = false; + continue; + + } else + { + *d++ = c; + bSpaceOut = bParaOut = bZoneOut = false; + } + } + *d++ = '\0'; +} + +const BYTE * CSphHTMLStripper::FindTag ( const BYTE * sSrc, const StripperTag_t ** ppTag, const BYTE ** ppZoneName, int * pZoneNameLen ) const +{ + assert ( sSrc && ppTag && ppZoneName && pZoneNameLen ); + assert ( sSrc[0]!='/' || sSrc[1]!='\0' ); + + const BYTE * sTagName = ( sSrc[0]=='/' ) ? sSrc+1 : sSrc; + + *ppZoneName = sSrc; + *pZoneNameLen = 0; + + int iIdx = GetCharIndex ( sTagName[0] ); + assert ( iIdx>=0 && iIdx=0 ) + { + int iStart = m_dStart[iIdx]; + int iEnd = m_dEnd[iIdx]; + + for ( int i=iStart; i<=iEnd; i++ ) + { + int iLen = m_dTags[i].m_iTagLen; + int iCmp = strncasecmp ( m_dTags[i].m_sTag.cstr(), (const char*)sTagName, iLen ); + + // the tags are sorted; so if current candidate is already greater, rest can be skipped + if ( iCmp>0 ) + break; + + // do we have a match? + if ( iCmp==0 ) + { + // got exact match? + if ( !sphIsTag ( sTagName[iLen] ) ) + { + *ppTag = m_dTags.Begin() + i; + sSrc = sTagName + iLen; // skip tag name + if ( m_dTags[i].m_bZone ) + *pZoneNameLen = sSrc - *ppZoneName; + break; + } + + // got wildcard match? + if ( m_dTags[i].m_bZonePrefix ) + { + *ppTag = m_dTags.Begin() + i; + sSrc = sTagName + iLen; + while ( sphIsTag(*sSrc) ) + sSrc++; + *pZoneNameLen = sSrc - *ppZoneName; + break; + } + } + } + } + + return sSrc; +} + +bool CSphHTMLStripper::IsValidTagStart ( int iCh ) const +{ + int i = GetCharIndex ( iCh ); + return ( i>=0 && i0 ) && ( m_dPrefixFields.GetLength()==0 || m_dPrefixFields.Contains ( sField ) ); + bool bInfix = ( m_iMinInfixLen>0 ) && ( m_dInfixFields.GetLength()==0 || m_dInfixFields.Contains ( sField ) ); + + assert ( !( bPrefix && bInfix ) ); // no field must be marked both prefix and infix + if ( bPrefix ) + return SPH_WORDPART_PREFIX; + if ( bInfix ) + return SPH_WORDPART_INFIX; + return SPH_WORDPART_WHOLE; +} + +////////////////////////////////////////////////////////////////////////// + +CSphSource::CSphSource ( const char * sName ) + : m_pTokenizer ( NULL ) + , m_pDict ( NULL ) + , m_tSchema ( sName ) + , m_bStripHTML ( false ) + , m_iNullIds ( 0 ) + , m_iMaxIds ( 0 ) +{ + m_pStripper = new CSphHTMLStripper ( true ); +} + + +CSphSource::~CSphSource() +{ + delete m_pStripper; +} + + +void CSphSource::SetDict ( CSphDict * pDict ) +{ + assert ( pDict ); + m_pDict = pDict; +} + + +const CSphSourceStats & CSphSource::GetStats () +{ + return m_tStats; +} + + +bool CSphSource::SetStripHTML ( const char * sExtractAttrs, const char * sRemoveElements, bool bDetectParagraphs, const char * sZones, CSphString & sError ) +{ + m_bStripHTML = ( sExtractAttrs!=NULL ); + if ( !m_bStripHTML ) + return false; + + if ( !m_pStripper->SetIndexedAttrs ( sExtractAttrs, sError ) ) + return false; + + if ( !m_pStripper->SetRemovedElements ( sRemoveElements, sError ) ) + return false; + + if ( bDetectParagraphs ) + m_pStripper->EnableParagraphs (); + + if ( !m_pStripper->SetZones ( sZones, sError ) ) + return false; + + return true; +} + + +void CSphSource::SetTokenizer ( ISphTokenizer * pTokenizer ) +{ + assert ( pTokenizer ); + m_pTokenizer = pTokenizer; +} + + +bool CSphSource::UpdateSchema ( CSphSchema * pInfo, CSphString & sError ) +{ + assert ( pInfo ); + + // fill it + if ( pInfo->m_dFields.GetLength()==0 && pInfo->GetAttrsCount()==0 ) + { + *pInfo = m_tSchema; + return true; + } + + // check it + return m_tSchema.CompareTo ( *pInfo, sError ); +} + + +void CSphSource::Setup ( const CSphSourceSettings & tSettings ) +{ + m_iMinPrefixLen = Max ( tSettings.m_iMinPrefixLen, 0 ); + m_iMinInfixLen = Max ( tSettings.m_iMinInfixLen, 0 ); + m_iBoundaryStep = Max ( tSettings.m_iBoundaryStep, -1 ); + m_bIndexExactWords = tSettings.m_bIndexExactWords; + m_iOvershortStep = Min ( Max ( tSettings.m_iOvershortStep, 0 ), 1 ); + m_iStopwordStep = Min ( Max ( tSettings.m_iStopwordStep, 0 ), 1 ); + m_bDebugDump = tSettings.m_bDebugDump; //coreseek: assign debug charset setting + m_bIndexSP = tSettings.m_bIndexSP; + m_dPrefixFields = tSettings.m_dPrefixFields; + m_dInfixFields = tSettings.m_dInfixFields; +} + + +SphDocID_t CSphSource::VerifyID ( SphDocID_t uID ) +{ + if ( uID==0 ) + { + m_iNullIds++; + return 0; + } + + if ( uID==DOCID_MAX ) + { + m_iMaxIds++; + return 0; + } + + return uID; +} + + +ISphHits * CSphSource::IterateJoinedHits ( CSphString & ) +{ + static ISphHits dDummy; + m_tDocInfo.m_iDocID = 0; // pretend that's an eof + return &dDummy; +} + +///////////////////////////////////////////////////////////////////////////// +// DOCUMENT SOURCE +///////////////////////////////////////////////////////////////////////////// + +static void FormatEscaped ( FILE * fp, const char * sLine ) +{ + // handle empty lines + if ( !sLine || !*sLine ) + { + fprintf ( fp, "''" ); + return; + } + + // pass one, count the needed buffer size + int iLen = strlen(sLine); + int iOut = 0; + for ( int i=0; i(int)sizeof(sMinibuffer) ) + { + sMaxibuffer = new char [ iOut+4 ]; // 4 is just my safety gap + sBuffer = sMaxibuffer; + } + + // pass two, escape it + char * sOut = sBuffer; + *sOut++ = '\''; + + for ( int i=0; im_iDocID != m_tDocInfo.m_iDocID) + m_tHits.m_dData.Resize ( 0 ); + }else + m_tHits.m_dData.Resize ( 0 ); + BuildHits ( sError, false ); + return &m_tHits; +} + + +bool CSphSource_Document::CheckFileField ( const BYTE * sField ) +{ + CSphAutofile tFileSource; + CSphString sError; + + if ( tFileSource.Open ( (const char *)sField, SPH_O_READ, sError )==-1 ) + { + sphWarning ( "docid=" DOCID_FMT ": %s", m_tDocInfo.m_iDocID, sError.cstr() ); + return false; + } + + int64_t iFileSize = tFileSource.GetSize(); + if ( iFileSize+16 > m_iMaxFileBufferSize ) + { + sphWarning ( "docid=" DOCID_FMT ": file '%s' too big for a field (size="INT64_FMT", max_file_field_buffer=%d)", + m_tDocInfo.m_iDocID, (const char *)sField, iFileSize, m_iMaxFileBufferSize ); + return false; + } + + return true; +} + + +/// returns file size on success, and replaces *ppField with a pointer to data +/// returns -1 on failure (and emits a warning) +int CSphSource_Document::LoadFileField ( BYTE ** ppField, CSphString & sError ) +{ + CSphAutofile tFileSource; + + BYTE * sField = *ppField; + if ( tFileSource.Open ( (const char *)sField, SPH_O_READ, sError )==-1 ) + { + sphWarning ( "docid=" DOCID_FMT ": %s", m_tDocInfo.m_iDocID, sError.cstr() ); + return -1; + } + + int64_t iFileSize = tFileSource.GetSize(); + if ( iFileSize+16 > m_iMaxFileBufferSize ) + { + sphWarning ( "docid=" DOCID_FMT ": file '%s' too big for a field (size="INT64_FMT", max_file_field_buffer=%d)", + m_tDocInfo.m_iDocID, (const char *)sField, iFileSize, m_iMaxFileBufferSize ); + return -1; + } + + int iFieldBytes = (int)iFileSize; + if ( !iFieldBytes ) + return 0; + + int iBufSize = Max ( m_iReadFileBufferSize, 1 << sphLog2 ( iFieldBytes+15 ) ); + if ( m_iReadFileBufferSize < iBufSize ) + SafeDeleteArray ( m_pReadFileBuffer ); + + if ( !m_pReadFileBuffer ) + { + m_pReadFileBuffer = new char [ iBufSize ]; + m_iReadFileBufferSize = iBufSize; + } + + if ( !tFileSource.Read ( m_pReadFileBuffer, iFieldBytes, sError ) ) + { + sphWarning ( "docid=" DOCID_FMT ": read failed: %s", m_tDocInfo.m_iDocID, sError.cstr() ); + return -1; + } + + m_pReadFileBuffer[iFieldBytes] = '\0'; + + *ppField = (BYTE*)m_pReadFileBuffer; + return iFieldBytes; +} + + +#define BUILD_SUBSTRING_HITS_COUNT 4 + +void CSphSource_Document::BuildSubstringHits ( SphDocID_t uDocid, bool bPayload, ESphWordpart eWordpart, bool bSkipEndMarker ) +{ + bool bPrefixField = ( eWordpart==SPH_WORDPART_PREFIX ); + bool bInfixMode = m_iMinInfixLen > 0; + + int iMinInfixLen = bPrefixField ? m_iMinPrefixLen : m_iMinInfixLen; + if ( !m_tState.m_bProcessingHits ) + m_tState.m_iBuildLastStep = 1; + + BYTE * sWord = NULL; + BYTE sBuf [ 16+3*SPH_MAX_WORD_LEN ]; + + int iIterHitCount = BUILD_SUBSTRING_HITS_COUNT; + if ( bPrefixField ) + iIterHitCount += SPH_MAX_WORD_LEN - m_iMinPrefixLen; + else + iIterHitCount += ( ( m_iMinInfixLen+SPH_MAX_WORD_LEN ) * ( SPH_MAX_WORD_LEN-m_iMinInfixLen ) / 2 ); + + // index all infixes + while ( ( m_iMaxHits==0 || m_tHits.m_dData.GetLength()+iIterHitCountGetToken() )!=NULL ) + { + if ( !bPayload ) + { + HITMAN::AddPos ( &m_tState.m_iHitPos, m_tState.m_iBuildLastStep + m_pTokenizer->GetOvershortCount()*m_iOvershortStep ); + if ( m_pTokenizer->GetBoundary() ) + HITMAN::AddPos ( &m_tState.m_iHitPos, m_iBoundaryStep ); + m_tState.m_iBuildLastStep = 1; + } + + int iLen = m_pTokenizer->GetLastTokenLen (); + + // always index full word (with magic head/tail marker(s)) + int iBytes = strlen ( (const char*)sWord ); + + if ( m_bIndexExactWords ) + { + int iBytes = strlen ( (const char*)sWord ); + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD_NONSTEMMED; + sBuf[iBytes+1] = '\0'; + m_tHits.AddHit ( uDocid, m_pDict->GetWordIDNonStemmed ( sBuf ), m_tState.m_iHitPos ); + } + + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD; + sBuf[iBytes+1] = '\0'; + + // stemmed word w/markers + SphWordID_t iWord = m_pDict->GetWordIDWithMarkers ( sBuf ); + if ( iWord ) + m_tHits.AddHit ( uDocid, iWord, m_tState.m_iHitPos ); + else + { + m_tState.m_iBuildLastStep = m_iStopwordStep; + continue; + } + + // restore stemmed word + int iStemmedLen = strlen ( ( const char *)sBuf ); + sBuf [iStemmedLen - 1] = '\0'; + + // stemmed word w/o markers + if ( strcmp ( (const char *)sBuf + 1, (const char *)sWord ) ) + m_tHits.AddHit ( uDocid, m_pDict->GetWordID ( sBuf + 1, iStemmedLen - 2, true ), m_tState.m_iHitPos ); + + // restore word + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[iBytes+1] = MAGIC_WORD_TAIL; + sBuf[iBytes+2] = '\0'; + + // if there are no infixes, that's it + if ( iMinInfixLen > iLen ) + { + // index full word + m_tHits.AddHit ( uDocid, m_pDict->GetWordID ( sWord ), m_tState.m_iHitPos ); + continue; + } + + // process all infixes + int iMaxStart = bPrefixField ? 0 : ( iLen - iMinInfixLen ); + + BYTE * sInfix = sBuf + 1; + + for ( int iStart=0; iStart<=iMaxStart; iStart++ ) + { + BYTE * sInfixEnd = sInfix; + for ( int i = 0; i < iMinInfixLen; i++ ) + sInfixEnd += m_pTokenizer->GetCodepointLength ( *sInfixEnd ); + + for ( int i=iMinInfixLen; i<=iLen-iStart; i++ ) + { + m_tHits.AddHit ( uDocid, m_pDict->GetWordID ( sInfix, sInfixEnd-sInfix, false ), m_tState.m_iHitPos ); + + // word start: add magic head + if ( bInfixMode && iStart==0 ) + m_tHits.AddHit ( uDocid, m_pDict->GetWordID ( sInfix - 1, sInfixEnd-sInfix + 1, false ), m_tState.m_iHitPos ); + + // word end: add magic tail + if ( bInfixMode && i==iLen-iStart ) + m_tHits.AddHit ( uDocid, m_pDict->GetWordID ( sInfix, sInfixEnd-sInfix+1, false ), m_tState.m_iHitPos ); + + sInfixEnd += m_pTokenizer->GetCodepointLength ( *sInfixEnd ); + } + + sInfix += m_pTokenizer->GetCodepointLength ( *sInfix ); + } + } + + m_tState.m_bProcessingHits = ( sWord!=NULL ); + + // mark trailing hits + if ( !bSkipEndMarker && !m_tState.m_bProcessingHits && m_tHits.Length() ) + { + CSphWordHit * pHit = const_cast < CSphWordHit * > ( m_tHits.Last() ); + Hitpos_t uRefPos = pHit->m_iWordPos; + + for ( ; pHit>=m_tHits.First() && pHit->m_iWordPos==uRefPos; pHit-- ) + HITMAN::SetEndMarker ( &pHit->m_iWordPos ); + } +} + + +#define BUILD_REGULAR_HITS_COUNT 6 + +void CSphSource_Document::BuildRegularHits ( SphDocID_t uDocid, bool bPayload, bool bSkipEndMarker ) +{ + bool bWordDict = m_pDict->GetSettings().m_bWordDict; + bool bGlobalPartialMatch = !bWordDict && ( m_iMinPrefixLen > 0 || m_iMinInfixLen > 0 ); + + if ( !m_tState.m_bProcessingHits ) + m_tState.m_iBuildLastStep = 1; + + BYTE * sWord = NULL; + BYTE sBuf [ 16+3*SPH_MAX_WORD_LEN ]; + + // index words only + while ( ( m_iMaxHits==0 || m_tHits.m_dData.GetLength()+BUILD_REGULAR_HITS_COUNTGetToken() )!=NULL ) + { + //debug dump + if(m_pTokenizer->DumpToken()) { + printf("%s/x ", sWord); + } + + if ( !bPayload ) + { + HITMAN::AddPos ( &m_tState.m_iHitPos, m_tState.m_iBuildLastStep + m_pTokenizer->GetOvershortCount()*m_iOvershortStep ); + if ( m_pTokenizer->GetBoundary() ) + HITMAN::AddPos ( &m_tState.m_iHitPos, m_iBoundaryStep ); + } + + if ( *sWord==MAGIC_CODE_SENTENCE || *sWord==MAGIC_CODE_PARAGRAPH || *sWord==MAGIC_CODE_ZONE ) + { + m_tHits.AddHit ( uDocid, m_pDict->GetWordID ( (BYTE*)MAGIC_WORD_SENTENCE ), m_tState.m_iHitPos ); + + if ( *sWord==MAGIC_CODE_PARAGRAPH || *sWord==MAGIC_CODE_ZONE ) + m_tHits.AddHit ( uDocid, m_pDict->GetWordID ( (BYTE*)MAGIC_WORD_PARAGRAPH ), m_tState.m_iHitPos ); + + if ( *sWord==MAGIC_CODE_ZONE ) + { + BYTE * pZone = (BYTE*) m_pTokenizer->GetBufferPtr(); + BYTE * pEnd = pZone; + while ( *pEnd!=MAGIC_CODE_ZONE ) + pEnd++; + *pEnd = '\0'; + m_tHits.AddHit ( uDocid, m_pDict->GetWordID ( pZone-1 ), m_tState.m_iHitPos ); + m_pTokenizer->SetBufferPtr ( (const char*) pEnd+1 ); + } + + m_tState.m_iBuildLastStep = 1; + continue; + } + + if ( bGlobalPartialMatch ) + { + int iBytes = strlen ( (const char*)sWord ); + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD; + sBuf[iBytes+1] = '\0'; + m_tHits.AddHit ( uDocid, m_pDict->GetWordIDWithMarkers ( sBuf ), m_tState.m_iHitPos ); + } + + if ( m_bIndexExactWords ) + { + int iBytes = strlen ( (const char*)sWord ); + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD_NONSTEMMED; + sBuf[iBytes+1] = '\0'; + m_tHits.AddHit ( uDocid, m_pDict->GetWordIDNonStemmed ( sBuf ), m_tState.m_iHitPos ); + } + + SphWordID_t iWord = m_pDict->GetWordID ( sWord ); + if ( iWord ) + { + m_tHits.AddHit ( uDocid, iWord, m_tState.m_iHitPos ); + m_tState.m_iBuildLastStep = m_pTokenizer->TokenIsBlended() ? 0 : 1; + } else + m_tState.m_iBuildLastStep = m_iStopwordStep; + + // temporary append --mmseg + // zh_cn only GetThesaurus + { + int iBytes = strlen ( (const char*)sWord ); + const BYTE* tbuf_ptr = m_pTokenizer->GetThesaurus(sWord, iBytes); + if(tbuf_ptr) { + while(*tbuf_ptr) { + size_t len = strlen((const char*)tbuf_ptr); + SphWordID_t iWord = m_pDict->GetWordID ( tbuf_ptr ,len , true); + if ( iWord ) { + m_tHits.AddHit ( uDocid, iWord, m_tState.m_iHitPos ); + // mmseg; do not inc step for we are in 'one' hit. + //m_tState.m_iBuildLastStep = m_pTokenizer->TokenIsBlended() ? 0 : 1; + } + tbuf_ptr += len + 1; //move next + } + } + //end if buf + }//end GetThesaurus + } + + m_tState.m_bProcessingHits = ( sWord!=NULL ); + + // mark trailing hit + if ( !bSkipEndMarker && !m_tState.m_bProcessingHits && m_tHits.Length() ) + { + CSphWordHit * pHit = const_cast < CSphWordHit * > ( m_tHits.Last() ); + HITMAN::SetEndMarker ( &pHit->m_iWordPos ); + } +} + + +void CSphSource_Document::BuildHits ( CSphString & sError, bool bSkipEndMarker ) +{ + SphDocID_t uDocid = m_tDocInfo.m_iDocID; + + for ( ; m_tState.m_iFieldStrip ( sField ); + iFieldBytes = (int) strlen ( (char*)sField ); + } + + // tokenize and build hits + m_tStats.m_iTotalBytes += iFieldBytes; + + m_pTokenizer->SetBuffer ( sField, iFieldBytes ); + + m_tState.m_iHitPos = HITMAN::Create ( m_tState.m_iField, m_tState.m_iStartPos ); + } + + const CSphColumnInfo & tField = m_tSchema.m_dFields[m_tState.m_iField]; + + if ( tField.m_eWordpart!=SPH_WORDPART_WHOLE ) + BuildSubstringHits ( uDocid, tField.m_bPayload, tField.m_eWordpart, bSkipEndMarker ); + else + BuildRegularHits ( uDocid, tField.m_bPayload, bSkipEndMarker ); + + if ( m_tState.m_bProcessingHits ) + break; + } + + m_tState.m_bDocumentDone = !m_tState.m_bProcessingHits; +} + +// -coreseek -pysource +BYTE* CSphSource_Document::GetField ( int iFieldIndex) +{ + //use dFields for compatible reason, keep this. + return m_tState.m_dFields[iFieldIndex]; +} + + +void CSphSource_Document::ParseFieldMVA ( CSphVector < CSphVector < DWORD > > & dFieldMVAs, int iFieldMVA, const char * szValue ) +{ + dFieldMVAs [iFieldMVA].Resize ( 0 ); + + if ( !szValue ) + return; + + const char * pPtr = szValue; + const char * pDigit = NULL; + const int MAX_NUMBER_LEN = 64; + char szBuf [MAX_NUMBER_LEN]; + + while ( *pPtr ) + { + if ( *pPtr>='0' && *pPtr<='9' ) + { + if ( !pDigit ) + pDigit = pPtr; + } else + { + if ( pDigit ) + { + if ( pPtr - pDigit < MAX_NUMBER_LEN ) + { + strncpy ( szBuf, pDigit, pPtr - pDigit ); + szBuf [pPtr - pDigit] = '\0'; + dFieldMVAs [iFieldMVA].Add ( sphToDword ( szBuf ) ); + } + + pDigit = NULL; + } + } + + pPtr++; + } + + if ( pDigit ) + dFieldMVAs [iFieldMVA].Add ( sphToDword ( pDigit ) ); +} + +///////////////////////////////////////////////////////////////////////////// +// GENERIC SQL SOURCE +///////////////////////////////////////////////////////////////////////////// + +CSphSourceParams_SQL::CSphSourceParams_SQL () + : m_iRangeStep ( 1024 ) + , m_iRefRangeStep ( 1024 ) + , m_bPrintQueries ( false ) + , m_iRangedThrottle ( 0 ) + , m_iMaxFileBufferSize ( 0 ) + , m_eOnFileFieldError ( FFE_IGNORE_FIELD ) + , m_iPort ( 0 ) +{ +} + + +const char * const CSphSource_SQL::MACRO_VALUES [ CSphSource_SQL::MACRO_COUNT ] = +{ + "$start", + "$end" +}; + + +CSphSource_SQL::CSphSource_SQL ( const char * sName ) + : CSphSource_Document ( sName ) + , m_bSqlConnected ( false ) + , m_uMinID ( 0 ) + , m_uMaxID ( 0 ) + , m_uCurrentID ( 0 ) + , m_uMaxFetchedID ( 0 ) + , m_iMultiAttr ( -1 ) + , m_iSqlFields ( 0 ) + , m_iFieldMVA ( 0 ) + , m_iFieldMVAIterator ( 0 ) + , m_bCanUnpack ( false ) + , m_bUnpackFailed ( false ) + , m_bUnpackOverflow ( false ) + , m_iJoinedHitField ( -1 ) + , m_iJoinedHitID ( 0 ) + , m_iJoinedHitPos ( 0 ) +{ +} + + +bool CSphSource_SQL::Setup ( const CSphSourceParams_SQL & tParams ) +{ + // checks + assert ( !tParams.m_sQuery.IsEmpty() ); + + m_tParams = tParams; + + // defaults + #define LOC_FIX_NULL(_arg) if ( !m_tParams._arg.cstr() ) m_tParams._arg = ""; + LOC_FIX_NULL ( m_sHost ); + LOC_FIX_NULL ( m_sUser ); + LOC_FIX_NULL ( m_sPass ); + LOC_FIX_NULL ( m_sDB ); + #undef LOC_FIX_NULL + + #define LOC_FIX_QARRAY(_arg) \ + ARRAY_FOREACH ( i, m_tParams._arg ) \ + if ( m_tParams._arg[i].IsEmpty() ) \ + m_tParams._arg.Remove ( i-- ); + LOC_FIX_QARRAY ( m_dQueryPre ); + LOC_FIX_QARRAY ( m_dQueryPost ); + LOC_FIX_QARRAY ( m_dQueryPostIndex ); + #undef LOC_FIX_QARRAY + + // build and store default DSN for error reporting + char sBuf [ 1024 ]; + snprintf ( sBuf, sizeof(sBuf), "sql://%s:***@%s:%d/%s", + m_tParams.m_sUser.cstr(), m_tParams.m_sHost.cstr(), + m_tParams.m_iPort, m_tParams.m_sDB.cstr() ); + m_sSqlDSN = sBuf; + + if ( m_tParams.m_iMaxFileBufferSize > 0 ) + m_iMaxFileBufferSize = m_tParams.m_iMaxFileBufferSize; + m_eOnFileFieldError = m_tParams.m_eOnFileFieldError; + + return true; +} + + +bool CSphSource_SQL::RunQueryStep ( const char * sQuery, CSphString & sError ) +{ + sError = ""; + + if ( m_tParams.m_iRangeStep<=0 ) + return false; + if ( m_uCurrentID>m_uMaxID ) + return false; + + static const int iBufSize = 32; + char * sRes = NULL; + + sphSleepMsec ( m_tParams.m_iRangedThrottle ); + + ////////////////////////////////////////////// + // range query with $start/$end interpolation + ////////////////////////////////////////////// + + assert ( m_uMinID>0 ); + assert ( m_uMaxID>0 ); + assert ( m_uMinID<=m_uMaxID ); + assert ( sQuery ); + + char sValues [ MACRO_COUNT ] [ iBufSize ]; + SphDocID_t uNextID = Min ( m_uCurrentID + m_tParams.m_iRangeStep - 1, m_uMaxID ); + snprintf ( sValues[0], iBufSize, DOCID_FMT, m_uCurrentID ); + snprintf ( sValues[1], iBufSize, DOCID_FMT, uNextID ); + g_iIndexerCurrentRangeMin = m_uCurrentID; + g_iIndexerCurrentRangeMax = uNextID; + m_uCurrentID = 1 + uNextID; + + // OPTIMIZE? things can be precalculated + const char * sCur = sQuery; + int iLen = 0; + while ( *sCur ) + { + if ( *sCur=='$' ) + { + int i; + for ( i=0; im_uMaxID ) + LOC_ERROR2 ( "sql_query_range: min_id='%s', max_id='%s': min_id must be less than max_id", sCol0, sCol1 ); + } + + SqlDismissResult (); + return true; +} + + +/// issue main rows fetch query +bool CSphSource_SQL::IterateStart ( CSphString & sError ) +{ + assert ( m_bSqlConnected ); + + m_iNullIds = false; + m_iMaxIds = false; + + // run pre-queries + ARRAY_FOREACH ( i, m_tParams.m_dQueryPre ) + { + if ( !SqlQuery ( m_tParams.m_dQueryPre[i].cstr() ) ) + { + sError.SetSprintf ( "sql_query_pre[%d]: %s (DSN=%s)", i, SqlError(), m_sSqlDSN.cstr() ); + SqlDisconnect (); + return false; + } + SqlDismissResult (); + } + + for ( ;; ) + { + m_tParams.m_iRangeStep = 0; + + // issue first fetch query + if ( !m_tParams.m_sQueryRange.IsEmpty() ) + { + m_tParams.m_iRangeStep = m_tParams.m_iRefRangeStep; + // run range-query; setup ranges + if ( !SetupRanges ( m_tParams.m_sQueryRange.cstr(), m_tParams.m_sQuery.cstr(), "sql_query_range: ", sError ) ) + return false; + + // issue query + m_uCurrentID = m_uMinID; + if ( !RunQueryStep ( m_tParams.m_sQuery.cstr(), sError ) ) + return false; + } else + { + // normal query; just issue + if ( !SqlQuery ( m_tParams.m_sQuery.cstr() ) ) + { + sError.SetSprintf ( "sql_query: %s (DSN=%s)", SqlError(), m_sSqlDSN.cstr() ); + return false; + } + } + break; + } + + // some post-query setup + m_tSchema.Reset(); + + for ( int i=0; i dFound; + dFound.Resize ( m_tParams.m_dAttrs.GetLength() ); + ARRAY_FOREACH ( i, dFound ) + dFound[i] = false; + + const bool bWordDict = m_pDict->GetSettings().m_bWordDict; + + // map plain attrs from SQL + for ( int i=0; iSPH_MAX_FIELDS ) + LOC_ERROR2 ( "too many fields (fields=%d, max=%d)", + m_tSchema.m_dFields.GetLength(), SPH_MAX_FIELDS ); + + // log it + if ( m_fpDumpRows ) + { + const char * sTable = m_tSchema.m_sName.cstr(); + + time_t iNow = time ( NULL ); + fprintf ( m_fpDumpRows, "#\n# === source %s ts %d\n# %s#\n", sTable, (int)iNow, ctime ( &iNow ) ); + ARRAY_FOREACH ( i, m_tSchema.m_dFields ) + fprintf ( m_fpDumpRows, "# field %d: %s\n", i, m_tSchema.m_dFields[i].m_sName.cstr() ); + + for ( int i=0; i=m_tSchema.GetAttrsCount() ) + return false; + + m_iMultiAttr = iAttr; + const CSphColumnInfo & tAttr = m_tSchema.GetAttr(iAttr); + + if ( !(tAttr.m_eAttrType==SPH_ATTR_UINT32SET || tAttr.m_eAttrType==SPH_ATTR_UINT64SET ) ) + return false; + + CSphString sPrefix; + switch ( tAttr.m_eSrc ) + { + case SPH_ATTRSRC_FIELD: + return false; + + case SPH_ATTRSRC_QUERY: + // run simple query + if ( !SqlQuery ( tAttr.m_sQuery.cstr() ) ) + { + sError.SetSprintf ( "multi-valued attr '%s' query failed: %s", tAttr.m_sName.cstr(), SqlError() ); + return false; + } + break; + + case SPH_ATTRSRC_RANGEDQUERY: + m_tParams.m_iRangeStep = m_tParams.m_iRefRangeStep; + + // setup ranges + sPrefix.SetSprintf ( "multi-valued attr '%s' ranged query: ", tAttr.m_sName.cstr() ); + if ( !SetupRanges ( tAttr.m_sQueryRange.cstr(), tAttr.m_sQuery.cstr(), sPrefix.cstr(), sError ) ) + return false; + + // run first step (in order to report errors) + m_uCurrentID = m_uMinID; + if ( !RunQueryStep ( tAttr.m_sQuery.cstr(), sError ) ) + return false; + + break; + + default: + sError.SetSprintf ( "INTERNAL ERROR: unknown multi-valued attr source type %d", tAttr.m_eSrc ); + return false; + } + + // check fields count + if ( SqlNumFields()!=2 ) + { + sError.SetSprintf ( "multi-valued attr '%s' query returned %d fields (expected 2)", tAttr.m_sName.cstr(), SqlNumFields() ); + SqlDismissResult (); + return false; + } + return true; +} + + +bool CSphSource_SQL::IterateMultivaluedNext () +{ + const CSphColumnInfo & tAttr = m_tSchema.GetAttr ( m_iMultiAttr ); + + assert ( m_bSqlConnected ); + assert ( tAttr.m_eAttrType==SPH_ATTR_UINT32SET || tAttr.m_eAttrType==SPH_ATTR_UINT64SET ); + + // fetch next row + bool bGotRow = SqlFetchRow (); + while ( !bGotRow ) + { + if ( SqlIsError() ) + sphDie ( "sql_fetch_row: %s", SqlError() ); // FIXME! this should be reported + + if ( tAttr.m_eSrc!=SPH_ATTRSRC_RANGEDQUERY ) + return false; + + CSphString sTmp; + if ( !RunQueryStep ( tAttr.m_sQuery.cstr(), sTmp ) ) // FIXME! this should be reported + return false; + + bGotRow = SqlFetchRow (); + continue; + } + + // return that tuple + const CSphAttrLocator & tLoc = m_tSchema.GetAttr ( m_iMultiAttr ).m_tLocator; + m_tDocInfo.m_iDocID = sphToDocid ( SqlColumn(0) ); + if ( tAttr.m_eAttrType==SPH_ATTR_UINT32SET ) + m_tDocInfo.SetAttr ( tLoc, sphToDword ( SqlColumn(1) ) ); + else + m_tDocInfo.SetAttr ( tLoc, sphToUint64 ( SqlColumn(1) ) ); + return true; +} + + +bool CSphSource_SQL::IterateFieldMVAStart ( int iAttr, CSphString & ) +{ + if ( iAttr<0 || iAttr>=m_tSchema.GetAttrsCount() ) + return false; + + if ( m_dAttrToFieldMVA[iAttr]==-1 ) + return false; + + m_iFieldMVA = iAttr; + m_iFieldMVAIterator = 0; + + return true; +} + + +bool CSphSource_SQL::IterateFieldMVANext () +{ + int iFieldMVA = m_dAttrToFieldMVA [m_iFieldMVA]; + if ( m_iFieldMVAIterator>=m_dFieldMVAs[iFieldMVA].GetLength() ) + return false; + + const CSphColumnInfo & tAttr = m_tSchema.GetAttr ( m_iFieldMVA ); + m_tDocInfo.SetAttr ( tAttr.m_tLocator, m_dFieldMVAs[iFieldMVA][m_iFieldMVAIterator] ); + + ++m_iFieldMVAIterator; + + return true; +} + + +bool CSphSource_SQL::IterateKillListStart ( CSphString & sError ) +{ + if ( m_tParams.m_sQueryKilllist.IsEmpty () ) + return false; + + if ( !SqlQuery ( m_tParams.m_sQueryKilllist.cstr () ) ) + { + sError.SetSprintf ( "killlist query failed: %s", SqlError() ); + return false; + } + + return true; +} + + +bool CSphSource_SQL::IterateKillListNext ( SphDocID_t & tDocId ) +{ + if ( SqlFetchRow () ) + tDocId = sphToDocid ( SqlColumn(0) ); + else + { + if ( SqlIsError() ) + sphDie ( "sql_query_killlist: %s", SqlError() ); // FIXME! this should be reported + else + { + SqlDismissResult (); + return false; + } + } + + return true; +} + + +void CSphSource_SQL::ReportUnpackError ( int iIndex, int iError ) +{ + if ( !m_bUnpackFailed ) + { + m_bUnpackFailed = true; + sphWarn ( "failed to unpack column '%s', error=%d, docid=" DOCID_FMT, SqlFieldName(iIndex), iError, m_tDocInfo.m_iDocID ); + } +} + + +#if !USE_ZLIB + +const char * CSphSource_SQL::SqlUnpackColumn ( int iFieldIndex, ESphUnpackFormat ) +{ + return SqlColumn ( m_tSchema.m_dFields[iFieldIndex].m_iIndex ); +} + +#else + +const char * CSphSource_SQL::SqlUnpackColumn ( int iFieldIndex, ESphUnpackFormat eFormat ) +{ + int iIndex = m_tSchema.m_dFields[iFieldIndex].m_iIndex; + const char * pData = SqlColumn(iIndex); + + if ( pData==NULL || pData[0]==0 ) + return pData; + + CSphVector & tBuffer = m_dUnpackBuffers[iFieldIndex]; + switch ( eFormat ) + { + case SPH_UNPACK_MYSQL_COMPRESS: + { + unsigned long uSize = 0; + for ( int i=0; i<4; i++ ) + uSize += (unsigned long)pData[i] << ( 8*i ); + uSize &= 0x3FFFFFFF; + + if ( uSize > m_tParams.m_uUnpackMemoryLimit ) + { + if ( !m_bUnpackOverflow ) + { + m_bUnpackOverflow = true; + sphWarn ( "failed to unpack '%s', column size limit exceeded (size=%d)", SqlFieldName(iIndex), (int)uSize ); + } + return NULL; + } + + int iResult; + tBuffer.Resize ( uSize + 1 ); + iResult = uncompress ( (Bytef *)&tBuffer[0], &uSize, (Bytef *)pData + 4, SqlColumnLength(iIndex) ); + if ( iResult==Z_OK ) + { + tBuffer[uSize] = 0; + return &tBuffer[0]; + } else + ReportUnpackError ( iIndex, iResult ); + return NULL; + } + + case SPH_UNPACK_ZLIB: + { + char * sResult = 0; + int iBufferOffset = 0; + int iResult; + + z_stream tStream; + tStream.zalloc = Z_NULL; + tStream.zfree = Z_NULL; + tStream.opaque = Z_NULL; + tStream.avail_in = SqlColumnLength(iIndex); + tStream.next_in = (Bytef *)SqlColumn(iIndex); + + iResult = inflateInit ( &tStream ); + if ( iResult!=Z_OK ) + return NULL; + + for ( ;; ) + { + tStream.next_out = (Bytef *)&tBuffer[iBufferOffset]; + tStream.avail_out = tBuffer.GetLength() - iBufferOffset - 1; + + iResult = inflate ( &tStream, Z_NO_FLUSH ); + if ( iResult==Z_STREAM_END ) + { + tBuffer [ tStream.total_out ] = 0; + sResult = &tBuffer[0]; + break; + } else if ( iResult==Z_OK ) + { + assert ( tStream.avail_out==0 ); + + tBuffer.Resize ( tBuffer.GetLength()*2 ); + iBufferOffset = tStream.total_out; + } else + { + ReportUnpackError ( iIndex, iResult ); + break; + } + } + + inflateEnd ( &tStream ); + return sResult; + } + + case SPH_UNPACK_NONE: + return pData; + } + return NULL; +} +#endif // USE_ZLIB + + +ISphHits * CSphSource_SQL::IterateJoinedHits ( CSphString & sError ) +{ + m_tHits.m_dData.Resize ( 0 ); + + // eof check + if ( m_iJoinedHitField>=m_tSchema.m_dFields.GetLength() ) + { + m_tDocInfo.m_iDocID = 0; + return &m_tHits; + } + + bool bProcessingRanged = true; + + // my fetch loop + while ( m_iJoinedHitFieldm_tDocInfo.m_iDocID ) + { + sError.SetSprintf ( "joined field '%s': query MUST return document IDs in ASC order", + m_tSchema.m_dFields[m_iJoinedHitField].m_sName.cstr() ); + return NULL; + } + + // next document? update tracker, reset position + if ( m_iJoinedHitIDm_iWordPos ); + + if ( m_tState.m_bProcessingHits ) + break; + } else if ( SqlIsError() ) + { + // error while fetching row + sError = SqlError(); + return NULL; + + } else + { + int iLastField = m_iJoinedHitField; + bool bRanged = ( m_iJoinedHitField>=m_tSchema.m_iBaseFields && m_iJoinedHitField=m_tSchema.m_dFields.GetLength() ) + { + m_tDocInfo.m_iDocID = ( m_tHits.Length() ? 1 : 0 ); // to eof or not to eof + return &m_tHits; + } + + SqlDismissResult (); + + bProcessingRanged = false; + bool bCheckNumFields = true; + CSphColumnInfo & tJoined = m_tSchema.m_dFields[m_iJoinedHitField]; + + // start fetching next field + if ( tJoined.m_eSrc!=SPH_ATTRSRC_RANGEDQUERY ) + { + if ( !SqlQuery ( tJoined.m_sQuery.cstr() ) ) + { + sError = SqlError(); + return NULL; + } + } else + { + m_tParams.m_iRangeStep = m_tParams.m_iRefRangeStep; + + // setup ranges for next field + if ( iLastField!=m_iJoinedHitField ) + { + CSphString sPrefix; + sPrefix.SetSprintf ( "joined field '%s' ranged query: ", tJoined.m_sName.cstr() ); + if ( !SetupRanges ( tJoined.m_sQueryRange.cstr(), tJoined.m_sQuery.cstr(), sPrefix.cstr(), sError ) ) + return NULL; + + m_uCurrentID = m_uMinID; + } + + // run first step (in order to report errors) + bool bRes = RunQueryStep ( tJoined.m_sQuery.cstr(), sError ); + bProcessingRanged = bRes; // select next documents in range or loop once to process next field + bCheckNumFields = bRes; + + if ( !sError.IsEmpty() ) + return NULL; + } + + const int iExpected = m_tSchema.m_dFields[m_iJoinedHitField].m_bPayload ? 3 : 2; + if ( bCheckNumFields && SqlNumFields()!=iExpected ) + { + const char * sName = m_tSchema.m_dFields[m_iJoinedHitField].m_sName.cstr(); + sError.SetSprintf ( "joined field '%s': query MUST return exactly %d columns, got %d", sName, iExpected, SqlNumFields() ); + return NULL; + } + + m_iJoinedHitID = 0; + m_iJoinedHitPos = 0; + } + } + + return &m_tHits; +} + +///////////////////////////////////////////////////////////////////////////// +// MYSQL SOURCE +///////////////////////////////////////////////////////////////////////////// + +#if USE_MYSQL + +CSphSourceParams_MySQL::CSphSourceParams_MySQL () + : m_iFlags ( 0 ) +{ + m_iPort = 3306; +} + + +CSphSource_MySQL::CSphSource_MySQL ( const char * sName ) + : CSphSource_SQL ( sName ) + , m_pMysqlResult ( NULL ) + , m_pMysqlFields ( NULL ) + , m_tMysqlRow ( NULL ) + , m_pMysqlLengths ( NULL ) +{ + m_bCanUnpack = true; +} + + +void CSphSource_MySQL::SqlDismissResult () +{ + if ( !m_pMysqlResult ) + return; + + while ( m_pMysqlResult ) + { + mysql_free_result ( m_pMysqlResult ); + m_pMysqlResult = NULL; + + // stored procedures might return multiple result sets + // FIXME? we might want to index all of them + // but for now, let's simply dismiss additional result sets + if ( mysql_next_result ( &m_tMysqlDriver )==0 ) + { + m_pMysqlResult = mysql_use_result ( &m_tMysqlDriver ); + + static bool bOnce = false; + if ( !bOnce && m_pMysqlResult && mysql_num_rows ( m_pMysqlResult ) ) + { + sphWarn ( "indexing of multiple result sets is not supported yet; some results sets were dismissed!" ); + bOnce = true; + } + } + } + + m_pMysqlFields = NULL; + m_pMysqlLengths = NULL; +} + + +bool CSphSource_MySQL::SqlQuery ( const char * sQuery ) +{ + if ( mysql_query ( &m_tMysqlDriver, sQuery ) ) + { + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, "SQL-QUERY: %s: FAIL\n", sQuery ); + return false; + } + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, "SQL-QUERY: %s: ok\n", sQuery ); + + m_pMysqlResult = mysql_use_result ( &m_tMysqlDriver ); + m_pMysqlFields = NULL; + return true; +} + + +bool CSphSource_MySQL::SqlIsError () +{ + return mysql_errno ( &m_tMysqlDriver )!=0; +} + + +const char * CSphSource_MySQL::SqlError () +{ + return mysql_error ( &m_tMysqlDriver ); +} + + +bool CSphSource_MySQL::SqlConnect () +{ + mysql_init ( &m_tMysqlDriver ); + + if ( !m_sSslKey.IsEmpty() || !m_sSslCert.IsEmpty() || !m_sSslCA.IsEmpty() ) + mysql_ssl_set ( &m_tMysqlDriver, m_sSslKey.cstr(), m_sSslCert.cstr(), m_sSslCA.cstr(), NULL, NULL ); + + m_iMysqlConnectFlags |= CLIENT_MULTI_RESULTS; // we now know how to handle this + bool bRes = ( NULL!=mysql_real_connect ( &m_tMysqlDriver, + m_tParams.m_sHost.cstr(), m_tParams.m_sUser.cstr(), m_tParams.m_sPass.cstr(), + m_tParams.m_sDB.cstr(), m_tParams.m_iPort, m_sMysqlUsock.cstr(), m_iMysqlConnectFlags ) ); + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, bRes ? "SQL-CONNECT: ok\n" : "SQL-CONNECT: FAIL\n" ); + return bRes; +} + + +void CSphSource_MySQL::SqlDisconnect () +{ + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, "SQL-DISCONNECT\n" ); + + mysql_close ( &m_tMysqlDriver ); +} + + +int CSphSource_MySQL::SqlNumFields () +{ + if ( !m_pMysqlResult ) + return -1; + + return mysql_num_fields ( m_pMysqlResult ); +} + + +bool CSphSource_MySQL::SqlFetchRow () +{ + if ( !m_pMysqlResult ) + return false; + + m_tMysqlRow = mysql_fetch_row ( m_pMysqlResult ); + return m_tMysqlRow!=NULL; +} + + +const char * CSphSource_MySQL::SqlColumn ( int iIndex ) +{ + if ( !m_pMysqlResult ) + return NULL; + + return m_tMysqlRow[iIndex]; +} + + +const char * CSphSource_MySQL::SqlFieldName ( int iIndex ) +{ + if ( !m_pMysqlResult ) + return NULL; + + if ( !m_pMysqlFields ) + m_pMysqlFields = mysql_fetch_fields ( m_pMysqlResult ); + + return m_pMysqlFields[iIndex].name; +} + + +DWORD CSphSource_MySQL::SqlColumnLength ( int iIndex ) +{ + if ( !m_pMysqlResult ) + return 0; + + if ( !m_pMysqlLengths ) + m_pMysqlLengths = mysql_fetch_lengths ( m_pMysqlResult ); + + return m_pMysqlLengths[iIndex]; +} + + +bool CSphSource_MySQL::Setup ( const CSphSourceParams_MySQL & tParams ) +{ + if ( !CSphSource_SQL::Setup ( tParams ) ) + return false; + + m_sMysqlUsock = tParams.m_sUsock; + m_iMysqlConnectFlags = tParams.m_iFlags; + m_sSslKey = tParams.m_sSslKey; + m_sSslCert = tParams.m_sSslCert; + m_sSslCA = tParams.m_sSslCA; + + // build and store DSN for error reporting + char sBuf [ 1024 ]; + snprintf ( sBuf, sizeof(sBuf), "mysql%s", m_sSqlDSN.cstr()+3 ); + m_sSqlDSN = sBuf; + + return true; +} + +#endif // USE_MYSQL + +///////////////////////////////////////////////////////////////////////////// +// PGSQL SOURCE +///////////////////////////////////////////////////////////////////////////// + +#if USE_PGSQL + +CSphSourceParams_PgSQL::CSphSourceParams_PgSQL () +{ + m_iRangeStep = 1024; + m_iPort = 5432; +} + + +CSphSource_PgSQL::CSphSource_PgSQL ( const char * sName ) + : CSphSource_SQL ( sName ) + , m_pPgResult ( NULL ) + , m_iPgRows ( 0 ) + , m_iPgRow ( 0 ) +{ +} + + +bool CSphSource_PgSQL::SqlIsError () +{ + return ( m_iPgRow iBufLen ); + + m_pTag = NULL; + m_iTagLength = 0; + m_pPipe = NULL; + m_pBuffer = NULL; + m_pBufferEnd = NULL; + m_sBuffer = new BYTE [m_iBufferSize]; + + if ( iBufLen ) + memcpy ( m_sBuffer, dInitialBuf, iBufLen ); +} + + +CSphSource_XMLPipe::~CSphSource_XMLPipe () +{ + Disconnect (); + SafeDeleteArray ( m_sBuffer ); +} + + +void CSphSource_XMLPipe::Disconnect () +{ + m_iInitialBufLen = 0; + + m_tHits.m_dData.Reset(); + m_tSchema.Reset (); + + if ( m_pPipe ) + { + pclose ( m_pPipe ); + m_pPipe = NULL; + } +} + + +bool CSphSource_XMLPipe::Setup ( FILE * pPipe, const char * sCommand ) +{ + assert ( sCommand ); + m_pPipe = pPipe; + m_sCommand = sCommand; + return true; +} + + +bool CSphSource_XMLPipe::Connect ( CSphString & ) +{ + m_bEOF = false; + m_bWarned = false; + + m_tSchema.m_dFields.Reset (); + m_tSchema.m_dFields.Add ( CSphColumnInfo ( "title" ) ); + m_tSchema.m_dFields.Add ( CSphColumnInfo ( "body" ) ); + + CSphColumnInfo tGid ( "gid", SPH_ATTR_INTEGER ); + CSphColumnInfo tTs ( "ts", SPH_ATTR_TIMESTAMP ); + m_tSchema.AddAttr ( tGid, true ); // all attributes are dynamic at indexing time + m_tSchema.AddAttr ( tTs, true ); // all attributes are dynamic at indexing time + + m_tDocInfo.Reset ( m_tSchema.GetRowSize() ); + + m_pBuffer = m_iInitialBufLen > 0 ? m_sBuffer : NULL; + m_pBufferEnd = m_pBuffer ? m_pBuffer + m_iInitialBufLen : NULL; + + char sBuf [ 1024 ]; + snprintf ( sBuf, sizeof(sBuf), "xmlpipe(%s)", m_sCommand.cstr() ); + m_tSchema.m_sName = sBuf; + + m_tHits.m_dData.Reserve ( MAX_SOURCE_HITS ); + + return true; +} + +bool CSphSource_XMLPipe::IterateDocument ( CSphString & sError ) +{ + PROFILE ( src_xmlpipe ); + char sTitle [ 1024 ]; // FIXME? + + assert ( m_pPipe ); + assert ( m_pTokenizer ); + + m_tHits.m_dData.Resize ( 0 ); + m_bHitsReady = false; + + ///////////////////////// + // parse document header + ///////////////////////// + + // check for eof + if ( !SkipWhitespace() ) + { + m_tDocInfo.m_iDocID = 0; + return true; + } + + // look for opening '' tag + SetTag ( "document" ); + if ( !SkipTag ( true, sError ) ) + return false; + + if ( !ScanInt ( "id", &m_tDocInfo.m_iDocID, sError ) ) + return false; + m_tStats.m_iTotalDocuments++; + + SphAttr_t uVal; + if ( !ScanInt ( "group", &uVal, sError ) ) uVal = 1; m_tDocInfo.SetAttr ( m_tSchema.GetAttr(0).m_tLocator, uVal ); + if ( !ScanInt ( "timestamp", &uVal, sError ) ) uVal = 1; m_tDocInfo.SetAttr ( m_tSchema.GetAttr(1).m_tLocator, uVal ); + + if ( !ScanStr ( "title", sTitle, sizeof(sTitle), sError ) ) + return false; + + // index title + { + int iLen = (int)strlen ( sTitle ); + Hitpos_t iPos = HITMAN::Create ( 0, 1 ); + BYTE * sWord; + + m_pTokenizer->SetBuffer ( (BYTE*)sTitle, iLen ); + while ( ( sWord = m_pTokenizer->GetToken() )!=NULL && m_tHits.Length()GetWordID ( sWord ), iPos ); + HITMAN::AddPos ( &iPos, 1 ); + } + } + + CheckHitsCount ( "title" ); + + SetTag ( "body" ); + if ( !SkipTag ( true, sError ) ) + return false; + + m_iWordPos = 0; + + ///////////////////////////// + // parse body chunk by chunk + ///////////////////////////// + + // check for body tag end in this buffer + const char * szBodyEnd = ""; + + bool bFirstPass = true; + bool bBodyEnd = false; + BYTE * p = m_pBuffer; + + while ( !bBodyEnd ) + { + p = m_pBuffer; + while ( pSetBuffer ( m_pBuffer, p-m_pBuffer ); + + // tokenize + BYTE * sWord; + while ( ( sWord = m_pTokenizer->GetToken () )!=NULL && m_tHits.Length()GetWordID ( sWord ), HITMAN::Create ( 1, ++m_iWordPos ) ); + + CheckHitsCount ( "body" ); + + m_pBuffer = p; + + SetTag ( "body" ); + + // some tag was found + if ( bBodyEnd ) + { + // let's check if it's '' which is the only allowed tag at this point + if ( !SkipTag ( false, sError ) ) + return false; + } else + { + // search for '' tag + bool bFound = false; + + while ( !bFound ) + { + while ( m_pBuffer < m_pBufferEnd && *m_pBuffer!='<' ) + ++m_pBuffer; + + BYTE * pBufferTmp = m_pBuffer; + if ( m_pBuffer < m_pBufferEnd ) + { + if ( !SkipTag ( false, sError ) ) + { + if ( m_bEOF ) + return false; + else + { + if ( m_pBuffer==pBufferTmp ) + m_pBuffer = pBufferTmp + 1; + } + } else + bFound = true; + } else + if ( !UpdateBuffer () ) + return false; + } + } + + + // let's check if it's '' which is the only allowed tag at this point + SetTag ( "document" ); + if ( !SkipTag ( false, sError ) ) + return false; + + // if it was all correct, we have to flush our hits + m_bHitsReady = m_tHits.Length()>0; + return true; +} + + +ISphHits * CSphSource_XMLPipe::IterateHits ( CSphString & ) +{ + if ( !m_bHitsReady ) + return NULL; + + m_bHitsReady = false; + + return &m_tHits; +} + + +void CSphSource_XMLPipe::SetTag ( const char * sTag ) +{ + m_pTag = sTag; + m_iTagLength = (int)strlen ( sTag ); +} + + +bool CSphSource_XMLPipe::UpdateBuffer () +{ + assert ( m_pBuffer!=m_sBuffer ); + + int iLeft = Max ( m_pBufferEnd-m_pBuffer, 0 ); + if ( iLeft>0 ) + memmove ( m_sBuffer, m_pBuffer, iLeft ); + + size_t iLen = fread ( &m_sBuffer [ iLeft ], 1, m_iBufferSize-iLeft, m_pPipe ); + m_tStats.m_iTotalBytes += iLen; + + m_pBuffer = m_sBuffer; + m_pBufferEnd = m_pBuffer+iLeft+iLen; + + return ( iLen!=0 ); +} + + +bool CSphSource_XMLPipe::SkipWhitespace () +{ + for ( ;; ) + { + // suck in some data if needed + if ( m_pBuffer>=m_pBufferEnd ) + if ( !UpdateBuffer() ) + return false; + + // skip whitespace + while ( (m_pBuffer', got EOF", + bOpen ? "" : "/", m_pTag ); + return false; + } + + // check tag + bool bOk = bOpen + ? ( ( m_pBuffer[0]=='<' ) + && ( m_pBuffer[m_iTagLength+1]=='>' ) + && strncmp ( (char*)(m_pBuffer+1), m_pTag, m_iTagLength )==0 ) + : ( ( m_pBuffer[0]=='<' ) + && ( m_pBuffer[1]=='/' ) + && ( m_pBuffer[m_iTagLength+2]=='>' ) + && strncmp ( (char*)(m_pBuffer+2), m_pTag, m_iTagLength )==0 ); + if ( !bOk ) + { + char sGot[64]; + int iCopy = Min ( m_pBufferEnd-m_pBuffer, (int)sizeof(sGot)-1 ); + + strncpy ( sGot, (char*)m_pBuffer, iCopy ); + sGot [ iCopy ] = '\0'; + + sError.SetSprintf ( "xmlpipe: expected '<%s%s>', got '%s'", + bOpen ? "" : "/", m_pTag, sGot ); + return false; + } + + // got tag + m_pBuffer += iAdd+m_iTagLength; + assert ( m_pBuffer<=m_pBufferEnd ); + return true; +} + + +bool CSphSource_XMLPipe::SkipTag ( bool bOpen, CSphString & sError ) +{ + if ( !SkipWhitespace() ) + { + m_bEOF = true; + sError.SetSprintf ( "xmlpipe: expected '<%s%s>', got EOF", + bOpen ? "" : "/", m_pTag ); + return false; + } + + return CheckTag ( bOpen, sError ); +} + + +bool CSphSource_XMLPipe::ScanInt ( const char * sTag, DWORD * pRes, CSphString & sError ) +{ + uint64_t uRes; + if ( !ScanInt ( sTag, &uRes, sError ) ) + return false; + + (*pRes) = (DWORD)uRes; + return true; +} + + +bool CSphSource_XMLPipe::ScanInt ( const char * sTag, uint64_t * pRes, CSphString & sError ) +{ + assert ( sTag ); + assert ( pRes ); + + // scan for + SetTag ( sTag ); + if ( !SkipTag ( true, sError ) ) + return false; + + if ( !SkipWhitespace() ) + { + sError.SetSprintf ( "xmlpipe: expected <%s> data, got EOF", m_pTag ); + return false; + } + + *pRes = 0; + while ( m_pBuffer + if ( !SkipTag ( false, sError ) ) + return false; + + return true; +} + + +bool CSphSource_XMLPipe::ScanStr ( const char * sTag, char * pRes, int iMaxLength, CSphString & sError ) +{ + assert ( sTag ); + assert ( pRes ); + + char * pEnd = pRes+iMaxLength-1; + + // scan for + SetTag ( sTag ); + if ( !SkipTag ( true, sError ) ) + return false; + + if ( !SkipWhitespace() ) + { + sError.SetSprintf ( "xmlpipe: expected <%s> data, got EOF", m_pTag ); + return false; + } + + while ( m_pBuffer + if ( !SkipTag ( false, sError ) ) + return false; + + return true; +} + + +void CSphSource_XMLPipe::CheckHitsCount ( const char * sField ) +{ + if ( m_tHits.Length()>=MAX_SOURCE_HITS && m_pTokenizer->GetTokenEnd()!=m_pTokenizer->GetBufferEnd() ) + sphWarn ( "xmlpipe: collected hits larger than %d(MAX_SOURCE_HITS) while scanning docid=" DOCID_FMT " %s - clipped!!!", MAX_SOURCE_HITS, m_tDocInfo.m_iDocID, sField ); +} + + +///////////////////////////////////////////////////////////////////////////// +// XMLPIPE (v2) +///////////////////////////////////////////////////////////////////////////// + +#if USE_LIBEXPAT || USE_LIBXML + +/// XML pipe source implementation (v2) +class CSphSource_XMLPipe2 : public CSphSource_Document +{ +public: + CSphSource_XMLPipe2 ( BYTE * dInitialBuf, int iBufLen, const char * sName, int iFieldBufferMax, bool bFixupUTF8 ); + ~CSphSource_XMLPipe2 (); + + bool Setup ( FILE * pPipe, const CSphConfigSection & hSource ); ///< memorize the command + virtual bool Connect ( CSphString & sError ); ///< run the command and open the pipe + virtual void Disconnect (); ///< close the pipe + + virtual bool IterateStart ( CSphString & ) { return true; } ///< Connect() starts getting documents automatically, so this one is empty + virtual BYTE ** NextDocument ( CSphString & sError ); ///< parse incoming chunk and emit some hits + + virtual bool HasAttrsConfigured () { return true; } ///< xmlpipe always has some attrs for now + virtual bool IterateMultivaluedStart ( int, CSphString & ) { return false; } + virtual bool IterateMultivaluedNext () { return false; } + virtual bool IterateFieldMVAStart ( int iAttr, CSphString & sError ); + virtual bool IterateFieldMVANext (); + virtual bool IterateKillListStart ( CSphString & ); + virtual bool IterateKillListNext ( SphDocID_t & tDocId ); + + + void StartElement ( const char * szName, const char ** pAttrs ); + void EndElement ( const char * pName ); + void Characters ( const char * pCharacters, int iLen ); + +#if USE_LIBXML + int ReadBuffer ( BYTE * pBuffer, int iLen ); + void ProcessNode ( xmlTextReaderPtr pReader ); +#endif + + void Error ( const char * sTemplate, ... ) __attribute__ ( ( format ( printf, 2, 3 ) ) ); + +private: + struct Document_t + { + SphDocID_t m_iDocID; + CSphVector m_dFields; + CSphVector m_dAttrs; + }; + + Document_t * m_pCurDocument; + CSphVector m_dParsedDocuments; + + FILE * m_pPipe; ///< incoming stream + CSphString m_sCommand; ///< my command + CSphString m_sError; + CSphVector m_dDefaultAttrs; + CSphVector m_dInvalid; + CSphVector m_dWarned; + int m_iElementDepth; + + BYTE * m_pBuffer; + int m_iBufferSize; + + CSphVectorm_dFieldPtrs; + bool m_bRemoveParsed; + + bool m_bInDocset; + bool m_bInSchema; + bool m_bInDocument; + bool m_bInKillList; + bool m_bInId; + bool m_bInIgnoredTag; + bool m_bFirstTagAfterDocset; + + int m_iKillListIterator; + CSphVector < SphDocID_t > m_dKillList; + + int m_iMVA; + int m_iMVAIterator; + CSphVector < CSphVector > m_dFieldMVAs; + CSphVector < int > m_dAttrToMVA; + + int m_iCurField; + int m_iCurAttr; + +#if USE_LIBEXPAT + XML_Parser m_pParser; +#endif + +#if USE_LIBXML + xmlTextReaderPtr m_pParser; + + BYTE * m_pBufferPtr; + BYTE * m_pBufferEnd; + bool m_bPassedBufferEnd; + CSphVector m_dAttrs; +#endif + + int m_iInitialBufSize; + + int m_iFieldBufferMax; + BYTE * m_pFieldBuffer; + int m_iFieldBufferLen; + + bool m_bFixupUTF8; ///< whether to replace invalid utf-8 codepoints with spaces + int m_iReparseStart; ///< utf-8 fixerupper might need to postpone a few bytes, starting at this offset + int m_iReparseLen; ///< and this much bytes (under 4) + + const char * DecorateMessage ( const char * sTemplate, ... ) __attribute__ ( ( format ( printf, 2, 3 ) ) ); + const char * DecorateMessageVA ( const char * sTemplate, va_list ap ); + + void ConfigureAttrs ( const CSphVariant * pHead, ESphAttr eAttrType ); + void ConfigureFields ( const CSphVariant * pHead ); + void AddFieldToSchema ( const char * szName ); + void UnexpectedCharaters ( const char * pCharacters, int iLen, const char * szComment ); + +#if USE_LIBEXPAT + bool ParseNextChunk ( int iBufferLen, CSphString & sError ); +#endif + +#if USE_LIBXML + int ParseNextChunk ( CSphString & sError ); +#endif + + void DocumentError ( const char * sWhere ) + { + Error ( "malformed source, found inside %s", sWhere ); + + // Ideally I'd like to display a notice on the next line that + // would say where exactly it's allowed. E.g.: + // + // must be contained in + } +}; + + +#if USE_LIBEXPAT +// callbacks +static void XMLCALL xmlStartElement ( void * user_data, const XML_Char * name, const XML_Char ** attrs ) +{ + CSphSource_XMLPipe2 * pSource = (CSphSource_XMLPipe2 *) user_data; + pSource->StartElement ( name, attrs ); +} + + +static void XMLCALL xmlEndElement ( void * user_data, const XML_Char * name ) +{ + CSphSource_XMLPipe2 * pSource = (CSphSource_XMLPipe2 *) user_data; + pSource->EndElement ( name ); +} + + +static void XMLCALL xmlCharacters ( void * user_data, const XML_Char * ch, int len ) +{ + CSphSource_XMLPipe2 * pSource = (CSphSource_XMLPipe2 *) user_data; + pSource->Characters ( ch, len ); +} + +#if USE_LIBICONV +static int XMLCALL xmlUnknownEncoding ( void *, const XML_Char * name, XML_Encoding * info ) +{ + iconv_t pDesc = iconv_open ( "UTF-16", name ); + if ( !pDesc ) + return XML_STATUS_ERROR; + + for ( size_t i = 0; i < 256; i++ ) + { + char cIn = (char) i; + char dOut[4]; + memset ( dOut, 0, sizeof ( dOut ) ); +#if ICONV_INBUF_CONST + const char * pInbuf = &cIn; +#else + char * pInbuf = &cIn; +#endif + char * pOutbuf = dOut; + size_t iInBytesLeft = 1; + size_t iOutBytesLeft = 4; + + if ( iconv ( pDesc, &pInbuf, &iInBytesLeft, &pOutbuf, &iOutBytesLeft )!=size_t(-1) ) + info->map[i] = int ( BYTE ( dOut[0] ) ) << 8 | int ( BYTE ( dOut[1] ) ); + else + info->map[i] = 0; + } + + iconv_close ( pDesc ); + + return XML_STATUS_OK; +} +#endif + +#endif + +#if USE_LIBXML +int xmlReadBuffers ( void * context, char * buffer, int len ) +{ + CSphSource_XMLPipe2 * pSource = (CSphSource_XMLPipe2 *) context; + return pSource->ReadBuffer ( (BYTE*)buffer, len ); +} + +void xmlErrorHandler ( void * arg, const char * msg, xmlParserSeverities severity, xmlTextReaderLocatorPtr locator ) +{ + if ( severity==XML_PARSER_SEVERITY_ERROR ) + { + int iLine = xmlTextReaderLocatorLineNumber ( locator ); + CSphSource_XMLPipe2 * pSource = (CSphSource_XMLPipe2 *) arg; + pSource->Error ( "%s (line=%d)", msg, iLine ); + } +} +#endif + + +CSphSource_XMLPipe2::CSphSource_XMLPipe2 ( BYTE * dInitialBuf, int iBufLen, const char * sName, int iFieldBufferMax, bool bFixupUTF8 ) + : CSphSource_Document ( sName ) + , m_pCurDocument ( NULL ) + , m_pPipe ( NULL ) + , m_iElementDepth ( 0 ) + , m_iBufferSize ( 1048576 ) + , m_bRemoveParsed ( false ) + , m_bInDocset ( false ) + , m_bInSchema ( false ) + , m_bInDocument ( false ) + , m_bInKillList ( false ) + , m_bInId ( false ) + , m_bInIgnoredTag ( false ) + , m_bFirstTagAfterDocset ( false ) + , m_iKillListIterator ( 0 ) + , m_iMVA ( 0 ) + , m_iMVAIterator ( 0 ) + , m_iCurField ( -1 ) + , m_iCurAttr ( -1 ) + , m_pParser ( NULL ) +#if USE_LIBXML + , m_pBufferPtr ( NULL ) + , m_pBufferEnd ( NULL ) + , m_bPassedBufferEnd ( false ) +#endif + , m_iInitialBufSize ( iBufLen ) + , m_iFieldBufferLen ( 0 ) + , m_bFixupUTF8 ( bFixupUTF8 ) + , m_iReparseStart ( 0 ) + , m_iReparseLen ( 0 ) +{ + assert ( m_iBufferSize > iBufLen ); + + m_pBuffer = new BYTE [m_iBufferSize]; + m_iFieldBufferMax = Max ( iFieldBufferMax, 65536 ); + m_pFieldBuffer = new BYTE [ m_iFieldBufferMax ]; + + if ( iBufLen ) + memcpy ( m_pBuffer, dInitialBuf, iBufLen ); + + m_iInitialBufSize = iBufLen; +} + + +CSphSource_XMLPipe2::~CSphSource_XMLPipe2 () +{ + Disconnect (); + SafeDeleteArray ( m_pBuffer ); + SafeDeleteArray ( m_pFieldBuffer ); + ARRAY_FOREACH ( i, m_dParsedDocuments ) + SafeDelete ( m_dParsedDocuments[i] ); +} + + +void CSphSource_XMLPipe2::Disconnect () +{ + if ( m_pPipe ) + { + pclose ( m_pPipe ); + m_pPipe = NULL; + } + +#if USE_LIBEXPAT + if ( m_pParser ) + { + XML_ParserFree ( m_pParser ); + m_pParser = NULL; + } +#endif + +#if USE_LIBXML + if ( m_pParser ) + { + xmlFreeTextReader ( m_pParser ); + m_pParser = NULL; + } +#endif + + m_tHits.m_dData.Reset(); + + m_iInitialBufSize = 0; +} + + +void CSphSource_XMLPipe2::Error ( const char * sTemplate, ... ) +{ + if ( !m_sError.IsEmpty() ) + return; + + va_list ap; + va_start ( ap, sTemplate ); + m_sError = DecorateMessageVA ( sTemplate, ap ); + va_end ( ap ); +} + + +const char * CSphSource_XMLPipe2::DecorateMessage ( const char * sTemplate, ... ) +{ + va_list ap; + va_start ( ap, sTemplate ); + const char * sRes = DecorateMessageVA ( sTemplate, ap ); + va_end ( ap ); + return sRes; +} + + +const char * CSphSource_XMLPipe2::DecorateMessageVA ( const char * sTemplate, va_list ap ) +{ + static char sBuf[1024]; + + snprintf ( sBuf, sizeof(sBuf), "source '%s': ", m_tSchema.m_sName.cstr() ); + int iBufLen = strlen ( sBuf ); + int iLeft = sizeof(sBuf) - iBufLen; + char * szBufStart = sBuf + iBufLen; + + vsnprintf ( szBufStart, iLeft, sTemplate, ap ); + iBufLen = strlen ( sBuf ); + iLeft = sizeof(sBuf) - iBufLen; + szBufStart = sBuf + iBufLen; + +#if USE_LIBEXPAT + if ( m_pParser ) + { + SphDocID_t uFailedID = 0; + if ( m_dParsedDocuments.GetLength() ) + uFailedID = m_dParsedDocuments.Last()->m_iDocID; + + snprintf ( szBufStart, iLeft, " (line=%d, pos=%d, docid=" DOCID_FMT ")", + (int)XML_GetCurrentLineNumber ( m_pParser ), (int)XML_GetCurrentColumnNumber ( m_pParser ), + uFailedID ); + } +#endif + +#if USE_LIBXML + if ( m_pParser ) + { + SphDocID_t uFailedID = 0; + if ( m_dParsedDocuments.GetLength() ) + uFailedID = m_dParsedDocuments.Last()->m_iDocID; + + snprintf ( szBufStart, iLeft, " (docid=" DOCID_FMT ")", uFailedID ); + } +#endif + + return sBuf; +} + + +void CSphSource_XMLPipe2::AddFieldToSchema ( const char * szName ) +{ + CSphColumnInfo tCol ( szName ); + tCol.m_eWordpart = GetWordpart ( tCol.m_sName.cstr(), m_pDict && m_pDict->GetSettings().m_bWordDict ); + m_tSchema.m_dFields.Add ( tCol ); +} + + +void CSphSource_XMLPipe2::ConfigureAttrs ( const CSphVariant * pHead, ESphAttr eAttrType ) +{ + for ( const CSphVariant * pCur = pHead; pCur; pCur= pCur->m_pNext ) + { + CSphColumnInfo tCol ( pCur->cstr(), eAttrType ); + char * pColon = strchr ( const_cast ( tCol.m_sName.cstr() ), ':' ); + if ( pColon ) + { + *pColon = '\0'; + + if ( eAttrType==SPH_ATTR_INTEGER ) + { + int iBits = strtol ( pColon+1, NULL, 10 ); + if ( iBits<=0 || iBits>ROWITEM_BITS ) + { + sphWarn ( "%s", DecorateMessage ( "attribute '%s': invalid bitcount=%d (bitcount ignored)", tCol.m_sName.cstr(), iBits ) ); + iBits = -1; + } + + tCol.m_tLocator.m_iBitCount = iBits; + } else + sphWarn ( "%s", DecorateMessage ( "attribute '%s': bitcount is only supported for integer types", tCol.m_sName.cstr() ) ); + } + + tCol.m_iIndex = m_tSchema.GetAttrsCount (); + + if ( eAttrType==SPH_ATTR_UINT32SET || eAttrType==SPH_ATTR_UINT64SET ) + { + tCol.m_eAttrType = eAttrType; + tCol.m_eSrc = SPH_ATTRSRC_FIELD; + } + + m_tSchema.AddAttr ( tCol, true ); // all attributes are dynamic at indexing time + } +} + + +void CSphSource_XMLPipe2::ConfigureFields ( const CSphVariant * pHead ) +{ + for ( const CSphVariant * pCur = pHead; pCur; pCur= pCur->m_pNext ) + { + CSphString sFieldName = pCur->cstr (); + + bool bFound = false; + for ( int i = 0; i < m_tSchema.m_dFields.GetLength () && !bFound; i++ ) + bFound = m_tSchema.m_dFields[i].m_sName==sFieldName; + + if ( bFound ) + sphWarn ( "%s", DecorateMessage ( "duplicate field '%s'", sFieldName.cstr () ) ); + else + AddFieldToSchema ( sFieldName.cstr () ); + } +} + + +bool CSphSource_XMLPipe2::Setup ( FILE * pPipe, const CSphConfigSection & hSource ) +{ + m_pPipe = pPipe; + + m_tSchema.Reset (); + + m_sCommand = hSource["xmlpipe_command"].cstr (); + + ConfigureAttrs ( hSource("xmlpipe_attr_uint"), SPH_ATTR_INTEGER ); + ConfigureAttrs ( hSource("xmlpipe_attr_timestamp"), SPH_ATTR_TIMESTAMP ); + ConfigureAttrs ( hSource("xmlpipe_attr_str2ordinal"), SPH_ATTR_ORDINAL ); + ConfigureAttrs ( hSource("xmlpipe_attr_bool"), SPH_ATTR_BOOL ); + ConfigureAttrs ( hSource("xmlpipe_attr_float"), SPH_ATTR_FLOAT ); + ConfigureAttrs ( hSource("xmlpipe_attr_bigint"), SPH_ATTR_BIGINT ); + ConfigureAttrs ( hSource("xmlpipe_attr_multi"), SPH_ATTR_UINT32SET ); + ConfigureAttrs ( hSource("xmlpipe_attr_multi_64"), SPH_ATTR_UINT64SET ); + ConfigureAttrs ( hSource("xmlpipe_attr_string"), SPH_ATTR_STRING ); + ConfigureAttrs ( hSource("xmlpipe_attr_wordcount"), SPH_ATTR_WORDCOUNT ); + ConfigureAttrs ( hSource("xmlpipe_field_string"), SPH_ATTR_STRING ); + ConfigureAttrs ( hSource("xmlpipe_field_wordcount"), SPH_ATTR_WORDCOUNT ); + + m_tDocInfo.Reset ( m_tSchema.GetRowSize () ); + + ConfigureFields ( hSource("xmlpipe_field") ); + ConfigureFields ( hSource("xmlpipe_field_string") ); + ConfigureFields ( hSource("xmlpipe_field_wordcount") ); + + m_dStrAttrs.Resize ( m_tSchema.GetAttrsCount() ); + + return true; +} + + +bool CSphSource_XMLPipe2::Connect ( CSphString & sError ) +{ + ARRAY_FOREACH ( i, m_tSchema.m_dFields ) + { + CSphColumnInfo & tCol = m_tSchema.m_dFields[i]; + tCol.m_eWordpart = GetWordpart ( tCol.m_sName.cstr(), m_pDict && m_pDict->GetSettings().m_bWordDict ); + } + +#if USE_LIBEXPAT + m_pParser = XML_ParserCreate(NULL); + if ( !m_pParser ) + { + sError.SetSprintf ( "xmlpipe: failed to create XML parser" ); + return false; + } + + XML_SetUserData ( m_pParser, this ); + XML_SetElementHandler ( m_pParser, xmlStartElement, xmlEndElement ); + XML_SetCharacterDataHandler ( m_pParser, xmlCharacters ); + +#if USE_LIBICONV + XML_SetUnknownEncodingHandler ( m_pParser, xmlUnknownEncoding, NULL ); +#endif + +#endif + +#if USE_LIBXML + m_pBufferPtr = m_pBuffer; + m_pBufferEnd = m_pBuffer + m_iInitialBufSize; + m_bPassedBufferEnd = false; + + m_dAttrs.Reserve ( 16 ); + m_dAttrs.Resize ( 0 ); + + m_pParser = xmlReaderForIO ( (xmlInputReadCallback)xmlReadBuffers, NULL, this, NULL, NULL, 0 ); + if ( !m_pParser ) + { + sError.SetSprintf ( "xmlpipe: failed to create XML parser" ); + return false; + } + + xmlTextReaderSetErrorHandler ( m_pParser, xmlErrorHandler, this ); +#endif + + m_dKillList.Reserve ( 1024 ); + m_dKillList.Resize ( 0 ); + + m_bRemoveParsed = false; + m_bInDocset = false; + m_bInSchema = false; + m_bInDocument = false; + m_bInKillList = false; + m_bInId = false; + m_bFirstTagAfterDocset = false; + m_iCurField = -1; + m_iCurAttr = -1; + m_iElementDepth = 0; + + m_dParsedDocuments.Reset (); + m_dDefaultAttrs.Reset (); + m_dInvalid.Reset (); + m_dWarned.Reset (); + + m_dParsedDocuments.Reserve ( 1024 ); + m_dParsedDocuments.Resize ( 0 ); + + m_iKillListIterator = 0; + + m_iMVA = 0; + m_iMVAIterator = 0; + + m_sError = ""; + +#if USE_LIBEXPAT + int iBytesRead = m_iInitialBufSize; + iBytesRead += fread ( m_pBuffer + m_iInitialBufSize, 1, m_iBufferSize - m_iInitialBufSize, m_pPipe ); + + if ( !ParseNextChunk ( iBytesRead, sError ) ) + return false; +#endif + +#if USE_LIBXML + if ( ParseNextChunk ( sError )==-1 ) + return false; +#endif + + m_dAttrToMVA.Resize ( 0 ); + + int iFieldMVA = 0; + for ( int i = 0; i < m_tSchema.GetAttrsCount (); i++ ) + { + const CSphColumnInfo & tCol = m_tSchema.GetAttr ( i ); + if ( ( tCol.m_eAttrType==SPH_ATTR_UINT32SET || tCol.m_eAttrType==SPH_ATTR_UINT64SET ) && tCol.m_eSrc==SPH_ATTRSRC_FIELD ) + m_dAttrToMVA.Add ( iFieldMVA++ ); + else + m_dAttrToMVA.Add ( -1 ); + } + + m_dFieldMVAs.Resize ( iFieldMVA ); + ARRAY_FOREACH ( i, m_dFieldMVAs ) + m_dFieldMVAs[i].Reserve ( 16 ); + + m_tHits.m_dData.Reserve ( m_iMaxHits ); + + return true; +} + + +#if USE_LIBXML +int CSphSource_XMLPipe2::ParseNextChunk ( CSphString & sError ) +{ + int iRet = xmlTextReaderRead ( m_pParser ); + while ( iRet==1 ) + { + ProcessNode ( m_pParser ); + if ( !m_sError.IsEmpty () ) + { + sError = m_sError; + m_tDocInfo.m_iDocID = 1; + return false; + } + + if ( m_bPassedBufferEnd ) + break; + + iRet = xmlTextReaderRead ( m_pParser ); + } + + m_bPassedBufferEnd = false; + + if ( !m_sError.IsEmpty () || iRet==-1 ) + { + sError = m_sError; + m_tDocInfo.m_iDocID = 1; + return -1; + } + + return iRet; +} +#endif + + +#if USE_LIBEXPAT +bool CSphSource_XMLPipe2::ParseNextChunk ( int iBufferLen, CSphString & sError ) +{ + if ( !iBufferLen ) + return true; + + bool bLast = ( iBufferLen!=m_iBufferSize ); + + m_iReparseLen = 0; + if ( m_bFixupUTF8 ) + { + BYTE * p = m_pBuffer; + BYTE * pMax = m_pBuffer + iBufferLen; + + while ( p3 ) + { + *p++ = ' '; + continue; + } + + // if we're on a boundary, save these few bytes for the future + if ( p+iBytes>pMax ) + { + m_iReparseStart = (int)(p-m_pBuffer); + m_iReparseLen = (int)(pMax-p); + iBufferLen -= m_iReparseLen; + break; + } + + // otherwise (not a boundary), check them all + int i = 1; + int iVal = ( v >> iBytes ); + for ( ; i=0xd800 && iVal<=0xdfff ) // and utf-16 surrogate pairs + || ( iBytes==3 && iVal<0x800 ) // and overlong 3-byte codes + || ( iVal>=0xfff0 && iVal<=0xffff ) ) // and kinda-valid specials expat chokes on anyway + { + for ( i=0; im_iDocID; + + sError.SetSprintf ( "source '%s': XML parse error: %s (line=%d, pos=%d, docid=" DOCID_FMT ")", + m_tSchema.m_sName.cstr(), XML_ErrorString ( XML_GetErrorCode ( m_pParser ) ), + (int)XML_GetCurrentLineNumber ( m_pParser ), (int)XML_GetCurrentColumnNumber ( m_pParser ), + uFailedID ); + m_tDocInfo.m_iDocID = 1; + return false; + } + + if ( !m_sError.IsEmpty () ) + { + sError = m_sError; + m_tDocInfo.m_iDocID = 1; + return false; + } + + return true; +} +#endif + + +BYTE ** CSphSource_XMLPipe2::NextDocument ( CSphString & sError ) +{ + if ( m_bRemoveParsed ) + { + SafeDelete ( m_dParsedDocuments[0] ); + m_dParsedDocuments.RemoveFast ( 0 ); + m_bRemoveParsed = false; + } + + int iReadResult = 0; + +#if USE_LIBEXPAT + while ( m_dParsedDocuments.GetLength()==0 ) + { + // saved bytes to the front! + if ( m_iReparseLen ) + memmove ( m_pBuffer, m_pBuffer+m_iReparseStart, m_iReparseLen ); + + // read more data + iReadResult = fread ( m_pBuffer+m_iReparseLen, 1, m_iBufferSize-m_iReparseLen, m_pPipe ); + if ( iReadResult==0 ) + break; + + // and parse it + if ( !ParseNextChunk ( iReadResult+m_iReparseLen, sError ) ) + return NULL; + } +#endif + +#if USE_LIBXML + while ( m_dParsedDocuments.GetLength()==0 && ( iReadResult = ParseNextChunk ( sError ) )==1 ); +#endif + + while ( m_dParsedDocuments.GetLength()!=0 ) + { + Document_t * pDocument = m_dParsedDocuments[0]; + int nAttrs = m_tSchema.GetAttrsCount (); + + // docid + m_tDocInfo.m_iDocID = VerifyID ( pDocument->m_iDocID ); + if ( m_tDocInfo.m_iDocID==0 ) + { + SafeDelete ( m_dParsedDocuments[0] ); + m_dParsedDocuments.RemoveFast ( 0 ); + continue; + } + + // attributes + int iFieldMVA = 0; + for ( int i = 0; i < nAttrs; i++ ) + { + const CSphString & sAttrValue = pDocument->m_dAttrs[i].IsEmpty () && m_dDefaultAttrs.GetLength () ? m_dDefaultAttrs[i] : pDocument->m_dAttrs[i]; + const CSphColumnInfo & tAttr = m_tSchema.GetAttr ( i ); + + if ( tAttr.m_eAttrType==SPH_ATTR_UINT32SET || tAttr.m_eAttrType==SPH_ATTR_UINT64SET ) + { + m_tDocInfo.SetAttr ( tAttr.m_tLocator, 0 ); + ParseFieldMVA ( m_dFieldMVAs, iFieldMVA++, sAttrValue.cstr () ); + continue; + } + + switch ( tAttr.m_eAttrType ) + { + case SPH_ATTR_ORDINAL: + case SPH_ATTR_STRING: + case SPH_ATTR_WORDCOUNT: + m_dStrAttrs[i] = sAttrValue.cstr (); + if ( !m_dStrAttrs[i].cstr() ) + m_dStrAttrs[i] = ""; + + m_tDocInfo.SetAttr ( tAttr.m_tLocator, 0 ); + break; + + case SPH_ATTR_FLOAT: + m_tDocInfo.SetAttrFloat ( tAttr.m_tLocator, sphToFloat ( sAttrValue.cstr () ) ); + break; + + case SPH_ATTR_BIGINT: + m_tDocInfo.SetAttr ( tAttr.m_tLocator, sphToInt64 ( sAttrValue.cstr () ) ); + break; + + default: + m_tDocInfo.SetAttr ( tAttr.m_tLocator, sphToDword ( sAttrValue.cstr () ) ); + break; + } + } + + m_bRemoveParsed = true; + + int nFields = m_tSchema.m_dFields.GetLength (); + if ( !nFields ) + { + m_tDocInfo.m_iDocID = 0; + return NULL; + } + + m_dFieldPtrs.Resize ( nFields ); + for ( int i = 0; i < nFields; ++i ) + m_dFieldPtrs[i] = (BYTE*)( pDocument->m_dFields [i].cstr() ); + + return (BYTE **)&( m_dFieldPtrs[0] ); + } + + if ( !iReadResult ) + m_tDocInfo.m_iDocID = 0; + + return NULL; +} + + +bool CSphSource_XMLPipe2::IterateFieldMVAStart ( int iAttr, CSphString & ) +{ + if ( iAttr<0 || iAttr>=m_tSchema.GetAttrsCount() ) + return false; + + if ( m_dAttrToMVA[iAttr]==-1 ) + return false; + + m_iMVA = iAttr; + m_iMVAIterator = 0; + + return true; +} + + +bool CSphSource_XMLPipe2::IterateFieldMVANext () +{ + int iFieldMVA = m_dAttrToMVA [m_iMVA]; + if ( m_iMVAIterator>=m_dFieldMVAs[iFieldMVA].GetLength() ) + return false; + + const CSphColumnInfo & tAttr = m_tSchema.GetAttr ( m_iMVA ); + m_tDocInfo.SetAttr ( tAttr.m_tLocator, m_dFieldMVAs [iFieldMVA][m_iMVAIterator] ); + + ++m_iMVAIterator; + + return true; +} + + +bool CSphSource_XMLPipe2::IterateKillListStart ( CSphString & ) +{ + m_iKillListIterator = 0; + return true; +} + + +bool CSphSource_XMLPipe2::IterateKillListNext ( SphDocID_t & tDocId ) +{ + if ( m_iKillListIterator>=m_dKillList.GetLength () ) + return false; + + tDocId = m_dKillList [ m_iKillListIterator++ ]; + return true; +} + + +void CSphSource_XMLPipe2::StartElement ( const char * szName, const char ** pAttrs ) +{ + if ( !strcmp ( szName, "sphinx:docset" ) ) + { + m_bInDocset = true; + m_bFirstTagAfterDocset = true; + return; + } + + if ( !strcmp ( szName, "sphinx:schema" ) ) + { + if ( !m_bInDocset || !m_bFirstTagAfterDocset ) + { + Error ( " is allowed immediately after only" ); + return; + } + + if ( m_tSchema.m_dFields.GetLength () > 0 || m_tSchema.GetAttrsCount () > 0 ) + { + sphWarn ( "%s", DecorateMessage ( "both embedded and configured schemas found; using embedded" ) ); + m_tSchema.Reset (); + } + + m_bFirstTagAfterDocset = false; + m_bInSchema = true; + return; + } + + if ( !strcmp ( szName, "sphinx:field" ) ) + { + if ( !m_bInDocset || !m_bInSchema ) + { + Error ( " is allowed inside only" ); + return; + } + + const char ** dAttrs = pAttrs; + CSphColumnInfo Info; + CSphString sDefault; + bool bIsAttr = false; + + while ( dAttrs[0] && dAttrs[1] && dAttrs[0][0] && dAttrs[1][0] ) + { + if ( !strcmp ( *dAttrs, "name" ) ) + { + AddFieldToSchema ( dAttrs[1] ); + Info.m_sName = dAttrs[1]; + } else if ( !strcmp ( *dAttrs, "attr" ) ) + { + bIsAttr = true; + if ( !strcmp ( dAttrs[1], "string" ) ) + Info.m_eAttrType = SPH_ATTR_STRING; + else if ( !strcmp ( dAttrs[1], "wordcount" ) ) + Info.m_eAttrType = SPH_ATTR_WORDCOUNT; + + } else if ( !strcmp ( *dAttrs, "default" ) ) + sDefault = dAttrs[1]; + + dAttrs += 2; + } + + if ( bIsAttr ) + { + Info.m_iIndex = m_tSchema.GetAttrsCount (); + m_tSchema.AddAttr ( Info, true ); // all attributes are dynamic at indexing time + m_dDefaultAttrs.Add ( sDefault ); + } + return; + } + + if ( !strcmp ( szName, "sphinx:attr" ) ) + { + if ( !m_bInDocset || !m_bInSchema ) + { + Error ( " is allowed inside only" ); + return; + } + + bool bError = false; + CSphString sDefault; + + CSphColumnInfo Info; + Info.m_eAttrType = SPH_ATTR_INTEGER; + + const char ** dAttrs = pAttrs; + + while ( dAttrs[0] && dAttrs[1] && dAttrs[0][0] && dAttrs[1][0] && !bError ) + { + if ( !strcmp ( *dAttrs, "name" ) ) + Info.m_sName = dAttrs[1]; + else if ( !strcmp ( *dAttrs, "bits" ) ) + Info.m_tLocator.m_iBitCount = strtol ( dAttrs[1], NULL, 10 ); + else if ( !strcmp ( *dAttrs, "default" ) ) + sDefault = dAttrs[1]; + else if ( !strcmp ( *dAttrs, "type" ) ) + { + const char * szType = dAttrs[1]; + if ( !strcmp ( szType, "int" ) ) Info.m_eAttrType = SPH_ATTR_INTEGER; + else if ( !strcmp ( szType, "timestamp" ) ) Info.m_eAttrType = SPH_ATTR_TIMESTAMP; + else if ( !strcmp ( szType, "str2ordinal" ) ) Info.m_eAttrType = SPH_ATTR_ORDINAL; + else if ( !strcmp ( szType, "bool" ) ) Info.m_eAttrType = SPH_ATTR_BOOL; + else if ( !strcmp ( szType, "float" ) ) Info.m_eAttrType = SPH_ATTR_FLOAT; + else if ( !strcmp ( szType, "bigint" ) ) Info.m_eAttrType = SPH_ATTR_BIGINT; + else if ( !strcmp ( szType, "string" ) ) Info.m_eAttrType = SPH_ATTR_STRING; + else if ( !strcmp ( szType, "wordcount" ) ) Info.m_eAttrType = SPH_ATTR_WORDCOUNT; + else if ( !strcmp ( szType, "multi" ) ) + { + Info.m_eAttrType = SPH_ATTR_UINT32SET; + Info.m_eSrc = SPH_ATTRSRC_FIELD; + } else if ( !strcmp ( szType, "multi_64" ) ) + { + Info.m_eAttrType = SPH_ATTR_UINT64SET; + Info.m_eSrc = SPH_ATTRSRC_FIELD; + } else + { + Error ( "unknown column type '%s'", szType ); + bError = true; + } + } + + dAttrs += 2; + } + + if ( !bError ) + { + Info.m_iIndex = m_tSchema.GetAttrsCount (); + m_tSchema.AddAttr ( Info, true ); // all attributes are dynamic at indexing time + m_dDefaultAttrs.Add ( sDefault ); + } + + return; + } + + if ( !strcmp ( szName, "sphinx:document" ) ) + { + if ( !m_bInDocset || m_bInSchema ) + return DocumentError ( "" ); + + if ( m_bInKillList ) + return DocumentError ( "" ); + + if ( m_bInDocument ) + return DocumentError ( "" ); + + if ( m_tSchema.m_dFields.GetLength()==0 && m_tSchema.GetAttrsCount()==0 ) + { + Error ( "no schema configured, and no embedded schema found" ); + return; + } + + m_bInDocument = true; + + assert ( !m_pCurDocument ); + m_pCurDocument = new Document_t; + + m_pCurDocument->m_iDocID = 0; + m_pCurDocument->m_dFields.Resize ( m_tSchema.m_dFields.GetLength () ); + m_pCurDocument->m_dAttrs.Resize ( m_tSchema.GetAttrsCount () ); + + if ( pAttrs[0] && pAttrs[1] && pAttrs[0][0] && pAttrs[1][0] ) + if ( !strcmp ( pAttrs[0], "id" ) ) + m_pCurDocument->m_iDocID = sphToDocid ( pAttrs[1] ); + + if ( m_pCurDocument->m_iDocID==0 ) + Error ( "attribute 'id' required in " ); + + return; + } + + if ( !strcmp ( szName, "sphinx:killlist" ) ) + { + if ( !m_bInDocset || m_bInDocument || m_bInSchema ) + { + Error ( " is not allowed inside or " ); + return; + } + + m_bInKillList = true; + return; + } + + if ( m_bInKillList ) + { + if ( !m_bInId ) + { + if ( strcmp ( szName, "id" ) ) + { + Error ( "only 'id' is allowed inside " ); + return; + } + + m_bInId = true; + } else + ++m_iElementDepth; + } + + if ( m_bInDocument ) + { + if ( m_iCurField==-1 && m_iCurAttr==-1 ) + { + for ( int i = 0; i < m_tSchema.m_dFields.GetLength () && m_iCurField==-1; i++ ) + if ( m_tSchema.m_dFields[i].m_sName==szName ) + m_iCurField = i; + + for ( int i = 0; i < m_tSchema.GetAttrsCount () && m_iCurAttr==-1; i++ ) + if ( m_tSchema.GetAttr(i).m_sName==szName ) + m_iCurAttr = i; + + if ( m_iCurAttr==-1 && m_iCurField==-1 ) + { + m_bInIgnoredTag = true; + + bool bInvalidFound = false; + for ( int i = 0; i < m_dInvalid.GetLength () && !bInvalidFound; i++ ) + bInvalidFound = m_dInvalid[i]==szName; + + if ( !bInvalidFound ) + { + sphWarn ( "%s", DecorateMessage ( "unknown field/attribute '%s'; ignored", szName ) ); + m_dInvalid.Add ( szName ); + } + } + } else + m_iElementDepth++; + } +} + + +void CSphSource_XMLPipe2::EndElement ( const char * szName ) +{ + m_bInIgnoredTag = false; + + if ( !strcmp ( szName, "sphinx:docset" ) ) + m_bInDocset = false; + else if ( !strcmp ( szName, "sphinx:schema" ) ) + { + m_bInSchema = false; + m_tDocInfo.Reset ( m_tSchema.GetRowSize () ); + m_dStrAttrs.Resize ( m_tSchema.GetAttrsCount() ); + + } else if ( !strcmp ( szName, "sphinx:document" ) ) + { + m_bInDocument = false; + if ( m_pCurDocument ) + m_dParsedDocuments.Add ( m_pCurDocument ); + m_pCurDocument = NULL; + + } else if ( !strcmp ( szName, "sphinx:killlist" ) ) + { + m_bInKillList = false; + + } else if ( m_bInKillList ) + { + if ( m_iElementDepth==0 ) + { + if ( m_bInId ) + { + m_pFieldBuffer [ Min ( m_iFieldBufferLen, m_iFieldBufferMax-1 ) ] = '\0'; + m_dKillList.Add ( sphToDocid ( (const char *)m_pFieldBuffer ) ); + m_iFieldBufferLen = 0; + m_bInId = false; + } + } else + m_iElementDepth--; + + } else if ( m_bInDocument && ( m_iCurAttr!=-1 || m_iCurField!=-1 ) ) + { + if ( m_iElementDepth==0 ) + { + if ( m_iCurField!=-1 ) + { + assert ( m_pCurDocument ); + m_pCurDocument->m_dFields [m_iCurField].SetBinary ( (char*)m_pFieldBuffer, m_iFieldBufferLen ); + } + if ( m_iCurAttr!=-1 ) + { + assert ( m_pCurDocument ); + m_pCurDocument->m_dAttrs [m_iCurAttr].SetBinary ( (char*)m_pFieldBuffer, m_iFieldBufferLen ); + } + + m_iFieldBufferLen = 0; + + m_iCurAttr = -1; + m_iCurField = -1; + } else + m_iElementDepth--; + } +} + + +void CSphSource_XMLPipe2::UnexpectedCharaters ( const char * pCharacters, int iLen, const char * szComment ) +{ + const int MAX_WARNING_LENGTH = 64; + + bool bSpaces = true; + for ( int i = 0; i < iLen && bSpaces; i++ ) + if ( !sphIsSpace ( pCharacters[i] ) ) + bSpaces = false; + + if ( !bSpaces ) + { + CSphString sWarning; +#if USE_LIBEXPAT + sWarning.SetBinary ( pCharacters, Min ( iLen, MAX_WARNING_LENGTH ) ); + sphWarn ( "source '%s': unexpected string '%s' (line=%d, pos=%d) %s", + m_tSchema.m_sName.cstr(), sWarning.cstr (), + (int)XML_GetCurrentLineNumber ( m_pParser ), (int)XML_GetCurrentColumnNumber ( m_pParser ), szComment ); +#endif + +#if USE_LIBXML + int i = 0; + for ( i=0; i=0 && sphIsSpace ( sWarning.cstr()[i] ); i-- ); + if ( i>=0 ) + ( (char *)sWarning.cstr() )[i+1] = '\0'; + + sphWarn ( "source '%s': unexpected string '%s' %s", m_tSchema.m_sName.cstr(), sWarning.cstr(), szComment ); +#endif + } +} + + +void CSphSource_XMLPipe2::Characters ( const char * pCharacters, int iLen ) +{ + if ( m_bInIgnoredTag ) + return; + + if ( !m_bInDocset ) + { + UnexpectedCharaters ( pCharacters, iLen, "outside of " ); + return; + } + + if ( !m_bInSchema && !m_bInDocument && !m_bInKillList ) + { + UnexpectedCharaters ( pCharacters, iLen, "outside of and " ); + return; + } + + if ( m_iCurAttr==-1 && m_iCurField==-1 && !m_bInKillList ) + { + UnexpectedCharaters ( pCharacters, iLen, m_bInDocument ? "inside " : ( m_bInSchema ? "inside " : "" ) ); + return; + } + + if ( iLen + m_iFieldBufferLen < m_iFieldBufferMax ) + { + memcpy ( m_pFieldBuffer + m_iFieldBufferLen, pCharacters, iLen ); + m_iFieldBufferLen += iLen; + + } else + { + const CSphString & sName = ( m_iCurField!=-1 ) ? m_tSchema.m_dFields[m_iCurField].m_sName : m_tSchema.GetAttr ( m_iCurAttr ).m_sName; + + bool bWarned = false; + for ( int i = 0; i < m_dWarned.GetLength () && !bWarned; i++ ) + bWarned = m_dWarned[i]==sName; + + if ( !bWarned ) + { +#if USE_LIBEXPAT + sphWarn ( "source '%s': field/attribute '%s' length exceeds max length (line=%d, pos=%d, docid=" DOCID_FMT ")", + m_tSchema.m_sName.cstr(), sName.cstr(), + (int)XML_GetCurrentLineNumber ( m_pParser ), (int)XML_GetCurrentColumnNumber ( m_pParser ), + m_pCurDocument->m_iDocID ); +#endif + +#if USE_LIBXML + sphWarn ( "source '%s': field/attribute '%s' length exceeds max length (docid=" DOCID_FMT ")", + m_tSchema.m_sName.cstr(), sName.cstr(), m_pCurDocument->m_iDocID ); +#endif + m_dWarned.Add ( sName ); + } + } +} + + +#if USE_LIBXML +int CSphSource_XMLPipe2::ReadBuffer ( BYTE * pBuffer, int iLen ) +{ + int iLeft = Max ( m_pBufferEnd - m_pBufferPtr, 0 ); + if ( iLeft < iLen ) + { + memmove ( m_pBuffer, m_pBufferPtr, iLeft ); + size_t iRead = fread ( m_pBuffer + iLeft, 1, m_iBufferSize - iLeft, m_pPipe ); + + m_bPassedBufferEnd = ( ( m_iBufferSize - iLeft )==int(iRead) ); + + m_pBufferPtr = m_pBuffer; + m_pBufferEnd = m_pBuffer + iLeft + iRead; + + iLeft = Max ( m_pBufferEnd - m_pBuffer, 0 ); + } + + int iToCopy = Min ( iLen, iLeft ); + memcpy ( pBuffer, m_pBufferPtr, iToCopy ); + m_pBufferPtr += iToCopy; + + return iToCopy; +} + + +void CSphSource_XMLPipe2::ProcessNode ( xmlTextReaderPtr pReader ) +{ + int iType = xmlTextReaderNodeType ( pReader ); + switch ( iType ) + { + case XML_READER_TYPE_ELEMENT: + { + const char * szName = (char*)xmlTextReaderName ( pReader ); + + m_dAttrs.Resize ( 0 ); + + if ( xmlTextReaderHasAttributes ( pReader ) ) + { + if ( xmlTextReaderMoveToFirstAttribute ( pReader )!=1 ) + return; + + do + { + int iLen = m_dAttrs.GetLength (); + m_dAttrs.Resize ( iLen + 2 ); + m_dAttrs[iLen] = (char*)xmlTextReaderName ( pReader ); + m_dAttrs[iLen+1] = (char*)xmlTextReaderValue ( pReader ); + } + while ( xmlTextReaderMoveToNextAttribute ( pReader )==1 ); + } + + int iLen = m_dAttrs.GetLength (); + m_dAttrs.Resize ( iLen + 2 ); + m_dAttrs[iLen] = NULL; + m_dAttrs[iLen+1] = NULL; + + StartElement ( szName, &m_dAttrs[0] ); + } + break; + case XML_READER_TYPE_END_ELEMENT: + EndElement ( (char*)xmlTextReaderName ( pReader ) ); + break; + case XML_TEXT_NODE: + { + const char * szText = (char*)xmlTextReaderValue ( pReader ); + Characters ( szText, strlen ( szText ) ); + } + break; + } +} +#endif + +CSphSource * sphCreateSourceXmlpipe2 ( const CSphConfigSection * pSource, FILE * pPipe, BYTE * dInitialBuf, int iBufLen, const char * szSourceName, int iMaxFieldLen ) +{ + CSphSource_XMLPipe2 * pXMLPipe = new CSphSource_XMLPipe2 ( dInitialBuf, iBufLen, szSourceName, iMaxFieldLen, pSource->GetInt ( "xmlpipe_fixup_utf8", 0 )!=0 ); + if ( !pXMLPipe->Setup ( pPipe, *pSource ) ) + SafeDelete ( pXMLPipe ); + + return pXMLPipe; +} + +#endif + + +FILE * sphDetectXMLPipe ( const char * szCommand, BYTE * dBuf, int & iBufSize, int iMaxBufSize, bool & bUsePipe2 ) +{ + bUsePipe2 = true; // default is xmlpipe2 + + FILE * pPipe = popen ( szCommand, "r" ); + if ( !pPipe ) + return NULL; + + BYTE * pStart = dBuf; + iBufSize = (int)fread ( dBuf, 1, iMaxBufSize, pPipe ); + BYTE * pEnd = pStart + iBufSize; + + // BOM + if ( iBufSize>=3 ) + if ( !strncmp ( (char*)pStart, "\xEF\xBB\xBF", 3 ) ) + pStart += 3; + + while ( isspace ( *pStart ) && pStart < pEnd ) + pStart++; + + if ( ( pEnd - pStart)>=5 ) + bUsePipe2 = !strncasecmp ( (char *)pStart, "WARN_ROW_SIZE ) + sphWarn ( "row buffer is over %d bytes; consider revising sql_column_buffers", iTotalBuffer ); + + return true; +} + + +bool CSphSource_ODBC::SqlIsError () +{ + return !m_sError.IsEmpty (); +} + + +const char * CSphSource_ODBC::SqlError () +{ + return m_sError.cstr(); +} + + +bool CSphSource_ODBC::SqlConnect () +{ + if ( SQLAllocHandle ( SQL_HANDLE_ENV, NULL, &m_hEnv )==SQL_ERROR ) + { + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, "SQL-CONNECT: FAIL\n" ); + return false; + } + + SQLSetEnvAttr ( m_hEnv, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, SQL_IS_INTEGER ); + + if ( SQLAllocHandle ( SQL_HANDLE_DBC, m_hEnv, &m_hDBC )==SQL_ERROR ) + { + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, "SQL-CONNECT: FAIL\n" ); + return false; + } + + OdbcPostConnect (); + + char szOutConn [2048]; + SQLSMALLINT iOutConn = 0; + if ( SQLDriverConnect ( m_hDBC, NULL, (SQLTCHAR*) m_sOdbcDSN.cstr(), SQL_NTS, (SQLCHAR*)szOutConn, sizeof(szOutConn), &iOutConn, SQL_DRIVER_NOPROMPT )==SQL_ERROR ) + { + GetSqlError ( SQL_HANDLE_DBC, m_hDBC ); + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, "SQL-CONNECT: FAIL\n" ); + return false; + } + + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, "SQL-CONNECT: ok\n" ); + return true; +} + + +void CSphSource_ODBC::SqlDisconnect () +{ + if ( m_tParams.m_bPrintQueries ) + fprintf ( stdout, "SQL-DISCONNECT\n" ); + + if ( m_hStmt!=NULL ) + SQLFreeHandle ( SQL_HANDLE_STMT, m_hStmt ); + + if ( m_hDBC ) + { + SQLDisconnect ( m_hDBC ); + SQLFreeHandle ( SQL_HANDLE_DBC, m_hDBC ); + } + + if ( m_hEnv ) + SQLFreeHandle ( SQL_HANDLE_ENV, m_hEnv ); +} + + +int CSphSource_ODBC::SqlNumFields () +{ + if ( !m_hStmt ) + return -1; + + return m_nResultCols; +} + + +bool CSphSource_ODBC::SqlFetchRow () +{ + if ( !m_hStmt ) + return false; + + SQLRETURN iRet = SQLFetch ( m_hStmt ); + if ( iRet==SQL_ERROR || iRet==SQL_INVALID_HANDLE ) + { + GetSqlError ( SQL_HANDLE_STMT, m_hStmt ); + return false; + } + + ARRAY_FOREACH ( i, m_dColumns ) + { + QueryColumn_t & tCol = m_dColumns[i]; + switch ( tCol.m_iInd ) + { + case SQL_NO_DATA: + case SQL_NULL_DATA: + tCol.m_dContents[0] = '\0'; + tCol.m_dContents[0] = '\0'; + break; + + default: +#if USE_WINDOWS // FIXME! support UCS-2 columns on Unix too + if ( tCol.m_bUnicode ) + { + // WideCharToMultiByte should get NULL terminated string + for ( int i=0; i=0 && tCol.m_iInd=tCol.m_iBufferSize && !tCol.m_bTruncated ) + { + // out of buffer; warn about that (once) + tCol.m_bTruncated = true; + sphWarn ( "'%s' column truncated (buffer=%d, got=%d); consider revising sql_column_buffers", + tCol.m_sName.cstr(), tCol.m_iBufferSize-1, (int) tCol.m_iInd ); + } + } + break; + } + } + + return iRet!=SQL_NO_DATA; +} + + +const char * CSphSource_ODBC::SqlColumn ( int iIndex ) +{ + if ( !m_hStmt ) + return NULL; + + return &(m_dColumns [iIndex].m_dContents[0]); +} + + +const char * CSphSource_ODBC::SqlFieldName ( int iIndex ) +{ + return m_dColumns[iIndex].m_sName.cstr(); +} + + +DWORD CSphSource_ODBC::SqlColumnLength ( int ) +{ + return 0; +} + + +bool CSphSource_ODBC::Setup ( const CSphSourceParams_ODBC & tParams ) +{ + if ( !CSphSource_SQL::Setup ( tParams ) ) + return false; + + // parse column buffers spec, if any + if ( !tParams.m_sColBuffers.IsEmpty() ) + { + const char * p = tParams.m_sColBuffers.cstr(); + while ( *p ) + { + // skip space + while ( sphIsSpace(*p) ) + p++; + + // expect eof or ident + if ( !*p ) + break; + if ( !sphIsAlpha(*p) ) + { + m_sError.SetSprintf ( "identifier expected in sql_column_buffers near '%s'", p ); + return false; + } + + // get ident + CSphString sCol; + const char * pIdent = p; + while ( sphIsAlpha(*p) ) + p++; + sCol.SetBinary ( pIdent, p-pIdent ); + + // skip space + while ( sphIsSpace(*p) ) + p++; + + // expect assignment + if ( *p!='=' ) + { + m_sError.SetSprintf ( "'=' expected in sql_column_buffers near '%s'", p ); + return false; + } + p++; + + // skip space + while ( sphIsSpace(*p) ) + p++; + + // expect number + if (!( *p>='0' && *p<='9' )) + { + m_sError.SetSprintf ( "number expected in sql_column_buffers near '%s'", p ); + return false; + } + + // get value + int iSize = 0; + while ( *p>='0' && *p<='9' ) + { + iSize = 10*iSize + ( *p-'0' ); + p++; + } + if ( *p=='K' ) + { + iSize *= 1024; + p++; + } else if ( *p=='M' ) + { + iSize *= 1048576; + p++; + } + + // hash value + sCol.ToLower(); + m_hColBuffers.Add ( iSize, sCol ); + + // skip space + while ( sphIsSpace(*p) ) + p++; + + // expect eof or comma + if ( !*p ) + break; + if ( *p!=',' ) + { + m_sError.SetSprintf ( "comma expected in sql_column_buffers near '%s'", p ); + return false; + } + p++; + } + } + + // ODBC specific params + m_sOdbcDSN = tParams.m_sOdbcDSN; + m_bWinAuth = tParams.m_bWinAuth; + m_bUnicode = tParams.m_bUnicode; + + // build and store DSN for error reporting + char sBuf [ 1024 ]; + snprintf ( sBuf, sizeof(sBuf), "odbc%s", m_sSqlDSN.cstr()+3 ); + m_sSqlDSN = sBuf; + + return true; +} + + +void CSphSource_ODBC::GetSqlError ( SQLSMALLINT iHandleType, SQLHANDLE hHandle ) +{ + if ( !hHandle ) + { + m_sError.SetSprintf ( "invalid handle" ); + return; + } + + char szState[16]; + char szMessageText[1024]; + SQLINTEGER iError; + SQLSMALLINT iLen; + SQLGetDiagRec ( iHandleType, hHandle, 1, (SQLCHAR*)szState, &iError, (SQLCHAR*)szMessageText, 1024, &iLen ); + m_sError = szMessageText; +} + +////////////////////////////////////////////////////////////////////////// + +void CSphSource_MSSQL::OdbcPostConnect () +{ + const int MAX_LEN = 1024; + char szDriver[MAX_LEN]; + char szDriverAttrs[MAX_LEN]; + SQLSMALLINT iDescLen = 0; + SQLSMALLINT iAttrLen = 0; + SQLSMALLINT iDir = SQL_FETCH_FIRST; + + CSphString sDriver; + for ( ;; ) + { + SQLRETURN iRet = SQLDrivers ( m_hEnv, iDir, (SQLCHAR*)szDriver, MAX_LEN, &iDescLen, (SQLCHAR*)szDriverAttrs, MAX_LEN, &iAttrLen ); + if ( iRet==SQL_NO_DATA ) + break; + + iDir = SQL_FETCH_NEXT; + if ( !strcmp ( szDriver, "SQL Native Client" ) + || !strncmp ( szDriver, "SQL Server Native Client", strlen("SQL Server Native Client") ) ) + { + sDriver = szDriver; + break; + } + } + + if ( sDriver.IsEmpty() ) + sDriver = "SQL Server"; + + if ( m_bWinAuth && m_tParams.m_sUser.IsEmpty () ) + { + m_sOdbcDSN.SetSprintf ( "DRIVER={%s};SERVER={%s};Database={%s};Trusted_Connection=yes", + sDriver.cstr (), m_tParams.m_sHost.cstr (), m_tParams.m_sDB.cstr () ); + + } else if ( m_bWinAuth ) + { + m_sOdbcDSN.SetSprintf ( "DRIVER={%s};SERVER={%s};UID={%s};PWD={%s};Database={%s};Trusted_Connection=yes", + sDriver.cstr (), m_tParams.m_sHost.cstr (), m_tParams.m_sUser.cstr (), m_tParams.m_sPass.cstr (), m_tParams.m_sDB.cstr () ); + } else + { + m_sOdbcDSN.SetSprintf ( "DRIVER={%s};SERVER={%s};UID={%s};PWD={%s};Database={%s}", + sDriver.cstr (), m_tParams.m_sHost.cstr (), m_tParams.m_sUser.cstr (), m_tParams.m_sPass.cstr (), m_tParams.m_sDB.cstr () ); + } +} + +#endif + +///////////////////////////////////////////////////////////////////////////// +// MERGER HELPERS +///////////////////////////////////////////////////////////////////////////// + +void CSphDocMVA::Read ( CSphReader & tReader ) +{ + m_iDocID = tReader.GetDocid(); + if ( m_iDocID ) + { + ARRAY_FOREACH ( i, m_dMVA ) + { + DWORD iValues = tReader.GetDword(); + m_dMVA[i].Resize ( iValues ); + if ( iValues ) + tReader.GetBytes ( m_dMVA[i].Begin(), iValues*sizeof(DWORD) ); + } + } +} + +void CSphDocMVA::Write ( CSphWriter & tWriter ) +{ + tWriter.PutDocid ( m_iDocID ); + ARRAY_FOREACH ( i, m_dMVA ) + { + m_dOffsets[i] = ( DWORD )tWriter.GetPos() / sizeof( DWORD ); + + int iValues = m_dMVA[i].GetLength(); + tWriter.PutDword ( iValues ); + if ( iValues ) + tWriter.PutBytes ( m_dMVA[i].Begin(), iValues*sizeof(DWORD) ); + } +} + +///////////////////////////////////////////////////////////////////////////// + +void sphSetQuiet ( bool bQuiet ) +{ + g_bSphQuiet = bQuiet; +} + + +static inline float GetPercent ( int64_t a, int64_t b ) +{ + if ( b==0 ) + return 100.0f; + + int64_t r = a*100000/b; + return float(r)/1000; +} + + +const char * CSphIndexProgress::BuildMessage() const +{ + static char sBuf[256]; + switch ( m_ePhase ) + { + case PHASE_COLLECT: + snprintf ( sBuf, sizeof(sBuf), "collected %d docs, %.1f MB", m_iDocuments, + float(m_iBytes)/1000000.0f ); + break; + + case PHASE_SORT: + snprintf ( sBuf, sizeof(sBuf), "sorted %.1f Mhits, %.1f%% done", float(m_iHits)/1000000, + GetPercent ( m_iHits, m_iHitsTotal ) ); + break; + + case PHASE_COLLECT_MVA: + snprintf ( sBuf, sizeof(sBuf), "collected "INT64_FMT" attr values", m_iAttrs ); + break; + + case PHASE_SORT_MVA: + snprintf ( sBuf, sizeof(sBuf), "sorted %.1f Mvalues, %.1f%% done", float(m_iAttrs)/1000000, + GetPercent ( m_iAttrs, m_iAttrsTotal ) ); + break; + + case PHASE_MERGE: + snprintf ( sBuf, sizeof(sBuf), "merged %.1f Kwords", float(m_iWords)/1000 ); + break; + + case PHASE_PREREAD: + snprintf ( sBuf, sizeof(sBuf), "read %.1f of %.1f MB, %.1f%% done", + float(m_iBytes)/1000000.0f, float(m_iBytesTotal)/1000000.0f, + GetPercent ( m_iBytes, m_iBytesTotal ) ); + break; + + case PHASE_PRECOMPUTE: + snprintf ( sBuf, sizeof(sBuf), "indexing attributes, %d.%d%% done", m_iDone/10, m_iDone%10 ); + break; + + default: + assert ( 0 && "internal error: unhandled progress phase" ); + snprintf ( sBuf, sizeof(sBuf), "(progress-phase-%d)", m_ePhase ); + break; + } + + sBuf[sizeof(sBuf)-1] = '\0'; + return sBuf; +} + +///////////////////////////////////////////////////////////////////////////// + +static int DictCmp ( const char * pStr1, int iLen1, const char * pStr2, int iLen2 ) +{ + assert ( pStr1 && pStr2 ); + assert ( iLen1 && iLen2 ); + const int iCmpLen = Min ( iLen1, iLen2 ); + return strncmp ( pStr1, pStr2, iCmpLen ); +} + +static int DictCmpStrictly ( const char * pStr1, int iLen1, const char * pStr2, int iLen2 ) +{ + assert ( pStr1 && pStr2 ); + assert ( iLen1 && iLen2 ); + const int iCmpLen = Min ( iLen1, iLen2 ); + const int iCmpRes = strncmp ( pStr1, pStr2, iCmpLen ); + return iCmpRes==0 ? iLen1-iLen2 : iCmpRes; +} + +int CSphWordlistCheckpoint::Cmp ( const char * sWord, int iLen, SphWordID_t iWordID, bool bWordDict ) const +{ + if ( bWordDict ) + return DictCmp ( sWord, iLen, m_sWord, strlen ( m_sWord ) ); + + int iRes = 0; + iRes = iWordIDm_iWordID ? 1 : iRes; + return iRes; +} + +int CSphWordlistCheckpoint::CmpStrictly ( const char * sWord, int iLen, SphWordID_t iWordID, bool bWordDict ) const +{ + if ( bWordDict ) + return DictCmpStrictly ( sWord, iLen, m_sWord, strlen ( m_sWord ) ); + + int iRes = 0; + iRes = iWordIDm_iWordID ? 1 : iRes; + return iRes; +} + +WordDictInfo_t::WordDictInfo_t () +{ + m_uOff = 0; + m_iDocs = 0; + m_iHits = 0; + m_iDoclistHint = 0; +} + +WordReaderContext_t::WordReaderContext_t() +{ + m_sWord[0] = '\0'; + m_iLen = 0; +} + + +CWordlist::CWordlist () + : m_dCheckpoints ( 0 ) +{ + m_iCheckpointsPos = 0; + m_iSize = 0; + m_iMaxChunk = 0; + m_bWordDict = false; + m_pWords = NULL; +} + +CWordlist::~CWordlist () +{ + Reset(); +} + +void CWordlist::Reset () +{ + m_tFile.Close (); + m_pBuf.Reset (); + + m_dCheckpoints.Reset ( 0 ); + SafeDeleteArray ( m_pWords ); +} + +bool CWordlist::ReadCP ( CSphAutofile & tFile, DWORD uVer, bool bWordDict, CSphString & sError ) +{ + assert ( ( uVer>=21 && bWordDict ) || !bWordDict ); + assert ( m_iCheckpointsPos>0 ); + assert ( m_iSize-m_iCheckpointsPos=0 ); + m_pWords = new BYTE[iArenaSize]; + assert ( m_pWords ); + + BYTE * pWord = m_pWords; + ARRAY_FOREACH ( i, m_dCheckpoints ) + { + m_dCheckpoints[i].m_sWord = (char *)pWord; + + const int iLen = tReader.GetDword(); + assert ( iLen>0 ); + assert ( iLen+1+(pWord-m_pWords)<=iArenaSize ); + tReader.GetBytes ( pWord, iLen ); + pWord[iLen] = '\0'; + pWord += iLen+1; + + m_dCheckpoints[i].m_iWordlistOffset = tReader.GetOffset(); + } + } else if ( uVer>=11 ) + { + // read v.14 checkpoints + ARRAY_FOREACH ( i, m_dCheckpoints ) + { + m_dCheckpoints[i].m_iWordID = (SphWordID_t)tReader.GetOffset(); + m_dCheckpoints[i].m_iWordlistOffset = tReader.GetOffset(); + } + } else + { + // convert v.10 checkpoints + ARRAY_FOREACH ( i, m_dCheckpoints ) + { +#if USE_64BIT + m_dCheckpoints[i].m_iWordID = tReader.GetOffset(); +#else + m_dCheckpoints[i].m_iWordID = tReader.GetDword(); +#endif + m_dCheckpoints[i].m_iWordlistOffset = tReader.GetDword(); + } + } + + SphOffset_t uMaxChunk = 0; + ARRAY_FOREACH ( i, m_dCheckpoints ) + { + SphOffset_t uNextOffset = ( i+1 )==m_dCheckpoints.GetLength() + ? m_iSize + : m_dCheckpoints[i+1].m_iWordlistOffset; + uMaxChunk = Max ( uMaxChunk, uNextOffset - m_dCheckpoints[i].m_iWordlistOffset ); + } + assert ( uMaxChunk0 ); + + const CSphWordlistCheckpoint * pStart = m_dCheckpoints.Begin(); + const CSphWordlistCheckpoint * pEnd = &m_dCheckpoints.Last(); + + if ( bStarMode && pStart->Cmp ( sWord, iWordLen, iWordID, m_bWordDict )<0 ) + return NULL; + if ( !bStarMode && pStart->CmpStrictly ( sWord, iWordLen, iWordID, m_bWordDict )<0 ) + return NULL; + + if ( pEnd->CmpStrictly ( sWord, iWordLen, iWordID, m_bWordDict )>=0 ) + pStart = pEnd; + else + { + while ( pEnd-pStart>1 ) + { + const CSphWordlistCheckpoint * pMid = pStart + (pEnd-pStart)/2; + const int iCmpRes = pMid->CmpStrictly ( sWord, iWordLen, iWordID, m_bWordDict ); + + if ( iCmpRes==0 ) + { + pStart = pMid; + break; + } else if ( iCmpRes<0 ) + pEnd = pMid; + else + pStart = pMid; + } + + assert ( pStart>=m_dCheckpoints.Begin() ); + assert ( pStart<=&m_dCheckpoints.Last() ); + assert ( pStart->Cmp ( sWord, iWordLen, iWordID, m_bWordDict )>=0 + && pEnd->CmpStrictly ( sWord, iWordLen, iWordID, m_bWordDict )<0 ); + } + + return pStart; +} + +const BYTE * CWordlist::GetWord ( const BYTE * pBuf, const char * pStr, int iLen, WordDictInfo_t & tWord, bool bStarMode, WordReaderContext_t & tCtx ) const +{ + assert ( pBuf ); + assert ( pStr && iLen>0 ); + + for ( ;; ) + { + // unpack next word + // must be in sync with DictEnd()! + BYTE uPack = *pBuf++; + if ( !uPack ) + return NULL; // wordlist chunk is over + + int iMatch, iDelta; + if ( uPack & 0x80 ) + { + iDelta = ( ( uPack>>4 ) & 7 ) + 1; + iMatch = uPack & 15; + } else + { + iDelta = uPack & 127; + iMatch = *pBuf++; + } + + assert ( iMatch+iDelta<(int)sizeof(tCtx.m_sWord)-1 ); + assert ( iMatch<=(int)strlen ( (char *)tCtx.m_sWord ) ); + + memcpy ( tCtx.m_sWord + iMatch, pBuf, iDelta ); + pBuf += iDelta; + + tCtx.m_iLen = iMatch + iDelta; + tCtx.m_sWord[tCtx.m_iLen] = '\0'; + + // list is sorted, so if there was no match, there's no such word + int iCmpRes = bStarMode + ? DictCmp ( pStr, iLen, (char*)tCtx.m_sWord, tCtx.m_iLen ) + : DictCmpStrictly ( pStr, iLen, (char*)tCtx.m_sWord, tCtx.m_iLen ); + if ( iCmpRes<0 ) + return NULL; + + const SphOffset_t uOff = sphUnzipOffset ( pBuf ); + const int iDocs = sphUnzipInt ( pBuf ); + const int iHits = sphUnzipInt ( pBuf ); + BYTE uHint = ( iDocs>=DOCLIST_HINT_THRESH ) ? *pBuf++ : 0; + + // it matches?! + if ( iCmpRes==0 && ( !bStarMode || iLen<=tCtx.m_iLen ) ) + { + tWord.m_sWord = (char*)tCtx.m_sWord; + tWord.m_uOff = uOff; + tWord.m_iDocs = iDocs; + tWord.m_iHits = iHits; + tWord.m_iDoclistHint = DoclistHintUnpack ( iDocs, uHint ); + return pBuf; + } + } +} + +bool CWordlist::GetWord ( const BYTE * pBuf, SphWordID_t iWordID, WordDictInfo_t & tWord ) const +{ + SphWordID_t iLastID = 0; + SphOffset_t uLastOff = 0; + + for ( ;; ) + { + // unpack next word ID + const SphWordID_t iDeltaWord = sphUnzipWordid ( pBuf ); // FIXME! slow with 32bit wordids + + if ( iDeltaWord==0 ) // wordlist chunk is over + return false; + + iLastID += iDeltaWord; + + // list is sorted, so if there was no match, there's no such word + if ( iLastID>iWordID ) + return false; + + // unpack next offset + const SphOffset_t iDeltaOffset = sphUnzipOffset ( pBuf ); + uLastOff += iDeltaOffset; + + // unpack doc/hit count + const int iDocs = sphUnzipInt ( pBuf ); + const int iHits = sphUnzipInt ( pBuf ); + + assert ( iDeltaOffset ); + assert ( iDocs ); + assert ( iHits ); + + // it matches?! + if ( iLastID==iWordID ) + { + sphUnzipWordid ( pBuf ); // might be 0 at checkpoint + const SphOffset_t iDoclistLen = sphUnzipOffset ( pBuf ); + + tWord.m_uOff = uLastOff; + tWord.m_iDocs = iDocs; + tWord.m_iHits = iHits; + tWord.m_iDoclistHint = (int)iDoclistLen; + + return true; + } + } +} + +const BYTE * CWordlist::AcquireDict ( const CSphWordlistCheckpoint * pCheckpoint, int iFD, BYTE * pDictBuf ) const +{ + assert ( pCheckpoint ); + assert ( m_dCheckpoints.GetLength() ); + assert ( pCheckpoint>=m_dCheckpoints.Begin() && pCheckpoint<=&m_dCheckpoints.Last() ); + assert ( pCheckpoint->m_iWordlistOffset>0 && pCheckpoint->m_iWordlistOffset<=m_iSize ); + assert ( m_pBuf.IsEmpty() || pCheckpoint->m_iWordlistOffset<(int64_t)m_pBuf.GetLength() ); + + const BYTE * pBuf = NULL; + + if ( !m_pBuf.IsEmpty() ) + pBuf = m_pBuf.GetWritePtr()+pCheckpoint->m_iWordlistOffset; + else + { + assert ( pDictBuf ); + SphOffset_t iChunkLength = 0; + + // not the end? + if ( pCheckpoint < &m_dCheckpoints.Last() ) + iChunkLength = pCheckpoint[1].m_iWordlistOffset - pCheckpoint->m_iWordlistOffset; + else + iChunkLength = m_iSize - pCheckpoint->m_iWordlistOffset; + + if ( (int)sphPread ( iFD, pDictBuf, (size_t)iChunkLength, pCheckpoint->m_iWordlistOffset )==iChunkLength ) + pBuf = pDictBuf; + } + + return pBuf; +} + +void CWordlist::GetPrefixedWords ( const char * sWord, int iWordLen, CSphVector & dPrefixedWords, BYTE * pDictBuf, int iFD ) const +{ + assert ( iWordLen>0 ); + + // empty index? + if ( !m_dCheckpoints.GetLength() ) + return; + + const CSphWordlistCheckpoint * pCheckpoint = FindCheckpoint ( sWord, iWordLen, 0, true ); + + while ( pCheckpoint ) + { + // decode wordlist chunk + const BYTE * pBuf = AcquireDict ( pCheckpoint, iFD, pDictBuf ); + assert ( pBuf ); + + WordReaderContext_t tReaderCtx; + + while ( pBuf ) + { + WordDictInfo_t tResWord; + pBuf = GetWord ( pBuf, sWord, iWordLen, tResWord, true, tReaderCtx ); + + if ( pBuf ) + { + assert ( !tResWord.m_sWord.IsEmpty() ); + CSphNamedInt & tPrefixed = dPrefixedWords.Add(); + tPrefixed.m_sName = tResWord.m_sWord; // OPTIMIZE? swap mb? + tPrefixed.m_iValue = tResWord.m_iDocs; + } + } + + pCheckpoint++; + if ( pCheckpoint > &m_dCheckpoints.Last() ) + break; + + if ( DictCmp ( sWord, iWordLen, pCheckpoint->m_sWord, strlen ( pCheckpoint->m_sWord ) )<0 ) + break; + } +} + +int CSphStrHashFunc::Hash ( const CSphString & sKey ) +{ + return sKey.IsEmpty() ? 0 : sphCRC32 ( (const BYTE *)sKey.cstr() ); +} + + +////////////////////////////////////////////////////////////////////////// +// CSphQueryResultMeta +////////////////////////////////////////////////////////////////////////// + +CSphQueryResultMeta::CSphQueryResultMeta () +: m_iQueryTime ( 0 ) +, m_iCpuTime ( 0 ) +, m_iMultiplier ( 1 ) +, m_iMatches ( 0 ) +, m_iTotalMatches ( 0 ) +{ +} + + +void CSphQueryResultMeta::AddStat ( const CSphString & sWord, int iDocs, int iHits, bool bExpanded ) +{ + CSphString sFixed; + const CSphString * pFixed = &sWord; + if ( sWord.cstr()[0]==MAGIC_WORD_HEAD ) + { + sFixed = sWord; + *(char *)( sFixed.cstr() ) = '*'; + pFixed = &sFixed; + } else if ( sWord.cstr()[0]==MAGIC_WORD_HEAD_NONSTEMMED ) + { + if ( !bExpanded ) + { + sFixed = sWord; + *(char *)( sFixed.cstr() ) = '='; + pFixed = &sFixed; + } else + { + sFixed = sWord.SubString ( 1, sWord.Length()-1 ); + pFixed = &sFixed; + } + } + + WordStat_t * pStats = m_hWordStats ( *pFixed ); + if ( !pStats ) + { + CSphQueryResultMeta::WordStat_t tStats; + tStats.m_iDocs = iDocs; + tStats.m_iHits = iHits; + tStats.m_bExpanded = bExpanded; + m_hWordStats.Add ( tStats, *pFixed ); + } else + { + pStats->m_iDocs += iDocs; + pStats->m_iHits += iHits; + pStats->m_bExpanded |= bExpanded; + } +} + + +CSphQueryResultMeta::CSphQueryResultMeta ( const CSphQueryResultMeta & tMeta ) +{ + *this = tMeta; +} + + +CSphQueryResultMeta & CSphQueryResultMeta::operator= ( const CSphQueryResultMeta & tMeta ) +{ + m_iQueryTime = tMeta.m_iQueryTime; + m_iCpuTime = tMeta.m_iCpuTime; + m_iMultiplier = tMeta.m_iMultiplier; + m_iMatches = tMeta.m_iMatches; + m_iTotalMatches = tMeta.m_iTotalMatches; + + m_sError = tMeta.m_sError; + m_sWarning = tMeta.m_sWarning; + + m_hWordStats = tMeta.m_hWordStats; + + return *this; +} + + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinx.h b/coreseek/csft-4.1/src/sphinx.h new file mode 100755 index 0000000..211ceb8 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinx.h @@ -0,0 +1,2836 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinx_ +#define _sphinx_ + +///////////////////////////////////////////////////////////////////////////// + +#ifdef _WIN32 + #define USE_MYSQL 1 /// whether to compile MySQL support + #define USE_PGSQL 0 /// whether to compile PgSQL support + #define USE_ODBC 0 /// whether to compile ODBC support + #define USE_LIBEXPAT 1 /// whether to compile libexpat support + #define USE_LIBICONV 0 /// whether to compile iconv support + #define USE_LIBXML 0 /// whether to compile libxml support + #define USE_LIBSTEMMER 0 /// whether to compile libstemmber support + #define USE_WINDOWS 1 /// whether to compile for Windows + #define USE_MMSEG 1 /// enable mmseg + #define USE_SYSLOG 0 /// whether to use syslog for logging + + #define UNALIGNED_RAM_ACCESS 1 + #define USE_LITTLE_ENDIAN 1 + #define USE_PYTHON 1 /// whether to compile Python support, NOTE:Coreseek Fork, this option must be on! + #define USE_PYTHON_DEBUG 0 ///link to _d.lib or not + #define USE_PYTHON_CASE_SENSIVE_ATTR 0 ///column case senstive @python +#else + #define USE_WINDOWS 0 /// whether to compile for Windows + #define USE_PYTHON_CASE_SENSIVE_ATTR 1 ///column case senstive @python +#endif + +///////////////////////////////////////////////////////////////////////////// + +#include "sphinxstd.h" +#include "sphinxexpr.h" // to remove? + +#include +#include +#include +#include + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "sph_darts.h" +#include + +#if USE_PGSQL +#include +#endif + +#if USE_WINDOWS +#include +#else +#include +#include +#endif + +#if USE_MYSQL +#include +#endif + +#if USE_WINDOWS +typedef __int64 SphOffset_t; +#define STDOUT_FILENO fileno(stdout) +#define STDERR_FILENO fileno(stderr) +#else +typedef off_t SphOffset_t; +#endif + +#if USE_ODBC +#include +#endif + +///////////////////////////////////////////////////////////////////////////// + +#ifndef USE_64BIT +#define USE_64BIT 0 +#endif + +#if USE_64BIT + +// use 64-bit unsigned integers to store document and word IDs +#define SPHINX_BITS_TAG "-id64" +typedef uint64_t SphWordID_t; +typedef uint64_t SphDocID_t; + +#define DOCID_MAX U64C(0xffffffffffffffff) +#define DOCID_FMT UINT64_FMT +#define DOCINFO_IDSIZE 2 + +STATIC_SIZE_ASSERT ( SphWordID_t, 8 ); +STATIC_SIZE_ASSERT ( SphDocID_t, 8 ); + +#else + +// use 32-bit unsigned integers to store document and word IDs +#define SPHINX_BITS_TAG "" +typedef DWORD SphWordID_t; +typedef DWORD SphDocID_t; + +#define DOCID_MAX 0xffffffffUL +#define DOCID_FMT "%u" +#define DOCINFO_IDSIZE 1 + +STATIC_SIZE_ASSERT ( SphWordID_t, 4 ); +STATIC_SIZE_ASSERT ( SphDocID_t, 4 ); + +#endif // USE_64BIT + +#define DWSIZEOF(a) ( sizeof(a) / sizeof(DWORD) ) + +////////////////////////////////////////////////////////////////////////// + +/// row entry (storage only, does not necessarily map 1:1 to attributes) +typedef DWORD CSphRowitem; + +/// widest integer type that can be be stored as an attribute (ideally, fully decoupled from rowitem size!) +typedef int64_t SphAttr_t; + +const CSphRowitem ROWITEM_MAX = UINT_MAX; +const int ROWITEM_BITS = 8*sizeof(CSphRowitem); +const int ROWITEM_SHIFT = 5; + +STATIC_ASSERT ( ( 1 << ROWITEM_SHIFT )==ROWITEM_BITS, INVALID_ROWITEM_SHIFT ); + +#ifndef USE_LITTLE_ENDIAN +#error Please define endianness +#endif + +template < typename DOCID > +inline DOCID DOCINFO2ID_T ( const DWORD * pDocinfo ); + +template<> inline DWORD DOCINFO2ID_T ( const DWORD * pDocinfo ) +{ + return pDocinfo[0]; +} + +template<> inline uint64_t DOCINFO2ID_T ( const DWORD * pDocinfo ) +{ +#if USE_LITTLE_ENDIAN + return uint64_t(pDocinfo[0]) + (uint64_t(pDocinfo[1])<<32); +#else + return uint64_t(pDocinfo[1]) + (uint64_t(pDocinfo[0])<<32); +#endif +} + +inline void DOCINFOSETID ( DWORD * pDocinfo, DWORD uValue ) +{ + *pDocinfo = uValue; +} + +inline void DOCINFOSETID ( DWORD * pDocinfo, uint64_t uValue ) +{ +#if USE_LITTLE_ENDIAN + pDocinfo[0] = (DWORD)uValue; + pDocinfo[1] = (DWORD)(uValue>>32); +#else + pDocinfo[0] = (DWORD)(uValue>>32); + pDocinfo[1] = (DWORD)uValue; +#endif +} + +inline SphDocID_t DOCINFO2ID ( const DWORD * pDocinfo ) +{ + return DOCINFO2ID_T ( pDocinfo ); +} + +#if PARANOID +template < typename DOCID > inline DWORD * DOCINFO2ATTRS_T ( DWORD * pDocinfo ) { assert ( pDocinfo ); return pDocinfo+DWSIZEOF(DOCID); } +template < typename DOCID > inline const DWORD * DOCINFO2ATTRS_T ( const DWORD * pDocinfo ) { assert ( pDocinfo ); return pDocinfo+DWSIZEOF(DOCID); } +#else +template < typename DOCID > inline DWORD * DOCINFO2ATTRS_T ( DWORD * pDocinfo ) { return pDocinfo + DWSIZEOF(DOCID); } +template < typename DOCID > inline const DWORD * DOCINFO2ATTRS_T ( const DWORD * pDocinfo ) { return pDocinfo + DWSIZEOF(DOCID); } +#endif + +inline DWORD * DOCINFO2ATTRS ( DWORD * pDocinfo ) { return DOCINFO2ATTRS_T(pDocinfo); } +inline const DWORD * DOCINFO2ATTRS ( const DWORD * pDocinfo ) { return DOCINFO2ATTRS_T(pDocinfo); } + + +///////////////////////////////////////////////////////////////////////////// + +#include "sphinxversion.h" + +#ifndef SPHINX_TAG +#define SPHINX_TAG "-dev" +#endif + +#define SPHINX_VERSION "2.0.2" SPHINX_BITS_TAG SPHINX_TAG " (" SPH_SVN_TAGREV ")" +#define SPHINX_BANNER "Sphinx " SPHINX_VERSION "\nCopyright (c) 2001-2011, Andrew Aksyonoff\nCopyright (c) 2008-2011, Sphinx Technologies Inc (http://sphinxsearch.com)\n\n" +#define SPHINX_SEARCHD_PROTO 1 + +#define SPH_MAX_WORD_LEN 42 // so that any UTF-8 word fits 127 bytes +#define SPH_MAX_FILENAME_LEN 512 +#define SPH_MAX_FIELDS 256 + +#define CORESEEK_VERSION "4.1 [ Sphinx " SPHINX_VERSION "]" +#define CORESEEK_BANNER "Coreseek Fulltext " CORESEEK_VERSION "\nCopyright (c) 2007-2011,\nBeijing Choice Software Technologies Inc (http://www.coreseek.com)\n\n " + +#define REBANDING 1 + +#if REBANDING +#undef SPHINX_BANNER +#define SPHINX_BANNER CORESEEK_BANNER +#endif + +///////////////////////////////////////////////////////////////////////////// + +/// microsecond precision timestamp +/// current UNIX timestamp in seconds multiplied by 1000000, plus microseconds since the beginning of current second +int64_t sphMicroTimer (); + +/// Sphinx CRC32 implementation +DWORD sphCRC32 ( const BYTE * pString ); +DWORD sphCRC32 ( const BYTE * pString, int iLen ); +DWORD sphCRC32 ( const BYTE * pString, int iLen, DWORD uPrevCRC ); + +/// Sphinx FNV64 implementation +const uint64_t SPH_FNV64_SEED = 0xcbf29ce484222325ULL; +uint64_t sphFNV64 ( const BYTE * pString ); +uint64_t sphFNV64 ( const BYTE * s, int iLen, uint64_t uPrev = SPH_FNV64_SEED ); + +/// calculate file crc32 +bool sphCalcFileCRC32 ( const char * szFilename, DWORD & uCRC32 ); + +/// replaces all occurences of sMacro in sTemplate with textual representation of uValue +char * sphStrMacro ( const char * sTemplate, const char * sMacro, SphDocID_t uValue ); + +/// try to obtain an exclusive lock on specified file +/// bWait specifies whether to wait +bool sphLockEx ( int iFile, bool bWait ); + +/// remove existing locks +void sphLockUn ( int iFile ); + +/// millisecond-precision sleep +void sphSleepMsec ( int iMsec ); + +/// check if file exists and is a readable file +bool sphIsReadable ( const char * sFilename, CSphString * pError=NULL ); + +/// set throttling options +void sphSetThrottling ( int iMaxIOps, int iMaxIOSize ); + +/// immediately interrupt current query +void sphInterruptNow(); + +#if !USE_WINDOWS +/// set process info +void sphSetProcessInfo ( bool bHead ); +#endif + +struct CSphIOStats +{ + int64_t m_iReadTime; + DWORD m_iReadOps; + int64_t m_iReadBytes; + int64_t m_iWriteTime; + DWORD m_iWriteOps; + int64_t m_iWriteBytes; +}; + +/// clear stats, starts collecting +void sphStartIOStats (); + +/// stops collecting stats, returns results +const CSphIOStats & sphStopIOStats (); + +/// startup mva updates arena +DWORD * sphArenaInit ( int iMaxBytes ); + +////////////////////////////////////////////////////////////////////////// + +#if UNALIGNED_RAM_ACCESS + +/// pass-through wrapper +template < typename T > inline T sphUnalignedRead ( const T & tRef ) +{ + return tRef; +} + +/// pass-through wrapper +template < typename T > void sphUnalignedWrite ( void * pPtr, const T & tVal ) +{ + *(T*)pPtr = tVal; +} + +#else + +/// unaligned read wrapper for some architectures (eg. SPARC) +template < typename T > +inline T sphUnalignedRead ( const T & tRef ) +{ + T uTmp; + BYTE * pSrc = (BYTE *) &tRef; + BYTE * pDst = (BYTE *) &uTmp; + for ( int i=0; i<(int)sizeof(T); i++ ) + *pDst++ = *pSrc++; + return uTmp; +} + +/// unaligned write wrapper for some architectures (eg. SPARC) +template < typename T > +void sphUnalignedWrite ( void * pPtr, const T & tVal ) +{ + BYTE * pDst = (BYTE *) pPtr; + BYTE * pSrc = (BYTE *) &tVal; + for ( int i=0; i<(int)sizeof(T); i++ ) + *pDst++ = *pSrc++; +} + +#endif + +int sphUTF8Len ( const char * pStr ); + +/// check for valid attribute name char +inline int sphIsAttr ( int c ) +{ + // different from sphIsAlpha() in that we don't allow minus + return ( c>='0' && c<='9' ) || ( c>='a' && c<='z' ) || ( c>='A' && c<='Z' ) || c=='_'; +} + +///////////////////////////////////////////////////////////////////////////// +// TOKENIZERS +///////////////////////////////////////////////////////////////////////////// + +extern const char * SPHINX_DEFAULT_SBCS_TABLE; +extern const char * SPHINX_DEFAULT_UTF8_TABLE; + +///////////////////////////////////////////////////////////////////////////// + +/// lowercaser remap range +struct CSphRemapRange +{ + int m_iStart; + int m_iEnd; + int m_iRemapStart; + + CSphRemapRange () + : m_iStart ( -1 ) + , m_iEnd ( -1 ) + , m_iRemapStart ( -1 ) + {} + + CSphRemapRange ( int iStart, int iEnd, int iRemapStart ) + : m_iStart ( iStart ) + , m_iEnd ( iEnd ) + , m_iRemapStart ( iRemapStart ) + {} +}; + + +inline bool operator < ( const CSphRemapRange & a, const CSphRemapRange & b ) +{ + return a.m_iStart < b.m_iStart; +} + + +/// lowercaser +class CSphLowercaser +{ +public: + CSphLowercaser (); + ~CSphLowercaser (); + + void Reset (); + void SetRemap ( const CSphLowercaser * pLC ); + void AddRemaps ( const CSphVector & dRemaps, DWORD uFlags ); + void AddSpecials ( const char * sSpecials ); + uint64_t GetFNV () const; + +public: + const CSphLowercaser & operator = ( const CSphLowercaser & rhs ); + +public: + inline int ToLower ( int iCode ) const + { + if ( iCode<0 || iCode>=MAX_CODE ) + return iCode; + register int * pChunk = m_pChunk [ iCode >> CHUNK_BITS ]; + if ( pChunk ) + return pChunk [ iCode & CHUNK_MASK ]; + return 0; + } + +protected: + static const int CHUNK_COUNT = 0x300; + static const int CHUNK_BITS = 8; + + static const int CHUNK_SIZE = 1 << CHUNK_BITS; + static const int CHUNK_MASK = CHUNK_SIZE - 1; + static const int MAX_CODE = CHUNK_COUNT * CHUNK_SIZE; + + int m_iChunks; ///< how much chunks are actually allocated + int * m_pData; ///< chunks themselves + int * m_pChunk [ CHUNK_COUNT ]; ///< pointers to non-empty chunks +}; + +///////////////////////////////////////////////////////////////////////////// + +struct CSphSavedFile +{ + CSphString m_sFilename; + SphOffset_t m_uSize; + SphOffset_t m_uCTime; + SphOffset_t m_uMTime; + DWORD m_uCRC32; + + CSphSavedFile (); +}; + + +struct CSphTokenizerSettings +{ + int m_iType; + CSphString m_sCaseFolding; + int m_iMinWordLen; + CSphString m_sSynonymsFile; + CSphString m_sBoundary; + CSphString m_sIgnoreChars; + int m_iNgramLen; + CSphString m_sNgramChars; + CSphString m_sBlendChars; + CSphString m_sBlendMode; + + //mmseg + int m_iDebug; //coreseek: used to mark is debug output tokens + CSphString m_sDictPath; //coreseek: where to find segmentor's dict. + + CSphTokenizerSettings (); +}; + +struct CSphMultiformContainer; + +/// generic tokenizer +class ISphTokenizer +{ +public: + /// trivial ctor + ISphTokenizer(); + + /// trivial dtor + virtual ~ISphTokenizer () {} + +public: + /// set new translation table + /// returns true on success, false on failure + virtual bool SetCaseFolding ( const char * sConfig, CSphString & sError ); + + /// add additional range to translation table + virtual void AddCaseFolding ( CSphRemapRange & tRange ); + + /// add special chars to translation table (SBCS only, for now) + /// updates lowercaser so that these remap to -1 + virtual void AddSpecials ( const char * sSpecials ); + + /// set ignored characters + virtual bool SetIgnoreChars ( const char * sIgnored, CSphString & sError ); + + /// set n-gram characters (for CJK n-gram indexing) + virtual bool SetNgramChars ( const char *, CSphString & ) { return true; } + + /// set n-gram length (for CJK n-gram indexing) + virtual void SetNgramLen ( int ) {} + + /// load synonyms list + virtual bool LoadSynonyms ( const char * sFilename, CSphString & sError ) = 0; + + /// set phrase boundary chars + virtual bool SetBoundary ( const char * sConfig, CSphString & sError ); + + /// set blended characters + virtual bool SetBlendChars ( const char * sConfig, CSphString & sError ); + + /// set blended tokens processing mode + virtual bool SetBlendMode ( const char * sMode, CSphString & sError ); + + /// setup tokenizer using given settings + virtual void Setup ( const CSphTokenizerSettings & tSettings ); + + /// create a tokenizer using the given settings + static ISphTokenizer * Create ( const CSphTokenizerSettings & tSettings, CSphString & sError ); + + /// create a token filter + static ISphTokenizer * CreateTokenFilter ( ISphTokenizer * pTokenizer, const CSphMultiformContainer * pContainer ); + + /// save tokenizer settings to a stream + virtual const CSphTokenizerSettings & GetSettings () const { return m_tSettings; } + + /// get synonym file info + virtual const CSphSavedFile & GetSynFileInfo () const { return m_tSynFileInfo; } + + /// mark as debug tokenizer's output --coreseek -mmseg + virtual int DumpToken () { return m_tSettings.m_iDebug; } + +public: + /// pass next buffer + virtual void SetBuffer ( BYTE * sBuffer, int iLength ) = 0; + + /// get next token + virtual BYTE * GetToken () = 0; + + /// calc codepoint length + virtual int GetCodepointLength ( int iCode ) const = 0; + + /// handle tokens less than min_word_len if they match filter + virtual void EnableQueryParserMode ( bool bEnable ) + { + m_bQueryMode = bEnable; + m_bShortTokenFilter = bEnable; + m_uBlendVariants = BLEND_TRIM_NONE; + } + + /// enable indexing-time sentence boundary detection, and paragraph indexing + virtual bool EnableSentenceIndexing ( CSphString & sError ); + + /// enable zone indexing + virtual bool EnableZoneIndexing ( CSphString & sError ); + + /// enable tokenized multiform tracking + virtual void EnableTokenizedMultiformTracking () {} + + /// get last token length, in codepoints + virtual int GetLastTokenLen () const { return m_iLastTokenLen; } + + /// get last token boundary flag (true if there was a boundary before the token) + virtual bool GetBoundary () { return m_bTokenBoundary; } + + /// get byte offset of the last boundary character + virtual int GetBoundaryOffset () { return m_iBoundaryOffset; } + + /// was last token a special one? + virtual bool WasTokenSpecial () { return m_bWasSpecial; } + + /// get amount of overshort keywords skipped before this token + virtual int GetOvershortCount () { return m_iOvershortCount; } + + /// get original tokenized multiform (if any); NULL means there was none + virtual BYTE * GetTokenizedMultiform () { return NULL; } + + virtual bool TokenIsBlended () { return m_bBlended; } + virtual bool TokenIsBlendedPart () { return m_bBlendedPart; } + virtual int SkipBlended () { return 0; } + +public: + /// spawn a clone of my own + virtual ISphTokenizer * Clone ( bool bEscaped ) const = 0; + + /// SBCS or UTF-8? + virtual bool IsUtf8 () const = 0; + + /// start buffer point of last token + virtual const char * GetTokenStart () const = 0; + + /// end buffer point of last token (exclusive, ie. *GetTokenEnd() is already NOT part of a token!) + virtual const char * GetTokenEnd () const = 0; + + /// current buffer ptr + virtual const char * GetBufferPtr () const = 0; + + /// buffer end + virtual const char * GetBufferEnd () const = 0; + + /// set new buffer ptr (must be within current bounds) + virtual void SetBufferPtr ( const char * sNewPtr ) = 0; + +public: //mmseg + virtual const BYTE* GetThesaurus(BYTE * , int ) { return NULL; } + // get settings hash + uint64_t GetSettingsFNV () const { return m_tLC.GetFNV(); } + +protected: + virtual bool RemapCharacters ( const char * sConfig, DWORD uFlags, const char * sSource, bool bCanRemap, CSphString & sError ); + virtual bool AddSpecialsSPZ ( const char * sSpecials, const char * sDirective, CSphString & sError ); + +protected: + static const int MAX_SYNONYM_LEN = 1024; ///< max synonyms map-from length, bytes + + static const BYTE BLEND_TRIM_NONE = 1; + static const BYTE BLEND_TRIM_HEAD = 2; + static const BYTE BLEND_TRIM_TAIL = 4; + static const BYTE BLEND_TRIM_BOTH = 8; + + CSphLowercaser m_tLC; ///< my lowercaser + int m_iLastTokenLen; ///< last token length, in codepoints + int m_iLastTokenBufferLen; ///< the buffer length -- coreseek; use in mmseg patch. + bool m_bTokenBoundary; ///< last token boundary flag (true after boundary codepoint followed by separator) + bool m_bBoundary; ///< boundary flag (true immediately after boundary codepoint) + int m_iBoundaryOffset; ///< boundary character offset (in bytes) + bool m_bWasSpecial; ///< special token flag + bool m_bEscaped; ///< backslash handling flag + int m_iOvershortCount; ///< skipped overshort tokens count + + bool m_bBlended; ///< whether last token (as in just returned from GetToken()) was blended + bool m_bNonBlended; ///< internal, whether there were any normal chars in that blended token + bool m_bBlendedPart; ///< whether last token is a normal subtoken of a blended token + bool m_bBlendAdd; ///< whether we have more pending blended variants (of current accumulator) to return + BYTE m_uBlendVariants; ///< mask of blended variants as requested by blend_mode (see BLEND_TRIM_xxx flags) + BYTE m_uBlendVariantsPending; ///< mask of pending blended variants (we clear bits as we return variants) + bool m_bBlendSkipPure; ///< skip purely blended tokens + + bool m_bShortTokenFilter; ///< short token filter flag + bool m_bQueryMode; ///< is this indexing time or searching time? + bool m_bDetectSentences; ///< should we detect sentence boundaries? + + CSphTokenizerSettings m_tSettings; ///< tokenizer settings + CSphSavedFile m_tSynFileInfo; ///< synonyms file info + +public: + bool m_bPhrase; +}; + +/// parse charset table +bool sphParseCharset ( const char * sCharset, CSphVector & dRemaps ); + +/// create SBCS tokenizer +ISphTokenizer * sphCreateSBCSTokenizer (); + +/// create UTF-8 tokenizer +ISphTokenizer * sphCreateUTF8Tokenizer (); + +/// create UTF-8 tokenizer with n-grams support (for CJK n-gram indexing) +ISphTokenizer * sphCreateUTF8NgramTokenizer (); + +///////////////////////////////////////////////////////////////////////////// +// DICTIONARIES +///////////////////////////////////////////////////////////////////////////// + +struct CSphDictSettings +{ + CSphString m_sMorphology; + CSphString m_sStopwords; + CSphString m_sWordforms; + int m_iMinStemmingLen; + bool m_bWordDict; + bool m_bCrc32; + + CSphDictSettings () + : m_iMinStemmingLen ( 1 ) + , m_bWordDict ( false ) + , m_bCrc32 ( !USE_64BIT ) + {} +}; + + +/// abstract word dictionary interface +struct CSphWordHit; +struct CSphDict +{ + /// virtualizing dtor + virtual ~CSphDict () {} + + /// get word ID by word, "text" version + /// may apply stemming and modify word inplace + /// returns 0 for stopwords + virtual SphWordID_t GetWordID ( BYTE * pWord ) = 0; + + /// get word ID by word, "text" version + /// may apply stemming and modify word inplace + /// accepts words with already prepended MAGIC_WORD_HEAD + /// appends MAGIC_WORD_TAIL + /// returns 0 for stopwords + virtual SphWordID_t GetWordIDWithMarkers ( BYTE * pWord ) { return GetWordID ( pWord ); } + + /// get word ID by word, "text" version + /// does NOT apply stemming + /// accepts words with already prepended MAGIC_WORD_HEAD_NONSTEMMED + /// returns 0 for stopwords + virtual SphWordID_t GetWordIDNonStemmed ( BYTE * pWord ) { return GetWordID ( pWord ); } + + /// get word ID by word, "binary" version + /// only used with prefix/infix indexing + /// must not apply stemming and modify anything + /// filters stopwords on request + virtual SphWordID_t GetWordID ( const BYTE * pWord, int iLen, bool bFilterStops ) = 0; + + /// apply stemmers to the given word + virtual void ApplyStemmers ( BYTE * ) {} + + /// load stopwords from given files + virtual void LoadStopwords ( const char * sFiles, ISphTokenizer * pTokenizer ) = 0; + + /// load wordforms from a given file + virtual bool LoadWordforms ( const char * sFile, ISphTokenizer * pTokenizer, const char * sIndex ) = 0; + + /// set morphology + virtual bool SetMorphology ( const char * szMorph, bool bUseUTF8, CSphString & sError ) = 0; + + virtual bool HasMorphology () const { return false; } + + /// setup dictionary using settings + virtual void Setup ( const CSphDictSettings & tSettings ) = 0; + + /// get dictionary settings + virtual const CSphDictSettings & GetSettings () const = 0; + + /// stopwords file infos + virtual const CSphVector & GetStopwordsFileInfos () = 0; + + /// wordforms file infos + virtual const CSphSavedFile & GetWordformsFileInfo () = 0; + + /// get multiwordforms + virtual const CSphMultiformContainer * GetMultiWordforms () const = 0; + + /// check what given word is stopword + virtual bool IsStopWord ( const BYTE * pWord ) const = 0; + +public: + /// enable actually collecting keywords (needed for stopwords/wordforms loading) + virtual void HitblockBegin () {} + + /// callback to let dictionary do hit block post-processing + virtual void HitblockPatch ( CSphWordHit *, int ) {} + + /// resolve temporary hit block wide wordid (!) back to keyword + virtual const char * HitblockGetKeyword ( SphWordID_t ) { return NULL; } + + /// check current memory usage + virtual int HitblockGetMemUse () { return 0; } + + /// hit block dismissed + virtual void HitblockReset () {} + +public: + /// begin creating dictionary file, setup any needed internal structures + virtual void DictBegin ( int iTmpDictFD, int iDictFD, int iDictLimit ); + + /// add next keyword entry to final dict + virtual void DictEntry ( SphWordID_t uWordID, BYTE * sKeyword, int iDocs, int iHits, SphOffset_t iDoclistOffset, SphOffset_t iDoclistLength ); + + /// flush last entry + virtual void DictEndEntries ( SphOffset_t iDoclistOffset ); + + /// end indexing, store dictionary and checkpoints + virtual bool DictEnd ( SphOffset_t * pCheckpointsPos, int * pCheckpointsCount, int iMemLimit, CSphString & sError ); + + /// check whether there were any errors during indexing + virtual bool DictIsError () const; + + /// make clone + virtual CSphDict * Clone () const { return NULL; } + + virtual bool HasState () const { return false; } +}; + + +/// CRC32/FNV64 dictionary factory +CSphDict * sphCreateDictionaryCRC ( const CSphDictSettings & tSettings, ISphTokenizer * pTokenizer, CSphString & sError, const char * sIndex ); + +/// keyword-storing dictionary factory +CSphDict * sphCreateDictionaryKeywords ( const CSphDictSettings & tSettings, ISphTokenizer * pTokenizer, CSphString & sError, const char * sIndex ); + +/// clear wordform cache +void sphShutdownWordforms (); + +///////////////////////////////////////////////////////////////////////////// +// DATASOURCES +///////////////////////////////////////////////////////////////////////////// + +/// hit position storage type +typedef DWORD Hitpos_t; + +/// empty hit value +#define EMPTY_HIT 0 + +/// hit processing tools +/// (because we now allow multiple actual formats within a single storage type!) +template < int FIELD_BITS > +class Hitman_c +{ +protected: + enum + { + POS_BITS = 31 - FIELD_BITS, + FIELD_OFF = 32 - FIELD_BITS, + FIELDEND_OFF = 31 - FIELD_BITS, + FIELDEND_MASK = (1UL << POS_BITS), + POS_MASK = (1UL << POS_BITS) - 1, + }; + +public: + static Hitpos_t Create ( int iField, int iPos ) + { + return ( iField << FIELD_OFF ) + ( iPos & POS_MASK ); + } + + static Hitpos_t Create ( int iField, int iPos, bool bEnd ) + { + return ( iField << FIELD_OFF ) + ( ((int)bEnd) << FIELDEND_OFF ) + ( iPos & POS_MASK ); + } + + static inline int GetField ( Hitpos_t uHitpos ) + { + return uHitpos >> FIELD_OFF; + } + + static inline int GetPos ( Hitpos_t uHitpos ) + { + return uHitpos & POS_MASK; + } + + static inline bool IsEnd ( Hitpos_t uHitpos ) + { + return ( uHitpos & FIELDEND_MASK )!=0; + } + + static inline DWORD GetLCS ( Hitpos_t uHitpos ) + { + return uHitpos & ~FIELDEND_MASK; + } + + static void AddPos ( Hitpos_t * pHitpos, int iAdd ) + { + // FIXME! add range checks (eg. so that 0:0-1 does not overflow) + *pHitpos += iAdd; + } + + static Hitpos_t CreateSum ( Hitpos_t uHitpos, int iAdd ) + { + // FIXME! add range checks (eg. so that 0:0-1 does not overflow) + return ( uHitpos+iAdd ) & ~FIELDEND_MASK; + } + + static void SetEndMarker ( Hitpos_t * pHitpos ) + { + *pHitpos |= FIELDEND_MASK; + } +}; + +/// hit info +struct CSphWordHit +{ + SphDocID_t m_iDocID; ///< document ID + SphWordID_t m_iWordID; ///< word ID in current dictionary + Hitpos_t m_iWordPos; ///< word position in current document +}; + + +/// attribute locator within the row +struct CSphAttrLocator +{ + // OPTIMIZE? try packing these + int m_iBitOffset; + int m_iBitCount; + bool m_bDynamic; + + CSphAttrLocator () + : m_iBitOffset ( -1 ) + , m_iBitCount ( -1 ) + , m_bDynamic ( false ) + {} + + inline bool IsBitfield () const + { + return ( m_iBitCount> ROWITEM_SHIFT; + + if ( tLoc.m_iBitCount==ROWITEM_BITS ) + return pRow[iItem]; + + if ( tLoc.m_iBitCount==2*ROWITEM_BITS ) // FIXME? write a generalized version, perhaps + return SphAttr_t ( pRow[iItem] ) + ( SphAttr_t ( pRow[iItem+1] ) << ROWITEM_BITS ); + + int iShift = tLoc.m_iBitOffset & ( ( 1 << ROWITEM_SHIFT )-1 ); + return ( pRow[iItem] >> iShift ) & ( ( 1UL << tLoc.m_iBitCount )-1 ); +} + + +/// setter +inline void sphSetRowAttr ( CSphRowitem * pRow, const CSphAttrLocator & tLoc, SphAttr_t uValue ) +{ + assert(pRow); + int iItem = tLoc.m_iBitOffset >> ROWITEM_SHIFT; + if ( tLoc.m_iBitCount==2*ROWITEM_BITS ) + { + // FIXME? write a generalized version, perhaps + pRow[iItem] = CSphRowitem ( uValue & ( ( SphAttr_t(1) << ROWITEM_BITS )-1 ) ); + pRow[iItem+1] = CSphRowitem ( uValue >> ROWITEM_BITS ); + + } else if ( tLoc.m_iBitCount==ROWITEM_BITS ) + { + pRow[iItem] = CSphRowitem ( uValue ); + + } else + { + int iShift = tLoc.m_iBitOffset & ( ( 1 << ROWITEM_SHIFT )-1); + CSphRowitem uMask = ( ( 1UL << tLoc.m_iBitCount )-1 ) << iShift; + pRow[iItem] &= ~uMask; + pRow[iItem] |= ( uMask & ( uValue << iShift ) ); + } +} + + +/// pack length into row storage (22 bits max) +/// returns number of bytes used +inline int sphPackStrlen ( BYTE * pRow, int iLen ) +{ + assert ( iLen>=0 && iLen<0x400000 ); + if ( iLen<0x80 ) + { + pRow[0] = BYTE(iLen); + return 1; + } else if ( iLen<0x4000 ) + { + pRow[0] = BYTE ( ( iLen>>8 ) | 0x80 ); + pRow[1] = BYTE ( iLen ); + return 2; + } else + { + pRow[0] = BYTE ( ( iLen>>16 ) | 0xc0 ); + pRow[1] = BYTE ( iLen>>8 ); + pRow[2] = BYTE ( iLen ); + return 3; + } +} + + +/// unpack string attr from row storage (22 bits length max) +/// returns unpacked length; stores pointer to string data if required +inline int sphUnpackStr ( const BYTE * pRow, const BYTE ** ppStr ) +{ + int v = *pRow++; + if ( v & 0x80 ) + { + if ( v & 0x40 ) + { + v = ( int ( v & 0x3f )<<16 ) + ( int ( *pRow++ )<<8 ); + v += ( *pRow++ ); // MUST be separate statement; cf. sequence point + } else + { + v = ( int ( v & 0x3f )<<8 ) + ( *pRow++ ); + } + } + if ( ppStr ) + *ppStr = pRow; + return v; +} + + +/// search query match (document info plus weight/tag) +class CSphMatch +{ +public: + SphDocID_t m_iDocID; ///< document ID + const CSphRowitem * m_pStatic; ///< static part (stored in and owned by the index) + CSphRowitem * m_pDynamic; ///< dynamic part (computed per query; owned by the match) + int m_iWeight; ///< my computed weight + int m_iTag; ///< my index tag + +public: + /// ctor. clears everything + CSphMatch () + : m_iDocID ( 0 ) + , m_pStatic ( NULL ) + , m_pDynamic ( NULL ) + , m_iWeight ( 0 ) + , m_iTag ( 0 ) + { + } + + /// copy ctor. just in case + CSphMatch ( const CSphMatch & rhs ) + : m_pStatic ( 0 ) + , m_pDynamic ( NULL ) + { + *this = rhs; + } + + /// dtor. frees everything + ~CSphMatch () + { +#ifndef NDEBUG + if ( m_pDynamic ) + m_pDynamic--; +#endif + SafeDeleteArray ( m_pDynamic ); + } + + /// reset + void Reset ( int iDynamic ) + { + // check that we're either initializing a new one, or NOT changing the current size + assert ( iDynamic>=0 ); + assert ( !m_pDynamic || iDynamic==(int)m_pDynamic[-1] ); + + m_iDocID = 0; + if ( !m_pDynamic && iDynamic ) + { +#ifndef NDEBUG + m_pDynamic = new CSphRowitem [ iDynamic+1 ]; + *m_pDynamic++ = iDynamic; +#else + m_pDynamic = new CSphRowitem [ iDynamic ]; +#endif + } + } + +public: + /// assignment + void Clone ( const CSphMatch & rhs, int iDynamic ) + { + // check that we're either initializing a new one, or NOT changing the current size + assert ( iDynamic>=0 ); + assert ( !m_pDynamic || iDynamic==(int)m_pDynamic[-1] ); + + m_iDocID = rhs.m_iDocID; + m_iWeight = rhs.m_iWeight; + m_pStatic = rhs.m_pStatic; + m_iTag = rhs.m_iTag; + + if ( iDynamic ) + { + if ( !m_pDynamic ) + { +#ifndef NDEBUG + m_pDynamic = new CSphRowitem [ iDynamic+1 ]; + *m_pDynamic++ = iDynamic; +#else + m_pDynamic = new CSphRowitem [ iDynamic ]; +#endif + } + + assert ( rhs.m_pDynamic ); + assert ( m_pDynamic[-1]==rhs.m_pDynamic[-1] ); // ensure we're not changing X to Y + memcpy ( m_pDynamic, rhs.m_pDynamic, iDynamic*sizeof(CSphRowitem) ); + } + } + +public: + /// integer getter + SphAttr_t GetAttr ( const CSphAttrLocator & tLoc ) const + { + // m_pRowpart[tLoc.m_bDynamic] is 30% faster on MSVC 2005 + // same time on gcc 4.x though, ~1 msec per 1M calls, so lets avoid the hassle for now + if ( tLoc.m_iBitOffset>=0 ) + return sphGetRowAttr ( tLoc.m_bDynamic ? m_pDynamic : m_pStatic, tLoc ); + if ( tLoc.IsID() ) + return m_iDocID; + assert ( false && "Unknown negative-bitoffset locator" ); + return 0; + } + + /// float getter + float GetAttrFloat ( const CSphAttrLocator & tLoc ) const + { + return sphDW2F ( (DWORD)sphGetRowAttr ( tLoc.m_bDynamic ? m_pDynamic : m_pStatic, tLoc ) ); + }; + + /// integer setter + void SetAttr ( const CSphAttrLocator & tLoc, SphAttr_t uValue ) + { + if ( tLoc.IsID() ) + { + // m_iDocID = uValue; + return; + } + assert ( tLoc.m_bDynamic ); + assert ( tLoc.GetMaxRowitem() < (int)m_pDynamic[-1] ); + sphSetRowAttr ( m_pDynamic, tLoc, uValue ); + } + + /// float setter + void SetAttrFloat ( const CSphAttrLocator & tLoc, float fValue ) + { + assert ( tLoc.m_bDynamic ); + assert ( tLoc.GetMaxRowitem() < (int)m_pDynamic[-1] ); + sphSetRowAttr ( m_pDynamic, tLoc, sphF2DW ( fValue ) ); + } + + /// MVA getter + const DWORD * GetAttrMVA ( const CSphAttrLocator & tLoc, const DWORD * pPool ) const; + +private: + /// "manually" prevent copying + const CSphMatch & operator = ( const CSphMatch & ) + { + assert ( 0 && "internal error (CSphMatch::operator= called)" ); + return *this; + } +}; + + +/// specialized swapper +inline void Swap ( CSphMatch & a, CSphMatch & b ) +{ + Swap ( a.m_iDocID, b.m_iDocID ); + Swap ( a.m_pStatic, b.m_pStatic ); + Swap ( a.m_pDynamic, b.m_pDynamic ); + Swap ( a.m_iWeight, b.m_iWeight ); + Swap ( a.m_iTag, b.m_iTag ); +} + + +/// source statistics +struct CSphSourceStats +{ + int m_iTotalDocuments; ///< how much documents + int64_t m_iTotalBytes; ///< how much bytes + + /// ctor + CSphSourceStats () + { + Reset (); + } + + /// reset + void Reset () + { + m_iTotalDocuments = 0; + m_iTotalBytes = 0; + } +}; + + +/// known multi-valued attr sources +enum ESphAttrSrc +{ + SPH_ATTRSRC_NONE = 0, ///< not multi-valued + SPH_ATTRSRC_FIELD = 1, ///< get attr values from text field + SPH_ATTRSRC_QUERY = 2, ///< get attr values from SQL query + SPH_ATTRSRC_RANGEDQUERY = 3 ///< get attr values from ranged SQL query +}; + + +/// wordpart processing type +enum ESphWordpart +{ + SPH_WORDPART_WHOLE = 0, ///< whole-word + SPH_WORDPART_PREFIX = 1, ///< prefix + SPH_WORDPART_INFIX = 2 ///< infix +}; + + +/// column unpack format +enum ESphUnpackFormat +{ + SPH_UNPACK_NONE = 0, + SPH_UNPACK_ZLIB = 1, + SPH_UNPACK_MYSQL_COMPRESS = 2 +}; + + +/// aggregate function to apply +enum ESphAggrFunc +{ + SPH_AGGR_NONE, + SPH_AGGR_AVG, + SPH_AGGR_MIN, + SPH_AGGR_MAX, + SPH_AGGR_SUM +}; + + +/// column evaluation stage +enum ESphEvalStage +{ + SPH_EVAL_STATIC = 0, ///< static data, no real evaluation needed + SPH_EVAL_OVERRIDE, ///< static but possibly overridden + SPH_EVAL_PREFILTER, ///< expression needed for full-text candidate matches filtering + SPH_EVAL_PRESORT, ///< expression needed for final matches sorting + SPH_EVAL_SORTER, ///< expression evaluated by sorter object + SPH_EVAL_FINAL ///< expression not (!) used in filters/sorting; can be postponed until final result set cooking +}; + + +/// source column info +struct CSphColumnInfo +{ + CSphString m_sName; ///< column name + +#if USE_PYTHON_CASE_SENSIVE_ATTR + CSphString m_sNameExactly; ///< column name --by coreseek, the exactly name +#endif + + ESphAttr m_eAttrType; ///< attribute type + ESphWordpart m_eWordpart; ///< wordpart processing type + bool m_bIndexed; ///< whether to index this column as fulltext field too + + int m_iIndex; ///< index into source result set (-1 for joined fields) + int m_iMVAIndex; ///< index the mva indexer, for faster reassign values. -pysource + + CSphAttrLocator m_tLocator; ///< attribute locator in the row + + ESphAttrSrc m_eSrc; ///< attr source (for multi-valued attrs only) + CSphString m_sQuery; ///< query to retrieve values (for multi-valued attrs only) + CSphString m_sQueryRange; ///< query to retrieve range (for multi-valued attrs only) + + CSphRefcountedPtr m_pExpr; ///< evaluator for expression items + ESphAggrFunc m_eAggrFunc; ///< aggregate function on top of expression (for GROUP BY) + ESphEvalStage m_eStage; ///< column evaluation stage (who and how computes this column) + bool m_bPayload; + bool m_bFilename; ///< column is a file name + + /// handy ctor + CSphColumnInfo ( const char * sName=NULL, ESphAttr eType=SPH_ATTR_NONE ) + : m_sName ( sName ) +#if USE_PYTHON_CASE_SENSIVE_ATTR + , m_sNameExactly ( sName ) +#endif + , m_eAttrType ( eType ) + , m_eWordpart ( SPH_WORDPART_WHOLE ) + , m_bIndexed ( false ) + , m_iIndex ( -1 ) + , m_iMVAIndex( -1 ) + , m_eSrc ( SPH_ATTRSRC_NONE ) + , m_pExpr ( NULL ) + , m_eAggrFunc ( SPH_AGGR_NONE ) + , m_eStage ( SPH_EVAL_STATIC ) + , m_bPayload ( false ) + , m_bFilename ( false ) + { +#if USE_PYTHON_CASE_SENSIVE_ATTR + m_sNameExactly = m_sName; +#endif + m_sName.ToLower (); + } + + /// equality comparison checks name, type, and locator + bool operator == ( const CSphColumnInfo & rhs ) const + { + return m_sName==rhs.m_sName + && m_eAttrType==rhs.m_eAttrType + && m_tLocator.m_iBitCount==rhs.m_tLocator.m_iBitCount + && m_tLocator.m_iBitOffset==rhs.m_tLocator.m_iBitOffset + && m_tLocator.m_bDynamic==rhs.m_tLocator.m_bDynamic; + } +}; + +/// source schema +struct CSphSchema +{ +public: + typedef SphDarts::DoubleArray::result_pair_type result_pair_type; + + CSphString m_sName; ///< my human-readable name + CSphVector m_dFields; ///< my fulltext-searchable fields + int m_iBaseFields; ///< how much fields are base, how much are additional (only affects indexer) + + SphDarts::DoubleArray* m_pfield_cache; ///< the field cache. + void* m_pfield_cache_owner; +public: + + /// ctor + explicit CSphSchema ( const char * sName="(nameless)" ) : m_sName ( sName ), m_iBaseFields ( 0 ), m_iStaticSize ( 0 ) { + m_pfield_cache = NULL; + m_pfield_cache_owner = this; //avoid multi release when assign. + } + + ~CSphSchema() { + if(m_pfield_cache && m_pfield_cache_owner == this) { + delete m_pfield_cache; + m_pfield_cache = NULL; + } + } + /// build the access cache + int BuildFieldIndexCache(); + /// get field index by name + /// returns -1 if not found + int GetFieldIndex ( const char * sName ) const; + + /// get attribute index by name + /// returns -1 if not found + int GetAttrIndex ( const char * sName ) const; + + /// checks if two schemas fully match (ie. fields names, attr names, types and locators are the same) + /// describe mismatch (if any) to sError + bool CompareTo ( const CSphSchema & rhs, CSphString & sError ) const; + + /// reset fields and attrs + void Reset (); + + /// reset attrs only + void ResetAttrs (); + + /// get row size (static+dynamic combined) + int GetRowSize () const { return m_iStaticSize + m_dDynamicUsed.GetLength(); } + + /// get static row part size + int GetStaticSize () const { return m_iStaticSize; } + + /// get dynamic row part size + int GetDynamicSize () const { return m_dDynamicUsed.GetLength(); } + + /// get attrs count + int GetAttrsCount () const { return m_dAttrs.GetLength(); } + + /// get attr by index + const CSphColumnInfo & GetAttr ( int iIndex ) const { return m_dAttrs[iIndex]; } + + /// get attr by name + const CSphColumnInfo * GetAttr ( const char * sName ) const; + + /// add attr + void AddAttr ( const CSphColumnInfo & tAttr, bool bDynamic ); + + /// remove static attr (but do NOT recompute locations; for overrides) + /// WARNING, THIS IS A HACK THAT WILL LIKELY BREAK THE SCHEMA, DO NOT USE THIS UNLESS ABSOLUTELY SURE! + void RemoveAttr ( int iIndex ); + +protected: + CSphVector m_dAttrs; ///< all my attributes + CSphVector m_dStaticUsed; ///< static row part map (amount of used bits in each rowitem) + CSphVector m_dDynamicUsed; ///< dynamic row part map + int m_iStaticSize; ///< static row size (can be different from m_dStaticUsed.GetLength() because of gaps) +}; + + +/// HTML stripper +class CSphHTMLStripper +{ +public: + explicit CSphHTMLStripper ( bool bDefaultTags ); + bool SetIndexedAttrs ( const char * sConfig, CSphString & sError ); + bool SetRemovedElements ( const char * sConfig, CSphString & sError ); + bool SetZones ( const char * sZones, CSphString & sError ); + void EnableParagraphs (); + void Strip ( BYTE * sData ) const; + +public: + + struct StripperTag_t + { + CSphString m_sTag; ///< tag name + int m_iTagLen; ///< tag name length + bool m_bInline; ///< whether this tag is inline + bool m_bIndexAttrs; ///< whether to index attrs + bool m_bRemove; ///< whether to remove contents + bool m_bPara; ///< whether to mark a paragraph boundary + bool m_bZone; ///< whether to mark a zone boundary + bool m_bZonePrefix; ///< whether the zone name is a full name or a prefix + CSphVector m_dAttrs; ///< attr names to index + + StripperTag_t () + : m_iTagLen ( 0 ) + , m_bInline ( false ) + , m_bIndexAttrs ( false ) + , m_bRemove ( false ) + , m_bPara ( false ) + , m_bZone ( false ) + , m_bZonePrefix ( false ) + {} + + inline bool operator < ( const StripperTag_t & rhs ) const + { + return strcmp ( m_sTag.cstr(), rhs.m_sTag.cstr() )<0; + } + }; + + /// finds appropriate tag and zone name ( tags zone name could be prefix only ) + /// advances source to the end of the tag + const BYTE * FindTag ( const BYTE * sSrc, const StripperTag_t ** ppTag, const BYTE ** ppZoneName, int * pZoneNameLen ) const; + bool IsValidTagStart ( int iCh ) const; + +protected: + static const int MAX_CHAR_INDEX = 28; ///< max valid char index (a-z, underscore, colon) + + CSphVector m_dTags; ///< known tags to index attrs and/or to remove contents + int m_dStart[MAX_CHAR_INDEX]; ///< maps index of the first tag name char to start offset in m_dTags + int m_dEnd[MAX_CHAR_INDEX]; ///< maps index of the first tag name char to end offset in m_dTags + +protected: + int GetCharIndex ( int iCh ) const; ///< calcs index by raw char + void UpdateTags (); ///< sorts tags, updates internal helpers +}; + + +/// indexing-related source settings +/// NOTE, newly added fields should be synced with CSphSource::Setup() +struct CSphSourceSettings +{ + int m_iMinPrefixLen; ///< min indexable prefix (0 means don't index prefixes) + int m_iMinInfixLen; ///< min indexable infix length (0 means don't index infixes) + int m_iBoundaryStep; ///< additional boundary word position increment + bool m_bIndexExactWords; ///< exact (non-stemmed) word indexing flag + int m_iOvershortStep; ///< position step on overshort token (default is 1) + int m_iStopwordStep; ///< position step on stopword token (default is 1) + bool m_bIndexSP; ///< whether to index sentence and paragraph delimiters + int m_bDebugDump; ///< mmseg charset debug output feature + + CSphVector m_dPrefixFields; ///< list of prefix fields + CSphVector m_dInfixFields; ///< list of infix fields + + explicit CSphSourceSettings (); + ESphWordpart GetWordpart ( const char * sField, bool bWordDict ); +}; + + +/// hit vector interface +/// because specific position type might vary (dword, qword, etc) +/// but we don't want to template and instantiate everything because of that +class ISphHits +{ +public: + int Length () const + { + return m_dData.GetLength(); + } + + const CSphWordHit * First () const + { + return m_dData.Begin(); + } + + const CSphWordHit * Last () const + { + return &m_dData.Last(); + } + + void AddHit ( SphDocID_t uDocid, SphWordID_t uWordid, Hitpos_t uPos ) + { + if ( uWordid ) + { + CSphWordHit & tHit = m_dData.Add(); + tHit.m_iDocID = uDocid; + tHit.m_iWordID = uWordid; + tHit.m_iWordPos = uPos; + } + } + +public: + CSphVector m_dData; +}; + + +/// generic data source +class CSphSource : public CSphSourceSettings +{ +public: + CSphMatch m_tDocInfo; ///< current document info + CSphVector m_dStrAttrs; ///< current document string attrs + +public: + /// ctor + explicit CSphSource ( const char * sName ); + + /// dtor + virtual ~CSphSource (); + + /// set dictionary + void SetDict ( CSphDict * dict ); + + /// set HTML stripping mode + /// + /// sExtractAttrs defines what attributes to store. format is "img=alt; a=alt,title". + /// empty string means to strip all tags; NULL means to disable stripping. + /// + /// sRemoveElements defines what elements to cleanup. format is "style, script" + /// + /// on failure, returns false and fills sError + bool SetStripHTML ( const char * sExtractAttrs, const char * sRemoveElements, bool bDetectParagraphs, const char * sZones, CSphString & sError ); + + /// set tokenizer + void SetTokenizer ( ISphTokenizer * pTokenizer ); + + /// set rows dump file + virtual void SetDumpRows ( FILE * ) {} + + /// get stats + virtual const CSphSourceStats & GetStats (); + + /// updates schema fields and attributes + /// updates pInfo if it's empty; checks for match if it's not + /// must be called after IterateStart(); will always fail otherwise + virtual bool UpdateSchema ( CSphSchema * pInfo, CSphString & sError ); + + /// setup misc indexing settings (prefix/infix/exact-word indexing, position steps) + void Setup ( const CSphSourceSettings & tSettings ); + +public: + /// connect to the source (eg. to the database) + /// connection settings are specific for each source type and as such + /// are implemented in specific descendants + virtual bool Connect ( CSphString & sError ) = 0; + + /// disconnect from the source + virtual void Disconnect () = 0; + + /// check if there are any attributes configured + /// note that there might be NO actual attributes in the case if configured + /// ones do not match those actually returned by the source + virtual bool HasAttrsConfigured () = 0; + + /// check if there are any joined fields + virtual bool HasJoinedFields () { return false; } + + /// begin indexing this source + /// to be implemented by descendants + virtual bool IterateStart ( CSphString & sError ) = 0; + + /// get next document + /// to be implemented by descendants + /// returns false on error + /// returns true and fills m_tDocInfo on success + /// returns true and sets m_tDocInfo.m_iDocID to 0 on eof + virtual bool IterateDocument ( CSphString & sError ) = 0; + + /// get next hits chunk for current document + /// to be implemented by descendants + /// returns NULL when there are no more hits + /// returns pointer to hit vector (with at most MAX_SOURCE_HITS) on success + /// fills out-string with error message on failure + virtual ISphHits * IterateHits ( CSphString & sError ) = 0; + + /// get joined hits from joined fields (w/o attached docinfos) + /// returns false and fills out-string with error message on failure + /// returns true and sets m_tDocInfo.m_uDocID to 0 on eof + /// returns true and sets m_tDocInfo.m_uDocID to non-0 on success + virtual ISphHits * IterateJoinedHits ( CSphString & sError ); + + /// begin iterating values of out-of-document multi-valued attribute iAttr + /// will fail if iAttr is out of range, or is not multi-valued + /// can also fail if configured settings are invalid (eg. SQL query can not be executed) + virtual bool IterateMultivaluedStart ( int iAttr, CSphString & sError ) = 0; + + /// get next multi-valued (id,attr-value) tuple to m_tDocInfo + virtual bool IterateMultivaluedNext () = 0; + + /// begin iterating values of multi-valued attribute iAttr stored in a field + /// will fail if iAttr is out of range, or is not multi-valued + virtual bool IterateFieldMVAStart ( int iAttr, CSphString & sError ) = 0; + + /// get next multi-valued (id,attr-value) tuple to m_tDocInfo + virtual bool IterateFieldMVANext () = 0; + + /// begin iterating kill list + virtual bool IterateKillListStart ( CSphString & sError ) = 0; + + /// get next kill list doc id + virtual bool IterateKillListNext ( SphDocID_t & tDocId ) = 0; + + /// post-index callback + /// gets called when the indexing is succesfully (!) over + virtual void PostIndex () {} + +public: //append by -coreseek for -pysource. no NOT use this out side of pysource + virtual void AddHit ( SphDocID_t , SphWordID_t , Hitpos_t ) {} + +protected: + ISphTokenizer * m_pTokenizer; ///< my tokenizer + CSphDict * m_pDict; ///< my dict + + CSphSourceStats m_tStats; ///< my stats + CSphSchema m_tSchema; ///< my schema + + bool m_bStripHTML; ///< whether to strip HTML + CSphHTMLStripper * m_pStripper; ///< my HTML stripper + + int m_iNullIds; + int m_iMaxIds; + + SphDocID_t VerifyID ( SphDocID_t uID ); +}; + + +/// how to handle IO errors in file fields +enum ESphOnFileFieldError +{ + FFE_IGNORE_FIELD, + FFE_SKIP_DOCUMENT, + FFE_FAIL_INDEX +}; + + +/// generic document source +/// provides multi-field support and generic tokenizer +class CSphSource_Document : public CSphSource +{ +public: + /// ctor + explicit CSphSource_Document ( const char * sName ); + + /// dtor + virtual ~CSphSource_Document () { SafeDeleteArray ( m_pReadFileBuffer ); } + + /// my generic tokenizer + virtual bool IterateDocument ( CSphString & sError ); + virtual ISphHits * IterateHits ( CSphString & sError ); + virtual void BuildHits ( CSphString & sError, bool bSkipEndMarker ); //change to virtual -> pysource. + + virtual BYTE* GetField ( int iFieldIndex); // reused by -pysource + /// field data getter + /// to be implemented by descendants + virtual BYTE ** NextDocument ( CSphString & sError ) = 0; + + + virtual void SetDumpRows ( FILE * fpDumpRows ) { m_fpDumpRows = fpDumpRows; } + +protected: + void ParseFieldMVA ( CSphVector < CSphVector < DWORD > > & dFieldMVAs, int iFieldMVA, const char * szValue ); + bool CheckFileField ( const BYTE * sField ); + int LoadFileField ( BYTE ** ppField, CSphString & sError ); + void BuildSubstringHits ( SphDocID_t uDocid, bool bPayload, ESphWordpart eWordpart, bool bSkipEndMarker ); + void BuildRegularHits ( SphDocID_t uDocid, bool bPayload, bool bSkipEndMarker ); + +protected: + ISphHits m_tHits; ///< my hitvector + +protected: + char * m_pReadFileBuffer; + int m_iReadFileBufferSize; ///< size of read buffer for the 'sql_file_field' fields + int m_iMaxFileBufferSize; ///< max size of read buffer for the 'sql_file_field' fields + ESphOnFileFieldError m_eOnFileFieldError; + FILE * m_fpDumpRows; + +protected: + struct CSphBuildHitsState_t + { + bool m_bProcessingHits; + bool m_bDocumentDone; + + BYTE ** m_dFields; + + int m_iStartPos; + Hitpos_t m_iHitPos; + int m_iField; + int m_iStartField; + int m_iEndField; + + int m_iBuildLastStep; + + CSphBuildHitsState_t (); + }; + + CSphBuildHitsState_t m_tState; + int m_iMaxHits; +}; + +struct CSphUnpackInfo +{ + ESphUnpackFormat m_eFormat; + CSphString m_sName; +}; + +struct CSphJoinedField +{ + CSphString m_sName; + CSphString m_sQuery; + CSphString m_sRanged; + bool m_bPayload; +}; + + +/// generic SQL source params +struct CSphSourceParams_SQL +{ + // query params + CSphString m_sQuery; + CSphString m_sQueryRange; + CSphString m_sQueryKilllist; + int m_iRangeStep; + int m_iRefRangeStep; + bool m_bPrintQueries; + + CSphVector m_dQueryPre; + CSphVector m_dQueryPost; + CSphVector m_dQueryPostIndex; + CSphVector m_dAttrs; + CSphVector m_dFileFields; + + int m_iRangedThrottle; + int m_iMaxFileBufferSize; + ESphOnFileFieldError m_eOnFileFieldError; + + CSphVector m_dUnpack; + DWORD m_uUnpackMemoryLimit; + + CSphVector m_dJoinedFields; + + // connection params + CSphString m_sHost; + CSphString m_sUser; + CSphString m_sPass; + CSphString m_sDB; + int m_iPort; + + CSphSourceParams_SQL (); +}; + + +/// generic SQL source +/// multi-field plain-text documents fetched from given query +struct CSphSource_SQL : CSphSource_Document +{ + explicit CSphSource_SQL ( const char * sName ); + virtual ~CSphSource_SQL () {} + + bool Setup ( const CSphSourceParams_SQL & pParams ); + virtual bool Connect ( CSphString & sError ); + virtual void Disconnect (); + + virtual bool IterateStart ( CSphString & sError ); + virtual BYTE ** NextDocument ( CSphString & sError ); + virtual void PostIndex (); + + virtual bool HasAttrsConfigured () { return m_tParams.m_dAttrs.GetLength()!=0; } + virtual bool HasJoinedFields () { return m_tSchema.m_iBaseFields!=m_tSchema.m_dFields.GetLength(); } + + virtual ISphHits * IterateJoinedHits ( CSphString & sError ); + + virtual bool IterateMultivaluedStart ( int iAttr, CSphString & sError ); + virtual bool IterateMultivaluedNext (); + + virtual bool IterateFieldMVAStart ( int iAttr, CSphString & sError ); + virtual bool IterateFieldMVANext (); + + virtual bool IterateKillListStart ( CSphString & sError ); + virtual bool IterateKillListNext ( SphDocID_t & tDocId ); + +private: + bool m_bSqlConnected; ///< am i connected? + +protected: + CSphString m_sSqlDSN; + + BYTE * m_dFields [ SPH_MAX_FIELDS ]; + ESphUnpackFormat m_dUnpack [ SPH_MAX_FIELDS ]; + + SphDocID_t m_uMinID; ///< grand min ID + SphDocID_t m_uMaxID; ///< grand max ID + SphDocID_t m_uCurrentID; ///< current min ID + SphDocID_t m_uMaxFetchedID; ///< max actually fetched ID + int m_iMultiAttr; ///< multi-valued attr being currently fetched + int m_iSqlFields; ///< field count (for row dumper) + + int m_iFieldMVA; + int m_iFieldMVAIterator; + CSphVector < CSphVector > m_dFieldMVAs; + CSphVector < int > m_dAttrToFieldMVA; + + CSphSourceParams_SQL m_tParams; + + bool m_bCanUnpack; + bool m_bUnpackFailed; + bool m_bUnpackOverflow; + CSphVector m_dUnpackBuffers [ SPH_MAX_FIELDS ]; + + int m_iJoinedHitField; ///< currently pulling joined hits from this field (index into schema; -1 if not pulling) + SphDocID_t m_iJoinedHitID; ///< last document id + int m_iJoinedHitPos; ///< last hit position + + static const int MACRO_COUNT = 2; + static const char * const MACRO_VALUES [ MACRO_COUNT ]; + +protected: + bool SetupRanges ( const char * sRangeQuery, const char * sQuery, const char * sPrefix, CSphString & sError ); + bool RunQueryStep ( const char * sQuery, CSphString & sError ); + +protected: + virtual void SqlDismissResult () = 0; + virtual bool SqlQuery ( const char * sQuery ) = 0; + virtual bool SqlIsError () = 0; + virtual const char * SqlError () = 0; + virtual bool SqlConnect () = 0; + virtual void SqlDisconnect () = 0; + virtual int SqlNumFields() = 0; + virtual bool SqlFetchRow() = 0; + virtual DWORD SqlColumnLength ( int iIndex ) = 0; + virtual const char * SqlColumn ( int iIndex ) = 0; + virtual const char * SqlFieldName ( int iIndex ) = 0; + + const char * SqlUnpackColumn ( int iIndex, ESphUnpackFormat eFormat ); + void ReportUnpackError ( int iIndex, int iError ); +}; + + +#if USE_MYSQL +/// MySQL source params +struct CSphSourceParams_MySQL : CSphSourceParams_SQL +{ + CSphString m_sUsock; ///< UNIX socket + int m_iFlags; ///< connection flags + CSphString m_sSslKey; + CSphString m_sSslCert; + CSphString m_sSslCA; + + CSphSourceParams_MySQL (); ///< ctor. sets defaults +}; + + +/// MySQL source implementation +/// multi-field plain-text documents fetched from given query +struct CSphSource_MySQL : CSphSource_SQL +{ + explicit CSphSource_MySQL ( const char * sName ); + bool Setup ( const CSphSourceParams_MySQL & tParams ); + +protected: + MYSQL_RES * m_pMysqlResult; + MYSQL_FIELD * m_pMysqlFields; + MYSQL_ROW m_tMysqlRow; + MYSQL m_tMysqlDriver; + unsigned long * m_pMysqlLengths; + + CSphString m_sMysqlUsock; + int m_iMysqlConnectFlags; + CSphString m_sSslKey; + CSphString m_sSslCert; + CSphString m_sSslCA; + +protected: + virtual void SqlDismissResult (); + virtual bool SqlQuery ( const char * sQuery ); + virtual bool SqlIsError (); + virtual const char * SqlError (); + virtual bool SqlConnect (); + virtual void SqlDisconnect (); + virtual int SqlNumFields(); + virtual bool SqlFetchRow(); + virtual DWORD SqlColumnLength ( int iIndex ); + virtual const char * SqlColumn ( int iIndex ); + virtual const char * SqlFieldName ( int iIndex ); +}; +#endif // USE_MYSQL + + +#if USE_PGSQL +/// PgSQL specific source params +struct CSphSourceParams_PgSQL : CSphSourceParams_SQL +{ + CSphString m_sClientEncoding; + CSphSourceParams_PgSQL (); +}; + + +/// PgSQL source implementation +/// multi-field plain-text documents fetched from given query +struct CSphSource_PgSQL : CSphSource_SQL +{ + explicit CSphSource_PgSQL ( const char * sName ); + bool Setup ( const CSphSourceParams_PgSQL & pParams ); + virtual bool IterateStart ( CSphString & sError ); + +protected: + PGresult * m_pPgResult; ///< postgresql execution restult context + PGconn * m_tPgDriver; ///< postgresql connection context + + int m_iPgRows; ///< how much rows last step returned + int m_iPgRow; ///< current row (0 based, as in PQgetvalue) + + CSphString m_sPgClientEncoding; + CSphVector m_dIsColumnBool; + +protected: + virtual void SqlDismissResult (); + virtual bool SqlQuery ( const char * sQuery ); + virtual bool SqlIsError (); + virtual const char * SqlError (); + virtual bool SqlConnect (); + virtual void SqlDisconnect (); + virtual int SqlNumFields(); + virtual bool SqlFetchRow(); + virtual DWORD SqlColumnLength ( int iIndex ); + virtual const char * SqlColumn ( int iIndex ); + virtual const char * SqlFieldName ( int iIndex ); +}; +#endif // USE_PGSQL + +#if USE_ODBC +struct CSphSourceParams_ODBC: CSphSourceParams_SQL +{ + CSphString m_sOdbcDSN; ///< ODBC DSN + CSphString m_sColBuffers; ///< column buffer sizes (eg "col1=2M, col2=4M") + bool m_bWinAuth; ///< auth type (MS SQL only) + bool m_bUnicode; ///< whether to ask for Unicode or SBCS (C char) data (MS SQL only) + + CSphSourceParams_ODBC (); +}; + +/// ODBC source implementation +struct CSphSource_ODBC : CSphSource_SQL +{ + explicit CSphSource_ODBC ( const char * sName ); + bool Setup ( const CSphSourceParams_ODBC & tParams ); + +protected: + virtual void SqlDismissResult (); + virtual bool SqlQuery ( const char * sQuery ); + virtual bool SqlIsError (); + virtual const char * SqlError (); + virtual bool SqlConnect (); + virtual void SqlDisconnect (); + virtual int SqlNumFields(); + virtual bool SqlFetchRow(); + virtual const char * SqlColumn ( int iIndex ); + virtual const char * SqlFieldName ( int iIndex ); + virtual DWORD SqlColumnLength ( int iIndex ); + + virtual void OdbcPostConnect () {} + +protected: + CSphString m_sOdbcDSN; + bool m_bWinAuth; + bool m_bUnicode; + + SQLHENV m_hEnv; + SQLHDBC m_hDBC; + SQLHANDLE m_hStmt; + int m_nResultCols; + CSphString m_sError; + + struct QueryColumn_t + { + CSphVector m_dContents; + CSphVector m_dRaw; + CSphString m_sName; + SQLLEN m_iInd; + int m_iBufferSize; ///< size of m_dContents and m_dRaw buffers, in bytes + bool m_bUnicode; ///< whether this column needs UCS-2 to UTF-8 translation + bool m_bTruncated; ///< whether data was truncated when fetching rows + }; + + static const int DEFAULT_COL_SIZE = 1024; ///< default column buffer size + static const int VARCHAR_COL_SIZE = 1048576; ///< default column buffer size for VARCHAR columns + static const int MAX_COL_SIZE = 8*1048576; ///< hard limit on column buffer size + static const int WARN_ROW_SIZE = 32*1048576; ///< warning thresh (NOT a hard limit) on row buffer size + + CSphVector m_dColumns; + SmallStringHash_T m_hColBuffers; + + void GetSqlError ( SQLSMALLINT iHandleType, SQLHANDLE hHandle ); +}; + + +/// MS SQL source implemenation +struct CSphSource_MSSQL : public CSphSource_ODBC +{ + explicit CSphSource_MSSQL ( const char * sName ) : CSphSource_ODBC ( sName ) {} + virtual void OdbcPostConnect (); +}; +#endif // USE_ODBC + + +/// XML pipe source implementation +class CSphSource_XMLPipe : public CSphSource +{ +public: + CSphSource_XMLPipe ( BYTE * dInitialBuf, int iBufLen, const char * sName ); ///< ctor + ~CSphSource_XMLPipe (); ///< dtor + + bool Setup ( FILE * pPipe, const char * sCommand ); ///< memorize the command + virtual bool Connect ( CSphString & sError ); ///< run the command and open the pipe + virtual void Disconnect (); ///< close the pipe + + virtual bool IterateStart ( CSphString & ) { return true; } ///< Connect() starts getting documents automatically, so this one is empty + virtual bool IterateDocument ( CSphString & sError ); ///< parse incoming chunk and emit document + virtual ISphHits * IterateHits ( CSphString & sError ); ///< parse incoming chunk and emit some hits + + virtual bool HasAttrsConfigured () { return true; } ///< xmlpipe always has some attrs for now + virtual bool IterateMultivaluedStart ( int, CSphString & ) { return false; } ///< xmlpipe does not support multi-valued attrs for now + virtual bool IterateMultivaluedNext () { return false; } ///< xmlpipe does not support multi-valued attrs for now + virtual bool IterateFieldMVAStart ( int, CSphString & ) { return false; } + virtual bool IterateFieldMVANext () { return false; } + virtual bool IterateKillListStart ( CSphString & ) { return false; } + virtual bool IterateKillListNext ( SphDocID_t & ) { return false; } + + +private: + enum Tag_e + { + TAG_DOCUMENT = 0, + TAG_ID, + TAG_GROUP, + TAG_TITLE, + TAG_BODY + }; + +private: + CSphString m_sCommand; ///< my command + + Tag_e m_eTag; ///< what's our current tag + const char * m_pTag; ///< tag name + int m_iTagLength; ///< tag name length + int m_iBufferSize; ///< buffer size + bool m_bEOF; ///< EOF encountered + bool m_bWarned; ///< warned of buffer size already + int m_iInitialBufLen; ///< initial buffer len + + FILE * m_pPipe; ///< incoming stream + BYTE * m_sBuffer; ///< buffer + BYTE * m_pBuffer; ///< current buffer pos + BYTE * m_pBufferEnd; ///< buffered end pos + + int m_iWordPos; ///< current word position + + ISphHits m_tHits; ///< my hitvector + bool m_bHitsReady; + +private: + /// set current tag + void SetTag ( const char * sTag ); + + /// read in some more data + /// moves everything from current ptr (m_pBuffer) to the beginng + /// reads in as much data as possible to the end + /// returns false on EOF + bool UpdateBuffer (); + + /// skips whitespace + /// does buffer updates + /// returns false on EOF + bool SkipWhitespace (); + + /// check if what's at current pos is either opening/closing current tag (m_pTag) + /// return false on failure + bool CheckTag ( bool bOpen, CSphString & sError ); + + /// skips whitespace and opening/closing current tag (m_pTag) + /// returns false on failure + bool SkipTag ( bool bOpen, CSphString & sError ); + + /// scan for tag with integer value + bool ScanInt ( const char * sTag, DWORD * pRes, CSphString & sError ); + + /// scan for tag with integer value + bool ScanInt ( const char * sTag, uint64_t * pRes, CSphString & sError ); + + /// scan for tag with integer value + bool ScanInt ( const char * sTag, int64_t * pRes, CSphString & sError ) { return ScanInt ( sTag, (uint64_t*)pRes, sError ); } + + /// scan for tag with string value + bool ScanStr ( const char * sTag, char * pRes, int iMaxLength, CSphString & sError ); + + /// check for hits overun hits buffer + void CheckHitsCount ( const char * sField ); +}; + + +#if USE_LIBEXPAT || USE_LIBXML + +class CSphConfigSection; +CSphSource * sphCreateSourceXmlpipe2 ( const CSphConfigSection * pSource, FILE * pPipe, BYTE * dInitialBuf, int iBufLen, const char * szSourceName, int iMaxFieldLen ); + +#endif + +FILE * sphDetectXMLPipe ( const char * szCommand, BYTE * dBuf, int & iBufSize, int iMaxBufSize, bool & bUsePipe2 ); + + +///////////////////////////////////////////////////////////////////////////// +// SEARCH QUERIES +///////////////////////////////////////////////////////////////////////////// + +/// search query sorting orders +enum ESphSortOrder +{ + SPH_SORT_RELEVANCE = 0, ///< sort by document relevance desc, then by date + SPH_SORT_ATTR_DESC = 1, ///< sort by document date desc, then by relevance desc + SPH_SORT_ATTR_ASC = 2, ///< sort by document date asc, then by relevance desc + SPH_SORT_TIME_SEGMENTS = 3, ///< sort by time segments (hour/day/week/etc) desc, then by relevance desc + SPH_SORT_EXTENDED = 4, ///< sort by SQL-like expression (eg. "@relevance DESC, price ASC, @id DESC") + SPH_SORT_EXPR = 5, ///< sort by arithmetic expression in descending order (eg. "@id + max(@weight,1000)*boost + log(price)") + + SPH_SORT_TOTAL +}; + + +/// search query matching mode +enum ESphMatchMode +{ + SPH_MATCH_ALL = 0, ///< match all query words + SPH_MATCH_ANY, ///< match any query word + SPH_MATCH_PHRASE, ///< match this exact phrase + SPH_MATCH_BOOLEAN, ///< match this boolean query + SPH_MATCH_EXTENDED, ///< match this extended query + SPH_MATCH_FULLSCAN, ///< match all document IDs w/o fulltext query, apply filters + SPH_MATCH_EXTENDED2, ///< extended engine V2 (TEMPORARY, WILL BE REMOVED IN 0.9.8-RELEASE) + + SPH_MATCH_TOTAL +}; + + +/// search query relevance ranking mode +enum ESphRankMode +{ + SPH_RANK_PROXIMITY_BM25 = 0, ///< default mode, phrase proximity major factor and BM25 minor one (aka SPH03) + SPH_RANK_BM25 = 1, ///< statistical mode, BM25 ranking only (faster but worse quality) + SPH_RANK_NONE = 2, ///< no ranking, all matches get a weight of 1 + SPH_RANK_WORDCOUNT = 3, ///< simple word-count weighting, rank is a weighted sum of per-field keyword occurence counts + SPH_RANK_PROXIMITY = 4, ///< phrase proximity (aka SPH01) + SPH_RANK_MATCHANY = 5, ///< emulate old match-any weighting (aka SPH02) + SPH_RANK_FIELDMASK = 6, ///< sets bits where there were matches + SPH_RANK_SPH04 = 7, ///< codename SPH04, phrase proximity + bm25 + head/exact boost + SPH_RANK_EXPR = 8, ///< rank by user expression (eg. "sum(lcs*user_weight)*1000+bm25") + + SPH_RANK_TOTAL, + SPH_RANK_DEFAULT = SPH_RANK_PROXIMITY_BM25 +}; + + +/// search query grouping mode +enum ESphGroupBy +{ + SPH_GROUPBY_DAY = 0, ///< group by day + SPH_GROUPBY_WEEK = 1, ///< group by week + SPH_GROUPBY_MONTH = 2, ///< group by month + SPH_GROUPBY_YEAR = 3, ///< group by year + SPH_GROUPBY_ATTR = 4, ///< group by attribute value + SPH_GROUPBY_ATTRPAIR= 5 ///< group by sequential attrs pair (rendered redundant by 64bit attrs support; removed) +}; + + +/// search query filter types +enum ESphFilter +{ + SPH_FILTER_VALUES = 0, ///< filter by integer values set + SPH_FILTER_RANGE = 1, ///< filter by integer range + SPH_FILTER_FLOATRANGE = 2 ///< filter by float range +}; + + +/// search query filter +class CSphFilterSettings +{ +public: + CSphString m_sAttrName; ///< filtered attribute name + bool m_bExclude; ///< whether this is "include" or "exclude" filter (default is "include") + + ESphFilter m_eType; ///< filter type + union + { + SphAttr_t m_uMinValue; ///< range min + float m_fMinValue; ///< range min + }; + union + { + SphAttr_t m_uMaxValue; ///< range max + float m_fMaxValue; ///< range max + }; + CSphVector m_dValues; ///< integer values set + +public: + CSphFilterSettings (); + + void SetExternalValues ( const SphAttr_t * pValues, int nValues ); + + SphAttr_t GetValue ( int iIdx ) const { assert ( iIdx m_dValues; ///< id-value overrides +}; + + +/// query selection item +struct CSphQueryItem +{ + CSphString m_sExpr; ///< expression to compute + CSphString m_sAlias; ///< alias to return + ESphAggrFunc m_eAggrFunc; + + CSphQueryItem() : m_eAggrFunc ( SPH_AGGR_NONE ) {} +}; + + +/// known collations +enum ESphCollation +{ + SPH_COLLATION_LIBC_CI, + SPH_COLLATION_LIBC_CS, + SPH_COLLATION_UTF8_GENERAL_CI, + SPH_COLLATION_BINARY, + + SPH_COLLATION_DEFAULT = SPH_COLLATION_LIBC_CI +}; + + +/// search query +class CSphQuery +{ +public: + CSphString m_sIndexes; ///< indexes to search + CSphString m_sQuery; ///< cooked query string for the engine (possibly transformed during legacy matching modes fixup) + CSphString m_sRawQuery; ///< raw query string from the client for searchd log, agents, etc + + int m_iOffset; ///< offset into result set (as X in MySQL LIMIT X,Y clause) + int m_iLimit; ///< limit into result set (as Y in MySQL LIMIT X,Y clause) + DWORD * m_pWeights; ///< user-supplied per-field weights. may be NULL. default is NULL. NOT OWNED, WILL NOT BE FREED in dtor. + int m_iWeights; ///< number of user-supplied weights. missing fields will be assigned weight 1. default is 0 + ESphMatchMode m_eMode; ///< match mode. default is "match all" + ESphRankMode m_eRanker; ///< ranking mode, default is proximity+BM25 + CSphString m_sRankerExpr; ///< ranking expression for SPH_RANK_EXPR + ESphSortOrder m_eSort; ///< sort mode + CSphString m_sSortBy; ///< attribute to sort by + int m_iMaxMatches; ///< max matches to retrieve, default is 1000. more matches use more memory and CPU time to hold and sort them + + CSphVector m_dFilters; ///< filters + + CSphString m_sGroupBy; ///< group-by attribute name + ESphGroupBy m_eGroupFunc; ///< function to pre-process group-by attribute value with + CSphString m_sGroupSortBy; ///< sorting clause for groups in group-by mode + CSphString m_sGroupDistinct; ///< count distinct values for this attribute + + int m_iCutoff; ///< matches count threshold to stop searching at (default is 0; means to search until all matches are found) + + int m_iRetryCount; ///< retry count, for distributed queries + int m_iRetryDelay; ///< retry delay, for distributed queries + + bool m_bGeoAnchor; ///< do we have an anchor + CSphString m_sGeoLatAttr; ///< latitude attr name + CSphString m_sGeoLongAttr; ///< longitude attr name + float m_fGeoLatitude; ///< anchor latitude + float m_fGeoLongitude; ///< anchor longitude + + CSphVector m_dIndexWeights; ///< per-index weights + CSphVector m_dFieldWeights; ///< per-field weights + + DWORD m_uMaxQueryMsec; ///< max local index search time, in milliseconds (default is 0; means no limit) + CSphString m_sComment; ///< comment to pass verbatim in the log file + + CSphVector m_dOverrides; ///< per-query attribute value overrides + + CSphString m_sSelect; ///< select-list (attributes and/or expressions) + CSphString m_sOrderBy; ///< order-by clause + + bool m_bReverseScan; ///< perform scan in reverse order + + int m_iSQLSelectStart; ///< SQL parser helper + int m_iSQLSelectEnd; ///< SQL parser helper + +public: + int m_iOldVersion; ///< version, to fixup old queries + int m_iOldGroups; ///< 0.9.6 group filter values count + DWORD * m_pOldGroups; ///< 0.9.6 group filter values + DWORD m_iOldMinTS; ///< 0.9.6 min timestamp + DWORD m_iOldMaxTS; ///< 0.9.6 max timestamp + DWORD m_iOldMinGID; ///< 0.9.6 min group id + DWORD m_iOldMaxGID; ///< 0.9.6 max group id + +public: + CSphVector m_dItems; ///< parsed select-list + ESphCollation m_eCollation; ///< ORDER BY collation + bool m_bAgent; ///< agent mode (may need extra cols on output) + +public: + CSphQuery (); ///< ctor, fills defaults + ~CSphQuery (); ///< dtor, frees owned stuff + + /// return index weight from m_dIndexWeights; or 1 by default + int GetIndexWeight ( const char * sName ) const; + + /// parse select list string into items + bool ParseSelectList ( CSphString & sError ); +}; + + +/// search query meta-info +class CSphQueryResultMeta +{ +public: + int m_iQueryTime; ///< query time, milliseconds + int64_t m_iCpuTime; ///< user time, microseconds + int m_iMultiplier; ///< multi-query multiplier, -1 to indicate error + + struct WordStat_t + { + int m_iDocs; ///< document count for this term + int m_iHits; ///< hit count for this term + bool m_bExpanded; ///< is this term from query itself or was expanded + + WordStat_t() + : m_iDocs ( 0 ) + , m_iHits ( 0 ) + , m_bExpanded ( false ) + {} + }; + SmallStringHash_T m_hWordStats; ///< hash of i-th search term (normalized word form) + + int m_iMatches; ///< total matches returned (upto MAX_MATCHES) + int m_iTotalMatches; ///< total matches found (unlimited) + + CSphString m_sError; ///< error message + CSphString m_sWarning; ///< warning message + + CSphQueryResultMeta (); ///< ctor + virtual ~CSphQueryResultMeta () {} ///< dtor + void AddStat ( const CSphString & sWord, int iDocs, int iHits, bool bExpanded ); + + CSphQueryResultMeta ( const CSphQueryResultMeta & tMeta ); ///< copy ctor + CSphQueryResultMeta & operator= ( const CSphQueryResultMeta & tMeta ); ///< copy +}; + + +/// search query result (meta-info plus actual matches) +class CSphQueryResult : public CSphQueryResultMeta +{ +public: + CSphSwapVector m_dMatches; ///< top matching documents, no more than MAX_MATCHES + + CSphSchema m_tSchema; ///< result schema + const DWORD * m_pMva; ///< pointer to MVA storage + const BYTE * m_pStrings; ///< pointer to strings storage + + CSphVector m_dStorage2Free; /// < aggregated external storage from rt indexes + + int m_iOffset; ///< requested offset into matches array + int m_iCount; ///< count which will be actually served (computed from total, offset and limit) + + int m_iSuccesses; + +public: + CSphQueryResult (); ///< ctor + virtual ~CSphQueryResult (); ///< dtor, which releases all owned stuff + + void LeakStorages ( CSphQueryResult & tDst ); +}; + +///////////////////////////////////////////////////////////////////////////// +// ATTRIBUTE UPDATE QUERY +///////////////////////////////////////////////////////////////////////////// + +struct CSphAttrUpdate +{ + CSphVector m_dAttrs; ///< update schema (ie. what attrs to update) + CSphVector m_dPool; ///< update values pool + CSphVector m_dDocids; ///< document IDs vector + CSphVector m_dRowOffset; ///< document row offsets in the pool +}; + +///////////////////////////////////////////////////////////////////////////// +// FULLTEXT INDICES +///////////////////////////////////////////////////////////////////////////// + +/// progress info +struct CSphIndexProgress +{ + enum Phase_e + { + PHASE_COLLECT, ///< document collection phase + PHASE_SORT, ///< final sorting phase + PHASE_COLLECT_MVA, ///< multi-valued attributes collection phase + PHASE_SORT_MVA, ///< multi-valued attributes collection phase + PHASE_MERGE, ///< index merging + + PHASE_PREREAD, ///< searchd startup, prereading data + PHASE_PRECOMPUTE ///< searchd startup, indexing attributes + }; + + Phase_e m_ePhase; ///< current indexing phase + + int m_iDocuments; ///< PHASE_COLLECT: documents collected so far + int64_t m_iBytes; ///< PHASE_COLLECT: bytes collected so far; + ///< PHASE_PREREAD: bytes read so far; + int64_t m_iBytesTotal; ///< PHASE_PREREAD: total bytes to read; + + int64_t m_iAttrs; ///< PHASE_COLLECT_MVA, PHASE_SORT_MVA: attrs processed so far + int64_t m_iAttrsTotal; ///< PHASE_SORT_MVA: attrs total + + SphOffset_t m_iHits; ///< PHASE_SORT: hits sorted so far + SphOffset_t m_iHitsTotal; ///< PHASE_SORT: hits total + + int m_iWords; ///< PHASE_MERGE: words merged so far + + int m_iDone; ///< generic percent, 0..1000 range + + CSphIndexProgress () + : m_ePhase ( PHASE_COLLECT ) + , m_iDocuments ( 0 ) + , m_iBytes ( 0 ) + , m_iBytesTotal ( 0 ) + , m_iAttrs ( 0 ) + , m_iAttrsTotal ( 0 ) + , m_iHits ( 0 ) + , m_iHitsTotal ( 0 ) + , m_iWords ( 0 ) + {} + + /// builds a message to print + /// WARNING, STATIC BUFFER, NON-REENTRANT + const char * BuildMessage() const; +}; + + +/// sorting key part types +enum ESphSortKeyPart +{ + SPH_KEYPART_ID, + SPH_KEYPART_WEIGHT, + SPH_KEYPART_INT, + SPH_KEYPART_FLOAT, + SPH_KEYPART_STRING +}; + +typedef int ( *SphStringCmp_fn )( const BYTE * pStr1, const BYTE * pStr2 ); + +/// match comparator state +struct CSphMatchComparatorState +{ + static const int MAX_ATTRS = 5; + + ESphSortKeyPart m_eKeypart[MAX_ATTRS]; ///< sort-by key part type + CSphAttrLocator m_tLocator[MAX_ATTRS]; ///< sort-by attr locator + + DWORD m_uAttrDesc; ///< sort order mask (if i-th bit is set, i-th attr order is DESC) + DWORD m_iNow; ///< timestamp (for timesegments sorting mode) + SphStringCmp_fn m_fnStrCmp; ///< string comparator + + /// create default empty state + CSphMatchComparatorState () + : m_uAttrDesc ( 0 ) + , m_iNow ( 0 ) + , m_fnStrCmp ( NULL ) + { + for ( int i=0; i=0 && iAttr & dSources, int iMemoryLimit, int iWriteBuffer ) = 0; + + /// build index by mering current index with given index + virtual bool Merge ( CSphIndex * pSource, CSphVector & dFilters, bool bMergeKillLists ) = 0; + +public: + /// check all data files, preload schema, and preallocate enough shared RAM to load memory-cached data + virtual bool Prealloc ( bool bMlock, bool bStripPath, CSphString & sWarning ) = 0; + + /// deallocate all previously preallocated shared data + virtual void Dealloc () = 0; + + /// precache everything which needs to be precached + // WARNING, WILL BE CALLED FROM DIFFERENT PROCESS, MUST ONLY MODIFY SHARED MEMORY + virtual bool Preread () = 0; + + /// set new index base path + virtual void SetBase ( const char * sNewBase ) = 0; + + /// set new index base path, and physically rename index files too + virtual bool Rename ( const char * sNewBase ) = 0; + + /// obtain exclusive lock on this index + virtual bool Lock () = 0; + + /// dismiss exclusive lock and unlink lock file + virtual void Unlock () = 0; + + /// relock shared RAM (only on daemonization) + virtual bool Mlock () = 0; + + /// called when index is loaded and prepared to work + virtual void PostSetup() = 0; + +public: + virtual bool EarlyReject ( CSphQueryContext * pCtx, CSphMatch & tMatch ) const = 0; + virtual const CSphSourceStats & GetStats () const = 0; + void SetCacheSize ( int iMaxCachedDocs, int iMaxCachedHits ); + virtual bool MultiQuery ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag=0 ) const = 0; + virtual bool MultiQueryEx ( int iQueries, const CSphQuery * ppQueries, CSphQueryResult ** ppResults, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag=0 ) const = 0; + virtual bool GetKeywords ( CSphVector & dKeywords, const char * szQuery, bool bGetStats, CSphString & sError ) const = 0; + +public: + /// updates memory-cached attributes in real time + /// returns non-negative amount of actually found and updated records on success + /// on failure, -1 is returned and GetLastError() contains error message + virtual int UpdateAttributes ( const CSphAttrUpdate & tUpd, int iIndex, CSphString & sError ) = 0; + + /// saves memory-cached attributes, if there were any updates to them + /// on failure, false is returned and GetLastError() contains error message + virtual bool SaveAttributes () = 0; + + virtual DWORD GetAttributeStatus () const = 0; + +public: + /// internal debugging hook, DO NOT USE + virtual void DebugDumpHeader ( FILE * fp, const char * sHeaderName, bool bConfig ) = 0; + + /// internal debugging hook, DO NOT USE + virtual void DebugDumpDocids ( FILE * fp ) = 0; + + /// internal debugging hook, DO NOT USE + virtual void DebugDumpHitlist ( FILE * fp, const char * sKeyword, bool bID ) = 0; + + /// internal debugging hook, DO NOT USE + virtual int DebugCheck ( FILE * fp ) = 0; + + /// getter for name + const char * GetName () { return m_sIndexName.cstr(); } + +public: + int64_t m_iTID; + + bool m_bEnableStar; ///< enable star-syntax + bool m_bExpandKeywords; ///< enable automatic query-time keyword expansion (to "( word | =word | *word* )") + int m_iExpansionLimit; + +protected: + ProgressCallback_t * m_pProgress; + CSphSchema m_tSchema; + CSphString m_sLastError; + CSphString m_sLastWarning; + + bool m_bInplaceSettings; + int m_iHitGap; + int m_iDocinfoGap; + float m_fRelocFactor; + float m_fWriteFactor; + + bool m_bKeepFilesOpen; ///< keep files open to avoid race on seamless rotation + bool m_bPreloadWordlist; ///< preload wordlists or keep them on disk + + bool m_bStripperInited; ///< was stripper initialized (old index version (<9) handling) + +public: + bool m_bId32to64; ///< did we convert id32 to id64 on startup + +protected: + CSphIndexSettings m_tSettings; + + ISphTokenizer * m_pTokenizer; + CSphDict * m_pDict; + + int m_iMaxCachedDocs; + int m_iMaxCachedHits; + CSphString m_sIndexName; +}; + +///////////////////////////////////////////////////////////////////////////// + +/// create phrase fulltext index implemntation +CSphIndex * sphCreateIndexPhrase ( const char* szIndexName, const char * sFilename ); + +/// tell libsphinx to be quiet or not (logs and loglevels to come later) +void sphSetQuiet ( bool bQuiet ); + +/// creates proper queue for given query +/// may return NULL on error; in this case, error message is placed in sError +ISphMatchSorter * sphCreateQueue ( const CSphQuery * pQuery, const CSphSchema & tSchema, CSphString & sError, bool bComputeItems=true, CSphSchema * pExtra=NULL ); + +/// convert queue to sorted array, and add its entries to result's matches array +void sphFlattenQueue ( ISphMatchSorter * pQueue, CSphQueryResult * pResult, int iTag ); + +/// setup per-keyword read buffer sizes +void sphSetReadBuffers ( int iReadBuffer, int iReadUnhinted ); + +/// check query for expressions +bool sphHasExpressions ( const CSphQuery & tQuery, const CSphSchema & tSchema ); + +/// initialize collation tables +void sphCollationInit (); + +///////////////////////////////////////////////////////////////////////////// + +// workaround to suppress C4511/C4512 warnings (copy ctor and assignment operator) in VS 2003 +#if _MSC_VER>=1300 && _MSC_VER<1400 +#pragma warning(disable:4511) +#pragma warning(disable:4512) +#endif + +// suppress C4201 (nameless struct/union is a nonstandard extension) because even min-spec gcc 3.4.6 works ok +#if defined(_MSC_VER) +#pragma warning(disable:4201) +#endif + +#endif // _sphinx_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinx.o b/coreseek/csft-4.1/src/sphinx.o new file mode 100644 index 0000000..2e6672b Binary files /dev/null and b/coreseek/csft-4.1/src/sphinx.o differ diff --git a/coreseek/csft-4.1/src/sphinxcustomsort.inl b/coreseek/csft-4.1/src/sphinxcustomsort.inl new file mode 100755 index 0000000..40200dc --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxcustomsort.inl @@ -0,0 +1,26 @@ +// +// $Id$ +// + +// in this file, one can declare a custom sorting function +// which will be used when sorting by "@custom" in extended sorting mode + +// first, declare which attributes will be used in the function +// +// they will be then accessible in the function using MATCH_ATTR(number) +// macro, where "number" is assigned in the order of declaration + +MATCH_DECLARE_ATTR ( "group_id" ) +MATCH_DECLARE_ATTR ( "date_added" ) + +// second, define the function itself +// +// in this example, the matches will be sorted by +// @weight + group_id*0.3 - log ( NOW() - date_added ) +// in descending order + +MATCH_FUNCTION = MATCH_WEIGHT + MATCH_ATTR(0)*0.3f - log ( MATCH_NOW - MATCH_ATTR(1) ) + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxexcerpt.cpp b/coreseek/csft-4.1/src/sphinxexcerpt.cpp new file mode 100755 index 0000000..687568d --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxexcerpt.cpp @@ -0,0 +1,3015 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxexcerpt.h" +#include "sphinxutils.h" +#include "sphinxsearch.h" +#include "sphinxquery.h" +#include "sphinxint.h" + +#include + +///////////////////////////////////////////////////////////////////////////// +// THE EXCERPTS GENERATOR +///////////////////////////////////////////////////////////////////////////// + +static const int MAX_HIGHLIGHT_WORDS = 256; + +#define UINT32_MASK 0xffffffffUL +#define UINT16_MASK 0xffff +typedef uint64_t ZonePacked_t; + +class ExcerptGen_c +{ + friend class SnippetsQwordSetup; + +public: + explicit ExcerptGen_c ( bool bUtf8 ); + ~ExcerptGen_c () {} + + char * BuildExcerpt ( const ExcerptQuery_t & tQuery ); + + void TokenizeQuery ( const ExcerptQuery_t &, CSphDict * pDict, ISphTokenizer * pTokenizer, const CSphIndexSettings & tSettings ); + void TokenizeDocument ( char * pData, int iDataLen, CSphDict * pDict, ISphTokenizer * pTokenizer, bool bFillMasks, const ExcerptQuery_t & q, const CSphIndexSettings & tSettings ); + + void SetMarker ( CSphHitMarker * pMarker ) { m_pMarker = pMarker; } + void SetExactPhrase ( const ExcerptQuery_t & tQuery ); + +public: + enum Token_e + { + TOK_NONE = 0, ///< unspecified type, also used as the end marker + TOK_WORD, ///< just a word + TOK_SPACE, ///< whitespace chars seq + TOK_BREAK, ///< non-word chars seq which delimit a phrase part or boundary + TOK_SPZ ///< SENTENCE, PARAGRAPH, ZONE + }; + + struct Token_t + { + Token_e m_eType; ///< token type + int m_iStart; ///< token start (index in codepoints array) + int m_iLengthCP; ///< token length (in codepoints) + int m_iLengthBytes; ///< token length (in bytes) + int m_iWeight; ///< token weight + DWORD m_uWords; ///< matching query words mask + SphWordID_t m_iWordID; ///< token word ID from dictionary + SphWordID_t m_iBlendID; ///< blended word ID (eg. "T-mobile" would not tokenize itself, but still shadow "T" and "mobile") + DWORD m_uPosition; ///< hit position in document + + void Reset () + { + m_eType = TOK_NONE; + m_iStart = 0; + m_iLengthCP = 0; + m_iLengthBytes = 0; + m_iWeight = 0; + m_uWords = 0; + m_iWordID = 0; + m_iBlendID = 0; + m_uPosition = 0; + } + }; + + struct TokenSpan_t + { + int m_iStart; ///< start index, inclusive + int m_iEnd; ///< end index, inclusive + int m_iWords; ///< number of TOK_WORDS tokens + int m_iQwords; ///< number of words matching query + + void Reset () + { + m_iStart = -1; + m_iEnd = -2; + m_iWords = 0; + m_iQwords = 0; + } + + void Add ( int i, bool bQword ) + { + assert ( m_iStart & GetZones () const { return m_dZones; } + const SmallStringHash_T & GetZonesName () const { return m_hZones; } + +protected: + CSphVector m_dTokens; ///< source text tokens + CSphVector m_dWords; ///< query words tokens + int m_iDocumentWords; + int m_iPassageId; + + CSphString m_sBuffer; // FIXME!!! REMOVE!!! ME!!! + + CSphVector m_dResult; ///< result holder + int m_iResultLen; ///< result codepoints count + + CSphVector m_dPassages; ///< extracted passages + + bool m_bExactPhrase; + + DWORD m_uFoundWords; ///< found words mask + int m_iQwordCount; + int m_iLastWord; + CSphHitMarker * m_pMarker; + + CSphVector m_dKeywordsBuffer; + CSphVector m_dKeywords; + + CSphVector m_dZones; ///< zones for current document + SmallStringHash_T m_hZones; ///< zones names + CSphVector m_dZonePos; ///< zones positions (in characters) + CSphVector m_dZoneParent; ///< zones parent type + + bool m_bUtf8; + int m_iTotalCP; + +protected: + void CalcPassageWeight ( Passage_t & tPass, const TokenSpan_t & tSpan, int iMaxWords, int iWordCountCoeff ); + void UpdateGaps ( Passage_t & tPass, const TokenSpan_t & tSpan, int iMaxWords ); + bool ExtractPassages ( const ExcerptQuery_t & q ); + bool ExtractPhrases ( const ExcerptQuery_t & q ); + + void HighlightPhrase ( const ExcerptQuery_t & q, int iTok, int iEnd ); + void HighlightAll ( const ExcerptQuery_t & q ); + void HighlightStart ( const ExcerptQuery_t & q ); + bool HighlightBestPassages ( const ExcerptQuery_t & q ); + + void ResultEmit ( const char * sLine, bool bHasMacro=false, int iPassageId=0, const char * sPostPassage=NULL ); + void ResultEmit ( const Token_t & sTok ); + + void AddJunk ( int iStart, int iLength, int iBoundary ); + void AddBoundary (); + + void MarkHits (); + + bool SetupWindow ( TokenSpan_t & tSpan, Passage_t & tPass, int iFrom, int iCpLimit, const ExcerptQuery_t & q ); + bool FlushPassage ( const Passage_t & tPass, int iLCSThresh ); +}; + +// find string sFind in first iLimit characters of sBuffer +static BYTE * FindString ( BYTE * sBuffer, BYTE * sFind, int iLimit ) +{ + assert ( iLimit > 0 ); + assert ( sBuffer ); + assert ( sFind ); + + iLimit++; + do + { + while ( *sBuffer!=*sFind ) + if ( !*++sBuffer || !--iLimit ) return NULL; + + int iSubLimit = iLimit; + BYTE * sSubFind = sFind; + BYTE * sSubBuffer = sBuffer; + while ( *sSubFind && *sSubBuffer && *sSubFind==*sSubBuffer++ ) + { + sSubFind++; + if ( !--iSubLimit ) return NULL; + } + if ( !*sSubFind ) + return sBuffer; + } + while ( *++sBuffer ); + + return NULL; +} + +/// hitman used here in snippets +typedef Hitman_c<8> HITMAN; + +/// snippets query words for different cases +class ISnippetsQword : public ISphQword +{ +public: + CSphString * m_sBuffer; + CSphVector * m_dTokens; + ISphTokenizer * m_pTokenizer; + DWORD * m_uFoundWords; + + // word information, filled during query word setup + int m_iWordLength; + int m_iLastIndex; + DWORD m_uWordMask; + + // iterator state + CSphMatch m_tMatch; + int m_iToken; + int m_iChunk; + + typedef ExcerptGen_c::Token_t Token_t; + + ISnippetsQword() + : m_iToken ( 0 ) + , m_iChunk ( 0 ) + {} + + virtual void SeekHitlist ( SphOffset_t ) {} + + virtual const CSphMatch & GetNextDoc ( DWORD * ) + { + m_dFields.Set(); + if ( ( m_iChunk++ )==0 ) + { + if ( GetNextHit()!=EMPTY_HIT ) + { + m_tMatch.m_iDocID = 1; + m_iToken--; + } else + m_tMatch.m_iDocID = 0; + } else + m_tMatch.m_iDocID = 0; + return m_tMatch; + } + + virtual void OnSetup ( CSphDict * ) {} +}; + +/// simple keyword match on id +struct SnippetsQword_Exact_c: public ISnippetsQword +{ + virtual Hitpos_t GetNextHit () + { + while ( m_iToken < m_dTokens->GetLength() ) + { + Token_t & tToken = (*m_dTokens)[m_iToken++]; + if ( tToken.m_eType!=ExcerptGen_c::TOK_WORD ) + continue; + + if ( tToken.m_iWordID==m_iWordID || tToken.m_iBlendID==m_iWordID ) + { + tToken.m_uWords |= m_uWordMask; + *m_uFoundWords |= m_uWordMask; + return HITMAN::Create ( 0, tToken.m_uPosition, ( m_iToken-1 )==m_iLastIndex ); + } + } + return EMPTY_HIT; + } +}; + +/// partial matches +template < typename COMPARE > struct SnippetsQword_c: public ISnippetsQword +{ + virtual Hitpos_t GetNextHit () + { + while ( m_iToken < m_dTokens->GetLength() ) + { + Token_t & tToken = (*m_dTokens)[m_iToken++]; + if ( tToken.m_eType!=ExcerptGen_c::TOK_WORD ) + continue; + + m_pTokenizer->SetBuffer ( (BYTE *) &m_sBuffer->cstr() [ tToken.m_iStart ], tToken.m_iLengthBytes ); + BYTE * sToken = m_pTokenizer->GetToken(); // OPTIMIZE? token can be memoized and shared between qwords + if ( (*(COMPARE *)this).Match ( tToken, sToken ) ) + { + tToken.m_uWords |= m_uWordMask; + *m_uFoundWords |= m_uWordMask; + return HITMAN::Create ( 0, tToken.m_uPosition, ( m_iToken-1 )==m_iLastIndex ); + } + } + return EMPTY_HIT; + } +}; + +struct SnippetsQword_StarFront_c : public SnippetsQword_c +{ + inline bool Match ( const Token_t & tToken, BYTE * sToken ) + { + int iOffset = tToken.m_iLengthBytes - m_iWordLength; + return iOffset>=0 && + memcmp ( m_sDictWord.cstr(), sToken + iOffset, m_iWordLength )==0; + } +}; + +struct SnippetsQword_StarBack_c : public SnippetsQword_c +{ + inline bool Match ( const Token_t & tToken, BYTE * sToken ) + { + return ( tToken.m_iLengthBytes>=m_iWordLength ) && + memcmp ( m_sDictWord.cstr(), sToken, m_iWordLength )==0; + } +}; + +struct SnippetsQword_StarBoth_c : public SnippetsQword_c +{ + inline bool Match ( const Token_t & tToken, BYTE * sToken ) + { + return FindString ( sToken, (BYTE *)m_sDictWord.cstr(), tToken.m_iLengthBytes )!=NULL; + } +}; + + +struct SnippetsQword_ExactForm_c : public SnippetsQword_c +{ + inline bool Match ( const Token_t & tToken, BYTE * sToken ) + { + return tToken.m_iBlendID==m_iWordID || ( memcmp ( sToken, m_sDictWord.cstr()+1, m_iWordLength )==0 ); + } + + virtual void OnSetup ( CSphDict * pDict ) + { + // FIXME!!! to match with blended parts it recalculates wordID for word without head '=' part + + int iLen = m_sWord.Length()-1; + BYTE sTmp [ 3*SPH_MAX_WORD_LEN + 16 ]; + + assert ( iLen>0 && iLen ( pQword ); + if ( !pWord ) + assert ( "query word setup failed" && 0 ); + + pWord->m_iLastIndex = m_pGenerator->m_iLastWord; + pWord->m_uWordMask = 1 << (m_pGenerator->m_iQwordCount++); + pWord->m_iWordLength = strlen ( pWord->m_sDictWord.cstr() ); + pWord->m_dTokens = &(m_pGenerator->m_dTokens); + pWord->m_sBuffer = &(m_pGenerator->m_sBuffer); + pWord->m_pTokenizer = m_pTokenizer; + pWord->m_uFoundWords = &m_pGenerator->m_uFoundWords; + + pWord->m_iDocs = 1; + pWord->m_iHits = 1; + pWord->m_bHasHitlist = true; + + pWord->OnSetup ( m_pDict ); + + // add dummy word, used for passage weighting + const char * sWord = pWord->m_sDictWord.cstr(); + const int iLength = m_pTokenizer->IsUtf8() ? sphUTF8Len ( sWord ) : strlen ( sWord ); + m_pGenerator->m_dWords.Add().m_iLengthCP = iLength; + m_pGenerator->m_dKeywords.Add().m_iLength = iLength; + + return true; +} + +///////////////////////////////////////////////////////////////////////////// + +inline bool operator < ( const ExcerptGen_c::Token_t & a, const ExcerptGen_c::Token_t & b ) +{ + if ( a.m_iLengthCP==b.m_iLengthCP ) + return a.m_iStart > b.m_iStart; + return a.m_iLengthCP < b.m_iLengthCP; +} + + +inline bool operator < ( const ExcerptGen_c::Passage_t & a, const ExcerptGen_c::Passage_t & b ) +{ + if ( a.GetWeight()==b.GetWeight() ) + return a.m_iCodes < b.m_iCodes; + return a.GetWeight() < b.GetWeight(); +} + +ExcerptGen_c::ExcerptGen_c ( bool bUtf8 ) +{ + m_iQwordCount = 0; + m_bExactPhrase = false; + m_pMarker = NULL; + m_uFoundWords = 0; + m_bUtf8 = bUtf8; + m_iTotalCP = 0; +} + +void ExcerptGen_c::AddBoundary() +{ + Token_t & tLast = m_dTokens.Add(); + tLast.Reset(); + tLast.m_eType = TOK_BREAK; +} + +void ExcerptGen_c::AddJunk ( int iStart, int iLength, int iBoundary ) +{ + assert ( iLength>0 ); +#ifdef PARANOID + assert ( iLength<=m_sBuffer.Length() ); + assert ( iStart+iLength<=m_sBuffer.Length() ); +#endif + + int iChunkStart = iStart; + int iSaved = 0; + + for ( int i = iStart; i < iStart+iLength; i++ ) + if ( sphIsSpace ( m_sBuffer.cstr () [i] )!=sphIsSpace ( m_sBuffer.cstr () [iChunkStart] ) ) + { + Token_t & tLast = m_dTokens.Add(); + tLast.Reset(); + tLast.m_eType = TOK_SPACE; + tLast.m_iStart = iChunkStart; + tLast.m_iLengthBytes = tLast.m_iLengthCP = i - iChunkStart; + if ( m_bUtf8 ) + tLast.m_iLengthCP = sphUTF8Len ( m_sBuffer.cstr() + tLast.m_iStart, tLast.m_iLengthBytes ); + m_iTotalCP += tLast.m_iLengthCP; + + iChunkStart = i; + iSaved += tLast.m_iLengthBytes; + + if ( iBoundary!=-1 && iSaved > ( iBoundary-iStart ) ) + { + AddBoundary(); + iBoundary = -1; + } + } + + Token_t & tLast = m_dTokens.Add(); + tLast.Reset(); + tLast.m_eType = TOK_SPACE; + tLast.m_iStart = iChunkStart; + tLast.m_iLengthBytes = tLast.m_iLengthCP = iStart + iLength - iChunkStart; + if ( m_bUtf8 ) + tLast.m_iLengthCP = sphUTF8Len ( m_sBuffer.cstr() + tLast.m_iStart, tLast.m_iLengthBytes ); + m_iTotalCP += tLast.m_iLengthCP; + + if ( iBoundary!=-1 ) + AddBoundary(); +} + + +void ExcerptGen_c::TokenizeQuery ( const ExcerptQuery_t & tQuery, CSphDict * pDict, ISphTokenizer * pTokenizer, const CSphIndexSettings & tSettings ) +{ + // tokenize query words + int iWordsLength = strlen ( tQuery.m_sWords.cstr() ); + + m_dKeywords.Reserve ( MAX_HIGHLIGHT_WORDS ); + + BYTE * sWord; + int iKwIndex = 0; + int uPosition = 0; + + pTokenizer->SetBuffer ( (BYTE *)tQuery.m_sWords.cstr(), iWordsLength ); + while ( ( sWord = pTokenizer->GetToken() )!=NULL ) + { + SphWordID_t iWord = pDict->GetWordID ( sWord ); + + bool bIsStopWord = false; + if ( !iWord ) + bIsStopWord = pDict->IsStopWord ( sWord ); + + if ( !pTokenizer->TokenIsBlended() ) + { + uPosition += pTokenizer->GetOvershortCount(); + + if ( pTokenizer->GetBoundary() ) + uPosition += tSettings.m_iBoundaryStep; + + if ( iWord || bIsStopWord ) + uPosition = bIsStopWord ? uPosition+tSettings.m_iStopwordStep : uPosition+1; + } + + if ( iWord ) + { + Token_t & tLast = m_dWords.Add(); + tLast.m_eType = TOK_WORD; + tLast.m_iWordID = iWord; + tLast.m_iLengthBytes = tLast.m_iLengthCP = strlen ( (const char *)sWord ); + if ( m_bUtf8 ) + tLast.m_iLengthCP = sphUTF8Len ( (const char *)sWord ); + m_iTotalCP += tLast.m_iLengthCP; + tLast.m_uPosition = uPosition; + + // store keyword + Keyword_t & kwLast = m_dKeywords.Add(); + kwLast.m_iLength = tLast.m_iLengthCP; + + // find stars + bool bStarBack = ( *pTokenizer->GetTokenEnd()=='*' ); + bool bStarFront = ( pTokenizer->GetTokenStart()!=pTokenizer->GetBufferPtr() ) && + ( pTokenizer->GetTokenStart()[-1]=='*' ); + kwLast.m_uStar = ( bStarFront ? STAR_FRONT : 0 ) | ( bStarBack ? STAR_BACK : 0 ); + + // store token + const int iEndIndex = iKwIndex + tLast.m_iLengthBytes + 1; + m_dKeywordsBuffer.Resize ( iEndIndex ); + kwLast.m_iWord = iKwIndex; + strcpy ( &m_dKeywordsBuffer [ iKwIndex ], (const char *)sWord ); // NOLINT + iKwIndex = iEndIndex; + + if ( m_dWords.GetLength()==MAX_HIGHLIGHT_WORDS ) + break; + } + } +} + +static int FindTagEnd ( const char * sData ) +{ + assert ( *sData=='<' ); + const char * s = sData+1; + + // we just scan until EOLN or tag end + while ( *s && *s!='>' ) + { + // exit on duplicate + if ( *s=='<' ) + return -1; + + if ( *s=='\'' || *s=='"' ) + s = (const char *)SkipQuoted ( (const BYTE *)s ); + else + s++; + } + + if ( !*s ) + return -1; + + return s-sData; +} + +uint64_t sphPackZone ( DWORD uPosition, int iSiblingIndex, int iZoneType ) +{ + assert ( iSiblingIndex>=0 && iSiblingIndex=0 && iZoneType & hZones ) +{ + CSphString sZone; + sZone.SetBinary ( sZoneName, iZoneNameLen ); + + int * pZoneIndex = hZones ( sZone ); + if ( pZoneIndex ) + return *pZoneIndex; + + int iZone = hZones.GetLength(); + hZones.Add ( iZone, sZone ); + return iZone; +} + +// FIXME! unify with global static void TokenizeDocument somehow, lots of common code +void ExcerptGen_c::TokenizeDocument ( char * pData, int iDataLen, CSphDict * pDict, ISphTokenizer * pTokenizer, bool bFillMasks, const ExcerptQuery_t & q, const CSphIndexSettings & tSettings ) +{ + assert ( q.m_sStripMode!="retain" ); + bool bQueryMode = q.m_bHighlightQuery; + int iSPZ = q.m_iPassageBoundary; + + m_iTotalCP = 0; + m_iDocumentWords = 0; + m_dTokens.Reserve ( Max ( iDataLen/4, 256 ) ); // len/tok ratio ranged 2.8 to 3.2 on my testing data + m_sBuffer = pData; + + pTokenizer->SetBuffer ( (BYTE*)pData, iDataLen ); + + const char * pStartPtr = pTokenizer->GetBufferPtr (); + const char * pLastTokenEnd = pStartPtr; + + assert ( pStartPtr && pLastTokenEnd ); + + CSphVector dZoneStack; + CSphVector dExactPhrase; + if ( m_bExactPhrase ) + dExactPhrase.Reserve ( m_dWords.GetLength() ); + + BYTE * sWord; + DWORD uPosition = 0; // hit position in document + SphWordID_t iBlendID = 0; + const char * pBlendedEnd = NULL; + while ( ( sWord = pTokenizer->GetToken() )!=NULL ) + { + if ( pTokenizer->TokenIsBlended() ) + { + if ( pBlendedEndGetTokenEnd() ) + { + iBlendID = pDict->GetWordID ( sWord ); + pBlendedEnd = pTokenizer->GetTokenEnd(); + } + continue; + } + + uPosition += pTokenizer->GetOvershortCount(); + + const char * pTokenStart = pTokenizer->GetTokenStart (); + + if ( pTokenStart!=pStartPtr && pTokenStart>pLastTokenEnd ) + { + AddJunk ( pLastTokenEnd - pStartPtr, + pTokenStart - pLastTokenEnd, + pTokenizer->GetBoundary() ? pTokenizer->GetBoundaryOffset() : -1 ); + pLastTokenEnd = pTokenStart; + } + + // handle SPZ tokens GE then needed + // add SENTENCE, PARAGRAPH, ZONE token, do junks and tokenizer and pLastTokenEnd fix up + // FIXME!!! it heavily depends on such this attitude MAGIC_CODE_SENTENCE < MAGIC_CODE_PARAGRAPH < MAGIC_CODE_ZONE + if ( *sWord==MAGIC_CODE_SENTENCE || *sWord==MAGIC_CODE_PARAGRAPH || *sWord==MAGIC_CODE_ZONE ) + { + // SPZ token has position and could be last token too + uPosition += ( iSPZ && *sWord>=iSPZ ); + + if ( iSPZ && *sWord>=iSPZ && ( m_dTokens.GetLength()==0 || m_dTokens.Last().m_eType!=TOK_SPZ ) ) + { + Token_t & tLast = m_dTokens.Add(); + tLast.Reset(); + tLast.m_eType = TOK_SPZ; + + if ( *sWord==MAGIC_CODE_SENTENCE ) + { + tLast.m_iStart = pTokenStart-pStartPtr; + tLast.m_iLengthBytes = tLast.m_iLengthCP = 1; + m_iTotalCP++; + } + + // SPZ token has position and could be last token too + m_iLastWord = m_dTokens.GetLength(); + pLastTokenEnd = pTokenizer->GetTokenEnd(); // fix it up to prevent adding last chunk on exit + } + + if ( *sWord==MAGIC_CODE_ZONE ) + { + const char * pEnd = pTokenizer->GetBufferPtr(); + const char * pTagStart = pEnd; + while ( *pEnd && *pEnd!=MAGIC_CODE_ZONE ) + pEnd++; + pEnd++; // skip zone token too + pTokenizer->SetBufferPtr ( pEnd ); + pLastTokenEnd = pEnd; // fix it up to prevent adding last chunk on exit + + // span's management + if ( *pTagStart!='/' ) // open zone + { + // zone stack management + int iSelf = m_dZones.GetLength(); + dZoneStack.Add ( iSelf ); + + // add zone itself + int iZone = FindAddZone ( pTagStart, pEnd-pTagStart-1, m_hZones ); + m_dZones.Add ( sphPackZone ( uPosition, iSelf, iZone ) ); + + // zone position in characters + m_dZonePos.Add ( pTagStart-pStartPtr ); + + // for open zone the parent is the zone itself + m_dZoneParent.Add ( iZone ); + } else // close zone + { +#ifndef NDEBUG + // lets check open - close tags match + assert ( dZoneStack.GetLength() && dZoneStack.Last()>32 ) & UINT32_MASK ); + assert ( iZone==(int)( uOpenPacked & UINT16_MASK ) ); // check for zone's types match; + + m_dZones[iOpen] = sphPackZone ( uOpenPos, iClose, iZone ); + m_dZones.Add ( sphPackZone ( uPosition, iOpen, iZone ) ); + + // zone position in characters + m_dZonePos.Add ( pTagStart-pStartPtr ); + + // for close zone the parent is the previous zone on stack + int iParentZone = dZoneStack.GetLength()>2 ? dZoneStack[dZoneStack.GetLength()-2] : 0; + uint64_t uParentPacked = m_dZones.GetLength() && iParentZoneGetTokenEnd (); + + SphWordID_t iExactID = 0; + if ( bQueryMode && tSettings.m_bIndexExactWords ) + { + BYTE sBuf [ 3*SPH_MAX_WORD_LEN+4 ]; + int iBytes = pLastTokenEnd - pTokenStart; + if ( iBytes+2>sizeof(sBuf) ) + iBytes = sizeof(sBuf)-2; + memcpy ( sBuf + 1, sWord, iBytes ); + sBuf[0] = MAGIC_WORD_HEAD_NONSTEMMED; + sBuf[iBytes+1] = '\0'; + + iExactID = pDict->GetWordIDNonStemmed ( sBuf ); + } + + SphWordID_t iWord = pDict->GetWordID ( sWord ); + + if ( pTokenizer->GetBoundary() ) + uPosition += tSettings.m_iBoundaryStep; + + bool bIsStopWord = false; + if ( !iWord ) + bIsStopWord = pDict->IsStopWord ( sWord ); + + if ( iWord || bIsStopWord ) + uPosition = bIsStopWord ? uPosition+tSettings.m_iStopwordStep : uPosition+1; + + if ( !pTokenizer->TokenIsBlendedPart() ) + iBlendID = 0; + + Token_t & tLast = m_dTokens.Add(); + tLast.m_eType = ( iWord || bIsStopWord ) ? TOK_WORD : TOK_SPACE; + tLast.m_uPosition = ( iWord || bIsStopWord ) ? uPosition : 0; + tLast.m_iStart = pTokenStart - pStartPtr; + tLast.m_iLengthBytes = tLast.m_iLengthCP = pLastTokenEnd - pTokenStart; + if ( m_bUtf8 && ( iWord || bIsStopWord ) ) + tLast.m_iLengthCP = sphUTF8Len ( pTokenStart, tLast.m_iLengthBytes ); + m_iTotalCP += tLast.m_iLengthCP; + tLast.m_iWordID = iWord; + tLast.m_iBlendID = iBlendID; + tLast.m_uWords = 0; + if ( iWord || bIsStopWord ) + m_iDocumentWords++; + + m_iLastWord = iWord ? m_dTokens.GetLength() - 1 : m_iLastWord; + + // fill word mask + tLast.m_uWords = 0; + + if ( bFillMasks && iWord ) + { + bool bMatch = false; + int iOffset; + + ARRAY_FOREACH ( nWord, m_dWords ) + { + const char * sKeyword = &m_dKeywordsBuffer [ m_dKeywords[nWord].m_iWord ]; + const Token_t & tToken = m_dWords[nWord]; + + switch ( m_dKeywords[nWord].m_uStar ) + { + case STAR_NONE: + bMatch = ( iWord==tToken.m_iWordID || iExactID==tToken.m_iWordID ); + break; + + case STAR_FRONT: + iOffset = tLast.m_iLengthBytes - tToken.m_iLengthBytes; + bMatch = ( iOffset>=0 ) && + ( memcmp ( sKeyword, sWord + iOffset, tToken.m_iLengthBytes )==0 ); + break; + + case STAR_BACK: + bMatch = ( tLast.m_iLengthBytes>=tToken.m_iLengthBytes ) && + ( memcmp ( sKeyword, sWord, tToken.m_iLengthBytes )==0 ); + break; + + case STAR_BOTH: + bMatch = strstr ( (const char *)sWord, sKeyword )!=NULL; + break; + } + + if ( bMatch ) + { + tLast.m_uWords |= 1UL<GetBufferEnd() ) + { + int iOffset = pTokenizer->GetBoundary() ? pTokenizer->GetBoundaryOffset() : -1; + AddJunk ( pLastTokenEnd - pStartPtr, pTokenizer->GetBufferEnd () - pLastTokenEnd, iOffset ); + } + + Token_t & tLast = m_dTokens.Add(); + tLast.Reset(); +} + +void ExcerptGen_c::MarkHits () +{ + assert ( m_pMarker ); + + // mark + CSphVector dMarked; + dMarked.Reserve ( m_dTokens.GetLength() ); + m_pMarker->Mark ( dMarked ); + + // fix-up word masks + int iMarked = dMarked.GetLength(); + int iTokens = m_dTokens.GetLength(); + int i = 0, k = 0; + while ( i < iTokens ) + { + // sync + while ( k < iMarked && m_dTokens[i].m_uPosition > dMarked[k].m_uPosition ) + k++; + + if ( k==iMarked ) // no more marked hits, clear tail + { + for ( ; i < iTokens; i++ ) + m_dTokens[i].m_uWords = 0; + break; + } + + // clear false matches + while ( dMarked[k].m_uPosition > m_dTokens[i].m_uPosition ) + { + m_dTokens[i++].m_uWords = 0; + assert ( i=1 ); + while ( dMarked[k].m_uSpan-- ) + { + i++; + while ( i < iTokens && !m_dTokens[i].m_uPosition ) i++; + } + } +} + + +void ExcerptGen_c::SetExactPhrase ( const ExcerptQuery_t & tQuery ) +{ + m_bExactPhrase = tQuery.m_bExactPhrase && ( m_dWords.GetLength()>1 ); +} + + +char * ExcerptGen_c::BuildExcerpt ( const ExcerptQuery_t & tQuery ) +{ + m_iPassageId = tQuery.m_iPassageId; + + if ( tQuery.m_bHighlightQuery ) + MarkHits(); + + // assign word weights + ARRAY_FOREACH ( i, m_dWords ) + m_dWords[i].m_iWeight = m_dWords[i].m_iLengthCP; // FIXME! should obtain freqs from dict + + // reset result + m_dResult.Reserve ( 16384 ); + m_dResult.Resize ( 0 ); + m_iResultLen = 0; + + // do highlighting + if ( ( tQuery.m_iLimit<=0 || tQuery.m_iLimit>m_iTotalCP ) + && ( tQuery.m_iLimitWords<=0 || tQuery.m_iLimitWords>m_iDocumentWords ) ) + { + HighlightAll ( tQuery ); + + } else + { + if ( !( ExtractPassages ( tQuery ) && HighlightBestPassages ( tQuery ) ) ) + { + if ( tQuery.m_bAllowEmpty ) + HighlightStart ( tQuery ); + } + } + + // alloc, fill and return the result + m_dResult.Add ( 0 ); + char * pRes = new char [ m_dResult.GetLength() ]; + memcpy ( pRes, &m_dResult[0], m_dResult.GetLength() ); + m_dResult.Reset (); + + return pRes; +} + + +void ExcerptGen_c::HighlightPhrase ( const ExcerptQuery_t & q, int iTok, int iEnd ) +{ + int iPhrase = 0; + for ( ; iTok<=iEnd; iTok++ ) + { + bool bQWord = m_dTokens[iTok].m_uWords!=0; + + if ( bQWord && iPhrase==0 ) + ResultEmit ( q.m_sBeforeMatch.cstr(), q.m_bHasBeforePassageMacro, m_iPassageId, q.m_sBeforeMatchPassage.cstr() ); + + ResultEmit ( m_dTokens[iTok] ); + iPhrase += bQWord ? 1 : 0; + + if ( bQWord && iPhrase==m_dWords.GetLength() ) + { + ResultEmit ( q.m_sAfterMatch.cstr(), q.m_bHasAfterPassageMacro, m_iPassageId++, q.m_sAfterMatchPassage.cstr() ); + iPhrase = 0; + } + } +} + + +void ExcerptGen_c::HighlightAll ( const ExcerptQuery_t & q ) +{ + bool bOpen = false; + const int iMaxTok = m_dTokens.GetLength()-1; // skip last one, it's TOK_NONE + + if ( m_bExactPhrase ) + { + HighlightPhrase ( q, 0, iMaxTok ); + } else + { + // bag of words + for ( int iTok=0; iTok=m_dTokens.GetLength() ) + break; + } + ResultEmit ( q.m_sChunkSeparator.cstr() ); +} + + +void ExcerptGen_c::ResultEmit ( const char * sLine, bool bHasMacro, int iPassageId, const char * sPostPassage ) +{ + // plain old emit + while ( sLine && *sLine ) + { + assert ( (*(BYTE*)sLine)<128 ); + m_dResult.Add ( *sLine++ ); + m_iResultLen++; + } + + if ( !bHasMacro ) + return; + + char sBuf[16]; + int iPassLen = snprintf ( sBuf, sizeof(sBuf), "%d", iPassageId ); + for ( int i=0; i=0 ); + assert ( tSpan.m_iWords==iWord+1 ); + + // calc final weight + tPass.m_iQwordsWeight = 0; + tPass.m_iQwordCount = 0; + + DWORD uWords = tPass.m_uQwords; + for ( int iWord=0; uWords; uWords >>= 1, iWord++ ) + if ( uWords & 1 ) + { + tPass.m_iQwordsWeight += m_dWords[iWord].m_iWeight; + tPass.m_iQwordCount++; + } + + tPass.m_iMaxLCS *= iMaxWords; + tPass.m_iQwordCount *= iWordCountCoeff; +} + +void ExcerptGen_c::UpdateGaps ( Passage_t & tPass, const TokenSpan_t & tSpan, int iMaxWords ) +{ + tPass.m_iMinGap = iMaxWords-1; + tPass.m_iAroundBefore = tPass.m_iAroundAfter = 0; + DWORD uQwords = 0; + int iWord = -1; + for ( int iTok=tSpan.m_iStart; iTok<=tSpan.m_iEnd; iTok++ ) + { + Token_t & tTok = m_dTokens[iTok]; + if ( tTok.m_eType!=TOK_WORD ) + continue; + + iWord++; + if ( tTok.m_uWords ) + { + tPass.m_iMinGap = Min ( tPass.m_iMinGap, iWord ); + tPass.m_iMinGap = Min ( tPass.m_iMinGap, tSpan.m_iWords-1-iWord ); + } + + uQwords |= tTok.m_uWords; + tPass.m_iAroundBefore += ( uQwords==0 ); + tPass.m_iAroundAfter = ( tTok.m_uWords ? 0 : tPass.m_iAroundAfter+1 ); + } + assert ( tPass.m_iMinGap>=0 ); +} + + +static int GetWordsLimit ( const ExcerptQuery_t & q, int iQwords ) +{ + int iSoftLimit = 2*q.m_iAround + iQwords; + if ( q.m_iLimitWords ) + return Min ( iSoftLimit, q.m_iLimitWords ); + + return iSoftLimit; +} + + +bool ExcerptGen_c::SetupWindow ( TokenSpan_t & tSpan, Passage_t & tPass, int i, int iCpLimit, const ExcerptQuery_t & q ) +{ + assert ( i>=0 && i iCpLimit ) || tSpan.m_iWords>=GetWordsLimit ( q, tSpan.m_iQwords ) || tToken.m_eType==TOK_SPZ ) + { + tPass.m_iTokens += ( tToken.m_eType==TOK_SPZ && tToken.m_iLengthBytes>0 ); // only MAGIC_CODE_SENTENCE has length + return ( tToken.m_eType==TOK_SPZ ); + } + + // got token, update passage + tPass.m_iTokens++; + tPass.m_iCodes += tToken.m_iLengthCP; + + if ( tToken.m_eType==TOK_WORD ) + tSpan.Add ( i, m_dTokens[i].m_uWords!=0 ); + } + + return false; +} + +bool ExcerptGen_c::FlushPassage ( const Passage_t & tPass, int iLCSThresh ) +{ + if (!( tPass.m_uQwords && tPass.m_iMaxLCS>=iLCSThresh )) + return false; + + // if it's the very first one, do add + if ( !m_dPassages.GetLength() ) + { + m_dPassages.Add ( tPass ); + return true; + } + + // check if it's new or better + Passage_t & tLast = m_dPassages.Last(); + if ( ( tPass.m_iStartLimit<=tLast.m_iStartLimit && tLast.m_iEndLimit<=tPass.m_iEndLimit ) + || ( tLast.m_iStartLimit<=tPass.m_iStartLimit && tPass.m_iEndLimit<=tLast.m_iEndLimit ) ) + { + int iPassPre = tPass.m_iStartLimit - tPass.m_iStart + 1; + int iPassPost = tPass.m_iStart + tPass.m_iTokens - tPass.m_iEndLimit + 1; + float fPassGap = (float)Max ( iPassPre, iPassPost ) / (float)Min ( iPassPre, iPassPost ); + + int iLastPre = tLast.m_iStartLimit - tLast.m_iStart + 1; + int iLastPost = tLast.m_iStart + tLast.m_iTokens - tLast.m_iEndLimit + 1; + float fLastGap = (float)Max ( iLastPre, iLastPost ) / (float)Min ( iLastPre, iLastPost ); + + // centered snippet wins last passage + if ( tLast.GetWeight() iCpLimit || tSpan.m_iWords > GetWordsLimit ( q, tSpan.m_iQwords ) ) && tPass.m_iTokens!=1 ) + { + if ( m_dTokens[tPass.m_iStart].m_eType==TOK_WORD ) + { + // remove heading word from wordspan + assert ( m_dTokens[tSpan.m_iStart].m_eType==TOK_WORD ); + if ( m_dTokens[tSpan.m_iStart].m_uWords ) + { + tSpan.m_iQwords--; + bQwordsChanged = true; + } + tSpan.m_iStart++; + if ( tSpan.m_iStart > tSpan.m_iEnd ) + { + tSpan.Reset(); + } else + { + tSpan.m_iWords--; + while ( m_dTokens[tSpan.m_iStart].m_eType!=TOK_WORD ) + tSpan.m_iStart++; + } + } + + tPass.m_iCodes -= m_dTokens[tPass.m_iStart].m_iLengthCP; + tPass.m_iTokens--; + tPass.m_iStart++; + } + } + + return m_dPassages.GetLength()!=0; +} + + +bool ExcerptGen_c::ExtractPhrases ( const ExcerptQuery_t & ) +{ + int iMaxWords = 100; + int iLCSThresh = m_bExactPhrase ? m_dWords.GetLength()*iMaxWords : 0; + + int iStart = 0; + DWORD uWords = 0; + + ARRAY_FOREACH ( iTok, m_dTokens ) + { + // phrase boundary found, go flush + if ( m_dTokens[iTok].m_eType==TOK_BREAK || m_dTokens[iTok].m_eType==TOK_NONE ) + { + int iEnd = iTok - 1; + + // emit non-empty phrases with matching words as passages + if ( iStart=iLCSThresh ) + { + tPass.m_iWords = tSpan.m_iWords; + m_dPassages.Add ( tPass ); + } + } + + if ( m_dTokens[iTok].m_eType==TOK_NONE ) + break; + + iStart = iTok + 1; + uWords = 0; + } + + // just an incoming token + if ( m_dTokens[iTok].m_eType==TOK_WORD ) + uWords |= m_dTokens[iTok].m_uWords; + } + + return m_dPassages.GetLength()!=0; +} + + +struct PassageOrder_fn +{ + inline bool IsLess ( const ExcerptGen_c::Passage_t & a, const ExcerptGen_c::Passage_t & b ) const + { + return a.m_iStart < b.m_iStart; + } +}; + + +bool ExcerptGen_c::HighlightBestPassages ( const ExcerptQuery_t & tQuery ) +{ + assert ( m_dPassages.GetLength() ); + + // needed for "slightly outta limit" check below + int iKeywordsLength = 0; + ARRAY_FOREACH ( i, m_dKeywords ) + iKeywordsLength += m_dKeywords[i].m_iLength; + + // our limits + int iMaxPassages = tQuery.m_iLimitPassages + ? Min ( m_dPassages.GetLength(), tQuery.m_iLimitPassages ) + : m_dPassages.GetLength(); + int iMaxWords = tQuery.m_iLimitWords ? tQuery.m_iLimitWords : INT_MAX; + int iMaxCp = tQuery.m_iLimit ? tQuery.m_iLimit : INT_MAX; + + // our best passages + CSphVector dShow; + DWORD uWords = 0; // mask of words in dShow so far + int iTotalCodes = 0; + int iTotalWords = 0; + bool bAroundComply = true; + + CSphVector dWeights ( m_dPassages.GetLength() ); + ARRAY_FOREACH ( i, m_dPassages ) + dWeights[i] = m_dPassages[i].m_iQwordsWeight; + + // collect enough best passages to show all keywords and max out the limits + // don't care much if we're going over limits in this loop, it will be tightened below + bool bAll = false; + while ( dShow.GetLength() < iMaxPassages ) + { + // get next best passage + int iBest = -1; + ARRAY_FOREACH ( i, m_dPassages ) + { + if ( m_dPassages[i].m_iCodes && ( iBest==-1 || m_dPassages[iBest] < m_dPassages[i] ) ) + iBest = i; + } + if ( iBest<0 ) + break; + Passage_t & tBest = m_dPassages[iBest]; + + // does this passage fit the limits? + bool bFits = ( iTotalCodes + tBest.m_iCodes<=iMaxCp ) && ( iTotalWords + tBest.m_iWords<=iMaxWords ); + bAroundComply &= ( Max ( tBest.m_iAroundBefore, tBest.m_iAroundAfter )<=tQuery.m_iAround ); + + // all words will be shown and we're outta limit + if ( uWords==m_uFoundWords && !bFits ) + { + // there might be just enough space to partially display this passage + if ( ( iTotalCodes + iKeywordsLength )<=tQuery.m_iLimit ) + dShow.Add ( tBest ); + break; + } + + // save it, despite limits or whatever, we'll tighten everything in the loop below + dShow.Add ( tBest ); + uWords |= tBest.m_uQwords; + iTotalWords += tBest.m_iWords; + iTotalCodes += tBest.m_iCodes; + tBest.m_iCodes = 0; // no longer needed here, abusing to mark displayed passages + + // we just managed to show all words? do one final re-weighting run + if ( !bAll && uWords==m_uFoundWords ) + { + bAll = true; + ARRAY_FOREACH ( i, m_dPassages ) + m_dPassages[i].m_iQwordsWeight = dWeights[i]; + } + + // if we're already showing all words, re-weighting is not needed any more + if ( bAll ) + continue; + + // re-weight passages, adjust for new mask of shown words + ARRAY_FOREACH ( i, m_dPassages ) + { + if ( !m_dPassages[i].m_iCodes ) + continue; + DWORD uMask = tBest.m_uQwords; + for ( int iWord=0; uMask; iWord++, uMask >>= 1 ) + if ( ( uMask & 1 ) && ( m_dPassages[i].m_uQwords & ( 1UL< iMaxCp || iTotalWords > iMaxWords ) && !tQuery.m_bUseBoundaries ) + { + // trim passages + bool bFirst = true; + bool bDone = false; + int iCodes = iTotalCodes; + while ( !bDone ) + { + // drop one token from each passage starting from the least relevant + for ( int i=dShow.GetLength(); i > 0; i-- ) + { + Passage_t & tPassage = dShow[i-1]; + int iFirst = tPassage.m_iStart; + int iLast = tPassage.m_iStart + tPassage.m_iTokens - 1; + if ( iFirst!=tPassage.m_iStartLimit && ( bFirst || iLast==tPassage.m_iEndLimit ) ) + { + // drop first + if ( ( tQuery.m_bForceAllWords && m_dTokens[tPassage.m_iStart].m_uWords==0 ) + || !tQuery.m_bForceAllWords ) + tPassage.m_iStart++; + tPassage.m_iTokens--; + tPassage.m_iCodes -= m_dTokens[iFirst].m_iLengthCP; + iTotalCodes -= m_dTokens[iFirst].m_iLengthCP; + iTotalWords -= ( m_dTokens[iFirst].m_eType==TOK_WORD ); + + } else if ( iLast!=tPassage.m_iEndLimit ) + { + // drop last + if ( ( tQuery.m_bForceAllWords && m_dTokens[tPassage.m_iStart+tPassage.m_iTokens-1].m_uWords==0 ) + || !tQuery.m_bForceAllWords ) + tPassage.m_iTokens--; + tPassage.m_iCodes -= m_dTokens[iLast].m_iLengthCP; + iTotalCodes -= m_dTokens[iLast].m_iLengthCP; + iTotalWords -= ( m_dTokens[iLast].m_eType==TOK_WORD ); + } + if ( iTotalCodes<=iMaxCp && iTotalWords<=iMaxWords ) + { + bDone = true; + break; + } + } + if ( iTotalCodes==iCodes ) + break; // couldn't reduce anything + iCodes = iTotalCodes; + bFirst = !bFirst; + } + } + + // if passages still don't fit start dropping least significant ones, limit is sacred. + while ( ( iTotalCodes > iMaxCp || iTotalWords > iMaxWords ) && !tQuery.m_bForceAllWords ) + { + iTotalCodes -= dShow.Last().m_iCodes; + iTotalWords -= dShow.Last().m_iWords; + dShow.RemoveFast ( dShow.GetLength()-1 ); + } + + if ( !dShow.GetLength() ) + return false; + + // sort passages in the document order + if ( !tQuery.m_bWeightOrder ) + dShow.Sort ( PassageOrder_fn() ); + + /// show + int iLast = -1; + bool bEmitZones = tQuery.m_bEmitZones && m_dZones.GetLength(); + ARRAY_FOREACH ( i, dShow ) + { + int iTok = dShow[i].m_iStart; + int iEnd = iTok + dShow[i].m_iTokens - 1; + + if ( ( iLast>=0 && iLast1+iLast || tQuery.m_bWeightOrder ) + { + ResultEmit ( tQuery.m_sChunkSeparator.cstr() ); + // find and emit most enclosing zone + if ( bEmitZones ) + { + int iHighlightStart = m_dTokens[iTok].m_iStart; + int iZone = FindSpan ( m_dZonePos, iHighlightStart ); + if ( iZone!=-1 ) + { + int iParent = m_dZoneParent[iZone]; + m_hZones.IterateStart(); + while ( m_hZones.IterateNext() ) + { + if ( m_hZones.IterateGet()!=iParent ) + continue; + + ResultEmit ( "<" ); + ResultEmit ( m_hZones.IterateGetKey().cstr() ); + ResultEmit ( ">" ); + break; + } + } + } + } + + if ( m_bExactPhrase ) + HighlightPhrase ( tQuery, iTok, iEnd ); + else + { + while ( iTok<=iEnd ) + { + if ( iTok>iLast || tQuery.m_bWeightOrder ) + { + if ( m_dTokens[iTok].m_uWords ) + { + ResultEmit ( tQuery.m_sBeforeMatch.cstr(), tQuery.m_bHasBeforePassageMacro, m_iPassageId, tQuery.m_sBeforeMatchPassage.cstr() ); + ResultEmit ( m_dTokens[iTok] ); + ResultEmit ( tQuery.m_sAfterMatch.cstr(), tQuery.m_bHasAfterPassageMacro, m_iPassageId++, tQuery.m_sAfterMatchPassage.cstr() ); + } else + ResultEmit ( m_dTokens[iTok] ); + } + iTok++; + } + } + + iLast = tQuery.m_bWeightOrder ? iEnd : Max ( iLast, iEnd ); + } + if ( m_dTokens[iLast].m_eType!=TOK_NONE && m_dTokens[iLast+1].m_eType!=TOK_NONE ) + ResultEmit ( tQuery.m_sChunkSeparator.cstr() ); + + return true; +} + +////////////////////////////////////////////////////////////////////////// +// FAST PATH FOR FULL DOCUMENT HIGHLIGHTING +////////////////////////////////////////////////////////////////////////// + +struct DocQueryZonePair_t +{ + int m_iDoc; + int m_iQuery; + bool operator<( const DocQueryZonePair_t & b ) const { return m_iDoc( const DocQueryZonePair_t & b ) const { return m_iDoc>b.m_iDoc; } + bool operator==( const DocQueryZonePair_t & b ) const { return m_iDoc==b.m_iDoc; } +}; + +/// hit-in-zone check implementation for the matching engine +class SnippetZoneChecker_c : public ISphZoneCheck +{ +private: + struct ZoneHits_t + { + CSphVector m_dOpen; + CSphVector m_dClose; + }; + + CSphVector m_dZones; + +public: + SnippetZoneChecker_c ( const CSphVector & dDocZones, const SmallStringHash_T & hDocNames, const CSphVector & dQueryZones ) + { + if ( !dQueryZones.GetLength() ) + return; + + CSphVector dCheckedZones; + ARRAY_FOREACH ( i, dQueryZones ) + { + int * pZone = hDocNames ( dQueryZones[i] ); + if ( pZone ) + { + DocQueryZonePair_t & tPair = dCheckedZones.Add (); + tPair.m_iDoc = *pZone; + tPair.m_iQuery = i; + } + } + + dCheckedZones.Sort(); + m_dZones.Resize ( dQueryZones.GetLength() ); + + ARRAY_FOREACH ( i, dDocZones ) + { + uint64_t uZonePacked = dDocZones[i]; + DWORD uPos = (DWORD)( ( uZonePacked >>32 ) & UINT32_MASK ); + int iSibling = (int)( ( uZonePacked>>16 ) & UINT16_MASK ); + int iZone = (int)( uZonePacked & UINT16_MASK ); + assert ( iSibling>=0 && iSibling close zone position + // + zone type not in query zones + if ( iSibling<=i || uPos>=( ( dDocZones[iSibling]>>32 ) & UINT32_MASK ) ) + continue; + + DocQueryZonePair_t tRefZone; + tRefZone.m_iDoc = iZone; + const DocQueryZonePair_t * pPair = dCheckedZones.BinarySearch ( tRefZone ); + if ( !pPair ) + continue; + + uint64_t uClosePacked = dDocZones[iSibling]; + DWORD uClosePos = ( (int)( uClosePacked>>32 ) & UINT32_MASK ); + + ZoneHits_t & tZone = m_dZones[pPair->m_iQuery]; + tZone.m_dOpen.Add ( uPos ); + tZone.m_dClose.Add ( uClosePos ); + } + +#ifndef NDEBUG + ARRAY_FOREACH ( i, m_dZones ) + { + const ZoneHits_t & tZone = m_dZones[i]; + assert ( tZone.m_dOpen.GetLength()==tZone.m_dClose.GetLength() ); + const Hitpos_t * pHit = tZone.m_dOpen.Begin()+1; + const Hitpos_t * pMax = tZone.m_dOpen.Begin()+tZone.m_dOpen.GetLength(); + for ( ; pHitm_uHitpos ); + int iOpen = FindSpan ( m_dZones[iZone].m_dOpen, uPos ); + return ( iOpen>=0 && uPos<=m_dZones[iZone].m_dClose[iOpen] ) ? SPH_ZONE_FOUND : SPH_ZONE_NO_SPAN; + } +}; + +////////////////////////////////////////////////////////////////////////// + +/// mini-index for a single document +/// keeps query words +/// keeps hit lists for every query keyword +class SnippetsDocIndex_c : public ISphNoncopyable +{ +public: + // document related + DWORD m_uLastPos; + CSphVector< CSphVector > m_dDocHits; + + // query parsing result + XQQuery_t m_tQuery; + +protected: + // query keywords and parsing stuff + CSphVector m_dQueryWords; + CSphVector m_dStarWords; + CSphVector m_dStarBuffer; + + bool m_bQueryMode; + bool m_bSentence; + bool m_bParagraph; + BYTE m_sTmpWord [ 3*SPH_MAX_WORD_LEN + 16 ]; + +public: + explicit SnippetsDocIndex_c ( bool bQueryMode ); + void SetupHits (); + int FindWord ( SphWordID_t iWordID, const BYTE * sWord, int iWordLen ) const; + void AddHits ( SphWordID_t iWordID, const BYTE * sWord, int iWordLen, DWORD uPosition ); + bool Parse ( const char * sQuery, ISphTokenizer * pTokenizer, CSphDict * pDict, const CSphSchema * pSchema, CSphString & sError, int iStopwordStep ); + +protected: + bool MatchStar ( const ExcerptGen_c::Keyword_t & tTok, const BYTE * sWord, int iWordLen ) const; + void AddWord ( SphWordID_t iWordID ); + void AddWord ( const char * sWord, int iStarPosition ); + void ExtractWords ( XQNode_t * pNode, CSphDict * pDict ); +}; + + +SnippetsDocIndex_c::SnippetsDocIndex_c ( bool bQueryMode ) + : m_uLastPos ( 0 ) + , m_bQueryMode ( bQueryMode ) + , m_bSentence ( false ) + , m_bParagraph ( false ) +{} + + +void SnippetsDocIndex_c::SetupHits () +{ + m_dDocHits.Resize ( m_dQueryWords.GetLength() + m_dStarWords.GetLength() ); + m_uLastPos = 0; +} + + +bool SnippetsDocIndex_c::MatchStar ( const ExcerptGen_c::Keyword_t & tTok, const BYTE * sWord, int iWordLen ) const +{ + assert ( tTok.m_uStar!=STAR_NONE ); + const BYTE * sKeyword = m_dStarBuffer.Begin() + tTok.m_iWord; + + switch ( tTok.m_uStar ) + { + case STAR_FRONT: + { + int iOffset = iWordLen - tTok.m_iLength; + return ( iOffset>=0 ) && ( memcmp ( sKeyword, sWord + iOffset, tTok.m_iLength )==0 ); + } + + case STAR_BACK: + return ( iWordLen>=tTok.m_iLength ) && ( memcmp ( sKeyword, sWord, tTok.m_iLength )==0 ); + + case STAR_BOTH: + return strstr ( (const char *)sWord, (const char *)sKeyword )!=NULL; + } + return false; +} + + +int SnippetsDocIndex_c::FindWord ( SphWordID_t iWordID, const BYTE * sWord, int iWordLen ) const +{ + const SphWordID_t * pQueryID = iWordID ? m_dQueryWords.BinarySearch ( iWordID ) : NULL; + if ( pQueryID ) + return pQueryID - m_dQueryWords.Begin(); + + if ( sWord && iWordLen ) + ARRAY_FOREACH ( i, m_dStarWords ) + if ( MatchStar ( m_dStarWords[i], sWord, iWordLen ) ) + return i + m_dQueryWords.GetLength(); + + return -1; +} + + +void SnippetsDocIndex_c::AddHits ( SphWordID_t iWordID, const BYTE * sWord, int iWordLen, DWORD uPosition ) +{ + assert ( m_dDocHits.GetLength()==m_dQueryWords.GetLength()+m_dStarWords.GetLength() ); + + const SphWordID_t * pQueryWord = ( iWordID ? m_dQueryWords.BinarySearch ( iWordID ) : NULL ); + if ( pQueryWord ) + { + m_dDocHits [ pQueryWord - m_dQueryWords.Begin() ].Add ( uPosition ); + return; + } + + if ( sWord && iWordLen ) + ARRAY_FOREACH ( i, m_dStarWords ) + if ( MatchStar ( m_dStarWords[i], sWord, iWordLen ) ) + m_dDocHits [ m_dQueryWords.GetLength() + i ].Add ( uPosition ); +} + + +bool SnippetsDocIndex_c::Parse ( const char * sQuery, ISphTokenizer * pTokenizer, CSphDict * pDict, const CSphSchema * pSchema, CSphString & sError, int iStopwordStep ) +{ + if ( !m_bQueryMode ) + { + // parse bag-of-words query + int iQueryLen = strlen ( sQuery ); // FIXME!!! get length as argument + pTokenizer->SetBuffer ( (BYTE *)sQuery, iQueryLen ); + + BYTE * sWord = NULL; + // FIXME!!! add warning on query words overflow + while ( ( sWord = pTokenizer->GetToken() )!=NULL && ( m_dQueryWords.GetLength() + m_dStarWords.GetLength() )GetWordID ( sWord ); + if ( !uWordID ) + continue; + + bool bStarBack = ( *pTokenizer->GetTokenEnd()=='*' ); + bool bStarFront = ( pTokenizer->GetTokenStart()!=pTokenizer->GetBufferPtr() ) && + ( pTokenizer->GetTokenStart()[-1]=='*' ); + int uStar = ( bStarFront ? STAR_FRONT : 0 ) | ( bStarBack ? STAR_BACK : 0 ); + + if ( uStar ) + AddWord ( (const char *)sWord, uStar ); + else + AddWord ( uWordID ); + } + + } else + { + // parse extended query + if ( !sphParseExtendedQuery ( m_tQuery, sQuery, pTokenizer, pSchema, pDict, iStopwordStep ) ) + { + sError = m_tQuery.m_sParseError; + return false; + } + + m_tQuery.m_pRoot->ClearFieldMask(); + ExtractWords ( m_tQuery.m_pRoot, pDict ); + + if ( m_bSentence ) + { + strncpy ( (char *)m_sTmpWord, MAGIC_WORD_SENTENCE, sizeof(m_sTmpWord) ); + AddWord ( pDict->GetWordID ( m_sTmpWord ) ); + } + if ( m_bParagraph ) + { + strncpy ( (char *)m_sTmpWord, MAGIC_WORD_PARAGRAPH, sizeof(m_sTmpWord) ); + AddWord ( pDict->GetWordID ( m_sTmpWord ) ); + } + + // should be in sync with ExtRanker_c constructor + ARRAY_FOREACH ( i, m_tQuery.m_dZones ) + { + snprintf ( (char *)m_sTmpWord, sizeof(m_sTmpWord), "%c%s", MAGIC_CODE_ZONE, m_tQuery.m_dZones[i].cstr() ); + AddWord ( pDict->GetWordID ( m_sTmpWord ) ); + } + } + + // all ok, remove dupes, and return + m_dQueryWords.Uniq(); + assert ( !m_dStarWords.GetLength() || m_dStarBuffer.GetLength() ); + return true; +} + + +void SnippetsDocIndex_c::AddWord ( SphWordID_t iWordID ) +{ + assert ( iWordID ); + m_dQueryWords.Add ( iWordID ); +} + + +void SnippetsDocIndex_c::AddWord ( const char * sWord, int iStarPosition ) +{ + int iLen = strlen ( sWord ); + int iOff = m_dStarBuffer.GetLength(); + + m_dStarBuffer.Resize ( iOff+iLen+1 ); // reserve space for word + trailing zero + memcpy ( &m_dStarBuffer[iOff], sWord, iLen ); + m_dStarBuffer[iOff+iLen] = 0; + + ExcerptGen_c::Keyword_t & tTok = m_dStarWords.Add(); + tTok.m_iWord = iOff; + tTok.m_iLength = iLen; + tTok.m_uStar = iStarPosition; +} + + +void SnippetsDocIndex_c::ExtractWords ( XQNode_t * pNode, CSphDict * pDict ) +{ + m_bSentence |= ( pNode->GetOp()==SPH_QUERY_SENTENCE ); + m_bParagraph |= ( pNode->GetOp()==SPH_QUERY_PARAGRAPH ); + ARRAY_FOREACH ( i, pNode->m_dWords ) + { + const XQKeyword_t & tWord = pNode->m_dWords[i]; + if ( tWord.m_uStarPosition ) + { + AddWord ( tWord.m_sWord.cstr(), tWord.m_uStarPosition ); + } else + { + strncpy ( (char *)m_sTmpWord, tWord.m_sWord.cstr(), sizeof(m_sTmpWord) ); + SphWordID_t iWordID = pDict->GetWordID ( m_sTmpWord ); + if ( iWordID ) + AddWord ( iWordID ); + } + } + + ARRAY_FOREACH ( i, pNode->m_dChildren ) + ExtractWords ( pNode->m_dChildren[i], pDict ); +} + +////////////////////////////////////////////////////////////////////////// + +/// document token processor functor traits +class TokenFunctorTraits_c : public ISphNoncopyable, public ExcerptQuery_t +{ +public: + CSphVector m_dZones; + SmallStringHash_T m_hZones; + CSphVector m_dResult; + + SnippetsDocIndex_c & m_tContainer; + ISphTokenizer * m_pTokenizer; + CSphDict * m_pDict; + const char * m_pDoc; + + int m_iBoundaryStep; + int m_iStopwordStep; + bool m_bIndexExactWords; + int m_iDocLen; + + explicit TokenFunctorTraits_c ( SnippetsDocIndex_c & tContainer, ISphTokenizer * pTokenizer, CSphDict * pDict, const ExcerptQuery_t & tQuery, const CSphIndexSettings & tSettingsIndex, const char * sDoc, int iDocLen ) + : m_tContainer ( tContainer ) + , m_pTokenizer ( pTokenizer ) + , m_pDict ( pDict ) + , m_pDoc ( NULL ) + , m_iBoundaryStep ( tSettingsIndex.m_iBoundaryStep ) + , m_iStopwordStep ( tSettingsIndex.m_iStopwordStep ) + , m_bIndexExactWords ( tSettingsIndex.m_bIndexExactWords ) + , m_iDocLen ( iDocLen ) + { + assert ( m_pTokenizer && m_pDict ); + ExcerptQuery_t::operator = ( tQuery ); + m_pTokenizer->SetBuffer ( (BYTE*)sDoc, m_iDocLen ); + m_pDoc = m_pTokenizer->GetBufferPtr(); + } + + void ResultEmit ( const char * pSrc, int iLen, bool bHasPassageMacro=false, int iPassageId=0, const char * pPost=NULL, int iPostLen=0 ) + { + if ( iLen>0 ) + { + int iOutLen = m_dResult.GetLength(); + m_dResult.Resize ( iOutLen+iLen ); + memcpy ( &m_dResult[iOutLen], pSrc, iLen ); + } + + if ( !bHasPassageMacro ) + return; + + char sBuf[16]; + int iPassLen = snprintf ( sBuf, sizeof(sBuf), "%d", iPassageId ); + int iOutLen = m_dResult.GetLength(); + m_dResult.Resize ( iOutLen + iPassLen + iPostLen ); + + if ( iPassLen ) + memcpy ( m_dResult.Begin()+iOutLen, sBuf, iPassLen ); + if ( iPostLen ) + memcpy ( m_dResult.Begin()+iOutLen+iPassLen, pPost, iPostLen ); + } + + virtual void OnOverlap ( int iStart, int iLen ) = 0; + virtual void OnSkipHtml ( int iStart, int iLen ) = 0; + virtual void OnToken ( int iStart, int iLen, const BYTE * sWord, DWORD uPosition, const CSphVector & dWordids ) = 0; + virtual void OnSPZ ( BYTE iSPZ, DWORD uPosition, char * sZoneName ) = 0; + virtual void OnTail ( int iStart, int iLen ) = 0; + virtual void OnFinish () = 0; + virtual const CSphVector * GetHitlist ( const XQKeyword_t & tWord ) const = 0; +}; + + +/// functor that processes tokens and collects matching keyword hits into mini-index +class HitCollector_c : public TokenFunctorTraits_c +{ +public: + mutable BYTE m_sTmpWord [ 3*SPH_MAX_WORD_LEN + 16 ]; + SphWordID_t m_uSentenceID; + SphWordID_t m_uParagraphID; + +public: + explicit HitCollector_c ( SnippetsDocIndex_c & tContainer, ISphTokenizer * pTokenizer, CSphDict * pDict, const ExcerptQuery_t & tQuery, const CSphIndexSettings & tSettingsIndex, const char * sDoc, int iDocLen ) + : TokenFunctorTraits_c ( tContainer, pTokenizer, pDict, tQuery, tSettingsIndex, sDoc, iDocLen ) + { + strncpy ( (char *)m_sTmpWord, MAGIC_WORD_SENTENCE, sizeof(m_sTmpWord) ); + m_uSentenceID = pDict->GetWordID ( m_sTmpWord ); + strncpy ( (char *)m_sTmpWord, MAGIC_WORD_PARAGRAPH, sizeof(m_sTmpWord) ); + m_uParagraphID = pDict->GetWordID ( m_sTmpWord ); + m_tContainer.SetupHits(); + } + + virtual ~HitCollector_c () {} + + virtual void OnToken ( int, int iLen, const BYTE * sWord, DWORD uPosition, const CSphVector & dWordids ) + { + bool bReal = false; + ARRAY_FOREACH ( i, dWordids ) + if ( dWordids[i] ) + { + m_tContainer.AddHits ( dWordids[i], sWord, iLen, uPosition ); + bReal = true; + } + m_tContainer.m_uLastPos = bReal ? uPosition : m_tContainer.m_uLastPos; + } + + virtual void OnSPZ ( BYTE iSPZ, DWORD uPosition, char * sZoneName ) + { + switch ( iSPZ ) + { + case MAGIC_CODE_SENTENCE: + m_tContainer.AddHits ( m_uSentenceID, NULL, 0, uPosition ); + break; + case MAGIC_CODE_PARAGRAPH: + m_tContainer.AddHits ( m_uParagraphID, NULL, 0, uPosition ); + break; + case MAGIC_CODE_ZONE: + assert ( m_dZones.GetLength() ); + assert ( ( ( m_dZones.Last()>>32 ) & UINT32_MASK )==uPosition ); + assert ( sZoneName ); + + m_tContainer.AddHits ( m_pDict->GetWordID ( (BYTE *)sZoneName ), NULL, 0, uPosition ); + break; + default: assert ( 0 && "impossible SPZ" ); + } + + m_tContainer.m_uLastPos = uPosition; + } + + virtual const CSphVector * GetHitlist ( const XQKeyword_t & tWord ) const + { + int iWord = -1; + if ( tWord.m_uStarPosition ) + { + iWord = m_tContainer.FindWord ( 0, (const BYTE *)tWord.m_sWord.cstr(), tWord.m_sWord.Length() ); + } else + { + strncpy ( (char *)m_sTmpWord, tWord.m_sWord.cstr(), sizeof(m_sTmpWord) ); + SphWordID_t iWordID = m_pDict->GetWordID ( m_sTmpWord ); + if ( iWordID ) + iWord = m_tContainer.FindWord ( iWordID, NULL, 0 ); + } + + if ( iWord!=-1 ) + return m_tContainer.m_dDocHits.Begin()+iWord; + else + return NULL; + } + + virtual void OnOverlap ( int, int ) {} + virtual void OnSkipHtml ( int, int ) {} + virtual void OnTail ( int, int ) {} + virtual void OnFinish () {} +}; + + +/// functor that matches tokens against query words from mini-index and highlights them +class HighlightPlain_c : public TokenFunctorTraits_c +{ +protected: + int m_iBeforeLen; + int m_iAfterLen; + int m_iBeforePostLen; + int m_iAfterPostLen; + +public: + HighlightPlain_c ( SnippetsDocIndex_c & tContainer, ISphTokenizer * pTokenizer, CSphDict * pDict, const ExcerptQuery_t & tQuery, const CSphIndexSettings & tSettingsIndex, const char * sDoc, int iDocLen ) + : TokenFunctorTraits_c ( tContainer, pTokenizer, pDict, tQuery, tSettingsIndex, sDoc, iDocLen ) + , m_iBeforeLen ( tQuery.m_sBeforeMatch.Length() ) + , m_iAfterLen ( tQuery.m_sAfterMatch.Length() ) + , m_iBeforePostLen ( tQuery.m_sBeforeMatchPassage.Length() ) + , m_iAfterPostLen ( tQuery.m_sAfterMatchPassage.Length() ) + { + m_dResult.Reserve ( m_iDocLen ); + } + + virtual ~HighlightPlain_c () {} + + virtual void OnOverlap ( int iStart, int iLen ) + { + assert ( m_pDoc ); + assert ( iStart>=0 && m_pDoc+iStart+iLen<=m_pTokenizer->GetBufferEnd() ); + ResultEmit ( m_pDoc+iStart, iLen ); + } + + virtual void OnSkipHtml ( int iStart, int iLen ) + { + assert ( m_pDoc ); + assert ( iStart>=0 && m_pDoc+iStart+iLen<=m_pTokenizer->GetBufferEnd() ); + ResultEmit ( m_pDoc+iStart, iLen ); + } + + virtual void OnToken ( int iStart, int iLen, const BYTE * sWord, DWORD, const CSphVector & dWordids ) + { + assert ( m_pDoc ); + assert ( iStart>=0 && m_pDoc+iStart+iLen<=m_pTokenizer->GetBufferEnd() ); + + bool bMatch = m_tContainer.FindWord ( dWordids[0], sWord , iLen )!=-1; // the primary one; need this for star matching + for ( int i=1; i=0 && m_pDoc+iStart+iLen<=m_pTokenizer->GetBufferEnd() ); + ResultEmit ( m_pDoc+iStart, iLen ); + } + + virtual void OnFinish () {} + + virtual const CSphVector * GetHitlist ( const XQKeyword_t & ) const + { + return NULL; + } +}; + + +/// functor that matches tokens against hit positions from mini-index and highlights them +class HighlightQuery_c : public HighlightPlain_c +{ +public: + const SphHitMark_t * m_pHit; + const SphHitMark_t * m_pHitEnd; + +public: + HighlightQuery_c ( SnippetsDocIndex_c & tContainer, ISphTokenizer * pTokenizer, CSphDict * pDict, const ExcerptQuery_t & tQuery, const CSphIndexSettings & tSettingsIndex, const char * sDoc, int iDocLen, const CSphVector & dHits ) + : HighlightPlain_c ( tContainer, pTokenizer, pDict, tQuery, tSettingsIndex, sDoc, iDocLen ) + , m_pHit ( dHits.Begin() ) + , m_pHitEnd ( dHits.Begin()+dHits.GetLength() ) + {} + + virtual ~HighlightQuery_c () {} + + virtual void OnToken ( int iStart, int iLen, const BYTE *, DWORD uPosition, const CSphVector & ) + { + assert ( m_pDoc ); + assert ( iStart>=0 && m_pDoc+iStart+iLen<=m_pTokenizer->GetBufferEnd() ); + + // fast forward until next potentially matching hit (hits are sorted by position) + while ( m_pHitm_uPosition+m_pHit->m_uSpan<=uPosition ) + m_pHit++; + + // marker folding, emit "before" marker at span start only + if ( m_pHitm_uPosition ) + ResultEmit ( m_sBeforeMatch.cstr(), m_iBeforeLen, m_bHasBeforePassageMacro, m_iPassageId, m_sBeforeMatchPassage.cstr(), m_iBeforePostLen ); + + // emit token itself + ResultEmit ( m_pDoc+iStart, iLen ); + + // marker folding, emit "after" marker at span end only + if ( m_pHitm_uPosition+m_pHit->m_uSpan-1 ) + ResultEmit ( m_sAfterMatch.cstr(), m_iAfterLen, m_bHasAfterPassageMacro, m_iPassageId++, m_sAfterMatchPassage.cstr(), m_iAfterPostLen ); + } +}; + + +// make zone name lowercase +static void CopyZoneName ( CSphVector & dName, const char * sZone, int iLen ) +{ + dName.Resize ( iLen+1 ); + char * pDst = dName.Begin(); + const char * pEnd = sZone + iLen; + while ( sZone & dZoneStack, CSphVector & dZoneName +#ifndef NDEBUG + , const char * pBuf + , CSphVector & dZonePos +#endif + ) +{ + CSphVector & dZones = tFunctor.m_dZones; + SmallStringHash_T & hZones = tFunctor.m_hZones; + + // span's management + if ( *pStart!='/' ) // open zone + { +#ifndef NDEBUG + // zone position in characters + dZonePos.Add ( pStart-pBuf ); +#endif + + // zone stack management + int iSelf = dZones.GetLength(); + dZoneStack.Add ( iSelf ); + + // add zone itself + int iZoneNameLen = pEnd-pStart-1; + CopyZoneName ( dZoneName, pStart, iZoneNameLen ); + + int iZone = FindAddZone ( dZoneName.Begin(), iZoneNameLen, hZones ); + dZones.Add ( sphPackZone ( uPosition, iSelf, iZone ) ); + } else // close zone + { +#ifndef NDEBUG + // lets check open - close tags match + assert ( dZoneStack.GetLength() && dZoneStack.Last()>32 ) & UINT32_MASK ); + assert ( iZone==(int)( uOpenPacked & UINT16_MASK ) ); // check for zone's types match; + + dZones[iOpen] = sphPackZone ( uOpenPos, iClose, iZone ); + dZones.Add ( sphPackZone ( uPosition, iOpen, iZone ) ); + +#ifndef NDEBUG + // zone position in characters + dZonePos.Add ( pStart-pBuf ); +#endif + + + // pop up current zone from zone's stack + dZoneStack.Resize ( dZoneStack.GetLength()-1 ); + } +} + + +/// tokenize document using a given functor +static void TokenizeDocument ( TokenFunctorTraits_c & tFunctor, const CSphHTMLStripper * pStripper ) +{ + ISphTokenizer * pTokenizer = tFunctor.m_pTokenizer; + CSphDict * pDict = tFunctor.m_pDict; + + const char * pStartPtr = pTokenizer->GetBufferPtr (); + const char * pLastTokenEnd = pStartPtr; + const char * pBufferEnd = pTokenizer->GetBufferEnd(); + assert ( pStartPtr && pLastTokenEnd ); + + bool bRetainHtml = tFunctor.m_sStripMode=="retain"; + int iSPZ = tFunctor.m_iPassageBoundary; + int uPosition = 0; + BYTE * sWord = NULL; + SphWordID_t iBlendID = 0; + SphWordID_t iBlendedExactID = 0; + const char * pBlendedEnd = NULL; + + CSphVector dZoneStack; + CSphVector dZoneName ( 16+3*SPH_MAX_WORD_LEN ); + BYTE sExactBuf [ 3*SPH_MAX_WORD_LEN+4 ]; + BYTE sNonStemmed [ 3*SPH_MAX_WORD_LEN+3]; + + // FIXME!!! replace by query SPZ extraction pass + if ( !iSPZ && ( bRetainHtml && tFunctor.m_bHighlightQuery ) ) + iSPZ = MAGIC_CODE_ZONE; + +#ifndef NDEBUG + CSphVector dZonePos; +#endif + + const bool bUtf8 = pTokenizer->IsUtf8(); + while ( ( sWord = pTokenizer->GetToken() )!=NULL ) + { + if ( pTokenizer->TokenIsBlended() ) + { + if ( pBlendedEndGetTokenEnd() ) + { + iBlendID = pDict->GetWordID ( sWord ); + iBlendedExactID = 0; + pBlendedEnd = pTokenizer->GetTokenEnd(); + + if ( tFunctor.m_bHighlightQuery && tFunctor.m_bIndexExactWords ) + { + int iLen = strlen ( (const char *)sWord ); + if ( iLen+2>sizeof(sExactBuf) ) + iLen = sizeof(sExactBuf)-2; + memcpy ( sExactBuf + 1, sWord, iLen ); + sExactBuf[0] = MAGIC_WORD_HEAD_NONSTEMMED; + sExactBuf[iLen+1] = '\0'; + iBlendedExactID = pDict->GetWordIDNonStemmed ( sExactBuf ); + } + } + continue; + } + + uPosition += pTokenizer->GetOvershortCount(); + + const char * pTokenStart = pTokenizer->GetTokenStart (); + + if ( pTokenStart>pLastTokenEnd ) + { + tFunctor.OnOverlap ( pLastTokenEnd-pStartPtr, pTokenStart - pLastTokenEnd ); + pLastTokenEnd = pTokenStart; + } + + if ( bRetainHtml && *pTokenStart=='<' ) + { + const CSphHTMLStripper::StripperTag_t * pTag = NULL; + const BYTE * sZoneName = NULL; + const char * pEndSPZ = NULL; + int iZoneNameLen = 0; + if ( iSPZ && pStripper && pTokenStart+2IsValidTagStart ( *(pTokenStart+1) ) || pTokenStart[1]=='/') ) + { + pEndSPZ = (const char *)pStripper->FindTag ( (const BYTE *)pTokenStart+1, &pTag, &sZoneName, &iZoneNameLen ); + } + + // regular HTML markup - keep it + int iTagEnd = FindTagEnd ( pTokenStart ); + if ( iTagEnd!=-1 ) + { + assert ( pTokenStart+iTagEndGetBufferEnd() ); + tFunctor.OnSkipHtml ( pTokenStart-pStartPtr, iTagEnd+1 ); + pTokenizer->SetBufferPtr ( pTokenStart+iTagEnd+1 ); + pLastTokenEnd = pTokenStart+iTagEnd+1; // fix it up to prevent adding last chunk on exit + } + + if ( pTag ) // (!S)PZ fix-up + { + pEndSPZ += ( pEndSPZ+1<=pBufferEnd && ( *pEndSPZ )!='\0' ); // skip closing angle bracket, if any + + assert ( pTag->m_bPara || pTag->m_bZone ); + assert ( pTag->m_bPara || pEndSPZ[0]=='\0' || pEndSPZ[-1]=='>' ); // should be at tag's end + assert ( pEndSPZ && pEndSPZ<=pBufferEnd ); + + uPosition++; + + // handle paragraph boundaries + if ( pTag->m_bPara ) + { + tFunctor.OnSPZ ( MAGIC_CODE_PARAGRAPH, uPosition, NULL ); + } else if ( pTag->m_bZone ) // handle zones + { +#ifndef NDEBUG + AddZone ( pTokenStart+1, pTokenStart+2+iZoneNameLen, uPosition, tFunctor, dZoneStack, dZoneName, pStartPtr, dZonePos ); +#else + AddZone ( pTokenStart+1, pTokenStart+2+iZoneNameLen, uPosition, tFunctor, dZoneStack, dZoneName ); +#endif + tFunctor.OnSPZ ( MAGIC_CODE_ZONE, uPosition, dZoneName.Begin() ); + } + } + + if ( iTagEnd ) + continue; + } + + // handle SPZ tokens GE then needed + // add SENTENCE, PARAGRAPH, ZONE token, do junks and tokenizer and pLastTokenEnd fix up + // FIXME!!! it heavily depends on such attitude MAGIC_CODE_SENTENCE < MAGIC_CODE_PARAGRAPH < MAGIC_CODE_ZONE + if ( *sWord==MAGIC_CODE_SENTENCE || *sWord==MAGIC_CODE_PARAGRAPH || *sWord==MAGIC_CODE_ZONE ) + { + // SPZ token has position and could be last token too + uPosition += ( iSPZ && *sWord>=iSPZ ); + + if ( *sWord==MAGIC_CODE_ZONE ) + { + const char * pZoneEnd = pTokenizer->GetBufferPtr(); + const char * pZoneStart = pZoneEnd; + while ( *pZoneEnd && *pZoneEnd!=MAGIC_CODE_ZONE ) + pZoneEnd++; + pZoneEnd++; // skip zone token too + pTokenizer->SetBufferPtr ( pZoneEnd ); + pLastTokenEnd = pZoneEnd; // fix it up to prevent adding last chunk on exit + +#ifndef NDEBUG + AddZone ( pZoneStart, pZoneEnd, uPosition, tFunctor, dZoneStack, dZoneName, pStartPtr, dZonePos ); +#else + AddZone ( pZoneStart, pZoneEnd, uPosition, tFunctor, dZoneStack, dZoneName ); +#endif + } + + if ( iSPZ && *sWord>=iSPZ ) + { + tFunctor.OnSPZ ( *sWord, uPosition, dZoneName.Begin() ); + } + continue; + } + + pLastTokenEnd = pTokenizer->GetTokenEnd (); + int iWordLen = pLastTokenEnd - pTokenStart; + + // build wordids vector + // (exact form, blended, substrings all yield multiple ids) + // TODO! only doing exact currently; add everything else (blended/star) here too + CSphVector dWordids; + dWordids.Add ( 0 ); // will be fixed up later with "primary" wordid + if ( tFunctor.m_bHighlightQuery && tFunctor.m_bIndexExactWords ) + { + int iBytes = iWordLen; + if ( iBytes+2>sizeof(sExactBuf) ) + iBytes = sizeof(sExactBuf)-2; + memcpy ( sExactBuf + 1, sWord, iBytes ); + sExactBuf[0] = MAGIC_WORD_HEAD_NONSTEMMED; + sExactBuf[iBytes+1] = '\0'; + dWordids.Add ( pDict->GetWordIDNonStemmed ( sExactBuf ) ); + } + + int iNonStemmedLen = iWordLen; + if ( iNonStemmedLen+1>sizeof(sNonStemmed) ) + iNonStemmedLen = sizeof(sNonStemmed)-1; + + memcpy ( sNonStemmed, sWord, iNonStemmedLen ); + sNonStemmed[iNonStemmedLen] = '\0'; + // must be last because it can change (stem) sWord + SphWordID_t iWord = pDict->GetWordID ( sWord ); + dWordids[0] = iWord; + + // compute position + if ( pTokenizer->GetBoundary() ) + uPosition += tFunctor.m_iBoundaryStep; + + bool bIsStopWord = false; + if ( !iWord ) + bIsStopWord = pDict->IsStopWord ( sWord ); + + if ( iWord || bIsStopWord ) + uPosition += bIsStopWord ? tFunctor.m_iStopwordStep : 1; + + ExcerptGen_c::Token_t tDocTok; + tDocTok.m_eType = ( iWord || bIsStopWord ) ? ExcerptGen_c::TOK_WORD : ExcerptGen_c::TOK_SPACE; + tDocTok.m_uPosition = ( iWord || bIsStopWord ) ? uPosition : 0; + tDocTok.m_iStart = pTokenStart - pStartPtr; + tDocTok.m_iLengthBytes = tDocTok.m_iLengthCP = iWordLen; + if ( bUtf8 && ( iWord || bIsStopWord ) ) + tDocTok.m_iLengthCP = sphUTF8Len ( pTokenStart, tDocTok.m_iLengthBytes ); + + if ( !pTokenizer->TokenIsBlendedPart() ) + { + iBlendID = 0; + iBlendedExactID = 0; + } else + { + dWordids.Add ( iBlendID ); + if ( iBlendedExactID ) + dWordids.Add ( iBlendedExactID ); + } + + // match & emit + // star match needs non-stemmed word + tFunctor.OnToken ( tDocTok.m_iStart, tDocTok.m_iLengthBytes, sNonStemmed, tDocTok.m_uPosition, dWordids ); + } + + // last space if any + if ( pLastTokenEnd!=pTokenizer->GetBufferEnd() ) + tFunctor.OnTail ( pLastTokenEnd-pStartPtr, pTokenizer->GetBufferEnd() - pLastTokenEnd ); + + tFunctor.OnFinish(); +} + + +/// snippets query words for different cases +class SnippetsFastQword_c : public ISphQword +{ +public: + const CSphVector * m_pHits; + CSphMatch m_tMatch; + DWORD m_uLastPos; + +public: + explicit SnippetsFastQword_c ( const CSphVector * pHits ) + : m_pHits ( pHits ) + , m_uLastPos ( 0 ) + {} + + virtual ~SnippetsFastQword_c () {} + + void Setup ( DWORD uLastPos ) + { + m_iDocs = 0; + m_iHits = 0; + m_uLastPos = uLastPos; + if ( m_pHits ) + { + m_iDocs = 1; + m_iHits = m_pHits->GetLength(); + m_uMatchHits = 0; + m_bHasHitlist = true; + } + } + + bool HasHits () const + { + return m_pHits && m_uMatchHits<(DWORD)m_pHits->GetLength(); + } + + virtual const CSphMatch & GetNextDoc ( DWORD * ) + { + m_dFields.Set(); + m_tMatch.m_iDocID = !m_tMatch.m_iDocID && HasHits() ? 1 : 0; + return m_tMatch; + } + + virtual Hitpos_t GetNextHit () + { + if ( !HasHits() ) + return EMPTY_HIT; + + int iPosition = *( m_pHits->Begin() + m_uMatchHits++ ); + return HITMAN::Create ( 0, iPosition, (m_uLastPos==(DWORD)iPosition) ); + } + + virtual void SeekHitlist ( SphOffset_t ) {} +}; + + +/// snippets query word setup +class SnippetsFastQwordSetup_c : public ISphQwordSetup +{ +public: + const HitCollector_c * m_pHiglighter; + +public: + explicit SnippetsFastQwordSetup_c ( const HitCollector_c * pHiglighter ) + { + m_pHiglighter = pHiglighter; + } + + virtual ~SnippetsFastQwordSetup_c () {} + + virtual ISphQword * QwordSpawn ( const XQKeyword_t & tWord ) const + { + return new SnippetsFastQword_c ( m_pHiglighter->GetHitlist ( tWord ) ); + } + + virtual bool QwordSetup ( ISphQword * pQword ) const + { + SnippetsFastQword_c * pWord = dynamic_cast ( pQword ); + assert ( pWord ); + + pWord->Setup ( m_pHiglighter->m_tContainer.m_uLastPos ); + return true; + } +}; + + +inline bool operator < ( const SphHitMark_t & a, const SphHitMark_t & b ) +{ + return a.m_uPosition < b.m_uPosition; +} + + +static char * HighlightAllFastpath ( const ExcerptQuery_t & tQuerySettings, + const CSphIndexSettings & tIndexSettings, + const char * sDoc, int iDocLen, + CSphDict * pDict, ISphTokenizer * pTokenizer, const CSphHTMLStripper * pStripper, + const CSphSchema * pSchema, CSphString & sError, + ISphTokenizer * pQueryTokenizer ) +{ + ExcerptQuery_t tFixedSettings ( tQuerySettings ); + + // exact_phrase is replaced by query_mode=1 + "query words" + if ( tQuerySettings.m_bExactPhrase ) + { + if ( !tQuerySettings.m_bHighlightQuery && tQuerySettings.m_sWords.Length() && strchr ( tQuerySettings.m_sWords.cstr(), 0x22 )==NULL ) + tFixedSettings.m_sWords.SetSprintf ( "\"%s\"", tQuerySettings.m_sWords.cstr() ); + + tFixedSettings.m_bHighlightQuery = true; + } + + bool bRetainHtml = ( tFixedSettings.m_sStripMode=="retain" ); + + // adjust tokenizer for markup-retaining mode + if ( bRetainHtml ) + pTokenizer->AddSpecials ( "<" ); + + // create query and hit lists container, parse query + SnippetsDocIndex_c tContainer ( tFixedSettings.m_bHighlightQuery ); + if ( !tContainer.Parse ( tFixedSettings.m_sWords.cstr(), pQueryTokenizer, pDict, pSchema, sError, tIndexSettings.m_iStopwordStep ) ) + return NULL; + + // do highlighting + if ( !tFixedSettings.m_bHighlightQuery ) + { + // simple bag of words query + // do just one tokenization pass over the document, matching and highlighting keywords + HighlightPlain_c tHighlighter ( tContainer, pTokenizer, pDict, tFixedSettings, tIndexSettings, sDoc, iDocLen ); + TokenizeDocument ( tHighlighter, NULL ); + + // add trailing zero, and return + tHighlighter.m_dResult.Add ( 0 ); + return (char*) tHighlighter.m_dResult.LeakData(); + + } else + { + // query with syntax + // do two passes over document + // 1st pass will tokenize document, match keywords, and store positions into docindex + // 2nd pass will highlight matching positions only (with some matching engine aid) + + // do the 1st pass + HitCollector_c tHitCollector ( tContainer, pTokenizer, pDict, tFixedSettings, tIndexSettings, sDoc, iDocLen ); + TokenizeDocument ( tHitCollector, pStripper ); + + // prepare for the 2nd pass (that is, extract matching hits) + SnippetZoneChecker_c tZoneChecker ( tHitCollector.m_dZones, tHitCollector.m_hZones, tContainer.m_tQuery.m_dZones ); + + SnippetsFastQwordSetup_c tQwordSetup ( &tHitCollector ); + tQwordSetup.m_pDict = pDict; + tQwordSetup.m_eDocinfo = SPH_DOCINFO_EXTERN; + tQwordSetup.m_pWarning = &sError; + tQwordSetup.m_pZoneChecker = &tZoneChecker; + + CSphScopedPtr pMarker ( CSphHitMarker::Create ( tContainer.m_tQuery.m_pRoot, tQwordSetup ) ); + if ( !pMarker.Ptr() ) + return NULL; + + CSphVector dMarked; + pMarker->Mark ( dMarked ); + + // we just collected matching spans into dMarked, but! + // certain spans might not match all words within the span + // for instance, (one NEAR/3 two) could return a 5-word span + // but we do have full matching keywords list in tContainer + // so let's post-process and break down such spans + // FIXME! what about phrase spans vs stopwords? they will be split now + if ( !tQuerySettings.m_bExactPhrase ) + ARRAY_FOREACH ( i, dMarked ) + { + if ( dMarked[i].m_uSpan==1 ) + continue; + + CSphVector dMatched; + for ( int j=0; j<(int)dMarked[i].m_uSpan; j++ ) + { + // OPTIMZE? we can premerge all dochits vectors once + const int iPos = dMarked[i].m_uPosition + j; + ARRAY_FOREACH ( k, tContainer.m_dDocHits ) + if ( tContainer.m_dDocHits[k].BinarySearch ( iPos ) ) + { + dMatched.Add ( iPos ); + break; + } + } + + // this is something that must never happen + // we got a span out of the matching engine that does not match any keywords?! + assert ( dMatched.GetLength() ); + if ( !dMatched.GetLength() ) + { + dMarked.RemoveFast ( i-- ); // remove, rescan + continue; + } + + // append all matching keywords as 1-long spans + ARRAY_FOREACH ( j, dMatched ) + { + SphHitMark_t & tMarked = dMarked.Add(); + tMarked.m_uPosition = dMatched[j]; + tMarked.m_uSpan = 1; + } + + // this swaps current span with the last 1-long span we added + // which is by definition okay; so we need not rescan it + dMarked.RemoveFast ( i ); + } + dMarked.Uniq(); + + // we just exploded spans into actual matching hits + // now lets fold marked and matched hits back into contiguous spans + // so that we could highlight such spans instead of every individual word + SphHitMark_t * pOut = dMarked.Begin(); // last emitted folded token + SphHitMark_t * pIn = dMarked.Begin() + 1; // next token to process + SphHitMark_t * pMax = dMarked.Begin() + dMarked.GetLength(); + while ( pInm_uPosition==( pOut->m_uPosition + pOut->m_uSpan ) ) + { + pOut->m_uSpan += pIn->m_uSpan; + pIn++; + } else + { + *++pOut = *pIn++; + } + } + if ( dMarked.GetLength()>1 ) + dMarked.Resize ( pOut - dMarked.Begin() + 1 ); + + // 2nd pass + HighlightQuery_c tHighlighter ( tContainer, pTokenizer, pDict, tFixedSettings, tIndexSettings, sDoc, iDocLen, dMarked ); + TokenizeDocument ( tHighlighter, pStripper ); + + // add trailing zero, and return + tHighlighter.m_dResult.Add ( 0 ); + return (char*) tHighlighter.m_dResult.LeakData(); + } +} + +///////////////////////////////////////////////////////////////////////////// + +ExcerptQuery_t::ExcerptQuery_t () + : m_sBeforeMatch ( "" ) + , m_sAfterMatch ( "" ) + , m_sChunkSeparator ( " ... " ) + , m_sStripMode ( "index" ) + , m_iLimit ( 256 ) + , m_iLimitWords ( 0 ) + , m_iLimitPassages ( 0 ) + , m_iAround ( 5 ) + , m_iPassageId ( 1 ) + , m_iPassageBoundary ( 0 ) + , m_bRemoveSpaces ( false ) + , m_bExactPhrase ( false ) + , m_bUseBoundaries ( false ) + , m_bWeightOrder ( false ) + , m_bHighlightQuery ( false ) + , m_bForceAllWords ( false ) + , m_bLoadFiles ( false ) + , m_bAllowEmpty ( false ) + , m_bEmitZones ( false ) + , m_iRawFlags ( 0 ) + , m_iSize ( 0 ) + , m_iSeq ( 0 ) + , m_iNext ( -1 ) + , m_sRes ( NULL ) + , m_bHasBeforePassageMacro ( false ) + , m_bHasAfterPassageMacro ( false ) +{ +} + +///////////////////////////////////////////////////////////////////////////// + + +char * sphBuildExcerpt ( ExcerptQuery_t & tOptions, CSphDict * pDict, ISphTokenizer * pTokenizer, const CSphSchema * pSchema, CSphIndex * pIndex, CSphString & sError, const CSphHTMLStripper * pStripper, ISphTokenizer * pQueryTokenizer ) +{ + if ( tOptions.m_sStripMode=="retain" + && !( tOptions.m_iLimit==0 && tOptions.m_iLimitPassages==0 && tOptions.m_iLimitWords==0 ) ) + { + sError = "html_strip_mode=retain requires that all limits are zero"; + return NULL; + } + + if ( !tOptions.m_sWords.cstr()[0] ) + tOptions.m_bHighlightQuery = false; + + char * pData = const_cast ( tOptions.m_sSource.cstr() ); + CSphFixedVector pBuffer ( 0 ); + int iDataLen = tOptions.m_sSource.Length(); + + if ( tOptions.m_bLoadFiles ) + { + CSphAutofile tFile; + if ( tFile.Open ( tOptions.m_sSource.cstr(), SPH_O_READ, sError )<0 ) + return NULL; + + // will this ever trigger? time will tell; email me if it does! + if ( tFile.GetSize()+1>=(SphOffset_t)INT_MAX ) + { + sError.SetSprintf ( "%s too big for snippet (over 2 GB)", pData ); + return NULL; + } + + int iFileSize = (int)tFile.GetSize(); + if ( iFileSize<=0 ) + { + static char sEmpty[] = ""; + return sEmpty; + } + + iDataLen = iFileSize+1; + pBuffer.Reset ( iDataLen ); + if ( !tFile.Read ( pBuffer.Begin(), iFileSize, sError ) ) + return NULL; + + pBuffer[iFileSize] = 0; + pData = pBuffer.Begin(); + } + + // strip if we have to + if ( pStripper && ( tOptions.m_sStripMode=="strip" || tOptions.m_sStripMode=="index" ) ) + pStripper->Strip ( (BYTE*)pData ); + + if ( tOptions.m_sStripMode!="retain" ) + pStripper = NULL; + + // FIXME!!! check on real data (~100 Mb) as stripper changes len + iDataLen = strlen ( pData ); + + // fast path that highlights entire document + if (!( tOptions.m_iLimitPassages + || ( tOptions.m_iLimitWords && tOptions.m_iLimitWordsGetSettings(), pData, iDataLen, pDict, pTokenizer, pStripper, pSchema, sError, pQueryTokenizer ); + } + + if ( !tOptions.m_bHighlightQuery ) + { + // legacy highlighting + ExcerptGen_c tGenerator ( pTokenizer->IsUtf8() ); + tGenerator.TokenizeQuery ( tOptions, pDict, pTokenizer, pIndex->GetSettings() ); + tGenerator.SetExactPhrase ( tOptions ); + tGenerator.TokenizeDocument ( pData, iDataLen, pDict, pTokenizer, true, tOptions, pIndex->GetSettings() ); + return tGenerator.BuildExcerpt ( tOptions ); + } + + XQQuery_t tQuery; + if ( !sphParseExtendedQuery ( tQuery, tOptions.m_sWords.cstr(), pQueryTokenizer, pSchema, pDict, pIndex->GetSettings().m_iStopwordStep ) ) + { + sError = tQuery.m_sParseError; + return NULL; + } + tQuery.m_pRoot->ClearFieldMask(); + + ExcerptGen_c tGenerator ( pTokenizer->IsUtf8() ); + tGenerator.TokenizeDocument ( pData, iDataLen, pDict, pTokenizer, false, tOptions, pIndex->GetSettings() ); + + CSphScopedPtr pZoneChecker ( new SnippetZoneChecker_c ( tGenerator.GetZones(), tGenerator.GetZonesName(), tQuery.m_dZones ) ); + SnippetsQwordSetup tSetup ( &tGenerator, pTokenizer ); + CSphString sWarning; + + tSetup.m_pDict = pDict; + tSetup.m_pIndex = pIndex; + tSetup.m_eDocinfo = SPH_DOCINFO_EXTERN; + tSetup.m_pWarning = &sWarning; + tSetup.m_pZoneChecker = pZoneChecker.Ptr(); + + CSphScopedPtr pMarker ( CSphHitMarker::Create ( tQuery.m_pRoot, tSetup ) ); + if ( !pMarker.Ptr() ) + { + sError = sWarning; + return NULL; + } + + tGenerator.SetMarker ( pMarker.Ptr() ); + return tGenerator.BuildExcerpt ( tOptions ); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxexcerpt.h b/coreseek/csft-4.1/src/sphinxexcerpt.h new file mode 100755 index 0000000..9095e4d --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxexcerpt.h @@ -0,0 +1,74 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinxexcerpt_ +#define _sphinxexcerpt_ + +#include "sphinx.h" + +/// a query to generate an excerpt +/// everything string is expected to be UTF-8 +struct ExcerptQuery_t +{ +public: + CSphString m_sSource; ///< source text (or file name, see m_bLoadFiles) + CSphString m_sWords; ///< words themselves + CSphString m_sBeforeMatch; ///< string to insert before each match + CSphString m_sAfterMatch; ///< string to insert after each match + CSphString m_sChunkSeparator; ///< string to insert between matching chunks (in limited mode only) + CSphString m_sStripMode; ///< strip mode + int m_iLimit; ///< max chars in snippet (0 if unlimited) + int m_iLimitWords; ///< max words in snippet + int m_iLimitPassages; ///< max passages in snippet + int m_iAround; ///< how much words to highlight around each match + int m_iPassageId; ///< current %PASSAGE_ID% counter value (must start at 1) + int m_iPassageBoundary; ///< passage boundary mode + bool m_bRemoveSpaces; ///< whether to collapse whitespace + bool m_bExactPhrase; ///< whether to highlight exact phrase matches only + bool m_bUseBoundaries; ///< whether to extract passages by phrase boundaries setup in tokenizer + bool m_bWeightOrder; ///< whether to order best passages in document (default) or weight order + bool m_bHighlightQuery; ///< whether try to highlight the whole query, or always word-by-word + bool m_bForceAllWords; ///< whether to ignore limit until all needed keywords are highlighted (#448) + bool m_bLoadFiles; ///< whether to interpret source as text or file name + bool m_bAllowEmpty; ///< whether to allow empty snippets (by default, return something from the start) + bool m_bEmitZones; ///< whether to emit zone for passage + int m_iRawFlags; ///< flags as they received from proto (to avoid coding/decoding to agents) + CSphString m_sRawPassageBoundary; ///< boundary as it received from proto (to avoid coding/decoding to agents) + +public: + int64_t m_iSize; ///< file size, to sort to work-queue order + int m_iSeq; ///< request order, to sort back to request order + int m_iNext; ///< the next one in one-link list for batch processing + char * m_sRes; ///< snippet result holder (NOT owned) + CSphString m_sError; ///< snippet error message + bool m_bHasBeforePassageMacro; + bool m_bHasAfterPassageMacro; + CSphString m_sBeforeMatchPassage; + CSphString m_sAfterMatchPassage; + +public: + ExcerptQuery_t (); +}; + +/// an excerpt generator +/// returns a newly allocated string in encoding specified by tokenizer on success +/// returns NULL on failure +char * sphBuildExcerpt ( ExcerptQuery_t &, CSphDict *, ISphTokenizer *, const CSphSchema *, CSphIndex *, CSphString & sError, const CSphHTMLStripper *, ISphTokenizer * ); + +#endif // _sphinxexcerpt_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxexcerpt.o b/coreseek/csft-4.1/src/sphinxexcerpt.o new file mode 100644 index 0000000..837f574 Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxexcerpt.o differ diff --git a/coreseek/csft-4.1/src/sphinxexpr.cpp b/coreseek/csft-4.1/src/sphinxexpr.cpp new file mode 100755 index 0000000..e7f96fd --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxexpr.cpp @@ -0,0 +1,3156 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxexpr.h" +#include "sphinxudf.h" +#include "sphinxutils.h" +#include "sphinxint.h" +#include +#include + +#if !USE_WINDOWS +#include +#include +#ifdef HAVE_DLOPEN +#include +#endif // HAVE_DLOPEN +#endif // !USE_WINDOWS + +////////////////////////////////////////////////////////////////////////// + +#ifndef M_LOG2E +#define M_LOG2E 1.44269504088896340736 +#endif + +#ifndef M_LOG10E +#define M_LOG10E 0.434294481903251827651 +#endif + +#if !USE_WINDOWS +#ifndef HAVE_DLERROR +#define dlerror() "" +#endif // HAVE_DLERROR +#endif // !USE_WINDOWS + + +typedef int ( *UdfInit_fn ) ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, char * error ); +typedef void ( *UdfDeinit_fn ) ( SPH_UDF_INIT * init ); + + +/// loaded UDF library +struct UdfLib_t +{ + void * m_pHandle; ///< handle from dlopen() + int m_iFuncs; ///< number of registered functions from this library +}; + + +/// registered UDF function +struct UdfFunc_t +{ + UdfLib_t * m_pLib; ///< library descriptor (pointer to library hash value) + const CSphString * m_pLibName; ///< library name (pointer to library hash key) + ESphAttr m_eRetType; ///< function type, currently FLOAT or INT + UdfInit_fn m_fnInit; ///< per-query init function, mandatory + UdfDeinit_fn m_fnDeinit; ///< per-query deinit function, optional + void * m_fnFunc; ///< per-row worker function, mandatory + int m_iUserCount; ///< number of active users currently working this function + bool m_bToDrop; ///< scheduled for DROP; do not use +}; + + +/// UDF call site +struct UdfCall_t +{ + UdfFunc_t * m_pUdf; + SPH_UDF_INIT m_tInit; + SPH_UDF_ARGS m_tArgs; + + UdfCall_t(); + ~UdfCall_t(); +}; + +////////////////////////////////////////////////////////////////////////// +// GLOBALS +////////////////////////////////////////////////////////////////////////// + +// hack hack hack +bool ( *g_pUservarsHook )( const CSphString & sUservar, CSphVector & dVals ) = NULL; + +static bool g_bUdfEnabled = false; +static CSphString g_sUdfDir; +static CSphStaticMutex g_tUdfMutex; +static SmallStringHash_T g_hUdfLibs; +static SmallStringHash_T g_hUdfFuncs; + +////////////////////////////////////////////////////////////////////////// +// UDF CALL SITE +////////////////////////////////////////////////////////////////////////// + +UdfCall_t::UdfCall_t () +{ + m_pUdf = NULL; + m_tInit.func_data = NULL; + m_tInit.is_const = false; + m_tArgs.arg_count = 0; + m_tArgs.arg_types = NULL; + m_tArgs.arg_values = NULL; + m_tArgs.arg_names = NULL; + m_tArgs.str_lengths = NULL; +} + +UdfCall_t::~UdfCall_t () +{ + if ( m_pUdf ) + { + g_tUdfMutex.Lock (); + m_pUdf->m_iUserCount--; + g_tUdfMutex.Unlock (); + } + SafeDeleteArray ( m_tArgs.arg_types ); + SafeDeleteArray ( m_tArgs.arg_values ); + SafeDeleteArray ( m_tArgs.arg_names ); + SafeDeleteArray ( m_tArgs.str_lengths ); +} + +////////////////////////////////////////////////////////////////////////// +// EVALUATION ENGINE +////////////////////////////////////////////////////////////////////////// + +struct ExprLocatorTraits_t : public ISphExpr +{ + CSphAttrLocator m_tLocator; + int m_iLocator; + + ExprLocatorTraits_t ( const CSphAttrLocator & tLocator, int iLocator ) : m_tLocator ( tLocator ), m_iLocator ( iLocator ) {} + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + dColumns.Add ( m_iLocator ); + } +}; + + +struct Expr_GetInt_c : public ExprLocatorTraits_t +{ + Expr_GetInt_c ( const CSphAttrLocator & tLocator, int iLocator ) : ExprLocatorTraits_t ( tLocator, iLocator ) {} + virtual float Eval ( const CSphMatch & tMatch ) const { return (float) tMatch.GetAttr ( m_tLocator ); } // FIXME! OPTIMIZE!!! we can go the short route here + virtual int IntEval ( const CSphMatch & tMatch ) const { return (int)tMatch.GetAttr ( m_tLocator ); } + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return (int64_t)tMatch.GetAttr ( m_tLocator ); } +}; + + +struct Expr_GetBits_c : public ExprLocatorTraits_t +{ + Expr_GetBits_c ( const CSphAttrLocator & tLocator, int iLocator ) : ExprLocatorTraits_t ( tLocator, iLocator ) {} + virtual float Eval ( const CSphMatch & tMatch ) const { return (float) tMatch.GetAttr ( m_tLocator ); } + virtual int IntEval ( const CSphMatch & tMatch ) const { return (int)tMatch.GetAttr ( m_tLocator ); } + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return (int64_t)tMatch.GetAttr ( m_tLocator ); } +}; + + +struct Expr_GetSint_c : public ExprLocatorTraits_t +{ + Expr_GetSint_c ( const CSphAttrLocator & tLocator, int iLocator ) : ExprLocatorTraits_t ( tLocator, iLocator ) {} + virtual float Eval ( const CSphMatch & tMatch ) const { return (float)(int)tMatch.GetAttr ( m_tLocator ); } + virtual int IntEval ( const CSphMatch & tMatch ) const { return (int)tMatch.GetAttr ( m_tLocator ); } + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return (int)tMatch.GetAttr ( m_tLocator ); } +}; + + +struct Expr_GetFloat_c : public ExprLocatorTraits_t +{ + Expr_GetFloat_c ( const CSphAttrLocator & tLocator, int iLocator ) : ExprLocatorTraits_t ( tLocator, iLocator ) {} + virtual float Eval ( const CSphMatch & tMatch ) const { return tMatch.GetAttrFloat ( m_tLocator ); } +}; + + +struct Expr_GetString_c : public ExprLocatorTraits_t +{ + const BYTE * m_pStrings; + + Expr_GetString_c ( const CSphAttrLocator & tLocator, int iLocator ) : ExprLocatorTraits_t ( tLocator, iLocator ) {} + virtual float Eval ( const CSphMatch & ) const { assert ( 0 ); return 0; } + virtual void SetStringPool ( const BYTE * pStrings ) { m_pStrings = pStrings; } + + virtual int StringEval ( const CSphMatch & tMatch, const BYTE ** ppStr ) const + { + SphAttr_t iOff = tMatch.GetAttr ( m_tLocator ); + if ( iOff>0 ) + return sphUnpackStr ( m_pStrings + iOff, ppStr ); + + *ppStr = NULL; + return 0; + } +}; + + +struct Expr_GetMva_c : public ExprLocatorTraits_t +{ + const DWORD * m_pMva; + + Expr_GetMva_c ( const CSphAttrLocator & tLocator, int iLocator ) : ExprLocatorTraits_t ( tLocator, iLocator ) {} + virtual float Eval ( const CSphMatch & ) const { assert ( 0 ); return 0; } + virtual void SetMVAPool ( const DWORD * pMva ) { m_pMva = pMva; } + virtual const DWORD * MvaEval ( const CSphMatch & tMatch ) const { return tMatch.GetAttrMVA ( m_tLocator, m_pMva ); } +}; + + +struct Expr_GetConst_c : public ISphExpr +{ + float m_fValue; + explicit Expr_GetConst_c ( float fValue ) : m_fValue ( fValue ) {} + virtual float Eval ( const CSphMatch & ) const { return m_fValue; } +}; + + +struct Expr_GetIntConst_c : public ISphExpr +{ + int m_iValue; + explicit Expr_GetIntConst_c ( int iValue ) : m_iValue ( iValue ) {} + virtual float Eval ( const CSphMatch & ) const { return (float) m_iValue; } // no assert() here cause generic float Eval() needs to work even on int-evaluator tree + virtual int IntEval ( const CSphMatch & ) const { return m_iValue; } + virtual int64_t Int64Eval ( const CSphMatch & ) const { return m_iValue; } +}; + + +struct Expr_GetInt64Const_c : public ISphExpr +{ + int64_t m_iValue; + explicit Expr_GetInt64Const_c ( int64_t iValue ) : m_iValue ( iValue ) {} + virtual float Eval ( const CSphMatch & ) const { return (float) m_iValue; } // no assert() here cause generic float Eval() needs to work even on int-evaluator tree + virtual int IntEval ( const CSphMatch & ) const { assert ( 0 ); return (int)m_iValue; } + virtual int64_t Int64Eval ( const CSphMatch & ) const { return m_iValue; } +}; + + +struct Expr_GetStrConst_c : public ISphExpr +{ + CSphString m_sVal; + int m_iLen; + + explicit Expr_GetStrConst_c ( const char * sVal, int iLen ) + { + if ( iLen>0 ) + SqlUnescape ( m_sVal, sVal, iLen ); + m_iLen = m_sVal.Length(); + } + + virtual int StringEval ( const CSphMatch &, const BYTE ** ppStr ) const + { + *ppStr = (const BYTE*) m_sVal.cstr(); + return m_iLen; + } + + virtual float Eval ( const CSphMatch & ) const { assert ( 0 ); return 0; } + virtual int IntEval ( const CSphMatch & ) const { assert ( 0 ); return 0; } + virtual int64_t Int64Eval ( const CSphMatch & ) const { assert ( 0 ); return 0; } +}; + + +struct Expr_GetId_c : public ISphExpr +{ + virtual float Eval ( const CSphMatch & tMatch ) const { return (float)tMatch.m_iDocID; } + virtual int IntEval ( const CSphMatch & tMatch ) const { return (int)tMatch.m_iDocID; } + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return (int64_t)tMatch.m_iDocID; } +}; + + +struct Expr_GetWeight_c : public ISphExpr +{ + virtual float Eval ( const CSphMatch & tMatch ) const { return (float)tMatch.m_iWeight; } + virtual int IntEval ( const CSphMatch & tMatch ) const { return (int)tMatch.m_iWeight; } + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return (int64_t)tMatch.m_iWeight; } +}; + +////////////////////////////////////////////////////////////////////////// + +struct Expr_Arglist_c : public ISphExpr +{ + CSphVector m_dArgs; + + Expr_Arglist_c ( ISphExpr * pLeft, ISphExpr * pRight ) + { + AddArgs ( pLeft ); + AddArgs ( pRight ); + } + + ~Expr_Arglist_c () + { + ARRAY_FOREACH ( i, m_dArgs ) + SafeRelease ( m_dArgs[i] ); + } + + void AddArgs ( ISphExpr * pExpr ) + { + // not an arglist? just add it + if ( !pExpr->IsArglist() ) + { + m_dArgs.Add ( pExpr ); + return; + } + + // arglist? take ownership of its args, and dismiss it + Expr_Arglist_c * pArgs = (Expr_Arglist_c *) pExpr; + ARRAY_FOREACH ( i, pArgs->m_dArgs ) + { + m_dArgs.Add ( pArgs->m_dArgs[i] ); + pArgs->m_dArgs[i] = NULL; + } + SafeRelease ( pExpr ); + } + + virtual bool IsArglist () const + { + return true; + } + + virtual float Eval ( const CSphMatch & ) const + { + assert ( 0 && "internal error: Eval() must not be explicitly called on arglist" ); + return 0.0f; + } + + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + ARRAY_FOREACH ( i, m_dArgs ) + m_dArgs[i]->GetDependencyColumns ( dColumns ); + } +}; + +////////////////////////////////////////////////////////////////////////// + +struct Expr_Crc32_c : public ISphExpr +{ + ISphExpr * m_pFirst; + + explicit Expr_Crc32_c ( ISphExpr * pFirst ) : m_pFirst ( pFirst ) {} + ~Expr_Crc32_c () { SafeRelease ( m_pFirst ); } + + virtual void SetMVAPool ( const DWORD * pMvaPool ) { m_pFirst->SetMVAPool ( pMvaPool ); } + virtual void SetStringPool ( const BYTE * pStrings ) { m_pFirst->SetStringPool ( pStrings ); } + virtual void GetDependencyColumns ( CSphVector & dColumns ) const { m_pFirst->GetDependencyColumns ( dColumns ); } + + virtual float Eval ( const CSphMatch & tMatch ) const { return (float)IntEval ( tMatch ); } + virtual int IntEval ( const CSphMatch & tMatch ) const { const BYTE * pStr; return sphCRC32 ( pStr, m_pFirst->StringEval ( tMatch, &pStr ) ); } + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return IntEval ( tMatch ); } +}; + +////////////////////////////////////////////////////////////////////////// + +#define FIRST m_pFirst->Eval(tMatch) +#define SECOND m_pSecond->Eval(tMatch) +#define THIRD m_pThird->Eval(tMatch) + +#define INTFIRST m_pFirst->IntEval(tMatch) +#define INTSECOND m_pSecond->IntEval(tMatch) +#define INTTHIRD m_pThird->IntEval(tMatch) + +#define INT64FIRST m_pFirst->Int64Eval(tMatch) +#define INT64SECOND m_pSecond->Int64Eval(tMatch) +#define INT64THIRD m_pThird->Int64Eval(tMatch) + +#define DECLARE_UNARY_TRAITS(_classname,_expr) \ + struct _classname : public ISphExpr \ + { \ + ISphExpr * m_pFirst; \ + explicit _classname ( ISphExpr * pFirst ) : m_pFirst ( pFirst ) {}; \ + ~_classname () { SafeRelease ( m_pFirst ); } \ + virtual void SetMVAPool ( const DWORD * pMvaPool ) { m_pFirst->SetMVAPool ( pMvaPool ); } \ + virtual void SetStringPool ( const BYTE * pStrings ) { m_pFirst->SetStringPool ( pStrings ); } \ + virtual float Eval ( const CSphMatch & tMatch ) const { return _expr; } \ + virtual void GetDependencyColumns ( CSphVector & dColumns ) const { m_pFirst->GetDependencyColumns ( dColumns ); } \ + +#define DECLARE_UNARY_FLT(_classname,_expr) \ + DECLARE_UNARY_TRAITS ( _classname, _expr ) \ + }; + +#define DECLARE_UNARY_INT(_classname,_expr,_expr2,_expr3) \ + DECLARE_UNARY_TRAITS ( _classname, _expr ) \ + virtual int IntEval ( const CSphMatch & tMatch ) const { return _expr2; } \ + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return _expr3; } \ + }; + +#define IABS(_arg) ( (_arg)>0 ? (_arg) : (-_arg) ) + +DECLARE_UNARY_INT ( Expr_Neg_c, -FIRST, -INTFIRST, -INT64FIRST ) +DECLARE_UNARY_INT ( Expr_Abs_c, fabs(FIRST), IABS(INTFIRST), IABS(INT64FIRST) ) +DECLARE_UNARY_FLT ( Expr_Ceil_c, float(ceil(FIRST)) ) +DECLARE_UNARY_FLT ( Expr_Floor_c, float(floor(FIRST)) ) +DECLARE_UNARY_FLT ( Expr_Sin_c, float(sin(FIRST)) ) +DECLARE_UNARY_FLT ( Expr_Cos_c, float(cos(FIRST)) ) +DECLARE_UNARY_FLT ( Expr_Ln_c, float(log(FIRST)) ) +DECLARE_UNARY_FLT ( Expr_Log2_c, float(log(FIRST)*M_LOG2E) ) +DECLARE_UNARY_FLT ( Expr_Log10_c, float(log(FIRST)*M_LOG10E) ) +DECLARE_UNARY_FLT ( Expr_Exp_c, float(exp(FIRST)) ) +DECLARE_UNARY_FLT ( Expr_Sqrt_c, float(sqrt(FIRST)) ) + +DECLARE_UNARY_INT ( Expr_NotInt_c, (float)(INTFIRST?0:1), INTFIRST?0:1, INTFIRST?0:1 ); +DECLARE_UNARY_INT ( Expr_NotInt64_c, (float)(INT64FIRST?0:1), INT64FIRST?0:1, INT64FIRST?0:1 ); +DECLARE_UNARY_INT ( Expr_Sint_c, (float)(INTFIRST), INTFIRST, INTFIRST ) + +////////////////////////////////////////////////////////////////////////// + +#define DECLARE_BINARY_TRAITS(_classname,_expr) \ + struct _classname : public ISphExpr \ + { \ + ISphExpr * m_pFirst; \ + ISphExpr * m_pSecond; \ + _classname ( ISphExpr * pFirst, ISphExpr * pSecond ) : m_pFirst ( pFirst ), m_pSecond ( pSecond ) {} \ + ~_classname () { SafeRelease ( m_pFirst ); SafeRelease ( m_pSecond ); } \ + virtual void SetMVAPool ( const DWORD * pMvaPool ) { m_pFirst->SetMVAPool ( pMvaPool ); m_pSecond->SetMVAPool ( pMvaPool ); } \ + virtual void SetStringPool ( const BYTE * pStrings ) { m_pFirst->SetStringPool ( pStrings ); m_pSecond->SetStringPool ( pStrings ); } \ + virtual float Eval ( const CSphMatch & tMatch ) const { return _expr; } \ + virtual void GetDependencyColumns ( CSphVector & dColumns ) const \ + { \ + m_pFirst->GetDependencyColumns ( dColumns ); \ + m_pSecond->GetDependencyColumns ( dColumns ); \ + } \ + +#define DECLARE_BINARY_FLT(_classname,_expr) \ + DECLARE_BINARY_TRAITS ( _classname, _expr ) \ + }; + +#define DECLARE_BINARY_INT(_classname,_expr,_expr2,_expr3) \ + DECLARE_BINARY_TRAITS ( _classname, _expr ) \ + virtual int IntEval ( const CSphMatch & tMatch ) const { return _expr2; } \ + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return _expr3; } \ + }; + +#define DECLARE_BINARY_POLY(_classname,_expr,_expr2,_expr3) \ + DECLARE_BINARY_INT ( _classname##Float_c, _expr, (int)Eval(tMatch), (int64_t)Eval(tMatch ) ) \ + DECLARE_BINARY_INT ( _classname##Int_c, (float)IntEval(tMatch), _expr2, (int64_t)IntEval(tMatch) ) \ + DECLARE_BINARY_INT ( _classname##Int64_c, (float)Int64Eval(tMatch), (int)Int64Eval(tMatch), _expr3 ) + +#define IFFLT(_expr) ( (_expr) ? 1.0f : 0.0f ) +#define IFINT(_expr) ( (_expr) ? 1 : 0 ) + +DECLARE_BINARY_INT ( Expr_Add_c, FIRST + SECOND, INTFIRST + INTSECOND, INT64FIRST + INT64SECOND ) +DECLARE_BINARY_INT ( Expr_Sub_c, FIRST - SECOND, INTFIRST - INTSECOND, INT64FIRST - INT64SECOND ) +DECLARE_BINARY_INT ( Expr_Mul_c, FIRST * SECOND, INTFIRST * INTSECOND, INT64FIRST * INT64SECOND ) +DECLARE_BINARY_FLT ( Expr_Div_c, FIRST / SECOND ) +DECLARE_BINARY_INT ( Expr_Idiv_c, (float)(int(FIRST)/int(SECOND)), INTFIRST / INTSECOND, INT64FIRST / INT64SECOND ) +DECLARE_BINARY_INT ( Expr_BitAnd_c, (float)(int(FIRST)&int(SECOND)), INTFIRST & INTSECOND, INT64FIRST & INT64SECOND ) +DECLARE_BINARY_INT ( Expr_BitOr_c, (float)(int(FIRST)|int(SECOND)), INTFIRST | INTSECOND, INT64FIRST | INT64SECOND ) +DECLARE_BINARY_INT ( Expr_Mod_c, (float)(int(FIRST)%int(SECOND)), INTFIRST % INTSECOND, INT64FIRST % INT64SECOND ) + +DECLARE_BINARY_POLY ( Expr_Lt, IFFLT ( FIRSTSECOND ), IFINT ( INTFIRST>INTSECOND ), IFINT ( INT64FIRST>INT64SECOND ) ) +DECLARE_BINARY_POLY ( Expr_Lte, IFFLT ( FIRST<=SECOND ), IFINT ( INTFIRST<=INTSECOND ), IFINT ( INT64FIRST<=INT64SECOND ) ) +DECLARE_BINARY_POLY ( Expr_Gte, IFFLT ( FIRST>=SECOND ), IFINT ( INTFIRST>=INTSECOND ), IFINT ( INT64FIRST>=INT64SECOND ) ) +DECLARE_BINARY_POLY ( Expr_Eq, IFFLT ( fabs ( FIRST-SECOND )<=1e-6 ), IFINT ( INTFIRST==INTSECOND ), IFINT ( INT64FIRST==INT64SECOND ) ) +DECLARE_BINARY_POLY ( Expr_Ne, IFFLT ( fabs ( FIRST-SECOND )>1e-6 ), IFINT ( INTFIRST!=INTSECOND ), IFINT ( INT64FIRST!=INT64SECOND ) ) + +DECLARE_BINARY_INT ( Expr_Min_c, Min ( FIRST, SECOND ), Min ( INTFIRST, INTSECOND ), Min ( INT64FIRST, INT64SECOND ) ) +DECLARE_BINARY_INT ( Expr_Max_c, Max ( FIRST, SECOND ), Max ( INTFIRST, INTSECOND ), Max ( INT64FIRST, INT64SECOND ) ) +DECLARE_BINARY_FLT ( Expr_Pow_c, float ( pow ( FIRST, SECOND ) ) ) + +DECLARE_BINARY_POLY ( Expr_And, FIRST!=0.0f && SECOND!=0.0f, IFINT ( INTFIRST && INTSECOND ), IFINT ( INT64FIRST && INT64SECOND ) ) +DECLARE_BINARY_POLY ( Expr_Or, FIRST!=0.0f || SECOND!=0.0f, IFINT ( INTFIRST || INTSECOND ), IFINT ( INT64FIRST || INT64SECOND ) ) + +////////////////////////////////////////////////////////////////////////// + +#define DECLARE_TERNARY(_classname,_expr,_expr2,_expr3) \ + struct _classname : public ISphExpr \ + { \ + ISphExpr * m_pFirst; \ + ISphExpr * m_pSecond; \ + ISphExpr * m_pThird; \ + _classname ( ISphExpr * pFirst, ISphExpr * pSecond, ISphExpr * pThird ) : m_pFirst ( pFirst ), m_pSecond ( pSecond ), m_pThird ( pThird ) {} \ + ~_classname () { SafeRelease ( m_pFirst ); SafeRelease ( m_pSecond ); SafeRelease ( m_pThird ); } \ + virtual void SetMVAPool ( const DWORD * pMvaPool ) { m_pFirst->SetMVAPool ( pMvaPool ); m_pSecond->SetMVAPool ( pMvaPool ); m_pThird->SetMVAPool ( pMvaPool ); } \ + virtual void SetStringPool ( const BYTE * pStrings ) { m_pFirst->SetStringPool ( pStrings ); m_pSecond->SetStringPool ( pStrings ); m_pThird->SetStringPool ( pStrings ); } \ + virtual float Eval ( const CSphMatch & tMatch ) const { return _expr; } \ + virtual int IntEval ( const CSphMatch & tMatch ) const { return _expr2; } \ + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return _expr3; } \ + virtual void GetDependencyColumns ( CSphVector & dColumns ) const \ + { \ + m_pFirst->GetDependencyColumns ( dColumns ); \ + m_pSecond->GetDependencyColumns ( dColumns ); \ + m_pThird->GetDependencyColumns ( dColumns ); \ + } \ + }; + +DECLARE_TERNARY ( Expr_If_c, ( FIRST!=0.0f ) ? SECOND : THIRD, INTFIRST ? INTSECOND : INTTHIRD, INT64FIRST ? INT64SECOND : INT64THIRD ) +DECLARE_TERNARY ( Expr_Madd_c, FIRST*SECOND+THIRD, INTFIRST*INTSECOND + INTTHIRD, INT64FIRST*INT64SECOND + INT64THIRD ) +DECLARE_TERNARY ( Expr_Mul3_c, FIRST*SECOND*THIRD, INTFIRST*INTSECOND*INTTHIRD, INT64FIRST*INT64SECOND*INT64THIRD ) + +////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS +void localtime_r ( const time_t * clock, struct tm * res ) +{ + *res = *localtime ( clock ); // FIXME?! +} +#endif + +#define DECLARE_TIMESTAMP(_classname,_expr) \ + DECLARE_UNARY_TRAITS ( _classname, (float)IntEval(tMatch) ) \ + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return IntEval(tMatch); } \ + virtual int IntEval ( const CSphMatch & tMatch ) const \ + { \ + time_t ts = (time_t)FIRST; \ + struct tm s; \ + localtime_r ( &ts, &s ); \ + return _expr; \ + } \ + }; + +DECLARE_TIMESTAMP ( Expr_Day_c, s.tm_mday ); +DECLARE_TIMESTAMP ( Expr_Month_c, s.tm_mon+1 ); +DECLARE_TIMESTAMP ( Expr_Year_c, s.tm_year+1900 ); +DECLARE_TIMESTAMP ( Expr_YearMonth_c, (s.tm_year+1900)*100+s.tm_mon+1 ); +DECLARE_TIMESTAMP ( Expr_YearMonthDay_c, (s.tm_year+1900)*10000+(s.tm_mon+1)*100+s.tm_mday ); + +////////////////////////////////////////////////////////////////////////// +// PARSER INTERNALS +////////////////////////////////////////////////////////////////////////// + +#include "yysphinxexpr.h" + +/// known functions +enum Func_e +{ + FUNC_NOW, + + FUNC_ABS, + FUNC_CEIL, + FUNC_FLOOR, + FUNC_SIN, + FUNC_COS, + FUNC_LN, + FUNC_LOG2, + FUNC_LOG10, + FUNC_EXP, + FUNC_SQRT, + FUNC_BIGINT, + FUNC_SINT, + FUNC_CRC32, + + FUNC_DAY, + FUNC_MONTH, + FUNC_YEAR, + FUNC_YEARMONTH, + FUNC_YEARMONTHDAY, + + FUNC_MIN, + FUNC_MAX, + FUNC_POW, + FUNC_IDIV, + + FUNC_IF, + FUNC_MADD, + FUNC_MUL3, + + FUNC_INTERVAL, + FUNC_IN, + FUNC_BITDOT, + + FUNC_GEODIST +}; + + +struct FuncDesc_t +{ + const char * m_sName; + int m_iArgs; + Func_e m_eFunc; + ESphAttr m_eRet; +}; + + +static FuncDesc_t g_dFuncs[] = +{ + { "now", 0, FUNC_NOW, SPH_ATTR_INTEGER }, + + { "abs", 1, FUNC_ABS, SPH_ATTR_NONE }, + { "ceil", 1, FUNC_CEIL, SPH_ATTR_FLOAT }, + { "floor", 1, FUNC_FLOOR, SPH_ATTR_FLOAT }, + { "sin", 1, FUNC_SIN, SPH_ATTR_FLOAT }, + { "cos", 1, FUNC_COS, SPH_ATTR_FLOAT }, + { "ln", 1, FUNC_LN, SPH_ATTR_FLOAT }, + { "log2", 1, FUNC_LOG2, SPH_ATTR_FLOAT }, + { "log10", 1, FUNC_LOG10, SPH_ATTR_FLOAT }, + { "exp", 1, FUNC_EXP, SPH_ATTR_FLOAT }, + { "sqrt", 1, FUNC_SQRT, SPH_ATTR_FLOAT }, + { "bigint", 1, FUNC_BIGINT, SPH_ATTR_BIGINT }, // type-enforcer special as-if-function + { "sint", 1, FUNC_SINT, SPH_ATTR_BIGINT }, // type-enforcer special as-if-function + { "crc32", 1, FUNC_CRC32, SPH_ATTR_INTEGER }, + + { "day", 1, FUNC_DAY, SPH_ATTR_INTEGER }, + { "month", 1, FUNC_MONTH, SPH_ATTR_INTEGER }, + { "year", 1, FUNC_YEAR, SPH_ATTR_INTEGER }, + { "yearmonth", 1, FUNC_YEARMONTH, SPH_ATTR_INTEGER }, + { "yearmonthday", 1, FUNC_YEARMONTHDAY, SPH_ATTR_INTEGER }, + + { "min", 2, FUNC_MIN, SPH_ATTR_NONE }, + { "max", 2, FUNC_MAX, SPH_ATTR_NONE }, + { "pow", 2, FUNC_POW, SPH_ATTR_FLOAT }, + { "idiv", 2, FUNC_IDIV, SPH_ATTR_NONE }, + + { "if", 3, FUNC_IF, SPH_ATTR_NONE }, + { "madd", 3, FUNC_MADD, SPH_ATTR_NONE }, + { "mul3", 3, FUNC_MUL3, SPH_ATTR_NONE }, + + { "interval", -2, FUNC_INTERVAL, SPH_ATTR_INTEGER }, + { "in", -1, FUNC_IN, SPH_ATTR_INTEGER }, + { "bitdot", -1, FUNC_BITDOT, SPH_ATTR_NONE }, + + { "geodist", 4, FUNC_GEODIST, SPH_ATTR_FLOAT } +}; + +////////////////////////////////////////////////////////////////////////// + +/// check for type based on int value +static inline ESphAttr GetIntType ( int64_t iValue ) +{ + return ( iValue>=(int64_t)INT_MIN && iValue<=(int64_t)INT_MAX ) ? SPH_ATTR_INTEGER : SPH_ATTR_BIGINT; +} + +/// list of constants +class ConstList_c +{ +public: + CSphVector m_dInts; ///< dword/int64 storage + CSphVector m_dFloats; ///< float storage + ESphAttr m_eRetType; ///< SPH_ATTR_INTEGER, SPH_ATTR_BIGINT, or SPH_ATTR_FLOAT + +public: + ConstList_c () + : m_eRetType ( SPH_ATTR_INTEGER ) + {} + + void Add ( int64_t iValue ) + { + if ( m_eRetType!=SPH_ATTR_FLOAT ) + { + m_eRetType = GetIntType ( iValue ); + m_dInts.Add ( iValue ); + } else + { + m_dFloats.Add ( (float)iValue ); + } + } + + void Add ( float fValue ) + { + if ( m_eRetType!=SPH_ATTR_FLOAT ) + { + assert ( m_dFloats.GetLength()==0 ); + ARRAY_FOREACH ( i, m_dInts ) + m_dFloats.Add ( (float)m_dInts[i] ); + m_dInts.Reset (); + m_eRetType = SPH_ATTR_FLOAT; + } + m_dFloats.Add ( fValue ); + } +}; + +/// expression tree node +struct ExprNode_t +{ + int m_iToken; ///< token type, including operators + ESphAttr m_eRetType; ///< result type + ESphAttr m_eArgType; ///< args type + CSphAttrLocator m_tLocator; ///< attribute locator, for TOK_ATTR type + int m_iLocator; ///< index of attribute locator in schema + union + { + int64_t m_iConst; ///< constant value, for TOK_CONST_INT type + float m_fConst; ///< constant value, for TOK_CONST_FLOAT type + int m_iFunc; ///< built-in function id, for TOK_FUNC type + int m_iArgs; ///< args count, for arglist (token==',') type + ConstList_c * m_pConsts; ///< constants list, for TOK_CONST_LIST type + }; + int m_iLeft; + int m_iRight; + + ExprNode_t () : m_iToken ( 0 ), m_eRetType ( SPH_ATTR_NONE ), m_eArgType ( SPH_ATTR_NONE ), m_iLocator ( -1 ), m_iLeft ( -1 ), m_iRight ( -1 ) {} + + float FloatVal() + { + assert ( m_iToken==TOK_CONST_INT || m_iToken==TOK_CONST_FLOAT ); + return ( m_iToken==TOK_CONST_INT ) ? (float)m_iConst : m_fConst; + } +}; + + +/// expression parser +class ExprParser_t +{ + friend int yylex ( YYSTYPE * lvalp, ExprParser_t * pParser ); + friend int yyparse ( ExprParser_t * pParser ); + friend void yyerror ( ExprParser_t * pParser, const char * sMessage ); + +public: + ExprParser_t ( CSphSchema * pExtra, ISphExprHook * pHook ) + : m_pExtra ( pExtra ) + , m_pHook ( pHook ) + {} + + ~ExprParser_t (); + ISphExpr * Parse ( const char * sExpr, const CSphSchema & tSchema, ESphAttr * pAttrType, bool * pUsesWeight, CSphString & sError ); + +protected: + int m_iParsed; ///< filled by yyparse() at the very end + CSphString m_sLexerError; + CSphString m_sParserError; + CSphString m_sCreateError; + ISphExprHook * m_pHook; + +protected: + ESphAttr GetWidestRet ( int iLeft, int iRight ); + + int AddNodeInt ( int64_t iValue ); + int AddNodeFloat ( float fValue ); + int AddNodeString ( int64_t iValue ); + int AddNodeAttr ( int iTokenType, uint64_t uAttrLocator ); + int AddNodeID (); + int AddNodeWeight (); + int AddNodeOp ( int iOp, int iLeft, int iRight ); + int AddNodeFunc ( int iFunc, int iLeft, int iRight=-1 ); + int AddNodeUdf ( int iCall, int iArg ); + int AddNodeConstlist ( int64_t iValue ); + int AddNodeConstlist ( float iValue ); + void AppendToConstlist ( int iNode, int64_t iValue ); + void AppendToConstlist ( int iNode, float iValue ); + int ConstlistFromUservar ( int iUservar ); + int AddNodeHookIdent ( int iID ); + int AddNodeHookFunc ( int iID, int iLeft ); + +private: + const char * m_sExpr; + const char * m_pCur; + const char * m_pLastTokenStart; + const CSphSchema * m_pSchema; + CSphVector m_dNodes; + CSphVector m_dUservars; + CSphVector m_dUdfCalls; + + CSphSchema * m_pExtra; + + int m_iConstNow; + +private: + int GetToken ( YYSTYPE * lvalp ); + + void GatherArgTypes ( int iNode, CSphVector & dTypes ); + void GatherArgNodes ( int iNode, CSphVector & dNodes ); + + bool CheckForConstSet ( int iArgsNode, int iSkip ); + int ParseAttr ( int iAttr, const char* sTok, YYSTYPE * lvalp ); + + template < typename T > + void WalkTree ( int iRoot, T & FUNCTOR ); + + void Optimize ( int iNode ); + void Dump ( int iNode ); + + ISphExpr * CreateTree ( int iNode ); + ISphExpr * CreateIntervalNode ( int iArgsNode, CSphVector & dArgs ); + ISphExpr * CreateInNode ( int iNode ); + ISphExpr * CreateGeodistNode ( int iArgs ); + ISphExpr * CreateBitdotNode ( int iArgsNode, CSphVector & dArgs ); + ISphExpr * CreateUdfNode ( int iCall, ISphExpr * pLeft ); +}; + +////////////////////////////////////////////////////////////////////////// + +/// parse that numeric constant +static int ParseNumeric ( YYSTYPE * lvalp, const char ** ppStr ) +{ + assert ( lvalp && ppStr && *ppStr ); + + // try float route + char * pEnd = NULL; + float fRes = (float) strtod ( *ppStr, &pEnd ); + + // try int route + int64_t iRes = 0; + bool bInt = true; + for ( const char * p=(*ppStr); piConst = iRes; + return TOK_CONST_INT; + } else + { + lvalp->fConst = fRes; + return TOK_CONST_FLOAT; + } +} + +static uint64_t sphPackAttrLocator ( const CSphAttrLocator & tLoc, int iLocator ) +{ + assert ( iLocator>=0 && iLocator<=0xff ); + uint64_t uIndex = 0; + uIndex = ( tLoc.m_iBitOffset<<16 ) + tLoc.m_iBitCount + ( (uint64_t)iLocator<<32 ); + if ( tLoc.m_bDynamic ) + uIndex |= ( U64C(1)<<63 ); + + return uIndex; +} + +static void sphUnpackAttrLocator ( uint64_t uIndex, ExprNode_t * pNode ) +{ + assert ( pNode ); + pNode->m_tLocator.m_iBitOffset = (int)( ( uIndex>>16 ) & 0xffff ); + pNode->m_tLocator.m_iBitCount = (int)( uIndex & 0xffff ); + pNode->m_tLocator.m_bDynamic = ( ( uIndex & ( U64C(1)<<63 ) )!=0 ); + + pNode->m_iLocator = (int)( ( uIndex>>32 ) & 0xff ); +} + +int ExprParser_t::ParseAttr ( int iAttr, const char* sTok, YYSTYPE * lvalp ) +{ + // check attribute type and width + const CSphColumnInfo & tCol = m_pSchema->GetAttr ( iAttr ); + + int iRes = -1; + switch ( tCol.m_eAttrType ) + { + case SPH_ATTR_FLOAT: iRes = TOK_ATTR_FLOAT; break; + case SPH_ATTR_UINT32SET: iRes = TOK_ATTR_MVA32; break; + case SPH_ATTR_UINT64SET: iRes = TOK_ATTR_MVA64; break; + case SPH_ATTR_STRING: iRes = TOK_ATTR_STRING; break; + case SPH_ATTR_INTEGER: + case SPH_ATTR_TIMESTAMP: + case SPH_ATTR_BOOL: + case SPH_ATTR_BIGINT: + case SPH_ATTR_WORDCOUNT: iRes = tCol.m_tLocator.IsBitfield() ? TOK_ATTR_BITS : TOK_ATTR_INT; break; + default: + m_sLexerError.SetSprintf ( "attribute '%s' is of unsupported type (type=%d)", sTok, tCol.m_eAttrType ); + return -1; + } + + if ( m_pExtra ) + m_pExtra->AddAttr ( tCol, true ); + lvalp->iAttrLocator = sphPackAttrLocator ( tCol.m_tLocator, iAttr ); + return iRes; +} + +/// a lexer of my own +/// returns token id and fills lvalp on success +/// returns -1 and fills sError on failure +int ExprParser_t::GetToken ( YYSTYPE * lvalp ) +{ + // skip whitespace, check eof + while ( isspace ( *m_pCur ) ) m_pCur++; + m_pLastTokenStart = m_pCur; + if ( !*m_pCur ) return 0; + + // check for constant + if ( isdigit ( *m_pCur ) ) + return ParseNumeric ( lvalp, &m_pCur ); + + // check for field, function, or magic name + if ( sphIsAttr ( m_pCur[0] ) + || ( m_pCur[0]=='@' && sphIsAttr ( m_pCur[1] ) && !isdigit ( m_pCur[1] ) ) ) + { + // get token + const char * pStart = m_pCur++; + while ( sphIsAttr ( *m_pCur ) ) m_pCur++; + + CSphString sTok; + sTok.SetBinary ( pStart, m_pCur-pStart ); + sTok.ToLower (); + + // check for magic name + if ( sTok=="@id" ) return TOK_ATID; + if ( sTok=="@weight" ) return TOK_ATWEIGHT; + if ( sTok=="id" ) return TOK_ID; + if ( sTok=="weight" ) return TOK_WEIGHT; + if ( sTok=="distinct" ) return TOK_DISTINCT; + if ( sTok=="@geodist" ) + { + int iGeodist = m_pSchema->GetAttrIndex("@geodist"); + if ( iGeodist==-1 ) + { + m_sLexerError = "geoanchor is not set, @geodist expression unavailable"; + return -1; + } + const CSphAttrLocator & tLoc = m_pSchema->GetAttr ( iGeodist ).m_tLocator; + lvalp->iAttrLocator = sphPackAttrLocator ( tLoc, iGeodist ); + return TOK_ATTR_FLOAT; + } + + // check for uservar + if ( pStart[0]=='@' ) + { + lvalp->iNode = m_dUservars.GetLength(); + m_dUservars.Add ( sTok ); + return TOK_USERVAR; + } + + // check for keyword + if ( sTok=="and" ) { return TOK_AND; } + if ( sTok=="or" ) { return TOK_OR; } + if ( sTok=="not" ) { return TOK_NOT; } + if ( sTok=="div" ) { return TOK_DIV; } + if ( sTok=="mod" ) { return TOK_MOD; } + + if ( sTok=="count" ) + { + int iAttr = m_pSchema->GetAttrIndex ( "count" ); + if ( iAttr>=0 ) + ParseAttr ( iAttr, sTok.cstr(), lvalp ); + return TOK_COUNT; + } + + // check for attribute + int iAttr = m_pSchema->GetAttrIndex ( sTok.cstr() ); + if ( iAttr>=0 ) + return ParseAttr ( iAttr, sTok.cstr(), lvalp ); + + // check for function + sTok.ToLower(); + for ( int i=0; iiFunc = i; + return g_dFuncs[i].m_eFunc==FUNC_IN ? TOK_FUNC_IN : TOK_FUNC; + } + + // ask hook + if ( m_pHook ) + { + int iID = m_pHook->IsKnownIdent ( sTok.cstr() ); + if ( iID>=0 ) + { + lvalp->iNode = iID; + return TOK_HOOK_IDENT; + } + + iID = m_pHook->IsKnownFunc ( sTok.cstr() ); + if ( iID>=0 ) + { + lvalp->iNode = iID; + return TOK_HOOK_FUNC; + } + } + + // check for UDF + if ( g_bUdfEnabled ) + { + g_tUdfMutex.Lock(); + UdfFunc_t * pUdf = g_hUdfFuncs ( sTok ); + if ( pUdf ) + { + if ( pUdf->m_bToDrop ) + pUdf = NULL; // DROP in progress, can not use + else + pUdf->m_iUserCount++; // protection against concurrent DROP (decrements in ~UdfCall_t()) + g_tUdfMutex.Unlock(); + + lvalp->iNode = m_dUdfCalls.GetLength(); + m_dUdfCalls.Add ( new UdfCall_t() ); + m_dUdfCalls.Last()->m_pUdf = pUdf; + return TOK_UDF; + } + g_tUdfMutex.Unlock(); + } + + m_sLexerError.SetSprintf ( "unknown identifier '%s' (not an attribute, not a function)", sTok.cstr() ); + return -1; + } + + // check for known operators, then + switch ( *m_pCur ) + { + case '+': + case '-': + case '*': + case '/': + case '(': + case ')': + case ',': + case '&': + case '|': + case '%': + return *m_pCur++; + + case '<': + m_pCur++; + if ( *m_pCur=='>' ) { m_pCur++; return TOK_NE; } + if ( *m_pCur=='=' ) { m_pCur++; return TOK_LTE; } + return '<'; + + case '>': + m_pCur++; + if ( *m_pCur=='=' ) { m_pCur++; return TOK_GTE; } + return '>'; + + case '=': + m_pCur++; + if ( *m_pCur=='=' ) m_pCur++; + return TOK_EQ; + + // special case for float values without leading zero + case '.': + { + char * pEnd = NULL; + lvalp->fConst = (float) strtod ( m_pCur, &pEnd ); + if ( pEnd ) + { + m_pCur = pEnd; + return TOK_CONST_FLOAT; + } + break; + } + + case '\'': + case '"': + { + const char cEnd = *m_pCur; + for ( const char * s = m_pCur+1; *s; s++ ) + { + if ( *s==cEnd ) + { + int iBeg = (int)( m_pCur-m_sExpr ); + int iLen = (int)( s-m_sExpr ) - iBeg + 1; + lvalp->iConst = ( int64_t(iBeg)<<32 ) + iLen; + m_pCur = s+1; + return TOK_CONST_STRING; + + } else if ( *s=='\\' ) + { + s++; + if ( !*s ) + break; + } + } + m_sLexerError.SetSprintf ( "unterminated string constant near '%s'", m_pCur ); + return -1; + } + } + + m_sLexerError.SetSprintf ( "unknown operator '%c' near '%s'", *m_pCur, m_pCur ); + return -1; +} + +/// is add/sub? +static inline bool IsAddSub ( const ExprNode_t * pNode ) +{ + return pNode->m_iToken=='+' || pNode->m_iToken=='-'; +} + +/// is arithmetic? +static inline bool IsAri ( const ExprNode_t * pNode ) +{ + int iTok = pNode->m_iToken; + return iTok=='+' || iTok=='-' || iTok=='*' || iTok=='/'; +} + +/// is constant? +static inline bool IsConst ( const ExprNode_t * pNode ) +{ + return pNode->m_iToken==TOK_CONST_INT || pNode->m_iToken==TOK_CONST_FLOAT; +} + +/// float value of a constant +static inline float FloatVal ( const ExprNode_t * pNode ) +{ + assert ( IsConst(pNode) ); + return pNode->m_iToken==TOK_CONST_INT + ? (float)pNode->m_iConst + : pNode->m_fConst; +} + +/// optimize subtree +void ExprParser_t::Optimize ( int iNode ) +{ + if ( iNode<0 ) + return; + + Optimize ( m_dNodes[iNode].m_iLeft ); + Optimize ( m_dNodes[iNode].m_iRight ); + + ExprNode_t * pRoot = &m_dNodes[iNode]; + ExprNode_t * pLeft = ( pRoot->m_iLeft>=0 ) ? &m_dNodes[pRoot->m_iLeft] : NULL; + ExprNode_t * pRight = ( pRoot->m_iRight>=0 ) ? &m_dNodes[pRoot->m_iRight] : NULL; + + // arithmetic expression with constants + if ( IsAri(pRoot) ) + { + // optimize fully-constant expressions + if ( IsConst(pLeft) && IsConst(pRight) ) + { + if ( pLeft->m_iToken==TOK_CONST_INT && pRight->m_iToken==TOK_CONST_INT && pRoot->m_iToken!='/' ) + { + switch ( pRoot->m_iToken ) + { + case '+': pRoot->m_iConst = pLeft->m_iConst + pRight->m_iConst; break; + case '-': pRoot->m_iConst = pLeft->m_iConst - pRight->m_iConst; break; + case '*': pRoot->m_iConst = pLeft->m_iConst * pRight->m_iConst; break; + default: assert ( 0 && "internal error: unhandled arithmetic token during const-int optimization" ); + } + pRoot->m_iToken = TOK_CONST_INT; + + } else + { + float fLeft = FloatVal(pLeft); + float fRight = FloatVal(pRight); + switch ( pRoot->m_iToken ) + { + case '+': pRoot->m_fConst = fLeft + fRight; break; + case '-': pRoot->m_fConst = fLeft - fRight; break; + case '*': pRoot->m_fConst = fLeft * fRight; break; + case '/': pRoot->m_fConst = fLeft / fRight; break; + default: assert ( 0 && "internal error: unhandled arithmetic token during const-float optimization" ); + } + pRoot->m_iToken = TOK_CONST_FLOAT; + } + return; + } + + // canonize (expr op const), move const to the left + if ( IsConst(pRight) ) + { + assert ( !IsConst(pLeft) ); + Swap ( pRoot->m_iLeft, pRoot->m_iRight ); + Swap ( pLeft, pRight ); + + // fixup (expr-const) to ((-const)+expr) + if ( pRoot->m_iToken=='-' ) + { + pRoot->m_iToken = '+'; + if ( pLeft->m_iToken==TOK_CONST_INT ) + pLeft->m_iConst *= -1; + else + pLeft->m_fConst *= -1; + } + + // fixup (expr/const) to ((1/const)*expr) + if ( pRoot->m_iToken=='/' ) + { + pRoot->m_iToken = '*'; + pLeft->m_fConst = 1.0f / FloatVal(pLeft); + pLeft->m_iToken = TOK_CONST_FLOAT; + } + } + + // optimize compatible operations with constants + if ( IsConst(pLeft) && IsAri(pRight) && IsAddSub(pRoot)==IsAddSub(pRight) && IsConst ( &m_dNodes[pRight->m_iLeft] ) ) + { + ExprNode_t * pConst = &m_dNodes[pRight->m_iLeft]; + ExprNode_t * pExpr = &m_dNodes[pRight->m_iRight]; + assert ( !IsConst(pExpr) ); // must had been optimized + + // optimize (left op (const op2 expr)) to ((left op const) op*op2 expr) + if ( IsAddSub(pRoot) ) + { + // fold consts + int iSign = ( ( pRoot->m_iToken=='+' ) ? 1 : -1 ); + if ( pLeft->m_iToken==TOK_CONST_INT && pConst->m_iToken==TOK_CONST_INT ) + { + pLeft->m_iConst += iSign*pConst->m_iConst; + } else + { + pLeft->m_fConst = FloatVal(pLeft) + iSign*FloatVal(pConst); + pLeft->m_iToken = TOK_CONST_FLOAT; + } + + // fold ops + pRoot->m_iToken = ( pRoot->m_iToken==pRight->m_iToken ) ? '+' : '-'; + + } else + { + // fols consts + if ( pRoot->m_iToken=='*' && pLeft->m_iToken==TOK_CONST_INT && pConst->m_iToken==TOK_CONST_INT ) + { + pLeft->m_iConst *= pConst->m_iConst; + } else + { + if ( pRoot->m_iToken=='*' ) + pLeft->m_fConst = FloatVal(pLeft) * FloatVal(pConst); + else + pLeft->m_fConst = FloatVal(pLeft) / FloatVal(pConst); + pLeft->m_iToken = TOK_CONST_FLOAT; + } + + // fold ops + pRoot->m_iToken = ( pRoot->m_iToken==pRight->m_iToken ) ? '*' : '/'; + } + + // promote expr arg + pRoot->m_iRight = pRight->m_iRight; + pRight = pExpr; + } + + // promote children constants + if ( IsAri(pLeft) && IsAddSub(pLeft)==IsAddSub(pRoot) && IsConst ( &m_dNodes[pLeft->m_iLeft] ) ) + { + // ((const op lr) op2 right) gets replaced with (const op (lr op2/op right)) + // constant gets promoted one level up + int iConst = pLeft->m_iLeft; + pLeft->m_iLeft = pLeft->m_iRight; + pLeft->m_iRight = pRoot->m_iRight; // (c op lr) -> (lr ... r) + + switch ( pLeft->m_iToken ) + { + case '+': + case '*': + // (c + lr) op r -> c + (lr op r) + // (c * lr) op r -> c * (lr op r) + Swap ( pLeft->m_iToken, pRoot->m_iToken ); + break; + + case '-': + // (c - lr) + r -> c - (lr - r) + // (c - lr) - r -> c - (lr + r) + pLeft->m_iToken = ( pRoot->m_iToken=='+' ? '-' : '+' ); + pRoot->m_iToken = '-'; + break; + + case '/': + // (c / lr) * r -> c * (r / lr) + // (c / lr) / r -> c / (r * lr) + Swap ( pLeft->m_iLeft, pLeft->m_iRight ); + pLeft->m_iToken = ( pRoot->m_iToken=='*' ) ? '/' : '*'; + break; + + default: + assert ( 0 && "internal error: unhandled op in left-const promotion" ); + } + + pRoot->m_iRight = pRoot->m_iLeft; + pRoot->m_iLeft = iConst; + + pLeft = &m_dNodes[pRoot->m_iLeft]; + pRight = &m_dNodes[pRoot->m_iRight]; + } + } + + // madd, mul3 + // FIXME! separate pass for these? otherwise (2+(a*b))+3 won't get const folding + if ( ( pRoot->m_iToken=='+' || pRoot->m_iToken=='*' ) && ( pLeft->m_iToken=='*' || pRight->m_iToken=='*' ) ) + { + if ( pLeft->m_iToken!='*' ) + { + Swap ( pRoot->m_iLeft, pRoot->m_iRight ); + Swap ( pLeft, pRight ); + } + + pLeft->m_iToken = ','; + + int iLeft = pRoot->m_iLeft; + int iRight = pRoot->m_iRight; + + pRoot->m_iFunc = ( pRoot->m_iToken=='+' ) ? FUNC_MADD : FUNC_MUL3; + pRoot->m_iToken = TOK_FUNC; + pRoot->m_iLeft = m_dNodes.GetLength(); + pRoot->m_iRight = -1; + assert ( g_dFuncs[pRoot->m_iFunc].m_eFunc==pRoot->m_iFunc ); + + ExprNode_t & tArgs = m_dNodes.Add(); // invalidates all pointers! + tArgs.m_iToken = ','; + tArgs.m_iLeft = iLeft; + tArgs.m_iRight = iRight; + return; + } + + // division by a constant (replace with multiplication by inverse) + if ( pRoot->m_iToken=='/' && pRight->m_iToken==TOK_CONST_FLOAT ) + { + pRight->m_fConst = 1.0f / pRight->m_fConst; + pRoot->m_iToken = '*'; + return; + } + + // unary function from a constant + if ( pRoot->m_iToken==TOK_FUNC && g_dFuncs[pRoot->m_iFunc].m_iArgs==1 && IsConst(pLeft) ) + { + float fArg = pLeft->m_iToken==TOK_CONST_FLOAT ? pLeft->m_fConst : float(pLeft->m_iConst); + switch ( g_dFuncs[pRoot->m_iFunc].m_eFunc ) + { + case FUNC_ABS: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = fabs(fArg); break; + case FUNC_CEIL: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(ceil(fArg)); break; + case FUNC_FLOOR: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(floor(fArg)); break; + case FUNC_SIN: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(sin(fArg)); break; + case FUNC_COS: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(cos(fArg)); break; + case FUNC_LN: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(log(fArg)); break; + case FUNC_LOG2: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(log(fArg)*M_LOG2E); break; + case FUNC_LOG10: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(log(fArg)*M_LOG10E); break; + case FUNC_EXP: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(exp(fArg)); break; + case FUNC_SQRT: pRoot->m_iToken = TOK_CONST_FLOAT; pRoot->m_fConst = float(sqrt(fArg)); break; + default: break; + } + return; + } + + // constant function (such as NOW()) + if ( pRoot->m_iToken==TOK_FUNC && pRoot->m_iFunc==FUNC_NOW ) + { + pRoot->m_iToken = TOK_CONST_INT; + pRoot->m_iConst = m_iConstNow; + return; + } + + // SINT(int-attr) + if ( pRoot->m_iToken==TOK_FUNC && pRoot->m_iFunc==FUNC_SINT + && ( pLeft->m_iToken==TOK_ATTR_INT || pLeft->m_iToken==TOK_ATTR_BITS ) ) + { + pRoot->m_iToken = TOK_ATTR_SINT; + pRoot->m_tLocator = pLeft->m_tLocator; + } +} + + +// debug dump +void ExprParser_t::Dump ( int iNode ) +{ + if ( iNode<0 ) + return; + + ExprNode_t & tNode = m_dNodes[iNode]; + switch ( tNode.m_iToken ) + { + case TOK_CONST_INT: + printf ( INT64_FMT, tNode.m_iConst ); + break; + + case TOK_CONST_FLOAT: + printf ( "%f", tNode.m_fConst ); + break; + + case TOK_ATTR_INT: + case TOK_ATTR_SINT: + printf ( "row[%d]", tNode.m_tLocator.m_iBitOffset/32 ); + break; + + default: + printf ( "(" ); + Dump ( tNode.m_iLeft ); + printf ( ( tNode.m_iToken<256 ) ? " %c " : " op-%d ", tNode.m_iToken ); + Dump ( tNode.m_iRight ); + printf ( ")" ); + break; + } +} + + +/// fold arglist into array +static void FoldArglist ( ISphExpr * pLeft, CSphVector & dArgs ) +{ + if ( !pLeft || !pLeft->IsArglist() ) + { + dArgs.Add ( pLeft ); + return; + } + + Expr_Arglist_c * pArgs = dynamic_cast ( pLeft ); + assert ( pLeft ); + + Swap ( dArgs, pArgs->m_dArgs ); + SafeRelease ( pLeft ); +} + + +typedef sphinx_int64_t ( *UdfInt_fn ) ( SPH_UDF_INIT *, SPH_UDF_ARGS *, char * ); +typedef double ( *UdfDouble_fn ) ( SPH_UDF_INIT *, SPH_UDF_ARGS *, char * ); + + +class Expr_Udf_c : public ISphExpr +{ +public: + CSphVector m_dArgs; + +protected: + UdfCall_t * m_pCall; + mutable CSphVector m_dArgvals; + mutable char m_bError; + +public: + explicit Expr_Udf_c ( UdfCall_t * pCall ) + : m_pCall ( pCall ) + , m_bError ( 0 ) + { + SPH_UDF_ARGS & tArgs = m_pCall->m_tArgs; + + assert ( tArgs.arg_values==NULL ); + tArgs.arg_values = new char * [ tArgs.arg_count ]; + tArgs.str_lengths = new int [ tArgs.arg_count ]; + + m_dArgvals.Resize ( tArgs.arg_count ); + ARRAY_FOREACH ( i, m_dArgvals ) + tArgs.arg_values[i] = (char*) &m_dArgvals[i]; + } + + ~Expr_Udf_c () + { + if ( m_pCall->m_pUdf->m_fnDeinit ) + m_pCall->m_pUdf->m_fnDeinit ( &m_pCall->m_tInit ); + SafeDeleteArray ( m_pCall->m_tArgs.arg_names ); + SafeDeleteArray ( m_pCall->m_tArgs.arg_types ); + SafeDeleteArray ( m_pCall->m_tArgs.arg_values ); + SafeDeleteArray ( m_pCall->m_tArgs.str_lengths ); + SafeDelete ( m_pCall ); + + ARRAY_FOREACH ( i, m_dArgs ) + SafeRelease ( m_dArgs[i] ); + } + + void FillArgs ( const CSphMatch & tMatch ) const + { + // FIXME? a cleaner way to reinterpret? + SPH_UDF_ARGS & tArgs = m_pCall->m_tArgs; + ARRAY_FOREACH ( i, m_dArgs ) + { + switch ( tArgs.arg_types[i] ) + { + case SPH_UDF_TYPE_UINT32: *(DWORD*)&m_dArgvals[i] = m_dArgs[i]->IntEval ( tMatch ); break; + case SPH_UDF_TYPE_INT64: m_dArgvals[i] = m_dArgs[i]->Int64Eval ( tMatch ); break; + case SPH_UDF_TYPE_FLOAT: *(float*)&m_dArgvals[i] = m_dArgs[i]->Eval ( tMatch ); break; + case SPH_UDF_TYPE_STRING: tArgs.str_lengths[i] = m_dArgs[i]->StringEval ( tMatch, (const BYTE**)&tArgs.arg_values[i] ); break; + case SPH_UDF_TYPE_UINT32SET: tArgs.arg_values[i] = (char*) m_dArgs[i]->MvaEval ( tMatch ); break; + default: assert ( 0 ); m_dArgvals[i] = 0; break; + } + } + } + + virtual void SetMVAPool ( const DWORD * pPool ) { ARRAY_FOREACH ( i, m_dArgs ) m_dArgs[i]->SetMVAPool ( pPool ); } + virtual void SetStringPool ( const BYTE * pPool ) { ARRAY_FOREACH ( i, m_dArgs ) m_dArgs[i]->SetStringPool ( pPool ); } + virtual void GetDependencyColumns ( CSphVector & dDeps ) const { ARRAY_FOREACH ( i, m_dArgs ) m_dArgs[i]->GetDependencyColumns ( dDeps ); } +}; + + +class Expr_UdfInt_c : public Expr_Udf_c +{ +public: + explicit Expr_UdfInt_c ( UdfCall_t * pCall ) + : Expr_Udf_c ( pCall ) + { + assert ( pCall->m_pUdf->m_eRetType==SPH_ATTR_INTEGER || pCall->m_pUdf->m_eRetType==SPH_ATTR_BIGINT ); + } + + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const + { + if ( m_bError ) + return 0; + FillArgs ( tMatch ); + UdfInt_fn pFn = (UdfInt_fn) m_pCall->m_pUdf->m_fnFunc; + return (int) pFn ( &m_pCall->m_tInit, &m_pCall->m_tArgs, &m_bError ); + } + + virtual int IntEval ( const CSphMatch & tMatch ) const { return (int) Int64Eval ( tMatch ); } + virtual float Eval ( const CSphMatch & tMatch ) const { return (float) Int64Eval ( tMatch ); } +}; + + +class Expr_UdfFloat_c : public Expr_Udf_c +{ +public: + explicit Expr_UdfFloat_c ( UdfCall_t * pCall ) + : Expr_Udf_c ( pCall ) + { + assert ( pCall->m_pUdf->m_eRetType==SPH_ATTR_FLOAT ); + } + + virtual float Eval ( const CSphMatch & tMatch ) const + { + if ( m_bError ) + return 0; + FillArgs ( tMatch ); + UdfDouble_fn pFn = (UdfDouble_fn) m_pCall->m_pUdf->m_fnFunc; + return (float) pFn ( &m_pCall->m_tInit, &m_pCall->m_tArgs, &m_bError ); + } + + virtual int IntEval ( const CSphMatch & tMatch ) const { return (int) Eval ( tMatch ); } + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return (int64_t) Eval ( tMatch ); } +}; + + +ISphExpr * ExprParser_t::CreateUdfNode ( int iCall, ISphExpr * pLeft ) +{ + Expr_Udf_c * pRes = NULL; + switch ( m_dUdfCalls[iCall]->m_pUdf->m_eRetType ) + { + case SPH_ATTR_INTEGER: + case SPH_ATTR_BIGINT: + pRes = new Expr_UdfInt_c ( m_dUdfCalls[iCall] ); + break; + case SPH_ATTR_FLOAT: + pRes = new Expr_UdfFloat_c ( m_dUdfCalls[iCall] ); + break; + default: + m_sParserError.SetSprintf ( "internal error: unhandled type %d in CreateUdfNode()", m_dUdfCalls[iCall]->m_pUdf->m_eRetType ); + break; + } + if ( pRes ) + { + if ( pLeft ) + FoldArglist ( pLeft, pRes->m_dArgs ); + m_dUdfCalls[iCall] = NULL; // evaluator owns it now + } + return pRes; +} + + +/// fold nodes subtree into opcodes +ISphExpr * ExprParser_t::CreateTree ( int iNode ) +{ + if ( iNode<0 ) + return NULL; + + const ExprNode_t & tNode = m_dNodes[iNode]; + + // avoid spawning argument node in some cases + bool bSkipLeft = false; + bool bSkipRight = false; + if ( tNode.m_iToken==TOK_FUNC ) + { + Func_e eFunc = g_dFuncs[tNode.m_iFunc].m_eFunc; + if ( eFunc==FUNC_GEODIST || eFunc==FUNC_IN ) + bSkipLeft = true; + if ( eFunc==FUNC_IN ) + bSkipRight = true; + } + + ISphExpr * pLeft = bSkipLeft ? NULL : CreateTree ( tNode.m_iLeft ); + ISphExpr * pRight = bSkipRight ? NULL : CreateTree ( tNode.m_iRight ); + +#define LOC_SPAWN_POLY(_classname) \ + if ( tNode.m_eArgType==SPH_ATTR_INTEGER ) return new _classname##Int_c ( pLeft, pRight ); \ + else if ( tNode.m_eArgType==SPH_ATTR_BIGINT ) return new _classname##Int64_c ( pLeft, pRight ); \ + else return new _classname##Float_c ( pLeft, pRight ); + + switch ( tNode.m_iToken ) + { + case TOK_ATTR_INT: return new Expr_GetInt_c ( tNode.m_tLocator, tNode.m_iLocator ); + case TOK_ATTR_BITS: return new Expr_GetBits_c ( tNode.m_tLocator, tNode.m_iLocator ); + case TOK_ATTR_FLOAT: return new Expr_GetFloat_c ( tNode.m_tLocator, tNode.m_iLocator ); + case TOK_ATTR_SINT: return new Expr_GetSint_c ( tNode.m_tLocator, tNode.m_iLocator ); + case TOK_ATTR_STRING: return new Expr_GetString_c ( tNode.m_tLocator, tNode.m_iLocator ); + case TOK_ATTR_MVA64: + case TOK_ATTR_MVA32: return new Expr_GetMva_c ( tNode.m_tLocator, tNode.m_iLocator ); + + case TOK_CONST_FLOAT: return new Expr_GetConst_c ( tNode.m_fConst ); + case TOK_CONST_INT: + if ( tNode.m_eRetType==SPH_ATTR_INTEGER ) + return new Expr_GetIntConst_c ( (int)tNode.m_iConst ); + else if ( tNode.m_eRetType==SPH_ATTR_BIGINT ) + return new Expr_GetInt64Const_c ( tNode.m_iConst ); + else + return new Expr_GetConst_c ( float(tNode.m_iConst) ); + break; + case TOK_CONST_STRING: + return new Expr_GetStrConst_c ( m_sExpr+(int)( tNode.m_iConst>>32 ), (int)( tNode.m_iConst & 0xffffffffUL ) ); + + case TOK_ID: return new Expr_GetId_c (); + case TOK_WEIGHT: return new Expr_GetWeight_c (); + + case '+': return new Expr_Add_c ( pLeft, pRight ); break; + case '-': return new Expr_Sub_c ( pLeft, pRight ); break; + case '*': return new Expr_Mul_c ( pLeft, pRight ); break; + case '/': return new Expr_Div_c ( pLeft, pRight ); break; + case '&': return new Expr_BitAnd_c ( pLeft, pRight ); break; + case '|': return new Expr_BitOr_c ( pLeft, pRight ); break; + case '%': return new Expr_Mod_c ( pLeft, pRight ); break; + + case '<': LOC_SPAWN_POLY ( Expr_Lt ); break; + case '>': LOC_SPAWN_POLY ( Expr_Gt ); break; + case TOK_LTE: LOC_SPAWN_POLY ( Expr_Lte ); break; + case TOK_GTE: LOC_SPAWN_POLY ( Expr_Gte ); break; + case TOK_EQ: LOC_SPAWN_POLY ( Expr_Eq ); break; + case TOK_NE: LOC_SPAWN_POLY ( Expr_Ne ); break; + case TOK_AND: LOC_SPAWN_POLY ( Expr_And ); break; + case TOK_OR: LOC_SPAWN_POLY ( Expr_Or ); break; + case TOK_NOT: + if ( tNode.m_eArgType==SPH_ATTR_BIGINT ) + return new Expr_NotInt64_c ( pLeft ); + else + return new Expr_NotInt_c ( pLeft ); + break; + + case ',': return new Expr_Arglist_c ( pLeft, pRight ); break; + case TOK_NEG: assert ( pRight==NULL ); return new Expr_Neg_c ( pLeft ); break; + case TOK_FUNC: + { + // fold arglist to array + Func_e eFunc = g_dFuncs[tNode.m_iFunc].m_eFunc; + + CSphVector dArgs; + if ( !bSkipLeft ) + FoldArglist ( pLeft, dArgs ); + + // spawn proper function + assert ( tNode.m_iFunc>=0 && tNode.m_iFunc=0 && g_dFuncs[tNode.m_iFunc].m_iArgs==dArgs.GetLength() ) || // arg count matches, + ( g_dFuncs[tNode.m_iFunc].m_iArgs<0 && -g_dFuncs[tNode.m_iFunc].m_iArgs<=dArgs.GetLength() ) ); // or min vararg count reached + + switch ( eFunc ) + { + case FUNC_NOW: assert ( 0 ); break; // prevent gcc bitching + + case FUNC_ABS: return new Expr_Abs_c ( dArgs[0] ); + case FUNC_CEIL: return new Expr_Ceil_c ( dArgs[0] ); + case FUNC_FLOOR: return new Expr_Floor_c ( dArgs[0] ); + case FUNC_SIN: return new Expr_Sin_c ( dArgs[0] ); + case FUNC_COS: return new Expr_Cos_c ( dArgs[0] ); + case FUNC_LN: return new Expr_Ln_c ( dArgs[0] ); + case FUNC_LOG2: return new Expr_Log2_c ( dArgs[0] ); + case FUNC_LOG10: return new Expr_Log10_c ( dArgs[0] ); + case FUNC_EXP: return new Expr_Exp_c ( dArgs[0] ); + case FUNC_SQRT: return new Expr_Sqrt_c ( dArgs[0] ); + case FUNC_BIGINT: return dArgs[0]; + case FUNC_SINT: return new Expr_Sint_c ( dArgs[0] ); + case FUNC_CRC32: return new Expr_Crc32_c ( dArgs[0] ); + + case FUNC_DAY: return new Expr_Day_c ( dArgs[0] ); + case FUNC_MONTH: return new Expr_Month_c ( dArgs[0] ); + case FUNC_YEAR: return new Expr_Year_c ( dArgs[0] ); + case FUNC_YEARMONTH: return new Expr_YearMonth_c ( dArgs[0] ); + case FUNC_YEARMONTHDAY: return new Expr_YearMonthDay_c ( dArgs[0] ); + + case FUNC_MIN: return new Expr_Min_c ( dArgs[0], dArgs[1] ); + case FUNC_MAX: return new Expr_Max_c ( dArgs[0], dArgs[1] ); + case FUNC_POW: return new Expr_Pow_c ( dArgs[0], dArgs[1] ); + case FUNC_IDIV: return new Expr_Idiv_c ( dArgs[0], dArgs[1] ); + + case FUNC_IF: return new Expr_If_c ( dArgs[0], dArgs[1], dArgs[2] ); + case FUNC_MADD: return new Expr_Madd_c ( dArgs[0], dArgs[1], dArgs[2] ); + case FUNC_MUL3: return new Expr_Mul3_c ( dArgs[0], dArgs[1], dArgs[2] ); + + case FUNC_INTERVAL: return CreateIntervalNode ( tNode.m_iLeft, dArgs ); + case FUNC_IN: return CreateInNode ( iNode ); + case FUNC_BITDOT: return CreateBitdotNode ( tNode.m_iLeft, dArgs ); + + case FUNC_GEODIST: return CreateGeodistNode ( tNode.m_iLeft ); + } + assert ( 0 && "unhandled function id" ); + break; + } + + case TOK_UDF: return CreateUdfNode ( tNode.m_iFunc, pLeft ); break; + case TOK_HOOK_IDENT: return m_pHook->CreateNode ( tNode.m_iFunc, NULL ); break; + case TOK_HOOK_FUNC: return m_pHook->CreateNode ( tNode.m_iFunc, pLeft ); break; + default: assert ( 0 && "unhandled token type" ); break; + } + +#undef LOC_SPAWN_POLY + + // fire exit + SafeRelease ( pLeft ); + SafeRelease ( pRight ); + return NULL; +} + +////////////////////////////////////////////////////////////////////////// + +/// arg-vs-set function (currently, IN or INTERVAL) evaluator traits +template < typename T > +class Expr_ArgVsSet_c : public ISphExpr +{ +protected: + ISphExpr * m_pArg; + +public: + explicit Expr_ArgVsSet_c ( ISphExpr * pArg ) : m_pArg ( pArg ) {} + ~Expr_ArgVsSet_c () { SafeRelease ( m_pArg ); } + + virtual int IntEval ( const CSphMatch & tMatch ) const = 0; + virtual float Eval ( const CSphMatch & tMatch ) const { return (float) IntEval ( tMatch ); } + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { return IntEval ( tMatch ); } + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + assert ( m_pArg ); + m_pArg->GetDependencyColumns ( dColumns ); + } + +protected: + T ExprEval ( ISphExpr * pArg, const CSphMatch & tMatch ) const; +}; + +template<> int Expr_ArgVsSet_c::ExprEval ( ISphExpr * pArg, const CSphMatch & tMatch ) const { return pArg->IntEval ( tMatch ); } +template<> DWORD Expr_ArgVsSet_c::ExprEval ( ISphExpr * pArg, const CSphMatch & tMatch ) const { return (DWORD)pArg->IntEval ( tMatch ); } +template<> float Expr_ArgVsSet_c::ExprEval ( ISphExpr * pArg, const CSphMatch & tMatch ) const { return pArg->Eval ( tMatch ); } +template<> int64_t Expr_ArgVsSet_c::ExprEval ( ISphExpr * pArg, const CSphMatch & tMatch ) const { return pArg->Int64Eval ( tMatch ); } + + +/// arg-vs-constant-set +template < typename T > +class Expr_ArgVsConstSet_c : public Expr_ArgVsSet_c +{ +protected: + CSphVector m_dValues; + +public: + /// take ownership of arg, pre-evaluate and dismiss turn points + Expr_ArgVsConstSet_c ( ISphExpr * pArg, CSphVector & dArgs, int iSkip ) + : Expr_ArgVsSet_c ( pArg ) + { + CSphMatch tDummy; + for ( int i=iSkip; i::ExprEval ( dArgs[i], tDummy ) ); + SafeRelease ( dArgs[i] ); + } + } + + /// take ownership of arg, and copy that constlist + Expr_ArgVsConstSet_c ( ISphExpr * pArg, ConstList_c * pConsts ) + : Expr_ArgVsSet_c ( pArg ) + { + if ( pConsts->m_eRetType==SPH_ATTR_FLOAT ) + { + m_dValues.Reserve ( pConsts->m_dFloats.GetLength() ); + ARRAY_FOREACH ( i, pConsts->m_dFloats ) + m_dValues.Add ( (T)pConsts->m_dFloats[i] ); + } else + { + m_dValues.Reserve ( pConsts->m_dInts.GetLength() ); + ARRAY_FOREACH ( i, pConsts->m_dInts ) + m_dValues.Add ( (T)pConsts->m_dInts[i] ); + } + } +}; + +////////////////////////////////////////////////////////////////////////// + +/// INTERVAL() evaluator for constant turn point values case +template < typename T > +class Expr_IntervalConst_c : public Expr_ArgVsConstSet_c +{ +public: + /// take ownership of arg, pre-evaluate and dismiss turn points + explicit Expr_IntervalConst_c ( CSphVector & dArgs ) + : Expr_ArgVsConstSet_c ( dArgs[0], dArgs, 1 ) + {} + + /// evaluate arg, return interval id + virtual int IntEval ( const CSphMatch & tMatch ) const + { + T val = ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage + ARRAY_FOREACH ( i, this->m_dValues ) // FIXME! OPTIMIZE! perform binary search here + if ( valm_dValues[i] ) + return i; + return this->m_dValues.GetLength(); + } + + virtual void SetMVAPool ( const DWORD * pMvaPool ) { this->m_pArg->SetMVAPool ( pMvaPool ); } + virtual void SetStringPool ( const BYTE * pStrings ) { this->m_pArg->SetStringPool ( pStrings ); } +}; + + +/// generic INTERVAL() evaluator +template < typename T > +class Expr_Interval_c : public Expr_ArgVsSet_c +{ +protected: + CSphVector m_dTurnPoints; + +public: + /// take ownership of arg and turn points + explicit Expr_Interval_c ( const CSphVector & dArgs ) + : Expr_ArgVsSet_c ( dArgs[0] ) + { + for ( int i=1; im_pArg, tMatch ); // 'this' fixes gcc braindamage + ARRAY_FOREACH ( i, m_dTurnPoints ) + if ( val < Expr_ArgVsSet_c::ExprEval ( m_dTurnPoints[i], tMatch ) ) + return i; + return m_dTurnPoints.GetLength(); + } + + virtual void SetMVAPool ( const DWORD * pMvaPool ) + { + this->m_pArg->SetMVAPool ( pMvaPool ); + ARRAY_FOREACH ( i, m_dTurnPoints ) + m_dTurnPoints[i]->SetMVAPool ( pMvaPool ); + } + + virtual void SetStringPool ( const BYTE * pStrings ) + { + this->m_pArg->SetStringPool ( pStrings ); + ARRAY_FOREACH ( i, m_dTurnPoints ) + m_dTurnPoints[i]->SetStringPool ( pStrings ); + } + + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + Expr_ArgVsSet_c::GetDependencyColumns ( dColumns ); + ARRAY_FOREACH ( i, m_dTurnPoints ) + m_dTurnPoints[i]->GetDependencyColumns ( dColumns ); + } +}; + +////////////////////////////////////////////////////////////////////////// + +/// IN() evaluator, arbitrary scalar expression vs. constant values +template < typename T > +class Expr_In_c : public Expr_ArgVsConstSet_c +{ +public: + /// pre-sort values for binary search + Expr_In_c ( ISphExpr * pArg, ConstList_c * pConsts ) : + Expr_ArgVsConstSet_c ( pArg, pConsts ) + { + this->m_dValues.Sort(); + } + + /// evaluate arg, check if the value is within set + virtual int IntEval ( const CSphMatch & tMatch ) const + { + T val = ExprEval ( this->m_pArg, tMatch ); // 'this' fixes gcc braindamage + return this->m_dValues.BinarySearch ( val )!=NULL; + } + + virtual void SetMVAPool ( const DWORD * pMvaPool ) { this->m_pArg->SetMVAPool ( pMvaPool ); } + virtual void SetStringPool ( const BYTE * pStrings ) { this->m_pArg->SetStringPool ( pStrings ); } +}; + + +/// IN() evaluator, MVA attribute vs. constant values +template < bool IS_MVA64 > +class Expr_MVAIn_c : public Expr_ArgVsConstSet_c +{ +public: + /// pre-sort values for binary search + Expr_MVAIn_c ( const CSphAttrLocator & tLoc, int iLocator, ConstList_c * pConsts ) + : Expr_ArgVsConstSet_c ( NULL, pConsts ) + , m_tLocator ( tLoc ) + , m_iLocator ( iLocator ) + , m_pMvaPool ( NULL ) + { + assert ( tLoc.m_iBitOffset>=0 && tLoc.m_iBitCount>0 ); + this->m_dValues.Sort(); + } + + int MvaEval ( const DWORD * pMva ) const; + + /// evaluate arg, check if any values are within set + virtual int IntEval ( const CSphMatch & tMatch ) const + { + const DWORD * pMva = tMatch.GetAttrMVA ( m_tLocator, m_pMvaPool ); + if ( !pMva ) + return 0; + + return MvaEval ( pMva ); + } + + virtual void SetMVAPool ( const DWORD * pMvaPool ) + { + m_pMvaPool = pMvaPool; // finally, some real setup work!!! + } + + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + dColumns.Add ( m_iLocator ); + } + +protected: + CSphAttrLocator m_tLocator; + int m_iLocator; + const DWORD * m_pMvaPool; +}; + + +template<> +int Expr_MVAIn_c::MvaEval ( const DWORD * pMva ) const +{ + // OPTIMIZE! FIXME! factor out a common function with Filter_MVAValues::Eval() + DWORD uLen = *pMva++; + const DWORD * pMvaMax = pMva+uLen; + + const DWORD * pFilter = m_dValues.Begin(); + const DWORD * pFilterMax = pFilter + m_dValues.GetLength(); + + const DWORD * L = pMva; + const DWORD * R = pMvaMax - 1; + for ( ; pFilter < pFilterMax; pFilter++ ) + { + while ( L<=R ) + { + const DWORD * m = L + (R - L) / 2; + + if ( *pFilter > *m ) + L = m + 1; + else if ( *pFilter < *m ) + R = m - 1; + else + return 1; + } + R = pMvaMax - 1; + } + return 0; +} + + +template<> +int Expr_MVAIn_c::MvaEval ( const DWORD * pMva ) const +{ + // OPTIMIZE! FIXME! factor out a common function with Filter_MVAValues::Eval() + DWORD uLen = *pMva++; + assert ( ( uLen%2 )==0 ); + const DWORD * pMvaMax = pMva+uLen; + + const DWORD * pFilter = m_dValues.Begin(); + const DWORD * pFilterMax = pFilter + m_dValues.GetLength(); + + const uint64_t * L = (const uint64_t *)pMva; + const uint64_t * R = (const uint64_t *)( pMvaMax - 2 ); + for ( ; pFilter < pFilterMax; pFilter++ ) + { + while ( L<=R ) + { + const uint64_t * pVal = L + (R - L) / 2; + uint64_t uMva = MVA_UPSIZE ( (const DWORD *)pVal ); + + if ( *pFilter > uMva ) + L = pVal + 1; + else if ( *pFilter < uMva ) + R = pVal - 1; + else + return 1; + } + R = (const uint64_t *) ( pMvaMax - 2 ); + } + return 0; +} + + +////////////////////////////////////////////////////////////////////////// + +/// generic BITDOT() evaluator +template < typename T > +class Expr_Bitdot_c : public Expr_ArgVsSet_c +{ +protected: + CSphVector m_dBitWeights; + +public: + /// take ownership of arg and turn points + explicit Expr_Bitdot_c ( const CSphVector & dArgs ) + : Expr_ArgVsSet_c ( dArgs[0] ) + { + for ( int i=1; im_pArg->Int64Eval ( tMatch ); // 'this' fixes gcc braindamage + T tRes = 0; + + int iBit = 0; + while ( uArg && iBit::ExprEval ( m_dBitWeights[iBit], tMatch ); + uArg >>= 1; + iBit++; + } + + return tRes; + } + +public: + virtual float Eval ( const CSphMatch & tMatch ) const + { + return (float) DoEval ( tMatch ); + } + + virtual int IntEval ( const CSphMatch & tMatch ) const + { + return (int) DoEval ( tMatch ); + } + + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const + { + return (int64_t) DoEval ( tMatch ); + } + + virtual void SetMVAPool ( const DWORD * pMvaPool ) + { + this->m_pArg->SetMVAPool ( pMvaPool ); + ARRAY_FOREACH ( i, m_dBitWeights ) + m_dBitWeights[i]->SetMVAPool ( pMvaPool ); + } + + virtual void SetStringPool ( const BYTE * pStrings ) + { + this->m_pArg->SetStringPool ( pStrings ); + ARRAY_FOREACH ( i, m_dBitWeights ) + m_dBitWeights[i]->SetStringPool ( pStrings ); + } + + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + Expr_ArgVsSet_c::GetDependencyColumns ( dColumns ); + ARRAY_FOREACH ( i, m_dBitWeights ) + m_dBitWeights[i]->GetDependencyColumns ( dColumns ); + } +}; + +////////////////////////////////////////////////////////////////////////// + +static inline double sphSqr ( double v ) { return v * v; } + +static inline float CalcGeodist ( float fPointLat, float fPointLon, float fAnchorLat, float fAnchorLon ) +{ + const double R = 6384000; + double dlat = fPointLat - fAnchorLat; + double dlon = fPointLon - fAnchorLon; + double a = sphSqr ( sin ( dlat/2 ) ) + cos ( fPointLat ) * cos ( fAnchorLat ) * sphSqr ( sin ( dlon/2 ) ); + double c = 2*asin ( Min ( 1, sqrt(a) ) ); + return (float)(R*c); +} + +/// geodist() - attr point, constant anchor +class Expr_GeodistAttrConst_c: public ISphExpr +{ +public: + Expr_GeodistAttrConst_c ( CSphAttrLocator tLat, CSphAttrLocator tLon, float fAnchorLat, float fAnchorLon, int iLat, int iLon ) + : m_tLat ( tLat ) + , m_tLon ( tLon ) + , m_fAnchorLat ( fAnchorLat ) + , m_fAnchorLon ( fAnchorLon ) + , m_iLat ( iLat ) + , m_iLon ( iLon ) + {} + + virtual float Eval ( const CSphMatch & tMatch ) const + { + return CalcGeodist ( tMatch.GetAttrFloat ( m_tLat ), tMatch.GetAttrFloat ( m_tLon ), m_fAnchorLat, m_fAnchorLon ); + } + + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + dColumns.Add ( m_iLat ); + dColumns.Add ( m_iLon ); + } + +private: + CSphAttrLocator m_tLat; + CSphAttrLocator m_tLon; + + float m_fAnchorLat; + float m_fAnchorLon; + + int m_iLat; + int m_iLon; +}; + +/// geodist() - expr point, constant anchor +class Expr_GeodistConst_c: public ISphExpr +{ +public: + Expr_GeodistConst_c ( ISphExpr * pLat, ISphExpr * pLon, float fAnchorLat, float fAnchorLon ) + : m_pLat ( pLat ) + , m_pLon ( pLon ) + , m_fAnchorLat ( fAnchorLat ) + , m_fAnchorLon ( fAnchorLon ) + {} + + ~Expr_GeodistConst_c () + { + SafeRelease ( m_pLon ); + SafeRelease ( m_pLat ); + } + + virtual float Eval ( const CSphMatch & tMatch ) const + { + return CalcGeodist ( m_pLat->Eval(tMatch), m_pLon->Eval(tMatch), m_fAnchorLat, m_fAnchorLon ); + } + + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + m_pLat->GetDependencyColumns ( dColumns ); + m_pLon->GetDependencyColumns ( dColumns ); + } + +private: + ISphExpr * m_pLat; + ISphExpr * m_pLon; + + float m_fAnchorLat; + float m_fAnchorLon; +}; + +/// geodist() - expr point, expr anchor +class Expr_Geodist_c: public ISphExpr +{ +public: + Expr_Geodist_c ( ISphExpr * pLat, ISphExpr * pLon, ISphExpr * pAnchorLat, ISphExpr * pAnchorLon ) + : m_pLat ( pLat ) + , m_pLon ( pLon ) + , m_pAnchorLat ( pAnchorLat ) + , m_pAnchorLon ( pAnchorLon ) + {} + + ~Expr_Geodist_c () + { + SafeRelease ( m_pAnchorLon ); + SafeRelease ( m_pAnchorLat ); + SafeRelease ( m_pLon ); + SafeRelease ( m_pLat ); + } + + virtual float Eval ( const CSphMatch & tMatch ) const + { + return CalcGeodist ( m_pLat->Eval(tMatch), m_pLon->Eval(tMatch), m_pAnchorLat->Eval(tMatch), m_pAnchorLon->Eval(tMatch) ); + } + + virtual void GetDependencyColumns ( CSphVector & dColumns ) const + { + m_pLat->GetDependencyColumns ( dColumns ); + m_pLon->GetDependencyColumns ( dColumns ); + m_pAnchorLat->GetDependencyColumns ( dColumns ); + m_pAnchorLon->GetDependencyColumns ( dColumns ); + } + +private: + ISphExpr * m_pLat; + ISphExpr * m_pLon; + + ISphExpr * m_pAnchorLat; + ISphExpr * m_pAnchorLon; +}; + +////////////////////////////////////////////////////////////////////////// + +void ExprParser_t::GatherArgTypes ( int iNode, CSphVector & dTypes ) +{ + if ( iNode<0 ) + return; + + const ExprNode_t & tNode = m_dNodes[iNode]; + if ( tNode.m_iToken==',' ) + { + GatherArgTypes ( tNode.m_iLeft, dTypes ); + GatherArgTypes ( tNode.m_iRight, dTypes ); + } else + { + dTypes.Add ( tNode.m_iToken ); + } +} + +void ExprParser_t::GatherArgNodes ( int iNode, CSphVector & dNodes ) +{ + if ( iNode<0 ) + return; + + const ExprNode_t & tNode = m_dNodes[iNode]; + if ( tNode.m_iToken==',' ) + { + GatherArgNodes ( tNode.m_iLeft, dNodes ); + GatherArgNodes ( tNode.m_iRight, dNodes ); + } else + dNodes.Add ( iNode ); +} + +bool ExprParser_t::CheckForConstSet ( int iArgsNode, int iSkip ) +{ + CSphVector dTypes; + GatherArgTypes ( iArgsNode, dTypes ); + + for ( int i=iSkip; i +void ExprParser_t::WalkTree ( int iRoot, T & FUNCTOR ) +{ + if ( iRoot>=0 ) + { + const ExprNode_t & tNode = m_dNodes[iRoot]; + FUNCTOR.Enter ( tNode ); + WalkTree ( tNode.m_iLeft, FUNCTOR ); + WalkTree ( tNode.m_iRight, FUNCTOR ); + FUNCTOR.Exit ( tNode ); + } +} + + +ISphExpr * ExprParser_t::CreateIntervalNode ( int iArgsNode, CSphVector & dArgs ) +{ + assert ( dArgs.GetLength()>=2 ); + + bool bConst = CheckForConstSet ( iArgsNode, 1 ); + ESphAttr eAttrType = m_dNodes[iArgsNode].m_eArgType; + if ( bConst ) + { + switch ( eAttrType ) + { + case SPH_ATTR_INTEGER: return new Expr_IntervalConst_c ( dArgs ); break; + case SPH_ATTR_BIGINT: return new Expr_IntervalConst_c ( dArgs ); break; + default: return new Expr_IntervalConst_c ( dArgs ); break; + } + } else + { + switch ( eAttrType ) + { + case SPH_ATTR_INTEGER: return new Expr_Interval_c ( dArgs ); break; + case SPH_ATTR_BIGINT: return new Expr_Interval_c ( dArgs ); break; + default: return new Expr_Interval_c ( dArgs ); break; + } + } +} + + +ISphExpr * ExprParser_t::CreateInNode ( int iNode ) +{ + const ExprNode_t & tNode = m_dNodes[iNode]; + + if ( m_dNodes[tNode.m_iRight].m_iToken!=TOK_CONST_LIST ) + { + m_sCreateError = "IN() arguments must be constants (except the 1st one)"; + return NULL; + } + + assert ( m_dNodes[tNode.m_iRight].m_iToken==TOK_CONST_LIST ); + ConstList_c * pConst = m_dNodes[tNode.m_iRight].m_pConsts; + + bool bMVA = ( m_dNodes[tNode.m_iLeft].m_iToken==TOK_ATTR_MVA32 + || m_dNodes[tNode.m_iLeft].m_iToken==TOK_ATTR_MVA64 ); + if ( bMVA ) + { + if ( m_dNodes[tNode.m_iLeft].m_iToken==TOK_ATTR_MVA32 ) + return new Expr_MVAIn_c ( m_dNodes[tNode.m_iLeft].m_tLocator, m_dNodes[tNode.m_iLeft].m_iLocator, pConst ); + else + return new Expr_MVAIn_c ( m_dNodes[tNode.m_iLeft].m_tLocator, m_dNodes[tNode.m_iLeft].m_iLocator, pConst ); + } else + { + ISphExpr * pArg = CreateTree ( tNode.m_iLeft ); + switch ( pConst->m_eRetType ) + { + case SPH_ATTR_INTEGER: return new Expr_In_c ( pArg, pConst ); break; + case SPH_ATTR_BIGINT: return new Expr_In_c ( pArg, pConst ); break; + default: return new Expr_In_c ( pArg, pConst ); break; + } + } +} + + +ISphExpr * ExprParser_t::CreateGeodistNode ( int iArgs ) +{ + CSphVector dArgs; + GatherArgNodes ( iArgs, dArgs ); + assert ( dArgs.GetLength()==4 ); + + bool bConst1 = ( IsConst ( &m_dNodes[dArgs[0]] ) && IsConst ( &m_dNodes[dArgs[1]] ) ); + bool bConst2 = ( IsConst ( &m_dNodes[dArgs[2]] ) && IsConst ( &m_dNodes[dArgs[3]] ) ); + + if ( bConst1 && bConst2 ) + { + return new Expr_GetConst_c ( CalcGeodist ( + m_dNodes[dArgs[0]].FloatVal(), m_dNodes[dArgs[1]].FloatVal(), + m_dNodes[dArgs[2]].FloatVal(), m_dNodes[dArgs[3]].FloatVal() ) ); + } + + if ( bConst1 ) + { + Swap ( dArgs[0], dArgs[2] ); + Swap ( dArgs[1], dArgs[3] ); + Swap ( bConst1, bConst2 ); + } + + if ( bConst2 ) + { + // constant anchor + if ( m_dNodes[dArgs[0]].m_iToken==TOK_ATTR_FLOAT && m_dNodes[dArgs[1]].m_iToken==TOK_ATTR_FLOAT ) + { + // attr point + return new Expr_GeodistAttrConst_c ( + m_dNodes[dArgs[0]].m_tLocator, m_dNodes[dArgs[1]].m_tLocator, + m_dNodes[dArgs[2]].FloatVal(), m_dNodes[dArgs[3]].FloatVal(), + m_dNodes[dArgs[0]].m_iLocator, m_dNodes[dArgs[1]].m_iLocator ); + } else + { + // expr point + return new Expr_GeodistConst_c ( + CreateTree ( dArgs[0] ), CreateTree ( dArgs[1] ), + m_dNodes[dArgs[2]].FloatVal(), m_dNodes[dArgs[3]].FloatVal() ); + } + } + + // four expressions + CSphVector dExpr; + FoldArglist ( CreateTree ( iArgs ), dExpr ); + assert ( dExpr.GetLength()==4 ); + return new Expr_Geodist_c ( dExpr[0], dExpr[1], dExpr[2], dExpr[3] ); +} + + +ISphExpr * ExprParser_t::CreateBitdotNode ( int iArgsNode, CSphVector & dArgs ) +{ + assert ( dArgs.GetLength()>=1 ); + + ESphAttr eAttrType = m_dNodes[iArgsNode].m_eRetType; + switch ( eAttrType ) + { + case SPH_ATTR_INTEGER: return new Expr_Bitdot_c ( dArgs ); break; + case SPH_ATTR_BIGINT: return new Expr_Bitdot_c ( dArgs ); break; + default: return new Expr_Bitdot_c ( dArgs ); break; + } +} + +////////////////////////////////////////////////////////////////////////// + +int yylex ( YYSTYPE * lvalp, ExprParser_t * pParser ) +{ + return pParser->GetToken ( lvalp ); +} + +void yyerror ( ExprParser_t * pParser, const char * sMessage ) +{ + pParser->m_sParserError.SetSprintf ( "Sphinx expr: %s near '%s'", sMessage, pParser->m_pLastTokenStart ); +} + +#if USE_WINDOWS +#pragma warning(push,1) +#endif + +#include "yysphinxexpr.c" + +#if USE_WINDOWS +#pragma warning(pop) +#endif + +////////////////////////////////////////////////////////////////////////// + +ExprParser_t::~ExprParser_t () +{ + // i kinda own those constlists + ARRAY_FOREACH ( i, m_dNodes ) + if ( m_dNodes[i].m_iToken==TOK_CONST_LIST ) + SafeDelete ( m_dNodes[i].m_pConsts ); + + // free any UDF calls that weren't taken over + ARRAY_FOREACH ( i, m_dUdfCalls ) + SafeDelete ( m_dUdfCalls[i] ); +} + +ESphAttr ExprParser_t::GetWidestRet ( int iLeft, int iRight ) +{ + ESphAttr uLeftType = ( iLeft<0 ) ? SPH_ATTR_INTEGER : m_dNodes[iLeft].m_eRetType; + ESphAttr uRightType = ( iRight<0 ) ? SPH_ATTR_INTEGER : m_dNodes[iRight].m_eRetType; + + ESphAttr uRes = SPH_ATTR_FLOAT; // default is float + if ( ( uLeftType==SPH_ATTR_INTEGER || uLeftType==SPH_ATTR_BIGINT ) && + ( uRightType==SPH_ATTR_INTEGER || uRightType==SPH_ATTR_BIGINT ) ) + { + // both types are integer (int32 or int64), compute in integers + uRes = ( uLeftType==SPH_ATTR_INTEGER && uRightType==SPH_ATTR_INTEGER ) + ? SPH_ATTR_INTEGER + : SPH_ATTR_BIGINT; + } + return uRes; +} + +int ExprParser_t::AddNodeInt ( int64_t iValue ) +{ + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = TOK_CONST_INT; + tNode.m_eRetType = GetIntType ( iValue ); + tNode.m_iConst = iValue; + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeFloat ( float fValue ) +{ + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = TOK_CONST_FLOAT; + tNode.m_eRetType = SPH_ATTR_FLOAT; + tNode.m_fConst = fValue; + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeString ( int64_t iValue ) +{ + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = TOK_CONST_STRING; + tNode.m_eRetType = SPH_ATTR_STRING; + tNode.m_iConst = iValue; + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeAttr ( int iTokenType, uint64_t uAttrLocator ) +{ + assert ( iTokenType==TOK_ATTR_INT || iTokenType==TOK_ATTR_BITS || iTokenType==TOK_ATTR_FLOAT + || iTokenType==TOK_ATTR_MVA32 || iTokenType==TOK_ATTR_MVA64 || iTokenType==TOK_ATTR_STRING ); + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = iTokenType; + sphUnpackAttrLocator ( uAttrLocator, &tNode ); + + if ( iTokenType==TOK_ATTR_FLOAT ) tNode.m_eRetType = SPH_ATTR_FLOAT; + else if ( iTokenType==TOK_ATTR_MVA32 ) tNode.m_eRetType = SPH_ATTR_UINT32SET; + else if ( iTokenType==TOK_ATTR_MVA64 ) tNode.m_eRetType = SPH_ATTR_UINT64SET; + else if ( iTokenType==TOK_ATTR_STRING ) tNode.m_eRetType = SPH_ATTR_STRING; + else if ( tNode.m_tLocator.m_iBitCount>32 ) tNode.m_eRetType = SPH_ATTR_BIGINT; + else tNode.m_eRetType = SPH_ATTR_INTEGER; + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeID () +{ + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = TOK_ID; + tNode.m_eRetType = USE_64BIT ? SPH_ATTR_BIGINT : SPH_ATTR_INTEGER; + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeWeight () +{ + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = TOK_WEIGHT; + tNode.m_eRetType = SPH_ATTR_INTEGER; + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeOp ( int iOp, int iLeft, int iRight ) +{ + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = iOp; + + // deduce type + tNode.m_eRetType = SPH_ATTR_FLOAT; // default to float + if ( iOp==TOK_NEG ) + { + // NEG just inherits the type + tNode.m_eArgType = m_dNodes[iLeft].m_eRetType; + tNode.m_eRetType = tNode.m_eArgType; + + } else if ( iOp==TOK_NOT ) + { + // NOT result is integer, and its argument must be integer + tNode.m_eArgType = m_dNodes[iLeft].m_eRetType; + tNode.m_eRetType = SPH_ATTR_INTEGER; + if (!( tNode.m_eArgType==SPH_ATTR_INTEGER || tNode.m_eArgType==SPH_ATTR_BIGINT )) + { + m_sParserError.SetSprintf ( "NOT argument must be integer" ); + return -1; + } + + } else if ( iOp==TOK_LTE || iOp==TOK_GTE || iOp==TOK_EQ || iOp==TOK_NE + || iOp=='<' || iOp=='>' || iOp==TOK_AND || iOp==TOK_OR + || iOp=='+' || iOp=='-' || iOp=='*' || iOp==',' + || iOp=='&' || iOp=='|' || iOp=='%' ) + { + tNode.m_eArgType = GetWidestRet ( iLeft, iRight ); + + // arithmetical operations return arg type, logical return int + tNode.m_eRetType = ( iOp=='+' || iOp=='-' || iOp=='*' || iOp==',' || iOp=='&' || iOp=='|' || iOp=='%' ) + ? tNode.m_eArgType + : SPH_ATTR_INTEGER; + + // both logical and bitwise AND/OR can only be over ints + if ( ( iOp==TOK_AND || iOp==TOK_OR || iOp=='&' || iOp=='|' ) + && !( tNode.m_eArgType==SPH_ATTR_INTEGER || tNode.m_eArgType==SPH_ATTR_BIGINT )) + { + m_sParserError.SetSprintf ( "%s arguments must be integer", ( iOp==TOK_AND || iOp=='&' ) ? "AND" : "OR" ); + return -1; + } + + // MOD can only be over ints + if ( iOp=='%' + && !( tNode.m_eArgType==SPH_ATTR_INTEGER || tNode.m_eArgType==SPH_ATTR_BIGINT )) + { + m_sParserError.SetSprintf ( "MOD arguments must be integer" ); + return -1; + } + + } else + { + // check for unknown op + assert ( iOp=='/' && "unknown op in AddNodeOp() type deducer" ); + } + + tNode.m_iArgs = 0; + if ( iOp==',' ) + { + if ( iLeft>=0 ) tNode.m_iArgs += ( m_dNodes[iLeft].m_iToken==',' ) ? m_dNodes[iLeft].m_iArgs : 1; + if ( iRight>=0 ) tNode.m_iArgs += ( m_dNodes[iRight].m_iToken==',' ) ? m_dNodes[iRight].m_iArgs : 1; + } + tNode.m_iLeft = iLeft; + tNode.m_iRight = iRight; + return m_dNodes.GetLength()-1; +} + +struct TypeCheck_fn +{ + bool * m_pStr; + bool * m_pMva; + + explicit TypeCheck_fn ( bool * pStr, bool * pMva ) + : m_pStr ( pStr ) + , m_pMva ( pMva ) + {} + + void Enter ( const ExprNode_t & tNode ) + { + *m_pStr |= ( tNode.m_eRetType==SPH_ATTR_STRING ); + *m_pMva |= ( tNode.m_eRetType==SPH_ATTR_UINT32SET || tNode.m_eRetType==SPH_ATTR_UINT64SET ); + } + + void Exit ( const ExprNode_t & ) + {} +}; + +int ExprParser_t::AddNodeFunc ( int iFunc, int iLeft, int iRight ) +{ + // regular case, iLeft is entire arglist, iRight is -1 + // special case for IN(), iLeft is arg, iRight is constlist + assert ( iFunc>=0 && iFunc=0 ) + iArgc = ( m_dNodes[iLeft].m_iToken==',' ) ? m_dNodes[iLeft].m_iArgs : 1; + if ( iExpectedArgc<0 ) + { + if ( iArgc<-iExpectedArgc ) + { + m_sParserError.SetSprintf ( "%s() called with %d args, at least %d args expected", g_dFuncs[iFunc].m_sName, iArgc, -iExpectedArgc ); + return -1; + } + } else if ( iArgc!=iExpectedArgc ) + { + m_sParserError.SetSprintf ( "%s() called with %d args, %d args expected", g_dFuncs[iFunc].m_sName, iArgc, iExpectedArgc ); + return -1; + } + } + + // check arg types + // + // check for string args + // most builtin functions take numeric args only + bool bGotString = false, bGotMva = false; + if ( iRight<0 ) + { + TypeCheck_fn fnCheck ( &bGotString, &bGotMva ); + WalkTree ( iLeft, fnCheck ); + } + if ( bGotString && eFunc!=FUNC_CRC32 ) + { + m_sParserError.SetSprintf ( "%s() arguments can not be string", g_dFuncs[iFunc].m_sName ); + return -1; + } + if ( bGotMva && eFunc!=FUNC_IN ) + { + m_sParserError.SetSprintf ( "%s() arguments can not be MVA", g_dFuncs[iFunc].m_sName ); + return -1; + } + + // check that first BITDOT arg is integer or bigint + if ( eFunc==FUNC_BITDOT ) + { + int iLeftmost = iLeft; + while ( m_dNodes[iLeftmost].m_iToken==',' ) + iLeftmost = m_dNodes[iLeftmost].m_iLeft; + + ESphAttr eArg = m_dNodes[iLeftmost].m_eRetType; + if ( eArg!=SPH_ATTR_INTEGER && eArg!=SPH_ATTR_BIGINT ) + { + m_sParserError.SetSprintf ( "first BITDOT() argument must be integer" ); + return -1; + } + } + + // check that first SINT or timestamp family arg is integer + if ( eFunc==FUNC_SINT || eFunc==FUNC_DAY || eFunc==FUNC_MONTH || eFunc==FUNC_YEAR || eFunc==FUNC_YEARMONTH || eFunc==FUNC_YEARMONTHDAY ) + { + assert ( iLeft>=0 ); + if ( m_dNodes[iLeft].m_eRetType!=SPH_ATTR_INTEGER ) + { + m_sParserError.SetSprintf ( "%s() argument must be integer", g_dFuncs[iFunc].m_sName ); + return -1; + } + } + + // do add + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = TOK_FUNC; + tNode.m_iFunc = iFunc; + tNode.m_iLeft = iLeft; + tNode.m_iRight = iRight; + tNode.m_eArgType = ( iLeft>=0 ) ? m_dNodes[iLeft].m_eRetType : SPH_ATTR_INTEGER; + tNode.m_eRetType = g_dFuncs[iFunc].m_eRet; + + // fixup return type in a few special cases + if ( eFunc==FUNC_MIN || eFunc==FUNC_MAX || eFunc==FUNC_MADD || eFunc==FUNC_MUL3 || eFunc==FUNC_ABS || eFunc==FUNC_IDIV ) + tNode.m_eRetType = tNode.m_eArgType; + + if ( eFunc==FUNC_BIGINT && tNode.m_eRetType==SPH_ATTR_FLOAT ) + tNode.m_eRetType = SPH_ATTR_FLOAT; // enforce if we can; FIXME! silently ignores BIGINT() on floats; should warn or raise an error + + if ( eFunc==FUNC_IF || eFunc==FUNC_BITDOT ) + tNode.m_eRetType = GetWidestRet ( iLeft, iRight ); + + // all ok + assert ( tNode.m_eRetType!=SPH_ATTR_NONE ); + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeUdf ( int iCall, int iArg ) +{ + UdfCall_t * pCall = m_dUdfCalls[iCall]; + SPH_UDF_INIT & tInit = pCall->m_tInit; + SPH_UDF_ARGS & tArgs = pCall->m_tArgs; + + // initialize UDF right here, at AST creation stage + // just because it's easy to gather arg types here + if ( iArg>=0 ) + { + // gather arg types + CSphVector dArgTypes; + + int iCur = iArg; + while ( iCur>=0 ) + { + if ( m_dNodes[iCur].m_iToken!=',' ) + { + dArgTypes.Add ( m_dNodes[iCur].m_eRetType ); + break; + } + + int iRight = m_dNodes[iCur].m_iRight; + if ( iRight>=0 ) + { + assert ( m_dNodes[iRight].m_iToken!=',' ); + dArgTypes.Add ( m_dNodes[iRight].m_eRetType ); + } + + iCur = m_dNodes[iCur].m_iLeft; + } + + assert ( dArgTypes.GetLength() ); + tArgs.arg_count = dArgTypes.GetLength(); + tArgs.arg_types = new sphinx_udf_argtype [ tArgs.arg_count ]; + + // we gathered internal type ids in right-to-left order + // reverse and remap + // FIXME! eliminate remap, maybe? + ARRAY_FOREACH ( i, dArgTypes ) + { + sphinx_udf_argtype & eRes = tArgs.arg_types [ tArgs.arg_count-1-i ]; + switch ( dArgTypes[i] ) + { + case SPH_ATTR_INTEGER: + case SPH_ATTR_TIMESTAMP: + case SPH_ATTR_ORDINAL: + case SPH_ATTR_BOOL: + case SPH_ATTR_WORDCOUNT: + eRes = SPH_UDF_TYPE_UINT32; + break; + case SPH_ATTR_FLOAT: + eRes = SPH_UDF_TYPE_FLOAT; + break; + case SPH_ATTR_BIGINT: + eRes = SPH_UDF_TYPE_INT64; + break; + case SPH_ATTR_STRING: + eRes = SPH_UDF_TYPE_STRING; + break; + case SPH_ATTR_UINT32SET: + eRes = SPH_UDF_TYPE_UINT32SET; + break; + default: + m_sParserError.SetSprintf ( "internal error: unmapped UDF argument type (arg=%d, type=%d)", i, dArgTypes[i] ); + return -1; + } + } + } + + // init + if ( pCall->m_pUdf->m_fnInit ) + { + char sError [ SPH_UDF_ERROR_LEN ]; + if ( pCall->m_pUdf->m_fnInit ( &tInit, &tArgs, sError ) ) + { + m_sParserError = sError; + return -1; + } + } + + // do add + ExprNode_t & tNode = m_dNodes.Add (); + tNode.m_iToken = TOK_UDF; + tNode.m_iFunc = iCall; + tNode.m_iLeft = iArg; + tNode.m_iRight = -1; + + // deduce type + tNode.m_eArgType = ( iArg>=0 ) ? m_dNodes[iArg].m_eRetType : SPH_ATTR_INTEGER; + tNode.m_eRetType = pCall->m_pUdf->m_eRetType; + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeConstlist ( int64_t iValue ) +{ + ExprNode_t & tNode = m_dNodes.Add(); + tNode.m_iToken = TOK_CONST_LIST; + tNode.m_pConsts = new ConstList_c(); + tNode.m_pConsts->Add ( iValue ); + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeConstlist ( float iValue ) +{ + ExprNode_t & tNode = m_dNodes.Add(); + tNode.m_iToken = TOK_CONST_LIST; + tNode.m_pConsts = new ConstList_c(); + tNode.m_pConsts->Add ( iValue ); + return m_dNodes.GetLength()-1; +} + +void ExprParser_t::AppendToConstlist ( int iNode, int64_t iValue ) +{ + m_dNodes[iNode].m_pConsts->Add ( iValue ); +} + +void ExprParser_t::AppendToConstlist ( int iNode, float iValue ) +{ + m_dNodes[iNode].m_pConsts->Add ( iValue ); +} + +int ExprParser_t::ConstlistFromUservar ( int iUservar ) +{ + if ( g_pUservarsHook ) + { + ExprNode_t & tNode = m_dNodes.Add(); + tNode.m_iToken = TOK_CONST_LIST; + tNode.m_pConsts = new ConstList_c(); + if ( g_pUservarsHook ( m_dUservars[iUservar], tNode.m_pConsts->m_dInts ) ) + { + return m_dNodes.GetLength()-1; + } else + { + SafeDelete ( tNode.m_pConsts ); + m_dNodes.Pop(); + } + } + m_sParserError.SetSprintf ( "undefined user variable '%s'", m_dUservars[iUservar].cstr() ); + return -1; +} + +int ExprParser_t::AddNodeHookIdent ( int iID ) +{ + ExprNode_t & tNode = m_dNodes.Add(); + tNode.m_iToken = TOK_HOOK_IDENT; + tNode.m_iFunc = iID; + tNode.m_eRetType = m_pHook->GetIdentType ( iID ); + return m_dNodes.GetLength()-1; +} + +int ExprParser_t::AddNodeHookFunc ( int iID, int iLeft ) +{ + // check args count + int iArgc = 0; + if ( iLeft>=0 ) + iArgc = ( m_dNodes[iLeft].m_iToken==',' ) ? m_dNodes[iLeft].m_iArgs : 1; + + int iExpectedArgc = m_pHook->GetExpectedArgc ( iID ); + if ( iArgc!=iExpectedArgc ) + { + m_sParserError.SetSprintf ( "%s() called with %d args, %d args expected", m_pHook->GetFuncName ( iID ), iArgc, iExpectedArgc ); + return -1; + } + + ExprNode_t & tNode = m_dNodes.Add(); + tNode.m_iToken = TOK_HOOK_FUNC; + tNode.m_iFunc = iID; + tNode.m_iLeft = iLeft; + tNode.m_iRight = -1; + + // deduce type + tNode.m_eArgType = ( iLeft>=0 ) ? m_dNodes[iLeft].m_eRetType : SPH_ATTR_INTEGER; + tNode.m_eRetType = m_pHook->GetFuncType ( iID, m_dNodes[iLeft].m_eRetType ); + + return m_dNodes.GetLength()-1; +} + + +struct WeightCheck_fn +{ + bool * m_pRes; + + explicit WeightCheck_fn ( bool * pRes ) + : m_pRes ( pRes ) + { + assert ( m_pRes ); + *m_pRes = false; + } + + void Enter ( const ExprNode_t & tNode ) + { + if ( tNode.m_iToken==TOK_WEIGHT ) + *m_pRes = true; + } + + void Exit ( const ExprNode_t & ) + {} +}; + + +struct HookCheck_fn +{ + ISphExprHook * m_pHook; + + explicit HookCheck_fn ( ISphExprHook * pHook ) + : m_pHook ( pHook ) + {} + + void Enter ( const ExprNode_t & tNode ) + { + if ( tNode.m_iToken==TOK_HOOK_IDENT || tNode.m_iToken==TOK_HOOK_FUNC ) + m_pHook->CheckEnter ( tNode.m_iFunc ); + } + + void Exit ( const ExprNode_t & tNode ) + { + if ( tNode.m_iToken==TOK_HOOK_IDENT || tNode.m_iToken==TOK_HOOK_FUNC ) + m_pHook->CheckExit ( tNode.m_iFunc ); + } +}; + + +ISphExpr * ExprParser_t::Parse ( const char * sExpr, const CSphSchema & tSchema, ESphAttr * pAttrType, bool * pUsesWeight, CSphString & sError ) +{ + m_sLexerError = ""; + m_sParserError = ""; + m_sCreateError = ""; + + // setup lexer + m_sExpr = sExpr; + m_pCur = sExpr; + m_pSchema = &tSchema; + + // setup constant functions + m_iConstNow = (int) time ( NULL ); + + // build tree + m_iParsed = -1; + yyparse ( this ); + + // handle errors + if ( m_iParsed<0 || !m_sLexerError.IsEmpty() || !m_sParserError.IsEmpty() ) + { + sError = !m_sLexerError.IsEmpty() ? m_sLexerError : m_sParserError; + if ( sError.IsEmpty() ) sError = "general parsing error"; + return NULL; + } + + // deduce return type + ESphAttr eAttrType = m_dNodes[m_iParsed].m_eRetType; + assert ( eAttrType==SPH_ATTR_INTEGER || eAttrType==SPH_ATTR_BIGINT || eAttrType==SPH_ATTR_FLOAT ); + + // perform optimizations + Optimize ( m_iParsed ); +#if 0 + Dump ( m_iParsed ); +#endif + + // create evaluator + ISphExpr * pRes = CreateTree ( m_iParsed ); + if ( !m_sCreateError.IsEmpty() ) + { + sError = m_sCreateError; + SafeRelease ( pRes ); + } else if ( !pRes ) + { + sError.SetSprintf ( "empty expression" ); + } + + if ( pAttrType ) + *pAttrType = eAttrType; + + if ( pUsesWeight ) + { + WeightCheck_fn tFunctor ( pUsesWeight ); + WalkTree ( m_iParsed, tFunctor ); + } + + if ( m_pHook ) + { + HookCheck_fn tFunctor ( m_pHook ); + WalkTree ( m_iParsed, tFunctor ); + } + + return pRes; +} + +////////////////////////////////////////////////////////////////////////// +// UDF MANAGER +////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS +#define HAVE_DLOPEN 1 +#define RTLD_LAZY 0 +#define RTLD_LOCAL 0 + +void * dlsym ( void * lib, const char * name ) +{ + return GetProcAddress ( (HMODULE)lib, name ); +} + +void * dlopen ( const char * libname, int ) +{ + return LoadLibraryEx ( libname, NULL, 0 ); +} + +int dlclose ( void * lib ) +{ + return FreeLibrary ( (HMODULE)lib ) + ? 0 + : GetLastError(); +} + +const char * dlerror() +{ + static char sError[256]; + DWORD uError = GetLastError(); + FormatMessage ( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, + uError, LANG_SYSTEM_DEFAULT, (LPTSTR)sError, sizeof(sError), NULL ); + return sError; +} +#endif // USE_WINDOWS + + +#if !HAVE_DLOPEN + +void sphUDFInit ( const char * ) +{ + return; +} + +bool sphUDFCreate ( const char *, const char *, ESphAttr, CSphString & sError ) +{ + sError = "no dlopen(); UDF support disabled"; + return false; +} + +bool sphUDFDrop ( const char *, CSphString & sError ) +{ + sError = "no dlopen(); UDF support disabled"; + return false; +} + +#else + +void sphUDFInit ( const char * sUdfDir ) +{ + if ( !sUdfDir || !*sUdfDir ) + return; + + g_sUdfDir = sUdfDir; + g_bUdfEnabled = true; +} + + +bool sphUDFCreate ( const char * szLib, const char * szFunc, ESphAttr eRetType, CSphString & sError ) +{ + if ( !g_bUdfEnabled ) + { + sError = "UDF support disabled (requires workers=threads; and a valid plugin_dir)"; + return false; + } + + // validate library name + for ( const char * p = szLib; *p; p++ ) + if ( *p=='/' || *p=='\\' ) + { + sError = "restricted character (path delimiter) in a library file name"; + return false; + } + + // from here, we need a lock (we intend to update UDF hash) + g_tUdfMutex.Lock(); + + // validate function name + CSphString sFunc ( szFunc ); + sFunc.ToLower(); + + if ( g_hUdfFuncs ( sFunc ) ) + { + sError.SetSprintf ( "UDF '%s' already exists", sFunc.cstr() ); + g_tUdfMutex.Unlock(); + return false; + } + + // lookup or load library + CSphString sLib; + sLib.SetSprintf ( "%s/%s", g_sUdfDir.cstr(), szLib ); + + UdfFunc_t tFunc; + tFunc.m_eRetType = eRetType; + tFunc.m_iUserCount = 0; + tFunc.m_bToDrop = false; + + bool bLoaded = false; + void * pHandle = NULL; + tFunc.m_pLib = g_hUdfLibs ( sLib ); + if ( !tFunc.m_pLib ) + { + bLoaded = true; + pHandle = dlopen ( sLib.cstr(), RTLD_LAZY | RTLD_LOCAL ); + if ( !pHandle ) + { + const char * sDlerror = dlerror(); + sError.SetSprintf ( "dlopen() failed: %s", sDlerror ? sDlerror : "(null)" ); + g_tUdfMutex.Unlock(); + return false; + } + sphLogDebug ( "dlopen(%s)=%p", sLib.cstr(), pHandle ); + + } else + { + pHandle = tFunc.m_pLib->m_pHandle; + } + assert ( pHandle ); + + // lookup and check function symbols + CSphString sName; + tFunc.m_fnFunc = dlsym ( pHandle, sFunc.cstr() ); + tFunc.m_fnInit = (UdfInit_fn) dlsym ( pHandle, sName.SetSprintf ( "%s_init", sFunc.cstr() ).cstr() ); + tFunc.m_fnDeinit = (UdfDeinit_fn) dlsym ( pHandle, sName.SetSprintf ( "%s_deinit", sFunc.cstr() ).cstr() ); + + if ( !tFunc.m_fnFunc || !tFunc.m_fnInit ) + { + sError.SetSprintf ( "symbol '%s%s' not found in '%s'", sFunc.cstr(), tFunc.m_fnFunc ? "_init" : "", szLib ); + if ( bLoaded ) + dlclose ( pHandle ); + g_tUdfMutex.Unlock(); + return false; + } + + // add library + if ( bLoaded ) + { + UdfLib_t tLib; + tLib.m_iFuncs = 1; + tLib.m_pHandle = pHandle; + Verify ( g_hUdfLibs.Add ( tLib, sLib ) ); + tFunc.m_pLib = g_hUdfLibs ( sLib ); + } else + { + tFunc.m_pLib->m_iFuncs++; + } + tFunc.m_pLibName = g_hUdfLibs.GetKeyPtr ( sLib ); + assert ( tFunc.m_pLib ); + + // add function + Verify ( g_hUdfFuncs.Add ( tFunc, sFunc ) ); + + // all ok + g_tUdfMutex.Unlock(); + return true; +} + + +bool sphUDFDrop ( const char * szFunc, CSphString & sError ) +{ + CSphString sFunc ( szFunc ); + sFunc.ToLower(); + + g_tUdfMutex.Lock(); + UdfFunc_t * pFunc = g_hUdfFuncs ( sFunc ); + if ( !pFunc || pFunc->m_bToDrop ) // handle concurrent drop in progress as "not exists" + { + sError.SetSprintf ( "UDF '%s' does not exist", sFunc.cstr() ); + g_tUdfMutex.Unlock(); + return false; + } + + const int UDF_DROP_TIMEOUT_SEC = 30; // in seconds + int64_t tmEnd = sphMicroTimer() + UDF_DROP_TIMEOUT_SEC*1000000; + + // mark function for deletion, to prevent new users + pFunc->m_bToDrop = true; + if ( pFunc->m_iUserCount ) + for ( ;; ) + { + // release lock and wait + // so that concurrent users could complete and release the function + g_tUdfMutex.Unlock(); + sphSleepMsec ( 50 ); + + // re-acquire lock + g_tUdfMutex.Lock(); + + // everyone out? proceed with dropping + assert ( pFunc->m_iUserCount>=0 ); + if ( pFunc->m_iUserCount<=0 ) + break; + + // timed out? clear deletion flag, and bail + if ( sphMicroTimer() > tmEnd ) + { + pFunc->m_bToDrop = false; + g_tUdfMutex.Unlock(); + + sError.SetSprintf ( "DROP timed out in (still got %d users after waiting for %d seconds); please retry", pFunc->m_iUserCount, UDF_DROP_TIMEOUT_SEC ); + return false; + } + } + + UdfLib_t * pLib = pFunc->m_pLib; + const CSphString * pLibName = pFunc->m_pLibName; + + Verify ( g_hUdfFuncs.Delete ( sFunc ) ); + if ( --pLib->m_iFuncs<=0 ) + { + // FIXME! running queries might be using this function + int iRes = dlclose ( pLib->m_pHandle ); + sphLogDebug ( "dlclose(%s)=%d", pLibName->cstr(), iRes ); + Verify ( g_hUdfLibs.Delete ( *pLibName ) ); + } + + g_tUdfMutex.Unlock(); + return true; +} +#endif // HAVE_DLOPEN + +////////////////////////////////////////////////////////////////////////// +// PUBLIC STUFF +////////////////////////////////////////////////////////////////////////// + +/// parser entry point +ISphExpr * sphExprParse ( const char * sExpr, const CSphSchema & tSchema, ESphAttr * pAttrType, bool * pUsesWeight, CSphString & sError, CSphSchema * pExtra, ISphExprHook * pHook ) +{ + // parse into opcodes + ExprParser_t tParser ( pExtra, pHook ); + return tParser.Parse ( sExpr, tSchema, pAttrType, pUsesWeight, sError ); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxexpr.h b/coreseek/csft-4.1/src/sphinxexpr.h new file mode 100755 index 0000000..5a91297 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxexpr.h @@ -0,0 +1,133 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinxexpr_ +#define _sphinxexpr_ + +#include "sphinxstd.h" + +/// forward decls +class CSphMatch; +struct CSphSchema; +struct CSphString; + +/// known attribute types +enum ESphAttr +{ + SPH_ATTR_NONE = 0, ///< not an attribute at all + SPH_ATTR_INTEGER = 1, ///< unsigned 32-bit integer + SPH_ATTR_TIMESTAMP = 2, ///< this attr is a timestamp + SPH_ATTR_ORDINAL = 3, ///< this attr is an ordinal string number (integer at search time, specially handled at indexing time) + SPH_ATTR_BOOL = 4, ///< this attr is a boolean bit field + SPH_ATTR_FLOAT = 5, ///< floating point number (IEEE 32-bit) + SPH_ATTR_BIGINT = 6, ///< signed 64-bit integer + SPH_ATTR_STRING = 7, ///< string (binary; in-memory) + SPH_ATTR_WORDCOUNT = 8, ///< string word count (integer at search time,tokenized and counted at indexing time) + SPH_ATTR_UINT32SET = 0x40000001UL, ///< MVA, set of unsigned 32-bit integers + SPH_ATTR_UINT64SET = 0x40000002UL ///< MVA, set of unsigned 64-bit integers +}; + +/// expression evaluator +/// can always be evaluated in floats using Eval() +/// can sometimes be evaluated in integers using IntEval(), depending on type as returned from sphExprParse() +struct ISphExpr : public ISphRefcounted +{ +public: + /// evaluate this expression for that match + virtual float Eval ( const CSphMatch & tMatch ) const = 0; + + /// evaluate this expression for that match, using int math + virtual int IntEval ( const CSphMatch & tMatch ) const { assert ( 0 ); return (int) Eval ( tMatch ); } + + /// evaluate this expression for that match, using int64 math + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const { assert ( 0 ); return (int64_t) Eval ( tMatch ); } + + /// evaluate string attr + virtual int StringEval ( const CSphMatch &, const BYTE ** ppStr ) const { *ppStr = NULL; return 0; } + + /// evaluate MVA attr + virtual const DWORD * MvaEval ( const CSphMatch & ) const { assert ( 0 ); return NULL; } + + /// check for arglist subtype + virtual bool IsArglist () const { return false; } + + /// setup MVA pool + virtual void SetMVAPool ( const DWORD * ) {} + + /// setup sting pool + virtual void SetStringPool ( const BYTE * ) {} + + /// get schema columns index which affect expression + virtual void GetDependencyColumns ( CSphVector & ) const {} +}; + +/// hook to extend expressions +/// lets one to add her own identifier and function handlers +struct ISphExprHook +{ + virtual ~ISphExprHook () {} + /// checks for an identifier known to the hook + /// returns -1 on failure, a non-negative OID on success + virtual int IsKnownIdent ( const char * sIdent ) = 0; + + /// checks for a valid function call + /// returns -1 on failure, a non-negative OID on success (possibly adjusted) + virtual int IsKnownFunc ( const char * sFunc ) = 0; + + /// create node by OID + virtual ISphExpr * CreateNode ( int iID, ISphExpr * pLeft ) = 0; + + /// get identifier return type by OID + virtual ESphAttr GetIdentType ( int iID ) = 0; + + /// get function return type by OID and argument type + virtual ESphAttr GetFuncType ( int iID, ESphAttr eArgType ) = 0; + + /// get expected function argument count by OID + virtual int GetExpectedArgc ( int iID ) = 0; + + /// get function name by OID + virtual const char * GetFuncName ( int iID ) = 0; + + /// recursive scope check + virtual void CheckEnter ( int iID ) = 0; + + /// recursive scope check + virtual void CheckExit ( int iID ) = 0; +}; + +/// parses given expression, builds evaluator +/// returns NULL and fills sError on failure +/// returns pointer to evaluator on success +/// fills pAttrType with result type (for now, can be SPH_ATTR_SINT or SPH_ATTR_FLOAT) +/// fills pUsesWeight with a flag whether match relevance is referenced in expression AST +ISphExpr * sphExprParse ( const char * sExpr, const CSphSchema & tSchema, ESphAttr * pAttrType, bool * pUsesWeight, CSphString & sError, CSphSchema * pExtra=NULL, ISphExprHook * pHook=NULL ); + +////////////////////////////////////////////////////////////////////////// + +/// initialize UDF manager +void sphUDFInit ( const char * sUdfDir ); + +/// load UDF function +bool sphUDFCreate ( const char * szLib, const char * szFunc, ESphAttr eRetType, CSphString & sError ); + +/// unload UDF function +bool sphUDFDrop ( const char * szFunc, CSphString & sError ); + +#endif // _sphinxexpr_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxexpr.o b/coreseek/csft-4.1/src/sphinxexpr.o new file mode 100644 index 0000000..4690f10 Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxexpr.o differ diff --git a/coreseek/csft-4.1/src/sphinxexpr.y b/coreseek/csft-4.1/src/sphinxexpr.y new file mode 100755 index 0000000..f5f3242 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxexpr.y @@ -0,0 +1,158 @@ +%lex-param { ExprParser_t * pParser } +%parse-param { ExprParser_t * pParser } +%pure-parser +%error-verbose + +%union { + int64_t iConst; // constant value + float fConst; // constant value + uint64_t iAttrLocator; // attribute locator (rowitem for int/float; offset+size for bits) + int iFunc; // function id + int iNode; // node, or uservar, or udf index +}; + +%token TOK_CONST_INT +%token TOK_CONST_FLOAT +%token TOK_CONST_STRING +%token TOK_ATTR_INT +%token TOK_ATTR_BITS +%token TOK_ATTR_FLOAT +%token TOK_ATTR_MVA32 +%token TOK_ATTR_MVA64 +%token TOK_ATTR_STRING +%token TOK_FUNC +%token TOK_FUNC_IN +%token TOK_USERVAR +%token TOK_UDF +%token TOK_HOOK_IDENT +%token TOK_HOOK_FUNC + +%token TOK_ATID +%token TOK_ATWEIGHT +%token TOK_ID +%token TOK_WEIGHT +%token TOK_COUNT +%token TOK_DISTINCT +%token TOK_CONST_LIST +%token TOK_ATTR_SINT + +%type attr +%type expr +%type arg +%type arglist +%type constlist +%type function + +%left TOK_OR +%left TOK_AND +%left '|' +%left '&' +%left TOK_EQ TOK_NE +%left '<' '>' TOK_LTE TOK_GTE +%left '+' '-' +%left '*' '/' '%' TOK_DIV TOK_MOD +%nonassoc TOK_NOT +%nonassoc TOK_NEG + +%% + +exprline: + expr { pParser->m_iParsed = $1; } + ; + +attr: + TOK_ATTR_INT { $$ = pParser->AddNodeAttr ( TOK_ATTR_INT, $1 ); } + | TOK_ATTR_BITS { $$ = pParser->AddNodeAttr ( TOK_ATTR_BITS, $1 ); } + | TOK_ATTR_FLOAT { $$ = pParser->AddNodeAttr ( TOK_ATTR_FLOAT, $1 ); } + ; + +expr: + attr + | function + | TOK_CONST_INT { $$ = pParser->AddNodeInt ( $1 ); } + | TOK_CONST_FLOAT { $$ = pParser->AddNodeFloat ( $1 ); } + | TOK_ATID { $$ = pParser->AddNodeID(); } + | TOK_ATWEIGHT { $$ = pParser->AddNodeWeight(); } + | TOK_ID { $$ = pParser->AddNodeID(); } + | TOK_WEIGHT '(' ')' { $$ = pParser->AddNodeWeight(); } + | TOK_HOOK_IDENT { $$ = pParser->AddNodeHookIdent ( $1 ); } + | '-' expr %prec TOK_NEG { $$ = pParser->AddNodeOp ( TOK_NEG, $2, -1 ); } + | TOK_NOT expr { $$ = pParser->AddNodeOp ( TOK_NOT, $2, -1 ); if ( $$<0 ) YYERROR; } + | expr '+' expr { $$ = pParser->AddNodeOp ( '+', $1, $3 ); } + | expr '-' expr { $$ = pParser->AddNodeOp ( '-', $1, $3 ); } + | expr '*' expr { $$ = pParser->AddNodeOp ( '*', $1, $3 ); } + | expr '/' expr { $$ = pParser->AddNodeOp ( '/', $1, $3 ); } + | expr '<' expr { $$ = pParser->AddNodeOp ( '<', $1, $3 ); } + | expr '>' expr { $$ = pParser->AddNodeOp ( '>', $1, $3 ); } + | expr '&' expr { $$ = pParser->AddNodeOp ( '&', $1, $3 ); } + | expr '|' expr { $$ = pParser->AddNodeOp ( '|', $1, $3 ); } + | expr '%' expr { $$ = pParser->AddNodeOp ( '%', $1, $3 ); } + | expr TOK_DIV expr { $$ = pParser->AddNodeFunc ( FUNC_IDIV, pParser->AddNodeOp ( ',', $1, $3 ) ); } + | expr TOK_MOD expr { $$ = pParser->AddNodeOp ( '%', $1, $3 ); } + | expr TOK_LTE expr { $$ = pParser->AddNodeOp ( TOK_LTE, $1, $3 ); } + | expr TOK_GTE expr { $$ = pParser->AddNodeOp ( TOK_GTE, $1, $3 ); } + | expr TOK_EQ expr { $$ = pParser->AddNodeOp ( TOK_EQ, $1, $3 ); } + | expr TOK_NE expr { $$ = pParser->AddNodeOp ( TOK_NE, $1, $3 ); } + | expr TOK_AND expr { $$ = pParser->AddNodeOp ( TOK_AND, $1, $3 ); if ( $$<0 ) YYERROR; } + | expr TOK_OR expr { $$ = pParser->AddNodeOp ( TOK_OR, $1, $3 ); if ( $$<0 ) YYERROR; } + | '(' expr ')' { $$ = $2; } + ; + +arg: + expr + | TOK_ATTR_STRING { $$ = pParser->AddNodeAttr ( TOK_ATTR_STRING, $1 ); } + | TOK_ATTR_MVA32 { $$ = pParser->AddNodeAttr ( TOK_ATTR_MVA32, $1 ); } + | TOK_ATTR_MVA64 { $$ = pParser->AddNodeAttr ( TOK_ATTR_MVA64, $1 ); } + | TOK_CONST_STRING { $$ = pParser->AddNodeString ( $1 ); } + ; + +arglist: + arg { $$ = $1; } + | arglist ',' arg { $$ = pParser->AddNodeOp ( ',', $1, $3 ); } + ; + +constlist: + TOK_CONST_INT { $$ = pParser->AddNodeConstlist ( $1 ); } + | TOK_CONST_FLOAT { $$ = pParser->AddNodeConstlist ( $1 ); } + | constlist ',' TOK_CONST_INT { pParser->AppendToConstlist ( $$, $3 ); } + | constlist ',' TOK_CONST_FLOAT { pParser->AppendToConstlist ( $$, $3 ); } + ; + +function: + TOK_FUNC '(' arglist ')' { $$ = pParser->AddNodeFunc ( $1, $3 ); if ( $$<0 ) YYERROR; } + | TOK_FUNC '(' ')' { $$ = pParser->AddNodeFunc ( $1, -1 ); if ( $$<0 ) YYERROR; } + | TOK_UDF '(' arglist ')' { $$ = pParser->AddNodeUdf ( $1, $3 ); if ( $$<0 ) YYERROR; } + | TOK_UDF '(' ')' { $$ = pParser->AddNodeUdf ( $1, -1 ); if ( $$<0 ) YYERROR; } + | TOK_FUNC_IN '(' attr ',' constlist ')' + { + $$ = pParser->AddNodeFunc ( $1, $3, $5 ); + } + | TOK_FUNC_IN '(' TOK_ID ',' constlist ')' + { + $$ = pParser->AddNodeFunc ( $1, pParser->AddNodeID(), $5 ); + } + | TOK_FUNC_IN '(' TOK_ATID ',' constlist ')' + { + $$ = pParser->AddNodeFunc ( $1, pParser->AddNodeID(), $5 ); + } + | TOK_FUNC_IN '(' TOK_ATTR_MVA32 ',' constlist ')' + { + $$ = pParser->AddNodeAttr ( TOK_ATTR_MVA32, $3 ); + $$ = pParser->AddNodeFunc ( $1, $$, $5 ); + } + | TOK_FUNC_IN '(' TOK_ATTR_MVA64 ',' constlist ')' + { + $$ = pParser->AddNodeAttr ( TOK_ATTR_MVA64, $3 ); + $$ = pParser->AddNodeFunc ( $1, $$, $5 ); + } + | TOK_FUNC_IN '(' attr ',' TOK_USERVAR ')' + { + int iConstlist = pParser->ConstlistFromUservar ( $5 ); + if ( iConstlist<0 ) + YYERROR; + $$ = pParser->AddNodeFunc ( $1, $3, iConstlist ); + } + | TOK_HOOK_FUNC '(' arglist ')' { $$ = pParser->AddNodeHookFunc ( $1, $3 ); if ( $$<0 ) YYERROR; } + ; + +%% diff --git a/coreseek/csft-4.1/src/sphinxfilter.cpp b/coreseek/csft-4.1/src/sphinxfilter.cpp new file mode 100755 index 0000000..f1278eb --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxfilter.cpp @@ -0,0 +1,695 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinxfilter.h" +#include "sphinxint.h" + +#if USE_WINDOWS +#pragma warning(disable:4250) // inheritance via dominance is our intent +#endif + +/// attribute-based +struct IFilter_Attr: virtual ISphFilter +{ + CSphAttrLocator m_tLocator; + + virtual void SetLocator ( const CSphAttrLocator & tLocator ) + { + m_tLocator = tLocator; + } +}; + +/// values +struct IFilter_Values: virtual ISphFilter +{ + const SphAttr_t * m_pValues; + int m_iValueCount; + + IFilter_Values () + : m_pValues ( NULL ) + , m_iValueCount ( 0 ) + {} + + virtual void SetValues ( const SphAttr_t * pStorage, int iCount ) + { + assert ( pStorage ); + assert ( iCount > 0 ); + #ifndef NDEBUG // values must be sorted + for ( int i = 1; i < iCount; i++ ) + assert ( pStorage[i-1]<=pStorage[i] ); + #endif + + m_pValues = pStorage; + m_iValueCount = iCount; + } + + inline const SphAttr_t GetValue ( int iIndex ) const + { + assert ( iIndex>=0 && iIndex(*pB) ) return false; + + while ( pB-pA>1 ) + { + const SphAttr_t * pM = pA + ((pB-pA)/2); + if ( uValue==(*pM) ) + return true; + if ( uValue<(*pM) ) + pB = pM; + else + pA = pM; + } + return false; +} + + +// OPTIMIZE: use binary search +bool IFilter_Values::EvalBlockValues ( SphAttr_t uBlockMin, SphAttr_t uBlockMax ) const +{ + // is any of our values inside the block? + for ( int i = 0; i < m_iValueCount; i++ ) + if ( GetValue(i)>=uBlockMin && GetValue(i)<=uBlockMax ) + return true; + return false; +} + +/// range +struct IFilter_Range: virtual ISphFilter +{ + SphAttr_t m_uMinValue; + SphAttr_t m_uMaxValue; + + virtual void SetRange ( SphAttr_t tMin, SphAttr_t tMax ) + { + m_uMinValue = tMin; + m_uMaxValue = tMax; + } + + bool EvalRange ( const SphAttr_t uValue ) const + { + return uValue>=m_uMinValue && uValue<=m_uMaxValue; + } +}; + +/// MVA +struct IFilter_MVA: virtual IFilter_Attr +{ + const DWORD * m_pMvaStorage; + + IFilter_MVA () + : m_pMvaStorage ( NULL ) + {} + + virtual void SetMVAStorage ( const DWORD * pMva ) + { + m_pMvaStorage = pMva; + } + + inline bool LoadMVA ( const CSphMatch & tMatch, const DWORD ** pMva, const DWORD ** pMvaMax ) const + { + assert ( m_pMvaStorage ); + + *pMva = tMatch.GetAttrMVA ( m_tLocator, m_pMvaStorage ); + if ( !*pMva ) + return false; + + *pMvaMax = *pMva + (**pMva) + 1; + (*pMva)++; + return true; + } +}; + +/// filters + +// attr + +struct Filter_Values: public IFilter_Attr, IFilter_Values +{ + virtual bool Eval ( const CSphMatch & tMatch ) const + { + return EvalValues ( tMatch.GetAttr ( m_tLocator ) ); + } + + virtual bool EvalBlock ( const DWORD * pMinDocinfo, const DWORD * pMaxDocinfo ) const + { + if ( m_tLocator.m_bDynamic ) + return true; // ignore computed attributes + + SphAttr_t uBlockMin = sphGetRowAttr ( DOCINFO2ATTRS ( pMinDocinfo ), m_tLocator ); + SphAttr_t uBlockMax = sphGetRowAttr ( DOCINFO2ATTRS ( pMaxDocinfo ), m_tLocator ); + + return EvalBlockValues ( uBlockMin, uBlockMax ); + } +}; + +struct Filter_Range: public IFilter_Attr, IFilter_Range +{ + virtual bool Eval ( const CSphMatch & tMatch ) const + { + return EvalRange ( tMatch.GetAttr ( m_tLocator ) ); + } + + virtual bool EvalBlock ( const DWORD * pMinDocinfo, const DWORD * pMaxDocinfo ) const + { + if ( m_tLocator.m_bDynamic ) + return true; // ignore computed attributes + + SphAttr_t uBlockMin = sphGetRowAttr ( DOCINFO2ATTRS ( pMinDocinfo ), m_tLocator ); + SphAttr_t uBlockMax = sphGetRowAttr ( DOCINFO2ATTRS ( pMaxDocinfo ), m_tLocator ); + return (!( m_uMaxValueuBlockMax )); // not-reject + } +}; + +// float + +struct Filter_FloatRange: public IFilter_Attr +{ + float m_fMinValue; + float m_fMaxValue; + + virtual void SetRangeFloat ( float fMin, float fMax ) + { + m_fMinValue = fMin; + m_fMaxValue = fMax; + } + + virtual bool Eval ( const CSphMatch & tMatch ) const + { + const float & fValue = tMatch.GetAttrFloat ( m_tLocator ); + return fValue>=m_fMinValue && fValue<=m_fMaxValue; + } + + virtual bool EvalBlock ( const DWORD * pMinDocinfo, const DWORD * pMaxDocinfo ) const + { + if ( m_tLocator.m_bDynamic ) + return true; // ignore computed attributes + + float fBlockMin = sphDW2F ( (DWORD)sphGetRowAttr ( DOCINFO2ATTRS ( pMinDocinfo ), m_tLocator ) ); + float fBlockMax = sphDW2F ( (DWORD)sphGetRowAttr ( DOCINFO2ATTRS ( pMaxDocinfo ), m_tLocator ) ); + return (!( m_fMaxValuefBlockMax )); // not-reject + } +}; + +// id + +struct Filter_IdValues: public IFilter_Values +{ + virtual bool Eval ( const CSphMatch & tMatch ) const + { + return EvalValues ( tMatch.m_iDocID ); + } + + bool EvalBlockValues ( SphAttr_t uBlockMin, SphAttr_t uBlockMax ) const + { + // is any of our values inside the block? + for ( int i = 0; i < m_iValueCount; i++ ) + if ( (SphDocID_t)GetValue(i)>=(SphDocID_t)uBlockMin && (SphDocID_t)GetValue(i)<=(SphDocID_t)uBlockMax ) + return true; + return false; + } + + virtual bool EvalBlock ( const DWORD * pMinDocinfo, const DWORD * pMaxDocinfo ) const + { + const SphAttr_t uBlockMin = DOCINFO2ID ( pMinDocinfo ); + const SphAttr_t uBlockMax = DOCINFO2ID ( pMaxDocinfo ); + + return EvalBlockValues ( uBlockMin, uBlockMax ); + } + + Filter_IdValues () + { + m_bUsesAttrs = false; + } +}; + +struct Filter_IdRange: public IFilter_Range +{ + virtual bool Eval ( const CSphMatch & tMatch ) const + { + const SphDocID_t uID = tMatch.m_iDocID; + return uID>=(SphDocID_t)m_uMinValue && uID<=(SphDocID_t)m_uMaxValue; + } + + virtual bool EvalBlock ( const DWORD * pMinDocinfo, const DWORD * pMaxDocinfo ) const + { + const SphDocID_t uBlockMin = DOCINFO2ID ( pMinDocinfo ); + const SphDocID_t uBlockMax = DOCINFO2ID ( pMaxDocinfo ); + + return (!( (SphDocID_t)m_uMaxValueuBlockMax )); + } + + Filter_IdRange () + { + m_bUsesAttrs = false; + } +}; + +// weight + +struct Filter_WeightValues: public IFilter_Values +{ + virtual bool Eval ( const CSphMatch & tMatch ) const + { + return EvalValues ( tMatch.m_iWeight ); + } + + Filter_WeightValues () + { + m_bUsesAttrs = false; + } +}; + +struct Filter_WeightRange: public IFilter_Range +{ + virtual bool IsEarly () { return false; } + virtual bool Eval ( const CSphMatch & tMatch ) const + { + return EvalRange ( tMatch.m_iWeight ); + } + + Filter_WeightRange () + { + m_bUsesAttrs = false; + } +}; + +// MVA +template < bool IS_MVA64 > +struct Filter_MVAValues: public IFilter_MVA, IFilter_Values +{ + virtual bool Eval ( const CSphMatch & tMatch ) const + { + const DWORD * pMva, * pMvaMax; + if ( !LoadMVA ( tMatch, &pMva, &pMvaMax ) ) + return false; + + return MvaEval ( pMva, pMvaMax ); + } + + bool MvaEval ( const DWORD * pMva, const DWORD * pMvaMax ) const; +}; + + +template<> +bool Filter_MVAValues::MvaEval ( const DWORD * pMva, const DWORD * pMvaMax ) const +{ + const SphAttr_t * pFilter = m_pValues; + const SphAttr_t * pFilterMax = pFilter + m_iValueCount; + + const DWORD * L = pMva; + const DWORD * R = pMvaMax - 1; + for ( ; pFilter < pFilterMax; pFilter++ ) + { + while ( L<=R ) + { + const DWORD * m = L + (R - L) / 2; + if ( *pFilter > *m ) + L = m + 1; + else if ( *pFilter < *m ) + R = m - 1; + else + return true; + } + R = pMvaMax - 1; + } + return false; +} + + +template<> +bool Filter_MVAValues::MvaEval ( const DWORD * pMva, const DWORD * pMvaMax ) const +{ + const SphAttr_t * pFilter = m_pValues; + const SphAttr_t * pFilterMax = pFilter + m_iValueCount; + + const uint64_t * L = (const uint64_t *)pMva; + const uint64_t * R = (const uint64_t *)( pMvaMax - 2 ); + for ( ; pFilter < pFilterMax; pFilter++ ) + { + uint64_t uFilter = *pFilter; + while ( L<=R ) + { + const uint64_t * pVal = L + (R - L) / 2; + uint64_t uMva = MVA_UPSIZE ( (const DWORD *)pVal ); + + if ( uFilter > uMva ) + L = pVal + 1; + else if ( uFilter < uMva ) + R = pVal - 1; + else + return true; + } + R = (const uint64_t *)( pMvaMax - 2 ); + } + return false; +} + + +template < bool IS_MVA64 > +struct Filter_MVARange: public IFilter_MVA, IFilter_Range +{ + virtual bool Eval ( const CSphMatch & tMatch ) const + { + const DWORD * pMva, * pMvaMax; + if ( !LoadMVA ( tMatch, &pMva, &pMvaMax ) ) + return false; + + return MvaEval ( pMva, pMvaMax ); + } + + bool MvaEval ( const DWORD * pMva, const DWORD * pMvaMax ) const; +}; + + +template<> +bool Filter_MVARange::MvaEval ( const DWORD * pMva, const DWORD * pMvaMax ) const +{ + const DWORD * L = pMva; + const DWORD * R = pMvaMax - 1; + + while ( L<=R ) + { + const DWORD * m = L + (R - L) / 2; + if ( m_uMinValue > *m ) + L = m + 1; + else if ( m_uMinValue < *m ) + R = m - 1; + else + return true; + } + if ( L==pMvaMax ) + return false; + return *L<=m_uMaxValue; +} + + +template<> +bool Filter_MVARange::MvaEval ( const DWORD * pMva, const DWORD * pMvaMax ) const +{ + const uint64_t * L = (const uint64_t *)pMva; + const uint64_t * R = (const uint64_t *)( pMvaMax - 2 ); + + while ( L<=R ) + { + const uint64_t * pVal = L + (R - L) / 2; + uint64_t uMva = MVA_UPSIZE ( (const DWORD *)pVal ); + + if ( (uint64_t)m_uMinValue>uMva ) + L = pVal + 1; + else if ( (uint64_t)m_uMinValue < uMva ) + R = pVal - 1; + else + return true; + } + if ( L==(const uint64_t *)pMvaMax ) + return false; + + uint64_t uMvaL = MVA_UPSIZE ( (const DWORD *)L ); + return uMvaL<=(uint64_t)m_uMaxValue; +} + + +// and + +struct Filter_And: public ISphFilter +{ + CSphVector m_dFilters; + + ~Filter_And () + { + ARRAY_FOREACH ( i, m_dFilters ) + SafeDelete ( m_dFilters[i] ); + } + + void Add ( ISphFilter * pFilter ) + { + m_dFilters.Add ( pFilter ); + m_bUsesAttrs |= pFilter->UsesAttrs(); + } + + virtual bool Eval ( const CSphMatch & tMatch ) const + { + ARRAY_FOREACH ( i, m_dFilters ) + if ( !m_dFilters[i]->Eval ( tMatch ) ) + return false; + return true; + } + + virtual bool EvalBlock ( const DWORD * pMinDocinfo, const DWORD * pMaxDocinfo ) const + { + ARRAY_FOREACH ( i, m_dFilters ) + if ( !m_dFilters[i]->EvalBlock ( pMinDocinfo, pMaxDocinfo ) ) + return false; + return true; + } + + virtual ISphFilter * Join ( ISphFilter * pFilter ) + { + Add ( pFilter ); + return this; + } + + Filter_And () + { + m_bUsesAttrs = false; + } + + + virtual void SetMVAStorage ( const DWORD * pMva ) + { + ARRAY_FOREACH ( i, m_dFilters ) + m_dFilters[i]->SetMVAStorage ( pMva ); + } +}; + +// not + +struct Filter_Not: public ISphFilter +{ + ISphFilter * m_pFilter; + + explicit Filter_Not ( ISphFilter * pFilter ) + : m_pFilter ( pFilter ) + { + assert ( pFilter ); + m_bUsesAttrs = pFilter->UsesAttrs(); + } + + ~Filter_Not () + { + SafeDelete ( m_pFilter ); + } + + virtual bool Eval ( const CSphMatch & tMatch ) const + { + return !m_pFilter->Eval ( tMatch ); + } + + virtual bool EvalBlock ( const DWORD *, const DWORD * ) const + { + // if block passes through the filter we can't just negate the + // result since it's imprecise at this point + return true; + } + + virtual void SetMVAStorage ( const DWORD * pMva ) + { + m_pFilter->SetMVAStorage ( pMva ); + } +}; + +/// impl + +ISphFilter * ISphFilter::Join ( ISphFilter * pFilter ) +{ + Filter_And * pAnd = new Filter_And(); + + pAnd->Add ( this ); + pAnd->Add ( pFilter ); + + return pAnd; +} + +/// helper functions + +static ISphFilter * CreateSpecialFilter ( const CSphString & sName, ESphFilter eFilterType ) +{ + if ( sName=="@id" ) + { + switch ( eFilterType ) + { + case SPH_FILTER_VALUES: return new Filter_IdValues; + case SPH_FILTER_RANGE: return new Filter_IdRange; + default: + assert ( 0 && "invalid filter on @id" ); + return NULL; + } + } else if ( sName=="@weight" ) + { + switch ( eFilterType ) + { + case SPH_FILTER_VALUES: return new Filter_WeightValues; + case SPH_FILTER_RANGE: return new Filter_WeightRange; + default: + assert ( 0 && "invalid filter on @weight" ); + return NULL; + } + } + + return NULL; +} + + +static inline ISphFilter * ReportError ( CSphString & sError, const char * sMessage, ESphFilter eFilterType ) +{ + CSphString sFilterName; + switch ( eFilterType ) + { + case SPH_FILTER_VALUES: sFilterName = "intvalues"; break; + case SPH_FILTER_RANGE: sFilterName = "intrange"; break; + case SPH_FILTER_FLOATRANGE: sFilterName = "floatrange"; break; + default: sFilterName.SetSprintf ( "(filter-type-%d)", eFilterType ); break; + } + + sError.SetSprintf ( sMessage, sFilterName.cstr() ); + return NULL; +} + + +static ISphFilter * CreateFilter ( ESphAttr eAttrType, ESphFilter eFilterType, CSphString & sError ) +{ + // MVA + if ( eAttrType==SPH_ATTR_UINT32SET || eAttrType==SPH_ATTR_UINT64SET ) + { + switch ( eFilterType ) + { + case SPH_FILTER_VALUES: + if ( eAttrType==SPH_ATTR_UINT64SET ) + return new Filter_MVAValues(); + else + return new Filter_MVAValues(); + + case SPH_FILTER_RANGE: + if ( eAttrType==SPH_ATTR_UINT64SET ) + return new Filter_MVARange(); + else + return new Filter_MVARange(); + default: return ReportError ( sError, "unsupported filter type '%s' on MVA column", eFilterType ); + } + } + + // float + if ( eAttrType==SPH_ATTR_FLOAT ) + { + if ( eFilterType==SPH_FILTER_FLOATRANGE ) + return new Filter_FloatRange; + + return ReportError ( sError, "unsupported filter type '%s' on float column", eFilterType ); + } + + // non-float, non-MVA + switch ( eFilterType ) + { + case SPH_FILTER_VALUES: return new Filter_Values; + case SPH_FILTER_RANGE: return new Filter_Range; + default: return ReportError ( sError, "unsupported filter type '%s' on int column", eFilterType ); + } +} + +ISphFilter * sphCreateFilter ( const CSphFilterSettings & tSettings, const CSphSchema & tSchema, const DWORD * pMvaPool, CSphString & sError ) +{ + ISphFilter * pFilter = 0; + + // try to create filter on special attribute + const CSphString & sAttrName = tSettings.m_sAttrName; + if ( sAttrName.Begins("@") ) + pFilter = CreateSpecialFilter ( sAttrName, tSettings.m_eType ); + + // fetch column info + const CSphColumnInfo * pAttr = NULL; + const int iAttr = tSchema.GetAttrIndex ( sAttrName.cstr() ); + if ( iAttr<0 ) + { + if ( !pFilter ) // might be special + { + sError.SetSprintf ( "no such filter attribute '%s'", sAttrName.cstr() ); + return NULL; // no such attribute + } + } else + { + assert ( !pFilter ); + + pAttr = &tSchema.GetAttr(iAttr); + pFilter = CreateFilter ( pAttr->m_eAttrType, tSettings.m_eType, sError ); + } + + // fill filter's properties + if ( pFilter ) + { + if ( pAttr ) + pFilter->SetLocator ( pAttr->m_tLocator ); + + pFilter->SetRange ( tSettings.m_uMinValue, tSettings.m_uMaxValue ); + pFilter->SetRangeFloat ( tSettings.m_fMinValue, tSettings.m_fMaxValue ); + pFilter->SetMVAStorage ( pMvaPool ); + + if ( tSettings.GetNumValues() > 0 ) + { + pFilter->SetValues ( tSettings.GetValueArray(), tSettings.GetNumValues() ); + +#ifndef NDEBUG + // check that the values are actually sorted + const SphAttr_t * pValues = tSettings.GetValueArray(); + int iValues = tSettings.GetNumValues (); + + for ( int i=1; i=pValues[i-1] ); +#endif + } + + if ( tSettings.m_bExclude ) + pFilter = new Filter_Not ( pFilter ); + } + + return pFilter; +} + + +ISphFilter * sphJoinFilters ( ISphFilter * pA, ISphFilter * pB ) +{ + if ( pA ) + return pB ? pA->Join(pB) : pA; + return pB; +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxfilter.h b/coreseek/csft-4.1/src/sphinxfilter.h new file mode 100755 index 0000000..658d282 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxfilter.h @@ -0,0 +1,62 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinxfilter_ +#define _sphinxfilter_ + +#include "sphinx.h" + +struct ISphFilter +{ + virtual void SetLocator ( const CSphAttrLocator & ) {} + virtual void SetRange ( SphAttr_t, SphAttr_t ) {} + virtual void SetRangeFloat ( float, float ) {} + virtual void SetValues ( const SphAttr_t *, int ) {} + virtual void SetMVAStorage ( const DWORD * ) {} + + virtual ~ISphFilter () {} + + /// evaluate filter for a given match + /// returns true if match satisfies the filter critertia (i.e. in range, found in values list etc) + virtual bool Eval ( const CSphMatch & tMatch ) const = 0; + + /// evaluate filter for a given block + /// args are pMinDocinfo and pMaxDocinfo + /// returns false if no document in block can possibly pass through the filter + virtual bool EvalBlock ( const DWORD *, const DWORD * ) const + { + // if filter does not implement block-level evaluation we assume the block will pass + return true; + } + + virtual ISphFilter * Join ( ISphFilter * pFilter ); + + bool UsesAttrs() const { return m_bUsesAttrs; } + + ISphFilter() : m_bUsesAttrs ( true ) {} + +protected : + + bool m_bUsesAttrs; +}; + +ISphFilter * sphCreateFilter ( const CSphFilterSettings &, const CSphSchema &, const DWORD * pMva, CSphString & sError ); +ISphFilter * sphJoinFilters ( ISphFilter *, ISphFilter * ); + +#endif // _sphinxfilter_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxfilter.o b/coreseek/csft-4.1/src/sphinxfilter.o new file mode 100644 index 0000000..5390276 Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxfilter.o differ diff --git a/coreseek/csft-4.1/src/sphinxint.h b/coreseek/csft-4.1/src/sphinxint.h new file mode 100755 index 0000000..23271ab --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxint.h @@ -0,0 +1,1175 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinxint_ +#define _sphinxint_ + +#include "sphinx.h" +#include "sphinxfilter.h" + +#include +#include +#include + +////////////////////////////////////////////////////////////////////////// + +const char MAGIC_SYNONYM_WHITESPACE = 1; // used internally in tokenizer only +const char MAGIC_CODE_SENTENCE = 2; // emitted from tokenizer on sentence boundary +const char MAGIC_CODE_PARAGRAPH = 3; // emitted from stripper (and passed via tokenizer) on paragraph boundary +const char MAGIC_CODE_ZONE = 4; // emitted from stripper (and passed via tokenizer) on zone boundary; followed by zero-terminated zone name + +const char MAGIC_WORD_HEAD = 1; // prepended to keyword by source, stored in (crc) dictionary +const char MAGIC_WORD_TAIL = 1; // appended to keyword by source, stored in (crc) dictionary +const char MAGIC_WORD_HEAD_NONSTEMMED = 2; // prepended to keyword by source, stored in dictionary + +extern const char * MAGIC_WORD_SENTENCE; +extern const char * MAGIC_WORD_PARAGRAPH; + +////////////////////////////////////////////////////////////////////////// + +#ifdef O_BINARY +#define SPH_O_BINARY O_BINARY +#else +#define SPH_O_BINARY 0 +#endif + +#define SPH_O_READ ( O_RDONLY | SPH_O_BINARY ) +#define SPH_O_NEW ( O_CREAT | O_RDWR | O_TRUNC | SPH_O_BINARY ) + +#define MVA_DOWNSIZE DWORD // MVA32 offset type +#define MVA_OFFSET_MASK 0x7fffffffUL // MVA offset mask +#define MVA_ARENA_FLAG 0x80000000UL // MVA global-arena flag +inline uint64_t MVA_UPSIZE ( const DWORD * pMva ) +{ + uint64_t uMva = (uint64_t)pMva[0] | ( ( (uint64_t)pMva[1] )<<32 ); + return uMva; +} + + +/// file writer with write buffering and int encoder +class CSphWriter : ISphNoncopyable +{ +public: + CSphWriter (); + virtual ~CSphWriter (); + + void SetBufferSize ( int iBufferSize ); ///< tune write cache size; must be called before OpenFile() or SetFile() + + bool OpenFile ( const CSphString & sName, CSphString & sErrorBuffer ); + void SetFile ( int iFD, SphOffset_t * pSharedOffset ); + void CloseFile ( bool bTruncate = false ); ///< note: calls Flush(), ie. IsError() might get true after this call + + void PutByte ( int uValue ); + void PutBytes ( const void * pData, int iSize ); + void PutDword ( DWORD uValue ) { PutBytes ( &uValue, sizeof(DWORD) ); } + void PutOffset ( SphOffset_t uValue ) { PutBytes ( &uValue, sizeof(SphOffset_t) ); } + void PutString ( const char * szString ); + void PutString ( const CSphString & sString ); + + void SeekTo ( SphOffset_t pos ); ///< seeking inside the buffer will truncate it + +#if USE_64BIT + void PutDocid ( SphDocID_t uValue ) { PutOffset ( uValue ); } +#else + void PutDocid ( SphDocID_t uValue ) { PutDword ( uValue ); } +#endif + + void ZipInt ( DWORD uValue ); + void ZipOffset ( SphOffset_t uValue ); + void ZipOffsets ( CSphVector * pData ); + + bool IsError () const { return m_bError; } + SphOffset_t GetPos () const { return m_iPos; } + +protected: + CSphString m_sName; + SphOffset_t m_iPos; + SphOffset_t m_iWritten; + + int m_iFD; + int m_iPoolUsed; + BYTE * m_pBuffer; + BYTE * m_pPool; + bool m_bOwnFile; + SphOffset_t * m_pSharedOffset; + int m_iBufferSize; + + bool m_bError; + CSphString * m_pError; + + virtual void Flush (); +}; + + + +/// file which closes automatically when going out of scope +class CSphAutofile : ISphNoncopyable +{ +protected: + int m_iFD; ///< my file descriptior + CSphString m_sFilename; ///< my file name + bool m_bTemporary; ///< whether to unlink this file on Close() + + CSphIndex::ProgressCallback_t * m_pProgress; ///< for displaying progress + CSphIndexProgress * m_pStat; + +public: + CSphAutofile (); + CSphAutofile ( const CSphString & sName, int iMode, CSphString & sError, bool bTemp=false ); + ~CSphAutofile (); + + int Open ( const CSphString & sName, int iMode, CSphString & sError, bool bTemp=false ); + void Close (); + +public: + int GetFD () const { return m_iFD; } + const char * GetFilename () const; + SphOffset_t GetSize ( SphOffset_t iMinSize, bool bCheckSizeT, CSphString & sError ); + SphOffset_t GetSize (); + + bool Read ( void * pBuf, size_t uCount, CSphString & sError ); + void SetProgressCallback ( CSphIndex::ProgressCallback_t * pfnProgress, CSphIndexProgress * pStat ); +}; + + +/// file reader with read buffering and int decoder +class CSphReader +{ +public: + CSphReader ( BYTE * pBuf=NULL, int iSize=0 ); + virtual ~CSphReader (); + + void SetBuffers ( int iReadBuffer, int iReadUnhinted ); + void SetFile ( int iFD, const char * sFilename ); + void SetFile ( const CSphAutofile & tFile ); + void Reset (); + void SeekTo ( SphOffset_t iPos, int iSizeHint ); + + void SkipBytes ( int iCount ); + SphOffset_t GetPos () const { return m_iPos+m_iBuffPos; } + + void GetBytes ( void * pData, int iSize ); + int GetBytesZerocopy ( const BYTE ** ppData, int iMax ); ///< zerocopy method; returns actual length present in buffer (upto iMax) + + int GetByte (); + DWORD GetDword (); + SphOffset_t GetOffset (); + CSphString GetString (); + int GetLine ( char * sBuffer, int iMaxLen ); + + DWORD UnzipInt (); + SphOffset_t UnzipOffset (); + + SphOffset_t Tell () const { return m_iPos + m_iBuffPos; } + bool GetErrorFlag () const { return m_bError; } + const CSphString & GetErrorMessage () const { return m_sError; } + const CSphString & GetFilename() const { return m_sFilename; } + +#if USE_64BIT + SphDocID_t GetDocid () { return GetOffset(); } + SphDocID_t UnzipDocid () { return UnzipOffset(); } + SphWordID_t UnzipWordid () { return UnzipOffset(); } +#else + SphDocID_t GetDocid () { return GetDword(); } + SphDocID_t UnzipDocid () { return UnzipInt(); } + SphWordID_t UnzipWordid () { return UnzipInt(); } +#endif + + const CSphReader & operator = ( const CSphReader & rhs ); + +protected: + + int m_iFD; + SphOffset_t m_iPos; + + int m_iBuffPos; + int m_iBuffUsed; + BYTE * m_pBuff; + int m_iSizeHint; ///< how much do we expect to read + + int m_iBufSize; + bool m_bBufOwned; + int m_iReadUnhinted; + + bool m_bError; + CSphString m_sError; + CSphString m_sFilename; + +private: + void UpdateCache (); +}; + +/// scoped reader +class CSphAutoreader : public CSphReader +{ +public: + CSphAutoreader ( BYTE * pBuf=NULL, int iSize=0 ) : CSphReader ( pBuf, iSize ) {} + ~CSphAutoreader (); + + bool Open ( const CSphString & sFilename, CSphString & sError ); + void Close (); + SphOffset_t GetFilesize (); + +public: + // added for DebugCheck() + int GetFD () { return m_iFD; } +}; + +////////////////////////////////////////////////////////////////////////// + +/// per-query search context +/// everything that index needs to compute/create to process the query +class CSphQueryContext +{ +public: + // searching-only, per-query + int m_iWeights; ///< search query field weights count + int m_dWeights [ SPH_MAX_FIELDS ]; ///< search query field weights + + bool m_bLookupFilter; ///< row data lookup required at filtering stage + bool m_bLookupSort; ///< row data lookup required at sorting stage + + ISphFilter * m_pFilter; + ISphFilter * m_pWeightFilter; + + struct CalcItem_t + { + CSphAttrLocator m_tLoc; ///< result locator + ESphAttr m_eType; ///< result type + ISphExpr * m_pExpr; ///< evaluator (non-owned) + }; + CSphVector m_dCalcFilter; ///< items to compute for filtering + CSphVector m_dCalcSort; ///< items to compute for sorting/grouping + CSphVector m_dCalcFinal; ///< items to compute when finalizing result set + + const CSphVector * m_pOverrides; ///< overridden attribute values + CSphVector m_dOverrideIn; + CSphVector m_dOverrideOut; + + void * m_pIndexData; ///< backend specific data + +public: + CSphQueryContext (); + ~CSphQueryContext (); + + void BindWeights ( const CSphQuery * pQuery, const CSphSchema & tSchema, int iIndexWeight ); + bool SetupCalc ( CSphQueryResult * pResult, const CSphSchema & tInSchema, const CSphSchema & tSchema, const DWORD * pMvaPool ); + bool CreateFilters ( bool bFullscan, const CSphVector * pdFilters, const CSphSchema & tSchema, const DWORD * pMvaPool, CSphString & sError ); + bool SetupOverrides ( const CSphQuery * pQuery, CSphQueryResult * pResult, const CSphSchema & tIndexSchema ); + + void CalcFilter ( CSphMatch & tMatch ) const; + void CalcSort ( CSphMatch & tMatch ) const; + void CalcFinal ( CSphMatch & tMatch ) const; + + // rt index bind pools at segment searching, not at time it setups context + void SetStringPool ( const BYTE * pStrings ); + void SetMVAPool ( const DWORD * pMva ); +}; + +struct SphStringSorterRemap_t +{ + CSphAttrLocator m_tSrc; + CSphAttrLocator m_tDst; +}; + +ISphExpr * sphSortSetupExpr ( const CSphString & sName, const CSphSchema & tIndexSchema ); +bool sphSortGetStringRemap ( const CSphSchema & tSorterSchema, const CSphSchema & tIndexSchema, CSphVector & dAttrs ); +void sphSortRemoveInternalAttrs ( CSphSchema & tSchema ); +bool sphIsSortStringInternal ( const char * sColumnName ); + +////////////////////////////////////////////////////////////////////////// + +bool sphWriteThrottled ( int iFD, const void * pBuf, int64_t iCount, const char * sName, CSphString & sError ); + +void SafeClose ( int & iFD ); + +void sphMergeStats ( CSphQueryResultMeta & tDstResult, const SmallStringHash_T & hSrc ); + +bool sphCheckQueryHeight ( const struct XQNode_t * pRoot, CSphString & sError ); + +void sphTransformExtendedQuery ( XQNode_t ** ppNode ); + +const BYTE * SkipQuoted ( const BYTE * p ); + +class ISphBinlog : ISphNoncopyable +{ +public: + virtual ~ISphBinlog () {} + + virtual void BinlogUpdateAttributes ( const char * sIndexName, int64_t iTID, const CSphAttrUpdate & tUpd ) = 0; + virtual void NotifyIndexFlush ( const char * sIndexName, int64_t iTID, bool bShutdown ) = 0; +}; + +////////////////////////////////////////////////////////////////////////// + +/// memory tracker +namespace Memory +{ + enum Category_e + { + SPH_MEM_CORE, + + SPH_MEM_IDX_DISK, + SPH_MEM_IDX_RT, + SPH_MEM_IDX_RT_ACCUM, + + SPH_MEM_MMAPED, + + SPH_MEM_BINLOG, + + SPH_MEM_HANDLE_NONSQL, + SPH_MEM_HANDLE_SQL, + + SPH_MEM_SEARCH_NONSQL, + SPH_MEM_QUERY_NONSQL, + SPH_MEM_INSERT_SQL, + SPH_MEM_SELECT_SQL, + SPH_MEM_DELETE_SQL, + SPH_MEM_COMMIT_SET_SQL, + SPH_MEM_COMMIT_BEGIN_SQL, + SPH_MEM_COMMIT_SQL, + + SPH_MEM_IDX_DISK_MULTY_QUERY, + SPH_MEM_IDX_DISK_MULTY_QUERY_EX, + SPH_MEM_IDX_RT_MULTY_QUERY, + + SPH_MEM_IDX_RT_RES_MATCHES, + SPH_MEM_IDX_RT_RES_STRINGS, + + SPH_MEM_TOTAL + }; +} + +#if SPH_ALLOCS_PROFILER + +void sphMemStatPush ( Memory::Category_e eCategory ); +void sphMemStatPop ( Memory::Category_e eCategory ); + +// memory tracker +struct MemTracker_c : ISphNoncopyable +{ + const Memory::Category_e m_eCategory; ///< category + + /// ctor + explicit MemTracker_c ( Memory::Category_e eCategory ) + : m_eCategory ( eCategory ) + { + sphMemStatPush ( m_eCategory ); + } + + /// dtor + ~MemTracker_c () + { + sphMemStatPop ( m_eCategory ); + } +}; + +#define MEMORY(name) MemTracker_c tracker_##__LINE__##name(Memory::name); + +#else // SPH_ALLOCS_PROFILER 0 + +#define MEMORY(name) + +#endif // if SPH_ALLOCS_PROFILER + +////////////////////////////////////////////////////////////////////////// + +#define DOCINFO_INDEX_FREQ 128 // FIXME? make this configurable + +struct CSphDocMVA +{ + SphDocID_t m_iDocID; + CSphVector < CSphVector > m_dMVA; + CSphVector < DWORD > m_dOffsets; + + explicit CSphDocMVA ( int iSize ) + : m_iDocID ( 0 ) + { + m_dMVA.Resize ( iSize ); + m_dOffsets.Resize ( iSize ); + } + + void Read ( CSphReader & tReader ); + void Write ( CSphWriter & tWriter ); +}; + +/// attr min-max builder +template < typename DOCID = SphDocID_t > +class AttrIndexBuilder_t : ISphNoncopyable +{ +private: + CSphVector m_dIntAttrs; + CSphVector m_dFloatAttrs; + CSphVector m_dMvaAttrs; + CSphVector m_dIntMin; + CSphVector m_dIntMax; + CSphVector m_dIntIndexMin; + CSphVector m_dIntIndexMax; + CSphVector m_dFloatMin; + CSphVector m_dFloatMax; + CSphVector m_dFloatIndexMin; + CSphVector m_dFloatIndexMax; + CSphVector m_dMvaMin; + CSphVector m_dMvaMax; + CSphVector m_dMvaIndexMin; + CSphVector m_dMvaIndexMax; + DWORD m_uStride; // size of attribute's chunk (in DWORDs) + DWORD m_uElements; // counts total number of collected min/max pairs + int m_iLoop; // loop inside one set + DWORD * m_pOutBuffer; // storage for collected min/max + DWORD * m_pOutMax; // storage max for bound checking + DOCID m_uStart; // first and last docids of current chunk + DOCID m_uLast; + DOCID m_uIndexStart; // first and last docids of whole index + DOCID m_uIndexLast; + int m_iMva64; + +private: + void ResetLocal(); + void FlushComputed ( bool bUseAttrs, bool bUseMvas ); + void UpdateMinMaxDocids ( DOCID uDocID ); + void CollectRowMVA ( int iAttr, DWORD uCount, const DWORD * pMva ); + +public: + explicit AttrIndexBuilder_t ( const CSphSchema & tSchema ); + + void Prepare ( DWORD * pOutBuffer, DWORD * pOutMax ); + + void CollectWithoutMvas ( const DWORD * pCur, bool bUseMvas ); + bool Collect ( const DWORD * pCur, const DWORD * pMvas, int64_t iMvasCount, CSphString & sError ); + void Collect ( const DWORD * pCur, const struct CSphDocMVA & dMvas ); + void CollectMVA ( DOCID uDocID, const CSphVector< CSphVector > & dCurInfo ); + + void FinishCollect ( bool bMvaOnly = false ); + + /// actually used part of output buffer, only used with index merge + /// (we reserve space for rows from both indexes, but might kill some rows) + inline DWORD GetActualSize() const + { + return 2 * m_uElements * m_uStride; + } + + /// how many DWORDs will we need for block index + inline DWORD GetExpectedSize ( DWORD uMaxDocs ) const + { + DWORD uDocinfoIndex = ( uMaxDocs + DOCINFO_INDEX_FREQ - 1 ) / DOCINFO_INDEX_FREQ; + return 2 * ( 1 + uDocinfoIndex ) * m_uStride; + } +}; + +typedef AttrIndexBuilder_t<> AttrIndexBuilder_c; + +// dirty hack for some build systems which not has LLONG_MAX +#ifndef LLONG_MAX +#define LLONG_MAX (((unsigned long long)(-1))>>1) +#endif + +template < typename DOCID > +void AttrIndexBuilder_t::ResetLocal() +{ + ARRAY_FOREACH ( i, m_dIntMin ) + { + m_dIntMin[i] = LLONG_MAX; + m_dIntMax[i] = 0; + } + ARRAY_FOREACH ( i, m_dFloatMin ) + { + m_dFloatMin[i] = FLT_MAX; + m_dFloatMax[i] = -FLT_MAX; + } + ARRAY_FOREACH ( i, m_dMvaMin ) + { + m_dMvaMin[i] = LLONG_MAX; + m_dMvaMax[i] = 0; + } + m_uStart = m_uLast = 0; + m_iLoop = 0; +} + +template < typename DOCID > +void AttrIndexBuilder_t::FlushComputed ( bool bUseAttrs, bool bUseMvas ) +{ + assert ( m_pOutBuffer ); + DWORD * pMinEntry = m_pOutBuffer + 2 * m_uElements * m_uStride; + DWORD * pMinAttrs = DOCINFO2ATTRS ( pMinEntry ); + DWORD * pMaxEntry = pMinEntry + m_uStride; + DWORD * pMaxAttrs = pMinAttrs + m_uStride; + + assert ( pMaxEntry+m_uStride<=m_pOutMax ); + assert ( pMaxAttrs+m_uStride-DOCINFO_IDSIZE<=m_pOutMax ); + + m_uIndexLast = m_uLast; + + DOCINFOSETID ( pMinEntry, m_uStart ); + DOCINFOSETID ( pMaxEntry, m_uLast ); + + if ( bUseAttrs ) + { + ARRAY_FOREACH ( i, m_dIntAttrs ) + { + m_dIntIndexMin[i] = Min ( m_dIntIndexMin[i], m_dIntMin[i] ); + m_dIntIndexMax[i] = Max ( m_dIntIndexMax[i], m_dIntMax[i] ); + sphSetRowAttr ( pMinAttrs, m_dIntAttrs[i], m_dIntMin[i] ); + sphSetRowAttr ( pMaxAttrs, m_dIntAttrs[i], m_dIntMax[i] ); + } + ARRAY_FOREACH ( i, m_dFloatAttrs ) + { + m_dFloatIndexMin[i] = Min ( m_dFloatIndexMin[i], m_dFloatMin[i] ); + m_dFloatIndexMax[i] = Max ( m_dFloatIndexMax[i], m_dFloatMax[i] ); + sphSetRowAttr ( pMinAttrs, m_dFloatAttrs[i], sphF2DW ( m_dFloatMin[i] ) ); + sphSetRowAttr ( pMaxAttrs, m_dFloatAttrs[i], sphF2DW ( m_dFloatMax[i] ) ); + } + } + + if ( bUseMvas ) + ARRAY_FOREACH ( i, m_dMvaAttrs ) + { + m_dMvaIndexMin[i] = Min ( m_dMvaIndexMin[i], m_dMvaMin[i] ); + m_dMvaIndexMax[i] = Max ( m_dMvaIndexMax[i], m_dMvaMax[i] ); + sphSetRowAttr ( pMinAttrs, m_dMvaAttrs[i], m_dMvaMin[i] ); + sphSetRowAttr ( pMaxAttrs, m_dMvaAttrs[i], m_dMvaMax[i] ); + } + + m_uElements++; + ResetLocal(); +} + +template < typename DOCID > +void AttrIndexBuilder_t::UpdateMinMaxDocids ( DOCID uDocID ) +{ + if ( !m_uStart ) + m_uStart = uDocID; + if ( !m_uIndexStart ) + m_uIndexStart = uDocID; + m_uLast = uDocID; +} + +template < typename DOCID > +AttrIndexBuilder_t::AttrIndexBuilder_t ( const CSphSchema & tSchema ) +: m_uStride ( DWSIZEOF(DOCID) + tSchema.GetRowSize() ) +, m_uElements ( 0 ) +, m_iLoop ( 0 ) +, m_pOutBuffer ( NULL ) +, m_pOutMax ( NULL ) +, m_uStart ( 0 ) +, m_uLast ( 0 ) +, m_uIndexStart ( 0 ) +, m_uIndexLast ( 0 ) +{ + for ( int i=0; i +void AttrIndexBuilder_t::Prepare ( DWORD * pOutBuffer, DWORD * pOutMax ) +{ + m_pOutBuffer = pOutBuffer; + m_pOutMax = pOutMax; + m_uElements = 0; + m_uIndexStart = m_uIndexLast = 0; + ARRAY_FOREACH ( i, m_dIntIndexMin ) + { + m_dIntIndexMin[i] = LLONG_MAX; + m_dIntIndexMax[i] = 0; + } + ARRAY_FOREACH ( i, m_dFloatIndexMin ) + { + m_dFloatIndexMin[i] = FLT_MAX; + m_dFloatIndexMax[i] = -FLT_MAX; + } + ARRAY_FOREACH ( i, m_dMvaIndexMin ) + { + m_dMvaIndexMin[i] = LLONG_MAX; + m_dMvaIndexMax[i] = 0; + } + ResetLocal(); +} + +template < typename DOCID > +void AttrIndexBuilder_t::CollectWithoutMvas ( const DWORD * pCur, bool bUseMvas ) +{ + // check if it is time to flush already collected values + if ( m_iLoop>=DOCINFO_INDEX_FREQ ) + FlushComputed ( true, bUseMvas ); + + const DWORD * pRow = DOCINFO2ATTRS_T(pCur); + UpdateMinMaxDocids ( DOCINFO2ID_T(pCur) ); + m_iLoop++; + + // ints + ARRAY_FOREACH ( i, m_dIntAttrs ) + { + SphAttr_t uVal = sphGetRowAttr ( pRow, m_dIntAttrs[i] ); + m_dIntMin[i] = Min ( m_dIntMin[i], uVal ); + m_dIntMax[i] = Max ( m_dIntMax[i], uVal ); + } + + // floats + ARRAY_FOREACH ( i, m_dFloatAttrs ) + { + float fVal = sphDW2F ( (DWORD)sphGetRowAttr ( pRow, m_dFloatAttrs[i] ) ); + m_dFloatMin[i] = Min ( m_dFloatMin[i], fVal ); + m_dFloatMax[i] = Max ( m_dFloatMax[i], fVal ); + } +} + +template < typename DOCID > +void AttrIndexBuilder_t::CollectRowMVA ( int iAttr, DWORD uCount, const DWORD * pMva ) +{ + if ( iAttr>=m_iMva64 ) + { + assert ( ( uCount%2 )==0 ); + for ( ; uCount>0; uCount-=2, pMva+=2 ) + { + uint64_t uVal = MVA_UPSIZE ( pMva ); + m_dMvaMin[iAttr] = Min ( m_dMvaMin[iAttr], uVal ); + m_dMvaMax[iAttr] = Max ( m_dMvaMax[iAttr], uVal ); + } + } else + { + for ( ; uCount>0; uCount--, pMva++ ) + { + DWORD uVal = *pMva; + m_dMvaMin[iAttr] = Min ( m_dMvaMin[iAttr], uVal ); + m_dMvaMax[iAttr] = Max ( m_dMvaMax[iAttr], uVal ); + } + } +} + +template < typename DOCID > +bool AttrIndexBuilder_t::Collect ( const DWORD * pCur, const DWORD * pMvas, int64_t iMvasCount, CSphString & sError ) +{ + CollectWithoutMvas ( pCur, true ); + + const DWORD * pRow = DOCINFO2ATTRS_T(pCur); + SphDocID_t uDocID = DOCINFO2ID_T(pCur); + + // MVAs + ARRAY_FOREACH ( i, m_dMvaAttrs ) + { + SphAttr_t uOff = sphGetRowAttr ( pRow, m_dMvaAttrs[i] ); + if ( !uOff ) + continue; + + // sanity checks + if ( uOff>=iMvasCount ) + { + sError.SetSprintf ( "broken index: mva offset out of bounds, id=" DOCID_FMT, (SphDocID_t)uDocID ); + return false; + } + + const DWORD * pMva = pMvas + uOff; // don't care about updates at this point + + if ( i==0 && DOCINFO2ID_T ( pMva-DWSIZEOF(DOCID) )!=uDocID ) + { + sError.SetSprintf ( "broken index: mva docid verification failed, id=" DOCID_FMT, (SphDocID_t)uDocID ); + return false; + } + + DWORD uCount = *pMva; + if ( ( uOff+uCount>=iMvasCount ) || ( i>=m_iMva64 && ( uCount%2 )!=0 ) ) + { + sError.SetSprintf ( "broken index: mva list out of bounds, id=" DOCID_FMT, (SphDocID_t)uDocID ); + return false; + } + + // walk and calc + CollectRowMVA ( i, uCount, pMva ); + } + return true; +} + +template < typename DOCID > +void AttrIndexBuilder_t::Collect ( const DWORD * pCur, const CSphDocMVA & dMvas ) +{ + CollectWithoutMvas ( pCur, true ); + ARRAY_FOREACH ( i, m_dMvaAttrs ) + { + CollectRowMVA ( i, dMvas.m_dMVA[i].GetLength(), dMvas.m_dMVA[i].Begin() ); + } +} + +template < typename DOCID > +void AttrIndexBuilder_t::CollectMVA ( DOCID uDocID, const CSphVector< CSphVector > & dCurInfo ) +{ + // check if it is time to flush already collected values + if ( m_iLoop>=DOCINFO_INDEX_FREQ ) + FlushComputed ( false, true ); + + UpdateMinMaxDocids ( uDocID ); + m_iLoop++; + + ARRAY_FOREACH ( i, dCurInfo ) + { + CollectRowMVA ( i, dCurInfo[i].GetLength(), dCurInfo[i].Begin() ); + } +} + +template < typename DOCID > +void AttrIndexBuilder_t::FinishCollect ( bool bMvaOnly ) +{ + assert ( m_pOutBuffer ); + if ( m_iLoop ) + FlushComputed ( !bMvaOnly, true ); + + DWORD * pMinEntry = m_pOutBuffer + 2 * m_uElements * m_uStride; + DWORD * pMaxEntry = pMinEntry + m_uStride; + CSphRowitem * pMinAttrs = DOCINFO2ATTRS_T ( pMinEntry ); + CSphRowitem * pMaxAttrs = DOCINFO2ATTRS_T ( pMaxEntry ); + + assert ( pMaxEntry+m_uStride<=m_pOutMax ); + assert ( pMaxAttrs+m_uStride-DWSIZEOF(DOCID)<=m_pOutMax ); + + DOCINFOSETID ( pMinEntry, m_uIndexStart ); + DOCINFOSETID ( pMaxEntry, m_uIndexLast ); + + ARRAY_FOREACH ( i, m_dMvaAttrs ) + { + sphSetRowAttr ( pMinAttrs, m_dMvaAttrs[i], m_dMvaIndexMin[i] ); + sphSetRowAttr ( pMaxAttrs, m_dMvaAttrs[i], m_dMvaIndexMax[i] ); + } + + if ( !bMvaOnly ) + { + ARRAY_FOREACH ( i, m_dIntAttrs ) + { + sphSetRowAttr ( pMinAttrs, m_dIntAttrs[i], m_dIntIndexMin[i] ); + sphSetRowAttr ( pMaxAttrs, m_dIntAttrs[i], m_dIntIndexMax[i] ); + } + ARRAY_FOREACH ( i, m_dFloatAttrs ) + { + sphSetRowAttr ( pMinAttrs, m_dFloatAttrs[i], sphF2DW ( m_dFloatIndexMin[i] ) ); + sphSetRowAttr ( pMaxAttrs, m_dFloatAttrs[i], sphF2DW ( m_dFloatIndexMax[i] ) ); + } + m_uElements++; + + } else + { + m_uElements = 0; // rewind back for collecting the rest of attributes. + } +} + +////////////////////////////////////////////////////////////////////////// + +/// find a value-enclosing span in a sorted vector (aka an index at which vec[i] <= val < vec[i+1]) +template < typename T > +static int FindSpan ( const CSphVector & dVec, T tRef, int iSmallTreshold=8 ) +{ + // empty vector + if ( !dVec.GetLength() ) + return -1; + + // check last semi-span + if ( dVec.Last()1 ) + { + if ( tRef<*pStart || *pEnd>= iBits; + } + iBits >>= 1; + uMask >>= iBits; + } + return iIdx; +} + +////////////////////////////////////////////////////////////////////////// + +/// decode UTF-8 codepoint +/// advances buffer ptr in all cases but end of buffer +/// +/// returns -1 on failure +/// returns 0 on end of buffer +/// returns codepoint on success +inline int sphUTF8Decode ( BYTE * & pBuf ) +{ + BYTE v = *pBuf; + if ( !v ) + return 0; + pBuf++; + + // check for 7-bit case + if ( v<128 ) + return v; + + // get number of bytes + int iBytes = 0; + while ( v & 0x80 ) + { + iBytes++; + v <<= 1; + } + + // check for valid number of bytes + if ( iBytes<2 || iBytes>4 ) + return -1; + + int iCode = ( v >> iBytes ); + iBytes--; + do + { + if ( !(*pBuf) ) + return 0; // unexpected eof + + if ( ((*pBuf) & 0xC0)!=0x80 ) + return -1; // invalid code + + iCode = ( iCode<<6 ) + ( (*pBuf) & 0x3F ); + iBytes--; + pBuf++; + } while ( iBytes ); + + // all good + return iCode; +} + + +/// encode UTF-8 codepoint to buffer +/// returns number of bytes used +inline int sphUTF8Encode ( BYTE * pBuf, int iCode ) +{ + if ( iCode<0x80 ) + { + pBuf[0] = (BYTE)( iCode & 0x7F ); + return 1; + + } else if ( iCode<0x800 ) + { + pBuf[0] = (BYTE)( ( (iCode>>6) & 0x1F ) | 0xC0 ); + pBuf[1] = (BYTE)( ( iCode & 0x3F ) | 0x80 ); + return 2; + + } else + { + pBuf[0] = (BYTE)( ( (iCode>>12) & 0x0F ) | 0xE0 ); + pBuf[1] = (BYTE)( ( (iCode>>6) & 0x3F ) | 0x80 ); + pBuf[2] = (BYTE)( ( iCode & 0x3F ) | 0x80 ); + return 3; + } +} + + +/// compute UTF-8 string length in codepoints +inline int sphUTF8Len ( const char * pStr ) +{ + BYTE * pBuf = (BYTE*) pStr; + int iRes = 0, iCode; + + while ( ( iCode = sphUTF8Decode(pBuf) )!=0 ) + if ( iCode>0 ) + iRes++; + + return iRes; +} + + +/// compute UTF-8 string length in codepoints +inline int sphUTF8Len ( const char * pStr, int iMax ) +{ + BYTE * pBuf = (BYTE*) pStr; + BYTE * pMax = pBuf + iMax; + int iRes = 0; + while ( pBuf=2 ); + assert ( sEscaped[0]=='\'' ); + assert ( sEscaped[iLen-1]=='\'' ); + + // skip heading and trailing quotes + const char * s = sEscaped+1; + const char * sMax = s+iLen-2; + + sRes.Reserve ( iLen ); + char * d = (char*) sRes.cstr(); + + while ( s & dDynamize ) = 0; +}; + +////////////////////////////////////////////////////////////////////////// + +/// dict traits +class CSphDictTraits : public CSphDict +{ +public: + explicit CSphDictTraits ( CSphDict * pDict ) : m_pDict ( pDict ) { assert ( m_pDict ); } + + virtual void LoadStopwords ( const char * sFiles, ISphTokenizer * pTokenizer ) { m_pDict->LoadStopwords ( sFiles, pTokenizer ); } + virtual bool LoadWordforms ( const char * sFile, ISphTokenizer * pTokenizer, const char * sIndex ) { return m_pDict->LoadWordforms ( sFile, pTokenizer, sIndex ); } + virtual bool SetMorphology ( const char * szMorph, bool bUseUTF8, CSphString & sError ) { return m_pDict->SetMorphology ( szMorph, bUseUTF8, sError ); } + + virtual SphWordID_t GetWordID ( const BYTE * pWord, int iLen, bool bFilterStops ) { return m_pDict->GetWordID ( pWord, iLen, bFilterStops ); } + + virtual void Setup ( const CSphDictSettings & ) {} + virtual const CSphDictSettings & GetSettings () const { return m_pDict->GetSettings (); } + virtual const CSphVector & GetStopwordsFileInfos () { return m_pDict->GetStopwordsFileInfos (); } + virtual const CSphSavedFile & GetWordformsFileInfo () { return m_pDict->GetWordformsFileInfo (); } + virtual const CSphMultiformContainer * GetMultiWordforms () const { return m_pDict->GetMultiWordforms (); } + + virtual bool IsStopWord ( const BYTE * pWord ) const { return m_pDict->IsStopWord ( pWord ); } + +protected: + CSphDict * m_pDict; +}; + + +/// dict wrapper for star-syntax support in prefix-indexes +class CSphDictStar : public CSphDictTraits +{ +public: + explicit CSphDictStar ( CSphDict * pDict ) : CSphDictTraits ( pDict ) {} + + virtual SphWordID_t GetWordID ( BYTE * pWord ); + virtual SphWordID_t GetWordIDNonStemmed ( BYTE * pWord ); +}; + + +/// star dict for index v.8+ +class CSphDictStarV8 : public CSphDictStar +{ +public: + CSphDictStarV8 ( CSphDict * pDict, bool bPrefixes, bool bInfixes ); + + virtual SphWordID_t GetWordID ( BYTE * pWord ); + +private: + bool m_bPrefixes; + bool m_bInfixes; +}; + + +/// dict wrapper for exact-word syntax +class CSphDictExact : public CSphDictTraits +{ +public: + explicit CSphDictExact ( CSphDict * pDict ) : CSphDictTraits ( pDict ) {} + virtual SphWordID_t GetWordID ( BYTE * pWord ); +}; + +#endif // _sphinxint_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxmetaphone.cpp b/coreseek/csft-4.1/src/sphinxmetaphone.cpp new file mode 100755 index 0000000..45f0a02 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxmetaphone.cpp @@ -0,0 +1,663 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxint.h" + + +struct CurrentWord_t +{ + BYTE * pWord; + int iLength; + int iLengthPadded; +}; + + +static bool IsVowel ( BYTE c ) +{ + return c=='A' || c=='E' || c=='I' || c=='O' || c=='U' || c=='Y'; +} + + +static bool SlavoGermanic ( BYTE * pString ) +{ + // OPTIMIZE! + char * szWord = (char *) pString; + + if ( strstr ( szWord, "W" ) ) + return true; + + if ( strstr ( szWord, "K" ) ) + return true; + + if ( strstr ( szWord, "CZ" ) ) + return true; + + if ( strstr ( szWord, "WITZ" ) ) + return true; + + return false; +} + + +static bool StrAt ( const CurrentWord_t & Word, int iStart, int iLength, const char * szStr1 ) +{ + if ( iStart<0 || iStart>=Word.iLengthPadded ) + return false; + + char * szPos = (char *)Word.pWord + iStart; + return !strncmp ( szPos, szStr1, iLength ); +} + + +static bool StrAt ( const CurrentWord_t & Word, int iStart, int iLength, const char * szStr1, const char * szStr2 ) +{ + if ( iStart<0 || iStart>=Word.iLengthPadded ) + return false; + + char * szPos = (char *)Word.pWord + iStart; + return !strncmp ( szPos, szStr1, iLength ) || !strncmp ( szPos, szStr2, iLength ); +} + + +static bool StrAt ( const CurrentWord_t & Word, int iStart, int iLength, const char * szStr1, const char * szStr2, const char * szStr3 ) +{ + if ( iStart<0 || iStart>=Word.iLengthPadded ) + return false; + + char * szPos = (char *)Word.pWord + iStart; + return !strncmp ( szPos, szStr1, iLength ) || !strncmp ( szPos, szStr2, iLength ) || !strncmp ( szPos, szStr3, iLength ); +} + + +static bool StrAt ( const CurrentWord_t & Word, int iStart, int iLength, const char * szStr1, const char * szStr2, const char * szStr3, const char * szStr4 ) +{ + if ( iStart<0 || iStart>=Word.iLengthPadded ) + return false; + + char * szPos = (char *)Word.pWord + iStart; + return !strncmp ( szPos, szStr1, iLength ) || !strncmp ( szPos, szStr2, iLength ) || !strncmp ( szPos, szStr3, iLength ) + || !strncmp ( szPos, szStr4, iLength ); +} + +static bool StrAt ( const CurrentWord_t & Word, int iStart, int iLength, const char * szStr1, const char * szStr2, const char * szStr3, const char * szStr4, const char * szStr5 ) +{ + if ( iStart<0 || iStart>=Word.iLengthPadded ) + return false; + + char * szPos = (char *)Word.pWord + iStart; + return !strncmp ( szPos, szStr1, iLength ) || !strncmp ( szPos, szStr2, iLength ) || !strncmp ( szPos, szStr3, iLength ) + || !strncmp ( szPos, szStr4, iLength ) || !strncmp ( szPos, szStr5, iLength ); +} + + + +static void MetaphAdd ( BYTE * pPrimary, BYTE * pSecondary, const char * szAddPrimary, const char * szAddSecondary ) +{ + strcat ( (char*)pPrimary, szAddPrimary ); // NOLINT + strcat ( (char*)pSecondary, szAddSecondary ); // NOLINT +} + +#define ADD_RET(prim,sec,adv)\ +{\ + MetaphAdd ( sPrimary, sSecondary, prim, sec );\ + return (adv);\ +} + +#define ADD(prim,sec)\ + MetaphAdd ( sPrimary, sSecondary, prim, sec ) + +static int ProcessCode ( int iCode, int iCur, CurrentWord_t & Word, BYTE * sPrimary, BYTE * sSecondary ) +{ + BYTE * pWord = Word.pWord; + + // codepoints, not bytes + int iAdvance = 1; + + // bytes, not codepoints + int iLast = Word.iLength - 1; + + switch ( iCode ) + { + case 'A': + case 'E': + case 'I': + case 'O': + case 'U': + case 'Y': + // all init vowels now map to 'A' + if ( !iCur ) + ADD ( "A", "A" ); + break; + + case 'B': + // "-mb", e.g", "dumb", already skipped over... + ADD_RET ( "P", "P", ( pWord[iCur+1]=='B' ) ? 2 : 1 ) + + case 0xC7: + case 0xE7: + ADD_RET ( "S", "S", 1 ) + + case 'C': + // various germanic + if ( iCur > 1 && !IsVowel ( pWord[iCur-2] ) && StrAt ( Word, iCur-1, 3, "ACH" ) + && ( pWord[iCur+2]!='I' && ( pWord[iCur+2]!='E' || StrAt ( Word, iCur-2, 6, "BACHER", "MACHER" ) ) ) ) + ADD_RET ( "K", "K", 2 ) + + // special case 'caesar' + if ( iCur==0 && StrAt ( Word, 0, 6, "CAESAR" ) ) + ADD_RET ( "S", "S", 2 ) + + // italian 'chianti' + if ( StrAt ( Word, iCur, 4, "CHIA" ) ) + ADD_RET ( "K", "K", 2 ) + + if ( StrAt ( Word, iCur, 2, "CH" ) ) + { + // find 'michael' + if ( iCur > 0 && StrAt ( Word, iCur, 4, "CHAE" ) ) + ADD_RET ( "K", "X", 2 ) + + // greek roots e.g. 'chemistry', 'chorus' + if ( iCur==0 && ( StrAt ( Word, iCur+1, 5, "HARAC", "HARIS" ) || StrAt ( Word, iCur+1, 3, "HOR", "HYM", "HIA", "HEM" ) ) && !StrAt ( Word, 0, 5, "CHORE" ) ) + ADD_RET ( "K", "K", 2 ) + + // germanic, greek, or otherwise 'ch' for 'kh' sound + if ( ( StrAt ( Word, 0, 4, "VAN ", "VON " ) || StrAt ( Word, 0, 3, "SCH" ) ) + // 'architect but not 'arch', 'orchestra', 'orchid' + || StrAt ( Word, iCur-2, 6, "ORCHES", "ARCHIT", "ORCHID" ) + || StrAt ( Word, iCur+2, 1, "T", "S" ) + || ( ( StrAt ( Word, iCur-1, 1, "A", "O", "U", "E" ) || iCur==0 ) // e.g., 'wachtler', 'wechsler', but not 'tichner' + && ( StrAt ( Word, iCur+2, 1, "L", "R", "N", "M" ) || StrAt ( Word, iCur+2, 1, "B", "H", "F", "V" ) + || StrAt ( Word, iCur+2, 1, "W", " " ) ) ) ) + { + ADD ( "K", "K" ); + } else + { + if ( iCur > 0 ) + { + if ( StrAt ( Word, 0, 2, "MC" ) ) // e.g., "McHugh" + ADD ( "K", "K" ); + else + ADD ( "X", "K" ); + } else + ADD ( "X", "X" ); + } + + return 2; + } + + // e.g, 'czerny' + if ( StrAt ( Word, iCur, 2, "CZ" ) && !StrAt ( Word, iCur-2, 4, "WICZ" ) ) + ADD_RET ( "S", "X", 2 ) + + // e.g., 'focaccia' + if ( StrAt ( Word, iCur+1, 3, "CIA" ) ) + ADD_RET ( "X", "X", 3 ) + + // double 'C', but not if e.g. 'McClellan' + if ( StrAt ( Word, iCur, 2, "CC" ) && !( iCur==1 && pWord[0]=='M' ) ) + { + // 'bellocchio' but not 'bacchus' + if ( StrAt ( Word, iCur+2, 1, "I", "E", "H" ) && !StrAt ( Word, iCur+2, 2, "HU" ) ) + { + // 'accident', 'accede' 'succeed' + if ( ( iCur==1 && pWord[iCur-1]=='A' ) || StrAt ( Word, iCur-1, 5, "UCCEE", "UCCES" ) ) + ADD_RET ( "KS", "KS", 2 ) + else // 'bacci', 'bertucci', other italian + ADD_RET ( "X", "X", 2 ) + } else // Pierce's rule + ADD_RET ( "K", "K", 2 ) + } + + if ( StrAt ( Word, iCur, 2, "CK", "CG", "CQ" ) ) + ADD_RET ( "K", "K", 2 ) + + if ( StrAt ( Word, iCur, 2, "CI", "CE", "CY" ) ) + { + // italian vs. english + if ( StrAt ( Word, iCur, 3, "CIO", "CIE", "CIA" ) ) + ADD_RET ( "S", "X", 2 ) + else + ADD_RET ( "S", "S", 2 ) + } + + // else + ADD ( "K", "K" ); + + // name sent in 'mac caffrey', 'mac gregor + if ( StrAt ( Word, iCur+1, 2, " C", " Q", " G" ) ) + return 3; + else + { + if ( StrAt ( Word, iCur+1, 1, "C", "K", "Q" ) && !StrAt ( Word, iCur+1, 2, "CE", "CI" ) ) + return 2; + } + break; + + case 'D': + if ( StrAt ( Word, iCur, 2, "DG" ) ) + { + if ( StrAt ( Word, iCur+2, 1, "I", "E", "Y" ) ) // e.g. 'edge' + ADD_RET ( "J", "J", 3 ) + else // e.g. 'edgar' + ADD_RET ( "TK", "TK", 2 ) + } + + if ( StrAt ( Word, iCur, 2, "DT", "DD" ) ) + ADD_RET ( "T", "T", 2 ) + + // else + ADD_RET ( "T", "T", 1 ) + + case 'F': + ADD_RET ( "F", "F", pWord[iCur+1]=='F' ? 2 : 1 ) + + case 'G': + if ( pWord[iCur+1]=='H' ) + { + if ( iCur > 0 && !IsVowel ( pWord[iCur-1] ) ) + ADD_RET ( "K", "K", 2 ) + + if ( iCur < 3 ) + { + // 'ghislane', ghiradelli + if ( iCur==0 ) + { + if ( pWord[iCur+2]=='I' ) + ADD_RET ( "J", "J", 2 ) + else + ADD_RET ( "K", "K", 2 ) + } + } + + // Parker's rule (with some further refinements) - e.g., 'hugh' + if ( ( iCur > 1 && StrAt ( Word, iCur-2, 1, "B", "H", "D" ) ) + || ( iCur > 2 && StrAt ( Word, iCur-3, 1, "B", "H", "D" ) ) // e.g., 'bough' + || ( iCur > 3 && StrAt ( Word, iCur-4, 1, "B", "H" ) ) ) // e.g., 'broughton' + return 2; + else + { + // e.g., 'laugh', 'McLaughlin', 'cough', 'gough', 'rough', 'tough' + if ( iCur > 2 && pWord[iCur-1]=='U' && StrAt ( Word, iCur-3, 1, "C", "G", "L", "R", "T" ) ) + ADD ( "F", "F" ); + else + if ( iCur > 0 && pWord[iCur-1]!='I' ) + ADD ( "K", "K" ); + + return 2; + } + } + + if ( pWord[iCur+1]=='N' ) + { + if ( iCur==1 && IsVowel ( pWord[0] ) && !SlavoGermanic ( pWord ) ) + ADD ( "KN", "N" ); + else // not e.g. 'cagney' + if ( !StrAt ( Word, iCur+2, 2, "EY" ) && pWord[iCur+1]!='Y' && !SlavoGermanic ( pWord ) ) + ADD ( "N", "KN" ); + else + ADD ( "KN", "KN" ); + + return 2; + } + + // 'tagliaro' + if ( StrAt ( Word, iCur+1, 2, "LI" ) && !SlavoGermanic ( pWord ) ) + ADD_RET ( "KL", "L", 2 ) + + // -ges-,-gep-,-gel-, -gie- at beginning + if ( iCur==0 && ( pWord[iCur+1]=='Y' || StrAt ( Word, iCur+1, 2, "ES", "EP", "EB", "EL" ) + || StrAt ( Word, iCur+1, 2, "EY", "IB", "IL", "IN" ) || StrAt ( Word, iCur+1, 2, "IE", "EI", "ER" ) ) ) + ADD_RET ( "K", "J", 2 ) + + // -ger-, -gy- + if ( ( StrAt ( Word, iCur+1, 2, "ER" ) || pWord[iCur+1]=='Y' ) && !StrAt ( Word, 0, 6, "DANGER", "RANGER", "MANGER" ) + && !StrAt ( Word, iCur-1, 1, "E", "I" ) && !StrAt ( Word, iCur-1, 3, "RGY", "OGY" ) ) + ADD_RET ( "K", "J", 2 ) + + // italian e.g, 'biaggi' + if ( StrAt ( Word, iCur+1, 1, "E", "I", "Y" ) || StrAt ( Word, iCur-1, 4, "AGGI", "OGGI" ) ) + { + // obvious germanic + if ( StrAt ( Word, 0, 4, "VAN ", "VON " ) || StrAt ( Word, 0, 3, "SCH" ) || StrAt ( Word, iCur+1, 2, "ET" ) ) + ADD ( "K", "K" ); + else + { + // always soft if french ending + if ( StrAt ( Word, iCur+1, 4, "IER " ) ) + ADD ( "J", "J" ); + else + ADD ( "J", "K" ); + } + + return 2; + } + + ADD_RET ( "K", "K", pWord[iCur+1]=='G' ? 2 : 1 ) + + case 'H': + // only keep if first & before vowel or btw. 2 vowels + if ( ( iCur==0 || IsVowel ( pWord[iCur-1] ) ) && IsVowel ( pWord[iCur+1] ) ) + ADD_RET ( "H", "H", 2 ) + break; // also takes care of 'HH' + + case 'J': + // obvious spanish, 'jose', 'san jacinto' + if ( StrAt ( Word, iCur, 4, "JOSE" ) || StrAt ( Word, 0, 4, "SAN " ) ) + { + if ( ( iCur==0 && pWord[iCur+4]==' ' ) || StrAt ( Word, 0, 4, "SAN " ) ) + ADD_RET ( "H", "H", 1 ) + else + ADD_RET ( "J", "H", 1 ) + } + + if ( iCur==0 && !StrAt ( Word, iCur, 4, "JOSE" ) ) + ADD ( "J", "A" ); // Yankelovich/Jankelowicz + else + { + // spanish pron. of e.g. 'bajador' + if ( ( iCur>0 && IsVowel ( pWord[iCur-1] ) )&& !SlavoGermanic ( pWord ) && ( pWord[iCur+1]=='A' || pWord[iCur+1]=='O' ) ) + ADD ( "J", "H" ); + else + { + if ( iCur==iLast ) + ADD ( "J", "" ); + else + if ( !StrAt ( Word, iCur+1, 1, "L", "T", "K", "S" ) && !StrAt ( Word, iCur+1, 1, "N", "M", "B", "Z" ) && !StrAt ( Word, iCur-1, 1, "S", "K", "L" ) ) + ADD ( "J", "J" ); + } + } + + if ( pWord[iCur+1]=='J' ) // it could happen! + return 2; + + break; + + case 'K': + ADD_RET ( "K", "K", pWord[iCur+1]=='K' ? 2 : 1 ) + + case 'L': + if ( pWord[iCur+1]=='L' ) + { + // spanish e.g. 'cabrillo', 'gallegos' + if ( ( iCur==iLast-2 && StrAt ( Word, iCur-1, 4, "ILLO", "ILLA", "ALLE" ) ) + || ( ( StrAt ( Word, iLast - 1, 2, "AS", "OS" ) || StrAt ( Word, iLast, 1, "A", "O" ) ) && StrAt ( Word, iCur-1, 4, "ALLE" ) ) ) + ADD_RET ( "L", "", 2 ) + + iAdvance = 2; + } + + ADD ( "L", "L" ); + break; + + case 'M': + ADD ( "M", "M" ); + + // 'dumb','thumb' + if ( ( StrAt ( Word, iCur-1, 3, "UMB" ) && ( iCur+1==iLast || StrAt ( Word, iCur+2, 2, "ER" ) ) ) || pWord[iCur+1]=='M' ) + return 2; + + break; + + case 'N': + ADD_RET ( "N", "N", pWord[iCur+1]=='N' ? 2 : 1 ) + + case 0xD1: + case 0xF1: + ADD_RET ( "N", "N", 1 ) + + case 'P': + if ( pWord[iCur+1]=='H' ) + ADD_RET ( "F", "F", 2 ) + + // also account for "campbell", "raspberry" + ADD_RET ( "P", "P", StrAt ( Word, iCur+1, 1, "P", "B" ) ? 2 : 1 ) + + case 'Q': + ADD_RET ( "K", "K", pWord[iCur+1]=='Q' ? 2 : 1 ) + + case 'R': + // french e.g. 'rogier', but exclude 'hochmeier' + if ( iCur==iLast && !SlavoGermanic ( pWord ) && StrAt ( Word, iCur-2, 2, "IE" ) && !StrAt ( Word, iCur-4, 2, "ME", "MA" ) ) + ADD ( "", "R" ); + else + ADD ( "R", "R" ); + + return pWord[iCur+1]=='R' ? 2 : 1; + + case 'S': + // special cases 'island', 'isle', 'carlisle', 'carlysle' + if ( StrAt ( Word, iCur-1, 3, "ISL", "YSL" ) ) + return 1; + + // special case 'sugar-' + if ( iCur==0 && StrAt ( Word, iCur, 5, "SUGAR" ) ) + ADD_RET ( "X", "S", 1 ) + + if ( StrAt ( Word, iCur, 2, "SH" ) ) + { + // germanic + if ( StrAt ( Word, iCur+1, 4, "HEIM", "HOEK", "HOLM", "HOLZ" ) ) + ADD_RET ( "S", "S", 2 ) + else + ADD_RET ( "X", "X", 2 ) + } + + // italian & armenian + if ( StrAt ( Word, iCur, 3, "SIO", "SIA" ) || StrAt ( Word, iCur, 4, "SIAN" ) ) + { + if ( !SlavoGermanic ( pWord ) ) + ADD_RET ( "S", "X", 3 ) + else + ADD_RET ( "S", "S", 3 ) + } + + // german & anglicisations, e.g. 'smith' match 'schmidt', 'snider' match 'schneider' + // also, -sz- in slavic language altho in hungarian it is pronounced 's' + if ( ( iCur==0 && StrAt ( Word, iCur+1, 1, "M", "N", "L", "W" ) ) || StrAt ( Word, iCur+1, 1, "Z" ) ) + ADD_RET ( "S", "X", StrAt ( Word, iCur+1, 1, "Z" ) ? 2 : 1 ) + + if ( StrAt ( Word, iCur, 2, "SC" ) ) + { + // Schlesinger's rule + if ( pWord[iCur+2]=='H' ) + { + if ( StrAt ( Word, iCur+3, 2, "OO", "ER", "EN", "UY" ) + || StrAt ( Word, iCur+3, 2, "ED", "EM" ) ) // dutch origin, e.g. 'school', 'schooner' + { + // 'schermerhorn', 'schenker' + if ( StrAt ( Word, iCur+3, 2, "ER", "EN" ) ) + ADD_RET ( "X", "SK", 3 ) + else + ADD_RET ( "SK", "SK", 3 ) + } else + { + if ( iCur==0 && !IsVowel ( pWord[3] ) && pWord[3]!='W' ) + ADD_RET ( "X", "S", 3 ) + else + ADD_RET ( "X", "X", 3 ) + } + } + + if ( StrAt ( Word, iCur+2, 1, "I", "E", "Y" ) ) + ADD_RET ( "S", "S", 3 ) + + // else + ADD_RET ( "SK", "SK", 3 ) + } + + // french e.g. 'resnais', 'artois' + if ( iCur==iLast && StrAt ( Word, iCur-2, 2, "AI", "OI" ) ) + ADD ( "", "S" ); + else + ADD ( "S", "S" ); + + return StrAt ( Word, iCur+1, 1, "S", "Z" ) ? 2 : 1; + + case 'T': + if ( StrAt ( Word, iCur, 4, "TION" ) ) + ADD_RET ( "X", "X", 3 ) + + if ( StrAt ( Word, iCur, 3, "TIA", "TCH" ) ) + ADD_RET ( "X", "X", 3 ) + + if ( StrAt ( Word, iCur, 2, "TH" ) || StrAt ( Word, iCur, 3, "TTH" ) ) + { + // special case 'thomas', 'thames' or germanic + if ( StrAt ( Word, iCur+2, 2, "OM", "AM" ) || StrAt ( Word, 0, 4, "VAN ", "VON " ) || StrAt ( Word, 0, 3, "SCH" ) ) + ADD_RET ( "T", "T", 2 ) + else + ADD_RET ( "0", "T", 2 ) // yes, zero + } + + ADD_RET ( "T", "T", StrAt ( Word, iCur+1, 1, "T", "D" ) ? 2 : 1 ) + + case 'V': + ADD_RET ( "F", "F", pWord[iCur+1]=='V' ? 2 : 1 ) + + case 'W': + // can also be in middle of word + if ( StrAt ( Word, iCur, 2, "WR" ) ) + ADD_RET ( "R", "R", 2 ) + + if ( iCur==0 && ( IsVowel ( pWord[iCur+1] ) || StrAt ( Word, iCur, 2, "WH" ) ) ) + { + // Wasserman should match Vasserman + if ( IsVowel ( pWord[iCur+1] ) ) + ADD ( "A", "F" ); + else // need Uomo to match Womo + ADD ( "A", "A" ); + } + + // Arnow should match Arnoff + if ( ( iCur==iLast && iCur > 0 && IsVowel ( pWord[iCur-1] ) ) || StrAt ( Word, iCur-1, 5, "EWSKI", "EWSKY", "OWSKI", "OWSKY" ) + || StrAt ( Word, 0, 3, "SCH" ) ) + ADD_RET ( "", "F", 1 ) + + // polish e.g. 'filipowicz' + if ( StrAt ( Word, iCur, 4, "WICZ", "WITZ" ) ) + ADD_RET ( "TS", "FX", 4 ) + break; + + case 'X': + // french e.g. breaux + if ( !( iCur==iLast && ( StrAt ( Word, iCur-3, 3, "IAU", "EAU" ) || StrAt ( Word, iCur-2, 2, "AU", "OU" ) ) ) ) + ADD ( "KS", "KS" ); + + return ( pWord[iCur+1]=='C' || pWord[iCur+1]=='X' ) ? 2 : 1; + + case 'Z': + // chinese pinyin e.g. 'zhao' + if ( pWord[iCur+1]=='H' ) + ADD_RET ( "J", "J", 2 ) + else + if ( StrAt ( Word, iCur+1, 2, "ZO", "ZI", "ZA" ) || ( SlavoGermanic ( pWord ) && ( iCur > 0 && pWord[iCur-1]!='T' ) ) ) + MetaphAdd ( sPrimary, sSecondary, "S", "TS" ); + else + MetaphAdd ( sPrimary, sSecondary, "S", "S" ); + + return pWord[iCur+1]=='Z' ? 2 : 1; + } + + return iAdvance; +} + + +void stem_dmetaphone ( BYTE * pWord, bool bUTF8 ) +{ + BYTE sOriginal [3*SPH_MAX_WORD_LEN+3]; + BYTE sPrimary [3*SPH_MAX_WORD_LEN+3]; + BYTE sSecondary [ 3*SPH_MAX_WORD_LEN+3 ]; + int iLength = strlen ( (const char *)pWord ); + memcpy ( sOriginal, pWord, iLength + 1 ); + sPrimary[0] = '\0'; + sSecondary[0] = '\0'; + + BYTE * pStart = sOriginal; + while ( *pStart ) + { + if ( *pStart>='a' && *pStart<='z' ) + *pStart = (BYTE) toupper ( *pStart ); + + ++pStart; + } + + strcat ( (char *) sOriginal, " " ); // NOLINT + + int iAdvance = 0; + + CurrentWord_t Word; + Word.pWord = sOriginal; + Word.iLength = iLength; + Word.iLengthPadded = strlen ( (const char *)sOriginal ); + + // skip these when at start of word + if ( StrAt ( Word, 0, 2, "GN", "KN", "PN", "WR", "PS" ) ) + iAdvance = 1; + + // Initial 'X' is pronounced 'Z' e.g. 'Xavier' + if ( sOriginal[0]=='X' ) + { + ADD ( "S", "S" ); // 'Z' maps to 'S' + iAdvance = 1; + } + + BYTE * pPtr = sOriginal; + BYTE * pLastPtr = sOriginal; + int iCode = -1; + + if ( bUTF8 ) + iCode = sphUTF8Decode ( pPtr ); + + while ( iCode!=0 ) + { + int iCur = ( bUTF8 ? pLastPtr : pPtr ) - sOriginal; + if ( iCur>=iLength ) + break; + + if ( bUTF8 ) + { + for ( int i = 0; i < iAdvance; ++i ) + { + pLastPtr = pPtr; + iCode = sphUTF8Decode ( pPtr ); + } + + } else + { + pPtr += iAdvance; + iCode = *pPtr; + } + + if ( iCode<=0 ) + break; + + // unknown code: don't copy, just return + if ( bUTF8 && iCode>128 && iCode!=0xC7 && iCode!=0xE7 && iCode!=0xD1 && iCode!=0xF1 ) + return; + + iAdvance = ProcessCode ( iCode, ( bUTF8 ? pLastPtr : pPtr ) - sOriginal, Word, sPrimary, sSecondary ); + } + + if ( !pWord[0] || sPrimary [0] ) + strcpy ( (char*)pWord, (char*)sPrimary ); // NOLINT + + // TODO: handle secondary too +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxmetaphone.o b/coreseek/csft-4.1/src/sphinxmetaphone.o new file mode 100644 index 0000000..ac1d6ab Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxmetaphone.o differ diff --git a/coreseek/csft-4.1/src/sphinxql.l b/coreseek/csft-4.1/src/sphinxql.l new file mode 100755 index 0000000..b1a7378 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxql.l @@ -0,0 +1,139 @@ +%{ +#include "yysphinxql.h" + +#if USE_WINDOWS +#pragma warning(push,1) +#endif + +// warning, lexer generator dependent! +// this macro relies on that in flex yytext points to the actual location in the buffer +#define YYSTOREBOUNDS \ + { \ + lvalp->m_iStart = yytext - pParser->m_pBuf; \ + lvalp->m_iEnd = lvalp->m_iStart + yyleng; \ + pParser->m_pLastTokenStart = yytext; \ + } + +%} + +DIGIT [0-9] +ID [a-zA-Z_][a-zA-Z_0-9]* +SPACE [ \t\n\r] + +%option noyywrap +%option nounput +%option reentrant + +%x ccomment + +%% + +"/*" { BEGIN(ccomment); } +. { } +"*/" { BEGIN(INITIAL); } + +"AND" { YYSTOREBOUNDS; return TOK_AND; } +"AS" { YYSTOREBOUNDS; return TOK_AS; } +"ASC" { YYSTOREBOUNDS; return TOK_ASC; } +"AVG" { YYSTOREBOUNDS; return TOK_AVG; } +"BEGIN" { YYSTOREBOUNDS; return TOK_BEGIN; } +"BETWEEN" { YYSTOREBOUNDS; return TOK_BETWEEN; } +"BY" { YYSTOREBOUNDS; return TOK_BY; } +"CALL" { YYSTOREBOUNDS; return TOK_CALL; } +"COLLATION" { YYSTOREBOUNDS; return TOK_COLLATION; } +"COMMIT" { YYSTOREBOUNDS; return TOK_COMMIT; } +"COUNT" { YYSTOREBOUNDS; return TOK_COUNT; } +"CREATE" { YYSTOREBOUNDS; return TOK_CREATE; } +"DELETE" { YYSTOREBOUNDS; return TOK_DELETE; } +"DESC" { YYSTOREBOUNDS; return TOK_DESC; } +"DESCRIBE" { YYSTOREBOUNDS; return TOK_DESCRIBE; } +"DISTINCT" { YYSTOREBOUNDS; return TOK_DISTINCT; } +"DIV" { YYSTOREBOUNDS; return TOK_DIV; } +"DROP" { YYSTOREBOUNDS; return TOK_DROP; } +"FALSE" { YYSTOREBOUNDS; return TOK_FALSE; } +"FLOAT" { YYSTOREBOUNDS; return TOK_FLOAT; } +"FROM" { YYSTOREBOUNDS; return TOK_FROM; } +"FUNCTION" { YYSTOREBOUNDS; return TOK_FUNCTION; } +"GLOBAL" { YYSTOREBOUNDS; return TOK_GLOBAL; } +"GROUP" { YYSTOREBOUNDS; return TOK_GROUP; } +"ID" { YYSTOREBOUNDS; return TOK_ID; } +"IN" { YYSTOREBOUNDS; return TOK_IN; } +"INSERT" { YYSTOREBOUNDS; return TOK_INSERT; } +"INT" { YYSTOREBOUNDS; return TOK_INT; } +"INTO" { YYSTOREBOUNDS; return TOK_INTO; } +"LIMIT" { YYSTOREBOUNDS; return TOK_LIMIT; } +"MATCH" { YYSTOREBOUNDS; return TOK_MATCH; } +"MAX" { YYSTOREBOUNDS; return TOK_MAX; } +"META" { YYSTOREBOUNDS; return TOK_META; } +"MIN" { YYSTOREBOUNDS; return TOK_MIN; } +"MOD" { YYSTOREBOUNDS; return TOK_MOD; } +"NAMES" { YYSTOREBOUNDS; return TOK_NAMES; } +"NOT" { YYSTOREBOUNDS; return TOK_NOT; } +"NULL" { YYSTOREBOUNDS; return TOK_NULL; } +"OPTION" { YYSTOREBOUNDS; return TOK_OPTION; } +"OR" { YYSTOREBOUNDS; return TOK_OR; } +"ORDER" { YYSTOREBOUNDS; return TOK_ORDER; } +"RAND" { YYSTOREBOUNDS; return TOK_RAND; } +"REPLACE" { YYSTOREBOUNDS; return TOK_REPLACE; } +"RETURNS" { YYSTOREBOUNDS; return TOK_RETURNS; } +"ROLLBACK" { YYSTOREBOUNDS; return TOK_ROLLBACK; } +"SELECT" { YYSTOREBOUNDS; return TOK_SELECT; } +"SET" { YYSTOREBOUNDS; return TOK_SET; } +"SESSION" { YYSTOREBOUNDS; return TOK_SESSION; } +"SHOW" { YYSTOREBOUNDS; return TOK_SHOW; } +"SONAME" { YYSTOREBOUNDS; return TOK_SONAME; } +"START" { YYSTOREBOUNDS; return TOK_START; } +"STATUS" { YYSTOREBOUNDS; return TOK_STATUS; } +"SUM" { YYSTOREBOUNDS; return TOK_SUM; } +"TABLES" { YYSTOREBOUNDS; return TOK_TABLES; } +"TRANSACTION" { YYSTOREBOUNDS; return TOK_TRANSACTION; } +"TRUE" { YYSTOREBOUNDS; return TOK_TRUE; } +"UPDATE" { YYSTOREBOUNDS; return TOK_UPDATE; } +"VALUES" { YYSTOREBOUNDS; return TOK_VALUES; } +"VARIABLES" { YYSTOREBOUNDS; return TOK_VARIABLES; } +"WARNINGS" { YYSTOREBOUNDS; return TOK_WARNINGS; } +"WEIGHT" { YYSTOREBOUNDS; return TOK_WEIGHT; } +"WHERE" { YYSTOREBOUNDS; return TOK_WHERE; } +"WITHIN" { YYSTOREBOUNDS; return TOK_WITHIN; } + +"!=" { YYSTOREBOUNDS; return TOK_NE; } +"<>" { YYSTOREBOUNDS; return TOK_NE; } +"<=" { YYSTOREBOUNDS; return TOK_LTE; } +">=" { YYSTOREBOUNDS; return TOK_GTE; } +":=" { YYSTOREBOUNDS; return '='; } + +'([^'\\]|\\.|\\\\)*' { YYSTOREBOUNDS; SqlUnescape ( lvalp->m_sValue, yytext, yyleng ); return TOK_QUOTED_STRING; } + +{DIGIT}*\.{DIGIT}* { YYSTOREBOUNDS; lvalp->m_sValue = yytext; lvalp->m_fValue = (float)strtod ( yytext, NULL ); return TOK_CONST_FLOAT; } +{DIGIT}+ { YYSTOREBOUNDS; lvalp->m_sValue = yytext; lvalp->m_iValue = strtoll ( yytext, NULL, 10 ); return TOK_CONST_INT; } + +"@id" { YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_ATIDENT; } +"@weight" { YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_ATIDENT; } +"@count" { YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_ATIDENT; } +{ID} { YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_IDENT; } +@{ID} { YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_USERVAR; } +@@{ID} { YYSTOREBOUNDS; lvalp->m_sValue = yytext; return TOK_SYSVAR; } +`{ID}` { YYSTOREBOUNDS; lvalp->m_iStart++; lvalp->m_iEnd--; lvalp->m_sValue.SetBinary ( yytext+1, strlen(yytext)-2 ); return TOK_IDENT; } + +{SPACE}+ { ; } +. { YYSTOREBOUNDS; return yytext[0]; } + +%% + +// warning, lexer generator dependent! +// flex inserts trailing zero as needed into the buffer when lexing +// but we need that rolled back when doing error reporting from yyerror +void yylex_unhold ( yyscan_t yyscanner ) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( YY_CURRENT_BUFFER ) + { + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } +} + +#if USE_WINDOWS +#pragma warning(pop) +#endif diff --git a/coreseek/csft-4.1/src/sphinxql.y b/coreseek/csft-4.1/src/sphinxql.y new file mode 100755 index 0000000..5bf918a --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxql.y @@ -0,0 +1,847 @@ +%{ +#if USE_WINDOWS +#pragma warning(push,1) +#pragma warning(disable:4702) // unreachable code +#endif +%} + +%lex-param { SqlParser_c * pParser } +%parse-param { SqlParser_c * pParser } +%pure-parser +%error-verbose + +%token TOK_IDENT +%token TOK_ATIDENT +%token TOK_CONST_INT +%token TOK_CONST_FLOAT +%token TOK_CONST_MVA +%token TOK_QUOTED_STRING +%token TOK_USERVAR +%token TOK_SYSVAR + +%token TOK_AS +%token TOK_ASC +%token TOK_AVG +%token TOK_BEGIN +%token TOK_BETWEEN +%token TOK_BY +%token TOK_CALL +%token TOK_COLLATION +%token TOK_COMMIT +%token TOK_COUNT +%token TOK_CREATE +%token TOK_DELETE +%token TOK_DESC +%token TOK_DESCRIBE +%token TOK_DISTINCT +%token TOK_DIV +%token TOK_DROP +%token TOK_FALSE +%token TOK_FLOAT +%token TOK_FROM +%token TOK_FUNCTION +%token TOK_GLOBAL +%token TOK_GROUP +%token TOK_ID +%token TOK_IN +%token TOK_INSERT +%token TOK_INT +%token TOK_INTO +%token TOK_LIMIT +%token TOK_MATCH +%token TOK_MAX +%token TOK_META +%token TOK_MIN +%token TOK_MOD +%token TOK_NAMES +%token TOK_NULL +%token TOK_OPTION +%token TOK_ORDER +%token TOK_RAND +%token TOK_REPLACE +%token TOK_RETURNS +%token TOK_ROLLBACK +%token TOK_SELECT +%token TOK_SET +%token TOK_SESSION +%token TOK_SHOW +%token TOK_SONAME +%token TOK_START +%token TOK_STATUS +%token TOK_SUM +%token TOK_TABLES +%token TOK_TRANSACTION +%token TOK_TRUE +%token TOK_UPDATE +%token TOK_VALUES +%token TOK_VARIABLES +%token TOK_WARNINGS +%token TOK_WEIGHT +%token TOK_WHERE +%token TOK_WITHIN + +%type named_const_list +%type udf_type + +%left TOK_OR +%left TOK_AND +%left '|' +%left '&' +%left '=' TOK_NE +%left '<' '>' TOK_LTE TOK_GTE +%left '+' '-' +%left '*' '/' '%' TOK_DIV TOK_MOD +%nonassoc TOK_NOT +%nonassoc TOK_NEG + +%{ +// some helpers +#include // for FLT_MAX + +%} + +%% + +request: + statement { pParser->PushQuery(); } + | multi_stmt_list + | multi_stmt_list ';' + ; + +statement: + insert_into + | delete_from + | set_clause + | set_global_clause + | transact_op + | call_proc + | describe + | show_tables + | update + | show_variables + | show_collation + | create_function + | drop_function + ; + +////////////////////////////////////////////////////////////////////////// + +multi_stmt_list: + multi_stmt { pParser->PushQuery(); } + | multi_stmt_list ';' multi_stmt { pParser->PushQuery(); } + ; + +multi_stmt: + select_from + | show_clause + ; + +select_from: + TOK_SELECT select_items_list + TOK_FROM ident_list + opt_where_clause + opt_group_clause + opt_group_order_clause + opt_order_clause + opt_limit_clause + opt_option_clause + { + pParser->m_pStmt->m_eStmt = STMT_SELECT; + pParser->m_pQuery->m_sIndexes.SetBinary ( pParser->m_pBuf+$4.m_iStart, $4.m_iEnd-$4.m_iStart ); + } + ; + +select_items_list: + select_item + | select_items_list ',' select_item + ; + +select_item: + '*' { pParser->AddItem ( &$1 ); } + | select_expr opt_alias + ; + +opt_alias: + // empty + | TOK_IDENT { pParser->AliasLastItem ( &$1 ); } + | TOK_AS TOK_IDENT { pParser->AliasLastItem ( &$2 ); } + ; + +select_expr: + expr { pParser->AddItem ( &$1 ); } + | TOK_AVG '(' expr ')' { pParser->AddItem ( &$3, SPH_AGGR_AVG, &$1, &$4 ); } + | TOK_MAX '(' expr ')' { pParser->AddItem ( &$3, SPH_AGGR_MAX, &$1, &$4 ); } + | TOK_MIN '(' expr ')' { pParser->AddItem ( &$3, SPH_AGGR_MIN, &$1, &$4 ); } + | TOK_SUM '(' expr ')' { pParser->AddItem ( &$3, SPH_AGGR_SUM, &$1, &$4 ); } + | TOK_COUNT '(' '*' ')' { if ( !pParser->AddItem ( "count(*)", &$1, &$4 ) ) YYERROR; } + | TOK_WEIGHT '(' ')' { if ( !pParser->AddItem ( "weight()", &$1, &$3 ) ) YYERROR; } + | TOK_COUNT '(' TOK_DISTINCT TOK_IDENT ')' { if ( !pParser->AddDistinct ( &$4, &$1, &$5 ) ) YYERROR; } + ; + +ident_list: + TOK_IDENT + | ident_list ',' TOK_IDENT { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + ; + +opt_where_clause: + // empty + | where_clause + ; + +where_clause: + TOK_WHERE where_expr + ; + +where_expr: + where_item + | where_expr TOK_AND where_item + ; + +where_item: + TOK_MATCH '(' TOK_QUOTED_STRING ')' + { + if ( !pParser->SetMatch($3) ) + YYERROR; + } + | expr_ident '=' const_int + { + CSphFilterSettings * pFilter = pParser->AddValuesFilter ( $1 ); + if ( !pFilter ) + YYERROR; + pFilter->m_dValues.Add ( $3.m_iValue ); + } + | expr_ident TOK_NE const_int + { + CSphFilterSettings * pFilter = pParser->AddValuesFilter ( $1 ); + if ( !pFilter ) + YYERROR; + pFilter->m_dValues.Add ( $3.m_iValue ); + pFilter->m_bExclude = true; + } + | expr_ident TOK_IN '(' const_list ')' + { + CSphFilterSettings * pFilter = pParser->AddValuesFilter ( $1 ); + if ( !pFilter ) + YYERROR; + pFilter->m_dValues = *$4.m_pValues.Ptr(); + pFilter->m_dValues.Sort(); + } + | expr_ident TOK_NOT TOK_IN '(' const_list ')' + { + CSphFilterSettings * pFilter = pParser->AddValuesFilter ( $1 ); + if ( !pFilter ) + YYERROR; + pFilter->m_dValues = *$5.m_pValues.Ptr(); + pFilter->m_bExclude = true; + pFilter->m_dValues.Sort(); + } + | expr_ident TOK_IN TOK_USERVAR + { + if ( !pParser->AddUservarFilter ( $1.m_sValue, $3.m_sValue, false ) ) + YYERROR; + } + | expr_ident TOK_NOT TOK_IN TOK_USERVAR + { + if ( !pParser->AddUservarFilter ( $1.m_sValue, $3.m_sValue, true ) ) + YYERROR; + } + | expr_ident TOK_BETWEEN const_int TOK_AND const_int + { + if ( !pParser->AddUintRangeFilter ( $1.m_sValue, $3.m_iValue, $5.m_iValue ) ) + YYERROR; + } + | expr_ident '>' const_int + { + if ( !pParser->AddUintRangeFilter ( $1.m_sValue, $3.m_iValue+1, UINT_MAX ) ) + YYERROR; + } + | expr_ident '<' const_int + { + if ( !pParser->AddUintRangeFilter ( $1.m_sValue, 0, $3.m_iValue-1 ) ) + YYERROR; + } + | expr_ident TOK_GTE const_int + { + if ( !pParser->AddUintRangeFilter ( $1.m_sValue, $3.m_iValue, UINT_MAX ) ) + YYERROR; + } + | expr_ident TOK_LTE const_int + { + if ( !pParser->AddUintRangeFilter ( $1.m_sValue, 0, $3.m_iValue ) ) + YYERROR; + } + | expr_ident '=' const_float + | expr_ident TOK_NE const_float + | expr_ident '>' const_float + | expr_ident '<' const_float + { + yyerror ( pParser, "only >=, <=, and BETWEEN floating-point filter types are supported in this version" ); + YYERROR; + } + | expr_ident TOK_BETWEEN const_float TOK_AND const_float + { + if ( !pParser->AddFloatRangeFilter ( $1.m_sValue, $3.m_fValue, $5.m_fValue ) ) + YYERROR; + } + | expr_ident TOK_GTE const_float + { + if ( !pParser->AddFloatRangeFilter ( $1.m_sValue, $3.m_fValue, FLT_MAX ) ) + YYERROR; + } + | expr_ident TOK_LTE const_float + { + if ( !pParser->AddFloatRangeFilter ( $1.m_sValue, -FLT_MAX, $3.m_fValue ) ) + YYERROR; + } + ; + +expr_ident: + TOK_IDENT + | TOK_ATIDENT + { + if ( !pParser->SetOldSyntax() ) + YYERROR; + } + | TOK_COUNT '(' '*' ')' + { + $$.m_sValue = "@count"; + if ( !pParser->SetNewSyntax() ) + YYERROR; + } + | TOK_WEIGHT '(' ')' + { + $$.m_sValue = "@weight"; + if ( !pParser->SetNewSyntax() ) + YYERROR; + } + | TOK_ID + { + $$.m_sValue = "@id"; + if ( !pParser->SetNewSyntax() ) + YYERROR; + } + ; + +const_int: + TOK_CONST_INT { $$.m_iInstype = TOK_CONST_INT; $$.m_iValue = $1.m_iValue; } + | '-' TOK_CONST_INT { $$.m_iInstype = TOK_CONST_INT; $$.m_iValue = -$2.m_iValue; } + ; + +const_float: + TOK_CONST_FLOAT { $$.m_iInstype = TOK_CONST_FLOAT; $$.m_fValue = $1.m_fValue; } + | '-' TOK_CONST_FLOAT { $$.m_iInstype = TOK_CONST_FLOAT; $$.m_fValue = -$2.m_fValue; } + ; + +const_list: + const_int + { + assert ( !$$.m_pValues.Ptr() ); + $$.m_pValues = new RefcountedVector_c (); + $$.m_pValues->Add ( $1.m_iValue ); + } + | const_list ',' const_int + { + $$.m_pValues->Add ( $3.m_iValue ); + } + ; + +opt_group_clause: + // empty + | group_clause + ; + +group_clause: + TOK_GROUP TOK_BY expr_ident + { + pParser->m_pQuery->m_eGroupFunc = SPH_GROUPBY_ATTR; + pParser->m_pQuery->m_sGroupBy = $3.m_sValue; + } + ; + +opt_group_order_clause: + // empty + | group_order_clause + ; + +group_order_clause: + TOK_WITHIN TOK_GROUP TOK_ORDER TOK_BY order_items_list + { + pParser->m_pQuery->m_sSortBy.SetBinary ( pParser->m_pBuf+$5.m_iStart, $5.m_iEnd-$5.m_iStart ); + } + ; + +opt_order_clause: + // empty + | order_clause + ; + +order_clause: + TOK_ORDER TOK_BY order_items_list + { + pParser->m_pQuery->m_sOrderBy.SetBinary ( pParser->m_pBuf+$3.m_iStart, $3.m_iEnd-$3.m_iStart ); + } + | TOK_ORDER TOK_BY TOK_RAND '(' ')' + { + pParser->m_pQuery->m_sOrderBy = "@random"; + } + ; + +order_items_list: + order_item + | order_items_list ',' order_item { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + ; + +order_item: + expr_ident + | expr_ident TOK_ASC { $$ = $1; $$.m_iEnd = $2.m_iEnd; } + | expr_ident TOK_DESC { $$ = $1; $$.m_iEnd = $2.m_iEnd; } + ; + +opt_limit_clause: + // empty + | limit_clause + ; + +limit_clause: + TOK_LIMIT TOK_CONST_INT + { + pParser->m_pQuery->m_iOffset = 0; + pParser->m_pQuery->m_iLimit = $2.m_iValue; + } + | TOK_LIMIT TOK_CONST_INT ',' TOK_CONST_INT + { + pParser->m_pQuery->m_iOffset = $2.m_iValue; + pParser->m_pQuery->m_iLimit = $4.m_iValue; + } + ; + +opt_option_clause: + // empty + | option_clause + ; + +option_clause: + TOK_OPTION option_list + ; + +option_list: + option_item + | option_list ',' option_item + ; + +option_item: + TOK_IDENT '=' TOK_IDENT + { + if ( !pParser->AddOption ( $1, $3 ) ) + YYERROR; + } + | TOK_IDENT '=' TOK_CONST_INT + { + if ( !pParser->AddOption ( $1, $3 ) ) + YYERROR; + } + | TOK_IDENT '=' '(' named_const_list ')' + { + if ( !pParser->AddOption ( $1, pParser->GetNamedVec ( $4 ) ) ) + YYERROR; + pParser->FreeNamedVec ( $4 ); + } + | TOK_IDENT '=' TOK_IDENT '(' TOK_QUOTED_STRING ')' + { + if ( !pParser->AddOption ( $1, $4, $5.m_sValue ) ) + YYERROR; + } + ; + +named_const_list: + named_const + { + $$ = pParser->AllocNamedVec (); + pParser->AddConst ( $$, $1 ); + } + | named_const_list ',' named_const + { + pParser->AddConst( $$, $3 ); + } + ; + +named_const: + TOK_IDENT '=' const_int + { + $$.m_sValue = $1.m_sValue; + $$.m_iValue = $3.m_iValue; + } + ; + +////////////////////////////////////////////////////////////////////////// + +expr: + TOK_IDENT + | TOK_ATIDENT { if ( !pParser->SetOldSyntax() ) YYERROR; } + | TOK_ID { if ( !pParser->SetNewSyntax() ) YYERROR; } + | TOK_CONST_INT + | TOK_CONST_FLOAT + | TOK_USERVAR + | '-' expr %prec TOK_NEG { $$ = $1; $$.m_iEnd = $2.m_iEnd; } + | TOK_NOT expr { $$ = $1; $$.m_iEnd = $2.m_iEnd; } + | expr '+' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '-' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '*' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '/' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '<' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '>' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '&' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '|' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '%' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_DIV expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_MOD expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_LTE expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_GTE expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '=' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_NE expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_AND expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_OR expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | '(' expr ')' { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | function + ; + +function: + TOK_IDENT '(' arglist ')' { $$ = $1; $$.m_iEnd = $4.m_iEnd; } + | TOK_IN '(' arglist ')' { $$ = $1; $$.m_iEnd = $4.m_iEnd; } // handle exception from 'ident' rule + | TOK_IDENT '(' ')' { $$ = $1; $$.m_iEnd = $3.m_iEnd } + | TOK_MIN '(' expr ',' expr ')' { $$ = $1; $$.m_iEnd = $6.m_iEnd } // handle clash with aggregate functions + | TOK_MAX '(' expr ',' expr ')' { $$ = $1; $$.m_iEnd = $6.m_iEnd } + ; + +arglist: + arg + | arglist ',' arg + ; + +arg: + expr + | TOK_QUOTED_STRING + ; + +////////////////////////////////////////////////////////////////////////// + +show_clause: + TOK_SHOW show_variable + ; + +show_variable: + TOK_WARNINGS { pParser->m_pStmt->m_eStmt = STMT_SHOW_WARNINGS; } + | TOK_STATUS { pParser->m_pStmt->m_eStmt = STMT_SHOW_STATUS; } + | TOK_META { pParser->m_pStmt->m_eStmt = STMT_SHOW_META; } + ; + +////////////////////////////////////////////////////////////////////////// + +set_value: + TOK_IDENT + | TOK_NULL + | TOK_QUOTED_STRING + | TOK_CONST_INT + | TOK_CONST_FLOAT + ; + +set_clause: + TOK_SET TOK_IDENT '=' boolean_value + { + pParser->SetStatement ( $2, SET_LOCAL ); + pParser->m_pStmt->m_iSetValue = $4.m_iValue; + } + | TOK_SET TOK_IDENT '=' set_string_value + { + pParser->SetStatement ( $2, SET_LOCAL ); + pParser->m_pStmt->m_sSetValue = $4.m_sValue; + } + | TOK_SET TOK_IDENT '=' TOK_NULL + { + pParser->SetStatement ( $2, SET_LOCAL ); + pParser->m_pStmt->m_bSetNull = true; + } + | TOK_SET TOK_NAMES set_value { pParser->m_pStmt->m_eStmt = STMT_DUMMY; } + | TOK_SET TOK_SYSVAR '=' set_value { pParser->m_pStmt->m_eStmt = STMT_DUMMY; } + ; + +set_global_clause: + TOK_SET TOK_GLOBAL TOK_USERVAR '=' '(' const_list ')' + { + pParser->SetStatement ( $3, SET_GLOBAL_UVAR ); + pParser->m_pStmt->m_dSetValues = *$6.m_pValues.Ptr(); + } + | TOK_SET TOK_GLOBAL TOK_IDENT '=' set_string_value + { + pParser->SetStatement ( $3, SET_GLOBAL_SVAR ); + pParser->m_pStmt->m_sSetValue = $5.m_sValue; + } + ; + +set_string_value: + TOK_IDENT + | TOK_QUOTED_STRING + ; + +boolean_value: + TOK_TRUE { $$.m_iValue = 1; } + | TOK_FALSE { $$.m_iValue = 0; } + | const_int + { + $$.m_iValue = $1.m_iValue; + if ( $$.m_iValue!=0 && $$.m_iValue!=1 ) + { + yyerror ( pParser, "only 0 and 1 could be used as boolean values" ); + YYERROR; + } + } + ; + +////////////////////////////////////////////////////////////////////////// + +transact_op: + TOK_COMMIT { pParser->m_pStmt->m_eStmt = STMT_COMMIT; } + | TOK_ROLLBACK { pParser->m_pStmt->m_eStmt = STMT_ROLLBACK; } + | start_transaction { pParser->m_pStmt->m_eStmt = STMT_BEGIN; } + ; + +start_transaction: + TOK_BEGIN + | TOK_START TOK_TRANSACTION + ; + +////////////////////////////////////////////////////////////////////////// + +insert_into: + insert_or_replace TOK_INTO TOK_IDENT opt_column_list TOK_VALUES insert_rows_list + { + // everything else is pushed directly into parser within the rules + pParser->m_pStmt->m_sIndex = $3.m_sValue; + } + ; + +insert_or_replace: + TOK_INSERT { pParser->m_pStmt->m_eStmt = STMT_INSERT; } + | TOK_REPLACE { pParser->m_pStmt->m_eStmt = STMT_REPLACE; } + ; + +opt_column_list: + // empty + | '(' column_list ')' + ; + +column_list: + expr_ident { if ( !pParser->AddSchemaItem ( &$1 ) ) { yyerror ( pParser, "unknown field" ); YYERROR; } } + | column_list ',' expr_ident { if ( !pParser->AddSchemaItem ( &$3 ) ) { yyerror ( pParser, "unknown field" ); YYERROR; } } + ; + +insert_rows_list: + insert_row + | insert_rows_list ',' insert_row + ; + +insert_row: + '(' insert_vals_list ')' { if ( !pParser->m_pStmt->CheckInsertIntegrity() ) { yyerror ( pParser, "wrong number of values here" ); YYERROR; } } + ; + +insert_vals_list: + insert_val { AddInsval ( pParser->m_pStmt->m_dInsertValues, $1 ); } + | insert_vals_list ',' insert_val { AddInsval ( pParser->m_pStmt->m_dInsertValues, $3 ); } + ; + +insert_val: + const_int { $$.m_iInstype = TOK_CONST_INT; $$.m_iValue = $1.m_iValue; } + | const_float { $$.m_iInstype = TOK_CONST_FLOAT; $$.m_fValue = $1.m_fValue; } + | TOK_QUOTED_STRING { $$.m_iInstype = TOK_QUOTED_STRING; $$.m_sValue = $1.m_sValue; } + | '(' const_list ')' { $$.m_iInstype = TOK_CONST_MVA; $$.m_iValue = $2.m_pValues->GetLength(); $$.m_pValues = $2.m_pValues; } + ; + +////////////////////////////////////////////////////////////////////////// + +delete_from: + TOK_DELETE TOK_FROM TOK_IDENT TOK_WHERE TOK_ID '=' const_int + { + pParser->m_pStmt->m_eStmt = STMT_DELETE; + pParser->m_pStmt->m_sIndex = $3.m_sValue; + pParser->m_pStmt->m_dDeleteIds.Add ( $7.m_iValue ); + } + | TOK_DELETE TOK_FROM TOK_IDENT TOK_WHERE TOK_ID TOK_IN '(' const_list ')' + { + pParser->m_pStmt->m_eStmt = STMT_DELETE; + pParser->m_pStmt->m_sIndex = $3.m_sValue; + for ( int i=0; i<$8.m_pValues.Ptr()->GetLength(); i++ ) + pParser->m_pStmt->m_dDeleteIds.Add ( (*$8.m_pValues.Ptr())[i] ); + } + ; + +////////////////////////////////////////////////////////////////////////// + +call_proc: + TOK_CALL TOK_IDENT '(' insert_vals_list opt_call_opts_list ')' + { + pParser->m_pStmt->m_eStmt = STMT_CALL; + pParser->m_pStmt->m_sCallProc = $2.m_sValue; + } + ; + +opt_call_opts_list: + // empty + | ',' call_opts_list + ; + +call_opts_list: + call_opt + { + assert ( pParser->m_pStmt->m_dCallOptNames.GetLength()==1 ); + assert ( pParser->m_pStmt->m_dCallOptValues.GetLength()==1 ); + } + | call_opts_list ',' call_opt + ; + +call_opt: + insert_val opt_as call_opt_name + { + pParser->m_pStmt->m_dCallOptNames.Add ( $3.m_sValue ); + AddInsval ( pParser->m_pStmt->m_dCallOptValues, $1 ); + } + ; + +opt_as: + // empty + | TOK_AS + ; + +call_opt_name: + TOK_IDENT + | TOK_LIMIT { $$.m_sValue = "limit"; } + ; + +////////////////////////////////////////////////////////////////////////// + +describe: + describe_tok TOK_IDENT + { + pParser->m_pStmt->m_eStmt = STMT_DESC; + pParser->m_pStmt->m_sIndex = $2.m_sValue; + } + ; + +describe_tok: + TOK_DESCRIBE + | TOK_DESC + ; + +////////////////////////////////////////////////////////////////////////// + +show_tables: + TOK_SHOW TOK_TABLES { pParser->m_pStmt->m_eStmt = STMT_SHOW_TABLES; } + ; + +////////////////////////////////////////////////////////////////////////// + +update: + TOK_UPDATE TOK_IDENT TOK_SET update_items_list TOK_WHERE TOK_ID '=' const_int + { + SqlStmt_t & tStmt = *pParser->m_pStmt; + tStmt.m_eStmt = STMT_UPDATE; + tStmt.m_sIndex = $2.m_sValue; + tStmt.m_tUpdate.m_dDocids.Add ( (SphDocID_t) $8.m_iValue ); + tStmt.m_tUpdate.m_dRowOffset.Add ( 0 ); + } + ; + +update_items_list: + update_item + | update_items_list ',' update_item + ; + +update_item: + TOK_IDENT '=' const_int + { + CSphAttrUpdate & tUpd = pParser->m_pStmt->m_tUpdate; + CSphColumnInfo & tAttr = tUpd.m_dAttrs.Add(); + tAttr.m_sName = $1.m_sValue; + tAttr.m_sName.ToLower(); + tAttr.m_eAttrType = SPH_ATTR_INTEGER; // sorry, ints only for now, riding on legacy shit! + tUpd.m_dPool.Add ( (DWORD) $3.m_iValue ); + } + | TOK_IDENT '=' '(' const_list ')' + { + CSphAttrUpdate & tUpd = pParser->m_pStmt->m_tUpdate; + CSphColumnInfo & tAttr = tUpd.m_dAttrs.Add(); + tAttr.m_sName = $1.m_sValue; + tAttr.m_sName.ToLower(); + assert ( $4.m_pValues.Ptr() && $4.m_pValues->GetLength()>0 ); + $4.m_pValues->Uniq(); // don't need dupes within MVA + tUpd.m_dPool.Add ( $4.m_pValues->GetLength()*2 ); + tAttr.m_eAttrType = SPH_ATTR_UINT32SET; + SphAttr_t * pVal = $4.m_pValues.Ptr()->Begin(); + SphAttr_t * pValMax = pVal + $4.m_pValues->GetLength(); + for ( ;pValUINT_MAX ) + { + tAttr.m_eAttrType = SPH_ATTR_UINT64SET; + } + tUpd.m_dPool.Add ( (DWORD)uVal ); + tUpd.m_dPool.Add ( (DWORD)( uVal>>32 ) ); + } + } + | TOK_IDENT '=' '(' ')' // special case () means delete mva + { + CSphAttrUpdate & tUpd = pParser->m_pStmt->m_tUpdate; + CSphColumnInfo & tAttr = tUpd.m_dAttrs.Add(); + tAttr.m_sName = $1.m_sValue; + tAttr.m_sName.ToLower(); + tAttr.m_eAttrType = SPH_ATTR_UINT32SET; + tUpd.m_dPool.Add ( 0 ); + } + ; + +////////////////////////////////////////////////////////////////////////// + +show_variables: + TOK_SHOW opt_session TOK_VARIABLES { pParser->m_pStmt->m_eStmt = STMT_DUMMY; } + ; + +opt_session: + | TOK_SESSION + ; + +show_collation: + TOK_SHOW TOK_COLLATION { pParser->m_pStmt->m_eStmt = STMT_DUMMY; } + ; + +////////////////////////////////////////////////////////////////////////// + +create_function: + TOK_CREATE TOK_FUNCTION TOK_IDENT TOK_RETURNS udf_type TOK_SONAME TOK_QUOTED_STRING + { + SqlStmt_t & tStmt = *pParser->m_pStmt; + tStmt.m_eStmt = STMT_CREATE_FUNC; + tStmt.m_sUdfName = $3.m_sValue; + tStmt.m_sUdfLib = $7.m_sValue; + tStmt.m_eUdfType = (ESphAttr) $5; + } + ; + +udf_type: + TOK_INT { $$ = SPH_ATTR_INTEGER; } + | TOK_FLOAT { $$ = SPH_ATTR_FLOAT; } + ; + +drop_function: + TOK_DROP TOK_FUNCTION TOK_IDENT + { + SqlStmt_t & tStmt = *pParser->m_pStmt; + tStmt.m_eStmt = STMT_DROP_FUNC; + tStmt.m_sUdfName = $3.m_sValue; + } + ; + +%% + +#if USE_WINDOWS +#pragma warning(pop) +#endif diff --git a/coreseek/csft-4.1/src/sphinxquery.cpp b/coreseek/csft-4.1/src/sphinxquery.cpp new file mode 100755 index 0000000..3e8c77d --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxquery.cpp @@ -0,0 +1,1739 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxquery.h" +#include "sphinxutils.h" +#include + +////////////////////////////////////////////////////////////////////////// +// EXTENDED PARSER RELOADED +////////////////////////////////////////////////////////////////////////// + +#include "yysphinxquery.h" + +////////////////////////////////////////////////////////////////////////// + +class XQParser_t +{ +public: + XQParser_t (); + ~XQParser_t () {} + +public: + bool Parse ( XQQuery_t & tQuery, const char * sQuery, const ISphTokenizer * pTokenizer, const CSphSchema * pSchema, CSphDict * pDict, int iStopwordStep ); + + bool Error ( const char * sTemplate, ... ) __attribute__ ( ( format ( printf, 2, 3 ) ) ); + void Warning ( const char * sTemplate, ... ) __attribute__ ( ( format ( printf, 2, 3 ) ) ); + + bool AddField ( CSphSmallBitvec & dFields, const char * szField, int iLen ); + bool ParseFields ( CSphSmallBitvec & uFields, int & iMaxFieldPos ); + int ParseZone ( const char * pZone ); + + bool IsSpecial ( char c ); + int GetToken ( YYSTYPE * lvalp ); + + void AddQuery ( XQNode_t * pNode ); + XQNode_t * AddKeyword ( const char * sKeyword, DWORD uStar = STAR_NONE ); + XQNode_t * AddKeyword ( XQNode_t * pLeft, XQNode_t * pRight ); + XQNode_t * AddOp ( XQOperator_e eOp, XQNode_t * pLeft, XQNode_t * pRight, int iOpArg=0 ); + + void Cleanup (); + XQNode_t * SweepNulls ( XQNode_t * pNode ); + bool FixupNots ( XQNode_t * pNode ); + +public: + const CSphVector & GetZoneVec ( int iZoneVec ) const + { + return m_dZoneVecs[iZoneVec]; + } + +public: + XQQuery_t * m_pParsed; + + BYTE * m_sQuery; + int m_iQueryLen; + const char * m_pLastTokenStart; + + const CSphSchema * m_pSchema; + ISphTokenizer * m_pTokenizer; + CSphDict * m_pDict; + + const char * m_pCur; + + CSphVector m_dSpawned; + XQNode_t * m_pRoot; + + bool m_bStopOnInvalid; + int m_iAtomPos; + + int m_iPendingNulls; + int m_iPendingType; + YYSTYPE m_tPendingToken; + bool m_bWasBlended; + + bool m_bEmpty; + + bool m_bQuoted; + + bool m_bEmptyStopword; + + CSphVector m_dIntTokens; + + CSphVector < CSphVector > m_dZoneVecs; +}; + +////////////////////////////////////////////////////////////////////////// + +int yylex ( YYSTYPE * lvalp, XQParser_t * pParser ) +{ + return pParser->GetToken ( lvalp ); +} + +void yyerror ( XQParser_t * pParser, const char * sMessage ) +{ + if ( pParser->m_pParsed->m_sParseError.IsEmpty() ) + pParser->m_pParsed->m_sParseError.SetSprintf ( "%s near '%s'", sMessage, pParser->m_pLastTokenStart ); +} + +#include "yysphinxquery.c" + +////////////////////////////////////////////////////////////////////////// + +void XQNode_t::SetFieldSpec ( const CSphSmallBitvec& uMask, int iMaxPos ) +{ + // set it, if we do not yet have one + if ( !m_bFieldSpec ) + { + m_bFieldSpec = true; + m_dFieldMask = uMask; + m_iFieldMaxPos = iMaxPos; + } + + // some of the children might not yet have a spec, even if the node itself has + // eg. 'hello @title world' (whole node has '@title' spec but 'hello' node does not have any!) + ARRAY_FOREACH ( i, m_dChildren ) + m_dChildren[i]->SetFieldSpec ( uMask, iMaxPos ); +} + +void XQNode_t::SetZoneSpec ( const CSphVector & dZones ) +{ + // set it, if we do not yet have one + if ( !m_dZones.GetLength() ) + m_dZones = dZones; + + // some of the children might not yet have a spec, even if the node itself has + ARRAY_FOREACH ( i, m_dChildren ) + m_dChildren[i]->SetZoneSpec ( dZones ); +} + +void XQNode_t::CopySpecs ( const XQNode_t * pSpecs ) +{ + if ( !pSpecs ) + return; + + if ( pSpecs->m_bFieldSpec ) + SetFieldSpec ( pSpecs->m_dFieldMask, pSpecs->m_iFieldMaxPos ); + + if ( pSpecs->m_dZones.GetLength() ) + SetZoneSpec ( pSpecs->m_dZones ); +} + + +void XQNode_t::ClearFieldMask () +{ + m_dFieldMask.Set(); + + ARRAY_FOREACH ( i, m_dChildren ) + m_dChildren[i]->ClearFieldMask(); +} + + +bool XQNode_t::IsEqualTo ( const XQNode_t * pNode ) +{ + if ( !pNode || pNode->GetHash()!=GetHash() || pNode->GetOp()!=GetOp() ) + return false; + + if ( m_dWords.GetLength() ) + { + // two plain nodes. let's compare the keywords + if ( pNode->m_dWords.GetLength()!=m_dWords.GetLength() ) + return false; + + if ( !m_dWords.GetLength() ) + return true; + + SmallStringHash_T hSortedWords; + ARRAY_FOREACH ( i, pNode->m_dWords ) + hSortedWords.Add ( 0, pNode->m_dWords[i].m_sWord ); + + ARRAY_FOREACH ( i, m_dWords ) + if ( !hSortedWords.Exists ( m_dWords[i].m_sWord ) ) + return false; + + return true; + } + + // two non-plain nodes. let's compare the children + if ( pNode->m_dChildren.GetLength()!=m_dChildren.GetLength() ) + return false; + + if ( !m_dChildren.GetLength() ) + return true; + + ARRAY_FOREACH ( i, m_dChildren ) + if ( !pNode->m_dChildren[i]->IsEqualTo ( m_dChildren[i] ) ) + return false; + return true; +} + + +uint64_t XQNode_t::GetHash() const +{ + if ( m_iMagicHash ) + return m_iMagicHash; + + XQOperator_e dZeroOp[2]; + dZeroOp[0] = m_eOp; + dZeroOp[1] = (XQOperator_e) 0; + + ARRAY_FOREACH ( i, m_dWords ) + m_iMagicHash = 100 + ( m_iMagicHash ^ sphFNV64 ( (const BYTE*)m_dWords[i].m_sWord.cstr() ) ); ///< +100 to make it non-transitive + ARRAY_FOREACH ( j, m_dChildren ) + m_iMagicHash = 100 + ( m_iMagicHash ^ m_dChildren[j]->GetHash() ); ///< +100 to make it non-transitive + m_iMagicHash += 1000000; ///< to immerse difference between parents and children + m_iMagicHash ^= sphFNV64 ( (const BYTE*)dZeroOp ); + + return m_iMagicHash; +} + + +void XQNode_t::SetOp ( XQOperator_e eOp, XQNode_t * pArg1, XQNode_t * pArg2 ) +{ + m_eOp = eOp; + m_dChildren.Reset(); + if ( pArg1 ) + m_dChildren.Add ( pArg1 ); + if ( pArg2 ) + m_dChildren.Add ( pArg2 ); +} + +////////////////////////////////////////////////////////////////////////// + +XQParser_t::XQParser_t () + : m_pParsed ( NULL ) + , m_pLastTokenStart ( NULL ) + , m_pRoot ( NULL ) + , m_bStopOnInvalid ( true ) + , m_bWasBlended ( false ) + , m_bQuoted ( false ) + , m_bEmptyStopword ( false ) +{ +} + + +/// cleanup spawned nodes (for bailing out on errors) +void XQParser_t::Cleanup () +{ + m_dSpawned.Uniq(); // FIXME! should eliminate this by testing + + ARRAY_FOREACH ( i, m_dSpawned ) + { + m_dSpawned[i]->m_dChildren.Reset (); + SafeDelete ( m_dSpawned[i] ); + } + m_dSpawned.Reset (); +} + + + +bool XQParser_t::Error ( const char * sTemplate, ... ) +{ + assert ( m_pParsed ); + char sBuf[256]; + + const char * sPrefix = "query error: "; + int iPrefix = strlen(sPrefix); + memcpy ( sBuf, sPrefix, iPrefix ); + + va_list ap; + va_start ( ap, sTemplate ); + vsnprintf ( sBuf+iPrefix, sizeof(sBuf)-iPrefix, sTemplate, ap ); + va_end ( ap ); + + m_pParsed->m_sParseError = sBuf; + return false; +} + + +void XQParser_t::Warning ( const char * sTemplate, ... ) +{ + assert ( m_pParsed ); + char sBuf[256]; + + const char * sPrefix = "query warning: "; + int iPrefix = strlen(sPrefix); + memcpy ( sBuf, sPrefix, iPrefix ); + + va_list ap; + va_start ( ap, sTemplate ); + vsnprintf ( sBuf+iPrefix, sizeof(sBuf)-iPrefix, sTemplate, ap ); + va_end ( ap ); + + m_pParsed->m_sParseWarning = sBuf; +} + + +/// my special chars +bool XQParser_t::IsSpecial ( char c ) +{ + return c=='(' || c==')' || c=='|' || c=='-' || c=='!' || c=='@' || c=='~' || c=='"' || c=='/'; +} + + +/// lookup field and add it into mask +bool XQParser_t::AddField ( CSphSmallBitvec & dFields, const char * szField, int iLen ) +{ + CSphString sField; + sField.SetBinary ( szField, iLen ); + + int iField = m_pSchema->GetFieldIndex ( sField.cstr () ); + if ( iField < 0 ) + { + if ( m_bStopOnInvalid ) + return Error ( "no field '%s' found in schema", sField.cstr () ); + else + Warning ( "no field '%s' found in schema", sField.cstr () ); + } else + { + if ( iField>=SPH_MAX_FIELDS ) + return Error ( " max %d fields allowed", SPH_MAX_FIELDS ); + + dFields.Set(iField); + } + + return true; +} + + +/// parse fields block +bool XQParser_t::ParseFields ( CSphSmallBitvec & dFields, int & iMaxFieldPos ) +{ + dFields.Unset(); + iMaxFieldPos = 0; + + const char * pPtr = m_pTokenizer->GetBufferPtr (); + const char * pLastPtr = m_pTokenizer->GetBufferEnd (); + + if ( pPtr==pLastPtr ) + return true; // silently ignore trailing field operator + + bool bNegate = false; + bool bBlock = false; + + // handle special modifiers + if ( *pPtr=='!' ) + { + // handle @! and @!( + bNegate = true; pPtr++; + if ( *pPtr=='(' ) { bBlock = true; pPtr++; } + + } else if ( *pPtr=='*' ) + { + // handle @* + dFields.Set(); + m_pTokenizer->SetBufferPtr ( pPtr+1 ); + return true; + + } else if ( *pPtr=='(' ) + { + // handle @( + bBlock = true; pPtr++; + } + + // handle invalid chars + if ( !sphIsAlpha(*pPtr) ) + { + m_pTokenizer->SetBufferPtr ( pPtr ); // ignore and re-parse (FIXME! maybe warn?) + return true; + } + assert ( sphIsAlpha(*pPtr) ); // i think i'm paranoid + + // handle field specification + if ( !bBlock ) + { + // handle standalone field specification + const char * pFieldStart = pPtr; + while ( sphIsAlpha(*pPtr) && pPtr0 ); + if ( !AddField ( dFields, pFieldStart, pPtr-pFieldStart ) ) + return false; + + m_pTokenizer->SetBufferPtr ( pPtr ); + if ( bNegate && ( !dFields.TestAll() ) ) + dFields.Negate(); + + } else + { + // handle fields block specification + assert ( sphIsAlpha(*pPtr) && bBlock ); // and complicated + + bool bOK = false; + const char * pFieldStart = NULL; + while ( pPtrSetBufferPtr ( ++pPtr ); + if ( bNegate && ( !dFields.TestAll() ) ) + dFields.Negate(); + + bOK = true; + break; + + } else + { + return Error ( "invalid character '%c' in field block operator", *pPtr ); + } + } + if ( !bOK ) + return Error ( "missing closing ')' in field block operator" ); + } + + // handle optional position range modifier + if ( pPtr[0]=='[' && isdigit ( pPtr[1] ) ) + { + // skip '[' and digits + const char * p = pPtr+1; + while ( *p && isdigit(*p) ) p++; + + // check that the range ends with ']' (FIXME! maybe report an error if it does not?) + if ( *p!=']' ) + return true; + + // fetch my value + iMaxFieldPos = strtoul ( pPtr+1, NULL, 10 ); + m_pTokenizer->SetBufferPtr ( p+1 ); + } + + // well done + return true; +} + + +/// helper find-or-add (make it generic and move to sphinxstd?) +static int GetZoneIndex ( XQQuery_t * pQuery, const CSphString & sZone ) +{ + ARRAY_FOREACH ( i, pQuery->m_dZones ) + if ( pQuery->m_dZones[i]==sZone ) + return i; + + pQuery->m_dZones.Add ( sZone ); + return pQuery->m_dZones.GetLength()-1; +} + + +/// parse zone +int XQParser_t::ParseZone ( const char * pZone ) +{ + const char * p = pZone; + + // case one, just a single zone name + if ( sphIsAlpha ( *pZone ) ) + { + // find zone name + while ( sphIsAlpha(*p) ) + p++; + m_pTokenizer->SetBufferPtr ( p ); + + // extract and lowercase it + CSphString sZone; + sZone.SetBinary ( pZone, p-pZone ); + sZone.ToLower(); + + // register it in zones list + int iZone = GetZoneIndex ( m_pParsed, sZone ); + + // create new 1-zone vector + m_dZoneVecs.Add().Add ( iZone ); + return m_dZoneVecs.GetLength()-1; + } + + // case two, zone block + // it must follow strict (name1,name2,...) syntax + if ( *pZone=='(' ) + { + // create new zone vector + CSphVector & dZones = m_dZoneVecs.Add(); + p = ++pZone; + + // scan names + for ( ;; ) + { + // syntax error, name expected! + if ( !sphIsAlpha(*p) ) + { + Error ( "unexpected character '%c' in zone block operator", *p ); + return -1; + } + + // scan next name + while ( sphIsAlpha(*p) ) + p++; + + // extract and lowercase it + CSphString sZone; + sZone.SetBinary ( pZone, p-pZone ); + sZone.ToLower(); + + // register it in zones list + dZones.Add ( GetZoneIndex ( m_pParsed, sZone ) ); + + // must be either followed by comma, or closing paren + // everything else will cause syntax error + if ( *p==')' ) + { + m_pTokenizer->SetBufferPtr ( p+1 ); + break; + } + + if ( *p==',' ) + pZone = ++p; + } + + return m_dZoneVecs.GetLength()-1; + } + + // unhandled case + Error ( "internal error, unhandled case in ParseZone()" ); + return -1; +} + + +/// a lexer of my own +int XQParser_t::GetToken ( YYSTYPE * lvalp ) +{ + // what, noone's pending for a bending?! + if ( !m_iPendingType ) + for ( ;; ) + { + assert ( m_iPendingNulls==0 ); + + if ( m_bWasBlended ) + m_iAtomPos += m_pTokenizer->SkipBlended(); + + // tricky stuff + // we need to manually check for numbers in certain states (currently, just after proximity or quorum operator) + // required because if 0-9 are not in charset_table, or min_word_len is too high, + // the tokenizer will *not* return the number as a token! + m_pLastTokenStart = m_pTokenizer->GetBufferPtr (); + const char * sEnd = m_pTokenizer->GetBufferEnd (); + + const char * p = m_pLastTokenStart; + while ( psToken && p-sTokenGetToken() && m_pTokenizer->TokenIsBlended() ) // number with blended should be tokenized as usual + { + m_pTokenizer->SkipBlended(); + m_pTokenizer->SetBufferPtr ( m_pLastTokenStart ); + } else + { + // got not a very long number followed by a whitespace or special, handle it + char sNumberBuf[NUMBER_BUF_LEN]; + + int iNumberLen = Min ( (int)sizeof(sNumberBuf)-1, int(p-sToken) ); + memcpy ( sNumberBuf, sToken, iNumberLen ); + sNumberBuf[iNumberLen] = '\0'; + m_tPendingToken.tInt.iValue = atoi ( sNumberBuf ); + + // check if it can be used as a keyword too + m_pTokenizer->SetBuffer ( (BYTE*)sNumberBuf, iNumberLen ); + sToken = (const char*) m_pTokenizer->GetToken(); + m_pTokenizer->SetBuffer ( m_sQuery, m_iQueryLen ); + m_pTokenizer->SetBufferPtr ( p ); + + m_tPendingToken.tInt.iStrIndex = -1; + if ( sToken ) + { + m_dIntTokens.Add ( sToken ); + if ( m_pDict->GetWordID ( (BYTE*)sToken ) ) + m_tPendingToken.tInt.iStrIndex = m_dIntTokens.GetLength()-1; + else + m_dIntTokens.Pop(); + m_iAtomPos++; + } + + m_iPendingNulls = 0; + m_iPendingType = TOK_INT; + break; + } + } + + // not a number, long number, or number not followed by a whitespace, so fallback to regular tokenizing + sToken = (const char *) m_pTokenizer->GetToken (); + if ( !sToken ) + { + m_iPendingNulls = m_pTokenizer->GetOvershortCount (); + if ( !m_iPendingNulls ) + return 0; + m_iPendingNulls = 0; + lvalp->pNode = AddKeyword ( NULL ); + return TOK_KEYWORD; + } + + // now let's do some token post-processing + m_bWasBlended = m_pTokenizer->TokenIsBlended(); + m_bEmpty = false; + + m_iPendingNulls = m_pTokenizer->GetOvershortCount (); + m_iAtomPos += 1+m_iPendingNulls; + + // handle NEAR (must be case-sensitive, and immediately followed by slash and int) + if ( sToken && p && !m_pTokenizer->m_bPhrase && strncmp ( p, "NEAR/", 5 )==0 && isdigit(p[5]) ) + { + // extract that int + int iVal = 0; + for ( p=p+5; isdigit(*p); p++ ) + iVal = iVal*10 + (*p) - '0'; // FIXME! check for overflow? + m_pTokenizer->SetBufferPtr ( p ); + + // we just lexed our next token + m_iPendingType = TOK_NEAR; + m_tPendingToken.tInt.iValue = iVal; + m_tPendingToken.tInt.iStrIndex = -1; + m_iAtomPos -= 1; // skip NEAR + break; + } + + // handle SENTENCE + if ( sToken && p && !m_pTokenizer->m_bPhrase && !strcasecmp ( sToken, "sentence" ) && !strncmp ( p, "SENTENCE", 8 ) ) + { + // we just lexed our next token + m_iPendingType = TOK_SENTENCE; + m_iAtomPos -= 1; + break; + } + + // handle PARAGRAPH + if ( sToken && p && !m_pTokenizer->m_bPhrase && !strcasecmp ( sToken, "paragraph" ) && !strncmp ( p, "PARAGRAPH", 9 ) ) + { + // we just lexed our next token + m_iPendingType = TOK_PARAGRAPH; + m_iAtomPos -= 1; + break; + } + + // handle ZONE + if ( sToken && p && !m_pTokenizer->m_bPhrase && !strncmp ( p, "ZONE:", 5 ) + && ( sphIsAlpha(p[5]) || p[5]=='(' ) ) + { + // ParseZone() will update tokenizer buffer ptr as needed + int iVec = ParseZone ( p+5 ); + if ( iVec<0 ) + return -1; + + // we just lexed our next token + m_iPendingType = TOK_ZONE; + m_tPendingToken.iZoneVec = iVec; + m_iAtomPos -= 1; + break; + } + + // handle specials + if ( m_pTokenizer->WasTokenSpecial() ) + { + // specials must not affect pos + m_iAtomPos--; + + // some specials are especially special + if ( sToken[0]=='@' ) + { + // parse fields operator + if ( !ParseFields ( m_tPendingToken.tFieldLimit.dMask, m_tPendingToken.tFieldLimit.iMaxPos ) ) + return -1; + + if ( m_pSchema->m_dFields.GetLength()!=SPH_MAX_FIELDS ) + m_tPendingToken.tFieldLimit.dMask.LimitBits ( m_pSchema->m_dFields.GetLength() ); + + m_iPendingType = TOK_FIELDLIMIT; + break; + + } else if ( sToken[0]=='<' ) + { + if ( *m_pTokenizer->GetBufferPtr()=='<' ) + { + // got "<<", aka operator BEFORE + m_iPendingType = TOK_BEFORE; + break; + } else + { + // got stray '<', ignore + continue; + } + } else + { + // all the other specials are passed to parser verbatim + if ( sToken[0]=='"' ) + m_bQuoted = !m_bQuoted; + m_iPendingType = sToken[0]=='!' ? '-' : sToken[0]; + m_pTokenizer->m_bPhrase = m_bQuoted; + break; + } + } + + // check for stopword, and create that node + // temp buffer is required, because GetWordID() might expand (!) the keyword in-place + const int MAX_BYTES = 3*SPH_MAX_WORD_LEN + 16; + BYTE sTmp [ MAX_BYTES ]; + + strncpy ( (char*)sTmp, sToken, MAX_BYTES ); + sTmp[MAX_BYTES-1] = '\0'; + + if ( !m_pDict->GetWordID ( sTmp ) ) + { + sToken = NULL; + // stopwords with step=0 must not affect pos + if ( m_bEmptyStopword ) + m_iAtomPos--; + } + + // information about stars is lost after this point, so was have to save it now + DWORD uStarPosition = STAR_NONE; + uStarPosition |= *m_pTokenizer->GetTokenEnd()=='*' ? STAR_BACK : 0; + uStarPosition |= ( m_pTokenizer->GetTokenStart()!=m_pTokenizer->GetBufferPtr() ) && + m_pTokenizer->GetTokenStart()[-1]=='*' ? STAR_FRONT : 0; + + m_tPendingToken.pNode = AddKeyword ( sToken, uStarPosition ); + m_iPendingType = TOK_KEYWORD; + + if ( m_pTokenizer->TokenIsBlended() ) + m_iAtomPos--; + break; + } + + // someone must be pending now! + assert ( m_iPendingType ); + m_bEmpty = false; + + // ladies first, though + if ( m_iPendingNulls>0 ) + { + m_iPendingNulls--; + lvalp->pNode = AddKeyword ( NULL ); + return TOK_KEYWORD; + } + + // pending the offending + int iRes = m_iPendingType; + m_iPendingType = 0; + + *lvalp = m_tPendingToken; + return iRes; +} + + +void XQParser_t::AddQuery ( XQNode_t * pNode ) +{ + m_pRoot = pNode; +} + + +XQNode_t * XQParser_t::AddKeyword ( const char * sKeyword, DWORD uStarPosition ) +{ + XQKeyword_t tAW ( sKeyword, m_iAtomPos ); + tAW.m_uStarPosition = uStarPosition; + + XQNode_t * pNode = new XQNode_t(); + pNode->m_dWords.Add ( tAW ); + + m_dSpawned.Add ( pNode ); + return pNode; +} + + +XQNode_t * XQParser_t::AddKeyword ( XQNode_t * pLeft, XQNode_t * pRight ) +{ + if ( !pLeft || !pRight ) + return pLeft ? pLeft : pRight; + + assert ( pLeft->m_dWords.GetLength()>0 ); + assert ( pRight->m_dWords.GetLength()==1 ); + + pLeft->m_dWords.Add ( pRight->m_dWords[0] ); + m_dSpawned.RemoveValue ( pRight ); + SafeDelete ( pRight ); + return pLeft; +} + + +XQNode_t * XQParser_t::AddOp ( XQOperator_e eOp, XQNode_t * pLeft, XQNode_t * pRight, int iOpArg ) +{ + ///////// + // unary + ///////// + + if ( eOp==SPH_QUERY_NOT ) + { + XQNode_t * pNode = new XQNode_t(); + pNode->SetOp ( SPH_QUERY_NOT, pLeft ); + m_dSpawned.Add ( pNode ); + return pNode; + } + + ////////// + // binary + ////////// + + if ( !pLeft || !pRight ) + return pLeft ? pLeft : pRight; + + // left spec always tries to infect the nodes to the right, only brackets can stop it + // eg. '@title hello' vs 'world' + pRight->CopySpecs ( pLeft ); + + // build a new node + XQNode_t * pResult = NULL; + if ( pLeft->m_dChildren.GetLength() && pLeft->GetOp()==eOp && pLeft->m_iOpArg==iOpArg ) + { + pLeft->m_dChildren.Add ( pRight ); + pResult = pLeft; + } else + { + XQNode_t * pNode = new XQNode_t(); + pNode->SetOp ( eOp, pLeft, pRight ); + pNode->m_iOpArg = iOpArg; + m_dSpawned.Add ( pNode ); + pResult = pNode; + } + + // however, it's right (!) spec which is chosen for the resulting node, + // eg. '@title hello' + 'world @body program' + if ( pRight->m_bFieldSpec ) + { + pResult->m_bFieldSpec = true; + pResult->m_dFieldMask = pRight->m_dFieldMask; + pResult->m_iFieldMaxPos = pRight->m_iFieldMaxPos; + } + + return pResult; +} + + +XQNode_t * XQParser_t::SweepNulls ( XQNode_t * pNode ) +{ + if ( !pNode ) + return NULL; + + // sweep plain node + if ( pNode->m_dWords.GetLength() ) + { + ARRAY_FOREACH ( i, pNode->m_dWords ) + if ( pNode->m_dWords[i].m_sWord.cstr()==NULL ) + pNode->m_dWords.Remove ( i-- ); + + if ( pNode->m_dWords.GetLength()==0 ) + { + m_dSpawned.RemoveValue ( pNode ); // OPTIMIZE! + SafeDelete ( pNode ); + return NULL; + } + + return pNode; + } + + // sweep op node + ARRAY_FOREACH ( i, pNode->m_dChildren ) + { + pNode->m_dChildren[i] = SweepNulls ( pNode->m_dChildren[i] ); + if ( pNode->m_dChildren[i]==NULL ) + pNode->m_dChildren.Remove ( i-- ); + } + + if ( pNode->m_dChildren.GetLength()==0 ) + { + m_dSpawned.RemoveValue ( pNode ); // OPTIMIZE! + SafeDelete ( pNode ); + return NULL; + } + + // remove redundancies if needed + if ( pNode->GetOp()!=SPH_QUERY_NOT && pNode->m_dChildren.GetLength()==1 ) + { + XQNode_t * pRet = pNode->m_dChildren[0]; + pNode->m_dChildren.Reset (); + + m_dSpawned.RemoveValue ( pNode ); // OPTIMIZE! + SafeDelete ( pNode ); + return pRet; + } + + // done + return pNode; +} + + +bool XQParser_t::FixupNots ( XQNode_t * pNode ) +{ + // no processing for plain nodes + if ( !pNode || pNode->m_dWords.GetLength() ) + return true; + + // process 'em children + ARRAY_FOREACH ( i, pNode->m_dChildren ) + if ( !FixupNots ( pNode->m_dChildren[i] ) ) + return false; + + // extract NOT subnodes + CSphVector dNots; + ARRAY_FOREACH ( i, pNode->m_dChildren ) + if ( pNode->m_dChildren[i]->GetOp()==SPH_QUERY_NOT ) + { + dNots.Add ( pNode->m_dChildren[i] ); + pNode->m_dChildren.RemoveFast ( i-- ); + } + + // no NOTs? we're square + if ( !dNots.GetLength() ) + return true; + + // nothing but NOTs? we can't compute that + if ( !pNode->m_dChildren.GetLength() ) + { + m_pParsed->m_sParseError.SetSprintf ( "query is non-computable (node consists of NOT operators only)" ); + return false; + } + + // NOT within OR? we can't compute that + if ( pNode->GetOp()==SPH_QUERY_OR ) + { + m_pParsed->m_sParseError.SetSprintf ( "query is non-computable (NOT is not allowed within OR)" ); + return false; + } + + // NOT used in before operator + if ( pNode->GetOp()==SPH_QUERY_BEFORE ) + { + m_pParsed->m_sParseError.SetSprintf ( "query is non-computable (NOT cannot be used as before operand)" ); + return false; + } + + // must be some NOTs within AND at this point, convert this node to ANDNOT + assert ( pNode->GetOp()==SPH_QUERY_AND && pNode->m_dChildren.GetLength() && dNots.GetLength() ); + + XQNode_t * pAnd = new XQNode_t(); + pAnd->SetOp ( SPH_QUERY_AND, pNode->m_dChildren ); + m_dSpawned.Add ( pAnd ); + + XQNode_t * pNot = NULL; + if ( dNots.GetLength()==1 ) + { + pNot = dNots[0]; + } else + { + pNot = new XQNode_t(); + pNot->SetOp ( SPH_QUERY_OR, dNots ); + m_dSpawned.Add ( pNot ); + } + + pNode->SetOp ( SPH_QUERY_ANDNOT, pAnd, pNot ); + return true; +} + + +static void DeleteNodesWOFields ( XQNode_t * pNode ) +{ + if ( !pNode ) + return; + + for ( int i = 0; i < pNode->m_dChildren.GetLength (); ) + { + if ( pNode->m_dChildren[i]->m_dFieldMask.TestAll() ) + { + // this should be a leaf node + assert ( pNode->m_dChildren[i]->m_dChildren.GetLength()==0 ); + SafeDelete ( pNode->m_dChildren[i] ); + pNode->m_dChildren.RemoveFast ( i ); + + } else + { + DeleteNodesWOFields ( pNode->m_dChildren[i] ); + i++; + } + } +} + + +static bool CheckQuorum ( XQNode_t * pNode, CSphString * pError ) +{ + assert ( pError ); + if ( !pNode ) + return true; + + if ( pNode->GetOp()==SPH_QUERY_QUORUM && pNode->m_iOpArg<=0 ) + { + pError->SetSprintf ( "quorum threshold too low (%d)", pNode->m_iOpArg ); + return false; + } + + bool bValid = true; + ARRAY_FOREACH_COND ( i, pNode->m_dChildren, bValid ) + { + bValid &= CheckQuorum ( pNode->m_dChildren[i], pError ); + } + + return bValid; +} + + +static void FixupDegenerates ( XQNode_t * pNode ) +{ + if ( !pNode ) + return; + + if ( pNode->m_dWords.GetLength()==1 && ( pNode->GetOp()==SPH_QUERY_PHRASE || pNode->GetOp()==SPH_QUERY_PROXIMITY || pNode->GetOp()==SPH_QUERY_QUORUM ) ) + { + pNode->SetOp ( SPH_QUERY_AND ); + return; + } + + ARRAY_FOREACH ( i, pNode->m_dChildren ) + FixupDegenerates ( pNode->m_dChildren[i] ); +} + + +bool XQParser_t::Parse ( XQQuery_t & tParsed, const char * sQuery, const ISphTokenizer * pTokenizer, const CSphSchema * pSchema, CSphDict * pDict, int iStopwordStep ) +{ + CSphScopedPtr pMyTokenizer ( pTokenizer->Clone ( true ) ); + pMyTokenizer->AddSpecials ( "()|-!@~\"/^$<" ); + pMyTokenizer->EnableQueryParserMode ( true ); + + // most outcomes are errors + SafeDelete ( tParsed.m_pRoot ); + + // check for relaxed syntax + const char * OPTION_RELAXED = "@@relaxed"; + const int OPTION_RELAXED_LEN = strlen ( OPTION_RELAXED ); + + m_bStopOnInvalid = true; + if ( strncmp ( sQuery, OPTION_RELAXED, OPTION_RELAXED_LEN )==0 && !sphIsAlpha ( sQuery[OPTION_RELAXED_LEN] ) ) + { + sQuery += OPTION_RELAXED_LEN; + m_bStopOnInvalid = false; + } + + // setup parser + m_pParsed = &tParsed; + m_sQuery = (BYTE*) sQuery; + m_iQueryLen = strlen(sQuery); + m_pTokenizer = pMyTokenizer.Ptr(); + m_pSchema = pSchema; + m_pDict = pDict; + m_pCur = sQuery; + m_iAtomPos = 0; + m_iPendingNulls = 0; + m_iPendingType = 0; + m_pRoot = NULL; + m_bEmpty = true; + m_bEmptyStopword = ( iStopwordStep==0 ); + + m_pTokenizer->SetBuffer ( m_sQuery, m_iQueryLen ); + int iRes = yyparse ( this ); + + if ( ( iRes || !m_pParsed->m_sParseError.IsEmpty() ) && !m_bEmpty ) + { + Cleanup (); + return false; + } + + DeleteNodesWOFields ( m_pRoot ); + m_pRoot = SweepNulls ( m_pRoot ); + FixupDegenerates ( m_pRoot ); + + if ( !FixupNots ( m_pRoot ) ) + { + Cleanup (); + return false; + } + + if ( !CheckQuorum ( m_pRoot, &m_pParsed->m_sParseError ) ) + { + Cleanup(); + return false; + } + + if ( m_pRoot && m_pRoot->GetOp()==SPH_QUERY_NOT ) + { + Cleanup (); + m_pParsed->m_sParseError.SetSprintf ( "query is non-computable (single NOT operator)" ); + return false; + } + + // all ok; might want to create a dummy node to indicate that + m_dSpawned.Reset(); + tParsed.m_pRoot = m_pRoot ? m_pRoot : new XQNode_t (); + return true; +} + +////////////////////////////////////////////////////////////////////////// + +#define XQDEBUG 0 + +#if XQDEBUG +static void xqIndent ( int iIndent ) +{ + iIndent *= 2; + while ( iIndent-- ) + printf ( " " ); +} + + +static void xqDump ( XQNode_t * pNode, const CSphSchema & tSch, int iIndent ) +{ + if ( pNode->m_dChildren.GetLength() ) + { + xqIndent ( iIndent ); + switch ( pNode->GetOp() ) + { + case SPH_QUERY_AND: printf ( "AND:\n" ); break; + case SPH_QUERY_OR: printf ( "OR:\n" ); break; + case SPH_QUERY_NOT: printf ( "NOT:\n" ); break; + case SPH_QUERY_ANDNOT: printf ( "ANDNOT:\n" ); break; + case SPH_QUERY_BEFORE: printf ( "BEFORE:\n" ); break; + default: printf ( "unknown-op-%d:\n", pNode->GetOp() ); break; + } + ARRAY_FOREACH ( i, pNode->m_dChildren ) + xqDump ( pNode->m_dChildren[i], tSch, iIndent+1 ); + } else + { + xqIndent ( iIndent ); + printf ( "MATCH(%d,%d):", pNode->m_uFieldMask, pNode->m_iOpArg ); + + ARRAY_FOREACH ( i, pNode->m_dWords ) + { + const XQKeyword_t & tWord = pNode->m_dWords[i]; + + const char * sLocTag = ""; + if ( tWord.m_bFieldStart ) sLocTag = ", start"; + if ( tWord.m_bFieldEnd ) sLocTag = ", end"; + + printf ( " %s (qpos %d%s)", tWord.m_sWord.cstr(), tWord.m_iAtomPos, sLocTag ); + } + printf ( "\n" ); + } +} +#endif + + +bool sphParseExtendedQuery ( XQQuery_t & tParsed, const char * sQuery, const ISphTokenizer * pTokenizer, const CSphSchema * pSchema, CSphDict * pDict, int iStopwordStep ) +{ + XQParser_t qp; + bool bRes = qp.Parse ( tParsed, sQuery, pTokenizer, pSchema, pDict, iStopwordStep ); + +#ifndef NDEBUG + if ( bRes && tParsed.m_pRoot ) + tParsed.m_pRoot->Check ( true ); +#endif + +#if XQDEBUG + if ( bRes ) + { + printf ( "--- query ---\n" ); + xqDump ( tParsed.m_pRoot, *pSchema, 0 ); + printf ( "---\n" ); + } +#endif + + return bRes; +} + +////////////////////////////////////////////////////////////////////////// +// COMMON SUBTREES DETECTION +////////////////////////////////////////////////////////////////////////// + +/// Decides if given pTree is appropriate for caching or not. Currently we don't cache +/// the end values (leafs). +static bool IsAppropriate ( XQNode_t * pTree ) +{ + if ( !pTree ) return false; + + // skip nodes that actually are leaves (eg. "AND smth" node instead of merely "smth") + return !( pTree->m_dWords.GetLength()==1 && pTree->GetOp()!=SPH_QUERY_NOT ); +} + +typedef CSphOrderedHash < DWORD, uint64_t, IdentityHash_fn, 128, 117 > CDwordHash; + +// stores the pair of a tree, and the bitmask of common nodes +// which contains the tree. +class BitMask_t +{ + XQNode_t * m_pTree; + uint64_t m_uMask; + +public: + BitMask_t () + : m_pTree ( NULL ) + , m_uMask ( 0ull ) + {} + + void Init ( XQNode_t * pTree, uint64_t uMask ) + { + m_pTree = pTree; + m_uMask = uMask; + } + + inline uint64_t GetMask() const { return m_uMask; } + inline XQNode_t * GetTree() const { return m_pTree; } +}; + +// a list of unique values. +class Associations_t : public CDwordHash +{ +public: + + // returns true when add the second member. + // The reason is that only one is not interesting for us, + // but more than two will flood the caller. + bool Associate2nd ( uint64_t uTree ) + { + if ( Exists ( uTree ) ) + return false; + Add ( 0, uTree ); + return GetLength()==2; + } + + // merge with another similar + void Merge ( const Associations_t& parents ) + { + parents.IterateStart(); + while ( parents.IterateNext() ) + Associate2nd ( parents.IterateGetKey() ); + } +}; + +// associate set of nodes, common bitmask for these nodes, +// and gives the < to compare different pairs +class BitAssociation_t +{ +private: + const Associations_t * m_pAssociations; + mutable int m_iBits; + + // The key method of subtree selection. + // Most 'heavy' subtrees will be extracted first. + inline int GetWeight() const + { + assert ( m_pAssociations ); + int iNodes = m_pAssociations->GetLength(); + if ( m_iBits==0 && m_uMask!=0 ) + { + for ( uint64_t dMask = m_uMask; dMask; dMask >>=1 ) + m_iBits += (int)( dMask & 1 ); + } + + // current working formula is num_nodes^2 * num_hits + return iNodes * iNodes * m_iBits; + } + +public: + uint64_t m_uMask; + + BitAssociation_t() + : m_pAssociations ( NULL ) + , m_iBits ( 0 ) + , m_uMask ( 0 ) + {} + + void Init ( uint64_t uMask, const Associations_t* dNodes ) + { + m_uMask = uMask; + m_pAssociations = dNodes; + m_iBits = 0; + } + + bool operator< (const BitAssociation_t& second) const + { + return GetWeight() < second.GetWeight(); + } +}; + +// for pairs of values builds and stores the association "key -> list of values" +class CAssociations_t + : public CSphOrderedHash < Associations_t, uint64_t, IdentityHash_fn, 128, 117 > +{ + int m_iBits; // number of non-unique associations +public: + + CAssociations_t() : m_iBits ( 0 ) {} + + // Add the given pTree into the list of pTrees, associated with given uHash + int Associate ( XQNode_t * pTree, uint64_t uHash ) + { + if ( !Exists ( uHash ) ) + Add ( Associations_t(), uHash ); + if ( operator[]( uHash ).Associate2nd ( pTree->GetHash() ) ) + m_iBits++; + return m_iBits; + } + + // merge the existing association of uHash with given chain + void MergeAssociations ( const Associations_t & chain, uint64_t uHash ) + { + if ( !Exists ( uHash ) ) + Add ( chain, uHash ); + else + operator[]( uHash ).Merge ( chain ); + } + + inline int GetBits() const { return m_iBits; } +}; + +// The main class for working with common subtrees +class RevealCommon_t : ISphNoncopyable +{ +private: + static const int MAX_MULTINODES = 64; + CSphVector m_dBitmasks; // all bitmasks for all the nodes + CSphVector m_dSubQueries; // final vector with roadmap for tree division. + CAssociations_t m_hNodes; // initial accumulator for nodes + CAssociations_t m_hInterSections; // initial accumulator for nodes + CDwordHash m_hBitOrders; // order numbers for found common subnodes + XQOperator_e m_eOp; // my operator which I process + +private: + + // returns the order for given uHash (if any). + inline int GetBitOrder ( uint64_t uHash ) const + { + if ( !m_hBitOrders.Exists ( uHash ) ) + return -1; + return m_hBitOrders[uHash]; + } + + // recursively scans the whole tree and builds the maps + // where a list of parents associated with every "leaf" nodes (i.e. with children) + bool BuildAssociations ( XQNode_t * pTree ) + { + if ( IsAppropriate ( pTree ) ) + { + ARRAY_FOREACH ( i, pTree->m_dChildren ) + if ( ( !BuildAssociations ( pTree->m_dChildren[i] ) ) + || ( ( m_eOp==pTree->GetOp() ) + && ( m_hNodes.Associate ( pTree, pTree->m_dChildren[i]->GetHash() )>=MAX_MULTINODES ) ) ) + { + return false; + } + } + return true; + } + + // Find all leafs, non-unique across the tree, + // and associate the order number with every of them + bool CalcCommonNodes () + { + if ( !m_hNodes.GetBits() ) + return false; // there is totally no non-unique leaves + int iBit = 0; + m_hNodes.IterateStart(); + while ( m_hNodes.IterateNext() ) + if ( m_hNodes.IterateGet().GetLength() > 1 ) + m_hBitOrders.Add ( iBit++, m_hNodes.IterateGetKey() ); + assert ( m_hNodes.GetBits()==m_hBitOrders.GetLength() ); + m_hNodes.Reset(); ///< since from now we don't need this data anymore + return true; + } + + // recursively builds for every node the bitmaks + // of common nodes it has as children + void BuildBitmasks ( XQNode_t * pTree ) + { + if ( !IsAppropriate ( pTree ) ) + return; + + if ( m_eOp==pTree->GetOp() ) + { + // calculate the bitmask + int iOrder; + uint64_t dMask = 0; + ARRAY_FOREACH ( i, pTree->m_dChildren ) + { + iOrder = GetBitOrder ( pTree->m_dChildren[i]->GetHash() ); + if ( iOrder>=0 ) + dMask |= 1ull << iOrder; + } + + // add the bitmask into the array + if ( dMask ) + m_dBitmasks.Add().Init( pTree, dMask ); + } + + // recursively process all the children + ARRAY_FOREACH ( i, pTree->m_dChildren ) + BuildBitmasks ( pTree->m_dChildren[i] ); + } + + // Collect all possible intersections of Bitmasks. + // For every non-zero intersection we collect the list of trees which contain it. + void CalcIntersections () + { + // Round 1. Intersect all content of bitmasks one-by-one. + ARRAY_FOREACH ( i, m_dBitmasks ) + for ( int j = i+1; j dSubnodes; // masks for our selected subnodes + dSubnodes.Reserve ( m_hInterSections.GetLength() ); + m_hInterSections.IterateStart(); + while ( m_hInterSections.IterateNext() ) + dSubnodes.Add().Init( m_hInterSections.IterateGetKey(), &m_hInterSections.IterateGet() ); + + // sort by weight descending (weight sorting is hold by operator <) + dSubnodes.RSort(); + m_dSubQueries.Reset(); + + // make the final subtrees vector: get one-by-one from the beginning, + // intresect with all the next and throw out zeros. + // The final subqueries will not be intersected between each other. + int j; + uint64_t uMask; + ARRAY_FOREACH ( i, dSubnodes ) + { + uMask = dSubnodes[i].m_uMask; + m_dSubQueries.Add ( uMask ); + j = i+1; + while ( j < dSubnodes.GetLength() ) + { + if ( !( dSubnodes[j].m_uMask &= ~uMask ) ) + dSubnodes.Remove(j); + else + j++; + } + } + } + + // Now we finally extract the common subtrees from original tree + // and (recursively) from it's children + void Reorganize ( XQNode_t * pTree ) + { + if ( !IsAppropriate ( pTree ) ) + return; + + if ( m_eOp==pTree->GetOp() ) + { + // pBranch is for common subset of children, pOtherChildren is for the rest. + CSphOrderedHash < XQNode_t*, int, IdentityHash_fn, 64, 13 > hBranches; + XQNode_t * pOtherChildren = NULL; + int iBit; + int iOptimizations = 0; + ARRAY_FOREACH ( i, pTree->m_dChildren ) + { + iBit = GetBitOrder ( pTree->m_dChildren[i]->GetHash() ); + + // works only with children which are actually common with somebody else + if ( iBit>=0 ) + { + // since subqueries doesn't intersected between each other, + // the first hit we found in this loop is exactly what we searched. + ARRAY_FOREACH ( j, m_dSubQueries ) + if ( ( 1ull << iBit ) & m_dSubQueries[j] ) + { + XQNode_t * pNode; + if ( !hBranches.Exists(j) ) + { + pNode = new XQNode_t; + pNode->SetOp ( m_eOp, pTree->m_dChildren[i] ); + hBranches.Add ( pNode, j ); + } else + { + pNode = hBranches[j]; + pNode->m_dChildren.Add ( pTree->m_dChildren[i] ); + + // Count essential subtrees (with at least 2 children) + if ( pNode->m_dChildren.GetLength()==2 ) + iOptimizations++; + } + break; + } + // another nodes add to the set of "other" children + } else + { + if ( !pOtherChildren ) + { + pOtherChildren = new XQNode_t; + pOtherChildren->SetOp ( m_eOp, pTree->m_dChildren[i] ); + } else + pOtherChildren->m_dChildren.Add ( pTree->m_dChildren[i] ); + } + } + + // we don't reorganize explicit simple case - as no "others" and only one common. + // Also reject optimization if there is nothing to optimize. + if ( ( iOptimizations==0 ) + | ( !pOtherChildren && ( hBranches.GetLength()==1 ) ) ) + { + if ( pOtherChildren ) + pOtherChildren->m_dChildren.Reset(); + hBranches.IterateStart(); + while ( hBranches.IterateNext() ) + { + assert ( hBranches.IterateGet() ); + hBranches.IterateGet()->m_dChildren.Reset(); + SafeDelete ( hBranches.IterateGet() ); + } + } else + { + // reorganize the tree: replace the common subset to explicit node with + // only common members inside. This will give the the possibility + // to cache the node. + pTree->m_dChildren.Reset(); + if ( pOtherChildren ) + pTree->m_dChildren.SwapData ( pOtherChildren->m_dChildren ); + + hBranches.IterateStart(); + while ( hBranches.IterateNext() ) + { + if ( hBranches.IterateGet()->m_dChildren.GetLength()==1 ) + { + pTree->m_dChildren.Add ( hBranches.IterateGet()->m_dChildren[0] ); + hBranches.IterateGet()->m_dChildren.Reset(); + SafeDelete ( hBranches.IterateGet() ); + } else + pTree->m_dChildren.Add ( hBranches.IterateGet() ); + } + } + SafeDelete ( pOtherChildren ); + } + + // recursively process all the children + ARRAY_FOREACH ( i, pTree->m_dChildren ) + Reorganize ( pTree->m_dChildren[i] ); + } + +public: + explicit RevealCommon_t ( XQOperator_e eOp ) + : m_eOp ( eOp ) + {} + + // actual method for processing tree and reveal (extract) common subtrees + void Transform ( int iXQ, const XQQuery_t * pXQ ) + { + // collect all non-unique nodes + for ( int i=0; i1 ) + m_iCounter--; + if ( m_iCounter<2 ) + m_bMarked = false; + } +}; + +typedef CSphOrderedHash < MarkedNode_t, uint64_t, IdentityHash_fn, 128, 117 > CSubtreeHash; + +/// check hashes, then check subtrees, then flag +static void FlagCommonSubtrees ( XQNode_t * pTree, CSubtreeHash & hSubTrees, bool bFlag=true, bool bMarkIt=true ) +{ + if ( !IsAppropriate ( pTree ) ) + return; + + // we do not yet have any collisions stats, + // but chances are we don't actually need IsEqualTo() at all + uint64_t iHash = pTree->GetHash(); + if ( bFlag && hSubTrees.Exists ( iHash ) && hSubTrees [ iHash ].m_pTree->IsEqualTo ( pTree ) ) + { + hSubTrees[iHash].MarkIt (); + + // we just add all the children but do NOT mark them as common + // so that only the subtree root is marked. + // also we unmark all the cases which were eaten by bigger trees + ARRAY_FOREACH ( i, pTree->m_dChildren ) + if ( !hSubTrees.Exists ( pTree->m_dChildren[i]->GetHash() ) ) + FlagCommonSubtrees ( pTree->m_dChildren[i], hSubTrees, false, bMarkIt ); + else + FlagCommonSubtrees ( pTree->m_dChildren[i], hSubTrees, false, false ); + } else + { + if ( !bMarkIt ) + hSubTrees[iHash].MarkIt(false); + else + hSubTrees.Add ( MarkedNode_t ( pTree ), iHash ); + + ARRAY_FOREACH ( i, pTree->m_dChildren ) + FlagCommonSubtrees ( pTree->m_dChildren[i], hSubTrees, bFlag, bMarkIt ); + } +} + + +static void SignCommonSubtrees ( XQNode_t * pTree, CSubtreeHash & hSubTrees ) +{ + if ( !pTree ) + return; + + uint64_t iHash = pTree->GetHash(); + if ( hSubTrees.Exists(iHash) && hSubTrees[iHash].m_bMarked ) + pTree->TagAsCommon ( hSubTrees[iHash].m_iOrder, hSubTrees[iHash].m_iCounter ); + + ARRAY_FOREACH ( i, pTree->m_dChildren ) + SignCommonSubtrees ( pTree->m_dChildren[i], hSubTrees ); +} + + +int sphMarkCommonSubtrees ( int iXQ, const XQQuery_t * pXQ ) +{ + if ( iXQ<=0 || !pXQ ) + return 0; + + { // Optional reorganize tree to extract common parts + RevealCommon_t ( SPH_QUERY_AND ).Transform ( iXQ, pXQ ); + RevealCommon_t ( SPH_QUERY_OR ).Transform ( iXQ, pXQ ); + } + + // flag common subtrees and refcount them + CSubtreeHash hSubtrees; + for ( int i=0; i m_dChildren; ///< non-plain node children + + bool m_bFieldSpec; ///< whether field spec was already explicitly set + CSphSmallBitvec m_dFieldMask; ///< fields mask (spec part) + int m_iFieldMaxPos; ///< max position within field (spec part) + + CSphVector m_dZones; ///< zone indexes in per-query zones list + + CSphVector m_dWords; ///< query words (plain node) + int m_iOpArg; ///< operator argument (proximity distance, quorum count) + int m_iAtomPos; ///< atom position override (currently only used within expanded nodes) + bool m_bVirtuallyPlain; ///< "virtually plain" flag (currently only used by expanded nodes) + bool m_bNotWeighted; ///< this our expanded but empty word's node + +public: + /// ctor + XQNode_t () + : m_pParent ( NULL ) + , m_eOp ( SPH_QUERY_AND ) + , m_iOrder ( 0 ) + , m_iCounter ( 0 ) + , m_iMagicHash ( 0 ) + , m_bFieldSpec ( false ) + , m_iFieldMaxPos ( 0 ) + , m_iOpArg ( 0 ) + , m_iAtomPos ( -1 ) + , m_bVirtuallyPlain ( false ) + , m_bNotWeighted ( false ) + { + m_dFieldMask.Set(); + } + + /// dtor + ~XQNode_t () + { + ARRAY_FOREACH ( i, m_dChildren ) + SafeDelete ( m_dChildren[i] ); + } + + /// check if i'm empty + bool IsEmpty () const + { + assert ( m_dWords.GetLength()==0 || m_dChildren.GetLength()==0 ); + return m_dWords.GetLength()==0 && m_dChildren.GetLength()==0; + } + + /// setup field limits + void SetFieldSpec ( const CSphSmallBitvec& uMask, int iMaxPos ); + + /// setup zone limits + void SetZoneSpec ( const CSphVector & dZones ); + + /// copy field/zone limits from another node + void CopySpecs ( const XQNode_t * pSpecs ); + + /// unconditionally clear field mask + void ClearFieldMask (); + +public: + /// get my operator + XQOperator_e GetOp () const + { + return m_eOp; + } + + /// get my cache order + DWORD GetOrder () const + { + return m_iOrder; + } + + /// get my cache counter + int GetCount () const + { + return m_iCounter; + } + + /// setup common nodes for caching + void TagAsCommon ( int iOrder, int iCounter ) + { + m_iCounter = iCounter; + m_iOrder = iOrder; + } + + /// precise comparison + bool IsEqualTo ( const XQNode_t * pNode ); + + /// hash me + uint64_t GetHash () const; + + /// setup new operator and args + void SetOp ( XQOperator_e eOp, XQNode_t * pArg1, XQNode_t * pArg2=NULL ); + + /// setup new operator and args + void SetOp ( XQOperator_e eOp, CSphVector & dArgs ) + { + m_eOp = eOp; + m_dChildren.SwapData(dArgs); + } + + /// setup new operator (careful parser/transform use only) + void SetOp ( XQOperator_e eOp ) + { + m_eOp = eOp; + } + +#ifndef NDEBUG + /// consistency check + void Check ( bool bRoot ) + { + assert ( bRoot || !IsEmpty() ); // empty leaves must be removed from the final tree; empty root is allowed + assert (!( m_dWords.GetLength() && m_eOp!=SPH_QUERY_AND && m_eOp!=SPH_QUERY_PHRASE && m_eOp!=SPH_QUERY_PROXIMITY && m_eOp!=SPH_QUERY_QUORUM )); // words are only allowed in these node types + assert (!( m_dWords.GetLength()==1 && m_eOp!=SPH_QUERY_AND )); // 1-word leaves must be of AND type + + ARRAY_FOREACH ( i, m_dChildren ) + m_dChildren[i]->Check ( false ); + } +#endif +}; + + +/// extended query +struct XQQuery_t : public ISphNoncopyable +{ + CSphString m_sParseError; + CSphString m_sParseWarning; + + CSphVector m_dZones; + XQNode_t * m_pRoot; + + /// ctor + XQQuery_t () + { + m_pRoot = NULL; + } + + /// dtor + ~XQQuery_t () + { + SafeDelete ( m_pRoot ); + } +}; + +////////////////////////////////////////////////////////////////////////////// + +/// parses the query and returns the resulting tree +/// return false and fills tQuery.m_sParseError on error +/// WARNING, parsed tree might be NULL (eg. if query was empty) +bool sphParseExtendedQuery ( XQQuery_t & tQuery, const char * sQuery, const ISphTokenizer * pTokenizer, const CSphSchema * pSchema, CSphDict * pDict, int iStopwordStep ); + +/// analyse vector of trees and tag common parts of them (to cache them later) +int sphMarkCommonSubtrees ( int iXQ, const XQQuery_t * pXQ ); + +#endif // _sphinxquery_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxquery.o b/coreseek/csft-4.1/src/sphinxquery.o new file mode 100644 index 0000000..d8697f7 Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxquery.o differ diff --git a/coreseek/csft-4.1/src/sphinxquery.y b/coreseek/csft-4.1/src/sphinxquery.y new file mode 100755 index 0000000..e66585e --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxquery.y @@ -0,0 +1,144 @@ +%{ +#if USE_WINDOWS +#pragma warning(push,1) +#endif +%} + +%lex-param { XQParser_t * pParser } +%parse-param { XQParser_t * pParser } +%pure-parser +%error-verbose + +%union { + XQNode_t * pNode; // tree node + struct + { + int iValue; + int iStrIndex; + } tInt; + struct // field spec + { + CSphSmallBitvec dMask; // acceptable fields mask + int iMaxPos; // max allowed position within field + } tFieldLimit; + int iZoneVec; +}; + +%token TOK_KEYWORD +%token TOK_NEAR +%token TOK_INT +%token TOK_FIELDLIMIT +%token TOK_ZONE +%token TOK_BEFORE +%token TOK_SENTENCE +%token TOK_PARAGRAPH +%type rawkeyword +%type keyword +%type phrasetoken +%type phrase +%type sp_item +%type sentence +%type paragraph +%type atom +%type atomf +%type orlist +%type orlistf +%type beforelist +%type expr + +%left TOK_BEFORE TOK_NEAR + +%% + +query: + expr { pParser->AddQuery ( $1 ); } + ; + +rawkeyword: + TOK_KEYWORD { $$ = $1; } + | TOK_INT { $$ = pParser->AddKeyword ( ( $1.iStrIndex>=0 ) ? pParser->m_dIntTokens[$1.iStrIndex].cstr() : NULL ); } + ; + +keyword: + rawkeyword + | rawkeyword '$' { $$ = $1; assert ( $$->m_dWords.GetLength()==1 ); $$->m_dWords[0].m_bFieldEnd = true; } + | '^' rawkeyword { $$ = $2; assert ( $$->m_dWords.GetLength()==1 ); $$->m_dWords[0].m_bFieldStart = true; } + | '^' rawkeyword '$' { $$ = $2; assert ( $$->m_dWords.GetLength()==1 ); $$->m_dWords[0].m_bFieldStart = true; $$->m_dWords[0].m_bFieldEnd = true; } + ; + +phrasetoken: + keyword { $$ = $1; } + | '(' { $$ = NULL; } + | ')' { $$ = NULL; } + | '-' { $$ = NULL; } + | '|' { $$ = NULL; } + | '~' { $$ = NULL; } + | '/' { $$ = NULL; } + ; + +phrase: + phrasetoken { $$ = $1; } + | phrase phrasetoken { $$ = pParser->AddKeyword ( $1, $2 ); } + ; + +sp_item: + keyword { $$ = $1; } + | '"' phrase '"' { $$ = $2; if ( $$ ) { assert ( $$->m_dWords.GetLength() ); $$->SetOp ( SPH_QUERY_PHRASE); } } + ; + +sentence: + sp_item TOK_SENTENCE sp_item { $$ = pParser->AddOp ( SPH_QUERY_SENTENCE, $1, $3 ); } + | sentence TOK_SENTENCE sp_item { $$ = pParser->AddOp ( SPH_QUERY_SENTENCE, $1, $3 ); } + ; + +paragraph: + sp_item TOK_PARAGRAPH sp_item { $$ = pParser->AddOp ( SPH_QUERY_PARAGRAPH, $1, $3 ); } + | paragraph TOK_PARAGRAPH sp_item { $$ = pParser->AddOp ( SPH_QUERY_PARAGRAPH, $1, $3 ); } + ; + +atom: + keyword { $$ = $1; } + | sentence { $$ = $1; } + | paragraph { $$ = $1; } + | '"' '"' { $$ = NULL; } + | '"' '"' '~' TOK_INT { $$ = NULL; } + | '"' '"' '/' TOK_INT { $$ = NULL; } + | '"' phrase '"' { $$ = $2; if ( $$ ) { assert ( $$->m_dWords.GetLength() ); $$->SetOp ( SPH_QUERY_PHRASE); } } + | '"' phrase '"' '~' TOK_INT { $$ = $2; if ( $$ ) { assert ( $$->m_dWords.GetLength() ); $$->SetOp ( SPH_QUERY_PROXIMITY ); $$->m_iOpArg = $5.iValue; } } + | '"' phrase '"' '/' TOK_INT { $$ = $2; if ( $$ ) { assert ( $$->m_dWords.GetLength() ); $$->SetOp ( SPH_QUERY_QUORUM ); $$->m_iOpArg = $5.iValue; } } + | '(' expr ')' { $$ = $2; if ( $$ ) $$->m_bFieldSpec = false; } + ; + +atomf: + atom { $$ = $1; } + | TOK_FIELDLIMIT atom { $$ = $2; if ( $$ ) $$->SetFieldSpec ( $1.dMask, $1.iMaxPos ); } + | TOK_ZONE atom { $$ = $2; if ( $$ ) $$->SetZoneSpec ( pParser->GetZoneVec ( $1 ) ); } + ; + +orlist: + atomf { $$ = $1; } + | orlist '|' atomf { $$ = pParser->AddOp ( SPH_QUERY_OR, $1, $3 ); } + ; + +orlistf: + orlist { $$ = $1; } + | '-' orlist { $$ = pParser->AddOp ( SPH_QUERY_NOT, $2, NULL ); } + | TOK_FIELDLIMIT '-' orlist { $$ = pParser->AddOp ( SPH_QUERY_NOT, $3, NULL ); $$->SetFieldSpec ( $1.dMask, $1.iMaxPos ); } + ; + +beforelist: + orlistf + | beforelist TOK_BEFORE orlistf { $$ = pParser->AddOp ( SPH_QUERY_BEFORE, $1, $3 ); } + | beforelist TOK_NEAR orlistf { $$ = pParser->AddOp ( SPH_QUERY_NEAR, $1, $3, $2.iValue ); } + ; + +expr: + beforelist { $$ = $1; } + | expr beforelist { $$ = pParser->AddOp ( SPH_QUERY_AND, $1, $2 ); } + ; + +%% + +#if USE_WINDOWS +#pragma warning(pop) +#endif diff --git a/coreseek/csft-4.1/src/sphinxrt.cpp b/coreseek/csft-4.1/src/sphinxrt.cpp new file mode 100755 index 0000000..d0d7134 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxrt.cpp @@ -0,0 +1,5746 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxint.h" +#include "sphinxrt.h" +#include "sphinxsearch.h" +#include "sphinxutils.h" + +#include +#include + +#if USE_WINDOWS +#include // for open(), close() +#include +#else +#include +#include +#endif + +////////////////////////////////////////////////////////////////////////// + +#define BINLOG_WRITE_BUFFER 256*1024 +#define BINLOG_AUTO_FLUSH 1000000 +#define BINLOG_RESTART_SIZE 128*1024*1024 + +#if USE_64BIT +#define WORDID_MAX U64C(0xffffffffffffffff) +#else +#define WORDID_MAX 0xffffffffUL +#endif + +// RT hitman +typedef Hitman_c<8> HITMAN; + +////////////////////////////////////////////////////////////////////////// + +#ifndef NDEBUG +#define Verify(_expr) assert(_expr) +#else +#define Verify(_expr) _expr +#endif + +////////////////////////////////////////////////////////////////////////// + +// !COMMIT cleanup extern ref to sphinx.cpp +extern void sphSortDocinfos ( DWORD * pBuf, int iCount, int iStride ); + +// !COMMIT yes i am when debugging +#ifndef NDEBUG +#define PARANOID 1 +#endif + +////////////////////////////////////////////////////////////////////////// + +template < typename T, typename P > +static inline void ZipT ( CSphVector < BYTE, P > & dOut, T uValue ) +{ + do + { + BYTE bOut = (BYTE)( uValue & 0x7f ); + uValue >>= 7; + if ( uValue ) + bOut |= 0x80; + dOut.Add ( bOut ); + } while ( uValue ); +} + + +template < typename T > +static inline const BYTE * UnzipT ( T * pValue, const BYTE * pIn ) +{ + T uValue = 0; + BYTE bIn; + int iOff = 0; + + do + { + bIn = *pIn++; + uValue += ( T ( bIn & 0x7f ) ) << iOff; + iOff += 7; + } while ( bIn & 0x80 ); + + *pValue = uValue; + return pIn; +} + +#define ZipDword ZipT +#define ZipQword ZipT +#define UnzipDword UnzipT +#define UnzipQword UnzipT + +#if USE_64BIT +#define ZipDocid ZipQword +#define ZipWordid ZipQword +#define UnzipDocid UnzipQword +#define UnzipWordid UnzipQword +#else +#define ZipDocid ZipDword +#define ZipWordid ZipDword +#define UnzipDocid UnzipDword +#define UnzipWordid UnzipDword +#endif + +////////////////////////////////////////////////////////////////////////// + +struct CmpHit_fn +{ + inline bool IsLess ( const CSphWordHit & a, const CSphWordHit & b ) + { + return ( a.m_iWordID +struct RtDoc_tmpl +{ + DOCID m_uDocID; ///< my document id + CSphSmallBitvec m_dFields; ///< fields mask + DWORD m_uHits; ///< hit count + DWORD m_uHit; ///< either index into segment hits, or the only hit itself (if hit count is 1) +}; + +template < typename WORDID = SphWordID_t > +struct RtWord_tmpl +{ + WORDID m_uWordID; ///< my keyword id + DWORD m_uDocs; ///< document count (for stats and/or BM25) + DWORD m_uHits; ///< hit count (for stats and/or BM25) + DWORD m_uDoc; ///< index into segment docs +}; + +typedef RtDoc_tmpl<> RtDoc_t; +typedef RtWord_tmpl<> RtWord_t; + +struct RtWordCheckpoint_t +{ + SphWordID_t m_uWordID; + int m_iOffset; +}; + +class RtDiskKlist_t : public ISphNoncopyable +{ +private: + static const int MAX_SMALL_SIZE = 512; + CSphVector < SphAttr_t > m_dLargeKlist; + CSphOrderedHash < bool, SphDocID_t, IdentityHash_fn, MAX_SMALL_SIZE, 11 > m_hSmallKlist; + mutable CSphRwlock m_tRwLargelock; + mutable CSphRwlock m_tRwSmalllock; + + void NakedFlush(); // flush without lockers + +public: + RtDiskKlist_t() { m_tRwLargelock.Init(); m_tRwSmalllock.Init(); } + virtual ~RtDiskKlist_t() { m_tRwLargelock.Done(); m_tRwSmalllock.Done(); } + void Reset (); + void Flush() + { + if ( m_hSmallKlist.GetLength()==0 ) + return; + m_tRwSmalllock.WriteLock(); + m_tRwLargelock.WriteLock(); + NakedFlush(); + m_tRwLargelock.Unlock(); + m_tRwSmalllock.Unlock(); + } + void LoadFromFile ( const char * sFilename ); + void SaveToFile ( const char * sFilename ); + inline void Delete ( SphDocID_t uDoc ) + { + m_tRwSmalllock.WriteLock(); + if ( !m_hSmallKlist.Exists ( uDoc ) ) + m_hSmallKlist.Add ( true, uDoc ); + if ( m_hSmallKlist.GetLength()>=MAX_SMALL_SIZE ) + NakedFlush(); + m_tRwSmalllock.Unlock(); + } + inline const SphAttr_t * GetKillList () const { return m_dLargeKlist.Begin(); } + inline int GetKillListSize () const { return m_dLargeKlist.GetLength(); } + inline bool KillListLock() const { return m_tRwLargelock.ReadLock(); } + inline bool KillListUnlock() const { return m_tRwLargelock.Unlock(); } + + // NOT THREAD SAFE + bool Exists ( SphDocID_t uDoc ) + { + return ( m_hSmallKlist.Exists ( uDoc ) || m_dLargeKlist.BinarySearch ( SphAttr_t(uDoc))!=NULL ); + } +}; + +void RtDiskKlist_t::Reset() +{ + m_dLargeKlist.Reset(); + m_hSmallKlist.Reset(); +} + +void RtDiskKlist_t::NakedFlush() +{ + if ( m_hSmallKlist.GetLength()==0 ) + return; + m_hSmallKlist.IterateStart(); + while ( m_hSmallKlist.IterateNext() ) + m_dLargeKlist.Add ( m_hSmallKlist.IterateGetKey() ); + m_dLargeKlist.Uniq(); + m_hSmallKlist.Reset(); +} + +// is already id32<>id64 safe +void RtDiskKlist_t::LoadFromFile ( const char * sFilename ) +{ + m_tRwLargelock.WriteLock(); + m_tRwSmalllock.WriteLock(); + m_hSmallKlist.Reset(); + m_tRwSmalllock.Unlock(); + + m_dLargeKlist.Reset(); + CSphString sName, sError; + sName.SetSprintf ( "%s.kill", sFilename ); + if ( !sphIsReadable ( sName.cstr(), &sError ) ) + { + m_tRwLargelock.Unlock(); + return; + } + + CSphAutoreader rdKlist; + if ( !rdKlist.Open ( sName, sError ) ) + { + m_tRwLargelock.Unlock(); + return; + } + + m_dLargeKlist.Resize ( rdKlist.GetDword() ); + SphDocID_t uLastDocID = 0; + ARRAY_FOREACH ( i, m_dLargeKlist ) + { + uLastDocID += ( SphDocID_t ) rdKlist.UnzipOffset(); + m_dLargeKlist[i] = uLastDocID; + }; + m_tRwLargelock.Unlock(); +} + +void RtDiskKlist_t::SaveToFile ( const char * sFilename ) +{ + m_tRwLargelock.WriteLock(); + m_tRwSmalllock.WriteLock(); + NakedFlush(); + m_tRwSmalllock.Unlock(); + + CSphWriter wrKlist; + CSphString sName, sError; + sName.SetSprintf ( "%s.kill", sFilename ); + wrKlist.OpenFile ( sName.cstr(), sError ); + + wrKlist.PutDword ( m_dLargeKlist.GetLength() ); + SphDocID_t uLastDocID = 0; + ARRAY_FOREACH ( i, m_dLargeKlist ) + { + wrKlist.ZipOffset ( m_dLargeKlist[i] - uLastDocID ); + uLastDocID = ( SphDocID_t ) m_dLargeKlist[i]; + }; + m_tRwLargelock.Unlock(); + wrKlist.CloseFile (); +} + +struct RtSegment_t +{ +protected: + static const int KLIST_ACCUM_THRESH = 32; + +public: + static CSphStaticMutex m_tSegmentSeq; + static int m_iSegments; ///< age tag sequence generator + int m_iTag; ///< segment age tag + + CSphTightVector m_dWords; + CSphVector m_dWordCheckpoints; + CSphTightVector m_dDocs; + CSphTightVector m_dHits; + + int m_iRows; ///< number of actually allocated rows + int m_iAliveRows; ///< number of alive (non-killed) rows + CSphVector m_dRows; ///< row data storage + CSphVector m_dKlist; ///< sorted K-list + bool m_bTlsKlist; ///< whether to apply TLS K-list during merge (must only be used by writer during Commit()) + CSphTightVector m_dStrings; ///< strings storage + CSphTightVector m_dMvas; ///< MVAs storage + + RtSegment_t () + { + m_tSegmentSeq.Lock (); + m_iTag = m_iSegments++; + m_tSegmentSeq.Unlock (); + m_iRows = 0; + m_iAliveRows = 0; + m_bTlsKlist = false; + m_dStrings.Add ( 0 ); // dummy zero offset + m_dMvas.Add ( 0 ); // dummy zero offset + } + + int64_t GetUsedRam () const + { + // FIXME! gonna break on vectors over 2GB + return + m_dWords.GetLimit()*sizeof(m_dWords[0]) + + m_dDocs.GetLimit()*sizeof(m_dDocs[0]) + + m_dHits.GetLimit()*sizeof(m_dHits[0]) + + m_dStrings.GetLimit()*sizeof(m_dStrings[0])+ + m_dMvas.GetLimit()*sizeof(m_dMvas[0]); + } + + int GetMergeFactor () const + { + return m_iRows; + } + + const CSphRowitem * FindRow ( SphDocID_t uDocid ) const; + const CSphRowitem * FindAliveRow ( SphDocID_t uDocid ) const; +}; + +int RtSegment_t::m_iSegments = 0; +CSphStaticMutex RtSegment_t::m_tSegmentSeq; + + +const CSphRowitem * RtSegment_t::FindRow ( SphDocID_t uDocid ) const +{ + // binary search through the rows + int iStride = m_dRows.GetLength() / m_iRows; + SphDocID_t uL = DOCINFO2ID ( m_dRows.Begin() ); + SphDocID_t uR = DOCINFO2ID ( &m_dRows[m_dRows.GetLength()-iStride] ); + + if ( uDocid==uL ) + return m_dRows.Begin(); + + if ( uDocid==uR ) + return &m_dRows[m_dRows.GetLength()-iStride]; + + if ( uDocid
    uR ) + return NULL; + + int iL = 0; + int iR = m_iRows-1; + while ( iR-iL>1 ) + { + int iM = iL + (iR-iL)/2; + SphDocID_t uM = DOCINFO2ID ( &m_dRows[iM*iStride] ); + + if ( uDocid==uM ) + return &m_dRows[iM*iStride]; + else if ( uDocid>uM ) + iL = iM; + else + iR = iM; + } + return NULL; +} + + +const CSphRowitem * RtSegment_t::FindAliveRow ( SphDocID_t uDocid ) const +{ + if ( m_dKlist.BinarySearch ( uDocid ) ) + return NULL; + else + return FindRow ( uDocid ); +} + +////////////////////////////////////////////////////////////////////////// + +struct RtDocWriter_t +{ + CSphTightVector * m_pDocs; + SphDocID_t m_uLastDocID; + + explicit RtDocWriter_t ( RtSegment_t * pSeg ) + : m_pDocs ( &pSeg->m_dDocs ) + , m_uLastDocID ( 0 ) + {} + + void ZipDoc ( const RtDoc_t & tDoc ) + { + CSphTightVector & dDocs = *m_pDocs; + ZipDocid ( dDocs, tDoc.m_uDocID - m_uLastDocID ); + m_uLastDocID = tDoc.m_uDocID; + ZipDword ( dDocs, tDoc.m_dFields.GetMask32() ); + ZipDword ( dDocs, tDoc.m_uHits ); + if ( tDoc.m_uHits==1 ) + { + ZipDword ( dDocs, tDoc.m_uHit & 0xffffffUL ); + ZipDword ( dDocs, tDoc.m_uHit>>24 ); + } else + ZipDword ( dDocs, tDoc.m_uHit ); + } + + DWORD ZipDocPtr () const + { + return m_pDocs->GetLength(); + } + + void ZipRestart () + { + m_uLastDocID = 0; + } +}; + +template < typename DOCID = SphDocID_t > +struct RtDocReader_tmpl +{ + typedef RtDoc_tmpl RTDOC; + const BYTE * m_pDocs; + int m_iLeft; + RTDOC m_tDoc; + + template < typename RTWORD > + explicit RtDocReader_tmpl ( const RtSegment_t * pSeg, const RTWORD & tWord ) + { + m_pDocs = ( pSeg->m_dDocs.Begin() ? pSeg->m_dDocs.Begin() + tWord.m_uDoc : NULL ); + m_iLeft = tWord.m_uDocs; + m_tDoc.m_uDocID = 0; + } + + const RTDOC * UnzipDoc () + { + if ( !m_iLeft || !m_pDocs ) + return NULL; + + const BYTE * pIn = m_pDocs; + SphDocID_t uDeltaID; + pIn = UnzipDocid ( &uDeltaID, pIn ); + RTDOC & mtDoc = *(RTDOC*)&m_tDoc; + mtDoc.m_uDocID += (DOCID) uDeltaID; + DWORD uField; + pIn = UnzipDword ( &uField, pIn ); + m_tDoc.m_dFields.Assign32 ( uField ); + pIn = UnzipDword ( &mtDoc.m_uHits, pIn ); + if ( mtDoc.m_uHits==1 ) + { + DWORD a, b; + pIn = UnzipDword ( &a, pIn ); + pIn = UnzipDword ( &b, pIn ); + mtDoc.m_uHit = a + ( b<<24 ); + } else + pIn = UnzipDword ( &mtDoc.m_uHit, pIn ); + m_pDocs = pIn; + + m_iLeft--; + return &mtDoc; + } +}; + +typedef RtDocReader_tmpl<> RtDocReader_t; + +static const int RAM_WORDLIST_CHECKPOINT = 1024; + +struct RtWordWriter_t +{ + CSphTightVector * m_pWords; + CSphVector * m_pCheckpoints; + SphWordID_t m_uLastWordID; + DWORD m_uLastDoc; + int m_iWords; + + explicit RtWordWriter_t ( RtSegment_t * pSeg ) + : m_pWords ( &pSeg->m_dWords ) + , m_pCheckpoints ( &pSeg->m_dWordCheckpoints ) + , m_uLastWordID ( 0 ) + , m_uLastDoc ( 0 ) + , m_iWords ( 0 ) + { + assert ( !m_pWords->GetLength() ); + assert ( !m_pCheckpoints->GetLength() ); + } + + void ZipWord ( const RtWord_t & tWord ) + { + CSphTightVector & tWords = *m_pWords; + if ( ++m_iWords==RAM_WORDLIST_CHECKPOINT ) + { + RtWordCheckpoint_t & tCheckpoint = m_pCheckpoints->Add(); + tCheckpoint.m_uWordID = tWord.m_uWordID; + tCheckpoint.m_iOffset = tWords.GetLength(); + + m_uLastWordID = 0; + m_uLastDoc = 0; + m_iWords = 1; + } + + ZipWordid ( tWords, tWord.m_uWordID - m_uLastWordID ); + ZipDword ( tWords, tWord.m_uDocs ); + ZipDword ( tWords, tWord.m_uHits ); + ZipDword ( tWords, tWord.m_uDoc - m_uLastDoc ); + m_uLastWordID = tWord.m_uWordID; + m_uLastDoc = tWord.m_uDoc; + } +}; + +template < typename WORDID = SphWordID_t > +struct RtWordReader_tmpl +{ + typedef RtWord_tmpl RTWORD; + const BYTE * m_pCur; + const BYTE * m_pMax; + RTWORD m_tWord; + int m_iWords; + + explicit RtWordReader_tmpl ( const RtSegment_t * pSeg ) + : m_iWords ( 0 ) + { + m_pCur = pSeg->m_dWords.Begin(); + m_pMax = m_pCur + pSeg->m_dWords.GetLength(); + + m_tWord.m_uWordID = 0; + m_tWord.m_uDoc = 0; + } + + const RTWORD * UnzipWord () + { + RTWORD & mtWord = *(RTWORD*)&m_tWord; + if ( ++m_iWords==RAM_WORDLIST_CHECKPOINT ) + { + mtWord.m_uWordID = 0; + mtWord.m_uDoc = 0; + m_iWords = 1; + } + if ( m_pCur>=m_pMax ) + return NULL; + + const BYTE * pIn = m_pCur; + SphWordID_t uDeltaID; + DWORD uDeltaDoc; + pIn = UnzipWordid ( &uDeltaID, pIn ); + pIn = UnzipDword ( &mtWord.m_uDocs, pIn ); + pIn = UnzipDword ( &mtWord.m_uHits, pIn ); + pIn = UnzipDword ( &uDeltaDoc, pIn ); + m_pCur = pIn; + + mtWord.m_uWordID += (WORDID) uDeltaID; + mtWord.m_uDoc += uDeltaDoc; + return &mtWord; + } +}; + +typedef RtWordReader_tmpl RtWordReader_t; + +struct RtHitWriter_t +{ + CSphTightVector * m_pHits; + DWORD m_uLastHit; + + explicit RtHitWriter_t ( RtSegment_t * pSeg ) + : m_pHits ( &pSeg->m_dHits ) + , m_uLastHit ( 0 ) + {} + + void ZipHit ( DWORD uValue ) + { + ZipDword ( *m_pHits, uValue - m_uLastHit ); + m_uLastHit = uValue; + } + + void ZipRestart () + { + m_uLastHit = 0; + } + + DWORD ZipHitPtr () const + { + return m_pHits->GetLength(); + } +}; + + +struct RtHitReader_t +{ + const BYTE * m_pCur; + DWORD m_iLeft; + DWORD m_uLast; + + RtHitReader_t () + : m_pCur ( NULL ) + , m_iLeft ( 0 ) + , m_uLast ( 0 ) + {} + + template < typename RTDOC > + explicit RtHitReader_t ( const RtSegment_t * pSeg, const RTDOC * pDoc ) + { + m_pCur = &pSeg->m_dHits [ pDoc->m_uHit ]; + m_iLeft = pDoc->m_uHits; + m_uLast = 0; + } + + DWORD UnzipHit () + { + if ( !m_iLeft ) + return 0; + + DWORD uValue; + m_pCur = UnzipDword ( &uValue, m_pCur ); + m_uLast += uValue; + m_iLeft--; + return m_uLast; + } +}; + + +struct RtHitReader2_t : public RtHitReader_t +{ + const BYTE * m_pBase; + + RtHitReader2_t () + : m_pBase ( NULL ) + {} + + void Seek ( SphOffset_t uOff, int iHits ) + { + m_pCur = m_pBase + uOff; + m_iLeft = iHits; + m_uLast = 0; + } +}; + +////////////////////////////////////////////////////////////////////////// + +/// forward ref +struct RtIndex_t; + +struct AccDocDup_t +{ + SphDocID_t m_uDocid; + int m_iDupCount; +}; + + +/// indexing accumulator +struct RtAccum_t +{ + RtIndex_t * m_pIndex; ///< my current owner in this thread + int m_iAccumDocs; + CSphVector m_dAccum; + CSphVector m_dAccumRows; + CSphVector m_dAccumKlist; + CSphTightVector m_dStrings; + CSphTightVector m_dMvas; + CSphVector m_dPerDocHitsCount; + + RtAccum_t(); + void AddDocument ( ISphHits * pHits, const CSphMatch & tDoc, int iRowSize, const char ** ppStr, const CSphVector & dMvas ); + RtSegment_t * CreateSegment ( int iRowSize ); + void CleanupDuplacates ( int iRowSize ); +}; + +/// TLS indexing accumulator (we disallow two uncommitted adds within one thread; and so need at most one) +SphThreadKey_t g_tTlsAccumKey; + +/// binlog file view of the index +/// everything that a given log file needs to know about an index +struct BinlogIndexInfo_t +{ + CSphString m_sName; ///< index name + int64_t m_iMinTID; ///< min TID logged by this file + int64_t m_iMaxTID; ///< max TID logged by this file + int64_t m_iFlushedTID; ///< last flushed TID + int64_t m_tmMin; ///< min TID timestamp + int64_t m_tmMax; ///< max TID timestamp + + CSphIndex * m_pIndex; ///< replay only; associated index (might be NULL if we don't serve it anymore!) + RtIndex_t * m_pRT; ///< replay only; RT index handle (might be NULL if N/A or non-RT) + int64_t m_iPreReplayTID; ///< replay only; index TID at the beginning of this file replay + + BinlogIndexInfo_t () + : m_iMinTID ( INT64_MAX ) + , m_iMaxTID ( 0 ) + , m_iFlushedTID ( 0 ) + , m_tmMin ( INT64_MAX ) + , m_tmMax ( 0 ) + , m_pIndex ( NULL ) + , m_pRT ( NULL ) + , m_iPreReplayTID ( 0 ) + {} +}; + +/// binlog file descriptor +/// file id (aka extension), plus a list of associated index infos +struct BinlogFileDesc_t +{ + int m_iExt; + CSphVector m_dIndexInfos; + + BinlogFileDesc_t () + : m_iExt ( 0 ) + {} +}; + +/// Bin Log Operation +enum Blop_e +{ + BLOP_COMMIT = 1, + BLOP_UPDATE_ATTRS = 2, + BLOP_ADD_INDEX = 3, + BLOP_ADD_CACHE = 4, + + BLOP_TOTAL +}; + +// forward declaration +class BufferReader_t; +class RtBinlog_c; +struct RtIndex_t; + + +class BinlogWriter_c : protected CSphWriter +{ +public: + BinlogWriter_c (); + virtual ~BinlogWriter_c () {} + + virtual void Flush (); + void Write (); + void Fsync (); + bool HasUnwrittenData () const { return m_iPoolUsed>0; } + bool HasUnsyncedData () const { return m_iLastFsyncPos!=m_iLastWritePos; } + + void ResetCrc (); ///< restart checksumming + void WriteCrc (); ///< finalize and write current checksum to output stream + + void SetBufferSize ( int iBufferSize ) { CSphWriter::SetBufferSize ( iBufferSize ); } + bool OpenFile ( const CSphString & sName, CSphString & sErrorBuffer ) { return CSphWriter::OpenFile ( sName, sErrorBuffer ); } + void SetFile ( int iFD, SphOffset_t * pSharedOffset ) { CSphWriter::SetFile ( iFD, pSharedOffset ); } + void CloseFile ( bool bTruncate=false ) { CSphWriter::CloseFile ( bTruncate ); } + SphOffset_t GetPos () const { return m_iPos; } + + void PutBytes ( const void * pData, int iSize ); + void PutString ( const char * szString ); + void PutDword ( DWORD uValue ) { PutBytes ( &uValue, sizeof(DWORD) ); } + void ZipValue ( uint64_t uValue ); + +private: + int64_t m_iLastWritePos; + int64_t m_iLastFsyncPos; + + DWORD m_uCRC; +}; + + +class BinlogReader_c : protected CSphAutoreader +{ +public: + bool Open ( const CSphString & sFilename, CSphString & sError ) { return CSphAutoreader::Open ( sFilename, sError ); } + void Close () { CSphAutoreader::Close(); } + SphOffset_t GetFilesize () { return CSphAutoreader::GetFilesize(); } + + void GetBytes ( void * pData, int iSize ); + CSphString GetString (); + DWORD GetDword (); + uint64_t UnzipValue (); + + bool GetErrorFlag () { return CSphAutoreader::GetErrorFlag(); } + SphOffset_t GetPos () { return CSphAutoreader::GetPos(); } + + void ResetCrc (); + bool CheckCrc ( const char * sOp, const char * sIndexName, int64_t iTid, int64_t iTxnPos ); + +private: + DWORD m_uCRC; +}; + +class RtBinlog_c : public ISphBinlog +{ +public: + RtBinlog_c (); + ~RtBinlog_c (); + + void BinlogCommit ( const char * sIndexName, int64_t iTID, const RtSegment_t * pSeg, const CSphVector & dKlist ); + void BinlogUpdateAttributes ( const char * sIndexName, int64_t iTID, const CSphAttrUpdate & tUpd ); + void NotifyIndexFlush ( const char * sIndexName, int64_t iTID, bool bShutdown ); + + void Configure ( const CSphConfigSection & hSearchd, bool bTestMode ); + void Replay ( const SmallStringHash_T & hIndexes, ProgressCallbackSimple_t * pfnProgressCallback ); + + void CreateTimerThread (); + +private: + static const DWORD BINLOG_VERSION = 3; + + static const DWORD BINLOG_HEADER_MAGIC = 0x4c425053; /// magic 'SPBL' header that marks binlog file + static const DWORD BLOP_MAGIC = 0x214e5854; /// magic 'TXN!' header that marks binlog entry + static const DWORD BINLOG_META_MAGIC = 0x494c5053; /// magic 'SPLI' header that marks binlog meta + + int64_t m_iFlushTimeLeft; + volatile int m_iFlushPeriod; + + enum OnCommitAction_e + { + ACTION_NONE, + ACTION_FSYNC, + ACTION_WRITE + }; + OnCommitAction_e m_eOnCommit; + + CSphMutex m_tWriteLock; // lock on operation + + int m_iLockFD; + CSphString m_sWriterError; + BinlogWriter_c m_tWriter; + + mutable CSphVector m_dLogFiles; // active log files + + CSphString m_sLogPath; + + SphThread_t m_tUpdateTread; + bool m_bReplayMode; // replay mode indicator + bool m_bDisabled; + + int m_iRestartSize; // binlog size restart threshold + + // replay stats + mutable int m_iReplayedRows; + +private: + static void DoAutoFlush ( void * pBinlog ); + int GetWriteIndexID ( const char * sName, int64_t iTID, int64_t tmNow ); + void LoadMeta (); + void SaveMeta (); + void LockFile ( bool bLock ); + void DoCacheWrite (); + void CheckDoRestart (); + void CheckDoFlush (); + void OpenNewLog ( int iLastState=0 ); + + int ReplayBinlog ( const SmallStringHash_T & hIndexes, int iBinlog ); + bool ReplayCommit ( int iBinlog, BinlogReader_c & tReader ) const; + bool ReplayUpdateAttributes ( int iBinlog, BinlogReader_c & tReader ) const; + bool ReplayIndexAdd ( int iBinlog, const SmallStringHash_T & hIndexes, BinlogReader_c & tReader ) const; + bool ReplayCacheAdd ( int iBinlog, BinlogReader_c & tReader ) const; +}; + +static RtBinlog_c * g_pBinlog = NULL; +static bool g_bRTChangesAllowed = false; + +/// RAM based index +struct RtQword_t; +struct RtIndex_t : public ISphRtIndex, public ISphNoncopyable +{ +private: + static const DWORD META_HEADER_MAGIC = 0x54525053; ///< my magic 'SPRT' header + static const DWORD META_VERSION = 3; ///< current version + +private: + const int m_iStride; + CSphVector m_pSegments; + + CSphMutex m_tWriterMutex; + mutable CSphRwlock m_tRwlock; + + int64_t m_iRamSize; + CSphString m_sPath; + bool m_bPathStripped; + CSphVector m_pDiskChunks; + int m_iLockFD; + mutable RtDiskKlist_t m_tKlist; + + CSphSchema m_tOutboundSchema; + CSphVector m_dDynamize; + + int64_t m_iSavedTID; + int64_t m_iSavedRam; + int64_t m_tmSaved; + +public: + explicit RtIndex_t ( const CSphSchema & tSchema, const char * sIndexName, int64_t iRamSize, const char * sPath ); + virtual ~RtIndex_t (); + + bool AddDocument ( int iFields, const char ** ppFields, const CSphMatch & tDoc, bool bReplace, const char ** ppStr, const CSphVector & dMvas, CSphString & sError ); + bool AddDocument ( ISphHits * pHits, const CSphMatch & tDoc, const char ** ppStr, const CSphVector & dMvas, CSphString & sError ); + bool DeleteDocument ( const SphDocID_t * pDocs, int iDocs, CSphString & sError ); + void Commit (); + void RollBack (); + + void CommitReplayable ( RtSegment_t * pNewSeg, CSphVector & dAccKlist ); + + void DumpToDisk ( const char * sFilename ); + + virtual void CheckRamFlush (); + +private: + /// acquire thread-local indexing accumulator + /// returns NULL if another index already uses it in an open txn + RtAccum_t * AcquireAccum ( CSphString * sError=NULL ); + + RtSegment_t * MergeSegments ( const RtSegment_t * pSeg1, const RtSegment_t * pSeg2, const CSphVector * pAccKlist ); + const RtWord_t * CopyWord ( RtSegment_t * pDst, RtWordWriter_t & tOutWord, const RtSegment_t * pSrc, const RtWord_t * pWord, RtWordReader_t & tInWord, const CSphVector * pAccKlist ); + void MergeWord ( RtSegment_t * pDst, const RtSegment_t * pSrc1, const RtWord_t * pWord1, const RtSegment_t * pSrc2, const RtWord_t * pWord2, RtWordWriter_t & tOut, const CSphVector * pAccKlist ); + void CopyDoc ( RtSegment_t * pSeg, RtDocWriter_t & tOutDoc, RtWord_t * pWord, const RtSegment_t * pSrc, const RtDoc_t * pDoc ); + + void SaveMeta ( int iDiskChunks ); + void SaveDiskHeader ( const char * sFilename, int iCheckpoints, SphOffset_t iCheckpointsPosition, DWORD uKillListSize, DWORD uMinMaxSize, bool bForceID32=false ) const; + void SaveDiskData ( const char * sFilename ) const; + template < typename DOCID, typename WORDID > + void SaveDiskDataImpl ( const char * sFilename ) const; + void SaveDiskChunk (); + CSphIndex * LoadDiskChunk ( int iChunk ); + bool LoadRamChunk ( DWORD uVersion ); + bool SaveRamChunk (); + +public: +#if USE_WINDOWS +#pragma warning(push,1) +#pragma warning(disable:4100) +#endif + virtual SphAttr_t * GetKillList () const { return NULL; } + virtual int GetKillListSize () const { return 0; } + virtual bool HasDocid ( SphDocID_t ) const { assert ( 0 ); return false; } + + virtual int Build ( const CSphVector & dSources, int iMemoryLimit, int iWriteBuffer ) { return 0; } + virtual bool Merge ( CSphIndex * pSource, CSphVector & dFilters, bool bMergeKillLists ) { return false; } + + virtual bool Prealloc ( bool bMlock, bool bStripPath, CSphString & sWarning ); + virtual void Dealloc () {} + virtual bool Preread (); + virtual void SetBase ( const char * sNewBase ) {} + virtual bool Rename ( const char * sNewBase ) { return true; } + virtual bool Lock () { return true; } + virtual void Unlock () {} + virtual bool Mlock () { return true; } + virtual void PostSetup(); + virtual bool IsRT() const { return true; } + + virtual int UpdateAttributes ( const CSphAttrUpdate & tUpd, int iIndex, CSphString & sError ); + virtual bool SaveAttributes () { return true; } + virtual DWORD GetAttributeStatus () const { return 0; } + + virtual void DebugDumpHeader ( FILE * fp, const char * sHeaderName, bool bConfig ) {} + virtual void DebugDumpDocids ( FILE * fp ) {} + virtual void DebugDumpHitlist ( FILE * fp, const char * sKeyword, bool bID ) {} + virtual int DebugCheck ( FILE * fp ); +#if USE_WINDOWS +#pragma warning(pop) +#endif + +public: + virtual bool EarlyReject ( CSphQueryContext * pCtx, CSphMatch & ) const; + virtual const CSphSourceStats & GetStats () const { return m_tStats; } + + virtual bool MultiQuery ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const; + virtual bool MultiQueryEx ( int iQueries, const CSphQuery * ppQueries, CSphQueryResult ** ppResults, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const; + virtual bool GetKeywords ( CSphVector & dKeywords, const char * szQuery, bool bGetStats, CSphString & sError ) const; + + void CopyDocinfo ( CSphMatch & tMatch, const DWORD * pFound ) const; + const CSphRowitem * FindDocinfo ( const RtSegment_t * pSeg, SphDocID_t uDocID ) const; + + bool RtQwordSetup ( RtQword_t * pQword, RtSegment_t * pSeg ) const; + static bool RtQwordSetupSegment ( RtQword_t * pQword, RtSegment_t * pSeg, bool bSetup ); + + CSphDict * SetupExactDict ( CSphScopedPtr & tContainer, CSphDict * pPrevDict, ISphTokenizer * pTokenizer ) const; + + virtual const CSphSchema & GetMatchSchema () const { return m_tOutboundSchema; } + virtual const CSphSchema & GetInternalSchema () const { return m_tSchema; } + int64_t GetUsedRam () const; + +protected: + CSphSourceStats m_tStats; +}; + + +RtIndex_t::RtIndex_t ( const CSphSchema & tSchema, const char * sIndexName, int64_t iRamSize, const char * sPath ) + : ISphRtIndex ( sIndexName, "rtindex" ) + , m_iStride ( DOCINFO_IDSIZE + tSchema.GetRowSize() ) + , m_iRamSize ( iRamSize ) + , m_sPath ( sPath ) + , m_bPathStripped ( false ) + , m_iLockFD ( -1 ) + , m_iSavedTID ( m_iTID ) + , m_iSavedRam ( 0 ) + , m_tmSaved ( sphMicroTimer() ) +{ + MEMORY ( SPH_MEM_IDX_RT ); + + m_tSchema = tSchema; + + // schemes strings attributes fix up + bool bReplaceSchema = false; + for ( int i=0; i=0 ) + ::close ( m_iLockFD ); + + g_pBinlog->NotifyIndexFlush ( m_sIndexName.cstr(), m_iTID, true ); + + tmSave = sphMicroTimer() - tmSave; + if ( tmSave>=1000 ) + { + sphInfo ( "rt: index %s: ramchunk saved in %d.%03d sec", + m_sIndexName.cstr(), (int)(tmSave/1000000), (int)((tmSave/1000)%1000) ); + } +} + +#define SPH_THRESHOLD_SAVE_RAM ( 64*1024*1024 ) +static int64_t g_iRtFlushPeriod = 10*60*60; // default period is 10 hours + +void RtIndex_t::CheckRamFlush () +{ + int64_t tmSave = sphMicroTimer(); + + if ( m_iTID<=m_iSavedTID || ( tmSave-m_tmSaved )/1000000NotifyIndexFlush ( m_sIndexName.cstr(), m_iTID, false ); + + int64_t iWasTID = m_iSavedTID; + int64_t iWasRam = m_iSavedRam; + int64_t tmDelta = sphMicroTimer() - m_tmSaved; + m_iSavedTID = m_iTID; + m_iSavedRam = iUsedRam; + m_tmSaved = sphMicroTimer(); + + m_tWriterMutex.Unlock(); + + tmSave = sphMicroTimer() - tmSave; + sphInfo ( "rt auto-saved (index='%s', last TID="INT64_FMT", current TID="INT64_FMT", last ram=%d.%03d Mb, current ram=%d.%03d Mb, time delta=%d sec, took=%d.%03d sec)" + , m_sIndexName.cstr(), iWasTID, m_iTID, (int)(iWasRam/1024/1024), (int)((iWasRam/1024)%1000) + , (int)(m_iSavedRam/1024/1024), (int)((m_iSavedRam/1024)%1000) + , (int) (tmDelta/1000000), (int)(tmSave/1000000), (int)((tmSave/1000)%1000) ); +} + +int64_t RtIndex_t::GetUsedRam () const +{ + int64_t iTotal = 0; + ARRAY_FOREACH ( i, m_pSegments ) + iTotal += m_pSegments[i]->GetUsedRam(); + + return iTotal; +} + +////////////////////////////////////////////////////////////////////////// +// INDEXING +////////////////////////////////////////////////////////////////////////// + +class CSphSource_StringVector : public CSphSource_Document +{ +public: + explicit CSphSource_StringVector ( int iFields, const char ** ppFields, const CSphSchema & tSchema ); + virtual ~CSphSource_StringVector () {} + + virtual bool Connect ( CSphString & ); + virtual void Disconnect (); + + virtual bool HasAttrsConfigured () { return false; } + virtual bool IterateStart ( CSphString & ) { return true; } + + virtual bool IterateMultivaluedStart ( int, CSphString & ) { return false; } + virtual bool IterateMultivaluedNext () { return false; } + + virtual bool IterateFieldMVAStart ( int, CSphString & ) { return false; } + virtual bool IterateFieldMVANext () { return false; } + + virtual bool IterateKillListStart ( CSphString & ) { return false; } + virtual bool IterateKillListNext ( SphDocID_t & ) { return false; } + + virtual BYTE ** NextDocument ( CSphString & ) { return m_dFields.Begin(); } + +protected: + CSphVector m_dFields; + CSphVector m_dHits; +}; + + +CSphSource_StringVector::CSphSource_StringVector ( int iFields, const char ** ppFields, const CSphSchema & tSchema ) + : CSphSource_Document ( "$stringvector" ) +{ + m_tSchema = tSchema; + + m_dFields.Resize ( 1+iFields ); + for ( int i=0; i & dMvas, CSphString & sError ) +{ + assert ( g_bRTChangesAllowed ); + + if ( !tDoc.m_iDocID ) + return true; + + MEMORY ( SPH_MEM_IDX_RT ); + + if ( !bReplace ) + { + m_tRwlock.ReadLock (); + ARRAY_FOREACH ( i, m_pSegments ) + if ( FindDocinfo ( m_pSegments[i], tDoc.m_iDocID ) + && !m_pSegments[i]->m_dKlist.BinarySearch ( tDoc.m_iDocID ) ) + { + m_tRwlock.Unlock (); + sError.SetSprintf ( "duplicate id '"UINT64_FMT"'", (uint64_t)tDoc.m_iDocID ); + return false; // already exists and not deleted; INSERT fails + } + m_tRwlock.Unlock (); + } + + CSphScopedPtr pTokenizer ( m_pTokenizer->Clone ( false ) ); // avoid race + CSphScopedPtr tDictCloned ( NULL ); + CSphDict * pDictBase = m_pDict; + if ( pDictBase->HasState() ) + { + tDictCloned = pDictBase = pDictBase->Clone(); + } + CSphSource_StringVector tSrc ( iFields, ppFields, m_tOutboundSchema ); + tSrc.Setup ( m_tSettings ); + tSrc.SetTokenizer ( pTokenizer.Ptr() ); + tSrc.SetDict ( pDictBase ); + if ( !tSrc.Connect ( m_sLastError ) ) + return false; + + tSrc.m_tDocInfo.Clone ( tDoc, m_tOutboundSchema.GetRowSize() ); + + if ( !tSrc.IterateStart ( sError ) || !tSrc.IterateDocument ( sError ) ) + return false; + + ISphHits * pHits = tSrc.IterateHits ( sError ); + + return AddDocument ( pHits, tDoc, ppStr, dMvas, sError ); +} + + +void AccumCleanup ( void * pArg ) +{ + RtAccum_t * pAcc = (RtAccum_t *) pArg; + SafeDelete ( pAcc ); +} + + +RtAccum_t * RtIndex_t::AcquireAccum ( CSphString * sError ) +{ + RtAccum_t * pAcc = NULL; + + // check that no other index is holding the acc + pAcc = (RtAccum_t*) sphThreadGet ( g_tTlsAccumKey ); + if ( pAcc && pAcc->m_pIndex!=NULL && pAcc->m_pIndex!=this ) + { + if ( sError ) + sError->SetSprintf ( "current txn is working with another index ('%s')", pAcc->m_pIndex->m_tSchema.m_sName.cstr() ); + return NULL; + } + + if ( !pAcc ) + { + pAcc = new RtAccum_t (); + sphThreadSet ( g_tTlsAccumKey, pAcc ); + sphThreadOnExit ( AccumCleanup, pAcc ); + } + + assert ( pAcc->m_pIndex==NULL || pAcc->m_pIndex==this ); + pAcc->m_pIndex = this; + return pAcc; +} + +bool RtIndex_t::AddDocument ( ISphHits * pHits, const CSphMatch & tDoc, const char ** ppStr, const CSphVector & dMvas, CSphString & sError ) +{ + assert ( g_bRTChangesAllowed ); + + RtAccum_t * pAcc = AcquireAccum ( &sError ); + if ( pAcc ) + pAcc->AddDocument ( pHits, tDoc, m_tOutboundSchema.GetRowSize(), ppStr, dMvas ); + + return ( pAcc!=NULL ); +} + + +RtAccum_t::RtAccum_t () + : m_pIndex ( NULL ) + , m_iAccumDocs ( 0 ) +{ + m_dStrings.Add ( 0 ); + m_dMvas.Add ( 0 ); +} + + +void RtAccum_t::AddDocument ( ISphHits * pHits, const CSphMatch & tDoc, int iRowSize, const char ** ppStr, const CSphVector & dMvas ) +{ + MEMORY ( SPH_MEM_IDX_RT_ACCUM ); + + // schedule existing copies for deletion + m_dAccumKlist.Add ( tDoc.m_iDocID ); + + // reserve some hit space on first use + if ( pHits && pHits->Length() && !m_dAccum.GetLength() ) + m_dAccum.Reserve ( 128*1024 ); + + // accumulate row data; expect fully dynamic rows + assert ( !tDoc.m_pStatic ); + assert (!( !tDoc.m_pDynamic && iRowSize!=0 )); + assert (!( tDoc.m_pDynamic && (int)tDoc.m_pDynamic[-1]!=iRowSize )); + + m_dAccumRows.Resize ( m_dAccumRows.GetLength() + DOCINFO_IDSIZE + iRowSize ); + CSphRowitem * pRow = &m_dAccumRows [ m_dAccumRows.GetLength() - DOCINFO_IDSIZE - iRowSize ]; + DOCINFOSETID ( pRow, tDoc.m_iDocID ); + + CSphRowitem * pAttrs = DOCINFO2ATTRS(pRow); + for ( int i=0; iGetInternalSchema(); + int iAttr = 0; + for ( int i=0; i=1 ); + m_dStrings.Resize ( iOff + iLenPacked + iLen ); + memcpy ( &m_dStrings[iOff], dLen, iLenPacked ); + memcpy ( &m_dStrings[iOff+iLenPacked], pStr, iLen ); + sphSetRowAttr ( pAttrs, tColumn.m_tLocator, iOff ); + } else + { + sphSetRowAttr ( pAttrs, tColumn.m_tLocator, 0 ); + } + } else if ( tColumn.m_eAttrType==SPH_ATTR_UINT32SET || tColumn.m_eAttrType==SPH_ATTR_UINT64SET ) + { + assert ( m_dMvas.GetLength() ); + int iCount = dMvas[iMva]; + if ( iCount ) + { + int iDst = m_dMvas.GetLength(); + m_dMvas.Resize ( iDst+iCount+1 ); + memcpy ( m_dMvas.Begin()+iDst, dMvas.Begin()+iMva, (iCount+1)*sizeof(dMvas[0]) ); + sphSetRowAttr ( pAttrs, tColumn.m_tLocator, iDst ); + } else + { + sphSetRowAttr ( pAttrs, tColumn.m_tLocator, 0 ); + } + + iMva += iCount+1; + } + } + + // accumulate hits + int iHits = 0; + if ( pHits && pHits->Length() ) + { + iHits = pHits->Length(); + for ( const CSphWordHit * pHit = pHits->First(); pHit<=pHits->Last(); pHit++ ) + m_dAccum.Add ( *pHit ); + } + m_dPerDocHitsCount.Add ( iHits ); + + m_iAccumDocs++; +} + + +RtSegment_t * RtAccum_t::CreateSegment ( int iRowSize ) +{ + if ( !m_iAccumDocs ) + return NULL; + + MEMORY ( SPH_MEM_IDX_RT_ACCUM ); + + RtSegment_t * pSeg = new RtSegment_t (); + + CSphWordHit tClosingHit; + tClosingHit.m_iWordID = WORDID_MAX; + tClosingHit.m_iDocID = DOCID_MAX; + tClosingHit.m_iWordPos = EMPTY_HIT; + m_dAccum.Add ( tClosingHit ); + + RtDoc_t tDoc; + tDoc.m_uDocID = 0; + tDoc.m_dFields.Unset(); + tDoc.m_uHits = 0; + tDoc.m_uHit = 0; + + RtWord_t tWord; + tWord.m_uWordID = 0; + tWord.m_uDocs = 0; + tWord.m_uHits = 0; + tWord.m_uDoc = 0; + + RtDocWriter_t tOutDoc ( pSeg ); + RtWordWriter_t tOutWord ( pSeg ); + RtHitWriter_t tOutHit ( pSeg ); + + Hitpos_t uEmbeddedHit = EMPTY_HIT; + ARRAY_FOREACH ( i, m_dAccum ) + { + const CSphWordHit & tHit = m_dAccum[i]; + + // new keyword or doc; flush current doc + if ( tHit.m_iWordID!=tWord.m_uWordID || tHit.m_iDocID!=tDoc.m_uDocID ) + { + if ( tDoc.m_uDocID ) + { + tWord.m_uDocs++; + tWord.m_uHits += tDoc.m_uHits; + + if ( uEmbeddedHit ) + { + assert ( tDoc.m_uHits==1 ); + tDoc.m_uHit = uEmbeddedHit; + } + + tOutDoc.ZipDoc ( tDoc ); + tDoc.m_dFields.Unset(); + tDoc.m_uHits = 0; + tDoc.m_uHit = tOutHit.ZipHitPtr(); + } + + tDoc.m_uDocID = tHit.m_iDocID; + tOutHit.ZipRestart (); + uEmbeddedHit = 0; + } + + // new keyword; flush current keyword + if ( tHit.m_iWordID!=tWord.m_uWordID ) + { + tOutDoc.ZipRestart (); + if ( tWord.m_uWordID ) + tOutWord.ZipWord ( tWord ); + + tWord.m_uWordID = tHit.m_iWordID; + tWord.m_uDocs = 0; + tWord.m_uHits = 0; + tWord.m_uDoc = tOutDoc.ZipDocPtr(); + } + + // just a new hit + if ( !tDoc.m_uHits ) + { + uEmbeddedHit = tHit.m_iWordPos; + } else + { + if ( uEmbeddedHit ) + { + tOutHit.ZipHit ( uEmbeddedHit ); + uEmbeddedHit = 0; + } + + tOutHit.ZipHit ( tHit.m_iWordPos ); + } + + tDoc.m_dFields.Set ( HITMAN::GetField ( tHit.m_iWordPos ) ); + tDoc.m_uHits++; + } + + pSeg->m_iRows = m_iAccumDocs; + pSeg->m_iAliveRows = m_iAccumDocs; + + // copy and sort attributes + int iStride = DOCINFO_IDSIZE + iRowSize; + pSeg->m_dRows.SwapData ( m_dAccumRows ); + pSeg->m_dStrings.SwapData ( m_dStrings ); + pSeg->m_dMvas.SwapData ( m_dMvas ); + sphSortDocinfos ( pSeg->m_dRows.Begin(), pSeg->m_dRows.GetLength()/iStride, iStride ); + + // done + return pSeg; +} + + +struct AccumDocHits_t +{ + SphDocID_t m_uDocid; + int m_iDocIndex; + int m_iHitIndex; + int m_iHitCount; +}; + + +struct CmpDocHitIndex_t +{ + inline bool IsLess ( const AccumDocHits_t & a, const AccumDocHits_t & b ) const + { + return ( a.m_uDocid dDocHits ( m_dPerDocHitsCount.GetLength() ); + int iStride = DOCINFO_IDSIZE + iRowSize; + + int iHitIndex = 0; + CSphRowitem * pRow = m_dAccumRows.Begin(); + for ( int i=0; i=0; iHit-- ) + { + if ( !dDocHits[iHit].m_iHitCount ) + continue; + + int iFrom = dDocHits[iHit].m_iHitIndex; + int iCount = dDocHits[iHit].m_iHitCount; + if ( iFrom+iCount=0; iDoc-- ) + { + int iDst = dDocHits[iDoc].m_iDocIndex*iStride; + int iSrc = iDst+iStride; + while ( iSrc * pAccKlist ) +{ + RtDocReader_t tInDoc ( pSrc, *pWord ); + RtDocWriter_t tOutDoc ( pDst ); + + RtWord_t tNewWord = *pWord; + tNewWord.m_uDoc = tOutDoc.ZipDocPtr(); + + // if flag is there, acc must be there + // however, NOT vice versa (newly created segments are unaffected by TLS klist) + assert (!( pSrc->m_bTlsKlist && !pAccKlist )); +#if 0 + // index *must* be holding acc during merge + assert ( !pAcc || pAcc->m_pIndex==this ); +#endif + + // copy docs + for ( ;; ) + { + const RtDoc_t * pDoc = tInDoc.UnzipDoc(); + if ( !pDoc ) + break; + + // apply klist + bool bKill = ( pSrc->m_dKlist.BinarySearch ( pDoc->m_uDocID )!=NULL ); + if ( !bKill && pSrc->m_bTlsKlist ) + bKill = ( pAccKlist->BinarySearch ( pDoc->m_uDocID )!=NULL ); + + if ( bKill ) + { + tNewWord.m_uDocs--; + tNewWord.m_uHits -= pDoc->m_uHits; + continue; + } + + // short route, single embedded hit + if ( pDoc->m_uHits==1 ) + { + tOutDoc.ZipDoc ( *pDoc ); + continue; + } + + // long route, copy hits + RtHitWriter_t tOutHit ( pDst ); + RtHitReader_t tInHit ( pSrc, pDoc ); + + RtDoc_t tDoc = *pDoc; + tDoc.m_uHit = tOutHit.ZipHitPtr(); + + // OPTIMIZE? decode+memcpy? + for ( DWORD uValue=tInHit.UnzipHit(); uValue; uValue=tInHit.UnzipHit() ) + tOutHit.ZipHit ( uValue ); + + // copy doc + tOutDoc.ZipDoc ( tDoc ); + } + + // append word to the dictionary + if ( tNewWord.m_uDocs ) + tOutWord.ZipWord ( tNewWord ); + + // move forward + return tInWord.UnzipWord (); +} + + +void RtIndex_t::CopyDoc ( RtSegment_t * pSeg, RtDocWriter_t & tOutDoc, RtWord_t * pWord, const RtSegment_t * pSrc, const RtDoc_t * pDoc ) +{ + pWord->m_uDocs++; + pWord->m_uHits += pDoc->m_uHits; + + if ( pDoc->m_uHits==1 ) + { + tOutDoc.ZipDoc ( *pDoc ); + return; + } + + RtHitWriter_t tOutHit ( pSeg ); + RtHitReader_t tInHit ( pSrc, pDoc ); + + RtDoc_t tDoc = *pDoc; + tDoc.m_uHit = tOutHit.ZipHitPtr(); + tOutDoc.ZipDoc ( tDoc ); + + // OPTIMIZE? decode+memcpy? + for ( DWORD uValue=tInHit.UnzipHit(); uValue; uValue=tInHit.UnzipHit() ) + tOutHit.ZipHit ( uValue ); +} + + +void RtIndex_t::MergeWord ( RtSegment_t * pSeg, const RtSegment_t * pSrc1, const RtWord_t * pWord1, const RtSegment_t * pSrc2, const RtWord_t * pWord2, RtWordWriter_t & tOut, const CSphVector * pAccKlist ) +{ + assert ( pWord1->m_uWordID==pWord2->m_uWordID ); + + RtDocWriter_t tOutDoc ( pSeg ); + + RtWord_t tWord; + tWord.m_uWordID = pWord1->m_uWordID; + tWord.m_uDocs = 0; + tWord.m_uHits = 0; + tWord.m_uDoc = tOutDoc.ZipDocPtr(); + + RtDocReader_t tIn1 ( pSrc1, *pWord1 ); + RtDocReader_t tIn2 ( pSrc2, *pWord2 ); + const RtDoc_t * pDoc1 = tIn1.UnzipDoc(); + const RtDoc_t * pDoc2 = tIn2.UnzipDoc(); + + while ( pDoc1 || pDoc2 ) + { + if ( pDoc1 && pDoc2 && pDoc1->m_uDocID==pDoc2->m_uDocID ) + { + // dupe, must (!) be killed in the first segment, might be in both +#if 0 + assert ( pSrc1->m_dKlist.BinarySearch ( pDoc1->m_uDocID ) + || ( pSrc1->m_bTlsKlist && pAcc && pAcc->m_dAccumKlist.BinarySearch ( pDoc1->m_uDocID ) ) ); +#endif + if ( !pSrc2->m_dKlist.BinarySearch ( pDoc2->m_uDocID ) + && ( !pSrc1->m_bTlsKlist || !pSrc2->m_bTlsKlist || !pAccKlist->BinarySearch ( pDoc2->m_uDocID ) ) ) + CopyDoc ( pSeg, tOutDoc, &tWord, pSrc2, pDoc2 ); + pDoc1 = tIn1.UnzipDoc(); + pDoc2 = tIn2.UnzipDoc(); + + } else if ( pDoc1 && ( !pDoc2 || pDoc1->m_uDocID < pDoc2->m_uDocID ) ) + { + // winner from the first segment + if ( !pSrc1->m_dKlist.BinarySearch ( pDoc1->m_uDocID ) + && ( !pSrc1->m_bTlsKlist || !pAccKlist->BinarySearch ( pDoc1->m_uDocID ) ) ) + CopyDoc ( pSeg, tOutDoc, &tWord, pSrc1, pDoc1 ); + pDoc1 = tIn1.UnzipDoc(); + + } else + { + // winner from the second segment + assert ( pDoc2 && ( !pDoc1 || pDoc2->m_uDocID < pDoc1->m_uDocID ) ); + if ( !pSrc2->m_dKlist.BinarySearch ( pDoc2->m_uDocID ) + && ( !pSrc2->m_bTlsKlist || !pAccKlist->BinarySearch ( pDoc2->m_uDocID ) ) ) + CopyDoc ( pSeg, tOutDoc, &tWord, pSrc2, pDoc2 ); + pDoc2 = tIn2.UnzipDoc(); + } + } + + if ( tWord.m_uDocs ) + tOut.ZipWord ( tWord ); +} + + +#if PARANOID +static void CheckSegmentRows ( const RtSegment_t * pSeg, int iStride ) +{ + const CSphVector & dRows = pSeg->m_dRows; // shortcut + for ( int i=iStride; i DOCINFO2ID ( &dRows[i-iStride] ) ); +} +#endif + +template < typename DOCID = SphDocID_t > +struct RtRowIterator_tmpl : public ISphNoncopyable +{ +protected: + const CSphRowitem * m_pRow; + const CSphRowitem * m_pRowMax; + const DOCID * m_pKlist; + const DOCID * m_pKlistMax; + const DOCID * m_pTlsKlist; + const DOCID * m_pTlsKlistMax; + const int m_iStride; + +public: + explicit RtRowIterator_tmpl ( const RtSegment_t * pSeg, int iStride, bool bWriter, const CSphVector * pAccKlist ) + : m_pRow ( pSeg->m_dRows.Begin() ) + , m_pRowMax ( pSeg->m_dRows.Begin() + pSeg->m_dRows.GetLength() ) + , m_pKlist ( NULL ) + , m_pKlistMax ( NULL ) + , m_pTlsKlist ( NULL ) + , m_pTlsKlistMax ( NULL ) + , m_iStride ( iStride ) + { + if ( pSeg->m_dKlist.GetLength() ) + { + m_pKlist = ( const DOCID* ) pSeg->m_dKlist.Begin(); + m_pKlistMax = m_pKlist + pSeg->m_dKlist.GetLength(); + } + + // FIXME? OPTIMIZE? must not scan tls (open txn) in readers; can implement lighter iterator + // FIXME? OPTIMIZE? maybe we should just rely on the segment order and don't scan tls klist here + if ( bWriter && pSeg->m_bTlsKlist && pAccKlist && pAccKlist->GetLength() ) + { + m_pTlsKlist = pAccKlist->Begin(); + m_pTlsKlistMax = m_pTlsKlist + pAccKlist->GetLength(); + } + } + + const CSphRowitem * GetNextAliveRow () + { + // while there are rows and k-list entries + while ( m_pRow(m_pRow); + + // check if segment k-list kills it + while ( m_pKlist=m_pRowMax ) + return NULL; + + // got it, and it's alive! + m_pRow += m_iStride; + return m_pRow-m_iStride; + } +}; + +typedef RtRowIterator_tmpl<> RtRowIterator_t; + +#ifdef PARANOID // sanity check in PARANOID mode +template +void VerifyEmptyStrings ( const CSphTightVector & dStorage, const CSphSchema & tSchema, const CSphRowitem * pRow ) +{ + if ( dStorage.GetLength()>1 ) + return; + + const DWORD * pAttr = DOCINFO2ATTRS_T(pRow); + for ( int i=0; i & dDst ) +{ + assert ( pSrc ); + assert ( dDst.GetLength()>=1 ); + const BYTE * pStr = NULL; + const int iLen = sphUnpackStr ( pSrc, &pStr ); + assert ( iLen>0 ); + assert ( pStr ); + + const DWORD uOff = dDst.GetLength(); + const DWORD uWriteLen = iLen + ( pStr - pSrc ); // actual length = strings content length + packed length of string + dDst.Resize ( uOff + uWriteLen ); + memcpy ( dDst.Begin() + uOff, pSrc, uWriteLen ); + return uOff; +} + +static DWORD CopyMva ( const DWORD * pSrc, CSphTightVector & dDst ) +{ + assert ( pSrc ); + assert ( dDst.GetLength()>=1 ); + + DWORD uCount = *pSrc; + assert ( uCount ); + + DWORD iLen = dDst.GetLength(); + dDst.Resize ( iLen+uCount+1 ); + memcpy ( dDst.Begin()+iLen, pSrc, ( uCount+1 )*sizeof(DWORD) ); + return iLen; +} + + +void CopyDocid ( SphDocID_t uDocid, CSphTightVector & dDst ) +{ + int iLen = dDst.GetLength(); + dDst.Resize ( iLen + sizeof(uDocid) ); + DOCINFOSETID ( dDst.Begin()+iLen, uDocid ); +} + + +static void ExtractLocators ( const CSphSchema & tSchema, ESphAttr eAttrType, CSphVector & dLocators ) +{ + for ( int i=0; i m_dLocators; + +public: + explicit StorageStringWriter_t ( const CSphSchema & tSchema, CSphWriter & tDst ) + : m_tDst ( tDst ) + { + ExtractLocators ( tSchema, SPH_ATTR_STRING, m_dLocators ); + } + const CSphVector & GetLocators () const { return m_dLocators; } + void SetDocid ( SphDocID_t ) {} + + DWORD CopyAttr ( const BYTE * pSrc ) + { + assert ( m_tDst.GetPos()>0 && m_tDst.GetPos()<( I64C(1)<<32 ) ); // should be 32 bit offset + + const BYTE * pStr = NULL; + const int iLen = sphUnpackStr ( pSrc, &pStr ); + assert ( iLen && pStr ); + + DWORD uAttr = (DWORD)m_tDst.GetPos(); + const int iWriteLen = iLen + ( pStr - pSrc ); + m_tDst.PutBytes ( pSrc, iWriteLen ); + return uAttr; + } +}; + + +class StorageStringVector_t : ISphNoncopyable +{ +private: + CSphTightVector & m_dDst; + CSphVector m_dLocators; + +public: + explicit StorageStringVector_t ( const CSphSchema & tSchema, CSphTightVector & dDst ) + : m_dDst ( dDst ) + { + ExtractLocators ( tSchema, SPH_ATTR_STRING, m_dLocators ); + } + const CSphVector & GetLocators () const { return m_dLocators; } + void SetDocid ( SphDocID_t ) {} + + DWORD CopyAttr ( const BYTE * pSrc ) + { + assert ( m_dDst.GetLength()>0 && m_dDst.GetLength()<( I64C(1)<<32 ) ); // should be 32 bit offset + return CopyPackedString ( pSrc, m_dDst ); + } +}; + + +class StorageMvaWriter_t : ISphNoncopyable +{ +private: + CSphWriter & m_tDst; + CSphVector m_dLocators; + +public: + explicit StorageMvaWriter_t ( const CSphSchema & tSchema, CSphWriter & tDst ) + : m_tDst ( tDst ) + { + ExtractLocators ( tSchema, SPH_ATTR_UINT32SET, m_dLocators ); + ExtractLocators ( tSchema, SPH_ATTR_UINT64SET, m_dLocators ); + } + const CSphVector & GetLocators () const { return m_dLocators; } + + void SetDocid ( SphDocID_t uDocid ) + { + m_tDst.PutDocid ( uDocid ); + } + + DWORD CopyAttr ( const DWORD * pSrc ) + { + assert ( m_tDst.GetPos()>0 && m_tDst.GetPos()<( I64C(1)<<32 ) ); // should be 32 bit offset + + DWORD uCount = *pSrc; + assert ( uCount ); + + SphOffset_t uOff = m_tDst.GetPos(); + assert ( ( uOff%sizeof(DWORD) )==0 ); + m_tDst.PutBytes ( pSrc, ( uCount+1 )*sizeof(DWORD) ); + + return MVA_DOWNSIZE ( uOff/sizeof(DWORD) ); + } +}; + + +class StorageMvaVector_t : ISphNoncopyable +{ +private: + CSphTightVector & m_dDst; + CSphVector m_dLocators; + +public: + explicit StorageMvaVector_t ( const CSphSchema & tSchema, CSphTightVector & dDst ) + : m_dDst ( dDst ) + { + ExtractLocators ( tSchema, SPH_ATTR_UINT32SET, m_dLocators ); + ExtractLocators ( tSchema, SPH_ATTR_UINT64SET, m_dLocators ); + } + const CSphVector & GetLocators () const { return m_dLocators; } + + void SetDocid ( SphDocID_t uDocid ) + { + CopyDocid ( uDocid, m_dDst ); + } + + DWORD CopyAttr ( const DWORD * pSrc ) + { + assert ( m_dDst.GetLength()>0 && m_dDst.GetLength()<( I64C(1)<<32 ) ); // should be 32 bit offset + return CopyMva ( pSrc, m_dDst ); + } +}; + + +template +void CopyFixupStorageAttrs ( const CSphTightVector & dSrc, STORAGE & tStorage, CSphRowitem * pRow ) +{ + const CSphVector & dLocators = tStorage.GetLocators(); + if ( !dLocators.GetLength() ) + return; + + // store string\mva attr for this row + SphDocID_t uDocid = DOCINFO2ID ( pRow ); + DWORD * pAttr = DOCINFO2ATTRS_T( pRow ); + bool bIdSet = false; + ARRAY_FOREACH ( i, dLocators ) + { + const SphAttr_t uOff = sphGetRowAttr ( pAttr, dLocators[i] ); + if ( !uOff ) + continue; + + assert ( uOff && uOff * pAccKlist ) +{ + if ( pSeg1->m_iTag > pSeg2->m_iTag ) + Swap ( pSeg1, pSeg2 ); + + RtSegment_t * pSeg = new RtSegment_t (); + + //////////////////// + // merge attributes + //////////////////// + + // check that all the IDs are in proper asc order +#if PARANOID + CheckSegmentRows ( pSeg1, m_iStride ); + CheckSegmentRows ( pSeg2, m_iStride ); +#endif + + // just a shortcut + CSphVector & dRows = pSeg->m_dRows; + CSphTightVector & dStrings = pSeg->m_dStrings; + CSphTightVector & dMvas = pSeg->m_dMvas; + + // we might need less because of dupes, but we can not know yet + dRows.Reserve ( pSeg1->m_dRows.GetLength() + pSeg2->m_dRows.GetLength() ); + + // as each segment has dummy zero we reserve less + assert ( pSeg1->m_dStrings.GetLength() + pSeg2->m_dStrings.GetLength()>=2 ); + dStrings.Reserve ( pSeg1->m_dStrings.GetLength() + pSeg2->m_dStrings.GetLength() - 2 ); + assert ( pSeg1->m_dMvas.GetLength() + pSeg2->m_dMvas.GetLength()>=2 ); + dMvas.Reserve ( pSeg1->m_dMvas.GetLength() + pSeg2->m_dMvas.GetLength() - 2 ); + + StorageStringVector_t tStorageString ( m_tSchema, dStrings ); + StorageMvaVector_t tStorageMva ( m_tSchema, dMvas ); + + RtRowIterator_t tIt1 ( pSeg1, m_iStride, true, pAccKlist ); + RtRowIterator_t tIt2 ( pSeg2, m_iStride, true, pAccKlist ); + + const CSphRowitem * pRow1 = tIt1.GetNextAliveRow(); + const CSphRowitem * pRow2 = tIt2.GetNextAliveRow(); + + while ( pRow1 || pRow2 ) + { + if ( !pRow2 || ( pRow1 && pRow2 && DOCINFO2ID(pRow1) ( pSeg1->m_dStrings, tStorageString, pDstRow ); + CopyFixupStorageAttrs ( pSeg1->m_dMvas, tStorageMva, pDstRow ); + pRow1 = tIt1.GetNextAliveRow(); + } else + { + assert ( pRow2 ); + assert ( !pRow1 || ( DOCINFO2ID(pRow1)!=DOCINFO2ID(pRow2) ) ); // all dupes must be killed and skipped by the iterator + for ( int i=0; i ( pSeg2->m_dStrings, tStorageString, pDstRow ); + CopyFixupStorageAttrs ( pSeg2->m_dMvas, tStorageMva, pDstRow ); + pRow2 = tIt2.GetNextAliveRow(); + } + pSeg->m_iRows++; + pSeg->m_iAliveRows++; + } + + assert ( pSeg->m_iRows*m_iStride==pSeg->m_dRows.GetLength() ); +#if PARANOID + CheckSegmentRows ( pSeg, m_iStride ); +#endif + + ////////////////// + // merge keywords + ////////////////// + + pSeg->m_dWords.Reserve ( pSeg1->m_dWords.GetLength() + pSeg2->m_dWords.GetLength() ); + pSeg->m_dDocs.Reserve ( pSeg1->m_dDocs.GetLength() + pSeg2->m_dDocs.GetLength() ); + pSeg->m_dHits.Reserve ( pSeg1->m_dHits.GetLength() + pSeg2->m_dHits.GetLength() ); + + RtWordWriter_t tOut ( pSeg ); + RtWordReader_t tIn1 ( pSeg1 ); + RtWordReader_t tIn2 ( pSeg2 ); + const RtWord_t * pWords1 = tIn1.UnzipWord (); + const RtWord_t * pWords2 = tIn2.UnzipWord (); + + // merge while there are common words + for ( ;; ) + { + while ( pWords1 && pWords2 && pWords1->m_uWordID!=pWords2->m_uWordID ) + if ( pWords1->m_uWordID < pWords2->m_uWordID ) + pWords1 = CopyWord ( pSeg, tOut, pSeg1, pWords1, tIn1, pAccKlist ); + else + pWords2 = CopyWord ( pSeg, tOut, pSeg2, pWords2, tIn2, pAccKlist ); + + if ( !pWords1 || !pWords2 ) + break; + + assert ( pWords1 && pWords2 && pWords1->m_uWordID==pWords2->m_uWordID ); + MergeWord ( pSeg, pSeg1, pWords1, pSeg2, pWords2, tOut, pAccKlist ); + pWords1 = tIn1.UnzipWord(); + pWords2 = tIn2.UnzipWord(); + } + + // copy tails + while ( pWords1 ) pWords1 = CopyWord ( pSeg, tOut, pSeg1, pWords1, tIn1, pAccKlist ); + while ( pWords2 ) pWords2 = CopyWord ( pSeg, tOut, pSeg2, pWords2, tIn2, pAccKlist ); + + assert ( pSeg->m_dRows.GetLength() ); + assert ( pSeg->m_iRows ); + assert ( pSeg->m_iAliveRows==pSeg->m_iRows ); + return pSeg; +} + + +struct CmpSegments_fn +{ + inline bool IsLess ( const RtSegment_t * a, const RtSegment_t * b ) + { + return a->GetMergeFactor() > b->GetMergeFactor(); + } +}; + +void RtIndex_t::Commit () +{ + assert ( g_bRTChangesAllowed ); + MEMORY ( SPH_MEM_IDX_RT ); + + RtAccum_t * pAcc = AcquireAccum(); + if ( !pAcc ) + return; + + // empty txn, just ignore + if ( !pAcc->m_iAccumDocs && !pAcc->m_dAccumKlist.GetLength() ) + { + pAcc->m_pIndex = NULL; + pAcc->m_iAccumDocs = 0; + pAcc->m_dAccumRows.Resize ( 0 ); + pAcc->m_dStrings.Resize ( 1 ); + pAcc->m_dPerDocHitsCount.Resize ( 0 ); + return; + } + + // phase 0, build a new segment + // accum and segment are thread local; so no locking needed yet + // segment might be NULL if we're only killing rows this txn + pAcc->CleanupDuplacates ( m_tOutboundSchema.GetRowSize() ); + pAcc->m_dAccum.Sort ( CmpHit_fn() ); + + RtSegment_t * pNewSeg = pAcc->CreateSegment ( m_tOutboundSchema.GetRowSize() ); + assert ( !pNewSeg || pNewSeg->m_iRows>0 ); + assert ( !pNewSeg || pNewSeg->m_iAliveRows>0 ); + assert ( !pNewSeg || pNewSeg->m_bTlsKlist==false ); + +#if PARANOID + if ( pNewSeg ) + CheckSegmentRows ( pNewSeg, m_iStride ); +#endif + + // clean up parts we no longer need + pAcc->m_dAccum.Resize ( 0 ); + pAcc->m_dAccumRows.Resize ( 0 ); + pAcc->m_dStrings.Resize ( 1 ); // handle dummy zero offset + pAcc->m_dPerDocHitsCount.Resize ( 0 ); + + // sort accum klist, too + pAcc->m_dAccumKlist.Uniq (); + + // now on to the stuff that needs locking and recovery + CommitReplayable ( pNewSeg, pAcc->m_dAccumKlist ); + + // done; cleanup accum + pAcc->m_pIndex = NULL; + pAcc->m_iAccumDocs = 0; + pAcc->m_dAccumKlist.Reset(); +} + +void RtIndex_t::CommitReplayable ( RtSegment_t * pNewSeg, CSphVector & dAccKlist ) +{ + int iNewDocs = pNewSeg ? pNewSeg->m_iRows : 0; + + // phase 1, lock out other writers (but not readers yet) + // concurrent readers are ok during merges, as existing segments won't be modified yet + // however, concurrent writers are not + Verify ( m_tWriterMutex.Lock() ); + + // first of all, binlog txn data for recovery + g_pBinlog->BinlogCommit ( m_sIndexName.cstr(), ++m_iTID, pNewSeg, dAccKlist ); + + // let merger know that existing segments are subject to additional, TLS K-list filter + // safe despite the readers, flag must only be used by writer + if ( dAccKlist.GetLength() ) + ARRAY_FOREACH ( i, m_pSegments ) + { + // OPTIMIZE? only need to set the flag if TLS K-list *actually* affects segment + assert ( m_pSegments[i]->m_bTlsKlist==false ); + m_pSegments[i]->m_bTlsKlist = true; + } + + // prepare new segments vector + // create more new segments by merging as needed + // do not (!) kill processed old segments just yet, as readers might still need them + CSphVector dSegments; + CSphVector dToKill; + + dSegments = m_pSegments; + if ( pNewSeg ) + dSegments.Add ( pNewSeg ); + + int64_t iRamFreed = 0; + + // enforce RAM usage limit + int64_t iRamLeft = m_iRamSize; + ARRAY_FOREACH ( i, dSegments ) + iRamLeft = Max ( 0, iRamLeft - dSegments[i]->GetUsedRam() ); + + // skip merging if no rows were added or no memory left + bool bDump = ( iRamLeft==0 ); + const int MAX_SEGMENTS = 32; + const int MAX_PROGRESSION_SEGMENT = 8; + while ( pNewSeg && iRamLeft>0 ) + { + dSegments.Sort ( CmpSegments_fn() ); + + // unconditionally merge if there's too much segments now + // conditionally merge if smallest segment has grown too large + // otherwise, we're done + const int iLen = dSegments.GetLength(); + if ( iLen < ( MAX_SEGMENTS - MAX_PROGRESSION_SEGMENT ) ) + break; + assert ( iLen>=2 ); + // exit if progression is kept AND lesser MAX_SEGMENTS limit + if ( dSegments[iLen-2]->GetMergeFactor() > dSegments[iLen-1]->GetMergeFactor()*2 && iLen < MAX_SEGMENTS ) + break; + + // check whether we have enough RAM +#define LOC_ESTIMATE1(_seg,_vec) \ + (int)( ( (int64_t)_seg->_vec.GetLength() ) * _seg->m_iAliveRows / _seg->m_iRows ) + +#define LOC_ESTIMATE(_vec) \ + ( LOC_ESTIMATE1 ( dSegments[iLen-1], _vec ) + LOC_ESTIMATE1 ( dSegments[iLen-2], _vec ) ) + + int64_t iEstimate = + CSphTightVectorPolicy::Relimit ( 0, LOC_ESTIMATE ( m_dWords ) ) + + CSphTightVectorPolicy::Relimit ( 0, LOC_ESTIMATE ( m_dDocs ) ) + + CSphTightVectorPolicy::Relimit ( 0, LOC_ESTIMATE ( m_dHits ) ) + + CSphTightVectorPolicy::Relimit ( 0, LOC_ESTIMATE ( m_dStrings ) ); + +#undef LOC_ESTIMATE +#undef LOC_ESTIMATE1 + + if ( iEstimate>iRamLeft ) + { + // dump case: can't merge any more AND segments count limit's reached + bDump = ( ( iRamLeft + iRamFreed )<=iEstimate ) && ( iLen>=MAX_SEGMENTS ); + break; + } + + // do it + RtSegment_t * pA = dSegments.Pop(); + RtSegment_t * pB = dSegments.Pop(); + dSegments.Add ( MergeSegments ( pA, pB, &dAccKlist ) ); + dToKill.Add ( pA ); + dToKill.Add ( pB ); + + iRamFreed += pA->GetUsedRam() + pB->GetUsedRam(); + + int64_t iMerged = dSegments.Last()->GetUsedRam(); + iRamLeft -= Min ( iRamLeft, iMerged ); + } + + // phase 2, obtain exclusive writer lock + // we now have to update K-lists in (some of) the survived segments + // and also swap in new segment list + m_tRwlock.WriteLock (); + + // adjust for an incoming accumulator K-list + int iTotalKilled = 0; + if ( dAccKlist.GetLength() ) + { +#ifndef NDEBUG +#if PARANOID + // check that klist is sorted and unique + for ( int i=1; iFindAliveRow ( uDocid )!=NULL ); + + bool bDiskKilled = m_tKlist.Exists ( uDocid ); + + // check disk chunks + bool bKeep = false; + if ( !bRamKilled || !bDiskKilled ) + { + for ( int j=m_pDiskChunks.GetLength()-1; j>=0 && !bKeep; j-- ) + { + if ( m_pDiskChunks[j]->HasDocid ( uDocid ) ) + { + // we just found the most recent chunk with our suspect docid + // let's check whether it's already killed by subsequent chunks, or gets killed now + SphAttr_t uRef = uDocid; + bKeep = true; + for ( int k=j+1; kGetKillList(), pIndex->GetKillList() + pIndex->GetKillListSize() - 1, uRef )==NULL ); + } + } + } + } + + if ( bRamKilled || bKeep ) + iTotalKilled++; + + if ( bDiskKilled || !bKeep ) + { + Swap ( dAccKlist[i], dAccKlist[iDiskLiveKLen-1] ); + iDiskLiveKLen--; + i--; + } + } + + // update K-lists on survivors + ARRAY_FOREACH ( iSeg, dSegments ) + { + RtSegment_t * pSeg = dSegments[iSeg]; + if ( !pSeg->m_bTlsKlist ) + continue; // should be fresh enough + + bool bKlistChanged = false; + + // this segment was not created by this txn + // so we need to merge additional K-list from current txn into it + ARRAY_FOREACH ( j, dAccKlist ) + { + SphDocID_t uDocid = dAccKlist[j]; + if ( pSeg->FindAliveRow ( uDocid ) ) + { + pSeg->m_dKlist.Add ( uDocid ); + pSeg->m_iAliveRows--; + assert ( pSeg->m_iAliveRows>=0 ); + bKlistChanged = true; + } + } + + // we did not check for existence in K-list, only in segment + // so need to use Uniq(), not just Sort() + if ( bKlistChanged ) + pSeg->m_dKlist.Uniq (); + + // mark as good + pSeg->m_bTlsKlist = false; + } + + // update disk K-list + // after iDiskLiveKLen are ids already stored on disk - just skip them + for ( int i=0; im_iAliveRows==0 ) + { + dToKill.Add ( pSeg ); + dSegments.RemoveFast ( i ); + i--; + } + } + + // go live! + Swap ( m_pSegments, dSegments ); + + // we can kill retired segments now + ARRAY_FOREACH ( i, dToKill ) + SafeDelete ( dToKill[i] ); + + // update stats + m_tStats.m_iTotalDocuments += iNewDocs - iTotalKilled; + + // phase 3, enable readers again + // we might need to dump data to disk now + // but during the dump, readers can still use RAM chunk data + Verify ( m_tRwlock.Unlock() ); + + if ( bDump ) + { + SaveDiskChunk(); + g_pBinlog->NotifyIndexFlush ( m_sIndexName.cstr(), m_iTID, false ); + } + + // all done, enable other writers + Verify ( m_tWriterMutex.Unlock() ); +} + +void RtIndex_t::RollBack () +{ + assert ( g_bRTChangesAllowed ); + + RtAccum_t * pAcc = AcquireAccum(); + if ( !pAcc ) + return; + + // clean up parts we no longer need + pAcc->m_dAccum.Resize ( 0 ); + pAcc->m_dAccumRows.Resize ( 0 ); + + // finish cleaning up and release accumulator + pAcc->m_pIndex = NULL; + pAcc->m_iAccumDocs = 0; + pAcc->m_dAccumKlist.Reset(); +} + +bool RtIndex_t::DeleteDocument ( const SphDocID_t * pDocs, int iDocs, CSphString & sError ) +{ + assert ( g_bRTChangesAllowed ); + MEMORY ( SPH_MEM_IDX_RT_ACCUM ); + + RtAccum_t * pAcc = AcquireAccum ( &sError ); + if ( !pAcc ) + return false; + + if ( !iDocs ) + return true; + + assert ( pDocs && iDocs ); + + // !COMMIT should handle case when uDoc what inserted in current txn here + while ( iDocs-- ) + pAcc->m_dAccumKlist.Add ( *pDocs++ ); + + return true; +} + +////////////////////////////////////////////////////////////////////////// +// LOAD/SAVE +////////////////////////////////////////////////////////////////////////// + +struct Checkpoint_t +{ + uint64_t m_uWord; + uint64_t m_uOffset; +}; + + +void RtIndex_t::DumpToDisk ( const char * sFilename ) +{ + MEMORY ( SPH_MEM_IDX_RT ); + + Verify ( m_tWriterMutex.Lock() ); + Verify ( m_tRwlock.WriteLock() ); + SaveDiskData ( sFilename ); + Verify ( m_tRwlock.Unlock() ); + Verify ( m_tWriterMutex.Unlock() ); +} + +// Here is the devil of saving id32 chunk from id64 binary daemon +template < typename DOCID, typename WORDID > +void RtIndex_t::SaveDiskDataImpl ( const char * sFilename ) const +{ + typedef RtDoc_tmpl RTDOC; + typedef RtWord_tmpl RTWORD; + + CSphString sName, sError; + + CSphWriter wrHits, wrDocs, wrDict, wrRows; + sName.SetSprintf ( "%s.spp", sFilename ); wrHits.OpenFile ( sName.cstr(), sError ); + sName.SetSprintf ( "%s.spd", sFilename ); wrDocs.OpenFile ( sName.cstr(), sError ); + sName.SetSprintf ( "%s.spi", sFilename ); wrDict.OpenFile ( sName.cstr(), sError ); + sName.SetSprintf ( "%s.spa", sFilename ); wrRows.OpenFile ( sName.cstr(), sError ); + + BYTE bDummy = 1; + wrDict.PutBytes ( &bDummy, 1 ); + wrDocs.PutBytes ( &bDummy, 1 ); + wrHits.PutBytes ( &bDummy, 1 ); + + // we don't have enough RAM to create new merged segments + // and have to do N-way merge kinda in-place + CSphVector*> pWordReaders; + CSphVector*> pDocReaders; + CSphVector pSegments; + CSphVector pWords; + CSphVector pDocs; + + pWordReaders.Reserve ( m_pSegments.GetLength() ); + pDocReaders.Reserve ( m_pSegments.GetLength() ); + pSegments.Reserve ( m_pSegments.GetLength() ); + pWords.Reserve ( m_pSegments.GetLength() ); + pDocs.Reserve ( m_pSegments.GetLength() ); + + // OPTIMIZE? somehow avoid new on iterators maybe? + ARRAY_FOREACH ( i, m_pSegments ) + pWordReaders.Add ( new RtWordReader_tmpl ( m_pSegments[i] ) ); + + ARRAY_FOREACH ( i, pWordReaders ) + pWords.Add ( pWordReaders[i]->UnzipWord() ); + + // loop keywords + static const int WORDLIST_CHECKPOINT = 64; + CSphVector dCheckpoints; + int iWords = 0; + + WORDID uLastWord = 0; + SphOffset_t uLastDocpos = 0; + + for ( ;; ) + { + // find keyword with min id + const RTWORD * pWord = NULL; + ARRAY_FOREACH ( i, pWords ) // OPTIMIZE? PQ or at least nulls removal here?! + if ( pWords[i] ) + if ( !pWord || pWords[i]->m_uWordID < pWord->m_uWordID ) + pWord = pWords[i]; + if ( !pWord ) + break; + + // loop all segments that have this keyword + assert ( pSegments.GetLength()==0 ); + assert ( pDocReaders.GetLength()==0 ); + assert ( pDocs.GetLength()==0 ); + + ARRAY_FOREACH ( i, pWords ) + if ( pWords[i] && pWords[i]->m_uWordID==pWord->m_uWordID ) + { + pSegments.Add ( m_pSegments[i] ); + pDocReaders.Add ( new RtDocReader_tmpl ( m_pSegments[i], *pWords[i] ) ); + + const RTDOC * pDoc = pDocReaders.Last()->UnzipDoc(); + while ( pDoc && m_pSegments[i]->m_dKlist.BinarySearch ( pDoc->m_uDocID ) ) + pDoc = pDocReaders.Last()->UnzipDoc(); + + pDocs.Add ( pDoc ); + } + + // loop documents + SphOffset_t uDocpos = wrDocs.GetPos(); + DOCID uLastDoc = 0; + SphOffset_t uLastHitpos = 0; + int iDocs = 0; + int iHits = 0; + for ( ;; ) + { + // find alive doc with min id + int iMinReader = -1; + ARRAY_FOREACH ( i, pDocs ) // OPTIMIZE? + { + if ( !pDocs[i] ) + continue; + + assert ( !pSegments[i]->m_dKlist.BinarySearch ( pDocs[i]->m_uDocID ) ); + if ( iMinReader<0 || pDocs[i]->m_uDocID < pDocs[iMinReader]->m_uDocID ) + iMinReader = i; + } + if ( iMinReader<0 ) + break; + + // write doclist entry + const RTDOC * pDoc = pDocs[iMinReader]; // shortcut + iDocs++; + iHits += pDoc->m_uHits; + + wrDocs.ZipOffset ( pDoc->m_uDocID - uLastDoc ); + wrDocs.ZipOffset ( wrHits.GetPos() - uLastHitpos ); + wrDocs.ZipInt ( pDoc->m_dFields.GetMask32() ); + wrDocs.ZipInt ( pDoc->m_uHits ); + uLastDoc = pDoc->m_uDocID; + uLastHitpos = wrHits.GetPos(); + + // loop hits from most current segment + if ( pDoc->m_uHits>1 ) + { + DWORD uLastHit = 0; + RtHitReader_t tInHit ( pSegments[iMinReader], pDoc ); + for ( DWORD uValue=tInHit.UnzipHit(); uValue; uValue=tInHit.UnzipHit() ) + { + wrHits.ZipInt ( uValue - uLastHit ); + uLastHit = uValue; + } + } else + { + wrHits.ZipInt ( pDoc->m_uHit ); + } + wrHits.ZipInt ( 0 ); + + // fast forward readers + DOCID uMinID = pDocs[iMinReader]->m_uDocID; + ARRAY_FOREACH ( i, pDocs ) + while ( pDocs[i] && ( pDocs[i]->m_uDocID<=uMinID || pSegments[i]->m_dKlist.BinarySearch ( pDocs[i]->m_uDocID ) ) ) + pDocs[i] = pDocReaders[i]->UnzipDoc(); + } + + // write dict entry if necessary + if ( wrDocs.GetPos()!=uDocpos ) + { + wrDocs.ZipInt ( 0 ); + + if ( !iWords ) + { + Checkpoint_t & tChk = dCheckpoints.Add (); + tChk.m_uWord = pWord->m_uWordID; + tChk.m_uOffset = wrDict.GetPos(); + } + + wrDict.ZipOffset ( pWord->m_uWordID - uLastWord ); + wrDict.ZipOffset ( uDocpos - uLastDocpos ); + wrDict.ZipInt ( iDocs ); + wrDict.ZipInt ( iHits ); + uLastWord = pWord->m_uWordID; + uLastDocpos = uDocpos; + + if ( ++iWords==WORDLIST_CHECKPOINT ) + { + wrDict.ZipInt ( 0 ); + wrDict.ZipOffset ( wrDocs.GetPos() - uLastDocpos ); // store last hitlist length + uLastDocpos = 0; + uLastWord = 0; + iWords = 0; + } + } + + // move words forward + WORDID uMinID = pWord->m_uWordID; // because pWord contents will move forward too! + ARRAY_FOREACH ( i, pWords ) + if ( pWords[i] && pWords[i]->m_uWordID==uMinID ) + pWords[i] = pWordReaders[i]->UnzipWord(); + + // cleanup + ARRAY_FOREACH ( i, pDocReaders ) + SafeDelete ( pDocReaders[i] ); + pSegments.Resize ( 0 ); + pDocReaders.Resize ( 0 ); + pDocs.Resize ( 0 ); + } + + // write checkpoints + wrDict.ZipInt ( 0 ); // indicate checkpoint + wrDict.ZipOffset ( wrDocs.GetPos() - uLastDocpos ); // store last doclist length + + SphOffset_t iCheckpointsPosition = wrDict.GetPos(); + ARRAY_FOREACH ( i, dCheckpoints ) + { + wrDict.PutOffset ( dCheckpoints[i].m_uWord ); + wrDict.PutOffset ( dCheckpoints[i].m_uOffset ); + } + + // write attributes + // the new, template-param aligned iStride instead of index-wide. + int iStride = DWSIZEOF(DOCID) + m_tSchema.GetRowSize(); + CSphVector*> pRowIterators ( m_pSegments.GetLength() ); + ARRAY_FOREACH ( i, m_pSegments ) + pRowIterators[i] = new RtRowIterator_tmpl ( m_pSegments[i], iStride, false, NULL ); + + CSphVector pRows ( m_pSegments.GetLength() ); + ARRAY_FOREACH ( i, pRowIterators ) + pRows[i] = pRowIterators[i]->GetNextAliveRow(); + + // prepare to build min-max index for attributes too + int iTotalDocs = 0; + ARRAY_FOREACH ( i, m_pSegments ) + iTotalDocs += m_pSegments[i]->m_iAliveRows; + AttrIndexBuilder_t tMinMaxBuilder ( m_tSchema ); + CSphVector dMinMaxBuffer ( tMinMaxBuilder.GetExpectedSize ( iTotalDocs ) ); + tMinMaxBuilder.Prepare ( dMinMaxBuffer.Begin(), dMinMaxBuffer.Begin() + dMinMaxBuffer.GetLength() ); + + sName.SetSprintf ( "%s.sps", sFilename ); + CSphWriter tStrWriter; + tStrWriter.OpenFile ( sName.cstr(), sError ); + tStrWriter.PutByte ( 0 ); // dummy byte, to reserve magic zero offset + + sName.SetSprintf ( "%s.spm", sFilename ); + CSphWriter tMvaWriter; + tMvaWriter.OpenFile ( sName.cstr(), sError ); + tMvaWriter.PutDword ( 0 ); // dummy dword, to reserve magic zero offset + + CSphRowitem * pFixedRow = new CSphRowitem[iStride]; + +#ifndef NDEBUG + int iStoredDocs = 0; +#endif + + StorageStringWriter_t tStorageString ( m_tSchema, tStrWriter ); + StorageMvaWriter_t tStorageMva ( m_tSchema, tMvaWriter ); + + for ( ;; ) + { + // find min row + int iMinRow = -1; + ARRAY_FOREACH ( i, pRows ) + if ( pRows[i] ) + if ( iMinRow<0 || DOCINFO2ID_T ( pRows[i] ) < DOCINFO2ID_T ( pRows[iMinRow] ) ) + iMinRow = i; + if ( iMinRow<0 ) + break; + +#ifndef NDEBUG + // verify that it's unique + int iDupes = 0; + ARRAY_FOREACH ( i, pRows ) + if ( pRows[i] ) + if ( DOCINFO2ID_T ( pRows[i] )==DOCINFO2ID_T ( pRows[iMinRow] ) ) + iDupes++; + assert ( iDupes==1 ); +#endif + + const CSphRowitem * pRow = pRows[iMinRow]; + + // strings storage for stored row + assert ( iMinRow ( pSegment->m_dStrings, m_tSchema, pRow ); +#endif + + // collect min-max data + tMinMaxBuilder.Collect ( pRow, pSegment->m_dMvas.Begin(), pSegment->m_dMvas.GetLength(), sError ); + + if ( pSegment->m_dStrings.GetLength()>1 || pSegment->m_dMvas.GetLength()>1 ) // should be more then dummy zero elements + { + // copy row content as we'll fix up its attrs ( string offset for now ) + memcpy ( pFixedRow, pRow, iStride*sizeof(CSphRowitem) ); + pRow = pFixedRow; + + CopyFixupStorageAttrs ( pSegment->m_dStrings, tStorageString, pFixedRow ); + CopyFixupStorageAttrs ( pSegment->m_dMvas, tStorageMva, pFixedRow ); + } + + // emit it + wrRows.PutBytes ( pRow, iStride*sizeof(CSphRowitem) ); + + // fast forward + pRows[iMinRow] = pRowIterators[iMinRow]->GetNextAliveRow(); +#ifndef NDEBUG + iStoredDocs++; +#endif + } + + SafeDeleteArray ( pFixedRow ); + + assert ( iStoredDocs==iTotalDocs ); + + tMinMaxBuilder.FinishCollect ( false ); + if ( tMinMaxBuilder.GetActualSize() ) + wrRows.PutBytes ( dMinMaxBuffer.Begin(), sizeof(DWORD) * tMinMaxBuilder.GetActualSize() ); + + tStrWriter.CloseFile (); + + // write dummy string attributes, mva and kill-list files + CSphWriter wrDummy; + + // dump killlist + sName.SetSprintf ( "%s.spk", sFilename ); + wrDummy.OpenFile ( sName.cstr(), sError ); + m_tKlist.Flush(); + m_tKlist.KillListLock(); + DWORD uKlistSize = m_tKlist.GetKillListSize(); + if ( uKlistSize ) + wrDummy.PutBytes ( m_tKlist.GetKillList(), uKlistSize*sizeof ( SphAttr_t ) ); + m_tKlist.Reset(); + m_tKlist.KillListUnlock(); + wrDummy.CloseFile (); + + sName.SetSprintf ( "%s.spm", sFilename ); wrDummy.OpenFile ( sName.cstr(), sError ); wrDummy.CloseFile (); + + // header + SaveDiskHeader ( sFilename, dCheckpoints.GetLength(), iCheckpointsPosition, uKlistSize, iTotalDocs*iStride, m_bId32to64 ); + + // cleanup + ARRAY_FOREACH ( i, pWordReaders ) + SafeDelete ( pWordReaders[i] ); + ARRAY_FOREACH ( i, pDocReaders ) + SafeDelete ( pDocReaders[i] ); + ARRAY_FOREACH ( i, pRowIterators ) + SafeDelete ( pRowIterators[i] ); + + // done + wrHits.CloseFile (); + wrDocs.CloseFile (); + wrDict.CloseFile (); + wrRows.CloseFile (); +} + +void RtIndex_t::SaveDiskData ( const char * sFilename ) const +{ + if ( m_bId32to64 ) + return SaveDiskDataImpl (sFilename); + else + return SaveDiskDataImpl (sFilename); +} + +static void WriteFileInfo ( CSphWriter & tWriter, const CSphSavedFile & tInfo ) +{ + tWriter.PutOffset ( tInfo.m_uSize ); + tWriter.PutOffset ( tInfo.m_uCTime ); + tWriter.PutOffset ( tInfo.m_uMTime ); + tWriter.PutDword ( tInfo.m_uCRC32 ); +} + +static void WriteSchemaColumn ( CSphWriter & tWriter, const CSphColumnInfo & tColumn ) +{ + int iLen = strlen ( tColumn.m_sName.cstr() ); + tWriter.PutDword ( iLen ); + tWriter.PutBytes ( tColumn.m_sName.cstr(), iLen ); + + ESphAttr eAttrType = tColumn.m_eAttrType; + if ( eAttrType==SPH_ATTR_WORDCOUNT ) + eAttrType = SPH_ATTR_INTEGER; + tWriter.PutDword ( eAttrType ); + + tWriter.PutDword ( tColumn.m_tLocator.CalcRowitem() ); // for backwards compatibility + tWriter.PutDword ( tColumn.m_tLocator.m_iBitOffset ); + tWriter.PutDword ( tColumn.m_tLocator.m_iBitCount ); + + tWriter.PutByte ( tColumn.m_bPayload ); +} + + +void RtIndex_t::SaveDiskHeader ( const char * sFilename, int iCheckpoints, SphOffset_t iCheckpointsPosition, DWORD uKillListSize, DWORD uMinMaxSize, bool bForceID32 ) const +{ + static const DWORD INDEX_MAGIC_HEADER = 0x58485053; ///< my magic 'SPHX' header + static const DWORD INDEX_FORMAT_VERSION = 26; ///< my format version + + CSphWriter tWriter; + CSphString sName, sError; + sName.SetSprintf ( "%s.sph", sFilename ); + tWriter.OpenFile ( sName.cstr(), sError ); + + // format + tWriter.PutDword ( INDEX_MAGIC_HEADER ); + tWriter.PutDword ( INDEX_FORMAT_VERSION ); + + if ( bForceID32 ) + tWriter.PutDword ( 0 ); // use-32bit + else + tWriter.PutDword ( USE_64BIT ); // use-64bit + tWriter.PutDword ( SPH_DOCINFO_EXTERN ); + + // schema + tWriter.PutDword ( m_tSchema.m_dFields.GetLength() ); + ARRAY_FOREACH ( i, m_tSchema.m_dFields ) + WriteSchemaColumn ( tWriter, m_tSchema.m_dFields[i] ); + + tWriter.PutDword ( m_tSchema.GetAttrsCount() ); + for ( int i=0; iGetSettings (); + tWriter.PutByte ( tSettings.m_iType ); + tWriter.PutString ( tSettings.m_sCaseFolding.cstr () ); + tWriter.PutDword ( tSettings.m_iMinWordLen ); + tWriter.PutString ( tSettings.m_sSynonymsFile.cstr () ); + WriteFileInfo ( tWriter, m_pTokenizer->GetSynFileInfo () ); + tWriter.PutString ( tSettings.m_sBoundary.cstr () ); + tWriter.PutString ( tSettings.m_sIgnoreChars.cstr () ); + tWriter.PutDword ( tSettings.m_iNgramLen ); + tWriter.PutString ( tSettings.m_sNgramChars.cstr () ); + tWriter.PutString ( tSettings.m_sBlendChars.cstr () ); + tWriter.PutString ( tSettings.m_sBlendMode.cstr () ); + + // dictionary + assert ( m_pDict ); + + const CSphDictSettings & tDict = m_pDict->GetSettings (); + tWriter.PutString ( tDict.m_sMorphology.cstr () ); + tWriter.PutString ( tDict.m_sStopwords.cstr () ); + + const CSphVector & dSWFileInfos = m_pDict->GetStopwordsFileInfos (); + tWriter.PutDword ( dSWFileInfos.GetLength () ); + ARRAY_FOREACH ( i, dSWFileInfos ) + { + tWriter.PutString ( dSWFileInfos[i].m_sFilename.cstr () ); + WriteFileInfo ( tWriter, dSWFileInfos[i] ); + } + + const CSphSavedFile & tWFFileInfo = m_pDict->GetWordformsFileInfo (); + tWriter.PutString ( tDict.m_sWordforms.cstr () ); + WriteFileInfo ( tWriter, tWFFileInfo ); + tWriter.PutDword ( tDict.m_iMinStemmingLen ); + tWriter.PutByte ( 0 ); // m_bWordDict flag, v.21+ + + // kill-list size + tWriter.PutDword ( uKillListSize ); + + // min-max count + tWriter.PutDword ( uMinMaxSize ); + + // done + tWriter.CloseFile (); +} + + +#if USE_WINDOWS +#undef rename +int rename_rt ( const char * sOld, const char * sNew ) +{ + if ( MoveFileEx ( sOld, sNew, MOVEFILE_REPLACE_EXISTING ) ) + return 0; + errno = GetLastError(); + return -1; +} +#else +#define rename_rt rename +#endif + + +void RtIndex_t::SaveMeta ( int iDiskChunks ) +{ + // sanity check + if ( m_iLockFD<0 ) + return; + + // write new meta + CSphString sMeta, sMetaNew; + sMeta.SetSprintf ( "%s.meta", m_sPath.cstr() ); + sMetaNew.SetSprintf ( "%s.meta.new", m_sPath.cstr() ); + + CSphString sError; + CSphWriter wrMeta; + if ( !wrMeta.OpenFile ( sMetaNew, sError ) ) + sphDie ( "failed to serialize meta: %s", sError.cstr() ); // !COMMIT handle this gracefully + wrMeta.PutDword ( META_HEADER_MAGIC ); + wrMeta.PutDword ( META_VERSION ); + wrMeta.PutDword ( iDiskChunks ); + wrMeta.PutDword ( m_tStats.m_iTotalDocuments ); + wrMeta.PutOffset ( m_tStats.m_iTotalBytes ); // FIXME? need PutQword ideally + wrMeta.PutOffset ( m_iTID ); + wrMeta.CloseFile(); + + // rename + if ( ::rename_rt ( sMetaNew.cstr(), sMeta.cstr() ) ) + sphDie ( "failed to rename meta (src=%s, dst=%s, errno=%d, error=%s)", + sMetaNew.cstr(), sMeta.cstr(), errno, strerror(errno) ); // !COMMIT handle this gracefully +} + + +void RtIndex_t::SaveDiskChunk () +{ + if ( !m_pSegments.GetLength() ) + return; + + MEMORY ( SPH_MEM_IDX_RT ); + + // dump it + CSphString sNewChunk; + sNewChunk.SetSprintf ( "%s.%d", m_sPath.cstr(), m_pDiskChunks.GetLength() ); + SaveDiskData ( sNewChunk.cstr() ); + + // bring new disk chunk online + CSphIndex * pDiskChunk = LoadDiskChunk ( m_pDiskChunks.GetLength() ); + assert ( pDiskChunk ); + + // save updated meta + SaveMeta ( m_pDiskChunks.GetLength()+1 ); + m_iSavedTID = m_iTID; + m_iSavedRam = 0; + m_tmSaved = sphMicroTimer(); + + // FIXME! add binlog cleanup here once we have binlogs + + // get exclusive lock again, gotta reset RAM chunk now + Verify ( m_tRwlock.WriteLock() ); + ARRAY_FOREACH ( i, m_pSegments ) + SafeDelete ( m_pSegments[i] ); + m_pSegments.Reset(); + m_pDiskChunks.Add ( pDiskChunk ); + Verify ( m_tRwlock.Unlock() ); +} + + +CSphIndex * RtIndex_t::LoadDiskChunk ( int iChunk ) +{ + MEMORY ( SPH_MEM_IDX_DISK ); + + CSphString sChunk, sError, sWarning; + sChunk.SetSprintf ( "%s.%d", m_sPath.cstr(), iChunk ); + + // !COMMIT handle errors gracefully instead of dying + CSphIndex * pDiskChunk = sphCreateIndexPhrase ( m_sIndexName.cstr(), sChunk.cstr() ); + if ( !pDiskChunk ) + sphDie ( "disk chunk %s: alloc failed", sChunk.cstr() ); + + pDiskChunk->SetWordlistPreload ( m_bPreloadWordlist ); + + if ( !pDiskChunk->Prealloc ( false, m_bPathStripped, sWarning ) ) + sphDie ( "disk chunk %s: prealloc failed: %s", sChunk.cstr(), pDiskChunk->GetLastError().cstr() ); + + if ( !pDiskChunk->Preread() ) + sphDie ( "disk chunk %s: preread failed: %s", sChunk.cstr(), pDiskChunk->GetLastError().cstr() ); + + ISphIndex_VLN * pChunk = dynamic_cast ( pDiskChunk ); + if ( !pChunk ) + sphDie ( "disk chunk %s: internal error on load, dynamic_cast failed", sChunk.cstr() ); + pChunk->SetDynamize ( m_dDynamize ); + + return pDiskChunk; +} + + +bool RtIndex_t::Prealloc ( bool, bool bStripPath, CSphString & ) +{ + MEMORY ( SPH_MEM_IDX_RT ); + + // locking uber alles + // in RT backed case, we just must be multi-threaded + // so we simply lock here, and ignore Lock/Unlock hassle caused by forks + assert ( m_iLockFD<0 ); + + CSphString sLock; + sLock.SetSprintf ( "%s.lock", m_sPath.cstr() ); + m_iLockFD = ::open ( sLock.cstr(), SPH_O_NEW, 0644 ); + if ( m_iLockFD<0 ) + { + m_sLastError.SetSprintf ( "failed to open %s: %s", sLock.cstr(), strerror(errno) ); + return false; + } + if ( !sphLockEx ( m_iLockFD, false ) ) + { + m_sLastError.SetSprintf ( "failed to lock %s: %s", sLock.cstr(), strerror(errno) ); + ::close ( m_iLockFD ); + return false; + } + + // check if we have a meta file (kinda-header) + CSphString sMeta; + sMeta.SetSprintf ( "%s.meta", m_sPath.cstr() ); + + // no readable meta? no disk part yet + if ( !sphIsReadable ( sMeta.cstr() ) ) + return true; + + // opened and locked, lets read + CSphAutoreader rdMeta; + if ( !rdMeta.Open ( sMeta, m_sLastError ) ) + return false; + + if ( rdMeta.GetDword()!=META_HEADER_MAGIC ) + { + m_sLastError.SetSprintf ( "invalid meta file %s", sMeta.cstr() ); + return false; + } + DWORD uVersion = rdMeta.GetDword(); + if ( uVersion==0 || uVersion>META_VERSION ) + { + m_sLastError.SetSprintf ( "%s is v.%d, binary is v.%d", sMeta.cstr(), uVersion, META_VERSION ); + return false; + } + const int iDiskChunks = rdMeta.GetDword(); + m_tStats.m_iTotalDocuments = rdMeta.GetDword(); + m_tStats.m_iTotalBytes = rdMeta.GetOffset(); + if ( uVersion>=2 ) + m_iTID = rdMeta.GetOffset(); + + m_bPathStripped = bStripPath; + + // load disk chunks, if any + for ( int iChunk=0; iChunkGetMatchSchema(), m_sLastError ) ) + return false; + } + + // load ram chunk + bool bRamLoaded = LoadRamChunk ( uVersion ); + + // set up values for on timer save + m_iSavedTID = m_iTID; + m_iSavedRam = GetUsedRam(); + m_tmSaved = sphMicroTimer(); + + return bRamLoaded; +} + + +bool RtIndex_t::Preread () +{ + // !COMMIT move disk chunks prereading here + return true; +} + +template < typename T > struct IsPodType { enum { Value = false }; }; +template<> struct IsPodType { enum { Value = true }; }; +template<> struct IsPodType { enum { Value = true }; }; +template<> struct IsPodType { enum { Value = true }; }; +template<> struct IsPodType { enum { Value = true }; }; +template<> struct IsPodType { enum { Value = true }; }; +template<> struct IsPodType { enum { Value = true }; }; + + +template < typename T, typename P > +static void SaveVector ( CSphWriter & tWriter, const CSphVector < T, P > & tVector ) +{ + STATIC_ASSERT ( IsPodType::Value, NON_POD_VECTORS_ARE_UNSERIALIZABLE ); + tWriter.PutDword ( tVector.GetLength() ); + if ( tVector.GetLength() ) + tWriter.PutBytes ( tVector.Begin(), tVector.GetLength()*sizeof(T) ); +} + + +template < typename T, typename P > +static void LoadVector ( CSphReader & tReader, CSphVector < T, P > & tVector ) +{ + STATIC_ASSERT ( IsPodType::Value, NON_POD_VECTORS_ARE_UNSERIALIZABLE ); + tVector.Resize ( tReader.GetDword() ); // FIXME? sanitize? + if ( tVector.GetLength() ) + tReader.GetBytes ( tVector.Begin(), tVector.GetLength()*sizeof(T) ); +} + + +template < typename T, typename P > +static void SaveVector ( BinlogWriter_c & tWriter, const CSphVector < T, P > & tVector ) +{ + STATIC_ASSERT ( IsPodType::Value, NON_POD_VECTORS_ARE_UNSERIALIZABLE ); + tWriter.ZipValue ( tVector.GetLength() ); + if ( tVector.GetLength() ) + tWriter.PutBytes ( tVector.Begin(), tVector.GetLength()*sizeof(T) ); +} + + +template < typename T, typename P > +static bool LoadVector ( BinlogReader_c & tReader, CSphVector < T, P > & tVector ) +{ + STATIC_ASSERT ( IsPodType::Value, NON_POD_VECTORS_ARE_UNSERIALIZABLE ); + tVector.Resize ( (int) tReader.UnzipValue() ); // FIXME? sanitize? + if ( tVector.GetLength() ) + tReader.GetBytes ( tVector.Begin(), tVector.GetLength()*sizeof(T) ); + return !tReader.GetErrorFlag(); +} + + +bool RtIndex_t::SaveRamChunk () +{ + MEMORY ( SPH_MEM_IDX_RT ); + + CSphString sChunk, sNewChunk; + sChunk.SetSprintf ( "%s.ram", m_sPath.cstr() ); + sNewChunk.SetSprintf ( "%s.ram.new", m_sPath.cstr() ); + m_tKlist.SaveToFile ( m_sPath.cstr() ); + + CSphWriter wrChunk; + if ( !wrChunk.OpenFile ( sNewChunk, m_sLastError ) ) + return false; + + wrChunk.PutDword ( USE_64BIT ); + wrChunk.PutDword ( RtSegment_t::m_iSegments ); + wrChunk.PutDword ( m_pSegments.GetLength() ); + + // no locks here, because it's only intended to be called from dtor + ARRAY_FOREACH ( iSeg, m_pSegments ) + { + const RtSegment_t * pSeg = m_pSegments[iSeg]; + wrChunk.PutDword ( pSeg->m_iTag ); + SaveVector ( wrChunk, pSeg->m_dWords ); + wrChunk.PutDword ( pSeg->m_dWordCheckpoints.GetLength() ); + ARRAY_FOREACH ( i, pSeg->m_dWordCheckpoints ) + { + wrChunk.PutOffset ( pSeg->m_dWordCheckpoints[i].m_iOffset ); + wrChunk.PutOffset ( pSeg->m_dWordCheckpoints[i].m_uWordID ); + } + SaveVector ( wrChunk, pSeg->m_dDocs ); + SaveVector ( wrChunk, pSeg->m_dHits ); + wrChunk.PutDword ( pSeg->m_iRows ); + wrChunk.PutDword ( pSeg->m_iAliveRows ); + SaveVector ( wrChunk, pSeg->m_dRows ); + SaveVector ( wrChunk, pSeg->m_dKlist ); + SaveVector ( wrChunk, pSeg->m_dStrings ); + SaveVector ( wrChunk, pSeg->m_dMvas ); + } + + wrChunk.CloseFile(); + if ( wrChunk.IsError() ) + return false; + + // rename + if ( ::rename_rt ( sNewChunk.cstr(), sChunk.cstr() ) ) + sphDie ( "failed to rename ram chunk (src=%s, dst=%s, errno=%d, error=%s)", + sNewChunk.cstr(), sChunk.cstr(), errno, strerror(errno) ); // !COMMIT handle this gracefully + + return true; +} + + +bool RtIndex_t::LoadRamChunk ( DWORD uVersion ) +{ + MEMORY ( SPH_MEM_IDX_RT ); + + CSphString sChunk; + sChunk.SetSprintf ( "%s.ram", m_sPath.cstr() ); + + if ( !sphIsReadable ( sChunk.cstr(), &m_sLastError ) ) + return true; + + m_tKlist.LoadFromFile ( m_sPath.cstr() ); + + CSphAutoreader rdChunk; + if ( !rdChunk.Open ( sChunk, m_sLastError ) ) + return false; + + bool bId64 = ( rdChunk.GetDword()!=0 ); + if ( bId64!=USE_64BIT ) + { +#if USE_64BIT +// #if 0 + // TODO: may be do this param conditional and push it into the config? + m_bId32to64 = true; +#else + m_sLastError.SetSprintf ( "ram chunk dumped by %s binary; this binary is %s", + bId64 ? "id64" : "id32", + USE_64BIT ? "id64" : "id32" ); + return false; +#endif + } + + int iSegmentSeq = rdChunk.GetDword(); + m_pSegments.Resize ( rdChunk.GetDword() ); // FIXME? sanitize + + ARRAY_FOREACH ( iSeg, m_pSegments ) + { + RtSegment_t * pSeg = new RtSegment_t (); + m_pSegments[iSeg] = pSeg; + + pSeg->m_iTag = rdChunk.GetDword (); + LoadVector ( rdChunk, pSeg->m_dWords ); + pSeg->m_dWordCheckpoints.Resize ( rdChunk.GetDword() ); + ARRAY_FOREACH ( i, pSeg->m_dWordCheckpoints ) + { + pSeg->m_dWordCheckpoints[i].m_iOffset = (int)rdChunk.GetOffset(); + pSeg->m_dWordCheckpoints[i].m_uWordID = (SphWordID_t)rdChunk.GetOffset(); + } + LoadVector ( rdChunk, pSeg->m_dDocs ); + LoadVector ( rdChunk, pSeg->m_dHits ); + pSeg->m_iRows = rdChunk.GetDword(); + pSeg->m_iAliveRows = rdChunk.GetDword(); + LoadVector ( rdChunk, pSeg->m_dRows ); + LoadVector ( rdChunk, pSeg->m_dKlist ); + LoadVector ( rdChunk, pSeg->m_dStrings ); + if ( uVersion>=3 ) + LoadVector ( rdChunk, pSeg->m_dMvas ); + } + + RtSegment_t::m_iSegments = iSegmentSeq; + if ( rdChunk.GetErrorFlag() ) + return false; + return true; +} + +void RtIndex_t::PostSetup() +{ + if ( m_bId32to64 ) + { + SaveDiskChunk(); + // since the RAM chunk is just stored as id32, we are no more in compat mode + m_bId32to64 = false; + } +} + +int RtIndex_t::DebugCheck ( FILE * fp ) +{ + int iFails = 0; + ARRAY_FOREACH ( i, m_pDiskChunks ) + { + fprintf ( fp, "checking disk chunk %d(%d)...\n", i, m_pDiskChunks.GetLength() ); + iFails += m_pDiskChunks[i]->DebugCheck ( fp ); + } + + return iFails; +} + +////////////////////////////////////////////////////////////////////////// +// SEARCHING +////////////////////////////////////////////////////////////////////////// + +struct RtQword_t : public ISphQword +{ + friend struct RtIndex_t; + friend struct RtQwordSetup_t; + +protected: + RtDocReader_t * m_pDocReader; + CSphMatch m_tMatch; + + DWORD m_uNextHit; + RtHitReader2_t m_tHitReader; + + RtSegment_t * m_pSeg; + +public: + RtQword_t () + : m_pDocReader ( NULL ) + , m_uNextHit ( 0 ) + , m_pSeg ( NULL ) + { + m_tMatch.Reset ( 0 ); + } + + virtual ~RtQword_t () + { + SafeDelete ( m_pDocReader ); + } + + virtual const CSphMatch & GetNextDoc ( DWORD * ) + { + for ( ;; ) + { + const RtDoc_t * pDoc = m_pDocReader->UnzipDoc(); + if ( !pDoc ) + { + m_tMatch.m_iDocID = 0; + return m_tMatch; + } + + if ( m_pSeg->m_dKlist.BinarySearch ( pDoc->m_uDocID ) ) + continue; + + m_tMatch.m_iDocID = pDoc->m_uDocID; + m_dFields = pDoc->m_dFields; + m_uMatchHits = pDoc->m_uHits; + m_iHitlistPos = (uint64_t(pDoc->m_uHits)<<32) + pDoc->m_uHit; + return m_tMatch; + } + } + + virtual void SeekHitlist ( SphOffset_t uOff ) + { + int iHits = (int)(uOff>>32); + if ( iHits==1 ) + { + m_uNextHit = DWORD(uOff); + } else + { + m_uNextHit = 0; + m_tHitReader.Seek ( DWORD(uOff), iHits ); + } + } + + virtual Hitpos_t GetNextHit () + { + if ( m_uNextHit==0 ) + { + return Hitpos_t ( m_tHitReader.UnzipHit() ); + + } else if ( m_uNextHit==0xffffffffUL ) + { + return EMPTY_HIT; + + } else + { + DWORD uRes = m_uNextHit; + m_uNextHit = 0xffffffffUL; + return Hitpos_t ( uRes ); + } + } +}; + + +struct RtQwordSetup_t : ISphQwordSetup +{ + RtSegment_t * m_pSeg; + + virtual ISphQword * QwordSpawn ( const XQKeyword_t & ) const; + virtual bool QwordSetup ( ISphQword * pQword ) const; +}; + + +ISphQword * RtQwordSetup_t::QwordSpawn ( const XQKeyword_t & ) const +{ + return new RtQword_t (); +} + + +bool RtQwordSetup_t::QwordSetup ( ISphQword * pQword ) const +{ + RtQword_t * pMyWord = dynamic_cast ( pQword ); + if ( !pMyWord ) + return false; + + const RtIndex_t * pIndex = dynamic_cast< const RtIndex_t * > ( m_pIndex ); + if ( !pIndex ) + return false; + + return pIndex->RtQwordSetup ( pMyWord, m_pSeg ); +} + + +bool RtIndex_t::EarlyReject ( CSphQueryContext * pCtx, CSphMatch & tMatch ) const +{ + // might be needed even when we do not have a filter! + if ( pCtx->m_bLookupFilter || pCtx->m_bLookupSort ) + CopyDocinfo ( tMatch, FindDocinfo ( (RtSegment_t*)pCtx->m_pIndexData, tMatch.m_iDocID ) ); + + ARRAY_FOREACH ( i, m_dDynamize ) + tMatch.SetAttr ( m_dDynamize[i].m_tTo, tMatch.GetAttr ( m_dDynamize[i].m_tFrom ) ); + + pCtx->CalcFilter ( tMatch ); + return pCtx->m_pFilter ? !pCtx->m_pFilter->Eval ( tMatch ) : false; +} + + +void RtIndex_t::CopyDocinfo ( CSphMatch & tMatch, const DWORD * pFound ) const +{ + if ( !pFound ) + return; + + // setup static pointer + assert ( DOCINFO2ID(pFound)==tMatch.m_iDocID ); + tMatch.m_pStatic = DOCINFO2ATTRS(pFound); + + // FIXME? implement overrides +} + + +const CSphRowitem * RtIndex_t::FindDocinfo ( const RtSegment_t * pSeg, SphDocID_t uDocID ) const +{ + // FIXME! move to CSphIndex, and implement hashing + if ( pSeg->m_dRows.GetLength()==0 ) + return NULL; + + int iStride = m_iStride; + int iStart = 0; + int iEnd = pSeg->m_iRows-1; + assert ( iStride==( DOCINFO_IDSIZE + m_tSchema.GetRowSize() ) ); + + const CSphRowitem * pStorage = pSeg->m_dRows.Begin(); + const CSphRowitem * pFound = NULL; + + if ( uDocID==DOCINFO2ID ( &pStorage [ iStart*iStride ] ) ) + { + pFound = &pStorage [ iStart*iStride ]; + + } else if ( uDocID==DOCINFO2ID ( &pStorage [ iEnd*iStride ] ) ) + { + pFound = &pStorage [ iEnd*iStride ]; + + } else + { + while ( iEnd-iStart>1 ) + { + // check if nothing found + if ( + uDocID < DOCINFO2ID ( &pStorage [ iStart*iStride ] ) || + uDocID > DOCINFO2ID ( &pStorage [ iEnd*iStride ] ) ) + break; + assert ( uDocID > DOCINFO2ID ( &pStorage [ iStart*iStride ] ) ); + assert ( uDocID < DOCINFO2ID ( &pStorage [ iEnd*iStride ] ) ); + + int iMid = iStart + (iEnd-iStart)/2; + if ( uDocID==DOCINFO2ID ( &pStorage [ iMid*iStride ] ) ) + { + pFound = &pStorage [ iMid*iStride ]; + break; + } + if ( uDocIDm_iWordID; + RtWordReader_t tReader ( pCurSeg ); + + // position reader to the right checkpoint + const CSphVector & dCheckpoints = pCurSeg->m_dWordCheckpoints; + if ( dCheckpoints.GetLength() ) + { + if ( dCheckpoints.Begin()->m_uWordID > uWordID ) + { + tReader.m_pMax = tReader.m_pCur + dCheckpoints.Begin()->m_iOffset; + + } else if ( dCheckpoints.Last().m_uWordID<=uWordID ) + { + tReader.m_pCur += dCheckpoints.Last().m_iOffset; + + } else + { + int L = 0; + int R = dCheckpoints.GetLength()-1; + while ( L+1 dCheckpoints[M].m_uWordID ) + L = M; + else + { + L = M; + break; + } + } + + assert ( dCheckpoints[L].m_uWordID<=uWordID ); + if ( L < dCheckpoints.GetLength()-1 ) + { + assert ( dCheckpoints[L+1].m_uWordID > uWordID ); + tReader.m_pMax = tReader.m_pCur + dCheckpoints[L+1].m_iOffset; + } + tReader.m_pCur += dCheckpoints[L].m_iOffset; + } + } + + // find the word between checkpoints + const RtWord_t * pWord = NULL; + while ( ( pWord = tReader.UnzipWord() )!=NULL ) + { + if ( pWord->m_uWordID==uWordID ) + { + pQword->m_iDocs += pWord->m_uDocs; + pQword->m_iHits += pWord->m_uHits; + if ( bSetup ) + { + SafeDelete ( pQword->m_pDocReader ); + pQword->m_pDocReader = new RtDocReader_t ( pCurSeg, *pWord ); + pQword->m_tHitReader.m_pBase = NULL; + if ( pCurSeg->m_dHits.GetLength() ) + pQword->m_tHitReader.m_pBase = pCurSeg->m_dHits.Begin(); + pQword->m_pSeg = pCurSeg; + } + return true; + + } else if ( pWord->m_uWordID > uWordID ) + return false; + } + return false; +} + +bool RtIndex_t::RtQwordSetup ( RtQword_t * pQword, RtSegment_t * pSeg ) const +{ + // segment-specific setup pass + if ( pSeg ) + return RtQwordSetupSegment ( pQword, pSeg, true ); + + // stat-only pass + // loop all segments, gather stats, do not setup anything + assert ( !pSeg ); + pQword->m_iDocs = 0; + pQword->m_iHits = 0; + + // we care about the results anyway though + // because if all (!) segments miss this word, we must notify the caller, right? + bool bRes = true; + ARRAY_FOREACH ( i, m_pSegments ) + bRes &= RtQwordSetupSegment ( pQword, m_pSegments[i], false ); + + // sanity check + assert ( !( m_pSegments.GetLength()!=0 && bRes==true && pQword->m_iDocs==0 ) ); + return bRes; +} + +static void AddKillListFilter ( CSphVector * pExtra, const SphAttr_t * pKillList, int nEntries ) +{ + assert ( nEntries && pKillList && pExtra ); + CSphFilterSettings & tFilter = pExtra->Add(); + tFilter.m_bExclude = true; + tFilter.m_eType = SPH_FILTER_VALUES; + tFilter.m_uMinValue = pKillList[0]; + tFilter.m_uMaxValue = pKillList[nEntries-1]; + tFilter.m_sAttrName = "@id"; + tFilter.SetExternalValues ( pKillList, nEntries ); +} + + +CSphDict * RtIndex_t::SetupExactDict ( CSphScopedPtr & tContainer, CSphDict * pPrevDict, ISphTokenizer * pTokenizer ) const +{ + assert ( pTokenizer ); + + if ( !m_tSettings.m_bIndexExactWords ) + return pPrevDict; + + tContainer = new CSphDictExact ( pPrevDict ); + CSphRemapRange tStar ( '=', '=', '=' ); // FIXME? check and warn if star was already there + pTokenizer->AddCaseFolding ( tStar ); + return tContainer.Ptr(); +} + + +// FIXME! missing MVA, index_exact_words support +// FIXME? missing enable_star, legacy match modes support +// FIXME? any chance to factor out common backend agnostic code? +// FIXME? do we need to support pExtraFilters? +#ifndef NDEBUG +bool RtIndex_t::MultiQuery ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const CSphVector *, int iTag ) const +#else +bool RtIndex_t::MultiQuery ( const CSphQuery * pQuery, CSphQueryResult * pResult, int iSorters, ISphMatchSorter ** ppSorters, const CSphVector *, int ) const +#endif +{ + assert ( ppSorters ); + + // to avoid the checking of a ppSorters's element for NULL on every next step, just filter out all nulls right here + CSphVector dSorters; + dSorters.Reserve ( iSorters ); + for ( int i=0; im_iQueryTime = 0; + return false; + } + + // FIXME! too early (how low can you go?) + m_tRwlock.ReadLock (); + + assert ( pQuery ); + assert ( pResult ); + assert ( iTag==0 ); + + MEMORY ( SPH_MEM_IDX_RT_MULTY_QUERY ); + + // start counting + pResult->m_iQueryTime = 0; + int64_t tmQueryStart = sphMicroTimer(); + + // force ext2 mode for them + // FIXME! eliminate this const breakage + const_cast ( pQuery )->m_eMode = SPH_MATCH_EXTENDED2; + + // wrappers + CSphScopedPtr pTokenizer ( m_pTokenizer->Clone ( false ) ); + + CSphScopedPtr tDict2 ( NULL ); + CSphDict * pDict = SetupExactDict ( tDict2, m_pDict, pTokenizer.Ptr() ); + + // FIXME! slow disk searches could lock out concurrent writes for too long + // FIXME! each result will point to its own MVA and string pools + // !COMMIT need to setup disk K-list here + + ////////////////////// + // search disk chunks + ////////////////////// + + bool m_bKlistLocked = false; + CSphVector dExtra; + // first, collect all the killlists into a vector + for ( int iChunk = m_pDiskChunks.GetLength()-1; iChunk>=0; iChunk-- ) + { + const int iOldLength = dExtra.GetLength(); + if ( iChunk==m_pDiskChunks.GetLength()-1 ) + { + // For the topmost chunk we add the killlist from the ram-index + m_tKlist.Flush(); + m_tKlist.KillListLock(); + if ( m_tKlist.GetKillListSize() ) + { + // we don't lock in vain... + m_bKlistLocked = true; + AddKillListFilter ( &dExtra, m_tKlist.GetKillList(), m_tKlist.GetKillListSize() ); + } else + m_tKlist.KillListUnlock(); + } else + { + const CSphIndex * pDiskChunk = m_pDiskChunks[iChunk+1]; + if ( pDiskChunk->GetKillListSize () ) + AddKillListFilter ( &dExtra, pDiskChunk->GetKillList(), pDiskChunk->GetKillListSize() ); + } + + if ( dExtra.GetLength()==iOldLength ) + dExtra.Add(); + } + + CSphVector dWrongWords; + SmallStringHash_T hDiskStats; + + assert ( dExtra.GetLength()==m_pDiskChunks.GetLength() ); + CSphVector dDiskStrings ( m_pDiskChunks.GetLength() ); + CSphVector dDiskMva ( m_pDiskChunks.GetLength() ); + ARRAY_FOREACH ( iChunk, m_pDiskChunks ) + { + CSphQueryResult tChunkResult; + // storing index in matches tag for finding strings attrs offset later, biased against default zero and segments + const int iTag = m_pSegments.GetLength()+iChunk+1; + if ( !m_pDiskChunks[iChunk]->MultiQuery ( pQuery, &tChunkResult, iSorters, ppSorters, &dExtra, iTag ) ) + { + // FIXME? maybe handle this more gracefully (convert to a warning)? + pResult->m_sError = tChunkResult.m_sError; + m_tRwlock.Unlock (); + if ( m_bKlistLocked ) + m_tKlist.KillListUnlock(); + return false; + } + + // check terms inconsistency amongs disk chunks + const SmallStringHash_T & hSrcStats = tChunkResult.m_hWordStats; + if ( pResult->m_hWordStats.GetLength() ) + { + hSrcStats.IterateStart(); + while ( hSrcStats.IterateNext() ) + { + const CSphQueryResultMeta::WordStat_t * pDstStat = pResult->m_hWordStats ( hSrcStats.IterateGetKey() ); + const CSphQueryResultMeta::WordStat_t & tSrcStat = hSrcStats.IterateGet(); + + // all indexes should produce same words from the query + if ( !pDstStat && !tSrcStat.m_bExpanded ) + { + dWrongWords.Add ( hSrcStats.IterateGetKey() ); + } + + pResult->AddStat ( hSrcStats.IterateGetKey(), tSrcStat.m_iDocs, tSrcStat.m_iHits, tSrcStat.m_bExpanded ); + } + } else + { + pResult->m_hWordStats = hSrcStats; + } + + dDiskStrings[iChunk] = tChunkResult.m_pStrings; + dDiskMva[iChunk] = tChunkResult.m_pMva; + dExtra.Pop(); + + // keep last chunk statistics to check vs rt settings + if ( iChunk==m_pDiskChunks.GetLength()-1 ) + hDiskStats = hSrcStats; + } + + if ( m_bKlistLocked ) + m_tKlist.KillListUnlock(); + + //////////////////// + // search RAM chunk + //////////////////// + + // select the sorter with max schema + int iMaxSchemaSize = -1; + int iMaxSchemaIndex = -1; + ARRAY_FOREACH ( i, dSorters ) + if ( dSorters[i]->GetSchema().GetRowSize() > iMaxSchemaSize ) + { + iMaxSchemaSize = dSorters[i]->GetSchema().GetRowSize(); + iMaxSchemaIndex = i; + } + + // setup calculations and result schema + CSphQueryContext tCtx; + if ( !tCtx.SetupCalc ( pResult, dSorters[iMaxSchemaIndex]->GetSchema(), m_tSchema, NULL ) ) + { + m_tRwlock.Unlock (); + return false; + } + + CSphScopedPtr tDictCloned ( NULL ); + CSphDict * pDictBase = pDict; + if ( pDictBase->HasState() ) + { + tDictCloned = pDictBase = pDictBase->Clone(); + } + + // setup search terms + RtQwordSetup_t tTermSetup; + tTermSetup.m_pDict = pDictBase; + tTermSetup.m_pIndex = this; + tTermSetup.m_eDocinfo = m_tSettings.m_eDocinfo; + tTermSetup.m_iDynamicRowitems = pResult->m_tSchema.GetDynamicSize(); + if ( pQuery->m_uMaxQueryMsec>0 ) + tTermSetup.m_iMaxTimer = sphMicroTimer() + pQuery->m_uMaxQueryMsec*1000; // max_query_time + tTermSetup.m_pWarning = &pResult->m_sWarning; + tTermSetup.m_pSeg = NULL; + tTermSetup.m_pCtx = &tCtx; + + int iIndexWeight = pQuery->GetIndexWeight ( m_sIndexName.cstr() ); + + // bind weights + tCtx.BindWeights ( pQuery, m_tOutboundSchema, iIndexWeight ); + + // parse query + XQQuery_t tParsed; + if ( !sphParseExtendedQuery ( tParsed, pQuery->m_sQuery.cstr(), pTokenizer.Ptr(), &m_tOutboundSchema, pDictBase, m_tSettings.m_iStopwordStep ) ) + { + pResult->m_sError = tParsed.m_sParseError; + m_tRwlock.Unlock (); + return false; + } + + // transform query if needed (quorum transform, keyword expansion, etc.) + sphTransformExtendedQuery ( &tParsed.m_pRoot ); + + if ( !sphCheckQueryHeight ( tParsed.m_pRoot, pResult->m_sError ) ) + { + m_tRwlock.Unlock (); + return false; + } + + // setup query + // must happen before index-level reject, in order to build proper keyword stats + CSphScopedPtr pRanker ( sphCreateRanker ( tParsed, pQuery, pResult, tTermSetup, tCtx ) ); + if ( !pRanker.Ptr() ) + { + m_tRwlock.Unlock (); + return false; + } + + // check terms inconsistency disk chunks vs rt + if ( pResult->m_hWordStats.GetLength() && hDiskStats.GetLength() ) + { + const SmallStringHash_T & hSrcStats = pResult->m_hWordStats; + hSrcStats.IterateStart(); + while ( hSrcStats.IterateNext() ) + { + const CSphQueryResultMeta::WordStat_t * pDstStat = hDiskStats ( hSrcStats.IterateGetKey() ); + const CSphQueryResultMeta::WordStat_t & tSrcStat = hSrcStats.IterateGet(); + + // all indexes should produce same words from the query + if ( !pDstStat && !tSrcStat.m_bExpanded ) + { + dWrongWords.Add ( hSrcStats.IterateGetKey() ); + } + } + } + + // make warning on terms inconsistency + if ( dWrongWords.GetLength() ) + { + dWrongWords.Uniq(); + pResult->m_sWarning.SetSprintf ( "index '%s': query word(s) mismatch: %s", m_sIndexName.cstr(), dWrongWords.Begin()->cstr() ); + for ( int i=1; im_sWarning.SetSprintf ( "%s, %s", pResult->m_sWarning.cstr(), dWrongWords[i].cstr() ); + } + + // empty index, empty result + if ( !m_pSegments.GetLength() && !m_pDiskChunks.GetLength() ) + { + pResult->m_iQueryTime = 0; + m_tRwlock.Unlock (); + return true; + } + + if ( m_pSegments.GetLength() ) + { + // setup filters + // FIXME! setup filters MVA pool + bool bFullscan = ( pQuery->m_eMode==SPH_MATCH_FULLSCAN || pQuery->m_sQuery.IsEmpty() ); + if ( !tCtx.CreateFilters ( bFullscan, &pQuery->m_dFilters, pResult->m_tSchema, NULL, pResult->m_sError ) ) + { + m_tRwlock.Unlock (); + return false; + } + + // FIXME! OPTIMIZE! check if we can early reject the whole index + + // setup lookup + // do pre-filter lookup as needed + // do pre-sort lookup in all cases + // post-sort lookup is complicated (because of many segments) + // pre-sort lookup is cheap now anyway, and almost always anyway + // (except maybe by stupid relevance-sorting-only benchmarks!!) + tCtx.m_bLookupFilter = ( pQuery->m_dFilters.GetLength() || tCtx.m_dCalcFilter.GetLength() ); + tCtx.m_bLookupSort = true; + + // FIXME! setup overrides + + // do searching + bool bRandomize = dSorters[0]->m_bRandomize; + int iCutoff = pQuery->m_iCutoff; + if ( iCutoff<=0 ) + iCutoff = -1; + + if ( bFullscan ) + { + // full scan + // FIXME? OPTIMIZE? add shortcuts here too? + CSphMatch tMatch; + tMatch.Reset ( pResult->m_tSchema.GetDynamicSize() ); + tMatch.m_iWeight = pQuery->GetIndexWeight ( m_sIndexName.cstr() ); + + int iCutoff = pQuery->m_iCutoff; + if ( iCutoff<=0 ) + iCutoff = -1; + + ARRAY_FOREACH ( iSeg, m_pSegments ) + { + // set string pool for string on_sort expression fix up + tCtx.SetStringPool ( m_pSegments[iSeg]->m_dStrings.Begin() ); + tCtx.SetMVAPool ( m_pSegments[iSeg]->m_dMvas.Begin() ); + ARRAY_FOREACH ( i, dSorters ) + { + dSorters[i]->SetStringPool ( m_pSegments[iSeg]->m_dStrings.Begin() ); + dSorters[i]->SetMVAPool ( m_pSegments[iSeg]->m_dMvas.Begin() ); + } + + RtRowIterator_t tIt ( m_pSegments[iSeg], m_iStride, false, NULL ); + for ( ;; ) + { + const CSphRowitem * pRow = tIt.GetNextAliveRow(); + if ( !pRow ) + break; + + tMatch.m_iDocID = DOCINFO2ID(pRow); + tMatch.m_pStatic = DOCINFO2ATTRS(pRow); // FIXME! overrides + ARRAY_FOREACH ( j, m_dDynamize ) + tMatch.SetAttr ( m_dDynamize[j].m_tTo, tMatch.GetAttr ( m_dDynamize[j].m_tFrom ) ); + + tCtx.CalcFilter ( tMatch ); + if ( tCtx.m_pFilter && !tCtx.m_pFilter->Eval ( tMatch ) ) + continue; + + tCtx.CalcSort ( tMatch ); + tCtx.CalcFinal ( tMatch ); // OPTIMIZE? could be possibly done later + + // storing segment in matches tag for finding strings attrs offset later, biased against default zero + tMatch.m_iTag = iSeg+1; + + bool bNewMatch = false; + ARRAY_FOREACH ( iSorter, dSorters ) + bNewMatch |= dSorters[iSorter]->Push ( tMatch ); + + // handle cutoff + if ( bNewMatch ) + if ( --iCutoff==0 ) + break; + } + + if ( iCutoff==0 ) + break; + } + + } else + { + // query matching + ARRAY_FOREACH ( iSeg, m_pSegments ) + { + tTermSetup.m_pSeg = m_pSegments[iSeg]; + pRanker->Reset ( tTermSetup ); + + // for lookups to work + tCtx.m_pIndexData = m_pSegments[iSeg]; + + // set string pool for string on_sort expression fix up + tCtx.SetStringPool ( m_pSegments[iSeg]->m_dStrings.Begin() ); + tCtx.SetMVAPool ( m_pSegments[iSeg]->m_dMvas.Begin() ); + ARRAY_FOREACH ( i, dSorters ) + { + dSorters[i]->SetStringPool ( m_pSegments[iSeg]->m_dStrings.Begin() ); + dSorters[i]->SetMVAPool ( m_pSegments[iSeg]->m_dMvas.Begin() ); + } + + CSphMatch * pMatch = pRanker->GetMatchesBuffer(); + for ( ;; ) + { + int iMatches = pRanker->GetMatches(); + if ( iMatches<=0 ) + break; + + for ( int i=0; iEval ( pMatch[i] ) ) + continue; + + // storing segment in matches tag for finding strings attrs offset later, biased against default zero + pMatch[i].m_iTag = iSeg+1; + + bool bNewMatch = false; + ARRAY_FOREACH ( iSorter, dSorters ) + bNewMatch |= dSorters[iSorter]->Push ( pMatch[i] ); + + if ( bNewMatch ) + if ( --iCutoff==0 ) + break; + } + + if ( iCutoff==0 ) + { + iSeg = m_pSegments.GetLength(); + break; + } + } + } + } + } + + ////////////////////// + // coping match's attributes to external storage in result set + ////////////////////// + + const int iSegmentsTotal = m_pSegments.GetLength(); + const int iStaticSize = m_tSchema.GetStaticSize(); + if ( iStaticSize>0 && iSegmentsTotal>0 ) + { + MEMORY ( SPH_MEM_IDX_RT_RES_MATCHES ); + + // we need to count matches for allocating arena + // as we are going to fix match's m_pStatic pointers later + // and copy real match's data to arena + + int iFixupCount = 0; + + ARRAY_FOREACH ( iSorter, dSorters ) + { + ISphMatchSorter * pSorter = dSorters[iSorter]; + + const int iMatchesCount = pSorter->GetLength(); + const CSphMatch * pMatches = pSorter->First(); + + for ( int i=0; i=0 && iMatchSegment< iSegmentsTotal ) + iFixupCount++; + } + } + + if ( iFixupCount>0 ) + { + CSphRowitem * pAttr = new CSphRowitem [ iFixupCount * iStaticSize ]; + pResult->m_dStorage2Free.Add ( pAttr ); +#ifndef NDEBUG + CSphRowitem * pEnd = pAttr + iFixupCount * iStaticSize; +#endif + + ARRAY_FOREACH ( iSorter, dSorters ) + { + ISphMatchSorter * pSorter = dSorters[iSorter]; + + const int iMatchesCount = pSorter->GetLength(); + CSphMatch * pMatches = pSorter->First(); + + for ( int i=0; i=0 && iMatchSegment< iSegmentsTotal ) + { + assert ( pAttr+iStaticSize<=pEnd ); + + memcpy ( pAttr, pMatches[i].m_pStatic, sizeof(CSphRowitem)*iStaticSize ); + pMatches[i].m_pStatic = pAttr; + pAttr += iStaticSize; + } + } + } + } + } + + + ////////////////////// + // fixing string offset and data in resulting matches + ////////////////////// + + MEMORY ( SPH_MEM_IDX_RT_RES_STRINGS ); + + CSphVector dStringGetLoc; + CSphVector dStringSetLoc; + CSphVector dMvaGetLoc; + CSphVector dMvaSetLoc; + for ( int i=0; im_tSchema.GetAttrsCount(); i++ ) + { + const CSphColumnInfo & tSetInfo = pResult->m_tSchema.GetAttr(i); + if ( tSetInfo.m_eAttrType==SPH_ATTR_STRING ) + { + const int iInLocator = m_tSchema.GetAttrIndex ( tSetInfo.m_sName.cstr() ); + assert ( iInLocator>=0 ); + + dStringGetLoc.Add ( m_tSchema.GetAttr ( iInLocator ).m_tLocator ); + dStringSetLoc.Add ( tSetInfo.m_tLocator ); + } else if ( tSetInfo.m_eAttrType==SPH_ATTR_UINT32SET || tSetInfo.m_eAttrType==SPH_ATTR_UINT64SET ) + { + const int iInLocator = m_tSchema.GetAttrIndex ( tSetInfo.m_sName.cstr() ); + assert ( iInLocator>=0 ); + + dMvaGetLoc.Add ( m_tSchema.GetAttr ( iInLocator ).m_tLocator ); + dMvaSetLoc.Add ( tSetInfo.m_tLocator ); + } + + assert ( ( tSetInfo.m_eAttrType!=SPH_ATTR_STRING && tSetInfo.m_eAttrType!=SPH_ATTR_UINT32SET && tSetInfo.m_eAttrType!=SPH_ATTR_UINT64SET ) + || tSetInfo.m_tLocator.m_bDynamic ); + } + if ( dStringGetLoc.GetLength() || dMvaGetLoc.GetLength() ) + { + assert ( !pResult->m_pStrings && !pResult->m_pMva ); + CSphTightVector dStorageString; + CSphTightVector dStorageMva; + dStorageString.Add ( 0 ); + dStorageMva.Add ( 0 ); + + ARRAY_FOREACH ( iSorter, dSorters ) + { + ISphMatchSorter * pSorter = dSorters[iSorter]; + + const int iMatchesCount = pSorter->GetLength(); + CSphMatch * pMatches = pSorter->First(); + + for ( int i=0; i=1 && tMatch.m_iTagm_dStrings.Begin() : dDiskStrings[ iStorageSrc-iSegCount ]; + const DWORD * pBaseMva = bSegmentMatch ? m_pSegments[iStorageSrc]->m_dMvas.Begin() : dDiskMva[ iStorageSrc-iSegCount ]; + + ARRAY_FOREACH ( i, dStringGetLoc ) + { + const SphAttr_t uOff = tMatch.GetAttr ( dStringGetLoc[i] ); + if ( uOff>0 ) // have to fix up only existed attribute + { + assert ( uOff<( I64C(1)<<32 ) ); // should be 32 bit offset + assert ( !bSegmentMatch || (int)uOffm_dStrings.GetLength() ); + + DWORD uAttr = CopyPackedString ( pBaseString + uOff, dStorageString ); + tMatch.SetAttr ( dStringSetLoc[i], uAttr ); + + } else + { + tMatch.SetAttr ( dStringSetLoc[i], 0 ); + } + } + + bool bIdSet = false; + ARRAY_FOREACH ( i, dMvaGetLoc ) + { + const SphAttr_t uOff = tMatch.GetAttr ( dMvaGetLoc[i] ); + if ( uOff>0 ) // have to fix up only existed attribute + { + assert ( uOff<( I64C(1)<<32 ) ); // should be 32 bit offset + assert ( !bSegmentMatch || (int)uOffm_dMvas.GetLength() ); + + if ( !bIdSet ) + { + CopyDocid ( tMatch.m_iDocID, dStorageMva ); + bIdSet = true; + } + + DWORD uAttr = CopyMva ( pBaseMva + uOff, dStorageMva ); + tMatch.SetAttr ( dMvaSetLoc[i], uAttr ); + } else + { + tMatch.SetAttr ( dMvaSetLoc[i], 0 ); + } + } + } + } + + if ( dStorageString.GetLength()>1 ) + { + BYTE * pStrings = dStorageString.LeakData (); + pResult->m_dStorage2Free.Add ( pStrings ); + pResult->m_pStrings = pStrings; + } + if ( dStorageMva.GetLength()>1 ) + { + DWORD * pMva = dStorageMva.LeakData(); + pResult->m_dStorage2Free.Add ( pMva ); + pResult->m_pMva = pMva; + } + } + + // query timer + pResult->m_iQueryTime = int ( ( sphMicroTimer()-tmQueryStart )/1000 ); + m_tRwlock.Unlock (); + return true; +} + +bool RtIndex_t::MultiQueryEx ( int iQueries, const CSphQuery * ppQueries, CSphQueryResult ** ppResults, ISphMatchSorter ** ppSorters, const CSphVector * pExtraFilters, int iTag ) const +{ + // FIXME! OPTIMIZE! implement common subtree cache here + bool bResult = false; + for ( int i=0; im_iMultiplier = -1; + + return bResult; +} + +bool RtIndex_t::GetKeywords ( CSphVector & dKeywords, const char * sQuery, bool bGetStats, CSphString & sError ) const +{ + m_tRwlock.ReadLock(); // this is actually needed only if they want stats + + RtQword_t tQword; + CSphString sBuffer ( sQuery ); + + CSphScopedPtr pTokenizer ( m_pTokenizer->Clone ( false ) ); // avoid race + pTokenizer->SetBuffer ( (BYTE *)sBuffer.cstr(), sBuffer.Length() ); + + CSphScopedPtr tDictCloned ( NULL ); + CSphDict * pDictBase = m_pDict; + if ( pDictBase->HasState() ) + { + tDictCloned = pDictBase = pDictBase->Clone(); + } + + while ( BYTE * pToken = pTokenizer->GetToken() ) + { + const char * sToken = (const char *)pToken; + CSphString sWord ( sToken ); + SphWordID_t iWord = pDictBase->GetWordID ( pToken ); + if ( iWord ) + { + CSphKeywordInfo & tInfo = dKeywords.Add(); + tInfo.m_sTokenized = sWord; + tInfo.m_sNormalized = sToken; + tInfo.m_iDocs = 0; + tInfo.m_iHits = 0; + + if ( !bGetStats ) + continue; + + tQword.m_iWordID = iWord; + tQword.m_iDocs = 0; + tQword.m_iHits = 0; + ARRAY_FOREACH ( iSeg, m_pSegments ) + RtQwordSetupSegment ( &tQword, m_pSegments[iSeg], false ); + + tInfo.m_iDocs = tQword.m_iDocs; + tInfo.m_iHits = tQword.m_iHits; + } + } + + // get stats from disk chunks too + if ( bGetStats ) + ARRAY_FOREACH ( iChunk, m_pDiskChunks ) + { + CSphVector dKeywords2; + if ( !m_pDiskChunks[iChunk]->GetKeywords ( dKeywords2, sQuery, bGetStats, sError ) ) + { + m_tRwlock.Unlock(); + return false; + } + + if ( dKeywords.GetLength()!=dKeywords2.GetLength() ) + { + sError.SetSprintf ( "INTERNAL ERROR: keyword count mismatch (ram=%d, disk[%d]=%d)", + dKeywords.GetLength(), iChunk, dKeywords2.GetLength() ); + m_tRwlock.Unlock (); + break; + } + + ARRAY_FOREACH ( i, dKeywords ) + { + if ( dKeywords[i].m_sTokenized!=dKeywords2[i].m_sTokenized ) + { + sError.SetSprintf ( "INTERNAL ERROR: tokenized keyword mismatch (n=%d, ram=%s, disk[%d]=%s)", + i, dKeywords[i].m_sTokenized.cstr(), iChunk, dKeywords2[i].m_sTokenized.cstr() ); + m_tRwlock.Unlock (); + break; + } + + if ( dKeywords[i].m_sNormalized!=dKeywords2[i].m_sNormalized ) + { + sError.SetSprintf ( "INTERNAL ERROR: normalized keyword mismatch (n=%d, ram=%s, disk[%d]=%s)", + i, dKeywords[i].m_sTokenized.cstr(), iChunk, dKeywords2[i].m_sTokenized.cstr() ); + m_tRwlock.Unlock (); + break; + } + + dKeywords[i].m_iDocs += dKeywords2[i].m_iDocs; + dKeywords[i].m_iHits += dKeywords2[i].m_iHits; + } + } + + m_tRwlock.Unlock(); + return true; +} + +// FIXME! might be inconsistent in case disk chunk update fails +int RtIndex_t::UpdateAttributes ( const CSphAttrUpdate & tUpd, int iIndex, CSphString & sError ) +{ + // check if we have to + assert ( tUpd.m_dDocids.GetLength()==tUpd.m_dRowOffset.GetLength() ); + if ( !tUpd.m_dDocids.GetLength() ) + return 0; + + // remap update schema to index schema + CSphVector dLocators; + uint64_t uDst64 = 0; + ARRAY_FOREACH ( i, tUpd.m_dAttrs ) + { + int iIndex = m_tSchema.GetAttrIndex ( tUpd.m_dAttrs[i].m_sName.cstr() ); + if ( iIndex<0 ) + { + sError.SetSprintf ( "attribute '%s' not found", tUpd.m_dAttrs[i].m_sName.cstr() ); + return -1; + } + + // forbid updates on non-int columns + const CSphColumnInfo & tCol = m_tSchema.GetAttr(iIndex); + if ( !( tCol.m_eAttrType==SPH_ATTR_BOOL || tCol.m_eAttrType==SPH_ATTR_INTEGER || tCol.m_eAttrType==SPH_ATTR_TIMESTAMP + || tCol.m_eAttrType==SPH_ATTR_UINT32SET || tCol.m_eAttrType==SPH_ATTR_UINT64SET ) ) + { + sError.SetSprintf ( "attribute '%s' can not be updated (must be boolean, integer, or timestamp or MVA)", tUpd.m_dAttrs[i].m_sName.cstr() ); + return -1; + } + + bool bSrcMva = ( tCol.m_eAttrType==SPH_ATTR_UINT32SET || tCol.m_eAttrType==SPH_ATTR_UINT64SET ); + bool bDstMva = ( tUpd.m_dAttrs[i].m_eAttrType==SPH_ATTR_UINT32SET || tUpd.m_dAttrs[i].m_eAttrType==SPH_ATTR_UINT64SET ); + if ( bSrcMva!=bDstMva ) + { + sError.SetSprintf ( "attribute '%s' MVA flag mismatch", tUpd.m_dAttrs[i].m_sName.cstr() ); + return -1; + } + + if ( tCol.m_eAttrType==SPH_ATTR_UINT32SET && tUpd.m_dAttrs[i].m_eAttrType==SPH_ATTR_UINT64SET ) + { + sError.SetSprintf ( "attribute '%s' MVA bits (dst=%d, src=%d) mismatch", tUpd.m_dAttrs[i].m_sName.cstr(), + tCol.m_eAttrType, tUpd.m_dAttrs[i].m_eAttrType ); + return -1; + } + + if ( tCol.m_eAttrType==SPH_ATTR_UINT64SET ) + uDst64 |= ( U64C(1)< ( m_pSegments[iSeg]->FindAliveRow ( tUpd.m_dDocids[iUpd] ) ); + if ( !pRow ) + continue; + + assert ( DOCINFO2ID(pRow)==tUpd.m_dDocids[iUpd] ); + pRow = DOCINFO2ATTRS(pRow); + + int iPos = tUpd.m_dRowOffset[iUpd]; + ARRAY_FOREACH ( iCol, tUpd.m_dAttrs ) + { + if ( !( tUpd.m_dAttrs[iCol].m_eAttrType==SPH_ATTR_UINT32SET || tUpd.m_dAttrs[iCol].m_eAttrType==SPH_ATTR_UINT64SET ) ) + { + // plain update + uUpdateMask |= ATTRS_UPDATED; + + SphAttr_t uValue = tUpd.m_dPool[iPos]; + sphSetRowAttr ( pRow, dLocators[iCol], uValue ); + iPos++; + } else + { + // MVA update + uUpdateMask |= ATTRS_MVA_UPDATED; + + const DWORD * pSrc = tUpd.m_dPool.Begin()+iPos; + DWORD iLen = *pSrc; + if ( !iLen ) + { + iPos++; + sphSetRowAttr ( pRow, dLocators[iCol], 0 ); + continue; + } + + iPos += iLen+1; + + bool bDst64 = ( ( uDst64 & ( U64C(1) << iCol ) )!=0 ); + assert ( ( iLen%2 )==0 ); + DWORD uCount = ( bDst64 ? iLen : iLen/2 ); + + CSphTightVector & dMvas = m_pSegments[iSeg]->m_dMvas; + + DWORD uMvaOff = (DWORD)sphGetRowAttr ( pRow, dLocators[iCol] ); + assert ( !dMvas.Begin() || uMvaOff ); + DWORD * pDst = dMvas.Begin() + uMvaOff; + if ( uCount>(*pDst) ) + { + uMvaOff = dMvas.GetLength(); + dMvas.Resize ( uMvaOff+uCount+1 ); + pDst = dMvas.Begin()+uMvaOff; + } + sphSetRowAttr ( pRow, dLocators[iCol], uMvaOff ); + + if ( bDst64 ) + { + memcpy ( pDst, pSrc, sizeof(DWORD)*(uCount+1) ); + } else + { + *pDst++ = uCount; // MVA values counter first + pSrc++; + while ( uCount-- ) + { + *pDst = *pSrc; + pDst++; + pSrc+=2; + } + } + } + } + + bUpdated = true; + iUpdated++; + } + if ( bUpdated ) + continue; + + // check disk K-list now + // FIXME! optimize away flush + m_tKlist.Flush(); + m_tKlist.KillListLock(); + const SphAttr_t uRef = tUpd.m_dDocids[iUpd]; + bUpdated = ( sphBinarySearch ( m_tKlist.GetKillList(), m_tKlist.GetKillList() + m_tKlist.GetKillListSize() - 1, uRef )!=NULL ); + m_tKlist.KillListUnlock(); + if ( bUpdated ) + continue; + + // finally, try disk chunks + for ( int iChunk = m_pDiskChunks.GetLength()-1; iChunk>=0; iChunk-- ) + { + // run just this update + // FIXME! might be inefficient in case of big batches (redundant allocs in disk update) + int iRes = m_pDiskChunks[iChunk]->UpdateAttributes ( tUpd, iUpd, sError ); + + // errors are highly unlikely at this point + // FIXME! maybe emit a warning to client as well? + if ( iRes<0 ) + { + sphWarn ( "INTERNAL ERROR: index %s chunk %d update failure: %s", m_sIndexName.cstr(), iChunk, sError.cstr() ); + continue; + } + + // update stats + iUpdated += iRes; + + // we only need to update the most fresh chunk + if ( iRes>0 ) + break; + } + } + + // bump the counter, binlog the update! + assert ( iIndex<0 ); + g_pBinlog->BinlogUpdateAttributes ( m_sIndexName.cstr(), ++m_iTID, tUpd ); + + // all done + m_tRwlock.Unlock (); + return iUpdated; +} + +////////////////////////////////////////////////////////////////////////// +// BINLOG +////////////////////////////////////////////////////////////////////////// + +extern DWORD g_dSphinxCRC32 [ 256 ]; + + +static CSphString MakeBinlogName ( const char * sPath, int iExt ) +{ + CSphString sName; + sName.SetSprintf ( "%s/binlog.%03d", sPath, iExt ); + return sName; +} + + +BinlogWriter_c::BinlogWriter_c () +{ + m_iLastWritePos = 0; + m_iLastFsyncPos = 0; + ResetCrc(); +} + + +void BinlogWriter_c::ResetCrc () +{ + m_uCRC = ~((DWORD)0); +} + + +void BinlogWriter_c::PutBytes ( const void * pData, int iSize ) +{ + BYTE * b = (BYTE*) pData; + for ( int i=0; i> 8) ^ g_dSphinxCRC32 [ (m_uCRC ^ *b++) & 0xff ]; + CSphWriter::PutBytes ( pData, iSize ); +} + + +void BinlogWriter_c::PutString ( const char * szString ) +{ + int iLen = szString ? strlen ( szString ) : 0; + ZipValue ( iLen ); + if ( iLen ) + PutBytes ( szString, iLen ); +} + + +void BinlogWriter_c::ZipValue ( uint64_t uValue ) +{ + BYTE uBuf[16]; + int iLen = 0; + + while ( uValue>=0x80 ) + { + uBuf[iLen++] = (BYTE)( 0x80 | ( uValue & 0x7f ) ); + uValue >>= 7; + } + uBuf[iLen++] = (BYTE)uValue; + + PutBytes ( uBuf, iLen ); +} + + +void BinlogWriter_c::WriteCrc () +{ + m_uCRC = ~m_uCRC; + CSphWriter::PutDword ( m_uCRC ); + m_uCRC = ~((DWORD)0); +} + + +void BinlogWriter_c::Flush () +{ + Write(); + Fsync(); +} + + +void BinlogWriter_c::Write () +{ + if ( m_iPoolUsed<=0 ) + return; + + CSphWriter::Flush(); + m_iLastWritePos = GetPos(); +} + + +#if USE_WINDOWS +int fsync ( int iFD ) +{ + // map fd to handle + HANDLE h = (HANDLE) _get_osfhandle ( iFD ); + if ( h==INVALID_HANDLE_VALUE ) + { + errno = EBADF; + return -1; + } + + // do flush + if ( FlushFileBuffers(h) ) + return 0; + + // error handling + errno = EIO; + if ( GetLastError()==ERROR_INVALID_HANDLE ) + errno = EINVAL; + return -1; +} +#endif + + +void BinlogWriter_c::Fsync () +{ + if ( !HasUnsyncedData() ) + return; + + m_bError = ( fsync ( m_iFD )!=0 ); + if ( m_bError && m_pError ) + m_pError->SetSprintf ( "failed to sync %s: %s" , m_sName.cstr(), strerror(errno) ); + + m_iLastFsyncPos = GetPos(); +} + +////////////////////////////////////////////////////////////////////////// + +void BinlogReader_c::ResetCrc () +{ + m_uCRC = ~(DWORD(0)); +} + + +void BinlogReader_c::GetBytes ( void * pData, int iSize ) +{ + CSphReader::GetBytes ( pData, iSize ); + BYTE * b = (BYTE*) pData; + for ( int i=0; i> 8) ^ g_dSphinxCRC32 [ (m_uCRC ^ *b++) & 0xff ]; +} + + +DWORD BinlogReader_c::GetDword () +{ + DWORD uRes; + GetBytes ( &uRes, sizeof(DWORD) ); + return uRes; +} + + +CSphString BinlogReader_c::GetString () +{ + CSphString sRes; + int iLen = (int) UnzipValue(); + if ( iLen ) + { + sRes.Reserve ( iLen ); + GetBytes ( (BYTE*)sRes.cstr(), iLen ); + } + return sRes; +} + + +uint64_t BinlogReader_c::UnzipValue () +{ + uint64_t uRes = 0; + int iOff = 0, iByte; + do + { + iByte = CSphReader::GetByte(); + uRes += ( (uint64_t)( iByte & 0x7f ) << iOff ); + iOff += 7; + m_uCRC = (m_uCRC >> 8) ^ g_dSphinxCRC32 [ (m_uCRC ^ (BYTE)iByte) & 0xff ]; + } while ( iByte>=128 ); + + return uRes; +} + + +bool BinlogReader_c::CheckCrc ( const char * sOp, const char * sIndexName, int64_t iTid, int64_t iTxnPos ) +{ + DWORD uRef = CSphAutoreader::GetDword(); + m_uCRC = ~m_uCRC; + if ( uRef!=m_uCRC ) + sphWarning ( "binlog: %s: CRC mismatch (index=%s, tid="INT64_FMT", pos="INT64_FMT")", sOp, sIndexName ? sIndexName : "", iTid, iTxnPos ); + return uRef==m_uCRC; +} + +////////////////////////////////////////////////////////////////////////// + +RtBinlog_c::RtBinlog_c () + : m_iFlushTimeLeft ( 0 ) + , m_iFlushPeriod ( BINLOG_AUTO_FLUSH ) + , m_eOnCommit ( ACTION_NONE ) + , m_iLockFD ( -1 ) + , m_bReplayMode ( false ) + , m_bDisabled ( true ) + , m_iRestartSize ( 0 ) +{ + MEMORY ( SPH_MEM_BINLOG ); + + Verify ( m_tWriteLock.Init() ); + + m_tWriter.SetBufferSize ( BINLOG_WRITE_BUFFER ); +} + +RtBinlog_c::~RtBinlog_c () +{ + if ( !m_bDisabled ) + { + m_iFlushPeriod = 0; + if ( m_eOnCommit!=ACTION_FSYNC ) + sphThreadJoin ( &m_tUpdateTread ); + + DoCacheWrite(); + m_tWriter.CloseFile(); + LockFile ( false ); + } + + Verify ( m_tWriteLock.Done() ); +} + + +void RtBinlog_c::BinlogCommit ( const char * sIndexName, int64_t iTID, const RtSegment_t * pSeg, const CSphVector & dKlist ) +{ + if ( m_bReplayMode || m_bDisabled ) + return; + + MEMORY ( SPH_MEM_BINLOG ); + Verify ( m_tWriteLock.Lock() ); + + const int64_t tmNow = sphMicroTimer(); + const int uIndex = GetWriteIndexID ( sIndexName, iTID, tmNow ); + + // header + m_tWriter.PutDword ( BLOP_MAGIC ); + m_tWriter.ResetCrc (); + + m_tWriter.ZipValue ( BLOP_COMMIT ); + m_tWriter.ZipValue ( uIndex ); + m_tWriter.ZipValue ( iTID ); + m_tWriter.ZipValue ( tmNow ); + + // save txn data + if ( !pSeg || !pSeg->m_iRows ) + { + m_tWriter.ZipValue ( 0 ); + } else + { + m_tWriter.ZipValue ( pSeg->m_iRows ); + SaveVector ( m_tWriter, pSeg->m_dWords ); + m_tWriter.ZipValue ( pSeg->m_dWordCheckpoints.GetLength() ); + ARRAY_FOREACH ( i, pSeg->m_dWordCheckpoints ) + { + m_tWriter.ZipValue ( pSeg->m_dWordCheckpoints[i].m_iOffset ); + m_tWriter.ZipValue ( pSeg->m_dWordCheckpoints[i].m_uWordID ); + } + SaveVector ( m_tWriter, pSeg->m_dDocs ); + SaveVector ( m_tWriter, pSeg->m_dHits ); + SaveVector ( m_tWriter, pSeg->m_dRows ); + SaveVector ( m_tWriter, pSeg->m_dStrings ); + SaveVector ( m_tWriter, pSeg->m_dMvas ); + } + SaveVector ( m_tWriter, dKlist ); + + // checksum + m_tWriter.WriteCrc (); + + // finalize + CheckDoFlush(); + CheckDoRestart(); + Verify ( m_tWriteLock.Unlock() ); +} + +void RtBinlog_c::BinlogUpdateAttributes ( const char * sIndexName, int64_t iTID, const CSphAttrUpdate & tUpd ) +{ + if ( m_bReplayMode || m_bDisabled ) + return; + + MEMORY ( SPH_MEM_BINLOG ); + Verify ( m_tWriteLock.Lock() ); + + const int64_t tmNow = sphMicroTimer(); + const int uIndex = GetWriteIndexID ( sIndexName, iTID, tmNow ); + + // header + m_tWriter.PutDword ( BLOP_MAGIC ); + m_tWriter.ResetCrc (); + + m_tWriter.ZipValue ( BLOP_UPDATE_ATTRS ); + m_tWriter.ZipValue ( uIndex ); + m_tWriter.ZipValue ( iTID ); + m_tWriter.ZipValue ( tmNow ); + + // update data + m_tWriter.ZipValue ( tUpd.m_dAttrs.GetLength() ); + ARRAY_FOREACH ( i, tUpd.m_dAttrs ) + { + m_tWriter.PutString ( tUpd.m_dAttrs[i].m_sName.cstr() ); + m_tWriter.ZipValue ( tUpd.m_dAttrs[i].m_eAttrType ); + } + + // POD vectors + SaveVector ( m_tWriter, tUpd.m_dPool ); + SaveVector ( m_tWriter, tUpd.m_dDocids ); + SaveVector ( m_tWriter, tUpd.m_dRowOffset ); + + // checksum + m_tWriter.WriteCrc (); + + // finalize + CheckDoFlush(); + CheckDoRestart(); + Verify ( m_tWriteLock.Unlock() ); +} + +// here's been going binlogs with ALL closed indices removing +void RtBinlog_c::NotifyIndexFlush ( const char * sIndexName, int64_t iTID, bool bShutdown ) +{ + if ( m_bReplayMode ) + sphInfo ( "index '%s': ramchunk saved. TID="INT64_FMT"", sIndexName, iTID ); + + if ( m_bReplayMode || m_bDisabled ) + return; + + MEMORY ( SPH_MEM_BINLOG ); + assert ( bShutdown || m_dLogFiles.GetLength() ); + + Verify ( m_tWriteLock.Lock() ); + + bool bCurrentLogShut = false; + const int iPreflushFiles = m_dLogFiles.GetLength(); + + // loop through all log files, and check if we can unlink any + ARRAY_FOREACH ( iLog, m_dLogFiles ) + { + BinlogFileDesc_t & tLog = m_dLogFiles[iLog]; + bool bUsed = false; + + // update index info for this log file + ARRAY_FOREACH ( i, tLog.m_dIndexInfos ) + { + BinlogIndexInfo_t & tIndex = tLog.m_dIndexInfos[i]; + + // this index was just flushed, update flushed TID + if ( tIndex.m_sName==sIndexName ) + { + assert ( iTID>=tIndex.m_iFlushedTID ); + tIndex.m_iFlushedTID = Max ( tIndex.m_iFlushedTID, iTID ); + } + + // if max logged TID is greater than last flushed TID, log file still has needed recovery data + if ( tIndex.m_iFlushedTID < tIndex.m_iMaxTID ) + bUsed = true; + } + + // it's needed, keep looking + if ( bUsed ) + continue; + + // hooray, we can remove this log! + // if this is our current log, we have to close it first + if ( iLog==m_dLogFiles.GetLength()-1 ) + { + m_tWriter.CloseFile (); + bCurrentLogShut = true; + } + + // do unlink + CSphString sLog = MakeBinlogName ( m_sLogPath.cstr(), tLog.m_iExt ); + if ( ::unlink ( sLog.cstr() ) ) + sphWarning ( "binlog: failed to unlink %s: %s (remove it manually)", sLog.cstr(), strerror(errno) ); + + // we need to reset it, otherwise there might be leftover data after last Remove() + m_dLogFiles[iLog] = BinlogFileDesc_t(); + // quit tracking it + m_dLogFiles.Remove ( iLog-- ); + } + + if ( bCurrentLogShut && !bShutdown ) + { + // if current log was closed, we need a new one (it will automatically save meta, too) + OpenNewLog (); + + } else if ( iPreflushFiles!=m_dLogFiles.GetLength() ) + { + // if we unlinked any logs, we need to save meta, too + SaveMeta (); + } + + Verify ( m_tWriteLock.Unlock() ); +} + +void RtBinlog_c::Configure ( const CSphConfigSection & hSearchd, bool bTestMode ) +{ + MEMORY ( SPH_MEM_BINLOG ); + + const int iMode = hSearchd.GetInt ( "binlog_flush", 2 ); + switch ( iMode ) + { + case 0: m_eOnCommit = ACTION_NONE; break; + case 1: m_eOnCommit = ACTION_FSYNC; break; + case 2: m_eOnCommit = ACTION_WRITE; break; + default: sphDie ( "unknown binlog flush mode %d (must be 0, 1, or 2)\n", iMode ); + } + +#ifndef DATADIR +#define DATADIR "." +#endif + + m_sLogPath = hSearchd.GetStr ( "binlog_path", bTestMode ? "" : DATADIR ); + m_bDisabled = m_sLogPath.IsEmpty(); + + m_iRestartSize = hSearchd.GetSize ( "binlog_max_log_size", m_iRestartSize ); + + if ( !m_bDisabled ) + { + LockFile ( true ); + LoadMeta(); + } +} + +void RtBinlog_c::Replay ( const SmallStringHash_T & hIndexes, ProgressCallbackSimple_t * pfnProgressCallback ) +{ + if ( m_bDisabled || !hIndexes.GetLength() ) + return; + + // on replay started + if ( pfnProgressCallback ) + pfnProgressCallback(); + + int64_t tmReplay = sphMicroTimer(); + // do replay + m_bReplayMode = true; + int iLastLogState = 0; + ARRAY_FOREACH ( i, m_dLogFiles ) + { + iLastLogState = ReplayBinlog ( hIndexes, i ); + if ( pfnProgressCallback ) // on each replayed binlog + pfnProgressCallback(); + } + + if ( m_dLogFiles.GetLength()>0 ) + { + tmReplay = sphMicroTimer() - tmReplay; + sphInfo ( "binlog: finished replaying total %d in %d.%03d sec", + m_dLogFiles.GetLength(), + (int)(tmReplay/1000000), (int)((tmReplay/1000)%1000) ); + } + + // FIXME? + // in some cases, indexes might had been flushed during replay + // and we might therefore want to update m_iFlushedTID everywhere + // but for now, let's just wait until next flush for simplicity + + // resume normal operation + m_bReplayMode = false; + OpenNewLog ( iLastLogState ); +} + +void RtBinlog_c::CreateTimerThread () +{ + if ( !m_bDisabled && m_eOnCommit!=ACTION_FSYNC ) + { + m_iFlushTimeLeft = sphMicroTimer() + m_iFlushPeriod; + sphThreadCreate ( &m_tUpdateTread, RtBinlog_c::DoAutoFlush, this ); + } +} + +void RtBinlog_c::DoAutoFlush ( void * pBinlog ) +{ + assert ( pBinlog ); + RtBinlog_c * pLog = (RtBinlog_c *)pBinlog; + assert ( !pLog->m_bDisabled ); + + while ( pLog->m_iFlushPeriod>0 ) + { + if ( pLog->m_iFlushTimeLeft < sphMicroTimer() ) + { + MEMORY ( SPH_MEM_BINLOG ); + + pLog->m_iFlushTimeLeft = sphMicroTimer() + pLog->m_iFlushPeriod; + + if ( pLog->m_eOnCommit==ACTION_NONE || pLog->m_tWriter.HasUnwrittenData() ) + { + Verify ( pLog->m_tWriteLock.Lock() ); + pLog->m_tWriter.Flush(); + Verify ( pLog->m_tWriteLock.Unlock() ); + } + + if ( pLog->m_tWriter.HasUnsyncedData() ) + pLog->m_tWriter.Fsync(); + } + + // sleep N msec before next iter or terminate because of shutdown + sphSleepMsec ( 100 ); + } +} + +int RtBinlog_c::GetWriteIndexID ( const char * sName, int64_t iTID, int64_t tmNow ) +{ + MEMORY ( SPH_MEM_BINLOG ); + assert ( m_dLogFiles.GetLength() ); + + // OPTIMIZE? maybe hash them? + BinlogFileDesc_t & tLog = m_dLogFiles.Last(); + ARRAY_FOREACH ( i, tLog.m_dIndexInfos ) + { + BinlogIndexInfo_t & tIndex = tLog.m_dIndexInfos[i]; + if ( tIndex.m_sName==sName ) + { + tIndex.m_iMaxTID = Max ( tIndex.m_iMaxTID, iTID ); + tIndex.m_tmMax = Max ( tIndex.m_tmMax, tmNow ); + return i; + } + } + + // create a new entry + int iID = tLog.m_dIndexInfos.GetLength(); + BinlogIndexInfo_t & tIndex = tLog.m_dIndexInfos.Add(); // caller must hold a wlock + tIndex.m_sName = sName; + tIndex.m_iMinTID = iTID; + tIndex.m_iMaxTID = iTID; + tIndex.m_iFlushedTID = 0; + tIndex.m_tmMin = tmNow; + tIndex.m_tmMax = tmNow; + + // log this new entry + m_tWriter.PutDword ( BLOP_MAGIC ); + m_tWriter.ResetCrc (); + + m_tWriter.ZipValue ( BLOP_ADD_INDEX ); + m_tWriter.ZipValue ( iID ); + m_tWriter.PutString ( sName ); + m_tWriter.ZipValue ( iTID ); + m_tWriter.ZipValue ( tmNow ); + m_tWriter.WriteCrc (); + + // return the index + return iID; +} + +void RtBinlog_c::LoadMeta () +{ + MEMORY ( SPH_MEM_BINLOG ); + + CSphString sMeta; + sMeta.SetSprintf ( "%s/binlog.meta", m_sLogPath.cstr() ); + if ( !sphIsReadable ( sMeta.cstr() ) ) + return; + + CSphString sError; + + // opened and locked, lets read + CSphAutoreader rdMeta; + if ( !rdMeta.Open ( sMeta, sError ) ) + sphDie ( "%s error: %s", sMeta.cstr(), sError.cstr() ); + + if ( rdMeta.GetDword()!=BINLOG_META_MAGIC ) + sphDie ( "invalid meta file %s", sMeta.cstr() ); + + DWORD uVersion = rdMeta.GetDword(); + if ( uVersion!=BINLOG_VERSION ) + sphDie ( "binlog meta file %s is v.%d, binary is v.%d; recovery requires previous binary version", sMeta.cstr(), uVersion, BINLOG_VERSION ); + + const bool bLoaded64bit = ( rdMeta.GetByte()==1 ); + if ( bLoaded64bit!=USE_64BIT ) + sphDie ( "USE_64BIT inconsistency (binary=%d, binlog=%d); recovery requires previous binary version", USE_64BIT, bLoaded64bit ); + + // load list of active log files + m_dLogFiles.Resize ( rdMeta.UnzipInt() ); // FIXME! sanity check + ARRAY_FOREACH ( i, m_dLogFiles ) + m_dLogFiles[i].m_iExt = rdMeta.UnzipInt(); // everything else is saved in logs themselves +} + +void RtBinlog_c::SaveMeta () +{ + MEMORY ( SPH_MEM_BINLOG ); + + CSphString sMeta, sMetaOld; + sMeta.SetSprintf ( "%s/binlog.meta.new", m_sLogPath.cstr() ); + sMetaOld.SetSprintf ( "%s/binlog.meta", m_sLogPath.cstr() ); + + CSphString sError; + + // opened and locked, lets write + CSphWriter wrMeta; + if ( !wrMeta.OpenFile ( sMeta, sError ) ) + sphDie ( "failed to open '%s': '%s'", sMeta.cstr(), sError.cstr() ); + + wrMeta.PutDword ( BINLOG_META_MAGIC ); + wrMeta.PutDword ( BINLOG_VERSION ); + wrMeta.PutByte ( USE_64BIT ); + + // save list of active log files + wrMeta.ZipInt ( m_dLogFiles.GetLength() ); + ARRAY_FOREACH ( i, m_dLogFiles ) + wrMeta.ZipInt ( m_dLogFiles[i].m_iExt ); // everything else is saved in logs themselves + + wrMeta.CloseFile(); + + if ( ::rename_rt ( sMeta.cstr(), sMetaOld.cstr() ) ) + sphDie ( "failed to rename meta (src=%s, dst=%s, errno=%d, error=%s)", + sMeta.cstr(), sMetaOld.cstr(), errno, strerror(errno) ); // !COMMIT handle this gracefully + sphLogDebug ( "SaveMeta: Done." ); +} + +void RtBinlog_c::LockFile ( bool bLock ) +{ + CSphString sName; + sName.SetSprintf ( "%s/binlog.lock", m_sLogPath.cstr() ); + + if ( bLock ) + { + assert ( m_iLockFD==-1 ); + const int iLockFD = ::open ( sName.cstr(), SPH_O_NEW, 0644 ); + + if ( iLockFD<0 ) + sphDie ( "failed to open '%s': %u '%s'", sName.cstr(), errno, strerror(errno) ); + + if ( !sphLockEx ( iLockFD, false ) ) + sphDie ( "failed to lock '%s': %u '%s'", sName.cstr(), errno, strerror(errno) ); + + m_iLockFD = iLockFD; + } else + { + SafeClose ( m_iLockFD ); + ::unlink ( sName.cstr() ); + } +} + +void RtBinlog_c::OpenNewLog ( int iLastState ) +{ + MEMORY ( SPH_MEM_BINLOG ); + + // calc new ext + int iExt = 1; + if ( m_dLogFiles.GetLength() ) + { + iExt = m_dLogFiles.Last().m_iExt; + if ( !iLastState ) + iExt++; + } + + // create entry + // we need to reset it, otherwise there might be leftover data after last Remove() + BinlogFileDesc_t tLog; + tLog.m_iExt = iExt; + m_dLogFiles.Add ( tLog ); + + // create file + CSphString sLog = MakeBinlogName ( m_sLogPath.cstr(), tLog.m_iExt ); + + if ( !iLastState ) // reuse the last binlog since it is empty or useless. + ::unlink ( sLog.cstr() ); + + if ( !m_tWriter.OpenFile ( sLog.cstr(), m_sWriterError ) ) + sphDie ( "failed to create %s: errno=%d, error=%s", sLog.cstr(), errno, strerror(errno) ); + + // emit header + m_tWriter.PutDword ( BINLOG_HEADER_MAGIC ); + m_tWriter.PutDword ( BINLOG_VERSION ); + + // update meta + SaveMeta(); +} + +void RtBinlog_c::DoCacheWrite () +{ + if ( !m_dLogFiles.GetLength() ) + return; + const CSphVector & dIndexes = m_dLogFiles.Last().m_dIndexInfos; + + m_tWriter.PutDword ( BLOP_MAGIC ); + m_tWriter.ResetCrc (); + + m_tWriter.ZipValue ( BLOP_ADD_CACHE ); + m_tWriter.ZipValue ( dIndexes.GetLength() ); + ARRAY_FOREACH ( i, dIndexes ) + { + m_tWriter.PutString ( dIndexes[i].m_sName.cstr() ); + m_tWriter.ZipValue ( dIndexes[i].m_iMinTID ); + m_tWriter.ZipValue ( dIndexes[i].m_iMaxTID ); + m_tWriter.ZipValue ( dIndexes[i].m_iFlushedTID ); + m_tWriter.ZipValue ( dIndexes[i].m_tmMin ); + m_tWriter.ZipValue ( dIndexes[i].m_tmMax ); + } + m_tWriter.WriteCrc (); +} + +void RtBinlog_c::CheckDoRestart () +{ + // restart on exceed file size limit + if ( m_iRestartSize>0 && m_tWriter.GetPos()>m_iRestartSize ) + { + MEMORY ( SPH_MEM_BINLOG ); + + assert ( m_dLogFiles.GetLength() ); + + DoCacheWrite(); + m_tWriter.CloseFile(); + OpenNewLog(); + } +} + +void RtBinlog_c::CheckDoFlush () +{ + if ( m_eOnCommit==ACTION_NONE ) + return; + + if ( m_eOnCommit==ACTION_WRITE && m_tWriter.HasUnwrittenData() ) + m_tWriter.Write(); + + if ( m_eOnCommit==ACTION_FSYNC && m_tWriter.HasUnsyncedData() ) + { + if ( m_tWriter.HasUnwrittenData() ) + m_tWriter.Write(); + + m_tWriter.Fsync(); + } +} + +int RtBinlog_c::ReplayBinlog ( const SmallStringHash_T & hIndexes, int iBinlog ) +{ + assert ( iBinlog>=0 && iBinlog=BLOP_TOTAL ) + sphDie ( "binlog: unexpected entry (blop="UINT64_FMT", pos="INT64_FMT")", uOp, iPos ); + + // FIXME! blop might be OK but skipped (eg. index that is no longer) + switch ( uOp ) + { + case BLOP_COMMIT: + bReplayOK = ReplayCommit ( iBinlog, tReader ); + break; + + case BLOP_UPDATE_ATTRS: + bReplayOK = ReplayUpdateAttributes ( iBinlog, tReader ); + break; + + case BLOP_ADD_INDEX: + bReplayOK = ReplayIndexAdd ( iBinlog, hIndexes, tReader ); + break; + + case BLOP_ADD_CACHE: + if ( bHaveCacheOp ) + sphDie ( "binlog: internal error, second BLOP_ADD_CACHE detected (corruption?)" ); + bHaveCacheOp = true; + bReplayOK = ReplayCacheAdd ( iBinlog, tReader ); + break; + + default: + sphDie ( "binlog: internal error, unhandled entry (blop=%d)", (int)uOp ); + } + + dTotal [ uOp ] += bReplayOK?1:0; + dTotal [ BLOP_TOTAL ]++; + } + + tmReplay = sphMicroTimer() - tmReplay; + + if ( tReader.GetErrorFlag() ) + sphWarning ( "binlog: log io error at pos="INT64_FMT": %s", iPos, sError.cstr() ); + + if ( !bReplayOK ) + sphWarning ( "binlog: replay error at pos="INT64_FMT")", iPos ); + + // show additional replay statistics + ARRAY_FOREACH ( i, tLog.m_dIndexInfos ) + { + const BinlogIndexInfo_t & tIndex = tLog.m_dIndexInfos[i]; + if ( !hIndexes ( tIndex.m_sName.cstr() ) ) + { + sphWarning ( "binlog: index %s: missing; tids "INT64_FMT" to "INT64_FMT" skipped!", + tIndex.m_sName.cstr(), tIndex.m_iMinTID, tIndex.m_iMaxTID ); + + } else if ( tIndex.m_iPreReplayTID < tIndex.m_iMaxTID ) + { + sphInfo ( "binlog: index %s: recovered from tid "INT64_FMT" to tid "INT64_FMT, + tIndex.m_sName.cstr(), tIndex.m_iPreReplayTID, tIndex.m_iMaxTID ); + + } else + { + sphInfo ( "binlog: index %s: skipped at tid "INT64_FMT" and max binlog tid "INT64_FMT, + tIndex.m_sName.cstr(), tIndex.m_iPreReplayTID, tIndex.m_iMaxTID ); + } + } + + sphInfo ( "binlog: replay stats: %d rows in %d commits; %d updates; %d indexes", + m_iReplayedRows, dTotal[BLOP_COMMIT], dTotal[BLOP_UPDATE_ATTRS], dTotal[BLOP_ADD_INDEX] ); + sphInfo ( "binlog: finished replaying %s; %d.%d MB in %d.%03d sec", + sLog.cstr(), + (int)(iFileSize/1048576), (int)((iFileSize*10/1048576)%10), + (int)(tmReplay/1000000), (int)((tmReplay/1000)%1000) ); + + if ( bHaveCacheOp && dTotal[BLOP_TOTAL]==1 ) // only one operation, that is Add Cache - by the fact, empty binlog + return 1; + + return 0; +} + + +static BinlogIndexInfo_t & ReplayIndexID ( BinlogReader_c & tReader, BinlogFileDesc_t & tLog, const char * sPlace ) +{ + const int64_t iTxnPos = tReader.GetPos(); + const int iVal = (int)tReader.UnzipValue(); + + if ( iVal<0 || iVal>=tLog.m_dIndexInfos.GetLength() ) + sphDie ( "binlog: %s: unexpected index id (id=%d, max=%d, pos="INT64_FMT")", + sPlace, iVal, tLog.m_dIndexInfos.GetLength(), iTxnPos ); + + return tLog.m_dIndexInfos[iVal]; +} + + +bool RtBinlog_c::ReplayCommit ( int iBinlog, BinlogReader_c & tReader ) const +{ + // load and lookup index + const int64_t iTxnPos = tReader.GetPos(); + BinlogFileDesc_t & tLog = m_dLogFiles[iBinlog]; + BinlogIndexInfo_t & tIndex = ReplayIndexID ( tReader, tLog, "commit" ); + + // load transaction data + const int64_t iTID = (int64_t) tReader.UnzipValue(); + const int64_t tmStamp = (int64_t) tReader.UnzipValue(); + + RtSegment_t * pSeg = NULL; + CSphVector dKlist; + + int iRows = (int)tReader.UnzipValue(); + if ( iRows ) + { + pSeg = new RtSegment_t(); + pSeg->m_iRows = pSeg->m_iAliveRows = iRows; + m_iReplayedRows += iRows; + + LoadVector ( tReader, pSeg->m_dWords ); + pSeg->m_dWordCheckpoints.Resize ( (int) tReader.UnzipValue() ); // FIXME! sanity check + ARRAY_FOREACH ( i, pSeg->m_dWordCheckpoints ) + { + pSeg->m_dWordCheckpoints[i].m_iOffset = (int) tReader.UnzipValue(); + pSeg->m_dWordCheckpoints[i].m_uWordID = (SphWordID_t )tReader.UnzipValue(); + } + LoadVector ( tReader, pSeg->m_dDocs ); + LoadVector ( tReader, pSeg->m_dHits ); + LoadVector ( tReader, pSeg->m_dRows ); + LoadVector ( tReader, pSeg->m_dStrings ); + LoadVector ( tReader, pSeg->m_dMvas ); + } + LoadVector ( tReader, dKlist ); + + // checksum + if ( tReader.GetErrorFlag() || !tReader.CheckCrc ( "commit", tIndex.m_sName.cstr(), iTID, iTxnPos ) ) + return false; + + // check TID, time order in log + if ( iTID tIndex.m_pRT->m_iTID ) + { + // we normally expect per-index TIDs to be sequential + // but let's be graceful about that + if ( iTID!=tIndex.m_pRT->m_iTID+1 ) + sphWarning ( "binlog: commit: unexpected tid (index=%s, indextid="INT64_FMT", logtid="INT64_FMT", pos="INT64_FMT")", + tIndex.m_sName.cstr(), tIndex.m_pRT->m_iTID, iTID, iTxnPos ); + + // actually replay + tIndex.m_pRT->CommitReplayable ( pSeg, dKlist ); + + // update committed tid on replay in case of unexpected / mismatched tid + tIndex.m_pRT->m_iTID = iTID; + } + + // update info + tIndex.m_iMinTID = Min ( tIndex.m_iMinTID, iTID ); + tIndex.m_iMaxTID = Max ( tIndex.m_iMaxTID, iTID ); + tIndex.m_tmMin = Min ( tIndex.m_tmMin, tmStamp ); + tIndex.m_tmMax = Max ( tIndex.m_tmMax, tmStamp ); + return true; +} + +bool RtBinlog_c::ReplayIndexAdd ( int iBinlog, const SmallStringHash_T & hIndexes, BinlogReader_c & tReader ) const +{ + // load and check index + const int64_t iTxnPos = tReader.GetPos(); + BinlogFileDesc_t & tLog = m_dLogFiles[iBinlog]; + + uint64_t uVal = tReader.UnzipValue(); + if ( (int)uVal!=tLog.m_dIndexInfos.GetLength() ) + sphDie ( "binlog: indexadd: unexpected index id (id="UINT64_FMT", expected=%d, pos="INT64_FMT")", + uVal, tLog.m_dIndexInfos.GetLength(), iTxnPos ); + + // load data + CSphString sName = tReader.GetString(); + + // FIXME? use this for double checking? + tReader.UnzipValue (); // TID + tReader.UnzipValue (); // time + + if ( !tReader.CheckCrc ( "indexadd", sName.cstr(), 0, iTxnPos ) ) + return false; + + // check for index name dupes + ARRAY_FOREACH ( i, tLog.m_dIndexInfos ) + if ( tLog.m_dIndexInfos[i].m_sName==sName ) + sphDie ( "binlog: duplicate index name (name=%s, dupeid=%d, pos="INT64_FMT")", + sName.cstr(), i, iTxnPos ); + + // not a dupe, lets add + BinlogIndexInfo_t & tIndex = tLog.m_dIndexInfos.Add(); + tIndex.m_sName = sName; + + // lookup index in the list of currently served ones + CSphIndex ** ppIndex = hIndexes ( sName.cstr() ); + CSphIndex * pIndex = ppIndex ? (*ppIndex) : NULL; + if ( pIndex ) + { + tIndex.m_pIndex = pIndex; + if ( pIndex->IsRT() ) + tIndex.m_pRT = (RtIndex_t*)pIndex; + tIndex.m_iPreReplayTID = pIndex->m_iTID; + tIndex.m_iFlushedTID = pIndex->m_iTID; + } + + // all ok + // TID ranges will be now recomputed as we replay + return true; +} + +bool RtBinlog_c::ReplayUpdateAttributes ( int iBinlog, BinlogReader_c & tReader ) const +{ + // load and lookup index + const int64_t iTxnPos = tReader.GetPos(); + BinlogFileDesc_t & tLog = m_dLogFiles[iBinlog]; + BinlogIndexInfo_t & tIndex = ReplayIndexID ( tReader, tLog, "update" ); + + // load transaction data + CSphAttrUpdate tUpd; + + int64_t iTID = (int64_t) tReader.UnzipValue(); + int64_t tmStamp = (int64_t) tReader.UnzipValue(); + + tUpd.m_dAttrs.Resize ( (DWORD) tReader.UnzipValue() ); // FIXME! sanity check + ARRAY_FOREACH ( i, tUpd.m_dAttrs ) + { + tUpd.m_dAttrs[i].m_sName = tReader.GetString(); + tUpd.m_dAttrs[i].m_eAttrType = (ESphAttr) tReader.UnzipValue(); // safe, we'll crc check later + } + if ( tReader.GetErrorFlag() + || !LoadVector ( tReader, tUpd.m_dPool ) + || !LoadVector ( tReader, tUpd.m_dDocids ) + || !LoadVector ( tReader, tUpd.m_dRowOffset ) + || !tReader.CheckCrc ( "update", tIndex.m_sName.cstr(), iTID, iTxnPos ) ) + { + return false; + } + + // check TID, time order in log + if ( iTID tIndex.m_pIndex->m_iTID ) + { + // we normally expect per-index TIDs to be sequential + // but let's be graceful about that + if ( iTID!=tIndex.m_pIndex->m_iTID+1 ) + sphWarning ( "binlog: update: unexpected tid (index=%s, indextid="INT64_FMT", logtid="INT64_FMT", pos="INT64_FMT")", + tIndex.m_sName.cstr(), tIndex.m_pIndex->m_iTID, iTID, iTxnPos ); + + CSphString sError; + tIndex.m_pIndex->UpdateAttributes ( tUpd, -1, sError ); // FIXME! check for errors + + // update committed tid on replay in case of unexpected / mismatched tid + tIndex.m_pIndex->m_iTID = iTID; + } + + // update info + tIndex.m_iMinTID = Min ( tIndex.m_iMinTID, iTID ); + tIndex.m_iMaxTID = Max ( tIndex.m_iMaxTID, iTID ); + tIndex.m_tmMin = Min ( tIndex.m_tmMin, tmStamp ); + tIndex.m_tmMax = Max ( tIndex.m_tmMax, tmStamp ); + return true; +} + +bool RtBinlog_c::ReplayCacheAdd ( int iBinlog, BinlogReader_c & tReader ) const +{ + const int64_t iTxnPos = tReader.GetPos(); + BinlogFileDesc_t & tLog = m_dLogFiles[iBinlog]; + + // load data + CSphVector dCache; + dCache.Resize ( (int) tReader.UnzipValue() ); // FIXME! sanity check + ARRAY_FOREACH ( i, dCache ) + { + dCache[i].m_sName = tReader.GetString(); + dCache[i].m_iMinTID = tReader.UnzipValue(); + dCache[i].m_iMaxTID = tReader.UnzipValue(); + dCache[i].m_iFlushedTID = tReader.UnzipValue(); + dCache[i].m_tmMin = tReader.UnzipValue(); + dCache[i].m_tmMax = tReader.UnzipValue(); + } + if ( !tReader.CheckCrc ( "cache", "", 0, iTxnPos ) ) + return false; + + // if we arrived here by replay, let's verify everything + // note that cached infos just passed checksumming, so the file is supposed to be clean! + // in any case, broken log or not, we probably managed to replay something + // so let's just report differences as warnings + + if ( dCache.GetLength()!=tLog.m_dIndexInfos.GetLength() ) + { + sphWarning ( "binlog: cache mismatch: %d indexes cached, %d replayed", + dCache.GetLength(), tLog.m_dIndexInfos.GetLength() ); + return true; + } + + ARRAY_FOREACH ( i, dCache ) + { + BinlogIndexInfo_t & tCache = dCache[i]; + BinlogIndexInfo_t & tIndex = tLog.m_dIndexInfos[i]; + + if ( tCache.m_sName!=tIndex.m_sName ) + { + sphWarning ( "binlog: cache mismatch: index %d name mismatch (%s cached, %s replayed)", + i, tCache.m_sName.cstr(), tIndex.m_sName.cstr() ); + continue; + } + + if ( tCache.m_iMinTID!=tIndex.m_iMinTID || tCache.m_iMaxTID!=tIndex.m_iMaxTID ) + { + sphWarning ( "binlog: cache mismatch: index %s tid ranges mismatch (cached "INT64_FMT" to "INT64_FMT", replayed "INT64_FMT" to "INT64_FMT")", + tCache.m_sName.cstr(), tCache.m_iMinTID, tCache.m_iMaxTID, tIndex.m_iMinTID, tIndex.m_iMaxTID ); + } + } + + return true; +} + +////////////////////////////////////////////////////////////////////////// + +ISphRtIndex * sphGetCurrentIndexRT() +{ + RtAccum_t * pAcc = (RtAccum_t*) sphThreadGet ( g_tTlsAccumKey ); + if ( pAcc ) + return pAcc->m_pIndex; + return NULL; +} + +ISphRtIndex * sphCreateIndexRT ( const CSphSchema & tSchema, const char * sIndexName, DWORD uRamSize, const char * sPath ) +{ + MEMORY ( SPH_MEM_IDX_RT ); + return new RtIndex_t ( tSchema, sIndexName, uRamSize, sPath ); +} + +void sphRTInit () +{ + MEMORY ( SPH_MEM_BINLOG ); + + g_bRTChangesAllowed = false; + Verify ( RtSegment_t::m_tSegmentSeq.Init() ); + Verify ( sphThreadKeyCreate ( &g_tTlsAccumKey ) ); + + g_pBinlog = new RtBinlog_c(); + if ( !g_pBinlog ) + sphDie ( "binlog: failed to create binlog" ); +} + +void sphRTConfigure ( const CSphConfigSection & hSearchd, bool bTestMode ) +{ + assert ( g_pBinlog ); + g_pBinlog->Configure ( hSearchd, bTestMode ); + g_iRtFlushPeriod = hSearchd.GetInt ( "rt_flush_period", (int)g_iRtFlushPeriod ); + + // clip period to range ( 10 sec, million years ) + g_iRtFlushPeriod = Max ( g_iRtFlushPeriod, 10 ); + g_iRtFlushPeriod = Min ( g_iRtFlushPeriod, INT64_MAX ); +} + +void sphRTDone () +{ + sphThreadKeyDelete ( g_tTlsAccumKey ); + Verify ( RtSegment_t::m_tSegmentSeq.Done() ); + // its valid for "searchd --stop" case + SafeDelete ( g_pBinlog ); +} + +void sphReplayBinlog ( const SmallStringHash_T & hIndexes, ProgressCallbackSimple_t * pfnProgressCallback ) +{ + MEMORY ( SPH_MEM_BINLOG ); + g_pBinlog->Replay ( hIndexes, pfnProgressCallback ); + g_pBinlog->CreateTimerThread(); + g_bRTChangesAllowed = true; +} + +bool sphRTSchemaConfigure ( const CSphConfigSection & hIndex, CSphSchema * pSchema, CSphString * pError ) +{ + assert ( pSchema && pError ); + + CSphColumnInfo tCol; + + // fields + for ( CSphVariant * v=hIndex("rt_field"); v; v=v->m_pNext ) + { + tCol.m_sName = v->cstr(); + tCol.m_sName.ToLower(); + pSchema->m_dFields.Add ( tCol ); + } + if ( !pSchema->m_dFields.GetLength() ) + { + pError->SetSprintf ( "no fields configured (use rt_field directive)" ); + return false; + } + + if ( pSchema->m_dFields.GetLength()>SPH_MAX_FIELDS ) + { + pError->SetSprintf ( "too many fields (fields=%d, max=%d)", pSchema->m_dFields.GetLength(), SPH_MAX_FIELDS ); + return false; + } + + // attrs + const int iNumTypes = 7; + const char * sTypes[iNumTypes] = { "rt_attr_uint", "rt_attr_bigint", "rt_attr_float", "rt_attr_timestamp", "rt_attr_string", "rt_attr_multi", "rt_attr_multi_64" }; + const ESphAttr iTypes[iNumTypes] = { SPH_ATTR_INTEGER, SPH_ATTR_BIGINT, SPH_ATTR_FLOAT, SPH_ATTR_TIMESTAMP, SPH_ATTR_STRING, SPH_ATTR_UINT32SET, SPH_ATTR_UINT64SET }; + + for ( int iType=0; iTypem_pNext ) + { + tCol.m_sName = v->cstr(); + tCol.m_sName.ToLower(); + tCol.m_eAttrType = iTypes[iType]; + pSchema->AddAttr ( tCol, false ); + } + } + + return true; +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxrt.h b/coreseek/csft-4.1/src/sphinxrt.h new file mode 100755 index 0000000..be887c5 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxrt.h @@ -0,0 +1,80 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinxrt_ +#define _sphinxrt_ + +#include "sphinx.h" +#include "sphinxutils.h" + +/// RAM based updateable backend interface +class ISphRtIndex : public CSphIndex +{ +public: + explicit ISphRtIndex ( const char * sIndexName, const char * sName ) : CSphIndex ( sIndexName, sName ) {} + + /// get internal schema (to use for Add calls) + virtual const CSphSchema & GetInternalSchema () const { return m_tSchema; } + + /// insert/update document in current txn + /// fails in case of two open txns to different indexes + virtual bool AddDocument ( int iFields, const char ** ppFields, const CSphMatch & tDoc, bool bReplace, const char ** ppStr, const CSphVector & dMvas, CSphString & sError ) = 0; + + /// insert/update document in current txn + /// fails in case of two open txns to different indexes + virtual bool AddDocument ( ISphHits * pHits, const CSphMatch & tDoc, const char ** ppStr, const CSphVector & dMvas, CSphString & sError ) = 0; + + /// delete document in current txn + /// fails in case of two open txns to different indexes + virtual bool DeleteDocument ( const SphDocID_t * pDocs, int iDocs, CSphString & sError ) = 0; + + /// commit pending changes + virtual void Commit () = 0; + + /// undo pending changes + virtual void RollBack () = 0; + + /// dump index data to disk + virtual void DumpToDisk ( const char * sFilename ) = 0; + + /// check and flush index memory to disk + virtual void CheckRamFlush () = 0; +}; + +/// initialize subsystem +class CSphConfigSection; +void sphRTInit (); +void sphRTConfigure ( const CSphConfigSection & hSearchd, bool bTestMode ); +bool sphRTSchemaConfigure ( const CSphConfigSection & hIndex, CSphSchema * pSchema, CSphString * pError ); + +/// deinitialize subsystem +void sphRTDone (); + +/// RT index factory +ISphRtIndex * sphCreateIndexRT ( const CSphSchema & tSchema, const char * sIndexName, DWORD uRamSize, const char * sPath ); + +/// Get current txn index +ISphRtIndex * sphGetCurrentIndexRT(); + +typedef void ProgressCallbackSimple_t (); + +/// replay stored binlog +void sphReplayBinlog ( const SmallStringHash_T & hIndexes, ProgressCallbackSimple_t * pfnProgressCallback=NULL ); + +#endif // _sphinxrt_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxrt.o b/coreseek/csft-4.1/src/sphinxrt.o new file mode 100644 index 0000000..ce0fe88 Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxrt.o differ diff --git a/coreseek/csft-4.1/src/sphinxsearch.cpp b/coreseek/csft-4.1/src/sphinxsearch.cpp new file mode 100755 index 0000000..549a5e6 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxsearch.cpp @@ -0,0 +1,6043 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxsearch.h" +#include "sphinxquery.h" +#include "sphinxint.h" + +#include + +////////////////////////////////////////////////////////////////////////// +// EXTENDED MATCHING V2 +////////////////////////////////////////////////////////////////////////// + +typedef Hitman_c<8> HITMAN; + +#define SPH_TREE_DUMP 0 + +#define SPH_BM25_K1 1.2f +#define SPH_BM25_SCALE 1000 + + +struct QwordsHash_fn +{ + static inline int Hash ( const CSphString & sKey ) + { + return sphCRC32 ( (const BYTE *)sKey.cstr() ); + } +}; + + +/// match in the stream +struct ExtDoc_t +{ + SphDocID_t m_uDocid; + CSphRowitem * m_pDocinfo; ///< for inline storage only + SphOffset_t m_uHitlistOffset; + CSphSmallBitvec m_dFields; + float m_fTFIDF; +}; + + +/// word in the query +struct ExtQword_t +{ + CSphString m_sWord; ///< word + CSphString m_sDictWord; ///< word as processed by dict + int m_iDocs; ///< matching documents + int m_iHits; ///< matching hits + float m_fIDF; ///< IDF value + int m_iQueryPos; ///< position in the query + bool m_bExpanded; ///< added by prefix expansion + bool m_bExcluded; ///< excluded by the query (eg. bb in (aa AND NOT bb)) +}; + + +/// query words set +typedef CSphOrderedHash < ExtQword_t, CSphString, QwordsHash_fn, 256, 13 > ExtQwordsHash_t; + + +/// generic match streamer +class ExtNode_i +{ +public: + ExtNode_i (); + virtual ~ExtNode_i () { SafeDeleteArray ( m_pDocinfo ); } + + static ExtNode_i * Create ( const XQNode_t * pNode, const ISphQwordSetup & tSetup ); + static ExtNode_i * Create ( const XQKeyword_t & tWord, const XQNode_t * pNode, const ISphQwordSetup & tSetup ); + static ExtNode_i * Create ( ISphQword * pQword, const XQNode_t * pNode, const ISphQwordSetup & tSetup ); + + virtual void Reset ( const ISphQwordSetup & tSetup ) = 0; + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ) = 0; + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ) = 0; + + virtual void GetQwords ( ExtQwordsHash_t & hQwords ) = 0; + virtual void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) = 0; + virtual bool GotHitless () = 0; + virtual int GetDocsCount () { return INT_MAX; } + + void DebugIndent ( int iLevel ) + { + while ( iLevel-- ) + printf ( " " ); + } + + virtual void DebugDump ( int iLevel ) + { + DebugIndent ( iLevel ); + printf ( "ExtNode\n" ); + } + +public: + static const int MAX_DOCS = 512; + static const int MAX_HITS = 512; + + int m_iAtomPos; ///< we now need it on this level for tricks like expanded keywords within phrases + +protected: + ExtDoc_t m_dDocs[MAX_DOCS]; + ExtHit_t m_dHits[MAX_HITS]; + +public: + SphDocID_t m_uMaxID; + int m_iStride; ///< docinfo stride (for inline mode only) + +protected: + CSphRowitem * m_pDocinfo; ///< docinfo storage (for inline mode only) + + void AllocDocinfo ( const ISphQwordSetup & tSetup ) + { + if ( tSetup.m_iInlineRowitems ) + { + m_iStride = tSetup.m_iInlineRowitems; + m_pDocinfo = new CSphRowitem [ MAX_DOCS*m_iStride ]; + } + } + +protected: + inline const ExtDoc_t * ReturnDocsChunk ( int iCount, SphDocID_t * pMaxID ) + { + assert ( iCount>=0 && iCountm_iDocs; } + + virtual void DebugDump ( int iLevel ) + { + DebugIndent ( iLevel ); + printf ( "ExtTerm: %s at: %d ", m_pQword->m_sWord.cstr(), m_pQword->m_iAtomPos ); + if ( m_dFields.TestAll(true) ) + { + printf ( "(all)\n" ); + } else + { + bool bFirst = true; + printf ( "in: " ); + for ( int iField = 0; iField < CSphSmallBitvec::iTOTALBITS; iField++ ) + { + if ( m_dFields.Test ( iField ) ) + { + if ( !bFirst ) + printf ( ", " ); + printf ( "%d", iField ); + bFirst = false; + } + } + printf ( "\n" ); + } + } + +protected: + ISphQword * m_pQword; + ExtDoc_t * m_pHitDoc; ///< points to entry in m_dDocs which GetHitsChunk() currently emits hits for + SphDocID_t m_uHitsOverFor; ///< there are no more hits for matches block starting with this ID + mutable CSphSmallBitvec m_dFields; ///< accepted fields mask + bool m_bLongMask; ///< if we work with >32bit mask + float m_fIDF; ///< IDF for this term (might be 0.0f for non-1st occurences in query) + int64_t m_iMaxTimer; ///< work until this timestamp + CSphString * m_pWarning; + const bool m_bNotWeighted; + +public: + static volatile bool m_bInterruptNow; ///< may be set from outside to indicate the globally received sigterm +}; + +/// Immediately interrupt current operation +void sphInterruptNow() +{ + ExtTerm_c::m_bInterruptNow = true; +} + +volatile bool ExtTerm_c::m_bInterruptNow = false; + +/// single keyword streamer with artificial hitlist +class ExtTermHitless_c: public ExtTerm_c +{ +public: + ExtTermHitless_c ( ISphQword * pQword, const CSphSmallBitvec& uFields, const ISphQwordSetup & tSetup, bool bNotWeighted ) + : ExtTerm_c ( pQword, uFields, tSetup, bNotWeighted ) + , m_uFieldPos ( 0 ) + + { + m_dFieldMask.Unset(); + } + virtual void Reset ( const ISphQwordSetup & ) + { + m_dFieldMask.Unset(); + m_uFieldPos = 0; + } + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ); + virtual bool GotHitless () { return true; } + +protected: + CSphSmallBitvec m_dFieldMask; + DWORD m_uFieldPos; +}; + + +/// single keyword streamer, with term position filtering +template < TermPosFilter_e T > +class ExtTermPos_c : public ExtTerm_c +{ +public: + ExtTermPos_c ( ISphQword * pQword, const XQNode_t * pNode, const ISphQwordSetup & tSetup ); + virtual void Reset ( const ISphQwordSetup & tSetup ); + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ); + virtual bool GotHitless () { return false; } + +protected: + inline bool IsAcceptableHit ( const ExtHit_t * pHit ) const; + +protected: + int m_iMaxFieldPos; + SphDocID_t m_uTermMaxID; + const ExtDoc_t * m_pRawDocs; ///< chunk start as returned by raw GetDocsChunk() (need to store it for raw GetHitsChunk() calls) + const ExtDoc_t * m_pRawDoc; ///< current position in raw docs chunk + const ExtHit_t * m_pRawHit; ///< current position in raw hits chunk + SphDocID_t m_uLastID; + enum + { + COPY_FILTERED, + COPY_TRAILING, + COPY_DONE + } m_eState; ///< internal GetHitsChunk() state (are we copying from my hits, or passing trailing raw hits, or done) + ExtDoc_t m_dMyDocs[MAX_DOCS]; ///< all documents within the required pos range + ExtHit_t m_dMyHits[MAX_HITS]; ///< all hits within the required pos range + ExtHit_t m_dFilteredHits[MAX_HITS]; ///< hits from requested subset of the documents (for GetHitsChunk()) + SphDocID_t m_uDoneFor; + + ISphZoneCheck * m_pZoneChecker; ///< zone-limited searches query ranker about zones + mutable CSphVector m_dZones; ///< zone ids for this particular term + mutable SphDocID_t m_uLastZonedId; + mutable int m_iCheckFrom; +}; + + +/// multi-node binary-operation streamer traits +class ExtTwofer_c : public ExtNode_i +{ +public: + ExtTwofer_c ( ExtNode_i * pFirst, ExtNode_i * pSecond, const ISphQwordSetup & tSetup ); + ~ExtTwofer_c (); + + virtual void Reset ( const ISphQwordSetup & tSetup ); + virtual void GetQwords ( ExtQwordsHash_t & hQwords ); + virtual void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ); + + virtual bool GotHitless () { return m_pChildren[0]->GotHitless() || m_pChildren[1]->GotHitless(); } + + void DebugDumpT ( const char * sName, int iLevel ) + { + DebugIndent ( iLevel ); + printf ( "%s:\n", sName ); + m_pChildren[0]->DebugDump ( iLevel+1 ); + m_pChildren[1]->DebugDump ( iLevel+1 ); + } + + void SetNodePos ( WORD uPosLeft, WORD uPosRight ) + { + m_dNodePos[0] = uPosLeft; + m_dNodePos[1] = uPosRight; + m_bPosAware = true; + } + +protected: + ExtNode_i * m_pChildren[2]; + const ExtDoc_t * m_pCurDoc[2]; + const ExtHit_t * m_pCurHit[2]; + WORD m_dNodePos[2]; + bool m_bPosAware; + SphDocID_t m_uMatchedDocid; +}; + + +/// A-and-B streamer +class ExtAnd_c : public ExtTwofer_c +{ +public: + ExtAnd_c ( ExtNode_i * pFirst, ExtNode_i * pSecond, const ISphQwordSetup & tSetup ) : ExtTwofer_c ( pFirst, pSecond, tSetup ) {} + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ); + + void DebugDump ( int iLevel ) { DebugDumpT ( "ExtAnd", iLevel ); } +}; + + +/// A-or-B streamer +class ExtOr_c : public ExtTwofer_c +{ +public: + ExtOr_c ( ExtNode_i * pFirst, ExtNode_i * pSecond, const ISphQwordSetup & tSetup ) : ExtTwofer_c ( pFirst, pSecond, tSetup ) {} + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ); + + void DebugDump ( int iLevel ) { DebugDumpT ( "ExtOr", iLevel ); } +}; + + +/// A-and-not-B streamer +class ExtAndNot_c : public ExtTwofer_c +{ +public: + ExtAndNot_c ( ExtNode_i * pFirst, ExtNode_i * pSecond, const ISphQwordSetup & tSetup ); + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ); + virtual void Reset ( const ISphQwordSetup & tSetup ); + + void DebugDump ( int iLevel ) { DebugDumpT ( "ExtAndNot", iLevel ); } + +protected: + bool m_bPassthrough; +}; + + +/// generic operator over N nodes +class ExtNWayT : public ExtNode_i +{ +public: + ExtNWayT ( const CSphVector & dNodes, DWORD uDupeMask, const XQNode_t & tNode, const ISphQwordSetup & tSetup ); + ~ExtNWayT (); + virtual void Reset ( const ISphQwordSetup & tSetup ); + virtual void GetQwords ( ExtQwordsHash_t & hQwords ); + virtual void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ); + virtual bool GotHitless () { return false; } + +protected: + ExtNode_i * m_pNode; ///< my and-node for all the terms + const ExtDoc_t * m_pDocs; ///< current docs chunk from and-node + SphDocID_t m_uDocsMaxID; ///< max id in current docs chunk + const ExtHit_t * m_pHits; ///< current hits chunk from and-node + const ExtDoc_t * m_pDoc; ///< current doc from and-node + const ExtHit_t * m_pHit; ///< current hit from and-node + const ExtDoc_t * m_pMyDoc; ///< current doc for hits getter + const ExtHit_t * m_pMyHit; ///< current hit for hits getter + SphDocID_t m_uLastDocID; ///< last emitted hit + ExtHit_t m_dMyHits[MAX_HITS]; ///< buffer for all my phrase hits; inherited m_dHits will receive filtered results + SphDocID_t m_uMatchedDocid; ///< doc currently in process + SphDocID_t m_uHitsOverFor; ///< there are no more hits for matches block starting with this ID + +protected: + inline void ConstructNode ( const CSphVector & dNodes, const CSphVector & dPositions, const ISphQwordSetup & tSetup ) + { + assert ( m_pNode==NULL ); + WORD uLPos = dPositions[0]; + ExtNode_i * pCur = dNodes[uLPos++]; // ++ for zero-based to 1-based + ExtAnd_c * pCurEx = NULL; + DWORD uLeaves = dNodes.GetLength(); + WORD uRPos; + for ( DWORD i=1; iSetNodePos ( uLPos, uRPos ); + uLPos = 0; + } + m_pNode = pCur; + } +}; + +struct ExtNodeTF_fn +{ + bool IsLess ( ExtNode_i * pA, ExtNode_i * pB ) const + { + return pA->GetDocsCount() < pB->GetDocsCount(); + } +}; + +struct ExtNodeTFExt_fn +{ + const CSphVector & m_dNodes; + + explicit ExtNodeTFExt_fn ( const CSphVector & dNodes ) + : m_dNodes ( dNodes ) + {} + + ExtNodeTFExt_fn ( const ExtNodeTFExt_fn & rhs ) + : m_dNodes ( rhs.m_dNodes ) + {} + + bool IsLess ( WORD uA, WORD uB ) const + { + return m_dNodes[uA]->GetDocsCount() < m_dNodes[uB]->GetDocsCount(); + } + +private: + const ExtNodeTFExt_fn & operator = ( const ExtNodeTFExt_fn & ) + { + return *this; + } +}; + +template < class FSM > +class ExtNWay_c : public ExtNWayT, private FSM +{ +public: + ExtNWay_c ( const CSphVector & dNodes, DWORD uDupeMask, const XQNode_t & tNode, const ISphQwordSetup & tSetup ) + : ExtNWayT ( dNodes, uDupeMask, tNode, tSetup ) + , FSM ( dNodes, uDupeMask, tNode, tSetup ) + { + bool bTerms = FSM::bTermsTree; // workaround MSVC const condition warning + CSphVector dPositions ( dNodes.GetLength() ); + ARRAY_FOREACH ( i, dPositions ) + dPositions[i] = (WORD) i; + if ( bTerms ) + dPositions.Sort ( ExtNodeTFExt_fn ( dNodes ) ); + ConstructNode ( dNodes, dPositions, tSetup ); + } + +public: + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ); + virtual void DebugDump ( int iLevel ) + { + DebugIndent ( iLevel ); + printf ( "%s\n", FSM::GetName() ); + m_pNode->DebugDump ( iLevel+1 ); + } +private: + bool EmitTail ( int & iHit ); ///< the "trickiest part" extracted in order to process the proximity also +}; + +class FSMphrase +{ + protected: + FSMphrase ( const CSphVector & dQwords, DWORD uDupeMask, const XQNode_t & tNode, const ISphQwordSetup & tSetup ); + inline void ResetFSM() + { + m_uExpPos = 0; + m_uExpQpos = 0; + } + bool HitFSM ( const ExtHit_t* pHit, ExtHit_t* dTarget ); + inline static const char* GetName() { return "ExtPhrase"; } + static const bool bTermsTree = true; ///< we work with ExtTerm nodes + + protected: + DWORD m_uExpQpos; + CSphVector m_dQposDelta; ///< next expected qpos delta for each existing qpos (for skipped stopwords case) + DWORD m_uMinQpos; + DWORD m_uMaxQpos; + DWORD m_uExpPos; + DWORD m_uLeaves; ///< number of keywords (might be different from qpos delta because of stops and overshorts) +}; +/// exact phrase streamer +typedef ExtNWay_c < FSMphrase > ExtPhrase_c; + +/// proximity streamer +class FSMproximity +{ +protected: + FSMproximity ( const CSphVector & dQwords, DWORD uDupeMask, const XQNode_t & tNode, const ISphQwordSetup & tSetup ); + inline void ResetFSM() + { + m_uExpPos = 0; + m_uWords = 0; + m_iMinQindex = -1; + ARRAY_FOREACH ( i, m_dProx ) + m_dProx[i] = UINT_MAX; + } + bool HitFSM ( const ExtHit_t* pHit, ExtHit_t* dTarget ); + inline static const char* GetName() { return "ExtProximity"; } + static const bool bTermsTree = true; ///< we work with ExtTerm nodes +protected: + int m_iMaxDistance; + DWORD m_uWordsExpected; + DWORD m_uMinQpos; + DWORD m_uQLen; + DWORD m_uExpPos; + CSphVector m_dProx; // proximity hit position for i-th word + CSphVector m_dDeltas; // used for weight calculation + DWORD m_uWords; + int m_iMinQindex; +}; +/// exact phrase streamer +typedef ExtNWay_c ExtProximity_c; + +/// proximity streamer +class FSMmultinear +{ +protected: + FSMmultinear ( const CSphVector & dNodes, DWORD uDupeMask, const XQNode_t & tNode, const ISphQwordSetup & tSetup ); + inline void ResetFSM() + { + m_iRing = m_uLastP = m_uPrelastP = 0; + } + bool HitFSM ( const ExtHit_t* pHit, ExtHit_t* dTarget ); + inline static const char* GetName() { return "ExtMultinear"; } + static const bool bTermsTree = true; ///< we work with generic (not just ExtTerm) nodes +protected: + int m_iNear; ///< the NEAR distance + DWORD m_uPrelastP; + DWORD m_uPrelastML; + DWORD m_uPrelastSL; + DWORD m_uPrelastW; + DWORD m_uLastP; ///< position of the last hit + DWORD m_uLastML; ///< the length of the previous hit + DWORD m_uLastSL; ///< the length of the previous hit in Query + DWORD m_uLastW; ///< last weight + DWORD m_uWordsExpected; ///< now many hits we're expect + DWORD m_uWeight; ///< weight accum + DWORD m_uFirstHit; ///< hitpos of the beginning of the match chain + WORD m_uFirstNpos; ///< N-position of the head of the chain + WORD m_uFirstQpos; ///< Q-position of the head of the chain (for twofers) + CSphVector m_dNpos; ///< query positions for multinear + CSphVector m_dRing; ///< ring buffer for multihit data + int m_iRing; ///< the head of the ring + bool m_bTwofer; ///< if we have 2- or N-way NEAR +private: + inline int RingTail() const + { + return ( m_iRing + m_dNpos.GetLength() - 1 ) % m_uWordsExpected; + } + inline void Add2Ring ( const ExtHit_t* pHit ) + { + if ( !m_bTwofer ) + m_dRing [ RingTail() ] = *pHit; + } + inline void ShiftRing() + { + if ( ++m_iRing==(int)m_uWordsExpected ) + m_iRing=0; + } +}; +/// exact phrase streamer +typedef ExtNWay_c ExtMultinear_c; + +/// quorum streamer +class ExtQuorum_c : public ExtNode_i +{ +public: + ExtQuorum_c ( CSphVector & dQwords, DWORD uDupeMask, const XQNode_t & tNode, const ISphQwordSetup & tSetup ); + virtual ~ExtQuorum_c (); + + virtual void Reset ( const ISphQwordSetup & tSetup ); + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ); + + virtual void GetQwords ( ExtQwordsHash_t & hQwords ); + virtual void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ); + + virtual bool GotHitless () { return false; } + +protected: + int m_iThresh; ///< keyword count threshold + CSphVector m_dChildren; ///< my children nodes (simply ExtTerm_c for now) + CSphVector m_pCurDoc; ///< current positions into children doclists + CSphVector m_pCurHit; ///< current positions into children hitlists + DWORD m_uMask; ///< mask of nodes that count toward threshold + DWORD m_uMaskEnd; ///< index of the last bit in mask + bool m_bDone; ///< am i done + SphDocID_t m_uMatchedDocid; ///< current docid for hitlist emission + +private: + DWORD m_uInitialMask; ///< backup mask for Reset() + CSphVector m_dInitialChildren; ///< my children nodes (simply ExtTerm_c for now) +}; + + +/// A-B-C-in-this-order streamer +class ExtOrder_c : public ExtNode_i +{ +public: + ExtOrder_c ( const CSphVector & dChildren, const ISphQwordSetup & tSetup ); + ~ExtOrder_c (); + + virtual void Reset ( const ISphQwordSetup & tSetup ); + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t ); + virtual void GetQwords ( ExtQwordsHash_t & hQwords ); + virtual void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ); + virtual bool GotHitless () { return false; } + +protected: + CSphVector m_dChildren; + CSphVector m_pDocsChunk; ///< last document chunk (for hit fetching) + CSphVector m_pDocs; ///< current position in document chunk + CSphVector m_pHits; ///< current position in hits chunk + CSphVector m_dMaxID; ///< max DOCID from the last chunk + ExtHit_t m_dMyHits[MAX_HITS]; ///< buffer for all my phrase hits; inherited m_dHits will receive filtered results + bool m_bDone; + SphDocID_t m_uHitsOverFor; + +protected: + int GetNextHit ( SphDocID_t uDocid ); ///< get next hit within given document, and return its child-id + int GetMatchingHits ( SphDocID_t uDocid, ExtHit_t * pHitbuf, int iLimit ); ///< process candidate hits and stores actual matches while we can +}; + + +/// same-text-unit streamer +/// (aka, A and B within same sentence, or same paragraph) +class ExtUnit_c : public ExtNode_i +{ +public: + ExtUnit_c ( ExtNode_i * pFirst, ExtNode_i * pSecond, const CSphSmallBitvec& dFields, const ISphQwordSetup & tSetup, const char * sUnit ); + ~ExtUnit_c (); + + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ); + virtual void Reset ( const ISphQwordSetup & tSetup ); + virtual void GetQwords ( ExtQwordsHash_t & hQwords ); + virtual void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ); + +public: + virtual bool GotHitless () + { + return false; + } + + virtual void DebugDump ( int iLevel ) + { + DebugIndent ( iLevel ); + printf ( "ExtSentence\n" ); + m_pArg1->DebugDump ( iLevel+1 ); + m_pArg2->DebugDump ( iLevel+1 ); + } + +protected: + inline const ExtDoc_t * ReturnDocsChunk ( int iDocs, int iMyHit, SphDocID_t * pMaxID ) + { + assert ( iMyHit m_dStarts; + CSphVector m_dEnds; +}; + + +/// zone hash key, zoneid+docid +struct ZoneKey_t +{ + int m_iZone; + SphDocID_t m_uDocid; + + bool operator == ( const ZoneKey_t & rhs ) const + { + return m_iZone==rhs.m_iZone && m_uDocid==rhs.m_uDocid; + } +}; + + +/// zone hashing function +struct ZoneHash_fn +{ + static inline int Hash ( const ZoneKey_t & tKey ) + { + return (DWORD)tKey.m_uDocid ^ ( tKey.m_iZone<<16 ); + } +}; + + +/// zone hash +typedef CSphOrderedHash < ZoneInfo_t, ZoneKey_t, ZoneHash_fn, 4096, 117 > ZoneHash_c; + + +/// ranker interface +/// ranker folds incoming hitstream into simple match chunks, and computes relevance rank +class ExtRanker_c : public ISphRanker, public ISphZoneCheck +{ +public: + ExtRanker_c ( const XQQuery_t & tXQ, const ISphQwordSetup & tSetup ); + virtual ~ExtRanker_c (); + virtual void Reset ( const ISphQwordSetup & tSetup ); + + virtual CSphMatch * GetMatchesBuffer () { return m_dMatches; } + virtual const ExtDoc_t * GetFilteredDocs (); + + void GetQwords ( ExtQwordsHash_t & hQwords ) { if ( m_pRoot ) m_pRoot->GetQwords ( hQwords ); } + virtual void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ); + virtual bool InitState ( const CSphQueryContext &, CSphString & ) { return true; } + +public: + // FIXME? hide and friend? + virtual SphZoneHit_e IsInZone ( int iZone, const ExtHit_t * pHit ); + +public: + CSphMatch m_dMatches[ExtNode_i::MAX_DOCS]; ///< exposed for caller + DWORD m_uPayloadMask; ///< exposed for ranker state functors + int m_iQwords; ///< exposed for ranker state functors + int m_iMaxQuerypos; ///< exposed for ranker state functors + +protected: + int m_iInlineRowitems; + ExtNode_i * m_pRoot; + const ExtDoc_t * m_pDoclist; + const ExtHit_t * m_pHitlist; + SphDocID_t m_uMaxID; + ExtDoc_t m_dMyDocs[ExtNode_i::MAX_DOCS]; ///< my local documents pool; for filtering + CSphMatch m_dMyMatches[ExtNode_i::MAX_DOCS]; ///< my local matches pool; for filtering + CSphMatch m_tTestMatch; + const CSphIndex * m_pIndex; ///< this is he who'll do my filtering! + CSphQueryContext * m_pCtx; + +protected: + CSphVector m_dZones; + CSphVector m_dZoneStartTerm; + CSphVector m_dZoneEndTerm; + CSphVector m_dZoneStart; + CSphVector m_dZoneEnd; + CSphVector m_dZoneMax; ///< last docid we (tried) to cache + CSphVector m_dZoneMin; ///< first docid we (tried) to cache + ZoneHash_c m_hZoneInfo; +}; + + +STATIC_ASSERT ( ( 8*8*sizeof(DWORD) )>=SPH_MAX_FIELDS, PAYLOAD_MASK_OVERFLOW ); + +static const bool WITH_BM25 = true; + +template < bool USE_BM25 = false > +class ExtRanker_WeightSum_c : public ExtRanker_c +{ +protected: + int m_iWeights; + const int * m_pWeights; + +public: + ExtRanker_WeightSum_c ( const XQQuery_t & tXQ, const ISphQwordSetup & tSetup ) : ExtRanker_c ( tXQ, tSetup ) {} + virtual int GetMatches (); + + virtual bool InitState ( const CSphQueryContext & tCtx, CSphString & ) + { + m_iWeights = tCtx.m_iWeights; + m_pWeights = tCtx.m_dWeights; + return true; + } +}; + + +class ExtRanker_None_c : public ExtRanker_c +{ +public: + ExtRanker_None_c ( const XQQuery_t & tXQ, const ISphQwordSetup & tSetup ) : ExtRanker_c ( tXQ, tSetup ) {} + virtual int GetMatches (); +}; + + +template < typename STATE > +class ExtRanker_T : public ExtRanker_c +{ +protected: + STATE m_tState; + +public: + ExtRanker_T ( const XQQuery_t & tXQ, const ISphQwordSetup & tSetup ) : ExtRanker_c ( tXQ, tSetup ) {} + virtual int GetMatches (); + + virtual bool InitState ( const CSphQueryContext & tCtx, CSphString & sError ) + { + return m_tState.Init ( tCtx.m_iWeights, &tCtx.m_dWeights[0], this, sError ); +} +}; + +////////////////////////////////////////////////////////////////////////// + +static inline void CopyExtDocinfo ( ExtDoc_t & tDst, const ExtDoc_t & tSrc, CSphRowitem ** ppRow, int iStride ) +{ + if ( tSrc.m_pDocinfo ) + { + assert ( ppRow && *ppRow ); + memcpy ( *ppRow, tSrc.m_pDocinfo, iStride*sizeof(CSphRowitem) ); + tDst.m_pDocinfo = *ppRow; + *ppRow += iStride; + } else + tDst.m_pDocinfo = NULL; +} + +static inline void CopyExtDoc ( ExtDoc_t & tDst, const ExtDoc_t & tSrc, CSphRowitem ** ppRow, int iStride ) +{ + tDst = tSrc; + CopyExtDocinfo ( tDst, tSrc, ppRow, iStride ); +} + +ExtNode_i::ExtNode_i () + : m_iAtomPos(0) + , m_uMaxID(0) + , m_iStride(0) + , m_pDocinfo(NULL) +{ + m_dDocs[0].m_uDocid = DOCID_MAX; + m_dHits[0].m_uDocid = DOCID_MAX; +} + + +static ISphQword * CreateQueryWord ( const XQKeyword_t & tWord, const ISphQwordSetup & tSetup ) +{ + BYTE sTmp [ 3*SPH_MAX_WORD_LEN + 16 ]; + strncpy ( (char*)sTmp, tWord.m_sWord.cstr(), sizeof(sTmp) ); + sTmp[sizeof(sTmp)-1] = '\0'; + + ISphQword * pWord = tSetup.QwordSpawn ( tWord ); + pWord->m_sWord = tWord.m_sWord; + pWord->m_iWordID = tSetup.m_pDict->GetWordID ( sTmp ); + pWord->m_sDictWord = (char*)sTmp; + pWord->m_bExpanded = tWord.m_bExpanded; + tSetup.QwordSetup ( pWord ); + + if ( tWord.m_bFieldStart && tWord.m_bFieldEnd ) pWord->m_iTermPos = TERM_POS_FIELD_STARTEND; + else if ( tWord.m_bFieldStart ) pWord->m_iTermPos = TERM_POS_FIELD_START; + else if ( tWord.m_bFieldEnd ) pWord->m_iTermPos = TERM_POS_FIELD_END; + else pWord->m_iTermPos = 0; + + pWord->m_iAtomPos = tWord.m_iAtomPos; + return pWord; +} + + +static bool KeywordsEqual ( const XQNode_t * pA, const XQNode_t * pB ) +{ + // we expected a keyword here but got composite node; lets drill down until first real keyword + while ( pA->m_dChildren.GetLength() ) + pA = pA->m_dChildren[0]; + + while ( pB->m_dChildren.GetLength() ) + pB = pB->m_dChildren[0]; + + // actually check keywords + assert ( pA->m_dWords.GetLength() ); + assert ( pB->m_dWords.GetLength() ); + return pA->m_dWords[0].m_sWord==pB->m_dWords[0].m_sWord; +} + + +static DWORD CalcDupeMask ( const CSphVector & dChildren ) +{ + DWORD uDupeMask = 0; + ARRAY_FOREACH ( i, dChildren ) + { + int iValue = 1; + for ( int j = i+1; j & dQwordsHit ) +{ + DWORD uDupeMask = 0; + ARRAY_FOREACH ( i, dQwordsHit ) + { + int iValue = 1; + for ( int j = i + 1; j < dQwordsHit.GetLength(); j++ ) + if ( dQwordsHit[i]->m_iWordID==dQwordsHit[j]->m_iWordID ) + { + iValue = 0; + break; + } + uDupeMask |= iValue << i; + } + return uDupeMask; +} + + +template < typename T, bool NEED_MASK > +static ExtNode_i * CreateMultiNode ( const XQNode_t * pQueryNode, const ISphQwordSetup & tSetup, bool bNeedsHitlist ) +{ + /////////////////////////////////// + // virtually plain (expanded) node + /////////////////////////////////// + + if ( pQueryNode->m_dChildren.GetLength() ) + { + CSphVector dNodes; + ARRAY_FOREACH ( i, pQueryNode->m_dChildren ) + { + dNodes.Add ( ExtNode_i::Create ( pQueryNode->m_dChildren[i], tSetup ) ); + assert ( dNodes.Last()->m_iAtomPos>=0 ); + } + + // compute dupe mask (needed for quorum only) + // FIXME! this check will fail with wordforms and stuff; sorry, no wordforms vs expand vs quorum support for now! + DWORD uDupeMask = NEED_MASK + ? CalcDupeMask ( pQueryNode->m_dChildren ) + : 0; + ExtNode_i * pResult = new T ( dNodes, uDupeMask, *pQueryNode, tSetup ); + + if ( pQueryNode->GetCount() ) + return tSetup.m_pNodeCache->CreateProxy ( pResult, pQueryNode, tSetup ); + return pResult; // FIXME! sorry, no hitless vs expand vs phrase support for now! + } + + ////////////////////// + // regular plain node + ////////////////////// + + ExtNode_i * pResult = NULL; + CSphVector dQwordsHit; // have hits + CSphVector dQwords; // don't have hits + + // partition phrase words + const CSphVector & dWords = pQueryNode->m_dWords; + ARRAY_FOREACH ( i, dWords ) + { + ISphQword * pWord = CreateQueryWord ( dWords[i], tSetup ); + if ( pWord->m_bHasHitlist || !bNeedsHitlist ) + dQwordsHit.Add ( pWord ); + else + dQwords.Add ( pWord ); + } + + // see if we can create the node + if ( dQwordsHit.GetLength()<2 ) + { + ARRAY_FOREACH ( i, dQwords ) + SafeDelete ( dQwords[i] ); + ARRAY_FOREACH ( i, dQwordsHit ) + SafeDelete ( dQwordsHit[i] ); + if ( tSetup.m_pWarning ) + tSetup.m_pWarning->SetSprintf ( "can't create phrase node, hitlists unavailable (hitlists=%d, nodes=%d)", + dQwordsHit.GetLength(), dWords.GetLength() ); + return NULL; + + } else + { + // at least two words have hitlists, creating phrase node + assert ( pQueryNode ); + assert ( pQueryNode->m_dWords.GetLength() ); + assert ( pQueryNode->GetOp()==SPH_QUERY_PHRASE || pQueryNode->GetOp()==SPH_QUERY_PROXIMITY || pQueryNode->GetOp()==SPH_QUERY_QUORUM ); + + // create nodes + CSphVector dNodes; + ARRAY_FOREACH ( i, dQwordsHit ) + { + dNodes.Add ( ExtNode_i::Create ( dQwordsHit[i], pQueryNode, tSetup ) ); + dNodes.Last()->m_iAtomPos = dQwordsHit[i]->m_iAtomPos; + } + + // compute dupe mask (needed for quorum only) + DWORD uDupeMask = NEED_MASK + ? CalcDupeMask ( dQwordsHit ) + : 0; + pResult = new T ( dNodes, uDupeMask, *pQueryNode, tSetup ); + } + + // AND result with the words that had no hitlist + if ( dQwords.GetLength() ) + { + ExtNode_i * pNode = ExtNode_i::Create ( dQwords[0], pQueryNode, tSetup ); + for ( int i=1; iGetCount() ) + return tSetup.m_pNodeCache->CreateProxy ( pResult, pQueryNode, tSetup ); + + return pResult; +} + +static ExtNode_i * CreateOrderNode ( const XQNode_t * pNode, const ISphQwordSetup & tSetup ) +{ + if ( pNode->m_dChildren.GetLength()<2 ) + { + if ( tSetup.m_pWarning ) + tSetup.m_pWarning->SetSprintf ( "order node requires at least two children" ); + return NULL; + } + + CSphVector dChildren; + ARRAY_FOREACH ( i, pNode->m_dChildren ) + { + ExtNode_i * pChild = ExtNode_i::Create ( pNode->m_dChildren[i], tSetup ); + if ( pChild->GotHitless() ) + { + if ( tSetup.m_pWarning ) + tSetup.m_pWarning->SetSprintf ( "failed to create order node, hitlist unavailable" ); + ARRAY_FOREACH ( j, dChildren ) + SafeDelete ( dChildren[j] ); + return NULL; + } + dChildren.Add ( pChild ); + } + ExtNode_i * pResult = new ExtOrder_c ( dChildren, tSetup ); + + if ( pNode->GetCount() ) + return tSetup.m_pNodeCache->CreateProxy ( pResult, pNode, tSetup ); + + return pResult; +} + +ExtNode_i * ExtNode_i::Create ( const XQKeyword_t & tWord, const XQNode_t * pNode, const ISphQwordSetup & tSetup ) +{ + return Create ( CreateQueryWord ( tWord, tSetup ), pNode, tSetup ); +}; + +ExtNode_i * ExtNode_i::Create ( ISphQword * pQword, const XQNode_t * pNode, const ISphQwordSetup & tSetup ) +{ + assert ( pQword ); + + if ( pNode->m_iFieldMaxPos ) + pQword->m_iTermPos = TERM_POS_FIELD_LIMIT; + + if ( pNode->m_dZones.GetLength() ) + pQword->m_iTermPos = TERM_POS_ZONES; + + if ( !pQword->m_bHasHitlist ) + { + if ( tSetup.m_pWarning && pQword->m_iTermPos ) + tSetup.m_pWarning->SetSprintf ( "hitlist unavailable, position limit ignored" ); + return new ExtTermHitless_c ( pQword, pNode->m_dFieldMask, tSetup, pNode->m_bNotWeighted ); + } + switch ( pQword->m_iTermPos ) + { + case TERM_POS_FIELD_STARTEND: return new ExtTermPos_c ( pQword, pNode, tSetup ); + case TERM_POS_FIELD_START: return new ExtTermPos_c ( pQword, pNode, tSetup ); + case TERM_POS_FIELD_END: return new ExtTermPos_c ( pQword, pNode, tSetup ); + case TERM_POS_FIELD_LIMIT: return new ExtTermPos_c ( pQword, pNode, tSetup ); + case TERM_POS_ZONES: return new ExtTermPos_c ( pQword, pNode, tSetup ); + default: return new ExtTerm_c ( pQword, pNode->m_dFieldMask, tSetup, pNode->m_bNotWeighted ); + } +} + +ExtNode_i * ExtNode_i::Create ( const XQNode_t * pNode, const ISphQwordSetup & tSetup ) +{ + // empty node? + if ( pNode->IsEmpty() ) + return NULL; + + if ( pNode->m_dWords.GetLength() || pNode->m_bVirtuallyPlain ) + { + const int iWords = pNode->m_bVirtuallyPlain + ? pNode->m_dChildren.GetLength() + : pNode->m_dWords.GetLength(); + + if ( iWords==1 ) + { + if ( pNode->m_bVirtuallyPlain ) + return Create ( pNode->m_dChildren[0], tSetup ); + else + return Create ( pNode->m_dWords[0], pNode, tSetup ); + } + + switch ( pNode->GetOp() ) + { + case SPH_QUERY_PHRASE: + return CreateMultiNode ( pNode, tSetup, true ); + + case SPH_QUERY_PROXIMITY: + return CreateMultiNode ( pNode, tSetup, true ); + + case SPH_QUERY_NEAR: + return CreateMultiNode ( pNode, tSetup, true ); + + case SPH_QUERY_QUORUM: + { + assert ( pNode->m_dWords.GetLength()==0 || pNode->m_dChildren.GetLength()==0 ); + int iQuorumCount = pNode->m_dWords.GetLength()+pNode->m_dChildren.GetLength(); + if ( pNode->m_iOpArg>=iQuorumCount ) + { + // threshold is too high + if ( tSetup.m_pWarning ) + tSetup.m_pWarning->SetSprintf ( "quorum threshold too high (words=%d, thresh=%d); replacing quorum operator with AND operator", + iQuorumCount, pNode->m_iOpArg ); + + } else if ( iQuorumCount>32 ) + { + // right now quorum can only handle 32 words + if ( tSetup.m_pWarning ) + tSetup.m_pWarning->SetSprintf ( "too many words (%d) for quorum; replacing with an AND", iQuorumCount ); + + } else // everything is ok; create quorum node + return CreateMultiNode ( pNode, tSetup, false ); + + // couldn't create quorum, make an AND node instead + CSphVector dTerms; + dTerms.Reserve ( iQuorumCount ); + + ARRAY_FOREACH ( i, pNode->m_dWords ) + dTerms.Add ( Create ( pNode->m_dWords[i], pNode, tSetup ) ); + + ARRAY_FOREACH ( i, pNode->m_dChildren ) + dTerms.Add ( Create ( pNode->m_dChildren[i], tSetup ) ); + + // make not simple, but optimized AND node. + dTerms.Sort ( ExtNodeTF_fn() ); + + ExtNode_i * pCur = dTerms[0]; + for ( int i=1; iGetCount() ) + return tSetup.m_pNodeCache->CreateProxy ( pCur, pNode, tSetup ); + return pCur; + } + + default: + assert ( 0 && "unexpected plain node type" ); + return NULL; + } + + } else + { + int iChildren = pNode->m_dChildren.GetLength (); + assert ( iChildren>0 ); + + // special case, operator BEFORE + if ( pNode->GetOp()==SPH_QUERY_BEFORE ) + return CreateOrderNode ( pNode, tSetup ); + + // special case, AND over terms (internally reordered for speed) + bool bAndTerms = ( pNode->GetOp()==SPH_QUERY_AND ); + for ( int i=0; im_dChildren[i]; + bAndTerms = ( pChildren->m_dWords.GetLength()==1 ); + } + if ( bAndTerms ) + { + CSphVector dTerms; + for ( int i=0; im_dChildren[i]; + dTerms.Add ( ExtNode_i::Create ( pChild, tSetup ) ); + } + + dTerms.Sort ( ExtNodeTF_fn() ); + + ExtNode_i * pCur = dTerms[0]; + for ( int i=1; iGetCount() ) + return tSetup.m_pNodeCache->CreateProxy ( pCur, pNode, tSetup ); + + return pCur; + } + + // Multinear could be also non-plain, so here is the second entry for it. + if ( pNode->GetOp()==SPH_QUERY_NEAR ) + return CreateMultiNode ( pNode, tSetup, true ); + + // generic create + ExtNode_i * pCur = NULL; + for ( int i=0; im_dChildren[i], tSetup ); + if ( !pNext ) continue; + if ( !pCur ) + { + pCur = pNext; + continue; + } + switch ( pNode->GetOp() ) + { + case SPH_QUERY_OR: pCur = new ExtOr_c ( pCur, pNext, tSetup ); break; + case SPH_QUERY_AND: pCur = new ExtAnd_c ( pCur, pNext, tSetup ); break; + case SPH_QUERY_ANDNOT: pCur = new ExtAndNot_c ( pCur, pNext, tSetup ); break; + case SPH_QUERY_SENTENCE: pCur = new ExtUnit_c ( pCur, pNext, pNode->m_dFieldMask, tSetup, MAGIC_WORD_SENTENCE ); break; + case SPH_QUERY_PARAGRAPH: pCur = new ExtUnit_c ( pCur, pNext, pNode->m_dFieldMask, tSetup, MAGIC_WORD_PARAGRAPH ); break; + default: assert ( 0 && "internal error: unhandled op in ExtNode_i::Create()" ); break; + } + } + if ( pNode->GetCount() ) + return tSetup.m_pNodeCache->CreateProxy ( pCur, pNode, tSetup ); + return pCur; + } +} + +////////////////////////////////////////////////////////////////////////// + +ExtTerm_c::ExtTerm_c ( ISphQword * pQword, const CSphSmallBitvec& dFields, const ISphQwordSetup & tSetup, bool bNotWeighted ) + : m_pQword ( pQword ) + , m_pWarning ( tSetup.m_pWarning ) + , m_bNotWeighted ( bNotWeighted ) +{ + m_iAtomPos = pQword->m_iAtomPos; + m_pHitDoc = NULL; + m_uHitsOverFor = 0; + m_dFields = dFields; + m_iMaxTimer = tSetup.m_iMaxTimer; + if ( tSetup.m_pIndex ) + m_bLongMask = tSetup.m_pIndex->GetMatchSchema().m_dFields.GetLength()>32; + else + m_bLongMask = false; + + AllocDocinfo ( tSetup ); +} + +ExtTerm_c::ExtTerm_c ( ISphQword * pQword, const ISphQwordSetup & tSetup ) + : m_pQword ( pQword ) + , m_pWarning ( tSetup.m_pWarning ) + , m_bNotWeighted ( true ) +{ + m_iAtomPos = pQword->m_iAtomPos; + m_pHitDoc = NULL; + m_uHitsOverFor = 0; + m_dFields.Set(); + m_iMaxTimer = tSetup.m_iMaxTimer; + if ( tSetup.m_pIndex ) + m_bLongMask = tSetup.m_pIndex->GetMatchSchema().m_dFields.GetLength()>32; + else + m_bLongMask = false; + + AllocDocinfo ( tSetup ); +} + +void ExtTerm_c::Reset ( const ISphQwordSetup & tSetup ) +{ + m_pHitDoc = NULL; + m_uHitsOverFor = 0; + m_iMaxTimer = tSetup.m_iMaxTimer; + m_pQword->Reset (); + tSetup.QwordSetup ( m_pQword ); +} + +const ExtDoc_t * ExtTerm_c::GetDocsChunk ( SphDocID_t * pMaxID ) +{ + if ( !m_pQword->m_iDocs ) + return NULL; + + m_uMaxID = 0; + + // max_query_time + if ( m_iMaxTimer>0 && sphMicroTimer()>=m_iMaxTimer ) + { + if ( m_pWarning ) + *m_pWarning = "query time exceeded max_query_time"; + return NULL; + } + + // interrupt by sitgerm + if ( m_bInterruptNow ) + { + if ( m_pWarning ) + *m_pWarning = "Server shutdown in progress"; + return NULL; + } + + int iDoc = 0; + CSphRowitem * pDocinfo = m_pDocinfo; + while ( iDocGetNextDoc ( pDocinfo ); + if ( !tMatch.m_iDocID ) + { + m_pQword->m_iDocs = 0; + break; + } + if (!( m_pQword->m_dFields.Test ( m_dFields ) )) + { + if ( (!m_bLongMask) || m_pQword->m_bAllFieldsKnown ) + continue; + m_pQword->CollectHitMask(); + if (!( m_pQword->m_dFields.Test ( m_dFields ) )) + continue; + } + + ExtDoc_t & tDoc = m_dDocs[iDoc++]; + tDoc.m_uDocid = tMatch.m_iDocID; + tDoc.m_pDocinfo = pDocinfo; + tDoc.m_uHitlistOffset = m_pQword->m_iHitlistPos; + tDoc.m_dFields = m_pQword->m_dFields & m_dFields; // OPTIMIZE: only needed for phrase node + tDoc.m_fTFIDF = float(m_pQword->m_uMatchHits) / float(m_pQword->m_uMatchHits+SPH_BM25_K1) * m_fIDF; + pDocinfo += m_iStride; + } + + m_pHitDoc = NULL; + + return ReturnDocsChunk ( iDoc, pMaxID ); +} + +const ExtHit_t * ExtTerm_c::GetHitsChunk ( const ExtDoc_t * pMatched, SphDocID_t uMaxID ) +{ + if ( !pMatched ) + return NULL; + SphDocID_t uFirstMatch = pMatched->m_uDocid; + + // aim to the right document + ExtDoc_t * pDoc = m_pHitDoc; + m_pHitDoc = NULL; + + if ( !pDoc ) + { + // if we already emitted hits for this matches block, do not do that again + if ( uFirstMatch==m_uHitsOverFor ) + return NULL; + + // early reject whole block + if ( pMatched->m_uDocid > m_uMaxID ) return NULL; + if ( m_uMaxID && m_dDocs[0].m_uDocid > uMaxID ) return NULL; + + // find match + pDoc = m_dDocs; + do + { + while ( pDoc->m_uDocid < pMatched->m_uDocid ) pDoc++; + if ( pDoc->m_uDocid==DOCID_MAX ) + { + m_uHitsOverFor = uFirstMatch; + return NULL; // matched docs block is over for me, gimme another one + } + + while ( pMatched->m_uDocid < pDoc->m_uDocid ) pMatched++; + if ( pMatched->m_uDocid==DOCID_MAX ) + { + m_uHitsOverFor = uFirstMatch; + return NULL; // matched doc block did not yet begin for me, gimme another one + } + } while ( pDoc->m_uDocid!=pMatched->m_uDocid ); + + // setup hitlist reader + m_pQword->SeekHitlist ( pDoc->m_uHitlistOffset ); + } + + // hit emission + int iHit = 0; + while ( iHitGetNextHit(); + if ( uHit==EMPTY_HIT ) + { + // no more hits; get next acceptable document + pDoc++; + do + { + while ( pDoc->m_uDocid < pMatched->m_uDocid ) pDoc++; + if ( pDoc->m_uDocid==DOCID_MAX ) { pDoc = NULL; break; } // matched docs block is over for me, gimme another one + + while ( pMatched->m_uDocid < pDoc->m_uDocid ) pMatched++; + if ( pMatched->m_uDocid==DOCID_MAX ) { pDoc = NULL; break; } // matched doc block did not yet begin for me, gimme another one + } while ( pDoc->m_uDocid!=pMatched->m_uDocid ); + + if ( !pDoc ) + break; + assert ( pDoc->m_uDocid==pMatched->m_uDocid ); + + // setup hitlist reader + m_pQword->SeekHitlist ( pDoc->m_uHitlistOffset ); + continue; + } + + if (!( m_dFields.Test ( HITMAN::GetField ( uHit ) ) )) + continue; + + ExtHit_t & tHit = m_dHits[iHit++]; + tHit.m_uDocid = pDoc->m_uDocid; + tHit.m_uHitpos = uHit; + tHit.m_uQuerypos = (WORD) m_iAtomPos; // assume less that 64K words per query + tHit.m_uWeight = tHit.m_uMatchlen = tHit.m_uSpanlen = 1; + } + + m_pHitDoc = pDoc; + if ( iHit==0 || iHit=0 && iHitm_sWord ) ) + return; + + m_fIDF = -1.0f; + ExtQword_t tInfo; + tInfo.m_sWord = m_pQword->m_sWord; + tInfo.m_sDictWord = m_pQword->m_sDictWord; + tInfo.m_iDocs = m_pQword->m_iDocs; + tInfo.m_iHits = m_pQword->m_iHits; + tInfo.m_iQueryPos = m_pQword->m_iAtomPos; + tInfo.m_fIDF = -1.0f; // suppress gcc 4.2.3 warning + tInfo.m_bExpanded = m_pQword->m_bExpanded; + tInfo.m_bExcluded = m_pQword->m_bExcluded; + hQwords.Add ( tInfo, m_pQword->m_sWord ); +} + +void ExtTerm_c::SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) +{ + if ( m_fIDF<0.0f ) + { + assert ( hQwords ( m_pQword->m_sWord ) ); + m_fIDF = hQwords ( m_pQword->m_sWord )->m_fIDF; + } +} + +////////////////////////////////////////////////////////////////////////// + +const ExtHit_t * ExtTermHitless_c::GetHitsChunk ( const ExtDoc_t * pMatched, SphDocID_t uMaxID ) +{ + if ( !pMatched ) + return NULL; + SphDocID_t uFirstMatch = pMatched->m_uDocid; + + // aim to the right document + ExtDoc_t * pDoc = m_pHitDoc; + m_pHitDoc = NULL; + + if ( !pDoc ) + { + // if we already emitted hits for this matches block, do not do that again + if ( uFirstMatch==m_uHitsOverFor ) + return NULL; + + // early reject whole block + if ( pMatched->m_uDocid > m_uMaxID ) return NULL; + if ( m_uMaxID && m_dDocs[0].m_uDocid > uMaxID ) return NULL; + + // find match + pDoc = m_dDocs; + do + { + while ( pDoc->m_uDocid < pMatched->m_uDocid ) pDoc++; + if ( pDoc->m_uDocid==DOCID_MAX ) + { + m_uHitsOverFor = uFirstMatch; + return NULL; // matched docs block is over for me, gimme another one + } + + while ( pMatched->m_uDocid < pDoc->m_uDocid ) pMatched++; + if ( pMatched->m_uDocid==DOCID_MAX ) + { + m_uHitsOverFor = uFirstMatch; + return NULL; // matched doc block did not yet begin for me, gimme another one + } + } while ( pDoc->m_uDocid!=pMatched->m_uDocid ); + + m_dFieldMask = pDoc->m_dFields; + m_uFieldPos = 0; + } + + // hit emission + int iHit = 0; + for ( ;; ) + { + if ( m_dFieldMask.Test ( m_uFieldPos ) ) + { + if ( m_dFields.Test ( m_uFieldPos ) ) + { + // emit hit + ExtHit_t & tHit = m_dHits[iHit++]; + tHit.m_uDocid = pDoc->m_uDocid; + tHit.m_uHitpos = HITMAN::Create ( m_uFieldPos, -1 ); + tHit.m_uQuerypos = (WORD) m_iAtomPos; + tHit.m_uWeight = tHit.m_uMatchlen = tHit.m_uSpanlen = 1; + + if ( iHit==MAX_HITS-1 ) + break; + } + } + + if ( m_uFieldPos < CSphSmallBitvec::iTOTALBITS-1 ) + { + m_uFieldPos++; + continue; + } + + // field mask is empty, get next document + pDoc++; + do + { + while ( pDoc->m_uDocid < pMatched->m_uDocid ) pDoc++; + if ( pDoc->m_uDocid==DOCID_MAX ) { pDoc = NULL; break; } // matched docs block is over for me, gimme another one + + while ( pMatched->m_uDocid < pDoc->m_uDocid ) pMatched++; + if ( pMatched->m_uDocid==DOCID_MAX ) { pDoc = NULL; break; } // matched doc block did not yet begin for me, gimme another one + } while ( pDoc->m_uDocid!=pMatched->m_uDocid ); + + if ( !pDoc ) + break; + + m_dFieldMask = pDoc->m_dFields; + m_uFieldPos = 0; + } + + m_pHitDoc = pDoc; + if ( iHit==0 || iHit=0 && iHit +ExtTermPos_c::ExtTermPos_c ( ISphQword * pQword, const XQNode_t * pNode, const ISphQwordSetup & tSetup ) + : ExtTerm_c ( pQword, pNode->m_dFieldMask, tSetup, pNode->m_bNotWeighted ) + , m_iMaxFieldPos ( pNode->m_iFieldMaxPos ) + , m_uTermMaxID ( 0 ) + , m_pRawDocs ( NULL ) + , m_pRawDoc ( NULL ) + , m_pRawHit ( NULL ) + , m_uLastID ( 0 ) + , m_eState ( COPY_DONE ) + , m_uDoneFor ( 0 ) + , m_pZoneChecker ( tSetup.m_pZoneChecker ) + , m_dZones ( pNode->m_dZones ) + , m_uLastZonedId ( 0 ) + , m_iCheckFrom ( 0 ) +{ + m_dMyDocs[0].m_uDocid = DOCID_MAX; + m_dMyHits[0].m_uDocid = DOCID_MAX; + m_dFilteredHits[0].m_uDocid = DOCID_MAX; + + AllocDocinfo ( tSetup ); +} + +template < TermPosFilter_e T > +void ExtTermPos_c::Reset ( const ISphQwordSetup & tSetup ) +{ + ExtTerm_c::Reset(tSetup); + m_uTermMaxID = 0; + m_pRawDocs = NULL; + m_pRawDoc = NULL; + m_pRawHit = NULL; + m_uLastID = 0; + m_eState = COPY_DONE; + m_uDoneFor = 0; + m_uLastZonedId = 0; + m_iCheckFrom = 0; + m_dMyDocs[0].m_uDocid = DOCID_MAX; + m_dMyHits[0].m_uDocid = DOCID_MAX; + m_dFilteredHits[0].m_uDocid = DOCID_MAX; +} + +template<> +inline bool ExtTermPos_c::IsAcceptableHit ( const ExtHit_t * pHit ) const +{ + return HITMAN::GetPos ( pHit->m_uHitpos )<=m_iMaxFieldPos; +} + + +template<> +inline bool ExtTermPos_c::IsAcceptableHit ( const ExtHit_t * pHit ) const +{ + return HITMAN::GetPos ( pHit->m_uHitpos )==1; +} + + +template<> +inline bool ExtTermPos_c::IsAcceptableHit ( const ExtHit_t * pHit ) const +{ + return HITMAN::IsEnd ( pHit->m_uHitpos ); +} + + +template<> +inline bool ExtTermPos_c::IsAcceptableHit ( const ExtHit_t * pHit ) const +{ + return HITMAN::GetPos ( pHit->m_uHitpos )==1 && HITMAN::IsEnd ( pHit->m_uHitpos ); +} + + +template<> +inline bool ExtTermPos_c::IsAcceptableHit ( const ExtHit_t * pHit ) const +{ + assert ( m_pZoneChecker ); + + if ( m_uLastZonedId!=pHit->m_uDocid ) + m_iCheckFrom = 0; + m_uLastZonedId = pHit->m_uDocid; + + // only check zones that actually match this document + for ( int i=m_iCheckFrom; iIsInZone ( m_dZones[i], pHit ); + switch ( eState ) + { + case SPH_ZONE_FOUND: + return true; + case SPH_ZONE_NO_DOCUMENT: + Swap ( m_dZones[i], m_dZones[m_iCheckFrom] ); + m_iCheckFrom++; + break; + } + } + return false; +} + + +template < TermPosFilter_e T > +const ExtDoc_t * ExtTermPos_c::GetDocsChunk ( SphDocID_t * pMaxID ) +{ + // fetch more docs if needed + if ( !m_pRawDocs ) + { + m_pRawDocs = ExtTerm_c::GetDocsChunk ( &m_uTermMaxID ); + if ( !m_pRawDocs ) + return NULL; + + m_pRawDoc = m_pRawDocs; + m_pRawHit = NULL; + m_uLastID = 0; + } + + // filter the hits, and build the documents list + int iMyDoc = 0; + int iMyHit = 0; + + const ExtDoc_t * pDoc = m_pRawDoc; // just a shortcut + const ExtHit_t * pHit = m_pRawHit; + const SphDocID_t uSkipID = m_uLastID; + SphDocID_t uLastID = m_uLastID = 0; + + CSphRowitem * pDocinfo = m_pDocinfo; + for ( ;; ) + { + // try to fetch more hits for current raw docs block if we're out + if ( !pHit || pHit->m_uDocid==DOCID_MAX ) + pHit = ExtTerm_c::GetHitsChunk ( m_pRawDocs, m_uTermMaxID ); + + // did we touch all the hits we had? if so, we're fully done with + // current raw docs block, and should start a new one + if ( !pHit ) + { + m_pRawDocs = ExtTerm_c::GetDocsChunk ( &m_uTermMaxID ); + if ( !m_pRawDocs ) // no more incoming documents? bail + break; + + pDoc = m_pRawDocs; + pHit = NULL; + continue; + } + + // skip all tail hits hits from documents below or same ID as uSkipID + + // scan until next acceptable hit + while ( pHit->m_uDocid < pDoc->m_uDocid || ( uSkipID && pHit->m_uDocid<=uSkipID ) ) // skip leftovers + pHit++; + + while ( ( pHit->m_uDocid!=DOCID_MAX || ( uSkipID && pHit->m_uDocid<=uSkipID ) ) && !IsAcceptableHit ( pHit ) ) // skip unneeded hits + pHit++; + + if ( pHit->m_uDocid==DOCID_MAX || ( uSkipID && pHit->m_uDocid<=uSkipID ) ) // check for eof + continue; + + // find and emit new document + while ( pDoc->m_uDocidm_uDocid ) pDoc++; // FIXME? unsafe in broken cases + assert ( pDoc->m_uDocid==pHit->m_uDocid ); + assert ( iMyDocm_uDocid ) + CopyExtDoc ( m_dMyDocs[iMyDoc++], *pDoc, &pDocinfo, m_iStride ); + uLastID = pDoc->m_uDocid; + + // copy acceptable hits for this document + while ( iMyHitm_uDocid==uLastID ) + { + if ( IsAcceptableHit ( pHit ) ) + m_dMyHits[iMyHit++] = *pHit; + pHit++; + } + + if ( iMyHit==MAX_HITS-1 ) + { + // there is no more space for acceptable hits; but further calls to GetHits() *might* produce some + // we need to memorize the trailing document id + m_uLastID = uLastID; + break; + } + } + + m_pRawDoc = pDoc; + m_pRawHit = pHit; + + assert ( iMyDoc>=0 && iMyDoc=0 && iMyHit +const ExtHit_t * ExtTermPos_c::GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ) +{ + if ( m_eState==COPY_DONE ) + { + // this request completed in full + if ( m_uDoneFor==pDocs->m_uDocid || !m_uDoneFor ) + return NULL; + + // old request completed in full, but we have a new hits subchunk request now + // even though there were no new docs requests in the meantime! + m_eState = COPY_FILTERED; + } + m_uDoneFor = pDocs->m_uDocid; + + // regular case + // copy hits for requested docs from my hits to filtered hits, and return those + int iFilteredHits = 0; + + if ( m_eState==COPY_FILTERED ) + { + const ExtHit_t * pMyHit = m_dMyHits; + for ( ;; ) + { + // skip hits that the caller is not interested in + while ( pMyHit->m_uDocid < pDocs->m_uDocid ) + pMyHit++; + + // out of acceptable hits? + if ( pMyHit->m_uDocid==DOCID_MAX ) + { + // do we have a trailing document? if yes, we should also copy trailing hits + m_eState = m_uLastID ? COPY_TRAILING : COPY_DONE; + break; + } + + // skip docs that i do not have + while ( pDocs->m_uDocid < pMyHit->m_uDocid ) + pDocs++; + + // out of requested docs? over and out + if ( pDocs->m_uDocid==DOCID_MAX ) + { + m_eState = COPY_DONE; + break; + } + + // copy matching hits + while ( iFilteredHitsm_uDocid==pMyHit->m_uDocid ) + m_dFilteredHits[iFilteredHits++] = *pMyHit++; + + // paranoid check that we're not out of bounds + assert ( iFilteredHits<=MAX_HITS-1 && pDocs->m_uDocid!=pMyHit->m_uDocid ); + } + } + + // trailing hits case + // my hits did not have enough space, so we should pass raw hits for the last doc + while ( m_eState==COPY_TRAILING && m_uLastID && iFilteredHitsm_uDocid==DOCID_MAX ) + m_pRawHit = ExtTerm_c::GetHitsChunk ( m_pRawDocs, Min ( uMaxID, m_uTermMaxID ) ); + + // no more hits for current chunk + if ( !m_pRawHit ) + { + m_eState = COPY_DONE; + break; + } + + // copy while we can + while ( m_pRawHit->m_uDocid==m_uLastID && iFilteredHitsm_uDocid!=m_uLastID && m_pRawHit->m_uDocid!=DOCID_MAX ) + m_eState = COPY_DONE; + + // in any case, this chunk is over + break; + } + + m_dFilteredHits[iFilteredHits].m_uDocid = DOCID_MAX; + return iFilteredHits ? m_dFilteredHits : NULL; +} + +////////////////////////////////////////////////////////////////////////// + +ExtTwofer_c::ExtTwofer_c ( ExtNode_i * pFirst, ExtNode_i * pSecond, const ISphQwordSetup & tSetup ) +{ + m_pChildren[0] = pFirst; + m_pChildren[1] = pSecond; + m_pCurHit[0] = NULL; + m_pCurHit[1] = NULL; + m_pCurDoc[0] = NULL; + m_pCurDoc[1] = NULL; + m_dNodePos[0] = 0; + m_dNodePos[1] = 0; + m_bPosAware = false; + m_uMatchedDocid = 0; + m_iAtomPos = ( pFirst && pFirst->m_iAtomPos ) ? pFirst->m_iAtomPos : 0; + if ( pSecond && pSecond->m_iAtomPos && pSecond->m_iAtomPosm_iAtomPos; + AllocDocinfo ( tSetup ); +} + +ExtTwofer_c::~ExtTwofer_c () +{ + SafeDelete ( m_pChildren[0] ); + SafeDelete ( m_pChildren[1] ); +} + +void ExtTwofer_c::Reset ( const ISphQwordSetup & tSetup ) +{ + m_pChildren[0]->Reset ( tSetup ); + m_pChildren[1]->Reset ( tSetup ); + m_pCurHit[0] = NULL; + m_pCurHit[1] = NULL; + m_pCurDoc[0] = NULL; + m_pCurDoc[1] = NULL; + m_uMatchedDocid = 0; +} + +void ExtTwofer_c::GetQwords ( ExtQwordsHash_t & hQwords ) +{ + m_pChildren[0]->GetQwords ( hQwords ); + m_pChildren[1]->GetQwords ( hQwords ); +} + +void ExtTwofer_c::SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) +{ + m_pChildren[0]->SetQwordsIDF ( hQwords ); + m_pChildren[1]->SetQwordsIDF ( hQwords ); +} + +////////////////////////////////////////////////////////////////////////// + +const ExtDoc_t * ExtAnd_c::GetDocsChunk ( SphDocID_t * pMaxID ) +{ + m_uMaxID = 0; + const ExtDoc_t * pCur0 = m_pCurDoc[0]; + const ExtDoc_t * pCur1 = m_pCurDoc[1]; + + int iDoc = 0; + CSphRowitem * pDocinfo = m_pDocinfo; + for ( ;; ) + { + // if any of the pointers is empty, *and* there is no data yet, process next child chunk + // if there is data, we can't advance, because child hitlist offsets would be lost + if ( !pCur0 || !pCur1 ) + { + if ( iDoc!=0 ) + break; + + if ( !pCur0 ) pCur0 = m_pChildren[0]->GetDocsChunk ( NULL ); + if ( !pCur1 ) pCur1 = m_pChildren[1]->GetDocsChunk ( NULL ); + if ( !pCur0 || !pCur1 ) + { + m_pCurDoc[0] = NULL; + m_pCurDoc[1] = NULL; + return NULL; + } + } + + // find common matches + assert ( pCur0 && pCur1 ); + while ( iDocm_uDocid < pCur1->m_uDocid ) pCur0++; + if ( pCur0->m_uDocid==DOCID_MAX ) { pCur0 = NULL; break; } + + while ( pCur1->m_uDocid < pCur0->m_uDocid ) pCur1++; + if ( pCur1->m_uDocid==DOCID_MAX ) { pCur1 = NULL; break; } + + if ( pCur0->m_uDocid!=pCur1->m_uDocid ) continue; + + // emit it + ExtDoc_t & tDoc = m_dDocs[iDoc++]; + tDoc.m_uDocid = pCur0->m_uDocid; + tDoc.m_dFields = pCur0->m_dFields | pCur1->m_dFields; + tDoc.m_uHitlistOffset = -1; + tDoc.m_fTFIDF = pCur0->m_fTFIDF + pCur1->m_fTFIDF; + CopyExtDocinfo ( tDoc, *pCur0, &pDocinfo, m_iStride ); + + // skip it + pCur0++; if ( pCur0->m_uDocid==DOCID_MAX ) pCur0 = NULL; + pCur1++; if ( pCur1->m_uDocid==DOCID_MAX ) pCur1 = NULL; + if ( !pCur0 || !pCur1 ) break; + } + } + + m_pCurDoc[0] = pCur0; + m_pCurDoc[1] = pCur1; + + return ReturnDocsChunk ( iDoc, pMaxID ); +} + +const ExtHit_t * ExtAnd_c::GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ) +{ + const ExtHit_t * pCur0 = m_pCurHit[0]; + const ExtHit_t * pCur1 = m_pCurHit[1]; + + if ( m_uMatchedDocid < pDocs->m_uDocid ) + m_uMatchedDocid = 0; + + int iHit = 0; + WORD uNodePos0 = m_dNodePos[0]; + WORD uNodePos1 = m_dNodePos[1]; + while ( iHitm_uDocid==m_uMatchedDocid ) || ( pCur1 && pCur1->m_uDocid==m_uMatchedDocid ) ) ) + { + // merge, while possible + if ( pCur0 && pCur1 && pCur0->m_uDocid==m_uMatchedDocid && pCur1->m_uDocid==m_uMatchedDocid ) + while ( iHitm_uHitpos < pCur1->m_uHitpos ) + || ( pCur0->m_uHitpos==pCur1->m_uHitpos && pCur0->m_uQuerypos>pCur1->m_uQuerypos ) ) + { + m_dHits[iHit] = *pCur0++; + if ( uNodePos0!=0 ) + m_dHits[iHit++].m_uNodepos = uNodePos0; + else + iHit++; + if ( pCur0->m_uDocid!=m_uMatchedDocid ) + break; + } else + { + m_dHits[iHit] = *pCur1++; + if ( uNodePos1!=0 ) + m_dHits[iHit++].m_uNodepos = uNodePos1; + else + iHit++; + if ( pCur1->m_uDocid!=m_uMatchedDocid ) + break; + } + } + + // copy tail, while possible, unless the other child is at the end of a hit block + if ( pCur0 && pCur0->m_uDocid==m_uMatchedDocid && !( pCur1 && pCur1->m_uDocid==DOCID_MAX ) ) + { + while ( pCur0->m_uDocid==m_uMatchedDocid && iHitm_uDocid==m_uMatchedDocid && !( pCur0 && pCur0->m_uDocid==DOCID_MAX ) ) + { + while ( pCur1->m_uDocid==m_uMatchedDocid && iHitm_uDocid!=m_uMatchedDocid && pCur0->m_uDocid!=DOCID_MAX ) + && ( pCur1 && pCur1->m_uDocid!=m_uMatchedDocid && pCur1->m_uDocid!=DOCID_MAX ) ) + m_uMatchedDocid = 0; + + // warmup if needed + if ( !pCur0 || pCur0->m_uDocid==DOCID_MAX ) pCur0 = m_pChildren[0]->GetHitsChunk ( pDocs, uMaxID ); + if ( !pCur1 || pCur1->m_uDocid==DOCID_MAX ) pCur1 = m_pChildren[1]->GetHitsChunk ( pDocs, uMaxID ); + + // one of the hitlists is over + if ( !pCur0 || !pCur1 ) + { + if ( !pCur0 && !pCur1 ) break; // both are over, we're done + + // one is over, but we still need to copy the other one + m_uMatchedDocid = pCur0 ? pCur0->m_uDocid : pCur1->m_uDocid; + assert ( m_uMatchedDocid!=DOCID_MAX ); + continue; + } + + // find matching doc + assert ( pCur1 && pCur0 ); + while ( !m_uMatchedDocid ) + { + while ( pCur0->m_uDocid < pCur1->m_uDocid ) pCur0++; + if ( pCur0->m_uDocid==DOCID_MAX ) break; + + while ( pCur1->m_uDocid < pCur0->m_uDocid ) pCur1++; + if ( pCur1->m_uDocid==DOCID_MAX ) break; + + if ( pCur0->m_uDocid==pCur1->m_uDocid ) m_uMatchedDocid = pCur0->m_uDocid; + } + } + + m_pCurHit[0] = pCur0; + m_pCurHit[1] = pCur1; + + assert ( iHit>=0 && iHitm_uSpanlen + pRight->m_uHitpos - pLeft->m_uHitpos; +} + +////////////////////////////////////////////////////////////////////////// + +const ExtDoc_t * ExtOr_c::GetDocsChunk ( SphDocID_t * pMaxID ) +{ + m_uMaxID = 0; + const ExtDoc_t * pCur0 = m_pCurDoc[0]; + const ExtDoc_t * pCur1 = m_pCurDoc[1]; + + DWORD uTouched = 0; + int iDoc = 0; + CSphRowitem * pDocinfo = m_pDocinfo; + while ( iDocm_uDocid==DOCID_MAX ) + { + if ( uTouched & 1 ) break; // it was touched, so we can't advance, because child hitlist offsets would be lost + pCur0 = m_pChildren[0]->GetDocsChunk ( NULL ); + } + if ( !pCur1 || pCur1->m_uDocid==DOCID_MAX ) + { + if ( uTouched & 2 ) break; // it was touched, so we can't advance, because child hitlist offsets would be lost + pCur1 = m_pChildren[1]->GetDocsChunk ( NULL ); + } + + // check if we're over + if ( !pCur0 && !pCur1 ) break; + + // merge lists while we can, copy tail while if we can not + if ( pCur0 && pCur1 ) + { + // merge lists if we have both of them + while ( iDocm_uDocid < pCur1->m_uDocid && iDocm_uDocid==DOCID_MAX ) { pCur0 = NULL; break; } + + // copy min docids from 2nd child + while ( pCur1->m_uDocid < pCur0->m_uDocid && iDocm_uDocid==DOCID_MAX ) { pCur1 = NULL; break; } + + // copy min docids from both children + assert ( pCur0->m_uDocid && pCur0->m_uDocid!=DOCID_MAX ); + assert ( pCur1->m_uDocid && pCur1->m_uDocid!=DOCID_MAX ); + + while ( pCur0->m_uDocid==pCur1->m_uDocid && pCur0->m_uDocid!=DOCID_MAX && iDocm_dFields | pCur1->m_dFields; + m_dDocs[iDoc].m_fTFIDF = pCur0->m_fTFIDF + pCur1->m_fTFIDF; + CopyExtDocinfo ( m_dDocs[iDoc], *pCur0, &pDocinfo, m_iStride ); + iDoc++; + pCur0++; + pCur1++; + uTouched |= 3; + } + if ( pCur0->m_uDocid==DOCID_MAX ) { pCur0 = NULL; break; } + if ( pCur1->m_uDocid==DOCID_MAX ) { pCur1 = NULL; break; } + } + } else + { + // copy tail if we don't have both lists + const ExtDoc_t * pList = pCur0 ? pCur0 : pCur1; + if ( pList->m_uDocid!=DOCID_MAX && iDocm_uDocid!=DOCID_MAX && iDocm_uDocid==DOCID_MAX ) pList = NULL; + if ( pCur0 ) + pCur0 = pList; + else + pCur1 = pList; + } + } + + m_pCurDoc[0] = pCur0; + m_pCurDoc[1] = pCur1; + + return ReturnDocsChunk ( iDoc, pMaxID ); +} + +const ExtHit_t * ExtOr_c::GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ) +{ + const ExtHit_t * pCur0 = m_pCurHit[0]; + const ExtHit_t * pCur1 = m_pCurHit[1]; + + int iHit = 0; + while ( iHitm_uDocid==m_uMatchedDocid ) || ( pCur1 && pCur1->m_uDocid==m_uMatchedDocid ) ) ) + { + // merge, while possible + if ( pCur0 && pCur1 && pCur0->m_uDocid==m_uMatchedDocid && pCur1->m_uDocid==m_uMatchedDocid ) + while ( iHitm_uHitpos < pCur1->m_uHitpos ) + { + m_dHits[iHit++] = *pCur0++; + if ( pCur0->m_uDocid!=m_uMatchedDocid ) + break; + } else + { + m_dHits[iHit++] = *pCur1++; + if ( pCur1->m_uDocid!=m_uMatchedDocid ) + break; + } + } + + // a pretty tricky bit + // one of the nodes might have run out of current hits chunk (rather hits at all) + // so we need to get the next hits chunk NOW, check for that condition, and keep merging + // simply going to tail hits copying is incorrect, it could copy in wrong order + // example, word A, pos 1, 2, 3, hit chunk ends, 4, 5, 6, word B, pos 7, 8, 9 + if ( !pCur0 || pCur0->m_uDocid==DOCID_MAX ) + { + pCur0 = m_pChildren[0]->GetHitsChunk ( pDocs, uMaxID ); + if ( pCur0 && pCur0->m_uDocid==m_uMatchedDocid ) + continue; + } + if ( !pCur1 || pCur1->m_uDocid==DOCID_MAX ) + { + pCur1 = m_pChildren[1]->GetHitsChunk ( pDocs, uMaxID ); + if ( pCur1 && pCur1->m_uDocid==m_uMatchedDocid ) + continue; + } + + // copy tail, while possible + if ( pCur0 && pCur0->m_uDocid==m_uMatchedDocid ) + { + while ( pCur0->m_uDocid==m_uMatchedDocid && iHitm_uDocid==m_uMatchedDocid ); + while ( pCur1->m_uDocid==m_uMatchedDocid && iHitm_uDocid!=m_uMatchedDocid ) && ( pCur1 && pCur1->m_uDocid!=m_uMatchedDocid ) ) + m_uMatchedDocid = 0; + + // warmup if needed + if ( !pCur0 || pCur0->m_uDocid==DOCID_MAX ) pCur0 = m_pChildren[0]->GetHitsChunk ( pDocs, uMaxID ); + if ( !pCur1 || pCur1->m_uDocid==DOCID_MAX ) pCur1 = m_pChildren[1]->GetHitsChunk ( pDocs, uMaxID ); + + if ( !pCur0 && !pCur1 ) break; + m_uMatchedDocid = ( pCur0 && pCur1 ) + ? Min ( pCur0->m_uDocid, pCur1->m_uDocid ) + : ( pCur0 ? pCur0->m_uDocid : pCur1->m_uDocid ); + } + + m_pCurHit[0] = pCur0; + m_pCurHit[1] = pCur1; + + assert ( iHit>=0 && iHitGetDocsChunk ( pMaxID ); + + // otherwise, do some removals + m_uMaxID = 0; + const ExtDoc_t * pCur0 = m_pCurDoc[0]; + const ExtDoc_t * pCur1 = m_pCurDoc[1]; + + int iDoc = 0; + CSphRowitem * pDocinfo = m_pDocinfo; + while ( iDocm_uDocid==DOCID_MAX ) + { + // there were matches; we can not pull more because that'd fuckup hitlists + if ( iDoc ) + break; + + // no matches so far; go pull + pCur0 = m_pChildren[0]->GetDocsChunk ( NULL ); + if ( !pCur0 ) + break; + } + + // pull more docs from reject, if nedeed + if ( !pCur1 || pCur1->m_uDocid==DOCID_MAX ) + pCur1 = m_pChildren[1]->GetDocsChunk ( NULL ); + + // if there's nothing to filter against, simply copy leftovers + if ( !pCur1 ) + { + assert ( pCur0 ); + while ( pCur0->m_uDocid!=DOCID_MAX && iDocm_uDocid==DOCID_MAX ) + m_bPassthrough = true; + + break; + } + + // perform filtering + assert ( pCur0 ); + assert ( pCur1 ); + for ( ;; ) + { + assert ( iDocm_uDocid!=DOCID_MAX ); + assert ( pCur1->m_uDocid!=DOCID_MAX ); + + // copy accepted until min rejected id + while ( pCur0->m_uDocid < pCur1->m_uDocid && iDocm_uDocid==DOCID_MAX || iDoc==MAX_DOCS-1 ) break; + + // skip rejected until min accepted id + while ( pCur1->m_uDocid < pCur0->m_uDocid ) pCur1++; + if ( pCur1->m_uDocid==DOCID_MAX ) break; + + // skip both while ids match + while ( pCur0->m_uDocid==pCur1->m_uDocid && pCur0->m_uDocid!=DOCID_MAX ) + { + pCur0++; + pCur1++; + } + if ( pCur0->m_uDocid==DOCID_MAX || pCur1->m_uDocid==DOCID_MAX ) break; + } + } + + m_pCurDoc[0] = pCur0; + m_pCurDoc[1] = pCur1; + + return ReturnDocsChunk ( iDoc, pMaxID ); +} + +const ExtHit_t * ExtAndNot_c::GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ) +{ + return m_pChildren[0]->GetHitsChunk ( pDocs, uMaxID ); +}; + +void ExtAndNot_c::Reset ( const ISphQwordSetup & tSetup ) +{ + m_bPassthrough = false; + ExtTwofer_c::Reset ( tSetup ); +} + +////////////////////////////////////////////////////////////////////////// + +ExtNWayT::ExtNWayT ( const CSphVector & dNodes, DWORD, const XQNode_t &, const ISphQwordSetup & tSetup ) + : m_pNode ( NULL ) + , m_pDocs ( NULL ) + , m_pHits ( NULL ) + , m_pDoc ( NULL ) + , m_pHit ( NULL ) + , m_pMyDoc ( NULL ) + , m_pMyHit ( NULL ) + , m_uLastDocID ( 0 ) + , m_uMatchedDocid ( 0 ) + , m_uHitsOverFor ( 0 ) +{ + assert ( dNodes.GetLength()>1 ); + m_iAtomPos = dNodes[0]->m_iAtomPos; + m_dMyHits[0].m_uDocid = DOCID_MAX; + AllocDocinfo ( tSetup ); +} + +ExtNWayT::~ExtNWayT () +{ + SafeDelete ( m_pNode ); +} + +void ExtNWayT::Reset ( const ISphQwordSetup & tSetup ) +{ + m_pNode->Reset ( tSetup ); + m_pDocs = NULL; + m_pHits = NULL; + m_pDoc = NULL; + m_pHit = NULL; + m_pMyDoc = NULL; + m_pMyHit = NULL; + m_uLastDocID = 0; + m_uMatchedDocid = 0; + m_uHitsOverFor = 0; + m_dMyHits[0].m_uDocid = DOCID_MAX; +} + +void ExtNWayT::GetQwords ( ExtQwordsHash_t & hQwords ) +{ + assert ( m_pNode ); + m_pNode->GetQwords ( hQwords ); +} + +void ExtNWayT::SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) +{ + assert ( m_pNode ); + m_pNode->SetQwordsIDF ( hQwords ); +} + +template < class FSM > +const ExtDoc_t * ExtNWay_c::GetDocsChunk ( SphDocID_t * pMaxID ) +{ + m_uMaxID = 0; + + // initial warmup + if ( !m_pDoc ) + { + if ( !m_pDocs ) m_pDocs = m_pNode->GetDocsChunk ( &m_uDocsMaxID ); + if ( !m_pDocs ) return NULL; // no more docs + m_pDoc = m_pDocs; + } + + // shortcuts + const ExtDoc_t * pDoc = m_pDoc; + const ExtHit_t * pHit = m_pHit; + + FSM::ResetFSM(); + + // skip leftover hits + while ( m_uLastDocID ) + { + if ( !pHit || pHit->m_uDocid==DOCID_MAX ) + { + pHit = m_pHits = m_pNode->GetHitsChunk ( m_pDocs, m_uDocsMaxID ); + if ( !pHit ) + break; + } + + while ( pHit->m_uDocid==m_uLastDocID ) + pHit++; + + if ( pHit->m_uDocid!=DOCID_MAX && pHit->m_uDocid!=m_uLastDocID ) + m_uLastDocID = 0; + } + + // search for matches + int iDoc = 0; + int iHit = 0; + CSphRowitem * pDocinfo = m_pDocinfo; + while ( iHitm_uDocid==DOCID_MAX ) + { + // grab more hits + pHit = m_pHits = m_pNode->GetHitsChunk ( m_pDocs, m_uDocsMaxID ); + if ( m_pHits ) continue; + + m_uMatchedDocid = 0; + + // no more hits for current docs chunk; grab more docs + pDoc = m_pDocs = m_pNode->GetDocsChunk ( &m_uDocsMaxID ); + if ( !m_pDocs ) break; + + // we got docs, there must be hits + pHit = m_pHits = m_pNode->GetHitsChunk ( m_pDocs, m_uDocsMaxID ); + assert ( pHit ); + continue; + } + + // check if the incoming hit is out of bounds, or affects min pos + if ( pHit->m_uDocid!=m_uMatchedDocid ) + { + m_uMatchedDocid = pHit->m_uDocid; + FSM::ResetFSM(); + continue; + } + + if ( FSM::HitFSM ( pHit, &m_dMyHits[iHit] ) ) + { + // emit document, if it's new + if ( pHit->m_uDocid!=m_uLastDocID ) + { + assert ( pDoc->m_uDocid<=pHit->m_uDocid ); + while ( pDoc->m_uDocid < pHit->m_uDocid ) pDoc++; + assert ( pDoc->m_uDocid==pHit->m_uDocid ); + + m_dDocs[iDoc].m_uDocid = pHit->m_uDocid; + m_dDocs[iDoc].m_dFields.Unset(); + m_dDocs[iDoc].m_dFields.Set ( HITMAN::GetField ( pHit->m_uHitpos ) ); + m_dDocs[iDoc].m_uHitlistOffset = -1; + m_dDocs[iDoc].m_fTFIDF = pDoc->m_fTFIDF; + CopyExtDocinfo ( m_dDocs[iDoc], *pDoc, &pDocinfo, m_iStride ); + iDoc++; + m_uLastDocID = pHit->m_uDocid; + } + iHit++; + } + + // go on + pHit++; + } + + // reset current positions for hits chunk getter + m_pMyDoc = m_dDocs; + m_pMyHit = m_dMyHits; + + // save shortcuts + m_pDoc = pDoc; + m_pHit = pHit; + + assert ( iHit>=0 && iHit +const ExtHit_t * ExtNWay_c::GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ) +{ + // if we already emitted hits for this matches block, do not do that again + SphDocID_t uFirstMatch = pDocs->m_uDocid; + if ( uFirstMatch==m_uHitsOverFor ) + return NULL; + + // early reject whole block + if ( pDocs->m_uDocid > m_uMaxID ) return NULL; + if ( m_uMaxID && m_dDocs[0].m_uDocid > uMaxID ) return NULL; + + // shortcuts + const ExtDoc_t * pMyDoc = m_pMyDoc; + const ExtHit_t * pMyHit = m_pMyHit; + assert ( pMyDoc ); + assert ( pMyHit ); + + // filter and copy hits from m_dMyHits + int iHit = 0; + while ( iHitm_uDocid < pDocs->m_uDocid ) pMyDoc++; + if ( pMyDoc->m_uDocid==DOCID_MAX ) break; + + while ( pDocs->m_uDocid < pMyDoc->m_uDocid ) pDocs++; + if ( pDocs->m_uDocid==DOCID_MAX ) break; + } while ( pDocs->m_uDocid!=pMyDoc->m_uDocid ); + + if ( pDocs->m_uDocid!=pMyDoc->m_uDocid ) + { + assert ( pMyDoc->m_uDocid==DOCID_MAX || pDocs->m_uDocid==DOCID_MAX ); + break; + } + + assert ( pDocs->m_uDocid==pMyDoc->m_uDocid ); + assert ( pDocs->m_uDocid!=0 ); + assert ( pDocs->m_uDocid!=DOCID_MAX ); + + m_uMatchedDocid = pDocs->m_uDocid; + } + + // skip until we have to + while ( pMyHit->m_uDocid < m_uMatchedDocid ) pMyHit++; + + // copy while we can + if ( pMyHit->m_uDocid!=DOCID_MAX ) + { + assert ( pMyHit->m_uDocid==m_uMatchedDocid ); + assert ( m_uMatchedDocid!=0 && m_uMatchedDocid!=DOCID_MAX ); + + while ( pMyHit->m_uDocid==m_uMatchedDocid && iHitm_uDocid!=m_uMatchedDocid && pMyHit->m_uDocid!=DOCID_MAX ) + { + // it's simply next document in the line; switch to it + m_uMatchedDocid = 0; + pMyDoc++; + + } else if ( pMyHit->m_uDocid==DOCID_MAX && !m_pHit ) + { + // it's the end + break; + + } else if ( pMyHit->m_uDocid==DOCID_MAX && m_pHit && iHitm_uDocid ); + assert ( m_uMatchedDocid==m_uLastDocID ); + assert ( !m_pDoc || m_uMatchedDocid==m_pDoc->m_uDocid ); + m_pMyDoc = pMyDoc; + if ( EmitTail(iHit) ) + m_uHitsOverFor = uFirstMatch; + pMyDoc = m_pMyDoc; + } + } + + // save shortcuts + m_pMyDoc = pMyDoc; + m_pMyHit = pMyHit; + + assert ( iHit>=0 && iHit +bool ExtNWay_c::EmitTail ( int & iHit ) +{ + const ExtHit_t * pHit = m_pHit; + const ExtDoc_t * pMyDoc = m_pMyDoc; + bool bTailFinished = false; + + while ( iHitm_uDocid==DOCID_MAX ) + { + pHit = m_pHits = m_pNode->GetHitsChunk ( m_pDocs, m_uDocsMaxID ); + if ( !pHit ) + { + m_uMatchedDocid = 0; + pMyDoc++; + break; + } + } + + // stop and finish on the first new id + if ( pHit->m_uDocid!=m_uMatchedDocid ) + { + // reset hits getter; this docs chunk from above is finally over + bTailFinished = true; + m_uMatchedDocid = 0; + pMyDoc++; + break; + } + + if ( FSM::HitFSM ( pHit, &m_dHits[iHit] ) ) + iHit++; + pHit++; + } + // save shortcut + m_pHit = pHit; + m_pMyDoc = pMyDoc; + return bTailFinished; +} + +////////////////////////////////////////////////////////////////////////// + +FSMphrase::FSMphrase ( const CSphVector & dQwords, DWORD, const XQNode_t & , const ISphQwordSetup & ) + : m_uExpQpos ( 0 ) + , m_uExpPos ( 0 ) + , m_uLeaves ( dQwords.GetLength() ) +{ + m_uMinQpos = dQwords[0]->m_iAtomPos; + m_uMaxQpos = dQwords.Last()->m_iAtomPos; + m_dQposDelta.Resize ( m_uMaxQpos-m_uMinQpos+1 ); + ARRAY_FOREACH ( i, m_dQposDelta ) + m_dQposDelta[i] = -INT_MAX; + + for ( int i=1; i<(int)m_uLeaves; i++ ) + m_dQposDelta [ dQwords[i-1]->m_iAtomPos - dQwords[0]->m_iAtomPos ] = dQwords[i]->m_iAtomPos - dQwords[i-1]->m_iAtomPos; +} + +inline bool FSMphrase::HitFSM ( const ExtHit_t* pHit, ExtHit_t* dTarget ) +{ + // unexpected too-low position? must be duplicate keywords for the previous one ("aaa bbb aaa ccc" case); just skip them + if ( HITMAN::GetLCS ( pHit->m_uHitpos )m_uHitpos )!=m_uExpPos ) + { + // stream position out of sequence; reset expected positions + if ( pHit->m_uQuerypos==m_uMinQpos ) + { + m_uExpPos = HITMAN::GetLCS ( pHit->m_uHitpos ) + m_dQposDelta[0]; + m_uExpQpos = pHit->m_uQuerypos + m_dQposDelta[0]; + } else + m_uExpPos = m_uExpQpos = 0; + return false; + } + + // scan all hits with matching stream position + // duplicate stream positions occur when there are duplicate query words + // stream position is as expected; let's check query position + if ( pHit->m_uQuerypos!=m_uExpQpos ) + { + // unexpected query position + // do nothing; there might be other words in same (!) expected position following, with proper query positions + // (eg. if the query words are repeated) + if ( pHit->m_uQuerypos==m_uMinQpos ) + { + m_uExpPos = pHit->m_uHitpos + m_dQposDelta[0]; + m_uExpQpos = pHit->m_uQuerypos + m_dQposDelta[0]; + } + return false; + } + + if ( m_uExpQpos!=m_uMaxQpos ) + { + // intermediate expected position; keep looking + assert ( pHit->m_uQuerypos==m_uExpQpos ); + int iDelta = m_dQposDelta [ pHit->m_uQuerypos - m_uMinQpos ]; + m_uExpPos += iDelta; + m_uExpQpos += iDelta; + // FIXME! what if there *more* hits with current pos following? + return false; + } + + // expected position which concludes the phrase; emit next match + assert ( pHit->m_uQuerypos==m_uExpQpos ); + + DWORD uSpanlen = m_uMaxQpos - m_uMinQpos; + + // emit directly into m_dHits, this is no need to disturb m_dMyHits here. + dTarget->m_uDocid = pHit->m_uDocid; + dTarget->m_uHitpos = HITMAN::GetLCS ( pHit->m_uHitpos ) - uSpanlen; + dTarget->m_uQuerypos = (WORD) m_uMinQpos; + dTarget->m_uMatchlen = dTarget->m_uSpanlen = (WORD)( uSpanlen + 1 ); + dTarget->m_uWeight = m_uLeaves; + m_uExpPos = m_uExpQpos = 0; + return true; +} + + +////////////////////////////////////////////////////////////////////////// + +FSMproximity::FSMproximity ( const CSphVector & dQwords, DWORD, const XQNode_t & tNode, const ISphQwordSetup & ) + : m_iMaxDistance ( tNode.m_iOpArg ) + , m_uWordsExpected ( dQwords.GetLength() ) + , m_uExpPos ( 0 ) +{ + assert ( m_iMaxDistance>0 ); + m_uMinQpos = dQwords[0]->m_iAtomPos; + m_uQLen = dQwords.Last()->m_iAtomPos - m_uMinQpos; + m_dProx.Resize ( m_uQLen+1 ); + m_dDeltas.Resize ( m_uQLen+1 ); +} + +inline bool FSMproximity::HitFSM ( const ExtHit_t* pHit, ExtHit_t* dTarget ) +{ + // walk through the hitlist and update context + int iQindex = pHit->m_uQuerypos - m_uMinQpos; + DWORD uHitpos = HITMAN::GetLCS ( pHit->m_uHitpos ); + + // check if the word is new + if ( m_dProx[iQindex]==UINT_MAX ) + m_uWords++; + + // update the context + m_dProx[iQindex] = uHitpos; + + // check if the incoming hit is out of bounds, or affects min pos + if ( uHitpos>=m_uExpPos // out of expected bounds + || iQindex==m_iMinQindex ) // or simply affects min pos + { + m_iMinQindex = iQindex; + int iMinPos = uHitpos - m_uQLen - m_iMaxDistance; + + ARRAY_FOREACH ( i, m_dProx ) + if ( m_dProx[i]!=UINT_MAX ) + { + if ( (int)m_dProx[i]<=iMinPos ) + { + m_dProx[i] = UINT_MAX; + m_uWords--; + continue; + } + if ( m_dProx[i]m_uHitpos - m_dProx[m_iMinQindex] - m_uQLen ) + DWORD uMax = 0; + ARRAY_FOREACH ( i, m_dProx ) + { + m_dDeltas[i] = m_dProx[i] - i; + uMax = Max ( uMax, m_dProx[i] ); + } + m_dDeltas.Sort (); + + DWORD uWeight = 0; + int iLast = -INT_MAX; + ARRAY_FOREACH ( i, m_dDeltas ) + { + if ( m_dDeltas[i]==iLast ) + uWeight++; + else + uWeight = 1; + iLast = m_dDeltas[i]; + } + + // emit hit + dTarget->m_uDocid = pHit->m_uDocid; + dTarget->m_uHitpos = Hitpos_t ( m_dProx[m_iMinQindex] ); // !COMMIT strictly speaking this is creation from LCS not value + dTarget->m_uQuerypos = (WORD) m_uMinQpos; + dTarget->m_uSpanlen = dTarget->m_uMatchlen = (WORD)( uMax-m_dProx[m_iMinQindex]+1 ); + dTarget->m_uWeight = uWeight; + + // remove current min, and force recompue + m_dProx[m_iMinQindex] = UINT_MAX; + m_iMinQindex = -1; + m_uWords--; + m_uExpPos = 0; + return true; +} + +////////////////////////////////////////////////////////////////////////// + +FSMmultinear::FSMmultinear ( const CSphVector & dNodes, DWORD, const XQNode_t & tNode, const ISphQwordSetup & ) + : m_iNear ( tNode.m_iOpArg ) + , m_uWordsExpected ( dNodes.GetLength() ) +{ + if ( m_uWordsExpected==2 ) + m_bTwofer = true; + else + { + m_dNpos.Reserve ( m_uWordsExpected ); + m_dRing.Resize ( m_uWordsExpected ); + m_bTwofer = false; + } + assert ( m_iNear>0 ); +} + +inline bool FSMmultinear::HitFSM ( const ExtHit_t* pHit, ExtHit_t* dTarget ) +{ + // walk through the hitlist and update context + DWORD uHitpos = HITMAN::GetLCS ( pHit->m_uHitpos ); + WORD uNpos = pHit->m_uNodepos; + WORD uQpos = pHit->m_uQuerypos; + + // skip dupe hit (may be emitted by OR node, for example) + if ( m_uLastP==uHitpos ) + { + // check if the hit is subset of another one + if ( m_uPrelastP && m_uLastML < pHit->m_uMatchlen ) + { + // roll back pre-last to check agains this new hit. + m_uLastML = m_uPrelastML; + m_uLastSL = m_uPrelastSL; + m_uFirstHit = m_uLastP = m_uPrelastP; + m_uWeight = m_uWeight - m_uLastW + m_uPrelastW; + } else + return false; + } + + // probably new chain + if ( m_uLastP==0 || ( m_uLastP + m_uLastML + m_iNear )<=uHitpos ) + { + m_uFirstHit = m_uLastP = uHitpos; + m_uLastML = pHit->m_uMatchlen; + m_uLastSL = pHit->m_uSpanlen; + m_uWeight = m_uLastW = pHit->m_uWeight; + if ( m_bTwofer ) + { + m_uFirstQpos = uQpos; + m_uFirstNpos = uNpos; + } else + { + m_dNpos.Resize(1); + m_dNpos[0] = uNpos; + Add2Ring ( pHit ); + } + return false; + } + + // this hit (with such querypos) already was there. Skip the hit. + if ( m_bTwofer ) + { + // special case for twofer: hold the overlapping + if ( ( m_uFirstHit + m_uLastML )>uHitpos + && ( m_uFirstHit + m_uLastML )<( uHitpos + pHit->m_uMatchlen ) + && m_uLastML!=pHit->m_uMatchlen ) + { + m_uFirstHit = m_uLastP = uHitpos; + m_uLastML = pHit->m_uMatchlen; + m_uLastSL = pHit->m_uSpanlen; + m_uWeight = m_uLastW = pHit->m_uWeight; + m_uFirstQpos = uQpos; + m_uFirstNpos = uNpos; + return false; + } + if ( uNpos==m_uFirstNpos ) + { + if ( m_uLastP < uHitpos ) + { + m_uPrelastML = m_uLastML; + m_uPrelastSL = m_uLastSL; + m_uPrelastP = m_uLastP; + m_uPrelastW = pHit->m_uWeight; + + m_uFirstHit = m_uLastP = uHitpos; + m_uLastML = pHit->m_uMatchlen; + m_uLastSL = pHit->m_uSpanlen; + m_uWeight = m_uLastW = m_uPrelastW; + m_uFirstQpos = uQpos; + m_uFirstNpos = uNpos; + } + return false; + } + } else + { + if ( uNpos < m_dNpos[0] ) + { + m_uFirstQpos = Min ( m_uFirstQpos, uQpos ); + m_dNpos.Insert ( 0, uNpos ); + } else if ( uNpos > m_dNpos.Last() ) + { + m_uFirstQpos = Min ( m_uFirstQpos, uQpos ); + m_dNpos.Add ( uNpos ); + } else if ( uNpos!=m_dNpos[0] && uNpos!=m_dNpos.Last() ) + { + int iEnd = m_dNpos.GetLength(); + int iStart = 0; + int iMid = -1; + while ( iEnd-iStart>1 ) + { + iMid = ( iStart + iEnd ) / 2; + if ( uNpos==m_dNpos[iMid] ) + { + const ExtHit_t& dHit = m_dRing[m_iRing]; + // last addition same as the first. So, we can shift + if ( uNpos==dHit.m_uNodepos ) + { + m_uWeight -= dHit.m_uWeight; + m_uFirstHit = HITMAN::GetLCS ( dHit.m_uHitpos ); + ShiftRing(); + // last addition same as the first. So, we can shift + } else if ( uNpos==m_dRing [ RingTail() ].m_uNodepos ) + m_uWeight -= m_dRing [ RingTail() ].m_uWeight; + else + return false; + } + + if ( uNposm_uWeight; + m_uLastML = pHit->m_uMatchlen; + m_uLastSL = pHit->m_uSpanlen; + Add2Ring ( pHit ); + + // finally got the whole chain - emit it! + // warning: we don't support overlapping in generic chains. + if ( m_bTwofer || (int)m_uWordsExpected==m_dNpos.GetLength() ) + { + dTarget->m_uDocid = pHit->m_uDocid; + dTarget->m_uHitpos = Hitpos_t ( m_uFirstHit ); // !COMMIT strictly speaking this is creation from LCS not value + dTarget->m_uMatchlen = (WORD)( uHitpos - m_uFirstHit + m_uLastML ); + dTarget->m_uWeight = m_uWeight; + m_uPrelastP = 0; + + if ( m_bTwofer ) // for exactly 2 words allow overlapping - so, just shift the chain, not reset it + { + dTarget->m_uQuerypos = Min ( m_uFirstQpos, pHit->m_uQuerypos ); + dTarget->m_uSpanlen = 2; + m_uFirstHit = m_uLastP = uHitpos; + m_uWeight = pHit->m_uWeight; + m_uFirstQpos = pHit->m_uQuerypos; + } else + { + dTarget->m_uQuerypos = Min ( m_uFirstQpos, pHit->m_uQuerypos ); + dTarget->m_uSpanlen = (WORD) m_dNpos.GetLength(); + m_uLastP = 0; + } + return true; + } + + m_uLastP = uHitpos; + return false; +} + +////////////////////////////////////////////////////////////////////////// + +ExtQuorum_c::ExtQuorum_c ( CSphVector & dQwords, DWORD uDupeMask, const XQNode_t & tNode, const ISphQwordSetup & ) +{ + assert ( tNode.GetOp()==SPH_QUERY_QUORUM ); + + m_iThresh = tNode.m_iOpArg; + m_bDone = false; + + assert ( dQwords.GetLength()>1 ); // use TERM instead + assert ( dQwords.GetLength()<=32 ); // internal masks are 32 bits + assert ( m_iThresh>=1 ); // 1 is also OK; it's a bit different from just OR + assert ( m_iThresh0 ) + m_iAtomPos = dQwords[0]->m_iAtomPos; + + ARRAY_FOREACH ( i, dQwords ) + { + m_dInitialChildren.Add ( dQwords[i] ); + m_pCurDoc.Add ( NULL ); + m_pCurHit.Add ( NULL ); + } + + m_dChildren = m_dInitialChildren; + + m_uMask = m_uInitialMask = uDupeMask; + m_uMaskEnd = dQwords.GetLength() - 1; + m_uMatchedDocid = 0; +} + +ExtQuorum_c::~ExtQuorum_c () +{ + ARRAY_FOREACH ( i, m_dInitialChildren ) + SafeDelete ( m_dInitialChildren[i] ); +} + +void ExtQuorum_c::Reset ( const ISphQwordSetup & tSetup ) +{ + m_bDone = false; + + m_pCurDoc.Resize ( m_dInitialChildren.GetLength() ); + m_pCurHit.Resize ( m_dInitialChildren.GetLength() ); + m_dChildren.Resize ( m_dInitialChildren.GetLength() ); + ARRAY_FOREACH ( i, m_dInitialChildren ) + { + m_dChildren[i] = m_dInitialChildren[i]; + m_pCurDoc[i] = NULL; + m_pCurHit[i] = NULL; + } + + m_uMask = m_uInitialMask; + m_uMaskEnd = m_dChildren.GetLength() - 1; + m_uMatchedDocid = 0; + + ARRAY_FOREACH ( i, m_dChildren ) + m_dChildren[i]->Reset ( tSetup ); +} + +void ExtQuorum_c::GetQwords ( ExtQwordsHash_t & hQwords ) +{ + ARRAY_FOREACH ( i, m_dChildren ) + m_dChildren[i]->GetQwords ( hQwords ); +} + +void ExtQuorum_c::SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) +{ + ARRAY_FOREACH ( i, m_dChildren ) + m_dChildren[i]->SetQwordsIDF ( hQwords ); +} + +const ExtDoc_t * ExtQuorum_c::GetDocsChunk ( SphDocID_t * pMaxID ) +{ + // warmup + ARRAY_FOREACH ( i, m_pCurDoc ) + if ( !m_pCurDoc[i] || m_pCurDoc[i]->m_uDocid==DOCID_MAX ) + { + m_pCurDoc[i] = m_dChildren[i]->GetDocsChunk ( NULL ); + if ( m_pCurDoc[i] ) + continue; + + if ( m_dChildren.GetLength()==m_iThresh ) + { + m_bDone = true; + break; + } + + // replace i-th bit with the last one + m_uMask &= ~( 1UL<> m_uMaskEnd ) & 1 ) << i; // set i-th bit to end bit + m_uMaskEnd--; + + m_dChildren.RemoveFast ( i ); + m_pCurDoc.RemoveFast ( i ); + m_pCurHit.RemoveFast ( i ); + i--; + } + + // early out + if ( m_bDone ) + return NULL; + + // main loop + DWORD uTouched = 0; // bitmask of children that actually produced matches this time + int iDoc = 0; + bool bDone = false; + CSphRowitem * pDocinfo = m_pDocinfo; + while ( iDocm_uDocid && m_pCurDoc[i]->m_uDocid!=DOCID_MAX ); + if ( m_pCurDoc[i]->m_uDocid < tCand.m_uDocid ) + { + tCand = *m_pCurDoc[i]; + iCandMatches = (m_uMask >> i) & 1; + + } else if ( m_pCurDoc[i]->m_uDocid==tCand.m_uDocid ) + { + tCand.m_dFields |= m_pCurDoc[i]->m_dFields; + tCand.m_fTFIDF += m_pCurDoc[i]->m_fTFIDF; + iCandMatches += (m_uMask >> i) & 1; + } + } + + // submit match + if ( iCandMatches>=m_iThresh ) + CopyExtDoc ( m_dDocs[iDoc++], tCand, &pDocinfo, m_iStride ); + + // advance children + ARRAY_FOREACH ( i, m_pCurDoc ) + if ( m_pCurDoc[i]->m_uDocid==tCand.m_uDocid ) + { + if ( iCandMatches>=m_iThresh ) + uTouched |= ( 1UL<m_uDocid!=DOCID_MAX ) + continue; + + if ( uTouched & ( 1UL<GetDocsChunk ( NULL ); + if ( m_pCurDoc[i] ) + continue; + + if ( m_dChildren.GetLength()==m_iThresh ) + { + bDone = m_bDone = true; + break; + } + + // replace i-th bit with the last one + m_uMask &= ~( 1UL<> m_uMaskEnd ) & 1 ) << i; // set i-th bit to end bit + m_uMaskEnd--; + + uTouched &= ~(1UL<> (m_dChildren.GetLength()-1) ) & 1UL ) << i; + + m_dChildren.RemoveFast ( i ); + m_pCurDoc.RemoveFast ( i ); + m_pCurHit.RemoveFast ( i ); + i--; + } + } + + return ReturnDocsChunk ( iDoc, pMaxID ); +} + +const ExtHit_t * ExtQuorum_c::GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t uMaxID ) +{ + // warmup + ARRAY_FOREACH ( i, m_pCurHit ) + if ( !m_pCurHit[i] || m_pCurHit[i]->m_uDocid==DOCID_MAX ) + m_pCurHit[i] = m_dChildren[i]->GetHitsChunk ( pDocs, uMaxID ); + + // main loop + int iHit = 0; + while ( iHitm_uDocid!=DOCID_MAX ); + m_uMatchedDocid = Min ( m_uMatchedDocid, m_pCurHit[i]->m_uDocid ); + } + if ( m_uMatchedDocid==DOCID_MAX ) + break; + } + + // emit that id while possible + // OPTIMIZE: full linear scan for min pos and emission, eww + int iMinChild = -1; + DWORD uMinPos = UINT_MAX; + ARRAY_FOREACH ( i, m_pCurHit ) + if ( m_pCurHit[i] && m_pCurHit[i]->m_uDocid==m_uMatchedDocid ) + if ( HITMAN::GetLCS ( m_pCurHit[i]->m_uHitpos ) < uMinPos ) + { + uMinPos = HITMAN::GetLCS ( m_pCurHit[i]->m_uHitpos ); // !COMMIT bench/fix, is LCS right here? + iMinChild = i; + } + + if ( iMinChild<0 ) + { + m_uMatchedDocid = 0; + continue; + } + + m_dHits[iHit++] = *m_pCurHit[iMinChild]; + m_pCurHit[iMinChild]++; + + if ( m_pCurHit[iMinChild]->m_uDocid==DOCID_MAX ) + m_pCurHit[iMinChild] = m_dChildren[iMinChild]->GetHitsChunk ( pDocs, uMaxID ); + } + + assert ( iHit>=0 && iHit & dChildren, const ISphQwordSetup & tSetup ) + : m_dChildren ( dChildren ) + , m_bDone ( false ) + , m_uHitsOverFor ( 0 ) +{ + int iChildren = dChildren.GetLength(); + assert ( iChildren>=2 ); + + m_pDocs.Resize ( iChildren ); + m_pHits.Resize ( iChildren ); + m_pDocsChunk.Resize ( iChildren ); + m_dMaxID.Resize ( iChildren ); + m_dMyHits[0].m_uDocid = DOCID_MAX; + + if ( dChildren.GetLength()>0 ) + m_iAtomPos = dChildren[0]->m_iAtomPos; + + ARRAY_FOREACH ( i, dChildren ) + { + assert ( m_dChildren[i] ); + m_pDocs[i] = NULL; + m_pHits[i] = NULL; + } + + AllocDocinfo ( tSetup ); +} + +void ExtOrder_c::Reset ( const ISphQwordSetup & tSetup ) +{ + m_bDone = false; + m_uHitsOverFor = 0; + m_dMyHits[0].m_uDocid = DOCID_MAX; + + ARRAY_FOREACH ( i, m_dChildren ) + { + assert ( m_dChildren[i] ); + m_dChildren[i]->Reset ( tSetup ); + m_pDocs[i] = NULL; + m_pHits[i] = NULL; + } +} + +ExtOrder_c::~ExtOrder_c () +{ + ARRAY_FOREACH ( i, m_dChildren ) + SafeDelete ( m_dChildren[i] ); +} + + +int ExtOrder_c::GetNextHit ( SphDocID_t uDocid ) +{ + // OPTIMIZE! implement PQ instead of full-scan + DWORD uMinPos = UINT_MAX; + int iChild = -1; + ARRAY_FOREACH ( i, m_dChildren ) + { + // is this child over? + if ( !m_pHits[i] ) + continue; + + // skip until proper hit + while ( m_pHits[i]->m_uDocid < uDocid ) + m_pHits[i]++; + + // hit-chunk over? request next one, and rescan + if ( m_pHits[i]->m_uDocid==DOCID_MAX ) + { + m_pHits[i] = m_dChildren[i]->GetHitsChunk ( m_pDocsChunk[i], m_dMaxID[i] ); + i--; + continue; + } + + // is this our man at all? + if ( m_pHits[i]->m_uDocid==uDocid ) + { + // is he the best we can get? + if ( HITMAN::GetLCS ( m_pHits[i]->m_uHitpos ) < uMinPos ) + { + uMinPos = HITMAN::GetLCS ( m_pHits[i]->m_uHitpos ); + iChild = i; + } + } + } + return iChild; +} + + +int ExtOrder_c::GetMatchingHits ( SphDocID_t uDocid, ExtHit_t * pHitbuf, int iLimit ) +{ + // my trackers + CSphVector dAccLongest; + CSphVector dAccRecent; + int iPosLongest = 0; // needed to handle cases such as "a b c" << a + int iPosRecent = 0; + int iField = -1; + + dAccLongest.Reserve ( m_dChildren.GetLength() ); + dAccRecent.Reserve ( m_dChildren.GetLength() ); + + // while there's enough space in the buffer + int iMyHit = 0; + while ( iMyHit+m_dChildren.GetLength()m_uDocid==uDocid ); + + // most recent subseq must never be longer + assert ( dAccRecent.GetLength()<=dAccLongest.GetLength() ); + + // handle that hit! + int iHitField = HITMAN::GetField ( pHit->m_uHitpos ); + int iHitPos = HITMAN::GetPos ( pHit->m_uHitpos ); + + if ( iHitField!=iField ) + { + // new field; reset both trackers + dAccLongest.Resize ( 0 ); + dAccRecent.Resize ( 0 ); + + // initial seeding, if needed + if ( iChild==0 ) + { + dAccLongest.Add ( *pHit ); + iPosLongest = iHitPos + pHit->m_uSpanlen; + iField = iHitField; + } + + } else if ( iChild==dAccLongest.GetLength() && iHitPos>=iPosLongest ) + { + // it fits longest tracker + dAccLongest.Add ( *pHit ); + iPosLongest = iHitPos + pHit->m_uSpanlen; + + // fully matched subsequence + if ( dAccLongest.GetLength()==m_dChildren.GetLength() ) + { + // flush longest tracker into buffer, and keep it terminated + ARRAY_FOREACH ( i, dAccLongest ) + pHitbuf[iMyHit++] = dAccLongest[i]; + + // reset both trackers + dAccLongest.Resize ( 0 ); + dAccRecent.Resize ( 0 ); + iPosRecent = iPosLongest; + } + + } else if ( iChild==0 ) + { + // it restarts most-recent tracker + dAccRecent.Resize ( 0 ); + dAccRecent.Add ( *pHit ); + iPosRecent = iHitPos + pHit->m_uSpanlen; + if ( !dAccLongest.GetLength() ) + { + dAccLongest.Add ( *pHit ); + iPosLongest = iHitPos + pHit->m_uSpanlen; + } + } else if ( iChild==dAccRecent.GetLength() && iHitPos>=iPosRecent ) + { + // it fits most-recent tracker + dAccRecent.Add ( *pHit ); + iPosRecent = iHitPos + pHit->m_uSpanlen; + + // maybe most-recent just became longest too? + if ( dAccRecent.GetLength()==dAccLongest.GetLength() ) + { + dAccLongest.SwapData ( dAccRecent ); + dAccRecent.Resize ( 0 ); + iPosLongest = iPosRecent; + } + } + + // advance hit stream + m_pHits[iChild]++; + } + + assert ( iMyHit>=0 && iMyHitGetDocsChunk ( &m_dMaxID[i] ); + if ( !m_pDocs[i] ) + { + m_bDone = true; + return NULL; + } + } + + // match, while there's enough space in buffers + CSphRowitem * pDocinfo = m_pDocinfo; + int iDoc = 0; + int iMyHit = 0; + while ( iDocm_uDocid; + assert ( uDocid!=DOCID_MAX ); + + for ( int i=1; im_uDocid < uDocid ) + m_pDocs[i]++; + + // block end marker? pull next block and keep scanning + if ( m_pDocs[i]->m_uDocid==DOCID_MAX ) + { + m_pDocs[i] = m_pDocsChunk[i] = m_dChildren[i]->GetDocsChunk ( &m_dMaxID[i] ); + if ( !m_pDocs[i] ) + { + m_bDone = true; + return ReturnDocsChunk ( iDoc, pMaxID ); + } + continue; + } + + // too big id? its out next candidate + if ( m_pDocs[i]->m_uDocid > uDocid ) + { + uDocid = m_pDocs[i]->m_uDocid; + i = 0; + continue; + } + + assert ( m_pDocs[i]->m_uDocid==uDocid ); + i++; + } + + #ifndef NDEBUG + assert ( uDocid!=DOCID_MAX ); + ARRAY_FOREACH ( i, m_dChildren ) + { + assert ( m_pDocs[i] ); + assert ( m_pDocs[i]->m_uDocid==uDocid ); + } + #endif + + // prefetch hits + ARRAY_FOREACH ( i, m_dChildren ) + { + if ( !m_pHits[i] ) + m_pHits[i] = m_dChildren[i]->GetHitsChunk ( m_pDocsChunk[i], m_dMaxID[i] ); + + // every document comes with at least one hit + // and we did not yet process current candidate's hits + // so we MUST have hits at this point no matter what + assert ( m_pHits[i] ); + } + + // match and save hits + int iGotHits = GetMatchingHits ( uDocid, m_dMyHits+iMyHit, MAX_HITS-1-iMyHit ); + if ( iGotHits ) + { + CopyExtDoc ( m_dDocs[iDoc++], *m_pDocs[0], &pDocinfo, m_iStride ); + iMyHit += iGotHits; + } + + // advance doc stream + m_pDocs[0]++; + if ( m_pDocs[0]->m_uDocid==DOCID_MAX ) + { + m_pDocs[0] = m_pDocsChunk[0] = m_dChildren[0]->GetDocsChunk ( &m_dMaxID[0] ); + if ( !m_pDocs[0] ) + { + m_bDone = true; + break; + } + } + } + + return ReturnDocsChunk ( iDoc, pMaxID ); +} + + +const ExtHit_t * ExtOrder_c::GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t ) +{ + if ( pDocs->m_uDocid==m_uHitsOverFor ) + return NULL; + + // copy accumulated hits while we can + SphDocID_t uFirstMatch = pDocs->m_uDocid; + + const ExtHit_t * pMyHits = m_dMyHits; + int iHit = 0; + + for ( ;; ) + { + while ( pDocs->m_uDocid!=pMyHits->m_uDocid ) + { + while ( pDocs->m_uDocid < pMyHits->m_uDocid ) pDocs++; + if ( pDocs->m_uDocid==DOCID_MAX ) break; + + while ( pMyHits->m_uDocid < pDocs->m_uDocid ) pMyHits++; + if ( pMyHits->m_uDocid==DOCID_MAX ) break; + } + if ( pDocs->m_uDocid==DOCID_MAX || pMyHits->m_uDocid==DOCID_MAX ) + break; + + assert ( pDocs->m_uDocid==pMyHits->m_uDocid ); + while ( pDocs->m_uDocid==pMyHits->m_uDocid ) + m_dHits[iHit++] = *pMyHits++; + assert ( iHitm_uDocid==DOCID_MAX ) + { + // ...all of them! setup the next run to check for trailing hits + m_dMyHits[0].m_uDocid = DOCID_MAX; + } else + { + // ...but not all of them! we ran out of docs earlier; hence, trailing hits are of no interest + m_uHitsOverFor = uFirstMatch; + } + } else + { + // we did not copy any hits; check for trailing ones as the last resort + if ( pDocs->m_uDocid!=DOCID_MAX ) + { + iHit = GetMatchingHits ( pDocs->m_uDocid, m_dHits, MAX_HITS-1 ); + } + if ( !iHit ) + { + // actually, not *only* in this case, also in partial buffer case + // but for simplicity, lets just run one extra GetHitsChunk() iteration + m_uHitsOverFor = uFirstMatch; + } + } + + // all done + assert ( iHitGetQwords ( hQwords ); +} + +void ExtOrder_c::SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) +{ + ARRAY_FOREACH ( i, m_dChildren ) + m_dChildren[i]->SetQwordsIDF ( hQwords ); +} + +////////////////////////////////////////////////////////////////////////// + +ExtUnit_c::ExtUnit_c ( ExtNode_i * pFirst, ExtNode_i * pSecond, const CSphSmallBitvec& uFields, const ISphQwordSetup & tSetup, const char * sUnit ) +{ + m_pArg1 = pFirst; + m_pArg2 = pSecond; + + XQKeyword_t tDot; + tDot.m_sWord = sUnit; + m_pDot = new ExtTerm_c ( CreateQueryWord ( tDot, tSetup ), uFields, tSetup, true ); + + m_uHitsOverFor = 0; + m_uTailDocid = 0; + m_uTailSentenceEnd = 0; + + m_pDocs1 = NULL; + m_pDocs2 = NULL; + m_pDotDocs = NULL; + m_pDoc1 = NULL; + m_pDoc2 = NULL; + m_pDotDoc = NULL; + m_pHit1 = NULL; + m_pHit2 = NULL; + m_pDotHit = NULL; + m_dMyHits[0].m_uDocid = DOCID_MAX; +} + + +ExtUnit_c::~ExtUnit_c () +{ + SafeDelete ( m_pArg1 ); + SafeDelete ( m_pArg2 ); +} + + +void ExtUnit_c::Reset ( const ISphQwordSetup & tSetup ) +{ + m_pArg1->Reset ( tSetup ); + m_pArg2->Reset ( tSetup ); + m_pDot->Reset ( tSetup ); + m_dMyHits[0].m_uDocid = DOCID_MAX; +} + + +void ExtUnit_c::GetQwords ( ExtQwordsHash_t & hQwords ) +{ + m_pArg1->GetQwords ( hQwords ); + m_pArg2->GetQwords ( hQwords ); +} + + +void ExtUnit_c::SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) +{ + m_pArg1->SetQwordsIDF ( hQwords ); + m_pArg2->SetQwordsIDF ( hQwords ); +} + + +/// skips hits until their docids are less than the given limit +static inline void SkipHitsLtDocid ( const ExtHit_t * (*ppHits), SphDocID_t uMatch, ExtNode_i * pNode, const ExtDoc_t * pDocs ) +{ + for ( ;; ) + { + const ExtHit_t * pHit = *ppHits; + if ( !pHit || pHit->m_uDocid==DOCID_MAX ) + { + pHit = *ppHits = pNode->GetHitsChunk ( pDocs, DOCID_MAX ); // OPTIMIZE? use that max? + if ( !pHit ) + return; + } + + while ( pHit->m_uDocid < uMatch ) + pHit++; + + *ppHits = pHit; + if ( pHit->m_uDocid!=DOCID_MAX ) + return; + } +} + + +/// skips hits within current document while their position is less or equal than the given limit +/// returns true if a matching hit (with big enough position, and in current document) was found +/// returns false otherwise +static inline bool SkipHitsLtePos ( const ExtHit_t * (*ppHits), Hitpos_t uPos, ExtNode_i * pNode, const ExtDoc_t * pDocs ) +{ + SphDocID_t uDocid = (*ppHits)->m_uDocid; + for ( ;; ) + { + const ExtHit_t * pHit = *ppHits; + if ( !pHit || pHit->m_uDocid==DOCID_MAX ) + { + pHit = *ppHits = pNode->GetHitsChunk ( pDocs, DOCID_MAX ); // OPTIMIZE? use that max? + if ( !pHit ) + return false; + } + + while ( pHit->m_uDocid==uDocid && pHit->m_uHitpos<=uPos ) + pHit++; + + *ppHits = pHit; + if ( pHit->m_uDocid!=DOCID_MAX ) + return ( pHit->m_uDocid==uDocid ); + } +} + + +int ExtUnit_c::FilterHits ( int iMyHit, DWORD uSentenceEnd, SphDocID_t uDocid, int * pDoc ) +{ + while ( iMyHitm_uDocid==uDocid && m_pHit1->m_uHitposm_uDocid==uDocid && m_pHit2->m_uHitposm_uDocid==uDocid && m_pHit2->m_uDocid==uDocid ) + continue; // no more in-sentence hits, but perhaps more sentences in this document + else + break; // document is over + } + + // register document as matching + if ( pDoc ) + { + ExtDoc_t & tDoc = m_dDocs [ (*pDoc)++ ]; + tDoc.m_uDocid = m_pDoc1->m_uDocid; + tDoc.m_dFields = m_pDoc1->m_dFields | m_pDoc2->m_dFields; + tDoc.m_uHitlistOffset = -1; + tDoc.m_fTFIDF = m_pDoc1->m_fTFIDF + m_pDoc2->m_fTFIDF; + tDoc.m_pDocinfo = NULL; // no inline support, sorry + pDoc = NULL; // just once + } + + if ( bValid1 && ( !bValid2 || m_pHit1->m_uHitpos < m_pHit2->m_uHitpos ) ) + { + m_dMyHits[iMyHit++] = *m_pHit1++; + if ( m_pHit1->m_uDocid==DOCID_MAX ) + m_pHit1 = m_pArg1->GetHitsChunk ( m_pDocs1, 0 ); + + } else + { + m_dMyHits[iMyHit++] = *m_pHit2++; + if ( m_pHit2->m_uDocid==DOCID_MAX ) + m_pHit2 = m_pArg2->GetHitsChunk ( m_pDocs2, 0 ); + } + + } else + { + // no sentence matched yet + // let's check the next hit pair + assert ( m_pHit1->m_uDocid==uDocid ); + assert ( m_pHit2->m_uDocid==uDocid ); + assert ( m_pDotHit->m_uDocid==uDocid ); + + // our current hit pair locations + DWORD uMin = Min ( m_pHit1->m_uHitpos, m_pHit2->m_uHitpos ); + DWORD uMax = Max ( m_pHit1->m_uHitpos, m_pHit2->m_uHitpos ); + + // skip all dots beyond the min location + if ( !SkipHitsLtePos ( &m_pDotHit, uMin, m_pDot, m_pDotDocs ) ) + { + // we have a match! + // moreover, no more dots past min location in current document + // copy hits until next document + uSentenceEnd = UINT_MAX; + continue; + } + + // does the first post-pair-start dot separate our hit pair? + if ( m_pDotHit->m_uHitpos < uMax ) + { + // yes, got an "A dot B" case + // rewind candidate hits past this dot, break if current document is over + if ( !SkipHitsLtePos ( &m_pHit1, m_pDotHit->m_uHitpos, m_pArg1, m_pDocs1 ) ) + break; + if ( !SkipHitsLtePos ( &m_pHit2, m_pDotHit->m_uHitpos, m_pArg2, m_pDocs2 ) ) + break; + continue; + + } else + { + // we have a match! + // copy hits until next dot + if ( !SkipHitsLtePos ( &m_pDotHit, m_pDotHit->m_uHitpos, m_pDot, m_pDotDocs ) ) + uSentenceEnd = UINT_MAX; // correction, no next dot, so make it "next document" + else + uSentenceEnd = m_pDotHit->m_uHitpos; + assert ( uSentenceEnd ); + } + } + } + + m_uTailSentenceEnd = uSentenceEnd; // just in case tail hits loop will happen + return iMyHit; +} + +void ExtUnit_c::SkipTailHits () +{ + m_uTailDocid = 0; + m_pDoc1++; + m_pDoc2++; +} + + +const ExtDoc_t * ExtUnit_c::GetDocsChunk ( SphDocID_t * pMaxID ) +{ + // SENTENCE operator is essentially AND on steroids + // that also takes relative dot positions into account + // + // when document matches both args but not the dot, it degenerates into AND + // we immediately lookup and copy matching document hits anyway, though + // this is suboptimal (because these hits might never be required at all) + // but this is expected to be rare case, so let's keep code simple + // + // when document matches both args and the dot, we need to filter the hits + // only those left/right pairs that are not (!) separated by a dot should match + + int iDoc = 0; + int iMyHit = 0; + + if ( m_uTailDocid ) + SkipTailHits(); + + while ( iMyHitm_uDocid==DOCID_MAX ) + { + m_pDoc1 = m_pDocs1 = m_pArg1->GetDocsChunk ( NULL ); + if ( !m_pDoc1 ) + break; // node is over + } + + if ( !m_pDoc2 || m_pDoc2->m_uDocid==DOCID_MAX ) + { + m_pDoc2 = m_pDocs2 = m_pArg2->GetDocsChunk ( NULL ); + if ( !m_pDoc2 ) + break; // node is over + } + + // find next candidate match + while ( m_pDoc1->m_uDocid!=m_pDoc2->m_uDocid && m_pDoc1->m_uDocid!=DOCID_MAX && m_pDoc2->m_uDocid!=DOCID_MAX ) + { + while ( m_pDoc1->m_uDocid < m_pDoc2->m_uDocid && m_pDoc2->m_uDocid!=DOCID_MAX ) + m_pDoc1++; + while ( m_pDoc1->m_uDocid > m_pDoc2->m_uDocid && m_pDoc1->m_uDocid!=DOCID_MAX ) + m_pDoc2++; + } + + // got our candidate that matches AND? + SphDocID_t uDocid = m_pDoc1->m_uDocid; + if ( m_pDoc1->m_uDocid==DOCID_MAX || m_pDoc2->m_uDocid==DOCID_MAX ) + continue; + + // yes, now fetch more dots docs, if needed + // note how NULL is accepted here, "A and B but no dots" case is valid! + if ( !m_pDotDoc || m_pDotDoc->m_uDocid==DOCID_MAX ) + m_pDotDoc = m_pDotDocs = m_pDot->GetDocsChunk ( NULL ); + + // skip preceding docs + while ( m_pDotDoc && m_pDotDoc->m_uDocid < uDocid ) + { + while ( m_pDotDoc->m_uDocid < uDocid ) + m_pDotDoc++; + + if ( m_pDotDoc->m_uDocid==DOCID_MAX ) + m_pDotDoc = m_pDotDocs = m_pDot->GetDocsChunk ( NULL ); + } + + // we will need document hits on both routes below + SkipHitsLtDocid ( &m_pHit1, uDocid, m_pArg1, m_pDocs1 ); + SkipHitsLtDocid ( &m_pHit2, uDocid, m_pArg2, m_pDocs2 ); + assert ( m_pHit1->m_uDocid==uDocid ); + assert ( m_pHit2->m_uDocid==uDocid ); + + DWORD uSentenceEnd = 0; + if ( !m_pDotDoc || m_pDotDoc->m_uDocid!=uDocid ) + { + // no dots in current document? + // just copy all hits until next document + uSentenceEnd = UINT_MAX; + + } else + { + // got both hits and dots + // rewind to relevant dots hits, then do sentence boundary detection + SkipHitsLtDocid ( &m_pDotHit, uDocid, m_pDot, m_pDotDocs ); + } + + // do those hits + iMyHit = FilterHits ( iMyHit, uSentenceEnd, uDocid, &iDoc ); + + // out of matching hits buffer? gotta return docs chunk now, then + if ( iMyHit==MAX_HITS-1 ) + { + // mark a possibility of some trailing hits for current dot, if any + if ( ( m_pHit1 && m_pHit1->m_uDocid==uDocid ) || ( m_pHit2 && m_pHit2->m_uDocid==uDocid ) ) + { + m_uTailDocid = uDocid; // yep, do check that tail + } else + { + SkipTailHits(); // nope, both hit lists are definitely over + } + + return ReturnDocsChunk ( iDoc, iMyHit, pMaxID ); + } + + // all hits copied; do the next candidate + m_pDoc1++; + m_pDoc2++; + } + + return ReturnDocsChunk ( iDoc, iMyHit, pMaxID ); +} + + +const ExtHit_t * ExtUnit_c::GetHitsChunk ( const ExtDoc_t * pDocs, SphDocID_t ) +{ + SphDocID_t uFirstMatch = pDocs->m_uDocid; + + // current hits chunk already returned + if ( m_uHitsOverFor==uFirstMatch ) + { + // and there are no trailing hits? bail + if ( !m_uTailDocid ) + return NULL; + + // and there might be trailing hits for the last document? try and loop them + int iMyHit = FilterHits ( 0, m_uTailSentenceEnd, m_uTailDocid, NULL ); + if ( !iMyHit ) + { + // no trailing hits were there actually + m_uTailDocid = 0; + m_pDoc1++; + m_pDoc2++; + return NULL; + } + + // ok, we got some trailing hits! + // check whether we might have even more + if (!( iMyHit==MAX_HITS-1 && m_pHit1 && m_pHit1->m_uDocid==m_uTailDocid && m_pHit2 && m_pHit2->m_uDocid==m_uTailDocid )) + { + // nope, both hit lists are definitely over now + m_uTailDocid = 0; + m_pDoc1++; + m_pDoc2++; + } + + // return those trailing hits + assert ( iMyHitm_uDocid!=pDocs->m_uDocid ) + { + while ( pDocs->m_uDocid < pMyHit->m_uDocid && pDocs->m_uDocid!=DOCID_MAX ) + pDocs++; + if ( pDocs->m_uDocid==DOCID_MAX ) + break; + while ( pMyHit->m_uDocid < pDocs->m_uDocid ) + pMyHit++; + } + + // out of hits + if ( pMyHit->m_uDocid==DOCID_MAX || pDocs->m_uDocid==DOCID_MAX ) + { + // there still might be trailing hits + // if so, they will be handled on next entry + m_uHitsOverFor = uFirstMatch; + if ( pDocs->m_uDocid==DOCID_MAX && m_uTailDocid ) + SkipTailHits(); + + break; + } + + // copy + while ( pMyHit->m_uDocid==pDocs->m_uDocid ) + m_dHits[iHit++] = *pMyHit++; + + if ( pMyHit->m_uDocid==DOCID_MAX ) + { + m_uHitsOverFor = uFirstMatch; + break; + } + } + + assert ( iHit>=0 && iHitDebugDump(0); +#endif + + m_pDoclist = NULL; + m_pHitlist = NULL; + m_uMaxID = 0; + m_uPayloadMask = 0; + m_iQwords = 0; + m_pIndex = tSetup.m_pIndex; + m_pCtx = tSetup.m_pCtx; + + m_dZones = tXQ.m_dZones; + m_dZoneStart.Resize ( m_dZones.GetLength() ); + m_dZoneEnd.Resize ( m_dZones.GetLength() ); + m_dZoneMax.Resize ( m_dZones.GetLength() ); + m_dZoneMin.Resize ( m_dZones.GetLength() ); + m_dZoneMax.Fill ( 0 ); + m_dZoneMin.Fill ( DOCID_MAX ); + + ARRAY_FOREACH ( i, m_dZones ) + { + XQKeyword_t tDot; + + tDot.m_sWord.SetSprintf ( "%c%s", MAGIC_CODE_ZONE, m_dZones[i].cstr() ); + m_dZoneStartTerm.Add ( new ExtTerm_c ( CreateQueryWord ( tDot, tSetup ), tSetup ) ); + m_dZoneStart[i] = NULL; + + tDot.m_sWord.SetSprintf ( "%c/%s", MAGIC_CODE_ZONE, m_dZones[i].cstr() ); + m_dZoneEndTerm.Add ( new ExtTerm_c ( CreateQueryWord ( tDot, tSetup ), tSetup ) ); + m_dZoneEnd[i] = NULL; + } +} + + +ExtRanker_c::~ExtRanker_c () +{ + SafeDelete ( m_pRoot ); + ARRAY_FOREACH ( i, m_dZones ) + { + SafeDelete ( m_dZoneStartTerm[i] ); + SafeDelete ( m_dZoneEndTerm[i] ); + } +} + +void ExtRanker_c::Reset ( const ISphQwordSetup & tSetup ) +{ + if ( m_pRoot ) + m_pRoot->Reset ( tSetup ); + ARRAY_FOREACH ( i, m_dZones ) + { + m_dZoneStartTerm[i]->Reset ( tSetup ); + m_dZoneEndTerm[i]->Reset ( tSetup ); + + m_dZoneStart[i] = NULL; + m_dZoneEnd[i] = NULL; + } + + m_dZoneMax.Fill ( 0 ); + m_dZoneMin.Fill ( DOCID_MAX ); + m_hZoneInfo.Reset(); +} + + +const ExtDoc_t * ExtRanker_c::GetFilteredDocs () +{ + for ( ;; ) + { + // get another chunk + m_uMaxID = 0; + const ExtDoc_t * pCand = m_pRoot->GetDocsChunk ( &m_uMaxID ); + if ( !pCand ) + return NULL; + + // create matches, and filter them + int iDocs = 0; + while ( pCand->m_uDocid!=DOCID_MAX ) + { + m_tTestMatch.m_iDocID = pCand->m_uDocid; + if ( pCand->m_pDocinfo ) + memcpy ( m_tTestMatch.m_pDynamic, pCand->m_pDocinfo, m_iInlineRowitems*sizeof(CSphRowitem) ); + + if ( m_pIndex->EarlyReject ( m_pCtx, m_tTestMatch ) ) + { + pCand++; + continue; + } + + m_dMyDocs[iDocs] = *pCand; + m_tTestMatch.m_iWeight = (int)( (pCand->m_fTFIDF+0.5f)*SPH_BM25_SCALE ); // FIXME! bench bNeedBM25 + Swap ( m_tTestMatch, m_dMyMatches[iDocs] ); + iDocs++; + pCand++; + } + + // clean up zone hash + if ( m_uMaxID!=DOCID_MAX ) + { + ARRAY_FOREACH ( i, m_dZoneMin ) + { + SphDocID_t uMinDocid = m_dZoneMin[i]; + if ( uMinDocid==DOCID_MAX ) + continue; + + ZoneKey_t tZoneStart; + tZoneStart.m_iZone = i; + tZoneStart.m_uDocid = uMinDocid; + Verify ( m_hZoneInfo.IterateStart ( tZoneStart ) ); + uMinDocid = DOCID_MAX; + do + { + ZoneKey_t tKey = m_hZoneInfo.IterateGetKey(); + if ( tKey.m_iZone!=i || tKey.m_uDocid>m_uMaxID ) + { + uMinDocid = ( tKey.m_iZone==i ) ? tKey.m_uDocid : DOCID_MAX; + break; + } + + m_hZoneInfo.Delete ( tKey ); + } while ( m_hZoneInfo.IterateNext() ); + + m_dZoneMin[i] = uMinDocid; + } + } + + if ( iDocs ) + { + m_dMyDocs[iDocs].m_uDocid = DOCID_MAX; + return m_dMyDocs; + } + } +} + + +void ExtRanker_c::SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) +{ + m_iQwords = hQwords.GetLength (); + + m_iMaxQuerypos = 0; + hQwords.IterateStart(); + while ( hQwords.IterateNext() ) + m_iMaxQuerypos = Max ( m_iMaxQuerypos, hQwords.IterateGet().m_iQueryPos ); + + if ( m_pRoot ) + m_pRoot->SetQwordsIDF ( hQwords ); +} + + +SphZoneHit_e ExtRanker_c::IsInZone ( int iZone, const ExtHit_t * pHit ) +{ + // quick route, we have current docid cached + ZoneKey_t tKey; // OPTIMIZE? allow 2-component hash keys maybe? + tKey.m_uDocid = pHit->m_uDocid; + tKey.m_iZone = iZone; + + ZoneInfo_t * pZone = m_hZoneInfo ( tKey ); + if ( pZone ) + { + // remove end markers that might mess up ordering + Hitpos_t uPos = HITMAN::GetLCS ( pHit->m_uHitpos ); + int iSpan = FindSpan ( pZone->m_dStarts, uPos ); + return ( iSpan>=0 && uPos<=pZone->m_dEnds[iSpan] ) ? SPH_ZONE_FOUND : SPH_ZONE_NO_SPAN; + } + + // is there any zone info for this document at all? + if ( pHit->m_uDocid<=m_dZoneMax[iZone] ) + return SPH_ZONE_NO_DOCUMENT; + + // long route, read in zone info for all (!) the documents until next requested + // that's because we might be queried out of order + + // current chunk + const ExtDoc_t * pStart = m_dZoneStart[iZone]; + const ExtDoc_t * pEnd = m_dZoneEnd[iZone]; + + // now keep caching spans until we see current id + while ( pHit->m_uDocid > m_dZoneMax[iZone] ) + { + // get more docs if needed + if ( ( !pStart && m_dZoneMax[iZone]!=DOCID_MAX ) || pStart->m_uDocid==DOCID_MAX ) + { + pStart = m_dZoneStartTerm[iZone]->GetDocsChunk ( NULL ); + if ( !pStart ) + { + m_dZoneMax[iZone] = DOCID_MAX; + return SPH_ZONE_NO_DOCUMENT; + } + } + + if ( ( !pEnd && m_dZoneMax[iZone]!=DOCID_MAX ) || pEnd->m_uDocid==DOCID_MAX ) + { + pEnd = m_dZoneEndTerm[iZone]->GetDocsChunk ( NULL ); + if ( !pEnd ) + { + m_dZoneMax[iZone] = DOCID_MAX; + return SPH_ZONE_NO_DOCUMENT; + } + } + + assert ( pStart && pEnd ); + + // skip zone starts past already cached stuff + while ( pStart->m_uDocid<=m_dZoneMax[iZone] ) + pStart++; + if ( pStart->m_uDocid==DOCID_MAX ) + continue; + + // skip zone ends until a match with start + while ( pEnd->m_uDocidm_uDocid ) + pEnd++; + if ( pEnd->m_uDocid==DOCID_MAX ) + continue; + + // handle mismatching start/end ids + // (this must never happen normally, but who knows what data we're fed) + assert ( pStart->m_uDocid!=DOCID_MAX ); + assert ( pEnd->m_uDocid!=DOCID_MAX ); + assert ( pStart->m_uDocid<=pEnd->m_uDocid ); + + if ( pStart->m_uDocid!=pEnd->m_uDocid ) + { + while ( pStart->m_uDocid < pEnd->m_uDocid ) + pStart++; + if ( pStart->m_uDocid==DOCID_MAX ) + continue; + } + + // first matching uncached docid found! + assert ( pStart->m_uDocid==pEnd->m_uDocid ); + assert ( pStart->m_uDocid > m_dZoneMax[iZone] ); + + // but maybe we don't need docid this big just yet? + if ( pStart->m_uDocid > pHit->m_uDocid ) + { + // store current in-chunk positions + m_dZoneStart[iZone] = pStart; + m_dZoneEnd[iZone] = pEnd; + + // no zone info for all those precending documents (including requested one) + m_dZoneMax[iZone] = pStart->m_uDocid-1; + return SPH_ZONE_NO_DOCUMENT; + } + + // cache all matching docs from current chunks below requested docid + // (there might be more matching docs, but we are lazy and won't cache them upfront) + ExtDoc_t dCache [ ExtNode_i::MAX_DOCS ]; + int iCache = 0; + + while ( pStart->m_uDocid<=pHit->m_uDocid ) + { + // match + if ( pStart->m_uDocid==pEnd->m_uDocid ) + { + dCache[iCache++] = *pStart; + pStart++; + pEnd++; + continue; + } + + // mismatch! + // this must not really happen, starts/ends must be in sync + // but let's be graceful anyway, and just skip to next match + if ( pStart->m_uDocid==DOCID_MAX || pEnd->m_uDocid==DOCID_MAX ) + break; + + while ( pStart->m_uDocid < pEnd->m_uDocid ) + pStart++; + if ( pStart->m_uDocid==DOCID_MAX ) + break; + + while ( pEnd->m_uDocid < pStart->m_uDocid ) + pEnd++; + if ( pEnd->m_uDocid==DOCID_MAX ) + break; + } + + // should have found at least one id to cache + assert ( iCache ); + assert ( iCache < ExtNode_i::MAX_DOCS ); + dCache[iCache].m_uDocid = DOCID_MAX; + + // do caching + const ExtHit_t * pStartHits = m_dZoneStartTerm[iZone]->GetHitsChunk ( dCache, DOCID_MAX ); + const ExtHit_t * pEndHits = m_dZoneEndTerm[iZone]->GetHitsChunk ( dCache, DOCID_MAX ); + + // loop documents one by one + while ( pStartHits && pEndHits ) + { + // load all hits for current document + SphDocID_t uCur = pStartHits->m_uDocid; + + tKey.m_uDocid = uCur; + m_hZoneInfo.Add ( ZoneInfo_t(), tKey ); + pZone = m_hZoneInfo ( tKey ); // OPTIMIZE? return pointer from Add()? + + // load all the start hits for it + while ( pStartHits ) + { + while ( pStartHits->m_uDocid==uCur ) + { + pZone->m_dStarts.Add ( pStartHits->m_uHitpos ); + pStartHits++; + } + if ( pStartHits->m_uDocid!=DOCID_MAX ) + break; + pStartHits = m_dZoneStartTerm[iZone]->GetHitsChunk ( dCache, DOCID_MAX ); + } + + // load all the end hits for it + assert ( pEndHits->m_uDocid==uCur ); + while ( pEndHits ) + { + while ( pEndHits->m_uDocid==uCur ) + { + pZone->m_dEnds.Add ( pEndHits->m_uHitpos ); + pEndHits++; + } + if ( pEndHits->m_uDocid!=DOCID_MAX ) + break; + pEndHits = m_dZoneEndTerm[iZone]->GetHitsChunk ( dCache, DOCID_MAX ); + } + + // data sanity checks + assert ( pZone->m_dStarts.GetLength()==pZone->m_dEnds.GetLength() ); + + // update cache status + m_dZoneMax[iZone] = uCur; + m_dZoneMin[iZone] = Min ( m_dZoneMin[iZone], uCur ); + } + } + + // store current in-chunk positions + m_dZoneStart[iZone] = pStart; + m_dZoneEnd[iZone] = pEnd; + + // cached a bunch of spans, try our check again + tKey.m_uDocid = pHit->m_uDocid; + pZone = m_hZoneInfo ( tKey ); + if ( pZone ) + { + // remove end markers that might mess up ordering + Hitpos_t uPos = HITMAN::GetLCS ( pHit->m_uHitpos ); + int iSpan = FindSpan ( pZone->m_dStarts, uPos ); + return ( iSpan>=0 && uPos<=pZone->m_dEnds[iSpan] ) ? SPH_ZONE_FOUND : SPH_ZONE_NO_SPAN; + } + + return SPH_ZONE_NO_DOCUMENT; +} + +////////////////////////////////////////////////////////////////////////// + +template < bool USE_BM25 > +int ExtRanker_WeightSum_c::GetMatches () +{ + if ( !m_pRoot ) + return 0; + + const ExtDoc_t * pDoc = m_pDoclist; + int iMatches = 0; + + while ( iMatchesm_uDocid==DOCID_MAX ) pDoc = GetFilteredDocs (); + if ( !pDoc ) { m_pDoclist = NULL; return iMatches; } + + DWORD uRank = 0; + for ( int i=0; im_dFields.Test(i) ) + uRank += m_pWeights[i]; + + Swap ( m_dMatches[iMatches], m_dMyMatches[pDoc-m_dMyDocs] ); // OPTIMIZE? can avoid this swap and simply return m_dMyMatches (though in lesser chunks) + m_dMatches[iMatches].m_iWeight = USE_BM25 + ? ( m_dMatches[iMatches].m_iWeight + uRank*SPH_BM25_SCALE ) + : uRank; + + iMatches++; + pDoc++; + } + + m_pDoclist = pDoc; + return iMatches; +} + +////////////////////////////////////////////////////////////////////////// + +int ExtRanker_None_c::GetMatches () +{ + if ( !m_pRoot ) + return 0; + + const ExtDoc_t * pDoc = m_pDoclist; + int iMatches = 0; + + while ( iMatchesm_uDocid==DOCID_MAX ) pDoc = GetFilteredDocs (); + if ( !pDoc ) { m_pDoclist = NULL; return iMatches; } + + Swap ( m_dMatches[iMatches], m_dMyMatches[pDoc-m_dMyDocs] ); // OPTIMIZE? can avoid this swap and simply return m_dMyMatches (though in lesser chunks) + m_dMatches[iMatches].m_iWeight = 1; + iMatches++; + pDoc++; + } + + m_pDoclist = pDoc; + return iMatches; +} + +////////////////////////////////////////////////////////////////////////// + +template < typename STATE > +int ExtRanker_T::GetMatches () +{ + if ( !m_pRoot ) + return 0; + + int iMatches = 0; + const ExtHit_t * pHlist = m_pHitlist; + const ExtDoc_t * pDocs = m_pDoclist; + + // warmup if necessary + if ( !pHlist ) + { + if ( !pDocs ) pDocs = GetFilteredDocs (); + if ( !pDocs ) return iMatches; + + pHlist = m_pRoot->GetHitsChunk ( pDocs, m_uMaxID ); + if ( !pHlist ) return iMatches; + } + + // main matching loop + const ExtDoc_t * pDoc = pDocs; + for ( SphDocID_t uCurDocid=0; iMatchesm_uDocid==uCurDocid ) + m_tState.Update ( pHlist++ ); + + // if hits block is over, get next block, but do *not* flush current doc + if ( pHlist->m_uDocid==DOCID_MAX ) + { + assert ( pDocs ); + pHlist = m_pRoot->GetHitsChunk ( pDocs, m_uMaxID ); + if ( pHlist ) + continue; + } + + // otherwise (new match or no next hits block), flush current doc + if ( uCurDocid ) + { + assert ( uCurDocid==pDoc->m_uDocid ); + Swap ( m_dMatches[iMatches], m_dMyMatches[pDoc-m_dMyDocs] ); + m_dMatches[iMatches].m_iWeight = m_tState.Finalize ( m_dMatches[iMatches] ); + iMatches++; + } + + // boundary checks + if ( !pHlist ) + { + // there are no more hits for current docs block; do we have a next one? + assert ( pDocs ); + pDoc = pDocs = GetFilteredDocs (); + + // we don't, so bail out + if ( !pDocs ) + break; + + // we do, get some hits + pHlist = m_pRoot->GetHitsChunk ( pDocs, m_uMaxID ); + assert ( pHlist ); // fresh docs block, must have hits + } + + // skip until next good doc/hit pair + assert ( pDoc->m_uDocid<=pHlist->m_uDocid ); + while ( pDoc->m_uDocidm_uDocid ) pDoc++; + assert ( pDoc->m_uDocid==pHlist->m_uDocid ); + + uCurDocid = pHlist->m_uDocid; + } + + m_pDoclist = pDocs; + m_pHitlist = pHlist; + return iMatches; +} + +////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS +#pragma warning(disable:4127) // conditional expr is const for MSVC +#endif + +template < bool USE_BM25, bool HANDLE_DUPES > +struct RankerState_Proximity_fn +{ + BYTE m_uLCS[SPH_MAX_FIELDS]; + BYTE m_uCurLCS; + int m_iExpDelta; + int m_iFields; + const int * m_pWeights; + + DWORD m_uLcsTailPos; + DWORD m_uLcsTailQposMask; + DWORD m_uCurQposMask; + DWORD m_uCurPos; + + bool Init ( int iFields, const int * pWeights, ExtRanker_c *, CSphString & ) + { + memset ( m_uLCS, 0, sizeof(m_uLCS) ); + m_uCurLCS = 0; + m_iExpDelta = -INT_MAX; + m_iFields = iFields; + m_pWeights = pWeights; + + m_uLcsTailPos = 0; + m_uLcsTailQposMask = 0; + m_uCurQposMask = 0; + m_uCurPos = 0; + + return true; + } + + void Update ( const ExtHit_t * pHlist ) + { + if ( !HANDLE_DUPES ) + { + // all query keywords are unique + // simpler path (just do the delta) + int iDelta = HITMAN::GetLCS ( pHlist->m_uHitpos ) - pHlist->m_uQuerypos; + if ( iDelta==m_iExpDelta ) + m_uCurLCS = m_uCurLCS + BYTE(pHlist->m_uWeight); + else + m_uCurLCS = BYTE(pHlist->m_uWeight); + + DWORD uField = HITMAN::GetField ( pHlist->m_uHitpos ); + if ( m_uCurLCS>m_uLCS[uField] ) + m_uLCS[uField] = m_uCurLCS; + + m_iExpDelta = iDelta + pHlist->m_uSpanlen - 1; // !COMMIT why spanlen?? + } else + { + // keywords are duplicated in the query + // so there might be multiple qpos entries sharing the same hitpos + DWORD uPos = HITMAN::GetLCS ( pHlist->m_uHitpos ); + DWORD uField = HITMAN::GetField ( pHlist->m_uHitpos ); + + if ( uPos!=m_uCurPos ) + { + // next new and shiny hitpos in line + // FIXME!? what do we do with longer spans? keep looking? reset? + if ( m_uCurLCS<2 ) + { + m_uLcsTailPos = m_uCurPos; + m_uLcsTailQposMask = m_uCurQposMask; + m_uCurLCS = 1; // FIXME!? can this ever be different? ("a b" c) maybe.. + } + m_uCurQposMask = 0; + m_uCurPos = uPos; + if ( m_uLCS[uField] < pHlist->m_uWeight ) + m_uLCS[uField] = BYTE(pHlist->m_uWeight); + } + + // add that qpos to current qpos mask (for the current hitpos) + m_uCurQposMask |= ( 1UL << pHlist->m_uQuerypos ); + + // and check if that results in a better lcs match now + int iDelta = m_uCurPos - m_uLcsTailPos; + if ( ( m_uCurQposMask >> iDelta ) & m_uLcsTailQposMask ) + { + // cool, it matched! + m_uLcsTailQposMask = ( 1UL << pHlist->m_uQuerypos ); // our lcs span now ends with a specific qpos + m_uLcsTailPos = m_uCurPos; // and in a specific position + m_uCurLCS = BYTE(m_uCurLCS + pHlist->m_uWeight); // and it's longer + m_uCurQposMask = 0; // and we should avoid matching subsequent hits on the same hitpos + + // update per-field vector + if ( m_uCurLCS>m_uLCS[uField] ) + m_uLCS[uField] = m_uCurLCS; + } + } + } + + DWORD Finalize ( const CSphMatch & tMatch ) + { + m_uCurLCS = 0; + m_iExpDelta = -1; + + if ( HANDLE_DUPES ) + { + m_uLcsTailPos = 0; + m_uLcsTailQposMask = 0; + m_uCurQposMask = 0; + m_uCurPos = 0; + } + + DWORD uRank = 0; + for ( int i=0; im_iMaxQuerypos; + return true; + } + + void Update ( const ExtHit_t * pHlist ) + { + // upd LCS + DWORD uField = HITMAN::GetField ( pHlist->m_uHitpos ); + int iDelta = HITMAN::GetLCS ( pHlist->m_uHitpos ) - pHlist->m_uQuerypos; + if ( iDelta==m_iExpDelta && HITMAN::GetLCS ( pHlist->m_uHitpos )>=m_uMinExpPos ) + { + m_uCurLCS = m_uCurLCS + BYTE(pHlist->m_uWeight); + if ( HITMAN::IsEnd ( pHlist->m_uHitpos ) && (int)pHlist->m_uQuerypos==m_iMaxQuerypos && HITMAN::GetPos ( pHlist->m_uHitpos )==m_iMaxQuerypos ) + m_uExactHit |= ( 1UL << HITMAN::GetField ( pHlist->m_uHitpos ) ); + } else + { + m_uCurLCS = BYTE(pHlist->m_uWeight); + if ( HITMAN::GetPos ( pHlist->m_uHitpos )==1 ) + { + m_uHeadHit |= ( 1UL << HITMAN::GetField ( pHlist->m_uHitpos ) ); + if ( HITMAN::IsEnd ( pHlist->m_uHitpos ) && m_iMaxQuerypos==1 ) + m_uExactHit |= ( 1UL << HITMAN::GetField ( pHlist->m_uHitpos ) ); + } + } + + if ( m_uCurLCS>m_uLCS[uField] ) + m_uLCS[uField] = m_uCurLCS; + + m_iExpDelta = iDelta + pHlist->m_uSpanlen - 1; + m_uMinExpPos = HITMAN::GetLCS ( pHlist->m_uHitpos ) + 1; + } + + DWORD Finalize ( const CSphMatch & tMatch ) + { + m_uCurLCS = 0; + m_iExpDelta = -1; + + DWORD uRank = 0; + for ( int i=0; i>i)&1) + ((m_uExactHit>>i)&1) )*m_pWeights[i]; + m_uLCS[i] = 0; + } + m_uHeadHit = 0; + m_uExactHit = 0; + + return tMatch.m_iWeight + uRank*SPH_BM25_SCALE; + } +}; + + +template < bool USE_BM25 > +struct RankerState_ProximityPayload_fn : public RankerState_Proximity_fn +{ + DWORD m_uPayloadRank; + DWORD m_uPayloadMask; + + bool Init ( int iFields, const int * pWeights, ExtRanker_c * pRanker, CSphString & sError ) + { + RankerState_Proximity_fn::Init ( iFields, pWeights, pRanker, sError ); + m_uPayloadRank = 0; + m_uPayloadMask = pRanker->m_uPayloadMask; + return true; + } + + void Update ( const ExtHit_t * pHlist ) + { + DWORD uField = HITMAN::GetField ( pHlist->m_uHitpos ); + if ( ( 1<m_uPayloadRank += HITMAN::GetPos ( pHlist->m_uHitpos ) * this->m_pWeights[uField]; + else + RankerState_Proximity_fn::Update ( pHlist ); + } + + DWORD Finalize ( const CSphMatch & tMatch ) + { + // as usual, redundant 'this' is just because gcc is stupid + this->m_uCurLCS = 0; + this->m_iExpDelta = -1; + + DWORD uRank = m_uPayloadRank; + for ( int i=0; im_iFields; i++ ) + { + // no special care for payload fields as their LCS will be 0 anyway + uRank += this->m_uLCS[i]*this->m_pWeights[i]; + this->m_uLCS[i] = 0; + } + + m_uPayloadRank = 0; + return USE_BM25 ? tMatch.m_iWeight + uRank*SPH_BM25_SCALE : uRank; + } +}; + +////////////////////////////////////////////////////////////////////////// + +struct RankerState_MatchAny_fn : public RankerState_Proximity_fn +{ + int m_iPhraseK; + BYTE m_uMatchMask[SPH_MAX_FIELDS]; + + bool Init ( int iFields, const int * pWeights, ExtRanker_c * pRanker, CSphString & sError ) + { + RankerState_Proximity_fn::Init ( iFields, pWeights, pRanker, sError ); + m_iPhraseK = 0; + for ( int i=0; im_iQwords; + memset ( m_uMatchMask, 0, sizeof(m_uMatchMask) ); + return true; + } + + void Update ( const ExtHit_t * pHlist ) + { + RankerState_Proximity_fn::Update ( pHlist ); + m_uMatchMask [ HITMAN::GetField ( pHlist->m_uHitpos ) ] |= ( 1<<(pHlist->m_uQuerypos-1) ); + } + + DWORD Finalize ( const CSphMatch & ) + { + m_uCurLCS = 0; + m_iExpDelta = -1; + + DWORD uRank = 0; + for ( int i=0; im_uHitpos ) ]; + } + + DWORD Finalize ( const CSphMatch & ) + { + DWORD uRes = m_uRank; + m_uRank = 0; + return uRes; + } +}; + +////////////////////////////////////////////////////////////////////////// + +struct RankerState_Fieldmask_fn +{ + DWORD m_uRank; + + bool Init ( int, const int *, ExtRanker_c *, CSphString & ) + { + m_uRank = 0; + return true; + } + + void Update ( const ExtHit_t * pHlist ) + { + m_uRank |= 1UL << HITMAN::GetField ( pHlist->m_uHitpos ); + } + + DWORD Finalize ( const CSphMatch & ) + { + DWORD uRes = m_uRank; + m_uRank = 0; + return uRes; + } +}; + +////////////////////////////////////////////////////////////////////////// +// EXPRESSION RANKER +////////////////////////////////////////////////////////////////////////// + +/// ranker state that computes weight dynamically based on user supplied expression (formula) +struct RankerState_Expr_fn +{ +public: + // per-field and per-document stuff + BYTE m_uLCS[SPH_MAX_FIELDS]; + BYTE m_uMatchMask[SPH_MAX_FIELDS]; + BYTE m_uCurLCS; + int m_iExpDelta; + int m_iFields; + const int * m_pWeights; + DWORD m_uDocBM25; + DWORD m_uMatchedFields; + int m_iCurrentField; + DWORD m_uHitCount[SPH_MAX_FIELDS]; + DWORD m_uWordCount[SPH_MAX_FIELDS]; + CSphVector m_dIDF; + float m_dTFIDF[SPH_MAX_FIELDS]; + int m_iMinHitPos[SPH_MAX_FIELDS]; + int m_iMinBestSpanPos[SPH_MAX_FIELDS]; + int m_iMaxQuerypos; + DWORD m_uExactHit; + CSphBitvec m_tKeywordMask; + DWORD m_uDocWordCount; + + const char * m_sExpr; + ISphExpr * m_pExpr; + ESphAttr m_eExprType; + const CSphSchema * m_pSchema; + + // per-query stuff + int m_iMaxLCS; + int m_iQueryWordCount; + +public: + RankerState_Expr_fn (); + ~RankerState_Expr_fn (); + + bool Init ( int iFields, const int * pWeights, ExtRanker_c * pRanker, CSphString & sError ); + void Update ( const ExtHit_t * pHlist ); + DWORD Finalize ( const CSphMatch & tMatch ); +}; + + +/// extra expression ranker node types +enum ExprRankerNode_e +{ + // field level factors + XRANK_LCS, + XRANK_USER_WEIGHT, + XRANK_HIT_COUNT, + XRANK_WORD_COUNT, + XRANK_TF_IDF, + XRANK_MIN_HIT_POS, + XRANK_MIN_BEST_SPAN_POS, + XRANK_EXACT_HIT, + + // document level factors + XRANK_BM25, + XRANK_MAX_LCS, + XRANK_FIELD_MASK, + XRANK_QUERY_WORD_COUNT, + XRANK_DOC_WORD_COUNT, + + // field aggregation functions + XRANK_SUM +}; + + +/// generic field factor +template < typename T > +struct Expr_FieldFactor_c : public ISphExpr +{ + const int * m_pIndex; + const T * m_pData; + + Expr_FieldFactor_c ( const int * pIndex, const T * pData ) + : m_pIndex ( pIndex ) + , m_pData ( pData ) + {} + + float Eval ( const CSphMatch & ) const + { + return (float) m_pData [ *m_pIndex ]; + } + + int IntEval ( const CSphMatch & ) const + { + return (int) m_pData [ *m_pIndex ]; + } +}; + + +/// bitmask field factor specialization +template<> +struct Expr_FieldFactor_c : public ISphExpr +{ + const int * m_pIndex; + const DWORD * m_pData; + + Expr_FieldFactor_c ( const int * pIndex, const DWORD * pData ) + : m_pIndex ( pIndex ) + , m_pData ( pData ) + {} + + float Eval ( const CSphMatch & ) const + { + return (float)( (*m_pData) >> (*m_pIndex) ); + } + + int IntEval ( const CSphMatch & ) const + { + return (int)( (*m_pData) >> (*m_pIndex) ); + } +}; + + + +/// generic per-document int factor +struct Expr_IntPtr_c : public ISphExpr +{ + DWORD * m_pVal; + + explicit Expr_IntPtr_c ( DWORD * pVal ) + : m_pVal ( pVal ) + {} + + float Eval ( const CSphMatch & ) const + { + return (float)*m_pVal; + } + + int IntEval ( const CSphMatch & ) const + { + return (int)*m_pVal; + } +}; + + +/// function that sums sub-expressions over matched fields +struct Expr_Sum_c : public ISphExpr +{ + RankerState_Expr_fn * m_pState; + ISphExpr * m_pArg; + + Expr_Sum_c ( RankerState_Expr_fn * pState, ISphExpr * pArg ) + : m_pState ( pState ) + , m_pArg ( pArg ) + {} + + float Eval ( const CSphMatch & tMatch ) const + { + m_pState->m_iCurrentField = 0; + float fRes = 0; + DWORD uMask = m_pState->m_uMatchedFields; + while ( uMask ) + { + if ( uMask & 1 ) + fRes += m_pArg->Eval ( tMatch ); + uMask >>= 1; + m_pState->m_iCurrentField++; + } + return fRes; + } + + int IntEval ( const CSphMatch & tMatch ) const + { + m_pState->m_iCurrentField = 0; + int iRes = 0; + DWORD uMask = m_pState->m_uMatchedFields; + while ( uMask ) + { + if ( uMask & 1 ) + iRes += m_pArg->IntEval ( tMatch ); + uMask >>= 1; + m_pState->m_iCurrentField++; + } + return iRes; + } +}; + + +// FIXME! cut/pasted from sphinxexpr; remove dupe +struct Expr_GetIntConst_c : public ISphExpr +{ + int m_iValue; + explicit Expr_GetIntConst_c ( int iValue ) : m_iValue ( iValue ) {} + virtual float Eval ( const CSphMatch & ) const { return (float) m_iValue; } // no assert() here cause generic float Eval() needs to work even on int-evaluator tree + virtual int IntEval ( const CSphMatch & ) const { return m_iValue; } + virtual int64_t Int64Eval ( const CSphMatch & ) const { return m_iValue; } +}; + + +/// hook that exposes field-level factors, document-level factors, and matched field SUM() function to generic expressions +class ExprRankerHook_c : public ISphExprHook +{ +public: + RankerState_Expr_fn * m_pState; + const char * m_sCheckError; + bool m_bCheckInFieldAggr; + +public: + explicit ExprRankerHook_c ( RankerState_Expr_fn * pState ) + : m_pState ( pState ) + , m_sCheckError ( NULL ) + , m_bCheckInFieldAggr ( false ) + {} + + int IsKnownIdent ( const char * sIdent ) + { + // OPTIMIZE? hash this some nice long winter night? + if ( !strcasecmp ( sIdent, "lcs" ) ) + return XRANK_LCS; + if ( !strcasecmp ( sIdent, "user_weight" ) ) + return XRANK_USER_WEIGHT; + if ( !strcasecmp ( sIdent, "hit_count" ) ) + return XRANK_HIT_COUNT; + if ( !strcasecmp ( sIdent, "word_count" ) ) + return XRANK_WORD_COUNT; + if ( !strcasecmp ( sIdent, "tf_idf" ) ) + return XRANK_TF_IDF; + if ( !strcasecmp ( sIdent, "min_hit_pos" ) ) + return XRANK_MIN_HIT_POS; + if ( !strcasecmp ( sIdent, "min_best_span_pos" ) ) + return XRANK_MIN_BEST_SPAN_POS; + if ( !strcasecmp ( sIdent, "exact_hit" ) ) + return XRANK_EXACT_HIT; + + if ( !strcasecmp ( sIdent, "bm25" ) ) + return XRANK_BM25; + if ( !strcasecmp ( sIdent, "max_lcs" ) ) + return XRANK_MAX_LCS; + if ( !strcasecmp ( sIdent, "field_mask" ) ) + return XRANK_FIELD_MASK; + if ( !strcasecmp ( sIdent, "query_word_count" ) ) + return XRANK_QUERY_WORD_COUNT; + if ( !strcasecmp ( sIdent, "doc_word_count" ) ) + return XRANK_DOC_WORD_COUNT; + return -1; + } + + int IsKnownFunc ( const char * sFunc ) + { + if ( !strcasecmp ( sFunc, "sum" ) ) + return XRANK_SUM; + return -1; + } + + ISphExpr * CreateNode ( int iID, ISphExpr * pLeft ) + { + int * pCF = &m_pState->m_iCurrentField; // just a shortcut + switch ( iID ) + { + case XRANK_LCS: return new Expr_FieldFactor_c ( pCF, m_pState->m_uLCS ); + case XRANK_USER_WEIGHT: return new Expr_FieldFactor_c ( pCF, m_pState->m_pWeights ); + case XRANK_HIT_COUNT: return new Expr_FieldFactor_c ( pCF, m_pState->m_uHitCount ); + case XRANK_WORD_COUNT: return new Expr_FieldFactor_c ( pCF, m_pState->m_uWordCount ); + case XRANK_TF_IDF: return new Expr_FieldFactor_c ( pCF, m_pState->m_dTFIDF ); + case XRANK_MIN_HIT_POS: return new Expr_FieldFactor_c ( pCF, m_pState->m_iMinHitPos ); + case XRANK_MIN_BEST_SPAN_POS: return new Expr_FieldFactor_c ( pCF, m_pState->m_iMinBestSpanPos ); + case XRANK_EXACT_HIT: return new Expr_FieldFactor_c ( pCF, &m_pState->m_uExactHit ); + + case XRANK_BM25: return new Expr_IntPtr_c ( &m_pState->m_uDocBM25 ); + case XRANK_MAX_LCS: return new Expr_GetIntConst_c ( m_pState->m_iMaxLCS ); + case XRANK_FIELD_MASK: return new Expr_IntPtr_c ( &m_pState->m_uMatchedFields ); + case XRANK_QUERY_WORD_COUNT: return new Expr_GetIntConst_c ( m_pState->m_iQueryWordCount ); + case XRANK_DOC_WORD_COUNT: return new Expr_IntPtr_c ( &m_pState->m_uDocWordCount ); + + case XRANK_SUM: return new Expr_Sum_c ( m_pState, pLeft ); + default: return NULL; + } + } + + ESphAttr GetIdentType ( int iID ) + { + switch ( iID ) + { + case XRANK_LCS: + case XRANK_USER_WEIGHT: + case XRANK_HIT_COUNT: + case XRANK_WORD_COUNT: + case XRANK_MIN_HIT_POS: + case XRANK_MIN_BEST_SPAN_POS: + case XRANK_EXACT_HIT: + case XRANK_BM25: + case XRANK_MAX_LCS: + case XRANK_FIELD_MASK: + case XRANK_QUERY_WORD_COUNT: + case XRANK_DOC_WORD_COUNT: + return SPH_ATTR_INTEGER; + case XRANK_TF_IDF: + return SPH_ATTR_FLOAT; + default: + assert ( 0 ); + return SPH_ATTR_INTEGER; + } + } + + ESphAttr GetFuncType ( int iID, ESphAttr eArgType ) + { + switch ( iID ) + { + case XRANK_SUM: return eArgType; + default: return SPH_ATTR_INTEGER; + } + } + + int GetExpectedArgc ( int iID ) + { + switch ( iID ) + { + case XRANK_SUM: return 1; + default: return -1; + } + } + + const char * GetFuncName ( int iID ) + { + switch ( iID ) + { + case XRANK_SUM: return "SUM"; + default: return "???"; + } + } + + void CheckEnter ( int iID ) + { + if ( !m_sCheckError ) + switch ( iID ) + { + case XRANK_LCS: + case XRANK_USER_WEIGHT: + case XRANK_HIT_COUNT: + case XRANK_WORD_COUNT: + case XRANK_TF_IDF: + case XRANK_MIN_HIT_POS: + case XRANK_MIN_BEST_SPAN_POS: + case XRANK_EXACT_HIT: + if ( !m_bCheckInFieldAggr ) + m_sCheckError = "field factors must only occur withing field aggregates in ranking expression"; + break; + + case XRANK_SUM: + if ( m_bCheckInFieldAggr ) + m_sCheckError = "field aggregates can not be nested in ranking expression"; + else + m_bCheckInFieldAggr = true; + break; + + default: + assert ( iID>=0 ); + return; + } + } + + void CheckExit ( int iID ) + { + if ( !m_sCheckError && iID==XRANK_SUM ) + { + assert ( m_bCheckInFieldAggr ); + m_bCheckInFieldAggr = false; + } + } +}; + + +/// ctor +RankerState_Expr_fn::RankerState_Expr_fn () + : m_pWeights ( NULL ) + , m_sExpr ( NULL ) + , m_pExpr ( NULL ) + , m_iMaxLCS ( 0 ) + , m_iQueryWordCount ( 0 ) +{} + + +/// dtor +RankerState_Expr_fn::~RankerState_Expr_fn () +{ + SafeRelease ( m_pExpr ); +} + + +/// initialize ranker state +bool RankerState_Expr_fn::Init ( int iFields, const int * pWeights, ExtRanker_c * pRanker, CSphString & sError ) +{ + // cleanup factors + memset ( m_uLCS, 0, sizeof(m_uLCS) ); + memset ( m_uMatchMask, 0, sizeof(m_uMatchMask) ); + m_uCurLCS = 0; + m_iExpDelta = -INT_MAX; + m_iFields = iFields; + m_pWeights = pWeights; + m_uDocBM25 = 0; + m_uMatchedFields = 0; + m_iCurrentField = 0; + memset ( m_uHitCount, 0, sizeof(m_uHitCount) ); + memset ( m_uWordCount, 0, sizeof(m_uWordCount) ); + memset ( m_dTFIDF, 0, sizeof(m_dTFIDF) ); + memset ( m_iMinHitPos, 0, sizeof(m_iMinHitPos) ); + memset ( m_iMinBestSpanPos, 0, sizeof(m_iMinBestSpanPos) ); + m_iMaxQuerypos = pRanker->m_iMaxQuerypos; + m_uExactHit = 0; + m_uDocWordCount = 0; + + // compute query level constants + // max_lcs, aka m_iMaxLCS (for matchany ranker emulation) gets computed here + // query_word_count, aka m_iQueryWordCount is set elsewhere (in SetQwordsIDF()) + m_iMaxLCS = 0; + for ( int i=0; im_iQwords; + + // parse expression + bool bUsesWeight; + ExprRankerHook_c tHook ( this ); + m_pExpr = sphExprParse ( m_sExpr, *m_pSchema, &m_eExprType, &bUsesWeight, sError, NULL, &tHook ); + if ( !m_pExpr ) + return false; + if ( m_eExprType!=SPH_ATTR_INTEGER && m_eExprType!=SPH_ATTR_FLOAT ) + { + sError = "ranking expression must evaluate to integer or float"; + return false; + } + if ( bUsesWeight ) + { + sError = "ranking expression must not refer to WEIGHT()"; + return false; + } + if ( tHook.m_sCheckError ) + { + sError = tHook.m_sCheckError; + return false; + } + + // all seems ok + return true; +} + + +/// process next hit, update factors +void RankerState_Expr_fn::Update ( const ExtHit_t * pHlist ) +{ + const DWORD uField = HITMAN::GetField ( pHlist->m_uHitpos ); + + // update LCS + int iDelta = HITMAN::GetLCS ( pHlist->m_uHitpos ) - pHlist->m_uQuerypos; + if ( iDelta==m_iExpDelta ) + { + m_uCurLCS = m_uCurLCS + BYTE(pHlist->m_uWeight); + if ( HITMAN::IsEnd ( pHlist->m_uHitpos ) && (int)pHlist->m_uQuerypos==m_iMaxQuerypos && HITMAN::GetPos ( pHlist->m_uHitpos )==m_iMaxQuerypos ) + m_uExactHit |= ( 1UL << uField ); + } else + { + m_uCurLCS = BYTE(pHlist->m_uWeight); + if ( HITMAN::GetPos ( pHlist->m_uHitpos )==1 && HITMAN::IsEnd ( pHlist->m_uHitpos ) && m_iMaxQuerypos==1 ) + m_uExactHit |= ( 1UL << uField ); + } + if ( m_uCurLCS>m_uLCS[uField] ) + { + m_uLCS[uField] = m_uCurLCS; + m_iMinBestSpanPos[uField] = HITMAN::GetPos ( pHlist->m_uHitpos ) - m_uCurLCS + 1; + } + m_iExpDelta = iDelta + pHlist->m_uSpanlen - 1; + + // update other stuff + m_uMatchMask[uField] |= ( 1<<(pHlist->m_uQuerypos-1) ); + m_uMatchedFields |= ( 1UL<m_uQuerypos ) ) + { + m_uHitCount[uField]++; + m_uWordCount[uField] |= ( 1<m_uQuerypos ); + m_uDocWordCount |= ( 1<m_uQuerypos ); + } + + m_dTFIDF[uField] += m_dIDF [ pHlist->m_uQuerypos ]; + if ( !m_iMinHitPos[uField] ) + m_iMinHitPos[uField] = HITMAN::GetPos ( pHlist->m_uHitpos ); +} + + +/// finish document processing, compute weight from factors +DWORD RankerState_Expr_fn::Finalize ( const CSphMatch & tMatch ) +{ + // finishing touches + m_uDocBM25 = tMatch.m_iWeight; + for ( int i=0; iIntEval ( tMatch ) + : (DWORD)m_pExpr->Eval ( tMatch ); + + // cleanup + // OPTIMIZE? quick full wipe? (using dwords/sse/whatever) + m_uCurLCS = 0; + m_iExpDelta = -1; + for ( int i=0; i +{ +public: + ExtRanker_Expr_c ( const XQQuery_t & tXQ, const ISphQwordSetup & tSetup, const char * sExpr, const CSphSchema & tSchema ) + : ExtRanker_T ( tXQ, tSetup ) + { + // tricky bit, we stash the pointer to expr here, but it will be parsed + // somewhat later during InitState() call, when IDFs etc are computed + m_tState.m_sExpr = sExpr; + m_tState.m_pSchema = &tSchema; + } + + void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) + { + // this sets m_iMaxQuerypos, setups terms etc + ExtRanker_T::SetQwordsIDF ( hQwords ); + + // setup our own custom stuff, begin with IDFs + m_tState.m_dIDF.Resize ( m_iMaxQuerypos+1 ); + ARRAY_FOREACH ( i, m_tState.m_dIDF ) + m_tState.m_dIDF[i] = 0.0f; + + m_tState.m_iQueryWordCount = 0; + m_tState.m_tKeywordMask.Init ( m_iMaxQuerypos+1 ); + + hQwords.IterateStart(); + while ( hQwords.IterateNext() ) + { + const int iPos = hQwords.IterateGet().m_iQueryPos; + m_tState.m_dIDF [ iPos ] = hQwords.IterateGet().m_fIDF; + m_tState.m_tKeywordMask.BitSet ( iPos ); + + // tricky bit + // for query_word_count, we only want to count keywords that are not (!) excluded by the query + // that is, in (aa NOT bb) case, we want a value of 1, not 2 + if ( !hQwords.IterateGet().m_bExcluded ) + m_tState.m_iQueryWordCount++; + } + } +}; + +////////////////////////////////////////////////////////////////////////// +// RANKER FACTORY +////////////////////////////////////////////////////////////////////////// + +static void CheckQueryWord ( const char * szWord, CSphQueryResult * pResult, const CSphIndexSettings & tSettings, bool bStar ) +{ + if ( ( !tSettings.m_iMinPrefixLen && !tSettings.m_iMinInfixLen ) || !bStar || !szWord ) + return; + + int iLen = strlen ( szWord ); + bool bHeadStar = szWord[0]=='*'; + bool bTailStar = szWord[iLen-1]=='*'; + int iLenWOStars = iLen - ( bHeadStar ? 1 : 0 ) - ( bTailStar ? 1 : 0 ); + if ( bHeadStar || bTailStar ) + { + if ( tSettings.m_iMinInfixLen > 0 && iLenWOStars < tSettings.m_iMinInfixLen ) + pResult->m_sWarning.SetSprintf ( "Query word length is less than min infix length. word: '%s' ", szWord ); + else + if ( tSettings.m_iMinPrefixLen > 0 && iLenWOStars < tSettings.m_iMinPrefixLen ) + pResult->m_sWarning.SetSprintf ( "Query word length is less than min prefix length. word: '%s' ", szWord ); + } +} + + +static void CheckExtendedQuery ( const XQNode_t * pNode, CSphQueryResult * pResult, const CSphIndexSettings & tSettings, bool bStar ) +{ + ARRAY_FOREACH ( i, pNode->m_dWords ) + CheckQueryWord ( pNode->m_dWords[i].m_sWord.cstr(), pResult, tSettings, bStar ); + + ARRAY_FOREACH ( i, pNode->m_dChildren ) + CheckExtendedQuery ( pNode->m_dChildren[i], pResult, tSettings, bStar ); +} + + +struct ExtQwordOrderbyQueryPos_t +{ + bool IsLess ( const ExtQword_t * pA, const ExtQword_t * pB ) const + { + return pA->m_iQueryPos < pB->m_iQueryPos; + } +}; + + +static bool HasQwordDupes ( XQNode_t * pNode, SmallStringHash_T & hQwords ) +{ + ARRAY_FOREACH ( i, pNode->m_dChildren ) + if ( HasQwordDupes ( pNode->m_dChildren[i], hQwords ) ) + return true; + ARRAY_FOREACH ( i, pNode->m_dWords ) + if ( !hQwords.Add ( 1, pNode->m_dWords[i].m_sWord ) ) + return true; + return false; +} + + +static bool HasQwordDupes ( XQNode_t * pNode ) +{ + SmallStringHash_T hQwords; + return HasQwordDupes ( pNode, hQwords ); +} + + +ISphRanker * sphCreateRanker ( const XQQuery_t & tXQ, const CSphQuery * pQuery, CSphQueryResult * pResult, const ISphQwordSetup & tTermSetup, const CSphQueryContext & tCtx ) +{ + // shortcut + const CSphIndex * pIndex = tTermSetup.m_pIndex; + + // check the keywords + CheckExtendedQuery ( tXQ.m_pRoot, pResult, pIndex->GetSettings(), pIndex->m_bEnableStar ); + + // fill payload mask + DWORD uPayloadMask = 0; + ARRAY_FOREACH ( i, pIndex->GetMatchSchema().m_dFields ) + uPayloadMask |= pIndex->GetMatchSchema().m_dFields[i].m_bPayload << i; + + bool bSingleWord = tXQ.m_pRoot->m_dChildren.GetLength()==0 && tXQ.m_pRoot->m_dWords.GetLength()==1; + bool bGotDupes = HasQwordDupes ( tXQ.m_pRoot ); + + // setup eval-tree + ExtRanker_c * pRanker = NULL; + switch ( pQuery->m_eRanker ) + { + case SPH_RANK_PROXIMITY_BM25: + if ( uPayloadMask ) + pRanker = new ExtRanker_T < RankerState_ProximityPayload_fn > ( tXQ, tTermSetup ); + else if ( bSingleWord ) + pRanker = new ExtRanker_WeightSum_c ( tXQ, tTermSetup ); + else if ( bGotDupes ) + pRanker = new ExtRanker_T < RankerState_Proximity_fn > ( tXQ, tTermSetup ); + else + pRanker = new ExtRanker_T < RankerState_Proximity_fn > ( tXQ, tTermSetup ); + break; + case SPH_RANK_BM25: pRanker = new ExtRanker_WeightSum_c ( tXQ, tTermSetup ); break; + case SPH_RANK_NONE: pRanker = new ExtRanker_None_c ( tXQ, tTermSetup ); break; + case SPH_RANK_WORDCOUNT: pRanker = new ExtRanker_T < RankerState_Wordcount_fn > ( tXQ, tTermSetup ); break; + case SPH_RANK_PROXIMITY: + if ( bSingleWord ) + pRanker = new ExtRanker_WeightSum_c<> ( tXQ, tTermSetup ); + else if ( bGotDupes ) + pRanker = new ExtRanker_T < RankerState_Proximity_fn > ( tXQ, tTermSetup ); + else + pRanker = new ExtRanker_T < RankerState_Proximity_fn > ( tXQ, tTermSetup ); + break; + case SPH_RANK_MATCHANY: pRanker = new ExtRanker_T < RankerState_MatchAny_fn > ( tXQ, tTermSetup ); break; + case SPH_RANK_FIELDMASK: pRanker = new ExtRanker_T < RankerState_Fieldmask_fn > ( tXQ, tTermSetup ); break; + case SPH_RANK_SPH04: pRanker = new ExtRanker_T < RankerState_ProximityBM25Exact_fn > ( tXQ, tTermSetup ); break; + case SPH_RANK_EXPR: pRanker = new ExtRanker_Expr_c ( tXQ, tTermSetup, pQuery->m_sRankerExpr.cstr(), pIndex->GetMatchSchema() ); break; + default: + pResult->m_sWarning.SetSprintf ( "unknown ranking mode %d; using default", (int)pQuery->m_eRanker ); + if ( bGotDupes ) + pRanker = new ExtRanker_T < RankerState_Proximity_fn > ( tXQ, tTermSetup ); + else + pRanker = new ExtRanker_T < RankerState_Proximity_fn > ( tXQ, tTermSetup ); + break; + } + assert ( pRanker ); + pRanker->m_uPayloadMask = uPayloadMask; + + // setup IDFs + ExtQwordsHash_t hQwords; + pRanker->GetQwords ( hQwords ); + + const int iQwords = hQwords.GetLength (); + const CSphSourceStats & tSourceStats = pIndex->GetStats(); + + CSphVector dWords; + dWords.Reserve ( hQwords.GetLength() ); + + hQwords.IterateStart (); + while ( hQwords.IterateNext() ) + { + ExtQword_t & tWord = hQwords.IterateGet (); + + // build IDF + float fIDF = 0.0f; + if ( tWord.m_iDocs ) + { + const int iTotalClamped = Max ( tSourceStats.m_iTotalDocuments, tWord.m_iDocs ); + float fLogTotal = logf ( float ( 1+iTotalClamped ) ); + fIDF = logf ( float ( iTotalClamped-tWord.m_iDocs+1 ) + / float ( tWord.m_iDocs ) ) + / ( 2*iQwords*fLogTotal ); + } + tWord.m_fIDF = fIDF; + dWords.Add ( &tWord ); + } + + dWords.Sort ( ExtQwordOrderbyQueryPos_t() ); + ARRAY_FOREACH ( i, dWords ) + { + const ExtQword_t * pWord = dWords[i]; + pResult->AddStat ( pWord->m_sDictWord, pWord->m_iDocs, pWord->m_iHits, pWord->m_bExpanded ); + } + + pRanker->SetQwordsIDF ( hQwords ); + if ( !pRanker->InitState ( tCtx, pResult->m_sError ) ) + SafeDelete ( pRanker ); + return pRanker; +} + +////////////////////////////////////////////////////////////////////////// +/// HIT MARKER +////////////////////////////////////////////////////////////////////////// + +void CSphHitMarker::Mark ( CSphVector & dMarked ) +{ + const ExtHit_t * pHits = NULL; + const ExtDoc_t * pDocs = NULL; + + SphDocID_t uMaxID = 0; + pDocs = m_pRoot->GetDocsChunk ( &uMaxID ); + if ( !pDocs ) + return; + + for ( ;; ) + { + pHits = m_pRoot->GetHitsChunk ( pDocs, uMaxID ); + if ( !pHits ) + break; + + for ( ; pHits->m_uDocid!=DOCID_MAX; pHits++ ) + { + SphHitMark_t tMark; + tMark.m_uPosition = HITMAN::GetPos ( pHits->m_uHitpos ); + tMark.m_uSpan = pHits->m_uMatchlen; + + dMarked.Add ( tMark ); + } + } +} + + +CSphHitMarker::~CSphHitMarker () +{ + SafeDelete ( m_pRoot ); +} + + +CSphHitMarker * CSphHitMarker::Create ( const XQNode_t * pRoot, const ISphQwordSetup & tSetup ) +{ + ExtNode_i * pNode = ExtNode_i::Create ( pRoot, tSetup ); + if ( pNode ) + { + CSphHitMarker * pMarker = new CSphHitMarker; + pMarker->m_pRoot = pNode; + return pMarker; + } + return NULL; +} + +////////////////////////////////////////////////////////////////////////// +// INTRA-BATCH CACHING +////////////////////////////////////////////////////////////////////////// + +/// container that does intra-batch query-sub-tree caching +/// actually carries the cached data, NOT to be recreated frequently (see thin wrapper below) +class NodeCacheContainer_t +{ +private: + friend class ExtNodeCached_t; + friend class CSphQueryNodeCache; + +private: + int m_iRefCount; + bool m_StateOk; + const ISphQwordSetup * m_pSetup; + + CSphVector m_Docs; + CSphVector m_Hits; + CSphVector m_InlineAttrs; + int m_iAtomPos; // minimal position from original donor, used for shifting + + CSphQueryNodeCache * m_pNodeCache; + +public: + NodeCacheContainer_t () + : m_iRefCount ( 1 ) + , m_StateOk ( true ) + , m_pSetup ( NULL ) + , m_iAtomPos ( 0 ) + , m_pNodeCache ( NULL ) + {} + +public: + void Release() + { + if ( --m_iRefCount<=0 ) + Invalidate(); + } + + ExtNode_i * CreateCachedWrapper ( ExtNode_i* pChild, const XQNode_t * pRawChild, const ISphQwordSetup & tSetup ); + +private: + bool WarmupCache ( ExtNode_i * pChild, int iQWords ); + void Invalidate(); +}; + + +/// cached node wrapper to be injected into actual search trees +/// (special container actually carries all the data and does the work, see blow) +class ExtNodeCached_t : public ExtNode_i +{ + friend class NodeCacheContainer_t; + NodeCacheContainer_t * m_pNode; + ExtDoc_t * m_pHitDoc; ///< points to entry in m_dDocs which GetHitsChunk() currently emits hits for + SphDocID_t m_uHitsOverFor; ///< there are no more hits for matches block starting with this ID + CSphString * m_pWarning; + int64_t m_iMaxTimer; ///< work until this timestamp + int m_iHitIndex; ///< store the current position in m_Hits for GetHitsChunk() + int m_iDocIndex; ///< store the current position in m_Docs for GetDocsChunk() + ExtNode_i * m_pChild; ///< pointer to donor for the sake of AtomPos procession + int m_iQwords; ///< number of tokens in parent query + + void StepForwardToHitsFor ( SphDocID_t uDocId ); + + // creation possible ONLY via NodeCacheContainer_t + explicit ExtNodeCached_t ( NodeCacheContainer_t * pNode, ExtNode_i * pChild ) + : m_pNode ( pNode ) + , m_pHitDoc ( NULL ) + , m_uHitsOverFor ( 0 ) + , m_pWarning ( NULL ) + , m_iMaxTimer ( 0 ) + , m_iHitIndex ( 0 ) + , m_iDocIndex ( 0 ) + , m_pChild ( pChild ) + , m_iQwords ( 0 ) + { + m_iAtomPos = pChild->m_iAtomPos; + } + +public: + virtual ~ExtNodeCached_t () + { + SafeDelete ( m_pChild ); + SafeRelease ( m_pNode ); + } + + virtual void Reset ( const ISphQwordSetup & tSetup ) + { + if ( m_pChild ) + m_pChild->Reset ( tSetup ); + + m_iHitIndex = 0; + m_iDocIndex = 0; + m_uHitsOverFor = 0; + m_pHitDoc = NULL; + m_iMaxTimer = 0; + m_iMaxTimer = tSetup.m_iMaxTimer; + m_pWarning = tSetup.m_pWarning; + } + + virtual const ExtDoc_t * GetDocsChunk ( SphDocID_t * pMaxID ); + + virtual const ExtHit_t * GetHitsChunk ( const ExtDoc_t * pMatched, SphDocID_t uMaxID ); + + virtual void GetQwords ( ExtQwordsHash_t & hQwords ) + { + if ( m_pChild ) + m_pChild->GetQwords ( hQwords ); + } + + virtual void SetQwordsIDF ( const ExtQwordsHash_t & hQwords ) + { + m_iQwords = hQwords.GetLength(); + if ( m_pNode->m_pSetup ) + { + if ( m_pChild ) + m_pChild->SetQwordsIDF ( hQwords ); + + m_pNode->WarmupCache ( m_pChild, m_iQwords ); + } + } + + virtual bool GotHitless () + { + return ( m_pChild ) + ? m_pChild->GotHitless() + : false; + } +}; + +////////////////////////////////////////////////////////////////////////// + +ExtNode_i * NodeCacheContainer_t::CreateCachedWrapper ( ExtNode_i * pChild, const XQNode_t * pRawChild, const ISphQwordSetup & tSetup ) +{ + if ( !m_StateOk ) + return pChild; + + // wow! we have a virgin! + if ( !m_Docs.GetLength() ) + { + m_iRefCount = pRawChild->GetCount(); + m_pSetup = &tSetup; + } + return new ExtNodeCached_t ( this, pChild ); +} + + +bool NodeCacheContainer_t::WarmupCache ( ExtNode_i * pChild, int iQwords ) +{ + SphDocID_t pMaxID = 0; + m_iAtomPos = pChild->m_iAtomPos; + const ExtDoc_t * pChunk = pChild->GetDocsChunk ( &pMaxID ); + int iStride = 0; + assert ( m_pSetup ); + + if ( pChunk && pChunk->m_pDocinfo ) + iStride = pChild->m_iStride; + + while ( pChunk ) + { + const ExtDoc_t * pChunkHits = pChunk; + bool iHasDocs = false; + for ( ; pChunk->m_uDocid!=DOCID_MAX; pChunk++ ) + { + m_Docs.Add ( *pChunk ); + // exclude number or Qwords from FIDF + m_Docs.Last().m_fTFIDF *= iQwords; + m_pNodeCache->m_iMaxCachedDocs--; + if ( iStride>0 ) + { + // since vector will relocate the data on resize, do NOT fill new m_pDocinfo right now + int iLen = m_InlineAttrs.GetLength(); + m_InlineAttrs.Resize ( iLen+iStride ); + memcpy ( &m_InlineAttrs[iLen], pChunk->m_pDocinfo, iStride*sizeof(CSphRowitem) ); + } + iHasDocs = true; + } + + const ExtHit_t * pHits = NULL; + if ( iHasDocs ) + while ( ( pHits = pChild->GetHitsChunk ( pChunkHits, pChild->m_uMaxID ) )!=NULL ) + { + for ( ; pHits->m_uDocid!=DOCID_MAX; pHits++ ) + { + m_Hits.Add ( *pHits ); + m_pNodeCache->m_iMaxCachedHits--; + } + } + + // too many values, stop caching + if ( m_pNodeCache->m_iMaxCachedDocs<0 || m_pNodeCache->m_iMaxCachedHits<0 ) + { + Invalidate (); + pChild->Reset ( *m_pSetup ); + m_pSetup = NULL; + return false; + } + pChunk = pChild->GetDocsChunk ( &pMaxID ); + } + + if ( iStride ) + ARRAY_FOREACH ( i, m_Docs ) + m_Docs[i].m_pDocinfo = &m_InlineAttrs[i*iStride]; + + m_Docs.Add().m_uDocid = DOCID_MAX; + m_Hits.Add().m_uDocid = DOCID_MAX; + pChild->Reset ( *m_pSetup ); + m_pSetup = NULL; + return true; +} + + +void NodeCacheContainer_t::Invalidate() +{ + m_pNodeCache->m_iMaxCachedDocs += m_Docs.GetLength(); + m_pNodeCache->m_iMaxCachedHits += m_Docs.GetLength(); + m_Docs.Reset(); + m_InlineAttrs.Reset(); + m_Hits.Reset(); + m_StateOk = false; +} + +////////////////////////////////////////////////////////////////////////// + +void ExtNodeCached_t::StepForwardToHitsFor ( SphDocID_t uDocId ) +{ + assert ( m_pNode ); + assert ( m_pNode->m_StateOk ); + + CSphVector & dHits = m_pNode->m_Hits; + + int iEnd = dHits.GetLength()-1; + if ( m_iHitIndex>=iEnd ) + return; + if ( dHits[m_iHitIndex].m_uDocid==uDocId ) + return; + + // binary search for lower (most left) bound of the subset of values + int iHitIndex = m_iHitIndex; // http://blog.gamedeff.com/?p=12 + while ( iEnd-iHitIndex>1 ) + { + if ( uDocIddHits[iEnd].m_uDocid ) + { + m_iHitIndex = -1; + return; + } + int iMid = iHitIndex + (iEnd-iHitIndex)/2; + if ( dHits[iMid].m_uDocid>=uDocId ) + iEnd = iMid; + else + iHitIndex = iMid; + } + m_iHitIndex = iEnd; +} + +const ExtDoc_t * ExtNodeCached_t::GetDocsChunk ( SphDocID_t * pMaxID ) +{ + if ( !m_pNode || !m_pChild ) + return NULL; + + if ( !m_pNode->m_StateOk ) + return m_pChild->GetDocsChunk ( pMaxID ); + + if ( m_iMaxTimer>0 && sphMicroTimer()>=m_iMaxTimer ) + { + if ( m_pWarning ) + *m_pWarning = "query time exceeded max_query_time"; + return NULL; + } + + m_uMaxID = 0; + + int iDoc = Min ( m_iDocIndex+MAX_DOCS-1, m_pNode->m_Docs.GetLength()-1 ) - m_iDocIndex; + memcpy ( &m_dDocs[0], &m_pNode->m_Docs[m_iDocIndex], sizeof(ExtDoc_t)*iDoc ); + m_iDocIndex += iDoc; + + // funny trick based on the formula of FIDF calculation. + for ( int i=0; im_StateOk ) + return m_pChild->GetHitsChunk ( pMatched, uMaxID ); + + if ( !pMatched ) + return NULL; + + SphDocID_t uFirstMatch = pMatched->m_uDocid; + + // aim to the right document + ExtDoc_t * pDoc = m_pHitDoc; + m_pHitDoc = NULL; + + if ( !pDoc ) + { + // if we already emitted hits for this matches block, do not do that again + if ( uFirstMatch==m_uHitsOverFor ) + return NULL; + + // early reject whole block + if ( pMatched->m_uDocid > m_uMaxID ) return NULL; + if ( m_uMaxID && m_dDocs[0].m_uDocid > uMaxID ) return NULL; + + // find match + pDoc = m_dDocs; + do + { + while ( pDoc->m_uDocid < pMatched->m_uDocid ) pDoc++; + if ( pDoc->m_uDocid==DOCID_MAX ) + { + m_uHitsOverFor = uFirstMatch; + return NULL; // matched docs block is over for me, gimme another one + } + + while ( pMatched->m_uDocid < pDoc->m_uDocid ) pMatched++; + if ( pMatched->m_uDocid==DOCID_MAX ) + { + m_uHitsOverFor = uFirstMatch; + return NULL; // matched doc block did not yet begin for me, gimme another one + } + } while ( pDoc->m_uDocid!=pMatched->m_uDocid ); + + // setup hitlist reader + StepForwardToHitsFor ( pDoc->m_uDocid ); + } + + // hit emission + int iHit = 0; + while ( iHitm_Hits[m_iHitIndex]; + if ( tCachedHit.m_uDocid==DOCID_MAX ) + break; + if ( tCachedHit.m_uDocid!=pDoc->m_uDocid ) + { + // no more hits; get next acceptable document + pDoc++; + do + { + while ( pDoc->m_uDocid < pMatched->m_uDocid ) pDoc++; + if ( pDoc->m_uDocid==DOCID_MAX ) { pDoc = NULL; break; } // matched docs block is over for me, gimme another one + + while ( pMatched->m_uDocid < pDoc->m_uDocid ) pMatched++; + if ( pMatched->m_uDocid==DOCID_MAX ) { pDoc = NULL; break; } // matched doc block did not yet begin for me, gimme another one + } while ( pDoc->m_uDocid!=pMatched->m_uDocid ); + + if ( !pDoc ) + break; + assert ( pDoc->m_uDocid==pMatched->m_uDocid ); + + // setup hitlist reader + StepForwardToHitsFor ( pDoc->m_uDocid ); + continue; + } + m_iHitIndex++; + m_dHits[iHit] = tCachedHit; + m_dHits[iHit].m_uQuerypos = (WORD)( m_dHits[iHit].m_uQuerypos + m_iAtomPos - m_pNode->m_iAtomPos ); + iHit++; + } + + m_pHitDoc = pDoc; + if ( iHit==0 || iHit=0 && iHit0 && iMaxCachedHits>0 && iMaxCachedDocs>0 ) + { + m_pPool = new NodeCacheContainer_t [ iCells ]; + for ( int i=0; iGetOrder()>=0 ); + return m_pPool [ pRawChild->GetOrder() ].CreateCachedWrapper ( pChild, pRawChild, tSetup ); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxsearch.h b/coreseek/csft-4.1/src/sphinxsearch.h new file mode 100755 index 0000000..c50d6de --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxsearch.h @@ -0,0 +1,203 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinxsearch_ +#define _sphinxsearch_ + +#include "sphinx.h" +#include "sphinxquery.h" + +////////////////////////////////////////////////////////////////////////// +// PACKED HIT MACROS +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// + +/// term modifiers +enum TermPosFilter_e +{ + TERM_POS_FIELD_LIMIT = 1, + TERM_POS_FIELD_START, + TERM_POS_FIELD_END, + TERM_POS_FIELD_STARTEND, + TERM_POS_ZONES +}; + + +/// term, searcher view +class ISphQword +{ +public: + // setup by query parser + CSphString m_sWord; ///< my copy of word + CSphString m_sDictWord; ///< word after being processed by dict (eg. stemmed) + SphWordID_t m_iWordID; ///< word ID, from dictionary + int m_iTermPos; + int m_iAtomPos; ///< word position, from query + bool m_bExpanded; ///< added by prefix expansion + bool m_bExcluded; ///< excluded by the query (rval to operator NOT) + + // setup by QwordSetup() + int m_iDocs; ///< document count, from wordlist + int m_iHits; ///< hit count, from wordlist + bool m_bHasHitlist; ///< hitlist presence flag + + // iterator state + CSphSmallBitvec m_dFields; ///< current match fields + bool m_bAllFieldsKnown; ///< whether the all match fields is known, or only low 32. + DWORD m_uMatchHits; ///< current match hits count + SphOffset_t m_iHitlistPos; ///< current position in hitlist, from doclist + +public: + ISphQword () + : m_iWordID ( 0 ) + , m_iTermPos ( 0 ) + , m_iAtomPos ( 0 ) + , m_bExpanded ( false ) + , m_bExcluded ( false ) + , m_iDocs ( 0 ) + , m_iHits ( 0 ) + , m_bHasHitlist ( true ) + , m_bAllFieldsKnown ( false ) + , m_uMatchHits ( 0 ) + , m_iHitlistPos ( 0 ) + { + m_dFields.Unset(); + } + virtual ~ISphQword () {} + + virtual const CSphMatch & GetNextDoc ( DWORD * pInlineDocinfo ) = 0; + virtual void SeekHitlist ( SphOffset_t uOff ) = 0; + virtual Hitpos_t GetNextHit () = 0; + virtual void CollectHitMask () + { + m_bAllFieldsKnown = true; + } + + virtual void Reset () + { + m_iDocs = 0; + m_iHits = 0; + m_dFields.Unset(); + m_bAllFieldsKnown = false; + m_uMatchHits = 0; + m_iHitlistPos = 0; + } +}; + + +/// term setup, searcher view +class CSphQueryNodeCache; +class ISphZoneCheck; +class ISphQwordSetup : ISphNoncopyable +{ +public: + CSphDict * m_pDict; + const CSphIndex * m_pIndex; + ESphDocinfo m_eDocinfo; + CSphMatch m_tMin; + int m_iInlineRowitems; ///< inline rowitems count + int m_iDynamicRowitems; ///< dynamic rowitems counts (including (!) inline) + int64_t m_iMaxTimer; + CSphString * m_pWarning; + CSphQueryContext * m_pCtx; + CSphQueryNodeCache * m_pNodeCache; + mutable ISphZoneCheck * m_pZoneChecker; + + ISphQwordSetup () + : m_pDict ( NULL ) + , m_pIndex ( NULL ) + , m_eDocinfo ( SPH_DOCINFO_NONE ) + , m_iInlineRowitems ( 0 ) + , m_iDynamicRowitems ( 0 ) + , m_iMaxTimer ( 0 ) + , m_pWarning ( NULL ) + , m_pCtx ( NULL ) + , m_pNodeCache ( NULL ) + , m_pZoneChecker ( NULL ) + {} + virtual ~ISphQwordSetup () {} + + virtual ISphQword * QwordSpawn ( const XQKeyword_t & tWord ) const = 0; + virtual bool QwordSetup ( ISphQword * pQword ) const = 0; +}; + +////////////////////////////////////////////////////////////////////////// + +/// generic ranker interface +class ISphRanker +{ +public: + virtual ~ISphRanker () {} + virtual CSphMatch * GetMatchesBuffer() = 0; + virtual int GetMatches () = 0; + virtual void Reset ( const ISphQwordSetup & tSetup ) = 0; +}; + +/// factory +ISphRanker * sphCreateRanker ( const XQQuery_t & tXQ, const CSphQuery * pQuery, CSphQueryResult * pResult, const ISphQwordSetup & tTermSetup, const CSphQueryContext & tCtx ); + +////////////////////////////////////////////////////////////////////////// + +/// hit mark, used for snippets generation +struct SphHitMark_t +{ + DWORD m_uPosition; + DWORD m_uSpan; + + bool operator == ( const SphHitMark_t & rhs ) const + { + return m_uPosition==rhs.m_uPosition && m_uSpan==rhs.m_uSpan; + } +}; + +/// hit marker, used for snippets generation +class CSphHitMarker +{ +public: + class ExtNode_i * m_pRoot; + +public: + CSphHitMarker() : m_pRoot ( NULL ) {} + ~CSphHitMarker(); + + void Mark ( CSphVector & ); + static CSphHitMarker * Create ( const XQNode_t * pRoot, const ISphQwordSetup & tSetup ); +}; + +////////////////////////////////////////////////////////////////////////// + +/// intra-batch node cache +class CSphQueryNodeCache +{ + friend class NodeCacheContainer_t; + +protected: + class NodeCacheContainer_t * m_pPool; + int m_iMaxCachedDocs; + int m_iMaxCachedHits; + +public: + CSphQueryNodeCache ( int iCells, int MaxCachedDocs, int MaxCachedHits ); + ~CSphQueryNodeCache (); + + ExtNode_i * CreateProxy ( ExtNode_i * pChild, const XQNode_t * pRawChild, const ISphQwordSetup & tSetup ); +}; + +#endif // _sphinxsearch_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxsearch.o b/coreseek/csft-4.1/src/sphinxsearch.o new file mode 100644 index 0000000..91f5c2f Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxsearch.o differ diff --git a/coreseek/csft-4.1/src/sphinxselect.y b/coreseek/csft-4.1/src/sphinxselect.y new file mode 100755 index 0000000..d652b5e --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxselect.y @@ -0,0 +1,109 @@ +%{ +#if USE_WINDOWS +#pragma warning(push,1) +#pragma warning(disable:4702) // unreachable code +#endif +%} + +%lex-param { SelectParser_t * pParser } +%parse-param { SelectParser_t * pParser } +%pure-parser +%error-verbose + +%token SEL_TOKEN +%token SEL_ID +%token SEL_AS +%token SEL_AVG +%token SEL_MAX +%token SEL_MIN +%token SEL_SUM +%token SEL_COUNT +%token SEL_WEIGHT +%token SEL_DISTINCT + +%token TOK_NEG +%token TOK_LTE +%token TOK_GTE +%token TOK_EQ +%token TOK_NE + +%left TOK_AND TOK_OR +%left TOK_EQ TOK_NE +%left '<' '>' TOK_LTE TOK_GTE +%left '+' '-' +%left '*' '/' +%nonassoc TOK_NEG +%nonassoc TOK_NOT + +%% + +select_list: + select_item + | select_list ',' select_item + ; + +select_item: + '*' { pParser->AddItem ( &$1 ); } + | select_expr opt_alias + +opt_alias: + // empty + | SEL_TOKEN { pParser->AliasLastItem ( &$1 ); } + | SEL_AS SEL_TOKEN { pParser->AliasLastItem ( &$2 ); } + ; + +select_expr: + expr { pParser->AddItem ( &$1 ); } + | SEL_AVG '(' expr ')' { pParser->AddItem ( &$3, SPH_AGGR_AVG, &$1, &$4 ); } + | SEL_MAX '(' expr ')' { pParser->AddItem ( &$3, SPH_AGGR_MAX, &$1, &$4 ); } + | SEL_MIN '(' expr ')' { pParser->AddItem ( &$3, SPH_AGGR_MIN, &$1, &$4 ); } + | SEL_SUM '(' expr ')' { pParser->AddItem ( &$3, SPH_AGGR_SUM, &$1, &$4 ); } + | SEL_COUNT '(' '*' ')' { pParser->AddItem ( "count(*)", &$1, &$4 ); } + | SEL_WEIGHT '(' ')' { pParser->AddItem ( "weight()", &$1, &$3 ); } + | SEL_COUNT '(' SEL_DISTINCT SEL_TOKEN ')' + // FIXME: may be check if $4 == this->m_sGroupDistinct and warn/error, if not? + { pParser->AddItem ( "@distinct", &$1, &$5 ); } + ; + +expr: + select_atom + | '-' expr %prec TOK_NEG { $$ = $1; $$.m_iEnd = $2.m_iEnd; } + | TOK_NOT expr { $$ = $1; $$.m_iEnd = $2.m_iEnd; } + | expr '+' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '-' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '*' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '/' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '<' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr '>' expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_LTE expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_GTE expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_EQ expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_NE expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_AND expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | expr TOK_OR expr { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | '(' expr ')' { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | function + ; + +select_atom : + SEL_ID + | SEL_TOKEN + +function: + SEL_TOKEN '(' arglist ')' { $$ = $1; $$.m_iEnd = $4.m_iEnd; } + | SEL_TOKEN '(' ')' { $$ = $1; $$.m_iEnd = $3.m_iEnd; } + | SEL_MIN '(' expr ',' expr ')' { $$ = $1; $$.m_iEnd = $6.m_iEnd; } // handle clash with aggregate functions + | SEL_MAX '(' expr ',' expr ')' { $$ = $1; $$.m_iEnd = $6.m_iEnd; } + ; + +arglist: + expr + | arglist ',' expr + ; + + +%% + +#if USE_WINDOWS +#pragma warning(pop) +#endif diff --git a/coreseek/csft-4.1/src/sphinxsort.cpp b/coreseek/csft-4.1/src/sphinxsort.cpp new file mode 100755 index 0000000..520b5a9 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxsort.cpp @@ -0,0 +1,3053 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxint.h" + +#include +#include + +#if !USE_WINDOWS +#include +#include +#endif + +////////////////////////////////////////////////////////////////////////// +// TRAITS +////////////////////////////////////////////////////////////////////////// + +/// groupby key type +typedef int64_t SphGroupKey_t; + + +/// base grouper (class that computes groupby key) +class CSphGrouper +{ +public: + virtual ~CSphGrouper () {} + virtual SphGroupKey_t KeyFromValue ( SphAttr_t uValue ) const = 0; + virtual SphGroupKey_t KeyFromMatch ( const CSphMatch & tMatch ) const = 0; + virtual void GetLocator ( CSphAttrLocator & tOut ) const = 0; + virtual ESphAttr GetResultType () const = 0; + virtual void SetStringPool ( const BYTE * ) {} +}; + + +/// match-sorting priority queue traits +class CSphMatchQueueTraits : public ISphMatchSorter, ISphNoncopyable +{ +protected: + CSphMatch * m_pData; + int m_iUsed; + int m_iSize; + + CSphMatchComparatorState m_tState; + const bool m_bUsesAttrs; + +public: + /// ctor + CSphMatchQueueTraits ( int iSize, bool bUsesAttrs ) + : m_iUsed ( 0 ) + , m_iSize ( iSize ) + , m_bUsesAttrs ( bUsesAttrs ) + { + assert ( iSize>0 ); + m_pData = new CSphMatch [ iSize ]; + assert ( m_pData ); + + m_tState.m_iNow = (DWORD) time ( NULL ); + } + + /// dtor + ~CSphMatchQueueTraits () + { + SafeDeleteArray ( m_pData ); + } + +public: + int GetLength () const { return m_iUsed; } + void SetState ( const CSphMatchComparatorState & tState ) { m_tState = tState; m_tState.m_iNow = (DWORD) time ( NULL ); } + bool UsesAttrs () const { return m_bUsesAttrs; } + CSphMatch * First () { return m_pData; } +}; + +////////////////////////////////////////////////////////////////////////// +// PLAIN SORTING QUEUE +////////////////////////////////////////////////////////////////////////// + +/// normal match-sorting priority queue +template < typename COMP > class CSphMatchQueue : public CSphMatchQueueTraits +{ +public: + /// ctor + CSphMatchQueue ( int iSize, bool bUsesAttrs ) + : CSphMatchQueueTraits ( iSize, bUsesAttrs ) + {} + + /// check if this sorter does groupby + virtual bool IsGroupby () const + { + return false; + } + + /// add entry to the queue + virtual bool Push ( const CSphMatch & tEntry ) + { + m_iTotal++; + + if ( m_iUsed==m_iSize ) + { + // if it's worse that current min, reject it, else pop off current min + if ( COMP::IsLess ( tEntry, m_pData[0], m_tState ) ) + return true; + else + Pop (); + } + + // do add + m_pData[m_iUsed].Clone ( tEntry, m_tSchema.GetDynamicSize() ); + int iEntry = m_iUsed++; + + // sift up if needed, so that worst (lesser) ones float to the top + while ( iEntry ) + { + int iParent = ( iEntry-1 ) >> 1; + if ( !COMP::IsLess ( m_pData[iEntry], m_pData[iParent], m_tState ) ) + break; + + // entry is less than parent, should float to the top + Swap ( m_pData[iEntry], m_pData[iParent] ); + iEntry = iParent; + } + + return true; + } + + /// add grouped entry (must not happen) + virtual bool PushGrouped ( const CSphMatch & ) + { + assert ( 0 ); + return false; + } + + /// remove root (ie. top priority) entry + virtual void Pop () + { + assert ( m_iUsed ); + if ( !(--m_iUsed) ) // empty queue? just return + return; + + // make the last entry my new root + Swap ( m_pData[0], m_pData[m_iUsed] ); + + // sift down if needed + int iEntry = 0; + for ( ;; ) + { + // select child + int iChild = (iEntry<<1) + 1; + if ( iChild>=m_iUsed ) + break; + + // select smallest child + if ( iChild+1=0 ); + pTo += m_iUsed; + while ( m_iUsed>0 ) + { + --pTo; + pTo[0].Clone ( m_pData[0], m_tSchema.GetDynamicSize() ); // OPTIMIZE? reset dst + swap? + if ( iTag>=0 ) + pTo->m_iTag = iTag; + Pop (); + } + m_iTotal = 0; + } +}; + +////////////////////////////////////////////////////////////////////////// +// SORTING+GROUPING QUEUE +////////////////////////////////////////////////////////////////////////// + +static bool IsCount ( const CSphString & s ) +{ + return s=="@count" || s=="count(*)"; +} + +static bool IsGroupby ( const CSphString & s ) +{ + return s=="@groupby" || s=="@distinct"; +} + +static bool IsGroupbyMagic ( const CSphString & s ) +{ + return IsGroupby ( s ) || IsCount ( s ); +} + +/// groupers +#define GROUPER_BEGIN(_name) \ + class _name : public CSphGrouper \ + { \ + protected: \ + CSphAttrLocator m_tLocator; \ + public: \ + explicit _name ( const CSphAttrLocator & tLoc ) : m_tLocator ( tLoc ) {} \ + virtual void GetLocator ( CSphAttrLocator & tOut ) const { tOut = m_tLocator; } \ + virtual ESphAttr GetResultType () const { return m_tLocator.m_iBitCount>8*(int)sizeof(DWORD) ? SPH_ATTR_BIGINT : SPH_ATTR_INTEGER; } \ + virtual SphGroupKey_t KeyFromMatch ( const CSphMatch & tMatch ) const { return KeyFromValue ( tMatch.GetAttr ( m_tLocator ) ); } \ + virtual SphGroupKey_t KeyFromValue ( SphAttr_t uValue ) const \ + { +// NOLINT + +#define GROUPER_END \ + } \ + }; + + +#define GROUPER_BEGIN_SPLIT(_name) \ + GROUPER_BEGIN(_name) \ + time_t tStamp = (time_t)uValue; \ + struct tm * pSplit = localtime ( &tStamp ); + + +GROUPER_BEGIN ( CSphGrouperAttr ) + return uValue; +GROUPER_END + + +GROUPER_BEGIN_SPLIT ( CSphGrouperDay ) + return (pSplit->tm_year+1900)*10000 + (1+pSplit->tm_mon)*100 + pSplit->tm_mday; +GROUPER_END + + +GROUPER_BEGIN_SPLIT ( CSphGrouperWeek ) + int iPrevSunday = (1+pSplit->tm_yday) - pSplit->tm_wday; // prev Sunday day of year, base 1 + int iYear = pSplit->tm_year+1900; + if ( iPrevSunday<=0 ) // check if we crossed year boundary + { + // adjust day and year + iPrevSunday += 365; + iYear--; + + // adjust for leap years + if ( iYear%4==0 && ( iYear%100!=0 || iYear%400==0 ) ) + iPrevSunday++; + } + return iYear*1000 + iPrevSunday; +GROUPER_END + + +GROUPER_BEGIN_SPLIT ( CSphGrouperMonth ) + return (pSplit->tm_year+1900)*100 + (1+pSplit->tm_mon); +GROUPER_END + + +GROUPER_BEGIN_SPLIT ( CSphGrouperYear ) + return (pSplit->tm_year+1900); +GROUPER_END + +template +class CSphGrouperString : public CSphGrouperAttr, public PRED +{ +private: + const BYTE * m_pStringBase; + +public: + + explicit CSphGrouperString ( const CSphAttrLocator & tLoc ) + : CSphGrouperAttr ( tLoc ) + , m_pStringBase ( NULL ) + { + } + + virtual ESphAttr GetResultType () const + { + return SPH_ATTR_BIGINT; + } + + virtual SphGroupKey_t KeyFromValue ( SphAttr_t uValue ) const + { + if ( !m_pStringBase || !uValue ) + return 0; + + const BYTE * pStr = NULL; + int iLen = sphUnpackStr ( m_pStringBase+uValue, &pStr ); + + if ( !pStr || !iLen ) + return 0; + + return PRED::Hash ( pStr, iLen ); + } + + virtual void SetStringPool ( const BYTE * pStrings ) + { + m_pStringBase = pStrings; + } +}; + + +////////////////////////////////////////////////////////////////////////// + +/// simple fixed-size hash +/// doesn't keep the order +template < typename T, typename KEY, typename HASHFUNC > +class CSphFixedHash : ISphNoncopyable +{ +protected: + static const int HASH_LIST_END = -1; + static const int HASH_DELETED = -2; + + struct HashEntry_t + { + KEY m_tKey; + T m_tValue; + int m_iNext; + }; + +protected: + CSphVector m_dEntries; ///< key-value pairs storage pool + CSphVector m_dHash; ///< hash into m_dEntries pool + + int m_iFree; ///< free pairs count + CSphVector m_dFree; ///< free pair indexes + +public: + /// ctor + explicit CSphFixedHash ( int iLength ) + { + int iBuckets = ( 2 << sphLog2 ( iLength-1 ) ); // less than 50% bucket usage guaranteed + assert ( iLength>0 ); + assert ( iLength<=iBuckets ); + + m_dEntries.Resize ( iLength ); + m_dHash.Resize ( iBuckets ); + m_dFree.Resize ( iLength ); + + Reset (); + } + + /// cleanup + void Reset () + { + ARRAY_FOREACH ( i, m_dEntries ) + m_dEntries[i].m_iNext = HASH_DELETED; + + ARRAY_FOREACH ( i, m_dHash ) + m_dHash[i] = HASH_LIST_END; + + m_iFree = m_dFree.GetLength(); + ARRAY_FOREACH ( i, m_dFree ) + m_dFree[i] = i; + } + + /// add new entry + /// returns NULL on success + /// returns pointer to value if already hashed + T * Add ( const T & tValue, const KEY & tKey ) + { + assert ( m_iFree>0 && "hash overflow" ); + + // check if it's already hashed + DWORD uHash = DWORD ( HASHFUNC::Hash ( tKey ) ) & ( m_dHash.GetLength()-1 ); + int iPrev = -1, iEntry; + + for ( iEntry=m_dHash[uHash]; iEntry>=0; iPrev=iEntry, iEntry=m_dEntries[iEntry].m_iNext ) + if ( m_dEntries[iEntry].m_tKey==tKey ) + return &m_dEntries[iEntry].m_tValue; + assert ( iEntry!=HASH_DELETED ); + + // if it's not, do add + int iNew = m_dFree [ --m_iFree ]; + + HashEntry_t & tNew = m_dEntries[iNew]; + assert ( tNew.m_iNext==HASH_DELETED ); + + tNew.m_tKey = tKey; + tNew.m_tValue = tValue; + tNew.m_iNext = HASH_LIST_END; + + if ( iPrev>=0 ) + { + assert ( m_dEntries[iPrev].m_iNext==HASH_LIST_END ); + m_dEntries[iPrev].m_iNext = iNew; + } else + { + assert ( m_dHash[uHash]==HASH_LIST_END ); + m_dHash[uHash] = iNew; + } + return NULL; + } + + /// remove entry from hash + void Remove ( const KEY & tKey ) + { + // check if it's already hashed + DWORD uHash = DWORD ( HASHFUNC::Hash ( tKey ) ) & ( m_dHash.GetLength()-1 ); + int iPrev = -1, iEntry; + + for ( iEntry=m_dHash[uHash]; iEntry>=0; iPrev=iEntry, iEntry=m_dEntries[iEntry].m_iNext ) + if ( m_dEntries[iEntry].m_tKey==tKey ) + { + // found, remove it + assert ( m_dEntries[iEntry].m_iNext!=HASH_DELETED ); + if ( iPrev>=0 ) + m_dEntries[iPrev].m_iNext = m_dEntries[iEntry].m_iNext; + else + m_dHash[uHash] = m_dEntries[iEntry].m_iNext; + +#ifndef NDEBUG + m_dEntries[iEntry].m_iNext = HASH_DELETED; +#endif + + m_dFree [ m_iFree++ ] = iEntry; + return; + } + assert ( iEntry!=HASH_DELETED ); + } + + /// get value pointer by key + T * operator () ( const KEY & tKey ) const + { + DWORD uHash = DWORD ( HASHFUNC::Hash ( tKey ) ) & ( m_dHash.GetLength()-1 ); + int iEntry; + + for ( iEntry=m_dHash[uHash]; iEntry>=0; iEntry=m_dEntries[iEntry].m_iNext ) + if ( m_dEntries[iEntry].m_tKey==tKey ) + return (T*)&m_dEntries[iEntry].m_tValue; + + assert ( iEntry!=HASH_DELETED ); + return NULL; + } +}; + + +///////////////////////////////////////////////////////////////////////////// + +/// (group,attrvalue) pair +struct SphGroupedValue_t +{ +public: + SphGroupKey_t m_uGroup; + SphAttr_t m_uValue; + +public: + SphGroupedValue_t () + {} + + SphGroupedValue_t ( SphGroupKey_t uGroup, SphAttr_t uValue ) + : m_uGroup ( uGroup ) + , m_uValue ( uValue ) + {} + + inline bool operator < ( const SphGroupedValue_t & rhs ) const + { + if ( m_uGrouprhs.m_uGroup ) return false; + return m_uValue +{ +public: +#ifndef NDEBUG + CSphUniqounter () : m_iCountPos ( 0 ), m_bSorted ( true ) { Reserve ( 16384 ); } + void Add ( const SphGroupedValue_t & tValue ) { CSphVector::Add ( tValue ); m_bSorted = false; } + void Sort () { CSphVector::Sort (); m_bSorted = true; } + +#else + CSphUniqounter () : m_iCountPos ( 0 ) {} +#endif + +public: + int CountStart ( SphGroupKey_t * pOutGroup ); ///< starting counting distinct values, returns count and group key (0 if empty) + int CountNext ( SphGroupKey_t * pOutGroup ); ///< continues counting distinct values, returns count and group key (0 if done) + void Compact ( SphGroupKey_t * pRemoveGroups, int iRemoveGroups ); + +protected: + int m_iCountPos; + +#ifndef NDEBUG + bool m_bSorted; +#endif +}; + + +int CSphUniqounter::CountStart ( SphGroupKey_t * pOutGroup ) +{ + m_iCountPos = 0; + return CountNext ( pOutGroup ); +} + + +int CSphUniqounter::CountNext ( SphGroupKey_t * pOutGroup ) +{ + assert ( m_bSorted ); + if ( m_iCountPos>=m_iLength ) + return 0; + + SphGroupKey_t uGroup = m_pData[m_iCountPos].m_uGroup; + SphAttr_t uValue = m_pData[m_iCountPos].m_uValue; + *pOutGroup = uGroup; + + int iCount = 1; + while ( m_iCountPosm_uGroup ) + { + pRemoveGroups++; + iRemoveGroups--; + } + + for ( ; pSrcm_uGroup ) + { + pRemoveGroups++; + iRemoveGroups--; + } + if ( iRemoveGroups && pSrc->m_uGroup==*pRemoveGroups ) + continue; + + // check if it's a dupe + if ( pDst>m_pData && pDst[-1]==pSrc[0] ) + continue; + + *pDst++ = *pSrc; + } + + assert ( pDst-m_pData<=m_iLength ); + m_iLength = pDst-m_pData; +} + +///////////////////////////////////////////////////////////////////////////// + +/// attribute magic +enum +{ + SPH_VATTR_ID = -1, ///< tells match sorter to use doc id + SPH_VATTR_RELEVANCE = -2, ///< tells match sorter to use match weight + SPH_VATTR_FLOAT = 10000 ///< tells match sorter to compare floats +}; + + +/// match comparator interface from group-by sorter point of view +struct ISphMatchComparator +{ + virtual ~ISphMatchComparator () {} + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & tState ) const = 0; +}; + + +/// additional group-by sorter settings +struct CSphGroupSorterSettings +{ + CSphAttrLocator m_tLocGroupby; ///< locator for @groupby + CSphAttrLocator m_tLocCount; ///< locator for @count + CSphAttrLocator m_tLocDistinct; ///< locator for @distinct + CSphAttrLocator m_tDistinctLoc; ///< locator for attribute to compute count(distinct) for + bool m_bDistinct; ///< whether we need distinct + bool m_bMVA; ///< whether we're grouping by MVA attribute + bool m_bMva64; + CSphGrouper * m_pGrouper; ///< group key calculator + + CSphGroupSorterSettings () + : m_bDistinct ( false ) + , m_bMVA ( false ) + , m_bMva64 ( false ) + , m_pGrouper ( NULL ) + {} +}; + + +#if USE_WINDOWS +#pragma warning(disable:4127) +#endif + + +/// aggregate function interface +class IAggrFunc +{ +public: + virtual ~IAggrFunc() {} + virtual void Ungroup ( CSphMatch * ) {} + virtual void Update ( CSphMatch * pDst, const CSphMatch * pSrc, bool bGrouped ) = 0; + virtual void Finalize ( CSphMatch * ) {} +}; + + +/// aggregate traits for different attribute types +template < typename T > +class IAggrFuncTraits : public IAggrFunc +{ +public: + explicit IAggrFuncTraits ( const CSphAttrLocator & tLocator ) : m_tLocator ( tLocator ) {} + inline T GetValue ( const CSphMatch * pRow ); + inline void SetValue ( CSphMatch * pRow, T val ); + +protected: + CSphAttrLocator m_tLocator; +}; + +template<> +DWORD IAggrFuncTraits::GetValue ( const CSphMatch * pRow ) +{ + return (DWORD)pRow->GetAttr ( m_tLocator ); +} + +template<> +void IAggrFuncTraits::SetValue ( CSphMatch * pRow, DWORD val ) +{ + pRow->SetAttr ( m_tLocator, val ); +} + +template<> +int64_t IAggrFuncTraits::GetValue ( const CSphMatch * pRow ) +{ + return pRow->GetAttr ( m_tLocator ); +} + +template<> +void IAggrFuncTraits::SetValue ( CSphMatch * pRow, int64_t val ) +{ + pRow->SetAttr ( m_tLocator, val ); +} + +template<> +float IAggrFuncTraits::GetValue ( const CSphMatch * pRow ) +{ + return pRow->GetAttrFloat ( m_tLocator ); +} + +template<> +void IAggrFuncTraits::SetValue ( CSphMatch * pRow, float val ) +{ + pRow->SetAttrFloat ( m_tLocator, val ); +} + + + +/// SUM() implementation +template < typename T > +class AggrSum_t : public IAggrFuncTraits +{ +public: + explicit AggrSum_t ( const CSphAttrLocator & tLoc ) : IAggrFuncTraits ( tLoc ) + {} + + virtual void Update ( CSphMatch * pDst, const CSphMatch * pSrc, bool ) + { + this->SetValue ( pDst, this->GetValue(pDst)+this->GetValue(pSrc) ); + } +}; + + +/// AVG() implementation +template < typename T > +class AggrAvg_t : public IAggrFuncTraits +{ +protected: + CSphAttrLocator m_tCountLoc; +public: + AggrAvg_t ( const CSphAttrLocator & tLoc, const CSphAttrLocator & tCountLoc ) : IAggrFuncTraits ( tLoc ), m_tCountLoc ( tCountLoc ) + {} + + virtual void Ungroup ( CSphMatch * pDst ) + { + this->SetValue ( pDst, T ( this->GetValue ( pDst ) * pDst->GetAttr ( m_tCountLoc ) ) ); + } + + virtual void Update ( CSphMatch * pDst, const CSphMatch * pSrc, bool bGrouped ) + { + if ( bGrouped ) + this->SetValue ( pDst, T ( this->GetValue ( pDst ) + this->GetValue ( pSrc ) * pSrc->GetAttr ( m_tCountLoc ) ) ); + else + this->SetValue ( pDst, this->GetValue ( pDst ) + this->GetValue ( pSrc ) ); + } + + virtual void Finalize ( CSphMatch * pDst ) + { + this->SetValue ( pDst, T ( this->GetValue ( pDst ) / pDst->GetAttr ( m_tCountLoc ) ) ); + } +}; + + +/// MAX() implementation +template < typename T > +class AggrMax_t : public IAggrFuncTraits +{ +public: + explicit AggrMax_t ( const CSphAttrLocator & tLoc ) : IAggrFuncTraits ( tLoc ) + {} + + virtual void Update ( CSphMatch * pDst, const CSphMatch * pSrc, bool ) + { + this->SetValue ( pDst, Max ( this->GetValue(pDst), this->GetValue(pSrc) ) ); + } +}; + + +/// MIN() implementation +template < typename T > +class AggrMin_t : public IAggrFuncTraits +{ +public: + explicit AggrMin_t ( const CSphAttrLocator & tLoc ) : IAggrFuncTraits ( tLoc ) + {} + + virtual void Update ( CSphMatch * pDst, const CSphMatch * pSrc, bool ) + { + this->SetValue ( pDst, Min ( this->GetValue(pDst), this->GetValue(pSrc) ) ); + } +}; + + +/// group sorting functor +template < typename COMPGROUP > +struct GroupSorter_fn : public CSphMatchComparatorState, public SphAccessor_T +{ + typedef CSphMatch MEDIAN_TYPE; + + int m_iDynamic; + + GroupSorter_fn () + { + m_iDynamic = 0; + } + + void CopyKey ( MEDIAN_TYPE * pMed, CSphMatch * pVal ) const + { + pMed->Clone ( *pVal, m_iDynamic ); + } + + bool IsLess ( const CSphMatch & a, const CSphMatch & b ) const + { + return COMPGROUP::IsLess ( b, a, *this ); + } + + // inherited swap does not work on gcc + void Swap ( CSphMatch * a, CSphMatch * b ) const + { + ::Swap ( *a, *b ); + } +}; + +/// match sorter with k-buffering and group-by +template < typename COMPGROUP, bool DISTINCT > +class CSphKBufferGroupSorter : public CSphMatchQueueTraits +{ +protected: + ESphGroupBy m_eGroupBy; ///< group-by function + CSphGrouper * m_pGrouper; + + CSphFixedHash < CSphMatch *, SphGroupKey_t, IdentityHash_fn > m_hGroup2Match; + +protected: + int m_iLimit; ///< max matches to be retrieved + + CSphUniqounter m_tUniq; + bool m_bSortByDistinct; + + GroupSorter_fn m_tGroupSorter; + const ISphMatchComparator * m_pComp; + + CSphGroupSorterSettings m_tSettings; + CSphVector m_dAggregates; + CSphVector m_dAvgs; + int m_iPregroupDynamic; ///< how much dynamic attributes are computed by the index (before groupby sorter) + + static const int GROUPBY_FACTOR = 4; ///< allocate this times more storage when doing group-by (k, as in k-buffer) + +public: + /// ctor + CSphKBufferGroupSorter ( const ISphMatchComparator * pComp, const CSphQuery * pQuery, const CSphGroupSorterSettings & tSettings ) // FIXME! make k configurable + : CSphMatchQueueTraits ( pQuery->m_iMaxMatches*GROUPBY_FACTOR, true ) + , m_eGroupBy ( pQuery->m_eGroupFunc ) + , m_pGrouper ( tSettings.m_pGrouper ) + , m_hGroup2Match ( pQuery->m_iMaxMatches*GROUPBY_FACTOR ) + , m_iLimit ( pQuery->m_iMaxMatches ) + , m_bSortByDistinct ( false ) + , m_pComp ( pComp ) + , m_tSettings ( tSettings ) + , m_iPregroupDynamic ( 0 ) + { + assert ( GROUPBY_FACTOR>1 ); + assert ( DISTINCT==false || tSettings.m_tDistinctLoc.m_iBitOffset>=0 ); + } + + /// schema setup + virtual void SetSchema ( const CSphSchema & tSchema ) + { + m_tSchema = tSchema; + m_tGroupSorter.m_iDynamic = m_tSchema.GetDynamicSize(); + + bool bAggrStarted = false; + for ( int i=0; i ( tAttr.m_tLocator ) ); break; + case SPH_ATTR_BIGINT: m_dAggregates.Add ( new AggrSum_t ( tAttr.m_tLocator ) ); break; + case SPH_ATTR_FLOAT: m_dAggregates.Add ( new AggrSum_t ( tAttr.m_tLocator ) ); break; + default: assert ( 0 && "internal error: unhandled aggregate type" ); break; + } + break; + + case SPH_AGGR_AVG: + switch ( tAttr.m_eAttrType ) + { + case SPH_ATTR_INTEGER: m_dAggregates.Add ( new AggrAvg_t ( tAttr.m_tLocator, m_tSettings.m_tLocCount ) ); break; + case SPH_ATTR_BIGINT: m_dAggregates.Add ( new AggrAvg_t ( tAttr.m_tLocator, m_tSettings.m_tLocCount ) ); break; + case SPH_ATTR_FLOAT: m_dAggregates.Add ( new AggrAvg_t ( tAttr.m_tLocator, m_tSettings.m_tLocCount ) ); break; + default: assert ( 0 && "internal error: unhandled aggregate type" ); break; + } + // store avg to calculate these attributes prior to groups sort + for ( int iState=0; iState ( tAttr.m_tLocator ) ); break; + case SPH_ATTR_BIGINT: m_dAggregates.Add ( new AggrMin_t ( tAttr.m_tLocator ) ); break; + case SPH_ATTR_FLOAT: m_dAggregates.Add ( new AggrMin_t ( tAttr.m_tLocator ) ); break; + default: assert ( 0 && "internal error: unhandled aggregate type" ); break; + } + break; + + case SPH_AGGR_MAX: + switch ( tAttr.m_eAttrType ) + { + case SPH_ATTR_INTEGER: m_dAggregates.Add ( new AggrMax_t ( tAttr.m_tLocator ) ); break; + case SPH_ATTR_BIGINT: m_dAggregates.Add ( new AggrMax_t ( tAttr.m_tLocator ) ); break; + case SPH_ATTR_FLOAT: m_dAggregates.Add ( new AggrMax_t ( tAttr.m_tLocator ) ); break; + default: assert ( 0 && "internal error: unhandled aggregate type" ); break; + } + break; + + default: + assert ( 0 && "internal error: unhandled aggregate function" ); + break; + } + } + } + + /// dtor + ~CSphKBufferGroupSorter () + { + SafeDelete ( m_pComp ); + SafeDelete ( m_pGrouper ); + } + + /// check if this sorter does groupby + virtual bool IsGroupby () const + { + return true; + } + + /// set string pool pointer (for string+groupby sorters) + void SetStringPool ( const BYTE * pStrings ) + { + m_pGrouper->SetStringPool ( pStrings ); + } + + /// add entry to the queue + virtual bool Push ( const CSphMatch & tEntry ) + { + SphGroupKey_t uGroupKey = m_pGrouper->KeyFromMatch ( tEntry ); + return PushEx ( tEntry, uGroupKey, false ); + } + + /// add grouped entry to the queue + virtual bool PushGrouped ( const CSphMatch & tEntry ) + { + return PushEx ( tEntry, tEntry.GetAttr ( m_tSettings.m_tLocGroupby ), true ); + } + + /// add entry to the queue + virtual bool PushEx ( const CSphMatch & tEntry, const SphGroupKey_t uGroupKey, bool bGrouped ) + { + // if this group is already hashed, we only need to update the corresponding match + CSphMatch ** ppMatch = m_hGroup2Match ( uGroupKey ); + if ( ppMatch ) + { + CSphMatch * pMatch = (*ppMatch); + assert ( pMatch ); + assert ( pMatch->GetAttr ( m_tSettings.m_tLocGroupby )==uGroupKey ); + assert ( pMatch->m_pDynamic[-1]==tEntry.m_pDynamic[-1] ); + + if ( bGrouped ) + { + // it's already grouped match + // sum grouped matches count + pMatch->SetAttr ( m_tSettings.m_tLocCount, pMatch->GetAttr ( m_tSettings.m_tLocCount ) + tEntry.GetAttr ( m_tSettings.m_tLocCount ) ); // OPTIMIZE! AddAttr()? + if ( DISTINCT ) + pMatch->SetAttr ( m_tSettings.m_tLocDistinct, pMatch->GetAttr ( m_tSettings.m_tLocDistinct ) + tEntry.GetAttr ( m_tSettings.m_tLocDistinct ) ); + } else + { + // it's a simple match + // increase grouped matches count + pMatch->SetAttr ( m_tSettings.m_tLocCount, 1 + pMatch->GetAttr ( m_tSettings.m_tLocCount ) ); // OPTIMIZE! IncAttr()? + } + + // update aggregates + ARRAY_FOREACH ( i, m_dAggregates ) + m_dAggregates[i]->Update ( pMatch, &tEntry, bGrouped ); + + // if new entry is more relevant, update from it + if ( m_pComp->VirtualIsLess ( *pMatch, tEntry, m_tState ) ) + { + // can't use Clone() here; must keep current aggregate values + pMatch->m_iDocID = tEntry.m_iDocID; + pMatch->m_iWeight = tEntry.m_iWeight; + pMatch->m_pStatic = tEntry.m_pStatic; + pMatch->m_iTag = tEntry.m_iTag; + + if ( m_iPregroupDynamic ) + { + assert ( pMatch->m_pDynamic ); + assert ( tEntry.m_pDynamic ); + assert ( pMatch->m_pDynamic[-1]==tEntry.m_pDynamic[-1] ); + + for ( int i=0; im_pDynamic[i] = tEntry.m_pDynamic[i]; + } + } + } + + // submit actual distinct value in all cases + if ( DISTINCT && !bGrouped ) + m_tUniq.Add ( SphGroupedValue_t ( uGroupKey, tEntry.GetAttr ( m_tSettings.m_tDistinctLoc ) ) ); // OPTIMIZE! use simpler locator here? + + // it's a dupe anyway, so we shouldn't update total matches count + if ( ppMatch ) + return false; + + // if we're full, let's cut off some worst groups + if ( m_iUsed==m_iSize ) + CutWorst (); + + // do add + assert ( m_iUsedUngroup ( &tNew ); + } + + m_hGroup2Match.Add ( &tNew, uGroupKey ); + m_iTotal++; + return true; + } + + void CalcAvg ( bool bGroup ) + { + if ( !m_dAvgs.GetLength() ) + return; + + CSphMatch * pMatch = m_pData; + CSphMatch * pEnd = pMatch + m_iUsed; + while ( pMatchFinalize ( pMatch ); + else + m_dAvgs[j]->Ungroup ( pMatch ); + } + ++pMatch; + } + } + + /// store all entries into specified location in sorted order, and remove them from queue + void Flatten ( CSphMatch * pTo, int iTag ) + { + CountDistinct (); + + CalcAvg ( true ); + SortGroups (); + + CSphVector dAggrs; + if ( m_dAggregates.GetLength()!=m_dAvgs.GetLength() ) + { + dAggrs = m_dAggregates; + ARRAY_FOREACH ( i, m_dAvgs ) + dAggrs.RemoveValue ( m_dAvgs[i] ); + } + + int iLen = GetLength (); + for ( int i=0; iFinalize ( &m_pData[i] ); + + pTo->Clone ( m_pData[i], m_tSchema.GetDynamicSize() ); + if ( iTag>=0 ) + pTo->m_iTag = iTag; + } + + m_iUsed = 0; + m_iTotal = 0; + + m_hGroup2Match.Reset (); + if ( DISTINCT ) + m_tUniq.Resize ( 0 ); + } + + /// get entries count + int GetLength () const + { + return Min ( m_iUsed, m_iLimit ); + } + + /// set group comparator state + void SetGroupState ( const CSphMatchComparatorState & tState ) + { + m_tGroupSorter.m_fnStrCmp = tState.m_fnStrCmp; + + // FIXME! manual bitwise copying.. yuck + for ( int i=0; i=0 ) + for ( int i=0; iSetAttr ( m_tSettings.m_tLocDistinct, iCount ); + } + } + } + + /// cut worst N groups off the buffer tail + void CutWorst () + { + // sort groups + if ( m_bSortByDistinct ) + CountDistinct (); + + CalcAvg ( true ); + SortGroups (); + CalcAvg ( false ); + + // cut groups + int iCut = m_iLimit * (int)(GROUPBY_FACTOR/2); + m_iUsed -= iCut; + + // cleanup unused distinct stuff + if ( DISTINCT ) + { + // build kill-list + CSphVector dRemove; + dRemove.Resize ( iCut ); + for ( int i=0; i +class CSphKBufferMVAGroupSorter : public CSphKBufferGroupSorter < COMPGROUP, DISTINCT > +{ +protected: + const DWORD * m_pMva; ///< pointer to MVA pool for incoming matches + CSphAttrLocator m_tMvaLocator; + bool m_bMva64; + +public: + /// ctor + CSphKBufferMVAGroupSorter ( const ISphMatchComparator * pComp, const CSphQuery * pQuery, const CSphGroupSorterSettings & tSettings ) + : CSphKBufferGroupSorter < COMPGROUP, DISTINCT > ( pComp, pQuery, tSettings ) + , m_pMva ( NULL ) + , m_bMva64 ( tSettings.m_bMva64 ) + { + this->m_pGrouper->GetLocator ( m_tMvaLocator ); + } + + /// check if this sorter does groupby + virtual bool IsGroupby () + { + return true; + } + + /// set MVA pool for subsequent matches + void SetMVAPool ( const DWORD * pMva ) + { + m_pMva = pMva; + } + + /// add entry to the queue + virtual bool Push ( const CSphMatch & tEntry ) + { + assert ( m_pMva ); + if ( !m_pMva ) + return false; + + // get that list + // FIXME! OPTIMIZE! use simpler locator than full bits/count here + // FIXME! hardcoded MVA type, so here's MVA_DOWNSIZE marker for searching + const DWORD * pValues = tEntry.GetAttrMVA ( this->m_tMvaLocator, m_pMva ); // (this pointer is for gcc; it doesn't work otherwise) + if ( !pValues ) + return false; + + DWORD iValues = *pValues++; + + bool bRes = false; + if ( m_bMva64 ) + { + assert ( ( iValues%2 )==0 ); + for ( ;iValues>0; iValues-=2, pValues+=2 ) + { + uint64_t uMva = MVA_UPSIZE ( pValues ); + SphGroupKey_t uGroupkey = this->m_pGrouper->KeyFromValue ( uMva ); + bRes |= this->PushEx ( tEntry, uGroupkey, false ); + } + + } else + { + while ( iValues-- ) + { + SphGroupKey_t uGroupkey = this->m_pGrouper->KeyFromValue ( *pValues++ ); + bRes |= this->PushEx ( tEntry, uGroupkey, false ); + } + } + return bRes; + } + + /// add pre-grouped entry to the queue + virtual bool PushGrouped ( const CSphMatch & tEntry ) + { + // re-group it based on the group key + // (first 'this' is for icc; second 'this' is for gcc) + return this->PushEx ( tEntry, tEntry.GetAttr ( this->m_tSettings.m_tLocGroupby ), true ); + } +}; + + +#if USE_WINDOWS +#pragma warning(default:4127) +#endif + +////////////////////////////////////////////////////////////////////////// +// PLAIN SORTING FUNCTORS +////////////////////////////////////////////////////////////////////////// + +/// match sorter +struct MatchRelevanceLt_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & ) + { + if ( a.m_iWeight!=b.m_iWeight ) + return a.m_iWeight < b.m_iWeight; + + return a.m_iDocID > b.m_iDocID; + }; +}; + + +/// match sorter +struct MatchAttrLt_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { + if ( t.m_eKeypart[0]!=SPH_KEYPART_STRING ) + { + SphAttr_t aa = a.GetAttr ( t.m_tLocator[0] ); + SphAttr_t bb = b.GetAttr ( t.m_tLocator[0] ); + if ( aa!=bb ) + return aa b.m_iDocID; + }; +}; + + +/// match sorter +struct MatchAttrGt_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { + if ( t.m_eKeypart[0]!=SPH_KEYPART_STRING ) + { + SphAttr_t aa = a.GetAttr ( t.m_tLocator[0] ); + SphAttr_t bb = b.GetAttr ( t.m_tLocator[0] ); + if ( aa!=bb ) + return aa>bb; + } else + { + int iCmp = t.CmpStrings ( a, b, 0 ); + if ( iCmp!=0 ) + return iCmp>0; + } + + if ( a.m_iWeight!=b.m_iWeight ) + return a.m_iWeight < b.m_iWeight; + + return a.m_iDocID > b.m_iDocID; + }; +}; + + +/// match sorter +struct MatchTimeSegments_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { + SphAttr_t aa = a.GetAttr ( t.m_tLocator[0] ); + SphAttr_t bb = b.GetAttr ( t.m_tLocator[0] ); + int iA = GetSegment ( aa, t.m_iNow ); + int iB = GetSegment ( bb, t.m_iNow ); + if ( iA!=iB ) + return iA > iB; + + if ( a.m_iWeight!=b.m_iWeight ) + return a.m_iWeight < b.m_iWeight; + + if ( aa!=bb ) + return aa b.m_iDocID; + }; + +protected: + static inline int GetSegment ( SphAttr_t iStamp, SphAttr_t iNow ) + { + if ( iStamp>=iNow-3600 ) return 0; // last hour + if ( iStamp>=iNow-24*3600 ) return 1; // last day + if ( iStamp>=iNow-7*24*3600 ) return 2; // last week + if ( iStamp>=iNow-30*24*3600 ) return 3; // last month + if ( iStamp>=iNow-90*24*3600 ) return 4; // last 3 months + return 5; // everything else + } +}; + + +/// match sorter +struct MatchExpr_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { + float aa = a.GetAttrFloat ( t.m_tLocator[0] ); // FIXME! OPTIMIZE!!! simplified (dword-granular) getter could be used here + float bb = b.GetAttrFloat ( t.m_tLocator[0] ); + if ( aa!=bb ) + return aab.m_iDocID; + } +}; + +///////////////////////////////////////////////////////////////////////////// + +#define SPH_TEST_PAIR(_aa,_bb,_idx ) \ + if ( (_aa)!=(_bb) ) \ + return ( (t.m_uAttrDesc >> (_idx)) & 1 ) ^ ( (_aa) > (_bb) ); + + +#define SPH_TEST_KEYPART(_idx) \ + switch ( t.m_eKeypart[_idx] ) \ + { \ + case SPH_KEYPART_ID: SPH_TEST_PAIR ( a.m_iDocID, b.m_iDocID, _idx ); break; \ + case SPH_KEYPART_WEIGHT: SPH_TEST_PAIR ( a.m_iWeight, b.m_iWeight, _idx ); break; \ + case SPH_KEYPART_INT: \ + { \ + register SphAttr_t aa = a.GetAttr ( t.m_tLocator[_idx] ); \ + register SphAttr_t bb = b.GetAttr ( t.m_tLocator[_idx] ); \ + SPH_TEST_PAIR ( aa, bb, _idx ); \ + break; \ + } \ + case SPH_KEYPART_FLOAT: \ + { \ + register float aa = a.GetAttrFloat ( t.m_tLocator[_idx] ); \ + register float bb = b.GetAttrFloat ( t.m_tLocator[_idx] ); \ + SPH_TEST_PAIR ( aa, bb, _idx ) \ + break; \ + } \ + case SPH_KEYPART_STRING: \ + { \ + int iCmp = t.CmpStrings ( a, b, _idx ); \ + if ( iCmp!=0 ) \ + return ( ( t.m_uAttrDesc >> (_idx) ) & 1 ) ^ ( iCmp>0 ); \ + break; \ + } \ + } + + +struct MatchGeneric2_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { + SPH_TEST_KEYPART(0); + SPH_TEST_KEYPART(1); + return false; + }; +}; + + +struct MatchGeneric3_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { + SPH_TEST_KEYPART(0); + SPH_TEST_KEYPART(1); + SPH_TEST_KEYPART(2); + return false; + }; +}; + + +struct MatchGeneric4_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { + SPH_TEST_KEYPART(0); + SPH_TEST_KEYPART(1); + SPH_TEST_KEYPART(2); + SPH_TEST_KEYPART(3); + return false; + }; +}; + + +struct MatchGeneric5_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { + SPH_TEST_KEYPART(0); + SPH_TEST_KEYPART(1); + SPH_TEST_KEYPART(2); + SPH_TEST_KEYPART(3); + SPH_TEST_KEYPART(4); + return false; + }; +}; + +////////////////////////////////////////////////////////////////////////// + +struct MatchCustom_fn : public ISphMatchComparator +{ + virtual bool VirtualIsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) const + { + return IsLess ( a, b, t ); + } + + // setup sorting state + static bool SetupAttr ( const CSphSchema & tSchema, CSphMatchComparatorState & tState, CSphString & sError, int iIdx, const char * sAttr ) + { + if ( iIdx>=CSphMatchComparatorState::MAX_ATTRS ) + { + sError.SetSprintf ( "custom sort: too many attributes declared" ); + return false; + } + + int iAttr = tSchema.GetAttrIndex(sAttr); + if ( iAttr<0 ) + { + sError.SetSprintf ( "custom sort: attr '%s' not found in schema", sAttr ); + return false; + } + + const CSphColumnInfo & tAttr = tSchema.GetAttr(iAttr); + tState.m_eKeypart[iIdx] = tAttr.m_eAttrType==SPH_ATTR_FLOAT ? SPH_KEYPART_FLOAT : SPH_KEYPART_INT; + tState.m_tLocator[iIdx] = tAttr.m_tLocator; + return true; + } + + // setup sorting state + static bool Setup ( const CSphSchema & tSchema, CSphMatchComparatorState & tState, CSphString & sError ) + { + float fTmp; + int iAttr = 0; + +#define MATCH_FUNCTION fTmp +#define MATCH_WEIGHT 1.0f +#define MATCH_NOW 1.0f +#define MATCH_ATTR(_idx) 1.0f +#define MATCH_DECLARE_ATTR(_name) if ( !SetupAttr ( tSchema, tState, sError, iAttr++, _name ) ) return false; +#include "sphinxcustomsort.inl" +; // NOLINT + + return true; + } + + // calc function and compare matches + // OPTIMIZE? could calc once per match on submit + static inline bool IsLess ( const CSphMatch & a, const CSphMatch & b, const CSphMatchComparatorState & t ) + { +#undef MATCH_DECLARE_ATTR +#undef MATCH_WEIGHT +#undef MATCH_NOW +#undef MATCH_ATTR +#define MATCH_DECLARE_ATTR(_name) ; // NOLINT +#define MATCH_WEIGHT float(MATCH_VAR.m_iWeight) +#define MATCH_NOW float(t.m_iNow) +#define MATCH_ATTR(_idx) float(MATCH_VAR.GetAttr(t.m_tLocator[_idx])) + + float aa, bb; + +#undef MATCH_FUNCTION +#undef MATCH_VAR +#define MATCH_FUNCTION aa +#define MATCH_VAR a +#include "sphinxcustomsort.inl" // NOLINT +; // NOLINT + +#undef MATCH_FUNCTION +#undef MATCH_VAR +#define MATCH_FUNCTION bb +#define MATCH_VAR b +#include "sphinxcustomsort.inl" // NOLINT +; // NOLINT + + return aaa..z, _, a..z, @ + if ( ( c>='0' && c<='9' ) || ( c>='a' && c<='z' ) || c=='_' || c=='@' ) + return c; + if ( c>='A' && c<='Z' ) + return c-'A'+'a'; + return 0; + } + +public: + explicit SortClauseTokenizer_t ( const char * sBuffer ) + { + int iLen = strlen(sBuffer); + m_pBuf = new char [ iLen+1 ]; + m_pMax = m_pBuf+iLen; + m_pCur = m_pBuf; + + for ( int i=0; i<=iLen; i++ ) + m_pBuf[i] = ToLower ( sBuffer[i] ); + } + + ~SortClauseTokenizer_t () + { + SafeDeleteArray ( m_pBuf ); + } + + const char * GetToken () + { + // skip spaces + while ( m_pCur=m_pMax ) + return NULL; + + // memorize token start, and move pointer forward + const char * sRes = m_pCur; + while ( *m_pCur ) + m_pCur++; + return sRes; + } +}; + + +static inline ESphSortKeyPart Attr2Keypart ( ESphAttr eType ) +{ + switch ( eType ) + { + case SPH_ATTR_FLOAT: return SPH_KEYPART_FLOAT; + case SPH_ATTR_STRING: return SPH_KEYPART_STRING; + default: return SPH_KEYPART_INT; + } +} + + +static ESortClauseParseResult sphParseSortClause ( const CSphQuery * pQuery, const char * sClause, const CSphSchema & tSchema, + ESphSortFunc & eFunc, CSphMatchComparatorState & tState, int * dAttrs, CSphString & sError, CSphSchema * pExtra = NULL ) +{ + assert ( dAttrs ); + for ( int i=0; im_dItems ) + { + const CSphQueryItem & tItem = pQuery->m_dItems[i]; + if ( !tItem.m_sAlias.cstr() || strcasecmp ( tItem.m_sAlias.cstr(), pTok ) ) + continue; + if ( tItem.m_sExpr.Begins("@") ) + iAttr = tSchema.GetAttrIndex ( tItem.m_sExpr.cstr() ); + break; // break in any case; because we did match the alias + } + } + + // epic fail + if ( iAttr<0 ) + { + sError.SetSprintf ( "sort-by attribute '%s' not found", pTok ); + return SORT_CLAUSE_ERROR; + } + + const CSphColumnInfo & tCol = tSchema.GetAttr(iAttr); + if ( pExtra ) + pExtra->AddAttr ( tCol, true ); + tState.m_eKeypart[iField] = Attr2Keypart ( tCol.m_eAttrType ); + tState.m_tLocator[iField] = tSchema.GetAttr(iAttr).m_tLocator; + dAttrs[iField] = iAttr; + } + } + + if ( iField==0 ) + { + sError.SetSprintf ( "no sort order defined" ); + return SORT_CLAUSE_ERROR; + } + + if ( iField==1 ) + tState.m_eKeypart[iField++] = SPH_KEYPART_ID; // add "id ASC" + + switch ( iField ) + { + case 2: eFunc = FUNC_GENERIC2; break; + case 3: eFunc = FUNC_GENERIC3; break; + case 4: eFunc = FUNC_GENERIC4; break; + case 5: eFunc = FUNC_GENERIC5; break; + default: sError.SetSprintf ( "INTERNAL ERROR: %d fields in sphParseSortClause()", iField ); return SORT_CLAUSE_ERROR; + } + return SORT_CLAUSE_OK; +} + +////////////////////////////////////////////////////////////////////////// +// SORTING+GROUPING INSTANTIATION +////////////////////////////////////////////////////////////////////////// + +template < typename COMPGROUP > +static ISphMatchSorter * sphCreateSorter3rd ( const ISphMatchComparator * pComp, const CSphQuery * pQuery, const CSphGroupSorterSettings & tSettings ) +{ + if ( tSettings.m_bMVA ) + { + if ( tSettings.m_bDistinct==true ) + return new CSphKBufferMVAGroupSorter < COMPGROUP, true > ( pComp, pQuery, tSettings); + else + return new CSphKBufferMVAGroupSorter < COMPGROUP, false > ( pComp, pQuery, tSettings ); + } else + { + if ( tSettings.m_bDistinct==true ) + return new CSphKBufferGroupSorter < COMPGROUP, true > ( pComp, pQuery, tSettings ); + else + return new CSphKBufferGroupSorter < COMPGROUP, false > ( pComp, pQuery, tSettings ); + } +} + + +static ISphMatchSorter * sphCreateSorter2nd ( ESphSortFunc eGroupFunc, const ISphMatchComparator * pComp, const CSphQuery * pQuery, const CSphGroupSorterSettings & tSettings ) +{ + switch ( eGroupFunc ) + { + case FUNC_GENERIC2: return sphCreateSorter3rd ( pComp, pQuery, tSettings ); break; + case FUNC_GENERIC3: return sphCreateSorter3rd ( pComp, pQuery, tSettings ); break; + case FUNC_GENERIC4: return sphCreateSorter3rd ( pComp, pQuery, tSettings ); break; + case FUNC_GENERIC5: return sphCreateSorter3rd ( pComp, pQuery, tSettings ); break; + case FUNC_CUSTOM: return sphCreateSorter3rd ( pComp, pQuery, tSettings ); break; + case FUNC_EXPR: return sphCreateSorter3rd ( pComp, pQuery, tSettings ); break; + default: return NULL; + } +} + + +static ISphMatchSorter * sphCreateSorter1st ( ESphSortFunc eMatchFunc, ESphSortFunc eGroupFunc, const CSphQuery * pQuery, const CSphGroupSorterSettings & tSettings ) +{ + ISphMatchComparator * pComp = NULL; + switch ( eMatchFunc ) + { + case FUNC_REL_DESC: pComp = new MatchRelevanceLt_fn(); break; + case FUNC_ATTR_DESC: pComp = new MatchAttrLt_fn(); break; + case FUNC_ATTR_ASC: pComp = new MatchAttrGt_fn(); break; + case FUNC_TIMESEGS: pComp = new MatchTimeSegments_fn(); break; + case FUNC_GENERIC2: pComp = new MatchGeneric2_fn(); break; + case FUNC_GENERIC3: pComp = new MatchGeneric3_fn(); break; + case FUNC_GENERIC4: pComp = new MatchGeneric4_fn(); break; + case FUNC_GENERIC5: pComp = new MatchGeneric5_fn(); break; + case FUNC_CUSTOM: pComp = new MatchCustom_fn(); break; + case FUNC_EXPR: pComp = new MatchExpr_fn(); break; // only for non-bitfields, obviously + } + + assert ( pComp ); + return sphCreateSorter2nd ( eGroupFunc, pComp, pQuery, tSettings ); +} + +////////////////////////////////////////////////////////////////////////// +// GEODIST +////////////////////////////////////////////////////////////////////////// + +struct ExprGeodist_t : public ISphExpr +{ +public: + ExprGeodist_t () {} + bool Setup ( const CSphQuery * pQuery, const CSphSchema & tSchema, CSphString & sError ); + virtual float Eval ( const CSphMatch & tMatch ) const; + virtual void SetMVAPool ( const DWORD * ) {} + virtual void GetDependencyColumns ( CSphVector & dColumns ) const; + +protected: + CSphAttrLocator m_tGeoLatLoc; + CSphAttrLocator m_tGeoLongLoc; + float m_fGeoAnchorLat; + float m_fGeoAnchorLong; + int m_iLat; + int m_iLon; +}; + + +bool ExprGeodist_t::Setup ( const CSphQuery * pQuery, const CSphSchema & tSchema, CSphString & sError ) +{ + if ( !pQuery->m_bGeoAnchor ) + { + sError.SetSprintf ( "INTERNAL ERROR: no geoanchor, can not create geodist evaluator" ); + return false; + } + + int iLat = tSchema.GetAttrIndex ( pQuery->m_sGeoLatAttr.cstr() ); + if ( iLat<0 ) + { + sError.SetSprintf ( "unknown latitude attribute '%s'", pQuery->m_sGeoLatAttr.cstr() ); + return false; + } + + int iLong = tSchema.GetAttrIndex ( pQuery->m_sGeoLongAttr.cstr() ); + if ( iLong<0 ) + { + sError.SetSprintf ( "unknown latitude attribute '%s'", pQuery->m_sGeoLongAttr.cstr() ); + return false; + } + + m_tGeoLatLoc = tSchema.GetAttr(iLat).m_tLocator; + m_tGeoLongLoc = tSchema.GetAttr(iLong).m_tLocator; + m_fGeoAnchorLat = pQuery->m_fGeoLatitude; + m_fGeoAnchorLong = pQuery->m_fGeoLongitude; + m_iLat = iLat; + m_iLon = iLong; + return true; +} + + +static inline double sphSqr ( double v ) +{ + return v*v; +} + + +float ExprGeodist_t::Eval ( const CSphMatch & tMatch ) const +{ + const double R = 6384000; + float plat = tMatch.GetAttrFloat ( m_tGeoLatLoc ); + float plon = tMatch.GetAttrFloat ( m_tGeoLongLoc ); + double dlat = plat - m_fGeoAnchorLat; + double dlon = plon - m_fGeoAnchorLong; + double a = sphSqr ( sin ( dlat/2 ) ) + cos(plat)*cos(m_fGeoAnchorLat)*sphSqr(sin(dlon/2)); + double c = 2*asin ( Min ( 1, sqrt(a) ) ); + return (float)(R*c); +} + +void ExprGeodist_t::GetDependencyColumns ( CSphVector & dColumns ) const +{ + dColumns.Add ( m_iLat ); + dColumns.Add ( m_iLon ); +} + +////////////////////////////////////////////////////////////////////////// +// PUBLIC FUNCTIONS (FACTORY AND FLATTENING) +////////////////////////////////////////////////////////////////////////// + +static CSphGrouper * sphCreateGrouperString ( const CSphAttrLocator & tLoc, ESphCollation eCollation ); + +static bool SetupGroupbySettings ( const CSphQuery * pQuery, const CSphSchema & tSchema, CSphGroupSorterSettings & tSettings, CSphString & sError ) +{ + tSettings.m_tDistinctLoc.m_iBitOffset = -1; + + if ( pQuery->m_sGroupBy.IsEmpty() ) + return true; + + if ( pQuery->m_eGroupFunc==SPH_GROUPBY_ATTRPAIR ) + { + sError.SetSprintf ( "SPH_GROUPBY_ATTRPAIR is not supported any more (just group on 'bigint' attribute)" ); + return false; + } + + // setup groupby attr + int iGroupBy = tSchema.GetAttrIndex ( pQuery->m_sGroupBy.cstr() ); + if ( iGroupBy<0 ) + { + sError.SetSprintf ( "group-by attribute '%s' not found", pQuery->m_sGroupBy.cstr() ); + return false; + } + + ESphAttr eType = tSchema.GetAttr ( iGroupBy ).m_eAttrType; + CSphAttrLocator tLoc = tSchema.GetAttr ( iGroupBy ).m_tLocator; + switch ( pQuery->m_eGroupFunc ) + { + case SPH_GROUPBY_DAY: tSettings.m_pGrouper = new CSphGrouperDay ( tLoc ); break; + case SPH_GROUPBY_WEEK: tSettings.m_pGrouper = new CSphGrouperWeek ( tLoc ); break; + case SPH_GROUPBY_MONTH: tSettings.m_pGrouper = new CSphGrouperMonth ( tLoc ); break; + case SPH_GROUPBY_YEAR: tSettings.m_pGrouper = new CSphGrouperYear ( tLoc ); break; + case SPH_GROUPBY_ATTR: + { + if ( eType!=SPH_ATTR_STRING ) + tSettings.m_pGrouper = new CSphGrouperAttr ( tLoc ); + else + tSettings.m_pGrouper = sphCreateGrouperString ( tLoc, pQuery->m_eCollation ); + } + break; + default: + sError.SetSprintf ( "invalid group-by mode (mode=%d)", pQuery->m_eGroupFunc ); + return false; + } + + tSettings.m_bMVA = ( eType==SPH_ATTR_UINT32SET || eType==SPH_ATTR_UINT64SET ); + tSettings.m_bMva64 = ( eType==SPH_ATTR_UINT64SET ); + + // setup distinct attr + if ( !pQuery->m_sGroupDistinct.IsEmpty() ) + { + int iDistinct = tSchema.GetAttrIndex ( pQuery->m_sGroupDistinct.cstr() ); + if ( iDistinct<0 ) + { + sError.SetSprintf ( "group-count-distinct attribute '%s' not found", pQuery->m_sGroupDistinct.cstr() ); + return false; + } + + tSettings.m_tDistinctLoc = tSchema.GetAttr ( iDistinct ).m_tLocator; + } + + return true; +} + + +static bool FixupDependency ( CSphSchema & tSchema, const int * pAttrs, int iAttrCount ) +{ + assert ( pAttrs ); + + CSphVector dCur; + + // add valid attributes to processing list + for ( int i=0; i=0 ) + dCur.Add ( pAttrs[i] ); + + int iInitialAttrs = dCur.GetLength(); + + // collect columns which affect current expressions + for ( int i=0; iSPH_EVAL_PRESORT && tCol.m_pExpr.Ptr()!=NULL ) + tCol.m_pExpr->GetDependencyColumns ( dCur ); + } + + // get rid of dupes + dCur.Uniq(); + + // fix up of attributes stages + ARRAY_FOREACH ( i, dCur ) + { + int iAttr = dCur[i]; + if ( iAttr<0 ) + continue; + + CSphColumnInfo & tCol = const_cast < CSphColumnInfo & > ( tSchema.GetAttr ( iAttr ) ); + if ( tCol.m_eStage==SPH_EVAL_FINAL ) + tCol.m_eStage = SPH_EVAL_PRESORT; + } + + // it uses attributes if it has dependencies from other attributes + return ( iInitialAttrs>dCur.GetLength() ); +} + + +// expression that transform string pool base + offset -> ptr +struct ExprSortStringAttrFixup_c : public ISphExpr +{ + const BYTE * m_pStrings; ///< string pool; base for offset of string attributes + const CSphAttrLocator m_tLocator; ///< string attribute to fix + + explicit ExprSortStringAttrFixup_c ( const CSphAttrLocator & tLocator ) + : m_pStrings ( NULL ) + , m_tLocator ( tLocator ) + { + } + + virtual float Eval ( const CSphMatch & ) const { assert ( 0 ); return 0.0f; } + + virtual int64_t Int64Eval ( const CSphMatch & tMatch ) const + { + SphAttr_t uOff = tMatch.GetAttr ( m_tLocator ); + return (int64_t)( m_pStrings && uOff ? m_pStrings + uOff : NULL ); + } + + virtual void SetStringPool ( const BYTE * pStrings ) { m_pStrings = pStrings; } +}; + + +static const char g_sIntAttrPrefix[] = "@int_str2ptr_"; + + +bool sphIsSortStringInternal ( const char * sColumnName ) +{ + assert ( sColumnName ); + return ( strncmp ( sColumnName, g_sIntAttrPrefix, sizeof(g_sIntAttrPrefix)-1 )==0 ); +} + + +static bool SetupSortStringRemap ( CSphSchema & tSorterSchema, CSphMatchComparatorState & tState, const int * dAttr ) +{ +#ifndef NDEBUG + int iColWasCount = tSorterSchema.GetAttrsCount(); +#endif + bool bUsesAtrrs = false; + for ( int i=0; i=0 && dAttr[i]m_tLocator ); +} + + +bool sphSortGetStringRemap ( const CSphSchema & tSorterSchema, const CSphSchema & tIndexSchema, CSphVector & dAttrs ) +{ + dAttrs.Resize ( 0 ); + for ( int i=0; im_tLocator; + tRemap.m_tDst = tDst.m_tLocator; + } + + return ( dAttrs.GetLength()>0 ); +} + + +void sphSortRemoveInternalAttrs ( CSphSchema & tSchema ) +{ + int iAttrCount = tSchema.GetAttrsCount(); + // internal attributes last + if ( !tSchema.GetAttrsCount() || !tSchema.GetAttr ( iAttrCount-1 ).m_sName.Begins( g_sIntAttrPrefix ) ) + return; + + // save needed attributes + CSphVector dAttrs ( iAttrCount ); + dAttrs.Resize ( 0 ); + for ( int i=0; i=0x70 && i<=0x7f )*16 ); // 2170..217f, -16 + g_dCollWeights_UTF8CI[i+0x900] = (unsigned short)( 0x2400 + i - ( i>=0xd0 && i<=0xe9 )*26 ); // 24d0..24e9, -26 + g_dCollWeights_UTF8CI[i+0xa00] = (unsigned short)( 0xff00 + i - ( i>=0x41 && i<=0x5a )*32 ); // ff41..ff5a, -32 + } + + // generate planes table + for ( int i=0; i<0x100; i++ ) + g_dCollPlanes_UTF8CI[i] = NULL; + + for ( int i=0; i<0x0b; i++ ) + g_dCollPlanes_UTF8CI [ dWeightPlane[i] ] = g_dCollWeights_UTF8CI + 0x100*i; +} + + +/// collate a single codepoint +static inline int CollateUTF8CI ( int iCode ) +{ + return ( ( iCode>>16 ) || !g_dCollPlanes_UTF8CI [ iCode>>8 ] ) + ? iCode + : g_dCollPlanes_UTF8CI [ iCode>>8 ][ iCode&0xff ]; +} + + +/// utf8_general_ci +int CollateUtf8GeneralCI ( const BYTE * pArg1, const BYTE * pArg2 ) +{ + // some const breakage and mess + // we MUST NOT actually modify the data + // but sphUTF8Decode() calls currently need non-const pointers + BYTE * pStr1 = (BYTE*) pArg1; + BYTE * pStr2 = (BYTE*) pArg2; + int iLen1 = sphUnpackStr ( pStr1, (const BYTE**)&pStr1 ); + int iLen2 = sphUnpackStr ( pStr2, (const BYTE**)&pStr2 ); + + const BYTE * pMax1 = pStr1 + iLen1; + const BYTE * pMax2 = pStr2 + iLen2; + while ( pStr1=pMax1 && pStr2>=pMax2 ) + return 0; + return ( pStr1==pMax1 ) ? 1 : -1; +} + + +///////////////////////////// +// hashing functions +///////////////////////////// + + +class CSphHashLibCS +{ +public: + mutable CSphTightVector m_dBuf; + static const int LOCALE_SAFE_GAP = 16; + + CSphHashLibCS() + { + m_dBuf.Resize ( COLLATE_STACK_BUFFER ); + } + + uint64_t Hash ( const BYTE * pStr, int iLen ) const + { + assert ( pStr && iLen ); + + int iCompositeLen = iLen + 1 + (int)( 3.0f * iLen ) + LOCALE_SAFE_GAP; + if ( m_dBuf.GetLength() ( tLoc ); + else if ( eCollation==SPH_COLLATION_LIBC_CI ) + return new CSphGrouperString ( tLoc ); + else if ( eCollation==SPH_COLLATION_LIBC_CS ) + return new CSphGrouperString ( tLoc ); + else + return new CSphGrouperString ( tLoc ); +} + + +///////////////////////// +// SORTING QUEUE FACTORY +///////////////////////// + +ISphMatchSorter * sphCreateQueue ( const CSphQuery * pQuery, const CSphSchema & tSchema, CSphString & sError, bool bComputeItems, CSphSchema * pExtra ) +{ + // prepare for descent + ISphMatchSorter * pTop = NULL; + CSphMatchComparatorState tStateMatch, tStateGroup; + + sError = ""; + + /////////////////////////////////////// + // build incoming and outgoing schemas + /////////////////////////////////////// + + // sorter schema + // adds computed expressions and groupby stuff on top of the original index schema + CSphSchema tSorterSchema = tSchema; + + // setup overrides, detach them into dynamic part + ARRAY_FOREACH ( i, pQuery->m_dOverrides ) + { + const char * sAttr = pQuery->m_dOverrides[i].m_sAttr.cstr(); + + int iIndex = tSorterSchema.GetAttrIndex ( sAttr ); + if ( iIndex<0 ) + { + sError.SetSprintf ( "override attribute '%s' not found", sAttr ); + return NULL; + } + + CSphColumnInfo tCol = tSorterSchema.GetAttr ( iIndex ); + tCol.m_eStage = SPH_EVAL_OVERRIDE; + tSorterSchema.AddAttr ( tCol, true ); + if ( pExtra ) + pExtra->AddAttr ( tCol, true ); + tSorterSchema.RemoveAttr ( iIndex ); + } + + // setup @geodist + if ( pQuery->m_bGeoAnchor && tSorterSchema.GetAttrIndex ( "@geodist" )<0 ) + { + ExprGeodist_t * pExpr = new ExprGeodist_t (); + if ( !pExpr->Setup ( pQuery, tSorterSchema, sError ) ) + { + pExpr->Release (); + return NULL; + } + CSphColumnInfo tCol ( "@geodist", SPH_ATTR_FLOAT ); + tCol.m_pExpr = pExpr; // takes ownership, no need to for explicit pExpr release + tCol.m_eStage = SPH_EVAL_PREFILTER; // OPTIMIZE? actual stage depends on usage + tSorterSchema.AddAttr ( tCol, true ); + if ( pExtra ) + pExtra->AddAttr ( tCol, true ); + } + + // setup @expr + if ( pQuery->m_eSort==SPH_SORT_EXPR && tSorterSchema.GetAttrIndex ( "@expr" )<0 ) + { + CSphColumnInfo tCol ( "@expr", SPH_ATTR_FLOAT ); // enforce float type for backwards compatibility (ie. too lazy to fix those tests right now) + tCol.m_pExpr = sphExprParse ( pQuery->m_sSortBy.cstr(), tSorterSchema, NULL, NULL, sError, pExtra ); + if ( !tCol.m_pExpr ) + return NULL; + tCol.m_eStage = SPH_EVAL_PRESORT; + tSorterSchema.AddAttr ( tCol, true ); + } + + // expressions from select items + CSphVector dAggregates; + + bool bHasCount = false; + + if ( bComputeItems ) + ARRAY_FOREACH ( iItem, pQuery->m_dItems ) + { + const CSphQueryItem & tItem = pQuery->m_dItems[iItem]; + const CSphString & sExpr = tItem.m_sExpr; + bool bIsCount = IsCount(sExpr); + bHasCount |= bIsCount; + + if ( bIsCount && sExpr.cstr()[0]!='@' ) + { + CSphString & sExprW = const_cast < CSphString & > ( sExpr ); + sExprW = "@count"; + } + + // for now, just always pass "plain" attrs from index to sorter; they will be filtered on searchd level + if ( sExpr=="*" + || ( tSchema.GetAttrIndex ( sExpr.cstr() )>=0 && tItem.m_eAggrFunc==SPH_AGGR_NONE ) + || IsGroupby(sExpr) || bIsCount ) + { + continue; + } + + // not an attribute? must be an expression, and must be aliased + if ( tItem.m_sAlias.IsEmpty() ) + { + sError.SetSprintf ( "expression '%s' must be aliased (use 'expr AS alias' syntax)", tItem.m_sExpr.cstr() ); + return NULL; + } + + // tricky part + // we might be fed with precomputed matches, but it's all or nothing + // the incoming match either does not have anything computed, or it has everything + if ( tSchema.GetAttrsCount()==tSorterSchema.GetAttrsCount() ) + { + // so far we had everything, so we might be precomputed, and the alias just might already exist + int iSuspect = tSchema.GetAttrIndex ( tItem.m_sAlias.cstr() ); + if ( iSuspect>=0 ) + { + // however, let's ensure that it was an expression + if ( tSchema.GetAttr ( iSuspect ).m_pExpr.Ptr()!=NULL ) + continue; + + // otherwise we're not precomputed, *and* have a duplicate name + sError.SetSprintf ( "alias '%s' must be unique (conflicts with an index attribute)", tItem.m_sAlias.cstr() ); + return NULL; + } + } else + { + // we are adding stuff, must not be precomputed, check for both kinds of dupes + if ( tSchema.GetAttrIndex ( tItem.m_sAlias.cstr() )>=0 ) + { + sError.SetSprintf ( "alias '%s' must be unique (conflicts with an index attribute)", tItem.m_sAlias.cstr() ); + return NULL; + } + if ( tSorterSchema.GetAttrIndex ( tItem.m_sAlias.cstr() )>=0 ) + { + sError.SetSprintf ( "alias '%s' must be unique (conflicts with another alias)", tItem.m_sAlias.cstr() ); + return NULL; + } + } + + // a new and shiny expression, lets parse + bool bUsesWeight; + CSphColumnInfo tExprCol ( tItem.m_sAlias.cstr(), SPH_ATTR_NONE ); + tExprCol.m_pExpr = sphExprParse ( sExpr.cstr(), tSorterSchema, &tExprCol.m_eAttrType, &bUsesWeight, sError, pExtra ); + tExprCol.m_eAggrFunc = tItem.m_eAggrFunc; + if ( !tExprCol.m_pExpr ) + { + sError.SetSprintf ( "parse error: %s", sError.cstr() ); + return NULL; + } + + // force AVG() to be computed in floats + if ( tExprCol.m_eAggrFunc==SPH_AGGR_AVG ) + { + tExprCol.m_eAttrType = SPH_ATTR_FLOAT; + tExprCol.m_tLocator.m_iBitCount = 32; + } + + // postpone aggregates, add non-aggregates + if ( tExprCol.m_eAggrFunc==SPH_AGGR_NONE ) + { + // by default, lets be lazy and compute expressions as late as possible + tExprCol.m_eStage = SPH_EVAL_FINAL; + + // is this expression used in filter? + // OPTIMIZE? hash filters and do hash lookups? + ARRAY_FOREACH ( i, pQuery->m_dFilters ) + if ( pQuery->m_dFilters[i].m_sAttrName==tExprCol.m_sName ) + { + if ( bUsesWeight ) + { + tExprCol.m_eStage = SPH_EVAL_PRESORT; // special, weight filter + break; + } + + // usual filter + tExprCol.m_eStage = SPH_EVAL_PREFILTER; + + // so we are about to add a filter condition + // but it might depend on some preceding columns + // lets detect those and move them to prefilter phase too + CSphVector dCur; + tExprCol.m_pExpr->GetDependencyColumns ( dCur ); + + ARRAY_FOREACH ( i, dCur ) + { + CSphColumnInfo & tDep = const_cast < CSphColumnInfo & > ( tSorterSchema.GetAttr ( dCur[i] ) ); + if ( tDep.m_eStage>SPH_EVAL_PREFILTER ) + tDep.m_eStage = SPH_EVAL_PREFILTER; + } + break; + } + + // add it! + // NOTE, "final" stage might need to be fixed up later + // we'll do that when parsing sorting clause + tSorterSchema.AddAttr ( tExprCol, true ); + } else + { + tExprCol.m_eStage = SPH_EVAL_PRESORT; // sorter expects computed expression + dAggregates.Add ( tExprCol ); + } + } + + // expressions wrapped in aggregates must be at the very end of pre-groupby match + ARRAY_FOREACH ( i, dAggregates ) + { + tSorterSchema.AddAttr ( dAggregates[i], true ); + if ( pExtra ) + pExtra->AddAttr ( dAggregates[i], true ); + } + + //////////////////////////////////////////// + // setup groupby settings, create shortcuts + //////////////////////////////////////////// + + CSphGroupSorterSettings tSettings; + if ( !SetupGroupbySettings ( pQuery, tSorterSchema, tSettings, sError ) ) + return NULL; + + const bool bGotGroupby = !pQuery->m_sGroupBy.IsEmpty(); // or else, check in SetupGroupbySettings() would already fail + const bool bGotDistinct = ( tSettings.m_tDistinctLoc.m_iBitOffset>=0 ); + + // now lets add @groupby etc if needed + if ( bGotGroupby && tSorterSchema.GetAttrIndex ( "@groupby" )<0 ) + { + CSphColumnInfo tGroupby ( "@groupby", tSettings.m_pGrouper->GetResultType() ); + CSphColumnInfo tCount ( "@count", SPH_ATTR_INTEGER ); + CSphColumnInfo tDistinct ( "@distinct", SPH_ATTR_INTEGER ); + + tGroupby.m_eStage = SPH_EVAL_SORTER; + tCount.m_eStage = SPH_EVAL_SORTER; + tDistinct.m_eStage = SPH_EVAL_SORTER; + + + tSorterSchema.AddAttr ( tGroupby, true ); + if ( pExtra ) + pExtra->AddAttr ( tGroupby, true ); + tSorterSchema.AddAttr ( tCount, true ); + if ( pExtra ) + pExtra->AddAttr ( tCount, true ); + + if ( bGotDistinct ) + { + tSorterSchema.AddAttr ( tDistinct, true ); + if ( pExtra ) + pExtra->AddAttr ( tDistinct, true ); + } + } + +#define LOC_CHECK(_cond,_msg) if (!(_cond)) { sError = "invalid schema: " _msg; return false; } + + int iGroupby = tSorterSchema.GetAttrIndex ( "@groupby" ); + if ( iGroupby>=0 ) + { + tSettings.m_bDistinct = bGotDistinct; + tSettings.m_tLocGroupby = tSorterSchema.GetAttr ( iGroupby ).m_tLocator; + LOC_CHECK ( tSettings.m_tLocGroupby.m_bDynamic, "@groupby must be dynamic" ); + + int iCount = tSorterSchema.GetAttrIndex ( "@count" ); + LOC_CHECK ( iCount>=0, "missing @count" ); + + tSettings.m_tLocCount = tSorterSchema.GetAttr ( iCount ).m_tLocator; + LOC_CHECK ( tSettings.m_tLocCount.m_bDynamic, "@count must be dynamic" ); + + int iDistinct = tSorterSchema.GetAttrIndex ( "@distinct" ); + if ( bGotDistinct ) + { + LOC_CHECK ( iDistinct>=0, "missing @distinct" ); + tSettings.m_tLocDistinct = tSorterSchema.GetAttr ( iDistinct ).m_tLocator; + LOC_CHECK ( tSettings.m_tLocDistinct.m_bDynamic, "@distinct must be dynamic" ); + } else + { + LOC_CHECK ( iDistinct<=0, "unexpected @distinct" ); + } + } + + if ( bHasCount ) + { + LOC_CHECK ( tSorterSchema.GetAttrIndex ( "@count" )>=0, "Count(*) or @count is queried, but not available in the schema" ); + } + +#undef LOC_CHECK + + //////////////////////////////////// + // choose and setup sorting functor + //////////////////////////////////// + + ESphSortFunc eMatchFunc = FUNC_REL_DESC; + ESphSortFunc eGroupFunc = FUNC_REL_DESC; + bool bUsesAttrs = false; + bool bRandomize = false; + + // matches sorting function + if ( pQuery->m_eSort==SPH_SORT_EXTENDED ) + { + int dAttrs [ CSphMatchComparatorState::MAX_ATTRS ]; + ESortClauseParseResult eRes = sphParseSortClause ( pQuery, pQuery->m_sSortBy.cstr(), tSorterSchema, eMatchFunc, tStateMatch, dAttrs, sError, pExtra ); + if ( eRes==SORT_CLAUSE_ERROR ) + return NULL; + + if ( eRes==SORT_CLAUSE_RANDOM ) + bRandomize = true; + + bUsesAttrs = FixupDependency ( tSorterSchema, dAttrs, CSphMatchComparatorState::MAX_ATTRS ); + + if ( !bUsesAttrs ) + { + for ( int i=0; im_eSort==SPH_SORT_EXPR ) + { + tStateMatch.m_eKeypart[0] = SPH_KEYPART_INT; + tStateMatch.m_tLocator[0] = tSorterSchema.GetAttr ( tSorterSchema.GetAttrIndex ( "@expr" ) ).m_tLocator; + tStateMatch.m_eKeypart[1] = SPH_KEYPART_ID; + tStateMatch.m_uAttrDesc = 1; + eMatchFunc = FUNC_EXPR; + bUsesAttrs = true; + + } else + { + // check sort-by attribute + if ( pQuery->m_eSort!=SPH_SORT_RELEVANCE ) + { + int iSortAttr = tSorterSchema.GetAttrIndex ( pQuery->m_sSortBy.cstr() ); + if ( iSortAttr<0 ) + { + sError.SetSprintf ( "sort-by attribute '%s' not found", pQuery->m_sSortBy.cstr() ); + return NULL; + } + const CSphColumnInfo & tAttr = tSorterSchema.GetAttr ( iSortAttr ); + tStateMatch.m_eKeypart[0] = Attr2Keypart ( tAttr.m_eAttrType ); + tStateMatch.m_tLocator[0] = tAttr.m_tLocator; + + int dAttrs [ CSphMatchComparatorState::MAX_ATTRS ]; + dAttrs[0] = iSortAttr; + bUsesAttrs |= SetupSortStringRemap ( tSorterSchema, tStateMatch, dAttrs ); + } + + // find out what function to use and whether it needs attributes + bUsesAttrs = true; + switch ( pQuery->m_eSort ) + { + case SPH_SORT_ATTR_DESC: eMatchFunc = FUNC_ATTR_DESC; break; + case SPH_SORT_ATTR_ASC: eMatchFunc = FUNC_ATTR_ASC; break; + case SPH_SORT_TIME_SEGMENTS: eMatchFunc = FUNC_TIMESEGS; break; + case SPH_SORT_RELEVANCE: eMatchFunc = FUNC_REL_DESC; bUsesAttrs = false; break; + default: + sError.SetSprintf ( "unknown sorting mode %d", pQuery->m_eSort ); + return NULL; + } + } + + // groups sorting function + if ( bGotGroupby ) + { + int dAttrs [ CSphMatchComparatorState::MAX_ATTRS ]; + ESortClauseParseResult eRes = sphParseSortClause ( pQuery, pQuery->m_sGroupSortBy.cstr(), tSorterSchema, eGroupFunc, tStateGroup, dAttrs, sError, pExtra ); + + if ( eRes==SORT_CLAUSE_ERROR || eRes==SORT_CLAUSE_RANDOM ) + { + if ( eRes==SORT_CLAUSE_RANDOM ) + sError.SetSprintf ( "groups can not be sorted by @random" ); + return NULL; + } + int idx = tSorterSchema.GetAttrIndex ( pQuery->m_sGroupBy.cstr() ); + if ( pExtra ) + pExtra->AddAttr ( tSorterSchema.GetAttr ( idx ), true ); + + FixupDependency ( tSorterSchema, &idx, 1 ); + FixupDependency ( tSorterSchema, dAttrs, CSphMatchComparatorState::MAX_ATTRS ); + + // GroupSortBy str attributes setup + bUsesAttrs |= SetupSortStringRemap ( tSorterSchema, tStateGroup, dAttrs ); + } + + /////////////////// + // spawn the queue + /////////////////// + + if ( !bGotGroupby ) + { + switch ( eMatchFunc ) + { + case FUNC_REL_DESC: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_ATTR_DESC:pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_ATTR_ASC: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_TIMESEGS: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_GENERIC2: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_GENERIC3: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_GENERIC4: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_GENERIC5: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_CUSTOM: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + case FUNC_EXPR: pTop = new CSphMatchQueue ( pQuery->m_iMaxMatches, bUsesAttrs ); break; + default: pTop = NULL; + } + } else + { + pTop = sphCreateSorter1st ( eMatchFunc, eGroupFunc, pQuery, tSettings ); + } + + if ( !pTop ) + { + sError.SetSprintf ( "internal error: unhandled sorting mode (match-sort=%d, group=%d, group-sort=%d)", + eMatchFunc, bGotGroupby, eGroupFunc ); + return NULL; + } + + switch ( pQuery->m_eCollation ) + { + case SPH_COLLATION_LIBC_CI: + tStateMatch.m_fnStrCmp = CollateLibcCI; + tStateGroup.m_fnStrCmp = CollateLibcCI; + break; + case SPH_COLLATION_LIBC_CS: + tStateMatch.m_fnStrCmp = CollateLibcCS; + tStateGroup.m_fnStrCmp = CollateLibcCS; + break; + case SPH_COLLATION_UTF8_GENERAL_CI: + tStateMatch.m_fnStrCmp = CollateUtf8GeneralCI; + tStateGroup.m_fnStrCmp = CollateUtf8GeneralCI; + break; + case SPH_COLLATION_BINARY: + tStateMatch.m_fnStrCmp = CollateBinary; + tStateGroup.m_fnStrCmp = CollateBinary; + break; + } + + assert ( pTop ); + pTop->SetState ( tStateMatch ); + pTop->SetGroupState ( tStateGroup ); + pTop->SetSchema ( tSorterSchema ); + pTop->m_bRandomize = bRandomize; + + if ( bRandomize ) + sphAutoSrand (); + + return pTop; +} + + +void sphFlattenQueue ( ISphMatchSorter * pQueue, CSphQueryResult * pResult, int iTag ) +{ + if ( pQueue && pQueue->GetLength() ) + { + int iOffset = pResult->m_dMatches.GetLength (); + pResult->m_dMatches.Resize ( iOffset + pQueue->GetLength() ); + pQueue->Flatten ( &pResult->m_dMatches[iOffset], iTag ); + } +} + + +bool sphHasExpressions ( const CSphQuery & tQuery, const CSphSchema & tSchema ) +{ + ARRAY_FOREACH ( i, tQuery.m_dItems ) + { + const CSphString & sExpr = tQuery.m_dItems[i].m_sExpr; + + if ( !( sExpr=="*" + || ( tSchema.GetAttrIndex ( sExpr.cstr() )>=0 && tQuery.m_dItems[i].m_eAggrFunc==SPH_AGGR_NONE && tQuery.m_dItems[i].m_sAlias.IsEmpty() ) + || IsGroupbyMagic(sExpr) ) ) + return true; + } + + return false; +} + + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxsort.o b/coreseek/csft-4.1/src/sphinxsort.o new file mode 100644 index 0000000..b6a4e99 Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxsort.o differ diff --git a/coreseek/csft-4.1/src/sphinxsoundex.cpp b/coreseek/csft-4.1/src/sphinxsoundex.cpp new file mode 100755 index 0000000..7d0d7c9 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxsoundex.cpp @@ -0,0 +1,48 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" + +void stem_soundex ( BYTE * pWord ) +{ + static BYTE dLetter2Code[27] = "01230120022455012623010202"; + + // check if the word only contains lowercase English letters + BYTE * p = pWord; + while ( *p>='a' && *p<='z' ) + p++; + if ( *p ) + return; + + // do soundex + p = pWord+1; + BYTE * pOut = pWord+1; + while ( *p ) + { + BYTE c = dLetter2Code [ (*p)-'a' ]; + if ( c!='0' && pOut[-1]!=c ) + *pOut++ = c; + p++; + } + + while ( pOut-pWord<4 && pOut

    // for gettimeofday +#endif + +#include "py_layer.h" + +static int g_iThreadStackSize = 65536; + +////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS +#ifndef NDEBUG + +void sphAssert ( const char * sExpr, const char * sFile, int iLine ) +{ + char sBuffer [ 1024 ]; + _snprintf ( sBuffer, sizeof(sBuffer), "%s(%d): assertion %s failed\n", sFile, iLine, sExpr ); + + if ( MessageBox ( NULL, sBuffer, "Assert failed! Cancel to debug.", + MB_OKCANCEL | MB_TOPMOST | MB_SYSTEMMODAL | MB_ICONEXCLAMATION )!=IDOK ) + { + __debugbreak (); + } else + { + fprintf ( stdout, "%s", sBuffer ); + exit ( 1 ); + } +} + +#endif // !NDEBUG +#endif // USE_WINDOWS + +///////////////////////////////////////////////////////////////////////////// +// DEBUG MEMORY MANAGER +///////////////////////////////////////////////////////////////////////////// + +#if SPH_DEBUG_LEAKS + +#undef new +#define SPH_DEBUG_DOFREE 1 // 0 will not actually free returned blocks; helps to catch double deletes etc + +const DWORD MEMORY_MAGIC_PLAIN = 0xbbbbbbbbUL; +const DWORD MEMORY_MAGIC_ARRAY = 0xaaaaaaaaUL; +const DWORD MEMORY_MAGIC_END = 0xeeeeeeeeUL; +const DWORD MEMORY_MAGIC_DELETED = 0xdedededeUL; + + +struct CSphMemHeader +{ + DWORD m_uMagic; + const char * m_sFile; + int m_iLine; + size_t m_iSize; + int m_iAllocId; + CSphMemHeader * m_pNext; + CSphMemHeader * m_pPrev; +}; + +static CSphStaticMutex g_tAllocsMutex; + +static int g_iCurAllocs = 0; +static int g_iAllocsId = 0; +static CSphMemHeader * g_pAllocs = NULL; +static int64_t g_iCurBytes = 0; +static int g_iTotalAllocs = 0; +static int g_iPeakAllocs = 0; +static int64_t g_iPeakBytes = 0; + +void * sphDebugNew ( size_t iSize, const char * sFile, int iLine, bool bArray ) +{ + BYTE * pBlock = (BYTE*) ::malloc ( iSize+sizeof(CSphMemHeader)+sizeof(DWORD) ); + if ( !pBlock ) + sphDie ( "out of memory (unable to allocate "UINT64_FMT" bytes)", (uint64_t)iSize ); // FIXME! this may fail with malloc error too + + *(DWORD*)( pBlock+iSize+sizeof(CSphMemHeader) ) = MEMORY_MAGIC_END; + g_tAllocsMutex.Lock(); + + CSphMemHeader * pHeader = (CSphMemHeader*) pBlock; + pHeader->m_uMagic = bArray ? MEMORY_MAGIC_ARRAY : MEMORY_MAGIC_PLAIN; + pHeader->m_sFile = sFile; + pHeader->m_iLine = iLine; + pHeader->m_iSize = iSize; + pHeader->m_iAllocId = ++g_iAllocsId; + pHeader->m_pNext = g_pAllocs; + pHeader->m_pPrev = NULL; + if ( g_pAllocs ) + { + assert ( !g_pAllocs->m_pPrev ); + g_pAllocs->m_pPrev = pHeader; + } + g_pAllocs = pHeader; + + g_iCurAllocs++; + g_iCurBytes += iSize; + + g_iTotalAllocs++; + g_iPeakAllocs = Max ( g_iPeakAllocs, g_iCurAllocs ); + g_iPeakBytes = Max ( g_iPeakBytes, g_iCurBytes ); + + g_tAllocsMutex.Unlock(); + return pHeader+1; +} + + +void sphDebugDelete ( void * pPtr, bool bArray ) +{ + if ( !pPtr ) + return; + g_tAllocsMutex.Lock(); + + CSphMemHeader * pHeader = ((CSphMemHeader*)pPtr)-1; + switch ( pHeader->m_uMagic ) + { + case MEMORY_MAGIC_ARRAY: + if ( !bArray ) + sphDie ( "delete [] on non-array block %d allocated at %s(%d)", + pHeader->m_iAllocId, pHeader->m_sFile, pHeader->m_iLine ); + break; + + case MEMORY_MAGIC_PLAIN: + if ( bArray ) + sphDie ( "delete on array block %d allocated at %s(%d)", + pHeader->m_iAllocId, pHeader->m_sFile, pHeader->m_iLine ); + break; + + case MEMORY_MAGIC_DELETED: + sphDie ( "double delete on block %d allocated at %s(%d)", + pHeader->m_iAllocId, pHeader->m_sFile, pHeader->m_iLine ); + break; + + default: + sphDie ( "delete on unmanaged block at 0x%08x", pPtr ); + return; + } + + BYTE * pBlock = (BYTE*) pHeader; + if ( *(DWORD*)( pBlock+pHeader->m_iSize+sizeof(CSphMemHeader) )!=MEMORY_MAGIC_END ) + sphDie ( "out-of-bounds write beyond block %d allocated at %s(%d)", + pHeader->m_iAllocId, pHeader->m_sFile, pHeader->m_iLine ); + + // unchain + if ( pHeader==g_pAllocs ) + g_pAllocs = g_pAllocs->m_pNext; + + if ( pHeader->m_pPrev ) + { + assert ( pHeader->m_pPrev->m_uMagic==MEMORY_MAGIC_PLAIN || pHeader->m_pPrev->m_uMagic==MEMORY_MAGIC_ARRAY ); + pHeader->m_pPrev->m_pNext = pHeader->m_pNext; + } + if ( pHeader->m_pNext ) + { + assert ( pHeader->m_pNext->m_uMagic==MEMORY_MAGIC_PLAIN || pHeader->m_pNext->m_uMagic==MEMORY_MAGIC_ARRAY ); + pHeader->m_pNext->m_pPrev = pHeader->m_pPrev; + } + + pHeader->m_pPrev = NULL; + pHeader->m_pNext = NULL; + + // mark and delete + pHeader->m_uMagic = MEMORY_MAGIC_DELETED; + + g_iCurAllocs--; + g_iCurBytes -= pHeader->m_iSize; + +#if SPH_DEBUG_DOFREE + ::free ( pHeader ); +#endif + + g_tAllocsMutex.Unlock(); +} + + +int64_t sphAllocBytes () +{ + return g_iCurBytes; +} + + +int sphAllocsCount () +{ + return g_iCurAllocs; +} + + +int sphAllocsLastID () +{ + return g_iAllocsId; +} + + +void sphAllocsDump ( int iFile, int iSinceID ) +{ + g_tAllocsMutex.Lock(); + + sphSafeInfo ( iFile, "--- dumping allocs since %d ---\n", iSinceID ); + + uint64_t iTotalBytes = 0; + int iTotal = 0; + + for ( CSphMemHeader * pHeader = g_pAllocs; + pHeader && pHeader->m_iAllocId > iSinceID; + pHeader = pHeader->m_pNext ) + { + sphSafeInfo ( iFile, "alloc %d at %s(%d): %d bytes\n", pHeader->m_iAllocId, + pHeader->m_sFile, pHeader->m_iLine, (int)pHeader->m_iSize ); + + iTotalBytes += pHeader->m_iSize; + iTotal++; + } + + sphSafeInfo ( iFile, "total allocs %d: %d.%03d bytes", iTotal, (int)(iTotalBytes/1024), (int)(iTotalBytes%1000) ); + sphSafeInfo ( iFile, "--- end of dump ---\n" ); + + g_tAllocsMutex.Unlock(); +} + + +void sphAllocsStats () +{ + fprintf ( stdout, "--- total-allocs=%d, peak-allocs=%d, peak-bytes="INT64_FMT"\n", + g_iTotalAllocs, g_iPeakAllocs, g_iPeakBytes ); +} + + +void sphAllocsCheck () +{ + g_tAllocsMutex.Lock(); + for ( CSphMemHeader * pHeader=g_pAllocs; pHeader; pHeader=pHeader->m_pNext ) + { + BYTE * pBlock = (BYTE*) pHeader; + + if (!( pHeader->m_uMagic==MEMORY_MAGIC_ARRAY || pHeader->m_uMagic==MEMORY_MAGIC_PLAIN )) + sphDie ( "corrupted header in block %d allocated at %s(%d)", + pHeader->m_iAllocId, pHeader->m_sFile, pHeader->m_iLine ); + + if ( *(DWORD*)( pBlock+pHeader->m_iSize+sizeof(CSphMemHeader) )!=MEMORY_MAGIC_END ) + sphDie ( "out-of-bounds write beyond block %d allocated at %s(%d)", + pHeader->m_iAllocId, pHeader->m_sFile, pHeader->m_iLine ); + } + g_tAllocsMutex.Unlock(); +} + +void sphMemStatInit () {} +void sphMemStatDone () {} +void sphMemStatDump ( int ) {} + +////////////////////////////////////////////////////////////////////////// + +void * operator new ( size_t iSize, const char * sFile, int iLine ) +{ + return sphDebugNew ( iSize, sFile, iLine, false ); +} + + +void * operator new [] ( size_t iSize, const char * sFile, int iLine ) +{ + return sphDebugNew ( iSize, sFile, iLine, true ); +} + + +void operator delete ( void * pPtr ) +{ + sphDebugDelete ( pPtr, false ); +} + + +void operator delete [] ( void * pPtr ) +{ + sphDebugDelete ( pPtr, true ); +} + +////////////////////////////////////////////////////////////////////////////// +// ALLOCACTIONS COUNT/SIZE PROFILER +////////////////////////////////////////////////////////////////////////////// + +#else +#if SPH_ALLOCS_PROFILER + +#undef new + +static CSphStaticMutex g_tAllocsMutex; +static int g_iAllocsId = 0; +static int g_iCurAllocs = 0; +static int64_t g_iCurBytes = 0; +static int g_iTotalAllocs = 0; +static int g_iPeakAllocs = 0; +static int64_t g_iPeakBytes = 0; + +// statictic's per memory category +struct MemCategorized_t +{ + int64_t m_iSize; + int m_iCount; + + MemCategorized_t() + : m_iSize ( 0 ) + , m_iCount ( 0 ) + { + } +}; + +static Memory::Category_e sphMemStatGet (); + +// memory categories storage +static MemCategorized_t g_dMemCategoryStat[Memory::SPH_MEM_TOTAL]; + +////////////////////////////////////////////////////////////////////////// +// ALLOCATIONS COUNT/SIZE PROFILER +////////////////////////////////////////////////////////////////////////// + +void * sphDebugNew ( size_t iSize ) +{ + BYTE * pBlock = (BYTE*) ::malloc ( iSize+sizeof(size_t)*2 ); + if ( !pBlock ) + sphDie ( "out of memory (unable to allocate %"PRIu64" bytes)", (uint64_t)iSize ); // FIXME! this may fail with malloc error too + + const int iMemType = sphMemStatGet(); + assert ( iMemType>=0 && iMemType=0 && iMemType=0 && eCategory=0 && eCategory=0 ); + assert ( m_dStack[m_iDepth]==eCategory ); + m_iDepth--; + } + + Memory::Category_e Top () const + { + assert ( m_iDepth>= 0 && m_iDepth=0 && m_dStack[m_iDepth]Reset(); + + Verify ( sphThreadSet ( g_tTLSMemCategory, pTLS ) ); + return pTLS; +} + +// per thread cleanup of memory statistic's +static void sphMemStatThdCleanup ( MemCategoryStack_t * pTLS ) +{ + sphDebugDelete ( pTLS ); +} + +// init of memory statistic's data +static void sphMemStatInit () +{ + Verify ( sphThreadKeyCreate ( &g_tTLSMemCategory ) ); + + // main thread statistic's creation + assert ( g_pMainTLS==NULL ); + g_pMainTLS = sphMemStatThdInit(); + assert ( g_pMainTLS!=NULL ); +} + +// cleanup of memory statistic's data +static void sphMemStatDone () +{ + assert ( g_pMainTLS!=NULL ); + sphMemStatThdCleanup ( g_pMainTLS ); + + sphThreadKeyDelete ( g_tTLSMemCategory ); +} + +// direct access for special category +void sphMemStatMMapAdd ( int64_t iSize ) +{ + g_tAllocsMutex.Lock (); + + g_iCurAllocs++; + g_iCurBytes += iSize; + g_iTotalAllocs++; + g_iPeakAllocs = Max ( g_iCurAllocs, g_iPeakAllocs ); + g_iPeakBytes = Max ( g_iCurBytes, g_iPeakBytes ); + + g_dMemCategoryStat[Memory::SPH_MEM_MMAPED].m_iSize += iSize; + g_dMemCategoryStat[Memory::SPH_MEM_MMAPED].m_iCount++; + + g_tAllocsMutex.Unlock (); +} + +void sphMemStatMMapDel ( int64_t iSize ) +{ + g_tAllocsMutex.Lock (); + + g_iCurAllocs--; + g_iCurBytes -= iSize; + + g_dMemCategoryStat[Memory::SPH_MEM_MMAPED].m_iSize -= iSize; + g_dMemCategoryStat[Memory::SPH_MEM_MMAPED].m_iCount--; + + g_tAllocsMutex.Unlock (); +} + +// push new category on arrival +void sphMemStatPush ( Memory::Category_e eCategory ) +{ + MemCategoryStack_t * pTLS = (MemCategoryStack_t*) sphThreadGet ( g_tTLSMemCategory ); + if ( pTLS ) + pTLS->Push ( eCategory ); +}; + +// restore last category +void sphMemStatPop ( Memory::Category_e eCategory ) +{ + MemCategoryStack_t * pTLS = (MemCategoryStack_t*) sphThreadGet ( g_tTLSMemCategory ); + if ( pTLS ) + pTLS->Pop ( eCategory ); +}; + +// get current category +static Memory::Category_e sphMemStatGet () +{ + MemCategoryStack_t * pTLS = (MemCategoryStack_t*) sphThreadGet ( g_tTLSMemCategory ); + return pTLS ? pTLS->Top() : Memory::SPH_MEM_CORE; +} + +// human readable category names +static const char* g_dMemCategoryName[] = { + "core" + , "index_disk", "index_rt", "index_rt_accum" + , "mmaped", "binlog" + , "hnd_disk", "hnd_sql" + , "search_disk", "query_disk", "insert_sql", "select_sql", "delete_sql", "commit_set_sql", "commit_start_t_sql", "commit_sql" + , "mquery_disk", "mqueryex_disk", "mquery_rt" + , "rt_res_matches", "rt_res_strings" + }; +STATIC_ASSERT ( sizeof(g_dMemCategoryName)/sizeof(g_dMemCategoryName[0])==Memory::SPH_MEM_TOTAL, MEM_STAT_NAME_MISMATCH ); + +// output of memory statistic's +void sphMemStatDump ( int iFD ) +{ + int64_t iSize = 0; + int iCount = 0; + for ( int i=0; i0 ) + { + iSize = (int64_t) g_dMemCategoryStat[i].m_iSize; + sphSafeInfo ( iFD, "%-24s allocs-count=%d, mem-total=%d.%d Mb", + g_dMemCategoryName[i], g_dMemCategoryStat[i].m_iCount, + (int)(iSize/1048576), (int)( (iSize*10/1048576)%10 ) ); + } +} + +////////////////////////////////////////////////////////////////////////////// +// PRODUCTION MEMORY MANAGER +////////////////////////////////////////////////////////////////////////////// + +#else + +void * operator new ( size_t iSize ) +{ + void * pResult = ::malloc ( iSize ); + if ( !pResult ) + sphDie ( "out of memory (unable to allocate "UINT64_FMT" bytes)", (uint64_t)iSize ); // FIXME! this may fail with malloc error too + return pResult; +} + + +void * operator new [] ( size_t iSize ) +{ + void * pResult = ::malloc ( iSize ); + if ( !pResult ) + sphDie ( "out of memory (unable to allocate "UINT64_FMT" bytes)", (uint64_t)iSize ); // FIXME! this may fail with malloc error too + return pResult; +} + +void operator delete ( void * pPtr ) throw() +{ + if ( pPtr ) + ::free ( pPtr ); +} + + +void operator delete [] ( void * pPtr ) throw() +{ + if ( pPtr ) + ::free ( pPtr ); +} + +#endif // SPH_ALLOCS_PROFILER +#endif // SPH_DEBUG_LEAKS + +////////////////////////////////////////////////////////////////////////// + +// now let the rest of sphinxstd use proper new +#if SPH_DEBUG_LEAKS || SPH_ALLOCS_PROFILER +#undef new +#define new new(__FILE__,__LINE__) +#endif + +///////////////////////////////////////////////////////////////////////////// +// HELPERS +///////////////////////////////////////////////////////////////////////////// + +static SphDieCallback_t g_pfDieCallback = NULL; + + +void sphSetDieCallback ( SphDieCallback_t pfDieCallback ) +{ + g_pfDieCallback = pfDieCallback; +} + + +void sphDie ( const char * sTemplate, ... ) +{ + char sBuf[256]; + + va_list ap; + va_start ( ap, sTemplate ); + vsnprintf ( sBuf, sizeof(sBuf), sTemplate, ap ); + va_end ( ap ); + + // if there's no callback, + // or if callback returns true, + // log to stdout + if ( !g_pfDieCallback || g_pfDieCallback ( sBuf ) ) + fprintf ( stdout, "FATAL: %s\n", sBuf ); + +#if USE_PYTHON + cftShutdown(); //clean up +#endif + + exit ( 1 ); +} + +////////////////////////////////////////////////////////////////////////// +// RANDOM NUMBERS GENERATOR +////////////////////////////////////////////////////////////////////////// + +/// MWC (Multiply-With-Carry) RNG, invented by George Marsaglia +static DWORD g_dRngState[5] = { 0x95d3474bUL, 0x035cf1f7UL, 0xfd43995fUL, 0x5dfc55fbUL, 0x334a9229UL }; + + +/// seed +void sphSrand ( DWORD uSeed ) +{ + for ( int i=0; i<5; i++ ) + { + uSeed = uSeed*29943829 - 1; + g_dRngState[i] = uSeed; + } + for ( int i=0; i<19; i++ ) + sphRand(); +} + + +/// auto-seed RNG based on time and PID +void sphAutoSrand () +{ + // get timestamp +#if !USE_WINDOWS + struct timeval tv; + gettimeofday ( &tv, NULL ); +#else + #define getpid() GetCurrentProcessId() + + struct + { + time_t tv_sec; + DWORD tv_usec; + } tv; + + FILETIME ft; + GetSystemTimeAsFileTime ( &ft ); + + uint64_t ts = ( uint64_t(ft.dwHighDateTime)<<32 ) + uint64_t(ft.dwLowDateTime) - 116444736000000000ULL; // Jan 1, 1970 magic + ts /= 10; // to microseconds + tv.tv_sec = (DWORD)(ts/1000000); + tv.tv_usec = (DWORD)(ts%1000000); +#endif + + // twist and shout + sphSrand ( sphRand() ^ DWORD(tv.tv_sec) ^ (DWORD(tv.tv_usec) + DWORD(getpid())) ); +} + + +/// generate another dword +DWORD sphRand () +{ + uint64_t uSum; + uSum = + (uint64_t)g_dRngState[0] * (uint64_t)5115 + + (uint64_t)g_dRngState[1] * (uint64_t)1776 + + (uint64_t)g_dRngState[2] * (uint64_t)1492 + + (uint64_t)g_dRngState[3] * (uint64_t)2111111111UL + + (uint64_t)g_dRngState[4]; + g_dRngState[3] = g_dRngState[2]; + g_dRngState[2] = g_dRngState[1]; + g_dRngState[1] = g_dRngState[0]; + g_dRngState[4] = (DWORD)( uSum>>32 ); + g_dRngState[0] = (DWORD)uSum; + return g_dRngState[0]; +} + +////////////////////////////////////////////////////////////////////////// + +#if !USE_WINDOWS +CSphProcessSharedMutex::CSphProcessSharedMutex ( int iExtraSize ) +{ + m_pMutex = NULL; + + pthread_mutexattr_t tAttr; + if ( pthread_mutexattr_init ( &tAttr ) || pthread_mutexattr_setpshared ( &tAttr, PTHREAD_PROCESS_SHARED ) ) + return; + + CSphString sError, sWarning; + if ( !m_pStorage.Alloc ( sizeof(pthread_mutex_t) + iExtraSize, sError, sWarning ) ) + return; + + m_pMutex = (pthread_mutex_t*) m_pStorage.GetWritePtr (); + if ( pthread_mutex_init ( m_pMutex, &tAttr ) ) + { + m_pMutex = NULL; + m_pStorage.Reset (); + return; + } +} +#else +CSphProcessSharedMutex::CSphProcessSharedMutex ( int ) +{} +#endif + + +void CSphProcessSharedMutex::Lock () const +{ +#if !USE_WINDOWS + if ( m_pMutex ) + pthread_mutex_lock ( m_pMutex ); +#endif +} + + +void CSphProcessSharedMutex::Unlock () const +{ +#if !USE_WINDOWS + if ( m_pMutex ) + pthread_mutex_unlock ( m_pMutex ); +#endif +} + +#if !USE_WINDOWS +bool CSphProcessSharedMutex::TimedLock ( int tmSpin ) const +{ + struct timespec tp; + tp.tv_sec = 0; + tp.tv_nsec = tmSpin * 1000; + if ( m_pMutex ) + { +#if HAVE_PTHREAD_MUTEX_TIMEDLOCK + return ( pthread_mutex_timedlock ( m_pMutex, &tp )==0 ); +#else + int iRes = EBUSY; + int64_t tmTill = sphMicroTimer() + tmSpin; + do + { + iRes = pthread_mutex_trylock ( m_pMutex ); + if ( iRes==EBUSY ) + { + sphSleepMsec ( 0 ); + } + } + while ( iRes==EBUSY && sphMicroTimer()m_pCall ( pCall->m_pArg ); + SafeDelete ( pCall ); + + ThreadCall_t * pCleanup = (ThreadCall_t*) sphThreadGet ( g_tThreadCleanupKey ); + while ( pCleanup ) + { + pCall = pCleanup; + pCall->m_pCall ( pCall->m_pArg ); + pCleanup = pCall->m_pNext; + SafeDelete ( pCall ); + } + +#if SPH_ALLOCS_PROFILER + sphMemStatThdCleanup ( pTLS ); +#endif + + return 0; +} + +#if !USE_WINDOWS +void * sphThreadInit ( bool bDetached ) +#else +void * sphThreadInit ( bool ) +#endif +{ + static bool bInit = false; +#if !USE_WINDOWS + static pthread_attr_t tJoinableAttr; + static pthread_attr_t tDetachedAttr; +#endif + + if ( !bInit ) + { +#if SPH_DEBUG_LEAKS || SPH_ALLOCS_PROFILER + sphMemStatInit(); +#endif + + // we're single-threaded yet, right?! + if ( !sphThreadKeyCreate ( &g_tThreadCleanupKey ) ) + sphDie ( "FATAL: sphThreadKeyCreate() failed" ); + + if ( !sphThreadKeyCreate ( &g_tMyThreadStack ) ) + sphDie ( "FATAL: sphThreadKeyCreate() failed" ); + +#if !USE_WINDOWS + if ( pthread_attr_init ( &tJoinableAttr ) ) + sphDie ( "FATAL: pthread_attr_init( joinable ) failed" ); + + if ( pthread_attr_init ( &tDetachedAttr ) ) + sphDie ( "FATAL: pthread_attr_init( detached ) failed" ); + + if ( pthread_attr_setdetachstate ( &tDetachedAttr, PTHREAD_CREATE_DETACHED ) ) + sphDie ( "FATAL: pthread_attr_setdetachstate( detached ) failed" ); +#endif + bInit = true; + } +#if !USE_WINDOWS + if ( pthread_attr_setstacksize ( &tJoinableAttr, sphMyStackSize() ) ) + sphDie ( "FATAL: pthread_attr_setstacksize( joinable ) failed" ); + + if ( pthread_attr_setstacksize ( &tDetachedAttr, sphMyStackSize() ) ) + sphDie ( "FATAL: pthread_attr_setstacksize( detached ) failed" ); + + return bDetached ? &tDetachedAttr : &tJoinableAttr; +#else + return NULL; +#endif +} + + +#if SPH_DEBUG_LEAKS || SPH_ALLOCS_PROFILER +void sphThreadDone ( int iFD ) +{ + sphMemStatDump ( iFD ); + sphMemStatDone(); +} +#else +void sphThreadDone ( int ) +{ +} +#endif + + +bool sphThreadCreate ( SphThread_t * pThread, void (*fnThread)(void*), void * pArg, bool bDetached ) +{ + // we can not merely put this on current stack + // as it might get destroyed before wrapper sees it + ThreadCall_t * pCall = new ThreadCall_t; + pCall->m_pCall = fnThread; + pCall->m_pArg = pArg; + pCall->m_pNext = NULL; + + // create thread +#if USE_WINDOWS + sphThreadInit ( bDetached ); + *pThread = CreateThread ( NULL, sphMyStackSize(), sphThreadProcWrapper, pCall, 0, NULL ); + if ( *pThread ) + return true; +#else + void * pAttr = sphThreadInit ( bDetached ); + errno = pthread_create ( pThread, (pthread_attr_t*) pAttr, sphThreadProcWrapper, pCall ); + if ( !errno ) + return true; +#endif + + // thread creation failed so we need to cleanup ourselves + SafeDelete ( pCall ); + return false; +} + + +bool sphThreadJoin ( SphThread_t * pThread ) +{ +#if USE_WINDOWS + DWORD uWait = WaitForSingleObject ( *pThread, INFINITE ); + CloseHandle ( *pThread ); + *pThread = NULL; + return ( uWait==WAIT_OBJECT_0 || uWait==WAIT_ABANDONED ); +#else + return pthread_join ( *pThread, NULL )==0; +#endif +} + + +void sphThreadOnExit ( void (*fnCleanup)(void*), void * pArg ) +{ + ThreadCall_t * pCleanup = new ThreadCall_t; + pCleanup->m_pCall = fnCleanup; + pCleanup->m_pArg = pArg; + pCleanup->m_pNext = (ThreadCall_t*) sphThreadGet ( g_tThreadCleanupKey ); + sphThreadSet ( g_tThreadCleanupKey, pCleanup ); +} + + +bool sphThreadKeyCreate ( SphThreadKey_t * pKey ) +{ +#if USE_WINDOWS + *pKey = TlsAlloc(); + return *pKey!=TLS_OUT_OF_INDEXES; +#else + return pthread_key_create ( pKey, NULL )==0; +#endif +} + + +void sphThreadKeyDelete ( SphThreadKey_t tKey ) +{ +#if USE_WINDOWS + TlsFree ( tKey ); +#else + pthread_key_delete ( tKey ); +#endif +} + + +void * sphThreadGet ( SphThreadKey_t tKey ) +{ +#if USE_WINDOWS + return TlsGetValue ( tKey ); +#else + return pthread_getspecific ( tKey ); +#endif +} + +void * sphMyStack () +{ + return sphThreadGet ( g_tMyThreadStack ); +} + +int sphMyStackSize () +{ +#if USE_WINDOWS + return g_iThreadStackSize; +#else + return PTHREAD_STACK_MIN + g_iThreadStackSize; +#endif +} + +void sphSetMyStackSize ( int iStackSize ) +{ + g_iThreadStackSize = iStackSize; + sphThreadInit ( false ); +} + + +void MemorizeStack ( void* PStack ) +{ + sphThreadSet ( g_tMyThreadStack, PStack ); +} + + +bool sphThreadSet ( SphThreadKey_t tKey, void * pValue ) +{ +#if USE_WINDOWS + return TlsSetValue ( tKey, pValue )!=FALSE; +#else + return pthread_setspecific ( tKey, pValue )==0; +#endif +} + +#if !USE_WINDOWS +bool sphIsLtLib() +{ +#ifndef _CS_GNU_LIBPTHREAD_VERSION + return false; +#else + char buff[64]; + confstr ( _CS_GNU_LIBPTHREAD_VERSION, buff, 64 ); + + if ( !strncasecmp ( buff, "linuxthreads", 12 ) ) + return true; + return false; +#endif +} +#endif + +////////////////////////////////////////////////////////////////////////// +// MUTEX +////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS + +// Windows mutex implementation + +bool CSphMutex::Init () +{ + m_hMutex = CreateMutex ( NULL, FALSE, NULL ); + m_bInitialized = ( m_hMutex!=NULL ); + return m_bInitialized; +} + +bool CSphMutex::Done () +{ + if ( !m_bInitialized ) + return true; + + m_bInitialized = false; + return CloseHandle ( m_hMutex )==TRUE; +} + +bool CSphMutex::Lock () +{ + DWORD uWait = WaitForSingleObject ( m_hMutex, INFINITE ); + return ( uWait!=WAIT_FAILED && uWait!=WAIT_TIMEOUT ); +} + +bool CSphMutex::Unlock () +{ + return ReleaseMutex ( m_hMutex )==TRUE; +} + +#else + +// UNIX mutex implementation + +bool CSphMutex::Init () +{ + m_bInitialized = ( pthread_mutex_init ( &m_tMutex, NULL )==0 ); + return m_bInitialized; +} + +bool CSphMutex::Done () +{ + if ( !m_bInitialized ) + return true; + + m_bInitialized = false; + return pthread_mutex_destroy ( &m_tMutex )==0; +} + +bool CSphMutex::Lock () +{ + return ( pthread_mutex_lock ( &m_tMutex )==0 ); +} + +bool CSphMutex::Unlock () +{ + return ( pthread_mutex_unlock ( &m_tMutex )==0 ); +} + +#endif + +////////////////////////////////////////////////////////////////////////// +// RWLOCK +////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS + +// Windows rwlock implementation + +CSphRwlock::CSphRwlock () + : m_hWriteMutex ( NULL ) + , m_hReadEvent ( NULL ) + , m_iReaders ( 0 ) +{} + + +bool CSphRwlock::Init () +{ + assert ( !m_hWriteMutex && !m_hReadEvent && !m_iReaders ); + + m_hReadEvent = CreateEvent ( NULL, TRUE, FALSE, NULL ); + if ( !m_hReadEvent ) + return false; + + m_hWriteMutex = CreateMutex ( NULL, FALSE, NULL ); + if ( !m_hWriteMutex ) + { + CloseHandle ( m_hReadEvent ); + m_hReadEvent = NULL; + return false; + } + return true; +} + + +bool CSphRwlock::Done () +{ + if ( !CloseHandle ( m_hReadEvent ) ) + return false; + m_hReadEvent = NULL; + + if ( !CloseHandle ( m_hWriteMutex ) ) + return false; + m_hWriteMutex = NULL; + + m_iReaders = 0; + return true; +} + + +bool CSphRwlock::ReadLock () +{ + DWORD uWait = WaitForSingleObject ( m_hWriteMutex, INFINITE ); + if ( uWait==WAIT_FAILED || uWait==WAIT_TIMEOUT ) + return false; + + // got the writer mutex, can't be locked for write + // so it's OK to add the reader lock, then free the writer mutex + // writer mutex also protects readers counter + InterlockedIncrement ( &m_iReaders ); + + // reset writer lock event, we just got ourselves a reader + if ( !ResetEvent ( m_hReadEvent ) ) + return false; + + // release writer lock + return ReleaseMutex ( m_hWriteMutex )==TRUE; +} + + +bool CSphRwlock::WriteLock () +{ + // try to acquire writer mutex + DWORD uWait = WaitForSingleObject ( m_hWriteMutex, INFINITE ); + if ( uWait==WAIT_FAILED || uWait==WAIT_TIMEOUT ) + return false; + + // got the writer mutex, no pending readers, rock'n'roll + if ( !m_iReaders ) + return true; + + // got the writer mutex, but still have to wait for all readers to complete + uWait = WaitForSingleObject ( m_hReadEvent, INFINITE ); + if ( uWait==WAIT_FAILED || uWait==WAIT_TIMEOUT ) + { + // wait failed, well then, release writer mutex + ReleaseMutex ( m_hWriteMutex ); + return false; + } + return true; +} + + +bool CSphRwlock::Unlock () +{ + // are we unlocking a writer? + if ( ReleaseMutex ( m_hWriteMutex ) ) + return true; // yes we are + + if ( GetLastError()!=ERROR_NOT_OWNER ) + return false; // some unexpected error + + // writer mutex wasn't mine; we must have a read lock + if ( !m_iReaders ) + return true; // could this ever happen? + + // atomically decrement reader counter + if ( InterlockedDecrement ( &m_iReaders ) ) + return true; // there still are pending readers + + // no pending readers, fire the event for write lock + return SetEvent ( m_hReadEvent )==TRUE; +} + +#else + +// UNIX rwlock implementation (pthreads wrapper) + +CSphRwlock::CSphRwlock () +{} + +bool CSphRwlock::Init () +{ + return pthread_rwlock_init ( &m_tLock, NULL )==0; +} + +bool CSphRwlock::Done () +{ + return pthread_rwlock_destroy ( &m_tLock )==0; +} + +bool CSphRwlock::ReadLock () +{ + return pthread_rwlock_rdlock ( &m_tLock )==0; +} + +bool CSphRwlock::WriteLock () +{ + return pthread_rwlock_wrlock ( &m_tLock )==0; +} + +bool CSphRwlock::Unlock () +{ + return pthread_rwlock_unlock ( &m_tLock )==0; +} + +#endif + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxstd.h b/coreseek/csft-4.1/src/sphinxstd.h new file mode 100755 index 0000000..50d8c0d --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxstd.h @@ -0,0 +1,2331 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinxstd_ +#define _sphinxstd_ + +#if _MSC_VER>=1400 +#define _CRT_SECURE_NO_DEPRECATE 1 +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif + +#if (_MSC_VER>=1000) && !defined(__midl) && defined(_PREFAST_) +typedef int __declspec("SAL_nokernel") __declspec("SAL_nodriver") __prefast_flag_kernel_driver_mode; +#endif + +#if defined(_MSC_VER) && (_MSC_VER<1400) +#define vsnprintf _vsnprintf +#endif + +#ifndef __GNUC__ +#define __attribute__(x) +#endif + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include +#include +#include +#include + +// for 64-bit types +#if HAVE_STDINT_H +#include +#endif + +#if HAVE_INTTYPES_H +#define __STDC_FORMAT_MACROS +#include +#endif + +#if HAVE_SYS_TYPES_H +#include +#endif + +#if !USE_WINDOWS +#include +#include +#include +#endif + +///////////////////////////////////////////////////////////////////////////// +// COMPILE-TIME CHECKS +///////////////////////////////////////////////////////////////////////////// + +#define STATIC_ASSERT(_cond,_name) typedef char STATIC_ASSERT_FAILED_ ## _name [ (_cond) ? 1 : -1 ] +#define STATIC_SIZE_ASSERT(_type,_size) STATIC_ASSERT ( sizeof(_type)==_size, _type ## _MUST_BE_ ## _size ## _BYTES ) + + +#ifndef __analysis_assume +#define __analysis_assume(_arg) +#endif + +///////////////////////////////////////////////////////////////////////////// +// PORTABILITY +///////////////////////////////////////////////////////////////////////////// + +#if _WIN32 + +#define WIN32_LEAN_AND_MEAN +#include + +#define strcasecmp strcmpi +#define strncasecmp _strnicmp +#define snprintf _snprintf +#define strtoll _strtoi64 +#define strtoull _strtoui64 + +#else + +#if USE_ODBC +// UnixODBC compatible DWORD +#if defined(__alpha) || defined(__sparcv9) || defined(__LP64__) || (defined(__HOS_AIX__) && defined(_LP64)) +typedef unsigned int DWORD; +#else +typedef unsigned long DWORD; +#endif +#else +// default DWORD +typedef unsigned int DWORD; +#endif // USE_ODBC + +typedef unsigned short WORD; +typedef unsigned char BYTE; + +#endif // _WIN32 + +///////////////////////////////////////////////////////////////////////////// +// 64-BIT INTEGER TYPES AND MACROS +///////////////////////////////////////////////////////////////////////////// + +#if defined(U64C) || defined(I64C) +#error "Internal 64-bit integer macros already defined." +#endif + +#if !HAVE_STDINT_H + +#if defined(_MSC_VER) +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#define U64C(v) v ## UI64 +#define I64C(v) v ## I64 +#define PRIu64 "I64d" +#define PRIi64 "I64d" +#else // !defined(_MSC_VER) +typedef long long int64_t; +typedef unsigned long long uint64_t; +#endif // !defined(_MSC_VER) + +#endif // no stdint.h + +// if platform-specific macros were not supplied, use common defaults +#ifndef U64C +#define U64C(v) v ## ULL +#endif + +#ifndef I64C +#define I64C(v) v ## LL +#endif + +#ifndef PRIu64 +#define PRIu64 "llu" +#endif + +#ifndef PRIi64 +#define PRIi64 "lld" +#endif + +#define UINT64_FMT "%" PRIu64 +#define INT64_FMT "%" PRIi64 + +#ifndef UINT64_MAX +#define UINT64_MAX U64C(0xffffffffffffffff) +#define INT64_MAX I64C(0x7fffffffffffffff) +#endif + +STATIC_SIZE_ASSERT ( uint64_t, 8 ); +STATIC_SIZE_ASSERT ( int64_t, 8 ); + +///////////////////////////////////////////////////////////////////////////// +// MEMORY MANAGEMENT +///////////////////////////////////////////////////////////////////////////// + +#define SPH_DEBUG_LEAKS 0 +#define SPH_ALLOCS_PROFILER 0 + +#if SPH_DEBUG_LEAKS || SPH_ALLOCS_PROFILER + +/// debug new that tracks memory leaks +void * operator new ( size_t iSize, const char * sFile, int iLine ); + +/// debug new that tracks memory leaks +void * operator new [] ( size_t iSize, const char * sFile, int iLine ); + +/// get current allocs count +int sphAllocsCount (); + +/// total allocated bytes +int64_t sphAllocBytes (); + +/// get last alloc id +int sphAllocsLastID (); + +/// dump all allocs since given id +void sphAllocsDump ( int iFile, int iSinceID ); + +/// dump stats to stdout +void sphAllocsStats (); + +/// check all existing allocs; raises assertion failure in cases of errors +void sphAllocsCheck (); + +void sphMemStatDump ( int iFD ); + +void sphMemStatMMapAdd ( int64_t iSize ); +void sphMemStatMMapDel ( int64_t iSize ); + +#undef new +#define new new(__FILE__,__LINE__) + +#endif // SPH_DEBUG_LEAKS || SPH_ALLOCS_PROFILER + +/// delete for my new +void operator delete ( void * pPtr ) throw(); + +/// delete for my new +void operator delete [] ( void * pPtr ) throw(); + +///////////////////////////////////////////////////////////////////////////// +// HELPERS +///////////////////////////////////////////////////////////////////////////// + +inline int sphBitCount ( DWORD n ) +{ + // MIT HACKMEM count + // works for 32-bit numbers only + // fix last line for 64-bit numbers + register DWORD tmp; + tmp = n - ((n >> 1) & 033333333333) - ((n >> 2) & 011111111111); + return ( (tmp + (tmp >> 3) ) & 030707070707) % 63; +} + +typedef bool ( *SphDieCallback_t ) ( const char * ); + +/// crash with an error message +void sphDie ( const char * sMessage, ... ) __attribute__ ( ( format ( printf, 1, 2 ) ) ); + +/// setup a callback function to call from sphDie() before exit +/// if callback returns false, sphDie() will not log to stdout +void sphSetDieCallback ( SphDieCallback_t pfDieCallback ); + +/// how much bits do we need for given int +inline int sphLog2 ( uint64_t iValue ) +{ + int iBits = 0; + while ( iValue ) + { + iValue >>= 1; + iBits++; + } + return iBits; +} + +/// float vs dword conversion +inline DWORD sphF2DW ( float f ) { union { float f; DWORD d; } u; u.f = f; return u.d; } + +/// dword vs float conversion +inline float sphDW2F ( DWORD d ) { union { float f; DWORD d; } u; u.d = d; return u.f; } + +////////////////////////////////////////////////////////////////////////// +// RANDOM NUMBERS GENERATOR +////////////////////////////////////////////////////////////////////////// + +/// seed RNG +void sphSrand ( DWORD uSeed ); + +/// auto-seed RNG based on time and PID +void sphAutoSrand (); + +/// generate another random +DWORD sphRand (); + +///////////////////////////////////////////////////////////////////////////// +// DEBUGGING +///////////////////////////////////////////////////////////////////////////// + +#if USE_WINDOWS +#ifndef NDEBUG + +void sphAssert ( const char * sExpr, const char * sFile, int iLine ); + +#undef assert +#define assert(_expr) (void)( (_expr) || ( sphAssert ( #_expr, __FILE__, __LINE__ ), 0 ) ) + +#endif // !NDEBUG +#endif // USE_WINDOWS + + +#ifndef NDEBUG +#define Verify(_expr) assert(_expr) +#else +#define Verify(_expr) _expr +#endif + +///////////////////////////////////////////////////////////////////////////// +// GENERICS +///////////////////////////////////////////////////////////////////////////// + +#define Min(a,b) ((a)<(b)?(a):(b)) +#define Max(a,b) ((a)>(b)?(a):(b)) +#define SafeDelete(_x) { if (_x) { delete (_x); (_x) = NULL; } } +#define SafeDeleteArray(_x) { if (_x) { delete [] (_x); (_x) = NULL; } } +#define SafeRelease(_x) { if (_x) { (_x)->Release(); (_x) = NULL; } } + +/// swap +template < typename T > inline void Swap ( T & v1, T & v2 ) +{ + T temp = v1; + v1 = v2; + v2 = temp; +} + +/// prevent copy +class ISphNoncopyable +{ +public: + ISphNoncopyable () {} + +private: + ISphNoncopyable ( const ISphNoncopyable & ) {} + const ISphNoncopyable & operator = ( const ISphNoncopyable & ) { return *this; } +}; + +////////////////////////////////////////////////////////////////////////////// + +/// generic comparator +template < typename T > +struct SphLess_T +{ + inline bool IsLess ( const T & a, const T & b ) const + { + return a < b; + } +}; + + +/// generic comparator +template < typename T > +struct SphGreater_T +{ + inline bool IsLess ( const T & a, const T & b ) const + { + return b < a; + } +}; + + +/// generic comparator +template < typename T, typename C > +struct SphMemberLess_T +{ + const T C::* m_pMember; + + explicit SphMemberLess_T ( T C::* pMember ) + : m_pMember ( pMember ) + {} + + inline bool IsLess ( const C & a, const C & b ) const + { + return ( (&a)->*m_pMember ) < ( (&b)->*m_pMember ); + } +}; + +template < typename T, typename C > +inline SphMemberLess_T +sphMemberLess ( T C::* pMember ) +{ + return SphMemberLess_T ( pMember ); +} + + +/// generic accessor +template < typename T > +struct SphAccessor_T +{ + typedef T MEDIAN_TYPE; + + MEDIAN_TYPE & Key ( T * a ) const + { + return *a; + } + + void CopyKey ( MEDIAN_TYPE * pMed, T * pVal ) const + { + *pMed = Key(pVal); + } + + void Swap ( T * a, T * b ) const + { + ::Swap ( *a, *b ); + } + + T * Add ( T * p, int i ) const + { + return p+i; + } + + int Sub ( T * b, T * a ) const + { + return (int)(b-a); + } +}; + + +/// heap sort helper +template < typename T, typename U, typename V > +void sphSiftDown ( T * pData, int iStart, int iEnd, U COMP, V ACC ) +{ + for ( ;; ) + { + int iChild = iStart*2+1; + if ( iChild>iEnd ) + break; + + int iChild1 = iChild+1; + if ( iChild1<=iEnd && COMP.IsLess ( ACC.Key ( ACC.Add ( pData, iChild ) ), ACC.Key ( ACC.Add ( pData, iChild1 ) ) ) ) + iChild = iChild1; + + if ( COMP.IsLess ( ACC.Key ( ACC.Add ( pData, iChild ) ), ACC.Key ( ACC.Add ( pData, iStart ) ) ) ) + return; + ACC.Swap ( ACC.Add ( pData, iChild ), ACC.Add ( pData, iStart ) ); + iStart = iChild; + } +} + + +/// heap sort +template < typename T, typename U, typename V > +void sphHeapSort ( T * pData, int iCount, U COMP, V ACC ) +{ + if ( !pData || iCount<=1 ) + return; + + // build a max-heap, so that the largest element is root + for ( int iStart=( iCount-2 )>>1; iStart>=0; iStart-- ) + sphSiftDown ( pData, iStart, iCount-1, COMP, ACC ); + + // now keep popping root into the end of array + for ( int iEnd=iCount-1; iEnd>0; ) + { + ACC.Swap ( pData, ACC.Add ( pData, iEnd ) ); + sphSiftDown ( pData, 0, --iEnd, COMP, ACC ); + } +} + + +/// generic sort +template < typename T, typename U, typename V > +void sphSort ( T * pData, int iCount, U COMP, V ACC ) +{ + if ( iCount<2 ) + return; + + typedef T * P; + P st0[32], st1[32], a, b, i, j; + typename V::MEDIAN_TYPE x; + int k; + + const int SMALL_THRESH = 32; + int iDepthLimit = sphLog2 ( iCount ); + iDepthLimit = ( ( iDepthLimit<<2 ) + iDepthLimit ) >> 1; // x2.5 + + k = 1; + st0[0] = pData; + st1[0] = ACC.Add ( pData, iCount-1 ); + while ( k ) + { + k--; + i = a = st0[k]; + j = b = st1[k]; + + // if quicksort fails on this data; switch to heapsort + if ( !k ) + { + if ( !--iDepthLimit ) + { + sphHeapSort ( a, ACC.Sub ( b, a )+1, COMP, ACC ); + return; + } + } + + // for tiny arrays, switch to insertion sort + int iLen = ACC.Sub ( b, a ); + if ( iLen<=SMALL_THRESH ) + { + for ( i=ACC.Add ( a, 1 ); i<=b; i=ACC.Add ( i, 1 ) ) + { + for ( j=i; j>a; ) + { + P j1 = ACC.Add ( j, -1 ); + if ( COMP.IsLess ( ACC.Key(j1), ACC.Key(j) ) ) + break; + ACC.Swap ( j, j1 ); + j = j1; + } + } + continue; + } + + ACC.CopyKey ( &x, ACC.Add ( a, iLen/2 ) ); + while ( a=ACC.Sub ( b, i ) ) + { + if ( a +void sphSort ( T * pData, int iCount, U COMP ) +{ + sphSort ( pData, iCount, COMP, SphAccessor_T() ); +} + + +template < typename T > +void sphSort ( T * pData, int iCount ) +{ + sphSort ( pData, iCount, SphLess_T() ); +} + +////////////////////////////////////////////////////////////////////////// + +/// member functor, wraps object member access +template < typename T, typename CLASS > +struct SphMemberFunctor_T +{ + const T CLASS::* m_pMember; + + explicit SphMemberFunctor_T ( T CLASS::* pMember ) : m_pMember ( pMember ) {} + const T & operator () ( const CLASS & arg ) const { return (&arg)->*m_pMember; } + + inline bool IsLess ( const CLASS & a, const CLASS & b ) const + { + return (&a)->*m_pMember < (&b)->*m_pMember; + } +}; + + +/// handy member functor generator +template < typename T, typename CLASS > +inline SphMemberFunctor_T < T, CLASS > +bind ( T CLASS::* ptr ) +{ + return SphMemberFunctor_T < T, CLASS > ( ptr ); +} + + +/// identity functor +template < typename T > +struct SphIdentityFunctor_T +{ + const T & operator () ( const T & arg ) const { return arg; } +}; + +////////////////////////////////////////////////////////////////////////// + +/// generic binary search +template < typename T, typename U, typename PRED > +T * sphBinarySearch ( T * pStart, T * pEnd, const PRED & tPred, U tRef ) +{ + if ( !pStart || pEnd1 ) + { + if ( tReftPred(*pEnd) ) + break; + assert ( tRef>tPred(*pStart) ); + assert ( tRef +T * sphBinarySearch ( T * pStart, T * pEnd, T & tRef ) +{ + return sphBinarySearch ( pStart, pEnd, SphIdentityFunctor_T(), tRef ); +} + +////////////////////////////////////////////////////////////////////////// + +/// default vector policy +/// grow 2x and copy using assignment operator on resize +template < typename T > +class CSphVectorPolicy +{ +protected: + static const int MAGIC_INITIAL_LIMIT = 8; + +public: + static inline void Copy ( T * pNew, T * pData, int iLength ) + { + for ( int i=0; i > class CSphVector +{ +public: + /// ctor + CSphVector () + : m_iLength ( 0 ) + , m_iLimit ( 0 ) + , m_pData ( NULL ) + { + } + + /// ctor with initial size + CSphVector ( int iCount ) + : m_iLength ( 0 ) + , m_iLimit ( 0 ) + , m_pData ( NULL ) + { + Resize ( iCount ); + } + + /// copy ctor + CSphVector ( const CSphVector & rhs ) + { + m_iLength = 0; + m_iLimit = 0; + m_pData = NULL; + *this = rhs; + } + + /// dtor + ~CSphVector () + { + Reset (); + } + + /// add entry + T & Add () + { + if ( m_iLength>=m_iLimit ) + Reserve ( 1+m_iLength ); + return m_pData [ m_iLength++ ]; + } + + /// add entry + void Add ( const T & tValue ) + { + if ( m_iLength>=m_iLimit ) + Reserve ( 1+m_iLength ); + m_pData [ m_iLength++ ] = tValue; + } + + /// add unique entry (ie. do not add if equal to last one) + void AddUnique ( const T & tValue ) + { + if ( m_iLength>=m_iLimit ) + Reserve ( 1+m_iLength ); + + if ( m_iLength==0 || m_pData[m_iLength-1]!=tValue ) + m_pData [ m_iLength++ ] = tValue; + } + + /// get first entry ptr + T * Begin () + { + return m_iLength ? m_pData : NULL; + } + + /// get first entry ptr + const T * Begin () const + { + return m_iLength ? m_pData : NULL; + } + + /// get last entry + T & Last () + { + return (*this) [ m_iLength-1 ]; + } + + /// get last entry + const T & Last () const + { + return (*this) [ m_iLength-1 ]; + } + + /// remove element by index + void Remove ( int iIndex ) + { + assert ( iIndex>=0 && iIndex=0 && iIndex0 ); + return m_pData[--m_iLength]; + } + +public: + /// grow enough to hold that much entries, if needed, but do *not* change the length + void Reserve ( int iNewLimit ) + { + // check that we really need to be called + assert ( iNewLimit>=0 ); + if ( iNewLimit<=m_iLimit ) + return; + + // calc new limit + m_iLimit = POLICY::Relimit ( m_iLimit, iNewLimit ); + + // realloc + // FIXME! optimize for POD case + T * pNew = new T [ m_iLimit ]; + __analysis_assume ( m_iLength<=m_iLimit ); + + POLICY::Copy ( pNew, m_pData, m_iLength ); + delete [] m_pData; + + m_pData = pNew; + } + + /// resize + void Resize ( int iNewLength ) + { + if ( iNewLength>=m_iLength ) + Reserve ( iNewLength ); + m_iLength = iNewLength; + } + + /// reset + void Reset () + { + m_iLength = 0; + m_iLimit = 0; + SafeDeleteArray ( m_pData ); + } + + /// query current length + inline int GetLength () const + { + return m_iLength; + } + + /// query current reserved size + inline int GetLimit () const + { + return m_iLimit; + } + +public: + /// filter unique + void Uniq () + { + if ( !m_iLength ) + return; + + Sort (); + + int iSrc = 0, iDst = 0; + while ( iSrc0 && m_pData[iDst-1]==m_pData[iSrc] ) + iSrc++; + else + m_pData[iDst++] = m_pData[iSrc++]; + } + + Resize ( iDst ); + } + + /// default sort + void Sort ( int iStart=0, int iEnd=-1 ) + { + Sort ( SphLess_T(), iStart, iEnd ); + } + + /// default reverse sort + void RSort ( int iStart=0, int iEnd=-1 ) + { + Sort ( SphGreater_T(), iStart, iEnd ); + } + + /// generic sort + template < typename F > void Sort ( F COMP, int iStart=0, int iEnd=-1 ) + { + if ( m_iLength<2 ) return; + if ( iStart<0 ) iStart = m_iLength+iStart; + if ( iEnd<0 ) iEnd = m_iLength+iEnd; + assert ( iStart<=iEnd ); + + sphSort ( m_pData+iStart, iEnd-iStart+1, COMP ); + } + + /// accessor by forward index + const T & operator [] ( int iIndex ) const + { + assert ( iIndex>=0 && iIndex=0 && iIndex & operator = ( const CSphVector & rhs ) + { + Reset (); + + m_iLength = rhs.m_iLength; + m_iLimit = rhs.m_iLimit; + m_pData = new T [ m_iLimit ]; + __analysis_assume ( m_iLength<=m_iLimit ); + for ( int i=0; i & rhs ) + { + Swap ( m_iLength, rhs.m_iLength ); + Swap ( m_iLimit, rhs.m_iLimit ); + Swap ( m_pData, rhs.m_pData ); + } + + /// leak + T * LeakData () + { + T * pData = m_pData; + m_pData = NULL; + Reset(); + return pData; + } + + /// generic binary search + /// assumes that the array is sorted in ascending order + template < typename U, typename PRED > + const T * BinarySearch ( const PRED & tPred, U tRef ) const + { + return sphBinarySearch ( m_pData, m_pData+m_iLength-1, tPred, tRef ); + } + + /// generic binary search + /// assumes that the array is sorted in ascending order + const T * BinarySearch ( T tRef ) const + { + return sphBinarySearch ( m_pData, m_pData+m_iLength-1, tRef ); + } + + /// generic linear search + bool Contains ( T tRef ) const + { + for ( int i=0; i=m_iLimit ) + Reserve ( m_iLength+1 ); + + memmove ( m_pData+iIndex+1, m_pData+iIndex, ( m_iLength++-iIndex ) * sizeof tValue ); + memset ( m_pData+iIndex, 0, sizeof tValue ); + m_pData[iIndex] = tValue; + } + +protected: + int m_iLength; ///< entries actually used + int m_iLimit; ///< entries allocated + T * m_pData; ///< entries +}; + + +#define ARRAY_FOREACH(_index,_array) \ + for ( int _index=0; _index<_array.GetLength(); _index++ ) + +#define ARRAY_FOREACH_COND(_index,_array,_cond) \ + for ( int _index=0; _index<_array.GetLength() && (_cond); _index++ ) + +////////////////////////////////////////////////////////////////////////// + +/// swap-vector policy (for non-copyable classes) +/// use Swap() instead of assignment on resize +template < typename T > +class CSphSwapVectorPolicy : public CSphVectorPolicy +{ +public: + static inline void Copy ( T * pNew, T * pData, int iLength ) + { + for ( int i=0; i +class CSphTightVectorPolicy : public CSphVectorPolicy +{ +protected: + static const int SLOW_GROW_TRESHOLD = 1024; + +public: + static inline int Relimit ( int iLimit, int iNewLimit ) + { + if ( !iLimit ) + iLimit = CSphVectorPolicy::MAGIC_INITIAL_LIMIT; + while ( iLimit +class CSphSwapVector : public CSphVector < T, CSphSwapVectorPolicy > +{ +}; + +/// tight-vector +template < typename T > +class CSphTightVector : public CSphVector < T, CSphTightVectorPolicy > +{ +}; + +////////////////////////////////////////////////////////////////////////// + +/// dynamically allocated fixed-size vector +template < typename T > +class CSphFixedVector : public ISphNoncopyable +{ +protected: + T * m_pData; + int m_iSize; + +public: + explicit CSphFixedVector ( int iSize ) + : m_iSize ( iSize ) + { + assert ( iSize>=0 ); + m_pData = ( iSize>0 ) ? new T [ iSize ] : NULL; + } + + ~CSphFixedVector () + { + SafeDeleteArray ( m_pData ); + } + + T & operator [] ( int iIndex ) const + { + assert ( iIndex>=0 && iIndex=0 ); + m_pData = ( iSize>0 ) ? new T [ iSize ] : NULL; + m_iSize = iSize; + } + + int GetLength() const + { + return m_iSize; + } +}; + +////////////////////////////////////////////////////////////////////////// + +/// simple dynamic hash +/// keeps the order, so Iterate() return the entries in the order they was inserted +template < typename T, typename KEY, typename HASHFUNC, int LENGTH, int STEP > +class CSphOrderedHash +{ +protected: + struct HashEntry_t + { + KEY m_tKey; ///< key, owned by the hash + T m_tValue; ///< data, owned by the hash + HashEntry_t * m_pNextByHash; ///< next entry in hash list + HashEntry_t * m_pPrevByOrder; ///< prev entry in the insertion order + HashEntry_t * m_pNextByOrder; ///< next entry in the insertion order + }; + + +protected: + HashEntry_t * m_dHash [ LENGTH ]; ///< all the hash entries + HashEntry_t * m_pFirstByOrder; ///< first entry in the insertion order + HashEntry_t * m_pLastByOrder; ///< last entry in the insertion order + int m_iLength; ///< entries count + +protected: + /// find entry by key + HashEntry_t * FindByKey ( const KEY & tKey ) const + { + unsigned int uHash = ( (unsigned int) HASHFUNC::Hash ( tKey ) ) % LENGTH; + HashEntry_t * pEntry = m_dHash [ uHash ]; + + while ( pEntry ) + { + if ( pEntry->m_tKey==tKey ) + return pEntry; + pEntry = pEntry->m_pNextByHash; + } + return NULL; + } + +public: + /// ctor + CSphOrderedHash () + : m_pFirstByOrder ( NULL ) + , m_pLastByOrder ( NULL ) + , m_iLength ( 0 ) + , m_pIterator ( NULL ) + { + for ( int i=0; im_pNextByOrder; + SafeDelete ( pKill ); + pKill = pNext; + } + + for ( int i=0; im_tKey==tKey ) + return false; + + ppEntry = &pEntry->m_pNextByHash; + pEntry = pEntry->m_pNextByHash; + } + + // it's not; let's add the entry + assert ( !pEntry ); + assert ( !*ppEntry ); + + pEntry = new HashEntry_t; + pEntry->m_tKey = tKey; + pEntry->m_tValue = tValue; + pEntry->m_pNextByHash = NULL; + pEntry->m_pPrevByOrder = NULL; + pEntry->m_pNextByOrder = NULL; + + *ppEntry = pEntry; + + if ( !m_pFirstByOrder ) + m_pFirstByOrder = pEntry; + + if ( m_pLastByOrder ) + { + assert ( !m_pLastByOrder->m_pNextByOrder ); + assert ( !pEntry->m_pNextByOrder ); + m_pLastByOrder->m_pNextByOrder = pEntry; + pEntry->m_pPrevByOrder = m_pLastByOrder; + } + m_pLastByOrder = pEntry; + + m_iLength++; + return true; + } + + /// delete an entry + bool Delete ( const KEY & tKey ) + { + unsigned int uHash = ( (unsigned int) HASHFUNC::Hash ( tKey ) ) % LENGTH; + HashEntry_t * pEntry = m_dHash [ uHash ]; + + HashEntry_t * pPrevEntry = NULL; + HashEntry_t * pToDelete = NULL; + while ( pEntry ) + { + if ( pEntry->m_tKey==tKey ) + { + pToDelete = pEntry; + if ( pPrevEntry ) + pPrevEntry->m_pNextByHash = pEntry->m_pNextByHash; + else + m_dHash [ uHash ] = pEntry->m_pNextByHash; + + break; + } + + pPrevEntry = pEntry; + pEntry = pEntry->m_pNextByHash; + } + + if ( !pToDelete ) + return false; + + if ( pToDelete->m_pPrevByOrder ) + pToDelete->m_pPrevByOrder->m_pNextByOrder = pToDelete->m_pNextByOrder; + else + m_pFirstByOrder = pToDelete->m_pNextByOrder; + + if ( pToDelete->m_pNextByOrder ) + pToDelete->m_pNextByOrder->m_pPrevByOrder = pToDelete->m_pPrevByOrder; + else + m_pLastByOrder = pToDelete->m_pPrevByOrder; + + // step the iterator one item back - to gracefully hold deletion in iteration cycle + if ( pToDelete==m_pIterator ) + m_pIterator = pToDelete->m_pPrevByOrder; + + SafeDelete ( pToDelete ); + --m_iLength; + + return true; + } + + /// check if key exists + bool Exists ( const KEY & tKey ) const + { + return FindByKey ( tKey )!=NULL; + } + + /// get value pointer by key + T * operator () ( const KEY & tKey ) const + { + HashEntry_t * pEntry = FindByKey ( tKey ); + return pEntry ? &pEntry->m_tValue : NULL; + } + + /// get value reference by key, asserting that the key exists in hash + T & operator [] ( const KEY & tKey ) const + { + HashEntry_t * pEntry = FindByKey ( tKey ); + assert ( pEntry && "hash missing value in operator []" ); + + return pEntry->m_tValue; + } + + /// get pointer to key storage + const KEY * GetKeyPtr ( const KEY & tKey ) const + { + HashEntry_t * pEntry = FindByKey ( tKey ); + return pEntry ? &pEntry->m_tKey : NULL; + } + + /// copying + const CSphOrderedHash & operator = ( const CSphOrderedHash & rhs ) + { + if ( this!=&rhs ) + { + Reset (); + + rhs.IterateStart (); + while ( rhs.IterateNext() ) + Add ( rhs.IterateGet(), rhs.IterateGetKey() ); + } + return *this; + } + + /// copyint ctor + CSphOrderedHash ( const CSphOrderedHash & rhs ) + : m_pFirstByOrder ( NULL ) + , m_pLastByOrder ( NULL ) + , m_iLength ( 0 ) + , m_pIterator ( NULL ) + { + for ( int i=0; im_pNextByOrder : m_pFirstByOrder; + return m_pIterator!=NULL; + } + + /// get entry value + T & IterateGet () const + { + assert ( m_pIterator ); + return m_pIterator->m_tValue; + } + + /// get entry key + const KEY & IterateGetKey () const + { + assert ( m_pIterator ); + return m_pIterator->m_tKey; + } + + /// go to next existing entry in terms of external independed iterator + bool IterateNext ( void ** ppCookie ) const + { + HashEntry_t ** ppIterator = reinterpret_cast < HashEntry_t** > ( ppCookie ); + *ppIterator = ( *ppIterator ) ? ( *ppIterator )->m_pNextByOrder : m_pFirstByOrder; + return ( *ppIterator )!=NULL; + } + + /// get entry value in terms of external independed iterator + static T & IterateGet ( void ** ppCookie ) + { + assert ( ppCookie ); + HashEntry_t ** ppIterator = reinterpret_cast < HashEntry_t** > ( ppCookie ); + assert ( *ppIterator ); + return ( *ppIterator )->m_tValue; + } + + /// get entry key in terms of external independed iterator + static const KEY & IterateGetKey ( void ** ppCookie ) + { + assert ( ppCookie ); + HashEntry_t ** ppIterator = reinterpret_cast < HashEntry_t** > ( ppCookie ); + assert ( *ppIterator ); + return ( *ppIterator )->m_tKey; + } + + +private: + /// current iterator + mutable HashEntry_t * m_pIterator; +}; + +/// very popular and so, moved here +struct IdentityHash_fn +{ + template + static inline INT Hash ( INT iValue ) { return iValue; } +}; + +///////////////////////////////////////////////////////////////////////////// + +/// immutable C string proxy +struct CSphString +{ +protected: + char * m_sValue; + +private: + /// safety gap after the string end; for instance, UTF-8 Russian stemmer + /// which treats strings as 16-bit word sequences needs this in some cases. + /// note that this zero-filled gap does NOT include trailing C-string zero, + /// and does NOT affect strlen() as well. + static const int SAFETY_GAP = 4; + +public: + CSphString () + : m_sValue ( NULL ) + { + } + + CSphString ( const CSphString & rhs ) + : m_sValue ( NULL ) + { + *this = rhs; + } + + virtual ~CSphString () + { + SafeDeleteArray ( m_sValue ); + } + + const char * cstr () const + { + return m_sValue; + } + + inline bool operator == ( const char * t ) const + { + if ( !t || !m_sValue ) + return ( !t && !m_sValue ); + return strcmp ( m_sValue, t )==0; + } + + inline bool operator == ( const CSphString & t ) const + { + return operator==( t.cstr() ); + } + + inline bool operator != ( const CSphString & t ) const + { + return !operator==( t ); + } + + bool operator != ( const char * t ) const + { + return !operator==( t ); + } + + CSphString ( const char * sString ) // NOLINT + { + if ( sString ) + { + int iLen = 1+strlen(sString); + m_sValue = new char [ iLen+SAFETY_GAP ]; + + strcpy ( m_sValue, sString ); // NOLINT + memset ( m_sValue+iLen, 0, SAFETY_GAP ); + } else + { + m_sValue = NULL; + } + } + + const CSphString & operator = ( const CSphString & rhs ) + { + if ( m_sValue==rhs.m_sValue ) + return *this; + SafeDeleteArray ( m_sValue ); + if ( rhs.m_sValue ) + { + int iLen = 1+strlen(rhs.m_sValue); + m_sValue = new char [ iLen+SAFETY_GAP ]; + + strcpy ( m_sValue, rhs.m_sValue ); // NOLINT + memset ( m_sValue+iLen, 0, SAFETY_GAP ); + } + return *this; + } + + CSphString SubString ( int iStart, int iCount ) const + { + #ifndef NDEBUG + int iLen = strlen(m_sValue); + #endif + assert ( iStart>=0 && iStart0 ); + assert ( (iStart+iCount)>=0 && (iStart+iCount)<=iLen ); + + CSphString sRes; + sRes.m_sValue = new char [ 1+SAFETY_GAP+iCount ]; + strncpy ( sRes.m_sValue, m_sValue+iStart, iCount ); + memset ( sRes.m_sValue+iCount, 0, 1+SAFETY_GAP ); + return sRes; + } + + void SetBinary ( const char * sValue, int iLen ) + { + SafeDeleteArray ( m_sValue ); + if ( sValue ) + { + m_sValue = new char [ 1+SAFETY_GAP+iLen ]; + memcpy ( m_sValue, sValue, iLen ); + memset ( m_sValue+iLen, 0, 1+SAFETY_GAP ); + } + } + + void Reserve ( int iLen ) + { + SafeDeleteArray ( m_sValue ); + m_sValue = new char [ 1+SAFETY_GAP+iLen ]; + memset ( m_sValue, 0, 1+SAFETY_GAP+iLen ); + } + + const CSphString & SetSprintf ( const char * sTemplate, ... ) __attribute__ ( ( format ( printf, 2, 3 ) ) ) + { + char sBuf[1024]; + va_list ap; + + va_start ( ap, sTemplate ); + vsnprintf ( sBuf, sizeof(sBuf), sTemplate, ap ); + va_end ( ap ); + + (*this) = sBuf; + return (*this); + } + + const CSphString & SetSprintfVa ( const char * sTemplate, va_list ap ) + { + char sBuf[1024]; + vsnprintf ( sBuf, sizeof(sBuf), sTemplate, ap ); + + (*this) = sBuf; + return (*this); + } + + bool IsEmpty () const + { + if ( !m_sValue ) + return true; + return ( (*m_sValue)=='\0' ); + } + + void ToLower () + { + if ( m_sValue ) + for ( char * s=m_sValue; *s; s++ ) + *s = (char) tolower ( *s ); + } + + void ToUpper () + { + if ( m_sValue ) + for ( char * s=m_sValue; *s; s++ ) + *s = (char) toupper ( *s ); + } + + void Swap ( CSphString & rhs ) + { + ::Swap ( m_sValue, rhs.m_sValue ); + } + + bool Begins ( const char * sPrefix ) const + { + if ( !m_sValue || !sPrefix ) + return false; + return strncmp ( m_sValue, sPrefix, strlen(sPrefix) )==0; + } + + bool Ends ( const char * sPrefix ) const + { + if ( !m_sValue || !sPrefix ) + return false; + + int iVal = strlen ( m_sValue ); + int iPrefix = strlen ( sPrefix ); + if ( iVal +class SmallStringHash_T : public CSphOrderedHash < T, CSphString, CSphStrHashFunc, 256, 13 > {}; + +////////////////////////////////////////////////////////////////////////// + +/// pointer with automatic safe deletion when going out of scope +template < typename T > +class CSphScopedPtr : public ISphNoncopyable +{ +public: + explicit CSphScopedPtr ( T * pPtr ) { m_pPtr = pPtr; } + ~CSphScopedPtr () { SafeDelete ( m_pPtr ); } + T * operator -> () const { return m_pPtr; } + T * Ptr () const { return m_pPtr; } + CSphScopedPtr & operator = ( T * pPtr ) { SafeDelete ( m_pPtr ); m_pPtr = pPtr; return *this; } + T * LeakPtr () { T * pPtr = m_pPtr; m_pPtr = NULL; return pPtr; } + +protected: + T * m_pPtr; +}; + +////////////////////////////////////////////////////////////////////////// + +/// refcounted base +struct ISphRefcounted : public ISphNoncopyable +{ +protected: + ISphRefcounted () : m_iRefCount ( 1 ) {} + virtual ~ISphRefcounted () {} + +public: + void AddRef () const { m_iRefCount++; } + void Release () const { --m_iRefCount; assert ( m_iRefCount>=0 ); if ( m_iRefCount==0 ) delete this; } + +protected: + mutable int m_iRefCount; +}; + + +/// automatic pointer wrapper for refcounted objects +template < typename T > +class CSphRefcountedPtr +{ +public: + explicit CSphRefcountedPtr ( T * pPtr ) { m_pPtr = pPtr; } + ~CSphRefcountedPtr () { if ( m_pPtr ) m_pPtr->Release(); } + + T * Ptr () const { return m_pPtr; } + T * operator -> () const { return m_pPtr; } + bool operator ! () const { return m_pPtr==NULL; } + +public: + CSphRefcountedPtr & operator = ( T * pPtr ) { if ( m_pPtr ) m_pPtr->Release(); m_pPtr = pPtr; return *this; } + CSphRefcountedPtr & operator = ( const CSphRefcountedPtr & rhs ) { if ( rhs.m_pPtr ) rhs.m_pPtr->AddRef(); if ( m_pPtr ) m_pPtr->Release(); m_pPtr = rhs.m_pPtr; return *this; } + +protected: + T * m_pPtr; +}; + +////////////////////////////////////////////////////////////////////////// + +extern bool g_bHeadProcess; +void sphWarn ( const char *, ... ) __attribute__ ( ( format ( printf, 1, 2 ) ) ); + +/// in-memory buffer shared between processes +template < typename T > class CSphSharedBuffer +{ +public: + /// ctor + CSphSharedBuffer () + : m_pData ( NULL ) + , m_iLength ( 0 ) + , m_iEntries ( 0 ) + , m_bMlock ( false ) + {} + + /// dtor + ~CSphSharedBuffer () + { + Reset (); + } + + /// set locking mode for subsequent Alloc()s + void SetMlock ( bool bMlock ) + { + m_bMlock = bMlock; + } + +public: + /// allocate storage +#if USE_WINDOWS + bool Alloc ( int64_t iEntries, CSphString & sError, CSphString & ) +#else + bool Alloc ( int64_t iEntries, CSphString & sError, CSphString & sWarning ) +#endif + { + assert ( !m_pData ); + + int64_t uCheck = sizeof(T); + uCheck *= iEntries; + + m_iLength = (size_t)uCheck; + if ( uCheck!=(int64_t)m_iLength ) + { + sError.SetSprintf ( "impossible to mmap() over 4 GB on 32-bit system" ); + m_iLength = 0; + return false; + } + +#if USE_WINDOWS + m_pData = new T [ (size_t)iEntries ]; +#else + m_pData = (T *) mmap ( NULL, m_iLength, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0 ); + if ( m_pData==MAP_FAILED ) + { + if ( m_iLength>0x7fffffffUL ) + sError.SetSprintf ( "mmap() failed: %s (length="INT64_FMT" is over 2GB, impossible on some 32-bit systems)", strerror(errno), (int64_t)m_iLength ); + else + sError.SetSprintf ( "mmap() failed: %s (length="INT64_FMT")", strerror(errno), (int64_t)m_iLength ); + m_iLength = 0; + return false; + } + + if ( m_bMlock ) + if ( -1==mlock ( m_pData, m_iLength ) ) + sWarning.SetSprintf ( "mlock() failed: %s", strerror(errno) ); + +#if SPH_ALLOCS_PROFILER + sphMemStatMMapAdd ( m_iLength ); +#endif + +#endif // USE_WINDOWS + + assert ( m_pData ); + m_iEntries = (size_t)iEntries; + return true; + } + + + /// relock again (for daemonization only) +#if USE_WINDOWS + bool Mlock ( const char *, CSphString & ) + { + return true; + } +#else + bool Mlock ( const char * sPrefix, CSphString & sError ) + { + if ( !m_bMlock ) + return true; + + if ( mlock ( m_pData, m_iLength )!=-1 ) + return true; + + if ( sError.IsEmpty() ) + sError.SetSprintf ( "%s mlock() failed: bytes="INT64_FMT", error=%s", sPrefix, (int64_t)m_iLength, strerror(errno) ); + else + sError.SetSprintf ( "%s; %s mlock() failed: bytes="INT64_FMT", error=%s", sError.cstr(), sPrefix, (int64_t)m_iLength, strerror(errno) ); + return false; + } +#endif + + + /// deallocate storage + void Reset () + { + if ( !m_pData ) + return; + +#if USE_WINDOWS + delete [] m_pData; +#else + if ( g_bHeadProcess ) + { + int iRes = munmap ( m_pData, m_iLength ); + if ( iRes ) + sphWarn ( "munmap() failed: %s", strerror(errno) ); + +#if SPH_ALLOCS_PROFILER + sphMemStatMMapDel ( m_iLength ); +#endif + } +#endif // USE_WINDOWS + + m_pData = NULL; + m_iLength = 0; + m_iEntries = 0; + } + +public: + /// accessor + inline const T & operator [] ( int64_t iIndex ) const + { + assert ( iIndex>=0 && iIndex<(int64_t)m_iEntries ); + return m_pData[iIndex]; + } + + /// get write address + T * GetWritePtr () const + { + return m_pData; + } + + /// check if i'm empty + bool IsEmpty () const + { + return m_pData==NULL; + } + + /// get length in bytes + size_t GetLength () const + { + return m_iLength; + } + + /// get length in entries + size_t GetNumEntries () const + { + return m_iEntries; + } + +protected: + T * m_pData; ///< data storage + size_t m_iLength; ///< data length, bytes + size_t m_iEntries; ///< data length, entries + bool m_bMlock; ///< whether to lock data in RAM +}; + +////////////////////////////////////////////////////////////////////////// + +/// process-shared mutex that survives fork +class CSphProcessSharedMutex +{ +public: + explicit CSphProcessSharedMutex ( int iExtraSize=0 ); + void Lock () const; + void Unlock () const; + bool TimedLock ( int tmSpin ) const; // wait at least tmSpin microseconds the lock will available + +protected: +#if !USE_WINDOWS + CSphSharedBuffer m_pStorage; + pthread_mutex_t * m_pMutex; +#endif +}; + + +#if !USE_WINDOWS +/// process-shared mutex variable that survives fork +template < typename T > class CSphProcessSharedVariable : protected CSphProcessSharedMutex, public ISphNoncopyable +{ +public: + + explicit CSphProcessSharedVariable ( const T& tInitValue ) + : CSphProcessSharedMutex ( sizeof(T) ) + , m_pValue ( NULL ) + { + if ( m_pMutex ) + { + m_pValue = reinterpret_cast ( m_pStorage.GetWritePtr () + sizeof ( pthread_mutex_t ) ); + *m_pValue = tInitValue; + } + } + T ReadValue() const + { + if ( !m_pValue ) + return 0; + Lock(); + T val = *m_pValue; + Unlock(); + return val; + } + void WriteValue ( const T& tNewValue ) + { + if ( !m_pValue ) + return; + Lock(); + *m_pValue = tNewValue; + Unlock(); + } + +protected: + T * m_pValue; +}; +#endif // #if !USE_WINDOWS + +////////////////////////////////////////////////////////////////////////// + +/// my thread handle and thread func magic +#if USE_WINDOWS +typedef HANDLE SphThread_t; +typedef DWORD SphThreadKey_t; +#else +typedef pthread_t SphThread_t; +typedef pthread_key_t SphThreadKey_t; +#endif + +/// my threading initialize routine +void * sphThreadInit ( bool bDetached=false ); + +/// my threading deinitialize routine +void sphThreadDone ( int iFD ); + +/// my create thread wrapper +bool sphThreadCreate ( SphThread_t * pThread, void (*fnThread)(void*), void * pArg, bool bDetached=false ); + +/// my join thread wrapper +bool sphThreadJoin ( SphThread_t * pThread ); + +/// add (cleanup) callback to run on thread exit +void sphThreadOnExit ( void (*fnCleanup)(void*), void * pArg ); + +/// alloc thread-local key +bool sphThreadKeyCreate ( SphThreadKey_t * pKey ); + +/// free thread-local key +void sphThreadKeyDelete ( SphThreadKey_t tKey ); + +/// get thread-local key value +void * sphThreadGet ( SphThreadKey_t tKey ); + +/// get the pointer to my thread's stack +void * sphMyStack (); + +/// get the size of my thread's stack +int sphMyStackSize (); + +/// set the size of my thread's stack +void sphSetMyStackSize ( int iStackSize ); + +/// store the address in the TLS +void MemorizeStack ( void* PStack ); + +/// set thread-local key value +bool sphThreadSet ( SphThreadKey_t tKey, void * pValue ); + +#if !USE_WINDOWS +/// what kind of threading lib do we have? The number of frames in the stack depends from it +bool sphIsLtLib(); +#endif + +////////////////////////////////////////////////////////////////////////// + +/// mutex implementation +class CSphMutex +{ +public: + CSphMutex () : m_bInitialized ( false ) {} + ~CSphMutex () { assert ( !m_bInitialized ); } + + bool Init (); + bool Done (); + bool Lock (); + bool Unlock (); + +protected: + bool m_bInitialized; +#if USE_WINDOWS + HANDLE m_hMutex; +#else + pthread_mutex_t m_tMutex; +#endif +}; + + +/// static mutex (for globals) +class CSphStaticMutex : public CSphMutex +{ +public: + CSphStaticMutex() + { + Verify ( Init() ); + } + + ~CSphStaticMutex() + { + Done(); + } +}; + + +/// rwlock implementation +class CSphRwlock +{ +public: + CSphRwlock (); + ~CSphRwlock () {} + + bool Init (); + bool Done (); + + bool ReadLock (); + bool WriteLock (); + bool Unlock (); + +#if USE_WINDOWS +private: + HANDLE m_hWriteMutex; + HANDLE m_hReadEvent; + LONG m_iReaders; +#else + pthread_rwlock_t m_tLock; +#endif +}; + +// small bitvector of 256 elements. +class CSphSmallBitvec +{ +public: + static const int iTOTALBITS = 256; + +private: + typedef unsigned long ELTYPE; + static const int iELEMBITS = sizeof ( ELTYPE ) * 8; + static const int iBYTESIZE = iTOTALBITS / 8; + static const int IELEMENTS = iTOTALBITS / iELEMBITS; + static const ELTYPE uALLBITS = ~(0UL); + STATIC_ASSERT ( IELEMENTS>=1, 8_BITS_MINIMAL_SIZE_OF_VECTOR ); + +private: + ELTYPE m_dFieldsMask[IELEMENTS]; + +public: + // no custom cstr and d-tor - to be usable from inside unions + // deep copy for it is ok - so, no explicit copying constructor and operator= + + // old-fashion layer to work with DWORD (32-bit) mask. + // all bits above 32 assumed to be unset. + void Assign32 ( DWORD uMask ) + { + Unset(); + m_dFieldsMask[0] = uMask; + } + + DWORD GetMask32 () const + { + return (DWORD) ( m_dFieldsMask[0] & 0xFFFFFFFFUL ); + } + + // set n-th bit, or all + void Set ( int iIdx=-1 ) + { + assert ( iIdx < iTOTALBITS ); + if ( iIdx<0 ) + { + for ( int i=0; i=0 && iIdx=iTOTALBITS ) + return; + + int iMaskPos = iBits / iELEMBITS; + ELTYPE uMask = ( 1UL << ( iBits % iELEMBITS ) ) - 1; + m_dFieldsMask[iMaskPos++] &= uMask; + for ( ; iMaskPos < IELEMENTS; iMaskPos++ ) + m_dFieldsMask[iMaskPos] = 0UL; + } + + void Negate() + { + for ( int i=0; i0 ); + m_iElements = iElements; + if ( iElements > int(sizeof(m_uStatic)*8) ) + { + int iSize = (m_iElements+31)/32; + m_pData = new DWORD [ iSize ]; + memset ( m_pData, 0, sizeof(DWORD)*iSize ); + } else + { + m_pData = m_uStatic; + for ( int i=0; i=0 ); + assert ( iIndex>5 ] & ( 1UL<<( iIndex&31 ) ) )!=0; + } + + void BitSet ( int iIndex ) + { + assert ( iIndex>=0 ); + assert ( iIndex>5 ] |= ( 1UL<<( iIndex&31 ) ); + } +}; + +#endif // _sphinxstd_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxstd.o b/coreseek/csft-4.1/src/sphinxstd.o new file mode 100644 index 0000000..33c9d36 Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxstd.o differ diff --git a/coreseek/csft-4.1/src/sphinxstem.h b/coreseek/csft-4.1/src/sphinxstem.h new file mode 100755 index 0000000..ad3481d --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxstem.h @@ -0,0 +1,53 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#ifndef _sphinxstem_ +#define _sphinxstem_ + +#include "sphinx.h" + +/// initialize English stemmar +void stem_en_init (); + +/// initialize Russian stemmar +void stem_ru_init (); + +/// stem lowercase English word +void stem_en ( BYTE * pWord, int iLen ); + +/// stem lowercase Russian word in Windows-1251 encoding +void stem_ru_cp1251 ( BYTE * pWord ); + +/// stem lowercase Russian word in UTF-8 encoding +void stem_ru_utf8 ( WORD * pWord ); + +/// initialize Czech stemmer +void stem_cz_init (); + +/// stem lowercase Czech word +void stem_cz ( BYTE * pWord ); + +/// calculate soundex in-place if the word is lowercase English letters only; +/// do nothing if it's not +void stem_soundex ( BYTE * pWord ); + +/// double metaphone stemmer +void stem_dmetaphone ( BYTE * pWord, bool bUTF8 ); + +#endif // _sphinxstem_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxstemcz.cpp b/coreseek/csft-4.1/src/sphinxstemcz.cpp new file mode 100755 index 0000000..9c8eea3 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxstemcz.cpp @@ -0,0 +1,209 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include + + +struct ClampRule_t +{ + int m_iMinLength; + BYTE m_szSuffix[10]; + int m_iCheckLength; + int m_nRemove; + bool m_bPalatalize; +}; + + +static ClampRule_t g_dCaseRules [] = +{ + { 7, "atech", 5, 5, false }, + { 6, "\xECtem", 4, 3, true }, // \u011b + { 6, "at\xF9m", 4, 4, false }, // \u016f + { 5, "ech", 3, 2, true }, + { 5, "ich", 3, 2, true }, + { 5, "\xED!ch", 3, 2, true }, // \u00ed + { 5, "\xE9ho", 3, 2, true }, // \u00e9 + { 5, "\xECmi", 3, 2, true }, // \u011b + { 5, "emi", 3, 2, true }, + { 5, "\xE9mu", 3, 2, true }, // \u00e9 + { 5, "\xECte", 3, 2, true }, // \u011b + { 5, "\xECti", 3, 2, true }, // \u011b + { 5, "iho", 3, 2, true }, + { 5, "\xEDho", 3, 2, true }, // \u00ed + { 5, "\xEDmi", 3, 2, true }, // \u00ed + { 5, "imu", 3, 2, true }, + { 5, "\xE1!ch", 3, 3, false }, // \u00e1 + { 5, "ata", 3, 3, false }, + { 5, "aty", 3, 3, false }, + { 5, "\xFD!ch", 3, 3, false }, // \u00fd + { 5, "ama", 3, 3, false }, + { 5, "ami", 3, 3, false }, + { 5, "ov\xE9", 3, 3, false }, // \u00e9 + { 5, "ovi", 3, 3, false }, + { 5, "\xFDmi", 3, 3, false }, // \u00fd + { 4, "em", 2, 1, true }, + { 4, "es", 2, 2, true }, + { 4, "\xE9m", 2, 2, true }, // \u00e9 + { 4, "\xEDm", 2, 2, true }, // \u00ed + { 4, "\xF9!fm", 2, 2, false }, // \u016f + { 4, "at", 2, 2, false }, + { 4, "\xE1m", 2, 2, false }, // \u00e1 + { 4, "os", 2, 2, false }, + { 4, "us", 2, 2, false }, + { 4, "\xFDm", 2, 2, false }, // \u00fd + { 4, "mi", 2, 2, false }, + { 4, "ou", 2, 2, false }, + { 3, "e", 1, 0, true }, + { 3, "i", 1, 0, true }, + { 3, "\xED", 1, 0, true }, // \u00ed + { 3, "\xEC", 1, 0, true }, // \u011b + { 3, "u", 1, 1, false }, + { 3, "y", 1, 1, false }, + { 3, "\xF9", 1, 1, false }, // \u016f + { 3, "a", 1, 1, false }, + { 3, "o", 1, 1, false }, + { 3, "\xE1", 1, 1, false }, // \u00e1 + { 3, "\xE9", 1, 1, false }, // \u00e9 + { 3, "\xFD", 1, 1, false } // \u00fd +}; + + +static ClampRule_t g_dPosessiveRules [] = +{ + { 5, "ov", 2, 2, false }, + { 5, "\xF9v", 2, 2, false }, + { 5, "in", 2, 1, true }, +}; + + +struct ReplaceRule_t +{ + BYTE m_szSuffix[4]; + int m_iRemoveLength; + BYTE m_szAppend[4]; +}; + + +static ReplaceRule_t g_dPalatalizeRules [] = +{ + { "ci", 2, "k" }, + { "ce", 2, "k" }, + { "\xE8i", 2, "k" }, // \u010d + { "\xE8!e", 2, "k" }, // \u010d + { "zi", 2, "h" }, + { "ze", 2, "h" }, + { "\x9Ei", 2, "h" }, // \u017e + { "\x9E!e", 2, "h" }, // \u017e + { "\xE8t\xEC", 3, "ck" }, // \u010d \u011b + { "\xE8ti", 3, "ck" }, + { "\xE8t\xED", 3, "ck" }, // \u010d \u00ed + { "\x9At\xEC", 3, "sk" }, // \u0161 \u011b // was: check 2, remove 2 + { "\x9Ati", 3, "sk" }, // \u0161 // was: check 2, remove 2 + { "\x9At\xED", 3, "sk" }, // \u0161 \u00ed // was: check 2, remove 2 +}; + + +static void Palatalize ( BYTE * word ) +{ + if ( !word ) + return; + + int nRules = sizeof ( g_dPalatalizeRules ) / sizeof ( g_dPalatalizeRules[0] ); + int iWordLength = strlen ( (char*)word ); + + for ( int i = 0; i < nRules; ++i ) + { + const ReplaceRule_t & Rule = g_dPalatalizeRules[i]; + if ( iWordLength>=Rule.m_iRemoveLength && !strncmp ( (char*)word + iWordLength - Rule.m_iRemoveLength, (char*)Rule.m_szSuffix, Rule.m_iRemoveLength ) ) + { + word [iWordLength - Rule.m_iRemoveLength] = '\0'; + strcat ( (char*)word, (char*)Rule.m_szAppend ); // NOLINT strcat + return; + } + } + + if ( iWordLength > 0 ) + word [iWordLength - 1] = '\0'; +} + + +static void ApplyRules ( BYTE * word, const ClampRule_t * pRules, int nRules ) +{ + if ( !word || !pRules ) + return; + + int iWordLength = strlen ( (char *)word ); + + for ( int i = 0; i < nRules; ++i ) + { + const ClampRule_t & Rule = pRules[i]; + if ( iWordLength > Rule.m_iMinLength && !strncmp ( (char*)word + iWordLength - Rule.m_iCheckLength, (char*)Rule.m_szSuffix, Rule.m_iCheckLength )) + { + word [iWordLength - Rule.m_nRemove] = '\0'; + Palatalize ( word ); + return; + } + } +} + +static void RemoveChars ( char * szString, char cChar ) +{ + char * szPos; + int iLength = strlen ( szString ); + while ( ( szPos = strchr ( szString, cChar ) )!=NULL ) + memmove ( szPos, szPos + 1, iLength - ( szPos - szString ) ); +} + + +static void PreprocessRules ( ClampRule_t * pRules, int nRules ) +{ + if ( !pRules ) + return; + + for ( int i = 0; i < nRules; ++i ) + RemoveChars ( (char *) pRules[i].m_szSuffix, '!' ); +} + +static void PreprocessReplace () +{ + int nRules = sizeof ( g_dPalatalizeRules ) / sizeof ( g_dPalatalizeRules[0] ); + + for ( int i = 0; i < nRules; ++i ) + { + RemoveChars ( (char *) g_dPalatalizeRules[i].m_szSuffix, '!' ); + RemoveChars ( (char *) g_dPalatalizeRules[i].m_szAppend, '!' ); + } +} + + +void stem_cz_init () +{ + PreprocessRules ( g_dCaseRules, sizeof ( g_dCaseRules ) / sizeof ( g_dCaseRules[0] ) ); + PreprocessRules ( g_dPosessiveRules, sizeof ( g_dPosessiveRules ) / sizeof ( g_dPosessiveRules[0] ) ); + PreprocessReplace (); +} + + +void stem_cz ( BYTE * word ) +{ + ApplyRules ( word, g_dCaseRules, sizeof ( g_dCaseRules ) / sizeof ( g_dCaseRules[0] ) ); + ApplyRules ( word, g_dPosessiveRules, sizeof ( g_dPosessiveRules ) / sizeof ( g_dPosessiveRules[0] ) ); +} + + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxstemcz.o b/coreseek/csft-4.1/src/sphinxstemcz.o new file mode 100644 index 0000000..014805d Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxstemcz.o differ diff --git a/coreseek/csft-4.1/src/sphinxstemen.cpp b/coreseek/csft-4.1/src/sphinxstemen.cpp new file mode 100755 index 0000000..0bf3c02 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxstemen.cpp @@ -0,0 +1,550 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" // for UNALIGNED_RAM_ACCESS + +#if defined(_MSC_VER) && !defined(__cplusplus) +#define inline +#endif + +// #define SNOWBALL2011 + +static unsigned char stem_en_doubles[] = "bdfgmnprt"; + +static unsigned char vowel_map[] = + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // 0 + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // 1 + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // 2 + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // 3 + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // 4 + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // 5 + //` a b c d e f g h i j k l m n o - NOLINT + "\0\1\0\0\0\1\0\0\0\1\0\0\0\0\0\1" // 6 + //p q r s t u v w x y z - NOLINT + "\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0" // 7 + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // 8 + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // 9 + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // a + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // b + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // c + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // d + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" // e + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; // f + +#define is_vowel(idx) vowel_map[word[idx]] + +static inline int stem_en_id ( unsigned char l ) +{ + register unsigned char * v = stem_en_doubles; + while ( *v && *v!=l ) v++; + return ( *v==l ) ? 1 : 0; +} + +static inline int stem_en_ivwxy ( unsigned char l ) +{ + return vowel_map[l] || l=='w' || l=='x' || l=='Y'; +} + +void stem_en_init () +{ +} + +#define EXCBASE(b) ( iword==( ( (int)b[3]<<24 ) + ( (int)b[2]<<16 ) + ( (int)b[1]<<8 ) + (int)b[0] ) ) +#define EXC4(a,b) ( len==4 && EXCBASE(b) ) +#define EXC5(a,b) ( len==5 && EXCBASE(b) ) +#define EXC6(a,b) ( len==6 && EXCBASE(b) && a[4]==b[4] ) +#define EXC7(a,b) ( len==7 && EXCBASE(b) && a[4]==b[4] && a[5]==b[5] ) +#define EXC8(a,b) ( len==8 && EXCBASE(b) && a[4]==b[4] && a[5]==b[5] && a[6]==b[6] ) + +void stem_en ( unsigned char * word, int len ) +{ + int i, first_vowel, r1, r2, iword; + unsigned char has_Y = 0; + + if ( len<=2 ) + return; + +#if UNALIGNED_RAM_ACCESS + iword = *(int*)word; +#else + iword = ( (int)word[3]<<24 ) + ( (int)word[2]<<16 ) + ( (int)word[1]<<8 ) + (int)word[0]; +#endif + + // check for 3-letter exceptions (currently just one, "sky") and shortcuts + if ( len==3 ) + { +#define CHECK3(c1,c2,c3) if ( iword==( (c1<<0)+(c2<<8)+(c3<<16) ) ) return; +#ifdef SNOWBALL2011 +#define CHECK3A CHECK3 +#else +#define CHECK3A(c1,c2,c3) if ( iword==( (c1<<0)+(c2<<8)+(c3<<16) ) ) { word[2] = '\0'; return; } +#endif + CHECK3 ( 't', 'h', 'e' ); + CHECK3 ( 'a', 'n', 'd' ); + CHECK3 ( 'y', 'o', 'u' ); + CHECK3A ( 'w', 'a', 's' ); + CHECK3A ( 'h', 'i', 's' ); + CHECK3 ( 'f', 'o', 'r' ); + CHECK3 ( 'h', 'e', 'r' ); + CHECK3 ( 's', 'h', 'e' ); + CHECK3 ( 'b', 'u', 't' ); + CHECK3 ( 'h', 'a', 'd' ); + CHECK3 ( 's', 'k', 'y' ); + } + + // check for 4..8-letter exceptions + if ( len>=4 && len<=8 ) + { + // check for 4-letter exceptions and shortcuts + if ( len==4 ) + { + // shortcuts + if ( iword==0x74616874 ) return; // that + if ( iword==0x68746977 ) return; // with + if ( iword==0x64696173 ) return; // said + if ( iword==0x6d6f7266 ) return; // from + + // exceptions + if ( iword==0x7377656e ) return; // news + if ( iword==0x65776f68 ) return; // howe + } + + // all those exceptions only have a few valid endings; early check + switch ( word[len-1] ) + { + case 'd': + if ( EXC7 ( word, "proceed" ) ) return; + if ( EXC6 ( word, "exceed" ) ) return; + if ( EXC7 ( word, "succeed" ) ) return; + break; + + case 'g': + if ( EXC5 ( word, "dying" ) ) { word[1] = 'i'; word[2] = 'e'; word[3] = '\0'; return; } + if ( EXC5 ( word, "lying" ) ) { word[1] = 'i'; word[2] = 'e'; word[3] = '\0'; return; } + if ( EXC5 ( word, "tying" ) ) { word[1] = 'i'; word[2] = 'e'; word[3] = '\0'; return; } + if ( EXC6 ( word, "inning" ) ) return; + if ( EXC6 ( word, "outing" ) ) return; + if ( EXC7 ( word, "canning" ) ) return; +#ifdef SNOWBALL2011 + if ( EXC7 ( word, "herring" ) ) return; + if ( EXC7 ( word, "earring" ) ) return; +#endif + break; + + case 's': + if ( EXC5 ( word, "skies" ) ) { word[2] = 'y'; word[3] = '\0'; return; } + if ( EXC7 ( word, "innings" ) ) { word[6] = '\0'; return; } + if ( EXC7 ( word, "outings" ) ) { word[6] = '\0';return; } + if ( EXC8 ( word, "cannings" ) ) { word[7] = '\0';return; } +#ifdef SNOWBALL2011 + if ( EXC4 ( word, "skis" ) ) { word[3] = '\0'; return; } + if ( EXC5 ( word, "atlas" ) ) return; + if ( EXC6 ( word, "cosmos" ) ) return; + if ( EXC4 ( word, "bias" ) ) return; + if ( EXC5 ( word, "andes" ) ) return; + if ( EXC8 ( word, "herrings" ) ) { word[7] = '\0'; return; } + if ( EXC8 ( word, "earrings" ) ) { word[7] = '\0'; return; } + if ( EXC8 ( word, "proceeds" ) ) { word[7] = '\0'; return; } + if ( EXC7 ( word, "exceeds" ) ) { word[6] = '\0'; return; } + if ( EXC8 ( word, "succeeds" ) ) { word[7] = '\0'; return; } +#endif + break; + + case 'y': + if ( EXC4 ( word, "idly" ) ) { word[3] = '\0';return; } + if ( EXC6 ( word, "gently" ) ) { word[5] = '\0';return; } + if ( EXC4 ( word, "ugly" ) ) { word[3] = 'i'; word[4] = '\0'; return; } + if ( EXC5 ( word, "early" ) ) { word[4] = 'i'; word[5] = '\0'; return; } + if ( EXC4 ( word, "only" ) ) { word[3] = 'i'; word[4] = '\0'; return; } + if ( EXC6 ( word, "singly" ) ) { word[5] = '\0'; return; } + break; + } + } + + // hide consonant-style y's + if ( word[0]=='y' ) + word[0] = has_Y = 'Y'; + for ( i=1; i=5 && EXCBASE("gene") && word[4]=='r' ) + { + r1 = 5; // gener- + first_vowel = 1; + } +#ifdef SNOWBALL2011 + else if ( len>=6 && EXCBASE("comm") && word[4]=='u' && word[5]=='n' ) + { + r1 = 6; // commun- + first_vowel = 1; + } else if ( len>=5 && EXCBASE("arse") && word[4]=='n' ) + { + r1 = 5; // arsen- + first_vowel = 0; + } +#endif + else + { + for ( i=0; i=2 && W(1,c1) && W(2,c2) ) +#define SUFF3(c3,c2,c1) ( len>=3 && W(1,c1) && W(2,c2) && W(3,c3) ) +#define SUFF4(c4,c3,c2,c1) ( len>=4 && W(1,c1) && W(2,c2) && W(3,c3) && W(4,c4) ) +#define SUFF5(c5,c4,c3,c2,c1) ( len>=5 && W(1,c1) && W(2,c2) && W(3,c3) && W(4,c4) && W(5,c5) ) +#define SUFF6(c6,c5,c4,c3,c2,c1) ( len>=6 && W(1,c1) && W(2,c2) && W(3,c3) && W(4,c4) && W(5,c5) && W(6,c6) ) +#define SUFF7(c7,c6,c5,c4,c3,c2,c1) ( len>=7 && W(1,c1) && W(2,c2) && W(3,c3) && W(4,c4) && W(5,c5) && W(6,c6) && W(7,c7) ) + +#define SUFF3A(c3,c2) ( len>=3 && W(2,c2) && W(3,c3) ) +#define SUFF4A(c4,c3,c2) ( len>=4 && W(2,c2) && W(3,c3) && W(4,c4) ) +#define SUFF5A(c5,c4,c3,c2) ( len>=5 && W(2,c2) && W(3,c3) && W(4,c4) && W(5,c5) ) +#define SUFF6A(c6,c5,c4,c3,c2) ( len>=6 && W(2,c2) && W(3,c3) && W(4,c4) && W(5,c5) && W(6,c6) ) +#define SUFF7A(c7,c6,c5,c4,c3,c2) ( len>=6 && W(2,c2) && W(3,c3) && W(4,c4) && W(5,c5) && W(6,c6) && W(7,c7) ) + + /////////// + // STEP 1A + /////////// + +#ifdef SNOWBALL2011 +#define IED_ACTION { if ( len-->4 ) len--; } +#else +#define IED_ACTION { if ( len--!=4 ) len--; } +#endif + + switch ( word[len-1] ) + { + case 'd': + if ( word[len-3]=='i' && word[len-2]=='e' ) + IED_ACTION + break; + case 's': + if ( SUFF4 ( 's', 's', 'e', 's' ) ) // faster that suff4a for some reason! + len -= 2; + else if ( word[len-3]=='i' && word[len-2]=='e' ) + IED_ACTION + else if ( word[len-2]!='u' && word[len-2]!='s' ) + { +#ifdef SNOWBALL2011 + if ( first_vowel<=len-3 ) +#endif + + len--; + } + break; + } + + /////////// + // STEP 1B + /////////// + + i = 0; + switch ( word[len-1] ) + { + case 'd': + if ( SUFF3A ( 'e', 'e' ) ) { if ( len-3>=r1 ) len--; break; } + if ( word[len-2]=='e' ) i = 2; + break; + + case 'y': + if ( word[len-2]=='l' ) + { + if ( SUFF5A ( 'e', 'e', 'd', 'l' ) ) { if ( len-5>=r1 ) len -= 3; break; } + if ( SUFF4A ( 'e', 'd', 'l' ) ) { i = 4; break; } + if ( SUFF5A ( 'i', 'n', 'g', 'l' ) ) { i = 5; break; } + } + break; + + case 'g': + if ( SUFF3A ( 'i', 'n' ) ) i = 3; + break; + } + + if ( i && first_vowel=2 && word[len-1]==word[len-2] && stem_en_id ( word[len-1] ) ) + len--; + else if ( ( len==2 && is_vowel(0) && !is_vowel(1) ) + || ( len==r1 && !is_vowel ( len-3 ) && is_vowel ( len-2 ) && !stem_en_ivwxy ( word[len-1] ) ) ) + { + word[len++] = 'e'; + } + } + + /////////// + // STEP 1C + /////////// + + if ( len>2 + && ( word[len-1]=='y' || word[len-1]=='Y' ) + && !is_vowel ( len-2 ) ) + { + word[len-1] = 'i'; + } + + ////////// + // STEP 2 + ////////// + + if ( len-2>=r1 ) + switch ( word[len-1] ) + { + case 'i': + if ( len>=3 && ( W ( 2, 'c' ) || W ( 2, 'l' ) || W ( 2, 't' ) ) ) + { + if ( SUFF4A ( 'e', 'n', 'c' ) ) { if ( len-4>=r1 ) word[len-1] = 'e'; break; } + if ( SUFF4A ( 'a', 'n', 'c' ) ) { if ( len-4>=r1 ) word[len-1] = 'e'; break; } + if ( SUFF4A ( 'a', 'b', 'l' ) ) { if ( len-4>=r1 ) word[len-1] = 'e'; break; } + if ( SUFF3A ( 'b', 'l' ) ) { if ( len-3>=r1 ) word[len-1] = 'e'; break; } + + if ( SUFF5A ( 'e', 'n', 't', 'l' ) ) { if ( len-5>=r1 ) len -= 2; break; } + if ( SUFF5A ( 'a', 'l', 'i', 't' ) ) { if ( len-5>=r1 ) len -= 3; break; } + if ( SUFF5A ( 'o', 'u', 's', 'l' ) ) { if ( len-5>=r1 ) len -= 2; break; } + + if ( SUFF5A ( 'i', 'v', 'i', 't' ) ) { if ( len-5>=r1 ) { word[len-3] = 'e'; len -= 2; } break; } + if ( SUFF6A ( 'b', 'i', 'l', 'i', 't' ) ) { if ( len-6>=r1 ) { word[len-5] = 'l'; word[len-4] = 'e'; len -= 3; } break; } + if ( SUFF5A ( 'f', 'u', 'l', 'l' ) ) { if ( len-5>=r1 ) len -= 2; break; } + if ( SUFF6A ( 'l', 'e', 's', 's', 'l' ) ) { if ( len-6>=r1 ) len -= 2; break; } + } + +#ifdef SNOWBALL2011 + if ( len-3>=r1 && SUFF3A ( 'o', 'g' ) && word[len-4]=='l' ) { len -= 1; break; } +#else + if ( len-3>=r1 && SUFF3A ( 'o', 'g' ) ) { len -= 1; break; } +#endif + + if ( len-2>=r1 && word[len-2]=='l' ) + len -= 2; + else + break; + + if ( len-2>=r1 && SUFF2 ( 'a', 'l' ) ) + { + len -= 2; + if ( len-5>=r1 && SUFF5 ( 'a', 't', 'i', 'o', 'n' ) ) + { + len -= 3; + word[len++] = 'e'; + break; + } + if ( SUFF4 ( 't', 'i', 'o', 'n' ) ) + break; + len += 2; + } else + { + switch ( word[len-1] ) + { + case 'b': + case 'c': + case 'd': + case 'e': + case 'g': + case 'h': + case 'k': + case 'm': + case 'n': + case 'r': + case 't': + break; + default: + len += 2; + break; + } + } + break; + + case 'l': + if ( SUFF7A ( 'a', 't', 'i', 'o', 'n', 'a' ) ) { if ( len-7>=r1 ) { word[len-5] = 'e'; len -= 4; } break; } + if ( SUFF6A ( 't', 'i', 'o', 'n', 'a' ) ) { if ( len-6>=r1 ) len -= 2; break; } + break; + + case 'm': + if ( SUFF5A ( 'a', 'l', 'i', 's' ) ) { if ( len-5>=r1 ) len -= 3; break; } + break; + + case 'n': + if ( SUFF7A ( 'i', 'z', 'a', 't', 'i', 'o' ) ) { if ( len-7>=r1 ) { word[len-5] = 'e'; len -= 4; } break; } + if ( SUFF5A ( 'a', 't', 'i', 'o' ) ) { if ( len-5>=r1 ) { word[len-3] = 'e'; len -= 2; } break; } + break; + + case 'r': + if ( SUFF4A ( 'i', 'z', 'e' ) ) { if ( len-4>=r1 ) len -= 1; break; } + if ( SUFF4A ( 'a', 't', 'o' ) ) { if ( len-4>=r1 ) { word[len-2] = 'e'; len -= 1; } break; } + break; + + case 's': + if ( len-7>=r1 && ( + SUFF7A ( 'f', 'u', 'l', 'n', 'e', 's' ) || + SUFF7A ( 'o', 'u', 's', 'n', 'e', 's' ) || + SUFF7A ( 'i', 'v', 'e', 'n', 'e', 's' ) ) ) + { + len -= 4; + } + break; + } + + ////////// + // STEP 3 + ////////// + + if ( len-3>=r1 ) + switch ( word[len-1] ) + { + case 'e': + if ( SUFF5A ( 'a', 'l', 'i', 'z' ) ) { if ( len-5>=r1 ) len -= 3; break; } + if ( SUFF5A ( 'i', 'c', 'a', 't' ) ) { if ( len-5>=r1 ) len -= 3; break; } +#ifdef SNOWBALL2011 + if ( SUFF5A ( 'a', 't', 'i', 'v' ) ) { if ( len-5>=r2 ) len -= 5; break; } +#else + if ( SUFF5A ( 'a', 't', 'i', 'v' ) ) { if ( len-5>=r1 ) len -= 5; break; } +#endif + break; + + case 'i': + if ( SUFF5A ( 'i', 'c', 'i', 't' ) ) { if ( len-5>=r1 ) len -= 3; break; } + break; + + case 'l': + if ( SUFF4A ( 'i', 'c', 'a' ) ) { if ( len-4>=r1 ) len -= 2; break; } + if ( SUFF3A ( 'f', 'u' ) ) { len -= 3; break; } + break; + + case 's': + if ( SUFF4A ( 'n', 'e', 's' ) ) { if ( len-4>=r1 ) len -= 4; break; } + break; + } + + ////////// + // STEP 4 + ////////// + + if ( len-2>=r2 ) + switch ( word[len-1] ) + { + case 'c': + if ( word[len-2]=='i' ) len -= 2; // -ic + break; + + case 'e': + if ( len-3>=r2 ) + { + if ( SUFF4A ( 'a', 'n', 'c' ) ) { if ( len-4>=r2 ) len -= 4; break; } + if ( SUFF4A ( 'e', 'n', 'c' ) ) { if ( len-4>=r2 ) len -= 4; break; } + if ( SUFF4A ( 'a', 'b', 'l' ) ) { if ( len-4>=r2 ) len -= 4; break; } + if ( SUFF4A ( 'i', 'b', 'l' ) ) { if ( len-4>=r2 ) len -= 4; break; } + if ( SUFF3A ( 'a', 't' ) ) { len -= 3; break; } + if ( SUFF3A ( 'i', 'v' ) ) { len -= 3; break; } + if ( SUFF3A ( 'i', 'z' ) ) { len -= 3; break; } + } + break; + + case 'i': + if ( SUFF3A ( 'i', 't' ) ) { if ( len-3>=r2 ) len -= 3; break; } + break; + + case 'l': + if ( word[len-2]=='a' ) len -= 2; // -al + break; + + case 'm': + if ( SUFF3A ( 'i', 's' ) ) { if ( len-3>=r2 ) len -= 3; break; } + break; + + case 'n': + if ( len-3>=r2 && SUFF3 ( 'i', 'o', 'n' ) && ( word[len-4]=='t' || word[len-4]=='s' ) ) + len -= 3; + break; + + case 'r': + if ( word[len-2]=='e' ) len -= 2; // -er + break; + + case 's': + if ( SUFF3A ( 'o', 'u' ) ) { if ( len-3>=r2 ) len -= 3; break; } + break; + + case 't': + if ( word[len-2]=='n' ) + { + if ( SUFF5A ( 'e', 'm', 'e', 'n' ) ) { if ( len-5>=r2 ) len -= 5; break; } + if ( SUFF4A ( 'm', 'e', 'n' ) ) { if ( len-4>=r2 ) len -= 4; break; } + if ( SUFF3A ( 'a', 'n' ) ) { if ( len-3>=r2 ) len -= 3; break; } + if ( SUFF3A ( 'e', 'n' ) ) { if ( len-3>=r2 ) len -= 3; break; } + } + break; + } + + ////////// + // STEP 5 + ////////// + +#ifdef SNOWBALL2011 + if ( len>r2 && word[len-1]=='l' && word[len-2]=='l' ) + len--; + else +#endif + while ( word[len-1]=='e' ) + { + if ( len>r2 ) + { + len--; + break; + } + if ( len<=r1 ) + break; + if ( len>3 && !is_vowel ( len-4 ) && is_vowel ( len-3 ) && !stem_en_ivwxy ( word[len-2] ) ) + break; + if ( len==3 && is_vowel(0) && !is_vowel(1) ) + break; + len--; + break; + } +#ifndef SNOWBALL2011 + if ( len>r2 && word[len-1]=='l' && word[len-2]=='l' ) + len--; +#endif + + //////////// + // FINALIZE + //////////// + + word[len] = 0; + if ( has_Y ) + for ( i=0; i + +///////////////////////////////////////////////////////////////////////////// +// SBCS windows-1251 implementation +///////////////////////////////////////////////////////////////////////////// + +struct RussianAlphabetWin1251_t +{ + enum + { + A = 0xE0, + B = 0xE1, + V = 0xE2, + G = 0xE3, + D = 0xE4, + E = 0xE5, + YO = 0xB8, + ZH = 0xE6, + Z = 0xE7, + I = 0xE8, + IY = 0xE9, + K = 0xEA, + L = 0xEB, + M = 0xEC, + N = 0xED, + O = 0xEE, + P = 0xEF, + R = 0xF0, + S = 0xF1, + T = 0xF2, + U = 0xF3, + F = 0xF4, + H = 0xF5, + TS = 0xF6, + CH = 0xF7, + SH = 0xF8, + SCH = 0xF9, + TVY = 0xFA, // TVYordiy znak + Y = 0xFB, + MYA = 0xFC, // MYAgkiy znak + EE = 0xFD, + YU = 0xFE, + YA = 0xFF + }; +}; + +#define LOC_CHAR_TYPE unsigned char +#define LOC_PREFIX(_a) _a##_cp1251 +#define RUS RussianAlphabetWin1251_t + +#include "sphinxstemru.inl" + +///////////////////////////////////////////////////////////////////////////// +// UTF-8 implementation +///////////////////////////////////////////////////////////////////////////// + +struct RussianAlphabetUTF8_t +{ + enum + { + A = 0xB0D0U, + B = 0xB1D0U, + V = 0xB2D0U, + G = 0xB3D0U, + D = 0xB4D0U, + E = 0xB5D0U, + YO = 0x91D1U, + ZH = 0xB6D0U, + Z = 0xB7D0U, + I = 0xB8D0U, + IY = 0xB9D0U, + K = 0xBAD0U, + L = 0xBBD0U, + M = 0xBCD0U, + N = 0xBDD0U, + O = 0xBED0U, + P = 0xBFD0U, + R = 0x80D1U, + S = 0x81D1U, + T = 0x82D1U, + U = 0x83D1U, + F = 0x84D1U, + H = 0x85D1U, + TS = 0x86D1U, + CH = 0x87D1U, + SH = 0x88D1U, + SCH = 0x89D1U, + TVY = 0x8AD1U, // TVYordiy znak + Y = 0x8BD1U, + MYA = 0x8CD1U, // MYAgkiy znak + EE = 0x8DD1U, + YU = 0x8ED1U, + YA = 0x8FD1U + }; +}; + +#define LOC_CHAR_TYPE unsigned short +#define LOC_PREFIX(_a) _a##_utf8 +#define RUS RussianAlphabetUTF8_t + +#include "sphinxstemru.inl" // NOLINT 2nd include + +///////////////////////////////////////////////////////////////////////////// + +void stem_ru_init () +{ + stem_ru_init_cp1251 (); + stem_ru_init_utf8 (); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxstemru.inl b/coreseek/csft-4.1/src/sphinxstemru.inl new file mode 100755 index 0000000..5496732 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxstemru.inl @@ -0,0 +1,551 @@ +// +// $Id$ +// + +#undef LOC_TABLE_ENTRY +#undef LOC_TABLE_INDEX +#define LOC_TABLE_ENTRY LOC_PREFIX(stem_table_entry_) +#define LOC_TABLE_INDEX LOC_PREFIX(stem_table_index_) + + +struct LOC_TABLE_ENTRY +{ + LOC_CHAR_TYPE suffix[8]; + int remove, len; +}; + + +struct LOC_TABLE_INDEX +{ + LOC_CHAR_TYPE first; + int count; +}; + + +// TableStringN, where N is a number of chars +#undef TS1 +#undef TS2 +#undef TS3 +#undef TS4 +#undef TS5 +#define TS1(c1) { RUS::c1 } +#define TS2(c1,c2) { RUS::c1, RUS::c2 } +#define TS3(c1,c2,c3) { RUS::c1, RUS::c2, RUS::c3 } +#define TS4(c1,c2,c3,c4) { RUS::c1, RUS::c2, RUS::c3, RUS::c4 } +#define TS5(c1,c2,c3,c4,c5) { RUS::c1, RUS::c2, RUS::c3, RUS::c4, RUS::c5 } + + +static LOC_TABLE_INDEX LOC_PREFIX(ru_adj_i)[] = +{ + { RUS::E, 4 }, + { RUS::I, 2 }, + { RUS::IY, 4 }, + { RUS::M, 7 }, + { RUS::O, 2 }, + { RUS::U, 2 }, + { RUS::H, 2 }, + { RUS::YU, 4 }, + { RUS::YA, 4 }, +}; + + +static LOC_TABLE_ENTRY LOC_PREFIX(ru_adj)[] = +{ + { TS2(E,E), 2 }, + { TS2(I,E), 2 }, + { TS2(Y,E), 2 }, + { TS2(O,E), 2 }, + + { TS3(I,M,I), 3 }, + { TS3(Y,M,I), 3 }, + + { TS2(E,IY), 2 }, + { TS2(I,IY), 2 }, + { TS2(Y,IY), 2 }, + { TS2(O,IY), 2 }, + + { TS3(A,E,M), 0 }, + { TS3(U,E,M), 0 }, + { TS3(YA,E,M), 0 }, + { TS2(E,M), 2 }, + { TS2(I,M), 2 }, + { TS2(Y,M), 2 }, + { TS2(O,M), 2 }, + + { TS3(E,G,O), 3 }, + { TS3(O,G,O), 3 }, + + { TS3(E,M,U), 3 }, + { TS3(O,M,U), 3 }, + + { TS2(I,H), 2 }, + { TS2(Y,H), 2 }, + + { TS2(E,YU), 2 }, + { TS2(O,YU), 2 }, + { TS2(U,YU), 2 }, + { TS2(YU,YU), 2 }, + + { TS2(A,YA), 2 }, + { TS2(YA,YA), 2 } +}; + + +static LOC_TABLE_INDEX LOC_PREFIX(ru_part_i)[] = +{ + { RUS::A, 3 }, + { RUS::M, 1 }, + { RUS::N, 3 }, + { RUS::O, 3 }, + { RUS::Y, 3 }, + { RUS::SH, 4 }, + { RUS::SCH, 5 } +}; + + +static LOC_TABLE_ENTRY LOC_PREFIX(ru_part)[] = +{ + { TS4(A,N,N,A), 2 }, + { TS4(E,N,N,A), 2 }, + { TS4(YA,N,N,A), 2 }, + + { TS3(YA,E,M), 2 }, + + { TS3(A,N,N), 1 }, + { TS3(E,N,N), 1 }, + { TS3(YA,N,N), 1 }, + + { TS4(A,N,N,O), 2 }, + { TS4(E,N,N,O), 2 }, + { TS4(YA,N,N,O), 2 }, + + { TS4(A,N,N,Y), 2 }, + { TS4(E,N,N,Y), 2 }, + { TS4(YA,N,N,Y), 2 }, + + { TS3(A,V,SH), 2 }, + { TS3(I,V,SH), 3 }, + { TS3(Y,V,SH), 3 }, + { TS3(YA,V,SH), 2 }, + + { TS3(A,YU,SCH), 2 }, + { TS2(A,SCH), 1 }, + { TS3(YA,YU,SCH), 2 }, + { TS2(YA,SCH), 1 }, + { TS3(U,YU,SCH), 3 } +}; + + +static LOC_TABLE_INDEX LOC_PREFIX(ru_verb_i)[] = +{ + { RUS::A, 7 }, + { RUS::E, 9 }, + { RUS::I, 4 }, + { RUS::IY, 4 }, + { RUS::L, 4 }, + { RUS::M, 5 }, + { RUS::O, 7 }, + { RUS::T, 9 }, + { RUS::Y, 3 }, + { RUS::MYA, 10 }, + { RUS::YU, 4 }, + { RUS::YA, 1 } +}; + + +static LOC_TABLE_ENTRY LOC_PREFIX(ru_verb)[] = +{ + { TS3(A,L,A), 3 }, + { TS3(A,N,A), 3 }, + { TS3(YA,L,A), 3 }, + { TS3(YA,N,A), 3 }, + { TS3(I,L,A), 3 }, + { TS3(Y,L,A), 3 }, + { TS3(E,N,A), 3 }, + + { TS4(A,E,T,E), 4 }, + { TS4(A,IY,T,E), 4 }, + { TS3(MYA,T,E), 3 }, + { TS4(U,E,T,E), 4 }, + { TS4(YA,E,T,E), 4 }, + { TS4(YA,IY,T,E), 4 }, + { TS4(E,IY,T,E), 4 }, + { TS4(U,IY,T,E), 4 }, + { TS3(I,T,E), 3 }, + + { TS3(A,L,I), 3 }, + { TS3(YA,L,I), 3 }, + { TS3(I,L,I), 3 }, + { TS3(Y,L,I), 3 }, + + { TS2(A,IY), 2 }, + { TS2(YA,IY), 2 }, + { TS2(E,IY), 2 }, + { TS2(U,IY), 2 }, + + { TS2(A,L), 2 }, + { TS2(YA,L), 2 }, + { TS2(I,L), 2 }, + { TS2(Y,L), 2 }, + + { TS3(A,E,M), 3 }, + { TS3(YA,E,M), 3 }, + { TS3(U,E,M), 3 }, + { TS2(I,M), 2 }, + { TS2(Y,M), 2 }, + + { TS3(A,L,O), 3 }, + { TS3(A,N,O), 3 }, + { TS3(YA,L,O), 3 }, + { TS3(YA,N,O), 3 }, + { TS3(I,L,O), 3 }, + { TS3(Y,L,O), 3 }, + { TS3(E,N,O), 3 }, + + { TS3(A,E,T), 3 }, + { TS3(A,YU,T), 3 }, + { TS3(YA,E,T), 3 }, + { TS3(YA,YU,T), 3 }, + { TS2(YA,T), 2 }, + { TS3(U,E,T), 3 }, + { TS3(U,YU,T), 3 }, + { TS2(I,T), 2 }, + { TS2(Y,T), 2 }, + + { TS3(A,N,Y), 3 }, + { TS3(YA,N,Y), 3 }, + { TS3(E,N,Y), 3 }, + + { TS4(A,E,SH,MYA), 4 }, + { TS4(U,E,SH,MYA), 4 }, + { TS4(YA,E,SH,MYA), 4 }, + { TS3(A,T,MYA), 3 }, + { TS3(E,T,MYA), 3 }, + { TS3(I,T,MYA), 3 }, + { TS3(U,T,MYA), 3 }, + { TS3(Y,T,MYA), 3 }, + { TS3(I,SH,MYA), 3 }, + { TS3(YA,T,MYA), 3 }, + + { TS2(A,YU), 2 }, + { TS2(U,YU), 2 }, + { TS2(YA,YU), 2 }, + { TS1(YU), 1 }, + + { TS2(U,YA), 2 } +}; + + +static LOC_TABLE_INDEX LOC_PREFIX(ru_dear_i)[] = +{ + { RUS::K, 3 }, + { RUS::A, 2 }, + { RUS::V, 2 }, + { RUS::E, 2 }, + { RUS::I, 4 }, + { RUS::IY, 2 }, + { RUS::M, 4 }, + { RUS::O, 2 }, + { RUS::U, 2 }, + { RUS::H, 2 }, + { RUS::YU, 2 } +}; + + +static LOC_TABLE_ENTRY LOC_PREFIX(ru_dear)[] = +{ + { TS3(CH,E,K), 3 }, + { TS3(CH,O,K), 3 }, + { TS3(N,O,K), 3 }, + + { TS3(CH,K,A), 3 }, + { TS3(N, K,A), 3 }, + { TS4(CH,K,O,V), 4 }, + { TS4(N, K,O,V), 4 }, + { TS3(CH,K,E), 3 }, + { TS3(N, K,E), 3 }, + { TS3(CH,K,I), 3 }, + { TS3(N, K,I), 3 }, + { TS5(CH,K,A,M,I), 5 }, + { TS5(N, K,A,M,I), 5 }, + { TS4(CH,K,O,IY), 4 }, + { TS4(N, K,O,IY), 4 }, + { TS4(CH,K,A,M), 4 }, + { TS4(N, K,A,M), 4 }, + { TS4(CH,K,O,M), 4 }, + { TS4(N, K,O,M), 4 }, + { TS3(CH,K,O), 3 }, + { TS3(N, K,O), 3 }, + { TS3(CH,K,U), 3 }, + { TS3(N, K,U), 3 }, + { TS4(CH,K,A,H), 4 }, + { TS4(N, K,A,H), 4 }, + { TS4(CH,K,O,YU), 4 }, + { TS4(N, K,O,YU), 4 } +}; + + +static LOC_TABLE_INDEX LOC_PREFIX(ru_noun_i)[] = +{ + { RUS::A, 1 }, + { RUS::V, 2 }, + { RUS::E, 3 }, + { RUS::I, 6 }, + { RUS::IY, 4 }, + { RUS::M, 5 }, + { RUS::O, 1 }, + { RUS::U, 1 }, + { RUS::H, 3 }, + { RUS::Y, 1 }, + { RUS::MYA, 1 }, + { RUS::YU, 3 }, + { RUS::YA, 3 } +}; + + +static LOC_TABLE_ENTRY LOC_PREFIX(ru_noun)[] = +{ + { TS1(A), 1 }, + + { TS2(E,V), 2 }, + { TS2(O,V), 2 }, + + { TS2(I,E), 2 }, + { TS2(MYA,E), 2 }, + { TS1(E), 1 }, + + { TS4(I,YA,M,I),4 }, + { TS3(YA,M,I), 3 }, + { TS3(A,M,I), 3 }, + { TS2(E,I), 2 }, + { TS2(I,I), 2 }, + { TS1(I), 1 }, + + { TS3(I,E,IY), 3 }, + { TS2(E,IY), 2 }, + { TS2(O,IY), 2 }, + { TS2(I,IY), 2 }, + + { TS3(I,YA,M), 3 }, + { TS2(YA,M), 2 }, + { TS3(I,E,M), 3 }, + { TS2(A,M), 2 }, + { TS2(O,M), 2 }, + + { TS1(O), 1 }, + + { TS1(U), 1 }, + + { TS2(A,H), 2 }, + { TS3(I,YA,H), 3 }, + { TS2(YA,H), 2 }, + + { TS1(Y), 1 }, + + { TS1(MYA), 1 }, + + { TS2(I,YU), 2 }, + { TS2(MYA,YU), 2 }, + { TS1(YU), 1 }, + + { TS2(I,YA), 2 }, + { TS2(MYA,YA), 2 }, + { TS1(YA), 1 } +}; + + +int stem_ru_table_i ( LOC_CHAR_TYPE * word, int len, LOC_TABLE_ENTRY * table, LOC_TABLE_INDEX * itable, int icount ) +{ + int i, j, k, m; + LOC_CHAR_TYPE l = word[--len]; + + for ( i=0, j=0; ik ) + continue; + for ( ; j>=0; k--, j-- ) + if ( word[k]!=table[i].suffix[j] ) + break; + if ( j>=0 ) + continue; + return table[i].remove; + } + return 0; + } + j += itable[i].count; + } + return 0; +} + + +#undef STEM_RU_FUNC +#define STEM_RU_FUNC(func,table) \ + int func ( LOC_CHAR_TYPE * word, int len ) \ + { \ + return stem_ru_table ( word, len, LOC_PREFIX(table), \ + sizeof(LOC_PREFIX(table))/sizeof(LOC_TABLE_ENTRY) ); \ + } + +#undef STEM_RU_FUNC_I +#define STEM_RU_FUNC_I(table) \ + int LOC_PREFIX(stem_##table##_i) ( LOC_CHAR_TYPE * word, int len ) \ + { \ + return stem_ru_table_i ( word, len, LOC_PREFIX(table), LOC_PREFIX(table##_i), \ + sizeof(LOC_PREFIX(table##_i))/sizeof(LOC_TABLE_INDEX) ); \ + } + + +STEM_RU_FUNC_I(ru_adj) +STEM_RU_FUNC_I(ru_part) +STEM_RU_FUNC_I(ru_dear) +STEM_RU_FUNC_I(ru_verb) +STEM_RU_FUNC_I(ru_noun) + + +static int LOC_PREFIX(stem_ru_adjectival) ( LOC_CHAR_TYPE * word, int len ) +{ + register int i = LOC_PREFIX(stem_ru_adj_i) ( word, len ); + if ( i ) + i += LOC_PREFIX(stem_ru_part_i) ( word, len-i ); + return i; +} + + +static int LOC_PREFIX(stem_ru_verb_ov) ( LOC_CHAR_TYPE * word, int len ) +{ + register int i = LOC_PREFIX(stem_ru_verb_i) ( word, len ); + if ( i && (len>=i+2) && word[len-i-2] == RUS::O && word[len-i-1] == RUS::V ) + return i+2; + return i; +} + + +void LOC_PREFIX(stem_ru_init) () +{ + int i; + + #undef STEM_RU_INIT_TABLE + #define STEM_RU_INIT_TABLE(table) \ + for ( i=0; i=2 ) + { + if ( C(2)==RUS::I || C(2)==RUS::Y || C(2)==RUS::YA ) + BRK(2); + + if ( C(2)==RUS::A ) + { + if ( C(3)==RUS::V && C(4)==RUS::A ) + BRK(4); + BRK(2); + } + } + + if ( len>=3 && XSUFF3 ( RUS::V, RUS::SH, RUS::I ) + && ( C(4)==RUS::A || C(4)==RUS::I || C(4)==RUS::Y || C(4)==RUS::YA ) ) + BRK(4); + + if ( len>=5 && XSUFF5 ( RUS::V, RUS::SH, RUS::I, RUS::S, RUS::MYA ) + && ( C(6)==RUS::A || C(6)==RUS::I || C(6)==RUS::Y || C(6)==RUS::YA ) ) + BRK(6); + + CHK ( stem_ru_adjectival ); + + if ( len>=2 && ( XSUFF2 ( RUS::S, RUS::MYA ) || XSUFF2 ( RUS::S, RUS::YA ) ) ) + { + len -= 2; + CHK ( stem_ru_adjectival ); + CHK ( stem_ru_verb_ov ); + } else + { + CHK ( stem_ru_verb_ov ); + } + + CHK ( stem_ru_noun_i ); + break; + } + + if ( len && ( W(1,RUS::IY) || W(1,RUS::I) ) ) + len--; + + if ( len-r2>=3 && XSUFF3 ( RUS::O, RUS::S, RUS::T ) ) + len -= 3; + else if ( len-r2>=4 && XSUFF4 ( RUS::O, RUS::S, RUS::T, RUS::MYA ) ) + len -= 4; + + if ( len>=3 && XSUFF3 ( RUS::E, RUS::IY, RUS::SH ) ) + len -= 3; + else if ( len>=4 && XSUFF4 ( RUS::E, RUS::IY, RUS::SH, RUS::E ) ) + len -= 4; + + if ( len>=2 && XSUFF2 ( RUS::N, RUS::N ) ) + len--; + + if ( len && W(1,RUS::MYA) ) + len--; + + *((unsigned char*)(word+len)) = '\0'; +} + +// undefine externally defined stuff +#undef LOC_CHAR_TYPE +#undef LOC_PREFIX +#undef RUS + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxstemru.o b/coreseek/csft-4.1/src/sphinxstemru.o new file mode 100644 index 0000000..3b1eaec Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxstemru.o differ diff --git a/coreseek/csft-4.1/src/sphinxtimers.h b/coreseek/csft-4.1/src/sphinxtimers.h new file mode 100755 index 0000000..15a517b --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxtimers.h @@ -0,0 +1,39 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +DECLARE_TIMER ( collect_hits ) +DECLARE_TIMER ( sort_hits ) +DECLARE_TIMER ( write_hits ) +DECLARE_TIMER ( invert_hits ) +DECLARE_TIMER ( read_hits ) + +DECLARE_TIMER ( src_document ) +DECLARE_TIMER ( src_sql ) +DECLARE_TIMER ( src_xmlpipe ) + +DECLARE_TIMER ( query_init ) +DECLARE_TIMER ( query_load_dir ) +DECLARE_TIMER ( query_load_words ) +DECLARE_TIMER ( query_match ) +DECLARE_TIMER ( query_sort ) + +DECLARE_TIMER ( debug1 ) +DECLARE_TIMER ( debug2 ) +DECLARE_TIMER ( debug3 ) + +// +// $Id$ +// + diff --git a/coreseek/csft-4.1/src/sphinxudf.h b/coreseek/csft-4.1/src/sphinxudf.h new file mode 100755 index 0000000..ea7c170 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxudf.h @@ -0,0 +1,69 @@ +// +// $Id$ +// + +// +// Copyright (c) 2011, Andrew Aksyonoff +// Copyright (c) 2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +// +// Sphinx UDF interface header +// +// This file will be included by UDF implementations, so it should be +// portable plain C, stay standalone, and change as rarely as possible. +// + +#ifndef _sphinxudf_ +#define _sphinxudf_ + +/// error buffer size +#define SPH_UDF_ERROR_LEN 256 + +/// UDF argument and result value types +enum sphinx_udf_argtype +{ + SPH_UDF_TYPE_UINT32 = 1, ///< unsigned 32-bit integer + SPH_UDF_TYPE_UINT32SET = 2, ///< sorted set of unsigned 32-bit integers, begins with a length + SPH_UDF_TYPE_INT64 = 3, ///< signed 64-bit integer + SPH_UDF_TYPE_FLOAT = 4, ///< single-precision IEEE 754 float + SPH_UDF_TYPE_STRING = 5 ///< non-ASCIIZ string, with a separately stored length +}; + +/// UDF call arguments +typedef struct st_sphinx_udf_args +{ + int arg_count; ///< number of arguments + enum sphinx_udf_argtype * arg_types; ///< argument types + char ** arg_values; ///< argument values (strings are not (!) ASCIIZ; see str_lengths below) + char ** arg_names; ///< argument names (ASCIIZ argname in 'expr AS argname' case; NULL otherwise) + int * str_lengths; ///< string argument lengths +} SPH_UDF_ARGS; + +/// UDF initialization +typedef struct st_sphinx_udf_init +{ + void * func_data; ///< function data (will be passed to calls, deinit) + char is_const; ///< whether a function returns a constant +} SPH_UDF_INIT; + +/// integer return types +#if defined(_MSC_VER) || defined(__WIN__) +typedef __int64 sphinx_int64_t; +typedef unsigned __int64 sphinx_uint64_t; +#else +typedef long long sphinx_int64_t; +typedef unsigned long long sphinx_uint64_t; +#endif + +#endif // _sphinxudf_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxutils.cpp b/coreseek/csft-4.1/src/sphinxutils.cpp new file mode 100755 index 0000000..ba74b34 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxutils.cpp @@ -0,0 +1,1578 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +/// @file sphinxutils.cpp +/// Implementations for Sphinx utilities shared classes. + +#include "sphinx.h" +#include "sphinxutils.h" +#include +#include +#include +#if HAVE_EXECINFO_H +#include +#endif + +#if USE_WINDOWS +#include // for ::open on windows +#include +#pragma comment(linker, "/defaultlib:dbghelp.lib") +#pragma message("Automatically linking with dbghelp.lib") +#else +#include +#include +#endif + +///////////////////////////////////////////////////////////////////////////// + +static char * ltrim ( char * sLine ) +{ + while ( *sLine && isspace(*sLine) ) + sLine++; + return sLine; +} + + +static char * rtrim ( char * sLine ) +{ + char * p = sLine + strlen(sLine) - 1; + while ( p>=sLine && isspace(*p) ) + p--; + p[1] = '\0'; + return sLine; +} + + +static char * trim ( char * sLine ) +{ + return ltrim ( rtrim ( sLine ) ); +} + +////////////////////////////////////////////////////////////////////////// + +int CSphConfigSection::GetSize ( const char * sKey, int iDefault ) const +{ + CSphVariant * pEntry = (*this)( sKey ); + if ( !pEntry ) + return iDefault; + + char sMemLimit[256]; + strncpy ( sMemLimit, pEntry->cstr(), sizeof(sMemLimit) ); + sMemLimit [ sizeof(sMemLimit)-1 ] = '\0'; + + int iLen = strlen ( sMemLimit ); + if ( !iLen ) + return iDefault; + + iLen--; + int iScale = 1; + if ( toupper ( sMemLimit[iLen] )=='K' ) + { + iScale = 1024; + sMemLimit[iLen] = '\0'; + + } else if ( toupper ( sMemLimit[iLen] )=='M' ) + { + iScale = 1048576; + sMemLimit[iLen] = '\0'; + } + + char * sErr; + int iRes = strtol ( sMemLimit, &sErr, 10 ); + if ( !*sErr ) + return iScale*iRes; + + // FIXME! report syntax error here + return iDefault; +} + +////////////////////////////////////////////////////////////////////////// +// CONFIG PARSER +////////////////////////////////////////////////////////////////////////// + +/// key flags +enum +{ + KEY_DEPRECATED = 1UL<<0, + KEY_LIST = 1UL<<1 +}; + +/// key descriptor for validation purposes +struct KeyDesc_t +{ + const char * m_sKey; ///< key name + int m_iFlags; ///< flags + const char * m_sExtra; ///< extra stuff (deprecated name, for now) +}; + +/// allowed keys for source section +static KeyDesc_t g_dKeysSource[] = +{ + { "type", 0, NULL }, + { "strip_html", KEY_DEPRECATED, "html_strip (per-index)" }, + { "index_html_attrs", KEY_DEPRECATED, "html_index_attrs (per-index)" }, + { "sql_host", 0, NULL }, + { "sql_user", 0, NULL }, + { "sql_pass", 0, NULL }, + { "sql_db", 0, NULL }, + { "sql_port", 0, NULL }, + { "sql_sock", 0, NULL }, + { "mysql_connect_flags", 0, NULL }, + { "mysql_ssl_key", 0, NULL }, + { "mysql_ssl_cert", 0, NULL }, + { "mysql_ssl_ca", 0, NULL }, + { "mssql_winauth", 0, NULL }, + { "mssql_unicode", 0, NULL }, + { "sql_query_pre", KEY_LIST, NULL }, + { "sql_query", 0, NULL }, + { "sql_query_range", 0, NULL }, + { "sql_range_step", 0, NULL }, + { "sql_query_killlist", 0, NULL }, + { "sql_attr_uint", KEY_LIST, NULL }, + { "sql_attr_bool", KEY_LIST, NULL }, + { "sql_attr_timestamp", KEY_LIST, NULL }, + { "sql_attr_str2ordinal", KEY_LIST, NULL }, + { "sql_attr_float", KEY_LIST, NULL }, + { "sql_attr_bigint", KEY_LIST, NULL }, + { "sql_attr_multi", KEY_LIST, NULL }, + { "sql_query_post", KEY_LIST, NULL }, + { "sql_query_post_index", KEY_LIST, NULL }, + { "sql_ranged_throttle", 0, NULL }, + { "sql_query_info_pre", 0, NULL }, + { "sql_query_info", 0, NULL }, + { "xmlpipe_command", 0, NULL }, + { "xmlpipe_field", KEY_LIST, NULL }, + { "xmlpipe_attr_uint", KEY_LIST, NULL }, + { "xmlpipe_attr_timestamp", KEY_LIST, NULL }, + { "xmlpipe_attr_str2ordinal", KEY_LIST, NULL }, + { "xmlpipe_attr_bool", KEY_LIST, NULL }, + { "xmlpipe_attr_float", KEY_LIST, NULL }, + { "xmlpipe_attr_multi", KEY_LIST, NULL }, + { "xmlpipe_attr_multi_64", KEY_LIST, NULL }, + { "xmlpipe_attr_string", KEY_LIST, NULL }, + { "xmlpipe_attr_wordcount", KEY_LIST, NULL }, + { "xmlpipe_field_string", KEY_LIST, NULL }, + { "xmlpipe_field_wordcount", KEY_LIST, NULL }, + { "xmlpipe_fixup_utf8", 0, NULL }, + { "sql_group_column", KEY_LIST | KEY_DEPRECATED, "sql_attr_uint" }, + { "sql_date_column", KEY_LIST | KEY_DEPRECATED, "sql_attr_timestamp" }, + { "sql_str2ordinal_column", KEY_LIST | KEY_DEPRECATED, "sql_attr_str2ordinal" }, + { "unpack_zlib", KEY_LIST, NULL }, + { "unpack_mysqlcompress", KEY_LIST, NULL }, + { "unpack_mysqlcompress_maxsize", 0, NULL }, + { "odbc_dsn", 0, NULL }, + { "name", 0, NULL }, // -coreseek -pysource + { "sql_joined_field", KEY_LIST, NULL }, + { "sql_attr_string", KEY_LIST, NULL }, + { "sql_attr_str2wordcount", KEY_LIST, NULL }, + { "sql_field_string", KEY_LIST, NULL }, + { "sql_field_str2wordcount", KEY_LIST, NULL }, + { "sql_file_field", KEY_LIST, NULL }, + { "sql_column_buffers", 0, NULL }, + { NULL, 0, NULL } +}; + +/// allowed keys for index section +static KeyDesc_t g_dKeysIndex[] = +{ + { "source", KEY_LIST, NULL }, + { "path", 0, NULL }, + { "docinfo", 0, NULL }, + { "mlock", 0, NULL }, + { "morphology", 0, NULL }, + { "stopwords", 0, NULL }, + { "synonyms", KEY_DEPRECATED, "exceptions" }, + { "exceptions", 0, NULL }, + { "wordforms", 0, NULL }, + { "min_word_len", 0, NULL }, + { "charset_type", 0, NULL }, + { "charset_table", 0, NULL }, + { "charset_dictpath", 0, NULL }, //coreseek: mmseg's dictionary path + { "charset_debug", 0, NULL }, //coreseek: debug output tokens + { "ignore_chars", 0, NULL }, + { "min_prefix_len", 0, NULL }, + { "min_infix_len", 0, NULL }, + { "prefix_fields", 0, NULL }, + { "infix_fields", 0, NULL }, + { "enable_star", 0, NULL }, + { "ngram_len", 0, NULL }, + { "ngram_chars", 0, NULL }, + { "phrase_boundary", 0, NULL }, + { "phrase_boundary_step", 0, NULL }, + { "ondisk_dict", 0, NULL }, + { "type", 0, NULL }, + { "local", KEY_LIST, NULL }, + { "agent", KEY_LIST, NULL }, + { "agent_blackhole", KEY_LIST, NULL }, + { "agent_connect_timeout", 0, NULL }, + { "agent_query_timeout", 0, NULL }, + { "html_strip", 0, NULL }, + { "html_index_attrs", 0, NULL }, + { "html_remove_elements", 0, NULL }, + { "preopen", 0, NULL }, + { "inplace_enable", 0, NULL }, + { "inplace_hit_gap", 0, NULL }, + { "inplace_docinfo_gap", 0, NULL }, + { "inplace_reloc_factor", 0, NULL }, + { "inplace_write_factor", 0, NULL }, + { "index_exact_words", 0, NULL }, + { "min_stemming_len", 0, NULL }, + { "overshort_step", 0, NULL }, + { "stopword_step", 0, NULL }, + { "blend_chars", 0, NULL }, + { "expand_keywords", 0, NULL }, + { "hitless_words", KEY_LIST, NULL }, + { "hit_format", 0, NULL }, + { "rt_field", KEY_LIST, NULL }, + { "rt_attr_uint", KEY_LIST, NULL }, + { "rt_attr_bigint", KEY_LIST, NULL }, + { "rt_attr_float", KEY_LIST, NULL }, + { "rt_attr_timestamp", KEY_LIST, NULL }, + { "rt_attr_string", KEY_LIST, NULL }, + { "rt_attr_multi", KEY_LIST, NULL }, + { "rt_attr_multi_64", KEY_LIST, NULL }, + { "rt_mem_limit", 0, NULL }, + { "dict", 0, NULL }, + { "index_sp", 0, NULL }, + { "index_zones", 0, NULL }, + { "blend_mode", 0, NULL }, + { NULL, 0, NULL } +}; + +/// allowed keys for indexer section +static KeyDesc_t g_dKeysIndexer[] = +{ + { "mem_limit", 0, NULL }, + { "max_iops", 0, NULL }, + { "max_iosize", 0, NULL }, + { "max_xmlpipe2_field", 0, NULL }, + { "max_file_field_buffer", 0, NULL }, + { "write_buffer", 0, NULL }, + { "on_file_field_error", 0, NULL }, + { NULL, 0, NULL } +}; + +/// allowed keys for searchd section +static KeyDesc_t g_dKeysSearchd[] = +{ + { "address", KEY_DEPRECATED, "listen" }, + { "port", 0, NULL }, + { "listen", KEY_LIST, NULL }, + { "log", 0, NULL }, + { "query_log", 0, NULL }, + { "read_timeout", 0, NULL }, + { "client_timeout", 0, NULL }, + { "max_children", 0, NULL }, + { "pid_file", 0, NULL }, + { "max_matches", 0, NULL }, + { "seamless_rotate", 0, NULL }, + { "preopen_indexes", 0, NULL }, + { "unlink_old", 0, NULL }, + { "ondisk_dict_default", 0, NULL }, + { "attr_flush_period", 0, NULL }, + { "max_packet_size", 0, NULL }, + { "mva_updates_pool", 0, NULL }, + { "crash_log_path", KEY_DEPRECATED, NULL }, + { "max_filters", 0, NULL }, + { "max_filter_values", 0, NULL }, + { "listen_backlog", 0, NULL }, + { "read_buffer", 0, NULL }, + { "read_unhinted", 0, NULL }, + { "max_batch_queries", 0, NULL }, + { "subtree_docs_cache", 0, NULL }, + { "subtree_hits_cache", 0, NULL }, + { "workers", 0, NULL }, + { "prefork", 0, NULL }, + { "dist_threads", 0, NULL }, + { "binlog_flush", 0, NULL }, + { "binlog_path", 0, NULL }, + { "binlog_max_log_size", 0, NULL }, + { "thread_stack", 0, NULL }, + { "expansion_limit", 0, NULL }, + { "compat_sphinxql_magics", 0, NULL }, + { "rt_flush_period", 0, NULL }, + { "query_log_format", 0, NULL }, + { "mysql_version_string", 0, NULL }, + { "plugin_dir", 0, NULL }, + { "collation_server", 0, NULL }, + { "collation_libc_locale", 0, NULL }, + { "watchdog", 0, NULL }, + { "prefork_rotation_throttle", 0, NULL }, + { NULL, 0, NULL } +}; + +// -coreseek -pysource +static KeyDesc_t g_dKeysPython[] = +{ + { "path", KEY_LIST, NULL }, + { NULL, 0, NULL } +}; + +////////////////////////////////////////////////////////////////////////// + +CSphConfigParser::CSphConfigParser () + : m_sFileName ( "" ) + , m_iLine ( -1 ) +{ +} + + +bool CSphConfigParser::IsPlainSection ( const char * sKey ) +{ + if ( !strcasecmp ( sKey, "indexer" ) ) return true; + if ( !strcasecmp ( sKey, "searchd" ) ) return true; + if ( !strcasecmp ( sKey, "search" ) ) return true; + if ( !strcasecmp ( sKey, "python" ) ) return true; //-coreseek -pysource + return false; +} + + +bool CSphConfigParser::IsNamedSection ( const char * sKey ) +{ + if ( !strcasecmp ( sKey, "source" ) ) return true; + if ( !strcasecmp ( sKey, "index" ) ) return true; + return false; +} + + +bool CSphConfigParser::AddSection ( const char * sType, const char * sName ) +{ + m_sSectionType = sType; + m_sSectionName = sName; + + if ( !m_tConf.Exists ( m_sSectionType ) ) + m_tConf.Add ( CSphConfigType(), m_sSectionType ); // FIXME! be paranoid, verify that it returned true + + if ( m_tConf[m_sSectionType].Exists ( m_sSectionName ) ) + { + snprintf ( m_sError, sizeof(m_sError), "section '%s' (type='%s') already exists", sName, sType ); + return false; + } + m_tConf[m_sSectionType].Add ( CSphConfigSection(), m_sSectionName ); // FIXME! be paranoid, verify that it returned true + + return true; +} + + +void CSphConfigParser::AddKey ( const char * sKey, char * sValue ) +{ + assert ( m_tConf.Exists ( m_sSectionType ) ); + assert ( m_tConf[m_sSectionType].Exists ( m_sSectionName ) ); + + sValue = trim ( sValue ); + CSphConfigSection & tSec = m_tConf[m_sSectionType][m_sSectionName]; + if ( tSec(sKey) ) + { + if ( tSec[sKey].m_bTag ) + { + // override value or list with a new value + SafeDelete ( tSec[sKey].m_pNext ); // only leave the first array element + tSec[sKey] = sValue; // update its value + tSec[sKey].m_bTag = false; // mark it as overridden + + } else + { + // chain to tail, to keep the order + CSphVariant * pTail = &tSec[sKey]; + while ( pTail->m_pNext ) + pTail = pTail->m_pNext; + pTail->m_pNext = new CSphVariant ( sValue ); + } + + } else + { + // just add + tSec.Add ( sValue, sKey ); // FIXME! be paranoid, verify that it returned true + } +} + + +bool CSphConfigParser::ValidateKey ( const char * sKey ) +{ + // get proper descriptor table + // OPTIMIZE! move lookup to AddSection + const KeyDesc_t * pDesc = NULL; + if ( m_sSectionType=="source" ) pDesc = g_dKeysSource; + else if ( m_sSectionType=="index" ) pDesc = g_dKeysIndex; + else if ( m_sSectionType=="indexer" ) pDesc = g_dKeysIndexer; + else if ( m_sSectionType=="searchd" ) pDesc = g_dKeysSearchd; + else if ( m_sSectionType=="python" ) pDesc = g_dKeysPython; // -coreseek -pysource + if ( !pDesc ) + { + snprintf ( m_sError, sizeof(m_sError), "unknown section type '%s'", m_sSectionType.cstr() ); + return false; + } + + // check if the key is known + while ( pDesc->m_sKey && strcasecmp ( pDesc->m_sKey, sKey ) ) + pDesc++; + + // in py-source mode, user can append custom key. + CSphConfigSection & tSec = m_tConf[m_sSectionType][m_sSectionName]; + bool bNoCheck = false; + // This piece cause that type assignment must be the 1st line in source section. + if(tSec.Exists ( "type") ) { + bNoCheck = (tSec["type"].Begins("python") && tSec["type"].Length() == 6); + } + + if (!bNoCheck) { + if (m_sSectionType == "analyzer" || m_sSectionType == "query") //legecy code, remove it? + bNoCheck = true; + } + // -coreseek -pysource + + if ( !bNoCheck && !pDesc->m_sKey ) + { + snprintf ( m_sError, sizeof(m_sError), "unknown key name '%s'", sKey ); + return false; + } + + // warn about deprecate keys + if ( pDesc->m_iFlags & KEY_DEPRECATED ) + if ( ++m_iWarnings<=WARNS_THRESH ) + fprintf ( stdout, "WARNING: key '%s' is deprecated in %s line %d; use '%s' instead.\n", sKey, m_sFileName.cstr(), m_iLine, pDesc->m_sExtra ); + + // warn about list/non-list keys + if (!( pDesc->m_iFlags & KEY_LIST )) + { + CSphConfigSection & tSec = m_tConf[m_sSectionType][m_sSectionName]; + if ( tSec(sKey) && !tSec[sKey].m_bTag ) + if ( ++m_iWarnings<=WARNS_THRESH ) + fprintf ( stdout, "WARNING: key '%s' is not multi-value; value in %s line %d will be ignored.\n", sKey, m_sFileName.cstr(), m_iLine ); + } + + return true; +} + +#if !USE_WINDOWS + +bool CSphConfigParser::TryToExec ( char * pBuffer, char * pEnd, const char * szFilename, CSphVector & dResult ) +{ + int dPipe[2] = { -1, -1 }; + + if ( pipe ( dPipe ) ) + { + snprintf ( m_sError, sizeof ( m_sError ), "pipe() failed (error=%s)", strerror(errno) ); + return false; + } + + pBuffer = trim ( pBuffer ); + + int iRead = dPipe[0]; + int iWrite = dPipe[1]; + + int iChild = fork(); + + if ( iChild==0 ) + { + close ( iRead ); + close ( STDOUT_FILENO ); + dup2 ( iWrite, STDOUT_FILENO ); + + char * pPtr = pBuffer; + char * pArgs = NULL; + while ( *pPtr ) + { + if ( sphIsSpace ( *pPtr ) ) + { + *pPtr = '\0'; + pArgs = trim ( pPtr+1 ); + break; + } + + pPtr++; + } + + if ( pArgs ) + execl ( pBuffer, pBuffer, pArgs, szFilename, (char*)NULL ); + else + execl ( pBuffer, pBuffer, szFilename, (char*)NULL ); + + exit ( 1 ); + + } else + if ( iChild==-1 ) + { + snprintf ( m_sError, sizeof ( m_sError ), "fork failed: [%d] %s", errno, strerror(errno) ); + return false; + } + + close ( iWrite ); + + int iBytesRead, iTotalRead = 0; + const int BUFFER_SIZE = 65536; + + dResult.Reset (); + + do + { + dResult.Resize ( iTotalRead + BUFFER_SIZE ); + for ( ;; ) + { + iBytesRead = read ( iRead, (void*)&(dResult [iTotalRead]), BUFFER_SIZE ); + if ( iBytesRead==-1 && errno==EINTR ) // we can get SIGCHLD just before eof + continue; + break; + } + iTotalRead += iBytesRead; + } + while ( iBytesRead > 0 ); + + int iStatus, iResult; + do + { + // can be interrupted by pretty much anything (e.g. SIGCHLD from other searchd children) + iResult = waitpid ( iChild, &iStatus, 0 ); + + // they say this can happen if child exited and SIGCHLD was ignored + // a cleaner one would be to temporary handle it here, but can we be bothered + if ( iResult==-1 && errno==ECHILD ) + { + iResult = iChild; + iStatus = 0; + } + + if ( iResult==-1 && errno!=EINTR ) + { + snprintf ( m_sError, sizeof ( m_sError ), "waitpid() failed: [%d] %s", errno, strerror(errno) ); + return false; + } + } + while ( iResult!=iChild ); + + if ( WIFEXITED ( iStatus ) && WEXITSTATUS ( iStatus ) ) + { + // FIXME? read stderr and log that too + snprintf ( m_sError, sizeof ( m_sError ), "error executing '%s' status = %d", pBuffer, WEXITSTATUS ( iStatus ) ); + return false; + } + + if ( WIFSIGNALED ( iStatus ) ) + { + snprintf ( m_sError, sizeof ( m_sError ), "error executing '%s', killed by signal %d", pBuffer, WTERMSIG ( iStatus ) ); + return false; + } + + if ( iBytesRead < 0 ) + { + snprintf ( m_sError, sizeof ( m_sError ), "pipe read error: [%d] %s", errno, strerror(errno) ); + return false; + } + + dResult.Resize ( iTotalRead + 1 ); + dResult [iTotalRead] = '\0'; + + return true; +} +#endif + + +char * CSphConfigParser::GetBufferString ( char * szDest, int iMax, const char * & szSource ) +{ + int nCopied = 0; + + while ( nCopied < iMax-1 && szSource[nCopied] && ( nCopied==0 || szSource[nCopied-1]!='\n' ) ) + { + szDest [nCopied] = szSource [nCopied]; + nCopied++; + } + + if ( !nCopied ) + return NULL; + + szSource += nCopied; + szDest [nCopied] = '\0'; + + return szDest; +} + +bool CSphConfigParser::ReParse ( const char * sFileName, const char * pBuffer ) +{ + CSphConfig tOldConfig = m_tConf; + m_tConf.Reset(); + if ( Parse ( sFileName, pBuffer ) ) + return true; + m_tConf = tOldConfig; + return false; +} + +bool CSphConfigParser::Parse ( const char * sFileName, const char * pBuffer ) +{ + const int L_STEPBACK = 16; + const int L_TOKEN = 64; + const int L_BUFFER = 8192; + + FILE * fp = NULL; + if ( !pBuffer ) + { + // open file + fp = fopen ( sFileName, "rb" ); + if ( !fp ) + return false; + } + + // init parser + m_sFileName = sFileName; + m_iLine = 0; + m_iWarnings = 0; + + char * p = NULL; + char * pEnd = NULL; + + char sBuf [ L_BUFFER ]; + + char sToken [ L_TOKEN ]; + int iToken = 0; + int iCh = -1; + + enum { S_TOP, S_SKIP2NL, S_TOK, S_TYPE, S_SEC, S_CHR, S_VALUE, S_SECNAME, S_SECBASE, S_KEY } eState = S_TOP, eStack[8]; + int iStack = 0; + + int iValue = 0, iValueMax = 65535; + char * sValue = new char [ iValueMax+1 ]; + + #define LOC_ERROR(_msg) { strncpy ( m_sError, _msg, sizeof(m_sError) ); break; } + #define LOC_ERROR2(_msg,_a) { snprintf ( m_sError, sizeof(m_sError), _msg, _a ); break; } + #define LOC_ERROR3(_msg,_a,_b) { snprintf ( m_sError, sizeof(m_sError), _msg, _a, _b ); break; } + #define LOC_ERROR4(_msg,_a,_b,_c) { snprintf ( m_sError, sizeof(m_sError), _msg, _a, _b, _c ); break; } + + #define LOC_PUSH(_new) { assert ( iStack0 ); eState = eStack[--iStack]; } + #define LOC_BACK() { p--; } + + m_sError[0] = '\0'; + + for ( ; ; p++ ) + { + // if this line is over, load next line + if ( p>=pEnd ) + { + char * szResult = pBuffer ? GetBufferString ( sBuf, L_BUFFER, pBuffer ) : fgets ( sBuf, L_BUFFER, fp ); + if ( !szResult ) + break; // FIXME! check for read error + + m_iLine++; + int iLen = strlen(sBuf); + if ( iLen<=0 ) + LOC_ERROR ( "internal error; fgets() returned empty string" ); + + p = sBuf; + pEnd = sBuf + iLen; + if ( pEnd[-1]!='\n' ) + { + if ( iLen==L_BUFFER-1 ) + LOC_ERROR ( "line too long" ); + } + } + + // handle S_TOP state + if ( eState==S_TOP ) + { + if ( isspace(*p) ) continue; + + if ( *p=='#' ) + { +#if !USE_WINDOWS + if ( !pBuffer && m_iLine==1 && p==sBuf && p[1]=='!' ) + { + CSphVector dResult; + if ( TryToExec ( p+2, pEnd, sFileName, dResult ) ) + Parse ( sFileName, &dResult[0] ); + break; + } else +#endif + { + LOC_PUSH ( S_SKIP2NL ); + continue; + } + } + + if ( !sphIsAlpha(*p) ) LOC_ERROR ( "invalid token" ); + iToken = 0; LOC_PUSH ( S_TYPE ); LOC_PUSH ( S_TOK ); LOC_BACK(); continue; + } + + // handle S_SKIP2NL state + if ( eState==S_SKIP2NL ) + { + LOC_POP (); + p = pEnd; + continue; + } + + // handle S_TOK state + if ( eState==S_TOK ) + { + if ( !iToken && !sphIsAlpha(*p) )LOC_ERROR ( "internal error (non-alpha in S_TOK pos 0)" ); + if ( iToken==sizeof(sToken) ) LOC_ERROR ( "token too long" ); + if ( !sphIsAlpha(*p) ) { LOC_POP (); sToken [ iToken ] = '\0'; iToken = 0; LOC_BACK(); continue; } + if ( !iToken ) { sToken[0] = '\0'; } + sToken [ iToken++ ] = *p; continue; + } + + // handle S_TYPE state + if ( eState==S_TYPE ) + { + if ( isspace(*p) ) continue; + if ( *p=='#' ) { LOC_PUSH ( S_SKIP2NL ); continue; } + if ( !sToken[0] ) { LOC_ERROR ( "internal error (empty token in S_TYPE)" ); } + if ( IsPlainSection(sToken) ) { if ( !AddSection ( sToken, sToken ) ) break; sToken[0] = '\0'; LOC_POP (); LOC_PUSH ( S_SEC ); LOC_PUSH ( S_CHR ); iCh = '{'; LOC_BACK(); continue; } + if ( IsNamedSection(sToken) ) { m_sSectionType = sToken; sToken[0] = '\0'; LOC_POP (); LOC_PUSH ( S_SECNAME ); LOC_BACK(); continue; } + LOC_ERROR2 ( "invalid section type '%s'", sToken ); + } + + // handle S_CHR state + if ( eState==S_CHR ) + { + if ( isspace(*p) ) continue; + if ( *p=='#' ) { LOC_PUSH ( S_SKIP2NL ); continue; } + if ( *p!=iCh ) LOC_ERROR3 ( "expected '%c', got '%c'", iCh, *p ); + LOC_POP (); continue; + } + + // handle S_SEC state + if ( eState==S_SEC ) + { + if ( isspace(*p) ) continue; + if ( *p=='#' ) { LOC_PUSH ( S_SKIP2NL ); continue; } + if ( *p=='}' ) { LOC_POP (); continue; } + if ( sphIsAlpha(*p) ) { LOC_PUSH ( S_KEY ); LOC_PUSH ( S_TOK ); LOC_BACK(); iValue = 0; sValue[0] = '\0'; continue; } + LOC_ERROR2 ( "section contents: expected token, got '%c'", *p ); + } + + // handle S_KEY state + if ( eState==S_KEY ) + { + // validate the key + if ( !ValidateKey ( sToken ) ) + break; + + // an assignment operator and a value must follow + LOC_POP (); LOC_PUSH ( S_VALUE ); LOC_PUSH ( S_CHR ); iCh = '='; + LOC_BACK(); // because we did not work the char at all + continue; + } + + // handle S_VALUE state + if ( eState==S_VALUE ) + { + if ( *p=='\n' ) { AddKey ( sToken, sValue ); iValue = 0; LOC_POP (); continue; } + if ( *p=='#' ) { AddKey ( sToken, sValue ); iValue = 0; LOC_POP (); LOC_PUSH ( S_SKIP2NL ); continue; } + if ( *p=='\\' ) + { + // backslash at the line end: continuation operator; let the newline be unhanlded + if ( p[1]=='\r' || p[1]=='\n' ) { LOC_PUSH ( S_SKIP2NL ); continue; } + + // backslash before number sign: comment start char escaping; advance and pass it + if ( p[1]=='#' ) { p++; } + + // otherwise: just a char, pass it + } + if ( iValueWARNS_THRESH ) + fprintf ( stdout, "WARNING: %d more warnings skipped.\n", m_iWarnings-WARNS_THRESH ); + + if ( strlen(m_sError) ) + { + int iCol = (int)(p-sBuf+1); + + int iCtx = Min ( L_STEPBACK, iCol ); // error context is upto L_STEPBACK chars back, but never going to prev line + const char * sCtx = p-iCtx+1; + if ( sCtx pTokenizer ( NULL ); + + if(hIndex("charset_debug")) + tSettings.m_iDebug = hIndex["charset_debug"].intval(); + + if ( !hIndex("charset_type") || hIndex["charset_type"]=="sbcs" ) + { + tSettings.m_iType = TOKENIZER_SBCS; + + } else if ( hIndex["charset_type"]=="utf-8" ) + { + tSettings.m_iType = hIndex("ngram_chars") ? TOKENIZER_NGRAM : TOKENIZER_UTF8; + + } + #if USE_MMSEG || USE_CRFSEG + //XXX:fixme : sphinx changes tokenizer create process + else if (hIndex("charset_dictpath") && hIndex["charset_type"]=="zh_cn.utf-8" ) + { + tSettings.m_sDictPath = hIndex["charset_dictpath"]; + tSettings.m_iType = TOKENIZER_ZHCN_UTF8; + } + #endif + else + { + sError.SetSprintf ( "unknown charset type '%s'", hIndex["charset_type"].cstr() ); + return false; + } + + tSettings.m_sCaseFolding = hIndex.GetStr ( "charset_table" ); + tSettings.m_iMinWordLen = Max ( hIndex.GetInt ( "min_word_len" ), 0 ); + tSettings.m_sNgramChars = hIndex.GetStr ( "ngram_chars" ); + tSettings.m_iNgramLen = Max ( hIndex.GetInt ( "ngram_len" ), 0 ); + tSettings.m_sSynonymsFile = hIndex.GetStr ( "exceptions" ); // new option name + if ( tSettings.m_sSynonymsFile.IsEmpty() ) + tSettings.m_sSynonymsFile = hIndex.GetStr ( "synonyms" ); // deprecated option name + tSettings.m_sIgnoreChars = hIndex.GetStr ( "ignore_chars" ); + tSettings.m_sBlendChars = hIndex.GetStr ( "blend_chars" ); + tSettings.m_sBlendMode = hIndex.GetStr ( "blend_mode" ); + + // phrase boundaries + int iBoundaryStep = Max ( hIndex.GetInt ( "phrase_boundary_step" ), -1 ); + if ( iBoundaryStep!=0 ) + tSettings.m_sBoundary = hIndex.GetStr ( "phrase_boundary" ); + + return true; +} + +void sphConfDictionary ( const CSphConfigSection & hIndex, CSphDictSettings & tSettings ) +{ + tSettings.m_sMorphology = hIndex.GetStr ( "morphology" ); + tSettings.m_sStopwords = hIndex.GetStr ( "stopwords" ); + tSettings.m_sWordforms = hIndex.GetStr ( "wordforms" ); + tSettings.m_iMinStemmingLen = hIndex.GetInt ( "min_stemming_len", 1 ); + + if ( hIndex("dict") ) + { + tSettings.m_bWordDict = false; // default to crc + if ( hIndex["dict"]=="keywords" ) + tSettings.m_bWordDict = true; + else if ( hIndex["dict"]!="crc" ) + fprintf ( stdout, "WARNING: unknown dict=%s, defaulting to crc\n", hIndex["dict"].cstr() ); + } +} + + +bool sphConfIndex ( const CSphConfigSection & hIndex, CSphIndexSettings & tSettings, CSphString & sError ) +{ + // misc settings + tSettings.m_iMinPrefixLen = Max ( hIndex.GetInt ( "min_prefix_len" ), 0 ); + tSettings.m_iMinInfixLen = Max ( hIndex.GetInt ( "min_infix_len" ), 0 ); + tSettings.m_iBoundaryStep = Max ( hIndex.GetInt ( "phrase_boundary_step" ), -1 ); + tSettings.m_bIndexExactWords = hIndex.GetInt ( "index_exact_words" )!=0; + tSettings.m_iOvershortStep = Min ( Max ( hIndex.GetInt ( "overshort_step", 1 ), 0 ), 1 ); + tSettings.m_iStopwordStep = Min ( Max ( hIndex.GetInt ( "stopword_step", 1 ), 0 ), 1 ); + tSettings.m_bDebugDump = hIndex.GetInt ( "charset_debug" )!=0; + + // prefix/infix fields + CSphString sFields; + + sFields = hIndex.GetStr ( "prefix_fields" ); + sFields.ToLower(); + sphSplit ( tSettings.m_dPrefixFields, sFields.cstr() ); + + sFields = hIndex.GetStr ( "infix_fields" ); + sFields.ToLower(); + sphSplit ( tSettings.m_dInfixFields, sFields.cstr() ); + + if ( tSettings.m_iMinPrefixLen==0 && tSettings.m_dPrefixFields.GetLength()!=0 ) + { + fprintf ( stdout, "WARNING: min_prefix_len=0, prefix_fields ignored\n" ); + tSettings.m_dPrefixFields.Reset(); + } + + if ( tSettings.m_iMinInfixLen==0 && tSettings.m_dInfixFields.GetLength()!=0 ) + { + fprintf ( stdout, "WARNING: min_infix_len=0, infix_fields ignored\n" ); + tSettings.m_dInfixFields.Reset(); + } + + // the only way we could have both prefixes and infixes enabled is when specific field subsets are configured + if ( tSettings.m_iMinInfixLen>0 && tSettings.m_iMinPrefixLen>0 + && ( !tSettings.m_dPrefixFields.GetLength() || !tSettings.m_dInfixFields.GetLength() ) ) + { + sError.SetSprintf ( "prefixes and infixes can not both be enabled on all fields" ); + return false; + } + + tSettings.m_dPrefixFields.Uniq(); + tSettings.m_dInfixFields.Uniq(); + + ARRAY_FOREACH ( i, tSettings.m_dPrefixFields ) + if ( tSettings.m_dInfixFields.Contains ( tSettings.m_dPrefixFields[i] ) ) + { + sError.SetSprintf ( "field '%s' marked both as prefix and infix", tSettings.m_dPrefixFields[i].cstr() ); + return false; + } + + // html stripping + if ( hIndex ( "html_strip" ) ) + { + tSettings.m_bHtmlStrip = hIndex.GetInt ( "html_strip" )!=0; + tSettings.m_sHtmlIndexAttrs = hIndex.GetStr ( "html_index_attrs" ); + tSettings.m_sHtmlRemoveElements = hIndex.GetStr ( "html_remove_elements" ); + } + + // docinfo + tSettings.m_eDocinfo = SPH_DOCINFO_EXTERN; + if ( hIndex("docinfo") ) + { + if ( hIndex["docinfo"]=="none" ) tSettings.m_eDocinfo = SPH_DOCINFO_NONE; + else if ( hIndex["docinfo"]=="inline" ) tSettings.m_eDocinfo = SPH_DOCINFO_INLINE; + else if ( hIndex["docinfo"]=="extern" ) tSettings.m_eDocinfo = SPH_DOCINFO_EXTERN; + else + fprintf ( stdout, "WARNING: unknown docinfo=%s, defaulting to extern\n", hIndex["docinfo"].cstr() ); + } + + // hit format + // TODO! add the description into documentation. + tSettings.m_eHitFormat = SPH_HIT_FORMAT_INLINE; + if ( hIndex("hit_format") ) + { + if ( hIndex["hit_format"]=="plain" ) tSettings.m_eHitFormat = SPH_HIT_FORMAT_PLAIN; + else if ( hIndex["hit_format"]=="inline" ) tSettings.m_eHitFormat = SPH_HIT_FORMAT_INLINE; + else + fprintf ( stdout, "WARNING: unknown hit_format=%s, defaulting to inline\n", hIndex["hit_format"].cstr() ); + } + + // hit-less indices + if ( hIndex("hitless_words") ) + { + for ( const CSphVariant * pVariant = &hIndex["hitless_words"]; pVariant; pVariant = pVariant->m_pNext ) + { + const CSphString & sValue = *pVariant; + if ( sValue=="all" ) + { + tSettings.m_eHitless = SPH_HITLESS_ALL; + } else + { + tSettings.m_eHitless = SPH_HITLESS_SOME; + tSettings.m_sHitlessFile = sValue; + } + } + } + + // sentence and paragraph indexing + tSettings.m_bIndexSP = ( hIndex.GetInt ( "index_sp" )!=0 ); + tSettings.m_sZones = hIndex.GetStr ( "index_zones" ); + + // all good + return true; +} + + +bool sphFixupIndexSettings ( CSphIndex * pIndex, const CSphConfigSection & hIndex, CSphString & sError ) +{ + bool bTokenizerSpawned = false; + + if ( !pIndex->GetTokenizer () ) + { + CSphTokenizerSettings tSettings; + if ( !sphConfTokenizer ( hIndex, tSettings, sError ) ) + return false; + + ISphTokenizer * pTokenizer = ISphTokenizer::Create ( tSettings, sError ); + if ( !pTokenizer ) + return false; + + bTokenizerSpawned = true; + pIndex->SetTokenizer ( pTokenizer ); + } + + if ( !pIndex->GetDictionary () ) + { + CSphDictSettings tSettings; + if ( pIndex->m_bId32to64 ) + tSettings.m_bCrc32 = true; + sphConfDictionary ( hIndex, tSettings ); + CSphDict * pDict = sphCreateDictionaryCRC ( tSettings, pIndex->GetTokenizer (), sError, pIndex->GetName() ); + if ( !pDict ) + return false; + + pIndex->SetDictionary ( pDict ); + } + + if ( bTokenizerSpawned ) + { + ISphTokenizer * pTokenizer = pIndex->LeakTokenizer (); + ISphTokenizer * pTokenFilter = ISphTokenizer::CreateTokenFilter ( pTokenizer, pIndex->GetDictionary ()->GetMultiWordforms () ); + pIndex->SetTokenizer ( pTokenFilter ? pTokenFilter : pTokenizer ); + } + + if ( !pIndex->IsStripperInited () ) + { + CSphIndexSettings tSettings = pIndex->GetSettings (); + + if ( hIndex ( "html_strip" ) ) + { + tSettings.m_bHtmlStrip = hIndex.GetInt ( "html_strip" )!=0; + tSettings.m_sHtmlIndexAttrs = hIndex.GetStr ( "html_index_attrs" ); + tSettings.m_sHtmlRemoveElements = hIndex.GetStr ( "html_remove_elements" ); + } + tSettings.m_sZones = hIndex.GetStr ( "index_zones" ); + + pIndex->Setup ( tSettings ); + } + + pIndex->PostSetup(); + + return true; +} + +////////////////////////////////////////////////////////////////////////// + +const char * sphLoadConfig ( const char * sOptConfig, bool bQuiet, CSphConfigParser & cp ) +{ + // fallback to defaults if there was no explicit config specified + while ( !sOptConfig ) + { +#ifdef SYSCONFDIR + sOptConfig = SYSCONFDIR "/csft.conf"; + if ( sphIsReadable ( sOptConfig ) ) + break; +#endif + + sOptConfig = "./csft.conf"; + if ( sphIsReadable ( sOptConfig ) ) + break; + + sOptConfig = NULL; + break; + } + + if ( !sOptConfig ) + sphDie ( "no readable config file (looked in " +#ifdef SYSCONFDIR + SYSCONFDIR "/csft.conf, " +#endif + "./csft.conf)" ); + + if ( !bQuiet ) + fprintf ( stdout, "using config file '%s'...\n", sOptConfig ); + + // load config + if ( !cp.Parse ( sOptConfig ) ) + sphDie ( "failed to parse config file '%s'", sOptConfig ); + + CSphConfig & hConf = cp.m_tConf; + if ( !hConf ( "index" ) ) + sphDie ( "no indexes found in config file '%s'", sOptConfig ); + + return sOptConfig; +} + +////////////////////////////////////////////////////////////////////////// + +static SphLogger_fn g_pLogger = NULL; + +inline void Log ( ESphLogLevel eLevel, const char * sFmt, va_list ap ) +{ + if ( !g_pLogger ) return; + ( *g_pLogger ) ( eLevel, sFmt, ap ); +} + +void sphWarning ( const char * sFmt, ... ) +{ + va_list ap; + va_start ( ap, sFmt ); + Log ( SPH_LOG_WARNING, sFmt, ap ); + va_end ( ap ); +} + + +void sphInfo ( const char * sFmt, ... ) +{ + va_list ap; + va_start ( ap, sFmt ); + Log ( SPH_LOG_INFO, sFmt, ap ); + va_end ( ap ); +} + +void sphLogFatal ( const char * sFmt, ... ) +{ + va_list ap; + va_start ( ap, sFmt ); + Log ( SPH_LOG_FATAL, sFmt, ap ); + va_end ( ap ); +} + +void sphLogDebug ( const char * sFmt, ... ) +{ + va_list ap; + va_start ( ap, sFmt ); + Log ( SPH_LOG_DEBUG, sFmt, ap ); + va_end ( ap ); +} + +void sphLogDebugv ( const char * sFmt, ... ) +{ + va_list ap; + va_start ( ap, sFmt ); + Log ( SPH_LOG_VERBOSE_DEBUG, sFmt, ap ); + va_end ( ap ); +} + +void sphLogDebugvv ( const char * sFmt, ... ) +{ + va_list ap; + va_start ( ap, sFmt ); + Log ( SPH_LOG_VERY_VERBOSE_DEBUG, sFmt, ap ); + va_end ( ap ); +} + +void sphSetLogger ( SphLogger_fn fnLog ) +{ + g_pLogger = fnLog; +} + +////////////////////////////////////////////////////////////////////////// +// CRASH REPORTING +////////////////////////////////////////////////////////////////////////// + +template +static void UItoA ( char** ppOutput, Uint uVal, int iBase=10, int iWidth=0, int iPrec=0, const char cFill=' ' ) +{ + assert ( ppOutput ); + assert ( *ppOutput ); + + const char cDigits[] = "0123456789abcdef"; + + if ( iWidth && iPrec ) + { + iPrec = iWidth; + iWidth = 0; + } + + if ( !uVal ) + { + if ( !iPrec && !iWidth ) + *(*ppOutput)++ = cDigits[0]; + else + { + while ( iPrec-- ) + *(*ppOutput)++ = cDigits[0]; + if ( iWidth ) + { + while ( --iWidth ) + *(*ppOutput)++ = cFill; + *(*ppOutput)++ = cDigits[0]; + } + } + return; + } + + const BYTE uMaxIndex = 31; // 20 digits for MAX_INT64 in decimal; let it be 31 (32 digits max). + char CBuf[uMaxIndex+1]; + char *pRes = &CBuf[uMaxIndex]; + char *& pOutput = *ppOutput; + + while ( uVal ) + { + *pRes-- = cDigits [ uVal % iBase ]; + uVal /= iBase; + } + + BYTE uLen = (BYTE)( uMaxIndex - (pRes-CBuf) ); + + if ( iWidth ) + while ( uLen < iWidth ) + { + *pOutput++ = cFill; + iWidth--; + } + + if ( iPrec ) + { + while ( uLen < iPrec ) + { + *pOutput++=cDigits[0]; + iPrec--; + } + iPrec = uLen-iPrec; + } + + while ( pRes < CBuf+uMaxIndex-iPrec ) + *pOutput++ = *++pRes; +} + + +static int sphVSprintf ( char * pOutput, const char * sFmt, va_list ap ) +{ + enum eStates { SNORMAL, SPERCENT, SHAVEFILL, SINWIDTH, SINPREC }; + eStates state = SNORMAL; + int iPrec = 0; + int iWidth = 0; + char cFill = ' '; + const char * pBegin = pOutput; + bool bHeadingSpace = true; + + char c; + while ( ( c = *sFmt++ )!=0 ) + { + // handle percent + if ( c=='%' ) + { + if ( state==SNORMAL ) + { + state = SPERCENT; + iPrec = 0; + iWidth = 0; + cFill = ' '; + } else + { + state = SNORMAL; + *pOutput++ = c; + } + continue; + } + + // handle regular chars + if ( state==SNORMAL ) + { + *pOutput++ = c; + continue; + } + + // handle modifiers + switch ( c ) + { + case '0': + if ( state==SPERCENT ) + { + cFill = '0'; + state = SHAVEFILL; + break; + } + case '1': case '2': case '3': + case '4': case '5': case '6': + case '7': case '8': case '9': + if ( state==SPERCENT || state==SHAVEFILL ) + { + state = SINWIDTH; + iWidth = c - '0'; + } else if ( state==SINWIDTH ) + iWidth = iWidth * 10 + c - '0'; + else if ( state==SINPREC ) + iPrec = iPrec * 10 + c - '0'; + break; + + case '-': + if ( state==SPERCENT ) + bHeadingSpace = false; + else + state = SNORMAL; // FIXME? means that bad/unhandled syntax with dash will be just ignored + break; + + case '.': + state = SINPREC; + iPrec = 0; + break; + + case 's': // string + { + const char * pValue = va_arg ( ap, const char * ); + int iValue = strlen ( pValue ); + + if ( iWidth && bHeadingSpace ) + while ( iValue < iWidth-- ) + *pOutput++ = ' '; + + if ( iPrec && iPrec < iValue ) + while ( iPrec-- ) + *pOutput++ = *pValue++; + else + while ( *pValue ) + *pOutput++ = *pValue++; + + if ( iWidth && !bHeadingSpace ) + while ( iValue < iWidth-- ) + *pOutput++ = ' '; + + state = SNORMAL; + break; + } + + case 'p': // pointer + { + void * pValue = va_arg ( ap, void * ); + uint64_t uValue = uint64_t ( pValue ); + UItoA ( &pOutput, uValue, 16, iWidth, iPrec, cFill ); + state = SNORMAL; + break; + } + + case 'x': // hex integer + case 'd': // decimal integer + { + DWORD uValue = va_arg ( ap, DWORD ); + UItoA ( &pOutput, uValue, ( c=='x' ) ? 16 : 10, iWidth, iPrec, cFill ); + state = SNORMAL; + break; + } + + case 'l': // decimal int64 + { + int64_t iValue = va_arg ( ap, int64_t ); + UItoA ( &pOutput, iValue, 10, iWidth, iPrec, cFill ); + state = SNORMAL; + break; + } + + default: + state = SNORMAL; + *pOutput++ = c; + } + } + + // final zero to EOL + *pOutput++ = '\n'; + return pOutput - pBegin; +} + + +bool sphWrite ( int iFD, const void * pBuf, size_t iSize ) +{ + return ( iSize==(size_t)::write ( iFD, pBuf, iSize ) ); +} + + +static char g_sSafeInfoBuf [ 1024 ]; + +void sphSafeInfo ( int iFD, const char * sFmt, ... ) +{ + if ( iFD<0 || !sFmt ) + return; + + va_list ap; + va_start ( ap, sFmt ); + int iLen = sphVSprintf ( g_sSafeInfoBuf, sFmt, ap ); // FIXME! make this vsnprintf + va_end ( ap ); + sphWrite ( iFD, g_sSafeInfoBuf, iLen ); +} + + +#if !USE_WINDOWS + +#define SPH_BACKTRACE_ADDR_COUNT 128 +static void * g_pBacktraceAddresses [SPH_BACKTRACE_ADDR_COUNT]; + +void sphBacktrace ( int iFD, bool bSafe ) +{ + if ( iFD<0 ) + return; + + sphSafeInfo ( iFD, "-------------- backtrace begins here ---------------" ); +#ifdef COMPILER + sphSafeInfo ( iFD, "Program compiled with " COMPILER ); +#endif + +#ifdef OS_UNAME + sphSafeInfo ( iFD, "Host OS is "OS_UNAME ); +#endif + + bool bOk = true; + + void * pMyStack = NULL; + int iStackSize = 0; + if ( !bSafe ) + { + pMyStack = sphMyStack(); + iStackSize = sphMyStackSize(); + } + sphSafeInfo ( iFD, "Stack bottom = 0x%p, thread stack size = 0x%x", pMyStack, iStackSize ); + + while ( pMyStack && !bSafe ) + { + sphSafeInfo ( iFD, "begin of manual backtrace:" ); + BYTE ** pFramePointer = NULL; + + int iFrameCount = 0; + int iReturnFrameCount = sphIsLtLib() ? 2 : 1; + +#ifdef __i386__ +#define SIGRETURN_FRAME_OFFSET 17 + __asm __volatile__ ( "movl %%ebp,%0":"=r"(pFramePointer):"r"(pFramePointer) ); +#endif + +#ifdef __x86_64__ +#define SIGRETURN_FRAME_OFFSET 23 + __asm __volatile__ ( "movq %%rbp,%0":"=r"(pFramePointer):"r"(pFramePointer) ); +#endif + +#ifndef SIGRETURN_FRAME_OFFSET +#define SIGRETURN_FRAME_OFFSET 0 +#endif + + if ( !pFramePointer ) + { + sphSafeInfo ( iFD, "Frame pointer is null, backtrace failed (did you build with -fomit-frame-pointer?)" ); + break; + } + + if ( !pMyStack || (BYTE*) pMyStack > (BYTE*) &pFramePointer ) + { + int iRound = Min ( 65536, iStackSize ); + pMyStack = (void *) ( ( (size_t) &pFramePointer + iRound ) & ~(size_t)65535 ); + sphSafeInfo ( iFD, "Something wrong with thread stack, backtrace may be incorrect (fp=%p)", pFramePointer ); + + if ( pFramePointer > (BYTE**) pMyStack || pFramePointer < (BYTE**) pMyStack - iStackSize ) + { + sphSafeInfo ( iFD, "Wrong stack limit or frame pointer, backtrace failed (fp=%p, stack=%p, stacksize=%d)", pFramePointer, pMyStack, iStackSize ); + break; + } + } + + sphSafeInfo ( iFD, "Stack looks OK, attempting backtrace." ); + + BYTE** pNewFP; + while ( pFramePointer < (BYTE**) pMyStack ) + { + pNewFP = (BYTE**) *pFramePointer; + sphSafeInfo ( iFD, "%p", iFrameCount==iReturnFrameCount? *(pFramePointer + SIGRETURN_FRAME_OFFSET) : *(pFramePointer + 1) ); + + bOk = pNewFP > pFramePointer; + if ( !bOk ) break; + + pFramePointer = pNewFP; + iFrameCount++; + } + + if ( !bOk ) + sphSafeInfo ( iFD, "Something wrong in frame pointers, backtrace failed (fp=%p)", pNewFP ); + + break; + } + +#if HAVE_BACKTRACE + sphSafeInfo ( iFD, "begin of system backtrace:" ); + int iDepth = backtrace ( g_pBacktraceAddresses, SPH_BACKTRACE_ADDR_COUNT ); +#if HAVE_BACKTRACE_SYMBOLS + sphSafeInfo ( iFD, "begin of system symbols:" ); + backtrace_symbols_fd ( g_pBacktraceAddresses, iDepth, iFD ); +#elif !HAVE_BACKTRACE_SYMBOLS + sphSafeInfo ( iFD, "begin of manual symbols:" ); + for ( int i=0; i indexer.sym\n" + " 2. Attach the binary, generated .sym and the text of backtrace (see above) to the bug report.\n" + "Also you can read the section about resolving backtraces in the documentation."); + sphSafeInfo ( iFD, "-------------- backtrace ends here ---------------" ); +} + +#else // USE_WINDOWS + +void sphBacktrace ( EXCEPTION_POINTERS * pExc, const char * sFile ) +{ + if ( !pExc || !sFile || !(*sFile) ) + { + sphInfo ( "can't generate minidump" ); + return; + } + + HANDLE hFile = CreateFile ( sFile, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 ); + if ( hFile==INVALID_HANDLE_VALUE ) + { + sphInfo ( "can't create minidump file '%s'", sFile ); + return; + } + + MINIDUMP_EXCEPTION_INFORMATION tExcInfo; + tExcInfo.ExceptionPointers = pExc; + tExcInfo.ClientPointers = FALSE; + tExcInfo.ThreadId = GetCurrentThreadId(); + + bool bDumped = ( MiniDumpWriteDump ( GetCurrentProcess(), GetCurrentProcessId(), hFile, MiniDumpNormal, &tExcInfo, 0, 0 )==TRUE ); + CloseHandle ( hFile ); + + if ( !bDumped ) + sphInfo ( "can't dump minidump" ); +} + +#endif // USE_WINDOWS + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxutils.h b/coreseek/csft-4.1/src/sphinxutils.h new file mode 100755 index 0000000..a1f6e3a --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxutils.h @@ -0,0 +1,334 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +/// @file sphinxutils.h +/// Declarations for the stuff shared by all Sphinx utilities. + +#ifndef _sphinxutils_ +#define _sphinxutils_ + +#include +#include + +///////////////////////////////////////////////////////////////////////////// + +/// my own isalpha (let's build our own theme park!) +inline int sphIsAlpha ( int c ) +{ + return ( c>='0' && c<='9' ) || ( c>='a' && c<='z' ) || ( c>='A' && c<='Z' ) || c=='-' || c=='_'; +} + + +/// my own isspace +inline bool sphIsSpace ( int iCode ) +{ + return iCode==' ' || iCode=='\t' || iCode=='\n' || iCode=='\r'; +} + + +/// string splitter, extracts sequences of alphas (as in sphIsAlpha) +inline void sphSplit ( CSphVector & dOut, const char * sIn ) +{ + if ( !sIn ) + return; + + const char * p = (char*)sIn; + while ( *p ) + { + // skip non-alphas + while ( (*p) && !sphIsAlpha(*p) ) + p++; + if ( !(*p) ) + break; + + // this is my next token + assert ( sphIsAlpha(*p) ); + const char * sNext = p; + while ( sphIsAlpha(*p) ) + p++; + if ( sNext!=p ) + dOut.Add().SetBinary ( sNext, p-sNext ); + } + +} + + +/// config section (hash of variant values) +class CSphConfigSection : public SmallStringHash_T < CSphVariant > +{ +public: + /// get integer option value by key and default value + int GetInt ( const char * sKey, int iDefault=0 ) const + { + CSphVariant * pEntry = (*this)( sKey ); + return pEntry ? pEntry->intval() : iDefault; + } + + /// get float option value by key and default value + float GetFloat ( const char * sKey, float fDefault=0.0f ) const + { + CSphVariant * pEntry = (*this)( sKey ); + return pEntry ? pEntry->floatval() : fDefault; + } + + /// get string option value by key and default value + const char * GetStr ( const char * sKey, const char * sDefault="" ) const + { + CSphVariant * pEntry = (*this)( sKey ); + return pEntry ? pEntry->cstr() : sDefault; + } + + /// get size option (plain int, or with K/M prefix) value by key and default value + int GetSize ( const char * sKey, int iDefault ) const; +}; + +/// config section type (hash of sections) +typedef SmallStringHash_T < CSphConfigSection > CSphConfigType; + +/// config (hash of section types) +typedef SmallStringHash_T < CSphConfigType > CSphConfig; + +/// simple config file +class CSphConfigParser +{ +public: + CSphConfig m_tConf; + +public: + CSphConfigParser (); + bool Parse ( const char * sFileName, const char * pBuffer = NULL ); + + // fail-save loading new config over existing. + bool ReParse ( const char * sFileName, const char * pBuffer = NULL ); + +protected: + CSphString m_sFileName; + int m_iLine; + CSphString m_sSectionType; + CSphString m_sSectionName; + char m_sError [ 1024 ]; + + int m_iWarnings; + static const int WARNS_THRESH = 5; + +protected: + bool IsPlainSection ( const char * sKey ); + bool IsNamedSection ( const char * sKey ); + bool AddSection ( const char * sType, const char * sSection ); + void AddKey ( const char * sKey, char * sValue ); + bool ValidateKey ( const char * sKey ); + +#if !USE_WINDOWS + bool TryToExec ( char * pBuffer, char * pEnd, const char * szFilename, CSphVector & dResult ); +#endif + char * GetBufferString ( char * szDest, int iMax, const char * & szSource ); +}; + +///////////////////////////////////////////////////////////////////////////// + +template < typename T > struct CSphMTFHashEntry +{ + CSphString m_sKey; + CSphMTFHashEntry * m_pNext; + int m_iSlot; + T m_tValue; +}; + + +template < typename T, int SIZE, class HASHFUNC > class CSphMTFHash +{ +public: + /// ctor + CSphMTFHash () + { + m_pData = new CSphMTFHashEntry * [ SIZE ]; + for ( int i=0; i * pHead = m_pData[i]; + while ( pHead ) + { + CSphMTFHashEntry * pNext = pHead->m_pNext; + SafeDelete ( pHead ); + pHead = pNext; + } + } + } + + /// add record to hash + /// OPTIMIZE: should pass T not by reference for simple types + T & Add ( const char * sKey, int iKeyLen, T & tValue ) + { + DWORD uHash = HASHFUNC::Hash ( sKey ) % SIZE; + + // find matching entry + CSphMTFHashEntry * pEntry = m_pData [ uHash ]; + CSphMTFHashEntry * pPrev = NULL; + while ( pEntry && strcmp ( sKey, pEntry->m_sKey.cstr() ) ) + { + pPrev = pEntry; + pEntry = pEntry->m_pNext; + } + + if ( !pEntry ) + { + // not found, add it, but don't MTF + pEntry = new CSphMTFHashEntry; + if ( iKeyLen ) + pEntry->m_sKey.SetBinary ( sKey, iKeyLen ); + else + pEntry->m_sKey = sKey; + pEntry->m_pNext = NULL; + pEntry->m_iSlot = (int)uHash; + pEntry->m_tValue = tValue; + if ( !pPrev ) + m_pData [ uHash ] = pEntry; + else + pPrev->m_pNext = pEntry; + } else + { + // MTF on access + if ( pPrev ) + { + pPrev->m_pNext = pEntry->m_pNext; + pEntry->m_pNext = m_pData [ uHash ]; + m_pData [ uHash ] = pEntry; + } + } + + return pEntry->m_tValue; + } + + /// find first non-empty entry + const CSphMTFHashEntry * FindFirst () + { + for ( int i=0; i * FindNext ( const CSphMTFHashEntry * pEntry ) + { + assert ( pEntry ); + if ( pEntry->m_pNext ) + return pEntry->m_pNext; + + for ( int i=1+pEntry->m_iSlot; i ** m_pData; +}; + +#define HASH_FOREACH(_it,_hash) \ + for ( _it=_hash.FindFirst(); _it; _it=_hash.FindNext(_it) ) + +///////////////////////////////////////////////////////////////////////////// + +enum +{ + TOKENIZER_SBCS = 1, + TOKENIZER_UTF8 = 2, + TOKENIZER_NGRAM = 3 + ,TOKENIZER_ZHCN_UTF8 = 4 +}; + +/// load config file +const char * sphLoadConfig ( const char * sOptConfig, bool bQuiet, CSphConfigParser & cp ); + +/// configure tokenizer from index definition section +bool sphConfTokenizer ( const CSphConfigSection & hIndex, CSphTokenizerSettings & tSettings, CSphString & sError ); + +/// configure dictionary from index definition section +void sphConfDictionary ( const CSphConfigSection & hIndex, CSphDictSettings & tSettings ); + +/// configure index from index definition section +bool sphConfIndex ( const CSphConfigSection & hIndex, CSphIndexSettings & tSettings, CSphString & sError ); + +/// try to set dictionary, tokenizer and misc settings for an index (if not already set) +bool sphFixupIndexSettings ( CSphIndex * pIndex, const CSphConfigSection & hIndex, CSphString & sError ); + +enum ESphLogLevel +{ + SPH_LOG_FATAL = 0, + SPH_LOG_WARNING = 1, + SPH_LOG_INFO = 2, + SPH_LOG_DEBUG = 3, + SPH_LOG_VERBOSE_DEBUG = 4, + SPH_LOG_VERY_VERBOSE_DEBUG = 5 +}; + +typedef void ( *SphLogger_fn )( ESphLogLevel, const char *, va_list ); + +void sphWarning ( const char * sFmt, ... ) __attribute__((format(printf,1,2))); +void sphInfo ( const char * sFmt, ... ) __attribute__((format(printf,1,2))); +void sphLogFatal ( const char * sFmt, ... ) __attribute__((format(printf,1,2))); +void sphLogDebug ( const char * sFmt, ... ) __attribute__((format(printf,1,2))); +void sphLogDebugv ( const char * sFmt, ... ) __attribute__((format(printf,1,2))); +void sphLogDebugvv ( const char * sFmt, ... ) __attribute__((format(printf,1,2))); +void sphSetLogger ( SphLogger_fn fnLog ); + +////////////////////////////////////////////////////////////////////////// + +/// how do we properly exit from the crash handler? +#if !USE_WINDOWS + #ifndef NDEBUG + // UNIX debug build, die and dump core + #define CRASH_EXIT { signal ( sig, SIG_DFL ); kill ( getpid(), sig ); } + #else + // UNIX release build, just die + #define CRASH_EXIT exit ( 2 ) + #endif +#else + #ifndef NDEBUG + // Windows debug build, show prompt to attach debugger + #define CRASH_EXIT return EXCEPTION_CONTINUE_SEARCH + #else + // Windows release build, just die + #define CRASH_EXIT return EXCEPTION_EXECUTE_HANDLER + #endif +#endif + +/// simple write wrapper +/// simplifies partial write checks, and also supresses "fortified" glibc warnings +bool sphWrite ( int iFD, const void * pBuf, size_t iSize ); + +/// async safe, BUT NOT THREAD SAFE, fprintf +void sphSafeInfo ( int iFD, const char * sFmt, ... ); + +#if !USE_WINDOWS +/// UNIX backtrace gets printed out to a stream +void sphBacktrace ( int iFD, bool bSafe=false ); +#else +/// Windows minidump gets saved to a file +void sphBacktrace ( EXCEPTION_POINTERS * pExc, const char * sFile ); +#endif + +#endif // _sphinxutils_ + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/sphinxutils.o b/coreseek/csft-4.1/src/sphinxutils.o new file mode 100644 index 0000000..a484a2b Binary files /dev/null and b/coreseek/csft-4.1/src/sphinxutils.o differ diff --git a/coreseek/csft-4.1/src/sphinxversion.h b/coreseek/csft-4.1/src/sphinxversion.h new file mode 100755 index 0000000..42314b8 --- /dev/null +++ b/coreseek/csft-4.1/src/sphinxversion.h @@ -0,0 +1,4 @@ +#define SPH_SVN_TAG "" +#define SPH_SVN_REV 2922 +#define SPH_SVN_REVSTR "2922" +#define SPH_SVN_TAGREV "r2922" diff --git a/coreseek/csft-4.1/src/srcxrev.pl b/coreseek/csft-4.1/src/srcxrev.pl new file mode 100755 index 0000000..6a9e869 --- /dev/null +++ b/coreseek/csft-4.1/src/srcxrev.pl @@ -0,0 +1,14 @@ +#!/usr/bin/perl + +while (<>) +{ + next if ( !/\$Id: \S+ (\d+)/ ); + $maxrev = $1 if ( $1>$maxrev ); +} + +print < %REVFILE% +) diff --git a/coreseek/csft-4.1/src/svnxrev.pl b/coreseek/csft-4.1/src/svnxrev.pl new file mode 100755 index 0000000..5738492 --- /dev/null +++ b/coreseek/csft-4.1/src/svnxrev.pl @@ -0,0 +1,66 @@ +#!/usr/bin/perl + +# svnxrev, an utility to extract SVN working copy revision information +# from svn info --xml output +# +# svnversion is nice, but lacks options to extract tag/branch name, +# which is something i would really like to mention in builds +# +# usage: svn info --xml WORKING-COPY-ROOT | perl svnxrev.pl [OUTPUT-HEADER-NAME] + +$UTILITY = "svnxrev"; # that's my name +@PROJECTS = ( "sphinx", "sphinxsearh" ); # that's expected project name(s) +$PREFIX = "SPH"; # that's the prefix for defines +$OUTPUT = "sphinxversion.h"; # that's where i will write the result + +$OUTPUT = $ARGV[0] if ( $#ARGV==0 ); + +undef $/; +$info = ; + +die ( "$UTILITY: failed to extract repository url" ) if (!( $info =~ /(.*?)<\/url>/ )); +$url = $1; + +die ( "$UTILITY: failed to extract commit revision" ) if (!( $info =~ /; + close ( FH ); + if ( $current eq $result ) + { + print "$UTILITY: build tag $tagrev unchanged\n"; + exit 0; + } +} + +open ( FH, "+>$OUTPUT" ) or die ( "$UTILITY: failed to write output file (name=$OUTPUT)" ); +print FH $result; +close ( FH ); + +print "$UTILITY: extracted build tag: $tagrev\n"; diff --git a/coreseek/csft-4.1/src/svnxrev.sh b/coreseek/csft-4.1/src/svnxrev.sh new file mode 100755 index 0000000..6e97585 --- /dev/null +++ b/coreseek/csft-4.1/src/svnxrev.sh @@ -0,0 +1,46 @@ +#!/bin/sh +## As standalone run from this directory as "./svnxrev.sh .." +if [ -d $1/.svn ] ; then + svn info --xml $1 | perl $1/src/svnxrev.pl $1/src/sphinxversion.h +elif [ -d $1/.hg ] ; then + ddr=`pwd` + cd $1 + target="src/sphinxversion.h" + startrev=`hg id -n | sed 's/\\+//'` + rev="$startrev" + svnrev=`hg log -r$rev --template "{desc}" | grep ^\\\\[svn | sed 's/\\[svn r//; s/\\].*//'` +# while [ "z" = "z$svnrev" ] ; do +# revplus=`hg log -r$rev --template "{rev}"` +# rev=`expr $revplus - 1` +# svnrev=`hg log -r$rev --template "{desc}" | grep ^\\\\[svn | sed 's/\\[svn r//; s/\\].*//'` +# done + rsvnrev="r$svnrev" + node=`hg log -r$startrev --template "{node}"` + branch=`hg log -r$startrev --template "{branches}"` + [ "z$branch" = "ztrunk" ] && branch="" + [ ! "z$startrev" = "z$rev" ] && rsvnrev=r"$svnrev/$node" + + printf "#define SPH_SVN_TAG \"%s\"\n" $branch > $target.tmp + printf "#define SPH_SVN_REV %s\n" $svnrev >> $target.tmp + printf "#define SPH_SVN_REVSTR \"%s\"\n" $svnrev >> $target.tmp + printf "#define SPH_SVN_TAGREV \"%s\"\n" $rsvnrev >> $target.tmp + + # dont touch it ALL the time + if [ -f $target ]; then + old=`cat $target` + new=`cat $target.tmp` + if [ "z$old" != "z$new" ] ; then + mv -f $target.tmp $target + else + rm -f $target.tmp + fi + else + mv -f $target.tmp $target + fi + cd "$ddr" + exit 0 +fi + +if [ ! -f ./sphinxversion.h ] ; then + cat *.cpp *.h | perl srcxrev.pl > sphinxversion.h +fi diff --git a/coreseek/csft-4.1/src/svnxrev.wsf b/coreseek/csft-4.1/src/svnxrev.wsf new file mode 100755 index 0000000..be94bc0 --- /dev/null +++ b/coreseek/csft-4.1/src/svnxrev.wsf @@ -0,0 +1,78 @@ + + + + + + + + + diff --git a/coreseek/csft-4.1/src/testrt.cpp b/coreseek/csft-4.1/src/testrt.cpp new file mode 100755 index 0000000..9adcc06 --- /dev/null +++ b/coreseek/csft-4.1/src/testrt.cpp @@ -0,0 +1,261 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxrt.h" +#include "sphinxutils.h" + +#if USE_WINDOWS +#include "psapi.h" +#pragma comment(linker, "/defaultlib:psapi.lib") +#pragma message("Automatically linking with psapi.lib") +#endif + +const int COMMIT_STEP = 1; +float g_fTotalMB = 0.0f; + +void SetupIndexing ( CSphSource_MySQL * pSrc, const CSphSourceParams_MySQL & tParams ) +{ + CSphString sError; + if ( !pSrc->Setup ( tParams ) ) + sphDie ( "setup failed" ); + if ( !pSrc->Connect ( sError ) ) + sphDie ( "connect failed: %s", sError.cstr() ); + if ( !pSrc->IterateStart ( sError ) ) + sphDie ( "iterate-start failed: %s", sError.cstr() ); +} + + +void DoSearch ( CSphIndex * pIndex ) +{ + printf ( "---\nsearching... " ); + + CSphQuery tQuery; + CSphQueryResult tResult; + tQuery.m_sQuery = "@title cat"; + + ISphMatchSorter * pSorter = sphCreateQueue ( &tQuery, pIndex->GetMatchSchema(), tResult.m_sError, false ); + if ( !pSorter ) + { + printf ( "failed to create sorter; error=%s", tResult.m_sError.cstr() ); + + } else if ( !pIndex->MultiQuery ( &tQuery, &tResult, 1, &pSorter, NULL ) ) + { + printf ( "query failed; error=%s", pIndex->GetLastError().cstr() ); + + } else + { + sphFlattenQueue ( pSorter, &tResult, 0 ); + printf ( "%d results found in %d.%03d sec!\n", tResult.m_dMatches.GetLength(), tResult.m_iQueryTime/1000, tResult.m_iQueryTime%1000 ); + ARRAY_FOREACH ( i, tResult.m_dMatches ) + printf ( "%d. id=" DOCID_FMT ", weight=%d\n", 1+i, tResult.m_dMatches[i].m_iDocID, tResult.m_dMatches[i].m_iWeight ); + } + + SafeDelete ( pSorter ); + printf ( "---\n" ); +} + + +void DoIndexing ( CSphSource * pSrc, ISphRtIndex * pIndex ) +{ + CSphString sError; + CSphVector dMvas; + + int64_t tmStart = sphMicroTimer (); + int64_t tmAvgCommit = 0; + int64_t tmMaxCommit = 0; + int iCommits = 0; + for ( ;; ) + { + if ( !pSrc->IterateDocument ( sError ) ) + sphDie ( "iterate-document failed: %s", sError.cstr() ); + ISphHits * pHitsNext = pSrc->IterateHits ( sError ); + if ( !sError.IsEmpty() ) + sphDie ( "iterate-hits failed: %s", sError.cstr() ); + + if ( pSrc->m_tDocInfo.m_iDocID ) + pIndex->AddDocument ( pHitsNext, pSrc->m_tDocInfo, NULL, dMvas, sError ); + + if ( ( pSrc->GetStats().m_iTotalDocuments % COMMIT_STEP )==0 || !pSrc->m_tDocInfo.m_iDocID ) + { + int64_t tmCommit = sphMicroTimer(); + pIndex->Commit (); + tmCommit = sphMicroTimer()-tmCommit; + + iCommits++; + tmAvgCommit += tmCommit; + tmMaxCommit = Max ( tmMaxCommit, tmCommit ); + + if ( !pSrc->m_tDocInfo.m_iDocID ) + { + tmAvgCommit /= iCommits; + break; + } + } + + if (!( pSrc->GetStats().m_iTotalDocuments % 100 )) + printf ( "%d docs\r", (int)pSrc->GetStats().m_iTotalDocuments ); + + static bool bOnce = true; + if ( iCommits*COMMIT_STEP>=5000 && bOnce ) + { + printf ( "\n" ); + DoSearch ( pIndex ); + bOnce = false; + } + } + + pSrc->Disconnect(); + + int64_t tmEnd = sphMicroTimer (); + float fTotalMB = (float)pSrc->GetStats().m_iTotalBytes/1000000.0f; + printf ( "commit-step %d, %d docs, %d bytes, %d.%03d sec, %.2f MB/sec\n", + COMMIT_STEP, + (int)pSrc->GetStats().m_iTotalDocuments, + (int)pSrc->GetStats().m_iTotalBytes, + (int)((tmEnd-tmStart)/1000000), (int)(((tmEnd-tmStart)%1000000)/1000), + fTotalMB*1000000.0f/(tmEnd-tmStart) ); + printf ( "commit-docs %d, avg %d.%03d msec, max %d.%03d msec\n", COMMIT_STEP, + (int)(tmAvgCommit/1000), (int)(tmAvgCommit%1000), + (int)(tmMaxCommit/1000), (int)(tmMaxCommit%1000) ); + g_fTotalMB += fTotalMB; +} + + +CSphSource * SpawnSource ( const char * sQuery, ISphTokenizer * pTok, CSphDict * pDict ) +{ + CSphSource_MySQL * pSrc = new CSphSource_MySQL ( "test" ); + pSrc->SetTokenizer ( pTok ); + pSrc->SetDict ( pDict ); + + CSphSourceParams_MySQL tParams; + tParams.m_sHost = "localhost"; + tParams.m_sUser = "root"; + tParams.m_sDB = "lj"; + tParams.m_dQueryPre.Add ( "SET NAMES utf8" ); + tParams.m_sQuery = sQuery; + + CSphColumnInfo tCol; + tCol.m_eAttrType = SPH_ATTR_INTEGER; + tCol.m_sName = "channel_id"; + tParams.m_dAttrs.Add ( tCol ); + tCol.m_eAttrType = SPH_ATTR_TIMESTAMP; + tCol.m_sName = "published"; + tParams.m_dAttrs.Add ( tCol ); + + SetupIndexing ( pSrc, tParams ); + return pSrc; +} + + +static ISphRtIndex * g_pIndex = NULL; + + +void IndexingThread ( void * pArg ) +{ + CSphSource * pSrc = (CSphSource *) pArg; + DoIndexing ( pSrc, g_pIndex ); +} + + +int main () +{ + CSphString sError; + CSphDictSettings tDictSettings; + + ISphTokenizer * pTok = sphCreateUTF8Tokenizer(); + CSphDict * pDict = sphCreateDictionaryCRC ( tDictSettings, pTok, sError, "rt1" ); + CSphSource * pSrc = SpawnSource ( "SELECT id, channel_id, UNIX_TIMESTAMP(published) published, title, UNCOMPRESS(content) content FROM posting WHERE id<=10000 AND id%2=0", pTok, pDict ); + + ISphTokenizer * pTok2 = sphCreateUTF8Tokenizer(); + CSphDict * pDict2 = sphCreateDictionaryCRC ( tDictSettings, pTok, sError, "rt2" ); + CSphSource * pSrc2 = SpawnSource ( "SELECT id, channel_id, UNIX_TIMESTAMP(published) published, title, UNCOMPRESS(content) content FROM posting WHERE id<=10000 AND id%2=1", pTok2, pDict2 ); + + CSphSchema tSrcSchema; + if ( !pSrc->UpdateSchema ( &tSrcSchema, sError ) ) + sphDie ( "update-schema failed: %s", sError.cstr() ); + + CSphSchema tSchema; // source schema must be all dynamic attrs; but index ones must be static + tSchema.m_dFields = tSrcSchema.m_dFields; + for ( int i=0; i dTemp; + sphReplayBinlog ( dTemp ); + ISphRtIndex * pIndex = sphCreateIndexRT ( tSchema, "testrt", 32*1024*1024, "data/dump" ); + pIndex->SetTokenizer ( pTok ); // index will own this pair from now on + pIndex->SetDictionary ( pDict ); + if ( !pIndex->Prealloc ( false, false, sError ) ) + sphDie ( "prealloc failed: %s", pIndex->GetLastError().cstr() ); + g_pIndex = pIndex; + + // initial indexing + int64_t tmStart = sphMicroTimer(); + + SphThread_t t1, t2; + sphThreadCreate ( &t1, IndexingThread, pSrc ); + sphThreadCreate ( &t2, IndexingThread, pSrc2 ); + sphThreadJoin ( &t1 ); + sphThreadJoin ( &t2 ); + +#if 0 + // update + tParams.m_sQuery = "SELECT id, channel_id, UNIX_TIMESTAMP(published) published, title, UNCOMPRESS(content) content FROM rt2 WHERE id<=10000"; + SetupIndexing ( pSrc, tParams ); + DoIndexing ( pSrc, pIndex ); +#endif + + // search + DoSearch ( pIndex ); + + // shutdown index (should cause dump) + int64_t tmShutdown = sphMicroTimer(); + +#if SPH_ALLOCS_PROFILER + printf ( "pre-shutdown allocs=%d, bytes="INT64_FMT"\n", sphAllocsCount(), sphAllocBytes() ); +#endif + SafeDelete ( pIndex ); +#if SPH_ALLOCS_PROFILER + printf ( "post-shutdown allocs=%d, bytes="INT64_FMT"\n", sphAllocsCount(), sphAllocBytes() ); +#endif + + int64_t tmEnd = sphMicroTimer(); + printf ( "shutdown done in %d.%03d sec\n", (int)((tmEnd-tmShutdown)/1000000), (int)(((tmEnd-tmShutdown)%1000000)/1000) ); + printf ( "total with shutdown %d.%03d sec, %.2f MB/sec\n", + (int)((tmEnd-tmStart)/1000000), (int)(((tmEnd-tmStart)%1000000)/1000), + g_fTotalMB*1000000.0f/(tmEnd-tmStart) ); + +#if SPH_DEBUG_LEAKS || SPH_ALLOCS_PROFILER + sphAllocsStats(); +#endif +#if USE_WINDOWS + PROCESS_MEMORY_COUNTERS pmc; + HANDLE hProcess = OpenProcess ( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, GetCurrentProcessId() ); + if ( hProcess && GetProcessMemoryInfo ( hProcess, &pmc, sizeof(pmc)) ) + { + printf ( "--- peak-wss=%d, peak-pagefile=%d\n", (int)pmc.PeakWorkingSetSize, (int)pmc.PeakPagefileUsage ); + } +#endif + + SafeDelete ( pIndex ); + sphRTDone (); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/tests b/coreseek/csft-4.1/src/tests new file mode 100755 index 0000000..3c9dc15 Binary files /dev/null and b/coreseek/csft-4.1/src/tests differ diff --git a/coreseek/csft-4.1/src/tests.cpp b/coreseek/csft-4.1/src/tests.cpp new file mode 100755 index 0000000..02fca0a --- /dev/null +++ b/coreseek/csft-4.1/src/tests.cpp @@ -0,0 +1,2210 @@ +// +// $Id$ +// + +// +// Copyright (c) 2001-2011, Andrew Aksyonoff +// Copyright (c) 2008-2011, Sphinx Technologies Inc +// All rights reserved +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License. You should have +// received a copy of the GPL license along with this program; if you +// did not, you can find it at http://www.gnu.org/ +// + +#include "sphinx.h" +#include "sphinxexpr.h" +#include "sphinxutils.h" +#include "sphinxquery.h" +#include "sphinxrt.h" +#include "sphinxint.h" +#include "sphinxstem.h" +#include + +#define SNOWBALL 0 +#define CROSSCHECK 0 +#define PORTER1 0 + +#if SNOWBALL +#include "header.h" +#include "api.c" +#include "utilities.c" +#include "stem.c" +#endif + +#if PORTER1 +#include "porter1.c" +#endif + +////////////////////////////////////////////////////////////////////////// + +const char * g_sTmpfile = "__libsphinxtest.tmp"; + +////////////////////////////////////////////////////////////////////////// + +bool CreateSynonymsFile ( const char * sMagic ) +{ + FILE * fp = fopen ( g_sTmpfile, "w+" ); + if ( !fp ) + return false; + + fprintf ( fp, + "AT&T => AT&T\n" + " AT & T => AT & T \n" + "standarten fuehrer => Standartenfuehrer\n" + "standarten fuhrer => Standartenfuehrer\n" + "OS/2 => OS/2\n" + "Ms-Dos => MS-DOS\n" + "MS DOS => MS-DOS\n" + "feat. => featuring\n" + "U.S. => US\n" + "U.S.A. => USA\n" + "U.S.B. => USB\n" + "U.S.D. => USD\n" + "U.S.P. => USP\n" + "U.S.A.F. => USAF\n" + ); + if ( sMagic ) + fprintf ( fp, "%s => test\n", sMagic ); + fclose ( fp ); + return true; +} + + +ISphTokenizer * CreateTestTokenizer ( bool bUTF8, bool bSynonyms, bool bEscaped = false ) +{ + CSphString sError; + CSphTokenizerSettings tSettings; + tSettings.m_iType = bUTF8 ? TOKENIZER_UTF8 : TOKENIZER_SBCS; + tSettings.m_iMinWordLen = 2; + ISphTokenizer * pTokenizer = ISphTokenizer::Create ( tSettings, sError ); + assert ( pTokenizer->SetCaseFolding ( "-, 0..9, A..Z->a..z, _, a..z, U+80..U+FF", sError ) ); + pTokenizer->AddSpecials ( "!-" ); + pTokenizer->EnableQueryParserMode ( true ); + if ( bSynonyms ) + assert ( pTokenizer->LoadSynonyms ( g_sTmpfile, sError ) ); + + if ( bEscaped ) + { + ISphTokenizer * pOldTokenizer = pTokenizer; + pTokenizer = pTokenizer->Clone ( true ); + SafeDelete ( pOldTokenizer ); + } + + return pTokenizer; +} + + +void TestTokenizer ( bool bUTF8 ) +{ + const char * sPrefix = bUTF8 + ? "testing UTF8 tokenizer" + : "testing SBCS tokenizer"; + + for ( int iRun=1; iRun<=3; iRun++ ) + { + // simple "one-line" tests + const char * sMagic = bUTF8 + ? "\xD1\x82\xD0\xB5\xD1\x81\xD1\x82\xD1\x82\xD1\x82" // valid UTF-8 + : "\xC0\xC1\xF5\xF6"; // valid SBCS but invalid UTF-8 + + assert ( CreateSynonymsFile ( sMagic ) ); + bool bExceptions = ( iRun>=2 ); + bool bEscaped = ( iRun==3 ); + ISphTokenizer * pTokenizer = CreateTestTokenizer ( bUTF8, bExceptions, bEscaped ); + + const char * dTests[] = + { + "1", "", NULL, // test that empty strings work + "1", "this is my rifle", "this", "is", "my", "rifle", NULL, // test that tokenizing works + "1", "This is MY rifle", "this", "is", "my", "rifle", NULL, // test that folding works + "1", "i-phone", "i-phone", NULL, // test that duals (specials in the middle of the word) work ok + "1", "i phone", "phone", NULL, // test that short words are skipped + "1", "this is m", "this", "is", NULL, // test that short words at the end are skipped + "1", "the -phone", "the", "-", "phone", NULL, // test that specials work + "1", "the!phone", "the", "!", "phone", NULL, // test that specials work + "1", "i!phone", "!", "phone", NULL, // test that short words preceding specials are skipped + "1", "/-hi", "-", "hi", NULL, // test that synonym-dual but folded-special chars work ok + "2", "AT&T", "AT&T", NULL, // test that synonyms work + "2", "AT & T", "AT & T", NULL, // test that synonyms with spaces work + "2", "AT & T", "AT & T", NULL, // test that synonyms with continuous spaces work + "2", "-AT&T", "-", "AT&T", NULL, // test that synonyms with specials work + "2", "AT&", "at", NULL, // test that synonyms prefixes are not lost on eof + "2", "AT&tee.yo", "at", "tee", "yo", NULL, // test that non-synonyms with partially matching prefixes work + "2", "standarten fuehrer", "Standartenfuehrer", NULL, + "2", "standarten fuhrer", "Standartenfuehrer", NULL, + "2", "standarten fuehrerr", "standarten", "fuehrerr", NULL, + "2", "standarten fuehrer Stirlitz", "Standartenfuehrer", "stirlitz", NULL, + "2", "OS/2 vs OS/360 vs Ms-Dos", "OS/2", "vs", "os", "360", "vs", "MS-DOS", NULL, + "2", "AT ", "at", NULL, // test that prefix-whitespace-eof combo does not hang + "2", "AT&T&TT", "AT&T", "tt", NULL, + "2", "http://OS/2", "http", "OS/2", NULL, + "2", "AT*&*T", "at", NULL, + "2", "# OS/2's system install", "OS/2", "system", "install", NULL, + "2", "IBM-s/OS/2/Merlin", "ibm-s", "OS/2", "merlin", NULL, + "2", "U.S.A", "US", NULL, + "2", "AT&T!", "AT&T", "!", NULL, // exceptions vs specials + "2", "AT&T!!!", "AT&T", "!", "!", "!", NULL, // exceptions vs specials + "2", "U.S.A.!", "USA", "!", NULL, // exceptions vs specials + "2", "MS DOSS feat.Deskview.MS DOS", "ms", "doss", "featuring", "deskview", "MS-DOS", NULL, + "2", sMagic, "test", NULL, + "2", "U.S. U.S.A. U.S.A.F.", "US", "USA", "USAF", NULL, + "2", "U.S.AB U.S.A. U.S.B.U.S.D.U.S.U.S.A.F.", "US", "ab", "USA", "USB", "USD", "US", "USAF", NULL, + "3", "phon\\e", "phone", NULL, + "3", "\\thephone", "thephone", NULL, + "3", "the\\!phone", "the", "phone", NULL, + "3", "\\!phone", "phone", NULL, + "3", "\\\\phone", "phone", NULL, // the correct behavior if '\' is not in charset + "3", "pho\\\\ne", "pho", "ne", NULL, + "3", "phon\\\\e", "phon", NULL, + "3", "trailing\\", "trailing", NULL, + NULL + }; + + for ( int iCur=0; dTests[iCur] && atoi ( dTests[iCur++] )<=iRun; ) + { + printf ( "%s, run=%d, line=%s\n", sPrefix, iRun, dTests[iCur] ); + pTokenizer->SetBuffer ( (BYTE*)dTests[iCur], strlen ( dTests[iCur] ) ); + iCur++; + + for ( BYTE * pToken=pTokenizer->GetToken(); pToken; pToken=pTokenizer->GetToken() ) + { + assert ( dTests[iCur] && strcmp ( (const char*)pToken, dTests[iCur] )==0 ); + iCur++; + } + + assert ( dTests[iCur]==NULL ); + iCur++; + } + + // test misc SBCS-only and UTF8-only one-liners + const char * dTests2[] = + { + "0", "\x80\x81\x82", "\x80\x81\x82", NULL, + "1", "\xC2\x80\xC2\x81\xC2\x82", "\xC2\x80\xC2\x81\xC2\x82", NULL, + NULL + }; + + for ( int iCur=0; dTests2[iCur] && atoi ( dTests2[iCur++] )==int(bUTF8); ) + { + printf ( "%s, run=%d, line=%s\n", sPrefix, iRun, dTests2[iCur] ); + pTokenizer->SetBuffer ( (BYTE*)dTests2[iCur], strlen ( dTests2[iCur] ) ); + iCur++; + + for ( BYTE * pToken=pTokenizer->GetToken(); pToken; pToken=pTokenizer->GetToken() ) + { + assert ( dTests2[iCur] && strcmp ( (const char*)pToken, dTests2[iCur] )==0 ); + iCur++; + } + + assert ( dTests2[iCur]==NULL ); + iCur++; + } + + + // test that decoder does not go over the buffer boundary on errors in UTF-8 + if ( bUTF8 ) + { + printf ( "%s for proper UTF-8 error handling\n", sPrefix ); + const char * sLine3 = "hi\xd0\xffh"; + + pTokenizer->SetBuffer ( (BYTE*)sLine3, 4 ); + assert ( !strcmp ( (char*)pTokenizer->GetToken(), "hi" ) ); + } + + // test uberlong tokens + printf ( "%s for uberlong token handling\n", sPrefix ); + + const int UBERLONG = 4096; + char * sLine4 = new char [ UBERLONG+1 ]; + memset ( sLine4, 'a', UBERLONG ); + sLine4[UBERLONG] = '\0'; + + char sTok4[SPH_MAX_WORD_LEN+1]; + memset ( sTok4, 'a', SPH_MAX_WORD_LEN ); + sTok4[SPH_MAX_WORD_LEN] = '\0'; + + pTokenizer->SetBuffer ( (BYTE*)sLine4, strlen(sLine4) ); + assert ( !strcmp ( (char*)pTokenizer->GetToken(), sTok4 ) ); + assert ( pTokenizer->GetToken()==NULL ); + + // test short word callbacks + printf ( "%s for short token handling\n", sPrefix ); + ISphTokenizer * pShortTokenizer = pTokenizer->Clone ( bEscaped ); + + CSphRemapRange tStar ( '*', '*', '*' ); + pShortTokenizer->AddCaseFolding ( tStar ); + + CSphTokenizerSettings tSettings = pShortTokenizer->GetSettings(); + tSettings.m_iMinWordLen = 5; + pShortTokenizer->Setup ( tSettings ); + + pShortTokenizer->EnableQueryParserMode ( true ); + + const char * dTestsShort[] = + { + "ab*", "ab*", NULL, + "*ab", "*ab", NULL, + "abcdef", "abcdef", NULL, + "ab *ab* abc", "*ab*", NULL, + NULL + }; + + for ( int iCur=0; dTestsShort[iCur]; ) + { + pShortTokenizer->SetBuffer ( (BYTE*)(dTestsShort [iCur]), strlen ( (const char*)dTestsShort [iCur] ) ); + iCur++; + for ( BYTE * pToken=pShortTokenizer->GetToken(); pToken; pToken=pShortTokenizer->GetToken() ) + { + assert ( dTestsShort[iCur] && strcmp ( (const char*)pToken, dTestsShort[iCur] )==0 ); + iCur++; + } + + assert ( !dTestsShort [iCur] ); + iCur++; + } + + SafeDelete ( pShortTokenizer ); + + // test uberlong synonym-only tokens + if ( iRun==2 ) + { + printf ( "%s for uberlong synonym-only char token handling\n", sPrefix ); + + memset ( sLine4, '/', UBERLONG ); + sLine4[UBERLONG] = '\0'; + + pTokenizer->SetBuffer ( (BYTE*)sLine4, strlen(sLine4) ); + assert ( pTokenizer->GetToken()==NULL ); + + printf ( "%s for uberlong synonym token handling\n", sPrefix ); + + for ( int i=0; iSetBuffer ( (BYTE*)sLine4, strlen(sLine4) ); + for ( int i=0; iGetToken(), "aa" ) ); + assert ( pTokenizer->GetToken()==NULL ); + } + + SafeDeleteArray ( sLine4 ); + + // test boundaries + printf ( "%s for boundaries handling, run=%d\n", sPrefix, iRun ); + + CSphString sError; + assert ( pTokenizer->SetBoundary ( "?", sError ) ); + + char sLine5[] = "hello world? testing boundaries?"; + pTokenizer->SetBuffer ( (BYTE*)sLine5, strlen(sLine5) ); + + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "hello" ) ); assert ( !pTokenizer->GetBoundary() ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "world" ) ); assert ( !pTokenizer->GetBoundary() ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "testing" ) ); assert ( pTokenizer->GetBoundary() ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "boundaries" ) ); assert ( !pTokenizer->GetBoundary() ); + + // test specials vs token start/end ptrs + printf ( "%s vs specials vs token start/end ptrs\n", sPrefix ); + + char sLine6[] = "abc!def"; + pTokenizer->SetBuffer ( (BYTE*)sLine6, strlen(sLine6) ); + + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "abc" ) ); + assert ( *pTokenizer->GetTokenStart()=='a' ); + assert ( *pTokenizer->GetTokenEnd()=='!' ); + + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "!" ) ); + assert ( *pTokenizer->GetTokenStart()=='!' ); + assert ( *pTokenizer->GetTokenEnd()=='d' ); + + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "def" ) ); + assert ( *pTokenizer->GetTokenStart()=='d' ); + assert ( *pTokenizer->GetTokenEnd()=='\0' ); + + // done + SafeDelete ( pTokenizer ); + } + + // test blended + printf ( "%s vs escaping vs blend_chars edge cases\n", sPrefix ); + + CSphString sError; + ISphTokenizer * pTokenizer = CreateTestTokenizer ( bUTF8, false, true ); // no exceptions, but escaped + pTokenizer->AddSpecials ( "()!-\"" ); + assert ( pTokenizer->SetBlendChars ( ".", sError ) ); + + char sTest1[] = "(texas.\\\")"; + pTokenizer->SetBuffer ( (BYTE*)sTest1, strlen(sTest1) ); + + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "(" ) ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "texas." ) ); + assert ( pTokenizer->TokenIsBlended() ); + pTokenizer->SkipBlended (); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), ")" ) ); + assert ( pTokenizer->GetToken()==NULL ); + + char sTest2[] = "\"series 2003\\-\\\"\""; + printf ( "test %s\n", sTest2 ); + pTokenizer->SetBuffer ( (BYTE*)sTest2, strlen(sTest2) ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "\"" ) ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "series" ) ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "2003-" ) ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "\"" ) ); + assert ( pTokenizer->GetToken()==NULL ); + + char sTest3[] = "aa lock.up bb"; + printf ( "test %s\n", sTest3 ); + pTokenizer->SetBuffer ( (BYTE*)sTest3, strlen(sTest3) ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "aa" ) ); + assert ( !pTokenizer->TokenIsBlended() ); + assert ( !pTokenizer->TokenIsBlendedPart() ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "lock.up" ) ); + assert ( pTokenizer->TokenIsBlended() ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "lock" ) ); + assert ( !pTokenizer->TokenIsBlended() ); + assert ( pTokenizer->TokenIsBlendedPart() ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "up" ) ); + assert ( !pTokenizer->TokenIsBlended() ); + assert ( pTokenizer->TokenIsBlendedPart() ); + assert ( !strcmp ( (const char*)pTokenizer->GetToken(), "bb" ) ); + assert ( !pTokenizer->TokenIsBlended() ); + assert ( !pTokenizer->TokenIsBlendedPart() ); + + SafeDelete ( pTokenizer ); +} + + +void BenchTokenizer ( bool bUTF8 ) +{ + printf ( "benchmarking %s tokenizer\n", bUTF8 ? "UTF8" : "SBCS" ); + if ( !CreateSynonymsFile ( NULL ) ) + { + printf ( "benchmark failed: error writing temp synonyms file\n" ); + return; + } + + + const char * sTestfile = "./configure"; + for ( int iRun=1; iRun<=2; iRun++ ) + { + FILE * fp = fopen ( sTestfile, "rb" ); + if ( !fp ) + { + printf ( "benchmark failed: error opening %s\n", sTestfile ); + return; + } + const int MAX_DATA = 10485760; + char * sData = new char [ MAX_DATA ]; + int iData = fread ( sData, 1, MAX_DATA, fp ); + fclose ( fp ); + if ( iData<=0 ) + { + printf ( "benchmark failed: error reading %s\n", sTestfile ); + SafeDeleteArray ( sData ); + return; + } + + CSphString sError; + ISphTokenizer * pTokenizer = bUTF8 ? sphCreateUTF8Tokenizer () : sphCreateSBCSTokenizer (); + pTokenizer->SetCaseFolding ( "-, 0..9, A..Z->a..z, _, a..z", sError ); + if ( iRun==2 ) + pTokenizer->LoadSynonyms ( g_sTmpfile, sError ); + pTokenizer->AddSpecials ( "!-" ); + + const int iPasses = 10; + int iTokens = 0; + + int64_t tmTime = -sphMicroTimer(); + for ( int iPass=0; iPassSetBuffer ( (BYTE*)sData, iData ); + while ( pTokenizer->GetToken() ) iTokens++; + } + tmTime += sphMicroTimer(); + + iTokens /= iPasses; + tmTime /= iPasses; + + printf ( "run %d: %d bytes, %d tokens, %d.%03d ms, %.3f MB/sec\n", iRun, iData, iTokens, (int)(tmTime/1000), (int)(tmTime%1000), float(iData)/tmTime ); + SafeDeleteArray ( sData ); + } +} + +////////////////////////////////////////////////////////////////////////// + +void TestStripper () +{ + const char * sTests[][4] = + { + // source-data, index-attrs, remove-elements, expected-results + { "trivial test", "", "", " trivial test " }, + { "lets \"niceindex attrs", "img=alt", "", " lets nice picture index attrs " }, + { " lets alsoremove scripts", "", "script, style", " lets also remove scripts" }, + { "testing inline elements", "", "", "testing inline elements" }, + { "testing non

    inlineelements", "", "", "testing non inline elements" }, + { "testing entities&stuff", "", "", "testing entities&stuff" }, + { "testing АБВ utf encoding", "", "", "testing \xD0\x90\xD0\x91\xD0\x92 utf encoding" }, + { "testing <1 <\" <\x80 <\xe0 <\xff ents", "", "", "testing comments" }, + { "< > ϑ &somethingverylong; &the", "", "", "< > \xCF\x91 &somethingverylong; &the" }, + { "testing \"niceinline tags vs attr indexing", "img=alt,rel", "", "testing nice picture anotherattr inline tags vs attr indexing" }, + { "this away", "", "", "this away" }, + { "content1", "a=title", "", "content1" }, + { "content2", "a=title", "", "my test title content2" }, + { "testing \"niceinline tags vs attr indexing", "img=alt,rel", "", "testing nice picture anotherattr inline tags vs attr indexing" }, + { "test", "", "", " test " }, + { "cantest", "", "", " test " }, + { "
    ohai
    ", "", "", " ohai " }, + { "ohai23", "", "", "ohai 3" }, + { "ohai
    4", "", "", "ohai 4" }, + { "ohai
    5", "", "", "ohai 5" }, + { "ohai
    6
    some more content", "", "", "ohai 6 some more content" }, + { "ohaib\">7", "", "", "ohai 7" }, + { "ohai
    b\">8", "", "", "ohai 8" }, + { "ohai
    b\">9", "", "", "ohai 9" }, + { "ohai
    b\">10", "", "", "ohai 10" }, + { "ohai
    611
    gimme more", "", "", "ohai 11 gimme more" }, + { "

    Commission File Number: 333-155507", "", "", " Commission File Number: 333-155507" }, + { "SGX", "", "", " SGX" }, + { "tango & cash", "", "", "tango & cash" }, + { "ahoy\"mate", "font=zzz", "", "ahoy\"mate" }, + { "ahoy2", "font=zzz", "", "ahoy2" }, + { "ahoy3there", "font=zzz", "", "ahoy3there" }, + { "ahoyb\">4", "font=zzz", "", "ahoy4" }, + { "ahoyb\">5", "font=zzz", "", "ahoy5" }, + { "ahoy6seveneight", "font=zzz", "", "ahoyseveneight" } + }; + + int nTests = (int)(sizeof(sTests)/sizeof(sTests[0])); + for ( int iTest=0; iTest=2,3,4)", 3.0f }, + { "pow(7,5)", 16807.f }, + { "sqrt(3)", 1.7320508f }, + { "log2((2+2)*(2+2))", 4.0f }, + { "min(3,15)", 3.0f }, + { "max(3,15)", 15.0f }, + { "if(3<15,bbb,ccc)", 2.0f }, + { "@id+@weight", 579.0f }, + { "abs(-3-ccc)", 6.0f }, + { "(aaa+bbb)*(ccc-aaa)", 6.0f }, + { "(((aaa)))", 1.0f }, + { "aaa-bbb*ccc", -5.0f }, + { " aaa -\tbbb *\t\t\tccc ", -5.0f }, + { "bbb+123*aaa", 125.0f }, + { "2.000*2e+1+2", 42.0f }, + { "3<5", 1.0f }, + { "1 + 2*3 > 4*4", 0.0f }, + { "aaa/-bbb", -0.5f, }, + { "-10*-10", 100.0f }, + { "aaa+-bbb*-5", 11.0f }, + { "-aaa>-bbb", 1.0f }, + { "1-aaa+2-3+4", 3.0f }, + { "bbb/1*2/6*3", 2.0f }, + { "(aaa+bbb)/sqrt(3)/sqrt(3)", 1.0f }, + { "aaa-bbb-2", -3.0f }, + { "ccc/2*4/bbb", 3.0f }, + { "(2+(aaa*bbb))+3", 7.0f } + }; + + const int nTests = sizeof(dTests)/sizeof(dTests[0]); + for ( int iTest=0; iTest pExpr ( sphExprParse ( dTests[iTest].m_sExpr, tSchema, NULL, NULL, sError ) ); + if ( !pExpr.Ptr() ) + { + printf ( "FAILED; %s\n", sError.cstr() ); + assert ( 0 ); + } + + float fValue = pExpr->Eval(tMatch); + if ( fabs ( fValue - dTests[iTest].m_fValue )>=0.0001f ) + { + printf ( "FAILED; expected %.3f, got %.3f\n", dTests[iTest].m_fValue, fValue ); + assert ( 0 ); + } + + printf ( "ok\n" ); + } + + SafeDeleteArray ( pRow ); +} + + +#if USE_WINDOWS +#define NOINLINE __declspec(noinline) +#else +#define NOINLINE +#endif + +#define AAA float(tMatch.m_pStatic[0]) +#define BBB float(tMatch.m_pStatic[1]) +#define CCC float(tMatch.m_pStatic[2]) + +NOINLINE float ExprNative1 ( const CSphMatch & tMatch ) { return AAA+BBB*CCC-1.0f;} +NOINLINE float ExprNative2 ( const CSphMatch & tMatch ) { return AAA+BBB*CCC*2.0f-3.0f/4.0f*5.0f/6.0f*BBB; } +NOINLINE float ExprNative3 ( const CSphMatch & ) { return (float)sqrt ( 2.0f ); } + + +void BenchExpr () +{ + printf ( "benchmarking expressions\n" ); + + CSphColumnInfo tCol; + tCol.m_eAttrType = SPH_ATTR_INTEGER; + + CSphSchema tSchema; + tCol.m_sName = "aaa"; tSchema.AddAttr ( tCol, false ); + tCol.m_sName = "bbb"; tSchema.AddAttr ( tCol, false ); + tCol.m_sName = "ccc"; tSchema.AddAttr ( tCol, false ); + + CSphRowitem * pRow = new CSphRowitem [ tSchema.GetRowSize() ]; + for ( int i=0; i pExpr ( sphExprParse ( dBench[iRun].m_sExpr, tSchema, &uType, NULL, sError ) ); + if ( !pExpr.Ptr() ) + { + printf ( "FAILED; %s\n", sError.cstr() ); + return; + } + + const int NRUNS = 1000000; + + volatile float fValue = 0.0f; + int64_t tmTime = sphMicroTimer(); + for ( int i=0; iEval(tMatch); + tmTime = sphMicroTimer() - tmTime; + + int64_t tmTimeInt = sphMicroTimer(); + if ( uType==SPH_ATTR_INTEGER ) + { + int uValue = 0; + for ( int i=0; iIntEval(tMatch); + } + tmTimeInt = sphMicroTimer() - tmTimeInt; + + int64_t tmTimeNative = sphMicroTimer(); + for ( int i=0; im_dWords.GetLength() ) + { + // say just words to me + const CSphVector & dWords = pNode->m_dWords; + ARRAY_FOREACH ( i, dWords ) + sRes.SetSprintf ( "%s %s", sRes.cstr(), dWords[i].m_sWord.cstr() ); + sRes.Chop (); + + switch ( pNode->GetOp() ) + { + case SPH_QUERY_AND: break; + case SPH_QUERY_PHRASE: sRes.SetSprintf ( "\"%s\"", sRes.cstr() ); break; + case SPH_QUERY_PROXIMITY: sRes.SetSprintf ( "\"%s\"~%d", sRes.cstr(), pNode->m_iOpArg ); break; + case SPH_QUERY_QUORUM: sRes.SetSprintf ( "\"%s\"/%d", sRes.cstr(), pNode->m_iOpArg ); break; + case SPH_QUERY_NEAR: sRes.SetSprintf ( "\"%s\"NEAR/%d", sRes.cstr(), pNode->m_iOpArg ); break; + default: assert ( 0 && "unexpected op in ReconstructNode()" ); break; + } + + if ( !pNode->m_dFieldMask.TestAll(true) ) + { + CSphString sFields ( "" ); + for ( int i=0; im_dFieldMask.Test(i) ) + sFields.SetSprintf ( "%s,%s", sFields.cstr(), tSchema.m_dFields[i].m_sName.cstr() ); + + sRes.SetSprintf ( "( @%s: %s )", sFields.cstr()+1, sRes.cstr() ); + } else + { + if ( pNode->GetOp()==SPH_QUERY_AND && dWords.GetLength()>1 ) + sRes.SetSprintf ( "( %s )", sRes.cstr() ); // wrap bag of words + } + + } else + { + ARRAY_FOREACH ( i, pNode->m_dChildren ) + { + if ( !i ) + sRes = ReconstructNode ( pNode->m_dChildren[i], tSchema ); + else + { + const char * sOp = "(unknown-op)"; + switch ( pNode->GetOp() ) + { + case SPH_QUERY_AND: sOp = "AND"; break; + case SPH_QUERY_OR: sOp = "OR"; break; + case SPH_QUERY_NOT: sOp = "NOT"; break; + case SPH_QUERY_ANDNOT: sOp = "AND NOT"; break; + case SPH_QUERY_BEFORE: sOp = "BEFORE"; break; + case SPH_QUERY_NEAR: sOp = "NEAR"; break; + default: assert ( 0 && "unexpected op in ReconstructNode()" ); break; + } + sRes.SetSprintf ( "%s %s %s", sRes.cstr(), sOp, ReconstructNode ( pNode->m_dChildren[i], tSchema ).cstr() ); + } + } + + if ( pNode->m_dChildren.GetLength()>1 ) + sRes.SetSprintf ( "( %s )", sRes.cstr() ); + } + + return sRes; +} + + +void TestQueryParser () +{ + CSphString sTmp; + + CSphSchema tSchema; + CSphColumnInfo tCol; + tCol.m_sName = "title"; tSchema.m_dFields.Add ( tCol ); + tCol.m_sName = "body"; tSchema.m_dFields.Add ( tCol ); + + CSphDictSettings tDictSettings; + CSphScopedPtr pTokenizer ( sphCreateSBCSTokenizer () ); + CSphScopedPtr pDict ( sphCreateDictionaryCRC ( tDictSettings, pTokenizer.Ptr(), sTmp, "query" ) ); + assert ( pTokenizer.Ptr() ); + assert ( pDict.Ptr() ); + + CSphTokenizerSettings tTokenizerSetup; + tTokenizerSetup.m_iMinWordLen = 2; + tTokenizerSetup.m_sSynonymsFile = g_sTmpfile; + pTokenizer->Setup ( tTokenizerSetup ); + + CSphString sError; + assert ( CreateSynonymsFile ( NULL ) ); + assert ( pTokenizer->LoadSynonyms ( g_sTmpfile, sError ) ); + + struct QueryTest_t + { + const char * m_sQuery; + const char * m_sReconst; + }; + const QueryTest_t dTest[] = + { + { "aaa bbb ccc", "( aaa AND bbb AND ccc )" }, + { "aaa|bbb ccc", "( ( aaa OR bbb ) AND ccc )" }, + { "aaa bbb|ccc", "( aaa AND ( bbb OR ccc ) )" }, + { "aaa (bbb ccc)|ddd", "( aaa AND ( ( bbb AND ccc ) OR ddd ) )" }, + { "aaa bbb|(ccc ddd)", "( aaa AND ( bbb OR ( ccc AND ddd ) ) )" }, + { "aaa bbb|(ccc ddd)|eee|(fff)", "( aaa AND ( bbb OR ( ccc AND ddd ) OR eee OR fff ) )" }, + { "aaa bbb|(ccc ddd) eee|(fff)", "( aaa AND ( bbb OR ( ccc AND ddd ) ) AND ( eee OR fff ) )" }, + { "aaa (ccc ddd)|bbb|eee|(fff)", "( aaa AND ( ( ccc AND ddd ) OR bbb OR eee OR fff ) )" }, + { "aaa (ccc ddd)|bbb eee|(fff)", "( aaa AND ( ( ccc AND ddd ) OR bbb ) AND ( eee OR fff ) )" }, + { "aaa \"bbb ccc\"~5|ddd", "( aaa AND ( \"bbb ccc\"~5 OR ddd ) )" }, + { "aaa bbb|\"ccc ddd\"~5", "( aaa AND ( bbb OR \"ccc ddd\"~5 ) )" }, + { "aaa ( ( \"bbb ccc\"~3|ddd ) eee | ( fff -ggg ) )", "( aaa AND ( ( \"bbb ccc\"~3 OR ddd ) AND ( eee OR ( fff AND NOT ggg ) ) ) )" }, + { "@title aaa @body ccc|(@title ddd eee)|fff ggg", "( ( @title: aaa ) AND ( ( @body: ccc ) OR ( ( @title: ddd ) AND ( @title: eee ) ) OR ( @body: fff ) ) AND ( @body: ggg ) )" }, + { "@title hello world | @body sample program", "( ( @title: hello ) AND ( ( @title: world ) OR ( @body: sample ) ) AND ( @body: program ) )" }, + { "@title one two three four", "( ( @title: one ) AND ( @title: two ) AND ( @title: three ) AND ( @title: four ) )" }, + { "@title one (@body two three) four", "( ( @title: one ) AND ( ( @body: two ) AND ( @body: three ) ) AND ( @title: four ) )" }, + { "windows 7 2000", "( windows AND 2000 )" }, + { "aaa a|bbb", "( aaa AND bbb )" }, + { "aaa bbb|x y z|ccc", "( aaa AND bbb AND ccc )" }, + { "a", "" }, + { "hello -world", "( hello AND NOT world )" }, + { "-hello world", "( world AND NOT hello )" }, + { "\"phrase (query)/3 ~on steroids\"", "\"phrase query on steroids\"" }, + { "hello a world", "( hello AND world )" }, + { "-one", "" }, + { "-one -two", "" }, + { "\"\"", "" }, + { "\"()\"", "" }, + { "\"]\"", "" }, + { "@title hello @body -world", "( ( @title: hello ) AND NOT ( @body: world ) )" }, + { "Ms-Dos", "MS-DOS" } + }; + + + int nTests = sizeof(dTest)/sizeof(dTest[0]); + for ( int i=0; i=0; i++ ) + pRow += sphPackStrlen ( pRow, dValues[i] ); + + const BYTE * pUnp = dBuffer; + for ( int i=0; dValues[i]>=0; i++ ) + { + int iUnp = sphUnpackStr ( pUnp, &pUnp ); + assert ( iUnp==dValues[i] ); + } + + printf ( "ok\n" ); +} +#endif + +////////////////////////////////////////////////////////////////////////// + +void BenchLocators () +{ + const int MAX_ITEMS = 10; + const int NUM_MATCHES = 1000; + const int NUM_RUNS = 100000; + + CSphRowitem dStatic[MAX_ITEMS]; + CSphRowitem dDynamic[MAX_ITEMS]; + CSphAttrLocator tLoc[NUM_MATCHES]; + CSphMatch tMatch[NUM_MATCHES]; + + for ( int i=0; i(1+i) ) ); + } + + for ( int i=0; iLock(); + for ( int i=0; i<100; i++ ) + g_iMutexBench++; + g_iMutexBench -= 99; + pMutex->Unlock(); +} + +void BenchThreads () +{ + printf ( "benchmarking threads\n" ); + + const int BATCHES = 100; + const int BATCH_THREADS = 100; + const int TOTAL_THREADS = BATCHES*BATCH_THREADS; + + SphThread_t * pThd = new SphThread_t [ BATCH_THREADS ]; + + CSphMutex tMutex; + if ( !tMutex.Init() ) + sphDie ( "failed to init mutex" ); + + for ( int iRun=1; iRun<=2; iRun++ ) + { + int64_t tmThd = sphMicroTimer(); + for ( int iBatch=0; iBatch>3 ) & 1; +} + +typedef void (*SortDataGen_fn)( DWORD *, int ); + +struct SortDataGenDesc_t +{ + SortDataGen_fn m_fnGen; + const char * m_sName; +}; + +SortDataGenDesc_t g_dSortDataGens[] = +{ + { SortDataRepeat1245, "repeat1245" }, + { SortDataEnd0, "end0" }, + { SortDataIdentical, "identical" }, + { SortDataMed3Killer, "med3killer" }, + { SortDataMidKiller, "midkiller" }, + { SortDataRandDupes, "randdupes" }, + { SortDataRandUniq, "randuniq" }, + { SortDataRandSteps, "randsteps" }, + { SortDataRevEnds, "revends" }, + { SortDataRevPartial, "revpartial" }, + { SortDataRevSaw, "revsaw" }, + { SortDataReverse, "reverse" }, + { SortDataStart1000, "start1000" }, + { SortDataSeqPartial, "seqpartial" }, + { SortDataSeqSaw, "seqsaw" }, + { SortDataSeq, "sequential" }, + { SortDataAscDesc, "ascdesc" }, + { SortDataDescAsc, "descasc" }, + { SortDataRand01, "rand01" }, +}; + +struct SortPayload_t +{ + DWORD m_uKey; + DWORD m_uPayload[3]; + + bool operator < ( const SortPayload_t & rhs ) const + { + return m_uKey < rhs.m_uKey; + } +}; + +inline bool operator < ( const CSphWordHit & a, const CSphWordHit & b ) +{ + return + ( a.m_iWordID +int64_t BenchSort ( T * pData, int iCount, bool bCheck ) +{ + int64_t tmSort = sphMicroTimer(); + sphSort ( pData, iCount ); + tmSort = sphMicroTimer() - tmSort; + + if ( bCheck ) + { + for ( int i=0; i 1 ? sphCRC32 ( ( ( const BYTE * ) ( pData + 1 ) ), ( m_iStride - 1 ) * 4 ) : ( *pData ); + } +}; + + +#ifndef NDEBUG +static bool IsSorted ( DWORD * pData, int iCount, const TestAccCmp_fn & fn ) +{ + if ( iCount<1 ) + return true; + + const DWORD * pPrev = pData; + if ( !fn.IsKeyDataSynced ( pPrev ) ) + return false; + + if ( iCount<2 ) + return true; + + for ( int i = 1; i < iCount; ++i ) + { + const DWORD * pCurr = fn.Add ( pData, i ); + + if ( fn.IsLess ( *pCurr , *pPrev ) || !fn.IsKeyDataSynced ( pCurr ) ) + return false; + + pPrev = pCurr; + } + + return true; +} +#endif + + +void RandomFill ( DWORD * pData, int iCount, const TestAccCmp_fn & fn, bool bChainsaw ) +{ + for ( int i = 0; i < iCount; ++i ) + { + DWORD * pCurr = fn.Add ( pData, i ); + const DWORD * pNext = fn.Add ( pData, i + 1 ); + + DWORD * pElem = pCurr; + DWORD * pChainHill = bChainsaw && ( i % 2 ) ? fn.Add ( pData, i -1 ) : NULL; + do + { + *pElem = pChainHill ? *pChainHill / 2 : sphRand(); + ++pElem; + pChainHill = pChainHill ? pChainHill + 1 : pChainHill; + } while ( pElem!=pNext ); + + *pCurr = fn.GenerateKey ( pCurr ); + } +} + +void TestStridedSortPass ( int iStride, int iCount ) +{ + printf ( "testing strided sort, stride=%d, count=%d... ", iStride, iCount ); + + assert ( iStride && iCount ); + + DWORD * pData = new DWORD [ iCount * iStride ]; + assert ( pData ); + + // checked elements are random + memset ( pData, 0, sizeof ( DWORD ) * iCount * iStride ); + TestAccCmp_fn fnSort ( iStride ); + RandomFill ( pData, iCount, fnSort, false ); + + // crash on sort of mini-arrays + TestAccCmp_fn fnSortDummy ( 1 ); + DWORD dMini[1] = { 1 }; + sphSort ( dMini, 1, fnSortDummy, fnSortDummy ); + sphSort ( dMini, 0, fnSortDummy, fnSortDummy ); + assert ( IsSorted ( dMini, 1, fnSortDummy ) ); + + // random sort + sphSort ( pData, iCount, fnSort, fnSort ); + assert ( IsSorted ( pData, iCount, fnSort ) ); + + // already sorted sort + sphSort ( pData, iCount, fnSort, fnSort ); + assert ( IsSorted ( pData, iCount, fnSort ) ); + + // reverse order sort + for ( int i = 0; i < iCount; ++i ) + { + ::Swap ( pData[i], pData [ iCount - i - 1 ] ); + } + sphSort ( pData, iCount, fnSort, fnSort ); + assert ( IsSorted ( pData, iCount, fnSort ) ); + + // random chainsaw sort + RandomFill ( pData, iCount, fnSort, true ); + sphSort ( pData, iCount, fnSort, fnSort ); + assert ( IsSorted ( pData, iCount, fnSort ) ); + + printf ( "ok\n" ); + SafeDeleteArray ( pData ); +} + +void TestStridedSort () +{ + TestStridedSortPass ( 1, 2 ); + TestStridedSortPass ( 3, 2 ); + TestStridedSortPass ( 37, 2 ); + + // SMALL_THRESH case + TestStridedSortPass ( 1, 30 ); + TestStridedSortPass ( 7, 13 ); + TestStridedSortPass ( 113, 5 ); + + TestStridedSortPass ( 1, 1000 ); + TestStridedSortPass ( 5, 1000 ); + TestStridedSortPass ( 17, 50 ); + TestStridedSortPass ( 31, 1367 ); + + // rand cases + for ( int i = 0; i < 10; ++i ) + { + const int iRndStride = sphRand() % 64; + const int iNrmStride = Max ( iRndStride, 1 ); + const int iRndCount = sphRand() % 1000; + const int iNrmCount = Max ( iRndCount, 1 ); + TestStridedSortPass ( iNrmStride, iNrmCount ); + } +} + +////////////////////////////////////////////////////////////////////////// + +const char * g_sFieldsData[] = { "33", "1033", "If I were a cat...", "We are the greatest cat" }; + +class SphTestDoc_c : public CSphSource_Document +{ +public: + explicit SphTestDoc_c ( const CSphSchema & tSchema ) : CSphSource_Document ( "test_doc" ) + { + m_tSchema = tSchema; + } + + virtual BYTE ** NextDocument ( CSphString & ) + { + if ( m_tDocInfo.m_iDocID ) + { + m_tDocInfo.m_iDocID = 0; + return NULL; + } + + m_tDocInfo.m_iDocID++; + return (BYTE **) &g_sFieldsData[2]; + } + + bool Connect ( CSphString & ) { return true; } + void Disconnect () {} + bool HasAttrsConfigured () { return true; } + bool IterateStart ( CSphString & ) { m_tDocInfo.Reset ( m_tSchema.GetRowSize() ); return true; } + bool IterateMultivaluedStart ( int, CSphString & ) { return false; } + bool IterateMultivaluedNext () { return false; } + bool IterateFieldMVAStart ( int, CSphString & ) { return false; } + bool IterateFieldMVANext () { return false; } + bool IterateKillListStart ( CSphString & ) { return false; } + bool IterateKillListNext ( SphDocID_t & ) { return false; } +}; + + +#ifndef NDEBUG + +static void CheckRT ( int iVal, int iRef, const char * sMsg ) +{ +#if 1 + assert ( iRef==iVal && sMsg ); +#else + if ( iRef!=iVal ) + printf ( "\t%s=%d ( %d )\n", sMsg, iVal, iRef ); +#endif +} + +static void DeleteIndexFiles ( const char * sIndex ) +{ + if ( !sIndex ) + return; + + CSphString sName; + sName.SetSprintf ( "%s.kill", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.lock", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.meta", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.ram", sIndex ); + unlink ( sName.cstr() ); + + sName.SetSprintf ( "%s.0.spa", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.0.spd", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.0.sph", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.0.spi", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.0.spk", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.0.spm", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.0.spp", sIndex ); + unlink ( sName.cstr() ); + sName.SetSprintf ( "%s.0.sps", sIndex ); + unlink ( sName.cstr() ); +} + + +void TestRTInit () +{ + CSphConfigSection tRTConfig; + + sphRTInit(); + sphRTConfigure ( tRTConfig, true ); + + SmallStringHash_T hIndexes; + sphReplayBinlog ( hIndexes ); +} + + +#define RT_INDEX_FILE_NAME "test_temp" +#define RT_PASS_COUNT 5 +static const int g_iWeights[RT_PASS_COUNT] = { 1500, 1500, 1500, 1500, 1500 }; // { 1500, 1302, 1252, 1230, 1219 }; + +void TestRTWeightBoundary () +{ + DeleteIndexFiles ( RT_INDEX_FILE_NAME ); + for ( int iPass = 0; iPass < RT_PASS_COUNT; ++iPass ) + { + printf ( "testing rt indexing, test %d/%d... ", 1+iPass, RT_PASS_COUNT ); + TestRTInit (); + + CSphString sError; + CSphDictSettings tDictSettings; + + ISphTokenizer * pTok = sphCreateUTF8Tokenizer(); + CSphDict * pDict = sphCreateDictionaryCRC ( tDictSettings, pTok, sError, "weight" ); + + CSphColumnInfo tCol; + CSphSchema tSrcSchema; + + CSphSourceSettings tParams; + tSrcSchema.Reset(); + + tCol.m_sName = "channel_id"; + tCol.m_eAttrType = SPH_ATTR_INTEGER; + tSrcSchema.AddAttr ( tCol, true ); + + tCol.m_sName = "title"; + tSrcSchema.m_dFields.Add ( tCol ); + + tCol.m_sName = "content"; + tSrcSchema.m_dFields.Add ( tCol ); + + SphTestDoc_c * pSrc = new SphTestDoc_c ( tSrcSchema ); + + pSrc->SetTokenizer ( pTok ); + pSrc->SetDict ( pDict ); + + pSrc->Setup ( tParams ); + Verify ( pSrc->Connect ( sError ) ); + Verify ( pSrc->IterateStart ( sError ) ); + + Verify ( pSrc->UpdateSchema ( &tSrcSchema, sError ) ); + + CSphSchema tSchema; // source schema must be all dynamic attrs; but index ones must be static + tSchema.m_dFields = tSrcSchema.m_dFields; + for ( int i=0; iSetTokenizer ( pTok ); // index will own this pair from now on + pIndex->SetDictionary ( pDict ); + Verify ( pIndex->Prealloc ( false, false, sError ) ); + + ISphHits * pHits; + CSphVector dMvas; + for ( ;; ) + { + Verify ( pSrc->IterateDocument ( sError ) ); + if ( !pSrc->m_tDocInfo.m_iDocID ) + break; + + pHits = pSrc->IterateHits ( sError ); + if ( !pHits ) + break; + + pIndex->AddDocument ( pHits, pSrc->m_tDocInfo, NULL, dMvas, sError ); + pIndex->Commit (); + } + + pSrc->Disconnect(); + + CheckRT ( pSrc->GetStats().m_iTotalDocuments, 1, "docs committed" ); + + CSphQuery tQuery; + CSphQueryResult tResult; + tQuery.m_sQuery = "@title cat"; + + ISphMatchSorter * pSorter = sphCreateQueue ( &tQuery, pIndex->GetMatchSchema(), tResult.m_sError, false ); + assert ( pSorter ); + Verify ( pIndex->MultiQuery ( &tQuery, &tResult, 1, &pSorter, NULL ) ); + sphFlattenQueue ( pSorter, &tResult, 0 ); + CheckRT ( tResult.m_dMatches.GetLength(), 1, "results found" ); + CheckRT ( (int)tResult.m_dMatches[0].m_iDocID, 1, "docID" ); + CheckRT ( tResult.m_dMatches[0].m_iWeight, g_iWeights[iPass], "weight" ); + SafeDelete ( pSorter ); + SafeDelete ( pIndex ); + + sphRTDone (); + + printf ( "ok\n" ); + } + DeleteIndexFiles ( RT_INDEX_FILE_NAME ); +} + +void TestWriter() +{ + printf ( "testing CSphWriter... " ); + const CSphString sTmpWriteout = "__writeout.tmp"; + CSphString sErr; + +#define WRITE_OUT_DATA_SIZE 0x40000 + BYTE * pData = new BYTE[WRITE_OUT_DATA_SIZE]; + memset ( pData, 0xfe, WRITE_OUT_DATA_SIZE ); + + { + CSphWriter tWrDef; + tWrDef.OpenFile ( sTmpWriteout, sErr ); + tWrDef.PutBytes ( pData, WRITE_OUT_DATA_SIZE ); + tWrDef.PutByte ( 0xff ); + } + { + CSphWriter tWr; + tWr.SetBufferSize ( WRITE_OUT_DATA_SIZE ); + tWr.OpenFile ( sTmpWriteout, sErr ); + tWr.PutBytes ( pData, WRITE_OUT_DATA_SIZE ); + tWr.PutByte ( 0xff ); + } + unlink ( sTmpWriteout.cstr() ); + printf ( "ok\n" ); +} + +class SphDocRandomizer_c : public CSphSource_Document +{ + static const int m_iMaxFields = 2; + static const int m_iMaxFieldLen = 512; + char m_dFields[m_iMaxFields][m_iMaxFieldLen]; + BYTE * m_ppFields[m_iMaxFields]; +public: + explicit SphDocRandomizer_c ( const CSphSchema & tSchema ) : CSphSource_Document ( "test_doc" ) + { + m_tSchema = tSchema; + for ( int i=0; i800 ) + { + m_tDocInfo.m_iDocID = 0; + return NULL; + } + + m_tDocInfo.m_iDocID++; + + m_tDocInfo.SetAttr ( m_tSchema.GetAttr(0).m_tLocator, m_tDocInfo.m_iDocID+1000 ); + m_tDocInfo.SetAttr ( m_tSchema.GetAttr(1).m_tLocator, 1313 ); + + snprintf ( m_dFields[0], m_iMaxFieldLen, "cat title%d title%d title%d title%d title%d" + , sphRand(), sphRand(), sphRand(), sphRand(), sphRand() ); + + snprintf ( m_dFields[1], m_iMaxFieldLen, "dog contentwashere%d contentwashere%d contentwashere%d contentwashere%d contentwashere%d" + , sphRand(), sphRand(), sphRand(), sphRand(), sphRand() ); + + return &m_ppFields[0]; + } + + bool Connect ( CSphString & ) { return true; } + void Disconnect () {} + bool HasAttrsConfigured () { return true; } + bool IterateStart ( CSphString & ) { m_tDocInfo.Reset ( m_tSchema.GetRowSize() ); return true; } + bool IterateMultivaluedStart ( int, CSphString & ) { return false; } + bool IterateMultivaluedNext () { return false; } + bool IterateFieldMVAStart ( int, CSphString & ) { return false; } + bool IterateFieldMVANext () { return false; } + bool IterateKillListStart ( CSphString & ) { return false; } + bool IterateKillListNext ( SphDocID_t & ) { return false; } +}; + +void TestRTSendVsMerge () +{ + DeleteIndexFiles ( RT_INDEX_FILE_NAME ); + printf ( "testing rt send result during merge... " ); + + TestRTInit (); + + CSphString sError; + CSphDictSettings tDictSettings; + + ISphTokenizer * pTok = sphCreateUTF8Tokenizer(); + CSphDict * pDict = sphCreateDictionaryCRC ( tDictSettings, pTok, sError, "rt" ); + + CSphColumnInfo tCol; + CSphSchema tSrcSchema; + + CSphSourceSettings tParams; + tSrcSchema.Reset(); + + tCol.m_sName = "title"; + tSrcSchema.m_dFields.Add ( tCol ); + + tCol.m_sName = "content"; + tSrcSchema.m_dFields.Add ( tCol ); + + tCol.m_sName = "tag1"; + tCol.m_eAttrType = SPH_ATTR_INTEGER; + tSrcSchema.AddAttr ( tCol, true ); + + tCol.m_sName = "tag2"; + tCol.m_eAttrType = SPH_ATTR_INTEGER; + tSrcSchema.AddAttr ( tCol, true ); + + SphDocRandomizer_c * pSrc = new SphDocRandomizer_c ( tSrcSchema ); + + pSrc->SetTokenizer ( pTok ); + pSrc->SetDict ( pDict ); + + pSrc->Setup ( tParams ); + Verify ( pSrc->Connect ( sError ) ); + Verify ( pSrc->IterateStart ( sError ) ); + + Verify ( pSrc->UpdateSchema ( &tSrcSchema, sError ) ); + + CSphSchema tSchema; // source schema must be all dynamic attrs; but index ones must be static + tSchema.m_dFields = tSrcSchema.m_dFields; + for ( int i=0; iSetTokenizer ( pTok ); // index will own this pair from now on + pIndex->SetDictionary ( pDict ); + Verify ( pIndex->Prealloc ( false, false, sError ) ); + + CSphQuery tQuery; + CSphQueryResult tResult; + tQuery.m_sQuery = "@title cat"; + + ISphMatchSorter * pSorter = sphCreateQueue ( &tQuery, pIndex->GetMatchSchema(), tResult.m_sError, false ); + assert ( pSorter ); + + CSphVector dMvas; + for ( ;; ) + { + Verify ( pSrc->IterateDocument ( sError ) ); + if ( !pSrc->m_tDocInfo.m_iDocID ) + break; + + ISphHits * pHits = pSrc->IterateHits ( sError ); + if ( !pHits ) + break; + + pIndex->AddDocument ( pHits, pSrc->m_tDocInfo, NULL, dMvas, sError ); + if ( pSrc->m_tDocInfo.m_iDocID==350 ) + { + pIndex->Commit (); + Verify ( pIndex->MultiQuery ( &tQuery, &tResult, 1, &pSorter, NULL ) ); + sphFlattenQueue ( pSorter, &tResult, 0 ); + } + } + pIndex->Commit (); + + pSrc->Disconnect(); + + for ( int i=0; iSetCaseFolding ( "-, 0..9, A..Z->a..z, _, a..z, U+80..U+FF", sError ) ); +// assert ( pTok->SetBlendChars ( "., &", sError ) ); // NOLINT + assert ( pTok->EnableSentenceIndexing ( sError ) ); + + const char * SENTENCE = "\2"; // MUST be in sync with sphinx.cpp + const char * sTest[] = + { + "Bill Gates Jr. attended", "bill", "gates", "jr", "attended", NULL, + "Very good, Dr. Watson", "very", "good", "dr", "watson", NULL, + "VERY GOOD, DR. WATSON", "very", "good", "dr", "watson", NULL, + "He left US. Went abroad", "he", "left", "us", SENTENCE, "went", "abroad", NULL, + "Known as Mr. Doe", "known", "as", "mr", "doe", NULL, + "Survived by Mrs. Doe", "survived", "by", "mrs", "doe", NULL, + "J. R. R. Tolkien", "j", "r", "r", "tolkien", NULL, + "That is it. A boundary", "that", "is", "it", SENTENCE, "a", "boundary", NULL, + "Just a sentence. And then some.", "just", "a", "sentence", SENTENCE, "and", "then", "some", SENTENCE, NULL, + "Right, guy number two? Yes, guy number one!", "right", "guy", "number", "two", SENTENCE, "yes", "guy", "number", "one", SENTENCE, NULL, + "S.T.A.L.K.E.R. sold well in the U.K and elsewhere. Including Russia.", "s", "t", "a", "l", "k", "e", "r", "sold", "well", "in", "the", "u", "k", "and", "elsewhere", SENTENCE, "including", "russia", SENTENCE, NULL, + "Yoyodine Inc. exists since 1800", "yoyodine", "inc", "exists", "since", "1800", NULL, + "John D. Doe, our CEO", "john", "d", "doe", "our", "ceo", NULL, + "Yoyodine Inc. (the Company)", "yoyodine", "inc", "the", "company", NULL, + NULL + }; + + int i = 0; + while ( sTest[i] ) + { + pTok->SetBuffer ( (BYTE*)sTest[i], strlen ( sTest[i] ) ); + i++; + + BYTE * sTok; + while ( ( sTok = pTok->GetToken() )!=NULL ) + { + assert ( !strcmp ( (char*)sTok, sTest[i] ) ); + i++; + } + + assert ( sTest[i]==NULL ); + i++; + } + + printf ( "ok\n" ); +} + +////////////////////////////////////////////////////////////////////////// + +void TestSpanSearch() +{ + printf ( "testing span search... " ); + + CSphVector dVec; + dVec.Add ( 1 ); + dVec.Add ( 3 ); + dVec.Add ( 4 ); + + assert ( FindSpan ( dVec, 1, 5 )==0 ); + assert ( FindSpan ( dVec, 3, 5 )==1 ); + assert ( FindSpan ( dVec, 4, 5 )==2 ); + + dVec.Add ( 15 ); + dVec.Add ( 17 ); + dVec.Add ( 22 ); + dVec.Add ( 23 ); + + assert ( FindSpan ( dVec, 1, 5 )==0 ); + assert ( FindSpan ( dVec, 18, 5 )==4 ); + assert ( FindSpan ( dVec, 23, 5 )==6 ); + + printf ( "ok\n" ); +} + +////////////////////////////////////////////////////////////////////////// + +const char * CORPUS = "corpus.txt"; +const int POOLSIZE = 80*1048576; +const int GAP = 4; + +void BenchStemmer () +{ + CSphString sError; + +#if SNOWBALL + SN_env * pSnow = english_ISO_8859_1_create_env(); +#if 1 + char test[] = "this"; + SN_set_current ( pSnow, strlen(test), (const symbol *)test ); + pSnow->p [ pSnow->l ] = 0; + english_ISO_8859_1_stem ( pSnow ); + stem_en ( (BYTE*)test, strlen(test) ); +#endif +#endif + +#if PORTER1 + struct stemmer * z = create_stemmer(); +#endif + + BYTE * pRaw = new BYTE [ POOLSIZE ]; + FILE * fp = fopen ( CORPUS, "rb" ); + if ( !fp ) + sphDie ( "fopen %s failed", CORPUS ); + int iLen = fread ( pRaw, 1, POOLSIZE, fp ); + printf ( "read %d bytes\n", iLen ); + fclose ( fp ); + + ISphTokenizer * pTok = sphCreateSBCSTokenizer(); + if ( !pTok->SetCaseFolding ( "A..Z->a..z, a..z", sError ) ) + sphDie ( "oops: %s", sError.cstr() ); + + + pTok->SetBuffer ( pRaw, iLen ); + + BYTE * pTokens = new BYTE [ POOLSIZE ]; + BYTE * p = pTokens; + BYTE * sTok; + int iToks = 0; + int iBytes = 0; + int iStemmed = 0; + while ( ( sTok = pTok->GetToken() )!=NULL ) + { + BYTE * pStart = p++; // 1 byte for length + while ( *sTok ) + *p++ = *sTok++; + *pStart = (BYTE)( p-pStart-1 ); // store length + for ( int i=0; i=pTokens+POOLSIZE ) + sphDie ( "out of buffer at tok %d", iToks ); + iToks++; + } + *p++ = '\0'; + iBytes = (int)( p - pTokens ); + printf ( "tokenized %d tokens\n", iToks ); + +#if 0 + int dCharStats[256]; + memset ( dCharStats, 0, sizeof(dCharStats) ); + for ( BYTE * t = pTokens; tp, pSnow->l ); + p[pSnow->l+1] = 0; +#else + // crosscheck + char buf[256]; + memcpy ( buf, p+1, *p+1 ); + + stem_en ( p+1, *p ); + int ll = strlen ( (char*)p+1 ); + if ( ll!=pSnow->l || memcmp ( p+1, pSnow->p, ll ) ) + { + pSnow->p[pSnow->l] = 0; + printf ( "%s[%d] vs %s[%d] for orig %s\n", p+1, ll, pSnow->p, pSnow->l, buf ); + iDiff++; + } +#endif +#endif + +#if PORTER1 + p [ stem ( z, (char*)p+1, *p-1 )+2 ] = 0; +#endif + + p += *p + GAP + 1; + iToks++; + } + tmStem = sphMicroTimer() - tmStem; + + if ( iDiff ) + printf ( "%d tokens are different\n", iDiff ); + + if ( iStemmed ) + printf ( "%d data bytes stemmed\n", iStemmed ); + +#if SNOWBALL + english_ISO_8859_1_close_env ( pSnow ); +#endif + + uint64_t uHash = sphFNV64 ( pTokens, iBytes ); + printf ( "stemmed %d tokens (%d bytes) in %d msec, hash %08x %08x\n", + iToks, iBytes, (int)(tmStem/1000), + (DWORD)( uHash>>32 ), (DWORD)( uHash & 0xffffffffUL ) ); + if ( uHash!=U64C ( 0x54ef4f21994b67db ) ) + printf ( "ERROR, HASH MISMATCH\n" ); + + SafeDelete ( pTok ); + SafeDeleteArray ( pRaw ); +} + +int main () +{ + printf ( "RUNNING INTERNAL LIBSPHINX TESTS\n\n" ); + +#if 0 + BenchSort (); +#endif + +#ifdef NDEBUG + BenchStripper (); + BenchTokenizer ( false ); + BenchTokenizer ( true ); + BenchExpr (); + BenchLocators (); + BenchThreads (); +#else + TestQueryParser (); + TestStripper (); + TestTokenizer ( false ); + TestTokenizer ( true ); + TestExpr (); + TestMisc (); + TestRwlock (); + TestCleanup (); + TestStridedSort (); + TestRTWeightBoundary (); + TestWriter(); + TestRTSendVsMerge (); + TestSentenceTokenizer (); + TestSpanSearch (); +#endif + + unlink ( g_sTmpfile ); + printf ( "\nSUCCESS\n" ); + return 0; +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/src/tests.o b/coreseek/csft-4.1/src/tests.o new file mode 100644 index 0000000..56b7e41 Binary files /dev/null and b/coreseek/csft-4.1/src/tests.o differ diff --git a/coreseek/csft-4.1/src/tokenizer_zhcn.cpp b/coreseek/csft-4.1/src/tokenizer_zhcn.cpp new file mode 100755 index 0000000..fd3a588 --- /dev/null +++ b/coreseek/csft-4.1/src/tokenizer_zhcn.cpp @@ -0,0 +1,47 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sphinx.h" + +#if USE_MMSEG || USE_CRFSEG +#include "SegmenterManager.h" +#include "Segmenter.h" +#include "tokenizer_zhcn.h" + +//////////////////////////////////////////////////////////// + +CSphTokenizer_zh_CN_UTF8_Private::CSphTokenizer_zh_CN_UTF8_Private() + :m_seg(NULL), m_mgr(NULL) +#if USE_LIBICONV + , m_iconv(NULL), m_iconv_out(NULL) +#endif +{ + if(!m_lower) + m_lower = css::ToLower::Get(); + if(!m_tagger) + m_tagger = css::ChineseCharTagger::Get(); +} + +css::Segmenter* CSphTokenizer_zh_CN_UTF8_Private::GetSegmenter(const char* dict_path) +{ + int nRet = 0; + if(!m_mgr) { + m_mgr = SegmenterManagerSingleInstance::Get(); + if(dict_path) + nRet = m_mgr->init(dict_path); + } + if(nRet == 0 && !m_seg) + m_seg = m_mgr->getSegmenter(false); + return m_seg; +} + +css::ToLowerImpl* CSphTokenizer_zh_CN_UTF8_Private::m_lower = NULL; +css::ChineseCharTaggerImpl* CSphTokenizer_zh_CN_UTF8_Private::m_tagger = NULL; + +#endif diff --git a/coreseek/csft-4.1/src/tokenizer_zhcn.h b/coreseek/csft-4.1/src/tokenizer_zhcn.h new file mode 100755 index 0000000..def9b0b --- /dev/null +++ b/coreseek/csft-4.1/src/tokenizer_zhcn.h @@ -0,0 +1,103 @@ +#ifndef _TOKENIZER_ZHCN_H_ +#define _TOKENIZER_ZHCN_H_ + +/* +#ifndef BYTE +#define BYTE char +#define SPH_MAX_WORD_LEN 64 +#endif +*/ +#include +#include +#include +#include +#include +#include +#include + +#if USE_LIBICONV +#include +#endif + +#if USE_WINDOWS +#define ICONV_INBUF_CONST 1 +#endif + +#include "SegmenterManager.h" +#include "Segmenter.h" +/* +class css::SegmenterManager; +class css::Segmenter; +class css::ToLowerImpl; +class css::ChineseCharTaggerImpl; +*/ +//////////////////////////////////////////////////////////// +typedef CSR_Singleton SegmenterManagerSingleInstance; + +class CSphTokenizer_zh_CN_UTF8_Private; + +class CSphTokenizer_zh_CN_UTF8_Private +{ +public: + CSphTokenizer_zh_CN_UTF8_Private(); + + ~CSphTokenizer_zh_CN_UTF8_Private() { + if(m_seg){ + SafeDelete ( m_seg ); + } + }; + + css::Segmenter* GetSegmenter(const char* dict_path); + +public: + static css::ToLowerImpl* m_lower; + static css::ChineseCharTaggerImpl* m_tagger; +protected: + css::Segmenter* m_seg; + css::SegmenterManager* m_mgr; + +#if USE_LIBICONV + iconv_t m_iconv; + iconv_t m_iconv_out; +#endif + +#if USE_LIBICONV +public: + iconv_t GetConverter(const char* from, const char* to) { + if(m_iconv) + return m_iconv; + //m_iconv = iconv_open ("UTF-8//IGNORE", "GB18030"); + m_iconv = iconv_open (to, from); + if (m_iconv == (iconv_t) -1) //error check. + return (iconv_t)(-1); + iconv(m_iconv, NULL, NULL, NULL, NULL); +#if 0 + //ignore invalid char-seq + int one = 1; + iconvctl(m_iconv, ICONV_SET_DISCARD_ILSEQ, &one); +#endif + return m_iconv; + } + + iconv_t GetConverterOutput(const char* from, const char* to) { + if(m_iconv_out) + return m_iconv_out; + //m_iconv = iconv_open ("UTF-8//IGNORE", "GB18030"); + m_iconv_out = iconv_open (to, from); + if (m_iconv_out == (iconv_t) -1) //error check. + return (iconv_t)(-1); + iconv(m_iconv_out, NULL, NULL, NULL, NULL); +#if 0 + //ignore invalid char-seq + int one = 1; + iconvctl(m_iconv_out, ICONV_SET_DISCARD_ILSEQ, &one); +#endif + return m_iconv_out; + } +#endif + +}; + + +#endif + diff --git a/coreseek/csft-4.1/src/tokenizer_zhcn.o b/coreseek/csft-4.1/src/tokenizer_zhcn.o new file mode 100644 index 0000000..6c0b454 Binary files /dev/null and b/coreseek/csft-4.1/src/tokenizer_zhcn.o differ diff --git a/coreseek/csft-4.1/src/udfexample.c b/coreseek/csft-4.1/src/udfexample.c new file mode 100755 index 0000000..de34b0e --- /dev/null +++ b/coreseek/csft-4.1/src/udfexample.c @@ -0,0 +1,145 @@ +// +// $Id$ +// + +// +// Sphinx UDF function example +// +// Linux +// gcc -fPIC -shared -o udfexample.so udfexample.c +// CREATE FUNCTION sequence RETURNS INT SONAME 'udfexample.so'; +// CREATE FUNCTION strtoint RETURNS INT SONAME 'udfexample.so'; +// CREATE FUNCTION avgmva RETURNS FLOAT SONAME 'udfexample.so'; +// +// Windows +// cl /MTd /LD udfexample.c +// CREATE FUNCTION sequence RETURNS INT SONAME 'udfexample.dll'; +// CREATE FUNCTION strtoint RETURNS INT SONAME 'udfexample.dll'; +// CREATE FUNCTION avgmva RETURNS FLOAT SONAME 'udfexample.dll'; +// + +#include "sphinxudf.h" +#include +#include +#include + +#ifdef _MSC_VER +#define snprintf _snprintf +#define DLLEXPORT __declspec(dllexport) +#else +#define DLLEXPORT +#endif + +/// UDF initialization +/// gets called on every query, when query begins +/// args are filled with values for a particular query +DLLEXPORT int sequence_init ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, char * error_message ) +{ + // check argument count + if ( args->arg_count > 1 ) + { + snprintf ( error_message, SPH_UDF_ERROR_LEN, "SEQUENCE() takes either 0 or 1 arguments" ); + return 1; + } + + // check argument type + if ( args->arg_count && args->arg_types[0]!=SPH_UDF_TYPE_UINT32 ) + { + snprintf ( error_message, SPH_UDF_ERROR_LEN, "SEQUENCE() requires 1st argument to be uint" ); + return 1; + } + + // allocate and init counter storage + init->func_data = (void*) malloc ( sizeof(int) ); + if ( !init->func_data ) + { + snprintf ( error_message, SPH_UDF_ERROR_LEN, "malloc() failed" ); + return 1; + } + *(int*)init->func_data = 1; + + // all done + return 0; +} + + +/// UDF deinitialization +/// gets called on every query, when query ends +DLLEXPORT void sequence_deinit ( SPH_UDF_INIT * init ) +{ + // deallocate storage + if ( init->func_data ) + { + free ( init->func_data ); + init->func_data = NULL; + } +} + + +/// UDF implementation +/// gets called for every row, unless optimized away +DLLEXPORT sphinx_int64_t sequence ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, char * error_flag ) +{ + int res = (*(int*)init->func_data)++; + if ( args->arg_count ) + res += *(int*)args->arg_values[0]; + return res; +} + +////////////////////////////////////////////////////////////////////////// + +DLLEXPORT int strtoint_init ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, char * error_message ) +{ + if ( args->arg_count!=1 || args->arg_types[0]!=SPH_UDF_TYPE_STRING ) + { + snprintf ( error_message, SPH_UDF_ERROR_LEN, "STRTOINT() requires 1 string argument" ); + return 1; + } + return 0; +} + +DLLEXPORT sphinx_int64_t strtoint ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, char * error_flag ) +{ + const char * s = args->arg_values[0]; + int len = args->str_lengths[0], res = 0; + + while ( len>0 && *s>='0' && *s<='9' ) + { + res += *s - '0'; + len--; + } + + return res; +} + +////////////////////////////////////////////////////////////////////////// + +DLLEXPORT int avgmva_init ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, char * error_message ) +{ + if ( args->arg_count!=1 || args->arg_types[0]!=SPH_UDF_TYPE_UINT32SET ) + { + snprintf ( error_message, SPH_UDF_ERROR_LEN, "STRTOINT() requires 1 MVA argument" ); + return 1; + } + return 0; +} + +DLLEXPORT double avgmva ( SPH_UDF_INIT * init, SPH_UDF_ARGS * args, char * error_flag ) +{ + unsigned int * mva = (unsigned int *) args->arg_values[0]; + double res = 0; + int i, n; + + if ( !mva ) + return res; + + n = *mva++; + for ( i=0; i)/#if !USE_WINDOWS\n\1\n#endif/;s/\(size_t\) num_to_read/num_to_read/" -i.bak llsphinxql.c +patch -s -p0 -i yysphinxql.patch + +rm -f *.bak +rm -f yysphinxql.c.orig diff --git a/coreseek/csft-4.1/src/yysphinxexpr.c b/coreseek/csft-4.1/src/yysphinxexpr.c new file mode 100755 index 0000000..d06bb8a --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxexpr.c @@ -0,0 +1,1656 @@ +/* A Bison parser, made by GNU Bison 1.875. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Written by Richard Stallman by simplifying the original so called + ``semantic'' parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOK_CONST_INT = 258, + TOK_CONST_FLOAT = 259, + TOK_CONST_STRING = 260, + TOK_ATTR_INT = 261, + TOK_ATTR_BITS = 262, + TOK_ATTR_FLOAT = 263, + TOK_ATTR_MVA32 = 264, + TOK_ATTR_MVA64 = 265, + TOK_ATTR_STRING = 266, + TOK_FUNC = 267, + TOK_FUNC_IN = 268, + TOK_USERVAR = 269, + TOK_UDF = 270, + TOK_HOOK_IDENT = 271, + TOK_HOOK_FUNC = 272, + TOK_ATID = 273, + TOK_ATWEIGHT = 274, + TOK_ID = 275, + TOK_WEIGHT = 276, + TOK_COUNT = 277, + TOK_DISTINCT = 278, + TOK_CONST_LIST = 279, + TOK_ATTR_SINT = 280, + TOK_OR = 281, + TOK_AND = 282, + TOK_NE = 283, + TOK_EQ = 284, + TOK_GTE = 285, + TOK_LTE = 286, + TOK_MOD = 287, + TOK_DIV = 288, + TOK_NOT = 289, + TOK_NEG = 290 + }; +#endif +#define TOK_CONST_INT 258 +#define TOK_CONST_FLOAT 259 +#define TOK_CONST_STRING 260 +#define TOK_ATTR_INT 261 +#define TOK_ATTR_BITS 262 +#define TOK_ATTR_FLOAT 263 +#define TOK_ATTR_MVA32 264 +#define TOK_ATTR_MVA64 265 +#define TOK_ATTR_STRING 266 +#define TOK_FUNC 267 +#define TOK_FUNC_IN 268 +#define TOK_USERVAR 269 +#define TOK_UDF 270 +#define TOK_HOOK_IDENT 271 +#define TOK_HOOK_FUNC 272 +#define TOK_ATID 273 +#define TOK_ATWEIGHT 274 +#define TOK_ID 275 +#define TOK_WEIGHT 276 +#define TOK_COUNT 277 +#define TOK_DISTINCT 278 +#define TOK_CONST_LIST 279 +#define TOK_ATTR_SINT 280 +#define TOK_OR 281 +#define TOK_AND 282 +#define TOK_NE 283 +#define TOK_EQ 284 +#define TOK_GTE 285 +#define TOK_LTE 286 +#define TOK_MOD 287 +#define TOK_DIV 288 +#define TOK_NOT 289 +#define TOK_NEG 290 + + + + +/* Copy the first part of user declarations. */ + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 1 +#endif + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) + +typedef union YYSTYPE { + int64_t iConst; // constant value + float fConst; // constant value + uint64_t iAttrLocator; // attribute locator (rowitem for int/float; offset+size for bits) + int iFunc; // function id + int iNode; // node, or uservar, or udf index +} YYSTYPE; +/* Line 186 of yacc.c. */ + +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 214 of yacc.c. */ + + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# else +# ifndef YYSTACK_USE_ALLOCA +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC malloc +# define YYSTACK_FREE free +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short yysigned_char; +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 30 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 280 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 48 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 8 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 56 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 110 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 290 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 40, 29, 2, + 45, 46, 38, 36, 47, 37, 2, 39, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 32, 2, 33, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 28, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 30, 31, 34, 35, 41, 42, 43, + 44 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned char yyprhs[] = +{ + 0, 0, 3, 5, 7, 9, 11, 13, 15, 17, + 19, 21, 23, 25, 29, 31, 34, 37, 41, 45, + 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, + 89, 93, 97, 101, 105, 109, 111, 113, 115, 117, + 119, 121, 125, 127, 129, 133, 137, 142, 146, 151, + 155, 162, 169, 176, 183, 190, 197 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yysigned_char yyrhs[] = +{ + 49, 0, -1, 51, -1, 6, -1, 7, -1, 8, + -1, 50, -1, 55, -1, 3, -1, 4, -1, 18, + -1, 19, -1, 20, -1, 21, 45, 46, -1, 16, + -1, 37, 51, -1, 43, 51, -1, 51, 36, 51, + -1, 51, 37, 51, -1, 51, 38, 51, -1, 51, + 39, 51, -1, 51, 32, 51, -1, 51, 33, 51, + -1, 51, 29, 51, -1, 51, 28, 51, -1, 51, + 40, 51, -1, 51, 42, 51, -1, 51, 41, 51, + -1, 51, 35, 51, -1, 51, 34, 51, -1, 51, + 31, 51, -1, 51, 30, 51, -1, 51, 27, 51, + -1, 51, 26, 51, -1, 45, 51, 46, -1, 51, + -1, 11, -1, 9, -1, 10, -1, 5, -1, 52, + -1, 53, 47, 52, -1, 3, -1, 4, -1, 54, + 47, 3, -1, 54, 47, 4, -1, 12, 45, 53, + 46, -1, 12, 45, 46, -1, 15, 45, 53, 46, + -1, 15, 45, 46, -1, 13, 45, 50, 47, 54, + 46, -1, 13, 45, 20, 47, 54, 46, -1, 13, + 45, 18, 47, 54, 46, -1, 13, 45, 9, 47, + 54, 46, -1, 13, 45, 10, 47, 54, 46, -1, + 13, 45, 50, 47, 14, 46, -1, 17, 45, 53, + 46, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned char yyrline[] = +{ + 0, 60, 60, 64, 65, 66, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 102, 103, 104, 105, 106, + 110, 111, 115, 116, 117, 118, 122, 123, 124, 125, + 126, 130, 134, 138, 143, 148, 155 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "TOK_CONST_INT", "TOK_CONST_FLOAT", + "TOK_CONST_STRING", "TOK_ATTR_INT", "TOK_ATTR_BITS", "TOK_ATTR_FLOAT", + "TOK_ATTR_MVA32", "TOK_ATTR_MVA64", "TOK_ATTR_STRING", "TOK_FUNC", + "TOK_FUNC_IN", "TOK_USERVAR", "TOK_UDF", "TOK_HOOK_IDENT", + "TOK_HOOK_FUNC", "TOK_ATID", "TOK_ATWEIGHT", "TOK_ID", "TOK_WEIGHT", + "TOK_COUNT", "TOK_DISTINCT", "TOK_CONST_LIST", "TOK_ATTR_SINT", + "TOK_OR", "TOK_AND", "'|'", "'&'", "TOK_NE", "TOK_EQ", "'<'", "'>'", + "TOK_GTE", "TOK_LTE", "'+'", "'-'", "'*'", "'/'", "'%'", "TOK_MOD", + "TOK_DIV", "TOK_NOT", "TOK_NEG", "'('", "')'", "','", "$accept", + "exprline", "attr", "expr", "arg", "arglist", "constlist", "function", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 124, 38, + 283, 284, 60, 62, 285, 286, 43, 45, 42, 47, + 37, 287, 288, 289, 290, 40, 41, 44 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned char yyr1[] = +{ + 0, 48, 49, 50, 50, 50, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, + 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char yyr2[] = +{ + 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 1, 2, 2, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, + 1, 3, 1, 1, 3, 3, 4, 3, 4, 3, + 6, 6, 6, 6, 6, 6, 4 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const unsigned char yydefact[] = +{ + 0, 8, 9, 3, 4, 5, 0, 0, 0, 14, + 0, 10, 11, 12, 0, 0, 0, 0, 0, 6, + 2, 7, 0, 0, 0, 0, 0, 15, 16, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 39, 37, + 38, 36, 47, 35, 40, 0, 0, 0, 0, 0, + 0, 49, 0, 0, 13, 34, 33, 32, 24, 23, + 31, 30, 21, 22, 29, 28, 17, 18, 19, 20, + 25, 27, 26, 46, 0, 0, 0, 0, 0, 0, + 48, 56, 41, 42, 43, 0, 0, 0, 0, 0, + 0, 53, 0, 54, 52, 51, 55, 50, 44, 45 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yysigned_char yydefgoto[] = +{ + -1, 18, 19, 53, 54, 55, 95, 21 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -84 +static const short yypact[] = +{ + 176, -84, -84, -84, -84, -84, -27, -25, 14, -84, + 40, -84, -84, -84, 44, 176, 176, 176, 103, -84, + 217, -84, 45, 1, 89, 133, 79, -84, -84, 196, + -84, 176, 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 176, 176, 176, 176, 176, 176, -84, -84, + -84, -84, -84, 217, -84, -33, 86, 100, 124, 130, + 134, -84, -17, 37, -84, -84, 233, 39, 82, 125, + 166, 166, -14, -14, -14, -14, 238, 238, -84, -84, + -84, -84, -84, -84, 133, 83, 83, 83, 83, -2, + -84, -84, -84, -84, -84, 81, 84, 122, 126, 141, + 128, -84, 182, -84, -84, -84, -84, -84, -84, -84 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const short yypgoto[] = +{ + -84, -84, 106, 0, 127, 185, -83, -84 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const unsigned char yytable[] = +{ + 20, 93, 94, 96, 97, 98, 100, 3, 4, 5, + 56, 57, 99, 83, 84, 27, 28, 29, 22, 58, + 23, 59, 41, 42, 43, 44, 45, 46, 47, 90, + 84, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 1, 2, + 48, 3, 4, 5, 49, 50, 51, 6, 7, 24, + 8, 9, 10, 11, 12, 13, 14, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 15, 91, 84, 25, 93, 94, 16, 26, + 17, 52, 1, 2, 48, 3, 4, 5, 49, 50, + 51, 6, 7, 30, 8, 9, 10, 11, 12, 13, + 14, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 64, 15, 101, 102, 60, + 103, 102, 16, 85, 17, 61, 1, 2, 48, 3, + 4, 5, 49, 50, 51, 6, 7, 86, 8, 9, + 10, 11, 12, 13, 14, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 104, 102, + 15, 87, 105, 102, 107, 102, 16, 88, 17, 1, + 2, 89, 3, 4, 5, 108, 109, 106, 6, 7, + 0, 8, 9, 10, 11, 12, 13, 14, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 62, + 63, 92, 0, 15, 0, 0, 0, 0, 0, 16, + 0, 17, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, + 0, 0, 65, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 43, 44, 45, 46, + 47 +}; + +static const yysigned_char yycheck[] = +{ + 0, 3, 4, 86, 87, 88, 89, 6, 7, 8, + 9, 10, 14, 46, 47, 15, 16, 17, 45, 18, + 45, 20, 36, 37, 38, 39, 40, 41, 42, 46, + 47, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 45, + 15, 16, 17, 18, 19, 20, 21, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 37, 46, 47, 45, 3, 4, 43, 45, + 45, 46, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 0, 15, 16, 17, 18, 19, 20, + 21, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 46, 37, 46, 47, 23, + 46, 47, 43, 47, 45, 46, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 47, 15, 16, + 17, 18, 19, 20, 21, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 46, 47, + 37, 47, 46, 47, 46, 47, 43, 47, 45, 3, + 4, 47, 6, 7, 8, 3, 4, 46, 12, 13, + -1, 15, 16, 17, 18, 19, 20, 21, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 24, + 25, 84, -1, 37, -1, -1, -1, -1, -1, 43, + -1, 45, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, -1, + -1, -1, 46, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 38, 39, 40, 41, + 42 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned char yystos[] = +{ + 0, 3, 4, 6, 7, 8, 12, 13, 15, 16, + 17, 18, 19, 20, 21, 37, 43, 45, 49, 50, + 51, 55, 45, 45, 45, 45, 45, 51, 51, 51, + 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 5, 9, + 10, 11, 46, 51, 52, 53, 9, 10, 18, 20, + 50, 46, 53, 53, 46, 46, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 46, 47, 47, 47, 47, 47, 47, + 46, 46, 52, 3, 4, 54, 54, 54, 54, 14, + 54, 46, 47, 46, 46, 46, 46, 46, 3, 4 +}; + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (pParser, "syntax error: cannot back up");\ + YYERROR; \ + } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + Current.first_line = Rhs[1].first_line; \ + Current.first_column = Rhs[1].first_column; \ + Current.last_line = Rhs[N].last_line; \ + Current.last_column = Rhs[N].last_column; +#endif + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval, pParser) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (cinluded). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short *bottom, short *top) +#else +static void +yy_stack_print (bottom, top) + short *bottom; + short *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned int yylineno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylineno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#if YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + register char *yyd = yydest; + register const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +#endif /* !YYERROR_VERBOSE */ + + + +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} + +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yytype, yyvaluep) + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse ( ExprParser_t * pParser ); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse ( ExprParser_t * pParser ) +#else +int +yyparse (pParser) + ExprParser_t * pParser ; +#endif +#endif +{ + /* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + register int yystate; + register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; + register short *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; + + + +#define YYPOPSTACK (yyvsp--, yyssp--) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyoverflowlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyoverflowlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + short *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: + + { pParser->m_iParsed = yyvsp[0].iNode; ;} + break; + + case 3: + + { yyval.iNode = pParser->AddNodeAttr ( TOK_ATTR_INT, yyvsp[0].iAttrLocator ); ;} + break; + + case 4: + + { yyval.iNode = pParser->AddNodeAttr ( TOK_ATTR_BITS, yyvsp[0].iAttrLocator ); ;} + break; + + case 5: + + { yyval.iNode = pParser->AddNodeAttr ( TOK_ATTR_FLOAT, yyvsp[0].iAttrLocator ); ;} + break; + + case 8: + + { yyval.iNode = pParser->AddNodeInt ( yyvsp[0].iConst ); ;} + break; + + case 9: + + { yyval.iNode = pParser->AddNodeFloat ( yyvsp[0].fConst ); ;} + break; + + case 10: + + { yyval.iNode = pParser->AddNodeID(); ;} + break; + + case 11: + + { yyval.iNode = pParser->AddNodeWeight(); ;} + break; + + case 12: + + { yyval.iNode = pParser->AddNodeID(); ;} + break; + + case 13: + + { yyval.iNode = pParser->AddNodeWeight(); ;} + break; + + case 14: + + { yyval.iNode = pParser->AddNodeHookIdent ( yyvsp[0].iNode ); ;} + break; + + case 15: + + { yyval.iNode = pParser->AddNodeOp ( TOK_NEG, yyvsp[0].iNode, -1 ); ;} + break; + + case 16: + + { yyval.iNode = pParser->AddNodeOp ( TOK_NOT, yyvsp[0].iNode, -1 ); if ( yyval.iNode<0 ) YYERROR; ;} + break; + + case 17: + + { yyval.iNode = pParser->AddNodeOp ( '+', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 18: + + { yyval.iNode = pParser->AddNodeOp ( '-', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 19: + + { yyval.iNode = pParser->AddNodeOp ( '*', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 20: + + { yyval.iNode = pParser->AddNodeOp ( '/', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 21: + + { yyval.iNode = pParser->AddNodeOp ( '<', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 22: + + { yyval.iNode = pParser->AddNodeOp ( '>', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 23: + + { yyval.iNode = pParser->AddNodeOp ( '&', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 24: + + { yyval.iNode = pParser->AddNodeOp ( '|', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 25: + + { yyval.iNode = pParser->AddNodeOp ( '%', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 26: + + { yyval.iNode = pParser->AddNodeFunc ( FUNC_IDIV, pParser->AddNodeOp ( ',', yyvsp[-2].iNode, yyvsp[0].iNode ) ); ;} + break; + + case 27: + + { yyval.iNode = pParser->AddNodeOp ( '%', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 28: + + { yyval.iNode = pParser->AddNodeOp ( TOK_LTE, yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 29: + + { yyval.iNode = pParser->AddNodeOp ( TOK_GTE, yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 30: + + { yyval.iNode = pParser->AddNodeOp ( TOK_EQ, yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 31: + + { yyval.iNode = pParser->AddNodeOp ( TOK_NE, yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 32: + + { yyval.iNode = pParser->AddNodeOp ( TOK_AND, yyvsp[-2].iNode, yyvsp[0].iNode ); if ( yyval.iNode<0 ) YYERROR; ;} + break; + + case 33: + + { yyval.iNode = pParser->AddNodeOp ( TOK_OR, yyvsp[-2].iNode, yyvsp[0].iNode ); if ( yyval.iNode<0 ) YYERROR; ;} + break; + + case 34: + + { yyval.iNode = yyvsp[-1].iNode; ;} + break; + + case 36: + + { yyval.iNode = pParser->AddNodeAttr ( TOK_ATTR_STRING, yyvsp[0].iAttrLocator ); ;} + break; + + case 37: + + { yyval.iNode = pParser->AddNodeAttr ( TOK_ATTR_MVA32, yyvsp[0].iAttrLocator ); ;} + break; + + case 38: + + { yyval.iNode = pParser->AddNodeAttr ( TOK_ATTR_MVA64, yyvsp[0].iAttrLocator ); ;} + break; + + case 39: + + { yyval.iNode = pParser->AddNodeString ( yyvsp[0].iConst ); ;} + break; + + case 40: + + { yyval.iNode = yyvsp[0].iNode; ;} + break; + + case 41: + + { yyval.iNode = pParser->AddNodeOp ( ',', yyvsp[-2].iNode, yyvsp[0].iNode ); ;} + break; + + case 42: + + { yyval.iNode = pParser->AddNodeConstlist ( yyvsp[0].iConst ); ;} + break; + + case 43: + + { yyval.iNode = pParser->AddNodeConstlist ( yyvsp[0].fConst ); ;} + break; + + case 44: + + { pParser->AppendToConstlist ( yyval.iNode, yyvsp[0].iConst ); ;} + break; + + case 45: + + { pParser->AppendToConstlist ( yyval.iNode, yyvsp[0].fConst ); ;} + break; + + case 46: + + { yyval.iNode = pParser->AddNodeFunc ( yyvsp[-3].iFunc, yyvsp[-1].iNode ); if ( yyval.iNode<0 ) YYERROR; ;} + break; + + case 47: + + { yyval.iNode = pParser->AddNodeFunc ( yyvsp[-2].iFunc, -1 ); if ( yyval.iNode<0 ) YYERROR; ;} + break; + + case 48: + + { yyval.iNode = pParser->AddNodeUdf ( yyvsp[-3].iNode, yyvsp[-1].iNode ); if ( yyval.iNode<0 ) YYERROR; ;} + break; + + case 49: + + { yyval.iNode = pParser->AddNodeUdf ( yyvsp[-2].iNode, -1 ); if ( yyval.iNode<0 ) YYERROR; ;} + break; + + case 50: + + { + yyval.iNode = pParser->AddNodeFunc ( yyvsp[-5].iFunc, yyvsp[-3].iNode, yyvsp[-1].iNode ); + ;} + break; + + case 51: + + { + yyval.iNode = pParser->AddNodeFunc ( yyvsp[-5].iFunc, pParser->AddNodeID(), yyvsp[-1].iNode ); + ;} + break; + + case 52: + + { + yyval.iNode = pParser->AddNodeFunc ( yyvsp[-5].iFunc, pParser->AddNodeID(), yyvsp[-1].iNode ); + ;} + break; + + case 53: + + { + yyval.iNode = pParser->AddNodeAttr ( TOK_ATTR_MVA32, yyvsp[-3].iAttrLocator ); + yyval.iNode = pParser->AddNodeFunc ( yyvsp[-5].iFunc, yyval.iNode, yyvsp[-1].iNode ); + ;} + break; + + case 54: + + { + yyval.iNode = pParser->AddNodeAttr ( TOK_ATTR_MVA64, yyvsp[-3].iAttrLocator ); + yyval.iNode = pParser->AddNodeFunc ( yyvsp[-5].iFunc, yyval.iNode, yyvsp[-1].iNode ); + ;} + break; + + case 55: + + { + int iConstlist = pParser->ConstlistFromUservar ( yyvsp[-1].iNode ); + if ( iConstlist<0 ) + YYERROR; + yyval.iNode = pParser->AddNodeFunc ( yyvsp[-5].iFunc, yyvsp[-3].iNode, iConstlist ); + ;} + break; + + case 56: + + { yyval.iNode = pParser->AddNodeHookFunc ( yyvsp[-3].iNode, yyvsp[-1].iNode ); if ( yyval.iNode<0 ) YYERROR; ;} + break; + + + } + +/* Line 991 of yacc.c. */ + + + yyvsp -= yylen; + yyssp -= yylen; + + + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + char *yymsg; + int yyx, yycount; + + yycount = 0; + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + yysize += yystrlen (yytname[yyx]) + 15, yycount++; + yysize += yystrlen ("syntax error, unexpected ") + 1; + yysize += yystrlen (yytname[yytype]); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); + + if (yycount < 5) + { + yycount = 0; + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); + yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + const char *yyq = ! yycount ? ", expecting " : " or "; + yyp = yystpcpy (yyp, yyq); + yyp = yystpcpy (yyp, yytname[yyx]); + yycount++; + } + } + yyerror (pParser, yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror (pParser, "syntax error; also virtual memory exhausted"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror (pParser, "syntax error"); + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + /* Return failure if at end of input. */ + if (yychar == YYEOF) + { + /* Pop the error token. */ + YYPOPSTACK; + /* Pop the rest of the stack. */ + while (yyss < yyssp) + { + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + YYPOPSTACK; + } + YYABORT; + } + + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); + yychar = YYEMPTY; + + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab2; + + +/*----------------------------------------------------. +| yyerrlab1 -- error raised explicitly by an action. | +`----------------------------------------------------*/ +yyerrlab1: + + /* Suppress GCC warning that yyerrlab1 is unused when no action + invokes YYERROR. */ +#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) +// __attribute__ ((__unused__)) +#endif + + + goto yyerrlab2; + + +/*---------------------------------------------------------------. +| yyerrlab2 -- pop states until the error token can be shifted. | +`---------------------------------------------------------------*/ +yyerrlab2: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + yyvsp--; + yystate = *--yyssp; + + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + YYDPRINTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; + + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror (pParser, "parser stack overflow"); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} + + + + + diff --git a/coreseek/csft-4.1/src/yysphinxexpr.h b/coreseek/csft-4.1/src/yysphinxexpr.h new file mode 100755 index 0000000..1d44e28 --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxexpr.h @@ -0,0 +1,123 @@ +/* A Bison parser, made by GNU Bison 1.875. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOK_CONST_INT = 258, + TOK_CONST_FLOAT = 259, + TOK_CONST_STRING = 260, + TOK_ATTR_INT = 261, + TOK_ATTR_BITS = 262, + TOK_ATTR_FLOAT = 263, + TOK_ATTR_MVA32 = 264, + TOK_ATTR_MVA64 = 265, + TOK_ATTR_STRING = 266, + TOK_FUNC = 267, + TOK_FUNC_IN = 268, + TOK_USERVAR = 269, + TOK_UDF = 270, + TOK_HOOK_IDENT = 271, + TOK_HOOK_FUNC = 272, + TOK_ATID = 273, + TOK_ATWEIGHT = 274, + TOK_ID = 275, + TOK_WEIGHT = 276, + TOK_COUNT = 277, + TOK_DISTINCT = 278, + TOK_CONST_LIST = 279, + TOK_ATTR_SINT = 280, + TOK_OR = 281, + TOK_AND = 282, + TOK_NE = 283, + TOK_EQ = 284, + TOK_GTE = 285, + TOK_LTE = 286, + TOK_MOD = 287, + TOK_DIV = 288, + TOK_NOT = 289, + TOK_NEG = 290 + }; +#endif +#define TOK_CONST_INT 258 +#define TOK_CONST_FLOAT 259 +#define TOK_CONST_STRING 260 +#define TOK_ATTR_INT 261 +#define TOK_ATTR_BITS 262 +#define TOK_ATTR_FLOAT 263 +#define TOK_ATTR_MVA32 264 +#define TOK_ATTR_MVA64 265 +#define TOK_ATTR_STRING 266 +#define TOK_FUNC 267 +#define TOK_FUNC_IN 268 +#define TOK_USERVAR 269 +#define TOK_UDF 270 +#define TOK_HOOK_IDENT 271 +#define TOK_HOOK_FUNC 272 +#define TOK_ATID 273 +#define TOK_ATWEIGHT 274 +#define TOK_ID 275 +#define TOK_WEIGHT 276 +#define TOK_COUNT 277 +#define TOK_DISTINCT 278 +#define TOK_CONST_LIST 279 +#define TOK_ATTR_SINT 280 +#define TOK_OR 281 +#define TOK_AND 282 +#define TOK_NE 283 +#define TOK_EQ 284 +#define TOK_GTE 285 +#define TOK_LTE 286 +#define TOK_MOD 287 +#define TOK_DIV 288 +#define TOK_NOT 289 +#define TOK_NEG 290 + + + + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) + +typedef union YYSTYPE { + int64_t iConst; // constant value + float fConst; // constant value + uint64_t iAttrLocator; // attribute locator (rowitem for int/float; offset+size for bits) + int iFunc; // function id + int iNode; // node, or uservar, or udf index +} YYSTYPE; +/* Line 1204 of yacc.c. */ + +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + + + diff --git a/coreseek/csft-4.1/src/yysphinxql.c b/coreseek/csft-4.1/src/yysphinxql.c new file mode 100755 index 0000000..f1ad26e --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxql.c @@ -0,0 +1,2681 @@ +/* A Bison parser, made by GNU Bison 1.875. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Written by Richard Stallman by simplifying the original so called + ``semantic'' parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOK_IDENT = 258, + TOK_ATIDENT = 259, + TOK_CONST_INT = 260, + TOK_CONST_FLOAT = 261, + TOK_CONST_MVA = 262, + TOK_QUOTED_STRING = 263, + TOK_USERVAR = 264, + TOK_SYSVAR = 265, + TOK_AS = 266, + TOK_ASC = 267, + TOK_AVG = 268, + TOK_BEGIN = 269, + TOK_BETWEEN = 270, + TOK_BY = 271, + TOK_CALL = 272, + TOK_COLLATION = 273, + TOK_COMMIT = 274, + TOK_COUNT = 275, + TOK_CREATE = 276, + TOK_DELETE = 277, + TOK_DESC = 278, + TOK_DESCRIBE = 279, + TOK_DISTINCT = 280, + TOK_DIV = 281, + TOK_DROP = 282, + TOK_FALSE = 283, + TOK_FLOAT = 284, + TOK_FROM = 285, + TOK_FUNCTION = 286, + TOK_GLOBAL = 287, + TOK_GROUP = 288, + TOK_ID = 289, + TOK_IN = 290, + TOK_INSERT = 291, + TOK_INT = 292, + TOK_INTO = 293, + TOK_LIMIT = 294, + TOK_MATCH = 295, + TOK_MAX = 296, + TOK_META = 297, + TOK_MIN = 298, + TOK_MOD = 299, + TOK_NAMES = 300, + TOK_NULL = 301, + TOK_OPTION = 302, + TOK_ORDER = 303, + TOK_RAND = 304, + TOK_REPLACE = 305, + TOK_RETURNS = 306, + TOK_ROLLBACK = 307, + TOK_SELECT = 308, + TOK_SET = 309, + TOK_SESSION = 310, + TOK_SHOW = 311, + TOK_SONAME = 312, + TOK_START = 313, + TOK_STATUS = 314, + TOK_SUM = 315, + TOK_TABLES = 316, + TOK_TRANSACTION = 317, + TOK_TRUE = 318, + TOK_UPDATE = 319, + TOK_VALUES = 320, + TOK_VARIABLES = 321, + TOK_WARNINGS = 322, + TOK_WEIGHT = 323, + TOK_WHERE = 324, + TOK_WITHIN = 325, + TOK_OR = 326, + TOK_AND = 327, + TOK_NE = 328, + TOK_GTE = 329, + TOK_LTE = 330, + TOK_NOT = 331, + TOK_NEG = 332 + }; +#endif +#define TOK_IDENT 258 +#define TOK_ATIDENT 259 +#define TOK_CONST_INT 260 +#define TOK_CONST_FLOAT 261 +#define TOK_CONST_MVA 262 +#define TOK_QUOTED_STRING 263 +#define TOK_USERVAR 264 +#define TOK_SYSVAR 265 +#define TOK_AS 266 +#define TOK_ASC 267 +#define TOK_AVG 268 +#define TOK_BEGIN 269 +#define TOK_BETWEEN 270 +#define TOK_BY 271 +#define TOK_CALL 272 +#define TOK_COLLATION 273 +#define TOK_COMMIT 274 +#define TOK_COUNT 275 +#define TOK_CREATE 276 +#define TOK_DELETE 277 +#define TOK_DESC 278 +#define TOK_DESCRIBE 279 +#define TOK_DISTINCT 280 +#define TOK_DIV 281 +#define TOK_DROP 282 +#define TOK_FALSE 283 +#define TOK_FLOAT 284 +#define TOK_FROM 285 +#define TOK_FUNCTION 286 +#define TOK_GLOBAL 287 +#define TOK_GROUP 288 +#define TOK_ID 289 +#define TOK_IN 290 +#define TOK_INSERT 291 +#define TOK_INT 292 +#define TOK_INTO 293 +#define TOK_LIMIT 294 +#define TOK_MATCH 295 +#define TOK_MAX 296 +#define TOK_META 297 +#define TOK_MIN 298 +#define TOK_MOD 299 +#define TOK_NAMES 300 +#define TOK_NULL 301 +#define TOK_OPTION 302 +#define TOK_ORDER 303 +#define TOK_RAND 304 +#define TOK_REPLACE 305 +#define TOK_RETURNS 306 +#define TOK_ROLLBACK 307 +#define TOK_SELECT 308 +#define TOK_SET 309 +#define TOK_SESSION 310 +#define TOK_SHOW 311 +#define TOK_SONAME 312 +#define TOK_START 313 +#define TOK_STATUS 314 +#define TOK_SUM 315 +#define TOK_TABLES 316 +#define TOK_TRANSACTION 317 +#define TOK_TRUE 318 +#define TOK_UPDATE 319 +#define TOK_VALUES 320 +#define TOK_VARIABLES 321 +#define TOK_WARNINGS 322 +#define TOK_WEIGHT 323 +#define TOK_WHERE 324 +#define TOK_WITHIN 325 +#define TOK_OR 326 +#define TOK_AND 327 +#define TOK_NE 328 +#define TOK_GTE 329 +#define TOK_LTE 330 +#define TOK_NOT 331 +#define TOK_NEG 332 + + + + +/* Copy the first part of user declarations. */ + + +#if USE_WINDOWS +#pragma warning(push,1) +#pragma warning(disable:4702) // unreachable code +#endif + + +// some helpers +#include // for FLT_MAX + + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 1 +#endif + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 214 of yacc.c. */ + + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# else +# ifndef YYSTACK_USE_ALLOCA +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC malloc +# define YYSTACK_FREE free +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short yysigned_char; +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 79 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 657 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 92 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 75 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 213 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 401 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 332 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 85, 74, 2, + 90, 91, 83, 81, 89, 82, 2, 84, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 88, + 77, 75, 78, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 73, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 76, 79, + 80, 86, 87 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned short yyprhs[] = +{ + 0, 0, 3, 5, 7, 10, 12, 14, 16, 18, + 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, + 42, 44, 46, 57, 59, 63, 65, 68, 69, 71, + 74, 76, 81, 86, 91, 96, 101, 105, 111, 113, + 117, 118, 120, 123, 125, 129, 134, 138, 142, 148, + 155, 159, 164, 170, 174, 178, 182, 186, 190, 194, + 198, 202, 208, 212, 216, 218, 220, 225, 229, 231, + 233, 236, 238, 241, 243, 247, 248, 250, 254, 255, + 257, 263, 264, 266, 270, 276, 278, 282, 284, 287, + 290, 291, 293, 296, 301, 302, 304, 307, 309, 313, + 317, 321, 327, 334, 336, 340, 344, 346, 348, 350, + 352, 354, 356, 359, 362, 366, 370, 374, 378, 382, + 386, 390, 394, 398, 402, 406, 410, 414, 418, 422, + 426, 430, 434, 436, 441, 446, 450, 457, 464, 466, + 470, 472, 474, 477, 479, 481, 483, 485, 487, 489, + 491, 493, 498, 503, 508, 512, 517, 525, 531, 533, + 535, 537, 539, 541, 543, 545, 547, 549, 552, 559, + 561, 563, 564, 568, 570, 574, 576, 580, 584, 586, + 590, 592, 594, 596, 600, 608, 618, 625, 626, 629, + 631, 635, 639, 640, 642, 644, 646, 649, 651, 653, + 656, 665, 667, 671, 675, 681, 686, 690, 691, 693, + 696, 704, 706, 708 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const short yyrhs[] = +{ + 93, 0, -1, 94, -1, 95, -1, 95, 88, -1, + 140, -1, 148, -1, 134, -1, 135, -1, 138, -1, + 149, -1, 155, -1, 157, -1, 158, -1, 161, -1, + 163, -1, 164, -1, 166, -1, 96, -1, 95, 88, + 96, -1, 97, -1, 131, -1, 53, 98, 30, 102, + 103, 111, 113, 115, 119, 121, -1, 99, -1, 98, + 89, 99, -1, 83, -1, 101, 100, -1, -1, 3, + -1, 11, 3, -1, 127, -1, 13, 90, 127, 91, + -1, 41, 90, 127, 91, -1, 43, 90, 127, 91, + -1, 60, 90, 127, 91, -1, 20, 90, 83, 91, + -1, 68, 90, 91, -1, 20, 90, 25, 3, 91, + -1, 3, -1, 102, 89, 3, -1, -1, 104, -1, + 69, 105, -1, 106, -1, 105, 72, 106, -1, 40, + 90, 8, 91, -1, 107, 75, 108, -1, 107, 76, + 108, -1, 107, 35, 90, 110, 91, -1, 107, 86, + 35, 90, 110, 91, -1, 107, 35, 9, -1, 107, + 86, 35, 9, -1, 107, 15, 108, 72, 108, -1, + 107, 78, 108, -1, 107, 77, 108, -1, 107, 79, + 108, -1, 107, 80, 108, -1, 107, 75, 109, -1, + 107, 76, 109, -1, 107, 78, 109, -1, 107, 77, + 109, -1, 107, 15, 109, 72, 109, -1, 107, 79, + 109, -1, 107, 80, 109, -1, 3, -1, 4, -1, + 20, 90, 83, 91, -1, 68, 90, 91, -1, 34, + -1, 5, -1, 82, 5, -1, 6, -1, 82, 6, + -1, 108, -1, 110, 89, 108, -1, -1, 112, -1, + 33, 16, 107, -1, -1, 114, -1, 70, 33, 48, + 16, 117, -1, -1, 116, -1, 48, 16, 117, -1, + 48, 16, 49, 90, 91, -1, 118, -1, 117, 89, + 118, -1, 107, -1, 107, 12, -1, 107, 23, -1, + -1, 120, -1, 39, 5, -1, 39, 5, 89, 5, + -1, -1, 122, -1, 47, 123, -1, 124, -1, 123, + 89, 124, -1, 3, 75, 3, -1, 3, 75, 5, + -1, 3, 75, 90, 125, 91, -1, 3, 75, 3, + 90, 8, 91, -1, 126, -1, 125, 89, 126, -1, + 3, 75, 108, -1, 3, -1, 4, -1, 34, -1, + 5, -1, 6, -1, 9, -1, 82, 127, -1, 86, + 127, -1, 127, 81, 127, -1, 127, 82, 127, -1, + 127, 83, 127, -1, 127, 84, 127, -1, 127, 77, + 127, -1, 127, 78, 127, -1, 127, 74, 127, -1, + 127, 73, 127, -1, 127, 85, 127, -1, 127, 26, + 127, -1, 127, 44, 127, -1, 127, 80, 127, -1, + 127, 79, 127, -1, 127, 75, 127, -1, 127, 76, + 127, -1, 127, 72, 127, -1, 127, 71, 127, -1, + 90, 127, 91, -1, 128, -1, 3, 90, 129, 91, + -1, 35, 90, 129, 91, -1, 3, 90, 91, -1, + 43, 90, 127, 89, 127, 91, -1, 41, 90, 127, + 89, 127, 91, -1, 130, -1, 129, 89, 130, -1, + 127, -1, 8, -1, 56, 132, -1, 67, -1, 59, + -1, 42, -1, 3, -1, 46, -1, 8, -1, 5, + -1, 6, -1, 54, 3, 75, 137, -1, 54, 3, + 75, 136, -1, 54, 3, 75, 46, -1, 54, 45, + 133, -1, 54, 10, 75, 133, -1, 54, 32, 9, + 75, 90, 110, 91, -1, 54, 32, 3, 75, 136, + -1, 3, -1, 8, -1, 63, -1, 28, -1, 108, + -1, 19, -1, 52, -1, 139, -1, 14, -1, 58, + 62, -1, 141, 38, 3, 142, 65, 144, -1, 36, + -1, 50, -1, -1, 90, 143, 91, -1, 107, -1, + 143, 89, 107, -1, 145, -1, 144, 89, 145, -1, + 90, 146, 91, -1, 147, -1, 146, 89, 147, -1, + 108, -1, 109, -1, 8, -1, 90, 110, 91, -1, + 22, 30, 3, 69, 34, 75, 108, -1, 22, 30, + 3, 69, 34, 35, 90, 110, 91, -1, 17, 3, + 90, 146, 150, 91, -1, -1, 89, 151, -1, 152, + -1, 151, 89, 152, -1, 147, 153, 154, -1, -1, + 11, -1, 3, -1, 39, -1, 156, 3, -1, 24, + -1, 23, -1, 56, 61, -1, 64, 3, 54, 159, + 69, 34, 75, 108, -1, 160, -1, 159, 89, 160, + -1, 3, 75, 108, -1, 3, 75, 90, 110, 91, + -1, 3, 75, 90, 91, -1, 56, 162, 66, -1, + -1, 55, -1, 56, 18, -1, 21, 31, 3, 51, + 165, 57, 8, -1, 37, -1, 29, -1, 27, 31, + 3, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned short yyrline[] = +{ + 0, 106, 106, 107, 108, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 130, 131, + 135, 136, 140, 155, 156, 160, 161, 164, 166, 167, + 171, 172, 173, 174, 175, 176, 177, 178, 182, 183, + 186, 188, 192, 196, 197, 201, 206, 213, 221, 229, + 238, 243, 248, 253, 258, 263, 268, 273, 274, 275, + 276, 281, 286, 291, 299, 300, 305, 311, 317, 326, + 327, 331, 332, 336, 342, 348, 350, 354, 361, 363, + 367, 373, 375, 379, 383, 390, 391, 395, 396, 397, + 400, 402, 406, 411, 418, 420, 424, 428, 429, 433, + 438, 443, 449, 457, 462, 469, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 509, 510, 511, 512, 513, 517, 518, + 522, 523, 529, 533, 534, 535, 541, 542, 543, 544, + 545, 549, 554, 559, 564, 565, 569, 574, 582, 583, + 587, 588, 589, 603, 604, 605, 609, 610, 616, 624, + 625, 628, 630, 634, 635, 639, 640, 644, 648, 649, + 653, 654, 655, 656, 662, 668, 680, 687, 689, 693, + 698, 702, 709, 711, 715, 716, 722, 730, 731, 737, + 743, 754, 755, 759, 768, 791, 805, 808, 809, 813, + 819, 830, 831, 835 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "TOK_IDENT", "TOK_ATIDENT", + "TOK_CONST_INT", "TOK_CONST_FLOAT", "TOK_CONST_MVA", + "TOK_QUOTED_STRING", "TOK_USERVAR", "TOK_SYSVAR", "TOK_AS", "TOK_ASC", + "TOK_AVG", "TOK_BEGIN", "TOK_BETWEEN", "TOK_BY", "TOK_CALL", + "TOK_COLLATION", "TOK_COMMIT", "TOK_COUNT", "TOK_CREATE", "TOK_DELETE", + "TOK_DESC", "TOK_DESCRIBE", "TOK_DISTINCT", "TOK_DIV", "TOK_DROP", + "TOK_FALSE", "TOK_FLOAT", "TOK_FROM", "TOK_FUNCTION", "TOK_GLOBAL", + "TOK_GROUP", "TOK_ID", "TOK_IN", "TOK_INSERT", "TOK_INT", "TOK_INTO", + "TOK_LIMIT", "TOK_MATCH", "TOK_MAX", "TOK_META", "TOK_MIN", "TOK_MOD", + "TOK_NAMES", "TOK_NULL", "TOK_OPTION", "TOK_ORDER", "TOK_RAND", + "TOK_REPLACE", "TOK_RETURNS", "TOK_ROLLBACK", "TOK_SELECT", "TOK_SET", + "TOK_SESSION", "TOK_SHOW", "TOK_SONAME", "TOK_START", "TOK_STATUS", + "TOK_SUM", "TOK_TABLES", "TOK_TRANSACTION", "TOK_TRUE", "TOK_UPDATE", + "TOK_VALUES", "TOK_VARIABLES", "TOK_WARNINGS", "TOK_WEIGHT", + "TOK_WHERE", "TOK_WITHIN", "TOK_OR", "TOK_AND", "'|'", "'&'", "'='", + "TOK_NE", "'<'", "'>'", "TOK_GTE", "TOK_LTE", "'+'", "'-'", "'*'", + "'/'", "'%'", "TOK_NOT", "TOK_NEG", "';'", "','", "'('", "')'", + "$accept", "request", "statement", "multi_stmt_list", "multi_stmt", + "select_from", "select_items_list", "select_item", "opt_alias", + "select_expr", "ident_list", "opt_where_clause", "where_clause", + "where_expr", "where_item", "expr_ident", "const_int", "const_float", + "const_list", "opt_group_clause", "group_clause", + "opt_group_order_clause", "group_order_clause", "opt_order_clause", + "order_clause", "order_items_list", "order_item", "opt_limit_clause", + "limit_clause", "opt_option_clause", "option_clause", "option_list", + "option_item", "named_const_list", "named_const", "expr", "function", + "arglist", "arg", "show_clause", "show_variable", "set_value", + "set_clause", "set_global_clause", "set_string_value", "boolean_value", + "transact_op", "start_transaction", "insert_into", "insert_or_replace", + "opt_column_list", "column_list", "insert_rows_list", "insert_row", + "insert_vals_list", "insert_val", "delete_from", "call_proc", + "opt_call_opts_list", "call_opts_list", "call_opt", "opt_as", + "call_opt_name", "describe", "describe_tok", "show_tables", "update", + "update_items_list", "update_item", "show_variables", "opt_session", + "show_collation", "create_function", "udf_type", "drop_function", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 124, 38, 61, 328, 60, 62, 329, + 330, 43, 45, 42, 47, 37, 331, 332, 59, 44, + 40, 41 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned char yyr1[] = +{ + 0, 92, 93, 93, 93, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, + 96, 96, 97, 98, 98, 99, 99, 100, 100, 100, + 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, + 103, 103, 104, 105, 105, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 107, 107, 107, 107, 107, 108, + 108, 109, 109, 110, 110, 111, 111, 112, 113, 113, + 114, 115, 115, 116, 116, 117, 117, 118, 118, 118, + 119, 119, 120, 120, 121, 121, 122, 123, 123, 124, + 124, 124, 124, 125, 125, 126, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 128, 128, 128, 128, 128, 129, 129, + 130, 130, 131, 132, 132, 132, 133, 133, 133, 133, + 133, 134, 134, 134, 134, 134, 135, 135, 136, 136, + 137, 137, 137, 138, 138, 138, 139, 139, 140, 141, + 141, 142, 142, 143, 143, 144, 144, 145, 146, 146, + 147, 147, 147, 147, 148, 148, 149, 150, 150, 151, + 151, 152, 153, 153, 154, 154, 155, 156, 156, 157, + 158, 159, 159, 160, 160, 160, 161, 162, 162, 163, + 164, 165, 165, 166 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char yyr2[] = +{ + 0, 2, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 1, 10, 1, 3, 1, 2, 0, 1, 2, + 1, 4, 4, 4, 4, 4, 3, 5, 1, 3, + 0, 1, 2, 1, 3, 4, 3, 3, 5, 6, + 3, 4, 5, 3, 3, 3, 3, 3, 3, 3, + 3, 5, 3, 3, 1, 1, 4, 3, 1, 1, + 2, 1, 2, 1, 3, 0, 1, 3, 0, 1, + 5, 0, 1, 3, 5, 1, 3, 1, 2, 2, + 0, 1, 2, 4, 0, 1, 2, 1, 3, 3, + 3, 5, 6, 1, 3, 3, 1, 1, 1, 1, + 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 1, 4, 4, 3, 6, 6, 1, 3, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 3, 4, 7, 5, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 6, 1, + 1, 0, 3, 1, 3, 1, 3, 3, 1, 3, + 1, 1, 1, 3, 7, 9, 6, 0, 2, 1, + 3, 3, 0, 1, 1, 1, 2, 1, 1, 2, + 8, 1, 3, 3, 5, 4, 3, 0, 1, 2, + 7, 1, 1, 3 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const unsigned char yydefact[] = +{ + 0, 166, 0, 163, 0, 0, 198, 197, 0, 169, + 170, 164, 0, 0, 207, 0, 0, 0, 2, 3, + 18, 20, 21, 7, 8, 9, 165, 5, 0, 6, + 10, 11, 0, 12, 13, 14, 15, 16, 17, 0, + 0, 0, 0, 106, 107, 109, 110, 111, 0, 0, + 108, 0, 0, 0, 0, 0, 0, 25, 0, 0, + 0, 23, 27, 30, 132, 0, 0, 0, 0, 209, + 145, 208, 144, 199, 143, 142, 0, 167, 0, 1, + 4, 0, 196, 0, 0, 0, 213, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 112, 113, 0, + 0, 0, 28, 0, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 146, 149, 150, 148, + 147, 154, 206, 0, 0, 19, 171, 69, 71, 182, + 0, 0, 180, 181, 187, 178, 0, 0, 141, 135, + 140, 0, 138, 0, 0, 0, 0, 0, 0, 0, + 36, 0, 0, 131, 38, 40, 24, 29, 123, 124, + 130, 129, 121, 120, 127, 128, 118, 119, 126, 125, + 114, 115, 116, 117, 122, 158, 159, 161, 153, 160, + 0, 162, 152, 151, 155, 0, 0, 0, 0, 201, + 0, 0, 70, 72, 73, 0, 0, 0, 212, 211, + 0, 0, 0, 133, 31, 0, 35, 134, 0, 32, + 0, 33, 34, 0, 0, 0, 0, 75, 41, 157, + 0, 0, 0, 0, 64, 65, 0, 68, 0, 173, + 0, 0, 0, 183, 179, 188, 189, 186, 0, 0, + 0, 139, 37, 0, 0, 0, 42, 43, 0, 39, + 0, 78, 76, 0, 0, 203, 0, 202, 0, 0, + 0, 172, 0, 168, 175, 74, 193, 0, 0, 210, + 0, 184, 137, 136, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 81, 79, 156, + 205, 0, 0, 0, 67, 174, 0, 0, 194, 195, + 191, 192, 190, 0, 0, 44, 0, 0, 50, 0, + 46, 57, 47, 58, 54, 60, 53, 59, 55, 62, + 56, 63, 0, 77, 0, 0, 90, 82, 204, 200, + 66, 0, 177, 176, 185, 45, 0, 0, 0, 51, + 0, 0, 0, 0, 94, 91, 179, 52, 0, 61, + 48, 0, 0, 0, 87, 83, 85, 92, 0, 22, + 95, 49, 80, 0, 88, 89, 0, 0, 0, 96, + 97, 84, 86, 93, 0, 0, 99, 100, 0, 98, + 0, 0, 0, 103, 0, 0, 0, 101, 102, 105, + 104 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const short yydefgoto[] = +{ + -1, 17, 18, 19, 20, 21, 60, 61, 104, 62, + 165, 227, 228, 256, 257, 364, 204, 143, 205, 261, + 262, 297, 298, 336, 337, 365, 366, 354, 355, 369, + 370, 379, 380, 392, 393, 150, 64, 151, 152, 22, + 75, 131, 23, 24, 192, 193, 25, 26, 27, 28, + 201, 240, 273, 274, 144, 145, 29, 30, 207, 245, + 246, 277, 310, 31, 32, 33, 34, 198, 199, 35, + 76, 36, 37, 210, 38 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -270 +static const short yypact[] = +{ + 593, -270, 15, -270, 24, 52, -270, -270, 97, -270, + -270, -270, 225, 563, 569, -15, 118, 131, -270, 53, + -270, -270, -270, -270, -270, -270, -270, -270, 94, -270, + -270, -270, 144, -270, -270, -270, -270, -270, -270, 92, + 168, 198, 201, 122, -270, -270, -270, -270, 128, 133, + -270, 136, 137, 143, 151, 152, 245, -270, 245, 245, + 44, -270, 33, 457, -270, 177, 181, 28, 284, -270, + -270, -270, -270, -270, -270, -270, 195, -270, 208, -270, + 73, 261, -270, 1, 223, 206, -270, 134, 245, 51, + 157, 245, 245, 245, 186, 191, 192, -270, -270, 288, + 275, 225, -270, 281, -270, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 194, 284, 219, 227, -270, -270, -270, -270, + -270, -270, -270, 300, -17, -270, 214, -270, -270, -270, + 27, 10, -270, -270, 216, -270, 16, 276, -270, -270, + 457, 55, -270, 331, 310, 234, 61, -14, 265, 352, + -270, 245, 245, -270, -270, -43, -270, -270, -270, -270, + 308, 479, 500, 521, 239, 239, 188, 188, 188, 188, + 101, 101, -270, -270, -270, -270, -270, -270, -270, -270, + 321, -270, -270, -270, -270, 117, 238, 254, -41, -270, + 233, 268, -270, -270, -270, 62, 1, 260, -270, -270, + 296, -19, 157, -270, -270, 264, -270, -270, 245, -270, + 245, -270, -270, 415, 436, 153, 355, 341, -270, -270, + 10, 6, 342, 300, -270, -270, 287, -270, 304, -270, + 81, 305, 10, -270, 119, 309, -270, -270, 389, 311, + 10, -270, -270, 373, 394, 328, 347, -270, 220, -270, + 384, 351, -270, 85, -2, -270, 364, -270, 357, 369, + 233, -270, 1, 353, -270, -270, -270, 40, 1, -270, + 10, -270, -270, -270, 453, 153, 8, 25, 8, 8, + 8, 8, 8, 8, 428, 233, 448, 434, -270, -270, + -270, 89, 10, 393, -270, -270, 90, 305, -270, -270, + -270, 491, -270, 99, 412, -270, 450, 452, -270, 10, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, 26, -270, 458, 511, 504, -270, -270, -270, + -270, 1, -270, -270, -270, -270, 10, 35, 105, -270, + 10, 529, 115, 541, 501, -270, -270, -270, 543, -270, + -270, 126, 233, 460, 17, 462, -270, 478, 565, -270, + -270, -270, 462, 480, -270, -270, 233, 564, 495, 483, + -270, -270, -270, -270, 5, 565, 496, -270, 585, -270, + 581, 515, 155, -270, 502, 10, 585, -270, -270, -270, + -270 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const short yypgoto[] = +{ + -270, -270, -270, -270, 512, -270, -270, 490, -270, -270, + -270, -270, -270, -270, 324, -198, -83, -269, -226, -270, + -270, -270, -270, -270, -270, 232, 237, -270, -270, -270, + -270, -270, 236, -270, 222, -7, -270, 532, 407, -270, + -270, 503, -270, -270, 430, -270, -270, -270, -270, -270, + -270, -270, -270, 316, 359, -205, -270, -270, -270, -270, + 349, -270, -270, -270, -270, -270, -270, -270, 399, -270, + -270, -270, -270, -270, -270 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -193 +static const short yytable[] = +{ + 142, 244, 239, 137, 263, 63, 137, 138, 386, 139, + 387, 137, 105, 137, 138, 137, 249, 317, 39, 321, + 323, 325, 327, 329, 331, 70, 225, 258, 232, 374, + 106, 124, 202, 203, 318, 349, 102, 125, 301, 191, + 375, 138, 72, 308, 103, 208, 226, 77, 233, 97, + 74, 98, 99, 209, 313, 40, 250, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 305, 311, 100, 218, 154, 219, 359, 309, + 190, 153, 41, 140, 157, 158, 159, 258, 190, 300, + 140, 141, 190, 348, 63, 388, 264, 333, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 319, 350, 358, 234, 235, + 185, 78, -192, 142, 361, 186, 12, 105, 42, 134, + 276, 79, 81, 101, 155, 236, 356, 43, 44, 45, + 46, 80, 148, 47, 212, 106, 213, 82, 265, 237, + 212, 242, 217, 243, 223, 224, 234, 235, -192, 275, + 43, 44, 45, 46, 363, 148, 47, 281, 50, 51, + 270, 84, 271, 236, 242, 95, 299, 96, 242, 341, + 338, 342, 83, 238, 119, 120, 121, 237, 242, 142, + 344, 50, 51, 255, 242, 142, 360, 185, 95, 137, + 96, 85, 186, 316, 86, 320, 322, 324, 326, 328, + 330, 253, 87, 254, 105, 242, 56, 371, 88, 339, + 58, 238, 187, 89, 59, 149, 90, 91, 43, 44, + 45, 46, 106, 92, 47, 286, 234, 235, 48, 56, + 188, 93, 94, 58, 396, 49, 397, 59, 43, 44, + 45, 46, 122, 236, 47, 287, 123, 189, 142, 50, + 51, 132, 133, 357, 136, 105, 52, 237, 53, 117, + 118, 119, 120, 121, 146, 147, 190, 160, 164, 50, + 51, 161, 162, 106, 167, 54, 95, 126, 96, 127, + 128, 105, 129, 55, 195, 288, 289, 290, 291, 292, + 293, 238, 196, 197, 200, 206, 294, 56, 57, 106, + 211, 58, 399, 215, 105, 59, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 216, 202, 56, 230, 231, + 130, 58, 106, 241, 105, 59, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 247, 106, 248, 220, 252, 221, 105, 259, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 260, 106, 266, 268, 105, 163, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 269, 272, 106, 279, 278, 105, + 295, 280, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 106, 284, 285, + 105, 296, 214, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 106, 302, + 303, 105, 307, 222, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 106, + 304, 314, 105, 332, 282, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 106, 334, 335, 105, 340, 283, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 106, 276, 345, 218, 105, 351, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 346, 106, 347, 220, 105, 352, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 353, 106, 362, 367, 105, 368, 203, + 373, 376, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 106, 65, 377, 378, 383, + 384, 381, 385, 66, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 390, 69, 391, 394, + 395, 166, 135, 398, 372, 67, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 1, 68, 315, + 2, 70, 3, 382, 4, 5, 6, 7, 400, 251, + 8, 389, 156, 343, 71, 229, 194, 312, 72, 9, + 73, 306, 267, 0, 0, 0, 74, 0, 0, 0, + 0, 0, 0, 10, 0, 11, 12, 13, 0, 14, + 0, 15, 0, 0, 0, 0, 0, 16 +}; + +static const short yycheck[] = +{ + 83, 206, 200, 5, 230, 12, 5, 6, 3, 8, + 5, 5, 26, 5, 6, 5, 35, 286, 3, 288, + 289, 290, 291, 292, 293, 42, 69, 225, 69, 12, + 44, 3, 5, 6, 9, 9, 3, 9, 264, 122, + 23, 6, 59, 3, 11, 29, 89, 62, 89, 56, + 67, 58, 59, 37, 280, 31, 75, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 270, 278, 30, 89, 25, 91, 347, 39, + 82, 88, 30, 82, 91, 92, 93, 285, 82, 91, + 82, 90, 82, 319, 101, 90, 90, 295, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 90, 90, 82, 3, 4, + 3, 3, 3, 206, 350, 8, 53, 26, 31, 56, + 11, 0, 38, 89, 83, 20, 341, 3, 4, 5, + 6, 88, 8, 9, 89, 44, 91, 3, 231, 34, + 89, 89, 91, 91, 161, 162, 3, 4, 39, 242, + 3, 4, 5, 6, 49, 8, 9, 250, 34, 35, + 89, 3, 91, 20, 89, 41, 91, 43, 89, 89, + 91, 91, 90, 68, 83, 84, 85, 34, 89, 272, + 91, 34, 35, 40, 89, 278, 91, 3, 41, 5, + 43, 3, 8, 286, 3, 288, 289, 290, 291, 292, + 293, 218, 90, 220, 26, 89, 82, 91, 90, 302, + 86, 68, 28, 90, 90, 91, 90, 90, 3, 4, + 5, 6, 44, 90, 9, 15, 3, 4, 13, 82, + 46, 90, 90, 86, 89, 20, 91, 90, 3, 4, + 5, 6, 75, 20, 9, 35, 75, 63, 341, 34, + 35, 66, 54, 346, 3, 26, 41, 34, 43, 81, + 82, 83, 84, 85, 51, 69, 82, 91, 3, 34, + 35, 90, 90, 44, 3, 60, 41, 3, 43, 5, + 6, 26, 8, 68, 75, 75, 76, 77, 78, 79, + 80, 68, 75, 3, 90, 89, 86, 82, 83, 44, + 34, 86, 395, 3, 26, 90, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 91, 5, 82, 90, 75, + 46, 86, 44, 65, 26, 90, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 91, 44, 57, 89, 91, 91, 26, 3, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 33, 44, 34, 90, 26, 91, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 90, 90, 44, 8, 89, 26, + 16, 90, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 44, 90, 72, + 26, 70, 91, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 44, 75, + 83, 26, 89, 91, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 44, + 91, 8, 26, 35, 91, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 44, 33, 48, 26, 91, 91, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 44, 11, 91, 89, 26, 48, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 72, 44, 72, 89, 26, 16, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 39, 44, 16, 5, 26, 47, 6, + 90, 89, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 44, 3, 89, 3, 5, + 75, 91, 89, 10, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 90, 18, 3, 8, + 75, 101, 80, 91, 362, 32, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 14, 45, 285, + 17, 42, 19, 376, 21, 22, 23, 24, 396, 212, + 27, 385, 90, 307, 55, 195, 123, 278, 59, 36, + 61, 272, 233, -1, -1, -1, 67, -1, -1, -1, + -1, -1, -1, 50, -1, 52, 53, 54, -1, 56, + -1, 58, -1, -1, -1, -1, -1, 64 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned char yystos[] = +{ + 0, 14, 17, 19, 21, 22, 23, 24, 27, 36, + 50, 52, 53, 54, 56, 58, 64, 93, 94, 95, + 96, 97, 131, 134, 135, 138, 139, 140, 141, 148, + 149, 155, 156, 157, 158, 161, 163, 164, 166, 3, + 31, 30, 31, 3, 4, 5, 6, 9, 13, 20, + 34, 35, 41, 43, 60, 68, 82, 83, 86, 90, + 98, 99, 101, 127, 128, 3, 10, 32, 45, 18, + 42, 55, 59, 61, 67, 132, 162, 62, 3, 0, + 88, 38, 3, 90, 3, 3, 3, 90, 90, 90, + 90, 90, 90, 90, 90, 41, 43, 127, 127, 127, + 30, 89, 3, 11, 100, 26, 44, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 75, 75, 3, 9, 3, 5, 6, 8, + 46, 133, 66, 54, 56, 96, 3, 5, 6, 8, + 82, 90, 108, 109, 146, 147, 51, 69, 8, 91, + 127, 129, 130, 127, 25, 83, 129, 127, 127, 127, + 91, 90, 90, 91, 3, 102, 99, 3, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 3, 8, 28, 46, 63, + 82, 108, 136, 137, 133, 75, 75, 3, 159, 160, + 90, 142, 5, 6, 108, 110, 89, 150, 29, 37, + 165, 34, 89, 91, 91, 3, 91, 91, 89, 91, + 89, 91, 91, 127, 127, 69, 89, 103, 104, 136, + 90, 75, 69, 89, 3, 4, 20, 34, 68, 107, + 143, 65, 89, 91, 147, 151, 152, 91, 57, 35, + 75, 130, 91, 127, 127, 40, 105, 106, 107, 3, + 33, 111, 112, 110, 90, 108, 34, 160, 90, 90, + 89, 91, 90, 144, 145, 108, 11, 153, 89, 8, + 90, 108, 91, 91, 90, 72, 15, 35, 75, 76, + 77, 78, 79, 80, 86, 16, 70, 113, 114, 91, + 91, 110, 75, 83, 91, 107, 146, 89, 3, 39, + 154, 147, 152, 110, 8, 106, 108, 109, 9, 90, + 108, 109, 108, 109, 108, 109, 108, 109, 108, 109, + 108, 109, 35, 107, 33, 48, 115, 116, 91, 108, + 91, 89, 91, 145, 91, 91, 72, 72, 110, 9, + 90, 48, 16, 39, 119, 120, 147, 108, 82, 109, + 91, 110, 16, 49, 107, 117, 118, 5, 47, 121, + 122, 91, 117, 90, 12, 23, 89, 89, 3, 123, + 124, 91, 118, 5, 75, 89, 3, 5, 90, 124, + 90, 3, 125, 126, 8, 75, 89, 91, 91, 108, + 126 +}; + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (pParser, "syntax error: cannot back up");\ + YYERROR; \ + } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + Current.first_line = Rhs[1].first_line; \ + Current.first_column = Rhs[1].first_column; \ + Current.last_line = Rhs[N].last_line; \ + Current.last_column = Rhs[N].last_column; +#endif + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval, pParser) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (cinluded). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short *bottom, short *top) +#else +static void +yy_stack_print (bottom, top) + short *bottom; + short *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned int yylineno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylineno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#if YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + register char *yyd = yydest; + register const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +#endif /* !YYERROR_VERBOSE */ + + + +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} + +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yytype, yyvaluep) + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse ( SqlParser_c * pParser ); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse ( SqlParser_c * pParser ) +#else +int +yyparse (pParser) + SqlParser_c * pParser ; +#endif +#endif +{ + /* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + register int yystate; + register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; + register short *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; + + + +#define YYPOPSTACK (yyvsp--, yyssp--) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyoverflowlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyoverflowlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + short *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: + + { pParser->PushQuery(); ;} + break; + + case 18: + + { pParser->PushQuery(); ;} + break; + + case 19: + + { pParser->PushQuery(); ;} + break; + + case 22: + + { + pParser->m_pStmt->m_eStmt = STMT_SELECT; + pParser->m_pQuery->m_sIndexes.SetBinary ( pParser->m_pBuf+yyvsp[-6].m_iStart, yyvsp[-6].m_iEnd-yyvsp[-6].m_iStart ); + ;} + break; + + case 25: + + { pParser->AddItem ( &yyvsp[0] ); ;} + break; + + case 28: + + { pParser->AliasLastItem ( &yyvsp[0] ); ;} + break; + + case 29: + + { pParser->AliasLastItem ( &yyvsp[0] ); ;} + break; + + case 30: + + { pParser->AddItem ( &yyvsp[0] ); ;} + break; + + case 31: + + { pParser->AddItem ( &yyvsp[-1], SPH_AGGR_AVG, &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 32: + + { pParser->AddItem ( &yyvsp[-1], SPH_AGGR_MAX, &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 33: + + { pParser->AddItem ( &yyvsp[-1], SPH_AGGR_MIN, &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 34: + + { pParser->AddItem ( &yyvsp[-1], SPH_AGGR_SUM, &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 35: + + { if ( !pParser->AddItem ( "count(*)", &yyvsp[-3], &yyvsp[0] ) ) YYERROR; ;} + break; + + case 36: + + { if ( !pParser->AddItem ( "weight()", &yyvsp[-2], &yyvsp[0] ) ) YYERROR; ;} + break; + + case 37: + + { if ( !pParser->AddDistinct ( &yyvsp[-1], &yyvsp[-4], &yyvsp[0] ) ) YYERROR; ;} + break; + + case 39: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 45: + + { + if ( !pParser->SetMatch(yyvsp[-1]) ) + YYERROR; + ;} + break; + + case 46: + + { + CSphFilterSettings * pFilter = pParser->AddValuesFilter ( yyvsp[-2] ); + if ( !pFilter ) + YYERROR; + pFilter->m_dValues.Add ( yyvsp[0].m_iValue ); + ;} + break; + + case 47: + + { + CSphFilterSettings * pFilter = pParser->AddValuesFilter ( yyvsp[-2] ); + if ( !pFilter ) + YYERROR; + pFilter->m_dValues.Add ( yyvsp[0].m_iValue ); + pFilter->m_bExclude = true; + ;} + break; + + case 48: + + { + CSphFilterSettings * pFilter = pParser->AddValuesFilter ( yyvsp[-4] ); + if ( !pFilter ) + YYERROR; + pFilter->m_dValues = *yyvsp[-1].m_pValues.Ptr(); + pFilter->m_dValues.Sort(); + ;} + break; + + case 49: + + { + CSphFilterSettings * pFilter = pParser->AddValuesFilter ( yyvsp[-5] ); + if ( !pFilter ) + YYERROR; + pFilter->m_dValues = *yyvsp[-1].m_pValues.Ptr(); + pFilter->m_bExclude = true; + pFilter->m_dValues.Sort(); + ;} + break; + + case 50: + + { + if ( !pParser->AddUservarFilter ( yyvsp[-2].m_sValue, yyvsp[0].m_sValue, false ) ) + YYERROR; + ;} + break; + + case 51: + + { + if ( !pParser->AddUservarFilter ( yyvsp[-3].m_sValue, yyvsp[-1].m_sValue, true ) ) + YYERROR; + ;} + break; + + case 52: + + { + if ( !pParser->AddUintRangeFilter ( yyvsp[-4].m_sValue, yyvsp[-2].m_iValue, yyvsp[0].m_iValue ) ) + YYERROR; + ;} + break; + + case 53: + + { + if ( !pParser->AddUintRangeFilter ( yyvsp[-2].m_sValue, yyvsp[0].m_iValue+1, UINT_MAX ) ) + YYERROR; + ;} + break; + + case 54: + + { + if ( !pParser->AddUintRangeFilter ( yyvsp[-2].m_sValue, 0, yyvsp[0].m_iValue-1 ) ) + YYERROR; + ;} + break; + + case 55: + + { + if ( !pParser->AddUintRangeFilter ( yyvsp[-2].m_sValue, yyvsp[0].m_iValue, UINT_MAX ) ) + YYERROR; + ;} + break; + + case 56: + + { + if ( !pParser->AddUintRangeFilter ( yyvsp[-2].m_sValue, 0, yyvsp[0].m_iValue ) ) + YYERROR; + ;} + break; + + case 60: + + { + yyerror ( pParser, "only >=, <=, and BETWEEN floating-point filter types are supported in this version" ); + YYERROR; + ;} + break; + + case 61: + + { + if ( !pParser->AddFloatRangeFilter ( yyvsp[-4].m_sValue, yyvsp[-2].m_fValue, yyvsp[0].m_fValue ) ) + YYERROR; + ;} + break; + + case 62: + + { + if ( !pParser->AddFloatRangeFilter ( yyvsp[-2].m_sValue, yyvsp[0].m_fValue, FLT_MAX ) ) + YYERROR; + ;} + break; + + case 63: + + { + if ( !pParser->AddFloatRangeFilter ( yyvsp[-2].m_sValue, -FLT_MAX, yyvsp[0].m_fValue ) ) + YYERROR; + ;} + break; + + case 65: + + { + if ( !pParser->SetOldSyntax() ) + YYERROR; + ;} + break; + + case 66: + + { + yyval.m_sValue = "@count"; + if ( !pParser->SetNewSyntax() ) + YYERROR; + ;} + break; + + case 67: + + { + yyval.m_sValue = "@weight"; + if ( !pParser->SetNewSyntax() ) + YYERROR; + ;} + break; + + case 68: + + { + yyval.m_sValue = "@id"; + if ( !pParser->SetNewSyntax() ) + YYERROR; + ;} + break; + + case 69: + + { yyval.m_iInstype = TOK_CONST_INT; yyval.m_iValue = yyvsp[0].m_iValue; ;} + break; + + case 70: + + { yyval.m_iInstype = TOK_CONST_INT; yyval.m_iValue = -yyvsp[0].m_iValue; ;} + break; + + case 71: + + { yyval.m_iInstype = TOK_CONST_FLOAT; yyval.m_fValue = yyvsp[0].m_fValue; ;} + break; + + case 72: + + { yyval.m_iInstype = TOK_CONST_FLOAT; yyval.m_fValue = -yyvsp[0].m_fValue; ;} + break; + + case 73: + + { + assert ( !yyval.m_pValues.Ptr() ); + yyval.m_pValues = new RefcountedVector_c (); + yyval.m_pValues->Add ( yyvsp[0].m_iValue ); + ;} + break; + + case 74: + + { + yyval.m_pValues->Add ( yyvsp[0].m_iValue ); + ;} + break; + + case 77: + + { + pParser->m_pQuery->m_eGroupFunc = SPH_GROUPBY_ATTR; + pParser->m_pQuery->m_sGroupBy = yyvsp[0].m_sValue; + ;} + break; + + case 80: + + { + pParser->m_pQuery->m_sSortBy.SetBinary ( pParser->m_pBuf+yyvsp[0].m_iStart, yyvsp[0].m_iEnd-yyvsp[0].m_iStart ); + ;} + break; + + case 83: + + { + pParser->m_pQuery->m_sOrderBy.SetBinary ( pParser->m_pBuf+yyvsp[0].m_iStart, yyvsp[0].m_iEnd-yyvsp[0].m_iStart ); + ;} + break; + + case 84: + + { + pParser->m_pQuery->m_sOrderBy = "@random"; + ;} + break; + + case 86: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 88: + + { yyval = yyvsp[-1]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 89: + + { yyval = yyvsp[-1]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 92: + + { + pParser->m_pQuery->m_iOffset = 0; + pParser->m_pQuery->m_iLimit = yyvsp[0].m_iValue; + ;} + break; + + case 93: + + { + pParser->m_pQuery->m_iOffset = yyvsp[-2].m_iValue; + pParser->m_pQuery->m_iLimit = yyvsp[0].m_iValue; + ;} + break; + + case 99: + + { + if ( !pParser->AddOption ( yyvsp[-2], yyvsp[0] ) ) + YYERROR; + ;} + break; + + case 100: + + { + if ( !pParser->AddOption ( yyvsp[-2], yyvsp[0] ) ) + YYERROR; + ;} + break; + + case 101: + + { + if ( !pParser->AddOption ( yyvsp[-4], pParser->GetNamedVec ( yyvsp[-1].m_iValue ) ) ) + YYERROR; + pParser->FreeNamedVec ( yyvsp[-1].m_iValue ); + ;} + break; + + case 102: + + { + if ( !pParser->AddOption ( yyvsp[-5], yyvsp[-2], yyvsp[-1].m_sValue ) ) + YYERROR; + ;} + break; + + case 103: + + { + yyval.m_iValue = pParser->AllocNamedVec (); + pParser->AddConst ( yyval.m_iValue, yyvsp[0] ); + ;} + break; + + case 104: + + { + pParser->AddConst( yyval.m_iValue, yyvsp[0] ); + ;} + break; + + case 105: + + { + yyval.m_sValue = yyvsp[-2].m_sValue; + yyval.m_iValue = yyvsp[0].m_iValue; + ;} + break; + + case 107: + + { if ( !pParser->SetOldSyntax() ) YYERROR; ;} + break; + + case 108: + + { if ( !pParser->SetNewSyntax() ) YYERROR; ;} + break; + + case 112: + + { yyval = yyvsp[-1]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 113: + + { yyval = yyvsp[-1]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 114: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 115: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 116: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 117: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 118: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 119: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 120: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 121: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 122: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 123: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 124: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 125: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 126: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 127: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 128: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 129: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 130: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 131: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 133: + + { yyval = yyvsp[-3]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 134: + + { yyval = yyvsp[-3]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 135: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd ;} + break; + + case 136: + + { yyval = yyvsp[-5]; yyval.m_iEnd = yyvsp[0].m_iEnd ;} + break; + + case 137: + + { yyval = yyvsp[-5]; yyval.m_iEnd = yyvsp[0].m_iEnd ;} + break; + + case 143: + + { pParser->m_pStmt->m_eStmt = STMT_SHOW_WARNINGS; ;} + break; + + case 144: + + { pParser->m_pStmt->m_eStmt = STMT_SHOW_STATUS; ;} + break; + + case 145: + + { pParser->m_pStmt->m_eStmt = STMT_SHOW_META; ;} + break; + + case 151: + + { + pParser->SetStatement ( yyvsp[-2], SET_LOCAL ); + pParser->m_pStmt->m_iSetValue = yyvsp[0].m_iValue; + ;} + break; + + case 152: + + { + pParser->SetStatement ( yyvsp[-2], SET_LOCAL ); + pParser->m_pStmt->m_sSetValue = yyvsp[0].m_sValue; + ;} + break; + + case 153: + + { + pParser->SetStatement ( yyvsp[-2], SET_LOCAL ); + pParser->m_pStmt->m_bSetNull = true; + ;} + break; + + case 154: + + { pParser->m_pStmt->m_eStmt = STMT_DUMMY; ;} + break; + + case 155: + + { pParser->m_pStmt->m_eStmt = STMT_DUMMY; ;} + break; + + case 156: + + { + pParser->SetStatement ( yyvsp[-4], SET_GLOBAL_UVAR ); + pParser->m_pStmt->m_dSetValues = *yyvsp[-1].m_pValues.Ptr(); + ;} + break; + + case 157: + + { + pParser->SetStatement ( yyvsp[-2], SET_GLOBAL_SVAR ); + pParser->m_pStmt->m_sSetValue = yyvsp[0].m_sValue; + ;} + break; + + case 160: + + { yyval.m_iValue = 1; ;} + break; + + case 161: + + { yyval.m_iValue = 0; ;} + break; + + case 162: + + { + yyval.m_iValue = yyvsp[0].m_iValue; + if ( yyval.m_iValue!=0 && yyval.m_iValue!=1 ) + { + yyerror ( pParser, "only 0 and 1 could be used as boolean values" ); + YYERROR; + } + ;} + break; + + case 163: + + { pParser->m_pStmt->m_eStmt = STMT_COMMIT; ;} + break; + + case 164: + + { pParser->m_pStmt->m_eStmt = STMT_ROLLBACK; ;} + break; + + case 165: + + { pParser->m_pStmt->m_eStmt = STMT_BEGIN; ;} + break; + + case 168: + + { + // everything else is pushed directly into parser within the rules + pParser->m_pStmt->m_sIndex = yyvsp[-3].m_sValue; + ;} + break; + + case 169: + + { pParser->m_pStmt->m_eStmt = STMT_INSERT; ;} + break; + + case 170: + + { pParser->m_pStmt->m_eStmt = STMT_REPLACE; ;} + break; + + case 173: + + { if ( !pParser->AddSchemaItem ( &yyvsp[0] ) ) { yyerror ( pParser, "unknown field" ); YYERROR; } ;} + break; + + case 174: + + { if ( !pParser->AddSchemaItem ( &yyvsp[0] ) ) { yyerror ( pParser, "unknown field" ); YYERROR; } ;} + break; + + case 177: + + { if ( !pParser->m_pStmt->CheckInsertIntegrity() ) { yyerror ( pParser, "wrong number of values here" ); YYERROR; } ;} + break; + + case 178: + + { AddInsval ( pParser->m_pStmt->m_dInsertValues, yyvsp[0] ); ;} + break; + + case 179: + + { AddInsval ( pParser->m_pStmt->m_dInsertValues, yyvsp[0] ); ;} + break; + + case 180: + + { yyval.m_iInstype = TOK_CONST_INT; yyval.m_iValue = yyvsp[0].m_iValue; ;} + break; + + case 181: + + { yyval.m_iInstype = TOK_CONST_FLOAT; yyval.m_fValue = yyvsp[0].m_fValue; ;} + break; + + case 182: + + { yyval.m_iInstype = TOK_QUOTED_STRING; yyval.m_sValue = yyvsp[0].m_sValue; ;} + break; + + case 183: + + { yyval.m_iInstype = TOK_CONST_MVA; yyval.m_iValue = yyvsp[-1].m_pValues->GetLength(); yyval.m_pValues = yyvsp[-1].m_pValues; ;} + break; + + case 184: + + { + pParser->m_pStmt->m_eStmt = STMT_DELETE; + pParser->m_pStmt->m_sIndex = yyvsp[-4].m_sValue; + pParser->m_pStmt->m_dDeleteIds.Add ( yyvsp[0].m_iValue ); + ;} + break; + + case 185: + + { + pParser->m_pStmt->m_eStmt = STMT_DELETE; + pParser->m_pStmt->m_sIndex = yyvsp[-6].m_sValue; + for ( int i=0; iGetLength(); i++ ) + pParser->m_pStmt->m_dDeleteIds.Add ( (*yyvsp[-1].m_pValues.Ptr())[i] ); + ;} + break; + + case 186: + + { + pParser->m_pStmt->m_eStmt = STMT_CALL; + pParser->m_pStmt->m_sCallProc = yyvsp[-4].m_sValue; + ;} + break; + + case 189: + + { + assert ( pParser->m_pStmt->m_dCallOptNames.GetLength()==1 ); + assert ( pParser->m_pStmt->m_dCallOptValues.GetLength()==1 ); + ;} + break; + + case 191: + + { + pParser->m_pStmt->m_dCallOptNames.Add ( yyvsp[0].m_sValue ); + AddInsval ( pParser->m_pStmt->m_dCallOptValues, yyvsp[-2] ); + ;} + break; + + case 195: + + { yyval.m_sValue = "limit"; ;} + break; + + case 196: + + { + pParser->m_pStmt->m_eStmt = STMT_DESC; + pParser->m_pStmt->m_sIndex = yyvsp[0].m_sValue; + ;} + break; + + case 199: + + { pParser->m_pStmt->m_eStmt = STMT_SHOW_TABLES; ;} + break; + + case 200: + + { + SqlStmt_t & tStmt = *pParser->m_pStmt; + tStmt.m_eStmt = STMT_UPDATE; + tStmt.m_sIndex = yyvsp[-6].m_sValue; + tStmt.m_tUpdate.m_dDocids.Add ( (SphDocID_t) yyvsp[0].m_iValue ); + tStmt.m_tUpdate.m_dRowOffset.Add ( 0 ); + ;} + break; + + case 203: + + { + CSphAttrUpdate & tUpd = pParser->m_pStmt->m_tUpdate; + CSphColumnInfo & tAttr = tUpd.m_dAttrs.Add(); + tAttr.m_sName = yyvsp[-2].m_sValue; + tAttr.m_sName.ToLower(); + tAttr.m_eAttrType = SPH_ATTR_INTEGER; // sorry, ints only for now, riding on legacy shit! + tUpd.m_dPool.Add ( (DWORD) yyvsp[0].m_iValue ); + ;} + break; + + case 204: + + { + CSphAttrUpdate & tUpd = pParser->m_pStmt->m_tUpdate; + CSphColumnInfo & tAttr = tUpd.m_dAttrs.Add(); + tAttr.m_sName = yyvsp[-4].m_sValue; + tAttr.m_sName.ToLower(); + assert ( yyvsp[-1].m_pValues.Ptr() && yyvsp[-1].m_pValues->GetLength()>0 ); + yyvsp[-1].m_pValues->Uniq(); // don't need dupes within MVA + tUpd.m_dPool.Add ( yyvsp[-1].m_pValues->GetLength()*2 ); + tAttr.m_eAttrType = SPH_ATTR_UINT32SET; + SphAttr_t * pVal = yyvsp[-1].m_pValues.Ptr()->Begin(); + SphAttr_t * pValMax = pVal + yyvsp[-1].m_pValues->GetLength(); + for ( ;pValUINT_MAX ) + { + tAttr.m_eAttrType = SPH_ATTR_UINT64SET; + } + tUpd.m_dPool.Add ( (DWORD)uVal ); + tUpd.m_dPool.Add ( (DWORD)( uVal>>32 ) ); + } + ;} + break; + + case 205: + + { + CSphAttrUpdate & tUpd = pParser->m_pStmt->m_tUpdate; + CSphColumnInfo & tAttr = tUpd.m_dAttrs.Add(); + tAttr.m_sName = yyvsp[-3].m_sValue; + tAttr.m_sName.ToLower(); + tAttr.m_eAttrType = SPH_ATTR_UINT32SET; + tUpd.m_dPool.Add ( 0 ); + ;} + break; + + case 206: + + { pParser->m_pStmt->m_eStmt = STMT_DUMMY; ;} + break; + + case 209: + + { pParser->m_pStmt->m_eStmt = STMT_DUMMY; ;} + break; + + case 210: + + { + SqlStmt_t & tStmt = *pParser->m_pStmt; + tStmt.m_eStmt = STMT_CREATE_FUNC; + tStmt.m_sUdfName = yyvsp[-4].m_sValue; + tStmt.m_sUdfLib = yyvsp[0].m_sValue; + tStmt.m_eUdfType = (ESphAttr) yyvsp[-2].m_iValue; + ;} + break; + + case 211: + + { yyval.m_iValue = SPH_ATTR_INTEGER; ;} + break; + + case 212: + + { yyval.m_iValue = SPH_ATTR_FLOAT; ;} + break; + + case 213: + + { + SqlStmt_t & tStmt = *pParser->m_pStmt; + tStmt.m_eStmt = STMT_DROP_FUNC; + tStmt.m_sUdfName = yyvsp[0].m_sValue; + ;} + break; + + + } + +/* Line 991 of yacc.c. */ + + + yyvsp -= yylen; + yyssp -= yylen; + + + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + char *yymsg; + int yyx, yycount; + + yycount = 0; + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + yysize += yystrlen (yytname[yyx]) + 15, yycount++; + yysize += yystrlen ("syntax error, unexpected ") + 1; + yysize += yystrlen (yytname[yytype]); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); + + if (yycount < 4) + { + yycount = 0; + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); + yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + const char *yyq = ! yycount ? ", expecting " : " or "; + yyp = yystpcpy (yyp, yyq); + yyp = yystpcpy (yyp, yytname[yyx]); + yycount++; + } + } + else + { + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); + yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + snprintf (yyp, (int)(yysize - (yyp - yymsg)), ", expecting %s (or %d other tokens)", yytname[yyx], yycount - 1); + while (*yyp++); + break; + } + } + + yyerror (pParser, yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror (pParser, "syntax error; also virtual memory exhausted"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror (pParser, "syntax error"); + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + /* Return failure if at end of input. */ + if (yychar == YYEOF) + { + /* Pop the error token. */ + YYPOPSTACK; + /* Pop the rest of the stack. */ + while (yyss < yyssp) + { + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + YYPOPSTACK; + } + YYABORT; + } + + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); + yychar = YYEMPTY; + + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab2; + + +/*----------------------------------------------------. +| yyerrlab1 -- error raised explicitly by an action. | +`----------------------------------------------------*/ +yyerrlab1: + + /* Suppress GCC warning that yyerrlab1 is unused when no action + invokes YYERROR. */ +#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) +// __attribute__ ((__unused__)) +#endif + + + goto yyerrlab2; + + +/*---------------------------------------------------------------. +| yyerrlab2 -- pop states until the error token can be shifted. | +`---------------------------------------------------------------*/ +yyerrlab2: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + yyvsp--; + yystate = *--yyssp; + + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + YYDPRINTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; + + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror (pParser, "parser stack overflow"); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} + + + + + +#if USE_WINDOWS +#pragma warning(pop) +#endif + diff --git a/coreseek/csft-4.1/src/yysphinxql.h b/coreseek/csft-4.1/src/yysphinxql.h new file mode 100755 index 0000000..eada2e5 --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxql.h @@ -0,0 +1,198 @@ +/* A Bison parser, made by GNU Bison 1.875. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOK_IDENT = 258, + TOK_ATIDENT = 259, + TOK_CONST_INT = 260, + TOK_CONST_FLOAT = 261, + TOK_CONST_MVA = 262, + TOK_QUOTED_STRING = 263, + TOK_USERVAR = 264, + TOK_SYSVAR = 265, + TOK_AS = 266, + TOK_ASC = 267, + TOK_AVG = 268, + TOK_BEGIN = 269, + TOK_BETWEEN = 270, + TOK_BY = 271, + TOK_CALL = 272, + TOK_COLLATION = 273, + TOK_COMMIT = 274, + TOK_COUNT = 275, + TOK_CREATE = 276, + TOK_DELETE = 277, + TOK_DESC = 278, + TOK_DESCRIBE = 279, + TOK_DISTINCT = 280, + TOK_DIV = 281, + TOK_DROP = 282, + TOK_FALSE = 283, + TOK_FLOAT = 284, + TOK_FROM = 285, + TOK_FUNCTION = 286, + TOK_GLOBAL = 287, + TOK_GROUP = 288, + TOK_ID = 289, + TOK_IN = 290, + TOK_INSERT = 291, + TOK_INT = 292, + TOK_INTO = 293, + TOK_LIMIT = 294, + TOK_MATCH = 295, + TOK_MAX = 296, + TOK_META = 297, + TOK_MIN = 298, + TOK_MOD = 299, + TOK_NAMES = 300, + TOK_NULL = 301, + TOK_OPTION = 302, + TOK_ORDER = 303, + TOK_RAND = 304, + TOK_REPLACE = 305, + TOK_RETURNS = 306, + TOK_ROLLBACK = 307, + TOK_SELECT = 308, + TOK_SET = 309, + TOK_SESSION = 310, + TOK_SHOW = 311, + TOK_SONAME = 312, + TOK_START = 313, + TOK_STATUS = 314, + TOK_SUM = 315, + TOK_TABLES = 316, + TOK_TRANSACTION = 317, + TOK_TRUE = 318, + TOK_UPDATE = 319, + TOK_VALUES = 320, + TOK_VARIABLES = 321, + TOK_WARNINGS = 322, + TOK_WEIGHT = 323, + TOK_WHERE = 324, + TOK_WITHIN = 325, + TOK_OR = 326, + TOK_AND = 327, + TOK_NE = 328, + TOK_GTE = 329, + TOK_LTE = 330, + TOK_NOT = 331, + TOK_NEG = 332 + }; +#endif +#define TOK_IDENT 258 +#define TOK_ATIDENT 259 +#define TOK_CONST_INT 260 +#define TOK_CONST_FLOAT 261 +#define TOK_CONST_MVA 262 +#define TOK_QUOTED_STRING 263 +#define TOK_USERVAR 264 +#define TOK_SYSVAR 265 +#define TOK_AS 266 +#define TOK_ASC 267 +#define TOK_AVG 268 +#define TOK_BEGIN 269 +#define TOK_BETWEEN 270 +#define TOK_BY 271 +#define TOK_CALL 272 +#define TOK_COLLATION 273 +#define TOK_COMMIT 274 +#define TOK_COUNT 275 +#define TOK_CREATE 276 +#define TOK_DELETE 277 +#define TOK_DESC 278 +#define TOK_DESCRIBE 279 +#define TOK_DISTINCT 280 +#define TOK_DIV 281 +#define TOK_DROP 282 +#define TOK_FALSE 283 +#define TOK_FLOAT 284 +#define TOK_FROM 285 +#define TOK_FUNCTION 286 +#define TOK_GLOBAL 287 +#define TOK_GROUP 288 +#define TOK_ID 289 +#define TOK_IN 290 +#define TOK_INSERT 291 +#define TOK_INT 292 +#define TOK_INTO 293 +#define TOK_LIMIT 294 +#define TOK_MATCH 295 +#define TOK_MAX 296 +#define TOK_META 297 +#define TOK_MIN 298 +#define TOK_MOD 299 +#define TOK_NAMES 300 +#define TOK_NULL 301 +#define TOK_OPTION 302 +#define TOK_ORDER 303 +#define TOK_RAND 304 +#define TOK_REPLACE 305 +#define TOK_RETURNS 306 +#define TOK_ROLLBACK 307 +#define TOK_SELECT 308 +#define TOK_SET 309 +#define TOK_SESSION 310 +#define TOK_SHOW 311 +#define TOK_SONAME 312 +#define TOK_START 313 +#define TOK_STATUS 314 +#define TOK_SUM 315 +#define TOK_TABLES 316 +#define TOK_TRANSACTION 317 +#define TOK_TRUE 318 +#define TOK_UPDATE 319 +#define TOK_VALUES 320 +#define TOK_VARIABLES 321 +#define TOK_WARNINGS 322 +#define TOK_WEIGHT 323 +#define TOK_WHERE 324 +#define TOK_WITHIN 325 +#define TOK_OR 326 +#define TOK_AND 327 +#define TOK_NE 328 +#define TOK_GTE 329 +#define TOK_LTE 330 +#define TOK_NOT 331 +#define TOK_NEG 332 + + + + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + + + diff --git a/coreseek/csft-4.1/src/yysphinxql.patch b/coreseek/csft-4.1/src/yysphinxql.patch new file mode 100755 index 0000000..92363cc --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxql.patch @@ -0,0 +1,40 @@ +--- yysphinxql.c.orig Mon Jun 14 05:20:39 2010 ++++ yysphinxql.c Mon Jun 14 05:13:37 2010 +@@ -1953,7 +1953,7 @@ + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); + +- if (yycount < 5) ++ if (yycount < 4) + { + yycount = 0; + for (yyx = yyn < 0 ? -yyn : 0; +@@ -1967,6 +1967,19 @@ + yycount++; + } + } ++ else ++ { ++ for (yyx = yyn < 0 ? -yyn : 0; ++ yyx < (int) (sizeof (yytname) / sizeof (char *)); ++ yyx++) ++ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) ++ { ++ snprintf (yyp, (int)(yysize - (yyp - yymsg)), ", expecting %s (or %d other tokens)", yytname[yyx], yycount - 1); ++ while (*yyp++); ++ break; ++ } ++ } ++ + yyerror (pParser, yymsg); + YYSTACK_FREE (yymsg); + } +@@ -2019,7 +2032,7 @@ + /* Suppress GCC warning that yyerrlab1 is unused when no action + invokes YYERROR. */ + #if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) +- __attribute__ ((__unused__)) ++// __attribute__ ((__unused__)) + #endif + + diff --git a/coreseek/csft-4.1/src/yysphinxquery.c b/coreseek/csft-4.1/src/yysphinxquery.c new file mode 100755 index 0000000..0249a63 --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxquery.c @@ -0,0 +1,1502 @@ +/* A Bison parser, made by GNU Bison 1.875. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Written by Richard Stallman by simplifying the original so called + ``semantic'' parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOK_KEYWORD = 258, + TOK_NEAR = 259, + TOK_INT = 260, + TOK_FIELDLIMIT = 261, + TOK_ZONE = 262, + TOK_BEFORE = 263, + TOK_SENTENCE = 264, + TOK_PARAGRAPH = 265 + }; +#endif +#define TOK_KEYWORD 258 +#define TOK_NEAR 259 +#define TOK_INT 260 +#define TOK_FIELDLIMIT 261 +#define TOK_ZONE 262 +#define TOK_BEFORE 263 +#define TOK_SENTENCE 264 +#define TOK_PARAGRAPH 265 + + + + +/* Copy the first part of user declarations. */ + + +#if USE_WINDOWS +#pragma warning(push,1) +#endif + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 1 +#endif + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) + +typedef union YYSTYPE { + XQNode_t * pNode; // tree node + struct + { + int iValue; + int iStrIndex; + } tInt; + struct // field spec + { + CSphSmallBitvec dMask; // acceptable fields mask + int iMaxPos; // max allowed position within field + } tFieldLimit; + int iZoneVec; +} YYSTYPE; +/* Line 186 of yacc.c. */ + +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 214 of yacc.c. */ + + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# else +# ifndef YYSTACK_USE_ALLOCA +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC malloc +# define YYSTACK_FREE free +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short yysigned_char; +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 38 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 136 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 20 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 15 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 46 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 72 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 265 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 19, 2, 11, 2, 2, 2, + 13, 14, 2, 2, 2, 15, 2, 18, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 12, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 16, 2, 17, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned char yyprhs[] = +{ + 0, 0, 3, 5, 7, 9, 11, 14, 17, 21, + 23, 25, 27, 29, 31, 33, 35, 37, 40, 42, + 46, 50, 54, 58, 62, 64, 66, 68, 71, 76, + 81, 85, 91, 97, 101, 103, 106, 109, 111, 115, + 117, 120, 124, 126, 130, 134, 136 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yysigned_char yyrhs[] = +{ + 21, 0, -1, 34, -1, 3, -1, 5, -1, 22, + -1, 22, 11, -1, 12, 22, -1, 12, 22, 11, + -1, 23, -1, 13, -1, 14, -1, 15, -1, 16, + -1, 17, -1, 18, -1, 24, -1, 25, 24, -1, + 23, -1, 19, 25, 19, -1, 26, 9, 26, -1, + 27, 9, 26, -1, 26, 10, 26, -1, 28, 10, + 26, -1, 23, -1, 27, -1, 28, -1, 19, 19, + -1, 19, 19, 17, 5, -1, 19, 19, 18, 5, + -1, 19, 25, 19, -1, 19, 25, 19, 17, 5, + -1, 19, 25, 19, 18, 5, -1, 13, 34, 14, + -1, 29, -1, 6, 29, -1, 7, 29, -1, 30, + -1, 31, 16, 30, -1, 31, -1, 15, 31, -1, + 6, 15, 31, -1, 32, -1, 33, 8, 32, -1, + 33, 4, 32, -1, 33, -1, 34, 33, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned char yyrline[] = +{ + 0, 54, 54, 58, 59, 63, 64, 65, 66, 70, + 71, 72, 73, 74, 75, 76, 80, 81, 85, 86, + 90, 91, 95, 96, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 113, 114, 115, 119, 120, 124, + 125, 126, 130, 131, 132, 136, 137 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "TOK_KEYWORD", "TOK_NEAR", "TOK_INT", + "TOK_FIELDLIMIT", "TOK_ZONE", "TOK_BEFORE", "TOK_SENTENCE", + "TOK_PARAGRAPH", "'$'", "'^'", "'('", "')'", "'-'", "'|'", "'~'", "'/'", + "'\"'", "$accept", "query", "rawkeyword", "keyword", "phrasetoken", + "phrase", "sp_item", "sentence", "paragraph", "atom", "atomf", "orlist", + "orlistf", "beforelist", "expr", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 36, 94, 40, 41, 45, 124, 126, 47, 34 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned char yyr1[] = +{ + 0, 20, 21, 22, 22, 23, 23, 23, 23, 24, + 24, 24, 24, 24, 24, 24, 25, 25, 26, 26, + 27, 27, 28, 28, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 30, 30, 30, 31, 31, 32, + 32, 32, 33, 33, 33, 34, 34 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char yyr2[] = +{ + 0, 2, 1, 1, 1, 1, 2, 2, 3, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, + 3, 3, 3, 3, 1, 1, 1, 2, 4, 4, + 3, 5, 5, 3, 1, 2, 2, 1, 3, 1, + 2, 3, 1, 3, 3, 1, 2 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const unsigned char yydefact[] = +{ + 0, 3, 4, 0, 0, 0, 0, 0, 0, 0, + 5, 24, 0, 25, 26, 34, 37, 39, 42, 45, + 2, 0, 35, 36, 7, 0, 0, 40, 10, 11, + 12, 13, 14, 15, 27, 9, 16, 0, 1, 6, + 0, 0, 0, 0, 0, 0, 0, 46, 41, 8, + 33, 0, 0, 30, 17, 0, 18, 20, 22, 21, + 23, 38, 44, 43, 28, 29, 0, 0, 0, 31, + 32, 19 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yysigned_char yydefgoto[] = +{ + -1, 9, 10, 11, 36, 37, 12, 13, 14, 15, + 16, 17, 18, 19, 20 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -33 +static const yysigned_char yypact[] = +{ + 81, -33, -33, 103, 107, 20, 81, 92, 1, 27, + 42, 36, 41, 22, 45, -33, -33, 54, -33, 18, + 81, 92, -33, -33, 64, 66, 107, 54, -33, -33, + -33, -33, -33, -33, 74, -33, -33, 25, -33, -33, + 71, 71, 71, 71, 92, 81, 81, 18, 54, -33, + -33, 72, 77, 39, -33, 118, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, 84, 96, 49, -33, + -33, -33 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yysigned_char yypgoto[] = +{ + -33, -33, 97, -8, -32, 48, -31, -33, -33, -2, + 63, 0, 13, -17, 108 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -20 +static const yysigned_char yytable[] = +{ + 35, 22, 23, 47, 1, 54, 2, 27, 47, 57, + 58, 59, 60, 5, 28, 29, 30, 31, 32, 33, + 34, 48, 45, 1, 22, 2, 46, 38, 1, 35, + 2, 42, 56, 56, 56, 56, 54, 5, 28, 29, + 30, 31, 32, 33, 53, -18, -18, 35, -19, -19, + 40, 41, 1, 39, 2, 43, 66, 67, 62, 63, + 35, 5, 28, 29, 30, 31, 32, 33, 71, 1, + 44, 2, 3, 4, 1, 49, 2, 64, 5, 6, + 50, 7, 65, 5, 1, 8, 2, 3, 4, 69, + 55, 51, 52, 5, 6, 1, 7, 2, 26, 4, + 8, 70, 24, 68, 5, 6, 1, 61, 2, 0, + 1, 8, 2, 0, 25, 5, 6, 0, 21, 5, + 6, 1, 8, 2, 0, 0, 8, 0, 0, 0, + 5, 28, 29, 30, 31, 32, 33 +}; + +static const yysigned_char yycheck[] = +{ + 8, 3, 4, 20, 3, 37, 5, 7, 25, 40, + 41, 42, 43, 12, 13, 14, 15, 16, 17, 18, + 19, 21, 4, 3, 26, 5, 8, 0, 3, 37, + 5, 9, 40, 41, 42, 43, 68, 12, 13, 14, + 15, 16, 17, 18, 19, 9, 10, 55, 9, 10, + 9, 10, 3, 11, 5, 10, 17, 18, 45, 46, + 68, 12, 13, 14, 15, 16, 17, 18, 19, 3, + 16, 5, 6, 7, 3, 11, 5, 5, 12, 13, + 14, 15, 5, 12, 3, 19, 5, 6, 7, 5, + 19, 17, 18, 12, 13, 3, 15, 5, 6, 7, + 19, 5, 5, 55, 12, 13, 3, 44, 5, -1, + 3, 19, 5, -1, 6, 12, 13, -1, 15, 12, + 13, 3, 19, 5, -1, -1, 19, -1, -1, -1, + 12, 13, 14, 15, 16, 17, 18 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned char yystos[] = +{ + 0, 3, 5, 6, 7, 12, 13, 15, 19, 21, + 22, 23, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 15, 29, 29, 22, 34, 6, 31, 13, 14, + 15, 16, 17, 18, 19, 23, 24, 25, 0, 11, + 9, 10, 9, 10, 16, 4, 8, 33, 31, 11, + 14, 17, 18, 19, 24, 19, 23, 26, 26, 26, + 26, 30, 32, 32, 5, 5, 17, 18, 25, 5, + 5, 19 +}; + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (pParser, "syntax error: cannot back up");\ + YYERROR; \ + } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + Current.first_line = Rhs[1].first_line; \ + Current.first_column = Rhs[1].first_column; \ + Current.last_line = Rhs[N].last_line; \ + Current.last_column = Rhs[N].last_column; +#endif + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval, pParser) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (cinluded). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short *bottom, short *top) +#else +static void +yy_stack_print (bottom, top) + short *bottom; + short *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned int yylineno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylineno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#if YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + register char *yyd = yydest; + register const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +#endif /* !YYERROR_VERBOSE */ + + + +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} + +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yytype, yyvaluep) + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse ( XQParser_t * pParser ); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse ( XQParser_t * pParser ) +#else +int +yyparse (pParser) + XQParser_t * pParser ; +#endif +#endif +{ + /* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + register int yystate; + register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; + register short *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; + + + +#define YYPOPSTACK (yyvsp--, yyssp--) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyoverflowlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyoverflowlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + short *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 2: + + { pParser->AddQuery ( yyvsp[0].pNode ); ;} + break; + + case 3: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 4: + + { yyval.pNode = pParser->AddKeyword ( ( yyvsp[0].tInt.iStrIndex>=0 ) ? pParser->m_dIntTokens[yyvsp[0].tInt.iStrIndex].cstr() : NULL ); ;} + break; + + case 6: + + { yyval.pNode = yyvsp[-1].pNode; assert ( yyval.pNode->m_dWords.GetLength()==1 ); yyval.pNode->m_dWords[0].m_bFieldEnd = true; ;} + break; + + case 7: + + { yyval.pNode = yyvsp[0].pNode; assert ( yyval.pNode->m_dWords.GetLength()==1 ); yyval.pNode->m_dWords[0].m_bFieldStart = true; ;} + break; + + case 8: + + { yyval.pNode = yyvsp[-1].pNode; assert ( yyval.pNode->m_dWords.GetLength()==1 ); yyval.pNode->m_dWords[0].m_bFieldStart = true; yyval.pNode->m_dWords[0].m_bFieldEnd = true; ;} + break; + + case 9: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 10: + + { yyval.pNode = NULL; ;} + break; + + case 11: + + { yyval.pNode = NULL; ;} + break; + + case 12: + + { yyval.pNode = NULL; ;} + break; + + case 13: + + { yyval.pNode = NULL; ;} + break; + + case 14: + + { yyval.pNode = NULL; ;} + break; + + case 15: + + { yyval.pNode = NULL; ;} + break; + + case 16: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 17: + + { yyval.pNode = pParser->AddKeyword ( yyvsp[-1].pNode, yyvsp[0].pNode ); ;} + break; + + case 18: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 19: + + { yyval.pNode = yyvsp[-1].pNode; if ( yyval.pNode ) { assert ( yyval.pNode->m_dWords.GetLength() ); yyval.pNode->SetOp ( SPH_QUERY_PHRASE); } ;} + break; + + case 20: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_SENTENCE, yyvsp[-2].pNode, yyvsp[0].pNode ); ;} + break; + + case 21: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_SENTENCE, yyvsp[-2].pNode, yyvsp[0].pNode ); ;} + break; + + case 22: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_PARAGRAPH, yyvsp[-2].pNode, yyvsp[0].pNode ); ;} + break; + + case 23: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_PARAGRAPH, yyvsp[-2].pNode, yyvsp[0].pNode ); ;} + break; + + case 24: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 25: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 26: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 27: + + { yyval.pNode = NULL; ;} + break; + + case 28: + + { yyval.pNode = NULL; ;} + break; + + case 29: + + { yyval.pNode = NULL; ;} + break; + + case 30: + + { yyval.pNode = yyvsp[-1].pNode; if ( yyval.pNode ) { assert ( yyval.pNode->m_dWords.GetLength() ); yyval.pNode->SetOp ( SPH_QUERY_PHRASE); } ;} + break; + + case 31: + + { yyval.pNode = yyvsp[-3].pNode; if ( yyval.pNode ) { assert ( yyval.pNode->m_dWords.GetLength() ); yyval.pNode->SetOp ( SPH_QUERY_PROXIMITY ); yyval.pNode->m_iOpArg = yyvsp[0].tInt.iValue; } ;} + break; + + case 32: + + { yyval.pNode = yyvsp[-3].pNode; if ( yyval.pNode ) { assert ( yyval.pNode->m_dWords.GetLength() ); yyval.pNode->SetOp ( SPH_QUERY_QUORUM ); yyval.pNode->m_iOpArg = yyvsp[0].tInt.iValue; } ;} + break; + + case 33: + + { yyval.pNode = yyvsp[-1].pNode; if ( yyval.pNode ) yyval.pNode->m_bFieldSpec = false; ;} + break; + + case 34: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 35: + + { yyval.pNode = yyvsp[0].pNode; if ( yyval.pNode ) yyval.pNode->SetFieldSpec ( yyvsp[-1].tFieldLimit.dMask, yyvsp[-1].tFieldLimit.iMaxPos ); ;} + break; + + case 36: + + { yyval.pNode = yyvsp[0].pNode; if ( yyval.pNode ) yyval.pNode->SetZoneSpec ( pParser->GetZoneVec ( yyvsp[-1].iZoneVec ) ); ;} + break; + + case 37: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 38: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_OR, yyvsp[-2].pNode, yyvsp[0].pNode ); ;} + break; + + case 39: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 40: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_NOT, yyvsp[0].pNode, NULL ); ;} + break; + + case 41: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_NOT, yyvsp[0].pNode, NULL ); yyval.pNode->SetFieldSpec ( yyvsp[-2].tFieldLimit.dMask, yyvsp[-2].tFieldLimit.iMaxPos ); ;} + break; + + case 43: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_BEFORE, yyvsp[-2].pNode, yyvsp[0].pNode ); ;} + break; + + case 44: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_NEAR, yyvsp[-2].pNode, yyvsp[0].pNode, yyvsp[-1].tInt.iValue ); ;} + break; + + case 45: + + { yyval.pNode = yyvsp[0].pNode; ;} + break; + + case 46: + + { yyval.pNode = pParser->AddOp ( SPH_QUERY_AND, yyvsp[-1].pNode, yyvsp[0].pNode ); ;} + break; + + + } + +/* Line 991 of yacc.c. */ + + + yyvsp -= yylen; + yyssp -= yylen; + + + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + char *yymsg; + int yyx, yycount; + + yycount = 0; + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + yysize += yystrlen (yytname[yyx]) + 15, yycount++; + yysize += yystrlen ("syntax error, unexpected ") + 1; + yysize += yystrlen (yytname[yytype]); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); + + if (yycount < 5) + { + yycount = 0; + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); + yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + const char *yyq = ! yycount ? ", expecting " : " or "; + yyp = yystpcpy (yyp, yyq); + yyp = yystpcpy (yyp, yytname[yyx]); + yycount++; + } + } + yyerror (pParser, yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror (pParser, "syntax error; also virtual memory exhausted"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror (pParser, "syntax error"); + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + /* Return failure if at end of input. */ + if (yychar == YYEOF) + { + /* Pop the error token. */ + YYPOPSTACK; + /* Pop the rest of the stack. */ + while (yyss < yyssp) + { + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + YYPOPSTACK; + } + YYABORT; + } + + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); + yychar = YYEMPTY; + + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab2; + + +/*----------------------------------------------------. +| yyerrlab1 -- error raised explicitly by an action. | +`----------------------------------------------------*/ +//yyerrlab1: + + /* Suppress GCC warning that yyerrlab1 is unused when no action + invokes YYERROR. */ +#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) +// __attribute__ ((__unused__)) +#endif + + + goto yyerrlab2; + + +/*---------------------------------------------------------------. +| yyerrlab2 -- pop states until the error token can be shifted. | +`---------------------------------------------------------------*/ +yyerrlab2: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + yyvsp--; + yystate = *--yyssp; + + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + YYDPRINTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; + + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror (pParser, "parser stack overflow"); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} + + + + + +#if USE_WINDOWS +#pragma warning(pop) +#endif + diff --git a/coreseek/csft-4.1/src/yysphinxquery.h b/coreseek/csft-4.1/src/yysphinxquery.h new file mode 100755 index 0000000..f2955c0 --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxquery.h @@ -0,0 +1,80 @@ +/* A Bison parser, made by GNU Bison 1.875. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOK_KEYWORD = 258, + TOK_NEAR = 259, + TOK_INT = 260, + TOK_FIELDLIMIT = 261, + TOK_ZONE = 262, + TOK_BEFORE = 263, + TOK_SENTENCE = 264, + TOK_PARAGRAPH = 265 + }; +#endif +#define TOK_KEYWORD 258 +#define TOK_NEAR 259 +#define TOK_INT 260 +#define TOK_FIELDLIMIT 261 +#define TOK_ZONE 262 +#define TOK_BEFORE 263 +#define TOK_SENTENCE 264 +#define TOK_PARAGRAPH 265 + + + + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) + +typedef union YYSTYPE { + XQNode_t * pNode; // tree node + struct + { + int iValue; + int iStrIndex; + } tInt; + struct // field spec + { + CSphSmallBitvec dMask; // acceptable fields mask + int iMaxPos; // max allowed position within field + } tFieldLimit; + int iZoneVec; +} YYSTYPE; +/* Line 1204 of yacc.c. */ + +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + + + diff --git a/coreseek/csft-4.1/src/yysphinxselect.c b/coreseek/csft-4.1/src/yysphinxselect.c new file mode 100755 index 0000000..539af3e --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxselect.c @@ -0,0 +1,1477 @@ +/* A Bison parser, made by GNU Bison 1.875. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Written by Richard Stallman by simplifying the original so called + ``semantic'' parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + SEL_TOKEN = 258, + SEL_ID = 259, + SEL_AS = 260, + SEL_AVG = 261, + SEL_MAX = 262, + SEL_MIN = 263, + SEL_SUM = 264, + SEL_COUNT = 265, + SEL_WEIGHT = 266, + SEL_DISTINCT = 267, + TOK_NEG = 268, + TOK_LTE = 269, + TOK_GTE = 270, + TOK_EQ = 271, + TOK_NE = 272, + TOK_OR = 273, + TOK_AND = 274, + TOK_NOT = 275 + }; +#endif +#define SEL_TOKEN 258 +#define SEL_ID 259 +#define SEL_AS 260 +#define SEL_AVG 261 +#define SEL_MAX 262 +#define SEL_MIN 263 +#define SEL_SUM 264 +#define SEL_COUNT 265 +#define SEL_WEIGHT 266 +#define SEL_DISTINCT 267 +#define TOK_NEG 268 +#define TOK_LTE 269 +#define TOK_GTE 270 +#define TOK_EQ 271 +#define TOK_NE 272 +#define TOK_OR 273 +#define TOK_AND 274 +#define TOK_NOT 275 + + + + +/* Copy the first part of user declarations. */ + + +#if USE_WINDOWS +#pragma warning(push,1) +#pragma warning(disable:4702) // unreachable code +#endif + + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 1 +#endif + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + +/* Copy the second part of user declarations. */ + + +/* Line 214 of yacc.c. */ + + +#if ! defined (yyoverflow) || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# if YYSTACK_USE_ALLOCA +# define YYSTACK_ALLOC alloca +# else +# ifndef YYSTACK_USE_ALLOCA +# if defined (alloca) || defined (_ALLOCA_H) +# define YYSTACK_ALLOC alloca +# else +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# else +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +# define YYSTACK_ALLOC malloc +# define YYSTACK_FREE free +# endif +#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + + +#if (! defined (yyoverflow) \ + && (! defined (__cplusplus) \ + || (YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + short yyss; + YYSTYPE yyvs; + }; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + register YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (0) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack, Stack, yysize); \ + Stack = &yyptr->Stack; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (0) + +#endif + +#if defined (__STDC__) || defined (__cplusplus) + typedef signed char yysigned_char; +#else + typedef short yysigned_char; +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 31 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 264 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 30 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 9 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 41 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 93 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 275 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const unsigned char yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 28, 29, 24, 22, 27, 23, 2, 25, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 20, 2, 21, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 26 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const unsigned char yyprhs[] = +{ + 0, 0, 3, 5, 9, 11, 14, 15, 17, 20, + 22, 27, 32, 37, 42, 47, 51, 57, 59, 62, + 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, + 105, 109, 113, 117, 119, 121, 123, 128, 132, 139, + 146, 148 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yysigned_char yyrhs[] = +{ + 31, 0, -1, 32, -1, 31, 27, 32, -1, 24, + -1, 34, 33, -1, -1, 3, -1, 5, 3, -1, + 35, -1, 6, 28, 35, 29, -1, 7, 28, 35, + 29, -1, 8, 28, 35, 29, -1, 9, 28, 35, + 29, -1, 10, 28, 24, 29, -1, 11, 28, 29, + -1, 10, 28, 12, 3, 29, -1, 36, -1, 23, + 35, -1, 26, 35, -1, 35, 22, 35, -1, 35, + 23, 35, -1, 35, 24, 35, -1, 35, 25, 35, + -1, 35, 20, 35, -1, 35, 21, 35, -1, 35, + 14, 35, -1, 35, 15, 35, -1, 35, 16, 35, + -1, 35, 17, 35, -1, 35, 19, 35, -1, 35, + 18, 35, -1, 28, 35, 29, -1, 37, -1, 4, + -1, 3, -1, 3, 28, 38, 29, -1, 3, 28, + 29, -1, 8, 28, 35, 27, 35, 29, -1, 7, + 28, 35, 27, 35, 29, -1, 35, -1, 38, 27, + 35, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const unsigned char yyrline[] = +{ + 0, 41, 41, 42, 46, 47, 49, 51, 52, 56, + 57, 58, 59, 60, 61, 62, 63, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 89, 90, 93, 94, 95, 96, + 100, 101 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE +/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "SEL_TOKEN", "SEL_ID", "SEL_AS", "SEL_AVG", + "SEL_MAX", "SEL_MIN", "SEL_SUM", "SEL_COUNT", "SEL_WEIGHT", + "SEL_DISTINCT", "TOK_NEG", "TOK_LTE", "TOK_GTE", "TOK_EQ", "TOK_NE", + "TOK_OR", "TOK_AND", "'<'", "'>'", "'+'", "'-'", "'*'", "'/'", + "TOK_NOT", "','", "'('", "')'", "$accept", "select_list", "select_item", + "opt_alias", "select_expr", "expr", "select_atom", "function", + "arglist", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const unsigned short yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 60, 62, 43, 45, 42, 47, 275, 44, 40, 41 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const unsigned char yyr1[] = +{ + 0, 30, 31, 31, 32, 32, 33, 33, 33, 34, + 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 36, 36, 37, 37, 37, 37, + 38, 38 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const unsigned char yyr2[] = +{ + 0, 2, 1, 3, 1, 2, 0, 1, 2, 1, + 4, 4, 4, 4, 4, 3, 5, 1, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 1, 1, 1, 4, 3, 6, 6, + 1, 3 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const unsigned char yydefact[] = +{ + 0, 35, 34, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 2, 6, 9, 17, 33, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 18, 19, + 0, 1, 0, 7, 0, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 37, 40, + 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, + 32, 3, 8, 26, 27, 28, 29, 31, 30, 24, + 25, 20, 21, 22, 23, 0, 36, 10, 0, 11, + 0, 12, 13, 0, 14, 0, 0, 41, 0, 0, + 16, 39, 38 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yysigned_char yydefgoto[] = +{ + -1, 13, 14, 35, 15, 16, 17, 18, 50 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -28 +static const short yypact[] = +{ + 49, -27, -28, -19, -10, 16, 19, 20, 23, 60, + -28, 60, 60, 15, -28, 14, 215, -28, -28, 17, + 60, 60, 60, 60, -8, -3, 26, 33, -28, -28, + 107, -28, 49, -28, 59, -28, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -28, 215, + 12, 123, 75, 91, 139, 62, 41, -28, 60, 60, + -28, -28, -28, -17, -17, 239, 239, 227, 227, -17, + -17, -2, -2, -28, -28, 60, -28, -28, 60, -28, + 60, -28, -28, 45, -28, 187, 201, 215, 155, 171, + -28, -28, -28 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yysigned_char yypgoto[] = +{ + -28, -28, 44, -28, -28, -9, -28, -28, -28 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const unsigned char yytable[] = +{ + 28, 19, 29, 30, 55, 44, 45, 46, 47, 20, + 49, 51, 52, 53, 54, 31, 56, 33, 21, 34, + 1, 2, 46, 47, 26, 27, 57, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 9, 76, 32, 11, 22, 12, 48, 23, 24, 85, + 86, 25, 1, 2, 58, 3, 4, 5, 6, 7, + 8, 59, 62, 1, 2, 83, 87, 26, 27, 88, + 84, 89, 9, 10, 90, 11, 61, 12, 0, 0, + 0, 0, 0, 9, 0, 0, 11, 0, 12, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 0, 78, 0, 79, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 0, 80, 0, + 81, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 0, 0, 0, 60, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 0, + 0, 0, 77, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 0, 0, 0, 82, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 0, 0, 0, 91, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 0, 0, 0, + 92, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 0, 78, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 0, 80, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 36, 37, 38, 39, 0, 0, 42, 43, 44, + 45, 46, 47, 36, 37, 0, 0, 0, 0, 42, + 43, 44, 45, 46, 47 +}; + +static const yysigned_char yycheck[] = +{ + 9, 28, 11, 12, 12, 22, 23, 24, 25, 28, + 19, 20, 21, 22, 23, 0, 24, 3, 28, 5, + 3, 4, 24, 25, 7, 8, 29, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 27, + 23, 29, 27, 26, 28, 28, 29, 28, 28, 58, + 59, 28, 3, 4, 28, 6, 7, 8, 9, 10, + 11, 28, 3, 3, 4, 3, 75, 7, 8, 78, + 29, 80, 23, 24, 29, 26, 32, 28, -1, -1, + -1, -1, -1, 23, -1, -1, 26, -1, 28, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, -1, 27, -1, 29, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, -1, 27, -1, + 29, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, -1, -1, -1, 29, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, + -1, -1, 29, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, -1, -1, -1, 29, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, -1, -1, -1, 29, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, + 29, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, -1, 27, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, -1, 27, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 14, 15, 16, 17, -1, -1, 20, 21, 22, + 23, 24, 25, 14, 15, -1, -1, -1, -1, 20, + 21, 22, 23, 24, 25 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const unsigned char yystos[] = +{ + 0, 3, 4, 6, 7, 8, 9, 10, 11, 23, + 24, 26, 28, 31, 32, 34, 35, 36, 37, 28, + 28, 28, 28, 28, 28, 28, 7, 8, 35, 35, + 35, 0, 27, 3, 5, 33, 14, 15, 16, 17, + 18, 19, 20, 21, 22, 23, 24, 25, 29, 35, + 38, 35, 35, 35, 35, 12, 24, 29, 28, 28, + 29, 32, 3, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 27, 29, 29, 27, 29, + 27, 29, 29, 3, 29, 35, 35, 35, 35, 35, + 29, 29, 29 +}; + +#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) +# define YYSIZE_T __SIZE_TYPE__ +#endif +#if ! defined (YYSIZE_T) && defined (size_t) +# define YYSIZE_T size_t +#endif +#if ! defined (YYSIZE_T) +# if defined (__STDC__) || defined (__cplusplus) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# endif +#endif +#if ! defined (YYSIZE_T) +# define YYSIZE_T unsigned int +#endif + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (pParser, "syntax error: cannot back up");\ + YYERROR; \ + } \ +while (0) + +#define YYTERROR 1 +#define YYERRCODE 256 + +/* YYLLOC_DEFAULT -- Compute the default location (before the actions + are run). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + Current.first_line = Rhs[1].first_line; \ + Current.first_column = Rhs[1].first_column; \ + Current.last_line = Rhs[N].last_line; \ + Current.last_column = Rhs[N].last_column; +#endif + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval, pParser) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + +# define YYDSYMPRINT(Args) \ +do { \ + if (yydebug) \ + yysymprint Args; \ +} while (0) + +# define YYDSYMPRINTF(Title, Token, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Token, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (cinluded). | +`------------------------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_stack_print (short *bottom, short *top) +#else +static void +yy_stack_print (bottom, top) + short *bottom; + short *top; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (/* Nothing. */; bottom <= top; ++bottom) + YYFPRINTF (stderr, " %d", *bottom); + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yy_reduce_print (int yyrule) +#else +static void +yy_reduce_print (yyrule) + int yyrule; +#endif +{ + int yyi; + unsigned int yylineno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", + yyrule - 1, yylineno); + /* Print the symbols being reduced, and their result. */ + for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) + YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YYDSYMPRINT(Args) +# define YYDSYMPRINTF(Title, Token, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#if YYMAXDEPTH == 0 +# undef YYMAXDEPTH +#endif + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined (__GLIBC__) && defined (_STRING_H) +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +static YYSIZE_T +# if defined (__STDC__) || defined (__cplusplus) +yystrlen (const char *yystr) +# else +yystrlen (yystr) + const char *yystr; +# endif +{ + register const char *yys = yystr; + + while (*yys++ != '\0') + continue; + + return yys - yystr - 1; +} +# endif +# endif + +# ifndef yystpcpy +# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +static char * +# if defined (__STDC__) || defined (__cplusplus) +yystpcpy (char *yydest, const char *yysrc) +# else +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +# endif +{ + register char *yyd = yydest; + register const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +#endif /* !YYERROR_VERBOSE */ + + + +#if YYDEBUG +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) +#else +static void +yysymprint (yyoutput, yytype, yyvaluep) + FILE *yyoutput; + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + if (yytype < YYNTOKENS) + { + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); +# ifdef YYPRINT + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# endif + } + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + switch (yytype) + { + default: + break; + } + YYFPRINTF (yyoutput, ")"); +} + +#endif /* ! YYDEBUG */ +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +#if defined (__STDC__) || defined (__cplusplus) +static void +yydestruct (int yytype, YYSTYPE *yyvaluep) +#else +static void +yydestruct (yytype, yyvaluep) + int yytype; + YYSTYPE *yyvaluep; +#endif +{ + /* Pacify ``unused variable'' warnings. */ + (void) yyvaluep; + + switch (yytype) + { + + default: + break; + } +} + + +/* Prevent warnings from -Wmissing-prototypes. */ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM); +# else +int yyparse (); +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int yyparse ( SelectParser_t * pParser ); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + + +/*----------. +| yyparse. | +`----------*/ + +#ifdef YYPARSE_PARAM +# if defined (__STDC__) || defined (__cplusplus) +int yyparse (void *YYPARSE_PARAM) +# else +int yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +# endif +#else /* ! YYPARSE_PARAM */ +#if defined (__STDC__) || defined (__cplusplus) +int +yyparse ( SelectParser_t * pParser ) +#else +int +yyparse (pParser) + SelectParser_t * pParser ; +#endif +#endif +{ + /* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + +/* Number of syntax errors so far. */ +int yynerrs; + + register int yystate; + register int yyn; + int yyresult; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + /* Lookahead token as an internal (translated) token number. */ + int yytoken = 0; + + /* Three stacks and their tools: + `yyss': related to states, + `yyvs': related to semantic values, + `yyls': related to locations. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + short yyssa[YYINITDEPTH]; + short *yyss = yyssa; + register short *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + register YYSTYPE *yyvsp; + + + +#define YYPOPSTACK (yyvsp--, yyssp--) + + YYSIZE_T yystacksize = YYINITDEPTH; + + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + /* When reducing, the number of symbols on the RHS of the reduced + rule. */ + int yylen; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. + */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; + + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow ("parser stack overflow", + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyoverflowlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyoverflowlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + short *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyoverflowlab; + YYSTACK_RELOCATE (yyss); + YYSTACK_RELOCATE (yyvs); + +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + +/* Do appropriate processing given the current state. */ +/* Read a lookahead token if we need one and don't already have one. */ +/* yyresume: */ + + /* First try to decide what to do without reference to lookahead token. */ + + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + if (yyn == YYFINAL) + YYACCEPT; + + /* Shift the lookahead token. */ + YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + + /* Discard the token being shifted unless it is eof. */ + if (yychar != YYEOF) + yychar = YYEMPTY; + + *++yyvsp = yylval; + + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + yystate = yyn; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 4: + + { pParser->AddItem ( &yyvsp[0] ); ;} + break; + + case 7: + + { pParser->AliasLastItem ( &yyvsp[0] ); ;} + break; + + case 8: + + { pParser->AliasLastItem ( &yyvsp[0] ); ;} + break; + + case 9: + + { pParser->AddItem ( &yyvsp[0] ); ;} + break; + + case 10: + + { pParser->AddItem ( &yyvsp[-1], SPH_AGGR_AVG, &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 11: + + { pParser->AddItem ( &yyvsp[-1], SPH_AGGR_MAX, &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 12: + + { pParser->AddItem ( &yyvsp[-1], SPH_AGGR_MIN, &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 13: + + { pParser->AddItem ( &yyvsp[-1], SPH_AGGR_SUM, &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 14: + + { pParser->AddItem ( "count(*)", &yyvsp[-3], &yyvsp[0] ); ;} + break; + + case 15: + + { pParser->AddItem ( "weight()", &yyvsp[-2], &yyvsp[0] ); ;} + break; + + case 16: + + { pParser->AddItem ( "@distinct", &yyvsp[-4], &yyvsp[0] ); ;} + break; + + case 18: + + { yyval = yyvsp[-1]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 19: + + { yyval = yyvsp[-1]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 20: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 21: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 22: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 23: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 24: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 25: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 26: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 27: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 28: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 29: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 30: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 31: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 32: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 36: + + { yyval = yyvsp[-3]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 37: + + { yyval = yyvsp[-2]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 38: + + { yyval = yyvsp[-5]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + case 39: + + { yyval = yyvsp[-5]; yyval.m_iEnd = yyvsp[0].m_iEnd; ;} + break; + + + } + +/* Line 991 of yacc.c. */ + + + yyvsp -= yylen; + yyssp -= yylen; + + + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if YYERROR_VERBOSE + yyn = yypact[yystate]; + + if (YYPACT_NINF < yyn && yyn < YYLAST) + { + YYSIZE_T yysize = 0; + int yytype = YYTRANSLATE (yychar); + char *yymsg; + int yyx, yycount; + + yycount = 0; + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + yysize += yystrlen (yytname[yyx]) + 15, yycount++; + yysize += yystrlen ("syntax error, unexpected ") + 1; + yysize += yystrlen (yytname[yytype]); + yymsg = (char *) YYSTACK_ALLOC (yysize); + if (yymsg != 0) + { + char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); + yyp = yystpcpy (yyp, yytname[yytype]); + + if (yycount < 5) + { + yycount = 0; + for (yyx = yyn < 0 ? -yyn : 0; + yyx < (int) (sizeof (yytname) / sizeof (char *)); + yyx++) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + const char *yyq = ! yycount ? ", expecting " : " or "; + yyp = yystpcpy (yyp, yyq); + yyp = yystpcpy (yyp, yytname[yyx]); + yycount++; + } + } + yyerror (pParser, yymsg); + YYSTACK_FREE (yymsg); + } + else + yyerror (pParser, "syntax error; also virtual memory exhausted"); + } + else +#endif /* YYERROR_VERBOSE */ + yyerror (pParser, "syntax error"); + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + /* Return failure if at end of input. */ + if (yychar == YYEOF) + { + /* Pop the error token. */ + YYPOPSTACK; + /* Pop the rest of the stack. */ + while (yyss < yyssp) + { + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[*yyssp], yyvsp); + YYPOPSTACK; + } + YYABORT; + } + + YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); + yydestruct (yytoken, &yylval); + yychar = YYEMPTY; + + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab2; + + +/*----------------------------------------------------. +| yyerrlab1 -- error raised explicitly by an action. | +`----------------------------------------------------*/ +//yyerrlab1: + + /* Suppress GCC warning that yyerrlab1 is unused when no action + invokes YYERROR. */ +#if defined (__GNUC_MINOR__) && 2093 <= (__GNUC__ * 1000 + __GNUC_MINOR__) +// __attribute__ ((__unused__)) +#endif + + + goto yyerrlab2; + + +/*---------------------------------------------------------------. +| yyerrlab2 -- pop states until the error token can be shifted. | +`---------------------------------------------------------------*/ +yyerrlab2: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); + yydestruct (yystos[yystate], yyvsp); + yyvsp--; + yystate = *--yyssp; + + YY_STACK_PRINT (yyss, yyssp); + } + + if (yyn == YYFINAL) + YYACCEPT; + + YYDPRINTF ((stderr, "Shifting error token, ")); + + *++yyvsp = yylval; + + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#ifndef yyoverflow +/*----------------------------------------------. +| yyoverflowlab -- parser overflow comes here. | +`----------------------------------------------*/ +yyoverflowlab: + yyerror (pParser, "parser stack overflow"); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + return yyresult; +} + + + + + +#if USE_WINDOWS +#pragma warning(pop) +#endif + diff --git a/coreseek/csft-4.1/src/yysphinxselect.h b/coreseek/csft-4.1/src/yysphinxselect.h new file mode 100755 index 0000000..5302af7 --- /dev/null +++ b/coreseek/csft-4.1/src/yysphinxselect.h @@ -0,0 +1,84 @@ +/* A Bison parser, made by GNU Bison 1.875. */ + +/* Skeleton parser for Yacc-like parsing with Bison, + Copyright (C) 1984, 1989, 1990, 2000, 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, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + SEL_TOKEN = 258, + SEL_ID = 259, + SEL_AS = 260, + SEL_AVG = 261, + SEL_MAX = 262, + SEL_MIN = 263, + SEL_SUM = 264, + SEL_COUNT = 265, + SEL_WEIGHT = 266, + SEL_DISTINCT = 267, + TOK_NEG = 268, + TOK_LTE = 269, + TOK_GTE = 270, + TOK_EQ = 271, + TOK_NE = 272, + TOK_OR = 273, + TOK_AND = 274, + TOK_NOT = 275 + }; +#endif +#define SEL_TOKEN 258 +#define SEL_ID 259 +#define SEL_AS 260 +#define SEL_AVG 261 +#define SEL_MAX 262 +#define SEL_MIN 263 +#define SEL_SUM 264 +#define SEL_COUNT 265 +#define SEL_WEIGHT 266 +#define SEL_DISTINCT 267 +#define TOK_NEG 268 +#define TOK_LTE 269 +#define TOK_GTE 270 +#define TOK_EQ 271 +#define TOK_NE 272 +#define TOK_OR 273 +#define TOK_AND 274 +#define TOK_NOT 275 + + + + +#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) +typedef int YYSTYPE; +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +# define YYSTYPE_IS_TRIVIAL 1 +#endif + + + + + diff --git a/coreseek/csft-4.1/test/Makefile b/coreseek/csft-4.1/test/Makefile new file mode 100755 index 0000000..9ee6a97 --- /dev/null +++ b/coreseek/csft-4.1/test/Makefile @@ -0,0 +1,17 @@ +all: +install: +install-strip: +uninstall: +TAGS: +info: +dist: + +check: + php ubertest.php t -u test + +clean: + sh clean.sh + +distclean: clean +mostlyclean: clean +maintainer-clean: clean diff --git a/coreseek/csft-4.1/test/bench-results/stub.txt b/coreseek/csft-4.1/test/bench-results/stub.txt new file mode 100755 index 0000000..604bd9e --- /dev/null +++ b/coreseek/csft-4.1/test/bench-results/stub.txt @@ -0,0 +1 @@ +This is stub file to force Mercurial to keep this folder in it's repository. \ No newline at end of file diff --git a/coreseek/csft-4.1/test/bench.php b/coreseek/csft-4.1/test/bench.php new file mode 100755 index 0000000..fad4090 --- /dev/null +++ b/coreseek/csft-4.1/test/bench.php @@ -0,0 +1,618 @@ + array(), + 'sources' => $sources, + 'versions' => array ( $data[0]['version'], $data[1]['version'] ), + 'checksums' => $data[0]['hash'] == $data[1]['hash'], + ); + + if ( count($data[0]['results']) != count($data[1]['results']) ) + Fatal ( "unable to produce the report, result set sizes mismatch" ); + + $combined = array(); + $skip = array(); + foreach ( $data as &$set ) + { + $out = array(); + for ( $i=0; $i $tag, + 'time' => 0, + 'total' => 0, + 'total_found' => 0 + ); + } + + $row['time'] = (float)$row['time']; + $out[$tag]['time'] += $row['time']; + $out[$tag]['total'] += $row['total']; + $out[$tag]['total_found'] += $row['total_found']; + } + $combined[] = $out; + } + + if ( array_keys($combined[0]) != array_keys($combined[1]) ) + Fatal ( "unable to produce the report, tag sets mismatch" ); + + $report['aggregate'] = sphCompareSets ( array ( array_values ( $combined[0] ), + array_values ( $combined[1] ) ) ); + + $report['detailed'] = sphCompareSets ( array ( $data[0]['results'], + $data[1]['results'] ) ); + + return $report; +} + +//////////////////////////////////////////////////////////////////////////////// + +function sphTextReport ( $report ) +{ + global $g_locals; + $mode = $g_locals['mode']; + + $width = array (); + $header = array ( 'query', 'time', 'total', 'total found' ); + + foreach ( $header as $title ) + $width[] = strlen($title); + foreach ( $report[$mode] as $row ) + { + if ( count($row)==1 ) continue; + for ( $i=0; $i<4; $i++ ) + { + $len = min ( strlen($row[$i]), 40 ); + $width[$i] = max ( $width[$i], $len ); + } + } + + printf ( "COMPARING: %s - %s\n", $report['versions'][0], $report['sources'][0] ); + printf ( " %s - %s\n", $report['versions'][1], $report['sources'][1] ); + + if ( !$report['checksums'] ) + printf ( "WARNING: checksum mismatch, results might be incorrect\n\n" ); + + if ( $mode=='aggregate' ) printf("\n"); + $restart = true; + foreach ( $report[$mode] as $row ) + { + if ( count($row)==1 ) + { + printf("\n"); + $w = str_repeat ( '=', ( array_sum($width) + 9 - strlen($row[0]) ) / 2 ); + printf ( " %s %s %s\n", $w, $row[0], $w ); + $restart = true; + } + if ( $restart ) + { + for ( $i=0; $i<4; $i++ ) + printf ( ' %s', str_pad ( $header[$i], $width[$i] + 2, ' ', STR_PAD_BOTH ) ); + printf("\n"); + for ( $i=0; $i<4; $i++ ) + printf ( ' %s', str_repeat ( '-', $width[$i] + 2 ) ); + $restart = false; + printf("\n"); + } + if ( count($row)==4 ) + for ( $i=0; $i<4; $i++ ) + { + $text = $row[$i]; + if ( strlen($text) > 40 ) + $text = substr ( $text, 0, 37 ) . '...'; + if ( $i>1 ) + $text = number_format ( $text, 0, '', ' ' ); + printf ( ' %s', str_pad ( $text, $width[$i] + 2, ' ', STR_PAD_LEFT ) ); + } + printf("\n"); + } + + if ( !count ( $report[$mode] ) ) + printf ( "empty report.\n" ); + +} + +//////////////////////////////////////////////////////////////////////////////// + +/// erases rt index +function EraseRtIndex ( $path, $name ) +{ + $fp = opendir ( $path ); + + if ( $fp ) + { + $name .= '.'; + while ( ( $file = readdir ( $fp ) ) !== false ) + { + if ( $file != "." && $file != ".." && !is_dir ( $file ) && strripos ( $file, $name ) !==false ) + unlink ( "$file" ); + } + + closedir ( $fp ); + } +} + +//////////////////////////////////////////////////////////////////////////////// + +/// returns results file name on success; false on failure +function sphBenchmark ( $name, $locals, $force_reindex ) +{ + // load config + $config = new SphinxConfig ( $locals ); + if ( !( $config->Load ( "bench/$name.xml" ) && CheckConfig ( $config, $name ) ) ) + return false; + + global $g_locals; + $g_locals['rt_mode']= $config->Requires('force-rt'); + + // temporary limitations + assert ( $config->SubtestCount()==1 ); + assert ( $config->IsQueryTest() ); + + // find unused output prefix + $i = 0; + for ( ; file_exists("bench-results/$name.$i.bin"); $i++ ); + $output = "bench-results/$name.$i"; + + printf ( "benchmarking: %s\n", $config->Name() ); + + // grab index names and paths + $msg = ''; + if ( !$config->IsRt() ) // enable only in non rt-mode + $config->EnableCompat098 (); + $config->WriteConfig ( 'config.conf', 'all', $msg ); + $indexes = array(); + $text = file_get_contents('config.conf'); + preg_match_all ( '/index\s+(\S+)\s+{[^}]+path\s*=\s*(.*)[^}]+}/m', $text, $matches ); + for ( $i=0; $i $path ) + { + printf ( "index: %s - ", $indexName ); + if ( $config->IsRt() && $force_reindex ) + EraseRtIndex ( $locals['data'], $path ); + + if ( !$config->IsRt() && ( !is_readable ( "$path.spa" ) || !is_readable ( "$path.spi" ) || $force_reindex ) ) + { + printf ( "indexing... " ); + $tm = MyMicrotime(); + $result = RunIndexer ( $error, $indexName ); + $tm = MyMicrotime() - $tm; + if ( $result==1 ) + { + printf ( "\nerror running the indexer:\n%s\n", $error ); + return false; + } + else if ( $result==2 ) + printf ( "done in %s, there were warnings:\n%s\n", sphFormatTime($tm), $error ); + else + printf ( "done in %s - ", sphFormatTime($tm) ); + } + if ( !$config->IsRt() ) + { + $hash = array ( 'spi' => md5_file ( "$path.spi" ), + 'spa' => md5_file ( "$path.spa" ) ); + printf ( "%s\n", $hash['spi'] ); + } + else + { + $hash = array ( 'xml'=>md5_file ("bench/$name.xml") ); + printf ( "%s\n", $hash['xml'] ); + } + } + + // start searchd + if ( !$locals['skip-searchd'] ) + { + $result = StartSearchd ( 'config.conf', "$output.searchd.txt", 'searchd.pid', $error ); + if ( $result==1 ) + { + printf ( "error starting searchd:\n%s\n", $error ); + return false; + } + else if ( $result==2 ) + printf ( "searchd warning: %s\n", $error ); + } + + // run the benchmark + $isOK = false; + if ( $config->IsSphinxqlTest () ) + $isOK = $config->RunQuerySphinxQL ( $error, true ); + else + $isOK = $config->RunQuery ( '*', $error, 'warming-up:' ) && + $config->RunQuery ( '*', $error, 'profiling:' ); + + if ( $isOK ) + { + $report = array ( + 'results' => array(), + 'time' => time(), + 'hash' => $hash, + 'version' => GetVersion() + ); + $i = 0; $q = null; $last = ''; + foreach ( $config->Results() as $result ) + { + if ( $config->IsSphinxqlTest () ) + { + if ( $result['sphinxql']=='show meta' ) + { + $report['results'][] = + array ( 'total' => $result['rows'][0]['Value'], + 'total_found' => $result['rows'][1]['Value'], + 'time' => $result['rows'][2]['Value'], + 'query' => $last, + 'tag' => $last ); + } + $last = $result['sphinxql']; + } else + { + if ( $result[0] !== $q ) + { + $i = 0; + $q = $result[0]; + } + $query = $config->GetQuery ( $q ); + $report['results'][] = + array ( 'total' => $result[1], + 'total_found' => $result[2], + 'time' => $result[3], + 'query' => $query['query'][$i++], + 'tag' => $query['tag'] ); + } + } + file_put_contents ( "$output.bin", serialize ( $report ) ); + printf ( "results saved to: $output.bin\n" ); + } + else + printf ( "\nfailed to run queries:\n%s\n", $error ); + + // shutdown + StopSearchd ( 'config.conf', 'searchd.pid' ); + + // all good + return $output; +} + +//////////////////////////////////////////////////////////////////////////////// + +/// pick $count freshest run files for $bench benchmark +function PickFreshest ( $bench, $count ) +{ + // traverse results dir for $bench.RUNID.bin + $found = array(); + $dh = opendir ( "bench-results" ); + if ( $dh ) + { + while ( $entry = readdir ( $dh ) ) + { + if ( substr ( $entry, 0, 1+strlen($bench) )!==$bench."." ) + continue; + if ( substr ( $entry, -4 )!==".bin" ) + continue; + + $index = (int)substr ( $entry, 1+strlen($bench) ); + $found[$index] = "bench-results/$entry"; + } + closedir ( $dh ); + } + + if ( !$found ) + return null; + + ksort ( $found ); + return array_slice ( array_values ( $found ), -$count ); +} + + +/// lookup run file by name, doing some common guesses +function LookupRun ( $name ) +{ + // try full BENCH.RUNID guesses first + $found = null; + + foreach ( array ( $name, "$name.bin", "bench-results/$name", "bench-results/$name.bin" ) as $guess ) + { + if ( is_readable($guess) ) + { + $found = $guess; + break; + } + } + + // try pick the freshest one by bench name next + if ( !$found ) + list($found) = PickFreshest ( $name, 1 ); + + // still not found? too bad + if ( !$found ) + Fatal ( "no run files for '$name' found" ); + + return $found; +} + + +function BenchPrintHelp ( $path ) +{ + print << [OPTIONS] + +Commands are: + b, benchmark BENCH benchmark (and store run result) + bv BENCH benchmark, view run result + bb BENCH (forcibly) build index, benchmark + bbv BENCH (forcibly) build index, benchmark, view run result + c, compare BENCH compare two latest run results of given benchmark + c, compare BENCH RUNID1 RUNID2 + c, compare BENCH.RUNID1 BENCH.RUNID2 + compare two given run results + t, try BENCH benchmark, view, but do not store run result + v, view BENCH.RUNID view given run result + +Examples: + bench.php b mytest run 'mytest' benchmark + bench.php v mytest view latest 'mytest' run result + bench.php v mytest.4 view 4th 'mytest' run result + bench.php c mytest 3 7 + bench.php c mytest.3 mytest.7 + compare runs 3 and 7 of 'mytest' benchmark + +EOT; +} + + +function AvailableBenchmarks () +{ + $dh = opendir ( "bench" ); + if ( !$dh ) + return; + + $avail = array (); + while ( $entry = readdir ( $dh ) ) + if ( substr ( $entry, -4 )===".xml" ) + $avail[] = substr ( $entry, 0, -4 ); + + closedir ( $dh ); + return join ( ", or ", $avail ); +} + + +function Main ( $argv ) +{ + if ( count($argv)==1 ) + { + BenchPrintHelp ( $argv[0] ); + return 0; + } + + $mode = null; + $files = array(); + $locals = array(); + + // parse arguments + $force_reindex = false; + $view_results = false; + $unlink_run = false; + + for ( $i=1; $i + + +fullscan + + +indexer +{ + mem_limit = 128M +} + +searchd +{ + +} + +source fullscan +{ + type = mysql + + + sql_query = select id, value, text from fullscan + sql_attr_uint = value +} + +index fullscan +{ + source = fullscan + path = data/fullscan + docinfo = extern +} + + + + dummy + dummy + dummy + + + + + + diff --git a/coreseek/csft-4.1/test/bench/ljq1k.txt b/coreseek/csft-4.1/test/bench/ljq1k.txt new file mode 100755 index 0000000..3b0d32a --- /dev/null +++ b/coreseek/csft-4.1/test/bench/ljq1k.txt @@ -0,0 +1,1000 @@ +cincinnati +radio nueva vida +strange bedfellows ron hermione +channel +thumbsucker +ayu +poetry +books +loans +maribel guardia desnuda +did you feel the mountain tremble chord +abante tonigth +s video camera +concrete +k rations +bini orang +2 +downloads +tutorial +otp bank hu +hand heart london ribbon silk +kc concepcion +biography help home work +araujo fhotos free patricia shemale +jawatan kosong jabatan kerja raya +yuri and friends hentai +tuya soy +boa korean lyric +blue cross blue shield of alabama +jawatan kosong jabatan kerja raya malaysia +outstation dgn isteri orang +araujo photos free patricia shemale +bugil cewek galeri gambar +jaqueline santarem nua +layout for livejournal +index of mp3 death cab +96 friend yuri +situs cerita dewasa +bristol line news papers tennessee +cerita dewasa indonesia terbesar +gambar anjing +beach happy holiday motel myrtle +anak dara melayu +butterfly +job news post +campo +behan ki chudai +jane +part +free black shemale movie +us state department travel advisory +electric +nyohah +snow +shia icons +i feel my savior love +cyndi ling video wang xin +foto artis malaysia +aa +dodge ram tough 200 +holidays music +add to our guest book +won ton recipe +teenel com +final fantasy x 2 intro movie +curley david +home fashions +april 8 solar eclipse +free real ringtones +burn easy fat +marionette +kad jemputan perkahwinan +cocktail +google reincarnation +foto tante girang +in tua nua +free lanas big boob +taylor +abg bugil +gaim golf +the calling wherever you may go +codavr +add book finance guest personal record +cameras +african drum samba +wanna sexy +jason +movie +midnight club 3 dub edition +avenged sevenfold logo +songc +firex smoke alarm instruction manual 120 1182 +chamber coltrane garland john paul red +ufo +cheung po tsai +contoh kad jemputan kahwin +tree climbing boot +muurbloempjee +burit ketat +genrechallenge +persatuan pengguna pulau pinang cap +design +business adsl +xxnx +essay +acres lucky qh +intel 8086 data sheet +huan zhu ge ge lyric +fan fiction twincest bill e tom +baju dewi gambar kemben persik +download indian music urdu +defaults +knowledge base +course +she want a pearl necklace +china town in san francisco +ryuk raito +france +chordtuner +pictures of sex +la bi xiao xin +gratis ting.dk +pictures +star this week +fiji diving +pms bloating +pertama kali cium +kate moss +ambasada amerykanska w warszawie +jamin 94.5 radio station +lawrence moreland +malam pengantin +aire fan minka +ahly egypt +abante una sa balita +film photo star tamil vijay wedding +cerita seks pertama kali +anything that is funny site myspace.com +t.j.tyne +florence morning news +consumption junction adult humor +corn +space jam +ambasada amerykanska w polsce +beverage +nom 009 stps 1993 +illinois +tumbler set +foto bugil mahasiswi indonesia +times of india +kehidupan pramugara yang terlampau +coffee +samples +i gave him head +hip hop +nanawrimo +add book dating guest online record +download scruffs bdstudiogames +dieting +newport +rahsia rahsia tahi lalat wanita +smu bugil +funny myspace.com shit site +auburn +add book book by created guest guest matt our script wright +care +feudalism breakdown +land for sale in catskills +sturm ruger co +novels fiction +low voltage outdoor lighting +stroll o chair +actresses +50 pills +italyfilez +cal poly fraternity +www poisk ru +harga mobil baru +tattoos +legal free music downloads +daily fantasy football telegraph +planning +maksud tahi lalat +add bad book credit guest mortgage record refinance +2005 gmc yukon +ghetto quotes about stupid love +wholesale tart burner +body found unidentified +boxing +create new email id +used +free full version worm game download for nokia +intel 8086 +famosos desnudos +bapes size 7 +monkey new toy +fifty pills +tamil actress sex +photo bugil ayu azhari +defconone +boobs +final fantasy simdate rpg cheat codes +earrings +jayalalitha naked photos + fifty pills +south carolina bed breakfast +rong fu +1 3 ethanol nitrophenyl +earth our rotating view +trisha bathing clips video +dowload msn 7.0 +teachers +indian +4d +trisha bathing clip +witch craft love spells +chumscrubber +tech +8086 machine code pdf +candle wick +tagalog love phrase +book ebay half +kino govno.ru +x_kyuuketsuki +kids small recoil pads +affairs +bersetubuh +book comment guest inurl post site uk +pokemon leaf green free download +julie berry +snap on racing +sabong video +tohshimari +boat insurance +airferg +feather masks +space jam movie online free +no bake cheese cake +too short lyric +concerts and events +weight +ryuusei, moriay +free easy spells +sun java downloads +tanggal 29 desember 2007 +actresses naked +girlfriend +ryuusei, moriya +chaussures mode +loss +xunny +hindi sex stories +? www.pag ibig.gov.ph +www tv ru +quote thank +11 +no bake cheese cake recipe +grandiva1968 +stance +togel tanggal 29 desember 2007 + honey and clover icons +apple blossom winchester va +institusi kemahiran belia negara +collision damage waiver +comstock advancing technology +vic reeves house arrest +kekekekekekeke +blackmail domme +exercise bikes +lipstick +ytl power +vetinari icons +ivanafukalot movie +double trouble game +lyndsey dawn mckenzie +rabilover4ever +pdf +dean sam dylan danny +final fantasy simdate rpg cheat +gambar lucah artis malaysia +anak sma bugil +stuffed animals +pig feed +les fils du vent +whips +modeling +bugil gadis photo sma smp +chat java room +forever inuyasha kagome love +cerita panas +puffie nipples +download +situs dewasa indonesia +dang hoa +day die they until +17tahun com situs cerita dewasa indonesia terbesar +add book buying guest home record +real hunted house +u haul rentals +free shocking video +kool +serial seeker +creepy freak +elishavah +rossiu simon +fully connected topology +sasuke karin fic +audrina +spy kids +hindi non veg jokes +digital devil saga +ottawa +the weather channel.com +puffier nipples +web design and development +cerita seks lelaki melayu +chemistry +cloud rufus +nano pet chia pet +developers +dean sam john bobby mpreg +cipap aku +blackmail mistress +story +meme +news +test +maestro +156 +truth dare chapter +educativa +mx vs atv unleashed +dear daniel +tracyeinny +kieranrees +perfect +adbkulman +xxx +desnudos foto gratis hombres video y +card court game rule whist +agnes b clothing +kuda 4d result +katherine von drachenberg +comment comment inurl org post site +cerita dewasa +accommodation +plot of dead stars by paz marquez benitez +zakupy +national treasure riley +regal cinemas 16 +0 point soup watcher weight +pixel +initial +korea bugil +kat von d +barbarella movie clip +gambar pantat anak dara +revenu.gouv.qc.ca fr ministere index.asp +znajomi,puchoni +i +z movie +egemenhoca +hotmail sign in +mychemicalslash +ice cream treat +17tahun blogspot +darn 2 +beastility +400 080 +cerita mama selingkuh +zakupy agd +coat west gv +beastility story +first word +kosmos8 +sadler oxford vocabulary workshop level f answer +nancy grace biography +not pantie wearing +badpet +100 free black dating site +numerologist.com +the earth is not a cold lonely place download +cewe smu bugil +relatos filiales +find patience strong cards +laminators +it tech +lib aldebaran +helicopter hind +tetek awek +free beastility movie +did you know that 80% of ucsd students could not find the error above? +pantat anak dara +zakupy ze sklepu +eye exam +build entertainment home own pc system +video hantu pontianak +badfic_quotes +gambar tanda kebesaran allah +yuki kajiura mp3 +download_images +polich +free taboo movie +download hindi vedio songs +rumah untuk disewa +by creech sharon wanderer +north +tokyo odaiba +how to write a admission letter for college +gambar keajaiban allah swt +grzewgorz napieralski,pis +ryeo wook +aunty chudai hindi in ko story +world polska zakupy +kelentit amoi +prxy +chudai hindi in ki ma meri nangi +znajomi,urodziny + peeping tom preschool +igif gouv qc ca +nod 32 download +free sample of college admission letter +gambar kebesaran allah swt +macmillan publishing company +world expo +free chatline numbers +yahoo map +asian +unblocker school +free softwares +loli links +celulares moviles juegos +bridget bardot pic +www oferta educativa sena edu com +boo +cheap flights +watch bet uncut music videos +macmillan publishing +wather .com +bangla choti golpo +mid century insurance texas +stolen photo +spa tub +hillsong united chords +doh state fl +beinmotion +fetus development +lex terry.com +go necta result tz +lloyd banks the big withdraw +debitha +hbc reward +ways to say i love you +ilmu dalam islam +desi humor +hilda kovacq +out tonight +macmillan mcgraw hill.com +hospital +artis shari ayu bugle indonesia +south carolina +magic kinder +converter wmv +bangladeshi choti +learn english +kinky twist pics +alpha lipoic +jea +yoube +tracfone refer a friend +speaker +www magic kinder com +choti online +www project playlist com +indian passport status check +arts humanities +book comment guest inurl org post site +http images google com +shoes +electronic music +stereo headphones +suncoast schools fcu +rockstarlexi +volcano for kid +snail mail pen pal +business wholesale +little girl nudity +tamil songs free download +testy z matematyki +credit loan people poor working +mpx220 problem +meraba tetek +surverys for myspace +zelda minish cap walk through +amg +whistler village accommodation +de fotos mujeres peludas +gay cam free +twilight posters wallpapers +dat viet +pbs kids ord +chantal kreviazuk feel like home lyric +free download gujarati songs +mujeres peludas gratis +the_bitchcave +myspace random surveys +makes me crinkle my nose where ever it goes i always know that you make me smile please stay for a while now just take your time where ever you go +schenkel +bhabhi ki chudai +jackson +mother of the groom dress +anak smu bugil +ripleys believe or not +forever yours mother of the groom dress +comics conventions +tj maxx job application +aaliyah i refuse +louie viton bag +michigan secretary of state +work at home guide directory +3 +brush stroke +sin city comic scan +gambar bencana tsunami +plus size mother of the groom dress +herbal body wrap +famosos nus +karen kaye fox sports radio +dvd wizard pro free download +resultados de la loteria nacional mexico +uverworld +wsb channel 2 +davids bridal +jeannette_sg +the kinks mp3 +book com comment guest inurl post site +ambien addiction +kitchen design online +penny saver +indian traffic exchanges +hours michigan secretary state +windows xp +_u +book check printable register +james lipton +delhi mms clip download +retreat +runaway bay jamaica villa +photo abg bugil +jetplane +kiddie kandids +rentals +free rental aggreements +create new id in yahoo +david s bridal +riesentitten +wal mart job application +fa +shinigamis lot +jrock pv download +__fierce_elite +beautiful dj lyric things tiesto +machine necchi part sewing +kisah kena rogol +lordcenon +dog health +rachel +chinese invitation word +coyote e wile +dating +wal mart employee application +free rental agreement form +band wasp +gambar anak smu telanjang +tamil actress +easy key lime pie +musica para celulares gratis +hotelkamer +web content management system +big 5 sporting goods +bugil pondok putri +davids bridal prom dress +project runway +am i way +rates +board election result school wauwatosa +takeru +nude pics of nigar khan +play station game code and cheat +jdrama +dennis goode james ma r +bearhug cat fight +methotrexat,cytotec +olsen twins undress +lawn +fill in the blank below to add to our guest book +free resco keyboard pro v4 36 +minneapolis renaissance festival +meninos pelados +rosetta stone foreign language +nagie nastolatki +threats sinn fein +dream weaver tutorial +ferari.jpg +doggans87 +ona zee pic +web site traffic for sale +fotos mujeres desnudas +dakota in south weather yankton +free house rental agreement form +clapping gif +megaupload post rock +potzak +omphalos +bezrobocie w polsce +harkins theather +jawatan kosong kerajaan di putrajaya +amys live journal help +100dagen +yahoo parental control +voelde +hun sex yellow pages +famoso +camera google laski nagie ukryta +gift and decorative +games4girls +sample bank secrecy act quizzes +welcome sprays confett +cerita rogol melayu +quiz on u s time zone +mammatje +claudia schiffer +philharmonic wroclaw +cara pakai tudung +sign our guest book +country +nokia 6230i theme +persuade someone something +local +leo mikey +tj maxx application +free myspace background +weld o let +psa dna +sony ericsson s700i +alfred vargas +www big lots store +soal uan smp +kai +kan niet +slum village fantastic volume 1 +chemax 4.6 rus +rental +slim again plus +paginas para descargar juegos musica imagenes para celular gratis +fontella +dreaming +how to make a xylophone +1 credit golden union +boy change girl into pretty transform witch +tj maxx application in milwuakee +gambar gadis berjilbab telanjang +milena velba milk video +cat fight tit twisting +trisha krishnan bath video clip +ciencia concurso convocatoria desde la leer mexico nacional +goong ost lyrics +maunder wayne +ebook free seduction +long puffy nipples +san pablo storage +yaoicon +che max 4 6 rus +weahter +pork skewer +christopher columbus villain +best free porn videos +brandeis +fix golf slice +rozmowy w toku.com.pl +medical +telco +from hope learn live today tomorrow yesterday +power rangers fonts +bank soal +15k 17k artis foto indonesia telanjang +q931 +adolescentes bragas +mp3 muzik +freeexperianreport +jannekeleber +floral +ml +spi +daily record wooster +online credit report +noli tangere +fantasy +yilin +huge tit +pinjaman peribadi bank rakyat +olempia nk 2121 +muzike shqip mp3 +bragas transparente +gundam 00 +trisha krishnan bath download +school +download free ipod music shuffle +muzik shqip +career crusing +girle +window media player download +tanzania go tz +vid +pinjaman peribadi +myspace site unlocker +how tall ben kweller is +missouri +cerita ganas +bogel gambar malaysia noritta samsudin +jessica alba +sueprano +top 10 mujeres peludas +smp soal uan +microsoft update window xp +anarchy cook book +foto bugil siswi smu +unnatural inquirer +100 concert years +verizon net sharing +romance +122 +voter +dry +how tall is ben kweller +17 belle fanfic nc shawn +xnotquitedeadx +gambar kote lelaki melayu +free credit report from experian +add book guest reading record tarot +soal soal uan +men s +muzike ship mp3 +b k +candian lottery +free mp3 veer zara main yaha hoo download +audi a4 front mount intercooler +asou sanae +osama dubaitv.ae +necchi sewing machine +airlines +blue green saucony +2007 saturn sky +computer wont post +3d animation download free software +art charity fund raiser +fen bilgisi tr +goal +hayat bilgisi tr +lost friends +child care +sanae asou +nightside +club heaven nyc +lbc +novy cas +department recreation wauwatosa +s100x100 +cinema +elmwood park shooting +john reid +kristen1818 +golf +advance boy codebreaker game +pokemon cheats +pinjaman peribadi bank rakyat malaysia +audra marie model plus size +2005 soal uan +amamos travesti +nokia 3250 themes +cerita pengalaman seks +2005 bank soal uan +free verizon wireless ring tone +tmnt +summary of noli me tangere +desi chudai k +malayalam sex actress +indiana jones soundtrack download +20000501 +autoscout 24 ch +word of the day +eda +wherever you are lyric south border +20000 +2005 soal soal uan +emc +feelshiny +artis bugil +soal soal matematika +sole mio lyric +cellone usa.com +kaltesherz +eun kyung shin +tmnt mikey +ingrid vandebosch +opposites +big fat quiz of the year +scale +pdrm saman malaysia +gambar siti nurhaliza +keke wyat +wallpaper tvxq +foto bugil indonesian +pinjaman modal +affiliate exchange foreign program trading +quiz of the year +insurgent blog +joey +tante girang di indonesia +cerita di ngentot pondok putri +tanning bed tooth whitener +puffy nipples gallery +tanning bed teeth whitener +michaelcuckseek +carrier hvac +wmv codec +puritan slacks +lexmark +fashion +mga kwentong pag ibig +young puffy nipples +mikey toaster het +nunchuck king +convert celsius +nj doc +wwwautoscout 24 de +lolita pictures +partition magic 8.rar +gambar abg bugil +vacationstogo +reagle cinima +pekao 24 pl +curriculum +colt commander +ontherocks83 +shinigami s lot +torrie wilson photo +borders book store +www borders book store com +takumi kun tomo yanagishita +red light +faith xander +cerita seks ganas +cann +mercurio +reagle cinamas theater +hvr 1000u +stefw +zulu time chart +bz wbk 24 pl +cerita ngentot di pondok putri +ich roque +8 year old boy toy +poze porno +reagle movie theater +summer time mp3 +osu okc +chicken enchalada ring pampered chef +st anthony prayer for lost item +doorgeschakeld +zaire foods +nj.doc.com +undertaker theme music +pampered chef taco ring +angel card post wink +aku mengulum ayahku +galerias de mujeres peludas +koleksi gambar siti nurhaliza +akihiko mitsuru +just another school day +fosters home for imaginary friends +drama in korean lover paris soundtrack +cliffs notes for the book 10 things to do before i die +solilla center creative +back seat bangers +rza +thrown in for birthday +partes de un monitor +bluh +i will always love you +anime download torrent +bnf +attorney +mutiara kata cinta +peeping tom video +verizon.net sharing +koleksi mutiara kata +dsl start verizon.net +baby first year album +byron kari mythbusters pic +baby shower invitation wording +yoosu nc 17 +dzien po +fotos de pauline crespo +movie qoutes +add kilimanjaro link trek +ayu azhari.com foto panas +ks +job letter thank +video +hot pants tgp +bath download krishnan trisha +kat tun posters +bible black anime free download +kpnemo +lubbock texas showplace 6 +early childhood education +brown stove works inc +gry jeje +makoto muramatsu sensei +bit torrent movie download +antwerp gsfc.nasa.gov apod astropix html +forever21 om +ca 19 9 +hp5 +maricopa county jail mug shot +drum +duna tv hu +bosch windshield wiper +furnace troubleshooting +sociology issue +glacier bay boat +nbc today show +gambar anak dara +rahsia tahi lalat +memek tante +anak smu +krishnan trisha video +bien mujeres peludas +900 23 +kinto sol +artis indonesia photo telanjang +tokio_hotel_ru +business more slice wrest +tsk com tr +canadian tire ca +cow pie blues festival +how to find someone elses ip address +just ask geeves +yahoo sports fantasy football +free pron +free cut and paste activity +violently happy +mount fuji restaurant new york +izuna doujin +pirates legal canons +be9 +fesyen muslimah +cloud code codebreaker dark +gambar kote +super mario advance 4 rom +national child dental health month +education preschool +electronic disease +lucienad +mobile phones +avpme +organized +codebreaker download +bizzaro dr library movie +codebreaker green leaf pokemon +codebreaker ps2 download +chen kelly love paradise +comic nintendo sprite +colegio san agustin makati +danger etro anime download +dr bizzaro com +gambar bogel nasha aziz +dating guy younger +dbz doujins +florida key destination wedding +game copy world +whirl a gigs +leviosarpg +come shop wit me +dr bizzaro 100 free +unseen japan +martin demichelis +vileseagulls +cra +dont worry be happy +todo cvcd +action figures +chapter 7 bankruptcy information +download free metallica mp3 +gres +chudai ladki ki +pan malaysia big sweep result +channel disney +ecco diff --git a/coreseek/csft-4.1/test/bench/match-modes.xml b/coreseek/csft-4.1/test/bench/match-modes.xml new file mode 100755 index 0000000..651e4d2 --- /dev/null +++ b/coreseek/csft-4.1/test/bench/match-modes.xml @@ -0,0 +1,45 @@ + + + +match modes + + +indexer +{ + mem_limit = 128M +} + +searchd +{ + +} + +source lj +{ + type = mysql + + + sql_query = select id, \ + title, uncompress(content) content, \ + unix_timestamp(published) published, channel_id \ + from posting \ + where id <= 1000000; + + sql_attr_uint = channel_id + sql_attr_timestamp = published +} + +index lj +{ + source = lj + path = data/lj +} + + + + + + + + + diff --git a/coreseek/csft-4.1/test/bench/quorum-or.xml b/coreseek/csft-4.1/test/bench/quorum-or.xml new file mode 100755 index 0000000..8e1b0ac --- /dev/null +++ b/coreseek/csft-4.1/test/bench/quorum-or.xml @@ -0,0 +1,48 @@ + + + +quorum vs or + + +indexer +{ + mem_limit = 128M +} + +searchd +{ + +} + +source lj +{ + type = mysql + + + sql_query = select id, \ + title, uncompress(content) content, \ + unix_timestamp(published) published, channel_id \ + from posting \ + where id <= 1000000; + + sql_attr_uint = channel_id + sql_attr_timestamp = published +} + +index lj +{ + source = lj + path = data/lj +} + + + + one|two|three|four + nine|ten + five|six|seven|eight + "one two three four"/1 + "nine ten"/1 + "five six seven eight"/1 + + + diff --git a/coreseek/csft-4.1/test/bench/reset.xml b/coreseek/csft-4.1/test/bench/reset.xml new file mode 100755 index 0000000..c1ea9e6 --- /dev/null +++ b/coreseek/csft-4.1/test/bench/reset.xml @@ -0,0 +1,38 @@ + + + +RT:Ranker reset vs NEAR + + + + + + + +indexer +{ + mem_limit = 32M +} + +searchd +{ + +} + +index rt +{ + type = rt + path = data/rt + rt_attr_uint = id1 + rt_field = title +} + + + +insert into rt (id, id1, title) values (1, 1, 'test text') +insert into rt (id, id1, title) values (2, 2, 'testy texts') +select * from rt +select * from rt where match('\"the\" NEAR/15 \"home\" | \"one\" NEAR/15 perfume | \"one million\" NEAR/15 perfumes | \"one million\" NEAR/15 fragrance | \"one million\" NEAR/15 fragrances | \"one million\" NEAR/15 cologne | \"one million\" NEAR/15 essence | \"one million\" NEAR/15 aroma | \"one million\" NEAR/15 scent | \"one million\" NEAR/15 scents | \"one million\" NEAR/15 balm | \"one million\" NEAR/15 balms | \"one million\" NEAR/15 odor | \"one million\" NEAR/15 odour | \"one million\" NEAR/15 smell | \"one million\" NEAR/15 fragrant | \"one million\" NEAR/15 flavour | \"one million\" NEAR/15 flavor | \"one million\" NEAR/15 flavours | \"one million\" NEAR/15 flavors | \"one million\" NEAR/15 \"eau de toilette\" | \"one million\" NEAR/15 \"shower\" \"one million\" NEAR/15 fragrances | \"one million\" NEAR/15 cologne | \"one million\" NEAR/15 essence | \"one million\" NEAR/15 aroma | \"one million\" NEAR/15 scent | \"one million\" NEAR/15 scents | \"one million\" NEAR/15 balm | \"one million\" NEAR/15 balms | \"one million\" NEAR/15 odor | \"one million\" NEAR/15 odour | \"one million\" NEAR/15 smell | \"one million\" NEAR/15 fragrant | \"one million\" NEAR/15 flavour | \"one million\" NEAR/15 flavor \"the\" NEAR/15 \"home\" | \"one\" NEAR/15 perfume | \"one million\" NEAR/15 perfumes | \"one million\" NEAR/15 fragrance | \"one million\" NEAR/15 fragrances | \"one million\" NEAR/15 cologne | \"one million\" NEAR/15 essence | \"one million\" NEAR/15 aroma | \"one million\" NEAR/15 scent | \"one million\" NEAR/15 scents | \"one million\" NEAR/15 balm | \"one million\" NEAR/15 balms | \"one million\" NEAR/15 odor | \"one million\" NEAR/15 odour | \"one million\" NEAR/15 smell | \"one million\" NEAR/15 fragrant | \"one million\" NEAR/15 flavour | \"one million\" NEAR/15 flavor | \"one million\" NEAR/15 flavours | \"one million\" NEAR/15 flavors | \"one million\" NEAR/15 \"eau de toilette\" | \"one million\" NEAR/15 \"shower\" \"one million\" NEAR/15 fragrances | \"one million\" NEAR/15 cologne | \"one million\" NEAR/15 essence | \"one million\" NEAR/15 aroma | \"one million\" NEAR/15 scent | \"one million\" NEAR/15 scents | \"one million\" NEAR/15 balm | \"one million\" NEAR/15 balms | \"one million\" NEAR/15 odor | \"one million\" NEAR/15 odour | \"one million\" NEAR/15 smell | \"one million\" NEAR/15 fragrant | \"one million\" NEAR/15 flavour | \"one million\" NEAR/15 flavor') + + + diff --git a/coreseek/csft-4.1/test/clean.cmd b/coreseek/csft-4.1/test/clean.cmd new file mode 100755 index 0000000..c314fcb --- /dev/null +++ b/coreseek/csft-4.1/test/clean.cmd @@ -0,0 +1,18 @@ +@echo off + +if exist "ubertest.php" ( + for /D %%i in (test_*) do ( + if exist "%%i\test.xml" ( + del /q "%%i\report.txt" 2>nul + rmdir /s /q "%%i\Conf" 2>nul + ) + ) + + del /q "data\*.sp*" 2>nul + del /q "data\*.mvp" 2>nul + del /q "data\*.meta" "data\*.lock" "data\*.kill" "data\*.ram" "data\binlog.*" 2>nul + del /q "*.log" 2>nul + + del /q "error*.txt" 2>nul + del /q "config*.conf" 2>nul +) diff --git a/coreseek/csft-4.1/test/clean.sh b/coreseek/csft-4.1/test/clean.sh new file mode 100755 index 0000000..4aa0856 --- /dev/null +++ b/coreseek/csft-4.1/test/clean.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +# must be run from tests dir +if test ! -f ubertest.php; then exit 0; fi + +# clean subdirs +for i in test_* +do + if test ! -f "$i/test.xml"; then continue; fi + rm -f "$i/report.txt" + rm -fr "$i/Conf/" +done + +# clean files +rm -f data/*.sp* +rm -f data/*.mvp +rm -f data/*.meta data/*.lock data/*.kill data/*.ram +rm -f data/binlog.* +rm -f *.log diff --git a/coreseek/csft-4.1/test/data/stub.txt b/coreseek/csft-4.1/test/data/stub.txt new file mode 100755 index 0000000..604bd9e --- /dev/null +++ b/coreseek/csft-4.1/test/data/stub.txt @@ -0,0 +1 @@ +This is stub file to force Mercurial to keep this folder in it's repository. \ No newline at end of file diff --git a/coreseek/csft-4.1/test/helpers.inc b/coreseek/csft-4.1/test/helpers.inc new file mode 100755 index 0000000..409acc2 --- /dev/null +++ b/coreseek/csft-4.1/test/helpers.inc @@ -0,0 +1,2326 @@ + $error_file\"", "r" ); + pclose ( $process ); + } + else + system ( "$path --config $config_file $test_mode > $error_file", $retval ); + + // wait until pid appears + for ( $i=0; $i<$action_retries && !file_exists($pidfile); $i++ ) + usleep ( $action_wait_timeout ); + + if ( !file_exists($pidfile) ) + { + $error = "PID file ($pidfile) was not created"; + return 1; + } + + // check for early crash + $error = CheckSearchdLog ( $error_file, $retval ); + + // on windows, searchd starts *fully* async + // so lets also wait until pidfile gets real data + // (meaning that index precaching is actually done) + if ( $retval!=1 && $windows ) + { + $STARTUP_TRIES = 1000; + $STARTUP_TICK = 50000; // msec + + // FIXME! add a better check that searchd is still alive than just file_exists + for ( $i=0; $i<$STARTUP_TRIES && file_exists($pidfile); $i++ ) + { + $pid = file($pidfile); + if ( count($pid) ) + break; + usleep ( $STARTUP_TICK ); + } + } + +// // we've got a pid file; but lets check the log file for startup errors +// for ( $i=0; $i<$action_retries && !file_exists($error_file); $i++ ) +// usleep ( $action_wait_timeout ); + + if ( $retval==0 && !empty($error) ) + $retval = 2; // no errors, but there were warnings + + return $retval; +} + + +function StopSearchd ( $config, $pidfile ) +{ + global $g_locals, $action_retries, $action_wait_timeout; + + if ( file_exists($pidfile) && count(file($pidfile)) ) + { + $path = $g_locals['searchd']; + exec ( "$path --config $config --stop" ); + + $i = 0; + while ( file_exists ( $pidfile ) && $i < $action_retries ) + { + usleep ( $action_wait_timeout ); + $i++; + } + } +} + +function StopWaitSearchd ( $config, $pidfile ) +{ + global $g_locals, $action_retries, $action_wait_timeout; + $ret = 0; + + if ( file_exists($pidfile) && count(file($pidfile)) ) + { + $path = $g_locals['searchd']; + $dummy = array(); + exec ( "$path --config $config --stopwait", $dummy, $ret ); + } + return $ret; +} + +function KillSearchd ( $config, $pidfile, $signal, $unlinkpid=True ) +{ + global $windows, $action_wait_timeout; + + if ( file_exists($pidfile) && count(file($pidfile)) ) + { + if ( !$windows ) + { + $fp = fopen($pidfile,"r"); + $pid = fread ( $fp, filesize ( $pidfile ) ); + fclose ($fp); + + exec ("kill -s $signal $pid"); + if ( $unlinkpid && file_exists ( $pidfile ) ) + { + usleep ( $action_wait_timeout ); + unlink ( $pidfile ); + } + } else + StopSearchd ($config, $pidfile); + } +} + +function IsModelGenMode () +{ + global $g_model; + return $g_model; +} + + +function CompareResultSetFixup ( &$set, $roundoff, $variants_match ) +{ + global $g_ignore_weights; + + if ( !is_array($set) ) + return; + + if ( $roundoff && !@$set["resarray"] ) // FIXME! support resarray too + foreach ( $set["attrs"] as $name=>$type ) + if ( $type==SPH_ATTR_FLOAT ) + { + foreach ( $set["matches"] as $id=>$match ) + $set["matches"][$id]["attrs"][$name] = sprintf ( "%.{$roundoff}f", + $set["matches"][$id]["attrs"][$name] ); + } + + if ( $g_ignore_weights ) + { + if ( isset($set["matches"]) ) + { + if ( @$set["resarray"] ) + { + for ( $i=0; $i$match ) + unset ( $set["matches"][$id]["weight"] ); + } + } + if ( @$set["words"] ) + foreach ( $set["words"] as $word=>$info ) + $set["words"][$word] = array ( "hits"=>-1, "docs"=>-1 ); + } + + //foreach ( preg_split ( "/\\W+/", "time warning status fields resarray roundoff words" ) as $key ) + foreach ( preg_split ( "/\\W+/", "time warning status fields resarray roundoff" ) as $key ) + unset ( $set[$key] ); + + if ( $variants_match && isset ( $set["attrs"] ) ) + { + foreach ( $set["attrs"] as $k=>$v ) + { + if ( $v==SPH_ATTR_MULTI64 ) + $set["attrs"][$k] = SPH_ATTR_MULTI; + } + } +} + + +function ChildrenArray ( $node, $name="" ) +{ + $res = array (); + if ( !empty($node) && $node->hasChildNodes() ) + for ( $i=0; $i<$node->childNodes->length; $i++ ) + { + $child = $node->childNodes->item ( $i ); + if ( $name=="" || strtolower($child->nodeName)==$name ) + $res[] = $child; + } + return $res; +} + + +function GetFirstChild ( $node, $name ) +{ + $children = ChildrenArray ( $node, $name ); + return empty($children) ? NULL : $children[0]; +} + + +function GetFirstChildValue ( $node, $name, $default="" ) +{ + $child = GetFirstChild ( $node, $name ); + return is_null($child) ? $default : $child->nodeValue; +} + + +class SphinxConfig +{ + private $_name; + private $_db_create; + private $_db_drop; + private $_db_insert; + private $_custom_insert; + private $_counters; + private $_dynamic_entries; + private $_queries; + private $_sphqueries; + private $_query_settings; + private $_query_attributes; + private $_indexer_runs; + private $_custom_test; + private $_sd_address; + private $_sd_port; + private $_sd_sphinxql_port; + private $_sd_pid_file; + private $_num_agents; + private $_subtest; + private $_subtestcount; + private $_results; + private $_results_model; + private $_prereqs; + private $_config; ///< config DOM node + private $_use_sphinxql; ///< true, if sphinxql queries exist + private $_indexdata; ///< data for use "insert into" instead of run indexer + private $_connection; ///< mysql connection (since we cound use mysql ans sqphinxql together) + private $_testdir; ///< the path to the directory with current test (namely for accessing data without knowing the test name) + + function SetConnection ( $connection ) + { + $this->_connection = $connection; + } + + function SphinxConfig () + { + global $sd_address, $sd_port, $sd_sphinxql_port, $sd_pid_file; + + $this->_counters = array (); + $this->_dynamic_entries = array (); + $this->_queries = array (); + $this->_sphqueries = array (); + $this->_results = array (); + $this->_results_model = array (); + $this->_query_attributes = array (); + $this->_indexer_runs = array (); + $this->_db_create = array (); + $this->_db_drop = array (); + $this->_db_insert = array (); + $this->_custom_insert = array (); + $this->_num_agents = 1; + $this->_subtest = 0; + $this->_subtestcount = 0; + $this->_sd_address = $sd_address; + $this->_sd_port = $sd_port; + $this->_sd_sphinxql_port = $sd_sphinxql_port; + $this->_sd_pid_file = $sd_pid_file; + $this->_custom_test = ""; + $this->_compat098 = false; + $this->_skip_indexer = false; + $this->_use_sphinxql = false; + $this->_indexdata = array (); + $this->_connection = false; + $this->_testdir = ""; + } + + function EnableCompat098 () { $this->_compat098 = true; } + function SubtestNo () { return $this->_subtest; } + function SubtestCount () { return $this->_subtestcount; } + function Name () { return $this->_name; } + function DB_Drop () { return $this->_db_drop; } + function DB_Create () { return $this->_db_create; } + function DB_Insert () { return $this->_db_insert; } + function DB_CustomInsert () { return $this->_custom_insert; } + function NumAgents () { return $this->_num_agents; } + function Requires ( $name ) { return isset($this->_prereqs[$name]); } + function IsQueryTest () { return strlen ( $this->_custom_test ) == 0; } + function IsSphinxqlTest () { return $this->_use_sphinxql; } + function IsNeedDB() { return ! ( empty ( $this->_db_drop ) + && empty ( $this->_db_create ) + && empty ( $this->_db_insert ) ); } + function IsRt() + { + global $g_locals; + if ( !array_key_exists ('rt_mode', $g_locals) ) + return false; + return $g_locals['rt_mode']; + } + function NeedIndexerEx () + { + return count ( $this->_indexer_runs ) > 0; + } + function Results () { return $this->_results; } + function GetQuery ( $i ) { return $this->_queries[$i]; } + function IsSkipIndexer () { return $this->_skip_indexer; } + + function SetTestDir ( $dir ) { $this->_testdir = $dir; } + + function GetLocal ( $key ) + { + global $g_locals; + if ( !array_key_exists ( $key, $g_locals ) ) + { + printf ( "FATAL: unbound local variable '%s' (go add it at ~/.sphinx).\n", $key ); + exit ( 1 ); + } + return $g_locals[$key]; + } + + function CreateNextConfig () + { + return $this->GenNextCfg ( 0 ); + } + + + function SubtestFinished () + { + $this->_subtest++; + } + + + function SubtestFailed () + { + $this->_subtest++; + + $failed = array (); + array_push ( $failed, "failed" ); + + if ( IsModelGenMode () ) + array_push ( $this->_results_model, $failed ); + } + + + function ModelSubtestFailed () + { + $failed = array (); + array_push ( $failed, "failed" ); + + return $this->_results_model [$this->SubtestNo ()] == $failed; + } + + + function SetAgent ( $agent ) + { + if ( !is_array ( $agent ) ) + return; + + $this->_sd_address = $agent ["address"]; + $this->_sd_port = $agent ["port"]; + $this->_sd_sphinxql_port = $agent ["sqlport"]; + } + + + function SetPIDFile ( $pidfile ) + { + $this->_sd_pid_file = $pidfile; + } + + + function GenNextCfg ( $i ) + { + if ( count ( $this->_dynamic_entries ) == 0 ) + return FALSE; + + $num_variants = count ( ChildrenArray ( $this->_dynamic_entries[$i], "variant" ) ); + + if ( $this->_counters [$i] == $num_variants - 1 ) + { + if ( $i == count ( $this->_dynamic_entries ) - 1 ) + return FALSE; + else + { + $this->_counters [$i] = 0; + return $this->GenNextCfg ( $i + 1 ); + } + } + else + $this->_counters [$i]++; + + return TRUE; + } + + + function WriteCustomTestResults ( $fp ) + { + $res_fmt = $this->FormatResultSet ( 0, $this->_results ); + fwrite ( $fp, $res_fmt ); + } + + function GatherEntities ( $node, &$array ) + { + foreach ( ChildrenArray($node) as $child ) + if ( $child->nodeType == XML_ELEMENT_NODE ) + array_push ( $array, $child->nodeValue ); + } + + + function GatherNodes ( $node ) + { + if ( $node->nodeType != XML_TEXT_NODE && $node->nodeType != XML_DOCUMENT_NODE + && strtolower ( $node->nodeName ) == "dynamic" ) + { + $node->id = count ( $this->_dynamic_entries ); + array_push ( $this->_dynamic_entries, $node ); + array_push ( $this->_counters, 0 ); + } + + for ( $i = 0; !is_null ( $node->childNodes ) && $i < $node->childNodes->length; $i++ ) + $this->GatherNodes ( $node->childNodes->item ( $i ) ); + } + + + function ParseRange ( $range ) + { + if ( !$range ) + return false; + + $values = explode ( ' ', $range ); + if ( count($values) != 2 ) + { + printf ( "ERROR: malformed range attribute: '%s'\n", $range ); + return false; + } + + return array ( 'min' => $values[0], 'max' => $values[1] ); + } + + function ParseIndexWeights ( $weights ) + { + if ( !$weights ) + return false; + + $result = array(); + preg_match_all ( '/([^\s]+):(\d+)/', $weights, $matches, PREG_SET_ORDER ); + foreach ( $matches as $match ) + $result [ $match[1] ] = (int)$match[2]; + + return $result; + } + + function Load ( $config_file ) + { + // load the file + $doc = new DOMDocument ( "1.0", "utf-8" ); + if ( !$doc->load ( $config_file ) ) + return false; + + // check for proper root node + if ( !$doc->hasChildNodes() ) + return false; + + $xml = $doc->childNodes->item(0); + if ( strtolower($xml->nodeName)!="test" ) + return false; + + $custom = GetFirstChild ( $xml, "custom_test" ); + if ( $custom ) + { + $this->_custom_test = $custom->nodeValue; + if ( $doc->encoding != 'utf-8' ) + $this->_custom_test = iconv ( 'utf-8', $doc->encoding, $this->_custom_test ); + } + + // extract indexer run params + $indexer_run = GetFirstChild ( $xml, "indexer" ); + if ( $indexer_run ) + { + foreach ( ChildrenArray ( $indexer_run, "run" ) as $run ) + $this->_indexer_runs [] = $run->nodeValue; + } + + // extract queries + $qs = GetFirstChild ( $xml, "queries" ); + if ( $qs ) + { + // new and cool + foreach ( ChildrenArray ( $qs, "query" ) as $q ) + { + $res = array ( "query" => array ( $q->nodeValue ) ); + + // parse query mode + $mode = 0; + $mode_s = $q->getAttribute("mode"); + switch ( $mode_s ) + { + case "": $mode_s = "(default)"; break; + case "all": $mode = SPH_MATCH_ALL; break; + case "any": $mode = SPH_MATCH_ANY; break; + case "phrase": $mode = SPH_MATCH_PHRASE; break; + case "extended": $mode = SPH_MATCH_EXTENDED; break; + case "extended2": $mode = SPH_MATCH_EXTENDED2; break; + default: + printf ( "$config_file: unknown matching mode '%s'\n", $mode_s ); + return false; + } + $res["mode"] = $mode; + $res["mode_s"] = $mode_s; + + // parse ranker + $ranker = 0; + $ranker_s = $q->getAttribute("ranker"); + + if ( empty($ranker_s) ) + { + $ranker_s = "(default)"; + } else + { + $ranker = @constant("SPH_RANK_" . strtoupper($ranker_s)); + if ( $ranker===NULL ) + { + printf ( "$config_file: unknown ranker '%s'\n", $ranker_s ); + return false; + } + } + + $res["ranker"] = $ranker; + $res["ranker_s"] = $ranker_s; + + // parse filter + $res["filter"] = $q->getAttribute("filter"); + $res["filter_value"] = $q->getAttribute("filter_value" ); + $res["filter_range"] = $this->ParseRange ( $q->getAttribute("filter_range" ) ); + + // parse sort mode and get clause + $sortmode = 0; + $sortmode_s = $q->getAttribute("sortmode"); + switch ( $sortmode_s ) + { + case "": $sortmode_s = "(default)"; break; + case "extended": $sortmode = SPH_SORT_EXTENDED; break; + case "expr": $sortmode = SPH_SORT_EXPR; break; + default: + printf ( "$config_file: unknown sorting mode '%s'\n", $sortmode_s ); + return false; + } + $res["sortmode"] = $sortmode; + $res["sortmode_s" ] = $sortmode_s; + $res["sortby"] = $q->getAttribute("sortby"); + + // groupby + $groupfunc = 0; + $groupfunc_s = $q->getAttribute("groupfunc"); + switch ( $groupfunc_s ) + { + case "": $groupfunc = SPH_GROUPBY_ATTR; $groupfunc_s = "attr"; break; + case "day": $groupfunc = SPH_GROUPBY_DAY; break; + case "week": $groupfunc = SPH_GROUPBY_WEEK; break; + case "month": $groupfunc = SPH_GROUPBY_MONTH; break; + case "year": $groupfunc = SPH_GROUPBY_YEAR; break; + case "attr": $groupfunc = SPH_GROUPBY_ATTR; break; + case "attrpair": $groupfunc = SPH_GROUPBY_ATTRPAIR; break; + default: + printf ( "$config_file: unknown groupby func '%s'\n", $groupfunc_s ); + return false; + } + + $res["groupfunc"] = $groupfunc; + $res["groupfunc_s"] = $groupfunc_s; + $res["groupattr"] = $q->getAttribute("groupattr"); + $groupsort = $q->getAttribute("groupsort"); + if ( $groupsort == "" ) + $groupsort = "@group desc"; + + $res["groupsort"] = $groupsort; + $res["groupdistinct"] = $q->getAttribute("groupdistinct"); + + $res["resarray"] = $q->getAttribute("resarray"); + $res["index"] = $q->getAttribute("index"); + $res["select"] = $q->getAttribute("select"); + $res["id_range"] = $this->ParseRange ( $q->getAttribute("id_range") ); + $res["index_weights"] = $this->ParseIndexWeights ( $q->getAttribute("index_weights") ); + $res["roundoff"] = $q->getAttribute("roundoff"); + $res["expect_error"] = $q->getAttribute("expect_error"); + $res["tag"] = $q->getAttribute("tag"); + $res["cutoff"] = $q->getAttribute("cutoff"); + $res["limits"] = $q->getAttribute("limits"); + + // add query + if ( $q->getAttribute("source") ) + { + $source = $q->getAttribute("source"); + if ( substr ( $source, 0, 6 ) == "local:" ) + $source = $this->GetLocal ( substr ( $source, 6 ) ); + if ( !is_readable($source) ) + { + printf ( "FATAL: query source file '%s' not found.\n", $source ); + exit ( 1 ); + } + $queries = file ( $source, FILE_IGNORE_NEW_LINES ); + $limit = $this->GetLocal('qlimit'); + $res["query"] = $limit ? array_slice( $queries, 0, $limit ) : $queries; + } + $this->_queries[] = $res; + } + } + else + { + // legacy + $qs = array (); + $this->GatherEntities ( GetFirstChild ( $xml, "query" ), $qs ); + foreach ( $qs as $q ) + { + $this->_queries[] = array ( "query" => array ( $q ), + "mode" => 0, + "mode_s" => "(default)", + "ranker" => 0, + "ranker_s" => "(default)" ); + } + } + + // extract queries + $qs = GetFirstChild ( $xml, "sphqueries" ); + if ( $qs ) + { + $this->_use_sphinxql = true; + // new and cool + foreach ( ChildrenArray ( $qs, "sphinxql" ) as $q ) + $this->_sphqueries[] = array ( "query" => $q->nodeValue ); + } + + + // extract my settings + $this->_config = GetFirstChild ( $xml, "config" ); + $this->GatherNodes ( $this->_config ); + $this->GatherEntities ( GetFirstChild ( $xml, "query_attributes" ), $this->_query_attributes ); + + foreach ( ChildrenArray ( $xml, "db_create" ) as $node ) + $this->_db_create []=$node->nodeValue; + + foreach ( ChildrenArray ( $xml, "db_drop" ) as $node ) + $this->_db_drop []=$node->nodeValue; + + foreach ( ChildrenArray ( $xml, "db_insert" ) as $node ) + $this->_db_insert []=$node->nodeValue; + + foreach ( ChildrenArray ( $xml, "custom_insert" ) as $node ) + $this->_custom_insert []=$node->nodeValue; + + $this->_name = GetFirstChildValue ( $xml, "name" ); + $this->_query_settings = GetFirstChildValue ( $xml, "query_settings" ); + $this->_num_agents = GetFirstChildValue ( $xml, "num_agents", 1 ); + $this->_skip_indexer = GetFirstChildValue ( $xml, "skip_indexer", false )!==false; + + $this->_prereqs = array(); + $prereqs = GetFirstChild ( $xml, "requires", false ); + if ( $prereqs ) + foreach ( ChildrenArray ( $prereqs ) as $node ) + $this->_prereqs [ $node->nodeName ] = 1; + + // precalc subtests count + $this->_subtestcount = 1; + foreach ( $this->_dynamic_entries as $entry ) + { + $variants = count ( ChildrenArray ( $entry, "variant" ) ); + $this->_subtestcount *= max ( $variants, 1 ); + } + + return true; + } + + + function RunIndexerEx ( &$error ) + { + foreach ( $this->_indexer_runs as $param ) + { + $retval = RunIndexer ( $error, $param ); + if ( $retval != 0 ) + return $retval; + } + + return 0; + } + + function RunQuerySphinxQL ( &$error, $bench=false ) + { + global $sd_address, $sd_sphinxql_port, $action_retries, $action_wait_timeout; + $total = $done = 0; + if ($sd_address == "localhost") + $connect_string = "127.0.0.1:$sd_sphinxql_port"; + else + $connect_string = "$sd_address:$sd_sphinxql_port"; + $connection = @mysql_connect ( $connect_string ); + if ( $connection === false ) + return false; + $qcount = count($this->_sphqueries); + if ( $bench === true ) + $qcount *= 2; + for ( $n=0; $n<$qcount; $n++ ) + { + $query = 'show meta'; + if ( $bench === false ) + $query = $this->_sphqueries[$n]["query"]; + else if ( ($n%2)==0 ) + $query = $this->_sphqueries[$n/2]["query"]; + + $query_result = array (); + + $no_time = false; + if ( $bench===false && ( stripos ( $query, 'show' )!==false ) && ( stripos ( $query, 'meta' )!==false ) ) + $no_time = true; + + $query_result["sphinxql"]=$query; + $result = mysql_wr ($query,$connection); + if ($result===true) + $query_result["total_affected"] = mysql_affected_rows($connection); + else if ($result===false) + { + $query_result["error"] = mysql_error( $connection ); + $query_result["errno"] = mysql_errno( $connection ); + } else + { + $query_result["total_rows"] = mysql_num_rows($result); + while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) + { + if ( $no_time===true && array_key_exists ( 'Variable_name', $row ) && $row['Variable_name']=='time' ) + continue; + $query_result["rows"][] = $row; + } + mysql_free_result($result); + } + $this->_results[] = $query_result; + if ( IsModelGenMode () ) + { + $this->_results_model[$this->SubtestNo ()][] = $query_result; + } + } + mysql_close ( $connection ); + return true; + } + + + function RunQuery ( $index, &$error, $benchmark = null ) + { + global $sd_address, $sd_port, $action_retries, $action_wait_timeout; + + $query_results = array (); + $total = $done = 0; + if ( $benchmark ) + { + foreach ( $this->_queries as $qinfo ) + $total += count($qinfo['query']); + $prefix = $benchmark; + $compact = true; + $tm = 0; + $start = MyMicrotime(); + } + else + $compact = false; + + $cl = new SphinxClient; + $pconn = $benchmark && method_exists ( $cl, 'Open' ); + if ( $pconn ) + { + $cl = new SphinxClient (); + $cl->SetServer ( $sd_address, $sd_port ); + $cl->Open (); + } + + $retries = 1; + if ( !$benchmark ) + $retries = $action_retries; + + for ( $n=0; $n_queries); $n++ ) + { + $qinfo = $this->_queries[$n]; + foreach ( $qinfo['query'] as $query ) + { + if ( $benchmark && MyMicrotime() > $tm ) + { + $tm = MyMicrotime(); + $est = $done ? ( ( $tm - $start ) / $done ) * ( $total - $done ) : 0 ; + $qps = $done / ( $tm - $start ); + printf ( "\r$prefix %d/%d (est. %s, qps %.1f)", $done, $total, sphFormatTime($est), $qps ); + $tm += 1; + } + $bOk = FALSE; + for ( $i=0; $i<$retries && !$bOk; $i++ ) + { + if ( !$pconn ) + { + $cl = new SphinxClient (); + $cl->SetServer ( $sd_address, $sd_port ); + } else + { + $cl->ResetFilters (); + $cl->ResetGroupBy (); + } + + $results = 0; + if ( empty($this->_query_settings) ) + { + $my_index = $index; + if ( @$qinfo["mode"] ) $cl->SetMatchMode ( $qinfo["mode"] ); + if ( @$qinfo["ranker"] ) $cl->SetRankingMode ( $qinfo["ranker"] ); + if ( @$qinfo["sortmode"] ) $cl->SetSortMode ( $qinfo["sortmode"], $qinfo["sortby"] ); + if ( @$qinfo["groupattr"] ) $cl->SetGroupBy ( $qinfo["groupattr"], $qinfo["groupfunc"], $qinfo["groupsort"] ); + if ( @$qinfo["groupdistinct"] ) $cl->SetGroupDistinct ( $qinfo["groupdistinct"] ); + if ( @$qinfo["resarray"] ) $cl->SetArrayResult ( true ); + if ( @$qinfo["select"] ) $cl->SetSelect ( $qinfo["select"] ); + if ( @$qinfo["id_range"] ) $cl->SetIDRange ( $qinfo["id_range"]["min"], $qinfo["id_range"]["max"] ); + if ( @$qinfo["index"] ) $my_index = $qinfo["index"]; + if ( @$qinfo["index_weights"] ) $cl->SetIndexWeights ( $qinfo["index_weights"] ); + if ( @$qinfo["cutoff"] ) $cl->SetLimits ( 0, 20, 0, $qinfo["cutoff"] ); + if ( @$qinfo["limits"] ) $cl->SetLimits ( 0, (int)$qinfo["limits"] ); + if ( @$qinfo["filter"] ) + { + $name = $qinfo["filter"]; + if ( @$qinfo["filter_value"] ) + $cl->SetFilter ( $name, array ( $qinfo["filter_value"] ) ); + elseif ( @$qinfo["filter_range"] ) + { + $range = $qinfo["filter_range"]; + $cl->SetFilterRange ( $name, $range['min'], $range['max'] ); + } + } + + $results = $cl->Query ( $query, $my_index, "run".(1+$this->SubtestNo()) ); + if ( is_array($results) ) + { + $results["resarray"] = (int)@$qinfo["resarray"]; + $results["roundoff"] = (int)@$qinfo["roundoff"]; + } + } + else + { + $run_func = create_function( '$client, $query, $index, &$results', $this->_query_settings ); + $run_func ( $cl, $query, $index, $results ); + } + + if ( $results ) + { + // let also work with "array of arrays" result + if ( array_key_exists ( "error",$results ) ) + { + $bOk = TRUE; + if ( $compact ) + $results = array ( $n, $results['total'], $results['total_found'], $results['time'] ); + else + $results ["query"] = $query; + + array_push ( $query_results, $results ); + } else + foreach ( $results as $result ) + { + $bOk = TRUE; + if ( $compact ) + $result = array ( $n, $result['total'], $result['total_found'], $result['time'] ); + else + $result ["query"] = $query; + + array_push ( $query_results, $result ); + } + } + else if ( @$qinfo["expect_error"] && !$cl->IsConnectError() ) + { + $bOk = true; + array_push ( $query_results, array ( + "query" => $query, + "error" => $cl->GetLastError(), + "warning" => "", + "total" => 0, + "total_found" => 0, + "time" => 0 ) ); + } + else + { + if ( method_exists ( $cl, 'IsConnectError' ) && $cl->IsConnectError() ) + usleep ( $action_wait_timeout ); + else if ( $benchmark && $done ) + { + array_push ( $query_results, array ( $n, -1, -1, 0 ) ); + $bOk = true; + } + else + break; + } + } + $done++; + + if ( !$bOk ) + { + $error = sprintf ( "query %d/%d: %s", $n+1, count($this->_queries), $cl->GetLastError() ); + return FALSE; + } + } + } + + $this->_results = $query_results; + + if ( IsModelGenMode () && count($this->_queries) !=0 ) + array_push ( $this->_results_model, $query_results ); + + if ( $benchmark ) + printf ( " - done in %s\n", sphFormatTime ( MyMicrotime() - $start ) ); + + if ( $pconn ) + $cl->Close (); + + return TRUE; + } + + + function RunCustomTest ( & $error ) + { + global $sd_address, $sd_port, $action_retries, $action_wait_timeout, $g_locals; + + $bOk = false; + $results = false; + + for ( $i = 0; $i < $action_retries && !$bOk; $i++ ) + { + $cl = new SphinxClient (); + $cl->SetServer ( $sd_address, $sd_port ); + + $results = false; + $run_func = create_function( '$client, &$results', $this->_custom_test ); + + if ( !@mysql_connect ( $g_locals['db-host'].":".$g_locals['db-port'], + $g_locals['db-user'], $g_locals['db-password'] ) || + !@mysql_select_db ( $g_locals['db-name'] ) ) + return FALSE; + + $GLOBALS["this_test"] = $this->_testdir; + $run_func ( $cl, $results ); + + @mysql_close(); + + if ( $results ) + $bOk = TRUE; + else + usleep ( $action_wait_timeout ); + } + + if ( !$bOk ) + { + $error = $cl->GetLastError (); + return FALSE; + } + + $my_results = array (); + $my_results [] = $results; + + $this->_results = $my_results; + + if ( IsModelGenMode () ) + array_push ( $this->_results_model, $my_results ); + + return TRUE; + } + + + function FixKeys ( $v ) + { + if ( is_array($v) ) + { + $result = array(); + foreach ( $v as $key=>$value ) + { + if ( $key==PHP_INT_MAX || $key==-PHP_INT_MAX-1 ) + $key = (int)$key; + $result[$key] = $this->FixKeys ( $value ); + } + return $result; + } + else + return $v; + } + + + function LoadModel ( $filename ) + { + if ( ! IsModelGenMode () ) + { + if ( ! file_exists ( $filename ) ) + return -1; + + $contents = file_get_contents ( $filename ); + if ( ! $contents ) + return 0; + + $this->_results_model = $this->FixKeys ( unserialize ( $contents ) ); + } + + return 1; + } + + + function CompareToModel () + { + return $this->CompareResults ( $this->FixKeys ( $this->_results ), $this->_results_model [$this->SubtestNo ()] ); + } + + + function CompareResultSets ( $set1, $set2 ) + { + $roundoff = 0; + if ( isset($set1["roundoff"]) ) $roundoff = $set1["roundoff"]; + if ( isset($set2["roundoff"]) ) $roundoff = $set2["roundoff"]; + + $variants_match = $this->Requires("variant_match"); + + CompareResultSetFixup ( $set1, $roundoff, $variants_match ); + CompareResultSetFixup ( $set2, $roundoff, $variants_match ); + + return $set1==$set2; + } + + function CompareResults ( $query1, $query2 ) + { + if ( count($query1)!=count($query2) ) + return false; + + for ( $i=0; $iCompareResultSets ( $query1[$i], $query2[$i] ) ) + return false; + + return true; + } + + + function CheckVariants ( $output_path ) + { + if ( !$this->Requires("variant_match") ) + return true; + + $total = count ( $this->_results_model ); + if ( $total==1 ) + { + printf ( "Variant match is required, but there are no variants.\n" ); + return false; + } + else if ( !$this->IsQueryTest() ) + { + printf ( "Variant match is not supported for non-query tests.\n" ); + return false; + } + + $failed = false; + $output = ''; + for ( $i=1; $i<$total; $i++ ) + { + $nqueries = count ( $this->_results_model[0] ); + for ( $k=0; $k<$nqueries; $k++ ) + if ( !$this->CompareResultSets ( $this->_results_model[0][$k], $this->_results_model[$i][$k] ) ) + { + $first = $this->FormatResultSet ( $k+1, $this->_results_model[0][$k] ); + $current = $this->FormatResultSet ( $k+1, $this->_results_model[$i][$k] ); + + file_put_contents ( "first", $first ); + file_put_contents ( "current", $current ); + system ( "diff --unified=3 first current > diff.txt" ); + + $diff = file_get_contents ( "diff.txt" ); + unlink ( "current" ); + unlink ( "first" ); + unlink ( "diff.txt" ); + + $output .= $diff . "\n"; + $failed = true; + } + } + + if ( $failed ) + file_put_contents ( $output_path, $output ); + return !$failed; + } + + + function WriteReportHeader ( $fp ) + { + fprintf ( $fp, "==== Run %d ====\n", $this->SubtestNo () + 1 ); + fwrite ( $fp, "Settings:\n" ); + $this->WriteDiff ( $fp ); + fwrite ( $fp, "\n" ); + + if ( !empty ( $this->_query_settings ) ) + fprintf ( $fp, "Query settings:\n%s\n", $this->_query_settings ); + } + + + function FormatResultSet ( $nquery, $result, $opts=array() ) + { + global $sd_skip_indexer; + if ( !$this->IsQueryTest () || !is_array($result) ) + return var_export ( $result, true )."\n"; + + if ( array_key_exists ("sphinxql", $result) ) + { + $str = "sphinxql> $result[sphinxql];\n"; + if ( array_key_exists ("total_affected", $result) ) + { + $str .= "Query OK, $result[total_affected] rows affected\n"; + + } else if ( array_key_exists ("error", $result) ) + { + $str .= "ERROR $result[errno]: $result[error]\n"; + + } else if (array_key_exists ("rows", $result) ) + { + foreach ( $result["rows"][0] as $key=>$s ) + $str .= "\t$key"; + $str .= "\n"; + foreach ($result["rows"] as $row) + { + foreach ($row as $value) + $str .= "\t$value"; + $str .="\n"; + } + $str .="$result[total_rows] rows in set\n"; + + } else if ( isset($result["total_rows"]) ) + { + $str .= "$result[total_rows] rows in set\n"; + } + return $str."\n"; + } + + // format header + $qinfo = @$this->_queries[$nquery-1]; + if ( @array_key_exists ( "index", $qinfo ) && $qinfo ["index"] != '*' ) + $str = "--- Query $nquery (mode=$qinfo[mode_s],ranker=$qinfo[ranker_s],index=$qinfo[index]) ---\n"; + else + $str = "--- Query $nquery (mode=$qinfo[mode_s],ranker=$qinfo[ranker_s]) ---\n"; + + if ( @$qinfo["groupattr"] ) + $str .= "GroupBy: attr: '".$qinfo["groupattr"]."' func: '".$qinfo["groupfunc_s"]."' sort: '".$qinfo["groupsort"]."'\n"; + + if ( @$qinfo["sortmode"] == SPH_SORT_EXPR ) + $str .= "Sort: expr: ".$qinfo["sortby"]."\n"; + + $str .= @"Query '$result[query]': retrieved $result[total_found] of $result[total] matches in $result[time] sec.\n"; + if ( $result["error"] ) + $str .= "Error: $result[error]\n"; + if ( $result["warning"] ) + $str .= "Warning: $result[warning]\n"; + + $array_result = @$result["resarray"]; + + // format keywords + if ( isset($result["words"]) && is_array($result["words"]) ) + { + $str .= "Word stats:\n"; + foreach ( $result ["words"] as $word => $word_result ) + { + $hits = $word_result ["hits"]; + $docs = $word_result ["docs"]; + $str .= "\t'$word' found $hits times in $docs documents\n"; + } + } + + // format attribute types + if ( @$opts["format_attrs"] ) + { + $typenames = array ( + SPH_ATTR_INTEGER => "int", + SPH_ATTR_TIMESTAMP=> "timestamp", + SPH_ATTR_ORDINAL => "ordinal", + SPH_ATTR_BOOL => "bool", + SPH_ATTR_FLOAT => "float", + SPH_ATTR_BIGINT => "bigint", + SPH_ATTR_STRING => "string", + SPH_ATTR_MULTI => "mva", + SPH_ATTR_MULTI64 => "mva" ); // !COMMIT + + $n = 1; + $str .= "Result set attributes:\n"; + foreach ( $result["attrs"] as $name=>$type ) + { + + $typename = "type-$type"; + if ( $typenames[$type] ) + $typename = $typenames[$type]; + + $str .= "\tattr $n: $typename $name\n"; + $n++; + } + } + + // check our table for well-known id column names + $idcol = ""; + + if ( $this->IsNeedDB() ) + $r = mysql_query ( "DESC test_table", $this->_connection ); + else + $r = false; + if ( $r ) + { + while ( $row = mysql_fetch_assoc($r) ) + { + $idcand = strtolower ( $row["Field"] ); + if ( in_array ( $idcand, array ( "id", "document_id" ) ) ) + { + $idcol = $idcand; + break; + } + } + } + + // format matches + $str .= "\n"; + if ( isset($result["matches"]) && is_array($result["matches"]) ) + { + $n = 1; + $str .= "Matches:"; + foreach ( $result ["matches"] as $doc => $docinfo ) + { + $doc_id = $array_result ? $docinfo["id"] : $doc; + $weight = $docinfo["weight"]; + + $str .= "\n$n. doc_id=$doc_id, weight=$weight"; + $n++; + + // only format specified attrs if requested + if ( !empty ( $this->_query_attributes ) ) + { + foreach ( $this->_query_attributes as $attr ) + if ( isset($docinfo ["attrs"][$attr]) ) + { + $val = $docinfo["attrs"][$attr]; + if ( is_array ( $val ) ) + $val = join ( " ", $val ); + $str .= " $attr=$val"; + } + continue; + } + + // fetch and format fields from db by default + if ( $idcol ) + { + if ( $this->IsNeedDB() ) + $query_res = mysql_query ( "select * from test_table where $idcol = $doc_id", + $this->_connection); + else + $query_res = false; + if ( $query_res ) + { + $row = mysql_fetch_assoc ( $query_res ); + if ( $row ) + foreach ( $row as $col_name => $col_content ) + if ( array_search ( $col_name, $result["fields"] )!==false ) + $str .= " $col_name=\"$col_content\""; + } + } + + // format attrs + foreach ( $docinfo["attrs"] as $attr=>$val ) + { + if ( is_array($val) ) + $val = join ( ",", $val ); + $str .= " $attr=\"$val\""; + } + } + $str .= "\n\n"; + } + return $str . "\n"; + } + + /// format and write a single result set into log file + function WriteQuery ( $fp, $nquery, $result ) + { + $res_fmt = $this->FormatResultSet ( $nquery, $result ); + fwrite ( $fp, $res_fmt ); + } + + /// write all the result sets + function WriteResults ( $fp ) + { + if ( $this->IsQueryTest () ) + { + $nquery = 1; + foreach ( $this->_results as $result ) + $this->WriteQuery ( $fp, $nquery++, $result ); + } + else + $this->WriteCustomTestResults ( $fp ); + } + + /// write difference from the reference result sets + function WriteReferenceResultsDiff ( $fp ) + { + global $windows; + + $nquery = 0; + if ( !is_array ( $this->_results_model [ $this->SubtestNo() ] ) ) + return; + + foreach ( $this->_results_model [ $this->SubtestNo() ] as $ref ) + { + $cur = $this->_results[$nquery]; + if ( $this->CompareResultSets ( $ref, $cur ) ) + { + $nquery++; + continue; + } + + $opts = array(); + if ( isset($cur["attrs"]) || isset($ref["attrs"]) ) + if ( @$cur["attrs"]!=@$ref["attrs"] ) + $opts["format_attrs"] = 1; + + $result_f_cur = $this->FormatResultSet ( $nquery+1, $this->_results[$nquery], $opts ); + $result_f_ref = $this->FormatResultSet ( $nquery+1, $ref, $opts ); + file_put_contents ( "current", $result_f_cur ); + file_put_contents ( "reference", $result_f_ref ); + system ( "diff --unified=3 reference current > diffed.txt" ); + + $diffed = file_get_contents ( "diffed.txt" ); + unlink ( "current" ); + unlink ( "reference" ); + unlink ( "diffed.txt" ); + + $nquery++; + fwrite ( $fp, "=== query $nquery diff start ===\n" ); + fwrite ( $fp, $diffed ); + fwrite ( $fp, "=== query $nquery diff end ===\n" ); + } + + $nref = count ( array_keys ( $this->_results_model [ $this->SubtestNo() ] ) ); + $nres = count ( array_keys ( $this->_results ) ); + if ( $nres > $nref ) + { + $delta = $nres - $nref; + fwrite ( $fp, "$delta result set(s) missing from model!\n" ); + } + } + + function EraseIndexFiles ( $path ) + { + $dh = glob ( "./$path.*" ); + foreach ( $dh as $entry ) + { + if ( is_file ($entry) ) + unlink ($entry); + } + } + + function WriteConfig ( $filename, $agentid, &$msg, $collectdata = true ) + { + global $g_locals; + $fp = fopen ( $filename, 'w' ); + if ( !$fp ) + { + $msg = "Can't open file $filename for writing"; + return FALSE; + } + + $this->Dump ( $this->_config, $fp, false, $agentid ); + fclose ( $fp ); + + $fp = fopen ( $filename, 'r' ); + if ( !$fp ) + { + $msg = "Can't open file $filename for reading"; + return FALSE; + } + + $config = fread ( $fp, filesize ( $filename ) ); + fclose ( $fp ); + + // for rt case - extract the schema from the config + // and make the new config, making the index as rt instead + if ( $this->IsRt() ) + { + $body = 1; + $srcname = 2; + $parent = 4; + $content = 5; + $epilog = 6; + $pattern = "/.*?(source\s+(\S*?)(\s*\:\s*(\S*?))?\s*\{(.*?)\})(.*?)/s"; + preg_match_all ( $pattern, $config, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE ); + $schemas = array(); + $shift = 0; + $newconfig = ""; + + // parse sources + foreach ( $matches as $match ) + { + $lines = explode("\n", $match[$content][0]); + $insert_schema = array(); + $insert_types = array(); + if ( $match[$parent][0] != "" ) + $insert_types = $schemas[$match[$parent][0]]['types']; + + $sql_query_pre = array(); + $sql_query = ""; + + foreach ( $lines as $line ) + { + // skip comment lines (if any) + if ( preg_match ( "/\s*#/" , $line ) > 0 ) + continue; + + // extract config key/value pairs + $eq = strpos ( $line,"=" ); + if ($eq == 0) + continue; + $key = strtolower ( trim ( substr($line,0,$eq), " \t" ) ); + $value = trim ( substr($line,$eq+1), " \t" ); + + // handle known keys + switch ( $key ) + { + case "type": + if ( $value != "mysql" ) + { + $msg = "non-mysql source (type=$value), skipping..."; + return FALSE; + } + break; + + case "sql_attr_uint": $insert_types[$value] = "rt_attr_uint"; break; + case "sql_attr_bigint": $insert_types[$value] = "rt_attr_bigint"; break; + case "sql_attr_float": $insert_types[$value] = "rt_attr_float"; break; + case "sql_attr_timestamp": $insert_types[$value] = "rt_attr_timestamp"; break; + // case "sql_attr_multi" TBD + // case "sql_attr_string" TBD + + case "sql_query_pre": $sql_query_pre[] = $value; break; + case "sql_query": $sql_query = $value; break; + } + } + + // query is kinda mandatory + if ( !$sql_query ) + { + $msg = "missing sql_query"; + return false; + } + + // now let's connect to MySQL, run the query, and fetch the values + $conn = ConnectDB(); + if ( !$conn ) + { + $msg = "can't connect or select the database"; + return false; + } + + // gotta run pre-queries first! + foreach ( $sql_query_pre as $q ) + { + if ( mysql_wr ( $q, $conn ) ) + continue; + + $msg = sprintf ( "sql_query_pre failed (query=%s, error=%s)", $q, mysql_error ( $conn ) ); + mysql_close ( $conn ); + return false; + } + + // run main query + $res = mysql_wr ( $sql_query, $conn ); + if ( !$res ) + { + $msg = sprintf ( "sql_query failed (query=%s, error=%s)", $sql_query, mysql_error ( $conn ) ); + $msg = "sql_query can't fetch test data: " . mysql_error ( $conn ); + mysql_close ( $conn ); + return false; + } + + // fetch fields + $insert_schema = array ( "id" => 0 ); + for ( $i=1; $i < mysql_num_fields($res); $i++ ) + $insert_schema [ mysql_fetch_field ( $res, $i )->name ] = $i; + + // fetch data + $insert_values = array(); + while ( $row = mysql_fetch_row($res) ) + $insert_values[] = array_values ( $row ); + + // cleanup + mysql_free_result ( $res ); + mysql_close ( $conn ); + + // store + $schema = array(); + $schema['types'] = $insert_types; + if ( $match[$parent][0] != "" ) + $schema['orders'] = $schemas[$match[$parent][0]]['orders']; + else + $schema['orders'] = $insert_schema; + $schema['values'] = $insert_values; + $schema['sqlport'] = $this->_sd_sphinxql_port; + + $schemas[$match[$srcname][0]] = $schema; + $srclen = $match[$epilog][1] - $match[$body][1]; + $config = substr_replace ( $config, "", $match[$body][1]-$shift,$srclen ); + $shift += $srclen; + } + + $body = 1; + $idxname = 2; + $parent = 4; + $content = 5; + $epilog = 6; + $pattern = "/.*?(index\s+(\S*?)(\s*\:\s*(\S*?))?\s*\{(.*?)\})(.*?)/s"; + preg_match_all ( $pattern, $config, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE ); + $shift = 0; + // parse indexes + $indexes = array(); + foreach ( $matches as $match ) + { + $idx = "index ".$match[$idxname][0]; + if ( $match[$parent][0] != "" ) + $idx .= " : ".$match[$parent][0]; + $idx .= "\n{\n"; + + $lines = explode("\n", $match[$content][0]); + $justcopy = false; + $rtcopy = false; + $idxbody = ""; + foreach ($lines as $line) + { + // skip comment lines (if any) + if ( preg_match ( "/\s*#/" , $line ) > 0 ) + continue; + $eq = strpos ( $line,"=" ); + if ($eq == 0) + continue; + $key = strtolower ( trim ( substr($line,0,$eq), " \t" ) ); + $value = trim ( substr($line,$eq+1), " \t" ); + switch ( $key ) + { + case "type": + if ($value=="rt") + $rtcopy = true; + else + $justcopy = true; + break; + case "source"; + { + $idxbody .= "\ttype\t= rt\n"; + if ( $collectdata ) + $indexes[$match[$idxname][0]] = $schemas[$value]; + foreach ( array_keys( $schemas[$value]['orders'] ) as $key ) + if ( $key != "id" && $key != "document_id" ) + { + if ( array_key_exists ( $key, $schemas[$value]['types'] ) ) + $idxbody .= "\t".$schemas[$value]['types'][$key]."\t= $key\n"; + else + $idxbody .= "\trt_field\t= $key\n"; + } + break; + } + case "path": $this->EraseIndexFiles($value); + if ($rtcopy) + $justcopy = true; + // no break! + default: + $idxbody .= "\t$key\t= $value\n"; + } + if ( $justcopy ) // explicitly defined type, don't transform to rt. + { + $idxbody = $match[$content][0]; + break; + } + } + $idx .= "$idxbody\n}\n"; + $srclen = $match[$epilog][1] - $match[$body][1]; + $config = substr_replace ($config, $idx, $match[$body][1]-$shift,$srclen ); + $shift += $srclen-strlen($idx); + } + if ( $collectdata ) + foreach ($indexes as $key => $value) + $this->_indexdata[$key] = $value; + $fp = fopen ( $filename, 'w' ); + if ( !$fp ) + { + $msg = "Can't open $filename for writing"; + return FALSE; + } + fwrite ( $fp, $config ); + fclose ( $fp ); + } + else // for rt indexes we need to clean up all index files before the run. + { + $pattern = "/.*?index\s+\S*?(\s*\:\s*\S*?)?\s*\{(.*?)\}.*?/s"; + preg_match_all ( $pattern, $config, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE ); + // parse indexes + $indexes = array(); + foreach ( $matches as $match ) + { + $lines = explode("\n", $match[2][0]); + $path = ""; + $isrt = false; + foreach ($lines as $line) + { + // skip comment lines (if any) + if ( preg_match ( "/\s*#/" , $line ) > 0 ) + continue; + $eq = strpos ( $line,"=" ); + if ($eq == 0) + continue; + $key = strtolower ( trim ( substr($line,0,$eq), " \t" ) ); + $value = trim ( substr($line,$eq+1), " \t" ); + switch ( $key ) + { + case "type": + if ($value=="rt") + $isrt = true; + break; + case "path": + $path = $value; + } + if ( $isrt && $path!="" ) + { + $this->EraseIndexFiles($path); + break; + } + } + } + } + return TRUE; + } + + function InsertIntoIndexer ( &$error ) + { + global $sd_address, $sd_sphinxql_port, $action_retries, $action_wait_timeout; + $address = $sd_address; + if ($address == "localhost") + $address = "127.0.0.1"; + + $cn = false; + $port = 0; + foreach ( $this->_indexdata as $name => $data ) + { + if ( $port != $data["sqlport"] ) + { + $port = $data["sqlport"]; + $connect_string = "$address:$port"; + if ( $cn !== false ) + mysql_close ( $cn ); + $cn = @mysql_connect ( $connect_string ); + } + if ( $cn === false ) + return false; + + $cols = join ( ", ", array_keys ( $data["orders"] ) ); + $prefix = "INSERT INTO $name ($cols) VALUES "; + + $accum = ""; + foreach ($data['values'] as $row) + { + $query = ""; + foreach ( $row as $column ) + { + if ( $query!="" ) + $query .=","; + $query .="'".$column."'"; + } + + if ( ( strlen ($accum) + strlen ($query) ) > 1024000 ) ///Dump ( $this->_config, $fp, true, "all" ); + } + + + function WriteModel ( $filename ) + { + if ( IsModelGenMode () ) + file_put_contents ( $filename, serialize ( $this->_results_model ) ); + } + + + function WriteSearchdSettings ( $fp ) + { + global $sd_log, $sd_query_log, $sd_read_timeout, $sd_max_children, $sd_pid_file, $sd_max_matches; + + if ( $this->_compat098 ) + { + fwrite ( $fp, "\taddress = {$this->_sd_address}\n" ); + fwrite ( $fp, "\tport = {$this->_sd_port}\n" ); + } + else + { + fwrite ( $fp, "\tlisten = {$this->_sd_address}:{$this->_sd_port}\n" ); + fwrite ( $fp, "\tlisten = {$this->_sd_address}:{$this->_sd_sphinxql_port}:mysql41\n" ); + } + fwrite ( $fp, "\tlog = $sd_log\n" ); + fwrite ( $fp, "\tquery_log = $sd_query_log\n" ); + fwrite ( $fp, "\tread_timeout = $sd_read_timeout\n" ); + fwrite ( $fp, "\tmax_children = $sd_max_children\n" ); + fwrite ( $fp, "\tpid_file = ".$this->_sd_pid_file."\n" ); + fwrite ( $fp, "\tmax_matches = $sd_max_matches\n" ); + if ( $this->IsRt() ) + fwrite ( $fp, "\tworkers = threads\n" ); + + } + + function WriteSqlSettings ( $fp, $attributes ) + { + global $g_locals; + + fwrite ( $fp, "\tsql_host = " . $g_locals['db-host'] . "\n" ); + fwrite ( $fp, "\tsql_user = " . $g_locals['db-user'] . "\n" ); + fwrite ( $fp, "\tsql_pass = " . $g_locals['db-password'] . "\n" ); + fwrite ( $fp, "\tsql_port = " . $g_locals['db-port'] . "\n" ); + + $node = $attributes->getNamedItem('sql_db'); + fprintf ( $fp, "\tsql_db = %s\n", $node ? $node->nodeValue : $g_locals['db-name'] ); + } + + function Dump ( $node, $fp, $dynamic_only, $agentid ) + { + global $index_data_path, $agents; + + $nodename = strtolower ( $node->nodeName ); + + if ( !$dynamic_only ) + switch ( $nodename ) + { + case "#text": fwrite ( $fp, $node->nodeValue ); return; + case "static": fwrite ( $fp, $node->nodeValue ); return; + case "searchd_settings": $this->WriteSearchdSettings ( $fp ); return; + case "sql_settings": $this->WriteSqlSettings ( $fp, $node->attributes ); return; + case "my_address": + case "agent0_address": fwrite ( $fp, $agents[0]["address"].":".$agents[0]["port"] ); return; + case "agent_address": + case "agent1_address": fwrite ( $fp, $agents[1]["address"].":".$agents[1]["port"] ); return; + case "agent2_address": fwrite ( $fp, $agents[2]["address"].":".$agents[2]["port"] ); return; + case "data_path": fwrite ( $fp, $index_data_path ); return; + case "local": fwrite ( $fp, $this->GetLocal ( $node->nodeValue ) ); return; + case "test_root": fwrite ( $fp, dirname(__FILE__) ); return; + case "this_test": fwrite ( $fp, $this->_testdir ); return; + } + + if ( $nodename=="variant" ) + { + fwrite ( $fp, "$node->nodeValue\n" ); + + } else if ( $nodename=="dynamic" ) + { + if ( !is_null($node->id) ) + { + $variants = ChildrenArray ( $node,"variant" ); + $this->Dump ( $variants[$this->_counters[$node->id]], $fp, $dynamic_only, $agentid ); + } + } else if ( strpos ( $nodename, "agent" )===0 ) + { + if ( $agentid==="all" || $nodename=="agent$agentid" ) + foreach ( ChildrenArray($node) as $child ) + $this->Dump ( $child, $fp, $dynamic_only, $agentid ); + } else + { + foreach ( ChildrenArray($node) as $child ) + $this->Dump ( $child, $fp, $dynamic_only, $agentid ); + } + } +} + + +function HandleFailure ( $config, $report, $error, &$nfailed ) +{ + $ret = true; + if ( !IsModelGenMode() && !$config->ModelSubtestFailed () ) + { + $nfailed++; + $ret = false; + + fwrite ( $report, "SUBTEST FAILED, UNEXPECTED ERROR:\n" ); + } + + fwrite ( $report, "$error\n" ); + $config->SubtestFailed (); + + return $ret; +} + + +function EraseDirContents ( $path ) +{ + $fp = opendir ( $path ); + + if ( $fp ) + { + while ( ( $file = readdir ( $fp ) ) !== false ) + { + if ( $file != "." && $file != ".." && !is_dir ( $file ) ) + unlink ( "$path/$file" ); + } + + closedir ( $fp ); + } +} + + +function CheckConfig ( $config, $path ) +{ + global $g_id64, $windows; + + if ( $config->Requires("id64") && !$g_id64 ) + { + printf ( "SKIPPING %s, %s - enable id64 to run this test\n", $path, $config->Name () ); + return false; + } + + if ( $config->Requires("id32") && $g_id64 ) + { + printf ( "SKIPPING %s, %s - disable id64 to run this test\n", $path, $config->Name () ); + return false; + } + + if ( $config->Requires("non-windows") && $windows ) + { + printf ( "SKIPPING %s, %s - use non-Windows system to run this test\n", $path, $config->Name () ); + return false; + } + + if ( $config->Requires("non-rt") && $config->IsRt() ) + { + printf ( "SKIPPING %s, %s - explicitly non-RT test skipped in RT mode\n", $path, $config->Name () ); + return false; + } + + if ( $config->NeedIndexerEx() && $config->IsRt() ) + { + printf ( "SKIPPING %s, %s - non-RT test that uses indexer skipped in RT mode\n", $path, $config->Name () ); + return false; + } + + return true; +} + +function MarkTest ( $logfile, $test_dir ) +{ + $log = fopen ( $logfile, "a" ); + fwrite ( $log, "*** in test $test_dir ***\n"); + fclose ( $log ); +} + + +function RunTest ( $test_dir, $skipdemo, $usemarks ) +{ + global $indexer_data_path, $agents, $sd_pid_file, $sd_managed_searchd, + $sd_skip_indexer, $g_id64, $windows, $g_locals, $sd_log, $sd_query_log; + + $model_file = $test_dir."/model.bin"; + $conf_dir = $test_dir."/Conf"; + + $config = new SphinxConfig; + $lmodel = $config->LoadModel ( $model_file ); + $isdemo = false; + + if ( $lmodel==-1 ) + { + if ( $skipdemo ) + { + printf ( "Skipping %s, - this is demo or bugreport (no model.bin file)\n", $test_dir ); + return array ( "tests_total"=>0, "tests_failed"=>0, "tests_skipped"=>1 ); + } + $isdemo = true; + } + + if ( !$config->Load ( $test_dir."/test.xml" ) ) + return; + + $config->SetTestDir ( $test_dir ); + $prefix = sprintf ( "testing %s, %s...", $test_dir, $config->Name () ); + + if ( !CheckConfig ( $config, $test_dir ) ) + return array ( "tests_total"=>0, "tests_failed"=>0, "tests_skipped"=>1 ); + + if ( $lmodel==0 ) + { + printf ( "$prefix FAILED, error loading model\n" ); + return; + } + + if ( $config->IsNeedDB() ) + { + $connection = CreateDB ( $config->DB_Drop(), $config->DB_Create(), $config->DB_Insert(), $config->DB_CustomInsert(), $sd_skip_indexer ); + if ( $connection === false ) + { + printf ( "$prefix FAILED, error creating test DB: %s\n", mysql_error() ); + return; + } + $config->SetConnection($connection); + } + + if ( !file_exists ( $conf_dir ) ) + mkdir ( $conf_dir ); + + $report_path = "$test_dir/report"; + $report_file = "$report_path.txt"; + $report = fopen ( $report_file, "w" ); + + $nfailed = 0; + $error = ""; + $log = ""; // subtest failures log + $nsubtests = $config->SubtestCount(); + + // config to pid hash, instances to stop + // static is only to workaround PHP braindamage, otherwise $stop gets reset (at least on 5.2.2 under win32) + static $stop = array(); + $oldlog = ''; + $oldquerylog = ''; + if ( $isdemo ) + { + $oldlog = $sd_log; + $oldquerylog = $sd_query_log; + $sd_log = "$test_dir/searchd.log"; + $sd_query_log = "$test_dir/query.log"; + if (file_exists($sd_log)) + unlink ($sd_log); + if (file_exists($sd_query_log)) + unlink ($sd_query_log); + } + + if ( $usemarks ) + { + MarkTest($sd_log,$test_dir); + MarkTest($sd_query_log,$test_dir); + } + + do + { + // stop them all + if ( !$sd_managed_searchd ) + foreach ( $stop as $conf=>$pid ) + StopSearchd ( $conf, $pid ); + $stop = array(); + + // do the dew + $subtest = $config->SubtestNo()+1; + print ( "$prefix $subtest/$nsubtests\r" ); + $config->WriteReportHeader ( $report ); + + $config->SetAgent ( $agents [0] ); + $msg = ''; + if (!$config->WriteConfig ( $conf_dir."/"."config_".$config->SubtestNo ().".conf", "all", $msg, false)) + { + print ("Interrupted, $msg\n"); + continue; + } + $config->WriteConfig ( "config.conf", "all", $msg, $config->NumAgents () < 2 ); + + EraseDirContents ( $indexer_data_path ); + + if ( $config->IsSkipIndexer()===false && $sd_managed_searchd===false && $sd_skip_indexer===false ) + { + // standard run + if ( !$config->IsRt() ) + { + $indexer_ret = RunIndexer ( $error, "--all" ); + if ( $indexer_ret==2 ) + { + fwrite ( $report, "$error\n" ); + } else if ( $indexer_ret!=0 ) + { + if ( !HandleFailure ( $config, $report, $error, $nfailed ) ) + $log .= "\tsubtest $subtest: error running indexer with code $indexer_ret; see $report_file\n"; + continue; + + } + } + + // additional optional runs (eg for merge tests) + $indexer_ret = $config->RunIndexerEx ( $error ); + if ( $indexer_ret==2 ) + { + fwrite ( $report, "$error\n" ); + } else if ( $indexer_ret!=0 ) + { + if ( !HandleFailure ( $config, $report, $error, $nfailed ) ) + $log .= "\tsubtest $subtest: error running indexer with code $indexer_ret; see $report_file\n"; + continue; + + } + } + + $searchd_error = FALSE; + + if ( $config->NumAgents () == 1 ) + { + if ( $sd_managed_searchd ) + $searchd_ret = 0; + else + $searchd_ret = StartSearchd ( "config.conf", "error.txt", $sd_pid_file, $error, $config->Requires ( "watchdog" ) ); + + $stop["config.conf"] = $sd_pid_file; + + if ( $searchd_ret == 1 ) + { + if ( !HandleFailure ( $config, $report, $error, $nfailed ) ) + $log .= "\tsubtest $subtest: error starting searchd; see $report_file\n"; + + $searchd_error = TRUE; + } + else if ( $searchd_ret==2 ) + { + fwrite ( $report, "$error\n" ); + } + } + else + for ( $i = $config->NumAgents () - 1; $i >= 0 && !$searchd_error; $i-- ) + { + static $agent_id = 0; + $agent_id++; + + $config_file = "config_".$agent_id.".conf"; + $pid_file = "searchd_".$agent_id.".pid"; + $stop[$config_file] = $pid_file; + $msg = ''; + $config->SetAgent ( $agents [$i] ); + $config->SetPIDFile ( $pid_file ); + if ( !$config->WriteConfig ( $config_file, $i, $msg ) ) + continue; + + if ( $sd_managed_searchd ) + $searchd_ret = 0; + else + $searchd_ret = StartSearchd ( $config_file, "error_".$agent_id.".txt", $pid_file, $error, $config->Requires ( "watchdog" ) ); + + if ( $searchd_ret == 1 ) + { + if ( !HandleFailure ( $config, $report, $error, $nfailed ) ) + $log .= "\tsubtest $subtest: error starting searchd; see $report_file\n"; + + $searchd_error = TRUE; + + } + else if ( $searchd_ret==2 ) + { + fwrite ( $report, "$error\n" ); + } + + } + + if ( $searchd_error ) + continue; + + // in case of RT index - run "insert into" instead of indexer + if ( $config->IsRt () ) + $config->InsertIntoIndexer ( $error ); + + if ( $config->IsQueryTest () ) + { + $error = ""; + if ( ! $config->RunQuery ( "*", $error ) ) + { + if ( !HandleFailure ( $config, $report, "$error\n", $nfailed ) ) + $log .= "\tsubtest $subtest: query error: $error\n"; + continue; + } + } + else + { + if ( ! $config->RunCustomTest ( $error ) ) + { + if ( !HandleFailure ( $config, $report, "$error\n", $nfailed ) ) + $log .= "\tsubtest $subtest: query error: $error\n"; + continue; + } + } + + if ( $config->IsSphinxqlTest () ) + { + $error = ""; + if ( ! $config->RunQuerySphinxQL ( $error ) ) + { + if ( !HandleFailure ( $config, $report, "$error\n", $nfailed ) ) + $log .= "\tsubtest $subtest: query error: $error\n"; + continue; + } + } + + $allmatch = $isdemo || IsModelGenMode() || $config->CompareToModel(); + if ( !$allmatch ) + { + $log .= "\tsubtest $subtest: query results mismatch; see $report_file\n"; + $nfailed++; + } + + if ( $isdemo ) + $log .= "\tdemo/bugreport $subtest done; see $report_file\n"; + + $config->WriteResults ( $report ); + + if ( !$allmatch ) + { + fwrite ( $report, "SUBTEST FAILED, RESULTS ARE DIFFERENT FROM THE REFERENCE:\n\n" ); + $config->WriteReferenceResultsDiff ( $report ); + } + + $config->SubtestFinished (); + } + while ( $config->CreateNextConfig () ); + + if ( $isdemo ) + { + $sd_log = $oldlog; + $sd_query_log = $oldquerylog; + } + + if ( !$sd_managed_searchd ) + foreach ( $stop as $conf=>$pid ) + StopSearchd ( $conf, $pid ); + + $total = $config->SubtestNo()+1; + if ( IsModelGenMode () ) + { + if ( $config->CheckVariants ( $report_path."_variant.txt" ) ) + { + $config->WriteModel ( $model_file ); + printf ( "$prefix done; %d/%d subtests run\n", $config->SubtestNo(), $nsubtests ); + } + else + { + printf ( "$prefix done; %d/%d subtests: VARIANT CHECK FAILED\n", $config->SubtestNo(), $nsubtests ); + $nfailed = $total; + } + } + else if ( $nfailed==0 ) + printf ( "$prefix done; %d/%d subtests OK\n", $config->SubtestNo(), $nsubtests ); + else + printf ( "$prefix done; %d/%d subtests FAILED:\n%s", $nfailed, $nsubtests, $log ); + + fclose ( $report ); + + // cleanup DB after ourselves + if ( !array_key_exists ('no_drop_db', $g_locals) && isset($connection) ) + foreach ( $config->DB_Drop() as $q ) + mysql_wr ( $q, $connection ); + + return array ( "tests_total"=>$total, "tests_failed"=>$nfailed, "tests_skipped"=>0 ); +} + +// +// $Id$ +// diff --git a/coreseek/csft-4.1/test/html_120.txt b/coreseek/csft-4.1/test/html_120.txt new file mode 100755 index 0000000..87ee5f1 --- /dev/null +++ b/coreseek/csft-4.1/test/html_120.txt @@ -0,0 +1 @@ +

    That paper also reminds me end point
    cool friend \ No newline at end of file diff --git a/coreseek/csft-4.1/test/settings.inc b/coreseek/csft-4.1/test/settings.inc new file mode 100755 index 0000000..f0d0191 --- /dev/null +++ b/coreseek/csft-4.1/test/settings.inc @@ -0,0 +1,136 @@ + $sd_address, "port" => $sd_port, "sqlport" => $sd_sphinxql_port ), + array ( "address" => $agent_address, "port" => $agent_port, "sqlport" => $agent_port_sql ), + array ( "address" => $agent_address, "port" => $agent_port+1, "sqlport" => $agent_port_sql+1 ) ); + +$index_data_path = "data"; + +$g_model = false; +$g_id64 = false; +$g_strict = false; +$g_skipdemo = false; +$g_usemarks = true; // that we mark the output of every test in the searchd.log and query.log +$g_strictverbose = false; + +$windows = isset($_SERVER["WINDIR"]) || isset($_SERVER["windir"]) || isset($_SERVER["HOMEDRIVE"]); +$action_retries = 20; +$action_wait_timeout = 50000; + +$g_locals = null; +$g_site_defaults = array +( + 'queries' => 'queries.txt', + 'qlimit' => null, + 'api' => '../api/sphinxapi.php', + 'mode' => 'aggregate', + 'skip-searchd' => false, + 'force-reindex' => false, + 'malloc-scribble' => false, + + 'db-host' => 'localhost', + 'db-user' => 'root', + 'db-password' => '', + 'db-name' => 'test', + 'db-port' => 3306 +); + +// localsettings could include dev's own parameters +// which is not to be commited into the public repo (in opposite to this settings.inc) +if ( file_exists ('localsettings.inc') ) + require_once ( 'localsettings.inc' ); + +function GetBanner () +{ + global $g_locals; + + exec ( $g_locals['indexer'], $output, $result ); + if ( count($output) == 0 ) + { + print "ERROR: failed to run the indexer\n"; + exit ( 1 ); + } + else + return $output; +} + +function GuessIdSize () +{ + global $g_id64; + $banner = GetBanner(); + $g_id64 = strstr ( $banner[0], 'id64' ) !== false; +} + +function GetVersion () +{ + $banner = GetBanner(); + return $banner[0]; +} + +function PublishLocals ( $locals, $benchmark ) +{ + global $g_locals, $g_site_defaults, $windows; + $sources = array(); + + if ( @$locals['root'] && !@$locals['bin'] && !@$locals['api'] ) + { + $locals['bin'] = $locals['root'] . '/src/'; + $locals['api'] = $locals['root'] . '/api/sphinxapi.php'; + } + + $text = @file_get_contents ( getenv('HOME') . '/.sphinx' ); + if ( $text ) + { + eval('$init = array ' . $text . ';'); + $sources[] = $init; + } + $sources[] = $g_site_defaults; + + foreach ( $sources as $source ) + { + foreach ( $source as $key => $value ) + { + if ( !array_key_exists ( $key, $locals ) ) + $locals[$key] = $value; + } + } + + if ( !@$locals['bin'] ) + { + if ( $windows ) + $locals['bin'] = $benchmark ? '..\\bin\\release\\' : '..\\bin\\debug\\'; + else + $locals['bin'] = '../src/'; + } + + $ext = $windows ? ".exe" : ""; + foreach ( array ( 'searchd', 'indexer' ) as $key ) + { + if ( !array_key_exists ( $key, $locals ) ) + $locals[$key] = $locals['bin'] . $key . $ext; + } + + $g_locals = $locals; +} + +?> diff --git a/coreseek/csft-4.1/test/stopwords.txt b/coreseek/csft-4.1/test/stopwords.txt new file mode 100755 index 0000000..414450b --- /dev/null +++ b/coreseek/csft-4.1/test/stopwords.txt @@ -0,0 +1,4 @@ +a +the +and +of diff --git a/coreseek/csft-4.1/test/stopwords_121.txt b/coreseek/csft-4.1/test/stopwords_121.txt new file mode 100755 index 0000000..d28d40b --- /dev/null +++ b/coreseek/csft-4.1/test/stopwords_121.txt @@ -0,0 +1 @@ +add \ No newline at end of file diff --git a/coreseek/csft-4.1/test/synonyms.txt b/coreseek/csft-4.1/test/synonyms.txt new file mode 100755 index 0000000..ca40945 --- /dev/null +++ b/coreseek/csft-4.1/test/synonyms.txt @@ -0,0 +1,3 @@ +MS Windows => Windows +Microsoft Windows => Windows +Windows => Windows \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test-templates.xml b/coreseek/csft-4.1/test/test-templates.xml new file mode 100755 index 0000000..2fa64a4 --- /dev/null +++ b/coreseek/csft-4.1/test/test-templates.xml @@ -0,0 +1,83 @@ + + + +regular index test template + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = select * from test_table + sql_attr_uint = gid +} + +index test +{ + source = test + path = /test +} + + + +CREATE TABLE test_table +( + id INTEGER PRIMARY KEY NOT NULL, + gid INTEGER NOT NULL, + title VARCHAR(255) NOT NULL +); + +DROP TABLE IF EXISTS test_table; +INSERT INTO test_table VALUES ( 1, 123, 'hello world' ); + + +hello + + + + + + + + + +RT: test template + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +index test +{ + type = rt + path = data/test + rt_attr_uint = gid + rt_field = title +} + + + +insert into test ( id, gid, title ) values ( 1, 123, 'hello world' ) +select * from test + + + diff --git a/coreseek/csft-4.1/test/test_001/model.bin b/coreseek/csft-4.1/test/test_001/model.bin new file mode 100755 index 0000000..615cdf9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_001/model.bin @@ -0,0 +1 @@ +a:18:{i:0;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}}i:1;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}}i:2;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}}i:3;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}}i:4;a:1:{i:0;s:6:"failed";}i:5;a:1:{i:0;s:6:"failed";}i:6;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}}i:7;a:1:{i:0;s:6:"failed";}i:8;a:1:{i:0;s:6:"failed";}i:9;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}}i:10;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}}i:11;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}}i:12;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}}i:13;a:1:{i:0;s:6:"failed";}i:14;a:1:{i:0;s:6:"failed";}i:15;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}}i:16;a:1:{i:0;s:6:"failed";}i:17;a:1:{i:0;s:6:"failed";}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_001/test.xml b/coreseek/csft-4.1/test/test_001/test.xml new file mode 100755 index 0000000..0ea0540 --- /dev/null +++ b/coreseek/csft-4.1/test/test_001/test.xml @@ -0,0 +1,77 @@ + + + prefix/infix indexing (part 1) + + indexer +{ + mem_limit = 16M +} + +searchd +{ + + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + + + min_word_len = 0 + + + min_prefix_len = 0 + min_prefix_len = 1 + min_prefix_len = 3 + + + min_infix_len = 0 + min_infix_len = 1 + min_infix_len = 3 + + + enable_star = 0 + enable_star = 1 + + } + + + admin + *earc* + up* + dmin + rep + pda + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan') + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_002/model.bin b/coreseek/csft-4.1/test/test_002/model.bin new file mode 100755 index 0000000..9ce3366 --- /dev/null +++ b/coreseek/csft-4.1/test/test_002/model.bin @@ -0,0 +1 @@ +a:18:{i:0;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:1:"I";}}i:1;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:1:"I";}}i:2;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:1:"I";}}i:3;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:2:"13";}}s:5:"query";s:1:"I";}}i:4;a:1:{i:0;s:6:"failed";}i:5;a:1:{i:0;s:6:"failed";}i:6;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:1:"I";}}i:7;a:1:{i:0;s:6:"failed";}i:8;a:1:{i:0;s:6:"failed";}i:9;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:1:"I";}}i:10;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:1:"I";}}i:11;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:1:"I";}}i:12;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:1:"I";}}i:13;a:1:{i:0;s:6:"failed";}i:14;a:1:{i:0;s:6:"failed";}i:15;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"i";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:1:"I";}}i:16;a:1:{i:0;s:6:"failed";}i:17;a:1:{i:0;s:6:"failed";}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_002/test.xml b/coreseek/csft-4.1/test/test_002/test.xml new file mode 100755 index 0000000..10aa9ac --- /dev/null +++ b/coreseek/csft-4.1/test/test_002/test.xml @@ -0,0 +1,79 @@ + + + prefix/infix indexing (part 2) + + indexer +{ + mem_limit = 16M +} + +searchd +{ + + + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + + + min_word_len = 1 + + + min_prefix_len = 0 + min_prefix_len = 1 + min_prefix_len = 3 + + + min_infix_len = 0 + min_infix_len = 1 + min_infix_len = 3 + + + enable_star = 0 + enable_star = 1 + + } + + + admin + *earc* + up* + dmin + rep + pda + I + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan') + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_003/model.bin b/coreseek/csft-4.1/test/test_003/model.bin new file mode 100755 index 0000000..2f92e1a --- /dev/null +++ b/coreseek/csft-4.1/test/test_003/model.bin @@ -0,0 +1 @@ +a:18:{i:0;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:1;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:2;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:3;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"up*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:4;a:1:{i:0;s:6:"failed";}i:5;a:1:{i:0;s:6:"failed";}i:6;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"up*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dmin";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:7;a:1:{i:0;s:6:"failed";}i:8;a:1:{i:0;s:6:"failed";}i:9;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:10;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"i*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:11;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'up*' ";s:6:"status";i:3;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'i*' ";s:6:"status";i:3;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"i*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:12;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"i*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:13;a:1:{i:0;s:6:"failed";}i:14;a:1:{i:0;s:6:"failed";}i:15;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min infix length. word: 'up*' ";s:6:"status";i:3;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"I";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:60:"Query word length is less than min infix length. word: 'i*' ";s:6:"status";i:3;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"i*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"I*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"for";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"for";}}i:16;a:1:{i:0;s:6:"failed";}i:17;a:1:{i:0;s:6:"failed";}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_003/test.xml b/coreseek/csft-4.1/test/test_003/test.xml new file mode 100755 index 0000000..96dcd81 --- /dev/null +++ b/coreseek/csft-4.1/test/test_003/test.xml @@ -0,0 +1,82 @@ + + + prefix/infix indexing (part 3) + + indexer +{ + mem_limit = 16M +} + +searchd +{ + + + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table +} + + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + + + min_word_len = 3 + + + min_prefix_len = 0 + min_prefix_len = 1 + min_prefix_len = 3 + + + min_infix_len = 0 + min_infix_len = 1 + min_infix_len = 3 + + + enable_star = 0 + enable_star = 1 + + } + + + admin + *earc* + up* + dmin + rep + pda + I + I* + for + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan') + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_004/model.bin b/coreseek/csft-4.1/test/test_004/model.bin new file mode 100755 index 0000000..62c5136 --- /dev/null +++ b/coreseek/csft-4.1/test/test_004/model.bin @@ -0,0 +1 @@ +a:16:{i:0;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:1;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:2;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:3;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:4;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:5;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:6;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:7;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:8;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:9;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:10;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:11;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:12;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:13;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:14;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:15;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_004/test.xml b/coreseek/csft-4.1/test/test_004/test.xml new file mode 100755 index 0000000..37aa662 --- /dev/null +++ b/coreseek/csft-4.1/test/test_004/test.xml @@ -0,0 +1,77 @@ + + + prefix_fields/infix_fields (part 1) + + indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + min_word_len = 0 + enable_star = 1 + + + min_infix_len = 0 + min_prefix_len = 3 + + + prefix_fields = + prefix_fields = subject + prefix_fields = body + prefix_fields = body, author + + + infix_fields = + infix_fields = SUBJECT + infix_fields = body + infix_fields = subject, AUTHOR + + } + + + enab* + grea* + Mak* + *ble* + *thor* + *oda* + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan') + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_005/model.bin b/coreseek/csft-4.1/test/test_005/model.bin new file mode 100755 index 0000000..da45ab4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_005/model.bin @@ -0,0 +1 @@ +a:16:{i:0;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}i:1;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}i:2;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}i:3;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}i:4;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:5;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:6;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:7;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:8;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:9;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:10;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:11;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:12;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}i:13;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}i:14;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}i:15;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_005/test.xml b/coreseek/csft-4.1/test/test_005/test.xml new file mode 100755 index 0000000..b6e1015 --- /dev/null +++ b/coreseek/csft-4.1/test/test_005/test.xml @@ -0,0 +1,77 @@ + + + prefix_fields/infix_fields (part 2) + + indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + min_word_len = 0 + enable_star = 1 + + + min_infix_len = 3 + min_prefix_len = 0 + + + prefix_fields = + prefix_fields = subject + prefix_fields = body + prefix_fields = body, author + + + infix_fields = + infix_fields = SUBJECT + infix_fields = body + infix_fields = subject, AUTHOR + + } + + + enab* + grea* + Mak* + *ble* + *thor* + *oda* + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan') + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_006/model.bin b/coreseek/csft-4.1/test/test_006/model.bin new file mode 100755 index 0000000..47e1eba --- /dev/null +++ b/coreseek/csft-4.1/test/test_006/model.bin @@ -0,0 +1 @@ +a:16:{i:0;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:1;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:2;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:3;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:4;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:5;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:6;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:7;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:8;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:9;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.015";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:10;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:11;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:12;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:13;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:14;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:15;a:6:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"enab";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"enab*";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"grea";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mak";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ble";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"thor";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"oda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_006/test.xml b/coreseek/csft-4.1/test/test_006/test.xml new file mode 100755 index 0000000..b7831d1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_006/test.xml @@ -0,0 +1,77 @@ + + + prefix_fields/infix_fields (part 3) + + indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + min_word_len = 0 + enable_star = 1 + + + min_infix_len = 0 + min_prefix_len = 0 + + + prefix_fields = + prefix_fields = subject + prefix_fields = body + prefix_fields = body, author + + + infix_fields = + infix_fields = SUBJECT + infix_fields = body + infix_fields = subject, AUTHOR + + } + + + enab* + grea* + Mak* + *ble* + *thor* + *oda* + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan') + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_007/model.bin b/coreseek/csft-4.1/test/test_007/model.bin new file mode 100755 index 0000000..740eb7f --- /dev/null +++ b/coreseek/csft-4.1/test/test_007/model.bin @@ -0,0 +1 @@ +a:16:{i:0;a:1:{i:0;s:6:"failed";}i:1;a:1:{i:0;s:6:"failed";}i:2;a:1:{i:0;s:6:"failed";}i:3;a:1:{i:0;s:6:"failed";}i:4;a:1:{i:0;s:6:"failed";}i:5;a:1:{i:0;s:6:"failed";}i:6;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:7;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:8;a:1:{i:0;s:6:"failed";}i:9;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"Mak*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*ble*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"*thor*";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"*oda*";}}i:10;a:1:{i:0;s:6:"failed";}i:11;a:1:{i:0;s:6:"failed";}i:12;a:1:{i:0;s:6:"failed";}i:13;a:1:{i:0;s:6:"failed";}i:14;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"enab*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:5:"enab*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"grea*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"grea*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"mak*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"Mak*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*ble*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"6";}}s:5:"query";s:5:"*ble*";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*thor*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*thor*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"*oda*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*oda*";}}i:15;a:1:{i:0;s:6:"failed";}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_007/test.xml b/coreseek/csft-4.1/test/test_007/test.xml new file mode 100755 index 0000000..40dbd20 --- /dev/null +++ b/coreseek/csft-4.1/test/test_007/test.xml @@ -0,0 +1,77 @@ + + + prefix_fields/infix_fields (part 4) + + indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + min_word_len = 0 + enable_star = 1 + + + min_infix_len = 3 + min_prefix_len = 3 + + + prefix_fields = + prefix_fields = subject + prefix_fields = body + prefix_fields = body, author + + + infix_fields = + infix_fields = SUBJECT + infix_fields = body + infix_fields = subject, AUTHOR + + } + + + enab* + grea* + Mak* + *ble* + *thor* + *oda* + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan') + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_008/model.bin b/coreseek/csft-4.1/test/test_008/model.bin new file mode 100755 index 0000000..7ccd3f1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_008/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:6:"adtext";i:1;s:7:"heading";i:2;s:8:"postcode";}s:5:"attrs";a:6:{s:3:"lng";i:5;s:3:"lat";i:5;s:7:"section";i:1;s:7:"make_id";i:1;s:15:"transmission_id";i:1;s:8:"@geodist";i:5;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"lng";d:-0.079998902976512908935546875;s:3:"lat";d:0.891974985599517822265625;s:7:"section";s:1:"1";s:7:"make_id";s:1:"5";s:15:"transmission_id";s:1:"0";s:8:"@geodist";d:291086.09375;}}i:211250;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;s:7:"section";s:1:"0";s:7:"make_id";s:2:"29";s:15:"transmission_id";s:1:"1";s:8:"@geodist";d:85369.6015625;}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"lng";d:-0.0798577964305877685546875;s:3:"lat";d:0.937717020511627197265625;s:7:"section";s:1:"1";s:7:"make_id";s:1:"8";s:15:"transmission_id";s:1:"1";s:8:"@geodist";d:0;}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_008/test.xml b/coreseek/csft-4.1/test/test_008/test.xml new file mode 100755 index 0000000..ccba068 --- /dev/null +++ b/coreseek/csft-4.1/test/test_008/test.xml @@ -0,0 +1,100 @@ + + + @geodist sorting + + indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, adtext, heading, postcode, lng, lat, section, make_id, transmission_id FROM test_table + + sql_attr_float = lng + sql_attr_float = lat + sql_attr_uint = section + sql_attr_uint = make_id + sql_attr_uint = transmission_id +} + + +index lj +{ + source = srclj + path = /lj + docinfo = extern + charset_type = utf-8 + min_word_len = 1 + charset_type = sbcs +} + + + + + lng + lat + @geodist + + + + $client->SetGeoAnchor ('lng','lat',-0.0798578,0.937717 ); + $client->SetSortMode ( SPH_SORT_EXTENDED, '@geodist DESC' ); + $results = $client->Query ( $query, $index ); + + + + + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL auto_increment, + `section` int(11) NOT NULL, + `system_id` tinyint(4) NOT NULL, + `adtext` varchar(255) NOT NULL, + `heading` varchar(500) NOT NULL, + `price` int(11) NOT NULL default '0', + `postcode` varchar(10) NOT NULL, + `gre` int(11) NOT NULL, + `grn` int(11) NOT NULL, + `str_at1` varchar(255) NOT NULL, + `str_at2` varchar(255) NOT NULL, + `str_at3` varchar(255) NOT NULL, + `str_at4` varchar(255) NOT NULL, + `str_at5` varchar(255) NOT NULL, + `int_at1` int(11) default NULL, + `int_at2` int(11) default NULL, + `int_at3` int(11) default NULL, + `int_at4` int(11) default NULL, + `int_at5` int(11) default NULL, + `float_at1` float default NULL, + `float_at2` float default NULL, + `float_at3` float default NULL, + `lng` float NOT NULL default '0', + `lat` float NOT NULL default '0', + `make_id` int(11) NOT NULL, + `transmission_id` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `section`, `system_id`, `adtext`, `heading`, `price`, `postcode`, `gre`, `grn`, `str_at1`, `str_at2`, `str_at3`, `str_at4`, `str_at5`, `int_at1`, `int_at2`, `int_at3`, `int_at4`, `int_at5`, `float_at1`, `float_at2`, `float_at3`, `lng`, `lat`, `make_id`, `transmission_id`) VALUES +(1, 1, 2, 'FORD', 'Ford KA', 2790, 'EN3 5BT', 535000, 197400, 'Ford', 'KA', 'Grey', 'Diesel', '', 18662, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0798578, 0.937717, 8, 1), +(2, 1, 0, 'until', 'Vauxhall Corsa', 5800, 'BN42 4RN', 524000, 106100, 'Vauxhall', 'Corsa', 'Red', 'Petrol', '', 19296, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0799989, 0.891975, 5, 0), +(211250, 0, 1, 'Quattro Roadster', 'Audi TT', 13995, 'E9 7DG', 535600, 184200, '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0721455, 0.926761, 29, 1); + + diff --git a/coreseek/csft-4.1/test/test_009/model.bin b/coreseek/csft-4.1/test/test_009/model.bin new file mode 100755 index 0000000..4629e58 --- /dev/null +++ b/coreseek/csft-4.1/test/test_009/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:6:"adtext";i:1;s:7:"heading";i:2;s:8:"postcode";}s:5:"attrs";a:6:{s:3:"lng";i:5;s:3:"lat";i:5;s:7:"section";i:1;s:7:"make_id";i:1;s:15:"transmission_id";i:1;s:8:"@geodist";i:5;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"lng";d:-0.079998902976512908935546875;s:3:"lat";d:0.891974985599517822265625;s:7:"section";s:1:"1";s:7:"make_id";s:1:"5";s:15:"transmission_id";s:1:"0";s:8:"@geodist";d:291086.09375;}}i:211250;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;s:7:"section";s:1:"0";s:7:"make_id";s:2:"29";s:15:"transmission_id";s:1:"1";s:8:"@geodist";d:85369.6015625;}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"lng";d:-0.0798577964305877685546875;s:3:"lat";d:0.937717020511627197265625;s:7:"section";s:1:"1";s:7:"make_id";s:1:"8";s:15:"transmission_id";s:1:"1";s:8:"@geodist";d:0;}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.026";s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_009/test.xml b/coreseek/csft-4.1/test/test_009/test.xml new file mode 100755 index 0000000..1acc289 --- /dev/null +++ b/coreseek/csft-4.1/test/test_009/test.xml @@ -0,0 +1,186 @@ + + + attributes over network + + indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src1 +{ + type = mysql + + + + sql_query = SELECT id, adtext, heading, postcode, lng, lat, section, make_id, transmission_id FROM test_table + + sql_attr_float = lng + sql_attr_float = lat + sql_attr_uint = section + sql_attr_uint = make_id + sql_attr_uint = transmission_id +} + +source src2 +{ + type = mysql + + + + sql_query = SELECT id, adtext, heading, postcode, lng, lat, section, make_id, transmission_id FROM test_table + + sql_attr_float = lng + sql_attr_float = lat + sql_attr_uint = section + sql_attr_uint = make_id + sql_attr_uint = transmission_id +} + + +source src3 +{ + type = mysql + + + + sql_query = SELECT id, adtext, heading, postcode, lng, lat, section, make_id, transmission_id FROM test_table + + sql_attr_float = lng + sql_attr_float = lat + sql_attr_uint = section + sql_attr_uint = make_id + sql_attr_uint = transmission_id +} + +source src4 +{ + type = mysql + + + + sql_query = SELECT id, adtext, heading, postcode, lng, lat, section, make_id, transmission_id FROM test_table + + sql_attr_float = lng + sql_attr_float = lat + sql_attr_uint = section + sql_attr_uint = make_id + sql_attr_uint = transmission_id +} + +index block1 +{ + source = src1 + path = /block1 + docinfo = extern + charset_type = utf-8 + min_word_len = 1 + charset_type = sbcs +} + +index block2 +{ + source = src2 + path = /block2 + docinfo = extern + charset_type = utf-8 + min_word_len = 1 + charset_type = sbcs +} + +index block3 +{ + source = src3 + path = /block3 + docinfo = extern + charset_type = utf-8 + min_word_len = 1 + charset_type = sbcs +} + +index block4 +{ + source = src4 + path = /block4 + docinfo = extern + charset_type = utf-8 + min_word_len = 1 + charset_type = sbcs +} + +index dist +{ + type = distributed + local = block1 + agent = :block2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + + + + 2 + + + lng + lat + @geodist + + + + $client->SetGeoAnchor ('lng','lat',-0.0798578,0.937717 ); + $client->SetSortMode ( SPH_SORT_EXTENDED, '@geodist DESC' ); + $results = $client->Query ( $query, 'dist' ); + + + + + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL auto_increment, + `section` int(11) NOT NULL, + `system_id` tinyint(4) NOT NULL, + `adtext` varchar(255) NOT NULL, + `heading` varchar(500) NOT NULL, + `price` int(11) NOT NULL default '0', + `postcode` varchar(10) NOT NULL, + `gre` int(11) NOT NULL, + `grn` int(11) NOT NULL, + `str_at1` varchar(255) NOT NULL, + `str_at2` varchar(255) NOT NULL, + `str_at3` varchar(255) NOT NULL, + `str_at4` varchar(255) NOT NULL, + `str_at5` varchar(255) NOT NULL, + `int_at1` int(11) default NULL, + `int_at2` int(11) default NULL, + `int_at3` int(11) default NULL, + `int_at4` int(11) default NULL, + `int_at5` int(11) default NULL, + `float_at1` float default NULL, + `float_at2` float default NULL, + `float_at3` float default NULL, + `lng` float NOT NULL default '0', + `lat` float NOT NULL default '0', + `make_id` int(11) NOT NULL, + `transmission_id` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `section`, `system_id`, `adtext`, `heading`, `price`, `postcode`, `gre`, `grn`, `str_at1`, `str_at2`, `str_at3`, `str_at4`, `str_at5`, `int_at1`, `int_at2`, `int_at3`, `int_at4`, `int_at5`, `float_at1`, `float_at2`, `float_at3`, `lng`, `lat`, `make_id`, `transmission_id`) VALUES +(1, 1, 2, 'FORD', 'Ford KA', 2790, 'EN3 5BT', 535000, 197400, 'Ford', 'KA', 'Grey', 'Diesel', '', 18662, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0798578, 0.937717, 8, 1), +(2, 1, 0, 'until', 'Vauxhall Corsa', 5800, 'BN42 4RN', 524000, 106100, 'Vauxhall', 'Corsa', 'Red', 'Petrol', '', 19296, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0799989, 0.891975, 5, 0), +(211250, 0, 1, 'Quattro Roadster', 'Audi TT', 13995, 'E9 7DG', 535600, 184200, '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0721455, 0.926761, 29, 1); + + diff --git a/coreseek/csft-4.1/test/test_010/model.bin b/coreseek/csft-4.1/test/test_010/model.bin new file mode 100755 index 0000000..a62ce15 --- /dev/null +++ b/coreseek/csft-4.1/test/test_010/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:6:"adtext";i:1;s:7:"heading";i:2;s:8:"postcode";}s:5:"attrs";a:5:{s:3:"lng";i:5;s:3:"lat";i:5;s:7:"section";i:1;s:15:"transmission_id";i:1;s:7:"make_id";i:1073741825;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"lng";d:-0.0798577964305877685546875;s:3:"lat";d:0.937717020511627197265625;s:7:"section";s:1:"1";s:15:"transmission_id";s:1:"1";s:7:"make_id";a:1:{i:0;s:1:"8";}}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"lng";d:-0.079998902976512908935546875;s:3:"lat";d:0.891974985599517822265625;s:7:"section";s:1:"1";s:15:"transmission_id";s:1:"0";s:7:"make_id";a:1:{i:0;s:1:"5";}}}i:211250;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;s:7:"section";s:1:"0";s:15:"transmission_id";s:1:"1";s:7:"make_id";a:1:{i:0;s:2:"29";}}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}i:1;a:1:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:6:"adtext";i:1;s:7:"heading";i:2;s:8:"postcode";}s:5:"attrs";a:5:{s:3:"lng";i:5;s:3:"lat";i:5;s:7:"section";i:1;s:15:"transmission_id";i:1;s:7:"make_id";i:1073741825;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"lng";d:-0.0798577964305877685546875;s:3:"lat";d:0.937717020511627197265625;s:7:"section";s:1:"1";s:15:"transmission_id";s:1:"1";s:7:"make_id";a:1:{i:0;s:1:"8";}}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"lng";d:-0.079998902976512908935546875;s:3:"lat";d:0.891974985599517822265625;s:7:"section";s:1:"1";s:15:"transmission_id";s:1:"0";s:7:"make_id";a:1:{i:0;s:1:"5";}}}i:211250;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;s:7:"section";s:1:"0";s:15:"transmission_id";s:1:"1";s:7:"make_id";a:1:{i:0;s:2:"29";}}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_010/test.xml b/coreseek/csft-4.1/test/test_010/test.xml new file mode 100755 index 0000000..6924219 --- /dev/null +++ b/coreseek/csft-4.1/test/test_010/test.xml @@ -0,0 +1,94 @@ + + +bitfields + MVA + + + + +indexer +{ +mem_limit = 16M +} + +searchd +{ + +} + +source srclj +{ + type = mysql + + sql_query = SELECT id, adtext, heading, postcode, lng, lat, section, transmission_id FROM test_table + + sql_attr_float = lng + sql_attr_float = lat + sql_attr_uint = section:8 + sql_attr_uint = transmission_id:5 + + sql_attr_multi = uint make_id from query; SELECT id, make_id FROM test_table + sql_attr_multi = bigint make_id from query; SELECT id, make_id FROM test_table + +} +index lj +{ + source = srclj + path = /lj + docinfo = extern + charset_type = utf-8 + min_word_len = 1 + charset_type = sbcs +} + + + + section + make_id + + + + + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL auto_increment, + `section` int(11) NOT NULL, + `system_id` tinyint(4) NOT NULL, + `adtext` varchar(255) NOT NULL, + `heading` varchar(500) NOT NULL, + `price` int(11) NOT NULL default '0', + `postcode` varchar(10) NOT NULL, + `gre` int(11) NOT NULL, + `grn` int(11) NOT NULL, + `str_at1` varchar(255) NOT NULL, + `str_at2` varchar(255) NOT NULL, + `str_at3` varchar(255) NOT NULL, + `str_at4` varchar(255) NOT NULL, + `str_at5` varchar(255) NOT NULL, + `int_at1` int(11) default NULL, + `int_at2` int(11) default NULL, + `int_at3` int(11) default NULL, + `int_at4` int(11) default NULL, + `int_at5` int(11) default NULL, + `float_at1` float default NULL, + `float_at2` float default NULL, + `float_at3` float default NULL, + `lng` float NOT NULL default '0', + `lat` float NOT NULL default '0', + `make_id` int(11) NOT NULL, + `transmission_id` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `section`, `system_id`, `adtext`, `heading`, `price`, `postcode`, `gre`, `grn`, `str_at1`, `str_at2`, `str_at3`, `str_at4`, `str_at5`, `int_at1`, `int_at2`, `int_at3`, `int_at4`, `int_at5`, `float_at1`, `float_at2`, `float_at3`, `lng`, `lat`, `make_id`, `transmission_id`) VALUES +(1, 1, 2, 'FORD', 'Ford KA', 2790, 'EN3 5BT', 535000, 197400, 'Ford', 'KA', 'Grey', 'Diesel', '', 18662, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0798578, 0.937717, 8, 1), +(2, 1, 0, 'until', 'Vauxhall Corsa', 5800, 'BN42 4RN', 524000, 106100, 'Vauxhall', 'Corsa', 'Red', 'Petrol', '', 19296, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0799989, 0.891975, 5, 0), +(211250, 0, 1, 'Quattro Roadster', 'Audi TT', 13995, 'E9 7DG', 535600, 184200, '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0721455, 0.926761, 29, 1); + + diff --git a/coreseek/csft-4.1/test/test_011/model.bin b/coreseek/csft-4.1/test/test_011/model.bin new file mode 100755 index 0000000..1661d72 --- /dev/null +++ b/coreseek/csft-4.1/test/test_011/model.bin @@ -0,0 +1 @@ +a:6:{i:0;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"admin";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"eat";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*eat*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"search";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"*search";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*dmin";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"*rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"*";}}i:1;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"admin";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"eat";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*eat*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"search";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"*search";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*dmin";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"*rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"*";}}i:2;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"admin";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"eat";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*eat*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"search";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"*search";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*dmin";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"*rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"*";}}i:3;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"admin";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"eat";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*eat*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"search";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"*search";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*dmin";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"*rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"*";}}i:4;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"admin";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"*eat*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*eat*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"*search";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"*search";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*dmin";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"*rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"*rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"*";}}i:5;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"admin";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"*eat*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*eat*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"*search";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"*search";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"*dmin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*dmin";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"*rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"*rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_011/test.xml b/coreseek/csft-4.1/test/test_011/test.xml new file mode 100755 index 0000000..ee13723 --- /dev/null +++ b/coreseek/csft-4.1/test/test_011/test.xml @@ -0,0 +1,70 @@ + + + postfixes + + indexer +{ + mem_limit = 16M +} + +searchd +{ + + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + + + min_infix_len = 0 + min_infix_len = 1 + min_infix_len = 3 + + + enable_star = 0 + enable_star = 1 + + } + + + admin + *eat* + *search + *dmin + *rep + + * + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan') + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_012/model.bin b/coreseek/csft-4.1/test/test_012/model.bin new file mode 100755 index 0000000..80fa7a4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_012/model.bin @@ -0,0 +1 @@ +a:16:{i:0;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"алго";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"алго*";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"лиз";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:7:"*лиз";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"бот";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:1;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"алг";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"алго*";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"лиз";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:7:"*лиз";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"бот";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:22:"сравнительн";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:2;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"a350";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"e620";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"u1";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"d500";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"r10";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"p30";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"алго";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"алго*";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"лиз";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:7:"*лиз";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"бот";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:3;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ATMN";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ARK";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"AP";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"TMN";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"RP";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"PT";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"алго";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"алго*";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"лиз";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:7:"*лиз";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"бот";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:4;a:1:{i:0;s:6:"failed";}i:5;a:1:{i:0;s:6:"failed";}i:6;a:1:{i:0;s:6:"failed";}i:7;a:1:{i:0;s:6:"failed";}i:8;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"алго";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"алго*";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"лиз";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:7:"*лиз";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"бот";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:9;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"earc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"up";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"алг";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"алго*";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"лиз";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:7:"*лиз";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"бот";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:22:"сравнительн";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:10;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"a350";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"e620";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"u1";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"d500";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"r10";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"p30";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"алго";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"алго*";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"лиз";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:7:"*лиз";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"бот";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:11;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ATMN";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ARK";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"AP";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"TMN";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"RP";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"PT";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"алго";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"алго*";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"лиз";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:7:"*лиз";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"бот";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:12;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min infix length. word: 'up*' ";s:6:"status";i:3;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:9:"алго*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:5:"query";s:9:"алго*";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"*лиз";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"*лиз";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"*бот*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:13;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"admin";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min infix length. word: 'up*' ";s:6:"status";i:3;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dmin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"rep";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"pda";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:9:"алго*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:5:"query";s:9:"алго*";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"*лиз";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"*лиз";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"*бот*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:22:"сравнительн";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:14;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"a350";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min infix length. word: 'up*' ";s:6:"status";i:3;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"d500";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"r10";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"p30";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:9:"алго*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:5:"query";s:9:"алго*";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"*лиз";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"*лиз";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"*бот*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}i:15;a:10:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ATMN";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"admin";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"*earc*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:5:"query";s:6:"*earc*";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min infix length. word: 'up*' ";s:6:"status";i:3;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"up*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"up*";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"TMN";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"dmin";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"RP";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"rep";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"PT";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"pda";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:9:"алго*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:5:"query";s:9:"алго*";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"*лиз";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"*лиз";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"*бот*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:8:"*бот*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:26:"сравнительный";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:26:"сравнительный";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_012/test.xml b/coreseek/csft-4.1/test/test_012/test.xml new file mode 100755 index 0000000..85b5d8f --- /dev/null +++ b/coreseek/csft-4.1/test/test_012/test.xml @@ -0,0 +1,84 @@ + + + stemmers + infixes (throttled) + + indexer +{ + mem_limit = 16M + max_iops = 20 + max_iosize = 131072 +} + +searchd +{ + + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table + sql_query_pre = SET NAMES utf8 +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + min_word_len = 0 + + + morphology = stem_en + morphology = stem_ru + morphology = soundex + morphology = metaphone + + + min_infix_len = 0 + min_infix_len = 3 + + + enable_star = 0 + enable_star = 1 + + } + + + admin + *earc* + up* + dmin + rep + pda + алго* + *лиз + *бот* + сравнительный + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) CHARACTER SET utf8 + + +DROP TABLE IF EXISTS `test_table` + + SET NAMES utf8 + +INSERT INTO `test_table` VALUES +(1,1,'Problem with enable_star searches','Having star searches is great! Just what we needed','Maurice Makaay'), +(2,2,'Problem with enable_star searches',' But the thing is, that I cannot search for authors anymore','admin'), +(3,3,'Problem with enable_star searches','I will try to repro it here and update you','shodan'), +(4,4,'Алгоритмы', 'Недавно захотел провести сравнительный анализ алгоритмов работы средств полнотекстового поиска.', 'Yuriy' ) + + diff --git a/coreseek/csft-4.1/test/test_013/model.bin b/coreseek/csft-4.1/test/test_013/model.bin new file mode 100755 index 0000000..9fe5b5e --- /dev/null +++ b/coreseek/csft-4.1/test/test_013/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:5:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:16:"числовым";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"4";}}s:5:"query";s:16:"числовым";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"*фры";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"*фры";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:9:"умол*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:9:"умол*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"*пис*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:8:"*пис*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:7:"subject";i:1;s:4:"body";i:2;s:6:"author";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"*hod*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"*hod*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_013/test.xml b/coreseek/csft-4.1/test/test_013/test.xml new file mode 100755 index 0000000..16f5285 --- /dev/null +++ b/coreseek/csft-4.1/test/test_013/test.xml @@ -0,0 +1,62 @@ + + + prefixes/infixes + UTF-8 + + indexer +{ + mem_limit = 16M +} + +searchd +{ + + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, subject, body, author FROM test_table + sql_query_pre = SET NAMES utf8 +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + min_infix_len = 3 + enable_star = 1 +} + + + числовым + *фры + умол* + *пис* + *hod* + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `subject` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `author` varchar(255) NOT NULL default '' +) CHARACTER SET utf8; + + +DROP TABLE IF EXISTS `test_table` + + SET NAMES utf8 + +INSERT INTO `test_table` VALUES +(1,1,'Поиск по числовым значениям','У меня вопрос насчет поиска по числовым значениям.','CAJAX'), +(2,2,'Поиск по числовым значениям','В базе данных встречаются записи с числами, но поиск по ним не дает никаких результатов.','CAJAX'), +(3,3,'Поиск по числовым значениям','Да, по умолчанию цифры считаются корректными символами.','shodan') + + diff --git a/coreseek/csft-4.1/test/test_014/model.bin b/coreseek/csft-4.1/test/test_014/model.bin new file mode 100755 index 0000000..efb4239 --- /dev/null +++ b/coreseek/csft-4.1/test/test_014/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:15:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"abcdef";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ABCDEF";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"a";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:1:"A";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"b";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:1:"B";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"c";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:1:"C";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"d";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:1:"D";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"e";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:1:"E";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"f";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:1:"F";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"7";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.007";s:5:"words";a:7:{s:2:"а";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"б";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"в";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"г";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"д";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"е";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"ж";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:14:"АБВГДЕЖ";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"а";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:2:"А";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"б";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:2:"Б";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:2:"в";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:2:"В";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"г";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:2:"Г";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"д";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:2:"Д";}i:13;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"е";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:2:"Е";}i:14;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"ж";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:2:"Ж";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_014/test.xml b/coreseek/csft-4.1/test/test_014/test.xml new file mode 100755 index 0000000..3ef15b8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_014/test.xml @@ -0,0 +1,69 @@ + + + n-grams + + indexer +{ + mem_limit = 16M +} + +searchd +{ + + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, body FROM test_table + sql_query_pre = SET NAMES utf8 +} + + +index lj +{ + source = srclj + path = /lj + charset_type = utf-8 + charset_table = 0..9, A..Z->a..z, _, a..z + ngram_chars = U+410..U+42F->U+430..U+44F, U+430..U+44F + ngram_len = 1 +} + + + ABCDEF + A + B + C + D + E + F + АБВГДЕЖ + А + Б + В + Г + Д + Е + Ж + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `document_id` int(5) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) CHARACTER SET utf8 + + +DROP TABLE IF EXISTS `test_table` + + SET NAMES utf8 + +INSERT INTO `test_table` VALUES +(1,1,'ABCDEF АБВГДЕЖ') + + diff --git a/coreseek/csft-4.1/test/test_015/model.bin b/coreseek/csft-4.1/test/test_015/model.bin new file mode 100755 index 0000000..1608151 --- /dev/null +++ b/coreseek/csft-4.1/test/test_015/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:111;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"baz";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"bar";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"bar baz bar";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:111;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"foo";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"baz";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"bar";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:"foo bar baz bar";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:444;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:1:"i";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:3:"did";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"it";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"i did it";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:555;a:2:{s:6:"weight";s:1:"5";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:4:{s:4:"lord";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"of";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:5:"rings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:"zee lord of zee rings";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:111;a:2:{s:6:"weight";s:4:"3539";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"baz";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"bar";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""bar baz bar"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:111;a:2:{s:6:"weight";s:4:"4537";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"foo";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"baz";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"bar";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""foo bar baz bar"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:444;a:2:{s:6:"weight";s:4:"3761";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:1:"i";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:3:"did";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"it";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""i did it"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:555;a:2:{s:6:"weight";s:4:"5728";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:4:{s:4:"lord";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"of";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:5:"rings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:""zee lord of zee rings"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:666;a:2:{s:6:"weight";s:4:"9742";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:5:"words";a:6:{i:3702;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"braun";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:6:"series";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}i:3;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}i:370;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}s:6:"shaver";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:49:"Braun 370\-2 3702 370 2 Braun Series 3 370 Shaver";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_015/stops.txt b/coreseek/csft-4.1/test/test_015/stops.txt new file mode 100755 index 0000000..78c6bae --- /dev/null +++ b/coreseek/csft-4.1/test/test_015/stops.txt @@ -0,0 +1 @@ +2 diff --git a/coreseek/csft-4.1/test/test_015/test.xml b/coreseek/csft-4.1/test/test_015/test.xml new file mode 100755 index 0000000..56f6ca1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_015/test.xml @@ -0,0 +1,69 @@ + + + +phrase matching vs duplicate keywords + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT document_id, body FROM test_table +} +index test +{ + source = srctest + path = /test + charset_type = utf-8 + charset_table = 0..9, A..Z->a..z, _, a..z + ngram_chars = U+410..U+42F->U+430..U+44F, U+430..U+44F + ngram_len = 1 + stopwords = /stops.txt +} + + + +bar baz bar +foo bar baz bar +i did it +zee lord of zee rings +"bar baz bar" +"foo bar baz bar" +"i did it" +"zee lord of zee rings" +Braun 370\-2 3702 370 2 Braun Series 3 370 Shaver + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 111, 'lets test foo bar baz bar stuff' ), +( 222, 'bar baz foo' ), +( 333, 'foo baz bar' ), +( 444, 'i i did it it' ), +( 555, 'zee lord of zee rings' ), +( 666, 'Braun 370-2 3702 370 2 Braun Series 3 - 370 Shaver') + + + diff --git a/coreseek/csft-4.1/test/test_016/model.bin b/coreseek/csft-4.1/test/test_016/model.bin new file mode 100755 index 0000000..50c6f5a --- /dev/null +++ b/coreseek/csft-4.1/test/test_016/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"@expr";i:5;}s:7:"matches";a:3:{i:444;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:5:"@expr";d:4;}}i:111;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:5:"@expr";d:1;}}i:222;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:5:"@expr";d:1;}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:4:"test";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:2:"it";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"test it";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"@expr";i:5;}s:7:"matches";a:4:{i:111;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:5:"@expr";d:-1;}}i:222;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:5:"@expr";d:-1;}}i:333;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"2";s:5:"@expr";d:-1;}}i:444;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:5:"@expr";d:-4;}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:4:"test";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:2:"it";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"test it";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_016/test.xml b/coreseek/csft-4.1/test/test_016/test.xml new file mode 100755 index 0000000..7222008 --- /dev/null +++ b/coreseek/csft-4.1/test/test_016/test.xml @@ -0,0 +1,63 @@ + + + +expr sorting vs filters + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT document_id, group_id, body FROM test_table + sql_attr_uint = group_id +} +index test +{ + source = srctest + path = /test + charset_type = utf-8 +} + + + +group_id +@expr + + + +test it +test it + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `group_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 111, 1, 'this is test' ), +( 222, 1, 'just a test' ), +( 333, 2, 'for test-ing purposes' ), +( 444, 1, 'lets test it' ) + + + diff --git a/coreseek/csft-4.1/test/test_017/model.bin b/coreseek/csft-4.1/test/test_017/model.bin new file mode 100755 index 0000000..ee3430e --- /dev/null +++ b/coreseek/csft-4.1/test/test_017/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:8:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:7:"walking";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"shoes";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:13:"walking shoes";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:7:"walking";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"shoes";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:19:"walking in my shoes";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:9:"microsoft";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"office";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:16:"microsoft office";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:9:"microsoft";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"office";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:18:"microsoft a office";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:7:"walking";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"shoes";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:15:""walking shoes"";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:7:"walking";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"shoes";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:21:""walking in my shoes"";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"2557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:9:"microsoft";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"office";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:18:""microsoft office"";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"2557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:9:"microsoft";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"office";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:20:""microsoft a office"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_017/test.xml b/coreseek/csft-4.1/test/test_017/test.xml new file mode 100755 index 0000000..1bedcbf --- /dev/null +++ b/coreseek/csft-4.1/test/test_017/test.xml @@ -0,0 +1,64 @@ + + + +phrase matching vs stop words and short words + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT document_id, body FROM test_table +} + +index test +{ + source = srctest + path = /test + stopwords = stopwords.txt + min_word_len = 3 +} + + + +walking shoes +walking in my shoes +microsoft office +microsoft a office +"walking shoes" +"walking in my shoes" +"microsoft office" +"microsoft a office" + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'walking shoes' ), +( 2, 'try walking in my shoes' ), +( 3, 'Microsoft. The Office.' ), +( 4, 'Microsoft Office' ) + + + diff --git a/coreseek/csft-4.1/test/test_018/model.bin b/coreseek/csft-4.1/test/test_018/model.bin new file mode 100755 index 0000000..a107e44 --- /dev/null +++ b/coreseek/csft-4.1/test/test_018/model.bin @@ -0,0 +1 @@ +a:16:{i:0;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:34:" this, is . MS windows ... ";i:2;s:27:" ... but not [B]Windows[A]";i:3;s:41:" ... is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:1;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:34:" this, is . MS windows ... ";i:2;s:27:" ... but not [B]Windows[A]";i:3;s:41:" ... is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:2;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:34:" this, is . MS windows ... ";i:2;s:39:" ... , is a MS but not [B]Windows[A]";i:3;s:41:" ... is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:3;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:34:" this, is . MS windows ... ";i:2;s:39:" ... , is a MS but not [B]Windows[A]";i:3;s:41:" ... is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:4;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:34:" this, is . MS windows ... ";i:2;s:27:" ... but not [B]Windows[A]";i:3;s:41:" ... is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:5;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:34:" this, is . MS windows ... ";i:2;s:27:" ... but not [B]Windows[A]";i:3;s:41:" ... is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:6;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:34:" this, is . MS windows ... ";i:2;s:39:" ... , is a MS but not [B]Windows[A]";i:3;s:41:" ... is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:7;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:34:" this, is . MS windows....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:34:" this, is . MS windows ... ";i:2;s:39:" ... , is a MS but not [B]Windows[A]";i:3;s:41:" ... is the [B]Microsoft Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:8;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:41:"ab ab ab ab ab ab ab ab ab ab ab [B]MS[A]";i:1;s:46:" this, is . [B]MS[A] [B]windows[A]....?";i:2;s:44:"this , is a [B]MS[A] but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:41:"ab ab ab ab ab ab ab ab ab ab ab [B]MS[A]";i:1;s:46:" this, is . [B]MS[A] [B]windows[A]....?";i:2;s:44:"this , is a [B]MS[A] but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:20:" ... ab ab [B]MS[A]";i:1;s:44:" ... , is . [B]MS[A] [B]windows[A]....?";i:2;s:45:" ... , is a [B]MS[A] but not [B]Windows[A]";i:3;s:38:" ... the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:9;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:41:"ab ab ab ab ab ab ab ab ab ab ab [B]MS[A]";i:1;s:46:" this, is . [B]MS[A] [B]windows[A]....?";i:2;s:44:"this , is a [B]MS[A] but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:41:"ab ab ab ab ab ab ab ab ab ab ab [B]MS[A]";i:1;s:46:" this, is . [B]MS[A] [B]windows[A]....?";i:2;s:44:"this , is a [B]MS[A] but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:20:" ... ab ab [B]MS[A]";i:1;s:44:" ... , is . [B]MS[A] [B]windows[A]....?";i:2;s:45:" ... , is a [B]MS[A] but not [B]Windows[A]";i:3;s:38:" ... the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:10;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:40:" this, is . MS [B]windows[A]....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:40:" this, is . MS [B]windows[A]....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:38:" ... , is . MS [B]windows[A]....?";i:2;s:39:" ... , is a MS but not [B]Windows[A]";i:3;s:41:" ... is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:11;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:40:" this, is . MS [B]windows[A]....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:40:" this, is . MS [B]windows[A]....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:38:" ... , is . MS [B]windows[A]....?";i:2;s:39:" ... , is a MS but not [B]Windows[A]";i:3;s:41:" ... is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:12;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:41:"ab ab ab ab ab ab ab ab ab ab ab [B]MS[A]";i:1;s:46:" this, is . [B]MS[A] [B]windows[A]....?";i:2;s:44:"this , is a [B]MS[A] but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:41:"ab ab ab ab ab ab ab ab ab ab ab [B]MS[A]";i:1;s:46:" this, is . [B]MS[A] [B]windows[A]....?";i:2;s:44:"this , is a [B]MS[A] but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:20:" ... ab ab [B]MS[A]";i:1;s:44:" ... , is . [B]MS[A] [B]windows[A]....?";i:2;s:45:" ... , is a [B]MS[A] but not [B]Windows[A]";i:3;s:38:" ... the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:13;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:41:"ab ab ab ab ab ab ab ab ab ab ab [B]MS[A]";i:1;s:46:" this, is . [B]MS[A] [B]windows[A]....?";i:2;s:44:"this , is a [B]MS[A] but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:41:"ab ab ab ab ab ab ab ab ab ab ab [B]MS[A]";i:1;s:46:" this, is . [B]MS[A] [B]windows[A]....?";i:2;s:44:"this , is a [B]MS[A] but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:20:" ... ab ab [B]MS[A]";i:1;s:44:" ... , is . [B]MS[A] [B]windows[A]....?";i:2;s:45:" ... , is a [B]MS[A] but not [B]Windows[A]";i:3;s:38:" ... the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:14;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:40:" this, is . MS [B]windows[A]....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:40:" this, is . MS [B]windows[A]....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:38:" ... , is . MS [B]windows[A]....?";i:2;s:39:" ... , is a MS but not [B]Windows[A]";i:3;s:41:" ... is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}i:15;a:1:{i:0;a:6:{i:0;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:100;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:1;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:40:" this, is . MS [B]windows[A]....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:2;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:50;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:3;a:5:{i:0;s:35:"ab ab ab ab ab ab ab ab ab ab ab MS";i:1;s:40:" this, is . MS [B]windows[A]....?";i:2;s:38:"this , is a MS but not [B]Windows[A]";i:3;s:40:"this is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}i:4;a:6:{s:12:"before_match";s:3:"[B]";s:11:"after_match";s:3:"[A]";s:15:"chunk_separator";s:5:" ... ";s:5:"limit";i:30;s:6:"around";i:2;s:11:"allow_empty";b:1;}i:5;a:5:{i:0;s:34:"ab ab ab ab ab ab ab ab ab ab ... ";i:1;s:38:" ... , is . MS [B]windows[A]....?";i:2;s:39:" ... , is a MS but not [B]Windows[A]";i:3;s:41:" ... is the Microsoft [B]Windows[A] , ,";i:4;s:22:"profits, lost savings";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_018/test.xml b/coreseek/csft-4.1/test/test_018/test.xml new file mode 100755 index 0000000..967c2c4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_018/test.xml @@ -0,0 +1,135 @@ + + + snippets + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, body FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + + + charset_type = utf-8 + charset_type = sbcs + + + min_word_len = 1 + min_word_len = 3 + + + stopwords = stopwords.txt + + + + synonyms = synonyms.txt + + + + ngram_len = 1 + ngram_chars = U+3000..U+2FA1F +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'test' ) + + + +$docs = array +( + "ab ab ab ab ab ab ab ab ab ab ab MS", + " this, is . MS windows....?", + "this , is a MS but not Windows", + "this is the Microsoft Windows , ,", + "pro\xEF\xAC\x81ts, lost savings" // latin small ligature 'fi', oh my +); + +$words = "MS Windows"; + +$opts = array +( + "before_match" => "[B]", + "after_match" => "[A]", + "chunk_separator" => " ... ", + "limit" => 100, + "around" => 2, + "allow_empty"=>true +); + +$results = array (); +$results [] = $opts; +$res = $client->BuildExcerpts ( $docs, "test_idx", $words, $opts ); +if ( !$res ) +{ + $results = false; + return; +} +$results [] = $res; + +$opts = array +( + "before_match" => "[B]", + "after_match" => "[A]", + "chunk_separator" => " ... ", + "limit" => 50, + "around" => 2, + "allow_empty"=>true +); + +$results [] = $opts; +$res = $client->BuildExcerpts ( $docs, "test_idx", $words, $opts ); +if ( !$res ) +{ + $results = false; + return; +} +$results [] = $res; + +$opts = array +( + "before_match" => "[B]", + "after_match" => "[A]", + "chunk_separator" => " ... ", + "limit" => 30, + "around" => 2, + "allow_empty"=>true +); + +$results [] = $opts; +$res = $client->BuildExcerpts ( $docs, "test_idx", $words, $opts ); +if ( !$res ) +{ + $results = false; + return; +} +$results [] = $res; + + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_019/model.bin b/coreseek/csft-4.1/test/test_019/model.bin new file mode 100755 index 0000000..9fb3c19 --- /dev/null +++ b/coreseek/csft-4.1/test/test_019/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:28:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:111;a:2:{s:6:"weight";s:4:"2636";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"basic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"query";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"basic query";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:222;a:2:{s:6:"weight";s:4:"2676";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"phrase";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"query";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""phrase query"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:6:"phrase";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"query";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:2:"on";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:8:"steroids";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:""phrase (query)/3 ~on steroids"";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:333;a:2:{s:6:"weight";s:4:"2650";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"sample";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:5:"world";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:25:"@title sample @body world";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:333;a:2:{s:6:"weight";s:4:"1572";s:5:"attrs";a:0:{}}i:111;a:2:{s:6:"weight";s:4:"1545";s:5:"attrs";a:0:{}}i:222;a:2:{s:6:"weight";s:4:"1545";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:6:"quorum";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"query";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""quorum query test"/1";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:90:"quorum threshold too high (words=3, thresh=4); replacing quorum operator with AND operator";s:6:"status";i:3;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:6:"quorum";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"query";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""quorum query test"/4";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"program";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""hello program"~3";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:333;a:2:{s:6:"weight";s:4:"1665";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"program";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""hello program"~4";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:444;a:2:{s:6:"weight";s:4:"1716";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"吐";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"吐";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:444;a:2:{s:6:"weight";s:4:"1716";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"我";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"我";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:444;a:2:{s:6:"weight";s:4:"1608";s:5:"attrs";a:0:{}}i:111;a:2:{s:6:"weight";s:4:"1568";s:5:"attrs";a:0:{}}i:555;a:2:{s:6:"weight";s:4:"1568";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"basic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"china";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"basic | china";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:333;a:2:{s:6:"weight";s:4:"2610";s:5:"attrs";a:0:{}}i:111;a:2:{s:6:"weight";s:4:"1545";s:5:"attrs";a:0:{}}i:555;a:2:{s:6:"weight";s:4:"1545";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"program";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"4";}s:5:"basic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""test program" | basic";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:333;a:2:{s:6:"weight";s:4:"1644";s:5:"attrs";a:0:{}}i:111;a:2:{s:6:"weight";s:4:"1545";s:5:"attrs";a:0:{}}i:555;a:2:{s:6:"weight";s:4:"1545";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"that";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"basic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""test that"~3 | basic";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:333;a:2:{s:6:"weight";s:4:"1644";s:5:"attrs";a:0:{}}i:111;a:2:{s:6:"weight";s:4:"1545";s:5:"attrs";a:0:{}}i:555;a:2:{s:6:"weight";s:4:"1545";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"that";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"basic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""test that"~3|basic";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:333;a:2:{s:6:"weight";s:4:"1541";s:5:"attrs";a:0:{}}i:666;a:2:{s:6:"weight";s:4:"1541";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"sample";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:5:"basic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:26:"@title sample @body -basic";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:333;a:2:{s:6:"weight";s:4:"1527";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:5:"basic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"perl";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sample";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"-basic|perl sample";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:333;a:2:{s:6:"weight";s:4:"1527";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:5:"basic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"perl";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sample";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"-basic|perl sample";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:777;a:2:{s:6:"weight";s:4:"1798";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{i:77;a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"77";}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:888;a:2:{s:6:"weight";s:4:"1716";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"0077";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"0077";}i:19;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"@title test";}i:20;a:6:{s:5:"query";s:12:"@ttitle test";s:5:"error";s:58:"index test: query error: no field 'ttitle' found in schema";s:7:"warning";s:0:"";s:5:"total";i:0;s:11:"total_found";i:0;s:4:"time";i:0;}i:21;a:6:{s:5:"query";s:12:"@@title test";s:5:"error";s:70:"index test: syntax error, unexpected TOK_FIELDLIMIT near '@title test'";s:7:"warning";s:0:"";s:5:"total";i:0;s:11:"total_found";i:0;s:4:"time";i:0;}i:22;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"@@relaxed @ttitle test";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"""";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"@title """;}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"("")";}i:26;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:222;a:2:{s:6:"weight";s:4:"4696";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:6:"phrase";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"query";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:2:"on";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:8:"steroids";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:32:""phrase (!query)/ ~on @steroids"";}i:27;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:999;a:2:{s:6:"weight";s:4:"1716";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:16:"1234567812345678";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"1234567812345678";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_019/test.xml b/coreseek/csft-4.1/test/test_019/test.xml new file mode 100755 index 0000000..7fb2cd6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_019/test.xml @@ -0,0 +1,96 @@ + + + +extended queries + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table + sql_query_pre = SET NAMES utf8 +} + +index test +{ + source = srctest + path = /test + min_word_len = 2 + charset_type = utf-8 + ngram_chars = U+4E00..U+9FBF, U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF,U+2F800..U+2FA1F, U+2E80..U+2EFF, U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF,U+3040..U+309F, U+30A0..U+30FF, U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF,U+3130..U+318F, U+A000..U+A48F, U+A490..U+A4CF + ngram_len = 1 + charset_table = U+FF10..U+FF19->0..9, 0..9, U+FF41..U+FF5A->a..z, U+FF21..U+FF3A->a..z,A..Z->a..z, a..z, U+0149, U+017F, U+0138, U+00DF, U+00FF, U+00C0..U+00D6->U+00E0..U+00F6,U+00E0..U+00F6, U+00D8..U+00DE->U+00F8..U+00FE, U+00F8..U+00FE, U+0100->U+0101, U+0101,U+0102->U+0103, U+0103, U+0104->U+0105, U+0105, U+0106->U+0107, U+0107, U+0108->U+0109,U+0109, U+010A->U+010B, U+010B, U+010C->U+010D, U+010D, U+010E->U+010F, U+010F,U+0110->U+0111, U+0111, U+0112->U+0113, U+0113, U+0114->U+0115, U+0115, U+0116->U+0117,U+0117, U+0118->U+0119, U+0119, U+011A->U+011B, U+011B, U+011C->U+011D, U+011D,U+011E->U+011F, U+011F, U+0130->U+0131, U+0131, U+0132->U+0133, U+0133, U+0134->U+0135,U+0135, U+0136->U+0137, U+0137, U+0139->U+013A, U+013A, U+013B->U+013C, U+013C,U+013D->U+013E, U+013E, U+013F->U+0140, U+0140, U+0141->U+0142, U+0142, U+0143->U+0144,U+0144, U+0145->U+0146, U+0146, U+0147->U+0148, U+0148, U+014A->U+014B, U+014B,U+014C->U+014D, U+014D, U+014E->U+014F, U+014F, U+0150->U+0151, U+0151, U+0152->U+0153,U+0153, U+0154->U+0155, U+0155, U+0156->U+0157, U+0157, U+0158->U+0159, U+0159,U+015A->U+015B, U+015B, U+015C->U+015D, U+015D, U+015E->U+015F, U+015F, U+0160->U+0161,U+0161, U+0162->U+0163, U+0163, U+0164->U+0165, U+0165, U+0166->U+0167, U+0167,U+0168->U+0169, U+0169, U+016A->U+016B, U+016B, U+016C->U+016D, U+016D, U+016E->U+016F,U+016F, U+0170->U+0171, U+0171, U+0172->U+0173, U+0173, U+0174->U+0175, U+0175,U+0176->U+0177, U+0177, U+0178->U+00FF, U+00FF, U+0179->U+017A, U+017A, U+017B->U+017C,U+017C, U+017D->U+017E, U+017E, U+0410..U+042F->U+0430..U+044F, U+0430..U+044F,U+05D0..U+05EA, U+0531..U+0556->U+0561..U+0586, U+0561..U+0587, U+0621..U+063A, U+01B9,U+01BF, U+0640..U+064A, U+0660..U+0669, U+066E, U+066F, U+0671..U+06D3, U+06F0..U+06FF,U+0904..U+0939, U+0958..U+095F, U+0960..U+0963, U+0966..U+096F, U+097B..U+097F,U+0985..U+09B9, U+09CE, U+09DC..U+09E3, U+09E6..U+09EF, U+0A05..U+0A39, U+0A59..U+0A5E,U+0A66..U+0A6F, U+0A85..U+0AB9, U+0AE0..U+0AE3, U+0AE6..U+0AEF, U+0B05..U+0B39,U+0B5C..U+0B61, U+0B66..U+0B6F, U+0B71, U+0B85..U+0BB9, U+0BE6..U+0BF2, U+0C05..U+0C39,U+0C66..U+0C6F, U+0C85..U+0CB9, U+0CDE..U+0CE3, U+0CE6..U+0CEF, U+0D05..U+0D39, U+0D60,U+0D61, U+0D66..U+0D6F, U+0D85..U+0DC6, U+1900..U+1938, U+1946..U+194F, U+A800..U+A805,U+A807..U+A822, U+0386->U+03B1, U+03AC->U+03B1, U+0388->U+03B5, U+03AD->U+03B5,U+0389->U+03B7, U+03AE->U+03B7, U+038A->U+03B9, U+0390->U+03B9, U+03AA->U+03B9,U+03AF->U+03B9, U+03CA->U+03B9, U+038C->U+03BF, U+03CC->U+03BF, U+038E->U+03C5,U+03AB->U+03C5, U+03B0->U+03C5, U+03CB->U+03C5, U+03CD->U+03C5, U+038F->U+03C9,U+03CE->U+03C9, U+03C2->U+03C3, U+0391..U+03A1->U+03B1..U+03C1,U+03A3..U+03A9->U+03C3..U+03C9, U+03B1..U+03C1, U+03C3..U+03C9, U+0E01..U+0E2E,U+0E30..U+0E3A, U+0E40..U+0E45, U+0E47, U+0E50..U+0E59, U+A000..U+A48F, U+4E00..U+9FBF,U+3400..U+4DBF, U+20000..U+2A6DF, U+F900..U+FAFF, U+2F800..U+2FA1F, U+2E80..U+2EFF,U+2F00..U+2FDF, U+3100..U+312F, U+31A0..U+31BF, U+3040..U+309F, U+30A0..U+30FF,U+31F0..U+31FF, U+AC00..U+D7AF, U+1100..U+11FF, U+3130..U+318F, U+A000..U+A48F,U+A490..U+A4CF +} + + + +basic query +"phrase query" +"phrase (query)/3 ~on steroids" +@title sample @body world + +"quorum query test"/1 +"quorum query test"/4 +"hello program"~3 +"hello program"~4 + + +basic | china +"test program" | basic +"test that"~3 | basic +"test that"~3|basic +@title sample @body -basic +-basic|perl sample +-basic|perl sample +77 +0077 +@title test +@ttitle test +@@title test +@@relaxed @ttitle test +"" +@title "" +("") +"phrase (!query)/ ~on @steroids" +1234567812345678 + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `title` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '' +) CHARACTER SET utf8 + + + +DROP TABLE IF EXISTS `test_table` + + +SET NAMES utf8 + +INSERT INTO `test_table` VALUES +( 111, '', 'basic query' ), +( 222, '', 'phrase query on steroids' ), +( 333, 'sample program', 'this is a test program that prints out "hello world" to the console' ), +( 444, '', 'china 吐我' ), +( 555, 'sample program two', 'something written in basic' ), +( 666, 'sample program three', 'something written in perl' ), +( 777, '', '77 lies multiplied by 77' ), +( 888, '', 'agent 0077' ), +( 999, '', '1234567812345678' ) + + + diff --git a/coreseek/csft-4.1/test/test_020/model.bin b/coreseek/csft-4.1/test/test_020/model.bin new file mode 100755 index 0000000..da51f8a --- /dev/null +++ b/coreseek/csft-4.1/test/test_020/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:17:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:6:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:8:"20071201";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:8:"20060502";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:8:"20050704";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:8:"20050603";s:6:"@count";s:1:"2";}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062849600";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:8:"20030906";s:6:"@count";s:1:"1";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:8:"20030905";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.005";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:7:"2007329";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:7:"2006120";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:7:"2005184";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:7:"2005149";s:6:"@count";s:1:"2";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:7:"2003243";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:6:"200712";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:6:"200605";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:6:"200507";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:6:"200506";s:6:"@count";s:1:"2";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:6:"200309";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:4:"2006";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:4:"2005";s:6:"@count";s:1:"4";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:4:"2003";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:6:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:1:"6";s:6:"@count";s:1:"2";}}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"5";s:6:"@count";s:1:"7";}}i:2;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"6";}}i:3;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"6";}}i:4;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:5;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:1;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:6:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"2";}}i:1;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:2;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"6";}}i:3;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"6";}}i:4;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"5";s:6:"@count";s:1:"7";}}i:5;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:1:"6";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:1;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;s:9:"@distinct";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:4:"2006";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:4:"2005";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"3";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:4:"2003";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:12;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;s:9:"@distinct";i:1;}s:7:"matches";a:4:{i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:2:"21";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:2:"22";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:4:"2006";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:2:"22";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:4:"2005";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"3";}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:2:"23";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:4:"2003";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:13;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;s:9:"@distinct";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"4";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:4:"2006";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"4";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:4:"2005";s:6:"@count";s:1:"8";s:9:"@distinct";s:1:"6";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:4:"2003";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"2";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.004";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:14;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;s:9:"@distinct";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"3";s:9:"@distinct";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1117800000";s:3:"mva";a:1:{i:0;s:1:"4";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:1:"q";i:6;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:6:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:1:"q";i:10;s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:1:"q";i:30;s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:6:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062849600";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:1:"q";i:60;s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:6:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:1:"q";i:100;s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}}i:1;a:17:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1196510400";s:3:"mva";a:2:{i:0;s:1:"4";i:1;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:6:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:8:"20071201";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:8:"20060502";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:8:"20050704";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:8:"20050603";s:6:"@count";s:1:"2";}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062849600";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:8:"20030906";s:6:"@count";s:1:"1";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:8:"20030905";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:7:"2007329";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:7:"2006120";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:7:"2005184";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:7:"2005149";s:6:"@count";s:1:"2";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:7:"2003243";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:6:"200712";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:6:"200605";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:6:"200507";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:6:"200506";s:6:"@count";s:1:"2";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:6:"200309";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:4:"2006";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:4:"2005";s:6:"@count";s:1:"4";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:4:"2003";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:6:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:1:"6";s:6:"@count";s:1:"2";}}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"5";s:6:"@count";s:1:"7";}}i:2;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"6";}}i:3;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"6";}}i:4;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:5;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:1;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:6:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"2";}}i:1;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:2;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"6";}}i:3;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"6";}}i:4;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:1:"5";s:6:"@count";s:1:"7";}}i:5;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:1:"6";s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:1;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;s:9:"@distinct";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:4:"2006";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:4:"2005";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"3";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:4:"2003";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:12;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;s:9:"@distinct";i:1;}s:7:"matches";a:4:{i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:2:"21";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:2:"22";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:4:"2006";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:2:"22";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:4:"2005";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"3";}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:2:"23";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:4:"2003";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:13;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;s:9:"@distinct";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"4";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1146571200";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:8:"@groupby";s:4:"2006";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"4";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:4:"2005";s:6:"@count";s:1:"8";s:9:"@distinct";s:1:"6";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:4:"2003";s:6:"@count";s:1:"4";s:9:"@distinct";s:1:"2";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:14;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;s:9:"@distinct";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:4:"2007";s:6:"@count";s:1:"3";s:9:"@distinct";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062763200";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1117800000";s:3:"mva";a:1:{i:0;s:1:"4";}s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"tag";i:1;s:4:"time";i:2;s:3:"mva";i:1073741825;s:1:"q";i:6;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:6:{s:3:"tag";s:1:"1";s:4:"time";s:10:"1196510400";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}s:1:"q";i:10;s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:6:{s:3:"tag";s:1:"2";s:4:"time";s:10:"1117800000";s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:1:"q";i:30;s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"2";}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:6:{s:3:"tag";s:1:"3";s:4:"time";s:10:"1062849600";s:3:"mva";a:2:{i:0;s:1:"3";i:1;s:1:"5";}s:1:"q";i:60;s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"3";}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:6:{s:3:"tag";s:1:"4";s:4:"time";s:10:"1120478400";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:1:"4";i:2;s:1:"5";}s:1:"q";i:100;s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_020/test.xml b/coreseek/csft-4.1/test/test_020/test.xml new file mode 100755 index 0000000..b96f2ff --- /dev/null +++ b/coreseek/csft-4.1/test/test_020/test.xml @@ -0,0 +1,130 @@ + + + +groupby + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query_pre = set time_zone='+0:00' + sql_query = SELECT document_id, tag, UNIX_TIMESTAMP(time) as time, mva, body FROM test_table + sql_attr_uint = tag + sql_attr_timestamp = time + + sql_attr_multi = uint mva from field; + sql_attr_multi = bigint mva from field; + +} + +index test +{ + source = srctest + path = /test + min_word_len = 1 + min_prefix_len = 1 + enable_star = 1 + charset_type = utf-8 +} + +source srctest2 : srctest +{ + sql_query = SELECT document_id+10, tag+20 AS tag, UNIX_TIMESTAMP(time) as time, mva, body FROM test_table +} + +index test2 : test +{ + source = srctest2 + path = /test2 +} + +source srcmini1 : srctest +{ + sql_query = SELECT document_id, tag, UNIX_TIMESTAMP(time) as time, mva, body FROM test_table WHERE document_id IN (1,7) +} + +index mini1 : test +{ + source = srcmini1 + path = /mini1 +} + +source srcmini2 : srctest +{ + sql_query = SELECT document_id, tag, UNIX_TIMESTAMP(time) as time, mva, body FROM test_table WHERE document_id IN (1) +} + +index mini2 : test +{ + source = srcmini2 + path = /mini2 +} + + + + + + + + +test* +test* +test* +test* +test* +test* + + + + + + + +test* +test* + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `tag` int(11) NOT NULL default '0', + `time` datetime, + `mva` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 1, '2007-12-01 12:00:00', '1,2,3', 'test1' ), +( 2, 2, '2006-05-02 12:00:00', '3,4,5', 'test2' ), +( 3, 2, '2005-06-03 12:00:00', '4,5,6', 'test3' ), +( 4, 3, '2005-07-04 12:00:00', '1,2,3', 'test4' ), +( 5, 3, '2003-09-05 12:00:00', '3,5', 'test5' ), +( 6, 3, '2003-09-06 12:00:00', '3,5', 'test6' ), +( 7, 4, '2007-12-01 12:00:00', '4,5', 'test7' ), +( 8, 4, '2006-05-02 12:00:00', '4,5,6', 'test8' ), +( 9, 4, '2005-06-03 12:00:00', '4', 'test9' ), +( 10, 4,'2005-07-04 12:00:00', '3,4,5', 'test10' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_021/model.bin b/coreseek/csft-4.1/test/test_021/model.bin new file mode 100755 index 0000000..7dd2c14 --- /dev/null +++ b/coreseek/csft-4.1/test/test_021/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:14:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:8.5;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:4.19999980926513671875;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:-0.625;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:-0.66666662693023681640625;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:-3;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:-3.6666667461395263671875;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:-4;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:-5;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:-10;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:-11.71428585052490234375;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.058";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:86;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:39;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:28;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:28;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:18;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:11;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:11;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:10;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:-19;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:-30;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:12;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:12;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:8;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:7;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:6;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:5;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:4;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:4;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:2;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:1;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:8;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:6;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:6;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:6;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:6;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:4;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:4;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:4;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:2;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:2;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:99;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:46;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:18;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:8;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:6;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:4;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:2;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:-0;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:0;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:-16;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:99;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:45;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:17;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:7;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:5;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:3;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:1;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:0;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:-1;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:-17;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:1.2841091156005859375;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:1.219179630279541015625;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:1.06823217868804931640625;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:1;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:-0.020649373531341552734375;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:-0.4149382412433624267578125;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:-0.54206085205078125;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:-0.95938599109649658203125;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:-0.9984061717987060546875;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:-1.07557761669158935546875;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:3.9883544445037841796875;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:3.9883544445037841796875;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:3.9883544445037841796875;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:3.9883544445037841796875;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:3.1606960296630859375;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:3.1606960296630859375;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:3.1606960296630859375;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:1.99417722225189208984375;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:1.99417722225189208984375;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:0;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:56.598148345947265625;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:56.3302001953125;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:56.012363433837890625;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:55.598148345947265625;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:23.085536956787109375;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:22.91396331787109375;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:21.8175868988037109375;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:10.0348072052001953125;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:9.38905620574951171875;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:4.954349517822265625;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:1;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:1;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:0;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:0;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:0;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:0;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:0;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:0;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:0;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:0;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:9;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:8;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:7;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:5;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:4;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:4;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:3;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:3;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:2;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:1;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:5:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;s:5:"@expr";i:5;}s:7:"matches";a:10:{i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;s:5:"@expr";d:12;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;s:5:"@expr";d:12;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;s:5:"@expr";d:7;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;s:5:"@expr";d:6;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;s:5:"@expr";d:5;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;s:5:"@expr";d:4;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;s:5:"@expr";d:2;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;s:5:"@expr";d:1;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;s:5:"@expr";d:-4;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:5:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;s:5:"@expr";d:-8;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;}s:7:"matches";a:10:{i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;}}i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}i:13;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"tag3";i:5;s:4:"tag4";i:5;}s:7:"matches";a:10:{i:2;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"7";s:4:"tag3";d:12;s:4:"tag4";d:3.1400001049041748046875;}}i:10;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"2";s:4:"tag3";d:12;s:4:"tag4";d:0;}}i:8;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"1";s:4:"tag3";d:7;s:4:"tag4";d:99;}}i:7;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"4";s:4:"tag3";d:6;s:4:"tag4";d:-0.800000011920928955078125;}}i:4;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"3";s:4:"tag3";d:5;s:4:"tag4";d:7.599999904632568359375;}}i:6;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"9";s:4:"tag3";d:4;s:4:"tag4";d:17.200000762939453125;}}i:9;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"4";s:4:"tag2";s:1:"3";s:4:"tag3";d:2;s:4:"tag4";d:-16.1000003814697265625;}}i:5;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"3";s:4:"tag2";s:1:"8";s:4:"tag3";d:1;s:4:"tag4";d:45.200000762939453125;}}i:1;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"1";s:4:"tag2";s:1:"5";s:4:"tag3";d:-4;s:4:"tag4";d:1.5;}}i:3;a:2:{s:6:"weight";s:4:"1281";s:5:"attrs";a:4:{s:4:"tag1";s:1:"2";s:4:"tag2";s:1:"4";s:4:"tag3";d:-8;s:4:"tag4";d:5.19999980926513671875;}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"test*";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:5:"test*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_021/test.xml b/coreseek/csft-4.1/test/test_021/test.xml new file mode 100755 index 0000000..b756002 --- /dev/null +++ b/coreseek/csft-4.1/test/test_021/test.xml @@ -0,0 +1,87 @@ + + + +sorting + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT document_id,tag1,tag2,tag3,tag4,body FROM test_table + sql_attr_uint = tag1 + sql_attr_uint = tag2:8 + sql_attr_float = tag3 + sql_attr_float = tag4 +} + +index test +{ + source = srctest + path = /test + min_word_len = 1 + min_prefix_len = 1 + enable_star = 1 + charset_type = utf-8 +} + + + +test* +test* +test* +test* +test* +test* +test* +test* +test* +test* +test* +test* +test* +test* + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `tag1` int(11) NOT NULL default '0', + `tag2` int(11) NOT NULL default '0', + `tag3` FLOAT, + `tag4` FLOAT, + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 1, 5, -4.0, 1.5, 'test1' ), +( 2, 2, 7, 12.0, 3.14, 'test2' ), +( 3, 2, 4, -8.0, 5.2, 'test3' ), +( 4, 3, 3, 5.0, 7.6, 'test4' ), +( 5, 3, 8, 1.0, 45.2, 'test5' ), +( 6, 3, 9, 4.0, 17.2, 'test6' ), +( 7, 4, 4, 6.0, -0.8, 'test7' ), +( 8, 4, 1, 7.0, 99.0, 'test8' ), +( 9, 4, 3, 2.0, -16.1, 'test9' ), +( 10,4, 2, 12.0, 0.0, 'test10' ) + + + diff --git a/coreseek/csft-4.1/test/test_022/model.bin b/coreseek/csft-4.1/test/test_022/model.bin new file mode 100755 index 0000000..ef7e7e8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_022/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:4:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"wrapped";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"FOLDED";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"wrapped";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"folded";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:42:"somewhatmorelongformthatwouldoverflowshort";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"shortform";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:42:"somewhatmorelongformthatwouldoverflowshort";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:52:"sOMEwHATmORElONGfORMtHATwOULDoVERFLOWsHORTfORMbUFFER";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_022/test.xml b/coreseek/csft-4.1/test/test_022/test.xml new file mode 100755 index 0000000..e9dc4e7 --- /dev/null +++ b/coreseek/csft-4.1/test/test_022/test.xml @@ -0,0 +1,61 @@ + + + +wordforms vs case folding + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + wordforms = wordforms.txt +} + + + +FOLDED +folded +shortform +sOMEwHATmORElONGfORMtHATwOULDoVERFLOWsHORTfORMbUFFER + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'test FoLdEd' ), +( 2, 'folded' ), +( 3, 'shortform' ), +( 4, 'SomeWhatMoreLongFormThatWouldOverflowShortFormBuffer' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_023/model.bin b/coreseek/csft-4.1/test/test_023/model.bin new file mode 100755 index 0000000..7c42df4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_023/model.bin @@ -0,0 +1 @@ +a:9:{i:0;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:1;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:2;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:3;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:4;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:5;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:6;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:11:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:7;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:11:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:8;a:33:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:8;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:11:"hello world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:29;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:32;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_023/test.xml b/coreseek/csft-4.1/test/test_023/test.xml new file mode 100755 index 0000000..2c98a52 --- /dev/null +++ b/coreseek/csft-4.1/test/test_023/test.xml @@ -0,0 +1,114 @@ + + + +min_word_len vs queries (part 1) + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + enable_star = 1 + + + min_word_len = 3 + min_word_len = 4 + min_word_len = 5 + + + + min_prefix_len = 3 + min_prefix_len = 4 + min_prefix_len = 5 + +} + + + +a +bb +ccc +dddd +eeeee +ffffff +ggggggg +b* +cc* +ddd* +eeee* +fffff* +gggggg* +a +bb +ccc +dddd +eeeee +ffffff +ggggggg +b* +cc* +ddd* +eeee* +fffff* +gggggg* +hello world +hello me world +hello two world +hello four world +hello me* world +hello two* world +hello four* world + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'a' ), +( 2, 'bb' ), +( 3, 'ccc' ), +( 4, 'dddd' ), +( 5, 'eeeee' ), +( 6, 'ffffff' ), +( 7, 'ggggggg' ), +( 8, 'hello world' ), +( 9, 'hello a world' ), +( 10, 'hello aa world' ), +( 11, 'hello aaa world' ), +( 12, 'hello aaaa world' ), +( 13, 'hello aaaaa world' ), +( 14, 'hello me world' ), +( 15, 'hello two world' ), +( 16, 'hello four world' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_024/model.bin b/coreseek/csft-4.1/test/test_024/model.bin new file mode 100755 index 0000000..db66888 --- /dev/null +++ b/coreseek/csft-4.1/test/test_024/model.bin @@ -0,0 +1 @@ +a:9:{i:0;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.013";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:1;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:2;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:3;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:11:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:4;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:5;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:6;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:11:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:7;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:8;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_024/test.xml b/coreseek/csft-4.1/test/test_024/test.xml new file mode 100755 index 0000000..ae02624 --- /dev/null +++ b/coreseek/csft-4.1/test/test_024/test.xml @@ -0,0 +1,113 @@ + + + +min_word_len vs queries (part 2) + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = sbcs + enable_star = 1 + + + min_word_len = 3 + min_word_len = 4 + min_word_len = 5 + + + + min_prefix_len = 3 + min_prefix_len = 4 + min_prefix_len = 5 + +} + + + +a +bb +ccc +dddd +eeeee +ffffff +ggggggg +b* +cc* +ddd* +eeee* +fffff* +gggggg* +a +bb +ccc +dddd +eeeee +ffffff +ggggggg +b* +cc* +ddd* +eeee* +fffff* +gggggg* +hello me world +hello two world +hello four world +hello me* world +hello two* world +hello four* world + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'a' ), +( 2, 'bb' ), +( 3, 'ccc' ), +( 4, 'dddd' ), +( 5, 'eeeee' ), +( 6, 'ffffff' ), +( 7, 'ggggggg' ), +( 8, 'hello world' ), +( 9, 'hello a world' ), +( 10, 'hello aa world' ), +( 11, 'hello aaa world' ), +( 12, 'hello aaaa world' ), +( 13, 'hello aaaaa world' ), +( 14, 'hello me world' ), +( 15, 'hello two world' ), +( 16, 'hello four world' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_025/model.bin b/coreseek/csft-4.1/test/test_025/model.bin new file mode 100755 index 0000000..7526e27 --- /dev/null +++ b/coreseek/csft-4.1/test/test_025/model.bin @@ -0,0 +1 @@ +a:9:{i:0;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:1;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:2;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:3;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:11:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:4;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:5;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:6;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:11:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:7;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"dddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:11:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:16;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}i:8;a:32:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:12;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:13;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:1:"a";}i:14;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:2:"bb";}i:15;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:3:"ccc";}i:16;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"query";s:4:"dddd";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"eeeee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"eeeee";}i:18;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"ffffff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"ffffff";}i:19;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"ggggggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"ggggggg";}i:20;a:10:{s:5:"error";s:0:"";s:7:"warning";s:61:"Query word length is less than min prefix length. word: 'b*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"b*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:2:"b*";}i:21;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'cc*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"cc*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:3:"cc*";}i:22;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'ddd*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"ddd*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:4:"ddd*";}i:23;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'eeee*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"eeee*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:5:"eeee*";}i:24;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"fffff*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:6:"fffff*";}i:25;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"gggggg*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:7:"gggggg*";}i:26;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:14:"hello me world";}i:27;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello two world";}i:28;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:9;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello four world";}i:29;a:10:{s:5:"error";s:0:"";s:7:"warning";s:62:"Query word length is less than min prefix length. word: 'me*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"me*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:15:"hello me* world";}i:30;a:10:{s:5:"error";s:0:"";s:7:"warning";s:63:"Query word length is less than min prefix length. word: 'two*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:4:"two*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:16:"hello two* world";}i:31;a:10:{s:5:"error";s:0:"";s:7:"warning";s:64:"Query word length is less than min prefix length. word: 'four*' ";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:5:"four*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"world";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:17:"hello four* world";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_025/test.xml b/coreseek/csft-4.1/test/test_025/test.xml new file mode 100755 index 0000000..1558764 --- /dev/null +++ b/coreseek/csft-4.1/test/test_025/test.xml @@ -0,0 +1,114 @@ + + + +min_word_len vs queries (part 3) + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + exceptions = synonyms.txt + enable_star = 1 + + + min_word_len = 3 + min_word_len = 4 + min_word_len = 5 + + + + min_prefix_len = 3 + min_prefix_len = 4 + min_prefix_len = 5 + +} + + + +a +bb +ccc +dddd +eeeee +ffffff +ggggggg +b* +cc* +ddd* +eeee* +fffff* +gggggg* +a +bb +ccc +dddd +eeeee +ffffff +ggggggg +b* +cc* +ddd* +eeee* +fffff* +gggggg* +hello me world +hello two world +hello four world +hello me* world +hello two* world +hello four* world + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'a' ), +( 2, 'bb' ), +( 3, 'ccc' ), +( 4, 'dddd' ), +( 5, 'eeeee' ), +( 6, 'ffffff' ), +( 7, 'ggggggg' ), +( 8, 'hello world' ), +( 9, 'hello a world' ), +( 10, 'hello aa world' ), +( 11, 'hello aaa world' ), +( 12, 'hello aaaa world' ), +( 13, 'hello aaaaa world' ), +( 14, 'hello me world' ), +( 15, 'hello two world' ), +( 16, 'hello four world' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_026/model.bin b/coreseek/csft-4.1/test/test_026/model.bin new file mode 100755 index 0000000..9dba937 --- /dev/null +++ b/coreseek/csft-4.1/test/test_026/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:5:"main1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"main1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"main1";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:5:"main2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"main2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"main2";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:6:"delta1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"delta1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"delta1";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:6:"delta2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"delta2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"delta2";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"gamma0";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"gamma0";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:7:"matches";a:4:{i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:15:"xxx yyy zzz aaa";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:11:"xxx aaa yyy";}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:11:"xxx aaa yyy";}}i:16;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:7:"xxx aaa";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"aaa";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"aaa";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:7:"matches";a:4:{i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:15:"xxx yyy zzz aaa";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:11:"xxx aaa yyy";}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:11:"xxx aaa yyy";}}i:16;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:7:"xxx aaa";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"xxx";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"xxx";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:7:"matches";a:3:{i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:15:"xxx yyy zzz aaa";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:11:"xxx aaa yyy";}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:11:"xxx aaa yyy";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"yyy";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"yyy";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"sbody";i:7;}s:7:"matches";a:3:{i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:15:"xxx yyy zzz aaa";}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:3:"zzz";}}i:14;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"sbody";s:3:"zzz";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"zzz";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"zzz";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_026/test.xml b/coreseek/csft-4.1/test/test_026/test.xml new file mode 100755 index 0000000..d69d4ea --- /dev/null +++ b/coreseek/csft-4.1/test/test_026/test.xml @@ -0,0 +1,92 @@ + + + +merge vs basic main/delta + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srcmain +{ + type = mysql + + + sql_query = SELECT document_id, body, body sbody FROM test_table WHERE document_id in (1,2,11,12,13) + sql_attr_string = sbody +} + +source srcdelta +{ + type = mysql + + + sql_query = SELECT document_id, body, body sbody FROM test_table WHERE document_id in (3,4,14,15,16) + sql_attr_string = sbody +} + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 +} + +index delta +{ + source = srcdelta + path = /delta + charset_type = utf-8 +} + + + +--merge main delta + + + +main1 +main2 +delta1 +delta2 +gamma0 +aaa +xxx +yyy +zzz + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'main1' ), +( 2, 'main2' ), +( 3, 'delta1' ), +( 4, 'delta2' ), +( 11, 'xxx yyy zzz aaa' ), +( 12, 'xxx aaa yyy' ), +( 13, 'zzz' ), +( 14, 'zzz' ), +( 15, 'xxx aaa yyy' ), +( 16, 'xxx aaa' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_027/model.bin b/coreseek/csft-4.1/test/test_027/model.bin new file mode 100755 index 0000000..3e65d07 --- /dev/null +++ b/coreseek/csft-4.1/test/test_027/model.bin @@ -0,0 +1 @@ +a:36:{i:0;a:1:{i:0;s:6:"failed";}i:1;a:1:{i:0;s:6:"failed";}i:2;a:1:{i:0;s:6:"failed";}i:3;a:1:{i:0;s:6:"failed";}i:4;a:1:{i:0;s:6:"failed";}i:5;a:1:{i:0;s:6:"failed";}i:6;a:1:{i:0;s:6:"failed";}i:7;a:1:{i:0;s:6:"failed";}i:8;a:1:{i:0;s:6:"failed";}i:9;a:1:{i:0;s:6:"failed";}i:10;a:1:{i:0;s:6:"failed";}i:11;a:1:{i:0;s:6:"failed";}i:12;a:1:{i:0;s:6:"failed";}i:13;a:1:{i:0;s:6:"failed";}i:14;a:1:{i:0;s:6:"failed";}i:15;a:1:{i:0;s:6:"failed";}i:16;a:1:{i:0;s:6:"failed";}i:17;a:1:{i:0;s:6:"failed";}i:18;a:1:{i:0;s:6:"failed";}i:19;a:1:{i:0;s:6:"failed";}i:20;a:1:{i:0;s:6:"failed";}i:21;a:1:{i:0;s:6:"failed";}i:22;a:1:{i:0;s:6:"failed";}i:23;a:1:{i:0;s:6:"failed";}i:24;a:1:{i:0;s:6:"failed";}i:25;a:1:{i:0;s:6:"failed";}i:26;a:1:{i:0;s:6:"failed";}i:27;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"1";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"11";i:2;s:3:"111";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"main1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"main1";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"2";s:3:"mva";a:3:{i:0;s:1:"2";i:1;s:2:"22";i:2;s:3:"222";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"main2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"main2";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"main3";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"main3";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"11";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"10";i:2;s:3:"100";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"delta1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"delta1";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"22";s:3:"mva";a:3:{i:0;s:1:"2";i:1;s:2:"20";i:2;s:3:"200";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"delta2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"delta2";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"33";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:2:"30";i:2;s:3:"300";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"delta3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"delta3";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"gamma0";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"gamma0";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"1";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"11";i:2;s:3:"111";}}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"11";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"10";i:2;s:3:"100";}}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:8;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"11";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"10";i:2;s:3:"100";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}i:28;a:1:{i:0;s:6:"failed";}i:29;a:1:{i:0;s:6:"failed";}i:30;a:1:{i:0;s:6:"failed";}i:31;a:1:{i:0;s:6:"failed";}i:32;a:1:{i:0;s:6:"failed";}i:33;a:1:{i:0;s:6:"failed";}i:34;a:1:{i:0;s:6:"failed";}i:35;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"1";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"11";i:2;s:3:"111";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"main1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"main1";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"2";s:3:"mva";a:3:{i:0;s:1:"2";i:1;s:2:"22";i:2;s:3:"222";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"main2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"main2";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"main3";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"main3";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"11";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"10";i:2;s:3:"100";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"delta1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"delta1";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"22";s:3:"mva";a:3:{i:0;s:1:"2";i:1;s:2:"20";i:2;s:3:"200";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"delta2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"delta2";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"33";s:3:"mva";a:3:{i:0;s:1:"3";i:1;s:2:"30";i:2;s:3:"300";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"delta3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"delta3";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"gamma0";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"gamma0";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"1";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"11";i:2;s:3:"111";}}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"11";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"10";i:2;s:3:"100";}}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:8;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:2:"11";s:3:"mva";a:3:{i:0;s:1:"1";i:1;s:2:"10";i:2;s:3:"100";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_027/test.xml b/coreseek/csft-4.1/test/test_027/test.xml new file mode 100755 index 0000000..9e38a28 --- /dev/null +++ b/coreseek/csft-4.1/test/test_027/test.xml @@ -0,0 +1,113 @@ + + + +merge vs docinfo, range, mva + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srcmain +{ + type = mysql + + + sql_query = SELECT * FROM test_table WHERE document_id in (1,2,3) + sql_attr_uint = tag + + + sql_attr_multi = uint mva from field + + sql_attr_multi = bigint mva from field + +} + +source srcdelta +{ + type = mysql + + + sql_query = SELECT * FROM test_table WHERE document_id in (4,5,6) + sql_attr_uint = tag + + + sql_attr_multi = uint mva from field + + sql_attr_multi = bigint mva from field + +} + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 + + + docinfo = inline + docinfo = extern + +} + +index delta +{ + source = srcdelta + path = /delta + charset_type = utf-8 + + docinfo = inline + docinfo = extern + +} + + + +--merge main delta --merge-dst-range tag 1 2 + + + +main1 +main2 +main3 +delta1 +delta2 +delta3 +gamma0 + + + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `tag` int(11) NOT NULL default '0', + `mva` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 1, '1 11 111', 'main1' ), +( 2, 2, '2 22 222', 'main2' ), +( 3, 3, '3 33 333', 'main3' ), +( 4, 11,'1 10 100', 'delta1' ), +( 5, 22,'2 20 200', 'delta2' ), +( 6, 33,'3 30 300', 'delta3' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_028/model.aff b/coreseek/csft-4.1/test/test_028/model.aff new file mode 100755 index 0000000..7c403b6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_028/model.aff @@ -0,0 +1,93 @@ +wordchars a A +wordchars [bc] [BC] +wordchars [de] [DE] +wordchars [f-i] [F-I] +wordchars [j-n] [J-N] +wordchars o O +wordchars [p-s] [P-S] +wordchars [tu] [TU] +wordchars [v-y] [V-Y] +wordchars z Z + +prefixes + +flag *A: + . > RE # As in enter > reenter + +flag *I: + . > IN # As in disposed > indisposed + +flag *U: + . > UN # As in natural > unnatural + +suffixes + +flag V: + E > -E,IVE # As in create > creative + [^E] > IVE # As in prevent > preventive + +flag *N: + E > -E,ION # As in create > creation + Y > -Y,ICATION # As in multiply > multiplication + [^EY] > EN # As in fall > fallen + +flag *X: + E > -E,IONS # As in create > creations + Y > -Y,ICATIONS # As in multiply > multiplications + [^EY] > ENS # As in weak > weakens + +flag H: + Y > -Y,IETH # As in twenty > twentieth + [^Y] > TH # As in hundred > hundredth + +flag *Y: + Y > -Y,ILY # As in messy > messily + [^Y] > LY # As in quick > quickly + +flag *G: + E > -E,ING # As in file > filing + [^E] > ING # As in cross > crossing + +flag *J: + E > -E,INGS # As in file > filings + [^E] > INGS # As in cross > crossings + +flag *D: + E > D # As in create > created + [^AEIOU]Y > -Y,IED # As in imply > implied + [^EY] > ED # As in cross > crossed + [AEIOU]Y > ED # As in convey > conveyed + +flag T: + E > ST # As in late > latest + [^AEIOU]Y > -Y,IEST # As in dirty > dirtiest + [AEIOU]Y > EST # As in gray > grayest + [^EY] > EST # As in small > smallest + +flag *R: + E > R # As in skate > skater + [^AEIOU]Y > -Y,IER # As in multiply > multiplier + [AEIOU]Y > ER # As in convey > conveyer + [^EY] > ER # As in build > builder + +flag *Z: + E > RS # As in skate > skaters + [^AEIOU]Y > -Y,IERS # As in multiply > multipliers + [AEIOU]Y > ERS # As in convey > conveyers + [^EY] > ERS # As in build > builders + +flag *S: + [^AEIOU]Y > -Y,IES # As in imply > implies + [AEIOU]Y > S # As in convey > conveys + [CST]H > ES # As in lash > lashes (some TH's...) + [^CST]H > S # As in cough > coughs + [SXZ] > ES # As in fix > fixes + [^SXZHY] > S # As in bat > bats + +flag *P: + [^AEIOU]Y > -Y,INESS # As in cloudy > cloudiness + [AEIOU]Y > NESS # As in gray > grayness + [^Y] > NESS # As in late > lateness + +flag *M: + . > 'S # As in dog > dog's \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_028/model.dict b/coreseek/csft-4.1/test/test_028/model.dict new file mode 100755 index 0000000..a6f1dc4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_028/model.dict @@ -0,0 +1,30 @@ +ANSI +enter/DGRS +disposed/I +natural/PSY +create/ADGNSVX +prevent/DGRSV +multiply/DGNRSXZ +fall/GMNRS +weak/NPRTXY +twenty/HS +hundred/HS +messy/PRTY +quick/NPRTXY +file/DGJMRSZ +cross/DGJRSYZ +imply/DGNSX +convey/DGRSZ +late/DPRTY +dirty/DGPRSTY +gray/DGPRSTY +small/PRT +skate/DGRSZ +build/DGJRSZ +lash/DGJRS +cough/DGRS +fix/DGJRSZ +bat/DGMRS +cloudy/PRTY +dog/MS +anorexia \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_028/model.spell b/coreseek/csft-4.1/test/test_028/model.spell new file mode 100755 index 0000000..890bcaa --- /dev/null +++ b/coreseek/csft-4.1/test/test_028/model.spell @@ -0,0 +1,170 @@ +ANSI > ANSI +anorexia > anorexia +bat > bat +bat's > bat +bated > bat +bater > bat +bating > bat +bats > bat +build > build +builded > build +builder > build +builders > build +building > build +buildings > build +builds > build +cloudier > cloudy +cloudiest > cloudy +cloudily > cloudy +cloudiness > cloudy +cloudy > cloudy +convey > convey +conveyed > convey +conveyer > convey +conveyers > convey +conveying > convey +conveys > convey +cough > cough +coughed > cough +cougher > cough +coughing > cough +coughs > cough +create > create +created > create +creates > create +creating > create +creation > create +creations > create +creative > create +cross > cross +crossed > cross +crosser > cross +crossers > cross +crosses > cross +crossing > cross +crossings > cross +crossly > cross +dirtied > dirty +dirtier > dirty +dirties > dirty +dirtiest > dirty +dirtily > dirty +dirtiness > dirty +dirty > dirty +dirtying > dirty +disposed > disposed +dog > dog +dog's > dog +dogs > dog +enter > enter +entered > enter +enterer > enter +entering > enter +enters > enter +fall > fall +fall's > fall +fallen > fall +faller > fall +falling > fall +falls > fall +file > file +file's > file +filed > file +filer > file +filers > file +files > file +filing > file +filings > file +fix > fix +fixed > fix +fixer > fix +fixers > fix +fixes > fix +fixing > fix +fixings > fix +graily > gray +gray > gray +grayed > gray +grayer > gray +grayest > gray +graying > gray +grayness > gray +grays > gray +hundred > hundred +hundreds > hundred +hundredth > hundred +implication > imply +implications > imply +implied > imply +implies > imply +imply > imply +implying > imply +indisposed > disposed +lash > lash +lashed > lash +lasher > lash +lashes > lash +lashing > lash +lashings > lash +late > late +lated > late +lately > late +lateness > late +later > late +latest > late +messier > messy +messiest > messy +messily > messy +messiness > messy +messy > messy +multiplication > multiply +multiplications > multiply +multiplied > multiply +multiplier > multiply +multipliers > multiply +multiplies > multiply +multiply > multiply +multiplying > multiply +natural > natural +naturally > natural +naturalness > natural +naturals > natural +prevent > prevent +prevented > prevent +preventer > prevent +preventing > prevent +preventive > prevent +prevents > prevent +quick > quick +quicken > quick +quickens > quick +quicker > quick +quickest > quick +quickly > quick +quickness > quick +recreate > create +recreated > create +recreates > create +recreating > create +recreation > create +recreations > create +skate > skate +skated > skate +skater > skate +skaters > skate +skates > skate +skating > skate +small > small +smaller > small +smallest > small +smallness > small +twenties > twenty +twentieth > twenty +twenty > twenty +weak > weak +weaken > weak +weakens > weak +weaker > weak +weakest > weak +weakly > weak +weakness > weak diff --git a/coreseek/csft-4.1/test/test_028/test.inc b/coreseek/csft-4.1/test/test_028/test.inc new file mode 100755 index 0000000..920e402 --- /dev/null +++ b/coreseek/csft-4.1/test/test_028/test.inc @@ -0,0 +1,43 @@ +printf ( "testing $test_path, spelldump... " ); + +$windows = isset($_SERVER["WINDIR"]) || isset($_SERVER["windir"]) || isset($_SERVER["HOMEDRIVE"]); + +if ( $windows ) + $spelldump_path = "..\\bin\\debug\\spelldump"; +else + $spelldump_path = "../src/spelldump"; + +global $g_model; +if ( $g_model ) +{ + exec ( "$spelldump_path $test_path/model.dict $test_path/model.aff $test_path/model.spell", $error, $retval ); + + if ( !file_exists ( "$test_path/model.spell" ) ) + return false; + + printf ( "done; 1/1 subtests OK\n" ); + return true; +} + +exec ( "$spelldump_path $test_path/model.dict $test_path/model.aff $test_path/current.spell", $error, $retval ); + +if ( !file_exists ( "$test_path/current.spell" ) ) + return false; + +$model = file_get_contents ( "$test_path/model.spell" ); +$result = file_get_contents ( "$test_path/current.spell" ); +if ( $model != $result ) +{ + if ( $windows ) + system ( "diff -u3 $test_path/model.spell $test_path/current.spell > $test_path/report.txt" ); + else + system ( "diff $test_path/model.spell $test_path/current.spell > $test_path/report.txt" ); + + printf ( "FAILED\n" ); + return false; +} + +unlink ( "$test_path/current.spell" ); +printf ( "done; 1/1 subtests OK\n" ); + +return true; \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_029/model.bin b/coreseek/csft-4.1/test/test_029/model.bin new file mode 100755 index 0000000..4652f9f --- /dev/null +++ b/coreseek/csft-4.1/test/test_029/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:9:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"1";s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"2";s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"3";s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"4";s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:5:"query";s:4:"word";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:2:"12";s:4:"hits";s:2:"12";}}s:5:"query";s:4:"word";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:2:"16";s:4:"hits";s:2:"16";}}s:5:"query";s:4:"word";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:5:"query";s:4:"word";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:2:"12";s:4:"hits";s:2:"12";}}s:5:"query";s:4:"word";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:5:"query";s:4:"word";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:5:"query";s:4:"word";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"1";s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"2";s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"3";s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"4";s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:5:"query";s:4:"word";}i:8;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:5:"attr2";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"1";s:5:"attr2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"2";s:5:"attr2";s:1:"6";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"3";s:5:"attr2";s:1:"7";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:1:"4";s:5:"attr2";s:1:"8";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"word";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:5:"query";s:4:"word";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_029/test.xml b/coreseek/csft-4.1/test/test_029/test.xml new file mode 100755 index 0000000..23a10ef --- /dev/null +++ b/coreseek/csft-4.1/test/test_029/test.xml @@ -0,0 +1,127 @@ + + + +multi-index queries + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest1 +{ + type = mysql + + + sql_query = SELECT document_id, attr1, attr2, body FROM test_table + sql_attr_uint = attr1 + sql_attr_uint = attr2 +} + +source srctest2 +{ + type = mysql + + + sql_query = SELECT document_id, attr1, attr2, body FROM test_table + sql_attr_uint = attr1:5 + sql_attr_uint = attr2:5 +} + +source srctest3 +{ + type = mysql + + + sql_query = SELECT document_id, attr2, attr3, body FROM test_table + sql_attr_uint = attr2 + sql_attr_uint = attr3 +} + +source srctest4 +{ + type = mysql + + + sql_query = SELECT document_id, attr1, attr2, body FROM test_table + sql_attr_uint = attr1 + sql_attr_uint = attr2 +} + +index test1 +{ + source = srctest1 + path = /test1 + charset_type = utf-8 + min_prefix_len = 1 +} + +index test2 +{ + source = srctest2 + path = /test2 + charset_type = utf-8 + min_prefix_len = 1 +} + +index test3 +{ + source = srctest3 + path = /test3 + charset_type = utf-8 + min_prefix_len = 1 +} + +index test4 +{ + source = srctest4 + path = /test4 + charset_type = utf-8 + min_prefix_len = 1 +} + + + + +word +word +word +word +word +word +word +word +word + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `attr1` int(11) NOT NULL default '0', + `attr2` int(11) NOT NULL default '0', + `attr3` int(11) NOT NULL default '0', + `attr4` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 1, 5, 9, 13, 'wordforms' ), +( 2, 2, 6, 10, 14, 'wordies' ), +( 3, 3, 7, 11, 15, 'words' ), +( 4, 4, 8, 12, 16, 'word' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_030/model.bin b/coreseek/csft-4.1/test/test_030/model.bin new file mode 100755 index 0000000..8561f6d --- /dev/null +++ b/coreseek/csft-4.1/test/test_030/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"3500";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.033";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"two";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:5:"query";s:13:"one two three";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"4587";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"2587";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.004";s:5:"words";a:4:{s:6:"senior";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"pastor";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:9:"riverside";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"church";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:33:"senior pastor of riverside church";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_030/test.xml b/coreseek/csft-4.1/test/test_030/test.xml new file mode 100755 index 0000000..7d12269 --- /dev/null +++ b/coreseek/csft-4.1/test/test_030/test.xml @@ -0,0 +1,59 @@ + + + +ext2 ranking + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT document_id, body FROM test_table +} + +index test +{ + source = srctest + path = /test + stopwords = stopwords.txt + min_word_len = 3 +} + + + +one two three +senior pastor of riverside church + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'one two three' ), +( 2, 'one two three four' ), +( 3, 'one then two then three then four' ), +( 4, 'senior pastor of Riverside church' ), +( 5, 'senior pastor and the Riverside church' ) + + + diff --git a/coreseek/csft-4.1/test/test_031/model.bin b/coreseek/csft-4.1/test/test_031/model.bin new file mode 100755 index 0000000..ca7fce5 --- /dev/null +++ b/coreseek/csft-4.1/test/test_031/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:3:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"lat";i:5;s:4:"long";i:5;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"lat";d:0.5;s:4:"long";d:0.5;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"lat";d:0.5099999904632568359375;s:4:"long";d:0.5;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"lat";d:0.519999980926513671875;s:4:"long";d:0.5;}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"lat";d:0.5;s:4:"long";d:0.5099999904632568359375;}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"lat";d:0.5;s:4:"long";d:0.519999980926513671875;}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:3:{s:3:"lat";i:5;s:4:"long";i:5;s:8:"@geodist";i:5;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:3:"lat";d:0.5;s:4:"long";d:0.5;s:8:"@geodist";d:0;}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:3:"lat";d:0.5;s:4:"long";d:0.5099999904632568359375;s:8:"@geodist";d:56024.76171875;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:3:"lat";d:0.5099999904632568359375;s:4:"long";d:0.5;s:8:"@geodist";d:63839.9375;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:3:"lat";d:0.519999980926513671875;s:4:"long";d:0.5;s:8:"@geodist";d:127679.875;}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:3:"lat";d:0.5;s:4:"long";d:0.519999980926513671875;s:8:"@geodist";d:112049.203125;}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:3:"lat";i:5;s:4:"long";i:5;s:8:"@geodist";i:5;s:5:"@expr";i:5;}s:7:"matches";a:5:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:3:"lat";d:0.5;s:4:"long";d:0.519999980926513671875;s:8:"@geodist";d:112049.203125;s:5:"@expr";d:5;}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:3:"lat";d:0.5;s:4:"long";d:0.5099999904632568359375;s:8:"@geodist";d:56024.76171875;s:5:"@expr";d:4;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:3:"lat";d:0.519999980926513671875;s:4:"long";d:0.5;s:8:"@geodist";d:127679.875;s:5:"@expr";d:3;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:3:"lat";d:0.5099999904632568359375;s:4:"long";d:0.5;s:8:"@geodist";d:63839.9375;s:5:"@expr";d:2;}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:3:"lat";d:0.5;s:4:"long";d:0.5;s:8:"@geodist";d:0;s:5:"@expr";d:1;}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_031/test.xml b/coreseek/csft-4.1/test/test_031/test.xml new file mode 100755 index 0000000..28767ed --- /dev/null +++ b/coreseek/csft-4.1/test/test_031/test.xml @@ -0,0 +1,66 @@ + + + geodist/expressions vs multiquery + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table + sql_attr_float = lat + sql_attr_float = long +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `lat` float, + `long` float, + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 0.5, 0.5, 'one' ), +( 2, 0.51, 0.5, 'one two' ), +( 3, 0.52, 0.5, 'one two three' ), +( 4, 0.5, 0.51, 'one two three four' ), +( 5, 0.5, 0.52, 'one two three four five' ) + + +AddQuery ('one'); +$client->SetGeoAnchor( 'lat','long',0.5, 0.5 ); +$client->SetSortMode ( SPH_SORT_EXTENDED, '@geodist ASC' ); +$client->AddQuery ('one'); +$client->SetSortMode ( SPH_SORT_EXPR, '@id' ); +$client->AddQuery ('one'); +$results = $client->RunQueries (); +for ( $i=0; $i<=2; $i++ ) + if ( is_array($results) && is_array($results[$i]) ) + unset ( $results[$i]["time"] ); +]]> + + diff --git a/coreseek/csft-4.1/test/test_032/model.bin b/coreseek/csft-4.1/test/test_032/model.bin new file mode 100755 index 0000000..760df0c --- /dev/null +++ b/coreseek/csft-4.1/test/test_032/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:5:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"tag";i:1;}s:7:"matches";a:1:{i:150;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"tag";s:3:"150";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";}i:1;i:1;i:2;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"tag";i:1;}s:7:"matches";a:1:{i:137;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"tag";s:4:"1137";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"tag";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"tag";s:3:"200";}}i:198;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"tag";s:3:"198";}}i:199;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"tag";s:3:"199";}}i:200;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"tag";s:3:"200";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";}i:4;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"tag";i:1;}s:7:"matches";a:2:{i:127;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"tag";s:3:"127";}}i:128;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"tag";s:3:"128";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_032/test.xml b/coreseek/csft-4.1/test/test_032/test.xml new file mode 100755 index 0000000..b5ba082 --- /dev/null +++ b/coreseek/csft-4.1/test/test_032/test.xml @@ -0,0 +1,95 @@ + + + +block index vs cutoff, updates, ranges + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + + sql_query = SELECT * FROM test_table + sql_attr_uint = tag +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 +} + + + +SetFilter ( "tag", array(150) ); +$results[] = $client->Query ( "" ); + +if ( !$results[0] ) +{ + $results = false; // maybe its temporary; lets retry + return; +} + +// update that block +$results[] = $client->UpdateAttributes ( "idx", array("tag"), array(137=>array(1137)) ); + +// find the updated match +// checks that it works after the update +$client->ResetFilters (); +$client->SetFilter ( "tag", array(1137) ); +$results[] = $client->Query ( "" ); + +// find the matches by range +// checks that range queries vs fullscan block work +$client->ResetFilters (); +$client->SetFilterRange ( "tag", 198, 1100 ); +$results[] = $client->Query ( "" ); + +$client->ResetFilters (); +$client->SetFilterRange ( "tag", 127, 128 ); +$results[] = $client->Query ( "" ); + +// final fixup; we don't want to compare times +for ( $i=0; $i + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `tag` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +INSERT INTO test_table VALUES ( 1,1,'one' ), ( 2,2,'one' ), ( 3,3,'one' ), ( 4,4,'one' ) +INSERT INTO test_table SELECT document_id+4, tag+4, body FROM test_table +INSERT INTO test_table SELECT document_id+8, tag+8, body FROM test_table +INSERT INTO test_table SELECT document_id+16, tag+16, body FROM test_table +INSERT INTO test_table SELECT document_id+32, tag+32, body FROM test_table +INSERT INTO test_table SELECT document_id+64, tag+64, body FROM test_table +INSERT INTO test_table SELECT document_id+128, tag+128, body FROM test_table +DELETE FROM test_table WHERE document_id>200 +UPDATE test_table SET tag=200 WHERE document_id=1 + +DROP TABLE IF EXISTS test_table + + diff --git a/coreseek/csft-4.1/test/test_033/model.bin b/coreseek/csft-4.1/test/test_033/model.bin new file mode 100755 index 0000000..f315661 --- /dev/null +++ b/coreseek/csft-4.1/test/test_033/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:3:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.033";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"world";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:12:"hello -world";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"world";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"hello";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:12:"-hello world";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"world";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:11:"hello world";}}i:1;a:3:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"world";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:12:"hello -world";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"world";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"hello";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:12:"-hello world";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"world";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:5:"query";s:11:"hello world";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_033/test.xml b/coreseek/csft-4.1/test/test_033/test.xml new file mode 100755 index 0000000..814bf13 --- /dev/null +++ b/coreseek/csft-4.1/test/test_033/test.xml @@ -0,0 +1,63 @@ + + + +ignore_chars vs specials + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + + + ignore_chars = U+002D + + +} + + + +hello -world +-hello world +hello world + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'hello world' ), +( 2, 'hello' ), +( 3, 'world' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_034/model.bin b/coreseek/csft-4.1/test/test_034/model.bin new file mode 100755 index 0000000..4319a66 --- /dev/null +++ b/coreseek/csft-4.1/test/test_034/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:3:"mva";i:1073741825;s:3:"tag";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:1:{i:0;s:1:"1";}s:3:"tag";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:2:{i:0;s:1:"2";i:1;s:1:"3";}s:3:"tag";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:3:"tag";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:4:{i:0;s:1:"7";i:1;s:1:"8";i:2;s:1:"9";i:3;s:2:"10";}s:3:"tag";s:2:"44";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:0:{}s:3:"tag";s:2:"55";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}i:1;a:1:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:3:"mva";i:1073741825;s:3:"tag";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:1:{i:0;s:1:"1";}s:3:"tag";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:2:{i:0;s:1:"2";i:1;s:1:"3";}s:3:"tag";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:3:"tag";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:4:{i:0;s:1:"7";i:1;s:1:"8";i:2;s:1:"9";i:3;s:2:"10";}s:3:"tag";s:2:"44";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:0:{}s:3:"tag";s:2:"55";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_034/test.xml b/coreseek/csft-4.1/test/test_034/test.xml new file mode 100755 index 0000000..7ea6ea9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_034/test.xml @@ -0,0 +1,75 @@ + + +distibuted index vs MVA + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT document_id, text, mva, tag FROM test_table + + sql_attr_multi = uint mva from field + sql_attr_multi = bigint mva from field + + sql_attr_uint = tag +} + +index idx +{ + source = src + path = /idx + docinfo = extern + charset_type = utf-8 + min_word_len = 1 +} + +index dist +{ + type = distributed + agent = :idx + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + + +2 + + + + + +CREATE TABLE `test_table` ( + `document_id` int(11), + `text` varchar(255) NOT NULL, + `mva` varchar(255) NOT NULL, + `tag` int(11) +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'test1', '1', 11 ), +( 2, 'test2', '2,3', 22 ), +( 3, 'test3', '4,5,6', 33 ), +( 4, 'test4', '7,8,9,10', 44 ), +( 5, 'test5', '', 55 ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_035/model.bin b/coreseek/csft-4.1/test/test_035/model.bin new file mode 100755 index 0000000..3bc27ce --- /dev/null +++ b/coreseek/csft-4.1/test/test_035/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:3:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"the";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"the*";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"the*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"*the*";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*the*";}}i:1;a:3:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"the";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"the*";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"the*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"*the*";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"*the*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_035/test.xml b/coreseek/csft-4.1/test/test_035/test.xml new file mode 100755 index 0000000..bf3318d --- /dev/null +++ b/coreseek/csft-4.1/test/test_035/test.xml @@ -0,0 +1,65 @@ + + + +infixes vs stopwords + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + stopwords = stopwords.txt + enable_star = 1 + + + min_prefix_len = 3 + min_infix_len = 3 + +} + + + +the +the* +*the* + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'their' ), +( 2, 'theta' ), +( 3, 'xthex' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_036/model.bin b/coreseek/csft-4.1/test/test_036/model.bin new file mode 100755 index 0000000..06905f9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_036/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:4:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"mva1";i:1073741825;s:4:"mva2";i:1073741825;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:3:{i:0;s:1:"2";i:1;s:2:"22";i:2;s:3:"222";}s:4:"mva2";a:0:{}}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:3:{i:0;s:1:"3";i:1;s:2:"33";i:2;s:3:"333";}s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"main";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"main";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"mva1";i:1073741825;s:4:"mva2";i:1073741825;}s:7:"matches";a:3:{i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:3:{i:0;s:1:"1";i:1;s:2:"10";i:2;s:3:"100";}s:4:"mva2";a:3:{i:0;s:1:"0";i:1;s:1:"1";i:2;s:1:"9";}}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:3:{i:0;s:1:"2";i:1;s:2:"20";i:2;s:3:"200";}s:4:"mva2";a:0:{}}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:0:{}s:4:"mva2";a:0:{}}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"delta";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"delta";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"mva1";i:1073741825;s:4:"mva2";i:1073741825;}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:1:{i:0;s:1:"6";}s:4:"mva2";a:0:{}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:5:"test1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test1";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"mva1";i:1073741825;s:4:"mva2";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"test2";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test2";}}i:1;a:4:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"mva1";i:1073741825;s:4:"mva2";i:1073741825;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:3:{i:0;s:1:"2";i:1;s:2:"22";i:2;s:3:"222";}s:4:"mva2";a:0:{}}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:3:{i:0;s:1:"3";i:1;s:2:"33";i:2;s:3:"333";}s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"main";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"main";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"mva1";i:1073741825;s:4:"mva2";i:1073741825;}s:7:"matches";a:3:{i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:3:{i:0;s:1:"1";i:1;s:2:"10";i:2;s:3:"100";}s:4:"mva2";a:3:{i:0;s:1:"0";i:1;s:1:"1";i:2;s:1:"9";}}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:3:{i:0;s:1:"2";i:1;s:2:"20";i:2;s:3:"200";}s:4:"mva2";a:0:{}}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:0:{}s:4:"mva2";a:0:{}}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"delta";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"delta";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"mva1";i:1073741825;s:4:"mva2";i:1073741825;}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"tag1";s:1:"0";s:4:"tag2";s:1:"0";s:4:"mva1";a:1:{i:0;s:1:"6";}s:4:"mva2";a:0:{}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"test1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test1";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"tag1";i:1;s:4:"tag2";i:1;s:4:"mva1";i:1073741825;s:4:"mva2";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"test2";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test2";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_036/test.xml b/coreseek/csft-4.1/test/test_036/test.xml new file mode 100755 index 0000000..844e56c --- /dev/null +++ b/coreseek/csft-4.1/test/test_036/test.xml @@ -0,0 +1,123 @@ + + + +merge vs --merge-dst-range + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src_base +{ + type = mysql + +} + + + +source srcmain : src_base +{ + sql_query = SELECT * FROM test_table WHERE document_id in (1,2,3,4,5,6,7,8) + sql_attr_uint = tag1 + sql_attr_uint = tag2 + sql_attr_multi = uint mva1 from field + sql_attr_multi = uint mva2 from field +} + +source srcdelta : src_base +{ + sql_query = SELECT * FROM test_table WHERE document_id in (9,10,11) + sql_attr_uint = tag1 + sql_attr_uint = tag2 + sql_attr_multi = uint mva1 from field + sql_attr_multi = uint mva2 from field +} + + +source srcmain : src_base +{ + sql_query = SELECT * FROM test_table WHERE document_id in (1,2,3,4,5,6,7,8) + sql_attr_uint = tag1 + sql_attr_uint = tag2 + sql_attr_multi = bigint mva1 from field + sql_attr_multi = bigint mva2 from field +} + +source srcdelta : src_base +{ + sql_query = SELECT * FROM test_table WHERE document_id in (9,10,11) + sql_attr_uint = tag1 + sql_attr_uint = tag2 + sql_attr_multi = bigint mva1 from field + sql_attr_multi = bigint mva2 from field +} + + + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 +} + +index delta +{ + source = srcdelta + path = /delta + charset_type = utf-8 +} + + + +--merge main delta --merge-dst-range tag2 0 0 + + + +main +delta +test1 +test2 + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `tag1` int(11) NOT NULL default '0', + `tag2` int(11) NOT NULL default '0', + `mva1` varchar(255) NOT NULL default '', + `mva2` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 0, 1, '', '1 2 3','main' ), +( 2, 0, 0, '2 22 222', '', 'main' ), +( 3, 0, 0, '3 33 333', '5 6 7','main' ), +( 4, 0, 1, '', '', 'test1' ), +( 5, 0, 1, '', '', 'test1' ), +( 6, 0, 0, '6', '', 'test1' ), +( 7, 0, 1, '7', '', 'test2' ), +( 8, 0, 1, '8', '', 'test2' ), +( 9, 0, 0, '1 10 100', '9 0 1','delta' ), +(10, 0, 0, '2 20 200', '', 'delta' ), +(11, 0, 0, '', '', 'delta' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_037/model.bin b/coreseek/csft-4.1/test/test_037/model.bin new file mode 100755 index 0000000..637ec78 --- /dev/null +++ b/coreseek/csft-4.1/test/test_037/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2800";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"зимн";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:6:"шин";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:""зимние шины"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1800";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"зимн";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:6:"шин";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:""зимние шины"";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"зимн";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:6:"шин";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:""зимние шины"";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"зимн";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:6:"шин";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:""зимние шины"";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1800";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"@title test";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:6:{i:11;a:2:{s:6:"weight";s:5:"11290";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:5:"10290";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:5:"10212";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"8290";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"8290";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:4:"4290";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"market";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"7";}s:6:"street";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"market street";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_037/test.xml b/coreseek/csft-4.1/test/test_037/test.xml new file mode 100755 index 0000000..c34fffc --- /dev/null +++ b/coreseek/csft-4.1/test/test_037/test.xml @@ -0,0 +1,92 @@ + + + +rankers + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE id BETWEEN 1 AND 10 + sql_query_pre = SET NAMES utf8 +} + +source srctest2 : srctest +{ + sql_query = SELECT * FROM test_table WHERE id BETWEEN 11 AND 20 +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + morphology = stem_ru, stem_en + charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F +} + +index test2 +{ + source = srctest2 + path = /test2 + charset_type = utf-8 +} + + + +"зимние шины" +"зимние шины" +"зимние шины" +"зимние шины" +@title test + +market street + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `title` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '' +) CHARACTER SET utf8 + + + +DROP TABLE IF EXISTS `test_table` + + +SET NAMES utf8 + +INSERT INTO `test_table` VALUES +( 1, 'зимние шины диски чего то тут зимние шины', '' ), +( 2, 'test doc two', 'second stupid test document with random content' ), +( 3, 'filler', 'filler' ), +( 4, 'filler', 'filler' ), +( 5, 'filler', 'filler' ), +( 6, 'filler', 'filler' ), +( 7, 'filler', 'filler' ), +( 8, 'filler', 'filler' ), +( 9, 'filler', 'filler' ), +( 10, 'filler', 'filler' ), + +( 11, 'market street', '' ), +( 12, 'market street west', '' ), +( 13, 'north market street', '' ), +( 14, 'farmers market street north', '' ), +( 15, 'flower street market', '' ), +( 16, 'market street is so very market street', '' ) + + + diff --git a/coreseek/csft-4.1/test/test_038/model.bin b/coreseek/csft-4.1/test/test_038/model.bin new file mode 100755 index 0000000..62754b4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_038/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:25:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"three";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:380:""one two"~3 three";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"=running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"=running";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"=run";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"=run";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"running*";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"runnin*";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"run*";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"ru*";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"=runnin*";}i:8;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:9:"runnings*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"runnings*";}i:9;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"runnin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"runnin";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"running";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"run";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"=running";}i:13;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"=run";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"running*";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"runnin*";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"run*";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"ru*";}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"=runnin*";}i:19;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:9:"runnings*";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"runnings*";}i:20;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"runnin";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"runnin";}i:21;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"running";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"running";}i:22;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"run";}i:23;a:3:{s:8:"sphinxql";s:47:"CALL KEYWORDS ('то-тический', 'test')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:9:"tokenized";s:21:"то-тический";s:10:"normalized";s:17:"то-тическ";}}}i:24;a:3:{s:8:"sphinxql";s:48:"CALL KEYWORDS ('тоЫтический', 'test')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:9:"tokenized";s:22:"тоытический";s:10:"normalized";s:18:"тоытическ";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_038/test.xml b/coreseek/csft-4.1/test/test_038/test.xml new file mode 100755 index 0000000..06b39d3 --- /dev/null +++ b/coreseek/csft-4.1/test/test_038/test.xml @@ -0,0 +1,110 @@ + + + +stemming + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + charset_table = -, 0..9, A..Z->a..z, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F + morphology = stem_ru, stem_en +} + +index morph0 +{ + source = srctest + path = /morph0 + + dict = keywords + min_prefix_len = 1 + enable_star = 1 +} + +index morph1 +{ + source = srctest + path = /morph1 + + dict = keywords + min_prefix_len = 1 + enable_star = 1 + morphology = stem_en +} + + + + +"one two"~3 three + + +=running +=run +running* +runnin* +run* +ru* +=runnin* +runnings* +runnin +running +run + +=running +=run +running* +runnin* +run* +ru* +=runnin* +runnings* +runnin +running +run + + + + + +CALL KEYWORDS ('то-тический', 'test') +CALL KEYWORDS ('тоЫтический', 'test') + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'and nothing else matters' ), +( 2, 'running into trouble' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_039/model.bin b/coreseek/csft-4.1/test/test_039/model.bin new file mode 100755 index 0000000..d9cc233 --- /dev/null +++ b/coreseek/csft-4.1/test/test_039/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:3:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"group_id";i:1;}s:7:"matches";a:8:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"2";}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"1";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"1";}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"2";}}i:14;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"2";}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";}i:1;i:1;i:2;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"group_id";i:1;}s:7:"matches";a:8:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"2";}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:3:"123";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"1";}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"2";}}i:14;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"group_id";s:1:"2";}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_039/test.xml b/coreseek/csft-4.1/test/test_039/test.xml new file mode 100755 index 0000000..7e56ea0 --- /dev/null +++ b/coreseek/csft-4.1/test/test_039/test.xml @@ -0,0 +1,120 @@ + + + +distributed updates + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src1 +{ + type = mysql + + + sql_query = SELECT id, group_id, title FROM test_table + sql_attr_uint = group_id +} + +source src2 : src1 +{ + sql_query = SELECT 10+id, group_id, title FROM test_table +} + + +index block1 +{ + source = src1 + path = /block1 + docinfo = extern + charset_type = utf-8 + min_word_len = 1 +} + + + +index block2 +{ + source = src2 + path = /block2 + docinfo = extern + charset_type = utf-8 + min_word_len = 1 +} + + + +index dist +{ + type = distributed + local = block1 + agent = :block2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + + + +2 + + +Query ( "", "dist" ); +if ( !$res ) +{ + $results[] = $client->GetLastError(); + return; +} +unset ( $res["time"] ); +$results[] = $res; + +$res = $client->UpdateAttributes ( "dist", array("group_id"), array(11=>array(123)) ); +if ( $res===false ) +{ + $results[] = $client->GetLastError(); + return; +} +$results[] = $res; + +$res = $client->Query ( "", "dist" ); +if ( !$res ) +{ + $results[] = $client->GetLastError(); + return; +} +unset ( $res["time"] ); +$results[] = $res; +]]> + + + +CREATE TABLE test_table +( + id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, + group_id INTEGER NOT NULL, + title VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table ( id, group_id, title ) VALUES +( 1, 1, 'test one' ), +( 2, 1, 'test two' ), +( 3, 2, 'test three' ), +( 4, 2, 'test four' ) + + + diff --git a/coreseek/csft-4.1/test/test_040/model.bin b/coreseek/csft-4.1/test/test_040/model.bin new file mode 100755 index 0000000..58987ef --- /dev/null +++ b/coreseek/csft-4.1/test/test_040/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:20:{i:0;s:8:"he* fin*";i:1;a:1:{i:0;s:81:"[B]He[A] caught fish in deep pools with invisible [B]fingers[A] and ate them raw.";}i:2;s:10:"*gers *raw";i:3;a:1:{i:0;s:81:"He caught fish in deep pools with invisible [B]fingers[A] and ate them [B]raw[A].";}i:4;s:10:"fin* *gers";i:5;a:1:{i:0;s:75:"He caught fish in deep pools with invisible [B]fingers[A] and ate them raw.";}i:6;s:11:"*augh* *is*";i:7;a:1:{i:0;s:87:"He [B]caught[A] [B]fish[A] in deep pools with [B]invisible[A] fingers and ate them raw.";}i:8;s:7:"*pools*";i:9;a:1:{i:0;s:75:"He caught fish in deep [B]pools[A] with invisible fingers and ate them raw.";}i:10;s:33:"невидимыми* пальц*";i:11;a:1:{i:0;s:132:"[B]Невидимыми[A] [B]пальцами[A] ловил он рыбу в глубоких омутах и ел её сырой.";}i:12;s:21:"*цами *сырой";i:13;a:1:{i:0;s:132:"Невидимыми [B]пальцами[A] ловил он рыбу в глубоких омутах и ел её [B]сырой[A].";}i:14;s:21:"пальц* *цами";i:15;a:1:{i:0;s:126:"Невидимыми [B]пальцами[A] ловил он рыбу в глубоких омутах и ел её сырой.";}i:16;s:13:"*ови* *ы*";i:17;a:1:{i:0;s:144:"[B]Невидимыми[A] пальцами [B]ловил[A] он [B]рыбу[A] в глубоких омутах и ел её [B]сырой[A].";}i:18;s:14:"*омутах*";i:19;a:1:{i:0;s:126:"Невидимыми пальцами ловил он рыбу в глубоких [B]омутах[A] и ел её сырой.";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_040/test.xml b/coreseek/csft-4.1/test/test_040/test.xml new file mode 100755 index 0000000..ef8054d --- /dev/null +++ b/coreseek/csft-4.1/test/test_040/test.xml @@ -0,0 +1,109 @@ + + + +snippets vs wildcard matches + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, body FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 + min_word_len = 1 +} + + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES ( 1, 'test' ) + + + + +$results = array (); +$opts = array +( + 'before_match' => '[B]', + 'after_match' => '[A]', + 'chunk_separator' => ' ... ', + 'limit' => 100, + 'around' => 2, +); + +$tests = array +( + array + ( + 'docs' => array('He caught fish in deep pools with invisible fingers and ate them raw.'), + 'q' => array + ( + 'he* fin*', + '*gers *raw', + 'fin* *gers', + '*augh* *is*', + '*pools*', + ), + ), + + // utf-8 + + array + ( + 'docs' => array('Невидимыми пальцами ловил он рыбу в глубоких омутах и ел её сырой.'), + 'q' => array + ( + 'невидимыми* пальц*', + '*цами *сырой', + 'пальц* *цами', + '*ови* *ы*', + '*омутах*', + ), + ), +); + +foreach ( $tests as $test ) +{ + foreach ( $test['q'] as $words ) + { + $results [] = $words; + $res = $client->BuildExcerpts ( $test['docs'], 'test_idx', $words, $opts ); + if ( !$res ) + { + $results = false; + return; + } + $results [] = $res; + } +} + + + diff --git a/coreseek/csft-4.1/test/test_041/model.bin b/coreseek/csft-4.1/test/test_041/model.bin new file mode 100755 index 0000000..4c85bab --- /dev/null +++ b/coreseek/csft-4.1/test/test_041/model.bin @@ -0,0 +1,21 @@ +a:4:{i:0;a:31:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"work";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worked";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"worked";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worker";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"worker";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"=work";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worked";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"=worked";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worker";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"=worker";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"run";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"runs";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"runs";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"=run";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"runs";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"=runs";}i:10;a:2:{s:8:"sphinxql";s:159:" +REPLACE INTO rt (id, id1, title) VALUES ( 1, 1, 'work worked working workings worker works workers' ), +( 2, 1, 'run' ), +( 3, 1, 'runs' ), +( 4, 1, 'running' ) +";s:14:"total_affected";i:4;}i:11;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('work')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1847";s:3:"id1";s:1:"1";}}}i:12;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"5";}}}i:13;a:3:{s:8:"sphinxql";s:38:"SELECT * FROM rt WHERE MATCH('worked')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1847";s:3:"id1";s:1:"1";}}}i:14;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"5";}}}i:15;a:3:{s:8:"sphinxql";s:38:"SELECT * FROM rt WHERE MATCH('worker')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1769";s:3:"id1";s:1:"1";}}}i:16;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:6:"worker";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"2";}}}i:17;a:3:{s:8:"sphinxql";s:37:"SELECT * FROM rt WHERE MATCH('=work')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:18;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:5:"=work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:19;a:3:{s:8:"sphinxql";s:39:"SELECT * FROM rt WHERE MATCH('=worked')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:20;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:7:"=worked";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:21;a:3:{s:8:"sphinxql";s:39:"SELECT * FROM rt WHERE MATCH('=worker')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:22;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:7:"=worker";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:23;a:3:{s:8:"sphinxql";s:35:"SELECT * FROM rt WHERE MATCH('run')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}}}i:24;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}}}i:25;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('runs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}}}i:26;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}}}i:27;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('=run')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:28;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"=run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:29;a:3:{s:8:"sphinxql";s:37:"SELECT * FROM rt WHERE MATCH('=runs')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:30;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:5:"=runs";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}}i:1;a:31:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"work";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worked";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"worked";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worker";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"worker";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"=work";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worked";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"=worked";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worker";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"=worker";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"run";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"runs";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"runs";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"=run";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"runs";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"=runs";}i:10;a:2:{s:8:"sphinxql";s:159:" +REPLACE INTO rt (id, id1, title) VALUES ( 1, 1, 'work worked working workings worker works workers' ), +( 2, 1, 'run' ), +( 3, 1, 'runs' ), +( 4, 1, 'running' ) +";s:14:"total_affected";i:4;}i:11;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('work')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1847";s:3:"id1";s:1:"1";}}}i:12;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"5";}}}i:13;a:3:{s:8:"sphinxql";s:38:"SELECT * FROM rt WHERE MATCH('worked')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1847";s:3:"id1";s:1:"1";}}}i:14;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"5";}}}i:15;a:3:{s:8:"sphinxql";s:38:"SELECT * FROM rt WHERE MATCH('worker')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1769";s:3:"id1";s:1:"1";}}}i:16;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:6:"worker";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"2";}}}i:17;a:3:{s:8:"sphinxql";s:37:"SELECT * FROM rt WHERE MATCH('=work')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:18;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:5:"=work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:19;a:3:{s:8:"sphinxql";s:39:"SELECT * FROM rt WHERE MATCH('=worked')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:20;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:7:"=worked";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:21;a:3:{s:8:"sphinxql";s:39:"SELECT * FROM rt WHERE MATCH('=worker')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:22;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:7:"=worker";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:23;a:3:{s:8:"sphinxql";s:35:"SELECT * FROM rt WHERE MATCH('run')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}}}i:24;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}}}i:25;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('runs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}}}i:26;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}}}i:27;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('=run')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:28;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"=run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:29;a:3:{s:8:"sphinxql";s:37:"SELECT * FROM rt WHERE MATCH('=runs')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:30;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:5:"=runs";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}}i:2;a:31:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1847";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"work";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1847";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"worked";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1769";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worker";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"worker";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1847";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"=work";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1847";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"=worked";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1769";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worker";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"=worker";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"run";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"runs";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"=run";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"=runs";}i:10;a:2:{s:8:"sphinxql";s:159:" +REPLACE INTO rt (id, id1, title) VALUES ( 1, 1, 'work worked working workings worker works workers' ), +( 2, 1, 'run' ), +( 3, 1, 'runs' ), +( 4, 1, 'running' ) +";s:14:"total_affected";i:4;}i:11;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('work')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1847";s:3:"id1";s:1:"1";}}}i:12;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"5";}}}i:13;a:3:{s:8:"sphinxql";s:38:"SELECT * FROM rt WHERE MATCH('worked')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1847";s:3:"id1";s:1:"1";}}}i:14;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"5";}}}i:15;a:3:{s:8:"sphinxql";s:38:"SELECT * FROM rt WHERE MATCH('worker')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1769";s:3:"id1";s:1:"1";}}}i:16;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:6:"worker";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"2";}}}i:17;a:3:{s:8:"sphinxql";s:37:"SELECT * FROM rt WHERE MATCH('=work')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:18;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:5:"=work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:19;a:3:{s:8:"sphinxql";s:39:"SELECT * FROM rt WHERE MATCH('=worked')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:20;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:7:"=worked";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:21;a:3:{s:8:"sphinxql";s:39:"SELECT * FROM rt WHERE MATCH('=worker')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:22;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:7:"=worker";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:23;a:3:{s:8:"sphinxql";s:35:"SELECT * FROM rt WHERE MATCH('run')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}}}i:24;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}}}i:25;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('runs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}}}i:26;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}}}i:27;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('=run')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:28;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"=run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:29;a:3:{s:8:"sphinxql";s:37:"SELECT * FROM rt WHERE MATCH('=runs')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:30;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:5:"=runs";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}}i:3;a:31:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1847";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"work";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1847";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"worked";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1769";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"worker";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"worker";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"=work";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"=work";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"=worked";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"=worked";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"=worker";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"=worker";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"run";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1442";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"runs";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"=run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"=run";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"=runs";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"=runs";}i:10;a:2:{s:8:"sphinxql";s:159:" +REPLACE INTO rt (id, id1, title) VALUES ( 1, 1, 'work worked working workings worker works workers' ), +( 2, 1, 'run' ), +( 3, 1, 'runs' ), +( 4, 1, 'running' ) +";s:14:"total_affected";i:4;}i:11;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('work')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1847";s:3:"id1";s:1:"1";}}}i:12;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"5";}}}i:13;a:3:{s:8:"sphinxql";s:38:"SELECT * FROM rt WHERE MATCH('worked')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1847";s:3:"id1";s:1:"1";}}}i:14;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"5";}}}i:15;a:3:{s:8:"sphinxql";s:38:"SELECT * FROM rt WHERE MATCH('worker')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1769";s:3:"id1";s:1:"1";}}}i:16;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:6:"worker";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"2";}}}i:17;a:3:{s:8:"sphinxql";s:37:"SELECT * FROM rt WHERE MATCH('=work')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:18;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:5:"=work";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:19;a:3:{s:8:"sphinxql";s:39:"SELECT * FROM rt WHERE MATCH('=worked')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:20;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:7:"=worked";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:21;a:3:{s:8:"sphinxql";s:39:"SELECT * FROM rt WHERE MATCH('=worker')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:22;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:7:"=worker";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:23;a:3:{s:8:"sphinxql";s:35:"SELECT * FROM rt WHERE MATCH('run')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}}}i:24;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}}}i:25;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('runs')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1442";s:3:"id1";s:1:"1";}}}i:26;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"3";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"3";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:3:"run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"3";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"3";}}}i:27;a:3:{s:8:"sphinxql";s:36:"SELECT * FROM rt WHERE MATCH('=run')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:28;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:4:"=run";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}i:29;a:3:{s:8:"sphinxql";s:37:"SELECT * FROM rt WHERE MATCH('=runs')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1695";s:3:"id1";s:1:"1";}}}i:30;a:3:{s:8:"sphinxql";s:9:"show meta";s:10:"total_rows";i:6;s:4:"rows";a:5:{i:0;a:2:{s:13:"Variable_name";s:5:"total";s:5:"Value";s:1:"1";}i:1;a:2:{s:13:"Variable_name";s:11:"total_found";s:5:"Value";s:1:"1";}i:2;a:2:{s:13:"Variable_name";s:10:"keyword[0]";s:5:"Value";s:5:"=runs";}i:3;a:2:{s:13:"Variable_name";s:7:"docs[0]";s:5:"Value";s:1:"1";}i:4;a:2:{s:13:"Variable_name";s:7:"hits[0]";s:5:"Value";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_041/test.xml b/coreseek/csft-4.1/test/test_041/test.xml new file mode 100755 index 0000000..dd47d58 --- /dev/null +++ b/coreseek/csft-4.1/test/test_041/test.xml @@ -0,0 +1,114 @@ + + + +index_exact_words + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +source srctest +{ + type = mysql + + sql_query = SELECT document_id, body FROM test_table +} + +index test +{ + source = srctest + path = /test + + + index_exact_words = 0 + index_exact_words = 1 + + + + morphology = none + morphology = stem_en + +} + +index rt +{ + type = rt + path = /rt + rt_field = title + rt_attr_uint = id1 + index_exact_words = 1 + morphology = stem_en +} + + + +work +worked +worker +=work +=worked +=worker +run +runs +=run +=runs + + + + +REPLACE INTO rt (id, id1, title) VALUES ( 1, 1, 'work worked working workings worker works workers' ), +( 2, 1, 'run' ), +( 3, 1, 'runs' ), +( 4, 1, 'running' ) + +SELECT * FROM rt WHERE MATCH('work') +show meta +SELECT * FROM rt WHERE MATCH('worked') +show meta +SELECT * FROM rt WHERE MATCH('worker') +show meta +SELECT * FROM rt WHERE MATCH('=work') +show meta +SELECT * FROM rt WHERE MATCH('=worked') +show meta +SELECT * FROM rt WHERE MATCH('=worker') +show meta +SELECT * FROM rt WHERE MATCH('run') +show meta +SELECT * FROM rt WHERE MATCH('runs') +show meta +SELECT * FROM rt WHERE MATCH('=run') +show meta +SELECT * FROM rt WHERE MATCH('=runs') +show meta + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'work worked working workings worker works workers' ), +( 2, 'run' ), +( 3, 'runs' ), +( 4, 'running' ) + + + diff --git a/coreseek/csft-4.1/test/test_042/model.bin b/coreseek/csft-4.1/test/test_042/model.bin new file mode 100755 index 0000000..9e10a91 --- /dev/null +++ b/coreseek/csft-4.1/test/test_042/model.bin @@ -0,0 +1 @@ +a:4:{i:0;a:1:{i:0;a:6:{i:0;b:1;i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;s:0:"";i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:4;s:0:"";i:5;b:1;}}i:1;a:1:{i:0;a:6:{i:0;b:1;i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;s:0:"";i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:4;s:0:"";i:5;b:0;}}i:2;a:1:{i:0;a:6:{i:0;b:1;i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;s:0:"";i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:4;s:0:"";i:5;b:1;}}i:3;a:1:{i:0;a:6:{i:0;b:1;i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;s:0:"";i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:4;s:0:"";i:5;b:0;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_042/test.xml b/coreseek/csft-4.1/test/test_042/test.xml new file mode 100755 index 0000000..531a5de --- /dev/null +++ b/coreseek/csft-4.1/test/test_042/test.xml @@ -0,0 +1,79 @@ + + + +persistent connections + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + + client_timeout = 5 + client_timeout = 1 + + +workers = none + + workers = threads + binlog_path = + + + +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, body FROM test_table +} + +index test_idx +{ + source = srctest + path = /test +} + + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES ( 1, 'test' ) + + +Open(); + +$results [] = $client->Query ( 'test' ); +$results [] = $client->GetLastError(); +sleep ( 2 ); +$results [] = $client->Query ( 'test' ); +$results [] = $client->GetLastError(); + +$results [] = $client->Close(); + +foreach ( $results as &$r ) + if ( is_array($r) ) + unset ( $r['time'] ); + +]]> + diff --git a/coreseek/csft-4.1/test/test_043/model.bin b/coreseek/csft-4.1/test/test_043/model.bin new file mode 100755 index 0000000..6f21618 --- /dev/null +++ b/coreseek/csft-4.1/test/test_043/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:6:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:4:"at_1";s:1:"1";s:4:"at_2";s:1:"2";s:4:"at_3";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"zlib";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"zlib";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:4:"at_1";s:1:"1";s:4:"at_2";s:1:"2";s:4:"at_3";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"mysql";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"mysql";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:3:{s:4:"at_1";s:1:"1";s:4:"at_2";s:1:"2";s:4:"at_3";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:11:"hello world";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:4:"at_1";s:1:"1";s:4:"at_2";s:1:"2";s:4:"at_3";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"plain";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:5:"plain";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:9:"malformed";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:9:"malformed";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"broken";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:5:"query";s:6:"broken";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_043/test.xml b/coreseek/csft-4.1/test/test_043/test.xml new file mode 100755 index 0000000..07ad968 --- /dev/null +++ b/coreseek/csft-4.1/test/test_043/test.xml @@ -0,0 +1,81 @@ + + + +unpack + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, t_zlib, at_1, t_mysql, plain, at_2, at_3, t_mysql_2 FROM test_table + + unpack_zlib = t_zlib + unpack_mysqlcompress = t_mysql + unpack_mysqlcompress = t_mysql_2 + + sql_attr_uint = at_1 + sql_attr_uint = at_2 + sql_attr_uint = at_3 +} + +index test_idx +{ + source = srctest + path = /test +} + + + + +CREATE TABLE test_table +( + id integer primary key not null auto_increment, + t_zlib blob, + t_mysql blob, + t_mysql_2 blob, + plain varchar(256), + at_1 int not null default 1, + at_2 int not null default 2, + at_3 int not null default 3 +) ENGINE=MYISAM + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (t_zlib, t_mysql, t_mysql_2, plain) VALUES +( substr(compress('zlib'), 5), NULL, NULL, 'plain' ), +( NULL, compress('mysql'), NULL, NULL ), +( substr(compress('test'), 5), compress('hello'), compress('world'), '' ), +( 'malformed', 'broken', NULL, NULL ), +( '', '', '', '' ); + + + +zlib +mysql +hello world +plain +malformed +broken + + + diff --git a/coreseek/csft-4.1/test/test_044/model.bin b/coreseek/csft-4.1/test/test_044/model.bin new file mode 100755 index 0000000..a7eabd4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_044/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:8:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:5:"query";s:4:"test";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:7:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"7";s:11:"total_found";s:1:"7";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:4:"test";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:7:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"7";s:11:"total_found";s:1:"7";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:4:"test";}i:3;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:7:{i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"7";s:11:"total_found";s:1:"7";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:4:"test";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:6:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.005";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:4:"test";}i:5;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:6:{i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.007";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:5:"query";s:4:"test";}i:6;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.006";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}s:5:"query";s:4:"test";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.007";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}s:5:"query";s:4:"test";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_044/test.xml b/coreseek/csft-4.1/test/test_044/test.xml new file mode 100755 index 0000000..47ebdbf --- /dev/null +++ b/coreseek/csft-4.1/test/test_044/test.xml @@ -0,0 +1,112 @@ + + + +kill-list (part 1) + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src_main +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +source src_delta1 +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE document_id=6 + sql_query_killlist = SELECT 1 +} + +source src_delta2 +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE document_id=7 + sql_query_killlist = SELECT 2 +} + +source src_delta3 +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE document_id=8 + sql_query_killlist = SELECT 3 +} + +index idx_main +{ + source = src_main + path = /test_main +} + +index idx_delta1 +{ + source = src_delta1 + path = /test_delta1 +} + +index idx_delta2 +{ + source = src_delta2 + path = /test_delta2 +} + +index idx_delta3 +{ + source = src_delta3 + path = /test_delta3 +} + + + +CREATE TABLE test_table +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table VALUES +( 1, 'test one' ), +( 2, 'test two' ), +( 3, 'test three' ), +( 4, 'test four' ), +( 5, 'test five' ), +( 6, 'test delta1' ), +( 7, 'test delta2' ), +( 8, 'test delta3' ) + + + +test +test +test +test +test +test +test +test + + + diff --git a/coreseek/csft-4.1/test/test_045/model.bin b/coreseek/csft-4.1/test/test_045/model.bin new file mode 100755 index 0000000..c3211be --- /dev/null +++ b/coreseek/csft-4.1/test/test_045/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:3:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_045/test.xml b/coreseek/csft-4.1/test/test_045/test.xml new file mode 100755 index 0000000..de61321 --- /dev/null +++ b/coreseek/csft-4.1/test/test_045/test.xml @@ -0,0 +1,119 @@ + + + +kill-list (part 2) + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src_main +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +source src_delta1 +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE document_id=6 + sql_query_killlist = SELECT 1 +} + +source src_delta2 +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE document_id=7 + sql_query_killlist = SELECT 2 +} + +source src_delta3 +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE document_id=8 + sql_query_killlist = SELECT 3 +} + +index idx_main +{ + source = src_main + path = /test_main +} + +index idx_delta1 +{ + source = src_delta1 + path = /test_delta1 +} + +index idx_delta2 +{ + source = src_delta2 + path = /test_delta2 +} + +index idx_delta3 +{ + source = src_delta3 + path = /test_delta3 +} + + + +CREATE TABLE test_table +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table VALUES +( 1, 'test one' ), +( 2, 'test two' ), +( 3, 'test three' ), +( 4, 'test four' ), +( 5, 'test five' ), +( 6, 'test delta1' ), +( 7, 'test delta2' ), +( 8, 'test delta3' ) + + +SetFilter ( "@id", array(1,2,3,4) ); +$client->AddQuery ( "test", "idx_main idx_delta1 idx_delta2 idx_delta3" ); +$client->ResetFilters (); +$client->SetFilter ( "@id", array(5,6,7,8) ); +$client->AddQuery ( "test", "idx_main idx_delta1 idx_delta2 idx_delta3" ); +$client->ResetFilters (); +$client->SetFilter ( "@id", array(1,2,3,4,5,6,7,8), "idx_main idx_delta1 idx_delta2 idx_delta3" ); +$client->SetSortMode ( SPH_SORT_EXTENDED, "@id DESC" ); +$client->AddQuery ( "test" ); +$results = $client->RunQueries (); + +if ( is_array($results) ) + for ( $i=0; $i + + diff --git a/coreseek/csft-4.1/test/test_046/model.bin b/coreseek/csft-4.1/test/test_046/model.bin new file mode 100755 index 0000000..ec3961c --- /dev/null +++ b/coreseek/csft-4.1/test/test_046/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:4:{i:0;s:6:"VALUES";i:1;a:12:{i:0;s:2:"OK";i:7;s:2:"OK";i:15;s:2:"OK";i:21;s:2:"OK";s:8:"3, 8, 16";s:2:"OK";s:9:"7, 18, 21";s:2:"OK";i:6;s:2:"OK";i:12;s:2:"OK";i:20;s:2:"OK";s:5:"5, 12";s:2:"OK";s:5:"7, 17";s:2:"OK";s:6:"15, 20";s:2:"OK";}i:2;s:8:"INTERVAL";i:3;a:19:{s:5:"1 - 4";s:2:"OK";s:5:"1 - 5";s:2:"OK";s:5:"1 - 6";s:2:"OK";s:5:"1 - 7";s:2:"OK";s:6:"1 - 12";s:2:"OK";s:6:"1 - 15";s:2:"OK";s:5:"6 - 9";s:2:"OK";s:5:"7 - 9";s:2:"OK";s:6:"8 - 10";s:2:"OK";s:6:"9 - 12";s:2:"OK";s:6:"9 - 15";s:2:"OK";s:6:"9 - 21";s:2:"OK";s:7:"16 - 21";s:2:"OK";s:7:"17 - 21";s:2:"OK";s:7:"18 - 19";s:2:"OK";s:7:"18 - 25";s:2:"OK";s:7:"19 - 25";s:2:"OK";s:7:"20 - 25";s:2:"OK";s:7:"21 - 25";s:2:"OK";}}}i:1;a:1:{i:0;a:4:{i:0;s:6:"VALUES";i:1;a:12:{i:0;s:2:"OK";i:7;s:2:"OK";i:15;s:2:"OK";i:21;s:2:"OK";s:8:"3, 8, 16";s:2:"OK";s:9:"7, 18, 21";s:2:"OK";i:6;s:2:"OK";i:12;s:2:"OK";i:20;s:2:"OK";s:5:"5, 12";s:2:"OK";s:5:"7, 17";s:2:"OK";s:6:"15, 20";s:2:"OK";}i:2;s:8:"INTERVAL";i:3;a:19:{s:5:"1 - 4";s:2:"OK";s:5:"1 - 5";s:2:"OK";s:5:"1 - 6";s:2:"OK";s:5:"1 - 7";s:2:"OK";s:6:"1 - 12";s:2:"OK";s:6:"1 - 15";s:2:"OK";s:5:"6 - 9";s:2:"OK";s:5:"7 - 9";s:2:"OK";s:6:"8 - 10";s:2:"OK";s:6:"9 - 12";s:2:"OK";s:6:"9 - 15";s:2:"OK";s:6:"9 - 21";s:2:"OK";s:7:"16 - 21";s:2:"OK";s:7:"17 - 21";s:2:"OK";s:7:"18 - 19";s:2:"OK";s:7:"18 - 25";s:2:"OK";s:7:"19 - 25";s:2:"OK";s:7:"20 - 25";s:2:"OK";s:7:"21 - 25";s:2:"OK";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_046/test.xml b/coreseek/csft-4.1/test/test_046/test.xml new file mode 100755 index 0000000..9b984cb --- /dev/null +++ b/coreseek/csft-4.1/test/test_046/test.xml @@ -0,0 +1,151 @@ + + + +mva filtering + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + + sql_query = SELECT id, text, mva FROM test_table; + + sql_attr_multi = uint mva from field + sql_attr_multi = bigint mva from field + +} + +index test +{ + source = test + path = /test +} + + + +CREATE TABLE test_table +( + id INTEGER NOT NULL, + text VARCHAR(255) NOT NULL DEFAULT 'text', + mva VARCHAR(255) NOT NULL +) + + + +DROP TABLE IF EXISTS test_table + + + +INSERT INTO test_table (id, mva) VALUES + ( 10, '' ), + ( 1, '100' ), + ( 2, '100, 200' ), + ( 4, '6, 12, 17, 20') + + +ResetFilters(); + $client->SetFilter ( 'mva', $mva ); + $result = $client->Query ( '' ); + if ( !$result ) + break; + + $len = array_key_exists ( 'matches', $result ) ? count ( $result['matches'] ) : 0; + $pass = $len == $filter[$last] ? 1 : 0; + if ( $len == 1) + $pass = $pass and array_key_exists ( $ID, $result['matches'] ); + $results [$key] [ join(', ', $mva ) ] = $pass ? 'OK' : 'FAILED'; + +} + +// interval +$results [] = 'INTERVAL'; +$results [] = array(); +$filters = array( + array( 1, 4, false), + array( 1, 5, false), + array( 1, 6, true), + array( 1, 7, true), + array( 1, 12, true), + array( 1, 15, true), + + array( 6, 9, true), + array( 7, 9, false), + array( 8, 10, false), + array( 9, 12, true), + array( 9, 15, true), + array( 9, 21, true), + array( 16, 21, true), + array( 17, 21, true), + array( 18, 19, false), + + array( 18, 25, true), + array( 19, 25, true), + array( 20, 25, true), + + array( 21, 25, false), +); + +$key = count($results) - 1; +foreach ( $filters as &$filter ) +{ + $client->ResetFilters(); + $client->SetFilterRange ( 'mva', $filter[0], $filter[1] ); + $result = $client->Query ( '' ); + if ( !$result ) + break; + + $len = array_key_exists ( 'matches', $result ) ? count ( $result['matches'] ) : 0; + $pass = $len == ( $filter[2] ? 1 : 0 ); + if ( $len == 1) + $pass = $pass and array_key_exists ( $ID, $result['matches'] ); + $results [$key] [$filter[0] . ' - ' . $filter[1]] = $pass ? 'OK' : 'FAILED'; +} + +]]> + + diff --git a/coreseek/csft-4.1/test/test_047/model.bin b/coreseek/csft-4.1/test/test_047/model.bin new file mode 100755 index 0000000..f526995 --- /dev/null +++ b/coreseek/csft-4.1/test/test_047/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:8:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"n";i:1;}s:7:"matches";a:2:{s:11:"50000000000";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:11:"50000000001";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"five";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"five";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"n";i:1;}s:7:"matches";a:2:{s:20:"18446744073709551613";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:20:"18446744073709551614";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"last";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"last";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"n";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"max";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"max";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"n";i:1;}s:7:"matches";a:3:{s:19:"9223372036854775806";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:19:"9223372036854775807";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:19:"9223372036854775808";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"mid";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"mid";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"n";i:1;}s:7:"matches";a:3:{s:11:"50000000000";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:11:"50000000001";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:11:"60000000000";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"n";i:1;}s:7:"matches";a:5:{s:19:"9223372036854775806";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:19:"9223372036854775807";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:19:"9223372036854775808";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:20:"18446744073709551613";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}s:20:"18446744073709551614";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"n";i:1;}s:7:"matches";a:1:{s:19:"9223372036854775808";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"n";s:2:"42";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:1:"n";i:1;s:3:"sel";i:6;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:9:{s:19:"9223372036854775807";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";s:19:"9223372036854775807";s:8:"@groupby";s:19:"9223372036854775807";s:6:"@count";s:1:"1";}}s:19:"9223372036854775806";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";s:19:"9223372036854775806";s:8:"@groupby";s:19:"9223372036854775806";s:6:"@count";s:1:"1";}}s:11:"60000000001";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";s:11:"60000000001";s:8:"@groupby";s:11:"60000000001";s:6:"@count";s:1:"1";}}s:11:"60000000000";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";s:11:"60000000000";s:8:"@groupby";s:11:"60000000000";s:6:"@count";s:1:"1";}}s:11:"50000000001";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";s:11:"50000000001";s:8:"@groupby";s:11:"50000000001";s:6:"@count";s:1:"1";}}s:11:"50000000000";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";s:11:"50000000000";s:8:"@groupby";s:11:"50000000000";s:6:"@count";s:1:"1";}}s:20:"18446744073709551614";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";i:-2;s:8:"@groupby";i:-2;s:6:"@count";s:1:"1";}}s:20:"18446744073709551613";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";i:-3;s:8:"@groupby";i:-3;s:6:"@count";s:1:"1";}}s:19:"9223372036854775808";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"n";s:2:"42";s:3:"sel";s:20:"-9223372036854775808";s:8:"@groupby";s:20:"-9223372036854775808";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"9";s:11:"total_found";s:1:"9";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_047/test.xml b/coreseek/csft-4.1/test/test_047/test.xml new file mode 100755 index 0000000..4dba9b4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_047/test.xml @@ -0,0 +1,87 @@ + + + +id64 + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + + sql_query = SELECT id, n, text FROM test_table; + sql_attr_uint = n +} + +index test +{ + source = test + path = /test + docinfo = extern +} + + + +CREATE TABLE test_table +( + id BIGINT UNSIGNED NOT NULL, + n INT NOT NULL DEFAULT 42, + text VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (id, text) VALUES + ( 50000000000, 'five' ), + ( 50000000000, 'dup' ), + ( 50000000001, 'five+1' ), + ( 60000000000, 'six' ), + ( 60000000001, 'six+1' ), + ( 9223372036854775806, 'mid -1' ), + ( 9223372036854775807, 'mid' ), + ( 9223372036854775808, 'mid +1' ), + ( 18446744073709551613, 'last' ), + ( 18446744073709551614, 'last' ), + ( 18446744073709551615, 'max (wont make it)' ); + + + + sel + @groupby + @count + + + + five + last + max + mid + + + + + + + + + + + diff --git a/coreseek/csft-4.1/test/test_048/model.bin b/coreseek/csft-4.1/test/test_048/model.bin new file mode 100755 index 0000000..ebf69ed --- /dev/null +++ b/coreseek/csft-4.1/test/test_048/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:10:"date_added";i:2;}s:7:"matches";a:6:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:2:"30";s:10:"date_added";s:10:"1222819200";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:2:"20";s:10:"date_added";s:10:"1222819200";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:2:"10";s:10:"date_added";s:10:"1222819200";}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:10:"date_added";s:10:"1191369600";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:10:"date_added";s:10:"1191283200";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:10:"date_added";s:10:"1191196800";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"6";}}s:5:"query";s:4:"text";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:10:"date_added";i:2;}s:7:"matches";a:6:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:2:"30";s:10:"date_added";s:10:"1222819200";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:2:"20";s:10:"date_added";s:10:"1222819200";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:2:"10";s:10:"date_added";s:10:"1222819200";}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:10:"date_added";s:10:"1191369600";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:10:"date_added";s:10:"1191283200";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:10:"date_added";s:10:"1191196800";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"6";}}s:5:"query";s:4:"text";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_048/test.xml b/coreseek/csft-4.1/test/test_048/test.xml new file mode 100755 index 0000000..f5aa797 --- /dev/null +++ b/coreseek/csft-4.1/test/test_048/test.xml @@ -0,0 +1,72 @@ + + + +@custom sorting + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + + sql_query_pre = SET time_zone='+0:00' + sql_query = SELECT id, group_id, UNIX_TIMESTAMP(date_added) as date_added, text FROM test_table + + sql_attr_uint = group_id + sql_attr_timestamp = date_added +} + +index test +{ + source = test + path = /test + docinfo = extern +} + + + +create table test_table +( + id int not null key auto_increment, + group_id int not null, + date_added date not null, + text varchar(255) not null default 'text' +); + + + +drop table if exists test_table; + + + + +insert into test_table (group_id, date_added) values +( 10, '2008-10-01' ), +( 20, '2008-10-01' ), +( 30, '2008-10-01' ), +( 1, '2007-10-01' ), +( 1, '2007-10-02' ), +( 1, '2007-10-03' ); + + + + group_id + date_added + + + + text + text + + + diff --git a/coreseek/csft-4.1/test/test_049/model.bin b/coreseek/csft-4.1/test/test_049/model.bin new file mode 100755 index 0000000..c06ab87 --- /dev/null +++ b/coreseek/csft-4.1/test/test_049/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:15:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"b";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"1";s:1:"b";s:2:"21";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"2";s:1:"b";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"3";s:1:"b";s:2:"23";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"4";s:1:"b";s:2:"24";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"b";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"b";i:1;s:1:"a";i:1;s:1:"c";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"201";s:1:"a";s:3:"101";s:1:"c";s:1:"0";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"202";s:1:"a";s:3:"102";s:1:"c";s:1:"0";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"212";s:1:"a";s:3:"112";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"101";s:1:"b";s:3:"201";s:1:"c";s:1:"0";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"102";s:1:"b";s:3:"202";s:1:"c";s:1:"0";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"112";s:1:"b";s:3:"212";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"b";i:1;s:1:"a";i:1;s:1:"c";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"212";s:1:"a";s:3:"112";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"a";i:1073741825;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"a";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"a";a:1:{i:0;s:1:"4";}}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"a";a:2:{i:0;s:1:"5";i:1;s:1:"6";}}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.006";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.006";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:3:"101";s:5:"attrs";a:3:{s:1:"a";s:3:"101";s:1:"b";s:3:"201";s:1:"c";s:1:"0";}}i:2;a:2:{s:6:"weight";s:3:"101";s:5:"attrs";a:3:{s:1:"a";s:3:"102";s:1:"b";s:3:"202";s:1:"c";s:1:"0";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:12;a:2:{s:6:"weight";s:3:"100";s:5:"attrs";a:3:{s:1:"a";s:3:"112";s:1:"b";s:3:"212";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"b";i:1;s:1:"a";i:1;s:1:"c";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:3:"101";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:2;a:2:{s:6:"weight";s:3:"101";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:3;a:2:{s:6:"weight";s:3:"100";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:3:"100";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"212";s:1:"a";s:3:"112";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}}i:1;a:15:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"3";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"b";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"1";s:1:"b";s:2:"21";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"2";s:1:"b";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"3";s:1:"b";s:2:"23";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"4";s:1:"b";s:2:"24";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"b";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"8";s:4:"hits";s:1:"8";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"b";i:1;s:1:"a";i:1;s:1:"c";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"201";s:1:"a";s:3:"101";s:1:"c";s:1:"0";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"202";s:1:"a";s:3:"102";s:1:"c";s:1:"0";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"212";s:1:"a";s:3:"112";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"101";s:1:"b";s:3:"201";s:1:"c";s:1:"0";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"102";s:1:"b";s:3:"202";s:1:"c";s:1:"0";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"112";s:1:"b";s:3:"212";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"b";i:1;s:1:"a";i:1;s:1:"c";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"212";s:1:"a";s:3:"112";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:1:"a";i:1073741825;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"a";a:3:{i:0;s:1:"1";i:1;s:1:"2";i:2;s:1:"3";}}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"a";a:1:{i:0;s:1:"4";}}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:1:"a";a:2:{i:0;s:1:"5";i:1;s:1:"6";}}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.006";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:2:"11";s:4:"hits";s:2:"11";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"b";i:1;s:1:"c";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:3:"101";s:5:"attrs";a:3:{s:1:"a";s:3:"101";s:1:"b";s:3:"201";s:1:"c";s:1:"0";}}i:2;a:2:{s:6:"weight";s:3:"101";s:5:"attrs";a:3:{s:1:"a";s:3:"102";s:1:"b";s:3:"202";s:1:"c";s:1:"0";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"b";s:2:"20";s:1:"c";s:1:"1";}}i:12;a:2:{s:6:"weight";s:3:"100";s:5:"attrs";a:3:{s:1:"a";s:3:"112";s:1:"b";s:3:"212";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"b";i:1;s:1:"a";i:1;s:1:"c";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:3:"101";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:2;a:2:{s:6:"weight";s:3:"101";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:3;a:2:{s:6:"weight";s:3:"100";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:4;a:2:{s:6:"weight";s:3:"100";s:5:"attrs";a:3:{s:1:"b";s:2:"20";s:1:"a";s:2:"10";s:1:"c";s:1:"1";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"b";s:3:"212";s:1:"a";s:3:"112";s:1:"c";s:1:"0";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"text";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_049/test.xml b/coreseek/csft-4.1/test/test_049/test.xml new file mode 100755 index 0000000..3446491 --- /dev/null +++ b/coreseek/csft-4.1/test/test_049/test.xml @@ -0,0 +1,176 @@ + +multi-index queries vs index weights + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src_a +{ + type = mysql + + + sql_query = SELECT id, a, b, c, text FROM test_table WHERE idx = 'a'; + + sql_attr_uint = a + sql_attr_uint = b + sql_attr_uint = c:1 +} + +source src_delta +{ + type = mysql + + + sql_query = SELECT id, b, a, c, text FROM test_table WHERE idx = 'delta'; + + sql_attr_uint = a + sql_attr_uint = b + sql_attr_uint = c:1 +} + +source src_a2 +{ + type = mysql + + + sql_query = SELECT id, a, b, c, text FROM test_table WHERE idx = 'a'; + + sql_attr_uint = a + sql_attr_uint = b + sql_attr_uint = c:2 +} + +source src_b +{ + type = mysql + + + sql_query = SELECT id, a, b, text FROM test_table WHERE idx = 'b'; + + sql_attr_uint = a + sql_attr_uint = b +} + +source src_c +{ + type = mysql + + + sql_query = SELECT id, mva as a, text FROM test_table WHERE idx = 'c'; + + sql_attr_multi = uint a from field + sql_attr_multi = bigint a from field + +} + +index a +{ + source = src_a + path = /a +} + +index delta +{ + source = src_delta + path = /delta +} + +index a2 +{ + source = src_a2 + path = /a2 +} + +index b +{ + source = src_b + path = /b +} + +index c +{ + source = src_c + path = /c +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + a INT NOT NULL, + b INT NOT NULL, + c INT NOT NULL, + mva VARCHAR(255) NOT NULL, + text VARCHAR(255) NOT NULL DEFAULT 'text', + idx VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (id, a, b, c, mva, idx) VALUES +( 1, 10, 20, 3, '', 'a' ), +( 2, 10, 20, 3, '', 'a' ), +( 3, 10, 20, 3, '', 'a' ), +( 4, 10, 20, 3, '', 'a' ), + +( 1, 1, 21, 3, '', 'b' ), +( 2, 2, 22, 3, '', 'b' ), +( 3, 3, 23, 3, '', 'b' ), +( 4, 4, 24, 3, '', 'b' ), + +( 1, 0, 0, 0, '1, 2, 3', 'c' ), +( 3, 0, 0, 0, '4', 'c' ), +( 10, 0, 0, 0, '5, 6', 'c' ), + +( 1, 101, 201, 0, 5, 'delta' ), +( 2, 102, 202, 0, 5, 'delta' ), +( 12, 112, 212, 0, 5, 'delta' ); + + + + a + b + c + + + + text + text + + text + text + + text + text + + text + text + text + + text + text + text + text + + text + text + + + + + diff --git a/coreseek/csft-4.1/test/test_050/model.bin b/coreseek/csft-4.1/test/test_050/model.bin new file mode 100755 index 0000000..5d4a064 --- /dev/null +++ b/coreseek/csft-4.1/test/test_050/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:14:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"n";i:6;}s:7:"matches";a:13:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"20";s:1:"n";s:12:"-60000000000";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"30";s:1:"n";s:12:"-50000000000";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"40";s:1:"n";s:11:"50000000000";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"50";s:1:"n";s:11:"60000000000";}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"60";s:1:"n";s:11:"70000000000";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"70";s:1:"n";s:20:"-4611686018427387903";}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"80";s:1:"n";s:20:"-9223372036854775807";}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"90";s:1:"n";s:19:"4611686018427387903";}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:3:"100";s:1:"n";s:19:"9223372036854775807";}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:3:"110";s:1:"n";s:18:"250000000000000000";}}i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"0";s:1:"n";i:-1;}}i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"0";s:1:"n";i:-2;}}}s:5:"total";s:2:"13";s:11:"total_found";s:2:"13";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"n";i:6;s:5:"@expr";i:5;}s:7:"matches";a:13:{i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"80";s:1:"n";s:20:"-9223372036854775807";s:5:"@expr";d:9223372036854775808;}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"70";s:1:"n";s:20:"-4611686018427387903";s:5:"@expr";d:4611686018427387904;}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";s:5:"@expr";d:70000001024;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"20";s:1:"n";s:12:"-60000000000";s:5:"@expr";d:60000002048;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"30";s:1:"n";s:12:"-50000000000";s:5:"@expr";d:49999998976;}}i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:1:"0";s:1:"n";i:-2;s:5:"@expr";d:2;}}i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:1:"0";s:1:"n";i:-1;s:5:"@expr";d:1;}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"40";s:1:"n";s:11:"50000000000";s:5:"@expr";d:-49999998976;}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"50";s:1:"n";s:11:"60000000000";s:5:"@expr";d:-60000002048;}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"60";s:1:"n";s:11:"70000000000";s:5:"@expr";d:-70000001024;}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"110";s:1:"n";s:18:"250000000000000000";s:5:"@expr";d:-249999996076687360;}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"90";s:1:"n";s:19:"4611686018427387903";s:5:"@expr";d:-4611686018427387904;}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"100";s:1:"n";s:19:"9223372036854775807";s:5:"@expr";d:-9223372036854775808;}}}s:5:"total";s:2:"13";s:11:"total_found";s:2:"13";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:2;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"n";i:6;s:3:"sel";i:6;}s:7:"matches";a:13:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";s:3:"sel";s:12:"-69999999990";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"20";s:1:"n";s:12:"-60000000000";s:3:"sel";s:12:"-59999999980";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"30";s:1:"n";s:12:"-50000000000";s:3:"sel";s:12:"-49999999970";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"40";s:1:"n";s:11:"50000000000";s:3:"sel";s:11:"50000000040";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"50";s:1:"n";s:11:"60000000000";s:3:"sel";s:11:"60000000050";}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"60";s:1:"n";s:11:"70000000000";s:3:"sel";s:11:"70000000060";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"70";s:1:"n";s:20:"-4611686018427387903";s:3:"sel";s:20:"-4611686018427387833";}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"80";s:1:"n";s:20:"-9223372036854775807";s:3:"sel";s:20:"-9223372036854775727";}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"90";s:1:"n";s:19:"4611686018427387903";s:3:"sel";s:19:"4611686018427387993";}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"100";s:1:"n";s:19:"9223372036854775807";s:3:"sel";s:20:"-9223372036854775709";}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"110";s:1:"n";s:18:"250000000000000000";s:3:"sel";s:18:"250000000000000110";}}i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:1:"0";s:1:"n";i:-1;s:3:"sel";i:-1;}}i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:1:"0";s:1:"n";i:-2;s:3:"sel";i:-2;}}}s:5:"total";s:2:"13";s:11:"total_found";s:2:"13";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:3;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:1:"a";i:1;s:1:"n";i:6;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:13:{i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:3:"100";s:1:"n";s:19:"9223372036854775807";s:8:"@groupby";s:19:"9223372036854775807";s:6:"@count";s:1:"1";}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"90";s:1:"n";s:19:"4611686018427387903";s:8:"@groupby";s:19:"4611686018427387903";s:6:"@count";s:1:"1";}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:3:"110";s:1:"n";s:18:"250000000000000000";s:8:"@groupby";s:18:"250000000000000000";s:6:"@count";s:1:"1";}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"60";s:1:"n";s:11:"70000000000";s:8:"@groupby";s:11:"70000000000";s:6:"@count";s:1:"1";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"50";s:1:"n";s:11:"60000000000";s:8:"@groupby";s:11:"60000000000";s:6:"@count";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"40";s:1:"n";s:11:"50000000000";s:8:"@groupby";s:11:"50000000000";s:6:"@count";s:1:"1";}}i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:1:"0";s:1:"n";i:-1;s:8:"@groupby";i:-1;s:6:"@count";s:1:"1";}}i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:1:"0";s:1:"n";i:-2;s:8:"@groupby";i:-2;s:6:"@count";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"30";s:1:"n";s:12:"-50000000000";s:8:"@groupby";s:12:"-50000000000";s:6:"@count";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"20";s:1:"n";s:12:"-60000000000";s:8:"@groupby";s:12:"-60000000000";s:6:"@count";s:1:"1";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";s:8:"@groupby";s:12:"-70000000000";s:6:"@count";s:1:"1";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"70";s:1:"n";s:20:"-4611686018427387903";s:8:"@groupby";s:20:"-4611686018427387903";s:6:"@count";s:1:"1";}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"a";s:2:"80";s:1:"n";s:20:"-9223372036854775807";s:8:"@groupby";s:20:"-9223372036854775807";s:6:"@count";s:1:"1";}}}s:5:"total";s:2:"13";s:11:"total_found";s:2:"13";s:4:"time";s:5:"0.001";s:5:"query";s:0:"";}i:4;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:5:{s:1:"a";i:1;s:1:"n";i:6;s:3:"sel";i:6;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:8:{i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"80";s:1:"n";s:20:"-9223372036854775807";s:3:"sel";s:19:"9223372036854775807";s:8:"@groupby";s:19:"9223372036854775807";s:6:"@count";s:1:"2";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"70";s:1:"n";s:20:"-4611686018427387903";s:3:"sel";s:19:"4611686018427387903";s:8:"@groupby";s:19:"4611686018427387903";s:6:"@count";s:1:"2";}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:3:"110";s:1:"n";s:18:"250000000000000000";s:3:"sel";s:18:"250000000000000000";s:8:"@groupby";s:18:"250000000000000000";s:6:"@count";s:1:"1";}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";s:3:"sel";s:11:"70000000000";s:8:"@groupby";s:11:"70000000000";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"20";s:1:"n";s:12:"-60000000000";s:3:"sel";s:11:"60000000000";s:8:"@groupby";s:11:"60000000000";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"30";s:1:"n";s:12:"-50000000000";s:3:"sel";s:11:"50000000000";s:8:"@groupby";s:11:"50000000000";s:6:"@count";s:1:"2";}}i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:1:"0";s:1:"n";i:-2;s:3:"sel";i:2;s:8:"@groupby";i:2;s:6:"@count";s:1:"1";}}i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:1:"0";s:1:"n";i:-1;s:3:"sel";i:1;s:8:"@groupby";i:1;s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.001";s:5:"query";s:0:"";}i:5;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:5:{s:1:"a";i:1;s:1:"n";i:6;s:3:"sel";i:6;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";s:3:"sel";i:7;s:8:"@groupby";i:7;s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"20";s:1:"n";s:12:"-60000000000";s:3:"sel";i:6;s:8:"@groupby";i:6;s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"30";s:1:"n";s:12:"-50000000000";s:3:"sel";i:5;s:8:"@groupby";i:5;s:6:"@count";s:1:"2";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"query";s:0:"";}i:6;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:5:{s:1:"a";i:1;s:1:"n";i:6;s:3:"sel";i:6;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";s:3:"sel";i:7;s:8:"@groupby";i:7;s:6:"@count";s:1:"6";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"query";s:0:"";}i:7;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"a";i:1;s:1:"n";i:6;s:3:"sel";i:6;}s:7:"matches";a:13:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";s:3:"sel";s:12:"-70000000000";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"20";s:1:"n";s:12:"-60000000000";s:3:"sel";s:12:"-60000000000";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"30";s:1:"n";s:12:"-50000000000";s:3:"sel";s:12:"-50000000000";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"40";s:1:"n";s:11:"50000000000";s:3:"sel";i:40;}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"50";s:1:"n";s:11:"60000000000";s:3:"sel";i:50;}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"60";s:1:"n";s:11:"70000000000";s:3:"sel";i:60;}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"70";s:1:"n";s:20:"-4611686018427387903";s:3:"sel";s:20:"-4611686018427387903";}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"80";s:1:"n";s:20:"-9223372036854775807";s:3:"sel";s:20:"-9223372036854775807";}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:2:"90";s:1:"n";s:19:"4611686018427387903";s:3:"sel";i:90;}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"100";s:1:"n";s:19:"9223372036854775807";s:3:"sel";i:100;}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:3:"110";s:1:"n";s:18:"250000000000000000";s:3:"sel";i:110;}}i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:1:"0";s:1:"n";i:-1;s:3:"sel";i:-1;}}i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"a";s:1:"0";s:1:"n";i:-2;s:3:"sel";i:-2;}}}s:5:"total";s:2:"13";s:11:"total_found";s:2:"13";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:8;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"n";i:6;}s:7:"matches";a:1:{i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"0";s:1:"n";i:-1;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:9;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"n";i:6;}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"70";s:1:"n";s:20:"-4611686018427387903";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:10;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"n";i:6;}s:7:"matches";a:1:{i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"90";s:1:"n";s:19:"4611686018427387903";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:11;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"n";i:6;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"10";s:1:"n";s:12:"-70000000000";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"20";s:1:"n";s:12:"-60000000000";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"30";s:1:"n";s:12:"-50000000000";}}i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"0";s:1:"n";i:-1;}}i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:1:"0";s:1:"n";i:-2;}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:12;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"n";i:6;}s:7:"matches";a:3:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"40";s:1:"n";s:11:"50000000000";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"50";s:1:"n";s:11:"60000000000";}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"60";s:1:"n";s:11:"70000000000";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:13;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"a";i:1;s:1:"n";i:6;}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"a";s:2:"70";s:1:"n";s:20:"-4611686018427387903";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_050/test.xml b/coreseek/csft-4.1/test/test_050/test.xml new file mode 100755 index 0000000..5d62ae9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_050/test.xml @@ -0,0 +1,100 @@ + +bigint attrs + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + + sql_query = SELECT id, a, n, text FROM test_table; + + sql_attr_uint = a + sql_attr_bigint = n +} + +index test +{ + source = test + path = /test +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + a INT UNSIGNED NOT NULL, + n BIGINT NOT NULL, + text VARCHAR(255) NOT NULL DEFAULT 'text' +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (id, a, n) VALUES +( 1, 10, -70000000000 ), +( 2, 20, -60000000000 ), +( 3, 30, -50000000000 ), +( 4, 40, 50000000000 ), +( 5, 50, 60000000000 ), +( 6, 60, 70000000000 ), +( 7, 70, -4611686018427387903 ), +( 8, 80, -9223372036854775807 ), +( 9, 90, 4611686018427387903 ), +( 10, 100, 9223372036854775807 ), +( 11, 110, 250000000000000000 ), +( 101, 0, -1 ), +( 102, 0, -2 ); + + + + a + n + sel + @groupby + @count + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/test/test_051/model.bin b/coreseek/csft-4.1/test/test_051/model.bin new file mode 100755 index 0000000..ecf7ff0 --- /dev/null +++ b/coreseek/csft-4.1/test/test_051/model.bin @@ -0,0 +1,9 @@ +a:1:{i:0;a:1:{i:0;a:30:{i:0;s:15:"cajuput invalid";i:1;a:1:{i:0;s:244:" ... + whirligig INVALID + + three pilotfish promontory CAJUPUT INVALID CAJUPUT INVALID EXPOSITOR + whirligig felspar disposition pilotfish ... humanism detestable promontory comforter + chubby CAJUPUT INVALID humanism CAJUPUT";}i:2;s:25:"cajuput invalid expositor";i:3;a:1:{i:0;s:136:" ... + + three pilotfish promontory CAJUPUT INVALID CAJUPUT INVALID EXPOSITOR + whirligig felspar disposition pilotfish chubby ... ";}i:4;s:41:""University and Harvard Law School" obama";i:5;a:1:{i:0;s:181:" ... Honolulu, Hawaii, Obama is a ... of Columbia University and Harvard Law School, where he ... to 2004.Obama served three ... ";}i:6;s:17:""the doggy house"";i:7;a:1:{i:0;s:68:" ... doggy house. The doggy house is most ... ";}i:8;s:15:"the doggy house";i:9;a:1:{i:0;s:126:" ... large house. Its a doggy house. The doggy house is most doggy here ... ";}i:10;s:15:"the doggy house";i:11;a:1:{i:0;s:62:" ... a doggy house. The doggy house is most doggy ... ";}i:12;s:15:"the doggy house";i:13;a:1:{i:0;s:48:" ... house. The doggy house is most ... ";}i:14;s:7:"is most";i:15;a:1:{i:0;s:73:" ... house is most doggy ... . There is no any ... ";}i:16;s:8:"is house";i:17;a:1:{i:0;s:253:"This is<1 ends> a large house<2 ends>. Its a doggy house<3 ends>. The doggy house<4 ends> is<5 ends> most doggy here. There is<6 ends> no any doggy house<7 ends> around.";}i:18;s:8:"is house";i:19;a:1:{i:0;s:140:" ... doggy 1000 !-! house !-! 1000. The doggy 1001 !-! house !-! 1001 1002 !-! is !-! 1002 most doggy here. There 1003 !-! is !-! 1003 ... ";}i:20;s:8:"is house";i:21;a:1:{i:0;s:116:" ... doggy house. The doggy house is most doggy here. There is ... ";}i:22;s:8:"is house";i:23;a:1:{i:0;s:116:" ... doggy house. The doggy house is most doggy here. There is ... ";}i:24;s:52:"crash on exact words and 2 documents with '=' symbol";i:25;a:2:{i:0;s:15:"=welcome";i:1;s:15:"=welcome";}i:26;s:24:"exact-blened: plain path";i:27;a:1:{i:0;s:32:" ... (12b-1) fees";}i:28;s:23:"exact-blened: fast path";i:29;a:1:{i:0;s:44:"Distribution and Service (12b-1) fees";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_051/test.xml b/coreseek/csft-4.1/test/test_051/test.xml new file mode 100755 index 0000000..c739a24 --- /dev/null +++ b/coreseek/csft-4.1/test/test_051/test.xml @@ -0,0 +1,147 @@ + + + +snippets vs exact_phrase + snippets vs passage duplication + + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index idx +{ + source = src + path = /test +} + +index exact +{ + source = src + path = /exact + morphology = stem_en + index_exact_words = 1 + blend_chars = (, ), - + blend_mode = trim_none, trim_head, trim_tail, trim_both, skip_pure +} + + +select 1; + +BuildExcerpts ( array($text), 'idx', $query, array('exact_phrase' => true) ); + $results [] = $query; + $results [] = $reply; +} + +$text = 'A native of Honolulu, Hawaii, Obama is a graduate of Columbia University and Harvard Law School, where he waas the president of the Harvard Law Review. He was a community organizer in Chicago before earning his law degree. He worrked as a civil rights attorney in Chicago and taught constitutional law at the University of Chicago Law School from 19992 to 2004.Obama served three terms in the Illinois Senate from 1997 to 2004.'; +$query = '"University and Harvard Law School" obama'; +$reply = $client->BuildExcerpts ( array($text), 'idx', $query ,array('query_mode'=>true, 'around'=>2) ); +$results [] = $query; +$results [] = $reply; + +$text = 'This is a large house. Its a doggy house. The doggy house is most doggy here. There is no any doggy house around.'; +$query = '"the doggy house"'; +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, + array('query_mode'=>true, 'around'=> 2, 'weight_order'=>true, 'limit_words'=>20) ); +$results [] = $query; +$results [] = $reply; + +$query = 'the doggy house'; + +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, array( 'around'=> 3, 'limit'=>100, 'limit_passages'=>1 ) ); +$results [] = $query; +$results [] = $reply; + +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, array( 'around'=> 3, 'exact_phrase'=>true, 'limit'=>100, 'limit_passages'=>1 ) ); +$results [] = $query; +$results [] = $reply; + +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, array('around'=> 3, 'limit_words'=>6, 'exact_phrase'=>true) ); +$results [] = $query; +$results [] = $reply; + +$query = 'is most'; +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, array('around'=> 2, 'limit_words'=>4) ); +$results [] = $query; +$results [] = $reply; + +$query = 'is house'; +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, array('around'=> 2, 'before_match'=>'', 'after_match'=>'<%PASSAGE_ID% ends>') ); +$results [] = $query; +$results [] = $reply; + +$query = 'is house'; +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, array('around'=> 2, 'limit_words'=>10, 'before_match'=>'%PASSAGE_ID% !-! ', 'after_match'=>' !-! %PASSAGE_ID%', 'start_passage_id'=>1000) ); +$results [] = $query; +$results [] = $reply; + +$query = 'is house'; +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, array('around'=> 2, 'limit_words'=>10, 'before_match'=>'', 'after_match'=>'', 'start_passage_id'=>1000) ); +$results [] = $query; +$results [] = $reply; + +$query = 'is house'; +$reply = $client->BuildExcerpts ( array($text), 'idx', $query, array('around'=> 2, 'limit_words'=>10, 'before_match'=>'', 'after_match'=>'', 'start_passage_id'=>1000) ); +$results [] = $query; +$results [] = $reply; + +$query = '=welcome'; +$reply = $client->BuildExcerpts ( array('=welcome', '=welcome'), 'exact', $query, array('query_mode'=>1) ); +$results [] = "crash on exact words and 2 documents with '=' symbol"; +$results [] = $reply; + +$query = ' =\(12b\-1\) '; +$docs = array ( 'Distribution and Service (12b-1) fees' ); + +$opts =array ( 'query_mode'=>1, 'limit'=>15, 'around'=>2, 'allows_empty'=>1 ); +$reply = $client->BuildExcerpts ( $docs, 'exact', $query, $opts ); +$results [] = 'exact-blened: plain path'; +$results [] = $reply; + +$opts =array ( 'query_mode'=>1, 'limit'=>0, 'around'=>0, 'allows_empty'=>1 ); +$reply = $client->BuildExcerpts ( $docs, 'exact', $query, $opts ); +$results [] = 'exact-blened: fast path'; +$results [] = $reply; + + +]]> + + diff --git a/coreseek/csft-4.1/test/test_052/model.bin b/coreseek/csft-4.1/test/test_052/model.bin new file mode 100755 index 0000000..7460eb6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_052/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:28:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:" aaa << ccc ";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bbb";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" aaa << bbb << ccc ";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" aaa << ccc << ddd ";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:" ccc << ddd ";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2529";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"fff";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << eee << fff ";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2529";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << ddd << ggg ";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"xxx";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" ccc << ddd << xxx ";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" eee << ddd << ggg ";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"3549";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:" one << two << three ";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"2574";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1569";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:" one << three ";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"2574";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2569";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:" one << one << three ";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"3569";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1574";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:" one << one << one << three ";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1574";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.004";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:35:" one << one << one << one << three ";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"4537";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:" one << two << three << four ";}i:14;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << b << c << d ";}i:15;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:5:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << c << d << e ";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"3602";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:6:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"g";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:" "a b c" << e << f << g ";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"4540";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:5:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:" a << "b c d" << e ";}i:18;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.004";s:5:"words";a:6:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:" "a b c d" << "d e f" ";}i:19;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"4616";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.004";s:5:"words";a:7:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"g";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:" "a b c d" << "e f g" ";}i:20;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"1594";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"1521";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:5:"words";a:4:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ggg";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:34:" (ccc | "ddd eee") << (ddd | ggg) ";}i:21;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"ccc";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:" ccc << ddd$ ";}i:22;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"2546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:" ^one << two << three$ ";}i:23;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"5546";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"7";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:36:" ^one << "one one" << two << three$ ";}i:24;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1568";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bbb";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:" "zzz aaa"/1 << bbb ";}i:25;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:" "zzz aaa"/1 << ddd ";}i:26;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"3500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.004";s:5:"words";a:5:{s:2:"h1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h4";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"h5";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:72:" ("h1 h2" NEAR/5 ( h3 | h4 | h5) ) << ("h1 h2" NEAR/5 ( h3 | h4 | h5) ) ";}i:27;a:3:{s:8:"sphinxql";s:87:" select * from test2 where match ( ' hi | ( vi << mi )' ) and id in ( 10, 11, 12, 15 ) ";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1511";}i:1;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1511";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_052/test.xml b/coreseek/csft-4.1/test/test_052/test.xml new file mode 100755 index 0000000..2e5ddb9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_052/test.xml @@ -0,0 +1,124 @@ + +before operator + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT * FROM test_table where document_id in (1,2,3,4,5 ) +} + +index test +{ + source = test + path = /test + min_word_len = 1 +} + +source test1 +{ + type = mysql + + sql_query = SELECT * FROM test_table where document_id=6 +} + +index test1 +{ + source = test1 + path = /test1 +} + +source test2 +{ + type = mysql + + sql_query = SELECT * FROM test_table where document_id in ( 10, 11, 12, 13, 14, 15 ) +} + +index test2 +{ + source = test2 + path = /test2 +} + + + + +CREATE TABLE test_table +( + document_id INT NOT NULL, + title VARCHAR(255) NOT NULL, + text VARCHAR(4096) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table ( document_id, title, text ) VALUES +( 1, 'aaa bbb', 'ccc ddd' ), +( 2, 'xxx', 'ccc ddd eee fff ggg' ), +( 3, 'yyy', 'one one one two three' ), +( 4, 'zzz', 'one two three one three one two four one two three four' ), +( 5, '', 'a b c d e f g' ), +( 6, '', 'h1 h2 h3 h4 h5' ), +( 10, '', 'hi' ), +( 11, '', 'hi' ), +( 12, '', 'zi' ), +( 13, '', CONCAT(REPEAT('vi mi ', 530), ' vi mi hi' ) ), +( 14, '', 'vi mi' ), +( 15, '', 'lo' ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/test/test_053/model.bin b/coreseek/csft-4.1/test/test_053/model.bin new file mode 100755 index 0000000..214111d --- /dev/null +++ b/coreseek/csft-4.1/test/test_053/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:9:"group_id2";i:1;}s:7:"matches";a:6:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:9:"group_id2";s:1:"5";}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:9:"group_id2";s:1:"6";}}i:11;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:9:"group_id2";s:1:"5";}}i:12;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";s:1:"1";s:9:"group_id2";s:1:"6";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"2";s:9:"group_id2";s:1:"8";}}i:14;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";s:1:"2";s:9:"group_id2";s:1:"8";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_053/test.xml b/coreseek/csft-4.1/test/test_053/test.xml new file mode 100755 index 0000000..4fb1a3d --- /dev/null +++ b/coreseek/csft-4.1/test/test_053/test.xml @@ -0,0 +1,74 @@ + + + +legacy matching modes emulation + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest1 +{ + type = mysql + + + sql_query = SELECT document_id, group_id, group_id2, title, content FROM test_table + sql_attr_uint = group_id + sql_attr_uint = group_id2 +} + +source srctest2 : srctest1 +{ + sql_query = SELECT 10+document_id, group_id, group_id2, title, content FROM test_table +} + +index test1 +{ + source = srctest1 + path = /test1 + charset_type = utf-8 +} + +index test2 +{ + source = srctest2 + path = /test2 + charset_type = utf-8 +} + + + +test" + + + +CREATE TABLE test_table +( + document_id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, + group_id INTEGER NOT NULL, + group_id2 INTEGER NOT NULL, + title VARCHAR(255) NOT NULL, + content VARCHAR(255) NOT NULL +) + + + +DROP TABLE IF EXISTS test_table + + + +INSERT INTO test_table ( document_id, group_id, group_id2, title, content ) VALUES + ( 1, 1, 5, 'test one', 'this is my test document number one. also checking search within phrases.' ), + ( 2, 1, 6, 'test two', 'this is my test document number two' ), + ( 3, 2, 7, 'another doc', 'this is another group' ), + ( 4, 2, 8, 'doc number four', 'this is to test groups' ) + + + diff --git a/coreseek/csft-4.1/test/test_054/model.bin b/coreseek/csft-4.1/test/test_054/model.bin new file mode 100755 index 0000000..155848b --- /dev/null +++ b/coreseek/csft-4.1/test/test_054/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:11:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1571";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.151";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"heaven";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:""hello heaven"/1";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.004";s:5:"words";a:3:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"from";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"above";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:""hello from above"/2";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.005";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"foo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"bar";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""one two foo bar"/3";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.006";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bar";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""one two two bar"/3";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2595";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bar";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""one two two bar"/2";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.007";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"three";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""two two one three"/3";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.006";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"foo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""two two one foo"/3";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:90:"quorum threshold too high (words=2, thresh=2); replacing quorum operator with AND operator";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2670";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.012";s:5:"words";a:2:{s:2:"o*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"t*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""o* t*"/2";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:90:"quorum threshold too high (words=2, thresh=2); replacing quorum operator with AND operator";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.063";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"three";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""o* t*"/2";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2595";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.053";s:5:"words";a:3:{s:2:"h*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"w*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"f*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""h* w* f*"/2";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2571";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""h* w* f*"/2";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_054/test.xml b/coreseek/csft-4.1/test/test_054/test.xml new file mode 100755 index 0000000..75ea255 --- /dev/null +++ b/coreseek/csft-4.1/test/test_054/test.xml @@ -0,0 +1,84 @@ + +quorum + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = test + path = /test +} + +index test_crc +{ + source = test + path = /crc + + dict = crc + min_prefix_len = 1 + enable_star = 1 +} + +index test_kw +{ + source = test + path = /kw + + dict = keywords + min_prefix_len = 1 + enable_star = 1 +} + + + + +CREATE TABLE test_table +( + document_id INT NOT NULL, + text VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table ( document_id, text ) VALUES +( 1, 'hello world' ), +( 2, 'one two three four five' ); + + + + "hello heaven"/1 + "hello from above"/2 + "one two foo bar"/3 + "one two two bar"/3 + "one two two bar"/2 + "two two one three"/3 + "two two one foo"/3 + + + "o* t*"/2 + "o* t*"/2 + "h* w* f*"/2 + "h* w* f*"/2 + + + diff --git a/coreseek/csft-4.1/test/test_055/model.bin b/coreseek/csft-4.1/test/test_055/model.bin new file mode 100755 index 0000000..0172db5 --- /dev/null +++ b/coreseek/csft-4.1/test/test_055/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:4:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1690";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"^one two";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:9;a:2:{s:6:"weight";s:4:"2509";s:5:"attrs";a:0:{}}i:1001;a:2:{s:6:"weight";s:4:"2509";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"other";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:3:"642";s:4:"hits";s:3:"642";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"^other three";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:20:{i:9;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:17;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:18;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:19;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:20;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:21;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:22;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:23;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:24;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:25;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:26;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:27;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}i:28;a:2:{s:6:"weight";s:4:"1341";s:5:"attrs";a:0:{}}}s:5:"total";s:3:"641";s:11:"total_found";s:3:"641";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:5:"three";a:2:{s:4:"docs";s:3:"642";s:4:"hits";s:3:"642";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"three$";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2000;a:2:{s:6:"weight";s:4:"2998";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"badger";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:3:"602";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"^badger";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_055/test.xml b/coreseek/csft-4.1/test/test_055/test.xml new file mode 100755 index 0000000..fe6e008 --- /dev/null +++ b/coreseek/csft-4.1/test/test_055/test.xml @@ -0,0 +1,83 @@ + + + +position anchors + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test +} + + + +^one two +^other three +three$ +^badger + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `title` varchar(5120) NOT NULL default '', + `body` varchar(256) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, '', 'one' ), +( 2, '', 'one and two' ), +( 3, '', 'one but not the other one' ), +( 4, '', 'two and one' ), + +( 9, '', 'other three' ), +( 10, '', 'three' ), +( 11, '', 'three' ), +( 12, '', 'three' ), +( 13, '', 'three' ), +( 14, '', 'three' ), +( 15, '', 'three' ), +( 16, '', 'three' ), +( 17, '', 'three' ), +( 18, '', 'three' ), +( 19, '', 'three' ) + +INSERT INTO test_table SELECT document_id+10, title, body FROM test_table WHERE document_id>=10 +INSERT INTO test_table SELECT document_id+20, title, body FROM test_table WHERE document_id>=10 +INSERT INTO test_table SELECT document_id+40, title, body FROM test_table WHERE document_id>=10 +INSERT INTO test_table SELECT document_id+80, title, body FROM test_table WHERE document_id>=10 +INSERT INTO test_table SELECT document_id+160, title, body FROM test_table WHERE document_id>=10 +INSERT INTO test_table SELECT document_id+320, title, body FROM test_table WHERE document_id>=10 +INSERT INTO test_table VALUES ( 2000, REPEAT('badger ',600), 'badger badger mushroom' ) + +INSERT INTO `test_table` VALUES +( 1000, '', 'other' ), +( 1001, '', 'other three blind mice' ); + + + diff --git a/coreseek/csft-4.1/test/test_056/model.bin b/coreseek/csft-4.1/test/test_056/model.bin new file mode 100755 index 0000000..5c97002 --- /dev/null +++ b/coreseek/csft-4.1/test/test_056/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:4:{i:0;a:2:{i:0;s:53:"### Я шел по склону Фудзи.###";i:1;s:49:"Я шел по склону Фудзи.###";}i:1;a:1:{i:0;s:53:"### Я шел по склону Фудзи.###";}i:2;a:1:{i:0;s:53:"### Я шел по склону Фудзи.###";}i:3;a:1:{i:0;s:158:"### Я шел по склону Фудзи.### Мокрый склонился бамбук.### Шел не зная куда.###";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_056/test.xml b/coreseek/csft-4.1/test/test_056/test.xml new file mode 100755 index 0000000..a3258b2 --- /dev/null +++ b/coreseek/csft-4.1/test/test_056/test.xml @@ -0,0 +1,101 @@ + + + +snippets vs boundaries, utf-8 + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index index_utf8 +{ + source = test + path = /index_utf8 + + morphology = stem_enru + min_word_len = 3 + min_prefix_len = 0 + min_infix_len = 0 + + phrase_boundary = . + phrase_boundary_step = 100 + + charset_type = utf-8 +} + + +select 1; + +BuildExcerpts($docs, 'index_utf8', 'шел', $opts); + +// 2 + +$docs = array(); +$docs[0] = 'С другом в саду я сидел. Мокрый склонился бамбук. Я шел по склону Фудзи. Старую женщину я. Шел не зная куда. '; + +$opts = array(); +$opts['use_boundaries'] = true; +$opts['single_passage'] = false; +$opts['chunk_separator'] = '###'; +$opts['weight_order'] = false; +$opts['exact_phrase'] = true; +$opts['limit'] = 25; + +$results[] = $client->BuildExcerpts($docs, 'index_utf8', 'шел по склону', $opts); + +// 3 + +$opts = array(); +$opts['use_boundaries'] = true; +$opts['single_passage'] = false; +$opts['chunk_separator'] = '###'; +$opts['weight_order'] = true; +$opts['exact_phrase'] = true; +$opts['limit'] = 25; + +$results[] = $client->BuildExcerpts($docs, 'index_utf8', 'шел по склону', $opts); + +// 4 + +$opts = array(); +$opts['use_boundaries'] = true; +$opts['single_passage'] = false; +$opts['chunk_separator'] = '###'; +$opts['weight_order'] = true; +$opts['exact_phrase'] = false; +$opts['limit'] = 75; + +$results[] = $client->BuildExcerpts($docs, 'index_utf8', 'шел по склону', $opts); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_057/model.bin b/coreseek/csft-4.1/test/test_057/model.bin new file mode 100755 index 0000000..6fd8210 --- /dev/null +++ b/coreseek/csft-4.1/test/test_057/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:4:{i:0;a:2:{i:0;s:36:"### .###";i:1;s:32:" .###";}i:1;a:1:{i:0;s:36:"### .###";}i:2;a:1:{i:0;s:36:"### .###";}i:3;a:1:{i:0;s:107:"### .### .### .###";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_057/test.xml b/coreseek/csft-4.1/test/test_057/test.xml new file mode 100755 index 0000000..cfba21d --- /dev/null +++ b/coreseek/csft-4.1/test/test_057/test.xml @@ -0,0 +1,101 @@ + + + +snippets vs boundaries, windows-1251 + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index index_sbcs +{ + source = test + path = /index_sbcs + + morphology = stem_enru + min_word_len = 3 + min_prefix_len = 0 + min_infix_len = 0 + + phrase_boundary = . + phrase_boundary_step = 100 + + charset_type = sbcs +} + + +select 1; + +BuildExcerpts($docs, 'index_sbcs', '', $opts); + +// 2 + +$docs = array(); +$docs[0] = ' . . . . . '; + +$opts = array(); +$opts['use_boundaries'] = true; +$opts['single_passage'] = false; +$opts['chunk_separator'] = '###'; +$opts['weight_order'] = false; +$opts['exact_phrase'] = true; +$opts['limit'] = 25; + +$results[] = $client->BuildExcerpts($docs, 'index_sbcs', ' ', $opts); + +// 3 + +$opts = array(); +$opts['use_boundaries'] = true; +$opts['single_passage'] = false; +$opts['chunk_separator'] = '###'; +$opts['weight_order'] = true; +$opts['exact_phrase'] = true; +$opts['limit'] = 25; + +$results[] = $client->BuildExcerpts($docs, 'index_sbcs', ' ', $opts); + +// 4 + +$opts = array(); +$opts['use_boundaries'] = true; +$opts['single_passage'] = false; +$opts['chunk_separator'] = '###'; +$opts['weight_order'] = true; +$opts['exact_phrase'] = false; +$opts['limit'] = 75; + +$results[] = $client->BuildExcerpts($docs, 'index_sbcs', ' ', $opts); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_058/model.bin b/coreseek/csft-4.1/test/test_058/model.bin new file mode 100755 index 0000000..86f24ef --- /dev/null +++ b/coreseek/csft-4.1/test/test_058/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:6:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:2;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:4;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:5;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:1;a:1:{i:0;a:6:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:4;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:5;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_058/test.xml b/coreseek/csft-4.1/test/test_058/test.xml new file mode 100755 index 0000000..1f3fb77 --- /dev/null +++ b/coreseek/csft-4.1/test/test_058/test.xml @@ -0,0 +1,90 @@ + + + +rotation + + + + + + +searchd +{ + + + workers = none + + workers = threads + binlog_path = + + +} + +source sql +{ + type = mysql + + + sql_query = select id, text from test_table where mode = (select mode from test_table where id = 1000); +} + +index index +{ + source = sql + path = /index +} + + +drop table if exists test_table + + +create table test_table +( + id int not null, + text varchar(255) not null, + mode int +); + + + +insert into test_table values +( 1, 'first', 1 ), +( 2, 'second', 1 ), +( 3, 'third', 1 ), +( 4, 'fourth', 1 ), +( 5, 'fifth', 1 ), + +( 1, 'one', 2 ), +( 2, 'two', 2 ), +( 3, 'three', 2 ), + +( 1000, '', 1 ); + + +Query ( $words ); if ( $result ) { unset ( $result["time"] ); return $result; } else return $client->GetLastError(); '); + +$results = array(); +$errors = ''; + +$results[] = $query ( $client, 'first' ); +$results[] = $query ( $client, 'one' ); + +mysql_query ( 'update test_table set mode = 3 where id = 1000' ); +RunIndexer ( $errors, '--all --rotate' ); +sleep(2); + +$results[] = $query ( $client, 'first' ); +$results[] = $query ( $client, 'one' ); + +mysql_query ( 'update test_table set mode = 2 where id = 1000' ); +RunIndexer ( $errors, '--all --rotate' ); +sleep(2); + +$results[] = $query ( $client, 'first' ); +$results[] = $query ( $client, 'one' ); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_059/model.bin b/coreseek/csft-4.1/test/test_059/model.bin new file mode 100755 index 0000000..52d1da4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_059/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:4:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"second";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"^second";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"2557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""one two"";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"2557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""one two"~10";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:4:"2557";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""one two"~11";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_059/test.xml b/coreseek/csft-4.1/test/test_059/test.xml new file mode 100755 index 0000000..df5db3d --- /dev/null +++ b/coreseek/csft-4.1/test/test_059/test.xml @@ -0,0 +1,61 @@ + + + +phrase boundaries + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + + phrase_boundary = . + phrase_boundary_step = 10 +} + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `text` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'first.' ), +( 2, ' second' ), +( 3, 'one. two three' ), +( 4, 'one two three' ); + + + +^second +"one two" +"one two"~10 +"one two"~11 + + + diff --git a/coreseek/csft-4.1/test/test_060/model.bin b/coreseek/csft-4.1/test/test_060/model.bin new file mode 100755 index 0000000..8ce3de6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_060/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:1:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:1:"q";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"1";s:1:"q";s:1:"1";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"3";s:1:"q";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_060/test.xml b/coreseek/csft-4.1/test/test_060/test.xml new file mode 100755 index 0000000..9960bbe --- /dev/null +++ b/coreseek/csft-4.1/test/test_060/test.xml @@ -0,0 +1,70 @@ + + + +select expressions + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT id, id AS tag, body FROM test_table + sql_attr_uint = tag +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 + docinfo = extern +} + + + +SetSelect ( "*, IN(@id,1," . $idlist . "3) AS q" ); +$client->SetFilter ( "q", array(1) ); + +$r = $client->Query ( "" ); +if ( $r ) +{ + unset ( $r["time"] ); + $results[] = $r; +} else + $results[] = $client->GetLastError(); +]]> + + +CREATE TABLE test_table +( + id int(11) NOT NULL default '0', + body varchar(255) NOT NULL default '' +) + + + +INSERT INTO test_table VALUES ( 1,'one' ), ( 2,'two' ), ( 3,'three' ), ( 4,'four' ) + + + +DROP TABLE IF EXISTS test_table + + + diff --git a/coreseek/csft-4.1/test/test_061/model.bin b/coreseek/csft-4.1/test/test_061/model.bin new file mode 100755 index 0000000..c5d618c --- /dev/null +++ b/coreseek/csft-4.1/test/test_061/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2147483632;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}s:10:"2147483652";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}s:10:"2147483672";a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"main";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"main";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_061/test.xml b/coreseek/csft-4.1/test/test_061/test.xml new file mode 100755 index 0000000..4ab9d40 --- /dev/null +++ b/coreseek/csft-4.1/test/test_061/test.xml @@ -0,0 +1,75 @@ + + + +merge vs delta decoding + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srcmain +{ + type = mysql + + + sql_query = SELECT * FROM test_table WHERE document_id in (2147483632,2147483652) +} + +source srcdelta +{ + type = mysql + + + sql_query = SELECT * FROM test_table WHERE document_id in (2147483632,2147483672) +} + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 +} + +index delta +{ + source = srcdelta + path = /delta + charset_type = utf-8 +} + + + +--merge main delta + + + +main + + + +CREATE TABLE `test_table` +( + `document_id` int(11) UNSIGNED NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 2147483632, 'main' ), +( 2147483652, 'main' ), +( 2147483672, 'main' ) + + + diff --git a/coreseek/csft-4.1/test/test_062/model.bin b/coreseek/csft-4.1/test/test_062/model.bin new file mode 100755 index 0000000..463e05c --- /dev/null +++ b/coreseek/csft-4.1/test/test_062/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:58:{i:0;s:14:"^sphinx month$";i:1;a:1:{i:0;s:113:"[B]Sphinx[A] clusters scale to billions of documents, terabytes of data, and billions of queries per [B]month[A].";}i:2;s:16:"^sphinx queries$";i:3;a:1:{i:0;s:101:"Sphinx clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:4;s:16:"^clusters month$";i:5;a:1:{i:0;s:101:"Sphinx clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:6;s:12:"^*inx *bytes";i:7;a:1:{i:0;s:113:"[B]Sphinx[A] clusters scale to billions of documents, [B]terabytes[A] of data, and billions of queries per month.";}i:8;s:3:"*i*";i:9;a:1:{i:0;s:125:"[B]Sphinx[A] clusters scale to [B]billions[A] of documents, terabytes of data, and [B]billions[A] of [B]queries[A] per month.";}i:10;s:4:"*on*";i:11;a:1:{i:0;s:119:"Sphinx clusters scale to [B]billions[A] of documents, terabytes of data, and [B]billions[A] of queries per [B]month[A].";}i:12;s:2:"*s";i:13;a:1:{i:0;s:137:"Sphinx [B]clusters[A] scale to [B]billions[A] of [B]documents[A], [B]terabytes[A] of data, and [B]billions[A] of [B]queries[A] per month.";}i:14;s:16:""clusters scale"";i:15;a:1:{i:0;s:107:"Sphinx [B]clusters scale[A] to billions of documents, terabytes of data, and billions of queries per month.";}i:16;s:23:""clusters do not scale"";i:17;a:1:{i:0;s:101:"Sphinx clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:18;s:7:""of d*"";i:19;a:1:{i:0;s:113:"Sphinx clusters scale to billions [B]of documents[A], terabytes [B]of data[A], and billions of queries per month.";}i:20;s:18:"terabyte* << quer*";i:21;a:1:{i:0;s:113:"Sphinx clusters scale to billions of documents, [B]terabytes[A] of data, and billions of [B]queries[A] per month.";}i:22;s:17:"data << terabyte*";i:23;a:1:{i:0;s:101:"Sphinx clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:24;s:16:""sphinx scale"~3";i:25;a:1:{i:0;s:113:"[B]Sphinx[A] clusters [B]scale[A] to billions of documents, terabytes of data, and billions of queries per month.";}i:26;s:19:""sphinx billions"~3";i:27;a:1:{i:0;s:101:"Sphinx clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:28;s:19:""silly documents"/1";i:29;a:1:{i:0;s:107:"Sphinx clusters scale to billions of [B]documents[A], terabytes of data, and billions of queries per month.";}i:30;s:28:""clusters scale to billions"";i:31;a:1:{i:0;s:107:"Sphinx [B]clusters scale to billions[A] of documents, terabytes of data, and billions of queries per month.";}i:32;s:41:""queries per month" | month | "per month"";i:33;a:1:{i:0;s:107:"Sphinx clusters scale to billions of documents, terabytes of data, and billions of [B]queries per month[A].";}i:34;s:19:""of d*" | "of data"";i:35;a:1:{i:0;s:113:"Sphinx clusters scale to billions [B]of documents[A], terabytes [B]of data[A], and billions of queries per month.";}i:36;s:25:""of data" -"of hedgedogs"";i:37;a:1:{i:0;s:107:"Sphinx clusters scale to billions of documents, terabytes [B]of data[A], and billions of queries per month.";}i:38;s:21:""documents terabytes"";i:39;a:1:{i:0;s:101:"Sphinx clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:40;s:13:"@title sphinx";i:41;a:1:{i:0;s:107:"[B]Sphinx[A] clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:42;s:12:"@text sphinx";i:43;a:1:{i:0;s:107:"[B]Sphinx[A] clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:44;s:15:"@text[3] sphinx";i:45;a:1:{i:0;s:107:"[B]Sphinx[A] clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:46;s:18:"@text[3] documents";i:47;a:1:{i:0;s:101:"Sphinx clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:48;s:18:"@text[7] documents";i:49;a:1:{i:0;s:107:"Sphinx clusters scale to billions of [B]documents[A], terabytes of data, and billions of queries per month.";}i:50;s:6:"SPHINX";i:51;a:1:{i:0;s:107:"[B]Sphinx[A] clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:52;s:4:"SPH*";i:53;a:1:{i:0;s:107:"[B]Sphinx[A] clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:54;s:5:"*PHI*";i:55;a:1:{i:0;s:107:"[B]Sphinx[A] clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}i:56;s:4:"*INX";i:57;a:1:{i:0;s:107:"[B]Sphinx[A] clusters scale to billions of documents, terabytes of data, and billions of queries per month.";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_062/test.xml b/coreseek/csft-4.1/test/test_062/test.xml new file mode 100755 index 0000000..7cc28bf --- /dev/null +++ b/coreseek/csft-4.1/test/test_062/test.xml @@ -0,0 +1,97 @@ + + + + +snippets vs query highlighting + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'title' as title, 'text' as text; +} + +index test +{ + source = test + path = /test + charset_type = utf-8 + + phrase_boundary = U+002C + phrase_boundary_step = 100 +} + + +select 1; + + '[B]', + 'after_match' => '[A]', + 'chunk_separator' => ' ... ', + 'limit' => 255, + 'around' => 2, + 'query_mode' => 1 +); + +$text = 'Sphinx clusters scale to billions of documents, terabytes of data, and billions of queries per month.'; + +$queries = array +( + '^sphinx month$', + '^sphinx queries$', + '^clusters month$', + '^*inx *bytes', + '*i*', + '*on*', + '*s', + '"clusters scale"', + '"clusters do not scale"', // false claims don't get highlighted + '"of d*"', + 'terabyte* << quer*', + 'data << terabyte*', + '"sphinx scale"~3', + '"sphinx billions"~3', + '"silly documents"/1', + '"clusters scale to billions"', + '"queries per month" | month | "per month"', + '"of d*" | "of data"', + '"of data" -"of hedgedogs"', + '"documents terabytes"', // crosses boundary + '@title sphinx', + '@text sphinx', + '@text[3] sphinx', + '@text[3] documents', + '@text[7] documents', + + // case shouldn't matter + 'SPHINX', + 'SPH*', + '*PHI*', + '*INX', +); + +$results = array(); +foreach ( $queries as $query ) +{ + $reply = $client->BuildExcerpts ( array($text), 'test', $query, $opts ); + $results [] = $query; + $results [] = $reply; +} + +]]> + + diff --git a/coreseek/csft-4.1/test/test_063/model.bin b/coreseek/csft-4.1/test/test_063/model.bin new file mode 100755 index 0000000..ce203e9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_063/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:51:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"1537";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"bbb|ccc";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"bbb@ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"bbb@ccc";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"bbb|ccc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"bbb\|ccc";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"bbb@ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"bbb\@ccc";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"bbb ccc";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""bbb ccc"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:6:{i:5;a:2:{s:6:"weight";s:4:"3585";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"2585";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2585";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}i:9;a:2:{s:6:"weight";s:4:"1518";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"aaa";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"6";}s:3:"eee";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"aaa|eee|ccc";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:11:"aaa|eee|ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"aaa\|eee\|ccc";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:11:"aaa|eee|ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""aaa|eee|ccc"";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:11:"aaa|eee|ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""aaa\|eee\|ccc"";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"a+b+c+d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"a+b+c+d";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"2722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"a+b+c+d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"a+b+c+d e";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"3722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:7:"a+b+c+d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""a+b+c+d e f"";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"2722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"a+b+c+d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"e+f|g";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""a+b+c+d e+f|g"";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3673";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:7:"bbb@ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:4:"@eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:""bbb@ccc ddd @eee"";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3673";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:4:"@eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:11:"fff@ggg@hhh";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""ddd @eee fff@ggg@hhh"";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:11:"fff@ggg@hhh";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"iii@";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""fff@ggg@hhh iii@ kkk"";}i:17;a:6:{s:5:"query";s:1:"@";s:5:"error";s:49:"index test: syntax error, unexpected $end near ''";s:7:"warning";s:0:"";s:5:"total";i:0;s:11:"total_found";i:0;s:4:"time";i:0;}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"@";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"\@";}i:19;a:6:{s:5:"query";s:8:"@eee kkk";s:5:"error";s:55:"index test: query error: no field 'eee' found in schema";s:7:"warning";s:0:"";s:5:"total";i:0;s:11:"total_found";i:0;s:4:"time";i:0;}i:20;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:4:"@eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"\@eee kkk";}i:21;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"aaa*ccc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"aaa\*ccc";}i:22;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"aaa*ccc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"aaa*ccc";}i:23;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"bbb\*ccc";}i:24;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"bbb*ccc";}i:25;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:" bbb ccc";}i:26;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""bbb ccc"";}i:27;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"fff*ggg";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"fff\*ggg";}i:28;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"fff*ggg";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"fff*ggg";}i:29;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:11:"fff*ggg*hhh";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"fff*ggg*hhh";}i:30;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"2648";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""bbb*ccc ddd"";}i:31;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""bbb*ccc ccc ddd"";}i:32;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"2611";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:"bbb*ccc << ddd";}i:33;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:11;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"hello";}i:34;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:11;a:2:{s:6:"weight";s:4:"2722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""hello world"";}i:35;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:11;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"u.s.a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"hello U.S.A";}i:36;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:20;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"must";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"must";}i:37;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:20;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"must!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"must\!\!\!";}i:38;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:21;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dude";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"dude";}i:39;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:21;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"@dude";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"\@dude";}i:40;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:30;a:2:{s:6:"weight";s:4:"1598";s:5:"attrs";a:0:{}}i:31;a:2:{s:6:"weight";s:4:"1598";s:5:"attrs";a:0:{}}i:32;a:2:{s:6:"weight";s:4:"1598";s:5:"attrs";a:0:{}}i:33;a:2:{s:6:"weight";s:4:"1598";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"posse";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"posse";}i:41;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:31;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse()";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"posse\(\)";}i:42;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:32;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse[]";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"posse\[\]";}i:43;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:33;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse{}";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"posse\{\}";}i:44;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:31;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse()";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""posse()"";}i:45;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:32;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse[]";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""posse[]"";}i:46;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:33;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse{}";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""posse{}"";}i:47;a:3:{s:8:"sphinxql";s:55:"select * from test1 where match ( 'zzzzzz .(buzzzz)' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}}}i:48;a:2:{s:8:"sphinxql";s:41:"select * from test1 where match ( 'a+b' )";s:10:"total_rows";i:0;}i:49;a:3:{s:8:"sphinxql";s:44:"select * from test2 where match ( 'a11-22' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1643";}}}i:50;a:3:{s:8:"sphinxql";s:43:"select * from test2 where match ( '11-22' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1643";}}}}i:1;a:51:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"1537";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"bbb|ccc";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"bbb@ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"bbb@ccc";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"bbb|ccc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"bbb\|ccc";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"bbb@ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"bbb\@ccc";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"bbb ccc";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""bbb ccc"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:6:{i:5;a:2:{s:6:"weight";s:4:"3585";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"2585";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2585";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2543";s:5:"attrs";a:0:{}}i:9;a:2:{s:6:"weight";s:4:"1518";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"aaa";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"6";}s:3:"eee";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"aaa|eee|ccc";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:11:"aaa|eee|ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"aaa\|eee\|ccc";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:11:"aaa|eee|ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""aaa|eee|ccc"";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:11:"aaa|eee|ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""aaa\|eee\|ccc"";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"a+b+c+d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"a+b+c+d";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"2722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"a+b+c+d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"a+b+c+d e";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"3722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:7:"a+b+c+d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""a+b+c+d e f"";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"2722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"a+b+c+d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"e+f|g";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""a+b+c+d e+f|g"";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3673";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:7:"bbb@ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:4:"@eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:""bbb@ccc ddd @eee"";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3673";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:4:"@eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:11:"fff@ggg@hhh";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""ddd @eee fff@ggg@hhh"";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:11:"fff@ggg@hhh";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"iii@";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""fff@ggg@hhh iii@ kkk"";}i:17;a:6:{s:5:"query";s:1:"@";s:5:"error";s:49:"index test: syntax error, unexpected $end near ''";s:7:"warning";s:0:"";s:5:"total";i:0;s:11:"total_found";i:0;s:4:"time";i:0;}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"@";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"\@";}i:19;a:6:{s:5:"query";s:8:"@eee kkk";s:5:"error";s:55:"index test: query error: no field 'eee' found in schema";s:7:"warning";s:0:"";s:5:"total";i:0;s:11:"total_found";i:0;s:4:"time";i:0;}i:20;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:4:"@eee";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"\@eee kkk";}i:21;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"aaa*ccc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"aaa\*ccc";}i:22;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"aaa*ccc";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"aaa*ccc";}i:23;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"bbb\*ccc";}i:24;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"bbb*ccc";}i:25;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:" bbb ccc";}i:26;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"2586";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"bbb";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""bbb ccc"";}i:27;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"fff*ggg";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"fff\*ggg";}i:28;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"fff*ggg";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"fff*ggg";}i:29;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:11:"fff*ggg*hhh";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"fff*ggg*hhh";}i:30;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"2648";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""bbb*ccc ddd"";}i:31;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ccc";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""bbb*ccc ccc ddd"";}i:32;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:7;a:2:{s:6:"weight";s:4:"2611";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"bbb*ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:"bbb*ccc << ddd";}i:33;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:11;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"hello";}i:34;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:11;a:2:{s:6:"weight";s:4:"2722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""hello world"";}i:35;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:11;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"u.s.a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"hello U.S.A";}i:36;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:20;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"must";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"must";}i:37;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:20;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"must!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"must\!\!\!";}i:38;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:21;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"dude";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"dude";}i:39;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:21;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"@dude";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"\@dude";}i:40;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:30;a:2:{s:6:"weight";s:4:"1598";s:5:"attrs";a:0:{}}i:31;a:2:{s:6:"weight";s:4:"1598";s:5:"attrs";a:0:{}}i:32;a:2:{s:6:"weight";s:4:"1598";s:5:"attrs";a:0:{}}i:33;a:2:{s:6:"weight";s:4:"1598";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"posse";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"posse";}i:41;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:31;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse()";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"posse\(\)";}i:42;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:32;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse[]";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"posse\[\]";}i:43;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:33;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse{}";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"posse\{\}";}i:44;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:31;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse()";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""posse()"";}i:45;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:32;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse[]";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""posse[]"";}i:46;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:33;a:2:{s:6:"weight";s:4:"1722";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"posse{}";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""posse{}"";}i:47;a:3:{s:8:"sphinxql";s:55:"select * from test1 where match ( 'zzzzzz .(buzzzz)' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}}}i:48;a:2:{s:8:"sphinxql";s:41:"select * from test1 where match ( 'a+b' )";s:10:"total_rows";i:0;}i:49;a:3:{s:8:"sphinxql";s:44:"select * from test2 where match ( 'a11-22' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1643";}}}i:50;a:3:{s:8:"sphinxql";s:43:"select * from test2 where match ( '11-22' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1643";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_063/test.xml b/coreseek/csft-4.1/test/test_063/test.xml new file mode 100755 index 0000000..d97179e --- /dev/null +++ b/coreseek/csft-4.1/test/test_063/test.xml @@ -0,0 +1,185 @@ + + + +blend characters + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = test + path = /test + + blend_chars = @, |, +, ., *, !, (, ), [, ], {, } + + + charset_type = utf-8 + charset_type = sbcs + +} + +source test1 +{ + type = mysql + + sql_query = SELECT 1 as document_id, 'zzzzzz buzzzz' as text +} + +index test1 +{ + source = test1 + path = /test1 + + blend_chars = ., @, + charset_type = utf-8 + min_word_len = 2 +} + +source test2 +{ + type = mysql + + sql_query = SELECT 1 as document_id, 'dummy a11-22 text' as text UNION SELECT 2 as document_id, 'dummy 11-22 text' as text +} + +index test2 +{ + source = test2 + path = /test2 + + blend_chars = -, @, + charset_type = utf-8 +} + + + + +CREATE TABLE test_table +( + document_id INT NOT NULL, + text VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table + + + +INSERT INTO test_table VALUES +( 1, 'aaa bbb@ccc ddd @eee fff@ggg@hhh iii@ kkk' ), +( 2, 'ggg@hhh' ), +( 3, 'xxx @ yyy' ), +( 4, 'aaa@bbb+ccc@ddd' ), +( 5, 'aaa|eee|ccc' ), +( 6, 'a+b+c+d e+f|g' ), +( 7, 'aaa bbb*ccc ddd eee fff*ggg*hhh iii' ), +( 8, 'ggg*hhh' ), +( 9, 'aaa ddd ggg hhh' ), +( 10, 'aaa bbb ccc ddd' ), +( 11, 'hello, world. how is this gonna work if we need to handle U.S.A' ), +( 20, 'its a must!!!' ), +( 21, 'hey @dude wassup' ), +( 30, 'posse' ), +( 31, 'posse()' ), +( 32, 'posse[]' ), +( 33, 'posse{}' ); + + + + bbb|ccc + bbb@ccc + + bbb\|ccc + bbb\@ccc + + bbb ccc + "bbb ccc" + + aaa|eee|ccc + aaa\|eee\|ccc + "aaa|eee|ccc" + "aaa\|eee\|ccc" + + a+b+c+d + a+b+c+d e + "a+b+c+d e f" + "a+b+c+d e+f|g" + + "bbb@ccc ddd @eee" + "ddd @eee fff@ggg@hhh" + "fff@ggg@hhh iii@ kkk" + + @ + \@ + + @eee kkk + \@eee kkk + + aaa\*ccc + aaa*ccc + + bbb\*ccc + bbb*ccc + + bbb ccc + "bbb ccc" + + fff\*ggg + fff*ggg + fff*ggg*hhh + + "bbb*ccc ddd" + "bbb*ccc ccc ddd" + bbb*ccc << ddd + + hello + "hello world" + hello U.S.A + + must + must\!\!\! + dude + \@dude + + posse + posse\(\) + posse\[\] + posse\{\} + "posse()" + "posse[]" + "posse{}" + + + + + select * from test1 where match ( 'zzzzzz .(buzzzz)' ) + + select * from test1 where match ( 'a+b' ) + + select * from test2 where match ( 'a11-22' ) + select * from test2 where match ( '11-22' ) + + + diff --git a/coreseek/csft-4.1/test/test_064/model.bin b/coreseek/csft-4.1/test/test_064/model.bin new file mode 100755 index 0000000..f44545a --- /dev/null +++ b/coreseek/csft-4.1/test/test_064/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:4:"text";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_064/test.xml b/coreseek/csft-4.1/test/test_064/test.xml new file mode 100755 index 0000000..3b1dd0b --- /dev/null +++ b/coreseek/csft-4.1/test/test_064/test.xml @@ -0,0 +1,56 @@ + + + +merge vs empty index + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source empty +{ + type = mysql + + + sql_query = select * from (select 0, 'text') t where 0; +} + +source delta +{ + type = mysql + + + sql_query = select 1, 'text'; +} + +index empty +{ + source = empty + path = /empty +} + +index delta +{ + source = delta + path = /delta +} + + +select 1; + + +--merge empty delta + + + + text + + + diff --git a/coreseek/csft-4.1/test/test_065/model.bin b/coreseek/csft-4.1/test/test_065/model.bin new file mode 100755 index 0000000..ac55485 --- /dev/null +++ b/coreseek/csft-4.1/test/test_065/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:3:"tag";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:6:"100680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.065";s:5:"words";a:1:{s:7:"tag_1_a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"tag_1_a";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:3:"tag";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:6:"101590";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"tag_1_a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"tag_1_a aaa";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:3:"tag";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:6:"100680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"tag_1_b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"tag_1_b";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:3:"tag";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:6:"200680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:7:"tag_1_a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"tag_1_b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:"tag_1_a tag_1_b";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:3:"tag";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:6:"400500";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:6:"200500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"tag_x";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"tag_x";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:3:"tag";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:6:"300590";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"tag_1_a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"tag_x";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"tag_1_a tag_x";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:3:"tag";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:6:"300680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"tag_2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"tag_2";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_065/test.xml b/coreseek/csft-4.1/test/test_065/test.xml new file mode 100755 index 0000000..ca517e1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_065/test.xml @@ -0,0 +1,83 @@ + + + +payload indexing + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + + sql_query = select * from sph_test; + sql_joined_field = tag from payload-query; select * from sph_test_tags; +} + +index test +{ + source = test + path = /test + + charset_table = 0..9, A..Z->a..z, _, a..z +} + + + +create table sph_test +( + id int, + text varchar(255) +); + +drop table if exists sph_test + + +create table sph_test_tags +( + id int, + tag varchar(255), + weight int +); + +drop table if exists sph_test_tags + + +insert into sph_test (id, text) values + ( 1, 'aaa' ), + ( 2, 'aaa bbb' ), + ( 3, 'bbb ccc' ); + + + +insert into sph_test_tags values + ( 1, 'tag_1_a tag_1_b', 100 ), + ( 1, 'tag_x', 200 ), + ( 2, 'tag_2', 300 ), + ( 2, 'tag_x', 400 ); + + + + tag_1_a + tag_1_a aaa + tag_1_b + tag_1_a tag_1_b + tag_x + tag_1_a tag_x + tag_2 + + + diff --git a/coreseek/csft-4.1/test/test_066/dbgen.php b/coreseek/csft-4.1/test/test_066/dbgen.php new file mode 100755 index 0000000..5f988b8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_066/dbgen.php @@ -0,0 +1,15 @@ + + + +index format backwards compatibility + + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = select 1, 'dummy' +} + +index v14 +{ + source = test + path = /refdata/v14 +} + +index v19 +{ + source = test + path = /refdata/v19 +} + +index v19noattrs +{ + source = test + path = /refdata/v19noattrs +} + +index v20 +{ + source = test + path = /refdata/v20 +} + +index v8 +{ + source = test + path = /refdata/v8 +} + + + +test +test +test +test +ford | corsa | tt + + + diff --git a/coreseek/csft-4.1/test/test_067/model.bin b/coreseek/csft-4.1/test/test_067/model.bin new file mode 100755 index 0000000..8c1e1e1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_067/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:12:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:0:{}s:5:"attrs";a:3:{s:5:"price";i:5;s:4:"xgid";i:1;s:8:"avgprice";i:5;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:5:"price";d:20;s:4:"xgid";i:10;s:8:"avgprice";d:13.75;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:4;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:65;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:4;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:130;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:130;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:12;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.009";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:8;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:195;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:12;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.009";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:9;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:0:{}s:5:"attrs";a:5:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:65;s:8:"avgprice";d:13.75;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:0:{}s:5:"attrs";a:5:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;}s:7:"matches";a:1:{i:21;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"gid";i:1;s:5:"price";d:40;s:5:"views";i:3;s:8:"sumviews";i:65;s:8:"avgprice";d:27.5;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:0:{}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:130;s:8:"avgprice";d:20.625;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}i:1;a:12:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:0:{}s:5:"attrs";a:3:{s:5:"price";i:5;s:4:"xgid";i:1;s:8:"avgprice";i:5;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:5:"price";d:20;s:4:"xgid";i:10;s:8:"avgprice";d:13.75;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:4;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:65;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:4;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:130;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:130;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:12;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:8;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:195;s:8:"avgprice";d:13.75;s:8:"@groupby";i:1;s:6:"@count";i:12;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.006";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:9;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:0:{}s:5:"attrs";a:5:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:65;s:8:"avgprice";d:13.75;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:0:{}s:5:"attrs";a:5:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;}s:7:"matches";a:1:{i:21;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"gid";i:1;s:5:"price";d:40;s:5:"views";i:3;s:8:"sumviews";i:65;s:8:"avgprice";d:27.5;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:0:{}s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";i:5;s:5:"views";i:1;s:8:"sumviews";i:1;s:8:"avgprice";i:5;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:7:{s:3:"gid";i:1;s:5:"price";d:20;s:5:"views";i:3;s:8:"sumviews";i:130;s:8:"avgprice";d:20.625;s:8:"@groupby";i:1;s:6:"@count";i:8;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_067/test.xml b/coreseek/csft-4.1/test/test_067/test.xml new file mode 100755 index 0000000..1de82a6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_067/test.xml @@ -0,0 +1,143 @@ + + + +aggregate functions + + + + +3 + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + + + dist_threads = 2 + + + +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table + sql_attr_uint = gid + sql_attr_float = price + sql_attr_uint = views +} + +source srctest2 : srctest +{ + sql_query = SELECT document_id+10, body, gid, price, views FROM test_table +} + +source srctest3 : srctest +{ + sql_query = SELECT document_id+20, body, gid, price*2 price, views FROM test_table +} + + +index test +{ + source = srctest + path = /test + docinfo = extern +} + +index test3 +{ + source = srctest3 + path = /test3 + docinfo = extern +} + +index dist +{ + type = distributed + local = test + agent = :test2 +} + +index dist2 +{ + type = distributed + agent = :test2 + agent = :testr +} +index dist3 +{ + type = distributed + local = test + agent = :test2,test4 +} + + +index test2 +{ + source = srctest2 + path = /test2 + docinfo = extern +} +index test4 : test2 +{ + path = /test4 +} + + +index testr +{ + source = srctest + path = /testr + docinfo = extern +} + + + + + + + + + + + + + + + + + + + +CREATE TABLE test_table +( + document_id INTEGER NOT NULL PRIMARY KEY, + body VARCHAR(255) NOT NULL, + gid INTEGER NOT NULL, + price FLOAT NOT NULL, + views INTEGER NOT NULL +) + + + +DROP TABLE IF EXISTS test_table + + + +INSERT INTO test_table VALUES +( 1, 'dummy', 1, 20.00, 3 ), +( 2, 'dummy', 1, 15.00, 15 ), +( 3, 'dummy', 1, 10.00, 7 ), +( 4, 'dummy', 1, 10.00, 40 ) + + + diff --git a/coreseek/csft-4.1/test/test_068/data1.xml b/coreseek/csft-4.1/test/test_068/data1.xml new file mode 100755 index 0000000..0d08816 --- /dev/null +++ b/coreseek/csft-4.1/test/test_068/data1.xml @@ -0,0 +1,30 @@ + + + + + + + + + + +test one +this is my test document number one. also checking search within phrases. + + + +test two +this is my test document number two + + + +another doc +this is another group + + + +doc number four +this is to test groups + + + diff --git a/coreseek/csft-4.1/test/test_068/data2.xml b/coreseek/csft-4.1/test/test_068/data2.xml new file mode 100755 index 0000000..64f2811 --- /dev/null +++ b/coreseek/csft-4.1/test/test_068/data2.xml @@ -0,0 +1,26 @@ + + + + + + + + + + +2 +3 + + + +123 +test one +updated with new content and gid + + + +test five +newly inserted + + + diff --git a/coreseek/csft-4.1/test/test_068/model.bin b/coreseek/csft-4.1/test/test_068/model.bin new file mode 100755 index 0000000..bcb3472 --- /dev/null +++ b/coreseek/csft-4.1/test/test_068/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:3:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:3:"123";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:3:"123";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_068/test.xml b/coreseek/csft-4.1/test/test_068/test.xml new file mode 100755 index 0000000..31d6397 --- /dev/null +++ b/coreseek/csft-4.1/test/test_068/test.xml @@ -0,0 +1,50 @@ + + + +xmlpipe2 indexing + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src1 +{ + type = xmlpipe2 + xmlpipe_command = cat /data1.xml +} + +source src2 +{ + type = xmlpipe2 + xmlpipe_command = cat /data2.xml +} + +index idx1 +{ + source = src1 + path = /idx1 + charset_type = utf-8 +} + +index idx2 +{ + source = src2 + path = /idx2 + charset_type = utf-8 +} + + + +test +test +test + + + diff --git a/coreseek/csft-4.1/test/test_069/model.bin b/coreseek/csft-4.1/test/test_069/model.bin new file mode 100755 index 0000000..7e11b18 --- /dev/null +++ b/coreseek/csft-4.1/test/test_069/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:1:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:3:"123";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"50";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"40";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"20";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"15";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_069/test.xml b/coreseek/csft-4.1/test/test_069/test.xml new file mode 100755 index 0000000..7d2ab6f --- /dev/null +++ b/coreseek/csft-4.1/test/test_069/test.xml @@ -0,0 +1,62 @@ + + +overrides + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, gid, body FROM test_table + sql_attr_uint = gid +} + +index test1 +{ + source = srctest + path = /test1 + +} + + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `gid` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 10, 'test' ), +( 2, 20, 'test' ), +( 3, 30, 'test' ), +( 4, 40, 'test' ), +( 5, 50, 'test' ) + + + +$client->SetOverride ( "gid", SPH_ATTR_INTEGER, array ( 1=>123, 3=>15 ) ); +$client->SetSortMode ( SPH_SORT_ATTR_DESC, "gid" ); +$res = $client->Query ( "test", "test1" ); +if ( $res ) +{ + unset ( $res["time"] ); + $results = array ( $res ); +} else + $results = array ( $client->GetLastError() ); + + diff --git a/coreseek/csft-4.1/test/test_070/model.bin b/coreseek/csft-4.1/test/test_070/model.bin new file mode 100755 index 0000000..2176f29 --- /dev/null +++ b/coreseek/csft-4.1/test/test_070/model.bin @@ -0,0 +1 @@ +a:9:{i:0;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}i:1;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}i:2;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}i:3;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}i:4;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}i:5;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}i:6;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}i:7;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}i:8;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_070/test.xml b/coreseek/csft-4.1/test/test_070/test.xml new file mode 100755 index 0000000..8c352bc --- /dev/null +++ b/coreseek/csft-4.1/test/test_070/test.xml @@ -0,0 +1,68 @@ + + + subtree caching (part 1) + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + subtree_docs_cache = 0 + subtree_docs_cache = 40 + subtree_docs_cache = 10M + + + subtree_hits_cache = 0 + subtree_hits_cache = 40 + subtree_hits_cache = 10M + + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'one two three one' ), +( 2, 'one two three one two' ), +( 3, 'one two three one two three' ), +( 4, 'one two three four six' ), +( 5, 'one two three four five seven' ) + + +AddQuery ('(one and two) and three'); +$client->AddQuery ('one and (two and three)'); +$results = $client->RunQueries (); +for ( $i=0; $i<=1; $i++ ) + if ( is_array($results) && is_array($results[$i]) ) + unset ( $results[$i]["time"] ); +]]> + + diff --git a/coreseek/csft-4.1/test/test_071/model.bin b/coreseek/csft-4.1/test/test_071/model.bin new file mode 100755 index 0000000..4d56937 --- /dev/null +++ b/coreseek/csft-4.1/test/test_071/model.bin @@ -0,0 +1 @@ +a:9:{i:0;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}i:1;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}i:2;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}i:3;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}i:4;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}i:5;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}i:6;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}i:7;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}i:8;a:1:{i:0;a:2:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"and";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_071/test.xml b/coreseek/csft-4.1/test/test_071/test.xml new file mode 100755 index 0000000..4b37005 --- /dev/null +++ b/coreseek/csft-4.1/test/test_071/test.xml @@ -0,0 +1,69 @@ + + + subtree caching (part 2) + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + subtree_docs_cache = 0 + subtree_docs_cache = 40 + subtree_docs_cache = 10M + + + subtree_hits_cache = 0 + subtree_hits_cache = 40 + subtree_hits_cache = 10M + + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'one two three one' ), +( 2, 'one two three one two' ), +( 3, 'one two three one two three' ), +( 4, 'one two three four six' ), +( 5, 'one two three four five seven' ) + + +SetMatchMode (SPH_MATCH_EXTENDED2); +$client->AddQuery ('(one and two) and three'); +$client->AddQuery ('one and (two and four)'); +$results = $client->RunQueries (); +for ( $i=0; $i<=1; $i++ ) + if ( is_array($results) && is_array($results[$i]) ) + unset ( $results[$i]["time"] ); +]]> + + diff --git a/coreseek/csft-4.1/test/test_072/model.bin b/coreseek/csft-4.1/test/test_072/model.bin new file mode 100755 index 0000000..607e5c7 --- /dev/null +++ b/coreseek/csft-4.1/test/test_072/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:1:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:1:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_072/test.xml b/coreseek/csft-4.1/test/test_072/test.xml new file mode 100755 index 0000000..248203c --- /dev/null +++ b/coreseek/csft-4.1/test/test_072/test.xml @@ -0,0 +1,63 @@ + + + multi-queries + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + subtree_docs_cache = 0 + subtree_hits_cache = 0 + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'one' ), +( 2, 'one two' ), +( 3, 'one two three' ), +( 4, 'one two three four' ), +( 5, 'one two three four five' ) + + +AddQuery ('one'); +$client->AddQuery ('two'); +$client->AddQuery ('three'); +$client->AddQuery ('four'); +$client->AddQuery ('five'); +$results = $client->RunQueries (); +for ( $i=0; $i<=4; $i++ ) + if ( is_array($results) && is_array($results[$i]) ) + unset ( $results[$i]["time"] ); +]]> + + diff --git a/coreseek/csft-4.1/test/test_073/model.bin b/coreseek/csft-4.1/test/test_073/model.bin new file mode 100755 index 0000000..3a6c103 --- /dev/null +++ b/coreseek/csft-4.1/test/test_073/model.bin @@ -0,0 +1 @@ +a:9:{i:0;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:1;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:2;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:3;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:4;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:5;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:6;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:7;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:8;a:1:{i:0;a:5:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:3;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:3:{s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:4;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:2:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_073/test.xml b/coreseek/csft-4.1/test/test_073/test.xml new file mode 100755 index 0000000..3777345 --- /dev/null +++ b/coreseek/csft-4.1/test/test_073/test.xml @@ -0,0 +1,71 @@ + + + subtree caching (part 3) + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + subtree_docs_cache = 0 + subtree_docs_cache = 40 + subtree_docs_cache = 10M + + + subtree_hits_cache = 0 + subtree_hits_cache = 40 + subtree_hits_cache = 10M + + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'one' ), +( 2, 'one two' ), +( 3, 'one two three' ), +( 4, 'one two three four' ), +( 5, 'one two three four five' ) + + +AddQuery ('one'); +$client->AddQuery ('one two'); +$client->AddQuery ('one two three'); +$client->AddQuery ('two three four'); +$client->AddQuery ('four five'); +$results = $client->RunQueries (); +for ( $i=0; $i<=4; $i++ ) + if ( is_array($results) && is_array($results[$i]) ) + unset ( $results[$i]["time"] ); +]]> + + diff --git a/coreseek/csft-4.1/test/test_074/model.bin b/coreseek/csft-4.1/test/test_074/model.bin new file mode 100755 index 0000000..79bc403 --- /dev/null +++ b/coreseek/csft-4.1/test/test_074/model.bin @@ -0,0 +1 @@ +a:9:{i:0;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:1;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:2;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:3;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:4;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:5;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:6;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:7;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:8;a:1:{i:0;a:4:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:4;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"4";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:4:"twoo";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"seven";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} diff --git a/coreseek/csft-4.1/test/test_074/test.xml b/coreseek/csft-4.1/test/test_074/test.xml new file mode 100755 index 0000000..72ed4b3 --- /dev/null +++ b/coreseek/csft-4.1/test/test_074/test.xml @@ -0,0 +1,70 @@ + + + subtree caching (part 4) + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + subtree_docs_cache = 0 + subtree_docs_cache = 40 + subtree_docs_cache = 10M + + + subtree_hits_cache = 0 + subtree_hits_cache = 40 + subtree_hits_cache = 10M + + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'one two three one' ), +( 2, 'one two three one two' ), +( 3, 'one two three one two three' ), +( 4, 'one two three four six' ), +( 5, 'one two three four five seven' ) + + +AddQuery ('one two three four'); +$client->AddQuery ('one two three five'); +$client->AddQuery ('one two three six'); +$client->AddQuery ('one twoo seven'); +$results = $client->RunQueries (); +for ( $i=0; $i<=3; $i++ ) + if ( is_array($results) && is_array($results[$i]) ) + unset ( $results[$i]["time"] ); +]]> + + diff --git a/coreseek/csft-4.1/test/test_075/model.bin b/coreseek/csft-4.1/test/test_075/model.bin new file mode 100755 index 0000000..630abec --- /dev/null +++ b/coreseek/csft-4.1/test/test_075/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"3379";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3365";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"four";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"3379";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3365";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}}}i:1;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"3379";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3365";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"four";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"3379";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3365";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}s:5:"three";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"five";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_075/test.xml b/coreseek/csft-4.1/test/test_075/test.xml new file mode 100755 index 0000000..6b1e23b --- /dev/null +++ b/coreseek/csft-4.1/test/test_075/test.xml @@ -0,0 +1,61 @@ + + + subtree cache warmup + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + subtree_docs_cache = 0 + subtree_docs_cache = 100 + + subtree_hits_cache = 1000 + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'one two three one' ), +( 2, 'one two three one two' ) + + +SetMatchMode ( SPH_MATCH_EXTENDED2 ); +$client->AddQuery ("(one two three) | four"); +$client->AddQuery ("(one two three) | five"); +$results = $client->RunQueries (); +for ( $i=0; $i<2; $i++ ) + if ( is_array($results) && is_array($results[$i]) ) + unset ( $results[$i]["time"] ); +]]> + + diff --git a/coreseek/csft-4.1/test/test_076/model.bin b/coreseek/csft-4.1/test/test_076/model.bin new file mode 100755 index 0000000..142a745 --- /dev/null +++ b/coreseek/csft-4.1/test/test_076/model.bin @@ -0,0 +1 @@ +a:3:{i:0;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"4500";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2428";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"b";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"4500";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"2428";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"b";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:1;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"4500";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2428";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"b";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"4500";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"2428";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"b";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:2;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"4500";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2428";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"b";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"d";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"4500";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"2428";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"b";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"f";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_076/test.xml b/coreseek/csft-4.1/test/test_076/test.xml new file mode 100755 index 0000000..a37e4e3 --- /dev/null +++ b/coreseek/csft-4.1/test/test_076/test.xml @@ -0,0 +1,63 @@ + + + subtree cache reset on size limit + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + subtree_docs_cache = 0 + subtree_docs_cache = 40 + subtree_docs_cache = 100 + + + subtree_hits_cache = 1000 + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'a b c d' ), +( 2, 'a b e f' ) + + +SetMatchMode ( SPH_MATCH_EXTENDED2 ); +$client->AddQuery ("(a b)|(c d)"); +$client->AddQuery ("(a b)|(e f)"); +$results = $client->RunQueries (); +for ( $i=0; $i<2; $i++ ) + if ( is_array($results) && is_array($results[$i]) ) + unset ( $results[$i]["time"] ); +]]> + + diff --git a/coreseek/csft-4.1/test/test_077/model.bin b/coreseek/csft-4.1/test/test_077/model.bin new file mode 100755 index 0000000..d4e980e --- /dev/null +++ b/coreseek/csft-4.1/test/test_077/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:3:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"n";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:6:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"2582995467";s:3:"mva";a:1:{i:0;s:10:"2582995467";}}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"3650268775";s:3:"mva";a:1:{i:0;s:10:"3650268775";}}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"1452351953";s:3:"mva";a:1:{i:0;s:10:"1452351953";}}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"1022026391";s:3:"mva";a:1:{i:0;s:10:"1022026391";}}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"3802901620";s:3:"mva";a:1:{i:0;s:10:"3802901620";}}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"1329722356";s:3:"mva";a:1:{i:0;s:10:"1329722356";}}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"n";i:1;s:3:"mva";i:1073741825;s:5:"@expr";i:5;}s:7:"matches";a:6:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"3802901620";s:3:"mva";a:1:{i:0;s:10:"3802901620";}s:5:"@expr";d:3802901504;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"3650268775";s:3:"mva";a:1:{i:0;s:10:"3650268775";}s:5:"@expr";d:3650268672;}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"2582995467";s:3:"mva";a:1:{i:0;s:10:"2582995467";}s:5:"@expr";d:2582995456;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1452351953";s:3:"mva";a:1:{i:0;s:10:"1452351953";}s:5:"@expr";d:1452352000;}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1329722356";s:3:"mva";a:1:{i:0;s:10:"1329722356";}s:5:"@expr";d:1329722368;}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1022026391";s:3:"mva";a:1:{i:0;s:10:"1022026391";}s:5:"@expr";d:1022026368;}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"n";i:1;s:3:"mva";i:1073741825;s:5:"@expr";i:5;}s:7:"matches";a:6:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1022026391";s:3:"mva";a:1:{i:0;s:10:"1022026391";}s:5:"@expr";d:-1022026368;}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1329722356";s:3:"mva";a:1:{i:0;s:10:"1329722356";}s:5:"@expr";d:-1329722368;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1452351953";s:3:"mva";a:1:{i:0;s:10:"1452351953";}s:5:"@expr";d:-1452352000;}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"2582995467";s:3:"mva";a:1:{i:0;s:10:"2582995467";}s:5:"@expr";d:-2582995456;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"3650268775";s:3:"mva";a:1:{i:0;s:10:"3650268775";}s:5:"@expr";d:-3650268672;}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"3802901620";s:3:"mva";a:1:{i:0;s:10:"3802901620";}s:5:"@expr";d:-3802901504;}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}i:1;a:3:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"n";i:1;s:3:"mva";i:1073741825;}s:7:"matches";a:6:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"2582995467";s:3:"mva";a:1:{i:0;s:10:"2582995467";}}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"3650268775";s:3:"mva";a:1:{i:0;s:10:"3650268775";}}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"1452351953";s:3:"mva";a:1:{i:0;s:10:"1452351953";}}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"1022026391";s:3:"mva";a:1:{i:0;s:10:"1022026391";}}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"3802901620";s:3:"mva";a:1:{i:0;s:10:"3802901620";}}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"n";s:10:"1329722356";s:3:"mva";a:1:{i:0;s:10:"1329722356";}}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"n";i:1;s:3:"mva";i:1073741825;s:5:"@expr";i:5;}s:7:"matches";a:6:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"3802901620";s:3:"mva";a:1:{i:0;s:10:"3802901620";}s:5:"@expr";d:3802901504;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"3650268775";s:3:"mva";a:1:{i:0;s:10:"3650268775";}s:5:"@expr";d:3650268672;}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"2582995467";s:3:"mva";a:1:{i:0;s:10:"2582995467";}s:5:"@expr";d:2582995456;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1452351953";s:3:"mva";a:1:{i:0;s:10:"1452351953";}s:5:"@expr";d:1452352000;}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1329722356";s:3:"mva";a:1:{i:0;s:10:"1329722356";}s:5:"@expr";d:1329722368;}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1022026391";s:3:"mva";a:1:{i:0;s:10:"1022026391";}s:5:"@expr";d:1022026368;}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:1:"n";i:1;s:3:"mva";i:1073741825;s:5:"@expr";i:5;}s:7:"matches";a:6:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1022026391";s:3:"mva";a:1:{i:0;s:10:"1022026391";}s:5:"@expr";d:-1022026368;}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1329722356";s:3:"mva";a:1:{i:0;s:10:"1329722356";}s:5:"@expr";d:-1329722368;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"1452351953";s:3:"mva";a:1:{i:0;s:10:"1452351953";}s:5:"@expr";d:-1452352000;}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"2582995467";s:3:"mva";a:1:{i:0;s:10:"2582995467";}s:5:"@expr";d:-2582995456;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"3650268775";s:3:"mva";a:1:{i:0;s:10:"3650268775";}s:5:"@expr";d:-3650268672;}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:1:"n";s:10:"3802901620";s:3:"mva";a:1:{i:0;s:10:"3802901620";}s:5:"@expr";d:-3802901504;}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_077/test.xml b/coreseek/csft-4.1/test/test_077/test.xml new file mode 100755 index 0000000..c53ccd7 --- /dev/null +++ b/coreseek/csft-4.1/test/test_077/test.xml @@ -0,0 +1,70 @@ + +uint attrs + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + + sql_query = SELECT id, n, 'text' FROM test_table; + sql_attr_uint = n + + sql_attr_multi = uint mva from query; select id, n mva from test_table + sql_attr_multi = bigint mva from query; select id, n mva from test_table + +} + +index test +{ + source = test + path = /test +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + n INT UNSIGNED NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (id, n) VALUES +( 1, 2582995467 ), +( 2, 3650268775 ), +( 3, 1452351953 ), +( 4, 1022026391 ), +( 5, 3802901620 ), +( 6, 1329722356 ); + + + + n + mva + + + + + + + + + diff --git a/coreseek/csft-4.1/test/test_078/model.bin b/coreseek/csft-4.1/test/test_078/model.bin new file mode 100755 index 0000000..4da2c4b --- /dev/null +++ b/coreseek/csft-4.1/test/test_078/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:3:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"aaa";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}s:3:"ccc";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"aaa ccc";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"yyy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"ddd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"yyy ddd";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_078/test.xml b/coreseek/csft-4.1/test/test_078/test.xml new file mode 100755 index 0000000..16a4dd0 --- /dev/null +++ b/coreseek/csft-4.1/test/test_078/test.xml @@ -0,0 +1,63 @@ + + + +merge vs hit mixing + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srcmain +{ + type = mysql + + sql_query = SELECT * FROM test1 +} + +source srcdelta +{ + type = mysql + + sql_query = SELECT * FROM test2 +} + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 +} + +index delta +{ + source = srcdelta + path = /delta + charset_type = utf-8 +} + + + +--merge main delta + + + +aaa +aaa ccc +yyy ddd + + +CREATE TABLE test1 ( id INTEGER NOT NULL, body VARCHAR(255) NOT NULL ); +CREATE TABLE test2 ( id INTEGER NOT NULL, body VARCHAR(255) NOT NULL ); +DROP TABLE IF EXISTS test1; +DROP TABLE IF EXISTS test2; +INSERT INTO test1 VALUES ( 1, 'xxx aaa yyy' ); +INSERT INTO test2 VALUES ( 1, 'aaa bbb ccc aaa ddd eee' ); + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_079/model.bin b/coreseek/csft-4.1/test/test_079/model.bin new file mode 100755 index 0000000..5bff99b --- /dev/null +++ b/coreseek/csft-4.1/test/test_079/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"W0000";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"W0000";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"W1023";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"W1023";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"W1024";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"W1024";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"W1025";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"W1025";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"W1188";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"W1188";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"W1498";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"W1498";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"W1499";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"W1499";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_079/test.xml b/coreseek/csft-4.1/test/test_079/test.xml new file mode 100755 index 0000000..d20e0d8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_079/test.xml @@ -0,0 +1,81 @@ + + + +merge vs out-of-bounds dictionary reads + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source delta +{ + type = mysql + + sql_query = select id, text from sph_test; +} + +index delta +{ + source = delta + path = /delta + charset_table = W,0..9 +} + +source main +{ + type = mysql + + sql_query = select 2, 'W0000' as text; +} + +index main +{ + source = main + path = /main + charset_table = W,0..9 +} + + + + --merge main delta + + + +create table sph_test +( + id int not null, + text text(262144) not null +) ENGINE=MYISAM + + + +drop table if exists sph_test; + + + + + + W0000 + W1023 + W1024 + W1025 + W1188 + W1498 + W1499 + + + diff --git a/coreseek/csft-4.1/test/test_080/model.bin b/coreseek/csft-4.1/test/test_080/model.bin new file mode 100755 index 0000000..11532ee --- /dev/null +++ b/coreseek/csft-4.1/test/test_080/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:10:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1815";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:6:"299992";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"C";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"@second[299992] B";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"@second[299993] B";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"@second[299994] B";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"5728";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.040";s:5:"words";a:3:{s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:6:"299992";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:""C B A A A"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"5728";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.040";s:5:"words";a:3:{s:1:"c";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:6:"299992";}s:1:"b";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""C B A A A$"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"A";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"a";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"A$";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"x";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"X";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"first";i:1;s:6:"second";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:1:"y";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:1:"Y";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_080/test.xml b/coreseek/csft-4.1/test/test_080/test.xml new file mode 100755 index 0000000..f50b782 --- /dev/null +++ b/coreseek/csft-4.1/test/test_080/test.xml @@ -0,0 +1,85 @@ + + + +merge vs write buffer corruption + + +indexer +{ + mem_limit = 16M + write_buffer = 300000 +} + +searchd +{ + +} + +source main +{ + type = mysql + + sql_query = select 2, 'X' as first, 'Y' as second; +} + +index main +{ + source = main + path = /main +} + +source delta +{ + type = mysql + + sql_query = select id, first, second from sph_test +} + +index delta +{ + source = delta + path = /delta +} + + + +create table sph_test +( + id int not null, + first text(1048576) not null, + second text(1048576) not null +) ENGINE=MYISAM + + + +drop table if exists sph_test; + + + + --merge main delta + + + + + + C + @second[299992] B + @second[299993] B + @second[299994] B + "C B A A A" + "C B A A A$" + A + A$ + X + Y + + + diff --git a/coreseek/csft-4.1/test/test_081/model.bin b/coreseek/csft-4.1/test/test_081/model.bin new file mode 100755 index 0000000..fe21a10 --- /dev/null +++ b/coreseek/csft-4.1/test/test_081/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:39:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"tin woodman";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"tin woodman";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"tin woodman";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"tin woodman";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"tin woodman";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"tin woodman";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"lowered";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"lowered";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"lowered";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""tin woodman"";}i:10;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=2)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""tin woodman"";}i:11;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=2)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""tin woodman"";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"and";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""and lowered"";}i:13;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=1, nodes=2)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""and lowered"";}i:14;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=2)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""and lowered"";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""tin woodman"~2";}i:16;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=2)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""tin woodman"~2";}i:17;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=2)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""tin woodman"~2";}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"his";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"axe";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""lowered his axe"";}i:19;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"his";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"axe";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""lowered his axe"";}i:20;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=3)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""lowered his axe"";}i:21;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"4680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"and";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"his";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"axe";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""and lowered his axe"";}i:22;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"his";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"axe";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""and lowered his axe"";}i:23;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=4)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""and lowered his axe"";}i:24;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""tin woodman"/1";}i:25;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""tin woodman"/1";}i:26;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""tin woodman"/1";}i:27;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"1252";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1252";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"the";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"^the";}i:28;a:13:{s:5:"error";s:0:"";s:7:"warning";s:43:"hitlist unavailable, position limit ignored";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"1252";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1252";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"the";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"^the";}i:29;a:13:{s:5:"error";s:0:"";s:7:"warning";s:43:"hitlist unavailable, position limit ignored";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"1252";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1252";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"the";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"^the";}i:30;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"^tin";}i:31;a:13:{s:5:"error";s:0:"";s:7:"warning";s:43:"hitlist unavailable, position limit ignored";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"^tin";}i:32;a:13:{s:5:"error";s:0:"";s:7:"warning";s:43:"hitlist unavailable, position limit ignored";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"^tin";}i:33;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"basket";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"basket";}i:34;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"basket";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"basket";}i:35;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"basket";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"basket";}i:36;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"basket";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"basket$";}i:37;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"basket";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"basket$";}i:38;a:13:{s:5:"error";s:0:"";s:7:"warning";s:43:"hitlist unavailable, position limit ignored";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"basket";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"basket$";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_081/test.xml b/coreseek/csft-4.1/test/test_081/test.xml new file mode 100755 index 0000000..1fa850f --- /dev/null +++ b/coreseek/csft-4.1/test/test_081/test.xml @@ -0,0 +1,126 @@ + + + +hitless indexes + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = select * from sph_test; +} + +index none +{ + source = test + path = /none +} + +index some +{ + source = test + path = /some + + hitless_words = /words.txt +} + +index all +{ + source = test + path = /all + + hitless_words = all +} + + + +create table sph_test +( + id int not null, + text varchar(255) not null +); + + + +drop table if exists sph_test; + + + +insert into sph_test values +( 1, 'The Tin Woodman gave a sigh of satisfaction and lowered his axe, which he leaned against the tree.' ), +( 2, 'The Tin Woodman appeared to think deeply for a moment.' ), +( 3, 'The Tin Woodman had asked Dorothy to put the oil-can in her basket.' ); + + + + + tin woodman + tin woodman + tin woodman + + + tin woodman + tin woodman + tin woodman + + lowered + lowered + lowered + + + "tin woodman" + "tin woodman" + "tin woodman" + + "and lowered" + "and lowered" + "and lowered" + + "tin woodman"~2 + "tin woodman"~2 + "tin woodman"~2 + + + "lowered his axe" + "lowered his axe" + "lowered his axe" + + "and lowered his axe" + "and lowered his axe" + "and lowered his axe" + + + "tin woodman"/1 + "tin woodman"/1 + "tin woodman"/1 + + + ^the + ^the + ^the + + ^tin + ^tin + ^tin + + basket + basket + basket + + basket$ + basket$ + basket$ + + + diff --git a/coreseek/csft-4.1/test/test_081/words.txt b/coreseek/csft-4.1/test/test_081/words.txt new file mode 100755 index 0000000..aef5607 --- /dev/null +++ b/coreseek/csft-4.1/test/test_081/words.txt @@ -0,0 +1,6 @@ +a +the +and +of +tin +woodman diff --git a/coreseek/csft-4.1/test/test_082/model.bin b/coreseek/csft-4.1/test/test_082/model.bin new file mode 100755 index 0000000..783868f --- /dev/null +++ b/coreseek/csft-4.1/test/test_082/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:12:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"tin woodman";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"lowered";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=2)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""tin woodman"";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"and";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""and lowered"";}i:4;a:11:{s:5:"error";s:0:"";s:7:"warning";s:68:"can't create phrase node, hitlists unavailable (hitlists=0, nodes=2)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""tin woodman"~2";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"3680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"his";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"axe";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:""lowered his axe"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"4680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:3:"and";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"lowered";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"his";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"axe";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""and lowered his axe"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:7:"woodman";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:""tin woodman"/1";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:43:"hitlist unavailable, position limit ignored";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"1252";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1252";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"the";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"^the";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:43:"hitlist unavailable, position limit ignored";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"tin";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"^tin";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"basket";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"basket";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"basket";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"basket$";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_082/test.xml b/coreseek/csft-4.1/test/test_082/test.xml new file mode 100755 index 0000000..d181349 --- /dev/null +++ b/coreseek/csft-4.1/test/test_082/test.xml @@ -0,0 +1,86 @@ + + + +hitless merge + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source main +{ + type = mysql + + sql_query = select * from sph_test where id in ( 1, 2 ); +} + +source delta +{ + type = mysql + + sql_query = select * from sph_test where id in ( 3 ); +} + +index main +{ + source = main + path = /main + + hitless_words = /words_main.txt +} + +index delta +{ + source = delta + path = /delta + + hitless_words = /words_delta.txt +} + + + + --merge main delta + + + +create table sph_test +( + id int not null, + text varchar(255) not null +); + + + +drop table if exists sph_test; + + + +insert into sph_test values +( 1, 'The Tin Woodman gave a sigh of satisfaction and lowered his axe, which he leaned against the tree.' ), +( 2, 'The Tin Woodman appeared to think deeply for a moment.' ), +( 3, 'The Tin Woodman had asked Dorothy to put the oil-can in her basket.' ); + + + + tin woodman + lowered + "tin woodman" + "and lowered" + "tin woodman"~2 + "lowered his axe" + "and lowered his axe" + "tin woodman"/1 + ^the + ^tin + basket + basket$ + + + diff --git a/coreseek/csft-4.1/test/test_082/words_delta.txt b/coreseek/csft-4.1/test/test_082/words_delta.txt new file mode 100755 index 0000000..248e86e --- /dev/null +++ b/coreseek/csft-4.1/test/test_082/words_delta.txt @@ -0,0 +1,3 @@ +woodman +the +of diff --git a/coreseek/csft-4.1/test/test_082/words_main.txt b/coreseek/csft-4.1/test/test_082/words_main.txt new file mode 100755 index 0000000..a2dfb43 --- /dev/null +++ b/coreseek/csft-4.1/test/test_082/words_main.txt @@ -0,0 +1,4 @@ +tin +woodman +a + diff --git a/coreseek/csft-4.1/test/test_083/model.bin b/coreseek/csft-4.1/test/test_083/model.bin new file mode 100755 index 0000000..fb3cfd3 --- /dev/null +++ b/coreseek/csft-4.1/test/test_083/model.bin @@ -0,0 +1 @@ +a:9:{i:0;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.000";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}i:1;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}i:2;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}i:3;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}i:4;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}i:5;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}i:6;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}i:7;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}i:8;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"4270";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4244";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4219";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3295";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:5:{i:4;a:2:{s:6:"weight";s:4:"3397";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"3346";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3327";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3308";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"3289";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:3:"one";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"8";}s:3:"two";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"7";}s:5:"three";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"6";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_083/test.xml b/coreseek/csft-4.1/test/test_083/test.xml new file mode 100755 index 0000000..cae2b7f --- /dev/null +++ b/coreseek/csft-4.1/test/test_083/test.xml @@ -0,0 +1,68 @@ + + + subtree cache vs AND node reset + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + subtree_docs_cache = 0 + subtree_docs_cache = 40 + subtree_docs_cache = 10M + + + subtree_hits_cache = 0 + subtree_hits_cache = 40 + subtree_hits_cache = 10M + + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 'one two three one' ), +( 2, 'one two three one two' ), +( 3, 'one two three one two three' ), +( 4, 'one two three four six' ), +( 5, 'one two three four five seven' ) + + + SetMatchMode (SPH_MATCH_EXTENDED2); +$client->AddQuery ("(one two three) |one"); +$client->AddQuery ("(one two three) |six"); +$results = $client->RunQueries (); +]]> + + + + diff --git a/coreseek/csft-4.1/test/test_084/model.bin b/coreseek/csft-4.1/test/test_084/model.bin new file mode 100755 index 0000000..af5f444 --- /dev/null +++ b/coreseek/csft-4.1/test/test_084/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:4:"attr";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:4:"attr";s:1:"0";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"phantom";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"phantom";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_084/test.xml b/coreseek/csft-4.1/test/test_084/test.xml new file mode 100755 index 0000000..a18c354 --- /dev/null +++ b/coreseek/csft-4.1/test/test_084/test.xml @@ -0,0 +1,73 @@ + + + +merge vs phantom killer + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source main +{ + type = mysql + + sql_query = select 1 as id, 'phantom' as body, 2 as attr; + sql_attr_uint = attr +} + +source delta +{ + type = mysql + + sql_query = SELECT * FROM test_table; + sql_attr_uint = attr +} + +index main +{ + source = main + path = /empty +} + +index delta +{ + source = delta + path = /delta +} + + + +CREATE TABLE test_table +( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '', + `attr` int(11) NOT NULL default '0' +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table VALUES +( 1, 'nophantom', 1 ), +( 2, 'phantom', 0 ) + + + +--merge main delta + + + + phantom + + + diff --git a/coreseek/csft-4.1/test/test_085/model.bin b/coreseek/csft-4.1/test/test_085/model.bin new file mode 100755 index 0000000..68aa597 --- /dev/null +++ b/coreseek/csft-4.1/test/test_085/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:3:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:2:"10";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"one";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:3:"300";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"three";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"three";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:3:"500";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"five";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_085/test.xml b/coreseek/csft-4.1/test/test_085/test.xml new file mode 100755 index 0000000..7742365 --- /dev/null +++ b/coreseek/csft-4.1/test/test_085/test.xml @@ -0,0 +1,77 @@ + + + +merge vs dupecounter + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srcmain +{ + type = mysql + + + sql_query = SELECT id, body, id*10 AS xid FROM test_table WHERE id in (1,2,3) + sql_attr_uint = xid +} + +source srcdelta : srcmain +{ + sql_query = SELECT id, body, id*100 AS xid FROM test_table WHERE id in (3,4,5) +} + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 +} + +index delta +{ + source = srcdelta + path = /delta + charset_type = utf-8 +} + + + +--merge main delta + + + +one +three +five + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'one' ), +( 2, 'two' ), +( 3, 'three blind mice, how they run' ), +( 4, 'four' ), +( 5, 'five' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_086/model.bin b/coreseek/csft-4.1/test/test_086/model.bin new file mode 100755 index 0000000..c5e2257 --- /dev/null +++ b/coreseek/csft-4.1/test/test_086/model.bin @@ -0,0 +1 @@ +a:4:{i:0;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"sonne";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:104;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"sonne";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}}}i:1;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:201;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:202;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:204;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"sonne";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:301;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:302;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:304;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"sonne";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}}}i:2;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:401;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:402;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:404;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"sonne";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:501;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:502;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:504;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"sonne";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}}}i:3;a:1:{i:0;a:2:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:601;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:602;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:604;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"sonne";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:701;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:702;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:704;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:5:"sonne";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_086/test.xml b/coreseek/csft-4.1/test/test_086/test.xml new file mode 100755 index 0000000..17c1ab8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_086/test.xml @@ -0,0 +1,88 @@ + + + +index rotation vs pconns + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + + workers = none + + workers = threads + binlog_path = + + workers = fork + workers = prefork + +} + +source test1 +{ + type = mysql + + sql_query = SELECT * FROM test_table + sql_query_post_index = UPDATE test_table SET id=id+100 +} + +index test1 +{ + source = test1 + path = /test1 +} + + + +CREATE TABLE test_table +( + id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, + title varchar(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table VALUES +( 1, 'hier kommt die sonne' ), +( 2, 'hier kommt die sonne' ), +( 3, 'sie est der hellste stern von allen' ), +( 4, 'hier kommt die sonne' ); + + +Open (); +$res1 = $client->Query ( "sonne", "test1" ); +unset ( $res1["time"] ); + +$rv = 0; +$err = ""; +exec ( $g_locals["indexer"]." --config config.conf --rotate --all", $err, $rv ); + +usleep ( 1500000 ); +$res2 = $client->Query ( "sonne", "test1" ); +unset ( $res2["time"] ); +$client->Close(); + +$results = array ( $res1, $res2 ); +if ( !$res1 || !$res2 || $rv!=0 ) + $results = false; +]]> + + + diff --git a/coreseek/csft-4.1/test/test_087/model.bin b/coreseek/csft-4.1/test/test_087/model.bin new file mode 100755 index 0000000..a4cec72 --- /dev/null +++ b/coreseek/csft-4.1/test/test_087/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:9:{i:0;a:2:{s:8:"sphinxql";s:55:"insert into test values (1,'title one','content one',3)";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:56:"insert into test (id,content) values (2,'query defined')";s:14:"total_affected";i:1;}i:2;a:3:{s:8:"sphinxql";s:41:"select * from test where match('content')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1643";s:3:"gid";s:1:"3";}}}i:3;a:3:{s:8:"sphinxql";s:39:"select * from test where match('query')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1643";s:3:"gid";s:1:"0";}}}i:4;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:1:"0";}}}i:5;a:3:{s:8:"sphinxql";s:33:"insert into test values (5,6,7,8)";s:5:"error";s:32:"row 1, column 2: string expected";s:5:"errno";i:1064;}i:6;a:3:{s:8:"sphinxql";s:44:"insert into test values (5,6,7,8,9,10,11,12)";s:5:"error";s:54:"column count does not match schema (expected 4, got 8)";s:5:"errno";i:1064;}i:7;a:3:{s:8:"sphinxql";s:57:"insert into test ( id, gid, gid) values ( 123, 456, 789 )";s:5:"error";s:28:"column 'gid' specified twice";s:5:"errno";i:1110;}i:8;a:3:{s:8:"sphinxql";s:96:"insert into test (id, title, fakeint, fakefloat, fakestring) values (10, 'title10',1,.34,'fuck')";s:5:"error";s:25:"unknown column: 'fakeint'";s:5:"errno";i:1064;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_087/test.xml b/coreseek/csft-4.1/test/test_087/test.xml new file mode 100755 index 0000000..935830c --- /dev/null +++ b/coreseek/csft-4.1/test/test_087/test.xml @@ -0,0 +1,41 @@ + + + SphinxQL: INSERT with column list + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + type = rt + path = data/test + rt_attr_uint = gid + rt_field = title + rt_field = content +} + + + + insert into test values (1,'title one','content one',3) + insert into test (id,content) values (2,'query defined') + select * from test where match('content') + select * from test where match('query') + select * from test + insert into test values (5,6,7,8) + insert into test values (5,6,7,8,9,10,11,12) + insert into test ( id, gid, gid) values ( 123, 456, 789 ) + insert into test (id, title, fakeint, fakefloat, fakestring) values (10, 'title10',1,.34,'fuck') + + + diff --git a/coreseek/csft-4.1/test/test_088/model.bin b/coreseek/csft-4.1/test/test_088/model.bin new file mode 100755 index 0000000..d72cca5 --- /dev/null +++ b/coreseek/csft-4.1/test/test_088/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:5:{i:0;a:2:{s:8:"sphinxql";s:95:"insert into test values (1,'title1','content1'),(2,'title2','content2'),(3,'title3','content3')";s:14:"total_affected";i:3;}i:1;a:2:{s:8:"sphinxql";s:73:"insert into test (id,title) values (4,'title1'),(5,'title5'),(6,'title6')";s:14:"total_affected";i:3;}i:2;a:2:{s:8:"sphinxql";s:81:"insert into test (id,content) values (7,'content7'),(8,'content8'),(9,'content9')";s:14:"total_affected";i:3;}i:3;a:3:{s:8:"sphinxql";s:80:"insert into test (title,content) values ('title','failure'),('title1','failure')";s:5:"error";s:39:"column list must contain an 'id' column";s:5:"errno";i:1064;}i:4;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_088/test.xml b/coreseek/csft-4.1/test/test_088/test.xml new file mode 100755 index 0000000..afdacac --- /dev/null +++ b/coreseek/csft-4.1/test/test_088/test.xml @@ -0,0 +1,37 @@ + + + SphinxQL: batch INSERT + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + type = rt + path = data/test + rt_field = title + rt_field = content +} + + + + + insert into test values (1,'title1','content1'),(2,'title2','content2'),(3,'title3','content3') + insert into test (id,title) values (4,'title1'),(5,'title5'),(6,'title6') + insert into test (id,content) values (7,'content7'),(8,'content8'),(9,'content9') + insert into test (title,content) values ('title','failure'),('title1','failure') + select * from test + + + diff --git a/coreseek/csft-4.1/test/test_089/model.bin b/coreseek/csft-4.1/test/test_089/model.bin new file mode 100755 index 0000000..7d7adbf --- /dev/null +++ b/coreseek/csft-4.1/test/test_089/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:8:{i:0;a:2:{s:8:"sphinxql";s:70:"insert into test (id,flt,title) values (1,0.3,'zero'),(2,.3,'no zero')";s:14:"total_affected";i:2;}i:1;a:3:{s:8:"sphinxql";s:50:"select .1 as zz, flt from test where match('zero')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1356";s:3:"flt";s:8:"0.300000";s:2:"zz";s:8:"0.100000";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1356";s:3:"flt";s:8:"0.300000";s:2:"zz";s:8:"0.100000";}}}i:2;a:3:{s:8:"sphinxql";s:51:"select 0.1 as zz, flt from test where match('zero')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1356";s:3:"flt";s:8:"0.300000";s:2:"zz";s:8:"0.100000";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1356";s:3:"flt";s:8:"0.300000";s:2:"zz";s:8:"0.100000";}}}i:3;a:2:{s:8:"sphinxql";s:54:"insert into test (id,flt,title) values (10,-123,'neg')";s:14:"total_affected";i:1;}i:4;a:2:{s:8:"sphinxql";s:31:"select * from test where id=-10";s:10:"total_rows";i:0;}i:5;a:3:{s:8:"sphinxql";s:30:"select * from test where id=10";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"flt";s:11:"-123.000000";}}}i:6;a:3:{s:8:"sphinxql";s:19:"select * from test2";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"ord";s:1:"0";s:2:"wc";s:1:"3";s:3:"gid";s:1:"1";}i:1;a:5:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"ord";s:1:"1";s:2:"wc";s:1:"3";s:3:"gid";s:1:"1";}i:2;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"ord";s:1:"2";s:2:"wc";s:1:"4";s:3:"gid";s:1:"1";}}}i:7;a:3:{s:8:"sphinxql";s:39:"select * from test2 where match ( 'c' )";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"ord";s:1:"0";s:2:"wc";s:1:"3";s:3:"gid";s:1:"1";}i:1;a:5:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1319";s:3:"ord";s:1:"1";s:2:"wc";s:1:"3";s:3:"gid";s:1:"1";}i:2;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1319";s:3:"ord";s:1:"2";s:2:"wc";s:1:"4";s:3:"gid";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_089/test.xml b/coreseek/csft-4.1/test/test_089/test.xml new file mode 100755 index 0000000..ebc2011 --- /dev/null +++ b/coreseek/csft-4.1/test/test_089/test.xml @@ -0,0 +1,68 @@ + + +SphinxQL: floats without leading zero + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + type = rt + path = /test + rt_attr_float = flt + rt_field = title +} + +source src_test2 +{ + type = mysql + + sql_query = SELECT id, text, text as ord, text as wc, 1 as gid FROM table2 + sql_attr_uint = gid + sql_attr_str2ordinal = ord + sql_attr_str2wordcount = wc +} + +index test2 +{ + source = src_test2 + path = /test2 + docinfo = extern + charset_type = utf-8 +} + + + +insert into test (id,flt,title) values (1,0.3,'zero'),(2,.3,'no zero') +select .1 as zz, flt from test where match('zero') +select 0.1 as zz, flt from test where match('zero') +insert into test (id,flt,title) values (10,-123,'neg') +select * from test where id=-10 +select * from test where id=10 +select * from test2 +select * from test2 where match ( 'c' ) + + + +CREATE TABLE `table2` ( + `id` int(11), + `text` varchar(255) NOT NULL +) + +DROP TABLE IF EXISTS `table2` + +INSERT INTO `table2` VALUES +( 1, 'a b c' ), ( 2, 'b c d' ), ( 3, 'c d e f' ) + + + diff --git a/coreseek/csft-4.1/test/test_090/model.bin b/coreseek/csft-4.1/test/test_090/model.bin new file mode 100755 index 0000000..089003c --- /dev/null +++ b/coreseek/csft-4.1/test/test_090/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:19:{i:0;a:2:{s:8:"sphinxql";s:45:"insert into test (id,body) values (1,'value')";s:14:"total_affected";i:1;}i:1;a:3:{s:8:"sphinxql";s:27:"select (3-1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"2";}}}i:2;a:3:{s:8:"sphinxql";s:28:"select (3 -1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"2";}}}i:3;a:3:{s:8:"sphinxql";s:28:"select (3- 1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"2";}}}i:4;a:3:{s:8:"sphinxql";s:29:"select (3-0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"2.900000";}}}i:5;a:3:{s:8:"sphinxql";s:30:"select (3- 0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"2.900000";}}}i:6;a:3:{s:8:"sphinxql";s:30:"select (3 -0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"2.900000";}}}i:7;a:3:{s:8:"sphinxql";s:28:"select (3--1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"4";}}}i:8;a:3:{s:8:"sphinxql";s:29:"select (3 --1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"4";}}}i:9;a:3:{s:8:"sphinxql";s:29:"select (3-- 1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"4";}}}i:10;a:3:{s:8:"sphinxql";s:30:"select (3--0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"3.100000";}}}i:11;a:3:{s:8:"sphinxql";s:31:"select (3-- 0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"3.100000";}}}i:12;a:3:{s:8:"sphinxql";s:31:"select (3 --0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"3.100000";}}}i:13;a:3:{s:8:"sphinxql";s:29:"select (3- -1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"4";}}}i:14;a:3:{s:8:"sphinxql";s:30:"select (3 - -1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"4";}}}i:15;a:3:{s:8:"sphinxql";s:30:"select (3- - 1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"4";}}}i:16;a:3:{s:8:"sphinxql";s:31:"select (3- -0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"3.100000";}}}i:17;a:3:{s:8:"sphinxql";s:32:"select (3- - 0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"3.100000";}}}i:18;a:3:{s:8:"sphinxql";s:32:"select (3 - -0.1) as a from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:8:"3.100000";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_090/test.xml b/coreseek/csft-4.1/test/test_090/test.xml new file mode 100755 index 0000000..d54e0a4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_090/test.xml @@ -0,0 +1,50 @@ + + + SphinxQL: minus sign padding + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + type = rt + path = data/test + rt_attr_uint = intt + rt_field = body +} + + + + insert into test (id,body) values (1,'value') + select (3-1) as a from test + select (3 -1) as a from test + select (3- 1) as a from test + select (3-0.1) as a from test + select (3- 0.1) as a from test + select (3 -0.1) as a from test + select (3--1) as a from test + select (3 --1) as a from test + select (3-- 1) as a from test + select (3--0.1) as a from test + select (3-- 0.1) as a from test + select (3 --0.1) as a from test + select (3- -1) as a from test + select (3 - -1) as a from test + select (3- - 1) as a from test + select (3- -0.1) as a from test + select (3- - 0.1) as a from test + select (3 - -0.1) as a from test + + + diff --git a/coreseek/csft-4.1/test/test_091/model.bin b/coreseek/csft-4.1/test/test_091/model.bin new file mode 100755 index 0000000..2fd2fbb --- /dev/null +++ b/coreseek/csft-4.1/test/test_091/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:3:{i:0;a:2:{s:8:"sphinxql";s:76:"insert into test (id,idd,grp,content) values (1,5,4,'content'),(2,2,4,'you')";s:14:"total_affected";i:2;}i:1;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"5";s:3:"grp";s:1:"4";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"2";s:3:"grp";s:1:"4";}}}i:2;a:3:{s:8:"sphinxql";s:44:"select max(idd) as mx from test group by grp";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"5";s:2:"mx";s:1:"5";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_091/test.xml b/coreseek/csft-4.1/test/test_091/test.xml new file mode 100755 index 0000000..49cc50b --- /dev/null +++ b/coreseek/csft-4.1/test/test_091/test.xml @@ -0,0 +1,36 @@ + + + RT: aggregate functions + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + + type = rt + path = data/test + rt_attr_uint = idd + rt_attr_uint = grp + rt_field = content +} + + + + insert into test (id,idd,grp,content) values (1,5,4,'content'),(2,2,4,'you') + select * from test + select max(idd) as mx from test group by grp + + + diff --git a/coreseek/csft-4.1/test/test_092/model.bin b/coreseek/csft-4.1/test/test_092/model.bin new file mode 100755 index 0000000..ebb0ca8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_092/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:23:{i:0;a:2:{s:8:"sphinxql";s:62:"insert into test92 (id,content) values (1,'content'),(2,'you')";s:14:"total_affected";i:2;}i:1;a:2:{s:8:"sphinxql";s:29:"delete from test92 where id=1";s:14:"total_affected";i:0;}i:2;a:3:{s:8:"sphinxql";s:20:"select * from test92";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:3;a:2:{s:8:"sphinxql";s:55:"insert into test92 (id,content) values (1,'newcontent')";s:14:"total_affected";i:1;}i:4;a:3:{s:8:"sphinxql";s:39:"select * from test92 where match('you')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1643";s:3:"idd";s:1:"0";}}}i:5;a:2:{s:8:"sphinxql";s:43:"select * from test92 where match('content')";s:10:"total_rows";i:0;}i:6;a:3:{s:8:"sphinxql";s:46:"select * from test92 where match('newcontent')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1643";s:3:"idd";s:1:"0";}}}i:7;a:2:{s:8:"sphinxql";s:70:"insert into test102 (id,content) values (1,'content'),(2,'newcontent')";s:14:"total_affected";i:2;}i:8;a:2:{s:8:"sphinxql";s:30:"delete from test102 where id=1";s:14:"total_affected";i:0;}i:9;a:2:{s:8:"sphinxql";s:49:"insert into test102 (id,content) values (1,'bla')";s:14:"total_affected";i:1;}i:10;a:3:{s:8:"sphinxql";s:40:"select * from test102 where match('bla')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1643";s:3:"idd";s:1:"0";}}}i:11;a:3:{s:8:"sphinxql";s:47:"select * from test102 where match('newcontent')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1643";s:3:"idd";s:1:"0";}}}i:12;a:2:{s:8:"sphinxql";s:54:"insert into test102 (id,content) values (3,'content2')";s:14:"total_affected";i:1;}i:13;a:3:{s:8:"sphinxql";s:40:"select * from test102 where match('bla')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:3:"idd";s:1:"0";}}}i:14;a:3:{s:8:"sphinxql";s:45:"select * from test102 where match('content2')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1680";s:3:"idd";s:1:"0";}}}i:15;a:3:{s:8:"sphinxql";s:47:"select * from test102 where match('newcontent')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1680";s:3:"idd";s:1:"0";}}}i:16;a:2:{s:8:"sphinxql";s:63:"insert into test104 (id,content) values (1,'word1'),(2,'word2')";s:14:"total_affected";i:2;}i:17;a:2:{s:8:"sphinxql";s:51:"insert into test104 (id,content) values (3,'word3')";s:14:"total_affected";i:1;}i:18;a:3:{s:8:"sphinxql";s:48:"select * from test104 where match('word1|word3')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1590";s:3:"idd";s:1:"0";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1590";s:3:"idd";s:1:"0";}}}i:19;a:2:{s:8:"sphinxql";s:70:"insert into test105 (id,content) values (1,'content'),(2,'newcontent')";s:14:"total_affected";i:2;}i:20;a:2:{s:8:"sphinxql";s:54:"replace into test105 (id,content) values (1,'contend')";s:14:"total_affected";i:1;}i:21;a:3:{s:8:"sphinxql";s:55:"select * from test105 where match('contend|newcontent')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1571";s:3:"idd";s:1:"0";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1571";s:3:"idd";s:1:"0";}}}i:22;a:2:{s:8:"sphinxql";s:44:"select * from test105 where match('content')";s:10:"total_rows";i:0;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_092/test.xml b/coreseek/csft-4.1/test/test_092/test.xml new file mode 100755 index 0000000..4c81704 --- /dev/null +++ b/coreseek/csft-4.1/test/test_092/test.xml @@ -0,0 +1,75 @@ + + + RT: re-insert deleted row, keyword weights vs different insert scenarios + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index test92 +{ + type = rt + path = data/test92 + rt_attr_uint = idd + rt_field = content +} +index test102 +{ + type = rt + path = data/test102 + rt_attr_uint = idd + rt_field = content +} +index test104 +{ + type = rt + path = data/test104 + rt_attr_uint = idd + rt_field = content +} +index test105 +{ + type = rt + path = data/test105 + rt_attr_uint = idd + rt_field = content +} + + + + insert into test92 (id,content) values (1,'content'),(2,'you') + delete from test92 where id=1 + select * from test92 + insert into test92 (id,content) values (1,'newcontent') + select * from test92 where match('you') + select * from test92 where match('content') + select * from test92 where match('newcontent') + insert into test102 (id,content) values (1,'content'),(2,'newcontent') + delete from test102 where id=1 + insert into test102 (id,content) values (1,'bla') + select * from test102 where match('bla') + select * from test102 where match('newcontent') + insert into test102 (id,content) values (3,'content2') + select * from test102 where match('bla') + select * from test102 where match('content2') + select * from test102 where match('newcontent') + insert into test104 (id,content) values (1,'word1'),(2,'word2') + insert into test104 (id,content) values (3,'word3') + select * from test104 where match('word1|word3') + insert into test105 (id,content) values (1,'content'),(2,'newcontent') + replace into test105 (id,content) values (1,'contend') + select * from test105 where match('contend|newcontent') + select * from test105 where match('content') + + + diff --git a/coreseek/csft-4.1/test/test_093/model.bin b/coreseek/csft-4.1/test/test_093/model.bin new file mode 100755 index 0000000..c577417 --- /dev/null +++ b/coreseek/csft-4.1/test/test_093/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:5:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:101;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"one";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:102;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:1002;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:1003;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:3:"two";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"two";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:103;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.004";s:5:"words";a:1:{s:5:"three";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"three";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:104;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:1004;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"four";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"four";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1003;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"five";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_093/test.xml b/coreseek/csft-4.1/test/test_093/test.xml new file mode 100755 index 0000000..1c6daaf --- /dev/null +++ b/coreseek/csft-4.1/test/test_093/test.xml @@ -0,0 +1,81 @@ + + + +merge vs different min docids + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srcmain +{ + type = mysql + + + sql_query = SELECT * FROM test_table WHERE document_id in (101,102,103,104) +} + +source srcdelta : srcmain +{ + sql_query = SELECT * FROM test_table WHERE document_id in (1001,1002,1003,1004) +} + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 +} + +index delta +{ + source = srcdelta + path = /delta + charset_type = utf-8 +} + + + +--merge main delta + + + +one +two +three +four +five + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 101, 'one' ), +( 102, 'two' ), +( 103, 'three crazy mice live happly' ), +( 104, 'four' ), +( 1001, 'seven' ), +( 1002, 'six two' ), +( 1003, 'five but now two' ), +( 1004, 'four' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_094/model.bin b/coreseek/csft-4.1/test/test_094/model.bin new file mode 100755 index 0000000..bd456a7 --- /dev/null +++ b/coreseek/csft-4.1/test/test_094/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:6:"255186";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1356";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"258";}s:3:"two";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"258";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""one two"~10";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_094/test.xml b/coreseek/csft-4.1/test/test_094/test.xml new file mode 100755 index 0000000..07b7556 --- /dev/null +++ b/coreseek/csft-4.1/test/test_094/test.xml @@ -0,0 +1,55 @@ + + + +proximity queries + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 +} + + + + +"one two"~10 + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` VARCHAR(16384) NOT NULL +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` +SELECT 1, REPEAT('one two ',257) UNION +SELECT 2, 'two one' + + + diff --git a/coreseek/csft-4.1/test/test_095/model.bin b/coreseek/csft-4.1/test/test_095/model.bin new file mode 100755 index 0000000..4e45e27 --- /dev/null +++ b/coreseek/csft-4.1/test/test_095/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:3:"100";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"one";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:2:"30";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"three";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"three";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"four";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"four";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:2:"50";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"five";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"six";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"six";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:1:"1";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"xid";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:1:"1";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"xid";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_095/test.xml b/coreseek/csft-4.1/test/test_095/test.xml new file mode 100755 index 0000000..c5b2967 --- /dev/null +++ b/coreseek/csft-4.1/test/test_095/test.xml @@ -0,0 +1,123 @@ + + + +merge vs killlists + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srcmain +{ + type = mysql + + + sql_query = SELECT document_id, body, document_id*10 AS xid FROM test_table WHERE document_id in (3,4,5,6) + sql_attr_uint = xid +} + +source srcdelta : srcmain +{ + sql_query = SELECT document_id, body, document_id*100 AS xid FROM test_table WHERE document_id in (1,2) + sql_query_killlist = select 4 union select 6 +} + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 +} + +index delta +{ + source = srcdelta + path = /delta + charset_type = utf-8 +} + +source srcm1 +{ + type = mysql + + + sql_query = SELECT document_id, body, 1 xid FROM test_table WHERE document_id in (3,4,5,6) + sql_attr_uint = xid + sql_query_killlist = select 1 union select 2 union select 3 +} + +source srcd1 : srcmain +{ + sql_query = SELECT document_id, body, 2 AS xid FROM test_table WHERE document_id in (1,2) + sql_query_killlist = select 4 union select 6 +} + +index m1 +{ + source = srcm1 + path = /m1 + charset_type = utf-8 +} + +index d1 +{ + source = srcd1 + path = /d1 + charset_type = utf-8 +} + +index mmk +{ + source = srcm1 + path = /mmk + charset_type = utf-8 +} + + + + +--merge main delta +--merge m1 d1 +--merge mmk d1 --merge-killlists + + + +one +three +four +five +six + + + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'one' ), +( 2, 'two' ), +( 3, 'three blind mice, how they run' ), +( 4, 'four became from three' ), +( 5, 'five' ), +( 6, 'six' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_096/model.bin b/coreseek/csft-4.1/test/test_096/model.bin new file mode 100755 index 0000000..6db26f1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_096/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:13:{i:0;s:11:"iteration=0";i:1;s:7:"up.ok=2";i:2;s:10:"started=ok";i:3;s:11:"iteration=1";i:4;s:7:"up.ok=2";i:5;s:10:"started=ok";i:6;s:11:"iteration=2";i:7;s:7:"up.ok=2";i:8;s:10:"started=ok";i:9;s:11:"iteration=3";i:10;s:7:"up.ok=2";i:11;s:10:"started=ok";i:12;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:6:"adtext";i:1;s:7:"heading";i:2;s:8:"postcode";}s:5:"attrs";a:5:{s:3:"lng";i:5;s:3:"lat";i:5;s:7:"section";i:1;s:7:"make_id";i:1;s:15:"transmission_id";i:1;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"lng";d:-0.479999005794525146484375;s:3:"lat";d:0.69197499752044677734375;s:7:"section";i:1;s:7:"make_id";i:5;s:15:"transmission_id";i:4;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:6:"corsa4";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_096/test.xml b/coreseek/csft-4.1/test/test_096/test.xml new file mode 100755 index 0000000..8ae9e42 --- /dev/null +++ b/coreseek/csft-4.1/test/test_096/test.xml @@ -0,0 +1,121 @@ + + + +attribute updates + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT id, adtext, heading, postcode, lng, lat, section, make_id, transmission_id FROM test_table + + sql_attr_float = lng + sql_attr_float = lat + sql_attr_uint = section + sql_attr_uint = make_id + sql_attr_uint = transmission_id +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 + docinfo = extern +} + + + +UpdateAttributes ( "idx", array("section", "make_id"), array(1=>array(4, 15), 3=>array(221, 31))); + if ( $up >= 0 ) + $results[] = sprintf("up.ok=%d", $up); + else + $results[] = sprintf("up.err=%s", $client->GetLastError()); + + StopSearchd ( 'config.conf', 'searchd.pid' ); + + usleep ( 50000 ); + + $error = ""; + $startSta = StartSearchd ( 'config.conf', 'error.txt', 'searchd.pid', $error ); + if ( $startSta == 0 || $startSta == 2 ) + $results[] = "started=ok"; + else + $results[] = sprintf("start.err=%d local=%s client=%s", $startSta, $error, $client->GetLastError()); +} + +// find the updated match +$results[] = $client->Query ( "Corsa4" ); + +// final fixup; we don't want to compare times +for ( $i=0; $i + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL auto_increment, + `section` int(11) NOT NULL, + `system_id` tinyint(4) NOT NULL, + `adtext` varchar(255) NOT NULL, + `heading` varchar(500) NOT NULL, + `price` int(11) NOT NULL default '0', + `postcode` varchar(10) NOT NULL, + `gre` int(11) NOT NULL, + `grn` int(11) NOT NULL, + `str_at1` varchar(255) NOT NULL, + `str_at2` varchar(255) NOT NULL, + `str_at3` varchar(255) NOT NULL, + `str_at4` varchar(255) NOT NULL, + `str_at5` varchar(255) NOT NULL, + `int_at1` int(11) default NULL, + `int_at2` int(11) default NULL, + `int_at3` int(11) default NULL, + `int_at4` int(11) default NULL, + `int_at5` int(11) default NULL, + `float_at1` float default NULL, + `float_at2` float default NULL, + `float_at3` float default NULL, + `lng` float NOT NULL default '0', + `lat` float NOT NULL default '0', + `make_id` int(11) NOT NULL, + `transmission_id` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `section`, `system_id`, `adtext`, `heading`, `price`, `postcode`, `gre`, `grn`, `str_at1`, `str_at2`, `str_at3`, `str_at4`, `str_at5`, `int_at1`, `int_at2`, `int_at3`, `int_at4`, `int_at5`, `float_at1`, `float_at2`, `float_at3`, `lng`, `lat`, `make_id`, `transmission_id`) VALUES +(1, 1, 2, 'FORD', 'Ford KA', 2790, 'EN3 5BT', 535000, 197400, 'Ford', 'KA', 'Grey', 'Diesel', '', 18662, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.1798578, 0.937717, 8, 1), +(2, 1, 3, 'FORDE', 'Vauxhall Corsa1', 5800, 'BN42 4RN', 524000, 106100, 'Vauxhall', 'Corsa', 'Red', 'Petrol', '', 19296, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.2799989, 0.891975, 7, 2), +(3, 1, 4, 'FORDZ', 'Vauxhall Corsa2', 5200, 'BN42 4RN', 524000, 106100, 'Vauxhall', 'Corsa', 'Red', 'Petrol', '', 19296, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.3799989, 0.791975, 6, 3), +(4, 1, 5, 'FORDT', 'Vauxhall Corsa4', 3800, 'BN42 4N', 524000, 106100, 'Vauxhall', 'Corsa', 'Red', 'Petrol', '', 19296, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.4799989, 0.691975, 5, 4), +(211250, 0, 1, 'Quattro Roadster', 'Audi TT', 13995, 'E9 7DG', 535600, 184200, '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.5721455, 0.526761, 29, 5); + + + diff --git a/coreseek/csft-4.1/test/test_097/model.bin b/coreseek/csft-4.1/test/test_097/model.bin new file mode 100755 index 0000000..9642672 --- /dev/null +++ b/coreseek/csft-4.1/test/test_097/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:4:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:20:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"12";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"13";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"14";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"15";}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"16";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"17";}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"18";}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"19";}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"20";}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"21";}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"22";}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"23";}}i:14;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"24";}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"25";}}i:16;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"26";}}i:17;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"27";}}i:18;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"28";}}i:19;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"29";}}i:20;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"30";}}}s:5:"total";s:4:"1000";s:11:"total_found";s:4:"1024";s:4:"time";s:5:"0.008";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:20:{i:1;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"11";}}i:2;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"12";}}i:3;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"13";}}i:5;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"15";}}i:6;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"16";}}i:7;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"17";}}i:9;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"19";}}i:10;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"20";}}i:11;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"21";}}i:13;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"23";}}i:14;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"24";}}i:15;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"25";}}i:17;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"27";}}i:18;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"28";}}i:19;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"29";}}i:21;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"31";}}i:22;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"32";}}i:23;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"33";}}i:25;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"35";}}i:26;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"36";}}}s:5:"total";s:3:"768";s:11:"total_found";s:3:"768";s:4:"time";s:5:"0.007";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:3:"768";s:4:"hits";s:3:"768";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"gid";s:2:"11";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1464";s:5:"attrs";a:1:{s:3:"gid";s:2:"11";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:3:"768";s:4:"hits";s:3:"768";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_097/test.xml b/coreseek/csft-4.1/test/test_097/test.xml new file mode 100755 index 0000000..bab2629 --- /dev/null +++ b/coreseek/csft-4.1/test/test_097/test.xml @@ -0,0 +1,61 @@ + + + +cutoff + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT document_id, document_id+10 gid, title FROM test_table + sql_attr_uint = gid +} + +index test +{ + source = srctest + path = /test +} + + + + +test + +test + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `title` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO test_table VALUES ( 1, 'test' ), ( 2, 'test' ), ( 3, 'test' ), ( 4, 'it' ) +INSERT INTO test_table SELECT document_id+4, title FROM test_table +INSERT INTO test_table SELECT document_id+8, title FROM test_table +INSERT INTO test_table SELECT document_id+16, title FROM test_table +INSERT INTO test_table SELECT document_id+32, title FROM test_table +INSERT INTO test_table SELECT document_id+64, title FROM test_table +INSERT INTO test_table SELECT document_id+128, title FROM test_table +INSERT INTO test_table SELECT document_id+256, title FROM test_table +INSERT INTO test_table SELECT document_id+512, title FROM test_table + + diff --git a/coreseek/csft-4.1/test/test_098/model.bin b/coreseek/csft-4.1/test/test_098/model.bin new file mode 100755 index 0000000..ccfecb5 --- /dev/null +++ b/coreseek/csft-4.1/test/test_098/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:16:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:10:"google$com";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"google$com";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:8:"foo(bar)";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"foo(bar)";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:3:{s:3:"foo";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"(bar";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:1:")";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"foo\(bar\)";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:10:"google$com";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"google$com";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"foo";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"bar";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"foo(bar)";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:8:"foo(bar)";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"foo\(bar\)";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"1695";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:8:"foo(bar)";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""foo(bar)"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"run";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:6;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"run";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"runer";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"run\-time";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:7:"run-tim";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"run\-time";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:5;a:2:{s:6:"weight";s:4:"1643";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"runer";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"run time";}i:12;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"run";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"run time";}i:13;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ('run-time (run time) issue', 'wf1')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:9:"tokenized";s:8:"run time";s:10:"normalized";s:5:"runer";}i:1;a:2:{s:9:"tokenized";s:8:"run time";s:10:"normalized";s:5:"runer";}i:2;a:2:{s:9:"tokenized";s:5:"issue";s:10:"normalized";s:4:"issu";}}}i:14;a:3:{s:8:"sphinxql";s:50:"CALL KEYWORDS ('run-time (run time) issue', 'wf2')";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:2:{s:9:"tokenized";s:8:"run-time";s:10:"normalized";s:7:"run-tim";}i:1;a:2:{s:9:"tokenized";s:3:"run";s:10:"normalized";s:3:"run";}i:2;a:2:{s:9:"tokenized";s:4:"time";s:10:"normalized";s:4:"time";}i:3;a:2:{s:9:"tokenized";s:5:"issue";s:10:"normalized";s:4:"issu";}}}i:15;a:3:{s:8:"sphinxql";s:44:"SELECT * from wf3 where match ('word2word2')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_098/test.xml b/coreseek/csft-4.1/test/test_098/test.xml new file mode 100755 index 0000000..2b197c8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_098/test.xml @@ -0,0 +1,129 @@ + + +specials vs charset_table vs match_mode + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE document_id IN (1,2,3,4) +} + +index main +{ + source = src + path = /main + charset_table = 0..9, A..Z->a..z, _, a..z, (, ), $ +} + +source src_wf +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE document_id>4 +} + +index wf1 +{ + source = src_wf + path = /wf1 + morphology = stem_en + charset_type = utf-8 + charset_table = 0..9, A..Z->a..z, a..z, + wordforms = test_098/wordforms.txt +} + +index wf2 +{ + source = src_wf + path = /wf2 + morphology = stem_en + charset_type = utf-8 + charset_table = 0..9, A..Z->a..z, a..z, - + wordforms = test_098/wordforms.txt +} + +source src_wf3 +{ + type = mysql + + sql_query = SELECT * FROM test_wf3 +} + + +index wf3 +{ + source = src_wf3 + path = /wf3 + morphology = stem_en + charset_type = utf-8 + charset_table = -, 0..9, A..Z->a..z, _, a..z + wordforms = test_098/wf3.txt +} + + + + +google$com +foo(bar) +foo\(bar\) +google$com +foo(bar) +foo\(bar\) +"foo(bar)" + +run +run +run\-time +run\-time +run time +run time + + +CALL KEYWORDS ('run-time (run time) issue', 'wf1') +CALL KEYWORDS ('run-time (run time) issue', 'wf2') + +SELECT * from wf3 where match ('word2word2') + + + + +CREATE TABLE test_table ( + document_id INTEGER NOT NULL PRIMARY KEY, + title VARCHAR(255) NOT NULL ) + + +CREATE TABLE test_wf3 ( + document_id INTEGER NOT NULL PRIMARY KEY, + title VARCHAR(255) NOT NULL ) + + +DROP TABLE IF EXISTS test_table + + +DROP TABLE IF EXISTS test_wf3 + + +INSERT INTO test_table VALUES + ( 1, 'google dot com' ), + ( 2, 'foo beyond all bars' ), + ( 3, 'mangled google$com link' ), + ( 4, 'no idea why search for foo(bar), but they do' ), + ( 5, 'run-time error' ), + ( 6, 'running without trouble' ) + + +INSERT INTO test_wf3 VALUES + ( 1, 'word2word2 word4word4' ) + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_098/wf3.txt b/coreseek/csft-4.1/test/test_098/wf3.txt new file mode 100755 index 0000000..200f1d9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_098/wf3.txt @@ -0,0 +1,4 @@ +word11-11word11-11 > word11-11word11-11 +word2word2 > word11-11word11-11 +word2word2 word4word4 > word2word2 +word11-11word11-11 word5word5 > word11-11word11-11 diff --git a/coreseek/csft-4.1/test/test_098/wordforms.txt b/coreseek/csft-4.1/test/test_098/wordforms.txt new file mode 100755 index 0000000..6442c2d --- /dev/null +++ b/coreseek/csft-4.1/test/test_098/wordforms.txt @@ -0,0 +1 @@ +run-time > runer diff --git a/coreseek/csft-4.1/test/test_099/model.bin b/coreseek/csft-4.1/test/test_099/model.bin new file mode 100755 index 0000000..27e5720 --- /dev/null +++ b/coreseek/csft-4.1/test/test_099/model.bin @@ -0,0 +1 @@ +a:6:{i:0;a:1:{i:0;s:6:"failed";}i:1;a:1:{i:0;s:6:"failed";}i:2;a:11:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"101";s:4:"mva1";a:1:{i:0;s:4:"1001";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"test1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test1";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"test511";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"test511";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"test2048";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"test2048";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"test4000";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"test4000";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"101";s:4:"mva1";a:1:{i:0;s:4:"1001";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:64;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"164";s:4:"mva1";a:1:{i:0;s:4:"1064";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:65;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"165";s:4:"mva1";a:1:{i:0;s:4:"1065";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:127;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"227";s:4:"mva1";a:1:{i:0;s:4:"1127";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:8;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:128;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"228";s:4:"mva1";a:1:{i:0;s:4:"1128";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:9;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:129;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"229";s:4:"mva1";a:1:{i:0;s:4:"1129";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:130;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"230";s:4:"mva1";a:1:{i:0;s:4:"1130";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}i:3;a:11:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"101";s:4:"mva1";a:1:{i:0;s:4:"1001";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"test1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test1";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"test511";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"test511";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"test2048";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"test2048";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"test4000";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"test4000";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"101";s:4:"mva1";a:1:{i:0;s:4:"1001";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:64;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"164";s:4:"mva1";a:1:{i:0;s:4:"1064";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:65;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"165";s:4:"mva1";a:1:{i:0;s:4:"1065";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:127;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"227";s:4:"mva1";a:1:{i:0;s:4:"1127";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:8;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:128;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"228";s:4:"mva1";a:1:{i:0;s:4:"1128";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:9;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:129;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"229";s:4:"mva1";a:1:{i:0;s:4:"1129";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:5:"attr1";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:130;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:5:"attr1";s:3:"230";s:4:"mva1";a:1:{i:0;s:4:"1130";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}i:4;a:1:{i:0;s:6:"failed";}i:5;a:1:{i:0;s:6:"failed";}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_099/test.xml b/coreseek/csft-4.1/test/test_099/test.xml new file mode 100755 index 0000000..393e946 --- /dev/null +++ b/coreseek/csft-4.1/test/test_099/test.xml @@ -0,0 +1,176 @@ + + +block index vs MVA + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src_base +{ + type = mysql + +} + + +source src1 : src_base +{ + sql_query = SELECT document_id, text, mva1 FROM main_table + sql_attr_multi = uint mva2 from query; SELECT word_document_id, word_tag_id FROM tag_table; + sql_attr_multi = uint mva1 from field mva1 +} +source src2 : src_base +{ + sql_query = SELECT document_id, text, attr1, mva1 FROM main_table2 + sql_attr_multi = uint mva1 from field mva1 + sql_attr_uint = attr1 +} +source src3 : src_base +{ + sql_query = SELECT document_id, text, mva1 FROM main_table3 + sql_attr_multi = uint mva2 from query; SELECT word_document_id, word_tag_id FROM tag_table; + sql_attr_multi = uint mva1 from field mva1 +} +source src4 : src_base +{ + sql_query = SELECT document_id, text, mva1 FROM main_table2 + sql_attr_multi = uint mva2 from query; SELECT word_document_id, word_tag_id FROM tag_table; + sql_attr_multi = uint mva1 from field mva1 + sql_attr_str2ordinal = text +} + + +source src1 : src_base +{ + sql_query = SELECT document_id, text, mva1 FROM main_table + sql_attr_multi = bigint mva2 from query; SELECT word_document_id, word_tag_id FROM tag_table; + sql_attr_multi = bigint mva1 from field mva1 +} +source src2 : src_base +{ + sql_query = SELECT document_id, text, attr1, mva1 FROM main_table2 + sql_attr_multi = bigint mva1 from field mva1 + sql_attr_uint = attr1 +} +source src3 : src_base +{ + sql_query = SELECT document_id, text, mva1 FROM main_table3 + sql_attr_multi = bigint mva2 from query; SELECT word_document_id, word_tag_id FROM tag_table; + sql_attr_multi = bigint mva1 from field mva1 +} +source src4 : src_base +{ + sql_query = SELECT document_id, text, mva1 FROM main_table2 + sql_attr_multi = bigint mva2 from query; SELECT word_document_id, word_tag_id FROM tag_table; + sql_attr_multi = bigint mva1 from field mva1 + sql_attr_str2ordinal = text +} + + +index main +{ + + source = src1 + source = src2 + source = src3 + + + path = /main1 + docinfo = extern + charset_type = utf-8 + min_word_len = 1 +} + + + + test1 + test511 + test2048 + test4000 + + + + + + + + + + +CREATE TABLE `main_table` ( + `document_id` int(11), + `text` varchar(255) NOT NULL, + `mva1` varchar(255) NOT NULL +); + + +CREATE TABLE `main_table2` ( + `document_id` int(11) DEFAULT NULL, + `text` varchar(255) NOT NULL, + `attr1` int(11) DEFAULT NULL, + `mva1` varchar(255) NOT NULL +); + + +CREATE TABLE `main_table3` ( + `document_id` int(11), + `text` varchar(255) NOT NULL, + `mva1` varchar(255) NOT NULL +); + + +CREATE TABLE `tag_table` ( + `word_document_id` int(11) NOT NULL, + `word_tag_id` int(11) NOT NULL +); + + + +DROP TABLE IF EXISTS `main_table` + + +DROP TABLE IF EXISTS `main_table2` + + +DROP TABLE IF EXISTS `main_table3` + + +DROP TABLE IF EXISTS `tag_table` + + + +INSERT INTO `main_table` VALUES +( 1, 'test1', 'mva1' ), +( 511, 'test511', 'mva511' ), +( 2048, 'test2048', 'mva2048' ), +( 4000, 'test4000', 'mva4000' ); + + + + + diff --git a/coreseek/csft-4.1/test/test_100/model.bin b/coreseek/csft-4.1/test/test_100/model.bin new file mode 100755 index 0000000..f80a90e --- /dev/null +++ b/coreseek/csft-4.1/test/test_100/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:224:{i:0;a:2:{s:4:"opts";s:26:"phrase 0, force 0, limit 4";s:6:"result";a:4:{i:0;s:21:" ... test ... ";i:1;s:21:" ... test ... ";i:2;s:16:"test ... ";i:3;s:21:" ... test ... ";}}i:1;a:2:{s:4:"opts";s:26:"phrase 0, force 1, limit 4";s:6:"result";a:4:{i:0;s:37:" ... test ... text ... ";i:1;s:37:" ... test ... text ... ";i:2;s:16:"test ... ";i:3;s:37:" ... test ... text ... ";}}i:2;a:2:{s:4:"opts";s:26:"phrase 1, force 0, limit 4";s:6:"result";a:4:{i:0;s:9:"this ... ";i:1;s:12:"another ... ";i:2;s:9:"test ... ";i:3;s:10:"final ... ";}}i:3;a:2:{s:4:"opts";s:26:"phrase 1, force 1, limit 4";s:6:"result";a:4:{i:0;s:9:"this ... ";i:1;s:12:"another ... ";i:2;s:9:"test ... ";i:3;s:10:"final ... ";}}i:4;a:2:{s:4:"opts";s:26:"phrase 0, force 0, limit 5";s:6:"result";a:4:{i:0;s:21:" ... test ... ";i:1;s:21:" ... test ... ";i:2;s:17:"test ... ";i:3;s:21:" ... test ... ";}}i:5;a:2:{s:4:"opts";s:26:"phrase 0, force 1, limit 5";s:6:"result";a:4:{i:0;s:37:" ... test ... text ... ";i:1;s:37:" ... test ... text ... ";i:2;s:17:"test ... ";i:3;s:37:" ... test ... text ... ";}}i:6;a:2:{s:4:"opts";s:26:"phrase 1, force 0, limit 5";s:6:"result";a:4:{i:0;s:9:"this ... ";i:1;s:12:"another ... ";i:2;s:9:"test ... ";i:3;s:10:"final ... ";}}i:7;a:2:{s:4:"opts";s:26:"phrase 1, force 1, limit 5";s:6:"result";a:4:{i:0;s:9:"this ... ";i:1;s:12:"another ... ";i:2;s:9:"test ... ";i:3;s:10:"final ... ";}}i:8;a:2:{s:4:"opts";s:26:"phrase 0, force 0, limit 6";s:6:"result";a:4:{i:0;s:21:" ... test ... ";i:1;s:21:" ... test ... ";i:2;s:17:"test ... ";i:3;s:21:" ... test ... ";}}i:9;a:2:{s:4:"opts";s:26:"phrase 0, force 1, limit 6";s:6:"result";a:4:{i:0;s:37:" ... test ... text ... ";i:1;s:37:" ... test ... text ... ";i:2;s:17:"test ... ";i:3;s:37:" ... test ... text ... ";}}i:10;a:2:{s:4:"opts";s:26:"phrase 1, force 0, limit 6";s:6:"result";a:4:{i:0;s:10:"this ... ";i:1;s:12:"another ... ";i:2;s:10:"test ... ";i:3;s:10:"final ... ";}}i:11;a:2:{s:4:"opts";s:26:"phrase 1, force 1, limit 6";s:6:"result";a:4:{i:0;s:10:"this ... ";i:1;s:12:"another ... ";i:2;s:10:"test ... ";i:3;s:10:"final ... ";}}i:12;a:2:{s:4:"opts";s:26:"phrase 0, force 0, limit 7";s:6:"result";a:4:{i:0;s:21:" ... test ... ";i:1;s:21:" ... test ... ";i:2;s:17:"test ... ";i:3;s:21:" ... test ... ";}}i:13;a:2:{s:4:"opts";s:26:"phrase 0, force 1, limit 7";s:6:"result";a:4:{i:0;s:37:" ... test ... text ... ";i:1;s:37:" ... test ... text ... ";i:2;s:17:"test ... ";i:3;s:37:" ... test ... text ... ";}}i:14;a:2:{s:4:"opts";s:26:"phrase 1, force 0, limit 7";s:6:"result";a:4:{i:0;s:10:"this ... ";i:1;s:12:"another ... ";i:2;s:10:"test ... ";i:3;s:11:"final ... ";}}i:15;a:2:{s:4:"opts";s:26:"phrase 1, force 1, limit 7";s:6:"result";a:4:{i:0;s:10:"this ... ";i:1;s:12:"another ... ";i:2;s:10:"test ... ";i:3;s:11:"final ... ";}}i:16;a:2:{s:4:"opts";s:26:"phrase 0, force 0, limit 8";s:6:"result";a:4:{i:0;s:37:" ... test ... text ... ";i:1;s:37:" ... test ... text ... ";i:2;s:17:"test ... ";i:3;s:37:" ... test ... text ... ";}}i:17;a:2:{s:4:"opts";s:26:"phrase 0, force 1, limit 8";s:6:"result";a:4:{i:0;s:37:" ... test ... text ... ";i:1;s:37:" ... test ... text ... ";i:2;s:17:"test ... ";i:3;s:37:" ... test ... text ... ";}}i:18;a:2:{s:4:"opts";s:26:"phrase 1, force 0, limit 8";s:6:"result";a:4:{i:0;s:12:"this is ... ";i:1;s:12:"another ... ";i:2;s:10:"test ... ";i:3;s:11:"final ... ";}}i:19;a:2:{s:4:"opts";s:26:"phrase 1, force 1, limit 8";s:6:"result";a:4:{i:0;s:12:"this is ... ";i:1;s:12:"another ... ";i:2;s:10:"test ... ";i:3;s:11:"final ... ";}}i:20;a:2:{s:4:"opts";s:26:"phrase 0, force 0, limit 9";s:6:"result";a:4:{i:0;s:33:" ... test text ... ";i:1;s:33:" ... test text ... ";i:2;s:17:"test ... ";i:3;s:33:" ... text test ... ";}}i:21;a:2:{s:4:"opts";s:26:"phrase 0, force 1, limit 9";s:6:"result";a:4:{i:0;s:33:" ... test text ... ";i:1;s:33:" ... test text ... ";i:2;s:17:"test ... ";i:3;s:33:" ... text test ... ";}}i:22;a:2:{s:4:"opts";s:26:"phrase 1, force 0, limit 9";s:6:"result";a:4:{i:0;s:26:" ... test text ... ";i:1;s:26:" ... test text ... ";i:2;s:10:"test ... ";i:3;s:11:"final ... ";}}i:23;a:2:{s:4:"opts";s:26:"phrase 1, force 1, limit 9";s:6:"result";a:4:{i:0;s:26:" ... test text ... ";i:1;s:26:" ... test text ... ";i:2;s:10:"test ... ";i:3;s:11:"final ... ";}}i:24;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 10";s:6:"result";a:4:{i:0;s:34:" ... test text ... ";i:1;s:34:" ... test text ... ";i:2;s:17:"test ... ";i:3;s:34:" ... text test ... ";}}i:25;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 10";s:6:"result";a:4:{i:0;s:34:" ... test text ... ";i:1;s:34:" ... test text ... ";i:2;s:17:"test ... ";i:3;s:34:" ... text test ... ";}}i:26;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 10";s:6:"result";a:4:{i:0;s:27:" ... test text ... ";i:1;s:27:" ... test text ... ";i:2;s:10:"test ... ";i:3;s:11:"final ... ";}}i:27;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 10";s:6:"result";a:4:{i:0;s:27:" ... test text ... ";i:1;s:27:" ... test text ... ";i:2;s:10:"test ... ";i:3;s:11:"final ... ";}}i:28;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 11";s:6:"result";a:4:{i:0;s:34:" ... test text ... ";i:1;s:34:" ... test text ... ";i:2;s:23:"test number ... ";i:3;s:34:" ... text test ... ";}}i:29;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 11";s:6:"result";a:4:{i:0;s:34:" ... test text ... ";i:1;s:34:" ... test text ... ";i:2;s:23:"test number ... ";i:3;s:34:" ... text test ... ";}}i:30;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 11";s:6:"result";a:4:{i:0;s:27:" ... test text ... ";i:1;s:27:" ... test text ... ";i:2;s:10:"test ... ";i:3;s:15:"final test ... ";}}i:31;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 11";s:6:"result";a:4:{i:0;s:27:" ... test text ... ";i:1;s:27:" ... test text ... ";i:2;s:10:"test ... ";i:3;s:15:"final test ... ";}}i:32;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 12";s:6:"result";a:4:{i:0;s:36:" ... my test text ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:34:" ... text test ... ";}}i:33;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 12";s:6:"result";a:4:{i:0;s:36:" ... my test text ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:34:" ... text test ... ";}}i:34;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 12";s:6:"result";a:4:{i:0;s:29:" ... my test text ... ";i:1;s:27:" ... test text ... ";i:2;s:16:"test number ... ";i:3;s:16:"final test, ... ";}}i:35;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 12";s:6:"result";a:4:{i:0;s:29:" ... my test text ... ";i:1;s:27:" ... test text ... ";i:2;s:16:"test number ... ";i:3;s:16:"final test, ... ";}}i:36;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 13";s:6:"result";a:4:{i:0;s:37:" ... my test text ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:34:" ... text test ... ";}}i:37;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 13";s:6:"result";a:4:{i:0;s:37:" ... my test text ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:34:" ... text test ... ";}}i:38;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 13";s:6:"result";a:4:{i:0;s:30:" ... my test text ... ";i:1;s:27:" ... test text ... ";i:2;s:17:"test number ... ";i:3;s:17:"final test, ... ";}}i:39;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 13";s:6:"result";a:4:{i:0;s:30:" ... my test text ... ";i:1;s:27:" ... test text ... ";i:2;s:17:"test number ... ";i:3;s:17:"final test, ... ";}}i:40;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 14";s:6:"result";a:4:{i:0;s:37:" ... my test text ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:34:" ... text test ... ";}}i:41;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 14";s:6:"result";a:4:{i:0;s:37:" ... my test text ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:34:" ... text test ... ";}}i:42;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 14";s:6:"result";a:4:{i:0;s:30:" ... my test text ... ";i:1;s:27:" ... test text ... ";i:2;s:17:"test number ... ";i:3;s:17:"final test, ... ";}}i:43;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 14";s:6:"result";a:4:{i:0;s:30:" ... my test text ... ";i:1;s:27:" ... test text ... ";i:2;s:17:"test number ... ";i:3;s:17:"final test, ... ";}}i:44;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 15";s:6:"result";a:4:{i:0;s:39:" ... my test text to ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:34:" ... text test ... ";}}i:45;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 15";s:6:"result";a:4:{i:0;s:39:" ... my test text to ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:34:" ... text test ... ";}}i:46;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 15";s:6:"result";a:4:{i:0;s:32:" ... my test text to ... ";i:1;s:27:" ... test text ... ";i:2;s:17:"test number ... ";i:3;s:17:"final test, ... ";}}i:47;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 15";s:6:"result";a:4:{i:0;s:32:" ... my test text to ... ";i:1;s:27:" ... test text ... ";i:2;s:17:"test number ... ";i:3;s:17:"final test, ... ";}}i:48;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 16";s:6:"result";a:4:{i:0;s:40:" ... my test text to ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:40:" ... phrase text test ... ";}}i:49;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 16";s:6:"result";a:4:{i:0;s:40:" ... my test text to ... ";i:1;s:34:" ... test text ... ";i:2;s:24:"test number ... ";i:3;s:40:" ... phrase text test ... ";}}i:50;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 16";s:6:"result";a:4:{i:0;s:33:" ... my test text to ... ";i:1;s:27:" ... test text ... ";i:2;s:17:"test number ... ";i:3;s:20:"final test, not ... ";}}i:51;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 16";s:6:"result";a:4:{i:0;s:33:" ... my test text to ... ";i:1;s:27:" ... test text ... ";i:2;s:17:"test number ... ";i:3;s:20:"final test, not ... ";}}i:52;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 17";s:6:"result";a:4:{i:0;s:40:" ... my test text to ... ";i:1;s:36:"another test text ... ";i:2;s:29:"test number three ... ";i:3;s:41:" ... phrase text test ... ";}}i:53;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 17";s:6:"result";a:4:{i:0;s:40:" ... my test text to ... ";i:1;s:36:"another test text ... ";i:2;s:29:"test number three ... ";i:3;s:41:" ... phrase text test ... ";}}i:54;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 17";s:6:"result";a:4:{i:0;s:33:" ... my test text to ... ";i:1;s:29:"another test text ... ";i:2;s:17:"test number ... ";i:3;s:21:"final test, not ... ";}}i:55;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 17";s:6:"result";a:4:{i:0;s:33:" ... my test text to ... ";i:1;s:29:"another test text ... ";i:2;s:17:"test number ... ";i:3;s:21:"final test, not ... ";}}i:56;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 18";s:6:"result";a:4:{i:0;s:42:" ... is my test text to ... ";i:1;s:37:"another test text ... ";i:2;s:30:"test number three, ... ";i:3;s:41:" ... phrase text test ... ";}}i:57;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 18";s:6:"result";a:4:{i:0;s:42:" ... is my test text to ... ";i:1;s:37:"another test text ... ";i:2;s:30:"test number three, ... ";i:3;s:41:" ... phrase text test ... ";}}i:58;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 18";s:6:"result";a:4:{i:0;s:35:" ... is my test text to ... ";i:1;s:30:"another test text ... ";i:2;s:22:"test number three ... ";i:3;s:21:"final test, not ... ";}}i:59;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 18";s:6:"result";a:4:{i:0;s:35:" ... is my test text to ... ";i:1;s:30:"another test text ... ";i:2;s:22:"test number three ... ";i:3;s:21:"final test, not ... ";}}i:60;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 19";s:6:"result";a:4:{i:0;s:43:" ... is my test text to ... ";i:1;s:37:"another test text ... ";i:2;s:31:"test number three, ... ";i:3;s:43:" ... phrase text test as ... ";}}i:61;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 19";s:6:"result";a:4:{i:0;s:43:" ... is my test text to ... ";i:1;s:37:"another test text ... ";i:2;s:31:"test number three, ... ";i:3;s:43:" ... phrase text test as ... ";}}i:62;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 19";s:6:"result";a:4:{i:0;s:36:" ... is my test text to ... ";i:1;s:30:"another test text ... ";i:2;s:23:"test number three, ... ";i:3;s:21:"final test, not ... ";}}i:63;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 19";s:6:"result";a:4:{i:0;s:36:" ... is my test text to ... ";i:1;s:30:"another test text ... ";i:2;s:23:"test number three, ... ";i:3;s:21:"final test, not ... ";}}i:64;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 20";s:6:"result";a:4:{i:0;s:43:" ... is my test text to ... ";i:1;s:39:"another test text to ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:65;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 20";s:6:"result";a:4:{i:0;s:43:" ... is my test text to ... ";i:1;s:39:"another test text to ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:66;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 20";s:6:"result";a:4:{i:0;s:36:" ... is my test text to ... ";i:1;s:32:"another test text to ... ";i:2;s:24:"test number three, ... ";i:3;s:21:"final test, not ... ";}}i:67;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 20";s:6:"result";a:4:{i:0;s:36:" ... is my test text to ... ";i:1;s:32:"another test text to ... ";i:2;s:24:"test number three, ... ";i:3;s:21:"final test, not ... ";}}i:68;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 21";s:6:"result";a:4:{i:0;s:45:" ... is my test text to be ... ";i:1;s:40:"another test text to ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:69;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 21";s:6:"result";a:4:{i:0;s:45:" ... is my test text to be ... ";i:1;s:40:"another test text to ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:70;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 21";s:6:"result";a:4:{i:0;s:38:" ... is my test text to be ... ";i:1;s:33:"another test text to ... ";i:2;s:24:"test number three, ... ";i:3;s:25:"final test, not only ... ";}}i:71;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 21";s:6:"result";a:4:{i:0;s:38:" ... is my test text to be ... ";i:1;s:33:"another test text to ... ";i:2;s:24:"test number three, ... ";i:3;s:25:"final test, not only ... ";}}i:72;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 22";s:6:"result";a:4:{i:0;s:46:" ... is my test text to be ... ";i:1;s:40:"another test text to ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:73;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 22";s:6:"result";a:4:{i:0;s:46:" ... is my test text to be ... ";i:1;s:40:"another test text to ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:74;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 22";s:6:"result";a:4:{i:0;s:39:" ... is my test text to be ... ";i:1;s:33:"another test text to ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:75;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 22";s:6:"result";a:4:{i:0;s:39:" ... is my test text to be ... ";i:1;s:33:"another test text to ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:76;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 23";s:6:"result";a:4:{i:0;s:46:" ... is my test text to be ... ";i:1;s:42:"another test text to be ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:77;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 23";s:6:"result";a:4:{i:0;s:46:" ... is my test text to be ... ";i:1;s:42:"another test text to be ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:78;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 23";s:6:"result";a:4:{i:0;s:39:" ... is my test text to be ... ";i:1;s:35:"another test text to be ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:79;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 23";s:6:"result";a:4:{i:0;s:39:" ... is my test text to be ... ";i:1;s:35:"another test text to be ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:80;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 24";s:6:"result";a:4:{i:0;s:46:" ... is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:81;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 24";s:6:"result";a:4:{i:0;s:46:" ... is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:82;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 24";s:6:"result";a:4:{i:0;s:39:" ... is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:83;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 24";s:6:"result";a:4:{i:0;s:39:" ... is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:84;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 25";s:6:"result";a:4:{i:0;s:46:" ... is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:85;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 25";s:6:"result";a:4:{i:0;s:46:" ... is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:31:"test number three, ... ";i:3;s:44:" ... phrase text test as ... ";}}i:86;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 25";s:6:"result";a:4:{i:0;s:39:" ... is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:87;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 25";s:6:"result";a:4:{i:0;s:39:" ... is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:88;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 26";s:6:"result";a:4:{i:0;s:45:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:38:"test number three, without ... ";i:3;s:44:" ... phrase text test as ... ";}}i:89;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 26";s:6:"result";a:4:{i:0;s:45:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:38:"test number three, without ... ";i:3;s:44:" ... phrase text test as ... ";}}i:90;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 26";s:6:"result";a:4:{i:0;s:38:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:91;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 26";s:6:"result";a:4:{i:0;s:38:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:24:"test number three, ... ";i:3;s:26:"final test, not only ... ";}}i:92;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 27";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:51:" ... swapped phrase text test as ... ";}}i:93;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 27";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:51:" ... swapped phrase text test as ... ";}}i:94;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 27";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:31:"test number three, without ... ";i:3;s:26:"final test, not only ... ";}}i:95;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 27";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:31:"test number three, without ... ";i:3;s:26:"final test, not only ... ";}}i:96;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 28";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as ... ";}}i:97;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 28";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as ... ";}}i:98;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 28";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:26:"final test, not only ... ";}}i:99;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 28";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:26:"final test, not only ... ";}}i:100;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 29";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as ... ";}}i:101;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 29";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as ... ";}}i:102;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 29";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:33:"final test, not only without ... ";}}i:103;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 29";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:33:"final test, not only without ... ";}}i:104;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 30";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as ... ";}}i:105;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 30";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as ... ";}}i:106;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 30";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:34:"final test, not only without ... ";}}i:107;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 30";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:34:"final test, not only without ... ";}}i:108;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 31";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as ... ";}}i:109;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 31";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as ... ";}}i:110;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 31";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:34:"final test, not only without ... ";}}i:111;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 31";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:34:"final test, not only without ... ";}}i:112;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 32";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:51:" ... swapped phrase text test as well";}}i:113;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 32";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:51:" ... swapped phrase text test as well";}}i:114;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 32";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:34:"final test, not only without ... ";}}i:115;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 32";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:34:"final test, not only without ... ";}}i:116;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 33";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as well";}}i:117;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 33";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as well";}}i:118;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 33";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:34:"final test, not only without ... ";}}i:119;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 33";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:32:"test number three, without ... ";i:3;s:34:"final test, not only without ... ";}}i:120;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 34";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as well";}}i:121;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 34";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:43:"another test text to be ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as well";}}i:122;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 34";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:38:"test number three, without phrase ... ";i:3;s:34:"final test, not only without ... ";}}i:123;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 34";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:36:"another test text to be ... ";i:2;s:38:"test number three, without phrase ... ";i:3;s:34:"final test, not only without ... ";}}i:124;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 35";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:54:"another test text to be highlighted ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as well";}}i:125;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 35";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:54:"another test text to be highlighted ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as well";}}i:126;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 35";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:47:"another test text to be highlighted ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:34:"final test, not only without ... ";}}i:127;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 35";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:47:"another test text to be highlighted ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:34:"final test, not only without ... ";}}i:128;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 36";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:55:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as well";}}i:129;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 36";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:55:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without ... ";i:3;s:52:" ... swapped phrase text test as well";}}i:130;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 36";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:48:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:40:"final test, not only without phrase ... ";}}i:131;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 36";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:48:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:40:"final test, not only without phrase ... ";}}i:132;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 37";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without ... ";i:3;s:56:" ... with swapped phrase text test as well";}}i:133;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 37";s:6:"result";a:4:{i:0;s:46:"this is my test text to be ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without ... ";i:3;s:56:" ... with swapped phrase text test as well";}}i:134;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 37";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:41:"final test, not only without phrase ... ";}}i:135;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 37";s:6:"result";a:4:{i:0;s:39:"this is my test text to be ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:41:"final test, not only without phrase ... ";}}i:136;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 38";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without ... ";i:3;s:57:" ... with swapped phrase text test as well";}}i:137;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 38";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without ... ";i:3;s:57:" ... with swapped phrase text test as well";}}i:138;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 38";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:41:"final test, not only without phrase ... ";}}i:139;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 38";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:41:"final test, not only without phrase ... ";}}i:140;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 39";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without ... ";i:3;s:57:" ... with swapped phrase text test as well";}}i:141;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 39";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without ... ";i:3;s:57:" ... with swapped phrase text test as well";}}i:142;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 39";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:41:"final test, not only without phrase ... ";}}i:143;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 39";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase ... ";i:3;s:41:"final test, not only without phrase ... ";}}i:144;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 40";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:145;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 40";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:146;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 40";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:41:"final test, not only without phrase ... ";}}i:147;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 40";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:41:"final test, not only without phrase ... ";}}i:148;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 41";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:149;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 41";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:150;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 41";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:41:"final test, not only without phrase ... ";}}i:151;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 41";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:41:"final test, not only without phrase ... ";}}i:152;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 42";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:153;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 42";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:154;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 42";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:46:"final test, not only without phrase match ... ";}}i:155;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 42";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:46:"final test, not only without phrase match ... ";}}i:156;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 43";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:157;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 43";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:158;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 43";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:47:"final test, not only without phrase match, ... ";}}i:159;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 43";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:47:"final test, not only without phrase match, ... ";}}i:160;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 44";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:161;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 44";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:162;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 44";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:48:"final test, not only without phrase match, ... ";}}i:163;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 44";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:48:"final test, not only without phrase match, ... ";}}i:164;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 45";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:165;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 45";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:166;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 45";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:48:"final test, not only without phrase match, ... ";}}i:167;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 45";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:48:"final test, not only without phrase match, ... ";}}i:168;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 46";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:169;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 46";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:170;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 46";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:48:"final test, not only without phrase match, ... ";}}i:171;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 46";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:48:"final test, not only without phrase match, ... ";}}i:172;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 47";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:173;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 47";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:174;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 47";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:51:"final test, not only without phrase match, but ... ";}}i:175;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 47";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:51:"final test, not only without phrase match, but ... ";}}i:176;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 48";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:177;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 48";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:56:"another test text to be highlighted, ... ";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:178;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 48";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:52:"final test, not only without phrase match, but ... ";}}i:179;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 48";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:49:"another test text to be highlighted, ... ";i:2;s:39:"test number three, without phrase match";i:3;s:52:"final test, not only without phrase match, but ... ";}}i:180;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 49";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:181;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 49";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:57:" ... with swapped phrase text test as well";}}i:182;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 49";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:52:"final test, not only without phrase match, but ... ";}}i:183;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 49";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:52:"final test, not only without phrase match, but ... ";}}i:184;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 50";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:185;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 50";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:186;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 50";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:52:"final test, not only without phrase match, but ... ";}}i:187;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 50";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:52:"final test, not only without phrase match, but ... ";}}i:188;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 51";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:189;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 51";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:190;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 51";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:52:"final test, not only without phrase match, but ... ";}}i:191;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 51";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:52:"final test, not only without phrase match, but ... ";}}i:192;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 52";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:193;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 52";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:194;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 52";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:56:"final test, not only without phrase match, but also ... ";}}i:195;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 52";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:56:"final test, not only without phrase match, but also ... ";}}i:196;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 53";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:197;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 53";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:198;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 53";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:199;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 53";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:200;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 54";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:201;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 54";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:202;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 54";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:203;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 54";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:204;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 55";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:205;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 55";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:206;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 55";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:207;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 55";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:208;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 56";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:209;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 56";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:210;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 56";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:211;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 56";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:212;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 57";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:213;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 57";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:214;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 57";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:215;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 57";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:57:"final test, not only without phrase match, but also ... ";}}i:216;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 58";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:217;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 58";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:218;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 58";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:62:"final test, not only without phrase match, but also above ... ";}}i:219;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 58";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:62:"final test, not only without phrase match, but also above ... ";}}i:220;a:2:{s:4:"opts";s:27:"phrase 0, force 0, limit 59";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:221;a:2:{s:4:"opts";s:27:"phrase 0, force 1, limit 59";s:6:"result";a:4:{i:0;s:57:"this is my test text to be highlighted ... ";i:1;s:62:"another test text to be highlighted, below limit";i:2;s:46:"test number three, without phrase match";i:3;s:93:"final test, not only without ... with swapped phrase text test as well";}}i:222;a:2:{s:4:"opts";s:27:"phrase 1, force 0, limit 59";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:63:"final test, not only without phrase match, but also above ... ";}}i:223;a:2:{s:4:"opts";s:27:"phrase 1, force 1, limit 59";s:6:"result";a:4:{i:0;s:50:"this is my test text to be highlighted ... ";i:1;s:55:"another test text to be highlighted, below limit";i:2;s:39:"test number three, without phrase match";i:3;s:63:"final test, not only without phrase match, but also above ... ";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_100/test.xml b/coreseek/csft-4.1/test/test_100/test.xml new file mode 100755 index 0000000..35319bf --- /dev/null +++ b/coreseek/csft-4.1/test/test_100/test.xml @@ -0,0 +1,71 @@ + + +snippets vs force_all_words + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} +source main +{ + type = mysql + + sql_query = select 1 as id, 'body' as body; +} + +index test_idx +{ + source = main + path = /main + docinfo = extern + charset_type = utf-8 + min_word_len = 1 +} + + + "", + "after_match" => "", + "chunk_separator" => " ... ", + "around" => 3, + "allow_empty"=>true +); + +$results = array(); + +for ($limit = 4; $limit < 60; ++$limit ) +foreach ( array(0,1) as $exact ) +foreach ( array(0,1) as $force ) +{ + $opts["exact_phrase"] = $exact; + $opts["force_all_words"] = $force; + $opts["limit"] = $limit; + $rs["opts"]="phrase $exact, force $force, limit $limit"; + $res = $client->BuildExcerpts ( $docs, $index, $words, $opts ); + if ( !$res ) + $rs["result"] = $client->GetLastError(); + else + $rs["result"] = $res; + $results[] = $rs; +} + +]]> + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_101/model.bin b/coreseek/csft-4.1/test/test_101/model.bin new file mode 100755 index 0000000..7af7228 --- /dev/null +++ b/coreseek/csft-4.1/test/test_101/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:26:{i:0;a:2:{s:8:"sphinxql";s:50:"insert into test (id,content) values (1,'content')";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:51:"insert into test1 (id,content) values (1,'content')";s:14:"total_affected";i:1;}i:2;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:3;a:3:{s:8:"sphinxql";s:19:"select * from test1";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:4;a:2:{s:8:"sphinxql";s:16:"set autocommit=0";s:14:"total_affected";i:0;}i:5;a:2:{s:8:"sphinxql";s:50:"insert into test (id,content) values (2,'content')";s:14:"total_affected";i:1;}i:6;a:3:{s:8:"sphinxql";s:51:"insert into test1 (id,content) values (2,'content')";s:5:"error";s:50:"current txn is working with another index ('test')";s:5:"errno";i:1064;}i:7;a:3:{s:8:"sphinxql";s:28:"delete from test1 where id=1";s:5:"error";s:50:"current txn is working with another index ('test')";s:5:"errno";i:1064;}i:8;a:2:{s:8:"sphinxql";s:27:"delete from test where id=1";s:14:"total_affected";i:0;}i:9;a:2:{s:8:"sphinxql";s:16:"set autocommit=1";s:14:"total_affected";i:0;}i:10;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:11;a:3:{s:8:"sphinxql";s:19:"select * from test1";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:12;a:2:{s:8:"sphinxql";s:5:"begin";s:14:"total_affected";i:0;}i:13;a:2:{s:8:"sphinxql";s:51:"insert into test1 (id,content) values (2,'content')";s:14:"total_affected";i:1;}i:14;a:2:{s:8:"sphinxql";s:8:"rollback";s:14:"total_affected";i:0;}i:15;a:3:{s:8:"sphinxql";s:19:"select * from test1";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:16;a:2:{s:8:"sphinxql";s:17:"start transaction";s:14:"total_affected";i:0;}i:17;a:2:{s:8:"sphinxql";s:51:"insert into test1 (id,content) values (2,'content')";s:14:"total_affected";i:1;}i:18;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:19;a:3:{s:8:"sphinxql";s:19:"select * from test1";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:20;a:2:{s:8:"sphinxql";s:16:"set autocommit=0";s:14:"total_affected";i:0;}i:21;a:2:{s:8:"sphinxql";s:50:"insert into test (id,content) values (3,'content')";s:14:"total_affected";i:1;}i:22;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:23;a:2:{s:8:"sphinxql";s:16:"set autocommit=1";s:14:"total_affected";i:0;}i:24;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}i:25;a:3:{s:8:"sphinxql";s:19:"select * from test1";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"0";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_101/test.xml b/coreseek/csft-4.1/test/test_101/test.xml new file mode 100755 index 0000000..f548beb --- /dev/null +++ b/coreseek/csft-4.1/test/test_101/test.xml @@ -0,0 +1,66 @@ + + + RT: basic transactional syntax + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + type = rt + path = data/test + rt_attr_uint = idd + rt_field = content +} + +index test1 +{ + type = rt + path = data/test1 + rt_attr_uint = idd + rt_field = content +} + + + + + insert into test (id,content) values (1,'content') + insert into test1 (id,content) values (1,'content') + select * from test + select * from test1 + set autocommit=0 + insert into test (id,content) values (2,'content') + insert into test1 (id,content) values (2,'content') + delete from test1 where id=1 + delete from test where id=1 + set autocommit=1 + select * from test + select * from test1 + begin + insert into test1 (id,content) values (2,'content') + rollback + select * from test1 + start transaction + insert into test1 (id,content) values (2,'content') + commit + select * from test1 + set autocommit=0 + insert into test (id,content) values (3,'content') + select * from test + set autocommit=1 + select * from test + select * from test1 + + + diff --git a/coreseek/csft-4.1/test/test_102/model.bin b/coreseek/csft-4.1/test/test_102/model.bin new file mode 100755 index 0000000..09c33eb --- /dev/null +++ b/coreseek/csft-4.1/test/test_102/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:2;s:4:"at_3";i:3;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"zlib";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"zlib";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:2;s:4:"at_3";i:3;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"mysql";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"mysql";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:2;s:4:"at_3";i:3;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:5:"hello";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"world";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:"hello world";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:2;s:4:"at_3";i:3;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"plain";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"plain";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:2;s:4:"at_3";i:3;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:9:"malformed";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"malformed";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:6:"t_zlib";i:1;s:7:"t_mysql";i:2;s:5:"plain";i:3;s:9:"t_mysql_2";}s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:1;s:4:"at_3";i:1;}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:3:{s:4:"at_1";i:1;s:4:"at_2";i:2;s:4:"at_3";i:3;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"broken";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"broken";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_102/test.xml b/coreseek/csft-4.1/test/test_102/test.xml new file mode 100755 index 0000000..623eb2b --- /dev/null +++ b/coreseek/csft-4.1/test/test_102/test.xml @@ -0,0 +1,74 @@ + + + +deadlock on threaded exit + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, t_zlib, at_1, t_mysql, plain, at_2, at_3, t_mysql_2 FROM test_table + + sql_attr_uint = at_1 + sql_attr_uint = at_2 + sql_attr_uint = at_3 +} + +index test_idx +{ + source = srctest + path = /test +} + + + + +CREATE TABLE test_table +( + id integer primary key not null auto_increment, + t_zlib blob, + t_mysql blob, + t_mysql_2 blob, + plain varchar(256), + at_1 int not null default 1, + at_2 int not null default 2, + at_3 int not null default 3 +) ENGINE=MYISAM + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (t_zlib, t_mysql, t_mysql_2, plain) VALUES +( 'zlib', NULL, NULL, 'plain' ), +( NULL, 'mysql', NULL, NULL ), +( 'test', 'hello', 'world', '' ), +( 'malformed', 'broken', NULL, NULL ), +( '', '', '', '' ); + + + +zlib +mysql +hello world +plain +malformed +broken + + + diff --git a/coreseek/csft-4.1/test/test_103/model.bin b/coreseek/csft-4.1/test/test_103/model.bin new file mode 100755 index 0000000..70b40ca --- /dev/null +++ b/coreseek/csft-4.1/test/test_103/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:3:{i:0;s:6:"adtext";i:1;s:7:"heading";i:2;s:8:"postcode";}s:5:"attrs";a:6:{s:3:"lng";i:5;s:3:"lat";i:5;s:7:"section";i:1;s:7:"make_id";i:1;s:15:"transmission_id";i:1;s:8:"@geodist";i:5;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"lng";d:-0.0798577964305877685546875;s:3:"lat";d:0.937717020511627197265625;s:7:"section";s:1:"1";s:7:"make_id";s:1:"8";s:15:"transmission_id";s:1:"1";s:8:"@geodist";d:0;}}i:211250;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:6:{s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;s:7:"section";s:1:"0";s:7:"make_id";s:2:"29";s:15:"transmission_id";s:1:"1";s:8:"@geodist";d:85369.6015625;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_103/test.xml b/coreseek/csft-4.1/test/test_103/test.xml new file mode 100755 index 0000000..cbded38 --- /dev/null +++ b/coreseek/csft-4.1/test/test_103/test.xml @@ -0,0 +1,100 @@ + + + fullscan filtering on virtual attributes + + indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srclj +{ + type = mysql + + + + sql_query = SELECT id, adtext, heading, postcode, lng, lat, section, make_id, transmission_id FROM test_table + + sql_attr_float = lng + sql_attr_float = lat + sql_attr_uint = section + sql_attr_uint = make_id + sql_attr_uint = transmission_id +} + + +index lj +{ + source = srclj + path = /lj + docinfo = extern + charset_type = utf-8 + min_word_len = 1 + charset_type = sbcs +} + + + + + lng + lat + @geodist + + + + $client->SetGeoAnchor ('lng','lat',-0.0798578,0.937717 ); + $client->SetFilterFloatRange ('@geodist', 0.0, 200000.0 ); + $results = $client->Query ( $query, $index ); + + + + + + +CREATE TABLE `test_table` ( + `id` int(11) NOT NULL auto_increment, + `section` int(11) NOT NULL, + `system_id` tinyint(4) NOT NULL, + `adtext` varchar(255) NOT NULL, + `heading` varchar(500) NOT NULL, + `price` int(11) NOT NULL default '0', + `postcode` varchar(10) NOT NULL, + `gre` int(11) NOT NULL, + `grn` int(11) NOT NULL, + `str_at1` varchar(255) NOT NULL, + `str_at2` varchar(255) NOT NULL, + `str_at3` varchar(255) NOT NULL, + `str_at4` varchar(255) NOT NULL, + `str_at5` varchar(255) NOT NULL, + `int_at1` int(11) default NULL, + `int_at2` int(11) default NULL, + `int_at3` int(11) default NULL, + `int_at4` int(11) default NULL, + `int_at5` int(11) default NULL, + `float_at1` float default NULL, + `float_at2` float default NULL, + `float_at3` float default NULL, + `lng` float NOT NULL default '0', + `lat` float NOT NULL default '0', + `make_id` int(11) NOT NULL, + `transmission_id` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `section`, `system_id`, `adtext`, `heading`, `price`, `postcode`, `gre`, `grn`, `str_at1`, `str_at2`, `str_at3`, `str_at4`, `str_at5`, `int_at1`, `int_at2`, `int_at3`, `int_at4`, `int_at5`, `float_at1`, `float_at2`, `float_at3`, `lng`, `lat`, `make_id`, `transmission_id`) VALUES +(1, 1, 2, 'FORD', 'Ford KA', 2790, 'EN3 5BT', 535000, 197400, 'Ford', 'KA', 'Grey', 'Diesel', '', 18662, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0798578, 0.937717, 8, 1), +(2, 1, 0, 'until', 'Vauxhall Corsa', 5800, 'BN42 4RN', 524000, 106100, 'Vauxhall', 'Corsa', 'Red', 'Petrol', '', 19296, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0799989, 0.891975, 5, 0), +(211250, 0, 1, 'Quattro Roadster', 'Audi TT', 13995, 'E9 7DG', 535600, 184200, '', '', '', '', '', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -0.0721455, 0.926761, 29, 1); + + diff --git a/coreseek/csft-4.1/test/test_104/model.bin b/coreseek/csft-4.1/test/test_104/model.bin new file mode 100755 index 0000000..9e10a91 --- /dev/null +++ b/coreseek/csft-4.1/test/test_104/model.bin @@ -0,0 +1 @@ +a:4:{i:0;a:1:{i:0;a:6:{i:0;b:1;i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;s:0:"";i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:4;s:0:"";i:5;b:1;}}i:1;a:1:{i:0;a:6:{i:0;b:1;i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;s:0:"";i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:4;s:0:"";i:5;b:0;}}i:2;a:1:{i:0;a:6:{i:0;b:1;i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;s:0:"";i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:4;s:0:"";i:5;b:1;}}i:3;a:1:{i:0;a:6:{i:0;b:1;i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;s:0:"";i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:4;s:0:"";i:5;b:0;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_104/test.xml b/coreseek/csft-4.1/test/test_104/test.xml new file mode 100755 index 0000000..b880691 --- /dev/null +++ b/coreseek/csft-4.1/test/test_104/test.xml @@ -0,0 +1,80 @@ + + + +persistent connections - *nix only + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + + client_timeout = 5 + client_timeout = 1 + + +workers = fork +workers = prefork + + +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, body FROM test_table +} + +index test_idx +{ + source = srctest + path = /test +} + + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES ( 1, 'test' ) + + +Open(); + +$results [] = $client->Query ( 'test' ); +$results [] = $client->GetLastError(); +sleep ( 2 ); +$results [] = $client->Query ( 'test' ); +$results [] = $client->GetLastError(); + +$results [] = $client->Close(); + +foreach ( $results as &$r ) + if ( is_array($r) ) + unset ( $r['time'] ); + +]]> + diff --git a/coreseek/csft-4.1/test/test_105/model.bin b/coreseek/csft-4.1/test/test_105/model.bin new file mode 100755 index 0000000..86f24ef --- /dev/null +++ b/coreseek/csft-4.1/test/test_105/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:6:{i:0;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:1;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:2;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:4;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:5;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:1;a:1:{i:0;a:6:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}i:2;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:3;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:4;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:5:"words";a:1:{s:5:"first";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}}i:5;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_105/test.xml b/coreseek/csft-4.1/test/test_105/test.xml new file mode 100755 index 0000000..d3b0604 --- /dev/null +++ b/coreseek/csft-4.1/test/test_105/test.xml @@ -0,0 +1,118 @@ + + + +rotation - *nix only + + + + + + + +searchd +{ + + + workers = fork + workers = prefork + +} + +source sql +{ + type = mysql + + + sql_query = select id, text from test_table where mode = (select mode from test_table where id = 1000); +} + +index index +{ + source = sql + path = /index +} + +source sql1 : sql +{ + sql_query = select id, text, 1 as idd1 from test_table; + + sql_attr_uint = idd1 +} + +source sql2 : sql +{ + sql_query = select id, text, 1 as idd1, 2 as idd2 from test_table; + + sql_attr_uint = idd1 + sql_attr_uint = idd2 +} + +index i1 +{ + source = sql1 + path = /index1 + docinfo = inline +} + +index i2 +{ + source = sql2 + path = /index2 + docinfo = inline +} + + + +drop table if exists test_table + + +create table test_table +( + id int not null, + text varchar(255) not null, + mode int +); + + + +insert into test_table values +( 1, 'first', 1 ), +( 2, 'second', 1 ), +( 3, 'third', 1 ), +( 4, 'fourth', 1 ), +( 5, 'fifth', 1 ), + +( 1, 'one', 2 ), +( 2, 'two', 2 ), +( 3, 'three', 2 ), + +( 1000, '', 1 ); + + +Query ( $words, "index" ); if ( $result ) { unset ( $result["time"] ); return $result; } else return $client->GetLastError(); '); + +$results = array(); +$errors = ''; + +$results[] = $query ( $client, 'first' ); +$results[] = $query ( $client, 'one' ); + +mysql_query ( 'update test_table set mode = 3 where id = 1000' ); +RunIndexer ( $errors, '--all --rotate' ); +sleep(2); + +$results[] = $query ( $client, 'first' ); +$results[] = $query ( $client, 'one' ); + +mysql_query ( 'update test_table set mode = 2 where id = 1000' ); +RunIndexer ( $errors, '--all --rotate' ); +sleep(2); + +$results[] = $query ( $client, 'first' ); +$results[] = $query ( $client, 'one' ); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_106/model.bin b/coreseek/csft-4.1/test/test_106/model.bin new file mode 100755 index 0000000..5377fe4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_106/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:3:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:10:"date_added";i:2;}s:7:"matches";a:9:{i:9;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1223510400;}}i:8;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1223424000;}}i:7;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1223337600;}}i:3;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1222992000;}}i:6;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1222992000;}}i:2;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1222905600;}}i:5;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1222905600;}}i:1;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1222819200;}}i:4;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1222819200;}}}s:5:"total";s:1:"9";s:11:"total_found";s:1:"9";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"6";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"one|two|three";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:10:"date_added";i:2;}s:7:"matches";a:9:{i:9;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1223510400;}}i:6;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1222992000;}}i:3;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1222992000;}}i:8;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1223424000;}}i:5;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1222905600;}}i:2;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1222905600;}}i:7;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1223337600;}}i:4;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1222819200;}}i:1;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1222819200;}}}s:5:"total";s:1:"9";s:11:"total_found";s:1:"9";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"6";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"one|two|three";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:1:{s:10:"date_added";i:2;}s:7:"matches";a:9:{i:9;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1223510400;}}i:6;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1222992000;}}i:3;a:2:{s:6:"weight";s:4:"3442";s:5:"attrs";a:1:{s:10:"date_added";i:1222992000;}}i:8;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1223424000;}}i:5;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1222905600;}}i:2;a:2:{s:6:"weight";s:4:"2414";s:5:"attrs";a:1:{s:10:"date_added";i:1222905600;}}i:7;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1223337600;}}i:4;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1222819200;}}i:1;a:2:{s:6:"weight";s:4:"1427";s:5:"attrs";a:1:{s:10:"date_added";i:1222819200;}}}s:5:"total";s:1:"9";s:11:"total_found";s:1:"9";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}s:3:"two";a:2:{s:4:"docs";s:1:"6";s:4:"hits";s:1:"6";}s:5:"three";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"one|two|three";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_106/test.xml b/coreseek/csft-4.1/test/test_106/test.xml new file mode 100755 index 0000000..8bccaa6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_106/test.xml @@ -0,0 +1,64 @@ + + + extended sort with more than 1 sorter + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query_pre = SET time_zone='+0:00' + sql_query = SELECT id, UNIX_TIMESTAMP(date_added) as date_added, text FROM test_table + sql_attr_timestamp = date_added +} + +index test +{ + source = srctest + path = /test + docinfo = extern +} + + + +CREATE TABLE `test_table` ( + id int(11) NOT NULL default '0', + date_added date not null, + text varchar(255) not null default 'text' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, '2008-10-01', 'one' ), +( 2, '2008-10-02', 'one two' ), +( 3, '2008-10-03', 'one two three' ), +( 4, '2008-10-01', 'one' ), +( 5, '2008-10-02', 'one two' ), +( 6, '2008-10-03', 'one two three' ), +( 7, '2008-10-07', 'one' ), +( 8, '2008-10-08', 'one two' ), +( 9, '2008-10-09', 'one two three' ); + + + + one|two|three + one|two|three + one|two|three + + + diff --git a/coreseek/csft-4.1/test/test_107/model.bin b/coreseek/csft-4.1/test/test_107/model.bin new file mode 100755 index 0000000..ca5522d --- /dev/null +++ b/coreseek/csft-4.1/test/test_107/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:9:{i:0;s:18:"total inserted=469";i:1;s:21:"query 0: total_rows=1";i:2;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:8:"group_id";s:4:"5001";}i:3;s:21:"query 1: total_rows=1";i:4;a:3:{s:2:"id";s:2:"50";s:6:"weight";s:1:"1";s:8:"group_id";s:4:"5050";}i:5;s:21:"query 2: total_rows=1";i:6;a:3:{s:2:"id";s:3:"450";s:6:"weight";s:1:"1";s:8:"group_id";s:4:"5450";}i:7;s:21:"query 3: total_rows=1";i:8;a:3:{s:2:"id";s:3:"469";s:6:"weight";s:1:"1";s:8:"group_id";s:4:"5469";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_107/test.xml b/coreseek/csft-4.1/test/test_107/test.xml new file mode 100755 index 0000000..1e71516 --- /dev/null +++ b/coreseek/csft-4.1/test/test_107/test.xml @@ -0,0 +1,130 @@ + + +RT: memory vs disk kill-list + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + type = rt + path = /testrt123 + rt_mem_limit = 128K + rt_attr_uint = group_id + rt_field = title + rt_field = content +} + +indexer +{ + mem_limit = 16M +} + +source dummysrc +{ + type = mysql + + sql_query = SELECT * FROM test_table where id=1 +} + +index dummysrcmain +{ + source = dummysrc + path = /dummysrcmain +} + + + + +CREATE TABLE test_table +( + id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, + title varchar(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + $value) + $foo[$key] = $value; + $results[] = $foo; + } + } +} + +@mysql_close($sock); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_108/data.xml b/coreseek/csft-4.1/test/test_108/data.xml new file mode 100755 index 0000000..34a06c4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_108/data.xml @@ -0,0 +1,22 @@ + + + + +test one +here is string attribute +ord1 two three +test1 is attr +ordd field +this is my test document number one. also checking search within phrases. + + + +test one +here is the second string attribute +ord2 bka ss cc +test2 is attr +orddf field +this is my test document number two. also checking search within phrases. + + + diff --git a/coreseek/csft-4.1/test/test_108/data2.xml b/coreseek/csft-4.1/test/test_108/data2.xml new file mode 100755 index 0000000..44e6fe3 --- /dev/null +++ b/coreseek/csft-4.1/test/test_108/data2.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + +test one +here is string attribute +ord1 two three +test1 is attr +ordd field +this is my test document number one. also checking search within phrases. + + + +test one +here is the second string attribute +ord2 bka ss cc +test2 is attr +orddf field +this is my test document number two. also checking search within phrases. + + + diff --git a/coreseek/csft-4.1/test/test_108/model.bin b/coreseek/csft-4.1/test/test_108/model.bin new file mode 100755 index 0000000..4f2f8a3 --- /dev/null +++ b/coreseek/csft-4.1/test/test_108/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:8:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:5:"title";i:1;s:7:"content";i:2;s:5:"sgidf";i:3;s:5:"orddf";}s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";i:7;s:4:"ordd";i:1;s:5:"sgidf";i:7;s:5:"orddf";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:5:{s:3:"gid";i:0;s:4:"sgid";s:24:"here is string attribute";s:4:"ordd";i:3;s:5:"sgidf";s:13:"test1 is attr";s:5:"orddf";i:2;}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:5:{s:3:"gid";i:0;s:4:"sgid";s:35:"here is the second string attribute";s:4:"ordd";i:4;s:5:"sgidf";s:13:"test2 is attr";s:5:"orddf";i:2;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:5:"title";i:1;s:7:"content";i:2;s:5:"sgidf";i:3;s:5:"orddf";}s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";i:7;s:4:"ordd";i:1;s:5:"sgidf";i:7;s:5:"orddf";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ord2";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"ord2";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:5:"title";i:1;s:7:"content";i:2;s:5:"sgidf";i:3;s:5:"orddf";}s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";i:7;s:4:"ordd";i:1;s:5:"sgidf";i:7;s:5:"orddf";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"gid";i:0;s:4:"sgid";s:35:"here is the second string attribute";s:4:"ordd";i:4;s:5:"sgidf";s:13:"test2 is attr";s:5:"orddf";i:2;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"orddf";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"orddf";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:5:"title";i:1;s:7:"content";i:2;s:5:"sgidf";i:3;s:5:"orddf";}s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";i:7;s:4:"ordd";i:1;s:5:"sgidf";i:7;s:5:"orddf";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"gid";i:0;s:4:"sgid";s:35:"here is the second string attribute";s:4:"ordd";i:4;s:5:"sgidf";s:13:"test2 is attr";s:5:"orddf";i:2;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"test2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test2";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:5:"title";i:1;s:7:"content";i:2;s:5:"sgidf";i:3;s:5:"orddf";}s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";i:7;s:4:"ordd";i:1;s:5:"sgidf";i:7;s:5:"orddf";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";s:24:"here is string attribute";s:4:"ordd";i:3;s:5:"sgidf";s:13:"test1 is attr";s:5:"orddf";i:2;}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";s:35:"here is the second string attribute";s:4:"ordd";i:4;s:5:"sgidf";s:13:"test2 is attr";s:5:"orddf";i:2;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:5:"title";i:1;s:7:"content";i:2;s:5:"sgidf";i:3;s:5:"orddf";}s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";i:7;s:4:"ordd";i:1;s:5:"sgidf";i:7;s:5:"orddf";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"ord2";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"ord2";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:5:"title";i:1;s:7:"content";i:2;s:5:"sgidf";i:3;s:5:"orddf";}s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";i:7;s:4:"ordd";i:1;s:5:"sgidf";i:7;s:5:"orddf";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";s:35:"here is the second string attribute";s:4:"ordd";i:4;s:5:"sgidf";s:13:"test2 is attr";s:5:"orddf";i:2;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"orddf";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"orddf";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:4:{i:0;s:5:"title";i:1;s:7:"content";i:2;s:5:"sgidf";i:3;s:5:"orddf";}s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";i:7;s:4:"ordd";i:1;s:5:"sgidf";i:7;s:5:"orddf";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:3:"gid";i:1;s:4:"sgid";s:35:"here is the second string attribute";s:4:"ordd";i:4;s:5:"sgidf";s:13:"test2 is attr";s:5:"orddf";i:2;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:5:"test2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"test2";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_108/test.xml b/coreseek/csft-4.1/test/test_108/test.xml new file mode 100755 index 0000000..c8b5901 --- /dev/null +++ b/coreseek/csft-4.1/test/test_108/test.xml @@ -0,0 +1,63 @@ + + + +xmlpipe2 string and wordcount attributes, defined in schema or in config + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = xmlpipe2 + xmlpipe_command = cat /data.xml + xmlpipe_field = title + xmlpipe_field = content + xmlpipe_attr_uint = gid + xmlpipe_attr_string = sgid + xmlpipe_attr_wordcount = ordd + xmlpipe_field_string = sgidf + xmlpipe_field_wordcount = orddf +} + +source src2 +{ + type = xmlpipe2 + xmlpipe_command = cat /data2.xml +} + +index idx +{ + source = src + path = /idx + charset_type = utf-8 +} + +index idx2 +{ + source = src2 + path = /idx2 + charset_type = utf-8 +} + + + + +test +ord2 +orddf +test2 +test +ord2 +orddf +test2 + + + diff --git a/coreseek/csft-4.1/test/test_109/model.bin b/coreseek/csft-4.1/test/test_109/model.bin new file mode 100755 index 0000000..e158ded --- /dev/null +++ b/coreseek/csft-4.1/test/test_109/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:6:{i:0;s:18:"total inserted=949";i:1;s:27:"id=21 query 0: total_rows=1";i:2;a:3:{s:2:"id";s:2:"21";s:6:"weight";s:1:"1";s:8:"group_id";s:5:"10900";}i:3;s:37:"match('gooddy') query 1: total_rows=1";i:4;a:3:{s:2:"id";s:2:"21";s:6:"weight";s:4:"1727";s:8:"group_id";s:5:"10900";}i:5;s:41:"segments merge: replaced=100, queried=790";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_109/test.xml b/coreseek/csft-4.1/test/test_109/test.xml new file mode 100755 index 0000000..3ed1d90 --- /dev/null +++ b/coreseek/csft-4.1/test/test_109/test.xml @@ -0,0 +1,161 @@ + + +RT: kill-list and segments merge + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + type = rt + path = /testrt123 + rt_mem_limit = 128K + rt_attr_uint = group_id + rt_field = title + rt_field = content +} + +index seg1 +{ + type = rt + path = /seg1 + rt_mem_limit = 32K + rt_attr_uint = gid + rt_field = body +} + + +indexer +{ + mem_limit = 16M +} + +source dummysrc +{ + type = mysql + + sql_query = SELECT * FROM test_table where id=1 +} + +index dummysrcmain +{ + source = dummysrc + path = /dummysrcmain +} + + + + +CREATE TABLE test_table +( + id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, + title varchar(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + $value) + $foo[$key] = $value; + $results[] = $foo; + } + } +} + +$replaced = 0; +$queried = 0; +for ( $i=0; $i<50; $i++ ) +{ + $res = array (); + $res[] = @mysql_query ( "REPLACE INTO seg1 ( id, gid, body ) VALUES ( $i, $i, 'text $i' )" ); + $res[] = @mysql_query ( "REPLACE INTO seg1 ( id, gid, body ) VALUES ( $i, $i, 'text $i' )" ); + foreach ( $res as $r ) + { + if ($r===true) + $replaced++; + } + $rq = @mysql_query ( "SELECT * FROM seg1 WHERE MATCH('text')" ); + $queried += mysql_num_rows ($rq); +} +$results[] = "segments merge: replaced=$replaced, queried=$queried"; + +@mysql_close($sock); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_110/model.bin b/coreseek/csft-4.1/test/test_110/model.bin new file mode 100755 index 0000000..a48bfc5 --- /dev/null +++ b/coreseek/csft-4.1/test/test_110/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"tag";i:1;}s:7:"matches";a:4:{i:200;a:2:{s:6:"weight";s:4:"1661";s:5:"attrs";a:1:{s:3:"tag";i:200;}}i:201;a:2:{s:6:"weight";s:4:"1661";s:5:"attrs";a:1:{s:3:"tag";i:201;}}i:202;a:2:{s:6:"weight";s:4:"1661";s:5:"attrs";a:1:{s:3:"tag";i:202;}}i:203;a:2:{s:6:"weight";s:4:"1661";s:5:"attrs";a:1:{s:3:"tag";i:203;}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"one";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:1:{s:3:"tag";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1661";s:5:"attrs";a:1:{s:3:"tag";i:200;}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"one";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_110/test.xml b/coreseek/csft-4.1/test/test_110/test.xml new file mode 100755 index 0000000..a47fae9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_110/test.xml @@ -0,0 +1,64 @@ + + + +naive guess about the block index + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + + sql_query = SELECT * FROM test_table + sql_attr_uint = tag +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 +} + + + + +one + + +one + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `tag` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + +INSERT INTO test_table VALUES ( 1,1,'' ), ( 2,2,'' ), ( 3,3,'' ), ( 4,4,'' ) +INSERT INTO test_table SELECT document_id+4, tag+4, body FROM test_table +INSERT INTO test_table SELECT document_id+8, tag+8, body FROM test_table +INSERT INTO test_table SELECT document_id+16, tag+16, body FROM test_table +INSERT INTO test_table SELECT document_id+32, tag+32, body FROM test_table +INSERT INTO test_table SELECT document_id+64, tag+64, body FROM test_table + +INSERT INTO test_table VALUES ( 200,200,'one' ), ( 201,201,'one two' ), ( 202,202,'one three' ), ( 203,203,'one four' ) + +DROP TABLE IF EXISTS test_table + + diff --git a/coreseek/csft-4.1/test/test_111/model.bin b/coreseek/csft-4.1/test/test_111/model.bin new file mode 100755 index 0000000..01b9329 --- /dev/null +++ b/coreseek/csft-4.1/test/test_111/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;}s:7:"matches";a:4:{i:0;a:3:{s:2:"id";i:1;s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;}}i:1;a:3:{s:2:"id";i:2;s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:11:"best_seller";i:2;s:13:"attributes_id";i:1;}}i:2;a:3:{s:2:"id";i:3;s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:11:"best_seller";i:3;s:13:"attributes_id";i:2;}}i:3;a:3:{s:2:"id";i:4;s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:11:"best_seller";i:4;s:13:"attributes_id";i:2;}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"3.689";s:5:"query";s:0:"";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:0;a:3:{s:2:"id";i:3;s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:11:"best_seller";i:3;s:13:"attributes_id";i:2;s:8:"@groupby";i:2;s:6:"@count";i:2;}}i:1;a:3:{s:2:"id";i:1;s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;s:8:"@groupby";i:1;s:6:"@count";i:2;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"3.689";s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_111/test.xml b/coreseek/csft-4.1/test/test_111/test.xml new file mode 100755 index 0000000..3e06558 --- /dev/null +++ b/coreseek/csft-4.1/test/test_111/test.xml @@ -0,0 +1,79 @@ + + + +fullscan on different result's schemas + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, best_seller, attributes_id, text FROM test_table + + sql_attr_uint = best_seller + sql_attr_uint = attributes_id +} + +index products +{ + source = srctest + path = /test +} + + + + +CREATE TABLE test_table +( + id integer primary key not null auto_increment, + best_seller int not null default 0, + attributes_id int not null default 0, + text varchar(256) +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (best_seller, attributes_id, text) VALUES +( 1, 1, 'text1' ), +( 2, 1, 'text2' ), +( 3, 2, 'text3' ), +( 4, 2, 'text4' ); + + + SetArrayResult (true); +$client->SetMatchMode (SPH_MATCH_EXTENDED2); +$client->SetSortMode (SPH_SORT_EXTENDED, 'best_seller ASC'); +$index = 'products'; +$query = ""; + +// First Query - contains only usual attrs in the schema +$client->AddQuery ($query, $index); + +//Second query - contains usual attrs, and also @group_by and @count attrs in the schema +$client->SetGroupBy ('attributes_id', SPH_GROUPBY_ATTR, 'attributes_id desc'); +$client->AddQuery ($query, $index); + +//Run queries +$results = $client->RunQueries(); +]]> + + + + diff --git a/coreseek/csft-4.1/test/test_112/model.bin b/coreseek/csft-4.1/test/test_112/model.bin new file mode 100755 index 0000000..d3174b8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_112/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;s:3:"lng";i:5;s:3:"lat";i:5;}s:7:"matches";a:4:{i:0;a:3:{s:2:"id";i:1;s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;s:3:"lng";d:-0.0798577964305877685546875;s:3:"lat";d:0.937717020511627197265625;}}i:1;a:3:{s:2:"id";i:2;s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:11:"best_seller";i:2;s:13:"attributes_id";i:1;s:3:"lng";d:-0.079998902976512908935546875;s:3:"lat";d:0.891974985599517822265625;}}i:2;a:3:{s:2:"id";i:3;s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:11:"best_seller";i:3;s:13:"attributes_id";i:2;s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;}}i:3;a:3:{s:2:"id";i:4;s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:11:"best_seller";i:4;s:13:"attributes_id";i:2;s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:1;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:5:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;s:3:"lng";i:5;s:3:"lat";i:5;s:8:"@geodist";i:5;}s:7:"matches";a:4:{i:0;a:3:{s:2:"id";i:2;s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:11:"best_seller";i:2;s:13:"attributes_id";i:1;s:3:"lng";d:-0.079998902976512908935546875;s:3:"lat";d:0.891974985599517822265625;s:8:"@geodist";d:291086.09375;}}i:1;a:3:{s:2:"id";i:3;s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:11:"best_seller";i:3;s:13:"attributes_id";i:2;s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;s:8:"@geodist";d:85369.6015625;}}i:2;a:3:{s:2:"id";i:4;s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:11:"best_seller";i:4;s:13:"attributes_id";i:2;s:3:"lng";d:-0.072145499289035797119140625;s:3:"lat";d:0.926760971546173095703125;s:8:"@geodist";d:85369.6015625;}}i:3;a:3:{s:2:"id";i:1;s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;s:3:"lng";d:-0.0798577964305877685546875;s:3:"lat";d:0.937717020511627197265625;s:8:"@geodist";d:0;}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_112/test.xml b/coreseek/csft-4.1/test/test_112/test.xml new file mode 100755 index 0000000..37919eb --- /dev/null +++ b/coreseek/csft-4.1/test/test_112/test.xml @@ -0,0 +1,85 @@ + + + +fullscan on empty multiquery with @geodist + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, best_seller, attributes_id, lng, lat, text FROM test_table + + sql_attr_uint = best_seller + sql_attr_uint = attributes_id + + sql_attr_float = lng + sql_attr_float = lat +} + +index products +{ + source = srctest + path = /test +} + + + + +CREATE TABLE test_table +( + id integer primary key not null auto_increment, + best_seller int not null default 0, + attributes_id int not null default 0, + `lng` float NOT NULL default '0', + `lat` float NOT NULL default '0', + text varchar(256) +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (best_seller, attributes_id, lng, lat, text) VALUES +( 1, 1, -0.0798578, 0.937717,'text1' ), +( 2, 1, -0.0799989, 0.891975, 'text2' ), +( 3, 2, -0.0721455, 0.926761, 'text3' ), +( 4, 2, -0.0721455, 0.926761, 'text4' ); + + + SetArrayResult (true); +$index = 'products'; +$query = ""; +$client->SetMatchMode (SPH_MATCH_EXTENDED2); + +// First query +$client->SetSortMode (SPH_SORT_EXTENDED, 'best_seller ASC'); +$client->AddQuery ($query, $index); + +//Second query +$client->SetGeoAnchor ('lng','lat',-0.0798578,0.937717 ); +$client->SetSortMode (SPH_SORT_EXTENDED, '@geodist DESC' ); +$client->AddQuery ($query, $index); + +//Run queries +$results = $client->RunQueries(); +]]> + + + + diff --git a/coreseek/csft-4.1/test/test_113/model.bin b/coreseek/csft-4.1/test/test_113/model.bin new file mode 100755 index 0000000..d3f2e13 --- /dev/null +++ b/coreseek/csft-4.1/test/test_113/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:10:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;}s:7:"matches";a:4:{i:0;a:3:{s:2:"id";i:1;s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:11:"best_seller";i:1;s:13:"attributes_id";i:1;}}i:1;a:3:{s:2:"id";i:2;s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:11:"best_seller";i:2;s:13:"attributes_id";i:1;}}i:2;a:3:{s:2:"id";i:3;s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:11:"best_seller";i:3;s:13:"attributes_id";i:2;}}i:3;a:3:{s:2:"id";i:4;s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:11:"best_seller";i:4;s:13:"attributes_id";i:2;}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"query";s:0:"";}i:1;a:4:{s:5:"error";s:101:"index products: parse error: unknown identifier 'manufacturers_id' (not an attribute, not a function)";s:7:"warning";s:0:"";s:6:"status";i:1;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_113/test.xml b/coreseek/csft-4.1/test/test_113/test.xml new file mode 100755 index 0000000..ac64763 --- /dev/null +++ b/coreseek/csft-4.1/test/test_113/test.xml @@ -0,0 +1,81 @@ + + + +catching errors in multiqueries + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +source srctest +{ + type = mysql + + sql_query = SELECT id, best_seller, attributes_id, text FROM test_table + + sql_attr_uint = best_seller + sql_attr_uint = attributes_id +} + +index products +{ + source = srctest + path = /test +} + + + + +CREATE TABLE test_table +( + id integer primary key not null auto_increment, + best_seller int not null default 0, + attributes_id int not null default 0, + text varchar(256) +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (best_seller, attributes_id, text) VALUES +( 1, 1, 'text1' ), +( 2, 1, 'text2' ), +( 3, 2, 'text3' ), +( 4, 2, 'text4' ); + + + SetArrayResult (true); +$client->SetMatchMode (SPH_MATCH_EXTENDED2); +$client->SetSortMode (SPH_SORT_EXTENDED, 'best_seller ASC'); +$index = 'products'; +$query = ""; + +// First Query +$client->AddQuery ($query, $index); + + +//Second query - note that manufacturers_id is absent in the schema, so it must fail the query, but *NOT* crash the searchd. +$client->SetSelect('manufacturers_id'); +$client->SetGroupBy ('manufacturers_id', SPH_GROUPBY_ATTR, 'manufacturers_id desc'); +$client->AddQuery ($query, $index); + +//Run queries +$results = $client->RunQueries(); +]]> + + + + diff --git a/coreseek/csft-4.1/test/test_114/model.bin b/coreseek/csft-4.1/test/test_114/model.bin new file mode 100755 index 0000000..1da1522 --- /dev/null +++ b/coreseek/csft-4.1/test/test_114/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:20:{i:511;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:17;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:18;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:19;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:3:"511";s:11:"total_found";s:3:"511";s:4:"time";s:5:"0.004";s:5:"words";a:2:{s:4:"aaaa";a:2:{s:4:"docs";s:3:"511";s:4:"hits";s:3:"512";}s:4:"bbbb";a:2:{s:4:"docs";s:3:"511";s:4:"hits";s:3:"512";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:""aaaa bbbb"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:20:{i:511;a:2:{s:6:"weight";s:3:"520";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:17;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:18;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:19;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:3:"511";s:11:"total_found";s:3:"511";s:4:"time";s:5:"0.004";s:5:"words";a:2:{s:4:"cccc";a:2:{s:4:"docs";s:3:"511";s:4:"hits";s:4:"1030";}s:4:"dddd";a:2:{s:4:"docs";s:3:"511";s:4:"hits";s:4:"1030";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:11:""cccc dddd"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_114/test.xml b/coreseek/csft-4.1/test/test_114/test.xml new file mode 100755 index 0000000..3b5bfef --- /dev/null +++ b/coreseek/csft-4.1/test/test_114/test.xml @@ -0,0 +1,60 @@ + + + +phrase matching vs hit buffer boundary + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 +} + + + + + + "aaaa bbbb" + + "cccc dddd" + + + +CREATE TABLE test_table +( + id INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + title TEXT NOT NULL +) ENGINE=MYISAM + + + +DROP TABLE IF EXISTS test_table + + diff --git a/coreseek/csft-4.1/test/test_115/model.bin b/coreseek/csft-4.1/test/test_115/model.bin new file mode 100755 index 0000000..099fb3b --- /dev/null +++ b/coreseek/csft-4.1/test/test_115/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:35:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.042";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:""a b" NEAR/2 "c d"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:""c d" NEAR/2 "a b"";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:4;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3444";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"2444";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2444";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:"a b NEAR/2 c d";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:11:{i:1;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}}s:5:"total";s:2:"11";s:11:"total_found";s:2:"11";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:"a NEAR/2 b NEAR/5 c NEAR/2 d";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:1;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:"a NEAR/3 b NEAR/3 c NEAR/3 d";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:1;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:"a NEAR/3 d NEAR/3 b NEAR/3 c";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:1;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"(a b c) NEAR/3 d";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:4:"3836";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:6:"burden";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:9:"financial";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}s:5:"share";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:"burden NEAR/2 (financial share)";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:4:"3836";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:6:"burden";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}s:5:"share";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}s:9:"financial";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:32:"burden NEAR/2 (share financial) ";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:4:"3836";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:5:"share";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}s:9:"financial";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}s:6:"burden";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:"(share financial) NEAR/2 burden";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:4:"3836";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:9:"financial";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}s:5:"share";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"3";}s:6:"burden";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:"(financial share) NEAR/2 burden";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:6:{s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"f";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:1:"g";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:""a b" NEAR/2 "c d" NEAR/2 "f g"";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:8:{i:1;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"4444";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:1:"a";a:2:{s:4:"docs";s:2:"15";s:4:"hits";s:2:"15";}s:1:"b";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"c";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}s:1:"d";a:2:{s:4:"docs";s:2:"14";s:4:"hits";s:2:"14";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:"a NEAR/3 b NEAR/3 c NEAR/3 d";}i:13;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"are";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"6";}s:4:"near";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""ARE NEAR"";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"are";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"6";}s:4:"near";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""ARE NEAR"";}i:15;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"are";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"6";}s:4:"near";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""ARE NEAR"";}i:16;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"are";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"6";}s:4:"near";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""ARE NEAR"";}i:17;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"are";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"6";}s:4:"near";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""ARE NEAR"";}i:18;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:"five NEAR/3 one";}i:19;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:"six NEAR/3 one";}i:20;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:4:"five";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"six";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"one";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:"(five|six) NEAR/3 one";}i:21;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:17;a:2:{s:6:"weight";s:4:"2723";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:5:"aleph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"gimel";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:18:"aleph NEAR/2 gimel";}i:22;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:17;a:2:{s:6:"weight";s:4:"2723";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"bet";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"he";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:"bet NEAR/3 he";}i:23;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:15:"aleph-bet-gimel";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"he";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:25:"aleph-bet-gimel NEAR/3 he";}i:24;a:3:{s:8:"sphinxql";s:52:"select * from idx where match ('aleph NEAR/2 gimel')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:2:"17";s:6:"weight";s:4:"2723";}}}i:25;a:3:{s:8:"sphinxql";s:47:"select * from idx where match ('bet NEAR/3 he')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:2:"17";s:6:"weight";s:4:"2723";}}}i:26;a:2:{s:8:"sphinxql";s:47:"select * from idx where match ('bet NEAR/2 he')";s:10:"total_rows";i:0;}i:27;a:3:{s:8:"sphinxql";s:59:"select * from idx where match ('aleph-bet-gimel NEAR/4 he')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:2:"17";s:6:"weight";s:4:"2723";}}}i:28;a:2:{s:8:"sphinxql";s:59:"select * from idx where match ('aleph-bet-gimel NEAR/3 he')";s:10:"total_rows";i:0;}i:29;a:3:{s:8:"sphinxql";s:99:"call snippets ('aleph-bet-gimel dalet he wav zajin het', 'idx', 'gimel NEAR/2 he', 1 as query_mode)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:52:"aleph-bet-gimel dalet he wav zajin het";}}}i:30;a:3:{s:8:"sphinxql";s:97:"call snippets ('aleph-bet-gimel dalet he wav zajin het', 'idx', 'bet NEAR/3 he', 1 as query_mode)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:52:"aleph-bet-gimel dalet he wav zajin het";}}}i:31;a:3:{s:8:"sphinxql";s:102:"call snippets ('aleph-bet-gimel dalet he wav zajin het', 'idx', 'aleph NEAR/2 gimel', 1 as query_mode)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:52:"aleph-bet-gimel dalet he wav zajin het";}}}i:32;a:3:{s:8:"sphinxql";s:102:"CALL SNIPPETS ('U.S.S.S.B s s s s today s s s s s tomorrow', 'idx', 'B NEAR/7 today', 1 as query_mode)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:56:"U.S.S.S.B s s s s today s s s s s tomorrow";}}}i:33;a:3:{s:8:"sphinxql";s:102:"CALL SNIPPETS ('U.S.S.S.A s s s s today s s s s s tomorrow', 'idx', 'A NEAR/7 today', 1 as query_mode)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:56:"U.S.S.S.A s s s s today s s s s s tomorrow";}}}i:34;a:3:{s:8:"sphinxql";s:59:"select * from idx where match ('oy NEAR/1 vey') and @id>=22";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:2:"22";s:6:"weight";s:4:"2633";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_115/test.xml b/coreseek/csft-4.1/test/test_115/test.xml new file mode 100755 index 0000000..10270da --- /dev/null +++ b/coreseek/csft-4.1/test/test_115/test.xml @@ -0,0 +1,111 @@ + + + +NEAR syntax + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 + blend_chars = U+002D # '-' +} + + + + + "a b" NEAR/2 "c d" + "c d" NEAR/2 "a b" + a b NEAR/2 c d + a NEAR/2 b NEAR/5 c NEAR/2 d + a NEAR/3 b NEAR/3 c NEAR/3 d + a NEAR/3 d NEAR/3 b NEAR/3 c + (a b c) NEAR/3 d + burden NEAR/2 (financial share) + burden NEAR/2 (share financial) + (share financial) NEAR/2 burden + (financial share) NEAR/2 burden + "a b" NEAR/2 "c d" NEAR/2 "f g" + a NEAR/3 b NEAR/3 c NEAR/3 d + "ARE NEAR" + "ARE NEAR" + "ARE NEAR" + "ARE NEAR" + "ARE NEAR" + five NEAR/3 one + six NEAR/3 one + (five|six) NEAR/3 one + aleph NEAR/2 gimel + bet NEAR/3 he + aleph-bet-gimel NEAR/3 he + + + +select * from idx where match ('aleph NEAR/2 gimel') +select * from idx where match ('bet NEAR/3 he') +select * from idx where match ('bet NEAR/2 he') +select * from idx where match ('aleph-bet-gimel NEAR/4 he') +select * from idx where match ('aleph-bet-gimel NEAR/3 he') +call snippets ('aleph-bet-gimel dalet he wav zajin het', 'idx', 'gimel NEAR/2 he', 1 as query_mode) +call snippets ('aleph-bet-gimel dalet he wav zajin het', 'idx', 'bet NEAR/3 he', 1 as query_mode) +call snippets ('aleph-bet-gimel dalet he wav zajin het', 'idx', 'aleph NEAR/2 gimel', 1 as query_mode) +CALL SNIPPETS ('U.S.S.S.B s s s s today s s s s s tomorrow', 'idx', 'B NEAR/7 today', 1 as query_mode) +CALL SNIPPETS ('U.S.S.S.A s s s s today s s s s s tomorrow', 'idx', 'A NEAR/7 today', 1 as query_mode) +select * from idx where match ('oy NEAR/1 vey') and @id>=22 + + + +CREATE TABLE test_table +( + id INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + title VARCHAR(16384) NOT NULL +); + + +INSERT INTO `test_table` VALUES +( 1, 'a b c d' ), +( 2, 'a x b c d' ), +( 3, 'a x x b c d' ), +( 4, 'a b x c d'), +( 5, 'a b x x c d' ), +( 6, 'a b x x x c d' ), +( 7, 'a b x x x x c d' ), +( 8, 'a x b x x x x c x d' ), +( 9, 'a x x b x x x c x x d' ), + +( 10, 'c d x x x x a b' ), +( 11, 'c d x x x a b' ), +( 12, 'c d x x a b' ), +( 13, 'c d x a b' ), +( 14, 'c d a b' ), + +( 15, '... is the clearinghouse associated with such exchange. In general, clearinghouses are backed by the corporate members of the clearinghouse who are required to share any financial burden resulting from the non-performance by one of their members and, as such, should significantly reduce this credit risk. In cases where the clearinghouse... is the clearinghouse associated with such exchange. In general, clearinghouses are backed by the corporate members of the clearinghouse who are required to share any financial burden resulting from the non-performance by one of their members and, as such, should significantly reduce this credit risk. In cases where the clearinghouse... be able to meet its obligations to a Trading Company. The counterparty for futures contracts traded in the United States and on most foreign exchanges is the clearinghouse associated with such exchange. In general, clearinghouses are backed by the corporate members of the clearinghouse who are required to share any financial...' ), +( 16, 'one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteena' ), +( 17, 'aleph-bet-gimel dalet he wav zajin het' ), + +( 20, 'ein oy vey' ), +( 21, CONCAT('zwei ',REPEAT('oy vey ho ho ho ',1024)) ), +( 22, 'oy vey drei' ) + + +DROP TABLE IF EXISTS test_table + + diff --git a/coreseek/csft-4.1/test/test_116/model.bin b/coreseek/csft-4.1/test/test_116/model.bin new file mode 100755 index 0000000..d12b9de --- /dev/null +++ b/coreseek/csft-4.1/test/test_116/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:3:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:1:"a";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}s:1:"b";a:2:{s:4:"docs";s:2:"10";s:4:"hits";s:2:"10";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""a b"~3";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:20:{i:521;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:17;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:18;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:19;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:20;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:21;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:22;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:23;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:24;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:25;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:26;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:27;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:28;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:29;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:3:"511";s:11:"total_found";s:3:"511";s:4:"time";s:5:"0.004";s:5:"words";a:2:{s:1:"e";a:2:{s:4:"docs";s:3:"511";s:4:"hits";s:3:"513";}s:1:"f";a:2:{s:4:"docs";s:3:"511";s:4:"hits";s:3:"513";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""e f"~2";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:522;a:2:{s:6:"weight";s:3:"532";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:1:"i";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:3:"532";}s:1:"j";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:3:"532";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""i j"~2";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_116/test.xml b/coreseek/csft-4.1/test/test_116/test.xml new file mode 100755 index 0000000..208e84d --- /dev/null +++ b/coreseek/csft-4.1/test/test_116/test.xml @@ -0,0 +1,71 @@ + + + +Bound cases of the proximity node + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 +} + + + + + + "a b"~3 + + "e f"~2 + + "i j"~2 + + + +CREATE TABLE test_table +( + id INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + title TEXT NOT NULL +) ENGINE=MYISAM + + + +DROP TABLE IF EXISTS test_table + + diff --git a/coreseek/csft-4.1/test/test_117/model.bin b/coreseek/csft-4.1/test/test_117/model.bin new file mode 100755 index 0000000..de90a5a --- /dev/null +++ b/coreseek/csft-4.1/test/test_117/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:5:{i:0;s:44:"query 0: total_rows=2 str=match('submarine')";i:1;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:4:"2774";s:3:"id1";s:2:"11";s:3:"id2";s:2:"11";}i:2;a:4:{s:2:"id";s:3:"301";s:6:"weight";s:4:"2774";s:3:"id1";s:2:"77";s:3:"id2";s:2:"77";}i:3;s:30:"query 1: total_rows=1 str=id=1";i:4;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"id1";s:2:"11";s:3:"id2";s:2:"11";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_117/test.xml b/coreseek/csft-4.1/test/test_117/test.xml new file mode 100755 index 0000000..1a22a67 --- /dev/null +++ b/coreseek/csft-4.1/test/test_117/test.xml @@ -0,0 +1,129 @@ + + + +RT: ram vs disk chunk search + + + +searchd +{ + + workers = threads + binlog_path = +} + +index rt0 +{ + docinfo = extern + morphology = none + charset_type = utf-8 + + type = rt + + rt_field = title + rt_field = content + rt_attr_uint = id1 + rt_attr_uint = id2 + + path = /index + rt_mem_limit = 128K +} + + + +drop table if exists rt0 + + +create table rt0 +( + id int not null, + title varchar(255) not null, + content varchar(255) not null, + id1 int, + id2 int +); + + +insert into rt0 values +( 1000000, 'first title', 'first content', 1000000, 1000000 ); + + + $value) + $foo[$key] = $value; + $results[] = $foo; + } + } +} + +@mysql_close($sock); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_118/model.bin b/coreseek/csft-4.1/test/test_118/model.bin new file mode 100755 index 0000000..e9b85d6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_118/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:6:{i:0;a:2:{s:8:"sphinxql";s:68:"insert into test (id,idd,content) values (1,1,'content'),(2,2,'you')";s:14:"total_affected";i:2;}i:1;a:2:{s:8:"sphinxql";s:63:"insert into test (id,idd,content) values (10,10,'dog cat fish')";s:14:"total_affected";i:1;}i:2;a:2:{s:8:"sphinxql";s:58:"insert into test (id,idd,content) values (11,11,'dog cat')";s:14:"total_affected";i:1;}i:3;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"2";}i:2;a:3:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";}i:3;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:3:"idd";s:2:"11";}}}i:4;a:3:{s:8:"sphinxql";s:46:"select * from test where match( 'dog << cat' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:2:"10";s:6:"weight";s:4:"2528";s:3:"idd";s:2:"10";}i:1;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:4:"2528";s:3:"idd";s:2:"11";}}}i:5;a:3:{s:8:"sphinxql";s:53:"select * from test where match( '(dog | cat) -fish' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:4:"2538";s:3:"idd";s:2:"11";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_118/test.xml b/coreseek/csft-4.1/test/test_118/test.xml new file mode 100755 index 0000000..6b75a39 --- /dev/null +++ b/coreseek/csft-4.1/test/test_118/test.xml @@ -0,0 +1,39 @@ + + + RT: order vs ram chanks + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index test +{ + + type = rt + path = data/test + rt_attr_uint = idd + rt_field = content +} + + + + insert into test (id,idd,content) values (1,1,'content'),(2,2,'you') + insert into test (id,idd,content) values (10,10,'dog cat fish') + insert into test (id,idd,content) values (11,11,'dog cat') + + select * from test + + select * from test where match( '(dog | cat) -fish' ) + + + diff --git a/coreseek/csft-4.1/test/test_119/model.bin b/coreseek/csft-4.1/test/test_119/model.bin new file mode 100755 index 0000000..9b8536b --- /dev/null +++ b/coreseek/csft-4.1/test/test_119/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:15:{i:0;a:3:{s:8:"sphinxql";s:56:"select * from test where match('test') order by fval asc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";}i:1;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";}i:2;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";}i:3;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";}}}i:1;a:3:{s:8:"sphinxql";s:69:"select *, fval+1 as f1 from test where match('test') order by f1 desc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:5:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"f1";s:9:"21.000000";}i:1;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"f1";s:9:"11.000000";}i:2;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"f1";s:10:"-29.000000";}i:3;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"f1";s:10:"-39.000000";}}}i:2;a:3:{s:8:"sphinxql";s:32:"select * from test group by fval";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:8:"@groupby";s:10:"1092616192";s:6:"@count";s:1:"1";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:8:"@groupby";s:10:"1101004800";s:6:"@count";s:1:"1";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:8:"@groupby";s:10:"3253731328";s:6:"@count";s:1:"1";}i:3;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:8:"@groupby";s:10:"3256877056";s:6:"@count";s:1:"1";}}}i:3;a:3:{s:8:"sphinxql";s:44:"select *, ival-1 as i1 from test group by i1";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"10";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"3";}i:1;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"21";s:8:"@groupby";s:2:"21";s:6:"@count";s:1:"1";}}}i:4;a:3:{s:8:"sphinxql";s:58:"select *, @weight+ival as i1 from test where match('test')";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:4:"1315";}i:1;a:5:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:4:"1315";}i:2;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:4:"1315";}i:3;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:4:"1326";}}}i:5;a:3:{s:8:"sphinxql";s:66:"select *, 10+ival as i1, 50+i1 as i2 from test where match('test')";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:3;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";}}}i:6;a:3:{s:8:"sphinxql";s:46:"select *, 10+ival as i1, 50+i1 as i2 from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:3;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";}}}i:7;a:3:{s:8:"sphinxql";s:59:"select *, 10+ival as i1, 50+i1 as i2, i2*10 as i3 from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"710";}i:1;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"710";}i:2;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"710";}i:3;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:3:"820";}}}i:8;a:3:{s:8:"sphinxql";s:62:"select *, 10+ival as i1, 50+i1 as i2, i2*10-i1 as i3 from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"689";}i:1;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"689";}i:2;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"689";}i:3;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:3:"788";}}}i:9;a:3:{s:8:"sphinxql";s:61:"select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:10:"710.000000";}i:1;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:11:"1420.000000";}i:2;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:12:"-2130.000000";}i:3;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:12:"-3280.000000";}}}i:10;a:3:{s:8:"sphinxql";s:77:"select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test order by i3 asc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:12:"-3280.000000";}i:1;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:12:"-2130.000000";}i:2;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:10:"710.000000";}i:3;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:11:"1420.000000";}}}i:11;a:3:{s:8:"sphinxql";s:86:"select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test order by i1 asc, i3 desc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:11:"1420.000000";}i:1;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:10:"710.000000";}i:2;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:12:"-2130.000000";}i:3;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:12:"-3280.000000";}}}i:12;a:3:{s:8:"sphinxql";s:73:"select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test group by i2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:10:"710.000000";s:8:"@groupby";s:2:"71";s:6:"@count";s:1:"3";}i:1;a:9:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:12:"-3280.000000";s:8:"@groupby";s:2:"82";s:6:"@count";s:1:"1";}}}i:13;a:3:{s:8:"sphinxql";s:72:"select *, 10+ival as i1, 50+i1 as i2, i2*@id as i3 from test group by i3";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:2:"71";s:8:"@groupby";s:2:"71";s:6:"@count";s:1:"1";}i:1;a:9:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"142";s:8:"@groupby";s:3:"142";s:6:"@count";s:1:"1";}i:2;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"213";s:8:"@groupby";s:3:"213";s:6:"@count";s:1:"1";}i:3;a:9:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:3:"328";s:8:"@groupby";s:3:"328";s:6:"@count";s:1:"1";}}}i:14;a:3:{s:8:"sphinxql";s:54:"select *, IN ( mva, 11 ) as cnd1 from mva where cnd1=1";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:3:"mva";s:11:"10,11,12,13";s:4:"cnd1";s:1:"1";}}}}i:1;a:15:{i:0;a:3:{s:8:"sphinxql";s:56:"select * from test where match('test') order by fval asc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";}i:1;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";}i:2;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";}i:3;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";}}}i:1;a:3:{s:8:"sphinxql";s:69:"select *, fval+1 as f1 from test where match('test') order by f1 desc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:5:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"f1";s:9:"21.000000";}i:1;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"f1";s:9:"11.000000";}i:2;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"f1";s:10:"-29.000000";}i:3;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"f1";s:10:"-39.000000";}}}i:2;a:3:{s:8:"sphinxql";s:32:"select * from test group by fval";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:8:"@groupby";s:10:"1092616192";s:6:"@count";s:1:"1";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:8:"@groupby";s:10:"1101004800";s:6:"@count";s:1:"1";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:8:"@groupby";s:10:"3253731328";s:6:"@count";s:1:"1";}i:3;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:8:"@groupby";s:10:"3256877056";s:6:"@count";s:1:"1";}}}i:3;a:3:{s:8:"sphinxql";s:44:"select *, ival-1 as i1 from test group by i1";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"10";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"3";}i:1;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"21";s:8:"@groupby";s:2:"21";s:6:"@count";s:1:"1";}}}i:4;a:3:{s:8:"sphinxql";s:58:"select *, @weight+ival as i1 from test where match('test')";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:4:"1315";}i:1;a:5:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:4:"1315";}i:2;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:4:"1315";}i:3;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:4:"1326";}}}i:5;a:3:{s:8:"sphinxql";s:66:"select *, 10+ival as i1, 50+i1 as i2 from test where match('test')";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:3;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1304";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";}}}i:6;a:3:{s:8:"sphinxql";s:46:"select *, 10+ival as i1, 50+i1 as i2 from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";}i:3;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";}}}i:7;a:3:{s:8:"sphinxql";s:59:"select *, 10+ival as i1, 50+i1 as i2, i2*10 as i3 from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"710";}i:1;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"710";}i:2;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"710";}i:3;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:3:"820";}}}i:8;a:3:{s:8:"sphinxql";s:62:"select *, 10+ival as i1, 50+i1 as i2, i2*10-i1 as i3 from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"689";}i:1;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"689";}i:2;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"689";}i:3;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:3:"788";}}}i:9;a:3:{s:8:"sphinxql";s:61:"select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:10:"710.000000";}i:1;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:11:"1420.000000";}i:2;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:12:"-2130.000000";}i:3;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:12:"-3280.000000";}}}i:10;a:3:{s:8:"sphinxql";s:77:"select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test order by i3 asc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:12:"-3280.000000";}i:1;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:12:"-2130.000000";}i:2;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:10:"710.000000";}i:3;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:11:"1420.000000";}}}i:11;a:3:{s:8:"sphinxql";s:86:"select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test order by i1 asc, i3 desc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:7:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:11:"1420.000000";}i:1;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:10:"710.000000";}i:2;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:12:"-2130.000000";}i:3;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:12:"-3280.000000";}}}i:12;a:3:{s:8:"sphinxql";s:73:"select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test group by i2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:10:"710.000000";s:8:"@groupby";s:2:"71";s:6:"@count";s:1:"3";}i:1;a:9:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:12:"-3280.000000";s:8:"@groupby";s:2:"82";s:6:"@count";s:1:"1";}}}i:13;a:3:{s:8:"sphinxql";s:72:"select *, 10+ival as i1, 50+i1 as i2, i2*@id as i3 from test group by i3";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"10.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:2:"71";s:8:"@groupby";s:2:"71";s:6:"@count";s:1:"1";}i:1;a:9:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:9:"20.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"142";s:8:"@groupby";s:3:"142";s:6:"@count";s:1:"1";}i:2;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"ival";s:2:"11";s:4:"fval";s:10:"-30.000000";s:2:"i1";s:2:"21";s:2:"i2";s:2:"71";s:2:"i3";s:3:"213";s:8:"@groupby";s:3:"213";s:6:"@count";s:1:"1";}i:3;a:9:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"ival";s:2:"22";s:4:"fval";s:10:"-40.000000";s:2:"i1";s:2:"32";s:2:"i2";s:2:"82";s:2:"i3";s:3:"328";s:8:"@groupby";s:3:"328";s:6:"@count";s:1:"1";}}}i:14;a:3:{s:8:"sphinxql";s:54:"select *, IN ( mva, 11 ) as cnd1 from mva where cnd1=1";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:3:"mva";s:11:"10,11,12,13";s:4:"cnd1";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_119/test.xml b/coreseek/csft-4.1/test/test_119/test.xml new file mode 100755 index 0000000..dcbd057 --- /dev/null +++ b/coreseek/csft-4.1/test/test_119/test.xml @@ -0,0 +1,98 @@ + + +select expressions vs eval stages + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table WHERE id IN (1,2, 3, 4 ) + sql_attr_uint = ival + sql_attr_float = fval +} + +index test +{ + source = srctest + path = /test +} + +source src_mva +{ + type = mysql + + sql_query = SELECT id, 1 as idd, title as mva, 'test' FROM test_table WHERE id=10 + sql_attr_uint = idd + + sql_attr_multi = uint mva from field + sql_attr_multi = bigint mva from field + +} + +index mva +{ + source = src_mva + path = /mva +} + + + +CREATE TABLE test_table +( + id INTEGER NOT NULL, + ival INTEGER NOT NULL, + fval INTEGER NOT NULL, + title VARCHAR(255) NOT NULL +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 11, 10, 'test one' ), +( 2, 11, 20, 'test two' ), +( 3, 11, -30, 'test three' ), +( 4, 22, -40, 'test four' ), + +( 10, 1, 1, '10,11,12,13' ) + + + +select * from test where match('test') order by fval asc +select *, fval+1 as f1 from test where match('test') order by f1 desc +select * from test group by fval +select *, ival-1 as i1 from test group by i1 +select *, @weight+ival as i1 from test where match('test') +select *, 10+ival as i1, 50+i1 as i2 from test where match('test') +select *, 10+ival as i1, 50+i1 as i2 from test +select *, 10+ival as i1, 50+i1 as i2, i2*10 as i3 from test +select *, 10+ival as i1, 50+i1 as i2, i2*10-i1 as i3 from test +select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test +select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test order by i3 asc +select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test order by i1 asc, i3 desc +select *, 10+ival as i1, 50+i1 as i2, i2*fval as i3 from test group by i2 +select *, 10+ival as i1, 50+i1 as i2, i2*@id as i3 from test group by i3 + + +select *, IN ( mva, 11 ) as cnd1 from mva where cnd1=1 + + + diff --git a/coreseek/csft-4.1/test/test_120/model.bin b/coreseek/csft-4.1/test/test_120/model.bin new file mode 100755 index 0000000..219b772 --- /dev/null +++ b/coreseek/csft-4.1/test/test_120/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:3:{i:0;a:2:{s:8:"sphinxql";s:43:"select * from test_idx where match( 'div' )";s:10:"total_rows";i:0;}i:1;a:2:{s:8:"sphinxql";s:44:"select * from test_idx where match( 'span' )";s:10:"total_rows";i:0;}i:2;a:3:{s:8:"sphinxql";s:43:"select * from test_idx where match( 'end' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1643";s:3:"idd";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_120/test.xml b/coreseek/csft-4.1/test/test_120/test.xml new file mode 100755 index 0000000..2f7a175 --- /dev/null +++ b/coreseek/csft-4.1/test/test_120/test.xml @@ -0,0 +1,62 @@ + + +html_stripper vs sql_file_field + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table + sql_attr_uint = idd + sql_file_field = title +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 + html_strip = 1 +} + + + +CREATE TABLE test_table +( + id INTEGER NOT NULL, + idd INTEGER NOT NULL, + title VARCHAR(255) NOT NULL +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 1, 'html_120.txt' ), +( 2, 2, '' ) + + + + select * from test_idx where match( 'div' ) + select * from test_idx where match( 'span' ) + select * from test_idx where match( 'end' ) + + + diff --git a/coreseek/csft-4.1/test/test_121/model.bin b/coreseek/csft-4.1/test/test_121/model.bin new file mode 100755 index 0000000..7252b66 --- /dev/null +++ b/coreseek/csft-4.1/test/test_121/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"the";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"very";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"very";}i:2;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"add";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"adds";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"adds";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:5;a:2:{s:6:"weight";s:4:"2607";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:4:"2607";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:4:"look";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"books";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:""look and add books"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:5;a:2:{s:6:"weight";s:4:"2607";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:4:"2607";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:4:"look";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"books";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:""look add books"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:5;a:2:{s:6:"weight";s:4:"2607";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:4:"2607";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:4:"look";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"books";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""look books"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_121/test.xml b/coreseek/csft-4.1/test/test_121/test.xml new file mode 100755 index 0000000..385dede --- /dev/null +++ b/coreseek/csft-4.1/test/test_121/test.xml @@ -0,0 +1,67 @@ + + + +multiply stopwords source + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + stopwords = stopwords.txt stopwords_121.txt + stopword_step = 0 +} + + + +the +very +add +adds +"look and add books" +"look add books" +"look books" + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'the add' ), +( 2, 'add' ), +( 3, 'add is very plus' ), +( 4, 'the adds is very good' ), +( 5, 'look books together' ), +( 6, 'look add books together' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_122/model.bin b/coreseek/csft-4.1/test/test_122/model.bin new file mode 100755 index 0000000..058ba52 --- /dev/null +++ b/coreseek/csft-4.1/test/test_122/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:2:{s:8:"sphinxql";s:100:"insert into rt (id, gid, author, title) values (2, 123, 'Lewis Carrol', 'Through the looking glass')";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:88:"insert into rt (id, gid, author, title) values (3, 234, 'O.Henry', 'Cabbages and Kings')";s:14:"total_affected";i:1;}i:2;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:3:"123";s:6:"author";s:12:"Lewis Carrol";}i:1;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:3:"234";s:6:"author";s:7:"O.Henry";}}}i:3;a:2:{s:8:"sphinxql";s:99:"insert into rt_multy_str values (1, 'lewis carrol', 1001, 'rabit hole', 'looking glass', 'at 1890')";s:14:"total_affected";i:1;}i:4;a:2:{s:8:"sphinxql";s:98:"insert into rt_multy_str values (10, 'mad max', 1010, 'post future', 'fuel less world', 'at 2100')";s:14:"total_affected";i:1;}i:5;a:2:{s:8:"sphinxql";s:101:"insert into rt_multy_str values (11, 'n. perumov', 1011, 'realm of meln', 'war of magican', 'at 650')";s:14:"total_affected";i:1;}i:6;a:3:{s:8:"sphinxql";s:26:"select * from rt_multy_str";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:4:"1001";s:5:"place";s:10:"rabit hole";s:4:"some";s:13:"looking glass";s:4:"time";s:7:"at 1890";}i:1;a:6:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"gid";s:4:"1010";s:5:"place";s:11:"post future";s:4:"some";s:15:"fuel less world";s:4:"time";s:7:"at 2100";}i:2;a:6:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:3:"gid";s:4:"1011";s:5:"place";s:13:"realm of meln";s:4:"some";s:14:"war of magican";s:4:"time";s:6:"at 650";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_122/test.xml b/coreseek/csft-4.1/test/test_122/test.xml new file mode 100755 index 0000000..af848c6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_122/test.xml @@ -0,0 +1,56 @@ + + +RT: string attrs + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index rt +{ + type = rt + path = data/rt + rt_attr_uint = gid + rt_attr_string = author + rt_field = title +} + +index rt_multy_str +{ + type = rt + path = data/rt_multy_str + rt_field = title + rt_attr_uint = gid + rt_attr_string = place + rt_attr_string = some + rt_attr_string = time +} + + + + + +insert into rt (id, gid, author, title) values (2, 123, 'Lewis Carrol', 'Through the looking glass') +insert into rt (id, gid, author, title) values (3, 234, 'O.Henry', 'Cabbages and Kings') +select * from rt + +insert into rt_multy_str values (1, 'lewis carrol', 1001, 'rabit hole', 'looking glass', 'at 1890') +insert into rt_multy_str values (10, 'mad max', 1010, 'post future', 'fuel less world', 'at 2100') +insert into rt_multy_str values (11, 'n. perumov', 1011, 'realm of meln', 'war of magican', 'at 650') +select * from rt_multy_str + + + + diff --git a/coreseek/csft-4.1/test/test_123/model.bin b/coreseek/csft-4.1/test/test_123/model.bin new file mode 100755 index 0000000..cae3b88 --- /dev/null +++ b/coreseek/csft-4.1/test/test_123/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:1:{i:0;a:2:{i:0;s:25:"+ben is bad";i:1;s:72:"who is ben. green-nice is... as no-body bad.";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_123/test.xml b/coreseek/csft-4.1/test/test_123/test.xml new file mode 100755 index 0000000..4679f43 --- /dev/null +++ b/coreseek/csft-4.1/test/test_123/test.xml @@ -0,0 +1,45 @@ + + + +snippets vs blend_chars + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 + blend_chars = +, -, ., U+23,U+40 +} + + +select 1; + +BuildExcerpts($docs, 'test', $query ); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_124/field_124_match.txt b/coreseek/csft-4.1/test/test_124/field_124_match.txt new file mode 100755 index 0000000..1f2063e --- /dev/null +++ b/coreseek/csft-4.1/test/test_124/field_124_match.txt @@ -0,0 +1 @@ +match \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_124/model.bin b/coreseek/csft-4.1/test/test_124/model.bin new file mode 100755 index 0000000..a03441d --- /dev/null +++ b/coreseek/csft-4.1/test/test_124/model.bin @@ -0,0 +1 @@ +a:3:{i:0;a:5:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"all";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"all";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"none";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"none";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"4";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"match";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"match";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"on";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"on";}}i:1;a:5:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"4";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:3:"all";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"all";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"none";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"none";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"4";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"match";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"match";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:3:"idd";s:1:"4";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:2:"on";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"on";}}i:2;a:1:{i:0;s:6:"failed";}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_124/test.xml b/coreseek/csft-4.1/test/test_124/test.xml new file mode 100755 index 0000000..6832912 --- /dev/null +++ b/coreseek/csft-4.1/test/test_124/test.xml @@ -0,0 +1,67 @@ + + +indexing vs sql_file_field failed processing + + +indexer +{ + mem_limit = 16M + + on_file_field_error = ignore_field + on_file_field_error = skip_document + on_file_field_error = fail_index + +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table + sql_attr_uint = idd + sql_file_field = title +} + +index test_idx +{ + source = srctest + path = /test + charset_type = utf-8 +} + + + +CREATE TABLE test_table +( + id INTEGER NOT NULL, + idd INTEGER NOT NULL, + title VARCHAR(255) NOT NULL, + text VARCHAR(255) NOT NULL +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 1, './test_124/field_124_match.txt', 'on all' ), +( 2, 2, './test_124/field_124_match.txt', 'on none' ), +( 3, 3, './test_124/field_124_matching.txt', 'on empty' ), +( 4, 4, './test_124/field_124_match.txt', 'on empty' ) + + + + +all +none +match +on + + + diff --git a/coreseek/csft-4.1/test/test_125/model.bin b/coreseek/csft-4.1/test/test_125/model.bin new file mode 100755 index 0000000..be5b22e --- /dev/null +++ b/coreseek/csft-4.1/test/test_125/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:3:{s:8:"sphinxql";s:91:"SELECT 0 AND 0 OR 1 AS a, 0 AND 1 OR 1 AS b, 1 OR 0 AND 0 AS c, 1 OR 1 AND 0 AS d FROM test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:1:"a";s:1:"1";s:1:"b";s:1:"1";s:1:"c";s:1:"1";s:1:"d";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_125/test.xml b/coreseek/csft-4.1/test/test_125/test.xml new file mode 100755 index 0000000..58dacae --- /dev/null +++ b/coreseek/csft-4.1/test/test_125/test.xml @@ -0,0 +1,52 @@ + + +SphinxQL: arithmetic expressions + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT * FROM test_table + sql_attr_uint = aa +} + +index test +{ + source = test + path = /test +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + aa INT NOT NULL, + title VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table ( id, aa, title ) VALUES ( 1, 2, 'dummy' ); + + + +SELECT 0 AND 0 OR 1 AS a, 0 AND 1 OR 1 AS b, 1 OR 0 AND 0 AS c, 1 OR 1 AND 0 AS d FROM test + + + diff --git a/coreseek/csft-4.1/test/test_126/model.bin b/coreseek/csft-4.1/test/test_126/model.bin new file mode 100755 index 0000000..c74057f --- /dev/null +++ b/coreseek/csft-4.1/test/test_126/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:5:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:4;a:2:{s:6:"weight";s:4:"4430";s:5:"attrs";a:0:{}}i:1;a:2:{s:6:"weight";s:4:"3416";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"3416";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2402";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.007";s:5:"words";a:4:{s:3:"dog";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"run";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:4:"=dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"=run";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"dog run";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:4:"2557";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:5:"words";a:2:{s:4:"=dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"=run";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"=dog =run";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.008";s:5:"words";a:4:{s:3:"dog";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"run";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:4:"=dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"=run";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"dog run";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:5:"words";a:4:{s:4:"=dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"=run";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"==dog";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:5:"==run";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"=dog =run";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:0:{}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.008";s:5:"words";a:4:{s:3:"dog";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"run";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:4:"=dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"=run";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"dog* run";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_126/test.xml b/coreseek/csft-4.1/test/test_126/test.xml new file mode 100755 index 0000000..75b8518 --- /dev/null +++ b/coreseek/csft-4.1/test/test_126/test.xml @@ -0,0 +1,64 @@ + + + +expand keywords + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + morphology = stem_en + index_exact_words = 1 + expand_keywords = 1 +} + + + +dog run +=dog =run +dog run +=dog =run +dog* run + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'dog runs' ), +( 2, 'dogs run' ), +( 3, 'dogs running' ), +( 4, 'dog run' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_127/model.bin b/coreseek/csft-4.1/test/test_127/model.bin new file mode 100755 index 0000000..fc368ba --- /dev/null +++ b/coreseek/csft-4.1/test/test_127/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:89:{i:0;a:2:{s:8:"sphinxql";s:58:"insert into rt (id, id1, title) values (1, 1, 'test text')";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:25:"delete from rt where id=1";s:14:"total_affected";i:0;}i:2;a:2:{s:8:"sphinxql";s:25:"delete from rt where id=1";s:14:"total_affected";i:0;}i:3;a:2:{s:8:"sphinxql";s:58:"insert into rt (id, id1, title) values (2, 2, 'test text')";s:14:"total_affected";i:1;}i:4;a:2:{s:8:"sphinxql";s:25:"delete from rt where id=2";s:14:"total_affected";i:0;}i:5;a:2:{s:8:"sphinxql";s:25:"delete from rt where id=2";s:14:"total_affected";i:0;}i:6;a:2:{s:8:"sphinxql";s:16:"set autocommit=0";s:14:"total_affected";i:0;}i:7;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (10, 10, 'test text all')";s:14:"total_affected";i:1;}i:8;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (110, 110, 'test text all')";s:14:"total_affected";i:1;}i:9;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:10;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (11, 11, 'test text all')";s:14:"total_affected";i:1;}i:11;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (111, 111, 'test text all')";s:14:"total_affected";i:1;}i:12;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:13;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (12, 12, 'test text all')";s:14:"total_affected";i:1;}i:14;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (112, 112, 'test text all')";s:14:"total_affected";i:1;}i:15;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:16;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (13, 13, 'test text all')";s:14:"total_affected";i:1;}i:17;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (113, 113, 'test text all')";s:14:"total_affected";i:1;}i:18;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:19;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (14, 14, 'test text all')";s:14:"total_affected";i:1;}i:20;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (114, 114, 'test text all')";s:14:"total_affected";i:1;}i:21;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:22;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (15, 15, 'test text all')";s:14:"total_affected";i:1;}i:23;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (115, 115, 'test text all')";s:14:"total_affected";i:1;}i:24;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:25;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (16, 16, 'test text all')";s:14:"total_affected";i:1;}i:26;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (116, 116, 'test text all')";s:14:"total_affected";i:1;}i:27;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:28;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (17, 17, 'test text all')";s:14:"total_affected";i:1;}i:29;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (117, 117, 'test text all')";s:14:"total_affected";i:1;}i:30;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:31;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (18, 18, 'test text all')";s:14:"total_affected";i:1;}i:32;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (118, 118, 'test text all')";s:14:"total_affected";i:1;}i:33;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:34;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (19, 19, 'test text all')";s:14:"total_affected";i:1;}i:35;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (119, 119, 'test text all')";s:14:"total_affected";i:1;}i:36;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:37;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (20, 20, 'test text all')";s:14:"total_affected";i:1;}i:38;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (120, 120, 'test text all')";s:14:"total_affected";i:1;}i:39;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:40;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (21, 21, 'test text all')";s:14:"total_affected";i:1;}i:41;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (121, 121, 'test text all')";s:14:"total_affected";i:1;}i:42;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:43;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (22, 22, 'test text all')";s:14:"total_affected";i:1;}i:44;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (122, 122, 'test text all')";s:14:"total_affected";i:1;}i:45;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:46;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (23, 23, 'test text all')";s:14:"total_affected";i:1;}i:47;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (123, 123, 'test text all')";s:14:"total_affected";i:1;}i:48;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:49;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (24, 24, 'test text all')";s:14:"total_affected";i:1;}i:50;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (124, 124, 'test text all')";s:14:"total_affected";i:1;}i:51;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:52;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (25, 25, 'test text all')";s:14:"total_affected";i:1;}i:53;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (125, 125, 'test text all')";s:14:"total_affected";i:1;}i:54;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:55;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (26, 26, 'test text all')";s:14:"total_affected";i:1;}i:56;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (126, 126, 'test text all')";s:14:"total_affected";i:1;}i:57;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:58;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (27, 27, 'test text all')";s:14:"total_affected";i:1;}i:59;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (127, 127, 'test text all')";s:14:"total_affected";i:1;}i:60;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:61;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (28, 28, 'test text all')";s:14:"total_affected";i:1;}i:62;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (128, 128, 'test text all')";s:14:"total_affected";i:1;}i:63;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:64;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (29, 29, 'test text all')";s:14:"total_affected";i:1;}i:65;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (129, 129, 'test text all')";s:14:"total_affected";i:1;}i:66;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:67;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (30, 30, 'test text all')";s:14:"total_affected";i:1;}i:68;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (130, 130, 'test text all')";s:14:"total_affected";i:1;}i:69;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:70;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (31, 31, 'test text all')";s:14:"total_affected";i:1;}i:71;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (131, 131, 'test text all')";s:14:"total_affected";i:1;}i:72;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:73;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (32, 32, 'test text all')";s:14:"total_affected";i:1;}i:74;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (132, 132, 'test text all')";s:14:"total_affected";i:1;}i:75;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:76;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (33, 33, 'test text all')";s:14:"total_affected";i:1;}i:77;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (133, 133, 'test text all')";s:14:"total_affected";i:1;}i:78;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:79;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (34, 34, 'test text all')";s:14:"total_affected";i:1;}i:80;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (134, 134, 'test text all')";s:14:"total_affected";i:1;}i:81;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:82;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (35, 35, 'test text all')";s:14:"total_affected";i:1;}i:83;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (135, 135, 'test text all')";s:14:"total_affected";i:1;}i:84;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:85;a:2:{s:8:"sphinxql";s:64:"insert into rt (id, id1, title) values (36, 36, 'test text all')";s:14:"total_affected";i:1;}i:86;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, id1, title) values (136, 136, 'test text all')";s:14:"total_affected";i:1;}i:87;a:2:{s:8:"sphinxql";s:6:"commit";s:14:"total_affected";i:0;}i:88;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:20;s:4:"rows";a:20:{i:0;a:3:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"id1";s:2:"10";}i:1;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:3:"id1";s:2:"11";}i:2;a:3:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:3:"id1";s:2:"12";}i:3;a:3:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:3:"id1";s:2:"13";}i:4;a:3:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:3:"id1";s:2:"14";}i:5;a:3:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:3:"id1";s:2:"15";}i:6;a:3:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:3:"id1";s:2:"16";}i:7;a:3:{s:2:"id";s:2:"17";s:6:"weight";s:1:"1";s:3:"id1";s:2:"17";}i:8;a:3:{s:2:"id";s:2:"18";s:6:"weight";s:1:"1";s:3:"id1";s:2:"18";}i:9;a:3:{s:2:"id";s:2:"19";s:6:"weight";s:1:"1";s:3:"id1";s:2:"19";}i:10;a:3:{s:2:"id";s:2:"20";s:6:"weight";s:1:"1";s:3:"id1";s:2:"20";}i:11;a:3:{s:2:"id";s:2:"21";s:6:"weight";s:1:"1";s:3:"id1";s:2:"21";}i:12;a:3:{s:2:"id";s:2:"22";s:6:"weight";s:1:"1";s:3:"id1";s:2:"22";}i:13;a:3:{s:2:"id";s:2:"23";s:6:"weight";s:1:"1";s:3:"id1";s:2:"23";}i:14;a:3:{s:2:"id";s:2:"24";s:6:"weight";s:1:"1";s:3:"id1";s:2:"24";}i:15;a:3:{s:2:"id";s:2:"25";s:6:"weight";s:1:"1";s:3:"id1";s:2:"25";}i:16;a:3:{s:2:"id";s:2:"26";s:6:"weight";s:1:"1";s:3:"id1";s:2:"26";}i:17;a:3:{s:2:"id";s:2:"27";s:6:"weight";s:1:"1";s:3:"id1";s:2:"27";}i:18;a:3:{s:2:"id";s:2:"28";s:6:"weight";s:1:"1";s:3:"id1";s:2:"28";}i:19;a:3:{s:2:"id";s:2:"29";s:6:"weight";s:1:"1";s:3:"id1";s:2:"29";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_127/test.xml b/coreseek/csft-4.1/test/test_127/test.xml new file mode 100755 index 0000000..2155e31 --- /dev/null +++ b/coreseek/csft-4.1/test/test_127/test.xml @@ -0,0 +1,122 @@ + + +RT: repeated delete + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + binlog_path = +} + +index rt +{ + type = rt + path = data/rt + rt_attr_uint = id1 + rt_field = title +} + + + +insert into rt (id, id1, title) values (1, 1, 'test text') +delete from rt where id=1 +delete from rt where id=1 +insert into rt (id, id1, title) values (2, 2, 'test text') +delete from rt where id=2 +delete from rt where id=2 + +set autocommit=0 + +insert into rt (id, id1, title) values (10, 10, 'test text all') +insert into rt (id, id1, title) values (110, 110, 'test text all') +commit +insert into rt (id, id1, title) values (11, 11, 'test text all') +insert into rt (id, id1, title) values (111, 111, 'test text all') +commit +insert into rt (id, id1, title) values (12, 12, 'test text all') +insert into rt (id, id1, title) values (112, 112, 'test text all') +commit +insert into rt (id, id1, title) values (13, 13, 'test text all') +insert into rt (id, id1, title) values (113, 113, 'test text all') +commit +insert into rt (id, id1, title) values (14, 14, 'test text all') +insert into rt (id, id1, title) values (114, 114, 'test text all') +commit +insert into rt (id, id1, title) values (15, 15, 'test text all') +insert into rt (id, id1, title) values (115, 115, 'test text all') +commit +insert into rt (id, id1, title) values (16, 16, 'test text all') +insert into rt (id, id1, title) values (116, 116, 'test text all') +commit +insert into rt (id, id1, title) values (17, 17, 'test text all') +insert into rt (id, id1, title) values (117, 117, 'test text all') +commit +insert into rt (id, id1, title) values (18, 18, 'test text all') +insert into rt (id, id1, title) values (118, 118, 'test text all') +commit +insert into rt (id, id1, title) values (19, 19, 'test text all') +insert into rt (id, id1, title) values (119, 119, 'test text all') +commit +insert into rt (id, id1, title) values (20, 20, 'test text all') +insert into rt (id, id1, title) values (120, 120, 'test text all') +commit +insert into rt (id, id1, title) values (21, 21, 'test text all') +insert into rt (id, id1, title) values (121, 121, 'test text all') +commit +insert into rt (id, id1, title) values (22, 22, 'test text all') +insert into rt (id, id1, title) values (122, 122, 'test text all') +commit +insert into rt (id, id1, title) values (23, 23, 'test text all') +insert into rt (id, id1, title) values (123, 123, 'test text all') +commit +insert into rt (id, id1, title) values (24, 24, 'test text all') +insert into rt (id, id1, title) values (124, 124, 'test text all') +commit +insert into rt (id, id1, title) values (25, 25, 'test text all') +insert into rt (id, id1, title) values (125, 125, 'test text all') +commit +insert into rt (id, id1, title) values (26, 26, 'test text all') +insert into rt (id, id1, title) values (126, 126, 'test text all') +commit +insert into rt (id, id1, title) values (27, 27, 'test text all') +insert into rt (id, id1, title) values (127, 127, 'test text all') +commit +insert into rt (id, id1, title) values (28, 28, 'test text all') +insert into rt (id, id1, title) values (128, 128, 'test text all') +commit +insert into rt (id, id1, title) values (29, 29, 'test text all') +insert into rt (id, id1, title) values (129, 129, 'test text all') +commit +insert into rt (id, id1, title) values (30, 30, 'test text all') +insert into rt (id, id1, title) values (130, 130, 'test text all') +commit +insert into rt (id, id1, title) values (31, 31, 'test text all') +insert into rt (id, id1, title) values (131, 131, 'test text all') +commit +insert into rt (id, id1, title) values (32, 32, 'test text all') +insert into rt (id, id1, title) values (132, 132, 'test text all') +commit +insert into rt (id, id1, title) values (33, 33, 'test text all') +insert into rt (id, id1, title) values (133, 133, 'test text all') +commit +insert into rt (id, id1, title) values (34, 34, 'test text all') +insert into rt (id, id1, title) values (134, 134, 'test text all') +commit +insert into rt (id, id1, title) values (35, 35, 'test text all') +insert into rt (id, id1, title) values (135, 135, 'test text all') +commit +insert into rt (id, id1, title) values (36, 36, 'test text all') +insert into rt (id, id1, title) values (136, 136, 'test text all') +commit +select * from rt + + + diff --git a/coreseek/csft-4.1/test/test_128/model.bin b/coreseek/csft-4.1/test/test_128/model.bin new file mode 100755 index 0000000..b68a65c --- /dev/null +++ b/coreseek/csft-4.1/test/test_128/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1304";s:5:"attrs";a:1:{s:3:"gid";s:3:"100";}}i:2;a:2:{s:6:"weight";s:4:"1304";s:5:"attrs";a:1:{s:3:"gid";s:3:"200";}}i:3;a:2:{s:6:"weight";s:4:"1304";s:5:"attrs";a:1:{s:3:"gid";s:3:"300";}}i:4;a:2:{s:6:"weight";s:4:"1304";s:5:"attrs";a:1:{s:3:"gid";s:3:"400";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.012";s:5:"words";a:1:{s:5:"hello";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"hello";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_128/test.xml b/coreseek/csft-4.1/test/test_128/test.xml new file mode 100755 index 0000000..4b1dcee --- /dev/null +++ b/coreseek/csft-4.1/test/test_128/test.xml @@ -0,0 +1,59 @@ + + + +indexing ranged stored procedures + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query_range = SELECT 1, 3 + sql_range_step = 1 + sql_query = CALL test_proc($start+$end-$end-1) + sql_attr_uint = gid +} + +index test +{ + source = test + path = /test +} + + + +create procedure test_proc (in base int) +begin + select * from test_table where id=2*base or id=2*base+1; +end + + +create table test_table +( + id int not null, + gid int not null, + title varchar(255) not null +); + +drop procedure if exists test_proc; +drop table if exists test_table; +insert into test_table values ( 1, 100, 'hello one' ); +insert into test_table values ( 2, 200, 'hello two' ); +insert into test_table values ( 3, 300, 'hello three' ); +insert into test_table values ( 4, 400, 'hello four' ); + + +hello + + + diff --git a/coreseek/csft-4.1/test/test_129/model.bin b/coreseek/csft-4.1/test/test_129/model.bin new file mode 100755 index 0000000..0c5d860 --- /dev/null +++ b/coreseek/csft-4.1/test/test_129/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:5:{i:0;a:5:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:3:"mva";i:1073741825;s:3:"tag";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:1:{i:0;s:1:"1";}s:3:"tag";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:2:{i:0;s:1:"2";i:1;s:1:"3";}s:3:"tag";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:3:"tag";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:4:{i:0;s:1:"7";i:1;s:1:"8";i:2;s:1:"9";i:3;s:2:"10";}s:3:"tag";s:2:"44";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:0:{}s:3:"tag";s:2:"55";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";}i:1;s:11:"up.count=-1";i:2;a:5:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:3:"mva";i:1073741825;s:3:"tag";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:1:{i:0;s:1:"1";}s:3:"tag";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:2:{i:0;s:1:"2";i:1;s:1:"3";}s:3:"tag";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:3:"tag";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:4:{i:0;s:1:"7";i:1;s:1:"8";i:2;s:1:"9";i:3;s:2:"10";}s:3:"tag";s:2:"44";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:0:{}s:3:"tag";s:2:"55";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";}i:3;s:10:"up.count=3";i:4;a:5:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:3:"mva";i:1073741825;s:3:"tag";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:1:{i:0;s:3:"101";}s:3:"tag";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:2:{i:0;s:3:"201";i:1;s:3:"202";}s:3:"tag";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:3:{i:0;s:3:"301";i:1;s:3:"302";i:2;s:3:"303";}s:3:"tag";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:4:{i:0;s:1:"7";i:1;s:1:"8";i:2;s:1:"9";i:3;s:2:"10";}s:3:"tag";s:2:"44";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:0:{}s:3:"tag";s:2:"55";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";}}}i:1;a:1:{i:0;a:5:{i:0;a:5:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:3:"mva";i:1073741825;s:3:"tag";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:1:{i:0;s:1:"1";}s:3:"tag";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:2:{i:0;s:1:"2";i:1;s:1:"3";}s:3:"tag";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:3:"tag";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:4:{i:0;s:1:"7";i:1;s:1:"8";i:2;s:1:"9";i:3;s:2:"10";}s:3:"tag";s:2:"44";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:0:{}s:3:"tag";s:2:"55";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";}i:1;s:11:"up.count=-1";i:2;a:5:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:3:"mva";i:1073741825;s:3:"tag";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:1:{i:0;s:1:"1";}s:3:"tag";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:2:{i:0;s:1:"2";i:1;s:1:"3";}s:3:"tag";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:3:{i:0;s:1:"4";i:1;s:1:"5";i:2;s:1:"6";}s:3:"tag";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:4:{i:0;s:1:"7";i:1;s:1:"8";i:2;s:1:"9";i:3;s:2:"10";}s:3:"tag";s:2:"44";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:0:{}s:3:"tag";s:2:"55";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";}i:3;s:10:"up.count=3";i:4;a:5:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:3:"mva";i:1073741825;s:3:"tag";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:1:{i:0;s:3:"101";}s:3:"tag";s:2:"11";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:2:{i:0;s:3:"201";i:1;s:3:"202";}s:3:"tag";s:2:"22";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:3:{i:0;s:3:"301";i:1;s:3:"302";i:2;s:3:"303";}s:3:"tag";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:4:{i:0;s:1:"7";i:1;s:1:"8";i:2;s:1:"9";i:3;s:2:"10";}s:3:"tag";s:2:"44";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"mva";a:0:{}s:3:"tag";s:2:"55";}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_129/test.xml b/coreseek/csft-4.1/test/test_129/test.xml new file mode 100755 index 0000000..f1f62cc --- /dev/null +++ b/coreseek/csft-4.1/test/test_129/test.xml @@ -0,0 +1,95 @@ + + + +MVA updates + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT id, text, mva, tag FROM test_table + + + sql_attr_multi = uint mva from field + sql_attr_multi = bigint mva from field + + sql_attr_uint = tag +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 + docinfo = extern +} + + + +Query ( "" ); +if ( !$results[0] ) +{ + $results = false; // maybe its temporary; lets retry + return; +} + +for ( $i=0; $i<2; $i++ ) +{ + $updata = null; + if ( $i==0 ) + $updata = array(1=>array(1001), 3=>array(3001), 2=>array(2001)); + else + $updata = array(1=>array(array(101)), 3=>array(array(301, 302, 303)),2=>array(array(201, 202))); + + $up = $client->UpdateAttributes ( "idx", array("mva"), $updata, $i==1 ); + + $results[] = sprintf("up.count=%d", $up); + + $results[] = $client->Query ( "" ); +} + +// final fixup; we don't want to compare times +for ( $i=0; $i + + +CREATE TABLE `test_table` ( + `id` int(11), + `text` varchar(255) NOT NULL, + `mva` varchar(255) NOT NULL, + `tag` int(11) +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'test1', '1', 11 ), +( 2, 'test2', '2,3', 22 ), +( 3, 'test3', '4,5,6', 33 ), +( 4, 'test4', '7,8,9,10', 44 ), +( 5, 'test5', '', 55 ) + + + diff --git a/coreseek/csft-4.1/test/test_130/load_file.txt b/coreseek/csft-4.1/test/test_130/load_file.txt new file mode 100755 index 0000000..87fb1dd --- /dev/null +++ b/coreseek/csft-4.1/test/test_130/load_file.txt @@ -0,0 +1 @@ +That paper also reminds me end point as my cool friend. \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_130/model.bin b/coreseek/csft-4.1/test/test_130/model.bin new file mode 100755 index 0000000..f7f1ee4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_130/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:2:{i:0;a:1:{i:0;s:69:"That paper also reminds me end point as my cool friend.";}i:1;a:1:{i:0;s:55:"That paper also reminds me end point as my cool friend.";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_130/test.xml b/coreseek/csft-4.1/test/test_130/test.xml new file mode 100755 index 0000000..aa65aba --- /dev/null +++ b/coreseek/csft-4.1/test/test_130/test.xml @@ -0,0 +1,42 @@ + + + +snippets vs load_files + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 +} + + +select 1; + +true, 'limit'=>0 ); + +$results[] = $client->BuildExcerpts($docs, 'test', 'end point', $opts ); +$results[] = $client->BuildExcerpts($docs, 'test', 'not_found', $opts ); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_131/model.bin b/coreseek/csft-4.1/test/test_131/model.bin new file mode 100755 index 0000000..e0f4a92 --- /dev/null +++ b/coreseek/csft-4.1/test/test_131/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:1:{s:3:"the";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"the";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_131/test.xml b/coreseek/csft-4.1/test/test_131/test.xml new file mode 100755 index 0000000..6c0ae6d --- /dev/null +++ b/coreseek/csft-4.1/test/test_131/test.xml @@ -0,0 +1,74 @@ + + + +0 hit vs 0+ documents + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src0doc +{ + type = mysql + + + sql_query = SELECT id, gid, title FROM test_table where id=111 + sql_attr_uint = gid +} + +index test0doc +{ + source = src0doc + path = /test0doc + charset_type = utf-8 + docinfo = extern +} + +source src1doc +{ + type = mysql + + + sql_query = SELECT id, gid, title FROM test_table where id=11 + sql_attr_uint = gid +} + +index test1doc +{ + source = src1doc + path = /test1doc + charset_type = utf-8 + docinfo = extern +} + + + +the + + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `gid` int(11) NOT NULL default '0', + `title` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES ( 11, 1011, '' ) + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_132/model.bin b/coreseek/csft-4.1/test/test_132/model.bin new file mode 100755 index 0000000..e3b3ec7 --- /dev/null +++ b/coreseek/csft-4.1/test/test_132/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:4:{i:0;a:12:{i:0;s:11:"iteration=0";i:1;s:7:"up.ok=2";i:2;s:10:"started=ok";i:3;s:11:"iteration=1";i:4;s:7:"up.ok=2";i:5;s:10:"started=ok";i:6;s:11:"iteration=2";i:7;s:7:"up.ok=2";i:8;s:10:"started=ok";i:9;s:11:"iteration=3";i:10;s:7:"up.ok=2";i:11;s:10:"started=ok";}i:1;a:3:{s:8:"sphinxql";s:38:"select * from idx where match('test3')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1695";s:7:"section";s:3:"103";s:4:"mva1";s:5:"6,7,8";}}}i:2;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:4:"3212";s:4:"mva1";s:5:"1,2,3";s:4:"mva2";s:5:"3,4,5";}i:1;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"33";s:4:"mva1";s:1:"3";s:4:"mva2";s:1:"3";}}}i:3;a:3:{s:8:"sphinxql";s:17:"select * from idx";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:7:"section";s:3:"101";s:4:"mva1";s:3:"1,2";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:7:"section";s:3:"102";s:4:"mva1";s:14:"1002,1023,4456";}i:2;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:7:"section";s:3:"103";s:4:"mva1";s:5:"6,7,8";}i:3;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:7:"section";s:3:"104";s:4:"mva1";s:14:"1004,1005,1006";}}}}i:1;a:4:{i:0;a:12:{i:0;s:11:"iteration=0";i:1;s:7:"up.ok=2";i:2;s:10:"started=ok";i:3;s:11:"iteration=1";i:4;s:7:"up.ok=2";i:5;s:10:"started=ok";i:6;s:11:"iteration=2";i:7;s:7:"up.ok=2";i:8;s:10:"started=ok";i:9;s:11:"iteration=3";i:10;s:7:"up.ok=2";i:11;s:10:"started=ok";}i:1;a:3:{s:8:"sphinxql";s:38:"select * from idx where match('test3')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1695";s:7:"section";s:3:"103";s:4:"mva1";s:5:"6,7,8";}}}i:2;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:4:"3212";s:4:"mva1";s:5:"1,2,3";s:4:"mva2";s:5:"3,4,5";}i:1;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"33";s:4:"mva1";s:1:"3";s:4:"mva2";s:1:"3";}}}i:3;a:3:{s:8:"sphinxql";s:17:"select * from idx";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:7:"section";s:3:"101";s:4:"mva1";s:3:"1,2";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:7:"section";s:3:"102";s:4:"mva1";s:14:"1002,1023,4456";}i:2;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:7:"section";s:3:"103";s:4:"mva1";s:5:"6,7,8";}i:3;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:7:"section";s:3:"104";s:4:"mva1";s:14:"1004,1005,1006";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_132/test.xml b/coreseek/csft-4.1/test/test_132/test.xml new file mode 100755 index 0000000..7dea527 --- /dev/null +++ b/coreseek/csft-4.1/test/test_132/test.xml @@ -0,0 +1,137 @@ + + + +MVA persistent attribute updates + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + binlog_path = # + workers = threads +} + +source src +{ + type = mysql + + sql_query = SELECT id, text, section, mva1 FROM test_table + sql_attr_uint = section + + sql_attr_multi = uint mva1 from field mva1 + sql_attr_multi = bigint mva1 from field mva1 + +} + +index idx +{ + source = src + path = /main132 + charset_type = utf-8 + docinfo = extern +} + +index rt +{ + type = rt + path = /rt + charset_type = utf-8 + docinfo = extern + + rt_field = body + rt_attr_multi = mva1 + rt_attr_uint = gid + rt_attr_multi = mva2 +} + + + +UpdateAttributes ( "idx", array("mva1"), array(1=>array(array(2,3,4)), 3=>array(array(6,7,8))),true); + if ( $up >= 0 ) + $results[] = sprintf("up.ok=%d", $up); + else + $results[] = sprintf("up.err=%s", $client->GetLastError()); + + $sock = @mysql_connect ($sockStr,'','', true ); + if ( $sock === false ) + { + $results[] = "error: can't connect to searchd: " . @mysql_errno ( $sock ) . " : " . @mysql_error ( $sock ); + return; + } + @mysql_query ( 'update idx set mva1=(3,2, 1, 2), mva1=(1, 2) where id=1' ); + if ( @mysql_error() ) + $results[] = @mysql_error(); + @mysql_query ( 'update rt set mva1=(3,2, 1, 2), gid=3212, mva2=(1, 2, 3, 4, 5, 6), mva2=(3,4,5) where id=1' ); + if ( @mysql_error() ) + $results[] = @mysql_error(); + @mysql_close($sock); + + StopSearchd ( 'config.conf', 'searchd.pid' ); + + usleep ( 50000 ); + + $error = ""; + $startSta = StartSearchd ( 'config.conf', 'error.txt', 'searchd.pid', $error ); + if ( $startSta == 0 || $startSta == 2 ) + $results[] = "started=ok"; + else + $results[] = sprintf("start.err=%d local=%s client=%s", $startSta, $error, $client->GetLastError()); +} +]]> + + +select * from idx where match('test3') +select * from rt +select * from idx + + + +CREATE TABLE `test_table` ( + `id` int(11) DEFAULT NULL, + `text` varchar (255) NOT NULL, + `section` int(11) DEFAULT NULL, + `mva1` varchar(255) NOT NULL +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `text`, `section`, `mva1`) VALUES +(1, 'test1', 101, '1001'), +(2, 'test2', 102, '1002 1023 4456'), +(3, 'test3', 103, '1003 1008 1010'), +(4, 'test4', 104, '1004 1005 1006'); + + + diff --git a/coreseek/csft-4.1/test/test_133/model.bin b/coreseek/csft-4.1/test/test_133/model.bin new file mode 100755 index 0000000..34df745 --- /dev/null +++ b/coreseek/csft-4.1/test/test_133/model.bin @@ -0,0 +1 @@ +a:4:{i:0;a:19:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"1590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"one SENTENCE two";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"3590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"one SENTENCE two three";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"3590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:"one SENTENCE two SENTENCE three";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:""one two" SENTENCE three";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:5;a:2:{s:6:"weight";s:4:"2849";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1771";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"zam";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"349";}s:3:"ram";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"175";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"zam SENTENCE ram";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"fox";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"fox PARAGRAPH dog";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"sentence";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:9:"paragraph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:27:"sentence SENTENCE paragraph";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:101;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:8:"sentence";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:9:"paragraph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:"sentence PARAGRAPH paragraph";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"ZONE:zoneA walrus";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"ZONE:zoneB walrus";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneA walrus time";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneB walrus time";}i:12;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:8:"cabbages";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:2:"11";}s:5:"kings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:"ZONE:zoneC cabbages and kings";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:201;a:2:{s:6:"weight";s:4:"2695";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:5:"kings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:2:"11";}s:5:"ships";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:26:"ZONE:zoneC kings and ships";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:202;a:2:{s:6:"weight";s:4:"1624";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"sweet";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:8:"disagree";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:33:"ZONE:(zoneA,zoneB) sweet disagree";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:202;a:2:{s:6:"weight";s:4:"3636";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}i:300;a:2:{s:6:"weight";s:4:"3636";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"who";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:2:"am";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"i";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""Who am I"";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:4:{i:310;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:311;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:202;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}i:300;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"of";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"8";}s:4:"this";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""of this"";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:310;a:2:{s:6:"weight";s:4:"2622";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:311;a:2:{s:6:"weight";s:4:"2622";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:4:"like";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}s:4:"this";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneA "like this"";}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:400;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"5";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"strikes";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"strikes";}}i:1;a:19:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"1590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"one SENTENCE two";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"3590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"one SENTENCE two three";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"3590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:"one SENTENCE two SENTENCE three";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:""one two" SENTENCE three";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:5;a:2:{s:6:"weight";s:4:"2849";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1771";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"zam";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"349";}s:3:"ram";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"175";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"zam SENTENCE ram";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"fox";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"fox PARAGRAPH dog";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"sentence";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:9:"paragraph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:27:"sentence SENTENCE paragraph";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:101;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"sentence";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:9:"paragraph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:"sentence PARAGRAPH paragraph";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"ZONE:zoneA walrus";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"ZONE:zoneB walrus";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneA walrus time";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneB walrus time";}i:12;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:8:"cabbages";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:2:"11";}s:5:"kings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:"ZONE:zoneC cabbages and kings";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:201;a:2:{s:6:"weight";s:4:"2695";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:5:"kings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:2:"11";}s:5:"ships";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:26:"ZONE:zoneC kings and ships";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:202;a:2:{s:6:"weight";s:4:"1624";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"sweet";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:8:"disagree";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:33:"ZONE:(zoneA,zoneB) sweet disagree";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:202;a:2:{s:6:"weight";s:4:"3636";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}i:300;a:2:{s:6:"weight";s:4:"3636";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"who";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:2:"am";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"i";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""Who am I"";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:4:{i:310;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:311;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:202;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}i:300;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"of";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"8";}s:4:"this";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""of this"";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:310;a:2:{s:6:"weight";s:4:"2622";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:311;a:2:{s:6:"weight";s:4:"2622";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:4:"like";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}s:4:"this";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneA "like this"";}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:400;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"5";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"strikes";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"strikes";}}i:2;a:19:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"1590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"one SENTENCE two";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"3590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"one SENTENCE two three";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"3590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:"one SENTENCE two SENTENCE three";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:""one two" SENTENCE three";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:5;a:2:{s:6:"weight";s:4:"2849";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1771";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"zam";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"349";}s:3:"ram";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"175";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"zam SENTENCE ram";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"fox";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"fox PARAGRAPH dog";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"sentence";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:9:"paragraph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:27:"sentence SENTENCE paragraph";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:101;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"sentence";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:9:"paragraph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:"sentence PARAGRAPH paragraph";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"ZONE:zoneA walrus";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"ZONE:zoneB walrus";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneA walrus time";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneB walrus time";}i:12;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:8:"cabbages";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:2:"11";}s:5:"kings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:"ZONE:zoneC cabbages and kings";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:201;a:2:{s:6:"weight";s:4:"2695";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:5:"kings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:2:"11";}s:5:"ships";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:26:"ZONE:zoneC kings and ships";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:202;a:2:{s:6:"weight";s:4:"1624";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"sweet";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:8:"disagree";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:33:"ZONE:(zoneA,zoneB) sweet disagree";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:202;a:2:{s:6:"weight";s:4:"3636";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}i:300;a:2:{s:6:"weight";s:4:"3636";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"who";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:2:"am";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"i";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""Who am I"";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:4:{i:310;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:311;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:202;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}i:300;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"of";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"8";}s:4:"this";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""of this"";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:310;a:2:{s:6:"weight";s:4:"2622";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:311;a:2:{s:6:"weight";s:4:"2622";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:4:"like";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}s:4:"this";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneA "like this"";}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:400;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"5";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"strikes";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"strikes";}}i:3;a:19:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"1590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"one SENTENCE two";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:2;a:2:{s:6:"weight";s:4:"3590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"one SENTENCE two three";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"3590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:31:"one SENTENCE two SENTENCE three";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"one";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}s:3:"two";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:5:"three";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:""one two" SENTENCE three";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:5;a:2:{s:6:"weight";s:4:"2849";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1771";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"zam";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"349";}s:3:"ram";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"175";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:16:"zam SENTENCE ram";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"fox";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"fox PARAGRAPH dog";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"sentence";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:9:"paragraph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:27:"sentence SENTENCE paragraph";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:101;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:8:"sentence";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:9:"paragraph";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:28:"sentence PARAGRAPH paragraph";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"ZONE:zoneA walrus";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"ZONE:zoneB walrus";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:200;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneA walrus time";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:6:"walrus";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"time";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneB walrus time";}i:12;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:8:"cabbages";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:2:"11";}s:5:"kings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:"ZONE:zoneC cabbages and kings";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:201;a:2:{s:6:"weight";s:4:"2695";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:5:"kings";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"and";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:2:"11";}s:5:"ships";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:26:"ZONE:zoneC kings and ships";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:202;a:2:{s:6:"weight";s:4:"1624";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:5:"sweet";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:8:"disagree";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:33:"ZONE:(zoneA,zoneB) sweet disagree";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:202;a:2:{s:6:"weight";s:4:"3636";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}i:300;a:2:{s:6:"weight";s:4:"3636";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"who";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:2:"am";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:1:"i";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:""Who am I"";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:4:{i:310;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:311;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:202;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}i:300;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"of";a:2:{s:4:"docs";s:1:"7";s:4:"hits";s:1:"8";}s:4:"this";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""of this"";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:310;a:2:{s:6:"weight";s:4:"2622";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}i:311;a:2:{s:6:"weight";s:4:"2622";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:4:"like";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}s:4:"this";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"ZONE:zoneA "like this"";}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:400;a:2:{s:6:"weight";s:4:"1721";s:5:"attrs";a:1:{s:3:"gid";s:1:"5";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"strikes";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"strikes";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_133/test.xml b/coreseek/csft-4.1/test/test_133/test.xml new file mode 100755 index 0000000..1585249 --- /dev/null +++ b/coreseek/csft-4.1/test/test_133/test.xml @@ -0,0 +1,116 @@ + + + +SENTENCE, PARAGRAPH, and ZONE operators + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = select * from test_table + sql_attr_uint = gid +} + +index test +{ + source = test + path = /test + html_strip = 1 + index_sp = 1 + index_zones = zone* + + dict = crc + dict = keywords + + + + exceptions = synonyms.txt + +} + + + + +create table test_table +( + id int not null, + gid int not null, + title varchar(16384) not null +); + +drop table if exists test_table; +insert into test_table values ( 1, 1, 'One and one and one. And two. And three, all separate.' ); +insert into test_table values ( 2, 1, 'And then we\'ll have him, one two three! Kidnap the Sandy Clawz...' ); +insert into test_table values ( 3, 1, 'One two something. But not three.' ); +insert into test_table values ( 4, 1, 'Two says hello to one more three.' ); +insert into test_table values ( 5, 1, CONCAT(REPEAT('A ram zam zam. ', 171), 'Zam ram!') ); +insert into test_table values ( 6, 1, 'A ram zam zam, a ram zam zam, guli guli guli guli ram zam zam.' ); + +insert into test_table values ( 100, 2, 'Quick brown fox<p>jumps over a lazy dog.' ); +insert into test_table values ( 101, 2, 'In paragraph, yes. Not in sentence, no.' ); + +The time has come, the walrus said, to talk of many things.' );]]> +and ships, and sealing wax, of cabbages, , and kings.' );]]> +Sweet dreams are made of this.Who am I to disagree?' );]]> + + +Sweet of this.Who am I to disagree?' );]]> + + +I like this. Sweet of  this.' );]]> +I like this. Sweet of  this.' );]]> + + + + + +one SENTENCE two +one SENTENCE two three +one SENTENCE two SENTENCE three +"one two" SENTENCE three +zam SENTENCE ram + +fox PARAGRAPH dog +sentence SENTENCE paragraph +sentence PARAGRAPH paragraph + +ZONE:zoneA walrus +ZONE:zoneB walrus +ZONE:zoneA walrus time +ZONE:zoneB walrus time +ZONE:zoneC cabbages and kings +ZONE:zoneC kings and ships +ZONE:(zoneA,zoneB) sweet disagree +"Who am I" +"of this" +ZONE:zoneA "like this" +strikes + + + diff --git a/coreseek/csft-4.1/test/test_134/model.bin b/coreseek/csft-4.1/test/test_134/model.bin new file mode 100755 index 0000000..0ad7fa1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_134/model.bin @@ -0,0 +1,83 @@ +a:1:{i:0;a:1:{i:0;a:15:{i:0;a:1:{i:0;s:200:" +<---> +The institutional investment manager it. +<---> +Is Filing this report and. +<---> +It is signed hereby represent. +<---> +That it is all information. +<---> +";}i:1;a:1:{i:0;s:92:" +<---> +It is signed hereby represent. +<---> +That it is all information. +<---> +";}i:2;a:1:{i:0;s:367:" +<---> +The institutional investment manager it. Is Filing this report and. +<---> +It is signed hereby represent. That it is all information. are It or is +<---> +cool It is cooler +<---> +It is another place! +<---> +";}i:3;a:1:{i:0;s:318:" +<---> +The institutional investment manager it. Is Filing this report and. +<---> +It is signed hereby represent. That it is all information. are It or is +<---> +cool It is cooler +<---> +It is another place! +<---> +";}i:4;a:1:{i:0;s:298:" +<---> +The institutional investment manager it. Is Filing this report and. +<---> +It is signed hereby represent. That it is all information. are It or is +<---> +cool It is cooler +<---> +It is another place! +<---> +";}i:5;a:1:{i:0;s:223:"The institutional investment manager it. Is Filing this report and. It is signed hereby represent. That it is all information. Statements are considered integral parts of this form.";}i:6;a:1:{i:0;s:156:" The institutional investment manager it. Is Filing this report and. It is signed hereby represent. That it is all information. are It or is cool It +<---> +";}i:7;a:1:{i:0;s:113:" +<---> +The manager it. Is Filing this report and. +<---> +Is a signed hereby represent. +<---> +";}i:8;a:1:{i:0;s:113:" +<---> +The manager it. Is Filing this report and. +<---> +Is a signed hereby represent. +<---> +";}i:9;a:1:{i:0;s:119:" +<---> +The manager it. +<---> +Is Filing this report and. +<---> +Is a signed hereby represent. +<---> +";}i:10;a:1:{i:0;s:119:" +<---> +The manager it. +<---> +Is Filing this report and. +<---> +Is a signed hereby represent. +<---> +";}i:11;a:1:{i:0;s:113:" +<---> +The manager it. Is Filing this report and. +<---> +Is a signed hereby represent. +<---> +";}i:12;a:1:{i:0;s:89:" ... gains (if any). May fallback or go insolvent. Credit risk of the ... ";}i:13;a:1:{i:0;s:93:"Leverage gains (if any). May fallback or go insolvent. Credit risk of the deal.";}i:14;a:2:{i:0;s:87:" ... and this match pass is ... split as well as this match ... ";i:1;s:87:" ... and this match pass is ... split as well as this match ... ";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_134/test.xml b/coreseek/csft-4.1/test/test_134/test.xml new file mode 100755 index 0000000..a1dd55b --- /dev/null +++ b/coreseek/csft-4.1/test/test_134/test.xml @@ -0,0 +1,288 @@ + + + +snippets vs SPZ + + + + + + +searchd +{ + + dist_threads = 2 +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 + html_strip = 1 + index_sp = 1 + index_zones = zone_* + dict = keywords +} + +index test1 +{ + source = test + path = /test1 + + html_strip = 1 + index_sp = 1 + index_zones = zone_* + dict = crc + charset_type = utf-8 + charset_table = 0..9, a..z, A..Z->a..z +} + +index test2 +{ + source = test + path = /test2 + + html_strip = 1 + index_sp = 1 + index_zones = zone_* + dict = crc + charset_type = utf-8 + charset_table = 0..9, a..z, A..Z->a..z + blend_chars = (, ) +} + +index test3 +{ + source = test + path = /test3 + + html_strip = 1 + html_remove_elements = style, script, head + index_sp = 1 + dict = crc + charset_type = utf-8 +} + + + + +select 1; + +array ( + "

    The institutional investment manager it. Is Filing this report and. It is signed hereby represent. That it is all information. Statements are considered integral parts of this form.

    " ), + "opt"=>array ( + "limit"=>150 + , "limit_words"=>60 + , "limit_passages"=>4 + , "around"=>7 + , "html_strip_mode"=>"strip" + , 'chunk_separator'=>"\n<--->\n" + , "passage_boundary"=>"sentence" + , "emit_zones"=>false + , "exact_phrase"=>false ) + ); + +// 1 test +$refs[] = array( + "doc"=>array ( + "

    The institutional investment manager it. Is Filing this report and. It is signed hereby represent. That it is all information. Statements are considered integral parts of this form.

    " ), + "opt"=>array ( + "limit"=>150 + , "limit_words"=>60 + , "limit_passages"=>4 + , "around"=>7 + , "html_strip_mode"=>"strip" + , 'chunk_separator'=>"\n<--->\n" + , "passage_boundary"=>"sentence" + , "emit_zones"=>false + , "exact_phrase"=>true ) + ); + +// 2 test +$refs[] = array( + "doc"=>array ( + ' + +The institutional investment manager it. Is Filing this report and. + +It is signed hereby represent. That it is all information. +are It or is + + +cool It is cooler + +It is another place! + +' ), + "opt"=>array ( + "limit"=>170 + , "limit_words"=>60 + , "limit_passages"=>8 + , "around"=>8 + , "html_strip_mode"=>"strip" + , 'chunk_separator'=>"\n<--->\n" + , "passage_boundary"=>"zone" + , "emit_zones"=>true + , "exact_phrase"=>false ) + ); + +// 3 test +$refs[] = array( + "doc"=>array ( + ' + +The institutional investment manager it. Is Filing this report and. + +It is signed hereby represent. That it is all information. +are It or is + + +cool It is cooler + +It is another place! + +' ), + "opt"=>array ( + "limit"=>170 + , "limit_words"=>60 + , "limit_passages"=>8 + , "around"=>8 + , "html_strip_mode"=>"strip" + , 'chunk_separator'=>"\n<--->\n" + , "passage_boundary"=>"zone" + , "emit_zones"=>true + , "exact_phrase"=>true ) + ); + +// 4 test +$refs[] = array( + "doc"=>array ( + ' + +The institutional investment manager it. Is Filing this report and. + +It is signed hereby represent. That it is all information. +are It or is + + +cool It is cooler + +It is another place! + +' ), + "opt"=>array ( + "limit"=>170 + , "limit_words"=>60 + , "limit_passages"=>8 + , "around"=>8 + , "html_strip_mode"=>"strip" + , 'chunk_separator'=>"\n<--->\n" + , "passage_boundary"=>"zone" + , "emit_zones"=>false + , "exact_phrase"=>false ) + ); + +// 5 test - HighlightAll path - no passages +$refs[] = array( + "doc"=>array ( + "The institutional investment manager it. Is Filing this report and. It is signed hereby represent. That it is all information. Statements are considered integral parts of this form." ), + "opt"=>array ( + "limit"=>0 + , "limit_passages"=>4 + , "around"=>7 + , "html_strip_mode"=>"strip" + , 'chunk_separator'=>"\n<--->\n" + , "passage_boundary"=>"sentence" + , "emit_zones"=>false + , "exact_phrase"=>false ) + ); + + +foreach ( $refs as $ref ) +{ + $results[] = $client->BuildExcerpts($ref["doc"], 'test', $query, $ref["opt"] ); +} + +// last test - nothing found - HighlightStart path +$refs[3]['opt']['limit'] = 150; +$refs[3]['opt']['allow_empty']=true; +$results[] = $client->BuildExcerpts($refs[3]["doc"], 'test', "nothing found", $refs[3]["opt"] ); + +// 7 test +$docs7 = array ( ' The manager it. Is Filing this report and.Is a signed hereby represent.Is another place! +' ); +$opts7 = array ( + 'query_mode'=>1 + ,'limit'=>70 + , "limit_passages"=>4 + , "around"=>8 + , "html_strip_mode"=>"strip" + , 'chunk_separator'=>"\n<--->\n" + , "passage_boundary"=>"zone" + , "emit_zones"=>false); + +$results[] = $client->BuildExcerpts($docs7, 'test1', 'it is', $opts7 ); + +// 8 test +$opts7['query_mode'] = 0; +$results[] = $client->BuildExcerpts($docs7, 'test1', 'it is', $opts7 ); + +// 9 test +$opts7['passage_boundary'] = 'sentence'; +$opts7['query_mode'] = 1; +$results[] = $client->BuildExcerpts($docs7, 'test1', 'it is', $opts7 ); + +// 10 test +$opts7['query_mode'] = 0; +$results[] = $client->BuildExcerpts($docs7, 'test1', 'it is', $opts7 ); + +// 11 test +$opts7['html_strip_mode'] = 'index'; +$opts7['passage_boundary'] = 'paragraph'; +$opts7['query_mode'] = 1; +$opts7['limit_passages'] = 8; +$results[] = $client->BuildExcerpts($docs7, 'test1', 'it | is | ma1 | ma2', $opts7 ); + +$docs12 = array ('Leverage gains (if any). May fallback or go insolvent. Credit risk of the deal.'); +$words12 = 'fallback insolvent'; + +// 12 test +$opts12 = array ( 'limit'=>255, 'limit_words'=>12, 'limit_passages'=>5, 'passage_boundary'=>'paragraph', 'around'=>10 ); +$results[] = $client->BuildExcerpts($docs12, 'test2', $words12, $opts12 ); + +// 13 test +$opts12 = array ( 'limit'=>0, 'limit_words'=>0, 'limit_passages'=>0, 'passage_boundary'=>'paragraph', 'around'=>10 ); +$results[] = $client->BuildExcerpts($docs12, 'test2', $words12, $opts12 ); + +// 14 test - differrent setup with dist_threads +$docs14 = array ( ' this match should be removed and this match pass is

    split as well as this match

    tail of documnet ', + ' this match should be removed and this match pass is

    split as well as this match

    tail of documnet ' ); + +$opts14 = array ( 'limit'=>40, 'limit_words'=>0, 'limit_passages'=>0, 'passage_boundary'=>'paragraph', 'html_strip_mode'=>'index', 'around'=>25 + , 'query_mode'=>1 ); +$words14 = 'match | pass'; +$results[] = $client->BuildExcerpts($docs14, 'test3', $words14, $opts14 ); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_135/model.bin b/coreseek/csft-4.1/test/test_135/model.bin new file mode 100755 index 0000000..113a700 --- /dev/null +++ b/coreseek/csft-4.1/test/test_135/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:13:{i:0;s:11:"iteration=0";i:1;s:7:"up.ok=2";i:2;s:10:"started=ok";i:3;s:11:"iteration=1";i:4;s:7:"up.ok=2";i:5;s:10:"started=ok";i:6;s:11:"iteration=2";i:7;s:7:"up.ok=2";i:8;s:10:"started=ok";i:9;s:11:"iteration=3";i:10;s:7:"up.ok=2";i:11;s:10:"started=ok";i:12;a:6:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:7:"section";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:7:"section";i:103;s:4:"mva1";a:3:{i:0;i:1003;i:1;i:1008;i:2;i:1010;}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:5:"test3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:1;a:1:{i:0;a:13:{i:0;s:11:"iteration=0";i:1;s:7:"up.ok=2";i:2;s:10:"started=ok";i:3;s:11:"iteration=1";i:4;s:7:"up.ok=2";i:5;s:10:"started=ok";i:6;s:11:"iteration=2";i:7;s:7:"up.ok=2";i:8;s:10:"started=ok";i:9;s:11:"iteration=3";i:10;s:7:"up.ok=2";i:11;s:10:"started=ok";i:12;a:6:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:7:"section";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:7:"section";i:103;s:4:"mva1";a:3:{i:0;s:4:"1003";i:1;s:4:"1008";i:2;s:4:"1010";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:5:"test3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_135/test.xml b/coreseek/csft-4.1/test/test_135/test.xml new file mode 100755 index 0000000..500396a --- /dev/null +++ b/coreseek/csft-4.1/test/test_135/test.xml @@ -0,0 +1,103 @@ + + + +persistent MVA updates surviving after hard killing part 1 - *nix only + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + binlog_flush = 2 + binlog_path = + workers = threads +} + +source src +{ + type = mysql + + sql_query = SELECT id, text, section, mva1 FROM test_table + sql_attr_uint = section + + sql_attr_multi = uint mva1 from field mva1 + sql_attr_multi = bigint mva1 from field mva1 + +} + +index idx_130 +{ + source = src + path = /idx_130 + charset_type = utf-8 + docinfo = extern +} + + + +UpdateAttributes ( "idx_130", array("mva1"), array(1=>array(array(2,3,4)), 3=>array(array(6,7,8))),true); + if ( $up >= 0 ) + $results[] = sprintf("up.ok=%d", $up); + else + $results[] = sprintf("up.err=%s", $client->GetLastError()); + + KillSearchd ( 'config.conf', 'searchd.pid', 9, false ); + + usleep ( 50000 ); + + $error = ""; + $startSta = StartSearchd ( 'config.conf', 'error.txt', 'searchd.pid', $error ); + if ( $startSta == 0 || $startSta == 2 ) + $results[] = "started=ok"; + else + $results[] = sprintf("start.err=%d local=%s client=%s", $startSta, $error, $client->GetLastError()); +} + +// find the updated match +$results[] = $client->Query ( "test3"); + +// final fixup; we don't want to compare times +for ( $i=0; $i + + +CREATE TABLE `test_table` ( + `id` int(11) DEFAULT NULL, + `text` varchar (255) NOT NULL, + `section` int(11) DEFAULT NULL, + `mva1` varchar(255) NOT NULL +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `text`, `section`, `mva1`) VALUES +(1, 'test1', 101, '1001'), +(2, 'test2', 102, '1002 1023 4456'), +(3, 'test3', 103, '1003 1008 1010'), +(4, 'test4', 104, '1004 1005 1006'); + + + diff --git a/coreseek/csft-4.1/test/test_136/model.bin b/coreseek/csft-4.1/test/test_136/model.bin new file mode 100755 index 0000000..852ed66 --- /dev/null +++ b/coreseek/csft-4.1/test/test_136/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:17:{i:0;s:11:"iteration=0";i:1;s:7:"up.ok=2";i:2;s:17:"stoped=ok(code=0)";i:3;s:10:"started=ok";i:4;s:11:"iteration=1";i:5;s:7:"up.ok=2";i:6;s:17:"stoped=ok(code=0)";i:7;s:10:"started=ok";i:8;s:11:"iteration=2";i:9;s:7:"up.ok=2";i:10;s:17:"stoped=ok(code=0)";i:11;s:10:"started=ok";i:12;s:11:"iteration=3";i:13;s:7:"up.ok=2";i:14;s:17:"stoped=ok(code=0)";i:15;s:10:"started=ok";i:16;a:6:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:7:"section";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:7:"section";i:103;s:4:"mva1";a:3:{i:0;i:6;i:1;i:7;i:2;i:8;}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:5:"test3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}i:1;a:1:{i:0;a:17:{i:0;s:11:"iteration=0";i:1;s:7:"up.ok=2";i:2;s:17:"stoped=ok(code=0)";i:3;s:10:"started=ok";i:4;s:11:"iteration=1";i:5;s:7:"up.ok=2";i:6;s:17:"stoped=ok(code=0)";i:7;s:10:"started=ok";i:8;s:11:"iteration=2";i:9;s:7:"up.ok=2";i:10;s:17:"stoped=ok(code=0)";i:11;s:10:"started=ok";i:12;s:11:"iteration=3";i:13;s:7:"up.ok=2";i:14;s:17:"stoped=ok(code=0)";i:15;s:10:"started=ok";i:16;a:6:{s:5:"error";s:0:"";s:5:"attrs";a:2:{s:7:"section";i:1;s:4:"mva1";i:1073741825;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:7:"section";i:103;s:4:"mva1";a:3:{i:0;s:1:"6";i:1;s:1:"7";i:2;s:1:"8";}}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:5:"test3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_136/test.xml b/coreseek/csft-4.1/test/test_136/test.xml new file mode 100755 index 0000000..713c064 --- /dev/null +++ b/coreseek/csft-4.1/test/test_136/test.xml @@ -0,0 +1,104 @@ + + + +persistent MVA updates surviving after hard killing part 2 - *nix only + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + binlog_flush = 1 + binlog_path = + workers = threads +} + +source src +{ + type = mysql + + sql_query = SELECT id, text, section, mva1 FROM test_table + sql_attr_uint = section + + sql_attr_multi = uint mva1 from field mva1 + sql_attr_multi = bigint mva1 from field mva1 + +} + +index idx_131 +{ + source = src + path = /idx_131 + charset_type = utf-8 + docinfo = extern +} + + + +UpdateAttributes ( "idx_131", array("mva1"), array(1=>array(array(2,3,4)), 3=>array(array(6,7,8))),true); + if ( $up >= 0 ) + $results[] = sprintf("up.ok=%d", $up); + else + $results[] = sprintf("up.err=%s", $client->GetLastError()); + + $stop = StopWaitSearchd ('config.conf', 'searchd.pid'); + $results[] = 'stoped='.($stop==0 ? 'ok' : 'err' ) . '(code=' . $stop . ')'; + + $startSta = StartSearchd ( 'config.conf', 'error.txt', 'searchd.pid', $error, true ); + if ( $startSta == 0 || $startSta == 2 ) + $results[] = "started=ok"; + else + $results[] = sprintf("start.err=%d local=%s client=%s", $startSta, $error, $client->GetLastError()); +} + +// find the updated match +$results[] = $client->Query ( "test3"); + +// final fixup; we don't want to compare times +for ( $i=0; $i + + +CREATE TABLE `test_table` ( + `id` int(11) DEFAULT NULL, + `text` varchar (255) NOT NULL, + `section` int(11) DEFAULT NULL, + `mva1` varchar(255) NOT NULL +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `text`, `section`, `mva1`) VALUES +(1, 'test1', 101, '1001'), +(2, 'test2', 102, '1002 1023 4456'), +(3, 'test3', 103, '1003 1008 1010'), +(4, 'test4', 104, '1004 1005 1006'); + + + diff --git a/coreseek/csft-4.1/test/test_137/model.bin b/coreseek/csft-4.1/test/test_137/model.bin new file mode 100755 index 0000000..6d29437 --- /dev/null +++ b/coreseek/csft-4.1/test/test_137/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:1:{i:0;a:1:{i:0;s:57:"Was one rabiit. Now there are five rabbits.";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_137/test.xml b/coreseek/csft-4.1/test/test_137/test.xml new file mode 100755 index 0000000..70588ab --- /dev/null +++ b/coreseek/csft-4.1/test/test_137/test.xml @@ -0,0 +1,41 @@ + + + +snippets vs NEAR + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 +} + + +select 1; + +true, "around"=> 2 ); + +$results[] = $client->BuildExcerpts($docs, 'test', '(one) NEAR/35 ("five")', $opts ); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_138/model.bin b/coreseek/csft-4.1/test/test_138/model.bin new file mode 100755 index 0000000..cf0057a --- /dev/null +++ b/coreseek/csft-4.1/test/test_138/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1540";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:6:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"unused1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"unused2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"space";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"world";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:39:""one two unused1 unused2 space world"/2";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:513:{i:1;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:2;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:4;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:5;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:6;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:7;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:8;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:9;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:10;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:11;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:12;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:13;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:14;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:15;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:16;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:17;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:18;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:19;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:20;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:21;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:22;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:23;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:24;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:25;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:26;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:27;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:28;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:29;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:30;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:31;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:32;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:33;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:34;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:35;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:36;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:37;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:38;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:39;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:40;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:41;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:42;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:43;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:44;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:45;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:46;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:47;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:48;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:49;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:50;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:51;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:52;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:53;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:54;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:55;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:56;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:57;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:58;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:59;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:60;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:61;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:62;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:63;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:64;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:65;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:66;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:67;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:68;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:69;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:70;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:71;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:72;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:73;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:74;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:75;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:76;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:77;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:78;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:79;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:80;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:81;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:82;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:83;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:84;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:85;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:86;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:87;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:88;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:89;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:90;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:91;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:92;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:93;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:94;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:95;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:96;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:97;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:98;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:99;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:100;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:101;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:102;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:103;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:104;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:105;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:106;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:107;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:108;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:109;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:110;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:111;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:112;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:113;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:114;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:115;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:116;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:117;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:118;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:119;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:120;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:121;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:122;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:123;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:124;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:125;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:126;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:127;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:128;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:129;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:130;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:131;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:132;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:133;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:134;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:135;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:136;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:137;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:138;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:139;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:140;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:141;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:142;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:143;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:144;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:145;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:146;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:147;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:148;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:149;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:150;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:151;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:152;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:153;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:154;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:155;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:156;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:157;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:158;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:159;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:160;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:161;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:162;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:163;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:164;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:165;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:166;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:167;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:168;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:169;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:170;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:171;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:172;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:173;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:174;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:175;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:176;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:177;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:178;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:179;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:180;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:181;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:182;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:183;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:184;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:185;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:186;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:187;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:188;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:189;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:190;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:191;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:192;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:193;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:194;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:195;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:196;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:197;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:198;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:199;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:200;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:201;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:202;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:203;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:204;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:205;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:206;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:207;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:208;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:209;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:210;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:211;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:212;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:213;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:214;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:215;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:216;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:217;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:218;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:219;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:220;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:221;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:222;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:223;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:224;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:225;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:226;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:227;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:228;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:229;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:230;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:231;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:232;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:233;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:234;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:235;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:236;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:237;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:238;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:239;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:240;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:241;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:242;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:243;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:244;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:245;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:246;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:247;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:248;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:249;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:250;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:251;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:252;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:253;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:254;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:255;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:256;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:257;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:258;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:259;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:260;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:261;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:262;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:263;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:264;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:265;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:266;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:267;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:268;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:269;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:270;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:271;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:272;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:273;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:274;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:275;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:276;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:277;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:278;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:279;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:280;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:281;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:282;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:283;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:284;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:285;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:286;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:287;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:288;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:289;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:290;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:291;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:292;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:293;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:294;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:295;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:296;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:297;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:298;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:299;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:300;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:301;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:302;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:303;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:304;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:305;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:306;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:307;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:308;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:309;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:310;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:311;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:312;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:313;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:314;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:315;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:316;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:317;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:318;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:319;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:320;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:321;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:322;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:323;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:324;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:325;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:326;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:327;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:328;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:329;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:330;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:331;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:332;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:333;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:334;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:335;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:336;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:337;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:338;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:339;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:340;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:341;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:342;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:343;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:344;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:345;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:346;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:347;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:348;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:349;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:350;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:351;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:352;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:353;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:354;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:355;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:356;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:357;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:358;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:359;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:360;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:361;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:362;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:363;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:364;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:365;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:366;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:367;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:368;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:369;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:370;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:371;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:372;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:373;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:374;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:375;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:376;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:377;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:378;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:379;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:380;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:381;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:382;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:383;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:384;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:385;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:386;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:387;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:388;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:389;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:390;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:391;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:392;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:393;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:394;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:395;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:396;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:397;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:398;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:399;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:400;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:401;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:402;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:403;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:404;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:405;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:406;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:407;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:408;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:409;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:410;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:411;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:412;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:413;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:414;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:415;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:416;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:417;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:418;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:419;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:420;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:421;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:422;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:423;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:424;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:425;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:426;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:427;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:428;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:429;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:430;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:431;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:432;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:433;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:434;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:435;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:436;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:437;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:438;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:439;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:440;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:441;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:442;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:443;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:444;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:445;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:446;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:447;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:448;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:449;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:450;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:451;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:452;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:453;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:454;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:455;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:456;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:457;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:458;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:459;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:460;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:461;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:462;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:463;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:464;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:465;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:466;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:467;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:468;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:469;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:470;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:471;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:472;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:473;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:474;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:475;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:476;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:477;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:478;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:479;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:480;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:481;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:482;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:483;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:484;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:485;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:486;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:487;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:488;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:489;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:490;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:491;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:492;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:493;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:494;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:495;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:496;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:497;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:498;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:499;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:500;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:501;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:502;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:503;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:504;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:505;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:506;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:507;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:508;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:509;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:510;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:511;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:512;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}i:601;a:2:{s:6:"weight";s:4:"1446";s:5:"attrs";a:0:{}}}s:5:"total";s:3:"513";s:11:"total_found";s:3:"513";s:4:"time";s:5:"0.012";s:5:"words";a:6:{s:3:"one";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"unused1";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"unused2";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"space";a:2:{s:4:"docs";s:3:"514";s:4:"hits";s:3:"514";}s:5:"world";a:2:{s:4:"docs";s:3:"514";s:4:"hits";s:3:"514";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:39:""one two unused1 unused2 space world"/2";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_138/test.xml b/coreseek/csft-4.1/test/test_138/test.xml new file mode 100755 index 0000000..c68ec22 --- /dev/null +++ b/coreseek/csft-4.1/test/test_138/test.xml @@ -0,0 +1,103 @@ + +quorum vs decreased matched word + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test1 +{ + type = mysql + + sql_query = SELECT * FROM test_table1 +} + +index test1 +{ + source = test1 + path = /test1 + docinfo = extern +} + +source test2 +{ + type = mysql + + sql_query = SELECT * FROM test_table2 +} + +index test2 +{ + source = test2 + path = /test2 + docinfo = extern +} + + + +CREATE TABLE test_table1 +( + document_id INT NOT NULL, + text VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table1; + + + +CREATE TABLE test_table2 +( + document_id INT NOT NULL, + text VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table2; + + +'world space', + 2=>'one', + 3=>'two', + 4=>'world', + 5=>'space', + 6=>'unused1', + 7=>'unused2' + ); + foreach ( $sql_data as $key => $value ) + { + $text = sprintf ( "insert into test_table1 values ( %d, '%s' )", $key, $value ); + mysql_query ( $text ); + } + + $text = sprintf ( "insert into test_table2 values ( 1, '%s' )", $sql_data[1] ); + for ( $i=1; $i < 513; $i++ ) + { + $text = ''; + $text = sprintf ( "insert into test_table2 values ( %d, '%s' )", $i, $sql_data[1] ); + mysql_query ( $text ); + } + foreach ( $sql_data as $key => $value ) + { + $text = sprintf ( "insert into test_table2 values ( %d, '%s' )", 600+$key, $value ); + mysql_query ( $text ); + } +]]> + + + "one two unused1 unused2 space world"/2 + "one two unused1 unused2 space world"/2 + + + diff --git a/coreseek/csft-4.1/test/test_139/model.bin b/coreseek/csft-4.1/test/test_139/model.bin new file mode 100755 index 0000000..fa8159f --- /dev/null +++ b/coreseek/csft-4.1/test/test_139/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:5:"attr1";s:4281:" overrun1 overrun2 overrun3 overrun4 overrun5 overrun6 overrun7 overrun8 overrun9 overrun10 overrun11 overrun12 overrun13 overrun14 overrun15 overrun16 overrun17 overrun18 overrun19 overrun20 overrun21 overrun22 overrun23 overrun24 overrun25 overrun26 overrun27 overrun28 overrun29 overrun30 overrun31 overrun32 overrun33 overrun34 overrun35 overrun36 overrun37 overrun38 overrun39 overrun40 overrun41 overrun42 overrun43 overrun44 overrun45 overrun46 overrun47 overrun48 overrun49 overrun50 overrun51 overrun52 overrun53 overrun54 overrun55 overrun56 overrun57 overrun58 overrun59 overrun60 overrun61 overrun62 overrun63 overrun64 overrun65 overrun66 overrun67 overrun68 overrun69 overrun70 overrun71 overrun72 overrun73 overrun74 overrun75 overrun76 overrun77 overrun78 overrun79 overrun80 overrun81 overrun82 overrun83 overrun84 overrun85 overrun86 overrun87 overrun88 overrun89 overrun90 overrun91 overrun92 overrun93 overrun94 overrun95 overrun96 overrun97 overrun98 overrun99 overrun100 overrun101 overrun102 overrun103 overrun104 overrun105 overrun106 overrun107 overrun108 overrun109 overrun110 overrun111 overrun112 overrun113 overrun114 overrun115 overrun116 overrun117 overrun118 overrun119 overrun120 overrun121 overrun122 overrun123 overrun124 overrun125 overrun126 overrun127 overrun128 overrun129 overrun130 overrun131 overrun132 overrun133 overrun134 overrun135 overrun136 overrun137 overrun138 overrun139 overrun140 overrun141 overrun142 overrun143 overrun144 overrun145 overrun146 overrun147 overrun148 overrun149 overrun150 overrun151 overrun152 overrun153 overrun154 overrun155 overrun156 overrun157 overrun158 overrun159 overrun160 overrun161 overrun162 overrun163 overrun164 overrun165 overrun166 overrun167 overrun168 overrun169 overrun170 overrun171 overrun172 overrun173 overrun174 overrun175 overrun176 overrun177 overrun178 overrun179 overrun180 overrun181 overrun182 overrun183 overrun184 overrun185 overrun186 overrun187 overrun188 overrun189 overrun190 overrun191 overrun192 overrun193 overrun194 overrun195 overrun196 overrun197 overrun198 overrun199 overrun200 overrun201 overrun202 overrun203 overrun204 overrun205 overrun206 overrun207 overrun208 overrun209 overrun210 overrun211 overrun212 overrun213 overrun214 overrun215 overrun216 overrun217 overrun218 overrun219 overrun220 overrun221 overrun222 overrun223 overrun224 overrun225 overrun226 overrun227 overrun228 overrun229 overrun230 overrun231 overrun232 overrun233 overrun234 overrun235 overrun236 overrun237 overrun238 overrun239 overrun240 overrun241 overrun242 overrun243 overrun244 overrun245 overrun246 overrun247 overrun248 overrun249 overrun250 overrun251 overrun252 overrun253 overrun254 overrun255 overrun256 overrun257 overrun258 overrun259 overrun260 overrun261 overrun262 overrun263 overrun264 overrun265 overrun266 overrun267 overrun268 overrun269 overrun270 overrun271 overrun272 overrun273 overrun274 overrun275 overrun276 overrun277 overrun278 overrun279 overrun280 overrun281 overrun282 overrun283 overrun284 overrun285 overrun286 overrun287 overrun288 overrun289 overrun290 overrun291 overrun292 overrun293 overrun294 overrun295 overrun296 overrun297 overrun298 overrun299 overrun300 overrun301 overrun302 overrun303 overrun304 overrun305 overrun306 overrun307 overrun308 overrun309 overrun310 overrun311 overrun312 overrun313 overrun314 overrun315 overrun316 overrun317 overrun318 overrun319 overrun320 overrun321 overrun322 overrun323 overrun324 overrun325 overrun326 overrun327 overrun328 overrun329 overrun330 overrun331 overrun332 overrun333 overrun334 overrun335 overrun336 overrun337 overrun338 overrun339 overrun340 overrun341 overrun342 overrun343 overrun344 overrun345 overrun346 overrun347 overrun348 overrun349 overrun350 overrun351 overrun352 overrun353 overrun354 overrun355 overrun356 overrun357 overrun358 overrun359 overrun360 overrun361 overrun362 overrun363 overrun364 overrun365 overrun366 overrun367 overrun368 overrun369 overrun370 overrun371 overrun372 overrun373 overrun374 overrun375 overrun376 overrun377 overrun378 overrun379 overrun380 overrun381 overrun382 overrun383 overrun384 overrun385 overrun386 overrun387 overrun388 overrun389 overrun390 overrun391 overrun392 overrun393 overrun394 overrun395 overrun396 overrun397 overrun398 overrun399";s:5:"attr2";s:4281:" overrun1 overrun2 overrun3 overrun4 overrun5 overrun6 overrun7 overrun8 overrun9 overrun10 overrun11 overrun12 overrun13 overrun14 overrun15 overrun16 overrun17 overrun18 overrun19 overrun20 overrun21 overrun22 overrun23 overrun24 overrun25 overrun26 overrun27 overrun28 overrun29 overrun30 overrun31 overrun32 overrun33 overrun34 overrun35 overrun36 overrun37 overrun38 overrun39 overrun40 overrun41 overrun42 overrun43 overrun44 overrun45 overrun46 overrun47 overrun48 overrun49 overrun50 overrun51 overrun52 overrun53 overrun54 overrun55 overrun56 overrun57 overrun58 overrun59 overrun60 overrun61 overrun62 overrun63 overrun64 overrun65 overrun66 overrun67 overrun68 overrun69 overrun70 overrun71 overrun72 overrun73 overrun74 overrun75 overrun76 overrun77 overrun78 overrun79 overrun80 overrun81 overrun82 overrun83 overrun84 overrun85 overrun86 overrun87 overrun88 overrun89 overrun90 overrun91 overrun92 overrun93 overrun94 overrun95 overrun96 overrun97 overrun98 overrun99 overrun100 overrun101 overrun102 overrun103 overrun104 overrun105 overrun106 overrun107 overrun108 overrun109 overrun110 overrun111 overrun112 overrun113 overrun114 overrun115 overrun116 overrun117 overrun118 overrun119 overrun120 overrun121 overrun122 overrun123 overrun124 overrun125 overrun126 overrun127 overrun128 overrun129 overrun130 overrun131 overrun132 overrun133 overrun134 overrun135 overrun136 overrun137 overrun138 overrun139 overrun140 overrun141 overrun142 overrun143 overrun144 overrun145 overrun146 overrun147 overrun148 overrun149 overrun150 overrun151 overrun152 overrun153 overrun154 overrun155 overrun156 overrun157 overrun158 overrun159 overrun160 overrun161 overrun162 overrun163 overrun164 overrun165 overrun166 overrun167 overrun168 overrun169 overrun170 overrun171 overrun172 overrun173 overrun174 overrun175 overrun176 overrun177 overrun178 overrun179 overrun180 overrun181 overrun182 overrun183 overrun184 overrun185 overrun186 overrun187 overrun188 overrun189 overrun190 overrun191 overrun192 overrun193 overrun194 overrun195 overrun196 overrun197 overrun198 overrun199 overrun200 overrun201 overrun202 overrun203 overrun204 overrun205 overrun206 overrun207 overrun208 overrun209 overrun210 overrun211 overrun212 overrun213 overrun214 overrun215 overrun216 overrun217 overrun218 overrun219 overrun220 overrun221 overrun222 overrun223 overrun224 overrun225 overrun226 overrun227 overrun228 overrun229 overrun230 overrun231 overrun232 overrun233 overrun234 overrun235 overrun236 overrun237 overrun238 overrun239 overrun240 overrun241 overrun242 overrun243 overrun244 overrun245 overrun246 overrun247 overrun248 overrun249 overrun250 overrun251 overrun252 overrun253 overrun254 overrun255 overrun256 overrun257 overrun258 overrun259 overrun260 overrun261 overrun262 overrun263 overrun264 overrun265 overrun266 overrun267 overrun268 overrun269 overrun270 overrun271 overrun272 overrun273 overrun274 overrun275 overrun276 overrun277 overrun278 overrun279 overrun280 overrun281 overrun282 overrun283 overrun284 overrun285 overrun286 overrun287 overrun288 overrun289 overrun290 overrun291 overrun292 overrun293 overrun294 overrun295 overrun296 overrun297 overrun298 overrun299 overrun300 overrun301 overrun302 overrun303 overrun304 overrun305 overrun306 overrun307 overrun308 overrun309 overrun310 overrun311 overrun312 overrun313 overrun314 overrun315 overrun316 overrun317 overrun318 overrun319 overrun320 overrun321 overrun322 overrun323 overrun324 overrun325 overrun326 overrun327 overrun328 overrun329 overrun330 overrun331 overrun332 overrun333 overrun334 overrun335 overrun336 overrun337 overrun338 overrun339 overrun340 overrun341 overrun342 overrun343 overrun344 overrun345 overrun346 overrun347 overrun348 overrun349 overrun350 overrun351 overrun352 overrun353 overrun354 overrun355 overrun356 overrun357 overrun358 overrun359 overrun360 overrun361 overrun362 overrun363 overrun364 overrun365 overrun366 overrun367 overrun368 overrun369 overrun370 overrun371 overrun372 overrun373 overrun374 overrun375 overrun376 overrun377 overrun378 overrun379 overrun380 overrun381 overrun382 overrun383 overrun384 overrun385 overrun386 overrun387 overrun388 overrun389 overrun390 overrun391 overrun392 overrun393 overrun394 overrun395 overrun396 overrun397 overrun398 overrun399";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_139/test.xml b/coreseek/csft-4.1/test/test_139/test.xml new file mode 100755 index 0000000..b896af5 --- /dev/null +++ b/coreseek/csft-4.1/test/test_139/test.xml @@ -0,0 +1,71 @@ + +string attributes vs buffer ovverun + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT * FROM test_table + sql_attr_uint = idd + sql_attr_string = attr1 + sql_attr_string = attr2 +} + +index test +{ + source = test + path = /test + docinfo = extern +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + text VARCHAR(255) NOT NULL, + idd INT NOT NULL, + attr1 VARCHAR(5000) NOT NULL, + attr2 VARCHAR(5000) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + + + + + select * from test + + + diff --git a/coreseek/csft-4.1/test/test_140/model.bin b/coreseek/csft-4.1/test/test_140/model.bin new file mode 100755 index 0000000..0d9dd8c --- /dev/null +++ b/coreseek/csft-4.1/test/test_140/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:4:{i:0;a:3:{s:8:"sphinxql";s:35:"select * from main order by idd asc";s:10:"total_rows";i:11;s:4:"rows";a:11:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:5:"1,2,3";s:4:"str1";s:14:"some attribute";s:4:"str2";s:18:"more data are here";}i:1;a:8:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"2";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,22,222";s:4:"mva2";s:0:"";s:4:"str1";s:11:"is it sunny";s:4:"str2";s:0:"";}i:2;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"3,33,333";s:4:"mva2";s:5:"5,6,7";s:4:"str1";s:0:"";s:4:"str2";s:10:"cool place";}i:3;a:8:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"idd";s:1:"4";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:4;a:8:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:3:"idd";s:1:"5";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:10:"good stuff";s:4:"str2";s:10:"step ahead";}i:5;a:8:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"idd";s:1:"6";s:3:"tag";s:1:"0";s:4:"mva1";s:1:"6";s:4:"mva2";s:0:"";s:4:"str1";s:12:"reality real";s:4:"str2";s:18:"reality augumented";}i:6;a:8:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:3:"idd";s:1:"7";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"7";s:4:"mva2";s:0:"";s:4:"str1";s:13:"how its going";s:4:"str2";s:4:"well";}i:7;a:8:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:3:"idd";s:1:"8";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"8";s:4:"mva2";s:0:"";s:4:"str1";s:12:"its going...";s:4:"str2";s:6:"?!?!?!";}i:8;a:8:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:3:"idd";s:1:"9";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:5:"0,1,9";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:9;a:8:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,20,200";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:1:"a";}i:10;a:8:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:3:"idd";s:2:"11";s:3:"tag";s:1:"0";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:1:"b";s:4:"str2";s:0:"";}}}i:1;a:3:{s:8:"sphinxql";s:55:"select * from main where match('main') order by idd asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"1";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:5:"1,2,3";s:4:"str1";s:14:"some attribute";s:4:"str2";s:18:"more data are here";}i:1;a:8:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"2";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,22,222";s:4:"mva2";s:0:"";s:4:"str1";s:11:"is it sunny";s:4:"str2";s:0:"";}i:2;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"3";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"3,33,333";s:4:"mva2";s:5:"5,6,7";s:4:"str1";s:0:"";s:4:"str2";s:10:"cool place";}i:3;a:8:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"7";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"7";s:4:"mva2";s:0:"";s:4:"str1";s:13:"how its going";s:4:"str2";s:4:"well";}i:4;a:8:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"8";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"8";s:4:"mva2";s:0:"";s:4:"str1";s:12:"its going...";s:4:"str2";s:6:"?!?!?!";}}}i:2;a:3:{s:8:"sphinxql";s:56:"select * from main where match('delta') order by idd asc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"1";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:5:"1,2,3";s:4:"str1";s:14:"some attribute";s:4:"str2";s:18:"more data are here";}i:1;a:8:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"2";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,22,222";s:4:"mva2";s:0:"";s:4:"str1";s:11:"is it sunny";s:4:"str2";s:0:"";}i:2;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"3";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"3,33,333";s:4:"mva2";s:5:"5,6,7";s:4:"str1";s:0:"";s:4:"str2";s:10:"cool place";}i:3;a:8:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"4";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:4;a:8:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"5";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:10:"good stuff";s:4:"str2";s:10:"step ahead";}i:5;a:8:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"6";s:3:"tag";s:1:"0";s:4:"mva1";s:1:"6";s:4:"mva2";s:0:"";s:4:"str1";s:12:"reality real";s:4:"str2";s:18:"reality augumented";}i:6;a:8:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"9";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:5:"0,1,9";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:7;a:8:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1399";s:3:"idd";s:2:"10";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,20,200";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:1:"a";}i:8;a:8:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1399";s:3:"idd";s:2:"11";s:3:"tag";s:1:"0";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:1:"b";s:4:"str2";s:0:"";}}}i:3;a:3:{s:8:"sphinxql";s:63:"select * from main where match('main | delta') order by idd asc";s:10:"total_rows";i:11;s:4:"rows";a:11:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1465";s:3:"idd";s:1:"1";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:5:"1,2,3";s:4:"str1";s:14:"some attribute";s:4:"str2";s:18:"more data are here";}i:1;a:8:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1465";s:3:"idd";s:1:"2";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,22,222";s:4:"mva2";s:0:"";s:4:"str1";s:11:"is it sunny";s:4:"str2";s:0:"";}i:2;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1465";s:3:"idd";s:1:"3";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"3,33,333";s:4:"mva2";s:5:"5,6,7";s:4:"str1";s:0:"";s:4:"str2";s:10:"cool place";}i:3;a:8:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1449";s:3:"idd";s:1:"4";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:4;a:8:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1449";s:3:"idd";s:1:"5";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:10:"good stuff";s:4:"str2";s:10:"step ahead";}i:5;a:8:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1449";s:3:"idd";s:1:"6";s:3:"tag";s:1:"0";s:4:"mva1";s:1:"6";s:4:"mva2";s:0:"";s:4:"str1";s:12:"reality real";s:4:"str2";s:18:"reality augumented";}i:6;a:8:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1515";s:3:"idd";s:1:"7";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"7";s:4:"mva2";s:0:"";s:4:"str1";s:13:"how its going";s:4:"str2";s:4:"well";}i:7;a:8:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1515";s:3:"idd";s:1:"8";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"8";s:4:"mva2";s:0:"";s:4:"str1";s:12:"its going...";s:4:"str2";s:6:"?!?!?!";}i:8;a:8:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1449";s:3:"idd";s:1:"9";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:5:"0,1,9";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:9;a:8:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1449";s:3:"idd";s:2:"10";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,20,200";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:1:"a";}i:10;a:8:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1449";s:3:"idd";s:2:"11";s:3:"tag";s:1:"0";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:1:"b";s:4:"str2";s:0:"";}}}}i:1;a:4:{i:0;a:3:{s:8:"sphinxql";s:35:"select * from main order by idd asc";s:10:"total_rows";i:11;s:4:"rows";a:11:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:5:"1,2,3";s:4:"str1";s:14:"some attribute";s:4:"str2";s:18:"more data are here";}i:1;a:8:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"2";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,22,222";s:4:"mva2";s:0:"";s:4:"str1";s:11:"is it sunny";s:4:"str2";s:0:"";}i:2;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"3,33,333";s:4:"mva2";s:5:"5,6,7";s:4:"str1";s:0:"";s:4:"str2";s:10:"cool place";}i:3;a:8:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"idd";s:1:"4";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:4;a:8:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:3:"idd";s:1:"5";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:10:"good stuff";s:4:"str2";s:10:"step ahead";}i:5;a:8:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"idd";s:1:"6";s:3:"tag";s:1:"0";s:4:"mva1";s:1:"6";s:4:"mva2";s:0:"";s:4:"str1";s:12:"reality real";s:4:"str2";s:18:"reality augumented";}i:6;a:8:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:3:"idd";s:1:"7";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"7";s:4:"mva2";s:0:"";s:4:"str1";s:13:"how its going";s:4:"str2";s:4:"well";}i:7;a:8:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:3:"idd";s:1:"8";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"8";s:4:"mva2";s:0:"";s:4:"str1";s:12:"its going...";s:4:"str2";s:6:"?!?!?!";}i:8;a:8:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:3:"idd";s:1:"9";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:5:"0,1,9";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:9;a:8:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,20,200";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:1:"a";}i:10;a:8:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:3:"idd";s:2:"11";s:3:"tag";s:1:"0";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:1:"b";s:4:"str2";s:0:"";}}}i:1;a:3:{s:8:"sphinxql";s:55:"select * from main where match('main') order by idd asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"1";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:5:"1,2,3";s:4:"str1";s:14:"some attribute";s:4:"str2";s:18:"more data are here";}i:1;a:8:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"2";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,22,222";s:4:"mva2";s:0:"";s:4:"str1";s:11:"is it sunny";s:4:"str2";s:0:"";}i:2;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"3";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"3,33,333";s:4:"mva2";s:5:"5,6,7";s:4:"str1";s:0:"";s:4:"str2";s:10:"cool place";}i:3;a:8:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"7";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"7";s:4:"mva2";s:0:"";s:4:"str1";s:13:"how its going";s:4:"str2";s:4:"well";}i:4;a:8:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1530";s:3:"idd";s:1:"8";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"8";s:4:"mva2";s:0:"";s:4:"str1";s:12:"its going...";s:4:"str2";s:6:"?!?!?!";}}}i:2;a:3:{s:8:"sphinxql";s:56:"select * from main where match('delta') order by idd asc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"1";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:5:"1,2,3";s:4:"str1";s:14:"some attribute";s:4:"str2";s:18:"more data are here";}i:1;a:8:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"2";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,22,222";s:4:"mva2";s:0:"";s:4:"str1";s:11:"is it sunny";s:4:"str2";s:0:"";}i:2;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"3";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"3,33,333";s:4:"mva2";s:5:"5,6,7";s:4:"str1";s:0:"";s:4:"str2";s:10:"cool place";}i:3;a:8:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"4";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:4;a:8:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"5";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:10:"good stuff";s:4:"str2";s:10:"step ahead";}i:5;a:8:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"6";s:3:"tag";s:1:"0";s:4:"mva1";s:1:"6";s:4:"mva2";s:0:"";s:4:"str1";s:12:"reality real";s:4:"str2";s:18:"reality augumented";}i:6;a:8:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1399";s:3:"idd";s:1:"9";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:5:"0,1,9";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:7;a:8:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1399";s:3:"idd";s:2:"10";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,20,200";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:1:"a";}i:8;a:8:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1399";s:3:"idd";s:2:"11";s:3:"tag";s:1:"0";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:1:"b";s:4:"str2";s:0:"";}}}i:3;a:3:{s:8:"sphinxql";s:63:"select * from main where match('main | delta') order by idd asc";s:10:"total_rows";i:11;s:4:"rows";a:11:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1465";s:3:"idd";s:1:"1";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:5:"1,2,3";s:4:"str1";s:14:"some attribute";s:4:"str2";s:18:"more data are here";}i:1;a:8:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1465";s:3:"idd";s:1:"2";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,22,222";s:4:"mva2";s:0:"";s:4:"str1";s:11:"is it sunny";s:4:"str2";s:0:"";}i:2;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1465";s:3:"idd";s:1:"3";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"3,33,333";s:4:"mva2";s:5:"5,6,7";s:4:"str1";s:0:"";s:4:"str2";s:10:"cool place";}i:3;a:8:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1449";s:3:"idd";s:1:"4";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:4;a:8:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1449";s:3:"idd";s:1:"5";s:3:"tag";s:1:"1";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:10:"good stuff";s:4:"str2";s:10:"step ahead";}i:5;a:8:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1449";s:3:"idd";s:1:"6";s:3:"tag";s:1:"0";s:4:"mva1";s:1:"6";s:4:"mva2";s:0:"";s:4:"str1";s:12:"reality real";s:4:"str2";s:18:"reality augumented";}i:6;a:8:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1515";s:3:"idd";s:1:"7";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"7";s:4:"mva2";s:0:"";s:4:"str1";s:13:"how its going";s:4:"str2";s:4:"well";}i:7;a:8:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1515";s:3:"idd";s:1:"8";s:3:"tag";s:1:"1";s:4:"mva1";s:1:"8";s:4:"mva2";s:0:"";s:4:"str1";s:12:"its going...";s:4:"str2";s:6:"?!?!?!";}i:8;a:8:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1449";s:3:"idd";s:1:"9";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:5:"0,1,9";s:4:"str1";s:0:"";s:4:"str2";s:0:"";}i:9;a:8:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1449";s:3:"idd";s:2:"10";s:3:"tag";s:1:"0";s:4:"mva1";s:8:"2,20,200";s:4:"mva2";s:0:"";s:4:"str1";s:0:"";s:4:"str2";s:1:"a";}i:10;a:8:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1449";s:3:"idd";s:2:"11";s:3:"tag";s:1:"0";s:4:"mva1";s:0:"";s:4:"mva2";s:0:"";s:4:"str1";s:1:"b";s:4:"str2";s:0:"";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_140/test.xml b/coreseek/csft-4.1/test/test_140/test.xml new file mode 100755 index 0000000..58bd98f --- /dev/null +++ b/coreseek/csft-4.1/test/test_140/test.xml @@ -0,0 +1,90 @@ + + + +MVA and string via MySQL + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srcmain +{ + type = mysql + + + sql_query = SELECT * FROM test_table + sql_attr_uint = idd + sql_attr_string = str1 + sql_attr_uint = tag + + + sql_attr_multi = uint mva1 from field + sql_attr_string = str2 + sql_attr_multi = uint mva2 from field + + + sql_attr_multi = bigint mva1 from field + sql_attr_string = str2 + sql_attr_multi = bigint mva2 from field + + +} + +index main +{ + source = srcmain + path = /main140 + charset_type = utf-8 +} + + + +select * from main order by idd asc +select * from main where match('main') order by idd asc +select * from main where match('delta') order by idd asc +select * from main where match('main | delta') order by idd asc + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `idd` int(11) NOT NULL default '0', + `tag` int(11) NOT NULL default '0', + `mva1` varchar(255) NOT NULL default '', + `mva2` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '', + `str1` varchar(255) NOT NULL default '', + `str2` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 1, 1, '', '1 2 3','main and delta', 'some attribute', 'more data are here' ), +( 2, 2, 0, '2 22 222', '', 'main and delta' , 'is it sunny', ''), +( 3, 3, 0, '3 33 333', '5 6 7','main and delta' , '', 'cool place' ), +( 4, 4, 1, '', '', 'delta', '', '' ), +( 5, 5, 1, '', '', 'delta', 'good stuff', 'step ahead' ), +( 6, 6, 0, '6', '', 'delta', 'reality real', 'reality augumented' ), +( 7, 7, 1, '7', '', 'main', 'how its going', 'well' ), +( 8, 8, 1, '8', '', 'main', 'its going...', '?!?!?!' ), +( 9, 9, 0, '1 10 100', '9 0 1','delta', '', '' ), +(10, 10, 0, '2 20 200', '', 'delta', '', 'a' ), +(11, 11, 0, '', '', 'delta', 'b', '' ) + + + diff --git a/coreseek/csft-4.1/test/test_141/model.bin b/coreseek/csft-4.1/test/test_141/model.bin new file mode 100755 index 0000000..50da481 --- /dev/null +++ b/coreseek/csft-4.1/test/test_141/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:3:{s:8:"sphinxql";s:39:"select * from main where match('00001')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:5:"uint1";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_141/test.xml b/coreseek/csft-4.1/test/test_141/test.xml new file mode 100755 index 0000000..718ee7a --- /dev/null +++ b/coreseek/csft-4.1/test/test_141/test.xml @@ -0,0 +1,56 @@ + + +Crashing of indexer id64 with keywords dict + + + + +indexer +{ + mem_limit = 64M +} + +searchd +{ + +} +source srcmain +{ + type = mysql + + sql_query = SELECT * FROM table141 + sql_attr_uint = uint1 +} + +index main +{ + source = srcmain + path = /main + charset_type = utf-8 + dict = keywords +} + + + + +select * from main where match('00001') + + + +CREATE TABLE `table141` +( + `document_id` int(11) NOT NULL default '0', + `uint1` int(11) NOT NULL default '0', + `body` varchar(25) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `table141` + + + +INSERT INTO `table141` VALUES (1, 1, '00001'), (2, 2, '00002'), (3, 3, '00003') + + + diff --git a/coreseek/csft-4.1/test/test_142/model.bin b/coreseek/csft-4.1/test/test_142/model.bin new file mode 100755 index 0000000..e709d20 --- /dev/null +++ b/coreseek/csft-4.1/test/test_142/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:1:{i:0;a:5:{i:0;s:9:"inserting";i:1;s:7:"killing";i:2;s:16:"connecting again";i:3;s:8:"querying";i:4;s:13:"total found 0";}}i:1;a:1:{i:0;a:5:{i:0;s:9:"inserting";i:1;s:7:"killing";i:2;s:16:"connecting again";i:3;s:8:"querying";i:4;s:13:"total found 1";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_142/test.xml b/coreseek/csft-4.1/test/test_142/test.xml new file mode 100755 index 0000000..821e7b0 --- /dev/null +++ b/coreseek/csft-4.1/test/test_142/test.xml @@ -0,0 +1,80 @@ + + +RT on *nix: watchdog and replaying binlog + + + + + + + + + +searchd +{ + + workers = threads + + + binlog_path = + + + binlog_path = data + + +} + +index test +{ + type = rt + path = data/test + rt_field = content +} + + + + + + diff --git a/coreseek/csft-4.1/test/test_143/model.bin b/coreseek/csft-4.1/test/test_143/model.bin new file mode 100755 index 0000000..eeb198c --- /dev/null +++ b/coreseek/csft-4.1/test/test_143/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:5:{i:0;a:3:{s:8:"sphinxql";s:73:"CALL SNIPPETS('Kph on Europe road 1110', 'test', 'kph', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"Kph on Europe road 1110";}}}i:1;a:3:{s:8:"sphinxql";s:75:"CALL SNIPPETS('when you on+time do it', 'test', 'you on', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:29:"when you on+time do it";}}}i:2;a:3:{s:8:"sphinxql";s:77:"CALL SNIPPETS('when you on+time do it', 'test', 'you time', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:36:"when you on+time do it";}}}i:3;a:3:{s:8:"sphinxql";s:76:"CALL SNIPPETS('you on+time 0 es you 0 at', 'test', 'none', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:32:"you on+time 0 es you 0 at";}}}i:4;a:3:{s:8:"sphinxql";s:73:"CALL SNIPPETS('you on+time 0 es you 0 at', 'test', '0', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:32:"you on+time 0 es you 0 at";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_143/test.xml b/coreseek/csft-4.1/test/test_143/test.xml new file mode 100755 index 0000000..57f5a64 --- /dev/null +++ b/coreseek/csft-4.1/test/test_143/test.xml @@ -0,0 +1,41 @@ + + + +snippets vs multiwordforms + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 + wordforms = test_143/wordforms.txt + blend_chars = + +} + + +select 1; + + +CALL SNIPPETS('Kph on Europe road 1110', 'test', 'kph', 1 AS query_mode ) +CALL SNIPPETS('when you on+time do it', 'test', 'you on', 1 AS query_mode ) +CALL SNIPPETS('when you on+time do it', 'test', 'you time', 1 AS query_mode ) +CALL SNIPPETS('you on+time 0 es you 0 at', 'test', 'none', 1 AS query_mode ) +CALL SNIPPETS('you on+time 0 es you 0 at', 'test', '0', 1 AS query_mode ) + + + + diff --git a/coreseek/csft-4.1/test/test_143/wordforms.txt b/coreseek/csft-4.1/test/test_143/wordforms.txt new file mode 100755 index 0000000..5bd5f80 --- /dev/null +++ b/coreseek/csft-4.1/test/test_143/wordforms.txt @@ -0,0 +1 @@ +0 es > none diff --git a/coreseek/csft-4.1/test/test_144/model.bin b/coreseek/csft-4.1/test/test_144/model.bin new file mode 100755 index 0000000..07c564a --- /dev/null +++ b/coreseek/csft-4.1/test/test_144/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:4:{i:0;s:47:"INSERT INTO test VALUES (1, 'word1 word10', 1 )";i:1;s:16:"total affected 1";i:2;s:12253:"SELECT * FROM test WHERE MATCH('"word1 word2"~30 | "word3 word4"~30 | "word4 word5"~30 | "word5 word6"~30 | "word6 word7"~30 | "word7 word8"~30 | "word8 word9"~30 | "word9 word10"~30 | "word10 word11"~30 | "word11 word12"~30 | "word12 word13"~30 | "word13 word14"~30 | "word14 word15"~30 | "word15 word16"~30 | "word16 word17"~30 | "word17 word18"~30 | "word18 word19"~30 | "word19 word20"~30 | "word20 word21"~30 | "word21 word22"~30 | "word22 word23"~30 | "word23 word24"~30 | "word24 word25"~30 | "word25 word26"~30 | "word26 word27"~30 | "word27 word28"~30 | "word28 word29"~30 | "word29 word30"~30 | "word30 word31"~30 | "word31 word32"~30 | "word32 word33"~30 | "word33 word34"~30 | "word34 word35"~30 | "word35 word36"~30 | "word36 word37"~30 | "word37 word38"~30 | "word38 word39"~30 | "word39 word40"~30 | "word40 word41"~30 | "word41 word42"~30 | "word42 word43"~30 | "word43 word44"~30 | "word44 word45"~30 | "word45 word46"~30 | "word46 word47"~30 | "word47 word48"~30 | "word48 word49"~30 | "word49 word50"~30 | "word50 word51"~30 | "word51 word52"~30 | "word52 word53"~30 | "word53 word54"~30 | "word54 word55"~30 | "word55 word56"~30 | "word56 word57"~30 | "word57 word58"~30 | "word58 word59"~30 | "word59 word60"~30 | "word60 word61"~30 | "word61 word62"~30 | "word62 word63"~30 | "word63 word64"~30 | "word64 word65"~30 | "word65 word66"~30 | "word66 word67"~30 | "word67 word68"~30 | "word68 word69"~30 | "word69 word70"~30 | "word70 word71"~30 | "word71 word72"~30 | "word72 word73"~30 | "word73 word74"~30 | "word74 word75"~30 | "word75 word76"~30 | "word76 word77"~30 | "word77 word78"~30 | "word78 word79"~30 | "word79 word80"~30 | "word80 word81"~30 | "word81 word82"~30 | "word82 word83"~30 | "word83 word84"~30 | "word84 word85"~30 | "word85 word86"~30 | "word86 word87"~30 | "word87 word88"~30 | "word88 word89"~30 | "word89 word90"~30 | "word90 word91"~30 | "word91 word92"~30 | "word92 word93"~30 | "word93 word94"~30 | "word94 word95"~30 | "word95 word96"~30 | "word96 word97"~30 | "word97 word98"~30 | "word98 word99"~30 | "word99 word100"~30 | "word100 word101"~30 | "word101 word102"~30 | "word102 word103"~30 | "word103 word104"~30 | "word104 word105"~30 | "word105 word106"~30 | "word106 word107"~30 | "word107 word108"~30 | "word108 word109"~30 | "word109 word110"~30 | "word110 word111"~30 | "word111 word112"~30 | "word112 word113"~30 | "word113 word114"~30 | "word114 word115"~30 | "word115 word116"~30 | "word116 word117"~30 | "word117 word118"~30 | "word118 word119"~30 | "word119 word120"~30 | "word120 word121"~30 | "word121 word122"~30 | "word122 word123"~30 | "word123 word124"~30 | "word124 word125"~30 | "word125 word126"~30 | "word126 word127"~30 | "word127 word128"~30 | "word128 word129"~30 | "word129 word130"~30 | "word130 word131"~30 | "word131 word132"~30 | "word132 word133"~30 | "word133 word134"~30 | "word134 word135"~30 | "word135 word136"~30 | "word136 word137"~30 | "word137 word138"~30 | "word138 word139"~30 | "word139 word140"~30 | "word140 word141"~30 | "word141 word142"~30 | "word142 word143"~30 | "word143 word144"~30 | "word144 word145"~30 | "word145 word146"~30 | "word146 word147"~30 | "word147 word148"~30 | "word148 word149"~30 | "word149 word150"~30 | "word150 word151"~30 | "word151 word152"~30 | "word152 word153"~30 | "word153 word154"~30 | "word154 word155"~30 | "word155 word156"~30 | "word156 word157"~30 | "word157 word158"~30 | "word158 word159"~30 | "word159 word160"~30 | "word160 word161"~30 | "word161 word162"~30 | "word162 word163"~30 | "word163 word164"~30 | "word164 word165"~30 | "word165 word166"~30 | "word166 word167"~30 | "word167 word168"~30 | "word168 word169"~30 | "word169 word170"~30 | "word170 word171"~30 | "word171 word172"~30 | "word172 word173"~30 | "word173 word174"~30 | "word174 word175"~30 | "word175 word176"~30 | "word176 word177"~30 | "word177 word178"~30 | "word178 word179"~30 | "word179 word180"~30 | "word180 word181"~30 | "word181 word182"~30 | "word182 word183"~30 | "word183 word184"~30 | "word184 word185"~30 | "word185 word186"~30 | "word186 word187"~30 | "word187 word188"~30 | "word188 word189"~30 | "word189 word190"~30 | "word190 word191"~30 | "word191 word192"~30 | "word192 word193"~30 | "word193 word194"~30 | "word194 word195"~30 | "word195 word196"~30 | "word196 word197"~30 | "word197 word198"~30 | "word198 word199"~30 | "word199 word200"~30 | "word200 word201"~30 | "word201 word202"~30 | "word202 word203"~30 | "word203 word204"~30 | "word204 word205"~30 | "word205 word206"~30 | "word206 word207"~30 | "word207 word208"~30 | "word208 word209"~30 | "word209 word210"~30 | "word210 word211"~30 | "word211 word212"~30 | "word212 word213"~30 | "word213 word214"~30 | "word214 word215"~30 | "word215 word216"~30 | "word216 word217"~30 | "word217 word218"~30 | "word218 word219"~30 | "word219 word220"~30 | "word220 word221"~30 | "word221 word222"~30 | "word222 word223"~30 | "word223 word224"~30 | "word224 word225"~30 | "word225 word226"~30 | "word226 word227"~30 | "word227 word228"~30 | "word228 word229"~30 | "word229 word230"~30 | "word230 word231"~30 | "word231 word232"~30 | "word232 word233"~30 | "word233 word234"~30 | "word234 word235"~30 | "word235 word236"~30 | "word236 word237"~30 | "word237 word238"~30 | "word238 word239"~30 | "word239 word240"~30 | "word240 word241"~30 | "word241 word242"~30 | "word242 word243"~30 | "word243 word244"~30 | "word244 word245"~30 | "word245 word246"~30 | "word246 word247"~30 | "word247 word248"~30 | "word248 word249"~30 | "word249 word250"~30 | "word250 word251"~30 | "word251 word252"~30 | "word252 word253"~30 | "word253 word254"~30 | "word254 word255"~30 | "word255 word256"~30 | "word256 word257"~30 | "word257 word258"~30 | "word258 word259"~30 | "word259 word260"~30 | "word260 word261"~30 | "word261 word262"~30 | "word262 word263"~30 | "word263 word264"~30 | "word264 word265"~30 | "word265 word266"~30 | "word266 word267"~30 | "word267 word268"~30 | "word268 word269"~30 | "word269 word270"~30 | "word270 word271"~30 | "word271 word272"~30 | "word272 word273"~30 | "word273 word274"~30 | "word274 word275"~30 | "word275 word276"~30 | "word276 word277"~30 | "word277 word278"~30 | "word278 word279"~30 | "word279 word280"~30 | "word280 word281"~30 | "word281 word282"~30 | "word282 word283"~30 | "word283 word284"~30 | "word284 word285"~30 | "word285 word286"~30 | "word286 word287"~30 | "word287 word288"~30 | "word288 word289"~30 | "word289 word290"~30 | "word290 word291"~30 | "word291 word292"~30 | "word292 word293"~30 | "word293 word294"~30 | "word294 word295"~30 | "word295 word296"~30 | "word296 word297"~30 | "word297 word298"~30 | "word298 word299"~30 | "word299 word300"~30 | "word300 word301"~30 | "word301 word302"~30 | "word302 word303"~30 | "word303 word304"~30 | "word304 word305"~30 | "word305 word306"~30 | "word306 word307"~30 | "word307 word308"~30 | "word308 word309"~30 | "word309 word310"~30 | "word310 word311"~30 | "word311 word312"~30 | "word312 word313"~30 | "word313 word314"~30 | "word314 word315"~30 | "word315 word316"~30 | "word316 word317"~30 | "word317 word318"~30 | "word318 word319"~30 | "word319 word320"~30 | "word320 word321"~30 | "word321 word322"~30 | "word322 word323"~30 | "word323 word324"~30 | "word324 word325"~30 | "word325 word326"~30 | "word326 word327"~30 | "word327 word328"~30 | "word328 word329"~30 | "word329 word330"~30 | "word330 word331"~30 | "word331 word332"~30 | "word332 word333"~30 | "word333 word334"~30 | "word334 word335"~30 | "word335 word336"~30 | "word336 word337"~30 | "word337 word338"~30 | "word338 word339"~30 | "word339 word340"~30 | "word340 word341"~30 | "word341 word342"~30 | "word342 word343"~30 | "word343 word344"~30 | "word344 word345"~30 | "word345 word346"~30 | "word346 word347"~30 | "word347 word348"~30 | "word348 word349"~30 | "word349 word350"~30 | "word350 word351"~30 | "word351 word352"~30 | "word352 word353"~30 | "word353 word354"~30 | "word354 word355"~30 | "word355 word356"~30 | "word356 word357"~30 | "word357 word358"~30 | "word358 word359"~30 | "word359 word360"~30 | "word360 word361"~30 | "word361 word362"~30 | "word362 word363"~30 | "word363 word364"~30 | "word364 word365"~30 | "word365 word366"~30 | "word366 word367"~30 | "word367 word368"~30 | "word368 word369"~30 | "word369 word370"~30 | "word370 word371"~30 | "word371 word372"~30 | "word372 word373"~30 | "word373 word374"~30 | "word374 word375"~30 | "word375 word376"~30 | "word376 word377"~30 | "word377 word378"~30 | "word378 word379"~30 | "word379 word380"~30 | "word380 word381"~30 | "word381 word382"~30 | "word382 word383"~30 | "word383 word384"~30 | "word384 word385"~30 | "word385 word386"~30 | "word386 word387"~30 | "word387 word388"~30 | "word388 word389"~30 | "word389 word390"~30 | "word390 word391"~30 | "word391 word392"~30 | "word392 word393"~30 | "word393 word394"~30 | "word394 word395"~30 | "word395 word396"~30 | "word396 word397"~30 | "word397 word398"~30 | "word398 word399"~30 | "word399 word400"~30 | "word400 word401"~30 | "word401 word402"~30 | "word402 word403"~30 | "word403 word404"~30 | "word404 word405"~30 | "word405 word406"~30 | "word406 word407"~30 | "word407 word408"~30 | "word408 word409"~30 | "word409 word410"~30 | "word410 word411"~30 | "word411 word412"~30 | "word412 word413"~30 | "word413 word414"~30 | "word414 word415"~30 | "word415 word416"~30 | "word416 word417"~30 | "word417 word418"~30 | "word418 word419"~30 | "word419 word420"~30 | "word420 word421"~30 | "word421 word422"~30 | "word422 word423"~30 | "word423 word424"~30 | "word424 word425"~30 | "word425 word426"~30 | "word426 word427"~30 | "word427 word428"~30 | "word428 word429"~30 | "word429 word430"~30 | "word430 word431"~30 | "word431 word432"~30 | "word432 word433"~30 | "word433 word434"~30 | "word434 word435"~30 | "word435 word436"~30 | "word436 word437"~30 | "word437 word438"~30 | "word438 word439"~30 | "word439 word440"~30 | "word440 word441"~30 | "word441 word442"~30 | "word442 word443"~30 | "word443 word444"~30 | "word444 word445"~30 | "word445 word446"~30 | "word446 word447"~30 | "word447 word448"~30 | "word448 word449"~30 | "word449 word450"~30 | "word450 word451"~30 | "word451 word452"~30 | "word452 word453"~30 | "word453 word454"~30 | "word454 word455"~30 | "word455 word456"~30 | "word456 word457"~30 | "word457 word458"~30 | "word458 word459"~30 | "word459 word460"~30 | "word460 word461"~30 | "word461 word462"~30 | "word462 word463"~30 | "word463 word464"~30 | "word464 word465"~30 | "word465 word466"~30 | "word466 word467"~30 | "word467 word468"~30 | "word468 word469"~30 | "word469 word470"~30 | "word470 word471"~30 | "word471 word472"~30 | "word472 word473"~30 | "word473 word474"~30 | "word474 word475"~30 | "word475 word476"~30 | "word476 word477"~30 | "word477 word478"~30 | "word478 word479"~30 | "word479 word480"~30 | "word480 word481"~30 | "word481 word482"~30 | "word482 word483"~30 | "word483 word484"~30 | "word484 word485"~30 | "word485 word486"~30 | "word486 word487"~30 | "word487 word488"~30 | "word488 word489"~30 | "word489 word490"~30 | "word490 word491"~30 | "word491 word492"~30 | "word492 word493"~30 | "word493 word494"~30 | "word494 word495"~30 | "word495 word496"~30 | "word496 word497"~30 | "word497 word498"~30 | "word498 word499"~30 | "word499 word500"~30 | "word500 word501"~30 | "word501 word502"~30 | "word502 word503"~30 | "word503 word504"~30 | "word504 word505"~30 | "word505 word506"~30 | "word506 word507"~30 | "word507 word508"~30 | "word508 word509"~30 | "word509 word510"~30 | "word510 word511"~30 | "word511 word512"~30 | "word512 word513"~30 | "word513 word514"~30 | "word514 word515"~30 | "word515 word516"~30 | "word516 word517"~30 | "word517 word518"~30 | "word518 word519"~30 | "word519 word520"~30 ')";i:3;s:13:"total found 0";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_144/test.xml b/coreseek/csft-4.1/test/test_144/test.xml new file mode 100755 index 0000000..26b8f5a --- /dev/null +++ b/coreseek/csft-4.1/test/test_144/test.xml @@ -0,0 +1,83 @@ + + +query vs stack overflow + + + +searchd +{ + + workers = threads + thread_stack = 191K + binlog_path = +} + +index test +{ + type = rt + path = /test + + rt_field = text + rt_attr_uint = idd + + rt_mem_limit = 16M +} + + + + +CREATE TABLE `test` +( + `document_id` int(11) NOT NULL default '0', + `text` varchar(25) NOT NULL default '', + `idd` int(11) NOT NULL default '0' +) + + + +DROP TABLE IF EXISTS `test` + + + + + diff --git a/coreseek/csft-4.1/test/test_145/model.bin b/coreseek/csft-4.1/test/test_145/model.bin new file mode 100755 index 0000000..9286641 --- /dev/null +++ b/coreseek/csft-4.1/test/test_145/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:20:{i:0;a:3:{s:8:"sphinxql";s:72:"CALL SNIPPETS('click edit', 'test', '"click TO edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:10:"click edit";}}}i:1;a:3:{s:8:"sphinxql";s:89:"CALL SNIPPETS('click word1 WITH edit', 'test', '"click TO word1 edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:21:"click word1 WITH edit";}}}i:2;a:3:{s:8:"sphinxql";s:89:"CALL SNIPPETS('click WITH word1 edit', 'test', '"click TO word1 edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:35:"click WITH word1 edit";}}}i:3;a:3:{s:8:"sphinxql";s:79:"CALL SNIPPETS('clicking ANY edit', 'test', '"click TO edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:31:"clicking ANY edit";}}}i:4;a:3:{s:8:"sphinxql";s:76:"CALL SNIPPETS('click ANY edit', 'test', '"click TO edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:28:"click ANY edit";}}}i:5;a:3:{s:8:"sphinxql";s:76:"CALL SNIPPETS('edit ANY click', 'test', '"click TO edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:14:"edit ANY click";}}}i:6;a:3:{s:8:"sphinxql";s:95:"CALL SNIPPETS('clicking WITH ANY AND ALL TO edit', 'test', '"click TO edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:33:"clicking WITH ANY AND ALL TO edit";}}}i:7;a:3:{s:8:"sphinxql";s:92:"CALL SNIPPETS('click WITH ANY AND ALL TO edit', 'test', '"click TO edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"click WITH ANY AND ALL TO edit";}}}i:8;a:3:{s:8:"sphinxql";s:80:"CALL SNIPPETS('either click, edit', 'test', '"click TO edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:18:"either click, edit";}}}i:9;a:3:{s:8:"sphinxql";s:92:"CALL SNIPPETS('either click, edit', 'test', '"click TO ANY AND ALL edit"', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:32:"either click, edit";}}}i:10;a:3:{s:8:"sphinxql";s:72:"CALL SNIPPETS('click edit', 'test', 'click TO edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:10:"click edit";}}}i:11;a:3:{s:8:"sphinxql";s:89:"CALL SNIPPETS('click word1 WITH edit', 'test', 'click TO word1 edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:21:"click word1 WITH edit";}}}i:12;a:3:{s:8:"sphinxql";s:89:"CALL SNIPPETS('click WITH word1 edit', 'test', 'click TO word1 edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:28:"click WITH word1 edit";}}}i:13;a:3:{s:8:"sphinxql";s:79:"CALL SNIPPETS('clicking ANY edit', 'test', 'click TO edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:24:"clicking ANY edit";}}}i:14;a:3:{s:8:"sphinxql";s:76:"CALL SNIPPETS('click ANY edit', 'test', 'click TO edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:21:"click ANY edit";}}}i:15;a:3:{s:8:"sphinxql";s:76:"CALL SNIPPETS('edit ANY click', 'test', 'click TO edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:14:"edit ANY click";}}}i:16;a:3:{s:8:"sphinxql";s:95:"CALL SNIPPETS('clicking WITH ANY AND ALL TO edit', 'test', 'click TO edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:33:"clicking WITH ANY AND ALL TO edit";}}}i:17;a:3:{s:8:"sphinxql";s:92:"CALL SNIPPETS('click WITH ANY AND ALL TO edit', 'test', 'click TO edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:30:"click WITH ANY AND ALL TO edit";}}}i:18;a:3:{s:8:"sphinxql";s:80:"CALL SNIPPETS('either click, edit', 'test', 'click TO edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:18:"either click, edit";}}}i:19;a:3:{s:8:"sphinxql";s:92:"CALL SNIPPETS('either click, edit', 'test', 'click TO ANY AND ALL edit', 1 AS exact_phrase )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:25:"either click, edit";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_145/stopwords.txt b/coreseek/csft-4.1/test/test_145/stopwords.txt new file mode 100755 index 0000000..fd4334b --- /dev/null +++ b/coreseek/csft-4.1/test/test_145/stopwords.txt @@ -0,0 +1,6 @@ +TO +WITH +ANY +AND +ALL +TO diff --git a/coreseek/csft-4.1/test/test_145/test.xml b/coreseek/csft-4.1/test/test_145/test.xml new file mode 100755 index 0000000..67469b1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_145/test.xml @@ -0,0 +1,66 @@ + + + +snippets vs stopwords + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 + stopwords = test_145/stopwords.txt + morphology = stem_en + + phrase_boundary = U+002C + phrase_boundary_step = 4 +} + + +select 1; + + + +CALL SNIPPETS('click edit', 'test', '"click TO edit"', 1 AS query_mode ) +CALL SNIPPETS('click word1 WITH edit', 'test', '"click TO word1 edit"', 1 AS query_mode ) +CALL SNIPPETS('click WITH word1 edit', 'test', '"click TO word1 edit"', 1 AS query_mode ) + +CALL SNIPPETS('clicking ANY edit', 'test', '"click TO edit"', 1 AS query_mode ) +CALL SNIPPETS('click ANY edit', 'test', '"click TO edit"', 1 AS query_mode ) +CALL SNIPPETS('edit ANY click', 'test', '"click TO edit"', 1 AS query_mode ) +CALL SNIPPETS('clicking WITH ANY AND ALL TO edit', 'test', '"click TO edit"', 1 AS query_mode ) +CALL SNIPPETS('click WITH ANY AND ALL TO edit', 'test', '"click TO edit"', 1 AS query_mode ) + +CALL SNIPPETS('either click, edit', 'test', '"click TO edit"', 1 AS query_mode ) +CALL SNIPPETS('either click, edit', 'test', '"click TO ANY AND ALL edit"', 1 AS query_mode ) + + +CALL SNIPPETS('click edit', 'test', 'click TO edit', 1 AS exact_phrase ) +CALL SNIPPETS('click word1 WITH edit', 'test', 'click TO word1 edit', 1 AS exact_phrase ) +CALL SNIPPETS('click WITH word1 edit', 'test', 'click TO word1 edit', 1 AS exact_phrase ) + +CALL SNIPPETS('clicking ANY edit', 'test', 'click TO edit', 1 AS exact_phrase ) +CALL SNIPPETS('click ANY edit', 'test', 'click TO edit', 1 AS exact_phrase ) +CALL SNIPPETS('edit ANY click', 'test', 'click TO edit', 1 AS exact_phrase ) +CALL SNIPPETS('clicking WITH ANY AND ALL TO edit', 'test', 'click TO edit', 1 AS exact_phrase ) +CALL SNIPPETS('click WITH ANY AND ALL TO edit', 'test', 'click TO edit', 1 AS exact_phrase ) + +CALL SNIPPETS('either click, edit', 'test', 'click TO edit', 1 AS exact_phrase ) +CALL SNIPPETS('either click, edit', 'test', 'click TO ANY AND ALL edit', 1 AS exact_phrase ) + + + + diff --git a/coreseek/csft-4.1/test/test_146/model.bin b/coreseek/csft-4.1/test/test_146/model.bin new file mode 100755 index 0000000..b3a6f92 --- /dev/null +++ b/coreseek/csft-4.1/test/test_146/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:12:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"aaa";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"bbb";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"aaa | bbb";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:1:{s:3:"idd";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""aaa bbb"";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"( kkk zzz ) | "do dog"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:29:"( kkk zzz ) | "do not as dog"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2680";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.009";s:5:"words";a:2:{s:3:"kkk";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:""kkk zzz"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"2680";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"cool";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:21:""zzz not as not cool"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"2572";s:5:"attrs";a:1:{s:3:"idd";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1572";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:5:{s:3:"zzz";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"look";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}s:4:"cool";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:24:""zzz do dog look cool"/2";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:20:"dog not as do sleepy";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""dog not as do sleepy"";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:4:"text";i:1;s:4:"text";}s:5:"attrs";a:1:{s:3:"idd";i:1;}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3680";s:5:"attrs";a:1:{s:3:"idd";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.005";s:5:"words";a:3:{s:2:"do";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"dog";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:6:"sleepy";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:""do not as dog sleepy"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_146/stopwords.txt b/coreseek/csft-4.1/test/test_146/stopwords.txt new file mode 100755 index 0000000..b3bc520 --- /dev/null +++ b/coreseek/csft-4.1/test/test_146/stopwords.txt @@ -0,0 +1,2 @@ +not +as diff --git a/coreseek/csft-4.1/test/test_146/test.xml b/coreseek/csft-4.1/test/test_146/test.xml new file mode 100755 index 0000000..503e37e --- /dev/null +++ b/coreseek/csft-4.1/test/test_146/test.xml @@ -0,0 +1,98 @@ + + + +joined fields indexing + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + + sql_query = select id, text, idd from test; + sql_joined_field = text from query; select id, text from test_joined; + sql_attr_uint = idd +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 + docinfo = extern + + phrase_boundary = . + phrase_boundary_step = 2 + stopwords = test_146/stopwords.txt +} + + + +create table test +( + id int, + text varchar(255), + idd int +); + + + +create table test_joined +( + id int, + text varchar(255) +); + + +drop table if exists test +drop table if exists test_joined + + +insert into test (id, text, idd) values + ( 1, 'aaa', 1 ), + ( 2, 'aaa bbb', 2 ), + ( 3, 'bbb ccc', 3 ); + + + +insert into test_joined (id, text) values + ( 1, 'jjj kkk' ), + ( 1, 'zzz. my' ), + ( 1, 'cool' ), + ( 2, 'yyy' ), + ( 2, 'ttt' ), + ( 3, 'ccc do. dog' ), + ( 3, 'sleepy' ); + + + + aaa + bbb + aaa | bbb + "aaa bbb" + ( kkk zzz ) | "do dog" + ( kkk zzz ) | "do not as dog" + "kkk zzz" + "zzz not as not cool" + "zzz do dog look cool"/2 + dog not as do sleepy + "dog not as do sleepy" + "do not as dog sleepy" + + + diff --git a/coreseek/csft-4.1/test/test_147/model.bin b/coreseek/csft-4.1/test/test_147/model.bin new file mode 100755 index 0000000..fcb7b9b --- /dev/null +++ b/coreseek/csft-4.1/test/test_147/model.bin @@ -0,0 +1 @@ +a:4:{i:0;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:5:"attr1";i:1;s:4:"mva2";i:1073741825;s:4:"str2";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"1";s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}s:4:"str2";s:38:"second string attribute in the 1st row";}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"8";s:4:"mva2";a:3:{i:0;s:2:"12";i:1;s:2:"13";i:2;s:2:"14";}s:4:"str2";s:38:"second string attribute in the 2nd row";}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:2:"15";s:4:"mva2";a:3:{i:0;s:2:"19";i:1;s:2:"20";i:2;s:2:"21";}s:4:"str2";s:37:"second string attribute in the 3d row";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:5:"attr1";i:1;s:4:"mva2";i:1073741825;s:4:"str2";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"1";s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}s:4:"str2";s:38:"second string attribute in the 1st row";}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"8";s:4:"mva2";a:3:{i:0;s:2:"12";i:1;s:2:"13";i:2;s:2:"14";}s:4:"str2";s:38:"second string attribute in the 2nd row";}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:2:"15";s:4:"mva2";a:3:{i:0;s:2:"19";i:1;s:2:"20";i:2;s:2:"21";}s:4:"str2";s:37:"second string attribute in the 3d row";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:0:"";}}i:1;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:5:"attr1";i:1;s:4:"mva2";i:1073741825;s:4:"str2";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"1";s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}s:4:"str2";s:38:"second string attribute in the 1st row";}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"8";s:4:"mva2";a:3:{i:0;s:2:"12";i:1;s:2:"13";i:2;s:2:"14";}s:4:"str2";s:38:"second string attribute in the 2nd row";}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:2:"15";s:4:"mva2";a:3:{i:0;s:2:"19";i:1;s:2:"20";i:2;s:2:"21";}s:4:"str2";s:37:"second string attribute in the 3d row";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:5:"attr1";i:1;s:4:"mva2";i:1073741825;s:4:"str2";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"1";s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}s:4:"str2";s:38:"second string attribute in the 1st row";}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"8";s:4:"mva2";a:3:{i:0;s:2:"12";i:1;s:2:"13";i:2;s:2:"14";}s:4:"str2";s:38:"second string attribute in the 2nd row";}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:2:"15";s:4:"mva2";a:3:{i:0;s:2:"19";i:1;s:2:"20";i:2;s:2:"21";}s:4:"str2";s:37:"second string attribute in the 3d row";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:0:"";}}i:2;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:5:"attr1";i:1;s:4:"mva2";i:1073741825;s:4:"str2";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"1";s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}s:4:"str2";s:38:"second string attribute in the 1st row";}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"8";s:4:"mva2";a:3:{i:0;s:2:"12";i:1;s:2:"13";i:2;s:2:"14";}s:4:"str2";s:38:"second string attribute in the 2nd row";}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:2:"15";s:4:"mva2";a:3:{i:0;s:2:"19";i:1;s:2:"20";i:2;s:2:"21";}s:4:"str2";s:37:"second string attribute in the 3d row";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:5:"attr1";i:1;s:4:"mva2";i:1073741825;s:4:"str2";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"1";s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}s:4:"str2";s:38:"second string attribute in the 1st row";}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"8";s:4:"mva2";a:3:{i:0;s:2:"12";i:1;s:2:"13";i:2;s:2:"14";}s:4:"str2";s:38:"second string attribute in the 2nd row";}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:2:"15";s:4:"mva2";a:3:{i:0;s:2:"19";i:1;s:2:"20";i:2;s:2:"21";}s:4:"str2";s:37:"second string attribute in the 3d row";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:0:"";}}i:3;a:2:{i:0;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:5:"attr1";i:1;s:4:"mva2";i:1073741825;s:4:"str2";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"1";s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}s:4:"str2";s:38:"second string attribute in the 1st row";}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"8";s:4:"mva2";a:3:{i:0;s:2:"12";i:1;s:2:"13";i:2;s:2:"14";}s:4:"str2";s:38:"second string attribute in the 2nd row";}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:2:"15";s:4:"mva2";a:3:{i:0;s:2:"19";i:1;s:2:"20";i:2;s:2:"21";}s:4:"str2";s:37:"second string attribute in the 3d row";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:0:"";}i:1;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:3:{s:5:"attr1";i:1;s:4:"mva2";i:1073741825;s:4:"str2";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"1";s:4:"mva2";a:3:{i:0;s:1:"5";i:1;s:1:"6";i:2;s:1:"7";}s:4:"str2";s:38:"second string attribute in the 1st row";}}i:2;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:1:"8";s:4:"mva2";a:3:{i:0;s:2:"12";i:1;s:2:"13";i:2;s:2:"14";}s:4:"str2";s:38:"second string attribute in the 2nd row";}}i:3;a:2:{s:6:"weight";s:4:"1319";s:5:"attrs";a:3:{s:5:"attr1";s:2:"15";s:4:"mva2";a:3:{i:0;s:2:"19";i:1;s:2:"20";i:2;s:2:"21";}s:4:"str2";s:37:"second string attribute in the 3d row";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"text";a:2:{s:4:"docs";s:1:"9";s:4:"hits";s:1:"9";}}s:5:"query";s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_147/test.xml b/coreseek/csft-4.1/test/test_147/test.xml new file mode 100755 index 0000000..1d8c653 --- /dev/null +++ b/coreseek/csft-4.1/test/test_147/test.xml @@ -0,0 +1,176 @@ + +multi-index queries vs mva and string attributes + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + + dist_threads = 0 + dist_threads = 2 + +} + +source src_base +{ + type = mysql + +} + + + +source src_1 : src_base +{ + sql_query = SELECT id, attr1, mva1, mva2, str1, str2, text FROM test_table WHERE idx = 'i1'; + + sql_attr_multi = uint mva1 from field + sql_attr_multi = uint mva2 from field + sql_attr_string = str1 + sql_attr_string = str2 + sql_attr_uint = attr1 +} + +source src_2 : src_base +{ + sql_query = SELECT id, attr1, mva2, str1, str2, text FROM test_table WHERE idx = 'i2'; + + sql_attr_multi = uint mva2 from field + sql_attr_string = str1 + sql_attr_string = str2 + sql_attr_uint = attr1 +} + +source src_3 : src_base +{ + sql_query = SELECT id, attr1, mva1, mva2, str2, text FROM test_table WHERE idx = 'i3'; + + sql_attr_multi = uint mva1 from field + sql_attr_multi = uint mva2 from field + sql_attr_string = str2 + sql_attr_uint = attr1 +} + + +source src_1 : src_base +{ + sql_query = SELECT id, attr1, mva1, mva2, str1, str2, text FROM test_table WHERE idx = 'i1'; + + sql_attr_multi = bigint mva1 from field + sql_attr_multi = bigint mva2 from field + sql_attr_string = str1 + sql_attr_string = str2 + sql_attr_uint = attr1 +} + +source src_2 : src_base +{ + sql_query = SELECT id, attr1, mva2, str1, str2, text FROM test_table WHERE idx = 'i2'; + + sql_attr_multi = bigint mva2 from field + sql_attr_string = str1 + sql_attr_string = str2 + sql_attr_uint = attr1 +} + +source src_3 : src_base +{ + sql_query = SELECT id, attr1, mva1, mva2, str2, text FROM test_table WHERE idx = 'i3'; + + sql_attr_multi = bigint mva1 from field + sql_attr_multi = bigint mva2 from field + sql_attr_string = str2 + sql_attr_uint = attr1 +} + + + +index i1 +{ + source = src_1 + path = /i1 + docinfo = extern + charset_type = utf-8 + +} + +index i2 +{ + source = src_2 + path = /i2 + docinfo = extern + charset_type = utf-8 + +} + +index i3 +{ + source = src_3 + path = /i3 + docinfo = extern + charset_type = utf-8 + +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + attr1 INT NOT NULL, + mva1 VARCHAR(255) NOT NULL, + mva2 VARCHAR(255) NOT NULL, + str1 VARCHAR(255) NOT NULL, + str2 VARCHAR(255) NOT NULL, + text VARCHAR(255) NOT NULL DEFAULT 'text', + idx VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table; + + + +INSERT INTO test_table (id, attr1, mva1, mva2, str1, str2, idx) VALUES +( 1, 10, '101, 101, 103', '110, 111, 112', 'some data 100', 'another data 110', 'i1' ), +( 2, 20, '201, 202, 203', '21, 211, 212', 'some data 200', 'another data 210', 'i1' ), +( 3, 30, '12, 302, 303', '310, 312, 313', 'some data 300', 'another data 310', 'i1' ), + +( 1, 1000, '', '1000, 10000, 100000', 'aaa bbb', 'ccc ddd', 'i2' ), +( 2, 2000, '', '2000, 20000, 21', 'eee fff', 'ggg hhh', 'i2' ), +( 3, 3000, '', '3000, 30000, 300000', 'iii jjj', 'lll mmm', 'i2' ), + +( 1, 1, '2, 3, 4', '5, 6, 7', '', 'second string attribute in the 1st row', 'i3' ), +( 2, 8, '9, 10, 11', '12, 13, 14', '', 'second string attribute in the 2nd row', 'i3' ), +( 3, 15, '12, 17, 18', '19, 20, 21', '', 'second string attribute in the 3d row', 'i3' ) + + + +SetMatchMode (SPH_MATCH_EXTENDED2); + + $results = array(); + + $q = "text"; + $i = "*"; + + $client->ResetFilters(); + $client->AddQuery ($q, $i); + $client->AddQuery ($q, $i); + $results = $client->RunQueries(); +]]> + + + + + + diff --git a/coreseek/csft-4.1/test/test_148/doc1.txt b/coreseek/csft-4.1/test/test_148/doc1.txt new file mode 100755 index 0000000..79c2240 --- /dev/null +++ b/coreseek/csft-4.1/test/test_148/doc1.txt @@ -0,0 +1 @@ +dummy text \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_148/doc2.txt b/coreseek/csft-4.1/test/test_148/doc2.txt new file mode 100755 index 0000000..bbc6d4b --- /dev/null +++ b/coreseek/csft-4.1/test/test_148/doc2.txt @@ -0,0 +1,140 @@ +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy text +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy text +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_148/doc3.txt b/coreseek/csft-4.1/test/test_148/doc3.txt new file mode 100755 index 0000000..541aa81 --- /dev/null +++ b/coreseek/csft-4.1/test/test_148/doc3.txt @@ -0,0 +1,140 @@ +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy text +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy text +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy text +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy +dummy dummy dummy dummy dummy dummy dummy dummy dummy dummy \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_148/model.bin b/coreseek/csft-4.1/test/test_148/model.bin new file mode 100755 index 0000000..d1ffe92 --- /dev/null +++ b/coreseek/csft-4.1/test/test_148/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:3:{s:8:"sphinxql";s:51:"select * from test where match ('ZONE:zoneA dummy')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1104";s:3:"idd";s:1:"2";}}}i:1;a:3:{s:8:"sphinxql";s:51:"select * from test where match ('@body[1024] text')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1216";s:3:"idd";s:1:"3";}}}i:2;a:3:{s:8:"sphinxql";s:52:"select * from test where match ('@body[1024] dummy')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1104";s:3:"idd";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1104";s:3:"idd";s:1:"3";}}}i:3;a:3:{s:8:"sphinxql";s:62:"select * from start_end where match ('@body ABB') group by idd";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1272";s:4:"body";s:3:"ABB";s:3:"idd";s:1:"1";s:8:"@groupby";s:1:"1";s:6:"@count";s:3:"600";}}}i:4;a:3:{s:8:"sphinxql";s:63:"select * from start_end where match ('@body ^ABB') group by idd";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1272";s:4:"body";s:3:"ABB";s:3:"idd";s:1:"1";s:8:"@groupby";s:1:"1";s:6:"@count";s:3:"600";}}}i:5;a:3:{s:8:"sphinxql";s:63:"select * from start_end where match ('@body ABB$') group by idd";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1272";s:4:"body";s:3:"ABB";s:3:"idd";s:1:"1";s:8:"@groupby";s:1:"1";s:6:"@count";s:3:"600";}}}i:6;a:3:{s:8:"sphinxql";s:64:"select * from start_end where match ('@body ^ABB$') group by idd";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1272";s:4:"body";s:3:"ABB";s:3:"idd";s:1:"1";s:8:"@groupby";s:1:"1";s:6:"@count";s:3:"599";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_148/test.xml b/coreseek/csft-4.1/test/test_148/test.xml new file mode 100755 index 0000000..56dae05 --- /dev/null +++ b/coreseek/csft-4.1/test/test_148/test.xml @@ -0,0 +1,95 @@ + +field position limit vs many hits + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT * FROM test_table + sql_attr_uint = idd + sql_file_field = body +} + +index test +{ + source = test + path = /test + docinfo = extern + + html_strip = 1 + index_sp = 1 + index_zones = zone* +} + +source start_end +{ + type = mysql + + sql_query = SELECT id, body, 1 as idd FROM start_end_table + sql_attr_uint = idd + sql_field_string = body +} + +index start_end +{ + source = start_end + path = /start_end + docinfo = extern +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + body VARCHAR(2048) NOT NULL, + idd INT NOT NULL +); + + +CREATE TABLE start_end_table +( + id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, + body VARCHAR(64) NOT NULL +); + + +drop table if exists test_table; +drop table if exists start_end_table; + +insert into test_table values ( 1, 'test_148/doc1.txt', 1 ); +insert into test_table values ( 2, 'test_148/doc2.txt', 2 ); +insert into test_table values ( 3, 'test_148/doc3.txt', 3 ); + + + select * from test where match ('ZONE:zoneA dummy') + select * from test where match ('@body[1024] text') + select * from test where match ('@body[1024] dummy') + select * from start_end where match ('@body ABB') group by idd + select * from start_end where match ('@body ^ABB') group by idd + select * from start_end where match ('@body ABB$') group by idd + select * from start_end where match ('@body ^ABB$') group by idd + + + + + diff --git a/coreseek/csft-4.1/test/test_149/model.bin b/coreseek/csft-4.1/test/test_149/model.bin new file mode 100755 index 0000000..2912f9c --- /dev/null +++ b/coreseek/csft-4.1/test/test_149/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:7;s:4:"rows";a:7:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:2:"20";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:2:"30";}i:3;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"idd";s:2:"40";}i:4;a:3:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:3:"idd";s:2:"50";}i:5;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"idd";s:2:"60";}i:6;a:3:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:3:"idd";s:2:"70";}}}i:1;a:3:{s:8:"sphinxql";s:41:"select * from test where @id IN (1,3,6,7)";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:2:"30";}i:2;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"idd";s:2:"60";}i:3;a:3:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:3:"idd";s:2:"70";}}}i:2;a:3:{s:8:"sphinxql";s:46:"select * from test where @id IN (1,1000,3,6,7)";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:2:"30";}i:2;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"idd";s:2:"60";}i:3;a:3:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:3:"idd";s:2:"70";}}}i:3;a:3:{s:8:"sphinxql";s:46:"select * from test where @id IN (1000,1,3,6,7)";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:2:"30";}i:2;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"idd";s:2:"60";}i:3;a:3:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:3:"idd";s:2:"70";}}}i:4;a:3:{s:8:"sphinxql";s:46:"select * from test where @id IN (1,3,6,1000,7)";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:2:"30";}i:2;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"idd";s:2:"60";}i:3;a:3:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:3:"idd";s:2:"70";}}}i:5;a:3:{s:8:"sphinxql";s:76:"select * from test where idd IN (875,321,60,1010,20,457,20,311,20,750,70,10)";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:2:"10";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:2:"20";}i:2;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"idd";s:2:"60";}i:3;a:3:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:3:"idd";s:2:"70";}}}i:6;a:3:{s:8:"sphinxql";s:72:"select * from test where idd NOT IN (60,1010,20,457,20,311,20,750,70,10)";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:2:"30";}i:1;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"idd";s:2:"40";}i:2;a:3:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:3:"idd";s:2:"50";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_149/test.xml b/coreseek/csft-4.1/test/test_149/test.xml new file mode 100755 index 0000000..bffdb57 --- /dev/null +++ b/coreseek/csft-4.1/test/test_149/test.xml @@ -0,0 +1,60 @@ + +MySQL IN vs filter order + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT * FROM test_table + sql_attr_uint = idd +} + +index test +{ + source = test + path = /test + docinfo = extern +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + body VARCHAR(2048) NOT NULL, + idd INT NOT NULL +); + + +drop table if exists test_table; + +insert into test_table values ( 1, 'test', 10 ); +insert into test_table values ( 2, 'test', 20 ); +insert into test_table values ( 3, 'test', 30 ); +insert into test_table values ( 4, 'test', 40 ); +insert into test_table values ( 5, 'test', 50 ); +insert into test_table values ( 6, 'test', 60 ); +insert into test_table values ( 7, 'test', 70 ); + + + select * from test + select * from test where @id IN (1,3,6,7) + select * from test where @id IN (1,1000,3,6,7) + select * from test where @id IN (1000,1,3,6,7) + select * from test where @id IN (1,3,6,1000,7) + select * from test where idd IN (875,321,60,1010,20,457,20,311,20,750,70,10) + select * from test where idd NOT IN (60,1010,20,457,20,311,20,750,70,10) + + + diff --git a/coreseek/csft-4.1/test/test_150/model.bin b/coreseek/csft-4.1/test/test_150/model.bin new file mode 100755 index 0000000..682358c --- /dev/null +++ b/coreseek/csft-4.1/test/test_150/model.bin @@ -0,0 +1 @@ +a:3:{i:0;a:2:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:8:{i:5;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1540";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1525";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"1525";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1525";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:7;a:2:{s:6:"weight";s:4:"1525";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:8;a:2:{s:6:"weight";s:4:"1525";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:1;a:2:{s:6:"weight";s:4:"1514";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"8";s:11:"total_found";s:1:"8";s:4:"time";s:5:"0.004";s:5:"words";a:5:{s:8:"function";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"funny";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:10:"functional";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:7:"functic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"fun";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"fu*";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:6:{i:2;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:7;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:8;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:8:"function";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:10:"functional";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:7:"functic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"func*";}}i:1;a:2:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:6:{i:3;a:2:{s:6:"weight";s:4:"1567";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:7;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:1;a:2:{s:6:"weight";s:4:"1523";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:5;a:2:{s:6:"weight";s:4:"1523";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:10:"functional";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"funny";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:8:"function";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"fu*";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:6:{i:2;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:4;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:7;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:8;a:2:{s:6:"weight";s:4:"1543";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"6";s:11:"total_found";s:1:"6";s:4:"time";s:5:"0.003";s:5:"words";a:3:{s:8:"function";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:10:"functional";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:7:"functic";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"func*";}}i:2;a:2:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:4:{i:3;a:2:{s:6:"weight";s:4:"1600";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:7;a:2:{s:6:"weight";s:4:"1564";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:1;a:2:{s:6:"weight";s:4:"1535";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:5;a:2:{s:6:"weight";s:4:"1535";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.003";s:5:"words";a:2:{s:5:"funny";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:10:"functional";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:3:"fu*";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:4:{i:2;a:2:{s:6:"weight";s:4:"1564";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:3;a:2:{s:6:"weight";s:4:"1564";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:6;a:2:{s:6:"weight";s:4:"1564";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:7;a:2:{s:6:"weight";s:4:"1564";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:10:"functional";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:8:"function";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"func*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_150/test.xml b/coreseek/csft-4.1/test/test_150/test.xml new file mode 100755 index 0000000..069c460 --- /dev/null +++ b/coreseek/csft-4.1/test/test_150/test.xml @@ -0,0 +1,65 @@ + + + +keywords dictionary vs expansion limit + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + + expansion_limit = 0 + expansion_limit = 3 + expansion_limit = 2 + +} + +source test +{ + type = mysql + + sql_query = select * from test_table + sql_attr_uint = gid +} + +index test +{ + source = test + path = /test + + dict = keywords + min_prefix_len = 2 + enable_star = 1 +} + + + + +create table test_table +( + id int not null, + gid int not null, + title varchar(255) not null +); + +drop table if exists test_table; +insert into test_table values ( 1, 1, 'funny place.' ); +insert into test_table values ( 2, 1, 'is it function?' ); +insert into test_table values ( 3, 1, 'functional lang. quite funny.' ); +insert into test_table values ( 4, 1, 'functic sequence.' ); +insert into test_table values ( 5, 1, 'fun place. funny place.' ); +insert into test_table values ( 6, 1, 'its function.' ); +insert into test_table values ( 7, 1, 'functional is not place.' ); +insert into test_table values ( 8, 1, 'functic is not place.' ); + + + fu* + func* + + + diff --git a/coreseek/csft-4.1/test/test_151/model.bin b/coreseek/csft-4.1/test/test_151/model.bin new file mode 100755 index 0000000..2839b4c --- /dev/null +++ b/coreseek/csft-4.1/test/test_151/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:3:{s:8:"sphinxql";s:48:"select * from test where match( '"the para"~2' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";s:3:"idd";s:1:"1";}}}i:1;a:3:{s:8:"sphinxql";s:48:"select * from test where match( '"the para"~3' )";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";s:3:"idd";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";s:3:"idd";s:1:"3";}}}i:2;a:3:{s:8:"sphinxql";s:48:"select * from test where match( '"the zone"~2' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1569";s:3:"idd";s:1:"2";}}}i:3;a:3:{s:8:"sphinxql";s:52:"select * from test where match( 'ZONE:zone_A para' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1557";s:3:"idd";s:1:"3";}}}i:4;a:2:{s:8:"sphinxql";s:60:"select * from test where match( 'couple PARAGRAPH trooper' )";s:10:"total_rows";i:0;}i:5;a:3:{s:8:"sphinxql";s:56:"select * from test where match( 'of PARAGRAPH trooper' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"2695";s:3:"idd";s:1:"4";}}}i:6;a:3:{s:8:"sphinxql";s:61:"select * from test where match( 'ZONE:zone_A "couple of"~2' )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1695";s:3:"idd";s:1:"4";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_151/test.xml b/coreseek/csft-4.1/test/test_151/test.xml new file mode 100755 index 0000000..39e35d6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_151/test.xml @@ -0,0 +1,69 @@ + + +html_stripper vs hit position + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + + sql_query = SELECT * FROM test_table + sql_attr_uint = idd +} + +index test +{ + source = src + path = /test + charset_type = utf-8 + html_strip = 1 + + index_sp = 1 + index_zones = zone_* +} + + + +CREATE TABLE test_table +( + id INTEGER NOT NULL, + idd INTEGER NOT NULL, + title VARCHAR(255) NOT NULL +) + +DROP TABLE IF EXISTS `test_table` + +

    para' );]]> + +

    zone' );]]> + +

    broken para' );]]> + +

    couple

    of trooper' );]]> + + + select * from test where match( '"the para"~2' ) + select * from test where match( '"the para"~3' ) + select * from test where match( '"the zone"~2' ) + select * from test where match( 'ZONE:zone_A para' ) + select * from test where match( 'couple PARAGRAPH trooper' ) + select * from test where match( 'of PARAGRAPH trooper' ) + select * from test where match( 'ZONE:zone_A "couple of"~2' ) + + + diff --git a/coreseek/csft-4.1/test/test_152/model.bin b/coreseek/csft-4.1/test/test_152/model.bin new file mode 100755 index 0000000..2476c8c --- /dev/null +++ b/coreseek/csft-4.1/test/test_152/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:5:{i:0;a:3:{s:8:"sphinxql";s:49:"select * from test1 where match('aa SENTENCE bb')";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"2466";s:3:"gid";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"2466";s:3:"gid";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2466";s:3:"gid";s:1:"1";}i:3;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"2426";s:3:"gid";s:1:"1";}}}i:1;a:3:{s:8:"sphinxql";s:54:"select * from test1 where match('(aa SENTENCE bb) cc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"3488";s:3:"gid";s:1:"1";}}}i:2;a:3:{s:8:"sphinxql";s:122:"CALL SNIPPETS ('dummy1 match1 dummy2 match2', 'test1', ' ( match1 NEAR/3 match2 ) | ^missed1 | missed2 ', 1 as query_mode)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"dummy1 match1 dummy2 match2";}}}i:3;a:3:{s:8:"sphinxql";s:65:"select * from test2 where match('(ZONE:z_1 aa )') order by id asc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1280";s:3:"gid";s:1:"1";}i:1;a:3:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1280";s:3:"gid";s:1:"1";}i:2;a:3:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1280";s:3:"gid";s:1:"1";}i:3;a:3:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1018";s:3:"gid";s:1:"1";}i:4;a:3:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1280";s:3:"gid";s:1:"1";}i:5;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1280";s:3:"gid";s:1:"1";}}}i:4;a:3:{s:8:"sphinxql";s:69:"select * from test3 where match ( ' match1 | ( match5 << match2) ' ) ";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:10:"3452816845";s:6:"weight";s:4:"1500";s:3:"gid";s:1:"3";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_152/test.xml b/coreseek/csft-4.1/test/test_152/test.xml new file mode 100755 index 0000000..48dfd27 --- /dev/null +++ b/coreseek/csft-4.1/test/test_152/test.xml @@ -0,0 +1,134 @@ + + +tail hits vs UNIT node + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src1 +{ + type = mysql + + + sql_query = SELECT * FROM test_table where gid=1 + sql_attr_uint = gid +} + +index test1 +{ + source = src1 + path = /test1 + charset_type = utf-8 + html_strip = 1 + index_sp = 1 +} + +source src2 +{ + type = mysql + + + sql_query = SELECT * FROM test_table2 + sql_attr_uint = gid +} + +index test2 +{ + source = src2 + path = /test2 + docinfo = extern + charset_type = utf-8 + html_strip = 1 + index_sp = 1 + index_zones = z_* +} + +source src3 +{ + type = mysql + + + sql_query = SELECT * FROM test_table3 + sql_attr_uint = gid +} + +index test3 +{ + source = src3 + path = /test3 + docinfo = extern + charset_type = utf-8 +} + + + +CREATE TABLE test_table +( + id INTEGER NOT NULL, + gid INTEGER NOT NULL, + title VARCHAR(16384) NOT NULL +) + +DROP TABLE IF EXISTS test_table +insert into test_table values ( 1, 1, 'aa bb cc' ) +insert into test_table values ( 2, 1, 'aa bb' ) +insert into test_table values ( 3, 1, 'aa bb' ) +insert into test_table values ( 4, 1, CONCAT(REPEAT('aa bb. ', 512), 'aa bb. ')) +insert into test_table values ( 5, 1, 'cc' ) +insert into test_table values ( 6, 1, 'cc' ) + + +CREATE TABLE test_table2 +( + id INTEGER NOT NULL, + gid INTEGER NOT NULL, + title VARCHAR(6048) NOT NULL +) + +DROP TABLE IF EXISTS test_table2 +insert into test_table2 values ( 1, 1, 'aa' ) +insert into test_table2 values ( 2, 1, 'aa' ) +insert into test_table2 values ( 3, 1, 'aa' ) +insert into test_table2 values ( 4, 1, 'aa' ) +insert into test_table2 values ( 5, 1, 'aa' ) +aa' )]]> +aa' )]]> +aa' )]]> + ', CONCAT ( REPEAT ( 'aa ', 512 ), ' ' ) ) )]]> + aa ' )]]> + aa ' )]]> + + +CREATE TABLE test_table3 +( + id BIGINT NOT NULL, + gid INTEGER NOT NULL, + title VARCHAR(6048) NOT NULL +) + +DROP TABLE IF EXISTS test_table3 +insert into test_table3 values ( 3452816845, 3, 'match1 and match2 vs match3' ) + + + select * from test1 where match('aa SENTENCE bb') + select * from test1 where match('(aa SENTENCE bb) cc') + CALL SNIPPETS ('dummy1 match1 dummy2 match2', 'test1', ' ( match1 NEAR/3 match2 ) | ^missed1 | missed2 ', 1 as query_mode) + + select * from test2 where match('(ZONE:z_1 aa )') order by id asc + + + + + diff --git a/coreseek/csft-4.1/test/test_153/model.bin b/coreseek/csft-4.1/test/test_153/model.bin new file mode 100755 index 0000000..e5e2849 --- /dev/null +++ b/coreseek/csft-4.1/test/test_153/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:64:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:2:"gr";i:1;s:3:"tag";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"3";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"2";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:3:"tag";i:1;s:2:"gr";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:2:"gr";i:1;s:1:"t";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:2:"gr";i:1;s:1:"t";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:2:"gr";i:1;s:1:"t";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:5;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:2:"gr";i:1;s:1:"t";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:6;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:2:"gr";i:1;s:1:"t";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:7;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:2:"gr";i:1;s:1:"t";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.013";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:8;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:2:"gr";i:1;s:1:"t";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:9;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:5:{s:1:"t";i:1;s:3:"tag";i:1;s:2:"gr";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"t";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:10;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:5:{s:1:"t";i:1;s:3:"tag";i:1;s:2:"gr";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:5:{s:1:"t";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:11;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:3:"tag";i:1;s:2:"gr";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:2:"gr";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:3:"tag";i:1;s:2:"gr";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.002";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"test";}i:14;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:1:"t";i:1;s:2:"gr";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:8:"@groupby";s:1:"3";s:6:"@count";s:2:"10";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:15;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:2:{s:1:"t";i:1;s:2:"gr";i:1;}s:7:"matches";a:10:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:2:"10";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"9";}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"8";}}i:7;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"7";}}i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"6";}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"5";}}i:10;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"4";}}}s:5:"total";s:2:"10";s:11:"total_found";s:2:"10";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:16;a:12:{s:5:"error";s:0:"";s:7:"warning";s:145:"index distfake: agent 127.0.0.1:6722: remote query error: index idxfake: parse error: unknown identifier 'tag' (not an attribute, not a function)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:1:"t";i:1;s:3:"tag";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"4";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"3";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:2:"11";s:3:"tag";s:1:"2";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"1";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:2:"10";s:3:"tag";s:1:"2";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.011";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:17;a:12:{s:5:"error";s:0:"";s:7:"warning";s:87:"index idxfake: parse error: unknown identifier 'tag' (not an attribute, not a function)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:1:"t";i:1;s:3:"tag";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"4";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"3";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:2:"11";s:3:"tag";s:1:"2";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"1";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:2:"10";s:3:"tag";s:1:"2";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:18;a:12:{s:5:"error";s:0:"";s:7:"warning";s:146:"index disthfake: agent 127.0.0.1:6722: remote query error: index idxfake: parse error: unknown identifier 'tag' (not an attribute, not a function)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:1:"t";i:1;s:3:"tag";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"4";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"3";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:2:"11";s:3:"tag";s:1:"2";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"1";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:2:"10";s:3:"tag";s:1:"2";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:19;a:12:{s:5:"error";s:0:"";s:7:"warning";s:87:"index idxfake: parse error: unknown identifier 'tag' (not an attribute, not a function)";s:6:"status";i:3;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:4:{s:1:"t";i:1;s:3:"tag";i:1;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"4";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"4";s:6:"@count";s:1:"2";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:1:"3";s:3:"tag";s:1:"2";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"1";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:2:"11";s:3:"tag";s:1:"2";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"1";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:1:"t";s:2:"10";s:3:"tag";s:1:"2";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:20;a:3:{s:8:"sphinxql";s:21:"select * from dist_no";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:21;a:3:{s:8:"sphinxql";s:19:"select * from dist0";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:22;a:3:{s:8:"sphinxql";s:19:"select * from dist1";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:23;a:3:{s:8:"sphinxql";s:19:"select * from dist2";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:24;a:3:{s:8:"sphinxql";s:19:"select * from dist3";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:25;a:3:{s:8:"sphinxql";s:19:"select * from dist4";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:26;a:3:{s:8:"sphinxql";s:19:"select * from dist5";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:27;a:3:{s:8:"sphinxql";s:49:"select gr, sum(tag) as t from dist_no group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";}}}i:28;a:3:{s:8:"sphinxql";s:47:"select gr, sum(tag) as t from dist0 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";}}}i:29;a:3:{s:8:"sphinxql";s:47:"select gr, sum(tag) as t from dist1 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";}}}i:30;a:3:{s:8:"sphinxql";s:47:"select gr, sum(tag) as t from dist2 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";}}}i:31;a:3:{s:8:"sphinxql";s:47:"select gr, sum(tag) as t from dist3 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";}}}i:32;a:3:{s:8:"sphinxql";s:53:"select tag,gr from dist4 group by tag order by gr asc";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:33;a:3:{s:8:"sphinxql";s:47:"select gr, sum(tag) as t from dist4 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";}}}i:34;a:3:{s:8:"sphinxql";s:47:"select gr, sum(tag) as t from dist5 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"4";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"2";}}}i:35;a:3:{s:8:"sphinxql";s:43:"select sum(tag) as t from dist0 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:1:"t";s:1:"4";}i:1;a:1:{s:1:"t";s:1:"2";}}}i:36;a:3:{s:8:"sphinxql";s:43:"select sum(tag) as t from dist5 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:1:"t";s:1:"4";}i:1;a:1:{s:1:"t";s:1:"2";}}}i:37;a:3:{s:8:"sphinxql";s:44:"select gr, tag+1 as t from dist0 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"3";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"3";}}}i:38;a:3:{s:8:"sphinxql";s:44:"select gr, tag+1 as t from dist5 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:1:"t";s:1:"3";}i:1;a:2:{s:2:"gr";s:1:"2";s:1:"t";s:1:"3";}}}i:39;a:3:{s:8:"sphinxql";s:64:"select tag+1 as t from dist0 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:1:"t";s:1:"3";}i:1;a:1:{s:1:"t";s:1:"3";}i:2;a:1:{s:1:"t";s:1:"3";}}}i:40;a:3:{s:8:"sphinxql";s:64:"select tag+1 as t from dist5 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:1:"t";s:1:"3";}i:1;a:1:{s:1:"t";s:1:"3";}i:2;a:1:{s:1:"t";s:1:"3";}}}i:41;a:3:{s:8:"sphinxql";s:68:"select tag+1 as t, gr from dist0 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";}i:1;a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";}i:2;a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";}}}i:42;a:3:{s:8:"sphinxql";s:68:"select tag+1 as t, gr from dist5 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";}i:1;a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";}i:2;a:2:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";}}}i:43;a:3:{s:8:"sphinxql";s:77:"select tag+1 as t, gr, tag, gr from dist0 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";s:3:"tag";s:1:"2";}i:1;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:3:"tag";s:1:"2";}i:2;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:3:"tag";s:1:"2";}}}i:44;a:3:{s:8:"sphinxql";s:77:"select tag+1 as t, gr, tag, gr from dist5 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";s:3:"tag";s:1:"2";}i:1;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:3:"tag";s:1:"2";}i:2;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:3:"tag";s:1:"2";}}}i:45;a:3:{s:8:"sphinxql";s:79:"select tag+1 as t, gr, gr+1 as g from dist0 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";s:1:"g";s:1:"3";}i:1;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:1:"g";s:1:"4";}i:2;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:1:"g";s:1:"4";}}}i:46;a:3:{s:8:"sphinxql";s:79:"select tag+1 as t, gr, gr+1 as g from dist5 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";s:1:"g";s:1:"3";}i:1;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:1:"g";s:1:"4";}i:2;a:3:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:1:"g";s:1:"4";}}}i:47;a:3:{s:8:"sphinxql";s:89:"select tag+1 as t, gr, tag as tt, tag, tag from dist0 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";s:2:"tt";s:1:"2";s:3:"tag";s:1:"2";}i:1;a:4:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:2:"tt";s:1:"2";s:3:"tag";s:1:"2";}i:2;a:4:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:2:"tt";s:1:"2";s:3:"tag";s:1:"2";}}}i:48;a:3:{s:8:"sphinxql";s:89:"select tag+1 as t, gr, tag as tt, tag, tag from dist5 where match('test') ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:1:"t";s:1:"3";s:2:"gr";s:1:"2";s:2:"tt";s:1:"2";s:3:"tag";s:1:"2";}i:1;a:4:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:2:"tt";s:1:"2";s:3:"tag";s:1:"2";}i:2;a:4:{s:1:"t";s:1:"3";s:2:"gr";s:1:"3";s:2:"tt";s:1:"2";s:3:"tag";s:1:"2";}}}i:49;a:3:{s:8:"sphinxql";s:44:"select tag+1 as t from dist0 ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:1:"t";s:1:"3";}i:1;a:1:{s:1:"t";s:1:"3";}i:2;a:1:{s:1:"t";s:1:"3";}}}i:50;a:3:{s:8:"sphinxql";s:44:"select tag+1 as t from dist5 ORDER BY gr ASC";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:1:"t";s:1:"3";}i:1;a:1:{s:1:"t";s:1:"3";}i:2;a:1:{s:1:"t";s:1:"3";}}}i:51;a:3:{s:8:"sphinxql";s:39:"select * from dist0 where match('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:52;a:3:{s:8:"sphinxql";s:39:"select * from dist5 where match('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}i:1;a:3:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";s:2:"gr";s:1:"2";}i:2;a:3:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";s:2:"gr";s:1:"3";}}}i:53;a:3:{s:8:"sphinxql";s:60:"select @id as idd, gr,tag+1 as t from dist50 order by gr asc";s:10:"total_rows";i:10;s:4:"rows";a:10:{i:0;a:3:{s:3:"idd";s:1:"2";s:2:"gr";s:1:"2";s:1:"t";s:1:"3";}i:1;a:3:{s:3:"idd";s:1:"1";s:2:"gr";s:1:"3";s:1:"t";s:1:"3";}i:2;a:3:{s:3:"idd";s:1:"3";s:2:"gr";s:1:"3";s:1:"t";s:1:"3";}i:3;a:3:{s:3:"idd";s:2:"10";s:2:"gr";s:1:"4";s:1:"t";s:1:"3";}i:4;a:3:{s:3:"idd";s:1:"9";s:2:"gr";s:1:"5";s:1:"t";s:1:"3";}i:5;a:3:{s:3:"idd";s:1:"8";s:2:"gr";s:1:"6";s:1:"t";s:1:"3";}i:6;a:3:{s:3:"idd";s:1:"7";s:2:"gr";s:1:"7";s:1:"t";s:1:"3";}i:7;a:3:{s:3:"idd";s:1:"6";s:2:"gr";s:1:"8";s:1:"t";s:1:"3";}i:8;a:3:{s:3:"idd";s:1:"5";s:2:"gr";s:1:"9";s:1:"t";s:1:"3";}i:9;a:3:{s:3:"idd";s:1:"4";s:2:"gr";s:2:"10";s:1:"t";s:1:"3";}}}i:54;a:3:{s:8:"sphinxql";s:57:"select @id as idd, tag+1 as t from dist50 order by gr asc";s:10:"total_rows";i:10;s:4:"rows";a:10:{i:0;a:2:{s:3:"idd";s:1:"2";s:1:"t";s:1:"3";}i:1;a:2:{s:3:"idd";s:1:"1";s:1:"t";s:1:"3";}i:2;a:2:{s:3:"idd";s:1:"3";s:1:"t";s:1:"3";}i:3;a:2:{s:3:"idd";s:2:"10";s:1:"t";s:1:"3";}i:4;a:2:{s:3:"idd";s:1:"9";s:1:"t";s:1:"3";}i:5;a:2:{s:3:"idd";s:1:"8";s:1:"t";s:1:"3";}i:6;a:2:{s:3:"idd";s:1:"7";s:1:"t";s:1:"3";}i:7;a:2:{s:3:"idd";s:1:"6";s:1:"t";s:1:"3";}i:8;a:2:{s:3:"idd";s:1:"5";s:1:"t";s:1:"3";}i:9;a:2:{s:3:"idd";s:1:"4";s:1:"t";s:1:"3";}}}i:55;a:3:{s:8:"sphinxql";s:60:"select @id as idd, gr,tag+1 as t from dist52 order by gr asc";s:10:"total_rows";i:10;s:4:"rows";a:10:{i:0;a:3:{s:3:"idd";s:1:"2";s:2:"gr";s:1:"2";s:1:"t";s:1:"3";}i:1;a:3:{s:3:"idd";s:1:"1";s:2:"gr";s:1:"3";s:1:"t";s:1:"3";}i:2;a:3:{s:3:"idd";s:1:"3";s:2:"gr";s:1:"3";s:1:"t";s:1:"3";}i:3;a:3:{s:3:"idd";s:2:"10";s:2:"gr";s:1:"4";s:1:"t";s:1:"3";}i:4;a:3:{s:3:"idd";s:1:"9";s:2:"gr";s:1:"5";s:1:"t";s:1:"3";}i:5;a:3:{s:3:"idd";s:1:"8";s:2:"gr";s:1:"6";s:1:"t";s:1:"3";}i:6;a:3:{s:3:"idd";s:1:"7";s:2:"gr";s:1:"7";s:1:"t";s:1:"3";}i:7;a:3:{s:3:"idd";s:1:"6";s:2:"gr";s:1:"8";s:1:"t";s:1:"3";}i:8;a:3:{s:3:"idd";s:1:"5";s:2:"gr";s:1:"9";s:1:"t";s:1:"3";}i:9;a:3:{s:3:"idd";s:1:"4";s:2:"gr";s:2:"10";s:1:"t";s:1:"3";}}}i:56;a:3:{s:8:"sphinxql";s:57:"select @id as idd, tag+1 as t from dist52 order by gr asc";s:10:"total_rows";i:10;s:4:"rows";a:10:{i:0;a:2:{s:3:"idd";s:1:"2";s:1:"t";s:1:"3";}i:1;a:2:{s:3:"idd";s:1:"1";s:1:"t";s:1:"3";}i:2;a:2:{s:3:"idd";s:1:"3";s:1:"t";s:1:"3";}i:3;a:2:{s:3:"idd";s:2:"10";s:1:"t";s:1:"3";}i:4;a:2:{s:3:"idd";s:1:"9";s:1:"t";s:1:"3";}i:5;a:2:{s:3:"idd";s:1:"8";s:1:"t";s:1:"3";}i:6;a:2:{s:3:"idd";s:1:"7";s:1:"t";s:1:"3";}i:7;a:2:{s:3:"idd";s:1:"6";s:1:"t";s:1:"3";}i:8;a:2:{s:3:"idd";s:1:"5";s:1:"t";s:1:"3";}i:9;a:2:{s:3:"idd";s:1:"4";s:1:"t";s:1:"3";}}}i:57;a:3:{s:8:"sphinxql";s:59:"select @id as idd, gr,tag+1 as t from idx51 order by gr asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:3:{s:3:"idd";s:1:"2";s:2:"gr";s:1:"2";s:1:"t";s:1:"3";}i:1;a:3:{s:3:"idd";s:1:"1";s:2:"gr";s:1:"3";s:1:"t";s:1:"3";}i:2;a:3:{s:3:"idd";s:1:"3";s:2:"gr";s:1:"3";s:1:"t";s:1:"3";}i:3;a:3:{s:3:"idd";s:1:"5";s:2:"gr";s:1:"9";s:1:"t";s:1:"3";}i:4;a:3:{s:3:"idd";s:1:"4";s:2:"gr";s:2:"10";s:1:"t";s:1:"3";}}}i:58;a:3:{s:8:"sphinxql";s:56:"select @id as idd, tag+1 as t from idx51 order by gr asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:2:{s:3:"idd";s:1:"2";s:1:"t";s:1:"3";}i:1;a:2:{s:3:"idd";s:1:"1";s:1:"t";s:1:"3";}i:2;a:2:{s:3:"idd";s:1:"3";s:1:"t";s:1:"3";}i:3;a:2:{s:3:"idd";s:1:"5";s:1:"t";s:1:"3";}i:4;a:2:{s:3:"idd";s:1:"4";s:1:"t";s:1:"3";}}}i:59;a:3:{s:8:"sphinxql";s:70:"select @id as idd, gr+1 as t from distfake group by t order by tag asc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:2:{s:3:"idd";s:1:"1";s:1:"t";s:1:"4";}i:1;a:2:{s:3:"idd";s:1:"2";s:1:"t";s:1:"3";}i:2;a:2:{s:3:"idd";s:1:"4";s:1:"t";s:2:"11";}i:3;a:2:{s:3:"idd";s:1:"5";s:1:"t";s:2:"10";}}}i:60;a:3:{s:8:"sphinxql";s:72:"select @id as idd, gr+1 as t from disthfakeb group by t order by tag asc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:2:{s:3:"idd";s:1:"1";s:1:"t";s:1:"4";}i:1;a:2:{s:3:"idd";s:1:"2";s:1:"t";s:1:"3";}i:2;a:2:{s:3:"idd";s:1:"4";s:1:"t";s:2:"11";}i:3;a:2:{s:3:"idd";s:1:"5";s:1:"t";s:2:"10";}}}i:61;a:3:{s:8:"sphinxql";s:71:"select @id as idd, gr+1 as t from disthfake group by t order by tag asc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:2:{s:3:"idd";s:1:"1";s:1:"t";s:1:"4";}i:1;a:2:{s:3:"idd";s:1:"2";s:1:"t";s:1:"3";}i:2;a:2:{s:3:"idd";s:1:"4";s:1:"t";s:2:"11";}i:3;a:2:{s:3:"idd";s:1:"5";s:1:"t";s:2:"10";}}}i:62;a:3:{s:8:"sphinxql";s:71:"select @id as idd, gr+1 as t from distlfake group by t order by tag asc";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:2:{s:3:"idd";s:1:"1";s:1:"t";s:1:"4";}i:1;a:2:{s:3:"idd";s:1:"2";s:1:"t";s:1:"3";}i:2;a:2:{s:3:"idd";s:1:"4";s:1:"t";s:2:"11";}i:3;a:2:{s:3:"idd";s:1:"5";s:1:"t";s:2:"10";}}}i:63;a:2:{s:8:"sphinxql";s:51:"select * from dist50 where match ( 'broken merge' )";s:10:"total_rows";i:0;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_153/test.xml b/coreseek/csft-4.1/test/test_153/test.xml new file mode 100755 index 0000000..644bdbb --- /dev/null +++ b/coreseek/csft-4.1/test/test_153/test.xml @@ -0,0 +1,371 @@ + + +aggregate, aliases, different sorting, grouping and schemas vs different type of distributed + + + + +indexer +{ + mem_limit = 28M +} + +searchd +{ + + compat_sphinxql_magics = 0 + workers = threads +} + +source auth +{ + type = mysql + +} + +source src : auth +{ + sql_query = SELECT id, tag, gr, text FROM test_table WHERE id<4 + sql_query_pre = SET NAMES UTF8 + sql_attr_uint = tag + sql_attr_uint = gr +} + +source src1 : src +{ + sql_query = SELECT id, tag, gr, text FROM test_table WHERE id<3 +} + +source src2 : src +{ + sql_query = SELECT id, tag, gr, text FROM test_table WHERE id=3 +} + +source src51 : src +{ + sql_query = SELECT id, tag, gr, text FROM test_table WHERE id<6 +} + +source src52 : src +{ + sql_query = SELECT id, tag, gr, text FROM test_table WHERE id>5 +} + +source fake: auth +{ + sql_query = SELECT id, gr, text FROM test_table WHERE id<4 + sql_attr_uint = gr +} + +index dist_no +{ + source = src + path = /idx + docinfo = extern + charset_type = utf-8 + min_word_len = 1 +} + +index idx1 : dist_no +{ + source = src1 + path = /idx1 +} + +index idx2 : dist_no +{ + source = src2 + path = /idx2 +} + +index idx51 : dist_no +{ + source = src51 + path = /idx51 +} + +index idx52 : dist_no +{ + source = src52 + path = /idx52 +} + +index idxfake : dist_no +{ + source = fake + path = /otheridx +} + + +index dist50 +{ + type = distributed + local = idx51 + agent = :idx52 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist52 +{ + type = distributed + local = idx51 + local = idx52 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + + +index dist0 +{ + type = distributed + local = dist_no + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist1 +{ + type = distributed + local = idx1 + local = idx2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist2 +{ + type = distributed + agent = :idx1 + local = idx2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist3 +{ + type = distributed + local = idx1 + agent = :idx2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist4 +{ + type = distributed + agent = :idx1 + agent = :idx2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist5 +{ + type = distributed + agent = :dist_no + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index distfake +{ + type = distributed + agent = :idx51 + agent = :idxfake + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index disthfake +{ + type = distributed + local = idx51 + agent = :idxfake + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index disthfakeb +{ + type = distributed + agent = :idx51 + local = idxfake + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index distlfake +{ + type = distributed + local = idx51 + local = idxfake + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test +test + + + + --> + + + + + + + + + + + + + + + + +select * from dist_no +select * from dist0 +select * from dist1 +select * from dist2 +select * from dist3 +select * from dist4 +select * from dist5 + + + +select gr, sum(tag) as t from dist_no group by gr +select gr, sum(tag) as t from dist0 group by gr +select gr, sum(tag) as t from dist1 group by gr +select gr, sum(tag) as t from dist2 group by gr +select gr, sum(tag) as t from dist3 group by gr + + + select tag,gr from dist4 group by tag order by gr asc + + + select gr, sum(tag) as t from dist4 group by gr + select gr, sum(tag) as t from dist5 group by gr + + + +select sum(tag) as t from dist0 group by gr +select sum(tag) as t from dist5 group by gr + + + +select gr, tag+1 as t from dist0 group by gr +select gr, tag+1 as t from dist5 group by gr + + + +select tag+1 as t from dist0 where match('test') ORDER BY gr ASC +select tag+1 as t from dist5 where match('test') ORDER BY gr ASC + + + +select tag+1 as t, gr from dist0 where match('test') ORDER BY gr ASC +select tag+1 as t, gr from dist5 where match('test') ORDER BY gr ASC +select tag+1 as t, gr, tag, gr from dist0 where match('test') ORDER BY gr ASC +select tag+1 as t, gr, tag, gr from dist5 where match('test') ORDER BY gr ASC +select tag+1 as t, gr, gr+1 as g from dist0 where match('test') ORDER BY gr ASC +select tag+1 as t, gr, gr+1 as g from dist5 where match('test') ORDER BY gr ASC +select tag+1 as t, gr, tag as tt, tag, tag from dist0 where match('test') ORDER BY gr ASC +select tag+1 as t, gr, tag as tt, tag, tag from dist5 where match('test') ORDER BY gr ASC + + + +select tag+1 as t from dist0 ORDER BY gr ASC +select tag+1 as t from dist5 ORDER BY gr ASC + + + +select * from dist0 where match('test') +select * from dist5 where match('test') + + + + +select @id as idd, gr,tag+1 as t from dist50 order by gr asc +select @id as idd, tag+1 as t from dist50 order by gr asc +select @id as idd, gr,tag+1 as t from dist52 order by gr asc +select @id as idd, tag+1 as t from dist52 order by gr asc +select @id as idd, gr,tag+1 as t from idx51 order by gr asc +select @id as idd, tag+1 as t from idx51 order by gr asc + + + +select @id as idd, gr+1 as t from distfake group by t order by tag asc +select @id as idd, gr+1 as t from disthfakeb group by t order by tag asc +select @id as idd, gr+1 as t from disthfake group by t order by tag asc +select @id as idd, gr+1 as t from distlfake group by t order by tag asc + + +select * from dist50 where match ( 'broken merge' ) + + + + +CREATE TABLE `test_table` ( + `id` int(11), + `tag` int(11), + `gr` int(11), + `text` varchar(255) NOT NULL +) + + + + +DROP TABLE IF EXISTS `test_table` + + + +SET NAMES utf8 + +INSERT INTO `test_table` VALUES +( 1, 2, 3, 'test'), +( 2, 2, 2, 'test'), +( 3, 2, 3, 'test'), +( 4, 2, 10, 'test'), +( 5, 2, 9, 'test'), +( 6, 2, 8, 'test'), +( 7, 2, 7, 'test'), +( 8, 2, 6, 'test'), +( 9, 2, 5, 'test'), +( 10, 2, 4, 'test') + + + diff --git a/coreseek/csft-4.1/test/test_154/model.bin b/coreseek/csft-4.1/test/test_154/model.bin new file mode 100755 index 0000000..110f4d4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_154/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:15:{i:0;a:2:{s:8:"sphinxql";s:57:"insert into rt (id, idd1, body) values ( 11, 14, 'bird' )";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:65:"insert into rt (id, idd1, body) values ( 12, 13, 'dog eats cat' )";s:14:"total_affected";i:1;}i:2;a:2:{s:8:"sphinxql";s:66:"insert into rt (id, idd1, body) values ( 13, 12, 'cat eats bird' )";s:14:"total_affected";i:1;}i:3;a:2:{s:8:"sphinxql";s:59:"insert into rt (id, idd1, body) values ( 14, 11, 'a bird' )";s:14:"total_affected";i:1;}i:4;a:2:{s:8:"sphinxql";s:58:"insert into rt (id, idd1, body) values ( 15, 11, 'a cat' )";s:14:"total_affected";i:1;}i:5;a:2:{s:8:"sphinxql";s:58:"insert into rt (id, idd1, body) values ( 16, 11, 'a dog' )";s:14:"total_affected";i:1;}i:6;a:3:{s:8:"sphinxql";s:19:"select * from plain";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:3;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";}i:4;a:3:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";}i:5;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"14";}}}i:7;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"14";}i:1;a:3:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";}i:2;a:3:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";}i:3;a:3:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:4;a:3:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:5;a:3:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}}}i:8;a:3:{s:8:"sphinxql";s:18:"select * from both";s:10:"total_rows";i:12;s:4:"rows";a:12:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:3;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";}i:4;a:3:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";}i:5;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"14";}i:6;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"14";}i:7;a:3:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";}i:8;a:3:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";}i:9;a:3:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:10;a:3:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:11;a:3:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}}}i:9;a:2:{s:8:"sphinxql";s:36:"select * from both where match ('a')";s:10:"total_rows";i:0;}i:10;a:3:{s:8:"sphinxql";s:39:"select * from both where match ('bird')";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"12";}i:2;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"14";}i:3;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"14";}i:4;a:3:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"12";}i:5;a:3:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"11";}}}i:11;a:3:{s:8:"sphinxql";s:32:"select * from both where idd1=11";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:3;a:3:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:4;a:3:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:5;a:3:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}}}i:12;a:3:{s:8:"sphinxql";s:33:"select * from both where idd1!=11";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";}i:1;a:3:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";}i:2;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"14";}i:3;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"14";}i:4;a:3:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";}i:5;a:3:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";}}}i:13;a:3:{s:8:"sphinxql";s:52:"select * from both where match ('bird') and idd1!=11";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"12";}i:1;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"14";}i:2;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"14";}i:3;a:3:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1533";s:4:"idd1";s:2:"12";}}}i:14;a:3:{s:8:"sphinxql";s:33:"select * from both where idd1!=10";s:10:"total_rows";i:12;s:4:"rows";a:12:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:3;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";}i:4;a:3:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";}i:5;a:3:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"14";}i:6;a:3:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"14";}i:7;a:3:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";}i:8;a:3:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";}i:9;a:3:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:10;a:3:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}i:11;a:3:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_154/stopwords.txt b/coreseek/csft-4.1/test/test_154/stopwords.txt new file mode 100755 index 0000000..7d63282 --- /dev/null +++ b/coreseek/csft-4.1/test/test_154/stopwords.txt @@ -0,0 +1,4 @@ +a +dog +cat +eats \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_154/test.xml b/coreseek/csft-4.1/test/test_154/test.xml new file mode 100755 index 0000000..efef2e2 --- /dev/null +++ b/coreseek/csft-4.1/test/test_154/test.xml @@ -0,0 +1,101 @@ + + + +no hit documents in RT and plain index + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +source src +{ + type = mysql + + + sql_query = SELECT id, idd1, body FROM test_table + sql_attr_uint = idd1 +} + +index plain +{ + source = src + docinfo = extern + charset_type = utf-8 + path = /plain + stopwords = test_154/stopwords.txt +} + +index rt +{ + type = rt + docinfo = extern + charset_type = utf-8 + path = /rt + stopwords = test_154/stopwords.txt + + rt_attr_uint = idd1 + rt_field = body + + rt_mem_limit = 8M +} + +index both +{ + type = distributed + local = plain + local = rt +} + + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `idd1` int(11) NOT NULL default '0', + `body` varchar(1024) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 11, 'a dog' ), +( 2, 11, 'a cat' ), +( 3, 11, 'a bird' ), +( 4, 12, 'cat eats bird' ), +( 5, 13, 'dog eats cat' ), +( 6, 14, 'bird' ) + + + +insert into rt (id, idd1, body) values ( 11, 14, 'bird' ) +insert into rt (id, idd1, body) values ( 12, 13, 'dog eats cat' ) +insert into rt (id, idd1, body) values ( 13, 12, 'cat eats bird' ) +insert into rt (id, idd1, body) values ( 14, 11, 'a bird' ) +insert into rt (id, idd1, body) values ( 15, 11, 'a cat' ) +insert into rt (id, idd1, body) values ( 16, 11, 'a dog' ) + +select * from plain +select * from rt +select * from both +select * from both where match ('a') +select * from both where match ('bird') +select * from both where idd1=11 +select * from both where idd1!=11 +select * from both where match ('bird') and idd1!=11 +select * from both where idd1!=10 + + + diff --git a/coreseek/csft-4.1/test/test_155/model.bin b/coreseek/csft-4.1/test/test_155/model.bin new file mode 100755 index 0000000..aa55a83 --- /dev/null +++ b/coreseek/csft-4.1/test/test_155/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:4:{i:0;a:3:{s:8:"sphinxql";s:63:"select gid from dist1 where match('hello') option max_matches=2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"gid";s:3:"123";}i:1;a:1:{s:3:"gid";s:3:"123";}}}i:1;a:3:{s:8:"sphinxql";s:61:"select b from dist2 where match('hello') option max_matches=2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:1:"b";s:3:"123";}i:1;a:1:{s:1:"b";s:3:"123";}}}i:2;a:3:{s:8:"sphinxql";s:61:"select b from dist3 where match('hello') option max_matches=2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:1:"b";s:3:"123";}i:1;a:1:{s:1:"b";s:3:"123";}}}i:3;a:3:{s:8:"sphinxql";s:89:"select id, gid from dist1 where match('hello') option field_weights=(none1=1000, title=1)";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:2:{s:2:"id";s:1:"1";s:3:"gid";s:3:"123";}i:1;a:2:{s:2:"id";s:1:"2";s:3:"gid";s:3:"123";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"gid";s:3:"123";}i:3;a:2:{s:2:"id";s:2:"11";s:3:"gid";s:3:"123";}i:4;a:2:{s:2:"id";s:2:"12";s:3:"gid";s:3:"123";}i:5;a:2:{s:2:"id";s:2:"13";s:3:"gid";s:3:"123";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_155/test.xml b/coreseek/csft-4.1/test/test_155/test.xml new file mode 100755 index 0000000..0c226aa --- /dev/null +++ b/coreseek/csft-4.1/test/test_155/test.xml @@ -0,0 +1,121 @@ + + + +SQL-compliant result set vs max_matches + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + compat_sphinxql_magics = 0 +} + +source test1 +{ + type = mysql + + sql_query = select id, gid, gid as a, title from test_table + sql_attr_uint = gid + sql_attr_uint = a +} + +source test2 : test1 +{ + sql_query = select id+10, gid, gid as b, title from test_table + sql_attr_uint = gid + sql_attr_uint = b +} + + +source test3 : test1 +{ + sql_query = select id+20, gid, gid+1 as c, gid+2 as b, title from test_table + sql_attr_uint = gid + sql_attr_uint = c + sql_attr_uint = b +} + +source test4 : test1 +{ + sql_query = select id+30, gid, gid+3 as d, gid+5 as b, title from test_table + sql_attr_uint = gid + sql_attr_uint = d + sql_attr_uint = b +} + +index test1 +{ + source = test1 + path = /test1 +} + +index test2 +{ + source = test2 + path = /test2 +} + +index test3 +{ + source = test3 + path = /test3 +} + +index test4 +{ + source = test4 + path = /test4 +} + +index dist1 +{ + type = distributed + local = test1 + local = test2 +} + +index dist2 +{ + type = distributed + local = test2 + local = test3 +} + +index dist3 +{ + type = distributed + local = test2 + agent = :idx52 + local = test4 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + + + +create table test_table +( + id int not null, + gid int not null, + title varchar(255) not null +); + +drop table if exists test_table; +insert into test_table values ( 1, 123, 'hello world' ); +insert into test_table values ( 2, 123, 'hello world' ); +insert into test_table values ( 3, 123, 'hello world' ); + + +select gid from dist1 where match('hello') option max_matches=2 +select b from dist2 where match('hello') option max_matches=2 +select b from dist3 where match('hello') option max_matches=2 + +select id, gid from dist1 where match('hello') option field_weights=(none1=1000, title=1) + + + diff --git a/coreseek/csft-4.1/test/test_156/model.bin b/coreseek/csft-4.1/test/test_156/model.bin new file mode 100755 index 0000000..6d66f74 --- /dev/null +++ b/coreseek/csft-4.1/test/test_156/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:10:{i:0;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:3:"101";s:3:"mva";s:0:"";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:2;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:3:"103";s:3:"mva";s:9:"1003,2003";}i:3;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}i:4;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}i:5;a:4:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"gid";s:3:"106";s:3:"mva";s:0:"";}}}i:1;a:3:{s:8:"sphinxql";s:51:"select * from test where mva >= 2004 and mva < 2007";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}i:1;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:2;a:3:{s:8:"sphinxql";s:39:"select * from test where match ('goo*')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1607";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:1;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1607";s:3:"gid";s:3:"103";s:3:"mva";s:9:"1003,2003";}}}i:3;a:3:{s:8:"sphinxql";s:37:"select * from test where match ('g*')";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2570";s:3:"gid";s:3:"103";s:3:"mva";s:9:"1003,2003";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:2;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1516";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}i:3;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1516";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:4;a:3:{s:8:"sphinxql";s:50:"select * from test where match ('g* !(@title g*)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:1;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1516";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:5;a:3:{s:8:"sphinxql";s:43:"select * from test where match ('everyone')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1709";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}}}i:6;a:3:{s:8:"sphinxql";s:52:"select * from test where match ('anyone | everyone')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1604";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:2;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:7;a:3:{s:8:"sphinxql";s:43:"select * from test where match ('@text g*')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:1;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"103";s:3:"mva";s:9:"1003,2003";}i:2;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1516";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:8;a:2:{s:8:"sphinxql";s:42:"select * from test where match ('natural')";s:10:"total_rows";i:0;}i:9;a:2:{s:8:"sphinxql";s:33:"select * from test where mva=1001";s:10:"total_rows";i:0;}}i:1;a:10:{i:0;a:3:{s:8:"sphinxql";s:18:"select * from test";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:3:"101";s:3:"mva";s:0:"";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:2;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:3:"103";s:3:"mva";s:9:"1003,2003";}i:3;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}i:4;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}i:5;a:4:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:3:"gid";s:3:"106";s:3:"mva";s:0:"";}}}i:1;a:3:{s:8:"sphinxql";s:51:"select * from test where mva >= 2004 and mva < 2007";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}i:1;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:2;a:3:{s:8:"sphinxql";s:39:"select * from test where match ('goo*')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1607";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:1;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1607";s:3:"gid";s:3:"103";s:3:"mva";s:9:"1003,2003";}}}i:3;a:3:{s:8:"sphinxql";s:37:"select * from test where match ('g*')";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2570";s:3:"gid";s:3:"103";s:3:"mva";s:9:"1003,2003";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:2;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1516";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}i:3;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1516";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:4;a:3:{s:8:"sphinxql";s:50:"select * from test where match ('g* !(@title g*)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:1;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1516";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:5;a:3:{s:8:"sphinxql";s:43:"select * from test where match ('everyone')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1709";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}}}i:6;a:3:{s:8:"sphinxql";s:52:"select * from test where match ('anyone | everyone')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1604";s:3:"gid";s:3:"104";s:3:"mva";s:9:"1004,2004";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:2;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:7;a:3:{s:8:"sphinxql";s:43:"select * from test where match ('@text g*')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"102";s:3:"mva";s:9:"1002,2002";}i:1;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1553";s:3:"gid";s:3:"103";s:3:"mva";s:9:"1003,2003";}i:2;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1516";s:3:"gid";s:3:"105";s:3:"mva";s:9:"1005,2005";}}}i:8;a:2:{s:8:"sphinxql";s:42:"select * from test where match ('natural')";s:10:"total_rows";i:0;}i:9;a:2:{s:8:"sphinxql";s:33:"select * from test where mva=1001";s:10:"total_rows";i:0;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_156/test.xml b/coreseek/csft-4.1/test/test_156/test.xml new file mode 100755 index 0000000..87b3bd6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_156/test.xml @@ -0,0 +1,94 @@ + + + +ranged-query vs joined field and mva attribute + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_range_step = 2 + sql_query = SELECT id, gid, title FROM test + + sql_joined_field = text from ranged-query; select id, text from test where id between $start and $end; select 1, 5 + + sql_attr_uint = gid + + sql_attr_multi = uint mva from ranged-query; select id, mva from mva where id between $start and $end; select 2, 5 + sql_attr_multi = bigint mva from ranged-query; select id, mva from mva where id between $start and $end; select 2, 5 + +} + +index test +{ + source = test + path = /test + dict = keywords + + min_prefix_len = 1 + enable_star = 1 +} + + + +create table test +( + id int not null, + gid int not null, + title varchar(255) not null, + text varchar(255) not null +); + + +create table mva +( + id int not null, + mva int not null +); + + +drop table if exists test; +drop table if exists mva; +insert into test values ( 1, 101, 'not found', 'notice found' ); +insert into test values ( 2, 102, 'not anyone', 'notice goods' ); +insert into test values ( 3, 103, 'not grant', 'notice goods' ); +insert into test values ( 4, 104, 'not grant', 'everyone' ); +insert into test values ( 5, 105, 'not anyone', 'grant' ); +insert into test values ( 6, 106, 'not fun', 'natural' ); +insert into mva values (1, 1001), (1, 2001); +insert into mva values (2, 1002), (2, 2002); +insert into mva values (3, 1003), (3, 2003); +insert into mva values (4, 1004), (4, 2004); +insert into mva values (5, 1005), (5, 2005); +insert into mva values (6, 1006), (6, 2006); + + +select * from test +select * from test where mva >= 2004 and mva < 2007 +select * from test where match ('goo*') +select * from test where match ('g*') +select * from test where match ('g* !(@title g*)') +select * from test where match ('everyone') +select * from test where match ('anyone | everyone') +select * from test where match ('@text g*') +select * from test where match ('natural') +select * from test where mva=1001 + + + diff --git a/coreseek/csft-4.1/test/test_157/model.bin b/coreseek/csft-4.1/test/test_157/model.bin new file mode 100755 index 0000000..4600616 --- /dev/null +++ b/coreseek/csft-4.1/test/test_157/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:5:{i:0;a:2:{s:8:"sphinxql";s:69:"insert into rt (id, idd, body) values ( 1, 11, 'this is cool place' )";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:78:"insert into rt (id, idd, body) values ( 2, 11, 'cool place is like no other' )";s:14:"total_affected";i:1;}i:2;a:2:{s:8:"sphinxql";s:101:"insert into rt (id, idd, body) values ( 3, 11, 'place is cool becouse there is no things like this' )";s:14:"total_affected";i:1;}i:3;a:3:{s:8:"sphinxql";s:67:"select * from rt where match ('"is cool place"/3') order by @id asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"3319";s:3:"idd";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"2319";s:3:"idd";s:2:"11";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2297";s:3:"idd";s:2:"11";}}}i:4;a:3:{s:8:"sphinxql";s:80:"select * from rt where match ('"there things is cool place"/3') order by @id asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"3391";s:3:"idd";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"2391";s:3:"idd";s:2:"11";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2450";s:3:"idd";s:2:"11";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_157/test.xml b/coreseek/csft-4.1/test/test_157/test.xml new file mode 100755 index 0000000..58736e4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_157/test.xml @@ -0,0 +1,42 @@ + + + +quorum vs ranker Reset + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +index rt +{ + type = rt + docinfo = extern + charset_type = utf-8 + path = /rt + + rt_attr_uint = idd + rt_field = body + + rt_mem_limit = 8M +} + + + +insert into rt (id, idd, body) values ( 1, 11, 'this is cool place' ) +insert into rt (id, idd, body) values ( 2, 11, 'cool place is like no other' ) +insert into rt (id, idd, body) values ( 3, 11, 'place is cool becouse there is no things like this' ) +select * from rt where match ('"is cool place"/3') order by @id asc +select * from rt where match ('"there things is cool place"/3') order by @id asc + + + diff --git a/coreseek/csft-4.1/test/test_158/model.bin b/coreseek/csft-4.1/test/test_158/model.bin new file mode 100755 index 0000000..fa94be4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_158/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:7:{i:0;a:2:{s:8:"sphinxql";s:198:"insert into rt (id, gid, body) values ( 1, 123, 'Although various ancient traditions refer to a lost antediluvian world, the one that stands out is the tradition in the early chapters of Genesis.' )";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:172:"insert into rt (id, gid, body) values ( 2, 123, 'There are many means of transportation all over India and Nepal which can be called shandrydan due to their awkwardness.' )";s:14:"total_affected";i:1;}i:2;a:2:{s:8:"sphinxql";s:107:"insert into rt (id, gid, body) values ( 3, 123, 'If Walker was bothered by my hard look, he hid it well.' )";s:14:"total_affected";i:1;}i:3;a:3:{s:8:"sphinxql";s:45:"select * from rt where match ('antediluvian')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:3:"gid";s:3:"123";}}}i:4;a:3:{s:8:"sphinxql";s:43:"select * from rt where match ('shandrydan')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1680";s:3:"gid";s:3:"123";}}}i:5;a:3:{s:8:"sphinxql";s:59:"select * from rt where match ('"something antediluvian"/1')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1590";s:3:"gid";s:3:"123";}}}i:6;a:3:{s:8:"sphinxql";s:56:"select * from rt where match ('"battered shandrydan"/1')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1590";s:3:"gid";s:3:"123";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_158/test.xml b/coreseek/csft-4.1/test/test_158/test.xml new file mode 100755 index 0000000..4c383fc --- /dev/null +++ b/coreseek/csft-4.1/test/test_158/test.xml @@ -0,0 +1,45 @@ + + + +multiforms vs quorum + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +index rt +{ + type = rt + docinfo = extern + charset_type = utf-8 + path = /rt + wordforms = wordforms.txt + + rt_attr_uint = gid + rt_field = body + + rt_mem_limit = 8M +} + + + +insert into rt (id, gid, body) values ( 1, 123, 'Although various ancient traditions refer to a lost antediluvian world, the one that stands out is the tradition in the early chapters of Genesis.' ) +insert into rt (id, gid, body) values ( 2, 123, 'There are many means of transportation all over India and Nepal which can be called shandrydan due to their awkwardness.' ) +insert into rt (id, gid, body) values ( 3, 123, 'If Walker was bothered by my hard look, he hid it well.' ) +select * from rt where match ('antediluvian') +select * from rt where match ('shandrydan') +select * from rt where match ('"something antediluvian"/1') +select * from rt where match ('"battered shandrydan"/1') + + + diff --git a/coreseek/csft-4.1/test/test_159/model.bin b/coreseek/csft-4.1/test/test_159/model.bin new file mode 100755 index 0000000..090db69 --- /dev/null +++ b/coreseek/csft-4.1/test/test_159/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:21:{i:0;a:2:{s:8:"sphinxql";s:86:"insert into rt (id, Idd1, idd2, str1, str2, body) values ( 10, 5, 4, '', 'cc', 'the' )";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:85:"insert into rt (id, idd1, IDD2, str1, str2, body) values ( 11, 5, 4, 'a', '', 'the' )";s:14:"total_affected";i:1;}i:2;a:2:{s:8:"sphinxql";s:87:"insert into rt (id, idd1, idd2, Str1, str2, body) values ( 12, 6, 4, 'a', 'cc', 'the' )";s:14:"total_affected";i:1;}i:3;a:2:{s:8:"sphinxql";s:90:"insert into rt (id, idd1, idd2, str1, STR2, body) values ( 13, 4, 4, 'ddd', 'hh', 'bird' )";s:14:"total_affected";i:1;}i:4;a:2:{s:8:"sphinxql";s:96:"insert into rt (id, idd1, idd2, str1, str2, Body) values ( 14, 3, 5, 'cc', 'c', 'dog eats cat' )";s:14:"total_affected";i:1;}i:5;a:2:{s:8:"sphinxql";s:98:"insert into rt (id, idd1, idd2, str1, str2, BODY) values ( 15, 2, 6, 'cc', 'cc', 'cat eats bird' )";s:14:"total_affected";i:1;}i:6;a:2:{s:8:"sphinxql";s:94:"insert into rt (id, idd1, idd2, str1, sTr2, body) values ( 16, 1, 7, 'a a', 'cc', 'the bird' )";s:14:"total_affected";i:1;}i:7;a:2:{s:8:"sphinxql";s:93:"insert into rt (id, idd1, idd2, stR1, str2, body) values ( 17, 1, 8, 'c cc', 'c', 'the cat' )";s:14:"total_affected";i:1;}i:8;a:2:{s:8:"sphinxql";s:93:"insert into rt (id, idd1, iDD2, str1, str2, body) values ( 18, 11, 9, 'aaa', 'h', 'the dog' )";s:14:"total_affected";i:1;}i:9;a:3:{s:8:"sphinxql";s:38:"select * from plain order by Str1 desc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:4:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"ddd";}i:1;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:2:"cc";}i:2;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:3;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"c cc";}i:4;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"aaa";}i:5;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";s:4:"str1";s:3:"a a";}i:6;a:4:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:7;a:4:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"7";s:4:"str1";s:1:"a";}i:8;a:4:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"6";s:4:"str1";s:0:"";}}}i:10;a:3:{s:8:"sphinxql";s:35:"select * from rt order by sTR1 desc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:6:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"4";s:4:"idd2";s:1:"4";s:4:"str1";s:3:"ddd";s:4:"str2";s:2:"hh";}i:1;a:6:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"idd2";s:1:"5";s:4:"str1";s:2:"cc";s:4:"str2";s:1:"c";}i:2;a:6:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"2";s:4:"idd2";s:1:"6";s:4:"str1";s:2:"cc";s:4:"str2";s:2:"cc";}i:3;a:6:{s:2:"id";s:2:"17";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"idd2";s:1:"8";s:4:"str1";s:4:"c cc";s:4:"str2";s:1:"c";}i:4;a:6:{s:2:"id";s:2:"18";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"idd2";s:1:"9";s:4:"str1";s:3:"aaa";s:4:"str2";s:1:"h";}i:5;a:6:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"idd2";s:1:"7";s:4:"str1";s:3:"a a";s:4:"str2";s:2:"cc";}i:6;a:6:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"idd2";s:1:"4";s:4:"str1";s:1:"a";s:4:"str2";s:0:"";}i:7;a:6:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"6";s:4:"idd2";s:1:"4";s:4:"str1";s:1:"a";s:4:"str2";s:2:"cc";}i:8;a:6:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"idd2";s:1:"4";s:4:"str1";s:0:"";s:4:"str2";s:2:"cc";}}}i:11;a:3:{s:8:"sphinxql";s:45:"select * from rt order by STR2 asc, Str1 desc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:6:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"idd2";s:1:"4";s:4:"str1";s:1:"a";s:4:"str2";s:0:"";}i:1;a:6:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"idd2";s:1:"5";s:4:"str1";s:2:"cc";s:4:"str2";s:1:"c";}i:2;a:6:{s:2:"id";s:2:"17";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"idd2";s:1:"8";s:4:"str1";s:4:"c cc";s:4:"str2";s:1:"c";}i:3;a:6:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"2";s:4:"idd2";s:1:"6";s:4:"str1";s:2:"cc";s:4:"str2";s:2:"cc";}i:4;a:6:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"idd2";s:1:"7";s:4:"str1";s:3:"a a";s:4:"str2";s:2:"cc";}i:5;a:6:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"6";s:4:"idd2";s:1:"4";s:4:"str1";s:1:"a";s:4:"str2";s:2:"cc";}i:6;a:6:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"idd2";s:1:"4";s:4:"str1";s:0:"";s:4:"str2";s:2:"cc";}i:7;a:6:{s:2:"id";s:2:"18";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"idd2";s:1:"9";s:4:"str1";s:3:"aaa";s:4:"str2";s:1:"h";}i:8;a:6:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"4";s:4:"idd2";s:1:"4";s:4:"str1";s:3:"ddd";s:4:"str2";s:2:"hh";}}}i:12;a:3:{s:8:"sphinxql";s:37:"select * from dist order by Str1 desc";s:10:"total_rows";i:18;s:4:"rows";a:18:{i:0;a:4:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"ddd";}i:1;a:4:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"4";s:4:"str1";s:3:"ddd";}i:2;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:2:"cc";}i:3;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:4;a:4:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:5;a:4:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"2";s:4:"str1";s:2:"cc";}i:6;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"c cc";}i:7;a:4:{s:2:"id";s:2:"17";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";}i:8;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"aaa";}i:9;a:4:{s:2:"id";s:2:"18";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"aaa";}i:10;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";s:4:"str1";s:3:"a a";}i:11;a:4:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"a a";}i:12;a:4:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:13;a:4:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"7";s:4:"str1";s:1:"a";}i:14;a:4:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:15;a:4:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"6";s:4:"str1";s:1:"a";}i:16;a:4:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"6";s:4:"str1";s:0:"";}i:17;a:4:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"str1";s:0:"";}}}i:13;a:3:{s:8:"sphinxql";s:47:"select * from dist order by Str1 desc, IDD1 asc";s:10:"total_rows";i:18;s:4:"rows";a:18:{i:0;a:4:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"4";s:4:"str1";s:3:"ddd";}i:1;a:4:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"ddd";}i:2;a:4:{s:2:"id";s:2:"15";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"2";s:4:"str1";s:2:"cc";}i:3;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:4;a:4:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:5;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:2:"cc";}i:6;a:4:{s:2:"id";s:2:"17";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";}i:7;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"c cc";}i:8;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"aaa";}i:9;a:4:{s:2:"id";s:2:"18";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"aaa";}i:10;a:4:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"a a";}i:11;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"13";s:4:"str1";s:3:"a a";}i:12;a:4:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:13;a:4:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:14;a:4:{s:2:"id";s:2:"12";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"6";s:4:"str1";s:1:"a";}i:15;a:4:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"7";s:4:"str1";s:1:"a";}i:16;a:4:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"str1";s:0:"";}i:17;a:4:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"6";s:4:"str1";s:0:"";}}}i:14;a:3:{s:8:"sphinxql";s:57:"select * from dist where match ('the') order by Str1 desc";s:10:"total_rows";i:12;s:4:"rows";a:12:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1459";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"c cc";}i:1;a:4:{s:2:"id";s:2:"17";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";}i:2;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"aaa";}i:3;a:4:{s:2:"id";s:2:"18";s:6:"weight";s:4:"1459";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"aaa";}i:4;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1459";s:4:"idd1";s:2:"13";s:4:"str1";s:3:"a a";}i:5;a:4:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"a a";}i:6;a:4:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:7;a:4:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"7";s:4:"str1";s:1:"a";}i:8;a:4:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:9;a:4:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"6";s:4:"str1";s:1:"a";}i:10;a:4:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"6";s:4:"str1";s:0:"";}i:11;a:4:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"5";s:4:"str1";s:0:"";}}}i:15;a:3:{s:8:"sphinxql";s:67:"select * from dist where match ('the') order by Str1 desc, iDD1 asc";s:10:"total_rows";i:12;s:4:"rows";a:12:{i:0;a:4:{s:2:"id";s:2:"17";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1459";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"c cc";}i:2;a:4:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"aaa";}i:3;a:4:{s:2:"id";s:2:"18";s:6:"weight";s:4:"1459";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"aaa";}i:4;a:4:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"a a";}i:5;a:4:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1459";s:4:"idd1";s:2:"13";s:4:"str1";s:3:"a a";}i:6;a:4:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:7;a:4:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"5";s:4:"str1";s:1:"a";}i:8;a:4:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"6";s:4:"str1";s:1:"a";}i:9;a:4:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"7";s:4:"str1";s:1:"a";}i:10;a:4:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"5";s:4:"str1";s:0:"";}i:11;a:4:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1459";s:4:"idd1";s:1:"6";s:4:"str1";s:0:"";}}}i:16;a:3:{s:8:"sphinxql";s:63:"select * from dist where match ('cat | eats') order by Str1 asc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1541";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"c cc";}i:1;a:4:{s:2:"id";s:2:"17";s:6:"weight";s:4:"1541";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";}i:2;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"2610";s:4:"idd1";s:2:"11";s:4:"str1";s:2:"cc";}i:3;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1610";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:4;a:4:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1610";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:5;a:4:{s:2:"id";s:2:"15";s:6:"weight";s:4:"2610";s:4:"idd1";s:1:"2";s:4:"str1";s:2:"cc";}}}i:17;a:3:{s:8:"sphinxql";s:74:"select * from dist where match ('cat | eats') order by Str1 asc, sTr2 desc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:2:"17";s:6:"weight";s:4:"1541";s:4:"idd1";s:1:"1";s:4:"idd2";s:1:"8";s:4:"str1";s:4:"c cc";s:4:"str2";s:1:"c";}i:1;a:6:{s:2:"id";s:2:"15";s:6:"weight";s:4:"2610";s:4:"idd1";s:1:"2";s:4:"idd2";s:1:"6";s:4:"str1";s:2:"cc";s:4:"str2";s:2:"cc";}i:2;a:6:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1610";s:4:"idd1";s:1:"3";s:4:"idd2";s:1:"5";s:4:"str1";s:2:"cc";s:4:"str2";s:1:"c";}}}i:18;a:3:{s:8:"sphinxql";s:73:"select * from dist where match ('cat | eats') order by Str1 asc, Idd1 asc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:4:{s:2:"id";s:2:"17";s:6:"weight";s:4:"1541";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";}i:1;a:4:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1541";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"c cc";}i:2;a:4:{s:2:"id";s:2:"15";s:6:"weight";s:4:"2610";s:4:"idd1";s:1:"2";s:4:"str1";s:2:"cc";}i:3;a:4:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1610";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:4;a:4:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1610";s:4:"idd1";s:1:"3";s:4:"str1";s:2:"cc";}i:5;a:4:{s:2:"id";s:1:"4";s:6:"weight";s:4:"2610";s:4:"idd1";s:2:"11";s:4:"str1";s:2:"cc";}}}i:19;a:3:{s:8:"sphinxql";s:89:"select * from dist where match ('cat | eats') group by str1 within group order by id desc";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:6:{s:2:"id";s:2:"15";s:6:"weight";s:4:"2610";s:4:"idd1";s:1:"2";s:4:"str1";s:2:"cc";s:8:"@groupby";s:18:"465688662386187669";s:6:"@count";s:1:"4";}i:1;a:6:{s:2:"id";s:2:"17";s:6:"weight";s:4:"1541";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-1004237807469493610";s:6:"@count";s:1:"2";}}}i:20;a:3:{s:8:"sphinxql";s:63:"select * from dist group by str2 within group order by id desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:8:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"5";s:4:"idd2";s:1:"4";s:4:"str1";s:1:"a";s:4:"str2";s:0:"";s:8:"@groupby";s:1:"0";s:6:"@count";s:1:"1";}i:1;a:8:{s:2:"id";s:2:"13";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"4";s:4:"idd2";s:1:"4";s:4:"str1";s:3:"ddd";s:4:"str2";s:2:"hh";s:8:"@groupby";s:19:"9088884694429638853";s:6:"@count";s:1:"1";}i:2;a:8:{s:2:"id";s:2:"16";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"idd2";s:1:"7";s:4:"str1";s:3:"a a";s:4:"str2";s:2:"cc";s:8:"@groupby";s:18:"465688662386187669";s:6:"@count";s:1:"4";}i:3;a:8:{s:2:"id";s:2:"17";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"idd2";s:1:"8";s:4:"str1";s:4:"c cc";s:4:"str2";s:1:"c";s:8:"@groupby";s:20:"-1408039457890016602";s:6:"@count";s:1:"2";}i:4;a:8:{s:2:"id";s:2:"18";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"idd2";s:1:"9";s:4:"str1";s:3:"aaa";s:4:"str2";s:1:"h";s:8:"@groupby";s:19:"5498991683371764381";s:6:"@count";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_159/test.xml b/coreseek/csft-4.1/test/test_159/test.xml new file mode 100755 index 0000000..3065ece --- /dev/null +++ b/coreseek/csft-4.1/test/test_159/test.xml @@ -0,0 +1,117 @@ + + + +sorting vs string + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +source src +{ + type = mysql + + + sql_query = SELECT id, idd1, str1, body FROM test_table + sql_attr_uint = idd1 + sql_attr_string = str1 +} + +index plain +{ + source = src + docinfo = extern + charset_type = sbcs + path = /plain +} + +index rt +{ + type = rt + docinfo = extern + charset_type = sbcs + path = /rt + + rt_attr_uint = IDD1 + rt_attr_uint = iDD2 + rt_attr_string = Str1 + rt_attr_string = Str2 + rt_field = body + + rt_mem_limit = 128K +} + +index dist +{ + type = distributed + local = plain + local = rt +} + + + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `idd1` int(11) NOT NULL default '0', + `idd2` int(11) NOT NULL default '0', + `str1` varchar(1024) NOT NULL default '', + `str2` varchar(1024) NOT NULL default '', + `body` varchar(1024) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 1, 9, 'aaa', 'h', 'the dog' ), +( 2, 11, 8, 'c cc', 'c', 'the cat' ), +( 3, 13, 7, 'a a', 'cc', 'the bird' ), +( 4, 11, 6, 'cc', 'cc', 'cat eats bird' ), +( 5, 3, 5, 'cc', 'c', 'dog eats cat' ), +( 6, 11, 4, 'ddd', 'hh', 'bird' ), +( 7, 5, 4, 'a', 'cc', 'the' ), +( 8, 6, 4, '', 'cc', 'the' ), +( 9, 7, 4, 'a', '', 'the' ) + + + +insert into rt (id, Idd1, idd2, str1, str2, body) values ( 10, 5, 4, '', 'cc', 'the' ) +insert into rt (id, idd1, IDD2, str1, str2, body) values ( 11, 5, 4, 'a', '', 'the' ) +insert into rt (id, idd1, idd2, Str1, str2, body) values ( 12, 6, 4, 'a', 'cc', 'the' ) +insert into rt (id, idd1, idd2, str1, STR2, body) values ( 13, 4, 4, 'ddd', 'hh', 'bird' ) +insert into rt (id, idd1, idd2, str1, str2, Body) values ( 14, 3, 5, 'cc', 'c', 'dog eats cat' ) +insert into rt (id, idd1, idd2, str1, str2, BODY) values ( 15, 2, 6, 'cc', 'cc', 'cat eats bird' ) +insert into rt (id, idd1, idd2, str1, sTr2, body) values ( 16, 1, 7, 'a a', 'cc', 'the bird' ) +insert into rt (id, idd1, idd2, stR1, str2, body) values ( 17, 1, 8, 'c cc', 'c', 'the cat' ) +insert into rt (id, idd1, iDD2, str1, str2, body) values ( 18, 11, 9, 'aaa', 'h', 'the dog' ) + +select * from plain order by Str1 desc +select * from rt order by sTR1 desc +select * from rt order by STR2 asc, Str1 desc +select * from dist order by Str1 desc +select * from dist order by Str1 desc, IDD1 asc +select * from dist where match ('the') order by Str1 desc +select * from dist where match ('the') order by Str1 desc, iDD1 asc +select * from dist where match ('cat | eats') order by Str1 asc +select * from dist where match ('cat | eats') order by Str1 asc, sTr2 desc +select * from dist where match ('cat | eats') order by Str1 asc, Idd1 asc + +select * from dist where match ('cat | eats') group by str1 within group order by id desc +select * from dist group by str2 within group order by id desc + + + diff --git a/coreseek/csft-4.1/test/test_160/model.bin b/coreseek/csft-4.1/test/test_160/model.bin new file mode 100755 index 0000000..3a7dc65 --- /dev/null +++ b/coreseek/csft-4.1/test/test_160/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:47:{i:0;s:58:"[pass] (query/result=q/r) (fast path=1/0) (query_mode=1/0)";s:4:"[0]q";s:16:"ZONE:zoneA these";s:8:"[0]r 0 0";s:48:"these words and these to are cool ";s:8:"[0]r 1 0";s:48:"these words and these to are cool ";s:4:"[1]q";s:16:"ZONE:zoneB these";s:8:"[1]r 0 0";s:48:"these words and these to are cool ";s:8:"[1]r 1 0";s:48:"these words and these to are cool ";s:4:"[2]q";s:23:"ZONE:(zoneA, zoneB) th*";s:8:"[2]r 0 0";s:48:"these words and these to are cool ";s:8:"[2]r 1 0";s:48:"these words and these to are cool ";s:4:"[3]q";s:23:"ZONE:(zoneA, zoneB) are";s:8:"[3]r 0 0";s:41:"these words and these to are cool ";s:8:"[3]r 1 0";s:41:"these words and these to are cool ";s:4:"[4]q";s:20:"ZONE:zoneZZ a* cool$";s:8:"[4]r 0 0";s:55:"these words and these to are cool ";s:8:"[4]r 1 0";s:55:"these words and these to are cool ";s:4:"[5]q";s:18:"ZONE:zoneZZ to* a*";s:8:"[5]r 0 0";s:55:"these words and these to are cool ";s:8:"[5]r 1 0";s:55:"these words and these to are cool ";s:4:"[6]q";s:16:"ZONE:zoneA these";s:8:"[6]r 0 1";s:41:"these words and these to are cool ";s:8:"[6]r 1 1";s:41:"these words and these to are cool ";s:4:"[7]q";s:16:"ZONE:zoneB these";s:8:"[7]r 0 1";s:41:"these words and these to are cool ";s:8:"[7]r 1 1";s:41:"these words and these to are cool ";s:4:"[8]q";s:23:"ZONE:(zoneA, zoneB) th*";s:8:"[8]r 0 1";N;s:8:"[8]r 1 1";N;s:4:"[9]q";s:23:"ZONE:(zoneA, zoneB) are";s:8:"[9]r 0 1";N;s:8:"[9]r 1 1";N;s:5:"[10]q";s:20:"ZONE:zoneZZ a* cool$";s:9:"[10]r 0 1";s:55:"these words and these to are cool ";s:9:"[10]r 1 1";s:48:"these words and these to are cool ";s:5:"[11]q";s:18:"ZONE:zoneZZ to* a*";s:9:"[11]r 0 1";s:55:"these words and these to are cool ";s:9:"[11]r 1 1";s:55:"these words and these to are cool ";i:1;a:2:{i:0;s:16:"small doc";i:1;s:8:"one more";}i:2;a:2:{i:0;s:48:" ... words and these to are cool ";s:15:"html_strip_mode";s:5:"index";}i:3;a:2:{i:0;s:48:" ... words and these to are cool ";s:15:"html_strip_mode";s:5:"strip";}i:4;a:3:{i:0;s:75:" ... these words ... and these to ... are cool ... ";s:15:"html_strip_mode";s:5:"index";s:16:"passage_boundary";s:4:"zone";}i:5;a:3:{i:0;s:54:" ... these words ... and these to ... ";s:15:"html_strip_mode";s:5:"strip";s:16:"passage_boundary";s:4:"zone";}i:6;a:3:{i:0;s:98:" these words and these to are cool ";i:1;s:87:" these words and these to are cool ";s:4:"zone";s:6:"zoneZZ";}i:7;a:3:{i:0;s:91:" these words and these to are cool ";i:1;s:73:" these words and these to are cool ";s:4:"zone";s:5:"ZoneB";}i:8;a:3:{i:0;s:98:" these words and these to are cool ";i:1;s:73:" these words and these to are cool ";s:8:"boundary";s:9:"paragraph";}i:9;a:1:{i:0;s:35:"tokenizer filter crash at lc";}i:10;a:1:{i:0;s:59:"dog dummy! as the house nearby the dog";}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_160/multiwordorms.txt b/coreseek/csft-4.1/test/test_160/multiwordorms.txt new file mode 100755 index 0000000..2db6a3b --- /dev/null +++ b/coreseek/csft-4.1/test/test_160/multiwordorms.txt @@ -0,0 +1,3 @@ +folded many > wrapped +shortform multi > SomeWhatMoreLongFormThatWouldOverflowShortFormBuffer +antediluvian clumsy shandrydan > fordt diff --git a/coreseek/csft-4.1/test/test_160/test.xml b/coreseek/csft-4.1/test/test_160/test.xml new file mode 100755 index 0000000..e291a3f --- /dev/null +++ b/coreseek/csft-4.1/test/test_160/test.xml @@ -0,0 +1,140 @@ + + + +snippets vs zones + + + + + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 + html_strip = 1 + index_sp = 1 + index_zones = zone* +} + +index multiform +{ + source = test + path = /multiform + + charset_type = utf-8 + wordforms = test_160/multiwordorms.txt +} + + + +select 1; + +'zone', 'limit'=>0 ); +$docs = array(' these words and these to are cool '); +$pass = 0; + +$results[] = '[pass] (query/result=q/r) (fast path=1/0) (query_mode=1/0)'; + +foreach ( array(0, 1) as $qmode ) +{ + $opts['query_mode'] = $qmode; + foreach ( $data as $q ) + { + $opts['limit_passages'] = 10; + $results["[$pass]q"] = $q; + $res = $client->BuildExcerpts($docs, 'test', $q, $opts ); + $results["[$pass]r 0 $qmode"] = ( count($res)>0 ? $res[0] : ''); + $opts['limit_passages'] = 0; + $res = $client->BuildExcerpts($docs, 'test', $q, $opts ); + $results["[$pass]r 1 $qmode"] = ( count($res)>0 ? $res[0] : '' ); + $pass += 1; + } +} + +$results[] = $client->BuildExcerpts(array('small doc', 'one more'), 'multiform', 'crash on tokenizer from another doc', array ('query_mode'=>0) ); + +// another regression - zone transformed by stripper in result set +$opts = array ( 'query_mode'=>1, 'limit_words'=>6 ); + +$opts['html_strip_mode'] = 'index'; +$res = $client->BuildExcerpts($docs, 'test', 'these | are', $opts); +$res['html_strip_mode'] = $opts['html_strip_mode']; +$results[] = $res; + +$opts['html_strip_mode'] = 'strip'; +$res= $client->BuildExcerpts($docs, 'test', 'these | are', $opts); +$res['html_strip_mode'] = $opts['html_strip_mode']; +$results[] = $res; + +$opts['html_strip_mode'] = 'index'; +$opts['passage_boundary'] = 'zone'; +$res = $client->BuildExcerpts($docs, 'test', 'these | are', $opts); +$res['html_strip_mode'] = $opts['html_strip_mode']; +$res['passage_boundary'] = $opts['passage_boundary']; +$results[] = $res; + +$opts['html_strip_mode'] = 'strip'; +$res= $client->BuildExcerpts($docs, 'test', 'these', $opts); +$res['html_strip_mode'] = $opts['html_strip_mode']; +$res['passage_boundary'] = $opts['passage_boundary']; +$results[] = $res; + +// regression retain vs SPZ +$docs = array( +' these words and these to are cool ', +' these words and these to are cool ' +); +$opts = array ( 'limit'=>0, 'html_strip_mode'=>'retain', 'query_mode'=>1 ); + +$res = $client->BuildExcerpts($docs, 'test', 'ZONE:zoneZZ these', $opts); +$res['zone'] = 'zoneZZ'; +$results[] = $res; + +$res = $client->BuildExcerpts($docs, 'test', 'ZONE:zoneB these', $opts); +$res['zone'] = 'ZoneB'; +$results[] = $res; + +$res = $client->BuildExcerpts($docs, 'test', 'and PARAGRAPH words', $opts); +$res['boundary'] = 'paragraph'; +$results[] = $res; + +$results[] = $client->BuildExcerpts(array('tokenizer filter crash at lc'), 'multiform', 'crash at lc', + array ('query_mode'=>1, 'html_strip_mode'=>'retain', 'limit'=>0) ); + +$results[] = $client->BuildExcerpts(array('dog dummy! as the house nearby the dog'), 'test', 'the. dog? as', + array ('query_mode'=>1, 'html_strip_mode'=>'retain', 'limit'=>0) ); + +]]> + + + diff --git a/coreseek/csft-4.1/test/test_161/data1.xml b/coreseek/csft-4.1/test/test_161/data1.xml new file mode 100755 index 0000000..2e9dc2e --- /dev/null +++ b/coreseek/csft-4.1/test/test_161/data1.xml @@ -0,0 +1,24 @@ + + + + +test flowing one +1 + + + +test of flore two +2 + + + +another fast doc +33 + + + +doc number four +40 + + + diff --git a/coreseek/csft-4.1/test/test_161/model.bin b/coreseek/csft-4.1/test/test_161/model.bin new file mode 100755 index 0000000..32713f6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_161/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:5:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"40";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1557";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"2";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"flo*";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"flo*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1528";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1528";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1597";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"33";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:3:"fa*";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:3:"te*";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"fa* | te*";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1304";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1304";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1304";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"33";}}i:4;a:2:{s:6:"weight";s:4:"1304";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"40";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:2:"f*";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"f*";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"1402";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"33";}}i:4;a:2:{s:6:"weight";s:4:"1402";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"40";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"f*";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:2:"t*";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"f* !t*";}}i:1;a:5:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"33";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"40";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:4:"1597";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1597";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"2";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:7:"flowing";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"flore";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"flo*";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:4:"1528";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1528";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1597";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"33";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"fast";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"test";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"fa* | te*";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:4:"1548";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"1";}}i:2;a:2:{s:6:"weight";s:4:"1548";s:5:"attrs";a:1:{s:8:"paper_id";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1548";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"33";}}i:4;a:2:{s:6:"weight";s:4:"1548";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"40";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";s:4:"time";s:5:"0.001";s:5:"words";a:4:{s:7:"flowing";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"flore";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"fast";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:2:"f*";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:8:"paper_id";i:1;}s:7:"matches";a:2:{i:3;a:2:{s:6:"weight";s:4:"1532";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"33";}}i:4;a:2:{s:6:"weight";s:4:"1532";s:5:"attrs";a:1:{s:8:"paper_id";s:2:"40";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:6:{s:7:"flowing";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"four";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:5:"flore";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"fast";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:4:"test";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"two";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"f* !t*";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_161/test.xml b/coreseek/csft-4.1/test/test_161/test.xml new file mode 100755 index 0000000..0ea848a --- /dev/null +++ b/coreseek/csft-4.1/test/test_161/test.xml @@ -0,0 +1,49 @@ + + + +xmlpipe2 indexing vs prefix search + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = xmlpipe2 + xmlpipe_command = cat test_161/data1.xml + + xmlpipe_field = title + xmlpipe_attr_uint = paper_id +} + +index test +{ + source = src + path = /test + charset_type = utf-8 + min_prefix_len = 1 + enable_star = 1 + + + dict = crc + dict = keywords + +} + + + + + flo* + fa* | te* + f* + f* !t* + + + diff --git a/coreseek/csft-4.1/test/test_162/model.bin b/coreseek/csft-4.1/test/test_162/model.bin new file mode 100755 index 0000000..6e567f8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_162/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:8:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:3:{i:8;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";s:1:"1";s:4:"str1";s:3:"a a";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"4";}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";s:1:"3";s:4:"str1";s:3:"a a";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";s:2:"11";s:4:"str1";s:3:"a a";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:3:{i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"4";}}i:9;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";s:1:"3";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";s:2:"11";s:4:"str1";s:4:"cc c";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.003";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:3:{i:7;a:2:{s:6:"weight";s:4:"1513";s:5:"attrs";a:4:{s:4:"idd1";s:1:"1";s:4:"str1";s:3:"a a";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"2";}}i:5;a:2:{s:6:"weight";s:4:"1558";s:5:"attrs";a:4:{s:4:"idd1";s:1:"3";s:4:"str1";s:3:"a a";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:4:{s:4:"idd1";s:2:"11";s:4:"str1";s:3:"a a";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.005";s:5:"words";a:3:{s:3:"the";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"cat";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:15:"the | dog | cat";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:1;s:6:"@count";i:1;}s:7:"matches";a:3:{i:6;a:2:{s:6:"weight";s:4:"1527";s:5:"attrs";a:4:{s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"4";}}i:9;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:4:{s:4:"idd1";s:1:"3";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}i:4;a:2:{s:6:"weight";s:4:"2555";s:5:"attrs";a:4:{s:4:"idd1";s:2:"11";s:4:"str1";s:4:"cc c";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"3";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.005";s:5:"words";a:3:{s:3:"the";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:4:"eats";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}s:4:"bird";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"the | eats | bird";}i:4;a:3:{s:8:"sphinxql";s:64:"select * from plain group by idd1 within group order by str1 asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"a a";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"3";}i:1;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:3:"a a";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}i:2;a:6:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"a a";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"4";}}}i:5;a:3:{s:8:"sphinxql";s:65:"select * from plain group by idd1 within group order by str1 desc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"cc c";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"3";}i:1;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"4";}i:2;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}}i:6;a:3:{s:8:"sphinxql";s:95:"select * from plain where match('the | dog | cat') group by idd1 within group order by str1 asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1558";s:4:"idd1";s:1:"3";s:4:"str1";s:3:"a a";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}i:1;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1513";s:4:"idd1";s:1:"1";s:4:"str1";s:3:"a a";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"2";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";s:4:"idd1";s:2:"11";s:4:"str1";s:3:"a a";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"3";}}}i:7;a:3:{s:8:"sphinxql";s:98:"select * from plain where match('the | eats | bird') group by idd1 within group order by str1 desc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:4:"2555";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"cc c";s:8:"@groupby";s:2:"11";s:6:"@count";s:1:"3";}i:1;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1527";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"4";}i:2;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"2";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_162/test.xml b/coreseek/csft-4.1/test/test_162/test.xml new file mode 100755 index 0000000..01a440a --- /dev/null +++ b/coreseek/csft-4.1/test/test_162/test.xml @@ -0,0 +1,78 @@ + + + +string vs within group order + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +source src +{ + type = mysql + + + sql_query = SELECT id, idd1, str1, body FROM test_table + sql_attr_uint = idd1 + sql_attr_string = str1 +} + +index plain +{ + source = src + docinfo = extern + charset_type = sbcs + path = /plain +} + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `idd1` int(11) NOT NULL default '0', + `str1` varchar(1024) NOT NULL default '', + `body` varchar(1024) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 1, 'a aa', 'the dog' ), +( 2, 11, 'c cc', 'the cat' ), +( 3, 11, 'a a', 'the bird' ), +( 4, 11, 'cc c', 'cat eats bird' ), +( 5, 3, 'a a', 'dog eats cat' ), +( 6, 1, 'c cc', 'bird' ), +( 7, 1, 'a a', 'the cat' ), +( 8, 1, 'a a', 'eats' ), +( 9, 3, 'c cc', 'the' ) + + + + + +the | dog | cat +the | eats | bird + + + +select * from plain group by idd1 within group order by str1 asc +select * from plain group by idd1 within group order by str1 desc +select * from plain where match('the | dog | cat') group by idd1 within group order by str1 asc +select * from plain where match('the | eats | bird') group by idd1 within group order by str1 desc + + + diff --git a/coreseek/csft-4.1/test/test_163/model.bin b/coreseek/csft-4.1/test/test_163/model.bin new file mode 100755 index 0000000..8b9dba9 --- /dev/null +++ b/coreseek/csft-4.1/test/test_163/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:13:{i:0;a:3:{s:8:"sphinxql";s:41:"select * from loc_dist1 order by str1 asc";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:5:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:1;a:5:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:2;a:5:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:3;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:4;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:5;a:5:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:6;a:5:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:7;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}}}i:1;a:3:{s:8:"sphinxql";s:42:"select * from loc_dist1 order by str1 desc";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}i:1;a:5:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:2;a:5:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:3;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:4;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:5;a:5:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:6;a:5:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:7;a:5:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}}}i:2;a:3:{s:8:"sphinxql";s:52:"select * from loc_dist2 order by str1 asc, idd1 desc";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:1;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:2;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"str1";s:9:"cc c main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:3;a:5:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:5;a:5:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:6;a:5:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:7;a:5:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}}}i:3;a:3:{s:8:"sphinxql";s:52:"select * from loc_dist2 order by str1 desc, idd1 asc";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:5:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:1;a:5:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:5:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:5:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:5;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"str1";s:9:"cc c main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:6;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:7;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}}}i:4;a:3:{s:8:"sphinxql";s:41:"select * from loc_dist2 order by str2 asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:1;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:6:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}}}i:5;a:3:{s:8:"sphinxql";s:42:"select * from loc_dist2 order by str2 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:1;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:2;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:3;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:6:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}}}i:6;a:3:{s:8:"sphinxql";s:53:"select * from loc_dist2 order by str2 desc, idd1 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:1;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:3;a:6:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}}}i:7;a:3:{s:8:"sphinxql";s:48:"select * from dist1 order by str2 asc, idd1 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:1;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:6:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:4;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}}}i:8;a:3:{s:8:"sphinxql";s:48:"select * from dist1 order by str2 desc, idd1 asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:1;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:2;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:6:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}}}i:9;a:3:{s:8:"sphinxql";s:37:"select * from dist2 order by str1 asc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}i:1;a:5:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:2;a:5:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:5:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:5;a:5:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}}}i:10;a:3:{s:8:"sphinxql";s:38:"select * from dist2 order by str1 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:5:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:1;a:5:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:5:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:5:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:5;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}}}i:11;a:3:{s:8:"sphinxql";s:37:"select * from dist3 order by str1 asc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:5:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:1;a:5:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:2;a:5:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:3;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:4;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:5;a:5:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:6;a:5:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:7;a:5:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"str1";s:9:"c cc main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:8;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}}}i:12;a:3:{s:8:"sphinxql";s:49:"select * from dist3 order by str1 desc, idd1 desc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:5:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}i:1;a:5:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"str1";s:9:"c cc main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:2;a:5:{s:2:"id";s:1:"9";s:6:"weight";s:1:"1";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:3;a:5:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:4;a:5:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:5;a:5:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:6;a:5:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:7;a:5:{s:2:"id";s:1:"8";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:8;a:5:{s:2:"id";s:1:"7";s:6:"weight";s:1:"1";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}}}}i:1;a:13:{i:0;a:3:{s:8:"sphinxql";s:41:"select * from loc_dist1 order by str1 asc";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:4:{s:2:"id";s:1:"5";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:1;a:4:{s:2:"id";s:1:"7";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:2;a:4:{s:2:"id";s:1:"8";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:3;a:4:{s:2:"id";s:1:"3";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:4;a:4:{s:2:"id";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:5;a:4:{s:2:"id";s:1:"6";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:6;a:4:{s:2:"id";s:1:"9";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:7;a:4:{s:2:"id";s:1:"4";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}}}i:1;a:3:{s:8:"sphinxql";s:42:"select * from loc_dist1 order by str1 desc";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:4:{s:2:"id";s:1:"4";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}i:1;a:4:{s:2:"id";s:1:"6";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:2;a:4:{s:2:"id";s:1:"9";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:3;a:4:{s:2:"id";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:4;a:4:{s:2:"id";s:1:"3";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:5;a:4:{s:2:"id";s:1:"5";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:6;a:4:{s:2:"id";s:1:"7";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:7;a:4:{s:2:"id";s:1:"8";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}}}i:2;a:3:{s:8:"sphinxql";s:52:"select * from loc_dist2 order by str1 asc, idd1 desc";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:4:{s:2:"id";s:1:"3";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:1;a:4:{s:2:"id";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:2;a:4:{s:2:"id";s:1:"4";s:4:"str1";s:9:"cc c main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:3;a:4:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:4;a:4:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:5;a:4:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:6;a:4:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:7;a:4:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}}}i:3;a:3:{s:8:"sphinxql";s:52:"select * from loc_dist2 order by str1 desc, idd1 asc";s:10:"total_rows";i:8;s:4:"rows";a:8:{i:0;a:4:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:1;a:4:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:4:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:4:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:4;a:4:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:5;a:4:{s:2:"id";s:1:"4";s:4:"str1";s:9:"cc c main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:6;a:4:{s:2:"id";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:7;a:4:{s:2:"id";s:1:"3";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}}}i:4;a:3:{s:8:"sphinxql";s:41:"select * from loc_dist2 order by str2 asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:5:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:1;a:5:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:5:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:5:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}}}i:5;a:3:{s:8:"sphinxql";s:42:"select * from loc_dist2 order by str2 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:5:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:1;a:5:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:2;a:5:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:3;a:5:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}}}i:6;a:3:{s:8:"sphinxql";s:53:"select * from loc_dist2 order by str2 desc, idd1 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:5:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:1;a:5:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:5:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:3;a:5:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}}}i:7;a:3:{s:8:"sphinxql";s:48:"select * from dist1 order by str2 asc, idd1 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:5:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:1;a:5:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:5:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:5:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}}}i:8;a:3:{s:8:"sphinxql";s:48:"select * from dist1 order by str2 desc, idd1 asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:5:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:1;a:5:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"str2";s:11:"c cc delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:2;a:5:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:5:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:5:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"str2";s:10:"a a delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}}}i:9;a:3:{s:8:"sphinxql";s:37:"select * from dist2 order by str1 asc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:4:{s:2:"id";s:1:"4";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}i:1;a:4:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:2;a:4:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:4:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:4:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:5;a:4:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}}}i:10;a:3:{s:8:"sphinxql";s:38:"select * from dist2 order by str1 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:4:{s:2:"id";s:1:"5";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:1;a:4:{s:2:"id";s:1:"6";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:2;a:4:{s:2:"id";s:1:"7";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:3;a:4:{s:2:"id";s:1:"8";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"102";}i:4;a:4:{s:2:"id";s:1:"9";s:4:"str1";s:6:"delta2";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"102";}i:5;a:4:{s:2:"id";s:1:"4";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}}}i:11;a:3:{s:8:"sphinxql";s:37:"select * from dist3 order by str1 asc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:4:{s:2:"id";s:1:"5";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:1;a:4:{s:2:"id";s:1:"7";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:2;a:4:{s:2:"id";s:1:"8";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:3;a:4:{s:2:"id";s:1:"3";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:4;a:4:{s:2:"id";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:5;a:4:{s:2:"id";s:1:"6";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:6;a:4:{s:2:"id";s:1:"9";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:7;a:4:{s:2:"id";s:1:"2";s:4:"str1";s:9:"c cc main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:8;a:4:{s:2:"id";s:1:"4";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}}}i:12;a:3:{s:8:"sphinxql";s:49:"select * from dist3 order by str1 desc, idd1 desc";s:10:"total_rows";i:9;s:4:"rows";a:9:{i:0;a:4:{s:2:"id";s:1:"4";s:4:"str1";s:11:"cc c delta1";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"101";}i:1;a:4:{s:2:"id";s:1:"2";s:4:"str1";s:9:"c cc main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:2;a:4:{s:2:"id";s:1:"9";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:3;a:4:{s:2:"id";s:1:"6";s:4:"str1";s:11:"c cc delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:4;a:4:{s:2:"id";s:1:"1";s:4:"str1";s:9:"a aa main";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"100";}i:5;a:4:{s:2:"id";s:1:"3";s:4:"str1";s:8:"a a main";s:4:"idd1";s:2:"11";s:3:"tag";s:3:"100";}i:6;a:4:{s:2:"id";s:1:"5";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"3";s:3:"tag";s:3:"101";}i:7;a:4:{s:2:"id";s:1:"8";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}i:8;a:4:{s:2:"id";s:1:"7";s:4:"str1";s:10:"a a delta1";s:4:"idd1";s:1:"1";s:3:"tag";s:3:"101";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_163/test.xml b/coreseek/csft-4.1/test/test_163/test.xml new file mode 100755 index 0000000..b97411c --- /dev/null +++ b/coreseek/csft-4.1/test/test_163/test.xml @@ -0,0 +1,194 @@ + + + +string attribute vs different indexes + +3 + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + + compat_sphinxql_magics = 1 + compat_sphinxql_magics = 0 + +} + +source src_main +{ + type = mysql + + + sql_query = SELECT id, body, CONCAT(str1, ' main') AS str1, idd1, 100 as tag FROM test_table + sql_attr_uint = idd1 + sql_attr_uint = tag + sql_attr_string = str1 +} + +source src_delta1 +{ + type = mysql + + + sql_query = SELECT id, body, CONCAT(str1, ' delta1') AS str1, idd1, 101 as tag FROM test_table where id>3 + sql_attr_uint = idd1 + sql_attr_uint = tag + sql_attr_string = str1 + sql_query_killlist = SELECT 2 +} + +source src_delta2 +{ + type = mysql + + + sql_query = SELECT id, body, 'delta2' as str1, CONCAT(str1, ' delta2') AS str2, idd1, 102 as tag FROM test_table where id>4 + sql_attr_uint = idd1 + sql_attr_uint = tag + sql_attr_string = str1 + sql_attr_string = str2 + sql_query_killlist = SELECT 2 +} + + +index main +{ + source = src_main + docinfo = extern + charset_type = sbcs + path = /main +} + +index delta1 +{ + source = src_delta1 + docinfo = extern + charset_type = sbcs + path = /delta1 +} + +index delta2 +{ + source = src_delta2 + docinfo = extern + charset_type = sbcs + path = /delta2 +} + +index loc_dist1 +{ + type = distributed + local = main + local = delta1 +} + +index loc_dist2 +{ + type = distributed + local = main + local = delta2 +} + +index dist1 +{ + type = distributed + local = main + agent = :agent1_delta2 +} + +index dist2 +{ + type = distributed + local = delta2 + agent = :agent2_delta1 +} + +index dist3 +{ + type = distributed + agent = :agent1_main + agent = :agent2_delta1 +} + + + +index agent1_main +{ + source = src_main + docinfo = extern + charset_type = sbcs + path = /agent1_main +} + +index agent1_delta2 +{ + source = src_delta2 + docinfo = extern + charset_type = sbcs + path = /agent1_delta2 +} + + + +index agent2_delta1 +{ + source = src_delta1 + docinfo = extern + charset_type = sbcs + path = /agent2_delta1 +} + + + + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `idd1` int(11) NOT NULL default '0', + `str1` varchar(255) NOT NULL default '', + `body` varchar(255) NOT NULL default '' +) + + +DROP TABLE IF EXISTS `test_table` + + +INSERT INTO `test_table` VALUES +( 1, 1, 'a aa', 'the dog' ), +( 2, 11, 'c cc', 'the cat' ), +( 3, 11, 'a a', 'the bird' ), +( 4, 11, 'cc c', 'cat eats bird' ), +( 5, 3, 'a a', 'dog eats cat' ), +( 6, 1, 'c cc', 'bird' ), +( 7, 1, 'a a', 'the cat' ), +( 8, 1, 'a a', 'eats' ), +( 9, 3, 'c cc', 'the' ) + + + +select * from loc_dist1 order by str1 asc +select * from loc_dist1 order by str1 desc +select * from loc_dist2 order by str1 asc, idd1 desc +select * from loc_dist2 order by str1 desc, idd1 asc +select * from loc_dist2 order by str2 asc +select * from loc_dist2 order by str2 desc +select * from loc_dist2 order by str2 desc, idd1 desc +select * from dist1 order by str2 asc, idd1 desc +select * from dist1 order by str2 desc, idd1 asc +select * from dist2 order by str1 asc +select * from dist2 order by str1 desc +select * from dist3 order by str1 asc +select * from dist3 order by str1 desc, idd1 desc + + + diff --git a/coreseek/csft-4.1/test/test_164/model.bin b/coreseek/csft-4.1/test/test_164/model.bin new file mode 100755 index 0000000..2a74819 --- /dev/null +++ b/coreseek/csft-4.1/test/test_164/model.bin @@ -0,0 +1 @@ +a:8:{i:0;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"simple";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"@simple";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"\@simple";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"@simple!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"\@simple\!";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"simple\!";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"hey";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"@dude!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""hey" "@dude!"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"dude";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""dude a-team"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""a-team was"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""@@!!!"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3560";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"awesome";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""was @@!!! awesome"";}}i:1;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"simple";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"@simple";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"\@simple";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"@simple!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"\@simple\!";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"simple\!";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"hey";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"@dude!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""hey" "@dude!"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"dude";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""dude a-team"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""a-team was"";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""@@!!!"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:7:"awesome";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""was @@!!! awesome"";}}i:2;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"simple";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"@simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"\@simple";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"@simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"\@simple\!";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"simple\!";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"hey";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"@dude!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""hey" "@dude!"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"dude";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""dude a-team"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""a-team was"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""@@!!!"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3560";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"awesome";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""was @@!!! awesome"";}}i:3;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"simple";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"@simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"\@simple";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"@simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"\@simple\!";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"simple!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"simple\!";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"hey";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"@dude!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""hey" "@dude!"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"dude";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""dude a-team"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""a-team was"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""@@!!!"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3560";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:3:{s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"awesome";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""was @@!!! awesome"";}}i:4;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"simple";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"@simple";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"\@simple";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"@simple!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"\@simple\!";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"simple\!";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"hey";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"@dude!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""hey" "@dude!"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"dude";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""dude a-team"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""a-team was"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""@@!!!"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3560";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"awesome";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""was @@!!! awesome"";}}i:5;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"simple";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"@simple";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"\@simple";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"@simple!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"\@simple\!";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"simple\!";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"2590";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"hey";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"@dude!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""hey" "@dude!"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"dude";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""dude a-team"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""a-team was"";}i:7;a:11:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""@@!!!"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:7:"awesome";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""was @@!!! awesome"";}}i:6;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"simple";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"@simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"\@simple";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"@simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"\@simple\!";}i:3;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"simple\!";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"hey";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"@dude!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""hey" "@dude!"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"dude";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""dude a-team"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""a-team was"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""@@!!!"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3560";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"awesome";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""was @@!!! awesome"";}}i:7;a:9:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:6:"simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:6:"simple";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"@simple";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"\@simple";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:8:"@simple!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"\@simple\!";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"simple!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:8:"simple\!";}i:4;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:3:"hey";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"@dude!";a:2:{s:4:"docs";s:1:"0";s:4:"hits";s:1:"0";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:""hey" "@dude!"";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:4:"dude";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:13:""dude a-team"";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}i:3;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:2:{s:6:"a-team";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""a-team was"";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"1680";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:""@@!!!"";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"text";}s:5:"attrs";a:0:{}s:7:"matches";a:1:{i:3;a:2:{s:6:"weight";s:4:"3560";s:5:"attrs";a:0:{}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:3:{s:3:"was";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:5:"@@!!!";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"awesome";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:19:""was @@!!! awesome"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_164/test.xml b/coreseek/csft-4.1/test/test_164/test.xml new file mode 100755 index 0000000..809b3bc --- /dev/null +++ b/coreseek/csft-4.1/test/test_164/test.xml @@ -0,0 +1,75 @@ + + + +blend_mode + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = test + path = /test + + blend_chars = @, &, ., !, - + + + blend_mode = trim_none + blend_mode = trim_none, skip_pure + blend_mode = trim_tail + blend_mode = trim_head, trim_tail + + + charset_type = sbcs + charset_type = utf-8 + +} + + + +CREATE TABLE test_table +( + id INT NOT NULL, + text VARCHAR(255) NOT NULL +); + + + +DROP TABLE IF EXISTS test_table + + + +INSERT INTO test_table VALUES +( 1, '@simple!' ), +( 2, 'hey @dude! a-team was awesome!!'), +( 3, 'hey @dude... a-team was @@!!! awesome'); + + + +simple +\@simple +\@simple\! +simple\! +"hey" "@dude!" +"dude a-team" +"a-team was" +"@@!!!" +"was @@!!! awesome" + + + diff --git a/coreseek/csft-4.1/test/test_165/model.bin b/coreseek/csft-4.1/test/test_165/model.bin new file mode 100755 index 0000000..2e55167 --- /dev/null +++ b/coreseek/csft-4.1/test/test_165/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:15:{i:0;a:3:{s:8:"sphinxql";s:42:"select * from test where match ('X files')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1500";}}}i:1;a:3:{s:8:"sphinxql";s:44:"select * from test where match ('(X files)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1500";}}}i:2;a:3:{s:8:"sphinxql";s:48:"select * from test where match (' ( X files ) ')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1500";}}}i:3;a:3:{s:8:"sphinxql";s:58:"select * from test where match ('(x files) silver screen')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2620";}}}i:4;a:2:{s:8:"sphinxql";s:57:"select * from test where match (' X files silver screen')";s:10:"total_rows";i:0;}i:5;a:2:{s:8:"sphinxql";s:59:"select * from test where match ('(x file) (silver screen)')";s:10:"total_rows";i:0;}i:6;a:3:{s:8:"sphinxql";s:59:"select * from test where match ('(x file) | silver screen')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1560";}}}i:7;a:3:{s:8:"sphinxql";s:60:"select * from test where match ('(X files) | silver screen')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1590";}i:1;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:2;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1500";}}}i:8;a:3:{s:8:"sphinxql";s:62:"select * from test where match ('(x files) | silver | screen')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2545";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1545";}}}i:9;a:2:{s:8:"sphinxql";s:41:"select * from test where match ('x file')";s:10:"total_rows";i:0;}i:10;a:3:{s:8:"sphinxql";s:45:"select * from test where match ('the X file')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"2409";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"2409";}}}i:11;a:3:{s:8:"sphinxql";s:48:"select * from star where match ('action*packed')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";}}}i:12;a:3:{s:8:"sphinxql";s:39:"select * from star where match ('mov*')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1442";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1442";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1442";}}}i:13;a:3:{s:8:"sphinxql";s:40:"select * from star where match ('pack*')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1557";}i:1;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1557";}}}i:14;a:3:{s:8:"sphinxql";s:41:"select * from star where match ('action')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1557";}i:1;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1557";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_165/synonyms.txt b/coreseek/csft-4.1/test/test_165/synonyms.txt new file mode 100755 index 0000000..031bdca --- /dev/null +++ b/coreseek/csft-4.1/test/test_165/synonyms.txt @@ -0,0 +1,5 @@ +the (dummy) => the (dummy) +the (dummy) => dummic +silver screen => projection screen +X files => X files +X file => X files \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_165/synonyms2.txt b/coreseek/csft-4.1/test/test_165/synonyms2.txt new file mode 100755 index 0000000..075e401 --- /dev/null +++ b/coreseek/csft-4.1/test/test_165/synonyms2.txt @@ -0,0 +1 @@ +action*packed => action*packed \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_165/test.xml b/coreseek/csft-4.1/test/test_165/test.xml new file mode 100755 index 0000000..27311e8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_165/test.xml @@ -0,0 +1,112 @@ + + + +exceptions vs ext2 query grouping + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT *, 1 as idd FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 + exceptions = test_165/synonyms.txt +} + +source srcstar +{ + type = mysql + + + sql_query = SELECT *, 1 as idd FROM star_table +} + +index star +{ + source = srcstar + path = /star + charset_type = utf-8 + exceptions = test_165/synonyms2.txt + enable_star = 1 + min_prefix_len = 1 +} + + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +CREATE TABLE `star_table` +( + `document_id` int(11) NOT NULL default '0', + `body` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +DROP TABLE IF EXISTS `star_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'the X files is not X rated movie' ), +( 2, 'the X files is silver sitcom' ), +( 3, 'the x files is good on silver screen' ) + + + +INSERT INTO `star_table` VALUES +( 1, 'action*packed movies are not for family' ), +( 2, 'action movies are mostly blockbasters' ), +( 3, 'action packed movies published recently' ), +( 4, 'recent DVD pack as collection' ) + + + + +select * from test where match ('X files') +select * from test where match ('(X files)') +select * from test where match (' ( X files ) ') +select * from test where match ('(x files) silver screen') +select * from test where match (' X files silver screen') +select * from test where match ('(x file) (silver screen)') +select * from test where match ('(x file) | silver screen') +select * from test where match ('(X files) | silver screen') +select * from test where match ('(x files) | silver | screen') +select * from test where match ('x file') +select * from test where match ('the X file') + +select * from star where match ('action*packed') +select * from star where match ('mov*') +select * from star where match ('pack*') +select * from star where match ('action') + + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_166/model.bin b/coreseek/csft-4.1/test/test_166/model.bin new file mode 100755 index 0000000..b141d55 --- /dev/null +++ b/coreseek/csft-4.1/test/test_166/model.bin @@ -0,0 +1 @@ +a:3:{i:0;a:7:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";s:4:"a aa";s:8:"@groupby";i:1286444629639636820;s:6:"@count";i:5;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:10;s:4:"str1";s:4:"c cC";s:8:"@groupby";i:195691322532063478;s:6:"@count";i:4;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:2:{i:9;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:4:{s:4:"idd1";i:13;s:4:"str1";s:4:"c cc";s:8:"@groupby";i:195691322532063478;s:6:"@count";i:4;}}i:7;a:2:{s:6:"weight";s:4:"2545";s:5:"attrs";a:4:{s:4:"idd1";i:4;s:4:"str1";s:4:"a Aa";s:8:"@groupby";i:1286444629639636820;s:6:"@count";i:4;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:3:"the";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"cat";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"bird";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"the | cat | dog | bird";}i:2;a:3:{s:8:"sphinxql";s:48:"select * from all group by str1 order by @id asc";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:19:"1286444629639636820";s:6:"@count";s:1:"5";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:18:"195691322532063478";s:6:"@count";s:1:"4";}}}i:3;a:3:{s:8:"sphinxql";s:123:"select * from all where match ('the | cat | dog | bird') group by str1 within group order by idd1 desc order by @weight asc";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1500";s:4:"idd1";s:2:"13";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:18:"195691322532063478";s:6:"@count";s:1:"4";}i:1;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:4:"2545";s:4:"idd1";s:1:"4";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:19:"1286444629639636820";s:6:"@count";s:1:"4";}}}i:4;a:2:{s:8:"sphinxql";s:32:"set collation_connection=libc_cs";s:14:"total_affected";i:0;}i:5;a:3:{s:8:"sphinxql";s:50:"select * from all group by str1 order by idd1 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-2966048536600452348";s:6:"@count";s:1:"2";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-2966083720972555100";s:6:"@count";s:1:"2";}i:2;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-4550552610715127046";s:6:"@count";s:1:"2";}i:3;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"2";s:4:"str1";s:4:"a aA";s:8:"@groupby";s:20:"-4519907022619685254";s:6:"@count";s:1:"2";}i:4;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-4519871838247582502";s:6:"@count";s:1:"1";}}}i:6;a:3:{s:8:"sphinxql";s:122:"select * from all where match ('the | cat | dog | bird') group by str1 within group order by idd1 asc order by @weight asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-4519871838247582502";s:6:"@count";s:1:"1";}i:1;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"2";s:4:"str1";s:4:"a aA";s:8:"@groupby";s:20:"-4519907022619685254";s:6:"@count";s:1:"1";}i:2;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1500";s:4:"idd1";s:2:"12";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-2966048536600452348";s:6:"@count";s:1:"2";}i:3;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1545";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-4550552610715127046";s:6:"@count";s:1:"2";}i:4;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:4:"2500";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-2966083720972555100";s:6:"@count";s:1:"2";}}}}i:1;a:7:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";s:4:"a aa";s:8:"@groupby";i:-6704402370037900940;s:6:"@count";i:5;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:10;s:4:"str1";s:4:"c cC";s:8:"@groupby";i:-1004237807469493610;s:6:"@count";i:4;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:2:{i:9;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:4:{s:4:"idd1";i:13;s:4:"str1";s:4:"c cc";s:8:"@groupby";i:-1004237807469493610;s:6:"@count";i:4;}}i:7;a:2:{s:6:"weight";s:4:"2545";s:5:"attrs";a:4:{s:4:"idd1";i:4;s:4:"str1";s:4:"a Aa";s:8:"@groupby";i:-6704402370037900940;s:6:"@count";i:4;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:3:"the";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"cat";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"bird";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"the | cat | dog | bird";}i:2;a:3:{s:8:"sphinxql";s:48:"select * from all group by str1 order by @id asc";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-6704402370037900940";s:6:"@count";s:1:"5";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-1004237807469493610";s:6:"@count";s:1:"4";}}}i:3;a:3:{s:8:"sphinxql";s:123:"select * from all where match ('the | cat | dog | bird') group by str1 within group order by idd1 desc order by @weight asc";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1500";s:4:"idd1";s:2:"13";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-1004237807469493610";s:6:"@count";s:1:"4";}i:1;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:4:"2545";s:4:"idd1";s:1:"4";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-6704402370037900940";s:6:"@count";s:1:"4";}}}i:4;a:2:{s:8:"sphinxql";s:32:"set collation_connection=libc_cs";s:14:"total_affected";i:0;}i:5;a:3:{s:8:"sphinxql";s:50:"select * from all group by str1 order by idd1 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-2966048536600452348";s:6:"@count";s:1:"2";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-2966083720972555100";s:6:"@count";s:1:"2";}i:2;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-4550552610715127046";s:6:"@count";s:1:"2";}i:3;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"2";s:4:"str1";s:4:"a aA";s:8:"@groupby";s:20:"-4519907022619685254";s:6:"@count";s:1:"2";}i:4;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-4519871838247582502";s:6:"@count";s:1:"1";}}}i:6;a:3:{s:8:"sphinxql";s:122:"select * from all where match ('the | cat | dog | bird') group by str1 within group order by idd1 asc order by @weight asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-4519871838247582502";s:6:"@count";s:1:"1";}i:1;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"2";s:4:"str1";s:4:"a aA";s:8:"@groupby";s:20:"-4519907022619685254";s:6:"@count";s:1:"1";}i:2;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1500";s:4:"idd1";s:2:"12";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-2966048536600452348";s:6:"@count";s:1:"2";}i:3;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1545";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-4550552610715127046";s:6:"@count";s:1:"2";}i:4;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:4:"2500";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-2966083720972555100";s:6:"@count";s:1:"2";}}}}i:2;a:7:{i:0;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";s:4:"a aa";s:8:"@groupby";i:-4519871838247582502;s:6:"@count";i:1;}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:10;s:4:"str1";s:4:"c cC";s:8:"@groupby";i:-2966083720972555100;s:6:"@count";i:2;}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:2;s:4:"str1";s:4:"a aA";s:8:"@groupby";i:-4519907022619685254;s:6:"@count";i:2;}}i:5;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:3;s:4:"str1";s:4:"a Aa";s:8:"@groupby";i:-4550552610715127046;s:6:"@count";i:2;}}i:6;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:4:{s:4:"idd1";i:12;s:4:"str1";s:4:"c cc";s:8:"@groupby";i:-2966048536600452348;s:6:"@count";i:2;}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.002";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:4:"body";}s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";i:7;s:8:"@groupby";i:6;s:6:"@count";i:1;}s:7:"matches";a:5:{i:1;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:4:{s:4:"idd1";i:1;s:4:"str1";s:4:"a aa";s:8:"@groupby";i:-4519871838247582502;s:6:"@count";i:1;}}i:3;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:4:{s:4:"idd1";i:2;s:4:"str1";s:4:"a aA";s:8:"@groupby";i:-4519907022619685254;s:6:"@count";i:1;}}i:9;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:4:{s:4:"idd1";i:13;s:4:"str1";s:4:"c cc";s:8:"@groupby";i:-2966048536600452348;s:6:"@count";i:2;}}i:4;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:4:{s:4:"idd1";i:11;s:4:"str1";s:4:"c cC";s:8:"@groupby";i:-2966083720972555100;s:6:"@count";i:2;}}i:7;a:2:{s:6:"weight";s:4:"2545";s:5:"attrs";a:4:{s:4:"idd1";i:4;s:4:"str1";s:4:"a Aa";s:8:"@groupby";i:-4550552610715127046;s:6:"@count";i:2;}}}s:5:"total";s:1:"5";s:11:"total_found";s:1:"5";s:4:"time";s:5:"0.003";s:5:"words";a:4:{s:3:"the";a:2:{s:4:"docs";s:1:"5";s:4:"hits";s:1:"5";}s:3:"cat";a:2:{s:4:"docs";s:1:"4";s:4:"hits";s:1:"4";}s:3:"dog";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}s:4:"bird";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:22:"the | cat | dog | bird";}i:2;a:3:{s:8:"sphinxql";s:48:"select * from all group by str1 order by @id asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-4519871838247582502";s:6:"@count";s:1:"1";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-2966083720972555100";s:6:"@count";s:1:"2";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"2";s:4:"str1";s:4:"a aA";s:8:"@groupby";s:20:"-4519907022619685254";s:6:"@count";s:1:"2";}i:3;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-4550552610715127046";s:6:"@count";s:1:"2";}i:4;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-2966048536600452348";s:6:"@count";s:1:"2";}}}i:3;a:3:{s:8:"sphinxql";s:123:"select * from all where match ('the | cat | dog | bird') group by str1 within group order by idd1 desc order by @weight asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-4519871838247582502";s:6:"@count";s:1:"1";}i:1;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"2";s:4:"str1";s:4:"a aA";s:8:"@groupby";s:20:"-4519907022619685254";s:6:"@count";s:1:"1";}i:2;a:6:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1500";s:4:"idd1";s:2:"13";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-2966048536600452348";s:6:"@count";s:1:"2";}i:3;a:6:{s:2:"id";s:1:"4";s:6:"weight";s:4:"2500";s:4:"idd1";s:2:"11";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-2966083720972555100";s:6:"@count";s:1:"2";}i:4;a:6:{s:2:"id";s:1:"7";s:6:"weight";s:4:"2545";s:4:"idd1";s:1:"4";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-4550552610715127046";s:6:"@count";s:1:"2";}}}i:4;a:2:{s:8:"sphinxql";s:32:"set collation_connection=libc_cs";s:14:"total_affected";i:0;}i:5;a:3:{s:8:"sphinxql";s:50:"select * from all group by str1 order by idd1 desc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"12";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-2966048536600452348";s:6:"@count";s:1:"2";}i:1;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-2966083720972555100";s:6:"@count";s:1:"2";}i:2;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-4550552610715127046";s:6:"@count";s:1:"2";}i:3;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"2";s:4:"str1";s:4:"a aA";s:8:"@groupby";s:20:"-4519907022619685254";s:6:"@count";s:1:"2";}i:4;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-4519871838247582502";s:6:"@count";s:1:"1";}}}i:6;a:3:{s:8:"sphinxql";s:122:"select * from all where match ('the | cat | dog | bird') group by str1 within group order by idd1 asc order by @weight asc";s:10:"total_rows";i:5;s:4:"rows";a:5:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"1";s:4:"str1";s:4:"a aa";s:8:"@groupby";s:20:"-4519871838247582502";s:6:"@count";s:1:"1";}i:1;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";s:4:"idd1";s:1:"2";s:4:"str1";s:4:"a aA";s:8:"@groupby";s:20:"-4519907022619685254";s:6:"@count";s:1:"1";}i:2;a:6:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1500";s:4:"idd1";s:2:"12";s:4:"str1";s:4:"c cc";s:8:"@groupby";s:20:"-2966048536600452348";s:6:"@count";s:1:"2";}i:3;a:6:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1545";s:4:"idd1";s:1:"3";s:4:"str1";s:4:"a Aa";s:8:"@groupby";s:20:"-4550552610715127046";s:6:"@count";s:1:"2";}i:4;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:4:"2500";s:4:"idd1";s:2:"10";s:4:"str1";s:4:"c cC";s:8:"@groupby";s:20:"-2966083720972555100";s:6:"@count";s:1:"2";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_166/test.xml b/coreseek/csft-4.1/test/test_166/test.xml new file mode 100755 index 0000000..0a208e4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_166/test.xml @@ -0,0 +1,137 @@ + + + +string attibutes vs agent groupings + +3 + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads + + collation_libc_locale = C + + collation_server = utf8_general_ci + collation_server = libc_ci + collation_server = libc_cs + +} + + +source src_master +{ + type = mysql + + + sql_query = SELECT id, idd1, str1, body FROM test_table where id in ( 1, 2, 3 ) + sql_attr_uint = idd1 + sql_attr_string = str1 +} + +index master +{ + source = src_master + docinfo = extern + charset_type = utf-8 + path = /master +} + +index all +{ + type = distributed + local = master + agent = :a1 + agent = :a2 +} + + + +source src_a1 +{ + type = mysql + + + sql_query = SELECT id, idd1, str1, body FROM test_table where id in ( 4, 5, 6 ) + sql_attr_uint = idd1 + sql_attr_string = str1 +} + +index a1 +{ + source = src_a1 + docinfo = extern + charset_type = utf-8 + path = /a1 +} + + + +source src_a2 +{ + type = mysql + + + sql_query = SELECT id, idd1, str1, body FROM test_table where id in ( 7, 8, 9 ) + sql_attr_uint = idd1 + sql_attr_string = str1 +} + +index a2 +{ + source = src_a2 + docinfo = extern + charset_type = utf-8 + path = /a2 +} + + + + + +CREATE TABLE `test_table` +( + `id` int(11) NOT NULL default '0', + `idd1` int(11) NOT NULL default '0', + `str1` varchar(1024) NOT NULL default '', + `body` varchar(1024) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 1, 'a aa', 'the dog' ), +( 2, 10, 'c cC', 'the cat' ), +( 3, 2, 'a aA', 'the bird' ), +( 4, 11, 'c cC', 'cat eats bird' ), +( 5, 3, 'a Aa', 'dog eats cat' ), +( 6, 12, 'c cc', 'bird' ), +( 7, 4, 'a Aa', 'the cat' ), +( 8, 5, 'a aA', 'eats' ), +( 9, 13, 'c cc', 'the' ) + + + +select * from all group by str1 order by @id asc +select * from all where match ('the | cat | dog | bird') group by str1 within group order by idd1 desc order by @weight asc +set collation_connection=libc_cs +select * from all group by str1 order by idd1 desc +select * from all where match ('the | cat | dog | bird') group by str1 within group order by idd1 asc order by @weight asc + + + + +the | cat | dog | bird + + + diff --git a/coreseek/csft-4.1/test/test_167/model.bin b/coreseek/csft-4.1/test/test_167/model.bin new file mode 100755 index 0000000..612c511 --- /dev/null +++ b/coreseek/csft-4.1/test/test_167/model.bin @@ -0,0 +1 @@ +a:27:{i:0;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:1;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:2;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:3;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:4;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:5;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:6;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:7;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:8;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:9;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:10;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:11;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:12;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:13;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:14;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:15;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:16;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:17;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:18;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:19;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:20;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"2500";}}}}i:21;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:22;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:23;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:24;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:25;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}i:26;a:1:{i:0;a:3:{s:8:"sphinxql";s:63:"select * from test where match('@(author) luther @(title) ccc')";s:10:"total_rows";i:16;s:4:"rows";a:16:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1277";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1277";}i:2;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1277";}i:3;a:2:{s:2:"id";s:1:"4";s:6:"weight";s:4:"1277";}i:4;a:2:{s:2:"id";s:1:"5";s:6:"weight";s:4:"1277";}i:5;a:2:{s:2:"id";s:1:"6";s:6:"weight";s:4:"1277";}i:6;a:2:{s:2:"id";s:1:"7";s:6:"weight";s:4:"1277";}i:7;a:2:{s:2:"id";s:1:"8";s:6:"weight";s:4:"1277";}i:8;a:2:{s:2:"id";s:1:"9";s:6:"weight";s:4:"1277";}i:9;a:2:{s:2:"id";s:2:"10";s:6:"weight";s:4:"1277";}i:10;a:2:{s:2:"id";s:2:"11";s:6:"weight";s:4:"1277";}i:11;a:2:{s:2:"id";s:2:"12";s:6:"weight";s:4:"1277";}i:12;a:2:{s:2:"id";s:2:"13";s:6:"weight";s:4:"1277";}i:13;a:2:{s:2:"id";s:2:"14";s:6:"weight";s:4:"1277";}i:14;a:2:{s:2:"id";s:2:"15";s:6:"weight";s:4:"1277";}i:15;a:2:{s:2:"id";s:2:"16";s:6:"weight";s:4:"1277";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_167/test.xml b/coreseek/csft-4.1/test/test_167/test.xml new file mode 100755 index 0000000..35304d4 --- /dev/null +++ b/coreseek/csft-4.1/test/test_167/test.xml @@ -0,0 +1,88 @@ + + + +min_word_len vs tail of the query + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + + charset_type = sbcs + charset_type = utf-8 + charset_type = utf-8 + exceptions = synonyms.txt + + enable_star = 1 + + + min_word_len = 3 + min_word_len = 4 + min_word_len = 5 + + + + min_prefix_len = 3 + min_prefix_len = 4 + min_prefix_len = 5 + +} + + + +select * from test where match('@(author) luther @(title) ccc') + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `author` varchar(255) NOT NULL default '', + `title` varchar(255) NOT NULL default '' +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` VALUES +( 1, 'luther', 'a' ), +( 2, 'luther', 'bb' ), +( 3, 'luther', 'ccc' ), +( 4, 'luther', 'dddd' ), +( 5, 'luther', 'eeeee' ), +( 6, 'luther', 'ffffff' ), +( 7, 'luther', 'ggggggg' ), +( 8, 'luther', 'hello world' ), +( 9, 'luther', 'hello a world' ), +( 10, 'luther', 'hello aa world' ), +( 11, 'luther', 'hello aaa world' ), +( 12, 'luther', 'hello aaaa world' ), +( 13, 'luther', 'hello aaaaa world' ), +( 14, 'luther', 'hello me world' ), +( 15, 'luther', 'hello two world' ), +( 16, 'luther', 'hello four world' ) + + + diff --git a/coreseek/csft-4.1/test/test_168/model.bin b/coreseek/csft-4.1/test/test_168/model.bin new file mode 100755 index 0000000..9d039c2 --- /dev/null +++ b/coreseek/csft-4.1/test/test_168/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:10:{i:0;a:3:{s:8:"sphinxql";s:128:"CALL SNIPPETS ('and here we go 2524460. 989561 as you said', 'idx', '=2524460.', 1 as query_mode, 4 as limit_words, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:39:" ... we go 2524460. 989561 ... ";}}}i:1;a:3:{s:8:"sphinxql";s:179:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | =dude\/buddy', 1 as query_mode, 60 as limit, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:83:" ... need here (exactly)? are dude ... know this dude/buddy.";}}}i:2;a:3:{s:8:"sphinxql";s:163:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) dude\/buddy', 0 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:107:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:3;a:3:{s:8:"sphinxql";s:165:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | dude\/buddy', 1 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:93:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:4;a:3:{s:8:"sphinxql";s:157:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) buddy', 0 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:93:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:5;a:3:{s:8:"sphinxql";s:159:"CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | buddy', 1 as query_mode, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:93:"What are you need here (exactly)? are dude friendly? As I know this dude/buddy.";}}}i:6;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 0 as query_mode, 3 as limit_passages, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"What are you need here+ (exactly)?";}}}i:7;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 0 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"What are you need here+ (exactly)?";}}}i:8;a:3:{s:8:"sphinxql";s:126:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 1 as query_mode, 3 as limit_passages, 2 as around)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"What are you need here+ (exactly)?";}}}i:9;a:3:{s:8:"sphinxql";s:117:"CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 1 as query_mode, 0 as around, 0 as limit)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:41:"What are you need here+ (exactly)?";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_168/test.xml b/coreseek/csft-4.1/test/test_168/test.xml new file mode 100755 index 0000000..6bcaf00 --- /dev/null +++ b/coreseek/csft-4.1/test/test_168/test.xml @@ -0,0 +1,78 @@ + + + +snippet vs blended + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source src +{ + type = mysql + + sql_query = SELECT 1, 'dummy', 1 as idd + sql_attr_uint = idd +} + +index idx +{ + source = src + docinfo = extern + path = /main + charset_type = utf-8 + blend_chars = . +} + +index idx2 +{ + source = src + docinfo = extern + path = /idx2 + morphology = stem_en + charset_type = utf-8 + charset_table = 0..9, a..z, A..Z->a..z + blend_chars = U+0028, U+0029, U+002f, U+002b + blend_mode = trim_none, trim_head, trim_tail, trim_both, skip_pure +} + + + + + +CALL SNIPPETS ('and here we go 2524460. 989561 as you said', 'idx', '=2524460.', 1 as query_mode, 4 as limit_words, 2 as around) +CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | =dude\/buddy', 1 as query_mode, 60 as limit, 2 as around) +CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) dude\/buddy', 0 as query_mode, 2 as around) +CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | dude\/buddy', 1 as query_mode, 2 as around) + +CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) buddy', 0 as query_mode, 2 as around) +CALL SNIPPETS ('What are you need here (exactly)? are dude friendly? As I know this dude\/buddy.', 'idx2', '\(exactly\) | buddy', 1 as query_mode, 2 as around) + +CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 0 as query_mode, 3 as limit_passages, 2 as around) +CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 0 as query_mode, 0 as around, 0 as limit) +CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 1 as query_mode, 3 as limit_passages, 2 as around) +CALL SNIPPETS ('What are you need here+ (exactly)?', 'idx2', '\(exactly\)', 1 as query_mode, 0 as around, 0 as limit) + + + + +CREATE TABLE test_table +( + id INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + title VARCHAR(255) NOT NULL +); + + +INSERT INTO `test_table` VALUES +( 1, 'dummy' ) + +DROP TABLE IF EXISTS test_table + + diff --git a/coreseek/csft-4.1/test/test_169/model.bin b/coreseek/csft-4.1/test/test_169/model.bin new file mode 100755 index 0000000..36cf349 --- /dev/null +++ b/coreseek/csft-4.1/test/test_169/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:6:{i:0;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";i:7;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test one";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";}i:1;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";i:7;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test one";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"2";}}}i:2;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";i:7;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test one";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test two";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";}i:3;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";i:7;}s:7:"matches";a:2:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test one";}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test two";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}}i:4;a:8:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";i:7;}s:7:"matches";a:4:{i:1;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test one";}}i:2;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test two";}}i:3;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";i:2;s:5:"title";s:11:"another doc";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";i:2;s:5:"title";s:15:"doc number four";}}}s:5:"total";s:1:"4";s:11:"total_found";s:1:"4";}i:5;a:9:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:2:{i:0;s:5:"title";i:1;s:7:"content";}s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";i:7;}s:7:"matches";a:3:{i:1;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test one";}}i:2;a:2:{s:6:"weight";s:1:"2";s:5:"attrs";a:2:{s:8:"group_id";i:1;s:5:"title";s:8:"test two";}}i:4;a:2:{s:6:"weight";s:1:"1";s:5:"attrs";a:2:{s:8:"group_id";i:2;s:5:"title";s:15:"doc number four";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:5:"words";a:1:{s:4:"test";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"5";}}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_169/refdata/small1.spa b/coreseek/csft-4.1/test/test_169/refdata/small1.spa new file mode 100755 index 0000000..e796b6e Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small1.spa differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small1.spd b/coreseek/csft-4.1/test/test_169/refdata/small1.spd new file mode 100755 index 0000000..55d7abc Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small1.spd differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small1.sph b/coreseek/csft-4.1/test/test_169/refdata/small1.sph new file mode 100755 index 0000000..a1da6bf Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small1.sph differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small1.spi b/coreseek/csft-4.1/test/test_169/refdata/small1.spi new file mode 100755 index 0000000..80bf757 Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small1.spi differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small1.spk b/coreseek/csft-4.1/test/test_169/refdata/small1.spk new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/csft-4.1/test/test_169/refdata/small1.spm b/coreseek/csft-4.1/test/test_169/refdata/small1.spm new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/csft-4.1/test/test_169/refdata/small1.spp b/coreseek/csft-4.1/test/test_169/refdata/small1.spp new file mode 100755 index 0000000..5898791 Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small1.spp differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small1.sps b/coreseek/csft-4.1/test/test_169/refdata/small1.sps new file mode 100755 index 0000000..5b805be Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small1.sps differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small2.spa b/coreseek/csft-4.1/test/test_169/refdata/small2.spa new file mode 100755 index 0000000..d94a479 Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small2.spa differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small2.spd b/coreseek/csft-4.1/test/test_169/refdata/small2.spd new file mode 100755 index 0000000..90ff40f Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small2.spd differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small2.sph b/coreseek/csft-4.1/test/test_169/refdata/small2.sph new file mode 100755 index 0000000..8689223 Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small2.sph differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small2.spi b/coreseek/csft-4.1/test/test_169/refdata/small2.spi new file mode 100755 index 0000000..7d8c279 Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small2.spi differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small2.spk b/coreseek/csft-4.1/test/test_169/refdata/small2.spk new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/csft-4.1/test/test_169/refdata/small2.spm b/coreseek/csft-4.1/test/test_169/refdata/small2.spm new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/csft-4.1/test/test_169/refdata/small2.spp b/coreseek/csft-4.1/test/test_169/refdata/small2.spp new file mode 100755 index 0000000..15e06e2 Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small2.spp differ diff --git a/coreseek/csft-4.1/test/test_169/refdata/small2.sps b/coreseek/csft-4.1/test/test_169/refdata/small2.sps new file mode 100755 index 0000000..5df4375 Binary files /dev/null and b/coreseek/csft-4.1/test/test_169/refdata/small2.sps differ diff --git a/coreseek/csft-4.1/test/test_169/test.xml b/coreseek/csft-4.1/test/test_169/test.xml new file mode 100755 index 0000000..838ac26 --- /dev/null +++ b/coreseek/csft-4.1/test/test_169/test.xml @@ -0,0 +1,90 @@ + + + +rotation vs old index format + + + + + + + + +searchd +{ + +} + +indexer +{ + mem_limit = 16M +} + +source dummy +{ + type = mysql + + sql_query = select * from test_table + sql_attr_uint = group_id + sql_field_string = title +} + +index small +{ + source = dummy + path = /small + docinfo = extern +} + + +drop table if exists test_table + + +create table test_table +( + id INTEGER PRIMARY KEY NOT NULL AUTO_INCREMENT, + group_id INTEGER NOT NULL, + title VARCHAR(255) NOT NULL, + content VARCHAR(1024) NOT NULL +) + + + +insert into test_table values +( 1, 1, 'test one', 'this is my test document number one. also checking search within phrases.' ); + + +Query ( $words ); if ( $result ) { unset ( $result["time"] ); return $result; } else return $client->GetLastError(); '); + +$results = array(); +$errors = ''; + +$results[] = $query ( $client, '' ); +$results[] = $query ( $client, 'test' ); + +foreach (explode(" ", "a d h i k m p s") as $c) + exec ( "cp $this_test/refdata/small1.sp$c $index_data_path/small.new.sp$c" ); +exec ( "kill -HUP `cat $sd_pid_file`" ); +sleep ( 1 ); + +$results[] = $query ( $client, '' ); +$results[] = $query ( $client, 'test' ); + +foreach (explode(" ", "a d h i k m p s") as $c) + exec ( "cp $this_test/refdata/small2.sp$c $index_data_path/small.new.sp$c" ); +exec ( "kill -HUP `cat $sd_pid_file`" ); +sleep ( 1 ); + +$results[] = $query ( $client, '' ); +$results[] = $query ( $client, 'test' ); + +]]> + + diff --git a/coreseek/csft-4.1/test/test_170/model.bin b/coreseek/csft-4.1/test/test_170/model.bin new file mode 100755 index 0000000..cf5a80c --- /dev/null +++ b/coreseek/csft-4.1/test/test_170/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:32:{i:0;a:2:{s:8:"sphinxql";s:102:"replace into rt (id, gid, body) values ( 1, 10, 'the' ), (2, 20, 'good'), (1, 11, 'a'), (3, 30, 'dog')";s:14:"total_affected";i:4;}i:1;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:2:"20";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"30";}}}i:2;a:3:{s:8:"sphinxql";s:34:"select * from rt where match ('a')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:3:"gid";s:2:"11";}}}i:3;a:2:{s:8:"sphinxql";s:36:"select * from rt where match ('the')";s:10:"total_rows";i:0;}i:4;a:2:{s:8:"sphinxql";s:102:"replace into rt (id, gid, body) values ( 1, 10, 'the' ), (1, 11, 'a'), (2, 20, 'good'), (3, 30, 'dog')";s:14:"total_affected";i:4;}i:5;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:2:"20";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"30";}}}i:6;a:3:{s:8:"sphinxql";s:34:"select * from rt where match ('a')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:3:"gid";s:2:"11";}}}i:7;a:2:{s:8:"sphinxql";s:36:"select * from rt where match ('the')";s:10:"total_rows";i:0;}i:8;a:2:{s:8:"sphinxql";s:102:"replace into rt (id, gid, body) values (2, 20, 'good'), (3, 30, 'dog'), ( 1, 10, 'the' ), (1, 11, 'a')";s:14:"total_affected";i:4;}i:9;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:2:"20";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"30";}}}i:10;a:3:{s:8:"sphinxql";s:34:"select * from rt where match ('a')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:3:"gid";s:2:"11";}}}i:11;a:2:{s:8:"sphinxql";s:36:"select * from rt where match ('the')";s:10:"total_rows";i:0;}i:12;a:2:{s:8:"sphinxql";s:116:"replace into rt (id, gid, body) values ( 1, 10, 'the' ), (2, 20, 'good'), (1, 11, 'b'), (3, 30, 'dog'), (1, 12, 'a')";s:14:"total_affected";i:5;}i:13;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:2:"12";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:2:"20";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"30";}}}i:14;a:3:{s:8:"sphinxql";s:34:"select * from rt where match ('a')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:3:"gid";s:2:"12";}}}i:15;a:2:{s:8:"sphinxql";s:40:"select * from rt where match ('the | b')";s:10:"total_rows";i:0;}i:16;a:2:{s:8:"sphinxql";s:117:"replace into rt (id, gid, body) values ( 1, 10, 'the' ), (1, 11, 'b') , (1, 12, 'a'), (2, 20, 'good'), (3, 30, 'dog')";s:14:"total_affected";i:5;}i:17;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:2:"12";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:2:"20";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"30";}}}i:18;a:3:{s:8:"sphinxql";s:34:"select * from rt where match ('a')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:3:"gid";s:2:"12";}}}i:19;a:2:{s:8:"sphinxql";s:40:"select * from rt where match ('the | b')";s:10:"total_rows";i:0;}i:20;a:2:{s:8:"sphinxql";s:116:"replace into rt (id, gid, body) values (2, 20, 'good'), (3, 30, 'dog'), ( 1, 10, 'the' ), (1, 11, 'b'), (1, 12, 'a')";s:14:"total_affected";i:5;}i:21;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:2:"12";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:2:"20";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"30";}}}i:22;a:3:{s:8:"sphinxql";s:34:"select * from rt where match ('a')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1680";s:3:"gid";s:2:"12";}}}i:23;a:2:{s:8:"sphinxql";s:40:"select * from rt where match ('the | b')";s:10:"total_rows";i:0;}i:24;a:2:{s:8:"sphinxql";s:184:"replace into rt (id, gid, body) values ( 1, 10, 'the' ), (1, 11, 'a'), (2, 20, 'good'), (3, 30, 'dog'), (2, 21, 'nice'), (2, 22, 'well'), (4, 40, 'as'), (3, 31, 'cat'), (3, 32, 'bird')";s:14:"total_affected";i:9;}i:25;a:3:{s:8:"sphinxql";s:16:"select * from rt";s:10:"total_rows";i:4;s:4:"rows";a:4:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:2:"11";}i:1;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"gid";s:2:"22";}i:2;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:2:"32";}i:3;a:3:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"gid";s:2:"40";}}}i:26;a:3:{s:8:"sphinxql";s:34:"select * from rt where match ('a')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1695";s:3:"gid";s:2:"11";}}}i:27;a:2:{s:8:"sphinxql";s:36:"select * from rt where match ('the')";s:10:"total_rows";i:0;}i:28;a:3:{s:8:"sphinxql";s:37:"select * from rt where match ('well')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1695";s:3:"gid";s:2:"22";}}}i:29;a:2:{s:8:"sphinxql";s:44:"select * from rt where match ('good | nice')";s:10:"total_rows";i:0;}i:30;a:3:{s:8:"sphinxql";s:37:"select * from rt where match ('bird')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1695";s:3:"gid";s:2:"32";}}}i:31;a:2:{s:8:"sphinxql";s:42:"select * from rt where match ('dog | cat')";s:10:"total_rows";i:0;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_170/test.xml b/coreseek/csft-4.1/test/test_170/test.xml new file mode 100755 index 0000000..2462415 --- /dev/null +++ b/coreseek/csft-4.1/test/test_170/test.xml @@ -0,0 +1,75 @@ + + + +duplicate documents vs rt insert batches + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +index rt +{ + type = rt + docinfo = extern + charset_type = utf-8 + path = /rt + + rt_attr_uint = gid + rt_field = body + + rt_mem_limit = 8M +} + + + +replace into rt (id, gid, body) values ( 1, 10, 'the' ), (2, 20, 'good'), (1, 11, 'a'), (3, 30, 'dog') +select * from rt +select * from rt where match ('a') +select * from rt where match ('the') + +replace into rt (id, gid, body) values ( 1, 10, 'the' ), (1, 11, 'a'), (2, 20, 'good'), (3, 30, 'dog') +select * from rt +select * from rt where match ('a') +select * from rt where match ('the') + +replace into rt (id, gid, body) values (2, 20, 'good'), (3, 30, 'dog'), ( 1, 10, 'the' ), (1, 11, 'a') +select * from rt +select * from rt where match ('a') +select * from rt where match ('the') + +replace into rt (id, gid, body) values ( 1, 10, 'the' ), (2, 20, 'good'), (1, 11, 'b'), (3, 30, 'dog'), (1, 12, 'a') +select * from rt +select * from rt where match ('a') +select * from rt where match ('the | b') + +replace into rt (id, gid, body) values ( 1, 10, 'the' ), (1, 11, 'b') , (1, 12, 'a'), (2, 20, 'good'), (3, 30, 'dog') +select * from rt +select * from rt where match ('a') +select * from rt where match ('the | b') + +replace into rt (id, gid, body) values (2, 20, 'good'), (3, 30, 'dog'), ( 1, 10, 'the' ), (1, 11, 'b'), (1, 12, 'a') +select * from rt +select * from rt where match ('a') +select * from rt where match ('the | b') + +replace into rt (id, gid, body) values ( 1, 10, 'the' ), (1, 11, 'a'), (2, 20, 'good'), (3, 30, 'dog'), (2, 21, 'nice'), (2, 22, 'well'), (4, 40, 'as'), (3, 31, 'cat'), (3, 32, 'bird') +select * from rt +select * from rt where match ('a') +select * from rt where match ('the') +select * from rt where match ('well') +select * from rt where match ('good | nice') +select * from rt where match ('bird') +select * from rt where match ('dog | cat') + + + diff --git a/coreseek/csft-4.1/test/test_171/model.bin b/coreseek/csft-4.1/test/test_171/model.bin new file mode 100755 index 0000000..8c86439 --- /dev/null +++ b/coreseek/csft-4.1/test/test_171/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:107:{i:0;a:3:{s:8:"sphinxql";s:48:"select gr, count(*) cnt from dist_no group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:3:"cnt";s:1:"2";}i:1;a:2:{s:2:"gr";s:1:"2";s:3:"cnt";s:1:"1";}}}i:1;a:3:{s:8:"sphinxql";s:46:"select gr, count(*) cnt from dist0 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:3:"cnt";s:1:"2";}i:1;a:2:{s:2:"gr";s:1:"2";s:3:"cnt";s:1:"1";}}}i:2;a:3:{s:8:"sphinxql";s:46:"select gr, count(*) cnt from dist1 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:3:"cnt";s:1:"2";}i:1;a:2:{s:2:"gr";s:1:"2";s:3:"cnt";s:1:"1";}}}i:3;a:3:{s:8:"sphinxql";s:46:"select gr, count(*) cnt from dist2 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:3:"cnt";s:1:"2";}i:1;a:2:{s:2:"gr";s:1:"2";s:3:"cnt";s:1:"1";}}}i:4;a:3:{s:8:"sphinxql";s:46:"select gr, count(*) cnt from dist3 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"gr";s:1:"3";s:3:"cnt";s:1:"2";}i:1;a:2:{s:2:"gr";s:1:"2";s:3:"cnt";s:1:"1";}}}i:5;a:3:{s:8:"sphinxql";s:52:"select id idd, weight() cnt from dist_no group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:3:"idd";s:1:"1";s:3:"cnt";s:1:"1";}i:1;a:2:{s:3:"idd";s:1:"2";s:3:"cnt";s:1:"1";}}}i:6;a:3:{s:8:"sphinxql";s:50:"select id idd, weight() cnt from dist0 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:3:"idd";s:1:"1";s:3:"cnt";s:1:"1";}i:1;a:2:{s:3:"idd";s:1:"2";s:3:"cnt";s:1:"1";}}}i:7;a:3:{s:8:"sphinxql";s:50:"select id idd, weight() cnt from dist1 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:3:"idd";s:1:"1";s:3:"cnt";s:1:"1";}i:1;a:2:{s:3:"idd";s:1:"2";s:3:"cnt";s:1:"1";}}}i:8;a:3:{s:8:"sphinxql";s:50:"select id idd, weight() cnt from dist2 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:3:"idd";s:1:"1";s:3:"cnt";s:1:"1";}i:1;a:2:{s:3:"idd";s:1:"2";s:3:"cnt";s:1:"1";}}}i:9;a:3:{s:8:"sphinxql";s:50:"select id idd, weight() cnt from dist3 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:3:"idd";s:1:"1";s:3:"cnt";s:1:"1";}i:1;a:2:{s:3:"idd";s:1:"2";s:3:"cnt";s:1:"1";}}}i:10;a:3:{s:8:"sphinxql";s:69:"select count(*) cnt, count (distinct tag) tg from dist_no group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:3:"cnt";s:1:"2";s:2:"tg";s:1:"1";}i:1;a:2:{s:3:"cnt";s:1:"1";s:2:"tg";s:1:"1";}}}i:11;a:3:{s:8:"sphinxql";s:67:"select count(*) cnt, count (distinct tag) tg from dist0 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:3:"cnt";s:1:"2";s:2:"tg";s:1:"1";}i:1;a:2:{s:3:"cnt";s:1:"1";s:2:"tg";s:1:"1";}}}i:12;a:3:{s:8:"sphinxql";s:67:"select count(*) cnt, count (distinct tag) tg from dist1 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:3:"cnt";s:1:"2";s:2:"tg";s:1:"2";}i:1;a:2:{s:3:"cnt";s:1:"1";s:2:"tg";s:1:"1";}}}i:13;a:2:{s:8:"sphinxql";s:67:"select count(*) cnt, count (distinct tag) tg from dist2 group by gr";s:10:"total_rows";i:0;}i:14;a:2:{s:8:"sphinxql";s:67:"select count(*) cnt, count (distinct tag) tg from dist3 group by gr";s:10:"total_rows";i:0;}i:15;a:3:{s:8:"sphinxql";s:48:"select id, tag from dist_no where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";}i:1;a:2:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";}}}i:16;a:3:{s:8:"sphinxql";s:46:"select id, tag from dist0 where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";}i:1;a:2:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";}i:2;a:2:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";}}}i:17;a:3:{s:8:"sphinxql";s:46:"select id, tag from dist1 where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";}i:2;a:2:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";}}}i:18;a:3:{s:8:"sphinxql";s:46:"select id, tag from dist2 where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";}i:2;a:2:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";}}}i:19;a:3:{s:8:"sphinxql";s:46:"select id, tag from dist3 where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:2:"id";s:1:"3";s:3:"tag";s:1:"2";}i:1;a:2:{s:2:"id";s:1:"1";s:3:"tag";s:1:"2";}i:2;a:2:{s:2:"id";s:1:"2";s:3:"tag";s:1:"2";}}}i:20;a:3:{s:8:"sphinxql";s:52:"select id idd, tag from dist_no where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:3:"idd";s:1:"1";s:3:"tag";s:1:"2";}i:1;a:2:{s:3:"idd";s:1:"2";s:3:"tag";s:1:"2";}i:2;a:2:{s:3:"idd";s:1:"3";s:3:"tag";s:1:"2";}}}i:21;a:3:{s:8:"sphinxql";s:50:"select id idd, tag from dist0 where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:3:"idd";s:1:"1";s:3:"tag";s:1:"2";}i:1;a:2:{s:3:"idd";s:1:"2";s:3:"tag";s:1:"2";}i:2;a:2:{s:3:"idd";s:1:"3";s:3:"tag";s:1:"2";}}}i:22;a:3:{s:8:"sphinxql";s:50:"select id idd, tag from dist1 where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:3:"idd";s:1:"3";s:3:"tag";s:1:"2";}i:1;a:2:{s:3:"idd";s:1:"1";s:3:"tag";s:1:"2";}i:2;a:2:{s:3:"idd";s:1:"2";s:3:"tag";s:1:"2";}}}i:23;a:3:{s:8:"sphinxql";s:50:"select id idd, tag from dist2 where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:3:"idd";s:1:"3";s:3:"tag";s:1:"2";}i:1;a:2:{s:3:"idd";s:1:"1";s:3:"tag";s:1:"2";}i:2;a:2:{s:3:"idd";s:1:"2";s:3:"tag";s:1:"2";}}}i:24;a:3:{s:8:"sphinxql";s:50:"select id idd, tag from dist3 where match ('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:2:{s:3:"idd";s:1:"3";s:3:"tag";s:1:"2";}i:1;a:2:{s:3:"idd";s:1:"1";s:3:"tag";s:1:"2";}i:2;a:2:{s:3:"idd";s:1:"2";s:3:"tag";s:1:"2";}}}i:25;a:3:{s:8:"sphinxql";s:36:"select gr, count(*) cnt from dist_no";s:5:"error";s:93:"index dist_no: invalid schema: Count(*) or @count is queried, but not available in the schema";s:5:"errno";i:1064;}i:26;a:3:{s:8:"sphinxql";s:34:"select gr, count(*) cnt from dist0";s:5:"error";s:93:"index dist_no: invalid schema: Count(*) or @count is queried, but not available in the schema";s:5:"errno";i:1064;}i:27;a:3:{s:8:"sphinxql";s:34:"select gr, count(*) cnt from dist1";s:5:"error";s:95:"index idx1,idx2: invalid schema: Count(*) or @count is queried, but not available in the schema";s:5:"errno";i:1064;}i:28;a:3:{s:8:"sphinxql";s:39:"select gr from dist_no where count(*)=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:29;a:3:{s:8:"sphinxql";s:37:"select gr from dist_no where @count=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:30;a:3:{s:8:"sphinxql";s:39:"select gr from dist_no where weight()=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:31;a:3:{s:8:"sphinxql";s:38:"select gr from dist_no where @weight=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:32;a:3:{s:8:"sphinxql";s:37:"select gr from dist0 where count(*)=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:33;a:3:{s:8:"sphinxql";s:35:"select gr from dist0 where @count=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:34;a:3:{s:8:"sphinxql";s:37:"select gr from dist0 where weight()=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:35;a:3:{s:8:"sphinxql";s:36:"select gr from dist0 where @weight=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:36;a:3:{s:8:"sphinxql";s:37:"select gr from dist1 where count(*)=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:37;a:3:{s:8:"sphinxql";s:35:"select gr from dist1 where @count=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:38;a:3:{s:8:"sphinxql";s:37:"select gr from dist1 where weight()=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:39;a:3:{s:8:"sphinxql";s:36:"select gr from dist1 where @weight=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:40;a:3:{s:8:"sphinxql";s:37:"select gr from dist2 where count(*)=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:41;a:3:{s:8:"sphinxql";s:35:"select gr from dist2 where @count=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:42;a:3:{s:8:"sphinxql";s:37:"select gr from dist2 where weight()=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:43;a:3:{s:8:"sphinxql";s:36:"select gr from dist2 where @weight=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:44;a:3:{s:8:"sphinxql";s:37:"select gr from dist3 where count(*)=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:45;a:3:{s:8:"sphinxql";s:35:"select gr from dist3 where @count=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:46;a:3:{s:8:"sphinxql";s:37:"select gr from dist3 where weight()=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:47;a:3:{s:8:"sphinxql";s:36:"select gr from dist3 where @weight=1";s:5:"error";s:58:"sphinxql: Aggregates in 'where' clause prohibited near '1'";s:5:"errno";i:1064;}i:48;a:3:{s:8:"sphinxql";s:47:"select @id idd from dist_no where match('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:3:"idd";s:1:"1";}i:1;a:1:{s:3:"idd";s:1:"2";}i:2;a:1:{s:3:"idd";s:1:"3";}}}i:49;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:50;a:3:{s:8:"sphinxql";s:42:"select @count cnt from dist_no group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"2";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:51;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:52;a:3:{s:8:"sphinxql";s:43:"select @weight cnt from dist_no group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"1";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:53;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:54;a:3:{s:8:"sphinxql";s:45:"select @id idd from dist0 where match('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:3:"idd";s:1:"1";}i:1;a:1:{s:3:"idd";s:1:"2";}i:2;a:1:{s:3:"idd";s:1:"3";}}}i:55;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:56;a:3:{s:8:"sphinxql";s:40:"select @count cnt from dist0 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"2";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:57;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:58;a:3:{s:8:"sphinxql";s:41:"select @weight cnt from dist0 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"1";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:59;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:60;a:3:{s:8:"sphinxql";s:45:"select @id idd from dist1 where match('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:3:"idd";s:1:"3";}i:1;a:1:{s:3:"idd";s:1:"1";}i:2;a:1:{s:3:"idd";s:1:"2";}}}i:61;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:62;a:3:{s:8:"sphinxql";s:40:"select @count cnt from dist1 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"2";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:63;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:64;a:3:{s:8:"sphinxql";s:41:"select @weight cnt from dist1 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"1";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:65;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:66;a:3:{s:8:"sphinxql";s:45:"select @id idd from dist2 where match('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:3:"idd";s:1:"3";}i:1;a:1:{s:3:"idd";s:1:"1";}i:2;a:1:{s:3:"idd";s:1:"2";}}}i:67;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:68;a:3:{s:8:"sphinxql";s:40:"select @count cnt from dist2 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"2";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:69;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:70;a:3:{s:8:"sphinxql";s:41:"select @weight cnt from dist2 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"1";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:71;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:72;a:3:{s:8:"sphinxql";s:45:"select @id idd from dist3 where match('test')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:1:{s:3:"idd";s:1:"3";}i:1;a:1:{s:3:"idd";s:1:"1";}i:2;a:1:{s:3:"idd";s:1:"2";}}}i:73;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:74;a:3:{s:8:"sphinxql";s:40:"select @count cnt from dist3 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"2";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:75;a:3:{s:8:"sphinxql";s:13:"show warnings";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:3:{s:5:"Level";s:7:"warning";s:4:"Code";s:4:"1000";s:7:"Message";s:70:"Using the old-fashion @variables (@count, @weight, etc.) is deprecated";}}}i:76;a:3:{s:8:"sphinxql";s:41:"select @weight cnt from dist3 group by gr";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:1:{s:3:"cnt";s:1:"1";}i:1;a:1:{s:3:"cnt";s:1:"1";}}}i:77;a:3:{s:8:"sphinxql";s:53:"select @id idd, count(*) cnt from dist_no group by gr";s:5:"error";s:163:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ') cnt from dist_no group by gr'";s:5:"errno";i:1064;}i:78;a:3:{s:8:"sphinxql";s:50:"select id idd, @count cnt from dist_no group by gr";s:5:"error";s:168:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count cnt from dist_no group by gr'";s:5:"errno";i:1064;}i:79;a:3:{s:8:"sphinxql";s:53:"select id idd from dist_no where @count=1 group by gr";s:5:"error";s:153:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count=1 group by gr'";s:5:"errno";i:1064;}i:80;a:3:{s:8:"sphinxql";s:56:"select @id idd from dist_no where count(*)=1 group by gr";s:5:"error";s:148:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')=1 group by gr'";s:5:"errno";i:1064;}i:81;a:3:{s:8:"sphinxql";s:42:"select id idd from dist_no group by @count";s:5:"error";s:139:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count'";s:5:"errno";i:1064;}i:82;a:3:{s:8:"sphinxql";s:45:"select @id idd from dist_no group by count(*)";s:5:"error";s:134:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')'";s:5:"errno";i:1064;}i:83;a:3:{s:8:"sphinxql";s:51:"select @id idd, count(*) cnt from dist0 group by gr";s:5:"error";s:161:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ') cnt from dist0 group by gr'";s:5:"errno";i:1064;}i:84;a:3:{s:8:"sphinxql";s:48:"select id idd, @count cnt from dist0 group by gr";s:5:"error";s:166:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count cnt from dist0 group by gr'";s:5:"errno";i:1064;}i:85;a:3:{s:8:"sphinxql";s:51:"select id idd from dist0 where @count=1 group by gr";s:5:"error";s:153:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count=1 group by gr'";s:5:"errno";i:1064;}i:86;a:3:{s:8:"sphinxql";s:54:"select @id idd from dist0 where count(*)=1 group by gr";s:5:"error";s:148:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')=1 group by gr'";s:5:"errno";i:1064;}i:87;a:3:{s:8:"sphinxql";s:40:"select id idd from dist0 group by @count";s:5:"error";s:139:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count'";s:5:"errno";i:1064;}i:88;a:3:{s:8:"sphinxql";s:43:"select @id idd from dist0 group by count(*)";s:5:"error";s:134:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')'";s:5:"errno";i:1064;}i:89;a:3:{s:8:"sphinxql";s:51:"select @id idd, count(*) cnt from dist1 group by gr";s:5:"error";s:161:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ') cnt from dist1 group by gr'";s:5:"errno";i:1064;}i:90;a:3:{s:8:"sphinxql";s:48:"select id idd, @count cnt from dist1 group by gr";s:5:"error";s:166:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count cnt from dist1 group by gr'";s:5:"errno";i:1064;}i:91;a:3:{s:8:"sphinxql";s:51:"select id idd from dist1 where @count=1 group by gr";s:5:"error";s:153:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count=1 group by gr'";s:5:"errno";i:1064;}i:92;a:3:{s:8:"sphinxql";s:54:"select @id idd from dist1 where count(*)=1 group by gr";s:5:"error";s:148:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')=1 group by gr'";s:5:"errno";i:1064;}i:93;a:3:{s:8:"sphinxql";s:40:"select id idd from dist1 group by @count";s:5:"error";s:139:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count'";s:5:"errno";i:1064;}i:94;a:3:{s:8:"sphinxql";s:43:"select @id idd from dist1 group by count(*)";s:5:"error";s:134:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')'";s:5:"errno";i:1064;}i:95;a:3:{s:8:"sphinxql";s:51:"select @id idd, count(*) cnt from dist2 group by gr";s:5:"error";s:161:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ') cnt from dist2 group by gr'";s:5:"errno";i:1064;}i:96;a:3:{s:8:"sphinxql";s:48:"select id idd, @count cnt from dist2 group by gr";s:5:"error";s:166:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count cnt from dist2 group by gr'";s:5:"errno";i:1064;}i:97;a:3:{s:8:"sphinxql";s:51:"select id idd from dist2 where @count=1 group by gr";s:5:"error";s:153:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count=1 group by gr'";s:5:"errno";i:1064;}i:98;a:3:{s:8:"sphinxql";s:54:"select @id idd from dist2 where count(*)=1 group by gr";s:5:"error";s:148:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')=1 group by gr'";s:5:"errno";i:1064;}i:99;a:3:{s:8:"sphinxql";s:40:"select id idd from dist2 group by @count";s:5:"error";s:139:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count'";s:5:"errno";i:1064;}i:100;a:3:{s:8:"sphinxql";s:43:"select @id idd from dist2 group by count(*)";s:5:"error";s:134:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')'";s:5:"errno";i:1064;}i:101;a:3:{s:8:"sphinxql";s:51:"select @id idd, count(*) cnt from dist3 group by gr";s:5:"error";s:161:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ') cnt from dist3 group by gr'";s:5:"errno";i:1064;}i:102;a:3:{s:8:"sphinxql";s:48:"select id idd, @count cnt from dist3 group by gr";s:5:"error";s:166:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count cnt from dist3 group by gr'";s:5:"errno";i:1064;}i:103;a:3:{s:8:"sphinxql";s:51:"select id idd from dist3 where @count=1 group by gr";s:5:"error";s:153:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count=1 group by gr'";s:5:"errno";i:1064;}i:104;a:3:{s:8:"sphinxql";s:54:"select @id idd from dist3 where count(*)=1 group by gr";s:5:"error";s:148:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')=1 group by gr'";s:5:"errno";i:1064;}i:105;a:3:{s:8:"sphinxql";s:40:"select id idd from dist3 group by @count";s:5:"error";s:139:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near '@count'";s:5:"errno";i:1064;}i:106;a:3:{s:8:"sphinxql";s:43:"select @id idd from dist3 group by count(*)";s:5:"error";s:134:"sphinxql: Mixing the old-fashion internal vars (@id, @count, @weight) with new acronyms like count(*), weight() is prohibited near ')'";s:5:"errno";i:1064;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_171/test.xml b/coreseek/csft-4.1/test/test_171/test.xml new file mode 100755 index 0000000..94f0a43 --- /dev/null +++ b/coreseek/csft-4.1/test/test_171/test.xml @@ -0,0 +1,262 @@ + + +new and old syntax for id, count, weight, count distinct + +indexer +{ + mem_limit = 28M +} + +searchd +{ + + compat_sphinxql_magics = 0 + workers = threads +} + +source auth +{ + type = mysql + +} + +source src : auth +{ + sql_query = SELECT id, tag, gr, text FROM test_table WHERE id<4 + sql_query_pre = SET NAMES UTF8 + sql_attr_uint = tag + sql_attr_uint = gr +} + +source src1 : src +{ + sql_query = SELECT id, tag, gr, text FROM test_table WHERE id<3 +} + +source src2 : src +{ + sql_query = SELECT id, tag, gr, text FROM test_table WHERE id=3 +} + +index dist_no +{ + source = src + path = /idx + docinfo = extern + charset_type = utf-8 + min_word_len = 1 +} + +index idx1 : dist_no +{ + source = src1 + path = /idx1 +} + +index idx2 : dist_no +{ + source = src2 + path = /idx2 +} + + +index dist0 +{ + type = distributed + local = dist_no + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist1 +{ + type = distributed + local = idx1 + local = idx2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist2 +{ + type = distributed + agent = :idx1 + local = idx2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + +index dist3 +{ + type = distributed + local = idx1 + agent = :idx2 + agent_connect_timeout = 1000 + agent_query_timeout = 3000 +} + + + + + + + +select gr, count(*) cnt from dist_no group by gr +select gr, count(*) cnt from dist0 group by gr +select gr, count(*) cnt from dist1 group by gr +select gr, count(*) cnt from dist2 group by gr +select gr, count(*) cnt from dist3 group by gr + + +select id idd, weight() cnt from dist_no group by gr +select id idd, weight() cnt from dist0 group by gr +select id idd, weight() cnt from dist1 group by gr +select id idd, weight() cnt from dist2 group by gr +select id idd, weight() cnt from dist3 group by gr + + +select count(*) cnt, count (distinct tag) tg from dist_no group by gr +select count(*) cnt, count (distinct tag) tg from dist0 group by gr +select count(*) cnt, count (distinct tag) tg from dist1 group by gr +select count(*) cnt, count (distinct tag) tg from dist2 group by gr +select count(*) cnt, count (distinct tag) tg from dist3 group by gr + + +select id, tag from dist_no where match ('test') +select id, tag from dist0 where match ('test') +select id, tag from dist1 where match ('test') +select id, tag from dist2 where match ('test') +select id, tag from dist3 where match ('test') + + +select id idd, tag from dist_no where match ('test') +select id idd, tag from dist0 where match ('test') +select id idd, tag from dist1 where match ('test') +select id idd, tag from dist2 where match ('test') +select id idd, tag from dist3 where match ('test') + + +select gr, count(*) cnt from dist_no +select gr, count(*) cnt from dist0 +select gr, count(*) cnt from dist1 + + + + +select gr from dist_no where count(*)=1 +select gr from dist_no where @count=1 +select gr from dist_no where weight()=1 +select gr from dist_no where @weight=1 +select gr from dist0 where count(*)=1 +select gr from dist0 where @count=1 +select gr from dist0 where weight()=1 +select gr from dist0 where @weight=1 +select gr from dist1 where count(*)=1 +select gr from dist1 where @count=1 +select gr from dist1 where weight()=1 +select gr from dist1 where @weight=1 +select gr from dist2 where count(*)=1 +select gr from dist2 where @count=1 +select gr from dist2 where weight()=1 +select gr from dist2 where @weight=1 +select gr from dist3 where count(*)=1 +select gr from dist3 where @count=1 +select gr from dist3 where weight()=1 +select gr from dist3 where @weight=1 + + +select @id idd from dist_no where match('test') +show warnings +select @count cnt from dist_no group by gr +show warnings +select @weight cnt from dist_no group by gr +show warnings +select @id idd from dist0 where match('test') +show warnings +select @count cnt from dist0 group by gr +show warnings +select @weight cnt from dist0 group by gr +show warnings +select @id idd from dist1 where match('test') +show warnings +select @count cnt from dist1 group by gr +show warnings +select @weight cnt from dist1 group by gr +show warnings +select @id idd from dist2 where match('test') +show warnings +select @count cnt from dist2 group by gr +show warnings +select @weight cnt from dist2 group by gr +show warnings +select @id idd from dist3 where match('test') +show warnings +select @count cnt from dist3 group by gr +show warnings +select @weight cnt from dist3 group by gr + + +select @id idd, count(*) cnt from dist_no group by gr +select id idd, @count cnt from dist_no group by gr +select id idd from dist_no where @count=1 group by gr +select @id idd from dist_no where count(*)=1 group by gr +select id idd from dist_no group by @count +select @id idd from dist_no group by count(*) +select @id idd, count(*) cnt from dist0 group by gr +select id idd, @count cnt from dist0 group by gr +select id idd from dist0 where @count=1 group by gr +select @id idd from dist0 where count(*)=1 group by gr +select id idd from dist0 group by @count +select @id idd from dist0 group by count(*) +select @id idd, count(*) cnt from dist1 group by gr +select id idd, @count cnt from dist1 group by gr +select id idd from dist1 where @count=1 group by gr +select @id idd from dist1 where count(*)=1 group by gr +select id idd from dist1 group by @count +select @id idd from dist1 group by count(*) +select @id idd, count(*) cnt from dist2 group by gr +select id idd, @count cnt from dist2 group by gr +select id idd from dist2 where @count=1 group by gr +select @id idd from dist2 where count(*)=1 group by gr +select id idd from dist2 group by @count +select @id idd from dist2 group by count(*) +select @id idd, count(*) cnt from dist3 group by gr +select id idd, @count cnt from dist3 group by gr +select id idd from dist3 where @count=1 group by gr +select @id idd from dist3 where count(*)=1 group by gr +select id idd from dist3 group by @count +select @id idd from dist3 group by count(*) + + + + +CREATE TABLE `test_table` ( + `id` int(11), + `tag` int(11), + `gr` int(11), + `text` varchar(255) NOT NULL +) + + + + +DROP TABLE IF EXISTS `test_table` + + + +SET NAMES utf8 + +INSERT INTO `test_table` VALUES +( 1, 2, 3, 'test'), +( 2, 2, 2, 'test'), +( 3, 2, 3, 'test'), +( 4, 2, 10, 'test'), +( 5, 2, 9, 'test'), +( 6, 2, 8, 'test'), +( 7, 2, 7, 'test'), +( 8, 2, 6, 'test'), +( 9, 2, 5, 'test'), +( 10, 2, 4, 'test') + + + diff --git a/coreseek/csft-4.1/test/test_172/model.bin b/coreseek/csft-4.1/test/test_172/model.bin new file mode 100755 index 0000000..1a3745e --- /dev/null +++ b/coreseek/csft-4.1/test/test_172/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:3:{i:0;a:3:{s:8:"sphinxql";s:85:"SELECT *, AVG(price) AS p FROM test GROUP BY gid ORDER BY p DESC option max_matches=2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:7:{s:2:"id";s:1:"4";s:6:"weight";s:1:"1";s:3:"gid";s:1:"3";s:5:"price";s:2:"30";s:1:"p";s:9:"30.000000";s:8:"@groupby";s:1:"3";s:6:"@count";s:1:"1";}i:1;a:7:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"gid";s:1:"2";s:5:"price";s:2:"15";s:1:"p";s:9:"15.000000";s:8:"@groupby";s:1:"2";s:6:"@count";s:1:"1";}}}i:1;a:3:{s:8:"sphinxql";s:84:"SELECT *, AVG(price) AS p FROM test GROUP BY gid ORDER BY p ASC option max_matches=2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:7:{s:2:"id";s:2:"10";s:6:"weight";s:1:"1";s:3:"gid";s:1:"5";s:5:"price";s:1:"1";s:1:"p";s:8:"1.000000";s:8:"@groupby";s:1:"5";s:6:"@count";s:1:"1";}i:1;a:7:{s:2:"id";s:2:"11";s:6:"weight";s:1:"1";s:3:"gid";s:1:"6";s:5:"price";s:1:"2";s:1:"p";s:8:"2.000000";s:8:"@groupby";s:1:"6";s:6:"@count";s:1:"1";}}}i:2;a:3:{s:8:"sphinxql";s:98:"SELECT *, AVG(price) AS p FROM test WHERE price>4 GROUP BY gid ORDER BY p ASC option max_matches=2";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:7:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"gid";s:1:"1";s:5:"price";s:1:"5";s:1:"p";s:8:"5.000000";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"2";}i:1;a:7:{s:2:"id";s:2:"14";s:6:"weight";s:1:"1";s:3:"gid";s:1:"9";s:5:"price";s:1:"5";s:1:"p";s:8:"5.000000";s:8:"@groupby";s:1:"9";s:6:"@count";s:1:"1";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_172/test.xml b/coreseek/csft-4.1/test/test_172/test.xml new file mode 100755 index 0000000..fd7967a --- /dev/null +++ b/coreseek/csft-4.1/test/test_172/test.xml @@ -0,0 +1,74 @@ + + + +AVG vs group sorting + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + sql_query = SELECT * FROM test_table + sql_attr_uint = gid + sql_attr_uint = price +} + +index test +{ + source = srctest + path = /test + docinfo = extern +} + + + +CREATE TABLE test_table +( + document_id INTEGER NOT NULL PRIMARY KEY, + body VARCHAR(255) NOT NULL, + gid INTEGER NOT NULL, + price INTEGER NOT NULL +) + + + +DROP TABLE IF EXISTS test_table + + + +INSERT INTO test_table VALUES +( 1, 'dummy', 1, 5 ), +( 2, 'dummy', 1, 5 ), +( 3, 'dummy', 2, 15 ), +( 4, 'dummy', 3, 30 ), +( 5, 'dummy', 4, 10 ), +( 6, 'dummy', 4, 10 ), +( 7, 'dummy', 4, 10 ), +( 8, 'dummy', 4, 10 ), +( 9, 'dummy', 4, 10 ), +( 10, 'dummy', 5, 1 ), +( 11, 'dummy', 6, 2 ), +( 12, 'dummy', 7, 3 ), +( 13, 'dummy', 8, 4 ), +( 14, 'dummy', 9, 5 ), +( 15, 'dummy', 10, 6 ) + + + +SELECT *, AVG(price) AS p FROM test GROUP BY gid ORDER BY p DESC option max_matches=2 +SELECT *, AVG(price) AS p FROM test GROUP BY gid ORDER BY p ASC option max_matches=2 +SELECT *, AVG(price) AS p FROM test WHERE price>4 GROUP BY gid ORDER BY p ASC option max_matches=2 + + + + diff --git a/coreseek/csft-4.1/test/test_173/model.bin b/coreseek/csft-4.1/test/test_173/model.bin new file mode 100755 index 0000000..e464310 --- /dev/null +++ b/coreseek/csft-4.1/test/test_173/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:3:{s:8:"sphinxql";s:37:"select attru, attru+attrs ss from idx";s:5:"error";s:90:"index idx: parse error: Sphinx expr: syntax error, unexpected TOK_ATTR_STRING near 'attrs'";s:5:"errno";i:1064;}i:1;a:3:{s:8:"sphinxql";s:38:"select attru, attru+attrs ss from idxx";s:5:"error";s:95:"index idx,idx1: parse error: Sphinx expr: syntax error, unexpected TOK_ATTR_STRING near 'attrs'";s:5:"errno";i:1064;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_173/test.xml b/coreseek/csft-4.1/test/test_173/test.xml new file mode 100755 index 0000000..9f16afa --- /dev/null +++ b/coreseek/csft-4.1/test/test_173/test.xml @@ -0,0 +1,77 @@ + + + +processing error messages from local agents + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + dist_threads = 3 +} + +source src +{ + type = mysql + + sql_attr_uint = attru + sql_attr_string = attrs + sql_query = SELECT * FROM test_table WHERE id BETWEEN $start AND $end + sql_query_range = SELECT 1,1 +} + +source src1: src +{ + sql_query_range = SELECT 2,2 +} + +index idx +{ + source = src + path = /main + charset_type = utf-8 +} + +index idx1 +{ + source = src1 + path = /main1 +} + +index idxx +{ + type = distributed + local = idx + local = idx1 +} + + + + +select attru, attru+attrs ss from idx +select attru, attru+attrs ss from idxx + + + +CREATE TABLE test_table +( + id INTEGER PRIMARY KEY NOT NULL, + attru INTEGER NOT NULL, + attrs VARCHAR(10) NOT NULL, + text VARCHAR(10) NOT NULL +) ENGINE=MYISAM + + + +insert into test_table values +( 1, 1, 'test', 'test' ), (2, 2, 'test', 'test') + + +DROP TABLE IF EXISTS test_table + + diff --git a/coreseek/csft-4.1/test/test_174/model.bin b/coreseek/csft-4.1/test/test_174/model.bin new file mode 100755 index 0000000..ffc4b32 --- /dev/null +++ b/coreseek/csft-4.1/test/test_174/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:7:"garbage";i:7;}s:7:"matches";a:1000:{i:1;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:2;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:3;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:4;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:5;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:6;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:7;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:8;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:9;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:10;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:11;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:12;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:13;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:14;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:15;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:16;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:17;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:18;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:19;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:20;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:21;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:22;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:23;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:24;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:25;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:26;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:27;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:28;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:29;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:30;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:31;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:32;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:33;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:34;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:35;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:36;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:37;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:38;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:39;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:40;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:41;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:42;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:43;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:44;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:45;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:46;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:47;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:48;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:49;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:50;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:51;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:52;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:53;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:54;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:55;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:56;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:57;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:58;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:59;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:60;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:61;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:62;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:63;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:64;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:65;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:66;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:67;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:68;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:69;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:70;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:71;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:72;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:73;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:74;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:75;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:76;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:77;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:78;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:79;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:80;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:81;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:82;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:83;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:84;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:85;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:86;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:87;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:88;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:89;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:90;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:91;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:92;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:93;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:94;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:95;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:96;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:97;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:98;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:99;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:100;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:101;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:102;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:103;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:104;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:105;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:106;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:107;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:108;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:109;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:110;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:111;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:112;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:113;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:114;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:115;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:116;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:117;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:118;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:119;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:120;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:121;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:122;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:123;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:124;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:125;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:126;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:127;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:128;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:129;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:130;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:131;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:132;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:133;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:134;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:135;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:136;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:137;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:138;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:139;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:140;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:141;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:142;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:143;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:144;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:145;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:146;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:147;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:148;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:149;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:150;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:151;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:152;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:153;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:154;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:155;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:156;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:157;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:158;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:159;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:160;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:161;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:162;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:163;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:164;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:165;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:166;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:167;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:168;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:169;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:170;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:171;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:172;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:173;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:174;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:175;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:176;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:177;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:178;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:179;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:180;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:181;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:182;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:183;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:184;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:185;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:186;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:187;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:188;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:189;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:190;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:191;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:192;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:193;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:194;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:195;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:196;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:197;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:198;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:199;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:200;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:201;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:202;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:203;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:204;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:205;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:206;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:207;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:208;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:209;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:210;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:211;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:212;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:213;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:214;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:215;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:216;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:217;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:218;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:219;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:220;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:221;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:222;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:223;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:224;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:225;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:226;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:227;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:228;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:229;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:230;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:231;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:232;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:233;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:234;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:235;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:236;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:237;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:238;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:239;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:240;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:241;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:242;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:243;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:244;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:245;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:246;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:247;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:248;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:249;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:250;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:251;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:252;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:253;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:254;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:255;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:256;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:257;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:258;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:259;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:260;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:261;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:262;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:263;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:264;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:265;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:266;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:267;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:268;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:269;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:270;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:271;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:272;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:273;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:274;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:275;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:276;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:277;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:278;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:279;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:280;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:281;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:282;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:283;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:284;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:285;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:286;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:287;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:288;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:289;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:290;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:291;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:292;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:293;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:294;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:295;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:296;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:297;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:298;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:299;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:300;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:301;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:302;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:303;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:304;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:305;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:306;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:307;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:308;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:309;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:310;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:311;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:312;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:313;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:314;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:315;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:316;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:317;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:318;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:319;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:320;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:321;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:322;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:323;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:324;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:325;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:326;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:327;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:328;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:329;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:330;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:331;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:332;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:333;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:334;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:335;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:336;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:337;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:338;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:339;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:340;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:341;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:342;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:343;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:344;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:345;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:346;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:347;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:348;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:349;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:350;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:351;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:352;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:353;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:354;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:355;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:356;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:357;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:358;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:359;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:360;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:361;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:362;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:363;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:364;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:365;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:366;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:367;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:368;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:369;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:370;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:371;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:372;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:373;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:374;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:375;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:376;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:377;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:378;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:379;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:380;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:381;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:382;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:383;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:384;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:385;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:386;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:387;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:388;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:389;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:390;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:391;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:392;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:393;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:394;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:395;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:396;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:397;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:398;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:399;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:400;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:401;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:402;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:403;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:404;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:405;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:406;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:407;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:408;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:409;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:410;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:411;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:412;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:413;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:414;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:415;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:416;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:417;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:418;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:419;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:420;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:421;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:422;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:423;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:424;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:425;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:426;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:427;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:428;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:429;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:430;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:431;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:432;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:433;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:434;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:435;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:436;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:437;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:438;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:439;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:440;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:441;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:442;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:443;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:444;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:445;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:446;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:447;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:448;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:449;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:450;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:451;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:452;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:453;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:454;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:455;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:456;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:457;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:458;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:459;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:460;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:461;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:462;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:463;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:464;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:465;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:466;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:467;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:468;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:469;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:470;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:471;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:472;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:473;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:474;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:475;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:476;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:477;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:478;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:479;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:480;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:481;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:482;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:483;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:484;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:485;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:486;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:487;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:488;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:489;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:490;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:491;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:492;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:493;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:494;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:495;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:496;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:497;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:498;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:499;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:500;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:501;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:502;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:503;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:504;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:505;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:506;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:507;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:508;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:509;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:510;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:511;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:512;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:513;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:514;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:515;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:516;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:517;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:518;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:519;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:520;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:521;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:522;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:523;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:524;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:525;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:526;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:527;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:528;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:529;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:530;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:531;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:532;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:533;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:534;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:535;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:536;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:537;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:538;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:539;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:540;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:541;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:542;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:543;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:544;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:545;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:546;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:547;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:548;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:549;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:550;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:551;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:552;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:553;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:554;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:555;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:556;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:557;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:558;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:559;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:560;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:561;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:562;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:563;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:564;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:565;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:566;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:567;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:568;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:569;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:570;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:571;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:572;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:573;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:574;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:575;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:576;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:577;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:578;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:579;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:580;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:581;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:582;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:583;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:584;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:585;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:586;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:587;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:588;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:589;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:590;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:591;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:592;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:593;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:594;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:595;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:596;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:597;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:598;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:599;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:600;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:601;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:602;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:603;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:604;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:605;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:606;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:607;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:608;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:609;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:610;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:611;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:612;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:613;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:614;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:615;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:616;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:617;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:618;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:619;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:620;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:621;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:622;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:623;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:624;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:625;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:626;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:627;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:628;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:629;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:630;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:631;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:632;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:633;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:634;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:635;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:636;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:637;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:638;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:639;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:640;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:641;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:642;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:643;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:644;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:645;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:646;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:647;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:648;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:649;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:650;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:651;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:652;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:653;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:654;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:655;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:656;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:657;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:658;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:659;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:660;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:661;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:662;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:663;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:664;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:665;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:666;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:667;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:668;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:669;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:670;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:671;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:672;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:673;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:674;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:675;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:676;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:677;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:678;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:679;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:680;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:681;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:682;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:683;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:684;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:685;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:686;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:687;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:688;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:689;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:690;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:691;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:692;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:693;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:694;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:695;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:696;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:697;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:698;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:699;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:700;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:701;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:702;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:703;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:704;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:705;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:706;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:707;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:708;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:709;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:710;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:711;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:712;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:713;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:714;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:715;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:716;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:717;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:718;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:719;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:720;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:721;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:722;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:723;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:724;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:725;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:726;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:727;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:728;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:729;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:730;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:731;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:732;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:733;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:734;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:735;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:736;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:737;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:738;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:739;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:740;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:741;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:742;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:743;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:744;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:745;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:746;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:747;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:748;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:749;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:750;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:751;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:752;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:753;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:754;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:755;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:756;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:757;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:758;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:759;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:760;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:761;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:762;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:763;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:764;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:765;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:766;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:767;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:768;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:769;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:770;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:771;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:772;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:773;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:774;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:775;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:776;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:777;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:778;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:779;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:780;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:781;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:782;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:783;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:784;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:785;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:786;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:787;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:788;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:789;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:790;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:791;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:792;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:793;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:794;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:795;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:796;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:797;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:798;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:799;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:800;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:801;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:802;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:803;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:804;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:805;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:806;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:807;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:808;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:809;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:810;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:811;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:812;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:813;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:814;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:815;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:816;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:817;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:818;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:819;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:820;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:821;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:822;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:823;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:824;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:825;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:826;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:827;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:828;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:829;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:830;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:831;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:832;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:833;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:834;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:835;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:836;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:837;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:838;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:839;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:840;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:841;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:842;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:843;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:844;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:845;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:846;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:847;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:848;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:849;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:850;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:851;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:852;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:853;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:854;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:855;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:856;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:857;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:858;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:859;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:860;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:861;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:862;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:863;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:864;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:865;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:866;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:867;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:868;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:869;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:870;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:871;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:872;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:873;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:874;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:875;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:876;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:877;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:878;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:879;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:880;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:881;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:882;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:883;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:884;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:885;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:886;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:887;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:888;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:889;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:890;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:891;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:892;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:893;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:894;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:895;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:896;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:897;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:898;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:899;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:900;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:901;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:902;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:903;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:904;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:905;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:906;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:907;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:908;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:909;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:910;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:911;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:912;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:913;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:914;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:915;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:916;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:917;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:918;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:919;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:920;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:921;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:922;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:923;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:924;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:925;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:926;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:927;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:928;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:929;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:930;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:931;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:932;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:933;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:934;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:935;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:936;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:937;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:938;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:939;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:940;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:941;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:942;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:943;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:944;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:945;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:946;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:947;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:948;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:949;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:950;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:951;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:952;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:953;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:954;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:955;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:956;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:957;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:958;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:959;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:960;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:961;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:962;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:963;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:964;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:965;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:966;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:967;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:968;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:969;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:970;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:971;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:972;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:973;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:974;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:975;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:976;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:977;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:978;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:979;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:980;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:981;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:982;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:983;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:984;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:985;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:986;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:987;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:988;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:989;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:990;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:991;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:992;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:993;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:994;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:995;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:996;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:997;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:998;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:999;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}i:1000;a:2:{s:6:"weight";s:4:"1272";s:5:"attrs";a:1:{s:7:"garbage";s:7:"garbage";}}}s:5:"total";s:4:"1000";s:11:"total_found";s:4:"1000";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"hello";a:2:{s:4:"docs";s:4:"1000";s:4:"hits";s:4:"1000";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"hello";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_174/readme.txt b/coreseek/csft-4.1/test/test_174/readme.txt new file mode 100755 index 0000000..7e132bb --- /dev/null +++ b/coreseek/csft-4.1/test/test_174/readme.txt @@ -0,0 +1 @@ +On some OS (e.g. openSuse 10.3 ) on some PHP versions (e.g. 5.2.11) fread works incorrect if third argument ($length) is more than 8192. diff --git a/coreseek/csft-4.1/test/test_174/test.xml b/coreseek/csft-4.1/test/test_174/test.xml new file mode 100755 index 0000000..dc1d532 --- /dev/null +++ b/coreseek/csft-4.1/test/test_174/test.xml @@ -0,0 +1,51 @@ + + + +php fread from socket test + + +indexer +{ + mem_limit = 32M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = select *, 'garbage' as garbage from test_table + sql_attr_string = garbage +} + +index test +{ + source = test + path = /test +} + + + +create table test_table +( + id int not null, + title varchar(255) not null +); + +drop table if exists test_table; + + + +hello + + + diff --git a/coreseek/csft-4.1/test/test_175/model.bin b/coreseek/csft-4.1/test/test_175/model.bin new file mode 100755 index 0000000..1d81a22 --- /dev/null +++ b/coreseek/csft-4.1/test/test_175/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:2:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:11;a:2:{s:6:"weight";s:4:"2269";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}i:10;a:2:{s:6:"weight";s:4:"1221";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"aaa";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:3:"515";}s:3:"bbb";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"6";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:9:"aaa | bbb";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:701;a:2:{s:6:"weight";s:4:"1500";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.002";s:5:"words";a:2:{s:3:"box";a:2:{s:4:"docs";s:3:"600";s:4:"hits";s:3:"600";}s:4:"good";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:17:"box SENTENCE good";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_175/test.xml b/coreseek/csft-4.1/test/test_175/test.xml new file mode 100755 index 0000000..4107ddb --- /dev/null +++ b/coreseek/csft-4.1/test/test_175/test.xml @@ -0,0 +1,88 @@ + + + +hitbuffer edge cases + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source test1 +{ + type = mysql + + sql_query = select * from test_table1 + sql_attr_uint = gid +} + +index test1 +{ + source = test1 + path = /test1 +} + +source test2 +{ + type = mysql + + sql_query = select * from test_table2 + sql_attr_uint = gid +} + +index test2 +{ + source = test2 + path = /test2 + docinfo = extern + html_strip = 1 + index_sp = 1 +} + + + +create table test_table1 +( + id int not null, + gid int not null, + title varchar(16384) not null +); + + +create table test_table2 +( + id int not null, + gid int not null, + title varchar(256) not null +); + +drop table if exists test_table1; +drop table if exists test_table2; + + + +aaa | bbb +box SENTENCE good + + + diff --git a/coreseek/csft-4.1/test/test_176/model.bin b/coreseek/csft-4.1/test/test_176/model.bin new file mode 100755 index 0000000..141e860 --- /dev/null +++ b/coreseek/csft-4.1/test/test_176/model.bin @@ -0,0 +1 @@ +a:2:{i:0;a:3:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:100;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"la";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"belette";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""la belette"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"la";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"belette";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:"ZONE:zoneB "la belette"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"la";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"belette";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:25:"ZONE:nonZone "la belette"";}}i:1;a:3:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:100;a:2:{s:6:"weight";s:4:"2500";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"la";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"belette";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:""la belette"";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"la";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"belette";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:23:"ZONE:zoneB "la belette"";}i:2;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:5:"total";s:1:"0";s:11:"total_found";s:1:"0";s:4:"time";s:5:"0.001";s:5:"words";a:2:{s:2:"la";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}s:7:"belette";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:25:"ZONE:nonZone "la belette"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_176/test.xml b/coreseek/csft-4.1/test/test_176/test.xml new file mode 100755 index 0000000..8b9b285 --- /dev/null +++ b/coreseek/csft-4.1/test/test_176/test.xml @@ -0,0 +1,60 @@ + + + +ZONE pushdown vs min_prefix_len + + +indexer +{ + mem_limit = 20M +} + +searchd +{ + + compat_sphinxql_magics = 0 + preopen_indexes = 0 +} + +source test +{ + type = mysql + + sql_query = select * from test_table + sql_attr_uint = gid +} + +index test +{ + source = test + path = /test + + html_strip = 1 + index_zones = zone* + dict = keywords + enable_star = 1 + + min_prefix_len = 0 + min_prefix_len = 1 + +} + + + +create table test_table +( + id int not null, + gid int not null, + title varchar(255) not null +); + +drop table if exists test_table; +J\'entends le loup et le renard chanter.' );]]> + + +"la belette" +ZONE:zoneB "la belette" +ZONE:nonZone "la belette" + + + diff --git a/coreseek/csft-4.1/test/test_177/model.bin b/coreseek/csft-4.1/test/test_177/model.bin new file mode 100755 index 0000000..b3519ad --- /dev/null +++ b/coreseek/csft-4.1/test/test_177/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:28:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:1;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:10:"eisenhower";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"eisenhower";}i:1;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"1";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:7:"petfood";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:7:"petfood";}i:2;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:2:{i:11;a:2:{s:6:"weight";s:4:"1677";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}i:13;a:2:{s:6:"weight";s:4:"1677";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:14:"70_129_148_165";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"2";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:14:"70_129_148_165";}i:3;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:3:{i:12;a:2:{s:6:"weight";s:4:"1648";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}i:15;a:2:{s:6:"weight";s:4:"1648";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}i:16;a:2:{s:6:"weight";s:4:"1648";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}}s:5:"total";s:1:"3";s:11:"total_found";s:1:"3";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:5:"c27e6";a:2:{s:4:"docs";s:1:"3";s:4:"hits";s:1:"3";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:5:"c27e6";}i:4;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:14;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"2";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:10:"2242647928";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:10:"2242647928";}i:5;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:21;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"r57rm9qgtx4e";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"r57rm9qgtx4e";}i:6;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:22;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"i59oqce31j1i";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"i59oqce31j1i";}i:7;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:23;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"3";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"wf68itlphvim";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"wf68itlphvim";}i:8;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:31;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"7mx9432vwcql";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"7mx9432vwcql";}i:9;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:32;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"7voy0zfvaxva";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"7voy0zfvaxva";}i:10;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:33;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"h9ws5m4gfju6";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"h9ws5m4gfju6";}i:11;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:34;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"4";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"kbnbi9uxnxun";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"kbnbi9uxnxun";}i:12;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:41;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"5";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"bx7ysl617uih";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"bx7ysl617uih";}i:13;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:42;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"5";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"veqihmlt2u94";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"veqihmlt2u94";}i:14;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:43;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"5";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"rbuslwua0rjw";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"rbuslwua0rjw";}i:15;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:44;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"5";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"iil5o9qal9zp";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"iil5o9qal9zp";}i:16;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:51;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"6";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"b4ps2tkcartn";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"b4ps2tkcartn";}i:17;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:52;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"6";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"ec3bedwxkjap";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"ec3bedwxkjap";}i:18;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:53;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"6";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"hcy80ejxaxy5";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"hcy80ejxaxy5";}i:19;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:54;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"6";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"zoplbj4l38ar";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"zoplbj4l38ar";}i:20;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:61;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"7";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"47m6max3ldms";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"47m6max3ldms";}i:21;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:62;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"7";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"btdgsp6fahbo";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"btdgsp6fahbo";}i:22;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:63;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"7";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"jx9t6gshfdb3";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"jx9t6gshfdb3";}i:23;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:64;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"7";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"0nqiwe8ap0nt";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"0nqiwe8ap0nt";}i:24;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:71;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"8";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"a4qrs2snufyd";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"a4qrs2snufyd";}i:25;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:72;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"8";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"dnvaj4d6w64n";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"dnvaj4d6w64n";}i:26;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:73;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"8";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"r9g3s3ry1snj";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"r9g3s3ry1snj";}i:27;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:3:"gid";i:1;}s:7:"matches";a:1:{i:74;a:2:{s:6:"weight";s:4:"1725";s:5:"attrs";a:1:{s:3:"gid";s:1:"8";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:5:"words";a:1:{s:12:"w6w9m94wxwja";a:2:{s:4:"docs";s:1:"1";s:4:"hits";s:1:"1";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:12:"w6w9m94wxwja";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_177/test.xml b/coreseek/csft-4.1/test/test_177/test.xml new file mode 100755 index 0000000..8183bb6 --- /dev/null +++ b/coreseek/csft-4.1/test/test_177/test.xml @@ -0,0 +1,129 @@ + + + +dict=keywords vs crc collisions + + +indexer +{ + mem_limit = 24M +} + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = select * from test_table + sql_attr_uint = gid +} + +index test +{ + source = test + path = /test + dict = keywords +} + + + +CREATE TABLE test_table +( + id INTEGER PRIMARY KEY NOT NULL, + gid INTEGER NOT NULL, + title VARCHAR(255) NOT NULL +); + +DROP TABLE IF EXISTS test_table; +INSERT INTO test_table VALUES + +( 1, 1, 'hello eisenhower' ), +( 2, 1, 'got petfood' ), + + +( 11, 2, '70_129_148_165' ), +( 12, 2, 'c27e6' ), +( 13, 2, '70_129_148_165' ), +( 14, 2, '2242647928' ), +( 15, 2, 'c27e6' ), +( 16, 2, 'c27e6' ), + + +( 21, 3, 'r57rm9qgtx4e' ), +( 22, 3, 'i59oqce31j1i' ), +( 23, 3, 'wf68itlphvim' ), + + +( 31, 4, '7mx9432vwcql' ), +( 32, 4, '7voy0zfvaxva' ), +( 33, 4, 'h9ws5m4gfju6' ), +( 34, 4, 'kbnbi9uxnxun' ), + + +( 41, 5, 'bx7ysl617uih' ), +( 42, 5, 'veqihmlt2u94' ), +( 43, 5, 'rbuslwua0rjw' ), +( 44, 5, 'iil5o9qal9zp' ), + + +( 51, 6, 'b4ps2tkcartn' ), +( 52, 6, 'ec3bedwxkjap' ), +( 53, 6, 'hcy80ejxaxy5' ), +( 54, 6, 'zoplbj4l38ar' ), + + +( 61, 7, '47m6max3ldms' ), +( 62, 7, 'btdgsp6fahbo' ), +( 63, 7, 'jx9t6gshfdb3' ), +( 64, 7, '0nqiwe8ap0nt' ), + + +( 71, 8, 'a4qrs2snufyd' ), +( 72, 8, 'dnvaj4d6w64n' ), +( 73, 8, 'r9g3s3ry1snj' ), +( 74, 8, 'w6w9m94wxwja' ) + + + +eisenhower +petfood + +70_129_148_165 +c27e6 +2242647928 + +r57rm9qgtx4e +i59oqce31j1i +wf68itlphvim + +7mx9432vwcql +7voy0zfvaxva +h9ws5m4gfju6 +kbnbi9uxnxun + +bx7ysl617uih +veqihmlt2u94 +rbuslwua0rjw +iil5o9qal9zp + +b4ps2tkcartn +ec3bedwxkjap +hcy80ejxaxy5 +zoplbj4l38ar + +47m6max3ldms +btdgsp6fahbo +jx9t6gshfdb3 +0nqiwe8ap0nt + +a4qrs2snufyd +dnvaj4d6w64n +r9g3s3ry1snj +w6w9m94wxwja + + + diff --git a/coreseek/csft-4.1/test/test_178/model.bin b/coreseek/csft-4.1/test/test_178/model.bin new file mode 100755 index 0000000..55065b8 --- /dev/null +++ b/coreseek/csft-4.1/test/test_178/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:10:{i:0;a:3:{s:8:"sphinxql";s:69:"CALL SNIPPETS('Check vs Checking', 'test', 'check', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:31:"Check vs Checking";}}}i:1;a:3:{s:8:"sphinxql";s:70:"CALL SNIPPETS('Check vs Checking', 'test', '=check', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:24:"Check vs Checking";}}}i:2;a:3:{s:8:"sphinxql";s:72:"CALL SNIPPETS('Check vs Checking', 'test', 'checking', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:31:"Check vs Checking";}}}i:3;a:3:{s:8:"sphinxql";s:73:"CALL SNIPPETS('Check vs Checking', 'test', '=checking', 1 AS query_mode )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:24:"Check vs Checking";}}}i:4;a:3:{s:8:"sphinxql";s:190:"CALL SNIPPETS('the time has come, the walrus said, to handle many things, including Check vs Checking, but not quite limited to', 'test', 'check', 1 AS query_mode, 2 AS around, 50 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:65:" ... things, including Check vs Checking, but ... ";}}}i:5;a:3:{s:8:"sphinxql";s:191:"CALL SNIPPETS('the time has come, the walrus said, to handle many things, including Check vs Checking, but not quite limited to', 'test', '=check', 1 AS query_mode, 2 AS around, 50 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:53:" ... things, including Check vs Checking ... ";}}}i:6;a:3:{s:8:"sphinxql";s:193:"CALL SNIPPETS('the time has come, the walrus said, to handle many things, including Check vs Checking, but not quite limited to', 'test', 'checking', 1 AS query_mode, 2 AS around, 50 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:65:" ... things, including Check vs Checking, but ... ";}}}i:7;a:3:{s:8:"sphinxql";s:194:"CALL SNIPPETS('the time has come, the walrus said, to handle many things, including Check vs Checking, but not quite limited to', 'test', '=checking', 1 AS query_mode, 2 AS around, 50 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:44:" ... Check vs Checking, but not ... ";}}}i:8;a:3:{s:8:"sphinxql";s:94:"CALL SNIPPETS('check vs checking fast path', 'tstar', 'checki*', 1 AS query_mode, 0 AS limit )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:34:"check vs checking fast path";}}}i:9;a:3:{s:8:"sphinxql";s:118:"CALL SNIPPETS('check vs checking regular path', 'tstar', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages )";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:1:{s:7:"snippet";s:37:"check vs checking regular path";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_178/test.xml b/coreseek/csft-4.1/test/test_178/test.xml new file mode 100755 index 0000000..53ee056 --- /dev/null +++ b/coreseek/csft-4.1/test/test_178/test.xml @@ -0,0 +1,54 @@ + + + +snippets vs index_exact_words + + +searchd +{ + +} + +source test +{ + type = mysql + + sql_query = SELECT 1, 'text'; +} + +index test +{ + source = test + path = /test + + charset_type = utf-8 + morphology = stem_en + index_exact_words = 1 +} + +index tstar : test +{ + path = /tstar + min_prefix_len = 1 + enable_star = 1 + morphology = stem_enru +} + + +select 1; + + +CALL SNIPPETS('Check vs Checking', 'test', 'check', 1 AS query_mode ) +CALL SNIPPETS('Check vs Checking', 'test', '=check', 1 AS query_mode ) +CALL SNIPPETS('Check vs Checking', 'test', 'checking', 1 AS query_mode ) +CALL SNIPPETS('Check vs Checking', 'test', '=checking', 1 AS query_mode ) +CALL SNIPPETS('the time has come, the walrus said, to handle many things, including Check vs Checking, but not quite limited to', 'test', 'check', 1 AS query_mode, 2 AS around, 50 AS limit ) +CALL SNIPPETS('the time has come, the walrus said, to handle many things, including Check vs Checking, but not quite limited to', 'test', '=check', 1 AS query_mode, 2 AS around, 50 AS limit ) +CALL SNIPPETS('the time has come, the walrus said, to handle many things, including Check vs Checking, but not quite limited to', 'test', 'checking', 1 AS query_mode, 2 AS around, 50 AS limit ) +CALL SNIPPETS('the time has come, the walrus said, to handle many things, including Check vs Checking, but not quite limited to', 'test', '=checking', 1 AS query_mode, 2 AS around, 50 AS limit ) + +CALL SNIPPETS('check vs checking fast path', 'tstar', 'checki*', 1 AS query_mode, 0 AS limit ) +CALL SNIPPETS('check vs checking regular path', 'tstar', 'checki*', 1 AS query_mode, 0 AS limit, 1 AS limit_passages ) + + + diff --git a/coreseek/csft-4.1/test/test_179/model.bin b/coreseek/csft-4.1/test/test_179/model.bin new file mode 100755 index 0000000..62e8c5b --- /dev/null +++ b/coreseek/csft-4.1/test/test_179/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:1:{i:0;a:72:{i:0;s:31:"query: "word" index: test_plain";i:1;s:49:" id: 2, weight: 1, gid: 2, @groupby: 2, @count: 2";i:2;s:49:" id: 1, weight: 1, gid: 1, @groupby: 1, @count: 1";i:3;s:31:"query: "word" index: test_plain";i:4;s:25:" id: 1, weight: 1, gid: 1";i:5;s:25:" id: 2, weight: 1, gid: 2";i:6;s:25:" id: 3, weight: 1, gid: 2";i:7;s:0:"";i:8;s:28:"query: "word" index: test_rt";i:9;s:49:" id: 5, weight: 1, gid: 2, @groupby: 2, @count: 2";i:10;s:49:" id: 4, weight: 1, gid: 1, @groupby: 1, @count: 1";i:11;s:28:"query: "word" index: test_rt";i:12;s:25:" id: 4, weight: 1, gid: 1";i:13;s:25:" id: 5, weight: 1, gid: 2";i:14;s:25:" id: 6, weight: 1, gid: 2";i:15;s:0:"";i:16;s:30:"query: "word" index: test_dist";i:17;s:49:" id: 8, weight: 1, gid: 2, @groupby: 2, @count: 2";i:18;s:49:" id: 7, weight: 1, gid: 1, @groupby: 1, @count: 1";i:19;s:30:"query: "word" index: test_dist";i:20;s:25:" id: 7, weight: 1, gid: 1";i:21;s:25:" id: 8, weight: 1, gid: 2";i:22;s:25:" id: 9, weight: 1, gid: 2";i:23;s:0:"";i:24;s:31:"query: "word" index: test_plain";i:25;s:49:" id: 2, weight: 1, gid: 2, @groupby: 2, @count: 2";i:26;s:49:" id: 1, weight: 1, gid: 1, @groupby: 1, @count: 1";i:27;s:28:"query: "word" index: test_rt";i:28;s:25:" id: 4, weight: 1, gid: 1";i:29;s:25:" id: 5, weight: 1, gid: 2";i:30;s:25:" id: 6, weight: 1, gid: 2";i:31;s:0:"";i:32;s:31:"query: "word" index: test_plain";i:33;s:49:" id: 2, weight: 1, gid: 2, @groupby: 2, @count: 2";i:34;s:49:" id: 1, weight: 1, gid: 1, @groupby: 1, @count: 1";i:35;s:30:"query: "word" index: test_dist";i:36;s:25:" id: 7, weight: 1, gid: 1";i:37;s:25:" id: 8, weight: 1, gid: 2";i:38;s:25:" id: 9, weight: 1, gid: 2";i:39;s:0:"";i:40;s:28:"query: "word" index: test_rt";i:41;s:49:" id: 5, weight: 1, gid: 2, @groupby: 2, @count: 2";i:42;s:49:" id: 4, weight: 1, gid: 1, @groupby: 1, @count: 1";i:43;s:30:"query: "word" index: test_dist";i:44;s:25:" id: 7, weight: 1, gid: 1";i:45;s:25:" id: 8, weight: 1, gid: 2";i:46;s:25:" id: 9, weight: 1, gid: 2";i:47;s:0:"";i:48;s:28:"query: "word" index: test_rt";i:49;s:49:" id: 5, weight: 1, gid: 2, @groupby: 2, @count: 2";i:50;s:49:" id: 4, weight: 1, gid: 1, @groupby: 1, @count: 1";i:51;s:31:"query: "word" index: test_plain";i:52;s:25:" id: 1, weight: 1, gid: 1";i:53;s:25:" id: 2, weight: 1, gid: 2";i:54;s:25:" id: 3, weight: 1, gid: 2";i:55;s:0:"";i:56;s:30:"query: "word" index: test_dist";i:57;s:49:" id: 8, weight: 1, gid: 2, @groupby: 2, @count: 2";i:58;s:49:" id: 7, weight: 1, gid: 1, @groupby: 1, @count: 1";i:59;s:31:"query: "word" index: test_plain";i:60;s:25:" id: 1, weight: 1, gid: 1";i:61;s:25:" id: 2, weight: 1, gid: 2";i:62;s:25:" id: 3, weight: 1, gid: 2";i:63;s:0:"";i:64;s:30:"query: "word" index: test_dist";i:65;s:49:" id: 8, weight: 1, gid: 2, @groupby: 2, @count: 2";i:66;s:49:" id: 7, weight: 1, gid: 1, @groupby: 1, @count: 1";i:67;s:28:"query: "word" index: test_rt";i:68;s:25:" id: 4, weight: 1, gid: 1";i:69;s:25:" id: 5, weight: 1, gid: 2";i:70;s:25:" id: 6, weight: 1, gid: 2";i:71;s:0:"";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_179/test.xml b/coreseek/csft-4.1/test/test_179/test.xml new file mode 100755 index 0000000..e7ce3e3 --- /dev/null +++ b/coreseek/csft-4.1/test/test_179/test.xml @@ -0,0 +1,141 @@ + + + +Multi queries + (plain|rt|dist)indexes + group by + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + workers = threads +} + +source test1 +{ + type = mysql + + sql_query = select * from test_table1 + sql_attr_uint = gid +} + +source test2 +{ + type = mysql + + sql_query = select * from test_table2 + sql_attr_uint = gid +} + +index test_plain +{ + source = test1 + path = /test_plain +} + +index test_plain_for_dist +{ + source = test2 + path = /test_plain_for_dist +} + +index test_rt +{ + type = rt + path = data/test_rt + rt_attr_uint = gid + rt_field = title +} + +index test_dist +{ + type = distributed + agent = :test_plain_for_dist +} + + + +CREATE TABLE test_table1 +( + id INTEGER PRIMARY KEY NOT NULL, + gid INTEGER NOT NULL, + title VARCHAR(255) NOT NULL +); + +DROP TABLE IF EXISTS test_table1; +INSERT INTO test_table1 VALUES ( 1, 1, 'word | 1' ); +INSERT INTO test_table1 VALUES ( 2, 2, 'word | 2' ); +INSERT INTO test_table1 VALUES ( 3, 2, 'word | 3' ); + + +CREATE TABLE test_table2 +( + id INTEGER PRIMARY KEY NOT NULL, + gid INTEGER NOT NULL, + title VARCHAR(255) NOT NULL +); + +DROP TABLE IF EXISTS test_table2; +INSERT INTO test_table2 VALUES ( 7, 1, 'word | 7' ); +INSERT INTO test_table2 VALUES ( 8, 2, 'word | 8' ); +INSERT INTO test_table2 VALUES ( 9, 2, 'word | 9' ); + +SetGroupBy ( "gid", SPH_GROUPBY_ATTR ); + $client->AddQuery ( $query, $index1 ); + + $client->ResetGroupBy(); + $client->AddQuery ( $query, $index2 ); + + $sphinxql = @mysql_connect ( sprintf ( "%s:%s", $sd_address, $sd_sphinxql_port ) ); + @mysql_query ( "DELETE FROM test_rt" ); + @mysql_query ( "INSERT INTO test_rt ( id, gid, title ) VALUES ( 4, 1, \'word | 4\' )" ); + @mysql_query ( "INSERT INTO test_rt ( id, gid, title ) VALUES ( 5, 2, \'word | 5\' )" ); + @mysql_query ( "INSERT INTO test_rt ( id, gid, title ) VALUES ( 6, 2, \'word | 6\' )" ); + + $res = $client->RunQueries(); + + $query_res = $res[0]; + { + $results[] = sprintf ( "query: \"%s\" index: %s", $query, $index1 ); + foreach ( $query_res["matches"] as $match ) + $results[] = sprintf ( "\tid: %d, weight: %d, gid: %d, @groupby: %d, @count: %d", + $match["id"], $match["weight"], $match["attrs"]["gid"], $match["attrs"]["@groupby"], $match["attrs"]["@count"] ); + } + $query_res = $res[1]; + { + $results[] = sprintf ( "query: \"%s\" index: %s", $query, $index2 ); + foreach ( $query_res["matches"] as $match ) + $results[] = sprintf ( "\tid: %d, weight: %d, gid: %d", + $match["id"], $match["weight"], $match["attrs"]["gid"] ); + } + $results[] = ""; +} +' ); + + +$client->SetArrayResult(true); + +global $sd_address, $sd_sphinxql_port; + +$run_subtest ( $client, "test_plain", "test_plain", $results, $sd_address, $sd_sphinxql_port ); +$run_subtest ( $client, "test_rt", "test_rt", $results, $sd_address, $sd_sphinxql_port ); +$run_subtest ( $client, "test_dist", "test_dist", $results, $sd_address, $sd_sphinxql_port ); + +$run_subtest ( $client, "test_plain", "test_rt", $results, $sd_address, $sd_sphinxql_port ); +$run_subtest ( $client, "test_plain", "test_dist", $results, $sd_address, $sd_sphinxql_port ); +$run_subtest ( $client, "test_rt", "test_dist", $results, $sd_address, $sd_sphinxql_port ); +$run_subtest ( $client, "test_rt", "test_plain", $results, $sd_address, $sd_sphinxql_port ); +$run_subtest ( $client, "test_dist", "test_plain", $results, $sd_address, $sd_sphinxql_port ); +$run_subtest ( $client, "test_dist", "test_rt", $results, $sd_address, $sd_sphinxql_port ); +]]> + + \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_180/model.bin b/coreseek/csft-4.1/test/test_180/model.bin new file mode 100755 index 0000000..5cd55c1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_180/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:22:{i:0;a:2:{s:8:"sphinxql";s:85:"insert into rt1 (id, idd, str1, mva1, body) values ( 1, 1, '', ( 100, 10, 1), 'the' )";s:14:"total_affected";i:1;}i:1;a:2:{s:8:"sphinxql";s:85:"insert into rt1 (id, idd, str1, mva2, body) values ( 2, 2, '', ( 11, 13, 12), 'the' )";s:14:"total_affected";i:1;}i:2;a:3:{s:8:"sphinxql";s:31:"select * from rt1 where mva1>12";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";}}}i:3;a:3:{s:8:"sphinxql";s:50:"select * from rt1 where match ('the') and mva1>12";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1356";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";}}}i:4;a:3:{s:8:"sphinxql";s:31:"select * from rt1 where mva1=10";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";}}}i:5;a:3:{s:8:"sphinxql";s:50:"select * from rt1 where match ('the') and mva1=10";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1356";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";}}}i:6;a:3:{s:8:"sphinxql";s:33:"select * from rt1 where mva1!=100";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"2";s:4:"str1";s:0:"";s:4:"mva1";s:0:"";s:4:"mva2";s:8:"11,12,13";}}}i:7;a:3:{s:8:"sphinxql";s:52:"select * from rt1 where match ('the') and mva1!=100";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1356";s:3:"idd";s:1:"2";s:4:"str1";s:0:"";s:4:"mva1";s:0:"";s:4:"mva2";s:8:"11,12,13";}}}i:8;a:2:{s:8:"sphinxql";s:112:"insert into rt1 (id, idd, str1, mva1, mva2, body) values ( 3, 3, '', ( 200, 201, 210), (300, 301, 310), 'the' )";s:14:"total_affected";i:1;}i:9;a:3:{s:8:"sphinxql";s:35:"select * from rt1 order by mva1 asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"2";s:4:"str1";s:0:"";s:4:"mva1";s:0:"";s:4:"mva2";s:8:"11,12,13";}i:1;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";}}}i:10;a:3:{s:8:"sphinxql";s:55:"select * from rt1 where match ('the') order by mva1 asc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"2";s:4:"str1";s:0:"";s:4:"mva1";s:0:"";s:4:"mva2";s:8:"11,12,13";}i:1;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";}i:2;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";}}}i:11;a:3:{s:8:"sphinxql";s:36:"select * from rt1 order by mva1 desc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";}i:1;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";}i:2;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:1:"1";s:3:"idd";s:1:"2";s:4:"str1";s:0:"";s:4:"mva1";s:0:"";s:4:"mva2";s:8:"11,12,13";}}}i:12;a:3:{s:8:"sphinxql";s:56:"select * from rt1 where match ('the') order by mva1 desc";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:6:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";}i:1;a:6:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";}i:2;a:6:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"2";s:4:"str1";s:0:"";s:4:"mva1";s:0:"";s:4:"mva2";s:8:"11,12,13";}}}i:13;a:3:{s:8:"sphinxql";s:63:"select * from rt1 group by mva1 within group order by mva2 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:3:"100";s:6:"@count";s:1:"1";}i:1;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}i:2;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}i:3;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"210";s:6:"@count";s:1:"1";}i:4;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"201";s:6:"@count";s:1:"1";}i:5;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"200";s:6:"@count";s:1:"1";}}}i:14;a:3:{s:8:"sphinxql";s:83:"select * from rt1 where match ('the') group by mva1 within group order by mva2 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:3:"100";s:6:"@count";s:1:"1";}i:1;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}i:2;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}i:3;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"210";s:6:"@count";s:1:"1";}i:4;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"201";s:6:"@count";s:1:"1";}i:5;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1319";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"200";s:6:"@count";s:1:"1";}}}i:15;a:2:{s:8:"sphinxql";s:107:"insert into rt1 (id, idd, str1, mva1, mva2, body) values ( 4, 4, '', ( 200, 210), (100, 101, 102), 'the' )";s:14:"total_affected";i:1;}i:16;a:3:{s:8:"sphinxql";s:79:"select *, count (*) as c from rt1 group by mva1 within group order by mva2 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:3:"100";s:6:"@count";s:1:"1";}i:1;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}i:2;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}i:3;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"201";s:6:"@count";s:1:"1";}i:4;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"210";s:6:"@count";s:1:"2";}i:5;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"200";s:6:"@count";s:1:"2";}}}i:17;a:3:{s:8:"sphinxql";s:99:"select *, count (*) as c from rt1 where match ('the') group by mva1 within group order by mva2 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:3:"100";s:6:"@count";s:1:"1";}i:1;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}i:2;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}i:3;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"201";s:6:"@count";s:1:"1";}i:4;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"210";s:6:"@count";s:1:"2";}i:5;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"200";s:6:"@count";s:1:"2";}}}i:18;a:3:{s:8:"sphinxql";s:91:"select *, count (distinct mva2) as c from rt1 group by mva1 within group order by mva2 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:3:"100";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:1;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:2;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:3;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"201";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:4;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"210";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}i:5;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"200";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}}i:19;a:3:{s:8:"sphinxql";s:99:"select *, count (*) as c from rt1 where match ('the') group by mva1 within group order by mva2 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:3:"100";s:6:"@count";s:1:"1";}i:1;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";}i:2;a:8:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";}i:3;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"201";s:6:"@count";s:1:"1";}i:4;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"210";s:6:"@count";s:1:"2";}i:5;a:8:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"200";s:6:"@count";s:1:"2";}}}i:20;a:3:{s:8:"sphinxql";s:91:"select *, count (distinct mva1) as c from rt1 group by mva1 within group order by mva2 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:3:"100";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:1;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:2;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:1:"1";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:3;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"201";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:4;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"210";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"1";}i:5;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:1:"1";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"200";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"1";}}}i:21;a:3:{s:8:"sphinxql";s:111:"select *, count (distinct mva2) as c from rt1 where match ('the') group by mva1 within group order by mva2 desc";s:10:"total_rows";i:6;s:4:"rows";a:6:{i:0;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:3:"100";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:1;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:2:"10";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:2;a:9:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"1";s:4:"str1";s:0:"";s:4:"mva1";s:8:"1,10,100";s:4:"mva2";s:0:"";s:8:"@groupby";s:1:"1";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:3;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"201";s:6:"@count";s:1:"1";s:9:"@distinct";s:1:"1";}i:4;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"210";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}i:5;a:9:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1304";s:3:"idd";s:1:"3";s:4:"str1";s:0:"";s:4:"mva1";s:11:"200,201,210";s:4:"mva2";s:11:"300,301,310";s:8:"@groupby";s:3:"200";s:6:"@count";s:1:"2";s:9:"@distinct";s:1:"2";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_180/test.xml b/coreseek/csft-4.1/test/test_180/test.xml new file mode 100755 index 0000000..4410bc3 --- /dev/null +++ b/coreseek/csft-4.1/test/test_180/test.xml @@ -0,0 +1,60 @@ + + + +rt MVA + + + + + + + +searchd +{ + + workers = threads +} + +index rt1 +{ + type = rt + docinfo = extern + charset_type = sbcs + path = /rt1 + + rt_attr_uint = idd + rt_attr_string = str1 + rt_attr_multi = mva1 + rt_attr_multi = mva2 + rt_field = body +} + + + + + +insert into rt1 (id, idd, str1, mva1, body) values ( 1, 1, '', ( 100, 10, 1), 'the' ) +insert into rt1 (id, idd, str1, mva2, body) values ( 2, 2, '', ( 11, 13, 12), 'the' ) +select * from rt1 where mva1>12 +select * from rt1 where match ('the') and mva1>12 +select * from rt1 where mva1=10 +select * from rt1 where match ('the') and mva1=10 +select * from rt1 where mva1!=100 +select * from rt1 where match ('the') and mva1!=100 +insert into rt1 (id, idd, str1, mva1, mva2, body) values ( 3, 3, '', ( 200, 201, 210), (300, 301, 310), 'the' ) +select * from rt1 order by mva1 asc +select * from rt1 where match ('the') order by mva1 asc +select * from rt1 order by mva1 desc +select * from rt1 where match ('the') order by mva1 desc +select * from rt1 group by mva1 within group order by mva2 desc +select * from rt1 where match ('the') group by mva1 within group order by mva2 desc +insert into rt1 (id, idd, str1, mva1, mva2, body) values ( 4, 4, '', ( 200, 210), (100, 101, 102), 'the' ) +select *, count (*) as c from rt1 group by mva1 within group order by mva2 desc +select *, count (*) as c from rt1 where match ('the') group by mva1 within group order by mva2 desc +select *, count (distinct mva2) as c from rt1 group by mva1 within group order by mva2 desc +select *, count (*) as c from rt1 where match ('the') group by mva1 within group order by mva2 desc +select *, count (distinct mva1) as c from rt1 group by mva1 within group order by mva2 desc +select *, count (distinct mva2) as c from rt1 where match ('the') group by mva1 within group order by mva2 desc + + + diff --git a/coreseek/csft-4.1/test/test_181/model.bin b/coreseek/csft-4.1/test/test_181/model.bin new file mode 100755 index 0000000..ceda859 --- /dev/null +++ b/coreseek/csft-4.1/test/test_181/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:6:{i:0;a:13:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:5:"@expr";i:5;}s:7:"matches";a:2:{i:2;a:2:{s:6:"weight";s:2:"10";s:5:"attrs";a:1:{s:5:"@expr";d:10;}}i:1;a:2:{s:6:"weight";s:1:"3";s:5:"attrs";a:1:{s:5:"@expr";d:3;}}}s:5:"total";s:1:"2";s:11:"total_found";s:1:"2";s:4:"time";s:5:"0.001";s:5:"words";a:1:{s:4:"asdf";a:2:{s:4:"docs";s:1:"2";s:4:"hits";s:1:"4";}}s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:4:"asdf";}i:1;a:12:{s:5:"error";s:0:"";s:7:"warning";s:0:"";s:6:"status";i:0;s:6:"fields";a:1:{i:0;s:5:"title";}s:5:"attrs";a:1:{s:4:"attr";i:1;}s:7:"matches";a:1:{i:2;a:2:{s:6:"weight";s:2:"11";s:5:"attrs";a:1:{s:4:"attr";s:2:"22";}}}s:5:"total";s:1:"1";s:11:"total_found";s:1:"1";s:4:"time";s:5:"0.000";s:8:"resarray";i:0;s:8:"roundoff";i:0;s:5:"query";s:0:"";}i:2;a:2:{s:8:"sphinxql";s:62:"insert into test3 ( id, title ) values ( 1, 'asdf asdf asdf' )";s:14:"total_affected";i:1;}i:3;a:2:{s:8:"sphinxql";s:52:"insert into test4 ( id, title ) values ( 2, 'asdf' )";s:14:"total_affected";i:1;}i:4;a:3:{s:8:"sphinxql";s:122:"select *, @weight as skey from test3, test4 where match('asdf') option ranker=wordcount, index_weights=(test3=1, test4=10)";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:3:{s:2:"id";s:1:"2";s:6:"weight";s:2:"10";s:4:"skey";s:2:"10";}i:1;a:3:{s:2:"id";s:1:"1";s:6:"weight";s:1:"3";s:4:"skey";s:1:"3";}}}i:5;a:3:{s:8:"sphinxql";s:51:"select * from test3 option index_weights=(test3=10)";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:2:"10";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_181/test.xml b/coreseek/csft-4.1/test/test_181/test.xml new file mode 100755 index 0000000..ad382b1 --- /dev/null +++ b/coreseek/csft-4.1/test/test_181/test.xml @@ -0,0 +1,84 @@ + + + +index weights + sort by expression test (fullscan too) + + +indexer +{ + mem_limit = 32M +} + +searchd +{ + + workers = threads +} + +source test1 +{ + type = mysql + + sql_query = select * from test_table where id%2=0 + sql_attr_uint = attr +} + +index test1 +{ + source = test1 + path = /test1 +} + +source test2 +{ + type = mysql + + sql_query = select * from test_table where id%2=1 +} + +index test2 +{ + source = test2 + path = /test2 +} + +index test3 +{ + type = rt + path = /test3 + rt_field = title +} + +index test4 +{ + type = rt + path = /test4 + rt_field = title +} + + + +create table test_table +( + id int not null, + title varchar(255) not null, + attr int not null +); + +drop table if exists test_table; +insert into test_table values ( 1, 'asdf asdf asdf', 11 ); +insert into test_table values ( 2, 'asdf', 22 ); + + +asdf + + + + +insert into test3 ( id, title ) values ( 1, 'asdf asdf asdf' ) +insert into test4 ( id, title ) values ( 2, 'asdf' ) +select *, @weight as skey from test3, test4 where match('asdf') option ranker=wordcount, index_weights=(test3=1, test4=10) +select * from test3 option index_weights=(test3=10) + + + diff --git a/coreseek/csft-4.1/test/test_182/model.bin b/coreseek/csft-4.1/test/test_182/model.bin new file mode 100755 index 0000000..fc9b202 --- /dev/null +++ b/coreseek/csft-4.1/test/test_182/model.bin @@ -0,0 +1 @@ +a:6:{i:0;a:1:{i:0;a:13:{i:0;i:0;i:1;s:10:"started=ok";i:2;s:14:"1; 1; 1; 1,2; ";i:3;s:25:"2; 1; 1; 1002,1023,4456; ";i:4;s:25:"3; 1; 1; 1003,1008,1010; ";i:5;s:25:"4; 1; 1; 1004,1005,1006; ";i:6;s:7:"up.ok=2";i:7;i:0;i:8;s:10:"started=ok";i:9;s:16:"1; 1; 1; 2,3,4; ";i:10;s:25:"2; 1; 1; 1002,1023,4456; ";i:11;s:16:"3; 1; 1; 6,7,8; ";i:12;s:25:"4; 1; 1; 1004,1005,1006; ";}}i:1;a:1:{i:0;a:13:{i:0;i:0;i:1;s:10:"started=ok";i:2;s:14:"1; 1; 1; 1,2; ";i:3;s:25:"2; 1; 1; 1002,1023,4456; ";i:4;s:25:"3; 1; 1; 1003,1008,1010; ";i:5;s:25:"4; 1; 1; 1004,1005,1006; ";i:6;s:7:"up.ok=2";i:7;i:0;i:8;s:10:"started=ok";i:9;s:16:"1; 1; 1; 2,3,4; ";i:10;s:25:"2; 1; 1; 1002,1023,4456; ";i:11;s:16:"3; 1; 1; 6,7,8; ";i:12;s:25:"4; 1; 1; 1004,1005,1006; ";}}i:2;a:1:{i:0;a:13:{i:0;i:0;i:1;s:10:"started=ok";i:2;s:14:"1; 1; 1; 1,2; ";i:3;s:25:"2; 1; 1; 1002,1023,4456; ";i:4;s:25:"3; 1; 1; 1003,1008,1010; ";i:5;s:25:"4; 1; 1; 1004,1005,1006; ";i:6;s:7:"up.ok=2";i:7;i:0;i:8;s:10:"started=ok";i:9;s:16:"1; 1; 1; 2,3,4; ";i:10;s:25:"2; 1; 1; 1002,1023,4456; ";i:11;s:16:"3; 1; 1; 6,7,8; ";i:12;s:25:"4; 1; 1; 1004,1005,1006; ";}}i:3;a:1:{i:0;a:13:{i:0;i:0;i:1;s:10:"started=ok";i:2;s:14:"1; 1; 1; 1,2; ";i:3;s:25:"2; 1; 1; 1002,1023,4456; ";i:4;s:25:"3; 1; 1; 1003,1008,1010; ";i:5;s:25:"4; 1; 1; 1004,1005,1006; ";i:6;s:7:"up.ok=2";i:7;i:0;i:8;s:10:"started=ok";i:9;s:16:"1; 1; 1; 2,3,4; ";i:10;s:25:"2; 1; 1; 1002,1023,4456; ";i:11;s:16:"3; 1; 1; 6,7,8; ";i:12;s:25:"4; 1; 1; 1004,1005,1006; ";}}i:4;a:1:{i:0;a:13:{i:0;i:0;i:1;s:10:"started=ok";i:2;s:14:"1; 1; 1; 1,2; ";i:3;s:25:"2; 1; 1; 1002,1023,4456; ";i:4;s:25:"3; 1; 1; 1003,1008,1010; ";i:5;s:25:"4; 1; 1; 1004,1005,1006; ";i:6;s:7:"up.ok=2";i:7;i:0;i:8;s:10:"started=ok";i:9;s:16:"1; 1; 1; 2,3,4; ";i:10;s:25:"2; 1; 1; 1002,1023,4456; ";i:11;s:16:"3; 1; 1; 6,7,8; ";i:12;s:25:"4; 1; 1; 1004,1005,1006; ";}}i:5;a:1:{i:0;a:13:{i:0;i:0;i:1;s:10:"started=ok";i:2;s:14:"1; 1; 1; 1,2; ";i:3;s:25:"2; 1; 1; 1002,1023,4456; ";i:4;s:25:"3; 1; 1; 1003,1008,1010; ";i:5;s:25:"4; 1; 1; 1004,1005,1006; ";i:6;s:7:"up.ok=2";i:7;i:0;i:8;s:10:"started=ok";i:9;s:16:"1; 1; 1; 2,3,4; ";i:10;s:25:"2; 1; 1; 1002,1023,4456; ";i:11;s:16:"3; 1; 1; 6,7,8; ";i:12;s:25:"4; 1; 1; 1004,1005,1006; ";}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_182/test.xml b/coreseek/csft-4.1/test/test_182/test.xml new file mode 100755 index 0000000..297ebda --- /dev/null +++ b/coreseek/csft-4.1/test/test_182/test.xml @@ -0,0 +1,138 @@ + + + +attributes update vs workers vs API and SphinxQL + + + + + + + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + attr_flush_period = 10000 + + workers = threads + workers = prefork + workers = fork + +} + +source src +{ + type = mysql + + sql_query = SELECT id, text, 1 as gid, mva1 FROM test_table + sql_attr_uint = gid + + sql_attr_multi = uint mva1 from field mva1 + sql_attr_multi = bigint mva1 from field mva1 + +} + +index idx +{ + source = src + path = /idx + charset_type = utf-8 + docinfo = extern +} + + + +GetLastError()); + + global $sd_address, $sd_sphinxql_port; + $sockStr = "$sd_address:$sd_sphinxql_port"; + if ($sd_address == "localhost") + $sockStr = "127.0.0.1:$sd_sphinxql_port"; + $sock = @mysql_connect ($sockStr,"","", true ); + if ( $sock === false ) + { + $results[] = "error: can not connect to searchd: " . @mysql_errno ( $sock ) . " : " . @mysql_error ( $sock ); + return; + } + $res = @mysql_query ( "select * from idx" ); + while ($row = @mysql_fetch_array($res, MYSQL_ASSOC)) + { + $line = ""; + foreach ($row as $key => $value) + $line .= $value . "; "; + $results[] = $line; + } + + return $results; +'); + + +global $sd_address, $sd_sphinxql_port; +$sockStr = "$sd_address:$sd_sphinxql_port"; +if ($sd_address == "localhost") + $sockStr = "127.0.0.1:$sd_sphinxql_port"; +$sock = @mysql_connect ($sockStr,'','', true ); +if ( $sock === false ) +{ + $results[] = "error: can't connect to searchd: " . @mysql_errno ( $sock ) . " : " . @mysql_error ( $sock ); + return; +} +@mysql_query ( 'update idx set mva1=(3,2, 1, 2), mva1=(1, 2) where id=1' ); +@mysql_close($sock); + +$results = array_merge ( $results, $restartD ( $client ) ); + +$up = $client->UpdateAttributes ( "idx", array("mva1"), array(1=>array(array(2,3,4)), 3=>array(array(6,7,8))),true); +if ( $up >= 0 ) + $results[] = sprintf("up.ok=%d", $up); +else + $results[] = sprintf("up.err=%s", $client->GetLastError()); + +$results = array_merge ( $results, $restartD ( $client ) ); + +// final fixup; we don't want to compare times +for ( $i=0; $i + + +CREATE TABLE `test_table` ( + `id` int(11) DEFAULT NULL, + `text` varchar (255) NOT NULL, + `mva1` varchar(255) NOT NULL +) + + + +DROP TABLE IF EXISTS `test_table` + + + +INSERT INTO `test_table` (`id`, `text`, `mva1`) VALUES +(1, 'test1', '1001'), +(2, 'test2', '1002 1023 4456'), +(3, 'test3', '1003 1008 1010'), +(4, 'test4', '1004 1005 1006'); + + + diff --git a/coreseek/csft-4.1/test/test_183/model.bin b/coreseek/csft-4.1/test/test_183/model.bin new file mode 100755 index 0000000..a6cef31 --- /dev/null +++ b/coreseek/csft-4.1/test/test_183/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:21:{i:0;a:3:{s:8:"sphinxql";s:45:"select * from tests where match ('field_one')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"3500";}i:1;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"3500";}}}i:1;a:3:{s:8:"sphinxql";s:44:"select * from test where match ('field_one')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";}}}i:2;a:3:{s:8:"sphinxql";s:45:"select * from tests where match ('field_two')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1500";}}}i:3;a:3:{s:8:"sphinxql";s:44:"select * from test where match ('field_two')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1500";}}}i:4;a:3:{s:8:"sphinxql";s:50:"select * from tests where match ('@t21 field_one')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";}}}i:5;a:3:{s:8:"sphinxql";s:51:"select * from tests where match ('@t141 field_one')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";}}}i:6;a:3:{s:8:"sphinxql";s:49:"select * from test where match ('@t21 field_one')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}i:1;a:2:{s:2:"id";s:1:"3";s:6:"weight";s:4:"1500";}}}i:7;a:2:{s:8:"sphinxql";s:50:"select * from tests where match ('@t21 field_two')";s:10:"total_rows";i:0;}i:8;a:2:{s:8:"sphinxql";s:49:"select * from test where match ('@t21 field_two')";s:10:"total_rows";i:0;}i:9;a:2:{s:8:"sphinxql";s:53:"select * from tests where match ('@t141 field_three')";s:10:"total_rows";i:0;}i:10;a:2:{s:8:"sphinxql";s:52:"select * from test where match ('@t141 field_three')";s:10:"total_rows";i:0;}i:11;a:3:{s:8:"sphinxql";s:51:"select * from tests where match ('@t141 field_two')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1500";}}}i:12;a:3:{s:8:"sphinxql";s:50:"select * from test where match ('@t141 field_two')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"2";s:6:"weight";s:4:"1500";}}}i:13;a:3:{s:8:"sphinxql";s:51:"select * from tests where match ('@t241 field_two')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}}}i:14;a:3:{s:8:"sphinxql";s:50:"select * from test where match ('@t241 field_two')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"1500";}}}i:15;a:3:{s:8:"sphinxql";s:55:"select * from tests where match ('field_one field_two')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"4500";}}}i:16;a:3:{s:8:"sphinxql";s:54:"select * from test where match ('field_one field_two')";s:10:"total_rows";i:1;s:4:"rows";a:1:{i:0;a:2:{s:2:"id";s:1:"1";s:6:"weight";s:4:"4500";}}}i:17;a:2:{s:8:"sphinxql";s:61:"select * from tests where match ('field_one @t141 field_two')";s:10:"total_rows";i:0;}i:18;a:2:{s:8:"sphinxql";s:60:"select * from test where match ('field_one @t141 field_two')";s:10:"total_rows";i:0;}i:19;a:2:{s:8:"sphinxql";s:60:"select * from tests where match ('field_one @t21 field_two')";s:10:"total_rows";i:0;}i:20;a:2:{s:8:"sphinxql";s:59:"select * from test where match ('field_one @t21 field_two')";s:10:"total_rows";i:0;}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_183/test.xml b/coreseek/csft-4.1/test/test_183/test.xml new file mode 100755 index 0000000..846e412 --- /dev/null +++ b/coreseek/csft-4.1/test/test_183/test.xml @@ -0,0 +1,116 @@ + + + +More than 32 searchable fields + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + +} + +source srctest +{ + type = mysql + + + sql_query = SELECT * FROM test_table +} + +index test +{ + source = srctest + path = /test + charset_type = utf-8 +} +source srctests +{ + type = mysql + + + sql_query = SELECT document_id, t21, t141, t241 FROM test_table +} + +index tests +{ + source = srctests + path = /tests + charset_type = utf-8 +} + + + + +select * from tests where match ('field_one') +select * from test where match ('field_one') +select * from tests where match ('field_two') +select * from test where match ('field_two') +select * from tests where match ('@t21 field_one') +select * from tests where match ('@t141 field_one') +select * from test where match ('@t21 field_one') +select * from tests where match ('@t21 field_two') +select * from test where match ('@t21 field_two') +select * from tests where match ('@t141 field_three') +select * from test where match ('@t141 field_three') +select * from tests where match ('@t141 field_two') +select * from test where match ('@t141 field_two') +select * from tests where match ('@t241 field_two') +select * from test where match ('@t241 field_two') +select * from tests where match ('field_one field_two') +select * from test where match ('field_one field_two') +select * from tests where match ('field_one @t141 field_two') +select * from test where match ('field_one @t141 field_two') +select * from tests where match ('field_one @t21 field_two') +select * from test where match ('field_one @t21 field_two') + + + +CREATE TABLE `test_table` +( + `document_id` int(11) NOT NULL default '0', + `t1` varchar(5),`t2` varchar(5),`t3` varchar(5),`t4` varchar(5),`t5` varchar(5),`t6` varchar(5),`t7` varchar(5),`t8` varchar(5),`t9` varchar(5),`t10` varchar(5), + `t11` varchar(5),`t12` varchar(5),`t13` varchar(5),`t14` varchar(5),`t15` varchar(5),`t16` varchar(5),`t17` varchar(5),`t18` varchar(5),`t19` varchar(5),`t20` varchar(5), + `t21` varchar(25),`t22` varchar(5),`t23` varchar(5),`t24` varchar(5),`t25` varchar(5),`t26` varchar(5),`t27` varchar(5),`t28` varchar(5),`t29` varchar(5),`t30` varchar(5), + `t31` varchar(5),`t32` varchar(5),`t33` varchar(5),`t34` varchar(5),`t35` varchar(5),`t36` varchar(5),`t37` varchar(5),`t38` varchar(5),`t39` varchar(5),`t40` varchar(5), + `t41` varchar(5),`t42` varchar(5),`t43` varchar(5),`t44` varchar(5),`t45` varchar(5),`t46` varchar(5),`t47` varchar(5),`t48` varchar(5),`t49` varchar(5),`t50` varchar(5), + `t51` varchar(5),`t52` varchar(5),`t53` varchar(5),`t54` varchar(5),`t55` varchar(5),`t56` varchar(5),`t57` varchar(5),`t58` varchar(5),`t59` varchar(5),`t60` varchar(5), + `t61` varchar(5),`t62` varchar(5),`t63` varchar(5),`t64` varchar(5),`t65` varchar(5),`t66` varchar(5),`t67` varchar(5),`t68` varchar(5),`t69` varchar(5),`t70` varchar(5), + `t71` varchar(5),`t72` varchar(5),`t73` varchar(5),`t74` varchar(5),`t75` varchar(5),`t76` varchar(5),`t77` varchar(5),`t78` varchar(5),`t79` varchar(5),`t80` varchar(5), + `t81` varchar(5),`t82` varchar(5),`t83` varchar(5),`t84` varchar(5),`t85` varchar(5),`t86` varchar(5),`t87` varchar(5),`t88` varchar(5),`t89` varchar(5),`t90` varchar(5), + `t91` varchar(5),`t92` varchar(5),`t93` varchar(5),`t94` varchar(5),`t95` varchar(5),`t96` varchar(5),`t97` varchar(5),`t98` varchar(5),`t99` varchar(5),`t100` varchar(5), + `t101` varchar(5),`t102` varchar(5),`t103` varchar(5),`t104` varchar(5),`t105` varchar(5),`t106` varchar(5),`t107` varchar(5),`t108` varchar(5),`t109` varchar(5),`t110` varchar(5), + `t111` varchar(5),`t112` varchar(5),`t113` varchar(5),`t114` varchar(5),`t115` varchar(5),`t116` varchar(5),`t117` varchar(5),`t118` varchar(5),`t119` varchar(5),`t120` varchar(5), + `t121` varchar(5),`t122` varchar(5),`t123` varchar(5),`t124` varchar(5),`t125` varchar(5),`t126` varchar(5),`t127` varchar(5),`t128` varchar(5),`t129` varchar(5),`t130` varchar(5), + `t131` varchar(5),`t132` varchar(5),`t133` varchar(5),`t134` varchar(5),`t135` varchar(5),`t136` varchar(5),`t137` varchar(5),`t138` varchar(5),`t139` varchar(5),`t140` varchar(5), + `t141` varchar(25),`t142` varchar(5),`t143` varchar(5),`t144` varchar(5),`t145` varchar(5),`t146` varchar(5),`t147` varchar(5),`t148` varchar(5),`t149` varchar(5),`t150` varchar(5), + `t151` varchar(5),`t152` varchar(5),`t153` varchar(5),`t154` varchar(5),`t155` varchar(5),`t156` varchar(5),`t157` varchar(5),`t158` varchar(5),`t159` varchar(5),`t160` varchar(5), + `t161` varchar(5),`t162` varchar(5),`t163` varchar(5),`t164` varchar(5),`t165` varchar(5),`t166` varchar(5),`t167` varchar(5),`t168` varchar(5),`t169` varchar(5),`t170` varchar(5), + `t171` varchar(5),`t172` varchar(5),`t173` varchar(5),`t174` varchar(5),`t175` varchar(5),`t176` varchar(5),`t177` varchar(5),`t178` varchar(5),`t179` varchar(5),`t180` varchar(5), + `t181` varchar(5),`t182` varchar(5),`t183` varchar(5),`t184` varchar(5),`t185` varchar(5),`t186` varchar(5),`t187` varchar(5),`t188` varchar(5),`t189` varchar(5),`t190` varchar(5), + `t191` varchar(5),`t192` varchar(5),`t193` varchar(5),`t194` varchar(5),`t195` varchar(5),`t196` varchar(5),`t197` varchar(5),`t198` varchar(5),`t199` varchar(5),`t200` varchar(5), + `t201` varchar(5),`t202` varchar(5),`t203` varchar(5),`t204` varchar(5),`t205` varchar(5),`t206` varchar(5),`t207` varchar(5),`t208` varchar(5),`t209` varchar(5),`t210` varchar(5), + `t211` varchar(5),`t212` varchar(5),`t213` varchar(5),`t214` varchar(5),`t215` varchar(5),`t216` varchar(5),`t217` varchar(5),`t218` varchar(5),`t219` varchar(5),`t220` varchar(5), + `t221` varchar(5),`t222` varchar(5),`t223` varchar(5),`t224` varchar(5),`t225` varchar(5),`t226` varchar(5),`t227` varchar(5),`t228` varchar(5),`t229` varchar(5),`t230` varchar(5), + `t231` varchar(5),`t232` varchar(5),`t233` varchar(5),`t234` varchar(5),`t235` varchar(5),`t236` varchar(5),`t237` varchar(5),`t238` varchar(5),`t239` varchar(5),`t240` varchar(5), + `t241` varchar(25),`t242` varchar(5),`t243` varchar(5),`t244` varchar(5),`t245` varchar(5),`t246` varchar(5),`t247` varchar(5),`t248` varchar(5),`t249` varchar(5),`t250` varchar(5), + `t251` varchar(5),`t252` varchar(5),`t253` varchar(5),`t254` varchar(5),`t255` varchar(5),`t256` varchar(5) +); + + + +DROP TABLE IF EXISTS `test_table`; + + + +INSERT INTO `test_table` (document_id, t21, t141, t241) VALUES +( 1, 'field_one', 'field_one field_one', 'field_one field_two' ), +( 2, 'field_three', 'field_two', 'field_three' ), +( 3, 'field_one', 'field_one', 'field_one'); + + + diff --git a/coreseek/csft-4.1/test/test_184/model.bin b/coreseek/csft-4.1/test/test_184/model.bin new file mode 100755 index 0000000..3e0ec87 --- /dev/null +++ b/coreseek/csft-4.1/test/test_184/model.bin @@ -0,0 +1 @@ +a:1:{i:0;a:8:{i:0;a:3:{s:8:"sphinxql";s:72:"select id, gid, weight(), title from test where match('seven') and gid=1";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:1;a:3:{s:8:"sphinxql";s:113:"select id, gid, weight(), title from test where match('seven') and gid=1 option ranker=expr('sum(lcs)*1000+bm25')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:2;a:3:{s:8:"sphinxql";s:120:"select id, gid, weight(), title from test where match('seven') and gid=1 option ranker=expr('sum(300*lcs+700*lcs)+bm25')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1653";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:4:"1611";s:5:"title";s:25:"Multiplied by seven again";}}}i:3;a:3:{s:8:"sphinxql";s:154:"select id, gid, weight(), title from test where match('seven|lies') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"223";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:4;a:3:{s:8:"sphinxql";s:167:"select id, gid, weight(), title from test where match('seven seven seven seven') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"111";s:5:"title";s:25:"Multiplied by seven again";}}}i:5;a:3:{s:8:"sphinxql";s:156:"select id, gid, weight(), title from test where match('seven !se7en') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"102";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"112";s:5:"title";s:32:"Seven angels with seven trumpets";}i:2;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"111";s:5:"title";s:25:"Multiplied by seven again";}}}i:6;a:3:{s:8:"sphinxql";s:163:"select id, gid, weight(), title from test where match('seven !(angels !by)') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)')";s:10:"total_rows";i:2;s:4:"rows";a:2:{i:0;a:4:{s:2:"id";s:3:"100";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"212";s:5:"title";s:30:"Seven lies multiplied by seven";}i:1;a:4:{s:2:"id";s:3:"101";s:3:"gid";s:1:"1";s:8:"weight()";s:3:"211";s:5:"title";s:25:"Multiplied by seven again";}}}i:7;a:3:{s:8:"sphinxql";s:129:"select id, gid, weight(), title from test where match('lamb') and gid=2 option ranker=expr('doc_word_count*1000+sum(word_count)')";s:10:"total_rows";i:3;s:4:"rows";a:3:{i:0;a:4:{s:2:"id";s:3:"110";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1002";s:5:"title";s:12:"Mary vs Lamb";}i:1;a:4:{s:2:"id";s:3:"111";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:34:"Mary vs Lamb 2: Return of The Lamb";}i:2;a:4:{s:2:"id";s:3:"112";s:3:"gid";s:1:"2";s:8:"weight()";s:4:"1001";s:5:"title";s:32:"Mary vs Lamb 3: The Resurrection";}}}}} \ No newline at end of file diff --git a/coreseek/csft-4.1/test/test_184/test.xml b/coreseek/csft-4.1/test/test_184/test.xml new file mode 100755 index 0000000..cad5107 --- /dev/null +++ b/coreseek/csft-4.1/test/test_184/test.xml @@ -0,0 +1,78 @@ + + + +expression based ranker + + +indexer +{ + mem_limit = 16M +} + +searchd +{ + + compat_sphinxql_magics = 0 +} + +source test +{ + type = mysql + + sql_query = select * from test_table + sql_attr_uint = gid + sql_field_string = title +} + +index test +{ + source = test + path = /test +} + + + +CREATE TABLE test_table +( + id INTEGER PRIMARY KEY NOT NULL, + gid INTEGER NOT NULL, + title VARCHAR(255) NOT NULL, + content VARCHAR(255) NOT NULL +); + +DROP TABLE IF EXISTS test_table; + +INSERT INTO test_table VALUES +( 100, 1, 'Seven lies multiplied by seven', '' ), +( 101, 1, 'Multiplied by seven again', '' ), +( 102, 1, 'Seven angels with seven trumpets', '' ), +( 103, 1, 'Send them home on a morning train', '' ), +( 104, 1, 'Well who is that shouting?', '' ), +( 105, 1, 'John the Revelator', '' ), +( 106, 1, 'All he ever gives us is pain', '' ), +( 107, 1, 'Well who is that shouting?', '' ), +( 108, 1, 'John the Revelator', '' ), +( 109, 1, 'He should bow his head in shame', '' ), + +( 110, 2, 'Mary vs Lamb', 'Mary had a little lamb little lamb little lamb' ), +( 111, 2, 'Mary vs Lamb 2: Return of The Lamb', '...whose fleece was white as snow' ), +( 112, 2, 'Mary vs Lamb 3: The Resurrection', 'Snow! Bloody snow!' ) + + + + +select id, gid, weight(), title from test where match('seven') and gid=1 +select id, gid, weight(), title from test where match('seven') and gid=1 option ranker=expr('sum(lcs)*1000+bm25') +select id, gid, weight(), title from test where match('seven') and gid=1 option ranker=expr('sum(300*lcs+700*lcs)+bm25') + + +select id, gid, weight(), title from test where match('seven|lies') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)') +select id, gid, weight(), title from test where match('seven seven seven seven') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)') +select id, gid, weight(), title from test where match('seven !se7en') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)') +select id, gid, weight(), title from test where match('seven !(angels !by)') and gid=1 option ranker=expr('query_word_count*100+sum(word_count)*10+sum(hit_count)') + + +select id, gid, weight(), title from test where match('lamb') and gid=2 option ranker=expr('doc_word_count*1000+sum(word_count)') + + + diff --git a/coreseek/csft-4.1/test/ubertest.php b/coreseek/csft-4.1/test/ubertest.php new file mode 100755 index 0000000..151dded --- /dev/null +++ b/coreseek/csft-4.1/test/ubertest.php @@ -0,0 +1,288 @@ + [OPTIONS] [TESTDIRS ...]\n" ); + print ( "\nModes are:\n" ); + print ( "g, gen\t\t\tgenerate reference ('model') test results\n" ); + print ( "t, test\t\t\trun tests and compare results to reference\n" ); + print ( "qt\t\t\tsame as test, but skips user-configured slow tests\n" ); + print ( "\nOptions are:\n" ); + print ( "-u, --user \tuse 'USER' as MySQL user\n" ); + print ( "-p, --password \tuse 'PASS' as MySQL password\n" ); + print ( "-i, --indexer \tpath to indexer\n" ); + print ( "-s, --searchd \tpath to searchd\n" ); + print ( "--strict\t\tterminate on the first failure (for automatic runs)\n" ); + print ( "--strict-verbose\tterminate on the first failure and copy the last report to report.txt (for automatic runs)\n" ); + print ( "--managed\t\tdon't run searchd during test (for debugging)\n" ); + print ( "--skip-indexer\t\tskip DB creation and indexer stages and go directly to queries/custom tests\n"); + print ( "--rt\t\t\ttest RT backend (auto-convert all local indexes)\n" ); + print ( "--no-drop-db\t\tKeep test db tables after the test (for debugging)\n"); + print ( "--no-demo\t\tJust skip all tests without models. Else - run them, but never fail (for debugging)\n"); + print ( "--no-marks\t\tDon't mark the output of every test in the logs.\n"); + print ( "\nEnvironment variables are:\n" ); + print ( "DBUSER\t\t\tuse 'USER' as MySQL user\n" ); + print ( "DBPASS\t\t\tuse 'PASS' as MySQL password\n" ); + print ( "\nTests can be specified by full name, or list of IDs, or range of IDs.\n" ); + print ( "\nUsage examples:\n" ); + print ( "php ubertest.php gen\n" ); + print ( "php ubertest.php t --user test --password test\n" ); + print ( "php ubertest.php t test_015\n" ); + print ( "php ubertest.php t 31 37 41 53-64\n" ); + print ( "DBPASS=test make check\n" ); + exit ( 0 ); +} + +$locals = array(); +$locals['rt_mode'] = false; + +if ( array_key_exists ( "DBUSER", $_ENV ) && $_ENV["DBUSER"] ) + $locals['db-user'] = $_ENV["DBUSER"]; + +if ( array_key_exists ( "DBPASS", $_ENV ) && $_ENV["DBPASS"] ) + $locals['db-password'] = $_ENV["DBPASS"]; + +$run = false; +$test_dirs = array(); +$test_range = array(); +$user_skip = false; +for ( $i=0; $i=$test_range[0] && $test_id<=$test_range[1] ) ) + { + $tests[] = $entry; + } +} +sort ( $tests ); + +// full name to short alias +function ShortTestName ( $full ) +{ + if ( substr ( $full,0,5 )=="test_" ) + return substr ( $full, 5 ); + return $full; +} + +// run tests +$total_tests = 0; +$total_tests_failed = 0; +$total_subtests = 0; +$total_subtests_failed = 0; +$total_skipped = $user_skipped; +$failed_tests = array(); +foreach ( $tests as $test ) +{ + if ( $windows && !$sd_managed_searchd ) + { + // avoid an issue with daemons stuck in exit(0) for some seconds + $sd_port += 10; + $agent_port += 10; + $agent_port_sql += 10; + $agents = array ( + array ( "address" => $sd_address, "port" => $sd_port, "sqlport" => $sd_sphinxql_port ), + array ( "address" => $agent_address, "port" => $agent_port, "sqlport" => $agent_port_sql ), + array ( "address" => $agent_address, "port" => $agent_port+1, "sqlport" => $agent_port_sql+1 ) + ); + } + + if ( file_exists ( $test."/test.xml" ) ) + { + $total_tests++; + $res = RunTest ( $test, $g_skipdemo, $g_usemarks ); + + if ( !is_array($res) ) + { + // failed to run that test at all + $total_tests_failed++; + $failed_tests[] = ShortTestName ( $test ); + continue; + } + + $total_subtests += $res["tests_total"]; + $total_skipped += $res["tests_skipped"]; + if ( $res["tests_failed"] ) + { + $total_tests_failed++; + $total_subtests_failed += $res["tests_failed"]; + $failed_tests[] = ShortTestName ( $test ); + if ( $g_strict ) + { + if ( $g_strictverbose ) + { + $report = file_get_contents ( "$test/report.txt" ); + $report.= "\n Test $test failed\n"; + file_put_contents("report.txt",$report); + $report = ""; + } + break; + } + } + } + elseif ( file_exists ( $test."/test.inc" ) ) + { + $run_func = create_function ( '$test_path', file_get_contents ( $test."/test.inc" ) ); + + $total_tests++; + $total_subtests++; + + if ( !$run_func ( $test ) ) + { + $total_tests_failed++; + $total_subtests_failed++; + $failed_tests[] = ShortTestName ( $test ); + } + } +} + +// cleanup +@unlink ( "config.conf" ); +@unlink ( "error.txt" ); + +$nfile = 1; +while ( file_exists ( "config_$nfile.conf" ) ) +{ + @unlink ( "config_$nfile.conf" ); + $nfile++; +} + +$nfile = 1; +while ( file_exists ( "error_$nfile.txt" ) ) +{ + @unlink ( "error_$nfile.txt" ); + $nfile++; +} + +// summarize +if ( $total_tests_failed ) +{ + printf ( "\nTo re-run failed tests only:\nphp ubertest.php t %s\n", join ( " ", $failed_tests ) ); + printf ( "\n%d of %d tests and %d of %d subtests failed, %d tests skipped, %.2f sec elapsed\nTHERE WERE FAILURES!\n", + $total_tests_failed, $total_tests, + $total_subtests_failed, $total_subtests,$total_skipped, + MyMicrotime()-$t ); + exit ( 1 ); +} else +{ + printf ( "\n%d tests and %d subtests succesful, %d tests skipped, %.2f sec elapsed\nALL OK\n", + $total_tests, $total_subtests, $total_skipped, + MyMicrotime()-$t ); + exit ( 0 ); +} + +// +// $Id$ +// + +?> diff --git a/coreseek/csft-4.1/test/wordforms.txt b/coreseek/csft-4.1/test/wordforms.txt new file mode 100755 index 0000000..8e8d989 --- /dev/null +++ b/coreseek/csft-4.1/test/wordforms.txt @@ -0,0 +1,3 @@ +folded > wrapped +shortform > SomeWhatMoreLongFormThatWouldOverflowShortFormBuffer +antediluvian clumsy shandrydan > fordt diff --git a/coreseek/csft-4.1/win/indexer05.vcproj b/coreseek/csft-4.1/win/indexer05.vcproj new file mode 100755 index 0000000..b82f1e6 --- /dev/null +++ b/coreseek/csft-4.1/win/indexer05.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/indexer08.vcproj b/coreseek/csft-4.1/win/indexer08.vcproj new file mode 100755 index 0000000..b935485 --- /dev/null +++ b/coreseek/csft-4.1/win/indexer08.vcproj @@ -0,0 +1,367 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/indextool05.vcproj b/coreseek/csft-4.1/win/indextool05.vcproj new file mode 100755 index 0000000..fbd6783 --- /dev/null +++ b/coreseek/csft-4.1/win/indextool05.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/indextool08.vcproj b/coreseek/csft-4.1/win/indextool08.vcproj new file mode 100755 index 0000000..f85e2b0 --- /dev/null +++ b/coreseek/csft-4.1/win/indextool08.vcproj @@ -0,0 +1,361 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/libsphinx05.vcproj b/coreseek/csft-4.1/win/libsphinx05.vcproj new file mode 100755 index 0000000..e1b1718 --- /dev/null +++ b/coreseek/csft-4.1/win/libsphinx05.vcproj @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/libsphinx08.vcproj b/coreseek/csft-4.1/win/libsphinx08.vcproj new file mode 100755 index 0000000..d2ab93f --- /dev/null +++ b/coreseek/csft-4.1/win/libsphinx08.vcproj @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/search05.vcproj b/coreseek/csft-4.1/win/search05.vcproj new file mode 100755 index 0000000..e266faa --- /dev/null +++ b/coreseek/csft-4.1/win/search05.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/search08.vcproj b/coreseek/csft-4.1/win/search08.vcproj new file mode 100755 index 0000000..e3ac881 --- /dev/null +++ b/coreseek/csft-4.1/win/search08.vcproj @@ -0,0 +1,367 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/searchd05.vcproj b/coreseek/csft-4.1/win/searchd05.vcproj new file mode 100755 index 0000000..4a139b6 --- /dev/null +++ b/coreseek/csft-4.1/win/searchd05.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/searchd08.vcproj b/coreseek/csft-4.1/win/searchd08.vcproj new file mode 100755 index 0000000..89befe8 --- /dev/null +++ b/coreseek/csft-4.1/win/searchd08.vcproj @@ -0,0 +1,369 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/spelldump05.vcproj b/coreseek/csft-4.1/win/spelldump05.vcproj new file mode 100755 index 0000000..5c17a9b --- /dev/null +++ b/coreseek/csft-4.1/win/spelldump05.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/spelldump08.vcproj b/coreseek/csft-4.1/win/spelldump08.vcproj new file mode 100755 index 0000000..3982465 --- /dev/null +++ b/coreseek/csft-4.1/win/spelldump08.vcproj @@ -0,0 +1,365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/testrt05.vcproj b/coreseek/csft-4.1/win/testrt05.vcproj new file mode 100755 index 0000000..04d7c8d --- /dev/null +++ b/coreseek/csft-4.1/win/testrt05.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/testrt08.vcproj b/coreseek/csft-4.1/win/testrt08.vcproj new file mode 100755 index 0000000..84b204a --- /dev/null +++ b/coreseek/csft-4.1/win/testrt08.vcproj @@ -0,0 +1,357 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/tests05.vcproj b/coreseek/csft-4.1/win/tests05.vcproj new file mode 100755 index 0000000..b4db223 --- /dev/null +++ b/coreseek/csft-4.1/win/tests05.vcproj @@ -0,0 +1,207 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/csft-4.1/win/tests08.vcproj b/coreseek/csft-4.1/win/tests08.vcproj new file mode 100755 index 0000000..ef555ed --- /dev/null +++ b/coreseek/csft-4.1/win/tests08.vcproj @@ -0,0 +1,365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/m4-1.4.13.tar.gz b/coreseek/m4-1.4.13.tar.gz new file mode 100644 index 0000000..186477c Binary files /dev/null and b/coreseek/m4-1.4.13.tar.gz differ diff --git a/coreseek/m4-1.4.13/.tarball-version b/coreseek/m4-1.4.13/.tarball-version new file mode 100644 index 0000000..acd81d7 --- /dev/null +++ b/coreseek/m4-1.4.13/.tarball-version @@ -0,0 +1 @@ +1.4.13 diff --git a/coreseek/m4-1.4.13/.version b/coreseek/m4-1.4.13/.version new file mode 100644 index 0000000..acd81d7 --- /dev/null +++ b/coreseek/m4-1.4.13/.version @@ -0,0 +1 @@ +1.4.13 diff --git a/coreseek/m4-1.4.13/AUTHORS b/coreseek/m4-1.4.13/AUTHORS new file mode 100644 index 0000000..40d8361 --- /dev/null +++ b/coreseek/m4-1.4.13/AUTHORS @@ -0,0 +1,38 @@ +Authors of GNU M4. + +The following contributors have warranted legal paper exchanges with +the Free Software Foundation for their contributions to GNU M4. Also +see the files ChangeLog and THANKS. This list results from searching +for /\bM4\b/ in the file /gd/gnuorg/copyright.list on the +fencepost.gnu.org machine. + +Rene' Seindal seindal@diku.dk 1990-03-28 +James L. Avera jima@netcom.com 1993-10-04 +Pete Chown pete.chown@dale.dircon.co.uk 1994-06-28 +John Gerard Makecki johnm@vlibs.com 1995-04-24 +Francois Pinard pinard@iro.umontreal.ca 1996-02-01 +Thomas Tanner tanner@ffii.org 1999-06-23 +Gary V. Vaughan gary@gnu.org 2000-10-02 +Yuji Minejima ? 2001-05-09 +Akim Demaille akim@freefriends.org 2001-11-01 +Andrew James Bettison andrewb@zip.com.au 2001-11-19 +Noah Jeffrey Misch noah@cs.caltech.edu 2004-07-05 +Michael Elizabeth Chastain mec@shout.net 2001-12-27 +William C. Cox bill@qswtools.com 2004-12-04 +Alexandre Duret-Lutz adl@gnu.org 2004-12-04 +John Gatewood Ham zappaman@buraphalinux.org 2005-11-01 +Eric Benjamin Blake ebb9@byu.net 2006-01-18 +John Brzustowski jbrzusto@fastmail.fm 2006-03-06 +Ralf Wildenhues Ralf.Wildenhues@gmx.de 2006-03-20 +Markus Duft markus.duft@salomon.at 2006-08-03 + +======================================================================== + +Copyright (C) 2000, 2006, 2007 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the ``GNU Free +Documentation License'' file as part of this distribution. diff --git a/coreseek/m4-1.4.13/BACKLOG b/coreseek/m4-1.4.13/BACKLOG new file mode 100644 index 0000000..96562a5 --- /dev/null +++ b/coreseek/m4-1.4.13/BACKLOG @@ -0,0 +1,60 @@ +# Summary of pending email for GNU m4 1.4. +# Last updated: Saturday, November 05, 1994. + +rmail/announce + 1. 15 Sep 94 Release: GNU m4 1.3 + 2. 29 Oct 94 Prerelease: GNU m4 1.3.1 + +rmail/changeword + 1. 02 Sep 94 Re: Prerelease: GNU m4 1.2.3 + 2. 05 Sep 94 Re: Prerelease: GNU m4 1.2.3 + +rmail/configuration + 1. 03 Nov 94 Re: m4 1.3 on DEC OSF/1 3.0 + 2. 05 Nov 94 Re: m4 1.3 on DEC OSF/1 3.0 + +rmail/documentation + 1. 05 Jun 92 Re: M4 + 2. 10 Nov 92 Re: Is anyone using m4? + 3. 25 May 94 Autoconf 1.11: minor bu + 4. 27 Jul 94 Re: 0.95: Spacing details + 5. 28 Jul 94 Re: 0.95: Spacing details + 6. 31 Aug 94 Re: Frozen file documentation to proofread + +rmail/floating-point + 1. 27 Oct 94 Re: enhancement to m4 eval() + 2. 25 Oct 94 enhancement to m4 + 3. 27 Oct 94 Re: enhancement to m4 + 4. 27 Oct 94 Re: enhancement to m4 eval() + 5. 27 Oct 94 Re: enhancement to m4 eval() + 6. 27 Oct 94 Re: enhancement to m4 eval() + 7. 28 Oct 94 Re: enhancement to m4 eval() + 8. 28 Oct 94 Re: enhancement to m4 eval() + 9. 28 Oct 94 Re: enhancement to m4 eval() +10. 28 Oct 94 Re: enhancement to m4 eval() +11. 28 Oct 94 Re: enhancement to m4 eval() +12. 28 Oct 94 Re: enhancement to m4 eval() +13. 28 Oct 94 Re: enhancement to m4 eval() + +rmail/format-rewrite + 1. 25 Jun 94 Re: Prerelease: GNU m4 1.1.3 + +rmail/named-formals + 1. 30 Sep 94 m4 macros with named formal parameters + +rmail/purify + 1. 06 Dec 93 m4 1.1.1 "make realclean" + +rmail/speed + 1. 29 Aug 94 Re: diversions and freezing + 2. 05 Sep 94 slowness + 3. 04 Oct 94 Autoconf, m4, and dnl's. + +Copyright (C) 2000, 2006 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the ``GNU Free +Documentation License'' file as part of this distribution. diff --git a/coreseek/m4-1.4.13/COPYING b/coreseek/m4-1.4.13/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/coreseek/m4-1.4.13/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/coreseek/m4-1.4.13/ChangeLog b/coreseek/m4-1.4.13/ChangeLog new file mode 100644 index 0000000..c9e3220 --- /dev/null +++ b/coreseek/m4-1.4.13/ChangeLog @@ -0,0 +1,4822 @@ +2009-04-01 Eric Blake + + Release Version 1.4.13. + * NEWS: Mention the release. + +2009-03-31 Eric Blake + + Tweak submodule instructions. + * HACKING: Improve directions. + * gnulib: Update to latest version. + +2009-03-23 Eric Blake + + Don't force file overwrites during bootstrap. + * bootstrap: Ensure that rerunning bootstrap doesn't alter tree. + + Drop dist-lzma, now that xz replaces lzma. + * configure.ac (AM_INIT_AUTOMAKE): Drop dist-lzma. Until a stable + automake release includes dist-xz, the release process will just + manually create a .xz tarball. + * gnulib: Update to latest gnulib. + +2009-03-19 Eric Blake + + Exploit git submodule by adding appropriate symlinks. + * bootstrap: No longer copy files from gnulib. + * COPYING: Change to symlink pointing into gnulib. + * INSTALL: Likewise. + * build-aux/compile: Likewise. + * build-aux/config.guess: Likewise. + * build-aux/config.sub: Likewise. + * build-aux/depcomp: Likewise. + * build-aux/install-sh: Likewise. + * build-aux/mdate-sh: Likewise. + * build-aux/missing: Likewise. + * build-aux/texinfo.tex: Likewise. + * .cvsignore: Reflect these changes. + * .gitignore: Likewise. + * build-aux/.cvsignore: New file. + * build-aux/.gitignore: Likewise. + +2009-03-18 Eric Blake + + Make gnulib a git submodule. + * .gitmodules: New file. + * gnulib: Record which version of gnulib has been tested. + * bootstrap: Aid in submodule usage. + * cfg.mk (gnulib_dir): Alter default location of gnulib. + * HACKING: Mention how to use submodule. + + Use latest compile script, even with stable automake. + * bootstrap: Also sync build-aux/compile. + +2009-03-12 Eric Blake + + Fix awk script portability. + * checks/get-them: In gsub, properly escape {. Close all files + before exiting. + Reported by Gary V. Vaughan. + +2009-03-05 Eric Blake + + Allow configuration choice in syscmd shell. + * configure.ac (SYSCMD_SHELL): New test. + * src/builtin.c (m4_syscmd, m4_esyscmd): Use it to avoid + hard-coding the shell location. + * doc/m4.texinfo (Syscmd, Esyscmd): Document this. + * README: Document new configure option. + * NEWS: Likewise. + + Remove cruft now that gnulib modules do the work. + * configure.ac (M4_cv_func_system_consistent): Delete. + * src/builtin.c (M4SYSVAL_EXITBITS, M4SYSVAL_TERMSIGBITS): + Delete. + + Use gnulib pipe module instead of popen(3). + * m4/gnulib-cache.m4: Import pipe and wait-process modules. + * src/builtin.c (m4_esyscmd): Rewrite with pipe module. + Resolves a failure on AIX, reported by Gary V. Vaughan. + + Use gnulib execute module instead of system(3). + * m4/gnulib-cache.m4: Import execute module. + * src/builtin.c (m4_sysval): Move computation... + (m4_esyscmd): ...into caller. + (m4_syscmd): Rewrite with execute module. + Resolves a failure on AIX, reported by Gary V. Vaughan. + +2009-03-03 Eric Blake + + Try to tolerate spaces in directory names in testsuite. + * doc/m4.texinfo (Diversions, Using frozen files): Provide shell + quoting, in case __program__ contains spaces. + + Improve web-manual maintainer rule. + * maint.mk (web-manual): Work with VPATH builds. Factor + package-specific detail... + * cfg.mk (manual_title): ...to new variable. + +2009-02-26 Eric Blake + + Make bootstrap easier on Solaris. + * bootstrap: Add GNULIB_SRCDIR. Useful when a wrapper script + gnulib-tool exists earlier on the path to work around /bin/sh + failure in parsing $GNULIB_SRCDIR/gnulib-tool. + +2009-02-19 Eric Blake + + Fix regression in translit. + * src/builtin.c (m4_translit): Use correct comparison. + * doc/m4.texinfo (Translit): Enhance test. + + Speed up input engine, by searching for quotes by buffer. + * src/input.c (struct input_block): Add end pointer to string. + (push_string_finish, push_wrapup): Populate it. + (next_token): For quotes, attempt a buffer search. + * NEWS: Document this. + +2009-02-18 Eric Blake + + Speed up translit when from argument is short. + * m4/gnulib-cache.m4: Import memchr2 module. + * src/builtin.c (m4_translit): Use memchr2 when possible. + * doc/m4.texinfo (Translit): Add tests. + * NEWS: Document this. + + Update copyright year. + * THANKS: Mention 2009 in copyright year. + + Prefer buffer over byte operations. + * src/format.c (expand_format): Use strchr for speed. + * src/builtin.c (substitute, expand_user_macro): Likewise. + + Speed up esyscmd with buffer reads. + * src/builtin.c (m4_esyscmd): Read blocks directly into obstack, + rather than repeatedly reading bytes. Detect read errors. + + Avoid risk of stack overflow. + * src/output.c (insert_file): Avoid stack allocation of large + buffer. + (freeze_diversions): Avoid spurious semicolon. + +2009-02-16 Eric Blake + + Avoid test failure due to different errno. + * doc/m4.texinfo (Using frozen files): Ignore stdout, since + hardened systems can prevent attempts to read /. + * THANKS: Update. + Reported by Ronny Peine, in Gentoo bug 259184. + + Avoid tests that make no sense, because m4 is single-threaded. + * m4/gnulib-cache.m4: Avoid lock-tests and tls-tests. + +2009-02-12 Eric Blake + + Avoid quadratic code when walking definition stack. + * examples/stack_sep.m4: Use linear, not quadratic + implementation. + * doc/m4.texinfo (Improved copy): Fix documentation and add test, + based on recent autoconf bug fix. + +2009-01-24 Eric Blake + + Add URLs to --help output. + * src/m4.c (usage): Use enhanced version-etc features. + +2009-01-02 Eric Blake + + Use nicer email address in web manual. + * maint.mk (web-manual): Use new option in gendocs.sh. + + Nuke xdelta diffs at release time; no one reported using them. + * maint.mk (got-xdelta, delta-xdelta): Delete. + * HACKING: Likewise. + +2009-01-01 Eric Blake + + Update copyright year. + * NEWS: M4 1.4.13 will occur in 2009. + * doc/m4.texinfo (History): Likewise. + +2008-12-24 Eric Blake + + Prepare for eventual release. + * doc/m4.texinfo (History): Mention 1.4.13. + +2008-12-22 Eric Blake + + Make --debugfile argument optional. + * src/builtin.c (m4_debugfile): Make error message consistent. + * src/m4.c (long_options): Make the argument optional, to allow + setting debug file back to stderr. + (main): Make --debugfile order-dependent. + (usage): Document this. + * doc/m4.texinfo (Debugging options): Likewise. + * NEWS: Likewise. + + Use @var correctly. + * doc/m4.texinfo (Operation modes, Preprocessor features) + (Limits control, Frozen state, Debugging options): Use lower case + names in @var. + (Improved copy): Use @code, not @var, as appropriate. + +2008-12-18 Eric Blake + + Document optimized forloop. + * doc/m4.texinfo (Improved forloop): Mention alternate style that + avoids define overhead. + * examples/forloop3.m4: New file. + * examples/Makefile.am (EXTRA_DIST): Distribute it. + + Deal with M4 1.4.x limitation on builtin tokens. + * doc/m4.texinfo (Composition): Mention limitation on curry. + (Improved copy): New node. + * examples/stack_sep.m4: New file. + * examples/Makefile.am (EXTRA_DIST): Distribute it. + + Document copy composite using stack_foreach and curry. + * doc/m4.texinfo (Stacks): New node, to document pushdef stack + manipulation. + (Ifelse): Move define_blind... + (Composition): ...to this new node. Document currying, then use + it to implement copy and rename. + * examples/curry.m4: New file. + * examples/stack.m4: Likewise. + * examples/Makefile.am (EXTRA_DIST): Distribute them. + +2008-12-17 Eric Blake + + Don't override signal handlers installed by c-stack. + * src/m4.c (main): Reorder installation of signal handlers, so we + don't trash a SIGBUS handler installed by c-stack. Also provide a + SIGSEGV fallback, for platforms where c-stack combined with + libsigsegv uses something lower level than SIGSEGV. + +2008-12-12 Eric Blake + + Double size of temp file cache. + * src/output.c (tmp_file, tmp_file_owner): Split... + (tmp_file1, tmp_file2, tmp_file1_owner, tmp_file2_owner): ...into + two variables. + (tmp_file2_recent): New variable. + (m4_tmpopen, m4_tmpclose, m4_tmpremove, m4_tmprename) + (output_exit): Adjust callers. + + Use fewer seeks on cached files. + * src/output.c (m4_tmpfile): Use write, not append mode. + (m4_tmpopen): Add parameter to decide when to skip seeks. + (m4_tmprename, make_diversion, insert_diversion_helper) + (freeze_diversions): Adjust callers. + + Cache most recently spilled diversion. + * src/output.c (tmp_file, tmp_file_owner): New variables, for + 1-deep cache of spilled diversions. + (m4_tmpfile): Open in append mode, since we might revisit + diversion without closing it now. + (m4_tmpopen): Check cache first. + (m4_tmpclose): Update cache, rather than closing. Add parameter. + (m4_tmpremove): Close cache before removing. + (m4_tmprename): Deal with open files when renaming. + (output_exit): Close cache before exiting. + (make_room_for, make_diversion, insert_diversion_helper): Adjust + callers. + * configure.ac (RENAME_OPEN_FILE_WORKS): New configure test. + + Correctly track size of in-memory diversions. + * src/output.c (insert_diversion_helper): Correctly track total + in-memory diversion size after undivert. + + Avoid quadratic behavior for some cases of divert/undivert. + * src/output.c (struct m4_diversion): Improve comments. + (m4_tmpname, make_diversion): Strengthen preconditions. + (m4_tmprename): New function. + (output_init, output_exit): Move after internal functions. + (make_room_for): Don't bother copying uninitialized bytes. + (insert_diversion_helper): Transfer metadata, rather than copying + contents, when undiverting into a previously unused diversion. + * src/m4.h (includes): Add assert.h. + * doc/m4.texinfo (Diversions): Add test. + (Undivert): Enhance test. + * NEWS: Document the speedup. + +2008-12-12 Eric Blake + + Upgrade to FDL 1.3, keep COPYING in repository. + * Makefile.am (MAINTAINERCLEANFILES): Don't remove COPYING. + * .cvsignore: Don't ignore it. + * .gitignore: Likewise. + * COPYING: Store in repository, per automake 1.10.2 + recommendation. + * m4/gnulib-cache.m4: Replace fdl module with fdl-1.3. + * doc/m4.texinfo (GNU Free Documentation License): Upgrade + license. + * doc/Makefile.am (m4_TEXINFOS): Likewise. + * NEWS: Mention the documentation license change. + +2008-10-10 Eric Blake + + Release Version 1.4.12. + * NEWS: Mention the release. + +2008-10-06 Eric Blake + + Work around Solaris' sed inability to process NUL. + * checks/check-them (SED): Allow user to override. + +2008-09-25 Eric Blake + + Tweak error message on command line failure. + * src/m4.c (process_file): Match wording of include builtin. + * src/freeze.c (produce_frozen_state): Likewise. + * m4/gnulib-cache.m4: Regenerate. + * doc/m4.texinfo (Command line files, Using frozen files): Update + tests accordingly. + +2008-09-24 Eric Blake + + Unify error handling for reading directories. + * src/path.c (m4_path_search): Factor open attempts... + (m4_fopen): ...into new function, to reject directories. + * doc/m4.texinfo (Include): Document that directories cannot be + input files. + + Avoid bugs on platforms that mishandle trailing /. + * m4/gnulib-cache.m4: Import fopen module. + * doc/m4.texinfo (Command line files, Include): Add tests. + (Using frozen files): This test now works on mingw. + * checks/check-them (examples): Expand xerr to allow ignoring + error output because of differences in platform errno values. + +2008-09-22 Eric Blake + + Support alternate path separator. + * m4/gnulib-cache.m4: Import dirname and filenamecat modules. + * src/m4.h (includes): Add headers. + * src/path.c (m4_path_search): Avoid literal use of '/' as path + separator and when detecting absolute paths. + +2008-09-16 Eric Blake + + Fix bootstrap for Solaris /bin/sh. + * bootstrap: Avoid shell quoting pitfall. + +2008-09-01 Eric Blake + + Fix building with -DDEBUG=1. + * src/input.c (lex_debug) [DEBUG_INPUT]: Fix compilation failure. + * src/symtab.c (symtab_debug) [DEBUG_SYM]: Likewise. + * src/m4.c (includes) [DEBUG_STKOVF]: Likewise. + Reported by Tom G. Christensen. + +2008-09-01 Ralf Wildenhues + + Typos in source code comments. + * src/builtin.c: Fix typos in comments. + * src/input.c: Likewise. + +2008-08-29 Eric Blake + + Fix manual date information. + * doc/m4.texinfo: UPDATED refers to the day the manual was built, + not the release date of M4. + Based on a bison patch by Akim Demaille. + +2008-08-27 Eric Blake + + Fix typo. + * doc/m4.texinfo (Invoking m4): 'm4 -d+f' is not supported in this + branch. + +2008-08-25 Eric Blake + + Update recommendation now that libsigsegv 2.6 is released. + * NEWS: Recommend libsigsegv 2.6+. + * README: Likewise. + +2008-08-21 Eric Blake + + Fix crash with traced defn(undef), regression from 2007-08-09. + * src/builtin.c (m4_defn): Handle traced but undefined macros. + * doc/m4.texinfo (Trace): Test it. + * NEWS: Document it. + +2008-08-18 Eric Blake + + Fix crash with 'm4 -N9', regression from 2006-09-14. + * src/m4.c (main): Add missing break. + * NEWS: Document it. + +2008-08-15 Eric Blake + + Documentation updates. + * doc/m4.texinfo (History): Mention 1.4.12. + (Builtin): Enhance regression tests. + (Debug Levels): Mention effect of -l. Enhance regression tests. + (Incompatibilities): Fix typo, and mention trace output. + (Improved capitalize): Simplify example. + + Avoid compiler warning. + * src/builtin.c (m4_ifelse): Avoid unused variable. + * THANKS: Update. + Reported by Tom G. Christensen. + + Improve 'git diff' of manual source. + * .gitattributes (*.texi*): Add diff attribute. + * bootstrap: Tell git how to use it. + Inspired by Jim Meyering's similar patch for coreutils. + +2008-08-11 Eric Blake + + Avoid triggering OS/2 bug in testsuite. + * doc/m4.texinfo (Mkstemp): Don't assume test(1) status is 1. + Reported by Elbert Pol. + +2008-08-03 Eric Blake + + Increase ulimit stack value to be larger than SIGSTKSZ. + * checks/stackovf.test (tmpfile): Use 300K rather than 50K, since + at least OpenBSD's sh died early from an undersized stack limit. + +2008-07-17 Eric Blake + + Fix missing copyright notices. + * acinclude.m4: Add copyright license details. + * c-boxes.el: Likewise. + * checks/get-them: Likewise. + * checks/check-them: Likewise. + +2008-07-17 Eric Blake + + Remove redundant examples/stackovf.sh. + * examples/stackovf.sh: Delete, now that checks has better + version. + * examples/Makefile.am (EXTRA_DIST): Don't distribute it. + +2008-07-17 Eric Blake + + Adjust to c-stack changes in gnulib. + * src/Makefile.am (m4_LDADD): Use libsigsegv when available and + necessary, via LIBCSTACK. + * src/m4.c (main) [DEBUG_STACKOVF]: Make it easier to test fault + handlers. + * checks/stackovf.test: New file. + * checks/Makefile.in (CHECKS): Add stackovf.test, and factor... + (DOC_CHECKS): ...generated documentation tests into new macro. + (DISTFILES): Distribute stackovf.test. + * checks/check-them: Special-case stackovf.test. + * NEWS: Enhance the NEWS item for -L improvements. + * README: Mention the optional dependency. + * HACKING: Mention maintenance burden added by libsigsegv. + +2008-06-21 Eric Blake + + Use new sigaction module. + * m4/gnulib-cache.m4: Import sigaction module. + * src/m4.c (main): Drop signal() calls. + +2008-06-18 Eric Blake + + Also trap SIGILL, SIGFPE, SIGBUS. + * m4/gnulib-cache.m4: Import strsignal module. + * src/m4.c (main): Register more handlers, and prefer sigaction + when available. + (SIGBUS, NSIG): Provide fallback when lacking. + (signal_message): New variable, to keep async-safety. + (fault_handler): Display faulting signal description. + * configure.ac (gl_DISABLE_THREADS): Request gnulib modules to + optimize for single-threaded operation. + +2008-06-06 Eric Blake + + Inform users what to do in case of programmer error. + * src/m4.h (EXIT_INTERNAL_ERROR): New macro. + * configure.ac (AC_TYPE_SIGNAL): Delete, now that we assume C89. + * src/m4.c (fault_handler): New method. + (program_error_message): New variable, for async-safety. + (main): Print bug reporting address rather than dump core on any + failed assertions or detected non-stack-overflow faults. + +2008-06-06 Eric Blake + + Replace stackovf with gnulib c-stack. + * m4/gnulib.cache.m4: Import c-stack module. + * configure.ac (AC_CHECK_HEADERS_ONCE): Remove check for + siginfo.h, sys/wait.h. + (AC_CHECK_TYPES): Likewise for siginfo_t. + (AC_CHECK_MEMBERS): Likewise for sa_sigaction, ss_sp. + (AC_CHECK_FUNCS_ONCE): Likewise for sigaction, sigaltstack, + sigstack, sigvec, strerror. + (M4_cv_use_stackovf): Likewise for stack overflow detection. + * src/Makefile.am (m4_SOURCES): Don't build stackovf.c. + * src/stackovf.c: Delete. + * src/m4.h (setup_stackovf_trap): Delete. + * src/m4.c (stackovf_handler): Delete. + (main): Use c_stack_action instead of setup_stackovf_trap. If + stack overflow is detectable, don't limit -L artificially. + (usage): Document unlimited default on supported systems. + * doc/m4.texinfo (Limits control): Document new default nesting + limit. + * NEWS: Document this change. + +2008-07-30 Eric Blake + + Avoid regressions in trace and comment output. + * doc/m4.texinfo (Trace): Add test. + (Comments): Likewise. + +2008-07-28 Eric Blake + + Optimize iteration examples. + * examples/forloop2.m4: Avoid excess indir, by passing current + counter value as parameter. + * examples/foreachq3.m4: Avoid unneeded ifelse, by injecting an + ignored argument. + * doc/m4.texinfo (Improved forloop, Improved foreach): Update the + documentation to match. + +2008-07-26 Eric Blake + + Give example for O(n) foreach on m4 1.4.x. + * examples/foreachq4.m4: New file. + * examples/Makefile.am (EXTRA_DIST): Distribute it. + * doc/m4.texinfo (Improved foreach): Document linear foreach with + m4 1.4.5 and greater. + +2008-07-17 Eric Blake + + Fix missing copyright notices. + * acinclude.m4: Add copyright license details. + * c-boxes.el: Likewise. + * checks/get-them: Likewise. + * checks/check-them: Likewise. + +2008-07-13 Eric Blake + + Add -g/--gnu command line argument. + * src/m4.c (usage): Mention the new option. + (long_options, OPTSTRING): Add new option. + (main): Use it. + * NEWS: Document this addition. + * doc/m4.texinfo (Limits control): Likewise. + (Incompatibilities): Mention future use of POSIXLY_CORRECT. + * THANKS: Update. + Reported by Joel E. Denny. + +2008-07-11 Eric Blake + + Avoid bogus whitespace in @ovar, @dvar. + * doc/m4.texinfo (ovar, dvar): Add @c. + Based on patch by Ralf Wildenhues to Autoconf manual. + +2008-06-16 Eric Blake + + Add missing const qualifications. + * src/builtin.c (builtin_tab): Declare array elements as const. + +2008-06-03 Eric Blake + + Use progname module rather than rolling our own program_name. + * m4/gnulib-cache.m4: Import progname module. + * src/m4.c (program_name): Replace... + (main): ...with a call to set_program_name. + +2008-06-02 Eric Blake + + Allow autobuild usage. + * m4/gnulib.cache: Import autobuild module. + +2008-05-23 Eric Blake + + Make closing files be consistent. + * src/freeze.c (reload_frozen_state): Use close_stream. + Reported by Jean-Charles Longuet. + +2008-05-22 Eric Blake + + Don't allow failure to freeze give exit status of 0. + * src/freeze.c (produce_frozen_state): Guarantee non-zero exit on + fopen failure. + * doc/m4.texinfo (Using frozen files): Test the fix. + * THANKS: Update. + Reported by Jean-Charles Longuet. + +2008-05-09 Eric Blake + + Improve error message when frozen file is invalid. + * src/freeze.c (reload_frozen_state): Track current line. + [GET_STRING]: New helper macro. + +2008-05-09 Eric Blake + + Detect integer overflow when loading frozen file. + * src/m4.h (includes): Add limits.h. + (_): Define as a no-op placeholder for now. + * src/freeze.c (reload_frozen_state) [GET_NUMBER]: Rewrite to fail + immediately on overflow. + Reported by Jim Meyering. + +2008-05-07 Eric Blake + + Fix traceon regression introduced 2006-06-06. + * src/builtin.m4 (traceon): Only perform insertion if lookup + fails. + * doc/m4.texinfo (Trace): Test for the bug. + * NEWS: Document it. + +2008-05-03 Eric Blake + + Document define_blind. + * doc/m4.texinfo (Ifelse): Add a new composite macro. + * THANKS: Update. + Suggested by Mike R. + +2008-04-24 Eric Blake + + Add debugmode test. + * doc/m4.texinfo (Debug Levels): Test -di behavior. + (Changeword, Location): Correct examples. + * checks/check-them (examples): Update to account for recommended + location for running tests. + * doc/m4.texinfo (Debug Levels): Test this behavior. + +2008-04-21 Eric Blake + + Fix spelling of attribution to Christopher Strachey. + * doc/m4.texinfo (History, Inhibiting Invocation): Fix typo. + * THANKS: Update. + Reported by Fernando Carrijo. + +2008-04-17 Eric Blake + + Fix buildbot failure. + * doc/m4.texinfo (Diversions): Consume all of m4's output, in case + SIGPIPE is ignored. + * THANKS: Update. + Detected by Bob Proulx's buildbot. + +2008-04-17 Eric Blake + + Avoid gcc shadowing warnings. + * src/builtin.c (m4_format): s/format/expand_format, so local + variables can be named format. + * src/format.c (format): Rename... + (expand_format): ...to this, and avoid the name index. + * src/input.c (push_file): Avoid the name close. + * src/m4.h (expand_format): Adjust prototype. + * src/output.c (threshold_diversion_CB): Avoid the name div. + +2008-04-15 Eric Blake + + Another 'make installcheck' fix. + * doc/m4.texinfo (Diversions): s/m4/__program__/ in case + --program-prefix was active. + +2008-04-11 Eric Blake + + Ensure --program-prefix doesn't regress. + * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Enforce change from + 2008-03-10 by testing it at 'make distcheck' time. + +2008-04-11 Eric Blake + + Improve OS/2+emx build. + * src/m4.h [__EMX__]: OS/2 does not have a Unix-compatible + system(3), no matter what other macros it pre-defined. + * doc/m4.texinfo (Mkstemp): Rework test to avoid globbing failure + on OS/2. + * src/builtin.c (predefined_tab): Ensure all possible system + identifiers are defined, not just the first; the testsuite will + catch if multiple identifiers mistakenly made it through. + * THANKS: Update. + Reported by Elbert Pol. + +2008-04-09 Eric Blake + + Remove redundant configure macros. + * configure.ac (AC_CANONICAL_BUILD, AC_CANONICAL_HOST) + (AC_SYS_LARGEFILE, AC_TYPE_SIZE_T): Delete, since gnulib does + this. + (AC_CHECK_HEADERS_ONCE): Remove limits.h. + +2008-08-07 Bruno Haible (tiny change) + + Run m4 tests prior to gnulib unit tests. + * Makefile.am (SUBDIRS): Swap order of directories. + +2008-04-02 Eric Blake + + Release Version 1.4.11. + * NEWS: Mention the release. + + Prepare for release. + * maint.mk (alpha): Check for PREV_VERSION setting sooner, and + remove tag operation. + (version-check): Enhance this check. + (prev-tarball): Depend on version-check. + (this-vc-tag): Delete, and mention need to run tag... + * HACKING: ...here, prior to make maintainer-distcheck. + Update the instructions to match this particular release process. + * Makefile.am (.version, announcement): Allow for VPATH build. + * cfg.mk (gnulib_dir): Likewise. + * doc/Makefile.am ($(srcdir)/m4.1): Include release number in man + page. + +2008-04-01 Eric Blake + + Speed up index builtin. + * m4/gnulib-cache: Import strstr module. + * NEWS: Mention the speedup. + +2008-03-29 Eric Blake + + Fix testsuite on mingw, OpenBSD. + * src/format.c (ARG_DOUBLE): Use strtod, not atof. + * src/Makefile.am (m4_LDADD): Use POW_LIB when needed. + * doc/m4.texinfo (Format): Add hex-float support. + * NEWS: Document this. + +2008-03-27 Eric Blake + + Pull other useful doc fixes from branch-1.6. + * doc/m4.texinfo (Arguments): Enable test of + --warn-macro-sequence. + (Defn): Test length of builtin token. + (Builtin, Ifelse, Changequote): Add more regression tests. + +2008-03-27 Eric Blake + + Add test for divert bug on 2007-05-28, patched 2007-07-21. + * doc/m4.texinfo (Diversions): Add test. + +2008-03-24 Eric Blake + + Pull GNUmakefile from gnulib. + * m4/gnulib-cache.m4: Import gnumakefile module. + * GNUmakefile: Remove from version control; supplied by gnulib + instead. + * configure.ac (AC_INIT): Track intra-release version with + git-version-gen. + (AC_CONFIG_LINKS): Let gnulib do this now. + * Makefile.am (distclean-local): Likewise. + (EXTRA_DIST): Likewise. Also handle renamed files. + * (.version, dist-hook): Improve version handling. + * Makefile.cfg: Rename... + * cfg.mk: ...to this. + * Makefile.maint: Rename... + * maint.mk: ...to this. + (ME, makefile-check, m4-check): Use new macro instead of + hard-coded name. + * HACKING: Mention that maintainer rules should now work in VPATH + builds. + +2008-03-15 Eric Blake + + Document join, in order to fix bug in m4wrap example. + * doc/m4.texinfo (Improved m4wrap): New node. + (Defn, Location): Enhance tests. + (Shift): Document the composite macro join. + (Incompatibilities): Move documentation of LIFO vs. FIFO... + (M4wrap): ...here, to match improved example. + +2008-03-10 Eric Blake + + Allow 'make installcheck' with './configure --program-prefix'. + * checks/Makefile.in (program_transform_name): New macro. + (installcheck): Use it to transform name of m4 before testing. + * checks/check-them (m4): Add -m option, to allow testing m4 by a + different name. + * checks/get-them: Allow xout and xerr notation. + +2008-02-25 Eric Blake + + Improve release process. + * configure.ac (AM_INIT_AUTOMAKE): Increase requirement, and add + dist-lzma. + * HACKING: Update for git release procedures. + * Makefile.cfg: New file. + * GNUmakefile: Use it. + * Makefile.maint (gzip_rsyncable, GZIP_ENV, GIT, VC, VC-tag) + (VERSION_REGEXP, this-vc-tag, my_distdir, null_AM_MAKEFLAGS) + (TMPDIR, gnulib-version): New macros, borrowed from coreutils. + (makefile-check, news-date-check, changelog-check, m4-check) + (vc-diff-check, maintainer-distcheck, vc-dist, my-distcheck) + (announcement, alpha, beta, major): New rules, borrowed from + coreutils. + (TEXI2HTML, cvs-release, update-timestamps, cvs-news, cvs-commit) + (cvs-dist): Delete. + * Makefile.am (EXTRA_DIST): Distribute new file. + +2008-02-19 Eric Blake + + Clean up foreach example. + * doc/m4.texinfo (Foreach, Improved foreach): Document another + shortcoming in foreach.m4. + +2008-02-16 Eric Blake + + Add regression test for multi-character quote recursion. + * examples/foreach2.m4: Use $0 rather than spelling out name. + * examples/foreachq2.m4: Likewise. + * examples/forloop2.m4: Likewise. + * examples/hanoi.m4: Likewise. + * examples/trace.m4: Likewise. + * doc/m4.texinfo (Improved forloop): Document advantage of $0. + (Improved foreach): Adjust dump from file. + +2008-02-13 Eric Blake + + Fix texinfo grammar. + * doc/m4.texinfo (Incompatibilities): Use @. after capital. + (History): Use @: after abbreviations. + (M4exit): Use correct Latin abbreviation. + +2008-02-11 Eric Blake + + Document behavior of __gnu__(). + * doc/m4.texinfo (Platform macros): Enhance test. + (Macro expansion): New test. + +2008-01-31 Ralf Wildenhues + + * checks/Makefile.in: Use @SET_MAKE@, and use @SHELL@ rather + than hard-coding /bin/sh. + * THANKS: Update. + Reported by Lawson Chan. + +2007-12-13 Paolo Bonzini (tiny change) + + * doc/m4.texinfo (Inhibiting Invocation): Fix quoting of a quoting + example. + * THANKS: Update. + Reported by Giovanni Toffetti. + +2007-12-07 Eric Blake + + Minor security fix: Quote output of mkstemp. + * src/builtin.c (mkstemp_helper): Produce quoted output. + * doc/m4.texinfo (Mkstemp): Update the documentation and tests. + * NEWS: Document this change. + +2007-12-04 Eric Blake + + Fix builds with OpenBSD make. + * doc/Makefile.am (HELP2MAN): New macro. + (man_MANS, m4.1): Fix rules for building m4.1 into srcdir. + * README: Update copyright. + * HACKING: Mention help2man and makeinfo dependencies. + +2007-11-22 Eric Blake + + Security fix: avoid arbitrary code execution with 'm4 -F'. + * src/freeze.c (produce_frozen_state): Never pass raw file name as + printf format. + * NEWS: Document this fix. + +2007-11-07 Eric Blake + + * doc/m4.texinfo (Pseudo Arguments): Test more corner cases. + +2007-11-05 Eric Blake + + Use build-aux directory. + * configure.ac (PACKAGE, VERSION): Delete, since Automake does + this now. + (AC_CONFIG_AUX_DIR): Add, with auxiliary files in build-aux + instead of the top level. + (AC_INIT_AUTOMAKE): Increase requirement, and add dist-lzma. + * Makefile.am (EXTRA_DIST): Gnulib now manages gendocs.sh. + * bootstrap: Adjust accordingly. + * m4/gnulib-cache.m4: Add --aux-dir option. + * doc/Makefile.am (m4.1): Rewrite rule to use build-aux/missing. + +2007-10-31 Eric Blake + + Test more corner cases. + * doc/m4.texinfo (Changecom, Pseudo Arguments): Beef up tests. + (Improved foreach): Document alternate foreachq style. + +2007-10-28 Eric Blake + + More test coverage for autoconf usage patterns. + * doc/m4.texinfo (Inhibiting Invocation, Pseudo Arguments) + (Builtin): Add new undocumented tests. + (Shift): Document cond macro, and add new test. + +2007-10-27 Eric Blake + + Document one use of changequote(`(',`)'). + * doc/m4.texinfo (Changequote): Add new test, based on recent + autoconf addition of m4_expand. + +2007-10-22 Eric Blake + + Never let printf failures go undetected. + * m4/gnulib-cache.m4: Import announce-gen, git-version-gen, + intprops, strtod, and xprintf modules. Remove deprecated free + module. Replace vasprintf-posix and xvasprintf with + xvasprintf-posix. + * src/m4.h: Include xprintf.h. + * src/builtin.c (ntoa): Export. + (m4_errprint): Adjust all *printf callers. + * src/debug.c (debug_message_prefix, trace_format): Likewise. + * src/freeze.c (produce_frozen_state): Likewise. + * src/input.c [DEBUG_INPUT]: Likewise. + * src/m4.c (usage): Likewise. + * src/m4.h (DEBUG_PRINT1, DEBUG_PRINT3, DEBUG_MESSAGE) + (DEBUG_MESSAGE1, DEBUG_MESSAGE2): Likewise. + * src/output.c (shipout_text, freeze_diversione): Likewise. + * src/path.c [DEBUG_INCL]: Likewise. + * src/stackovf.c (process_sigsegv) [DEBUG_STKOVF]: Likewise. + * src/symtab.c [DEBUG_SYM]: Likewise. + +2007-10-17 Eric Blake + + Fix 'm4 -F file -t undefined'. + * src/freeze.c (produce_frozen_state): Avoid core dump. + * doc/m4.texinfo (Using frozen files): Test for the bug. + * NEWS: Mention the fix. + +2007-10-09 Eric Blake + + Avoid regexp regression. + * doc/m4.texinfo (Regexp, Patsubst): Test \ expansion. + +2007-10-02 Eric Blake + + Add more examples and tests. + * doc/m4.texinfo (Patsubst): Use the examples directory. Also + document shortfall. + (Improved capitalize): New node. + (Index macro, Regexp): Test more code paths. + * examples/capitalize.m4: Update to match manual. + * examples/capitalize2.m4: New file. + * examples/foreachq3.m4: Likewise. + * examples/join.m4: Likewise. + * examples/loop.m4: Likewise. + * examples/wraplifo.m4: Likewise. + * examples/wraplifo2.m4: Likewise. + * examples/Makefile.am (EXTRA_DIST): Distribute new files. + +2007-09-24 Eric Blake + + Create .gitignore alongside .cvsignore. + * bootstrap (LC_ALL): Set up front. + (version control) Borrow idea from head, to avoid churn in + m4/.*ignore files modified by gnulib-tool. + +2007-09-13 Eric Blake + + * AUTHORS: Fix typo. + +2007-09-07 Eric Blake + + * AUTHORS: Simplify, to match libtool and autoconf layout. + * THANKS: Sync with head. + +2007-08-10 Eric Blake + + * doc/m4.texinfo (Compatibility): Sync with head. + +2007-08-10 Konrad Schwarz (tiny change) + and Eric Blake + + * doc/m4.texinfo (Defn): Update wording. + +2007-08-09 Eric Blake + + POSIX requires defn(`a',`b') to concatenate definitions. + * src/builtin.c (m4_defn): Allow multiple arguments, but warn if + trying to mix a builtin with anything else. + * doc/m4.texinfo (Defn): Document a use for this POSIX + requirement. + (Incompatibilities): Update to match current status. + * NEWS: Document this change. + * THANKS: Update. + Reported by Konrad Schwarz. + +2007-08-04 Eric Blake + + Normalize all GPL license notices. + * GNUmakefile: Update license wording. + * Makefile.am: Likewise. + * Makefile.maint: Likewise. + * bootstrap: Likewise. + * commit: Likewise. + * configure.ac: Likewise. + * checks/Makefile.in: Likewise. + * doc/Makefile.am: Likewise. + * examples/Makefile.am: Likewise. + * src/Makefile.am: Likewise. + * src/builtin.c: Likewise. + * src/debug.c: Likewise. + * src/eval.c: Likewise. + * src/format.c: Likewise. + * src/freeze.c: Likewise. + * src/input.c: Likewise. + * src/m4.c: Likewise. + * src/m4.h: Likewise. + * src/macro.c: Likewise. + * src/output.c: Likewise. + * src/path.c: Likewise. + * src/stackovf.c: Likewise. + * src/symtab.c: Likewise. + +2007-07-21 Eric Blake + + Fix regression on NetBSD from 2007-05-28. + * src/output.c (m4_tmpopen): Explicitly reset append-mode stream + position to byte 0. + * NEWS: Document this fix. + * THANKS: Update. + Reported by Thomas Klausner. + +2007-07-20 Eric Blake + + Fix 'make distcheck' issues. + * Makefile.am (EXTRA_DIST): No need to distribute + gpl-3.0.texi.diff anymore. + * m4/gnulib-cache.m4: Update to latest gnulib. + +2007-07-14 Eric Blake + + Reflect upstream license .texi changes. + * doc/m4.texinfo (Copying): Rename node... + (GNU General Public License): ...to this. + (GNU Free Documentation License): Adjust node location. + * local/doc/gpl-3.0.texi.diff: Remove file. + +2007-07-10 Eric Blake + + Start 1.4.10a. + * configure.ac (AC_INIT): Bump version number. + * NEWS: Start changes since 1.4.10. + * doc/m4.texinfo (History): Mention 1.4.11. + (Copying This Package, Copying This Manual): Add index entries. + * local/lib/version-etc.c.diff: Delete, now that gnulib has been + updated. + * Makefile.am (EXTRA_DIST): Remove dead file. + +2007-07-09 Eric Blake + + Release Version 1.4.10. + * doc/Makefile.am (m4_TEXINFOS): Distribute gpl-3.0.texi. + * Makefile.am (EXTRA_DIST): Distribute gnulib diffs. + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.9. + + * src/format.c: Missed a GPLv3 conversion. + + Avoid undefined behavior of %.*c in printf. + * src/format.c (format): Special case %c. + * TODO: Document that more remains to be done. + * NEWS: Document the fix. + +2007-07-05 Eric Blake + + Fix up gnulib-tool usage. + * m4/gnulib-cache.m4: Change local-dir to local, not `.'. + * version-etc.c.diff: Move to... + * local/lib/version-etc.c.diff: ...here. + * gpl-3.0.texi.diff: Move to... + * local/doc/gpl-3.0.texi.diff: ...here. + +2007-07-04 Eric Blake + + Upgrade to GPL version 3 or later. + * bootstrap: Pick up GPLv3. + * m4/gnulib-cache.m4: Augment with 'gnulib-tool + --local-dir=. --import gpl-3.0'. + * doc/m4.texinfo (Copying This Package): New appendix. + * NEWS: Mention this change. + * README: Mention why some files still claim to be version 2. + * version-etc.c.diff: New file, to make sure --version claims + correct GPL version. Temporary until gnulib makes move. + * gpl-3.0.texi.diff: New file, to allow inclusion of GPLv3 as + appendix, rather than section, of the manual. + * GNUmakefile: Update to new license. + * Makefile.am: Likewise. + * Makefile.maint: Likewise. + * commit: Likewise. + * configure.ac: Likewise. + * checks/Makefile.in: Likewise. + * doc/Makefile.am: Likewise. + * examples/Makefile.am: Likewise. + * src/Makefile.am: Likewise. + * src/builtin.c: Likewise. + * src/debug.c: Likewise. + * src/eval.c: Likewise. + * src/freeze.c: Likewise. + * src/input.c: Likewise. + * src/m4.c: Likewise. + * src/m4.h: Likewise. + * src/macro.c: Likewise. + * src/output.c: Likewise. + * src/path.c: Likewise. + * src/stackovf.c: Likewise. + * src/symtab.c: Likewise. + +2007-06-26 Eric Blake + + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import assert'. + +2007-06-26 Karl Berry (tiny change) + + Match Free Software Directory categories. + * doc/m4.texinfo (dircategory): Update. + +2007-05-31 Eric Blake + + * src/output.c (output_text): Fix regression from 2007-05-28. + * doc/m4.texinfo (History): Mention 1.4.10. + (Format): Make testsuite output easier to debug. + +2007-05-29 Eric Blake + + Start 1.4.9c. + * configure.ac (AC_INIT): Bump version number. + * NEWS: Start changes since 1.4.9b, and fix typo. + + Beta Release Version 1.4.9b. + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.9. + + Improve format support. + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import + vasprintf-posix'. + * src/format.c (format): Parse %'hhd, %a, %A. Avoid calling + printf with too few arguments, as in format(%*.*d,-1,-1,1). + * doc/m4.texinfo (Format): Expand tests, and improve + documentation. + * NEWS: Document this change. + +2007-05-28 Eric Blake + + Fix large diversion corner cases, including 1.4.8 regression. + * src/output.c (m4_tmpfile, m4_tmpopen): Simplify use of errno. + (make_room_for): Use NULL, not 0, for pointers. + (insert_diversion_helper): Avoid using rewind. + (freeze_diversions): Allow freezing large diversions. + * NEWS: Document this fix. + + Also run gnulib unit tests during make check. + * m4/gnulib-cache.m4: Augment with 'gnulib-tool + --tests-base=tests --with-tests'. + * configure.ac (AC_CONFIG_FILES): Build gnulib testdir. + * Makefile.am (SUBDIRS): Run gnulib tests before ours. + +2007-05-25 Eric Blake + + Backport prompts in examples from head. + * src/macro.c (expand_macro): Shorten message. + * doc/m4.texinfo (Manual, Command line files, Comments) + (Inhibiting Invocation, Macro Arguments, Macro expansion, Indir) + (Builtin, Shift, Forloop, Foreach, Dumpdef, Trace, Debug Levels) + (Debug Output, Include, Format, Syscmd, Mkstemp, Location) + (Using frozen files, Improved forloop, Improved foreach): Add + prompts to examples. + * checks/get-them: Ignore prompts in examples. + + Fix sync line interaction with multiline comments. + * doc/m4.texinfo (Other Incompatibilities): Add example, and + document bug in --syncline/divert interaction. + (Preprocessor features): Augment test. + * src/m4.h (output_text): Export. + (shipout_text, next_token): Add parameter. + * src/freeze.c (reload_frozen_state): Don't interfere with + synclines when reloading state. + * src/output.c (output_text): Export. + (shipout_text): Take new parameter for start line of token. + Output at most one syncline per token. + * src/input.c (next_token): Report line where multiline tokens + start. + * src/macro.c (expand_input, expand_token, expand_argument): + Adjust callers so that line is passed from input to output. + * NEWS: Document this fix. + Reported by Sergey Poznyakoff. + + Test -s in testsuite. + * doc/m4.texinfo (Preprocessor features): Add a test. + * checks/get-them: Support extra options in testsuite. + * checks/check-them (examples): Use extra options. + * THANKS: Update. + Reported by Sergey Poznyakoff. + +2007-05-24 Eric Blake + + Support POSIX flush semantics on all platforms. + * m4/gnulib-cache.m4: Remove closeout, and augment with + 'gnulib-tool --import closein fflush'. + * src/m4.h (includes): Use closein, not closeout. + * src/m4.c (main): Ensure stdin is flushed when not all input is + consumed. + (process_file): No return needed. + * src/debug.c (debug_flush_files): Rely on gnulib module, rather + than excluding mingw. + * NEWS: Document this change. + + Work around cygwin and mingw fseeko bugs. + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import fseeko'. + * src/debug.c (debug_flush_files): Prefer fseeko over fseek. + +2007-04-25 Eric Blake + + Fix negative division within eval, regression of 2007-01-06. + * doc/m4.texinfo (Eval): Catch this bug. + * src/eval.c (mult_term): Fix it. + * NEWS: Document this. + * THANKS: Update. + Reported by Cesar Strauss. + +2007-04-23 Eric Blake + + Start 1.4.9a. + * configure.ac (AC_INIT): Bump version number. + * NEWS: Start changes since 1.4.9. + +2007-03-23 Eric Blake + + Release 1.4.9: + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.8b. + +2007-03-16 Eric Blake + + * doc/m4.texinfo (Mkstemp): Tweak wording. + * src/output.c (output_init): Adjust to latest gnulib. + +2007-03-15 Eric Blake + + Avoid Tandem/NSK's broken long long (without a symmetric unsigned + long long, it confuses gnulib). + * configure.ac (AC_TYPE_LONG_LONG_INT): Declare long long broken + if unsigned long long doesn't work. + * THANKS: Update. + Reported by Matthew Woehlke. + +2007-03-07 Eric Blake + + * AUTHORS: Update. + * doc/m4.texinfo: Minor tweaks, avoid makeinfo warning. + +2007-03-01 Eric Blake + + * doc/m4.texinfo: Pick up more index entries from head. Follow + more texinfo recommendations. + (Sysval): Improve tests. + + Avoid overfull \vbox warning from texinfo, due to indices that + weren't quite big enough to split across page boundaries. + * doc/m4.texinfo: Add lots of concept index entries. + (Concept Index): Move to be last, as recommended by texinfo + manual. + (Define, Arguments, Pseudo Arguments): Add more function entries. + +2007-02-28 Eric Blake + + * doc/m4.texinfo (Eval): Clean up wording to reflext POSIX XCU ERN + 137. + (Pseudo Arguments): Add useful example. + + * doc/m4.texinfo (Pushdef, Incompatibilities): Clean up wording to + reflect POSIX XCU ERN 118. + + * src/m4.h (DEFAULT_MACRO_SEQUENCE): Factor out from... + * src/m4.c (usage): ...here,... + * src/builtin.c (set_macro_sequence): ...and here. + (define_user_macro): Fix typo. + * doc/m4.texinfo (Preprocessor features, Arguments): Fix minor + inaccuracies. + (Shift): Document composite macro argn for portably getting at + positional parameters beyond 9. + * configure.ac (AC_INIT): Bump version number. + * NEWS: Start changes of 1.4.8c. + +2007-02-24 Eric Blake + + Beta Release 1.4.8b: + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.8. + + Reserve all uses of raw ${} in macro definitions, not just + ${}. + * src/builtin.c (set_macro_sequence): Change default macro + sequence. + * doc/m4.texinfo (Operation modes): Update to match. + * src/m4.c (usage): Likewise. + * NEWS: Likewise. + +2007-02-23 Eric Blake + + * src/m4.h (includes): Update to latest gnulib. + +2007-02-08 Eric Blake + + Rename --warn-syntax to --warn-macro-sequence[=regex], to make it + more flexible, and so that autoconf can use it. + * src/m4.h (set_macro_sequence, free_macro_sequence): New + prototypes. + * src/builtin.c (macro_sequence_buf, macro_sequence_regs) + (macro_sequence_inuse, set_macro_sequence, free_macro_sequence): + New variables and functions. + (define_user_macro): Allow flexibility in regular expression used + to trigger warning. + * src/m4.c (warn_syntax): Delete. + (usage, WARN_MACRO_SEQUENCE_OPTION, main): Implement changed + spelling of option, along with optional argument. + * doc/m4.texinfo (Operation modes, Arguments): Document this + change. + * NEWS: Document this change. + +2007-02-05 Eric Blake + + * m4/gnulib-cache.m4: Module strstr no longer exists. + + Avoid bool bitfields, as they don't work on AIX. + * src/m4.h (bool_bitfield): New typedef. + (struct symbol, struct builtin): Use it. + * src/input.c (struct input_block): Likewise. + Reported by Albert Chin. + + * doc/m4.texinfo (Sysval): Avoid SIGPIPE in test as unreliable. + Reported by Albert Chin. + * THANKS: Update. + +2006-06-18 Bruno Haible (tiny change) + + * doc/m4.texinfo (Input processing): Further clarifications. + +2007-02-03 Eric Blake + + * doc/m4.texinfo (Input processing, Quoting Arguments): Beef up + the examples. + Reported by Bruno Haible. + +2007-02-01 Eric Blake + + * src/m4.c (fatal_warnings): New variable. + (usage): Document new -E behavior. + (main): Make -E an additive option. + (m4_error, m4_error_at_line): Change exit status when required. + * NEWS: Document this change. + * doc/m4.texinfo (Operation modes): Likewise. + Reported by Ralf Wildenhues. + +2007-01-27 Eric Blake + + * src/m4.h (warn_syntax): Declare. + (init_pattern_buffer): Export. + * src/m4.c (warn_syntax, usage, WARN_SYNTAX_OPTIONS) + (long_options, main): Implement new option. + * src/builtin.c (init_pattern_buffer): Allow NULL regs argument. + (define_user_macro): Warn on $11 and ${1} if requested. + * src/input.c (init_pattern_buffer): Delete duplicate method. + * doc/m4.texinfo (Operation modes): Document it. + (Arguments): Document future direction of ${11} vs. $11. + (Incompatibilities): Fix wording on POSIX limitations. + * checks/get-them: Parse @{ and @} correctly. + * NEWS: Document this change. + +2007-01-26 Eric Blake + + * src/builtin.c (includes): Adjust to gnulib changes. + +2007-01-15 Eric Blake + + * doc/m4.texinfo: Pull in various improvements from head. + * src/builtin.c (include): Alter exit status on failure. + * NEWS: Document this fix. + +2007-01-13 Eric Blake + + * configure.ac (AC_CHECK_MEMBERS): Check for stack_t.ss_sp, and + assume the fallback of ss_base for BSDI 4.0.1. + * src/stackovf.c (setup_stackovf_trap) [HAVE_SIGALTSTACK && + ! HAVE_STACK_T_SS_SP]: Use this check. + Reported by Chris McGuire. + * THANKS: Update. + * NEWS: Document the improvement. + +2007-01-09 Eric Blake + + * src/eval.c (ASSIGN): New enumerator. + (eval_lex): Recognize '='. + (equality_term): Treat '=' like '==', but warn that it is + deprecated. + * doc/m4.texinfo (Eval): Document and test this. + (Incompatibilities): Document the POSIX incompatibility. + * NEWS: Document this change. + +2007-01-06 Eric Blake + + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import stdint'. + * checks/check-them: Record expected exit status. + * checks/get-them: Check exit status. + * src/m4.h (eval_t, unsigned_eval_t): Delete, use POSIX int32_t + instead. + * src/builtin.c: All users changed. + * src/eval.c: Likewise. Also document where we are triggering + undefined or implementation-defined behavior. + (BADOP, NEGATIVE_EXPONENT, INVALID_OPERATOR, eval_lex, evaluate) + (logical_or_term, logical_and_term, logical_not_term, not_term) + (equality_term, unary_term): Port from head to follow POSIX + semantics. + (exp_term): Reject 0**0 as undefined. + * doc/m4.texinfo (History): Mention 1.4.9. + (Format, Incompatibilities): Update to document POSIX compliance. + * NEWS: Document this change. + +2007-01-04 Eric Blake + + * NEWS: Document previous fix. + * THANKS: Update. + +2007-01-04 Sami Liedes (tiny change) + + Fix Debian bug 405594, introduced 2006-11-01 from a bad + copy-n-paste from head. + * src/m4.c (main): Use correct file name after --. + +2007-01-04 Eric Blake + + Fix regression from 1.4.7 in large file handling on some + platforms, introduced on 2006-10-13. + * configure.ac (AC_LARGE_SYSFILE): Guarantee that large files + will be handled. + * NEWS: Document this fix. + +2007-01-03 Eric Blake + + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import + version-etc-fsf'. + * src/m4.c (AUTHORS, main): Use FSF wording for --version (plus + it bumps the copyright year). + +2006-12-27 Eric Blake + + * doc/m4.texinfo (Patsubst): Fix typo. + +2006-12-16 Eric Blake + + * src/m4.c (main): Check for errors when closing stdin. + +2006-12-09 Ralf Wildenhues + + * doc/m4.texinfo: Fix some typos. + +2006-12-09 Eric Blake + + * configure.ac (AC_INIT): Bump version number. + * NEWS: Start changes of 1.4.8a. + +2006-11-20 Eric Blake + + Release 1.4.8: + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.7. + +2006-11-16 Eric Blake + + * doc/m4.texinfo (Include, Search Path, Diversions, Divert): + Minor tweaks noticed while porting to head. + +2006-11-14 Eric Blake + + * src/output.c (cleanup_tmpfile, freeze_diversions): Clean up + spent iterators. + (m4_tmpname): Avoid memory leak. + +2006-11-13 Eric Blake + + * src/output.c (cleanup_tmpfile): Avoid double error message when + umask is prohibitive. + (m4_tmpname, m4_tmpopen, m4_tmpclose, m4_tmpremove): New + functions. + (m4_tmpfile): Add parameter, move cloexec action here. + (make_room_for): Adjust caller. Don't keep too many files open. + (insert_diversion_helper): Unlink emptied temp files. + (make_diversion): Don't keep too many files open. + * doc/m4.texinfo (Diversions): Tweak wording, now that open file + descriptors are no longer a limiting factor. + * NEWS: Document this change. + + Backport sparse diversion handling from head. + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import + avltree-oset'. + * src/output.c (struct m4_diversion): Rename from struct + diversion, and update members. All users changed. + (diversion_table): Change to an ordered set, instead of an array. + (div0): New storage for diversion 0. + (diversions): No longer needed. + (free_list): New list to allow recycling diversion storage. + (diversion_storage): New storage to reduce malloc overhead. + (cmp_diversion_CB, threshold_diversion_CB): New callbacks. + (output_init, output_exit, cleanup_tmpfile, make_room_for) + (make_diversion): Handle new diversion storage scheme. + (insert_diversion_helper): New function. + (insert_diversion, undivert_all, freeze_diversions): Use it. + * doc/m4.texinfo (Divert, Diversions): Move hidden test of memory + exhaustion to visible test of large diversion numbers. + * NEWS: Document this fix. + +2006-11-11 Eric Blake + + * src/builtin.c (m4_translit): Slight optimization. + + * src/m4.h (to_uchar): Depend on HAVE_INLINE. + + * src/builtin.c: Remove unnecessary casts. + (expand_ranges): Make 8-bit clean. + * doc/m4.texinfo (Translit): Add tests and wording. + * NEWS: Document this fix. + +2006-11-07 Eric Blake + + * src/m4.h (output_exit): New prototype. + * src/m4.c (main): Use it. + * src/output.c (cleanup_tmpfile): Close files before removing + directory. + (insert_diversion): Check for failure. + (output_exit): Avoid memory leak. + * doc/m4.texinfo (Diversions): Test this bug. + + * doc/m4.texinfo (Esyscmd, Errprint): Minor touchups. + +2006-11-01 Eric Blake + + Allow C++ compilation on Linux, as a safety measure in type + checking. + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import + stdbool'. + * src/m4.h (hack_symbol, hack_all_symbols): Use full prototype. + (boolean): Kill this, and use stdbool.h instead. + * src/debug.c, src/eval.c, src/input.c, src/macro.c, src/m4.c: + * src/output.c, src/symtab.c: All users changed. + * src/symtab.c (hack_all_symbols): Update prototype. + * src/builtin.c (dump_symbol, set_trace): Update signature. + (m4_dumpdef, m4_traceon, m4_traceoff): Update callers. + (mkstemp_helper, m4_m4wrap, expand_ranges, m4_translit): Allow + C++ compilation. + * src/debug.c (trace_flush): Likewise. + * src/freeze.c (reload_frozen_state): Likewise. + * src/input.c (push_file, push_string_finish, push_wrapup): + (token_bottom, next_token): Likewise. + * src/m4.c (main): Likewise. + + * doc/m4.texinfo (Invoking m4): Update according to POSIX 200x + draft wording. + * src/m4.h (m4_path_search): Tweak signature. + * src/path.c (m4_path_search): Likewise. + * src/builtin.c (include): Update caller. + * src/m4.c (main): Allow -D, -U, -t, and -s to be interspersed + with file names. Don't write to **argv. + (process_file): New helper method. + * NEWS: Document this fix. + +2006-10-31 Eric Blake + + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import strstr'. + * doc/m4.texinfo (Translit): Improve the documentation. + * src/builtin.c (m4_translit): Optimize to O(n) instead of O(n^2) + algorithm. + (m4_index): Simplify, and speed up slightly. + * NEWS: Document this fix. + +2006-10-28 Eric Blake + + * src/input.c (set_quotes): Don't allow empty end-quote with + non-empty start-quote. + (set_comment): Likewise for end-comment. + * src/builtin.c (m4_changecom): Adjust caller. + * doc/m4.texinfo (Changequote, Changecom): Update documentation to + match behavior. + (Incompatibilities): Document another POSIX bug. + * NEWS: Mention this change. + +2006-10-27 Ralf Wildenhues + + * examples/Makefile.am (EXTRA_DIST): Distribute recently-added + files. + +2006-10-26 Eric Blake + + Silence -Wwrite-strings -Wpointer-arith warnings. + * src/builtin.c (define_user_macro): Allow NULL argument. + (m4_builtin, m4_indir): Cast away const of "". + * src/format.c (format): Likewise. + * src/macro.c (collect_arguments): Likewise. + (expand_macro): Avoid math on void*. + * src/m4.c (main): Adjust caller. + * src/output.c (freeze_diversions): Detect off_t overflow. + + * src/input.c (pop_input): Remove unnecessary code. + +2006-10-25 Eric Blake + + * src/symtab.c (symtab_init): Avoid size_t overflow. + * src/output.c (make_diversion): Avoid size_t overflow. + * doc/m4.texinfo (Diversions): Test this fix. + * src/input.c (input_block): Remove unused member. Reduce size + of struct. + (push_file, pop_input): Avoid useless assignment. + * NEWS: Document the bug fix. + + Redo location tracking. Instead of having just files track the + line to return to when popping input, now all input blocks track + their current line. + * src/input.c (INPUT_STRING_WRAP, INPUT_FILE_INIT): No longer + needed. + (input_block): Have line and file storage for all input types, and + rename some members. + (input_change): New global flag. + (push_file, push_macro, push_string_init, push_wrapup): Store + location. + (push_string_finish, pop_input, pop_wrapup): Notice changes in + input blocks. + (peek_input): Adjust to new member names. + (next_char, next_char1): Adjust location if needed. + (skip_line): Simplify restoring location. + * doc/m4.texinfo (Location): Augment the test to catch line + location of expansion of multi-line arguments. + Reported by Stepan Kasal. + +2006-10-23 Eric Blake + + * doc/m4.texinfo (Macro Arguments): Document that leading space + in argument collection stops at macro expansion. + (Incompatibilities): Document POSIX whitespace wording issue. + +2006-10-20 Eric Blake + + * doc/m4.texinfo: Trailing '@comment' doesn't format nicely in + TeX, so recognize '@w{ }' instead. Likewise, @code{_name} at the + end of a TeX line splits incorrectly. + (Foreach, Improved foreach): Write these sections, borrowing ideas + from CVS head and from m4sugar. + * checks/get-them: Accomodate new way to show trailing space in + examples. + * examples/foreach.m4: Make usable in documentation. + * examples/foreachq.m4: New file. + * examples/foreachq2.m4: New file. + * examples/foreach2.m4: New file. + * NEWS: Document the documentation updates. + +2006-10-19 Eric Blake + + * src/builtin.c (mkstemp_helper, m4_mkstemp): New functions. + (m4_maketemp): Provide traditional behavior. + * doc/m4.texinfo (Mkstemp): Rename from Maketemp. Document the + new `mkstemp' macro and the flaws of the old `maketemp'. + (Incompatibilities): Move maketemp discussion to... + (Extensions): ...here, since -G now supresses the GNU extension. + * NEWS: Document this. + + * examples/forloop.m4: Simplify. + * examples/forloop2.m4: New file. + * examples/quote.m4: New file. + * doc/m4.texinfo (Loops): Rename to... + (Shift): ...this node. + (Forloop, Foreach, Improved forloop, Improved foreach): New + nodes. + +2006-10-17 Eric Blake + + * m4/gnulib-cache.m4: Update with 'gnulib-tool --import + config-h'. + * configure.ac (AC_CONFIG_HEADERS): Create config.h alongside + gnulib headers, rather than in top directory. + * src/Makefile.am (AUTOMAKE_OPTIONS): Add nostdinc, to reduce make + output clutter. + +2006-10-16 Eric Blake + + * doc/m4.texinfo: Backport some minor cleanups from head. + (Cleardivert): Rename from cleardiv. + + * doc/m4.texinfo (Invoking m4): Promote to a chapter, instead of + a section of Preliminaries. + (Operation modes, Preprocessor features, Limits control) + (Frozen state, Debugging options, Command line files): Subdivide + into new sections. + (Input processing, Quoting Arguments, Define, Arguments) + (Cleardiv, Format, M4exit): Fix grammar of references. + (Inhibiting Invocation, Macro Arguments, Builtin, Trace) + (Debug Levels, Debug Output, Include, Search Path, Divert) + (Platform macros, Syscmd, Location, Extensions): Point to new + sections. + (Top, Loops, Include, Undivert, Location, Incompatibilities): + Improve file references. + +2006-10-14 Eric Blake + + * m4/input.c (file_clean): Don't close stdin twice, POSIX says it + is not portable. + Reported by Ralf Wildenhues. + + * src/builtin.c (m4_undivert): Check for read error. + +2006-10-13 Eric Blake + + * src/m4.h (UNIX, W32_NATIVE, OS2): Move platform checks after + header files are included, since can affect the tests. + * THANKS: Updated. + Reported by Martin Koeppe. + + Backport head's usage of clean-temp module, as it is cleaner than + using tmpfile-safer. + * m4/gnulib-cache.m4: Augment with 'gnulib-tool --import + clean-temp closeout', and remove tmpfile-safer. + * src/m4.h (includes): Adjust. + (m4_path_search): Rename from path_search, to avoid collision + with gnulib. + * src/m4.c (main): Install closeout handler. Adjust caller. + (usage): Now done by closeout module. + * src/builtin.c (m4_m4exit): Likewise. + (m4_undivert, include): Adjust callers. + * src/freeze.c (reload_frozen_state): Likewise. + * src/path.c (m4_path_search): Rename from path_search. + * src/output.c (output_temp_dir): New variable. + (cleanup_tmpfile, m4_tmpfile): New functions, from head. + (insert_diversion, make_room_for): Use them. + * doc/m4.texinfo (Diversions): Document this, and add a test. + (Improved fatal_error): Fix typo. + (Maketemp): Port test to mingw, and no longer hide from + documentation. + * NEWS: Document the change in TMPDIR behavior. + + * configure.ac (m4_pattern_forbid): Narrow the range of forbidden + macros, to work with recent gnulib-tool update. + + * src/builtin.c (m4_builtin, m4_indir): Allow transparent + handling of defn results. + * doc/m4.texinfo (Builtin, Indir): Add test cases. + * NEWS: Document this. + +2006-10-12 Eric Blake + + * doc/m4.texinfo (Location): Fix typo in previous commit. + (Changeword): Catch one more case. + * src/input.c (skip_line): Fix case when outer file used macro to + supply the \n. + +2006-10-11 Eric Blake + + * src/input.c (enum input_type): Add additional types, to shave + time off the common case. + (push_wrapup): Wrapped strings remember location. + (push_string_finish): Normal strings carry no location. + (push_file): Start new files uninitialized. + (peek_input, next_char_1): Optimize common cases by updating + location only on new input types. + (pop_input): Update to honor new input types. + (skip_line, push_string_finish): Fix regression in previous patch + when dnl is not followed by newline in included file. + (push_string_init): Initialize all fields of INPUT_STRING sooner. + (peek_token): Simplify. + (peek_input): Don't pop input files on peek, so that __file__ and + __line__ as last token of include file work correctly. + * doc/m4.texinfo (History): Mention 1.4.8. + (Answers): Split into sections, one per answer. + (Improved exch, Improved cleardivert, Improved fatal_error): New + nodes. + (Dnl, M4wrap, Location, M4exit, Improved fatal_error): Update to + new m4wrap location semantics. + (Changeword): Add test that caught the regression. + * NEWS: Document this. + + * src/macro.c (expand_macro): In macro expansion errors, report + line number at open parenthesis. + * src/input.c (next_token): Fix off-by-one bug in reporting end + of file in unterminated comment and string. + (file_names): New obstack, necessary since expand_macro now hangs + on to file names longer than the files remain open. + (input_init): Initialize new obstack. + (push_file): Use new obstack. Delay updates to current_file + until after expand_macro has restored state. + (peek_input, next_char_1): Update current_file if necessary. + (pop_wrapup): Release memory. + * doc/m4.texinfo (Macro Arguments, Changequote, Changecom): Catch + the off-by-one bug. + (Dnl): Update to the new location reporting rules. + * NEWS: Document these changes. + +2006-10-10 Eric Blake + + * src/macro.c (argc_stack, argv_stack): New variables for sharing + obstacks across multiple macro calls. + (expand_input): Initialize and tear down stack once per input + file, instead of once per macro. + (expand_macro): Reuse existing stacks when possible. + (collect_arguments): Simplify slightly. + + * src/path.c (include_env_init): Fix botched patch application. + Reported by Ralf Wildenhues. + +2006-10-09 Eric Blake + + * src/m4.c (usage, main): Detect write failures to stderr. + * src/builtin.c (m4_m4exit): Likewise. + * NEWS: Document this. + + * src/macro.c (expand_macro): Allow --nesting-limit=0 to remove + the limit. + * NEWS: Document this. + * doc/m4.texinfo (Invoking m4): Likewise. + +2006-10-09 Ralf Wildenhues + + * src/path.c (include_env_init): Copy the string returned + by getenv before overwriting it; POSIX disallows this. + +2006-10-09 Eric Blake + + * src/m4.c (main): Defer debugfile until after --help. + * configure.ac (AC_INIT): Bump version number. + * NEWS: Start changes of 1.4.7a. + +2006-09-25 Eric Blake + + Release 1.4.7: + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.6. + +2006-09-21 Eric Blake + + * doc/m4.texinfo (Invoking m4): Add clarification on option + processing behavior. + * THANKS: Update. + Reported by Mikhail Teterin. + + * bootstrap: Add --force option, based on idea from coreutils. + * README: Document that ./bootstrap and autoreconf are for + developers, and not lightly done in tarballs. + +2006-09-20 Eric Blake + + * src/m4.c (usage, OPTSTRING, main): Rename -e to -i, and give + deprecation warning on -e. + * doc/m4.texinfo (Invoking m4, Extensions): Document this. + * NEWS: Document this. + +2006-09-19 Eric Blake + + * src/m4.c (usage, long_options, main, DEBUGFILE_OPTION): Rename + -o/--error-output to --debugfile, and deprecate the former. This + will allow a future release to be more consistent with other GNU + tools, with -o/--output affecting stdout, not debug. + * doc/m4.texinfo (Invoking m4, Debug Output): Document this. + * NEWS: Document this. + +2006-09-14 Eric Blake + + * src/m4.c (main): Warn on deprecated options -B, -S, -T, -N, + --diversions. `m4 --help --version' now displays help, not + version. + (interactive, frozen_file_to_read, frozen_file_to_write): Move to + smaller scope. + (show_help, show_version): No longer needed. + (long_options, DIVERSIONS_OPTION): Backport patch from head to + distinguish between -N and --diversions in warning. + * doc/m4.texinfo (Invoking m4): Document this. + * NEWS: Likewise. + +2006-09-11 Eric Blake + + * src/Makefile.am (m4_LDADD): Add any gnulib dependent libraries. + * src/debug.c (debug_flush_files) [UNIX]: Flush stdin if it is + seekable. + (debug_set_file): Use STDOUT_FILENO. + * src/builtin.c (m4_m4exit): Flush stdin before exiting, to comply + with POSIX in regards to unread input. + * NEWS: Document this fix. + * doc/m4.texinfo (Syscmd, Esyscmd, M4exit): Likewise. + +2006-09-07 Eric Blake + + * m4/gnulib-cache.m4: Update to newer gnulib-tool. + * src/m4.h (push_file): Change prototype. + * src/input.c (push_file, peek_input, next_char_1): Only call getc + once at EOF, to avoid double ^D on terminal stdin; regression from + 2006-09-04. + (push_file, pop_file): Allow reading stdin twice. + * src/m4.c (main): Likewise. + * src/builtin.c (include): Update caller. + * NEWS: Document this change. + * doc/m4.texinfo (Invoking m4, Incompatibilities): Likewise. + (Syscmd): Add a test that failed before this patch. + +2006-09-07 Ralf Wildenhues + + * checks/check-them: Quote $pwd. + +2006-09-05 Eric Blake + + * src/builtin.c (define_macro): Warn on invalid macro name. + * NEWS: Document this change. + * doc/m4.texinfo: Fix typos. + (Invoking m4, Macro Arguments, Pseudo Arguments, Defn, Indir) + (Ifelse): Backport some improvements from head. + +2006-09-04 Eric Blake + + * doc/m4.texinfo (Changeword): Skip test on mingw, where the + native echo is braindead. + * checks/check-them (strip_needed): Ignore \r in output. Now the + testsuite will pass when cross-compiling from cygwin to mingw. + + * src/input.c (peek_input): Fix regression in handling macro + without arguments as last token in file; debian bug 385720. + (next_token): Always consume an input character. + Reported by Andreas Schultz. + * configure.ac (AC_INIT): Bump version number. + * NEWS: Document this fix. + * doc/m4.texinfo (History): Mention next version. + (Changeword): Add example that exposes this bug. + * THANKS: Update. + +2006-08-25 Eric Blake + + Release 1.4.6: + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.5. + + * Makefile.maint (web-manual): Give up on VPATH build during + distribution. But distributions are made so infrequently that + this is not too much of a hardship. + * Makefile.am (MAINTAINERCLEANFILES): Avoid error if lib/CVS/ + exists. + +2006-08-24 Eric Blake + + * src/builtin.c (m4_index, m4_substr, m4_translit): Similar to + Solaris, produce output on just one argument. + (m4_regexp, m4_patsubst): For consistency, do likewise. + (m4_patsubst): Allow zero-length match at end of string. + * doc/m4.texinfo (Sysval): Fix overfull hbox. + (Bugs, Macro Arguments): Minor fixes. + (Other tokens): Rearrange node order. + (Index macro, Substr, Translit, Regexp, Patsubst): Add tests. + * NEWS: Document these fixes. + +2006-08-22 Eric Blake + + * src/input.c (pop_input): Avoid empty filename with -di option. + * src/debug.c (debug_message_prefix): Put space before message. + + * m4/gnulib-cache.m4: We don't explicitly use alloca module. + + * m4/gnulib-cache.m4: Augment with gnulib-tool --import gnupload. + * Makefile.maint (fetch): Simplify, now that we can use gnupload. + + * checks/check-them: State why a test is skipped. + * doc/m4.texinfo (Changeword, Sysval, Maketemp): Likewise. + + * ChangeLog: Add copyright. + * AUTHORS: Likewise. + * BACKLOG: Likewise. + * README: Likewise. + * THANKS: Likewise. + * TODO: Likewise. + * examples/COPYING: New file, add copyright for all the examples. + * checks/get-them: Put copyright on testsuite files. + +2006-08-18 Eric Blake + + Don't let unrelated child processes see too many files. + * m4/gnulib-cache.m4: Augment with gnulib-tool --import cloexec. + * src/builtin.c (m4_esyscmd, m4_regexp, m4_patsubst): Fix + spelling in error message. + * src/debug.c [!__STDC__]: Assume C89, and nuke old varargs.h. + (debug_set_output): Close debug file on exec. + * src/m4.h (includes): Add cloexec.h. + * src/output.c (make_room_for): Close diversions on exec. + * src/path.c (path_search): Close include files on exec. + * NEWS: Document this. + + Regular expressions were leaking memory. + * src/builtin.c (init_pattern_buffer, free_pattern_buffer): New + helper methods. + (m4_regexp, m4_patsubst): Avoid memory leak. + * src/input.c (init_pattern_buffer) [ENABLE_CHANGEWORD]: Make + static. + (set_word_regexp) [ENABLE_CHANGEWORD]: Avoid memory leak. Change + from O(n^2) to O(n) for calculating word_start. + (next_token, peek_token) [ENABLE_CHANGEWORD]: Treat word_start as + O(1) bitmap, not O(n) search string. + * NEWS: Document this fix. + +2006-08-17 Eric Blake + + * NEWS: Document previous checkin. + + * src/builtin.c (substitute): Avoid core dump when accessing + beyond bound of regular expression. + Reported by Karl Nelson. + * doc/m4.texinfo (Regexp): Add example that causes core dump on + some architectures prior to this patch. + * THANKS: Updated. + +2006-08-16 Eric Blake + + * doc/m4.texinfo (Invoking m4, Debug Output): Fix wording to be + clear that dumpdef does not always go to stderr. + + * src/builtin.c (m4_errprint): Flush buffers before printing to + stderr. + * THANKS: Updated. + +2006-08-15 Eric Blake + + * src/builtin.c (m4_m4wrap, m4_errprint, m4_shift): Make blind, + per debian bug 96075. + * doc/m4.texinfo (Loops, M4wrap, Errprint): Document this change. + (Changeword): Don't use shift as an example of a swallowed word. + (Divert): Discuss fact that divert is an English word. + Reported by Richard A Nelson. + +2006-08-14 Eric Blake + + * doc/m4.texinfo (Invoking m4): Minor fixes. + +2006-08-12 Eric Blake + + * doc/m4.texinfo (Arguments): Hint at better exch macro. + (Answers): Provide a better definition. + +2006-08-09 Eric Blake + + * doc/m4.texinfo (Incompatibilities): Document that m4 does not + yet understand locales. + * NEWS: Fix wording of a few items. + +2006-08-08 Eric Blake + + Avoid printing `NONE:0:' in error messages. + * src/m4.h (m4_error_at_line): New function. + * src/m4.c (m4_error_at_line): Implement. + * src/input.c (skip_line, input_init, next_token): Use "", not + "NONE", for no file, since NONE can be a real file name. + * src/macro.c (expand_argument): Likewise. + * src/debug.c (debug_message_prefix, trace_header): Check for + current file. + * doc/m4.texinfo (Dnl, M4wrap): Adjust accordingly. + (Location): Document that synclines and internal message format + are not impacted by redefining these macros. + (M4exit): Hint at bug in fatal_error. + (Answers): Provide workaround to match m4 output. + + * m4/gnulib-cache.m4: Augment with gnulib-tool --import verror. + * src/m4.h (m4_error): New function. + (M4ERROR, M4ERROR_AT_LINE): Reimplement without hacking around + error module deficiencies. + (reference_error, suppress_line): No longer needed. + * src/m4.c (m4_error): Implement. + (main): No longer need to install error callback. + +2006-08-04 Eric Blake + + * src/m4.h (program_name): Declare. + (suppress_line): New variable. + (M4ERROR_AT_LINE): New macro. + * src/m4.c (reference_error, main): Follow GNU Coding Standards + for error message format. + * src/input.c (skip_line, next_token): Use M4ERROR_AT_LINE. + * src/macro.c (expand_argument): Likewise. + * checks/check-them (examples): Adjust to new message format. + * src/builtin.c (m4___program__): New builtin. + * doc/m4.texinfo (Location): Split from Errprint into new node, + and document __program__. + (Builtin, Ifdef, Ifelse, Dumpdef, Trace, Debug Output, Dnl) + (Include, Regexp, Patsubst, Incr, Eval): Adjust error message + format. + (Extensions): Document __program__. + * NEWS: Document this change. + +2006-08-03 Eric Blake + + Don't confuse leading `(' in comment or quote with start of + argument collection. + * src/m4.h (enum token_type): Add TOKEN_OPEN, TOKEN_COMMA, + TOKEN_CLOSE. + (peek_input): Make private to input.c. + (peek_token): New prototype. + * src/input.c (default_word_regexp): Reduce ifdefs. + (peek_input): Make static. + (next_token): Return new token types. + (match_input, MATCH): Add argument consume, which controls + whether match should be pushed back. + (peek_token): New function. + (token_type_string) [DEBUG_INPUT]: New function. + * src/macro.c (expand_token, expand_argument, collect_arguments): + Handle new token types. + * doc/m4.texinfo (Changequote, Changecom): Document this. + * NEWS: Document this. + + * src/stackovf.c (setup_stackovf_trap): Free memory on failure. + + * src/stackovf.c (setup_stackovf_trap): Gracefully avoid stack + overflow detection when sigstack exists but is not implemented. + Fixes debian bug 154053. + * THANKS: Updated. + Reported by David Perlin. + +2006-08-02 Eric Blake + + * src/input.c (MATCH): Fix EOF detection on multi-byte comment + close. + +2006-08-01 Eric Blake + + * src/input.c (skip_line, next_token): Remember current file in + case input file ends abruptly. Addresses debian bug 175365. + (pop_input): Defer freeing storage that holds previous file + name... + (pop_wrapup): to here, after error message is issued. + * src/macro.c (expand_argument): Remember current file in case + input file ends abruptly. + * doc/m4.texinfo (Macro Arguments, Dnl, Changequote, Changecom) + (M4wrap): Adjust testsuite accordingly. + (Errprint): Document line number limitation of m4wrap. + * NEWS: Document this fix. + * THANKS: Update. + +2006-07-31 Eric Blake + + * src/input.c (peek_input, next_char, match_input): Be eight-bit + clean; fixes debian bug 311378. + * doc/m4.texinfo (Syntax): Describe eight-bit handling. + (Changequote, Changecom): Add examples to test this. + * NEWS: Document this fix. + * THANKS: Update. + Reported by Steven Augart. + + * doc/m4.texinfo: Whitespace fix. + * checks/get-them: Avoid exceeding 14-char file name limit. + * THANKS: Update. + +2006-07-30 Eric Blake + + * src/path.c (path_search): Detect allocation failure. + + Use native free when it is good enough. + * m4/gnulib-cache.m4: Augment with gnulib-tool --import free. + * src/builtin.c (define_user_macro, m4_regexp, m4_patsubst): + Adjust calls. + * src/symtab.c (free_symbol): Likewise. + * src/m4.c (xfree, main): Likewise. + * src/m4.h (obstack_chunk_free): Likewise. + * src/path.c (path_search): Likewise. + * src/input.c (pop_wrapup, set_quotes, set_comment): Likewise. + + * doc/m4.texinfo (Errprint): Add example for last patch. + * checks/check-them: Account for VPATH in latest example. + +2006-07-29 Eric Blake + + * src/path.c (path_search): Add result parameter, so that + -I can be accounted for. Debian bug 53685. + * src/m4.h (path_search): Update prototype. + * src/m4.c (main): Adjust callers. + * src/freeze.c (reload_frozen_state): Likewise. + * src/builtin.c (include, m4_undivert): Likewise. + * NEWS: Document this change. + Reported by Nicolas Lichtmaier. + +2006-07-28 Eric Blake + + * Makefile.am (MAINTAINERCLEANFILES): Fix typo that tripped up + several non-GNU makes. + * src/stackovf.c (setup_stackovf_trap): Missed _ from yesterday. + * src/m4.h: Likewise. + * src/input.c (push_wrapup): Avoid compiler warning with Solaris + /usr/ccs/bin/ucbcc. + +2006-07-27 Eric Blake + + * doc/m4.texinfo: Use @acronym{GNU} throughout. + (History): Update for 1.4.6. + + * src/m4.h (_): Remove K&R cruft. + * src/builtin.c: Likewise. + * src/debug.c: Likewise. + * src/eval.c: Likewise. + * src/macro.c: Likewise. + * src/stackovf.c: Likewise. + + * doc/Makefile.am (m4.1): Improve man page. + * src/m4.c (usage): Improve --help output, including adding the + bug reporting address. + (main): Follow GNU Coding Standards for --version output. + +2006-07-26 Eric Blake + + * doc/m4.texinfo: Use begin-quote, end-quote, begin-comment, and + end-comment consistently, to match POSIX. + + * doc/m4.texinfo (Macro Arguments, Changequote, Changecom) + (Dnl, M4wrap, Include): Document EOF issues, and add examples. + (Incompatibilities): Document incompatibility of changecom + vs. macro names, and of EOF in include. + * src/input.c (next_token): Reject unterminated comments at EOF. + (skip_line): Warn on unterminated dnl at EOF. + * NEWS: Document these changes. + +2006-07-25 Eric Blake + + * m4/gnulib-cache.m4: Update to reflect gnulib's split of + stdio-safer into fopen-safer and tmpfile-safer. + * src/m4.c: Remove redundant include. + +2006-07-24 Eric Blake + + Fix bugs related to stream handling. + * m4/gnulib-cache.m4: Augment with gnulib-tool --import + unlocked-io stdio-safer stdlib-safer close-stream. + * configure.ac (AC_CHECK_FUNCS_ONCE): Assume tmpfile; it can be + provided by gnulib if needed. + * src/output.c [! HAVE_TMPFILE]: Likewise. + * src/m4.h (includes): Replace unistd, stdio, and stdlib with + their safer counterparts. + (retcode): New global variable. + * src/input.c (pop_input): Check for read failure. + * src/freeze.c (reload_frozen_state): Likewise. + (produce_frozen_state): Check for write failure. + * src/debug.c (debug_set_file): Likewise. + * src/m4.c (usage, main): Likewise. + (retcode): Make global. + * src/builtin.c (m4_m4exit): Likewise. Ensure that the exit + status is non-zero except when everything succeeds. + * doc/m4.texinfo (M4exit): Document these changes. + (Incompatibilities): Remove documentation of bug now fixed. + * NEWS: Document these fixes. + +2006-07-22 Eric Blake + + * src/format.c (format): Avoid compiler warning that str may be + used uninitialized. + +2006-07-21 Eric Blake + + * src/m4.h [UNIX]: Add more platforms that are close enough to + categorize as UNIX, but which don't predefine __unix__. + Reported by Nelson H. F. Beebe. + +2006-07-20 Eric Blake + + * m4/gnulib-cache.m4: gnulib-tool has changed again. Regenerate + to explicitly ask for --assume-autoconf=2.60. + +2006-07-19 Eric Blake + + * doc/m4.texinfo (Sysval): Avoid kill -1, since ksh traps SIGHUP + and exits normally with 129. + Reported by Nelson H. F. Beebe. + * THANKS: Update. + + * src/m4.h (EXIT_MISMATCH): Define. + * src/freeze.c (reload_frozen_state): Detect version mismatch, by + exiting with status 63. + * src/m4.c (usage): Document this. + * doc/m4.texinfo (Invoking m4, Using frozen files): Likewise. + * NEWS: Likewise. + + * doc/m4.texinfo (copying): Relax restriction on front-cover and + back-cover texts. + +2006-07-17 Eric Blake + + * src/format.c (format): Support F, g, and G specifiers. + * doc/m4.texinfo (Format): Document this. + * NEWS: Document this addition. + + * doc/m4.texinfo (Builtin): Delete redundant text. + + * configure.ac (AC_INIT): Bump version number. + * src/builtin.c (substitute): Bah. Fix buffer overrun. + * NEWS: Document this fix. + +2006-07-15 Eric Blake + + Release 1.4.5: + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.4. + + * src/m4.c (usage): Document exit status. + * doc/m4.texinfo: Use `exit status', not `exit code'. + (Invoking m4): Document exit status. + + * bootstrap: Backport --help, --version from head. + (func_update): New function, for easily grabbing up-to-date files + from gnulib. + * Makefile.maint (web-manual): Fix for VPATH builds. + +2006-07-14 Eric Blake + + * doc/m4.texinfo: Global cleanup. Avoid @code{...}'d, as it + looks bad in info. Use @deffn rather than @example for + describing prototypes. Fix awkward wording and grammar. + + * src/builtin.c (substitute): Warn on bad escape sequences. + Ignore trailing backslash. + * doc/m4.texinfo (Regexp): Add documentation for this. + * NEWS: Document this change. + + * src/builtin.c (m4_format, m4_indir): Warn on too few arguments. + * doc/m4.texinfo (Defn, Builtin, Debug Levels, Debug Output): Add + more examples. + (Dnl): Update example to show side effects. + * checks/get-them: Generate three digit test names. + * checks/Makefile.in (CHECKS): Accomodate 100+ tests. + +2006-07-13 Eric Blake + + * src/input.c (input_init): Simplify. + (set_word_regexp): Treat empty string as default, since empty + regexp would disable word parsing. + * src/m4.c (user_word_regexp): Default to empty string. + * src/builtin.c (builtin_tab): Make changeword blind. + * doc/m4.texinfo (Changeword): Document this. + * NEWS: Document this. + * TODO: Knock off completed items. + + * src/builtin.c (m4_undefine, m4_popdef): Visit all arguments, not + just the first. + * doc/m4.texinfo (Undefine, Pushdef): Test this. + * NEWS: Document this change. + + * src/builtin.c (numeric_arg): Treat empty string as 0, with a + warning. Detect quoted leading space and overflow as warnings. + (m4_eval): Treat empty radix as 10, and allow output in radix 1. + Treat width as minimum number of digits, as required by POSIX. + (m4_ifdef, m4_divert, m4_m4exit, m4_translit): Ignore extra + arguments. + (m4_substr): Likewise. Silently treat empty start as 0. + (m4_undivert): Treat ` 1a' as file, not diversion 1. + * src/eval.c (eval_lex): Parse radix 1 numbers. + * doc/m4.texinfo (Invoking m4): Fix wording; there is more than + one type of warning. + (Manual): Document behavior of numeric parsing of empty string. + (Divert, Incr): Document error handling. + (Eval): Document radices better. + (Incompatibilities): Document translit incompatibility. + * NEWS: Document these changes. + + * Makefile.maint (fetch): Get gendocs from gnulib, not texinfo. + (web-manual): Simplify. + * m4/gnulib-cache.m4: Augment with gnulib-tool --import gendocs. + * Makefile.am (EXTRA_DIST): Distribute gendocs.sh. + (MAINTAINERCLEANFILES): Clean it as well. + * doc/Makefile.am (EXTRA_DIST): Distribute gendocs_template. + (MAINTAINERCLEANFILES): Clean it as well. + +2006-07-12 Eric Blake + + * doc/m4.texinfo (Extensions): Document how to overcome + implementation difference in > 9 positional parameters. + + * src/m4.c (usage): Sort within sections. + (nesting_limit): Raise default from 250 to 1024. + * doc/m4.texinfo: Use file name, not filename, per GNU coding + standard. Use @option where appropriate. + (Invoking m4): Sort to match --help output. + (Debug Levels): Sort. + (Frozen files): Sort and break into two nodes. + + * src/m4.c (nesting_limit): Raise default from 250 to 1024. + * NEWS: Document raised -L limit. + +2006-07-11 Eric Blake + + * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New macro, to + stress-test changeword before a release. + * doc/m4.texinfo: More doc cleanups. + (Copying This Manual): New node; actually include the FDL in the + documentation. + * doc/Makefile.am (m4_TEXINFOS): Mention dependence on fdl.texi. + * m4/gnulib-cache.m4: Augment with gnulib-tool --import fdl. + * NEWS: Mention documentation improvements. + + * src/m4.h (OS2): New platform macro. + * src/builtin.c (predefined_tab) [OS2]: Use it to give OS/2 a + platform macro. + * doc/m4.texinfo (Platform macros): Document it. + (Sysval): Remove non-portable test of system(""). + * NEWS: Document this change. + Reported by Andreas Buening. + +2006-07-09 Eric Blake + + * doc/m4.texinfo (Undivert): Fix typo in last commit. + * src/m4.c (usage): Document M4PATH. + * src/path.c (path_search): Reject empty string. + * src/output.c (insert_diversion): Ignore diversion 0. + * src/builtin.c (m4_undivert): Ignore empty string. + * NEWS: Document this fix. + +2006-07-08 Eric Blake + + * checks/get-them: Make filtering easier. + * checks/check-them: Filter non-input lines, so line counts are + more realistic in the documentation, and so changeword tests work + even when dnl is disabled. + * doc/m4.texinfo: Adjust example line numbers. Clean up + front-matter, following autoconf's example. + (Changeword): Enable tests, skipping if changeword not supported. + (Define, Defn, Ifelse): Backport more examples from head. + (Input processing, Answers): New nodes, backported from head. + (Include): Expand test to cover empty filename. + (Undivert): Add test of undivert(0). + +2006-07-07 Ralf Wildenhues + + * doc/m4.texinfo: Fix spelling errors. + +2006-07-07 Eric Blake + + * THANKS: Update. + + * doc/Makefile.am (m4.1): No need to go through a temporary file; + this also ensures timestamps are updated. + * src/m4.h (includes): Require config.h. Assume string.h, + stdlib.h, errno. Include error.h, exit.h, and xalloc.h rather + than prototyping ourselves. + (builtin_func): Add parameter type-checking. + (voidstar): Delete, now that we assume C89. + * src/builtin.c, src/m4.c, src/macro.c, src/symtab.c: All users of + voidstar changed. + * src/m4.c (xfree) [WITH_DMALLOC]: Avoid clash with dmalloc's + xfree. + +2006-07-06 Eric Blake + + * m4/gnulib-cache.m4: Augment with gnulib-tool --import + binary-io. + * src/m4.h (includes): Add binary-io.h for O_BINARY. + * src/freeze.c (produce_frozen_state): Use O_BINARY to remove + #ifdef. Fixes patch from 2005-02-03 for cygwin. + * NEWS: Mention this fix. + + * configure.ac (FUNC_SYSTEM_BROKEN): New check for OS/2 bug. + * src/builtin.c (m4_syscmd): Work around OS/2 bug. + + * Makefile.am (SUBDIRS): Build . before src, so that autoheader + runs first when needed. + * doc/Makefile.am (m4.1): Backport rule from CVS head: build m4.1 + once in srcdir rather than multiple times in VPATH builds. + +2006-07-03 Eric Blake + + * checks/check-them: Use portable = in test. + * src/Makefile.am (AM_CPPFLAGS): Omit space between -I and + directory, as required by Solaris cc. Include built headers, as + required by Solaris make in VPATH build. + * checks/Makefile.in: Use $(srcdir) where needed. + (CHECKS): Factor $(srcdir) into macro. + (DISTFILES): Likewise. Automake takes care of distributing + Makefile.in. + (dist): Simplify. + (Makefile): Use modern syntax of config.status. + * doc/m4.texinfo (Loops, Include, Undivert, Incompatibilities): + Avoid overfull and underfull hboxes in dvi. + + Fix 'make check' in VPATH build. All files included by testsuite + now live in a single directory. Use forloop.m4 in testsuite. + * checks/incl.m4, checks/foo, checks/wrapfifo.m4: Move from + here... + * examples/incl.m4, examples/foo, examples/wrapfifo.m4: ...to + here. + * checks/Makefile.in (DISTFILES): Don't distribute moved files. + * examples/Makefile.am (EXTRA_DIST): Distribute new files. + * checks/check-them: Avoid s/// when filename is in pattern. + * examples/forloop.m4: Fix to match documentation. + * doc/m4.texinfo (Include, Undivert, Incompatibilities): Reflect + new locations. + (Loops, Format): Actually use forloop.m4 in tests. + +2006-07-02 Eric Blake + + * checks/Makefile.in (exec_prefix, prefix): New macros, so that + $(bindir) works in installcheck. + (check, installcheck): No longer change directory, so that + distcheck works with a read-only builddir. + * checks/check-them: Work when pwd is no longer builddir. + +2006-07-01 Eric Blake + + * GNUmakefile: New file, borrowed from coreutils. + * Makefile.am (EXTRA_DIST): Distribute GNUmakefile. + * Makefile.maint (Makefile): Delete this rule, now that + GNUmakefile includes Makefile. + +2006-06-30 Eric Blake + + For compatibility with other m4 implementations, sysval returns + signal<<8 rather than 0 if syscmd is terminated by a signal. + * configure.ac (AC_CHECK_HEADERS_ONCE): Check for sys/wait.h. + * src/builtin.c (include): Include sys/wait.h when stdlib.h does + not provide wait macros. + (WTERMSIG, WIFSIGNALED, WIFEXITED): More fallback macros. + (M4SYSVAL_EXITBITS, M4SYSVAL_TERMSIGBITS): New helper macros. + (m4_esyscmd): Set sysval to -1 on failure. + (m4_sysval): Print 127 on failure, and accomodate signals if they + are detectable. + * NEWS: Document this change. + * doc/m4.texinfo (Platform macros, Esyscmd, Sysval): Fix typos in + last commit. + * checks/check-them: Likewise. + * src/debug.c (debug_set_file): Work around mingw fstat bug. + + * src/m4.h (UNIX, W32_NATIVE): Improve platform detection macros. + * src/freeze.c (produce_frozen_state): Use new spelling of + platform macro. + * src/builtin.c (predefined_tab): Add __windows__ on non-unix + platforms. + (m4_syscmd, m4_esyscmd): The empty command is successful. + * doc/m4.texinfo (Shell commands): Rename from UNIX commands. + Document platform-dependence of system(). + (Syscmd): Add example. + (Esyscmd): Make example more robust, and actually demonstrate + rescanning. + (Sysval): Expand test to cover esyscmd code path, and to check + that empty command is successful. Add conditional check for + signal behavior. + (Other Incompatibilities): Move platform macros from here... + (Platform macros): ...to this new node. Add windows macro. + Check that exactly one platform macro is provided. + * checks/check-them: Improve trap cleanup. Tolerate dirname and + .exe in error messages. Allow for skipping checks. + * configure.ac (HAVE_EFGCVT): Kill dead configure check. + * NEWS: Document platform macros. + +2006-06-29 Eric Blake + + Fix buffer overrun bug. + * m4/gnulib-cache.m4: Augment with gnulib-tool --import + xvasprintf. + * src/format.c [HAVE_EFGCVT]: Delete this code, and use *printf + variant instead, since [efg]cvt are obsolete and our use of them + was buggy (savannah sr #104303). + (format): Fix buffer overflow by using xasprintf. + * doc/m4.texinfo (Format): Expand format test to catch both bugs. + * NEWS: Document this fix. + + * configure.ac (AC_CANONICAL_HOST, AC_CANONICAL_BUILD): Allow + cross-compilation. + (AC_CACHE_CHECK): Cache search for ecvt. + +2006-06-27 Eric Blake + + * doc/m4.texinfo (Eval): Document 32-bit signed limitations + required by POSIX, and add example that exposed core dump on x86 + architectures. + (Incompatibilities): Document incompatibility in eval precedence. + * src/eval.c (shift_term): Explicitly mask, to avoid undefined + behavior. + (mult_term): Explicitly check for -1, to avoid SIGFPE on x86. + * NEWS: Document this change. + + * doc/m4.texinfo: Use @noindent consistently. + (Quoting Arguments): Document that unquoted parentheses group + arguments. + (Pseudo Arguments): Expand tests to show this. + (Incompatibilities): Contrast traditional behavior of + changequote. + +2006-06-24 Eric Blake + + * configure.ac (AC_PREREQ): Autoconf 2.60 is now released. + (AC_CHECK_HEADERS_ONCE): Use this new feature. + (AC_CHECK_FUNCS_ONCE): Likewise. + +2006-06-23 Eric Blake + + * doc/m4.texinfo: Quoting cleanup throughout - follow + autoconf-recommended style of one level of quote per parenthesis + in the normal case. Adjust error messages to match GNU coding + standards (and to allow 'make check' to pass again). + (Quoted strings, Inhibiting Invocation): Turn more examples into + tests. + (Comments): Resolve FIXME by adding example. + (Define): Add example about underquoting. + (Defn): Add example about use of $0. + (Indir, Format): Resolve FIXME done in last commit. + (Ifelse): Add example about creating blind macro. + (Debugging): Fix grammar. + (Dnl): Add example about dnl with arguments. + (M4wrap): Be explicit that LIFO order is non compliant, and will + change in m4 2.0. + (Undivert): Resolve FIXME by adding example. + (Frozen files): Document that m4wrap and sysval will not work + consistently until m4 2.0. + (Incompatibilities): Document another POSIX compliance bug, this + time with changequote. Document a traditional incompatibility + with partial input spanning file boundaries. + + Make error messages more consistent with GNU coding standards - + start with lower case, and don't end sentence with punctuation. + * src/debug.c (trace_pre): Update message wording. + * src/eval.c (evaluate, cmp_term, shift_term, mult_term): + Likewise. + * src/freeze.c (produce_frozen_state, issue_expect_message), + (reload_frozen_state): Likewise. + * src/input.c (push_string_init, pop_init, init_macro_token), + (peek_input, next_char_1, set_word_regexp, next_token): Likewise. + * src/m4.c (stackovf_handler, main): Likewise. + * src/macro.c (expand_token, expand_argument, call_macro), + (expand_macro): Likewise. + * src/output.c (make_room_for, output_text, insert_file), + (freeze_diversions): Likewise. + * src/symtab.c (symtab_init, lookup_symbol): Likewise. + + * src/builtin.c (builtin_tab): Make format and indir blind. + (substitute): Prefer "Warning:" vs. "ERROR:" in messages. + * NEWS: Mention the change to builtins. + +2006-06-22 Eric Blake + + Robustify frozen file format. + * src/freeze.c (reload_frozen_state): Add GET_DIRECTIVE helper + macro. Require V first, and only accept it once. For F, use + placeholder if builtin is not found, rather than warning. + * src/m4.h (m4_placeholder): New prototype. + * src/builtin.c: Unify error message style. + (m4_placeholder): New function, warn if invoked. + (builtin_tab): Add m4_placeholder. + (m4_defn): Warn if placeholder is encountered. + (find_builtin_by_addr): Handle placeholder. + (find_builtin_by_name): Return placeholder on failure. + (m4_builtin): Treat placeholder as undefined. + * doc/m4.texinfo (Frozen files): Document changes in V and F. + * NEWS: Document this change. + Reported by Bruno Haible. + + * doc/m4.texinfo: Whitespace cleanup. TABs are evil in texinfo. + (tabchar): New macro, so that 'make check' still works. + (Invoking m4): Document that ignored compatibility options -B, -S, + and -T each consume an argument. + * checks/get-them: Honor @tabchar{}. + + Avoid compiler warnings during -DDEBUG. + * src/m4.h (M4_GNUC_ATTRIBUTE, M4_GNUC_UNUSED): New macros. + [DEBUG]: Also imply DEBUG_OUTPUT and DEBUG_STKOVF. + * src/input.c (print_token) [DEBUG_INPUT]: Use correct format. + (lex_debug) [DEBUG_INPUT]: Fix to compile. Mark unused. + (next_token) [DEBUG_INPUT]: Print before returning. + * src/path.c (include_dump) [DEBUG_INCL]: Mark unused. + * src/symtab.c (symtab_debug) [DEBUG_SYM]: Mark unused. + + Avoid mkstemp bugs on various platforms. + * m4/gnulib-cache.c: Augment with gnulib-tool --import mkstemp. + * src/output.c [! HAVE_MKSTEMP]: Delete. + * configure.ac (AC_CHECK_FUNCS): Don't check for mkstemp. + * src/m4.h (mkstemp) [! HAVE_MKSTEMP]: Prototype, if needed. + * NEWS: Document this. + + * Makefile.am (EXTRA_DIST): Distribute gnulib-cache.m4. + Reported by Bruno Haible. + +2006-06-21 Eric Blake + + Avoid obsolete sigstack when POSIX sigaltstack is available. + * src/m4.c: Blindly assume signal.h, since stackovf.c and gnulib + do likewise. + * configure.ac (AC_CHECK_HEADERS): Likewise. + (AC_CHECK_TYPES): New check for siginfo_t, since siginfo.h is + obsolete and most hosts now have it in signal.h. + (AC_CHECK_MEMBERS): New check for sigaction.sa_sigaction. + (AC_CACHE_CHECK): Cache decision to use stackovf. + (AC_EGREP_HEADER): Switch to AC_CHECK_TYPES. + * src/stackovf.c (DEBUG_STACKOVF): Remove unused define. + (SA_RESETHAND, SA_SIGINFO): Provide fallback definitions, to + simplify later code. + (PARAM_STACKOVF, PARAM_NOSTACKOVF): Move further away from NULL, + in case of dereferencing a member of a NULL pointer. + (sigsegv_handler) [HAVE_STRUCT_SIGACTION_SA_SIGACTION]: Define a + POSIX handler. + (setup_stackovf_trap): Use NULL instead of 0 for pointers, use + EXIT_FAILURE in error, indent preprocessor directives. + [HAVE_SIGALTSTACK && HAVE_SIGINFO_T]: Depend on siginfo_t, not + siginfo.h. + [HAVE_SIGACTION && defined SA_ONSTACK]: Prefer POSIX handler. + Reported by Santiago Vila. + +2006-06-19 Eric Blake + + * THANKS: Update. + +2006-06-18 Andreas Buening (tiny change) + + * checks/Makefile.in (PATH_SEPARATOR): New macro. + (check, installcheck): Use it, for OS/2. + +2006-06-18 Eric Blake + + Consistently use "GNU M4" as package name, "m4" as executable + name. + * NEWS: Document previous fix. + * THANKS: Update. + * README: Fix grammar. Document that --enable-changeword is on + its last leg. + * doc/m4.texinfo (Top, Changeword): Likewise. + (Sysval): Enhance this test. + (History): Backport this section from CVS head, and update. + +2006-06-18 Bruno Haible (tiny change) + Eric Blake + + * src/builtin.c (WEXITSTATUS): Provide fallback definition. + (m4_esyscmd): Set sysval to 0xffff, to accomodate both + big-endian and little-endian wait status definitions. + (m4_sysval): Use WEXITSTATUS. + Reported by Andreas Buening. + +2006-06-18 Eric Blake + + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes in 1.4.4c. + +2006-06-17 Eric Blake + + Beta Release 1.4.4b: + * configure.ac (AC_INIT): Bump version number. + * NEWS: Describe changes since 1.4.4. + * Makefile.maint (cvs-news): Accomodate copyright line wrapping. + + * Makefile.am (MAINTAINERCLEANFILES): Clean files added by + bootstrap. + * checks/Makefile.in (maintainer-clean): Add missing target. + * COPYING: Remove generated file from CVS. + +2006-06-16 Eric Blake + + * checks/Makefile.in (DISTFILES): Distribute wrapfifo.m4. + +2006-06-15 Eric Blake + + * checks/wrapfifo.m4: New file. Use it... + * doc/m4.texinfo (Incompatibilities): here, in a new test case to + demonstrate how to get POSIX behavior of m4wrap prior to m4 2.0. + + * src/m4.h (to_uchar): New function. + * src/eval.c (eval_lex): Use it to avoid passing signed char to + isdigit, isalpha, isupper, islower, isspace, isalnum. + * src/builtin.c (expand_user_macro): Likewise. + * src/format.c (format): Likewise. + * src/macro.c (expand_argument): Likewise. + * NEWS: Document this security fix. + + Message cleanup. + * src/symtab.c (lookup_symbol): Use invalid, not illegal. + * src/freeze.c (reload_frozen_state): Fix typo in message. + (produce_frozen_state): Standardize on builtin, not built-in. + * src/builtin.c (numeric_arg, bad_argc): Likewise. + + * configure.ac (M4_EARLY, M4_INIT): Use gnulib. + (AC_PROG_RANLIB, AC_AIX, AC_MINIX, AC_CHECK_HEADERS), + (AC_FUNC_ALLOCA, AC_REPLACE_FUNCS): Avoid checks now done by + gnulib. + * Makefile.am (ACLOCAL_AMFLAGS): New entry, for gnulib. + * m4/gnulib-cache.m4: New file, from gnulib. + * bootstrap: Invoke gnulib-tool --update. + * src/m4.c (main): Cast away const. + * NEWS: Document that regex is updated. + * THANKS: Update. + +2006-06-08 Eric Blake + + * configure.ac (changeword): Work even when changeword is not a + macro. + (AC_PROG_AWK, AC_PROG_INSTALL, AC_PROG_MAKE_SET, AC_HEADER_STDC): + Delete; now done by automake. + (AC_ISC_POSIX, AC_C_CONST): Delete; now obsolete. + +2006-06-07 Eric Blake + + * lib/regex.c (bcmp_translate): Canonicalize type name. + * doc/Makefile.am (MAINTAINERCLEANFILES): Fix typo. + * configure.ac (changeword): Disable changeword for the creation + of configure, in case of bootstrapping with an m4 configured with + --enable-changeword. + + Distribute a rudimentary man page. + * Makefile.am (SUBDIRS): Move doc after src so that 'm4 --help' + can feed help2man. + * doc/Makefile.am (man_MANS, EXTRA_DIST, MAINTAINERDISTCLEAN), + (SUFFIXES, m4.1): New macros and rules to build m4.1. + +2006-06-06 Eric Blake + + * lib/regex.c (re_match_2_internal, bcmp_translate): Avoid + compiler warnings at -O2. + * lib/getopt.c (_getopt_internal): Likewise. + + Cleanup of previous patches. + * src/input.c (struct input_block): Remove traced member. + (push_macro, init_macro_token): Don't pass trace status around. + * src/m4.h (struct token_data): Remove traced member. + (struct symbol, struct builtin): Reduce unused space. + (TOKEN_DATA_FUNC): Simplify. + (TOKEN_DATA_FUNC_TRACED): Remove unused macro. + (push_macro, define_builtin): Remove unused parameter. + * src/builtin.c (define_builtin, builtin_init, define_macro), + (m4_defn): Don't pass trace status around. + * src/macro.c (expand_argument): Likewise. + * src/freeze.c (reload_frozen_state): Likewise. + * src/symtab.c: Whitespace cleanup. + * NEWS: Clean up wording. + * doc/m4.texinfo (Undefine, Dumpdef, Trace): Cleanup wording; + ensure tests actually expose bugs prior to today's patches. + + Trace status of builtins is no longer inherited across + define(...,defn(...)). Fixes bug that autom4te had been working + around. + * src/builtin.c (define_builtin): Don't override trace status. + * doc/m4.texinfo (Trace): Add test for this. + * NEWS: Document this. + + When changing macro definitions inside the arguments to the macro, + consistently preserve the old definition that was in effect before + argument collection, similar to the C pre-processor. + Reported by John Brzustowski. + * NEWS: Document this change. + * doc/m4.texinfo (Macro Arguments, Undefine, Dumpdef): Document + this policy, and add tests that expose core dumps prior to this + patch. + * src/m4.h (struct symbol): New members to track when a symbol is + still in use after removal from the symbol table. + (SYMBOL_PENDING_EXPANSIONS, SYMBOL_DELETED): Define. + (free_symbol): Prototype. + * src/macro.c (expand_macro): Track pending expansions of a + symbol. On completion, if a symbol is deleted and no longer + pending, free its memory. + * src/symtab.c (free_symbol): Export. Don't free memory if symbol + is still in use. + (lookup_symbol) : Create new entry when old entry + is still in use. + (lookup_symbol) : Mark entries still + in use as deleted and remove from the table without freeing + memory. + (symtab_print_list) [DEBUG_SYM]: More debug output. + + * src/symtab.c (hack_all_symbols): Allow certain modifications of + the symbol table during traversal. + * src/builtin.c (set_trace): Replace SYMBOL_DELETE with + SYMBOL_POPDEF, since only the latter is safe with + hack_all_symbols. + + Solve crash when passing "indir(`foo')" to "m4 -tfoo". + * src/symtab.c (lookup_symbol) : + Preserve placeholder when macro is being traced. + * src/builtin.c (m4_ifdef, m4_indir): A traced but undefined + symbol is not defined. + (set_trace): Remove placeholder when no longer traced. + (m4_traceon): On named traces, always reserve a slot in the + symbol table. + (m4_traceoff): Don't warn about untracing a nonexistent symbol. + * NEWS: Document new trace behavior. + * doc/m4.texinfo (Trace): Tracing by name now consistently works + no matter whether that macro is currently defined. + (Incompatibilities): Document differences between traditional and + GNU trace. + +2006-06-04 Paul Eggert (tiny change) + Eric Blake + + * src/m4.h (hash_table_size): Now size_t instead of int. + * src/m4.c (hash_table_size): Likewise. + (main): Adjust to this; use atol rather than atoi. + * src/symtab.c: Include , for CHAR_BIT. + (symtab_init, lookup_symbol, hack_all_symbols): + Use size_t for sizes and indexes, not int. + (symtab_print_list) [DEBUG_SYM]: Likewise. + (hash): Likewise. Don't case-fold in the hash function. + Shift by 7, not 3, for consistency with gnulib/lib/hash.c. + Don't assume hash word is 32 bits. + * NEWS: Document this change. + +2006-06-04 Eric Blake + + * src/symtab.c (symtab_debug, symtab_print_list) [DEBUG_SYM]: Fix + to allow compilation, for use in debugger. + (profiles, current_mode) [DEBUG_SYM]: New variables. + (show_profile, profile_strcmp) [DEBUG_SYM]: New methods for + determining hash table performance. + +2006-05-31 Eric Blake + John Brzustowski + + * src/input.c (input_stack): Delete; use current_input instead. + (wrapup_stack): Dynamically allocate, so that recursion is handled + properly. + (push_wrapup): Use current wrapup stack. + (pop_wrapup): Rotate wrapup stack to current, and create new + wrapup stack. + (input_init): Dynamically allocate stacks. + * NEWS: Update, now that recursive m4wrap can no longer cause + core dump. + +2006-05-31 Eric Blake + + * lib/getopt.c: Fix copyright year. + * lib/obstack.c: Ditto. + * src/builtin.c: Ditto. + +2006-05-30 Eric Blake + + * doc/m4.texinfo (M4wrap): Add test to expose m4wrap bug. + Reported by John Brzustowski. + (Incompatibilities): Document known POSIX incompatibilities. + * THANKS: Update. + +2006-05-29 Eric Blake + + * doc/m4.texinfo (Maketemp): Work even when running 'make check' + in read-only dir. + + Use automake. + * Makefile.am: New file. + * doc/Makefile.am: Ditto. + * examples/Makefile.am: Ditto. + * lib/Makefile.am: Ditto. + * src/Makefile.am: Ditto. + * acinclude.m4: New file, renamed from aclocal.m4. + * configure.ac (AM_INIT_AUTOMAKE): Invoke new macro. + (AC_ARG_PROGRAM): Now redundant. + (STACKOVF): Turn into automake conditional. + (AC_CONFIG_COMMANDS): stamp-h is a command, not a file. + * checks/Makefile.in: Converting this dir to automake was not + trivial; for now, just add missing targets demanded by top-level. + * INSTALL: Remove files that are now generated from CVS. + * Makefile.in: Ditto. + * aclocal.m4: Ditto. + * install-sh: Ditto. + * mkinstalldirs: Ditto. + * doc/Makefile.in: Ditto. + * doc/texinfo.tex: Ditto. + * examples/Makefile.in: Ditto. + * lib/Makefile.in: Ditto. + * src/Makefile.in: Ditto. + + * AUTHORS: Backport from CVS head, and update. + * doc/m4.texinfo (Changeword): Fix examples to match behavior. + +2006-05-27 Eric Blake + + * lib/regex.c (regex_compile): Kill compiler warnings. + * lib/getopt.c: Likewise. + * lib/obstack.c: Likewise. + * src/builtin.c (builtin_init): Likewise. + * src/path.c (path_search): Likewise. + + * doc/m4.texinfo: Fix usage of a vs. an. + (Loops, Include, Cleardiv, Patsubst, Format, M4exit): Kill + overfull hbox warnings. + (Inhibiting Invocation, Divert, Maketemp, M4exit): Add new tests. + + * configure.ac: Update to autoconf 2.59. Forbid ^M4_. Fix + quoting. + * aclocal.m4 (fp_PROG_CC_STDC): Delete; now covered by autoconf. + (fp_C_PROTOTYPES): Delete, GNU Coding Standards state we can now + assume C89. + (M4_WITH_DMALLOC): Rename from fp_WITH_DMALLOC. Fix quoting. + * src/m4.h (_): PROTOTYPES is no longer provided, assume C89. + * src/Makefile.in: Delete remains of ansi2knr. + * src/ansi2knr.1: Delete. + * src/ansi2knr.c: Delete. + +2006-05-25 Eric Blake + + * doc/m4.texinfo: Fix spelling errors. Use `invalid' instead of + `illegal'. + + * doc/m4.texinfo (Francois): No longer needed as a tex variable. + Reported by Karl Berry. + +2006-05-24 Eric Blake + + * Makefile.in (html): New target. + * doc/Makefile.in (html, m4.html): Likewise. + (MAKEINFOHTML): New macro. + * doc/m4.texinfo (Francois) [ifnottex]: Use newer texinfo + rendering. + (Regexp) [ifhtml]: Make cross-reference to emacs manual an + absolute URL. + Reported by Bob Badour. + + * THANKS: Update. Move reporter's email addresses here, instead + of in ChangeLog. + +2006-05-11 Eric Blake + + * THANKS: Update. + * doc/m4.texinfo (Changequote): Give testsuite exposure to bug + patched on 2005-12-04. + Reported by Ilya N. Golubev. + + * bootstrap: New file, so that generated files need not be stored + in CVS. + * Makefile.in (DISTFILES): Add bootstrap. + + Make testsuite less sensitive to doc changes. + * doc/m4.texinfo: Use m4.input instead of filename. + * checks/check-them (xerr): Turn m4.input into filename. + * checks/Makefile.in (dist): Depend on stamp-checks. + + Portability updates for OS/2. + * src/Makefile.in (EXEEXT, OBJEXT): Define. + (LINK): Use CFLAGS. + (.c.obj): Define. + * lib/Makefile.in (OBJEXT): Define. + (.c.obj): Define. + * doc/Makefile.in (install, uninstall): Install info files into + the dir listing. + Reported by Andreas Buening. + +2006-05-09 Eric Blake + + * install-sh: Update to newer upstream version. + * mkinstalldirs: Likewise. + Reported by Andreas Buening. + + * src/m4.c (main): Bump copyright year. + * Makefile.in (datarootdir): Define, for autoconf 2.59c. + * doc/Makefile.in (datarootdir): Likewise. + +2006-05-08 Eric Blake + + * THANKS: Update. + * doc/m4.texinfo (Bugs): Backport bug email address from head. + Reported by Stepan Kasal. + +2005-12-04 Ilya N. Golubev (tiny change) + + * input.c (match_input): Do not pass expression with side effect + to `obstack_grow'. Fix . + * NEWS: Updated. + +2005-12-04 Gary V. Vaughan (tiny change) + + * doc/m4.texinfo (How to debug macros and input): s/woould/would/ + Reported by Damian Menscher. + +2005-10-19 Gary V. Vaughan (tiny change) + + * configure.ac (AC_INIT): Bump to 1.4.4a. + +2005-10-19 Gary V. Vaughan (tiny change) + + Release 1.4.4: + * configure.ac (AC_INIT): Bump to 1.4.4. + * NEWS: Describe 1.4.4's changes. + * INSTALL, install-sh, doc/texinfo.tex: Updated from upstream. + +2005-10-17 John Gatewood Ham (tiny change) + + * src/m4.c: fix return code when non-existent files are processed + +2005-10-17 John Gatewood Ham (tiny change) + + * README: update email address for bug reports. + +2005-10-17 Gary V. Vaughan + + * doc/m4.info: Generated files are not kept in the repository. + +2005-05-01 Gary V. Vaughan + + The FSF are moving offices today. Changed their contact address + in all files from `59 Temple Place, Suite 330, MA 02111-1307' to + `51 Franklin Street, Fifth Floor, MA 02110-1301'. + + Also, some of the files here were never updated from the previous + '675 Mass Ave, Cambridge, MA 02139', so changed those to the + '51 Franklin Street, Fifth Floor, MA 02110-1301' address too. + +2005-03-31 Mike Frysinger + + * Makefile.in (bindir, infodir): Substitute from configure rather + than hardcode. + * doc/Makefile.in (infodir): Ditto. + * src/Makefile.in (bindir): Ditto. + * NEWS: Updated. + +2005-03-31 Gary V. Vaughan + + Changes needed to automate the release process for 1.4.3: + + * Makefile.in (dist): Make .tar.bz2 tarball too. + * Makefile.maint (TSDEPS_DIST): Remove m4/libtool.m4. + (cvs-news): Look 1 line further down for NEWS release number. + (cvs-dist): We don't use automake, so make dist is fine. + Remove double . before suffixes. + (cvs-release): Don't mention manual.html. + (fetch): Get latest gendocs files. + (web-manual): Rewritten to use gendoc for multiformat manuals. + * doc/gendocs.sh: Don't save an old version in m4 CVS! + * doc/m4.texinfo (Index): HFS+ (the file system on my Mac) is case + preserving, but case insensitive, so generating html docs per node + clashes between Index.html, the node file, and index.html, the + top-level of the document tree... + (Index macro): ...so renamed to this. Changed all references. + +2005-03-31 Gary V. Vaughan (tiny change) + + * configure.ac (AC_INIT): Bump to 1.4.3a. + +2005-03-31 Gary V. Vaughan (tiny change) + + Release 1.4.3: + * configure.in (AC_INIT): Bump to 1.4.3. + * NEWS: Describe 1.4.3's changes. + +2005-03-31 Gary V. Vaughan + + * Makefile.maint: New file with release rules, from CVS libtool. + * Makefile.in (DISTFILES): Add Makefile.maint. + * INSTALL, install-sh, doc/texinfo.tex: Updated to latest + canonical versions. + +2005-03-31 Eric Blake (tiny change) + + * doc/m4.texinfo (Patsubst): Re-add trailing space required by + checks/47.patsubst, with a redundant @comment to prevent emacs + from removing it accidentally again. + * checks/get-them: Allow for trailing spaces tucked behind + @comment marks. + +2005-03-31 Eric Blake (tiny change) + + * doc/Makefile.in (install, uninstall): Accomodate DESTDIR. + * src/Makefile.in (install, uninstall): Likewise. + +2005-02-07 Gary V. Vaughan + + * lib/regex.c, lib/regex.h: Reverted gnulib update, which broke + on Cygwin. + Reported by Eric Blake. + +2005-02-04 Gary V. Vaughan + + * lib/regex.c, lib/regex.h: Updated from gnulib. + * src/input.c (set_word_regexp): Don't change the word_regexp + unless it compiles correctly. + * NEWS: Updated. + Reported by Frank Schwidom. + + * Makefile.in (stamp-h): Regenerate config.h properly. + +2005-02-03 Gary V. Vaughan + + * configure.ac (AC_DEFINE): Fix overquoting of description + argument. + + * src/m4.h (__CYGWIN__, WIN32): Canonicalise Windows and Cygwin + recognition macros. + * src/freeze.c (produce_frozen_state): Use \n line-endings even + on Windows, so that the frozen file reader will work. + Reported by Josef T. Burger. + + * src/m4.c (main): Modernise the --version output. + +2005-02-03 Gary V. Vaughan + + Modernise the configury a little to prevent spurious errors from + Autoconf-2.59's autoreconf: + + * config.h.in: Renamed to... + * config-h.in: ...this to better support DOS 8.3 file systems. + * acconfig.h: Removed. + * configure.in: Renamed to... + * configure.ac: ...this, and AC_DEFINE used to declare config.h + entry comments. Slight reorganisation and reformatting. + * aclocal.m4: Use third argument to AC_DEFINE to declare config.h + entry comments. + (AC_INIT): Use a modern 3 argument call. + * Makefile.in, checks/Makefile.in, doc/Makefile.in, + examples/Makefile.in, lib/Makefile.in, src/Makefile.in: + s/PRODUCT/PACKAGE/g. + * Makefile.in (DISTFILES): Removed acconfig.h, configure.in, + config.h.in. Added configure.ac, config-h.in. + (stamp-h.in): Removed acconfig.h from dependencies. + (configure): Depends on configure.ac, not configure.in. + * doc/Makefile.in (stamp-vti): Ditto. + * src/freeze.c (produce_frozen_state), src/m4.c (main): Adjust for + difference between PRODUCT="m4" and PACKAGE="GNU M4". + * configure: Regenerated. + +2005-02-03 Noah Misch + + * src/output.c (mkstemp): Make non-static, and build regardless of + HAVE_TMPFILE; src/builtin.c also needs this replacement. + * NEWS: Update. + +2004-09-09 Vincent Lonngren + + * configure.in (AC_CHECK_HEADERS): Commit works best when you save + changes from your editor buffer first. + + * configure.in (AC_CHECK_HEADERS): Add signal.h, sys/signal.h. + * src/m4.c: And include them as appropriate. + * NEWS: Updated. + +2004-09-09 Andreas Schwab + + Refactoring of the string read case in next_char provides about a + 20% speedup of M4 as typically used by autoconf: + + * src/input.c (next_char_1): Renamed from next_char. + (next_char): New macro. + * NEWS: Updated. + +2004-08-21 Gary V. Vaughan + + * configure.in (VERSION): Bump to 1.4.2a. + +2004-08-19 Paul Eggert + + Release 1.4.2. + * configure.in (VERSION): Bump to 1.4.2. + * News: Describe 1.4.2's changes. + + * src/m4.c (reference_error): Preserve errno, since M4ERROR + relies on this. + * src/builtin.c (m4_esyscmd): Clear errno before calling popen. + (m4_maketemp): Clear errno before calling mkstemp. + * src/path.c (path_search): Don't let "free" trash errno when + returning NULL. + * src/output.c (insert_file): Don't assume errno has a valid + value simply because fread returns zero. This fixes a + portability bug reported by Marion Hakanson in + . + +2004-06-09 Gary V. Vaughan + + * configure.in (VERSION): Bump to 1.4.1a. + * NEWS: Place holder for next stable release. + +2004-06-03 Paul Eggert + + Release 1.4.1. + * configure.in (VERSION): Bump to 1.4.1. + * NEWS: Describe 1.4.1's changes. + + * aclocal.m4 (fp_PROG_CC_STDC): Use AC_DEFUN, not define, to + pacify Autoconf 2.59. + + * doc/m4.texinfo: Insert commas after @xref's that lack them, + to pacify Texinfo 4.7. + * doc/Makefile.in (info): Remove info-1, info-2, info-3. + + * src/m4.h, src/debug.c: Use #ifdef __STDC__, not #if __STDC__, to + pacify Sun C compilers. + +2003-09-28 Akim Demaille + + * src/symtab.c (lookup_symbol): Fix an uninitialized-variable + botch. + +2003-09-03 Santiago Vila + + * examples/stackovf.sh: Use tempfile if available. + +2001-04-02 Robert Bihlmeyer + + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=92629 + * src/output.c (m4_insert_file): Do not mix buffered and + unbuffered I/O, as this breaks on the Hurd. (trivial change) + +2001-02-01 Santiago Vila + + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=84451 + * src/m4.c (main): Fix format vulnerabilities. (trivial change) + +2001-02-01 Matt Kraai + + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=84416 + * doc/m4.texinfo (Maketemp): Change maketemp to refer to a new, + empty file rather than to a nonexistent file. This closes a common + security hole. + * src/builtin.c (m4_maketemp): Implement the above, by using + mkstemp rather than mktemp. (trivial change) + +2000-01-09 Akim Demaille + + * src/builtin.c (expand_ranges): Added break after trailing dash. + This caused misbehaviors on some systems. + +Sat Nov 5 15:52:47 1994 Francois Pinard (pinard@icule) + + Release 1.4. + * doc/Makefile.in (realclean): Also remove stamp-vti. + Reported by Eric Backus. + +Wed Nov 2 00:47:53 1994 Francois Pinard (pinard@icule) + + * src/freeze.c (produce_frozen_state): If the frozen file cannot + be opened, return immediately after producing the error message. + Reported by Andreas Schwab. + + * configure.in: Check for const only after having found possible + ANSIfying compiler flags, this is of no use to check it before. + Reported by Alexander Lehmann. + +Tue Nov 1 22:02:37 1994 Francois Pinard (pinard@icule) + + * src/macro.c (collect_arguments): Cast obstack arguments to + (voidstar), so avoiding compiler warnings. + Reported by Joseph E. Sacco. + + * src/freeze.c (produce_frozen_state): Cast printed lengths to + (int) so they correspond to %d format items. + Reported by Joseph E. Sacco. + + * src/m4.c (main): Cast the argument to xfree to (voidstar). + * src/symtab.c (free_symbol): Idem. + Reported by Karl Vogel. + +Mon Oct 31 02:11:19 1994 Francois Pinard (pinard@icule) + + * Makefile.in (DISTFILES): Distribute BACKLOG. + + * configure.in: Define PRODUCT and VERSION. + * acconfig.h: Document PRODUCT and VERSION. + * src/m4.c, src/freeze.c: Use PRODUCT and VERSION instead of the + constant string m4 and variable or parameter named version. + +Sun Oct 30 08:13:03 1994 Francois Pinard (pinard@icule) + + * src/m4.h, src/debug.c: Replace all #ifdef __STDC__ by #if + __STDC__. Alliant FX/2800 Concentrix 2.2 (i860-BSD4.3) compiler + defines __STDC__ to 0, for indicating it is *not* ANSI! + Reported by Kaveh R. Ghazi. + + * configure.in: Added obsolescent tests for AIX and Minix. + + * doc/Makefile.in (mostlyclean): Remove texclean in dependencies, + which texclean does not exist anymore. + Reported by Eric Backus, Jim Meyering, John David Anglin and + Joseph E. Sacco. + +Sat Oct 29 05:10:03 1994 Francois Pinard (pinard@icule) + + * aclocal.m4 (fp_C_PROTOTYPES): Force -D_HPUX_SOURCE with -Aa. + Reported by John David Anglin. + + * src/ansi2knr.c: New version, sent by Peter Deutsch. + * aclocal.m4 (fp_C_PROTOTYPES): Substitute empty or ansi2knr for + ANSI2KNR, depending on the fact the compiler is ANSI or not. + * src/Makefile.in: Use -Ovarargs=convert on ansi2knr calls. + Remove the sed filter after ansi2knr for debug.c. Use $O instead + of $U, put underline in extensions rather than in basenames. Use + implicit rules, now that regularity makes this possible. + Have $(OBJECTS) depend on $(ANSI2KNR), so to trigger compilation + of ansi2knr whenever it is needed. + * configure.in: Adjusted for correct STACKOVF substitution. + * src/debug.c (trace_format): When not __STDC__, use (...) as a + parameter list, so ansi2knr will convert it to (va_alist) va_dcl. + Reported by David MacKenzie. + + * Makefile.in: Remove binprefix. Use transform_name instead. + Reported by David MacKenzie. + + * doc/Makefile.in: Create version.texi, use it, clean it. + Reported by Jim Meyering. + +Fri Oct 28 20:33:55 1994 Francois Pinard (pinard@icule) + + * Makefile.in (all, install, uninstall): Depend on Makefile. + + * Makefile.in: For actions invoking $(MAKE) from within compound + sh statements, exit non-zero if the sub-make fails. Otherwise, + the top-level make may exit successfully when it should fail. + Reported by Jim Kingdon. + + * {,/*}Makefile.in: Use && after all cd, in case they fail. + + * {,*/}Makefile.in: Declare PRODUCT and VERSION macros. + (dist): Use PRODUCT and VERSION instead of tricks on .fname. + * configure.in: Substitute PRODUCT and VERSION. + + * {,*/}Makefile.in (dist): Always try a hard link before a copy. + +Thu Oct 27 22:32:58 1994 Francois Pinard (pinard@icule) + + * Makefile.in (mostlyclean-local): Do not remove *~. + * */Makefile.in (mostlyclean): Idem. + Reported by Robert E. Brown and Richard Stallman. + +Sun Oct 9 08:30:13 1994 Francois Pinard (pinard@icule) + + * src/m4.h: Get rid of CONFIG_BROKETS. + +Sun Oct 2 16:48:10 1994 Francois Pinard (pinard@icule) + + * configure.in: Use AC_ARG_PROGRAM. + * aclocal.m4 (fp_C_PROTOTYPES): Substitute @kr@ by kr or empty. + Reported by David MacKenzie. + +Sat Oct 1 11:22:42 1994 Francois Pinard (pinard@icule) + + * configure.in: Do not add -O to CFLAGS for GNU C, now that + configure does it automatically. + Reported by Jim Meyering. + +Fri Sep 23 08:16:58 1994 Francois Pinard (pinard@icule) + + * src/stackovf.c: Declare the handler_t typedef earlier in the + code, use it for stackovf_handler. + (setup_stackovf_trap): Use RETSIGTYPE instead of void while + casting sigsegv_handler. + Reported by Robert Bernstein. + + * src/m4.c (main): Initialize program_name to argv[0] without + basename'ing it. + Reported by Karl Berry. + +Sun Sep 18 11:42:50 1994 Francois Pinard (pinard@icule) + + * src/Makefile.in (TAGS): Include a ../lib/TAGS reference. + Reported by Karl Berry. + +Wed Sep 14 10:00:22 1994 Francois Pinard (pinard@icule) + + * lib/Makefile.in (mostlyclean): Added. + (TAGS): Make in $(srcdir). + + * configure.in: Use `choke me' in test, like everywhere! + + * {doc,examples,lib,src}/Makefile.in (check): Deleted, as + unreacheable and useless. + + * doc/Makefile.in (texclean): Deleted, merged in mostlyclean. + + * lib/Makefile.in (DISTFILES): Distribute TAGS. + (distclean): Do not remove TAGS. + (realclean): Remove it. + * Makefile.in: Make TAGS in lib also, not just in src. + Reported by Karl Berry. + + * Makefile.in (distclean, realclean): Instead of recursively + calling $(MAKE) for the -local part, allow parallel execution of + -recursive and -local, only delay the removal of config.status, + which is repeated in both goals. + +Tue Sep 13 19:21:05 1994 Francois Pinard (pinard@icule) + + Release 1.3. + * Makefile.in: Group all *clean-recursive goals in one, using sed + to remove `-recursive' while calling make recursively. Also, use + a subshell for each recursive $(MAKE). + Reported by Jim Meyering. + + * src/m4.h (memcpy): Define with bcopy for BSD systems. + Reported by Kaveh R. Ghazi. + + * src/Makefile.in (ansi2knr): Use $(LIBS) while linking, for SunOS + 4.1.3 requires -ldl to link even ansik2nr, and we need a way to + specify it. + + * configure.in: Use date instead of touch for stamp-h. + * Makefile.in (stamp-h.in): Idem. + + * Makefile.in (distclean, realclean): Force serial execution of + both goals, in case parallel makes are being used. + Reported by Jim Meyering. + + * src/Makefile.in (DISTFILES): Distribute TAGS. + (distclean): Do not remove TAGS. + (realclean): Remove it. + Reported by Karl Berry. + +Sat Sep 10 12:34:04 1994 Francois Pinard (pinard@icule) + + * configure.in: Use fp_ to match aclocal.m4. Revert _OS_ macros + to old names, for following Autoconf. + +Thu Sep 8 15:07:27 1994 Francois Pinard (pinard@icule) + + * Makefile.in (MDEFINES): Remove INSTALL substitutions, for + ./install.sh will not be correctly referred to in sub-Makefiles. + Reported by John David Anglin. + + * doc/Makefile.in (texclean): Remove *.cps and *.fns too. + Reported by Eric Backus. + + * Makefile.in, checks/Makefile.in, doc/Makefile.in, + examples/Makefile.in, lib/Makefile.in, src/Makefile.in: Limit + config.status into remaking this directory's Makefile only. + * Makefile.in (stamp-h): Do not check nor touch stamp-h. + * configure.in (AC_OUTPUT): Touch stamp-h if CONFIG_HEADERS. + Reported by Jim Meyering. + +Tue Sep 6 12:07:33 1994 Francois Pinard (pinard@icule) + + * configure.in: Correct stack overflow detection logic, taking + care of systems having only incomplete implementations (like for + Pyramid 9820 OSx 5.0d). + Reported by Kaveh R. Ghazi. + + * src/Makefile.in (TAGS): Remote -t from etags call. + +Fri Sep 2 10:37:10 1994 Francois Pinard (pinard@icule) + + * lib/Makefile.in (install): Depend on all. + +Wed Aug 31 11:17:21 1994 Francois Pinard (pinard@icule) + + * examples/Makefile.in (mostlyclean): Do not depend on texclean. + Reported by Jim Meyering and John David Anglin. + + * Makefile.in (distclean-local): Delete config.log. + Reported by Jim Meyering. + + Solidify frozen files with respect to -P: + * src/m4.c: Have -P set prefix_all_buitins variable instead of + calling a function by that name. Declare the variable. + * src/m4.h: Adjust declaration for prefix_all_buitins. + * src/builtin.c (builtin_init): Merge in functionality from + previous prefix_all_buitins function, while making entries in the + symbol table, but not modifying the builtin description itself. + + * src/freeze.c (reload_frozen_state): Add a useless `break;', + because *many* compilers do not accept an empty `default:'. + Reported by Akiko Matsushita, Eric Backus, John David Anglin, + Joseph E. Sacco, Kaveh R. Ghazi, Tom McConnell and Ulrich Drepper. + + * configure.in: Use AC_TYPE_SIGNAL. + * src/stackovf.c (setup_stackovf_trap): Use RETSIGTYPE. + Reported by Robert Bernstein. + + * checks/Makefile.in (check): Modify PATH so check-them will find + m4 in the src directory. + * Makefile.in (check): Don't. + Reported by Akiko Matsushita and Jim Meyering. + + * src/output.c (make_room_for, output_character_helper): New + functions, for implementing a global MAXIMUM_TOTAL_SIZE instead of + a per buffer MAXIMUM_BUFFER_SIZE. + + * src/output.c (output_text): New function, for optimizing the + output of strings of characters. Use it. + +Tue Aug 30 01:44:29 1994 Francois Pinard (pinard@icule) + + * doc, src: New directories reorganizing the distribution. + * doc/Makefile.in, src/Makefile.in, examples/Makefile.in: New + files. + * Makefile.in: Adjusted. + * configure.in: Configure new Makefiles. + + * m4.h: Declare STRING typedef. Use it for comment and quote + strings, adjusting all references. (This is the rudiments of a + beginning for the eventual withdrawal of NUL terminated strings.) + * output.c (shipout_text): Accept a length parameter, and use it. + All callers adjusted. + +Mon Aug 29 12:27:19 1994 Francois Pinard (pinard@icule) + + * m4.h: Include if it exists. + * stackovf.c: Don't. + + Clean up for current_diversion variable: + * output.c: Move current_diversion from builtin.c. + * m4.h: Declare current_diversion so builtin.c can access it. + * output.c (output_init, make_diversion): Initialize or update + current_diversion. + * builtin.c (builtin_init, m4_divert): Leave current_diversion + alone. + + Remove limit on number of diversions: + * output.c: Replace ndiversion by diversions, declare it. + (output_init): Allocate only diversion 0. + (make_diversion): Allocate new diversions as needed. + * m4.h, m4.c: Remove NDIVERSIONS and ndiversion related stuff. + * m4.c: Still accept -N, but do nothing with it. + Reported by David MacKenzie. + + Freeze diversions: + * output.c (freeze_diversions): New function. + * m4.h: Declare freeze_diversions. + * freeze.c: Document frozen file format, revise it, call + freeze_diversions to add diversions to frozen format, and code to + reload them properly. + * m4.c: Do not undivert automatically at end when status being + frozen. Do not call builtin_init when reloading frozen state. + + Speed up diversion processing: + * output.c: Add INITIAL_BUFFER_SIZE, MAXIMUM_BUFFER_SIZE, + COPY_BUFFER_SIZE, in-memory diversion buffers, struct diversion + structure and variables, cached variables out of output_diversion, + reallocate_diversion_for and OUTPUT_CHARACTER. + (shipout_text, make_diversion, insert_diversion): Adapted to new + structures. + (insert_file): Use better buffering. + Reported by David MacKenzie. + +Sun Aug 28 05:20:02 1994 Francois Pinard (pinard@icule) + + * Makefile.in, lib/Makefile.in, checks/Makefile.in: Arrange so + dist works from another build directory. + +Sat Aug 27 14:32:45 1994 Francois Pinard (pinard@icule) + + * symtab.c (hack_all_symbols): Use hash_table_size instead of + constant HASHMAX, for -H option to work better. + + * builtin.c (DECLARE): Simplify by using _ (). + + * freeze.c: New file. + * Makefile.in: Compile it, distribute it. + * m4.c: Recognize, document and process --freeze-state (-F) and + --reload-state (-R) options. Pass a true flag to builtin_init + only if no reloading some state. + * builtin.c (define_builtin): Remove static specifier. + (find_builtin_by_name): Remove static specifier. + (builtin_init): Accept and obey a flag argument. + * m4.h: Add declarations for freeze.c, changes for builtin.c. + +Wed Aug 24 16:14:19 1994 Francois Pinard (pinard@icule) + + * builtin.c (dumpdef_cmp): Rewrite so the cast protect the const + specifier. + + * configure.in: Implement --with-dmalloc. + * acconfig.h: Document WITH_DMALLOC. + * m4.h: Add code for when WITH_DMALLOC. + +Mon Aug 15 12:38:05 1994 Francois Pinard (pinard@icule) + + * m4.c (long_options): Use "error-output", the dash was missing. + Reported by Akiko Matsushita. + +Fri Aug 12 16:38:01 1994 Francois Pinard (pinard@icule) + + * m4.h: Include . + * builtin.c, debug.c, m4.c, output.c, stackovf.c: Don't. + * m4.h: Declare len_lquote and len_rquote as size_t, not int. + int. + * input.c: Declare len_lquote, len_rquote, len_bcomm and len_ecomm + as size_t, not int. + * builtin.c (dump_args): Declare len as size_t, not int. + + * debug.c: Prototype the forward declaration of debug_set_file. + + * builtin.c (m4_undivert): Replace div by file, for avoiding the + shadowing of this variable. + * output.c (insert_diversion): Idem. + + * input.c: Delete def_rquote, def_lquote, def_bcomm and def_ecomm. + (input_init): Duplicate default quote and comment strings. + (set_quotes): Free previous quote strings in all cases. Duplicate + even default quote strings. + (set_comment): Free previous comment strings in all cases. + Duplicate even default comment strings. + + * configure.in: Updated for Autoconf 2.0. + * Makefile.in (distclean-local): Also delete config.cache. + + * m4.c (usage): Reorganize the --help output by topic. Include a + description for debugging flags. + +Fri Jul 29 10:15:52 1994 Francois Pinard (pinard@icule) + + * configure.in: If sigaction is available and SA_ONSTACK defined, + use sigaction. Otherwise, if sigvec is available and SV_ONSTACK + defined, use sigvec. Else don't compile stackovf.c. + * stackovf.c (setup_stackovf_trap): Idem. + Reported by Jim Avera, Karl Berry, Kaveh R. Ghazi, Matthias Rabe + and Simon Leinen. + +Thu Jul 21 22:43:17 1994 Francois Pinard (pinard@icule) + + * m4.c (usage): Replace printf par fputs. + +Mon Jul 18 23:48:23 1994 Francois Pinard (pinard@icule) + + * Release 1.2 + +Sun Jul 17 08:08:25 1994 Francois Pinard (pinard@icule) + + * configure.in: Check for sigaction and sigvec. Add a new delayed + check for RLIMIT_STACK, combine in the checking for getrlimit. + All those things are not universally available. + * stackovf.c: Split setting up the trap handler and catching + signals, for better taking care of various configure outcomes. + * examples/stackovf.sh: Correct a typo. + Reported by Eric Backus, Jim Avera and Jim Meyering. + +Sat Jul 16 20:36:19 1994 Francois Pinard (pinard@icule) + + * ansi2knr.c: New version sent by its author, Peter Deutsch. + +Fri Jul 15 14:36:21 1994 Francois Pinard (pinard@icule) + + * Makefile.in: Modify so parallel make will not try making + lib/libm4.a twice simultaneously. + Reported by Jim Meyering. + +Thu Jul 14 17:23:17 1994 Francois Pinard (pinard@icule) + + * stackovf.c (setup_stackovf_trap): Replace "Don't" by "Do not" in + error message, for when no code possibility exists. Even if this + line is completely #ifdef'ed out, it brings a syntax error. + Reported by Andreas Schwab, Jim Meyering and Joseph E. Sacco. + + * Makefile.in (install): Have install depend on all too, for lib + to be remade as needed. + + * examples/stackovf.sh: Try ksh, bsh and bash for shells + providing ulimit, instead of using only ksh. + Reported by Jim Avera and Joseph E. Sacco. + +Tue Jul 12 06:54:31 1994 Francois Pinard (pinard@icule) + + * Makefile.in (check): Have it depend on all instead of m4. In + this way, a change in lib will be detected and processed. + + * builtin.c (numeric_arg): Use strtol and verify the conversion, + instead of using sscanf which stops as soon as there is a + non-digit in the input. Previously, incr(1xyzzy), eval(1,2xyzzy) + and divert(1xyzzy) were all accepted without any warning or error + messages. + * m4.h: Declare strtol as long if not including stdlib.h. + * configure.in: Check for limits.h, and replace strtol if missing. + * lib/Makefile.in: Substitute LIBOBJS. Distribute strtol.c. + * lib/strtol.c: New file, from elsewhere. + Reported by Andreas Schwab. + +Thu Jul 7 22:38:10 1994 Francois Pinard (pinard@icule) + + * macro.c (expand_macro): Cast value to (boolean) prior to + assigning it to traced. + Reported by Tom McConnell. + + * Makefile.in (m4): Always make all in lib first. + Reported by Jim Meyering. + +Wed Jul 6 13:16:31 1994 Jim Avera (jima@netcom.com) + + * stackovf.c: Isolated OS-dependent sections; Improved portability, + adding support for SunOS/BSD (sigvec, sigstack, and 4-parameter signal + handlers), and a default error message if the fault address is not + available (when neither siginfo.h nor BSD sigcontext are supported). + * configure.in: Changes for stackovf.h: Check for sigcontext, + sigaction, sigstack, and define rlim_t as int if necessary. + * acconfig.h: Added HAVE_SIGCONTEXT and rlim_t. + * examples/stackovf.sh: Run m4 -L99999999 to allow stack overflow. + * ansi2knr.c: Fix for func-ptr args; convert "..." to varargs syntax. + +Tue Jul 5 19:13:54 1994 Francois Pinard (pinard@icule) + + * configure.in: Use AC_SET_MAKE. + * Makefile.in: Use @SET_MAKE@. + Reported by Jim Meyering. + + * checks/check-them: Do not trap on SIGQUIT or SIGALRM. + Reported by Ian Taylor. + +Sat Jul 2 00:58:47 1994 Francois Pinard (pinard@icule) + + * configure.in: Remove dependency of USE_STACKOVF on STDC_HEADERS, + because siginfo.h is unrelated to standard headers, and siginfo.h + is already checked for. + Reported by Joseph E. Sacco. + + * acconfig.h, aclocal.m4, m4.h: Replace HAVE_PROTOTYPES by + PROTOTYPES. + * aclocal.m4, configure.in: Replace AC_HAVE_PROTOTYPES by + AC_PROTOTYPES. + +Wed Jun 29 22:41:53 1994 Francois Pinard (pinard@icule) + + * builtin.c (substitute): Use \& to represent this part of the + string which was matched by the whole regexp, instead of + representing the whole string. Any usage of \0 issues a warning + and acts like \&, it will disappear in some subsequent release. + +Mon Jun 27 14:24:23 1994 Francois Pinard (pinard@icule) + + * m4.c: Complete prototype for forwarded declaration of usage. + + * input.c (init_macro_token): Correct own reference in error + message. Previous name get_macro_func was referred to instead. + (next_char): Correct own reference in error message. Previous + name advance_input was referred to instead. + + * m4.h: Declare eval_t and unsigned_eval_t typedefs to 32 bits. + * eval.c (logical_or_term, logical_and_term, or_term, xor_term, + and_term, not_term, logical_not_term, cmp_term, shift_term, + add_term, mult_term, exp_term, unary_term, simple_term): Add + prototype to forwarded declarations. Declare parameter v1 as + eval_t * instead of int *. Same for local variable v2 in dyadic + functions. Same for result in exp_term. + * builtin.c (m4_eval): Declare value as eval_t instead of int. + (ntoa): Declare value as eval_t instead of int. Declare uvalue as + unsigned_eval_t instead of unsigned int. Change casts accordingly. + (shipout_int): Cast first argument of ntoa to eval_t. + Reported by Thorsten Ohl. + + * macro.c: Complete the prototypes of forwarded expand_macro and + expand_token. + Reported by Thorsten Ohl. + + * m4.h: Define voidstar as void * or char * depending on __STDC__. + The Ultrix 3.1 compiler cannot do much with void pointers. + + * builtin.c (dumpdef_cmp): Replace void * by voidstar. + * m4.c (xfree): Replace void * by voidstar. + Reported by Tom McConnell. + + * ansi2knr.1: New, from elsewhere. + * Makefile.in (DISTFILES): Distribute ansi2knr.1 + + * Makefile.in (stamp-h.in): Avoid running ./config.status if + stamp-h does not exist yet. This avoids running it a second time + just after the initial ./configure. + Reported by David MacKenzie and Tom McConnell. + + * m4.h: Replace the enum debug_info declaration with a series of + #define's. The Ultrix 3.1 compiler would otherwise need casting + (int) to most references, when used in expressions. + Reported by Tom McConnell. + +Sat Jun 25 00:10:05 1994 Francois Pinard (pinard@icule) + + * aclocal.m4: Replace FP_PROTOTYPES by AC_HAVE_PROTOTYPES, + following an idea from Brook G. Milligan. AC_HAVE_PROTOTYPES + calls the compiler. Previously, FP_PROTOTYPES was only calling + the preprocessor; by not being subject to CFLAGS, this was + discouraging those flags asking for ANSI compilation. + * acconfig.h: Document HAVE_PROTOTYPES. + * configure.in: Use AC_HAVE_PROTOTYPES instead of FP_PROTOTYPES. + * m4.h: Define _() according to HAVE_PROTOTYPES, not __STDC__. + Reported by Eric Backus. + + * configure.in: Substitute CFLAGS and LDFLAGS, taking their value + from the environment. Default CFLAGS to -g if not set. + * Makefile.in: Have CFLAGS and LDFLAGS substituted from configure. + * lib/Makefile.in: Have CFLAGS substituted from configure. + Reported by Eric Backus and Tom McConnell. + + * configure.in: m4_undefine changeword before using AC_ENABLE. + + * m4.h: Declare prototypes for error (for ANSI compilers only), + prefix_all_builtins and reference_error. + Reported by Tom McConnell. + + * input.c (set_word_regexp): Do not try to initialize the array + test from a string, this does not work with non-ANSI compilers. + Reported by Eric Backus. + + * Makefile.in (dist): Clean examples/ before saving it. + (distclean-local): Also remove stamp-h. + Reported by Eric Backus. + + * Makefile.in (_stackovf.c): Goal for compiling stacokovf.c with + non ANSI compilers. + Reported by Tom McConnell. + + * checks/Makefile.in (clean): Depends on mostlyclean. + (mostlyclean): New goal. + +Fri Jun 24 23:30:31 1994 Francois Pinard (pinard@icule) + + * Makefile.in (DISTFILES): Distribute install.sh. + * install.sh: New file, copied from elsewhere. + Reported by Assar Westerlund and Kaveh R. Ghazi. + +Thu Jun 23 00:00:30 1994 Francois Pinard (pinard@icule) + + * configure.in: Define ENABLE_CHANGEWORD if --enable-changeword. + * acconfig.h: Explain ENABLE_CHANGEWORD. + + [These modifs all depend upon ENABLE_CHANGEWORD and are adapted + from code provided by Pete Chown] + * m4.h: Add original_text field to u_t variant of union u. + Declare TOKEN_DATA_FUNC macro. + * builtin.c: Declare changeword. + (m4_changeword): New function. + * input.c: Include "regex.h", define variables with word regexps. + (input_init): Initialize the word regexp. + (set_word_regexp): New. + (next_token): Declare local variables, use the previous code if + default_word_regexp is true. Else, match using a new code. Save + the original text. + * macro.c (expand_token): Ship out original text if not a macro + name. + Reported by Krste Asanovic and Pete Chown. + + [These modifs all depend upon ENABLE_CHANGEWORD] + * m4.h: Declare external user_word_regexp. + * m4.c: Declare user_word_regexp, and initialize it from + --word-regexp or -W, or NULL if not specified. + * input.c: Use user_word_regexp if specified, instead of + DEFAULT_WORD_REGEXP. + + * Makefile.in (m4): Revert Jan 3 1994 change. I'm unable to + agree with it. + + * Makefile.in, lib/Makefile.in: Limit suffixes to .c and .o. + * checks/Makefile.in: Empty the suffix list. + Reported by Geoff Russell, Joel Sherrill and Roland McGrath. + + * m4.c: Declare nesting_limit and initialize it to 250. + Implement -LNUMBER or --nesting-limit=NUMBER to change its + value. + * m4.h: Declare nesting_limit as external. + * macro.c (expand_macro): Stop execution whenever nesting limit + is exceeded. + Reported by Bengt Mertensson. + + * eval.c (evaluate): Diagnose excess characters in eval input. + Things like `eval(08)' used to return 0 with no diagnostic. + + * m4.h: Capitalize first letter of all macro arguments in + definitions. + + * m4.c: Declare warning_status, initialize it to 0. Add new + option -E, or --fatal-warnings, which sets warning_status to + EXIT_FAILURE instead. + * m4.h: Declare external warning_status. Define EXIT_SUCCESS and + EXIT_FAILURE if not otherwise done by header files. + * m4.c: Delete declarations for EXIT_SUCCESS and EXIT_FAILURE. + * m4.c, input.c, output.c, symtab.c, builtin.c, macro.c, debug.c, + eval.c: Replace 0 by warning_status and 1 by EXIT_FAILURE in first + argument of all M4ERROR calls. + Reported by Noah Friedman. + + * examples/incl-test.m4: Renamed from incl_test.m4. + * examples/include.m4: Include incl-test.m4 instead of + incl_test.m4. + * examples/multiquotes.m4: Renamed from multi-quotes.m. + +Wed Jun 22 21:58:54 1994 Francois Pinard (pinard@icule) + + * configure.in: Avoid USE_STACKOVF if not found. Note + that Jim developped stackovf.c on a 486 running SVR4.0 (ESIX), and + also tested it on a Sun Sparc workstation running SunOS 4.x. + + * format.c (format): When not HAVE_EFGCVT, m4 was failing the + 49.format check, abusing a `union values' argument with sprintf + without selecting the proper field. Now, save the formatting type + first, delaying the fetch of the corresponding argument. + Reported by Joseph E. Sacco and Tom Quinn. + + * format.c (format): Remove const from char *fmt declaration when + not HAVE_EFGCVT, because a NUL may be forced into it. + + * m4.h: Declare atof() when not STDC_HEADERS. + Reported by Joseph E. Sacco. + + * Regenerate configure using Autoconf 1.11, this corrects a + problem about an incorrect cpp seting on NeXT 3.1. + Reported by Alexander Lehmann. + +Sun Jun 5 16:25:19 1994 Francois Pinard (pinard@icule) + + * m4.h (_): Change argument from `x' to `Args'. + +Wed May 4 23:59:39 1994 Francois Pinard (pinard@icule) + + * Makefile.in: Remove all occurrences of $(MFLAGS), which were + bringing more evil than good on a few systems. + Reported by Greg A. Woods. + +Fri Apr 22 15:59:35 1994 Francois Pinard (pinard@icule) + + * m4.h: Rename Args() to _(). + * m4.h: Remove extern specifier from all function declarations. + +Fri Apr 22 15:51:21 1994 Jim Avera (jima@netcom.com) + + * stackovf.c: New file implementing stack-overflow detection. + * configure.in: Check for getrlimit, sigaction. If all of + standard headers, getrlimit and sigaction, define USE_STACKOVF and + substitute ${U}stackovf.o for STACKOVF. + * acconfig.h: Declare USE_STACKOVF. + * Makefile.in: Distribute stackovf.c, link with $(STACKOVF). + * m4.h: Declare setup_stackovf_trap(). + * m4.c: Call setup_stackovf_trap(). + * tests/stackovf_test.sh: New file. + +Wed Apr 13 14:10:30 1994 Francois Pinard (pinard@icule) + + * checks/Makefile.in: Rename .all-stamp to stamp-checks. + + * Makefile.in (Makefile, etc.): Adapt for Autoconf 1.8. + +Sun Jan 30 14:24:19 1994 (pinard at icule) + + * m4.h: Remove definition of volatile, not used anymore. + Reported by Jim Meyering and Joseph E. Sacco. + + * m4.h: Consistently use `do { ... } while (0)' in macros, instead + of `if ... else /* nothing */' for if macros. + Reported by Jim Meyering. + + * builtin.c (m4_regexp): Reorganize the code for avoiding a + warning from gcc about `repl' possibly used before defined. + Reported by Jim Meyering. + + * m4.h: Avoid a pre-ANSI together with . + Reported by Jim Meyering. + +Tue Jan 25 18:39:37 1994 Francois Pinard (pinard at icule) + + * m4.h: Move the conditional definition of volatile after the + inclusion of system files, because they may define it first. + +Tue Jan 4 19:46:50 1994 Francois Pinard (pinard@icule) + + * checks/Makefile.in (CHECKS): Add a useless `*' before `[', to + get around a problem with Alpha make seeing a syntax error, there. + Reported by Vern Paxson. + +Mon Jan 3 00:21:45 1994 Francois Pinard (pinard@icule) + + * Makefile.in: Do not define LDFLAGS, use CFLAGS on link calls. + Reported by Richard Stallman. + +Sat Dec 25 08:06:05 1993 Francois Pinard (pinard@icule) + + * configure.in: Correct test for strerror, AC_FUNC_CHECK was used + instead of AC_HAVE_FUNCS. + Reported by Noah Friedman. + +Wed Dec 1 09:37:53 1993 Francois Pinard (pinard@icule) + + * m4.c: Initialize show_help and show_version to zero. + + * m4.c: Ensure EXIT_SUCCESS and EXIT_FAILURE are defined. + Use them in exit() and usage() calls. + +Sat Nov 27 10:43:24 1993 Francois Pinard (pinard@icule) + + * m4.h: Delete extern sys_nerr, sys_errlist declarations, and + syserr() macro. Delete errref, add reference_error and M4ERROR. + * m4.c: Replace errref, which was returning an input reference + string, with reference_error, which prints it on standard error. + * builtin.c, output.c: Use errno as second parameter to error, + instead of using syserr() with %s. + * *.c: Use M4ERROR instead of error: no more errref() with %s. + Doing so, the program name appears after the input reference + instead of before, which eases M-x next-error processing. + +Wed Nov 24 22:16:15 1993 Francois Pinard (pinard@icule) + + * checks/get-them: Escape braces with backslashes in patterns, + because HPUX-9.01 awk needs this. + Reported by Jim Meyering. + +Mon Nov 22 10:55:52 1993 Francois Pinard (pinard@icule) + + * builtin.c: Declare "FILE *popen ();". + + * m4.h: Remove MESSAGE{,1,2}, WARNING1, FATAL{,1}, INTERNAL_ERROR + macros, replace error_message_prefix() declaration by errref()'s. + Declare xrealloc, for use in errref(). + * m4.c: Delete error_message_prefix() function, add errref(). + * *.c: Use error() systematically in place of all error macros, + now that error() flushes stdout first. Make needed adjustments. + + * m4.h: Remove const in sys_errlist[] declaration, it creates + conflicts on SGI and Alpha. + Reported by Kaveh R. Ghazi. + +Sat Nov 20 08:26:15 1993 Francois Pinard (pinard@icule) + + * m4.c: Include instead of "getopt.h". + + * configure.in: Output to config.h. Use HAVE_FUNCS preferably. + * acconfig.h: New, for documenting HAVE_EFGCVT. + * Makefile.in: Distribute acconfig.h, .stamp-h.in and config.h.in, + use them wherever appropriate. Also use -I. for compilations. + * lib/Makefile.in: Use -I.. for compilations. + * *.c: Include or "config.h". + + * m4.h: Test for HAVE_MEMORY_H instead of NEED_MEMORY_H. + * configure.in: Use AC_HAVE_HEADERS(memory.h), delete AC_MEMORY_H. + +Wed Nov 17 09:34:55 1993 Francois Pinard (pinard@icule) + + * builtin.c (m4_eval): Cast strlen to (int) before comparing. + + * input.c (input_init): Initialize quote and comment strings + explicitely instead of calling set_quotes and set_comment: by + doing so, we ensure we do not free uninitialized variables. + + * checks/check-them: Reverse arguments to both diff, so the + expected is on the left and the obtained on the right. + + * m4.h: Add MESSAGE{,1,2}, WARNING1, FATAL{,1} and INTERNAL_ERROR + macros. Delete declarations for m4error, warning, fatal and + internal_error, add declaration for error_message_prefix. + * m4.c: Delete m4error, warning, fatal and internal_error + routines, add error_message_prefix routine. + * *.c: Replace m4error routine calls with MESSAGE* macro calls, + warning with WARNING*, fatal with FATAL* and internal_error with + INTERNAL_ERROR*. + * Makefile.in (_m4.c): Do not adjust ansi2knr output for va_alist, + this is not needed anymore. + + * m4.h: Declare extern FILE *debug. Add DEBUG_PRINT{1,3} and + DEBUG_MESSAGE{,1,2} macros. Delete declarations for debug_print + and debug_message, add declaration for debug_message_prefix. + * debug.c: Remove static specifier for FILE *debug declaration. + Delete debug_print and debug_message routines, add + debug_message_prefix routine. + * builtin.c, debug.c: Replace debug_print routine calls with + DEBUG_PRINT* macro calls. + * input.c, path.c: Replace debug_message routine calls with + DEBUG_MESSAGE* macro calls. + + * m4.h: Remove inclusion of . + * debug.c: Include or . + (trace_format): Use stdarg instead of varargs if __STDC__. + + * configure.in: Remove checks for vfprintf and _doprnt. These + implementations use varargs tricks which are not portable enough. + * lib/vfprintf.c: Deleted. + * lib/_doprnt.c: Deleted. + * lib/Makefile.in: Adjusted accordingly. Remove LIBOBJS. + Reported by Joel Sherrill. + + * path.c (add_include_directory): Use xstrdup. + + * builtin.c (find_builtin_by_name): Declare static. + + * *.[ch]: Add const to a few "char *" declarations. + + * configure.in: Remove commented tests for fileno() and fstat(). + * debug.c: Remove comments about HAVE_FILENO and HAVE_FSTAT. + + * debug.c (debug_flush_files): New. + * m4.h: Declares it. + * builtin.c (m4_syscmd, m4_esyscmd): Use it. + Reported by Nicolas Pioch. + +Fri Nov 12 10:02:26 1993 Francois Pinard (pinard@icule) + + * Makefile.in (m4.dvi): Use m4.texinfo instead of m4.texi. + Reported by Joel Sherrill. + + * builtin.c (prefix_all_builtins): Instead of the table size, use + the null entry at end for stopping the loop. It was overwritten. + Reported by Andreas Schwab and Jim Meyering. + + * builtin.c (prefix_all_builtins): Cast xmalloc to (char *). + Reported by Kaveh R. Ghazi. + + * macro.c (call_macro): Add * in (*SYMBOL_FUNC (sym)) (...). + Reported by Karl Vogel. + +Tue Nov 9 09:31:47 1993 Francois Pinard (pinard@icule) + + * m4.h: Do not define volatile if already defined. + Reported by Rene' Seindal. + + * lib/Makefile.in: Add a forgotten ALLOCA=@ALLOCA@. Grrr! + + Reported by Bernhard Daeubler, Eric Backus, Hal Peterson, Hoang + Uong, Ian Taylor, Kaveh R. Ghazi, Tom McConnell and Walter Wong. + +Mon Nov 8 21:11:44 1993 Francois Pinard (pinard@icule) + + * m4.h: Define strchr and strrchr in terms of index and rindex, + instead of the other way around. + * builtin.c, m4.c, path.c: Use strchr instead of index. + + * input.c (next_char): Remove a "break;" after a "return ...;". + Reported by Tom McConnell. + +Mon Nov 8 12:45:34 1993 Francois Pinard (pinard@icule) + + * Release 1.1 + + * configure.in: Do not copy check files in the build hierarchy. + * checks/check-them: Identify the m4 version being checked. For + finding m4, look in $PATH instead of in the parent directory. + * Makefile.in (check): Prepend `pwd` to $PATH before checking. + * checks/Makefile.in (.all-stamp): Always create check files in + the source hierarchy, not anymore in the build hierarchy. + (check): cd to the source hierarchy before performing checks. + Do not copy nor clean COPYING anymore, take it from `..'. + Reported by Tom McConnell. + + * Makefile.in (Makefile): Use $(SHELL). + (config.status): Use $(SHELL). Use "config.status --recheck" + instead of "configure --no-create", which is obsolete. + Reported by Tom McConnell. + +Fri Nov 5 09:49:30 1993 Francois Pinard (pinard@compy.IRO.UMontreal.CA) + + * m4.c (usage): Use "%s" instead of "m4" in format string. + Reported by Jim Meyering. + + * Makefile.in: Distribute mkinstalldirs. + Reported by Pierre Gaumond. + Reported by Jim Meyering. + Reported by Tom McConnell. + Reported by Andreas Gustafsson. + + * checks/check-them: Renamed from checks/check_them. + * checks/get-them: Renamed from checks/get_them. + * checks/.all-stamp: Renamed from checks/.all_stamp. + * checks/Makefile.in: Changed accordingly. + Reported by Jim Meyering. + +Thu Nov 4 13:50:52 1993 Francois Pinard (pinard@lagrande.IRO.UMontreal.CA) + + * lib/Makefile.in (dist): Correct permissions on files. + + * output.c: Declare tmpfile, some systems don't. + +Wed Nov 3 09:09:16 1993 Francois Pinard (pinard@icule) + + * checks/Makefile.in (dist): Correct permissions on files. + + * Makefile.in (dist): Ensure recursive linking for subdirectory + `examples', also set read/write permissions on all its files. + + * mkinstalldirs: New, from elsewhere. + * Makefile.in: Use it. + + * debug.c: Synchronize debug messages and regular output when + the debug file and stdout are redirected to the same file. + * configure.in: Add (commented) checks for fileno and fstat. + Reported by Jim Avera. + + * builtin.c (m4_ifelse): Diagnose excess arguments if 5, 8, 11, + etc., arguments, then ignore the superfluous one. m4 used to + diagnose missing arguments and return the empty string. + Reported by Nick S. Kanakakorn. + +Tue Nov 2 00:55:41 1993 Francois Pinard (pinard@icule) + + * m4.c (main): At end of all input, ensure all undiverted text + goes to the main output stream. + Reported by Andreas Gustafsson. + + * m4.c (main): exit (0), instead of return 0. + + * m4.c: Implement -P and --prefix-builtins. + * builtin.c: Delete const specifier on builtin_tab. + (prefix_all_builtins): New. + Reported by Noah Friedman. + Reported by Scott Bartram. + + * c-boxes.el: New, from elsewhere. + * Makefile.in: Distribute it. + + * m4.h: Do not define bcopy if defines it. + Reported by Stephen Perkins. + + * builtin.c (define_macro): Allow a missing second argument, in + which case it is implied empty. Affects define and pushdef. + Reported by Eric Allman. + +Mon Nov 1 07:45:24 1993 Francois Pinard (pinard@icule) + + * m4.h: Add blind_if_no_args in struct builtin, blind_no_args in + struct symbol adn SYMBOL_BLIND_NO_ARGS macro. + * builtin.c: Initialize all the blindness fields in builtin_tab. + (define_builtin): Copy the blindness of a builtin into its symbol. + * macro.c (expand_token): Avoid processing a blind builtin if the + next character is not an opening parenthesis. + Reported by David MacKenzie. + Reported by Noah Friedman. + + * configure.in: Ensure an exit status of 0 on completion. + Reported by Vivek P. Singhal. + + * eval.c (eval_lex): Admit both lower and upper case letters for + bases greater than 10. Only lower case letters were accepted. + + * eval.c (eval_lex): Recognize 0bDIGITS and 0rRADIX:DIGITS syntax. + Reported by Krste Asanovic. + + * eval.c: Rename NOT to LNOT. Add XOR, NOT, LSHIFT and RSHIFT. + * eval.c (logical_not_term): New name for not_term. + * eval.c (xor_term): New, between or_term and and_term. + * eval.c (not_term): New, between and_term and logical_not_term. + * eval.c (shift_term): New, between cmp_term and add_term. + Reported by Krste Asanovic: ~, ^, <<, >>. + Reported by Ben A. Mesander: ** vs ^. + + * m4.c: Delete xmalloc.c, xrealloc.c, xstrdup.c. + * m4.h: Delete xrealloc.c. + * lib/xmalloc.c: New, from elsewhere. + * lib/xstrdup.c: New, from elsewhere. + * lib/Makefile.in: Distribute and compile them. + + * m4.c: Change progname to program_name. + * builtin.c, eval.c, m4.c, m4.h: Rename error to m4error. + * lib/error.c: New, from elsewhere. + * lib/Makefile.in: Distribute and compile error.c. + * configure.in: Check AC_VPRINTF and for strerror. + * m4.c: Delete cmd_error. Use error instead. + * m4.c: Change label capitalisation to "ERROR", "Warning", etc. + + * m4.h: Delete #define const, let Autoconf takes care of this. + + * m4.c: Remove all code conditionalized by IMPLEMENT_M4OPTS. + Merge parse_args into main. Declare argv to be `char *const *', + then remove superfluous casts. + + * m4.c: Rename --no-gnu-extensions to --traditional. + Reported by Ben A. Mesander. + + * m4.c (usage): Add a status parameter. Supply one in various + calls. Add --help processing. Remove -V for --version. + + * lib/Makefile.in: Put $(CFLAGS) last in .c.o rule. + + * lib/Makefile.in: Have an AR=ar declaration. + Reported by Eric Backus. + Reported by Bjorn R. Bjornsson. + Reported by Tom Tromey. + Reported by Kristine Lund. + Reported by Marion Hakanson. + +Sat Oct 30 12:51:47 1993 Francois Pinard (pinard@icule) + + * Makefile.in (m4.info): Use -I$(srcdir) on $(MAKEINFO). + Reported by Noah Friedman. + +Mon Oct 25 14:58:48 1993 Francois Pinard (pinard@icule) + + * Makefile.in: Remove MDEFINES and cleanup. + +Wed Jun 9 14:59:46 1993 Francois Pinard (pinard@icule) + + * Makefile.in (dist): Replace "echo `pwd`" by a mere "pwd". + Create a gzip file. + +Sat Feb 6 14:59:22 1993 Francois Pinard (pinard@icule) + + * Makefile.in, lib/Makefile.in, check/Makefile.in: In dist goals, + ensure 777 mode for directories, so older tar's will restore file + modes properly. + +Sun Jan 17 15:38:05 1993 Francois Pinard (pinard@icule) + + * Makefile.in, lib/Makefile.in: Put $(CFLAGS) after $(CPPFLAGS), + so the installer can override automatically configured choices. + Reported by Karl Berry. + +Fri Jan 15 16:07:00 1993 Francois Pinard (pinard@icule) + + * lib/vfprintf.c: Stolen from Oleo distribution and adapted. The + previous version was not working properly on m68k-hp-bsd4.3. + Reported by Roland McGrath. + + * lib/_doprnt.c: Stolen from Oleo distribution. + * configure.in: Check for _doprnt.c if vfprintf.c selected. + * lib/Makefile.in: Distribute _doprnt.c. + Do not distribute regex.[ch].old anymore. + +Fri Jan 1 19:42:23 1993 Francois Pinard (pinard at icule) + + * Makefile.in, lib/Makefile.in: Reinstate $(CPPFLAGS), use it. + Richard wants it there. + +Sun Dec 27 07:01:54 1992 Francois Pinard (pinard at icule) + + * Makefile.in: Add DEFS to MDEFINES. + * lib/Makefile.in (.c.o): Remove $(CPPFLAGS). + (libm4.a): Remove the library before creating it. + (distclean): Remove tags and TAGS too. + +Wed Dec 23 12:46:55 1992 Francois Pinard (pinard at icule) + + * Makefile.in (dvi, m4.dvi): New goals. + + * builtin.c, eval.c, format.c, input.c, m4.[ch], m4.texinfo, + macro.c, output.c, path.c, symtab.c: Change Copyright from + 1989-1992 to the explicit enumeration 1989, 1990, 1991, 1992. + + * examples/divert.m4: Deleted, this bug has been corrected. + + * Makefile.in (texclean, mostlyclean): New goals. + + * Makefile.in (clean): Remove clutter from ansi2knr. + Reported by Pierre Gaumond. + Reported by Greg A. Woods. + +Sun Dec 20 10:40:20 1992 Francois Pinard (pinard at icule) + + * Makefile.in: Remove $(CPPFLAGS) from the .c.o rule. The user + might well use CFLAGS is s/he needs it. + + * Makefile.in: Allow installation of info files from a separate + build directory. + Reported by Jason Merrill. + Reported by David MacKenzie. + Reported by Skip Montanaro. + Reported by Erez Zadok. + Reported by Assar Westerlund. + +Sat Dec 19 08:21:34 1992 Francois Pinard (pinard at icule) + + * Release 1.0.3 + This is still a beta release for the future GNU m4 version 1.1. + + * lib/alloca.c: New, from elsewhere. + * lib/Makefile.in: Distribute it. Define and use $(ALLOCA). + + * m4.h: Do not define index/rindex if already defined. If + FALSE/TRUE are already defined, do not redefine them, but merely + define boolean typedef to int. + + * Makefile.in: Use $(DEFS) while compiling ansi2knr. + * ansi2knr.c: Rewrite #ifdef HAVE_STRING_H || STDC_HEADERS, + because some C compilers do not like connectives with #ifdef. + * m4.h: Define `volatile' only if __GNUC__, instead of once for + __GNUC__ and once for __STDC__. + * lib/regex.h: Leave const alone, AC_CONST will take care of it. + + * checks/Makefile.in: Use .all_stamp instead of $(CHECKS) for + Makefile dependencies. Without it, make keeps destroying and + remaking $(CHECKS) in a loop (why?). Distribute .all_stamp. + + * m4.h, m4.c, builtin.c, output.c: Change all divertion/DIVERTION + to diversion/DIVERSION, this was a spelling error. + + * m4.c: Declare version[], remove #include "version.h". + * version.h: Deleted. + * Makefile.in: Remove references to version.h. + + * output.c (shipout_text): Centralize all `#line NUM ["FILE"]' + production, by using a simpler and more robust algorithm. This + solves the problem of synclines sometimes written in the middle of + an output line. Delete sync_line() and output_lines variable. + * m4.h: Remove sync_line prototype and output_lines declaration. + * input.c (next_char), output.c (shipout_text): Remove references + to output_lines. + * input.c (push_file, pop_file): Merely put the value -1 in + output_current_line instead of calling sync_line, for delaying a + single `#line NUM FILE' before next output line. Do not test + for sync_output, because this is unnecessary clutter. + * output.c (make_divertion, insert_divertion): Idem. + * input.c: Rename must_advance_line to start_of_input_line, for + consistency. + + * debug.c (trace_header): Select a new debug line format, which + better complies with GNU standards for formatting error messages. + With option `-dfl', M-x next-error might be used on the output. + * m4.c (vmesg): Adjust format of error output to GNU standards. + * m4.texinfo: Adjust examples for `make check' to work. + + * m4.h, builtin.c, debug.c, input.c, macro.c, path.c: Use upper + case for enum debug_info constants, which were all lower case. + + * builtin.c (m4_regexp, m4_patsubst): Use re_search instead of + re_search_2. + * lib/regex.[ch]: Use new version from textutils 1.3.6, with some + collected patches. I tried a few times using newer regex.[ch], it + mysteriously stopped aborting with this one. Insecure feeling... + * lib/Makefile.in: Distribute regex.[ch].old, just in case! + +Fri Dec 18 11:08:03 1992 Francois Pinard (pinard at icule) + + * m4.c: Change `--no-warnings' to `--silent'. + Reported by David MacKenzie. + + * m4.c: Put all M4OPTS code upon IMPLEMENT_M4OPTS control, and + leave it off for now. See comment in m4.c for justification. + Reported by David MacKenzie. + + * configure.in: Replace AC_USG by AC_HAVE_HEADERS(string.h). + * m4.h, ansi2knr.c, lib/regex.h: Replace USG by HAVE_STRING_H. + + * Makefile.in: Add a new `info' goal. Use macro MAKEINFO. + + * Makefile.in: Ensure recursive cleaning is done before local + cleaning for all clean goals. + + * builtin.c (ntoa): Ensure the value is always interpreted as a + signed quantity, whatever the radix is. + +Wed Nov 18 07:57:19 1992 Jim Meyering (meyering@idefix) + + * builtin.c, format.c, input.c: Split long lines. + * m4.c: Use typedef macro_definition instead of struct + macro_definition. + * symtab.c: Use typedef symbol instead of struct symbol. + +Tue Nov 17 01:58:40 1992 Francois Pinard (pinard at icule) + + * *.[ch]: Remove all trailing whitespace, in code and comments. + + * configure.in: Find some awk. + * Makefile.in: Add $(AWK) to MDEFINES. + * checks/Makefile.in: Transmit $(AWK) to get_them. + * checks/get_them: Use $AWK instead of gawk. Add a close in the + awk script when switching files, because without this, mawk runs + out of file descriptors. + +Mon Nov 16 20:42:56 1992 Francois Pinard (pinard at icule) + + * Makefile.in (realclean): Delete m4.info*. + Reported by Jim Meyering. + + * Makefile.in: Adjust and link with checks/Makefile. + * checks/Makefile.in: New. + * configure.in: Output checks/Makefile. + + * checks/get_them: Have the dnl header of each test more + recognizable by next-error, also use a better message. + +Mon Nov 16 07:48:52 1992 Jim Meyering (meyering@idefix) + + * m4.h [__GNUC__]: Use __volatile__ instead of `volatile.' + And use that only if __GNUC__ since we're using it's GCC-specific + semantics that tell the compiler the associated function doesn't + return. + + * builtin.c (substitute): Don't use character as an array index. + (dumpdef_cmp): Make formal arguments `const void *' to avoid + warnings with gcc -W -Wall on systems with qsort prototype. + (m4_errprint): Cast obstack_finish to `char *' to avoid warnings + from gcc -W -Wall. + + * eval.c (most functions): Add parentheses to assignments used + as truth values go avoid warnings from gcc -Wall. + + * input.c, m4.c, output.c, path.c, symtab.c: Declare static + any functions that don't need external scope. + + * builtin.c, debug.c, format.c, m4.c, m4.h, macro.c, symtab.c + (many functions and arrays): Declare `const'. + +Sun Nov 15 09:42:09 1992 Francois Pinard (pinard at icule) + + * *.[ch]: Rename nil to NULL, using the declaration from , + removing the declaration from m4.h. Also rename false to FALSE + and true to TRUE. + + * lib/Makefile.in (Makefile): New goal. + + * Makefile.in, lib/Makefile.in: Add a .c.o rule, so CFLAGS is not + so heavily loaded. It gets more easily overridable, calling make. + Reported by Jim Meyering. + + * Makefile.in (dist): Get .fname from the current directory name, + instead of from version.h. I need updating many files manually, + when the version changes, version.h is just one of them. + +Sat Nov 14 11:01:20 1992 Francois Pinard (pinard at icule) + + * m4.h: Remove the tag `boolean' on the enum introducing typedef + `boolean'. This tag conflicts with on SVR4. + Reported by Tom McConnell. + +Fri Nov 13 00:12:50 1992 Francois Pinard (pinard at icule) + + * m4.texinfo: Correct the examples for 33.divert, 38.divnum, + 39.cleardiv, which were describing missing or spurious newlines. + Modify examples 52.eval, 53.esyscmd and 54.sysval so the results + do not depend on machine word size, `/bin/false' implementation, + or `wc' output format. `make check' is more dependable, now. + + * checks/check_them: Summarize the failed tests by listing their + name, at end. If none, issue `All checks successful'. Output + `Checking' instead of `Input file:'. + + * checks/get_them, checks/check_them: Reindented. + + * Makefile.in (dist): chmod a+r before making the tar file. + +Thu Nov 12 14:42:57 1992 Francois Pinard (pinard at icule) + + * builtin.c (m4_dnl): Diagnose any parameter to `dnl'. + + * input.c (next_token): Reinitialize token_buttom just after using + it as a watermark with obstack_free. Or else, a future token, big + enough for triggering reallocation of the obstack chunk, could + void the initialized value of token_buttom, later causing panic in + obstack_free. Rename token_buttom to token_bottom everywhere. + + * m4.h: Before declaring errno, first include and + ensure that it does not define errno. + Reported by Richard Stallman. + +Wed Nov 11 17:40:35 1992 Francois Pinard (pinard at icule) + + * builtin.c: Define and use DECLARE macro for builtins. + + * builtin.c (m4_ifelse): Avoid any diagnostic when exactly one + argument, this is a common idiom for introducing long comments. + + * builtin.c (m4_ifelse): If 3n + 2 arguments, diagnose missing + arguments. The last argument was silently ignored. + + * m4.c (cmd_error): Add a missing semicolon before va_end(). + +Tue Nov 10 08:57:05 1992 Francois Pinard (pinard at icule) + + * Makefile.in: Now handle protoized sources. Define and use U. + Compile and use ansi2knr with old compilers. Update DISTFILES. + Add `aclocal.m4' to `configure' dependencies. + * ansi2knr.c: New, from Ghostscript distribution. + * configure.in: Define U through FP_PROTOTYPES for old compilers. + Add AC_ISC_POSIX, AC_CONST, AC_SIZE_T. + * aclocal.m4: New, provide FP_PROTOTYPES. + * m4.h: Conditionnaly protoized through Args, save for varags. + * builtin.c: Protoized. Then: + Include if size_t is not defined, before "regex.h". + (m4_ifelse): Fetch built-in name properly for diagnostic. + (m4_dumpdef): Remove wrong (char *) cast calling dump_symbol. + (m4_regexp): Add const to `msg' declaration. + (m4_patsubst): Add const to `msg' declaration. + * debug.c: Protoized, save for varargs. + * eval.c: Protoized. + * format.c: Protoized. + * input.c: Protoized. + * m4.c: Protoized, save for varargs. Then: + (xfree): Accept void * instead of char *. + (xmalloc): Return void * instead of char *. + (xrealloc): Accept and return void * instead of char *. + * macro.c: Protoized. + * output.c: Protoized. + * path.c: Protoized. Then cast some (char *) over xmalloc's. + * symtab.c: Protoized. + +Fri Nov 6 02:05:21 1992 Francois Pinard (pinard at icule) + + * m4.texinfo: Remove directory from diagnostics in 30.include, + 51.eval, 56.errprint and 57.m4exit tests. + + * m4.h: Remove declarations for int or void system functions, they + cause more conflicting trouble than they make good. + + * configure.in: Avoid configuration header file. Add some tests. + * m4.h: Remove #include "config.h". + * Makefile.in, lib/Makefile.in: Implement Autoconf interface. + Then, rewritten for better compliance with GNU standards. + +Thu Nov 5 12:37:13 1992 Francois Pinard (pinard at icule) + + * format.c (format): Avoid syntax error if not HAVE_EFGCVT, + because of a misplaced #endif. + + * Many *.[hc] files: Correct intra-line spacing here and there, + according to GNU indent 1.6 advice. + + * configure.in: New, using Autoconf 1.2. + * m4.h: Reverse NO_MEMORY_H to NEED_MEMORY_H. + * Delete old configure.in, configure, etc/configure.in, + etc/configure, lib/configure.in, lib/configure and config/*. + Reported by Jason Merrill. + + * symtab.c (hash): Change (char) NULL to '\0'. + Reported by Jason Merrill. + + * Delete .vers, etc/newdist.sh, etc/newvers.sh and + etc/nextvers.sh. Release numbers will be edited `by hand'. + * version.h: De-automatize, force value in. + + * m4.c: Changes in order to use a newer getopt.h. + Reported by David MacKenzie. + + * checks/: New name for examples/. + * checks/get_them: New location for etc/get_examples. + * checks/check_them: New location for etc/check_examples. + * Makefile.in, checks/get_them, checks/check_them: Adjust. + * lib/vfprintf.c: New location for etc/vfprintf.c. + * Delete empty etc/. + * examples/: New name for test/. + +Tue Mar 10 00:29:46 1992 Francois Pinard (pinard at icule) + + * Makefile.in (check): Add m4 as dependency. + + * m4.c: Accept --no-warnings instead of --no_warnings, and + --no-gnu-extensions instead of --no_gnu_extensions. Make the + usage message more informative. + Reported by David MacKenzie. + +Mon Mar 9 14:53:40 1992 Francois Pinard (pinard at icule) + + * etc/check_examples: New name for check_examples.sh. + * etc/get_examples: New name for get_examples.sh. + * Makefile.in, etc/Makefile.in: Use new names. + + * Makefile.in: Transmit $(CC) while making in lib. + + * Many *.[hc] files: GNU indent'ed, with further fine tuning of + code disposition by hand. + +Sun Mar 8 11:01:55 1992 Francois Pinard (pinard at icule) + + * m4.h: Delete definitions for abort() and exit(). + Reported by Richard Stallman. + + * config/hmake-unicos, config/s-unicos.h: New files. + Reported by Hal Peterson. + + * eval.c (exp_term): Have N^0 return 1. + Reported by Michael Fetterman. + + * eval.c, input.c, m4.h: Remove last comma in enums. + Reported by Mike Lijewski. + + * Transfer of maintenance duties from Rene' to Franc,ois. + +Thu Oct 24 15:18:46 1991 Rene' Seindal (seindal at diku.dk) + + * Release 1.0. Many thanks to those, who provided me with bug + reports and feedback. + + * Uses GNU configure, taken from the gdb distribution. + + * Uses GNU getopt(), with long option names. + + * The -Q/+quiet option is added, which suppresses warnings about + missing or superflous arguments to built-in macros. + + * Added default options via the M4OPTS environment variable. + + * The built-in format can now be configured to use sprintf as + the formatting engine, for systems without [efg]cvt(3). + + * GNU library code is moved to the ./lib subdirectory; other + utility files are now in ./etc. + + * Several minor bugs have been fixed. + +Fri Jul 26 15:28:42 1991 Rene' Seindal (seindal at diku.dk) + + * Fixed various bugs. Release 0.99, manual 0.09. Many thanks to + Francois Pinard and Roland H. Pesch for providing me with reports. + + * The builtins incr and decr are now implemented without use of + eval. + + * The builtin indir is added, to allow for indirect macro calls + (allows use of "illegal" macro names). + + * The debugging and tracing facilities has been enhanced + considerably. See the manual for details. + + * The -tMACRO option is added, marks MACRO for tracing as soon + as it is defined. + + * Builtins are traced after renaming iff they were before. + + * Named files can now be undiverted. + + * The -Nnum option can be used to increase the number of + divertions available. + + * Calling changecom without arguments now disables all comment + handling. + + * The function m4_patsubst() is now consistently declared + static. + + * A bug in dnl is fixed. + + * A bug in the multi-character quoting code is fixed. + + * Several typos in the manual has been corrected. More probably + persist. + + * The m4.info file is now installed along with the program. + +Thu Nov 15 21:51:06 1990 Rene' Seindal (seindal at diku.dk) + + * Updated and enhanced version. Release 0.75, manual 0.07. + + * Implemented search path for include files (-I option and + M4PATH envronment variable). + + * Implemented builtin "format" for printf-like formatting. + + * Implemented builtin "regexp" for searching for regular + expressions. + + * Implemented builtin "patsubst" for substitution with regular + expressions. + + * Implemented builtin "esyscmd", which expands to a shell + commands output. + + * Implemented "__file__" and "__line__" for use in error + messages. + + * Implemented character ranges in "translit". + + * Implemented control over debugging output. + + * Implemented multi-character quotes. + + * Implemented multi-character comment delimiters. + + * Changed predefined macro "gnu" to "__gnu__". + + * Changed predefined macro "unix" to "__unix__", when the -G + option is not used. With -G, "unix" is still defined. + + * Changed "shift", "$@" and "$*" to not insert spaces afters + commas. + + * Added program name to error messages. + + * Fixed two missing null bytes bugs. + +Mon Jan 22 21:08:52 1990 Rene' Seindal (seindal at diku.dk) + + * Initial beta release. Release 0.50, manual 0.05. + + ----- + + Local Variables: + coding: utf-8 + End: + + Copyright (C) 1990, 1991, 1992, 1993, 1994, 2000, 2001, 2003, + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + + Copying and distribution of this file, with or without + modification, are permitted provided the copyright notice + and this notice are preserved. diff --git a/coreseek/m4-1.4.13/GNUmakefile b/coreseek/m4-1.4.13/GNUmakefile new file mode 100644 index 0000000..33eb3aa --- /dev/null +++ b/coreseek/m4-1.4.13/GNUmakefile @@ -0,0 +1,127 @@ +# Having a separate GNUmakefile lets me `include' the dynamically +# generated rules created via cfg.mk (package-local configuration) +# as well as maint.mk (generic maintainer rules). +# This makefile is used only if you run GNU Make. +# It is necessary if you want to build targets usually of interest +# only to the maintainer. + +# Copyright (C) 2001, 2003, 2006-2009 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Systems where /bin/sh is not the default shell need this. The $(shell) +# command below won't work with e.g. stock DOS/Windows shells. +ifeq ($(wildcard /bin/s[h]),/bin/sh) +SHELL = /bin/sh +else +# will be used only with the next shell-test line, then overwritten +# by a configured-in value +SHELL = sh +endif + +# If the user runs GNU make but has not yet run ./configure, +# give them a diagnostic. +_have-Makefile := $(shell test -f Makefile && echo yes) +ifeq ($(_have-Makefile),yes) + +# Make tar archive easier to reproduce. +export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner + +# Allow the user to add to this in the Makefile. +ALL_RECURSIVE_TARGETS = + +include Makefile + +# Some projects override e.g., _autoreconf here. +-include $(srcdir)/cfg.mk +include $(srcdir)/maint.mk + +# Allow cfg.mk to override these. +_build-aux ?= build-aux +_autoreconf ?= autoreconf + +# Ensure that $(VERSION) is up to date for dist-related targets, but not +# for others: rerunning autoreconf and recompiling everything isn't cheap. +_have-git-version-gen := \ + $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) +ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) + _is-dist-target ?= $(filter-out %clean, \ + $(filter maintainer-% dist% alpha beta major,$(MAKECMDGOALS))) + _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS))) + ifneq (,$(_is-dist-target)$(_is-install-target)) + _curr-ver := $(shell cd $(srcdir) \ + && $(_build-aux)/git-version-gen .tarball-version) + ifneq ($(_curr-ver),$(VERSION)) + ifeq ($(_curr-ver),UNKNOWN) + $(info WARNING: unable to verify if $(VERSION) is the correct version) + else + ifneq (,$(_is-install-target)) + # GNU Coding Standards state that 'make install' should not cause + # recompilation after 'make all'. But as long as changing the version + # string alters config.h, the cost of having 'make all' always have an + # up-to-date version is prohibitive. So, as a compromise, we merely + # warn when installing a version string that is out of date; the user + # should run 'autoreconf' (or something like 'make distcheck') to + # fix the version, 'make all' to propagate it, then 'make install'. + $(info WARNING: version string $(VERSION) is out of date;) + $(info run '$(MAKE) _version' to fix it) + else + $(info INFO: running autoreconf for new version string: $(_curr-ver)) + _dummy := $(shell $(MAKE) $(AM_MAKEFLAGS) _version) + endif + endif + endif + endif +endif + +.PHONY: _version +_version: + cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf) + +else + +.DEFAULT_GOAL := abort-due-to-no-makefile +srcdir = . + +# The package can override .DEFAULT_GOAL to run actions like autoreconf. +-include ./cfg.mk +include ./maint.mk + +ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) +$(MAKECMDGOALS): abort-due-to-no-makefile +endif + +abort-due-to-no-makefile: + @echo There seems to be no Makefile in this directory. 1>&2 + @echo "You must run ./configure before running \`make'." 1>&2 + @exit 1 + +endif + +# Tell version 3.79 and up of GNU make to not build goals in this +# directory in parallel, in case someone tries to build multiple +# targets, and one of them can cause a recursive target to be invoked. + +# Only set this if Automake doesn't provide it. +AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) \ + dist distcheck tags ctags + +ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS) + +ifneq ($(word 2, $(MAKECMDGOALS)), ) +ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), ) +.NOTPARALLEL: +endif +endif diff --git a/coreseek/m4-1.4.13/INSTALL b/coreseek/m4-1.4.13/INSTALL new file mode 100644 index 0000000..2550dab --- /dev/null +++ b/coreseek/m4-1.4.13/INSTALL @@ -0,0 +1,302 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008, 2009 Free Software Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 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. + + 6. Often, you can also type `make uninstall' to remove the installed + files again. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + +Installation Names +================== + + By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + 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. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS + KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--prefix=DIR' + Use DIR as the installation prefix. *Note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/coreseek/m4-1.4.13/Makefile b/coreseek/m4-1.4.13/Makefile new file mode 100644 index 0000000..3788fc2 --- /dev/null +++ b/coreseek/m4-1.4.13/Makefile @@ -0,0 +1,1216 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/m4 +pkgincludedir = $(includedir)/m4 +pkglibdir = $(libdir)/m4 +pkglibexecdir = $(libexecdir)/m4 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/checks/Makefile.in \ + $(top_srcdir)/configure AUTHORS BACKLOG COPYING ChangeLog \ + INSTALL NEWS THANKS TODO build-aux/compile \ + build-aux/config.guess build-aux/config.rpath \ + build-aux/config.sub build-aux/depcomp build-aux/install-sh \ + build-aux/mdate-sh build-aux/missing build-aux/texinfo.tex +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = checks/Makefile +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run aclocal-1.10b +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run tar +APPLE_UNIVERSAL_BUILD = 0 +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run automake-1.10b +AWK = gawk +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FCNTL_H = fcntl.h +FLOAT_H = +GETOPT_H = +GLIBC21 = yes +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP2 = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCLOSE = 0 +GNULIB_FFLUSH = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FOPEN = 1 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPL = 1 +GNULIB_FSEEK = 0 +GNULIB_FSEEKO = 1 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 0 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FWRITE = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 0 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 0 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETSUBOPT = 0 +GNULIB_GETUSERSHELL = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MATHL = 0 +GNULIB_MBRLEN = 0 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDTEMP = 1 +GNULIB_MKSTEMP = 1 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_PERROR = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_RANDOM_R = 0 +GNULIB_RAWMEMCHR = 1 +GNULIB_READLINK = 0 +GNULIB_REALLOC_POSIX = 0 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SETENV = 1 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 1 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 0 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 0 +GNULIB_STRERROR = 1 +GNULIB_STRNDUP = 1 +GNULIB_STRNLEN = 1 +GNULIB_STRPBRK = 0 +GNULIB_STRSEP = 0 +GNULIB_STRSIGNAL = 1 +GNULIB_STRSTR = 1 +GNULIB_STRTOD = 1 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRVERSCMP = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNSETENV = 1 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCTOB = 1 +GNULIB_WCWIDTH = 0 +GNULIB_WRITE = 0 +GREP = /bin/grep +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_CALLOC_POSIX = 1 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_EUIDACCESS = 1 +HAVE_FSEEKO = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_GETDOMAINNAME = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETUSERSHELL = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWCNTRL = 1 +HAVE_LCHMOD = 1 +HAVE_LINK = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MALLOC_POSIX = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDTEMP = 1 +HAVE_OS_H = 0 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_REALLOC_POSIX = 1 +HAVE_RPMATCH = 1 +HAVE_SCHED_H = +HAVE_SETENV = 1 +HAVE_SIGACTION = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRNDUP = 1 +HAVE_STRPBRK = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYS_BITYPES_H = +HAVE_SYS_INTTYPES_H = +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_UNISTD_H = 1 +HAVE_UNSETENV = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCTYPE_H = 1 +HAVE_WINT_T = 1 +HAVE__BOOL = 1 +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBCSTACK = +LIBINTL = +LIBM4_LIBDEPS = +LIBM4_LTLIBDEPS = +LIBMULTITHREAD = +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBS = +LIBSIGSEGV = +LIBTESTS_LIBDEPS = +LIBTHREAD = +LOCALCHARSET_TESTS_ENVIRONMENT = CHARSETALIASDIR="$(top_builddir)/lib" +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTLIBCSTACK = +LTLIBINTL = +LTLIBMULTITHREAD = +LTLIBOBJS = +LTLIBPTH = +LTLIBSIGSEGV = +LTLIBTHREAD = +M4_LIBOBJS = asnprintf.o asprintf.o basename.o cloexec.o close-stream.o closein.o closeout.o dirname.o dup-safer.o exitfail.o fd-safer.o fflush.o filenamecat.o fopen-safer.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnprintf.o vasprintf.o xmalloc.o +M4_LTLIBOBJS = asnprintf.lo asprintf.lo basename.lo cloexec.lo close-stream.lo closein.lo closeout.lo dirname.lo dup-safer.lo exitfail.lo fd-safer.lo fflush.lo filenamecat.lo fopen-safer.lo fseeko.lo isnanl.lo mkstemp-safer.lo pipe-safer.lo printf-args.lo printf-parse.lo quotearg.lo regex.lo stripslash.lo strstr.lo tempname.lo vasnprintf.lo vasprintf.lo xmalloc.lo +M4tests_LIBOBJS = +M4tests_LTLIBOBJS = +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NEXT_ERRNO_H = +NEXT_FCNTL_H = +NEXT_FLOAT_H = +NEXT_MATH_H = +NEXT_SCHED_H = +NEXT_SIGNAL_H = +NEXT_SPAWN_H = +NEXT_STDARG_H = +NEXT_STDINT_H = +NEXT_STDIO_H = +NEXT_STDLIB_H = +NEXT_STRING_H = +NEXT_SYS_STAT_H = +NEXT_SYS_TIME_H = +NEXT_SYS_WAIT_H = +NEXT_UNISTD_H = +NEXT_WCHAR_H = +NEXT_WCTYPE_H = +OBJEXT = o +PACKAGE = m4 +PACKAGE_BUGREPORT = bug-m4@gnu.org +PACKAGE_NAME = GNU M4 +PACKAGE_STRING = GNU M4 1.4.13 +PACKAGE_TARNAME = m4 +PACKAGE_URL = http://www.gnu.org/software/m4/ +PACKAGE_VERSION = 1.4.13 +PATH_SEPARATOR = : +POW_LIB = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_BTOWC = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_DPRINTF = 0 +REPLACE_FCHDIR = 0 +REPLACE_FCLOSE = 0 +REPLACE_FFLUSH = 1 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 1 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_GETCWD = 0 +REPLACE_GETLINE = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MBRLEN = 0 +REPLACE_MBRTOWC = 0 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKSTEMP = 0 +REPLACE_NAN = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_PERROR = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_PRINTF = 0 +REPLACE_PUTENV = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 1 +REPLACE_STRTOD = 0 +REPLACE_TRUNCL = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 0 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCTOB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SET_MAKE = +SHELL = /bin/bash +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +SPAWN_H = +STDARG_H = +STDBOOL_H = +STDINT_H = +STRIP = +SYS_STAT_H = sys/stat.h +SYS_TIME_H = +SYS_WAIT_H = sys/wait.h +UNISTD_H_HAVE_WINSOCK2_H = 0 +VERSION = 1.4.13 +VOID_UNSETENV = 0 +WCHAR_H = +WCHAR_T_SUFFIX = +WCTYPE_H = +WINT_T_SUFFIX = +abs_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +abs_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . +SUBDIRS = . examples lib src doc checks tests +EXTRA_DIST = bootstrap c-boxes.el cfg.mk maint.mk \ + .version m4/gnulib-cache.m4 + +DISTCLEANFILES = stamp-h +MAINTAINERCLEANFILES = INSTALL Makefile.in aclocal.m4 \ + config-h.in configure depcomp doc/fdl.texi gendocs.sh install-sh \ + lib/[a-z]* m4/[a-fh-z]* m4/g[a-mo-z]* m4/gnulib-comp.m4 \ + m4/gnulib-tool.m4 missing stamp-h.in + +ACLOCAL_AMFLAGS = -I m4 +DISTCHECK_CONFIGURE_FLAGS = --enable-changeword --program-prefix=g +BUILT_SOURCES = $(top_srcdir)/.version +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu --silent-rules'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu --silent-rules \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --silent-rules Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --silent-rules Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): +checks/Makefile: $(top_builddir)/config.status $(top_srcdir)/checks/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-hook dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am + +$(top_srcdir)/.version: + echo $(VERSION) > $@-t && mv $@-t $@ + +# Arrange so that .tarball-version appears only in the distribution +# tarball, and never in a checked-out repository. +dist-hook: + echo $(VERSION) > $(distdir)/.tarball-version + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/Makefile.am b/coreseek/m4-1.4.13/Makefile.am new file mode 100644 index 0000000..f98266c --- /dev/null +++ b/coreseek/m4-1.4.13/Makefile.am @@ -0,0 +1,46 @@ +## Makefile.am - template for generating Makefile via Automake +## +## Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008 Free +## Software Foundation, Inc. +## +## This file is part of GNU M4. +## +## GNU M4 is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## GNU M4 is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . +## +## Written by Gary V. Vaughan + +SUBDIRS = . examples lib src doc checks tests +EXTRA_DIST = bootstrap c-boxes.el cfg.mk maint.mk \ + .version m4/gnulib-cache.m4 +DISTCLEANFILES = stamp-h +## maintainer-clean should remove as much as possible that ./bootstrap can +## recreate. In the m4 directory, keep only gnulib-cache.m4. +MAINTAINERCLEANFILES = INSTALL Makefile.in aclocal.m4 \ + config-h.in configure depcomp doc/fdl.texi gendocs.sh install-sh \ + lib/[a-z]* m4/[a-fh-z]* m4/g[a-mo-z]* m4/gnulib-comp.m4 \ + m4/gnulib-tool.m4 missing stamp-h.in + +ACLOCAL_AMFLAGS = -I m4 +## Enough users install GNU M4 as gm4 that we make sure 'make installcheck' +## will handle that, prior to making a release. +DISTCHECK_CONFIGURE_FLAGS = --enable-changeword --program-prefix=g + +BUILT_SOURCES = $(top_srcdir)/.version +$(top_srcdir)/.version: + echo $(VERSION) > $@-t && mv $@-t $@ + +# Arrange so that .tarball-version appears only in the distribution +# tarball, and never in a checked-out repository. +dist-hook: + echo $(VERSION) > $(distdir)/.tarball-version diff --git a/coreseek/m4-1.4.13/Makefile.in b/coreseek/m4-1.4.13/Makefile.in new file mode 100644 index 0000000..05ba87a --- /dev/null +++ b/coreseek/m4-1.4.13/Makefile.in @@ -0,0 +1,1216 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/checks/Makefile.in \ + $(top_srcdir)/configure AUTHORS BACKLOG COPYING ChangeLog \ + INSTALL NEWS THANKS TODO build-aux/compile \ + build-aux/config.guess build-aux/config.rpath \ + build-aux/config.sub build-aux/depcomp build-aux/install-sh \ + build-aux/mdate-sh build-aux/missing build-aux/texinfo.tex +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = checks/Makefile +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FCNTL_H = @FCNTL_H@ +FLOAT_H = @FLOAT_H@ +GETOPT_H = @GETOPT_H@ +GLIBC21 = @GLIBC21@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBINTL = @LIBINTL@ +LIBM4_LIBDEPS = @LIBM4_LIBDEPS@ +LIBM4_LTLIBDEPS = @LIBM4_LTLIBDEPS@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTHREAD = @LIBTHREAD@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +LTLIBTHREAD = @LTLIBTHREAD@ +M4_LIBOBJS = @M4_LIBOBJS@ +M4_LTLIBOBJS = @M4_LTLIBOBJS@ +M4tests_LIBOBJS = @M4tests_LIBOBJS@ +M4tests_LTLIBOBJS = @M4tests_LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +SPAWN_H = @SPAWN_H@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_STAT_H = @SYS_STAT_H@ +SYS_TIME_H = @SYS_TIME_H@ +SYS_WAIT_H = @SYS_WAIT_H@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = . examples lib src doc checks tests +EXTRA_DIST = bootstrap c-boxes.el cfg.mk maint.mk \ + .version m4/gnulib-cache.m4 + +DISTCLEANFILES = stamp-h +MAINTAINERCLEANFILES = INSTALL Makefile.in aclocal.m4 \ + config-h.in configure depcomp doc/fdl.texi gendocs.sh install-sh \ + lib/[a-z]* m4/[a-fh-z]* m4/g[a-mo-z]* m4/gnulib-comp.m4 \ + m4/gnulib-tool.m4 missing stamp-h.in + +ACLOCAL_AMFLAGS = -I m4 +DISTCHECK_CONFIGURE_FLAGS = --enable-changeword --program-prefix=g +BUILT_SOURCES = $(top_srcdir)/.version +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu --silent-rules'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu --silent-rules \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --silent-rules Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --silent-rules Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): +checks/Makefile: $(top_builddir)/config.status $(top_srcdir)/checks/Makefile.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ + dist-hook dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am + +$(top_srcdir)/.version: + echo $(VERSION) > $@-t && mv $@-t $@ + +# Arrange so that .tarball-version appears only in the distribution +# tarball, and never in a checked-out repository. +dist-hook: + echo $(VERSION) > $(distdir)/.tarball-version + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/NEWS b/coreseek/m4-1.4.13/NEWS new file mode 100644 index 0000000..8b3b8e9 --- /dev/null +++ b/coreseek/m4-1.4.13/NEWS @@ -0,0 +1,667 @@ +GNU M4 NEWS - User visible changes. +Copyright (C) 1992, 1993, 1994, 2004, 2005, 2006, 2007, 2008, 2009 Free +Software Foundation, Inc. + +* Noteworthy changes in Version 1.4.13 (2009-04-01) [stable] + Released by Eric Blake, based on git version 1.4.12.* + +** The manual is now distributed under the terms of FDL 1.3. + +** The `divert' and `undivert' builtins have been made more efficient + when using temporary files for large diversions. + +** The `translit' builtin has been made more efficient when the second + argument is short. + +** The input engine has been optimized for faster processing. + +** The command line option `--debugfile', introduced in 1.4.7, now + treats its argument as optional, in order to allow setting the debug + output back to stderr when used without an argument; and order is now + significant with respect to command line files. You must therefore use + `m4 --debugfile=trace file', not `m4 file --debugfile trace'. This + change does not affect the deprecated `-o'/`--error-output' option. + +** The `syscmd' and `esyscmd' builtins can be configured to use an + alternate shell, via the new `configure' option `--with-syscmd-shell'. + +** A number of portability improvements inherited from gnulib. + +* Noteworthy changes in Version 1.4.12 (2008-10-10) [stable] + Released by Eric Blake, based on git version 1.4.11.* + +** Fix regression introduced in 1.4.4b where using `traceon' could delete + a macro. This was most noticeable with `traceon(`traceon')', but + would also happen in cases such as `foo(traceon(`foo'))'. + +** Fix regression introduced in 1.4.7 where `m4 -N9' died with an assertion + failure. + +** Fix regression introduced in 1.4.11 where `defn' died with an assertion + failure on a traced but undefined macro. + +** New `-g'/`--gnu' command-line option overrides `-G'/`--traditional'. + For now, the environment variable POSIXLY_CORRECT has no effect on M4 + behavior; but a future release of M4 will behave as though --traditional + is implied if POSIXLY_CORRECT is set (this future change is necessary, + because in the current release, there is no way to disable GNU + extensions that conflict with POSIX without the use of a non-POSIX + command-line argument). Clients of M4 that want to use GNU extensions, + even when POSIXLY_CORRECT is set, should start using the -g command-line + argument, even though it is currently a no-op if -G did not appear + earlier in the command line, so that the client will not break in the + face of an upgraded m4 and a POSIXLY_CORRECT execution environment. + +** The `-L'/`--nesting-limit' command-line option now defaults to 0 for + unlimited on platforms that can detect and deal with stack overflow. On + systems that lack alternate stack support, such as Cygwin, and on + systems that do not obey the POSIX semantics for distinguishing stack + overflow from other exceptions, such as Linux, you can optionally + install the libsigsegv library (version 2.6 or newer recommended) to + enhance m4's ability to accurately report stack overflow: + http://www.gnu.org/software/libsigsegv/ + +** A number of portability improvements inherited from gnulib. + +* Noteworthy changes in Version 1.4.11 (2008-04-02) [stable] + Released by Eric Blake, based on git version 1.4.10a + +** Security fixes for the -F option, for bugs present since -F was + introduced in 1.3: Avoid core dump with 'm4 -F file -t undefined', and + avoid arbitrary code execution with certain file names. + +** Fix regression introduced in 1.4.9b in the `divert' builtin when more + than 512 kibibytes are saved in diversions on platforms like NetBSD + or darwin where fopen(name,"a+") seeks to the end of the file. + +** The output of the `maketemp' and `mkstemp' builtins is now quoted if a + file was created. This is a minor security fix, because it was possible + (although rather unlikely) that an unquoted string could match an + existing macro name, such that use of the `mkstemp' output would trigger + inadvertent macro expansion and operate on the wrong file name. + +** Enhance the `defn' builtin to support concatenation of multiple text + arguments, as required by POSIX. However, at this time, it is not + possible to concatenate a builtin macro with anything else; a warning is + now issued if this is attempted, although a future version of M4 may + lift this restriction to match other implementations. + +** Enhance the `format' builtin to parse all C99 floating point numbers, + even on platforms where strtod(3) is buggy, although the replacement + function does have the known issue of rounding errors when parsing + some decimal floating point values. This fixes testsuite failures + introduced in 1.4.9b. + +** Enhance the `index' builtin to guarantee linear behavior, in spite of + the surprisingly large number of systems with a brain-dead quadratic + strstr(3). + +** A number of portability improvements inherited from gnulib. + +* Noteworthy changes in Version 1.4.10 (2007-07-09) [stable] + Released by Eric Blake, based on CVS version 1.4.9c + +** Upgrade from GPL version 2 to GPL version 3 or later. + +** A number of portability improvements inherited from gnulib. + +** Avoid undefined behavior introduced in 1.4.9b in the `format' builtin + when handling %c. However, this area of code has never been documented, + and currently does not match the POSIX behavior of printf(1), so it may + have further changes in the next version. + +* Noteworthy changes in Version 1.4.9b (2007-05-29) [beta] + Released by Eric Blake, based on CVS version 1.4.9a + +** Fix regression introduced in 1.4.9 in the `eval' builtin when performing + division. + +** Fix regression introduced in 1.4.8 in the `-F' option that made it + impossible to freeze more than 512 kibibytes of diverted text. + +** The synclines option `-s' no longer generates sync lines in the middle of + multiline comments or quoted strings. + +** Work around a number of corner-case POSIX compliance bugs in various + broken stdio libraries. In particular, the `syscmd' builtin behaves + more predictably when stdin is seekable. + +** The `format' builtin now understands formats such as %a, %A, and %'hhd, + and works around a number of platform printf bugs. Furthermore, the + sequence format(%*.*d,-1,-1,1) no longer outputs random data. However, + some non-compliant platforms such as mingw still have known bugs in + strtod that may cause testsuite failures. + +** The testsuite is improved to also run gnulib portability tests for the + features that M4 imports from gnulib. + +* Noteworthy changes in Version 1.4.9 (2007-03-23) [stable] + Released by Eric Blake, based on CVS version 1.4.8c + +** Minor documentation and portability cleanups. + +* Noteworthy changes in Version 1.4.8b (2007-02-24) [beta] + Released by Eric Blake, based on CVS version 1.4.8a + +** Fix a regression introduced in 1.4.8 that made m4 unable to process + files larger than 2GiB on some platforms. + +** Fix a regression introduced in 1.4.8 that made m4 dump core when + invoked as 'm4 -- file'. + +** The `eval' builtin now follows C precedence rules. Additionally, the + short-circuit operators correctly short-circuit division by zero. The + previously undocumented alias of '=' meaning '==' in eval now triggers a + deprecation warning, so that a future version of M4 can implement a form + of variable assignment as an extension. + +** The `include' builtin now affects exit status on failure, as required by + POSIX. Use `sinclude' if you need a successful exit status. + +** The `-E'/`--fatal-warnings' command-line option now has two levels. When + specified only once, warnings affect exit status, but execution + continues, so that you can see all warnings instead of fixing them one + at a time. To achieve 1.4.8 behavior, where the first warning + immediately exits, specify -E twice on the command line. + +** A new `--warn-macro-sequence' command-line option allows detection of + sequences in `define' and `pushdef' definitions that match an optional + regular expression. The default regular expression is + `\$\({[^}]*}\|[0-9][0-9]+\)', corresponding to the sequences that might + not behave correctly when upgrading to the eventual M4 2.0. By default, + M4 2.0 will follow the POSIX requirement that a macro definition + containing `$11' must expand to the first argument concatenated with 1, + rather than the eleventh argument; and will take advantage of the POSIX + wording that allows implementations to treat `${11}' as the eleventh + argument instead of literal text. Be aware that Autoconf 2.61 will not + work with this option enabled with the default regular expression; but + Autoconf 2.62 will be compatible with this option. + +** Improved portability to platforms such as BSD/OS and AIX. + +* Noteworthy changes in Version 1.4.8 (2006-11-20) [stable] + Released by Eric Blake, based on CVS version 1.4.7a + +** The `divert' macro and `-H'/`--hashsize' command line option no longer + cause a core dump when handed extra large values. Also, `divert' now + uses memory proportional to the number of diversions in use, rather than + to the maximum diversion number encountered, so that large diversion + numbers are less likely to exhaust system memory; and is no longer + limited by the maximum number of file descriptors. + +** The `--help' and `--version' command line options now consistently + override all earlier options. For example, `m4 --debugfile=trace + --help' now no longer accidentally creates an empty file `trace'. + +** The `-L'/`--nesting-limit' command line option can now be set to 0 + to remove the default limit of 1024. However, it is still possible that + heavily nested input can cause abrupt program termination due to stack + overflow. + +** Problems encountered when writing to standard error, such as with the + `errprint' macro, now always cause a non-zero exit status. + +** Warnings and errors issued during macro expansion are now consistently + reported at the line where the macro name was detected, rather than + where the close parenthesis resides. Text wrapped by `m4wrap' now + remembers the location that was in effect when m4wrap was invoked, + rather than changing to line 0 and the empty string for a file. The + macros `__line__' and `__file__' now work correctly even as the last + token in an included file. + +** The `builtin' and `indir' macros now transparently handle builtin + tokens generated by `defn'. + +** When diversions created by the `divert' macro collect enough text that + M4 must use temporary files, the environment variable $TMPDIR is now + consulted, and a better effort is made to clean up those files in the + event of a fatal signal. + +** The `mkstemp' builtin is added with the same GNU semantics as `maketemp', + based on the recommendation of POSIX to deprecate the POSIX semantics of + `maketemp' as inherently insecure. In GNU mode (no -G supplied on the + command line), `maketemp' silently retains the secure GNU semantics, but + a future release of M4 will change this to emit a warning. In + traditional mode (m4 -G), `maketemp' now uses the POSIX-mandated + insecure semantics, and issues a warning that you should convert your + script to use `mkstemp' instead. Additionally, `mkstemp' and `maketemp' + are now well-defined even if the template argument does not end in six + `X' characters. + +** The manual has been improved, including a new section on a composite + macro `foreach'. + +** The `changecom' and `changequote' macros now treat an empty second + argument the same as if it were missing, rather than using the empty + string and making it impossible to end a comment or quote. + +** The `translit' macro now operates in linear instead of quadratic time, + and is now eight-bit clean. + +** The `-D', `-U', `-s', and `-t' command line options now take effect + after any files encountered earlier on the command line, rather than up + front, as is done in traditional implementations and required by POSIX. + +* Noteworthy changes in Version 1.4.7 (2006-09-25) [stable] + Released by Eric Blake, based on CVS version 1.4.6a + +** Fix regression from 1.4.5 in handling a file that ends in a macro + expansion without arguments instead of a newline. + +** The define and pushdef macros now warn when the first argument is not + a string, rather than silently doing nothing. + +** Standard input can now be read more than once, as in 'm4 - file -', and + is not closed until all wrapped text is handled. This makes a + difference when stdin is not a regular file, and also fixes bugs when + using the syscmd or esyscmd macros from wrapped text. + +** When standard input is a seekable file, the m4exit, syscmd, and esyscmd + macros now restore the current position to the next unread byte rather + than discarding an arbitrary amount of buffered data. + +** SysV command-line compatibility is no longer a goal of GNU M4; the + focus will be instead on POSIX compatibility. This release continues to + support previous usage, but adds warnings in areas which will allow a + future version of GNU M4 to use its own extensions without being tied to + the SysV command line interface. + +** The no-op compatibility command line options -B, -N, -S, -T, and + --diversions may be withdrawn or assigned new meanings in future + releases, so they now issue a warning if used. + +** A new command line option -i replaces the compatibility -e as the + short spelling of --interactive, for consistency with other GNU tools; a + warning is issued if the old spelling is used, and it may be assigned + new meaning in future releases. + +** A new command line option --debugfile replaces the options -o and + --error-output as the preferred spelling. The old options were + misleading in their names and inconsistent with other GNU tools; they + are still silently accepted, but no longer documented in --help, and may + be assigned new meanings in future releases. + +* Noteworthy changes in Version 1.4.6 (2006-08-25) [stable] + Released by Eric Blake, based on CVS version 1.4.5a + +** Fix buffer overruns in regexp and patsubst macros when handed a trailing + backslash in the replacement text, or when handling \n substitutions + beyond the number of \(\) groups. + +** Fix memory leak in regexp, patsubst, and changeword macros. + +** The format macro now understands %F, %g, and %G. + +** When loading frozen files, m4 now exits with status 63 if version + mismatch is detected. + +** Fix bugs that occurred when invoked with stdout or stderr closed, + and detect write failures to stdout or to the target of the debugfile + macro. In particular, the syscmd and esyscmd macros can no longer + interfere with the debug stream or diversions. + +** The m4exit macro now converts values outside the range 0-255 to 1. + +** It is now an error if a command-line input file ends in the middle of a + comment, matching the behavior of mid-string and mid-argument + collection. + +** The dnl macro now warns if end of file is encountered instead of a + newline. + +** The error message when end of file is encountered now uses the file and + line where the dangling construct started, rather than `NONE:0:'. + +** The debugmode and __file__ macros, and the -s/--synclines option, now + show what directory a file was found in when the -I/--include option or + M4PATH variable had an effect. + +** The changequote and changecom macros now work with 8-bit characters, and + quotes and comments that begin with `(' are properly recognized + following a word. + +** The new macro __program__ is added, which allows the input file to issue + an error message that resembles messages from m4. Warning and error + messages have been reformatted to comply with GNU Coding Standards. + +** The errprint, m4wrap, and shift macros are now recognized only with + arguments. + +** The index, substr, translit, regexp, and patsubst macros now produce + output when given only one argument, but still warn about a missing + second argument. + +** The patsubst macro now reliably finds zero-length matches at the end + of a string. + +* Noteworthy changes in Version 1.4.5 (2006-07-15) [stable] + Released by Eric Blake, based on CVS version 1.4.4c + +** Fix sysval on BeOS, OS/2, and other systems that store exit status + in the low-order byte. Additionally, on Unix platforms, if syscmd was + terminated by a signal, sysval now displays the signal number shifted + left by eight bits, to match traditional m4 implementations. + +** The maketemp macro is no longer subject to platform limitations (such as + 26 or 32 max files from a given template). + +** Frozen files now require that the first directive be V (version), to + better diagnose version mismatch. Additionally, if the F directive + (builtin function) names an unknown builtin that existed in the m4 that + froze the file but not in the current m4 (for example, changeword), the + warning is deferred until an attempt is made to actually use the + builtin. This allows downgrading from beta m4-1.4o to stable m4-1.4.5 + without breaking autoconf. + +** The format and indir macros are now recognized only with arguments. + +** The eval macro no longer crashes on x86 architectures when dividing the + minimum integer by -1. + +** On systems with ecvt and fcvt, format no longer truncates trailing + zeroes on integers printed with %.0f. On systems without these + functions, format is no longer subject to a buffer overflow that + permitted arbitrary code execution. + +** On native Windows builds, the macro __windows__ is provided instead of + __unix__. Likewise, on OS/2 builds, the macro __os2__ is provided. + This allows input files to determine when syscmd might behave + differently. + +** Fix bug in 1.4.3 patch to use \n line-endings that did not work for + cygwin. + +** When given the empty string or 0, undivert is now documented as a no-op + rather than closing stdout, warning about a non-existent file, or trying + to read a directory as a file. + +** Many documentation improvements. Also, the manual is now distributed + under FDL 1.2, rather than a stricter verbatim-only license. + +** Raise the -L (--nesting-limit) command line option limit from 250 to + 1024. + +** The decr, incr, divert, m4exit, and substr macros treat an empty number + as 0, issue a warning, and expand as normal; rather than issuing an + error and expanding to the empty string. + +** The eval macro now treats an empty radix argument as 10, handles radix 1, + and treats the width argument as number of digits excluding the sign, + for compatibility with other m4 implementations. + +** The ifdef, divert, m4exit, substr, and translit macros now correctly + ignore extra arguments. + +** The popdef and undefine macros now correctly accept multiple arguments. + +** Although changeword is on its last leg, if enabled, it now reverts to the + default (faster) regexp when passed the empty string. + +** The regexp and substr macros now warn and ignore a trailing backslash in + the replacement, and warn on \n for n larger than the number of + sub-expressions in the regexp. + +* Noteworthy changes in Version 1.4.4b (2006-06-17) [beta] + Released by Eric Blake, based on CVS version 1.4.4a + +** Fix a recursive push_string crashing bug, which affected changequote of + three or more characters on some compilers. + +** Use automake to fix build portability issues. + +** Fix a recursive m4wrap crashing bug. + +** Fix a 1 in 2**32 hash crashing bug. + +** Tracing a macro by name is now persistent, even if the macro is + subsequently undefined or redefined. The traceon and traceoff macros no + longer warn about undefined symbols. This solves a crash when using + indir on an undefined macro traced with the -t option, as well as an + incorrect result of ifdef. Furthermore, tracing is no longer + transferred with builtins, solving the bug of "m4 -tm4_eval" failing to + give trace output on the input + "define(`m4_eval',defn(`eval'))m4_eval(1)". + +** Fix a crash when a macro is undefined while collecting its arguments, by + always using the definition that was in effect before argument + collection. This behavior matches the C pre-processor, and means that + the sequence "define(`f',`1')f(define(`f',`2'))f" is now documented to + result in "12", rather than the previously undocumented "22". + +** Update the regex engine to fix several bugs. + +** Fix a potential crash on machines where char is signed. + +* Noteworthy changes in Version 1.4.4 (Oct 2005) [stable] + Released by Gary V. Vaughan + +** ./configure --infodir=/usr/share/info now works correctly. + +** When any file named on the command line is missing exit with status 1. + +* Noteworthy changes in Version 1.4.3 (Mar 2005) [stable] + Released by Gary V. Vaughan + +** DESTDIR installs now work correctly. + +** Don't segfault with uncompilable regexps to changeword(). + +** Always use \n line-endings for frozen files (fixes a Windows bug). + +** Portability fix for systems lacking mkstemp(3). + +** Approximately 20% speed up in the common case of usage with autoconf. + +** Supported on QNX 6.3. + +* Noteworthy changes in Version 1.4.2 (Aug 2004) [stable] + Released by Paul Eggert + +** No user visible changes; portability bug fixes only. + +* Noteworthy changes in Version 1.4.1 (Jun 2004) [stable] + Released by Paul Eggert + +** maketemp now creates an empty file with the given name, instead of merely + returning the name of a nonexistent file. This closes a security hole. + +* Noteworthy changes in Version 1.4 (Oct 1994) [stable] + Released by Franc,ois Pinard + +** (No user visible changes) + + +Version 1.3 - September 1994, by Franc,ois Pinard + +* Diversions are created as needed. Option `-N' is still accepted, but +otherwise ignored. Users should use only negative diversion numbers, +instead of high positive numbers, for diverting to nowhere. + +* Diversions should also work faster. No temporary files will be needed +at all if all diversions taken altogether do not use more than 512K. + +* Frozen state files may be produced with the `--freeze-state' (-F) +option and later brought back through the `--reload-state' (-R) option. + +Version 1.2 - July 1994, by Franc,ois Pinard + +* In patsubst(STRING, REGEXP, REPLACEMENT), \& in REPLACEMENT has been +changed to represent this part of STRING matched by the whole REGEXP, +instead of the whole STRING as before. \0 does the same, but emits a +diagnostic saying it will disappear in some subsequent release. + +* eval(EXPR) emits a diagnostic if EXPR has suffixed crumb. The same for +other numeric conversions in incr(), decr(), divert(), etc. + +* `--fatal-warnings' (-E) stops execution at first warning. + +* `--nesting-limit=LEVEL' (-L LEVEL) sets a limit to macro nesting. +It is initially fixed at 250. + +* `--word-regexp=REGEXP' (-W REGEXP) modifies macro name syntax, like +does the new `changeword(REGEXP)' macro. This feature is experimental, +tell me your opinions about it. You do need --enable-changeword at +configure time to get these things. Do *not* depend on them yet. + +* Trace output format is scannable by GNU Emacs' next-error function. + +* Stack overflow is detected and diagnosed on some capable systems. + +* Various bugs have been corrected, m4 should be more portable. See the +ChangeLog for details. + +Version 1.1 - November 1993, by Franc,ois Pinard + +Changes which might affect existing GNU m4 scripts: + +* Option `-V' has been removed, use `--version' instead. `--version' +writes on standard output instead of standard error, and inhibits any +script execution. + +* `--no-gnu-extensions' has been renamed `--traditional'. + +* In `eval', `^' used to indicate exponentiation, use `**' instead. + +* The automatic undiversion which takes place at end of all input is +forced into the main output stream. + +Changes which are unlikely to affect existing scripts: + +* `--help' prints an usage summary on standard output. Script execution +is then inhibited. + +* `--prefix-builtins' (-P) prefixes all builtin macros by `m4_'. + +* Most builtin macros for which arguments are mandatory, called without +any arguments, are no more recognized as builtin macros: they are +consequently copied verbatim to the output stream. + +* `define' and `pushdef' are usable with only one argument, they give +this argument an empty definition. + +* `eval' new operators for binary representation handling: `^' for +exclusive-or, `~' for the bitwise negation, `<<' and `>>' for shifts. + +* `eval' recognizes the notation 0bDIGITS for binary numbers and the +notation 0rRADIX:DIGITS for numbers in any radix from 1 to 36. + +Version 1.0.3 - December 1992, by Franc,ois Pinard + +Changes for the user: + +* `dnl' outputs a diagnostic if immediately followed by `('. Usually, +`dnl' is followed by newline or whitespace. + +* `ifelse' accepts without complaining the common idiom of having only +one argument. This is useful for introducing long comments. + +* `eval' always expresses values as signed, whatever the radix. + +* M4OPTS environment variable is no longer obeyed. + +* `--no-warnings' option is renamed `--silent'. + +* Debug lines use a new format more compatible with GNU standards. + +* Various bugs have been corrected. See the ChangeLog for details. + +Changes for the installer: + +* GNU m4 now uses an Autoconf-generated configure script, and should be +more easily portable in many ways. (Cray is not supported yet). + +* `make check' has been made more portable, expect no errors. + +Changes for the programmer: + +* Sources have been fully reindented to comply with GNU standards, and +cleaned up in many ways. + +* Sources have been protoized. Non-ANSI compilers are automatically +detected, then sources are unprotoized on the fly before compilation. + +* GNU m4 uses newer versions of obstack, regex, getopt, etc. + +Version 1.0 - October 1991, by Rene' Seindal + +* Uses GNU configure, taken from the gdb distribution. + +* Uses GNU getopt(), with long option names. + +* The -Q/+quiet option is added, which suppresses warnings about missing +or superflous arguments to built-in macros. + +* Added default options via the M4OPTS environment variable. + +* Several minor bugs have been fixed. + +Version 0.99 - July 1991, by Rene' Seindal + +* The builtins `incr' and `decr' are now implemented without use of +`eval'. + +* The builtin `indir' is added, to allow for indirect macro calls +(allows use of "illegal" macro names). + +* The debugging and tracing facilities has been enhanced considerably. +See the manual for details. + +* The -tMACRO option is added, marks MACRO for tracing as soon as it +is defined. + +* Builtins are traced after renaming iff they were before. + +* Named files can now be undiverted. + +* The -Nnum option can be used to increase the number of divertions +available. + +* Calling changecom without arguments now disables all comment handling. + +* A bug in `dnl' is fixed. + +* A bug in the multi-character quoting code is fixed. + +* Several typos in the manual has been corrected. More probably persist. + +Version 0.75 - November 1990, by Rene' Seindal + +* Implemented search path for include files (-I option and M4PATH +environment variable). + +* Implemented builtin `format' for printf-like formatting. + +* Implemented builtin `regexp' for searching for regular expressions. + +* Implemented builtin `patsubst' for substitution with regular +expressions. + +* Implemented builtin `esyscmd', which expands to a shell commands output. + +* Implemented `__file__' and `__line__' for use in error messages. + +* Implemented character ranges in `translit'. + +* Implemented control over debugging output. + +* Implemented multi-character quotes. + +* Implemented multi-character comment delimiters. + +* Changed predefined macro `gnu' to `__gnu__'. + +* Changed predefined macro `unix' to `__unix__', when the -G option is +not used. With -G, `unix' is still defined. + +* Added program name to error messages. + +* Fixed two missing null bytes bugs. + +Version 0.50 - January 1990, by Rene' Seindal + +* Initial beta release. + +Local Variables: +mode: outline +fill-column: 75 +End: diff --git a/coreseek/m4-1.4.13/README b/coreseek/m4-1.4.13/README new file mode 100644 index 0000000..2197a2c --- /dev/null +++ b/coreseek/m4-1.4.13/README @@ -0,0 +1,74 @@ +GNU `m4' is an implementation of the traditional Unix macro +processor. It is mostly SVR4 compatible, although it has some +extensions (for example, handling more than 9 positional parameters +to macros). `m4' also has built-in functions for including files, +running shell commands, doing arithmetic, etc. Autoconf needs GNU +`m4' for generating `configure' scripts, but not for running them. + +GNU `m4' was originally written by Rene' Seindal, from Denmark. +This release is considered stable. + +If GNU `m4' is meant to serve GNU `autoconf', beware that `m4' +should be fully installed *prior to* configuring `autoconf' itself. +Likewise, if you intend on hacking GNU `m4' from git, the bootstrap +process requires that you first install a released copy of GNU `m4'. + +If you are just trying to build `m4' from a released tarball, you +should not normally need to run `./bootstrap' or `autoreconf'; just go +ahead and start with `./configure'. If you are trying to build `m4' +from git, more information can be found in the version-control-only +file HACKING. + +M4 has an optional dependency on the libsigsegv library: + http://www.gnu.org/software/libsigsegv/ +If the library has not been installed in the standard location, you +can use `./configure --with-libsigsegv-prefix=/path/to/dir', to make +the build of `m4' use /path/to/dir/include/sigsegv.h as appropriate. +The use of this library is optional; the only difference in having it +available is that it increases the number of platforms where `m4' can +correctly distinguish stack overflow from an internal bug. It is +recommended that you use version 2.6 or newer. + +In the subdirectory `examples' you will find various m4 files, ranging +from trivial test files to rather advanced macros. If you intend to +use m4 seriously, you might find useful material down there. + +See file `BACKLOG' for a summary of pending mail and articles. +See file `COPYING' for copying conditions. Note that M4 is distributed +under the GNU Public License version 3 or later. Some files in the +distribution are copied from the gnulib project, and hence bear the +designation version 2 or later because they are unmodified from gnulib; +however, if you modify these files using M4 rather than gnulib as the +source, you must update the license to be GPLv3 or later. +See file `INSTALL' for compilation and installation instructions. +See file `NEWS' for a list of major changes in the current release. +See file `THANKS' for a list of contributors. + +By default, the `syscmd' and `esyscmd' macros try to use the first +instance of `sh' found by `command -p getconf PATH' at configure time, +with a default of `/bin/sh'. If that default is inappropriate, you +can use `./configure --with-syscmd-shell=location' to specify the +shell to use. + +By using `./configure --enable-changeword', you get an experimental +feature which allows for changing the syntax of what is a "word" in +`m4'. This feature will not be present in m4 2.0, but will be +replaced by other new features which provide similar capability, so +do not count on it. + +Send bug reports to `bug-m4@gnu.org'. A bug report is an adequate +description of the problem: your input, what you expected, what you got, +and why this is wrong. Diffs are welcome, but they only describe a +solution, from which the problem might be uneasy to infer. + +======================================================================== + +Copyright (C) 2000, 2005, 2006, 2007, 2008, 2009 Free Software +Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the ``GNU Free +Documentation License'' file as part of this distribution. diff --git a/coreseek/m4-1.4.13/THANKS b/coreseek/m4-1.4.13/THANKS new file mode 100644 index 0000000..15be77d --- /dev/null +++ b/coreseek/m4-1.4.13/THANKS @@ -0,0 +1,137 @@ +GNU M4 THANKS file + +GNU M4 was originally written by René Seindal. Many people +further contributed to GNU M4 by reporting problems, suggesting +various improvements or submitting actual code. Here is a list of +these people. Help me keep it complete and exempt of errors. + +Akiko Matsushita matusita@sra.co.jp +Akim Demaille demaille@inf.enst.fr +Alan Magnuson awm@osc.edu +Albert Chin m4-discuss@mlists.thewrittenword.com +Alexander Lehmann alex@hal.rhein-main.de +Amos Shapira amoss@cs.huji.ac.il +Andreas Büning andreas.buening@nexgo.de +Andreas Gustafsson gson@niksula.hut.fi +Andreas Schultz aschultz@warp10.net +Andreas Schwab schwab@ls5.informatik.uni-dortmund.de +Assar Westerlund assar@nada.kth.se +Ben A. Mesander ben@piglet.cr.usgs.gov +Bengt Mertensson bengt@mathematik.uni-bremen.de +Bernhard Daeubler daeb@physik.uni-ulm.de +Bjorn R. Bjornsson brb@falcon.is +Bob Badour bob@badour.net +Bob Proulx bob@proulx.com +Brendan Kehoe brendan@cygnus.com +Bruno Haible bruno@clisp.org +Cesar Strauss cestrauss@gmail.com +Chris McGuire chris@wso.net +Damian Menscher menscher@uiuc.edu +Dan Jacobson jidanni@jidanni.org +David J. MacKenzie djm@uunet.uu.net +David Perlin davep@nanosoft.com +Elbert Pol elbert.pol@gmail.com +Erez Zadok ezk@cs.columbia.edu +Eric Allman eric@cs.berkeley.edu +Eric Backus ericb@lsid.hp.com +Eric Blake ebb9@byu.net +Fernando Carrijo fcarrijo1980@gmail.com +François Pinard pinard@iro.umontreal.ca +Frank Schwidom schwidom@impernet.de +Gary V. Vaughan gary@gnu.org +Geoff Russell grussell@guest.adelaide.edu.au +Giovanni Toffetti toffettg@lu.unisi.ch +Greg A. Woods woods@web.apc.org +Hal Peterson hrp@pecan.cray.com +Hoang Uong hoang@ornews.intel.com +Ian Taylor ian@cygnus.com +Ilya N. Golubev gin@mo.msk.ru +Jason Merrill jason@jarthur.claremont.edu +Jean-Charles Longuet jclonguet@free.fr +Jim Avera jima@netcom.com +Jim Kingdom kingdon@cygnus.com +Jim Meyering meyering@acm.org +Joel E. Denny jdenny@ces.clemson.edu +Joel Sherrill jsherril@uahcs2.cs.uah.edu +John Brzustowski jbrzusto@fastmail.fm +John David Anglin dave@hiauly1.hia.nrc.ca +John Gatewood Ham zappaman@buraphalinux.org +Josef T. Burger bolo@bolo.com +Joseph E. Sacco jsacco@ssl.com +Karl Berry karl@freefriends.org +Karl Nelson nelson85@llnl.gov +Karl Vogel vogelke@c-17igp.wpafb.af.mil +Kaveh R. Ghazi ghazi@noc.rutgers.edu +Konrad Schwarz konrad.schwarz@siemens.com +Kristine Lund lund@lpnaxp.in2p3.fr +Krste Asanovic krste@icsi.berkeley.edu +Lawson Chan Lawson.Chan@tdsecurities.com +Marion Hakanson hakanson@cse.ogi.edu +Mark Seiden mis@seiden.com +Martin Koeppe mkoeppe@gmx.de +Matt Kraai kraai@debian.org +Matthew Woehlke mw_triad@users.sourceforge.net +Matthias Rabe rabe@mathematik.uni-bielefeld.de +Michael Fetterman mafetter@ichips.intel.com +Michael L. Welcome welcome@bigbird.llnl.gov +Mike Frysinger vapier@gentoo.org +Mike Lijewski lijewski@theory.tc.cornell.edu +Mike R. mroberge@aol.com +Mikhail Teterin Mikhail.Teterin@murex.com +Nelson H. F. Beebe beebe@math.utah.edu +Nick S. Kanakakorn skanan@otl.scu.edu +Nicolas Lichtmaier nick@technisys.com.ar +Nicolas Pioch pioch@inf.enst.fr +Noah Friedman friedman@gnu.org +Noah Misch noah@cs.caltech.edu +Paolo Bonzini bonzini@gnu.org +Paul Eggert eggert@cs.ucla.edu +Pete Chown pete.chown@dale.dircon.co.uk +Pierre Gaumond gaumondp@ere.umontreal.ca +Pierre Mathieu mathieu@geod.emr.ca +Ralf Wildenhues Ralf.Wildenhues@gmx.de +René Seindal seindal@diku.dk +Richard A Nelson cowboy@vnet.ibm.com +Richard Stallman rms@gnu.org +Robert Bernstein rocky@panix.com +Robert Bihlmeyer robbe@orcus.priv.at +Roland H. Pesch roland@wrs.com +Roland McGrath roland@gnu.org +Ronny Peine RonnyPeine@gmx.de +Sami Liedes sliedes@cc.hut.fi +Santiago Vila sanvila@debian.org +Scott Bartram deneb!scottb +Sergey Poznyakoff gray@gnu.org.ua +Simon Leinen simon@lia.di.epfl.ch +Skip Montanaro skip@automatrix.com +Stepan Kasal kasal@ucw.cz +Stephen Perkins perkins@cps.msu.edu +Steve Williamson willy@uinpla.npl.uiuc.edu +Steven Augart saugart@yahoo.com +Thomas Klausner tk@giga.or.at +Thorsten Ohl ohl@physics.harvard.edu +Tom G. Christensen tgc@jupiterrise.com +Tom McConnell tmcconne@sedona.intel.com +Tom Quinn trq@dionysos.thphys.ox.ac.uk +Tom Tromey tromey@cns.caltech.edu +Ulrich Drepper drepper@gnu.org +Vern Paxson vern@ee.lbl.gov +Vincent Lonngren Vincent.lonngren.759@student.lu.se +Vivek P. Singhal singhal@cs.utexas.edu +Walter Wong wcw+@cmu.edu + +======================================================================== + +Local Variables: +coding: utf-8 +End: + +Copyright (C) 2000, 2006, 2007, 2008, 2009 Free Software Foundation, +Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the ``GNU Free +Documentation License'' file as part of this distribution. diff --git a/coreseek/m4-1.4.13/TODO b/coreseek/m4-1.4.13/TODO new file mode 100644 index 0000000..4f1ea39 --- /dev/null +++ b/coreseek/m4-1.4.13/TODO @@ -0,0 +1,47 @@ +TODO file for GNU m4 + +Tell if you feel like volunteering for any +of these ideas, listed more or less in decreasing order of priority. + +* Features or problems + - Fix format() builtin to handle %c more like printf(1) in the shell + http://lists.gnu.org/archive/html/bug-m4/2007-05/msg00047.html + Also, gnulib needs help to overcome mingw bugs related to format(). + - Update documentation from accumulated mail about it + - Study synclines at the very beginning of each diverted sequence + - Make eval work on bignums - the 32 bits limit is artificial + From Krste Asanovic , 1993-03-20 + +* Optimization and clean up + - Check for memory leaks and uninitialized reads + From Vern Paxson on 1993-12-06 + - Profile GNU m4 and speed it up + From David J. MacKenzie , 1993-01-20 + + GNU m4 should be sped up by a factor of three for competing + with other versions (I think that the lexer is not agressive + enough and too often return single characters; obstacks might + be a little abused, too). + - Have NULs go really undisturbed through GNU m4 + See `dumpdef' and debugging section, which abuses %s + From Thorsten Ohl , 1992-12-21 + + path.c (add_include_directory): Why the '\0' terminator? + + GNU m4 is lousy regarding NULs in streams (this would require + maintaining the string lengths, and avoiding strlen, strcpy, + etc.). + +Local Variables: +mode: outline +outline-regexp: " *[-+*.] \\| " +End: + +Copyright (C) 2000, 2006, 2007 Free Software Foundation, Inc. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the ``GNU Free +Documentation License'' file as part of this distribution. diff --git a/coreseek/m4-1.4.13/acinclude.m4 b/coreseek/m4-1.4.13/acinclude.m4 new file mode 100644 index 0000000..c14a5e3 --- /dev/null +++ b/coreseek/m4-1.4.13/acinclude.m4 @@ -0,0 +1,24 @@ +# Local additions to Autoconf macros. +# Copyright (C) 1992, 1994, 2004, 2006, 2008 Free Software Foundation, Inc. +# Francois Pinard , 1992. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check if --with-dmalloc was given. + +AC_DEFUN([M4_WITH_DMALLOC], +[AC_MSG_CHECKING([if malloc debugging is wanted]) +AC_ARG_WITH([dmalloc], +[AS_HELP_STRING([--with-dmalloc], + [use dmalloc, as in dmalloc.tar.gz from + @/ftp.antaire.com:antaire/src/dmalloc.])], +[if test "$withval" = yes; then + AC_MSG_RESULT([yes]) + AC_DEFINE([WITH_DMALLOC], [1], [Define to 1 if malloc debugging is enabled]) + LIBS="$LIBS -ldmalloc" + LDFLAGS="$LDFLAGS -g" +else + AC_MSG_RESULT([no]) +fi], [AC_MSG_RESULT([no])])]) diff --git a/coreseek/m4-1.4.13/aclocal.m4 b/coreseek/m4-1.4.13/aclocal.m4 new file mode 100644 index 0000000..a55b156 --- /dev/null +++ b/coreseek/m4-1.4.13/aclocal.m4 @@ -0,0 +1,1104 @@ +# generated automatically by aclocal 1.10b -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.63b],, +[m4_warning([this file was generated for autoconf 2.63b. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.10b' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.10b], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.10b])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 15 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/00gnulib.m4]) +m4_include([m4/alloca.m4]) +m4_include([m4/assert.m4]) +m4_include([m4/autobuild.m4]) +m4_include([m4/btowc.m4]) +m4_include([m4/c-stack.m4]) +m4_include([m4/cloexec.m4]) +m4_include([m4/close-stream.m4]) +m4_include([m4/closein.m4]) +m4_include([m4/closeout.m4]) +m4_include([m4/codeset.m4]) +m4_include([m4/config-h.m4]) +m4_include([m4/dirname.m4]) +m4_include([m4/dos.m4]) +m4_include([m4/double-slash-root.m4]) +m4_include([m4/eealloc.m4]) +m4_include([m4/environ.m4]) +m4_include([m4/errno_h.m4]) +m4_include([m4/error.m4]) +m4_include([m4/execute.m4]) +m4_include([m4/exitfail.m4]) +m4_include([m4/exponentd.m4]) +m4_include([m4/exponentf.m4]) +m4_include([m4/exponentl.m4]) +m4_include([m4/extensions.m4]) +m4_include([m4/fatal-signal.m4]) +m4_include([m4/fcntl_h.m4]) +m4_include([m4/fflush.m4]) +m4_include([m4/filenamecat.m4]) +m4_include([m4/float_h.m4]) +m4_include([m4/fopen.m4]) +m4_include([m4/fpending.m4]) +m4_include([m4/fpieee.m4]) +m4_include([m4/fpurge.m4]) +m4_include([m4/freading.m4]) +m4_include([m4/frexp.m4]) +m4_include([m4/frexpl.m4]) +m4_include([m4/fseeko.m4]) +m4_include([m4/ftello.m4]) +m4_include([m4/getdtablesize.m4]) +m4_include([m4/getopt.m4]) +m4_include([m4/gettext.m4]) +m4_include([m4/gettimeofday.m4]) +m4_include([m4/gl_list.m4]) +m4_include([m4/glibc21.m4]) +m4_include([m4/gnulib-common.m4]) +m4_include([m4/gnulib-comp.m4]) +m4_include([m4/include_next.m4]) +m4_include([m4/inline.m4]) +m4_include([m4/intmax_t.m4]) +m4_include([m4/inttypes_h.m4]) +m4_include([m4/isnand.m4]) +m4_include([m4/isnanf.m4]) +m4_include([m4/isnanl.m4]) +m4_include([m4/ldexpl.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/libsigsegv.m4]) +m4_include([m4/localcharset.m4]) +m4_include([m4/locale-fr.m4]) +m4_include([m4/locale-ja.m4]) +m4_include([m4/locale-zh.m4]) +m4_include([m4/lock.m4]) +m4_include([m4/longlong.m4]) +m4_include([m4/lseek.m4]) +m4_include([m4/lstat.m4]) +m4_include([m4/malloc.m4]) +m4_include([m4/malloca.m4]) +m4_include([m4/math_h.m4]) +m4_include([m4/mbrtowc.m4]) +m4_include([m4/mbsinit.m4]) +m4_include([m4/mbstate_t.m4]) +m4_include([m4/mkdtemp.m4]) +m4_include([m4/mkstemp.m4]) +m4_include([m4/multiarch.m4]) +m4_include([m4/nocrash.m4]) +m4_include([m4/open.m4]) +m4_include([m4/pathmax.m4]) +m4_include([m4/pipe.m4]) +m4_include([m4/po.m4]) +m4_include([m4/posix_spawn.m4]) +m4_include([m4/printf-frexp.m4]) +m4_include([m4/printf-frexpl.m4]) +m4_include([m4/printf.m4]) +m4_include([m4/quotearg.m4]) +m4_include([m4/rawmemchr.m4]) +m4_include([m4/regex.m4]) +m4_include([m4/sched_h.m4]) +m4_include([m4/setenv.m4]) +m4_include([m4/sig_atomic_t.m4]) +m4_include([m4/sigaction.m4]) +m4_include([m4/signal_h.m4]) +m4_include([m4/signalblocking.m4]) +m4_include([m4/signbit.m4]) +m4_include([m4/size_max.m4]) +m4_include([m4/snprintf.m4]) +m4_include([m4/spawn_h.m4]) +m4_include([m4/ssize_t.m4]) +m4_include([m4/stdarg.m4]) +m4_include([m4/stdbool.m4]) +m4_include([m4/stdint.m4]) +m4_include([m4/stdint_h.m4]) +m4_include([m4/stdio-safer.m4]) +m4_include([m4/stdio_h.m4]) +m4_include([m4/stdlib-safer.m4]) +m4_include([m4/stdlib_h.m4]) +m4_include([m4/strchrnul.m4]) +m4_include([m4/strerror.m4]) +m4_include([m4/string_h.m4]) +m4_include([m4/strndup.m4]) +m4_include([m4/strnlen.m4]) +m4_include([m4/strsignal.m4]) +m4_include([m4/strstr.m4]) +m4_include([m4/strtod.m4]) +m4_include([m4/strtol.m4]) +m4_include([m4/sys_stat_h.m4]) +m4_include([m4/sys_time_h.m4]) +m4_include([m4/sys_wait_h.m4]) +m4_include([m4/tempname.m4]) +m4_include([m4/threadlib.m4]) +m4_include([m4/tls.m4]) +m4_include([m4/tmpdir.m4]) +m4_include([m4/ungetc.m4]) +m4_include([m4/unistd-safer.m4]) +m4_include([m4/unistd_h.m4]) +m4_include([m4/unlocked-io.m4]) +m4_include([m4/vasnprintf.m4]) +m4_include([m4/vasprintf-posix.m4]) +m4_include([m4/vasprintf.m4]) +m4_include([m4/wait-process.m4]) +m4_include([m4/wchar.m4]) +m4_include([m4/wchar_t.m4]) +m4_include([m4/wcrtomb.m4]) +m4_include([m4/wctob.m4]) +m4_include([m4/wctype.m4]) +m4_include([m4/wint_t.m4]) +m4_include([m4/xalloc.m4]) +m4_include([m4/xsize.m4]) +m4_include([m4/xstrndup.m4]) +m4_include([m4/xvasprintf.m4]) +m4_include([acinclude.m4]) diff --git a/coreseek/m4-1.4.13/bootstrap b/coreseek/m4-1.4.13/bootstrap new file mode 100755 index 0000000..e9c8200 --- /dev/null +++ b/coreseek/m4-1.4.13/bootstrap @@ -0,0 +1,304 @@ +#! /bin/sh + +# bootstrap (GNU M4) version 2009-03-23 +# Written by Gary V. Vaughan + +# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software +# Foundation, Inc. + +# This file is part of GNU M4. +# +# GNU M4 is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GNU M4 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Usage: $progname [options] + +# -f --force bootstrap even when sources are not from git +# -v --version print version information +# -h,-? --help print short or long help message + +# You can also set the following variables to help $progname +# locate the right tools: +# AUTORECONF, CONFIG_SHELL, GNULIB_SRCDIR, M4, RM, SED + +# This script bootstraps a git or CVS checkout of GNU M4 by correctly +# calling out to parts of the GNU Build Platform. Currently this +# requires GNU Autoconf 2.60, GNU Automake 1.10.1, and bleeding edge +# git or CVS snapshots of GNU Gnulib. + +# Report bugs to + +: ${AUTORECONF=autoreconf} +: ${CONFIG_SHELL=/bin/sh} +: ${RM='rm -f'} +: ${SED=sed} + +# Ensure file names are sorted consistently across platforms. +LC_ALL=C +export LC_ALL + +config_macro_dir=m4 + +dirname="s,/[^/]*$,," +basename="s,^.*/,,g" + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +progname=`echo "$progpath" | $SED "$basename"` +PROGRAM=bootstrap + +# Detect whether this is a version control system checkout or a tarball +vcs_only_file=HACKING + +# func_echo arg... +# Echo program name prefixed message. +func_echo () +{ + echo $progname: ${1+"$@"} +} + + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + echo $progname: ${1+"$@"} >&2 +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_error ${1+"$@"} +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "Try \`$progname --help' for more information." +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED '/^# Usage:/,/# -h/ { + s/^# //; s/^# *$//; + s/\$progname/'$progname'/; + p; + }; d' < "$progpath" + echo + echo "run \`$progname --help | more' for full usage" + exit $EXIT_SUCCESS +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED '/^# Usage:/,/# Report bugs to/ { + s/^# //; s/^# *$//; + s/\$progname/'$progname'/; + p; + }; d' < "$progpath" + exit $EXIT_SUCCESS +} + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# //; s/^# *$//; + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/; + p; + }; d' < "$progpath" + exit $EXIT_SUCCESS +} + +# func_update +# Copy $1 to $2 if it is newer. +func_update () +{ + if test -f "$2" && cmp -s "$1" "$2" ; then + func_verbose "$2 is up-to-date" + else + func_echo "copying $1 -> $2" + cp "$1" "$2" + fi +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `bootstrap --version' happen quickly. +{ + # sed scripts: + my_sed_single_opt='1s/^\(..\).*$/\1/;q' + my_sed_single_rest='1s/^..\(.*\)$/\1/;q' + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + # Separate optargs to short options: + -f|--force) vcs_only_file= ;; + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set -- "$opt" ${1+"$@"}; break ;; + esac + done + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE + + if test -n "$vcs_only_file" && test ! -r "$vcs_only_file"; then + func_fatal_error \ + "Bootstrapping from a non-version-control distribution is risky." + fi +} + +## ---------------- ## +## Version control. ## +## ---------------- ## + +# gnulib-tool updates m4/.{git,cvs}ignore and lib/.{git,cvs}ignore, and +# keeping generated files under version control does not make sense. +# Since lib is entirely ignored, we only need to prepopulate the m4 ignore +# files with generated files not tracked by gnulib-tool. +if test -f $config_macro_dir/.gitignore ; then + : +else + func_echo "creating initial $config_macro_dir/.cvsignore" + cat > $config_macro_dir/.cvsignore <<\EOF +# files created by gnulib, but that gnulib doesn't track +*~ +.cvsignore +.gitignore +gnulib-comp.m4 +# gnulib-tool edits below here +EOF + func_echo "creating initial $config_macro_dir/.gitignore" + cp $config_macro_dir/.cvsignore $config_macro_dir/.gitignore +fi + +# See if we can use gnulib's git-merge-changelog merge driver. +if test -d .git && (git --version) >/dev/null 2>/dev/null ; then + if git config merge.merge-changelog.driver >/dev/null ; then + : + elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then + func_echo "initializing git-merge-changelog driver" + git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' + git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' + else + func_echo "consider installing git-merge-changelog from gnulib" + fi + if git config diff.texinfo.funcname >/dev/null ; then + : + else + func_echo "initializing git texinfo diff driver" + git config diff.texinfo.funcname '^@node[ \t][ \t]*\\([^,][^,]*\\)' + fi +fi + +## ------------------------------ ## +## Update the gnulib module tree. ## +## ------------------------------ ## + +if test -d .git && (git --version) >/dev/null 2>/dev/null ; then + if test -f gnulib/gnulib-tool ; then + func_echo "updating gnulib submodule" + git submodule update \ + || func_fatal_error "Unable to update gnulib" + else + # A fresh checkout creates an empty subdirectory gnulib. However, + # older git didn't know how to clone into an empty subdir. If the + # user provided GNULIB_SRCDIR, then make the initial clone refer + # to the existing checkout, to save network traffic. + func_echo "importing gnulib submodule" + if test -d "$GNULIB_SRCDIR" ; then + rmdir gnulib 2>/dev/null + git clone --reference "$GNULIB_SRCDIR" git://git.sv.gnu.org/gnulib.git \ + && git submodule init && git submodule update \ + || func_fatal_error "Unable to update gnulib" + else + git submodule update --init \ + || func_fatal_error "Unable to update gnulib" + fi + fi +else + func_echo "git not detected. If needed, update gnulib subdirectory manually" +fi + +## ---------------------- ## +## Import Gnulib modules. ## +## ---------------------- ## + +func_echo "running: $CONFIG_SHELL gnulib/gnulib-tool --update" +$CONFIG_SHELL gnulib/gnulib-tool --update \ + || func_fatal_error "gnulib-tool failed" + +## ----------- ## +## Autoreconf. ## +## ----------- ## + +func_echo "running: $AUTORECONF --verbose --install" +$AUTORECONF --verbose --install || func_fatal_error "autoreconf failed" + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "# bootstrap (GNU M4) version " +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/announce-gen b/coreseek/m4-1.4.13/build-aux/announce-gen new file mode 100755 index 0000000..e5e7491 --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/announce-gen @@ -0,0 +1,523 @@ +#!/usr/bin/perl -w +# Generate a release announcement message. + +my $VERSION = '2009-03-05 09:52'; # UTC +# The definition above must lie within the first 8 lines in order +# for the Emacs time-stamp write hook (at end) to update it. +# If you change this file with Emacs, please let the write hook +# do its job. Otherwise, update this string manually. + +# Copyright (C) 2002-2009 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Written by Jim Meyering + +use strict; + +use Getopt::Long; +use Digest::MD5; +use Digest::SHA1; +use POSIX qw(strftime); + +(my $ME = $0) =~ s|.*/||; + +my %valid_release_types = map {$_ => 1} qw (alpha beta major); +my @archive_suffixes = ('tar.gz', 'tar.bz2', 'tar.lzma', 'tar.xz'); + +END +{ + # Nobody ever checks the status of print()s. That's okay, because + # if any do fail, we're guaranteed to get an indicator when we close() + # the filehandle. + # + # Close stdout now, and if there were no errors, return happy status. + # If stdout has already been closed by the script, though, do nothing. + defined fileno STDOUT + or return; + close STDOUT + and return; + + # Errors closing stdout. Indicate that, and hope stderr is OK. + warn "$ME: closing standard output: $!\n"; + + # Don't be so arrogant as to assume that we're the first END handler + # defined, and thus the last one invoked. There may be others yet + # to come. $? will be passed on to them, and to the final _exit(). + # + # If it isn't already an error, make it one (and if it _is_ an error, + # preserve the value: it might be important). + $? ||= 1; +} + +sub usage ($) +{ + my ($exit_code) = @_; + my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); + if ($exit_code != 0) + { + print $STREAM "Try `$ME --help' for more information.\n"; + } + else + { + my @types = sort keys %valid_release_types; + print $STREAM < = C + +Compute the sizes of the C<@file> and return them as a hash. Return +C if one of the computation failed. + +=cut + +sub sizes (@) +{ + my (@file) = @_; + + my $fail = 0; + my %res; + foreach my $f (@file) + { + my $cmd = "du --human $f"; + my $t = `$cmd`; + # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS + $@ + and (warn "$ME: command failed: `$cmd'\n"), $fail = 1; + chomp $t; + $t =~ s/^([\d.]+[MkK]).*/${1}B/; + $res{$f} = $t; + } + return $fail ? undef : %res; +} + +=item C dedicated to the list of <@file>, which +sizes are stored in C<%size>, and which are available from the C<@url>. + +=cut + +sub print_locations ($\@\%@) +{ + my ($title, $url, $size, @file) = @_; + print "Here are the $title:\n"; + foreach my $url (@{$url}) + { + for my $file (@file) + { + print " $url/$file"; + print " (", $$size{$file}, ")" + if exists $$size{$file}; + print "\n"; + } + } + print "\n"; +} + +=item C. + +=cut + +sub print_checksums (@) +{ + my (@file) = @_; + + print "Here are the MD5 and SHA1 checksums:\n"; + print "\n"; + + foreach my $meth (qw (md5 sha1)) + { + foreach my $f (@file) + { + open IN, '<', $f + or die "$ME: $f: cannot open for reading: $!\n"; + binmode IN; + my $dig = + ($meth eq 'md5' + ? Digest::MD5->new->addfile(*IN)->hexdigest + : Digest::SHA1->new->addfile(*IN)->hexdigest); + close IN; + print "$dig $f\n"; + } + } + print "\n"; +} + +=item C addressing changes +between versions C<$prev_version> and C<$curr_version>. + +=cut + +sub print_news_deltas ($$$) +{ + my ($news_file, $prev_version, $curr_version) = @_; + + print "\n$news_file\n\n"; + + # Print all lines from $news_file, starting with the first one + # that mentions $curr_version up to but not including + # the first occurrence of $prev_version. + my $in_items; + + my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/; + + open NEWS, '<', $news_file + or die "$ME: $news_file: cannot open for reading: $!\n"; + while (defined (my $line = )) + { + if ( ! $in_items) + { + # Match lines like these: + # * Major changes in release 5.0.1: + # * Noteworthy changes in release 6.6 (2006-11-22) [stable] + $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o + or next; + $in_items = 1; + print $line; + } + else + { + # This regexp must not match version numbers in NEWS items. + # For example, they might well say `introduced in 4.5.5', + # and we don't want that to match. + $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o + and last; + print $line; + } + } + close NEWS; + + $in_items + or die "$ME: $news_file: no matching lines for `$curr_version'\n"; +} + +sub print_changelog_deltas ($$) +{ + my ($package_name, $prev_version) = @_; + + # Print new ChangeLog entries. + + # First find all CVS-controlled ChangeLog files. + use File::Find; + my @changelog; + find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS' + and push @changelog, $File::Find::name}}, + '.'); + + # If there are no ChangeLog files, we're done. + @changelog + or return; + my %changelog = map {$_ => 1} @changelog; + + # Reorder the list of files so that if there are ChangeLog + # files in the specified directories, they're listed first, + # in this order: + my @dir = qw ( . src lib m4 config doc ); + + # A typical @changelog array might look like this: + # ./ChangeLog + # ./po/ChangeLog + # ./m4/ChangeLog + # ./lib/ChangeLog + # ./doc/ChangeLog + # ./config/ChangeLog + my @reordered; + foreach my $d (@dir) + { + my $dot_slash = $d eq '.' ? $d : "./$d"; + my $target = "$dot_slash/ChangeLog"; + delete $changelog{$target} + and push @reordered, $target; + } + + # Append any remaining ChangeLog files. + push @reordered, sort keys %changelog; + + # Remove leading `./'. + @reordered = map { s!^\./!!; $_ } @reordered; + + print "\nChangeLog entries:\n\n"; + # print join ("\n", @reordered), "\n"; + + $prev_version =~ s/\./_/g; + my $prev_cvs_tag = "\U$package_name\E-$prev_version"; + + my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered"; + open DIFF, '-|', $cmd + or die "$ME: cannot run `$cmd': $!\n"; + # Print two types of lines, making minor changes: + # Lines starting with `+++ ', e.g., + # +++ ChangeLog 22 Feb 2003 16:52:51 -0000 1.247 + # and those starting with `+'. + # Don't print the others. + my $prev_printed_line_empty = 1; + while (defined (my $line = )) + { + if ($line =~ /^\+\+\+ /) + { + my $separator = "*"x70 ."\n"; + $line =~ s///; + $line =~ s/\s.*//; + $prev_printed_line_empty + or print "\n"; + print $separator, $line, $separator; + } + elsif ($line =~ /^\+/) + { + $line =~ s///; + print $line; + $prev_printed_line_empty = ($line =~ /^$/); + } + } + close DIFF; + + # The exit code should be 1. + # Allow in case there are no modified ChangeLog entries. + $? == 256 || $? == 128 + or warn "$ME: warning: `cmd' had unexpected exit code or signal ($?)\n"; +} + +sub get_tool_versions ($$) +{ + my ($tool_list, $gnulib_version) = @_; + @$tool_list + or return (); + + my $fail; + my @tool_version_pair; + foreach my $t (@$tool_list) + { + if ($t eq 'gnulib') + { + push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version; + next; + } + # Assume that the last "word" on the first line of + # `tool --version` output is the version string. + my ($first_line, undef) = split ("\n", `$t --version`); + if ($first_line =~ /.* (\d[\w.-]+)$/) + { + $t = ucfirst $t; + push @tool_version_pair, "$t $1"; + } + else + { + defined $first_line + and $first_line = ''; + warn "$ME: $t: unexpected --version output\n:$first_line"; + $fail = 1; + } + } + + $fail + and exit 1; + + return @tool_version_pair; +} + +{ + # Neutralize the locale, so that, for instance, "du" does not + # issue "1,2" instead of "1.2", what confuses our regexps. + $ENV{LC_ALL} = "C"; + + my $release_type; + my $package_name; + my $prev_version; + my $curr_version; + my $gpg_key_id; + my @url_dir_list; + my @news_file; + my $bootstrap_tools; + my $gnulib_version; + my $print_checksums_p = 1; + + GetOptions + ( + 'release-type=s' => \$release_type, + 'package-name=s' => \$package_name, + 'previous-version=s' => \$prev_version, + 'current-version=s' => \$curr_version, + 'gpg-key-id=s' => \$gpg_key_id, + 'url-directory=s' => \@url_dir_list, + 'news=s' => \@news_file, + 'bootstrap-tools=s' => \$bootstrap_tools, + 'gnulib-version=s' => \$gnulib_version, + 'print-checksums!' => \$print_checksums_p, + 'archive-suffix=s' => \@archive_suffixes, + + help => sub { usage 0 }, + version => sub { print "$ME version $VERSION\n"; exit }, + ) or usage 1; + + my $fail = 0; + # Ensure that sure each required option is specified. + $release_type + or (warn "$ME: release type not specified\n"), $fail = 1; + $package_name + or (warn "$ME: package name not specified\n"), $fail = 1; + $prev_version + or (warn "$ME: previous version string not specified\n"), $fail = 1; + $curr_version + or (warn "$ME: current version string not specified\n"), $fail = 1; + $gpg_key_id + or (warn "$ME: GnuPG key ID not specified\n"), $fail = 1; + @url_dir_list + or (warn "$ME: URL directory name(s) not specified\n"), $fail = 1; + + my @tool_list = split ',', $bootstrap_tools; + + grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version + and (warn "$ME: when specifying gnulib as a tool, you must also specify\n" + . "--gnulib-version=V, where V is the result of running git describe\n" + . "in the gnulib source directory.\n"), $fail = 1; + + exists $valid_release_types{$release_type} + or (warn "$ME: `$release_type': invalid release type\n"), $fail = 1; + + @ARGV + and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"), + $fail = 1; + $fail + and usage 1; + + my $my_distdir = "$package_name-$curr_version"; + + my $xd = "$package_name-$prev_version-$curr_version.xdelta"; + + my @candidates = map { "$my_distdir.$_" } @archive_suffixes; + my @tarballs = grep {-f $_} @candidates; + + @tarballs + or die "$ME: none of " . join(', ', @candidates) . " were found\n"; + my @sizable = @tarballs; + -f $xd + and push @sizable, $xd; + my %size = sizes (@sizable); + %size + or exit 1; + + # The markup is escaped as <\# so that when this script is sent by + # mail (or part of a diff), Gnus is not triggered. + print < + +FIXME: put comments here + +EOF + + print_locations ("compressed sources", @url_dir_list, %size, @tarballs); + -f $xd + and print_locations ("xdelta diffs (useful? if so, " + . "please tell bug-gnulib\@gnu.org)", + @url_dir_list, %size, $xd); + my @sig_files = map { "$_.sig" } @tarballs; + print_locations ("GPG detached signatures[*]", @url_dir_list, %size, + @sig_files); + + $print_checksums_p + and print_checksums (@sizable); + + print <. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/config.guess b/coreseek/m4-1.4.13/build-aux/config.guess new file mode 100755 index 0000000..e5716ee --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/config.guess @@ -0,0 +1,1555 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2009-02-03' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +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` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/config.rpath b/coreseek/m4-1.4.13/build-aux/config.rpath new file mode 100755 index 0000000..85c2f20 --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/config.rpath @@ -0,0 +1,672 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2008 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + darwin*) + case $cc_basename in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if test "$GCC" = yes ; then + : + else + case $cc_basename in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + library_names_spec='$libname.a' + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd1*) + ;; + freebsd* | dragonfly*) + case "$host_os" in + freebsd[123]*) + library_names_spec='$libname$shrext$versuffix' ;; + *) + library_names_spec='$libname$shrext' ;; + esac + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + nto-qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/depcomp b/coreseek/m4-1.4.13/build-aux/depcomp new file mode 100755 index 0000000..0fb633e --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/depcomp @@ -0,0 +1,623 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-03-04.20 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/gendocs.sh b/coreseek/m4-1.4.13/build-aux/gendocs.sh new file mode 100755 index 0000000..ba76744 --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/gendocs.sh @@ -0,0 +1,361 @@ +#!/bin/sh +# gendocs.sh -- generate a GNU manual in many formats. This script is +# mentioned in maintain.texi. See the help message below for usage details. + +scriptversion=2009-01-02.08 + +# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, +# or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Original author: Mohit Agarwal. +# Send bug reports and any other correspondence to bug-texinfo@gnu.org. + +prog=`basename "$0"` +srcdir=`pwd` + +scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh" +templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template" + +: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} +: ${MAKEINFO="makeinfo"} +: ${TEXI2DVI="texi2dvi -t @finalout"} +: ${DVIPS="dvips"} +: ${DOCBOOK2HTML="docbook2html"} +: ${DOCBOOK2PDF="docbook2pdf"} +: ${DOCBOOK2PS="docbook2ps"} +: ${DOCBOOK2TXT="docbook2txt"} +: ${GENDOCS_TEMPLATE_DIR="."} +: ${TEXI2HTML="texi2html"} +unset CDPATH +unset use_texi2html + +version="gendocs.sh $scriptversion + +Copyright 2009 Free Software Foundation, Inc. +There is NO warranty. You may redistribute this software +under the terms of the GNU General Public License. +For more information about these matters, see the files named COPYING." + +usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE + +Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source. +See the GNU Maintainers document for a more extensive discussion: + http://www.gnu.org/prep/maintain_toc.html + +Options: + -o OUTDIR write files into OUTDIR, instead of manual/. + --email ADR use ADR as contact in generated web pages. + --docbook convert to DocBook too (xml, txt, html, pdf and ps). + --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets. + --texi2html use texi2html to generate HTML targets. + --help display this help and exit successfully. + --version display version information and exit successfully. + +Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" + +Typical sequence: + cd PACKAGESOURCE/doc + wget \"$scripturl\" + wget \"$templateurl\" + $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" + +Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR +to override). Move all the new files into your web CVS tree, as +explained in the Web Pages node of maintain.texi. + +Please use the --email ADDRESS option to specify your bug-reporting +address in the generated HTML pages. + +MANUAL-TITLE is included as part of the HTML of the overall +manual/index.html file. It should include the name of the package being +documented. manual/index.html is created by substitution from the file +$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the +generic template for your own purposes.) + +If you have several manuals, you'll need to run this script several +times with different MANUAL values, specifying a different output +directory with -o each time. Then write (by hand) an overall index.html +with links to them all. + +If a manual's Texinfo sources are spread across several directories, +first copy or symlink all Texinfo sources into a single directory. +(Part of the script's work is to make a tar.gz of the sources.) + +You can set the environment variables MAKEINFO, TEXI2DVI, and DVIPS to +control the programs that get executed, and GENDOCS_TEMPLATE_DIR to +control where the gendocs_template file is looked for. (With --docbook, +the environment variables DOCBOOK2HTML, DOCBOOK2PDF, DOCBOOK2PS, and +DOCBOOK2TXT are also respected.) + +By default, makeinfo is run in the default (English) locale, since +that's the language of most Texinfo manuals. If you happen to have a +non-English manual and non-English web site, see the SETLANG setting +in the source. + +Email bug reports or enhancement requests to bug-texinfo@gnu.org. +" + +calcsize() +{ + size=`ls -ksl $1 | awk '{print $1}'` + echo $size +} + +MANUAL_TITLE= +PACKAGE= +EMAIL=webmasters@gnu.org # please override with --email +htmlarg= +outdir=manual + +while test $# -gt 0; do + case $1 in + --email) shift; EMAIL=$1;; + --help) echo "$usage"; exit 0;; + --version) echo "$version"; exit 0;; + -o) shift; outdir=$1;; + --docbook) docbook=yes;; + --html) shift; htmlarg=$1;; + --texi2html) use_texi2html=1;; + -*) + echo "$0: Unknown option \`$1'." >&2 + echo "$0: Try \`--help' for more information." >&2 + exit 1;; + *) + if test -z "$PACKAGE"; then + PACKAGE=$1 + elif test -z "$MANUAL_TITLE"; then + MANUAL_TITLE=$1 + else + echo "$0: extra non-option argument \`$1'." >&2 + exit 1 + fi;; + esac + shift +done + +if test -s "$srcdir/$PACKAGE.texinfo"; then + srcfile=$srcdir/$PACKAGE.texinfo +elif test -s "$srcdir/$PACKAGE.texi"; then + srcfile=$srcdir/$PACKAGE.texi +elif test -s "$srcdir/$PACKAGE.txi"; then + srcfile=$srcdir/$PACKAGE.txi +else + echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 + exit 1 +fi + +if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then + echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 + echo "$0: it is available from $templateurl." >&2 + exit 1 +fi + +case $outdir in + /*) dotdot_outdir="$outdir";; + *) dotdot_outdir="../$outdir";; +esac + +echo Generating output formats for $srcfile + +cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\"" +echo "Generating info files... ($cmd)" +eval "$cmd" +mkdir -p $outdir/ +tar czf $outdir/$PACKAGE.info.tar.gz $PACKAGE.info* +info_tgz_size=`calcsize $outdir/$PACKAGE.info.tar.gz` +# do not mv the info files, there's no point in having them available +# separately on the web. + +cmd="${TEXI2DVI} \"$srcfile\"" +echo "Generating dvi ... ($cmd)" +eval "$cmd" + +# now, before we compress dvi: +echo Generating postscript... +${DVIPS} $PACKAGE -o +gzip -f -9 $PACKAGE.ps +ps_gz_size=`calcsize $PACKAGE.ps.gz` +mv $PACKAGE.ps.gz $outdir/ + +# compress/finish dvi: +gzip -f -9 $PACKAGE.dvi +dvi_gz_size=`calcsize $PACKAGE.dvi.gz` +mv $PACKAGE.dvi.gz $outdir/ + +cmd="${TEXI2DVI} --pdf \"$srcfile\"" +echo "Generating pdf ... ($cmd)" +eval "$cmd" +pdf_size=`calcsize $PACKAGE.pdf` +mv $PACKAGE.pdf $outdir/ + +cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\"" +echo "Generating ASCII... ($cmd)" +eval "$cmd" +ascii_size=`calcsize $PACKAGE.txt` +gzip -f -9 -c $PACKAGE.txt >$outdir/$PACKAGE.txt.gz +ascii_gz_size=`calcsize $outdir/$PACKAGE.txt.gz` +mv $PACKAGE.txt $outdir/ + +html_split() +{ + opt="--split=$1 $htmlarg --node-files" + cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" + echo "Generating html by $1... ($cmd)" + eval "$cmd" + split_html_dir=$PACKAGE.html + ( + cd ${split_html_dir} || exit 1 + ln -sf ${PACKAGE}.html index.html + tar -czf $dotdot_outdir/${PACKAGE}.html_$1.tar.gz -- *.html + ) + eval html_$1_tgz_size=`calcsize $outdir/${PACKAGE}.html_$1.tar.gz` + rm -f $outdir/html_$1/*.html + mkdir -p $outdir/html_$1/ + mv ${split_html_dir}/*.html $outdir/html_$1/ + rmdir ${split_html_dir} +} + +if test -z "$use_texi2html"; then + opt="--no-split --html -o $PACKAGE.html $htmlarg" + cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" + echo "Generating monolithic html... ($cmd)" + rm -rf $PACKAGE.html # in case a directory is left over + eval "$cmd" + html_mono_size=`calcsize $PACKAGE.html` + gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz + html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz` + mv $PACKAGE.html $outdir/ + + cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\"" + echo "Generating html by node... ($cmd)" + eval "$cmd" + split_html_dir=$PACKAGE.html + ( + cd ${split_html_dir} || exit 1 + tar -czf $dotdot_outdir/${PACKAGE}.html_node.tar.gz -- *.html + ) + html_node_tgz_size=`calcsize $outdir/${PACKAGE}.html_node.tar.gz` + rm -f $outdir/html_node/*.html + mkdir -p $outdir/html_node/ + mv ${split_html_dir}/*.html $outdir/html_node/ + rmdir ${split_html_dir} +else + cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\"" + echo "Generating monolithic html... ($cmd)" + rm -rf $PACKAGE.html # in case a directory is left over + eval "$cmd" + html_mono_size=`calcsize $PACKAGE.html` + gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz + html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz` + mv $PACKAGE.html $outdir/ + + html_split node + html_split chapter + html_split section +fi + +echo Making .tar.gz for sources... +srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null` +tar cvzfh $outdir/$PACKAGE.texi.tar.gz $srcfiles +texi_tgz_size=`calcsize $outdir/$PACKAGE.texi.tar.gz` + +if test -n "$docbook"; then + cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml" + echo "Generating docbook XML... $(cmd)" + eval "$cmd" + docbook_xml_size=`calcsize $PACKAGE-db.xml` + gzip -f -9 -c $PACKAGE-db.xml >$outdir/$PACKAGE-db.xml.gz + docbook_xml_gz_size=`calcsize $outdir/$PACKAGE-db.xml.gz` + mv $PACKAGE-db.xml $outdir/ + + cmd="${DOCBOOK2HTML} -o $split_html_db_dir ${outdir}/$PACKAGE-db.xml" + echo "Generating docbook HTML... ($cmd)" + eval "$cmd" + split_html_db_dir=html_node_db + ( + cd ${split_html_db_dir} || exit 1 + tar -czf $dotdot_outdir/${PACKAGE}.html_node_db.tar.gz -- *.html + ) + html_node_db_tgz_size=`calcsize $outdir/${PACKAGE}.html_node_db.tar.gz` + rm -f $outdir/html_node_db/*.html + mkdir -p $outdir/html_node_db + mv ${split_html_db_dir}/*.html $outdir/html_node_db/ + rmdir ${split_html_db_dir} + + cmd="${DOCBOOK2TXT} ${outdir}/$PACKAGE-db.xml" + echo "Generating docbook ASCII... ($cmd)" + eval "$cmd" + docbook_ascii_size=`calcsize $PACKAGE-db.txt` + mv $PACKAGE-db.txt $outdir/ + + cmd="${DOCBOOK2PS} ${outdir}/$PACKAGE-db.xml" + echo "Generating docbook PS... $(cmd)" + eval "$cmd" + gzip -f -9 -c $PACKAGE-db.ps >$outdir/$PACKAGE-db.ps.gz + docbook_ps_gz_size=`calcsize $outdir/$PACKAGE-db.ps.gz` + mv $PACKAGE-db.ps $outdir/ + + cmd="${DOCBOOK2PDF} ${outdir}/$PACKAGE-db.xml" + echo "Generating docbook PDF... ($cmd)" + eval "$cmd" + docbook_pdf_size=`calcsize $PACKAGE-db.pdf` + mv $PACKAGE-db.pdf $outdir/ +fi + +echo "Writing index file..." +if test -z "$use_texi2html"; then + CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ + /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" +else + CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" +fi +curdate=`$SETLANG date '+%B %d, %Y'` +sed \ + -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ + -e "s!%%EMAIL%%!$EMAIL!g" \ + -e "s!%%PACKAGE%%!$PACKAGE!g" \ + -e "s!%%DATE%%!$curdate!g" \ + -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ + -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ + -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ + -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ + -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ + -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ + -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ + -e "s!%%PDF_SIZE%%!$pdf_size!g" \ + -e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \ + -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ + -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ + -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ + -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ + -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ + -e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \ + -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ + -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ + -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ + -e "s,%%SCRIPTURL%%,$scripturl,g" \ + -e "s!%%SCRIPTNAME%%!$prog!g" \ + -e "$CONDS" \ +$GENDOCS_TEMPLATE_DIR/gendocs_template >$outdir/index.html + +echo "Done, see $outdir/ subdirectory for new files." + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/git-version-gen b/coreseek/m4-1.4.13/build-aux/git-version-gen new file mode 100755 index 0000000..710870c --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/git-version-gen @@ -0,0 +1,152 @@ +#!/bin/sh +# Print a version string. +scriptversion=2008-04-08.07 + +# Copyright (C) 2007-2008 Free Software Foundation +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# This script is derived from GIT-VERSION-GEN from GIT: http://git.or.cz/. +# It may be run two ways: +# - from a git repository in which the "git describe" command below +# produces useful output (thus requiring at least one signed tag) +# - from a non-git-repo directory containing a .tarball-version file, which +# presumes this script is invoked like "./git-version-gen .tarball-version". + +# In order to use intra-version strings in your project, you will need two +# separate generated version string files: +# +# .tarball-version - present only in a distribution tarball, and not in +# a checked-out repository. Created with contents that were learned at +# the last time autoconf was run, and used by git-version-gen. Must not +# be present in either $(srcdir) or $(builddir) for git-version-gen to +# give accurate answers during normal development with a checked out tree, +# but must be present in a tarball when there is no version control system. +# Therefore, it cannot be used in any dependencies. GNUmakefile has +# hooks to force a reconfigure at distribution time to get the value +# correct, without penalizing normal development with extra reconfigures. +# +# .version - present in a checked-out repository and in a distribution +# tarball. Usable in dependencies, particularly for files that don't +# want to depend on config.h but do want to track version changes. +# Delete this file prior to any autoconf run where you want to rebuild +# files to pick up a version string change; and leave it stale to +# minimize rebuild time after unrelated changes to configure sources. +# +# It is probably wise to add these two files to .gitignore, so that you +# don't accidentally commit either generated file. +# +# Use the following line in your configure.ac, so that $(VERSION) will +# automatically be up-to-date each time configure is run (and note that +# since configure.ac no longer includes a version string, Makefile rules +# should not depend on configure.ac for version updates). +# +# AC_INIT([GNU project], +# m4_esyscmd([build-aux/git-version-gen .tarball-version]), +# [bug-project@example]) +# +# Then use the following lines in your Makefile.am, so that .version +# will be present for dependencies, and so that .tarball-version will +# exist in distribution tarballs. +# +# BUILT_SOURCES = $(top_srcdir)/.version +# $(top_srcdir)/.version: +# echo $(VERSION) > $@-t && mv $@-t $@ +# dist-hook: +# echo $(VERSION) > $(distdir)/.tarball-version + +case $# in + 1) ;; + *) echo 1>&2 "Usage: $0 \$srcdir/.tarball-version"; exit 1;; +esac + +tarball_version_file=$1 +nl=' +' + +# First see if there is a tarball-only version file. +# then try "git describe", then default. +if test -f $tarball_version_file +then + v=`cat $tarball_version_file` || exit 1 + case $v in + *$nl*) v= ;; # reject multi-line output + [0-9]*) ;; + *) v= ;; + esac + test -z "$v" \ + && echo "$0: WARNING: $tarball_version_file seems to be damaged" 1>&2 +fi + +if test -n "$v" +then + : # use $v +elif test -d .git \ + && v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \ + || git describe --abbrev=4 HEAD 2>/dev/null` \ + && case $v in + v[0-9]*) ;; + *) (exit 1) ;; + esac +then + # Is this a new git that lists number of commits since the last + # tag or the previous older version that did not? + # Newer: v6.10-77-g0f8faeb + # Older: v6.10-g0f8faeb + case $v in + *-*-*) : git describe is okay three part flavor ;; + *-*) + : git describe is older two part flavor + # Recreate the number of commits and rewrite such that the + # result is the same as if we were using the newer version + # of git describe. + vtag=`echo "$v" | sed 's/-.*//'` + numcommits=`git rev-list "$vtag"..HEAD | wc -l` + v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`; + ;; + esac + + # Change the first '-' to a '.', so version-comparing tools work properly. + # Remove the "g" in git describe's output string, to save a byte. + v=`echo "$v" | sed 's/-/./;s/\(.*\)-g/\1-/'`; +else + v=UNKNOWN +fi + +v=`echo "$v" |sed 's/^v//'` + +# Don't declare a version "dirty" merely because a time stamp has changed. +git status > /dev/null 2>&1 + +dirty=`sh -c 'git diff-index --name-only HEAD' 2>/dev/null` || dirty= +case "$dirty" in + '') ;; + *) # Append the suffix only if there isn't one already. + case $v in + *-dirty) ;; + *) v="$v-dirty" ;; + esac ;; +esac + +# Omit the trailing newline, so that m4_esyscmd can use the result directly. +echo "$v" | tr -d '\012' + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/gnupload b/coreseek/m4-1.4.13/build-aux/gnupload new file mode 100755 index 0000000..7c34784 --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/gnupload @@ -0,0 +1,411 @@ +#!/bin/sh +# Sign files and upload them. + +scriptversion=2009-03-05.20 + +# Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Originally written by Alexandre Duret-Lutz <adl@gnu.org>. + +set -e + +GPG='gpg --batch --no-tty' +conffile=.gnuploadrc +to= +dry_run=false +symlink_files= +delete_files= +delete_symlinks= +collect_var= +dbg= + +usage="Usage: $0 [OPTIONS]... [COMMAND] FILES... [[COMMAND] FILES...] + +Sign all FILES, and upload them to selected destinations, according to +<http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>. + +Commands: + --delete delete FILES from destination + --symlink create symbolic links + --rmsymlink remove symbolic links + -- treat the remaining arguments as files to upload + +Options: + --help print this help text and exit + --to DEST specify one destination for FILES + (multiple --to options are allowed) + --user NAME sign with key NAME + --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names + --dry-run do nothing, show what would have been done + --version output version information and exit + +If --symlink-regex is given without EXPR, then the link target name +is created by replacing the version information with \`-latest', e.g.: + + foo-1.3.4.tar.gz -> foo-latest.tar.gz + +Recognized destinations are: + alpha.gnu.org:DIRECTORY + savannah.gnu.org:DIRECTORY + savannah.nongnu.org:DIRECTORY + ftp.gnu.org:DIRECTORY + build directive files and upload files by FTP + download.gnu.org.ua:{alpha|ftp}/DIRECTORY + build directive files and upload files by SFTP + [user@]host:DIRECTORY upload files with scp + +Options and commands are applied in order. If the file $conffile exists +in the current working directory, its contents are prepended to the +actual command line options. Use this to keep your defaults. Comments +(#) and empty lines in $conffile are allowed. + +Examples: +1. Upload automake-1.8.2b.tar.gz and automake-1.8.2b.tar.bz2 to two sites: + gnupload --to sources.redhat.com:~ftp/pub/automake \\ + --to alpha.gnu.org:automake \\ + automake-1.8.2b.tar.gz automake-1.8.2b.tar.bz2 + +2. Same as above, but also create symbolic links to automake-latest.tar.*: + gnupload --to sources.redhat.com:~ftp/pub/automake \\ + --to alpha.gnu.org:automake \\ + --symlink-regex \\ + automake-1.8.2b.tar.gz automake-1.8.2b.tar.bz2 + +3. Symlink automake-1.8.2b.tar.gz to automake-latest.tar.gz and +automake-1.8.2b.tar.bz2 to automake-latest.tar.bz2 on both sites: + + gnupload --to sources.redhat.com:~ftp/pub/automake \\ + --to alpha.gnu.org:automake \\ + --symlink automake-1.8.2b.tar.gz automake-latest.tar.gz \\ + automake-1.8.2b.tar.bz2 automake-latest.tar.bz2 + +4. Delete automake-1.8.2a.tar.gz and .bz2, remove symlink +automake-latest.tar.gz and upload automake-1.8.2b.tar.gz: + + gnupload --to sources.redhat.com:~ftp/pub/automake \\ + --to alpha.gnu.org:automake \\ + --delete automake-1.8.2a.tar.gz automake-1.8.2a.tar.bz2 \\ + --rmsymlink automake-latest.tar.gz \\ + -- \\ + automake-1.8.2b.tar.gz automake-1.8.2b.tar.bz2 + +Report bugs to <bug-automake@gnu.org>. +Send patches to <automake-patches@gnu.org>." + +# Read local configuration file +if test -r "$conffile"; then + echo "$0: Reading configuration file $conffile" + eval set x "`sed 's/#.*$//;/^$/d' \"$conffile\" | tr '\012\015' ' '` \"\$@\"" + shift +fi + +while test -n "$1"; do + case $1 in + -*) + collect_var= + case $1 in + --help) + echo "$usage" + exit $? + ;; + --to) + if test -z "$2"; then + echo "$0: Missing argument for --to" 1>&2 + exit 1 + else + to="$to $2" + shift + fi + ;; + --user) + if test -z "$2"; then + echo "$0: Missing argument for --user" 1>&2 + exit 1 + else + GPG="$GPG --local-user $2" + shift + fi + ;; + --delete) + collect_var=delete_files + ;; + --rmsymlink) + collect_var=delete_symlinks + ;; + --symlink-regex=*) + symlink_expr=`expr "$1" : '[^=]*=\(.*\)'` + ;; + --symlink-regex) + symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|' + ;; + --symlink) + collect_var=symlink_files + ;; + --dry-run|-n) + dry_run=: + ;; + --version) + echo "gnupload $scriptversion" + exit $? + ;; + --) + shift + break + ;; + -*) + echo "$0: Unknown option \`$1', try \`$0 --help'" 1>&2 + exit 1 + ;; + esac + ;; + *) + if test -z "$collect_var"; then + break + else + eval "$collect_var=\"\$$collect_var $1\"" + fi + ;; + esac + shift +done + +dprint() +{ + echo "Running $*..." +} + +if $dry_run; then + dbg=dprint +fi + +if test -z "$to"; then + echo "$0: Missing destination sites" >&2 + exit 1 +fi + +if test -n "$symlink_files"; then + x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'` + if test -n "$x"; then + echo "$0: Odd number of symlink arguments" >&2 + exit 1 + fi +fi + +if test $# = 0; then + if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then + echo "$0: No file to upload" 1>&2 + exit 1 + fi +else + # Make sure all files exist. We don't want to ask + # for the passphrase if the script will fail. + for file + do + if test ! -f $file; then + echo "$0: Cannot find \`$file'" 1>&2 + exit 1 + elif test -n "$symlink_expr"; then + linkname=`echo $file | sed "$symlink_expr"` + if test -z "$linkname"; then + echo "$0: symlink expression produces empty results" >&2 + exit 1 + elif test "$linkname" = $file; then + echo "$0: symlink expression does not alter file name" >&2 + exit 1 + fi + fi + done +fi + +# Make sure passphrase is not exported in the environment. +unset passphrase + +# Reset PATH to be sure that echo is a built-in. We will later use +# `echo $passphrase' to output the passphrase, so it is important that +# it is a built-in (third-party programs tend to appear in `ps' +# listings with their arguments...). +# Remember this script runs with `set -e', so if echo is not built-in +# it will exit now. +PATH=/empty echo -n "Enter GPG passphrase: " +stty -echo +read -r passphrase +stty echo +echo + +if test $# -ne 0; then + for file + do + echo "Signing $file..." + rm -f $file.sig + echo "$passphrase" | $dbg $GPG --passphrase-fd 0 -ba -o $file.sig $file + done +fi + + +# mkdirective DESTDIR BASE FILE STMT +# Arguments: See upload, below +mkdirective () +{ + stmt="$4" + if test -n "$3"; then + stmt=" +filename: $3$stmt" + fi + + cat >${2}.directive<<EOF +version: 1.1 +directory: $1 +comment: gnupload v. $scriptversion$stmt +EOF + if $dry_run; then + echo "File ${2}.directive:" + cat ${2}.directive + echo "File ${2}.directive:" | sed 's/./-/g' + fi +} + +mksymlink () +{ + while test $# -ne 0 + do + echo "symlink: $1 $2" + shift + shift + done +} + +# upload DEST DESTDIR BASE FILE STMT FILES +# Arguments: +# DEST Destination site; +# DESTDIR Destination directory; +# BASE Base name for the directive file; +# FILE Name of the file to distribute (may be empty); +# STMT Additional statements for the directive file; +# FILES List of files to upload. +upload () +{ + dest=$1 + destdir=$2 + base=$3 + file=$4 + stmt=$5 + files=$6 + + rm -f $base.directive $base.directive.asc + case $dest in + alpha.gnu.org:*) + mkdirective "$destdir" "$base" "$file" "$stmt" + echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive + $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc + ;; + ftp.gnu.org:*) + mkdirective "$destdir" "$base" "$file" "$stmt" + echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive + $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc + ;; + savannah.gnu.org:*) + if test -z "$files"; then + echo "$0: warning: standalone directives not applicable for $dest" >&2 + fi + $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files + ;; + savannah.nongnu.org:*) + if test -z "$files"; then + echo "$0: warning: standalone directives not applicable for $dest" >&2 + fi + $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files + ;; + download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*) + destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'` + destdir_topdir=`echo "$destdir" | sed 's,/.*,,'` + mkdirective "$destdir_p1" "$base" "$file" "$stmt" + echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive + for f in $files $base.directive.asc + do + echo put $f + done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir + ;; + /*) + dest_host=`echo "$dest" | sed 's,:.*,,'` + mkdirective "$destdir" "$base" "$file" "$stmt" + echo "$passphrase" | $dbg $GPG --passphrase-fd 0 --clearsign $base.directive + $dbg cp $files $base.directive.asc $dest_host + ;; + *) + if test -z "$files"; then + echo "$0: warning: standalone directives not applicable for $dest" >&2 + fi + $dbg scp $files $dest + ;; + esac + rm -f $base.directive $base.directive.asc +} + +##### +# Process any standalone directives +stmt= +if test -n "$symlink_files"; then + stmt="$stmt +`mksymlink $symlink_files`" +fi + +for file in $delete_files +do + stmt="$stmt +archive: $file" +done + +for file in $delete_symlinks +do + stmt="$stmt +rmsymlink: $file" +done + +if test -n "$stmt"; then + for dest in $to + do + destdir=`echo $dest | sed 's/[^:]*://'` + upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt" + done +fi + +# Process actual uploads +for dest in $to +do + for file + do + echo "Uploading $file to $dest..." + stmt= + files="$file $file.sig" + destdir=`echo $dest | sed 's/[^:]*://'` + if test -n "$symlink_expr"; then + linkname=`echo $file | sed "$symlink_expr"` + stmt="$stmt +symlink: $file $linkname +symlink: $file.sig $linkname.sig" + fi + upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files" + done +done + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/install-sh b/coreseek/m4-1.4.13/build-aux/install-sh new file mode 100755 index 0000000..a5897de --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/install-sh @@ -0,0 +1,519 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-12-25.00 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/link-warning.h b/coreseek/m4-1.4.13/build-aux/link-warning.h new file mode 100644 index 0000000..fda0194 --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/link-warning.h @@ -0,0 +1,28 @@ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif diff --git a/coreseek/m4-1.4.13/build-aux/mdate-sh b/coreseek/m4-1.4.13/build-aux/mdate-sh new file mode 100755 index 0000000..757a5dc --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/mdate-sh @@ -0,0 +1,204 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. + +scriptversion=2007-03-30.02 + +# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007 Free Software +# Foundation, Inc. +# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <bug-automake@gnu.org> or send patches to +# <automake-patches@gnu.org>. + +case $1 in + '') + echo "$0: No file. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: mdate-sh [--help] [--version] FILE + +Pretty-print the modification time of FILE. + +Report bugs to <bug-automake@gnu.org>. +EOF + exit $? + ;; + -v | --v*) + echo "mdate-sh $scriptversion" + exit $? + ;; +esac + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# GNU ls changes its time format in response to the TIME_STYLE +# variable. Since we cannot assume `unset' works, revert this +# variable to its documented default. +if test "${TIME_STYLE+set}" = set; then + TIME_STYLE=posix-long-iso + export TIME_STYLE +fi + +save_arg1=$1 + +# Find out how to get the extended ls output of a file or directory. +if ls -L /dev/null 1>/dev/null 2>&1; then + ls_command='ls -L -l -d' +else + ls_command='ls -l -d' +fi +# Avoid user/group names that might have spaces, when possible. +if ls -n /dev/null 1>/dev/null 2>&1; then + ls_command="$ls_command -n" +fi + +# A `ls -l' line looks as follows on OS/2. +# drwxrwx--- 0 Aug 11 2001 foo +# This differs from Unix, which adds ownership information. +# drwxrwx--- 2 root root 4096 Aug 11 2001 foo +# +# To find the date, we split the line on spaces and iterate on words +# until we find a month. This cannot work with files whose owner is a +# user named `Jan', or `Feb', etc. However, it's unlikely that `/' +# will be owned by a user whose name is a month. So we first look at +# the extended ls output of the root directory to decide how many +# words should be skipped to get the date. + +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +set x`$ls_command /` + +# Find which argument is the month. +month= +command= +until test $month +do + shift + # Add another shift to the command. + command="$command shift;" + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +# Get the extended ls output of the file or directory. +set dummy x`eval "$ls_command \"\$save_arg1\""` + +# Remove all preceding arguments +eval $command + +# Because of the dummy argument above, month is in $2. +# +# On a POSIX system, we should have +# +# $# = 5 +# $1 = file size +# $2 = month +# $3 = day +# $4 = year or time +# $5 = filename +# +# On Darwin 7.7.0 and 7.6.0, we have +# +# $# = 4 +# $1 = day +# $2 = month +# $3 = year or time +# $4 = filename + +# Get the month. +case $2 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; +esac + +case $3 in + ???*) day=$1;; + *) day=$3; shift;; +esac + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/missing b/coreseek/m4-1.4.13/build-aux/missing new file mode 100755 index 0000000..f359dae --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/missing @@ -0,0 +1,375 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2008-12-21.33 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008 Free Software Foundation, Inc. +# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + +Send bug reports to <bug-automake@gnu.org>." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). This is about non-GNU programs, so use $1 not +# $program. +case $1 in + lex*|yacc*) + # Not GNU programs, they don't have --version. + ;; + + tar*) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $program in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te*) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison*|yacc*) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex*|flex*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit $? + fi + ;; + + makeinfo*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar*) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/m4-1.4.13/build-aux/texinfo.tex b/coreseek/m4-1.4.13/build-aux/texinfo.tex new file mode 100644 index 0000000..23a30bc --- /dev/null +++ b/coreseek/m4-1.4.13/build-aux/texinfo.tex @@ -0,0 +1,9291 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2009-03-28.05} +% +% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007, 2008, 2009 Free Software Foundation, Inc. +% +% This texinfo.tex file is free software: you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation, either version 3 of the +% License, or (at your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or +% ftp://tug.org/tex/texinfo.tex +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + + +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t +\let\ptextop=\top +{\catcode`\'=\active +\global\let\ptexquoteright'}% Math-mode def from plain.tex. +\let\ptexraggedright=\raggedright + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% Since the category of space is not known, we have to be careful. +\chardef\spacecat = 10 +\def\spaceisspace{\catcode`\ =\spacecat} + +% sometimes characters are active, so we need control sequences. +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dashChar = `\- +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\lquoteChar= `\` +\chardef\questChar = `\? +\chardef\rquoteChar= `\' +\chardef\semiChar = `\; +\chardef\underChar = `\_ + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\undefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page. The solution is +% described on page 260 of The TeXbook. It involves outputting two +% marks for the sectioning macros, one before the section break, and +% one after. I won't pretend I can describe this better than DEK... +\def\domark{% + \toks0=\expandafter{\lastchapterdefs}% + \toks2=\expandafter{\lastsectiondefs}% + \toks4=\expandafter{\prevchapterdefs}% + \toks6=\expandafter{\prevsectiondefs}% + \toks8=\expandafter{\lastcolordefs}% + \mark{% + \the\toks0 \the\toks2 + \noexpand\or \the\toks4 \the\toks6 + \noexpand\else \the\toks8 + }% +} +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% + \ifcase0\topmark\fi + \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + % We don't want .vr (or whatever) entries like this: + % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} + % "\acronym" won't work when it's read back in; + % it needs to be + % {\code {{\tt \backslashcurfont }acronym} + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingyyy.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 24pt + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1\relax \unvbox#1\relax +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\argtorun{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \argtorun. +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as environments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At run-time, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Environment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt\char64}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt\char123}} +\def\myrbrace {{\tt\char125}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce \{ and \} commands for indices, + % and @{ and @} for the aux/toc files. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi + \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% + \fi\fi +} + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +% Old definition--didn't work. +%\parseargdef\need{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak +%\prevdepth=-1000pt +%}} + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @include FILE -- \input text of FILE. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable % we want to expand any @value in FILE. + \turnoffactive % and allow special characters in the expansion + \indexnofonts % Allow `@@' and other weird things in file names. + \edef\temp{\noexpand\input #1 }% + % + % This trickery is to read FILE outside of a group, in case it makes + % definitions, etc. + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other + \catcode`\`=\other + \catcode`\'=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} + +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} + +% @sp n outputs n lines of vertical space + +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} + +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode`\_ = \active + \gdef\mathunderscore{% + \catcode`\_=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a \ character. +% FYI, plain.tex uses \\ as a temporary control sequence (why?), but +% this is not advertised and we don't care. Texinfo does not +% otherwise define @\. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + % make the texinfo accent commands work in math mode + \let\"=\ddot + \let\'=\acute + \let\==\bar + \let\^=\hat + \let\`=\grave + \let\u=\breve + \let\v=\check + \let\~=\tilde + \let\dotaccent=\dot + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \catcode`' = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + \let' = \ptexquoteright + } +} + +% Some math mode symbols. +\def\bullet{$\ptexbullet$} +\def\geq{\ifmmode \ge\else $\ge$\fi} +\def\leq{\ifmmode \le\else $\le$\fi} +\def\minus{\ifmmode -\else $-$\fi} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em. So do +% whichever is larger. +% +\def\dots{% + \leavevmode + \setbox0=\hbox{...}% get width of three periods + \ifdim\wd0 > 1.5em + \dimen0 = \wd0 + \else + \dimen0 = 1.5em + \fi + \hbox to \dimen0{% + \hskip 0pt plus.25fil + .\hskip 0pt plus1fil + .\hskip 0pt plus1fil + .\hskip 0pt plus.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html +% (and related messages, the final outcome is that it is up to the TeX +% user to double the backslashes and otherwise make the string valid, so +% that's what we do). + +% double active backslashes. +% +{\catcode`\@=0 \catcode`\\=\active + @gdef@activebackslashdouble{% + @catcode`@\=@active + @let\=@doublebackslash} +} + +% To handle parens, we must adopt a different approach, since parens are +% not active characters. hyperref.dtx (which has the same problem as +% us) handles it with this amazing macro to replace tokens, with minor +% changes for Texinfo. It is included here under the GPL by permission +% from the author, Heiko Oberdiek. +% +% #1 is the tokens to replace. +% #2 is the replacement. +% #3 is the control sequence with the string. +% +\def\HyPsdSubst#1#2#3{% + \def\HyPsdReplace##1#1##2\END{% + ##1% + \ifx\\##2\\% + \else + #2% + \HyReturnAfterFi{% + \HyPsdReplace##2\END + }% + \fi + }% + \xdef#3{\expandafter\HyPsdReplace#3#1\END}% +} +\long\def\HyReturnAfterFi#1\fi{\fi#1} + +% #1 is a control sequence in which to do the replacements. +\def\backslashparens#1{% + \xdef#1{#1}% redefine it as its expansion; the definition is simply + % \lastnode when called from \setref -> \pdfmkdest. + \HyPsdSubst{(}{\realbackslash(}{#1}% + \HyPsdSubst{)}{\realbackslash)}{#1}% +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found. (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} + +\ifpdf + % + % Color manipulation macros based on pdfcolor.tex. + \def\cmykDarkRed{0.28 1 1 0.35} + \def\cmykBlack{0 0 0 1} + % + % k sets the color for filling (usual text, etc.); + % K sets the color for stroking (thin rules, e.g., normal _'s). + \def\pdfsetcolor#1{\pdfliteral{#1 k #1 K}} + % + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\cmykBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % + \pdfcatalog{/PageMode /UseOutlines} + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % pdftex (and the PDF format) support .png, .jpg, .pdf (among + % others). Let's try in that order. + \let\pdfimgext=\empty + \begingroup + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \errhelp = \nopdfimagehelp + \errmessage{Could not find image file #1 for pdf}% + \else \gdef\pdfimgext{PDF}% + \fi + \else \gdef\pdfimgext{pdf}% + \fi + \else \gdef\pdfimgext{JPG}% + \fi + \else \gdef\pdfimgext{jpeg}% + \fi + \else \gdef\pdfimgext{jpg}% + \fi + \else \gdef\pdfimgext{png}% + \fi + \closein 1 + \endgroup + % + % without \immediate, ancient pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifdim \wd0 >0pt width \imagewidth \fi + \ifdim \wd2 >0pt height \imageheight \fi + \ifnum\pdftexversion<13 + #1.\pdfimgext + \else + {#1.\pdfimgext}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + % + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \turnoffactive + \activebackslashdouble + \makevalueexpandable + \def\pdfdestname{#1}% + \backslashparens\pdfdestname + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + }} + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1} + % + % by default, use a color that is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. + \def\urlcolor{\cmykDarkRed} + \def\linkcolor{\cmykDarkRed} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \else + % Doubled backslashes in the name. + {\activebackslashdouble \xdef\pdfoutlinedest{#3}% + \backslashparens\pdfoutlinedest}% + \fi + % + % Also double the backslashes in the display string. + {\activebackslashdouble \xdef\pdfoutlinetext{#1}% + \backslashparens\pdfoutlinetext}% + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. + \indexnofonts + \setupdatafile + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + % + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \ifx\p\space\else\addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \fi + \nextsp} + \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + % do we want to go so far as to use \indexnofonts instead of just + % special-casing \var here? + \def\var##1{##1}% + % + \leavevmode\setcolor{\urlcolor}% + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + % non-pdf mode + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\setcolor = \gobble + \let\pdfsetcolor = \gobble + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Unfortunately, we have to override this for titles and the like, since +% in those cases "rm" is bold. Sigh. +\def\rmisbold{\rm\def\curfontstyle{bf}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + + +% Default leading. +\newdimen\textleading \textleading = 13.2pt + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +% +\def\setleading#1{% + \dimen0 = #1\relax + \normalbaselineskip = \baselinefactor\dimen0 + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% PDF CMaps. See also LaTeX's t1.cmap. +% +% do nothing with this by default. +\expandafter\let\csname cmapOT1\endcsname\gobble +\expandafter\let\csname cmapOT1IT\endcsname\gobble +\expandafter\let\csname cmapOT1TT\endcsname\gobble + +% if we are producing pdf, and we have \pdffontattr, then define cmaps. +% (\pdffontattr was introduced many years ago, but people still run +% older pdftex's; it's easy to conditionalize, so we do.) +\ifpdf \ifx\pdffontattr\undefined \else + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1IT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1IT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1TT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1TT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +\fi\fi + + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap +% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass +% empty to omit). +\def\setfont#1#2#3#4#5{% + \font#1=\fontprefix#2#3 scaled #4 + \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble +% emacs-page end of cmaps + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Definitions for a main text size of 11pt. This is the default in +% Texinfo. +% +\def\definetextfontsizexi{% +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728} + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2}{OT1} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440} + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315}{OT1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200} + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +% reset the current fonts +\textfonts +\rm +} % end of 11pt text font size definitions + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit. This is for the GNU +% Press printing of the Emacs 22 manual. Maybe other manuals in the +% future. Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acro in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +% reduce space between paragraphs +\divide\parskip by 2 + +% reset the current fonts +\textfonts +\rm +} % end of 10pt text font size definitions + + +% We provide the user-level command +% @fonttextsize 10 +% (or 11) to redefine the text font size. pt is assumed. +% +\def\xword{10} +\def\xiword{11} +% +\parseargdef\fonttextsize{% + \def\textsizearg{#1}% + \wlog{doing @fonttextsize \textsizearg}% + % + % Set \globaldefs so that documents can use this inside @tex, since + % makeinfo 4.8 does not support it, but we need it nonetheless. + % + \begingroup \globaldefs=1 + \ifx\textsizearg\xword \definetextfontsizex + \else \ifx\textsizearg\xiword \definetextfontsizexi + \else + \errhelp=\EMsimple + \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} + \fi\fi + \endgroup +} + + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts except +% in the main text, we don't bother to reset \scriptfont and +% \scriptscriptfont (which would also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy + \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf + \textfont\ttfam=\tentt \textfont\sffam=\tensf +} + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rmisbold #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy + \let\tenttsl=\ssecttsl + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + +% Define these just so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% --karl, 24jan03. + +% Set up the default fonts, so we can use them for creating boxes. +% +\definetextfontsizexi + + +\message{markup,} + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will +% define and register \INITMACRO to be called on markup style changes. +% \INITMACRO can check \currentmarkupstyle for the innermost +% style and the set of \ifmarkupSTYLE switches for all styles +% currently in effect. +\newif\ifmarkupvar +\newif\ifmarkupsamp +\newif\ifmarkupkey +%\newif\ifmarkupfile % @file == @samp. +%\newif\ifmarkupoption % @option == @samp. +\newif\ifmarkupcode +\newif\ifmarkupkbd +%\newif\ifmarkupenv % @env == @code. +%\newif\ifmarkupcommand % @command == @code. +\newif\ifmarkuptex % @tex (and part of @math, for now). +\newif\ifmarkupexample +\newif\ifmarkupverb +\newif\ifmarkupverbatim + +\let\currentmarkupstyle\empty + +\def\setupmarkupstyle#1{% + \csname markup#1true\endcsname + \def\currentmarkupstyle{#1}% + \markupstylesetup +} + +\let\markupstylesetup\empty + +\def\defmarkupstylesetup#1{% + \expandafter\def\expandafter\markupstylesetup + \expandafter{\markupstylesetup #1}% + \def#1% +} + +% Markup style setup for left and right quotes. +\defmarkupstylesetup\markupsetuplq{% + \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuplqdefault \else \temp \fi +} + +\defmarkupstylesetup\markupsetuprq{% + \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname + \ifx\temp\relax \markupsetuprqdefault \else \temp \fi +} + +{ +\catcode`\'=\active +\catcode`\`=\active + +\gdef\markupsetuplqdefault{\let`\lq} +\gdef\markupsetuprqdefault{\let'\rq} + +\gdef\markupsetcodequoteleft{\let`\codequoteleft} +\gdef\markupsetcodequoteright{\let'\codequoteright} + +\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} +} + +\let\markupsetuplqcode \markupsetcodequoteleft +\let\markupsetuprqcode \markupsetcodequoteright +\let\markupsetuplqexample \markupsetcodequoteleft +\let\markupsetuprqexample \markupsetcodequoteright +\let\markupsetuplqverb \markupsetcodequoteleft +\let\markupsetuprqverb \markupsetcodequoteright +\let\markupsetuplqverbatim \markupsetcodequoteleft +\let\markupsetuprqverbatim \markupsetcodequoteright + +\let\markupsetuplqsamp \markupsetnoligaturesquoteleft +\let\markupsetuplqkbd \markupsetnoligaturesquoteleft + +% Allow an option to not replace quotes with a regular directed right +% quote/apostrophe (char 0x27), but instead use the undirected quote +% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it +% the default, but it works for pasting with more pdf viewers (at least +% evince), the lilypond developers report. xpdf does work with the +% regular 0x27. +% +\def\codequoteright{% + \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax + \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax + '% + \else \char'15 \fi + \else \char'15 \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% + \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax + \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax + % [Knuth] pp. 380,381,391 + % \relax disables Spanish ligatures ?` and !` of \tt font. + \relax`% + \else \char'22 \fi + \else \char'22 \fi +} + +% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. +\def\noligaturesquoteleft{\relax\lq} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +%% Add scribe-like font environments, plus @l for inline lisp (usually sans +%% serif) and @ii for TeX italic + +% \smartitalic{ARG} outputs arg in italics, followed by an italic correction +% unless the following character is such as not to need one. +\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else + \ptexslash\fi\fi\fi} +\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% @cite is like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @b, explicit bold. Also @strong. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +% @t, explicit typewriter. +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} + +% @samp. +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} + +% definition of @key that produces a lozenge. Doesn't adjust to text size. +%\setfont\keyrm\rmshape{8}{1000}{OT1} +%\font\keysy=cmsy9 +%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% +% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% +% \vbox{\hrule\kern-0.4pt +% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% +% \kern-0.4pt\hrule}% +% \kern-.06em\raise0.4pt\hbox{\angleright}}}} + +% definition of @key with no lozenge. If the current font is already +% monospace, don't change it; that way, we respect @kbdinputstyle. But +% if it isn't monospace, then use \tt. +% +\def\key#1{{\setupmarkupstyle{key}% + \nohyphenation + \ifmonospace\else\tt\fi + #1}\null} + +% ctrl is no longer a Texinfo command. +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @file, @option are the same as @samp. +\let\file=\samp +\let\option=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \plainfrenchspacing + #1% + }% + \null +} + +% We *must* turn on hyphenation at `-' and `_' in @code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ + \catcode`\-=\active \catcode`\_=\active + \catcode`\'=\active \catcode`\`=\active + \global\let'=\rq \global\let`=\lq % default definitions + % + \global\def\code{\begingroup + \setupmarkupstyle{code}% + % The following should really be moved into \setupmarkupstyle handlers. + \catcode\dashChar=\active \catcode\underChar=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\realdash + \let_\realunder + \fi + \codex + } +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} +\def\codex #1{\tclose{#1}\endgroup} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is undesirable in +% some manuals, especially if they don't have long identifiers in +% general. @allowcodebreaks provides a way to control this. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg'}% + \fi\fi +} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. +\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle option `\txiarg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct'. +\kbdinputstyle distinct + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi +\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @clicksequence{File @click{} Open ...} +\def\clicksequence#1{\begingroup #1\endgroup} + +% @clickstyle @arrow (by default) +\parseargdef\clickstyle{\def\click{#1}} +\def\click{\arrow} + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + + +\message{glyphs,} + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, they should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% Glyphs from the EC fonts. We don't use \let for the aliases, because +% sometimes we redefine the original macro, and the alias should reflect +% the redefinition. +% +% Use LaTeX names for the Icelandic letters. +\def\DH{{\ecfont \char"D0}} % Eth +\def\dh{{\ecfont \char"F0}} % eth +\def\TH{{\ecfont \char"DE}} % Thorn +\def\th{{\ecfont \char"FE}} % thorn +% +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +% This positioning is not perfect (see the ogonek LaTeX package), but +% we have the precomposed glyphs for the most common cases. We put the +% tests to use those glyphs in the single \ogonek macro so we have fewer +% dummy definitions to worry about for index entries, etc. +% +% ogonek is also used with other letters in Lithuanian (IOU), but using +% the precomposed glyphs for those is not so easy since they aren't in +% the same EC font. +\def\ogonek#1{{% + \def\temp{#1}% + \ifx\temp\macrocharA\Aogonek + \else\ifx\temp\macrochara\aogonek + \else\ifx\temp\macrocharE\Eogonek + \else\ifx\temp\macrochare\eogonek + \else + \ecfont \setbox0=\hbox{#1}% + \ifdim\ht0=1ex\accent"0C #1% + \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% + \fi + \fi\fi\fi\fi + }% +} +\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} +\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} +\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} +\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} +% +% Use the ec* fonts (cm-super in outline format) for non-CM glyphs. +\def\ecfont{% + % We can't distinguish serif/sans and italic/slanted, but this + % is used for crude hacks anyway (like adding French and German + % quotes to documents typeset with CM, where we lose kerning), so + % hopefully nobody will notice/care. + \edef\ecsize{\csname\curfontsize ecsize\endcsname}% + \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% + \ifx\curfontstyle\bfstylename + % bold: + \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize + \else + % regular: + \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \fi + \thisecfont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rmisbold #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\secfonts\rmisbold \leftline{#1}}% + \fi +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -12pt + \global\advance\vsize by -12pt +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + +% @evenheadingmarks top \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} + \headingmarks{odd}{heading}{#1} } +\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} + \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% + \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname + \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{% +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\undefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + % + % Try typesetting the item mark that if the document erroneously says + % something like @itemize @samp (intending @table), there's an error + % right away at the @itemize. It's not the best error message in the + % world, but it's better than leaving it to the @item. This means if + % the user wants an empty mark, they have to say @w{} not just @w. + \def\itemcontents{#1}% + \setbox0 = \hbox{\itemcontents}% + % + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + % + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + % + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a <number>. + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. \everycr resets \everytab so we don't have to +% undo it ourselves. +\def\headitemfont{\b}% for people to use in the template row; not changeable +\def\headitem{% + \checkenv\multitable + \crcr + \global\everytab={\bf}% can't use \headitemfont since the parsing differs + \the\everytab % for the first item +}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we again encounter the problem the 1sp was intended to solve. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \obeylines + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1'. + \long\def\doignoretext##1^^M@end #1{% + \doignoretextyyy##1^^M@#1\_STOP_}% + % + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +{ \obeylines% + % Ignore anything after the last `@end #1'; this matters in verbatim + % environments, where otherwise the newline after an ignored conditional + % would result in a blank line in the output. + \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + % Only do \closeout if we haven't already done it, else we'll end up + % closing the target index. + \expandafter \ifx\csname donesynindex#2\endcsname \relax + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +% Take care of Texinfo commands that can appear in an index entry. +% Since there are some commands we want to expand, and others we don't, +% we have to laboriously prevent expansion for those that we don't. +% +\def\indexdummies{% + \escapechar = `\\ % use backslash in output files. + \def\@{@}% change to @@ when we switch to @ as escape char in index files. + \def\ {\realbackslash\space }% + % + % Need these in case \tex is in effect and \{ is a \delimiter again. + % But can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. + \let\{ = \mylbrace + \let\} = \myrbrace + % + % I don't entirely understand this, but when an index entry is + % generated from a macro call, the \endinput which \scanmacro inserts + % causes processing to be prematurely terminated. This is, + % apparently, because \indexsorttmp is fully expanded, and \endinput + % is an expandable command. The redefinition below makes \endinput + % disappear altogether for that purpose -- although logging shows that + % processing continues to some further point. On the other hand, it + % seems \endinput does not hurt in the printed index arg, since that + % is still getting written without apparent harm. + % + % Sample source (mac-idx3.tex, reported by Graham Percival to + % help-texinfo, 22may06): + % @macro funindex {WORD} + % @findex xyz + % @end macro + % ... + % @funindex commtest + % + % The above is not enough to reproduce the bug, but it gives the flavor. + % + % Sample whatsit resulting: + % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} + % + % So: + \let\endinput = \empty + % + % Do the redefinitions. + \commondummies +} + +% For the aux and toc files, @ is the escape character. So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files). When everything uses @, +% this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % Do the redefinitions. + \commondummies + \otherbackslash +} + +% Called from \indexdummies and \atdummies. +% +\def\commondummies{% + % + % \definedummyword defines \#1 as \string\#1\space, thus effectively + % preventing its expansion. This is used only for control% words, + % not control letters, because the \space would be incorrect for + % control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword ##1{\def##1{\string##1\space}}% + \def\definedummyletter##1{\def##1{\string##1}}% + \let\definedummyaccent\definedummyletter + % + \commondummiesnofonts + % + \definedummyletter\_% + % + % Non-English letters. + \definedummyword\AA + \definedummyword\AE + \definedummyword\DH + \definedummyword\L + \definedummyword\O + \definedummyword\OE + \definedummyword\TH + \definedummyword\aa + \definedummyword\ae + \definedummyword\dh + \definedummyword\exclamdown + \definedummyword\l + \definedummyword\o + \definedummyword\oe + \definedummyword\ordf + \definedummyword\ordm + \definedummyword\questiondown + \definedummyword\ss + \definedummyword\th + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\guillemetleft + \definedummyword\guillemetright + \definedummyword\guilsinglleft + \definedummyword\guilsinglright + \definedummyword\expansion + \definedummyword\minus + \definedummyword\ogonek + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\quotedblbase + \definedummyword\quotedblleft + \definedummyword\quotedblright + \definedummyword\quoteleft + \definedummyword\quoteright + \definedummyword\quotesinglbase + \definedummyword\result + \definedummyword\textdegree + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + % + \normalturnoffactive + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +\def\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter\!% + \definedummyaccent\"% + \definedummyaccent\'% + \definedummyletter\*% + \definedummyaccent\,% + \definedummyletter\.% + \definedummyletter\/% + \definedummyletter\:% + \definedummyaccent\=% + \definedummyletter\?% + \definedummyaccent\^% + \definedummyaccent\`% + \definedummyaccent\~% + \definedummyword\u + \definedummyword\v + \definedummyword\H + \definedummyword\dotaccent + \definedummyword\ogonek + \definedummyword\ringaccent + \definedummyword\tieaccent + \definedummyword\ubaraccent + \definedummyword\udotaccent + \definedummyword\dotless + % + % Texinfo font commands. + \definedummyword\b + \definedummyword\i + \definedummyword\r + \definedummyword\sc + \definedummyword\t + % + % Commands that take arguments. + \definedummyword\acronym + \definedummyword\cite + \definedummyword\code + \definedummyword\command + \definedummyword\dfn + \definedummyword\emph + \definedummyword\env + \definedummyword\file + \definedummyword\kbd + \definedummyword\key + \definedummyword\math + \definedummyword\option + \definedummyword\pxref + \definedummyword\ref + \definedummyword\samp + \definedummyword\strong + \definedummyword\tie + \definedummyword\uref + \definedummyword\url + \definedummyword\var + \definedummyword\verb + \definedummyword\w + \definedummyword\xref +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\definedummyletter##1{\let##1\empty}% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + % how to handle braces? + \def\_{\normalunderscore}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\DH{DZZ}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\TH{ZZZ}% + \def\aa{aa}% + \def\ae{ae}% + \def\dh{dzz}% + \def\exclamdown{!}% + \def\l{l}% + \def\oe{oe}% + \def\ordf{a}% + \def\ordm{o}% + \def\o{o}% + \def\questiondown{?}% + \def\ss{ss}% + \def\th{zzz}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\guillemetleft{<<}% + \def\guillemetright{>>}% + \def\guilsinglleft{<}% + \def\guilsinglright{>}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\quotedblbase{"}% + \def\quotedblleft{"}% + \def\quotedblright{"}% + \def\quoteleft{`}% + \def\quoteright{'}% + \def\quotesinglbase{,}% + \def\result{=>}% + \def\textdegree{degrees}% + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist +} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \safewhatsit\dosubindwrite + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks/skips around a whatsit: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write or \pdfdest will make \lastskip zero. The result is that +% sequences like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +\newskip\whatsitskip +\newcount\whatsitpenalty +% +% ..., ready, GO: +% +\def\safewhatsit#1{% +\ifhmode + #1% +\else + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \whatsitskip = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \whatsitpenalty = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\whatsitskip glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\whatsitskip + \fi + % + #1% + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\whatsitskip + \fi +\fi +} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \plainfrenchspacing + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + \putwordIndexNonexistent + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + \putwordIndexIsEmpty + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\backslashcurfont}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this freezes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent = 2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \setbox\boxA = \hbox{#1}% + \ifdim\wd\boxA = 0pt + \ % + \else + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like plain.tex's \dotfill, except uses up at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\def\secondary#1#2{{% + \parfillskip=0in + \parskip=0in + \hangindent=1in + \hangafter=1 + \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + #2 + \fi + \par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} + +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + \advance\dimen@ by -\ht\partialpage + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% + % The following penalty ensures that the page builder is exercised + % _before_ we change the output routine. This is necessary in the + % following situation: + % + % The last section of the index consists only of a single entry. + % Before this section, \pagetotal is less than \pagegoal, so no + % break occurs before the last section starts. However, the last + % section, consisting of \initial and the single \entry, does not + % fit on the page and has to be broken off. Without the following + % penalty the page builder will not be exercised until \eject + % below, and by that time we'll already have changed the output + % routine to the \balancecolumns version, so the next-to-last + % double-column page will be processed with \balancecolumns, which + % is wrong: The two columns will go to the main vertical list, with + % the broken-off section in the recent contributions. As soon as + % the output routine finishes, TeX starts reconsidering the page + % break. The two columns and the broken-off section both fit on the + % page, because the two columns now take up only half of the page + % goal. When TeX sees \eject from below which follows the final + % section, it invokes the new output routine that we've set after + % \balancecolumns below; \onepageout will try to fit the two columns + % and the final section into the vbox of \pageheight (see + % \pagebody), causing an overfull box. + % + % Note that glue won't work here, because glue does not exercise the + % page builder, unlike penalties (see The TeXbook, pp. 280-281). + \penalty0 + % + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht3>\dimen@ + \global\advance\dimen@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter. Page headings and footings can use +% these. @section does likewise. +\def\thischapter{} +\def\thischapternum{} +\def\thischaptername{} +\def\thissection{} +\def\thissectionnum{} +\def\thissectionname{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + % \putwordChapter can contain complex things in translations. + \toks0=\expandafter{\putwordChapter}% + \message{\the\toks0 \space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz +% +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + % \putwordAppendix can contain complex things in translations. + \toks0=\expandafter{\putwordAppendix}% + \message{\the\toks0 \space \appendixletter}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the<toks register> to achieve this: TeX expands \the<toks> only once, + % simply yielding the contents of <toks register>. (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. +% 3) Likewise, headings look best if no \parindent is used, and +% if justification is not attempted. Hence \raggedright. + +\def\majorheading{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\ptexraggedright + \rmisbold #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong. But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% + \chappager + \ifodd\pageno \else + \begingroup + \evenheadline={\hfil}\evenfootline={\hfil}% + \oddheadline={\hfil}\oddfootline={\hfil}% + \hbox to 0pt{}% + \chappager + \endgroup + \fi +} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + % Insert the first mark before the heading break (see notes for \domark). + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \gdef\thissection{}}% + % + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{\thischaptername}}% + \else\ifx\temptype\Yomitfromtockeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{}}% + \else\ifx\temptype\Yappendixkeyword + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\appendixletter}% + % \noexpand\putwordAppendix avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} + \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \else + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\the\chapno}% + % \noexpand\putwordChapter avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thischapter{\noexpand\putwordChapter{} + \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert the chapter heading break. + \pchapsepmacro + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \domark + % + {% + \chapfonts \rmisbold + % + % Have to define \lastsection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\lastsection{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \nobreak % Avoid page breaks at the interline glue. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright + \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\ptexraggedright + \rmisbold #1\hfill}}\bigskip \par\nobreak +} +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\seckeyword{sec} +% +\def\sectionheading#1#2#3#4{% + {% + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rmisbold + % + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + % Insert first mark before the heading break (see notes for \domark). + \let\prevsectiondefs=\lastsectiondefs + \ifx\temptype\Ynothingkeyword + \ifx\sectionlevel\seckeyword + \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\thissection{\thissectionname}}% + \fi + \else\ifx\temptype\Yomitfromtockeyword + % Don't redefine \thissection. + \else\ifx\temptype\Yappendixkeyword + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + % \noexpand\putwordSection avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thissection{\noexpand\putwordSection{} + \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \else + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + % \noexpand\putwordSection avoids expanding indigestible + % commands in some of the translations. + \gdef\noexpand\thissection{\noexpand\putwordSection{} + \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \fi\fi\fi + % + % Go into vertical mode. Usually we'll already be there, but we + % don't want the following whatsit to end up in a preceding paragraph + % if the document didn't happen to have a blank line. + \par + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevsectiondefs=\lastsectiondefs + \domark + % + % Only insert the space after the number if we have a section number. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\lastsection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \lastsection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\lastsection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\lastsection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chapmacro. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chapmacro. + \donoderef{#3}% + % + % Interline glue will be inserted when the vbox is completed. + % That glue will be a valid breakpoint for the page, since it'll be + % preceded by a whatsit (usually from the \donoderef, or from the + % \writetocentry if there was no node). We don't want to allow that + % break, since then the whatsits could end up on page n while the + % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. + \nobreak + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + }% + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \tocreadfilename +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund <tege@matematik.su.se> + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + +% redefined for the two-volume lispref. We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc} + +% Normal (long) toc. +% +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\envdef\tex{% + \setupmarkupstyle{tex}% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \catcode`\`=\other + \catcode`\'=\other + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + \expandafter \let\csname top\endcsname=\ptextop % outer + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing = t% + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\newdimen\nonfillparindent +\def\nonfillstart{% + \aboveenvbreak + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + % Turn off paragraph indentation but redefine \indent to emulate + % the normal \indent. + \nonfillparindent=\parindent + \parindent = 0pt + \let\indent\nonfillindent + % + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +\begingroup +\obeyspaces +% We want to swallow spaces (but not other tokens) after the fake +% @indent in our nonfill-environments, where spaces are normally +% active and set to @tie, resulting in them not being ignored after +% @indent. +\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% +\gdef\nonfillindentcheck{% +\ifx\temp % +\expandafter\nonfillindentgobble% +\else% +\leavevmode\nonfillindentbox% +\fi% +}% +\endgroup +\def\nonfillindentgobble#1{\nonfillindent} +\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + % end paragraph for sake of leading, in case document has no blank + % line. This is redundant with what happens in \aboveenvbreak, but + % we need to do it before changing the fonts, and it's inconvenient + % to change the fonts afterward. + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt\setupmarkupstyle{example}% + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @raggedright does more-or-less normal line breaking but no right +% justification. From plain.tex. +\envdef\raggedright{% + \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax +} +\let\Eraggedright\par + +\envdef\raggedleft{% + \parindent=0pt \leftskip0pt plus2em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedleft\par + +\envdef\raggedcenter{% + \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em + \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt + \hbadness=10000 % Last line will usually be underfull, so turn off + % badness reporting. +} +\let\Eraggedcenter\par + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\def\quotationstart{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \parsearg\quotationlabel +} + +\envdef\quotation{% + \setnormaldispenv + \quotationstart +} + +\envdef\smallquotation{% + \setsmalldispenv + \quotationstart +} +\let\Esmallquotation = \Equotation + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + + +% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} +% If we want to allow any <char> as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% + % Don't do the quotes -- if we do, @set txicodequoteundirected and + % @set txicodequotebacktick will not have effect on @verb and + % @verbatim, and ?` and !` ligatures won't get disabled. + %\do\`\do\'% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \setupmarkupstyle{verb}% + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\def\starttabbox{\setbox0=\hbox\bgroup} +% +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen0=\wd0 % the width so far, or since the previous tab + \divide\dimen0 by\tabw + \multiply\dimen0 by\tabw % compute previous multiple of \tabw + \advance\dimen0 by\tabw % advance to next multiple of \tabw + \wd0=\dimen0 \box0 \starttabbox + }% + } +\endgroup + +% start the verbatim environment. +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + % Easiest (and conventionally used) font for verbatim + \tt + \def\par{\leavevmode\egroup\box0\endgraf}% + \tabexpand + \setupmarkupstyle{verbatim}% + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'<char>#1<char>'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \indexnofonts % Allow `@@' and other weird things in file names. + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \defunpenalty=10003 % Will keep this @deffn together with the + % following @def command, see below. + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \printdefunline, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + % As a minor refinement, we avoid "club" headers by signalling + % with penalty of 10003 after the very first @deffn in the + % sequence (see above), and penalty of 10002 after any following + % @def command. + \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty\defunpenalty % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remaining is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format the type name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers). +\def\badparencount{% + \message{Warning: unbalanced parentheses in @def...}% + \global\parencount=0 +} +\def\badbrackcount{% + \message{Warning: unbalanced square brackets in @def...}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\definedummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion. Must do this non-globally, to +% confine the change to the current group. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other + \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% + \scanctxt + \catcode`\\=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \argl;% + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\definedummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\definedummyword \noexpand#1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% <parameter list> is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% + \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \macnamexxx} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Just make them active and then expand them all to nothing. +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \lastsection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\lastsection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout + }% + \fi +} + +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces + \def\printedmanual{\ignorespaces #5}% + \def\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax + % Use the node name inside the square brackets. + \def\printedrefname{\ignorespaces #1}% + \else + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1 > 0pt + % It is in another manual, so we don't have it. + \def\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + {\indexnofonts + \turnoffactive + % This expands tokens, so do it after making catcode changes, so _ + % etc. don't get their TeX definitions. + \getfilename{#4}% + % + % See comments at \activebackslashdouble. + {\activebackslashdouble \xdef\pdfxrefdest{#1}% + \backslashparens\pdfxrefdest}% + % + \leavevmode + \startlink attr{/Border [0 0 0]}% + \ifnum\filenamelength>0 + goto file{\the\filename.pdf} name{\pdfxrefdest}% + \else + goto name{\pdfmkpgn{\pdfxrefdest}}% + \fi + }% + \setcolor{\linkcolor}% + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}{}% + \else + \printedrefname + \fi + % + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi + \fi + \endlink +\endgroup} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. +% +\def\refx#1#2{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + {% The node name might contain 8-bit characters, which in our current + % implementation are changed to commands like @'e. Don't let these + % mess up the control sequence name. + \indexnofonts + \turnoffactive + \xdef\safexrefname{#1}% + }% + % + \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR\safexrefname\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 + {\safexrefname}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count1=128 + \def\loop{% + \catcode\count1=\other + \advance\count1 by 1 + \ifnum \count1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \hsize=\pagewidth + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\hang}% + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarly, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing this stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \nobreak\medskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \fi + % + % Leave vertical mode so that indentation from an enclosing + % environment such as @quotation is respected. On the other hand, if + % it's at the top level, we don't want the normal paragraph indentation. + \noindent + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode \medskip \fi % space after the standalone image +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \lastsection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\lastsection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies + % + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start floating, we have to issue warning + % whenever an insert appears inside a float which could possibly + % float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \lastsection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + + +\message{localization,} + +% For single-language documents, @documentlanguage is usually given very +% early, just after @documentencoding. Single argument is the language +% (de) or locale (de_DE) abbreviation. +% +{ + \catcode`\_ = \active + \globaldefs=1 +\parseargdef\documentlanguage{\begingroup + \let_=\normalunderscore % normal _ character for filenames + \tex % read txi-??.tex file in plain TeX. + % Read the file by the name they passed if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \documentlanguagetrywithoutunderscore{#1_\finish}% + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 + \endgroup % end raw TeX +\endgroup} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \globaldefs = 1 % everything in the txi-LL files needs to persist + \input txi-#1.tex + \fi + \closein 1 +} +}% end of special _ catcode +% +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? Putting it in the current +directory should work if nowhere else does.} + +% This macro is called from txi-??.tex files; the first argument is the +% \language name to set (without the "\lang@" prefix), the second and +% third args are \{left,right}hyphenmin. +% +% The language names to pass are determined when the format is built. +% See the etex.log file created at that time, e.g., +% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. +% +% With TeX Live 2008, etex now includes hyphenation patterns for all +% available languages. This means we can support hyphenation in +% Texinfo, at least to some extent. (This still doesn't solve the +% accented characters problem.) +% +\catcode`@=11 +\def\txisetlanguage#1#2#3{% + % do not set the language if the name is undefined in the current TeX. + \expandafter\ifx\csname lang@#1\endcsname \relax + \message{no patterns for #1}% + \else + \global\language = \csname lang@#1\endcsname + \fi + % but there is no harm in adjusting the hyphenmin values regardless. + \global\lefthyphenmin = #2\relax + \global\righthyphenmin = #3\relax +} + +% Helpers for encodings. +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% + \count255=128 + \loop\ifnum\count255<256 + \global\catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +\def\setnonasciicharscatcodenonglobal#1{% + \count255=128 + \loop\ifnum\count255<256 + \catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding. +% +\parseargdef\documentencoding{% + % Encoding being declared for the document. + \def\declaredencoding{\csname #1.enc\endcsname}% + % + % Supported encodings: names converted to tokens in order to be able + % to compare them with \ifx. + \def\ascii{\csname US-ASCII.enc\endcsname}% + \def\latnine{\csname ISO-8859-15.enc\endcsname}% + \def\latone{\csname ISO-8859-1.enc\endcsname}% + \def\lattwo{\csname ISO-8859-2.enc\endcsname}% + \def\utfeight{\csname UTF-8.enc\endcsname}% + % + \ifx \declaredencoding \ascii + \asciichardefs + % + \else \ifx \declaredencoding \lattwo + \setnonasciicharscatcode\active + \lattwochardefs + % + \else \ifx \declaredencoding \latone + \setnonasciicharscatcode\active + \latonechardefs + % + \else \ifx \declaredencoding \latnine + \setnonasciicharscatcode\active + \latninechardefs + % + \else \ifx \declaredencoding \utfeight + \setnonasciicharscatcode\active + \utfeightchardefs + % + \else + \message{Unknown document encoding #1, ignoring.}% + % + \fi % utfeight + \fi % latnine + \fi % latone + \fi % lattwo + \fi % ascii +} + +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% + \gdef^^a0{~} + \gdef^^a1{\exclamdown} + \gdef^^a2{\missingcharmsg{CENT SIGN}} + \gdef^^a3{{\pounds}} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\missingcharmsg{YEN SIGN}} + \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\copyright} + \gdef^^aa{\ordf} + \gdef^^ab{\guillemetleft} + \gdef^^ac{$\lnot$} + \gdef^^ad{\-} + \gdef^^ae{\registeredsymbol} + \gdef^^af{\={}} + % + \gdef^^b0{\textdegree} + \gdef^^b1{$\pm$} + \gdef^^b2{$^2$} + \gdef^^b3{$^3$} + \gdef^^b4{\'{}} + \gdef^^b5{$\mu$} + \gdef^^b6{\P} + % + \gdef^^b7{$^.$} + \gdef^^b8{\cedilla\ } + \gdef^^b9{$^1$} + \gdef^^ba{\ordm} + % + \gdef^^bb{\guilletright} + \gdef^^bc{$1\over4$} + \gdef^^bd{$1\over2$} + \gdef^^be{$3\over4$} + \gdef^^bf{\questiondown} + % + \gdef^^c0{\`A} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\~A} + \gdef^^c4{\"A} + \gdef^^c5{\ringaccent A} + \gdef^^c6{\AE} + \gdef^^c7{\cedilla C} + \gdef^^c8{\`E} + \gdef^^c9{\'E} + \gdef^^ca{\^E} + \gdef^^cb{\"E} + \gdef^^cc{\`I} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\"I} + % + \gdef^^d0{\DH} + \gdef^^d1{\~N} + \gdef^^d2{\`O} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\~O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\O} + \gdef^^d9{\`U} + \gdef^^da{\'U} + \gdef^^db{\^U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\TH} + \gdef^^df{\ss} + % + \gdef^^e0{\`a} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\~a} + \gdef^^e4{\"a} + \gdef^^e5{\ringaccent a} + \gdef^^e6{\ae} + \gdef^^e7{\cedilla c} + \gdef^^e8{\`e} + \gdef^^e9{\'e} + \gdef^^ea{\^e} + \gdef^^eb{\"e} + \gdef^^ec{\`{\dotless i}} + \gdef^^ed{\'{\dotless i}} + \gdef^^ee{\^{\dotless i}} + \gdef^^ef{\"{\dotless i}} + % + \gdef^^f0{\dh} + \gdef^^f1{\~n} + \gdef^^f2{\`o} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\~o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\o} + \gdef^^f9{\`u} + \gdef^^fa{\'u} + \gdef^^fb{\^u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\th} + \gdef^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% + % Encoding is almost identical to Latin1. + \latonechardefs + % + \gdef^^a4{\euro} + \gdef^^a6{\v S} + \gdef^^a8{\v s} + \gdef^^b4{\v Z} + \gdef^^b8{\v z} + \gdef^^bc{\OE} + \gdef^^bd{\oe} + \gdef^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% + \gdef^^a0{~} + \gdef^^a1{\ogonek{A}} + \gdef^^a2{\u{}} + \gdef^^a3{\L} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\v L} + \gdef^^a6{\'S} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\v S} + \gdef^^aa{\cedilla S} + \gdef^^ab{\v T} + \gdef^^ac{\'Z} + \gdef^^ad{\-} + \gdef^^ae{\v Z} + \gdef^^af{\dotaccent Z} + % + \gdef^^b0{\textdegree} + \gdef^^b1{\ogonek{a}} + \gdef^^b2{\ogonek{ }} + \gdef^^b3{\l} + \gdef^^b4{\'{}} + \gdef^^b5{\v l} + \gdef^^b6{\'s} + \gdef^^b7{\v{}} + \gdef^^b8{\cedilla\ } + \gdef^^b9{\v s} + \gdef^^ba{\cedilla s} + \gdef^^bb{\v t} + \gdef^^bc{\'z} + \gdef^^bd{\H{}} + \gdef^^be{\v z} + \gdef^^bf{\dotaccent z} + % + \gdef^^c0{\'R} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\u A} + \gdef^^c4{\"A} + \gdef^^c5{\'L} + \gdef^^c6{\'C} + \gdef^^c7{\cedilla C} + \gdef^^c8{\v C} + \gdef^^c9{\'E} + \gdef^^ca{\ogonek{E}} + \gdef^^cb{\"E} + \gdef^^cc{\v E} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\v D} + % + \gdef^^d0{\DH} + \gdef^^d1{\'N} + \gdef^^d2{\v N} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\H O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\v R} + \gdef^^d9{\ringaccent U} + \gdef^^da{\'U} + \gdef^^db{\H U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\cedilla T} + \gdef^^df{\ss} + % + \gdef^^e0{\'r} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\u a} + \gdef^^e4{\"a} + \gdef^^e5{\'l} + \gdef^^e6{\'c} + \gdef^^e7{\cedilla c} + \gdef^^e8{\v c} + \gdef^^e9{\'e} + \gdef^^ea{\ogonek{e}} + \gdef^^eb{\"e} + \gdef^^ec{\v e} + \gdef^^ed{\'\i} + \gdef^^ee{\^\i} + \gdef^^ef{\v d} + % + \gdef^^f0{\dh} + \gdef^^f1{\'n} + \gdef^^f2{\v n} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\H o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\v r} + \gdef^^f9{\ringaccent u} + \gdef^^fa{\'u} + \gdef^^fb{\H u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\cedilla t} + \gdef^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions. It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% + \ifx #1\relax + \message{\linenumber Unicode char \string #1 not defined for Texinfo}% + \else + \expandafter #1% + \fi +} + +\begingroup + \catcode`\~13 + \catcode`\"12 + + \def\UTFviiiLoop{% + \global\catcode\countUTFx\active + \uccode`\~\countUTFx + \uppercase\expandafter{\UTFviiiTmp}% + \advance\countUTFx by 1 + \ifnum\countUTFx < \countUTFy + \expandafter\UTFviiiLoop + \fi} + + \countUTFx = "C2 + \countUTFy = "E0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiTwoOctets\string~}} + \UTFviiiLoop + + \countUTFx = "E0 + \countUTFy = "F0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiThreeOctets\string~}} + \UTFviiiLoop + + \countUTFx = "F0 + \countUTFy = "F4 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiFourOctets\string~}} + \UTFviiiLoop +\endgroup + +\begingroup + \catcode`\"=12 + \catcode`\<=12 + \catcode`\.=12 + \catcode`\,=12 + \catcode`\;=12 + \catcode`\!=12 + \catcode`\~=13 + + \gdef\DeclareUnicodeCharacter#1#2{% + \countUTFz = "#1\relax + \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% + \begingroup + \parseXMLCharref + \def\UTFviiiTwoOctets##1##2{% + \csname u8:##1\string ##2\endcsname}% + \def\UTFviiiThreeOctets##1##2##3{% + \csname u8:##1\string ##2\string ##3\endcsname}% + \def\UTFviiiFourOctets##1##2##3##4{% + \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \gdef\UTFviiiTmp{#2}% + \endgroup} + + \gdef\parseXMLCharref{% + \ifnum\countUTFz < "A0\relax + \errhelp = \EMsimple + \errmessage{Cannot define Unicode char value < 00A0}% + \else\ifnum\countUTFz < "800\relax + \parseUTFviiiA,% + \parseUTFviiiB C\UTFviiiTwoOctets.,% + \else\ifnum\countUTFz < "10000\relax + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% + \else + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiA!% + \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% + \fi\fi\fi + } + + \gdef\parseUTFviiiA#1{% + \countUTFx = \countUTFz + \divide\countUTFz by 64 + \countUTFy = \countUTFz + \multiply\countUTFz by 64 + \advance\countUTFx by -\countUTFz + \advance\countUTFx by 128 + \uccode `#1\countUTFx + \countUTFz = \countUTFy} + + \gdef\parseUTFviiiB#1#2#3#4{% + \advance\countUTFz by "#10\relax + \uccode `#3\countUTFz + \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +\def\utfeightchardefs{% + \DeclareUnicodeCharacter{00A0}{\tie} + \DeclareUnicodeCharacter{00A1}{\exclamdown} + \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A8}{\"{ }} + \DeclareUnicodeCharacter{00A9}{\copyright} + \DeclareUnicodeCharacter{00AA}{\ordf} + \DeclareUnicodeCharacter{00AB}{\guillemetleft} + \DeclareUnicodeCharacter{00AD}{\-} + \DeclareUnicodeCharacter{00AE}{\registeredsymbol} + \DeclareUnicodeCharacter{00AF}{\={ }} + + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} + \DeclareUnicodeCharacter{00B4}{\'{ }} + \DeclareUnicodeCharacter{00B8}{\cedilla{ }} + \DeclareUnicodeCharacter{00BA}{\ordm} + \DeclareUnicodeCharacter{00BB}{\guillemetright} + \DeclareUnicodeCharacter{00BF}{\questiondown} + + \DeclareUnicodeCharacter{00C0}{\`A} + \DeclareUnicodeCharacter{00C1}{\'A} + \DeclareUnicodeCharacter{00C2}{\^A} + \DeclareUnicodeCharacter{00C3}{\~A} + \DeclareUnicodeCharacter{00C4}{\"A} + \DeclareUnicodeCharacter{00C5}{\AA} + \DeclareUnicodeCharacter{00C6}{\AE} + \DeclareUnicodeCharacter{00C7}{\cedilla{C}} + \DeclareUnicodeCharacter{00C8}{\`E} + \DeclareUnicodeCharacter{00C9}{\'E} + \DeclareUnicodeCharacter{00CA}{\^E} + \DeclareUnicodeCharacter{00CB}{\"E} + \DeclareUnicodeCharacter{00CC}{\`I} + \DeclareUnicodeCharacter{00CD}{\'I} + \DeclareUnicodeCharacter{00CE}{\^I} + \DeclareUnicodeCharacter{00CF}{\"I} + + \DeclareUnicodeCharacter{00D0}{\DH} + \DeclareUnicodeCharacter{00D1}{\~N} + \DeclareUnicodeCharacter{00D2}{\`O} + \DeclareUnicodeCharacter{00D3}{\'O} + \DeclareUnicodeCharacter{00D4}{\^O} + \DeclareUnicodeCharacter{00D5}{\~O} + \DeclareUnicodeCharacter{00D6}{\"O} + \DeclareUnicodeCharacter{00D8}{\O} + \DeclareUnicodeCharacter{00D9}{\`U} + \DeclareUnicodeCharacter{00DA}{\'U} + \DeclareUnicodeCharacter{00DB}{\^U} + \DeclareUnicodeCharacter{00DC}{\"U} + \DeclareUnicodeCharacter{00DD}{\'Y} + \DeclareUnicodeCharacter{00DE}{\TH} + \DeclareUnicodeCharacter{00DF}{\ss} + + \DeclareUnicodeCharacter{00E0}{\`a} + \DeclareUnicodeCharacter{00E1}{\'a} + \DeclareUnicodeCharacter{00E2}{\^a} + \DeclareUnicodeCharacter{00E3}{\~a} + \DeclareUnicodeCharacter{00E4}{\"a} + \DeclareUnicodeCharacter{00E5}{\aa} + \DeclareUnicodeCharacter{00E6}{\ae} + \DeclareUnicodeCharacter{00E7}{\cedilla{c}} + \DeclareUnicodeCharacter{00E8}{\`e} + \DeclareUnicodeCharacter{00E9}{\'e} + \DeclareUnicodeCharacter{00EA}{\^e} + \DeclareUnicodeCharacter{00EB}{\"e} + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + + \DeclareUnicodeCharacter{00F0}{\dh} + \DeclareUnicodeCharacter{00F1}{\~n} + \DeclareUnicodeCharacter{00F2}{\`o} + \DeclareUnicodeCharacter{00F3}{\'o} + \DeclareUnicodeCharacter{00F4}{\^o} + \DeclareUnicodeCharacter{00F5}{\~o} + \DeclareUnicodeCharacter{00F6}{\"o} + \DeclareUnicodeCharacter{00F8}{\o} + \DeclareUnicodeCharacter{00F9}{\`u} + \DeclareUnicodeCharacter{00FA}{\'u} + \DeclareUnicodeCharacter{00FB}{\^u} + \DeclareUnicodeCharacter{00FC}{\"u} + \DeclareUnicodeCharacter{00FD}{\'y} + \DeclareUnicodeCharacter{00FE}{\th} + \DeclareUnicodeCharacter{00FF}{\"y} + + \DeclareUnicodeCharacter{0100}{\=A} + \DeclareUnicodeCharacter{0101}{\=a} + \DeclareUnicodeCharacter{0102}{\u{A}} + \DeclareUnicodeCharacter{0103}{\u{a}} + \DeclareUnicodeCharacter{0104}{\ogonek{A}} + \DeclareUnicodeCharacter{0105}{\ogonek{a}} + \DeclareUnicodeCharacter{0106}{\'C} + \DeclareUnicodeCharacter{0107}{\'c} + \DeclareUnicodeCharacter{0108}{\^C} + \DeclareUnicodeCharacter{0109}{\^c} + \DeclareUnicodeCharacter{0118}{\ogonek{E}} + \DeclareUnicodeCharacter{0119}{\ogonek{e}} + \DeclareUnicodeCharacter{010A}{\dotaccent{C}} + \DeclareUnicodeCharacter{010B}{\dotaccent{c}} + \DeclareUnicodeCharacter{010C}{\v{C}} + \DeclareUnicodeCharacter{010D}{\v{c}} + \DeclareUnicodeCharacter{010E}{\v{D}} + + \DeclareUnicodeCharacter{0112}{\=E} + \DeclareUnicodeCharacter{0113}{\=e} + \DeclareUnicodeCharacter{0114}{\u{E}} + \DeclareUnicodeCharacter{0115}{\u{e}} + \DeclareUnicodeCharacter{0116}{\dotaccent{E}} + \DeclareUnicodeCharacter{0117}{\dotaccent{e}} + \DeclareUnicodeCharacter{011A}{\v{E}} + \DeclareUnicodeCharacter{011B}{\v{e}} + \DeclareUnicodeCharacter{011C}{\^G} + \DeclareUnicodeCharacter{011D}{\^g} + \DeclareUnicodeCharacter{011E}{\u{G}} + \DeclareUnicodeCharacter{011F}{\u{g}} + + \DeclareUnicodeCharacter{0120}{\dotaccent{G}} + \DeclareUnicodeCharacter{0121}{\dotaccent{g}} + \DeclareUnicodeCharacter{0124}{\^H} + \DeclareUnicodeCharacter{0125}{\^h} + \DeclareUnicodeCharacter{0128}{\~I} + \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} + \DeclareUnicodeCharacter{012A}{\=I} + \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} + \DeclareUnicodeCharacter{012C}{\u{I}} + \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + + \DeclareUnicodeCharacter{0130}{\dotaccent{I}} + \DeclareUnicodeCharacter{0131}{\dotless{i}} + \DeclareUnicodeCharacter{0132}{IJ} + \DeclareUnicodeCharacter{0133}{ij} + \DeclareUnicodeCharacter{0134}{\^J} + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} + \DeclareUnicodeCharacter{0139}{\'L} + \DeclareUnicodeCharacter{013A}{\'l} + + \DeclareUnicodeCharacter{0141}{\L} + \DeclareUnicodeCharacter{0142}{\l} + \DeclareUnicodeCharacter{0143}{\'N} + \DeclareUnicodeCharacter{0144}{\'n} + \DeclareUnicodeCharacter{0147}{\v{N}} + \DeclareUnicodeCharacter{0148}{\v{n}} + \DeclareUnicodeCharacter{014C}{\=O} + \DeclareUnicodeCharacter{014D}{\=o} + \DeclareUnicodeCharacter{014E}{\u{O}} + \DeclareUnicodeCharacter{014F}{\u{o}} + + \DeclareUnicodeCharacter{0150}{\H{O}} + \DeclareUnicodeCharacter{0151}{\H{o}} + \DeclareUnicodeCharacter{0152}{\OE} + \DeclareUnicodeCharacter{0153}{\oe} + \DeclareUnicodeCharacter{0154}{\'R} + \DeclareUnicodeCharacter{0155}{\'r} + \DeclareUnicodeCharacter{0158}{\v{R}} + \DeclareUnicodeCharacter{0159}{\v{r}} + \DeclareUnicodeCharacter{015A}{\'S} + \DeclareUnicodeCharacter{015B}{\'s} + \DeclareUnicodeCharacter{015C}{\^S} + \DeclareUnicodeCharacter{015D}{\^s} + \DeclareUnicodeCharacter{015E}{\cedilla{S}} + \DeclareUnicodeCharacter{015F}{\cedilla{s}} + + \DeclareUnicodeCharacter{0160}{\v{S}} + \DeclareUnicodeCharacter{0161}{\v{s}} + \DeclareUnicodeCharacter{0162}{\cedilla{t}} + \DeclareUnicodeCharacter{0163}{\cedilla{T}} + \DeclareUnicodeCharacter{0164}{\v{T}} + + \DeclareUnicodeCharacter{0168}{\~U} + \DeclareUnicodeCharacter{0169}{\~u} + \DeclareUnicodeCharacter{016A}{\=U} + \DeclareUnicodeCharacter{016B}{\=u} + \DeclareUnicodeCharacter{016C}{\u{U}} + \DeclareUnicodeCharacter{016D}{\u{u}} + \DeclareUnicodeCharacter{016E}{\ringaccent{U}} + \DeclareUnicodeCharacter{016F}{\ringaccent{u}} + + \DeclareUnicodeCharacter{0170}{\H{U}} + \DeclareUnicodeCharacter{0171}{\H{u}} + \DeclareUnicodeCharacter{0174}{\^W} + \DeclareUnicodeCharacter{0175}{\^w} + \DeclareUnicodeCharacter{0176}{\^Y} + \DeclareUnicodeCharacter{0177}{\^y} + \DeclareUnicodeCharacter{0178}{\"Y} + \DeclareUnicodeCharacter{0179}{\'Z} + \DeclareUnicodeCharacter{017A}{\'z} + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} + \DeclareUnicodeCharacter{017C}{\dotaccent{z}} + \DeclareUnicodeCharacter{017D}{\v{Z}} + \DeclareUnicodeCharacter{017E}{\v{z}} + + \DeclareUnicodeCharacter{01C4}{D\v{Z}} + \DeclareUnicodeCharacter{01C5}{D\v{z}} + \DeclareUnicodeCharacter{01C6}{d\v{z}} + \DeclareUnicodeCharacter{01C7}{LJ} + \DeclareUnicodeCharacter{01C8}{Lj} + \DeclareUnicodeCharacter{01C9}{lj} + \DeclareUnicodeCharacter{01CA}{NJ} + \DeclareUnicodeCharacter{01CB}{Nj} + \DeclareUnicodeCharacter{01CC}{nj} + \DeclareUnicodeCharacter{01CD}{\v{A}} + \DeclareUnicodeCharacter{01CE}{\v{a}} + \DeclareUnicodeCharacter{01CF}{\v{I}} + + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} + \DeclareUnicodeCharacter{01D1}{\v{O}} + \DeclareUnicodeCharacter{01D2}{\v{o}} + \DeclareUnicodeCharacter{01D3}{\v{U}} + \DeclareUnicodeCharacter{01D4}{\v{u}} + + \DeclareUnicodeCharacter{01E2}{\={\AE}} + \DeclareUnicodeCharacter{01E3}{\={\ae}} + \DeclareUnicodeCharacter{01E6}{\v{G}} + \DeclareUnicodeCharacter{01E7}{\v{g}} + \DeclareUnicodeCharacter{01E8}{\v{K}} + \DeclareUnicodeCharacter{01E9}{\v{k}} + + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} + \DeclareUnicodeCharacter{01F1}{DZ} + \DeclareUnicodeCharacter{01F2}{Dz} + \DeclareUnicodeCharacter{01F3}{dz} + \DeclareUnicodeCharacter{01F4}{\'G} + \DeclareUnicodeCharacter{01F5}{\'g} + \DeclareUnicodeCharacter{01F8}{\`N} + \DeclareUnicodeCharacter{01F9}{\`n} + \DeclareUnicodeCharacter{01FC}{\'{\AE}} + \DeclareUnicodeCharacter{01FD}{\'{\ae}} + \DeclareUnicodeCharacter{01FE}{\'{\O}} + \DeclareUnicodeCharacter{01FF}{\'{\o}} + + \DeclareUnicodeCharacter{021E}{\v{H}} + \DeclareUnicodeCharacter{021F}{\v{h}} + + \DeclareUnicodeCharacter{0226}{\dotaccent{A}} + \DeclareUnicodeCharacter{0227}{\dotaccent{a}} + \DeclareUnicodeCharacter{0228}{\cedilla{E}} + \DeclareUnicodeCharacter{0229}{\cedilla{e}} + \DeclareUnicodeCharacter{022E}{\dotaccent{O}} + \DeclareUnicodeCharacter{022F}{\dotaccent{o}} + + \DeclareUnicodeCharacter{0232}{\=Y} + \DeclareUnicodeCharacter{0233}{\=y} + \DeclareUnicodeCharacter{0237}{\dotless{j}} + + \DeclareUnicodeCharacter{02DB}{\ogonek{ }} + + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} + + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} + + \DeclareUnicodeCharacter{1E20}{\=G} + \DeclareUnicodeCharacter{1E21}{\=g} + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} + \DeclareUnicodeCharacter{1E26}{\"H} + \DeclareUnicodeCharacter{1E27}{\"h} + + \DeclareUnicodeCharacter{1E30}{\'K} + \DeclareUnicodeCharacter{1E31}{\'k} + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} + \DeclareUnicodeCharacter{1E3E}{\'M} + \DeclareUnicodeCharacter{1E3F}{\'m} + + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} + + \DeclareUnicodeCharacter{1E54}{\'P} + \DeclareUnicodeCharacter{1E55}{\'p} + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} + + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} + + \DeclareUnicodeCharacter{1E7C}{\~V} + \DeclareUnicodeCharacter{1E7D}{\~v} + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} + + \DeclareUnicodeCharacter{1E80}{\`W} + \DeclareUnicodeCharacter{1E81}{\`w} + \DeclareUnicodeCharacter{1E82}{\'W} + \DeclareUnicodeCharacter{1E83}{\'w} + \DeclareUnicodeCharacter{1E84}{\"W} + \DeclareUnicodeCharacter{1E85}{\"w} + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} + \DeclareUnicodeCharacter{1E8C}{\"X} + \DeclareUnicodeCharacter{1E8D}{\"x} + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} + + \DeclareUnicodeCharacter{1E90}{\^Z} + \DeclareUnicodeCharacter{1E91}{\^z} + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} + \DeclareUnicodeCharacter{1E97}{\"t} + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} + + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} + + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} + \DeclareUnicodeCharacter{1EBC}{\~E} + \DeclareUnicodeCharacter{1EBD}{\~e} + + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} + + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} + + \DeclareUnicodeCharacter{1EF2}{\`Y} + \DeclareUnicodeCharacter{1EF3}{\`y} + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} + + \DeclareUnicodeCharacter{1EF8}{\~Y} + \DeclareUnicodeCharacter{1EF9}{\~y} + + \DeclareUnicodeCharacter{2013}{--} + \DeclareUnicodeCharacter{2014}{---} + \DeclareUnicodeCharacter{2018}{\quoteleft} + \DeclareUnicodeCharacter{2019}{\quoteright} + \DeclareUnicodeCharacter{201A}{\quotesinglbase} + \DeclareUnicodeCharacter{201C}{\quotedblleft} + \DeclareUnicodeCharacter{201D}{\quotedblright} + \DeclareUnicodeCharacter{201E}{\quotedblbase} + \DeclareUnicodeCharacter{2022}{\bullet} + \DeclareUnicodeCharacter{2026}{\dots} + \DeclareUnicodeCharacter{2039}{\guilsinglleft} + \DeclareUnicodeCharacter{203A}{\guilsinglright} + \DeclareUnicodeCharacter{20AC}{\euro} + + \DeclareUnicodeCharacter{2192}{\expansion} + \DeclareUnicodeCharacter{21D2}{\result} + + \DeclareUnicodeCharacter{2212}{\minus} + \DeclareUnicodeCharacter{2217}{\point} + \DeclareUnicodeCharacter{2261}{\equiv} +}% end of \utfeightchardefs + + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done + \relax +} + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} + +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % if we don't reset these, they will remain at "1 true in" of + % whatever layout pdftex was dumped with. + \pdfhorigin = 1 true in + \pdfvorigin = 1 true in + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{607.2pt}{6in}% that's 46 lines + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {-.2in}{0in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{673.2pt}{160mm}% that's 51 lines + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1\relax + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% DEL is a comment character, in case @c does not suffice. +\catcode`\^^? = 14 + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\catcode`\$=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} +\def\normaldollar{$}%$ font-lock fix + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\let\realunder=_ +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% + \normalturnoffactive + \otherbackslash +} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active +@def@normalbackslash{{@tt@backslashcurfont}} +% On startup, @fixbackslash assigns: +% @let \ = @normalbackslash + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. +% +@def@normalturnoffactive{% + @let\=@normalbackslash + @let"=@normaldoublequote + @let~=@normaltilde + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let<=@normalless + @let>=@normalgreater + @let+=@normalplus + @let$=@normaldollar %$ font-lock fix + @markupsetuplqdefault + @markupsetuprqdefault + @unsepspaces +} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\' in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also turn back on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{% + @ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active + @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These look ok in all fonts, so just make them not special. +@catcode`@& = @other +@catcode`@# = @other +@catcode`@% = @other + +@c Finally, make ` and ' active, so that txicodequoteundirected and +@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we +@c don't make ` and ' active, @code will not get them as active chars. +@c Do this last of all since we use ` in the previous @catcode assignments. +@catcode`@'=@active +@catcode`@`=@active +@markupsetuplqdefault +@markupsetuprqdefault + +@c Gnulib now utterly and painfully insists on no trailing whitespace. +@c So we have to nuke it. + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c eval: (add-hook 'write-file-hooks 'nuke-trailing-whitespace) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore diff --git a/coreseek/m4-1.4.13/c-boxes.el b/coreseek/m4-1.4.13/c-boxes.el new file mode 100644 index 0000000..35e4d99 --- /dev/null +++ b/coreseek/m4-1.4.13/c-boxes.el @@ -0,0 +1,421 @@ +;;; Boxed comments for C mode. +;;; Copyright (C) 1991, 1992, 1993, 1994, 2008 Free Software Foundation, Inc. +;;; Francois Pinard <pinard@iro.umontreal.ca>, April 1991. +;;; +;;; This file is part of GNU M4. +;;; +;;; GNU M4 is free software: you can redistribute it and/or modify +;;; it under the terms of the GNU General Public License as published by +;;; the Free Software Foundation, either version 3 of the License, or +;;; (at your option) any later version. +;;; +;;; GNU M4 is distributed in the hope that it will be useful, +;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with this program. If not, see <http://www.gnu.org/licenses/>. + +;;; I often refill paragraphs inside C comments, while stretching or +;;; shrinking the surrounding box as needed. This is a real pain to +;;; do by hand. Here is the code I made to ease my life on this, +;;; usable from within GNU Emacs. It would not be fair giving all +;;; sources for a product without also giving the means for nicely +;;; modifying them. +;;; +;;; The function rebox-c-comment adjust comment boxes without +;;; refilling comment paragraphs, while reindent-c-comment adjust +;;; comment boxes after refilling. Numeric prefixes are used to add, +;;; remove, or change the style of the box surrounding the comment. +;;; Since refilling paragraphs in C mode does make sense only for +;;; comments, this code redefines the M-q command in C mode. I use +;;; this hack by putting, in my .emacs file: +;;; +;;; (setq c-mode-hook +;;; '(lambda () +;;; (define-key c-mode-map "\M-q" 'reindent-c-comment))) +;;; (autoload 'rebox-c-comment "c-boxes" nil t) +;;; (autoload 'reindent-c-comment "c-boxes" nil t) +;;; +;;; The cursor should be within a comment before any of these +;;; commands, or else it should be between two comments, in which case +;;; the command applies to the next comment. When the command is +;;; given without prefix, the current comment box type is recognized +;;; and preserved. Given 0 as a prefix, the comment box disappears +;;; and the comment stays between a single opening `/*' and a single +;;; closing `*/'. Given 1 or 2 as a prefix, a single or doubled lined +;;; comment box is forced. Given 3 as a prefix, a Taarna style box is +;;; forced, but you do not even want to hear about those. When a +;;; negative prefix is given, the absolute value is used, but the +;;; default style is changed. Any other value (like C-u alone) forces +;;; the default box style. +;;; +;;; I observed rounded corners first in some code from Warren Tucker +;;; <wht@n4hgf.mt-park.ga.us>. + +(defvar c-box-default-style 'single "*Preferred style for box comments.") +(defvar c-mode-taarna-style nil "*Non-nil for Taarna team C-style.") + +;;; Set or reset the Taarna team's own way for a C style. + +(defun taarna-mode () + (interactive) + (if c-mode-taarna-style + (progn + + (setq c-mode-taarna-style nil) + (setq c-indent-level 2) + (setq c-continued-statement-offset 2) + (setq c-brace-offset 0) + (setq c-argdecl-indent 5) + (setq c-label-offset -2) + (setq c-tab-always-indent t) + (setq c-box-default-style 'single) + (message "C mode: GNU style")) + + (setq c-mode-taarna-style t) + (setq c-indent-level 4) + (setq c-continued-statement-offset 4) + (setq c-brace-offset -4) + (setq c-argdecl-indent 4) + (setq c-label-offset -4) + (setq c-tab-always-indent t) + (setq c-box-default-style 'taarna) + (message "C mode: Taarna style"))) + +;;; Return the minimum value of the left margin of all lines, or -1 if +;;; all lines are empty. + +(defun buffer-left-margin () + (let ((margin -1)) + (goto-char (point-min)) + (while (not (eobp)) + (skip-chars-forward " \t") + (if (not (looking-at "\n")) + (setq margin + (if (< margin 0) + (current-column) + (min margin (current-column))))) + (forward-line 1)) + margin)) + +;;; Return the maximum value of the right margin of all lines. Any +;;; sentence ending a line has a space guaranteed before the margin. + +(defun buffer-right-margin () + (let ((margin 0) period) + (goto-char (point-min)) + (while (not (eobp)) + (end-of-line) + (if (bobp) + (setq period 0) + (backward-char 1) + (setq period (if (looking-at "[.?!]") 1 0)) + (forward-char 1)) + (setq margin (max margin (+ (current-column) period))) + (forward-char 1)) + margin)) + +;;; Add, delete or adjust a C comment box. If FLAG is nil, the +;;; current boxing style is recognized and preserved. When 0, the box +;;; is removed; when 1, a single lined box is forced; when 2, a double +;;; lined box is forced; when 3, a Taarna style box is forced. If +;;; negative, the absolute value is used, but the default style is +;;; changed. For any other value (like C-u), the default style is +;;; forced. If REFILL is not nil, refill the comment paragraphs prior +;;; to reboxing. + +(defun rebox-c-comment-engine (flag refill) + (save-restriction + (let ((undo-list buffer-undo-list) + (marked-point (point-marker)) + (saved-point (point)) + box-style left-margin right-margin) + + ;; First, find the limits of the block of comments following or + ;; enclosing the cursor, or return an error if the cursor is not + ;; within such a block of comments, narrow the buffer, and + ;; untabify it. + + ;; - insure the point is into the following comment, if any + + (skip-chars-forward " \t\n") + (if (looking-at "/\\*") + (forward-char 2)) + + (let ((here (point)) start end temp) + + ;; - identify a minimal comment block + + (search-backward "/*") + (setq temp (point)) + (beginning-of-line) + (setq start (point)) + (skip-chars-forward " \t") + (if (< (point) temp) + (progn + (goto-char saved-point) + (error "text before comment's start"))) + (search-forward "*/") + (setq temp (point)) + (end-of-line) + (if (looking-at "\n") + (forward-char 1)) + (setq end (point)) + (skip-chars-backward " \t\n") + (if (> (point) temp) + (progn + (goto-char saved-point) + (error "text after comment's end"))) + (if (< end here) + (progn + (goto-char saved-point) + (error "outside any comment block"))) + + ;; - try to extend the comment block backwards + + (goto-char start) + (while (and (not (bobp)) + (progn (previous-line 1) + (beginning-of-line) + (looking-at "[ \t]*/\\*.*\\*/[ \t]*$"))) + (setq start (point))) + + ;; - try to extend the comment block forward + + (goto-char end) + (while (looking-at "[ \t]*/\\*.*\\*/[ \t]*$") + (forward-line 1) + (beginning-of-line) + (setq end (point))) + + ;; - narrow to the whole block of comments + + (narrow-to-region start end)) + + ;; Second, remove all the comment marks, and move all the text + ;; rigidly to the left to insure the left margin stays at the + ;; same place. At the same time, recognize and save the box + ;; style in BOX-STYLE. + + (let ((previous-margin (buffer-left-margin)) + actual-margin) + + ;; - remove all comment marks + + (goto-char (point-min)) + (replace-regexp "^\\([ \t]*\\)/\\*" "\\1 ") + (goto-char (point-min)) + (replace-regexp "^\\([ \t]*\\)|" "\\1 ") + (goto-char (point-min)) + (replace-regexp "\\(\\*/\\||\\)[ \t]*" "") + (goto-char (point-min)) + (replace-regexp "\\*/[ \t]*/\\*" " ") + + ;; - remove the first and last dashed lines + + (setq box-style 'plain) + (goto-char (point-min)) + (if (looking-at "^[ \t]*-*[.\+\\]?[ \t]*\n") + (progn + (setq box-style 'single) + (replace-match "")) + (if (looking-at "^[ \t]*=*[.\+\\]?[ \t]*\n") + (progn + (setq box-style 'double) + (replace-match "")))) + (goto-char (point-max)) + (previous-line 1) + (beginning-of-line) + (if (looking-at "^[ \t]*[`\+\\]?*[-=]+[ \t]*\n") + (progn + (if (eq box-style 'plain) + (setq box-style 'taarna)) + (replace-match ""))) + + ;; - remove all spurious whitespace + + (goto-char (point-min)) + (replace-regexp "[ \t]+$" "") + (goto-char (point-min)) + (if (looking-at "\n+") + (replace-match "")) + (goto-char (point-max)) + (skip-chars-backward "\n") + (if (looking-at "\n\n+") + (replace-match "\n")) + (goto-char (point-min)) + (replace-regexp "\n\n\n+" "\n\n") + + ;; - move the text left is adequate + + (setq actual-margin (buffer-left-margin)) + (if (not (= previous-margin actual-margin)) + (indent-rigidly (point-min) (point-max) + (- previous-margin actual-margin)))) + + ;; Third, select the new box style from the old box style and + ;; the argument, choose the margins for this style and refill + ;; each paragraph. + + ;; - modify box-style only if flag is defined + + (if flag + (setq box-style + (cond ((eq flag 0) 'plain) + ((eq flag 1) 'single) + ((eq flag 2) 'double) + ((eq flag 3) 'taarna) + ((eq flag '-) (setq c-box-default-style 'plain) 'plain) + ((eq flag -1) (setq c-box-default-style 'single) 'single) + ((eq flag -2) (setq c-box-default-style 'double) 'double) + ((eq flag -3) (setq c-box-default-style 'taarna) 'taarna) + (t c-box-default-style)))) + + ;; - compute the left margin + + (setq left-margin (buffer-left-margin)) + + ;; - temporarily set the fill prefix and column, then refill + + (untabify (point-min) (point-max)) + + (if refill + (let ((fill-prefix (make-string left-margin ? )) + (fill-column (- fill-column + (if (memq box-style '(single double)) 4 6)))) + (fill-region (point-min) (point-max)))) + + ;; - compute the right margin after refill + + (setq right-margin (buffer-right-margin)) + + ;; Fourth, put the narrowed buffer back into a comment box, + ;; according to the value of box-style. Values may be: + ;; plain: insert between a single pair of comment delimiters + ;; single: complete box, overline and underline with dashes + ;; double: complete box, overline and underline with equal signs + ;; taarna: comment delimiters on each line, underline with dashes + + ;; - move the right margin to account for left inserts + + (setq right-margin (+ right-margin + (if (memq box-style '(single double)) + 2 + 3))) + + ;; - construct the box comment, from top to bottom + + (goto-char (point-min)) + (cond ((eq box-style 'plain) + + ;; - construct a plain style comment + + (skip-chars-forward " " (+ (point) left-margin)) + (insert (make-string (- left-margin (current-column)) ? ) + "/* ") + (end-of-line) + (forward-char 1) + (while (not (eobp)) + (skip-chars-forward " " (+ (point) left-margin)) + (insert (make-string (- left-margin (current-column)) ? ) + " ") + (end-of-line) + (forward-char 1)) + (backward-char 1) + (insert " */")) + ((eq box-style 'single) + + ;; - construct a single line style comment + + (indent-to left-margin) + (insert "/*") + (insert (make-string (- right-margin (current-column)) ?-) + "-.\n") + (while (not (eobp)) + (skip-chars-forward " " (+ (point) left-margin)) + (insert (make-string (- left-margin (current-column)) ? ) + "| ") + (end-of-line) + (indent-to right-margin) + (insert " |") + (forward-char 1)) + (indent-to left-margin) + (insert "`") + (insert (make-string (- right-margin (current-column)) ?-) + "*/\n")) + ((eq box-style 'double) + + ;; - construct a double line style comment + + (indent-to left-margin) + (insert "/*") + (insert (make-string (- right-margin (current-column)) ?=) + "=\\\n") + (while (not (eobp)) + (skip-chars-forward " " (+ (point) left-margin)) + (insert (make-string (- left-margin (current-column)) ? ) + "| ") + (end-of-line) + (indent-to right-margin) + (insert " |") + (forward-char 1)) + (indent-to left-margin) + (insert "\\") + (insert (make-string (- right-margin (current-column)) ?=) + "*/\n")) + ((eq box-style 'taarna) + + ;; - construct a Taarna style comment + + (while (not (eobp)) + (skip-chars-forward " " (+ (point) left-margin)) + (insert (make-string (- left-margin (current-column)) ? ) + "/* ") + (end-of-line) + (indent-to right-margin) + (insert " */") + (forward-char 1)) + (indent-to left-margin) + (insert "/* ") + (insert (make-string (- right-margin (current-column)) ?-) + " */\n")) + (t (error "unknown box style"))) + + ;; Fifth, retabify, restore the point position, then cleanup the + ;; undo list of any boundary since we started. + + ;; - retabify before left margin only (adapted from tabify.el) + + (goto-char (point-min)) + (while (re-search-forward "^[ \t][ \t][ \t]*" nil t) + (let ((column (current-column)) + (indent-tabs-mode t)) + (delete-region (match-beginning 0) (point)) + (indent-to column))) + + ;; - restore the point position + + (goto-char (marker-position marked-point)) + + ;; - remove all intermediate boundaries from the undo list + + (if (not (eq buffer-undo-list undo-list)) + (let ((cursor buffer-undo-list)) + (while (not (eq (cdr cursor) undo-list)) + (if (car (cdr cursor)) + (setq cursor (cdr cursor)) + (rplacd cursor (cdr (cdr cursor)))))))))) + +;;; Rebox a C comment without refilling it. + +(defun rebox-c-comment (flag) + (interactive "P") + (rebox-c-comment-engine flag nil)) + +;;; Rebox a C comment after refilling. + +(defun reindent-c-comment (flag) + (interactive "P") + (rebox-c-comment-engine flag t)) diff --git a/coreseek/m4-1.4.13/cfg.mk b/coreseek/m4-1.4.13/cfg.mk new file mode 100644 index 0000000..3dda9f6 --- /dev/null +++ b/coreseek/m4-1.4.13/cfg.mk @@ -0,0 +1,41 @@ +# Customize maint.mk. -*- makefile -*- +# Copyright (C) 2003-2009 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Use alpha.gnu.org for alpha and beta releases. +# Use ftp.gnu.org for major releases. +gnu_ftp_host-alpha = alpha.gnu.org +gnu_ftp_host-beta = alpha.gnu.org +gnu_ftp_host-major = ftp.gnu.org +gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE)) + +# Used in maint.mk's web-manual rule +manual_title = GNU macro processor + +url_dir_list = \ + ftp://$(gnu_rel_host)/gnu/m4 + +# The GnuPG ID of the key used to sign the tarballs. +gpg_key_ID = F4850180 + +# Tests not to run as part of "make distcheck". +# Exclude changelog-check here so that there's less churn in ChangeLog +# files -- otherwise, you'd need to have the upcoming version number +# at the top of the file for each `make distcheck' run. +local-checks-to-skip = changelog-check + +# The local directory containing the checked-out copy of gnulib used in this +# release. Used solely to get gnulib's SHA1 for the "announcement" target. +gnulib_dir = $(srcdir)/gnulib diff --git a/coreseek/m4-1.4.13/checks/001.preprocess b/coreseek/m4-1.4.13/checks/001.preprocess new file mode 100644 index 0000000..095224a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/001.preprocess @@ -0,0 +1,39 @@ +dnl @ ../doc/m4.texinfo:695: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -s +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`twoline', `1 +2') +dnl @result{}#line 2 "stdin" +dnl @result{} +changecom(`/*', `*/') +dnl @result{} +define(`comment', `/*1 +2*/') +dnl @result{}#line 5 +dnl @result{} +dnl no line +hello +dnl @result{}#line 7 +dnl @result{}hello +twoline +dnl @result{}1 +dnl @result{}#line 8 +dnl @result{}2 +comment +dnl @result{}/*1 +dnl @result{}2*/ +one comment `two +three' +dnl @result{}#line 10 +dnl @result{}one /*1 +dnl @result{}2*/ two +dnl @result{}three +goodbye +dnl @result{}#line 12 +dnl @result{}goodbye diff --git a/coreseek/m4-1.4.13/checks/002.debugging_ b/coreseek/m4-1.4.13/checks/002.debugging_ new file mode 100644 index 0000000..d0fe0bc --- /dev/null +++ b/coreseek/m4-1.4.13/checks/002.debugging_ @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:878: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dbar=hello -tbar --debugfile= foo --debugfile - +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl @result{}hello +errprint(`hi +')dnl +dnl @error{}hi +bar +dnl @error{}m4trace: -1- bar -> `hello' +dnl @result{}hello diff --git a/coreseek/m4-1.4.13/checks/003.command_li b/coreseek/m4-1.4.13/checks/003.command_li new file mode 100644 index 0000000..7aee20d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/003.command_li @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:937: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dbar=hello foo -Dbar=world foo +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl @result{}hello +dnl @result{}world diff --git a/coreseek/m4-1.4.13/checks/004.command_li b/coreseek/m4-1.4.13/checks/004.command_li new file mode 100644 index 0000000..34e5164 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/004.command_li @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:960: Origin of test +dnl @ expected status: 1 +dnl @ extra options: Makefile/ +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl @ expected error: ignore +dnl @error{}m4: cannot open `Makefile/': Not a directory diff --git a/coreseek/m4-1.4.13/checks/005.comments b/coreseek/m4-1.4.13/checks/005.comments new file mode 100644 index 0000000..b48c844 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/005.comments @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1045: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +`quoted text' # `commented text' +dnl @result{}quoted text # `commented text' +`quoting inhibits' `#' `comments' +dnl @result{}quoting inhibits # comments diff --git a/coreseek/m4-1.4.13/checks/006.comments b/coreseek/m4-1.4.13/checks/006.comments new file mode 100644 index 0000000..700bc34 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/006.comments @@ -0,0 +1,23 @@ +dnl @ ../doc/m4.texinfo:1060: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`e', `$@')define(`q', ``$@'')define(`foo', `bar') +dnl @result{} +q(e(`one +',#two ' foo +)) +dnl @result{}`one +dnl @result{}',`#two bar +dnl @result{}'' +changecom(`<', `>')define(`n', `$#') +dnl @result{} +n(e(<`>, <'>)) +dnl @result{}1 +len(e(<`>, ,<'>)) +dnl @result{}12 diff --git a/coreseek/m4-1.4.13/checks/007.input_proc b/coreseek/m4-1.4.13/checks/007.input_proc new file mode 100644 index 0000000..0e509ae --- /dev/null +++ b/coreseek/m4-1.4.13/checks/007.input_proc @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:1152: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +changequote([,])dnl +define([gl_STRING_MODULE_INDICATOR], + [ + dnl comment + GNULIB_]translit([$1],[a-z],[A-Z])[=1 + ])dnl + gl_STRING_MODULE_INDICATOR([strcase]) +dnl @result{} +dnl @result{} GNULIB_strcase=1 +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/008.input_proc b/coreseek/m4-1.4.13/checks/008.input_proc new file mode 100644 index 0000000..f1eec09 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/008.input_proc @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:1228: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +changequote([,])dnl +define([gl_STRING_MODULE_INDICATOR], + [dnl comment + GNULIB_[]translit([$1], [a-z], [A-Z])=1dnl +])dnl + gl_STRING_MODULE_INDICATOR([strcase]) +dnl @result{} GNULIB_STRCASE=1 diff --git a/coreseek/m4-1.4.13/checks/009.inhibiting b/coreseek/m4-1.4.13/checks/009.inhibiting new file mode 100644 index 0000000..2f622fc --- /dev/null +++ b/coreseek/m4-1.4.13/checks/009.inhibiting @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1353: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +eval +dnl @result{}eval +eval(`1') +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/010.inhibiting b/coreseek/m4-1.4.13/checks/010.inhibiting new file mode 100644 index 0000000..9de02fe --- /dev/null +++ b/coreseek/m4-1.4.13/checks/010.inhibiting @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:1369: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -P +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +eval +dnl @result{}eval +eval(`1') +dnl @result{}eval(1) +m4_eval +dnl @result{}m4_eval +m4_eval(`1') +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/011.inhibiting b/coreseek/m4-1.4.13/checks/011.inhibiting new file mode 100644 index 0000000..fbdba00 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/011.inhibiting @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:1400: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +`divert' +dnl @result{}divert +`d'ivert +dnl @result{}divert +di`ver't +dnl @result{}divert +div`'ert +dnl @result{}divert diff --git a/coreseek/m4-1.4.13/checks/012.inhibiting b/coreseek/m4-1.4.13/checks/012.inhibiting new file mode 100644 index 0000000..58d3e1b --- /dev/null +++ b/coreseek/m4-1.4.13/checks/012.inhibiting @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1414: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +`'divert +dnl @result{} +divert`' +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/013.inhibiting b/coreseek/m4-1.4.13/checks/013.inhibiting new file mode 100644 index 0000000..e647cbd --- /dev/null +++ b/coreseek/m4-1.4.13/checks/013.inhibiting @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:1431: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`cde', `CDE') +dnl @result{} +define(`x', `substr(ab') +dnl @result{} +define(`y', `cde, `1', `3')') +dnl @result{} +x`'y +dnl @result{}bCD diff --git a/coreseek/m4-1.4.13/checks/014.inhibiting b/coreseek/m4-1.4.13/checks/014.inhibiting new file mode 100644 index 0000000..a14dd2a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/014.inhibiting @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1445: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`x1', `len(`$1'') +dnl @result{} +define(`y1', ``$1')') +dnl @result{} +x1(`01234567890123456789')y1(`98765432109876543210') +dnl @result{}40 diff --git a/coreseek/m4-1.4.13/checks/015.inhibiting b/coreseek/m4-1.4.13/checks/015.inhibiting new file mode 100644 index 0000000..0f1d57d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/015.inhibiting @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1459: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`macro', `m') +dnl @result{} +macro(`m')macro +dnl @result{}mmacro +macro(`m')`'macro +dnl @result{}mm diff --git a/coreseek/m4-1.4.13/checks/016.inhibiting b/coreseek/m4-1.4.13/checks/016.inhibiting new file mode 100644 index 0000000..c8dca69 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/016.inhibiting @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1471: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`macro', `di$1') +dnl @result{} +macro(`v')`ert' +dnl @result{}divert +macro(`v')ert +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/017.macro_argu b/coreseek/m4-1.4.13/checks/017.macro_argu new file mode 100644 index 0000000..58f0aa6 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/017.macro_argu @@ -0,0 +1,26 @@ +dnl @ ../doc/m4.texinfo:1503: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`macro', `$1') +dnl @result{} +macro( unquoted leading space lost) +dnl @result{}unquoted leading space lost +macro(` quoted leading space kept') +dnl @result{} quoted leading space kept +macro( + divert `unquoted space kept after expansion') +dnl @result{} unquoted space kept after expansion +macro(macro(` +')`whitespace from expansion kept') +dnl @result{} +dnl @result{}whitespace from expansion kept +macro(`unquoted trailing whitespace kept' +) +dnl @result{}unquoted trailing whitespace kept +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/018.macro_argu b/coreseek/m4-1.4.13/checks/018.macro_argu new file mode 100644 index 0000000..c306379 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/018.macro_argu @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:1531: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +index(`abc') +dnl @error{}m4:stdin:1: Warning: too few arguments to builtin `index' +dnl @result{}0 +index(`abc',) +dnl @result{}0 +index(`abc', `b', `ignored') +dnl @error{}m4:stdin:3: Warning: excess arguments to builtin `index' ignored +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/019.macro_argu b/coreseek/m4-1.4.13/checks/019.macro_argu new file mode 100644 index 0000000..82e7e26 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/019.macro_argu @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1544: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Q +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +index(`abc') +dnl @result{}0 +index(`abc',) +dnl @result{}0 +index(`abc', `b', `ignored') +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/020.macro_argu b/coreseek/m4-1.4.13/checks/020.macro_argu new file mode 100644 index 0000000..9af00b4 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/020.macro_argu @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1574: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`f', `1') +dnl @result{} +f(define(`f', `2')) +dnl @result{}1 +f +dnl @result{}2 diff --git a/coreseek/m4-1.4.13/checks/021.macro_argu b/coreseek/m4-1.4.13/checks/021.macro_argu new file mode 100644 index 0000000..d09e0ea --- /dev/null +++ b/coreseek/m4-1.4.13/checks/021.macro_argu @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1586: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +hello world +dnl @result{}hello world +define( +dnl @error{}m4:stdin:2: ERROR: end of file in argument list diff --git a/coreseek/m4-1.4.13/checks/022.quoting_ar b/coreseek/m4-1.4.13/checks/022.quoting_ar new file mode 100644 index 0000000..fe60072 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/022.quoting_ar @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:1645: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`active', `ACT, IVE') +dnl @result{} +define(`show', `$1 $1') +dnl @result{} +show(active) +dnl @result{}ACT ACT +show(`active') +dnl @result{}ACT, IVE ACT, IVE +show(``active'') +dnl @result{}active active diff --git a/coreseek/m4-1.4.13/checks/023.macro_expa b/coreseek/m4-1.4.13/checks/023.macro_expa new file mode 100644 index 0000000..bb0d701 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/023.macro_expa @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:1673: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dbar=Hello -Dfoo=bar +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +foo +dnl @result{}Hello diff --git a/coreseek/m4-1.4.13/checks/024.macro_expa b/coreseek/m4-1.4.13/checks/024.macro_expa new file mode 100644 index 0000000..7ecce04 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/024.macro_expa @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1688: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dfoo -Decho=$@ +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +foo +dnl @result{} +foo(`silently ignored') +dnl @result{} +echo(`1', `2') +dnl @result{}1,2 diff --git a/coreseek/m4-1.4.13/checks/025.define b/coreseek/m4-1.4.13/checks/025.define new file mode 100644 index 0000000..0c7efd5 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/025.define @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1737: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `Hello world.') +dnl @result{} +foo +dnl @result{}Hello world. diff --git a/coreseek/m4-1.4.13/checks/026.define b/coreseek/m4-1.4.13/checks/026.define new file mode 100644 index 0000000..e7d6971 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/026.define @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1754: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(foo, one) +dnl @result{} +define(foo, two) +dnl @result{} +one +dnl @result{}two diff --git a/coreseek/m4-1.4.13/checks/027.define b/coreseek/m4-1.4.13/checks/027.define new file mode 100644 index 0000000..5d7352f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/027.define @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:1788: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`array', `defn(format(``array[%d]'', `$1'))') +dnl @result{} +define(`array_set', `define(format(``array[%d]'', `$1'), `$2')') +dnl @result{} +array_set(`4', `array element no. 4') +dnl @result{} +array_set(`17', `array element no. 17') +dnl @result{} +array(`4') +dnl @result{}array element no. 4 +array(eval(`10 + 7')) +dnl @result{}array element no. 17 diff --git a/coreseek/m4-1.4.13/checks/028.arguments b/coreseek/m4-1.4.13/checks/028.arguments new file mode 100644 index 0000000..c59eeea --- /dev/null +++ b/coreseek/m4-1.4.13/checks/028.arguments @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1822: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`exch', `$2, $1') +dnl @result{} +exch(`arg1', `arg2') +dnl @result{}arg2, arg1 diff --git a/coreseek/m4-1.4.13/checks/029.arguments b/coreseek/m4-1.4.13/checks/029.arguments new file mode 100644 index 0000000..ac5dc67 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/029.arguments @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1832: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`exch', `$2, $1') +dnl @result{} +define(exch(``expansion text'', ``macro'')) +dnl @result{} +macro +dnl @result{}expansion text diff --git a/coreseek/m4-1.4.13/checks/030.arguments b/coreseek/m4-1.4.13/checks/030.arguments new file mode 100644 index 0000000..f62f4cf --- /dev/null +++ b/coreseek/m4-1.4.13/checks/030.arguments @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1848: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`test', ``Macro name: $0'') +dnl @result{} +test +dnl @result{}Macro name: test diff --git a/coreseek/m4-1.4.13/checks/031.arguments b/coreseek/m4-1.4.13/checks/031.arguments new file mode 100644 index 0000000..68d40f6 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/031.arguments @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1858: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `This is macro `foo'.') +dnl @result{} +foo +dnl @result{}This is macro foo. diff --git a/coreseek/m4-1.4.13/checks/032.arguments b/coreseek/m4-1.4.13/checks/032.arguments new file mode 100644 index 0000000..6b52205 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/032.arguments @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:1893: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `single quoted $`'{1} output') +dnl @result{} +define(`bar', ``double quoted $'`{2} output'') +dnl @result{} +foo(`a', `b') +dnl @result{}single quoted ${1} output +bar(`a', `b') +dnl @result{}double quoted ${2} output diff --git a/coreseek/m4-1.4.13/checks/033.arguments b/coreseek/m4-1.4.13/checks/033.arguments new file mode 100644 index 0000000..8a4fb1c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/033.arguments @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:1915: Origin of test +dnl @ expected status: 0 +dnl @ extra options: --warn-macro-sequence +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `$001 ${1} $1') +dnl @error{}m4:stdin:1: Warning: definition of `foo' contains sequence `$001' +dnl @error{}m4:stdin:1: Warning: definition of `foo' contains sequence `${1}' +dnl @result{} +foo(`bar') +dnl @result{}bar ${1} bar diff --git a/coreseek/m4-1.4.13/checks/034.pseudo_arg b/coreseek/m4-1.4.13/checks/034.pseudo_arg new file mode 100644 index 0000000..c2ef8c6 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/034.pseudo_arg @@ -0,0 +1,24 @@ +dnl @ ../doc/m4.texinfo:1941: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`nargs', `$#') +dnl @result{} +nargs +dnl @result{}0 +nargs() +dnl @result{}1 +nargs(`arg1', `arg2', `arg3') +dnl @result{}3 +nargs(`commas can be quoted, like this') +dnl @result{}1 +nargs(arg1#inside comments, commas do not separate arguments +still arg1) +dnl @result{}1 +nargs((unquoted parentheses, like this, group arguments)) +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/035.pseudo_arg b/coreseek/m4-1.4.13/checks/035.pseudo_arg new file mode 100644 index 0000000..46ccef9 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/035.pseudo_arg @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:1963: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl Attempt to define a macro to just `$#' +define(underquoted, $#) +oops) +dnl @result{} +underquoted +dnl @result{}0) +dnl @result{}oops diff --git a/coreseek/m4-1.4.13/checks/036.pseudo_arg b/coreseek/m4-1.4.13/checks/036.pseudo_arg new file mode 100644 index 0000000..8079247 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/036.pseudo_arg @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1976: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo', `$*') +dnl @result{} +echo(arg1, arg2, arg3 , arg4) +dnl @result{}arg1,arg2,arg3 ,arg4 diff --git a/coreseek/m4-1.4.13/checks/037.pseudo_arg b/coreseek/m4-1.4.13/checks/037.pseudo_arg new file mode 100644 index 0000000..60dbf65 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/037.pseudo_arg @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:1987: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo', `$@') +dnl @result{} +echo(arg1, arg2, arg3 , arg4) +dnl @result{}arg1,arg2,arg3 ,arg4 diff --git a/coreseek/m4-1.4.13/checks/038.pseudo_arg b/coreseek/m4-1.4.13/checks/038.pseudo_arg new file mode 100644 index 0000000..a859e66 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/038.pseudo_arg @@ -0,0 +1,23 @@ +dnl @ ../doc/m4.texinfo:1997: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo1', `$*') +dnl @result{} +define(`echo2', `$@') +dnl @result{} +define(`foo', `This is macro `foo'.') +dnl @result{} +echo1(foo) +dnl @result{}This is macro This is macro foo.. +echo1(`foo') +dnl @result{}This is macro foo. +echo2(foo) +dnl @result{}This is macro foo. +echo2(`foo') +dnl @result{}foo diff --git a/coreseek/m4-1.4.13/checks/039.pseudo_arg b/coreseek/m4-1.4.13/checks/039.pseudo_arg new file mode 100644 index 0000000..9b34bd4 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/039.pseudo_arg @@ -0,0 +1,23 @@ +dnl @ ../doc/m4.texinfo:2019: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo1', `$*') +dnl @result{} +define(`echo2', `$@') +dnl @result{} +define(`foo', `bar') +dnl @result{} +echo1(#foo'foo +foo) +dnl @result{}#foo'foo +dnl @result{}bar +echo2(#foo'foo +foo) +dnl @result{}#foobar +dnl @result{}bar' diff --git a/coreseek/m4-1.4.13/checks/040.pseudo_arg b/coreseek/m4-1.4.13/checks/040.pseudo_arg new file mode 100644 index 0000000..3ad8a31 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/040.pseudo_arg @@ -0,0 +1,29 @@ +dnl @ ../doc/m4.texinfo:2041: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo', `$@')dnl +echo(echo(`01234567890123456789', `01234567890123456789') +echo(`98765432109876543210', `98765432109876543210')) +dnl @result{}01234567890123456789,01234567890123456789 +dnl @result{}98765432109876543210,98765432109876543210 +len((echo(`01234567890123456789', + `01234567890123456789')echo(`98765432109876543210', + `98765432109876543210'))) +dnl @result{}84 +indir(`echo', indir(`echo', `01234567890123456789', + `01234567890123456789') +indir(`echo', `98765432109876543210', `98765432109876543210')) +dnl @result{}01234567890123456789,01234567890123456789 +dnl @result{}98765432109876543210,98765432109876543210 +define(`argn', `$#')dnl +define(`echo1', `-$@-')define(`echo2', `,$@,')dnl +echo1(`1', `2', `3') argn(echo1(`1', `2', `3')) +dnl @result{}-1,2,3- 3 +echo2(`1', `2', `3') argn(echo2(`1', `2', `3')) +dnl @result{},1,2,3, 5 diff --git a/coreseek/m4-1.4.13/checks/041.pseudo_arg b/coreseek/m4-1.4.13/checks/041.pseudo_arg new file mode 100644 index 0000000..3b19fac --- /dev/null +++ b/coreseek/m4-1.4.13/checks/041.pseudo_arg @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:2069: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `$$$ hello $$$') +dnl @result{} +foo +dnl @result{}$$$ hello $$$ diff --git a/coreseek/m4-1.4.13/checks/042.pseudo_arg b/coreseek/m4-1.4.13/checks/042.pseudo_arg new file mode 100644 index 0000000..5702478 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/042.pseudo_arg @@ -0,0 +1,29 @@ +dnl @ ../doc/m4.texinfo:2085: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `no nested quote: $1') +dnl @result{} +foo(`arg') +dnl @result{}no nested quote: arg +define(`foo', `nested quote around $: `$'1') +dnl @result{} +foo(`arg') +dnl @result{}nested quote around $: $1 +define(`foo', `nested empty quote after $: $`'1') +dnl @result{} +foo(`arg') +dnl @result{}nested empty quote after $: $1 +define(`foo', `nested quote around next character: $`1'') +dnl @result{} +foo(`arg') +dnl @result{}nested quote around next character: $1 +define(`foo', `nested quote around both: `$1'') +dnl @result{} +foo(`arg') +dnl @result{}nested quote around both: arg diff --git a/coreseek/m4-1.4.13/checks/043.undefine b/coreseek/m4-1.4.13/checks/043.undefine new file mode 100644 index 0000000..9913173 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/043.undefine @@ -0,0 +1,23 @@ +dnl @ ../doc/m4.texinfo:2124: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +foo bar blah +dnl @result{}foo bar blah +define(`foo', `some')define(`bar', `other')define(`blah', `text') +dnl @result{} +foo bar blah +dnl @result{}some other text +undefine(`foo') +dnl @result{} +foo bar blah +dnl @result{}foo other text +undefine(`bar', `blah') +dnl @result{} +foo bar blah +dnl @result{}foo bar blah diff --git a/coreseek/m4-1.4.13/checks/044.undefine b/coreseek/m4-1.4.13/checks/044.undefine new file mode 100644 index 0000000..be6c80f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/044.undefine @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:2144: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`f', ``$0':$1') +dnl @result{} +f(f(f(undefine(`f')`hello world'))) +dnl @result{}f:f:f:hello world +f(`bye') +dnl @result{}f(bye) diff --git a/coreseek/m4-1.4.13/checks/045.defn b/coreseek/m4-1.4.13/checks/045.defn new file mode 100644 index 0000000..f482eae --- /dev/null +++ b/coreseek/m4-1.4.13/checks/045.defn @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:2187: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`zap', defn(`undefine')) +dnl @result{} +zap(`undefine') +dnl @result{} +undefine(`zap') +dnl @result{}undefine(zap) diff --git a/coreseek/m4-1.4.13/checks/046.defn b/coreseek/m4-1.4.13/checks/046.defn new file mode 100644 index 0000000..3385f4c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/046.defn @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:2204: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `This is `$0'') +dnl @result{} +define(`bar', defn(`foo')) +dnl @result{} +bar +dnl @result{}This is bar diff --git a/coreseek/m4-1.4.13/checks/047.defn b/coreseek/m4-1.4.13/checks/047.defn new file mode 100644 index 0000000..864255c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/047.defn @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:2216: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`string', `The macro dnl is very useful +') +dnl @result{} +string +dnl @result{}The macro +defn(`string') +dnl @result{}The macro dnl is very useful +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/048.defn b/coreseek/m4-1.4.13/checks/048.defn new file mode 100644 index 0000000..8e4ccda --- /dev/null +++ b/coreseek/m4-1.4.13/checks/048.defn @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:2235: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', a'a) +dnl @result{} +define(`a', `A') +dnl @result{} +define(`echo', `$@') +dnl @result{} +foo +dnl @result{}A'A +defn(`foo') +dnl @result{}aA' +echo(foo) +dnl @result{}AA' diff --git a/coreseek/m4-1.4.13/checks/049.defn b/coreseek/m4-1.4.13/checks/049.defn new file mode 100644 index 0000000..dd6654d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/049.defn @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:2259: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`l', `<[>')define(`r', `<]>') +dnl @result{} +changequote(`[', `]') +dnl @result{} +defn([l])defn([r]) +]) +dnl @result{}<[>]defn([r]) +dnl @result{}) +defn([l], [r]) +dnl @result{}<[>][<]> diff --git a/coreseek/m4-1.4.13/checks/050.defn b/coreseek/m4-1.4.13/checks/050.defn new file mode 100644 index 0000000..49b2ed0 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/050.defn @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:2278: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +defn(`defn') +dnl @result{} +define(defn(`divnum'), `cannot redefine a builtin token') +dnl @error{}m4:stdin:2: Warning: define: invalid macro name ignored +dnl @result{} +divnum +dnl @result{}0 +len(defn(`divnum')) +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/051.defn b/coreseek/m4-1.4.13/checks/051.defn new file mode 100644 index 0000000..c6580bb --- /dev/null +++ b/coreseek/m4-1.4.13/checks/051.defn @@ -0,0 +1,25 @@ +dnl @ ../doc/m4.texinfo:2295: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`a', `A')define(`AA', `b') +dnl @result{} +traceon(`defn', `define') +dnl @result{} +defn(`a', `divnum', `a') +dnl @error{}m4:stdin:3: Warning: cannot concatenate builtin `divnum' +dnl @error{}m4trace: -1- defn(`a', `divnum', `a') -> ``A'`A'' +dnl @result{}AA +define(`mydivnum', defn(`divnum', `divnum'))mydivnum +dnl @error{}m4:stdin:4: Warning: cannot concatenate builtin `divnum' +dnl @error{}m4:stdin:4: Warning: cannot concatenate builtin `divnum' +dnl @error{}m4trace: -2- defn(`divnum', `divnum') +dnl @error{}m4trace: -1- define(`mydivnum', `') +dnl @result{} +traceoff(`defn', `define') +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/052.pushdef b/coreseek/m4-1.4.13/checks/052.pushdef new file mode 100644 index 0000000..1411cd9 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/052.pushdef @@ -0,0 +1,33 @@ +dnl @ ../doc/m4.texinfo:2347: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `Expansion one.') +dnl @result{} +foo +dnl @result{}Expansion one. +pushdef(`foo', `Expansion two.') +dnl @result{} +foo +dnl @result{}Expansion two. +pushdef(`foo', `Expansion three.') +dnl @result{} +pushdef(`foo', `Expansion four.') +dnl @result{} +popdef(`foo') +dnl @result{} +foo +dnl @result{}Expansion three. +popdef(`foo', `foo') +dnl @result{} +foo +dnl @result{}Expansion one. +popdef(`foo') +dnl @result{} +foo +dnl @result{}foo diff --git a/coreseek/m4-1.4.13/checks/053.pushdef b/coreseek/m4-1.4.13/checks/053.pushdef new file mode 100644 index 0000000..2e1554e --- /dev/null +++ b/coreseek/m4-1.4.13/checks/053.pushdef @@ -0,0 +1,25 @@ +dnl @ ../doc/m4.texinfo:2384: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `Expansion one.') +dnl @result{} +foo +dnl @result{}Expansion one. +pushdef(`foo', `Expansion two.') +dnl @result{} +foo +dnl @result{}Expansion two. +define(`foo', `Second expansion two.') +dnl @result{} +foo +dnl @result{}Second expansion two. +undefine(`foo') +dnl @result{} +foo +dnl @result{}foo diff --git a/coreseek/m4-1.4.13/checks/054.indir b/coreseek/m4-1.4.13/checks/054.indir new file mode 100644 index 0000000..ce47d29 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/054.indir @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:2433: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`$$internal$macro', `Internal macro (name `$0')') +dnl @result{} +$$internal$macro +dnl @result{}$$internal$macro +indir(`$$internal$macro') +dnl @result{}Internal macro (name $$internal$macro) diff --git a/coreseek/m4-1.4.13/checks/055.indir b/coreseek/m4-1.4.13/checks/055.indir new file mode 100644 index 0000000..73206ed --- /dev/null +++ b/coreseek/m4-1.4.13/checks/055.indir @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:2453: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`f', `1') +dnl @result{} +f(define(`f', `2')) +dnl @result{}1 +indir(`f', define(`f', `3')) +dnl @result{}3 +indir(`f', undefine(`f')) +dnl @error{}m4:stdin:4: undefined macro `f' +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/056.indir b/coreseek/m4-1.4.13/checks/056.indir new file mode 100644 index 0000000..c04aaa9 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/056.indir @@ -0,0 +1,22 @@ +dnl @ ../doc/m4.texinfo:2471: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +indir(defn(`defn'), `divnum') +dnl @error{}m4:stdin:1: Warning: indir: invalid macro name ignored +dnl @result{} +indir(`define', defn(`defn'), `divnum') +dnl @error{}m4:stdin:2: Warning: define: invalid macro name ignored +dnl @result{} +indir(`define', `foo', defn(`divnum')) +dnl @result{} +foo +dnl @result{}0 +indir(`divert', defn(`foo')) +dnl @error{}m4:stdin:5: empty string treated as 0 in builtin `divert' +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/057.builtin b/coreseek/m4-1.4.13/checks/057.builtin new file mode 100644 index 0000000..50255b3 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/057.builtin @@ -0,0 +1,33 @@ +dnl @ ../doc/m4.texinfo:2509: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +pushdef(`define', `hidden') +dnl @result{} +undefine(`undefine') +dnl @result{} +define(`foo', `bar') +dnl @result{}hidden +foo +dnl @result{}foo +builtin(`define', `foo', defn(`divnum')) +dnl @result{} +foo +dnl @result{}0 +builtin(`define', `foo', `BAR') +dnl @result{} +foo +dnl @result{}BAR +undefine(`foo') +dnl @result{}undefine(foo) +foo +dnl @result{}BAR +builtin(`undefine', `foo') +dnl @result{} +foo +dnl @result{}foo diff --git a/coreseek/m4-1.4.13/checks/058.builtin b/coreseek/m4-1.4.13/checks/058.builtin new file mode 100644 index 0000000..36995ff --- /dev/null +++ b/coreseek/m4-1.4.13/checks/058.builtin @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:2542: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -P +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +m4_builtin(`divnum') +dnl @result{}0 +m4_builtin(`m4_divnum') +dnl @error{}m4:stdin:2: undefined builtin `m4_divnum' +dnl @result{} +m4_indir(`divnum') +dnl @error{}m4:stdin:3: undefined macro `divnum' +dnl @result{} +m4_indir(`m4_divnum') +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/059.builtin b/coreseek/m4-1.4.13/checks/059.builtin new file mode 100644 index 0000000..6c25e71 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/059.builtin @@ -0,0 +1,28 @@ +dnl @ ../doc/m4.texinfo:2560: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +builtin +dnl @result{}builtin +builtin() +dnl @error{}m4:stdin:2: undefined builtin `' +dnl @result{} +builtin(`builtin') +dnl @error{}m4:stdin:3: Warning: too few arguments to builtin `builtin' +dnl @result{} +builtin(`builtin',) +dnl @error{}m4:stdin:4: undefined builtin `' +dnl @result{} +builtin(`builtin', ``' +') +dnl @error{}m4:stdin:5: undefined builtin ``' +dnl @error{}' +dnl @result{} +indir(`index') +dnl @error{}m4:stdin:7: Warning: too few arguments to builtin `index' +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/060.builtin b/coreseek/m4-1.4.13/checks/060.builtin new file mode 100644 index 0000000..fc6b217 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/060.builtin @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:2587: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +builtin(`include', `foo')dnl +dnl @result{}bar diff --git a/coreseek/m4-1.4.13/checks/061.builtin b/coreseek/m4-1.4.13/checks/061.builtin new file mode 100644 index 0000000..809698f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/061.builtin @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:2594: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`s', `builtin(`shift', $@)')dnl +define(`loop', `ifelse(`$2', `', `-', `$1$2: $0(`$1', s(s($@)))')')dnl +loop(`1') +dnl @result{}- +loop(`1', `2') +dnl @result{}12: - +loop(`1', `2', `3') +dnl @result{}12: 13: - +loop(`1', `2', `3', `4') +dnl @result{}12: 13: 14: - +loop(`1', `2', `3', `4', `5') +dnl @result{}12: 13: 14: 15: - diff --git a/coreseek/m4-1.4.13/checks/062.ifdef b/coreseek/m4-1.4.13/checks/062.ifdef new file mode 100644 index 0000000..2a376b5 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/062.ifdef @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:2645: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`foo', ``foo' is defined', ``foo' is not defined') +dnl @result{}foo is not defined +define(`foo', `') +dnl @result{} +ifdef(`foo', ``foo' is defined', ``foo' is not defined') +dnl @result{}foo is defined +ifdef(`no_such_macro', `yes', `no', `extra argument') +dnl @error{}m4:stdin:4: Warning: excess arguments to builtin `ifdef' ignored +dnl @result{}no diff --git a/coreseek/m4-1.4.13/checks/063.ifelse b/coreseek/m4-1.4.13/checks/063.ifelse new file mode 100644 index 0000000..6ec2e5a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/063.ifelse @@ -0,0 +1,14 @@ +dnl @ ../doc/m4.texinfo:2693: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifelse(`some comments') +dnl @result{} +ifelse(`foo', `bar') +dnl @error{}m4:stdin:2: Warning: too few arguments to builtin `ifelse' +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/064.ifelse b/coreseek/m4-1.4.13/checks/064.ifelse new file mode 100644 index 0000000..b459ce9 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/064.ifelse @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:2703: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifelse(`foo', `bar', `true') +dnl @result{} +ifelse(`foo', `foo', `true') +dnl @result{}true +define(`foo', `bar') +dnl @result{} +ifelse(foo, `bar', `true', `false') +dnl @result{}true +ifelse(foo, `foo', `true', `false') +dnl @result{}false diff --git a/coreseek/m4-1.4.13/checks/065.ifelse b/coreseek/m4-1.4.13/checks/065.ifelse new file mode 100644 index 0000000..786898f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/065.ifelse @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:2723: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `ifelse(`$#', `0', ``$0'', `arguments:$#')') +dnl @result{} +foo +dnl @result{}foo +foo() +dnl @result{}arguments:1 +foo(`a', `b', `c') +dnl @result{}arguments:3 diff --git a/coreseek/m4-1.4.13/checks/066.ifelse b/coreseek/m4-1.4.13/checks/066.ifelse new file mode 100644 index 0000000..fcf760b --- /dev/null +++ b/coreseek/m4-1.4.13/checks/066.ifelse @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:2747: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifelse(`foo', `bar', `third', `gnu', `gnats') +dnl @error{}m4:stdin:1: Warning: excess arguments to builtin `ifelse' ignored +dnl @result{}gnu +ifelse(`foo', `bar', `third', `gnu', `gnats', `sixth') +dnl @result{} +ifelse(`foo', `bar', `third', `gnu', `gnats', `sixth', `seventh') +dnl @result{}seventh +ifelse(`foo', `bar', `3', `gnu', `gnats', `6', `7', `8') +dnl @error{}m4:stdin:4: Warning: excess arguments to builtin `ifelse' ignored +dnl @result{}7 diff --git a/coreseek/m4-1.4.13/checks/067.ifelse b/coreseek/m4-1.4.13/checks/067.ifelse new file mode 100644 index 0000000..c4009dc --- /dev/null +++ b/coreseek/m4-1.4.13/checks/067.ifelse @@ -0,0 +1,59 @@ +dnl @ ../doc/m4.texinfo:2765: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`e', `$@')define(`long', `01234567890123456789') +dnl @result{} +ifelse(long, `01234567890123456789', `yes', `no') +dnl @result{}yes +ifelse(`01234567890123456789', long, `yes', `no') +dnl @result{}yes +ifelse(long, `01234567890123456789-', `yes', `no') +dnl @result{}no +ifelse(`01234567890123456789-', long, `yes', `no') +dnl @result{}no +ifelse(e(long), `01234567890123456789', `yes', `no') +dnl @result{}yes +ifelse(`01234567890123456789', e(long), `yes', `no') +dnl @result{}yes +ifelse(e(long), `01234567890123456789-', `yes', `no') +dnl @result{}no +ifelse(`01234567890123456789-', e(long), `yes', `no') +dnl @result{}no +ifelse(-e(long), `-01234567890123456789', `yes', `no') +dnl @result{}yes +ifelse(-`01234567890123456789', -e(long), `yes', `no') +dnl @result{}yes +ifelse(-e(long), `-01234567890123456789-', `yes', `no') +dnl @result{}no +ifelse(`-01234567890123456789-', -e(long), `yes', `no') +dnl @result{}no +ifelse(-e(long)-, `-01234567890123456789-', `yes', `no') +dnl @result{}yes +ifelse(-`01234567890123456789-', -e(long)-, `yes', `no') +dnl @result{}yes +ifelse(-e(long)-, `-01234567890123456789', `yes', `no') +dnl @result{}no +ifelse(`-01234567890123456789', -e(long)-, `yes', `no') +dnl @result{}no +ifelse(`-'e(long), `-01234567890123456789', `yes', `no') +dnl @result{}yes +ifelse(-`01234567890123456789', `-'e(long), `yes', `no') +dnl @result{}yes +ifelse(`-'e(long), `-01234567890123456789-', `yes', `no') +dnl @result{}no +ifelse(`-01234567890123456789-', `-'e(long), `yes', `no') +dnl @result{}no +ifelse(`-'e(long)`-', `-01234567890123456789-', `yes', `no') +dnl @result{}yes +ifelse(-`01234567890123456789-', `-'e(long)`-', `yes', `no') +dnl @result{}yes +ifelse(`-'e(long)`-', `-01234567890123456789', `yes', `no') +dnl @result{}no +ifelse(`-01234567890123456789', `-'e(long)`-', `yes', `no') +dnl @result{}no diff --git a/coreseek/m4-1.4.13/checks/068.shift b/coreseek/m4-1.4.13/checks/068.shift new file mode 100644 index 0000000..a3a91fa --- /dev/null +++ b/coreseek/m4-1.4.13/checks/068.shift @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:2846: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +shift +dnl @result{}shift +shift(`bar') +dnl @result{} +shift(`foo', `bar', `baz') +dnl @result{}bar,baz diff --git a/coreseek/m4-1.4.13/checks/069.shift b/coreseek/m4-1.4.13/checks/069.shift new file mode 100644 index 0000000..733157e --- /dev/null +++ b/coreseek/m4-1.4.13/checks/069.shift @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:2865: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`reverse', `ifelse(`$#', `0', , `$#', `1', ``$1'', + `reverse(shift($@)), `$1'')') +dnl @result{} +reverse +dnl @result{} +reverse(`foo') +dnl @result{}foo +reverse(`foo', `bar', `gnats', `and gnus') +dnl @result{}and gnus, gnats, bar, foo diff --git a/coreseek/m4-1.4.13/checks/070.shift b/coreseek/m4-1.4.13/checks/070.shift new file mode 100644 index 0000000..5a1cd34 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/070.shift @@ -0,0 +1,42 @@ +dnl @ ../doc/m4.texinfo:2900: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`cond', +`ifelse(`$#', `1', `$1', + `ifelse($1, `$2', `$3', + `$0(shift(shift(shift($@))))')')')dnl +define(`side', `define(`counter', incr(counter))$1')dnl +define(`example1', +`define(`counter', `0')dnl +ifelse(side(`$1'), `yes', `one comparison: ', + side(`$1'), `no', `two comparisons: ', + side(`$1'), `maybe', `three comparisons: ', + `side(`default answer: ')')counter')dnl +define(`example2', +`define(`counter', `0')dnl +cond(`side(`$1')', `yes', `one comparison: ', + `side(`$1')', `no', `two comparisons: ', + `side(`$1')', `maybe', `three comparisons: ', + `side(`default answer: ')')counter')dnl +example1(`yes') +dnl @result{}one comparison: 3 +example1(`no') +dnl @result{}two comparisons: 3 +example1(`maybe') +dnl @result{}three comparisons: 3 +example1(`feeling rather indecisive today') +dnl @result{}default answer: 4 +example2(`yes') +dnl @result{}one comparison: 1 +example2(`no') +dnl @result{}two comparisons: 2 +example2(`maybe') +dnl @result{}three comparisons: 3 +example2(`feeling rather indecisive today') +dnl @result{}default answer: 4 diff --git a/coreseek/m4-1.4.13/checks/071.shift b/coreseek/m4-1.4.13/checks/071.shift new file mode 100644 index 0000000..762015a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/071.shift @@ -0,0 +1,30 @@ +dnl @ ../doc/m4.texinfo:2955: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`join.m4') +dnl @result{} +join,join(`-'),join(`-', `'),join(`-', `', `') +dnl @result{},,, +joinall,joinall(`-'),joinall(`-', `'),joinall(`-', `', `') +dnl @result{},,,- +join(`-', `1') +dnl @result{}1 +join(`-', `1', `2', `3') +dnl @result{}1-2-3 +join(`', `1', `2', `3') +dnl @result{}123 +join(`-', `', `1', `', `', `2', `') +dnl @result{}1-2 +joinall(`-', `', `1', `', `', `2', `') +dnl @result{}-1---2- +join(`,', `1', `2', `3') +dnl @result{}1,2,3 +define(`nargs', `$#')dnl +nargs(join(`,', `1', `2', `3')) +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/072.shift b/coreseek/m4-1.4.13/checks/072.shift new file mode 100644 index 0000000..278536f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/072.shift @@ -0,0 +1,25 @@ +dnl @ ../doc/m4.texinfo:2984: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`join.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# join(sep, args) - join each non-empty ARG into a single +dnl @result{}# string, with each element separated by SEP +dnl @result{}define(`join', +dnl @result{}`ifelse(`$#', `2', ``$2'', +dnl @result{} `ifelse(`$2', `', `', ``$2'_')$0(`$1', shift(shift($@)))')') +dnl @result{}define(`_join', +dnl @result{}`ifelse(`$#$2', `2', `', +dnl @result{} `ifelse(`$2', `', `', ``$1$2'')$0(`$1', shift(shift($@)))')') +dnl @result{}# joinall(sep, args) - join each ARG, including empty ones, +dnl @result{}# into a single string, with each element separated by SEP +dnl @result{}define(`joinall', ``$2'_$0(`$1', shift($@))') +dnl @result{}define(`_joinall', +dnl @result{}`ifelse(`$#', `2', `', ``$1$3'$0(`$1', shift(shift($@)))')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/073.shift b/coreseek/m4-1.4.13/checks/073.shift new file mode 100644 index 0000000..34143b4 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/073.shift @@ -0,0 +1,26 @@ +dnl @ ../doc/m4.texinfo:3062: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`quote.m4') +dnl @result{} +-quote-dquote-dquote_elt- +dnl @result{}---- +-quote()-dquote()-dquote_elt()- +dnl @result{}--`'-`'- +-quote(`1')-dquote(`1')-dquote_elt(`1')- +dnl @result{}-1-`1'-`1'- +-quote(`1', `2')-dquote(`1', `2')-dquote_elt(`1', `2')- +dnl @result{}-1,2-`1',`2'-`1',`2'- +define(`n', `$#')dnl +-n(quote(`1', `2'))-n(dquote(`1', `2'))-n(dquote_elt(`1', `2'))- +dnl @result{}-1-1-2- +dquote(dquote_elt(`1', `2')) +dnl @result{}``1'',``2'' +dquote_elt(dquote(`1', `2')) +dnl @result{}``1',`2'' diff --git a/coreseek/m4-1.4.13/checks/074.shift b/coreseek/m4-1.4.13/checks/074.shift new file mode 100644 index 0000000..855a815 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/074.shift @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:3095: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`quote.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# quote(args) - convert args to single-quoted string +dnl @result{}define(`quote', `ifelse(`$#', `0', `', ``$*'')') +dnl @result{}# dquote(args) - convert args to quoted list of quoted strings +dnl @result{}define(`dquote', ``$@'') +dnl @result{}# dquote_elt(args) - convert args to list of double-quoted strings +dnl @result{}define(`dquote_elt', `ifelse(`$#', `0', `', `$#', `1', ```$1''', +dnl @result{} ```$1'',$0(shift($@))')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/075.shift b/coreseek/m4-1.4.13/checks/075.shift new file mode 100644 index 0000000..f048f5e --- /dev/null +++ b/coreseek/m4-1.4.13/checks/075.shift @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:3128: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`argn', `ifelse(`$1', 1, ``$2'', + `argn(decr(`$1'), shift(shift($@)))')') +dnl @result{} +argn(`1', `a') +dnl @result{}a +define(`foo', `argn(`11', $@)') +dnl @result{} +foo(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k', `l') +dnl @result{}k diff --git a/coreseek/m4-1.4.13/checks/076.forloop b/coreseek/m4-1.4.13/checks/076.forloop new file mode 100644 index 0000000..1f3771d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/076.forloop @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:3160: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`forloop.m4') +dnl @result{} +forloop(`i', `1', `8', `i ') +dnl @result{}1 2 3 4 5 6 7 8 diff --git a/coreseek/m4-1.4.13/checks/077.forloop b/coreseek/m4-1.4.13/checks/077.forloop new file mode 100644 index 0000000..c7ec296 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/077.forloop @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:3171: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`forloop.m4') +dnl @result{} +forloop(`i', `1', `4', `forloop(`j', `1', `8', ` (i, j)') +') +dnl @result{} (1, 1) (1, 2) (1, 3) (1, 4) (1, 5) (1, 6) (1, 7) (1, 8) +dnl @result{} (2, 1) (2, 2) (2, 3) (2, 4) (2, 5) (2, 6) (2, 7) (2, 8) +dnl @result{} (3, 1) (3, 2) (3, 3) (3, 4) (3, 5) (3, 6) (3, 7) (3, 8) +dnl @result{} (4, 1) (4, 2) (4, 3) (4, 4) (4, 5) (4, 6) (4, 7) (4, 8) +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/078.forloop b/coreseek/m4-1.4.13/checks/078.forloop new file mode 100644 index 0000000..8367603 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/078.forloop @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:3199: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`forloop.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# forloop(var, from, to, stmt) - simple version +dnl @result{}define(`forloop', `pushdef(`$1', `$2')_forloop($@)popdef(`$1')') +dnl @result{}define(`_forloop', +dnl @result{} `$4`'ifelse($1, `$3', `', `define(`$1', incr($1))$0($@)')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/079.foreach b/coreseek/m4-1.4.13/checks/079.foreach new file mode 100644 index 0000000..fb67fb1 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/079.foreach @@ -0,0 +1,23 @@ +dnl @ ../doc/m4.texinfo:3246: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreach.m4') +dnl @result{} +foreach(`x', (foo, bar, foobar), `Word was: x +')dnl +dnl @result{}Word was: foo +dnl @result{}Word was: bar +dnl @result{}Word was: foobar +include(`foreachq.m4') +dnl @result{} +foreachq(`x', `foo, bar, foobar', `Word was: x +')dnl +dnl @result{}Word was: foo +dnl @result{}Word was: bar +dnl @result{}Word was: foobar diff --git a/coreseek/m4-1.4.13/checks/080.foreach b/coreseek/m4-1.4.13/checks/080.foreach new file mode 100644 index 0000000..d7477e8 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/080.foreach @@ -0,0 +1,27 @@ +dnl @ ../doc/m4.texinfo:3269: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreach.m4') +dnl @result{} +define(`_case', ` $1) + $2=" $1";; +')dnl +define(`_cat', `$1$2')dnl +case $`'1 in +dnl @result{}case $1 in +foreach(`x', `(`(`a', `vara')', `(`b', `varb')', `(`c', `varc')')', + `_cat(`_case', x)')dnl +dnl @result{} a) +dnl @result{} vara=" a";; +dnl @result{} b) +dnl @result{} varb=" b";; +dnl @result{} c) +dnl @result{} varc=" c";; +esac +dnl @result{}esac diff --git a/coreseek/m4-1.4.13/checks/081.foreach b/coreseek/m4-1.4.13/checks/081.foreach new file mode 100644 index 0000000..fbb33a3 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/081.foreach @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:3299: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`foreach.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# foreach(x, (item_1, item_2, ..., item_n), stmt) +dnl @result{}# parenthesized list, simple version +dnl @result{}define(`foreach', `pushdef(`$1')_foreach($@)popdef(`$1')') +dnl @result{}define(`_arg1', `$1') +dnl @result{}define(`_foreach', `ifelse(`$2', `()', `', +dnl @result{} `define(`$1', _arg1$2)$3`'$0(`$1', (shift$2), `$3')')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/082.foreach b/coreseek/m4-1.4.13/checks/082.foreach new file mode 100644 index 0000000..6de622a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/082.foreach @@ -0,0 +1,27 @@ +dnl @ ../doc/m4.texinfo:3326: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`a', `1')define(`b', `2')define(`c', `3') +dnl @result{} +include(`foreach.m4') +dnl @result{} +include(`foreachq.m4') +dnl @result{} +foreach(`x', `(``a'', ``(b'', ``c)'')', `x +') +dnl @result{}1 +dnl @result{}(2)1 +dnl @result{} +dnl @result{}, x +dnl @result{}) +foreachq(`x', ```a'', ``(b'', ``c)''', `x +')dnl +dnl @result{}a +dnl @result{}(b +dnl @result{}c) diff --git a/coreseek/m4-1.4.13/checks/083.foreach b/coreseek/m4-1.4.13/checks/083.foreach new file mode 100644 index 0000000..b373ae9 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/083.foreach @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:3351: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`foreachq.m4')dnl +dnl @result{}include(`quote.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# foreachq(x, `item_1, item_2, ..., item_n', stmt) +dnl @result{}# quoted list, simple version +dnl @result{}define(`foreachq', `pushdef(`$1')_foreachq($@)popdef(`$1')') +dnl @result{}define(`_arg1', `$1') +dnl @result{}define(`_foreachq', `ifelse(quote($2), `', `', +dnl @result{} `define(`$1', `_arg1($2)')$3`'$0(`$1', `shift($2)', `$3')')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/084.foreach b/coreseek/m4-1.4.13/checks/084.foreach new file mode 100644 index 0000000..7cd217d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/084.foreach @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:3378: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreach.m4')include(`foreachq.m4') +dnl @result{} +foreach(`name', `(`a', `b')', ` defn(`name')') +dnl @result{} a b +foreachq(`name', ``a', `b'', ` defn(`name')') +dnl @result{} _arg1(`a', `b') _arg1(shift(`a', `b')) diff --git a/coreseek/m4-1.4.13/checks/085.stacks b/coreseek/m4-1.4.13/checks/085.stacks new file mode 100644 index 0000000..6c5c5d6 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/085.stacks @@ -0,0 +1,24 @@ +dnl @ ../doc/m4.texinfo:3419: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`stack.m4') +dnl @result{} +pushdef(`a', `1')pushdef(`a', `2')pushdef(`a', `3') +dnl @result{} +define(`show', ``$1' +') +dnl @result{} +stack_foreach(`a', `show')dnl +dnl @result{}1 +dnl @result{}2 +dnl @result{}3 +stack_foreach_lifo(`a', `show')dnl +dnl @result{}3 +dnl @result{}2 +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/086.stacks b/coreseek/m4-1.4.13/checks/086.stacks new file mode 100644 index 0000000..1c45f54 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/086.stacks @@ -0,0 +1,26 @@ +dnl @ ../doc/m4.texinfo:3455: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`stack.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# stack_foreach(macro, action) +dnl @result{}# Invoke ACTION with a single argument of each definition +dnl @result{}# from the definition stack of MACRO, starting with the oldest. +dnl @result{}define(`stack_foreach', +dnl @result{}`_stack_reverse(`$1', `tmp-$1')'dnl +dnl @result{}`_stack_reverse(`tmp-$1', `$1', `$2(defn(`$1'))')') +dnl @result{}# stack_foreach_lifo(macro, action) +dnl @result{}# Invoke ACTION with a single argument of each definition +dnl @result{}# from the definition stack of MACRO, starting with the newest. +dnl @result{}define(`stack_foreach_lifo', +dnl @result{}`_stack_reverse(`$1', `tmp-$1', `$2(defn(`$1'))')'dnl +dnl @result{}`_stack_reverse(`tmp-$1', `$1')') +dnl @result{}define(`_stack_reverse', +dnl @result{}`ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0($@)')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/087.compositio b/coreseek/m4-1.4.13/checks/087.compositio new file mode 100644 index 0000000..0ad7cda --- /dev/null +++ b/coreseek/m4-1.4.13/checks/087.compositio @@ -0,0 +1,31 @@ +dnl @ ../doc/m4.texinfo:3518: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`define_blind', `ifelse(`$#', `0', ``$0'', +`_$0(`$1', `$2', `$'`#', `$'`0')')') +dnl @result{} +define(`_define_blind', `define(`$1', +`ifelse(`$3', `0', ``$4'', `$2')')') +dnl @result{} +define_blind +dnl @result{}define_blind +define_blind(`foo', `arguments were $*') +dnl @result{} +foo +dnl @result{}foo +foo(`bar') +dnl @result{}arguments were bar +define(`blah', defn(`foo')) +dnl @result{} +blah +dnl @result{}blah +blah(`a', `b') +dnl @result{}arguments were a,b +defn(`blah') +dnl @result{}ifelse(`$#', `0', ``$0'', `arguments were $*') diff --git a/coreseek/m4-1.4.13/checks/088.compositio b/coreseek/m4-1.4.13/checks/088.compositio new file mode 100644 index 0000000..41b9258 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/088.compositio @@ -0,0 +1,20 @@ +dnl @ ../doc/m4.texinfo:3565: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`curry.m4')include(`stack.m4') +dnl @result{} +define(`reverse', `ifelse(`$#', `0', , `$#', `1', ``$1'', + `reverse(shift($@)), `$1'')') +dnl @result{} +pushdef(`a', `1')pushdef(`a', `2')pushdef(`a', `3') +dnl @result{} +stack_foreach(`a', `:curry(`reverse', `4')') +dnl @result{}:1, 4:2, 4:3, 4 +curry(`curry', `reverse', `1')(`2')(`3') +dnl @result{}3, 2, 1 diff --git a/coreseek/m4-1.4.13/checks/089.compositio b/coreseek/m4-1.4.13/checks/089.compositio new file mode 100644 index 0000000..05b5045 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/089.compositio @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:3590: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`curry.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# curry(macro, args) +dnl @result{}# Expand to a macro call that takes one argument, then invoke +dnl @result{}# macro(args, extra). +dnl @result{}define(`curry', `$1(shift($@,)_$0') +dnl @result{}define(`_curry', ``$1')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/090.compositio b/coreseek/m4-1.4.13/checks/090.compositio new file mode 100644 index 0000000..ee206a4 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/090.compositio @@ -0,0 +1,27 @@ +dnl @ ../doc/m4.texinfo:3629: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`curry.m4')include(`stack.m4') +dnl @result{} +define(`rename', `copy($@)undefine(`$1')')dnl +define(`copy', `ifdef(`$2', `errprint(`$2 already defined +')m4exit(`1')', + `stack_foreach(`$1', `curry(`pushdef', `$2')')')')dnl +pushdef(`a', `1')pushdef(`a', defn(`divnum'))pushdef(`a', `2') +dnl @result{} +copy(`a', `b') +dnl @result{} +rename(`b', `c') +dnl @result{} +a b c +dnl @result{}2 b 2 +popdef(`a', `c')c a +dnl @result{} 0 +popdef(`a', `c')a c +dnl @result{}1 1 diff --git a/coreseek/m4-1.4.13/checks/091.dumpdef b/coreseek/m4-1.4.13/checks/091.dumpdef new file mode 100644 index 0000000..c698751 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/091.dumpdef @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:3687: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `Hello world.') +dnl @result{} +dumpdef(`foo') +dnl @error{}foo: `Hello world.' +dnl @result{} +dumpdef(`define') +dnl @error{}define: <define> +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/092.dumpdef b/coreseek/m4-1.4.13/checks/092.dumpdef new file mode 100644 index 0000000..0880fe8 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/092.dumpdef @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:3704: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +pushdef(`f', ``$0'1')pushdef(`f', ``$0'2') +dnl @result{} +f(popdef(`f')dumpdef(`f')) +dnl @error{}f: ``$0'1' +dnl @result{}f2 +f(popdef(`f')dumpdef(`f')) +dnl @error{}m4:stdin:3: undefined macro `f' +dnl @result{}f1 diff --git a/coreseek/m4-1.4.13/checks/093.trace b/coreseek/m4-1.4.13/checks/093.trace new file mode 100644 index 0000000..15fd283 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/093.trace @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:3747: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `Hello World.') +dnl @result{} +define(`echo', `$@') +dnl @result{} +traceon(`foo', `echo') +dnl @result{} +foo +dnl @error{}m4trace: -1- foo -> `Hello World.' +dnl @result{}Hello World. +echo(`gnus', `and gnats') +dnl @error{}m4trace: -1- echo(`gnus', `and gnats') -> ``gnus',`and gnats'' +dnl @result{}gnus,and gnats diff --git a/coreseek/m4-1.4.13/checks/094.trace b/coreseek/m4-1.4.13/checks/094.trace new file mode 100644 index 0000000..069d97c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/094.trace @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:3775: Origin of test +dnl @ expected status: 1 +dnl @ extra options: -dp -L3 -tifelse +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifelse(`one level') +dnl @error{}m4trace: -1- ifelse +dnl @result{} +ifelse(ifelse(ifelse(`three levels'))) +dnl @error{}m4trace: -3- ifelse +dnl @error{}m4trace: -2- ifelse +dnl @error{}m4trace: -1- ifelse +dnl @result{} +ifelse(ifelse(ifelse(ifelse(`four levels')))) +dnl @error{}m4:stdin:3: recursion limit of 3 exceeded, use -L<N> to change it diff --git a/coreseek/m4-1.4.13/checks/095.trace b/coreseek/m4-1.4.13/checks/095.trace new file mode 100644 index 0000000..a57f0d7 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/095.trace @@ -0,0 +1,38 @@ +dnl @ ../doc/m4.texinfo:3793: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +traceoff(`foo') +dnl @result{} +traceon(`foo') +dnl @result{} +foo +dnl @result{}foo +defn(`foo') +dnl @result{} +define(`foo', `bar') +dnl @result{} +foo +dnl @error{}m4trace: -1- foo -> `bar' +dnl @result{}bar +undefine(`foo') +dnl @result{} +ifdef(`foo', `yes', `no') +dnl @result{}no +indir(`foo') +dnl @error{}m4:stdin:9: undefined macro `foo' +dnl @result{} +define(`foo', `blah') +dnl @result{} +foo +dnl @error{}m4trace: -1- foo -> `blah' +dnl @result{}blah +traceoff +dnl @result{} +foo +dnl @result{}blah diff --git a/coreseek/m4-1.4.13/checks/096.trace b/coreseek/m4-1.4.13/checks/096.trace new file mode 100644 index 0000000..908048d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/096.trace @@ -0,0 +1,31 @@ +dnl @ ../doc/m4.texinfo:3829: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +traceon(`traceon') +dnl @result{} +traceon(`traceoff') +dnl @error{}m4trace: -1- traceon(`traceoff') +dnl @result{} +traceoff(`traceoff') +dnl @error{}m4trace: -1- traceoff(`traceoff') +dnl @result{} +traceoff(`traceon') +dnl @result{} +traceon(`eval', `m4_divnum') +dnl @result{} +define(`m4_eval', defn(`eval')) +dnl @result{} +define(`m4_divnum', defn(`divnum')) +dnl @result{} +eval(divnum) +dnl @error{}m4trace: -1- eval(`0') -> `0' +dnl @result{}0 +m4_eval(m4_divnum) +dnl @error{}m4trace: -2- m4_divnum -> `0' +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/097.trace b/coreseek/m4-1.4.13/checks/097.trace new file mode 100644 index 0000000..50930d0 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/097.trace @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:3863: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -de --trace ifelse +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`e', `ifelse(`$1', `$2', `ifelse(`$1', `$2', `e(shift($@))')')') +dnl @result{} +e(`1', `1') +dnl @error{}m4trace: -1- ifelse -> ifelse(`1', `1', `e(shift(`1',`1'))') +dnl @error{}m4trace: -1- ifelse -> e(shift(`1',`1')) +dnl @error{}m4trace: -1- ifelse +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/098.debug_leve b/coreseek/m4-1.4.13/checks/098.debug_leve new file mode 100644 index 0000000..50bedb6 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/098.debug_leve @@ -0,0 +1,28 @@ +dnl @ ../doc/m4.texinfo:3969: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -dp +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `FOO') +dnl @result{} +traceon(`foo') +dnl @result{} +debugmode() +dnl @result{} +foo +dnl @error{}m4trace: -1- foo -> `FOO' +dnl @result{}FOO +debugmode +dnl @result{} +foo +dnl @error{}m4trace: -1- foo +dnl @result{}FOO +debugmode(`+l') +dnl @result{} +foo +dnl @error{}m4trace:8: -1- foo +dnl @result{}FOO diff --git a/coreseek/m4-1.4.13/checks/099.debug_leve b/coreseek/m4-1.4.13/checks/099.debug_leve new file mode 100644 index 0000000..eec1bad --- /dev/null +++ b/coreseek/m4-1.4.13/checks/099.debug_leve @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:3998: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -l6 +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo', `$@')debugmode(`+t') +dnl @result{} +echo(`1', `long string') +dnl @error{}m4trace: -1- echo(`1', `long s...') -> ``1',`l...' +dnl @result{}1,long string +indir(`echo', defn(`changequote')) +dnl @error{}m4trace: -2- defn(`change...') +dnl @error{}m4trace: -1- indir(`echo', <changequote>) -> ``'' +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/100.debug_leve b/coreseek/m4-1.4.13/checks/100.debug_leve new file mode 100644 index 0000000..5cce310 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/100.debug_leve @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:4016: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -dip +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl @error{}m4debug: input read from stdin +include(`foo')dnl +dnl @error{}m4debug: path search for `foo' found `examples/foo' +dnl @error{}m4debug: input read from examples/foo +dnl @result{}bar +dnl @error{}m4debug: input reverted to stdin, line 1 +dnl @error{}m4debug: input exhausted diff --git a/coreseek/m4-1.4.13/checks/101.debug_outp b/coreseek/m4-1.4.13/checks/101.debug_outp new file mode 100644 index 0000000..58d4938 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/101.debug_outp @@ -0,0 +1,25 @@ +dnl @ ../doc/m4.texinfo:4051: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +traceon(`divnum') +dnl @result{} +divnum(`extra') +dnl @error{}m4:stdin:2: Warning: excess arguments to builtin `divnum' ignored +dnl @error{}m4trace: -1- divnum(`extra') -> `0' +dnl @result{}0 +debugfile() +dnl @result{} +divnum(`extra') +dnl @error{}m4:stdin:4: Warning: excess arguments to builtin `divnum' ignored +dnl @result{}0 +debugfile +dnl @result{} +divnum +dnl @error{}m4trace: -1- divnum -> `0' +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/102.dnl b/coreseek/m4-1.4.13/checks/102.dnl new file mode 100644 index 0000000..238d4b7 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/102.dnl @@ -0,0 +1,12 @@ +dnl @ ../doc/m4.texinfo:4104: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `Macro `foo'.')dnl A very simple macro, indeed. +foo +dnl @result{}Macro foo. diff --git a/coreseek/m4-1.4.13/checks/103.dnl b/coreseek/m4-1.4.13/checks/103.dnl new file mode 100644 index 0000000..a9e9542 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/103.dnl @@ -0,0 +1,14 @@ +dnl @ ../doc/m4.texinfo:4122: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl(`args are ignored, but side effects occur', +define(`foo', `like this')) while this text is ignored: undefine(`foo') +dnl @error{}m4:stdin:1: Warning: excess arguments to builtin `dnl' ignored +See how `foo' was defined, foo? +dnl @result{}See how foo was defined, like this? diff --git a/coreseek/m4-1.4.13/checks/104.dnl b/coreseek/m4-1.4.13/checks/104.dnl new file mode 100644 index 0000000..6ca940f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/104.dnl @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:4133: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +m4wrap(`m4wrap(`2 hi +')0 hi dnl 1 hi') +dnl @result{} +define(`hi', `HI') +dnl @result{} +dnl @error{}m4:stdin:1: Warning: end of file treated as newline +dnl @result{}0 HI 2 HI diff --git a/coreseek/m4-1.4.13/checks/105.changequot b/coreseek/m4-1.4.13/checks/105.changequot new file mode 100644 index 0000000..3b2466b --- /dev/null +++ b/coreseek/m4-1.4.13/checks/105.changequot @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:4164: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +changequote(`[', `]') +dnl @result{} +define([foo], [Macro [foo].]) +dnl @result{} +foo +dnl @result{}Macro foo. diff --git a/coreseek/m4-1.4.13/checks/106.changequot b/coreseek/m4-1.4.13/checks/106.changequot new file mode 100644 index 0000000..18d795a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/106.changequot @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:4179: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`a', `b') +dnl @result{} +a +dnl @result{}b +changequote(`', `') +dnl @result{} +a +dnl @result{}a diff --git a/coreseek/m4-1.4.13/checks/107.changequot b/coreseek/m4-1.4.13/checks/107.changequot new file mode 100644 index 0000000..fda93df --- /dev/null +++ b/coreseek/m4-1.4.13/checks/107.changequot @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:4194: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +changequote(`[[[', `]]]') +dnl @result{} +define([[[foo]]], [[[Macro [[[[[foo]]]]].]]]) +dnl @result{} +foo +dnl @result{}Macro [[foo]]. diff --git a/coreseek/m4-1.4.13/checks/108.changequot b/coreseek/m4-1.4.13/checks/108.changequot new file mode 100644 index 0000000..be43f31 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/108.changequot @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:4216: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `Macro `FOO'.') +dnl @result{} +changequote(`', `') +dnl @result{} +foo +dnl @result{}Macro `FOO'. +`foo' +dnl @result{}`Macro `FOO'.' +changequote(`,) +dnl @result{} +foo +dnl @result{}Macro FOO. diff --git a/coreseek/m4-1.4.13/checks/109.changequot b/coreseek/m4-1.4.13/checks/109.changequot new file mode 100644 index 0000000..5d89008 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/109.changequot @@ -0,0 +1,33 @@ +dnl @ ../doc/m4.texinfo:4249: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo', `$@') +dnl @result{} +define(`hi', `HI') +dnl @result{} +changequote(`q', `Q') +dnl @result{} +q hi Q hi +dnl @result{}q HI Q HI +echo(hi) +dnl @result{}qHIQ +changequote +dnl @result{} +changequote(`-', `EOF') +dnl @result{} +- hi EOF hi +dnl @result{} hi HI +changequote +dnl @result{} +changequote(`1', `2') +dnl @result{} +hi1hi2 +dnl @result{}hi1hi2 +hi 1hi2 +dnl @result{}HI hi diff --git a/coreseek/m4-1.4.13/checks/110.changequot b/coreseek/m4-1.4.13/checks/110.changequot new file mode 100644 index 0000000..b0af048 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/110.changequot @@ -0,0 +1,31 @@ +dnl @ ../doc/m4.texinfo:4282: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo', `$#:$@:') +dnl @result{} +define(`hi', `HI') +dnl @result{} +changequote(`(',`)') +dnl @result{} +echo(hi) +dnl @result{}0::hi +changequote +dnl @result{} +changequote(`((', `))') +dnl @result{} +echo(hi) +dnl @result{}1:HI: +echo((hi)) +dnl @result{}0::hi +changequote +dnl @result{} +changequote(`,', `)') +dnl @result{} +echo(hi,hi)bye) +dnl @result{}1:HIhibye: diff --git a/coreseek/m4-1.4.13/checks/111.changequot b/coreseek/m4-1.4.13/checks/111.changequot new file mode 100644 index 0000000..05bdfac --- /dev/null +++ b/coreseek/m4-1.4.13/checks/111.changequot @@ -0,0 +1,20 @@ +dnl @ ../doc/m4.texinfo:4321: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +changequote(`[', `]')dnl +define([a], [1, (b)])dnl +define([b], [2])dnl +define([quote], [[$*]])dnl +define([expand], [_$0(($1))])dnl +define([_expand], + [changequote([(], [)])$1changequote`'changequote(`[', `]')])dnl +expand([a, a, [a, a], [[a, a]]]) +dnl @result{}1, (2), 1, (2), a, a, [a, a] +quote(a, a, [a, a], [[a, a]]) +dnl @result{}1,(2),1,(2),a, a,[a, a] diff --git a/coreseek/m4-1.4.13/checks/112.changequot b/coreseek/m4-1.4.13/checks/112.changequot new file mode 100644 index 0000000..8bc51a1 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/112.changequot @@ -0,0 +1,27 @@ +dnl @ ../doc/m4.texinfo:4342: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`hi', `HI') +dnl @result{} +changequote(`""', `"') +dnl @result{} +""hi"""hi" +dnl @result{}hihi +""hi" ""hi" +dnl @result{}hi hi +""hi"" "hi" +dnl @result{}hi" "HI" +changequote +dnl @result{} +`hi`hi'hi' +dnl @result{}hi`hi'hi +changequote(`"', `"') +dnl @result{} +"hi"hi"hi" +dnl @result{}hiHIhi diff --git a/coreseek/m4-1.4.13/checks/113.changequot b/coreseek/m4-1.4.13/checks/113.changequot new file mode 100644 index 0000000..9e52e18 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/113.changequot @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:4365: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`aaaaaaaaaaaaaaaaaaaa', `A')define(`q', `"$@"') +dnl @result{} +changequote(`"', `"') +dnl @result{} +q(q("aaaaaaaaaaaaaaaaaaaa", "a")) +dnl @result{}A,a diff --git a/coreseek/m4-1.4.13/checks/114.changequot b/coreseek/m4-1.4.13/checks/114.changequot new file mode 100644 index 0000000..c226938 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/114.changequot @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:4378: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +`hello world' +dnl @result{}hello world +`dangling quote +dnl @error{}m4:stdin:2: ERROR: end of file in string diff --git a/coreseek/m4-1.4.13/checks/115.changequot b/coreseek/m4-1.4.13/checks/115.changequot new file mode 100644 index 0000000..e606892 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/115.changequot @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:4387: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifelse(`dangling quote +dnl @error{}m4:stdin:1: ERROR: end of file in string diff --git a/coreseek/m4-1.4.13/checks/116.changecom b/coreseek/m4-1.4.13/checks/116.changecom new file mode 100644 index 0000000..b824b80 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/116.changecom @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:4412: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`comment', `COMMENT') +dnl @result{} +# A normal comment +dnl @result{}# A normal comment +changecom(`/*', `*/') +dnl @result{} +# Not a comment anymore +dnl @result{}# Not a COMMENT anymore +But: /* this is a comment now */ while this is not a comment +dnl @result{}But: /* this is a comment now */ while this is not a COMMENT diff --git a/coreseek/m4-1.4.13/checks/117.changecom b/coreseek/m4-1.4.13/checks/117.changecom new file mode 100644 index 0000000..05daafc --- /dev/null +++ b/coreseek/m4-1.4.13/checks/117.changecom @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:4439: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`comment', `COMMENT') +dnl @result{} +changecom +dnl @result{} +# Not a comment anymore +dnl @result{}# Not a COMMENT anymore +changecom(`#', `') +dnl @result{} +# comment again +dnl @result{}# comment again diff --git a/coreseek/m4-1.4.13/checks/118.changecom b/coreseek/m4-1.4.13/checks/118.changecom new file mode 100644 index 0000000..6795fe5 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/118.changecom @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:4458: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`a', `b') +dnl @result{} +a +dnl @result{}b +changecom(`', `') +dnl @result{} +a +dnl @result{}a diff --git a/coreseek/m4-1.4.13/checks/119.changecom b/coreseek/m4-1.4.13/checks/119.changecom new file mode 100644 index 0000000..01a4a51 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/119.changecom @@ -0,0 +1,23 @@ +dnl @ ../doc/m4.texinfo:4481: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`hi', `HI') +dnl @result{} +define(`hi1hi2', `hello') +dnl @result{} +changecom(`q', `Q') +dnl @result{} +q hi Q hi +dnl @result{}q hi Q HI +changecom(`1', `2') +dnl @result{} +hi1hi2 +dnl @result{}hello +hi 1hi2 +dnl @result{}HI 1hi2 diff --git a/coreseek/m4-1.4.13/checks/120.changecom b/coreseek/m4-1.4.13/checks/120.changecom new file mode 100644 index 0000000..78cccfd --- /dev/null +++ b/coreseek/m4-1.4.13/checks/120.changecom @@ -0,0 +1,35 @@ +dnl @ ../doc/m4.texinfo:4504: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo', `$#:$*:$@:') +dnl @result{} +define(`hi', `HI') +dnl @result{} +changecom(`(',`)') +dnl @result{} +echo(hi) +dnl @result{}0:::(hi) +changecom +dnl @result{} +changecom(`((', `))') +dnl @result{} +echo(hi) +dnl @result{}1:HI:HI: +echo((hi)) +dnl @result{}0:::((hi)) +changecom(`,', `)') +dnl @result{} +echo(hi,hi)bye) +dnl @result{}1:HI,hi)bye:HI,hi)bye: +changecom +dnl @result{} +echo(hi,`,`'hi',hi) +dnl @result{}3:HI,,HI,HI:HI,,`'hi,HI: +echo(hi,`,`'hi',hi`'changecom(`,,', `hi')) +dnl @result{}3:HI,,`'hi,HI:HI,,`'hi,HI: diff --git a/coreseek/m4-1.4.13/checks/121.changecom b/coreseek/m4-1.4.13/checks/121.changecom new file mode 100644 index 0000000..479c332 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/121.changecom @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:4536: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +changecom(`/*', `*/') +dnl @result{} +/*dangling comment +dnl @error{}m4:stdin:2: ERROR: end of file in comment diff --git a/coreseek/m4-1.4.13/checks/122.changeword b/coreseek/m4-1.4.13/checks/122.changeword new file mode 100644 index 0000000..f7b2f52 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/122.changeword @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:4590: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +changeword(`[_a-zA-Z0-9]+') +dnl @result{} +define(`1', `0')1 +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/123.changeword b/coreseek/m4-1.4.13/checks/123.changeword new file mode 100644 index 0000000..672ae7c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/123.changeword @@ -0,0 +1,20 @@ +dnl @ ../doc/m4.texinfo:4603: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +define(`_indir', defn(`indir')) +dnl @result{} +changeword(`_[_a-zA-Z0-9]*') +dnl @result{} +esyscmd(`foo') +dnl @result{}esyscmd(foo) +_indir(`esyscmd', `echo hi') +dnl @result{}hi +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/124.changeword b/coreseek/m4-1.4.13/checks/124.changeword new file mode 100644 index 0000000..7a9385a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/124.changeword @@ -0,0 +1,41 @@ +dnl @ ../doc/m4.texinfo:4622: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +define(`foo +', `bar +') +dnl @result{} +dnl This example wants to recognize changeword, dnl, and `foo\n'. +dnl First, we check that our regexp will match. +regexp(`changeword', `[cd][a-z]*\|foo[ +]') +dnl @result{}0 +regexp(`foo +', `[cd][a-z]*\|foo[ +]') +dnl @result{}0 +regexp(`f', `[cd][a-z]*\|foo[ +]') +dnl @result{}-1 +foo +dnl @result{}foo +changeword(`[cd][a-z]*\|foo[ +]') +dnl @result{} +dnl Even though `foo\n' matches, we forgot to allow `f'. +foo +dnl @result{}foo +changeword(`[cd][a-z]*\|fo*[ +]?') +dnl @result{} +dnl Now we can call `foo\n'. +foo +dnl @result{}bar diff --git a/coreseek/m4-1.4.13/checks/125.changeword b/coreseek/m4-1.4.13/checks/125.changeword new file mode 100644 index 0000000..f7aaca7 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/125.changeword @@ -0,0 +1,39 @@ +dnl @ ../doc/m4.texinfo:4664: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +define(`bar +', defn(`dnl'))dnl +define(`baz', `dnl +include(`foo') ignored +dnl')dnl +changeword(`\([_a-zA-Z][_a-zA-Z0-9]*\|bar +\)') +dnl @result{} +__file__:__line__ +dnl @result{}stdin:10 +include(`foo') ignored +__file__:__line__ +dnl @result{}stdin:12 +baz ignored +__file__:__line__ +dnl @result{}stdin:14 +define(`bar +', defn(`__file__')) +dnl @result{} +include(`foo') +dnl @result{}examples/foo +define(`bar +', defn(`__line__')) +dnl @result{} +include(`foo') +dnl @result{}1 +__file__:__line__ +dnl @result{}stdin:21 diff --git a/coreseek/m4-1.4.13/checks/126.changeword b/coreseek/m4-1.4.13/checks/126.changeword new file mode 100644 index 0000000..68f5b36 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/126.changeword @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:4702: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics +')m4exit(`77')')dnl +changecom(`/*', `*/')dnl +define(`foo', `bar')dnl +changeword(`#\([_a-zA-Z0-9]*\)') +dnl @result{} +#esyscmd(`echo foo \#foo') +dnl @result{}foo bar +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/127.changeword b/coreseek/m4-1.4.13/checks/127.changeword new file mode 100644 index 0000000..92be66b --- /dev/null +++ b/coreseek/m4-1.4.13/checks/127.changeword @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:4739: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +define(`a', `errprint(`Hello')')dnl +changeword(`@\([_a-zA-Z0-9]*\)') +dnl @result{} +@a +dnl @result{}errprint(Hello) diff --git a/coreseek/m4-1.4.13/checks/128.m4wrap b/coreseek/m4-1.4.13/checks/128.m4wrap new file mode 100644 index 0000000..8f32e9c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/128.m4wrap @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:4792: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`cleanup', `This is the `cleanup' action. +') +dnl @result{} +m4wrap(`cleanup') +dnl @result{} +This is the first and last normal input line. +dnl @result{}This is the first and last normal input line. +dnl @result{}This is the cleanup action. diff --git a/coreseek/m4-1.4.13/checks/129.m4wrap b/coreseek/m4-1.4.13/checks/129.m4wrap new file mode 100644 index 0000000..1c5a579 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/129.m4wrap @@ -0,0 +1,26 @@ +dnl @ ../doc/m4.texinfo:4824: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`wrapfifo.m4')dnl +dnl @result{}dnl Redefine m4wrap to have FIFO semantics. +dnl @result{}define(`_m4wrap_level', `0')dnl +dnl @result{}define(`m4wrap', +dnl @result{}`ifdef(`m4wrap'_m4wrap_level, +dnl @result{} `define(`m4wrap'_m4wrap_level, +dnl @result{} defn(`m4wrap'_m4wrap_level)`$1')', +dnl @result{} `builtin(`m4wrap', `define(`_m4wrap_level', +dnl @result{} incr(_m4wrap_level))dnl +dnl @result{}m4wrap'_m4wrap_level)dnl +dnl @result{}define(`m4wrap'_m4wrap_level, `$1')')')dnl +include(`wrapfifo.m4') +dnl @result{} +m4wrap(`a`'m4wrap(`c +', `d')')m4wrap(`b') +dnl @result{} +dnl @result{}abc diff --git a/coreseek/m4-1.4.13/checks/130.m4wrap b/coreseek/m4-1.4.13/checks/130.m4wrap new file mode 100644 index 0000000..6cade0b --- /dev/null +++ b/coreseek/m4-1.4.13/checks/130.m4wrap @@ -0,0 +1,26 @@ +dnl @ ../doc/m4.texinfo:4854: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`wraplifo.m4')dnl +dnl @result{}dnl Redefine m4wrap to have LIFO semantics. +dnl @result{}define(`_m4wrap_level', `0')dnl +dnl @result{}define(`_m4wrap', defn(`m4wrap'))dnl +dnl @result{}define(`m4wrap', +dnl @result{}`ifdef(`m4wrap'_m4wrap_level, +dnl @result{} `define(`m4wrap'_m4wrap_level, +dnl @result{} `$1'defn(`m4wrap'_m4wrap_level))', +dnl @result{} `_m4wrap(`define(`_m4wrap_level', incr(_m4wrap_level))dnl +dnl @result{}m4wrap'_m4wrap_level)dnl +dnl @result{}define(`m4wrap'_m4wrap_level, `$1')')')dnl +include(`wraplifo.m4') +dnl @result{} +m4wrap(`a`'m4wrap(`c +', `d')')m4wrap(`b') +dnl @result{} +dnl @result{}bac diff --git a/coreseek/m4-1.4.13/checks/131.m4wrap b/coreseek/m4-1.4.13/checks/131.m4wrap new file mode 100644 index 0000000..18462f1 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/131.m4wrap @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:4879: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`f', `ifelse(`$1', `0', `Answer: 0!=1 +', eval(`$1>1'), `0', `Answer: $2$1=eval(`$2$1') +', `m4wrap(`f(decr(`$1'), `$2$1*')')')') +dnl @result{} +f(`10') +dnl @result{} +dnl @result{}Answer: 10*9*8*7*6*5*4*3*2*1=3628800 diff --git a/coreseek/m4-1.4.13/checks/132.m4wrap b/coreseek/m4-1.4.13/checks/132.m4wrap new file mode 100644 index 0000000..682329a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/132.m4wrap @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:4893: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`aa', `AA +') +dnl @result{} +m4wrap(`a')m4wrap(`a') +dnl @result{} +dnl @result{}AA diff --git a/coreseek/m4-1.4.13/checks/133.m4wrap b/coreseek/m4-1.4.13/checks/133.m4wrap new file mode 100644 index 0000000..9a97fec --- /dev/null +++ b/coreseek/m4-1.4.13/checks/133.m4wrap @@ -0,0 +1,12 @@ +dnl @ ../doc/m4.texinfo:4908: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +m4wrap(`m4wrap(`)')len(abc') +dnl @result{} +dnl @error{}m4:stdin:1: ERROR: end of file in argument list diff --git a/coreseek/m4-1.4.13/checks/134.include b/coreseek/m4-1.4.13/checks/134.include new file mode 100644 index 0000000..ed59ffa --- /dev/null +++ b/coreseek/m4-1.4.13/checks/134.include @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:4951: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`none') +dnl @error{}m4:stdin:1: cannot open `none': No such file or directory +dnl @result{} +include() +dnl @error{}m4:stdin:2: cannot open `': No such file or directory +dnl @result{} +sinclude(`none') +dnl @result{} +sinclude() +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/135.include b/coreseek/m4-1.4.13/checks/135.include new file mode 100644 index 0000000..1bc36c2 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/135.include @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:4984: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `FOO') +dnl @result{} +include(`incl.m4') +dnl @result{}Include file start +dnl @result{}FOO +dnl @result{}Include file end +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/136.include b/coreseek/m4-1.4.13/checks/136.include new file mode 100644 index 0000000..83cbd46 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/136.include @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:5001: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`bar', include(`incl.m4')) +dnl @result{} +This is `bar': >>bar<< +dnl @result{}This is bar: >>Include file start +dnl @result{}foo +dnl @result{}Include file end +dnl @result{}<< diff --git a/coreseek/m4-1.4.13/checks/137.include b/coreseek/m4-1.4.13/checks/137.include new file mode 100644 index 0000000..d670fd9 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/137.include @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:5030: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl @ expected error: ignore +include(`Makefile/') +dnl @error{}m4:stdin:1: cannot open `Makefile/': Not a directory +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/138.include b/coreseek/m4-1.4.13/checks/138.include new file mode 100644 index 0000000..45c684b --- /dev/null +++ b/coreseek/m4-1.4.13/checks/138.include @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:5043: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl @ expected error: ignore +include(`.') +dnl @error{}m4:stdin:1: cannot open `.': Is a directory +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/139.include b/coreseek/m4-1.4.13/checks/139.include new file mode 100644 index 0000000..88d37e5 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/139.include @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:5051: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +sinclude(`Makefile/') +dnl @result{} +sinclude(`.') +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/140.diversions b/coreseek/m4-1.4.13/checks/140.diversions new file mode 100644 index 0000000..0bd51c7 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/140.diversions @@ -0,0 +1,40 @@ +dnl @ ../doc/m4.texinfo:5109: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`-1')define(`f', `.') +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +divert`'dnl +len(f) +dnl @result{}1048576 +divert(`1') +f +divert(`2') +f +divert(`-1')undivert +divert(`1')bye +dnl @result{}bye diff --git a/coreseek/m4-1.4.13/checks/141.diversions b/coreseek/m4-1.4.13/checks/141.diversions new file mode 100644 index 0000000..4a6c9cd --- /dev/null +++ b/coreseek/m4-1.4.13/checks/141.diversions @@ -0,0 +1,36 @@ +dnl @ ../doc/m4.texinfo:5146: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`-1')define(`f', `.') +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +divert`'dnl +len(f) +dnl @result{}1048576 +divert(`1') +f +m4exit diff --git a/coreseek/m4-1.4.13/checks/142.diversions b/coreseek/m4-1.4.13/checks/142.diversions new file mode 100644 index 0000000..f00a493 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/142.diversions @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:5178: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics +')m4exit(`77')')dnl +changequote(`[', `]')dnl +syscmd([echo 'divert(1)hi +format(%1000000d, 1)' | ']__program__[' | sed -n 1p])dnl +dnl @result{}hi +sysval +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/143.diversions b/coreseek/m4-1.4.13/checks/143.diversions new file mode 100644 index 0000000..883f757 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/143.diversions @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:5194: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`forloop2.m4')dnl +divert(`1')format(`%10000s', `')dnl +forloop(`i', `1', `10000', + `divert(incr(i))undivert(i)')dnl +divert(`9001')format(`%1000000s', `')dnl +forloop(`i', `9001', `10000', + `divert(incr(i))undivert(i)')dnl +divert(`-1')undivert diff --git a/coreseek/m4-1.4.13/checks/144.divert b/coreseek/m4-1.4.13/checks/144.divert new file mode 100644 index 0000000..d7f431c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/144.divert @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:5241: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`1') +This text is diverted. +divert +dnl @result{} +This text is not diverted. +dnl @result{}This text is not diverted. +dnl @result{} +dnl @result{}This text is diverted. diff --git a/coreseek/m4-1.4.13/checks/145.divert b/coreseek/m4-1.4.13/checks/145.divert new file mode 100644 index 0000000..12bad2d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/145.divert @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:5257: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`text', `TEXT') +dnl @result{} +divert(`1')`diverted text.' +divert +dnl @result{} +m4wrap(`Wrapped text precedes ') +dnl @result{} +dnl @result{}Wrapped TEXT precedes diverted text. diff --git a/coreseek/m4-1.4.13/checks/146.divert b/coreseek/m4-1.4.13/checks/146.divert new file mode 100644 index 0000000..522af51 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/146.divert @@ -0,0 +1,14 @@ +dnl @ ../doc/m4.texinfo:5276: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`-1') +define(`foo', `Macro `foo'.') +define(`bar', `Macro `bar'.') +divert +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/147.divert b/coreseek/m4-1.4.13/checks/147.divert new file mode 100644 index 0000000..bced1f7 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/147.divert @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:5290: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(eval(`1<<28'))world +divert(`2')hello +dnl @result{}hello +dnl @result{}world diff --git a/coreseek/m4-1.4.13/checks/148.divert b/coreseek/m4-1.4.13/checks/148.divert new file mode 100644 index 0000000..2ebac88 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/148.divert @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:5305: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +We decided to divert the stream for irrigation. +dnl @result{}We decided to the stream for irrigation. +define(`divert', `ifelse(`$#', `0', ``$0'', `builtin(`$0', $@)')') +dnl @result{} +divert(`-1') +Ignored text. +divert(`0') +dnl @result{} +We decided to divert the stream for irrigation. +dnl @result{}We decided to divert the stream for irrigation. diff --git a/coreseek/m4-1.4.13/checks/149.undivert b/coreseek/m4-1.4.13/checks/149.undivert new file mode 100644 index 0000000..7ab4c5d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/149.undivert @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:5339: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`1') +This text is diverted. +divert +dnl @result{} +This text is not diverted. +dnl @result{}This text is not diverted. +undivert(`1') +dnl @result{} +dnl @result{}This text is diverted. +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/150.undivert b/coreseek/m4-1.4.13/checks/150.undivert new file mode 100644 index 0000000..49e6f3c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/150.undivert @@ -0,0 +1,27 @@ +dnl @ ../doc/m4.texinfo:5362: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`1')diverted text +divert +dnl @result{} +undivert() +dnl @result{} +undivert(`0') +dnl @result{} +undivert +dnl @result{}diverted text +dnl @result{} +divert(`1')more +divert(`2')undivert(`1')diverted text`'divert +dnl @result{} +undivert(`1') +dnl @result{} +undivert(`2') +dnl @result{}more +dnl @result{}diverted text diff --git a/coreseek/m4-1.4.13/checks/151.undivert b/coreseek/m4-1.4.13/checks/151.undivert new file mode 100644 index 0000000..deb1ac4 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/151.undivert @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:5386: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`1') +This text is diverted first. +divert(`0')undivert(`1')dnl +dnl @result{} +dnl @result{}This text is diverted first. +undivert(`1') +dnl @result{} +divert(`1') +This text is also diverted but not appended. +divert(`0')undivert(`1')dnl +dnl @result{} +dnl @result{}This text is also diverted but not appended. diff --git a/coreseek/m4-1.4.13/checks/152.undivert b/coreseek/m4-1.4.13/checks/152.undivert new file mode 100644 index 0000000..0c27a27 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/152.undivert @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:5405: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`1')one +divert(`2')two +divert(`3')three +divert(`2')undivert`'dnl +divert`'undivert`'dnl +dnl @result{}two +dnl @result{}one +dnl @result{}three diff --git a/coreseek/m4-1.4.13/checks/153.undivert b/coreseek/m4-1.4.13/checks/153.undivert new file mode 100644 index 0000000..fa52f8e --- /dev/null +++ b/coreseek/m4-1.4.13/checks/153.undivert @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:5434: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`bar', `BAR') +dnl @result{} +undivert(`foo') +dnl @result{}bar +dnl @result{} +include(`foo') +dnl @result{}BAR +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/154.undivert b/coreseek/m4-1.4.13/checks/154.undivert new file mode 100644 index 0000000..b981c3f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/154.undivert @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:5449: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`1')diversion one +divert(`2')undivert(`foo')dnl +divert(`3')diversion three +divert`'dnl +undivert(`1', `2', `foo', `3')dnl +dnl @result{}diversion one +dnl @result{}bar +dnl @result{}bar +dnl @result{}diversion three diff --git a/coreseek/m4-1.4.13/checks/155.divnum b/coreseek/m4-1.4.13/checks/155.divnum new file mode 100644 index 0000000..5e3a8f9 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/155.divnum @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:5471: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +Initial divnum +dnl @result{}Initial 0 +divert(`1') +Diversion one: divnum +divert(`2') +Diversion two: divnum +dnl @result{} +dnl @result{}Diversion one: 1 +dnl @result{} +dnl @result{}Diversion two: 2 diff --git a/coreseek/m4-1.4.13/checks/156.cleardiver b/coreseek/m4-1.4.13/checks/156.cleardiver new file mode 100644 index 0000000..32942af --- /dev/null +++ b/coreseek/m4-1.4.13/checks/156.cleardiver @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:5497: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(`1') +Diversion one: divnum +divert(`2') +Diversion two: divnum +divert(`-1') +undivert diff --git a/coreseek/m4-1.4.13/checks/157.cleardiver b/coreseek/m4-1.4.13/checks/157.cleardiver new file mode 100644 index 0000000..7723cea --- /dev/null +++ b/coreseek/m4-1.4.13/checks/157.cleardiver @@ -0,0 +1,12 @@ +dnl @ ../doc/m4.texinfo:5516: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`cleardivert', +`pushdef(`_n', divnum)divert(`-1')undivert($@)divert(_n)popdef(`_n')') +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/158.len b/coreseek/m4-1.4.13/checks/158.len new file mode 100644 index 0000000..589b459 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/158.len @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:5556: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +len() +dnl @result{}0 +len(`abcdef') +dnl @result{}6 diff --git a/coreseek/m4-1.4.13/checks/159.index_macr b/coreseek/m4-1.4.13/checks/159.index_macr new file mode 100644 index 0000000..b74c0cc --- /dev/null +++ b/coreseek/m4-1.4.13/checks/159.index_macr @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:5578: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +index(`gnus, gnats, and armadillos', `nat') +dnl @result{}7 +index(`gnus, gnats, and armadillos', `dag') +dnl @result{}-1 diff --git a/coreseek/m4-1.4.13/checks/160.index_macr b/coreseek/m4-1.4.13/checks/160.index_macr new file mode 100644 index 0000000..ccdf0e3 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/160.index_macr @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:5588: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +index(`abc') +dnl @error{}m4:stdin:1: Warning: too few arguments to builtin `index' +dnl @result{}0 +index(`abc', `') +dnl @result{}0 +index(`abc', `b') +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/161.regexp b/coreseek/m4-1.4.13/checks/161.regexp new file mode 100644 index 0000000..424d568 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/161.regexp @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:5641: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +regexp(`GNUs not Unix', `\<[a-z]\w+') +dnl @result{}5 +regexp(`GNUs not Unix', `\<Q\w*') +dnl @result{}-1 +regexp(`GNUs not Unix', `\w\(\w+\)$', `*** \& *** \1 ***') +dnl @result{}*** Unix *** nix *** +regexp(`GNUs not Unix', `\<Q\w*', `*** \& *** \1 ***') +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/162.regexp b/coreseek/m4-1.4.13/checks/162.regexp new file mode 100644 index 0000000..ba09911 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/162.regexp @@ -0,0 +1,20 @@ +dnl @ ../doc/m4.texinfo:5654: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +regexp(`abc', `\(b\)', `\\\10\a') +dnl @result{}\b0a +regexp(`abc', `b', `\1\') +dnl @error{}m4:stdin:2: Warning: sub-expression 1 not present +dnl @error{}m4:stdin:2: Warning: trailing \ ignored in replacement +dnl @result{} +regexp(`abc', `\(\(d\)?\)\(c\)', `\1\2\3\4\5\6') +dnl @error{}m4:stdin:3: Warning: sub-expression 4 not present +dnl @error{}m4:stdin:3: Warning: sub-expression 5 not present +dnl @error{}m4:stdin:3: Warning: sub-expression 6 not present +dnl @result{}c diff --git a/coreseek/m4-1.4.13/checks/163.regexp b/coreseek/m4-1.4.13/checks/163.regexp new file mode 100644 index 0000000..a8aa034 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/163.regexp @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:5671: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +regexp(`abc') +dnl @error{}m4:stdin:1: Warning: too few arguments to builtin `regexp' +dnl @result{}0 +regexp(`abc', `') +dnl @result{}0 +regexp(`abc', `', `\\def') +dnl @result{}\def diff --git a/coreseek/m4-1.4.13/checks/164.substr b/coreseek/m4-1.4.13/checks/164.substr new file mode 100644 index 0000000..c508d95 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/164.substr @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:5699: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +substr(`gnus, gnats, and armadillos', `6') +dnl @result{}gnats, and armadillos +substr(`gnus, gnats, and armadillos', `6', `5') +dnl @result{}gnats diff --git a/coreseek/m4-1.4.13/checks/165.substr b/coreseek/m4-1.4.13/checks/165.substr new file mode 100644 index 0000000..9675c64 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/165.substr @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:5708: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +substr(`abc') +dnl @error{}m4:stdin:1: Warning: too few arguments to builtin `substr' +dnl @result{}abc +substr(`abc',) +dnl @error{}m4:stdin:2: empty string treated as 0 in builtin `substr' +dnl @result{}abc diff --git a/coreseek/m4-1.4.13/checks/166.translit b/coreseek/m4-1.4.13/checks/166.translit new file mode 100644 index 0000000..a2f0f95 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/166.translit @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:5753: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +translit(`GNUs not Unix', `A-Z') +dnl @result{}s not nix +translit(`GNUs not Unix', `a-z', `A-Z') +dnl @result{}GNUS NOT UNIX +translit(`GNUs not Unix', `A-Z', `z-a') +dnl @result{}tmfs not fnix +translit(`+,-12345', `+--1-5', `<;>a-c-a') +dnl @result{}<;>abcba +translit(`abcdef', `aabdef', `bcged') +dnl @result{}bgced diff --git a/coreseek/m4-1.4.13/checks/167.translit b/coreseek/m4-1.4.13/checks/167.translit new file mode 100644 index 0000000..ef8efcf --- /dev/null +++ b/coreseek/m4-1.4.13/checks/167.translit @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:5780: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +translit(`abc~', `~-') +dnl @result{}abc diff --git a/coreseek/m4-1.4.13/checks/168.translit b/coreseek/m4-1.4.13/checks/168.translit new file mode 100644 index 0000000..8ad6501 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/168.translit @@ -0,0 +1,31 @@ +dnl @ ../doc/m4.texinfo:5787: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +translit(`abcdeabcde', `a') +dnl @result{}bcdebcde +translit(`abcdeabcde', `ab') +dnl @result{}cdecde +translit(`abcdeabcde', `a', `f') +dnl @result{}fbcdefbcde +translit(`abcdeabcde', `a', `f') +dnl @result{}fbcdefbcde +translit(`abcdeabcde', `a', `fg') +dnl @result{}fbcdefbcde +translit(`abcdeabcde', `ab', `f') +dnl @result{}fcdefcde +translit(`abcdeabcde', `ab', `fg') +dnl @result{}fgcdefgcde +translit(`abcdeabcde', `ab', `ba') +dnl @result{}bacdebacde +translit(`abcdeabcde', `e', `f') +dnl @result{}abcdfabcdf +translit(`abc', `', `cde') +dnl @result{}abc +translit(`', `a', `bc') +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/169.translit b/coreseek/m4-1.4.13/checks/169.translit new file mode 100644 index 0000000..609578a --- /dev/null +++ b/coreseek/m4-1.4.13/checks/169.translit @@ -0,0 +1,12 @@ +dnl @ ../doc/m4.texinfo:5815: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +translit(`abc') +dnl @error{}m4:stdin:1: Warning: too few arguments to builtin `translit' +dnl @result{}abc diff --git a/coreseek/m4-1.4.13/checks/170.patsubst b/coreseek/m4-1.4.13/checks/170.patsubst new file mode 100644 index 0000000..732ff77 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/170.patsubst @@ -0,0 +1,22 @@ +dnl @ ../doc/m4.texinfo:5859: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +patsubst(`GNUs not Unix', `^', `OBS: ') +dnl @result{}OBS: GNUs not Unix +patsubst(`GNUs not Unix', `\<', `OBS: ') +dnl @result{}OBS: GNUs OBS: not OBS: Unix +patsubst(`GNUs not Unix', `\w*', `(\&)') +dnl @result{}(GNUs)() (not)() (Unix)() +patsubst(`GNUs not Unix', `\w+', `(\&)') +dnl @result{}(GNUs) (not) (Unix) +patsubst(`GNUs not Unix', `[A-Z][a-z]+') +dnl @result{}GN not +patsubst(`GNUs not Unix', `not', `NOT\') +dnl @error{}m4:stdin:6: Warning: trailing \ ignored in replacement +dnl @result{}GNUs NOT Unix diff --git a/coreseek/m4-1.4.13/checks/171.patsubst b/coreseek/m4-1.4.13/checks/171.patsubst new file mode 100644 index 0000000..8ccd5c1 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/171.patsubst @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:5892: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`capitalize.m4') +dnl @result{} +upcase(`GNUs not Unix') +dnl @result{}GNUS NOT UNIX +downcase(`GNUs not Unix') +dnl @result{}gnus not unix +capitalize(`GNUs not Unix') +dnl @result{}Gnus Not Unix diff --git a/coreseek/m4-1.4.13/checks/172.patsubst b/coreseek/m4-1.4.13/checks/172.patsubst new file mode 100644 index 0000000..a5bb993 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/172.patsubst @@ -0,0 +1,22 @@ +dnl @ ../doc/m4.texinfo:5912: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`capitalize.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# upcase(text) +dnl @result{}# downcase(text) +dnl @result{}# capitalize(text) +dnl @result{}# change case of text, simple version +dnl @result{}define(`upcase', `translit(`$*', `a-z', `A-Z')') +dnl @result{}define(`downcase', `translit(`$*', `A-Z', `a-z')') +dnl @result{}define(`_capitalize', +dnl @result{} `regexp(`$1', `^\(\w\)\(\w*\)', +dnl @result{} `upcase(`\1')`'downcase(`\2')')') +dnl @result{}define(`capitalize', `patsubst(`$1', `\w+', `_$0(`\&')')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/173.patsubst b/coreseek/m4-1.4.13/checks/173.patsubst new file mode 100644 index 0000000..1e81a03 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/173.patsubst @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:5933: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`patreg', +`patsubst($@) +regexp($@)')dnl +patreg(`bar foo baz Foo', `foo\|Foo', `FOO') +dnl @result{}bar FOO baz FOO +dnl @result{}FOO +patreg(`aba abb 121', `\(.\)\(.\)\1', `\2\1\2') +dnl @result{}bab abb 212 +dnl @result{}bab diff --git a/coreseek/m4-1.4.13/checks/174.patsubst b/coreseek/m4-1.4.13/checks/174.patsubst new file mode 100644 index 0000000..4621dfd --- /dev/null +++ b/coreseek/m4-1.4.13/checks/174.patsubst @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:5948: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +patsubst(`abc') +dnl @error{}m4:stdin:1: Warning: too few arguments to builtin `patsubst' +dnl @result{}abc +patsubst(`abc', `') +dnl @result{}abc +patsubst(`abc', `', `\\-') +dnl @result{}\-a\-b\-c\- diff --git a/coreseek/m4-1.4.13/checks/175.format b/coreseek/m4-1.4.13/checks/175.format new file mode 100644 index 0000000..0f5d285 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/175.format @@ -0,0 +1,29 @@ +dnl @ ../doc/m4.texinfo:5979: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `The brown fox jumped over the lazy dog') +dnl @result{} +format(`The string "%s" uses %d characters', foo, len(foo)) +dnl @result{}The string "The brown fox jumped over the lazy dog" uses 38 characters +format(`%*.*d', `-1', `-1', `1') +dnl @result{}1 +format(`%.0f', `56789.9876') +dnl @result{}56790 +len(format(`%-*X', `5000', `1')) +dnl @result{}5000 +ifelse(format(`%010F', `infinity'), ` INF', `success', + format(`%010F', `infinity'), ` INFINITY', `success', + format(`%010F', `infinity')) +dnl @result{}success +ifelse(format(`%.1A', `1.999'), `0X1.0P+1', `success', + format(`%.1A', `1.999'), `0X2.0P+0', `success', + format(`%.1A', `1.999')) +dnl @result{}success +format(`%g', `0xa.P+1') +dnl @result{}20 diff --git a/coreseek/m4-1.4.13/checks/176.format b/coreseek/m4-1.4.13/checks/176.format new file mode 100644 index 0000000..35ae7bc --- /dev/null +++ b/coreseek/m4-1.4.13/checks/176.format @@ -0,0 +1,24 @@ +dnl @ ../doc/m4.texinfo:6006: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`forloop.m4') +dnl @result{} +forloop(`i', `1', `10', `format(`%6d squared is %10d +', i, eval(i**2))') +dnl @result{} 1 squared is 1 +dnl @result{} 2 squared is 4 +dnl @result{} 3 squared is 9 +dnl @result{} 4 squared is 16 +dnl @result{} 5 squared is 25 +dnl @result{} 6 squared is 36 +dnl @result{} 7 squared is 49 +dnl @result{} 8 squared is 64 +dnl @result{} 9 squared is 81 +dnl @result{} 10 squared is 100 +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/177.format b/coreseek/m4-1.4.13/checks/177.format new file mode 100644 index 0000000..5934f5d --- /dev/null +++ b/coreseek/m4-1.4.13/checks/177.format @@ -0,0 +1,12 @@ +dnl @ ../doc/m4.texinfo:6047: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +format(`%p', `0') +dnl @error{}m4:stdin:1: Warning: unrecognized specifier in `%p' +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/178.incr b/coreseek/m4-1.4.13/checks/178.incr new file mode 100644 index 0000000..7cb4016 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/178.incr @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:6085: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +incr(`4') +dnl @result{}5 +decr(`7') +dnl @result{}6 +incr() +dnl @error{}m4:stdin:3: empty string treated as 0 in builtin `incr' +dnl @result{}1 +decr() +dnl @error{}m4:stdin:4: empty string treated as 0 in builtin `decr' +dnl @result{}-1 diff --git a/coreseek/m4-1.4.13/checks/179.eval b/coreseek/m4-1.4.13/checks/179.eval new file mode 100644 index 0000000..984bc48 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/179.eval @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:6162: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +eval(`2 = 2') +dnl @error{}m4:stdin:1: Warning: recommend ==, not =, for equality operator +dnl @result{}1 +eval(`++0') +dnl @error{}m4:stdin:2: invalid operator in eval: ++0 +dnl @result{} +eval(`0 |= 1') +dnl @error{}m4:stdin:3: invalid operator in eval: 0 |= 1 +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/180.eval b/coreseek/m4-1.4.13/checks/180.eval new file mode 100644 index 0000000..7ee63d0 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/180.eval @@ -0,0 +1,33 @@ +dnl @ ../doc/m4.texinfo:6195: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +eval(`1 == 2 > 0') +dnl @result{}1 +eval(`(1 == 2) > 0') +dnl @result{}0 +eval(`! 0 * 2') +dnl @result{}2 +eval(`! (0 * 2)') +dnl @result{}1 +eval(`1 | 1 ^ 1') +dnl @result{}1 +eval(`(1 | 1) ^ 1') +dnl @result{}0 +eval(`+ + - ~ ! ~ 0') +dnl @result{}1 +eval(`2 || 1 / 0') +dnl @result{}1 +eval(`0 || 1 / 0') +dnl @error{}m4:stdin:9: divide by zero in eval: 0 || 1 / 0 +dnl @result{} +eval(`0 && 1 % 0') +dnl @result{}0 +eval(`2 && 1 % 0') +dnl @error{}m4:stdin:11: modulo by zero in eval: 2 && 1 % 0 +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/181.eval b/coreseek/m4-1.4.13/checks/181.eval new file mode 100644 index 0000000..90bcd84 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/181.eval @@ -0,0 +1,23 @@ +dnl @ ../doc/m4.texinfo:6228: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +eval(`2 ** 3 ** 2') +dnl @result{}512 +eval(`(2 ** 3) ** 2') +dnl @result{}64 +eval(`0 ** 1') +dnl @result{}0 +eval(`2 ** 0') +dnl @result{}1 +eval(`0 ** 0') +dnl @result{} +dnl @error{}m4:stdin:5: divide by zero in eval: 0 ** 0 +eval(`4 ** -2') +dnl @error{}m4:stdin:6: negative exponent in eval: 4 ** -2 +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/182.eval b/coreseek/m4-1.4.13/checks/182.eval new file mode 100644 index 0000000..9780da9 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/182.eval @@ -0,0 +1,34 @@ +dnl @ ../doc/m4.texinfo:6264: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +eval(`-3 * 5') +dnl @result{}-15 +eval(`-99 / 10') +dnl @result{}-9 +eval(`-99 % 10') +dnl @result{}-9 +eval(`99 % -10') +dnl @result{}9 +eval(index(`Hello world', `llo') >= 0) +dnl @result{}1 +eval(`0r1:0111 + 0b100 + 0r3:12') +dnl @result{}12 +define(`square', `eval(`($1) ** 2')') +dnl @result{} +square(`9') +dnl @result{}81 +square(square(`5')` + 1') +dnl @result{}676 +define(`foo', `666') +dnl @result{} +eval(`foo / 6') +dnl @error{}m4:stdin:11: bad expression in eval: foo / 6 +dnl @result{} +eval(foo / 6) +dnl @result{}111 diff --git a/coreseek/m4-1.4.13/checks/183.eval b/coreseek/m4-1.4.13/checks/183.eval new file mode 100644 index 0000000..1ba31e4 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/183.eval @@ -0,0 +1,27 @@ +dnl @ ../doc/m4.texinfo:6303: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`max_int', eval(`0x7fffffff')) +dnl @result{} +define(`min_int', incr(max_int)) +dnl @result{} +eval(min_int` < 0') +dnl @result{}1 +eval(max_int` > 0') +dnl @result{}1 +ifelse(eval(min_int` / -1'), min_int, `overflow occurred') +dnl @result{}overflow occurred +min_int +dnl @result{}-2147483648 +eval(`0x80000000 % -1') +dnl @result{}0 +eval(`-4 >> 1') +dnl @result{}-2 +eval(`-4 >> 33') +dnl @result{}-2 diff --git a/coreseek/m4-1.4.13/checks/184.eval b/coreseek/m4-1.4.13/checks/184.eval new file mode 100644 index 0000000..3b19996 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/184.eval @@ -0,0 +1,34 @@ +dnl @ ../doc/m4.texinfo:6336: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +eval(`666', `10') +dnl @result{}666 +eval(`666', `11') +dnl @result{}556 +eval(`666', `6') +dnl @result{}3030 +eval(`666', `6', `10') +dnl @result{}0000003030 +eval(`-666', `6', `10') +dnl @result{}-0000003030 +eval(`10', `', `0') +dnl @result{}10 +`0r1:'eval(`10', `1', `11') +dnl @result{}0r1:01111111111 +eval(`10', `16') +dnl @result{}a +eval(`1', `37') +dnl @error{}m4:stdin:9: radix 37 in builtin `eval' out of range +dnl @result{} +eval(`1', , `-1') +dnl @error{}m4:stdin:10: negative width to builtin `eval' +dnl @result{} +eval() +dnl @error{}m4:stdin:11: empty string treated as 0 in builtin `eval' +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/185.platform_m b/coreseek/m4-1.4.13/checks/185.platform_m new file mode 100644 index 0000000..8600a14 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/185.platform_m @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:6417: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +__gnu__ +dnl @result{} +__gnu__(`ignored') +dnl @result{} +Extensions are ifdef(`__gnu__', `active', `inactive') +dnl @result{}Extensions are active diff --git a/coreseek/m4-1.4.13/checks/186.platform_m b/coreseek/m4-1.4.13/checks/186.platform_m new file mode 100644 index 0000000..3d2f390 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/186.platform_m @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:6428: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -G +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +__gnu__ +dnl @result{}__gnu__ +__gnu__(`ignored') +dnl @result{}__gnu__(ignored) +Extensions are ifdef(`__gnu__', `active', `inactive') +dnl @result{}Extensions are inactive diff --git a/coreseek/m4-1.4.13/checks/187.platform_m b/coreseek/m4-1.4.13/checks/187.platform_m new file mode 100644 index 0000000..23d14e8 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/187.platform_m @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:6451: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`provided', `0') +dnl @result{} +ifdef(`__unix__', `define(`provided', incr(provided))') +dnl @result{} +ifdef(`__windows__', `define(`provided', incr(provided))') +dnl @result{} +ifdef(`__os2__', `define(`provided', incr(provided))') +dnl @result{} +provided +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/188.syscmd b/coreseek/m4-1.4.13/checks/188.syscmd new file mode 100644 index 0000000..9c1de09 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/188.syscmd @@ -0,0 +1,14 @@ +dnl @ ../doc/m4.texinfo:6493: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `FOO') +dnl @result{} +syscmd(`echo foo') +dnl @result{}foo +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/189.syscmd b/coreseek/m4-1.4.13/checks/189.syscmd new file mode 100644 index 0000000..5ba51d4 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/189.syscmd @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:6522: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +m4wrap(`syscmd(`cat')') +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/190.esyscmd b/coreseek/m4-1.4.13/checks/190.esyscmd new file mode 100644 index 0000000..f9a2af6 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/190.esyscmd @@ -0,0 +1,14 @@ +dnl @ ../doc/m4.texinfo:6570: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `FOO') +dnl @result{} +esyscmd(`echo foo') +dnl @result{}FOO +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/191.sysval b/coreseek/m4-1.4.13/checks/191.sysval new file mode 100644 index 0000000..1035b3e --- /dev/null +++ b/coreseek/m4-1.4.13/checks/191.sysval @@ -0,0 +1,35 @@ +dnl @ ../doc/m4.texinfo:6600: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +sysval +dnl @result{}0 +syscmd(`false') +dnl @result{} +ifelse(sysval, `0', `zero', `non-zero') +dnl @result{}non-zero +syscmd(`exit 2') +dnl @result{} +sysval +dnl @result{}2 +syscmd(`true') +dnl @result{} +sysval +dnl @result{}0 +esyscmd(`false') +dnl @result{} +ifelse(sysval, `0', `zero', `non-zero') +dnl @result{}non-zero +esyscmd(`exit 2') +dnl @result{} +sysval +dnl @result{}2 +esyscmd(`true') +dnl @result{} +sysval +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/192.sysval b/coreseek/m4-1.4.13/checks/192.sysval new file mode 100644 index 0000000..2f9c0bf --- /dev/null +++ b/coreseek/m4-1.4.13/checks/192.sysval @@ -0,0 +1,26 @@ +dnl @ ../doc/m4.texinfo:6650: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl This test assumes kill is a shell builtin, and that signals are +dnl recognizable. +ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics +')m4exit(`77')')dnl +syscmd(`kill -9 $$') +dnl @result{} +sysval +dnl @result{}2304 +syscmd() +dnl @result{} +sysval +dnl @result{}0 +esyscmd(`kill -9 $$') +dnl @result{} +sysval +dnl @result{}2304 diff --git a/coreseek/m4-1.4.13/checks/193.mkstemp b/coreseek/m4-1.4.13/checks/193.mkstemp new file mode 100644 index 0000000..bcd8ead --- /dev/null +++ b/coreseek/m4-1.4.13/checks/193.mkstemp @@ -0,0 +1,32 @@ +dnl @ ../doc/m4.texinfo:6744: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `errprint(`oops')') +dnl @result{} +syscmd(`rm -f foo-??????')sysval +dnl @result{}0 +define(`file1', maketemp(`foo-XXXXXX'))dnl +ifelse(esyscmd(`echo \` foo-?????? \''), ` foo-?????? ', + `no file', `created') +dnl @result{}created +define(`file2', maketemp(`foo-XX'))dnl +define(`file3', mkstemp(`foo-XXXXXX'))dnl +ifelse(len(defn(`file1')), len(defn(`file2')), + `same length', `different') +dnl @result{}same length +ifelse(defn(`file1'), defn(`file2'), `same', `different file') +dnl @result{}different file +ifelse(defn(`file2'), defn(`file3'), `same', `different file') +dnl @result{}different file +ifelse(defn(`file1'), defn(`file3'), `same', `different file') +dnl @result{}different file +syscmd(`rm 'defn(`file1') defn(`file2') defn(`file3')) +dnl @result{} +sysval +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/194.mkstemp b/coreseek/m4-1.4.13/checks/194.mkstemp new file mode 100644 index 0000000..161f658 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/194.mkstemp @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:6775: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +syscmd(`rm -rf foodir')sysval +dnl @result{}0 +syscmd(`mkdir foodir')sysval +dnl @result{}0 +len(mkstemp(`foodir/fooXXXXX')) +dnl @result{}16 +syscmd(`rm -r foodir')sysval +dnl @result{}0 diff --git a/coreseek/m4-1.4.13/checks/195.mkstemp b/coreseek/m4-1.4.13/checks/195.mkstemp new file mode 100644 index 0000000..afa3ebf --- /dev/null +++ b/coreseek/m4-1.4.13/checks/195.mkstemp @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:6790: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -G +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +syscmd(`rm -f foo-*')sysval +dnl @result{}0 +len(maketemp(`foo-XXXXX')) +dnl @error{}m4:stdin:2: recommend using mkstemp instead +dnl @result{}9 +define(`abc', `def') +dnl @result{} +maketemp(`foo-abc') +dnl @result{}foo-def +dnl @error{}m4:stdin:4: recommend using mkstemp instead +syscmd(`test -f foo-*')ifelse(sysval, `0', `0', `1') +dnl @result{}1 diff --git a/coreseek/m4-1.4.13/checks/196.errprint b/coreseek/m4-1.4.13/checks/196.errprint new file mode 100644 index 0000000..7183fde --- /dev/null +++ b/coreseek/m4-1.4.13/checks/196.errprint @@ -0,0 +1,17 @@ +dnl @ ../doc/m4.texinfo:6836: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +errprint(`Invalid arguments to forloop +') +dnl @error{}Invalid arguments to forloop +dnl @result{} +errprint(`1')errprint(`2',`3 +') +dnl @error{}12 3 +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/197.location b/coreseek/m4-1.4.13/checks/197.location new file mode 100644 index 0000000..b7fb2af --- /dev/null +++ b/coreseek/m4-1.4.13/checks/197.location @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:6873: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +errprint(__program__:__file__:__line__: `input error +') +dnl @error{}m4:stdin:1: input error +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/198.location b/coreseek/m4-1.4.13/checks/198.location new file mode 100644 index 0000000..ae93fde --- /dev/null +++ b/coreseek/m4-1.4.13/checks/198.location @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:6893: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', ``$0' called at __file__:__line__') +dnl @result{} +foo +dnl @result{}foo called at stdin:2 +include(`incl.m4') +dnl @result{}Include file start +dnl @result{}foo called at examples/incl.m4:2 +dnl @result{}Include file end +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/199.location b/coreseek/m4-1.4.13/checks/199.location new file mode 100644 index 0000000..fcd1427 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/199.location @@ -0,0 +1,36 @@ +dnl @ ../doc/m4.texinfo:6914: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`echo', `$@') +dnl @result{} +define(`foo', `echo(__line__ +__line__)') +dnl @result{} +echo(__line__ +__line__) +dnl @result{}4 +dnl @result{}5 +m4wrap(`foo +') +dnl @result{} +foo(errprint(__line__ +__line__ +)) +dnl @error{}8 +dnl @error{}9 +dnl @result{}8 +dnl @result{}8 +__line__ +dnl @result{}11 +m4wrap(`__line__ +') +dnl @result{} +dnl @result{}12 +dnl @result{}6 +dnl @result{}6 diff --git a/coreseek/m4-1.4.13/checks/200.m4exit b/coreseek/m4-1.4.13/checks/200.m4exit new file mode 100644 index 0000000..ca2f8ab --- /dev/null +++ b/coreseek/m4-1.4.13/checks/200.m4exit @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:6971: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +m4wrap(`This text is lost due to `m4exit'.') +dnl @result{} +divert(`1') So is this. +divert +dnl @result{} +m4exit And this is never read. diff --git a/coreseek/m4-1.4.13/checks/201.m4exit b/coreseek/m4-1.4.13/checks/201.m4exit new file mode 100644 index 0000000..4688f79 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/201.m4exit @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:6989: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`fatal_error', + `errprint(__program__:__file__:__line__`: fatal error: $* +')m4exit(`1')') +dnl @result{} +fatal_error(`this is a BAD one, buster') +dnl @error{}m4:stdin:4: fatal error: this is a BAD one, buster diff --git a/coreseek/m4-1.4.13/checks/202.using_froz b/coreseek/m4-1.4.13/checks/202.using_froz new file mode 100644 index 0000000..b56b76c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/202.using_froz @@ -0,0 +1,10 @@ +dnl @ ../doc/m4.texinfo:7125: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -F /dev/null +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +traceon(`undefined')dnl diff --git a/coreseek/m4-1.4.13/checks/203.using_froz b/coreseek/m4-1.4.13/checks/203.using_froz new file mode 100644 index 0000000..8b9b74f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/203.using_froz @@ -0,0 +1,20 @@ +dnl @ ../doc/m4.texinfo:7131: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics +')m4exit(`77')')dnl +changequote(`[', `]')dnl +syscmd([echo 'changequote([,])pushdef([divnum],[hi])dnl' \ + | ']__program__[' -F in.m4f \ + && echo 'divnum popdef([divnum])divnum' \ + | ']__program__[' -R in.m4f \ + && rm in.m4f])status sysval +dnl @result{}hi 0 +dnl @result{}status 0 diff --git a/coreseek/m4-1.4.13/checks/204.using_froz b/coreseek/m4-1.4.13/checks/204.using_froz new file mode 100644 index 0000000..953dab6 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/204.using_froz @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:7151: Origin of test +dnl @ expected status: 1 +dnl @ extra options: -F /none/such +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +dnl @ expected error: ignore +dnl @error{}m4: cannot open `/none/such': No such file or directory diff --git a/coreseek/m4-1.4.13/checks/205.extensions b/coreseek/m4-1.4.13/checks/205.extensions new file mode 100644 index 0000000..507f5d1 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/205.extensions @@ -0,0 +1,26 @@ +dnl @ ../doc/m4.texinfo:7287: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`a1', `A1') +dnl @result{} +dnl First argument, concatenated with 1 +define(`_1', `$1')define(`first1', `_1($@)1') +dnl @result{} +dnl Eleventh argument, portable +define(`_9', `$9')define(`eleventh', `_9(shift(shift($@)))') +dnl @result{} +dnl Eleventh argument, GNU style +define(`Eleventh', `$11') +dnl @result{} +first1(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') +dnl @result{}A1 +eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') +dnl @result{}k +Eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') +dnl @result{}k diff --git a/coreseek/m4-1.4.13/checks/206.other_inco b/coreseek/m4-1.4.13/checks/206.other_inco new file mode 100644 index 0000000..2b16e97 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/206.other_inco @@ -0,0 +1,18 @@ +dnl @ ../doc/m4.texinfo:7581: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -s +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +divert(2)2 +divert(1)1 +divert`'0 +dnl @result{}#line 3 "stdin" +dnl @result{}0 +dnl @result{}#line 2 "stdin" +dnl @result{}1 +dnl @result{}#line 1 "stdin" +dnl @result{}2 diff --git a/coreseek/m4-1.4.13/checks/207.other_inco b/coreseek/m4-1.4.13/checks/207.other_inco new file mode 100644 index 0000000..9c5e0d6 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/207.other_inco @@ -0,0 +1,13 @@ +dnl @ ../doc/m4.texinfo:7606: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`x', `x') +dnl @result{} +define(`x', `x ') +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/208.improved_e b/coreseek/m4-1.4.13/checks/208.improved_e new file mode 100644 index 0000000..9179ec4 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/208.improved_e @@ -0,0 +1,15 @@ +dnl @ ../doc/m4.texinfo:7660: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`exch', ``$2', `$1'') +dnl @result{} +define(exch(`expansion text', `macro')) +dnl @result{} +macro +dnl @result{}expansion text diff --git a/coreseek/m4-1.4.13/checks/209.improved_f b/coreseek/m4-1.4.13/checks/209.improved_f new file mode 100644 index 0000000..2bc2f6b --- /dev/null +++ b/coreseek/m4-1.4.13/checks/209.improved_f @@ -0,0 +1,33 @@ +dnl @ ../doc/m4.texinfo:7682: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +undivert(`forloop2.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# forloop(var, from, to, stmt) - improved version: +dnl @result{}# works even if VAR is not a strict macro name +dnl @result{}# performs sanity check that FROM is larger than TO +dnl @result{}# allows complex numerical expressions in TO and FROM +dnl @result{}define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1', +dnl @result{} `pushdef(`$1')_$0(`$1', eval(`$2'), +dnl @result{} eval(`$3'), `$4')popdef(`$1')')') +dnl @result{}define(`_forloop', +dnl @result{} `define(`$1', `$2')$4`'ifelse(`$2', `$3', `', +dnl @result{} `$0(`$1', incr(`$2'), `$3', `$4')')') +dnl @result{}divert`'dnl +include(`forloop2.m4') +dnl @result{} +forloop(`i', `2', `1', `no iteration occurs') +dnl @result{} +forloop(`', `1', `2', ` odd iterator name') +dnl @result{} odd iterator name odd iterator name +forloop(`i', `5 + 5', `0xc', ` 0x`'eval(i, `16')') +dnl @result{} 0xa 0xb 0xc +forloop(`i', `a', `b', `non-numeric bounds') +dnl @error{}m4:stdin:6: bad expression in eval (bad input): (a) <= (b) +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/210.improved_f b/coreseek/m4-1.4.13/checks/210.improved_f new file mode 100644 index 0000000..29369be --- /dev/null +++ b/coreseek/m4-1.4.13/checks/210.improved_f @@ -0,0 +1,34 @@ +dnl @ ../doc/m4.texinfo:7723: Origin of test +dnl @ expected status: 1 +dnl @ extra options: -L9 +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`arg1', `$1')include(`forloop2.m4')include(`quote.m4') +dnl @result{} +define(`double', `define(`$1'`2', + arg1(patsubst(dquote(defn(`$1')), `[`']', `\&\&')))') +dnl @result{} +double(`forloop')double(`_forloop')defn(`forloop2') +dnl @result{}ifelse(eval(``($2) <= ($3)''), ``1'', +dnl @result{} ``pushdef(``$1'')_$0(``$1'', eval(``$2''), +dnl @result{} eval(``$3''), ``$4'')popdef(``$1'')'') +forloop(i, 1, 5, `ifelse(')forloop(i, 1, 5, `)') +dnl @result{} +changequote(`[', `]')changequote([``], ['']) +dnl @result{} +forloop2(i, 1, 5, ``ifelse('')forloop2(i, 1, 5, ``)'') +dnl @result{} +changequote`'include(`forloop.m4') +dnl @result{} +double(`forloop')double(`_forloop')defn(`forloop2') +dnl @result{}pushdef(``$1'', ``$2'')_forloop($@)popdef(``$1'') +forloop(i, 1, 5, `ifelse(')forloop(i, 1, 5, `)') +dnl @result{} +changequote(`[', `]')changequote([``], ['']) +dnl @result{} +forloop2(i, 1, 5, ``ifelse('')forloop2(i, 1, 5, ``)'') +dnl @error{}m4:stdin:12: recursion limit of 9 exceeded, use -L<N> to change it diff --git a/coreseek/m4-1.4.13/checks/211.improved_f b/coreseek/m4-1.4.13/checks/211.improved_f new file mode 100644 index 0000000..6af5941 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/211.improved_f @@ -0,0 +1,43 @@ +dnl @ ../doc/m4.texinfo:7766: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`forloop3.m4') +dnl @result{} +undivert(`forloop3.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# forloop_arg(from, to, macro) - invoke MACRO(value) for +dnl @result{}# each value between FROM and TO, without define overhead +dnl @result{}define(`forloop_arg', `ifelse(eval(`($1) <= ($2)'), `1', +dnl @result{} `_forloop(`$1', eval(`$2'), `$3(', `)')')') +dnl @result{}# forloop(var, from, to, stmt) - refactored to share code +dnl @result{}define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1', +dnl @result{} `pushdef(`$1')_forloop(eval(`$2'), eval(`$3'), +dnl @result{} `define(`$1',', `)$4')popdef(`$1')')') +dnl @result{}define(`_forloop', +dnl @result{} `$3`$1'$4`'ifelse(`$1', `$2', `', +dnl @result{} `$0(incr(`$1'), `$2', `$3', `$4')')') +dnl @result{}divert`'dnl +forloop(`i', `1', `3', ` i') +dnl @result{} 1 2 3 +define(`echo', `$@') +dnl @result{} +forloop_arg(`1', `3', ` echo') +dnl @result{} 1 2 3 +include(`curry.m4') +dnl @result{} +forloop_arg(`1', `3', `curry(`pushdef', `a')') +dnl @result{} +a +dnl @result{}3 +popdef(`a')a +dnl @result{}2 +popdef(`a')a +dnl @result{}1 +popdef(`a')a +dnl @result{}a diff --git a/coreseek/m4-1.4.13/checks/212.improved_f b/coreseek/m4-1.4.13/checks/212.improved_f new file mode 100644 index 0000000..b5dbd63 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/212.improved_f @@ -0,0 +1,35 @@ +dnl @ ../doc/m4.texinfo:7817: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreachq.m4') +dnl @result{} +traceon(`shift')debugmode(`aq') +dnl @result{} +foreachq(`x', ``1', `2', `3', `4'', `x +')dnl +dnl @result{}1 +dnl @error{}m4trace: -3- shift(`1', `2', `3', `4') +dnl @error{}m4trace: -2- shift(`1', `2', `3', `4') +dnl @result{}2 +dnl @error{}m4trace: -4- shift(`1', `2', `3', `4') +dnl @error{}m4trace: -3- shift(`2', `3', `4') +dnl @error{}m4trace: -3- shift(`1', `2', `3', `4') +dnl @error{}m4trace: -2- shift(`2', `3', `4') +dnl @result{}3 +dnl @error{}m4trace: -5- shift(`1', `2', `3', `4') +dnl @error{}m4trace: -4- shift(`2', `3', `4') +dnl @error{}m4trace: -3- shift(`3', `4') +dnl @error{}m4trace: -4- shift(`1', `2', `3', `4') +dnl @error{}m4trace: -3- shift(`2', `3', `4') +dnl @error{}m4trace: -2- shift(`3', `4') +dnl @result{}4 +dnl @error{}m4trace: -6- shift(`1', `2', `3', `4') +dnl @error{}m4trace: -5- shift(`2', `3', `4') +dnl @error{}m4trace: -4- shift(`3', `4') +dnl @error{}m4trace: -3- shift(`4') diff --git a/coreseek/m4-1.4.13/checks/213.improved_f b/coreseek/m4-1.4.13/checks/213.improved_f new file mode 100644 index 0000000..47dec64 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/213.improved_f @@ -0,0 +1,33 @@ +dnl @ ../doc/m4.texinfo:7859: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreachq2.m4') +dnl @result{} +undivert(`foreachq2.m4')dnl +dnl @result{}include(`quote.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# foreachq(x, `item_1, item_2, ..., item_n', stmt) +dnl @result{}# quoted list, improved version +dnl @result{}define(`foreachq', `pushdef(`$1')_$0($@)popdef(`$1')') +dnl @result{}define(`_arg1q', ``$1'') +dnl @result{}define(`_rest', `ifelse(`$#', `1', `', `dquote(shift($@))')') +dnl @result{}define(`_foreachq', `ifelse(`$2', `', `', +dnl @result{} `define(`$1', _arg1q($2))$3`'$0(`$1', _rest($2), `$3')')') +dnl @result{}divert`'dnl +traceon(`shift')debugmode(`aq') +dnl @result{} +foreachq(`x', ``1', `2', `3', `4'', `x +')dnl +dnl @result{}1 +dnl @error{}m4trace: -3- shift(`1', `2', `3', `4') +dnl @result{}2 +dnl @error{}m4trace: -3- shift(`2', `3', `4') +dnl @result{}3 +dnl @error{}m4trace: -3- shift(`3', `4') +dnl @result{}4 diff --git a/coreseek/m4-1.4.13/checks/214.improved_f b/coreseek/m4-1.4.13/checks/214.improved_f new file mode 100644 index 0000000..b2106b7 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/214.improved_f @@ -0,0 +1,49 @@ +dnl @ ../doc/m4.texinfo:7912: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreachq3.m4') +dnl @result{} +undivert(`foreachq3.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# foreachq(x, `item_1, item_2, ..., item_n', stmt) +dnl @result{}# quoted list, alternate improved version +dnl @result{}define(`foreachq', `ifelse(`$2', `', `', +dnl @result{} `pushdef(`$1')_$0(`$1', `$3', `', $2)popdef(`$1')')') +dnl @result{}define(`_foreachq', `ifelse(`$#', `3', `', +dnl @result{} `define(`$1', `$4')$2`'$0(`$1', `$2', +dnl @result{} shift(shift(shift($@))))')') +dnl @result{}divert`'dnl +traceon(`shift')debugmode(`aq') +dnl @result{} +foreachq(`x', ``1', `2', `3', `4'', `x +')dnl +dnl @result{}1 +dnl @error{}m4trace: -4- shift(`x', `x +dnl @error{}', `', `1', `2', `3', `4') +dnl @error{}m4trace: -3- shift(`x +dnl @error{}', `', `1', `2', `3', `4') +dnl @error{}m4trace: -2- shift(`', `1', `2', `3', `4') +dnl @result{}2 +dnl @error{}m4trace: -4- shift(`x', `x +dnl @error{}', `1', `2', `3', `4') +dnl @error{}m4trace: -3- shift(`x +dnl @error{}', `1', `2', `3', `4') +dnl @error{}m4trace: -2- shift(`1', `2', `3', `4') +dnl @result{}3 +dnl @error{}m4trace: -4- shift(`x', `x +dnl @error{}', `2', `3', `4') +dnl @error{}m4trace: -3- shift(`x +dnl @error{}', `2', `3', `4') +dnl @error{}m4trace: -2- shift(`2', `3', `4') +dnl @result{}4 +dnl @error{}m4trace: -4- shift(`x', `x +dnl @error{}', `3', `4') +dnl @error{}m4trace: -3- shift(`x +dnl @error{}', `3', `4') +dnl @error{}m4trace: -2- shift(`3', `4') diff --git a/coreseek/m4-1.4.13/checks/215.improved_f b/coreseek/m4-1.4.13/checks/215.improved_f new file mode 100644 index 0000000..47b85fd --- /dev/null +++ b/coreseek/m4-1.4.13/checks/215.improved_f @@ -0,0 +1,33 @@ +dnl @ ../doc/m4.texinfo:7999: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreachq4.m4') +dnl @result{} +undivert(`foreachq4.m4')dnl +dnl @result{}include(`forloop2.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# foreachq(x, `item_1, item_2, ..., item_n', stmt) +dnl @result{}# quoted list, version based on forloop +dnl @result{}define(`foreachq', +dnl @result{}`ifelse(`$2', `', `', `_$0(`$1', `$3', $2)')') +dnl @result{}define(`_foreachq', +dnl @result{}`pushdef(`$1', forloop(`$1', `3', `$#', +dnl @result{} `$0_(`1', `2', indir(`$1'))')`popdef( +dnl @result{} `$1')')indir(`$1', $@)') +dnl @result{}define(`_foreachq_', +dnl @result{}``define(`$$1', `$$3')$$2`''') +dnl @result{}divert`'dnl +traceon(`shift')debugmode(`aq') +dnl @result{} +foreachq(`x', ``1', `2', `3', `4'', `x +')dnl +dnl @result{}1 +dnl @result{}2 +dnl @result{}3 +dnl @result{}4 diff --git a/coreseek/m4-1.4.13/checks/216.improved_f b/coreseek/m4-1.4.13/checks/216.improved_f new file mode 100644 index 0000000..c5c9c77 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/216.improved_f @@ -0,0 +1,37 @@ +dnl @ ../doc/m4.texinfo:8035: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreach2.m4') +dnl @result{} +undivert(`foreach2.m4')dnl +dnl @result{}include(`quote.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# foreach(x, (item_1, item_2, ..., item_n), stmt) +dnl @result{}# parenthesized list, improved version +dnl @result{}define(`foreach', `pushdef(`$1')_$0(`$1', +dnl @result{} (dquote(dquote_elt$2)), `$3')popdef(`$1')') +dnl @result{}define(`_arg1', `$1') +dnl @result{}define(`_foreach', `ifelse(`$2', `(`')', `', +dnl @result{} `define(`$1', _arg1$2)$3`'$0(`$1', (dquote(shift$2)), `$3')')') +dnl @result{}divert`'dnl +traceon(`shift')debugmode(`aq') +dnl @result{} +foreach(`x', `(`1', `2', `3', `4')', `x +')dnl +dnl @error{}m4trace: -4- shift(`1', `2', `3', `4') +dnl @error{}m4trace: -4- shift(`2', `3', `4') +dnl @error{}m4trace: -4- shift(`3', `4') +dnl @result{}1 +dnl @error{}m4trace: -3- shift(``1'', ``2'', ``3'', ``4'') +dnl @result{}2 +dnl @error{}m4trace: -3- shift(``2'', ``3'', ``4'') +dnl @result{}3 +dnl @error{}m4trace: -3- shift(``3'', ``4'') +dnl @result{}4 +dnl @error{}m4trace: -3- shift(``4'') diff --git a/coreseek/m4-1.4.13/checks/217.improved_f b/coreseek/m4-1.4.13/checks/217.improved_f new file mode 100644 index 0000000..e4cc6f2 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/217.improved_f @@ -0,0 +1,77 @@ +dnl @ ../doc/m4.texinfo:8089: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`foreach2.m4') +dnl @result{} +include(`foreachq2.m4') +dnl @result{} +dnl 0-element list: +foreach(`x', `', `<x>') / foreachq(`x', `', `<x>') +dnl @result{} / +dnl 1-element list of empty element +foreach(`x', `()', `<x>') / foreachq(`x', ``'', `<x>') +dnl @result{}<> / <> +dnl 2-element list of empty elements +foreach(`x', `(`',`')', `<x>') / foreachq(`x', ``',`'', `<x>') +dnl @result{}<><> / <><> +dnl 1-element list of a comma +foreach(`x', `(`,')', `<x>') / foreachq(`x', ``,'', `<x>') +dnl @result{}<,> / <,> +dnl 2-element list of unbalanced parentheses +foreach(`x', `(`(', `)')', `<x>') / foreachq(`x', ``(', `)'', `<x>') +dnl @result{}<(><)> / <(><)> +define(`ab', `oops')dnl using defn(`iterator') +foreach(`x', `(`a', `b')', `defn(`x')') /dnl + foreachq(`x', ``a', `b'', `defn(`x')') +dnl @result{}ab / ab +define(`active', `ACT, IVE') +dnl @result{} +traceon(`active') +dnl @result{} +dnl list of unquoted macros; expansion occurs before recursion +foreach(`x', `(active, active)', `<x> +')dnl +dnl @error{}m4trace: -4- active -> `ACT, IVE' +dnl @error{}m4trace: -4- active -> `ACT, IVE' +dnl @result{}<ACT> +dnl @result{}<IVE> +dnl @result{}<ACT> +dnl @result{}<IVE> +foreachq(`x', `active, active', `<x> +')dnl +dnl @error{}m4trace: -3- active -> `ACT, IVE' +dnl @error{}m4trace: -3- active -> `ACT, IVE' +dnl @result{}<ACT> +dnl @error{}m4trace: -3- active -> `ACT, IVE' +dnl @error{}m4trace: -3- active -> `ACT, IVE' +dnl @result{}<IVE> +dnl @result{}<ACT> +dnl @result{}<IVE> +dnl list of quoted macros; expansion occurs during recursion +foreach(`x', `(`active', `active')', `<x> +')dnl +dnl @error{}m4trace: -1- active -> `ACT, IVE' +dnl @result{}<ACT, IVE> +dnl @error{}m4trace: -1- active -> `ACT, IVE' +dnl @result{}<ACT, IVE> +foreachq(`x', ``active', `active'', `<x> +')dnl +dnl @error{}m4trace: -1- active -> `ACT, IVE' +dnl @result{}<ACT, IVE> +dnl @error{}m4trace: -1- active -> `ACT, IVE' +dnl @result{}<ACT, IVE> +dnl list of double-quoted macro names; no expansion +foreach(`x', `(``active'', ``active'')', `<x> +')dnl +dnl @result{}<active> +dnl @result{}<active> +foreachq(`x', ```active'', ``active''', `<x> +')dnl +dnl @result{}<active> +dnl @result{}<active> diff --git a/coreseek/m4-1.4.13/checks/218.improved_f b/coreseek/m4-1.4.13/checks/218.improved_f new file mode 100644 index 0000000..3e4b135 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/218.improved_f @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:8170: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dlimit=10 -Dverbose +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`loop.m4')dnl +dnl @result{} 1 2 3 4 5 6 7 8 9 10 diff --git a/coreseek/m4-1.4.13/checks/219.improved_f b/coreseek/m4-1.4.13/checks/219.improved_f new file mode 100644 index 0000000..ef355aa --- /dev/null +++ b/coreseek/m4-1.4.13/checks/219.improved_f @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:8180: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dlimit=10 -Dverbose -Dalt +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`loop.m4')dnl +dnl @result{} 1 2 3 4 5 6 7 8 9 10 diff --git a/coreseek/m4-1.4.13/checks/220.improved_f b/coreseek/m4-1.4.13/checks/220.improved_f new file mode 100644 index 0000000..04c669f --- /dev/null +++ b/coreseek/m4-1.4.13/checks/220.improved_f @@ -0,0 +1,11 @@ +dnl @ ../doc/m4.texinfo:8190: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dlimit=10 -Dverbose -Dalt=4 +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`loop.m4')dnl +dnl @result{} 1 2 3 4 5 6 7 8 9 10 diff --git a/coreseek/m4-1.4.13/checks/221.improved_f b/coreseek/m4-1.4.13/checks/221.improved_f new file mode 100644 index 0000000..400c03b --- /dev/null +++ b/coreseek/m4-1.4.13/checks/221.improved_f @@ -0,0 +1,10 @@ +dnl @ ../doc/m4.texinfo:8198: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dlimit=2500 -Dalt=4 +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`loop.m4')dnl diff --git a/coreseek/m4-1.4.13/checks/222.improved_f b/coreseek/m4-1.4.13/checks/222.improved_f new file mode 100644 index 0000000..32cc89c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/222.improved_f @@ -0,0 +1,14 @@ +dnl @ ../doc/m4.texinfo:8205: Origin of test +dnl @ expected status: 0 +dnl @ extra options: -Dlimit=10000 -Dalt=4 +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`foo', `divert`'len(popdef(`_foreachq')_foreachq($@))')dnl +define(`debug', `pushdef(`_foreachq', defn(`foo'))') +dnl @result{} +include(`loop.m4')dnl +dnl @result{}48894 diff --git a/coreseek/m4-1.4.13/checks/223.improved_c b/coreseek/m4-1.4.13/checks/223.improved_c new file mode 100644 index 0000000..1c94d39 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/223.improved_c @@ -0,0 +1,46 @@ +dnl @ ../doc/m4.texinfo:8268: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`stack_sep.m4') +dnl @result{} +define(`copy', `ifdef(`$2', `errprint(`$2 already defined +')m4exit(`1')', + `stack_foreach_sep(`$1', `pushdef(`$2',', `)')')')dnl +pushdef(`a', `1')pushdef(`a', defn(`divnum')) +dnl @result{} +copy(`a', `b') +dnl @result{} +b +dnl @result{}0 +popdef(`b') +dnl @result{} +b +dnl @result{}1 +pushdef(`c', `1')pushdef(`c', `2') +dnl @result{} +stack_foreach_sep_lifo(`c', `', `', `, ') +dnl @result{}2, 1 +undivert(`stack_sep.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# stack_foreach_sep(macro, pre, post, sep) +dnl @result{}# Invoke PRE`'defn`'POST with a single argument of each definition +dnl @result{}# from the definition stack of MACRO, starting with the oldest, and +dnl @result{}# separated by SEP between definitions. +dnl @result{}define(`stack_foreach_sep', +dnl @result{}`_stack_reverse_sep(`$1', `tmp-$1')'dnl +dnl @result{}`_stack_reverse_sep(`tmp-$1', `$1', `$2`'defn(`$1')$3', `$4`'')') +dnl @result{}# stack_foreach_sep_lifo(macro, pre, post, sep) +dnl @result{}# Like stack_foreach_sep, but starting with the newest definition. +dnl @result{}define(`stack_foreach_sep_lifo', +dnl @result{}`_stack_reverse_sep(`$1', `tmp-$1', `$2`'defn(`$1')$3', `$4`'')'dnl +dnl @result{}`_stack_reverse_sep(`tmp-$1', `$1')') +dnl @result{}define(`_stack_reverse_sep', +dnl @result{}`ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0( +dnl @result{} `$1', `$2', `$4$3')')') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/224.improved_c b/coreseek/m4-1.4.13/checks/224.improved_c new file mode 100644 index 0000000..f603406 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/224.improved_c @@ -0,0 +1,16 @@ +dnl @ ../doc/m4.texinfo:8314: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`forloop3.m4')include(`stack_sep.m4')dnl +forloop(`i', `1', `10000', `pushdef(`s', i)') +dnl @result{} +define(`colon', `:')define(`dash', `-') +dnl @result{} +len(stack_foreach_sep(`s', `dash', `', `colon')) +dnl @result{}58893 diff --git a/coreseek/m4-1.4.13/checks/225.improved_m b/coreseek/m4-1.4.13/checks/225.improved_m new file mode 100644 index 0000000..4521e18 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/225.improved_m @@ -0,0 +1,19 @@ +dnl @ ../doc/m4.texinfo:8337: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`wraplifo.m4') +dnl @result{} +m4wrap(`define(`foo', ``$0:'-$1-$*-$#-')foo(`a', `b') +') +dnl @result{} +builtin(`m4wrap', ``'define(`bar', ``$0:'-$1-$*-$#-')bar(`a', `b') +') +dnl @result{} +dnl @result{}bar:-a-a,b-2- +dnl @result{}m4wrap0:---0- diff --git a/coreseek/m4-1.4.13/checks/226.improved_m b/coreseek/m4-1.4.13/checks/226.improved_m new file mode 100644 index 0000000..864b334 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/226.improved_m @@ -0,0 +1,31 @@ +dnl @ ../doc/m4.texinfo:8370: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`wraplifo2.m4') +dnl @result{} +undivert(`wraplifo2.m4')dnl +dnl @result{}dnl Redefine m4wrap to have LIFO semantics, improved example. +dnl @result{}include(`join.m4')dnl +dnl @result{}define(`_m4wrap', defn(`m4wrap'))dnl +dnl @result{}define(`_arg1', `$1')dnl +dnl @result{}define(`m4wrap', +dnl @result{}`ifdef(`_$0_text', +dnl @result{} `define(`_$0_text', joinall(` ', $@)defn(`_$0_text'))', +dnl @result{} `_$0(`_arg1(defn(`_$0_text')undefine(`_$0_text'))')dnl +dnl @result{}define(`_$0_text', joinall(` ', $@))')')dnl +m4wrap(`define(`foo', ``$0:'-$1-$*-$#-')foo(`a', `b') +') +dnl @result{} +m4wrap(`lifo text +m4wrap(`nested', `', `$@ +')') +dnl @result{} +dnl @result{}lifo text +dnl @result{}foo:-a-a,b-2- +dnl @result{}nested $@ diff --git a/coreseek/m4-1.4.13/checks/227.improved_c b/coreseek/m4-1.4.13/checks/227.improved_c new file mode 100644 index 0000000..c3ca73c --- /dev/null +++ b/coreseek/m4-1.4.13/checks/227.improved_c @@ -0,0 +1,31 @@ +dnl @ ../doc/m4.texinfo:8406: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`cleardivert', + `pushdef(`_n', divnum)divert(`-1')undivert($@)divert(_n)popdef(`_n')') +dnl @result{} +divert(`1')one +divert +dnl @result{} +cleardivert +dnl @result{} +undivert +dnl @result{}one +dnl @result{} +define(`cleardivert', + `pushdef(`_num', divnum)divert(`-1')ifelse(`$#', `0', + `undivert`'', `undivert($@)')divert(_num)popdef(`_num')') +dnl @result{} +divert(`2')two +divert +dnl @result{} +cleardivert +dnl @result{} +undivert +dnl @result{} diff --git a/coreseek/m4-1.4.13/checks/228.improved_c b/coreseek/m4-1.4.13/checks/228.improved_c new file mode 100644 index 0000000..f44e5c8 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/228.improved_c @@ -0,0 +1,37 @@ +dnl @ ../doc/m4.texinfo:8442: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`capitalize.m4')dnl +define(`active', `act1, ive')dnl +define(`Active', `Act2, Ive')dnl +define(`ACTIVE', `ACT3, IVE')dnl +upcase(active) +dnl @result{}ACT1,IVE +upcase(`active') +dnl @result{}ACT3, IVE +upcase(``active'') +dnl @result{}ACTIVE +downcase(ACTIVE) +dnl @result{}act3,ive +downcase(`ACTIVE') +dnl @result{}act1, ive +downcase(``ACTIVE'') +dnl @result{}active +capitalize(active) +dnl @result{}Act1 +capitalize(`active') +dnl @result{}Active +capitalize(``active'') +dnl @result{}_capitalize(`active') +define(`A', `OOPS') +dnl @result{} +capitalize(active) +dnl @result{}OOPSct1 +capitalize(`active') +dnl @result{}OOPSctive diff --git a/coreseek/m4-1.4.13/checks/229.improved_c b/coreseek/m4-1.4.13/checks/229.improved_c new file mode 100644 index 0000000..74c7d72 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/229.improved_c @@ -0,0 +1,36 @@ +dnl @ ../doc/m4.texinfo:8519: Origin of test +dnl @ expected status: 0 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +include(`capitalize2.m4')dnl +define(`active', `act1, ive')dnl +define(`Active', `Act2, Ive')dnl +define(`ACTIVE', `ACT3, IVE')dnl +define(`A', `OOPS')dnl +capitalize(active; `active'; ``active''; ```actIVE''') +dnl @result{}Act1,Ive; Act2, Ive; Active; `Active' +undivert(`capitalize2.m4')dnl +dnl @result{}divert(`-1') +dnl @result{}# upcase(text) +dnl @result{}# downcase(text) +dnl @result{}# capitalize(text) +dnl @result{}# change case of text, improved version +dnl @result{}define(`upcase', `translit(`$*', `a-z', `A-Z')') +dnl @result{}define(`downcase', `translit(`$*', `A-Z', `a-z')') +dnl @result{}define(`_arg1', `$1') +dnl @result{}define(`_to_alt', `changequote(`<<[', `]>>')') +dnl @result{}define(`_from_alt', `changequote(<<[`]>>, <<[']>>)') +dnl @result{}define(`_upcase_alt', `translit(<<[$*]>>, <<[a-z]>>, <<[A-Z]>>)') +dnl @result{}define(`_downcase_alt', `translit(<<[$*]>>, <<[A-Z]>>, <<[a-z]>>)') +dnl @result{}define(`_capitalize_alt', +dnl @result{} `regexp(<<[$1]>>, <<[^\(\w\)\(\w*\)]>>, +dnl @result{} <<[_upcase_alt(<<[<<[\1]>>]>>)_downcase_alt(<<[<<[\2]>>]>>)]>>)') +dnl @result{}define(`capitalize', +dnl @result{} `_arg1(_to_alt()patsubst(<<[<<[$*]>>]>>, <<[\w+]>>, +dnl @result{} _from_alt()`]>>_$0_alt(<<[\&]>>)<<['_to_alt())_from_alt())') +dnl @result{}divert`'dnl diff --git a/coreseek/m4-1.4.13/checks/230.improved_f b/coreseek/m4-1.4.13/checks/230.improved_f new file mode 100644 index 0000000..92420c7 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/230.improved_f @@ -0,0 +1,21 @@ +dnl @ ../doc/m4.texinfo:8563: Origin of test +dnl @ expected status: 1 +dnl @ extra options: +dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software +dnl @ Foundation, Inc. +dnl @ This file is free software; the Free Software Foundation +dnl @ gives unlimited permission to copy and/or distribute it +dnl @ with or without modifications, as long as this notice +dnl @ is preserved. +define(`fatal_error', + `errprint(ifdef(`__program__', `__program__', ``m4'')'dnl +`:ifelse(__line__, `0', `', + `__file__:__line__:')` fatal error: $* +')m4exit(`1')') +dnl @result{} +m4wrap(`divnum(`demo of internal message') +fatal_error(`inside wrapped text')') +dnl @result{} +dnl @error{}m4:stdin:6: Warning: excess arguments to builtin `divnum' ignored +dnl @result{}0 +dnl @error{}m4:stdin:6: fatal error: inside wrapped text diff --git a/coreseek/m4-1.4.13/checks/Makefile b/coreseek/m4-1.4.13/checks/Makefile new file mode 100644 index 0000000..afb2440 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/Makefile @@ -0,0 +1,94 @@ +## Makefile.in - template for building Makefile for M4 testsuite. +## +## Copyright (C) 1992, 1993, 1994, 2006, 2007, 2008 Free Software +## Foundation, Inc. +## +## This file is part of GNU M4. +## +## GNU M4 is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## GNU M4 is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see <http://www.gnu.org/licenses/>. + + +PACKAGE = m4 +VERSION = 1.4.13 + +SHELL = /bin/bash + +bindir = ${exec_prefix}/bin +exec_prefix = ${prefix} +prefix = /usr/local +srcdir = . + +PATH_SEPARATOR = : +program_transform_name = s,x,x, + +# Should be GNU awk, for the get-them script. +AWK = gawk + +# Vern says that the first star is required around an Alpha make bug. +DOC_CHECKS = $(srcdir)/*[0-9][0-9][0-9].* +CHECKS = $(DOC_CHECKS) $(srcdir)/stackovf.test +# Makefile.in is automatically distributed by automake. +DISTFILES = $(srcdir)/get-them $(srcdir)/check-them $(srcdir)/stamp-checks \ + $(srcdir)/stackovf.test + +all: $(srcdir)/stamp-checks + +$(srcdir)/stamp-checks: $(srcdir)/get-them $(srcdir)/../doc/m4.texinfo + rm -f $(DOC_CHECKS) + cd $(srcdir) && AWK=$(AWK) ./get-them ../doc/m4.texinfo + touch $(srcdir)/stamp-checks + +install: + +dvi pdf ps html info: +install-dvi install-pdf install-ps install-html install-info: + +uninstall: + +check: $(srcdir)/stamp-checks + PATH=`pwd`/../src"$(PATH_SEPARATOR)"$$PATH; export PATH; \ + $(srcdir)/check-them -I $(srcdir)/../examples $(CHECKS) + +installcheck: $(srcdir)/stamp-checks + PATH='$(bindir)'"$(PATH_SEPARATOR)"$$PATH; export PATH; \ + $(srcdir)/check-them -I $(srcdir)/../examples \ + -m "`echo m4 | sed '$(program_transform_name)'`" $(CHECKS) + +tags: + +mostlyclean: + +clean: mostlyclean + +distclean: clean + rm -f Makefile + +maintainer-clean realclean: distclean + rm -f $(DOC_CHECKS) $(srcdir)/stamp-checks + +distdir: dist + +dist: $(DISTFILES) + @echo "Copying distribution files" + @for file in $(DISTFILES) $(DOC_CHECKS); do \ + ln $$file ../$(PACKAGE)-$(VERSION)/checks 2> /dev/null \ + || cp -p $$file ../$(PACKAGE)-$(VERSION)/checks; \ + done + +Makefile: $(srcdir)/Makefile.in ../config.status + cd .. && ./config.status checks/$@ + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/checks/Makefile.in b/coreseek/m4-1.4.13/checks/Makefile.in new file mode 100644 index 0000000..c43c2cc --- /dev/null +++ b/coreseek/m4-1.4.13/checks/Makefile.in @@ -0,0 +1,94 @@ +## Makefile.in - template for building Makefile for M4 testsuite. +## +## Copyright (C) 1992, 1993, 1994, 2006, 2007, 2008 Free Software +## Foundation, Inc. +## +## This file is part of GNU M4. +## +## GNU M4 is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## GNU M4 is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see <http://www.gnu.org/licenses/>. + +@SET_MAKE@ +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = @SHELL@ + +bindir = @bindir@ +exec_prefix = @exec_prefix@ +prefix = @prefix@ +srcdir = @srcdir@ +VPATH = @srcdir@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +program_transform_name = @program_transform_name@ + +# Should be GNU awk, for the get-them script. +AWK = @AWK@ + +# Vern says that the first star is required around an Alpha make bug. +DOC_CHECKS = $(srcdir)/*[0-9][0-9][0-9].* +CHECKS = $(DOC_CHECKS) $(srcdir)/stackovf.test +# Makefile.in is automatically distributed by automake. +DISTFILES = $(srcdir)/get-them $(srcdir)/check-them $(srcdir)/stamp-checks \ + $(srcdir)/stackovf.test + +all: $(srcdir)/stamp-checks + +$(srcdir)/stamp-checks: $(srcdir)/get-them $(srcdir)/../doc/m4.texinfo + rm -f $(DOC_CHECKS) + cd $(srcdir) && AWK=$(AWK) ./get-them ../doc/m4.texinfo + touch $(srcdir)/stamp-checks + +install: + +dvi pdf ps html info: +install-dvi install-pdf install-ps install-html install-info: + +uninstall: + +check: $(srcdir)/stamp-checks + PATH=`pwd`/../src"$(PATH_SEPARATOR)"$$PATH; export PATH; \ + $(srcdir)/check-them -I $(srcdir)/../examples $(CHECKS) + +installcheck: $(srcdir)/stamp-checks + PATH='$(bindir)'"$(PATH_SEPARATOR)"$$PATH; export PATH; \ + $(srcdir)/check-them -I $(srcdir)/../examples \ + -m "`echo m4 | sed '$(program_transform_name)'`" $(CHECKS) + +tags: + +mostlyclean: + +clean: mostlyclean + +distclean: clean + rm -f Makefile + +maintainer-clean realclean: distclean + rm -f $(DOC_CHECKS) $(srcdir)/stamp-checks + +distdir: dist + +dist: $(DISTFILES) + @echo "Copying distribution files" + @for file in $(DISTFILES) $(DOC_CHECKS); do \ + ln $$file ../$(PACKAGE)-$(VERSION)/checks 2> /dev/null \ + || cp -p $$file ../$(PACKAGE)-$(VERSION)/checks; \ + done + +Makefile: $(srcdir)/Makefile.in ../config.status + cd .. && ./config.status checks/$@ + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/checks/check-them b/coreseek/m4-1.4.13/checks/check-them new file mode 100755 index 0000000..e594119 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/check-them @@ -0,0 +1,191 @@ +#!/bin/sh +# Check GNU m4 against examples from the manual source. +# Copyright (C) 1992, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is part of GNU M4. +# +# GNU M4 is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GNU M4 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Clean up temp files on exit +pwd=`pwd` +tmp=m4-tmp.$$ +trap 'stat=$?; cd "$pwd"; rm -rf $tmp && exit $stat' 0 +trap '(exit $?); exit $?' 1 2 13 15 + +# Create scratch dir +framework_failure=0 +mkdir $tmp || framework_failure=1 + +if test $framework_failure = 1; then + echo "$0: failure in testing framework" 1>&2 + (exit 1); exit 1 +fi + +out=$tmp/m4-out +err=$tmp/m4-err +xout=$tmp/m4-xout +xerr=$tmp/m4-xerr +failed= +skipped= +strip_needed=false +diffopts=-c + +# Allow user to select sed +: ${SED=sed} + +# Find out where the examples live. +examples=. +if test "x$1" = x-I ; then + examples="$2" + shift; shift +fi + +# Find out how to run m4. +m4=m4 +if test "x$1" = x-m ; then + m4="$2" + shift; shift +fi + +# Find out how the executable prints argv[0] +m4name=`"$m4" --help | ${SED} -e 's/Usage: \(.*\) \[OPTION.*/\1/' \ + -e 's/\\\\/\\\\\\\\/g' -e 1q` + +# Find out if we should strip \r in the output +"$m4" --version | tee $out +"$m4" --version | tr -d '\015' > $xout +if cmp -s $out $xout; then + : +else + echo "Ignoring carriage returns" + strip_needed=: +fi + +# Find out if diff supports useful options. +if diff -u /dev/null /dev/null 2>/dev/null ; then + diffopts="-u" +fi +if diff -a /dev/null /dev/null 2>/dev/null ; then + diffopts="$diffopts -a" +fi + +# Run the tests. +for file +do + test -f "$file" || { + echo "No such file: $file" + continue + } + echo "Checking $file" + + case $file in + *stackovf.test) + "$file" "$m4" + case $? in + 77) skipped="$skipped $file";; + 0) ;; + *) failed="$failed $file" + esac + continue ;; + esac + + options=`${SED} -ne '3s/^dnl @ extra options: //p;3q' "$file"` + ${SED} -e '/^dnl @/d' -e '/^\^D$/q' "$file" \ + | LC_MESSAGES=C M4PATH=$examples "$m4" -d $options - >$out 2>$err + stat=$? + + xstat=`${SED} -ne '2s/^dnl @ expected status: //p;2q' "$file"` + case $stat in + 77) + skipped="$skipped $file" + cat $err + continue + ;; + $xstat) ;; + *) + failed="$failed $file:status" + echo `${SED} -e 's/^dnl //' -e 1q $file` + echo "$file: status was $stat, expected $xstat" + ;; + esac + + xoutfile=`${SED} -n 's/^dnl @ expected output: //p' "$file"` + if test -z "$xoutfile" ; then + ${SED} -e '/^dnl @result{}/!d' -e 's///' -e "s|examples/|$examples/|" \ + "$file" > $xout + else + cp "$examples/$xoutfile" $xout + fi + + xerrfile=`${SED} -n 's/^dnl @ expected error: //p' "$file"` + case $xerrfile in + ignore) + cp $err $xerr ;; + '') + ${SED} '/^dnl @error{}/!d + s///; '"s|^m4:|$m4name:|; s|examples/|$examples/|" \ + "$file" > $xerr ;; + *) + ${SED} "s|^m4:|$m4name:|; s|examples/|$examples/|" \ + "$examples/$xerrfile" > $xerr ;; + esac + + # For the benefit of mingw, normalize \r\n line endings + if $strip_needed ; then + tr -d '\015' < $out > $out.t + mv $out.t $out + tr -d '\015' < $xout > $xout.t + mv $xout.t $xout + tr -d '\015' < $err > $err.t + mv $err.t $err + tr -d '\015' < $xerr > $xerr.t + mv $xerr.t $xerr + fi + + if cmp -s $out $xout; then + : + else + failed="$failed $file:out" + echo `${SED} -e 's/^dnl //' -e 1q $file` + echo "$file: stdout mismatch" + diff $diffopts $xout $out + fi + + if cmp -s $err $xerr; then + : + else + failed="$failed $file:err" + echo `${SED} -e 's/^dnl //' -e 1q $file` + echo "$file: stderr mismatch" + diff $diffopts $xerr $err + fi + +done + +rm -f $out $err $xout $xerr + +echo +if test -n "$skipped"; then + echo "Skipped checks were:" + echo " $skipped" +fi +if test -z "$failed"; then + echo "All checks successful" + stat=0 +else + echo "Failed checks were:" + echo " $failed" + stat=1 +fi +(exit $stat); exit $stat diff --git a/coreseek/m4-1.4.13/checks/get-them b/coreseek/m4-1.4.13/checks/get-them new file mode 100755 index 0000000..50735d3 --- /dev/null +++ b/coreseek/m4-1.4.13/checks/get-them @@ -0,0 +1,138 @@ +#!/bin/sh +# -*- AWK -*- +# Extract all examples from the manual source. +# Copyright (C) 1992, 2005, 2006, 2007, 2008, 2009 Free Software +# Foundation, Inc. +# +# This file is part of GNU M4. +# +# GNU M4 is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GNU M4 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# This script was designed under GNU awk, but hopefully portable to +# other implementations. + +FILE=${1-/dev/null} +: ${AWK=awk} + +$AWK ' + +BEGIN { + node = ""; + seq = -1; + count = 0; + file = "NONE"; + status = 0; + options = ""; + xout = ""; + xerr = ""; +} + +/^@node / { + if (seq > 0) + printf(" -- %d file%s", seq, seq == 1 ? "" : "s"); + if (seq >= 0) + printf("\n"); + + split($0, tmp, ","); + node = substr(tmp[1], 7); + if (length(node) > 10) + printf("Node: %s - truncated", node); + else + printf("Node: %s ", node); + gsub(" ", "_", node); + node = tolower(substr(node, 1, 10)); + seq = 0; +} + +/^@comment ignore$/ { + getline; + status = 0; + options = ""; + xout = ""; + xout = ""; + next; +} + +/^@comment status: / { + status = $3; +} + +/^@comment options: / { + options = $0; + gsub ("@comment options:", "", options); +} + +/^@comment xout: / { + xout = $0; + gsub ("@comment xout: ", "", xout); +} + +/^@comment xerr: / { + xerr = $0; + gsub ("@comment xerr: ", "", xerr); +} + +/^@example$/, /^@end example$/ { + if (seq < 0) + next; + if ($0 ~ /^@example$/) { + if (count > 0) + close (file); + seq++; + count++; + file = sprintf("%03d.%s", count, node); + printf("dnl @ %s:%d: Origin of test\n"\ + "dnl @ expected status: %d\n"\ + "dnl @ extra options: %s\n"\ + "dnl @ Copyright (C) 2006, 2007, 2008, 2009 Free Software\n"\ + "dnl @ Foundation, Inc.\n"\ + "dnl @ This file is free software; the Free Software Foundation\n"\ + "dnl @ gives unlimited permission to copy and/or distribute it\n"\ + "dnl @ with or without modifications, as long as this notice\n"\ + "dnl @ is preserved.\n", FILENAME, NR, status, options) > file; + if (xout) + printf("dnl @ expected output: %s\n", xout) > file; + if (xerr) + printf("dnl @ expected error: %s\n", xerr) > file; + status = 0; + options = ""; + xout = ""; + xerr = ""; + next; + } + if ($0 ~ /^@end example$/) { + next; + } + if ($0 ~ /^\^D$/) + next; + if ($0 ~ /^\$ @kbd/) + next; + if ($0 ~ /^@result\{\}/ || $0 ~ /^@error\{\}/) + prefix = "dnl "; + else + prefix = ""; + gsub("@@", "@", $0); + gsub("@[{]", "{", $0); + gsub("@}", "}", $0); + gsub("@w[{] }", " ", $0); + gsub("@tabchar[{]}", "\t", $0); + printf("%s%s\n", prefix, $0) >> file; +} + +END { + printf("\n"); + if (count > 0) + close(file); +} +' $FILE diff --git a/coreseek/m4-1.4.13/checks/stackovf.test b/coreseek/m4-1.4.13/checks/stackovf.test new file mode 100755 index 0000000..0ab0ccb --- /dev/null +++ b/coreseek/m4-1.4.13/checks/stackovf.test @@ -0,0 +1,99 @@ +#!/bin/sh +# This file is part of the GNU m4 testsuite +# Copyright (C) 2000, 2003, 2007, 2008 Free Software Foundation, Inc. +# +# This file is part of GNU M4. +# +# GNU M4 is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GNU M4 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Script to verify that stack overflow is diagnosed properly when +# there is infinite macro call nesting, provided the OS supports it. + +m4="$1" + +# Skip this test if -L defaults to 1024 instead of 0, as that is our +# indicator that the OS does not support stack overflow detection. +("$m4" --help | grep 'nesting.*\[0\]') >/dev/null 2>&1 \ + || { + echo "$0: skipping test, no stack overflow support detected in $m4" + exit 77 + } + +# On some systems the ulimit command is available in ksh or bash but not sh +(exec 2>/dev/null; ulimit -Ss 300) || { + for altshell in bash bsh ksh zsh ; do + if (exec >/dev/null 2>&1; $altshell -c 'ulimit -Ss 300') && test -z "$2" + then + echo "Using $altshell because it supports ulimit" + exec $altshell "$0" "$@" running-with-$altshell + exit 1 + fi + done +} + +tmpdir= +trap 'st=$?; rm -rf "$tmpdir" && exit $st' 0 +trap '(exit $?); exit $?' 1 2 3 15 + +# Create a temporary subdirectory $tmpdir in $TMPDIR (default /tmp). +# Use mktemp if possible; otherwise fall back on mkdir, +# with $RANDOM to make collisions less likely. +: ${TMPDIR=/tmp} +{ + tmpdir=` + (umask 077 && mktemp -d "$TMPDIR/m4stk-XXXXXX") 2>/dev/null + ` && + test -n "$tmpdir" && test -d "$tmpdir" +} || { + tmpdir=$TMPDIR/m4stk-$$-$RANDOM + (umask 077 && mkdir "$tmpdir") +} || exit $? +tmpfile="$tmpdir"/m4.out + +# Limit the stack size if the shell we are running permits it +if (exec 2>/dev/null; ulimit -Ss 300) +then + ulimit -Ss 300 + echo "Stack soft limit set to `ulimit -s`K"; +else + echo "Can't reset stack limit - this may take a while..." +fi + +# Induce stack overflow. +echo 'define(a,a(a))a' | "$m4" > "$tmpfile" 2>&1 +result=$? + +exitcode=1 +if test $result -eq 0 ; then + echo "Failure - $m4 did not abort" +else + # See if stack overflow was diagnosed. + case `cat "$tmpfile"` in + *stack\ overflow*) + case `echo "$tmpdir"/*` in + $tmpfile) + echo "Pass" + exitcode=0 ;; + *) echo "Failure - $m4 created unexpected core dump" + ls -l "$tmpdir" ;; + esac ;; + *) echo "Failure - $m4 aborted unexpectedly"; + ;; + esac +fi + +test $exitcode = 0 || + { echo "Output from $m4:"; cat $tmpfile; } + +exit $exitcode diff --git a/coreseek/m4-1.4.13/checks/stamp-checks b/coreseek/m4-1.4.13/checks/stamp-checks new file mode 100644 index 0000000..e69de29 diff --git a/coreseek/m4-1.4.13/config.log b/coreseek/m4-1.4.13/config.log new file mode 100644 index 0000000..3361e71 --- /dev/null +++ b/coreseek/m4-1.4.13/config.log @@ -0,0 +1,7314 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GNU M4 configure 1.4.13, which was +generated by GNU Autoconf 2.63b. Invocation command line was + + $ ./configure --prefix=/usr/local + +## --------- ## +## Platform. ## +## --------- ## + +hostname = data-center +uname -m = x86_64 +uname -r = 3.2.0-100-generic +uname -s = Linux +uname -v = #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin +PATH: /opt/chef/embedded/bin +PATH: /opt/chef/embedded/bin +PATH: /var/lib/gems/1.8/bin + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:3010: checking for a BSD-compatible install +configure:3078: result: /usr/bin/install -c +configure:3089: checking whether build environment is sane +configure:3139: result: yes +configure:3280: checking for a thread-safe mkdir -p +configure:3319: result: /bin/mkdir -p +configure:3332: checking for gawk +configure:3348: found /usr/bin/gawk +configure:3359: result: gawk +configure:3370: checking whether make sets $(MAKE) +configure:3392: result: yes +configure:3528: checking for gcc +configure:3544: found /usr/bin/gcc +configure:3555: result: gcc +configure:3784: checking for C compiler version +configure:3792: gcc --version >&5 +gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 +Copyright (C) 2011 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:3796: $? = 0 +configure:3803: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) +configure:3807: $? = 0 +configure:3814: gcc -V >&5 +gcc: error: unrecognized option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:3818: $? = 4 +configure:3837: checking for C compiler default output file name +configure:3859: gcc conftest.c >&5 +configure:3863: $? = 0 +configure:3900: result: a.out +configure:3916: checking whether the C compiler works +configure:3926: ./a.out +configure:3930: $? = 0 +configure:3945: result: yes +configure:3952: checking whether we are cross compiling +configure:3954: result: no +configure:3957: checking for suffix of executables +configure:3964: gcc -o conftest conftest.c >&5 +configure:3968: $? = 0 +configure:3990: result: +configure:3996: checking for suffix of object files +configure:4018: gcc -c conftest.c >&5 +configure:4022: $? = 0 +configure:4043: result: o +configure:4047: checking whether we are using the GNU C compiler +configure:4066: gcc -c conftest.c >&5 +configure:4066: $? = 0 +configure:4075: result: yes +configure:4084: checking whether gcc accepts -g +configure:4104: gcc -c -g conftest.c >&5 +configure:4104: $? = 0 +configure:4145: result: yes +configure:4162: checking for gcc option to accept ISO C89 +configure:4226: gcc -c -g -O2 conftest.c >&5 +configure:4226: $? = 0 +configure:4239: result: none needed +configure:4270: checking for style of include used by make +configure:4298: result: GNU +configure:4323: checking dependency style of gcc +configure:4424: result: gcc3 +configure:4482: checking for ranlib +configure:4498: found /usr/bin/ranlib +configure:4509: result: ranlib +configure:4532: checking whether gcc and cc understand -c and -o together +configure:4563: gcc -c conftest.c -o conftest2.o >&5 +configure:4567: $? = 0 +configure:4573: gcc -c conftest.c -o conftest2.o >&5 +configure:4577: $? = 0 +configure:4588: cc -c conftest.c >&5 +configure:4592: $? = 0 +configure:4600: cc -c conftest.c -o conftest2.o >&5 +configure:4604: $? = 0 +configure:4610: cc -c conftest.c -o conftest2.o >&5 +configure:4614: $? = 0 +configure:4632: result: yes +configure:4661: checking build system type +configure:4675: result: x86_64-unknown-linux-gnu +configure:4695: checking host system type +configure:4708: result: x86_64-unknown-linux-gnu +configure:4734: checking how to run the C preprocessor +configure:4765: gcc -E conftest.c +configure:4765: $? = 0 +configure:4779: gcc -E conftest.c +conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:4779: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| /* end confdefs.h. */ +| #include <ac_nonexistent.h> +configure:4804: result: gcc -E +configure:4824: gcc -E conftest.c +configure:4824: $? = 0 +configure:4838: gcc -E conftest.c +conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:4838: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| /* end confdefs.h. */ +| #include <ac_nonexistent.h> +configure:4867: checking for grep that handles long lines and -e +configure:4925: result: /bin/grep +configure:4930: checking for egrep +configure:4992: result: /bin/grep -E +configure:4997: checking for ANSI C header files +configure:5017: gcc -c -g -O2 conftest.c >&5 +configure:5017: $? = 0 +configure:5090: gcc -o conftest -g -O2 conftest.c >&5 +configure:5090: $? = 0 +configure:5090: ./conftest +configure:5090: $? = 0 +configure:5101: result: yes +configure:5114: checking for sys/types.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5114: checking for sys/stat.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5114: checking for stdlib.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5114: checking for string.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5114: checking for memory.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5114: checking for strings.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5114: checking for inttypes.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5114: checking for stdint.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5114: checking for unistd.h +configure:5114: gcc -c -g -O2 conftest.c >&5 +configure:5114: $? = 0 +configure:5114: result: yes +configure:5130: checking minix/config.h usability +configure:5130: gcc -c -g -O2 conftest.c >&5 +conftest.c:54:26: fatal error: minix/config.h: No such file or directory +compilation terminated. +configure:5130: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| #include <minix/config.h> +configure:5130: result: no +configure:5130: checking minix/config.h presence +configure:5130: gcc -E conftest.c +conftest.c:21:26: fatal error: minix/config.h: No such file or directory +compilation terminated. +configure:5130: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| /* end confdefs.h. */ +| #include <minix/config.h> +configure:5130: result: no +configure:5130: checking for minix/config.h +configure:5130: result: no +configure:5159: checking whether it is safe to define __EXTENSIONS__ +configure:5177: gcc -c -g -O2 conftest.c >&5 +configure:5177: $? = 0 +configure:5184: result: yes +configure:5204: checking for _LARGEFILE_SOURCE value needed for large files +configure:5223: gcc -o conftest -g -O2 conftest.c >&5 +configure:5223: $? = 0 +configure:5251: result: no +configure:5301: checking for gcc option to accept ISO C99 +configure:5450: gcc -c -g -O2 conftest.c >&5 +conftest.c:77:29: error: expected ';', ',' or ')' before 'text' +conftest.c: In function 'main': +conftest.c:131:18: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'newvar' +conftest.c:131:18: error: 'newvar' undeclared (first use in this function) +conftest.c:131:18: note: each undeclared identifier is reported only once for each function it appears in +conftest.c:141:3: error: 'for' loop initial declarations are only allowed in C99 mode +conftest.c:141:3: note: use option -std=c99 or -std=gnu99 to compile your code +configure:5450: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include <stdarg.h> +| #include <stdbool.h> +| #include <stdlib.h> +| #include <wchar.h> +| #include <stdio.h> +| +| // Check varargs macros. These examples are taken from C99 6.10.3.5. +| #define debug(...) fprintf (stderr, __VA_ARGS__) +| #define showlist(...) puts (#__VA_ARGS__) +| #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +| static void +| test_varargs_macros (void) +| { +| int x = 1234; +| int y = 5678; +| debug ("Flag"); +| debug ("X = %d\n", x); +| showlist (The first, second, and third items.); +| report (x>y, "x is %d but y is %d", x, y); +| } +| +| // Check long long types. +| #define BIG64 18446744073709551615ull +| #define BIG32 4294967295ul +| #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +| #if !BIG_OK +| your preprocessor is broken; +| #endif +| #if BIG_OK +| #else +| your preprocessor is broken; +| #endif +| static long long int bignum = -9223372036854775807LL; +| static unsigned long long int ubignum = BIG64; +| +| struct incomplete_array +| { +| int datasize; +| double data[]; +| }; +| +| struct named_init { +| int number; +| const wchar_t *name; +| double average; +| }; +| +| typedef const char *ccp; +| +| static inline int +| test_restrict (ccp restrict text) +| { +| // See if C++-style comments work. +| // Iterate through items via the restricted pointer. +| // Also check for declarations in for loops. +| for (unsigned int i = 0; *(text+i) != '\0'; ++i) +| continue; +| return 0; +| } +| +| // Check varargs and va_copy. +| static void +| test_varargs (const char *format, ...) +| { +| va_list args; +| va_start (args, format); +| va_list args_copy; +| va_copy (args_copy, args); +| +| const char *str; +| int number; +| float fnumber; +| +| while (*format) +| { +| switch (*format++) +| { +| case 's': // string +| str = va_arg (args_copy, const char *); +| break; +| case 'd': // int +| number = va_arg (args_copy, int); +| break; +| case 'f': // float +| fnumber = va_arg (args_copy, double); +| break; +| default: +| break; +| } +| } +| va_end (args_copy); +| va_end (args); +| } +| +| int +| main () +| { +| +| // Check bool. +| _Bool success = false; +| +| // Check restrict. +| if (test_restrict ("String literal") == 0) +| success = true; +| char *restrict newvar = "Another string"; +| +| // Check varargs. +| test_varargs ("s, d' f .", "string", 65, 34.234); +| test_varargs_macros (); +| +| // Check flexible array members. +| struct incomplete_array *ia = +| malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); +| ia->datasize = 10; +| for (int i = 0; i < ia->datasize; ++i) +| ia->data[i] = i * 1.234; +| +| // Check named initializers. +| struct named_init ni = { +| .number = 34, +| .name = L"Test wide string", +| .average = 543.34343, +| }; +| +| ni.number = 58; +| +| int dynamic_array[ni.number]; +| dynamic_array[ni.number - 1] = 543; +| +| // work around unused variable warnings +| return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' +| || dynamic_array[ni.number - 1] != 543); +| +| ; +| return 0; +| } +configure:5450: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:5450: $? = 0 +configure:5470: result: -std=gnu99 +configure:5572: checking for gcc -std=gnu99 option to accept ISO Standard C +configure:5583: result: -std=gnu99 +configure:5639: autobuild project... GNU M4 +configure:5645: autobuild revision... 1.4.13 +configure:5650: autobuild hostname... data-center +configure:5661: autobuild timestamp... 20161211T073412Z +configure:5685: checking for long long int +configure:5722: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:5722: $? = 0 +configure:5752: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:5752: $? = 0 +configure:5752: ./conftest +configure:5752: $? = 0 +configure:5767: result: yes +configure:5776: checking for unsigned long long int +configure:5813: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:5813: $? = 0 +configure:5821: result: yes +configure:5844: checking for working alloca.h +configure:5861: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:5861: $? = 0 +configure:5869: result: yes +configure:5877: checking for alloca +configure:5914: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:5914: $? = 0 +configure:5922: result: yes +configure:6078: checking for btowc +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for setrlimit +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for sigaltstack +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for mempcpy +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +conftest.c:57:6: warning: conflicting types for built-in function 'mempcpy' [enabled by default] +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for __fpending +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for fpurge +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +/tmp/cctNbJmk.o: In function `main': +/home/coreseek/coreseek-4.1-beta/m4-1.4.13/conftest.c:70: undefined reference to `fpurge' +collect2: ld returned 1 exit status +configure:6078: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| /* end confdefs.h. */ +| /* Define fpurge to an innocuous variant, in case <limits.h> declares fpurge. +| For example, HP-UX 11i <limits.h> declares gettimeofday. */ +| #define fpurge innocuous_fpurge +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char fpurge (); below. +| Prefer <limits.h> to <assert.h> if __STDC__ is defined, since +| <limits.h> exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include <limits.h> +| #else +| # include <assert.h> +| #endif +| +| #undef fpurge +| +| /* 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 fpurge (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub_fpurge || defined __stub___fpurge +| choke me +| #endif +| +| int +| main () +| { +| return fpurge (); +| ; +| return 0; +| } +configure:6078: result: no +configure:6078: checking for __fpurge +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for __freading +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for getdtablesize +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for gettimeofday +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for lstat +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for mbsinit +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for mbrtowc +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for pathconf +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for posix_spawn +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for isblank +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +conftest.c:68:6: warning: conflicting types for built-in function 'isblank' [enabled by default] +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for iswctype +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for wcscoll +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for sigaction +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for siginterrupt +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for pipe +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for vasnprintf +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +/tmp/ccxu26Og.o: In function `main': +/home/coreseek/coreseek-4.1-beta/m4-1.4.13/conftest.c:85: undefined reference to `vasnprintf' +collect2: ld returned 1 exit status +configure:6078: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| /* end confdefs.h. */ +| /* Define vasnprintf to an innocuous variant, in case <limits.h> declares vasnprintf. +| For example, HP-UX 11i <limits.h> declares gettimeofday. */ +| #define vasnprintf innocuous_vasnprintf +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char vasnprintf (); below. +| Prefer <limits.h> to <assert.h> if __STDC__ is defined, since +| <limits.h> exists even on freestanding compilers. */ +| +| #ifdef __STDC__ +| # include <limits.h> +| #else +| # include <assert.h> +| #endif +| +| #undef vasnprintf +| +| /* 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 vasnprintf (); +| /* The GNU C library defines this for functions which it implements +| to always fail with ENOSYS. Some functions are actually named +| something starting with __ and the normal name is an alias. */ +| #if defined __stub_vasnprintf || defined __stub___vasnprintf +| choke me +| #endif +| +| int +| main () +| { +| return vasnprintf (); +| ; +| return 0; +| } +configure:6078: result: no +configure:6078: checking for wcrtomb +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for iswcntrl +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +conftest.c:75:6: warning: conflicting types for built-in function 'iswcntrl' [enabled by default] +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for setenv +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6078: checking for wctob +configure:6078: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6078: $? = 0 +configure:6078: result: yes +configure:6091: checking for nl_langinfo and CODESET +configure:6107: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6107: $? = 0 +configure:6116: result: yes +configure:6127: checking for a traditional french locale +configure:6180: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6183: $? = 0 +configure:6220: result: none +configure:6233: checking for ucontext.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for unistd.h +configure:6233: result: yes +configure:6233: checking for errno.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for fcntl.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for float.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for stdio_ext.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for sys/time.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for math.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for sys/param.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for locale.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for sched.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for signal.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for spawn.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for stdarg.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for stdint.h +configure:6233: result: yes +configure:6233: checking for wchar.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for stdio.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for stdlib.h +configure:6233: result: yes +configure:6233: checking for sys/socket.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for string.h +configure:6233: result: yes +configure:6233: checking for sys/stat.h +configure:6233: result: yes +configure:6233: checking for sys/wait.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6233: checking for wctype.h +configure:6233: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:6233: $? = 0 +configure:6233: result: yes +configure:6271: checking for working C stack overflow detection +configure:6361: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6361: $? = 0 +configure:6361: ./conftest +configure:6361: $? = 0 +configure:6371: result: yes +configure:6379: checking for correct stack_t interpretation +configure:6438: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6438: $? = 0 +configure:6438: ./conftest +configure:6438: $? = 0 +configure:6448: result: yes +configure:6456: checking for precise C stack overflow detection +configure:6578: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:6578: $? = 0 +configure:6578: ./conftest +configure:6578: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| /* end confdefs.h. */ +| +| #include <unistd.h> +| #include <signal.h> +| #if HAVE_UCONTEXT_H +| # include <ucontext.h> +| #endif +| #if HAVE_SETRLIMIT +| # include <sys/types.h> +| # include <sys/time.h> +| # include <sys/resource.h> +| #endif +| #ifndef SIGSTKSZ +| # define SIGSTKSZ 16384 +| #endif +| +| static union +| { +| char buffer[2 * SIGSTKSZ]; +| long double ld; +| long u; +| void *p; +| } alternate_signal_stack; +| +| #if STACK_DIRECTION +| # define find_stack_direction(ptr) STACK_DIRECTION +| #else +| static int +| find_stack_direction (char const *addr) +| { +| char dummy; +| return (! addr ? find_stack_direction (&dummy) +| : addr < &dummy ? 1 : -1); +| } +| #endif +| +| static void +| segv_handler (int signo, siginfo_t *info, void *context) +| { +| if (0 < info->si_code) +| { +| /* For XSI heuristics to work, we need uc_stack to describe +| the interrupted stack (as on Solaris), and not the +| currently executing stack (as on Linux). */ +| ucontext_t const *user_context = context; +| char const *stack_min = user_context->uc_stack.ss_sp; +| size_t stack_size = user_context->uc_stack.ss_size; +| char const *faulting_address = info->si_addr; +| size_t s = faulting_address - stack_min; +| size_t page_size = sysconf (_SC_PAGESIZE); +| if (find_stack_direction (0) < 0) +| s += page_size; +| if (s < stack_size + page_size) +| _exit (0); +| } +| +| _exit (1); +| } +| +| static int +| c_stack_action () +| { +| stack_t st; +| struct sigaction act; +| int r; +| +| st.ss_flags = 0; +| /* Use the midpoint to avoid Irix sigaltstack bug. */ +| st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; +| st.ss_size = SIGSTKSZ; +| r = sigaltstack (&st, 0); +| if (r != 0) +| return r; +| +| sigemptyset (&act.sa_mask); +| act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; +| act.sa_sigaction = segv_handler; +| #if FAULT_YIELDS_SIGBUS +| if (sigaction (SIGBUS, &act, 0) < 0) +| return -1; +| #endif +| return sigaction (SIGSEGV, &act, 0); +| } +| static volatile int * +| recurse_1 (volatile int n, volatile int *p) +| { +| if (n >= 0) +| *recurse_1 (n + 1, p) += n; +| return p; +| } +| static int +| recurse (volatile int n) +| { +| int sum = 0; +| return *recurse_1 (n, &sum); +| } +| int +| main () +| { +| #if HAVE_SETRLIMIT && defined RLIMIT_STACK +| /* Before starting the endless recursion, try to be friendly +| to the user's machine. On some Linux 2.2.x systems, there +| is no stack limit for user processes at all. We don't want +| to kill such systems. */ +| struct rlimit rl; +| rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ +| setrlimit (RLIMIT_STACK, &rl); +| #endif +| +| return c_stack_action () || recurse (0); +| } +| +configure:6588: result: no +configure:6637: checking for ld used by GCC +configure:6701: result: /usr/bin/ld +configure:6708: checking if the linker (/usr/bin/ld) is GNU ld +configure:6721: result: yes +configure:6728: checking for shared library run path origin +configure:6741: result: done +configure:7310: checking for libsigsegv +configure:7330: gcc -std=gnu99 -o conftest -g -O2 conftest.c -lsigsegv >&5 +conftest.c:81:21: fatal error: sigsegv.h: No such file or directory +compilation terminated. +configure:7330: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| /* end confdefs.h. */ +| #include <sigsegv.h> +| int +| main () +| { +| sigsegv_deinstall_handler(); +| ; +| return 0; +| } +configure:7338: result: no, consider installing GNU libsigsegv +configure:7361: checking whether system is Windows or MSDOS +configure:7380: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:86:1: error: unknown type name 'neither' +conftest.c:86:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'nor' +configure:7380: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| /* end confdefs.h. */ +| +| int +| main () +| { +| #if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__ +| neither MSDOS nor Windows +| #endif +| ; +| return 0; +| } +configure:7388: result: no +configure:7456: checking whether // is distinct from / +configure:7485: result: no +configure:7544: checking whether the preprocessor supports include_next +configure:7582: gcc -std=gnu99 -c -g -O2 -Iconftestd1b -Iconftestd2 conftest.c >&5 +configure:7582: $? = 0 +configure:7603: result: yes +configure:7629: checking for complete errno.h +configure:7678: result: yes +configure:7944: checking whether strerror_r is declared +configure:7944: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:7944: $? = 0 +configure:7944: result: yes +configure:7957: checking for strerror_r +configure:7957: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:7957: $? = 0 +configure:7957: result: yes +configure:7966: checking whether strerror_r returns char * +configure:7990: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:7990: $? = 0 +configure:8028: result: yes +configure:8039: checking for inline +configure:8055: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8055: $? = 0 +configure:8063: result: inline +configure:8081: checking for mode_t +configure:8081: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8081: $? = 0 +configure:8081: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:123:21: error: expected expression before ')' token +configure:8081: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((mode_t))) +| return 0; +| ; +| return 0; +| } +configure:8081: result: yes +configure:8093: checking for sig_atomic_t +configure:8093: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8093: $? = 0 +configure:8093: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:92:27: error: expected expression before ')' token +configure:8093: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| /* end confdefs.h. */ +| #include <signal.h> +| +| int +| main () +| { +| if (sizeof ((sig_atomic_t))) +| return 0; +| ; +| return 0; +| } +configure:8093: result: yes +configure:8257: checking whether stdin defaults to large file offsets +configure:8281: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:8281: $? = 0 +configure:8289: result: yes +configure:8298: checking getopt.h usability +configure:8298: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8298: $? = 0 +configure:8298: result: yes +configure:8298: checking getopt.h presence +configure:8298: gcc -E conftest.c +configure:8298: $? = 0 +configure:8298: result: yes +configure:8298: checking for getopt.h +configure:8298: result: yes +configure:8315: checking for getopt_long_only +configure:8315: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:8315: $? = 0 +configure:8315: result: yes +configure:8329: checking whether optreset is declared +configure:8329: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:96:10: error: 'optreset' undeclared (first use in this function) +conftest.c:96:10: note: each undeclared identifier is reported only once for each function it appears in +configure:8329: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| /* end confdefs.h. */ +| #include <getopt.h> +| +| int +| main () +| { +| #ifndef optreset +| (void) optreset; +| #endif +| +| ; +| return 0; +| } +configure:8329: result: no +configure:8338: checking for working GNU getopt function +configure:8370: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:8370: $? = 0 +configure:8370: ./conftest +conftest: invalid option -- '+' +configure:8370: $? = 0 +configure:8380: result: yes +configure:8387: checking whether getenv is declared +configure:8387: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8387: $? = 0 +configure:8387: result: yes +configure:8398: checking for C/C++ restrict keyword +configure:8423: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8423: $? = 0 +configure:8431: result: __restrict +configure:8500: checking for struct timeval +configure:8520: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8520: $? = 0 +configure:8527: result: yes +configure:8551: checking where to find the exponent in a 'float' +configure:8628: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:8628: $? = 0 +configure:8628: ./conftest +configure:8628: $? = 0 +configure:8640: result: word 0 bit 23 +configure:8660: checking whether byte ordering is bigendian +configure:8675: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c:95:9: error: unknown type name 'not' +conftest.c:95:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' +conftest.c:95:15: error: unknown type name 'universal' +configure:8675: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| /* end confdefs.h. */ +| #ifndef __APPLE_CC__ +| not a universal capable compiler +| #endif +| typedef int dummy; +| +configure:8720: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8720: $? = 0 +configure:8738: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:101:4: error: unknown type name 'not' +conftest.c:101:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'endian' +configure:8738: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/param.h> +| +| int +| main () +| { +| #if BYTE_ORDER != BIG_ENDIAN +| not big endian +| #endif +| +| ; +| return 0; +| } +configure:8866: result: no +configure:8885: checking whether getc_unlocked is declared +configure:8885: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:8885: $? = 0 +configure:8885: result: yes +configure:8897: checking whether we are using the GNU C Library 2.1 or newer +configure:8924: result: yes +configure:9773: checking for multithread API to use +configure:9775: result: none +configure:9796: checking whether malloc, realloc, calloc are POSIX compliant +configure:9816: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:9816: $? = 0 +configure:9824: result: yes +configure:9868: checking for stdlib.h +configure:9868: result: yes +configure:9878: checking for GNU libc compatible malloc +configure:9902: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:9902: $? = 0 +configure:9902: ./conftest +configure:9902: $? = 0 +configure:9912: result: yes +configure:9930: checking for mbstate_t +configure:9947: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:9947: $? = 0 +configure:9954: result: yes +configure:9973: checking for a traditional japanese locale +configure:10030: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:10033: $? = 0 +configure:10075: result: none +configure:10083: checking for a transitional chinese locale +configure:10141: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:10144: $? = 0 +configure:10170: result: none +configure:10177: checking for a french Unicode locale +configure:10237: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:10240: $? = 0 +configure:10267: result: none +configure:10279: checking for special C compiler options needed for large files +configure:10324: result: no +configure:10330: checking for _FILE_OFFSET_BITS value needed for large files +configure:10355: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:10355: $? = 0 +configure:10387: result: no +configure:10480: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c:99:10: error: unknown type name 'not' +conftest.c:99:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'universal' +conftest.c:99:16: error: unknown type name 'universal' +configure:10480: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| /* end confdefs.h. */ +| #ifndef __APPLE_CC__ +| not a universal capable compiler +| #endif +| typedef int dummy; +| +configure:10553: checking whether posix_spawn works +configure:10693: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:10693: $? = 0 +configure:10868: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'parent_main': +conftest.c:165:11: warning: ignoring return value of 'freopen', declared with attribute warn_unused_result [-Wunused-result] +configure:10868: $? = 0 +configure:10868: ./conftest +configure:10868: $? = 0 +configure:10886: result: yes +configure:10980: checking for uid_t in sys/types.h +configure:10999: result: yes +configure:11014: checking whether snprintf is declared +configure:11014: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11014: $? = 0 +configure:11014: result: yes +configure:11029: checking for stdbool.h that conforms to C99 +configure:11112: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11112: $? = 0 +configure:11119: result: yes +configure:11121: checking for _Bool +configure:11121: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11121: $? = 0 +configure:11121: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:135:20: error: expected expression before ')' token +configure:11121: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((_Bool))) +| return 0; +| ; +| return 0; +| } +configure:11121: result: yes +configure:11150: checking for working strerror function +configure:11188: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:11188: $? = 0 +configure:11188: ./conftest +configure:11188: $? = 0 +configure:11199: result: yes +configure:11288: checking whether strndup is declared +configure:11288: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11288: $? = 0 +configure:11288: result: yes +configure:11299: checking whether strnlen is declared +configure:11299: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11299: $? = 0 +configure:11299: result: yes +configure:11310: checking whether strsignal is declared +configure:11310: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11310: $? = 0 +configure:11310: result: yes +configure:11321: checking whether sys_siglist is declared +configure:11321: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11321: $? = 0 +configure:11321: result: yes +configure:11339: checking whether stat file-mode macros are broken +configure:11366: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11366: $? = 0 +configure:11373: result: no +configure:11389: checking whether clearerr_unlocked is declared +configure:11389: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11389: $? = 0 +configure:11389: result: yes +configure:11400: checking whether feof_unlocked is declared +configure:11400: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11400: $? = 0 +configure:11400: result: yes +configure:11411: checking whether ferror_unlocked is declared +configure:11411: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11411: $? = 0 +configure:11411: result: yes +configure:11422: checking whether fflush_unlocked is declared +configure:11422: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11422: $? = 0 +configure:11422: result: yes +configure:11433: checking whether fgets_unlocked is declared +configure:11433: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11433: $? = 0 +configure:11433: result: yes +configure:11444: checking whether fputc_unlocked is declared +configure:11444: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11444: $? = 0 +configure:11444: result: yes +configure:11455: checking whether fputs_unlocked is declared +configure:11455: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11455: $? = 0 +configure:11455: result: yes +configure:11466: checking whether fread_unlocked is declared +configure:11466: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11466: $? = 0 +configure:11466: result: yes +configure:11477: checking whether fwrite_unlocked is declared +configure:11477: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11477: $? = 0 +configure:11477: result: yes +configure:11488: checking whether getchar_unlocked is declared +configure:11488: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11488: $? = 0 +configure:11488: result: yes +configure:11499: checking whether putc_unlocked is declared +configure:11499: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11499: $? = 0 +configure:11499: result: yes +configure:11510: checking whether putchar_unlocked is declared +configure:11510: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11510: $? = 0 +configure:11510: result: yes +configure:11524: checking for wchar_t +configure:11541: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11541: $? = 0 +configure:11548: result: yes +configure:11557: checking for wint_t +configure:11582: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11582: $? = 0 +configure:11589: result: yes +configure:11597: checking for size_t +configure:11597: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11597: $? = 0 +configure:11597: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:155:21: error: expected expression before ')' token +configure:11597: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((size_t))) +| return 0; +| ; +| return 0; +| } +configure:11597: result: yes +configure:11609: checking for inttypes.h +configure:11626: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11626: $? = 0 +configure:11633: result: yes +configure:11644: checking for stdint.h +configure:11661: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11661: $? = 0 +configure:11668: result: yes +configure:11681: checking for intmax_t +configure:11706: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:11706: $? = 0 +configure:11713: result: yes +configure:11735: checking whether printf supports size specifiers as in C99 +configure:11805: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:11805: $? = 0 +configure:11805: ./conftest +configure:11805: $? = 0 +configure:11816: result: yes +configure:11821: checking whether printf supports 'long double' arguments +configure:11859: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:11859: $? = 0 +configure:11859: ./conftest +configure:11859: $? = 0 +configure:11870: result: yes +configure:11875: checking whether printf supports infinite 'double' arguments +configure:11975: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:11975: $? = 0 +configure:11975: ./conftest +configure:11975: $? = 0 +configure:11986: result: yes +configure:12000: checking whether printf supports infinite 'long double' arguments +configure:12285: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12285: $? = 0 +configure:12285: ./conftest +configure:12285: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| /* end confdefs.h. */ +| +| +| #include <stdlib.h> +| #if defined __MACH__ && defined __APPLE__ +| /* Avoid a crash on MacOS X. */ +| #include <mach/mach.h> +| #include <mach/mach_error.h> +| #include <mach/thread_status.h> +| #include <mach/exception.h> +| #include <mach/task.h> +| #include <pthread.h> +| /* The exception port on which our thread listens. */ +| static mach_port_t our_exception_port; +| /* The main function of the thread listening for exceptions of type +| EXC_BAD_ACCESS. */ +| static void * +| mach_exception_thread (void *arg) +| { +| /* Buffer for a message to be received. */ +| struct { +| mach_msg_header_t head; +| mach_msg_body_t msgh_body; +| char data[1024]; +| } msg; +| mach_msg_return_t retval; +| /* Wait for a message on the exception port. */ +| retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), +| our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); +| if (retval != MACH_MSG_SUCCESS) +| abort (); +| exit (1); +| } +| static void +| nocrash_init (void) +| { +| mach_port_t self = mach_task_self (); +| /* Allocate a port on which the thread shall listen for exceptions. */ +| if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) +| == KERN_SUCCESS) { +| /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ +| if (mach_port_insert_right (self, our_exception_port, our_exception_port, +| MACH_MSG_TYPE_MAKE_SEND) +| == KERN_SUCCESS) { +| /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting +| for us. */ +| exception_mask_t mask = EXC_MASK_BAD_ACCESS; +| /* Create the thread listening on the exception port. */ +| pthread_attr_t attr; +| pthread_t thread; +| if (pthread_attr_init (&attr) == 0 +| && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 +| && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { +| pthread_attr_destroy (&attr); +| /* Replace the exception port info for these exceptions with our own. +| Note that we replace the exception port for the entire task, not only +| for a particular thread. This has the effect that when our exception +| port gets the message, the thread specific exception port has already +| been asked, and we don't need to bother about it. +| See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ +| task_set_exception_ports (self, mask, our_exception_port, +| EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); +| } +| } +| } +| } +| #else +| /* Avoid a crash on POSIX systems. */ +| #include <signal.h> +| /* A POSIX signal handler. */ +| static void +| exception_handler (int sig) +| { +| exit (1); +| } +| static void +| nocrash_init (void) +| { +| #ifdef SIGSEGV +| signal (SIGSEGV, exception_handler); +| #endif +| #ifdef SIGBUS +| signal (SIGBUS, exception_handler); +| #endif +| } +| #endif +| +| #include <float.h> +| #include <stdio.h> +| #include <string.h> +| static int +| strisnan (const char *string, size_t start_index, size_t end_index) +| { +| if (start_index < end_index) +| { +| if (string[start_index] == '-') +| start_index++; +| if (start_index + 3 <= end_index +| && memcmp (string + start_index, "nan", 3) == 0) +| { +| start_index += 3; +| if (start_index == end_index +| || (string[start_index] == '(' && string[end_index - 1] == ')')) +| return 1; +| } +| } +| return 0; +| } +| static char buf[10000]; +| static long double zeroL = 0.0L; +| int main () +| { +| nocrash_init(); +| if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0 +| || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) +| return 1; +| if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0 +| || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) +| return 1; +| if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0 +| || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) +| return 1; +| if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0 +| || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) +| return 1; +| if (sprintf (buf, "%Le", zeroL / zeroL) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0 +| || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) +| return 1; +| if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0 +| || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) +| return 1; +| if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +| /* Representation of an 80-bit 'long double' as an initializer for a sequence +| of 'unsigned int' words. */ +| # ifdef WORDS_BIGENDIAN +| # define LDBL80_WORDS(exponent,manthi,mantlo) { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), (unsigned int) (mantlo) << 16 } +| # else +| # define LDBL80_WORDS(exponent,manthi,mantlo) { mantlo, manthi, exponent } +| # endif +| { /* Quiet NaN. */ +| static union { unsigned int word[4]; long double value; } x = +| { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; +| if (sprintf (buf, "%Lf", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Le", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Lg", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| } +| { +| /* Signalling NaN. */ +| static union { unsigned int word[4]; long double value; } x = +| { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; +| if (sprintf (buf, "%Lf", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Le", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Lg", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| } +| { /* Pseudo-NaN. */ +| static union { unsigned int word[4]; long double value; } x = +| { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; +| if (sprintf (buf, "%Lf", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Le", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Lg", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| } +| { /* Pseudo-Infinity. */ +| static union { unsigned int word[4]; long double value; } x = +| { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; +| if (sprintf (buf, "%Lf", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Le", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Lg", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| } +| { /* Pseudo-Zero. */ +| static union { unsigned int word[4]; long double value; } x = +| { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; +| if (sprintf (buf, "%Lf", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Le", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Lg", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| } +| { /* Unnormalized number. */ +| static union { unsigned int word[4]; long double value; } x = +| { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; +| if (sprintf (buf, "%Lf", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Le", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Lg", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| } +| { /* Pseudo-Denormal. */ +| static union { unsigned int word[4]; long double value; } x = +| { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; +| if (sprintf (buf, "%Lf", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Le", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| if (sprintf (buf, "%Lg", x.value) < 0 +| || !strisnan (buf, 0, strlen (buf))) +| return 1; +| } +| #endif +| return 0; +| } +configure:12296: result: no +configure:12306: checking whether printf supports the 'a' and 'A' directives +configure:12392: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12392: $? = 0 +configure:12392: ./conftest +configure:12392: $? = 0 +configure:12403: result: yes +configure:12408: checking whether printf supports the 'F' directive +configure:12454: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12454: $? = 0 +configure:12454: ./conftest +configure:12454: $? = 0 +configure:12465: result: yes +configure:12470: checking whether printf supports the 'n' directive +configure:12504: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12504: $? = 0 +configure:12504: ./conftest +./configure: line 2079: 11775 Aborted ./conftest$ac_exeext +configure:12504: $? = 134 +configure: program exited with status 134 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| /* end confdefs.h. */ +| +| #include <stdio.h> +| #include <string.h> +| static char fmtstring[10]; +| static char buf[100]; +| int main () +| { +| int count = -1; +| /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) +| support %n in format strings in read-only memory but not in writable +| memory. */ +| strcpy (fmtstring, "%d %n"); +| if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 +| || strcmp (buf, "123 ") != 0 +| || count != 4) +| return 1; +| return 0; +| } +configure:12515: result: no +configure:12520: checking whether printf supports the 'ls' directive +configure:12590: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12590: $? = 0 +configure:12590: ./conftest +configure:12590: $? = 0 +configure:12601: result: yes +configure:12606: checking whether printf supports POSIX/XSI format strings with positions +configure:12638: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12638: $? = 0 +configure:12638: ./conftest +configure:12638: $? = 0 +configure:12649: result: yes +configure:12654: checking whether printf supports the grouping flag +configure:12684: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12684: $? = 0 +configure:12684: ./conftest +configure:12684: $? = 0 +configure:12695: result: yes +configure:12700: checking whether printf supports the left-adjust flag correctly +configure:12733: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12733: $? = 0 +configure:12733: ./conftest +configure:12733: $? = 0 +configure:12744: result: yes +configure:12749: checking whether printf supports the zero flag correctly +configure:12782: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12782: $? = 0 +configure:12782: ./conftest +configure:12782: $? = 0 +configure:12793: result: yes +configure:12798: checking whether printf supports large precisions +configure:12831: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12831: $? = 0 +configure:12831: ./conftest +configure:12831: $? = 0 +configure:12842: result: yes +configure:12848: checking whether printf survives out-of-memory conditions +configure:12991: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:12994: $? = 0 +configure:13042: result: yes +configure:13054: checking whether ungetc works on arbitrary bytes +configure:13088: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:13088: $? = 0 +configure:13088: ./conftest +configure:13088: $? = 0 +configure:13099: result: yes +configure:13109: checking whether alarm is declared +configure:13109: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:13109: $? = 0 +configure:13109: result: yes +configure:13155: checking for alloca as a compiler built-in +configure:13179: result: yes +configure:13195: checking whether to enable assertions +configure:13212: result: yes +configure:13225: checking whether btowc(EOF) is correct +configure:13273: result: guessing yes +configure:13312: checking whether sigaltstack is declared +configure:13312: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:13312: $? = 0 +configure:13312: result: yes +configure:13327: checking for stack_t +configure:13327: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:13327: $? = 0 +configure:13327: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:131:22: error: expected expression before ')' token +configure:13327: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| /* end confdefs.h. */ +| #include <signal.h> +| +| int +| main () +| { +| if (sizeof ((stack_t))) +| return 0; +| ; +| return 0; +| } +configure:13327: result: yes +configure:13449: checking whether // is distinct from / +configure:13478: result: no +configure:13491: checking if environ is properly declared +configure:13509: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c:130:34: error: conflicting types for 'environ' +/usr/include/unistd.h:546:15: note: previous declaration of 'environ' was here +configure:13509: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| /* end confdefs.h. */ +| #include <unistd.h> +| extern struct { int foo; } environ; +| int +| main () +| { +| environ.foo = 1; +| ; +| return 0; +| } +configure:13517: result: yes +configure:13548: checking for error_at_line +configure:13564: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:13564: $? = 0 +configure:13572: result: yes +configure:13627: checking for working fcntl.h +configure:13683: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:13683: $? = 0 +configure:13683: ./conftest +configure:13683: $? = 0 +configure:13698: result: yes +configure:13769: checking whether fflush works on input streams +configure:13827: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:13827: $? = 0 +configure:13827: ./conftest +configure:13827: $? = 7 +configure: program exited with status 7 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| /* end confdefs.h. */ +| +| #include <stdio.h> +| #include <unistd.h> +| +| int +| main () +| { +| FILE *f = fopen ("conftest.txt", "r"); +| char buffer[10]; +| int fd; +| int c; +| if (f == NULL) +| return 1; +| fd = fileno (f); +| if (fd < 0 || fread (buffer, 1, 5, f) != 5) +| return 2; +| /* For deterministic results, ensure f read a bigger buffer. */ +| if (lseek (fd, 0, SEEK_CUR) == 5) +| return 3; +| /* POSIX requires fflush-fseek to set file offset of fd. This fails +| on BSD systems and on mingw. */ +| if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0) +| return 4; +| if (lseek (fd, 0, SEEK_CUR) != 5) +| return 5; +| /* Verify behaviour of fflush after ungetc. See +| <http://www.opengroup.org/austin/aardvark/latest/xshbug3.txt> */ +| /* Verify behaviour of fflush after a backup ungetc. This fails on +| mingw. */ +| c = fgetc (f); +| ungetc (c, f); +| fflush (f); +| if (fgetc (f) != c) +| return 6; +| /* Verify behaviour of fflush after a non-backup ungetc. This fails +| on glibc 2.8 and on BSD systems. */ +| c = fgetc (f); +| ungetc ('@', f); +| fflush (f); +| if (fgetc (f) != c) +| return 7; +| return 0; +| +| ; +| return 0; +| } +configure:13839: result: no +configure:13955: checking whether fopen recognizes a trailing slash +configure:13980: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:13980: $? = 0 +configure:13980: ./conftest +configure:13980: $? = 0 +configure:13992: result: yes +configure:14050: checking whether __fpending is declared +configure:14050: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:14050: $? = 0 +configure:14050: result: yes +configure:14151: checking whether fpurge is declared +configure:14151: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:140:10: error: 'fpurge' undeclared (first use in this function) +conftest.c:140:10: note: each undeclared identifier is reported only once for each function it appears in +configure:14151: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| +| int +| main () +| { +| #ifndef fpurge +| (void) fpurge; +| #endif +| +| ; +| return 0; +| } +configure:14151: result: no +configure:14169: checking whether frexp() can be used without linking with libm +configure:14187: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:14187: $? = 0 +configure:14196: result: yes +configure:14201: checking whether frexp works +configure:14258: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:171:5: warning: passing argument 2 of 'memcmp' discards 'volatile' qualifier from pointer target type [enabled by default] +/usr/include/string.h:68:12: note: expected 'const void *' but argument is of type 'volatile double *' +configure:14258: $? = 0 +configure:14258: ./conftest +configure:14258: $? = 0 +configure:14269: result: yes +configure:14303: checking whether frexpl() can be used without linking with libm +configure:14321: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:14321: $? = 0 +configure:14330: result: yes +configure:14335: checking whether frexpl works +configure:14423: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:14423: $? = 0 +configure:14423: ./conftest +configure:14423: $? = 0 +configure:14434: result: yes +configure:14449: checking whether frexpl is declared +configure:14449: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:14449: $? = 0 +configure:14449: result: yes +configure:14482: checking for fseeko +configure:14499: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:14499: $? = 0 +configure:14508: result: yes +configure:14554: checking for ftello +configure:14571: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:141:8: warning: ignoring return value of 'ftello', declared with attribute warn_unused_result [-Wunused-result] +configure:14571: $? = 0 +configure:14580: result: yes +configure:14684: checking for gettimeofday with POSIX signature +configure:14706: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:144:60: warning: initialization from incompatible pointer type [enabled by default] +configure:14706: $? = 0 +configure:14713: result: yes +configure:14719: checking whether gettimeofday clobbers localtime buffer +configure:14751: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:14751: $? = 0 +configure:14751: ./conftest +configure:14751: $? = 0 +configure:14761: result: no +configure:14868: checking whether the compiler generally respects inline +configure:14889: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:14889: $? = 0 +configure:14898: result: yes +configure:14908: checking whether isnan(double) can be used without linking with libm +configure:14933: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:14933: $? = 0 +configure:14942: result: yes +configure:15312: checking whether isnan(float) can be used without linking with libm +configure:15337: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:15337: $? = 0 +configure:15346: result: yes +configure:15353: checking whether isnan(float) works +configure:15419: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:15419: $? = 0 +configure:15419: ./conftest +configure:15419: $? = 0 +configure:15430: result: yes +configure:15569: checking whether isnan(long double) can be used without linking with libm +configure:15594: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:15594: $? = 0 +configure:15603: result: yes +configure:15611: checking whether isnanl works +configure:15745: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:15745: $? = 0 +configure:15745: ./conftest +configure:15745: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| /* end confdefs.h. */ +| +| #include <float.h> +| #include <limits.h> +| #include <math.h> +| #if __GNUC__ >= 4 +| # undef isnanl +| # define isnanl(x) __builtin_isnanl ((long double)(x)) +| #elif defined isnan +| # undef isnanl +| # define isnanl(x) isnan ((long double)(x)) +| #endif +| #define NWORDS ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +| typedef union { unsigned int word[NWORDS]; long double value; } +| memory_long_double; +| /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the +| runtime type conversion. */ +| #ifdef __sgi +| static long double NaNl () +| { +| double zero = 0.0; +| return zero / zero; +| } +| #else +| # define NaNl() (0.0L / 0.0L) +| #endif +| int main () +| { +| memory_long_double m; +| unsigned int i; +| +| if (!isnanl (NaNl ())) +| return 1; +| +| /* The isnanl function should be immune against changes in the sign bit and +| in the mantissa bits. The xor operation twiddles a bit that can only be +| a sign bit or a mantissa bit (since the exponent never extends to +| bit 31). */ +| m.value = NaNl (); +| m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +| for (i = 0; i < NWORDS; i++) +| m.word[i] |= 1; +| if (!isnanl (m.value)) +| return 1; +| +| #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +| /* Representation of an 80-bit 'long double' as an initializer for a sequence +| of 'unsigned int' words. */ +| # ifdef WORDS_BIGENDIAN +| # define LDBL80_WORDS(exponent,manthi,mantlo) { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), (unsigned int) (mantlo) << 16 } +| # else +| # define LDBL80_WORDS(exponent,manthi,mantlo) { mantlo, manthi, exponent } +| # endif +| { /* Quiet NaN. */ +| static memory_long_double x = +| { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; +| if (!isnanl (x.value)) +| return 1; +| } +| { +| /* Signalling NaN. */ +| static memory_long_double x = +| { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; +| if (!isnanl (x.value)) +| return 1; +| } +| /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, +| Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in +| Intel IA-64 Architecture Software Developer's Manual, Volume 1: +| Application Architecture. +| Table 5-2 "Floating-Point Register Encodings" +| Figure 5-6 "Memory to Floating-Point Register Data Translation" +| */ +| { /* Pseudo-NaN. */ +| static memory_long_double x = +| { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; +| if (!isnanl (x.value)) +| return 1; +| } +| { /* Pseudo-Infinity. */ +| static memory_long_double x = +| { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; +| if (!isnanl (x.value)) +| return 1; +| } +| { /* Pseudo-Zero. */ +| static memory_long_double x = +| { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; +| if (!isnanl (x.value)) +| return 1; +| } +| { /* Unnormalized number. */ +| static memory_long_double x = +| { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; +| if (!isnanl (x.value)) +| return 1; +| } +| { /* Pseudo-Denormal. */ +| static memory_long_double x = +| { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; +| if (!isnanl (x.value)) +| return 1; +| } +| #endif +| +| return 0; +| } +configure:15756: result: no +configure:15782: checking where to find the exponent in a 'long double' +configure:15862: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:15862: $? = 0 +configure:15862: ./conftest +configure:15862: $? = 0 +configure:15874: result: word 2 bit 0 +configure:16386: checking for libsigsegv +configure:16414: result: no, consider installing GNU libsigsegv +configure:16488: checking whether lseek detects pipes +configure:16506: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:16506: $? = 0 +configure:16536: result: yes +configure:16566: checking whether lstat dereferences a symlink specified with a trailing slash +configure:16592: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:16592: $? = 0 +configure:16592: ./conftest +configure:16592: $? = 0 +configure:16609: result: yes +configure:16645: checking for stdlib.h +configure:16645: result: yes +configure:16655: checking for GNU libc compatible malloc +configure:16689: result: yes +configure:16793: checking whether NAN macro works +configure:16816: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:16816: $? = 0 +configure:16823: result: yes +configure:16828: checking whether HUGE_VAL works +configure:16846: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:16846: $? = 0 +configure:16853: result: yes +configure:16873: checking whether mbrtowc handles incomplete characters +configure:16926: result: guessing yes +configure:16932: checking whether mbrtowc works as well as mbtowc +configure:16988: result: guessing yes +configure:17021: checking whether mbrtowc handles a NULL string argument +configure:17076: result: guessing yes +configure:17083: checking whether mbrtowc has a correct return value +configure:17155: result: guessing yes +configure:17161: checking whether mbrtowc returns 0 when parsing a NUL character +configure:17213: result: guessing yes +configure:17279: checking whether mbrtowc handles incomplete characters +configure:17332: result: guessing yes +configure:17338: checking whether mbrtowc works as well as mbtowc +configure:17394: result: guessing yes +configure:17459: checking for mkdtemp +configure:17459: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:17459: $? = 0 +configure:17459: result: yes +configure:17487: checking for working mkstemp +configure:17521: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:17521: $? = 0 +configure:17521: ./conftest +configure:17521: $? = 0 +configure:17533: result: yes +configure:17569: checking for obstacks +configure:17590: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:17590: $? = 0 +configure:17598: result: yes +configure:17643: checking whether open recognizes a trailing slash +configure:17670: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:17670: $? = 0 +configure:17670: ./conftest +configure:17670: $? = 0 +configure:17682: result: yes +configure:18002: checking whether frexp can be used without linking with libm +configure:18030: result: yes +configure:18035: checking whether frexp works +configure:18103: result: yes +configure:18115: checking whether ldexp can be used without linking with libm +configure:18134: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:18134: $? = 0 +configure:18143: result: yes +configure:18153: checking whether frexpl can be used without linking with libm +configure:18181: result: yes +configure:18186: checking whether frexpl works +configure:18285: result: yes +configure:18300: checking whether frexpl is declared +configure:18300: result: yes +configure:18310: checking whether ldexpl can be used without linking with libm +configure:18329: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:18329: $? = 0 +configure:18338: result: yes +configure:18343: checking whether ldexpl works +configure:18370: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:18370: $? = 0 +configure:18370: ./conftest +configure:18370: $? = 0 +configure:18381: result: yes +configure:18389: checking whether ldexpl is declared +configure:18389: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:18389: $? = 0 +configure:18389: result: yes +configure:18428: checking for rawmemchr +configure:18428: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:18428: $? = 0 +configure:18428: result: yes +configure:18469: checking for working re_compile_pattern +configure:18610: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:18610: $? = 0 +configure:18610: ./conftest +configure:18610: $? = 1 +configure: program exited with status 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define LDBL_EXPBIT0_WORD 2 +| #define LDBL_EXPBIT0_BIT 0 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define GNULIB_MALLOC_GNU 1 +| #define HAVE_MALLOC_POSIX 1 +| #define HAVE_MKDTEMP 1 +| #define HAVE_OBSTACK 1 +| #define GNULIB_OPEN 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define HAVE_RAWMEMCHR 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| #if HAVE_LOCALE_H +| #include <locale.h> +| #endif +| #include <limits.h> +| #include <regex.h> +| +| int +| main () +| { +| static struct re_pattern_buffer regex; +| unsigned char folded_chars[UCHAR_MAX + 1]; +| int i; +| const char *s; +| struct re_registers regs; +| +| #if HAVE_LOCALE_H +| /* http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html +| This test needs valgrind to catch the bug on Debian +| GNU/Linux 3.1 x86, but it might catch the bug better +| on other platforms and it shouldn't hurt to try the +| test here. */ +| if (setlocale (LC_ALL, "en_US.UTF-8")) +| { +| static char const pat[] = "insert into"; +| static char const data[] = +| "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; +| re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE +| | RE_ICASE); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern (pat, sizeof pat - 1, ®ex); +| if (s) +| return 1; +| if (re_search (®ex, data, sizeof data - 1, +| 0, sizeof data - 1, ®s) +| != -1) +| return 1; +| if (! setlocale (LC_ALL, "C")) +| return 1; +| } +| #endif +| +| /* This test is from glibc bug 3957, reported by Andrew Mackey. */ +| re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("a[^x]b", 6, ®ex); +| if (s) +| return 1; +| +| /* This should fail, but succeeds for glibc-2.5. */ +| if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) +| return 1; +| +| /* This regular expression is from Spencer ere test number 75 +| in grep-2.3. */ +| re_set_syntax (RE_SYNTAX_POSIX_EGREP); +| memset (®ex, 0, sizeof regex); +| for (i = 0; i <= UCHAR_MAX; i++) +| folded_chars[i] = i; +| regex.translate = folded_chars; +| s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); +| /* This should fail with _Invalid character class name_ error. */ +| if (!s) +| return 1; +| +| /* This should succeed, but does not for glibc-2.1.3. */ +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("{1", 2, ®ex); +| +| if (s) +| return 1; +| +| /* The following example is derived from a problem report +| against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("[an\371]*n", 7, ®ex); +| if (s) +| return 1; +| +| /* This should match, but does not for glibc-2.2.1. */ +| if (re_match (®ex, "an", 2, 0, ®s) != 2) +| return 1; +| +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("x", 1, ®ex); +| if (s) +| return 1; +| +| /* glibc-2.2.93 does not work with a negative RANGE argument. */ +| if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) +| return 1; +| +| /* The version of regex.c in older versions of gnulib +| ignored RE_ICASE. Detect that problem too. */ +| re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("x", 1, ®ex); +| if (s) +| return 1; +| +| if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) +| return 1; +| +| /* Catch a bug reported by Vin Shelton in +| http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html +| */ +| re_set_syntax (RE_SYNTAX_POSIX_BASIC +| & ~RE_CONTEXT_INVALID_DUP +| & ~RE_NO_EMPTY_RANGES); +| memset (®ex, 0, sizeof regex); +| s = re_compile_pattern ("[[:alnum:]_-]\\+$", 16, ®ex); +| if (s) +| return 1; +| +| /* REG_STARTEND was added to glibc on 2004-01-15. +| Reject older versions. */ +| if (! REG_STARTEND) +| return 1; +| +| /* Reject hosts whose regoff_t values are too narrow. +| These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t +| and 32-bit int. */ +| if (sizeof (regoff_t) < sizeof (ptrdiff_t) +| || sizeof (regoff_t) < sizeof (ssize_t)) +| return 1; +| +| return 0; +| ; +| return 0; +| } +configure:18620: result: no +configure:18696: checking libintl.h usability +configure:18696: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:18696: $? = 0 +configure:18696: result: yes +configure:18696: checking libintl.h presence +configure:18696: gcc -E conftest.c +configure:18696: $? = 0 +configure:18696: result: yes +configure:18696: checking for libintl.h +configure:18696: result: yes +configure:18707: checking whether isblank is declared +configure:18707: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:18707: $? = 0 +configure:18707: result: yes +configure:18738: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:18738: $? = 0 +configure:18814: checking for struct sigaction.sa_sigaction +configure:18814: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:18814: $? = 0 +configure:18814: result: yes +configure:18917: checking for volatile sig_atomic_t +configure:18917: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:18917: $? = 0 +configure:18917: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:181:36: error: expected expression before ')' token +configure:18917: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define LDBL_EXPBIT0_WORD 2 +| #define LDBL_EXPBIT0_BIT 0 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define GNULIB_MALLOC_GNU 1 +| #define HAVE_MALLOC_POSIX 1 +| #define HAVE_MKDTEMP 1 +| #define HAVE_OBSTACK 1 +| #define GNULIB_OPEN 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define HAVE_RAWMEMCHR 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| /* end confdefs.h. */ +| +| #include <signal.h> +| +| +| int +| main () +| { +| if (sizeof ((volatile sig_atomic_t))) +| return 0; +| ; +| return 0; +| } +configure:18917: result: yes +configure:18930: checking for signbit macro +configure:19023: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:19023: $? = 0 +configure:19023: ./conftest +configure:19023: $? = 0 +configure:19034: result: yes +configure:19036: checking for signbit compiler built-ins +configure:19126: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:19126: $? = 0 +configure:19126: ./conftest +configure:19126: $? = 0 +configure:19137: result: yes +configure:19654: checking for sigprocmask +configure:19654: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:19654: $? = 0 +configure:19654: result: yes +configure:19703: checking for stdint.h +configure:19703: result: yes +configure:19713: checking for SIZE_MAX +configure:19785: result: yes +configure:19800: checking for snprintf +configure:19800: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +conftest.c:198:6: warning: conflicting types for built-in function 'snprintf' [enabled by default] +configure:19800: $? = 0 +configure:19800: result: yes +configure:19812: checking whether snprintf respects a size of 1 +configure:19832: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:19832: $? = 0 +configure:19832: ./conftest +configure:19832: $? = 0 +configure:19843: result: yes +configure:19939: checking for ssize_t +configure:19956: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:19956: $? = 0 +configure:19963: result: yes +configure:19974: checking for va_copy +configure:19995: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:19995: $? = 0 +configure:20003: result: yes +configure:20219: checking whether stdint.h conforms to C99 +configure:20388: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:20388: $? = 0 +configure:20470: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:20470: $? = 0 +configure:20470: ./conftest +configure:20470: $? = 0 +configure:20482: result: yes +configure:20922: checking for random.h +configure:20922: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c:210:20: fatal error: random.h: No such file or directory +compilation terminated. +configure:20922: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define LDBL_EXPBIT0_WORD 2 +| #define LDBL_EXPBIT0_BIT 0 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define GNULIB_MALLOC_GNU 1 +| #define HAVE_MALLOC_POSIX 1 +| #define HAVE_MKDTEMP 1 +| #define HAVE_OBSTACK 1 +| #define GNULIB_OPEN 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define HAVE_RAWMEMCHR 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_SNPRINTF 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| +| #include <random.h> +configure:20922: result: no +configure:20939: checking for struct random_data +configure:20939: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:20939: $? = 0 +configure:20939: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:185:33: error: expected expression before ')' token +configure:20939: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define LDBL_EXPBIT0_WORD 2 +| #define LDBL_EXPBIT0_BIT 0 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define GNULIB_MALLOC_GNU 1 +| #define HAVE_MALLOC_POSIX 1 +| #define HAVE_MKDTEMP 1 +| #define HAVE_OBSTACK 1 +| #define GNULIB_OPEN 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define HAVE_RAWMEMCHR 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_SNPRINTF 1 +| /* end confdefs.h. */ +| #include <stdlib.h> +| #if HAVE_RANDOM_H +| # include <random.h> +| #endif +| +| +| int +| main () +| { +| if (sizeof ((struct random_data))) +| return 0; +| ; +| return 0; +| } +configure:20939: result: yes +configure:20983: checking for strchrnul +configure:20983: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:20983: $? = 0 +configure:20983: result: yes +configure:21043: checking for working strndup +configure:21093: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:21093: $? = 0 +configure:21093: ./conftest +configure:21093: $? = 0 +configure:21103: result: yes +configure:21137: checking for working strnlen +configure:21171: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:21171: $? = 0 +configure:21171: ./conftest +configure:21171: $? = 0 +configure:21181: result: yes +configure:21221: checking for strsignal +configure:21221: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:21221: $? = 0 +configure:21221: result: yes +configure:21231: checking whether strsignal always returns a string +configure:21255: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:21255: $? = 0 +configure:21255: ./conftest +configure:21255: $? = 0 +configure:21265: result: yes +configure:21308: checking whether strstr works in linear time +configure:21376: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:21376: $? = 0 +configure:21376: ./conftest +./configure: line 2079: 12569 Alarm clock ./conftest$ac_exeext +configure:21376: $? = 142 +configure: program exited with status 142 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define LDBL_EXPBIT0_WORD 2 +| #define LDBL_EXPBIT0_BIT 0 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define GNULIB_MALLOC_GNU 1 +| #define HAVE_MALLOC_POSIX 1 +| #define HAVE_MKDTEMP 1 +| #define HAVE_OBSTACK 1 +| #define GNULIB_OPEN 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define HAVE_RAWMEMCHR 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_STRCHRNUL 1 +| #define HAVE_STRNDUP 1 +| #define HAVE_STRSIGNAL 1 +| /* end confdefs.h. */ +| +| #include <signal.h> /* for signal */ +| #include <string.h> /* for memmem */ +| #include <stdlib.h> /* for malloc */ +| #include <unistd.h> /* for alarm */ +| +| int +| main () +| { +| size_t m = 1000000; +| char *haystack = (char *) malloc (2 * m + 2); +| char *needle = (char *) malloc (m + 2); +| void *result = 0; +| /* Failure to compile this test due to missing alarm is okay, +| since all such platforms (mingw) also have quadratic strstr. */ +| signal (SIGALRM, SIG_DFL); +| alarm (5); +| /* Check for quadratic performance. */ +| if (haystack && needle) +| { +| memset (haystack, 'A', 2 * m); +| haystack[2 * m] = 'B'; +| haystack[2 * m + 1] = 0; +| memset (needle, 'A', m); +| needle[m] = 'B'; +| needle[m + 1] = 0; +| result = strstr (haystack, needle); +| } +| return !result; +| ; +| return 0; +| } +configure:21387: result: no +configure:21409: checking for working strtod +configure:21450: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:235:12: warning: ignoring return value of 'strtod', declared with attribute warn_unused_result [-Wunused-result] +configure:21450: $? = 0 +configure:21450: ./conftest +configure:21450: $? = 0 +configure:21460: result: yes +configure:21531: checking whether strtod obeys C99 +configure:21599: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:21599: $? = 0 +configure:21599: ./conftest +configure:21599: $? = 0 +configure:21609: result: yes +configure:21693: checking for strtol +configure:21693: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:21693: $? = 0 +configure:21693: result: yes +configure:21770: checking for nlink_t +configure:21770: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:21770: $? = 0 +configure:21770: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:187:22: error: expected expression before ')' token +configure:21770: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define LDBL_EXPBIT0_WORD 2 +| #define LDBL_EXPBIT0_BIT 0 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define GNULIB_MALLOC_GNU 1 +| #define HAVE_MALLOC_POSIX 1 +| #define HAVE_MKDTEMP 1 +| #define HAVE_OBSTACK 1 +| #define GNULIB_OPEN 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define HAVE_RAWMEMCHR 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_STRCHRNUL 1 +| #define HAVE_STRNDUP 1 +| #define HAVE_STRSIGNAL 1 +| #define HAVE_STRTOL 1 +| /* end confdefs.h. */ +| #include <sys/types.h> +| #include <sys/stat.h> +| +| int +| main () +| { +| if (sizeof ((nlink_t))) +| return 0; +| ; +| return 0; +| } +configure:21770: result: yes +configure:21866: checking for __secure_getenv +configure:21866: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:21866: $? = 0 +configure:21866: result: yes +configure:22046: checking for ptrdiff_t +configure:22046: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:22046: $? = 0 +configure:22046: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:219:24: error: expected expression before ')' token +configure:22046: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define LDBL_EXPBIT0_WORD 2 +| #define LDBL_EXPBIT0_BIT 0 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define GNULIB_MALLOC_GNU 1 +| #define HAVE_MALLOC_POSIX 1 +| #define HAVE_MKDTEMP 1 +| #define HAVE_OBSTACK 1 +| #define GNULIB_OPEN 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define HAVE_RAWMEMCHR 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_STRCHRNUL 1 +| #define HAVE_STRNDUP 1 +| #define HAVE_STRSIGNAL 1 +| #define HAVE_STRTOL 1 +| #define HAVE___SECURE_GETENV 1 +| #define USE_UNLOCKED_IO 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| #ifdef HAVE_SYS_TYPES_H +| # include <sys/types.h> +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include <sys/stat.h> +| #endif +| #ifdef STDC_HEADERS +| # include <stdlib.h> +| # include <stddef.h> +| #else +| # ifdef HAVE_STDLIB_H +| # include <stdlib.h> +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include <memory.h> +| # endif +| # include <string.h> +| #endif +| #ifdef HAVE_STRINGS_H +| # include <strings.h> +| #endif +| #ifdef HAVE_INTTYPES_H +| # include <inttypes.h> +| #endif +| #ifdef HAVE_STDINT_H +| # include <stdint.h> +| #endif +| #ifdef HAVE_UNISTD_H +| # include <unistd.h> +| #endif +| int +| main () +| { +| if (sizeof ((ptrdiff_t))) +| return 0; +| ; +| return 0; +| } +configure:22046: result: yes +configure:22066: checking for snprintf +configure:22066: result: yes +configure:22066: checking for strnlen +configure:22066: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:22066: $? = 0 +configure:22066: result: yes +configure:22066: checking for wcslen +configure:22066: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:22066: $? = 0 +configure:22066: result: yes +configure:22066: checking for wcsnlen +configure:22066: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:22066: $? = 0 +configure:22066: result: yes +configure:22066: checking for mbrtowc +configure:22066: result: yes +configure:22066: checking for wcrtomb +configure:22066: result: yes +configure:22076: checking whether _snprintf is declared +configure:22076: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:195:10: error: '_snprintf' undeclared (first use in this function) +conftest.c:195:10: note: each undeclared identifier is reported only once for each function it appears in +configure:22076: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "GNU M4" +| #define PACKAGE_TARNAME "m4" +| #define PACKAGE_VERSION "1.4.13" +| #define PACKAGE_STRING "GNU M4 1.4.13" +| #define PACKAGE_BUGREPORT "bug-m4@gnu.org" +| #define PACKAGE_URL "http://www.gnu.org/software/m4/" +| #define PACKAGE "m4" +| #define VERSION "1.4.13" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define __EXTENSIONS__ 1 +| #define _ALL_SOURCE 1 +| #define _GNU_SOURCE 1 +| #define _POSIX_PTHREAD_SEMANTICS 1 +| #define _TANDEM_SOURCE 1 +| #define HAVE_FSEEKO 1 +| #define HAVE_LONG_LONG_INT 1 +| #define HAVE_UNSIGNED_LONG_LONG_INT 1 +| #define HAVE_ALLOCA_H 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_BTOWC 1 +| #define HAVE_SETRLIMIT 1 +| #define HAVE_SIGALTSTACK 1 +| #define HAVE_MEMPCPY 1 +| #define HAVE___FPENDING 1 +| #define HAVE___FPURGE 1 +| #define HAVE___FREADING 1 +| #define HAVE_GETDTABLESIZE 1 +| #define HAVE_GETTIMEOFDAY 1 +| #define HAVE_LSTAT 1 +| #define HAVE_MBSINIT 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_PATHCONF 1 +| #define HAVE_POSIX_SPAWN 1 +| #define HAVE_ISBLANK 1 +| #define HAVE_ISWCTYPE 1 +| #define HAVE_WCSCOLL 1 +| #define HAVE_SIGACTION 1 +| #define HAVE_SIGINTERRUPT 1 +| #define HAVE_PIPE 1 +| #define HAVE_WCRTOMB 1 +| #define HAVE_ISWCNTRL 1 +| #define HAVE_SETENV 1 +| #define HAVE_WCTOB 1 +| #define HAVE_LANGINFO_CODESET 1 +| #define HAVE_UCONTEXT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_FCNTL_H 1 +| #define HAVE_FLOAT_H 1 +| #define HAVE_STDIO_EXT_H 1 +| #define HAVE_SYS_TIME_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SYS_PARAM_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_SCHED_H 1 +| #define HAVE_SIGNAL_H 1 +| #define HAVE_SPAWN_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_WCHAR_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_SYS_SOCKET_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_WCTYPE_H 1 +| #define FAULT_YIELDS_SIGBUS 0 +| #define HAVE_STACK_OVERFLOW_HANDLING 1 +| #define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +| #define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +| #define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +| #define HAVE_DECL_STRERROR_R 1 +| #define HAVE_STRERROR_R 1 +| #define STRERROR_R_CHAR_P 1 +| #define HAVE_SIG_ATOMIC_T 1 +| #define HAVE_GETOPT_H 1 +| #define HAVE_GETOPT_LONG_ONLY 1 +| #define HAVE_DECL_GETENV 1 +| #define restrict __restrict +| #define FLT_EXPBIT0_WORD 0 +| #define FLT_EXPBIT0_BIT 23 +| #define HAVE_DECL_GETC_UNLOCKED 1 +| #define HAVE_STDLIB_H 1 +| #define MALLOC_0_IS_NONNULL 1 +| #define HAVE_MBSTATE_T 1 +| #define HAVE_DECL_SNPRINTF 1 +| #define HAVE__BOOL 1 +| #define HAVE_STDBOOL_H 1 +| #define HAVE_DECL_STRNDUP 1 +| #define HAVE_DECL_STRNLEN 1 +| #define HAVE_DECL_STRSIGNAL 1 +| #define HAVE_DECL_SYS_SIGLIST 1 +| #define HAVE_DECL_CLEARERR_UNLOCKED 1 +| #define HAVE_DECL_FEOF_UNLOCKED 1 +| #define HAVE_DECL_FERROR_UNLOCKED 1 +| #define HAVE_DECL_FFLUSH_UNLOCKED 1 +| #define HAVE_DECL_FGETS_UNLOCKED 1 +| #define HAVE_DECL_FPUTC_UNLOCKED 1 +| #define HAVE_DECL_FPUTS_UNLOCKED 1 +| #define HAVE_DECL_FREAD_UNLOCKED 1 +| #define HAVE_DECL_FWRITE_UNLOCKED 1 +| #define HAVE_DECL_GETCHAR_UNLOCKED 1 +| #define HAVE_DECL_PUTC_UNLOCKED 1 +| #define HAVE_DECL_PUTCHAR_UNLOCKED 1 +| #define HAVE_WCHAR_T 1 +| #define HAVE_WINT_T 1 +| #define HAVE_INTTYPES_H_WITH_UINTMAX 1 +| #define HAVE_STDINT_H_WITH_UINTMAX 1 +| #define HAVE_INTMAX_T 1 +| #define CHECK_PRINTF_SAFE 1 +| #define HAVE_DECL_ALARM 1 +| #define HAVE_ALLOCA 1 +| #define HAVE_DECL_SIGALTSTACK 1 +| #define HAVE_STACK_T 1 +| #define SIGNAL_SAFE_LIST 1 +| #define GNULIB_CLOSE_STREAM 1 +| #define HAVE_ENVIRON_DECL 1 +| #define HAVE_WORKING_O_NOATIME 1 +| #define HAVE_WORKING_O_NOFOLLOW 1 +| #define GNULIB_FOPEN_SAFER 1 +| #define HAVE_DECL___FPENDING 1 +| #define HAVE_DECL_FPURGE 0 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_INLINE 1 +| #define HAVE_ISNAND_IN_LIBC 1 +| #define HAVE_ISNANF_IN_LIBC 1 +| #define LDBL_EXPBIT0_WORD 2 +| #define LDBL_EXPBIT0_BIT 0 +| #define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_MALLOC 1 +| #define GNULIB_MALLOC_GNU 1 +| #define HAVE_MALLOC_POSIX 1 +| #define HAVE_MKDTEMP 1 +| #define HAVE_OBSTACK 1 +| #define GNULIB_OPEN 1 +| #define HAVE_FREXP_IN_LIBC 1 +| #define HAVE_LDEXP_IN_LIBC 1 +| #define HAVE_FREXPL_IN_LIBC 1 +| #define HAVE_LDEXPL_IN_LIBC 1 +| #define HAVE_RAWMEMCHR 1 +| #define _REGEX_LARGE_OFFSETS 1 +| #define re_syntax_options rpl_re_syntax_options +| #define re_set_syntax rpl_re_set_syntax +| #define re_compile_pattern rpl_re_compile_pattern +| #define re_compile_fastmap rpl_re_compile_fastmap +| #define re_search rpl_re_search +| #define re_search_2 rpl_re_search_2 +| #define re_match rpl_re_match +| #define re_match_2 rpl_re_match_2 +| #define re_set_registers rpl_re_set_registers +| #define re_comp rpl_re_comp +| #define re_exec rpl_re_exec +| #define regcomp rpl_regcomp +| #define regexec rpl_regexec +| #define regerror rpl_regerror +| #define regfree rpl_regfree +| #define HAVE_LIBINTL_H 1 +| #define HAVE_DECL_ISBLANK 1 +| #define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRUCT_RANDOM_DATA 1 +| #define HAVE_STRCHRNUL 1 +| #define HAVE_STRNDUP 1 +| #define HAVE_STRSIGNAL 1 +| #define HAVE_STRTOL 1 +| #define HAVE___SECURE_GETENV 1 +| #define USE_UNLOCKED_IO 1 +| #define HAVE_SNPRINTF 1 +| #define HAVE_STRNLEN 1 +| #define HAVE_WCSLEN 1 +| #define HAVE_WCSNLEN 1 +| #define HAVE_MBRTOWC 1 +| #define HAVE_WCRTOMB 1 +| /* end confdefs.h. */ +| #include <stdio.h> +| +| int +| main () +| { +| #ifndef _snprintf +| (void) _snprintf; +| #endif +| +| ; +| return 0; +| } +configure:22076: result: no +configure:22097: checking for vasprintf +configure:22097: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:22097: $? = 0 +configure:22097: result: yes +configure:22174: checking for vasprintf +configure:22174: result: yes +configure:22462: checking for ptrdiff_t +configure:22462: result: yes +configure:22482: checking for snprintf +configure:22482: result: yes +configure:22482: checking for strnlen +configure:22482: result: yes +configure:22482: checking for wcslen +configure:22482: result: yes +configure:22482: checking for wcsnlen +configure:22482: result: yes +configure:22482: checking for mbrtowc +configure:22482: result: yes +configure:22482: checking for wcrtomb +configure:22482: result: yes +configure:22492: checking whether _snprintf is declared +configure:22492: result: no +configure:22557: checking for waitid +configure:22557: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:22557: $? = 0 +configure:22557: result: yes +configure:22569: checking whether <wchar.h> is standalone +configure:22579: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:22579: $? = 0 +configure:22586: result: yes +configure:22667: checking whether wcrtomb return value is correct +configure:22730: result: guessing yes +configure:22784: checking whether iswcntrl works +configure:22822: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:22822: $? = 0 +configure:22822: ./conftest +configure:22822: $? = 0 +configure:22833: result: yes +configure:22938: checking for stdint.h +configure:22938: result: yes +configure:22985: checking for a traditional french locale +configure:23078: result: none +configure:23085: checking for a french Unicode locale +configure:23175: result: none +configure:23184: checking where to find the exponent in a 'double' +configure:23498: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:23498: $? = 0 +configure:23498: ./conftest +configure:23498: $? = 0 +configure:23510: result: word 1 bit 20 +configure:23530: checking where to find the exponent in a 'float' +configure:23619: result: word 0 bit 23 +configure:23640: checking where to find the exponent in a 'long double' +configure:23732: result: word 2 bit 0 +configure:23754: checking for a traditional french locale +configure:23847: result: none +configure:23854: checking for a french Unicode locale +configure:23944: result: none +configure:23952: checking for a traditional japanese locale +configure:24054: result: none +configure:24062: checking for a transitional chinese locale +configure:24149: result: none +configure:24156: checking for a french Unicode locale +configure:24246: result: none +configure:24278: checking for a traditional french locale +configure:24371: result: none +configure:24378: checking for a french Unicode locale +configure:24468: result: none +configure:24526: checking for wchar_t +configure:24550: result: yes +configure:24559: checking for wint_t +configure:24591: result: yes +configure:24604: checking for unsetenv +configure:24604: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:24604: $? = 0 +configure:24604: result: yes +configure:24630: checking for unsetenv() return type +configure:24656: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:24656: $? = 0 +configure:24663: result: int +configure:24677: checking for a traditional french locale +configure:24770: result: none +configure:24777: checking for a french Unicode locale +configure:24867: result: none +configure:24875: checking for a traditional japanese locale +configure:24977: result: none +configure:24985: checking for a transitional chinese locale +configure:25072: result: none +configure:25104: checking whether wctob works +configure:25155: result: guessing yes +configure:25181: checking whether wctob is declared +configure:25181: gcc -std=gnu99 -c -g -O2 conftest.c >&5 +configure:25181: $? = 0 +configure:25181: result: yes +configure:25233: checking whether an open file can be renamed +configure:25255: gcc -std=gnu99 -o conftest -g -O2 conftest.c >&5 +configure:25255: $? = 0 +configure:25255: ./conftest +configure:25255: $? = 0 +configure:25265: result: yes +configure:25279: checking if changeword is wanted +configure:25294: result: no +configure:25299: checking which shell to use for syscmd +configure:25334: result: /bin/sh +configure:25342: checking if malloc debugging is wanted +configure:25360: result: no +configure:25525: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by GNU M4 config.status 1.4.13, which was +generated by GNU Autoconf 2.63b. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on data-center + +config.status:1507: creating Makefile +config.status:1507: creating doc/Makefile +config.status:1507: creating lib/Makefile +config.status:1507: creating src/Makefile +config.status:1507: creating tests/Makefile +config.status:1507: creating checks/Makefile +config.status:1507: creating examples/Makefile +config.status:1507: creating lib/config.h +config.status:1758: executing depfiles commands +config.status:1758: executing stamp-h commands + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +M4_cv_func_rename_open_file_works=yes +ac_cv_build=x86_64-unknown-linux-gnu +ac_cv_c_bigendian=no +ac_cv_c_compiler_gnu=yes +ac_cv_c_inline=inline +ac_cv_c_restrict=__restrict +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_func___fpending=yes +ac_cv_func___fpurge=yes +ac_cv_func___freading=yes +ac_cv_func___secure_getenv=yes +ac_cv_func_alloca_works=yes +ac_cv_func_btowc=yes +ac_cv_func_fpurge=no +ac_cv_func_getdtablesize=yes +ac_cv_func_getopt_long_only=yes +ac_cv_func_gettimeofday=yes +ac_cv_func_isblank=yes +ac_cv_func_iswcntrl=yes +ac_cv_func_iswctype=yes +ac_cv_func_lstat=yes +ac_cv_func_lstat_dereferences_slashed_symlink=yes +ac_cv_func_malloc_0_nonnull=yes +ac_cv_func_mbrtowc=yes +ac_cv_func_mbsinit=yes +ac_cv_func_mempcpy=yes +ac_cv_func_mkdtemp=yes +ac_cv_func_obstack=yes +ac_cv_func_pathconf=yes +ac_cv_func_pipe=yes +ac_cv_func_posix_spawn=yes +ac_cv_func_rawmemchr=yes +ac_cv_func_setenv=yes +ac_cv_func_setrlimit=yes +ac_cv_func_sigaction=yes +ac_cv_func_sigaltstack=yes +ac_cv_func_siginterrupt=yes +ac_cv_func_sigprocmask=yes +ac_cv_func_snprintf=yes +ac_cv_func_strchrnul=yes +ac_cv_func_strerror_r=yes +ac_cv_func_strerror_r_char_p=yes +ac_cv_func_strnlen=yes +ac_cv_func_strnlen_working=yes +ac_cv_func_strsignal=yes +ac_cv_func_strtod=yes +ac_cv_func_strtol=yes +ac_cv_func_unsetenv=yes +ac_cv_func_vasnprintf=no +ac_cv_func_vasprintf=yes +ac_cv_func_waitid=yes +ac_cv_func_wcrtomb=yes +ac_cv_func_wcscoll=yes +ac_cv_func_wcslen=yes +ac_cv_func_wcsnlen=yes +ac_cv_func_wctob=yes +ac_cv_gnu_library_2_1=yes +ac_cv_have_decl___fpending=yes +ac_cv_have_decl__snprintf=no +ac_cv_have_decl_alarm=yes +ac_cv_have_decl_clearerr_unlocked=yes +ac_cv_have_decl_feof_unlocked=yes +ac_cv_have_decl_ferror_unlocked=yes +ac_cv_have_decl_fflush_unlocked=yes +ac_cv_have_decl_fgets_unlocked=yes +ac_cv_have_decl_fpurge=no +ac_cv_have_decl_fputc_unlocked=yes +ac_cv_have_decl_fputs_unlocked=yes +ac_cv_have_decl_fread_unlocked=yes +ac_cv_have_decl_frexpl=yes +ac_cv_have_decl_fwrite_unlocked=yes +ac_cv_have_decl_getc_unlocked=yes +ac_cv_have_decl_getchar_unlocked=yes +ac_cv_have_decl_getenv=yes +ac_cv_have_decl_isblank=yes +ac_cv_have_decl_ldexpl=yes +ac_cv_have_decl_optreset=no +ac_cv_have_decl_putc_unlocked=yes +ac_cv_have_decl_putchar_unlocked=yes +ac_cv_have_decl_sigaltstack=yes +ac_cv_have_decl_snprintf=yes +ac_cv_have_decl_strerror_r=yes +ac_cv_have_decl_strndup=yes +ac_cv_have_decl_strnlen=yes +ac_cv_have_decl_strsignal=yes +ac_cv_have_decl_sys_siglist=yes +ac_cv_have_decl_wctob=yes +ac_cv_header_errno_h=yes +ac_cv_header_fcntl_h=yes +ac_cv_header_float_h=yes +ac_cv_header_getopt_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_libintl_h=yes +ac_cv_header_locale_h=yes +ac_cv_header_math_h=yes +ac_cv_header_memory_h=yes +ac_cv_header_minix_config_h=no +ac_cv_header_random_h=no +ac_cv_header_sched_h=yes +ac_cv_header_signal_h=yes +ac_cv_header_spawn_h=yes +ac_cv_header_stat_broken=no +ac_cv_header_stdarg_h=yes +ac_cv_header_stdbool_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdio_ext_h=yes +ac_cv_header_stdio_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_param_h=yes +ac_cv_header_sys_socket_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_time_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_sys_wait_h=yes +ac_cv_header_ucontext_h=yes +ac_cv_header_unistd_h=yes +ac_cv_header_wchar_h=yes +ac_cv_header_wctype_h=yes +ac_cv_host=x86_64-unknown-linux-gnu +ac_cv_lib_error_at_line=yes +ac_cv_member_struct_sigaction_sa_sigaction=yes +ac_cv_objext=o +ac_cv_path_EGREP='/bin/grep -E' +ac_cv_path_GREP=/bin/grep +ac_cv_path_install='/usr/bin/install -c' +ac_cv_path_mkdir=/bin/mkdir +ac_cv_prog_AWK=gawk +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_RANLIB=ranlib +ac_cv_prog_cc_c89= +ac_cv_prog_cc_c99=-std=gnu99 +ac_cv_prog_cc_g=yes +ac_cv_prog_cc_gcc_c_o=yes +ac_cv_prog_cc_stdc=-std=gnu99 +ac_cv_prog_make_make_set=yes +ac_cv_safe_to_define___extensions__=yes +ac_cv_sys_file_offset_bits=no +ac_cv_sys_largefile_CC=no +ac_cv_sys_largefile_source=no +ac_cv_sys_stack_overflow_works=yes +ac_cv_sys_xsi_stack_overflow_heuristic=no +ac_cv_type__Bool=yes +ac_cv_type_long_long_int=yes +ac_cv_type_mbstate_t=yes +ac_cv_type_mode_t=yes +ac_cv_type_nlink_t=yes +ac_cv_type_ptrdiff_t=yes +ac_cv_type_sig_atomic_t=yes +ac_cv_type_size_t=yes +ac_cv_type_stack_t=yes +ac_cv_type_struct_random_data=yes +ac_cv_type_uid_t=yes +ac_cv_type_unsigned_long_long_int=yes +ac_cv_type_volatile_sig_atomic_t=yes +ac_cv_win_or_dos=no +ac_cv_working_alloca_h=yes +acl_cv_hardcode_direct=no +acl_cv_hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' +acl_cv_hardcode_libdir_separator= +acl_cv_hardcode_minus_L=no +acl_cv_libext=a +acl_cv_libname_spec='lib$name' +acl_cv_library_names_spec='$libname$shrext' +acl_cv_path_LD=/usr/bin/ld +acl_cv_prog_gnu_ld=yes +acl_cv_rpath=done +acl_cv_shlibext=so +acl_cv_wl=-Wl, +am_cv_CC_dependencies_compiler_type=gcc3 +am_cv_langinfo_codeset=yes +gl_cv_c_inline_effective=yes +gl_cv_c_multiarch=no +gl_cv_cc_double_expbit0='word 1 bit 20' +gl_cv_cc_float_expbit0='word 0 bit 23' +gl_cv_cc_long_double_expbit0='word 2 bit 0' +gl_cv_double_slash_root=no +gl_cv_func_btowc_eof='guessing yes' +gl_cv_func_fflush_stdin=no +gl_cv_func_fopen_slash=yes +gl_cv_func_frexp_no_libm=yes +gl_cv_func_frexp_works=yes +gl_cv_func_frexpl_no_libm=yes +gl_cv_func_frexpl_works=yes +gl_cv_func_fseeko=yes +gl_cv_func_ftello=yes +gl_cv_func_gettimeofday_clobber=no +gl_cv_func_gettimeofday_posix_signature=yes +gl_cv_func_gnu_getopt=yes +gl_cv_func_isnand_no_libm=yes +gl_cv_func_isnanf_no_libm=yes +gl_cv_func_isnanf_works=yes +gl_cv_func_isnanl_no_libm=yes +gl_cv_func_isnanl_works=no +gl_cv_func_iswcntrl_works=yes +gl_cv_func_ldexp_no_libm=yes +gl_cv_func_ldexpl_no_libm=yes +gl_cv_func_ldexpl_works=yes +gl_cv_func_lseek_pipe=yes +gl_cv_func_malloc_0_nonnull=1 +gl_cv_func_malloc_posix=yes +gl_cv_func_mbrtowc_incomplete_state='guessing yes' +gl_cv_func_mbrtowc_nul_retval='guessing yes' +gl_cv_func_mbrtowc_null_arg='guessing yes' +gl_cv_func_mbrtowc_retval='guessing yes' +gl_cv_func_mbrtowc_sanitycheck='guessing yes' +gl_cv_func_open_slash=yes +gl_cv_func_posix_spawn_works=yes +gl_cv_func_printf_directive_a=yes +gl_cv_func_printf_directive_f=yes +gl_cv_func_printf_directive_ls=yes +gl_cv_func_printf_directive_n=no +gl_cv_func_printf_enomem=yes +gl_cv_func_printf_flag_grouping=yes +gl_cv_func_printf_flag_leftadjust=yes +gl_cv_func_printf_flag_zero=yes +gl_cv_func_printf_infinite=yes +gl_cv_func_printf_infinite_long_double=no +gl_cv_func_printf_long_double=yes +gl_cv_func_printf_positions=yes +gl_cv_func_printf_precision=yes +gl_cv_func_printf_sizes_c99=yes +gl_cv_func_re_compile_pattern_working=no +gl_cv_func_signbit=yes +gl_cv_func_signbit_gcc=yes +gl_cv_func_sigprocmask=1 +gl_cv_func_snprintf_size1=yes +gl_cv_func_snprintf_usable=yes +gl_cv_func_strndup=yes +gl_cv_func_strstr_linear=no +gl_cv_func_strtod_works=yes +gl_cv_func_ungetc_works=yes +gl_cv_func_va_copy=yes +gl_cv_func_vasprintf_posix=no +gl_cv_func_wcrtomb_retval='guessing yes' +gl_cv_func_wctob_works='guessing yes' +gl_cv_func_working_mkstemp=yes +gl_cv_func_working_strerror=yes +gl_cv_func_working_strsignal=yes +gl_cv_have_include_next=yes +gl_cv_header_errno_h_complete=yes +gl_cv_header_inttypes_h=yes +gl_cv_header_math_huge_val_works=yes +gl_cv_header_math_nan_works=yes +gl_cv_header_stdint_h=yes +gl_cv_header_wchar_h_standalone=yes +gl_cv_header_working_fcntl_h=yes +gl_cv_header_working_stdint_h=yes +gl_cv_lib_sigsegv='no, consider installing GNU libsigsegv' +gl_cv_next_fcntl_h='<fcntl.h>' +gl_cv_next_math_h='<math.h>' +gl_cv_next_signal_h='<signal.h>' +gl_cv_next_spawn_h='<spawn.h>' +gl_cv_next_stdint_h='<stdint.h>' +gl_cv_next_stdio_h='<stdio.h>' +gl_cv_next_stdlib_h='<stdlib.h>' +gl_cv_next_string_h='<string.h>' +gl_cv_next_sys_stat_h='<sys/stat.h>' +gl_cv_next_sys_time_h='<sys/time.h>' +gl_cv_next_sys_wait_h='<sys/wait.h>' +gl_cv_next_unistd_h='<unistd.h>' +gl_cv_next_wchar_h='<wchar.h>' +gl_cv_next_wctype_h='<wctype.h>' +gl_cv_rpl_alloca=yes +gl_cv_sigaltstack_low_base=yes +gl_cv_size_max=yes +gl_cv_sys_struct_timeval=yes +gl_cv_var_stdin_large_offset=yes +gt_cv_c_intmax_t=yes +gt_cv_c_wchar_t=yes +gt_cv_c_wint_t=yes +gt_cv_func_unsetenv_ret=int +gt_cv_locale_fr=none +gt_cv_locale_fr_utf8=none +gt_cv_locale_ja=none +gt_cv_locale_zh_CN=none +gt_cv_ssize_t=yes +gt_cv_var_environ_declaration=yes + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run aclocal-1.10b' +ALLOCA='' +ALLOCA_H='alloca.h' +AMDEPBACKSLASH='\' +AMDEP_FALSE='#' +AMDEP_TRUE='' +AMTAR='${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run tar' +AM_BACKSLASH='\' +APPLE_UNIVERSAL_BUILD='0' +AUTOCONF='${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoconf' +AUTOHEADER='${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoheader' +AUTOMAKE='${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run automake-1.10b' +AWK='gawk' +BITSIZEOF_PTRDIFF_T='' +BITSIZEOF_SIG_ATOMIC_T='' +BITSIZEOF_SIZE_T='' +BITSIZEOF_WCHAR_T='' +BITSIZEOF_WINT_T='' +CC='gcc -std=gnu99' +CCDEPMODE='depmode=gcc3' +CFLAGS='-g -O2' +CPP='gcc -E' +CPPFLAGS='' +CYGPATH_W='echo' +DEFS='' +DEPDIR='.deps' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/bin/grep -E' +EMULTIHOP_HIDDEN='' +EMULTIHOP_VALUE='' +ENOLINK_HIDDEN='' +ENOLINK_VALUE='' +EOVERFLOW_HIDDEN='' +EOVERFLOW_VALUE='' +ERRNO_H='' +EXEEXT='' +FCNTL_H='fcntl.h' +FLOAT_H='' +GETOPT_H='' +GLIBC21='yes' +GL_COND_LIBTOOL_FALSE='' +GL_COND_LIBTOOL_TRUE='#' +GNULIB_ATOLL='0' +GNULIB_BTOWC='1' +GNULIB_CALLOC_POSIX='0' +GNULIB_CEILF='0' +GNULIB_CEILL='0' +GNULIB_CHOWN='0' +GNULIB_CLOSE='0' +GNULIB_DPRINTF='0' +GNULIB_DUP2='0' +GNULIB_ENVIRON='1' +GNULIB_EUIDACCESS='0' +GNULIB_FCHDIR='0' +GNULIB_FCLOSE='0' +GNULIB_FFLUSH='1' +GNULIB_FLOORF='0' +GNULIB_FLOORL='0' +GNULIB_FOPEN='1' +GNULIB_FPRINTF='1' +GNULIB_FPRINTF_POSIX='0' +GNULIB_FPUTC='1' +GNULIB_FPUTS='1' +GNULIB_FREOPEN='0' +GNULIB_FREXP='1' +GNULIB_FREXPL='1' +GNULIB_FSEEK='0' +GNULIB_FSEEKO='1' +GNULIB_FSYNC='0' +GNULIB_FTELL='0' +GNULIB_FTELLO='1' +GNULIB_FTRUNCATE='0' +GNULIB_FWRITE='1' +GNULIB_GETCWD='0' +GNULIB_GETDELIM='0' +GNULIB_GETDOMAINNAME='0' +GNULIB_GETDTABLESIZE='1' +GNULIB_GETHOSTNAME='0' +GNULIB_GETLINE='0' +GNULIB_GETLOADAVG='0' +GNULIB_GETLOGIN_R='0' +GNULIB_GETPAGESIZE='0' +GNULIB_GETSUBOPT='0' +GNULIB_GETUSERSHELL='0' +GNULIB_ISFINITE='0' +GNULIB_ISINF='0' +GNULIB_ISNAN='0' +GNULIB_ISNAND='0' +GNULIB_ISNANF='0' +GNULIB_ISNANL='0' +GNULIB_LCHMOD='0' +GNULIB_LCHOWN='0' +GNULIB_LDEXPL='0' +GNULIB_LINK='0' +GNULIB_LSEEK='1' +GNULIB_LSTAT='1' +GNULIB_MALLOC_POSIX='1' +GNULIB_MATHL='0' +GNULIB_MBRLEN='0' +GNULIB_MBRTOWC='1' +GNULIB_MBSCASECMP='0' +GNULIB_MBSCASESTR='0' +GNULIB_MBSCHR='0' +GNULIB_MBSCSPN='0' +GNULIB_MBSINIT='1' +GNULIB_MBSLEN='0' +GNULIB_MBSNCASECMP='0' +GNULIB_MBSNLEN='0' +GNULIB_MBSNRTOWCS='0' +GNULIB_MBSPBRK='0' +GNULIB_MBSPCASECMP='0' +GNULIB_MBSRCHR='0' +GNULIB_MBSRTOWCS='0' +GNULIB_MBSSEP='0' +GNULIB_MBSSPN='0' +GNULIB_MBSSTR='0' +GNULIB_MBSTOK_R='0' +GNULIB_MEMMEM='0' +GNULIB_MEMPCPY='0' +GNULIB_MEMRCHR='0' +GNULIB_MKDTEMP='1' +GNULIB_MKSTEMP='1' +GNULIB_OBSTACK_PRINTF='0' +GNULIB_OBSTACK_PRINTF_POSIX='0' +GNULIB_OPEN='1' +GNULIB_PERROR='0' +GNULIB_POSIX_SPAWN='0' +GNULIB_POSIX_SPAWNATTR_DESTROY='1' +GNULIB_POSIX_SPAWNATTR_GETFLAGS='0' +GNULIB_POSIX_SPAWNATTR_GETPGROUP='0' +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM='0' +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY='0' +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT='0' +GNULIB_POSIX_SPAWNATTR_GETSIGMASK='0' +GNULIB_POSIX_SPAWNATTR_INIT='1' +GNULIB_POSIX_SPAWNATTR_SETFLAGS='1' +GNULIB_POSIX_SPAWNATTR_SETPGROUP='0' +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM='0' +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY='0' +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT='0' +GNULIB_POSIX_SPAWNATTR_SETSIGMASK='1' +GNULIB_POSIX_SPAWNP='1' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE='1' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2='1' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN='1' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY='1' +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT='1' +GNULIB_PRINTF='1' +GNULIB_PRINTF_POSIX='0' +GNULIB_PUTC='1' +GNULIB_PUTCHAR='1' +GNULIB_PUTENV='0' +GNULIB_PUTS='1' +GNULIB_RANDOM_R='0' +GNULIB_RAWMEMCHR='1' +GNULIB_READLINK='0' +GNULIB_REALLOC_POSIX='0' +GNULIB_ROUND='0' +GNULIB_ROUNDF='0' +GNULIB_ROUNDL='0' +GNULIB_RPMATCH='0' +GNULIB_SETENV='1' +GNULIB_SIGACTION='1' +GNULIB_SIGNAL_H_SIGPIPE='0' +GNULIB_SIGNBIT='1' +GNULIB_SIGPROCMASK='1' +GNULIB_SLEEP='0' +GNULIB_SNPRINTF='1' +GNULIB_SPRINTF_POSIX='0' +GNULIB_STDIO_H_SIGPIPE='0' +GNULIB_STPCPY='0' +GNULIB_STPNCPY='0' +GNULIB_STRCASESTR='0' +GNULIB_STRCHRNUL='1' +GNULIB_STRDUP='0' +GNULIB_STRERROR='1' +GNULIB_STRNDUP='1' +GNULIB_STRNLEN='1' +GNULIB_STRPBRK='0' +GNULIB_STRSEP='0' +GNULIB_STRSIGNAL='1' +GNULIB_STRSTR='1' +GNULIB_STRTOD='1' +GNULIB_STRTOK_R='0' +GNULIB_STRTOLL='0' +GNULIB_STRTOULL='0' +GNULIB_STRVERSCMP='0' +GNULIB_TRUNC='0' +GNULIB_TRUNCF='0' +GNULIB_TRUNCL='0' +GNULIB_UNISTD_H_SIGPIPE='0' +GNULIB_UNSETENV='1' +GNULIB_VASPRINTF='1' +GNULIB_VDPRINTF='0' +GNULIB_VFPRINTF='1' +GNULIB_VFPRINTF_POSIX='0' +GNULIB_VPRINTF='1' +GNULIB_VPRINTF_POSIX='0' +GNULIB_VSNPRINTF='0' +GNULIB_VSPRINTF_POSIX='0' +GNULIB_WCRTOMB='1' +GNULIB_WCSNRTOMBS='0' +GNULIB_WCSRTOMBS='0' +GNULIB_WCTOB='1' +GNULIB_WCWIDTH='0' +GNULIB_WRITE='0' +GREP='/bin/grep' +HAVE_ATOLL='1' +HAVE_BTOWC='1' +HAVE_CALLOC_POSIX='1' +HAVE_DECL_ACOSL='1' +HAVE_DECL_ASINL='1' +HAVE_DECL_ATANL='1' +HAVE_DECL_COSL='1' +HAVE_DECL_ENVIRON='1' +HAVE_DECL_EXPL='1' +HAVE_DECL_FREXPL='1' +HAVE_DECL_GETDELIM='1' +HAVE_DECL_GETLINE='1' +HAVE_DECL_GETLOADAVG='1' +HAVE_DECL_GETLOGIN_R='1' +HAVE_DECL_LDEXPL='1' +HAVE_DECL_LOGL='1' +HAVE_DECL_MEMMEM='1' +HAVE_DECL_MEMRCHR='1' +HAVE_DECL_OBSTACK_PRINTF='1' +HAVE_DECL_SINL='1' +HAVE_DECL_SNPRINTF='1' +HAVE_DECL_SQRTL='1' +HAVE_DECL_STRDUP='1' +HAVE_DECL_STRERROR='1' +HAVE_DECL_STRNDUP='1' +HAVE_DECL_STRNLEN='1' +HAVE_DECL_STRSIGNAL='1' +HAVE_DECL_STRTOK_R='1' +HAVE_DECL_TANL='1' +HAVE_DECL_TRUNC='1' +HAVE_DECL_TRUNCF='1' +HAVE_DECL_VSNPRINTF='1' +HAVE_DECL_WCTOB='1' +HAVE_DECL_WCWIDTH='1' +HAVE_DPRINTF='1' +HAVE_DUP2='1' +HAVE_EUIDACCESS='1' +HAVE_FSEEKO='1' +HAVE_FSYNC='1' +HAVE_FTELLO='1' +HAVE_FTRUNCATE='1' +HAVE_GETDOMAINNAME='1' +HAVE_GETDTABLESIZE='1' +HAVE_GETHOSTNAME='1' +HAVE_GETPAGESIZE='1' +HAVE_GETSUBOPT='1' +HAVE_GETUSERSHELL='1' +HAVE_INTTYPES_H='1' +HAVE_ISNAND='1' +HAVE_ISNANF='1' +HAVE_ISNANL='1' +HAVE_ISWCNTRL='1' +HAVE_LCHMOD='1' +HAVE_LINK='1' +HAVE_LONG_LONG_INT='1' +HAVE_LSTAT='1' +HAVE_MALLOC_POSIX='1' +HAVE_MBRLEN='1' +HAVE_MBRTOWC='1' +HAVE_MBSINIT='1' +HAVE_MBSNRTOWCS='1' +HAVE_MBSRTOWCS='1' +HAVE_MEMPCPY='1' +HAVE_MKDTEMP='1' +HAVE_OS_H='0' +HAVE_POSIX_SIGNALBLOCKING='1' +HAVE_POSIX_SPAWN='1' +HAVE_RANDOM_H='0' +HAVE_RANDOM_R='1' +HAVE_RAWMEMCHR='1' +HAVE_READLINK='1' +HAVE_REALLOC_POSIX='1' +HAVE_RPMATCH='1' +HAVE_SCHED_H='' +HAVE_SETENV='1' +HAVE_SIGACTION='1' +HAVE_SIGINFO_T='1' +HAVE_SIGNED_SIG_ATOMIC_T='' +HAVE_SIGNED_WCHAR_T='' +HAVE_SIGNED_WINT_T='' +HAVE_SIGSET_T='1' +HAVE_SLEEP='1' +HAVE_SPAWN_H='1' +HAVE_STDINT_H='1' +HAVE_STPCPY='1' +HAVE_STPNCPY='1' +HAVE_STRCASESTR='1' +HAVE_STRCHRNUL='1' +HAVE_STRNDUP='1' +HAVE_STRPBRK='1' +HAVE_STRSEP='1' +HAVE_STRTOD='1' +HAVE_STRTOLL='1' +HAVE_STRTOULL='1' +HAVE_STRUCT_RANDOM_DATA='1' +HAVE_STRUCT_SCHED_PARAM='' +HAVE_STRUCT_SIGACTION_SA_SIGACTION='1' +HAVE_STRUCT_TIMEVAL='1' +HAVE_STRVERSCMP='1' +HAVE_SYS_BITYPES_H='' +HAVE_SYS_INTTYPES_H='' +HAVE_SYS_LOADAVG_H='0' +HAVE_SYS_PARAM_H='0' +HAVE_SYS_TIME_H='1' +HAVE_SYS_TYPES_H='1' +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T='1' +HAVE_UNISTD_H='1' +HAVE_UNSETENV='1' +HAVE_UNSIGNED_LONG_LONG_INT='1' +HAVE_VASPRINTF='1' +HAVE_VDPRINTF='1' +HAVE_WCHAR_H='1' +HAVE_WCRTOMB='1' +HAVE_WCSNRTOMBS='1' +HAVE_WCSRTOMBS='1' +HAVE_WCTYPE_H='1' +HAVE_WINT_T='1' +HAVE__BOOL='1' +INCLUDE_NEXT='include_next' +INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' +LDFLAGS='' +LIBCSTACK='' +LIBINTL='' +LIBM4_LIBDEPS='' +LIBM4_LTLIBDEPS='' +LIBMULTITHREAD='' +LIBOBJS='' +LIBPTH='' +LIBPTH_PREFIX='' +LIBS='' +LIBSIGSEGV='' +LIBTESTS_LIBDEPS='' +LIBTHREAD='' +LOCALCHARSET_TESTS_ENVIRONMENT='CHARSETALIASDIR="$(top_builddir)/lib"' +LOCALE_FR='none' +LOCALE_FR_UTF8='none' +LOCALE_JA='none' +LOCALE_ZH_CN='none' +LTLIBCSTACK='' +LTLIBINTL='' +LTLIBMULTITHREAD='' +LTLIBOBJS='' +LTLIBPTH='' +LTLIBSIGSEGV='' +LTLIBTHREAD='' +M4_LIBOBJS=' asnprintf.o asprintf.o basename.o cloexec.o close-stream.o closein.o closeout.o dirname.o dup-safer.o exitfail.o fd-safer.o fflush.o filenamecat.o fopen-safer.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnprintf.o vasprintf.o xmalloc.o' +M4_LTLIBOBJS=' asnprintf.lo asprintf.lo basename.lo cloexec.lo close-stream.lo closein.lo closeout.lo dirname.lo dup-safer.lo exitfail.lo fd-safer.lo fflush.lo filenamecat.lo fopen-safer.lo fseeko.lo isnanl.lo mkstemp-safer.lo pipe-safer.lo printf-args.lo printf-parse.lo quotearg.lo regex.lo stripslash.lo strstr.lo tempname.lo vasnprintf.lo vasprintf.lo xmalloc.lo' +M4tests_LIBOBJS='' +M4tests_LTLIBOBJS='' +MAKEINFO='${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run makeinfo' +MKDIR_P='/bin/mkdir -p' +NEXT_ERRNO_H='' +NEXT_FCNTL_H='<fcntl.h>' +NEXT_FLOAT_H='' +NEXT_MATH_H='<math.h>' +NEXT_SCHED_H='' +NEXT_SIGNAL_H='<signal.h>' +NEXT_SPAWN_H='<spawn.h>' +NEXT_STDARG_H='<stdarg.h>' +NEXT_STDINT_H='<stdint.h>' +NEXT_STDIO_H='<stdio.h>' +NEXT_STDLIB_H='<stdlib.h>' +NEXT_STRING_H='<string.h>' +NEXT_SYS_STAT_H='<sys/stat.h>' +NEXT_SYS_TIME_H='<sys/time.h>' +NEXT_SYS_WAIT_H='<sys/wait.h>' +NEXT_UNISTD_H='<unistd.h>' +NEXT_WCHAR_H='<wchar.h>' +NEXT_WCTYPE_H='<wctype.h>' +OBJEXT='o' +PACKAGE='m4' +PACKAGE_BUGREPORT='bug-m4@gnu.org' +PACKAGE_NAME='GNU M4' +PACKAGE_STRING='GNU M4 1.4.13' +PACKAGE_TARNAME='m4' +PACKAGE_URL='http://www.gnu.org/software/m4/' +PACKAGE_VERSION='1.4.13' +PATH_SEPARATOR=':' +POSIX_SPAWN_PORTED_FALSE='#' +POSIX_SPAWN_PORTED_TRUE='' +POW_LIB='' +PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' +PTRDIFF_T_SUFFIX='' +RANLIB='ranlib' +REPLACE_BTOWC='0' +REPLACE_CEILF='0' +REPLACE_CEILL='0' +REPLACE_CHOWN='0' +REPLACE_CLOSE='0' +REPLACE_DPRINTF='0' +REPLACE_FCHDIR='0' +REPLACE_FCLOSE='0' +REPLACE_FFLUSH='1' +REPLACE_FLOORF='0' +REPLACE_FLOORL='0' +REPLACE_FOPEN='0' +REPLACE_FPRINTF='0' +REPLACE_FREOPEN='0' +REPLACE_FREXP='0' +REPLACE_FREXPL='0' +REPLACE_FSEEK='0' +REPLACE_FSEEKO='1' +REPLACE_FTELL='0' +REPLACE_FTELLO='0' +REPLACE_GETCWD='0' +REPLACE_GETLINE='0' +REPLACE_GETPAGESIZE='0' +REPLACE_GETTIMEOFDAY='0' +REPLACE_HUGE_VAL='0' +REPLACE_ISFINITE='0' +REPLACE_ISINF='0' +REPLACE_ISNAN='0' +REPLACE_ISWCNTRL='0' +REPLACE_LCHOWN='0' +REPLACE_LDEXPL='0' +REPLACE_LSEEK='0' +REPLACE_LSTAT='0' +REPLACE_MBRLEN='0' +REPLACE_MBRTOWC='0' +REPLACE_MBSINIT='0' +REPLACE_MBSNRTOWCS='0' +REPLACE_MBSRTOWCS='0' +REPLACE_MBSTATE_T='0' +REPLACE_MEMMEM='0' +REPLACE_MKDIR='0' +REPLACE_MKSTEMP='0' +REPLACE_NAN='0' +REPLACE_OBSTACK_PRINTF='0' +REPLACE_OPEN='0' +REPLACE_PERROR='0' +REPLACE_POSIX_SPAWN='0' +REPLACE_PRINTF='0' +REPLACE_PUTENV='0' +REPLACE_ROUND='0' +REPLACE_ROUNDF='0' +REPLACE_ROUNDL='0' +REPLACE_SIGNBIT='0' +REPLACE_SIGNBIT_USING_GCC='1' +REPLACE_SNPRINTF='0' +REPLACE_SPRINTF='0' +REPLACE_STDIO_WRITE_FUNCS='0' +REPLACE_STRCASESTR='0' +REPLACE_STRDUP='0' +REPLACE_STRERROR='0' +REPLACE_STRSIGNAL='0' +REPLACE_STRSTR='1' +REPLACE_STRTOD='0' +REPLACE_TRUNCL='0' +REPLACE_VASPRINTF='1' +REPLACE_VDPRINTF='0' +REPLACE_VFPRINTF='0' +REPLACE_VPRINTF='0' +REPLACE_VSNPRINTF='0' +REPLACE_VSPRINTF='0' +REPLACE_WCRTOMB='0' +REPLACE_WCSRTOMBS='0' +REPLACE_WCTOB='0' +REPLACE_WCWIDTH='0' +REPLACE_WRITE='0' +SCHED_H='' +SET_MAKE='' +SHELL='/bin/bash' +SIG_ATOMIC_T_SUFFIX='' +SIZE_T_SUFFIX='' +SPAWN_H='' +STDARG_H='' +STDBOOL_H='' +STDINT_H='' +STRIP='' +SYS_STAT_H='sys/stat.h' +SYS_TIME_H='' +SYS_WAIT_H='sys/wait.h' +UNISTD_H_HAVE_WINSOCK2_H='0' +VERSION='1.4.13' +VOID_UNSETENV='0' +WCHAR_H='' +WCHAR_T_SUFFIX='' +WCTYPE_H='' +WINT_T_SUFFIX='' +ac_ct_CC='gcc' +am__fastdepCC_FALSE='#' +am__fastdepCC_TRUE='' +am__include='include' +am__isrc='' +am__leading_dot='.' +am__quote='' +am__tar='${AMTAR} chof - "$$tardir"' +am__untar='${AMTAR} xf -' +bindir='${exec_prefix}/bin' +build='x86_64-unknown-linux-gnu' +build_alias='' +build_cpu='x86_64' +build_os='linux-gnu' +build_vendor='unknown' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host='x86_64-unknown-linux-gnu' +host_alias='' +host_cpu='x86_64' +host_os='linux-gnu' +host_vendor='unknown' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +install_sh='${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/install-sh' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +mkdir_p='/bin/mkdir -p' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local' +program_transform_name='s,x,x,' +psdir='${docdir}' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +/* confdefs.h */ +#define PACKAGE_NAME "GNU M4" +#define PACKAGE_TARNAME "m4" +#define PACKAGE_VERSION "1.4.13" +#define PACKAGE_STRING "GNU M4 1.4.13" +#define PACKAGE_BUGREPORT "bug-m4@gnu.org" +#define PACKAGE_URL "http://www.gnu.org/software/m4/" +#define PACKAGE "m4" +#define VERSION "1.4.13" +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define __EXTENSIONS__ 1 +#define _ALL_SOURCE 1 +#define _GNU_SOURCE 1 +#define _POSIX_PTHREAD_SEMANTICS 1 +#define _TANDEM_SOURCE 1 +#define HAVE_FSEEKO 1 +#define HAVE_LONG_LONG_INT 1 +#define HAVE_UNSIGNED_LONG_LONG_INT 1 +#define HAVE_ALLOCA_H 1 +#define HAVE_ALLOCA 1 +#define HAVE_BTOWC 1 +#define HAVE_SETRLIMIT 1 +#define HAVE_SIGALTSTACK 1 +#define HAVE_MEMPCPY 1 +#define HAVE___FPENDING 1 +#define HAVE___FPURGE 1 +#define HAVE___FREADING 1 +#define HAVE_GETDTABLESIZE 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_LSTAT 1 +#define HAVE_MBSINIT 1 +#define HAVE_MBRTOWC 1 +#define HAVE_PATHCONF 1 +#define HAVE_POSIX_SPAWN 1 +#define HAVE_ISBLANK 1 +#define HAVE_ISWCTYPE 1 +#define HAVE_WCSCOLL 1 +#define HAVE_SIGACTION 1 +#define HAVE_SIGINTERRUPT 1 +#define HAVE_PIPE 1 +#define HAVE_WCRTOMB 1 +#define HAVE_ISWCNTRL 1 +#define HAVE_SETENV 1 +#define HAVE_WCTOB 1 +#define HAVE_LANGINFO_CODESET 1 +#define HAVE_UCONTEXT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_ERRNO_H 1 +#define HAVE_FCNTL_H 1 +#define HAVE_FLOAT_H 1 +#define HAVE_STDIO_EXT_H 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SYS_PARAM_H 1 +#define HAVE_LOCALE_H 1 +#define HAVE_SCHED_H 1 +#define HAVE_SIGNAL_H 1 +#define HAVE_SPAWN_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_WCHAR_H 1 +#define HAVE_STDIO_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_SYS_SOCKET_H 1 +#define HAVE_STRING_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_WAIT_H 1 +#define HAVE_WCTYPE_H 1 +#define FAULT_YIELDS_SIGBUS 0 +#define HAVE_STACK_OVERFLOW_HANDLING 1 +#define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 +#define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 +#define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +#define HAVE_DECL_STRERROR_R 1 +#define HAVE_STRERROR_R 1 +#define STRERROR_R_CHAR_P 1 +#define HAVE_SIG_ATOMIC_T 1 +#define HAVE_GETOPT_H 1 +#define HAVE_GETOPT_LONG_ONLY 1 +#define HAVE_DECL_GETENV 1 +#define restrict __restrict +#define FLT_EXPBIT0_WORD 0 +#define FLT_EXPBIT0_BIT 23 +#define HAVE_DECL_GETC_UNLOCKED 1 +#define HAVE_STDLIB_H 1 +#define MALLOC_0_IS_NONNULL 1 +#define HAVE_MBSTATE_T 1 +#define HAVE_DECL_SNPRINTF 1 +#define HAVE__BOOL 1 +#define HAVE_STDBOOL_H 1 +#define HAVE_DECL_STRNDUP 1 +#define HAVE_DECL_STRNLEN 1 +#define HAVE_DECL_STRSIGNAL 1 +#define HAVE_DECL_SYS_SIGLIST 1 +#define HAVE_DECL_CLEARERR_UNLOCKED 1 +#define HAVE_DECL_FEOF_UNLOCKED 1 +#define HAVE_DECL_FERROR_UNLOCKED 1 +#define HAVE_DECL_FFLUSH_UNLOCKED 1 +#define HAVE_DECL_FGETS_UNLOCKED 1 +#define HAVE_DECL_FPUTC_UNLOCKED 1 +#define HAVE_DECL_FPUTS_UNLOCKED 1 +#define HAVE_DECL_FREAD_UNLOCKED 1 +#define HAVE_DECL_FWRITE_UNLOCKED 1 +#define HAVE_DECL_GETCHAR_UNLOCKED 1 +#define HAVE_DECL_PUTC_UNLOCKED 1 +#define HAVE_DECL_PUTCHAR_UNLOCKED 1 +#define HAVE_WCHAR_T 1 +#define HAVE_WINT_T 1 +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 +#define HAVE_STDINT_H_WITH_UINTMAX 1 +#define HAVE_INTMAX_T 1 +#define CHECK_PRINTF_SAFE 1 +#define HAVE_DECL_ALARM 1 +#define HAVE_ALLOCA 1 +#define HAVE_DECL_SIGALTSTACK 1 +#define HAVE_STACK_T 1 +#define SIGNAL_SAFE_LIST 1 +#define GNULIB_CLOSE_STREAM 1 +#define HAVE_ENVIRON_DECL 1 +#define HAVE_WORKING_O_NOATIME 1 +#define HAVE_WORKING_O_NOFOLLOW 1 +#define GNULIB_FOPEN_SAFER 1 +#define HAVE_DECL___FPENDING 1 +#define HAVE_DECL_FPURGE 0 +#define HAVE_FREXP_IN_LIBC 1 +#define HAVE_FREXPL_IN_LIBC 1 +#define HAVE_INLINE 1 +#define HAVE_ISNAND_IN_LIBC 1 +#define HAVE_ISNANF_IN_LIBC 1 +#define LDBL_EXPBIT0_WORD 2 +#define LDBL_EXPBIT0_BIT 0 +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +#define HAVE_STDLIB_H 1 +#define HAVE_MALLOC 1 +#define GNULIB_MALLOC_GNU 1 +#define HAVE_MALLOC_POSIX 1 +#define HAVE_MKDTEMP 1 +#define HAVE_OBSTACK 1 +#define GNULIB_OPEN 1 +#define HAVE_FREXP_IN_LIBC 1 +#define HAVE_LDEXP_IN_LIBC 1 +#define HAVE_FREXPL_IN_LIBC 1 +#define HAVE_LDEXPL_IN_LIBC 1 +#define HAVE_RAWMEMCHR 1 +#define _REGEX_LARGE_OFFSETS 1 +#define re_syntax_options rpl_re_syntax_options +#define re_set_syntax rpl_re_set_syntax +#define re_compile_pattern rpl_re_compile_pattern +#define re_compile_fastmap rpl_re_compile_fastmap +#define re_search rpl_re_search +#define re_search_2 rpl_re_search_2 +#define re_match rpl_re_match +#define re_match_2 rpl_re_match_2 +#define re_set_registers rpl_re_set_registers +#define re_comp rpl_re_comp +#define re_exec rpl_re_exec +#define regcomp rpl_regcomp +#define regexec rpl_regexec +#define regerror rpl_regerror +#define regfree rpl_regfree +#define HAVE_LIBINTL_H 1 +#define HAVE_DECL_ISBLANK 1 +#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +#define HAVE_STDINT_H 1 +#define HAVE_SNPRINTF 1 +#define HAVE_STRUCT_RANDOM_DATA 1 +#define HAVE_STRCHRNUL 1 +#define HAVE_STRNDUP 1 +#define HAVE_STRSIGNAL 1 +#define HAVE_STRTOL 1 +#define HAVE___SECURE_GETENV 1 +#define USE_UNLOCKED_IO 1 +#define HAVE_SNPRINTF 1 +#define HAVE_STRNLEN 1 +#define HAVE_WCSLEN 1 +#define HAVE_WCSNLEN 1 +#define HAVE_MBRTOWC 1 +#define HAVE_WCRTOMB 1 +#define HAVE_DECL__SNPRINTF 0 +#define HAVE_VASPRINTF 1 +#define HAVE_VASPRINTF 1 +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 +#define HAVE_SNPRINTF 1 +#define HAVE_STRNLEN 1 +#define HAVE_WCSLEN 1 +#define HAVE_WCSNLEN 1 +#define HAVE_MBRTOWC 1 +#define HAVE_WCRTOMB 1 +#define HAVE_DECL__SNPRINTF 0 +#define HAVE_WAITID 1 +#define HAVE_STDINT_H 1 +#define DBL_EXPBIT0_WORD 1 +#define DBL_EXPBIT0_BIT 20 +#define FLT_EXPBIT0_WORD 0 +#define FLT_EXPBIT0_BIT 23 +#define LDBL_EXPBIT0_WORD 2 +#define LDBL_EXPBIT0_BIT 0 +#define HAVE_WCHAR_T 1 +#define HAVE_WINT_T 1 +#define HAVE_UNSETENV 1 +#define HAVE_DECL_WCTOB 1 +#define RENAME_OPEN_FILE_WORKS 1 +#define SYSCMD_SHELL "/bin/sh" + +configure: exit 0 diff --git a/coreseek/m4-1.4.13/config.status b/coreseek/m4-1.4.13/config.status new file mode 100755 index 0000000..5d79a57 --- /dev/null +++ b/coreseek/m4-1.4.13/config.status @@ -0,0 +1,1866 @@ +#! /bin/bash +# Generated by configure. +# 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-/bin/bash} +export SHELL +## -------------------- ## +## 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) set -o posix ;; #( + *) : ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit [STATUS=$?] +# ---------------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + as_status=$? + set +e + as_fn_set_status ${1-$as_status} + exit ${1-$as_status} +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +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 + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GNU M4 $as_me 1.4.13, which was +generated by GNU Autoconf 2.63b. 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` +" + +# Files that config.status was made for. +config_files=" Makefile doc/Makefile lib/Makefile src/Makefile tests/Makefile checks/Makefile examples/Makefile" +config_headers=" lib/config.h:lib/config.hin" +config_links=" GNUmakefile:GNUmakefile" +config_commands=" depfiles stamp-h" + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration links: +$config_links + +Configuration commands: +$config_commands + +Report bugs to <bug-m4@gnu.org>. +GNU M4 home page: <http://www.gnu.org/software/m4/>. +General help using GNU software: <http://www.gnu.org/gethelp/>." + +ac_cs_version="\ +GNU M4 config.status 1.4.13 +configured by ./configure, generated by GNU Autoconf 2.63b, + with options \"'--prefix=/usr/local'\" + +Copyright (C) 2009 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='/home/coreseek/coreseek-4.1-beta/m4-1.4.13' +srcdir='.' +INSTALL='/usr/bin/install -c' +MKDIR_P='/bin/mkdir -p' +AWK='gawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$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 ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X '/bin/bash' './configure' '--prefix=/usr/local' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 + CONFIG_SHELL='/bin/bash' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +# +# INIT-COMMANDS +# +AMDEP_TRUE="" ac_aux_dir="build-aux" +GNUmakefile=GNUmakefile + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "lib/config.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/config.h:lib/config.hin" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;; + "stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "checks/Makefile") CONFIG_FILES="$CONFIG_FILES checks/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +cat >>"$tmp/subs1.awk" <<\_ACAWK && +S["M4tests_LTLIBOBJS"]="" +S["M4tests_LIBOBJS"]="" +S["M4_LTLIBOBJS"]=" asnprintf.lo asprintf.lo basename.lo cloexec.lo close-stream.lo closein.lo closeout.lo dirname.lo dup-safer.lo exitfail.lo fd-safer.lo fflush.lo fi"\ +"lenamecat.lo fopen-safer.lo fseeko.lo isnanl.lo mkstemp-safer.lo pipe-safer.lo printf-args.lo printf-parse.lo quotearg.lo regex.lo stripslash.lo str"\ +"str.lo tempname.lo vasnprintf.lo vasprintf.lo xmalloc.lo" +S["M4_LIBOBJS"]=" asnprintf.o asprintf.o basename.o cloexec.o close-stream.o closein.o closeout.o dirname.o dup-safer.o exitfail.o fd-safer.o fflush.o filenamecat.o "\ +"fopen-safer.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnpr"\ +"intf.o vasprintf.o xmalloc.o" +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["LIBTESTS_LIBDEPS"]="" +S["LIBM4_LTLIBDEPS"]="" +S["LIBM4_LIBDEPS"]="" +S["POSIX_SPAWN_PORTED_FALSE"]="#" +S["POSIX_SPAWN_PORTED_TRUE"]="" +S["REPLACE_ISWCNTRL"]="0" +S["WCTYPE_H"]="" +S["HAVE_WCTYPE_H"]="1" +S["NEXT_WCTYPE_H"]="<wctype.h>" +S["HAVE_ISWCNTRL"]="1" +S["NEXT_WCHAR_H"]="<wchar.h>" +S["HAVE_WCHAR_H"]="1" +S["HAVE_WINT_T"]="1" +S["HAVE_UNISTD_H"]="1" +S["NEXT_UNISTD_H"]="<unistd.h>" +S["SYS_WAIT_H"]="sys/wait.h" +S["NEXT_SYS_WAIT_H"]="<sys/wait.h>" +S["SYS_STAT_H"]="sys/stat.h" +S["NEXT_SYS_STAT_H"]="<sys/stat.h>" +S["HAVE_LSTAT"]="1" +S["POW_LIB"]="" +S["NEXT_STRING_H"]="<string.h>" +S["HAVE_RANDOM_H"]="0" +S["NEXT_STDLIB_H"]="<stdlib.h>" +S["NEXT_STDIO_H"]="<stdio.h>" +S["STDINT_H"]="" +S["WINT_T_SUFFIX"]="" +S["WCHAR_T_SUFFIX"]="" +S["SIG_ATOMIC_T_SUFFIX"]="" +S["SIZE_T_SUFFIX"]="" +S["PTRDIFF_T_SUFFIX"]="" +S["HAVE_SIGNED_WINT_T"]="" +S["HAVE_SIGNED_WCHAR_T"]="" +S["HAVE_SIGNED_SIG_ATOMIC_T"]="" +S["BITSIZEOF_WINT_T"]="" +S["BITSIZEOF_WCHAR_T"]="" +S["BITSIZEOF_SIG_ATOMIC_T"]="" +S["BITSIZEOF_SIZE_T"]="" +S["BITSIZEOF_PTRDIFF_T"]="" +S["HAVE_SYS_BITYPES_H"]="" +S["HAVE_SYS_INTTYPES_H"]="" +S["HAVE_STDINT_H"]="1" +S["NEXT_STDINT_H"]="<stdint.h>" +S["HAVE_SYS_TYPES_H"]="1" +S["HAVE_INTTYPES_H"]="1" +S["HAVE_UNSIGNED_LONG_LONG_INT"]="1" +S["HAVE_LONG_LONG_INT"]="1" +S["HAVE__BOOL"]="1" +S["STDBOOL_H"]="" +S["NEXT_STDARG_H"]="<stdarg.h>" +S["STDARG_H"]="" +S["HAVE_SPAWN_H"]="1" +S["NEXT_SPAWN_H"]="<spawn.h>" +S["NEXT_SIGNAL_H"]="<signal.h>" +S["HAVE_TYPE_VOLATILE_SIG_ATOMIC_T"]="1" +S["HAVE_STRUCT_SIGACTION_SA_SIGACTION"]="1" +S["HAVE_SIGACTION"]="1" +S["HAVE_SIGINFO_T"]="1" +S["HAVE_SIGSET_T"]="1" +S["HAVE_POSIX_SIGNALBLOCKING"]="1" +S["GNULIB_SIGACTION"]="1" +S["GNULIB_SIGPROCMASK"]="1" +S["GNULIB_SIGNAL_H_SIGPIPE"]="0" +S["SCHED_H"]="" +S["HAVE_STRUCT_SCHED_PARAM"]="" +S["HAVE_SCHED_H"]="" +S["NEXT_SCHED_H"]="" +S["REPLACE_STRSIGNAL"]="0" +S["REPLACE_STRERROR"]="0" +S["REPLACE_STRCASESTR"]="0" +S["REPLACE_STRSTR"]="1" +S["REPLACE_STRDUP"]="0" +S["REPLACE_MEMMEM"]="0" +S["HAVE_STRVERSCMP"]="1" +S["HAVE_DECL_STRSIGNAL"]="1" +S["HAVE_DECL_STRERROR"]="1" +S["HAVE_DECL_STRTOK_R"]="1" +S["HAVE_STRCASESTR"]="1" +S["HAVE_STRSEP"]="1" +S["HAVE_STRPBRK"]="1" +S["HAVE_DECL_STRNLEN"]="1" +S["HAVE_DECL_STRNDUP"]="1" +S["HAVE_STRNDUP"]="1" +S["HAVE_DECL_STRDUP"]="1" +S["HAVE_STRCHRNUL"]="1" +S["HAVE_STPNCPY"]="1" +S["HAVE_STPCPY"]="1" +S["HAVE_RAWMEMCHR"]="1" +S["HAVE_DECL_MEMRCHR"]="1" +S["HAVE_MEMPCPY"]="1" +S["HAVE_DECL_MEMMEM"]="1" +S["GNULIB_STRVERSCMP"]="0" +S["GNULIB_STRSIGNAL"]="1" +S["GNULIB_STRERROR"]="1" +S["GNULIB_MBSTOK_R"]="0" +S["GNULIB_MBSSEP"]="0" +S["GNULIB_MBSSPN"]="0" +S["GNULIB_MBSPBRK"]="0" +S["GNULIB_MBSCSPN"]="0" +S["GNULIB_MBSCASESTR"]="0" +S["GNULIB_MBSPCASECMP"]="0" +S["GNULIB_MBSNCASECMP"]="0" +S["GNULIB_MBSCASECMP"]="0" +S["GNULIB_MBSSTR"]="0" +S["GNULIB_MBSRCHR"]="0" +S["GNULIB_MBSCHR"]="0" +S["GNULIB_MBSNLEN"]="0" +S["GNULIB_MBSLEN"]="0" +S["GNULIB_STRTOK_R"]="0" +S["GNULIB_STRCASESTR"]="0" +S["GNULIB_STRSTR"]="1" +S["GNULIB_STRSEP"]="0" +S["GNULIB_STRPBRK"]="0" +S["GNULIB_STRNLEN"]="1" +S["GNULIB_STRNDUP"]="1" +S["GNULIB_STRDUP"]="0" +S["GNULIB_STRCHRNUL"]="1" +S["GNULIB_STPNCPY"]="0" +S["GNULIB_STPCPY"]="0" +S["GNULIB_RAWMEMCHR"]="1" +S["GNULIB_MEMRCHR"]="0" +S["GNULIB_MEMPCPY"]="0" +S["GNULIB_MEMMEM"]="0" +S["SPAWN_H"]="" +S["REPLACE_POSIX_SPAWN"]="0" +S["HAVE_POSIX_SPAWN"]="1" +S["GNULIB_POSIX_SPAWNATTR_DESTROY"]="1" +S["GNULIB_POSIX_SPAWNATTR_SETSIGMASK"]="1" +S["GNULIB_POSIX_SPAWNATTR_GETSIGMASK"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT"]="0" +S["GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY"]="0" +S["GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM"]="0" +S["GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETPGROUP"]="0" +S["GNULIB_POSIX_SPAWNATTR_GETPGROUP"]="0" +S["GNULIB_POSIX_SPAWNATTR_SETFLAGS"]="1" +S["GNULIB_POSIX_SPAWNATTR_GETFLAGS"]="0" +S["GNULIB_POSIX_SPAWNATTR_INIT"]="1" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY"]="1" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN"]="1" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2"]="1" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE"]="1" +S["GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT"]="1" +S["GNULIB_POSIX_SPAWNP"]="1" +S["GNULIB_POSIX_SPAWN"]="0" +S["APPLE_UNIVERSAL_BUILD"]="0" +S["LOCALE_FR_UTF8"]="none" +S["LOCALE_ZH_CN"]="none" +S["LOCALE_JA"]="none" +S["NEXT_MATH_H"]="<math.h>" +S["VOID_UNSETENV"]="0" +S["REPLACE_STRTOD"]="0" +S["REPLACE_PUTENV"]="0" +S["REPLACE_MKSTEMP"]="0" +S["HAVE_DECL_GETLOADAVG"]="1" +S["HAVE_UNSETENV"]="1" +S["HAVE_SYS_LOADAVG_H"]="0" +S["HAVE_STRUCT_RANDOM_DATA"]="1" +S["HAVE_STRTOULL"]="1" +S["HAVE_STRTOLL"]="1" +S["HAVE_STRTOD"]="1" +S["HAVE_SETENV"]="1" +S["HAVE_RPMATCH"]="1" +S["HAVE_RANDOM_R"]="1" +S["HAVE_REALLOC_POSIX"]="1" +S["HAVE_MKDTEMP"]="1" +S["HAVE_GETSUBOPT"]="1" +S["HAVE_CALLOC_POSIX"]="1" +S["HAVE_ATOLL"]="1" +S["GNULIB_UNSETENV"]="1" +S["GNULIB_STRTOULL"]="0" +S["GNULIB_STRTOLL"]="0" +S["GNULIB_STRTOD"]="1" +S["GNULIB_SETENV"]="1" +S["GNULIB_RPMATCH"]="0" +S["GNULIB_RANDOM_R"]="0" +S["GNULIB_PUTENV"]="0" +S["GNULIB_MKSTEMP"]="1" +S["GNULIB_MKDTEMP"]="1" +S["GNULIB_GETSUBOPT"]="0" +S["GNULIB_GETLOADAVG"]="0" +S["GNULIB_ATOLL"]="0" +S["GNULIB_CALLOC_POSIX"]="0" +S["GNULIB_REALLOC_POSIX"]="0" +S["GNULIB_MALLOC_POSIX"]="1" +S["HAVE_MALLOC_POSIX"]="1" +S["REPLACE_MKDIR"]="0" +S["REPLACE_LSTAT"]="0" +S["HAVE_LCHMOD"]="1" +S["GNULIB_LSTAT"]="1" +S["GNULIB_LCHMOD"]="0" +S["LTLIBMULTITHREAD"]="" +S["LIBMULTITHREAD"]="" +S["LTLIBTHREAD"]="" +S["LIBTHREAD"]="" +S["LIBPTH_PREFIX"]="" +S["LTLIBPTH"]="" +S["LIBPTH"]="" +S["LOCALCHARSET_TESTS_ENVIRONMENT"]="CHARSETALIASDIR=\"$(top_builddir)/lib\"" +S["GLIBC21"]="yes" +S["SYS_TIME_H"]="" +S["REPLACE_GETTIMEOFDAY"]="0" +S["HAVE_STRUCT_TIMEVAL"]="1" +S["HAVE_SYS_TIME_H"]="1" +S["NEXT_SYS_TIME_H"]="<sys/time.h>" +S["LTLIBINTL"]="" +S["LIBINTL"]="" +S["GETOPT_H"]="" +S["REPLACE_TRUNCL"]="0" +S["REPLACE_SIGNBIT_USING_GCC"]="1" +S["REPLACE_SIGNBIT"]="0" +S["REPLACE_ROUNDL"]="0" +S["REPLACE_ROUNDF"]="0" +S["REPLACE_ROUND"]="0" +S["REPLACE_NAN"]="0" +S["REPLACE_LDEXPL"]="0" +S["REPLACE_ISNAN"]="0" +S["REPLACE_ISINF"]="0" +S["REPLACE_ISFINITE"]="0" +S["REPLACE_HUGE_VAL"]="0" +S["REPLACE_FREXPL"]="0" +S["REPLACE_FREXP"]="0" +S["REPLACE_FLOORL"]="0" +S["REPLACE_FLOORF"]="0" +S["REPLACE_CEILL"]="0" +S["REPLACE_CEILF"]="0" +S["HAVE_DECL_TRUNCF"]="1" +S["HAVE_DECL_TRUNC"]="1" +S["HAVE_DECL_TANL"]="1" +S["HAVE_DECL_SQRTL"]="1" +S["HAVE_DECL_SINL"]="1" +S["HAVE_DECL_LOGL"]="1" +S["HAVE_DECL_LDEXPL"]="1" +S["HAVE_DECL_FREXPL"]="1" +S["HAVE_DECL_EXPL"]="1" +S["HAVE_DECL_COSL"]="1" +S["HAVE_DECL_ATANL"]="1" +S["HAVE_DECL_ASINL"]="1" +S["HAVE_DECL_ACOSL"]="1" +S["HAVE_ISNANL"]="1" +S["HAVE_ISNAND"]="1" +S["HAVE_ISNANF"]="1" +S["GNULIB_TRUNCL"]="0" +S["GNULIB_TRUNCF"]="0" +S["GNULIB_TRUNC"]="0" +S["GNULIB_SIGNBIT"]="1" +S["GNULIB_ROUNDL"]="0" +S["GNULIB_ROUNDF"]="0" +S["GNULIB_ROUND"]="0" +S["GNULIB_MATHL"]="0" +S["GNULIB_LDEXPL"]="0" +S["GNULIB_ISNANL"]="0" +S["GNULIB_ISNAND"]="0" +S["GNULIB_ISNANF"]="0" +S["GNULIB_ISNAN"]="0" +S["GNULIB_ISINF"]="0" +S["GNULIB_ISFINITE"]="0" +S["GNULIB_FREXPL"]="1" +S["GNULIB_FREXP"]="1" +S["GNULIB_FLOORL"]="0" +S["GNULIB_FLOORF"]="0" +S["GNULIB_CEILL"]="0" +S["GNULIB_CEILF"]="0" +S["FLOAT_H"]="" +S["NEXT_FLOAT_H"]="" +S["REPLACE_PERROR"]="0" +S["REPLACE_GETLINE"]="0" +S["HAVE_DECL_GETLINE"]="1" +S["HAVE_DECL_GETDELIM"]="1" +S["REPLACE_FCLOSE"]="0" +S["REPLACE_FFLUSH"]="1" +S["REPLACE_FTELL"]="0" +S["REPLACE_FTELLO"]="0" +S["HAVE_FTELLO"]="1" +S["REPLACE_FSEEK"]="0" +S["REPLACE_FSEEKO"]="1" +S["HAVE_FSEEKO"]="1" +S["REPLACE_FREOPEN"]="0" +S["REPLACE_FOPEN"]="0" +S["REPLACE_OBSTACK_PRINTF"]="0" +S["HAVE_DECL_OBSTACK_PRINTF"]="1" +S["REPLACE_VASPRINTF"]="1" +S["HAVE_VASPRINTF"]="1" +S["REPLACE_VDPRINTF"]="0" +S["HAVE_VDPRINTF"]="1" +S["REPLACE_DPRINTF"]="0" +S["HAVE_DPRINTF"]="1" +S["REPLACE_VSPRINTF"]="0" +S["REPLACE_SPRINTF"]="0" +S["HAVE_DECL_VSNPRINTF"]="1" +S["REPLACE_VSNPRINTF"]="0" +S["HAVE_DECL_SNPRINTF"]="1" +S["REPLACE_SNPRINTF"]="0" +S["REPLACE_VPRINTF"]="0" +S["REPLACE_PRINTF"]="0" +S["REPLACE_VFPRINTF"]="0" +S["REPLACE_FPRINTF"]="0" +S["REPLACE_STDIO_WRITE_FUNCS"]="0" +S["GNULIB_STDIO_H_SIGPIPE"]="0" +S["GNULIB_PERROR"]="0" +S["GNULIB_GETLINE"]="0" +S["GNULIB_GETDELIM"]="0" +S["GNULIB_FWRITE"]="1" +S["GNULIB_PUTS"]="1" +S["GNULIB_FPUTS"]="1" +S["GNULIB_PUTCHAR"]="1" +S["GNULIB_PUTC"]="1" +S["GNULIB_FPUTC"]="1" +S["GNULIB_FCLOSE"]="0" +S["GNULIB_FFLUSH"]="1" +S["GNULIB_FTELLO"]="1" +S["GNULIB_FTELL"]="0" +S["GNULIB_FSEEKO"]="1" +S["GNULIB_FSEEK"]="0" +S["GNULIB_FREOPEN"]="0" +S["GNULIB_FOPEN"]="1" +S["GNULIB_OBSTACK_PRINTF_POSIX"]="0" +S["GNULIB_OBSTACK_PRINTF"]="0" +S["GNULIB_VASPRINTF"]="1" +S["GNULIB_VDPRINTF"]="0" +S["GNULIB_DPRINTF"]="0" +S["GNULIB_VSPRINTF_POSIX"]="0" +S["GNULIB_VSNPRINTF"]="0" +S["GNULIB_VPRINTF_POSIX"]="0" +S["GNULIB_VPRINTF"]="1" +S["GNULIB_VFPRINTF_POSIX"]="0" +S["GNULIB_VFPRINTF"]="1" +S["GNULIB_SPRINTF_POSIX"]="0" +S["GNULIB_SNPRINTF"]="1" +S["GNULIB_PRINTF_POSIX"]="0" +S["GNULIB_PRINTF"]="1" +S["GNULIB_FPRINTF_POSIX"]="0" +S["GNULIB_FPRINTF"]="1" +S["FCNTL_H"]="fcntl.h" +S["NEXT_FCNTL_H"]="<fcntl.h>" +S["REPLACE_OPEN"]="0" +S["GNULIB_OPEN"]="1" +S["EOVERFLOW_VALUE"]="" +S["EOVERFLOW_HIDDEN"]="" +S["ENOLINK_VALUE"]="" +S["ENOLINK_HIDDEN"]="" +S["EMULTIHOP_VALUE"]="" +S["EMULTIHOP_HIDDEN"]="" +S["ERRNO_H"]="" +S["NEXT_ERRNO_H"]="" +S["PRAGMA_SYSTEM_HEADER"]="#pragma GCC system_header" +S["INCLUDE_NEXT_AS_FIRST_DIRECTIVE"]="include_next" +S["INCLUDE_NEXT"]="include_next" +S["UNISTD_H_HAVE_WINSOCK2_H"]="0" +S["REPLACE_WRITE"]="0" +S["REPLACE_LSEEK"]="0" +S["REPLACE_LCHOWN"]="0" +S["REPLACE_GETPAGESIZE"]="0" +S["REPLACE_GETCWD"]="0" +S["REPLACE_FCHDIR"]="0" +S["REPLACE_CLOSE"]="0" +S["REPLACE_CHOWN"]="0" +S["HAVE_SYS_PARAM_H"]="0" +S["HAVE_OS_H"]="0" +S["HAVE_DECL_GETLOGIN_R"]="1" +S["HAVE_DECL_ENVIRON"]="1" +S["HAVE_SLEEP"]="1" +S["HAVE_READLINK"]="1" +S["HAVE_LINK"]="1" +S["HAVE_GETUSERSHELL"]="1" +S["HAVE_GETPAGESIZE"]="1" +S["HAVE_GETHOSTNAME"]="1" +S["HAVE_GETDTABLESIZE"]="1" +S["HAVE_GETDOMAINNAME"]="1" +S["HAVE_FTRUNCATE"]="1" +S["HAVE_FSYNC"]="1" +S["HAVE_EUIDACCESS"]="1" +S["HAVE_DUP2"]="1" +S["GNULIB_WRITE"]="0" +S["GNULIB_UNISTD_H_SIGPIPE"]="0" +S["GNULIB_SLEEP"]="0" +S["GNULIB_READLINK"]="0" +S["GNULIB_LSEEK"]="1" +S["GNULIB_LINK"]="0" +S["GNULIB_LCHOWN"]="0" +S["GNULIB_GETUSERSHELL"]="0" +S["GNULIB_GETPAGESIZE"]="0" +S["GNULIB_GETLOGIN_R"]="0" +S["GNULIB_GETHOSTNAME"]="0" +S["GNULIB_GETDTABLESIZE"]="1" +S["GNULIB_GETDOMAINNAME"]="0" +S["GNULIB_GETCWD"]="0" +S["GNULIB_FTRUNCATE"]="0" +S["GNULIB_FSYNC"]="0" +S["GNULIB_FCHDIR"]="0" +S["GNULIB_EUIDACCESS"]="0" +S["GNULIB_ENVIRON"]="1" +S["GNULIB_DUP2"]="0" +S["GNULIB_CLOSE"]="0" +S["GNULIB_CHOWN"]="0" +S["LTLIBCSTACK"]="" +S["LIBCSTACK"]="" +S["LTLIBSIGSEGV"]="" +S["LIBSIGSEGV"]="" +S["LOCALE_FR"]="none" +S["WCHAR_H"]="" +S["REPLACE_WCWIDTH"]="0" +S["REPLACE_WCSRTOMBS"]="0" +S["REPLACE_WCRTOMB"]="0" +S["REPLACE_MBSNRTOWCS"]="0" +S["REPLACE_MBSRTOWCS"]="0" +S["REPLACE_MBRLEN"]="0" +S["REPLACE_MBRTOWC"]="0" +S["REPLACE_MBSINIT"]="0" +S["REPLACE_WCTOB"]="0" +S["REPLACE_BTOWC"]="0" +S["REPLACE_MBSTATE_T"]="0" +S["HAVE_DECL_WCWIDTH"]="1" +S["HAVE_DECL_WCTOB"]="1" +S["HAVE_WCSNRTOMBS"]="1" +S["HAVE_WCSRTOMBS"]="1" +S["HAVE_WCRTOMB"]="1" +S["HAVE_MBSNRTOWCS"]="1" +S["HAVE_MBSRTOWCS"]="1" +S["HAVE_MBRLEN"]="1" +S["HAVE_MBRTOWC"]="1" +S["HAVE_MBSINIT"]="1" +S["HAVE_BTOWC"]="1" +S["GNULIB_WCWIDTH"]="0" +S["GNULIB_WCSNRTOMBS"]="0" +S["GNULIB_WCSRTOMBS"]="0" +S["GNULIB_WCRTOMB"]="1" +S["GNULIB_MBSNRTOWCS"]="0" +S["GNULIB_MBSRTOWCS"]="0" +S["GNULIB_MBRLEN"]="0" +S["GNULIB_MBRTOWC"]="1" +S["GNULIB_MBSINIT"]="1" +S["GNULIB_WCTOB"]="1" +S["GNULIB_BTOWC"]="1" +S["ALLOCA_H"]="alloca.h" +S["ALLOCA"]="" +S["GL_COND_LIBTOOL_FALSE"]="" +S["GL_COND_LIBTOOL_TRUE"]="#" +S["EGREP"]="/bin/grep -E" +S["GREP"]="/bin/grep" +S["CPP"]="gcc -E" +S["host_os"]="linux-gnu" +S["host_vendor"]="unknown" +S["host_cpu"]="x86_64" +S["host"]="x86_64-unknown-linux-gnu" +S["build_os"]="linux-gnu" +S["build_vendor"]="unknown" +S["build_cpu"]="x86_64" +S["build"]="x86_64-unknown-linux-gnu" +S["RANLIB"]="ranlib" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc -std=gnu99" +S["AM_BACKSLASH"]="\\" +S["am__untar"]="${AMTAR} xf -" +S["am__tar"]="${AMTAR} chof - \"$$tardir\"" +S["AMTAR"]="${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run tar" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="gawk" +S["mkdir_p"]="/bin/mkdir -p" +S["MKDIR_P"]="/bin/mkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="" +S["install_sh"]="${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/install-sh" +S["MAKEINFO"]="${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run makeinfo" +S["AUTOHEADER"]="${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoheader" +S["AUTOMAKE"]="${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run automake-1.10b" +S["AUTOCONF"]="${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoconf" +S["ACLOCAL"]="${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run aclocal-1.10b" +S["VERSION"]="1.4.13" +S["PACKAGE"]="m4" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="" +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="http://www.gnu.org/software/m4/" +S["PACKAGE_BUGREPORT"]="bug-m4@gnu.org" +S["PACKAGE_STRING"]="GNU M4 1.4.13" +S["PACKAGE_VERSION"]="1.4.13" +S["PACKAGE_TARNAME"]="m4" +S["PACKAGE_NAME"]="GNU M4" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/bash" +_ACAWK +cat >>"$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"GNU M4\"" +D["PACKAGE_TARNAME"]=" \"m4\"" +D["PACKAGE_VERSION"]=" \"1.4.13\"" +D["PACKAGE_STRING"]=" \"GNU M4 1.4.13\"" +D["PACKAGE_BUGREPORT"]=" \"bug-m4@gnu.org\"" +D["PACKAGE_URL"]=" \"http://www.gnu.org/software/m4/\"" +D["PACKAGE"]=" \"m4\"" +D["VERSION"]=" \"1.4.13\"" +D["STDC_HEADERS"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_MEMORY_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["__EXTENSIONS__"]=" 1" +D["_ALL_SOURCE"]=" 1" +D["_GNU_SOURCE"]=" 1" +D["_POSIX_PTHREAD_SEMANTICS"]=" 1" +D["_TANDEM_SOURCE"]=" 1" +D["HAVE_FSEEKO"]=" 1" +D["HAVE_LONG_LONG_INT"]=" 1" +D["HAVE_UNSIGNED_LONG_LONG_INT"]=" 1" +D["HAVE_ALLOCA_H"]=" 1" +D["HAVE_ALLOCA"]=" 1" +D["HAVE_BTOWC"]=" 1" +D["HAVE_SETRLIMIT"]=" 1" +D["HAVE_SIGALTSTACK"]=" 1" +D["HAVE_MEMPCPY"]=" 1" +D["HAVE___FPENDING"]=" 1" +D["HAVE___FPURGE"]=" 1" +D["HAVE___FREADING"]=" 1" +D["HAVE_GETDTABLESIZE"]=" 1" +D["HAVE_GETTIMEOFDAY"]=" 1" +D["HAVE_LSTAT"]=" 1" +D["HAVE_MBSINIT"]=" 1" +D["HAVE_MBRTOWC"]=" 1" +D["HAVE_PATHCONF"]=" 1" +D["HAVE_POSIX_SPAWN"]=" 1" +D["HAVE_ISBLANK"]=" 1" +D["HAVE_ISWCTYPE"]=" 1" +D["HAVE_WCSCOLL"]=" 1" +D["HAVE_SIGACTION"]=" 1" +D["HAVE_SIGINTERRUPT"]=" 1" +D["HAVE_PIPE"]=" 1" +D["HAVE_WCRTOMB"]=" 1" +D["HAVE_ISWCNTRL"]=" 1" +D["HAVE_SETENV"]=" 1" +D["HAVE_WCTOB"]=" 1" +D["HAVE_LANGINFO_CODESET"]=" 1" +D["HAVE_UCONTEXT_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_ERRNO_H"]=" 1" +D["HAVE_FCNTL_H"]=" 1" +D["HAVE_FLOAT_H"]=" 1" +D["HAVE_STDIO_EXT_H"]=" 1" +D["HAVE_SYS_TIME_H"]=" 1" +D["HAVE_MATH_H"]=" 1" +D["HAVE_SYS_PARAM_H"]=" 1" +D["HAVE_LOCALE_H"]=" 1" +D["HAVE_SCHED_H"]=" 1" +D["HAVE_SIGNAL_H"]=" 1" +D["HAVE_SPAWN_H"]=" 1" +D["HAVE_STDARG_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_WCHAR_H"]=" 1" +D["HAVE_STDIO_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_SYS_SOCKET_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_SYS_WAIT_H"]=" 1" +D["HAVE_WCTYPE_H"]=" 1" +D["FAULT_YIELDS_SIGBUS"]=" 0" +D["HAVE_STACK_OVERFLOW_HANDLING"]=" 1" +D["FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX"]=" 0" +D["FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR"]=" 0" +D["FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE"]=" 0" +D["HAVE_DECL_STRERROR_R"]=" 1" +D["HAVE_STRERROR_R"]=" 1" +D["STRERROR_R_CHAR_P"]=" 1" +D["HAVE_SIG_ATOMIC_T"]=" 1" +D["HAVE_GETOPT_H"]=" 1" +D["HAVE_GETOPT_LONG_ONLY"]=" 1" +D["HAVE_DECL_GETENV"]=" 1" +D["restrict"]=" __restrict" +D["FLT_EXPBIT0_WORD"]=" 0" +D["FLT_EXPBIT0_BIT"]=" 23" +D["HAVE_DECL_GETC_UNLOCKED"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["MALLOC_0_IS_NONNULL"]=" 1" +D["HAVE_MBSTATE_T"]=" 1" +D["HAVE_DECL_SNPRINTF"]=" 1" +D["HAVE__BOOL"]=" 1" +D["HAVE_STDBOOL_H"]=" 1" +D["HAVE_DECL_STRNDUP"]=" 1" +D["HAVE_DECL_STRNLEN"]=" 1" +D["HAVE_DECL_STRSIGNAL"]=" 1" +D["HAVE_DECL_SYS_SIGLIST"]=" 1" +D["HAVE_DECL_CLEARERR_UNLOCKED"]=" 1" +D["HAVE_DECL_FEOF_UNLOCKED"]=" 1" +D["HAVE_DECL_FERROR_UNLOCKED"]=" 1" +D["HAVE_DECL_FFLUSH_UNLOCKED"]=" 1" +D["HAVE_DECL_FGETS_UNLOCKED"]=" 1" +D["HAVE_DECL_FPUTC_UNLOCKED"]=" 1" +D["HAVE_DECL_FPUTS_UNLOCKED"]=" 1" +D["HAVE_DECL_FREAD_UNLOCKED"]=" 1" +D["HAVE_DECL_FWRITE_UNLOCKED"]=" 1" +D["HAVE_DECL_GETCHAR_UNLOCKED"]=" 1" +D["HAVE_DECL_PUTC_UNLOCKED"]=" 1" +D["HAVE_DECL_PUTCHAR_UNLOCKED"]=" 1" +D["HAVE_WCHAR_T"]=" 1" +D["HAVE_WINT_T"]=" 1" +D["HAVE_INTTYPES_H_WITH_UINTMAX"]=" 1" +D["HAVE_STDINT_H_WITH_UINTMAX"]=" 1" +D["HAVE_INTMAX_T"]=" 1" +D["CHECK_PRINTF_SAFE"]=" 1" +D["HAVE_DECL_ALARM"]=" 1" +D["HAVE_ALLOCA"]=" 1" +D["HAVE_DECL_SIGALTSTACK"]=" 1" +D["HAVE_STACK_T"]=" 1" +D["SIGNAL_SAFE_LIST"]=" 1" +D["GNULIB_CLOSE_STREAM"]=" 1" +D["HAVE_ENVIRON_DECL"]=" 1" +D["HAVE_WORKING_O_NOATIME"]=" 1" +D["HAVE_WORKING_O_NOFOLLOW"]=" 1" +D["GNULIB_FOPEN_SAFER"]=" 1" +D["HAVE_DECL___FPENDING"]=" 1" +D["HAVE_DECL_FPURGE"]=" 0" +D["HAVE_FREXP_IN_LIBC"]=" 1" +D["HAVE_FREXPL_IN_LIBC"]=" 1" +D["HAVE_INLINE"]=" 1" +D["HAVE_ISNAND_IN_LIBC"]=" 1" +D["HAVE_ISNANF_IN_LIBC"]=" 1" +D["LDBL_EXPBIT0_WORD"]=" 2" +D["LDBL_EXPBIT0_BIT"]=" 0" +D["LSTAT_FOLLOWS_SLASHED_SYMLINK"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_MALLOC"]=" 1" +D["GNULIB_MALLOC_GNU"]=" 1" +D["HAVE_MALLOC_POSIX"]=" 1" +D["HAVE_MKDTEMP"]=" 1" +D["HAVE_OBSTACK"]=" 1" +D["GNULIB_OPEN"]=" 1" +D["HAVE_FREXP_IN_LIBC"]=" 1" +D["HAVE_LDEXP_IN_LIBC"]=" 1" +D["HAVE_FREXPL_IN_LIBC"]=" 1" +D["HAVE_LDEXPL_IN_LIBC"]=" 1" +D["HAVE_RAWMEMCHR"]=" 1" +D["_REGEX_LARGE_OFFSETS"]=" 1" +D["re_syntax_options"]=" rpl_re_syntax_options" +D["re_set_syntax"]=" rpl_re_set_syntax" +D["re_compile_pattern"]=" rpl_re_compile_pattern" +D["re_compile_fastmap"]=" rpl_re_compile_fastmap" +D["re_search"]=" rpl_re_search" +D["re_search_2"]=" rpl_re_search_2" +D["re_match"]=" rpl_re_match" +D["re_match_2"]=" rpl_re_match_2" +D["re_set_registers"]=" rpl_re_set_registers" +D["re_comp"]=" rpl_re_comp" +D["re_exec"]=" rpl_re_exec" +D["regcomp"]=" rpl_regcomp" +D["regexec"]=" rpl_regexec" +D["regerror"]=" rpl_regerror" +D["regfree"]=" rpl_regfree" +D["HAVE_LIBINTL_H"]=" 1" +D["HAVE_DECL_ISBLANK"]=" 1" +D["HAVE_STRUCT_SIGACTION_SA_SIGACTION"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_SNPRINTF"]=" 1" +D["HAVE_STRUCT_RANDOM_DATA"]=" 1" +D["HAVE_STRCHRNUL"]=" 1" +D["HAVE_STRNDUP"]=" 1" +D["HAVE_STRSIGNAL"]=" 1" +D["HAVE_STRTOL"]=" 1" +D["HAVE___SECURE_GETENV"]=" 1" +D["USE_UNLOCKED_IO"]=" 1" +D["HAVE_SNPRINTF"]=" 1" +D["HAVE_STRNLEN"]=" 1" +D["HAVE_WCSLEN"]=" 1" +D["HAVE_WCSNLEN"]=" 1" +D["HAVE_MBRTOWC"]=" 1" +D["HAVE_WCRTOMB"]=" 1" +D["HAVE_DECL__SNPRINTF"]=" 0" +D["HAVE_VASPRINTF"]=" 1" +D["HAVE_VASPRINTF"]=" 1" +D["NEED_PRINTF_INFINITE_LONG_DOUBLE"]=" 1" +D["HAVE_SNPRINTF"]=" 1" +D["HAVE_STRNLEN"]=" 1" +D["HAVE_WCSLEN"]=" 1" +D["HAVE_WCSNLEN"]=" 1" +D["HAVE_MBRTOWC"]=" 1" +D["HAVE_WCRTOMB"]=" 1" +D["HAVE_DECL__SNPRINTF"]=" 0" +D["HAVE_WAITID"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["DBL_EXPBIT0_WORD"]=" 1" +D["DBL_EXPBIT0_BIT"]=" 20" +D["FLT_EXPBIT0_WORD"]=" 0" +D["FLT_EXPBIT0_BIT"]=" 23" +D["LDBL_EXPBIT0_WORD"]=" 2" +D["LDBL_EXPBIT0_BIT"]=" 0" +D["HAVE_WCHAR_T"]=" 1" +D["HAVE_WINT_T"]=" 1" +D["HAVE_UNSETENV"]=" 1" +D["HAVE_DECL_WCTOB"]=" 1" +D["RENAME_OPEN_FILE_WORKS"]=" 1" +D["SYSCMD_SHELL"]=" \"/bin/sh\"" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_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 \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + as_fn_error "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $srcdir in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi + ;; + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "stamp-h":C) test -z "$CONFIG_HEADERS" || date > stamp-h ;; + + esac +done # for ac_tag + + +as_fn_exit 0 diff --git a/coreseek/m4-1.4.13/configure b/coreseek/m4-1.4.13/configure new file mode 100755 index 0000000..97fb4c5 --- /dev/null +++ b/coreseek/m4-1.4.13/configure @@ -0,0 +1,26876 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.63b for GNU M4 1.4.13. +# +# Report bugs to <bug-m4@gnu.org>. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) set -o posix ;; #( + *) : ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) set -o posix ;; #( + *) : ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then + : +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-m4@gnu.org +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit [STATUS=$?] +# ---------------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + as_status=$? + set +e + as_fn_set_status ${1-$as_status} + exit ${1-$as_status} +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 +} + +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 + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +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='mkdir -p "$as_dir"' +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 </dev/null 6>&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= + +# Identity of this package. +PACKAGE_NAME='GNU M4' +PACKAGE_TARNAME='m4' +PACKAGE_VERSION='1.4.13' +PACKAGE_STRING='GNU M4 1.4.13' +PACKAGE_BUGREPORT='bug-m4@gnu.org' +PACKAGE_URL='http://www.gnu.org/software/m4/' + +ac_unique_file="src/m4.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +gl_use_threads_default= +ac_func_list= +ac_header_list= +ac_subst_vars='M4tests_LTLIBOBJS +M4tests_LIBOBJS +M4_LTLIBOBJS +M4_LIBOBJS +LTLIBOBJS +LIBOBJS +LIBTESTS_LIBDEPS +LIBM4_LTLIBDEPS +LIBM4_LIBDEPS +POSIX_SPAWN_PORTED_FALSE +POSIX_SPAWN_PORTED_TRUE +REPLACE_ISWCNTRL +WCTYPE_H +HAVE_WCTYPE_H +NEXT_WCTYPE_H +HAVE_ISWCNTRL +NEXT_WCHAR_H +HAVE_WCHAR_H +HAVE_WINT_T +HAVE_UNISTD_H +NEXT_UNISTD_H +SYS_WAIT_H +NEXT_SYS_WAIT_H +SYS_STAT_H +NEXT_SYS_STAT_H +HAVE_LSTAT +POW_LIB +NEXT_STRING_H +HAVE_RANDOM_H +NEXT_STDLIB_H +NEXT_STDIO_H +STDINT_H +WINT_T_SUFFIX +WCHAR_T_SUFFIX +SIG_ATOMIC_T_SUFFIX +SIZE_T_SUFFIX +PTRDIFF_T_SUFFIX +HAVE_SIGNED_WINT_T +HAVE_SIGNED_WCHAR_T +HAVE_SIGNED_SIG_ATOMIC_T +BITSIZEOF_WINT_T +BITSIZEOF_WCHAR_T +BITSIZEOF_SIG_ATOMIC_T +BITSIZEOF_SIZE_T +BITSIZEOF_PTRDIFF_T +HAVE_SYS_BITYPES_H +HAVE_SYS_INTTYPES_H +HAVE_STDINT_H +NEXT_STDINT_H +HAVE_SYS_TYPES_H +HAVE_INTTYPES_H +HAVE_UNSIGNED_LONG_LONG_INT +HAVE_LONG_LONG_INT +HAVE__BOOL +STDBOOL_H +NEXT_STDARG_H +STDARG_H +HAVE_SPAWN_H +NEXT_SPAWN_H +NEXT_SIGNAL_H +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T +HAVE_STRUCT_SIGACTION_SA_SIGACTION +HAVE_SIGACTION +HAVE_SIGINFO_T +HAVE_SIGSET_T +HAVE_POSIX_SIGNALBLOCKING +GNULIB_SIGACTION +GNULIB_SIGPROCMASK +GNULIB_SIGNAL_H_SIGPIPE +SCHED_H +HAVE_STRUCT_SCHED_PARAM +HAVE_SCHED_H +NEXT_SCHED_H +REPLACE_STRSIGNAL +REPLACE_STRERROR +REPLACE_STRCASESTR +REPLACE_STRSTR +REPLACE_STRDUP +REPLACE_MEMMEM +HAVE_STRVERSCMP +HAVE_DECL_STRSIGNAL +HAVE_DECL_STRERROR +HAVE_DECL_STRTOK_R +HAVE_STRCASESTR +HAVE_STRSEP +HAVE_STRPBRK +HAVE_DECL_STRNLEN +HAVE_DECL_STRNDUP +HAVE_STRNDUP +HAVE_DECL_STRDUP +HAVE_STRCHRNUL +HAVE_STPNCPY +HAVE_STPCPY +HAVE_RAWMEMCHR +HAVE_DECL_MEMRCHR +HAVE_MEMPCPY +HAVE_DECL_MEMMEM +GNULIB_STRVERSCMP +GNULIB_STRSIGNAL +GNULIB_STRERROR +GNULIB_MBSTOK_R +GNULIB_MBSSEP +GNULIB_MBSSPN +GNULIB_MBSPBRK +GNULIB_MBSCSPN +GNULIB_MBSCASESTR +GNULIB_MBSPCASECMP +GNULIB_MBSNCASECMP +GNULIB_MBSCASECMP +GNULIB_MBSSTR +GNULIB_MBSRCHR +GNULIB_MBSCHR +GNULIB_MBSNLEN +GNULIB_MBSLEN +GNULIB_STRTOK_R +GNULIB_STRCASESTR +GNULIB_STRSTR +GNULIB_STRSEP +GNULIB_STRPBRK +GNULIB_STRNLEN +GNULIB_STRNDUP +GNULIB_STRDUP +GNULIB_STRCHRNUL +GNULIB_STPNCPY +GNULIB_STPCPY +GNULIB_RAWMEMCHR +GNULIB_MEMRCHR +GNULIB_MEMPCPY +GNULIB_MEMMEM +SPAWN_H +REPLACE_POSIX_SPAWN +HAVE_POSIX_SPAWN +GNULIB_POSIX_SPAWNATTR_DESTROY +GNULIB_POSIX_SPAWNATTR_SETSIGMASK +GNULIB_POSIX_SPAWNATTR_GETSIGMASK +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM +GNULIB_POSIX_SPAWNATTR_SETPGROUP +GNULIB_POSIX_SPAWNATTR_GETPGROUP +GNULIB_POSIX_SPAWNATTR_SETFLAGS +GNULIB_POSIX_SPAWNATTR_GETFLAGS +GNULIB_POSIX_SPAWNATTR_INIT +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT +GNULIB_POSIX_SPAWNP +GNULIB_POSIX_SPAWN +APPLE_UNIVERSAL_BUILD +LOCALE_FR_UTF8 +LOCALE_ZH_CN +LOCALE_JA +NEXT_MATH_H +VOID_UNSETENV +REPLACE_STRTOD +REPLACE_PUTENV +REPLACE_MKSTEMP +HAVE_DECL_GETLOADAVG +HAVE_UNSETENV +HAVE_SYS_LOADAVG_H +HAVE_STRUCT_RANDOM_DATA +HAVE_STRTOULL +HAVE_STRTOLL +HAVE_STRTOD +HAVE_SETENV +HAVE_RPMATCH +HAVE_RANDOM_R +HAVE_REALLOC_POSIX +HAVE_MKDTEMP +HAVE_GETSUBOPT +HAVE_CALLOC_POSIX +HAVE_ATOLL +GNULIB_UNSETENV +GNULIB_STRTOULL +GNULIB_STRTOLL +GNULIB_STRTOD +GNULIB_SETENV +GNULIB_RPMATCH +GNULIB_RANDOM_R +GNULIB_PUTENV +GNULIB_MKSTEMP +GNULIB_MKDTEMP +GNULIB_GETSUBOPT +GNULIB_GETLOADAVG +GNULIB_ATOLL +GNULIB_CALLOC_POSIX +GNULIB_REALLOC_POSIX +GNULIB_MALLOC_POSIX +HAVE_MALLOC_POSIX +REPLACE_MKDIR +REPLACE_LSTAT +HAVE_LCHMOD +GNULIB_LSTAT +GNULIB_LCHMOD +LTLIBMULTITHREAD +LIBMULTITHREAD +LTLIBTHREAD +LIBTHREAD +LIBPTH_PREFIX +LTLIBPTH +LIBPTH +LOCALCHARSET_TESTS_ENVIRONMENT +GLIBC21 +SYS_TIME_H +REPLACE_GETTIMEOFDAY +HAVE_STRUCT_TIMEVAL +HAVE_SYS_TIME_H +NEXT_SYS_TIME_H +LTLIBINTL +LIBINTL +GETOPT_H +REPLACE_TRUNCL +REPLACE_SIGNBIT_USING_GCC +REPLACE_SIGNBIT +REPLACE_ROUNDL +REPLACE_ROUNDF +REPLACE_ROUND +REPLACE_NAN +REPLACE_LDEXPL +REPLACE_ISNAN +REPLACE_ISINF +REPLACE_ISFINITE +REPLACE_HUGE_VAL +REPLACE_FREXPL +REPLACE_FREXP +REPLACE_FLOORL +REPLACE_FLOORF +REPLACE_CEILL +REPLACE_CEILF +HAVE_DECL_TRUNCF +HAVE_DECL_TRUNC +HAVE_DECL_TANL +HAVE_DECL_SQRTL +HAVE_DECL_SINL +HAVE_DECL_LOGL +HAVE_DECL_LDEXPL +HAVE_DECL_FREXPL +HAVE_DECL_EXPL +HAVE_DECL_COSL +HAVE_DECL_ATANL +HAVE_DECL_ASINL +HAVE_DECL_ACOSL +HAVE_ISNANL +HAVE_ISNAND +HAVE_ISNANF +GNULIB_TRUNCL +GNULIB_TRUNCF +GNULIB_TRUNC +GNULIB_SIGNBIT +GNULIB_ROUNDL +GNULIB_ROUNDF +GNULIB_ROUND +GNULIB_MATHL +GNULIB_LDEXPL +GNULIB_ISNANL +GNULIB_ISNAND +GNULIB_ISNANF +GNULIB_ISNAN +GNULIB_ISINF +GNULIB_ISFINITE +GNULIB_FREXPL +GNULIB_FREXP +GNULIB_FLOORL +GNULIB_FLOORF +GNULIB_CEILL +GNULIB_CEILF +FLOAT_H +NEXT_FLOAT_H +REPLACE_PERROR +REPLACE_GETLINE +HAVE_DECL_GETLINE +HAVE_DECL_GETDELIM +REPLACE_FCLOSE +REPLACE_FFLUSH +REPLACE_FTELL +REPLACE_FTELLO +HAVE_FTELLO +REPLACE_FSEEK +REPLACE_FSEEKO +HAVE_FSEEKO +REPLACE_FREOPEN +REPLACE_FOPEN +REPLACE_OBSTACK_PRINTF +HAVE_DECL_OBSTACK_PRINTF +REPLACE_VASPRINTF +HAVE_VASPRINTF +REPLACE_VDPRINTF +HAVE_VDPRINTF +REPLACE_DPRINTF +HAVE_DPRINTF +REPLACE_VSPRINTF +REPLACE_SPRINTF +HAVE_DECL_VSNPRINTF +REPLACE_VSNPRINTF +HAVE_DECL_SNPRINTF +REPLACE_SNPRINTF +REPLACE_VPRINTF +REPLACE_PRINTF +REPLACE_VFPRINTF +REPLACE_FPRINTF +REPLACE_STDIO_WRITE_FUNCS +GNULIB_STDIO_H_SIGPIPE +GNULIB_PERROR +GNULIB_GETLINE +GNULIB_GETDELIM +GNULIB_FWRITE +GNULIB_PUTS +GNULIB_FPUTS +GNULIB_PUTCHAR +GNULIB_PUTC +GNULIB_FPUTC +GNULIB_FCLOSE +GNULIB_FFLUSH +GNULIB_FTELLO +GNULIB_FTELL +GNULIB_FSEEKO +GNULIB_FSEEK +GNULIB_FREOPEN +GNULIB_FOPEN +GNULIB_OBSTACK_PRINTF_POSIX +GNULIB_OBSTACK_PRINTF +GNULIB_VASPRINTF +GNULIB_VDPRINTF +GNULIB_DPRINTF +GNULIB_VSPRINTF_POSIX +GNULIB_VSNPRINTF +GNULIB_VPRINTF_POSIX +GNULIB_VPRINTF +GNULIB_VFPRINTF_POSIX +GNULIB_VFPRINTF +GNULIB_SPRINTF_POSIX +GNULIB_SNPRINTF +GNULIB_PRINTF_POSIX +GNULIB_PRINTF +GNULIB_FPRINTF_POSIX +GNULIB_FPRINTF +FCNTL_H +NEXT_FCNTL_H +REPLACE_OPEN +GNULIB_OPEN +EOVERFLOW_VALUE +EOVERFLOW_HIDDEN +ENOLINK_VALUE +ENOLINK_HIDDEN +EMULTIHOP_VALUE +EMULTIHOP_HIDDEN +ERRNO_H +NEXT_ERRNO_H +PRAGMA_SYSTEM_HEADER +INCLUDE_NEXT_AS_FIRST_DIRECTIVE +INCLUDE_NEXT +UNISTD_H_HAVE_WINSOCK2_H +REPLACE_WRITE +REPLACE_LSEEK +REPLACE_LCHOWN +REPLACE_GETPAGESIZE +REPLACE_GETCWD +REPLACE_FCHDIR +REPLACE_CLOSE +REPLACE_CHOWN +HAVE_SYS_PARAM_H +HAVE_OS_H +HAVE_DECL_GETLOGIN_R +HAVE_DECL_ENVIRON +HAVE_SLEEP +HAVE_READLINK +HAVE_LINK +HAVE_GETUSERSHELL +HAVE_GETPAGESIZE +HAVE_GETHOSTNAME +HAVE_GETDTABLESIZE +HAVE_GETDOMAINNAME +HAVE_FTRUNCATE +HAVE_FSYNC +HAVE_EUIDACCESS +HAVE_DUP2 +GNULIB_WRITE +GNULIB_UNISTD_H_SIGPIPE +GNULIB_SLEEP +GNULIB_READLINK +GNULIB_LSEEK +GNULIB_LINK +GNULIB_LCHOWN +GNULIB_GETUSERSHELL +GNULIB_GETPAGESIZE +GNULIB_GETLOGIN_R +GNULIB_GETHOSTNAME +GNULIB_GETDTABLESIZE +GNULIB_GETDOMAINNAME +GNULIB_GETCWD +GNULIB_FTRUNCATE +GNULIB_FSYNC +GNULIB_FCHDIR +GNULIB_EUIDACCESS +GNULIB_ENVIRON +GNULIB_DUP2 +GNULIB_CLOSE +GNULIB_CHOWN +LTLIBCSTACK +LIBCSTACK +LTLIBSIGSEGV +LIBSIGSEGV +LOCALE_FR +WCHAR_H +REPLACE_WCWIDTH +REPLACE_WCSRTOMBS +REPLACE_WCRTOMB +REPLACE_MBSNRTOWCS +REPLACE_MBSRTOWCS +REPLACE_MBRLEN +REPLACE_MBRTOWC +REPLACE_MBSINIT +REPLACE_WCTOB +REPLACE_BTOWC +REPLACE_MBSTATE_T +HAVE_DECL_WCWIDTH +HAVE_DECL_WCTOB +HAVE_WCSNRTOMBS +HAVE_WCSRTOMBS +HAVE_WCRTOMB +HAVE_MBSNRTOWCS +HAVE_MBSRTOWCS +HAVE_MBRLEN +HAVE_MBRTOWC +HAVE_MBSINIT +HAVE_BTOWC +GNULIB_WCWIDTH +GNULIB_WCSNRTOMBS +GNULIB_WCSRTOMBS +GNULIB_WCRTOMB +GNULIB_MBSNRTOWCS +GNULIB_MBSRTOWCS +GNULIB_MBRLEN +GNULIB_MBRTOWC +GNULIB_MBSINIT +GNULIB_WCTOB +GNULIB_BTOWC +ALLOCA_H +ALLOCA +GL_COND_LIBTOOL_FALSE +GL_COND_LIBTOOL_TRUE +EGREP +GREP +CPP +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +RANLIB +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_threads +enable_assert +with_gnu_ld +enable_rpath +with_libsigsegv_prefix +with_libpth_prefix +enable_largefile +with_included_regex +enable_changeword +with_syscmd_shell +with_dmalloc +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_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'` + as_fn_error "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_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 .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures GNU M4 1.4.13 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/m4] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of GNU M4 1.4.13:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-threads={posix|solaris|pth|win32} + specify multithreading API + --disable-threads build without multithread safety + --disable-assert turn off assertions + --disable-rpath do not hardcode runtime library paths + --disable-largefile omit support for large files + --enable-changeword enable -W and changeword() builtin + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libsigsegv-prefix[=DIR] search for libsigsegv in DIR/include and DIR/lib + --without-libsigsegv-prefix don't search for libsigsegv in includedir and libdir + --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib + --without-libpth-prefix don't search for libpth in includedir and libdir + --without-included-regex + don't compile regex; this is the default on systems + with recent-enough versions of the GNU C Library + (use with caution on other systems). + --with-syscmd-shell shell used by syscmd [/bin/sh] + --with-dmalloc use dmalloc, as in dmalloc.tar.gz from + @/ftp.antaire.com:antaire/src/dmalloc. + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to <bug-m4@gnu.org>. +GNU M4 home page: <http://www.gnu.org/software/m4/>. +General help using GNU software: <http://www.gnu.org/gethelp/>. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + $as_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 +GNU M4 configure 1.4.13 +generated by GNU Autoconf 2.63b + +Copyright (C) 2009 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( cat <<\_ASBOX +## ----------------------------- ## +## Report this to bug-m4@gnu.org ## +## ----------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_check_decl LINENO SYMBOL VAR +# ------------------------------------ +# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 +$as_echo_n "checking whether $2 is declared... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $2 + (void) $2; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_decl + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + : +else + eval "$3=yes" +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 +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include <stdio.h> +#include <stdlib.h> +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + echo >>conftest.val; read $3 <conftest.val; ac_retval=0 +else + ac_retval=1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +rm -f conftest.val + + fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_compute_int + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + eval "$4=yes" +else + eval "$4=no" +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 +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_member +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by GNU M4 $as_me 1.4.13, which was +generated by GNU Autoconf 2.63b. 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=. + $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # 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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + 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=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_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=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_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 && + $as_echo "$as_me: caught signal $ac_signal" + $as_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'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > 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 + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +gl_use_threads_default=no +as_fn_append ac_func_list " btowc" +as_fn_append ac_func_list " setrlimit" +as_fn_append ac_header_list " ucontext.h" +as_fn_append ac_func_list " sigaltstack" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_header_list " errno.h" +as_fn_append ac_header_list " fcntl.h" +as_fn_append ac_func_list " mempcpy" +as_fn_append ac_header_list " float.h" +as_fn_append ac_header_list " stdio_ext.h" +as_fn_append ac_func_list " __fpending" +as_fn_append ac_func_list " fpurge" +as_fn_append ac_func_list " __fpurge" +as_fn_append ac_func_list " __freading" +as_fn_append ac_func_list " getdtablesize" +as_fn_append ac_header_list " sys/time.h" +as_fn_append ac_func_list " gettimeofday" +as_fn_append ac_func_list " lstat" +as_fn_append ac_header_list " math.h" +as_fn_append ac_func_list " mbsinit" +as_fn_append ac_func_list " mbrtowc" +as_fn_append ac_func_list " pathconf" +as_fn_append ac_header_list " sys/param.h" +as_fn_append ac_func_list " posix_spawn" +gl_printf_safe=yes +as_fn_append ac_header_list " locale.h" +as_fn_append ac_func_list " isblank" +as_fn_append ac_func_list " iswctype" +as_fn_append ac_func_list " wcscoll" +as_fn_append ac_header_list " sched.h" +as_fn_append ac_func_list " sigaction" +as_fn_append ac_func_list " siginterrupt" +as_fn_append ac_header_list " signal.h" +as_fn_append ac_header_list " spawn.h" +as_fn_append ac_header_list " stdarg.h" +as_fn_append ac_header_list " stdint.h" +as_fn_append ac_header_list " wchar.h" +as_fn_append ac_header_list " stdio.h" +as_fn_append ac_header_list " stdlib.h" +as_fn_append ac_header_list " sys/socket.h" +as_fn_append ac_header_list " string.h" +as_fn_append ac_header_list " sys/stat.h" +as_fn_append ac_header_list " sys/wait.h" +as_fn_append ac_func_list " pipe" +as_fn_append ac_func_list " vasnprintf" +as_fn_append ac_func_list " wcrtomb" +as_fn_append ac_func_list " iswcntrl" +as_fn_append ac_header_list " wctype.h" +as_fn_append ac_func_list " setenv" +as_fn_append ac_func_list " wctob" +# 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,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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 + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_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. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done +done +if test -z "$ac_aux_dir"; then + as_fn_error "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +am__api_version='1.10b' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_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 + $as_echo_n "(cached) " >&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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='m4' + VERSION='1.4.13' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + +AM_BACKSLASH='\' + + + + + +ac_config_headers="$ac_config_headers lib/config.h:lib/config.hin" + + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ { ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +{ { ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +{ { ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +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. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM 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. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + : +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* 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" + if ac_fn_c_try_compile "$LINENO"; then + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then + : +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 +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + $as_echo_n "(cached) " >&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 <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then + : +else + # 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then + # Broken: success on invalid input. +continue +else + # 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$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 <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then + : +else + # 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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then + # Broken: success on invalid input. +continue +else + # 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 + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + : +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = x""yes; then + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + case "$host_os" in + hpux*) + +$as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h + + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } +if test "${ac_cv_sys_largefile_source+set}" = set; then + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> /* for off_t */ + #include <stdio.h> +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_sys_largefile_source=no; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGEFILE_SOURCE 1 +#include <sys/types.h> /* for off_t */ + #include <stdio.h> +int +main () +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_sys_largefile_source=1; break +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_cv_sys_largefile_source=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 +$as_echo "$ac_cv_sys_largefile_source" >&6; } +case $ac_cv_sys_largefile_source in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source +_ACEOF +;; +esac +rm -rf conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +if test $ac_cv_sys_largefile_source != unknown; then + +$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h + +fi + + + + + # IEEE behaviour is the default on all CPUs except Alpha and SH + # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 + # and the GCC 4.1.2 manual). + case "$host_cpu" in + alpha*) + # On Alpha systems, a compiler option provides the behaviour. + # See the ieee(3) manual page, also available at + # <http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/0600____.HTM> + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + else + # Compaq (ex-DEC) C has the option -ieee. + CPPFLAGS="$CPPFLAGS -ieee" + fi + ;; + sh*) + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + fi + ;; + esac + + case $ac_cv_prog_cc_stdc in #( + no) ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if test "${ac_cv_prog_cc_c99+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdbool.h> +#include <stdlib.h> +#include <wchar.h> +#include <stdio.h> + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* 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" + if ac_fn_c_try_compile "$LINENO"; then + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if test "${ac_cv_prog_cc_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + + + + + + + # Check whether --enable-threads was given. +if test "${enable_threads+set}" = set; then + enableval=$enable_threads; gl_use_threads=$enableval +else + if test -n "$gl_use_threads_default"; then + gl_use_threads="$gl_use_threads_default" + else + case "$host_os" in + osf*) gl_use_threads=no ;; + *) gl_use_threads=yes ;; + esac + fi + +fi + + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # For using <pthread.h>: + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks <pthread.h>. cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_TRY_LINK test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in <errno.h>. + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + fi + + + + + + + + + if test -z "$AB_PACKAGE"; then + AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild project... $AB_PACKAGE" >&5 +$as_echo "$as_me: autobuild project... $AB_PACKAGE" >&6;} + + if test -z "$AB_VERSION"; then + AB_VERSION=${PACKAGE_VERSION:-$VERSION} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild revision... $AB_VERSION" >&5 +$as_echo "$as_me: autobuild revision... $AB_VERSION" >&6;} + + hostname=`hostname` + if test "$hostname"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5 +$as_echo "$as_me: autobuild hostname... $hostname" >&6;} + fi + + + + date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` + if test "$?" != 0; then + date=`date` + fi + if test "$date"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5 +$as_echo "$as_me: autobuild timestamp... $date" >&6;} + fi + + + + + + + + + + + + +# M4 is single-threaded; so we can optimize gnulib code by using this: + + + + +# Tandem/NSK is broken - it has 'long long int' but not +# 'unsigned long long int', which confuses assumptions made by gnulib. +# Simply pretend that neither type exists if both do not work. + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 +$as_echo_n "checking for long long int... " >&6; } +if test "${ac_cv_type_long_long_int+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; +int +main () +{ +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + if test "$cross_compiling" = yes; then + ac_cv_type_long_long_int=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + #ifndef LLONG_MAX + # define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + # define LLONG_MAX (HALF - 1 + HALF) + #endif +int +main () +{ +long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_type_long_long_int=yes +else + ac_cv_type_long_long_int=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +else + ac_cv_type_long_long_int=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 +$as_echo "$ac_cv_type_long_long_int" >&6; } + if test $ac_cv_type_long_long_int = yes; then + +$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 +$as_echo_n "checking for unsigned long long int... " >&6; } +if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; +int +main () +{ +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_type_unsigned_long_long_int=yes +else + ac_cv_type_unsigned_long_long_int=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 +$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } + if test $ac_cv_type_unsigned_long_long_int = yes; then + +$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h + + fi + +if test $ac_cv_type_long_long_int:$ac_cv_type_unsigned_long_long_int = yes:no +then + ac_cv_type_long_long_int=no + +$as_echo "#define HAVE_LONG_LONG_INT 0" >>confdefs.h + +fi + + + + + + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if test "${ac_cv_working_alloca_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <alloca.h> +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if test "${ac_cv_func_alloca_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + + + + + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if test "${ac_cv_os_cray+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if test "${ac_cv_c_stack_direction+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + +int +main () +{ + return find_stack_direction () < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + + GNULIB_BTOWC=0; + GNULIB_WCTOB=0; + GNULIB_MBSINIT=0; + GNULIB_MBRTOWC=0; + GNULIB_MBRLEN=0; + GNULIB_MBSRTOWCS=0; + GNULIB_MBSNRTOWCS=0; + GNULIB_WCRTOMB=0; + GNULIB_WCSRTOMBS=0; + GNULIB_WCSNRTOMBS=0; + GNULIB_WCWIDTH=0; + HAVE_BTOWC=1; + HAVE_MBSINIT=1; + HAVE_MBRTOWC=1; + HAVE_MBRLEN=1; + HAVE_MBSRTOWCS=1; + HAVE_MBSNRTOWCS=1; + HAVE_WCRTOMB=1; + HAVE_WCSRTOMBS=1; + HAVE_WCSNRTOMBS=1; + HAVE_DECL_WCTOB=1; + HAVE_DECL_WCWIDTH=1; + REPLACE_MBSTATE_T=0; + REPLACE_BTOWC=0; + REPLACE_WCTOB=0; + REPLACE_MBSINIT=0; + REPLACE_MBRTOWC=0; + REPLACE_MBRLEN=0; + REPLACE_MBSRTOWCS=0; + REPLACE_MBSNRTOWCS=0; + REPLACE_WCRTOMB=0; + REPLACE_WCSRTOMBS=0; + REPLACE_WCWIDTH=0; + WCHAR_H=''; + + + + + for ac_func in $ac_func_list +do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if test "${am_cv_langinfo_codeset+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <langinfo.h> +int +main () +{ +char* cs = nl_langinfo(CODESET); return !cs; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + am_cv_langinfo_codeset=yes +else + am_cv_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then + +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + + + + for ac_header in $ac_header_list +do + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +# for STACK_DIRECTION + + + + + + case "$host_os" in + sunos4* | freebsd* | dragonfly* | openbsd* | netbsd* | kfreebsd* | knetbsd*) # BSD systems + FAULT_YIELDS_SIGBUS=1 ;; + hpux*) # HP-UX + FAULT_YIELDS_SIGBUS=1 ;; + macos* | darwin*) # MacOS X + FAULT_YIELDS_SIGBUS=1 ;; + gnu*) # Hurd + FAULT_YIELDS_SIGBUS=1 ;; + *) + FAULT_YIELDS_SIGBUS=0 ;; + esac + +cat >>confdefs.h <<_ACEOF +#define FAULT_YIELDS_SIGBUS $FAULT_YIELDS_SIGBUS +_ACEOF + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working C stack overflow detection" >&5 +$as_echo_n "checking for working C stack overflow detection... " >&6; } +if test "${ac_cv_sys_stack_overflow_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sys_stack_overflow_works=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <unistd.h> + #include <signal.h> + #if HAVE_SETRLIMIT + # include <sys/types.h> + # include <sys/time.h> + # include <sys/resource.h> + #endif + #ifndef SIGSTKSZ + # define SIGSTKSZ 16384 + #endif + + static union + { + char buffer[2 * SIGSTKSZ]; + long double ld; + long u; + void *p; + } alternate_signal_stack; + + static void + segv_handler (int signo) + { + _exit (0); + } + + static int + c_stack_action () + { + stack_t st; + struct sigaction act; + int r; + + st.ss_flags = 0; + /* Use the midpoint to avoid Irix sigaltstack bug. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; + st.ss_size = SIGSTKSZ; + r = sigaltstack (&st, 0); + if (r != 0) + return r; + + sigemptyset (&act.sa_mask); + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND; + act.sa_handler = segv_handler; + #if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, 0) < 0) + return -1; + #endif + return sigaction (SIGSEGV, &act, 0); + } + static volatile int * + recurse_1 (volatile int n, volatile int *p) + { + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; + } + static int + recurse (volatile int n) + { + int sum = 0; + return *recurse_1 (n, &sum); + } + int + main () + { + #if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly + to the user's machine. On some Linux 2.2.x systems, there + is no stack limit for user processes at all. We don't want + to kill such systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); + #endif + + return c_stack_action () || recurse (0); + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_sys_stack_overflow_works=yes +else + ac_cv_sys_stack_overflow_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_stack_overflow_works" >&5 +$as_echo "$ac_cv_sys_stack_overflow_works" >&6; } + + if test $ac_cv_sys_stack_overflow_works = yes; then + +$as_echo "#define HAVE_STACK_OVERFLOW_HANDLING 1" >>confdefs.h + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct stack_t interpretation" >&5 +$as_echo_n "checking for correct stack_t interpretation... " >&6; } +if test "${gl_cv_sigaltstack_low_base+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_sigaltstack_low_base=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include <stdlib.h> +#include <signal.h> +#if HAVE_SYS_SIGNAL_H +# include <sys/signal.h> +#endif +#ifndef SIGSTKSZ +# define SIGSTKSZ 16384 +#endif +volatile char *stack_lower_bound; +volatile char *stack_upper_bound; +static void check_stack_location (volatile char *addr) +{ + if (addr >= stack_lower_bound && addr <= stack_upper_bound) + exit (0); + else + exit (1); +} +static void stackoverflow_handler (int sig) +{ + char dummy; + check_stack_location (&dummy); +} +int main () +{ + char mystack[2 * SIGSTKSZ]; + stack_t altstack; + struct sigaction action; + /* Install the alternate stack. */ + altstack.ss_sp = mystack + SIGSTKSZ; + altstack.ss_size = SIGSTKSZ; + stack_lower_bound = (char *) altstack.ss_sp; + stack_upper_bound = (char *) altstack.ss_sp + altstack.ss_size - 1; + altstack.ss_flags = 0; /* no SS_DISABLE */ + if (sigaltstack (&altstack, NULL) < 0) + exit (2); + /* Install the SIGSEGV handler. */ + sigemptyset (&action.sa_mask); + action.sa_handler = &stackoverflow_handler; + action.sa_flags = SA_ONSTACK; + if (sigaction (SIGSEGV, &action, (struct sigaction *) NULL) < 0) + exit(3); + /* Provoke a SIGSEGV. */ + raise (SIGSEGV); + exit (3); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_sigaltstack_low_base=yes +else + gl_cv_sigaltstack_low_base=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sigaltstack_low_base" >&5 +$as_echo "$gl_cv_sigaltstack_low_base" >&6; } + if test "$gl_cv_sigaltstack_low_base" = no; then + +$as_echo "#define SIGALTSTACK_SS_REVERSED 1" >>confdefs.h + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for precise C stack overflow detection" >&5 +$as_echo_n "checking for precise C stack overflow detection... " >&6; } +if test "${ac_cv_sys_xsi_stack_overflow_heuristic+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_sys_xsi_stack_overflow_heuristic=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <unistd.h> + #include <signal.h> + #if HAVE_UCONTEXT_H + # include <ucontext.h> + #endif + #if HAVE_SETRLIMIT + # include <sys/types.h> + # include <sys/time.h> + # include <sys/resource.h> + #endif + #ifndef SIGSTKSZ + # define SIGSTKSZ 16384 + #endif + + static union + { + char buffer[2 * SIGSTKSZ]; + long double ld; + long u; + void *p; + } alternate_signal_stack; + + #if STACK_DIRECTION + # define find_stack_direction(ptr) STACK_DIRECTION + #else + static int + find_stack_direction (char const *addr) + { + char dummy; + return (! addr ? find_stack_direction (&dummy) + : addr < &dummy ? 1 : -1); + } + #endif + + static void + segv_handler (int signo, siginfo_t *info, void *context) + { + if (0 < info->si_code) + { + /* For XSI heuristics to work, we need uc_stack to describe + the interrupted stack (as on Solaris), and not the + currently executing stack (as on Linux). */ + ucontext_t const *user_context = context; + char const *stack_min = user_context->uc_stack.ss_sp; + size_t stack_size = user_context->uc_stack.ss_size; + char const *faulting_address = info->si_addr; + size_t s = faulting_address - stack_min; + size_t page_size = sysconf (_SC_PAGESIZE); + if (find_stack_direction (0) < 0) + s += page_size; + if (s < stack_size + page_size) + _exit (0); + } + + _exit (1); + } + + static int + c_stack_action () + { + stack_t st; + struct sigaction act; + int r; + + st.ss_flags = 0; + /* Use the midpoint to avoid Irix sigaltstack bug. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; + st.ss_size = SIGSTKSZ; + r = sigaltstack (&st, 0); + if (r != 0) + return r; + + sigemptyset (&act.sa_mask); + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; + act.sa_sigaction = segv_handler; + #if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, 0) < 0) + return -1; + #endif + return sigaction (SIGSEGV, &act, 0); + } + static volatile int * + recurse_1 (volatile int n, volatile int *p) + { + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; + } + static int + recurse (volatile int n) + { + int sum = 0; + return *recurse_1 (n, &sum); + } + int + main () + { + #if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly + to the user's machine. On some Linux 2.2.x systems, there + is no stack limit for user processes at all. We don't want + to kill such systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); + #endif + + return c_stack_action () || recurse (0); + } + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_sys_xsi_stack_overflow_heuristic=yes +else + ac_cv_sys_xsi_stack_overflow_heuristic=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_xsi_stack_overflow_heuristic" >&5 +$as_echo "$ac_cv_sys_xsi_stack_overflow_heuristic" >&6; } + + if test $ac_cv_sys_xsi_stack_overflow_heuristic = yes; then + +$as_echo "#define HAVE_XSI_STACK_OVERFLOW_HEURISTIC 1" >>confdefs.h + + fi + fi + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# 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 +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${acl_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${acl_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 </dev/null` in +*GNU* | *'with BFD'*) + acl_cv_prog_gnu_ld=yes ;; +*) + acl_cv_prog_gnu_ld=no ;; +esac +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if test "${acl_cv_rpath+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if test "${gl_cv_solaris_64bit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libsigsegv-prefix was given. +if test "${with_libsigsegv_prefix+set}" = set; then + withval=$with_libsigsegv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBSIGSEGV= + LTLIBSIGSEGV= + INCSIGSEGV= + LIBSIGSEGV_PREFIX= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='sigsegv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_a" + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'sigsegv'; then + LIBSIGSEGV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'sigsegv'; then + LIBSIGSEGV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCSIGSEGV="${INCSIGSEGV}${INCSIGSEGV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$dep" + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }$dep" + ;; + esac + done + fi + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-l$name" + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-R$found_dir" + done + fi + + + + + + + + gl_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCSIGSEGV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsigsegv" >&5 +$as_echo_n "checking for libsigsegv... " >&6; } +if test "${gl_cv_lib_sigsegv+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + gl_cv_lib_sigsegv="no, consider installing GNU libsigsegv" + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBSIGSEGV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sigsegv.h> +int +main () +{ +sigsegv_deinstall_handler(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_lib_sigsegv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gl_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_sigsegv" >&5 +$as_echo "$gl_cv_lib_sigsegv" >&6; } + if test "$gl_cv_lib_sigsegv" = yes; then + +$as_echo "#define HAVE_LIBSIGSEGV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libsigsegv" >&5 +$as_echo_n "checking how to link with libsigsegv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBSIGSEGV" >&5 +$as_echo "$LIBSIGSEGV" >&6; } + else + CPPFLAGS="$gl_save_CPPFLAGS" + LIBSIGSEGV= + LTLIBSIGSEGV= + fi + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system is Windows or MSDOS" >&5 +$as_echo_n "checking whether system is Windows or MSDOS... " >&6; } +if test "${ac_cv_win_or_dos+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__ +neither MSDOS nor Windows +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_win_or_dos=yes +else + ac_cv_win_or_dos=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_win_or_dos" >&5 +$as_echo "$ac_cv_win_or_dos" >&6; } + + if test x"$ac_cv_win_or_dos" = xyes; then + ac_fs_accepts_drive_letter_prefix=1 + ac_fs_backslash_is_file_name_separator=1 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether drive letter can start relative path" >&5 +$as_echo_n "checking whether drive letter can start relative path... " >&6; } +if test "${ac_cv_drive_letter_can_be_relative+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#if defined __CYGWIN__ +drive letters are always absolute +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_drive_letter_can_be_relative=yes +else + ac_cv_drive_letter_can_be_relative=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_drive_letter_can_be_relative" >&5 +$as_echo "$ac_cv_drive_letter_can_be_relative" >&6; } + if test x"$ac_cv_drive_letter_can_be_relative" = xyes; then + ac_fs_drive_letter_can_be_relative=1 + else + ac_fs_drive_letter_can_be_relative=0 + fi + else + ac_fs_accepts_drive_letter_prefix=0 + ac_fs_backslash_is_file_name_separator=0 + ac_fs_drive_letter_can_be_relative=0 + fi + + +cat >>confdefs.h <<_ACEOF +#define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX $ac_fs_accepts_drive_letter_prefix +_ACEOF + + + + + +cat >>confdefs.h <<_ACEOF +#define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR $ac_fs_backslash_is_file_name_separator +_ACEOF + + + +cat >>confdefs.h <<_ACEOF +#define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE $ac_fs_drive_letter_can_be_relative +_ACEOF + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if test "${gl_cv_double_slash_root+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # <bug-gnulib@gnu.org>. + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 +$as_echo "$gl_cv_double_slash_root" >&6; } + if test "$gl_cv_double_slash_root" = yes; then + +$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + + fi + + + GNULIB_CHOWN=0; + GNULIB_CLOSE=0; + GNULIB_DUP2=0; + GNULIB_ENVIRON=0; + GNULIB_EUIDACCESS=0; + GNULIB_FCHDIR=0; + GNULIB_FSYNC=0; + GNULIB_FTRUNCATE=0; + GNULIB_GETCWD=0; + GNULIB_GETDOMAINNAME=0; + GNULIB_GETDTABLESIZE=0; + GNULIB_GETHOSTNAME=0; + GNULIB_GETLOGIN_R=0; + GNULIB_GETPAGESIZE=0; + GNULIB_GETUSERSHELL=0; + GNULIB_LCHOWN=0; + GNULIB_LINK=0; + GNULIB_LSEEK=0; + GNULIB_READLINK=0; + GNULIB_SLEEP=0; + GNULIB_UNISTD_H_SIGPIPE=0; + GNULIB_WRITE=0; + HAVE_DUP2=1; + HAVE_EUIDACCESS=1; + HAVE_FSYNC=1; + HAVE_FTRUNCATE=1; + HAVE_GETDOMAINNAME=1; + HAVE_GETDTABLESIZE=1; + HAVE_GETHOSTNAME=1; + HAVE_GETPAGESIZE=1; + HAVE_GETUSERSHELL=1; + HAVE_LINK=1; + HAVE_READLINK=1; + HAVE_SLEEP=1; + HAVE_DECL_ENVIRON=1; + HAVE_DECL_GETLOGIN_R=1; + HAVE_OS_H=0; + HAVE_SYS_PARAM_H=0; + REPLACE_CHOWN=0; + REPLACE_CLOSE=0; + REPLACE_FCHDIR=0; + REPLACE_GETCWD=0; + REPLACE_GETPAGESIZE=0; + REPLACE_LCHOWN=0; + REPLACE_LSEEK=0; + REPLACE_WRITE=0; + UNISTD_H_HAVE_WINSOCK2_H=0; + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 +$as_echo_n "checking whether the preprocessor supports include_next... " >&6; } +if test "${gl_cv_have_include_next+set}" = set; then + $as_echo_n "(cached) " >&6 +else + rm -rf conftestd1a conftestd1b conftestd2 + mkdir conftestd1a conftestd1b conftestd2 + cat <<EOF > conftestd1a/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include_next <conftest.h> +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat <<EOF > conftestd1b/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include <stdio.h> +#include_next <conftest.h> +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat <<EOF > conftestd2/conftest.h +#ifndef DEFINED_IN_CONFTESTD1 +#error "include_next test doesn't work" +#endif +#define DEFINED_IN_CONFTESTD2 +EOF + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <conftest.h> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_have_include_next=yes +else + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <conftest.h> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_have_include_next=buggy +else + gl_cv_have_include_next=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CPPFLAGS="$gl_save_CPPFLAGS" + rm -rf conftestd1a conftestd1b conftestd2 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 +$as_echo "$gl_cv_have_include_next" >&6; } + PRAGMA_SYSTEM_HEADER= + if test $gl_cv_have_include_next = yes; then + INCLUDE_NEXT=include_next + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + if test -n "$GCC"; then + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' + fi + else + if test $gl_cv_have_include_next = buggy; then + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + else + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include + fi + fi + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 +$as_echo_n "checking for complete errno.h... " >&6; } +if test "${gl_cv_header_errno_h_complete+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#if !defined ENOMSG +booboo +#endif +#if !defined EIDRM +booboo +#endif +#if !defined ENOLINK +booboo +#endif +#if !defined EPROTO +booboo +#endif +#if !defined EMULTIHOP +booboo +#endif +#if !defined EBADMSG +booboo +#endif +#if !defined EOVERFLOW +booboo +#endif +#if !defined ENOTSUP +booboo +#endif +#if !defined ECANCELED +booboo +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "booboo" >/dev/null 2>&1; then + gl_cv_header_errno_h_complete=no +else + gl_cv_header_errno_h_complete=yes +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 +$as_echo "$gl_cv_header_errno_h_complete" >&6; } + if test $gl_cv_header_errno_h_complete = yes; then + ERRNO_H='' + else + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_errno_h='<'errno.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <errno.h>" >&5 +$as_echo_n "checking absolute name of <errno.h>... " >&6; } +if test "${gl_cv_next_errno_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_errno_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <errno.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_errno_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/errno.h#{ + s#.*"\(.*/errno.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_errno_h='<'errno.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 +$as_echo "$gl_cv_next_errno_h" >&6; } + fi + NEXT_ERRNO_H=$gl_cv_next_errno_h + + + + ERRNO_H='errno.h' + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 +$as_echo_n "checking for EMULTIHOP value... " >&6; } +if test "${gl_cv_header_errno_h_EMULTIHOP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#ifdef EMULTIHOP +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_EMULTIHOP=yes +else + gl_cv_header_errno_h_EMULTIHOP=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EMULTIHOP = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +#ifdef EMULTIHOP +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_EMULTIHOP=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then + if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include <stdio.h> +#include <stdlib.h> +"; then + : +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 +$as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } + case $gl_cv_header_errno_h_EMULTIHOP in + yes | no) + EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= + ;; + *) + EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" + ;; + esac + + + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 +$as_echo_n "checking for ENOLINK value... " >&6; } +if test "${gl_cv_header_errno_h_ENOLINK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#ifdef ENOLINK +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_ENOLINK=yes +else + gl_cv_header_errno_h_ENOLINK=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_ENOLINK = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +#ifdef ENOLINK +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_ENOLINK=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_ENOLINK = hidden; then + if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include <stdio.h> +#include <stdlib.h> +"; then + : +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 +$as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } + case $gl_cv_header_errno_h_ENOLINK in + yes | no) + ENOLINK_HIDDEN=0; ENOLINK_VALUE= + ;; + *) + ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" + ;; + esac + + + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 +$as_echo_n "checking for EOVERFLOW value... " >&6; } +if test "${gl_cv_header_errno_h_EOVERFLOW+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#ifdef EOVERFLOW +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_EOVERFLOW=yes +else + gl_cv_header_errno_h_EOVERFLOW=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EOVERFLOW = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +#ifdef EOVERFLOW +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_EOVERFLOW=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then + if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " +#define _XOPEN_SOURCE_EXTENDED 1 +#include <errno.h> +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include <stdio.h> +#include <stdlib.h> +"; then + : +fi + + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 +$as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } + case $gl_cv_header_errno_h_EOVERFLOW in + yes | no) + EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= + ;; + *) + EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" + ;; + esac + + + fi + + +ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror_r" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR_R $ac_have_decl +_ACEOF + +for ac_func in strerror_r +do + ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" +if test "x$ac_cv_func_strerror_r" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_STRERROR_R 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 +$as_echo_n "checking whether strerror_r returns char *... " >&6; } +if test "${ac_cv_func_strerror_r_char_p+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + ac_cv_func_strerror_r_char_p=no + if test $ac_cv_have_decl_strerror_r = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + char *p = strerror_r (0, buf, sizeof buf); + return !p || x; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + # strerror_r is not declared. Choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns `int'. + # This test should segfault on the DEC system. + if test "$cross_compiling" = yes; then + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + extern char *strerror_r (); +int +main () +{ +char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + return ! isalpha (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_func_strerror_r_char_p=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 +$as_echo "$ac_cv_func_strerror_r_char_p" >&6; } +if test $ac_cv_func_strerror_r_char_p = yes; then + +$as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h + +fi + + + XGETTEXT_EXTRA_OPTIONS= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = x""yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + + + ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "#include <signal.h> +" +if test "x$ac_cv_type_sig_atomic_t" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_SIG_ATOMIC_T 1 +_ACEOF + + +else + +$as_echo "#define sig_atomic_t int" >>confdefs.h + +fi + + + + GNULIB_OPEN=0; + REPLACE_OPEN=0; + + + + + GNULIB_FPRINTF=0; + GNULIB_FPRINTF_POSIX=0; + GNULIB_PRINTF=0; + GNULIB_PRINTF_POSIX=0; + GNULIB_SNPRINTF=0; + GNULIB_SPRINTF_POSIX=0; + GNULIB_VFPRINTF=0; + GNULIB_VFPRINTF_POSIX=0; + GNULIB_VPRINTF=0; + GNULIB_VPRINTF_POSIX=0; + GNULIB_VSNPRINTF=0; + GNULIB_VSPRINTF_POSIX=0; + GNULIB_DPRINTF=0; + GNULIB_VDPRINTF=0; + GNULIB_VASPRINTF=0; + GNULIB_OBSTACK_PRINTF=0; + GNULIB_OBSTACK_PRINTF_POSIX=0; + GNULIB_FOPEN=0; + GNULIB_FREOPEN=0; + GNULIB_FSEEK=0; + GNULIB_FSEEKO=0; + GNULIB_FTELL=0; + GNULIB_FTELLO=0; + GNULIB_FFLUSH=0; + GNULIB_FCLOSE=0; + GNULIB_FPUTC=0; + GNULIB_PUTC=0; + GNULIB_PUTCHAR=0; + GNULIB_FPUTS=0; + GNULIB_PUTS=0; + GNULIB_FWRITE=0; + GNULIB_GETDELIM=0; + GNULIB_GETLINE=0; + GNULIB_PERROR=0; + GNULIB_STDIO_H_SIGPIPE=0; + REPLACE_STDIO_WRITE_FUNCS=0; + REPLACE_FPRINTF=0; + REPLACE_VFPRINTF=0; + REPLACE_PRINTF=0; + REPLACE_VPRINTF=0; + REPLACE_SNPRINTF=0; + HAVE_DECL_SNPRINTF=1; + REPLACE_VSNPRINTF=0; + HAVE_DECL_VSNPRINTF=1; + REPLACE_SPRINTF=0; + REPLACE_VSPRINTF=0; + HAVE_DPRINTF=1; + REPLACE_DPRINTF=0; + HAVE_VDPRINTF=1; + REPLACE_VDPRINTF=0; + HAVE_VASPRINTF=1; + REPLACE_VASPRINTF=0; + HAVE_DECL_OBSTACK_PRINTF=1; + REPLACE_OBSTACK_PRINTF=0; + REPLACE_FOPEN=0; + REPLACE_FREOPEN=0; + HAVE_FSEEKO=1; + REPLACE_FSEEKO=0; + REPLACE_FSEEK=0; + HAVE_FTELLO=1; + REPLACE_FTELLO=0; + REPLACE_FTELL=0; + REPLACE_FFLUSH=0; + REPLACE_FCLOSE=0; + HAVE_DECL_GETDELIM=1; + HAVE_DECL_GETLINE=1; + REPLACE_GETLINE=0; + REPLACE_PERROR=0; + + + + + + + + + + + + + + + + + GNULIB_CEILF=0; + GNULIB_CEILL=0; + GNULIB_FLOORF=0; + GNULIB_FLOORL=0; + GNULIB_FREXP=0; + GNULIB_FREXPL=0; + GNULIB_ISFINITE=0; + GNULIB_ISINF=0; + GNULIB_ISNAN=0; + GNULIB_ISNANF=0; + GNULIB_ISNAND=0; + GNULIB_ISNANL=0; + GNULIB_LDEXPL=0; + GNULIB_MATHL=0; + GNULIB_ROUND=0; + GNULIB_ROUNDF=0; + GNULIB_ROUNDL=0; + GNULIB_SIGNBIT=0; + GNULIB_TRUNC=0; + GNULIB_TRUNCF=0; + GNULIB_TRUNCL=0; + HAVE_ISNANF=1; + HAVE_ISNAND=1; + HAVE_ISNANL=1; + HAVE_DECL_ACOSL=1; + HAVE_DECL_ASINL=1; + HAVE_DECL_ATANL=1; + HAVE_DECL_COSL=1; + HAVE_DECL_EXPL=1; + HAVE_DECL_FREXPL=1; + HAVE_DECL_LDEXPL=1; + HAVE_DECL_LOGL=1; + HAVE_DECL_SINL=1; + HAVE_DECL_SQRTL=1; + HAVE_DECL_TANL=1; + HAVE_DECL_TRUNC=1; + HAVE_DECL_TRUNCF=1; + REPLACE_CEILF=0; + REPLACE_CEILL=0; + REPLACE_FLOORF=0; + REPLACE_FLOORL=0; + REPLACE_FREXP=0; + REPLACE_FREXPL=0; + REPLACE_HUGE_VAL=0; + REPLACE_ISFINITE=0; + REPLACE_ISINF=0; + REPLACE_ISNAN=0; + REPLACE_LDEXPL=0; + REPLACE_NAN=0; + REPLACE_ROUND=0; + REPLACE_ROUNDF=0; + REPLACE_ROUNDL=0; + REPLACE_SIGNBIT=0; + REPLACE_SIGNBIT_USING_GCC=0; + REPLACE_TRUNCL=0; + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdin defaults to large file offsets" >&5 +$as_echo_n "checking whether stdin defaults to large file offsets... " >&6; } +if test "${gl_cv_var_stdin_large_offset+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +#if defined __SL64 && defined __SCLE /* cygwin */ + /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making + fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and + it is easier to do a version check than building a runtime test. */ +# include <cygwin/version.h> +# if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) + choke me +# endif +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_var_stdin_large_offset=yes +else + gl_cv_var_stdin_large_offset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_var_stdin_large_offset" >&5 +$as_echo "$gl_cv_var_stdin_large_offset" >&6; } + + + + + if test -z "$GETOPT_H"; then + for ac_header in getopt.h +do + ac_fn_c_check_header_mongrel "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" +if test "x$ac_cv_header_getopt_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_GETOPT_H 1 +_ACEOF + +else + GETOPT_H=getopt.h +fi + +done + + fi + + if test -z "$GETOPT_H"; then + for ac_func in getopt_long_only +do + ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" +if test "x$ac_cv_func_getopt_long_only" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_GETOPT_LONG_ONLY 1 +_ACEOF + +else + GETOPT_H=getopt.h +fi +done + + fi + + if test -z "$GETOPT_H"; then + ac_fn_c_check_decl "$LINENO" "optreset" "ac_cv_have_decl_optreset" "#include <getopt.h> +" +if test "x$ac_cv_have_decl_optreset" = x""yes; then + GETOPT_H=getopt.h +fi + + fi + + if test -z "$GETOPT_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 +$as_echo_n "checking for working GNU getopt function... " >&6; } +if test "${gl_cv_func_gnu_getopt+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_fn_c_check_decl "$LINENO" "getopt_clip" "ac_cv_have_decl_getopt_clip" "#include <getopt.h> +" +if test "x$ac_cv_have_decl_getopt_clip" = x""yes; then + gl_cv_func_gnu_getopt=no +else + gl_cv_func_gnu_getopt=yes +fi + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <getopt.h> +int +main () +{ + + char *myargv[3]; + myargv[0] = "conftest"; + myargv[1] = "-+"; + myargv[2] = 0; + return getopt (2, myargv, "+a") != '?'; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_gnu_getopt=yes +else + gl_cv_func_gnu_getopt=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gnu_getopt" >&5 +$as_echo "$gl_cv_func_gnu_getopt" >&6; } + if test "$gl_cv_func_gnu_getopt" = "no"; then + GETOPT_H=getopt.h + fi + fi + +ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_getenv" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETENV $ac_have_decl +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 +$as_echo_n "checking for C/C++ restrict keyword... " >&6; } +if test "${ac_cv_c_restrict+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +typedef int * int_ptr; + int foo (int_ptr $ac_kw ip) { + return ip[0]; + } +int +main () +{ +int s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(t) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_c_restrict=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_restrict" != no && break + done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 +$as_echo "$ac_cv_c_restrict" >&6; } + + case $ac_cv_c_restrict in + restrict) ;; + no) $as_echo "#define restrict /**/" >>confdefs.h + ;; + *) cat >>confdefs.h <<_ACEOF +#define restrict $ac_cv_c_restrict +_ACEOF + ;; + esac + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_time_h='<'sys/time.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/time.h>" >&5 +$as_echo_n "checking absolute name of <sys/time.h>... " >&6; } +if test "${gl_cv_next_sys_time_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_time_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/time.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_sys_time_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/sys/time.h#{ + s#.*"\(.*/sys/time.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_sys_time_h='<'sys/time.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5 +$as_echo "$gl_cv_next_sys_time_h" >&6; } + fi + NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h + + + + + if test $ac_cv_header_sys_time_h = yes; then + HAVE_SYS_TIME_H=1 + else + HAVE_SYS_TIME_H=0 + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 +$as_echo_n "checking for struct timeval... " >&6; } +if test "${gl_cv_sys_struct_timeval+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if HAVE_SYS_TIME_H + #include <sys/time.h> + #endif + #include <time.h> + +int +main () +{ +static struct timeval x; x.tv_sec = x.tv_usec; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_sys_struct_timeval=yes +else + gl_cv_sys_struct_timeval=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_struct_timeval" >&5 +$as_echo "$gl_cv_sys_struct_timeval" >&6; } + if test $gl_cv_sys_struct_timeval = yes; then + HAVE_STRUCT_TIMEVAL=1 + else + HAVE_STRUCT_TIMEVAL=0 + fi + + + REPLACE_GETTIMEOFDAY=0 + + if test $HAVE_SYS_TIME_H = 0 || test $HAVE_STRUCT_TIMEVAL = 0; then + SYS_TIME_H=sys/time.h + else + SYS_TIME_H= + fi + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 +$as_echo_n "checking where to find the exponent in a 'float'... " >&6; } +if test "${gl_cv_cc_float_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_cc_float_expbit0="word 0 bit 23" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_float_expbit0=`cat conftest.out` +else + gl_cv_cc_float_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 +$as_echo "$gl_cv_cc_float_expbit0" >&6; } + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + + +ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getc_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl +_ACEOF + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2.1 or newer" >&5 +$as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; } +if test "${ac_cv_gnu_library_2_1+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then + ac_cv_gnu_library_2_1=yes +else + ac_cv_gnu_library_2_1=no +fi +rm -f conftest* + + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 +$as_echo "$ac_cv_gnu_library_2_1" >&6; } + + GLIBC21="$ac_cv_gnu_library_2_1" + + + + + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } + gl_have_weak=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern void xyzzy (); +#pragma weak xyzzy +int +main () +{ +xyzzy(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_have_weak=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_weak" >&5 +$as_echo "$gl_have_weak" >&6; } + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY. + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = x""yes; then + gl_have_pthread_h=yes +else + gl_have_pthread_h=no +fi + + + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + gl_have_pthread= + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +int +main () +{ +pthread_mutex_lock((pthread_mutex_t*)0); + pthread_mutexattr_init((pthread_mutexattr_t*)0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_have_pthread=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test -n "$gl_have_pthread"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if test "${ac_cv_lib_pthread_pthread_kill+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_lib_pthread_pthread_kill=yes +else + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = x""yes; then + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + case "$host_os" in + solaris* | hpux*) + +$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h + + esac + +fi + + else + # Some library is needed. Try libpthread and libc_r. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if test "${ac_cv_lib_pthread_pthread_kill+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_lib_pthread_pthread_kill=yes +else + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = x""yes; then + gl_have_pthread=yes + LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread +fi + + if test -z "$gl_have_pthread"; then + # For FreeBSD 4. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +$as_echo_n "checking for pthread_kill in -lc_r... " >&6; } +if test "${ac_cv_lib_c_r_pthread_kill+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_lib_c_r_pthread_kill=yes +else + ac_cv_lib_c_r_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = x""yes; then + gl_have_pthread=yes + LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r + LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r +fi + + fi + fi + if test -n "$gl_have_pthread"; then + gl_threads_api=posix + +$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h + + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if test $gl_have_weak = yes; then + +$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then + gl_have_solaristhread= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <thread.h> +#include <synch.h> +int +main () +{ +thr_self(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_have_solaristhread=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gl_save_LIBS" + if test -n "$gl_have_solaristhread"; then + gl_threads_api=solaris + LIBTHREAD=-lthread + LTLIBTHREAD=-lthread + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + +$as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h + + if test $gl_have_weak = yes; then + +$as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + if test "$gl_use_threads" = pth; then + gl_save_CPPFLAGS="$CPPFLAGS" + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 +$as_echo_n "checking how to link with libpth... " >&6; } +if test "${ac_cv_libpth_libs+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libpth-prefix was given. +if test "${with_libpth_prefix+set}" = set; then + withval=$with_libpth_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBPTH= + LTLIBPTH= + INCPTH= + LIBPTH_PREFIX= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='pth ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'pth'; then + LIBPTH_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'pth'; then + LIBPTH_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" + ;; + esac + done + fi + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" + done + fi + + + + + + + ac_cv_libpth_libs="$LIBPTH" + ac_cv_libpth_ltlibs="$LTLIBPTH" + ac_cv_libpth_cppflags="$INCPTH" + ac_cv_libpth_prefix="$LIBPTH_PREFIX" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 +$as_echo "$ac_cv_libpth_libs" >&6; } + LIBPTH="$ac_cv_libpth_libs" + LTLIBPTH="$ac_cv_libpth_ltlibs" + INCPTH="$ac_cv_libpth_cppflags" + LIBPTH_PREFIX="$ac_cv_libpth_prefix" + + for element in $INCPTH; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + + + HAVE_LIBPTH=yes + + + + gl_have_pth= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lpth" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pth.h> +int +main () +{ +pth_self(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_have_pth=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gl_save_LIBS" + if test -n "$gl_have_pth"; then + gl_threads_api=pth + LIBTHREAD="$LIBPTH" + LTLIBTHREAD="$LTLIBPTH" + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + +$as_echo "#define USE_PTH_THREADS 1" >>confdefs.h + + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if test $gl_have_weak = yes; then + +$as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + fi + fi + else + CPPFLAGS="$gl_save_CPPFLAGS" + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=win32 + +$as_echo "#define USE_WIN32_THREADS 1" >>confdefs.h + + fi + fi + fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 +$as_echo_n "checking for multithread API to use... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 +$as_echo "$gl_threads_api" >&6; } + + + + + + + + + + + GNULIB_LCHMOD=0; + GNULIB_LSTAT=0; + HAVE_LCHMOD=1; + REPLACE_LSTAT=0; + REPLACE_MKDIR=0; + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc are POSIX compliant" >&5 +$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } +if test "${gl_cv_func_malloc_posix+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + choke me + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_func_malloc_posix=yes +else + gl_cv_func_malloc_posix=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 +$as_echo "$gl_cv_func_malloc_posix" >&6; } + + + GNULIB_MALLOC_POSIX=0; + GNULIB_REALLOC_POSIX=0; + GNULIB_CALLOC_POSIX=0; + GNULIB_ATOLL=0; + GNULIB_GETLOADAVG=0; + GNULIB_GETSUBOPT=0; + GNULIB_MKDTEMP=0; + GNULIB_MKSTEMP=0; + GNULIB_PUTENV=0; + GNULIB_RANDOM_R=0; + GNULIB_RPMATCH=0; + GNULIB_SETENV=0; + GNULIB_STRTOD=0; + GNULIB_STRTOLL=0; + GNULIB_STRTOULL=0; + GNULIB_UNSETENV=0; + HAVE_ATOLL=1; + HAVE_CALLOC_POSIX=1; + HAVE_GETSUBOPT=1; + HAVE_MALLOC_POSIX=1; + HAVE_MKDTEMP=1; + HAVE_REALLOC_POSIX=1; + HAVE_RANDOM_R=1; + HAVE_RPMATCH=1; + HAVE_SETENV=1; + HAVE_STRTOD=1; + HAVE_STRTOLL=1; + HAVE_STRTOULL=1; + HAVE_STRUCT_RANDOM_DATA=1; + HAVE_SYS_LOADAVG_H=0; + HAVE_UNSETENV=1; + HAVE_DECL_GETLOADAVG=1; + REPLACE_MKSTEMP=0; + REPLACE_PUTENV=0; + REPLACE_STRTOD=0; + VOID_UNSETENV=0; + + + for ac_header in stdlib.h +do + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include <stdlib.h> +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then + gl_cv_func_malloc_0_nonnull=1 +else + gl_cv_func_malloc_0_nonnull=0 +fi + + +cat >>confdefs.h <<_ACEOF +#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull +_ACEOF + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 +$as_echo_n "checking for mbstate_t... " >&6; } +if test "${ac_cv_type_mbstate_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +# include <wchar.h> +int +main () +{ +mbstate_t x; return sizeof x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_type_mbstate_t=yes +else + ac_cv_type_mbstate_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 +$as_echo "$ac_cv_type_mbstate_t" >&6; } + if test $ac_cv_type_mbstate_t = yes; then + +$as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h + + else + +$as_echo "#define mbstate_t int" >>confdefs.h + + fi + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if test "${gt_cv_locale_ja+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if test "${gt_cv_locale_zh_CN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if test "${ac_cv_sys_largefile_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test "${ac_cv_sys_file_offset_bits+set}" = set; then + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if test "${ac_cv_sys_large_files+set}" = set; then + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include <sys/types.h> + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi +fi + + + gl_cv_c_multiarch=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $gl_cv_c_multiarch = yes; then + +$as_echo "#define AA_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + + + + + + + + GNULIB_POSIX_SPAWN=0; + GNULIB_POSIX_SPAWNP=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; + GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0; + GNULIB_POSIX_SPAWNATTR_INIT=0; + GNULIB_POSIX_SPAWNATTR_GETFLAGS=0; + GNULIB_POSIX_SPAWNATTR_SETFLAGS=0; + GNULIB_POSIX_SPAWNATTR_GETPGROUP=0; + GNULIB_POSIX_SPAWNATTR_SETPGROUP=0; + GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0; + GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0; + GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0; + GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0; + GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0; + GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0; + GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0; + GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0; + GNULIB_POSIX_SPAWNATTR_DESTROY=0; + HAVE_POSIX_SPAWN=1; + REPLACE_POSIX_SPAWN=0; + SPAWN_H=''; + + + + + + + if test $ac_cv_func_posix_spawn = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn works" >&5 +$as_echo_n "checking whether posix_spawn works... " >&6; } +if test "${gl_cv_func_posix_spawn_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test $cross_compiling = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <errno.h> +#include <fcntl.h> +#include <signal.h> +#include <spawn.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +extern char **environ; + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +#ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +#endif +#ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +#endif +#ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +#endif + +#define CHILD_PROGRAM_FILENAME "/non/exist/ent" + +static int +fd_safer (int fd) +{ + if (0 <= fd && fd <= 2) + { + int f = fd_safer (dup (fd)); + int e = errno; + close (fd); + errno = e; + fd = f; + } + + return fd; +} + +int +main () +{ + char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL }; + int ofd[2]; + sigset_t blocked_signals; + sigset_t fatal_signal_set; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + int status; + int exitstatus; + + setvbuf (stdout, NULL, _IOFBF, 0); + puts ("This should be seen only once."); + if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) + { + perror ("cannot create pipe"); + exit (1); + } + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + sigemptyset (&fatal_signal_set); + sigaddset (&fatal_signal_set, SIGINT); + sigaddset (&fatal_signal_set, SIGTERM); + sigaddset (&fatal_signal_set, SIGHUP); + sigaddset (&fatal_signal_set, SIGPIPE); + sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 + || (err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 + || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) + || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + if (err == ENOENT) + return 0; + else + { + errno = err; + perror ("subprocess failed"); + exit (1); + } + } + posix_spawn_file_actions_destroy (&actions); + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + close (ofd[0]); + close (ofd[1]); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + exit (1); + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 127) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + exit (1); + } + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext > conftest.out \ + && echo 'This should be seen only once.' > conftest.ok \ + && cmp conftest.out conftest.ok > /dev/null; then + gl_cv_func_posix_spawn_works=yes + else + gl_cv_func_posix_spawn_works=no + fi +else + gl_cv_func_posix_spawn_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_func_posix_spawn_works = yes; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Test whether posix_spawn_file_actions_addopen supports filename arguments + that contain special characters such as '*'. */ + +#include <errno.h> +#include <fcntl.h> +#include <signal.h> +#include <spawn.h> +#include <stdbool.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +extern char **environ; + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +#ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +#endif +#ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +#endif +#ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +#endif + +#define CHILD_PROGRAM_FILENAME "conftest" +#define DATA_FILENAME "conftest%=*#?" + +static int +parent_main (void) +{ + FILE *fp; + char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; + posix_spawn_file_actions_t actions; + bool actions_allocated; + int err; + pid_t child; + int status; + int exitstatus; + + /* Create a data file with specific contents. */ + fp = fopen (DATA_FILENAME, "wb"); + if (fp == NULL) + { + perror ("cannot create data file"); + return 1; + } + fwrite ("Halle Potta", 1, 11, fp); + if (fflush (fp) || fclose (fp)) + { + perror ("cannot prepare data file"); + return 1; + } + + /* Avoid reading from our stdin, as it could block. */ + freopen ("/dev/null", "rb", stdin); + + /* Test whether posix_spawn_file_actions_addopen with this file name + actually works, but spawning a child that reads from this file. */ + actions_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0 + || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + errno = err; + perror ("subprocess failed"); + return 1; + } + posix_spawn_file_actions_destroy (&actions); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + return 1; + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 0) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + return 1; + } + return 0; +} + +static int +child_main (void) +{ + char buf[1024]; + + /* See if reading from STDIN_FILENO yields the expected contents. */ + if (fread (buf, 1, sizeof (buf), stdin) == 11 + && memcmp (buf, "Halle Potta", 11) == 0) + return 0; + else + return 2; +} + +static void +cleanup_then_die (int sig) +{ + /* Clean up data file. */ + unlink (DATA_FILENAME); + + /* Re-raise the signal and die from it. */ + signal (sig, SIG_DFL); + raise (sig); +} + +int +main (int argc, char *argv[]) +{ + int exitstatus; + + if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) + { + /* This is the parent process. */ + signal (SIGINT, cleanup_then_die); + signal (SIGTERM, cleanup_then_die); + #ifdef SIGHUP + signal (SIGHUP, cleanup_then_die); + #endif + + exitstatus = parent_main (); + } + else + { + /* This is the child process. */ + + exitstatus = child_main (); + } + unlink (DATA_FILENAME); + return exitstatus; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + : +else + gl_cv_func_posix_spawn_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + else + case "$host_os" in + aix*) gl_cv_func_posix_spawn_works="guessing no";; + *) gl_cv_func_posix_spawn_works="guessing yes";; + esac + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_works" >&5 +$as_echo "$gl_cv_func_posix_spawn_works" >&6; } + + case "$gl_cv_func_posix_spawn_works" in + *yes) ;; + *) REPLACE_POSIX_SPAWN=1 ;; + esac + else + HAVE_POSIX_SPAWN=0 + fi + + + GNULIB_MEMMEM=0; + GNULIB_MEMPCPY=0; + GNULIB_MEMRCHR=0; + GNULIB_RAWMEMCHR=0; + GNULIB_STPCPY=0; + GNULIB_STPNCPY=0; + GNULIB_STRCHRNUL=0; + GNULIB_STRDUP=0; + GNULIB_STRNDUP=0; + GNULIB_STRNLEN=0; + GNULIB_STRPBRK=0; + GNULIB_STRSEP=0; + GNULIB_STRSTR=0; + GNULIB_STRCASESTR=0; + GNULIB_STRTOK_R=0; + GNULIB_MBSLEN=0; + GNULIB_MBSNLEN=0; + GNULIB_MBSCHR=0; + GNULIB_MBSRCHR=0; + GNULIB_MBSSTR=0; + GNULIB_MBSCASECMP=0; + GNULIB_MBSNCASECMP=0; + GNULIB_MBSPCASECMP=0; + GNULIB_MBSCASESTR=0; + GNULIB_MBSCSPN=0; + GNULIB_MBSPBRK=0; + GNULIB_MBSSPN=0; + GNULIB_MBSSEP=0; + GNULIB_MBSTOK_R=0; + GNULIB_STRERROR=0; + GNULIB_STRSIGNAL=0; + GNULIB_STRVERSCMP=0; + HAVE_DECL_MEMMEM=1; + HAVE_MEMPCPY=1; + HAVE_DECL_MEMRCHR=1; + HAVE_RAWMEMCHR=1; + HAVE_STPCPY=1; + HAVE_STPNCPY=1; + HAVE_STRCHRNUL=1; + HAVE_DECL_STRDUP=1; + HAVE_STRNDUP=1; + HAVE_DECL_STRNDUP=1; + HAVE_DECL_STRNLEN=1; + HAVE_STRPBRK=1; + HAVE_STRSEP=1; + HAVE_STRCASESTR=1; + HAVE_DECL_STRTOK_R=1; + HAVE_DECL_STRERROR=1; + HAVE_DECL_STRSIGNAL=1; + HAVE_STRVERSCMP=1; + REPLACE_MEMMEM=0; + REPLACE_STRDUP=0; + REPLACE_STRSTR=0; + REPLACE_STRCASESTR=0; + REPLACE_STRERROR=0; + REPLACE_STRSIGNAL=0; + + + + + + + + + + + + + GNULIB_SIGNAL_H_SIGPIPE=0; + GNULIB_SIGPROCMASK=0; + GNULIB_SIGACTION=0; + HAVE_POSIX_SIGNALBLOCKING=1; + HAVE_SIGSET_T=1; + HAVE_SIGINFO_T=1; + HAVE_SIGACTION=1; + HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; + + HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +$as_echo_n "checking for uid_t in sys/types.h... " >&6; } +if test "${ac_cv_type_uid_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "uid_t" >/dev/null 2>&1; then + ac_cv_type_uid_t=yes +else + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +$as_echo "$ac_cv_type_uid_t" >&6; } +if test $ac_cv_type_uid_t = no; then + +$as_echo "#define uid_t int" >>confdefs.h + + +$as_echo "#define gid_t int" >>confdefs.h + +fi + + + + + +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_snprintf" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SNPRINTF $ac_have_decl +_ACEOF + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if test "${ac_cv_header_stdbool_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <stdbool.h> + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + bool e = &s; + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + #if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); + #endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_header_stdbool_h=yes +else + ac_cv_header_stdbool_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" +if test "x$ac_cv_type__Bool" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + if test $ac_cv_header_stdbool_h = yes; then + +$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h + + fi + + + + + + + + + + + + + + if test -z "$ERRNO_H"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 +$as_echo_n "checking for working strerror function... " >&6; } +if test "${gl_cv_func_working_strerror+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +int +main () +{ +return !*strerror (-2); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_func_working_strerror=yes +else + gl_cv_func_working_strerror=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +int +main () +{ +return !*strerror (-2); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_working_strerror=yes +else + gl_cv_func_working_strerror=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strerror" >&5 +$as_echo "$gl_cv_func_working_strerror" >&6; } + if test $gl_cv_func_working_strerror = no; then + REPLACE_STRERROR=1 + fi + else + REPLACE_STRERROR=1 + fi + if test $REPLACE_STRERROR = 1; then + + ac_fn_c_check_decl "$LINENO" "strerror" "ac_cv_have_decl_strerror" "$ac_includes_default" +if test "x$ac_cv_have_decl_strerror" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR $ac_have_decl +_ACEOF + + + if test $ac_cv_header_sys_socket_h != yes; then + for ac_header in winsock2.h +do + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF + +fi + +done + + fi + + fi + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_string_h='<'string.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5 +$as_echo_n "checking absolute name of <string.h>... " >&6; } +if test "${gl_cv_next_string_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_string_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/string.h#{ + s#.*"\(.*/string.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_string_h='<'string.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 +$as_echo "$gl_cv_next_string_h" >&6; } + fi + NEXT_STRING_H=$gl_cv_next_string_h + + + + +ac_fn_c_check_decl "$LINENO" "strndup" "ac_cv_have_decl_strndup" "$ac_includes_default" +if test "x$ac_cv_have_decl_strndup" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNDUP $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" +if test "x$ac_cv_have_decl_strnlen" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNLEN $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "strsignal" "ac_cv_have_decl_strsignal" "$ac_includes_default" +if test "x$ac_cv_have_decl_strsignal" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRSIGNAL $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include <signal.h> +/* NetBSD declares sys_siglist in unistd.h. */ +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +" +if test "x$ac_cv_have_decl_sys_siglist" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SYS_SIGLIST $ac_have_decl +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 +$as_echo_n "checking whether stat file-mode macros are broken... " >&6; } +if test "${ac_cv_header_stat_broken+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/stat.h> + +#if defined S_ISBLK && defined S_IFDIR +extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; +#endif + +#if defined S_ISBLK && defined S_IFCHR +extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; +#endif + +#if defined S_ISLNK && defined S_IFREG +extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; +#endif + +#if defined S_ISSOCK && defined S_IFREG +extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_header_stat_broken=no +else + ac_cv_header_stat_broken=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 +$as_echo "$ac_cv_header_stat_broken" >&6; } +if test $ac_cv_header_stat_broken = yes; then + +$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h + +fi + + + + + + + + + +ac_fn_c_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_clearerr_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_feof_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_ferror_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fflush_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fgets_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fputc_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fputs_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fread_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_fwrite_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getchar_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_putc_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_putchar_unlocked" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl +_ACEOF + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if test "${gt_cv_c_wchar_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + wchar_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gt_cv_c_wchar_t=yes +else + gt_cv_c_wchar_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 +$as_echo "$gt_cv_c_wchar_t" >&6; } + if test $gt_cv_c_wchar_t = yes; then + +$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if test "${gt_cv_c_wint_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + wint_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gt_cv_c_wint_t=yes +else + gt_cv_c_wint_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 +$as_echo "$gt_cv_c_wint_t" >&6; } + if test $gt_cv_c_wint_t = yes; then + +$as_echo "#define HAVE_WINT_T 1" >>confdefs.h + + fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = x""yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 +$as_echo_n "checking for inttypes.h... " >&6; } +if test "${gl_cv_header_inttypes_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <inttypes.h> +int +main () +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_header_inttypes_h=yes +else + gl_cv_header_inttypes_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 +$as_echo "$gl_cv_header_inttypes_h" >&6; } + if test $gl_cv_header_inttypes_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 +$as_echo_n "checking for stdint.h... " >&6; } +if test "${gl_cv_header_stdint_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <stdint.h> +int +main () +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_header_stdint_h=yes +else + gl_cv_header_stdint_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 +$as_echo "$gl_cv_header_stdint_h" >&6; } + if test $gl_cv_header_stdint_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 +$as_echo_n "checking for intmax_t... " >&6; } +if test "${gt_cv_c_intmax_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdlib.h> +#if HAVE_STDINT_H_WITH_UINTMAX +#include <stdint.h> +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include <inttypes.h> +#endif + +int +main () +{ +intmax_t x = -1; return !x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gt_cv_c_intmax_t=yes +else + gt_cv_c_intmax_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 +$as_echo "$gt_cv_c_intmax_t" >&6; } + if test $gt_cv_c_intmax_t = yes; then + +$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h + + else + + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + +cat >>confdefs.h <<_ACEOF +#define intmax_t $ac_type +_ACEOF + + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports size specifiers as in C99" >&5 +$as_echo_n "checking whether printf supports size specifiers as in C99... " >&6; } +if test "${gl_cv_func_printf_sizes_c99+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_printf_sizes_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; + darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_printf_sizes_c99="guessing no";; + openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[0-9]*) gl_cv_func_printf_sizes_c99="guessing no";; + solaris*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_sizes_c99="guessing no";; + netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_sizes_c99="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#if HAVE_STDINT_H_WITH_UINTMAX +# include <stdint.h> +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +# include <inttypes.h> +#endif +static char buf[100]; +int main () +{ +#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX + buf[0] = '\0'; + if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 + || strcmp (buf, "12345671 33") != 0) + return 1; +#endif + buf[0] = '\0'; + if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 + || strcmp (buf, "12345672 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 + || strcmp (buf, "12345673 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 + || strcmp (buf, "1.5 33") != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_sizes_c99=yes +else + gl_cv_func_printf_sizes_c99=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_sizes_c99" >&5 +$as_echo "$gl_cv_func_printf_sizes_c99" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports 'long double' arguments" >&5 +$as_echo_n "checking whether printf supports 'long double' arguments... " >&6; } +if test "${gl_cv_func_printf_long_double+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + beos*) gl_cv_func_printf_long_double="guessing no";; + mingw* | pw*) gl_cv_func_printf_long_double="guessing no";; + *) gl_cv_func_printf_long_double="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[10000]; +int main () +{ + buf[0] = '\0'; + if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000e+00 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.75 33") != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_long_double=yes +else + gl_cv_func_printf_long_double=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_long_double" >&5 +$as_echo "$gl_cv_func_printf_long_double" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'double' arguments" >&5 +$as_echo_n "checking whether printf supports infinite 'double' arguments... " >&6; } +if test "${gl_cv_func_printf_infinite+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; + darwin*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; + hpux*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite="guessing no";; + netbsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_infinite="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static int +have_minus_zero () +{ + static double plus_zero = 0.0; + double minus_zero = - plus_zero; + return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; +} +static char buf[10000]; +static double zero = 0.0; +int main () +{ + if (sprintf (buf, "%f", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%f", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%f", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%e", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%e", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%e", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%g", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%g", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%g", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + /* This test fails on HP-UX 10.20. */ + if (have_minus_zero ()) + if (sprintf (buf, "%g", - zero) < 0 + || strcmp (buf, "-0") != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_infinite=yes +else + gl_cv_func_printf_infinite=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_infinite" >&5 +$as_echo "$gl_cv_func_printf_infinite" >&6; } + + + + + + if test -n "$gl_printf_safe"; then + +$as_echo "#define CHECK_PRINTF_SAFE 1" >>confdefs.h + + fi + case "$gl_cv_func_printf_long_double" in + *yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'long double' arguments" >&5 +$as_echo_n "checking whether printf supports infinite 'long double' arguments... " >&6; } +if test "${gl_cv_func_printf_infinite_long_double+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; + *) + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite_long_double="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite_long_double="guessing no";; + darwin*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; + hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite_long_double="guessing no";; + netbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite_long_double="guessing no";; + esac + ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on MacOS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + +#include <float.h> +#include <stdio.h> +#include <string.h> +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static char buf[10000]; +static long double zeroL = 0.0L; +int main () +{ + nocrash_init(); + if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Le", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } +#endif + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_infinite_long_double=yes +else + gl_cv_func_printf_infinite_long_double=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_infinite_long_double" >&5 +$as_echo "$gl_cv_func_printf_infinite_long_double" >&6; } + ;; + *) + gl_cv_func_printf_infinite_long_double="irrelevant" + ;; + esac + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'a' and 'A' directives" >&5 +$as_echo_n "checking whether printf supports the 'a' and 'A' directives... " >&6; } +if test "${gl_cv_func_printf_directive_a+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc >= 2.5 systems. + *-gnu*) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <features.h> + #ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2) + BZ2908 + #endif + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "BZ2908" >/dev/null 2>&1; then + gl_cv_func_printf_directive_a="guessing yes" +else + gl_cv_func_printf_directive_a="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_a="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.922p+1 33") != 0 + && strcmp (buf, "0x3.244p+0 33") != 0 + && strcmp (buf, "0x6.488p-1 33") != 0 + && strcmp (buf, "0xc.91p-2 33") != 0)) + return 1; + if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "-0X1.922P+1 33") != 0 + && strcmp (buf, "-0X3.244P+0 33") != 0 + && strcmp (buf, "-0X6.488P-1 33") != 0 + && strcmp (buf, "-0XC.91P-2 33") != 0)) + return 1; + /* This catches a FreeBSD 6.1 bug: it doesn't round. */ + if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.83p+0 33") != 0 + && strcmp (buf, "0x3.05p-1 33") != 0 + && strcmp (buf, "0x6.0ap-2 33") != 0 + && strcmp (buf, "0xc.14p-3 33") != 0)) + return 1; + /* This catches a FreeBSD 6.1 bug. See + <http://lists.gnu.org/archive/html/bug-gnulib/2007-04/msg00107.html> */ + if (sprintf (buf, "%010a %d", 1.0 / 0.0, 33, 44, 55) < 0 + || buf[0] == '0') + return 1; + /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */ + if (sprintf (buf, "%.1a", 1.999) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + return 1; + /* This catches the same MacOS X 10.3.9 (Darwin 7.9) bug and also a + glibc 2.4 bug <http://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ + if (sprintf (buf, "%.1La", 1.999L) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_directive_a=yes +else + gl_cv_func_printf_directive_a=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_a" >&5 +$as_echo "$gl_cv_func_printf_directive_a" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'F' directive" >&5 +$as_echo_n "checking whether printf supports the 'F' directive... " >&6; } +if test "${gl_cv_func_printf_directive_f+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_directive_f="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; + darwin*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[0-9]*) gl_cv_func_printf_directive_f="guessing no";; + solaris*) gl_cv_func_printf_directive_f="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_f="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 + || strcmp (buf, "1234567.000000 33") != 0) + return 1; + if (sprintf (buf, "%F", 1.0 / 0.0) < 0 + || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) + return 1; + /* This catches a Cygwin 1.5.x bug. */ + if (sprintf (buf, "%.F", 1234.0) < 0 + || strcmp (buf, "1234") != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_directive_f=yes +else + gl_cv_func_printf_directive_f=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_f" >&5 +$as_echo "$gl_cv_func_printf_directive_f" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'n' directive" >&5 +$as_echo_n "checking whether printf supports the 'n' directive... " >&6; } +if test "${gl_cv_func_printf_directive_n+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + *) gl_cv_func_printf_directive_n="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 + || strcmp (buf, "123 ") != 0 + || count != 4) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_directive_n=yes +else + gl_cv_func_printf_directive_n=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_n" >&5 +$as_echo "$gl_cv_func_printf_directive_n" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'ls' directive" >&5 +$as_echo_n "checking whether printf supports the 'ls' directive... " >&6; } +if test "${gl_cv_func_printf_directive_ls+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + openbsd*) gl_cv_func_printf_directive_ls="guessing no";; + irix*) gl_cv_func_printf_directive_ls="guessing no";; + solaris*) gl_cv_func_printf_directive_ls="guessing no";; + cygwin*) gl_cv_func_printf_directive_ls="guessing no";; + beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; + *) gl_cv_func_printf_directive_ls="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> +#include <string.h> +int main () +{ + char buf[100]; + /* Test whether %ls works at all. + This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on + Cygwin 1.5. */ + { + static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "abc") != 0) + return 1; + } + /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an + assertion failure inside libc), but not on OpenBSD 4.0. */ + { + static const wchar_t wstring[] = { 'a', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "a") != 0) + return 1; + } + /* Test whether precisions in %ls are supported as specified in ISO C 99 + section 7.19.6.1: + "If a precision is specified, no more than that many bytes are written + (including shift sequences, if any), and the array shall contain a + null wide character if, to equal the multibyte character sequence + length given by the precision, the function would need to access a + wide character one past the end of the array." + This test fails on Solaris 10. */ + { + static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%.2ls", wstring) < 0 + || strcmp (buf, "ab") != 0) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_directive_ls=yes +else + gl_cv_func_printf_directive_ls=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_ls" >&5 +$as_echo "$gl_cv_func_printf_directive_ls" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5 +$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; } +if test "${gl_cv_func_printf_positions+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) + gl_cv_func_printf_positions="guessing no";; + beos*) gl_cv_func_printf_positions="guessing no";; + mingw* | pw*) gl_cv_func_printf_positions="guessing no";; + *) gl_cv_func_printf_positions="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_positions=yes +else + gl_cv_func_printf_positions=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5 +$as_echo "$gl_cv_func_printf_positions" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the grouping flag" >&5 +$as_echo_n "checking whether printf supports the grouping flag... " >&6; } +if test "${gl_cv_func_printf_flag_grouping+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; + netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; + mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; + *) gl_cv_func_printf_flag_grouping="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + if (sprintf (buf, "%'d %d", 1234567, 99) < 0 + || buf[strlen (buf) - 1] != '9') + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_flag_grouping=yes +else + gl_cv_func_printf_flag_grouping=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_grouping" >&5 +$as_echo "$gl_cv_func_printf_flag_grouping" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the left-adjust flag correctly" >&5 +$as_echo_n "checking whether printf supports the left-adjust flag correctly... " >&6; } +if test "${gl_cv_func_printf_flag_leftadjust+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on HP-UX 11. + hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess no on HP-UX 10 and older. + hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; + # Guess yes otherwise. + *) gl_cv_func_printf_flag_leftadjust="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + /* Check that a '-' flag is not annihilated by a negative width. */ + if (sprintf (buf, "a%-*sc", -3, "b") < 0 + || strcmp (buf, "ab c") != 0) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_flag_leftadjust=yes +else + gl_cv_func_printf_flag_leftadjust=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_leftadjust" >&5 +$as_echo "$gl_cv_func_printf_flag_leftadjust" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the zero flag correctly" >&5 +$as_echo_n "checking whether printf supports the zero flag correctly... " >&6; } +if test "${gl_cv_func_printf_flag_zero+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_flag_zero="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_flag_zero="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[100]; +int main () +{ + if (sprintf (buf, "%010f", 1.0 / 0.0, 33, 44, 55) < 0 + || (strcmp (buf, " inf") != 0 + && strcmp (buf, " infinity") != 0)) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_flag_zero=yes +else + gl_cv_func_printf_flag_zero=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_zero" >&5 +$as_echo "$gl_cv_func_printf_flag_zero" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports large precisions" >&5 +$as_echo_n "checking whether printf supports large precisions... " >&6; } +if test "${gl_cv_func_printf_precision+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess no only on native Win32 and BeOS systems. + mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; + beos*) gl_cv_func_printf_precision="guessing no" ;; + *) gl_cv_func_printf_precision="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <string.h> +static char buf[5000]; +int main () +{ +#ifdef __BEOS__ + /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ + return 1; +#endif + if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + return 1; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_printf_precision=yes +else + gl_cv_func_printf_precision=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_precision" >&5 +$as_echo "$gl_cv_func_printf_precision" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf survives out-of-memory conditions" >&5 +$as_echo_n "checking whether printf survives out-of-memory conditions... " >&6; } +if test "${gl_cv_func_printf_enomem+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + gl_cv_func_printf_enomem="guessing no" + if test "$cross_compiling" = no; then + if test $APPLE_UNIVERSAL_BUILD = 0; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#include <stdlib.h> +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on MacOS X. */ +#include <mach/mach.h> +#include <mach/mach_error.h> +#include <mach/thread_status.h> +#include <mach/exception.h> +#include <mach/task.h> +#include <pthread.h> +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data1024; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#else +/* Avoid a crash on POSIX systems. */ +#include <signal.h> +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + +#include <stdio.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/resource.h> +#include <errno.h> +int main() +{ + struct rlimit limit; + int ret; + nocrash_init (); + /* Some printf implementations allocate temporary space with malloc. */ + /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ +#ifdef RLIMIT_DATA + if (getrlimit (RLIMIT_DATA, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_DATA, &limit) < 0) + return 77; +#endif + /* On Linux systems, malloc() is limited by RLIMIT_AS. */ +#ifdef RLIMIT_AS + if (getrlimit (RLIMIT_AS, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_AS, &limit) < 0) + return 77; +#endif + /* Some printf implementations allocate temporary space on the stack. */ +#ifdef RLIMIT_STACK + if (getrlimit (RLIMIT_STACK, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_STACK, &limit) < 0) + return 77; +#endif + ret = printf ("%.5000000f", 1.0); + return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + (./conftest + result=$? + if test $result != 0 && test $result != 77; then result=1; fi + exit $result + ) >/dev/null 2>/dev/null + case $? in + 0) gl_cv_func_printf_enomem="yes" ;; + 77) gl_cv_func_printf_enomem="guessing no" ;; + *) gl_cv_func_printf_enomem="no" ;; + esac + else + gl_cv_func_printf_enomem="guessing no" + fi + rm -fr conftest* + else + gl_cv_func_printf_enomem="guessing no" + fi + fi + if test "$gl_cv_func_printf_enomem" = "guessing no"; then + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Solaris. + solaris*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on AIX. + aix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on HP-UX/hppa. + hpux*) case "$host_cpu" in + hppa*) gl_cv_func_printf_enomem="guessing yes";; + *) gl_cv_func_printf_enomem="guessing no";; + esac + ;; + # Guess yes on IRIX. + irix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on OSF/1. + osf*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Haiku. + haiku*) gl_cv_func_printf_enomem="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_enomem="guessing no";; + esac + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_enomem" >&5 +$as_echo "$gl_cv_func_printf_enomem" >&6; } + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ungetc works on arbitrary bytes" >&5 +$as_echo_n "checking whether ungetc works on arbitrary bytes... " >&6; } +if test "${gl_cv_func_ungetc_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + gl_cv_func_ungetc_works='guessing no' +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> + +int +main () +{ +FILE *f; long l; + if (!(f = fopen ("conftest.tmp", "w+"))) return 1; + if (fputs ("abc", f) < 0) return 2; + rewind (f); + if (fgetc (f) != 'a') return 3; + if (fgetc (f) != 'b') return 4; + if (ungetc ('d', f) != 'd') return 5; + if (ftell (f) != 1) return 6; + if (fgetc (f) != 'd') return 7; + if (ftell (f) != 2) return 8; + if (fseek (f, 0, SEEK_CUR) != 0) return 9; + if (ftell (f) != 2) return 10; + if (fgetc (f) != 'c') return 11; + fclose (f); remove ("conftest.tmp"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_ungetc_works=yes +else + gl_cv_func_ungetc_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ungetc_works" >&5 +$as_echo "$gl_cv_func_ungetc_works" >&6; } + if test "$gl_cv_func_ungetc_works" != yes; then + +$as_echo "#define FUNC_UNGETC_BROKEN 1" >>confdefs.h + + fi + + + +ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" +if test "x$ac_cv_have_decl_alarm" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ALARM $ac_have_decl +_ACEOF + + + + + if false; then + GL_COND_LIBTOOL_TRUE= + GL_COND_LIBTOOL_FALSE='#' +else + GL_COND_LIBTOOL_TRUE='#' + GL_COND_LIBTOOL_FALSE= +fi + + gl_cond_libtool=false + gl_libdeps= + gl_ltlibdeps= + + + + + + + + + + gl_source_base='lib' + + + + + + if test $ac_cv_func_alloca_works = no; then + : + fi + + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 +$as_echo_n "checking for alloca as a compiler built-in... " >&6; } +if test "${gl_cv_rpl_alloca+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Need own alloca" >/dev/null 2>&1; then + gl_cv_rpl_alloca=yes +else + gl_cv_rpl_alloca=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 +$as_echo "$gl_cv_rpl_alloca" >&6; } + if test $gl_cv_rpl_alloca = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + + ALLOCA_H=alloca.h + else + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable assertions" >&5 +$as_echo_n "checking whether to enable assertions... " >&6; } + # Check whether --enable-assert was given. +if test "${enable_assert+set}" = set; then + enableval=$enable_assert; if test "x$enableval" = xno; then + +$as_echo "#define NDEBUG 1" >>confdefs.h + +elif test "x$enableval" != xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-assert" >&5 +$as_echo "$as_me: WARNING: invalid argument supplied to --enable-assert" >&2;} + enable_assert=yes +fi +else + enable_assert=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_assert" >&5 +$as_echo "$enable_assert" >&6; } + + + + + + if test $ac_cv_func_btowc = no; then + HAVE_BTOWC=0 + else + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5 +$as_echo_n "checking whether btowc(EOF) is correct... " >&6; } +if test "${gl_cv_func_btowc_eof+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on IRIX. + irix*) gl_cv_func_btowc_eof="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_eof="guessing yes" ;; + esac + if test $LOCALE_FR != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdio.h> +#include <string.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (btowc (EOF) != WEOF) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_btowc_eof=yes +else + gl_cv_func_btowc_eof=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5 +$as_echo "$gl_cv_func_btowc_eof" >&6; } + case "$gl_cv_func_btowc_eof" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + fi + if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then + + + WCHAR_H=wchar.h + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS btowc.$ac_objext" + + + : + + fi + + + + GNULIB_BTOWC=1 + + + + + + # for STACK_DIRECTION + + + + ac_fn_c_check_decl "$LINENO" "sigaltstack" "ac_cv_have_decl_sigaltstack" "#include <signal.h> +" +if test "x$ac_cv_have_decl_sigaltstack" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SIGALTSTACK $ac_have_decl +_ACEOF + + + + + ac_fn_c_check_type "$LINENO" "stack_t" "ac_cv_type_stack_t" "#include <signal.h> +" +if test "x$ac_cv_type_stack_t" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STACK_T 1 +_ACEOF + + +fi + + + if test "$gl_cv_lib_sigsegv" = yes \ + && test $"ac_cv_sys_xsi_stack_overflow_heuristic" != yes ; then + LIBCSTACK=$LIBSIGSEGV + + LTLIBCSTACK=$LTLIBSIGSEGV + + fi + + + +$as_echo "#define SIGNAL_SAFE_LIST 1" >>confdefs.h + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS cloexec.$ac_objext" + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS close-stream.$ac_objext" + + + : + + + +$as_echo "#define GNULIB_CLOSE_STREAM 1" >>confdefs.h + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS closein.$ac_objext" + + + : + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS closeout.$ac_objext" + + + : + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS basename.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS dirname.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS stripslash.$ac_objext" + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 +$as_echo_n "checking whether // is distinct from /... " >&6; } +if test "${gl_cv_double_slash_root+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # <bug-gnulib@gnu.org>. + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 +$as_echo "$gl_cv_double_slash_root" >&6; } + if test "$gl_cv_double_slash_root" = yes; then + +$as_echo "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h + + fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5 +$as_echo_n "checking if environ is properly declared... " >&6; } + if test "${gt_cv_var_environ_declaration+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> + extern struct { int foo; } environ; +int +main () +{ +environ.foo = 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gt_cv_var_environ_declaration=no +else + gt_cv_var_environ_declaration=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_var_environ_declaration" >&5 +$as_echo "$gt_cv_var_environ_declaration" >&6; } + if test $gt_cv_var_environ_declaration = yes; then + +$as_echo "#define HAVE_ENVIRON_DECL 1" >>confdefs.h + + fi + + + if test $gt_cv_var_environ_declaration != yes; then + HAVE_DECL_ENVIRON=0 + fi + + + + GNULIB_ENVIRON=1 + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if test "${ac_cv_lib_error_at_line+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <error.h> +int +main () +{ +error_at_line (0, 0, "", 0, "an error occurred"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_lib_error_at_line=yes +else + ac_cv_lib_error_at_line=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_error_at_line" >&5 +$as_echo "$ac_cv_lib_error_at_line" >&6; } +if test $ac_cv_lib_error_at_line = no; then + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS error.$ac_objext" + +fi + + + + : + + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" + + + + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS exitfail.$ac_objext" + + + : + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 +$as_echo_n "checking for working fcntl.h... " >&6; } +if test "${gl_cv_header_working_fcntl_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + gl_cv_header_working_fcntl_h=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/stat.h> + #include <unistd.h> + #include <fcntl.h> + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif + #ifndef O_NOFOLLOW + #define O_NOFOLLOW 0 + #endif + static int const constants[] = + { + O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, + O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY + }; + +int +main () +{ + + int status = !constants; + { + static char const sym[] = "conftest.sym"; + if (symlink (".", sym) != 0 + || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0) + status |= 32; + } + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + char c; + struct stat st0, st1; + if (fd < 0 + || fstat (fd, &st0) != 0 + || sleep (1) != 0 + || read (fd, &c, 1) != 1 + || close (fd) != 0 + || stat (file, &st1) != 0 + || st0.st_atime != st1.st_atime) + status |= 64; + } + return status; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_header_working_fcntl_h=yes +else + case $? in #( + 32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 +$as_echo "$gl_cv_header_working_fcntl_h" >&6; } + + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + +cat >>confdefs.h <<_ACEOF +#define HAVE_WORKING_O_NOATIME $ac_val +_ACEOF + + + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + +cat >>confdefs.h <<_ACEOF +#define HAVE_WORKING_O_NOFOLLOW $ac_val +_ACEOF + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_fcntl_h='<'fcntl.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5 +$as_echo_n "checking absolute name of <fcntl.h>... " >&6; } +if test "${gl_cv_next_fcntl_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_fcntl_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <fcntl.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_fcntl_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/fcntl.h#{ + s#.*"\(.*/fcntl.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_fcntl_h='<'fcntl.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 +$as_echo "$gl_cv_next_fcntl_h" >&6; } + fi + NEXT_FCNTL_H=$gl_cv_next_fcntl_h + + + + FCNTL_H='fcntl.h' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fflush works on input streams" >&5 +$as_echo_n "checking whether fflush works on input streams... " >&6; } +if test "${gl_cv_func_fflush_stdin+set}" = set; then + $as_echo_n "(cached) " >&6 +else + echo hello world > conftest.txt + if test "$cross_compiling" = yes; then + gl_cv_func_fflush_stdin=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +#include <unistd.h> + +int +main () +{ +FILE *f = fopen ("conftest.txt", "r"); + char buffer[10]; + int fd; + int c; + if (f == NULL) + return 1; + fd = fileno (f); + if (fd < 0 || fread (buffer, 1, 5, f) != 5) + return 2; + /* For deterministic results, ensure f read a bigger buffer. */ + if (lseek (fd, 0, SEEK_CUR) == 5) + return 3; + /* POSIX requires fflush-fseek to set file offset of fd. This fails + on BSD systems and on mingw. */ + if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0) + return 4; + if (lseek (fd, 0, SEEK_CUR) != 5) + return 5; + /* Verify behaviour of fflush after ungetc. See + <http://www.opengroup.org/austin/aardvark/latest/xshbug3.txt> */ + /* Verify behaviour of fflush after a backup ungetc. This fails on + mingw. */ + c = fgetc (f); + ungetc (c, f); + fflush (f); + if (fgetc (f) != c) + return 6; + /* Verify behaviour of fflush after a non-backup ungetc. This fails + on glibc 2.8 and on BSD systems. */ + c = fgetc (f); + ungetc ('@', f); + fflush (f); + if (fgetc (f) != c) + return 7; + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_fflush_stdin=yes +else + gl_cv_func_fflush_stdin=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm conftest.txt + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fflush_stdin" >&5 +$as_echo "$gl_cv_func_fflush_stdin" >&6; } + if test $gl_cv_func_fflush_stdin = no; then + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS fflush.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS fseeko.$ac_objext" + + + REPLACE_FFLUSH=1 + REPLACE_FSEEKO=1 + + + : + + + fi + + + + GNULIB_FFLUSH=1 + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS filenamecat.$ac_objext" + + + + + + + + FLOAT_H= + case "$host_os" in + beos* | openbsd*) + FLOAT_H=float.h + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_float_h='<'float.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <float.h>" >&5 +$as_echo_n "checking absolute name of <float.h>... " >&6; } +if test "${gl_cv_next_float_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_float_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <float.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_float_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/float.h#{ + s#.*"\(.*/float.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_float_h='<'float.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 +$as_echo "$gl_cv_next_float_h" >&6; } + fi + NEXT_FLOAT_H=$gl_cv_next_float_h + + + + ;; + esac + + + + + + case "$host_os" in + mingw* | pw*) + REPLACE_FOPEN=1 + gl_cv_func_fopen_slash="guessing no" + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fopen recognizes a trailing slash" >&5 +$as_echo_n "checking whether fopen recognizes a trailing slash... " >&6; } +if test "${gl_cv_func_fopen_slash+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + solaris2.[0-9]*) gl_cv_func_fopen_slash="guessing no" ;; + hpux*) gl_cv_func_fopen_slash="guessing no" ;; + *) gl_cv_func_fopen_slash="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +int main () +{ + return fopen ("conftest.sl/", "w") != NULL; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_fopen_slash=yes +else + gl_cv_func_fopen_slash=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.sl + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fopen_slash" >&5 +$as_echo "$gl_cv_func_fopen_slash" >&6; } + ;; + esac + case "$gl_cv_func_fopen_slash" in + *no) + +$as_echo "#define FOPEN_TRAILING_SLASH_BUG 1" >>confdefs.h + + REPLACE_FOPEN=1 + ;; + esac + if test $REPLACE_FOPEN = 1; then + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS fopen.$ac_objext" + + + + + fi + + + + GNULIB_FOPEN=1 + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS fopen-safer.$ac_objext" + + + + +$as_echo "#define GNULIB_FOPEN_SAFER 1" >>confdefs.h + + + + + + fp_headers=' +# include <stdio.h> +# if HAVE_STDIO_EXT_H +# include <stdio_ext.h> +# endif +' + ac_fn_c_check_decl "$LINENO" "__fpending" "ac_cv_have_decl___fpending" "$fp_headers +" +if test "x$ac_cv_have_decl___fpending" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL___FPENDING $ac_have_decl +_ACEOF + + if test $ac_cv_func___fpending = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to determine the number of pending output bytes on a stream" >&5 +$as_echo_n "checking how to determine the number of pending output bytes on a stream... " >&6; } +if test "${ac_cv_sys_pending_output_n_bytes+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + for ac_expr in \ + \ + '# glibc2' \ + 'fp->_IO_write_ptr - fp->_IO_write_base' \ + \ + '# traditional Unix' \ + 'fp->_ptr - fp->_base' \ + \ + '# BSD' \ + 'fp->_p - fp->_bf._base' \ + \ + '# SCO, Unixware' \ + '(fp->__ptr ? fp->__ptr - fp->__base : 0)' \ + \ + '# QNX' \ + '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \ + \ + '# old glibc?' \ + 'fp->__bufp - fp->__buffer' \ + \ + '# old glibc iostream?' \ + 'fp->_pptr - fp->_pbase' \ + \ + '# emx+gcc' \ + 'fp->_ptr - fp->_buffer' \ + \ + '# VMS' \ + '(*fp)->_ptr - (*fp)->_base' \ + \ + '# e.g., DGUX R4.11; the info is not available' \ + 1 \ + ; do + + # Skip each embedded comment. + case "$ac_expr" in '#'*) continue;; esac + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> + +int +main () +{ +FILE *fp = stdin; (void) ($ac_expr); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + fp_done=yes + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$fp_done" = yes && break + done + + ac_cv_sys_pending_output_n_bytes=$ac_expr + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_pending_output_n_bytes" >&5 +$as_echo "$ac_cv_sys_pending_output_n_bytes" >&6; } + +cat >>confdefs.h <<_ACEOF +#define PENDING_OUTPUT_N_BYTES $ac_cv_sys_pending_output_n_bytes +_ACEOF + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS fpending.$ac_objext" + + fi + + + + + ac_fn_c_check_decl "$LINENO" "fpurge" "ac_cv_have_decl_fpurge" "#include <stdio.h> +" +if test "x$ac_cv_have_decl_fpurge" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FPURGE $ac_have_decl +_ACEOF + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp() can be used without linking with libm" >&5 +$as_echo_n "checking whether frexp() can be used without linking with libm... " >&6; } +if test "${gl_cv_func_frexp_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + double x; +int +main () +{ +int e; return frexp (x, &e) > 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_frexp_no_libm=yes +else + gl_cv_func_frexp_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_no_libm" >&5 +$as_echo "$gl_cv_func_frexp_no_libm" >&6; } + if test $gl_cv_func_frexp_no_libm = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5 +$as_echo_n "checking whether frexp works... " >&6; } +if test "${gl_cv_func_frexp_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";; + *) gl_cv_func_frexp_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <math.h> +#include <string.h> +int main() +{ + int i; + volatile double x; +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ + double zero = 0.0; + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + return 1; + } + /* Test on infinite numbers. */ + x = 1.0 / 0.0; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + return 1; + } + /* Test on negative zero. */ + x = -zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_frexp_works=yes +else + gl_cv_func_frexp_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5 +$as_echo "$gl_cv_func_frexp_works" >&6; } + + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp_no_libm=yes ;; + *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; + esac + else + gl_func_frexp_no_libm=no + REPLACE_FREXP=1 + fi + if test $gl_func_frexp_no_libm = yes; then + +$as_echo "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h + + else + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS frexp.$ac_objext" + + fi + + + + GNULIB_FREXP=1 + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5 +$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; } +if test "${gl_cv_func_frexpl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x; +int +main () +{ +int e; return frexpl (x, &e) > 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_frexpl_no_libm=yes +else + gl_cv_func_frexpl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5 +$as_echo "$gl_cv_func_frexpl_no_libm" >&6; } + if test $gl_cv_func_frexpl_no_libm = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5 +$as_echo_n "checking whether frexpl works... " >&6; } +if test "${gl_cv_func_frexpl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + aix* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <math.h> +/* Override the values of <float.h>, like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +extern long double frexpl (long double, int *); +int main() +{ + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + return 1; + } + /* Test on finite numbers that fails on MacOS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + return 1; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + return 1; + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On MacOS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + return 1; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_frexpl_works=yes +else + gl_cv_func_frexpl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5 +$as_echo "$gl_cv_func_frexpl_works" >&6; } + + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + +$as_echo "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h + + ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h> +" +if test "x$ac_cv_have_decl_frexpl" = x""yes; then + : +else + HAVE_DECL_FREXPL=0 +fi + + else + HAVE_DECL_FREXPL=0 + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS frexpl.$ac_objext" + + fi + + + + GNULIB_FREXPL=1 + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fseeko" >&5 +$as_echo_n "checking for fseeko... " >&6; } +if test "${gl_cv_func_fseeko+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +fseeko (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_fseeko=yes +else + gl_cv_func_fseeko=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fseeko" >&5 +$as_echo "$gl_cv_func_fseeko" >&6; } + if test $gl_cv_func_fseeko = no; then + HAVE_FSEEKO=0 + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS fseeko.$ac_objext" + + + REPLACE_FSEEKO=1 + + elif test $gl_cv_var_stdin_large_offset = no; then + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS fseeko.$ac_objext" + + + REPLACE_FSEEKO=1 + + fi + + + + GNULIB_FSEEKO=1 + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ftello" >&5 +$as_echo_n "checking for ftello... " >&6; } +if test "${gl_cv_func_ftello+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> +int +main () +{ +ftello (stdin); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_ftello=yes +else + gl_cv_func_ftello=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ftello" >&5 +$as_echo "$gl_cv_func_ftello" >&6; } + if test $gl_cv_func_ftello = no; then + HAVE_FTELLO=0 + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS ftello.$ac_objext" + + + REPLACE_FTELLO=1 + + elif test $gl_cv_var_stdin_large_offset = no; then + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS ftello.$ac_objext" + + + REPLACE_FTELLO=1 + + fi + + + + GNULIB_FTELLO=1 + + + + + if test $ac_cv_func_getdtablesize != yes; then + HAVE_GETDTABLESIZE=0 + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS getdtablesize.$ac_objext" + + fi + + + + GNULIB_GETDTABLESIZE=1 + + + + if test -n "$GETOPT_H"; then + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS getopt.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS getopt1.$ac_objext" + + + GETOPT_H=getopt.h + +$as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h + + + + + + + +fi + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettimeofday with POSIX signature" >&5 +$as_echo_n "checking for gettimeofday with POSIX signature... " >&6; } +if test "${gl_cv_func_gettimeofday_posix_signature+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/time.h> + struct timeval c; + +int +main () +{ + + int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; + int x = f (&c, 0); + return !(x | c.tv_sec | c.tv_usec); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_func_gettimeofday_posix_signature=yes +else + gl_cv_func_gettimeofday_posix_signature=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_posix_signature" >&5 +$as_echo "$gl_cv_func_gettimeofday_posix_signature" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday clobbers localtime buffer" >&5 +$as_echo_n "checking whether gettimeofday clobbers localtime buffer... " >&6; } +if test "${gl_cv_func_gettimeofday_clobber+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + gl_cv_func_gettimeofday_clobber=yes +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + #include <sys/time.h> + #include <time.h> + #include <stdlib.h> + +int +main () +{ + + time_t t = 0; + struct tm *lt; + struct tm saved_lt; + struct timeval tv; + lt = localtime (&t); + saved_lt = *lt; + gettimeofday (&tv, NULL); + return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_gettimeofday_clobber=no +else + gl_cv_func_gettimeofday_clobber=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_clobber" >&5 +$as_echo "$gl_cv_func_gettimeofday_clobber" >&6; } + + if test $gl_cv_func_gettimeofday_clobber = yes; then + REPLACE_GETTIMEOFDAY=1 + SYS_TIME_H=sys/time.h + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS gettimeofday.$ac_objext" + + + for ac_header in sys/timeb.h +do + ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_timeb_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_TIMEB_H 1 +_ACEOF + +fi + +done + + for ac_func in _ftime +do + ac_fn_c_check_func "$LINENO" "_ftime" "ac_cv_func__ftime" +if test "x$ac_cv_func__ftime" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE__FTIME 1 +_ACEOF + +fi +done + + + +$as_echo "#define gmtime rpl_gmtime" >>confdefs.h + + +$as_echo "#define localtime rpl_localtime" >>confdefs.h + + + +$as_echo "#define GETTIMEOFDAY_CLOBBERS_LOCALTIME 1" >>confdefs.h + + fi + + + if test $gl_cv_func_gettimeofday_posix_signature != yes; then + REPLACE_GETTIMEOFDAY=1 + SYS_TIME_H=sys/time.h + if test $gl_cv_func_gettimeofday_clobber != yes; then + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS gettimeofday.$ac_objext" + + + for ac_header in sys/timeb.h +do + ac_fn_c_check_header_mongrel "$LINENO" "sys/timeb.h" "ac_cv_header_sys_timeb_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_timeb_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_TIMEB_H 1 +_ACEOF + +fi + +done + + for ac_func in _ftime +do + ac_fn_c_check_func "$LINENO" "_ftime" "ac_cv_func__ftime" +if test "x$ac_cv_func__ftime" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE__FTIME 1 +_ACEOF + +fi +done + + + fi + fi + + # Autoconf 2.61a.99 and earlier don't support linking a file only + # in VPATH builds. But since GNUmakefile is for maintainer use + # only, it does not matter if we skip the link with older autoconf. + # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH + # builds, so use a shell variable to bypass this. + GNUmakefile=GNUmakefile + ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler generally respects inline" >&5 +$as_echo_n "checking whether the compiler generally respects inline... " >&6; } +if test "${gl_cv_c_inline_effective+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test $ac_cv_c_inline = no; then + gl_cv_c_inline_effective=no + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifdef __NO_INLINE__ + #error "inline is not effective" + #endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_c_inline_effective=yes +else + gl_cv_c_inline_effective=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_inline_effective" >&5 +$as_echo "$gl_cv_c_inline_effective" >&6; } + if test $gl_cv_c_inline_effective = yes; then + +$as_echo "#define HAVE_INLINE 1" >>confdefs.h + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(double) can be used without linking with libm... " >&6; } +if test "${gl_cv_func_isnand_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnan ((double)(x)) + #else + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x; +int +main () +{ +return isnand (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_isnand_no_libm=yes +else + gl_cv_func_isnand_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_no_libm" >&5 +$as_echo "$gl_cv_func_isnand_no_libm" >&6; } + + if test $gl_cv_func_isnand_no_libm = yes; then + +$as_echo "#define HAVE_ISNAND_IN_LIBC 1" >>confdefs.h + + else + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS isnand.$ac_objext" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 +$as_echo_n "checking where to find the exponent in a 'double'... " >&6; } +if test "${gl_cv_cc_double_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "mixed_endianness" >/dev/null 2>&1; then + gl_cv_cc_double_expbit0="unknown" +else + + : +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi +fi +: + case $ac_cv_c_bigendian in #( + yes) + gl_cv_cc_double_expbit0="word 0 bit 20";; #( + no) + gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + gl_cv_cc_double_expbit0="unknown" ;; + esac + + +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_double_expbit0=`cat conftest.out` +else + gl_cv_cc_double_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 +$as_echo "$gl_cv_cc_double_expbit0" >&6; } + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(float) can be used without linking with libm... " >&6; } +if test "${gl_cv_func_isnanf_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x; +int +main () +{ +return isnanf (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_isnanf_no_libm=yes +else + gl_cv_func_isnanf_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_no_libm" >&5 +$as_echo "$gl_cv_func_isnanf_no_libm" >&6; } + + if test $gl_cv_func_isnanf_no_libm = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5 +$as_echo_n "checking whether isnan(float) works... " >&6; } +if test "${gl_cv_func_isnanf_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + irix* | solaris*) gl_cv_func_isnanf_works="guessing no";; + *) gl_cv_func_isnanf_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <math.h> +#if __GNUC__ >= 4 +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +#elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +#endif +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static float +NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +#else +# define NaN() (0.0f / 0.0f) +#endif +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; float value; } memory_float; +int main() +{ + memory_float m; + + if (isnanf (1.0f / 0.0f)) + return 1; + + if (!isnanf (NaN ())) + return 1; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* The isnanf function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit. */ + if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) + { + m.value = NaN (); + /* Set the bits below the exponent to 01111...111. */ + m.word[0] &= -1U << FLT_EXPBIT0_BIT; + m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1; + if (!isnanf (m.value)) + return 1; + } +#endif + + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_isnanf_works=yes +else + gl_cv_func_isnanf_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_works" >&5 +$as_echo "$gl_cv_func_isnanf_works" >&6; } + + fi + if test $gl_cv_func_isnanf_no_libm = yes \ + && { case "$gl_cv_func_isnanf_works" in + *yes) true;; + *) false;; + esac + }; then + +$as_echo "#define HAVE_ISNANF_IN_LIBC 1" >>confdefs.h + + else + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS isnanf.$ac_objext" + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 +$as_echo_n "checking where to find the exponent in a 'float'... " >&6; } +if test "${gl_cv_cc_float_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_cc_float_expbit0="word 0 bit 23" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_float_expbit0=`cat conftest.out` +else + gl_cv_cc_float_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 +$as_echo "$gl_cv_cc_float_expbit0" >&6; } + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(long double) can be used without linking with libm... " >&6; } +if test "${gl_cv_func_isnanl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x; +int +main () +{ +return isnanl (x); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_isnanl_no_libm=yes +else + gl_cv_func_isnanl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_no_libm" >&5 +$as_echo "$gl_cv_func_isnanl_no_libm" >&6; } + + gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm + if test $gl_func_isnanl_no_libm = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5 +$as_echo_n "checking whether isnanl works... " >&6; } +if test "${gl_cv_func_isnanl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";; + *) + case "$host_os" in + netbsd*) gl_cv_func_isnanl_works="guessing no";; + *) gl_cv_func_isnanl_works="guessing yes";; + esac + ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <limits.h> +#include <math.h> +#if __GNUC__ >= 4 +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +#elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +#endif +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; long double value; } + memory_long_double; +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif +int main () +{ + memory_long_double m; + unsigned int i; + + if (!isnanl (NaNl ())) + return 1; + + /* The isnanl function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit (since the exponent never extends to + bit 31). */ + m.value = NaNl (); + m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + for (i = 0; i < NWORDS; i++) + m.word[i] |= 1; + if (!isnanl (m.value)) + return 1; + +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { + /* Signalling NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Infinity. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Zero. */ + static memory_long_double x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Unnormalized number. */ + static memory_long_double x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Denormal. */ + static memory_long_double x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } +#endif + + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_isnanl_works=yes +else + gl_cv_func_isnanl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_works" >&5 +$as_echo "$gl_cv_func_isnanl_works" >&6; } + + case "$gl_cv_func_isnanl_works" in + *yes) ;; + *) gl_func_isnanl_no_libm=no ;; + esac + fi + if test $gl_func_isnanl_no_libm = yes; then + +$as_echo "#define HAVE_ISNANL_IN_LIBC 1" >>confdefs.h + + else + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS isnanl.$ac_objext" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 +$as_echo_n "checking where to find the exponent in a 'long double'... " >&6; } +if test "${gl_cv_cc_long_double_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_long_double_expbit0="unknown" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (long double x) +{ + memory_long_double m; + size_t i; + /* Clear it first, in case + sizeof (long double) < sizeof (memory_long_double). */ + memset (&m, 0, sizeof (memory_long_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25L); + add_to_ored_words (0.5L); + add_to_ored_words (1.0L); + add_to_ored_words (2.0L); + add_to_ored_words (4.0L); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_long_double_expbit0=`cat conftest.out` +else + gl_cv_cc_long_double_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5 +$as_echo "$gl_cv_cc_long_double_expbit0" >&6; } + case "$gl_cv_cc_long_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + fi + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libsigsegv-prefix was given. +if test "${with_libsigsegv_prefix+set}" = set; then + withval=$with_libsigsegv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBSIGSEGV= + LTLIBSIGSEGV= + INCSIGSEGV= + LIBSIGSEGV_PREFIX= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='sigsegv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_so" + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$found_a" + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'sigsegv'; then + LIBSIGSEGV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'sigsegv'; then + LIBSIGSEGV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCSIGSEGV="${INCSIGSEGV}${INCSIGSEGV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBSIGSEGV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$dep" + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }$dep" + ;; + esac + done + fi + else + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }-l$name" + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBSIGSEGV="${LIBSIGSEGV}${LIBSIGSEGV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBSIGSEGV="${LTLIBSIGSEGV}${LTLIBSIGSEGV:+ }-R$found_dir" + done + fi + + + + + + + + gl_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCSIGSEGV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsigsegv" >&5 +$as_echo_n "checking for libsigsegv... " >&6; } +if test "${gl_cv_lib_sigsegv+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + gl_cv_lib_sigsegv="no, consider installing GNU libsigsegv" + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBSIGSEGV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sigsegv.h> +int +main () +{ +sigsegv_deinstall_handler(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_lib_sigsegv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gl_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_sigsegv" >&5 +$as_echo "$gl_cv_lib_sigsegv" >&6; } + if test "$gl_cv_lib_sigsegv" = yes; then + +$as_echo "#define HAVE_LIBSIGSEGV 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libsigsegv" >&5 +$as_echo_n "checking how to link with libsigsegv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBSIGSEGV" >&5 +$as_echo "$LIBSIGSEGV" >&6; } + else + CPPFLAGS="$gl_save_CPPFLAGS" + LIBSIGSEGV= + LTLIBSIGSEGV= + fi + + + + + + + + + + + + + + LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\"" + + + + if test "$gl_threads_api" = posix; then + # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h> +" +if test "x$ac_cv_type_pthread_rwlock_t" = x""yes; then + +$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h + +fi + + # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <pthread.h> +int +main () +{ +#if __FreeBSD__ == 4 +error "No, in FreeBSD 4.0 recursive mutexes actually don't work." +#else +int x = (int)PTHREAD_MUTEX_RECURSIVE; +return !x; +#endif + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + +$as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lseek detects pipes" >&5 +$as_echo_n "checking whether lseek detects pipes... " >&6; } +if test "${gl_cv_func_lseek_pipe+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test $cross_compiling = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/types.h> /* for off_t */ +#include <stdio.h> /* for SEEK_CUR */ +#include <unistd.h> +int main () +{ + /* Exit with success only if stdin is seekable. */ + return lseek (0, (off_t)0, SEEK_CUR) < 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext < conftest.$ac_ext \ + && { echo hi | ./conftest$ac_exeext; test $? = 1; }; then + gl_cv_func_lseek_pipe=yes + else + gl_cv_func_lseek_pipe=no + fi +else + gl_cv_func_lseek_pipe=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) || defined __BEOS__ +/* mingw and BeOS mistakenly return 0 when trying to seek on pipes. */ + Choke me. +#endif +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_func_lseek_pipe=yes +else + gl_cv_func_lseek_pipe=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lseek_pipe" >&5 +$as_echo "$gl_cv_func_lseek_pipe" >&6; } + if test $gl_cv_func_lseek_pipe = no; then + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS lseek.$ac_objext" + + + REPLACE_LSEEK=1 + +$as_echo "#define LSEEK_PIPE_BROKEN 1" >>confdefs.h + + + fi + + + + GNULIB_LSEEK=1 + + + + + if test $ac_cv_func_lstat = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat dereferences a symlink specified with a trailing slash" >&5 +$as_echo_n "checking whether lstat dereferences a symlink specified with a trailing slash... " >&6; } +if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS lstat.$ac_objext" + +fi + + if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then + REPLACE_LSTAT=1 + fi + # Prerequisites of lib/lstat.c. + + fi + + + + GNULIB_LSTAT=1 + + for ac_header in stdlib.h +do + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include <stdlib.h> +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS malloc.$ac_objext" + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +fi + + + +$as_echo "#define GNULIB_MALLOC_GNU 1" >>confdefs.h + + + + if test $gl_cv_func_malloc_posix = yes; then + HAVE_MALLOC_POSIX=1 + +$as_echo "#define HAVE_MALLOC_POSIX 1" >>confdefs.h + + else + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS malloc.$ac_objext" + + HAVE_MALLOC_POSIX=0 + fi + + + + + GNULIB_MALLOC_POSIX=1 + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_math_h='<'math.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <math.h>" >&5 +$as_echo_n "checking absolute name of <math.h>... " >&6; } +if test "${gl_cv_next_math_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_math_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_math_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/math.h#{ + s#.*"\(.*/math.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_math_h='<'math.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5 +$as_echo "$gl_cv_next_math_h" >&6; } + fi + NEXT_MATH_H=$gl_cv_next_math_h + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5 +$as_echo_n "checking whether NAN macro works... " >&6; } +if test "${gl_cv_header_math_nan_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> +int +main () +{ +/* Solaris 10 has a broken definition of NAN. Other platforms + fail to provide NAN, or provide it only in C99 mode; this + test only needs to fail when NAN is provided but wrong. */ + float f = 1.0f; +#ifdef NAN + f = NAN; +#endif + return f == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_header_math_nan_works=yes +else + gl_cv_header_math_nan_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_nan_works" >&5 +$as_echo "$gl_cv_header_math_nan_works" >&6; } + if test $gl_cv_header_math_nan_works = no; then + REPLACE_NAN=1 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5 +$as_echo_n "checking whether HUGE_VAL works... " >&6; } +if test "${gl_cv_header_math_huge_val_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> +int +main () +{ +/* Solaris 10 has a broken definition of HUGE_VAL. */ + double d = HUGE_VAL; + return d == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_header_math_huge_val_works=yes +else + gl_cv_header_math_huge_val_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_huge_val_works" >&5 +$as_echo "$gl_cv_header_math_huge_val_works" >&6; } + if test $gl_cv_header_math_huge_val_works = no; then + REPLACE_HUGE_VAL=1 + fi + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + if test $REPLACE_MBSTATE_T = 1; then + + + WCHAR_H=wchar.h + + fi + + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + fi + + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + fi + if test $HAVE_MBRTOWC != 0 && test $REPLACE_MBRTOWC != 1; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; } +if test "${gl_cv_func_mbrtowc_null_arg+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + mbstate_t state; + wchar_t wc; + int ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + mbrtowc (&wc, NULL, 5, &state); + /* Check that wc was not modified. */ + if (wc != (wchar_t) 0xBADFACE) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_mbrtowc_null_arg=yes +else + gl_cv_func_mbrtowc_null_arg=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg" >&6; } + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 +$as_echo_n "checking whether mbrtowc has a correct return value... " >&6; } +if test "${gl_cv_func_mbrtowc_retval+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX and Solaris. + hpux* | solaris*) gl_cv_func_mbrtowc_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_retval="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 1) + return 1; + } + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 2) + return 1; + } + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_mbrtowc_retval=yes +else + gl_cv_func_mbrtowc_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_retval" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 +$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } +if test "${gl_cv_func_mbrtowc_nul_retval+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_mbrtowc_nul_retval=yes +else + gl_cv_func_mbrtowc_nul_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; } + + case "$gl_cv_func_mbrtowc_null_arg" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NULL_ARG_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) +$as_echo "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h + + REPLACE_MBRTOWC=1 + ;; + esac + fi + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + + + WCHAR_H=wchar.h + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS mbrtowc.$ac_objext" + + + : + + fi + + + + GNULIB_MBRTOWC=1 + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_mbrtowc_incomplete_state=yes +else + gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_mbrtowc_sanitycheck=yes +else + gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + if test $REPLACE_MBSTATE_T = 1; then + + + WCHAR_H=wchar.h + + fi + + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + fi + + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + fi + if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then + + + WCHAR_H=wchar.h + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS mbsinit.$ac_objext" + + + : + + fi + + + + GNULIB_MBSINIT=1 + + + + + + + + + + + + for ac_func in mkdtemp +do + ac_fn_c_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp" +if test "x$ac_cv_func_mkdtemp" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_MKDTEMP 1 +_ACEOF + +else + + M4_LIBOBJS="$M4_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_mkdtemp = no; then + HAVE_MKDTEMP=0 + : + + fi + + + + GNULIB_MKDTEMP=1 + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mkstemp" >&5 +$as_echo_n "checking for working mkstemp... " >&6; } +if test "${gl_cv_func_working_mkstemp+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + mkdir conftest.mkstemp + if test "$cross_compiling" = yes; then + gl_cv_func_working_mkstemp=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +int i; + off_t large = (off_t) 4294967295u; + if (large < 0) + large = 2147483647; + for (i = 0; i < 70; i++) + { + char templ[] = "conftest.mkstemp/coXXXXXX"; + int (*mkstemp_function) (char *) = mkstemp; + int fd = mkstemp_function (templ); + if (fd < 0 || lseek (fd, large, SEEK_SET) != large) + return 1; + close (fd); + } + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_working_mkstemp=yes +else + gl_cv_func_working_mkstemp=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -rf conftest.mkstemp + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_mkstemp" >&5 +$as_echo "$gl_cv_func_working_mkstemp" >&6; } + + if test $gl_cv_func_working_mkstemp != yes; then + REPLACE_MKSTEMP=1 + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS mkstemp.$ac_objext" + + + + fi + + + + GNULIB_MKSTEMP=1 + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for obstacks" >&5 +$as_echo_n "checking for obstacks... " >&6; } +if test "${ac_cv_func_obstack+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + #include "obstack.h" +int +main () +{ +struct obstack mem; + #define obstack_chunk_alloc malloc + #define obstack_chunk_free free + obstack_init (&mem); + obstack_free (&mem, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_func_obstack=yes +else + ac_cv_func_obstack=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_obstack" >&5 +$as_echo "$ac_cv_func_obstack" >&6; } +if test $ac_cv_func_obstack = yes; then + +$as_echo "#define HAVE_OBSTACK 1" >>confdefs.h + +else + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS obstack.$ac_objext" + +fi + + + + case "$host_os" in + mingw* | pw*) + + + if test $REPLACE_OPEN != 1; then + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS open.$ac_objext" + + + + : + + fi + REPLACE_OPEN=1 + + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 +$as_echo_n "checking whether open recognizes a trailing slash... " >&6; } +if test "${gl_cv_func_open_slash+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + solaris2.[0-9]*) gl_cv_func_open_slash="guessing no" ;; + hpux*) gl_cv_func_open_slash="guessing no" ;; + *) gl_cv_func_open_slash="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <fcntl.h> +#if HAVE_UNISTD_H +# include <unistd.h> +#endif +int main () +{ + return open ("conftest.sl/", O_CREAT, 0600) >= 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_open_slash=yes +else + gl_cv_func_open_slash=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.sl + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5 +$as_echo "$gl_cv_func_open_slash" >&6; } + case "$gl_cv_func_open_slash" in + *no) + +$as_echo "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h + + + + if test $REPLACE_OPEN != 1; then + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS open.$ac_objext" + + + + : + + fi + REPLACE_OPEN=1 + + ;; + esac + ;; + esac + + + +$as_echo "#define GNULIB_OPEN 1" >>confdefs.h + + + + + GNULIB_OPEN=1 + + + + + + + + + + + + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawn_faction_addclose.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawn_faction_adddup2.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawn_faction_addopen.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawn_faction_destroy.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawn_faction_init.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawnattr_destroy.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWNATTR_DESTROY=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawnattr_init.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWNATTR_INIT=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawnattr_setflags.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWNATTR_SETFLAGS=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawnattr_setsigmask.$ac_objext" + + fi + + + GNULIB_POSIX_SPAWNATTR_SETSIGMASK=1 + + + + + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + + + SPAWN_H='spawn.h' + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawnp.$ac_objext" + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS spawni.$ac_objext" + + for ac_header in paths.h +do + ac_fn_c_check_header_mongrel "$LINENO" "paths.h" "ac_cv_header_paths_h" "$ac_includes_default" +if test "x$ac_cv_header_paths_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_PATHS_H 1 +_ACEOF + +fi + +done + + for ac_func in confstr sched_setparam sched_setscheduler setegid seteuid vfork +do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + fi + + + GNULIB_POSIX_SPAWNP=1 + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp can be used without linking with libm" >&5 +$as_echo_n "checking whether frexp can be used without linking with libm... " >&6; } +if test "${gl_cv_func_frexp_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + double x; + int y; +int +main () +{ +return frexp (x, &y) < 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_frexp_no_libm=yes +else + gl_cv_func_frexp_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_no_libm" >&5 +$as_echo "$gl_cv_func_frexp_no_libm" >&6; } + if test $gl_cv_func_frexp_no_libm = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5 +$as_echo_n "checking whether frexp works... " >&6; } +if test "${gl_cv_func_frexp_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";; + *) gl_cv_func_frexp_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <math.h> +#include <string.h> +int main() +{ + int i; + volatile double x; +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ + double zero = 0.0; + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + return 1; + } + /* Test on infinite numbers. */ + x = 1.0 / 0.0; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + return 1; + } + /* Test on negative zero. */ + x = -zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_frexp_works=yes +else + gl_cv_func_frexp_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5 +$as_echo "$gl_cv_func_frexp_works" >&6; } + + case "$gl_cv_func_frexp_works" in + *yes) + +$as_echo "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h + + ;; + esac + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexp can be used without linking with libm" >&5 +$as_echo_n "checking whether ldexp can be used without linking with libm... " >&6; } +if test "${gl_cv_func_ldexp_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + double x; + int y; +int +main () +{ +return ldexp (x, y) < 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_ldexp_no_libm=yes +else + gl_cv_func_ldexp_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexp_no_libm" >&5 +$as_echo "$gl_cv_func_ldexp_no_libm" >&6; } + if test $gl_cv_func_ldexp_no_libm = yes; then + +$as_echo "#define HAVE_LDEXP_IN_LIBC 1" >>confdefs.h + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl can be used without linking with libm" >&5 +$as_echo_n "checking whether frexpl can be used without linking with libm... " >&6; } +if test "${gl_cv_func_frexpl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x; + int y; +int +main () +{ +return frexpl (x, &y) < 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_frexpl_no_libm=yes +else + gl_cv_func_frexpl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5 +$as_echo "$gl_cv_func_frexpl_no_libm" >&6; } + if test $gl_cv_func_frexpl_no_libm = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5 +$as_echo_n "checking whether frexpl works... " >&6; } +if test "${gl_cv_func_frexpl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + aix* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <math.h> +/* Override the values of <float.h>, like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +extern long double frexpl (long double, int *); +int main() +{ + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + return 1; + } + /* Test on finite numbers that fails on MacOS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + return 1; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + return 1; + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On MacOS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + return 1; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_frexpl_works=yes +else + gl_cv_func_frexpl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5 +$as_echo "$gl_cv_func_frexpl_works" >&6; } + + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + +$as_echo "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h + + ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h> +" +if test "x$ac_cv_have_decl_frexpl" = x""yes; then + : +else + HAVE_DECL_FREXPL=0 +fi + + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl can be used without linking with libm" >&5 +$as_echo_n "checking whether ldexpl can be used without linking with libm... " >&6; } +if test "${gl_cv_func_ldexpl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x; + int y; +int +main () +{ +return ldexpl (x, y) < 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_ldexpl_no_libm=yes +else + gl_cv_func_ldexpl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_no_libm" >&5 +$as_echo "$gl_cv_func_ldexpl_no_libm" >&6; } + if test $gl_cv_func_ldexpl_no_libm = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl works" >&5 +$as_echo_n "checking whether ldexpl works... " >&6; } +if test "${gl_cv_func_ldexpl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + aix*) gl_cv_func_ldexpl_works="guessing no";; + *) gl_cv_func_ldexpl_works="guessing yes";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <math.h> +extern long double ldexpl (long double, int); +int main() +{ + volatile long double x1 = 1.0; + volatile long double y1 = ldexpl (x1, -1); + volatile long double x2 = 1.73205L; + volatile long double y2 = ldexpl (x2, 0); + return (y1 != 0.5L) || (y2 != x2); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_ldexpl_works=yes +else + gl_cv_func_ldexpl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_works" >&5 +$as_echo "$gl_cv_func_ldexpl_works" >&6; } + + case "$gl_cv_func_ldexpl_works" in + *yes) + +$as_echo "#define HAVE_LDEXPL_IN_LIBC 1" >>confdefs.h + + ac_fn_c_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h> +" +if test "x$ac_cv_have_decl_ldexpl" = x""yes; then + : +else + HAVE_DECL_LDEXPL=0 +fi + + ;; + esac + fi + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS quotearg.$ac_objext" + + + + + + + + + + + + + + + for ac_func in rawmemchr +do + ac_fn_c_check_func "$LINENO" "rawmemchr" "ac_cv_func_rawmemchr" +if test "x$ac_cv_func_rawmemchr" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_RAWMEMCHR 1 +_ACEOF + +else + + M4_LIBOBJS="$M4_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_rawmemchr = no; then + HAVE_RAWMEMCHR=0 + : + fi + + + + GNULIB_RAWMEMCHR=1 + + + + + +# Check whether --with-included-regex was given. +if test "${with_included_regex+set}" = set; then + withval=$with_included_regex; +fi + + + case $with_included_regex in #( + yes|no) ac_use_included_regex=$with_included_regex + ;; + '') + # If the system regex support is good enough that it passes the + # following run test, then default to *not* using the included regex.c. + # If cross compiling, assume the test would fail and use the included + # regex.c. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5 +$as_echo_n "checking for working re_compile_pattern... " >&6; } +if test "${gl_cv_func_re_compile_pattern_working+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + gl_cv_func_re_compile_pattern_working=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default + #if HAVE_LOCALE_H + #include <locale.h> + #endif + #include <limits.h> + #include <regex.h> + +int +main () +{ +static struct re_pattern_buffer regex; + unsigned char folded_chars[UCHAR_MAX + 1]; + int i; + const char *s; + struct re_registers regs; + + #if HAVE_LOCALE_H + /* http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html + This test needs valgrind to catch the bug on Debian + GNU/Linux 3.1 x86, but it might catch the bug better + on other platforms and it shouldn't hurt to try the + test here. */ + if (setlocale (LC_ALL, "en_US.UTF-8")) + { + static char const pat[] = "insert into"; + static char const data[] = + "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; + re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE + | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern (pat, sizeof pat - 1, ®ex); + if (s) + return 1; + if (re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, ®s) + != -1) + return 1; + if (! setlocale (LC_ALL, "C")) + return 1; + } + #endif + + /* This test is from glibc bug 3957, reported by Andrew Mackey. */ + re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("a[^x]b", 6, ®ex); + if (s) + return 1; + + /* This should fail, but succeeds for glibc-2.5. */ + if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) + return 1; + + /* This regular expression is from Spencer ere test number 75 + in grep-2.3. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP); + memset (®ex, 0, sizeof regex); + for (i = 0; i <= UCHAR_MAX; i++) + folded_chars[i] = i; + regex.translate = folded_chars; + s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); + /* This should fail with _Invalid character class name_ error. */ + if (!s) + return 1; + + /* This should succeed, but does not for glibc-2.1.3. */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("{1", 2, ®ex); + + if (s) + return 1; + + /* The following example is derived from a problem report + against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[an\371]*n", 7, ®ex); + if (s) + return 1; + + /* This should match, but does not for glibc-2.2.1. */ + if (re_match (®ex, "an", 2, 0, ®s) != 2) + return 1; + + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + return 1; + + /* glibc-2.2.93 does not work with a negative RANGE argument. */ + if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) + return 1; + + /* The version of regex.c in older versions of gnulib + ignored RE_ICASE. Detect that problem too. */ + re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + return 1; + + if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) + return 1; + + /* Catch a bug reported by Vin Shelton in + http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html + */ + re_set_syntax (RE_SYNTAX_POSIX_BASIC + & ~RE_CONTEXT_INVALID_DUP + & ~RE_NO_EMPTY_RANGES); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); + if (s) + return 1; + + /* REG_STARTEND was added to glibc on 2004-01-15. + Reject older versions. */ + if (! REG_STARTEND) + return 1; + + /* Reject hosts whose regoff_t values are too narrow. + These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t + and 32-bit int. */ + if (sizeof (regoff_t) < sizeof (ptrdiff_t) + || sizeof (regoff_t) < sizeof (ssize_t)) + return 1; + + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_re_compile_pattern_working=yes +else + gl_cv_func_re_compile_pattern_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_re_compile_pattern_working" >&5 +$as_echo "$gl_cv_func_re_compile_pattern_working" >&6; } + case $gl_cv_func_re_compile_pattern_working in #( + yes) ac_use_included_regex=no;; #( + no) ac_use_included_regex=yes;; + esac + ;; + *) as_fn_error "Invalid value for --with-included-regex: $with_included_regex" "$LINENO" 5 + ;; + esac + + if test $ac_use_included_regex = yes; then + +$as_echo "#define _REGEX_LARGE_OFFSETS 1" >>confdefs.h + + +$as_echo "#define re_syntax_options rpl_re_syntax_options" >>confdefs.h + + +$as_echo "#define re_set_syntax rpl_re_set_syntax" >>confdefs.h + + +$as_echo "#define re_compile_pattern rpl_re_compile_pattern" >>confdefs.h + + +$as_echo "#define re_compile_fastmap rpl_re_compile_fastmap" >>confdefs.h + + +$as_echo "#define re_search rpl_re_search" >>confdefs.h + + +$as_echo "#define re_search_2 rpl_re_search_2" >>confdefs.h + + +$as_echo "#define re_match rpl_re_match" >>confdefs.h + + +$as_echo "#define re_match_2 rpl_re_match_2" >>confdefs.h + + +$as_echo "#define re_set_registers rpl_re_set_registers" >>confdefs.h + + +$as_echo "#define re_comp rpl_re_comp" >>confdefs.h + + +$as_echo "#define re_exec rpl_re_exec" >>confdefs.h + + +$as_echo "#define regcomp rpl_regcomp" >>confdefs.h + + +$as_echo "#define regexec rpl_regexec" >>confdefs.h + + +$as_echo "#define regerror rpl_regerror" >>confdefs.h + + +$as_echo "#define regfree rpl_regfree" >>confdefs.h + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS regex.$ac_objext" + + + + + + for ac_header in libintl.h +do + ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" +if test "x$ac_cv_header_libintl_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBINTL_H 1 +_ACEOF + +fi + +done + + + ac_fn_c_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h> +" +if test "x$ac_cv_have_decl_isblank" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ISBLANK $ac_have_decl +_ACEOF + + + fi + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <sched.h> + struct sched_param a; + int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER }; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + SCHED_H='' +else + SCHED_H='sched.h' + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sched_h='<'sched.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sched.h>" >&5 +$as_echo_n "checking absolute name of <sched.h>... " >&6; } +if test "${gl_cv_next_sched_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sched_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sched.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_sched_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/sched.h#{ + s#.*"\(.*/sched.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_sched_h='<'sched.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sched_h" >&5 +$as_echo "$gl_cv_next_sched_h" >&6; } + fi + NEXT_SCHED_H=$gl_cv_next_sched_h + + + + + + if test $ac_cv_header_sched_h = yes; then + HAVE_SCHED_H=1 + else + HAVE_SCHED_H=0 + fi + + + ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <sched.h> +" +if test "x$ac_cv_type_struct_sched_param" = x""yes; then + HAVE_STRUCT_SCHED_PARAM=1 +else + HAVE_STRUCT_SCHED_PARAM=0 +fi + + + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + + + + + if test $ac_cv_func_sigaction = yes; then + ac_fn_c_check_member "$LINENO" "struct sigaction" "sa_sigaction" "ac_cv_member_struct_sigaction_sa_sigaction" "#include <signal.h> +" +if test "x$ac_cv_member_struct_sigaction_sa_sigaction" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 +_ACEOF + + +fi + + if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then + HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 + fi + else + HAVE_SIGACTION=0 + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS sigaction.$ac_objext" + + + + + + + + ac_fn_c_check_type "$LINENO" "siginfo_t" "ac_cv_type_siginfo_t" " +#include <signal.h> + +" +if test "x$ac_cv_type_siginfo_t" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_SIGINFO_T 1 +_ACEOF + + +fi + + if test $ac_cv_type_siginfo_t = no; then + HAVE_SIGINFO_T=0 + fi + + fi + + + + GNULIB_SIGACTION=1 + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_signal_h='<'signal.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <signal.h>" >&5 +$as_echo_n "checking absolute name of <signal.h>... " >&6; } +if test "${gl_cv_next_signal_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_signal_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <signal.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_signal_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/signal.h#{ + s#.*"\(.*/signal.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_signal_h='<'signal.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5 +$as_echo "$gl_cv_next_signal_h" >&6; } + fi + NEXT_SIGNAL_H=$gl_cv_next_signal_h + + + +# AIX declares sig_atomic_t to already include volatile, and C89 compilers +# then choke on 'volatile sig_atomic_t'. C99 requires that it compile. + ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" " +#include <signal.h> + +" +if test "x$ac_cv_type_volatile_sig_atomic_t" = x""yes; then + : +else + HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0 +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit macro" >&5 +$as_echo_n "checking for signbit macro... " >&6; } +if test "${gl_cv_func_signbit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_func_signbit="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <math.h> +/* If signbit is defined as a function, don't use it, since calling it for + 'float' or 'long double' arguments would involve conversions. + If signbit is not declared at all but exists as a library function, don't + use it, since the prototype may not match. + If signbit is not declared at all but exists as a compiler built-in, don't + use it, since it's preferable to use __builtin_signbit* (no warnings, + no conversions). */ +#ifndef signbit +# error "signbit should be a macro" +#endif +#include <string.h> + +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on MacOS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + if (signbit (vf)) + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vd)) + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vl)) + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (!(!signbit (255.0L) + && signbit (-255.0L) + && !signbit (p0l) + && (memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + return 0; +} + + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_signbit=yes +else + gl_cv_func_signbit=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit" >&5 +$as_echo "$gl_cv_func_signbit" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit compiler built-ins" >&5 +$as_echo_n "checking for signbit compiler built-ins... " >&6; } +if test "${gl_cv_func_signbit_gcc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_func_signbit_gcc="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if __GNUC__ >= 4 +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +#else +# error "signbit should be three compiler built-ins" +#endif +#include <string.h> + +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on MacOS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + if (signbit (vf)) + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vd)) + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vl)) + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (!(!signbit (255.0L) + && signbit (-255.0L) + && !signbit (p0l) + && (memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + return 0; +} + + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_signbit_gcc=yes +else + gl_cv_func_signbit_gcc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit_gcc" >&5 +$as_echo "$gl_cv_func_signbit_gcc" >&6; } + if test "$gl_cv_func_signbit_gcc" = yes; then + REPLACE_SIGNBIT_USING_GCC=1 + else + if test "$gl_cv_func_signbit" != yes; then + REPLACE_SIGNBIT=1 + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS signbitf.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS signbitd.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS signbitl.$ac_objext" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'float'" >&5 +$as_echo_n "checking where to find the sign bit in a 'float'... " >&6; } +if test "${gl_cv_cc_float_signbit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_float_signbit="unknown" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0f }; +static memory_float minus = { -1.0f }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + return 1; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + return 1; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + return 1; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_float_signbit=`cat conftest.out` +else + gl_cv_cc_float_signbit="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_signbit" >&5 +$as_echo "$gl_cv_cc_float_signbit" >&6; } + case "$gl_cv_cc_float_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'double'" >&5 +$as_echo_n "checking where to find the sign bit in a 'double'... " >&6; } +if test "${gl_cv_cc_double_signbit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_double_signbit="unknown" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0 }; +static memory_float minus = { -1.0 }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + return 1; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + return 1; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + return 1; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_double_signbit=`cat conftest.out` +else + gl_cv_cc_double_signbit="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_signbit" >&5 +$as_echo "$gl_cv_cc_double_signbit" >&6; } + case "$gl_cv_cc_double_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'long double'" >&5 +$as_echo_n "checking where to find the sign bit in a 'long double'... " >&6; } +if test "${gl_cv_cc_long_double_signbit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_long_double_signbit="unknown" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stddef.h> +#include <stdio.h> +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0L }; +static memory_float minus = { -1.0L }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + return 1; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + return 1; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + return 1; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_long_double_signbit=`cat conftest.out` +else + gl_cv_cc_long_double_signbit="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_signbit" >&5 +$as_echo "$gl_cv_cc_long_double_signbit" >&6; } + case "$gl_cv_cc_long_double_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define LDBL_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define LDBL_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + if test "$gl_cv_cc_float_signbit" = unknown; then + ac_fn_c_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h> +" +if test "x$ac_cv_have_decl_copysignf" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGNF $ac_have_decl +_ACEOF + + if test "$ac_cv_have_decl_copysignf" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignf can be used without linking with libm" >&5 +$as_echo_n "checking whether copysignf can be used without linking with libm... " >&6; } +if test "${gl_cv_func_copysignf_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + float x, y; +int +main () +{ +return copysignf (x, y) < 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_copysignf_no_libm=yes +else + gl_cv_func_copysignf_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignf_no_libm" >&5 +$as_echo "$gl_cv_func_copysignf_no_libm" >&6; } + if test $gl_cv_func_copysignf_no_libm = yes; then + +$as_echo "#define HAVE_COPYSIGNF_IN_LIBC 1" >>confdefs.h + + fi + fi + fi + if test "$gl_cv_cc_double_signbit" = unknown; then + ac_fn_c_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h> +" +if test "x$ac_cv_have_decl_copysign" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGN $ac_have_decl +_ACEOF + + if test "$ac_cv_have_decl_copysign" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysign can be used without linking with libm" >&5 +$as_echo_n "checking whether copysign can be used without linking with libm... " >&6; } +if test "${gl_cv_func_copysign_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + double x, y; +int +main () +{ +return copysign (x, y) < 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_copysign_no_libm=yes +else + gl_cv_func_copysign_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysign_no_libm" >&5 +$as_echo "$gl_cv_func_copysign_no_libm" >&6; } + if test $gl_cv_func_copysign_no_libm = yes; then + +$as_echo "#define HAVE_COPYSIGN_IN_LIBC 1" >>confdefs.h + + fi + fi + fi + if test "$gl_cv_cc_long_double_signbit" = unknown; then + ac_fn_c_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h> +" +if test "x$ac_cv_have_decl_copysignl" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGNL $ac_have_decl +_ACEOF + + if test "$ac_cv_have_decl_copysignl" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignl can be used without linking with libm" >&5 +$as_echo_n "checking whether copysignl can be used without linking with libm... " >&6; } +if test "${gl_cv_func_copysignl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <math.h> + long double x, y; +int +main () +{ +return copysignl (x, y) < 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + gl_cv_func_copysignl_no_libm=yes +else + gl_cv_func_copysignl_no_libm=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignl_no_libm" >&5 +$as_echo "$gl_cv_func_copysignl_no_libm" >&6; } + if test $gl_cv_func_copysignl_no_libm = yes; then + +$as_echo "#define HAVE_COPYSIGNL_IN_LIBC 1" >>confdefs.h + + fi + fi + fi + fi + fi + + + + GNULIB_SIGNBIT=1 + + + + signals_not_posix= + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <signal.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sigset_t" >/dev/null 2>&1; then + : +else + signals_not_posix=1 +fi +rm -f conftest* + + if test -z "$signals_not_posix"; then + ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" +if test "x$ac_cv_func_sigprocmask" = x""yes; then + gl_cv_func_sigprocmask=1 +fi + + fi + if test -z "$gl_cv_func_sigprocmask"; then + HAVE_POSIX_SIGNALBLOCKING=0 + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS sigprocmask.$ac_objext" + + + + ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" "#include <signal.h> +/* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ +#include <sys/types.h> +" +if test "x$ac_cv_type_sigset_t" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_SIGSET_T 1 +_ACEOF + +gl_cv_type_sigset_t=yes +else + gl_cv_type_sigset_t=no +fi + + if test $gl_cv_type_sigset_t != yes; then + HAVE_SIGSET_T=0 + fi + + + fi + + + + GNULIB_SIGPROCMASK=1 + + + for ac_header in stdint.h +do + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 +$as_echo_n "checking for SIZE_MAX... " >&6; } + if test "${gl_cv_size_max+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + gl_cv_size_max= + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <limits.h> +#if HAVE_STDINT_H +#include <stdint.h> +#endif +#ifdef SIZE_MAX +Found it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Found it" >/dev/null 2>&1; then + gl_cv_size_max=yes +fi +rm -f conftest* + + if test -z "$gl_cv_size_max"; then + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include <stddef.h> +#include <limits.h>"; then + : +else + size_t_bits_minus_1= +fi + + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include <stddef.h>"; then + : +else + fits_in_uint= +fi + + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + extern size_t foo; + extern unsigned long foo; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + fits_in_uint=0 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 +$as_echo "$gl_cv_size_max" >&6; } + if test "$gl_cv_size_max" != yes; then + +cat >>confdefs.h <<_ACEOF +#define SIZE_MAX $gl_cv_size_max +_ACEOF + + fi + + + + gl_cv_func_snprintf_usable=no + for ac_func in snprintf +do + ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" +if test "x$ac_cv_func_snprintf" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SNPRINTF 1 +_ACEOF + +fi +done + + if test $ac_cv_func_snprintf = yes; then + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5 +$as_echo_n "checking whether snprintf respects a size of 1... " >&6; } +if test "${gl_cv_func_snprintf_size1+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_func_snprintf_size1="guessing yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdio.h> +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + snprintf (buf, 1, "%d", 12345); + return buf[1] != 'E'; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_snprintf_size1=yes +else + gl_cv_func_snprintf_size1=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5 +$as_echo "$gl_cv_func_snprintf_size1" >&6; } + + case "$gl_cv_func_snprintf_size1" in + *yes) + gl_cv_func_snprintf_usable=yes + ;; + esac + fi + if test $gl_cv_func_snprintf_usable = no; then + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS snprintf.$ac_objext" + + if test $ac_cv_func_snprintf = yes; then + REPLACE_SNPRINTF=1 + fi + : + + fi + + if test $ac_cv_have_decl_snprintf = no; then + HAVE_DECL_SNPRINTF=0 + fi + + + + GNULIB_SNPRINTF=1 + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_spawn_h='<'spawn.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <spawn.h>" >&5 +$as_echo_n "checking absolute name of <spawn.h>... " >&6; } +if test "${gl_cv_next_spawn_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_spawn_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <spawn.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_spawn_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/spawn.h#{ + s#.*"\(.*/spawn.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_spawn_h='<'spawn.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_spawn_h" >&5 +$as_echo "$gl_cv_next_spawn_h" >&6; } + fi + NEXT_SPAWN_H=$gl_cv_next_spawn_h + + + + + + if test $ac_cv_header_spawn_h = yes; then + HAVE_SPAWN_H=1 + else + HAVE_SPAWN_H=0 + fi + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 +$as_echo_n "checking for ssize_t... " >&6; } +if test "${gt_cv_ssize_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +int +main () +{ +int x = sizeof (ssize_t *) + sizeof (ssize_t); + return !x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gt_cv_ssize_t=yes +else + gt_cv_ssize_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5 +$as_echo "$gt_cv_ssize_t" >&6; } + if test $gt_cv_ssize_t = no; then + +$as_echo "#define ssize_t int" >>confdefs.h + + fi + + + STDARG_H=''; + NEXT_STDARG_H='<stdarg.h>'; + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5 +$as_echo_n "checking for va_copy... " >&6; } + if test "${gl_cv_func_va_copy+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +int +main () +{ + +#ifndef va_copy +void (*func) (va_list, va_list) = va_copy; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_func_va_copy=yes +else + gl_cv_func_va_copy=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_va_copy" >&5 +$as_echo "$gl_cv_func_va_copy" >&6; } + if test $gl_cv_func_va_copy = no; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined _AIX && !defined __GNUC__ + AIX vaccine + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "vaccine" >/dev/null 2>&1; then + gl_aixcc=yes +else + gl_aixcc=no +fi +rm -f conftest* + + if test $gl_aixcc = yes; then + STDARG_H=stdarg.h + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdarg_h='<'stdarg.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdarg.h>" >&5 +$as_echo_n "checking absolute name of <stdarg.h>... " >&6; } +if test "${gl_cv_next_stdarg_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdarg_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_stdarg_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdarg.h#{ + s#.*"\(.*/stdarg.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdarg_h='<'stdarg.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdarg_h" >&5 +$as_echo "$gl_cv_next_stdarg_h" >&6; } + fi + NEXT_STDARG_H=$gl_cv_next_stdarg_h + + + + if test "$gl_cv_next_stdarg_h" = '""'; then + gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' + NEXT_STDARG_H="$gl_cv_next_stdarg_h" + fi + else + + saved_as_echo_n="$as_echo_n" + as_echo_n=':' + if test "${gl_cv_func___va_copy+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +int +main () +{ + +#ifndef __va_copy +error, bail out +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_func___va_copy=yes +else + gl_cv_func___va_copy=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + as_echo_n="$saved_as_echo_n" + + if test $gl_cv_func___va_copy = yes; then + +$as_echo "#define va_copy __va_copy" >>confdefs.h + + else + + +$as_echo "#define va_copy gl_va_copy" >>confdefs.h + + fi + fi + fi + + + + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + + + + + + if test $ac_cv_type_long_long_int = yes; then + HAVE_LONG_LONG_INT=1 + else + HAVE_LONG_LONG_INT=0 + fi + + + if test $ac_cv_type_unsigned_long_long_int = yes; then + HAVE_UNSIGNED_LONG_LONG_INT=1 + else + HAVE_UNSIGNED_LONG_LONG_INT=0 + fi + + + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + + + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdint_h='<'stdint.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5 +$as_echo_n "checking absolute name of <stdint.h>... " >&6; } +if test "${gl_cv_next_stdint_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdint_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdint.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdint.h#{ + s#.*"\(.*/stdint.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdint_h='<'stdint.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 +$as_echo "$gl_cv_next_stdint_h" >&6; } + fi + NEXT_STDINT_H=$gl_cv_next_stdint_h + + + + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi + + + if test $ac_cv_header_stdint_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 +$as_echo_n "checking whether stdint.h conforms to C99... " >&6; } +if test "${gl_cv_header_working_stdint_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + gl_cv_header_working_stdint_h=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include <stdint.h> +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" +#endif + + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +#include <limits.h> /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + if test "$cross_compiling" = yes; then + gl_cv_header_working_stdint_h=yes + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include <stdint.h> + + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + +#include <stdio.h> +#include <string.h> +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), +#endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; + +int +main () +{ + + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_header_working_stdint_h=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 +$as_echo "$gl_cv_header_working_stdint_h" >&6; } + fi + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + for ac_header in sys/inttypes.h sys/bitypes.h +do + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + else + HAVE_SYS_INTTYPES_H=0 + fi + + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + fi + + + + + + + if test $APPLE_UNIVERSAL_BUILD = 0; then + + + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + +#include <limits.h>"; then + : +else + result=unknown +fi + + eval gl_cv_bitsizeof_${gltype}=\$result + +fi +eval ac_res=\$gl_cv_bitsizeof_${gltype} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result +_ACEOF + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + fi + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + +#include <limits.h>"; then + : +else + result=unknown +fi + + eval gl_cv_bitsizeof_${gltype}=\$result + +fi +eval ac_res=\$gl_cv_bitsizeof_${gltype} + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result +_ACEOF + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 +$as_echo_n "checking whether $gltype is signed... " >&6; } +if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + result=yes +else + result=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval gl_cv_type_${gltype}_signed=\$result + +fi +eval ac_res=\$gl_cv_type_${gltype}_signed + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SIGNED_${GLTYPE} 1 +_ACEOF + + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 + fi + done + + + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then + + + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + extern $gltype foo; + extern $gltype1 foo; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + eval gl_cv_type_${gltype}_suffix=\$glsuf +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done +fi +eval ac_res=\$gl_cv_type_${gltype}_suffix + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done + + + fi + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be + included before <wchar.h>. */ + #include <stddef.h> + #include <signal.h> + #if HAVE_WCHAR_H + # include <stdio.h> + # include <time.h> + # include <wchar.h> + #endif + + extern $gltype foo; + extern $gltype1 foo; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + eval gl_cv_type_${gltype}_suffix=\$glsuf +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done +fi +eval ac_res=\$gl_cv_type_${gltype}_suffix + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done + + + + STDINT_H=stdint.h + fi + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdio_h='<'stdio.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5 +$as_echo_n "checking absolute name of <stdio.h>... " >&6; } +if test "${gl_cv_next_stdio_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdio_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdio.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_stdio_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdio.h#{ + s#.*"\(.*/stdio.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdio_h='<'stdio.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 +$as_echo "$gl_cv_next_stdio_h" >&6; } + fi + NEXT_STDIO_H=$gl_cv_next_stdio_h + + + + GNULIB_FPRINTF=1 + GNULIB_PRINTF=1 + GNULIB_VFPRINTF=1 + GNULIB_VPRINTF=1 + GNULIB_FPUTC=1 + GNULIB_PUTC=1 + GNULIB_PUTCHAR=1 + GNULIB_FPUTS=1 + GNULIB_PUTS=1 + GNULIB_FWRITE=1 + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdlib_h='<'stdlib.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5 +$as_echo_n "checking absolute name of <stdlib.h>... " >&6; } +if test "${gl_cv_next_stdlib_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdlib_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdlib.h#{ + s#.*"\(.*/stdlib.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdlib_h='<'stdlib.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 +$as_echo "$gl_cv_next_stdlib_h" >&6; } + fi + NEXT_STDLIB_H=$gl_cv_next_stdlib_h + + + + for ac_header in random.h +do + ac_fn_c_check_header_compile "$LINENO" "random.h" "ac_cv_header_random_h" "$ac_includes_default +" +if test "x$ac_cv_header_random_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_RANDOM_H 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_random_h = yes; then + HAVE_RANDOM_H=1 + else + HAVE_RANDOM_H=0 + fi + + ac_fn_c_check_type "$LINENO" "struct random_data" "ac_cv_type_struct_random_data" "#include <stdlib.h> + #if HAVE_RANDOM_H + # include <random.h> + #endif + +" +if test "x$ac_cv_type_struct_random_data" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_RANDOM_DATA 1 +_ACEOF + + +else + HAVE_STRUCT_RANDOM_DATA=0 +fi + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS mkstemp-safer.$ac_objext" + + + + + + + + + + + + + + + for ac_func in strchrnul +do + ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" +if test "x$ac_cv_func_strchrnul" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_STRCHRNUL 1 +_ACEOF + +else + + M4_LIBOBJS="$M4_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_strchrnul = no; then + HAVE_STRCHRNUL=0 + : + fi + + + + GNULIB_STRCHRNUL=1 + + + + if test $REPLACE_STRERROR = 1; then + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS strerror.$ac_objext" + + +cat >>confdefs.h <<_ACEOF +#define REPLACE_STRERROR $REPLACE_STRERROR +_ACEOF + + fi + + + + GNULIB_STRERROR=1 + + + + + + + + + + if test $ac_cv_have_decl_strndup = no; then + HAVE_DECL_STRNDUP=0 + fi + + # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strndup" >&5 +$as_echo_n "checking for working strndup... " >&6; } +if test "${gl_cv_func_strndup+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_fn_c_check_func "$LINENO" "strndup" "ac_cv_func_strndup" +if test "x$ac_cv_func_strndup" = x""yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _AIX + too risky +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "too risky" >/dev/null 2>&1; then + gl_cv_func_strndup=no +else + gl_cv_func_strndup=yes +fi +rm -f conftest* + +else + gl_cv_func_strndup=no +fi + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include <string.h> + #include <stdlib.h> +int +main () +{ + +#ifndef HAVE_DECL_STRNDUP + extern char *strndup (const char *, size_t); +#endif + char *s; + s = strndup ("some longer string", 15); + free (s); + s = strndup ("shorter string", 13); + return s[13] != '\0'; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_strndup=yes +else + gl_cv_func_strndup=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strndup" >&5 +$as_echo "$gl_cv_func_strndup" >&6; } + if test $gl_cv_func_strndup = yes; then + +$as_echo "#define HAVE_STRNDUP 1" >>confdefs.h + + else + HAVE_STRNDUP=0 + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS strndup.$ac_objext" + + : + fi + + + + GNULIB_STRNDUP=1 + + + + + + + if test $ac_cv_have_decl_strnlen = no; then + HAVE_DECL_STRNLEN=0 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5 +$as_echo_n "checking for working strnlen... " >&6; } +if test "${ac_cv_func_strnlen_working+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_strnlen_working=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + +#define S "foobar" +#define S_LEN (sizeof S - 1) + + /* At least one implementation is buggy: that of AIX 4.3 would + give strnlen (S, 1) == 3. */ + + int i; + for (i = 0; i < S_LEN + 1; ++i) + { + int expected = i <= S_LEN ? i : S_LEN; + if (strnlen (S, i) != expected) + return 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_func_strnlen_working=yes +else + ac_cv_func_strnlen_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strnlen_working" >&5 +$as_echo "$ac_cv_func_strnlen_working" >&6; } +test $ac_cv_func_strnlen_working = no && + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS strnlen.$ac_objext" + + + if test $ac_cv_func_strnlen_working = no; then + # This is necessary because automake-1.6.1 doesn't understand + # that the above use of AC_FUNC_STRNLEN means we may have to use + # lib/strnlen.c. + #AC_LIBOBJ([strnlen]) + +$as_echo "#define strnlen rpl_strnlen" >>confdefs.h + + : + fi + + + + GNULIB_STRNLEN=1 + + + + + + + + if test $ac_cv_have_decl_strsignal = no; then + HAVE_DECL_STRSIGNAL=0 + fi + + for ac_func in strsignal +do + ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal" +if test "x$ac_cv_func_strsignal" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_STRSIGNAL 1 +_ACEOF + +fi +done + + if test $ac_cv_func_strsignal = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strsignal always returns a string" >&5 +$as_echo_n "checking whether strsignal always returns a string... " >&6; } +if test "${gl_cv_func_working_strsignal+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + case "$host_os" in + solaris* | aix*) gl_cv_func_working_strsignal=no;; + *) gl_cv_func_working_strsignal="guessing yes";; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +int +main () +{ +char *s = strsignal (-1); + return !(s != (char *) 0 && s != (char *) -1); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_working_strsignal=yes +else + gl_cv_func_working_strsignal=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_strsignal" >&5 +$as_echo "$gl_cv_func_working_strsignal" >&6; } + else + gl_cv_func_working_strsignal=no + fi + + if test "$gl_cv_func_working_strsignal" = no; then + if test $ac_cv_func_strsignal = yes; then + REPLACE_STRSIGNAL=1 + fi + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS strsignal.$ac_objext" + + + + ac_fn_c_check_decl "$LINENO" "_sys_siglist" "ac_cv_have_decl__sys_siglist" "#include <signal.h> +" +if test "x$ac_cv_have_decl__sys_siglist" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SYS_SIGLIST $ac_have_decl +_ACEOF + + + fi + + + + GNULIB_STRSIGNAL=1 + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strstr works in linear time" >&5 +$as_echo_n "checking whether strstr works in linear time... " >&6; } +if test "${gl_cv_func_strstr_linear+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <features.h> +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2) + Lucky user + #endif +#endif +#ifdef __CYGWIN__ + #include <cygwin/version.h> + #if CYGWIN_VERSION_DLL_MAJOR >= 1007 + Lucky user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky user" >/dev/null 2>&1; then + gl_cv_func_strstr_linear=yes +else + gl_cv_func_strstr_linear="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <signal.h> /* for signal */ +#include <string.h> /* for memmem */ +#include <stdlib.h> /* for malloc */ +#include <unistd.h> /* for alarm */ + +int +main () +{ +size_t m = 1000000; + char *haystack = (char *) malloc (2 * m + 2); + char *needle = (char *) malloc (m + 2); + void *result = 0; + /* Failure to compile this test due to missing alarm is okay, + since all such platforms (mingw) also have quadratic strstr. */ + signal (SIGALRM, SIG_DFL); + alarm (5); + /* Check for quadratic performance. */ + if (haystack && needle) + { + memset (haystack, 'A', 2 * m); + haystack[2 * m] = 'B'; + haystack[2 * m + 1] = 0; + memset (needle, 'A', m); + needle[m] = 'B'; + needle[m + 1] = 0; + result = strstr (haystack, needle); + } + return !result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_strstr_linear=yes +else + gl_cv_func_strstr_linear=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strstr_linear" >&5 +$as_echo "$gl_cv_func_strstr_linear" >&6; } + if test "$gl_cv_func_strstr_linear" != yes; then + REPLACE_STRSTR=1 + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS strstr.$ac_objext" + + fi + + + + GNULIB_STRSTR=1 + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strtod" >&5 +$as_echo_n "checking for working strtod... " >&6; } +if test "${ac_cv_func_strtod+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_strtod=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +$ac_includes_default +#ifndef strtod +double strtod (); +#endif +int +main() +{ + { + /* Some versions of Linux strtod mis-parse strings with leading '+'. */ + char *string = " +69"; + char *term; + double value; + value = strtod (string, &term); + if (value != 69 || term != (string + 4)) + return 1; + } + + { + /* Under Solaris 2.4, strtod returns the wrong value for the + terminating character under some conditions. */ + char *string = "NaN"; + char *term; + strtod (string, &term); + if (term != string && *(term - 1) == 0) + return 1; + } + return 0; +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_func_strtod=yes +else + ac_cv_func_strtod=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strtod" >&5 +$as_echo "$ac_cv_func_strtod" >&6; } +if test $ac_cv_func_strtod = no; then + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS strtod.$ac_objext" + +ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow" +if test "x$ac_cv_func_pow" = x""yes; then + : +fi + +if test $ac_cv_func_pow = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 +$as_echo_n "checking for pow in -lm... " >&6; } +if test "${ac_cv_lib_m_pow+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pow (); +int +main () +{ +return pow (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_lib_m_pow=yes +else + ac_cv_lib_m_pow=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 +$as_echo "$ac_cv_lib_m_pow" >&6; } +if test "x$ac_cv_lib_m_pow" = x""yes; then + POW_LIB=-lm +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5 +$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} +fi + +fi + +fi + + if test $ac_cv_func_strtod = no; then + HAVE_STRTOD=0 + REPLACE_STRTOD=1 + : + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strtod obeys C99" >&5 +$as_echo_n "checking whether strtod obeys C99... " >&6; } +if test "${gl_cv_func_strtod_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + gl_cv_func_strtod_works="guessing no" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <stdlib.h> +#include <math.h> +#include <errno.h> +/* Compare two numbers with ==. + This is a separate function because IRIX 6.5 "cc -O" miscompiles an + 'x == x' test. */ +static int +numeric_equal (double x, double y) +{ + return x == y; +} + +int +main () +{ + + { + /* Older glibc and Cygwin mis-parse "-0x". */ + const char *string = "-0x"; + char *term; + double value = strtod (string, &term); + double zero = 0.0; + if (1.0 / value != -1.0 / zero || term != (string + 2)) + return 1; + } + { + /* Many platforms do not parse hex floats. */ + const char *string = "0XaP+1"; + char *term; + double value = strtod (string, &term); + if (value != 20.0 || term != (string + 6)) + return 1; + } + { + /* Many platforms do not parse infinities. HP-UX 11.31 parses inf, + but mistakenly sets errno. */ + const char *string = "inf"; + char *term; + double value; + errno = 0; + value = strtod (string, &term); + if (value != HUGE_VAL || term != (string + 3) || errno) + return 1; + } + { + /* glibc 2.7 and cygwin 1.5.24 misparse "nan()". */ + const char *string = "nan()"; + char *term; + double value = strtod (string, &term); + if (numeric_equal (value, value) || term != (string + 5)) + return 1; + } + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_strtod_works=yes +else + gl_cv_func_strtod_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_strtod_works" >&5 +$as_echo "$gl_cv_func_strtod_works" >&6; } + if test "$gl_cv_func_strtod_works" != yes; then + REPLACE_STRTOD=1 + : + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS strtod.$ac_objext" + +ac_fn_c_check_func "$LINENO" "pow" "ac_cv_func_pow" +if test "x$ac_cv_func_pow" = x""yes; then + : +fi + +if test $ac_cv_func_pow = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 +$as_echo_n "checking for pow in -lm... " >&6; } +if test "${ac_cv_lib_m_pow+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pow (); +int +main () +{ +return pow (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then + ac_cv_lib_m_pow=yes +else + ac_cv_lib_m_pow=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 +$as_echo "$ac_cv_lib_m_pow" >&6; } +if test "x$ac_cv_lib_m_pow" = x""yes; then + POW_LIB=-lm +else + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot find library containing definition of pow" >&5 +$as_echo "$as_me: WARNING: cannot find library containing definition of pow" >&2;} +fi + +fi + + fi + fi + + + + GNULIB_STRTOD=1 + + + + + + + + + + + for ac_func in strtol +do + ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol" +if test "x$ac_cv_func_strtol" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOL 1 +_ACEOF + +else + + M4_LIBOBJS="$M4_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + + + + + + if test $ac_cv_func_lstat = yes; then + HAVE_LSTAT=1 + else + HAVE_LSTAT=0 + fi + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_stat_h='<'sys/stat.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5 +$as_echo_n "checking absolute name of <sys/stat.h>... " >&6; } +if test "${gl_cv_next_sys_stat_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_stat_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/stat.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_sys_stat_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/sys/stat.h#{ + s#.*"\(.*/sys/stat.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_sys_stat_h='<'sys/stat.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 +$as_echo "$gl_cv_next_sys_stat_h" >&6; } + fi + NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h + + + + SYS_STAT_H='sys/stat.h' + + + ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> + #include <sys/stat.h> +" +if test "x$ac_cv_type_nlink_t" = x""yes; then + : +else + +$as_echo "#define nlink_t int" >>confdefs.h + +fi + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_sys_wait_h='<'sys/wait.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/wait.h>" >&5 +$as_echo_n "checking absolute name of <sys/wait.h>... " >&6; } +if test "${gl_cv_next_sys_wait_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_sys_wait_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/wait.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_sys_wait_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/sys/wait.h#{ + s#.*"\(.*/sys/wait.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_sys_wait_h='<'sys/wait.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_wait_h" >&5 +$as_echo "$gl_cv_next_sys_wait_h" >&6; } + fi + NEXT_SYS_WAIT_H=$gl_cv_next_sys_wait_h + + + + SYS_WAIT_H='sys/wait.h' + + + + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS tempname.$ac_objext" + + + : + + + + + + + + + + + for ac_func in __secure_getenv +do + ac_fn_c_check_func "$LINENO" "__secure_getenv" "ac_cv_func___secure_getenv" +if test "x$ac_cv_func___secure_getenv" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE___SECURE_GETENV 1 +_ACEOF + +fi +done + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_unistd_h='<'unistd.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5 +$as_echo_n "checking absolute name of <unistd.h>... " >&6; } +if test "${gl_cv_next_unistd_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_unistd_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/unistd.h#{ + s#.*"\(.*/unistd.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_unistd_h='<'unistd.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 +$as_echo "$gl_cv_next_unistd_h" >&6; } + fi + NEXT_UNISTD_H=$gl_cv_next_unistd_h + + + + + + if test $ac_cv_header_unistd_h = yes; then + HAVE_UNISTD_H=1 + else + HAVE_UNISTD_H=0 + fi + + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS dup-safer.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS fd-safer.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS pipe-safer.$ac_objext" + + + + +$as_echo "#define USE_UNLOCKED_IO 1" >>confdefs.h + + + + + + + + + + + + + + + + + + + + + if test $ac_cv_func_vasnprintf = no; then + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = x""yes; then + : +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + + for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb +do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h> +" +if test "x$ac_cv_have_decl__snprintf" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SNPRINTF $ac_have_decl +_ACEOF + + + + + + fi + + + for ac_func in vasprintf +do + ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" +if test "x$ac_cv_func_vasprintf" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_VASPRINTF 1 +_ACEOF + +fi +done + + if test $ac_cv_func_vasprintf = no; then + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS vasprintf.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS asprintf.$ac_objext" + + + if test $ac_cv_func_vasprintf = yes; then + REPLACE_VASPRINTF=1 + else + HAVE_VASPRINTF=0 + fi + + + + + + + + + fi + + + + GNULIB_VASPRINTF=1 + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=asprintf:2:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=vasprintf:2:c-format" + + + + + + + + + + + + + + + + + gl_cv_func_vasprintf_posix=no + for ac_func in vasprintf +do + ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" +if test "x$ac_cv_func_vasprintf" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_VASPRINTF 1 +_ACEOF + +fi +done + + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + if test $ac_cv_func_vasprintf = yes; then + # vasprintf exists and is + # already POSIX compliant. + gl_cv_func_vasprintf_posix=yes + fi + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vasprintf_posix = no; then + + + case "$gl_cv_func_printf_long_double" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h + + for ac_func in nl_langinfo +do + ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" +if test "x$ac_cv_func_nl_langinfo" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_NL_LANGINFO 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h + + +$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h + + ;; + esac + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS vasnprintf.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS printf-args.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS printf-parse.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS asnprintf.$ac_objext" + + if test $ac_cv_func_vasnprintf = yes; then + +$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h + + fi + + + + + + + + + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = x""yes; then + : +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + + + + + + + + for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb +do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h> +" +if test "x$ac_cv_have_decl__snprintf" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SNPRINTF $ac_have_decl +_ACEOF + + + + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS vasprintf.$ac_objext" + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS asprintf.$ac_objext" + + + if test $ac_cv_func_vasprintf = yes; then + REPLACE_VASPRINTF=1 + else + HAVE_VASPRINTF=0 + fi + + + + + + + + + fi + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=verror:3:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=verror_at_line:5:c-format" + + + + for ac_func in waitid +do + ac_fn_c_check_func "$LINENO" "waitid" "ac_cv_func_waitid" +if test "x$ac_cv_func_waitid" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_WAITID 1 +_ACEOF + +fi +done + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> is standalone" >&5 +$as_echo_n "checking whether <wchar.h> is standalone... " >&6; } +if test "${gl_cv_header_wchar_h_standalone+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <wchar.h> +wchar_t w; +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_header_wchar_h_standalone=yes +else + gl_cv_header_wchar_h_standalone=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_standalone" >&5 +$as_echo "$gl_cv_header_wchar_h_standalone" >&6; } + + + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + + + if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != yes; then + WCHAR_H=wchar.h + fi + + + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_wchar_h='<'wchar.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5 +$as_echo_n "checking absolute name of <wchar.h>... " >&6; } +if test "${gl_cv_next_wchar_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_wchar_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <wchar.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/wchar.h#{ + s#.*"\(.*/wchar.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_wchar_h='<'wchar.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5 +$as_echo "$gl_cv_next_wchar_h" >&6; } + fi + NEXT_WCHAR_H=$gl_cv_next_wchar_h + + + + + + + + + + if test $ac_cv_func_wcrtomb = no; then + HAVE_WCRTOMB=0 + else + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb return value is correct" >&5 +$as_echo_n "checking whether wcrtomb return value is correct... " >&6; } +if test "${gl_cv_func_wcrtomb_retval+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on OSF/1 and Solaris. + osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wcrtomb_retval="guessing yes" ;; + esac + if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdio.h> +#include <string.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_wcrtomb_retval=yes +else + gl_cv_func_wcrtomb_retval=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_retval" >&5 +$as_echo "$gl_cv_func_wcrtomb_retval" >&6; } + case "$gl_cv_func_wcrtomb_retval" in + *yes) ;; + *) REPLACE_WCRTOMB=1 ;; + esac + fi + if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then + + + WCHAR_H=wchar.h + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS wcrtomb.$ac_objext" + + + : + + fi + + + + GNULIB_WCRTOMB=1 + + + + + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + + + + + + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + + + WCTYPE_H=wctype.h + if test $ac_cv_header_wctype_h = yes; then + if test $ac_cv_func_iswcntrl = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5 +$as_echo_n "checking whether iswcntrl works... " >&6; } +if test "${gl_cv_func_iswcntrl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gl_cv_func_iswcntrl_works=yes +else + gl_cv_func_iswcntrl_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + #include <stdio.h> + #include <time.h> + #include <wchar.h> + #include <wctype.h> + int main () { return iswprint ('x') == 0; } +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_iswcntrl_works=yes +else + gl_cv_func_iswcntrl_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5 +$as_echo "$gl_cv_func_iswcntrl_works" >&6; } + if test $gl_cv_func_iswcntrl_works = yes; then + WCTYPE_H= + fi + fi + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_wctype_h='<'wctype.h'>' + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5 +$as_echo_n "checking absolute name of <wctype.h>... " >&6; } +if test "${gl_cv_next_wctype_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_wctype_h = yes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <wctype.h> + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/wctype.h#{ + s#.*"\(.*/wctype.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_wctype_h='<'wctype.h'>' + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5 +$as_echo "$gl_cv_next_wctype_h" >&6; } + fi + NEXT_WCTYPE_H=$gl_cv_next_wctype_h + + + + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + + + + if test "$gl_cv_func_iswcntrl_works" = no; then + REPLACE_ISWCNTRL=1 + else + REPLACE_ISWCNTRL=0 + fi + + + + + + + + + + + + M4_LIBOBJS="$M4_LIBOBJS xmalloc.$ac_objext" + + + + + : + + + : + + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=xprintf:1:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=xvprintf:1:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=xfprintf:2:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=xvfprintf:2:c-format" + + + + + for ac_header in stdint.h +do + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + + + + : + + + + + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=xasprintf:1:c-format" + + + + + + + + + + + gltests_libdeps= + gltests_ltlibdeps= + + + + + + + + + + gl_source_base='tests' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 +$as_echo_n "checking where to find the exponent in a 'double'... " >&6; } +if test "${gl_cv_cc_double_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "mixed_endianness" >/dev/null 2>&1; then + gl_cv_cc_double_expbit0="unknown" +else + + : +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> + #include <sys/param.h> + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +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 + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi +fi +: + case $ac_cv_c_bigendian in #( + yes) + gl_cv_cc_double_expbit0="word 0 bit 20";; #( + no) + gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + gl_cv_cc_double_expbit0="unknown" ;; + esac + + +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_double_expbit0=`cat conftest.out` +else + gl_cv_cc_double_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 +$as_echo "$gl_cv_cc_double_expbit0" >&6; } + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 +$as_echo_n "checking where to find the exponent in a 'float'... " >&6; } +if test "${gl_cv_cc_float_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_cc_float_expbit0="word 0 bit 23" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_float_expbit0=`cat conftest.out` +else + gl_cv_cc_float_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 +$as_echo "$gl_cv_cc_float_expbit0" >&6; } + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 +$as_echo_n "checking where to find the exponent in a 'long double'... " >&6; } +if test "${gl_cv_cc_long_double_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_long_double_expbit0="unknown" + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <float.h> +#include <stddef.h> +#include <stdio.h> +#include <string.h> +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (long double x) +{ + memory_long_double m; + size_t i; + /* Clear it first, in case + sizeof (long double) < sizeof (memory_long_double). */ + memset (&m, 0, sizeof (memory_long_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25L); + add_to_ored_words (0.5L); + add_to_ored_words (1.0L); + add_to_ored_words (2.0L); + add_to_ored_words (4.0L); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_cc_long_double_expbit0=`cat conftest.out` +else + gl_cv_cc_long_double_expbit0="unknown" +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + rm -f conftest.out + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5 +$as_echo "$gl_cv_cc_long_double_expbit0" >&6; } + case "$gl_cv_cc_long_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if test "${gt_cv_locale_ja+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if test "${gt_cv_locale_zh_CN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +[ + #if defined _MSC_VER || defined __MINGW32__ + notposix + #endif + ] +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "notposix" >/dev/null 2>&1; then + posix_spawn_ported=no +else + posix_spawn_ported=yes +fi +rm -f conftest* + + if test $posix_spawn_ported = yes; then + POSIX_SPAWN_PORTED_TRUE= + POSIX_SPAWN_PORTED_FALSE='#' +else + POSIX_SPAWN_PORTED_TRUE='#' + POSIX_SPAWN_PORTED_FALSE= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + if test $ac_cv_func_setenv = no; then + HAVE_SETENV=0 + + + + + + + + + M4tests_LIBOBJS="$M4tests_LIBOBJS setenv.$ac_objext" + + + + + + for ac_header in search.h +do + ac_fn_c_check_header_mongrel "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default" +if test "x$ac_cv_header_search_h" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SEARCH_H 1 +_ACEOF + +fi + +done + + for ac_func in tsearch +do + ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" +if test "x$ac_cv_func_tsearch" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_TSEARCH 1 +_ACEOF + +fi +done + + + fi + + + + GNULIB_SETENV=1 + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if test "${gt_cv_c_wchar_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stddef.h> + wchar_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gt_cv_c_wchar_t=yes +else + gt_cv_c_wchar_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 +$as_echo "$gt_cv_c_wchar_t" >&6; } + if test $gt_cv_c_wchar_t = yes; then + +$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if test "${gt_cv_c_wint_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + wint_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gt_cv_c_wint_t=yes +else + gt_cv_c_wint_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 +$as_echo "$gt_cv_c_wint_t" >&6; } + if test $gt_cv_c_wint_t = yes; then + +$as_echo "#define HAVE_WINT_T 1" >>confdefs.h + + fi + + + + + for ac_func in unsetenv +do + ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" +if test "x$ac_cv_func_unsetenv" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_UNSETENV 1 +_ACEOF + +fi +done + + if test $ac_cv_func_unsetenv = no; then + HAVE_UNSETENV=0 + + + + + + + + + M4tests_LIBOBJS="$M4tests_LIBOBJS unsetenv.$ac_objext" + + + + + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5 +$as_echo_n "checking for unsetenv() return type... " >&6; } +if test "${gt_cv_func_unsetenv_ret+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +int unsetenv (const char *name); +#else +int unsetenv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then + gt_cv_func_unsetenv_ret='int' +else + gt_cv_func_unsetenv_ret='void' +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_unsetenv_ret" >&5 +$as_echo "$gt_cv_func_unsetenv_ret" >&6; } + if test $gt_cv_func_unsetenv_ret = 'void'; then + VOID_UNSETENV=1 + fi + fi + + + + GNULIB_UNSETENV=1 + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if test "${gt_cv_locale_ja+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if test "${gt_cv_locale_zh_CN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <stdlib.h> +#include <time.h> +#if HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif +#include <stdlib.h> +#include <string.h> +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} + +_ACEOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + + + + + + + if test $ac_cv_func_wctob = no; then + HAVE_DECL_WCTOB=0 + + + WCHAR_H=wchar.h + + + + + + + + + + M4tests_LIBOBJS="$M4tests_LIBOBJS wctob.$ac_objext" + + + : + + else + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wctob works" >&5 +$as_echo_n "checking whether wctob works... " >&6; } +if test "${gl_cv_func_wctob_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris <= 9. + solaris2.[1-9] | solaris2.[1-9].*) + gl_cv_func_wctob_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wctob_works="guessing yes" ;; + esac + if test $LOCALE_FR != none; then + if test "$cross_compiling" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run test program while cross compiling +See \`config.log' for more details." "$LINENO" 5; } +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <locale.h> +#include <string.h> +#include <wchar.h> +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + wchar_t wc; + + if (mbtowc (&wc, "\374", 1) == 1) + if (wctob (wc) != (unsigned char) '\374') + return 1; + } + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + gl_cv_func_wctob_works=yes +else + gl_cv_func_wctob_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wctob_works" >&5 +$as_echo "$gl_cv_func_wctob_works" >&6; } + case "$gl_cv_func_wctob_works" in + *yes) ;; + *) REPLACE_WCTOB=1 ;; + esac + if test $REPLACE_WCTOB = 1; then + + + WCHAR_H=wchar.h + + + + + + + + + + M4tests_LIBOBJS="$M4tests_LIBOBJS wctob.$ac_objext" + + + : + + else + + ac_fn_c_check_decl "$LINENO" "wctob" "ac_cv_have_decl_wctob" " +/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before + <wchar.h>. + BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included + before <wchar.h>. */ +#include <stddef.h> +#include <stdio.h> +#include <time.h> +#include <wchar.h> + +" +if test "x$ac_cv_have_decl_wctob" = x""yes; then + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCTOB $ac_have_decl +_ACEOF + + if test $ac_cv_have_decl_wctob != yes; then + HAVE_DECL_WCTOB=0 + + + WCHAR_H=wchar.h + + fi + fi + fi + + + + GNULIB_WCTOB=1 + + + + + + + + + + + LIBM4_LIBDEPS="$gl_libdeps" + + LIBM4_LTLIBDEPS="$gl_ltlibdeps" + + LIBTESTS_LIBDEPS="$gltests_libdeps" + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether an open file can be renamed" >&5 +$as_echo_n "checking whether an open file can be renamed... " >&6; } +if test "${M4_cv_func_rename_open_file_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + M4_cv_func_rename_open_file_works='guessing no' +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +FILE *f = fopen ("conftest.1", "w+"); + int result = rename ("conftest.1", "conftest.2"); + fclose (f); remove ("conftest.1"); remove ("conftest.2"); + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then + M4_cv_func_rename_open_file_works=yes +else + M4_cv_func_rename_open_file_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4_cv_func_rename_open_file_works" >&5 +$as_echo "$M4_cv_func_rename_open_file_works" >&6; } +if test "$M4_cv_func_rename_open_file_works" = yes ; then + M4_rename_open_works=1 +else + M4_rename_open_works=0 +fi + +cat >>confdefs.h <<_ACEOF +#define RENAME_OPEN_FILE_WORKS $M4_rename_open_works +_ACEOF + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if changeword is wanted" >&5 +$as_echo_n "checking if changeword is wanted... " >&6; } +# Check whether --enable-changeword was given. +if test "${enable_changeword+set}" = set; then + enableval=$enable_changeword; if test "$enableval" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define ENABLE_CHANGEWORD 1" >>confdefs.h + + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which shell to use for syscmd" >&5 +$as_echo_n "checking which shell to use for syscmd... " >&6; } + +# Check whether --with-syscmd-shell was given. +if test "${with_syscmd_shell+set}" = set; then + withval=$with_syscmd_shell; case $withval in + yes) with_syscmd_shell=no;; + esac +else + with_syscmd_shell=no +fi + +if test "$with_syscmd_shell" = no ; then + with_syscmd_shell=/bin/sh + if test "$cross_compiling" != yes ; then + if { test -f /bin/sh && $as_test_x /bin/sh; }; then + : +else + if (cmd /c) 2>/dev/null; then with_syscmd_shell=cmd; fi +fi + M4_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for M4_dir in `if (command -p getconf PATH) 2>/dev/null ; then + command -p getconf PATH + else + echo "/bin$PATH_SEPARATOR$PATH" + fi` + do + IFS=$M4_save_IFS + test -z "$M4_dir" && continue + { test -f "$M4_dir/sh" && $as_test_x "$M4_dir/sh"; } \ + && { with_syscmd_shell=$M4_dir/sh; break; } + done + IFS=$M4_save_IFS + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_syscmd_shell" >&5 +$as_echo "$with_syscmd_shell" >&6; } + +cat >>confdefs.h <<_ACEOF +#define SYSCMD_SHELL "$with_syscmd_shell" +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted" >&5 +$as_echo_n "checking if malloc debugging is wanted... " >&6; } + +# Check whether --with-dmalloc was given. +if test "${with_dmalloc+set}" = set; then + withval=$with_dmalloc; if test "$withval" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +$as_echo "#define WITH_DMALLOC 1" >>confdefs.h + + LIBS="$LIBS -ldmalloc" + LDFLAGS="$LDFLAGS -g" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +ac_config_commands="$ac_config_commands stamp-h" + + +ac_config_files="$ac_config_files Makefile doc/Makefile lib/Makefile src/Makefile tests/Makefile checks/Makefile examples/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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+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" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_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=`$as_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. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then + as_fn_error "conditional \"GL_COND_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS= + + + + M4_libobjs= + M4_ltlibobjs= + if test -n "$M4_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $M4_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do + M4_libobjs="$M4_libobjs $i.$ac_objext" + M4_ltlibobjs="$M4_ltlibobjs $i.lo" + done + fi + M4_LIBOBJS=$M4_libobjs + + M4_LTLIBOBJS=$M4_ltlibobjs + + + +if test -z "${POSIX_SPAWN_PORTED_TRUE}" && test -z "${POSIX_SPAWN_PORTED_FALSE}"; then + as_fn_error "conditional \"POSIX_SPAWN_PORTED\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + + M4tests_libobjs= + M4tests_ltlibobjs= + if test -n "$M4tests_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $M4tests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do + M4tests_libobjs="$M4tests_libobjs $i.$ac_objext" + M4tests_ltlibobjs="$M4tests_ltlibobjs $i.lo" + done + fi + M4tests_LIBOBJS=$M4tests_libobjs + + M4tests_LTLIBOBJS=$M4tests_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) set -o posix ;; #( + *) : ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit [STATUS=$?] +# ---------------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + as_status=$? + set +e + as_fn_set_status ${1-$as_status} + exit ${1-$as_status} +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +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 + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by GNU M4 $as_me 1.4.13, which was +generated by GNU Autoconf 2.63b. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_links="$ac_config_links" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration links: +$config_links + +Configuration commands: +$config_commands + +Report bugs to <bug-m4@gnu.org>. +GNU M4 home page: <http://www.gnu.org/software/m4/>. +General help using GNU software: <http://www.gnu.org/gethelp/>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +GNU M4 config.status 1.4.13 +configured by $0, generated by GNU Autoconf 2.63b, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2009 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$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 ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +GNUmakefile=$GNUmakefile + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "lib/config.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/config.h:lib/config.hin" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;; + "stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "checks/Makefile") CONFIG_FILES="$CONFIG_FILES checks/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' <conf$$subs.awk | sed ' +/^[^""]/{ + N + s/\n// +} +' >>$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(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 || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_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 \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + :L) + # + # CONFIG_LINK + # + + if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then + : + else + # Prefer the file from the source tree if names are identical. + if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then + ac_source=$srcdir/$ac_source + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 +$as_echo "$as_me: linking $ac_source to $ac_file" >&6;} + + if test ! -r "$ac_source"; then + as_fn_error "$ac_source: file not found" "$LINENO" 5 + fi + rm -f "$ac_file" + + # Try a relative symlink, then a hard link, then a copy. + case $srcdir in + [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; + *) ac_rel_source=$ac_top_build_prefix$ac_source ;; + esac + ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || + ln "$ac_source" "$ac_file" 2>/dev/null || + cp -p "$ac_source" "$ac_file" || + as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 + fi + ;; + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "stamp-h":C) test -z "$CONFIG_HEADERS" || date > stamp-h ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/coreseek/m4-1.4.13/configure.ac b/coreseek/m4-1.4.13/configure.ac new file mode 100644 index 0000000..1a3acae --- /dev/null +++ b/coreseek/m4-1.4.13/configure.ac @@ -0,0 +1,131 @@ +# Configure template for GNU M4. -*-Autoconf-*- +# Copyright (C) 1991, 1993, 1994, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. +# +# This file is part of GNU M4. +# +# GNU M4 is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GNU M4 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +AC_PREREQ([2.60]) +AC_INIT([GNU M4], m4_esyscmd([build-aux/git-version-gen .tarball-version]), + [bug-m4@gnu.org]) +AC_CONFIG_AUX_DIR([build-aux]) + +AM_INIT_AUTOMAKE([1.10.1 dist-bzip2 gnu]) + +m4_pattern_forbid([^M4_[A-Z]]) + +AC_CONFIG_SRCDIR([src/m4.h]) +AC_CONFIG_HEADERS([lib/config.h:lib/config.hin]) + +AC_PROG_CC +M4_EARLY + +# M4 is single-threaded; so we can optimize gnulib code by using this: +gl_DISABLE_THREADS + +# Tandem/NSK is broken - it has 'long long int' but not +# 'unsigned long long int', which confuses assumptions made by gnulib. +# Simply pretend that neither type exists if both do not work. +AC_TYPE_LONG_LONG_INT +AC_TYPE_UNSIGNED_LONG_LONG_INT +if test $ac_cv_type_long_long_int:$ac_cv_type_unsigned_long_long_int = yes:no +then + ac_cv_type_long_long_int=no + AC_DEFINE([HAVE_LONG_LONG_INT], 0, + [Define to 1 if the system has the type `long long int'.]) +fi + +M4_INIT + +AC_CACHE_CHECK([whether an open file can be renamed], + [M4_cv_func_rename_open_file_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], + [FILE *f = fopen ("conftest.1", "w+"); + int result = rename ("conftest.1", "conftest.2"); + fclose (f); remove ("conftest.1"); remove ("conftest.2"); + return result;])], + [M4_cv_func_rename_open_file_works=yes], + [M4_cv_func_rename_open_file_works=no], + [M4_cv_func_rename_open_file_works='guessing no'])]) +if test "$M4_cv_func_rename_open_file_works" = yes ; then + M4_rename_open_works=1 +else + M4_rename_open_works=0 +fi +AC_DEFINE_UNQUOTED([RENAME_OPEN_FILE_WORKS], [$M4_rename_open_works], + [Define to 1 if a file can be renamed while open, or to 0 if not.]) + +dnl Don't let changeword get in our way, if bootstrapping with a version of +dnl m4 that already turned the feature on. +m4_ifdef([changeword], [m4_undefine([changeword])])dnl + +AC_MSG_CHECKING([[if changeword is wanted]]) +AC_ARG_ENABLE([changeword], + [AS_HELP_STRING([--enable-changeword], + [enable -W and changeword() builtin])], + [if test "$enableval" = yes; then + AC_MSG_RESULT([yes]) + AC_DEFINE([ENABLE_CHANGEWORD], [1], + [Define to 1 if the changeword(REGEXP) functionality is wanted]) + else + AC_MSG_RESULT([no]) + fi], [AC_MSG_RESULT([no])]) + +AC_MSG_CHECKING([[which shell to use for syscmd]]) +AC_ARG_WITH([syscmd-shell], + [AS_HELP_STRING([--with-syscmd-shell], [shell used by syscmd [/bin/sh]])], + [case $withval in + yes[)] with_syscmd_shell=no;; + esac], [with_syscmd_shell=no]) +if test "$with_syscmd_shell" = no ; then + with_syscmd_shell=/bin/sh + if test "$cross_compiling" != yes ; then +dnl Give mingw a default that is more likely to be available. + AS_IF([AS_EXECUTABLE_P([/bin/sh])], [], + [if (cmd /c) 2>/dev/null; then with_syscmd_shell=cmd; fi]) +dnl Too bad _AS_PATH_WALK is not public. + M4_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for M4_dir in `if (command -p getconf PATH) 2>/dev/null ; then + command -p getconf PATH + else + echo "/bin$PATH_SEPARATOR$PATH" + fi` + do + IFS=$M4_save_IFS + test -z "$M4_dir" && continue + AS_EXECUTABLE_P(["$M4_dir/sh"]) \ + && { with_syscmd_shell=$M4_dir/sh; break; } + done + IFS=$M4_save_IFS + fi +fi +AC_MSG_RESULT([$with_syscmd_shell]) +AC_DEFINE_UNQUOTED([SYSCMD_SHELL], ["$with_syscmd_shell"], + [Shell used by syscmd and esyscmd, must accept -c argument.]) + +M4_WITH_DMALLOC + +AC_CONFIG_COMMANDS([stamp-h], [[test -z "$CONFIG_HEADERS" || date > stamp-h]]) + +AC_CONFIG_FILES([Makefile + doc/Makefile + lib/Makefile + src/Makefile + tests/Makefile + checks/Makefile + examples/Makefile +]) + +AC_OUTPUT diff --git a/coreseek/m4-1.4.13/doc/Makefile b/coreseek/m4-1.4.13/doc/Makefile new file mode 100644 index 0000000..0911713 --- /dev/null +++ b/coreseek/m4-1.4.13/doc/Makefile @@ -0,0 +1,1211 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# doc/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/m4 +pkgincludedir = $(includedir)/m4 +pkglibdir = $(libdir)/m4 +pkglibexecdir = $(libexecdir)/m4 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +subdir = doc +DIST_COMMON = $(m4_TEXINFOS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/stamp-vti \ + $(srcdir)/version.texi +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +INFO_DEPS = $(srcdir)/m4.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = m4.dvi +PDFS = m4.pdf +PSS = m4.ps +HTMLS = m4.html +TEXINFOS = m4.texinfo +TEXI2DVI = texi2dvi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run aclocal-1.10b +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run tar +APPLE_UNIVERSAL_BUILD = 0 +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run automake-1.10b +AWK = gawk +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FCNTL_H = fcntl.h +FLOAT_H = +GETOPT_H = +GLIBC21 = yes +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP2 = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCLOSE = 0 +GNULIB_FFLUSH = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FOPEN = 1 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPL = 1 +GNULIB_FSEEK = 0 +GNULIB_FSEEKO = 1 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 0 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FWRITE = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 0 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 0 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETSUBOPT = 0 +GNULIB_GETUSERSHELL = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MATHL = 0 +GNULIB_MBRLEN = 0 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDTEMP = 1 +GNULIB_MKSTEMP = 1 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_PERROR = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_RANDOM_R = 0 +GNULIB_RAWMEMCHR = 1 +GNULIB_READLINK = 0 +GNULIB_REALLOC_POSIX = 0 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SETENV = 1 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 1 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 0 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 0 +GNULIB_STRERROR = 1 +GNULIB_STRNDUP = 1 +GNULIB_STRNLEN = 1 +GNULIB_STRPBRK = 0 +GNULIB_STRSEP = 0 +GNULIB_STRSIGNAL = 1 +GNULIB_STRSTR = 1 +GNULIB_STRTOD = 1 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRVERSCMP = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNSETENV = 1 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCTOB = 1 +GNULIB_WCWIDTH = 0 +GNULIB_WRITE = 0 +GREP = /bin/grep +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_CALLOC_POSIX = 1 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_EUIDACCESS = 1 +HAVE_FSEEKO = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_GETDOMAINNAME = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETUSERSHELL = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWCNTRL = 1 +HAVE_LCHMOD = 1 +HAVE_LINK = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MALLOC_POSIX = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDTEMP = 1 +HAVE_OS_H = 0 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_REALLOC_POSIX = 1 +HAVE_RPMATCH = 1 +HAVE_SCHED_H = +HAVE_SETENV = 1 +HAVE_SIGACTION = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRNDUP = 1 +HAVE_STRPBRK = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYS_BITYPES_H = +HAVE_SYS_INTTYPES_H = +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_UNISTD_H = 1 +HAVE_UNSETENV = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCTYPE_H = 1 +HAVE_WINT_T = 1 +HAVE__BOOL = 1 +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBCSTACK = +LIBINTL = +LIBM4_LIBDEPS = +LIBM4_LTLIBDEPS = +LIBMULTITHREAD = +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBS = +LIBSIGSEGV = +LIBTESTS_LIBDEPS = +LIBTHREAD = +LOCALCHARSET_TESTS_ENVIRONMENT = CHARSETALIASDIR="$(top_builddir)/lib" +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTLIBCSTACK = +LTLIBINTL = +LTLIBMULTITHREAD = +LTLIBOBJS = +LTLIBPTH = +LTLIBSIGSEGV = +LTLIBTHREAD = +M4_LIBOBJS = asnprintf.o asprintf.o basename.o cloexec.o close-stream.o closein.o closeout.o dirname.o dup-safer.o exitfail.o fd-safer.o fflush.o filenamecat.o fopen-safer.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnprintf.o vasprintf.o xmalloc.o +M4_LTLIBOBJS = asnprintf.lo asprintf.lo basename.lo cloexec.lo close-stream.lo closein.lo closeout.lo dirname.lo dup-safer.lo exitfail.lo fd-safer.lo fflush.lo filenamecat.lo fopen-safer.lo fseeko.lo isnanl.lo mkstemp-safer.lo pipe-safer.lo printf-args.lo printf-parse.lo quotearg.lo regex.lo stripslash.lo strstr.lo tempname.lo vasnprintf.lo vasprintf.lo xmalloc.lo +M4tests_LIBOBJS = +M4tests_LTLIBOBJS = +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NEXT_ERRNO_H = +NEXT_FCNTL_H = <fcntl.h> +NEXT_FLOAT_H = +NEXT_MATH_H = <math.h> +NEXT_SCHED_H = +NEXT_SIGNAL_H = <signal.h> +NEXT_SPAWN_H = <spawn.h> +NEXT_STDARG_H = <stdarg.h> +NEXT_STDINT_H = <stdint.h> +NEXT_STDIO_H = <stdio.h> +NEXT_STDLIB_H = <stdlib.h> +NEXT_STRING_H = <string.h> +NEXT_SYS_STAT_H = <sys/stat.h> +NEXT_SYS_TIME_H = <sys/time.h> +NEXT_SYS_WAIT_H = <sys/wait.h> +NEXT_UNISTD_H = <unistd.h> +NEXT_WCHAR_H = <wchar.h> +NEXT_WCTYPE_H = <wctype.h> +OBJEXT = o +PACKAGE = m4 +PACKAGE_BUGREPORT = bug-m4@gnu.org +PACKAGE_NAME = GNU M4 +PACKAGE_STRING = GNU M4 1.4.13 +PACKAGE_TARNAME = m4 +PACKAGE_URL = http://www.gnu.org/software/m4/ +PACKAGE_VERSION = 1.4.13 +PATH_SEPARATOR = : +POW_LIB = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_BTOWC = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_DPRINTF = 0 +REPLACE_FCHDIR = 0 +REPLACE_FCLOSE = 0 +REPLACE_FFLUSH = 1 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 1 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_GETCWD = 0 +REPLACE_GETLINE = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MBRLEN = 0 +REPLACE_MBRTOWC = 0 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKSTEMP = 0 +REPLACE_NAN = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_PERROR = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_PRINTF = 0 +REPLACE_PUTENV = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 1 +REPLACE_STRTOD = 0 +REPLACE_TRUNCL = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 0 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCTOB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SET_MAKE = +SHELL = /bin/bash +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +SPAWN_H = +STDARG_H = +STDBOOL_H = +STDINT_H = +STRIP = +SYS_STAT_H = sys/stat.h +SYS_TIME_H = +SYS_WAIT_H = sys/wait.h +UNISTD_H_HAVE_WINSOCK2_H = 0 +VERSION = 1.4.13 +VOID_UNSETENV = 0 +WCHAR_H = +WCHAR_T_SUFFIX = +WCTYPE_H = +WINT_T_SUFFIX = +abs_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/doc +abs_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/doc +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +info_TEXINFOS = m4.texinfo +m4_TEXINFOS = fdl-1.3.texi gpl-3.0.texi +man_MANS = $(srcdir)/m4.1 +EXTRA_DIST = $(man_MANS) gendocs_template +MAINTAINERCLEANFILES = $(man_MANS) gendocs_template +SUFFIXES = .1 +HELP2MAN = $(SHELL) $(top_srcdir)/build-aux/missing --run help2man +all: all-am + +.SUFFIXES: +.SUFFIXES: .1 .dvi .html .info .pdf .ps .texinfo +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --silent-rules doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --silent-rules doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +.texinfo.info: + restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +.texinfo.dvi: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) $< + +.texinfo.pdf: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) $< + +.texinfo.html: + rm -rf $(@:.html=.htp) + if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi +$(srcdir)/m4.info: m4.texinfo $(srcdir)/version.texi $(m4_TEXINFOS) +m4.dvi: m4.texinfo $(srcdir)/version.texi $(m4_TEXINFOS) +m4.pdf: m4.texinfo $(srcdir)/version.texi $(m4_TEXINFOS) +m4.html: m4.texinfo $(srcdir)/version.texi $(m4_TEXINFOS) +$(srcdir)/version.texi: $(srcdir)/stamp-vti +$(srcdir)/stamp-vti: m4.texinfo $(top_srcdir)/configure + @(dir=.; test -f ./m4.texinfo || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/m4.texinfo`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp + @cmp -s vti.tmp $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi"; \ + cp vti.tmp $(srcdir)/version.texi) + -@rm -f vti.tmp + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +.dvi.ps: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && \ + (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf m4.aux m4.cp m4.cps m4.fn m4.fns m4.ky m4.kys m4.log m4.pg m4.pgs \ + m4.tmp m4.toc m4.tp m4.tps m4.vr m4.vrs m4.dvi m4.pdf m4.ps \ + m4.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info +check-am: all-am +check: check-am +all-am: Makefile $(INFO_DEPS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-info-am install-man + +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done +install-exec-am: + +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d$$p"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + echo "$$ifile"; \ + else : ; fi; \ + done; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + @$(POST_INSTALL) + @if (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-man uninstall-pdf-am uninstall-ps-am + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic dist-info \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti mostlyclean \ + mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dvi-am \ + uninstall-html-am uninstall-info-am uninstall-man \ + uninstall-man1 uninstall-pdf-am uninstall-ps-am + + +# Depend on ../.version for version, m4.c for usage text. Do not depend on +# built m4 executable, since not everyone has help2man or perl. +# Build the man page once in the srcdir, rather than in every VPATH build +# dir, to match how automake builds info pages. This is safe for 'make +# distcheck' since it is distributed pre-built. +$(srcdir)/m4.1: $(top_srcdir)/.version $(top_srcdir)/src/m4.c + @if test -x ../src/m4$(EXEEXT) ; then \ + echo "Updating man page m4.1" ; \ + $(HELP2MAN) --name="macro processor" --source='$(PACKAGE_STRING)' \ + --info-page=m4 --output=$@ ../src/m4$(EXEEXT) ; \ + else \ + echo "WARNING: The \`man' page \`$@' cannot be updated yet."; \ + echo " Retry once the program executable is ready."; \ + fi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/doc/Makefile.am b/coreseek/m4-1.4.13/doc/Makefile.am new file mode 100644 index 0000000..94461f0 --- /dev/null +++ b/coreseek/m4-1.4.13/doc/Makefile.am @@ -0,0 +1,43 @@ +## Makefile.am - template for generating Makefile via Automake +## +## Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. +## +## This file is part of GNU M4. +## +## GNU M4 is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## GNU M4 is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see <http://www.gnu.org/licenses/>. +## +## This file written by Eric Blake <ebb9@byu.net> + +info_TEXINFOS = m4.texinfo +m4_TEXINFOS = fdl-1.3.texi gpl-3.0.texi +man_MANS = $(srcdir)/m4.1 +EXTRA_DIST = $(man_MANS) gendocs_template +MAINTAINERCLEANFILES = $(man_MANS) gendocs_template +SUFFIXES = .1 +HELP2MAN = $(SHELL) $(top_srcdir)/build-aux/missing --run help2man + +# Depend on ../.version for version, m4.c for usage text. Do not depend on +# built m4 executable, since not everyone has help2man or perl. +# Build the man page once in the srcdir, rather than in every VPATH build +# dir, to match how automake builds info pages. This is safe for 'make +# distcheck' since it is distributed pre-built. +$(srcdir)/m4.1: $(top_srcdir)/.version $(top_srcdir)/src/m4.c + @if test -x ../src/m4$(EXEEXT) ; then \ + echo "Updating man page m4.1" ; \ + $(HELP2MAN) --name="macro processor" --source='$(PACKAGE_STRING)' \ + --info-page=m4 --output=$@ ../src/m4$(EXEEXT) ; \ + else \ + echo "WARNING: The \`man' page \`$@' cannot be updated yet."; \ + echo " Retry once the program executable is ready."; \ + fi diff --git a/coreseek/m4-1.4.13/doc/Makefile.in b/coreseek/m4-1.4.13/doc/Makefile.in new file mode 100644 index 0000000..2adb802 --- /dev/null +++ b/coreseek/m4-1.4.13/doc/Makefile.in @@ -0,0 +1,1211 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(m4_TEXINFOS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/stamp-vti \ + $(srcdir)/version.texi +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +INFO_DEPS = $(srcdir)/m4.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = m4.dvi +PDFS = m4.pdf +PSS = m4.ps +HTMLS = m4.html +TEXINFOS = m4.texinfo +TEXI2DVI = texi2dvi +TEXI2PDF = $(TEXI2DVI) --pdf --batch +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +DVIPS = dvips +am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +man1dir = $(mandir)/man1 +NROFF = nroff +MANS = $(man_MANS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FCNTL_H = @FCNTL_H@ +FLOAT_H = @FLOAT_H@ +GETOPT_H = @GETOPT_H@ +GLIBC21 = @GLIBC21@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBINTL = @LIBINTL@ +LIBM4_LIBDEPS = @LIBM4_LIBDEPS@ +LIBM4_LTLIBDEPS = @LIBM4_LTLIBDEPS@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTHREAD = @LIBTHREAD@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +LTLIBTHREAD = @LTLIBTHREAD@ +M4_LIBOBJS = @M4_LIBOBJS@ +M4_LTLIBOBJS = @M4_LTLIBOBJS@ +M4tests_LIBOBJS = @M4tests_LIBOBJS@ +M4tests_LTLIBOBJS = @M4tests_LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +SPAWN_H = @SPAWN_H@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_STAT_H = @SYS_STAT_H@ +SYS_TIME_H = @SYS_TIME_H@ +SYS_WAIT_H = @SYS_WAIT_H@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +info_TEXINFOS = m4.texinfo +m4_TEXINFOS = fdl-1.3.texi gpl-3.0.texi +man_MANS = $(srcdir)/m4.1 +EXTRA_DIST = $(man_MANS) gendocs_template +MAINTAINERCLEANFILES = $(man_MANS) gendocs_template +SUFFIXES = .1 +HELP2MAN = $(SHELL) $(top_srcdir)/build-aux/missing --run help2man +all: all-am + +.SUFFIXES: +.SUFFIXES: .1 .dvi .html .info .pdf .ps .texinfo +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --silent-rules doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --silent-rules doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +.texinfo.info: + restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +.texinfo.dvi: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) $< + +.texinfo.pdf: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) $< + +.texinfo.html: + rm -rf $(@:.html=.htp) + if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi +$(srcdir)/m4.info: m4.texinfo $(srcdir)/version.texi $(m4_TEXINFOS) +m4.dvi: m4.texinfo $(srcdir)/version.texi $(m4_TEXINFOS) +m4.pdf: m4.texinfo $(srcdir)/version.texi $(m4_TEXINFOS) +m4.html: m4.texinfo $(srcdir)/version.texi $(m4_TEXINFOS) +$(srcdir)/version.texi: $(srcdir)/stamp-vti +$(srcdir)/stamp-vti: m4.texinfo $(top_srcdir)/configure + @(dir=.; test -f ./m4.texinfo || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/m4.texinfo`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp + @cmp -s vti.tmp $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi"; \ + cp vti.tmp $(srcdir)/version.texi) + -@rm -f vti.tmp + @cp $(srcdir)/version.texi $@ + +mostlyclean-vti: + -rm -f vti.tmp + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +.dvi.ps: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && \ + (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf m4.aux m4.cp m4.cps m4.fn m4.fns m4.ky m4.kys m4.log m4.pg m4.pgs \ + m4.tmp m4.toc m4.tp m4.tps m4.vr m4.vrs m4.dvi m4.pdf m4.ps \ + m4.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +install-man1: $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ + done; \ + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + +uninstall-man1: + @$(NORMAL_UNINSTALL) + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info +check-am: all-am +check: check-am +all-am: Makefile $(INFO_DEPS) $(MANS) +installdirs: + for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-info-am install-man + +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done +install-exec-am: + +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d$$p"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + echo "$$ifile"; \ + else : ; fi; \ + done; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + @$(POST_INSTALL) + @if (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: install-man1 + +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-man uninstall-pdf-am uninstall-ps-am + +uninstall-man: uninstall-man1 + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic dist-info \ + distclean distclean-generic distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti mostlyclean \ + mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-dvi-am \ + uninstall-html-am uninstall-info-am uninstall-man \ + uninstall-man1 uninstall-pdf-am uninstall-ps-am + + +# Depend on ../.version for version, m4.c for usage text. Do not depend on +# built m4 executable, since not everyone has help2man or perl. +# Build the man page once in the srcdir, rather than in every VPATH build +# dir, to match how automake builds info pages. This is safe for 'make +# distcheck' since it is distributed pre-built. +$(srcdir)/m4.1: $(top_srcdir)/.version $(top_srcdir)/src/m4.c + @if test -x ../src/m4$(EXEEXT) ; then \ + echo "Updating man page m4.1" ; \ + $(HELP2MAN) --name="macro processor" --source='$(PACKAGE_STRING)' \ + --info-page=m4 --output=$@ ../src/m4$(EXEEXT) ; \ + else \ + echo "WARNING: The \`man' page \`$@' cannot be updated yet."; \ + echo " Retry once the program executable is ready."; \ + fi + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/doc/fdl-1.3.texi b/coreseek/m4-1.4.13/doc/fdl-1.3.texi new file mode 100644 index 0000000..8805f1a --- /dev/null +++ b/coreseek/m4-1.4.13/doc/fdl-1.3.texi @@ -0,0 +1,506 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/coreseek/m4-1.4.13/doc/gendocs_template b/coreseek/m4-1.4.13/doc/gendocs_template new file mode 100644 index 0000000..94cecef --- /dev/null +++ b/coreseek/m4-1.4.13/doc/gendocs_template @@ -0,0 +1,98 @@ +<!--#include virtual="/server/header.html" --> +<title>%%TITLE%% - GNU Project - Free Software Foundation (FSF) + +

    %%TITLE%%

    + + + + + + + +
    Free Software Foundation
    +
    last updated %%DATE%%
    + +

    This manual (%%PACKAGE%%) is available in the following formats:

    + + + +

    You can buy printed copies of +some manuals (among other items) from the Free Software Foundation; +this helps support FSF activities.

    + +

    (This page generated by the %%SCRIPTNAME%% +script.)

    + + + + + + + + + + + + + diff --git a/coreseek/m4-1.4.13/doc/gpl-3.0.texi b/coreseek/m4-1.4.13/doc/gpl-3.0.texi new file mode 100644 index 0000000..97a17e1 --- /dev/null +++ b/coreseek/m4-1.4.13/doc/gpl-3.0.texi @@ -0,0 +1,717 @@ +@c The GNU General Public License. +@center Version 3, 29 June 2007 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. +@end display + +@heading Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom +to share and change all versions of a program---to make sure it remains +free software for all its users. We, the Free Software Foundation, +use the GNU General Public License for most of our software; it +applies also to any other work released this way by its authors. You +can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the +software, or if you modify it: responsibilities to respect the freedom +of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, +receive or can get the source code. And you must show them these +terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those +domains in future versions of the GPL, as needed to protect the +freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish +to avoid the special danger that patents applied to a free program +could make it effectively proprietary. To prevent this, the GPL +assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + +@heading TERMS AND CONDITIONS + +@enumerate 0 +@item Definitions. + +``This License'' refers to version 3 of the GNU General Public License. + +``Copyright'' also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +``The Program'' refers to any copyrightable work licensed under this +License. Each licensee is addressed as ``you''. ``Licensees'' and +``recipients'' may be individuals or organizations. + +To ``modify'' a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a ``modified version'' of +the earlier work or a work ``based on'' the earlier work. + +A ``covered work'' means either the unmodified Program or a work based +on the Program. + +To ``propagate'' a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To ``convey'' a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays ``Appropriate Legal Notices'' to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +@item Source Code. + +The ``source code'' for a work means the preferred form of the work for +making modifications to it. ``Object code'' means any non-source form +of a work. + +A ``Standard Interface'' means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The ``System Libraries'' of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +``Major Component'', in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The ``Corresponding Source'' for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +@item Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +@item Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +@item Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +@item Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +@enumerate a +@item +The work must carry prominent notices stating that you modified it, +and giving a relevant date. + +@item +The work must carry prominent notices stating that it is released +under this License and any conditions added under section 7. This +requirement modifies the requirement in section 4 to ``keep intact all +notices''. + +@item +You must license the entire work, as a whole, under this License to +anyone who comes into possession of a copy. This License will +therefore apply, along with any applicable section 7 additional terms, +to the whole of the work, and all its parts, regardless of how they +are packaged. This License gives no permission to license the work in +any other way, but it does not invalidate such permission if you have +separately received it. + +@item +If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your work +need not make them do so. +@end enumerate + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +``aggregate'' if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +@item Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +@enumerate a +@item +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium customarily +used for software interchange. + +@item +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a written +offer, valid for at least three years and valid for as long as you +offer spare parts or customer support for that product model, to give +anyone who possesses the object code either (1) a copy of the +Corresponding Source for all the software in the product that is +covered by this License, on a durable physical medium customarily used +for software interchange, for a price no more than your reasonable +cost of physically performing this conveying of source, or (2) access +to copy the Corresponding Source from a network server at no charge. + +@item +Convey individual copies of the object code with a copy of the written +offer to provide the Corresponding Source. This alternative is +allowed only occasionally and noncommercially, and only if you +received the object code with such an offer, in accord with subsection +6b. + +@item +Convey the object code by offering access from a designated place +(gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to copy +the object code is a network server, the Corresponding Source may be +on a different server (operated by you or a third party) that supports +equivalent copying facilities, provided you maintain clear directions +next to the object code saying where to find the Corresponding Source. +Regardless of what server hosts the Corresponding Source, you remain +obligated to ensure that it is available for as long as needed to +satisfy these requirements. + +@item +Convey the object code using peer-to-peer transmission, provided you +inform other peers where the object code and Corresponding Source of +the work are being offered to the general public at no charge under +subsection 6d. + +@end enumerate + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A ``User Product'' is either (1) a ``consumer product'', which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +``normally used'' refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +``Installation Information'' for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +@item Additional Terms. + +``Additional permissions'' are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +@enumerate a +@item +Disclaiming warranty or limiting liability differently from the terms +of sections 15 and 16 of this License; or + +@item +Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices +displayed by works containing it; or + +@item +Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or + +@item +Limiting the use for publicity purposes of names of licensors or +authors of the material; or + +@item +Declining to grant rights under trademark law for use of some trade +names, trademarks, or service marks; or + +@item +Requiring indemnification of licensors and authors of that material by +anyone who conveys the material (or modified versions of it) with +contractual assumptions of liability to the recipient, for any +liability that these contractual assumptions directly impose on those +licensors and authors. +@end enumerate + +All other non-permissive additional terms are considered ``further +restrictions'' within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +@item Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +@item Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +@item Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An ``entity transaction'' is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +@item Patents. + +A ``contributor'' is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's ``contributor version''. + +A contributor's ``essential patent claims'' are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, ``control'' includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a ``patent license'' is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To ``grant'' such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. ``Knowingly relying'' means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is ``discriminatory'' if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +@item No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey +a covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree +to terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +@item Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +@item Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that numbered version or +of any later version published by the Free Software Foundation. If +the Program does not specify a version number of the GNU General +Public License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +@item Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +@item Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +@item Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +@end enumerate + +@heading END OF TERMS AND CONDITIONS + +@heading How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the ``copyright'' line and a pointer to where the full notice is found. + +@smallexample +@var{one line to give the program's name and a brief 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 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see @url{http://www.gnu.org/licenses/}. +@end smallexample + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + +@smallexample +@var{program} Copyright (C) @var{year} @var{name of author} +This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. +This is free software, and you are welcome to redistribute it +under certain conditions; type @samp{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, your +program's commands might be different; for a GUI interface, you would +use an ``about box''. + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a ``copyright disclaimer'' for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +@url{http://www.gnu.org/licenses/}. + +The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use +the GNU Lesser General Public License instead of this License. But +first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. diff --git a/coreseek/m4-1.4.13/doc/m4.1 b/coreseek/m4-1.4.13/doc/m4.1 new file mode 100644 index 0000000..c278ffb --- /dev/null +++ b/coreseek/m4-1.4.13/doc/m4.1 @@ -0,0 +1,149 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. +.TH M4 "1" "March 2009" "GNU M4 1.4.13" "User Commands" +.SH NAME +m4 \- macro processor +.SH SYNOPSIS +.B m4 +[\fIOPTION\fR]... [\fIFILE\fR]... +.SH DESCRIPTION +Process macros in FILEs. If no FILE or if FILE is `\-', standard input +is read. +.PP +Mandatory or optional arguments to long options are mandatory or optional +for short options too. +.SS "Operation modes:" +.TP +\fB\-\-help\fR +display this help and exit +.TP +\fB\-\-version\fR +output version information and exit +.TP +\fB\-E\fR, \fB\-\-fatal\-warnings\fR +once: warnings become errors, twice: stop +execution at first error +.TP +\fB\-i\fR, \fB\-\-interactive\fR +unbuffer output, ignore interrupts +.TP +\fB\-P\fR, \fB\-\-prefix\-builtins\fR +force a `m4_' prefix to all builtins +.TP +\fB\-Q\fR, \fB\-\-quiet\fR, \fB\-\-silent\fR +suppress some warnings for builtins +.TP +\fB\-\-warn\-macro\-sequence\fR[=\fIREGEXP\fR] +warn if macro definition matches REGEXP, +.IP +default \e$\e({[^}]*}\e|[0\-9][0\-9]+\e) +.SS "Preprocessor features:" +.TP +\fB\-D\fR, \fB\-\-define=NAME\fR[=\fIVALUE\fR] +define NAME as having VALUE, or empty +.TP +\fB\-I\fR, \fB\-\-include\fR=\fIDIRECTORY\fR +append DIRECTORY to include path +.TP +\fB\-s\fR, \fB\-\-synclines\fR +generate `#line NUM "FILE"' lines +.TP +\fB\-U\fR, \fB\-\-undefine\fR=\fINAME\fR +undefine NAME +.SS "Limits control:" +.TP +\fB\-g\fR, \fB\-\-gnu\fR +override \fB\-G\fR to re\-enable GNU extensions +.TP +\fB\-G\fR, \fB\-\-traditional\fR +suppress all GNU extensions +.TP +\fB\-H\fR, \fB\-\-hashsize\fR=\fIPRIME\fR +set symbol lookup hash table size [509] +.TP +\fB\-L\fR, \fB\-\-nesting\-limit\fR=\fINUMBER\fR +change nesting limit, 0 for unlimited [0] +.SS "Frozen state files:" +.TP +\fB\-F\fR, \fB\-\-freeze\-state\fR=\fIFILE\fR +produce a frozen state on FILE at end +.TP +\fB\-R\fR, \fB\-\-reload\-state\fR=\fIFILE\fR +reload a frozen state from FILE at start +.SS "Debugging:" +.TP +\fB\-d\fR, \fB\-\-debug\fR[=\fIFLAGS\fR] +set debug level (no FLAGS implies `aeq') +.TP +\fB\-\-debugfile\fR[=\fIFILE\fR] +redirect debug and trace output to FILE +(default stderr, discard if empty string) +.TP +\fB\-l\fR, \fB\-\-arglength\fR=\fINUM\fR +restrict macro tracing size +.TP +\fB\-t\fR, \fB\-\-trace\fR=\fINAME\fR +trace NAME when it is defined +.SS "FLAGS is any of:" +.TP +a +show actual arguments +.TP +c +show before collect, after collect and after call +.TP +e +show expansion +.TP +f +say current input file name +.TP +i +show changes in input files +.TP +l +say current input line number +.TP +p +show results of path searches +.TP +q +quote values as necessary, with a or e flag +.TP +t +trace for all macro calls, not only traceon'ed +.TP +x +add a unique macro call id, useful with c flag +.TP +V +shorthand for all of the above flags +.PP +If defined, the environment variable `M4PATH' is a colon\-separated list +of directories included after any specified by `\-I'. +.PP +Exit status is 0 for success, 1 for failure, 63 for frozen file version +mismatch, or whatever value was passed to the m4exit macro. +.SH AUTHOR +Written by Rene' Seindal. +.SH "REPORTING BUGS" +Report bugs to . +GNU M4 home page: . +General help using GNU software: . +.SH COPYRIGHT +Copyright \(co 2009 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later . +.br +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +.SH "SEE ALSO" +The full documentation for +.B m4 +is maintained as a Texinfo manual. If the +.B info +and +.B m4 +programs are properly installed at your site, the command +.IP +.B info m4 +.PP +should give you access to the complete manual. diff --git a/coreseek/m4-1.4.13/doc/m4.info b/coreseek/m4-1.4.13/doc/m4.info new file mode 100644 index 0000000..0e24d85 --- /dev/null +++ b/coreseek/m4-1.4.13/doc/m4.info @@ -0,0 +1,135 @@ +This is m4.info, produced by makeinfo version 4.13 from m4.texinfo. + +This manual (5 March 2009) is for GNU M4 (version 1.4.13), a package +containing an implementation of the m4 macro language. + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, +2007, 2008, 2009 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.2 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License." + +INFO-DIR-SECTION Text creation and manipulation +START-INFO-DIR-ENTRY +* M4: (m4). A powerful macro processor. +END-INFO-DIR-ENTRY + + +Indirect: +m4.info-1: 863 +m4.info-2: 300311 + +Tag Table: +(Indirect) +Node: Top863 +Node: Preliminaries9717 +Node: Intro10403 +Node: History12035 +Node: Bugs14838 +Node: Manual16089 +Node: Invoking m419487 +Node: Operation modes21633 +Node: Preprocessor features24605 +Node: Limits control27702 +Node: Frozen state31604 +Node: Debugging options32403 +Node: Command line files34387 +Node: Syntax35960 +Node: Names37079 +Node: Quoted strings37541 +Node: Comments38190 +Node: Other tokens39067 +Node: Input processing39645 +Ref: Input processing-Footnote-147318 +Node: Macros47513 +Node: Invocation48007 +Node: Inhibiting Invocation48808 +Node: Macro Arguments52939 +Node: Quoting Arguments56001 +Node: Macro expansion58124 +Node: Definitions58825 +Node: Define59610 +Node: Arguments62048 +Node: Pseudo Arguments65720 +Node: Undefine69262 +Node: Defn70392 +Node: Pushdef74842 +Node: Indir77468 +Node: Builtin79596 +Node: Conditionals81822 +Node: Ifdef82764 +Node: Ifelse83627 +Node: Shift86945 +Node: Forloop97494 +Node: Foreach100130 +Node: Stacks105618 +Node: Composition108657 +Node: Debugging114597 +Node: Dumpdef115182 +Node: Trace116592 +Node: Debug Levels120165 +Node: Debug Output124869 +Node: Input Control126153 +Node: Dnl126690 +Node: Changequote128591 +Node: Changecom134688 +Node: Changeword138384 +Node: M4wrap143825 +Node: File Inclusion147821 +Node: Include148138 +Node: Search Path150849 +Node: Diversions151766 +Node: Divert153557 +Node: Undivert156083 +Node: Divnum159406 +Node: Cleardivert159870 +Node: Text handling161075 +Node: Len161798 +Node: Index macro162183 +Node: Regexp163056 +Node: Substr165597 +Node: Translit166648 +Node: Patsubst169370 +Node: Format173896 +Node: Arithmetic177089 +Node: Incr177538 +Node: Eval178313 +Node: Shell commands186276 +Node: Platform macros187198 +Node: Syscmd189313 +Node: Esyscmd191593 +Node: Sysval193102 +Node: Mkstemp194720 +Node: Miscellaneous198675 +Node: Errprint199108 +Node: Location200327 +Node: M4exit203101 +Node: Frozen files205188 +Node: Using frozen files205969 +Node: Frozen file format209233 +Node: Compatibility212297 +Node: Extensions213363 +Node: Incompatibilities217230 +Node: Other Incompatibilities226156 +Node: Answers228802 +Node: Improved exch229584 +Node: Improved forloop230122 +Node: Improved foreach235454 +Node: Improved copy248471 +Node: Improved m4wrap252425 +Node: Improved cleardivert254849 +Node: Improved capitalize255830 +Node: Improved fatal_error260692 +Node: Copying This Package261753 +Node: GNU General Public License262232 +Node: Copying This Manual299791 +Node: GNU Free Documentation License300311 +Node: Indices325442 +Node: Macro index325722 +Node: Concept index331959 + +End Tag Table diff --git a/coreseek/m4-1.4.13/doc/m4.info-1 b/coreseek/m4-1.4.13/doc/m4.info-1 new file mode 100644 index 0000000..cb514ab --- /dev/null +++ b/coreseek/m4-1.4.13/doc/m4.info-1 @@ -0,0 +1,7858 @@ +This is m4.info, produced by makeinfo version 4.13 from m4.texinfo. + +This manual (5 March 2009) is for GNU M4 (version 1.4.13), a package +containing an implementation of the m4 macro language. + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, +2007, 2008, 2009 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.2 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License." + +INFO-DIR-SECTION Text creation and manipulation +START-INFO-DIR-ENTRY +* M4: (m4). A powerful macro processor. +END-INFO-DIR-ENTRY + + +File: m4.info, Node: Top, Next: Preliminaries, Up: (dir) + +GNU M4 +****** + +This manual (5 March 2009) is for GNU M4 (version 1.4.13), a package +containing an implementation of the m4 macro language. + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, +2007, 2008, 2009 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.2 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License." + + GNU `m4' is an implementation of the traditional UNIX macro +processor. It is mostly SVR4 compatible, although it has some +extensions (for example, handling more than 9 positional parameters to +macros). `m4' also has builtin functions for including files, running +shell commands, doing arithmetic, etc. Autoconf needs GNU `m4' for +generating `configure' scripts, but not for running them. + + GNU `m4' was originally written by Rene' Seindal, with subsequent +changes by Franc,ois Pinard and other volunteers on the Internet. All +names and email addresses can be found in the files `m4-1.4.13/AUTHORS' +and `m4-1.4.13/THANKS' from the GNU M4 distribution. + + This is release 1.4.13. It is now considered stable: future +releases in the 1.4.x series are only meant to fix bugs, increase speed, +or improve documentation. However... + + An experimental feature, which would improve `m4' usefulness, allows +for changing the syntax for what is a "word" in `m4'. You should use: + ./configure --enable-changeword + if you want this feature compiled in. The current implementation +slows down `m4' considerably and is hardly acceptable. In the future, +`m4' 2.0 will come with a different set of new features that provide +similar capabilities, but without the inefficiencies, so changeword +will go away and _you should not count on it_. + +* Menu: + +* Preliminaries:: Introduction and preliminaries +* Invoking m4:: Invoking `m4' +* Syntax:: Lexical and syntactic conventions + +* Macros:: How to invoke macros +* Definitions:: How to define new macros +* Conditionals:: Conditionals, loops, and recursion + +* Debugging:: How to debug macros and input + +* Input Control:: Input control +* File Inclusion:: File inclusion +* Diversions:: Diverting and undiverting output + +* Text handling:: Macros for text handling +* Arithmetic:: Macros for doing arithmetic +* Shell commands:: Macros for running shell commands +* Miscellaneous:: Miscellaneous builtin macros +* Frozen files:: Fast loading of frozen state + +* Compatibility:: Compatibility with other versions of `m4' +* Answers:: Correct version of some examples + +* Copying This Package:: How to make copies of the overall M4 package +* Copying This Manual:: How to make copies of this manual +* Indices:: Indices of concepts and macros + + --- The Detailed Node Listing --- + +Introduction and preliminaries + +* Intro:: Introduction to `m4' +* History:: Historical references +* Bugs:: Problems and bugs +* Manual:: Using this manual + +Invoking `m4' + +* Operation modes:: Command line options for operation modes +* Preprocessor features:: Command line options for preprocessor features +* Limits control:: Command line options for limits control +* Frozen state:: Command line options for frozen state +* Debugging options:: Command line options for debugging +* Command line files:: Specifying input files on the command line + +Lexical and syntactic conventions + +* Names:: Macro names +* Quoted strings:: Quoting input to `m4' +* Comments:: Comments in `m4' input +* Other tokens:: Other kinds of input tokens +* Input processing:: How `m4' copies input to output + +How to invoke macros + +* Invocation:: Macro invocation +* Inhibiting Invocation:: Preventing macro invocation +* Macro Arguments:: Macro arguments +* Quoting Arguments:: On Quoting Arguments to macros +* Macro expansion:: Expanding macros + +How to define new macros + +* Define:: Defining a new macro +* Arguments:: Arguments to macros +* Pseudo Arguments:: Special arguments to macros +* Undefine:: Deleting a macro +* Defn:: Renaming macros +* Pushdef:: Temporarily redefining macros + +* Indir:: Indirect call of macros +* Builtin:: Indirect call of builtins + +Conditionals, loops, and recursion + +* Ifdef:: Testing if a macro is defined +* Ifelse:: If-else construct, or multibranch +* Shift:: Recursion in `m4' +* Forloop:: Iteration by counting +* Foreach:: Iteration by list contents +* Stacks:: Working with definition stacks +* Composition:: Building macros with macros + +How to debug macros and input + +* Dumpdef:: Displaying macro definitions +* Trace:: Tracing macro calls +* Debug Levels:: Controlling debugging output +* Debug Output:: Saving debugging output + +Input control + +* Dnl:: Deleting whitespace in input +* Changequote:: Changing the quote characters +* Changecom:: Changing the comment delimiters +* Changeword:: Changing the lexical structure of words +* M4wrap:: Saving text until end of input + +File inclusion + +* Include:: Including named files +* Search Path:: Searching for include files + +Diverting and undiverting output + +* Divert:: Diverting output +* Undivert:: Undiverting output +* Divnum:: Diversion numbers +* Cleardivert:: Discarding diverted text + +Macros for text handling + +* Len:: Calculating length of strings +* Index macro:: Searching for substrings +* Regexp:: Searching for regular expressions +* Substr:: Extracting substrings +* Translit:: Translating characters +* Patsubst:: Substituting text by regular expression +* Format:: Formatting strings (printf-like) + +Macros for doing arithmetic + +* Incr:: Decrement and increment operators +* Eval:: Evaluating integer expressions + +Macros for running shell commands + +* Platform macros:: Determining the platform +* Syscmd:: Executing simple commands +* Esyscmd:: Reading the output of commands +* Sysval:: Exit status +* Mkstemp:: Making temporary files + +Miscellaneous builtin macros + +* Errprint:: Printing error messages +* Location:: Printing current location +* M4exit:: Exiting from `m4' + +Fast loading of frozen state + +* Using frozen files:: Using frozen files +* Frozen file format:: Frozen file format + +Compatibility with other versions of `m4' + +* Extensions:: Extensions in GNU M4 +* Incompatibilities:: Facilities in System V m4 not in GNU M4 +* Other Incompatibilities:: Other incompatibilities + +Correct version of some examples + +* Improved exch:: Solution for `exch' +* Improved forloop:: Solution for `forloop' +* Improved foreach:: Solution for `foreach' +* Improved copy:: Solution for `copy' +* Improved m4wrap:: Solution for `m4wrap' +* Improved cleardivert:: Solution for `cleardivert' +* Improved capitalize:: Solution for `capitalize' +* Improved fatal_error:: Solution for `fatal_error' + +How to make copies of the overall M4 package + +* GNU General Public License:: License for copying the M4 package + +How to make copies of this manual + +* GNU Free Documentation License:: License for copying this manual + +Indices of concepts and macros + +* Macro index:: Index for all `m4' macros +* Concept index:: Index for many concepts + + +File: m4.info, Node: Preliminaries, Next: Invoking m4, Prev: Top, Up: Top + +1 Introduction and preliminaries +******************************** + +This first chapter explains what GNU `m4' is, where `m4' comes from, +how to read and use this documentation, how to call the `m4' program, +and how to report bugs about it. It concludes by giving tips for +reading the remainder of the manual. + + The following chapters then detail all the features of the `m4' +language. + +* Menu: + +* Intro:: Introduction to `m4' +* History:: Historical references +* Bugs:: Problems and bugs +* Manual:: Using this manual + + +File: m4.info, Node: Intro, Next: History, Up: Preliminaries + +1.1 Introduction to `m4' +======================== + +`m4' is a macro processor, in the sense that it copies its input to the +output, expanding macros as it goes. Macros are either builtin or +user-defined, and can take any number of arguments. Besides just doing +macro expansion, `m4' has builtin functions for including named files, +running shell commands, doing integer arithmetic, manipulating text in +various ways, performing recursion, etc.... `m4' can be used either as +a front-end to a compiler, or as a macro processor in its own right. + + The `m4' macro processor is widely available on all UNIXes, and has +been standardized by POSIX. Usually, only a small percentage of users +are aware of its existence. However, those who find it often become +committed users. The popularity of GNU Autoconf, which requires GNU +`m4' for _generating_ `configure' scripts, is an incentive for many to +install it, while these people will not themselves program in `m4'. +GNU `m4' is mostly compatible with the System V, Release 3 version, +except for some minor differences. *Note Compatibility::, for more +details. + + Some people find `m4' to be fairly addictive. They first use `m4' +for simple problems, then take bigger and bigger challenges, learning +how to write complex sets of `m4' macros along the way. Once really +addicted, users pursue writing of sophisticated `m4' applications even +to solve simple problems, devoting more time debugging their `m4' +scripts than doing real work. Beware that `m4' may be dangerous for +the health of compulsive programmers. + + +File: m4.info, Node: History, Next: Bugs, Prev: Intro, Up: Preliminaries + +1.2 Historical references +========================= + +`GPM' was an important ancestor of `m4'. See C. Strachey: "A General +Purpose Macro generator", Computer Journal 8,3 (1965), pp. 225 ff. +`GPM' is also succinctly described into David Gries classic "Compiler +Construction for Digital Computers". + + The classic B. Kernighan and P.J. Plauger: "Software Tools", +Addison-Wesley, Inc. (1976) describes and implements a Unix +macro-processor language, which inspired Dennis Ritchie to write `m3', +a macro processor for the AP-3 minicomputer. + + Kernighan and Ritchie then joined forces to develop the original +`m4', as described in "The M4 Macro Processor", Bell Laboratories +(1977). It had only 21 builtin macros. + + While `GPM' was more _pure_, `m4' is meant to deal with the true +intricacies of real life: macros can be recognized without being +pre-announced, skipping whitespace or end-of-lines is easier, more +constructs are builtin instead of derived, etc. + + Originally, the Kernighan and Plauger macro-processor, and then +`m3', formed the engine for the Rational FORTRAN preprocessor, that is, +the `Ratfor' equivalent of `cpp'. Later, `m4' was used as a front-end +for `Ratfor', `C' and `Cobol'. + + Rene' Seindal released his implementation of `m4', GNU `m4', in +1990, with the aim of removing the artificial limitations in many of +the traditional `m4' implementations, such as maximum line length, +macro size, or number of macros. + + The late Professor A. Dain Samples described and implemented a +further evolution in the form of `M5': "User's Guide to the M5 Macro +Language: 2nd edition", Electronic Announcement on comp.compilers +newsgroup (1992). + + Franc,ois Pinard took over maintenance of GNU `m4' in 1992, until +1994 when he released GNU `m4' 1.4, which was the stable release for 10 +years. It was at this time that GNU Autoconf decided to require GNU +`m4' as its underlying engine, since all other implementations of `m4' +had too many limitations. + + More recently, in 2004, Paul Eggert released 1.4.1 and 1.4.2 which +addressed some long standing bugs in the venerable 1.4 release. Then in +2005, Gary V. Vaughan collected together the many patches to GNU `m4' +1.4 that were floating around the net and released 1.4.3 and 1.4.4. +And in 2006, Eric Blake joined the team and prepared patches for the +release of 1.4.5, 1.4.6, 1.4.7, and 1.4.8. More bug fixes were +incorporated in 2007, with releases 1.4.9 and 1.4.10. Eric continued +with some portability fixes for 1.4.11 and 1.4.12 in 2008, and 1.4.13 +in 2009. + + Meanwhile, development has continued on new features for `m4', such +as dynamic module loading and additional builtins. When complete, GNU +`m4' 2.0 will start a new series of releases. + + +File: m4.info, Node: Bugs, Next: Manual, Prev: History, Up: Preliminaries + +1.3 Problems and bugs +===================== + +If you have problems with GNU M4 or think you've found a bug, please +report it. Before reporting a bug, make sure you've actually found a +real bug. Carefully reread the documentation and see if it really says +you can do what you're trying to do. If it's not clear whether you +should be able to do something or not, report that too; it's a bug in +the documentation! + + Before reporting a bug or trying to fix it yourself, try to isolate +it to the smallest possible input file that reproduces the problem. +Then send us the input file and the exact results `m4' gave you. Also +say what you expected to occur; this will help us decide whether the +problem was really in the documentation. + + Once you've got a precise problem, send e-mail to . +Please include the version number of `m4' you are using. You can get +this information with the command `m4 --version'. Also provide details +about the platform you are executing on. + + Non-bug suggestions are always welcome as well. If you have +questions about things that are unclear in the documentation or are +just obscure features, please report them too. + + +File: m4.info, Node: Manual, Prev: Bugs, Up: Preliminaries + +1.4 Using this manual +===================== + +This manual contains a number of examples of `m4' input and output, and +a simple notation is used to distinguish input, output and error +messages from `m4'. Examples are set out from the normal text, and +shown in a fixed width font, like this + + This is an example of an example! + + To distinguish input from output, all output from `m4' is prefixed +by the string `=>', and all error messages by the string `error-->'. +When showing how command line options affect matters, the command line +is shown with a prompt `$ like this', otherwise, you can assume that a +simple `m4' invocation will work. Thus: + + $ command line to invoke m4 + Example of input line + =>Output line from m4 + error-->and an error message + + The sequence `^D' in an example indicates the end of the input file. +The sequence `' refers to the newline character. The majority of +these examples are self-contained, and you can run them with similar +results by invoking `m4 -d'. In fact, the testsuite that is bundled in +the GNU M4 package consists of the examples in this document! Some of +the examples assume that your current directory is located where you +unpacked the installation, so if you plan on following along, you may +find it helpful to do this now: + + $ cd m4-1.4.13 + + As each of the predefined macros in `m4' is described, a prototype +call of the macro will be shown, giving descriptive names to the +arguments, e.g., + + -- Composite: example (STRING, [COUNT = `1'], [ARGUMENT]...) + This is a sample prototype. There is not really a macro named + `example', but this documents that if there were, it would be a + Composite macro, rather than a Builtin. It requires at least one + argument, STRING. Remember that in `m4', there must not be a + space between the macro name and the opening parenthesis, unless + it was intended to call the macro without any arguments. The + brackets around COUNT and ARGUMENT show that these arguments are + optional. If COUNT is omitted, the macro behaves as if count were + `1', whereas if ARGUMENT is omitted, the macro behaves as if it + were the empty string. A blank argument is not the same as an + omitted argument. For example, `example(`a')', `example(`a',`1')', + and `example(`a',`1',)' would behave identically with COUNT set to + `1'; while `example(`a',)' and `example(`a',`')' would explicitly + pass the empty string for COUNT. The ellipses (`...') show that + the macro processes additional arguments after ARGUMENT, rather + than ignoring them. + + All macro arguments in `m4' are strings, but some are given special +interpretation, e.g., as numbers, file names, regular expressions, etc. +The documentation for each macro will state how the parameters are +interpreted, and what happens if the argument cannot be parsed +according to the desired interpretation. Unless specified otherwise, a +parameter specified to be a number is parsed as a decimal, even if the +argument has leading zeros; and parsing the empty string as a number +results in 0 rather than an error, although a warning will be issued. + + This document consistently writes and uses "builtin", without a +hyphen, as if it were an English word. This is how the `builtin' +primitive is spelled within `m4'. + + +File: m4.info, Node: Invoking m4, Next: Syntax, Prev: Preliminaries, Up: Top + +2 Invoking `m4' +*************** + +The format of the `m4' command is: + + `m4' [OPTION...] [FILE...] + + All options begin with `-', or if long option names are used, with +`--'. A long option name need not be written completely, any +unambiguous prefix is sufficient. POSIX requires `m4' to recognize +arguments intermixed with files, even when `POSIXLY_CORRECT' is set in +the environment. Most options take effect at startup regardless of +their position, but some are documented below as taking effect after +any files that occurred earlier in the command line. The argument `--' +is a marker to denote the end of options. + + With short options, options that do not take arguments may be +combined into a single command line argument with subsequent options, +options with mandatory arguments may be provided either as a single +command line argument or as two arguments, and options with optional +arguments must be provided as a single argument. In other words, `m4 +-QPDfoo -d a -df' is equivalent to `m4 -Q -P -D foo -d -df -- ./a', +although the latter form is considered canonical. + + With long options, options with mandatory arguments may be provided +with an equal sign (`=') in a single argument, or as two arguments, and +options with optional arguments must be provided as a single argument. +In other words, `m4 --def foo --debug a' is equivalent to `m4 +--define=foo --debug= -- ./a', although the latter form is considered +canonical (not to mention more robust, in case a future version of `m4' +introduces an option named `--default'). + + `m4' understands the following options, grouped by functionality. + +* Menu: + +* Operation modes:: Command line options for operation modes +* Preprocessor features:: Command line options for preprocessor features +* Limits control:: Command line options for limits control +* Frozen state:: Command line options for frozen state +* Debugging options:: Command line options for debugging +* Command line files:: Specifying input files on the command line + + +File: m4.info, Node: Operation modes, Next: Preprocessor features, Up: Invoking m4 + +2.1 Command line options for operation modes +============================================ + +Several options control the overall operation of `m4': + +`--help' + Print a help summary on standard output, then immediately exit + `m4' without reading any input files or performing any other + actions. + +`--version' + Print the version number of the program on standard output, then + immediately exit `m4' without reading any input files or + performing any other actions. + +`-E' +`--fatal-warnings' + Controls the effect of warnings. If unspecified, then execution + continues and exit status is unaffected when a warning is printed. + If specified exactly once, warnings become fatal; when one is + issued, execution continues, but the exit status will be non-zero. + If specified multiple times, then execution halts with non-zero + status the first time a warning is issued. The introduction of + behavior levels is new to M4 1.4.9; for behavior consistent with + earlier versions, you should specify `-E' twice. + +`-i' +`--interactive' +`-e' + Makes this invocation of `m4' interactive. This means that all + output will be unbuffered, and interrupts will be ignored. The + spelling `-e' exists for compatibility with other `m4' + implementations, and issues a warning because it may be withdrawn + in a future version of GNU M4. + +`-P' +`--prefix-builtins' + Internally modify _all_ builtin macro names so they all start with + the prefix `m4_'. For example, using this option, one should write + `m4_define' instead of `define', and `m4___file__' instead of + `__file__'. This option has no effect if `-R' is also specified. + +`-Q' +`--quiet' +`--silent' + Suppress warnings, such as missing or superfluous arguments in + macro calls, or treating the empty string as zero. + +`--warn-macro-sequence[=REGEXP]' + Issue a warning if the regular expression REGEXP has a non-empty + match in any macro definition (either by `define' or `pushdef'). + Empty matches are ignored; therefore, supplying the empty string + as REGEXP disables any warning. If the optional REGEXP is not + supplied, then the default regular expression is + `\$\({[^}]*}\|[0-9][0-9]+\)' (a literal `$' followed by multiple + digits or by an open brace), since these sequences will change + semantics in the default operation of GNU M4 2.0 (due to a change + in how more than 9 arguments in a macro definition will be + handled, *note Arguments::). Providing an alternate regular + expression can provide a useful reverse lookup feature of finding + where a macro is defined to have a given definition. + +`-W REGEXP' +`--word-regexp=REGEXP' + Use REGEXP as an alternative syntax for macro names. This + experimental option will not be present in all GNU `m4' + implementations (*note Changeword::). + + +File: m4.info, Node: Preprocessor features, Next: Limits control, Prev: Operation modes, Up: Invoking m4 + +2.2 Command line options for preprocessor features +================================================== + +Several options allow `m4' to behave more like a preprocessor. Macro +definitions and deletions can be made on the command line, the search +path can be altered, and the output file can track where the input came +from. These features occur with the following options: + +`-D NAME[=VALUE]' +`--define=NAME[=VALUE]' + This enters NAME into the symbol table. If `=VALUE' is missing, + the value is taken to be the empty string. The VALUE can be any + string, and the macro can be defined to take arguments, just as if + it was defined from within the input. This option may be given + more than once; order with respect to file names is significant, + and redefining the same NAME loses the previous value. + +`-I DIRECTORY' +`--include=DIRECTORY' + Make `m4' search DIRECTORY for included files that are not found + in the current working directory. *Note Search Path::, for more + details. This option may be given more than once. + +`-s' +`--synclines' + Generate synchronization lines, for use by the C preprocessor or + other similar tools. Order is significant with respect to file + names. This option is useful, for example, when `m4' is used as a + front end to a compiler. Source file name and line number + information is conveyed by directives of the form `#line LINENUM + "FILE"', which are inserted as needed into the middle of the + output. Such directives mean that the following line originated + or was expanded from the contents of input file FILE at line + LINENUM. The `"FILE"' part is often omitted when the file name + did not change from the previous directive. + + Synchronization directives are always given on complete lines by + themselves. When a synchronization discrepancy occurs in the + middle of an output line, the associated synchronization directive + is delayed until the next newline that does not occur in the + middle of a quoted string or comment. + + define(`twoline', `1 + 2') + =>#line 2 "stdin" + => + changecom(`/*', `*/') + => + define(`comment', `/*1 + 2*/') + =>#line 5 + => + dnl no line + hello + =>#line 7 + =>hello + twoline + =>1 + =>#line 8 + =>2 + comment + =>/*1 + =>2*/ + one comment `two + three' + =>#line 10 + =>one /*1 + =>2*/ two + =>three + goodbye + =>#line 12 + =>goodbye + +`-U NAME' +`--undefine=NAME' + This deletes any predefined meaning NAME might have. Obviously, + only predefined macros can be deleted in this way. This option + may be given more than once; undefining a NAME that does not have a + definition is silently ignored. Order is significant with respect + to file names. + + +File: m4.info, Node: Limits control, Next: Frozen state, Prev: Preprocessor features, Up: Invoking m4 + +2.3 Command line options for limits control +=========================================== + +There are some limits within `m4' that can be tuned. For +compatibility, `m4' also accepts some options that control limits in +other implementations, but which are automatically unbounded (limited +only by your hardware and operating system constraints) in GNU `m4'. + +`-g' +`--gnu' + Enable all the extensions in this implementation. In this release + of M4, this option is always on by default; it is currently only + useful when overriding a prior use of `--traditional'. However, + having GNU behavior as default makes it impossible to write a + strictly POSIX-compliant client that avoids all incompatible GNU + M4 extensions, since such a client would have to use the non-POSIX + command-line option to force full POSIX behavior. Thus, a future + version of M4 will be changed to implicitly use the option + `--traditional' if the environment variable `POSIXLY_CORRECT' is + set. Projects that intentionally use GNU extensions should + consider using `--gnu' to state their intentions, so that the + project will not mysteriously break if the user upgrades to a + newer M4 and has `POSIXLY_CORRECT' set in their environment. + +`-G' +`--traditional' + Suppress all the extensions made in this implementation, compared + to the System V version. *Note Compatibility::, for a list of + these. + +`-H NUM' +`--hashsize=NUM' + Make the internal hash table for symbol lookup be NUM entries big. + For better performance, the number should be prime, but this is not + checked. The default is 509 entries. It should not be necessary + to increase this value, unless you define an excessive number of + macros. + +`-L NUM' +`--nesting-limit=NUM' + Artificially limit the nesting of macro calls to NUM levels, + stopping program execution if this limit is ever exceeded. When + not specified, nesting defaults to unlimited on platforms that can + detect stack overflow, and to 1024 levels otherwise. A value of + zero means unlimited; but then heavily nested code could + potentially cause a stack overflow. + + The precise effect of this option is more correctly associated + with textual nesting than dynamic recursion. It has been useful + when some complex `m4' input was generated by mechanical means, and + also in diagnosing recursive algorithms that do not scale well. + Most users never need to change this option from its default. + + This option does _not_ have the ability to break endless + rescanning loops, since these do not necessarily consume much + memory or stack space. Through clever usage of rescanning loops, + one can request complex, time-consuming computations from `m4' + with useful results. Putting limitations in this area would break + `m4' power. There are many pathological cases: + `define(`a', `a')a' is only the simplest example (but *note + Compatibility::). Expecting GNU `m4' to detect these would be a + little like expecting a compiler system to detect and diagnose + endless loops: it is a quite _hard_ problem in general, if not + undecidable! + +`-B NUM' +`-S NUM' +`-T NUM' + These options are present for compatibility with System V `m4', but + do nothing in this implementation. They may disappear in future + releases, and issue a warning to that effect. + +`-N NUM' +`--diversions=NUM' + These options are present only for compatibility with previous + versions of GNU `m4', and were controlling the number of possible + diversions which could be used at the same time. They do nothing, + because there is no fixed limit anymore. They may disappear in + future releases, and issue a warning to that effect. + + +File: m4.info, Node: Frozen state, Next: Debugging options, Prev: Limits control, Up: Invoking m4 + +2.4 Command line options for frozen state +========================================= + +GNU `m4' comes with a feature of freezing internal state (*note Frozen +files::). This can be used to speed up `m4' execution when reusing a +common initialization script. + +`-F FILE' +`--freeze-state=FILE' + Once execution is finished, write out the frozen state on the + specified FILE. It is conventional, but not required, for FILE to + end in `.m4f'. + +`-R FILE' +`--reload-state=FILE' + Before execution starts, recover the internal state from the + specified frozen FILE. The options `-D', `-U', and `-t' take + effect after state is reloaded, but before the input files are + read. + + +File: m4.info, Node: Debugging options, Next: Command line files, Prev: Frozen state, Up: Invoking m4 + +2.5 Command line options for debugging +====================================== + +Finally, there are several options for aiding in debugging `m4' scripts. + +`-d[FLAGS]' +`--debug[=FLAGS]' + Set the debug-level according to the flags FLAGS. The debug-level + controls the format and amount of information presented by the + debugging functions. *Note Debug Levels::, for more details on + the format and meaning of FLAGS. If omitted, FLAGS defaults to + `aeq'. + +`--debugfile[=FILE]' +`-o FILE' +`--error-output=FILE' + Redirect `dumpdef' output, debug messages, and trace output to the + named FILE. Warnings, error messages, and `errprint' output are + still printed to standard error. If these options are not used, or + if FILE is unspecified (only possible for `--debugfile'), debug + output goes to standard error; if FILE is the empty string, debug + output is discarded. *Note Debug Output::, for more details. The + option `--debugfile' may be given more than once, and order is + significant with respect to file names. The spellings `-o' and + `--error-output' are misleading and inconsistent with other GNU + tools; for now they are silently accepted as synonyms of + `--debugfile' and only recognized once, but in a future version of + M4, using them will cause a warning to be issued. + +`-l NUM' +`--arglength=NUM' + Restrict the size of the output generated by macro tracing to NUM + characters per trace line. If unspecified or zero, output is + unlimited. *Note Debug Levels::, for more details. + +`-t NAME' +`--trace=NAME' + This enables tracing for the macro NAME, at any point where it is + defined. NAME need not be defined when this option is given. + This option may be given more than once, and order is significant + with respect to file names. *Note Trace::, for more details. + + +File: m4.info, Node: Command line files, Prev: Debugging options, Up: Invoking m4 + +2.6 Specifying input files on the command line +============================================== + +The remaining arguments on the command line are taken to be input file +names. If no names are present, standard input is read. A file name +of `-' is taken to mean standard input. It is conventional, but not +required, for input files to end in `.m4'. + + The input files are read in the sequence given. Standard input can +be read more than once, so the file name `-' may appear multiple times +on the command line; this makes a difference when input is from a +terminal or other special file type. It is an error if an input file +ends in the middle of argument collection, a comment, or a quoted +string. + + The options `--define' (`-D'), `--undefine' (`-U'), `--synclines' +(`-s'), and `--trace' (`-t') only take effect after processing input +from any file names that occur earlier on the command line. For +example, assume the file `foo' contains: + + $ cat foo + bar + + The text `bar' can then be redefined over multiple uses of `foo': + + $ m4 -Dbar=hello foo -Dbar=world foo + =>hello + =>world + + If none of the input files invoked `m4exit' (*note M4exit::), the +exit status of `m4' will be 0 for success, 1 for general failure (such +as problems with reading an input file), and 63 for version mismatch +(*note Using frozen files::). + + If you need to read a file whose name starts with a `-', you can +specify it as `./-file', or use `--' to mark the end of options. + + +File: m4.info, Node: Syntax, Next: Macros, Prev: Invoking m4, Up: Top + +3 Lexical and syntactic conventions +*********************************** + +As `m4' reads its input, it separates it into "tokens". A token is +either a name, a quoted string, or any single character, that is not a +part of either a name or a string. Input to `m4' can also contain +comments. GNU `m4' does not yet understand multibyte locales; all +operations are byte-oriented rather than character-oriented (although +if your locale uses a single byte encoding, such as ISO-8859-1, you +will not notice a difference). However, `m4' is eight-bit clean, so +you can use non-ASCII characters in quoted strings (*note +Changequote::), comments (*note Changecom::), and macro names (*note +Indir::), with the exception of the NUL character (the zero byte +`'\0''). + +* Menu: + +* Names:: Macro names +* Quoted strings:: Quoting input to `m4' +* Comments:: Comments in `m4' input +* Other tokens:: Other kinds of input tokens +* Input processing:: How `m4' copies input to output + + +File: m4.info, Node: Names, Next: Quoted strings, Up: Syntax + +3.1 Macro names +=============== + +A name is any sequence of letters, digits, and the character `_' +(underscore), where the first character is not a digit. `m4' will use +the longest such sequence found in the input. If a name has a macro +definition, it will be subject to macro expansion (*note Macros::). +Names are case-sensitive. + + Examples of legal names are: `foo', `_tmp', and `name01'. + + +File: m4.info, Node: Quoted strings, Next: Comments, Prev: Names, Up: Syntax + +3.2 Quoting input to `m4' +========================= + +A quoted string is a sequence of characters surrounded by quote +strings, defaulting to ``' and `'', where the nested begin and end +quotes within the string are balanced. The value of a string token is +the text, with one level of quotes stripped off. Thus + + `' + => + +is the empty string, and double-quoting turns into single-quoting. + + ``quoted'' + =>`quoted' + + The quote characters can be changed at any time, using the builtin +macro `changequote'. *Note Changequote::, for more information. + + +File: m4.info, Node: Comments, Next: Other tokens, Prev: Quoted strings, Up: Syntax + +3.3 Comments in `m4' input +========================== + +Comments in `m4' are normally delimited by the characters `#' and +newline. All characters between the comment delimiters are ignored, +but the entire comment (including the delimiters) is passed through to +the output--comments are _not_ discarded by `m4'. + + Comments cannot be nested, so the first newline after a `#' ends the +comment. The commenting effect of the begin-comment string can be +inhibited by quoting it. + + $ m4 + `quoted text' # `commented text' + =>quoted text # `commented text' + `quoting inhibits' `#' `comments' + =>quoting inhibits # comments + + The comment delimiters can be changed to any string at any time, +using the builtin macro `changecom'. *Note Changecom::, for more +information. + + +File: m4.info, Node: Other tokens, Next: Input processing, Prev: Comments, Up: Syntax + +3.4 Other kinds of input tokens +=============================== + +Any character, that is neither a part of a name, nor of a quoted string, +nor a comment, is a token by itself. When not in the context of macro +expansion, all of these tokens are just copied to output. However, +during macro expansion, whitespace characters (space, tab, newline, +formfeed, carriage return, vertical tab), parentheses (`(' and `)'), +comma (`,'), and dollar (`$') have additional roles, explained later. + + +File: m4.info, Node: Input processing, Prev: Other tokens, Up: Syntax + +3.5 How `m4' copies input to output +=================================== + +As `m4' reads the input token by token, it will copy each token +directly to the output immediately. + + The exception is when it finds a word with a macro definition. In +that case `m4' will calculate the macro's expansion, possibly reading +more input to get the arguments. It then inserts the expansion in front +of the remaining input. In other words, the resulting text from a macro +call will be read and parsed into tokens again. + + `m4' expands a macro as soon as possible. If it finds a macro call +when collecting the arguments to another, it will expand the second call +first. This process continues until there are no more macro calls to +expand and all the input has been consumed. + + For a running example, examine how `m4' handles this input: + + format(`Result is %d', eval(`2**15')) + +First, `m4' sees that the token `format' is a macro name, so it +collects the tokens `(', ``Result is %d'', `,', and ` ', before +encountering another potential macro. Sure enough, `eval' is a macro +name, so the nested argument collection picks up `(', ``2**15'', and +`)', invoking the eval macro with the lone argument of `2**15'. The +expansion of `eval(2**15)' is `32768', which is then rescanned as the +five tokens `3', `2', `7', `6', and `8'; and combined with the next +`)', the format macro now has all its arguments, as if the user had +typed: + + format(`Result is %d', 32768) + +The format macro expands to `Result is 32768', and we have another +round of scanning for the tokens `Result', ` ', `is', ` ', `3', `2', +`7', `6', and `8'. None of these are macros, so the final output is + + =>Result is 32768 + + As a more complicated example, we will contrast an actual code +example from the Gnulib project(1), showing both a buggy approach and +the desired results. The user desires to output a shell assignment +statement that takes its argument and turns it into a shell variable by +converting it to uppercase and prepending a prefix. The original +attempt looks like this: + + changequote([,])dnl + define([gl_STRING_MODULE_INDICATOR], + [ + dnl comment + GNULIB_]translit([$1],[a-z],[A-Z])[=1 + ])dnl + gl_STRING_MODULE_INDICATOR([strcase]) + => + => GNULIB_strcase=1 + => + + Oops - the argument did not get capitalized. And although the manual +is not able to easily show it, both lines that appear empty actually +contain two trailing spaces. By stepping through the parse, it is easy +to see what happened. First, `m4' sees the token `changequote', which +it recognizes as a macro, followed by `(', `[', `,', `]', and `)' to +form the argument list. The macro expands to the empty string, but +changes the quoting characters to something more useful for generating +shell code (unbalanced ``' and `'' appear all the time in shell scripts, +but unbalanced `[]' tend to be rare). Also in the first line, `m4' +sees the token `dnl', which it recognizes as a builtin macro that +consumes the rest of the line, resulting in no output for that line. + + The second line starts a macro definition. `m4' sees the token +`define', which it recognizes as a macro, followed by a `(', +`[gl_STRING_MODULE_INDICATOR]', and `,'. Because an unquoted comma was +encountered, the first argument is known to be the expansion of the +single-quoted string token, or `gl_STRING_MODULE_INDICATOR'. Next, +`m4' sees `', ` ', and ` ', but this whitespace is discarded as +part of argument collection. Then comes a rather lengthy single-quoted +string token, `[ dnl comment GNULIB_]'. This is followed +by the token `translit', which `m4' recognizes as a macro name, so a +nested macro expansion has started. + + The arguments to the `translit' are found by the tokens `(', `[$1]', +`,', `[a-z]', `,', `[A-Z]', and finally `)'. All three string +arguments are expanded (or in other words, the quotes are stripped), +and since neither `$' nor `1' need capitalization, the result of the +macro is `$1'. This expansion is rescanned, resulting in the two +literal characters `$' and `1'. + + Scanning of the outer macro resumes, and picks up with `[=1 ]', +and finally `)'. The collected pieces of expanded text are +concatenated, with the end result that the macro +`gl_STRING_MODULE_INDICATOR' is now defined to be the sequence ` +dnl comment GNULIB_$1=1 '. Once again, `dnl' is recognized +and avoids a newline in the output. + + The final line is then parsed, beginning with ` ' and ` ' that are +output literally. Then `gl_STRING_MODULE_INDICATOR' is recognized as a +macro name, with an argument list of `(', `[strcase]', and `)'. Since +the definition of the macro contains the sequence `$1', that sequence +is replaced with the argument `strcase' prior to starting the rescan. +The rescan sees `' and four spaces, which are output literally, then +`dnl', which discards the text ` comment'. Next comes four more +spaces, also output literally, and the token `GNULIB_strcase', which +resulted from the earlier parameter substitution. Since that is not a +macro name, it is output literally, followed by the literal tokens `=', +`1', `', and two more spaces. Finally, the original `' seen +after the macro invocation is scanned and output literally. + + Now for a corrected approach. This rearranges the use of newlines +and whitespace so that less whitespace is output (which, although +harmless to shell scripts, can be visually unappealing), and fixes the +quoting issues so that the capitalization occurs when the macro +`gl_STRING_MODULE_INDICATOR' is invoked, rather then when it is defined. + + changequote([,])dnl + define([gl_STRING_MODULE_INDICATOR], + [dnl comment + GNULIB_[]translit([$1], [a-z], [A-Z])=1dnl + ])dnl + gl_STRING_MODULE_INDICATOR([strcase]) + => GNULIB_STRCASE=1 + + The parsing of the first line is unchanged. The second line sees the +name of the macro to define, then sees the discarded `' and two +spaces, as before. But this time, the next token is `[dnl comment +GNULIB_[]translit([$1], [a-z], [A-Z])=1dnl]', which includes nested +quotes, followed by `)' to end the macro definition and `dnl' to skip +the newline. No early expansion of `translit' occurs, so the entire +string becomes the definition of the macro. + + The final line is then parsed, beginning with two spaces that are +output literally, and an invocation of `gl_STRING_MODULE_INDICATOR' +with the argument `strcase'. Again, the `$1' in the macro definition +is substituted prior to rescanning. Rescanning first encounters `dnl', +and discards ` comment'. Then two spaces are output literally. +Next comes the token `GNULIB_', but that is not a macro, so it is +output literally. The token `[]' is an empty string, so it does not +affect output. Then the token `translit' is encountered. + + This time, the arguments to `translit' are parsed as `(', +`[strcase]', `,', ` ', `[a-z]', `,', ` ', `[A-Z]', and `)'. The two +spaces are discarded, and the translit results in the desired result +`STRCASE'. This is rescanned, but since it is not a macro name, it is +output literally. Then the scanner sees `=' and `1', which are output +literally, followed by `dnl' which discards the rest of the definition +of `gl_STRING_MODULE_INDICATOR'. The newline at the end of output is +the literal `' that appeared after the invocation of the macro. + + The order in which `m4' expands the macros can be further explored +using the trace facilities of GNU `m4' (*note Trace::). + + ---------- Footnotes ---------- + + (1) Derived from a patch in +`http://lists.gnu.org/archive/html/bug-gnulib/2007-01/msg00389.html', +and a followup patch in +`http://lists.gnu.org/archive/html/bug-gnulib/2007-02/msg00000.html' + + +File: m4.info, Node: Macros, Next: Definitions, Prev: Syntax, Up: Top + +4 How to invoke macros +********************** + +This chapter covers macro invocation, macro arguments and how macro +expansion is treated. + +* Menu: + +* Invocation:: Macro invocation +* Inhibiting Invocation:: Preventing macro invocation +* Macro Arguments:: Macro arguments +* Quoting Arguments:: On Quoting Arguments to macros +* Macro expansion:: Expanding macros + + +File: m4.info, Node: Invocation, Next: Inhibiting Invocation, Up: Macros + +4.1 Macro invocation +==================== + +Macro invocations has one of the forms + + name + +which is a macro invocation without any arguments, or + + name(arg1, arg2, ..., argN) + +which is a macro invocation with N arguments. Macros can have any +number of arguments. All arguments are strings, but different macros +might interpret the arguments in different ways. + + The opening parenthesis _must_ follow the NAME directly, with no +spaces in between. If it does not, the macro is called with no +arguments at all. + + For a macro call to have no arguments, the parentheses _must_ be +left out. The macro call + + name() + +is a macro call with one argument, which is the empty string, not a call +with no arguments. + + +File: m4.info, Node: Inhibiting Invocation, Next: Macro Arguments, Prev: Invocation, Up: Macros + +4.2 Preventing macro invocation +=============================== + +An innovation of the `m4' language, compared to some of its +predecessors (like Strachey's `GPM', for example), is the ability to +recognize macro calls without resorting to any special, prefixed +invocation character. While generally useful, this feature might +sometimes be the source of spurious, unwanted macro calls. So, GNU +`m4' offers several mechanisms or techniques for inhibiting the +recognition of names as macro calls. + + First of all, many builtin macros cannot meaningfully be called +without arguments. As a GNU extension, for any of these macros, +whenever an opening parenthesis does not immediately follow their name, +the builtin macro call is not triggered. This solves the most usual +cases, like for `include' or `eval'. Later in this document, the +sentence "This macro is recognized only with parameters" refers to this +specific provision of GNU M4, also known as a blind builtin macro. For +the builtins defined by POSIX that bear this disclaimer, POSIX +specifically states that invoking those builtins without arguments is +unspecified, because many other implementations simply invoke the +builtin as though it were given one empty argument instead. + + $ m4 + eval + =>eval + eval(`1') + =>1 + + There is also a command line option (`--prefix-builtins', or `-P', +*note Invoking m4: Operation modes.) that renames all builtin macros +with a prefix of `m4_' at startup. The option has no effect whatsoever +on user defined macros. For example, with this option, one has to +write `m4_dnl' and even `m4_m4exit'. It also has no effect on whether +a macro requires parameters. + + $ m4 -P + eval + =>eval + eval(`1') + =>eval(1) + m4_eval + =>m4_eval + m4_eval(`1') + =>1 + + Another alternative is to redefine problematic macros to a name less +likely to cause conflicts, *Note Definitions::. + + If your version of GNU `m4' has the `changeword' feature compiled +in, it offers far more flexibility in specifying the syntax of macro +names, both builtin or user-defined. *Note Changeword::, for more +information on this experimental feature. + + Of course, the simplest way to prevent a name from being interpreted +as a call to an existing macro is to quote it. The remainder of this +section studies a little more deeply how quoting affects macro +invocation, and how quoting can be used to inhibit macro invocation. + + Even if quoting is usually done over the whole macro name, it can +also be done over only a few characters of this name (provided, of +course, that the unquoted portions are not also a macro). It is also +possible to quote the empty string, but this works only _inside_ the +name. For example: + + `divert' + =>divert + `d'ivert + =>divert + di`ver't + =>divert + div`'ert + =>divert + +all yield the string `divert'. While in both: + + `'divert + => + divert`' + => + +the `divert' builtin macro will be called, which expands to the empty +string. + + The output of macro evaluations is always rescanned. In the +following example, the input `x`'y' yields the string `bCD', exactly as +if `m4' has been given `substr(ab`'cde, `1', `3')' as input: + + define(`cde', `CDE') + => + define(`x', `substr(ab') + => + define(`y', `cde, `1', `3')') + => + x`'y + =>bCD + + Unquoted strings on either side of a quoted string are subject to +being recognized as macro names. In the following example, quoting the +empty string allows for the second `macro' to be recognized as such: + + define(`macro', `m') + => + macro(`m')macro + =>mmacro + macro(`m')`'macro + =>mm + + Quoting may prevent recognizing as a macro name the concatenation of +a macro expansion with the surrounding characters. In this example: + + define(`macro', `di$1') + => + macro(`v')`ert' + =>divert + macro(`v')ert + => + +the input will produce the string `divert'. When the quotes were +removed, the `divert' builtin was called instead. + + +File: m4.info, Node: Macro Arguments, Next: Quoting Arguments, Prev: Inhibiting Invocation, Up: Macros + +4.3 Macro arguments +=================== + +When a name is seen, and it has a macro definition, it will be expanded +as a macro. + + If the name is followed by an opening parenthesis, the arguments +will be collected before the macro is called. If too few arguments are +supplied, the missing arguments are taken to be the empty string. +However, some builtins are documented to behave differently for a +missing optional argument than for an explicit empty string. If there +are too many arguments, the excess arguments are ignored. Unquoted +leading whitespace is stripped off all arguments, but whitespace +generated by a macro expansion or occurring after a macro that expanded +to an empty string remains intact. Whitespace includes space, tab, +newline, carriage return, vertical tab, and formfeed. + + define(`macro', `$1') + => + macro( unquoted leading space lost) + =>unquoted leading space lost + macro(` quoted leading space kept') + => quoted leading space kept + macro( + divert `unquoted space kept after expansion') + => unquoted space kept after expansion + macro(macro(` + ')`whitespace from expansion kept') + => + =>whitespace from expansion kept + macro(`unquoted trailing whitespace kept' + ) + =>unquoted trailing whitespace kept + => + + Normally `m4' will issue warnings if a builtin macro is called with +an inappropriate number of arguments, but it can be suppressed with the +`--quiet' command line option (or `--silent', or `-Q', *note Invoking +m4: Operation modes.). For user defined macros, there is no check of +the number of arguments given. + + $ m4 + index(`abc') + error-->m4:stdin:1: Warning: too few arguments to builtin `index' + =>0 + index(`abc',) + =>0 + index(`abc', `b', `ignored') + error-->m4:stdin:3: Warning: excess arguments to builtin `index' ignored + =>1 + + $ m4 -Q + index(`abc') + =>0 + index(`abc',) + =>0 + index(`abc', `b', `ignored') + =>1 + + Macros are expanded normally during argument collection, and whatever +commas, quotes and parentheses that might show up in the resulting +expanded text will serve to define the arguments as well. Thus, if FOO +expands to `, b, c', the macro call + + bar(a foo, d) + +is a macro call with four arguments, which are `a ', `b', `c' and `d'. +To understand why the first argument contains whitespace, remember that +unquoted leading whitespace is never part of an argument, but trailing +whitespace always is. + + It is possible for a macro's definition to change during argument +collection, in which case the expansion uses the definition that was in +effect at the time the opening `(' was seen. + + define(`f', `1') + => + f(define(`f', `2')) + =>1 + f + =>2 + + It is an error if the end of file occurs while collecting arguments. + + hello world + =>hello world + define( + ^D + error-->m4:stdin:2: ERROR: end of file in argument list + + +File: m4.info, Node: Quoting Arguments, Next: Macro expansion, Prev: Macro Arguments, Up: Macros + +4.4 On Quoting Arguments to macros +================================== + +Each argument has unquoted leading whitespace removed. Within each +argument, all unquoted parentheses must match. For example, if FOO is +a macro, + + foo(() (`(') `(') + +is a macro call, with one argument, whose value is `() (() ('. Commas +separate arguments, except when they occur inside quotes, comments, or +unquoted parentheses. *Note Pseudo Arguments::, for examples. + + It is common practice to quote all arguments to macros, unless you +are sure you want the arguments expanded. Thus, in the above example +with the parentheses, the `right' way to do it is like this: + + foo(`() (() (') + + It is, however, in certain cases necessary (because nested expansion +must occur to create the arguments for the outer macro) or convenient +(because it uses fewer characters) to leave out quotes for some +arguments, and there is nothing wrong in doing it. It just makes life a +bit harder, if you are not careful to follow a consistent quoting style. +For consistency, this manual follows the rule of thumb that each layer +of parentheses introduces another layer of single quoting, except when +showing the consequences of quoting rules. This is done even when the +quoted string cannot be a macro, such as with integers when you have not +changed the syntax via `changeword' (*note Changeword::). + + The quoting rule of thumb of one level of quoting per parentheses +has a nice property: when a macro name appears inside parentheses, you +can determine when it will be expanded. If it is not quoted, it will be +expanded prior to the outer macro, so that its expansion becomes the +argument. If it is single-quoted, it will be expanded after the outer +macro. And if it is double-quoted, it will be used as literal text +instead of a macro name. + + define(`active', `ACT, IVE') + => + define(`show', `$1 $1') + => + show(active) + =>ACT ACT + show(`active') + =>ACT, IVE ACT, IVE + show(``active'') + =>active active + + +File: m4.info, Node: Macro expansion, Prev: Quoting Arguments, Up: Macros + +4.5 Macro expansion +=================== + +When the arguments, if any, to a macro call have been collected, the +macro is expanded, and the expansion text is pushed back onto the input +(unquoted), and reread. The expansion text from one macro call might +therefore result in more macros being called, if the calls are included, +completely or partially, in the first macro calls' expansion. + + Taking a very simple example, if FOO expands to `bar', and BAR +expands to `Hello', the input + + $ m4 -Dbar=Hello -Dfoo=bar + foo + =>Hello + +will expand first to `bar', and when this is reread and expanded, into +`Hello'. + + +File: m4.info, Node: Definitions, Next: Conditionals, Prev: Macros, Up: Top + +5 How to define new macros +************************** + +Macros can be defined, redefined and deleted in several different ways. +Also, it is possible to redefine a macro without losing a previous +value, and bring back the original value at a later time. + +* Menu: + +* Define:: Defining a new macro +* Arguments:: Arguments to macros +* Pseudo Arguments:: Special arguments to macros +* Undefine:: Deleting a macro +* Defn:: Renaming macros +* Pushdef:: Temporarily redefining macros + +* Indir:: Indirect call of macros +* Builtin:: Indirect call of builtins + + +File: m4.info, Node: Define, Next: Arguments, Up: Definitions + +5.1 Defining a macro +==================== + +The normal way to define or redefine macros is to use the builtin +`define': + + -- Builtin: define (NAME, [EXPANSION]) + Defines NAME to expand to EXPANSION. If EXPANSION is not given, + it is taken to be empty. + + The expansion of `define' is void. The macro `define' is + recognized only with parameters. + + The following example defines the macro FOO to expand to the text +`Hello World.'. + + define(`foo', `Hello world.') + => + foo + =>Hello world. + + The empty line in the output is there because the newline is not a +part of the macro definition, and it is consequently copied to the +output. This can be avoided by use of the macro `dnl'. *Note Dnl::, +for details. + + The first argument to `define' should be quoted; otherwise, if the +macro is already defined, you will be defining a different macro. This +example shows the problems with underquoting, since we did not want to +redefine `one': + + define(foo, one) + => + define(foo, two) + => + one + =>two + + GNU `m4' normally replaces only the _topmost_ definition of a macro +if it has several definitions from `pushdef' (*note Pushdef::). Some +other implementations of `m4' replace all definitions of a macro with +`define'. *Note Incompatibilities::, for more details. + + As a GNU extension, the first argument to `define' does not have to +be a simple word. It can be any text string, even the empty string. A +macro with a non-standard name cannot be invoked in the normal way, as +the name is not recognized. It can only be referenced by the builtins +`indir' (*note Indir::) and `defn' (*note Defn::). + + Arrays and associative arrays can be simulated by using non-standard +macro names. + + -- Composite: array (INDEX) + -- Composite: array_set (INDEX, [VALUE]) + Provide access to entries within an array. `array' reads the entry + at location INDEX, and `array_set' assigns VALUE to location INDEX. + + define(`array', `defn(format(``array[%d]'', `$1'))') + => + define(`array_set', `define(format(``array[%d]'', `$1'), `$2')') + => + array_set(`4', `array element no. 4') + => + array_set(`17', `array element no. 17') + => + array(`4') + =>array element no. 4 + array(eval(`10 + 7')) + =>array element no. 17 + + Change the `%d' to `%s' and it is an associative array. + + +File: m4.info, Node: Arguments, Next: Pseudo Arguments, Prev: Define, Up: Definitions + +5.2 Arguments to macros +======================= + +Macros can have arguments. The Nth argument is denoted by `$n' in the +expansion text, and is replaced by the Nth actual argument, when the +macro is expanded. Replacement of arguments happens before rescanning, +regardless of how many nesting levels of quoting appear in the +expansion. Here is an example of a macro with two arguments. + + -- Composite: exch (ARG1, ARG2) + Expands to ARG2 followed by ARG1, effectively exchanging their + order. + + define(`exch', `$2, $1') + => + exch(`arg1', `arg2') + =>arg2, arg1 + + This can be used, for example, if you like the arguments to `define' +to be reversed. + + define(`exch', `$2, $1') + => + define(exch(``expansion text'', ``macro'')) + => + macro + =>expansion text + + *Note Quoting Arguments::, for an explanation of the double quotes. +(You should try and improve this example so that clients of `exch' do +not have to double quote; or *note Answers: Improved exch.). + + As a special case, the zeroth argument, `$0', is always the name of +the macro being expanded. + + define(`test', ``Macro name: $0'') + => + test + =>Macro name: test + + If you want quoted text to appear as part of the expansion text, +remember that quotes can be nested in quoted strings. Thus, in + + define(`foo', `This is macro `foo'.') + => + foo + =>This is macro foo. + +The `foo' in the expansion text is _not_ expanded, since it is a quoted +string, and not a name. + + GNU `m4' allows the number following the `$' to consist of one or +more digits, allowing macros to have any number of arguments. The +extension of accepting multiple digits is incompatible with POSIX, and +is different than traditional implementations of `m4', which only +recognize one digit. Therefore, future versions of GNU M4 will phase +out this feature. To portably access beyond the ninth argument, you +can use the `argn' macro documented later (*note Shift::). + + POSIX also states that `$' followed immediately by `{' in a macro +definition is implementation-defined. This version of M4 passes the +literal characters `${' through unchanged, but M4 2.0 will implement an +optional feature similar to `sh', where `${11}' expands to the eleventh +argument, to replace the current recognition of `$11'. Meanwhile, if +you want to guarantee that you will get a literal `${' in output when +expanding a macro, even when you upgrade to M4 2.0, you can use nested +quoting to your advantage: + + define(`foo', `single quoted $`'{1} output') + => + define(`bar', ``double quoted $'`{2} output'') + => + foo(`a', `b') + =>single quoted ${1} output + bar(`a', `b') + =>double quoted ${2} output + + To help you detect places in your M4 input files that might change in +behavior due to the changed behavior of M4 2.0, you can use the +`--warn-macro-sequence' command-line option (*note Invoking m4: +Operation modes.) with the default regular expression. This will add a +warning any time a macro definition includes `$' followed by multiple +digits, or by `{'. The warning is not enabled by default, because it +triggers a number of warnings in Autoconf 2.61 (and Autoconf uses `-E' +to treat warnings as errors), and because it will still be possible to +restore older behavior in M4 2.0. + + $ m4 --warn-macro-sequence + define(`foo', `$001 ${1} $1') + error-->m4:stdin:1: Warning: definition of `foo' contains sequence `$001' + error-->m4:stdin:1: Warning: definition of `foo' contains sequence `${1}' + => + foo(`bar') + =>bar ${1} bar + + +File: m4.info, Node: Pseudo Arguments, Next: Undefine, Prev: Arguments, Up: Definitions + +5.3 Special arguments to macros +=============================== + +There is a special notation for the number of actual arguments supplied, +and for all the actual arguments. + + The number of actual arguments in a macro call is denoted by `$#' in +the expansion text. + + -- Composite: nargs (...) + Expands to a count of the number of arguments supplied. + + define(`nargs', `$#') + => + nargs + =>0 + nargs() + =>1 + nargs(`arg1', `arg2', `arg3') + =>3 + nargs(`commas can be quoted, like this') + =>1 + nargs(arg1#inside comments, commas do not separate arguments + still arg1) + =>1 + nargs((unquoted parentheses, like this, group arguments)) + =>1 + + Remember that `#' defaults to the comment character; if you forget +quotes to inhibit the comment behavior, your macro definition may not +end where you expected. + + dnl Attempt to define a macro to just `$#' + define(underquoted, $#) + oops) + => + underquoted + =>0) + =>oops + + The notation `$*' can be used in the expansion text to denote all +the actual arguments, unquoted, with commas in between. For example + + define(`echo', `$*') + => + echo(arg1, arg2, arg3 , arg4) + =>arg1,arg2,arg3 ,arg4 + + Often each argument should be quoted, and the notation `$@' handles +that. It is just like `$*', except that it quotes each argument. A +simple example of that is: + + define(`echo', `$@') + => + echo(arg1, arg2, arg3 , arg4) + =>arg1,arg2,arg3 ,arg4 + + Where did the quotes go? Of course, they were eaten, when the +expanded text were reread by `m4'. To show the difference, try + + define(`echo1', `$*') + => + define(`echo2', `$@') + => + define(`foo', `This is macro `foo'.') + => + echo1(foo) + =>This is macro This is macro foo.. + echo1(`foo') + =>This is macro foo. + echo2(foo) + =>This is macro foo. + echo2(`foo') + =>foo + +*Note Trace::, if you do not understand this. As another example of the +difference, remember that comments encountered in arguments are passed +untouched to the macro, and that quoting disables comments. + + define(`echo1', `$*') + => + define(`echo2', `$@') + => + define(`foo', `bar') + => + echo1(#foo'foo + foo) + =>#foo'foo + =>bar + echo2(#foo'foo + foo) + =>#foobar + =>bar' + + A `$' sign in the expansion text, that is not followed by anything +`m4' understands, is simply copied to the macro expansion, as any other +text is. + + define(`foo', `$$$ hello $$$') + => + foo + =>$$$ hello $$$ + + If you want a macro to expand to something like `$12', the judicious +use of nested quoting can put a safe character between the `$' and the +next character, relying on the rescanning to remove the nested quote. +This will prevent `m4' from interpreting the `$' sign as a reference to +an argument. + + define(`foo', `no nested quote: $1') + => + foo(`arg') + =>no nested quote: arg + define(`foo', `nested quote around $: `$'1') + => + foo(`arg') + =>nested quote around $: $1 + define(`foo', `nested empty quote after $: $`'1') + => + foo(`arg') + =>nested empty quote after $: $1 + define(`foo', `nested quote around next character: $`1'') + => + foo(`arg') + =>nested quote around next character: $1 + define(`foo', `nested quote around both: `$1'') + => + foo(`arg') + =>nested quote around both: arg + + +File: m4.info, Node: Undefine, Next: Defn, Prev: Pseudo Arguments, Up: Definitions + +5.4 Deleting a macro +==================== + +A macro definition can be removed with `undefine': + + -- Builtin: undefine (NAME...) + For each argument, remove the macro NAME. The macro names must + necessarily be quoted, since they will be expanded otherwise. + + The expansion of `undefine' is void. The macro `undefine' is + recognized only with parameters. + + foo bar blah + =>foo bar blah + define(`foo', `some')define(`bar', `other')define(`blah', `text') + => + foo bar blah + =>some other text + undefine(`foo') + => + foo bar blah + =>foo other text + undefine(`bar', `blah') + => + foo bar blah + =>foo bar blah + + Undefining a macro inside that macro's expansion is safe; the macro +still expands to the definition that was in effect at the `('. + + define(`f', ``$0':$1') + => + f(f(f(undefine(`f')`hello world'))) + =>f:f:f:hello world + f(`bye') + =>f(bye) + + It is not an error for NAME to have no macro definition. In that +case, `undefine' does nothing. + + +File: m4.info, Node: Defn, Next: Pushdef, Prev: Undefine, Up: Definitions + +5.5 Renaming macros +=================== + +It is possible to rename an already defined macro. To do this, you need +the builtin `defn': + + -- Builtin: defn (NAME...) + Expands to the _quoted definition_ of each NAME. If an argument + is not a defined macro, the expansion for that argument is empty. + + If NAME is a user-defined macro, the quoted definition is simply + the quoted expansion text. If, instead, there is only one NAME + and it is a builtin, the expansion is a special token, which + points to the builtin's internal definition. This token is only + meaningful as the second argument to `define' (and `pushdef'), and + is silently converted to an empty string in most other contexts. + Combining a builtin with anything else is not supported; a warning + is issued and the builtin is omitted from the final expansion. + + The macro `defn' is recognized only with parameters. + + Its normal use is best understood through an example, which shows +how to rename `undefine' to `zap': + + define(`zap', defn(`undefine')) + => + zap(`undefine') + => + undefine(`zap') + =>undefine(zap) + + In this way, `defn' can be used to copy macro definitions, and also +definitions of builtin macros. Even if the original macro is removed, +the other name can still be used to access the definition. + + The fact that macro definitions can be transferred also explains why +you should use `$0', rather than retyping a macro's name in its +definition: + + define(`foo', `This is `$0'') + => + define(`bar', defn(`foo')) + => + bar + =>This is bar + + Macros used as string variables should be referred through `defn', +to avoid unwanted expansion of the text: + + define(`string', `The macro dnl is very useful + ') + => + string + =>The macro + defn(`string') + =>The macro dnl is very useful + => + + However, it is important to remember that `m4' rescanning is purely +textual. If an unbalanced end-quote string occurs in a macro +definition, the rescan will see that embedded quote as the termination +of the quoted string, and the remainder of the macro's definition will +be rescanned unquoted. Thus it is a good idea to avoid unbalanced +end-quotes in macro definitions or arguments to macros. + + define(`foo', a'a) + => + define(`a', `A') + => + define(`echo', `$@') + => + foo + =>A'A + defn(`foo') + =>aA' + echo(foo) + =>AA' + + On the other hand, it is possible to exploit the fact that `defn' +can concatenate multiple macros prior to the rescanning phase, in order +to join the definitions of macros that, in isolation, have unbalanced +quotes. This is particularly useful when one has used several macros to +accumulate text that M4 should rescan as a whole. In the example below, +note how the use of `defn' on `l' in isolation opens a string, which is +not closed until the next line; but used on `l' and `r' together +results in nested quoting. + + define(`l', `<[>')define(`r', `<]>') + => + changequote(`[', `]') + => + defn([l])defn([r]) + ]) + =><[>]defn([r]) + =>) + defn([l], [r]) + =><[>][<]> + + Using `defn' to generate special tokens for builtin macros outside +of expected contexts can sometimes trigger warnings. But most of the +time, such tokens are silently converted to the empty string. + + $ m4 -d + defn(`defn') + => + define(defn(`divnum'), `cannot redefine a builtin token') + error-->m4:stdin:2: Warning: define: invalid macro name ignored + => + divnum + =>0 + len(defn(`divnum')) + =>0 + + Also note that `defn' with multiple arguments can only join text +macros, not builtins, although a future version of GNU M4 may lift this +restriction. + + $ m4 -d + define(`a', `A')define(`AA', `b') + => + traceon(`defn', `define') + => + defn(`a', `divnum', `a') + error-->m4:stdin:3: Warning: cannot concatenate builtin `divnum' + error-->m4trace: -1- defn(`a', `divnum', `a') -> ``A'`A'' + =>AA + define(`mydivnum', defn(`divnum', `divnum'))mydivnum + error-->m4:stdin:4: Warning: cannot concatenate builtin `divnum' + error-->m4:stdin:4: Warning: cannot concatenate builtin `divnum' + error-->m4trace: -2- defn(`divnum', `divnum') + error-->m4trace: -1- define(`mydivnum', `') + => + traceoff(`defn', `define') + => + + +File: m4.info, Node: Pushdef, Next: Indir, Prev: Defn, Up: Definitions + +5.6 Temporarily redefining macros +================================= + +It is possible to redefine a macro temporarily, reverting to the +previous definition at a later time. This is done with the builtins +`pushdef' and `popdef': + + -- Builtin: pushdef (NAME, [EXPANSION]) + -- Builtin: popdef (NAME...) + Analogous to `define' and `undefine'. + + These macros work in a stack-like fashion. A macro is temporarily + redefined with `pushdef', which replaces an existing definition of + NAME, while saving the previous definition, before the new one is + installed. If there is no previous definition, `pushdef' behaves + exactly like `define'. + + If a macro has several definitions (of which only one is + accessible), the topmost definition can be removed with `popdef'. + If there is no previous definition, `popdef' behaves like + `undefine'. + + The expansion of both `pushdef' and `popdef' is void. The macros + `pushdef' and `popdef' are recognized only with parameters. + + define(`foo', `Expansion one.') + => + foo + =>Expansion one. + pushdef(`foo', `Expansion two.') + => + foo + =>Expansion two. + pushdef(`foo', `Expansion three.') + => + pushdef(`foo', `Expansion four.') + => + popdef(`foo') + => + foo + =>Expansion three. + popdef(`foo', `foo') + => + foo + =>Expansion one. + popdef(`foo') + => + foo + =>foo + + If a macro with several definitions is redefined with `define', the +topmost definition is _replaced_ with the new definition. If it is +removed with `undefine', _all_ the definitions are removed, and not +only the topmost one. However, POSIX allows other implementations that +treat `define' as replacing an entire stack of definitions with a +single new definition, so to be portable to other implementations, it +may be worth explicitly using `popdef' and `pushdef' rather than +relying on the GNU behavior of `define'. + + define(`foo', `Expansion one.') + => + foo + =>Expansion one. + pushdef(`foo', `Expansion two.') + => + foo + =>Expansion two. + define(`foo', `Second expansion two.') + => + foo + =>Second expansion two. + undefine(`foo') + => + foo + =>foo + + Local variables within macros are made with `pushdef' and `popdef'. +At the start of the macro a new definition is pushed, within the macro +it is manipulated and at the end it is popped, revealing the former +definition. + + It is possible to temporarily redefine a builtin with `pushdef' and +`defn'. + + +File: m4.info, Node: Indir, Next: Builtin, Prev: Pushdef, Up: Definitions + +5.7 Indirect call of macros +=========================== + +Any macro can be called indirectly with `indir': + + -- Builtin: indir (NAME, [ARGS...]) + Results in a call to the macro NAME, which is passed the rest of + the arguments ARGS. If NAME is not defined, an error message is + printed, and the expansion is void. + + The macro `indir' is recognized only with parameters. + + This can be used to call macros with computed or "invalid" names +(`define' allows such names to be defined): + + define(`$$internal$macro', `Internal macro (name `$0')') + => + $$internal$macro + =>$$internal$macro + indir(`$$internal$macro') + =>Internal macro (name $$internal$macro) + + The point is, here, that larger macro packages can have private +macros defined, that will not be called by accident. They can _only_ be +called through the builtin `indir'. + + One other point to observe is that argument collection occurs before +`indir' invokes NAME, so if argument collection changes the value of +NAME, that will be reflected in the final expansion. This is different +than the behavior when invoking macros directly, where the definition +that was in effect before argument collection is used. + + $ m4 -d + define(`f', `1') + => + f(define(`f', `2')) + =>1 + indir(`f', define(`f', `3')) + =>3 + indir(`f', undefine(`f')) + error-->m4:stdin:4: undefined macro `f' + => + + When handed the result of `defn' (*note Defn::) as one of its +arguments, `indir' defers to the invoked NAME for whether a token +representing a builtin is recognized or flattened to the empty string. + + $ m4 -d + indir(defn(`defn'), `divnum') + error-->m4:stdin:1: Warning: indir: invalid macro name ignored + => + indir(`define', defn(`defn'), `divnum') + error-->m4:stdin:2: Warning: define: invalid macro name ignored + => + indir(`define', `foo', defn(`divnum')) + => + foo + =>0 + indir(`divert', defn(`foo')) + error-->m4:stdin:5: empty string treated as 0 in builtin `divert' + => + + +File: m4.info, Node: Builtin, Prev: Indir, Up: Definitions + +5.8 Indirect call of builtins +============================= + +Builtin macros can be called indirectly with `builtin': + + -- Builtin: builtin (NAME, [ARGS...]) + Results in a call to the builtin NAME, which is passed the rest of + the arguments ARGS. If NAME does not name a builtin, an error + message is printed, and the expansion is void. + + The macro `builtin' is recognized only with parameters. + + This can be used even if NAME has been given another definition that +has covered the original, or been undefined so that no macro maps to +the builtin. + + pushdef(`define', `hidden') + => + undefine(`undefine') + => + define(`foo', `bar') + =>hidden + foo + =>foo + builtin(`define', `foo', defn(`divnum')) + => + foo + =>0 + builtin(`define', `foo', `BAR') + => + foo + =>BAR + undefine(`foo') + =>undefine(foo) + foo + =>BAR + builtin(`undefine', `foo') + => + foo + =>foo + + The NAME argument only matches the original name of the builtin, +even when the `--prefix-builtins' option (or `-P', *note Invoking m4: +Operation modes.) is in effect. This is different from `indir', which +only tracks current macro names. + + $ m4 -P + m4_builtin(`divnum') + =>0 + m4_builtin(`m4_divnum') + error-->m4:stdin:2: undefined builtin `m4_divnum' + => + m4_indir(`divnum') + error-->m4:stdin:3: undefined macro `divnum' + => + m4_indir(`m4_divnum') + =>0 + + Note that `indir' and `builtin' can be used to invoke builtins +without arguments, even when they normally require parameters to be +recognized; but it will provoke a warning, and result in a void +expansion. + + builtin + =>builtin + builtin() + error-->m4:stdin:2: undefined builtin `' + => + builtin(`builtin') + error-->m4:stdin:3: Warning: too few arguments to builtin `builtin' + => + builtin(`builtin',) + error-->m4:stdin:4: undefined builtin `' + => + builtin(`builtin', ``' + ') + error-->m4:stdin:5: undefined builtin ``' + error-->' + => + indir(`index') + error-->m4:stdin:7: Warning: too few arguments to builtin `index' + => + + +File: m4.info, Node: Conditionals, Next: Debugging, Prev: Definitions, Up: Top + +6 Conditionals, loops, and recursion +************************************ + +Macros, expanding to plain text, perhaps with arguments, are not quite +enough. We would like to have macros expand to different things, based +on decisions taken at run-time. For that, we need some kind of +conditionals. Also, we would like to have some kind of loop construct, +so we could do something a number of times, or while some condition is +true. + +* Menu: + +* Ifdef:: Testing if a macro is defined +* Ifelse:: If-else construct, or multibranch +* Shift:: Recursion in `m4' +* Forloop:: Iteration by counting +* Foreach:: Iteration by list contents +* Stacks:: Working with definition stacks +* Composition:: Building macros with macros + + +File: m4.info, Node: Ifdef, Next: Ifelse, Up: Conditionals + +6.1 Testing if a macro is defined +================================= + +There are two different builtin conditionals in `m4'. The first is +`ifdef': + + -- Builtin: ifdef (NAME, STRING-1, [STRING-2]) + If NAME is defined as a macro, `ifdef' expands to STRING-1, + otherwise to STRING-2. If STRING-2 is omitted, it is taken to be + the empty string (according to the normal rules). + + The macro `ifdef' is recognized only with parameters. + + ifdef(`foo', ``foo' is defined', ``foo' is not defined') + =>foo is not defined + define(`foo', `') + => + ifdef(`foo', ``foo' is defined', ``foo' is not defined') + =>foo is defined + ifdef(`no_such_macro', `yes', `no', `extra argument') + error-->m4:stdin:4: Warning: excess arguments to builtin `ifdef' ignored + =>no + + +File: m4.info, Node: Ifelse, Next: Shift, Prev: Ifdef, Up: Conditionals + +6.2 If-else construct, or multibranch +===================================== + +The other conditional, `ifelse', is much more powerful. It can be used +as a way to introduce a long comment, as an if-else construct, or as a +multibranch, depending on the number of arguments supplied: + + -- Builtin: ifelse (COMMENT) + -- Builtin: ifelse (STRING-1, STRING-2, EQUAL, [NOT-EQUAL]) + -- Builtin: ifelse (STRING-1, STRING-2, EQUAL-1, STRING-3, STRING-4, + EQUAL-2, ..., [NOT-EQUAL]) + Used with only one argument, the `ifelse' simply discards it and + produces no output. + + If called with three or four arguments, `ifelse' expands into + EQUAL, if STRING-1 and STRING-2 are equal (character for + character), otherwise it expands to NOT-EQUAL. A final fifth + argument is ignored, after triggering a warning. + + If called with six or more arguments, and STRING-1 and STRING-2 + are equal, `ifelse' expands into EQUAL-1, otherwise the first + three arguments are discarded and the processing starts again. + + The macro `ifelse' is recognized only with parameters. + + Using only one argument is a common `m4' idiom for introducing a +block comment, as an alternative to repeatedly using `dnl'. This +special usage is recognized by GNU `m4', so that in this case, the +warning about missing arguments is never triggered. + + ifelse(`some comments') + => + ifelse(`foo', `bar') + error-->m4:stdin:2: Warning: too few arguments to builtin `ifelse' + => + + Using three or four arguments provides decision points. + + ifelse(`foo', `bar', `true') + => + ifelse(`foo', `foo', `true') + =>true + define(`foo', `bar') + => + ifelse(foo, `bar', `true', `false') + =>true + ifelse(foo, `foo', `true', `false') + =>false + + Notice how the first argument was used unquoted; it is common to +compare the expansion of a macro with a string. With this macro, you +can now reproduce the behavior of blind builtins, where the macro is +recognized only with arguments. + + define(`foo', `ifelse(`$#', `0', ``$0'', `arguments:$#')') + => + foo + =>foo + foo() + =>arguments:1 + foo(`a', `b', `c') + =>arguments:3 + + For an example of a way to make defining blind macros easier, see +*note Composition::. + + The macro `ifelse' can take more than four arguments. If given more +than four arguments, `ifelse' works like a `case' or `switch' statement +in traditional programming languages. If STRING-1 and STRING-2 are +equal, `ifelse' expands into EQUAL-1, otherwise the procedure is +repeated with the first three arguments discarded. This calls for an +example: + + ifelse(`foo', `bar', `third', `gnu', `gnats') + error-->m4:stdin:1: Warning: excess arguments to builtin `ifelse' ignored + =>gnu + ifelse(`foo', `bar', `third', `gnu', `gnats', `sixth') + => + ifelse(`foo', `bar', `third', `gnu', `gnats', `sixth', `seventh') + =>seventh + ifelse(`foo', `bar', `3', `gnu', `gnats', `6', `7', `8') + error-->m4:stdin:4: Warning: excess arguments to builtin `ifelse' ignored + =>7 + + Naturally, the normal case will be slightly more advanced than these +examples. A common use of `ifelse' is in macros implementing loops of +various kinds. + + +File: m4.info, Node: Shift, Next: Forloop, Prev: Ifelse, Up: Conditionals + +6.3 Recursion in `m4' +===================== + +There is no direct support for loops in `m4', but macros can be +recursive. There is no limit on the number of recursion levels, other +than those enforced by your hardware and operating system. + + Loops can be programmed using recursion and the conditionals +described previously. + + There is a builtin macro, `shift', which can, among other things, be +used for iterating through the actual arguments to a macro: + + -- Builtin: shift (ARG1, ...) + Takes any number of arguments, and expands to all its arguments + except ARG1, separated by commas, with each argument quoted. + + The macro `shift' is recognized only with parameters. + + shift + =>shift + shift(`bar') + => + shift(`foo', `bar', `baz') + =>bar,baz + + An example of the use of `shift' is this macro: + + -- Composite: reverse (...) + Takes any number of arguments, and reverses their order. + + It is implemented as: + + define(`reverse', `ifelse(`$#', `0', , `$#', `1', ``$1'', + `reverse(shift($@)), `$1'')') + => + reverse + => + reverse(`foo') + =>foo + reverse(`foo', `bar', `gnats', `and gnus') + =>and gnus, gnats, bar, foo + + While not a very interesting macro, it does show how simple loops +can be made with `shift', `ifelse' and recursion. It also shows that +`shift' is usually used with `$@'. Another example of this is an +implementation of a short-circuiting conditional operator. + + -- Composite: cond (TEST-1, STRING-1, EQUAL-1, [TEST-2], [STRING-2], + [EQUAL-2], ..., [NOT-EQUAL]) + Similar to `ifelse', where an equal comparison between the first + two strings results in the third, otherwise the first three + arguments are discarded and the process repeats. The difference + is that each TEST- is expanded only when it is encountered. + This means that every third argument to `cond' is normally given + one more level of quoting than the corresponding argument to + `ifelse'. + + Here is the implementation of `cond', along with a demonstration of +how it can short-circuit the side effects in `side'. Notice how all +the unquoted side effects happen regardless of how many comparisons are +made with `ifelse', compared with only the relevant effects with `cond'. + + define(`cond', + `ifelse(`$#', `1', `$1', + `ifelse($1, `$2', `$3', + `$0(shift(shift(shift($@))))')')')dnl + define(`side', `define(`counter', incr(counter))$1')dnl + define(`example1', + `define(`counter', `0')dnl + ifelse(side(`$1'), `yes', `one comparison: ', + side(`$1'), `no', `two comparisons: ', + side(`$1'), `maybe', `three comparisons: ', + `side(`default answer: ')')counter')dnl + define(`example2', + `define(`counter', `0')dnl + cond(`side(`$1')', `yes', `one comparison: ', + `side(`$1')', `no', `two comparisons: ', + `side(`$1')', `maybe', `three comparisons: ', + `side(`default answer: ')')counter')dnl + example1(`yes') + =>one comparison: 3 + example1(`no') + =>two comparisons: 3 + example1(`maybe') + =>three comparisons: 3 + example1(`feeling rather indecisive today') + =>default answer: 4 + example2(`yes') + =>one comparison: 1 + example2(`no') + =>two comparisons: 2 + example2(`maybe') + =>three comparisons: 3 + example2(`feeling rather indecisive today') + =>default answer: 4 + + Another common task that requires iteration is joining a list of +arguments into a single string. + + -- Composite: join ([SEPARATOR], [ARGS...]) + -- Composite: joinall ([SEPARATOR], [ARGS...]) + Generate a single-quoted string, consisting of each ARG separated + by SEPARATOR. While `joinall' always outputs a SEPARATOR between + arguments, `join' avoids the SEPARATOR for an empty ARG. + + Here are some examples of its usage, based on the implementation +`m4-1.4.13/examples/join.m4' distributed in this package: + + $ m4 -I examples + include(`join.m4') + => + join,join(`-'),join(`-', `'),join(`-', `', `') + =>,,, + joinall,joinall(`-'),joinall(`-', `'),joinall(`-', `', `') + =>,,,- + join(`-', `1') + =>1 + join(`-', `1', `2', `3') + =>1-2-3 + join(`', `1', `2', `3') + =>123 + join(`-', `', `1', `', `', `2', `') + =>1-2 + joinall(`-', `', `1', `', `', `2', `') + =>-1---2- + join(`,', `1', `2', `3') + =>1,2,3 + define(`nargs', `$#')dnl + nargs(join(`,', `1', `2', `3')) + =>1 + + Examining the implementation shows some interesting points about +several m4 programming idioms. + + $ m4 -I examples + undivert(`join.m4')dnl + =>divert(`-1') + =># join(sep, args) - join each non-empty ARG into a single + =># string, with each element separated by SEP + =>define(`join', + =>`ifelse(`$#', `2', ``$2'', + => `ifelse(`$2', `', `', ``$2'_')$0(`$1', shift(shift($@)))')') + =>define(`_join', + =>`ifelse(`$#$2', `2', `', + => `ifelse(`$2', `', `', ``$1$2'')$0(`$1', shift(shift($@)))')') + =># joinall(sep, args) - join each ARG, including empty ones, + =># into a single string, with each element separated by SEP + =>define(`joinall', ``$2'_$0(`$1', shift($@))') + =>define(`_joinall', + =>`ifelse(`$#', `2', `', ``$1$3'$0(`$1', shift(shift($@)))')') + =>divert`'dnl + + First, notice that this implementation creates helper macros `_join' +and `_joinall'. This division of labor makes it easier to output the +correct number of SEPARATOR instances: `join' and `joinall' are +responsible for the first argument, without a separator, while `_join' +and `_joinall' are responsible for all remaining arguments, always +outputting a separator when outputting an argument. + + Next, observe how `join' decides to iterate to itself, because the +first ARG was empty, or to output the argument and swap over to +`_join'. If the argument is non-empty, then the nested `ifelse' +results in an unquoted `_', which is concatenated with the `$0' to form +the next macro name to invoke. The `joinall' implementation is simpler +since it does not have to suppress empty ARG; it always executes once +then defers to `_joinall'. + + Another important idiom is the idea that SEPARATOR is reused for +each iteration. Each iteration has one less argument, but rather than +discarding `$1' by iterating with `$0(shift($@))', the macro discards +`$2' by using `$0(`$1', shift(shift($@)))'. + + Next, notice that it is possible to compare more than one condition +in a single `ifelse' test. The test of `$#$2' against `2' allows +`_join' to iterate for two separate reasons--either there are still +more than two arguments, or there are exactly two arguments but the +last argument is not empty. + + Finally, notice that these macros require exactly two arguments to +terminate recursion, but that they still correctly result in empty +output when given no ARGS (i.e., zero or one macro argument). On the +first pass when there are too few arguments, the `shift' results in no +output, but leaves an empty string to serve as the required second +argument for the second pass. Put another way, ``$1', shift($@)' is +not the same as `$@', since only the former guarantees at least two +arguments. + + Sometimes, a recursive algorithm requires adding quotes to each +element, or treating multiple arguments as a single element: + + -- Composite: quote (...) + -- Composite: dquote (...) + -- Composite: dquote_elt (...) + Takes any number of arguments, and adds quoting. With `quote', + only one level of quoting is added, effectively removing whitespace + after commas and turning multiple arguments into a single string. + With `dquote', two levels of quoting are added, one around each + element, and one around the list. And with `dquote_elt', two + levels of quoting are added around each element. + + An actual implementation of these three macros is distributed as +`m4-1.4.13/examples/quote.m4' in this package. First, let's examine +their usage: + + $ m4 -I examples + include(`quote.m4') + => + -quote-dquote-dquote_elt- + =>---- + -quote()-dquote()-dquote_elt()- + =>--`'-`'- + -quote(`1')-dquote(`1')-dquote_elt(`1')- + =>-1-`1'-`1'- + -quote(`1', `2')-dquote(`1', `2')-dquote_elt(`1', `2')- + =>-1,2-`1',`2'-`1',`2'- + define(`n', `$#')dnl + -n(quote(`1', `2'))-n(dquote(`1', `2'))-n(dquote_elt(`1', `2'))- + =>-1-1-2- + dquote(dquote_elt(`1', `2')) + =>``1'',``2'' + dquote_elt(dquote(`1', `2')) + =>``1',`2'' + + The last two lines show that when given two arguments, `dquote' +results in one string, while `dquote_elt' results in two. Now, examine +the implementation. Note that `quote' and `dquote_elt' make decisions +based on their number of arguments, so that when called without +arguments, they result in nothing instead of a quoted empty string; +this is so that it is possible to distinguish between no arguments and +an empty first argument. `dquote', on the other hand, results in a +string no matter what, since it is still possible to tell whether it +was invoked without arguments based on the resulting string. + + $ m4 -I examples + undivert(`quote.m4')dnl + =>divert(`-1') + =># quote(args) - convert args to single-quoted string + =>define(`quote', `ifelse(`$#', `0', `', ``$*'')') + =># dquote(args) - convert args to quoted list of quoted strings + =>define(`dquote', ``$@'') + =># dquote_elt(args) - convert args to list of double-quoted strings + =>define(`dquote_elt', `ifelse(`$#', `0', `', `$#', `1', ```$1''', + => ```$1'',$0(shift($@))')') + =>divert`'dnl + + It is worth pointing out that `quote(ARGS)' is more efficient than +`joinall(`,', ARGS)' for producing the same output. + + One more useful macro based on `shift' allows portably selecting an +arbitrary argument (usually greater than the ninth argument), without +relying on the GNU extension of multi-digit arguments (*note +Arguments::). + + -- Composite: argn (N, ...) + Expands to argument N out of the remaining arguments. N must be a + positive number. Usually invoked as `argn(`N',$@)'. + + It is implemented as: + + define(`argn', `ifelse(`$1', 1, ``$2'', + `argn(decr(`$1'), shift(shift($@)))')') + => + argn(`1', `a') + =>a + define(`foo', `argn(`11', $@)') + => + foo(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k', `l') + =>k + + +File: m4.info, Node: Forloop, Next: Foreach, Prev: Shift, Up: Conditionals + +6.4 Iteration by counting +========================= + +Here is an example of a loop macro that implements a simple for loop. + + -- Composite: forloop (ITERATOR, START, END, TEXT) + Takes the name in ITERATOR, which must be a valid macro name, and + successively assign it each integer value from START to END, + inclusive. For each assignment to ITERATOR, append TEXT to the + expansion of the `forloop'. TEXT may refer to ITERATOR. Any + definition of ITERATOR prior to this invocation is restored. + + It can, for example, be used for simple counting: + + $ m4 -I examples + include(`forloop.m4') + => + forloop(`i', `1', `8', `i ') + =>1 2 3 4 5 6 7 8 + + For-loops can be nested, like: + + $ m4 -I examples + include(`forloop.m4') + => + forloop(`i', `1', `4', `forloop(`j', `1', `8', ` (i, j)') + ') + => (1, 1) (1, 2) (1, 3) (1, 4) (1, 5) (1, 6) (1, 7) (1, 8) + => (2, 1) (2, 2) (2, 3) (2, 4) (2, 5) (2, 6) (2, 7) (2, 8) + => (3, 1) (3, 2) (3, 3) (3, 4) (3, 5) (3, 6) (3, 7) (3, 8) + => (4, 1) (4, 2) (4, 3) (4, 4) (4, 5) (4, 6) (4, 7) (4, 8) + => + + The implementation of the `forloop' macro is fairly straightforward. +The `forloop' macro itself is simply a wrapper, which saves the +previous definition of the first argument, calls the internal macro +`_forloop', and re-establishes the saved definition of the first +argument. + + The macro `_forloop' expands the fourth argument once, and tests to +see if the iterator has reached the final value. If it has not +finished, it increments the iterator (using the predefined macro +`incr', *note Incr::), and recurses. + + Here is an actual implementation of `forloop', distributed as +`m4-1.4.13/examples/forloop.m4' in this package: + + $ m4 -I examples + undivert(`forloop.m4')dnl + =>divert(`-1') + =># forloop(var, from, to, stmt) - simple version + =>define(`forloop', `pushdef(`$1', `$2')_forloop($@)popdef(`$1')') + =>define(`_forloop', + => `$4`'ifelse($1, `$3', `', `define(`$1', incr($1))$0($@)')') + =>divert`'dnl + + Notice the careful use of quotes. Certain macro arguments are left +unquoted, each for its own reason. Try to find out _why_ these +arguments are left unquoted, and see what happens if they are quoted. +(As presented, these two macros are useful but not very robust for +general use. They lack even basic error handling for cases like START +less than END, END not numeric, or ITERATOR not being a macro name. +See if you can improve these macros; or *note Answers: Improved +forloop.). + + +File: m4.info, Node: Foreach, Next: Stacks, Prev: Forloop, Up: Conditionals + +6.5 Iteration by list contents +============================== + +Here is an example of a loop macro that implements list iteration. + + -- Composite: foreach (ITERATOR, PAREN-LIST, TEXT) + -- Composite: foreachq (ITERATOR, QUOTE-LIST, TEXT) + Takes the name in ITERATOR, which must be a valid macro name, and + successively assign it each value from PAREN-LIST or QUOTE-LIST. + In `foreach', PAREN-LIST is a comma-separated list of elements + contained in parentheses. In `foreachq', QUOTE-LIST is a + comma-separated list of elements contained in a quoted string. + For each assignment to ITERATOR, append TEXT to the overall + expansion. TEXT may refer to ITERATOR. Any definition of + ITERATOR prior to this invocation is restored. + + As an example, this displays each word in a list inside of a +sentence, using an implementation of `foreach' distributed as +`m4-1.4.13/examples/foreach.m4', and `foreachq' in +`m4-1.4.13/examples/foreachq.m4'. + + $ m4 -I examples + include(`foreach.m4') + => + foreach(`x', (foo, bar, foobar), `Word was: x + ')dnl + =>Word was: foo + =>Word was: bar + =>Word was: foobar + include(`foreachq.m4') + => + foreachq(`x', `foo, bar, foobar', `Word was: x + ')dnl + =>Word was: foo + =>Word was: bar + =>Word was: foobar + + It is possible to be more complex; each element of the PAREN-LIST or +QUOTE-LIST can itself be a list, to pass as further arguments to a +helper macro. This example generates a shell case statement: + + $ m4 -I examples + include(`foreach.m4') + => + define(`_case', ` $1) + $2=" $1";; + ')dnl + define(`_cat', `$1$2')dnl + case $`'1 in + =>case $1 in + foreach(`x', `(`(`a', `vara')', `(`b', `varb')', `(`c', `varc')')', + `_cat(`_case', x)')dnl + => a) + => vara=" a";; + => b) + => varb=" b";; + => c) + => varc=" c";; + esac + =>esac + + The implementation of the `foreach' macro is a bit more involved; it +is a wrapper around two helper macros. First, `_arg1' is needed to +grab the first element of a list. Second, `_foreach' implements the +recursion, successively walking through the original list. Here is a +simple implementation of `foreach': + + $ m4 -I examples + undivert(`foreach.m4')dnl + =>divert(`-1') + =># foreach(x, (item_1, item_2, ..., item_n), stmt) + =># parenthesized list, simple version + =>define(`foreach', `pushdef(`$1')_foreach($@)popdef(`$1')') + =>define(`_arg1', `$1') + =>define(`_foreach', `ifelse(`$2', `()', `', + => `define(`$1', _arg1$2)$3`'$0(`$1', (shift$2), `$3')')') + =>divert`'dnl + + Unfortunately, that implementation is not robust to macro names as +list elements. Each iteration of `_foreach' is stripping another layer +of quotes, leading to erratic results if list elements are not already +fully expanded. The first cut at implementing `foreachq' takes this +into account. Also, when using quoted elements in a PAREN-LIST, the +overall list must be quoted. A QUOTE-LIST has the nice property of +requiring fewer characters to create a list containing the same quoted +elements. To see the difference between the two macros, we attempt to +pass double-quoted macro names in a list, expecting the macro name on +output after one layer of quotes is removed during list iteration and +the final layer removed during the final rescan: + + $ m4 -I examples + define(`a', `1')define(`b', `2')define(`c', `3') + => + include(`foreach.m4') + => + include(`foreachq.m4') + => + foreach(`x', `(``a'', ``(b'', ``c)'')', `x + ') + =>1 + =>(2)1 + => + =>, x + =>) + foreachq(`x', ```a'', ``(b'', ``c)''', `x + ')dnl + =>a + =>(b + =>c) + + Obviously, `foreachq' did a better job; here is its implementation: + + $ m4 -I examples + undivert(`foreachq.m4')dnl + =>include(`quote.m4')dnl + =>divert(`-1') + =># foreachq(x, `item_1, item_2, ..., item_n', stmt) + =># quoted list, simple version + =>define(`foreachq', `pushdef(`$1')_foreachq($@)popdef(`$1')') + =>define(`_arg1', `$1') + =>define(`_foreachq', `ifelse(quote($2), `', `', + => `define(`$1', `_arg1($2)')$3`'$0(`$1', `shift($2)', `$3')')') + =>divert`'dnl + + Notice that `_foreachq' had to use the helper macro `quote' defined +earlier (*note Shift::), to ensure that the embedded `ifelse' call does +not go haywire if a list element contains a comma. Unfortunately, this +implementation of `foreachq' has its own severe flaw. Whereas the +`foreach' implementation was linear, this macro is quadratic in the +number of list elements, and is much more likely to trip up the limit +set by the command line option `--nesting-limit' (or `-L', *note +Invoking m4: Limits control.). Additionally, this implementation does +not expand `defn(`ITERATOR')' very well, when compared with `foreach'. + + $ m4 -I examples + include(`foreach.m4')include(`foreachq.m4') + => + foreach(`name', `(`a', `b')', ` defn(`name')') + => a b + foreachq(`name', ``a', `b'', ` defn(`name')') + => _arg1(`a', `b') _arg1(shift(`a', `b')) + + It is possible to have robust iteration with linear behavior and sane +ITERATOR contents for either list style. See if you can learn from the +best elements of both of these implementations to create robust macros +(or *note Answers: Improved foreach.). + + +File: m4.info, Node: Stacks, Next: Composition, Prev: Foreach, Up: Conditionals + +6.6 Working with definition stacks +================================== + +Thanks to `pushdef', manipulation of a stack is an intrinsic operation +in `m4'. Normally, only the topmost definition in a stack is +important, but sometimes, it is desirable to manipulate the entire +definition stack. + + -- Composite: stack_foreach (MACRO, ACTION) + -- Composite: stack_foreach_lifo (MACRO, ACTION) + For each of the `pushdef' definitions associated with MACRO, + invoke the macro ACTION with a single argument of that definition. + `stack_foreach' visits the oldest definition first, while + `stack_foreach_lifo' visits the current definition first. ACTION + should not modify or dereference MACRO. There are a few special + macros, such as `defn', which cannot be used as the MACRO + parameter. + + A sample implementation of these macros is distributed in the file +`m4-1.4.13/examples/stack.m4'. + + $ m4 -I examples + include(`stack.m4') + => + pushdef(`a', `1')pushdef(`a', `2')pushdef(`a', `3') + => + define(`show', ``$1' + ') + => + stack_foreach(`a', `show')dnl + =>1 + =>2 + =>3 + stack_foreach_lifo(`a', `show')dnl + =>3 + =>2 + =>1 + + Now for the implementation. Note the definition of a helper macro, +`_stack_reverse', which destructively swaps the contents of one stack +of definitions into the reverse order in the temporary macro `tmp-$1'. +By calling the helper twice, the original order is restored back into +the macro `$1'; since the operation is destructive, this explains why +`$1' must not be modified or dereferenced during the traversal. The +caller can then inject additional code to pass the definition currently +being visited to `$2'. The choice of helper names is intentional; +since `-' is not valid as part of a macro name, there is no risk of +conflict with a valid macro name, and the code is guaranteed to use +`defn' where necessary. Finally, note that any macro used in the +traversal of a `pushdef' stack, such as `pushdef' or `defn', cannot be +handled by `stack_foreach', since the macro would temporarily be +undefined during the algorithm. + + $ m4 -I examples + undivert(`stack.m4')dnl + =>divert(`-1') + =># stack_foreach(macro, action) + =># Invoke ACTION with a single argument of each definition + =># from the definition stack of MACRO, starting with the oldest. + =>define(`stack_foreach', + =>`_stack_reverse(`$1', `tmp-$1')'dnl + =>`_stack_reverse(`tmp-$1', `$1', `$2(defn(`$1'))')') + =># stack_foreach_lifo(macro, action) + =># Invoke ACTION with a single argument of each definition + =># from the definition stack of MACRO, starting with the newest. + =>define(`stack_foreach_lifo', + =>`_stack_reverse(`$1', `tmp-$1', `$2(defn(`$1'))')'dnl + =>`_stack_reverse(`tmp-$1', `$1')') + =>define(`_stack_reverse', + =>`ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0($@)')') + =>divert`'dnl + + +File: m4.info, Node: Composition, Prev: Stacks, Up: Conditionals + +6.7 Building macros with macros +=============================== + +Since m4 is a macro language, it is possible to write macros that can +build other macros. First on the list is a way to automate the +creation of blind macros. + + -- Composite: define_blind (NAME, [VALUE]) + Defines NAME as a blind macro, such that NAME will expand to VALUE + only when given explicit arguments. VALUE should not be the + result of `defn' (*note Defn::). This macro is only recognized + with parameters, and results in an empty string. + + Defining a macro to define another macro can be a bit tricky. We +want to use a literal `$#' in the argument to the nested `define'. +However, if `$' and `#' are adjacent in the definition of +`define_blind', then it would be expanded as the number of arguments to +`define_blind' rather than the intended number of arguments to NAME. +The solution is to pass the difficult characters through extra +arguments to a helper macro `_define_blind'. When composing macros, it +is a common idiom to need a helper macro to concatenate text that forms +parameters in the composed macro, rather than interpreting the text as +a parameter of the composing macro. + + As for the limitation against using `defn', there are two reasons. +If a macro was previously defined with `define_blind', then it can +safely be renamed to a new blind macro using plain `define'; using +`define_blind' to rename it just adds another layer of `ifelse', +occupying memory and slowing down execution. And if a macro is a +builtin, then it would result in an attempt to define a macro +consisting of both text and a builtin token; this is not supported, and +the builtin token is flattened to an empty string. + + With that explanation, here's the definition, and some sample usage. +Notice that `define_blind' is itself a blind macro. + + $ m4 -d + define(`define_blind', `ifelse(`$#', `0', ``$0'', + `_$0(`$1', `$2', `$'`#', `$'`0')')') + => + define(`_define_blind', `define(`$1', + `ifelse(`$3', `0', ``$4'', `$2')')') + => + define_blind + =>define_blind + define_blind(`foo', `arguments were $*') + => + foo + =>foo + foo(`bar') + =>arguments were bar + define(`blah', defn(`foo')) + => + blah + =>blah + blah(`a', `b') + =>arguments were a,b + defn(`blah') + =>ifelse(`$#', `0', ``$0'', `arguments were $*') + + Another interesting composition tactic is argument "currying", or +factoring a macro that takes multiple arguments for use in a context +that provides exactly one argument. + + -- Composite: curry (MACRO, ...) + Expand to a macro call that takes exactly one argument, then + appends that argument to the original arguments and invokes MACRO + with the resulting list of arguments. + + A demonstration of currying makes the intent of this macro a little +more obvious. The macro `stack_foreach' mentioned earlier is an example +of a context that provides exactly one argument to a macro name. But +coupled with currying, we can invoke `reverse' with two arguments for +each definition of a macro stack. This example uses the file +`m4-1.4.13/examples/curry.m4' included in the distribution. + + $ m4 -I examples + include(`curry.m4')include(`stack.m4') + => + define(`reverse', `ifelse(`$#', `0', , `$#', `1', ``$1'', + `reverse(shift($@)), `$1'')') + => + pushdef(`a', `1')pushdef(`a', `2')pushdef(`a', `3') + => + stack_foreach(`a', `:curry(`reverse', `4')') + =>:1, 4:2, 4:3, 4 + curry(`curry', `reverse', `1')(`2')(`3') + =>3, 2, 1 + + Now for the implementation. Notice how `curry' leaves off with a +macro name but no open parenthesis, while still in the middle of +collecting arguments for `$1'. The macro `_curry' is the helper macro +that takes one argument, then adds it to the list and finally supplies +the closing parenthesis. The use of a comma inside the `shift' call +allows currying to also work for a macro that takes one argument, +although it often makes more sense to invoke that macro directly rather +than going through `curry'. + + $ m4 -I examples + undivert(`curry.m4')dnl + =>divert(`-1') + =># curry(macro, args) + =># Expand to a macro call that takes one argument, then invoke + =># macro(args, extra). + =>define(`curry', `$1(shift($@,)_$0') + =>define(`_curry', ``$1')') + =>divert`'dnl + + Unfortunately, with M4 1.4.x, `curry' is unable to handle builtin +tokens, which are silently flattened to the empty string when passed +through another text macro. This limitation will be lifted in a future +release of M4. + + Putting the last few concepts together, it is possible to copy or +rename an entire stack of macro definitions. + + -- Composite: copy (SOURCE, DEST) + -- Composite: rename (SOURCE, DEST) + Ensure that DEST is undefined, then define it to the same stack of + definitions currently in SOURCE. `copy' leaves SOURCE unchanged, + while `rename' undefines SOURCE. There are only a few macros, + such as `copy' or `defn', which cannot be copied via this macro. + + The implementation is relatively straightforward (although since it +uses `curry', it is unable to copy builtin macros, such as the second +definition of `a' as a synonym for `divnum'. See if you can design a +version that works around this limitation, or *note Answers: Improved +copy.). + + $ m4 -I examples + include(`curry.m4')include(`stack.m4') + => + define(`rename', `copy($@)undefine(`$1')')dnl + define(`copy', `ifdef(`$2', `errprint(`$2 already defined + ')m4exit(`1')', + `stack_foreach(`$1', `curry(`pushdef', `$2')')')')dnl + pushdef(`a', `1')pushdef(`a', defn(`divnum'))pushdef(`a', `2') + => + copy(`a', `b') + => + rename(`b', `c') + => + a b c + =>2 b 2 + popdef(`a', `c')c a + => 0 + popdef(`a', `c')a c + =>1 1 + + +File: m4.info, Node: Debugging, Next: Input Control, Prev: Conditionals, Up: Top + +7 How to debug macros and input +******************************* + +When writing macros for `m4', they often do not work as intended on the +first try (as is the case with most programming languages). +Fortunately, there is support for macro debugging in `m4'. + +* Menu: + +* Dumpdef:: Displaying macro definitions +* Trace:: Tracing macro calls +* Debug Levels:: Controlling debugging output +* Debug Output:: Saving debugging output + + +File: m4.info, Node: Dumpdef, Next: Trace, Up: Debugging + +7.1 Displaying macro definitions +================================ + +If you want to see what a name expands into, you can use the builtin +`dumpdef': + + -- Builtin: dumpdef ([NAMES...]) + Accepts any number of arguments. If called without any arguments, + it displays the definitions of all known names, otherwise it + displays the definitions of the NAMES given. The output is + printed to the current debug file (usually standard error), and is + sorted by name. If an unknown name is encountered, a warning is + printed. + + The expansion of `dumpdef' is void. + + $ m4 -d + define(`foo', `Hello world.') + => + dumpdef(`foo') + error-->foo: `Hello world.' + => + dumpdef(`define') + error-->define: + => + + The last example shows how builtin macros definitions are displayed. +The definition that is dumped corresponds to what would occur if the +macro were to be called at that point, even if other definitions are +still live due to redefining a macro during argument collection. + + $ m4 -d + pushdef(`f', ``$0'1')pushdef(`f', ``$0'2') + => + f(popdef(`f')dumpdef(`f')) + error-->f: ``$0'1' + =>f2 + f(popdef(`f')dumpdef(`f')) + error-->m4:stdin:3: undefined macro `f' + =>f1 + + *Note Debug Levels::, for information on controlling the details of +the display. + + +File: m4.info, Node: Trace, Next: Debug Levels, Prev: Dumpdef, Up: Debugging + +7.2 Tracing macro calls +======================= + +It is possible to trace macro calls and expansions through the builtins +`traceon' and `traceoff': + + -- Builtin: traceon ([NAMES...]) + -- Builtin: traceoff ([NAMES...]) + When called without any arguments, `traceon' and `traceoff' will + turn tracing on and off, respectively, for all currently defined + macros. + + When called with arguments, only the macros listed in NAMES are + affected, whether or not they are currently defined. + + The expansion of `traceon' and `traceoff' is void. + + Whenever a traced macro is called and the arguments have been +collected, the call is displayed. If the expansion of the macro call +is not void, the expansion can be displayed after the call. The output +is printed to the current debug file (defaulting to standard error, +*note Debug Output::). + + $ m4 -d + define(`foo', `Hello World.') + => + define(`echo', `$@') + => + traceon(`foo', `echo') + => + foo + error-->m4trace: -1- foo -> `Hello World.' + =>Hello World. + echo(`gnus', `and gnats') + error-->m4trace: -1- echo(`gnus', `and gnats') -> ``gnus',`and gnats'' + =>gnus,and gnats + + The number between dashes is the depth of the expansion. It is one +most of the time, signifying an expansion at the outermost level, but it +increases when macro arguments contain unquoted macro calls. The +maximum number that will appear between dashes is controlled by the +option `--nesting-limit' (or `-L', *note Invoking m4: Limits control.). +Additionally, the option `--trace' (or `-t') can be used to invoke +`traceon(NAME)' before parsing input. + + $ m4 -L 3 -t ifelse + ifelse(`one level') + error-->m4trace: -1- ifelse + => + ifelse(ifelse(ifelse(`three levels'))) + error-->m4trace: -3- ifelse + error-->m4trace: -2- ifelse + error-->m4trace: -1- ifelse + => + ifelse(ifelse(ifelse(ifelse(`four levels')))) + error-->m4:stdin:3: recursion limit of 3 exceeded, use -L to change it + + Tracing by name is an attribute that is preserved whether the macro +is defined or not. This allows the selection of macros to trace before +those macros are defined. + + $ m4 -d + traceoff(`foo') + => + traceon(`foo') + => + foo + =>foo + defn(`foo') + => + define(`foo', `bar') + => + foo + error-->m4trace: -1- foo -> `bar' + =>bar + undefine(`foo') + => + ifdef(`foo', `yes', `no') + =>no + indir(`foo') + error-->m4:stdin:9: undefined macro `foo' + => + define(`foo', `blah') + => + foo + error-->m4trace: -1- foo -> `blah' + =>blah + traceoff + => + foo + =>blah + + Tracing even works on builtins. However, `defn' (*note Defn::) does +not transfer tracing status. + + $ m4 -d + traceon(`traceon') + => + traceon(`traceoff') + error-->m4trace: -1- traceon(`traceoff') + => + traceoff(`traceoff') + error-->m4trace: -1- traceoff(`traceoff') + => + traceoff(`traceon') + => + traceon(`eval', `m4_divnum') + => + define(`m4_eval', defn(`eval')) + => + define(`m4_divnum', defn(`divnum')) + => + eval(divnum) + error-->m4trace: -1- eval(`0') -> `0' + =>0 + m4_eval(m4_divnum) + error-->m4trace: -2- m4_divnum -> `0' + =>0 + + *Note Debug Levels::, for information on controlling the details of +the display. The format of the trace output is not specified by POSIX, +and varies between implementations of `m4'. + + +File: m4.info, Node: Debug Levels, Next: Debug Output, Prev: Trace, Up: Debugging + +7.3 Controlling debugging output +================================ + +The `-d' option to `m4' (or `--debug', *note Invoking m4: Debugging +options.) controls the amount of details presented in three categories +of output. Trace output is requested by `traceon' (*note Trace::), and +each line is prefixed by `m4trace:' in relation to a macro invocation. +Debug output tracks useful events not associated with a macro +invocation, and each line is prefixed by `m4debug:'. Finally, +`dumpdef' (*note Dumpdef::) output is affected, with no prefix added to +the output lines. + + The FLAGS following the option can be one or more of the following: + +`a' + In trace output, show the actual arguments that were collected + before invoking the macro. This applies to all macro calls if the + `t' flag is used, otherwise only the macros covered by calls of + `traceon'. Arguments are subject to length truncation specified by + the command line option `--arglength' (or `-l'). + +`c' + In trace output, show several trace lines for each macro call. A + line is shown when the macro is seen, but before the arguments are + collected; a second line when the arguments have been collected + and a third line after the call has completed. + +`e' + In trace output, show the expansion of each macro call, if it is + not void. This applies to all macro calls if the `t' flag is used, + otherwise only the macros covered by calls of `traceon'. The + expansion is subject to length truncation specified by the command + line option `--arglength' (or `-l'). + +`f' + In debug and trace output, include the name of the current input + file in the output line. + +`i' + In debug output, print a message each time the current input file + is changed. + +`l' + In debug and trace output, include the current input line number + in the output line. + +`p' + In debug output, print a message when a named file is found + through the path search mechanism (*note Search Path::), giving + the actual file name used. + +`q' + In trace and dumpdef output, quote actual arguments and macro + expansions in the display with the current quotes. This is useful + in connection with the `a' and `e' flags above. + +`t' + In trace output, trace all macro calls made in this invocation of + `m4', regardless of the settings of `traceon'. + +`x' + In trace output, add a unique `macro call id' to each line of the + trace output. This is useful in connection with the `c' flag + above. + +`V' + A shorthand for all of the above flags. + + If no flags are specified with the `-d' option, the default is +`aeq'. The examples throughout this manual assume the default flags. + + There is a builtin macro `debugmode', which allows on-the-fly +control of the debugging output format: + + -- Builtin: debugmode ([FLAGS]) + The argument FLAGS should be a subset of the letters listed above. + As special cases, if the argument starts with a `+', the flags are + added to the current debug flags, and if it starts with a `-', they + are removed. If no argument is present, all debugging flags are + cleared (as if no `-d' was given), and with an empty argument the + flags are reset to the default of `aeq'. + + The expansion of `debugmode' is void. + + $ m4 + define(`foo', `FOO') + => + traceon(`foo') + => + debugmode() + => + foo + error-->m4trace: -1- foo -> `FOO' + =>FOO + debugmode + => + foo + error-->m4trace: -1- foo + =>FOO + debugmode(`+l') + => + foo + error-->m4trace:8: -1- foo + =>FOO + + The following example demonstrates the behavior of length truncation, +when specified on the command line. Note that each argument and the +final result are individually truncated. Also, the special tokens for +builtin functions are not truncated. + + $ m4 -d -l 6 + define(`echo', `$@')debugmode(`+t') + => + echo(`1', `long string') + error-->m4trace: -1- echo(`1', `long s...') -> ``1',`l...' + =>1,long string + indir(`echo', defn(`changequote')) + error-->m4trace: -2- defn(`change...') + error-->m4trace: -1- indir(`echo', ) -> ``'' + => + + This example shows the effects of the debug flags that are not +related to macro tracing. + + $ m4 -dip -I examples + error-->m4debug: input read from stdin + include(`foo')dnl + error-->m4debug: path search for `foo' found `examples/foo' + error-->m4debug: input read from examples/foo + =>bar + error-->m4debug: input reverted to stdin, line 1 + ^D + error-->m4debug: input exhausted + + +File: m4.info, Node: Debug Output, Prev: Debug Levels, Up: Debugging + +7.4 Saving debugging output +=========================== + +Debug and tracing output can be redirected to files using either the +`--debugfile' option to `m4' (*note Invoking m4: Debugging options.), +or with the builtin macro `debugfile': + + -- Builtin: debugfile ([FILE]) + Sends all further debug and trace output to FILE, opened in append + mode. If FILE is the empty string, debug and trace output are + discarded. If `debugfile' is called without any arguments, debug + and trace output are sent to standard error. This does not affect + warnings, error messages, or `errprint' output, which are always + sent to standard error. If FILE cannot be opened, the current + debug file is unchanged, and an error is issued. + + The expansion of `debugfile' is void. + + $ m4 -d + traceon(`divnum') + => + divnum(`extra') + error-->m4:stdin:2: Warning: excess arguments to builtin `divnum' ignored + error-->m4trace: -1- divnum(`extra') -> `0' + =>0 + debugfile() + => + divnum(`extra') + error-->m4:stdin:4: Warning: excess arguments to builtin `divnum' ignored + =>0 + debugfile + => + divnum + error-->m4trace: -1- divnum -> `0' + =>0 + + +File: m4.info, Node: Input Control, Next: File Inclusion, Prev: Debugging, Up: Top + +8 Input control +*************** + +This chapter describes various builtin macros for controlling the input +to `m4'. + +* Menu: + +* Dnl:: Deleting whitespace in input +* Changequote:: Changing the quote characters +* Changecom:: Changing the comment delimiters +* Changeword:: Changing the lexical structure of words +* M4wrap:: Saving text until end of input + + +File: m4.info, Node: Dnl, Next: Changequote, Up: Input Control + +8.1 Deleting whitespace in input +================================ + +The builtin `dnl' stands for "Discard to Next Line": + + -- Builtin: dnl + All characters, up to and including the next newline, are discarded + without performing any macro expansion. A warning is issued if + the end of the file is encountered without a newline. + + The expansion of `dnl' is void. + + It is often used in connection with `define', to remove the newline +that follows the call to `define'. Thus + + define(`foo', `Macro `foo'.')dnl A very simple macro, indeed. + foo + =>Macro foo. + + The input up to and including the next newline is discarded, as +opposed to the way comments are treated (*note Comments::). + + Usually, `dnl' is immediately followed by an end of line or some +other whitespace. GNU `m4' will produce a warning diagnostic if `dnl' +is followed by an open parenthesis. In this case, `dnl' will collect +and process all arguments, looking for a matching close parenthesis. +All predictable side effects resulting from this collection will take +place. `dnl' will return no output. The input following the matching +close parenthesis up to and including the next newline, on whatever +line containing it, will still be discarded. + + dnl(`args are ignored, but side effects occur', + define(`foo', `like this')) while this text is ignored: undefine(`foo') + error-->m4:stdin:1: Warning: excess arguments to builtin `dnl' ignored + See how `foo' was defined, foo? + =>See how foo was defined, like this? + + If the end of file is encountered without a newline character, a +warning is issued and dnl stops consuming input. + + m4wrap(`m4wrap(`2 hi + ')0 hi dnl 1 hi') + => + define(`hi', `HI') + => + ^D + error-->m4:stdin:1: Warning: end of file treated as newline + =>0 HI 2 HI + + +File: m4.info, Node: Changequote, Next: Changecom, Prev: Dnl, Up: Input Control + +8.2 Changing the quote characters +================================= + +The default quote delimiters can be changed with the builtin +`changequote': + + -- Builtin: changequote ([START = ``'], [END = `'']) + This sets START as the new begin-quote delimiter and END as the + new end-quote delimiter. If both arguments are missing, the + default quotes (``' and `'') are used. If START is void, then + quoting is disabled. Otherwise, if END is missing or void, the + default end-quote delimiter (`'') is used. The quote delimiters + can be of any length. + + The expansion of `changequote' is void. + + changequote(`[', `]') + => + define([foo], [Macro [foo].]) + => + foo + =>Macro foo. + + The quotation strings can safely contain eight-bit characters. If +no single character is appropriate, START and END can be of any length. +Other implementations cap the delimiter length to five characters, but +GNU has no inherent limit. + + changequote(`[[[', `]]]') + => + define([[[foo]]], [[[Macro [[[[[foo]]]]].]]]) + => + foo + =>Macro [[foo]]. + + Calling `changequote' with START as the empty string will +effectively disable the quoting mechanism, leaving no way to quote text. +However, using an empty string is not portable, as some other +implementations of `m4' revert to the default quoting, while others +preserve the prior non-empty delimiter. If START is not empty, then an +empty END will use the default end-quote delimiter of `'', as +otherwise, it would be impossible to end a quoted string. Again, this +is not portable, as some other `m4' implementations reuse START as the +end-quote delimiter, while others preserve the previous non-empty +value. Omitting both arguments restores the default begin-quote and +end-quote delimiters; fortunately this behavior is portable to all +implementations of `m4'. + + define(`foo', `Macro `FOO'.') + => + changequote(`', `') + => + foo + =>Macro `FOO'. + `foo' + =>`Macro `FOO'.' + changequote(`,) + => + foo + =>Macro FOO. + + There is no way in `m4' to quote a string containing an unmatched +begin-quote, except using `changequote' to change the current quotes. + + If the quotes should be changed from, say, `[' to `[[', temporary +quote characters have to be defined. To achieve this, two calls of +`changequote' must be made, one for the temporary quotes and one for +the new quotes. + + Macros are recognized in preference to the begin-quote string, so if +a prefix of START can be recognized as part of a potential macro name, +the quoting mechanism is effectively disabled. Unless you use +`changeword' (*note Changeword::), this means that START should not +begin with a letter, digit, or `_' (underscore). However, even though +quoted strings are not recognized, the quote characters can still be +discerned in macro expansion and in trace output. + + define(`echo', `$@') + => + define(`hi', `HI') + => + changequote(`q', `Q') + => + q hi Q hi + =>q HI Q HI + echo(hi) + =>qHIQ + changequote + => + changequote(`-', `EOF') + => + - hi EOF hi + => hi HI + changequote + => + changequote(`1', `2') + => + hi1hi2 + =>hi1hi2 + hi 1hi2 + =>HI hi + + Quotes are recognized in preference to argument collection. In +particular, if START is a single `(', then argument collection is +effectively disabled. For portability with other implementations, it +is a good idea to avoid `(', `,', and `)' as the first character in +START. + + define(`echo', `$#:$@:') + => + define(`hi', `HI') + => + changequote(`(',`)') + => + echo(hi) + =>0::hi + changequote + => + changequote(`((', `))') + => + echo(hi) + =>1:HI: + echo((hi)) + =>0::hi + changequote + => + changequote(`,', `)') + => + echo(hi,hi)bye) + =>1:HIhibye: + + However, if you are not worried about portability, using `(' and `)' +as quoting characters has an interesting property--you can use it to +compute a quoted string containing the expansion of any quoted text, as +long as the expansion results in both balanced quotes and balanced +parentheses. The trick is realizing `expand' uses `$1' unquoted, to +trigger its expansion using the normal quoting characters, but uses +extra parentheses to group unquoted commas that occur in the expansion +without consuming whitespace following those commas. Then `_expand' +uses `changequote' to convert the extra parentheses back into quoting +characters. Note that it takes two more `changequote' invocations to +restore the original quotes. Contrast the behavior on whitespace when +using `$*', via `quote', to attempt the same task. + + changequote(`[', `]')dnl + define([a], [1, (b)])dnl + define([b], [2])dnl + define([quote], [[$*]])dnl + define([expand], [_$0(($1))])dnl + define([_expand], + [changequote([(], [)])$1changequote`'changequote(`[', `]')])dnl + expand([a, a, [a, a], [[a, a]]]) + =>1, (2), 1, (2), a, a, [a, a] + quote(a, a, [a, a], [[a, a]]) + =>1,(2),1,(2),a, a,[a, a] + + If END is a prefix of START, the end-quote will be recognized in +preference to a nested begin-quote. In particular, changing the quotes +to have the same string for START and END disables nesting of quotes. +When quote nesting is disabled, it is impossible to double-quote +strings across macro expansions, so using the same string is not done +very often. + + define(`hi', `HI') + => + changequote(`""', `"') + => + ""hi"""hi" + =>hihi + ""hi" ""hi" + =>hi hi + ""hi"" "hi" + =>hi" "HI" + changequote + => + `hi`hi'hi' + =>hi`hi'hi + changequote(`"', `"') + => + "hi"hi"hi" + =>hiHIhi + + It is an error if the end of file occurs within a quoted string. + + `hello world' + =>hello world + `dangling quote + ^D + error-->m4:stdin:2: ERROR: end of file in string + + ifelse(`dangling quote + ^D + error-->m4:stdin:1: ERROR: end of file in string + + +File: m4.info, Node: Changecom, Next: Changeword, Prev: Changequote, Up: Input Control + +8.3 Changing the comment delimiters +=================================== + +The default comment delimiters can be changed with the builtin macro +`changecom': + + -- Builtin: changecom ([START], [END = `']) + This sets START as the new begin-comment delimiter and END as the + new end-comment delimiter. If both arguments are missing, or + START is void, then comments are disabled. Otherwise, if END is + missing or void, the default end-comment delimiter of newline is + used. The comment delimiters can be of any length. + + The expansion of `changecom' is void. + + define(`comment', `COMMENT') + => + # A normal comment + =># A normal comment + changecom(`/*', `*/') + => + # Not a comment anymore + =># Not a COMMENT anymore + But: /* this is a comment now */ while this is not a comment + =>But: /* this is a comment now */ while this is not a COMMENT + + Note how comments are copied to the output, much as if they were +quoted strings. If you want the text inside a comment expanded, quote +the begin-comment delimiter. + + Calling `changecom' without any arguments, or with START as the +empty string, will effectively disable the commenting mechanism. To +restore the original comment start of `#', you must explicitly ask for +it. If START is not empty, then an empty END will use the default +end-comment delimiter of newline, as otherwise, it would be impossible +to end a comment. However, this is not portable, as some other `m4' +implementations preserve the previous non-empty delimiters instead. + + define(`comment', `COMMENT') + => + changecom + => + # Not a comment anymore + =># Not a COMMENT anymore + changecom(`#', `') + => + # comment again + =># comment again + + The comment strings can safely contain eight-bit characters. If no +single character is appropriate, START and END can be of any length. +Other implementations cap the delimiter length to five characters, but +GNU has no inherent limit. + + Comments are recognized in preference to macros. However, this is +not compatible with other implementations, where macros and even quoting +takes precedence over comments, so it may change in a future release. +For portability, this means that START should not begin with a letter, +digit, or `_' (underscore), and that neither the start-quote nor the +start-comment string should be a prefix of the other. + + define(`hi', `HI') + => + define(`hi1hi2', `hello') + => + changecom(`q', `Q') + => + q hi Q hi + =>q hi Q HI + changecom(`1', `2') + => + hi1hi2 + =>hello + hi 1hi2 + =>HI 1hi2 + + Comments are recognized in preference to argument collection. In +particular, if START is a single `(', then argument collection is +effectively disabled. For portability with other implementations, it +is a good idea to avoid `(', `,', and `)' as the first character in +START. + + define(`echo', `$#:$*:$@:') + => + define(`hi', `HI') + => + changecom(`(',`)') + => + echo(hi) + =>0:::(hi) + changecom + => + changecom(`((', `))') + => + echo(hi) + =>1:HI:HI: + echo((hi)) + =>0:::((hi)) + changecom(`,', `)') + => + echo(hi,hi)bye) + =>1:HI,hi)bye:HI,hi)bye: + changecom + => + echo(hi,`,`'hi',hi) + =>3:HI,,HI,HI:HI,,`'hi,HI: + echo(hi,`,`'hi',hi`'changecom(`,,', `hi')) + =>3:HI,,`'hi,HI:HI,,`'hi,HI: + + It is an error if the end of file occurs within a comment. + + changecom(`/*', `*/') + => + /*dangling comment + ^D + error-->m4:stdin:2: ERROR: end of file in comment + + +File: m4.info, Node: Changeword, Next: M4wrap, Prev: Changecom, Up: Input Control + +8.4 Changing the lexical structure of words +=========================================== + + The macro `changeword' and all associated functionality is + experimental. It is only available if the `--enable-changeword' + option was given to `configure', at GNU `m4' installation time. + The functionality will go away in the future, to be replaced by + other new features that are more efficient at providing the same + capabilities. _Do not rely on it_. Please direct your comments + about it the same way you would do for bugs. + + A file being processed by `m4' is split into quoted strings, words +(potential macro names) and simple tokens (any other single character). +Initially a word is defined by the following regular expression: + + [_a-zA-Z][_a-zA-Z0-9]* + + Using `changeword', you can change this regular expression: + + -- Optional builtin: changeword (REGEX) + Changes the regular expression for recognizing macro names to be + REGEX. If REGEX is empty, use `[_a-zA-Z][_a-zA-Z0-9]*'. REGEX + must obey the constraint that every prefix of the desired final + pattern is also accepted by the regular expression. If REGEX + contains grouping parentheses, the macro invoked is the portion + that matched the first group, rather than the entire matching + string. + + The expansion of `changeword' is void. The macro `changeword' is + recognized only with parameters. + + Relaxing the lexical rules of `m4' might be useful (for example) if +you wanted to apply translations to a file of numbers: + + ifdef(`changeword', `', `errprint(` skipping: no changeword support + ')m4exit(`77')')dnl + changeword(`[_a-zA-Z0-9]+') + => + define(`1', `0')1 + =>0 + + Tightening the lexical rules is less useful, because it will +generally make some of the builtins unavailable. You could use it to +prevent accidental call of builtins, for example: + + ifdef(`changeword', `', `errprint(` skipping: no changeword support + ')m4exit(`77')')dnl + define(`_indir', defn(`indir')) + => + changeword(`_[_a-zA-Z0-9]*') + => + esyscmd(`foo') + =>esyscmd(foo) + _indir(`esyscmd', `echo hi') + =>hi + => + + Because `m4' constructs its words a character at a time, there is a +restriction on the regular expressions that may be passed to +`changeword'. This is that if your regular expression accepts `foo', +it must also accept `f' and `fo'. + + ifdef(`changeword', `', `errprint(` skipping: no changeword support + ')m4exit(`77')')dnl + define(`foo + ', `bar + ') + => + dnl This example wants to recognize changeword, dnl, and `foo\n'. + dnl First, we check that our regexp will match. + regexp(`changeword', `[cd][a-z]*\|foo[ + ]') + =>0 + regexp(`foo + ', `[cd][a-z]*\|foo[ + ]') + =>0 + regexp(`f', `[cd][a-z]*\|foo[ + ]') + =>-1 + foo + =>foo + changeword(`[cd][a-z]*\|foo[ + ]') + => + dnl Even though `foo\n' matches, we forgot to allow `f'. + foo + =>foo + changeword(`[cd][a-z]*\|fo*[ + ]?') + => + dnl Now we can call `foo\n'. + foo + =>bar + + `changeword' has another function. If the regular expression +supplied contains any grouped subexpressions, then text outside the +first of these is discarded before symbol lookup. So: + + ifdef(`changeword', `', `errprint(` skipping: no changeword support + ')m4exit(`77')')dnl + ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics + ')m4exit(`77')')dnl + changecom(`/*', `*/')dnl + define(`foo', `bar')dnl + changeword(`#\([_a-zA-Z0-9]*\)') + => + #esyscmd(`echo foo \#foo') + =>foo bar + => + + `m4' now requires a `#' mark at the beginning of every macro +invocation, so one can use `m4' to preprocess plain text without losing +various words like `divert'. + + In `m4', macro substitution is based on text, while in TeX, it is +based on tokens. `changeword' can throw this difference into relief. +For example, here is the same idea represented in TeX and `m4'. First, +the TeX version: + + \def\a{\message{Hello}} + \catcode`\@=0 + \catcode`\\=12 + @a + @bye + =>Hello + +Then, the `m4' version: + + ifdef(`changeword', `', `errprint(` skipping: no changeword support + ')m4exit(`77')')dnl + define(`a', `errprint(`Hello')')dnl + changeword(`@\([_a-zA-Z0-9]*\)') + => + @a + =>errprint(Hello) + + In the TeX example, the first line defines a macro `a' to print the +message `Hello'. The second line defines <@> to be usable instead of +<\> as an escape character. The third line defines <\> to be a normal +printing character, not an escape. The fourth line invokes the macro +`a'. So, when TeX is run on this file, it displays the message `Hello'. + + When the `m4' example is passed through `m4', it outputs +`errprint(Hello)'. The reason for this is that TeX does lexical +analysis of macro definition when the macro is _defined_. `m4' just +stores the text, postponing the lexical analysis until the macro is +_used_. + + You should note that using `changeword' will slow `m4' down by a +factor of about seven, once it is changed to something other than the +default regular expression. You can invoke `changeword' with the empty +string to restore the default word definition, and regain the parsing +speed. + + +File: m4.info, Node: M4wrap, Prev: Changeword, Up: Input Control + +8.5 Saving text until end of input +================================== + +It is possible to `save' some text until the end of the normal input has +been seen. Text can be saved, to be read again by `m4' when the normal +input has been exhausted. This feature is normally used to initiate +cleanup actions before normal exit, e.g., deleting temporary files. + + To save input text, use the builtin `m4wrap': + + -- Builtin: m4wrap (STRING, ...) + Stores STRING in a safe place, to be reread when end of input is + reached. As a GNU extension, additional arguments are + concatenated with a space to the STRING. + + The expansion of `m4wrap' is void. The macro `m4wrap' is + recognized only with parameters. + + define(`cleanup', `This is the `cleanup' action. + ') + => + m4wrap(`cleanup') + => + This is the first and last normal input line. + =>This is the first and last normal input line. + ^D + =>This is the cleanup action. + + The saved input is only reread when the end of normal input is seen, +and not if `m4exit' is used to exit `m4'. + + It is safe to call `m4wrap' from saved text, but then the order in +which the saved text is reread is undefined. If `m4wrap' is not used +recursively, the saved pieces of text are reread in the opposite order +in which they were saved (LIFO--last in, first out). However, this +behavior is likely to change in a future release, to match POSIX, so +you should not depend on this order. + + It is possible to emulate POSIX behavior even with older versions of +GNU M4 by including the file `m4-1.4.13/examples/wrapfifo.m4' from the +distribution: + + $ m4 -I examples + undivert(`wrapfifo.m4')dnl + =>dnl Redefine m4wrap to have FIFO semantics. + =>define(`_m4wrap_level', `0')dnl + =>define(`m4wrap', + =>`ifdef(`m4wrap'_m4wrap_level, + => `define(`m4wrap'_m4wrap_level, + => defn(`m4wrap'_m4wrap_level)`$1')', + => `builtin(`m4wrap', `define(`_m4wrap_level', + => incr(_m4wrap_level))dnl + =>m4wrap'_m4wrap_level)dnl + =>define(`m4wrap'_m4wrap_level, `$1')')')dnl + include(`wrapfifo.m4') + => + m4wrap(`a`'m4wrap(`c + ', `d')')m4wrap(`b') + => + ^D + =>abc + + It is likewise possible to emulate LIFO behavior without resorting to +the GNU M4 extension of `builtin', by including the file +`m4-1.4.13/examples/wraplifo.m4' from the distribution. +(Unfortunately, both examples shown here share some subtle bugs. See +if you can find and correct them; or *note Answers: Improved m4wrap.). + + $ m4 -I examples + undivert(`wraplifo.m4')dnl + =>dnl Redefine m4wrap to have LIFO semantics. + =>define(`_m4wrap_level', `0')dnl + =>define(`_m4wrap', defn(`m4wrap'))dnl + =>define(`m4wrap', + =>`ifdef(`m4wrap'_m4wrap_level, + => `define(`m4wrap'_m4wrap_level, + => `$1'defn(`m4wrap'_m4wrap_level))', + => `_m4wrap(`define(`_m4wrap_level', incr(_m4wrap_level))dnl + =>m4wrap'_m4wrap_level)dnl + =>define(`m4wrap'_m4wrap_level, `$1')')')dnl + include(`wraplifo.m4') + => + m4wrap(`a`'m4wrap(`c + ', `d')')m4wrap(`b') + => + ^D + =>bac + + Here is an example of implementing a factorial function using +`m4wrap': + + define(`f', `ifelse(`$1', `0', `Answer: 0!=1 + ', eval(`$1>1'), `0', `Answer: $2$1=eval(`$2$1') + ', `m4wrap(`f(decr(`$1'), `$2$1*')')')') + => + f(`10') + => + ^D + =>Answer: 10*9*8*7*6*5*4*3*2*1=3628800 + + Invocations of `m4wrap' at the same recursion level are concatenated +and rescanned as usual: + + define(`aa', `AA + ') + => + m4wrap(`a')m4wrap(`a') + => + ^D + =>AA + +however, the transition between recursion levels behaves like an end of +file condition between two input files. + + m4wrap(`m4wrap(`)')len(abc') + => + ^D + error-->m4:stdin:1: ERROR: end of file in argument list + + +File: m4.info, Node: File Inclusion, Next: Diversions, Prev: Input Control, Up: Top + +9 File inclusion +**************** + +`m4' allows you to include named files at any point in the input. + +* Menu: + +* Include:: Including named files +* Search Path:: Searching for include files + + +File: m4.info, Node: Include, Next: Search Path, Up: File Inclusion + +9.1 Including named files +========================= + +There are two builtin macros in `m4' for including files: + + -- Builtin: include (FILE) + -- Builtin: sinclude (FILE) + Both macros cause the file named FILE to be read by `m4'. When + the end of the file is reached, input is resumed from the previous + input file. + + The expansion of `include' and `sinclude' is therefore the + contents of FILE. + + If FILE does not exist, is a directory, or cannot otherwise be + read, the expansion is void, and `include' will fail with an error + while `sinclude' is silent. The empty string counts as a file + that does not exist. + + The macros `include' and `sinclude' are recognized only with + parameters. + + include(`none') + error-->m4:stdin:1: cannot open `none': No such file or directory + => + include() + error-->m4:stdin:2: cannot open `': No such file or directory + => + sinclude(`none') + => + sinclude() + => + + The rest of this section assumes that `m4' is invoked with the `-I' +option (*note Invoking m4: Preprocessor features.) pointing to the +`m4-1.4.13/examples' directory shipped as part of the GNU `m4' package. +The file `m4-1.4.13/examples/incl.m4' in the distribution contains the +lines: + + $ cat examples/incl.m4 + =>Include file start + =>foo + =>Include file end + + Normally file inclusion is used to insert the contents of a file +into the input stream. The contents of the file will be read by `m4' +and macro calls in the file will be expanded: + + $ m4 -I examples + define(`foo', `FOO') + => + include(`incl.m4') + =>Include file start + =>FOO + =>Include file end + => + + The fact that `include' and `sinclude' expand to the contents of the +file can be used to define macros that operate on entire files. Here +is an example, which defines `bar' to expand to the contents of +`incl.m4': + + $ m4 -I examples + define(`bar', include(`incl.m4')) + => + This is `bar': >>bar<< + =>This is bar: >>Include file start + =>foo + =>Include file end + =><< + + This use of `include' is not trivial, though, as files can contain +quotes, commas, and parentheses, which can interfere with the way the +`m4' parser works. GNU `m4' seamlessly concatenates the file contents +with the next character, even if the included file ended in the middle +of a comment, string, or macro call. These conditions are only treated +as end of file errors if specified as input files on the command line. + + In GNU `m4', an alternative method of reading files is using +`undivert' (*note Undivert::) on a named file. + + +File: m4.info, Node: Search Path, Prev: Include, Up: File Inclusion + +9.2 Searching for include files +=============================== + +GNU `m4' allows included files to be found in other directories than +the current working directory. + + If the `--prepend-include' or `-B' command-line option was provided +(*note Invoking m4: Preprocessor features.), those directories are +searched first, in reverse order that those options were listed on the +command line. Then `m4' looks in the current working directory. Next +comes the directories specified with the `--include' or `-I' option, in +the order found on the command line. Finally, if the `M4PATH' +environment variable is set, it is expected to contain a +colon-separated list of directories, which will be searched in order. + + If the automatic search for include-files causes trouble, the `p' +debug flag (*note Debug Levels::) can help isolate the problem. + + +File: m4.info, Node: Diversions, Next: Text handling, Prev: File Inclusion, Up: Top + +10 Diverting and undiverting output +*********************************** + +Diversions are a way of temporarily saving output. The output of `m4' +can at any time be diverted to a temporary file, and be reinserted into +the output stream, "undiverted", again at a later time. + + Numbered diversions are counted from 0 upwards, diversion number 0 +being the normal output stream. The number of simultaneous diversions +is limited mainly by the memory used to describe them, because GNU `m4' +tries to keep diversions in memory. However, there is a limit to the +overall memory usable by all diversions taken altogether (512K, +currently). When this maximum is about to be exceeded, a temporary +file is opened to receive the contents of the biggest diversion still +in memory, freeing this memory for other diversions. When creating the +temporary file, `m4' honors the value of the environment variable +`TMPDIR', and falls back to `/tmp'. So, it is theoretically possible +that the number and aggregate size of diversions is limited only by +available disk space. + + Diversions make it possible to generate output in a different order +than the input was read. It is possible to implement topological +sorting dependencies. For example, GNU Autoconf makes use of +diversions under the hood to ensure that the expansion of a prerequisite +macro appears in the output prior to the expansion of a dependent macro, +regardless of which order the two macros were invoked in the user's +input file. + +* Menu: + +* Divert:: Diverting output +* Undivert:: Undiverting output +* Divnum:: Diversion numbers +* Cleardivert:: Discarding diverted text + + +File: m4.info, Node: Divert, Next: Undivert, Up: Diversions + +10.1 Diverting output +===================== + +Output is diverted using `divert': + + -- Builtin: divert ([NUMBER = `0']) + The current diversion is changed to NUMBER. If NUMBER is left out + or empty, it is assumed to be zero. If NUMBER cannot be parsed, + the diversion is unchanged. + + The expansion of `divert' is void. + + When all the `m4' input will have been processed, all existing +diversions are automatically undiverted, in numerical order. + + divert(`1') + This text is diverted. + divert + => + This text is not diverted. + =>This text is not diverted. + ^D + => + =>This text is diverted. + + Several calls of `divert' with the same argument do not overwrite +the previous diverted text, but append to it. Diversions are printed +after any wrapped text is expanded. + + define(`text', `TEXT') + => + divert(`1')`diverted text.' + divert + => + m4wrap(`Wrapped text precedes ') + => + ^D + =>Wrapped TEXT precedes diverted text. + + If output is diverted to a negative diversion, it is simply +discarded. This can be used to suppress unwanted output. A common +example of unwanted output is the trailing newlines after macro +definitions. Here is a common programming idiom in `m4' for avoiding +them. + + divert(`-1') + define(`foo', `Macro `foo'.') + define(`bar', `Macro `bar'.') + divert + => + + Traditional implementations only supported ten diversions. But as a +GNU extension, diversion numbers can be as large as positive integers +will allow, rather than treating a multi-digit diversion number as a +request to discard text. + + divert(eval(`1<<28'))world + divert(`2')hello + ^D + =>hello + =>world + + Note that `divert' is an English word, but also an active macro +without arguments. When processing plain text, the word might appear in +normal text and be unintentionally swallowed as a macro invocation. One +way to avoid this is to use the `-P' option to rename all builtins +(*note Invoking m4: Operation modes.). Another is to write a wrapper +that requires a parameter to be recognized. + + We decided to divert the stream for irrigation. + =>We decided to the stream for irrigation. + define(`divert', `ifelse(`$#', `0', ``$0'', `builtin(`$0', $@)')') + => + divert(`-1') + Ignored text. + divert(`0') + => + We decided to divert the stream for irrigation. + =>We decided to divert the stream for irrigation. + + +File: m4.info, Node: Undivert, Next: Divnum, Prev: Divert, Up: Diversions + +10.2 Undiverting output +======================= + +Diverted text can be undiverted explicitly using the builtin `undivert': + + -- Builtin: undivert ([DIVERSIONS...]) + Undiverts the numeric DIVERSIONS given by the arguments, in the + order given. If no arguments are supplied, all diversions are + undiverted, in numerical order. + + As a GNU extension, DIVERSIONS may contain non-numeric strings, + which are treated as the names of files to copy into the output + without expansion. A warning is issued if a file could not be + opened. + + The expansion of `undivert' is void. + + divert(`1') + This text is diverted. + divert + => + This text is not diverted. + =>This text is not diverted. + undivert(`1') + => + =>This text is diverted. + => + + Notice the last two blank lines. One of them comes from the newline +following `undivert', the other from the newline that followed the +`divert'! A diversion often starts with a blank line like this. + + When diverted text is undiverted, it is _not_ reread by `m4', but +rather copied directly to the current output, and it is therefore not +an error to undivert into a diversion. Undiverting the empty string is +the same as specifying diversion 0; in either case nothing happens +since the output has already been flushed. + + divert(`1')diverted text + divert + => + undivert() + => + undivert(`0') + => + undivert + =>diverted text + => + divert(`1')more + divert(`2')undivert(`1')diverted text`'divert + => + undivert(`1') + => + undivert(`2') + =>more + =>diverted text + + When a diversion has been undiverted, the diverted text is discarded, +and it is not possible to bring back diverted text more than once. + + divert(`1') + This text is diverted first. + divert(`0')undivert(`1')dnl + => + =>This text is diverted first. + undivert(`1') + => + divert(`1') + This text is also diverted but not appended. + divert(`0')undivert(`1')dnl + => + =>This text is also diverted but not appended. + + Attempts to undivert the current diversion are silently ignored. +Thus, when the current diversion is not 0, the current diversion does +not get rearranged among the other diversions. + + divert(`1')one + divert(`2')two + divert(`3')three + divert(`2')undivert`'dnl + divert`'undivert`'dnl + =>two + =>one + =>three + + GNU `m4' allows named files to be undiverted. Given a non-numeric +argument, the contents of the file named will be copied, uninterpreted, +to the current output. This complements the builtin `include' (*note +Include::). To illustrate the difference, assume the file `foo' +contains: + + $ cat foo + bar + +then + + define(`bar', `BAR') + => + undivert(`foo') + =>bar + => + include(`foo') + =>BAR + => + + If the file is not found (or cannot be read), an error message is +issued, and the expansion is void. It is possible to intermix files +and diversion numbers. + + divert(`1')diversion one + divert(`2')undivert(`foo')dnl + divert(`3')diversion three + divert`'dnl + undivert(`1', `2', `foo', `3')dnl + =>diversion one + =>bar + =>bar + =>diversion three + + +File: m4.info, Node: Divnum, Next: Cleardivert, Prev: Undivert, Up: Diversions + +10.3 Diversion numbers +====================== + +The current diversion is tracked by the builtin `divnum': + + -- Builtin: divnum + Expands to the number of the current diversion. + + Initial divnum + =>Initial 0 + divert(`1') + Diversion one: divnum + divert(`2') + Diversion two: divnum + ^D + => + =>Diversion one: 1 + => + =>Diversion two: 2 + + +File: m4.info, Node: Cleardivert, Prev: Divnum, Up: Diversions + +10.4 Discarding diverted text +============================= + +Often it is not known, when output is diverted, whether the diverted +text is actually needed. Since all non-empty diversion are brought back +on the main output stream when the end of input is seen, a method of +discarding a diversion is needed. If all diversions should be +discarded, the easiest is to end the input to `m4' with `divert(`-1')' +followed by an explicit `undivert': + + divert(`1') + Diversion one: divnum + divert(`2') + Diversion two: divnum + divert(`-1') + undivert + ^D + +No output is produced at all. + + Clearing selected diversions can be done with the following macro: + + -- Composite: cleardivert ([DIVERSIONS...]) + Discard the contents of each of the listed numeric DIVERSIONS. + + define(`cleardivert', + `pushdef(`_n', divnum)divert(`-1')undivert($@)divert(_n)popdef(`_n')') + => + + It is called just like `undivert', but the effect is to clear the +diversions, given by the arguments. (This macro has a nasty bug! You +should try to see if you can find it and correct it; or *note Answers: +Improved cleardivert.). + + +File: m4.info, Node: Text handling, Next: Arithmetic, Prev: Diversions, Up: Top + +11 Macros for text handling +*************************** + +There are a number of builtins in `m4' for manipulating text in various +ways, extracting substrings, searching, substituting, and so on. + +* Menu: + +* Len:: Calculating length of strings +* Index macro:: Searching for substrings +* Regexp:: Searching for regular expressions +* Substr:: Extracting substrings +* Translit:: Translating characters +* Patsubst:: Substituting text by regular expression +* Format:: Formatting strings (printf-like) + + +File: m4.info, Node: Len, Next: Index macro, Up: Text handling + +11.1 Calculating length of strings +================================== + +The length of a string can be calculated by `len': + + -- Builtin: len (STRING) + Expands to the length of STRING, as a decimal number. + + The macro `len' is recognized only with parameters. + + len() + =>0 + len(`abcdef') + =>6 + + +File: m4.info, Node: Index macro, Next: Regexp, Prev: Len, Up: Text handling + +11.2 Searching for substrings +============================= + +Searching for substrings is done with `index': + + -- Builtin: index (STRING, SUBSTRING) + Expands to the index of the first occurrence of SUBSTRING in + STRING. The first character in STRING has index 0. If SUBSTRING + does not occur in STRING, `index' expands to `-1'. + + The macro `index' is recognized only with parameters. + + index(`gnus, gnats, and armadillos', `nat') + =>7 + index(`gnus, gnats, and armadillos', `dag') + =>-1 + + Omitting SUBSTRING evokes a warning, but still produces output; +contrast this with an empty SUBSTRING. + + index(`abc') + error-->m4:stdin:1: Warning: too few arguments to builtin `index' + =>0 + index(`abc', `') + =>0 + index(`abc', `b') + =>1 + + +File: m4.info, Node: Regexp, Next: Substr, Prev: Index macro, Up: Text handling + +11.3 Searching for regular expressions +====================================== + +Searching for regular expressions is done with the builtin `regexp': + + -- Builtin: regexp (STRING, REGEXP, [REPLACEMENT]) + Searches for REGEXP in STRING. The syntax for regular expressions + is the same as in GNU Emacs, which is similar to BRE (Basic + Regular Expressions) in POSIX. *Note Syntax of Regular + Expressions: (emacs)Regexps. Support for ERE (Extended Regular + Expressions) is not available, but will be added in GNU M4 2.0. + + If REPLACEMENT is omitted, `regexp' expands to the index of the + first match of REGEXP in STRING. If REGEXP does not match + anywhere in STRING, it expands to -1. + + If REPLACEMENT is supplied, and there was a match, `regexp' + changes the expansion to this argument, with `\N' substituted by + the text matched by the Nth parenthesized sub-expression of + REGEXP, up to nine sub-expressions. The escape `\&' is replaced + by the text of the entire regular expression matched. For all + other characters, `\' treats the next character literally. A + warning is issued if there were fewer sub-expressions than the + `\N' requested, or if there is a trailing `\'. If there was no + match, `regexp' expands to the empty string. + + The macro `regexp' is recognized only with parameters. + + regexp(`GNUs not Unix', `\<[a-z]\w+') + =>5 + regexp(`GNUs not Unix', `\-1 + regexp(`GNUs not Unix', `\w\(\w+\)$', `*** \& *** \1 ***') + =>*** Unix *** nix *** + regexp(`GNUs not Unix', `\ + + Here are some more examples on the handling of backslash: + + regexp(`abc', `\(b\)', `\\\10\a') + =>\b0a + regexp(`abc', `b', `\1\') + error-->m4:stdin:2: Warning: sub-expression 1 not present + error-->m4:stdin:2: Warning: trailing \ ignored in replacement + => + regexp(`abc', `\(\(d\)?\)\(c\)', `\1\2\3\4\5\6') + error-->m4:stdin:3: Warning: sub-expression 4 not present + error-->m4:stdin:3: Warning: sub-expression 5 not present + error-->m4:stdin:3: Warning: sub-expression 6 not present + =>c + + Omitting REGEXP evokes a warning, but still produces output; +contrast this with an empty REGEXP argument. + + regexp(`abc') + error-->m4:stdin:1: Warning: too few arguments to builtin `regexp' + =>0 + regexp(`abc', `') + =>0 + regexp(`abc', `', `\\def') + =>\def + + +File: m4.info, Node: Substr, Next: Translit, Prev: Regexp, Up: Text handling + +11.4 Extracting substrings +========================== + +Substrings are extracted with `substr': + + -- Builtin: substr (STRING, FROM, [LENGTH]) + Expands to the substring of STRING, which starts at index FROM, + and extends for LENGTH characters, or to the end of STRING, if + LENGTH is omitted. The starting index of a string is always 0. + The expansion is empty if there is an error parsing FROM or + LENGTH, if FROM is beyond the end of STRING, or if LENGTH is + negative. + + The macro `substr' is recognized only with parameters. + + substr(`gnus, gnats, and armadillos', `6') + =>gnats, and armadillos + substr(`gnus, gnats, and armadillos', `6', `5') + =>gnats + + Omitting FROM evokes a warning, but still produces output. + + substr(`abc') + error-->m4:stdin:1: Warning: too few arguments to builtin `substr' + =>abc + substr(`abc',) + error-->m4:stdin:2: empty string treated as 0 in builtin `substr' + =>abc + + +File: m4.info, Node: Translit, Next: Patsubst, Prev: Substr, Up: Text handling + +11.5 Translating characters +=========================== + +Character translation is done with `translit': + + -- Builtin: translit (STRING, CHARS, [REPLACEMENT]) + Expands to STRING, with each character that occurs in CHARS + translated into the character from REPLACEMENT with the same index. + + If REPLACEMENT is shorter than CHARS, the excess characters of + CHARS are deleted from the expansion; if CHARS is shorter, the + excess characters in REPLACEMENT are silently ignored. If + REPLACEMENT is omitted, all characters in STRING that are present + in CHARS are deleted from the expansion. If a character appears + more than once in CHARS, only the first instance is used in making + the translation. Only a single translation pass is made, even if + characters in REPLACEMENT also appear in CHARS. + + As a GNU extension, both CHARS and REPLACEMENT can contain + character-ranges, e.g., `a-z' (meaning all lowercase letters) or + `0-9' (meaning all digits). To include a dash `-' in CHARS or + REPLACEMENT, place it first or last in the entire string, or as + the last character of a range. Back-to-back ranges can share a + common endpoint. It is not an error for the last character in the + range to be `larger' than the first. In that case, the range runs + backwards, i.e., `9-0' means the string `9876543210'. The + expansion of a range is dependent on the underlying encoding of + characters, so using ranges is not always portable between + machines. + + The macro `translit' is recognized only with parameters. + + translit(`GNUs not Unix', `A-Z') + =>s not nix + translit(`GNUs not Unix', `a-z', `A-Z') + =>GNUS NOT UNIX + translit(`GNUs not Unix', `A-Z', `z-a') + =>tmfs not fnix + translit(`+,-12345', `+--1-5', `<;>a-c-a') + =><;>abcba + translit(`abcdef', `aabdef', `bcged') + =>bgced + + In the ASCII encoding, the first example deletes all uppercase +letters, the second converts lowercase to uppercase, and the third +`mirrors' all uppercase letters, while converting them to lowercase. +The two first cases are by far the most common, even though they are not +portable to EBCDIC or other encodings. The fourth example shows a +range ending in `-', as well as back-to-back ranges. The final example +shows that `a' is mapped to `b', not `c'; the resulting `b' is not +further remapped to `g'; the `d' and `e' are swapped, and the `f' is +discarded. + + Omitting CHARS evokes a warning, but still produces output. + + translit(`abc') + error-->m4:stdin:1: Warning: too few arguments to builtin `translit' + =>abc + + +File: m4.info, Node: Patsubst, Next: Format, Prev: Translit, Up: Text handling + +11.6 Substituting text by regular expression +============================================ + +Global substitution in a string is done by `patsubst': + + -- Builtin: patsubst (STRING, REGEXP, [REPLACEMENT]) + Searches STRING for matches of REGEXP, and substitutes REPLACEMENT + for each match. The syntax for regular expressions is the same as + in GNU Emacs (*note Regexp::). + + The parts of STRING that are not covered by any match of REGEXP + are copied to the expansion. Whenever a match is found, the + search proceeds from the end of the match, so a character from + STRING will never be substituted twice. If REGEXP matches a + string of zero length, the start position for the search is + incremented, to avoid infinite loops. + + When a replacement is to be made, REPLACEMENT is inserted into the + expansion, with `\N' substituted by the text matched by the Nth + parenthesized sub-expression of PATSUBST, for up to nine + sub-expressions. The escape `\&' is replaced by the text of the + entire regular expression matched. For all other characters, `\' + treats the next character literally. A warning is issued if there + were fewer sub-expressions than the `\N' requested, or if there is + a trailing `\'. + + The REPLACEMENT argument can be omitted, in which case the text + matched by REGEXP is deleted. + + The macro `patsubst' is recognized only with parameters. + + patsubst(`GNUs not Unix', `^', `OBS: ') + =>OBS: GNUs not Unix + patsubst(`GNUs not Unix', `\<', `OBS: ') + =>OBS: GNUs OBS: not OBS: Unix + patsubst(`GNUs not Unix', `\w*', `(\&)') + =>(GNUs)() (not)() (Unix)() + patsubst(`GNUs not Unix', `\w+', `(\&)') + =>(GNUs) (not) (Unix) + patsubst(`GNUs not Unix', `[A-Z][a-z]+') + =>GN not + patsubst(`GNUs not Unix', `not', `NOT\') + error-->m4:stdin:6: Warning: trailing \ ignored in replacement + =>GNUs NOT Unix + + Here is a slightly more realistic example, which capitalizes +individual words or whole sentences, by substituting calls of the macros +`upcase' and `downcase' into the strings. + + -- Composite: upcase (TEXT) + -- Composite: downcase (TEXT) + -- Composite: capitalize (TEXT) + Expand to TEXT, but with capitalization changed: `upcase' changes + all letters to upper case, `downcase' changes all letters to lower + case, and `capitalize' changes the first character of each word to + upper case and the remaining characters to lower case. + + First, an example of their usage, using implementations distributed +in `m4-1.4.13/examples/capitalize.m4'. + + $ m4 -I examples + include(`capitalize.m4') + => + upcase(`GNUs not Unix') + =>GNUS NOT UNIX + downcase(`GNUs not Unix') + =>gnus not unix + capitalize(`GNUs not Unix') + =>Gnus Not Unix + + Now for the implementation. There is a helper macro `_capitalize' +which puts only its first word in mixed case. Then `capitalize' merely +parses out the words, and replaces them with an invocation of +`_capitalize'. (As presented here, the `capitalize' macro has some +subtle flaws. You should try to see if you can find and correct them; +or *note Answers: Improved capitalize.). + + $ m4 -I examples + undivert(`capitalize.m4')dnl + =>divert(`-1') + =># upcase(text) + =># downcase(text) + =># capitalize(text) + =># change case of text, simple version + =>define(`upcase', `translit(`$*', `a-z', `A-Z')') + =>define(`downcase', `translit(`$*', `A-Z', `a-z')') + =>define(`_capitalize', + => `regexp(`$1', `^\(\w\)\(\w*\)', + => `upcase(`\1')`'downcase(`\2')')') + =>define(`capitalize', `patsubst(`$1', `\w+', `_$0(`\&')')') + =>divert`'dnl + + While `regexp' replaces the whole input with the replacement as soon +as there is a match, `patsubst' replaces each _occurrence_ of a match +and preserves non-matching pieces: + + define(`patreg', + `patsubst($@) + regexp($@)')dnl + patreg(`bar foo baz Foo', `foo\|Foo', `FOO') + =>bar FOO baz FOO + =>FOO + patreg(`aba abb 121', `\(.\)\(.\)\1', `\2\1\2') + =>bab abb 212 + =>bab + + Omitting REGEXP evokes a warning, but still produces output; +contrast this with an empty REGEXP argument. + + patsubst(`abc') + error-->m4:stdin:1: Warning: too few arguments to builtin `patsubst' + =>abc + patsubst(`abc', `') + =>abc + patsubst(`abc', `', `\\-') + =>\-a\-b\-c\- + + +File: m4.info, Node: Format, Prev: Patsubst, Up: Text handling + +11.7 Formatting strings (printf-like) +===================================== + +Formatted output can be made with `format': + + -- Builtin: format (FORMAT-STRING, ...) + Works much like the C function `printf'. The first argument + FORMAT-STRING can contain `%' specifications which are satisfied + by additional arguments, and the expansion of `format' is the + formatted string. + + The macro `format' is recognized only with parameters. + + Its use is best described by a few examples: + + define(`foo', `The brown fox jumped over the lazy dog') + => + format(`The string "%s" uses %d characters', foo, len(foo)) + =>The string "The brown fox jumped over the lazy dog" uses 38 characters + format(`%*.*d', `-1', `-1', `1') + =>1 + format(`%.0f', `56789.9876') + =>56790 + len(format(`%-*X', `5000', `1')) + =>5000 + ifelse(format(`%010F', `infinity'), ` INF', `success', + format(`%010F', `infinity'), ` INFINITY', `success', + format(`%010F', `infinity')) + =>success + ifelse(format(`%.1A', `1.999'), `0X1.0P+1', `success', + format(`%.1A', `1.999'), `0X2.0P+0', `success', + format(`%.1A', `1.999')) + =>success + format(`%g', `0xa.P+1') + =>20 + + Using the `forloop' macro defined earlier (*note Forloop::), this +example shows how `format' can be used to produce tabular output. + + $ m4 -I examples + include(`forloop.m4') + => + forloop(`i', `1', `10', `format(`%6d squared is %10d + ', i, eval(i**2))') + => 1 squared is 1 + => 2 squared is 4 + => 3 squared is 9 + => 4 squared is 16 + => 5 squared is 25 + => 6 squared is 36 + => 7 squared is 49 + => 8 squared is 64 + => 9 squared is 81 + => 10 squared is 100 + => + + The builtin `format' is modeled after the ANSI C `printf' function, +and supports these `%' specifiers: `c', `s', `d', `o', `x', `X', `u', +`a', `A', `e', `E', `f', `F', `g', `G', and `%'; it supports field +widths and precisions, and the flags `+', `-', ` ', `0', `#', and `''. +For integer specifiers, the width modifiers `hh', `h', and `l' are +recognized, and for floating point specifiers, the width modifier `l' +is recognized. Items not yet supported include positional arguments, +the `n', `p', `S', and `C' specifiers, the `z', `t', `j', `L' and `ll' +modifiers, and any platform extensions available in the native +`printf'. For more details on the functioning of `printf', see the C +Library Manual, or the POSIX specification (for example, `%a' is +supported even on platforms that haven't yet implemented C99 +hexadecimal floating point output natively). + + Unrecognized specifiers result in a warning. It is anticipated that +a future release of GNU `m4' will support more specifiers, and give +better warnings when various problems such as overflow are encountered. +Likewise, escape sequences are not yet recognized. + + format(`%p', `0') + error-->m4:stdin:1: Warning: unrecognized specifier in `%p' + => + + +File: m4.info, Node: Arithmetic, Next: Shell commands, Prev: Text handling, Up: Top + +12 Macros for doing arithmetic +****************************** + +Integer arithmetic is included in `m4', with a C-like syntax. As +convenient shorthands, there are builtins for simple increment and +decrement operations. + +* Menu: + +* Incr:: Decrement and increment operators +* Eval:: Evaluating integer expressions + + +File: m4.info, Node: Incr, Next: Eval, Up: Arithmetic + +12.1 Decrement and increment operators +====================================== + +Increment and decrement of integers are supported using the builtins +`incr' and `decr': + + -- Builtin: incr (NUMBER) + -- Builtin: decr (NUMBER) + Expand to the numerical value of NUMBER, incremented or + decremented, respectively, by one. Except for the empty string, + the expansion is empty if NUMBER could not be parsed. + + The macros `incr' and `decr' are recognized only with parameters. + + incr(`4') + =>5 + decr(`7') + =>6 + incr() + error-->m4:stdin:3: empty string treated as 0 in builtin `incr' + =>1 + decr() + error-->m4:stdin:4: empty string treated as 0 in builtin `decr' + =>-1 + + +File: m4.info, Node: Eval, Prev: Incr, Up: Arithmetic + +12.2 Evaluating integer expressions +=================================== + +Integer expressions are evaluated with `eval': + + -- Builtin: eval (EXPRESSION, [RADIX = `10'], [WIDTH]) + Expands to the value of EXPRESSION. The expansion is empty if a + problem is encountered while parsing the arguments. If specified, + RADIX and WIDTH control the format of the output. + + Calculations are done with 32-bit signed numbers. Overflow + silently results in wraparound. A warning is issued if division + by zero is attempted, or if EXPRESSION could not be parsed. + + Expressions can contain the following operators, listed in order of + decreasing precedence. + + `()' + Parentheses + + `+ - ~ !' + Unary plus and minus, and bitwise and logical negation + + `**' + Exponentiation + + `* / %' + Multiplication, division, and modulo + + `+ -' + Addition and subtraction + + `<< >>' + Shift left or right + + `> >= < <=' + Relational operators + + `== !=' + Equality operators + + `&' + Bitwise and + + `^' + Bitwise exclusive-or + + `|' + Bitwise or + + `&&' + Logical and + + `||' + Logical or + + The macro `eval' is recognized only with parameters. + + All binary operators, except exponentiation, are left associative. C +operators that perform variable assignment, such as `+=' or `--', are +not implemented, since `eval' only operates on constants, not +variables. Attempting to use them results in an error. However, since +traditional implementations treated `=' as an undocumented alias for +`==' as opposed to an assignment operator, this usage is supported as a +special case. Be aware that a future version of GNU M4 may support +assignment semantics as an extension when POSIX mode is not requested, +and that using `=' to check equality is not portable. + + eval(`2 = 2') + error-->m4:stdin:1: Warning: recommend ==, not =, for equality operator + =>1 + eval(`++0') + error-->m4:stdin:2: invalid operator in eval: ++0 + => + eval(`0 |= 1') + error-->m4:stdin:3: invalid operator in eval: 0 |= 1 + => + + Note that some older `m4' implementations use `^' as an alternate +operator for the exponentiation, although POSIX requires the C behavior +of bitwise exclusive-or. The precedence of the negation operators, `~' +and `!', was traditionally lower than equality. The unary operators +could not be used reliably more than once on the same term without +intervening parentheses. The traditional precedence of the equality +operators `==' and `!=' was identical instead of lower than the +relational operators such as `<', even through GNU M4 1.4.8. Starting +with version 1.4.9, GNU M4 correctly follows POSIX precedence rules. +M4 scripts designed to be portable between releases must be aware that +parentheses may be required to enforce C precedence rules. Likewise, +division by zero, even in the unused branch of a short-circuiting +operator, is not always well-defined in other implementations. + + Following are some examples where the current version of M4 follows C +precedence rules, but where older versions and some other +implementations of `m4' require explicit parentheses to get the correct +result: + + eval(`1 == 2 > 0') + =>1 + eval(`(1 == 2) > 0') + =>0 + eval(`! 0 * 2') + =>2 + eval(`! (0 * 2)') + =>1 + eval(`1 | 1 ^ 1') + =>1 + eval(`(1 | 1) ^ 1') + =>0 + eval(`+ + - ~ ! ~ 0') + =>1 + eval(`2 || 1 / 0') + =>1 + eval(`0 || 1 / 0') + error-->m4:stdin:9: divide by zero in eval: 0 || 1 / 0 + => + eval(`0 && 1 % 0') + =>0 + eval(`2 && 1 % 0') + error-->m4:stdin:11: modulo by zero in eval: 2 && 1 % 0 + => + + As a GNU extension, the operator `**' performs integral +exponentiation. The operator is right-associative, and if evaluated, +the exponent must be non-negative, and at least one of the arguments +must be non-zero, or a warning is issued. + + eval(`2 ** 3 ** 2') + =>512 + eval(`(2 ** 3) ** 2') + =>64 + eval(`0 ** 1') + =>0 + eval(`2 ** 0') + =>1 + eval(`0 ** 0') + => + error-->m4:stdin:5: divide by zero in eval: 0 ** 0 + eval(`4 ** -2') + error-->m4:stdin:6: negative exponent in eval: 4 ** -2 + => + + Within EXPRESSION, (but not RADIX or WIDTH), numbers without a +special prefix are decimal. A simple `0' prefix introduces an octal +number. `0x' introduces a hexadecimal number. As GNU extensions, `0b' +introduces a binary number. `0r' introduces a number expressed in any +radix between 1 and 36: the prefix should be immediately followed by +the decimal expression of the radix, a colon, then the digits making +the number. For radix 1, leading zeros are ignored, and all remaining +digits must be `1'; for all other radices, the digits are `0', `1', `2', +.... Beyond `9', the digits are `a', `b' ... up to `z'. Lower and +upper case letters can be used interchangeably in numbers prefixes and +as number digits. + + Parentheses may be used to group subexpressions whenever needed. +For the relational operators, a true relation returns `1', and a false +relation return `0'. + + Here are a few examples of use of `eval'. + + eval(`-3 * 5') + =>-15 + eval(`-99 / 10') + =>-9 + eval(`-99 % 10') + =>-9 + eval(`99 % -10') + =>9 + eval(index(`Hello world', `llo') >= 0) + =>1 + eval(`0r1:0111 + 0b100 + 0r3:12') + =>12 + define(`square', `eval(`($1) ** 2')') + => + square(`9') + =>81 + square(square(`5')` + 1') + =>676 + define(`foo', `666') + => + eval(`foo / 6') + error-->m4:stdin:11: bad expression in eval: foo / 6 + => + eval(foo / 6) + =>111 + + As the last two lines show, `eval' does not handle macro names, even +if they expand to a valid expression (or part of a valid expression). +Therefore all macros must be expanded before they are passed to `eval'. + + Some calculations are not portable to other implementations, since +they have undefined semantics in C, but GNU `m4' has well-defined +behavior on overflow. When shifting, an out-of-range shift amount is +implicitly brought into the range of 32-bit signed integers using an +implicit bit-wise and with 0x1f). + + define(`max_int', eval(`0x7fffffff')) + => + define(`min_int', incr(max_int)) + => + eval(min_int` < 0') + =>1 + eval(max_int` > 0') + =>1 + ifelse(eval(min_int` / -1'), min_int, `overflow occurred') + =>overflow occurred + min_int + =>-2147483648 + eval(`0x80000000 % -1') + =>0 + eval(`-4 >> 1') + =>-2 + eval(`-4 >> 33') + =>-2 + + If RADIX is specified, it specifies the radix to be used in the +expansion. The default radix is 10; this is also the case if RADIX is +the empty string. A warning results if the radix is outside the range +of 1 through 36, inclusive. The result of `eval' is always taken to be +signed. No radix prefix is output, and for radices greater than 10, +the digits are lower case. The WIDTH argument specifies the minimum +output width, excluding any negative sign. The result is zero-padded +to extend the expansion to the requested width. A warning results if +the width is negative. If RADIX or WIDTH is out of bounds, the +expansion of `eval' is empty. + + eval(`666', `10') + =>666 + eval(`666', `11') + =>556 + eval(`666', `6') + =>3030 + eval(`666', `6', `10') + =>0000003030 + eval(`-666', `6', `10') + =>-0000003030 + eval(`10', `', `0') + =>10 + `0r1:'eval(`10', `1', `11') + =>0r1:01111111111 + eval(`10', `16') + =>a + eval(`1', `37') + error-->m4:stdin:9: radix 37 in builtin `eval' out of range + => + eval(`1', , `-1') + error-->m4:stdin:10: negative width to builtin `eval' + => + eval() + error-->m4:stdin:11: empty string treated as 0 in builtin `eval' + =>0 + + +File: m4.info, Node: Shell commands, Next: Miscellaneous, Prev: Arithmetic, Up: Top + +13 Macros for running shell commands +************************************ + +There are a few builtin macros in `m4' that allow you to run shell +commands from within `m4'. + + Note that the definition of a valid shell command is system +dependent. On UNIX systems, this is the typical `/bin/sh'. But on +other systems, such as native Windows, the shell has a different syntax +of commands that it understands. Some examples in this chapter assume +`/bin/sh', and also demonstrate how to quit early with a known exit +value if this is not the case. + +* Menu: + +* Platform macros:: Determining the platform +* Syscmd:: Executing simple commands +* Esyscmd:: Reading the output of commands +* Sysval:: Exit status +* Mkstemp:: Making temporary files + + +File: m4.info, Node: Platform macros, Next: Syscmd, Up: Shell commands + +13.1 Determining the platform +============================= + +Sometimes it is desirable for an input file to know which platform `m4' +is running on. GNU `m4' provides several macros that are predefined to +expand to the empty string; checking for their existence will confirm +platform details. + + -- Optional builtin: __gnu__ + -- Optional builtin: __os2__ + -- Optional builtin: os2 + -- Optional builtin: __unix__ + -- Optional builtin: unix + -- Optional builtin: __windows__ + -- Optional builtin: windows + Each of these macros is conditionally defined as needed to + describe the environment of `m4'. If defined, each macro expands + to the empty string. For now, these macros silently ignore all + arguments, but in a future release of M4, they might warn if + arguments are present. + + When GNU extensions are in effect (that is, when you did not use the +`-G' option, *note Invoking m4: Limits control.), GNU `m4' will define +the macro `__gnu__' to expand to the empty string. + + $ m4 + __gnu__ + => + __gnu__(`ignored') + => + Extensions are ifdef(`__gnu__', `active', `inactive') + =>Extensions are active + + $ m4 -G + __gnu__ + =>__gnu__ + __gnu__(`ignored') + =>__gnu__(ignored) + Extensions are ifdef(`__gnu__', `active', `inactive') + =>Extensions are inactive + + On UNIX systems, GNU `m4' will define `__unix__' by default, or +`unix' when the `-G' option is specified. + + On native Windows systems, GNU `m4' will define `__windows__' by +default, or `windows' when the `-G' option is specified. + + On OS/2 systems, GNU `m4' will define `__os2__' by default, or `os2' +when the `-G' option is specified. + + If GNU `m4' does not provide a platform macro for your system, +please report that as a bug. + + define(`provided', `0') + => + ifdef(`__unix__', `define(`provided', incr(provided))') + => + ifdef(`__windows__', `define(`provided', incr(provided))') + => + ifdef(`__os2__', `define(`provided', incr(provided))') + => + provided + =>1 + + +File: m4.info, Node: Syscmd, Next: Esyscmd, Prev: Platform macros, Up: Shell commands + +13.2 Executing simple commands +============================== + +Any shell command can be executed, using `syscmd': + + -- Builtin: syscmd (SHELL-COMMAND) + Executes SHELL-COMMAND as a shell command. + + The expansion of `syscmd' is void, _not_ the output from + SHELL-COMMAND! Output or error messages from SHELL-COMMAND are + not read by `m4'. *Note Esyscmd::, if you need to process the + command output. + + Prior to executing the command, `m4' flushes its buffers. The + default standard input, output and error of SHELL-COMMAND are the + same as those of `m4'. + + By default, the SHELL-COMMAND will be used as the argument to the + `-c' option of the `/bin/sh' shell (or the version of `sh' + specified by `command -p getconf PATH', if your system supports + that). If you prefer a different shell, the `configure' script + can be given the option `--with-syscmd-shell=LOCATION' to set the + location of an alternative shell at GNU `m4' installation; the + alternative shell must still support `-c'. + + The macro `syscmd' is recognized only with parameters. + + define(`foo', `FOO') + => + syscmd(`echo foo') + =>foo + => + + Note how the expansion of `syscmd' keeps the trailing newline of the +command, as well as using the newline that appeared after the macro. + + The following is an example of SHELL-COMMAND using the same standard +input as `m4': + + $ echo "m4wrap(\`syscmd(\`cat')')" | m4 + => + + It tells `m4' to read all of its input before executing the wrapped +text, then hand a valid (albeit emptied) pipe as standard input for the +`cat' subcommand. Therefore, you should be careful when using standard +input (either by specifying no files, or by passing `-' as a file name +on the command line, *note Invoking m4: Command line files.), and also +invoking subcommands via `syscmd' or `esyscmd' that consume data from +standard input. When standard input is a seekable file, the subprocess +will pick up with the next character not yet processed by `m4'; when it +is a pipe or other non-seekable file, there is no guarantee how much +data will already be buffered by `m4' and thus unavailable to the child. + + +File: m4.info, Node: Esyscmd, Next: Sysval, Prev: Syscmd, Up: Shell commands + +13.3 Reading the output of commands +=================================== + +If you want `m4' to read the output of a shell command, use `esyscmd': + + -- Builtin: esyscmd (SHELL-COMMAND) + Expands to the standard output of the shell command SHELL-COMMAND. + + Prior to executing the command, `m4' flushes its buffers. The + default standard input and standard error of SHELL-COMMAND are the + same as those of `m4'. The error output of SHELL-COMMAND is not a + part of the expansion: it will appear along with the error output + of `m4'. + + By default, the SHELL-COMMAND will be used as the argument to the + `-c' option of the `/bin/sh' shell (or the version of `sh' + specified by `command -p getconf PATH', if your system supports + that). If you prefer a different shell, the `configure' script + can be given the option `--with-syscmd-shell=LOCATION' to set the + location of an alternative shell at GNU `m4' installation; the + alternative shell must still support `-c'. + + The macro `esyscmd' is recognized only with parameters. + + define(`foo', `FOO') + => + esyscmd(`echo foo') + =>FOO + => + + Note how the expansion of `esyscmd' keeps the trailing newline of +the command, as well as using the newline that appeared after the macro. + + Just as with `syscmd', care must be exercised when sharing standard +input between `m4' and the child process of `esyscmd'. + + +File: m4.info, Node: Sysval, Next: Mkstemp, Prev: Esyscmd, Up: Shell commands + +13.4 Exit status +================ + +To see whether a shell command succeeded, use `sysval': + + -- Builtin: sysval + Expands to the exit status of the last shell command run with + `syscmd' or `esyscmd'. Expands to 0 if no command has been run + yet. + + sysval + =>0 + syscmd(`false') + => + ifelse(sysval, `0', `zero', `non-zero') + =>non-zero + syscmd(`exit 2') + => + sysval + =>2 + syscmd(`true') + => + sysval + =>0 + esyscmd(`false') + => + ifelse(sysval, `0', `zero', `non-zero') + =>non-zero + esyscmd(`exit 2') + => + sysval + =>2 + esyscmd(`true') + => + sysval + =>0 + + `sysval' results in 127 if there was a problem executing the +command, for example, if the system-imposed argument length is exceeded, +or if there were not enough resources to fork. It is not possible to +distinguish between failed execution and successful execution that had +an exit status of 127. + + On UNIX platforms, where it is possible to detect when command +execution is terminated by a signal, rather than a normal exit, the +result is the signal number shifted left by eight bits. + + dnl This test assumes kill is a shell builtin, and that signals are + dnl recognizable. + ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics + ')m4exit(`77')')dnl + syscmd(`kill -9 $$') + => + sysval + =>2304 + syscmd() + => + sysval + =>0 + esyscmd(`kill -9 $$') + => + sysval + =>2304 + + +File: m4.info, Node: Mkstemp, Prev: Sysval, Up: Shell commands + +13.5 Making temporary files +=========================== + +Commands specified to `syscmd' or `esyscmd' might need a temporary +file, for output or for some other purpose. There is a builtin macro, +`mkstemp', for making a temporary file: + + -- Builtin: mkstemp (TEMPLATE) + -- Builtin: maketemp (TEMPLATE) + Expands to the quoted name of a new, empty file, made from the + string TEMPLATE, which should end with the string `XXXXXX'. The + six `X' characters are then replaced with random characters + matching the regular expression `[a-zA-Z0-9._-]', in order to make + the file name unique. If fewer than six `X' characters are found + at the end of `template', the result will be longer than the + template. The created file will have access permissions as if by + `chmod =rw,go=', meaning that the current umask of the `m4' + process is taken into account, and at most only the current user + can read and write the file. + + The traditional behavior, standardized by POSIX, is that + `maketemp' merely replaces the trailing `X' with the process id, + without creating a file or quoting the expansion, and without + ensuring that the resulting string is a unique file name. In + part, this means that using the same TEMPLATE twice in the same + input file will result in the same expansion. This behavior is a + security hole, as it is very easy for another process to guess the + name that will be generated, and thus interfere with a subsequent + use of `syscmd' trying to manipulate that file name. Hence, POSIX + has recommended that all new implementations of `m4' provide the + secure `mkstemp' builtin, and that users of `m4' check for its + existence. + + The expansion is void and an error issued if a temporary file could + not be created. + + The macros `mkstemp' and `maketemp' are recognized only with + parameters. + + If you try this next example, you will most likely get different +output for the two file names, since the replacement characters are +randomly chosen: + + $ m4 + define(`tmp', `oops') + => + maketemp(`/tmp/fooXXXXXX') + =>/tmp/fooa07346 + ifdef(`mkstemp', `define(`maketemp', defn(`mkstemp'))', + `define(`mkstemp', defn(`maketemp'))dnl + errprint(`warning: potentially insecure maketemp implementation + ')') + => + mkstemp(`doc') + =>docQv83Uw + + Unless you use the `--traditional' command line option (or `-G', +*note Invoking m4: Limits control.), the GNU version of `maketemp' is +secure. This means that using the same template to multiple calls will +generate multiple files. However, we recommend that you use the new +`mkstemp' macro, introduced in GNU M4 1.4.8, which is secure even in +traditional mode. Also, as of M4 1.4.11, the secure implementation +quotes the resulting file name, so that you are guaranteed to know what +file was created even if the random file name happens to match an +existing macro. Notice that this example is careful to use `defn' to +avoid unintended expansion of `foo'. + + $ m4 + define(`foo', `errprint(`oops')') + => + syscmd(`rm -f foo-??????')sysval + =>0 + define(`file1', maketemp(`foo-XXXXXX'))dnl + ifelse(esyscmd(`echo \` foo-?????? \''), ` foo-?????? ', + `no file', `created') + =>created + define(`file2', maketemp(`foo-XX'))dnl + define(`file3', mkstemp(`foo-XXXXXX'))dnl + ifelse(len(defn(`file1')), len(defn(`file2')), + `same length', `different') + =>same length + ifelse(defn(`file1'), defn(`file2'), `same', `different file') + =>different file + ifelse(defn(`file2'), defn(`file3'), `same', `different file') + =>different file + ifelse(defn(`file1'), defn(`file3'), `same', `different file') + =>different file + syscmd(`rm 'defn(`file1') defn(`file2') defn(`file3')) + => + sysval + =>0 + + +File: m4.info, Node: Miscellaneous, Next: Frozen files, Prev: Shell commands, Up: Top + +14 Miscellaneous builtin macros +******************************* + +This chapter describes various builtins, that do not really belong in +any of the previous chapters. + +* Menu: + +* Errprint:: Printing error messages +* Location:: Printing current location +* M4exit:: Exiting from `m4' + + +File: m4.info, Node: Errprint, Next: Location, Up: Miscellaneous + +14.1 Printing error messages +============================ + +You can print error messages using `errprint': + + -- Builtin: errprint (MESSAGE, ...) + Prints MESSAGE and the rest of the arguments to standard error, + separated by spaces. Standard error is used, regardless of the + `--debugfile' option (*note Invoking m4: Debugging options.). + + The expansion of `errprint' is void. The macro `errprint' is + recognized only with parameters. + + errprint(`Invalid arguments to forloop + ') + error-->Invalid arguments to forloop + => + errprint(`1')errprint(`2',`3 + ') + error-->12 3 + => + + A trailing newline is _not_ printed automatically, so it should be +supplied as part of the argument, as in the example. Unfortunately, the +exact output of `errprint' is not very portable to other `m4' +implementations: POSIX requires that all arguments be printed, but some +implementations of `m4' only print the first. Furthermore, some BSD +implementations always append a newline for each `errprint' call, +regardless of whether the last argument already had one, and POSIX is +silent on whether this is acceptable. + + +File: m4.info, Node: Location, Next: M4exit, Prev: Errprint, Up: Miscellaneous + +14.2 Printing current location +============================== + +To make it possible to specify the location of an error, three utility +builtins exist: + + -- Builtin: __file__ + -- Builtin: __line__ + -- Builtin: __program__ + Expand to the quoted name of the current input file, the current + input line number in that file, and the quoted name of the current + invocation of `m4'. + + errprint(__program__:__file__:__line__: `input error + ') + error-->m4:stdin:1: input error + => + + Line numbers start at 1 for each file. If the file was found due to +the `-I' option or `M4PATH' environment variable, that is reflected in +the file name. The syncline option (`-s', *note Invoking m4: +Preprocessor features.), and the `f' and `l' flags of `debugmode' +(*note Debug Levels::), also use this notion of current file and line. +Redefining the three location macros has no effect on syncline, debug, +warning, or error message output. + + This example reuses the file `incl.m4' mentioned earlier (*note +Include::): + + $ m4 -I examples + define(`foo', ``$0' called at __file__:__line__') + => + foo + =>foo called at stdin:2 + include(`incl.m4') + =>Include file start + =>foo called at examples/incl.m4:2 + =>Include file end + => + + The location of macros invoked during the rescanning of macro +expansion text corresponds to the location in the file where the +expansion was triggered, regardless of how many newline characters the +expansion text contains. As of GNU M4 1.4.8, the location of text +wrapped with `m4wrap' (*note M4wrap::) is the point at which the +`m4wrap' was invoked. Previous versions, however, behaved as though +wrapped text came from line 0 of the file "". + + define(`echo', `$@') + => + define(`foo', `echo(__line__ + __line__)') + => + echo(__line__ + __line__) + =>4 + =>5 + m4wrap(`foo + ') + => + foo(errprint(__line__ + __line__ + )) + error-->8 + error-->9 + =>8 + =>8 + __line__ + =>11 + m4wrap(`__line__ + ') + => + ^D + =>12 + =>6 + =>6 + + The `__program__' macro behaves like `$0' in shell terminology. If +you invoke `m4' through an absolute path or a link with a different +spelling, rather than by relying on a `PATH' search for plain `m4', it +will affect how `__program__' expands. The intent is that you can use +it to produce error messages with the same formatting that `m4' +produces internally. It can also be used within `syscmd' (*note +Syscmd::) to pick the same version of `m4' that is currently running, +rather than whatever version of `m4' happens to be first in `PATH'. It +was first introduced in GNU M4 1.4.6. + + +File: m4.info, Node: M4exit, Prev: Location, Up: Miscellaneous + +14.3 Exiting from `m4' +====================== + +If you need to exit from `m4' before the entire input has been read, +you can use `m4exit': + + -- Builtin: m4exit ([CODE = `0']) + Causes `m4' to exit, with exit status CODE. If CODE is left out, + the exit status is zero. If CODE cannot be parsed, or is outside + the range of 0 to 255, the exit status is one. No further input + is read, and all wrapped and diverted text is discarded. + + m4wrap(`This text is lost due to `m4exit'.') + => + divert(`1') So is this. + divert + => + m4exit And this is never read. + + A common use of this is to abort processing: + + -- Composite: fatal_error (MESSAGE) + Abort processing with an error message and non-zero status. Prefix + MESSAGE with details about where the error occurred, and print the + resulting string to standard error. + + define(`fatal_error', + `errprint(__program__:__file__:__line__`: fatal error: $* + ')m4exit(`1')') + => + fatal_error(`this is a BAD one, buster') + error-->m4:stdin:4: fatal error: this is a BAD one, buster + + After this macro call, `m4' will exit with exit status 1. This macro +is only intended for error exits, since the normal exit procedures are +not followed, i.e., diverted text is not undiverted, and saved text +(*note M4wrap::) is not reread. (This macro could be made more robust +to earlier versions of `m4'. You should try to see if you can find +weaknesses and correct them; or *note Answers: Improved fatal_error.). + + Note that it is still possible for the exit status to be different +than what was requested by `m4exit'. If `m4' detects some other error, +such as a write error on standard output, the exit status will be +non-zero even if `m4exit' requested zero. + + If standard input is seekable, then the file will be positioned at +the next unread character. If it is a pipe or other non-seekable file, +then there are no guarantees how much data `m4' might have read into +buffers, and thus discarded. + + +File: m4.info, Node: Frozen files, Next: Compatibility, Prev: Miscellaneous, Up: Top + +15 Fast loading of frozen state +******************************* + +Some bigger `m4' applications may be built over a common base +containing hundreds of definitions and other costly initializations. +Usually, the common base is kept in one or more declarative files, +which files are listed on each `m4' invocation prior to the user's +input file, or else each input file uses `include'. + + Reading the common base of a big application, over and over again, +may be time consuming. GNU `m4' offers some machinery to speed up the +start of an application using lengthy common bases. + +* Menu: + +* Using frozen files:: Using frozen files +* Frozen file format:: Frozen file format + + +File: m4.info, Node: Using frozen files, Next: Frozen file format, Up: Frozen files + +15.1 Using frozen files +======================= + +Suppose a user has a library of `m4' initializations in `base.m4', +which is then used with multiple input files: + + $ m4 base.m4 input1.m4 + $ m4 base.m4 input2.m4 + $ m4 base.m4 input3.m4 + + Rather than spending time parsing the fixed contents of `base.m4' +every time, the user might rather execute: + + $ m4 -F base.m4f base.m4 + +once, and further execute, as often as needed: + + $ m4 -R base.m4f input1.m4 + $ m4 -R base.m4f input2.m4 + $ m4 -R base.m4f input3.m4 + +with the varying input. The first call, containing the `-F' option, +only reads and executes file `base.m4', defining various application +macros and computing other initializations. Once the input file +`base.m4' has been completely processed, GNU `m4' produces in +`base.m4f' a "frozen" file, that is, a file which contains a kind of +snapshot of the `m4' internal state. + + Later calls, containing the `-R' option, are able to reload the +internal state of `m4', from `base.m4f', _prior_ to reading any other +input files. This means instead of starting with a virgin copy of +`m4', input will be read after having effectively recovered the effect +of a prior run. In our example, the effect is the same as if file +`base.m4' has been read anew. However, this effect is achieved a lot +faster. + + Only one frozen file may be created or read in any one `m4' +invocation. It is not possible to recover two frozen files at once. +However, frozen files may be updated incrementally, through using `-R' +and `-F' options simultaneously. For example, if some care is taken, +the command: + + $ m4 file1.m4 file2.m4 file3.m4 file4.m4 + +could be broken down in the following sequence, accumulating the same +output: + + $ m4 -F file1.m4f file1.m4 + $ m4 -R file1.m4f -F file2.m4f file2.m4 + $ m4 -R file2.m4f -F file3.m4f file3.m4 + $ m4 -R file3.m4f file4.m4 + + Some care is necessary because not every effort has been made for +this to work in all cases. In particular, the trace attribute of +macros is not handled, nor the current setting of `changeword'. +Currently, `m4wrap' and `sysval' also have problems. Also, +interactions for some options of `m4', being used in one call and not +in the next, have not been fully analyzed yet. On the other end, you +may be confident that stacks of `pushdef' definitions are handled +correctly, as well as undefined or renamed builtins, and changed +strings for quotes or comments. And future releases of GNU M4 will +improve on the utility of frozen files. + + When an `m4' run is to be frozen, the automatic undiversion which +takes place at end of execution is inhibited. Instead, all positively +numbered diversions are saved into the frozen file. The active +diversion number is also transmitted. + + A frozen file to be reloaded need not reside in the current +directory. It is looked up the same way as an `include' file (*note +Search Path::). + + If the frozen file was generated with a newer version of `m4', and +contains directives that an older `m4' cannot parse, attempting to load +the frozen file with option `-R' will cause `m4' to exit with status 63 +to indicate version mismatch. + + +File: m4.info, Node: Frozen file format, Prev: Using frozen files, Up: Frozen files + +15.2 Frozen file format +======================= + +Frozen files are sharable across architectures. It is safe to write a +frozen file on one machine and read it on another, given that the +second machine uses the same or newer version of GNU `m4'. It is +conventional, but not required, to give a frozen file the suffix of +`.m4f'. + + These are simple (editable) text files, made up of directives, each +starting with a capital letter and ending with a newline (). +Wherever a directive is expected, the character `#' introduces a +comment line; empty lines are also ignored if they are not part of an +embedded string. In the following descriptions, each LEN refers to the +length of the corresponding strings STR in the next line of input. +Numbers are always expressed in decimal. There are no escape +characters. The directives are: + +`C LEN1 , LEN2 STR1 STR2 ' + Uses STR1 and STR2 as the begin-comment and end-comment strings. + If omitted, then `#' and are the comment delimiters. + +`D NUMBER, LEN STR ' + Selects diversion NUMBER, making it current, then copy STR in the + current diversion. NUMBER may be a negative number for a + non-existing diversion. To merely specify an active selection, + use this command with an empty STR. With 0 as the diversion + NUMBER, STR will be issued on standard output at reload time. GNU + `m4' will not produce the `D' directive with non-zero length for + diversion 0, but this can be done with manual edits. This + directive may appear more than once for the same diversion, in + which case the diversion is the concatenation of the various uses. + If omitted, then diversion 0 is current. + +`F LEN1 , LEN2 STR1 STR2 ' + Defines, through `pushdef', a definition for STR1 expanding to the + function whose builtin name is STR2. If the builtin does not + exist (for example, if the frozen file was produced by a copy of + `m4' compiled with changeword support, but the version of `m4' + reloading was compiled without it), the reload is silent, but any + subsequent use of the definition of STR1 will result in a warning. + This directive may appear more than once for the same name, and + its order, along with `T', is important. If omitted, you will + have no access to any builtins. + +`Q LEN1 , LEN2 STR1 STR2 ' + Uses STR1 and STR2 as the begin-quote and end-quote strings. If + omitted, then ``' and `'' are the quote delimiters. + +`T LEN1 , LEN2 STR1 STR2 ' + Defines, though `pushdef', a definition for STR1 expanding to the + text given by STR2. This directive may appear more than once for + the same name, and its order, along with `F', is important. + +`V NUMBER ' + Confirms the format of the file. `m4' 1.4.13 only creates and + understands frozen files where NUMBER is 1. This directive must + be the first non-comment in the file, and may not appear more than + once. + + +File: m4.info, Node: Compatibility, Next: Answers, Prev: Frozen files, Up: Top + +16 Compatibility with other versions of `m4' +******************************************** + +This chapter describes the many of the differences between this +implementation of `m4', and of other implementations found under UNIX, +such as System V Release 3, Solaris, and BSD flavors. In particular, +it lists the known differences and extensions to POSIX. However, the +list is not necessarily comprehensive. + + At the time of this writing, POSIX 2001 (also known as IEEE Std +1003.1-2001) is the latest standard, although a new version of POSIX is +under development and includes several proposals for modifying what +`m4' is required to do. The requirements for `m4' are shared between +SUSv3 and POSIX, and can be viewed at +`http://www.opengroup.org/onlinepubs/000095399/utilities/m4.html'. + +* Menu: + +* Extensions:: Extensions in GNU M4 +* Incompatibilities:: Facilities in System V m4 not in GNU M4 +* Other Incompatibilities:: Other incompatibilities + + +File: m4.info, Node: Extensions, Next: Incompatibilities, Up: Compatibility + +16.1 Extensions in GNU M4 +========================= + +This version of `m4' contains a few facilities that do not exist in +System V `m4'. These extra facilities are all suppressed by using the +`-G' command line option (*note Invoking m4: Limits control.), unless +overridden by other command line options. + + * In the `$N' notation for macro arguments, N can contain several + digits, while the System V `m4' only accepts one digit. This + allows macros in GNU `m4' to take any number of arguments, and not + only nine (*note Arguments::). + + This means that `define(`foo', `$11')' is ambiguous between + implementations. To portably choose between grabbing the first + parameter and appending 1 to the expansion, or grabbing the + eleventh parameter, you can do the following: + + define(`a1', `A1') + => + dnl First argument, concatenated with 1 + define(`_1', `$1')define(`first1', `_1($@)1') + => + dnl Eleventh argument, portable + define(`_9', `$9')define(`eleventh', `_9(shift(shift($@)))') + => + dnl Eleventh argument, GNU style + define(`Eleventh', `$11') + => + first1(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') + =>A1 + eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') + =>k + Eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') + =>k + + Also see the `argn' macro (*note Shift::). + + * The `divert' (*note Divert::) macro can manage more than 9 + diversions. GNU `m4' treats all positive numbers as valid + diversions, rather than discarding diversions greater than 9. + + * Files included with `include' and `sinclude' are sought in a user + specified search path, if they are not found in the working + directory. The search path is specified by the `-I' option and the + `M4PATH' environment variable (*note Search Path::). + + * Arguments to `undivert' can be non-numeric, in which case the named + file will be included uninterpreted in the output (*note + Undivert::). + + * Formatted output is supported through the `format' builtin, which + is modeled after the C library function `printf' (*note Format::). + + * Searches and text substitution through basic regular expressions + are supported by the `regexp' (*note Regexp::) and `patsubst' + (*note Patsubst::) builtins. Some BSD implementations use + extended regular expressions instead. + + * The output of shell commands can be read into `m4' with `esyscmd' + (*note Esyscmd::). + + * There is indirect access to any builtin macro with `builtin' + (*note Builtin::). + + * Macros can be called indirectly through `indir' (*note Indir::). + + * The name of the program, the current input file, and the current + input line number are accessible through the builtins + `__program__', `__file__', and `__line__' (*note Location::). + + * The format of the output from `dumpdef' and macro tracing can be + controlled with `debugmode' (*note Debug Levels::). + + * The destination of trace and debug output can be controlled with + `debugfile' (*note Debug Output::). + + * The `maketemp' (*note Mkstemp::) macro behaves like `mkstemp', + creating a new file with a unique name on every invocation, rather + than following the insecure behavior of replacing the trailing `X' + characters with the `m4' process id. + + * POSIX only requires support for the command line options `-s', + `-D', and `-U', so all other options accepted by GNU M4 are + extensions. *Note Invoking m4::, for a description of these + options. + + The debugging and tracing facilities in GNU `m4' are much more + extensive than in most other versions of `m4'. + + +File: m4.info, Node: Incompatibilities, Next: Other Incompatibilities, Prev: Extensions, Up: Compatibility + +16.2 Facilities in System V `m4' not in GNU `m4' +================================================ + +The version of `m4' from System V contains a few facilities that have +not been implemented in GNU `m4' yet. Additionally, POSIX requires +some behaviors that GNU `m4' has not implemented yet. Relying on these +behaviors is non-portable, as a future release of GNU `m4' may change. + + * POSIX requires support for multiple arguments to `defn', without + any clarification on how `defn' behaves when one of the multiple + arguments names a builtin. System V `m4' and some other + implementations allow mixing builtins and text macros into a single + macro. GNU `m4' only supports joining multiple text arguments, + although a future implementation may lift this restriction to + behave more like System V. The only portable way to join text + macros with builtins is via helper macros and implicit + concatenation of macro results. + + * POSIX requires an application to exit with non-zero status if it + wrote an error message to stderr. This has not yet been + consistently implemented for the various builtins that are + required to issue an error (such as `eval' (*note Eval::) when an + argument cannot be parsed). + + * Some traditional implementations only allow reading standard input + once, but GNU `m4' correctly handles multiple instances of `-' on + the command line. + + * POSIX requires `m4wrap' (*note M4wrap::) to act in FIFO (first-in, + first-out) order, but GNU `m4' currently uses LIFO order. + Furthermore, POSIX states that only the first argument to `m4wrap' + is saved for later evaluation, but GNU `m4' saves and processes + all arguments, with output separated by spaces. + + * POSIX states that builtins that require arguments, but are called + without arguments, have undefined behavior. Traditional + implementations simply behave as though empty strings had been + passed. For example, `a`'define`'b' would expand to `ab'. But + GNU `m4' ignores certain builtins if they have missing arguments, + giving `adefineb' for the above example. + + * Traditional implementations handle `define(`f',`1')' (*note + Define::) by undefining the entire stack of previous definitions, + and if doing `undefine(`f')' first. GNU `m4' replaces just the top + definition on the stack, as if doing `popdef(`f')' followed by + `pushdef(`f',`1')'. POSIX allows either behavior. + + * POSIX 2001 requires `syscmd' (*note Syscmd::) to evaluate command + output for macro expansion, but this was a mistake that is + anticipated to be corrected in the next version of POSIX. GNU + `m4' follows traditional behavior in `syscmd' where output is not + rescanned, and provides the extension `esyscmd' that does scan the + output. + + * At one point, POSIX required `changequote(ARG)' (*note + Changequote::) to use newline as the close quote, but this was a + bug, and the next version of POSIX is anticipated to state that + using empty strings or just one argument is unspecified. + Meanwhile, the GNU `m4' behavior of treating an empty end-quote + delimiter as `'' is not portable, as Solaris treats it as + repeating the start-quote delimiter, and BSD treats it as leaving + the previous end-quote delimiter unchanged. For predictable + results, never call changequote with just one argument, or with + empty strings for arguments. + + * At one point, POSIX required `changecom(ARG,)' (*note Changecom::) + to make it impossible to end a comment, but this is a bug, and the + next version of POSIX is anticipated to state that using empty + strings is unspecified. Meanwhile, the GNU `m4' behavior of + treating an empty end-comment delimiter as newline is not + portable, as BSD treats it as leaving the previous end-comment + delimiter unchanged. It is also impossible in BSD implementations + to disable comments, even though that is required by POSIX. For + predictable results, never call changecom with empty strings for + arguments. + + * Most implementations of `m4' give macros a higher precedence than + comments when parsing, meaning that if the start delimiter given to + `changecom' (*note Changecom::) starts with a macro name, comments + are effectively disabled. POSIX does not specify what the + precedence is, so this version of GNU `m4' parser recognizes + comments, then macros, then quoted strings. + + * Traditional implementations allow argument collection, but not + string and comment processing, to span file boundaries. Thus, if + `a.m4' contains `len(', and `b.m4' contains `abc)', `m4 a.m4 b.m4' + outputs `3' with traditional `m4', but gives an error message that + the end of file was encountered inside a macro with GNU `m4'. On + the other hand, traditional implementations do end of file + processing for files included with `include' or `sinclude' (*note + Include::), while GNU `m4' seamlessly integrates the content of + those files. Thus `include(`a.m4')include(`b.m4')' will output + `3' instead of giving an error. + + * Traditional `m4' treats `traceon' (*note Trace::) without + arguments as a global variable, independent of named macro tracing. + Also, once a macro is undefined, named tracing of that macro is + lost. On the other hand, when GNU `m4' encounters `traceon' + without arguments, it turns tracing on for all existing + definitions at the time, but does not trace future definitions; + `traceoff' without arguments turns tracing off for all definitions + regardless of whether they were also traced by name; and tracing + by name, such as with `-tfoo' at the command line or + `traceon(`foo')' in the input, is an attribute that is preserved + even if the macro is currently undefined. + + Additionally, while POSIX requires trace output, it makes no + demands on the formatting of that output. Parsing trace output is + not guaranteed to be reliable, even between different releases of + GNU M4; however, the intent is that any future changes in trace + output will only occur under the direction of additional + `debugmode' flags (*note Debug Levels::). + + * POSIX requires `eval' (*note Eval::) to treat all operators with + the same precedence as C. However, earlier versions of GNU `m4' + followed the traditional behavior of other `m4' implementations, + where bitwise and logical negation (`~' and `!') have lower + precedence than equality operators; and where equality operators + (`==' and `!=') had the same precedence as relational operators + (such as `<'). Use explicit parentheses to ensure proper + precedence. As extensions to POSIX, GNU `m4' gives well-defined + semantics to operations that C leaves undefined, such as when + overflow occurs, when shifting negative numbers, or when + performing division by zero. POSIX also requires `=' to cause an + error, but many traditional implementations allowed it as an alias + for `=='. + + * POSIX 2001 requires `translit' (*note Translit::) to treat each + character of the second and third arguments literally. However, + it is anticipated that the next version of POSIX will allow the + GNU `m4' behavior of treating `-' as a range operator. + + * POSIX requires `m4' to honor the locale environment variables of + `LANG', `LC_ALL', `LC_CTYPE', `LC_MESSAGES', and `NLSPATH', but + this has not yet been implemented in GNU `m4'. + + * POSIX states that only unquoted leading newlines and blanks (that + is, space and tab) are ignored when collecting macro arguments. + However, this appears to be a bug in POSIX, since most traditional + implementations also ignore all whitespace (formfeed, carriage + return, and vertical tab). GNU `m4' follows tradition and ignores + all leading unquoted whitespace. + + * A strictly-compliant POSIX client is not allowed to use + command-line arguments not specified by POSIX. However, since + this version of M4 ignores `POSIXLY_CORRECT' and enables the option + `--gnu' by default (*note Invoking m4: Limits control.), a client + desiring to be strictly compliant has no way to disable GNU + extensions that conflict with POSIX when directly invoking the + compiled `m4'. A future version of `GNU' M4 will honor the + environment variable `POSIXLY_CORRECT', implicitly enabling + `--traditional' if it is set, in order to allow a + strictly-compliant client. In the meantime, a client needing + strict POSIX compliance can use the workaround of invoking a shell + script wrapper, where the wrapper then adds `--traditional' to the + arguments passed to the compiled `m4'. + + +File: m4.info, Node: Other Incompatibilities, Prev: Incompatibilities, Up: Compatibility + +16.3 Other incompatibilities +============================ + +There are a few other incompatibilities between this implementation of +`m4', and the System V version. + + * GNU `m4' implements sync lines differently from System V `m4', + when text is being diverted. GNU `m4' outputs the sync lines when + the text is being diverted, and System V `m4' when the diverted + text is being brought back. + + The problem is which lines and file names should be attached to + text that is being, or has been, diverted. System V `m4' regards + all the diverted text as being generated by the source line + containing the `undivert' call, whereas GNU `m4' regards the + diverted text as being generated at the time it is diverted. + + The sync line option is used mostly when using `m4' as a front end + to a compiler. If a diverted line causes a compiler error, the + error messages should most probably refer to the place where the + diversion was made, and not where it was inserted again. + + divert(2)2 + divert(1)1 + divert`'0 + =>#line 3 "stdin" + =>0 + ^D + =>#line 2 "stdin" + =>1 + =>#line 1 "stdin" + =>2 + + The current `m4' implementation has a limitation that the syncline + output at the start of each diversion occurs no matter what, even + if the previous diversion did not end with a newline. This goes + contrary to the claim that synclines appear on a line by + themselves, so this limitation may be corrected in a future + version of `m4'. In the meantime, when using `-s', it is wisest + to make sure all diversions end with newline. + + * GNU `m4' makes no attempt at prohibiting self-referential + definitions like: + + define(`x', `x') + => + define(`x', `x ') + => + + There is nothing inherently wrong with defining `x' to return `x'. + The wrong thing is to expand `x' unquoted, because that would + cause an infinite rescan loop. In `m4', one might use macros to + hold strings, as we do for variables in other programming + languages, further checking them with: + + ifelse(defn(`HOLDER'), `VALUE', ...) + + In cases like this one, an interdiction for a macro to hold its + own name would be a useless limitation. Of course, this leaves + more rope for the GNU `m4' user to hang himself! Rescanning hangs + may be avoided through careful programming, a little like for + endless loops in traditional programming languages. + + +File: m4.info, Node: Answers, Next: Copying This Package, Prev: Compatibility, Up: Top + +17 Correct version of some examples +*********************************** + +Some of the examples in this manuals are buggy or not very robust, for +demonstration purposes. Improved versions of these composite macros are +presented here. + +* Menu: + +* Improved exch:: Solution for `exch' +* Improved forloop:: Solution for `forloop' +* Improved foreach:: Solution for `foreach' +* Improved copy:: Solution for `copy' +* Improved m4wrap:: Solution for `m4wrap' +* Improved cleardivert:: Solution for `cleardivert' +* Improved capitalize:: Solution for `capitalize' +* Improved fatal_error:: Solution for `fatal_error' + + +File: m4.info, Node: Improved exch, Next: Improved forloop, Up: Answers + +17.1 Solution for `exch' +======================== + +The `exch' macro (*note Arguments::) as presented requires clients to +double quote their arguments. A nicer definition, which lets clients +follow the rule of thumb of one level of quoting per level of +parentheses, involves adding quotes in the definition of `exch', as +follows: + + define(`exch', ``$2', `$1'') + => + define(exch(`expansion text', `macro')) + => + macro + =>expansion text + + +File: m4.info, Node: Improved forloop, Next: Improved foreach, Prev: Improved exch, Up: Answers + +17.2 Solution for `forloop' +=========================== + +The `forloop' macro (*note Forloop::) as presented earlier can go into +an infinite loop if given an iterator that is not parsed as a macro +name. It does not do any sanity checking on its numeric bounds, and +only permits decimal numbers for bounds. Here is an improved version, +shipped as `m4-1.4.13/examples/forloop2.m4'; this version also +optimizes overhead by calling four macros instead of six per iteration +(excluding those in TEXT), by not dereferencing the ITERATOR in the +helper `_forloop'. + + $ m4 -d -I examples + undivert(`forloop2.m4')dnl + =>divert(`-1') + =># forloop(var, from, to, stmt) - improved version: + =># works even if VAR is not a strict macro name + =># performs sanity check that FROM is larger than TO + =># allows complex numerical expressions in TO and FROM + =>define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1', + => `pushdef(`$1')_$0(`$1', eval(`$2'), + => eval(`$3'), `$4')popdef(`$1')')') + =>define(`_forloop', + => `define(`$1', `$2')$4`'ifelse(`$2', `$3', `', + => `$0(`$1', incr(`$2'), `$3', `$4')')') + =>divert`'dnl + include(`forloop2.m4') + => + forloop(`i', `2', `1', `no iteration occurs') + => + forloop(`', `1', `2', ` odd iterator name') + => odd iterator name odd iterator name + forloop(`i', `5 + 5', `0xc', ` 0x`'eval(i, `16')') + => 0xa 0xb 0xc + forloop(`i', `a', `b', `non-numeric bounds') + error-->m4:stdin:6: bad expression in eval (bad input): (a) <= (b) + => + + One other change to notice is that the improved version used `_$0' +rather than `_foreach' to invoke the helper routine. In general, this +is a good practice to follow, because then the set of macros can be +uniformly transformed. The following example shows a transformation +that doubles the current quoting and appends a suffix `2' to each +transformed macro. If `foreach' refers to the literal `_foreach', then +`foreach2' invokes `_foreach' instead of the intended `_foreach2', and +the mixing of quoting paradigms leads to an infinite recursion loop in +this example. + + $ m4 -d -L 9 -I examples + define(`arg1', `$1')include(`forloop2.m4')include(`quote.m4') + => + define(`double', `define(`$1'`2', + arg1(patsubst(dquote(defn(`$1')), `[`']', `\&\&')))') + => + double(`forloop')double(`_forloop')defn(`forloop2') + =>ifelse(eval(``($2) <= ($3)''), ``1'', + => ``pushdef(``$1'')_$0(``$1'', eval(``$2''), + => eval(``$3''), ``$4'')popdef(``$1'')'') + forloop(i, 1, 5, `ifelse(')forloop(i, 1, 5, `)') + => + changequote(`[', `]')changequote([``], ['']) + => + forloop2(i, 1, 5, ``ifelse('')forloop2(i, 1, 5, ``)'') + => + changequote`'include(`forloop.m4') + => + double(`forloop')double(`_forloop')defn(`forloop2') + =>pushdef(``$1'', ``$2'')_forloop($@)popdef(``$1'') + forloop(i, 1, 5, `ifelse(')forloop(i, 1, 5, `)') + => + changequote(`[', `]')changequote([``], ['']) + => + forloop2(i, 1, 5, ``ifelse('')forloop2(i, 1, 5, ``)'') + error-->m4:stdin:12: recursion limit of 9 exceeded, use -L to change it + + One more optimization is still possible. Instead of repeatedly +assigning a variable then invoking or dereferencing it, it is possible +to pass the current iterator value as a single argument. Coupled with +`curry' if other arguments are needed (*note Composition::), or with +helper macros if the argument is needed in more than one place in the +expansion, the output can be generated with three, rather than four, +macros of overhead per iteration. Notice how the file +`m4-1.4.13/examples/forloop3.m4' rearranges the arguments of the helper +`_forloop' to take two arguments that are placed around the current +value. By splitting a balanced set of parantheses across multiple +arguments, the helper macro can now be shared by `forloop' and the new +`forloop_arg'. + + $ m4 -I examples + include(`forloop3.m4') + => + undivert(`forloop3.m4')dnl + =>divert(`-1') + =># forloop_arg(from, to, macro) - invoke MACRO(value) for + =># each value between FROM and TO, without define overhead + =>define(`forloop_arg', `ifelse(eval(`($1) <= ($2)'), `1', + => `_forloop(`$1', eval(`$2'), `$3(', `)')')') + =># forloop(var, from, to, stmt) - refactored to share code + =>define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1', + => `pushdef(`$1')_forloop(eval(`$2'), eval(`$3'), + => `define(`$1',', `)$4')popdef(`$1')')') + =>define(`_forloop', + => `$3`$1'$4`'ifelse(`$1', `$2', `', + => `$0(incr(`$1'), `$2', `$3', `$4')')') + =>divert`'dnl + forloop(`i', `1', `3', ` i') + => 1 2 3 + define(`echo', `$@') + => + forloop_arg(`1', `3', ` echo') + => 1 2 3 + include(`curry.m4') + => + forloop_arg(`1', `3', `curry(`pushdef', `a')') + => + a + =>3 + popdef(`a')a + =>2 + popdef(`a')a + =>1 + popdef(`a')a + =>a + + Of course, it is possible to make even more improvements, such as +adding an optional step argument, or allowing iteration through +descending sequences. GNU Autoconf provides some of these additional +bells and whistles in its `m4_for' macro. + + +File: m4.info, Node: Improved foreach, Next: Improved copy, Prev: Improved forloop, Up: Answers + +17.3 Solution for `foreach' +=========================== + +The `foreach' and `foreachq' macros (*note Foreach::) as presented +earlier each have flaws. First, we will examine and fix the quadratic +behavior of `foreachq': + + $ m4 -I examples + include(`foreachq.m4') + => + traceon(`shift')debugmode(`aq') + => + foreachq(`x', ``1', `2', `3', `4'', `x + ')dnl + =>1 + error-->m4trace: -3- shift(`1', `2', `3', `4') + error-->m4trace: -2- shift(`1', `2', `3', `4') + =>2 + error-->m4trace: -4- shift(`1', `2', `3', `4') + error-->m4trace: -3- shift(`2', `3', `4') + error-->m4trace: -3- shift(`1', `2', `3', `4') + error-->m4trace: -2- shift(`2', `3', `4') + =>3 + error-->m4trace: -5- shift(`1', `2', `3', `4') + error-->m4trace: -4- shift(`2', `3', `4') + error-->m4trace: -3- shift(`3', `4') + error-->m4trace: -4- shift(`1', `2', `3', `4') + error-->m4trace: -3- shift(`2', `3', `4') + error-->m4trace: -2- shift(`3', `4') + =>4 + error-->m4trace: -6- shift(`1', `2', `3', `4') + error-->m4trace: -5- shift(`2', `3', `4') + error-->m4trace: -4- shift(`3', `4') + error-->m4trace: -3- shift(`4') + + Each successive iteration was adding more quoted `shift' +invocations, and the entire list contents were passing through every +iteration. In general, when recursing, it is a good idea to make the +recursion use fewer arguments, rather than adding additional quoted +uses of `shift'. By doing so, `m4' uses less memory, invokes fewer +macros, is less likely to run into machine limits, and most +importantly, performs faster. The fixed version of `foreachq' can be +found in `m4-1.4.13/examples/foreachq2.m4': + + $ m4 -I examples + include(`foreachq2.m4') + => + undivert(`foreachq2.m4')dnl + =>include(`quote.m4')dnl + =>divert(`-1') + =># foreachq(x, `item_1, item_2, ..., item_n', stmt) + =># quoted list, improved version + =>define(`foreachq', `pushdef(`$1')_$0($@)popdef(`$1')') + =>define(`_arg1q', ``$1'') + =>define(`_rest', `ifelse(`$#', `1', `', `dquote(shift($@))')') + =>define(`_foreachq', `ifelse(`$2', `', `', + => `define(`$1', _arg1q($2))$3`'$0(`$1', _rest($2), `$3')')') + =>divert`'dnl + traceon(`shift')debugmode(`aq') + => + foreachq(`x', ``1', `2', `3', `4'', `x + ')dnl + =>1 + error-->m4trace: -3- shift(`1', `2', `3', `4') + =>2 + error-->m4trace: -3- shift(`2', `3', `4') + =>3 + error-->m4trace: -3- shift(`3', `4') + =>4 + + Note that the fixed version calls unquoted helper macros in +`_foreachq' to trim elements immediately; those helper macros in turn +must re-supply the layer of quotes lost in the macro invocation. +Contrast the use of `_arg1q', which quotes the first list element, with +`_arg1' of the earlier implementation that returned the first list +element directly. Additionally, by calling the helper method +immediately, the `defn(`ITERATOR')' no longer contains unexpanded +macros. + + The astute m4 programmer might notice that the solution above still +uses more memory and macro invocations, and thus more time, than +strictly necessary. Note that `$2', which contains an arbitrarily long +quoted list, is expanded and rescanned three times per iteration of +`_foreachq'. Furthermore, every iteration of the algorithm effectively +unboxes then reboxes the list, which costs a couple of macro +invocations. It is possible to rewrite the algorithm for a bit more +speed by swapping the order of the arguments to `_foreachq' in order to +operate on an unboxed list in the first place, and by using the +fixed-length `$#' instead of an arbitrary length list as the key to end +recursion. The result is an overhead of six macro invocations per loop +(excluding any macros in TEXT), instead of eight. This alternative +approach is available as `m4-1.4.13/examples/foreach3.m4': + + $ m4 -I examples + include(`foreachq3.m4') + => + undivert(`foreachq3.m4')dnl + =>divert(`-1') + =># foreachq(x, `item_1, item_2, ..., item_n', stmt) + =># quoted list, alternate improved version + =>define(`foreachq', `ifelse(`$2', `', `', + => `pushdef(`$1')_$0(`$1', `$3', `', $2)popdef(`$1')')') + =>define(`_foreachq', `ifelse(`$#', `3', `', + => `define(`$1', `$4')$2`'$0(`$1', `$2', + => shift(shift(shift($@))))')') + =>divert`'dnl + traceon(`shift')debugmode(`aq') + => + foreachq(`x', ``1', `2', `3', `4'', `x + ')dnl + =>1 + error-->m4trace: -4- shift(`x', `x + error-->', `', `1', `2', `3', `4') + error-->m4trace: -3- shift(`x + error-->', `', `1', `2', `3', `4') + error-->m4trace: -2- shift(`', `1', `2', `3', `4') + =>2 + error-->m4trace: -4- shift(`x', `x + error-->', `1', `2', `3', `4') + error-->m4trace: -3- shift(`x + error-->', `1', `2', `3', `4') + error-->m4trace: -2- shift(`1', `2', `3', `4') + =>3 + error-->m4trace: -4- shift(`x', `x + error-->', `2', `3', `4') + error-->m4trace: -3- shift(`x + error-->', `2', `3', `4') + error-->m4trace: -2- shift(`2', `3', `4') + =>4 + error-->m4trace: -4- shift(`x', `x + error-->', `3', `4') + error-->m4trace: -3- shift(`x + error-->', `3', `4') + error-->m4trace: -2- shift(`3', `4') + + In the current version of M4, every instance of `$@' is rescanned as +it is encountered. Thus, the `foreachq3.m4' alternative uses much less +memory than `foreachq2.m4', and executes as much as 10% faster, since +each iteration encounters fewer `$@'. However, the implementation of +rescanning every byte in `$@' is quadratic in the number of bytes +scanned (for example, making the broken version in `foreachq.m4' cubic, +rather than quadratic, in behavior). A future release of M4 will +improve the underlying implementation by reusing results of previous +scans, so that both styles of `foreachq' can become linear in the +number of bytes scanned. Notice how the implementation injects an +empty argument prior to expanding `$2' within `foreachq'; the helper +macro `_foreachq' then ignores the third argument altogether, and ends +recursion when there are three arguments left because there was nothing +left to pass through `shift'. Thus, each iteration only needs one +`ifelse', rather than the two conditionals used in the version from +`foreachq2.m4'. + + So far, all of the implementations of `foreachq' presented have been +quadratic with M4 1.4.x. But `forloop' is linear, because each +iteration parses a constant amount of arguments. So, it is possible to +design a variant that uses `forloop' to do the iteration, then uses +`$@' only once at the end, giving a linear result even with older M4 +implementations. This implementation relies on the GNU extension that +`$10' expands to the tenth argument rather than the first argument +concatenated with `0'. The trick is to define an intermediate macro +that repeats the text `m4_define(`$1', `$N')$2`'', with `n' set to +successive integers corresponding to each argument. The helper macro +`_foreachq_' is needed in order to generate the literal sequences such +as `$1' into the intermediate macro, rather than expanding them as the +arguments of `_foreachq'. With this approach, no `shift' calls are +even needed! Even though there are seven macros of overhead per +iteration instead of six in `foreachq3.m4', the linear scaling is +apparent at relatively small list sizes. However, this approach will +need adjustment when a future version of M4 follows POSIX by no longer +treating `$10' as the tenth argument; the anticipation is that `${10}' +can be used instead, although that alternative syntax is not yet +supported. + + $ m4 -I examples + include(`foreachq4.m4') + => + undivert(`foreachq4.m4')dnl + =>include(`forloop2.m4')dnl + =>divert(`-1') + =># foreachq(x, `item_1, item_2, ..., item_n', stmt) + =># quoted list, version based on forloop + =>define(`foreachq', + =>`ifelse(`$2', `', `', `_$0(`$1', `$3', $2)')') + =>define(`_foreachq', + =>`pushdef(`$1', forloop(`$1', `3', `$#', + => `$0_(`1', `2', indir(`$1'))')`popdef( + => `$1')')indir(`$1', $@)') + =>define(`_foreachq_', + =>``define(`$$1', `$$3')$$2`''') + =>divert`'dnl + traceon(`shift')debugmode(`aq') + => + foreachq(`x', ``1', `2', `3', `4'', `x + ')dnl + =>1 + =>2 + =>3 + =>4 + + For yet another approach, the improved version of `foreach', +available in `m4-1.4.13/examples/foreach2.m4', simply overquotes the +arguments to `_foreach' to begin with, using `dquote_elt'. Then +`_foreach' can just use `_arg1' to remove the extra layer of quoting +that was added up front: + + $ m4 -I examples + include(`foreach2.m4') + => + undivert(`foreach2.m4')dnl + =>include(`quote.m4')dnl + =>divert(`-1') + =># foreach(x, (item_1, item_2, ..., item_n), stmt) + =># parenthesized list, improved version + =>define(`foreach', `pushdef(`$1')_$0(`$1', + => (dquote(dquote_elt$2)), `$3')popdef(`$1')') + =>define(`_arg1', `$1') + =>define(`_foreach', `ifelse(`$2', `(`')', `', + => `define(`$1', _arg1$2)$3`'$0(`$1', (dquote(shift$2)), `$3')')') + =>divert`'dnl + traceon(`shift')debugmode(`aq') + => + foreach(`x', `(`1', `2', `3', `4')', `x + ')dnl + error-->m4trace: -4- shift(`1', `2', `3', `4') + error-->m4trace: -4- shift(`2', `3', `4') + error-->m4trace: -4- shift(`3', `4') + =>1 + error-->m4trace: -3- shift(``1'', ``2'', ``3'', ``4'') + =>2 + error-->m4trace: -3- shift(``2'', ``3'', ``4'') + =>3 + error-->m4trace: -3- shift(``3'', ``4'') + =>4 + error-->m4trace: -3- shift(``4'') + + It is likewise possible to write a variant of `foreach' that +performs in linear time on M4 1.4.x; the easiest method is probably +writing a version of `foreach' that unboxes its list, then invokes +`_foreachq' as previously defined in `foreachq4.m4'. + + In summary, recursion over list elements is trickier than it +appeared at first glance, but provides a powerful idiom within `m4' +processing. As a final demonstration, both list styles are now able to +handle several scenarios that would wreak havoc on one or both of the +original implementations. This points out one other difference between +the list styles. `foreach' evaluates unquoted list elements only once, +in preparation for calling `_foreach', similary for `foreachq' as +provided by `foreachq3.m4' or `foreachq4.m4'. But `foreachq', as +provided by `foreachq2.m4', evaluates unquoted list elements twice +while visiting the first list element, once in `_arg1q' and once in +`_rest'. When deciding which list style to use, one must take into +account whether repeating the side effects of unquoted list elements +will have any detrimental effects. + + $ m4 -I examples + include(`foreach2.m4') + => + include(`foreachq2.m4') + => + dnl 0-element list: + foreach(`x', `', `') / foreachq(`x', `', `') + => / + dnl 1-element list of empty element + foreach(`x', `()', `') / foreachq(`x', ``'', `') + =><> / <> + dnl 2-element list of empty elements + foreach(`x', `(`',`')', `') / foreachq(`x', ``',`'', `') + =><><> / <><> + dnl 1-element list of a comma + foreach(`x', `(`,')', `') / foreachq(`x', ``,'', `') + =><,> / <,> + dnl 2-element list of unbalanced parentheses + foreach(`x', `(`(', `)')', `') / foreachq(`x', ``(', `)'', `') + =><(><)> / <(><)> + define(`ab', `oops')dnl using defn(`iterator') + foreach(`x', `(`a', `b')', `defn(`x')') /dnl + foreachq(`x', ``a', `b'', `defn(`x')') + =>ab / ab + define(`active', `ACT, IVE') + => + traceon(`active') + => + dnl list of unquoted macros; expansion occurs before recursion + foreach(`x', `(active, active)', ` + ')dnl + error-->m4trace: -4- active -> `ACT, IVE' + error-->m4trace: -4- active -> `ACT, IVE' + => + => + => + => + foreachq(`x', `active, active', ` + ')dnl + error-->m4trace: -3- active -> `ACT, IVE' + error-->m4trace: -3- active -> `ACT, IVE' + => + error-->m4trace: -3- active -> `ACT, IVE' + error-->m4trace: -3- active -> `ACT, IVE' + => + => + => + dnl list of quoted macros; expansion occurs during recursion + foreach(`x', `(`active', `active')', ` + ')dnl + error-->m4trace: -1- active -> `ACT, IVE' + => + error-->m4trace: -1- active -> `ACT, IVE' + => + foreachq(`x', ``active', `active'', ` + ')dnl + error-->m4trace: -1- active -> `ACT, IVE' + => + error-->m4trace: -1- active -> `ACT, IVE' + => + dnl list of double-quoted macro names; no expansion + foreach(`x', `(``active'', ``active'')', ` + ')dnl + => + => + foreachq(`x', ```active'', ``active''', ` + ')dnl + => + => + + +File: m4.info, Node: Improved copy, Next: Improved m4wrap, Prev: Improved foreach, Up: Answers + +17.4 Solution for `copy' +======================== + +The macro `copy' presented above is unable to handle builtin tokens +with M4 1.4.x, because it tries to pass the builtin token through the +macro `curry', where it is silently flattened to an empty string (*note +Composition::). Rather than using the problematic `curry' to work +around the limitation that `stack_foreach' expects to invoke a macro +that takes exactly one argument, we can write a new macro that lets us +form the exact two-argument `pushdef' call sequence needed, so that we +are no longer passing a builtin token through a text macro. + + -- Composite: stack_foreach_sep (MACRO, PRE, POST, SEP) + -- Composite: stack_foreach_sep_lifo (MACRO, PRE, POST, SEP) + For each of the `pushdef' definitions associated with MACRO, + expand the sequence `PRE`'definition`'POST'. Additionally, expand + SEP between definitions. `stack_foreach_sep' visits the oldest + definition first, while `stack_foreach_sep_lifo' visits the + current definition first. The expansion may dereference MACRO, + but should not modify it. There are a few special macros, such as + `defn', which cannot be used as the MACRO parameter. + + Note that `stack_foreach(`MACRO', `ACTION')' is equivalent to +`stack_foreach_sep(`MACRO', `ACTION(', `)')'. By supplying explicit +parentheses, split among the PRE and POST arguments to +`stack_foreach_sep', it is now possible to construct macro calls with +more than one argument, without passing builtin tokens through a macro +call. It is likewise possible to directly reference the stack +definitions without a macro call, by leaving PRE and POST empty. Thus, +in addition to fixing `copy' on builtin tokens, it also executes with +fewer macro invocations. + + The new macro also adds a separator that is only output after the +first iteration of the helper `_stack_reverse_sep', implemented by +prepending the original SEP to PRE and omitting a SEP argument in +subsequent iterations. Note that the empty string that separates SEP +from PRE is provided as part of the fourth argument when originally +calling `_stack_reverse_sep', and not by writing `$4`'$3' as the third +argument in the recursive call; while the other approach would give the +same output, it does so at the expense of increasing the argument size +on each iteration of `_stack_reverse_sep', which results in quadratic +instead of linear execution time. The improved stack walking macros +are available in `m4-1.4.13/examples/stack_sep.m4': + + $ m4 -I examples + include(`stack_sep.m4') + => + define(`copy', `ifdef(`$2', `errprint(`$2 already defined + ')m4exit(`1')', + `stack_foreach_sep(`$1', `pushdef(`$2',', `)')')')dnl + pushdef(`a', `1')pushdef(`a', defn(`divnum')) + => + copy(`a', `b') + => + b + =>0 + popdef(`b') + => + b + =>1 + pushdef(`c', `1')pushdef(`c', `2') + => + stack_foreach_sep_lifo(`c', `', `', `, ') + =>2, 1 + undivert(`stack_sep.m4')dnl + =>divert(`-1') + =># stack_foreach_sep(macro, pre, post, sep) + =># Invoke PRE`'defn`'POST with a single argument of each definition + =># from the definition stack of MACRO, starting with the oldest, and + =># separated by SEP between definitions. + =>define(`stack_foreach_sep', + =>`_stack_reverse_sep(`$1', `tmp-$1')'dnl + =>`_stack_reverse_sep(`tmp-$1', `$1', `$2`'defn(`$1')$3', `$4`'')') + =># stack_foreach_sep_lifo(macro, pre, post, sep) + =># Like stack_foreach_sep, but starting with the newest definition. + =>define(`stack_foreach_sep_lifo', + =>`_stack_reverse_sep(`$1', `tmp-$1', `$2`'defn(`$1')$3', `$4`'')'dnl + =>`_stack_reverse_sep(`tmp-$1', `$1')') + =>define(`_stack_reverse_sep', + =>`ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0( + => `$1', `$2', `$4$3')')') + =>divert`'dnl + + +File: m4.info, Node: Improved m4wrap, Next: Improved cleardivert, Prev: Improved copy, Up: Answers + +17.5 Solution for `m4wrap' +========================== + +The replacement `m4wrap' versions presented above, designed to +guarantee FIFO or LIFO order regardless of the underlying M4 +implementation, share a bug when dealing with wrapped text that looks +like parameter expansion. Note how the invocation of `m4wrapN' +interprets these parameters, while using the builtin preserves them for +their intended use. + + $ m4 -I examples + include(`wraplifo.m4') + => + m4wrap(`define(`foo', ``$0:'-$1-$*-$#-')foo(`a', `b') + ') + => + builtin(`m4wrap', ``'define(`bar', ``$0:'-$1-$*-$#-')bar(`a', `b') + ') + => + ^D + =>bar:-a-a,b-2- + =>m4wrap0:---0- + + Additionally, the computation of `_m4wrap_level' and creation of +multiple `m4wrapN' placeholders in the original examples is more +expensive in time and memory than strictly necessary. Notice how the +improved version grabs the wrapped text via `defn' to avoid parameter +expansion, then undefines `_m4wrap_text', before stripping a level of +quotes with `_arg1' to expand the text. That way, each level of +wrapping reuses the single placeholder, which starts each nesting level +in an undefined state. + + Finally, it is worth emulating the GNU M4 extension of saving all +arguments to `m4wrap', separated by a space, rather than saving just +the first argument. This is done with the `join' macro documented +previously (*note Shift::). The improved LIFO example is shipped as +`m4-1.4.13/examples/wraplifo2.m4', and can easily be converted to a +FIFO solution by swapping the adjacent invocations of `joinall' and +`defn'. + + $ m4 -I examples + include(`wraplifo2.m4') + => + undivert(`wraplifo2.m4')dnl + =>dnl Redefine m4wrap to have LIFO semantics, improved example. + =>include(`join.m4')dnl + =>define(`_m4wrap', defn(`m4wrap'))dnl + =>define(`_arg1', `$1')dnl + =>define(`m4wrap', + =>`ifdef(`_$0_text', + => `define(`_$0_text', joinall(` ', $@)defn(`_$0_text'))', + => `_$0(`_arg1(defn(`_$0_text')undefine(`_$0_text'))')dnl + =>define(`_$0_text', joinall(` ', $@))')')dnl + m4wrap(`define(`foo', ``$0:'-$1-$*-$#-')foo(`a', `b') + ') + => + m4wrap(`lifo text + m4wrap(`nested', `', `$@ + ')') + => + ^D + =>lifo text + =>foo:-a-a,b-2- + =>nested $@ + + +File: m4.info, Node: Improved cleardivert, Next: Improved capitalize, Prev: Improved m4wrap, Up: Answers + +17.6 Solution for `cleardivert' +=============================== + +The `cleardivert' macro (*note Cleardivert::) cannot, as it stands, be +called without arguments to clear all pending diversions. That is +because using undivert with an empty string for an argument is different +than using it with no arguments at all. Compare the earlier definition +with one that takes the number of arguments into account: + + define(`cleardivert', + `pushdef(`_n', divnum)divert(`-1')undivert($@)divert(_n)popdef(`_n')') + => + divert(`1')one + divert + => + cleardivert + => + undivert + =>one + => + define(`cleardivert', + `pushdef(`_num', divnum)divert(`-1')ifelse(`$#', `0', + `undivert`'', `undivert($@)')divert(_num)popdef(`_num')') + => + divert(`2')two + divert + => + cleardivert + => + undivert + => + + +File: m4.info, Node: Improved capitalize, Next: Improved fatal_error, Prev: Improved cleardivert, Up: Answers + +17.7 Solution for `capitalize' +============================== + +The `capitalize' macro (*note Patsubst::) as presented earlier does not +allow clients to follow the quoting rule of thumb. Consider the three +macros `active', `Active', and `ACTIVE', and the difference between +calling `capitalize' with the expansion of a macro, expanding the +result of a case change, and changing the case of a double-quoted +string: + + $ m4 -I examples + include(`capitalize.m4')dnl + define(`active', `act1, ive')dnl + define(`Active', `Act2, Ive')dnl + define(`ACTIVE', `ACT3, IVE')dnl + upcase(active) + =>ACT1,IVE + upcase(`active') + =>ACT3, IVE + upcase(``active'') + =>ACTIVE + downcase(ACTIVE) + =>act3,ive + downcase(`ACTIVE') + =>act1, ive + downcase(``ACTIVE'') + =>active + capitalize(active) + =>Act1 + capitalize(`active') + =>Active + capitalize(``active'') + =>_capitalize(`active') + define(`A', `OOPS') + => + capitalize(active) + =>OOPSct1 + capitalize(`active') + =>OOPSctive + + First, when `capitalize' is called with more than one argument, it +was throwing away later arguments, whereas `upcase' and `downcase' used +`$*' to collect them all. The fix is simple: use `$*' consistently. + + Next, with single-quoting, `capitalize' outputs a single character, +a set of quotes, then the rest of the characters, making it impossible +to invoke `Active' after the fact, and allowing the alternate macro `A' +to interfere. Here, the solution is to use additional quoting in the +helper macros, then pass the final over-quoted output string through +`_arg1' to remove the extra quoting and finally invoke the concatenated +portions as a single string. + + Finally, when passed a double-quoted string, the nested macro +`_capitalize' is never invoked because it ended up nested inside +quotes. This one is the toughest to fix. In short, we have no idea how +many levels of quotes are in effect on the substring being altered by +`patsubst'. If the replacement string cannot be expressed entirely in +terms of literal text and backslash substitutions, then we need a +mechanism to guarantee that the helper macros are invoked outside of +quotes. In other words, this sounds like a job for `changequote' +(*note Changequote::). By changing the active quoting characters, we +can guarantee that replacement text injected by `patsubst' always +occurs in the middle of a string that has exactly one level of +over-quoting using alternate quotes; so the replacement text closes the +quoted string, invokes the helper macros, then reopens the quoted +string. In turn, that means the replacement text has unbalanced quotes, +necessitating another round of `changequote'. + + In the fixed version below, (also shipped as +`m4-1.4.13/examples/capitalize.m4'), `capitalize' uses the alternate +quotes of `<<[' and `]>>' (the longer strings are chosen so as to be +less likely to appear in the text being converted). The helpers +`_to_alt' and `_from_alt' merely reduce the number of characters +required to perform a `changequote', since the definition changes +twice. The outermost pair means that `patsubst' and `_capitalize_alt' +are invoked with alternate quoting; the innermost pair is used so that +the third argument to `patsubst' can contain an unbalanced `]>>'/`<<[' +pair. Note that `upcase' and `downcase' must be redefined as +`_upcase_alt' and `_downcase_alt', since they contain nested quotes but +are invoked with the alternate quoting scheme in effect. + + $ m4 -I examples + include(`capitalize2.m4')dnl + define(`active', `act1, ive')dnl + define(`Active', `Act2, Ive')dnl + define(`ACTIVE', `ACT3, IVE')dnl + define(`A', `OOPS')dnl + capitalize(active; `active'; ``active''; ```actIVE''') + =>Act1,Ive; Act2, Ive; Active; `Active' + undivert(`capitalize2.m4')dnl + =>divert(`-1') + =># upcase(text) + =># downcase(text) + =># capitalize(text) + =># change case of text, improved version + =>define(`upcase', `translit(`$*', `a-z', `A-Z')') + =>define(`downcase', `translit(`$*', `A-Z', `a-z')') + =>define(`_arg1', `$1') + =>define(`_to_alt', `changequote(`<<[', `]>>')') + =>define(`_from_alt', `changequote(<<[`]>>, <<[']>>)') + =>define(`_upcase_alt', `translit(<<[$*]>>, <<[a-z]>>, <<[A-Z]>>)') + =>define(`_downcase_alt', `translit(<<[$*]>>, <<[A-Z]>>, <<[a-z]>>)') + =>define(`_capitalize_alt', + => `regexp(<<[$1]>>, <<[^\(\w\)\(\w*\)]>>, + => <<[_upcase_alt(<<[<<[\1]>>]>>)_downcase_alt(<<[<<[\2]>>]>>)]>>)') + =>define(`capitalize', + => `_arg1(_to_alt()patsubst(<<[<<[$*]>>]>>, <<[\w+]>>, + => _from_alt()`]>>_$0_alt(<<[\&]>>)<<['_to_alt())_from_alt())') + =>divert`'dnl + + +File: m4.info, Node: Improved fatal_error, Prev: Improved capitalize, Up: Answers + +17.8 Solution for `fatal_error' +=============================== + +The `fatal_error' macro (*note M4exit::) is not robust to versions of +GNU M4 earlier than 1.4.8, where invoking `__file__' (*note Location::) +inside `m4wrap' would result in an empty string, and `__line__' +resulted in `0' even though all files start at line 1. Furthermore, +versions earlier than 1.4.6 did not support the `__program__' macro. +If you want `fatal_error' to work across the entire 1.4.x release +series, a better implementation would be: + + define(`fatal_error', + `errprint(ifdef(`__program__', `__program__', ``m4'')'dnl + `:ifelse(__line__, `0', `', + `__file__:__line__:')` fatal error: $* + ')m4exit(`1')') + => + m4wrap(`divnum(`demo of internal message') + fatal_error(`inside wrapped text')') + => + ^D + error-->m4:stdin:6: Warning: excess arguments to builtin `divnum' ignored + =>0 + error-->m4:stdin:6: fatal error: inside wrapped text + + +File: m4.info, Node: Copying This Package, Next: Copying This Manual, Prev: Answers, Up: Top + +Appendix A How to make copies of the overall M4 package +******************************************************* + +This appendix covers the license for copying the source code of the +overall M4 package. This manual is under a different set of +restrictions, covered later (*note Copying This Manual::). + +* Menu: + +* GNU General Public License:: License for copying the M4 package + + +File: m4.info, Node: GNU General Public License, Up: Copying This Package + +A.1 License for copying the M4 package +====================================== + + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + +Preamble +======== + +The GNU General Public License is a free, copyleft license for software +and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. We, the Free Software Foundation, use +the GNU General Public License for most of our software; it applies +also to any other work released this way by its authors. You can apply +it to your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the software, +or if you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those domains +in future versions of the GPL, as needed to protect the freedom of +users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + +TERMS AND CONDITIONS +==================== + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public + License. + + "Copyright" also means copyright-like laws that apply to other + kinds of works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the + work in a fashion requiring copyright permission, other than the + making of an exact copy. The resulting work is called a "modified + version" of the earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work + based on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it + on a computer or modifying a private copy. Propagation includes + copying, distribution (with or without modification), making + available to the public, and in some countries other activities as + well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user + through a computer network, with no transfer of a copy, is not + conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to + the extent that warranties are provided), that licensees may + convey the work under this License, and how to view a copy of this + License. If the interface presents a list of user commands or + options, such as a menu, a prominent item in the list meets this + criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any + non-source form of a work. + + A "Standard Interface" means an interface that either is an + official standard defined by a recognized standards body, or, in + the case of interfaces specified for a particular programming + language, one that is widely used among developers working in that + language. + + The "System Libraries" of an executable work include anything, + other than the work as a whole, that (a) is included in the normal + form of packaging a Major Component, but which is not part of that + Major Component, and (b) serves only to enable use of the work + with that Major Component, or to implement a Standard Interface + for which an implementation is available to the public in source + code form. A "Major Component", in this context, means a major + essential component (kernel, window system, and so on) of the + specific operating system (if any) on which the executable work + runs, or a compiler used to produce the work, or an object code + interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including + scripts to control those activities. However, it does not include + the work's System Libraries, or general-purpose tools or generally + available free programs which are used unmodified in performing + those activities but which are not part of the work. For example, + Corresponding Source includes interface definition files + associated with source files for the work, and the source code for + shared libraries and dynamically linked subprograms that the work + is specifically designed to require, such as by intimate data + communication or control flow between those subprograms and other + parts of the work. + + The Corresponding Source need not include anything that users can + regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running + a covered work is covered by this License only if the output, + given its content, constitutes a covered work. This License + acknowledges your rights of fair use or other equivalent, as + provided by copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise + remains in force. You may convey covered works to others for the + sole purpose of having them make modifications exclusively for + you, or provide you with facilities for running those works, + provided that you comply with the terms of this License in + conveying all material for which you do not control copyright. + Those thus making or running the covered works for you must do so + exclusively on your behalf, under your direction and control, on + terms that prohibit them from making any copies of your + copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section + 10 makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under + article 11 of the WIPO copyright treaty adopted on 20 December + 1996, or similar laws prohibiting or restricting circumvention of + such measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such + circumvention is effected by exercising rights under this License + with respect to the covered work, and you disclaim any intention + to limit operation or modification of the work as a means of + enforcing, against the work's users, your or third parties' legal + rights to forbid circumvention of technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the + code; keep intact all notices of the absence of any warranty; and + give all recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these + conditions: + + a. The work must carry prominent notices stating that you + modified it, and giving a relevant date. + + b. The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in + section 4 to "keep intact all notices". + + c. You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable + section 7 additional terms, to the whole of the work, and all + its parts, regardless of how they are packaged. This License + gives no permission to license the work in any other way, but + it does not invalidate such permission if you have separately + received it. + + d. If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has + interactive interfaces that do not display Appropriate Legal + Notices, your work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered + work, and which are not combined with it such as to form a larger + program, in or on a volume of a storage or distribution medium, is + called an "aggregate" if the compilation and its resulting + copyright are not used to limit the access or legal rights of the + compilation's users beyond what the individual works permit. + Inclusion of a covered work in an aggregate does not cause this + License to apply to the other parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this + License, in one of these ways: + + a. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for + as long as you offer spare parts or customer support for that + product model, to give anyone who possesses the object code + either (1) a copy of the Corresponding Source for all the + software in the product that is covered by this License, on a + durable physical medium customarily used for software + interchange, for a price no more than your reasonable cost of + physically performing this conveying of source, or (2) access + to copy the Corresponding Source from a network server at no + charge. + + c. Convey individual copies of the object code with a copy of + the written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, + and only if you received the object code with such an offer, + in accord with subsection 6b. + + d. Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access + to the Corresponding Source in the same way through the same + place at no further charge. You need not require recipients + to copy the Corresponding Source along with the object code. + If the place to copy the object code is a network server, the + Corresponding Source may be on a different server (operated + by you or a third party) that supports equivalent copying + facilities, provided you maintain clear directions next to + the object code saying where to find the Corresponding Source. + Regardless of what server hosts the Corresponding Source, you + remain obligated to ensure that it is available for as long + as needed to satisfy these requirements. + + e. Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the + general public at no charge under subsection 6d. + + + A separable portion of the object code, whose source code is + excluded from the Corresponding Source as a System Library, need + not be included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means + any tangible personal property which is normally used for personal, + family, or household purposes, or (2) anything designed or sold for + incorporation into a dwelling. In determining whether a product + is a consumer product, doubtful cases shall be resolved in favor of + coverage. For a particular product received by a particular user, + "normally used" refers to a typical or common use of that class of + product, regardless of the status of the particular user or of the + way in which the particular user actually uses, or expects or is + expected to use, the product. A product is a consumer product + regardless of whether the product has substantial commercial, + industrial or non-consumer uses, unless such uses represent the + only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to + install and execute modified versions of a covered work in that + User Product from a modified version of its Corresponding Source. + The information must suffice to ensure that the continued + functioning of the modified object code is in no case prevented or + interfered with solely because modification has been made. + + If you convey an object code work under this section in, or with, + or specifically for use in, a User Product, and the conveying + occurs as part of a transaction in which the right of possession + and use of the User Product is transferred to the recipient in + perpetuity or for a fixed term (regardless of how the transaction + is characterized), the Corresponding Source conveyed under this + section must be accompanied by the Installation Information. But + this requirement does not apply if neither you nor any third party + retains the ability to install modified object code on the User + Product (for example, the work has been installed in ROM). + + The requirement to provide Installation Information does not + include a requirement to continue to provide support service, + warranty, or updates for a work that has been modified or + installed by the recipient, or for the User Product in which it + has been modified or installed. Access to a network may be denied + when the modification itself materially and adversely affects the + operation of the network or violates the rules and protocols for + communication across the network. + + Corresponding Source conveyed, and Installation Information + provided, in accord with this section must be in a format that is + publicly documented (and with an implementation available to the + public in source code form), and must require no special password + or key for unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of + this License by making exceptions from one or more of its + conditions. Additional permissions that are applicable to the + entire Program shall be treated as though they were included in + this License, to the extent that they are valid under applicable + law. If additional permissions apply only to part of the Program, + that part may be used separately under those permissions, but the + entire Program remains governed by this License without regard to + the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part + of it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material + you add to a covered work, you may (if authorized by the copyright + holders of that material) supplement the terms of this License + with terms: + + a. Disclaiming warranty or limiting liability differently from + the terms of sections 15 and 16 of this License; or + + b. Requiring preservation of specified reasonable legal notices + or author attributions in that material or in the Appropriate + Legal Notices displayed by works containing it; or + + c. Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be + marked in reasonable ways as different from the original + version; or + + d. Limiting the use for publicity purposes of names of licensors + or authors of the material; or + + e. Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f. Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified + versions of it) with contractual assumptions of liability to + the recipient, for any liability that these contractual + assumptions directly impose on those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as + you received it, or any part of it, contains a notice stating that + it is governed by this License along with a term that is a further + restriction, you may remove that term. If a license document + contains a further restriction but permits relicensing or + conveying under this License, you may add to a covered work + material governed by the terms of that license document, provided + that the further restriction does not survive such relicensing or + conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in + the form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights + under this License (including any patent licenses granted under + the third paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, you do not qualify to receive new + licenses for the same material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer + transmission to receive a copy likewise does not require + acceptance. However, nothing other than this License grants you + permission to propagate or modify any covered work. These actions + infringe copyright if you do not accept this License. Therefore, + by modifying or propagating a covered work, you indicate your + acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not + responsible for enforcing compliance by third parties with this + License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a + covered work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or + could give under the previous paragraph, plus a right to + possession of the Corresponding Source of the work from the + predecessor in interest, if the predecessor has it or can get it + with reasonable efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you + may not impose a license fee, royalty, or other charge for + exercise of rights granted under this License, and you may not + initiate litigation (including a cross-claim or counterclaim in a + lawsuit) alleging that any patent claim is infringed by making, + using, selling, offering for sale, or importing the Program or any + portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. + The work thus licensed is called the contributor's "contributor + version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, + permitted by this License, of making, using, or selling its + contributor version, but do not include claims that would be + infringed only as a consequence of further modification of the + contributor version. For purposes of this definition, "control" + includes the right to grant patent sublicenses in a manner + consistent with the requirements of this License. + + Each contributor grants you a non-exclusive, worldwide, + royalty-free patent license under the contributor's essential + patent claims, to make, use, sell, offer for sale, import and + otherwise run, modify and propagate the contents of its + contributor version. + + In the following three paragraphs, a "patent license" is any + express agreement or commitment, however denominated, not to + enforce a patent (such as an express permission to practice a + patent or covenant not to sue for patent infringement). To + "grant" such a patent license to a party means to make such an + agreement or commitment not to enforce a patent against the party. + + If you convey a covered work, knowingly relying on a patent + license, and the Corresponding Source of the work is not available + for anyone to copy, free of charge and under the terms of this + License, through a publicly available network server or other + readily accessible means, then you must either (1) cause the + Corresponding Source to be so available, or (2) arrange to deprive + yourself of the benefit of the patent license for this particular + work, or (3) arrange, in a manner consistent with the requirements + of this License, to extend the patent license to downstream + recipients. "Knowingly relying" means you have actual knowledge + that, but for the patent license, your conveying the covered work + in a country, or your recipient's use of the covered work in a + country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, + modify or convey a specific copy of the covered work, then the + patent license you grant is automatically extended to all + recipients of the covered work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that + are specifically granted under this License. You may not convey a + covered work if you are a party to an arrangement with a third + party that is in the business of distributing software, under + which you make payment to the third party based on the extent of + your activity of conveying the work, and under which the third + party grants, to any of the parties who would receive the covered + work from you, a discriminatory patent license (a) in connection + with copies of the covered work conveyed by you (or copies made + from those copies), or (b) primarily for and in connection with + specific products or compilations that contain the covered work, + unless you entered into that arrangement, or that patent license + was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this + License. If you cannot convey a covered work so as to satisfy + simultaneously your obligations under this License and any other + pertinent obligations, then as a consequence you may not convey it + at all. For example, if you agree to terms that obligate you to + collect a royalty for further conveying from those to whom you + convey the Program, the only way you could satisfy both those + terms and this License would be to refrain entirely from conveying + the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU Affero General Public License into a + single combined work, and to convey the resulting work. The terms + of this License will continue to apply to the part which is the + covered work, but the special requirements of the GNU Affero + General Public License, section 13, concerning interaction through + a network will apply to the combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new + versions of the GNU General Public License from time to time. + Such new versions will be similar in spirit to the present + version, but may differ in detail to address new problems or + concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU + General Public License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that numbered version or of any later version published by the + Free Software Foundation. If the Program does not specify a + version number of the GNU General Public License, you may choose + any version ever published by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU General Public License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE + COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE + RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. + SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES + AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU + FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE + THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA + BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER + PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF + THE POSSIBILITY OF SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely + approximates an absolute waiver of all civil liability in + connection with the Program, unless a warranty or assumption of + liability accompanies a copy of the Program in return for a fee. + + +END OF TERMS AND CONDITIONS +=========================== + +How to Apply These Terms to Your New Programs +============================================= + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. + Copyright (C) YEAR NAME OF AUTHOR + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see `http://www.gnu.org/licenses/'. + + Also add information on how to contact you by electronic and paper +mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + PROGRAM Copyright (C) YEAR NAME OF AUTHOR + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an "about box". + + You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU GPL, see `http://www.gnu.org/licenses/'. + + The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Lesser General Public License instead of this License. But first, +please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. + + +File: m4.info, Node: Copying This Manual, Next: Indices, Prev: Copying This Package, Up: Top + +Appendix B How to make copies of this manual +******************************************** + +This appendix covers the license for copying this manual. Note that +some of the longer examples in this manual are also distributed in the +directory `m4-1.4.13/examples/', where a more permissive license is in +effect when copying just the examples. + +* Menu: + +* GNU Free Documentation License:: License for copying this manual + diff --git a/coreseek/m4-1.4.13/doc/m4.info-2 b/coreseek/m4-1.4.13/doc/m4.info-2 new file mode 100644 index 0000000..400fc0a --- /dev/null +++ b/coreseek/m4-1.4.13/doc/m4.info-2 @@ -0,0 +1,911 @@ +This is m4.info, produced by makeinfo version 4.13 from m4.texinfo. + +This manual (5 March 2009) is for GNU M4 (version 1.4.13), a package +containing an implementation of the m4 macro language. + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, +2007, 2008, 2009 Free Software Foundation, Inc. + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation License, + Version 1.2 or any later version published by the Free Software + Foundation; with no Invariant Sections, no Front-Cover Texts, and + no Back-Cover Texts. A copy of the license is included in the + section entitled "GNU Free Documentation License." + +INFO-DIR-SECTION Text creation and manipulation +START-INFO-DIR-ENTRY +* M4: (m4). A powerful macro processor. +END-INFO-DIR-ENTRY + + +File: m4.info, Node: GNU Free Documentation License, Up: Copying This Manual + +B.1 License for copying this manual +=================================== + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents +==================================================== + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: m4.info, Node: Indices, Prev: Copying This Manual, Up: Top + +Appendix C Indices of concepts and macros +***************************************** + +* Menu: + +* Macro index:: Index for all `m4' macros +* Concept index:: Index for many concepts + + +File: m4.info, Node: Macro index, Next: Concept index, Up: Indices + +C.1 Index for all `m4' macros +============================= + +This index covers all `m4' builtins, as well as several useful +composite macros. References are exclusively to the places where a +macro is introduced the first time. + +[index] +* Menu: + +* __file__: Location. (line 10) +* __gnu__: Platform macros. (line 12) +* __line__: Location. (line 11) +* __os2__: Platform macros. (line 13) +* __program__: Location. (line 12) +* __unix__: Platform macros. (line 15) +* __windows__: Platform macros. (line 17) +* argn: Shift. (line 258) +* array: Define. (line 56) +* array_set: Define. (line 57) +* builtin: Builtin. (line 9) +* capitalize: Patsubst. (line 55) +* changecom: Changecom. (line 10) +* changequote: Changequote. (line 10) +* changeword: Changeword. (line 23) +* cleardivert: Cleardivert. (line 26) +* cond: Shift. (line 53) +* copy: Composition. (line 120) +* curry: Composition. (line 68) +* debugfile: Debug Output. (line 11) +* debugmode: Debug Levels. (line 78) +* decr: Incr. (line 11) +* define: Define. (line 10) +* define_blind: Composition. (line 11) +* defn: Defn. (line 10) +* divert: Divert. (line 9) +* divnum: Divnum. (line 9) +* dnl: Dnl. (line 9) +* downcase: Patsubst. (line 54) +* dquote: Shift. (line 196) +* dquote_elt: Shift. (line 197) +* dumpdef: Dumpdef. (line 10) +* errprint: Errprint. (line 9) +* esyscmd: Esyscmd. (line 9) +* eval: Eval. (line 9) +* example: Manual. (line 40) +* exch: Arguments. (line 13) +* fatal_error: M4exit. (line 25) +* foreach: Foreach. (line 9) +* foreachq: Foreach. (line 10) +* forloop: Forloop. (line 9) +* format: Format. (line 9) +* ifdef: Ifdef. (line 10) +* ifelse: Ifelse. (line 11) +* include: Include. (line 9) +* incr: Incr. (line 10) +* index: Index macro. (line 9) +* indir: Indir. (line 9) +* join: Shift. (line 104) +* joinall: Shift. (line 105) +* len: Len. (line 9) +* m4exit: M4exit. (line 10) +* m4wrap: M4wrap. (line 14) +* maketemp: Mkstemp. (line 12) +* mkstemp: Mkstemp. (line 11) +* nargs: Pseudo Arguments. (line 13) +* os2: Platform macros. (line 14) +* patsubst: Patsubst. (line 9) +* popdef: Pushdef. (line 12) +* pushdef: Pushdef. (line 11) +* quote: Shift. (line 195) +* regexp: Regexp. (line 9) +* rename: Composition. (line 121) +* reverse: Shift. (line 32) +* shift: Shift. (line 17) +* sinclude: Include. (line 10) +* stack_foreach: Stacks. (line 12) +* stack_foreach_lifo: Stacks. (line 13) +* stack_foreach_sep: Improved copy. (line 16) +* stack_foreach_sep_lifo: Improved copy. (line 17) +* substr: Substr. (line 9) +* syscmd: Syscmd. (line 9) +* sysval: Sysval. (line 9) +* traceoff: Trace. (line 11) +* traceon: Trace. (line 10) +* translit: Translit. (line 9) +* undefine: Undefine. (line 9) +* undivert: Undivert. (line 9) +* unix: Platform macros. (line 16) +* upcase: Patsubst. (line 53) +* windows: Platform macros. (line 18) + + +File: m4.info, Node: Concept index, Prev: Macro index, Up: Indices + +C.2 Index for many concepts +=========================== + +[index] +* Menu: + +* argument currying: Composition. (line 63) +* arguments to macros <1>: Arguments. (line 6) +* arguments to macros: Macro Arguments. (line 6) +* arguments to macros, special: Pseudo Arguments. (line 6) +* arguments, joining: Shift. (line 100) +* arguments, more than nine <1>: Shift. (line 252) +* arguments, more than nine <2>: Improved foreach. (line 155) +* arguments, more than nine: Arguments. (line 54) +* arguments, quoted macro: Quoting Arguments. (line 6) +* arguments, reversing: Shift. (line 31) +* arithmetic: Arithmetic. (line 6) +* arrays: Define. (line 52) +* avoiding quadratic behavior: Improved foreach. (line 38) +* basic regular expressions <1>: Regexp. (line 6) +* basic regular expressions: Patsubst. (line 6) +* blind macro <1>: Ifelse. (line 52) +* blind macro <2>: Composition. (line 10) +* blind macro: Inhibiting Invocation. + (line 14) +* bug reports: Bugs. (line 6) +* builtins, indirect call of: Builtin. (line 6) +* builtins, special tokens: Defn. (line 101) +* call of builtins, indirect: Builtin. (line 6) +* call of macros, indirect: Indir. (line 6) +* case statement: Ifelse. (line 69) +* changing comment delimiters: Changecom. (line 6) +* changing quote delimiters: Changequote. (line 6) +* changing syntax: Changeword. (line 6) +* characters, translating: Translit. (line 6) +* command line: Invoking m4. (line 6) +* command line, file names on the: Command line files. (line 6) +* command line, macro definitions on the: Preprocessor features. + (line 6) +* command line, options: Invoking m4. (line 10) +* commands, exit status from shell: Sysval. (line 6) +* commands, running shell: Shell commands. (line 6) +* comment delimiters, changing: Changecom. (line 6) +* comments: Comments. (line 6) +* comments, copied to output: Changecom. (line 29) +* comparing strings: Ifelse. (line 6) +* compatibility: Compatibility. (line 6) +* composing macros: Composition. (line 6) +* concatenating arguments: Shift. (line 100) +* conditional, short-circuiting: Shift. (line 51) +* conditionals: Ifdef. (line 6) +* controlling debugging output: Debug Levels. (line 6) +* copying macros: Composition. (line 116) +* counting loops: Forloop. (line 6) +* currying arguments: Composition. (line 63) +* debugging macros: Debugging. (line 6) +* debugging output, controlling: Debug Levels. (line 6) +* debugging output, saving: Debug Output. (line 6) +* decrement operator: Incr. (line 6) +* deferring expansion: M4wrap. (line 6) +* deferring output: Diversions. (line 6) +* defining new macros: Definitions. (line 6) +* definition stack <1>: Pushdef. (line 6) +* definition stack: Stacks. (line 6) +* definitions, displaying macro <1>: Dumpdef. (line 6) +* definitions, displaying macro: Defn. (line 6) +* deleting macros: Undefine. (line 6) +* deleting whitespace in input: Dnl. (line 6) +* delimiters, changing <1>: Changecom. (line 6) +* delimiters, changing: Changequote. (line 6) +* discarding diverted text: Cleardivert. (line 6) +* discarding input <1>: Divert. (line 42) +* discarding input <2>: Dnl. (line 6) +* discarding input: Ifelse. (line 6) +* displaying macro definitions: Dumpdef. (line 6) +* diversion numbers: Divnum. (line 6) +* diverted text, discarding: Cleardivert. (line 6) +* diverting output to files: Divert. (line 6) +* dumping into frozen file: Using frozen files. (line 6) +* error messages, printing: Errprint. (line 6) +* errors, fatal: Operation modes. (line 20) +* evaluation, of integer expressions: Eval. (line 6) +* examples, understanding: Manual. (line 6) +* executing shell commands: Shell commands. (line 6) +* exit status from shell commands: Sysval. (line 6) +* exiting from m4: M4exit. (line 6) +* expansion of macros: Macro expansion. (line 6) +* expansion, deferring: M4wrap. (line 6) +* expansion, tracing macro: Trace. (line 6) +* expressions, evaluation of integer: Eval. (line 6) +* expressions, regular <1>: Regexp. (line 6) +* expressions, regular: Patsubst. (line 6) +* extracting substrings: Substr. (line 6) +* fast loading of frozen files: Using frozen files. (line 6) +* fatal errors: Operation modes. (line 20) +* FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* file format, frozen file: Frozen file format. (line 6) +* file inclusion <1>: Undivert. (line 13) +* file inclusion <2>: File Inclusion. (line 6) +* file inclusion: Undivert. (line 89) +* file names, on the command line: Command line files. (line 6) +* files, diverting output to: Divert. (line 6) +* files, names of temporary: Mkstemp. (line 6) +* for each loops: Foreach. (line 6) +* for loops: Forloop. (line 6) +* formatted output: Format. (line 6) +* Free Documentation License (FDL), GNU: GNU Free Documentation License. + (line 6) +* frozen file format: Frozen file format. (line 6) +* frozen files for fast loading: Using frozen files. (line 6) +* General Public License (GPL), GNU: GNU General Public License. + (line 6) +* GNU extensions <1>: Divert. (line 54) +* GNU extensions <2>: Undivert. (line 13) +* GNU extensions <3>: Eval. (line 125) +* GNU extensions <4>: Define. (line 41) +* GNU extensions <5>: Mkstemp. (line 59) +* GNU extensions <6>: Search Path. (line 6) +* GNU extensions <7>: Regexp. (line 6) +* GNU extensions <8>: Builtin. (line 6) +* GNU extensions <9>: Using frozen files. (line 6) +* GNU extensions <10>: Arguments. (line 54) +* GNU extensions <11>: Extensions. (line 6) +* GNU extensions <12>: Inhibiting Invocation. + (line 14) +* GNU extensions <13>: Patsubst. (line 6) +* GNU extensions <14>: Debug Output. (line 6) +* GNU extensions <15>: Esyscmd. (line 6) +* GNU extensions <16>: Format. (line 6) +* GNU extensions <17>: Debug Levels. (line 74) +* GNU extensions: Indir. (line 6) +* GNU Free Documentation License: GNU Free Documentation License. + (line 6) +* GNU General Public License: GNU General Public License. + (line 6) +* GNU M4, history of: History. (line 6) +* GPL, GNU General Public License: GNU General Public License. + (line 6) +* history of m4: History. (line 6) +* included files, search path for: Search Path. (line 6) +* inclusion, of files <1>: File Inclusion. (line 6) +* inclusion, of files: Undivert. (line 89) +* increment operator: Incr. (line 6) +* indirect call of builtins: Builtin. (line 6) +* indirect call of macros: Indir. (line 6) +* initialization, frozen state: Using frozen files. (line 6) +* input location <1>: Preprocessor features. + (line 28) +* input location: Location. (line 6) +* input tokens: Syntax. (line 6) +* input, discarding <1>: Dnl. (line 6) +* input, discarding <2>: Divert. (line 42) +* input, discarding: Ifelse. (line 6) +* input, saving: M4wrap. (line 6) +* integer arithmetic: Arithmetic. (line 6) +* integer expression evaluation: Eval. (line 6) +* invoking m4: Invoking m4. (line 6) +* invoking macros: Invocation. (line 6) +* iterating over lists: Foreach. (line 6) +* joining arguments: Shift. (line 100) +* length of strings: Len. (line 6) +* lexical structure of words: Changeword. (line 6) +* License, code: Copying This Package. + (line 6) +* License, manual: Copying This Manual. (line 6) +* limit, nesting: Limits control. (line 43) +* literal output: Pseudo Arguments. (line 106) +* local variables: Pushdef. (line 79) +* location, input <1>: Location. (line 6) +* location, input: Preprocessor features. + (line 28) +* loops: Shift. (line 10) +* loops, counting: Forloop. (line 6) +* loops, list iteration: Foreach. (line 6) +* M4PATH: Search Path. (line 9) +* macro composition: Composition. (line 6) +* macro definitions, on the command line: Preprocessor features. + (line 6) +* macro expansion, tracing: Trace. (line 6) +* macro invocation: Invocation. (line 6) +* macro, blind <1>: Inhibiting Invocation. + (line 14) +* macro, blind <2>: Ifelse. (line 52) +* macro, blind: Composition. (line 10) +* macros, arguments to <1>: Macro Arguments. (line 6) +* macros, arguments to: Arguments. (line 6) +* macros, copying: Composition. (line 116) +* macros, debugging: Debugging. (line 6) +* macros, displaying definitions <1>: Defn. (line 6) +* macros, displaying definitions: Dumpdef. (line 6) +* macros, expansion of: Macro expansion. (line 6) +* macros, how to define new: Definitions. (line 6) +* macros, how to delete: Undefine. (line 6) +* macros, how to rename: Defn. (line 6) +* macros, indirect call of: Indir. (line 6) +* macros, quoted arguments to: Quoting Arguments. (line 6) +* macros, recursive: Shift. (line 6) +* macros, special arguments to: Pseudo Arguments. (line 6) +* macros, temporary redefinition of: Pushdef. (line 6) +* manipulating quotes: Shift. (line 191) +* messages, printing error: Errprint. (line 6) +* more than nine arguments <1>: Arguments. (line 54) +* more than nine arguments <2>: Shift. (line 252) +* more than nine arguments: Improved foreach. (line 155) +* multibranches: Ifelse. (line 69) +* names: Names. (line 6) +* nesting limit: Limits control. (line 43) +* nine arguments, more than <1>: Improved foreach. (line 155) +* nine arguments, more than <2>: Arguments. (line 54) +* nine arguments, more than: Shift. (line 252) +* numbers: Manual. (line 57) +* options, command line: Invoking m4. (line 10) +* output, diverting to files: Divert. (line 6) +* output, formatted: Format. (line 6) +* output, literal: Pseudo Arguments. (line 106) +* output, saving debugging: Debug Output. (line 6) +* overview of m4: Intro. (line 6) +* pattern substitution: Patsubst. (line 6) +* platform macros: Platform macros. (line 6) +* positional parameters, more than nine: Arguments. (line 54) +* POSIX: Extensions. (line 6) +* POSIXLY_CORRECT <1>: Incompatibilities. (line 146) +* POSIXLY_CORRECT: Invoking m4. (line 10) +* preprocessor features: Preprocessor features. + (line 6) +* printing error messages: Errprint. (line 6) +* pushdef stack <1>: Stacks. (line 6) +* pushdef stack: Pushdef. (line 6) +* quadratic behavior, avoiding: Improved foreach. (line 38) +* quote delimiters, changing: Changequote. (line 6) +* quote manipulation: Shift. (line 191) +* quoted macro arguments: Quoting Arguments. (line 6) +* quoted string: Quoted strings. (line 6) +* quoting rule of thumb: Quoting Arguments. (line 22) +* recursive macros: Shift. (line 6) +* redefinition of macros, temporary: Pushdef. (line 6) +* regular expressions <1>: Changeword. (line 6) +* regular expressions <2>: Patsubst. (line 6) +* regular expressions: Regexp. (line 6) +* reloading a frozen file: Using frozen files. (line 6) +* renaming macros <1>: Composition. (line 116) +* renaming macros: Defn. (line 6) +* reporting bugs: Bugs. (line 6) +* rescanning <1>: Defn. (line 61) +* rescanning <2>: Inhibiting Invocation. + (line 87) +* rescanning <3>: Pseudo Arguments. (line 106) +* rescanning <4>: Other Incompatibilities. + (line 52) +* rescanning: Limits control. (line 56) +* reversing arguments: Shift. (line 31) +* rule of thumb, quoting: Quoting Arguments. (line 22) +* running shell commands: Shell commands. (line 6) +* saving debugging output: Debug Output. (line 6) +* saving input: M4wrap. (line 6) +* search path for included files: Search Path. (line 6) +* shell commands, exit status from: Sysval. (line 6) +* shell commands, running: Shell commands. (line 6) +* short-circuiting conditional: Shift. (line 51) +* special arguments to macros: Pseudo Arguments. (line 6) +* stack, macro definition <1>: Pushdef. (line 6) +* stack, macro definition: Stacks. (line 6) +* standard error, output to <1>: Dumpdef. (line 6) +* standard error, output to <2>: Trace. (line 6) +* standard error, output to: Errprint. (line 6) +* status of shell commands: Sysval. (line 6) +* status, setting m4 exit: M4exit. (line 6) +* string, quoted: Quoted strings. (line 6) +* strings, length of: Len. (line 6) +* substitution by regular expression: Patsubst. (line 6) +* substrings, extracting: Substr. (line 6) +* substrings, locating: Index macro. (line 6) +* suggestions, reporting: Bugs. (line 6) +* suppressing warnings: Macro Arguments. (line 38) +* switch statement: Ifelse. (line 69) +* synchronization lines: Preprocessor features. + (line 28) +* syntax, changing: Changeword. (line 6) +* temporary file names: Mkstemp. (line 6) +* temporary redefinition of macros: Pushdef. (line 6) +* TMPDIR: Diversions. (line 10) +* tokens: Syntax. (line 6) +* tokens, builtin macro: Defn. (line 101) +* tokens, special: Other tokens. (line 6) +* tracing macro expansion: Trace. (line 6) +* translating characters: Translit. (line 6) +* undefining macros: Undefine. (line 6) +* UNIX commands, exit status from: Sysval. (line 6) +* UNIX commands, running: Shell commands. (line 6) +* variables, local: Pushdef. (line 79) +* warnings, suppressing: Macro Arguments. (line 38) +* words: Names. (line 6) +* words, lexical structure of: Changeword. (line 6) + + diff --git a/coreseek/m4-1.4.13/doc/m4.texinfo b/coreseek/m4-1.4.13/doc/m4.texinfo new file mode 100644 index 0000000..3243b51 --- /dev/null +++ b/coreseek/m4-1.4.13/doc/m4.texinfo @@ -0,0 +1,8650 @@ +\input texinfo @c -*- texinfo -*- +@comment ======================================================== +@comment %**start of header +@setfilename m4.info +@include version.texi +@settitle GNU M4 @value{VERSION} macro processor +@setchapternewpage odd +@ifnothtml +@setcontentsaftertitlepage +@end ifnothtml +@finalout + +@c @tabchar{} +@c ---------- +@c The testsuite expects literal tab output in some examples, but +@c literal tabs in texinfo lead to formatting issues. +@macro tabchar +@ @c +@end macro + +@c @ovar{ARG} +@c ------------------- +@c The ARG is an optional argument. To be used for macro arguments in +@c their documentation (@defmac). +@macro ovar{varname} +@r{[}@var{\varname\}@r{]}@c +@end macro + +@c @dvar{ARG, DEFAULT} +@c ------------------- +@c The ARG is an optional argument, defaulting to DEFAULT. To be used +@c for macro arguments in their documentation (@defmac). +@macro dvar{varname, default} +@r{[}@var{\varname\} = @samp{\default\}@r{]}@c +@end macro + +@comment %**end of header +@comment ======================================================== + +@copying + +This manual (@value{UPDATED}) is for @acronym{GNU} M4 (version +@value{VERSION}), a package containing an implementation of the m4 macro +language. + +Copyright @copyright{} 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, +2006, 2007, 2008, 2009 Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the @acronym{GNU} Free Documentation License, +Version 1.2 or any later version published by the Free Software +Foundation; with no Invariant Sections, no Front-Cover Texts, and no +Back-Cover Texts. A copy of the license is included in the section +entitled ``@acronym{GNU} Free Documentation License.'' +@end quotation +@end copying + +@dircategory Text creation and manipulation +@direntry +* M4: (m4). A powerful macro processor. +@end direntry + +@titlepage +@title GNU M4, version @value{VERSION} +@subtitle A powerful macro processor +@subtitle Edition @value{EDITION}, @value{UPDATED} +@author by Ren@'e Seindal, Fran@,{c}ois Pinard, +@author Gary V. Vaughan, and Eric Blake +@author (@email{bug-m4@@gnu.org}) + +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents + +@ifnottex +@node Top +@top GNU M4 +@insertcopying +@end ifnottex + +@acronym{GNU} @code{m4} is an implementation of the traditional UNIX macro +processor. It is mostly SVR4 compatible, although it has some +extensions (for example, handling more than 9 positional parameters +to macros). @code{m4} also has builtin functions for including +files, running shell commands, doing arithmetic, etc. Autoconf needs +@acronym{GNU} @code{m4} for generating @file{configure} scripts, but not for +running them. + +@acronym{GNU} @code{m4} was originally written by Ren@'e Seindal, with +subsequent changes by Fran@,{c}ois Pinard and other volunteers +on the Internet. All names and email addresses can be found in the +files @file{m4-@value{VERSION}/@/AUTHORS} and +@file{m4-@value{VERSION}/@/THANKS} from the @acronym{GNU} M4 +distribution. + +This is release @value{VERSION}. It is now considered stable: future +releases in the 1.4.x series are only meant to fix bugs, increase speed, +or improve documentation. However@dots{} + +An experimental feature, which would improve @code{m4} usefulness, +allows for changing the syntax for what is a @dfn{word} in @code{m4}. +You should use: +@comment ignore +@example +./configure --enable-changeword +@end example +@noindent +if you want this feature compiled in. The current implementation +slows down @code{m4} considerably and is hardly acceptable. In the +future, @code{m4} 2.0 will come with a different set of new features +that provide similar capabilities, but without the inefficiencies, so +changeword will go away and @emph{you should not count on it}. + +@menu +* Preliminaries:: Introduction and preliminaries +* Invoking m4:: Invoking @code{m4} +* Syntax:: Lexical and syntactic conventions + +* Macros:: How to invoke macros +* Definitions:: How to define new macros +* Conditionals:: Conditionals, loops, and recursion + +* Debugging:: How to debug macros and input + +* Input Control:: Input control +* File Inclusion:: File inclusion +* Diversions:: Diverting and undiverting output + +* Text handling:: Macros for text handling +* Arithmetic:: Macros for doing arithmetic +* Shell commands:: Macros for running shell commands +* Miscellaneous:: Miscellaneous builtin macros +* Frozen files:: Fast loading of frozen state + +* Compatibility:: Compatibility with other versions of @code{m4} +* Answers:: Correct version of some examples + +* Copying This Package:: How to make copies of the overall M4 package +* Copying This Manual:: How to make copies of this manual +* Indices:: Indices of concepts and macros + +@detailmenu + --- The Detailed Node Listing --- + +Introduction and preliminaries + +* Intro:: Introduction to @code{m4} +* History:: Historical references +* Bugs:: Problems and bugs +* Manual:: Using this manual + +Invoking @code{m4} + +* Operation modes:: Command line options for operation modes +* Preprocessor features:: Command line options for preprocessor features +* Limits control:: Command line options for limits control +* Frozen state:: Command line options for frozen state +* Debugging options:: Command line options for debugging +* Command line files:: Specifying input files on the command line + +Lexical and syntactic conventions + +* Names:: Macro names +* Quoted strings:: Quoting input to @code{m4} +* Comments:: Comments in @code{m4} input +* Other tokens:: Other kinds of input tokens +* Input processing:: How @code{m4} copies input to output + +How to invoke macros + +* Invocation:: Macro invocation +* Inhibiting Invocation:: Preventing macro invocation +* Macro Arguments:: Macro arguments +* Quoting Arguments:: On Quoting Arguments to macros +* Macro expansion:: Expanding macros + +How to define new macros + +* Define:: Defining a new macro +* Arguments:: Arguments to macros +* Pseudo Arguments:: Special arguments to macros +* Undefine:: Deleting a macro +* Defn:: Renaming macros +* Pushdef:: Temporarily redefining macros + +* Indir:: Indirect call of macros +* Builtin:: Indirect call of builtins + +Conditionals, loops, and recursion + +* Ifdef:: Testing if a macro is defined +* Ifelse:: If-else construct, or multibranch +* Shift:: Recursion in @code{m4} +* Forloop:: Iteration by counting +* Foreach:: Iteration by list contents +* Stacks:: Working with definition stacks +* Composition:: Building macros with macros + +How to debug macros and input + +* Dumpdef:: Displaying macro definitions +* Trace:: Tracing macro calls +* Debug Levels:: Controlling debugging output +* Debug Output:: Saving debugging output + +Input control + +* Dnl:: Deleting whitespace in input +* Changequote:: Changing the quote characters +* Changecom:: Changing the comment delimiters +* Changeword:: Changing the lexical structure of words +* M4wrap:: Saving text until end of input + +File inclusion + +* Include:: Including named files +* Search Path:: Searching for include files + +Diverting and undiverting output + +* Divert:: Diverting output +* Undivert:: Undiverting output +* Divnum:: Diversion numbers +* Cleardivert:: Discarding diverted text + +Macros for text handling + +* Len:: Calculating length of strings +* Index macro:: Searching for substrings +* Regexp:: Searching for regular expressions +* Substr:: Extracting substrings +* Translit:: Translating characters +* Patsubst:: Substituting text by regular expression +* Format:: Formatting strings (printf-like) + +Macros for doing arithmetic + +* Incr:: Decrement and increment operators +* Eval:: Evaluating integer expressions + +Macros for running shell commands + +* Platform macros:: Determining the platform +* Syscmd:: Executing simple commands +* Esyscmd:: Reading the output of commands +* Sysval:: Exit status +* Mkstemp:: Making temporary files + +Miscellaneous builtin macros + +* Errprint:: Printing error messages +* Location:: Printing current location +* M4exit:: Exiting from @code{m4} + +Fast loading of frozen state + +* Using frozen files:: Using frozen files +* Frozen file format:: Frozen file format + +Compatibility with other versions of @code{m4} + +* Extensions:: Extensions in @acronym{GNU} M4 +* Incompatibilities:: Facilities in System V m4 not in GNU M4 +* Other Incompatibilities:: Other incompatibilities + +Correct version of some examples + +* Improved exch:: Solution for @code{exch} +* Improved forloop:: Solution for @code{forloop} +* Improved foreach:: Solution for @code{foreach} +* Improved copy:: Solution for @code{copy} +* Improved m4wrap:: Solution for @code{m4wrap} +* Improved cleardivert:: Solution for @code{cleardivert} +* Improved capitalize:: Solution for @code{capitalize} +* Improved fatal_error:: Solution for @code{fatal_error} + +How to make copies of the overall M4 package + +* GNU General Public License:: License for copying the M4 package + +How to make copies of this manual + +* GNU Free Documentation License:: License for copying this manual + +Indices of concepts and macros + +* Macro index:: Index for all @code{m4} macros +* Concept index:: Index for many concepts + +@end detailmenu +@end menu + +@node Preliminaries +@chapter Introduction and preliminaries + +This first chapter explains what @acronym{GNU} @code{m4} is, where @code{m4} +comes from, how to read and use this documentation, how to call the +@code{m4} program, and how to report bugs about it. It concludes by +giving tips for reading the remainder of the manual. + +The following chapters then detail all the features of the @code{m4} +language. + +@menu +* Intro:: Introduction to @code{m4} +* History:: Historical references +* Bugs:: Problems and bugs +* Manual:: Using this manual +@end menu + +@node Intro +@section Introduction to @code{m4} + +@cindex overview of @code{m4} +@code{m4} is a macro processor, in the sense that it copies its +input to the output, expanding macros as it goes. Macros are either +builtin or user-defined, and can take any number of arguments. +Besides just doing macro expansion, @code{m4} has builtin functions +for including named files, running shell commands, doing integer +arithmetic, manipulating text in various ways, performing recursion, +etc.@dots{} @code{m4} can be used either as a front-end to a compiler, +or as a macro processor in its own right. + +The @code{m4} macro processor is widely available on all UNIXes, and has +been standardized by @acronym{POSIX}. +Usually, only a small percentage of users are aware of its existence. +However, those who find it often become committed users. The +popularity of @acronym{GNU} Autoconf, which requires @acronym{GNU} +@code{m4} for @emph{generating} @file{configure} scripts, is an incentive +for many to install it, while these people will not themselves +program in @code{m4}. @acronym{GNU} @code{m4} is mostly compatible with the +System V, Release 3 version, except for some minor differences. +@xref{Compatibility}, for more details. + +Some people find @code{m4} to be fairly addictive. They first use +@code{m4} for simple problems, then take bigger and bigger challenges, +learning how to write complex sets of @code{m4} macros along the way. +Once really addicted, users pursue writing of sophisticated @code{m4} +applications even to solve simple problems, devoting more time +debugging their @code{m4} scripts than doing real work. Beware that +@code{m4} may be dangerous for the health of compulsive programmers. + +@node History +@section Historical references + +@cindex history of @code{m4} +@cindex @acronym{GNU} M4, history of +@code{GPM} was an important ancestor of @code{m4}. See +C. Strachey: ``A General Purpose Macro generator'', Computer Journal +8,3 (1965), pp.@: 225 ff. @code{GPM} is also succinctly described into +David Gries classic ``Compiler Construction for Digital Computers''. + +The classic B. Kernighan and P.J. Plauger: ``Software Tools'', +Addison-Wesley, Inc.@: (1976) describes and implements a Unix +macro-processor language, which inspired Dennis Ritchie to write +@code{m3}, a macro processor for the AP-3 minicomputer. + +Kernighan and Ritchie then joined forces to develop the original +@code{m4}, as described in ``The M4 Macro Processor'', Bell +Laboratories (1977). It had only 21 builtin macros. + +While @code{GPM} was more @emph{pure}, @code{m4} is meant to deal with +the true intricacies of real life: macros can be recognized without +being pre-announced, skipping whitespace or end-of-lines is easier, +more constructs are builtin instead of derived, etc. + +Originally, the Kernighan and Plauger macro-processor, and then +@code{m3}, formed the engine for the Rational FORTRAN preprocessor, +that is, the @code{Ratfor} equivalent of @code{cpp}. Later, @code{m4} +was used as a front-end for @code{Ratfor}, @code{C} and @code{Cobol}. + +Ren@'e Seindal released his implementation of @code{m4}, @acronym{GNU} +@code{m4}, +in 1990, with the aim of removing the artificial limitations in many +of the traditional @code{m4} implementations, such as maximum line +length, macro size, or number of macros. + +The late Professor A. Dain Samples described and implemented a further +evolution in the form of @code{M5}: ``User's Guide to the M5 Macro +Language: 2nd edition'', Electronic Announcement on comp.compilers +newsgroup (1992). + +Fran@,{c}ois Pinard took over maintenance of @acronym{GNU} @code{m4} in +1992, until 1994 when he released @acronym{GNU} @code{m4} 1.4, which was +the stable release for 10 years. It was at this time that @acronym{GNU} +Autoconf decided to require @acronym{GNU} @code{m4} as its underlying +engine, since all other implementations of @code{m4} had too many +limitations. + +More recently, in 2004, Paul Eggert released 1.4.1 and 1.4.2 which +addressed some long standing bugs in the venerable 1.4 release. Then in +2005, Gary V. Vaughan collected together the many patches to +@acronym{GNU} @code{m4} 1.4 that were floating around the net and +released 1.4.3 and 1.4.4. And in 2006, Eric Blake joined the team and +prepared patches for the release of 1.4.5, 1.4.6, 1.4.7, and 1.4.8. +More bug fixes were incorporated in 2007, with releases 1.4.9 and +1.4.10. Eric continued with some portability fixes for 1.4.11 and +1.4.12 in 2008, and 1.4.13 in 2009. + +Meanwhile, development has continued on new features for @code{m4}, such +as dynamic module loading and additional builtins. When complete, +@acronym{GNU} @code{m4} 2.0 will start a new series of releases. + +@node Bugs +@section Problems and bugs + +@cindex reporting bugs +@cindex bug reports +@cindex suggestions, reporting +If you have problems with @acronym{GNU} M4 or think you've found a bug, +please report it. Before reporting a bug, make sure you've actually +found a real bug. Carefully reread the documentation and see if it +really says you can do what you're trying to do. If it's not clear +whether you should be able to do something or not, report that too; it's +a bug in the documentation! + +Before reporting a bug or trying to fix it yourself, try to isolate it +to the smallest possible input file that reproduces the problem. Then +send us the input file and the exact results @code{m4} gave you. Also +say what you expected to occur; this will help us decide whether the +problem was really in the documentation. + +Once you've got a precise problem, send e-mail to +@email{bug-m4@@gnu.org}. Please include the version number of @code{m4} +you are using. You can get this information with the command +@kbd{m4 --version}. Also provide details about the platform you are +executing on. + +Non-bug suggestions are always welcome as well. If you have questions +about things that are unclear in the documentation or are just obscure +features, please report them too. + +@node Manual +@section Using this manual + +@cindex examples, understanding +This manual contains a number of examples of @code{m4} input and output, +and a simple notation is used to distinguish input, output and error +messages from @code{m4}. Examples are set out from the normal text, and +shown in a fixed width font, like this + +@comment ignore +@example +This is an example of an example! +@end example + +To distinguish input from output, all output from @code{m4} is prefixed +by the string @samp{@result{}}, and all error messages by the string +@samp{@error{}}. When showing how command line options affect matters, +the command line is shown with a prompt @samp{$ @kbd{like this}}, +otherwise, you can assume that a simple @kbd{m4} invocation will work. +Thus: + +@comment ignore +@example +$ @kbd{command line to invoke m4} +Example of input line +@result{}Output line from m4 +@error{}and an error message +@end example + +The sequence @samp{^D} in an example indicates the end of the input +file. The sequence @samp{@key{NL}} refers to the newline character. +The majority of these examples are self-contained, and you can run them +with similar results by invoking @kbd{m4 -d}. In fact, the testsuite +that is bundled in the @acronym{GNU} M4 package consists of the examples +in this document! Some of the examples assume that your current +directory is located where you unpacked the installation, so if you plan +on following along, you may find it helpful to do this now: + +@comment ignore +@example +$ @kbd{cd m4-@value{VERSION}} +@end example + +As each of the predefined macros in @code{m4} is described, a prototype +call of the macro will be shown, giving descriptive names to the +arguments, e.g., + +@deffn Composite example (@var{string}, @dvar{count, 1}, @ + @ovar{argument}@dots{}) +This is a sample prototype. There is not really a macro named +@code{example}, but this documents that if there were, it would be a +Composite macro, rather than a Builtin. It requires at least one +argument, @var{string}. Remember that in @code{m4}, there must not be a +space between the macro name and the opening parenthesis, unless it was +intended to call the macro without any arguments. The brackets around +@var{count} and @var{argument} show that these arguments are optional. +If @var{count} is omitted, the macro behaves as if count were @samp{1}, +whereas if @var{argument} is omitted, the macro behaves as if it were +the empty string. A blank argument is not the same as an omitted +argument. For example, @samp{example(`a')}, @samp{example(`a',`1')}, +and @samp{example(`a',`1',)} would behave identically with @var{count} +set to @samp{1}; while @samp{example(`a',)} and @samp{example(`a',`')} +would explicitly pass the empty string for @var{count}. The ellipses +(@samp{@dots{}}) show that the macro processes additional arguments +after @var{argument}, rather than ignoring them. +@end deffn + +@cindex numbers +All macro arguments in @code{m4} are strings, but some are given +special interpretation, e.g., as numbers, file names, regular +expressions, etc. The documentation for each macro will state how the +parameters are interpreted, and what happens if the argument cannot be +parsed according to the desired interpretation. Unless specified +otherwise, a parameter specified to be a number is parsed as a decimal, +even if the argument has leading zeros; and parsing the empty string as +a number results in 0 rather than an error, although a warning will be +issued. + +This document consistently writes and uses @dfn{builtin}, without a +hyphen, as if it were an English word. This is how the @code{builtin} +primitive is spelled within @code{m4}. + +@node Invoking m4 +@chapter Invoking @code{m4} + +@cindex command line +@cindex invoking @code{m4} +The format of the @code{m4} command is: + +@comment ignore +@example +@code{m4} @r{[}@var{option}@dots{}@r{]} @r{[}@var{file}@dots{}@r{]} +@end example + +@cindex command line, options +@cindex options, command line +@cindex @env{POSIXLY_CORRECT} +All options begin with @samp{-}, or if long option names are used, with +@samp{--}. A long option name need not be written completely, any +unambiguous prefix is sufficient. @acronym{POSIX} requires @code{m4} to +recognize arguments intermixed with files, even when +@env{POSIXLY_CORRECT} is set in the environment. Most options take +effect at startup regardless of their position, but some are documented +below as taking effect after any files that occurred earlier in the +command line. The argument @option{--} is a marker to denote the end of +options. + +With short options, options that do not take arguments may be combined +into a single command line argument with subsequent options, options +with mandatory arguments may be provided either as a single command line +argument or as two arguments, and options with optional arguments must +be provided as a single argument. In other words, +@kbd{m4 -QPDfoo -d a -df} is equivalent to +@kbd{m4 -Q -P -D foo -d -df -- ./a}, although the latter form is +considered canonical. + +With long options, options with mandatory arguments may be provided with +an equal sign (@samp{=}) in a single argument, or as two arguments, and +options with optional arguments must be provided as a single argument. +In other words, @kbd{m4 --def foo --debug a} is equivalent to +@kbd{m4 --define=foo --debug= -- ./a}, although the latter form is +considered canonical (not to mention more robust, in case a future +version of @code{m4} introduces an option named @option{--default}). + +@code{m4} understands the following options, grouped by functionality. + +@menu +* Operation modes:: Command line options for operation modes +* Preprocessor features:: Command line options for preprocessor features +* Limits control:: Command line options for limits control +* Frozen state:: Command line options for frozen state +* Debugging options:: Command line options for debugging +* Command line files:: Specifying input files on the command line +@end menu + +@node Operation modes +@section Command line options for operation modes + +Several options control the overall operation of @code{m4}: + +@table @code +@item --help +Print a help summary on standard output, then immediately exit +@code{m4} without reading any input files or performing any other +actions. + +@item --version +Print the version number of the program on standard output, then +immediately exit @code{m4} without reading any input files or +performing any other actions. + +@item -E +@itemx --fatal-warnings +@cindex errors, fatal +@cindex fatal errors +Controls the effect of warnings. If unspecified, then execution +continues and exit status is unaffected when a warning is printed. If +specified exactly once, warnings become fatal; when one is issued, +execution continues, but the exit status will be non-zero. If specified +multiple times, then execution halts with non-zero status the first time +a warning is issued. The introduction of behavior levels is new to M4 +1.4.9; for behavior consistent with earlier versions, you should specify +@option{-E} twice. + +@item -i +@itemx --interactive +@itemx -e +Makes this invocation of @code{m4} interactive. This means that all +output will be unbuffered, and interrupts will be ignored. The +spelling @option{-e} exists for compatibility with other @code{m4} +implementations, and issues a warning because it may be withdrawn in a +future version of @acronym{GNU} M4. + +@item -P +@itemx --prefix-builtins +Internally modify @emph{all} builtin macro names so they all start with +the prefix @samp{m4_}. For example, using this option, one should write +@samp{m4_define} instead of @samp{define}, and @samp{m4___file__} +instead of @samp{__file__}. This option has no effect if @option{-R} +is also specified. + +@item -Q +@itemx --quiet +@itemx --silent +Suppress warnings, such as missing or superfluous arguments in macro +calls, or treating the empty string as zero. + +@item --warn-macro-sequence@r{[}=@var{regexp}@r{]} +Issue a warning if the regular expression @var{regexp} has a non-empty +match in any macro definition (either by @code{define} or +@code{pushdef}). Empty matches are ignored; therefore, supplying the +empty string as @var{regexp} disables any warning. If the optional +@var{regexp} is not supplied, then the default regular expression is +@samp{\$\(@{[^@}]*@}\|[0-9][0-9]+\)} (a literal @samp{$} followed by +multiple digits or by an open brace), since these sequences will +change semantics in the default operation of @acronym{GNU} M4 2.0 (due +to a change in how more than 9 arguments in a macro definition will be +handled, @pxref{Arguments}). Providing an alternate regular +expression can provide a useful reverse lookup feature of finding +where a macro is defined to have a given definition. + +@item -W @var{regexp} +@itemx --word-regexp=@var{regexp} +Use @var{regexp} as an alternative syntax for macro names. This +experimental option will not be present in all @acronym{GNU} @code{m4} +implementations (@pxref{Changeword}). +@end table + +@node Preprocessor features +@section Command line options for preprocessor features + +@cindex macro definitions, on the command line +@cindex command line, macro definitions on the +@cindex preprocessor features +Several options allow @code{m4} to behave more like a preprocessor. +Macro definitions and deletions can be made on the command line, the +search path can be altered, and the output file can track where the +input came from. These features occur with the following options: + +@table @code +@item -D @var{name}@r{[}=@var{value}@r{]} +@itemx --define=@var{name}@r{[}=@var{value}@r{]} +This enters @var{name} into the symbol table. If @samp{=@var{value}} is +missing, the value is taken to be the empty string. The @var{value} can +be any string, and the macro can be defined to take arguments, just as +if it was defined from within the input. This option may be given more +than once; order with respect to file names is significant, and +redefining the same @var{name} loses the previous value. + +@item -I @var{directory} +@itemx --include=@var{directory} +Make @code{m4} search @var{directory} for included files that are not +found in the current working directory. @xref{Search Path}, for more +details. This option may be given more than once. + +@item -s +@itemx --synclines +@cindex synchronization lines +@cindex location, input +@cindex input location +Generate synchronization lines, for use by the C preprocessor or other +similar tools. Order is significant with respect to file names. This +option is useful, for example, when @code{m4} is used as a +front end to a compiler. Source file name and line number information +is conveyed by directives of the form @samp{#line @var{linenum} +"@var{file}"}, which are inserted as needed into the middle of the +output. Such directives mean that the following line originated or was +expanded from the contents of input file @var{file} at line +@var{linenum}. The @samp{"@var{file}"} part is often omitted when +the file name did not change from the previous directive. + +Synchronization directives are always given on complete lines by +themselves. When a synchronization discrepancy occurs in the middle of +an output line, the associated synchronization directive is delayed +until the next newline that does not occur in the middle of a quoted +string or comment. + +@comment options: -s +@example +define(`twoline', `1 +2') +@result{}#line 2 "stdin" +@result{} +changecom(`/*', `*/') +@result{} +define(`comment', `/*1 +2*/') +@result{}#line 5 +@result{} +dnl no line +hello +@result{}#line 7 +@result{}hello +twoline +@result{}1 +@result{}#line 8 +@result{}2 +comment +@result{}/*1 +@result{}2*/ +one comment `two +three' +@result{}#line 10 +@result{}one /*1 +@result{}2*/ two +@result{}three +goodbye +@result{}#line 12 +@result{}goodbye +@end example + +@item -U @var{name} +@itemx --undefine=@var{name} +This deletes any predefined meaning @var{name} might have. Obviously, +only predefined macros can be deleted in this way. This option may be +given more than once; undefining a @var{name} that does not have a +definition is silently ignored. Order is significant with respect to +file names. +@end table + +@node Limits control +@section Command line options for limits control + +There are some limits within @code{m4} that can be tuned. For +compatibility, @code{m4} also accepts some options that control limits +in other implementations, but which are automatically unbounded (limited +only by your hardware and operating system constraints) in @acronym{GNU} +@code{m4}. + +@table @code +@item -g +@itemx --gnu +Enable all the extensions in this implementation. In this release of +M4, this option is always on by default; it is currently only useful +when overriding a prior use of @option{--traditional}. However, having +@acronym{GNU} behavior as default makes it impossible to write a +strictly @acronym{POSIX}-compliant client that avoids all incompatible +@acronym{GNU} M4 extensions, since such a client would have to use the +non-@acronym{POSIX} command-line option to force full @acronym{POSIX} +behavior. Thus, a future version of M4 will be changed to implicitly +use the option @option{--traditional} if the environment variable +@env{POSIXLY_CORRECT} is set. Projects that intentionally use +@acronym{GNU} extensions should consider using @option{--gnu} to state +their intentions, so that the project will not mysteriously break if the +user upgrades to a newer M4 and has @env{POSIXLY_CORRECT} set in their +environment. + +@item -G +@itemx --traditional +Suppress all the extensions made in this implementation, compared to the +System V version. @xref{Compatibility}, for a list of these. + +@item -H @var{num} +@itemx --hashsize=@var{num} +Make the internal hash table for symbol lookup be @var{num} entries big. +For better performance, the number should be prime, but this is not +checked. The default is 509 entries. It should not be necessary to +increase this value, unless you define an excessive number of macros. + +@item -L @var{num} +@itemx --nesting-limit=@var{num} +@cindex nesting limit +@cindex limit, nesting +Artificially limit the nesting of macro calls to @var{num} levels, +stopping program execution if this limit is ever exceeded. When not +specified, nesting defaults to unlimited on platforms that can detect +stack overflow, and to 1024 levels otherwise. A value of zero means +unlimited; but then heavily nested code could potentially cause a stack +overflow. + +The precise effect of this option is more correctly associated +with textual nesting than dynamic recursion. It has been useful +when some complex @code{m4} input was generated by mechanical means, and +also in diagnosing recursive algorithms that do not scale well. +Most users never need to change this option from its default. + +@cindex rescanning +This option does @emph{not} have the ability to break endless +rescanning loops, since these do not necessarily consume much memory +or stack space. Through clever usage of rescanning loops, one can +request complex, time-consuming computations from @code{m4} with useful +results. Putting limitations in this area would break @code{m4} power. +There are many pathological cases: @w{@samp{define(`a', `a')a}} is +only the simplest example (but @pxref{Compatibility}). Expecting @acronym{GNU} +@code{m4} to detect these would be a little like expecting a compiler +system to detect and diagnose endless loops: it is a quite @emph{hard} +problem in general, if not undecidable! + +@item -B @var{num} +@itemx -S @var{num} +@itemx -T @var{num} +These options are present for compatibility with System V @code{m4}, but +do nothing in this implementation. They may disappear in future +releases, and issue a warning to that effect. + +@item -N @var{num} +@itemx --diversions=@var{num} +These options are present only for compatibility with previous +versions of @acronym{GNU} @code{m4}, and were controlling the number of +possible diversions which could be used at the same time. They do nothing, +because there is no fixed limit anymore. They may disappear in future +releases, and issue a warning to that effect. +@end table + +@node Frozen state +@section Command line options for frozen state + +@acronym{GNU} @code{m4} comes with a feature of freezing internal state +(@pxref{Frozen files}). This can be used to speed up @code{m4} +execution when reusing a common initialization script. + +@table @code +@item -F @var{file} +@itemx --freeze-state=@var{file} +Once execution is finished, write out the frozen state on the specified +@var{file}. It is conventional, but not required, for @var{file} to end +in @samp{.m4f}. + +@item -R @var{file} +@itemx --reload-state=@var{file} +Before execution starts, recover the internal state from the specified +frozen @var{file}. The options @option{-D}, @option{-U}, and +@option{-t} take effect after state is reloaded, but before the input +files are read. +@end table + +@node Debugging options +@section Command line options for debugging + +Finally, there are several options for aiding in debugging @code{m4} +scripts. + +@table @code +@item -d@r{[}@var{flags}@r{]} +@itemx --debug@r{[}=@var{flags}@r{]} +Set the debug-level according to the flags @var{flags}. The debug-level +controls the format and amount of information presented by the debugging +functions. @xref{Debug Levels}, for more details on the format and +meaning of @var{flags}. If omitted, @var{flags} defaults to @samp{aeq}. + +@item --debugfile@r{[}=@var{file}@r{]} +@itemx -o @var{file} +@itemx --error-output=@var{file} +Redirect @code{dumpdef} output, debug messages, and trace output to the +named @var{file}. Warnings, error messages, and @code{errprint} output +are still printed to standard error. If these options are not used, or +if @var{file} is unspecified (only possible for @option{--debugfile}), +debug output goes to standard error; if @var{file} is the empty string, +debug output is discarded. @xref{Debug Output}, for more details. The +option @option{--debugfile} may be given more than once, and order is +significant with respect to file names. The spellings @option{-o} and +@option{--error-output} are misleading and inconsistent with other +@acronym{GNU} tools; for now they are silently accepted as synonyms of +@option{--debugfile} and only recognized once, but in a future version +of M4, using them will cause a warning to be issued. + +@ignore +@comment not worth including in the manual, but provides a good test + +@comment examples +@comment options: -Dbar=hello -tbar --debugfile= foo --debugfile - +@example +$ @kbd{m4 -d -Iexamples -Dbar=hello -tbar --debugfile= foo --debugfile - +@result{}hello +errprint(`hi +')dnl +@error{}hi +bar +@error{}m4trace: -1- bar -> `hello' +@result{}hello +@end example +@end ignore + +@item -l @var{num} +@itemx --arglength=@var{num} +Restrict the size of the output generated by macro tracing to @var{num} +characters per trace line. If unspecified or zero, output is +unlimited. @xref{Debug Levels}, for more details. + +@item -t @var{name} +@itemx --trace=@var{name} +This enables tracing for the macro @var{name}, at any point where it is +defined. @var{name} need not be defined when this option is given. +This option may be given more than once, and order is significant with +respect to file names. @xref{Trace}, for more details. +@end table + +@node Command line files +@section Specifying input files on the command line + +@cindex command line, file names on the +@cindex file names, on the command line +The remaining arguments on the command line are taken to be input file +names. If no names are present, standard input is read. A file +name of @file{-} is taken to mean standard input. It is +conventional, but not required, for input files to end in @samp{.m4}. + +The input files are read in the sequence given. Standard input can be +read more than once, so the file name @file{-} may appear multiple times +on the command line; this makes a difference when input is from a +terminal or other special file type. It is an error if an input file +ends in the middle of argument collection, a comment, or a quoted +string. + +The options @option{--define} (@option{-D}), @option{--undefine} +(@option{-U}), @option{--synclines} (@option{-s}), and @option{--trace} +(@option{-t}) only take effect after processing input from any file +names that occur earlier on the command line. For example, assume the +file @file{foo} contains: + +@comment ignore +@example +$ @kbd{cat foo} +bar +@end example + +The text @samp{bar} can then be redefined over multiple uses of +@file{foo}: + +@comment options: -Dbar=hello foo -Dbar=world foo +@example +$ @kbd{m4 -Dbar=hello foo -Dbar=world foo} +@result{}hello +@result{}world +@end example + +If none of the input files invoked @code{m4exit} (@pxref{M4exit}), the +exit status of @code{m4} will be 0 for success, 1 for general failure +(such as problems with reading an input file), and 63 for version +mismatch (@pxref{Using frozen files}). + +If you need to read a file whose name starts with a @file{-}, you can +specify it as @samp{./-file}, or use @option{--} to mark the end of +options. + +@ignore +@comment Test that 'm4 file/' detects that file is not a directory; we +@comment can assume that the current directory contains a Makefile. +@comment mingw fails with EINVAL rather than ENOTDIR. + +@comment status: 1 +@comment xerr: ignore +@comment options: Makefile/ +@example +@error{}m4: cannot open `Makefile/': Not a directory +@end example +@end ignore + +@node Syntax +@chapter Lexical and syntactic conventions + +@cindex input tokens +@cindex tokens +As @code{m4} reads its input, it separates it into @dfn{tokens}. A +token is either a name, a quoted string, or any single character, that +is not a part of either a name or a string. Input to @code{m4} can also +contain comments. @acronym{GNU} @code{m4} does not yet understand +multibyte locales; all operations are byte-oriented rather than +character-oriented (although if your locale uses a single byte +encoding, such as @sc{ISO-8859-1}, you will not notice a difference). +However, @code{m4} is eight-bit clean, so you can +use non-@sc{ascii} characters in quoted strings (@pxref{Changequote}), +comments (@pxref{Changecom}), and macro names (@pxref{Indir}), with the +exception of the @sc{nul} character (the zero byte @samp{'\0'}). + +@menu +* Names:: Macro names +* Quoted strings:: Quoting input to @code{m4} +* Comments:: Comments in @code{m4} input +* Other tokens:: Other kinds of input tokens +* Input processing:: How @code{m4} copies input to output +@end menu + +@node Names +@section Macro names + +@cindex names +@cindex words +A name is any sequence of letters, digits, and the character @samp{_} +(underscore), where the first character is not a digit. @code{m4} will +use the longest such sequence found in the input. If a name has a +macro definition, it will be subject to macro expansion +(@pxref{Macros}). Names are case-sensitive. + +Examples of legal names are: @samp{foo}, @samp{_tmp}, and @samp{name01}. + +@node Quoted strings +@section Quoting input to @code{m4} + +@cindex quoted string +@cindex string, quoted +A quoted string is a sequence of characters surrounded by quote +strings, defaulting to +@samp{`} and @samp{'}, where the nested begin and end quotes within the +string are balanced. The value of a string token is the text, with one +level of quotes stripped off. Thus + +@comment ignore +@example +`' +@result{} +@end example + +@noindent +is the empty string, and double-quoting turns into single-quoting. + +@comment ignore +@example +``quoted'' +@result{}`quoted' +@end example + +The quote characters can be changed at any time, using the builtin macro +@code{changequote}. @xref{Changequote}, for more information. + +@node Comments +@section Comments in @code{m4} input + +@cindex comments +Comments in @code{m4} are normally delimited by the characters @samp{#} +and newline. All characters between the comment delimiters are ignored, +but the entire comment (including the delimiters) is passed through to +the output---comments are @emph{not} discarded by @code{m4}. + +Comments cannot be nested, so the first newline after a @samp{#} ends +the comment. The commenting effect of the begin-comment string +can be inhibited by quoting it. + +@example +$ @kbd{m4} +`quoted text' # `commented text' +@result{}quoted text # `commented text' +`quoting inhibits' `#' `comments' +@result{}quoting inhibits # comments +@end example + +The comment delimiters can be changed to any string at any time, using +the builtin macro @code{changecom}. @xref{Changecom}, for more +information. + +@ignore +@comment Detect regression in 1.4.10b in regards to reparsing comments. +@comment Not worth including in the manual. +@example +define(`e', `$@@')define(`q', ``$@@'')define(`foo', `bar') +@result{} +q(e(`one +',#two ' foo +)) +@result{}`one +@result{}',`#two bar +@result{}'' +changecom(`<', `>')define(`n', `$#') +@result{} +n(e(<`>, <'>)) +@result{}1 +len(e(<`>, ,<'>)) +@result{}12 +@end example +@end ignore + +@node Other tokens +@section Other kinds of input tokens + +@cindex tokens, special +Any character, that is neither a part of a name, nor of a quoted string, +nor a comment, is a token by itself. When not in the context of macro +expansion, all of these tokens are just copied to output. However, +during macro expansion, whitespace characters (space, tab, newline, +formfeed, carriage return, vertical tab), parentheses (@samp{(} and +@samp{)}), comma (@samp{,}), and dollar (@samp{$}) have additional +roles, explained later. + +@node Input processing +@section How @code{m4} copies input to output + +As @code{m4} reads the input token by token, it will copy each token +directly to the output immediately. + +The exception is when it finds a word with a macro definition. In that +case @code{m4} will calculate the macro's expansion, possibly reading +more input to get the arguments. It then inserts the expansion in front +of the remaining input. In other words, the resulting text from a macro +call will be read and parsed into tokens again. + +@code{m4} expands a macro as soon as possible. If it finds a macro call +when collecting the arguments to another, it will expand the second call +first. This process continues until there are no more macro calls to +expand and all the input has been consumed. + +For a running example, examine how @code{m4} handles this input: + +@comment ignore +@example +format(`Result is %d', eval(`2**15')) +@end example + +@noindent +First, @code{m4} sees that the token @samp{format} is a macro name, so +it collects the tokens @samp{(}, @samp{`Result is %d'}, @samp{,}, +and @samp{@w{ }}, before encountering another potential macro. Sure +enough, @samp{eval} is a macro name, so the nested argument collection +picks up @samp{(}, @samp{`2**15'}, and @samp{)}, invoking the eval macro +with the lone argument of @samp{2**15}. The expansion of +@samp{eval(2**15)} is @samp{32768}, which is then rescanned as the five +tokens @samp{3}, @samp{2}, @samp{7}, @samp{6}, and @samp{8}; and +combined with the next @samp{)}, the format macro now has all its +arguments, as if the user had typed: + +@comment ignore +@example +format(`Result is %d', 32768) +@end example + +@noindent +The format macro expands to @samp{Result is 32768}, and we have another +round of scanning for the tokens @samp{Result}, @samp{@w{ }}, +@samp{is}, @samp{@w{ }}, @samp{3}, @samp{2}, @samp{7}, @samp{6}, and +@samp{8}. None of these are macros, so the final output is + +@comment ignore +@example +@result{}Result is 32768 +@end example + +As a more complicated example, we will contrast an actual code +example from the Gnulib project@footnote{Derived from a patch in +@uref{http://lists.gnu.org/archive/html/bug-gnulib/@/2007-01/@/msg00389.html}, +and a followup patch in +@uref{http://lists.gnu.org/archive/html/bug-gnulib/@/2007-02/@/msg00000.html}}, +showing both a buggy approach and the desired results. The user desires +to output a shell assignment statement that takes its argument and turns +it into a shell variable by converting it to uppercase and prepending a +prefix. The original attempt looks like this: + +@example +changequote([,])dnl +define([gl_STRING_MODULE_INDICATOR], + [ + dnl comment + GNULIB_]translit([$1],[a-z],[A-Z])[=1 + ])dnl + gl_STRING_MODULE_INDICATOR([strcase]) +@result{} @w{ } +@result{} GNULIB_strcase=1 +@result{} @w{ } +@end example + +Oops -- the argument did not get capitalized. And although the manual +is not able to easily show it, both lines that appear empty actually +contain two trailing spaces. By stepping through the parse, it is easy +to see what happened. First, @code{m4} sees the token +@samp{changequote}, which it recognizes as a macro, followed by +@samp{(}, @samp{[}, @samp{,}, @samp{]}, and @samp{)} to form the +argument list. The macro expands to the empty string, but changes the +quoting characters to something more useful for generating shell code +(unbalanced @samp{`} and @samp{'} appear all the time in shell scripts, +but unbalanced @samp{[]} tend to be rare). Also in the first line, +@code{m4} sees the token @samp{dnl}, which it recognizes as a builtin +macro that consumes the rest of the line, resulting in no output for +that line. + +The second line starts a macro definition. @code{m4} sees the token +@samp{define}, which it recognizes as a macro, followed by a @samp{(}, +@samp{[gl_STRING_MODULE_INDICATOR]}, and @samp{,}. Because an unquoted +comma was encountered, the first argument is known to be the expansion +of the single-quoted string token, or @samp{gl_STRING_MODULE_INDICATOR}. +Next, @code{m4} sees @samp{@key{NL}}, @samp{ }, and @samp{ }, but this +whitespace is discarded as part of argument collection. Then comes a +rather lengthy single-quoted string token, @samp{[@key{NL}@ @ @ @ dnl +comment@key{NL}@ @ @ @ GNULIB_]}. This is followed by the token +@samp{translit}, which @code{m4} recognizes as a macro name, so a nested +macro expansion has started. + +The arguments to the @code{translit} are found by the tokens @samp{(}, +@samp{[$1]}, @samp{,}, @samp{[a-z]}, @samp{,}, @samp{[A-Z]}, and finally +@samp{)}. All three string arguments are expanded (or in other words, +the quotes are stripped), and since neither @samp{$} nor @samp{1} need +capitalization, the result of the macro is @samp{$1}. This expansion is +rescanned, resulting in the two literal characters @samp{$} and +@samp{1}. + +Scanning of the outer macro resumes, and picks up with +@samp{[=1@key{NL}@ @ ]}, and finally @samp{)}. The collected pieces of +expanded text are concatenated, with the end result that the macro +@samp{gl_STRING_MODULE_INDICATOR} is now defined to be the sequence +@samp{@key{NL}@ @ @ @ dnl comment@key{NL}@ @ @ @ GNULIB_$1=1@key{NL}@ @ }. +Once again, @samp{dnl} is recognized and avoids a newline in the output. + +The final line is then parsed, beginning with @samp{ } and @samp{ } +that are output literally. Then @samp{gl_STRING_MODULE_INDICATOR} is +recognized as a macro name, with an argument list of @samp{(}, +@samp{[strcase]}, and @samp{)}. Since the definition of the macro +contains the sequence @samp{$1}, that sequence is replaced with the +argument @samp{strcase} prior to starting the rescan. The rescan sees +@samp{@key{NL}} and four spaces, which are output literally, then +@samp{dnl}, which discards the text @samp{ comment@key{NL}}. Next +comes four more spaces, also output literally, and the token +@samp{GNULIB_strcase}, which resulted from the earlier parameter +substitution. Since that is not a macro name, it is output literally, +followed by the literal tokens @samp{=}, @samp{1}, @samp{@key{NL}}, and +two more spaces. Finally, the original @samp{@key{NL}} seen after the +macro invocation is scanned and output literally. + +Now for a corrected approach. This rearranges the use of newlines and +whitespace so that less whitespace is output (which, although harmless +to shell scripts, can be visually unappealing), and fixes the quoting +issues so that the capitalization occurs when the macro +@samp{gl_STRING_MODULE_INDICATOR} is invoked, rather then when it is +defined. + +@example +changequote([,])dnl +define([gl_STRING_MODULE_INDICATOR], + [dnl comment + GNULIB_[]translit([$1], [a-z], [A-Z])=1dnl +])dnl + gl_STRING_MODULE_INDICATOR([strcase]) +@result{} GNULIB_STRCASE=1 +@end example + +The parsing of the first line is unchanged. The second line sees the +name of the macro to define, then sees the discarded @samp{@key{NL}} +and two spaces, as before. But this time, the next token is +@samp{[dnl comment@key{NL}@ @ GNULIB_[]translit([$1], [a-z], +[A-Z])=1dnl@key{NL}]}, which includes nested quotes, followed by +@samp{)} to end the macro definition and @samp{dnl} to skip the +newline. No early expansion of @code{translit} occurs, so the entire +string becomes the definition of the macro. + +The final line is then parsed, beginning with two spaces that are +output literally, and an invocation of +@code{gl_STRING_MODULE_INDICATOR} with the argument @samp{strcase}. +Again, the @samp{$1} in the macro definition is substituted prior to +rescanning. Rescanning first encounters @samp{dnl}, and discards +@samp{ comment@key{NL}}. Then two spaces are output literally. Next +comes the token @samp{GNULIB_}, but that is not a macro, so it is +output literally. The token @samp{[]} is an empty string, so it does +not affect output. Then the token @samp{translit} is encountered. + +This time, the arguments to @code{translit} are parsed as @samp{(}, +@samp{[strcase]}, @samp{,}, @samp{ }, @samp{[a-z]}, @samp{,}, @samp{ }, +@samp{[A-Z]}, and @samp{)}. The two spaces are discarded, and the +translit results in the desired result @samp{STRCASE}. This is +rescanned, but since it is not a macro name, it is output literally. +Then the scanner sees @samp{=} and @samp{1}, which are output +literally, followed by @samp{dnl} which discards the rest of the +definition of @code{gl_STRING_MODULE_INDICATOR}. The newline at the +end of output is the literal @samp{@key{NL}} that appeared after the +invocation of the macro. + +The order in which @code{m4} expands the macros can be further explored +using the trace facilities of @acronym{GNU} @code{m4} (@pxref{Trace}). + +@node Macros +@chapter How to invoke macros + +This chapter covers macro invocation, macro arguments and how macro +expansion is treated. + +@menu +* Invocation:: Macro invocation +* Inhibiting Invocation:: Preventing macro invocation +* Macro Arguments:: Macro arguments +* Quoting Arguments:: On Quoting Arguments to macros +* Macro expansion:: Expanding macros +@end menu + +@node Invocation +@section Macro invocation + +@cindex macro invocation +@cindex invoking macros +Macro invocations has one of the forms + +@comment ignore +@example +name +@end example + +@noindent +which is a macro invocation without any arguments, or + +@comment ignore +@example +name(arg1, arg2, @dots{}, arg@var{n}) +@end example + +@noindent +which is a macro invocation with @var{n} arguments. Macros can have any +number of arguments. All arguments are strings, but different macros +might interpret the arguments in different ways. + +The opening parenthesis @emph{must} follow the @var{name} directly, with +no spaces in between. If it does not, the macro is called with no +arguments at all. + +For a macro call to have no arguments, the parentheses @emph{must} be +left out. The macro call + +@comment ignore +@example +name() +@end example + +@noindent +is a macro call with one argument, which is the empty string, not a call +with no arguments. + +@node Inhibiting Invocation +@section Preventing macro invocation + +An innovation of the @code{m4} language, compared to some of its +predecessors (like Strachey's @code{GPM}, for example), is the ability +to recognize macro calls without resorting to any special, prefixed +invocation character. While generally useful, this feature might +sometimes be the source of spurious, unwanted macro calls. So, @acronym{GNU} +@code{m4} offers several mechanisms or techniques for inhibiting the +recognition of names as macro calls. + +@cindex @acronym{GNU} extensions +@cindex blind macro +@cindex macro, blind +First of all, many builtin macros cannot meaningfully be called without +arguments. As a @acronym{GNU} extension, for any of these macros, +whenever an opening parenthesis does not immediately follow their name, +the builtin macro call is not triggered. This solves the most usual +cases, like for @samp{include} or @samp{eval}. Later in this document, +the sentence ``This macro is recognized only with parameters'' refers to +this specific provision of @acronym{GNU} M4, also known as a blind +builtin macro. For the builtins defined by @acronym{POSIX} that bear +this disclaimer, @acronym{POSIX} specifically states that invoking those +builtins without arguments is unspecified, because many other +implementations simply invoke the builtin as though it were given one +empty argument instead. + +@example +$ @kbd{m4} +eval +@result{}eval +eval(`1') +@result{}1 +@end example + +There is also a command line option (@option{--prefix-builtins}, or +@option{-P}, @pxref{Operation modes, , Invoking m4}) that renames all +builtin macros with a prefix of @samp{m4_} at startup. The option has +no effect whatsoever on user defined macros. For example, with this option, +one has to write @code{m4_dnl} and even @code{m4_m4exit}. It also has +no effect on whether a macro requires parameters. + +@comment options: -P +@example +$ @kbd{m4 -P} +eval +@result{}eval +eval(`1') +@result{}eval(1) +m4_eval +@result{}m4_eval +m4_eval(`1') +@result{}1 +@end example + +Another alternative is to redefine problematic macros to a name less +likely to cause conflicts, @xref{Definitions}. + +If your version of @acronym{GNU} @code{m4} has the @code{changeword} feature +compiled in, it offers far more flexibility in specifying the +syntax of macro names, both builtin or user-defined. @xref{Changeword}, +for more information on this experimental feature. + +Of course, the simplest way to prevent a name from being interpreted +as a call to an existing macro is to quote it. The remainder of +this section studies a little more deeply how quoting affects macro +invocation, and how quoting can be used to inhibit macro invocation. + +Even if quoting is usually done over the whole macro name, it can also +be done over only a few characters of this name (provided, of course, +that the unquoted portions are not also a macro). It is also possible +to quote the empty string, but this works only @emph{inside} the name. +For example: + +@example +`divert' +@result{}divert +`d'ivert +@result{}divert +di`ver't +@result{}divert +div`'ert +@result{}divert +@end example + +@noindent +all yield the string @samp{divert}. While in both: + +@example +`'divert +@result{} +divert`' +@result{} +@end example + +@noindent +the @code{divert} builtin macro will be called, which expands to the +empty string. + +@cindex rescanning +The output of macro evaluations is always rescanned. In the following +example, the input @samp{x`'y} yields the string @samp{bCD}, exactly as +if @code{m4} +has been given @w{@samp{substr(ab`'cde, `1', `3')}} as input: + +@example +define(`cde', `CDE') +@result{} +define(`x', `substr(ab') +@result{} +define(`y', `cde, `1', `3')') +@result{} +x`'y +@result{}bCD +@end example + +@ignore +@comment Similar, but with argument references, to ensure good test +@comment coverage. +@example +define(`x1', `len(`$1'') +@result{} +define(`y1', ``$1')') +@result{} +x1(`01234567890123456789')y1(`98765432109876543210') +@result{}40 +@end example +@end ignore + +Unquoted strings on either side of a quoted string are subject to +being recognized as macro names. In the following example, quoting the +empty string allows for the second @code{macro} to be recognized as such: + +@example +define(`macro', `m') +@result{} +macro(`m')macro +@result{}mmacro +macro(`m')`'macro +@result{}mm +@end example + +Quoting may prevent recognizing as a macro name the concatenation of a +macro expansion with the surrounding characters. In this example: + +@example +define(`macro', `di$1') +@result{} +macro(`v')`ert' +@result{}divert +macro(`v')ert +@result{} +@end example + +@noindent +the input will produce the string @samp{divert}. When the quotes were +removed, the @code{divert} builtin was called instead. + +@node Macro Arguments +@section Macro arguments + +@cindex macros, arguments to +@cindex arguments to macros +When a name is seen, and it has a macro definition, it will be expanded +as a macro. + +If the name is followed by an opening parenthesis, the arguments will be +collected before the macro is called. If too few arguments are +supplied, the missing arguments are taken to be the empty string. +However, some builtins are documented to behave differently for a +missing optional argument than for an explicit empty string. If there +are too many arguments, the excess arguments are ignored. Unquoted +leading whitespace is stripped off all arguments, but whitespace +generated by a macro expansion or occurring after a macro that expanded +to an empty string remains intact. Whitespace includes space, tab, +newline, carriage return, vertical tab, and formfeed. + +@example +define(`macro', `$1') +@result{} +macro( unquoted leading space lost) +@result{}unquoted leading space lost +macro(` quoted leading space kept') +@result{} quoted leading space kept +macro( + divert `unquoted space kept after expansion') +@result{} unquoted space kept after expansion +macro(macro(` +')`whitespace from expansion kept') +@result{} +@result{}whitespace from expansion kept +macro(`unquoted trailing whitespace kept' +) +@result{}unquoted trailing whitespace kept +@result{} +@end example + +@cindex warnings, suppressing +@cindex suppressing warnings +Normally @code{m4} will issue warnings if a builtin macro is called +with an inappropriate number of arguments, but it can be suppressed with +the @option{--quiet} command line option (or @option{--silent}, or +@option{-Q}, @pxref{Operation modes, , Invoking m4}). For user +defined macros, there is no check of the number of arguments given. + +@example +$ @kbd{m4} +index(`abc') +@error{}m4:stdin:1: Warning: too few arguments to builtin `index' +@result{}0 +index(`abc',) +@result{}0 +index(`abc', `b', `ignored') +@error{}m4:stdin:3: Warning: excess arguments to builtin `index' ignored +@result{}1 +@end example + +@comment options: -Q +@example +$ @kbd{m4 -Q} +index(`abc') +@result{}0 +index(`abc',) +@result{}0 +index(`abc', `b', `ignored') +@result{}1 +@end example + +Macros are expanded normally during argument collection, and whatever +commas, quotes and parentheses that might show up in the resulting +expanded text will serve to define the arguments as well. Thus, if +@var{foo} expands to @samp{, b, c}, the macro call + +@comment ignore +@example +bar(a foo, d) +@end example + +@noindent +is a macro call with four arguments, which are @samp{a }, @samp{b}, +@samp{c} and @samp{d}. To understand why the first argument contains +whitespace, remember that unquoted leading whitespace is never part +of an argument, but trailing whitespace always is. + +It is possible for a macro's definition to change during argument +collection, in which case the expansion uses the definition that was in +effect at the time the opening @samp{(} was seen. + +@example +define(`f', `1') +@result{} +f(define(`f', `2')) +@result{}1 +f +@result{}2 +@end example + +It is an error if the end of file occurs while collecting arguments. + +@comment status: 1 +@example +hello world +@result{}hello world +define( +^D +@error{}m4:stdin:2: ERROR: end of file in argument list +@end example + +@node Quoting Arguments +@section On Quoting Arguments to macros + +@cindex quoted macro arguments +@cindex macros, quoted arguments to +@cindex arguments, quoted macro +Each argument has unquoted leading whitespace removed. Within each +argument, all unquoted parentheses must match. For example, if +@var{foo} is a macro, + +@comment ignore +@example +foo(() (`(') `(') +@end example + +@noindent +is a macro call, with one argument, whose value is @samp{() (() (}. +Commas separate arguments, except when they occur inside quotes, +comments, or unquoted parentheses. @xref{Pseudo Arguments}, for +examples. + +It is common practice to quote all arguments to macros, unless you are +sure you want the arguments expanded. Thus, in the above +example with the parentheses, the `right' way to do it is like this: + +@comment ignore +@example +foo(`() (() (') +@end example + +@cindex quoting rule of thumb +@cindex rule of thumb, quoting +It is, however, in certain cases necessary (because nested expansion +must occur to create the arguments for the outer macro) or convenient +(because it uses fewer characters) to leave out quotes for some +arguments, and there is nothing wrong in doing it. It just makes life a +bit harder, if you are not careful to follow a consistent quoting style. +For consistency, this manual follows the rule of thumb that each layer +of parentheses introduces another layer of single quoting, except when +showing the consequences of quoting rules. This is done even when the +quoted string cannot be a macro, such as with integers when you have not +changed the syntax via @code{changeword} (@pxref{Changeword}). + +The quoting rule of thumb of one level of quoting per parentheses has a +nice property: when a macro name appears inside parentheses, you can +determine when it will be expanded. If it is not quoted, it will be +expanded prior to the outer macro, so that its expansion becomes the +argument. If it is single-quoted, it will be expanded after the outer +macro. And if it is double-quoted, it will be used as literal text +instead of a macro name. + +@example +define(`active', `ACT, IVE') +@result{} +define(`show', `$1 $1') +@result{} +show(active) +@result{}ACT ACT +show(`active') +@result{}ACT, IVE ACT, IVE +show(``active'') +@result{}active active +@end example + +@node Macro expansion +@section Macro expansion + +@cindex macros, expansion of +@cindex expansion of macros +When the arguments, if any, to a macro call have been collected, the +macro is expanded, and the expansion text is pushed back onto the input +(unquoted), and reread. The expansion text from one macro call might +therefore result in more macros being called, if the calls are included, +completely or partially, in the first macro calls' expansion. + +Taking a very simple example, if @var{foo} expands to @samp{bar}, and +@var{bar} expands to @samp{Hello}, the input + +@comment options: -Dbar=Hello -Dfoo=bar +@example +$ @kbd{m4 -Dbar=Hello -Dfoo=bar} +foo +@result{}Hello +@end example + +@noindent +will expand first to @samp{bar}, and when this is reread and +expanded, into @samp{Hello}. + +@ignore +@comment not worth documenting, but test that the command line can +@comment define macros that take parameters + +@comment options: -Dfoo -Decho=$@ +@example +$ @kbd{m4 -Dfoo -Decho='$@'} +foo +@result{} +foo(`silently ignored') +@result{} +echo(`1', `2') +@result{}1,2 +@end example +@end ignore + +@node Definitions +@chapter How to define new macros + +@cindex macros, how to define new +@cindex defining new macros +Macros can be defined, redefined and deleted in several different ways. +Also, it is possible to redefine a macro without losing a previous +value, and bring back the original value at a later time. + +@menu +* Define:: Defining a new macro +* Arguments:: Arguments to macros +* Pseudo Arguments:: Special arguments to macros +* Undefine:: Deleting a macro +* Defn:: Renaming macros +* Pushdef:: Temporarily redefining macros + +* Indir:: Indirect call of macros +* Builtin:: Indirect call of builtins +@end menu + +@node Define +@section Defining a macro + +The normal way to define or redefine macros is to use the builtin +@code{define}: + +@deffn Builtin define (@var{name}, @ovar{expansion}) +Defines @var{name} to expand to @var{expansion}. If +@var{expansion} is not given, it is taken to be empty. + +The expansion of @code{define} is void. +The macro @code{define} is recognized only with parameters. +@end deffn + +The following example defines the macro @var{foo} to expand to the text +@samp{Hello World.}. + +@example +define(`foo', `Hello world.') +@result{} +foo +@result{}Hello world. +@end example + +The empty line in the output is there because the newline is not +a part of the macro definition, and it is consequently copied to +the output. This can be avoided by use of the macro @code{dnl}. +@xref{Dnl}, for details. + +The first argument to @code{define} should be quoted; otherwise, if the +macro is already defined, you will be defining a different macro. This +example shows the problems with underquoting, since we did not want to +redefine @code{one}: + +@example +define(foo, one) +@result{} +define(foo, two) +@result{} +one +@result{}two +@end example + +@cindex @acronym{GNU} extensions +@acronym{GNU} @code{m4} normally replaces only the @emph{topmost} +definition of a macro if it has several definitions from @code{pushdef} +(@pxref{Pushdef}). Some other implementations of @code{m4} replace all +definitions of a macro with @code{define}. @xref{Incompatibilities}, +for more details. + +As a @acronym{GNU} extension, the first argument to @code{define} does +not have to be a simple word. +It can be any text string, even the empty string. A macro with a +non-standard name cannot be invoked in the normal way, as the name is +not recognized. It can only be referenced by the builtins @code{indir} +(@pxref{Indir}) and @code{defn} (@pxref{Defn}). + +@cindex arrays +Arrays and associative arrays can be simulated by using non-standard +macro names. + +@deffn Composite array (@var{index}) +@deffnx Composite array_set (@var{index}, @ovar{value}) +Provide access to entries within an array. @code{array} reads the entry +at location @var{index}, and @code{array_set} assigns @var{value} to +location @var{index}. +@end deffn + +@example +define(`array', `defn(format(``array[%d]'', `$1'))') +@result{} +define(`array_set', `define(format(``array[%d]'', `$1'), `$2')') +@result{} +array_set(`4', `array element no. 4') +@result{} +array_set(`17', `array element no. 17') +@result{} +array(`4') +@result{}array element no. 4 +array(eval(`10 + 7')) +@result{}array element no. 17 +@end example + +Change the @samp{%d} to @samp{%s} and it is an associative array. + +@node Arguments +@section Arguments to macros + +@cindex macros, arguments to +@cindex arguments to macros +Macros can have arguments. The @var{n}th argument is denoted by +@code{$n} in the expansion text, and is replaced by the @var{n}th actual +argument, when the macro is expanded. Replacement of arguments happens +before rescanning, regardless of how many nesting levels of quoting +appear in the expansion. Here is an example of a macro with +two arguments. + +@deffn Composite exch (@var{arg1}, @var{arg2}) +Expands to @var{arg2} followed by @var{arg1}, effectively exchanging +their order. +@end deffn + +@example +define(`exch', `$2, $1') +@result{} +exch(`arg1', `arg2') +@result{}arg2, arg1 +@end example + +This can be used, for example, if you like the arguments to +@code{define} to be reversed. + +@example +define(`exch', `$2, $1') +@result{} +define(exch(``expansion text'', ``macro'')) +@result{} +macro +@result{}expansion text +@end example + +@xref{Quoting Arguments}, for an explanation of the double quotes. +(You should try and improve this example so that clients of @code{exch} +do not have to double quote; or @pxref{Improved exch, , Answers}). + +As a special case, the zeroth argument, @code{$0}, is always the name +of the macro being expanded. + +@example +define(`test', ``Macro name: $0'') +@result{} +test +@result{}Macro name: test +@end example + +If you want quoted text to appear as part of the expansion text, +remember that quotes can be nested in quoted strings. Thus, in + +@example +define(`foo', `This is macro `foo'.') +@result{} +foo +@result{}This is macro foo. +@end example + +@noindent +The @samp{foo} in the expansion text is @emph{not} expanded, since it is +a quoted string, and not a name. + +@cindex @acronym{GNU} extensions +@cindex nine arguments, more than +@cindex more than nine arguments +@cindex arguments, more than nine +@cindex positional parameters, more than nine +@acronym{GNU} @code{m4} allows the number following the @samp{$} to +consist of one or more digits, allowing macros to have any number of +arguments. The extension of accepting multiple digits is incompatible +with @acronym{POSIX}, and is different than traditional implementations +of @code{m4}, which only recognize one digit. Therefore, future +versions of @acronym{GNU} M4 will phase out this feature. To portably +access beyond the ninth argument, you can use the @code{argn} macro +documented later (@pxref{Shift}). + +@acronym{POSIX} also states that @samp{$} followed immediately by +@samp{@{} in a macro definition is implementation-defined. This version +of M4 passes the literal characters @samp{$@{} through unchanged, but M4 +2.0 will implement an optional feature similar to @command{sh}, where +@samp{$@{11@}} expands to the eleventh argument, to replace the current +recognition of @samp{$11}. Meanwhile, if you want to guarantee that you +will get a literal @samp{$@{} in output when expanding a macro, even +when you upgrade to M4 2.0, you can use nested quoting to your +advantage: + +@example +define(`foo', `single quoted $`'@{1@} output') +@result{} +define(`bar', ``double quoted $'`@{2@} output'') +@result{} +foo(`a', `b') +@result{}single quoted $@{1@} output +bar(`a', `b') +@result{}double quoted $@{2@} output +@end example + +To help you detect places in your M4 input files that might change in +behavior due to the changed behavior of M4 2.0, you can use the +@option{--warn-macro-sequence} command-line option (@pxref{Operation +modes, , Invoking m4}) with the default regular expression. This will +add a warning any time a macro definition includes @samp{$} followed by +multiple digits, or by @samp{@{}. The warning is not enabled by +default, because it triggers a number of warnings in Autoconf 2.61 (and +Autoconf uses @option{-E} to treat warnings as errors), and because it +will still be possible to restore older behavior in M4 2.0. + +@comment options: --warn-macro-sequence +@example +$ @kbd{m4 --warn-macro-sequence} +define(`foo', `$001 $@{1@} $1') +@error{}m4:stdin:1: Warning: definition of `foo' contains sequence `$001' +@error{}m4:stdin:1: Warning: definition of `foo' contains sequence `$@{1@}' +@result{} +foo(`bar') +@result{}bar $@{1@} bar +@end example + +@node Pseudo Arguments +@section Special arguments to macros + +@cindex special arguments to macros +@cindex macros, special arguments to +@cindex arguments to macros, special +There is a special notation for the number of actual arguments supplied, +and for all the actual arguments. + +The number of actual arguments in a macro call is denoted by @code{$#} +in the expansion text. + +@deffn Composite nargs (@dots{}) +Expands to a count of the number of arguments supplied. +@end deffn + +@example +define(`nargs', `$#') +@result{} +nargs +@result{}0 +nargs() +@result{}1 +nargs(`arg1', `arg2', `arg3') +@result{}3 +nargs(`commas can be quoted, like this') +@result{}1 +nargs(arg1#inside comments, commas do not separate arguments +still arg1) +@result{}1 +nargs((unquoted parentheses, like this, group arguments)) +@result{}1 +@end example + +Remember that @samp{#} defaults to the comment character; if you forget +quotes to inhibit the comment behavior, your macro definition may not +end where you expected. + +@example +dnl Attempt to define a macro to just `$#' +define(underquoted, $#) +oops) +@result{} +underquoted +@result{}0) +@result{}oops +@end example + +The notation @code{$*} can be used in the expansion text to denote all +the actual arguments, unquoted, with commas in between. For example + +@example +define(`echo', `$*') +@result{} +echo(arg1, arg2, arg3 , arg4) +@result{}arg1,arg2,arg3 ,arg4 +@end example + +Often each argument should be quoted, and the notation @code{$@@} handles +that. It is just like @code{$*}, except that it quotes each argument. +A simple example of that is: + +@example +define(`echo', `$@@') +@result{} +echo(arg1, arg2, arg3 , arg4) +@result{}arg1,arg2,arg3 ,arg4 +@end example + +Where did the quotes go? Of course, they were eaten, when the expanded +text were reread by @code{m4}. To show the difference, try + +@example +define(`echo1', `$*') +@result{} +define(`echo2', `$@@') +@result{} +define(`foo', `This is macro `foo'.') +@result{} +echo1(foo) +@result{}This is macro This is macro foo.. +echo1(`foo') +@result{}This is macro foo. +echo2(foo) +@result{}This is macro foo. +echo2(`foo') +@result{}foo +@end example + +@noindent +@xref{Trace}, if you do not understand this. As another example of the +difference, remember that comments encountered in arguments are passed +untouched to the macro, and that quoting disables comments. + +@example +define(`echo1', `$*') +@result{} +define(`echo2', `$@@') +@result{} +define(`foo', `bar') +@result{} +echo1(#foo'foo +foo) +@result{}#foo'foo +@result{}bar +echo2(#foo'foo +foo) +@result{}#foobar +@result{}bar' +@end example + +@ignore +@comment Not worth putting in the manual, but this example is needed for +@comment good test coverage of copying large strings across recursion +@comment levels. + +@example +define(`echo', `$@@')dnl +echo(echo(`01234567890123456789', `01234567890123456789') +echo(`98765432109876543210', `98765432109876543210')) +@result{}01234567890123456789,01234567890123456789 +@result{}98765432109876543210,98765432109876543210 +len((echo(`01234567890123456789', + `01234567890123456789')echo(`98765432109876543210', + `98765432109876543210'))) +@result{}84 +indir(`echo', indir(`echo', `01234567890123456789', + `01234567890123456789') +indir(`echo', `98765432109876543210', `98765432109876543210')) +@result{}01234567890123456789,01234567890123456789 +@result{}98765432109876543210,98765432109876543210 +define(`argn', `$#')dnl +define(`echo1', `-$@@-')define(`echo2', `,$@@,')dnl +echo1(`1', `2', `3') argn(echo1(`1', `2', `3')) +@result{}-1,2,3- 3 +echo2(`1', `2', `3') argn(echo2(`1', `2', `3')) +@result{},1,2,3, 5 +@end example +@end ignore + +A @samp{$} sign in the expansion text, that is not followed by anything +@code{m4} understands, is simply copied to the macro expansion, as any +other text is. + +@example +define(`foo', `$$$ hello $$$') +@result{} +foo +@result{}$$$ hello $$$ +@end example + +@cindex rescanning +@cindex literal output +@cindex output, literal +If you want a macro to expand to something like @samp{$12}, the +judicious use of nested quoting can put a safe character between the +@code{$} and the next character, relying on the rescanning to remove the +nested quote. This will prevent @code{m4} from interpreting the +@code{$} sign as a reference to an argument. + +@example +define(`foo', `no nested quote: $1') +@result{} +foo(`arg') +@result{}no nested quote: arg +define(`foo', `nested quote around $: `$'1') +@result{} +foo(`arg') +@result{}nested quote around $: $1 +define(`foo', `nested empty quote after $: $`'1') +@result{} +foo(`arg') +@result{}nested empty quote after $: $1 +define(`foo', `nested quote around next character: $`1'') +@result{} +foo(`arg') +@result{}nested quote around next character: $1 +define(`foo', `nested quote around both: `$1'') +@result{} +foo(`arg') +@result{}nested quote around both: arg +@end example + +@node Undefine +@section Deleting a macro + +@cindex macros, how to delete +@cindex deleting macros +@cindex undefining macros +A macro definition can be removed with @code{undefine}: + +@deffn Builtin undefine (@var{name}@dots{}) +For each argument, remove the macro @var{name}. The macro names must +necessarily be quoted, since they will be expanded otherwise. + +The expansion of @code{undefine} is void. +The macro @code{undefine} is recognized only with parameters. +@end deffn + +@example +foo bar blah +@result{}foo bar blah +define(`foo', `some')define(`bar', `other')define(`blah', `text') +@result{} +foo bar blah +@result{}some other text +undefine(`foo') +@result{} +foo bar blah +@result{}foo other text +undefine(`bar', `blah') +@result{} +foo bar blah +@result{}foo bar blah +@end example + +Undefining a macro inside that macro's expansion is safe; the macro +still expands to the definition that was in effect at the @samp{(}. + +@example +define(`f', ``$0':$1') +@result{} +f(f(f(undefine(`f')`hello world'))) +@result{}f:f:f:hello world +f(`bye') +@result{}f(bye) +@end example + +It is not an error for @var{name} to have no macro definition. In that +case, @code{undefine} does nothing. + +@node Defn +@section Renaming macros + +@cindex macros, how to rename +@cindex renaming macros +@cindex macros, displaying definitions +@cindex definitions, displaying macro +It is possible to rename an already defined macro. To do this, you need +the builtin @code{defn}: + +@deffn Builtin defn (@var{name}@dots{}) +Expands to the @emph{quoted definition} of each @var{name}. If an +argument is not a defined macro, the expansion for that argument is +empty. + +If @var{name} is a user-defined macro, the quoted definition is simply +the quoted expansion text. If, instead, there is only one @var{name} +and it is a builtin, the +expansion is a special token, which points to the builtin's internal +definition. This token is only meaningful as the second argument to +@code{define} (and @code{pushdef}), and is silently converted to an +empty string in most other contexts. Combining a builtin with anything +else is not supported; a warning is issued and the builtin is omitted +from the final expansion. + +The macro @code{defn} is recognized only with parameters. +@end deffn + +Its normal use is best understood through an example, which shows how to +rename @code{undefine} to @code{zap}: + +@example +define(`zap', defn(`undefine')) +@result{} +zap(`undefine') +@result{} +undefine(`zap') +@result{}undefine(zap) +@end example + +In this way, @code{defn} can be used to copy macro definitions, and also +definitions of builtin macros. Even if the original macro is removed, +the other name can still be used to access the definition. + +The fact that macro definitions can be transferred also explains why you +should use @code{$0}, rather than retyping a macro's name in its +definition: + +@example +define(`foo', `This is `$0'') +@result{} +define(`bar', defn(`foo')) +@result{} +bar +@result{}This is bar +@end example + +Macros used as string variables should be referred through @code{defn}, +to avoid unwanted expansion of the text: + +@example +define(`string', `The macro dnl is very useful +') +@result{} +string +@result{}The macro@w{ } +defn(`string') +@result{}The macro dnl is very useful +@result{} +@end example + +@cindex rescanning +However, it is important to remember that @code{m4} rescanning is purely +textual. If an unbalanced end-quote string occurs in a macro +definition, the rescan will see that embedded quote as the termination +of the quoted string, and the remainder of the macro's definition will +be rescanned unquoted. Thus it is a good idea to avoid unbalanced +end-quotes in macro definitions or arguments to macros. + +@example +define(`foo', a'a) +@result{} +define(`a', `A') +@result{} +define(`echo', `$@@') +@result{} +foo +@result{}A'A +defn(`foo') +@result{}aA' +echo(foo) +@result{}AA' +@end example + +On the other hand, it is possible to exploit the fact that @code{defn} +can concatenate multiple macros prior to the rescanning phase, in order +to join the definitions of macros that, in isolation, have unbalanced +quotes. This is particularly useful when one has used several macros to +accumulate text that M4 should rescan as a whole. In the example below, +note how the use of @code{defn} on @code{l} in isolation opens a string, +which is not closed until the next line; but used on @code{l} and +@code{r} together results in nested quoting. + +@example +define(`l', `<[>')define(`r', `<]>') +@result{} +changequote(`[', `]') +@result{} +defn([l])defn([r]) +]) +@result{}<[>]defn([r]) +@result{}) +defn([l], [r]) +@result{}<[>][<]> +@end example + +@cindex builtins, special tokens +@cindex tokens, builtin macro +Using @code{defn} to generate special tokens for builtin macros outside +of expected contexts can sometimes trigger warnings. But most of the +time, such tokens are silently converted to the empty string. + +@example +$ @kbd{m4 -d} +defn(`defn') +@result{} +define(defn(`divnum'), `cannot redefine a builtin token') +@error{}m4:stdin:2: Warning: define: invalid macro name ignored +@result{} +divnum +@result{}0 +len(defn(`divnum')) +@result{}0 +@end example + +Also note that @code{defn} with multiple arguments can only join text +macros, not builtins, although a future version of @acronym{GNU} M4 may +lift this restriction. + +@example +$ @kbd{m4 -d} +define(`a', `A')define(`AA', `b') +@result{} +traceon(`defn', `define') +@result{} +defn(`a', `divnum', `a') +@error{}m4:stdin:3: Warning: cannot concatenate builtin `divnum' +@error{}m4trace: -1- defn(`a', `divnum', `a') -> ``A'`A'' +@result{}AA +define(`mydivnum', defn(`divnum', `divnum'))mydivnum +@error{}m4:stdin:4: Warning: cannot concatenate builtin `divnum' +@error{}m4:stdin:4: Warning: cannot concatenate builtin `divnum' +@error{}m4trace: -2- defn(`divnum', `divnum') +@error{}m4trace: -1- define(`mydivnum', `') +@result{} +traceoff(`defn', `define') +@result{} +@end example + +@node Pushdef +@section Temporarily redefining macros + +@cindex macros, temporary redefinition of +@cindex temporary redefinition of macros +@cindex redefinition of macros, temporary +@cindex definition stack +@cindex pushdef stack +@cindex stack, macro definition +It is possible to redefine a macro temporarily, reverting to the +previous definition at a later time. This is done with the builtins +@code{pushdef} and @code{popdef}: + +@deffn Builtin pushdef (@var{name}, @ovar{expansion}) +@deffnx Builtin popdef (@var{name}@dots{}) +Analogous to @code{define} and @code{undefine}. + +These macros work in a stack-like fashion. A macro is temporarily +redefined with @code{pushdef}, which replaces an existing definition of +@var{name}, while saving the previous definition, before the new one is +installed. If there is no previous definition, @code{pushdef} behaves +exactly like @code{define}. + +If a macro has several definitions (of which only one is accessible), +the topmost definition can be removed with @code{popdef}. If there is +no previous definition, @code{popdef} behaves like @code{undefine}. + +The expansion of both @code{pushdef} and @code{popdef} is void. +The macros @code{pushdef} and @code{popdef} are recognized only with +parameters. +@end deffn + +@example +define(`foo', `Expansion one.') +@result{} +foo +@result{}Expansion one. +pushdef(`foo', `Expansion two.') +@result{} +foo +@result{}Expansion two. +pushdef(`foo', `Expansion three.') +@result{} +pushdef(`foo', `Expansion four.') +@result{} +popdef(`foo') +@result{} +foo +@result{}Expansion three. +popdef(`foo', `foo') +@result{} +foo +@result{}Expansion one. +popdef(`foo') +@result{} +foo +@result{}foo +@end example + +If a macro with several definitions is redefined with @code{define}, the +topmost definition is @emph{replaced} with the new definition. If it is +removed with @code{undefine}, @emph{all} the definitions are removed, +and not only the topmost one. However, @acronym{POSIX} allows other +implementations that treat @code{define} as replacing an entire stack +of definitions with a single new definition, so to be portable to other +implementations, it may be worth explicitly using @code{popdef} and +@code{pushdef} rather than relying on the @acronym{GNU} behavior of +@code{define}. + +@example +define(`foo', `Expansion one.') +@result{} +foo +@result{}Expansion one. +pushdef(`foo', `Expansion two.') +@result{} +foo +@result{}Expansion two. +define(`foo', `Second expansion two.') +@result{} +foo +@result{}Second expansion two. +undefine(`foo') +@result{} +foo +@result{}foo +@end example + +@cindex local variables +@cindex variables, local +Local variables within macros are made with @code{pushdef} and +@code{popdef}. At the start of the macro a new definition is pushed, +within the macro it is manipulated and at the end it is popped, +revealing the former definition. + +It is possible to temporarily redefine a builtin with @code{pushdef} +and @code{defn}. + +@node Indir +@section Indirect call of macros + +@cindex indirect call of macros +@cindex call of macros, indirect +@cindex macros, indirect call of +@cindex @acronym{GNU} extensions +Any macro can be called indirectly with @code{indir}: + +@deffn Builtin indir (@var{name}, @ovar{args@dots{}}) +Results in a call to the macro @var{name}, which is passed the +rest of the arguments @var{args}. If @var{name} is not defined, an +error message is printed, and the expansion is void. + +The macro @code{indir} is recognized only with parameters. +@end deffn + +This can be used to call macros with computed or ``invalid'' +names (@code{define} allows such names to be defined): + +@example +define(`$$internal$macro', `Internal macro (name `$0')') +@result{} +$$internal$macro +@result{}$$internal$macro +indir(`$$internal$macro') +@result{}Internal macro (name $$internal$macro) +@end example + +The point is, here, that larger macro packages can have private macros +defined, that will not be called by accident. They can @emph{only} be +called through the builtin @code{indir}. + +One other point to observe is that argument collection occurs before +@code{indir} invokes @var{name}, so if argument collection changes the +value of @var{name}, that will be reflected in the final expansion. +This is different than the behavior when invoking macros directly, +where the definition that was in effect before argument collection is +used. + +@example +$ @kbd{m4 -d} +define(`f', `1') +@result{} +f(define(`f', `2')) +@result{}1 +indir(`f', define(`f', `3')) +@result{}3 +indir(`f', undefine(`f')) +@error{}m4:stdin:4: undefined macro `f' +@result{} +@end example + +When handed the result of @code{defn} (@pxref{Defn}) as one of its +arguments, @code{indir} defers to the invoked @var{name} for whether a +token representing a builtin is recognized or flattened to the empty +string. + +@example +$ @kbd{m4 -d} +indir(defn(`defn'), `divnum') +@error{}m4:stdin:1: Warning: indir: invalid macro name ignored +@result{} +indir(`define', defn(`defn'), `divnum') +@error{}m4:stdin:2: Warning: define: invalid macro name ignored +@result{} +indir(`define', `foo', defn(`divnum')) +@result{} +foo +@result{}0 +indir(`divert', defn(`foo')) +@error{}m4:stdin:5: empty string treated as 0 in builtin `divert' +@result{} +@end example + +@node Builtin +@section Indirect call of builtins + +@cindex indirect call of builtins +@cindex call of builtins, indirect +@cindex builtins, indirect call of +@cindex @acronym{GNU} extensions +Builtin macros can be called indirectly with @code{builtin}: + +@deffn Builtin builtin (@var{name}, @ovar{args@dots{}}) +Results in a call to the builtin @var{name}, which is passed the +rest of the arguments @var{args}. If @var{name} does not name a +builtin, an error message is printed, and the expansion is void. + +The macro @code{builtin} is recognized only with parameters. +@end deffn + +This can be used even if @var{name} has been given another definition +that has covered the original, or been undefined so that no macro +maps to the builtin. + +@example +pushdef(`define', `hidden') +@result{} +undefine(`undefine') +@result{} +define(`foo', `bar') +@result{}hidden +foo +@result{}foo +builtin(`define', `foo', defn(`divnum')) +@result{} +foo +@result{}0 +builtin(`define', `foo', `BAR') +@result{} +foo +@result{}BAR +undefine(`foo') +@result{}undefine(foo) +foo +@result{}BAR +builtin(`undefine', `foo') +@result{} +foo +@result{}foo +@end example + +The @var{name} argument only matches the original name of the builtin, +even when the @option{--prefix-builtins} option (or @option{-P}, +@pxref{Operation modes, , Invoking m4}) is in effect. This is different +from @code{indir}, which only tracks current macro names. + +@comment options: -P +@example +$ @kbd{m4 -P} +m4_builtin(`divnum') +@result{}0 +m4_builtin(`m4_divnum') +@error{}m4:stdin:2: undefined builtin `m4_divnum' +@result{} +m4_indir(`divnum') +@error{}m4:stdin:3: undefined macro `divnum' +@result{} +m4_indir(`m4_divnum') +@result{}0 +@end example + +Note that @code{indir} and @code{builtin} can be used to invoke builtins +without arguments, even when they normally require parameters to be +recognized; but it will provoke a warning, and result in a void expansion. + +@example +builtin +@result{}builtin +builtin() +@error{}m4:stdin:2: undefined builtin `' +@result{} +builtin(`builtin') +@error{}m4:stdin:3: Warning: too few arguments to builtin `builtin' +@result{} +builtin(`builtin',) +@error{}m4:stdin:4: undefined builtin `' +@result{} +builtin(`builtin', ``' +') +@error{}m4:stdin:5: undefined builtin ``' +@error{}' +@result{} +indir(`index') +@error{}m4:stdin:7: Warning: too few arguments to builtin `index' +@result{} +@end example + +@ignore +@comment This example is not worth putting in the manual, but it is +@comment needed for full coverage. Autoconf's m4_include relies heavily +@comment on this feature. + +@example +builtin(`include', `foo')dnl +@result{}bar +@end example + +@comment And this example triggers a regression present in 1.4.10b. + +@example +define(`s', `builtin(`shift', $@@)')dnl +define(`loop', `ifelse(`$2', `', `-', `$1$2: $0(`$1', s(s($@@)))')')dnl +loop(`1') +@result{}- +loop(`1', `2') +@result{}12: - +loop(`1', `2', `3') +@result{}12: 13: - +loop(`1', `2', `3', `4') +@result{}12: 13: 14: - +loop(`1', `2', `3', `4', `5') +@result{}12: 13: 14: 15: - +@end example +@end ignore + +@node Conditionals +@chapter Conditionals, loops, and recursion + +Macros, expanding to plain text, perhaps with arguments, are not quite +enough. We would like to have macros expand to different things, based +on decisions taken at run-time. For that, we need some kind of conditionals. +Also, we would like to have some kind of loop construct, so we could do +something a number of times, or while some condition is true. + +@menu +* Ifdef:: Testing if a macro is defined +* Ifelse:: If-else construct, or multibranch +* Shift:: Recursion in @code{m4} +* Forloop:: Iteration by counting +* Foreach:: Iteration by list contents +* Stacks:: Working with definition stacks +* Composition:: Building macros with macros +@end menu + +@node Ifdef +@section Testing if a macro is defined + +@cindex conditionals +There are two different builtin conditionals in @code{m4}. The first is +@code{ifdef}: + +@deffn Builtin ifdef (@var{name}, @var{string-1}, @ovar{string-2}) +If @var{name} is defined as a macro, @code{ifdef} expands to +@var{string-1}, otherwise to @var{string-2}. If @var{string-2} is +omitted, it is taken to be the empty string (according to the normal +rules). + +The macro @code{ifdef} is recognized only with parameters. +@end deffn + +@example +ifdef(`foo', ``foo' is defined', ``foo' is not defined') +@result{}foo is not defined +define(`foo', `') +@result{} +ifdef(`foo', ``foo' is defined', ``foo' is not defined') +@result{}foo is defined +ifdef(`no_such_macro', `yes', `no', `extra argument') +@error{}m4:stdin:4: Warning: excess arguments to builtin `ifdef' ignored +@result{}no +@end example + +@node Ifelse +@section If-else construct, or multibranch + +@cindex comparing strings +@cindex discarding input +@cindex input, discarding +The other conditional, @code{ifelse}, is much more powerful. It can be +used as a way to introduce a long comment, as an if-else construct, or +as a multibranch, depending on the number of arguments supplied: + +@deffn Builtin ifelse (@var{comment}) +@deffnx Builtin ifelse (@var{string-1}, @var{string-2}, @var{equal}, @ + @ovar{not-equal}) +@deffnx Builtin ifelse (@var{string-1}, @var{string-2}, @var{equal-1}, @ + @var{string-3}, @var{string-4}, @var{equal-2}, @dots{}, @ovar{not-equal}) +Used with only one argument, the @code{ifelse} simply discards it and +produces no output. + +If called with three or four arguments, @code{ifelse} expands into +@var{equal}, if @var{string-1} and @var{string-2} are equal (character +for character), otherwise it expands to @var{not-equal}. A final fifth +argument is ignored, after triggering a warning. + +If called with six or more arguments, and @var{string-1} and +@var{string-2} are equal, @code{ifelse} expands into @var{equal-1}, +otherwise the first three arguments are discarded and the processing +starts again. + +The macro @code{ifelse} is recognized only with parameters. +@end deffn + +Using only one argument is a common @code{m4} idiom for introducing a +block comment, as an alternative to repeatedly using @code{dnl}. This +special usage is recognized by @acronym{GNU} @code{m4}, so that in this +case, the warning about missing arguments is never triggered. + +@example +ifelse(`some comments') +@result{} +ifelse(`foo', `bar') +@error{}m4:stdin:2: Warning: too few arguments to builtin `ifelse' +@result{} +@end example + +Using three or four arguments provides decision points. + +@example +ifelse(`foo', `bar', `true') +@result{} +ifelse(`foo', `foo', `true') +@result{}true +define(`foo', `bar') +@result{} +ifelse(foo, `bar', `true', `false') +@result{}true +ifelse(foo, `foo', `true', `false') +@result{}false +@end example + +@cindex macro, blind +@cindex blind macro +Notice how the first argument was used unquoted; it is common to compare +the expansion of a macro with a string. With this macro, you can now +reproduce the behavior of blind builtins, where the macro is recognized +only with arguments. + +@example +define(`foo', `ifelse(`$#', `0', ``$0'', `arguments:$#')') +@result{} +foo +@result{}foo +foo() +@result{}arguments:1 +foo(`a', `b', `c') +@result{}arguments:3 +@end example + +For an example of a way to make defining blind macros easier, see +@ref{Composition}. + +@cindex multibranches +@cindex switch statement +@cindex case statement +The macro @code{ifelse} can take more than four arguments. If given more +than four arguments, @code{ifelse} works like a @code{case} or @code{switch} +statement in traditional programming languages. If @var{string-1} and +@var{string-2} are equal, @code{ifelse} expands into @var{equal-1}, otherwise +the procedure is repeated with the first three arguments discarded. This +calls for an example: + +@example +ifelse(`foo', `bar', `third', `gnu', `gnats') +@error{}m4:stdin:1: Warning: excess arguments to builtin `ifelse' ignored +@result{}gnu +ifelse(`foo', `bar', `third', `gnu', `gnats', `sixth') +@result{} +ifelse(`foo', `bar', `third', `gnu', `gnats', `sixth', `seventh') +@result{}seventh +ifelse(`foo', `bar', `3', `gnu', `gnats', `6', `7', `8') +@error{}m4:stdin:4: Warning: excess arguments to builtin `ifelse' ignored +@result{}7 +@end example + +@ignore +@comment Stress tests, not worth documenting. + +@comment Ensure that references compared to strings work regardless of +@comment similar prefixes. +@example +define(`e', `$@@')define(`long', `01234567890123456789') +@result{} +ifelse(long, `01234567890123456789', `yes', `no') +@result{}yes +ifelse(`01234567890123456789', long, `yes', `no') +@result{}yes +ifelse(long, `01234567890123456789-', `yes', `no') +@result{}no +ifelse(`01234567890123456789-', long, `yes', `no') +@result{}no +ifelse(e(long), `01234567890123456789', `yes', `no') +@result{}yes +ifelse(`01234567890123456789', e(long), `yes', `no') +@result{}yes +ifelse(e(long), `01234567890123456789-', `yes', `no') +@result{}no +ifelse(`01234567890123456789-', e(long), `yes', `no') +@result{}no +ifelse(-e(long), `-01234567890123456789', `yes', `no') +@result{}yes +ifelse(-`01234567890123456789', -e(long), `yes', `no') +@result{}yes +ifelse(-e(long), `-01234567890123456789-', `yes', `no') +@result{}no +ifelse(`-01234567890123456789-', -e(long), `yes', `no') +@result{}no +ifelse(-e(long)-, `-01234567890123456789-', `yes', `no') +@result{}yes +ifelse(-`01234567890123456789-', -e(long)-, `yes', `no') +@result{}yes +ifelse(-e(long)-, `-01234567890123456789', `yes', `no') +@result{}no +ifelse(`-01234567890123456789', -e(long)-, `yes', `no') +@result{}no +ifelse(`-'e(long), `-01234567890123456789', `yes', `no') +@result{}yes +ifelse(-`01234567890123456789', `-'e(long), `yes', `no') +@result{}yes +ifelse(`-'e(long), `-01234567890123456789-', `yes', `no') +@result{}no +ifelse(`-01234567890123456789-', `-'e(long), `yes', `no') +@result{}no +ifelse(`-'e(long)`-', `-01234567890123456789-', `yes', `no') +@result{}yes +ifelse(-`01234567890123456789-', `-'e(long)`-', `yes', `no') +@result{}yes +ifelse(`-'e(long)`-', `-01234567890123456789', `yes', `no') +@result{}no +ifelse(`-01234567890123456789', `-'e(long)`-', `yes', `no') +@result{}no +@end example +@end ignore + +Naturally, the normal case will be slightly more advanced than these +examples. A common use of @code{ifelse} is in macros implementing loops +of various kinds. + +@node Shift +@section Recursion in @code{m4} + +@cindex recursive macros +@cindex macros, recursive +There is no direct support for loops in @code{m4}, but macros can be +recursive. There is no limit on the number of recursion levels, other +than those enforced by your hardware and operating system. + +@cindex loops +Loops can be programmed using recursion and the conditionals described +previously. + +There is a builtin macro, @code{shift}, which can, among other things, +be used for iterating through the actual arguments to a macro: + +@deffn Builtin shift (@var{arg1}, @dots{}) +Takes any number of arguments, and expands to all its arguments except +@var{arg1}, separated by commas, with each argument quoted. + +The macro @code{shift} is recognized only with parameters. +@end deffn + +@example +shift +@result{}shift +shift(`bar') +@result{} +shift(`foo', `bar', `baz') +@result{}bar,baz +@end example + +An example of the use of @code{shift} is this macro: + +@cindex reversing arguments +@cindex arguments, reversing +@deffn Composite reverse (@dots{}) +Takes any number of arguments, and reverses their order. +@end deffn + +It is implemented as: + +@example +define(`reverse', `ifelse(`$#', `0', , `$#', `1', ``$1'', + `reverse(shift($@@)), `$1'')') +@result{} +reverse +@result{} +reverse(`foo') +@result{}foo +reverse(`foo', `bar', `gnats', `and gnus') +@result{}and gnus, gnats, bar, foo +@end example + +While not a very interesting macro, it does show how simple loops can be +made with @code{shift}, @code{ifelse} and recursion. It also shows +that @code{shift} is usually used with @samp{$@@}. Another example of +this is an implementation of a short-circuiting conditional operator. + +@cindex short-circuiting conditional +@cindex conditional, short-circuiting +@deffn Composite cond (@var{test-1}, @var{string-1}, @var{equal-1}, @ + @ovar{test-2}, @ovar{string-2}, @ovar{equal-2}, @dots{}, @ovar{not-equal}) +Similar to @code{ifelse}, where an equal comparison between the first +two strings results in the third, otherwise the first three arguments +are discarded and the process repeats. The difference is that each +@var{test-} is expanded only when it is encountered. This means that +every third argument to @code{cond} is normally given one more level of +quoting than the corresponding argument to @code{ifelse}. +@end deffn + +Here is the implementation of @code{cond}, along with a demonstration of +how it can short-circuit the side effects in @code{side}. Notice how +all the unquoted side effects happen regardless of how many comparisons +are made with @code{ifelse}, compared with only the relevant effects +with @code{cond}. + +@example +define(`cond', +`ifelse(`$#', `1', `$1', + `ifelse($1, `$2', `$3', + `$0(shift(shift(shift($@@))))')')')dnl +define(`side', `define(`counter', incr(counter))$1')dnl +define(`example1', +`define(`counter', `0')dnl +ifelse(side(`$1'), `yes', `one comparison: ', + side(`$1'), `no', `two comparisons: ', + side(`$1'), `maybe', `three comparisons: ', + `side(`default answer: ')')counter')dnl +define(`example2', +`define(`counter', `0')dnl +cond(`side(`$1')', `yes', `one comparison: ', + `side(`$1')', `no', `two comparisons: ', + `side(`$1')', `maybe', `three comparisons: ', + `side(`default answer: ')')counter')dnl +example1(`yes') +@result{}one comparison: 3 +example1(`no') +@result{}two comparisons: 3 +example1(`maybe') +@result{}three comparisons: 3 +example1(`feeling rather indecisive today') +@result{}default answer: 4 +example2(`yes') +@result{}one comparison: 1 +example2(`no') +@result{}two comparisons: 2 +example2(`maybe') +@result{}three comparisons: 3 +example2(`feeling rather indecisive today') +@result{}default answer: 4 +@end example + +@cindex joining arguments +@cindex arguments, joining +@cindex concatenating arguments +Another common task that requires iteration is joining a list of +arguments into a single string. + +@deffn Composite join (@ovar{separator}, @ovar{args@dots{}}) +@deffnx Composite joinall (@ovar{separator}, @ovar{args@dots{}}) +Generate a single-quoted string, consisting of each @var{arg} separated +by @var{separator}. While @code{joinall} always outputs a +@var{separator} between arguments, @code{join} avoids the +@var{separator} for an empty @var{arg}. +@end deffn + +Here are some examples of its usage, based on the implementation +@file{m4-@value{VERSION}/@/examples/@/join.m4} distributed in this +package: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`join.m4') +@result{} +join,join(`-'),join(`-', `'),join(`-', `', `') +@result{},,, +joinall,joinall(`-'),joinall(`-', `'),joinall(`-', `', `') +@result{},,,- +join(`-', `1') +@result{}1 +join(`-', `1', `2', `3') +@result{}1-2-3 +join(`', `1', `2', `3') +@result{}123 +join(`-', `', `1', `', `', `2', `') +@result{}1-2 +joinall(`-', `', `1', `', `', `2', `') +@result{}-1---2- +join(`,', `1', `2', `3') +@result{}1,2,3 +define(`nargs', `$#')dnl +nargs(join(`,', `1', `2', `3')) +@result{}1 +@end example + +Examining the implementation shows some interesting points about several +m4 programming idioms. + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`join.m4')dnl +@result{}divert(`-1') +@result{}# join(sep, args) - join each non-empty ARG into a single +@result{}# string, with each element separated by SEP +@result{}define(`join', +@result{}`ifelse(`$#', `2', ``$2'', +@result{} `ifelse(`$2', `', `', ``$2'_')$0(`$1', shift(shift($@@)))')') +@result{}define(`_join', +@result{}`ifelse(`$#$2', `2', `', +@result{} `ifelse(`$2', `', `', ``$1$2'')$0(`$1', shift(shift($@@)))')') +@result{}# joinall(sep, args) - join each ARG, including empty ones, +@result{}# into a single string, with each element separated by SEP +@result{}define(`joinall', ``$2'_$0(`$1', shift($@@))') +@result{}define(`_joinall', +@result{}`ifelse(`$#', `2', `', ``$1$3'$0(`$1', shift(shift($@@)))')') +@result{}divert`'dnl +@end example + +First, notice that this implementation creates helper macros +@code{_join} and @code{_joinall}. This division of labor makes it +easier to output the correct number of @var{separator} instances: +@code{join} and @code{joinall} are responsible for the first argument, +without a separator, while @code{_join} and @code{_joinall} are +responsible for all remaining arguments, always outputting a separator +when outputting an argument. + +Next, observe how @code{join} decides to iterate to itself, because the +first @var{arg} was empty, or to output the argument and swap over to +@code{_join}. If the argument is non-empty, then the nested +@code{ifelse} results in an unquoted @samp{_}, which is concatenated +with the @samp{$0} to form the next macro name to invoke. The +@code{joinall} implementation is simpler since it does not have to +suppress empty @var{arg}; it always executes once then defers to +@code{_joinall}. + +Another important idiom is the idea that @var{separator} is reused for +each iteration. Each iteration has one less argument, but rather than +discarding @samp{$1} by iterating with @code{$0(shift($@@))}, the macro +discards @samp{$2} by using @code{$0(`$1', shift(shift($@@)))}. + +Next, notice that it is possible to compare more than one condition in a +single @code{ifelse} test. The test of @samp{$#$2} against @samp{2} +allows @code{_join} to iterate for two separate reasons---either there +are still more than two arguments, or there are exactly two arguments +but the last argument is not empty. + +Finally, notice that these macros require exactly two arguments to +terminate recursion, but that they still correctly result in empty +output when given no @var{args} (i.e., zero or one macro argument). On +the first pass when there are too few arguments, the @code{shift} +results in no output, but leaves an empty string to serve as the +required second argument for the second pass. Put another way, +@samp{`$1', shift($@@)} is not the same as @samp{$@@}, since only the +former guarantees at least two arguments. + +@cindex quote manipulation +@cindex manipulating quotes +Sometimes, a recursive algorithm requires adding quotes to each element, +or treating multiple arguments as a single element: + +@deffn Composite quote (@dots{}) +@deffnx Composite dquote (@dots{}) +@deffnx Composite dquote_elt (@dots{}) +Takes any number of arguments, and adds quoting. With @code{quote}, +only one level of quoting is added, effectively removing whitespace +after commas and turning multiple arguments into a single string. With +@code{dquote}, two levels of quoting are added, one around each element, +and one around the list. And with @code{dquote_elt}, two levels of +quoting are added around each element. +@end deffn + +An actual implementation of these three macros is distributed as +@file{m4-@value{VERSION}/@/examples/@/quote.m4} in this package. First, +let's examine their usage: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`quote.m4') +@result{} +-quote-dquote-dquote_elt- +@result{}---- +-quote()-dquote()-dquote_elt()- +@result{}--`'-`'- +-quote(`1')-dquote(`1')-dquote_elt(`1')- +@result{}-1-`1'-`1'- +-quote(`1', `2')-dquote(`1', `2')-dquote_elt(`1', `2')- +@result{}-1,2-`1',`2'-`1',`2'- +define(`n', `$#')dnl +-n(quote(`1', `2'))-n(dquote(`1', `2'))-n(dquote_elt(`1', `2'))- +@result{}-1-1-2- +dquote(dquote_elt(`1', `2')) +@result{}``1'',``2'' +dquote_elt(dquote(`1', `2')) +@result{}``1',`2'' +@end example + +The last two lines show that when given two arguments, @code{dquote} +results in one string, while @code{dquote_elt} results in two. Now, +examine the implementation. Note that @code{quote} and +@code{dquote_elt} make decisions based on their number of arguments, so +that when called without arguments, they result in nothing instead of a +quoted empty string; this is so that it is possible to distinguish +between no arguments and an empty first argument. @code{dquote}, on the +other hand, results in a string no matter what, since it is still +possible to tell whether it was invoked without arguments based on the +resulting string. + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`quote.m4')dnl +@result{}divert(`-1') +@result{}# quote(args) - convert args to single-quoted string +@result{}define(`quote', `ifelse(`$#', `0', `', ``$*'')') +@result{}# dquote(args) - convert args to quoted list of quoted strings +@result{}define(`dquote', ``$@@'') +@result{}# dquote_elt(args) - convert args to list of double-quoted strings +@result{}define(`dquote_elt', `ifelse(`$#', `0', `', `$#', `1', ```$1''', +@result{} ```$1'',$0(shift($@@))')') +@result{}divert`'dnl +@end example + +It is worth pointing out that @samp{quote(@var{args})} is more efficient +than @samp{joinall(`,', @var{args})} for producing the same output. + +@cindex nine arguments, more than +@cindex more than nine arguments +@cindex arguments, more than nine +One more useful macro based on @code{shift} allows portably selecting +an arbitrary argument (usually greater than the ninth argument), without +relying on the @acronym{GNU} extension of multi-digit arguments +(@pxref{Arguments}). + +@deffn Composite argn (@var{n}, @dots{}) +Expands to argument @var{n} out of the remaining arguments. @var{n} +must be a positive number. Usually invoked as +@samp{argn(`@var{n}',$@@)}. +@end deffn + +It is implemented as: + +@example +define(`argn', `ifelse(`$1', 1, ``$2'', + `argn(decr(`$1'), shift(shift($@@)))')') +@result{} +argn(`1', `a') +@result{}a +define(`foo', `argn(`11', $@@)') +@result{} +foo(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k', `l') +@result{}k +@end example + +@node Forloop +@section Iteration by counting + +@cindex for loops +@cindex loops, counting +@cindex counting loops +Here is an example of a loop macro that implements a simple for loop. + +@deffn Composite forloop (@var{iterator}, @var{start}, @var{end}, @var{text}) +Takes the name in @var{iterator}, which must be a valid macro name, and +successively assign it each integer value from @var{start} to @var{end}, +inclusive. For each assignment to @var{iterator}, append @var{text} to +the expansion of the @code{forloop}. @var{text} may refer to +@var{iterator}. Any definition of @var{iterator} prior to this +invocation is restored. +@end deffn + +It can, for example, be used for simple counting: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`forloop.m4') +@result{} +forloop(`i', `1', `8', `i ') +@result{}1 2 3 4 5 6 7 8@w{ } +@end example + +For-loops can be nested, like: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`forloop.m4') +@result{} +forloop(`i', `1', `4', `forloop(`j', `1', `8', ` (i, j)') +') +@result{} (1, 1) (1, 2) (1, 3) (1, 4) (1, 5) (1, 6) (1, 7) (1, 8) +@result{} (2, 1) (2, 2) (2, 3) (2, 4) (2, 5) (2, 6) (2, 7) (2, 8) +@result{} (3, 1) (3, 2) (3, 3) (3, 4) (3, 5) (3, 6) (3, 7) (3, 8) +@result{} (4, 1) (4, 2) (4, 3) (4, 4) (4, 5) (4, 6) (4, 7) (4, 8) +@result{} +@end example + +The implementation of the @code{forloop} macro is fairly +straightforward. The @code{forloop} macro itself is simply a wrapper, +which saves the previous definition of the first argument, calls the +internal macro @code{@w{_forloop}}, and re-establishes the saved +definition of the first argument. + +The macro @code{@w{_forloop}} expands the fourth argument once, and +tests to see if the iterator has reached the final value. If it has +not finished, it increments the iterator (using the predefined macro +@code{incr}, @pxref{Incr}), and recurses. + +Here is an actual implementation of @code{forloop}, distributed as +@file{m4-@value{VERSION}/@/examples/@/forloop.m4} in this package: + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`forloop.m4')dnl +@result{}divert(`-1') +@result{}# forloop(var, from, to, stmt) - simple version +@result{}define(`forloop', `pushdef(`$1', `$2')_forloop($@@)popdef(`$1')') +@result{}define(`_forloop', +@result{} `$4`'ifelse($1, `$3', `', `define(`$1', incr($1))$0($@@)')') +@result{}divert`'dnl +@end example + +Notice the careful use of quotes. Certain macro arguments are left +unquoted, each for its own reason. Try to find out @emph{why} these +arguments are left unquoted, and see what happens if they are quoted. +(As presented, these two macros are useful but not very robust for +general use. They lack even basic error handling for cases like +@var{start} less than @var{end}, @var{end} not numeric, or +@var{iterator} not being a macro name. See if you can improve these +macros; or @pxref{Improved forloop, , Answers}). + +@node Foreach +@section Iteration by list contents + +@cindex for each loops +@cindex loops, list iteration +@cindex iterating over lists +Here is an example of a loop macro that implements list iteration. + +@deffn Composite foreach (@var{iterator}, @var{paren-list}, @var{text}) +@deffnx Composite foreachq (@var{iterator}, @var{quote-list}, @var{text}) +Takes the name in @var{iterator}, which must be a valid macro name, and +successively assign it each value from @var{paren-list} or +@var{quote-list}. In @code{foreach}, @var{paren-list} is a +comma-separated list of elements contained in parentheses. In +@code{foreachq}, @var{quote-list} is a comma-separated list of elements +contained in a quoted string. For each assignment to @var{iterator}, +append @var{text} to the overall expansion. @var{text} may refer to +@var{iterator}. Any definition of @var{iterator} prior to this +invocation is restored. +@end deffn + +As an example, this displays each word in a list inside of a sentence, +using an implementation of @code{foreach} distributed as +@file{m4-@value{VERSION}/@/examples/@/foreach.m4}, and @code{foreachq} +in @file{m4-@value{VERSION}/@/examples/@/foreachq.m4}. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreach.m4') +@result{} +foreach(`x', (foo, bar, foobar), `Word was: x +')dnl +@result{}Word was: foo +@result{}Word was: bar +@result{}Word was: foobar +include(`foreachq.m4') +@result{} +foreachq(`x', `foo, bar, foobar', `Word was: x +')dnl +@result{}Word was: foo +@result{}Word was: bar +@result{}Word was: foobar +@end example + +It is possible to be more complex; each element of the @var{paren-list} +or @var{quote-list} can itself be a list, to pass as further arguments +to a helper macro. This example generates a shell case statement: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreach.m4') +@result{} +define(`_case', ` $1) + $2=" $1";; +')dnl +define(`_cat', `$1$2')dnl +case $`'1 in +@result{}case $1 in +foreach(`x', `(`(`a', `vara')', `(`b', `varb')', `(`c', `varc')')', + `_cat(`_case', x)')dnl +@result{} a) +@result{} vara=" a";; +@result{} b) +@result{} varb=" b";; +@result{} c) +@result{} varc=" c";; +esac +@result{}esac +@end example + +The implementation of the @code{foreach} macro is a bit more involved; +it is a wrapper around two helper macros. First, @code{@w{_arg1}} is +needed to grab the first element of a list. Second, +@code{@w{_foreach}} implements the recursion, successively walking +through the original list. Here is a simple implementation of +@code{foreach}: + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`foreach.m4')dnl +@result{}divert(`-1') +@result{}# foreach(x, (item_1, item_2, ..., item_n), stmt) +@result{}# parenthesized list, simple version +@result{}define(`foreach', `pushdef(`$1')_foreach($@@)popdef(`$1')') +@result{}define(`_arg1', `$1') +@result{}define(`_foreach', `ifelse(`$2', `()', `', +@result{} `define(`$1', _arg1$2)$3`'$0(`$1', (shift$2), `$3')')') +@result{}divert`'dnl +@end example + +Unfortunately, that implementation is not robust to macro names as list +elements. Each iteration of @code{@w{_foreach}} is stripping another +layer of quotes, leading to erratic results if list elements are not +already fully expanded. The first cut at implementing @code{foreachq} +takes this into account. Also, when using quoted elements in a +@var{paren-list}, the overall list must be quoted. A @var{quote-list} +has the nice property of requiring fewer characters to create a list +containing the same quoted elements. To see the difference between the +two macros, we attempt to pass double-quoted macro names in a list, +expecting the macro name on output after one layer of quotes is removed +during list iteration and the final layer removed during the final +rescan: + +@comment examples +@example +$ @kbd{m4 -I examples} +define(`a', `1')define(`b', `2')define(`c', `3') +@result{} +include(`foreach.m4') +@result{} +include(`foreachq.m4') +@result{} +foreach(`x', `(``a'', ``(b'', ``c)'')', `x +') +@result{}1 +@result{}(2)1 +@result{} +@result{}, x +@result{}) +foreachq(`x', ```a'', ``(b'', ``c)''', `x +')dnl +@result{}a +@result{}(b +@result{}c) +@end example + +Obviously, @code{foreachq} did a better job; here is its implementation: + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`foreachq.m4')dnl +@result{}include(`quote.m4')dnl +@result{}divert(`-1') +@result{}# foreachq(x, `item_1, item_2, ..., item_n', stmt) +@result{}# quoted list, simple version +@result{}define(`foreachq', `pushdef(`$1')_foreachq($@@)popdef(`$1')') +@result{}define(`_arg1', `$1') +@result{}define(`_foreachq', `ifelse(quote($2), `', `', +@result{} `define(`$1', `_arg1($2)')$3`'$0(`$1', `shift($2)', `$3')')') +@result{}divert`'dnl +@end example + +Notice that @code{@w{_foreachq}} had to use the helper macro +@code{quote} defined earlier (@pxref{Shift}), to ensure that the +embedded @code{ifelse} call does not go haywire if a list element +contains a comma. Unfortunately, this implementation of @code{foreachq} +has its own severe flaw. Whereas the @code{foreach} implementation was +linear, this macro is quadratic in the number of list elements, and is +much more likely to trip up the limit set by the command line option +@option{--nesting-limit} (or @option{-L}, @pxref{Limits control, , +Invoking m4}). Additionally, this implementation does not expand +@samp{defn(`@var{iterator}')} very well, when compared with +@code{foreach}. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreach.m4')include(`foreachq.m4') +@result{} +foreach(`name', `(`a', `b')', ` defn(`name')') +@result{} a b +foreachq(`name', ``a', `b'', ` defn(`name')') +@result{} _arg1(`a', `b') _arg1(shift(`a', `b')) +@end example + +It is possible to have robust iteration with linear behavior and sane +@var{iterator} contents for either list style. See if you can learn +from the best elements of both of these implementations to create robust +macros (or @pxref{Improved foreach, , Answers}). + +@node Stacks +@section Working with definition stacks + +@cindex definition stack +@cindex pushdef stack +@cindex stack, macro definition +Thanks to @code{pushdef}, manipulation of a stack is an intrinsic +operation in @code{m4}. Normally, only the topmost definition in a +stack is important, but sometimes, it is desirable to manipulate the +entire definition stack. + +@deffn Composite stack_foreach (@var{macro}, @var{action}) +@deffnx Composite stack_foreach_lifo (@var{macro}, @var{action}) +For each of the @code{pushdef} definitions associated with @var{macro}, +invoke the macro @var{action} with a single argument of that definition. +@code{stack_foreach} visits the oldest definition first, while +@code{stack_foreach_lifo} visits the current definition first. +@var{action} should not modify or dereference @var{macro}. There are a +few special macros, such as @code{defn}, which cannot be used as the +@var{macro} parameter. +@end deffn + +A sample implementation of these macros is distributed in the file +@file{m4-@value{VERSION}/@/examples/@/stack.m4}. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`stack.m4') +@result{} +pushdef(`a', `1')pushdef(`a', `2')pushdef(`a', `3') +@result{} +define(`show', ``$1' +') +@result{} +stack_foreach(`a', `show')dnl +@result{}1 +@result{}2 +@result{}3 +stack_foreach_lifo(`a', `show')dnl +@result{}3 +@result{}2 +@result{}1 +@end example + +Now for the implementation. Note the definition of a helper macro, +@code{_stack_reverse}, which destructively swaps the contents of one +stack of definitions into the reverse order in the temporary macro +@samp{tmp-$1}. By calling the helper twice, the original order is +restored back into the macro @samp{$1}; since the operation is +destructive, this explains why @samp{$1} must not be modified or +dereferenced during the traversal. The caller can then inject +additional code to pass the definition currently being visited to +@samp{$2}. The choice of helper names is intentional; since @samp{-} is +not valid as part of a macro name, there is no risk of conflict with a +valid macro name, and the code is guaranteed to use @code{defn} where +necessary. Finally, note that any macro used in the traversal of a +@code{pushdef} stack, such as @code{pushdef} or @code{defn}, cannot be +handled by @code{stack_foreach}, since the macro would temporarily be +undefined during the algorithm. + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`stack.m4')dnl +@result{}divert(`-1') +@result{}# stack_foreach(macro, action) +@result{}# Invoke ACTION with a single argument of each definition +@result{}# from the definition stack of MACRO, starting with the oldest. +@result{}define(`stack_foreach', +@result{}`_stack_reverse(`$1', `tmp-$1')'dnl +@result{}`_stack_reverse(`tmp-$1', `$1', `$2(defn(`$1'))')') +@result{}# stack_foreach_lifo(macro, action) +@result{}# Invoke ACTION with a single argument of each definition +@result{}# from the definition stack of MACRO, starting with the newest. +@result{}define(`stack_foreach_lifo', +@result{}`_stack_reverse(`$1', `tmp-$1', `$2(defn(`$1'))')'dnl +@result{}`_stack_reverse(`tmp-$1', `$1')') +@result{}define(`_stack_reverse', +@result{}`ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0($@@)')') +@result{}divert`'dnl +@end example + +@node Composition +@section Building macros with macros + +@cindex macro composition +@cindex composing macros +Since m4 is a macro language, it is possible to write macros that +can build other macros. First on the list is a way to automate the +creation of blind macros. + +@cindex macro, blind +@cindex blind macro +@deffn Composite define_blind (@var{name}, @ovar{value}) +Defines @var{name} as a blind macro, such that @var{name} will expand to +@var{value} only when given explicit arguments. @var{value} should not +be the result of @code{defn} (@pxref{Defn}). This macro is only +recognized with parameters, and results in an empty string. +@end deffn + +Defining a macro to define another macro can be a bit tricky. We want +to use a literal @samp{$#} in the argument to the nested @code{define}. +However, if @samp{$} and @samp{#} are adjacent in the definition of +@code{define_blind}, then it would be expanded as the number of +arguments to @code{define_blind} rather than the intended number of +arguments to @var{name}. The solution is to pass the difficult +characters through extra arguments to a helper macro +@code{_define_blind}. When composing macros, it is a common idiom to +need a helper macro to concatenate text that forms parameters in the +composed macro, rather than interpreting the text as a parameter of the +composing macro. + +As for the limitation against using @code{defn}, there are two reasons. +If a macro was previously defined with @code{define_blind}, then it can +safely be renamed to a new blind macro using plain @code{define}; using +@code{define_blind} to rename it just adds another layer of +@code{ifelse}, occupying memory and slowing down execution. And if a +macro is a builtin, then it would result in an attempt to define a macro +consisting of both text and a builtin token; this is not supported, and +the builtin token is flattened to an empty string. + +With that explanation, here's the definition, and some sample usage. +Notice that @code{define_blind} is itself a blind macro. + +@example +$ @kbd{m4 -d} +define(`define_blind', `ifelse(`$#', `0', ``$0'', +`_$0(`$1', `$2', `$'`#', `$'`0')')') +@result{} +define(`_define_blind', `define(`$1', +`ifelse(`$3', `0', ``$4'', `$2')')') +@result{} +define_blind +@result{}define_blind +define_blind(`foo', `arguments were $*') +@result{} +foo +@result{}foo +foo(`bar') +@result{}arguments were bar +define(`blah', defn(`foo')) +@result{} +blah +@result{}blah +blah(`a', `b') +@result{}arguments were a,b +defn(`blah') +@result{}ifelse(`$#', `0', ``$0'', `arguments were $*') +@end example + +@cindex currying arguments +@cindex argument currying +Another interesting composition tactic is argument @dfn{currying}, or +factoring a macro that takes multiple arguments for use in a context +that provides exactly one argument. + +@deffn Composite curry (@var{macro}, @dots{}) +Expand to a macro call that takes exactly one argument, then appends +that argument to the original arguments and invokes @var{macro} with the +resulting list of arguments. +@end deffn + +A demonstration of currying makes the intent of this macro a little more +obvious. The macro @code{stack_foreach} mentioned earlier is an example +of a context that provides exactly one argument to a macro name. But +coupled with currying, we can invoke @code{reverse} with two arguments +for each definition of a macro stack. This example uses the file +@file{m4-@value{VERSION}/@/examples/@/curry.m4} included in the +distribution. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`curry.m4')include(`stack.m4') +@result{} +define(`reverse', `ifelse(`$#', `0', , `$#', `1', ``$1'', + `reverse(shift($@@)), `$1'')') +@result{} +pushdef(`a', `1')pushdef(`a', `2')pushdef(`a', `3') +@result{} +stack_foreach(`a', `:curry(`reverse', `4')') +@result{}:1, 4:2, 4:3, 4 +curry(`curry', `reverse', `1')(`2')(`3') +@result{}3, 2, 1 +@end example + +Now for the implementation. Notice how @code{curry} leaves off with a +macro name but no open parenthesis, while still in the middle of +collecting arguments for @samp{$1}. The macro @code{_curry} is the +helper macro that takes one argument, then adds it to the list and +finally supplies the closing parenthesis. The use of a comma inside the +@code{shift} call allows currying to also work for a macro that takes +one argument, although it often makes more sense to invoke that macro +directly rather than going through @code{curry}. + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`curry.m4')dnl +@result{}divert(`-1') +@result{}# curry(macro, args) +@result{}# Expand to a macro call that takes one argument, then invoke +@result{}# macro(args, extra). +@result{}define(`curry', `$1(shift($@@,)_$0') +@result{}define(`_curry', ``$1')') +@result{}divert`'dnl +@end example + +Unfortunately, with M4 1.4.x, @code{curry} is unable to handle builtin +tokens, which are silently flattened to the empty string when passed +through another text macro. This limitation will be lifted in a future +release of M4. + +@cindex renaming macros +@cindex copying macros +@cindex macros, copying +Putting the last few concepts together, it is possible to copy or rename +an entire stack of macro definitions. + +@deffn Composite copy (@var{source}, @var{dest}) +@deffnx Composite rename (@var{source}, @var{dest}) +Ensure that @var{dest} is undefined, then define it to the same stack of +definitions currently in @var{source}. @code{copy} leaves @var{source} +unchanged, while @code{rename} undefines @var{source}. There are only a +few macros, such as @code{copy} or @code{defn}, which cannot be copied +via this macro. +@end deffn + +The implementation is relatively straightforward (although since it uses +@code{curry}, it is unable to copy builtin macros, such as the second +definition of @code{a} as a synonym for @code{divnum}. See if you can +design a version that works around this limitation, or @pxref{Improved +copy, , Answers}). + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`curry.m4')include(`stack.m4') +@result{} +define(`rename', `copy($@@)undefine(`$1')')dnl +define(`copy', `ifdef(`$2', `errprint(`$2 already defined +')m4exit(`1')', + `stack_foreach(`$1', `curry(`pushdef', `$2')')')')dnl +pushdef(`a', `1')pushdef(`a', defn(`divnum'))pushdef(`a', `2') +@result{} +copy(`a', `b') +@result{} +rename(`b', `c') +@result{} +a b c +@result{}2 b 2 +popdef(`a', `c')c a +@result{} 0 +popdef(`a', `c')a c +@result{}1 1 +@end example + +@node Debugging +@chapter How to debug macros and input + +@cindex debugging macros +@cindex macros, debugging +When writing macros for @code{m4}, they often do not work as intended on +the first try (as is the case with most programming languages). +Fortunately, there is support for macro debugging in @code{m4}. + +@menu +* Dumpdef:: Displaying macro definitions +* Trace:: Tracing macro calls +* Debug Levels:: Controlling debugging output +* Debug Output:: Saving debugging output +@end menu + +@node Dumpdef +@section Displaying macro definitions + +@cindex displaying macro definitions +@cindex macros, displaying definitions +@cindex definitions, displaying macro +@cindex standard error, output to +If you want to see what a name expands into, you can use the builtin +@code{dumpdef}: + +@deffn Builtin dumpdef (@ovar{names@dots{}}) +Accepts any number of arguments. If called without any arguments, +it displays the definitions of all known names, otherwise it displays +the definitions of the @var{names} given. The output is printed to the +current debug file (usually standard error), and is sorted by name. If +an unknown name is encountered, a warning is printed. + +The expansion of @code{dumpdef} is void. +@end deffn + +@example +$ @kbd{m4 -d} +define(`foo', `Hello world.') +@result{} +dumpdef(`foo') +@error{}foo:@tabchar{}`Hello world.' +@result{} +dumpdef(`define') +@error{}define:@tabchar{} +@result{} +@end example + +The last example shows how builtin macros definitions are displayed. +The definition that is dumped corresponds to what would occur if the +macro were to be called at that point, even if other definitions are +still live due to redefining a macro during argument collection. + +@example +$ @kbd{m4 -d} +pushdef(`f', ``$0'1')pushdef(`f', ``$0'2') +@result{} +f(popdef(`f')dumpdef(`f')) +@error{}f:@tabchar{}``$0'1' +@result{}f2 +f(popdef(`f')dumpdef(`f')) +@error{}m4:stdin:3: undefined macro `f' +@result{}f1 +@end example + +@xref{Debug Levels}, for information on controlling the details of the +display. + +@node Trace +@section Tracing macro calls + +@cindex tracing macro expansion +@cindex macro expansion, tracing +@cindex expansion, tracing macro +@cindex standard error, output to +It is possible to trace macro calls and expansions through the builtins +@code{traceon} and @code{traceoff}: + +@deffn Builtin traceon (@ovar{names@dots{}}) +@deffnx Builtin traceoff (@ovar{names@dots{}}) +When called without any arguments, @code{traceon} and @code{traceoff} +will turn tracing on and off, respectively, for all currently defined +macros. + +When called with arguments, only the macros listed in @var{names} are +affected, whether or not they are currently defined. + +The expansion of @code{traceon} and @code{traceoff} is void. +@end deffn + +Whenever a traced macro is called and the arguments have been collected, +the call is displayed. If the expansion of the macro call is not void, +the expansion can be displayed after the call. The output is printed +to the current debug file (defaulting to standard error, @pxref{Debug +Output}). + +@example +$ @kbd{m4 -d} +define(`foo', `Hello World.') +@result{} +define(`echo', `$@@') +@result{} +traceon(`foo', `echo') +@result{} +foo +@error{}m4trace: -1- foo -> `Hello World.' +@result{}Hello World. +echo(`gnus', `and gnats') +@error{}m4trace: -1- echo(`gnus', `and gnats') -> ``gnus',`and gnats'' +@result{}gnus,and gnats +@end example + +The number between dashes is the depth of the expansion. It is one most +of the time, signifying an expansion at the outermost level, but it +increases when macro arguments contain unquoted macro calls. The +maximum number that will appear between dashes is controlled by the +option @option{--nesting-limit} (or @option{-L}, @pxref{Limits control, +, Invoking m4}). Additionally, the option @option{--trace} (or +@option{-t}) can be used to invoke @code{traceon(@var{name})} before +parsing input. + +@comment The explicit -dp neutralizes the testsuite default of -d. +@comment options: -dp -L3 -tifelse +@comment status: 1 +@example +$ @kbd{m4 -L 3 -t ifelse} +ifelse(`one level') +@error{}m4trace: -1- ifelse +@result{} +ifelse(ifelse(ifelse(`three levels'))) +@error{}m4trace: -3- ifelse +@error{}m4trace: -2- ifelse +@error{}m4trace: -1- ifelse +@result{} +ifelse(ifelse(ifelse(ifelse(`four levels')))) +@error{}m4:stdin:3: recursion limit of 3 exceeded, use -L to change it +@end example + +Tracing by name is an attribute that is preserved whether the macro is +defined or not. This allows the selection of macros to trace before +those macros are defined. + +@example +$ @kbd{m4 -d} +traceoff(`foo') +@result{} +traceon(`foo') +@result{} +foo +@result{}foo +defn(`foo') +@result{} +define(`foo', `bar') +@result{} +foo +@error{}m4trace: -1- foo -> `bar' +@result{}bar +undefine(`foo') +@result{} +ifdef(`foo', `yes', `no') +@result{}no +indir(`foo') +@error{}m4:stdin:9: undefined macro `foo' +@result{} +define(`foo', `blah') +@result{} +foo +@error{}m4trace: -1- foo -> `blah' +@result{}blah +traceoff +@result{} +foo +@result{}blah +@end example + +Tracing even works on builtins. However, @code{defn} (@pxref{Defn}) +does not transfer tracing status. + +@example +$ @kbd{m4 -d} +traceon(`traceon') +@result{} +traceon(`traceoff') +@error{}m4trace: -1- traceon(`traceoff') +@result{} +traceoff(`traceoff') +@error{}m4trace: -1- traceoff(`traceoff') +@result{} +traceoff(`traceon') +@result{} +traceon(`eval', `m4_divnum') +@result{} +define(`m4_eval', defn(`eval')) +@result{} +define(`m4_divnum', defn(`divnum')) +@result{} +eval(divnum) +@error{}m4trace: -1- eval(`0') -> `0' +@result{}0 +m4_eval(m4_divnum) +@error{}m4trace: -2- m4_divnum -> `0' +@result{}0 +@end example + +@xref{Debug Levels}, for information on controlling the details of the +display. The format of the trace output is not specified by +@acronym{POSIX}, and varies between implementations of @code{m4}. + +@ignore +@comment not worth including in the manual, but this tests a trace code +@comment path that was temporarily broken +@comment options: -de --trace ifelse +@example +$ @kbd{m4 -de --trace ifelse} +define(`e', `ifelse(`$1', `$2', `ifelse(`$1', `$2', `e(shift($@@))')')') +@result{} +e(`1', `1') +@error{}m4trace: -1- ifelse -> ifelse(`1', `1', `e(shift(`1',`1'))') +@error{}m4trace: -1- ifelse -> e(shift(`1',`1')) +@error{}m4trace: -1- ifelse +@result{} +@end example +@end ignore + +@node Debug Levels +@section Controlling debugging output + +@cindex controlling debugging output +@cindex debugging output, controlling +The @option{-d} option to @code{m4} (or @option{--debug}, +@pxref{Debugging options, , Invoking m4}) controls the amount of details +presented in three +categories of output. Trace output is requested by @code{traceon} +(@pxref{Trace}), and each line is prefixed by @samp{m4trace:} in +relation to a macro invocation. Debug output tracks useful events not +associated with a macro invocation, and each line is prefixed by +@samp{m4debug:}. Finally, @code{dumpdef} (@pxref{Dumpdef}) output is +affected, with no prefix added to the output lines. + +The @var{flags} following the option can be one or more of the +following: + +@table @code +@item a +In trace output, show the actual arguments that were collected before +invoking the macro. This applies to all macro calls if the @samp{t} +flag is used, otherwise only the macros covered by calls of +@code{traceon}. Arguments are subject to length truncation specified by +the command line option @option{--arglength} (or @option{-l}). + +@item c +In trace output, show several trace lines for each macro call. A line +is shown when the macro is seen, but before the arguments are collected; +a second line when the arguments have been collected and a third line +after the call has completed. + +@item e +In trace output, show the expansion of each macro call, if it is not +void. This applies to all macro calls if the @samp{t} flag is used, +otherwise only the macros covered by calls of @code{traceon}. The +expansion is subject to length truncation specified by the command line +option @option{--arglength} (or @option{-l}). + +@item f +In debug and trace output, include the name of the current input file in +the output line. + +@item i +In debug output, print a message each time the current input file is +changed. + +@item l +In debug and trace output, include the current input line number in the +output line. + +@item p +In debug output, print a message when a named file is found through the +path search mechanism (@pxref{Search Path}), giving the actual file name +used. + +@item q +In trace and dumpdef output, quote actual arguments and macro expansions +in the display with the current quotes. This is useful in connection +with the @samp{a} and @samp{e} flags above. + +@item t +In trace output, trace all macro calls made in this invocation of +@code{m4}, regardless of the settings of @code{traceon}. + +@item x +In trace output, add a unique `macro call id' to each line of the trace +output. This is useful in connection with the @samp{c} flag above. + +@item V +A shorthand for all of the above flags. +@end table + +If no flags are specified with the @option{-d} option, the default is +@samp{aeq}. The examples throughout this manual assume the default +flags. + +@cindex @acronym{GNU} extensions +There is a builtin macro @code{debugmode}, which allows on-the-fly control of +the debugging output format: + +@deffn Builtin debugmode (@ovar{flags}) +The argument @var{flags} should be a subset of the letters listed above. +As special cases, if the argument starts with a @samp{+}, the flags are +added to the current debug flags, and if it starts with a @samp{-}, they +are removed. If no argument is present, all debugging flags are cleared +(as if no @option{-d} was given), and with an empty argument the flags +are reset to the default of @samp{aeq}. + +The expansion of @code{debugmode} is void. +@end deffn + +@comment The explicit -dp neutralizes the testsuite default of -d. +@comment options: -dp +@example +$ @kbd{m4} +define(`foo', `FOO') +@result{} +traceon(`foo') +@result{} +debugmode() +@result{} +foo +@error{}m4trace: -1- foo -> `FOO' +@result{}FOO +debugmode +@result{} +foo +@error{}m4trace: -1- foo +@result{}FOO +debugmode(`+l') +@result{} +foo +@error{}m4trace:8: -1- foo +@result{}FOO +@end example + +The following example demonstrates the behavior of length truncation, +when specified on the command line. Note that each argument and the +final result are individually truncated. Also, the special tokens for +builtin functions are not truncated. + +@comment options: -l6 +@example +$ @kbd{m4 -d -l 6} +define(`echo', `$@@')debugmode(`+t') +@result{} +echo(`1', `long string') +@error{}m4trace: -1- echo(`1', `long s...') -> ``1',`l...' +@result{}1,long string +indir(`echo', defn(`changequote')) +@error{}m4trace: -2- defn(`change...') +@error{}m4trace: -1- indir(`echo', ) -> ``'' +@result{} +@end example + +This example shows the effects of the debug flags that are not related +to macro tracing. + +@comment examples +@comment options: -dip +@example +$ @kbd{m4 -dip -I examples} +@error{}m4debug: input read from stdin +include(`foo')dnl +@error{}m4debug: path search for `foo' found `examples/foo' +@error{}m4debug: input read from examples/foo +@result{}bar +@error{}m4debug: input reverted to stdin, line 1 +^D +@error{}m4debug: input exhausted +@end example + +@node Debug Output +@section Saving debugging output + +@cindex saving debugging output +@cindex debugging output, saving +@cindex output, saving debugging +@cindex @acronym{GNU} extensions +Debug and tracing output can be redirected to files using either the +@option{--debugfile} option to @code{m4} (@pxref{Debugging options, , +Invoking m4}), or with the builtin macro @code{debugfile}: + +@deffn Builtin debugfile (@ovar{file}) +Sends all further debug and trace output to @var{file}, opened in append +mode. If @var{file} is the empty string, debug and trace output are +discarded. If @code{debugfile} is called without any arguments, debug +and trace output are sent to standard error. This does not affect +warnings, error messages, or @code{errprint} output, which are +always sent to standard error. If @var{file} cannot be opened, the +current debug file is unchanged, and an error is issued. + +The expansion of @code{debugfile} is void. +@end deffn + +@example +$ @kbd{m4 -d} +traceon(`divnum') +@result{} +divnum(`extra') +@error{}m4:stdin:2: Warning: excess arguments to builtin `divnum' ignored +@error{}m4trace: -1- divnum(`extra') -> `0' +@result{}0 +debugfile() +@result{} +divnum(`extra') +@error{}m4:stdin:4: Warning: excess arguments to builtin `divnum' ignored +@result{}0 +debugfile +@result{} +divnum +@error{}m4trace: -1- divnum -> `0' +@result{}0 +@end example + +@node Input Control +@chapter Input control + +This chapter describes various builtin macros for controlling the input +to @code{m4}. + +@menu +* Dnl:: Deleting whitespace in input +* Changequote:: Changing the quote characters +* Changecom:: Changing the comment delimiters +* Changeword:: Changing the lexical structure of words +* M4wrap:: Saving text until end of input +@end menu + +@node Dnl +@section Deleting whitespace in input + +@cindex deleting whitespace in input +@cindex discarding input +@cindex input, discarding +The builtin @code{dnl} stands for ``Discard to Next Line'': + +@deffn Builtin dnl +All characters, up to and including the next newline, are discarded +without performing any macro expansion. A warning is issued if the end +of the file is encountered without a newline. + +The expansion of @code{dnl} is void. +@end deffn + +It is often used in connection with @code{define}, to remove the +newline that follows the call to @code{define}. Thus + +@example +define(`foo', `Macro `foo'.')dnl A very simple macro, indeed. +foo +@result{}Macro foo. +@end example + +The input up to and including the next newline is discarded, as opposed +to the way comments are treated (@pxref{Comments}). + +Usually, @code{dnl} is immediately followed by an end of line or some +other whitespace. @acronym{GNU} @code{m4} will produce a warning diagnostic if +@code{dnl} is followed by an open parenthesis. In this case, @code{dnl} +will collect and process all arguments, looking for a matching close +parenthesis. All predictable side effects resulting from this +collection will take place. @code{dnl} will return no output. The +input following the matching close parenthesis up to and including the +next newline, on whatever line containing it, will still be discarded. + +@example +dnl(`args are ignored, but side effects occur', +define(`foo', `like this')) while this text is ignored: undefine(`foo') +@error{}m4:stdin:1: Warning: excess arguments to builtin `dnl' ignored +See how `foo' was defined, foo? +@result{}See how foo was defined, like this? +@end example + +If the end of file is encountered without a newline character, a +warning is issued and dnl stops consuming input. + +@example +m4wrap(`m4wrap(`2 hi +')0 hi dnl 1 hi') +@result{} +define(`hi', `HI') +@result{} +^D +@error{}m4:stdin:1: Warning: end of file treated as newline +@result{}0 HI 2 HI +@end example + +@node Changequote +@section Changing the quote characters + +@cindex changing quote delimiters +@cindex quote delimiters, changing +@cindex delimiters, changing +The default quote delimiters can be changed with the builtin +@code{changequote}: + +@deffn Builtin changequote (@dvar{start, `}, @dvar{end, '}) +This sets @var{start} as the new begin-quote delimiter and @var{end} as +the new end-quote delimiter. If both arguments are missing, the default +quotes (@code{`} and @code{'}) are used. If @var{start} is void, then +quoting is disabled. Otherwise, if @var{end} is missing or void, the +default end-quote delimiter (@code{'}) is used. The quote delimiters +can be of any length. + +The expansion of @code{changequote} is void. +@end deffn + +@example +changequote(`[', `]') +@result{} +define([foo], [Macro [foo].]) +@result{} +foo +@result{}Macro foo. +@end example + +The quotation strings can safely contain eight-bit characters. +@ignore +@comment Yuck. I know of no clean way to render an 8-bit character in +@comment both info and dvi. This example uses the `open-guillemot' and +@comment `close-guillemot' characters of the Latin-1 character set. + +@example +define(`a', `b') +@result{} +a +@result{}b +changequote(`', `') +@result{} +a +@result{}a +@end example +@end ignore +If no single character is appropriate, @var{start} and @var{end} can be +of any length. Other implementations cap the delimiter length to five +characters, but @acronym{GNU} has no inherent limit. + +@example +changequote(`[[[', `]]]') +@result{} +define([[[foo]]], [[[Macro [[[[[foo]]]]].]]]) +@result{} +foo +@result{}Macro [[foo]]. +@end example + +Calling @code{changequote} with @var{start} as the empty string will +effectively disable the quoting mechanism, leaving no way to quote text. +However, using an empty string is not portable, as some other +implementations of @code{m4} revert to the default quoting, while others +preserve the prior non-empty delimiter. If @var{start} is not empty, +then an empty @var{end} will use the default end-quote delimiter of +@samp{'}, as otherwise, it would be impossible to end a quoted string. +Again, this is not portable, as some other @code{m4} implementations +reuse @var{start} as the end-quote delimiter, while others preserve the +previous non-empty value. Omitting both arguments restores the default +begin-quote and end-quote delimiters; fortunately this behavior is +portable to all implementations of @code{m4}. + +@example +define(`foo', `Macro `FOO'.') +@result{} +changequote(`', `') +@result{} +foo +@result{}Macro `FOO'. +`foo' +@result{}`Macro `FOO'.' +changequote(`,) +@result{} +foo +@result{}Macro FOO. +@end example + +There is no way in @code{m4} to quote a string containing an unmatched +begin-quote, except using @code{changequote} to change the current +quotes. + +If the quotes should be changed from, say, @samp{[} to @samp{[[}, +temporary quote characters have to be defined. To achieve this, two +calls of @code{changequote} must be made, one for the temporary quotes +and one for the new quotes. + +Macros are recognized in preference to the begin-quote string, so if a +prefix of @var{start} can be recognized as part of a potential macro +name, the quoting mechanism is effectively disabled. Unless you use +@code{changeword} (@pxref{Changeword}), this means that @var{start} +should not begin with a letter, digit, or @samp{_} (underscore). +However, even though quoted strings are not recognized, the quote +characters can still be discerned in macro expansion and in trace +output. + +@example +define(`echo', `$@@') +@result{} +define(`hi', `HI') +@result{} +changequote(`q', `Q') +@result{} +q hi Q hi +@result{}q HI Q HI +echo(hi) +@result{}qHIQ +changequote +@result{} +changequote(`-', `EOF') +@result{} +- hi EOF hi +@result{} hi HI +changequote +@result{} +changequote(`1', `2') +@result{} +hi1hi2 +@result{}hi1hi2 +hi 1hi2 +@result{}HI hi +@end example + +Quotes are recognized in preference to argument collection. In +particular, if @var{start} is a single @samp{(}, then argument +collection is effectively disabled. For portability with other +implementations, it is a good idea to avoid @samp{(}, @samp{,}, and +@samp{)} as the first character in @var{start}. + +@example +define(`echo', `$#:$@@:') +@result{} +define(`hi', `HI') +@result{} +changequote(`(',`)') +@result{} +echo(hi) +@result{}0::hi +changequote +@result{} +changequote(`((', `))') +@result{} +echo(hi) +@result{}1:HI: +echo((hi)) +@result{}0::hi +changequote +@result{} +changequote(`,', `)') +@result{} +echo(hi,hi)bye) +@result{}1:HIhibye: +@end example + +However, if you are not worried about portability, using @samp{(} and +@samp{)} as quoting characters has an interesting property---you can use +it to compute a quoted string containing the expansion of any quoted +text, as long as the expansion results in both balanced quotes and +balanced parentheses. The trick is realizing @code{expand} uses +@samp{$1} unquoted, to trigger its expansion using the normal quoting +characters, but uses extra parentheses to group unquoted commas that +occur in the expansion without consuming whitespace following those +commas. Then @code{_expand} uses @code{changequote} to convert the +extra parentheses back into quoting characters. Note that it takes two +more @code{changequote} invocations to restore the original quotes. +Contrast the behavior on whitespace when using @samp{$*}, via +@code{quote}, to attempt the same task. + +@example +changequote(`[', `]')dnl +define([a], [1, (b)])dnl +define([b], [2])dnl +define([quote], [[$*]])dnl +define([expand], [_$0(($1))])dnl +define([_expand], + [changequote([(], [)])$1changequote`'changequote(`[', `]')])dnl +expand([a, a, [a, a], [[a, a]]]) +@result{}1, (2), 1, (2), a, a, [a, a] +quote(a, a, [a, a], [[a, a]]) +@result{}1,(2),1,(2),a, a,[a, a] +@end example + +If @var{end} is a prefix of @var{start}, the end-quote will be +recognized in preference to a nested begin-quote. In particular, +changing the quotes to have the same string for @var{start} and +@var{end} disables nesting of quotes. When quote nesting is disabled, +it is impossible to double-quote strings across macro expansions, so +using the same string is not done very often. + +@example +define(`hi', `HI') +@result{} +changequote(`""', `"') +@result{} +""hi"""hi" +@result{}hihi +""hi" ""hi" +@result{}hi hi +""hi"" "hi" +@result{}hi" "HI" +changequote +@result{} +`hi`hi'hi' +@result{}hi`hi'hi +changequote(`"', `"') +@result{} +"hi"hi"hi" +@result{}hiHIhi +@end example + +@ignore +@comment And another stress test, not worth documenting in the manual. +@example +define(`aaaaaaaaaaaaaaaaaaaa', `A')define(`q', `"$@@"') +@result{} +changequote(`"', `"') +@result{} +q(q("aaaaaaaaaaaaaaaaaaaa", "a")) +@result{}A,a +@end example +@end ignore + +It is an error if the end of file occurs within a quoted string. + +@comment status: 1 +@example +`hello world' +@result{}hello world +`dangling quote +^D +@error{}m4:stdin:2: ERROR: end of file in string +@end example + +@comment status: 1 +@example +ifelse(`dangling quote +^D +@error{}m4:stdin:1: ERROR: end of file in string +@end example + +@node Changecom +@section Changing the comment delimiters + +@cindex changing comment delimiters +@cindex comment delimiters, changing +@cindex delimiters, changing +The default comment delimiters can be changed with the builtin +macro @code{changecom}: + +@deffn Builtin changecom (@ovar{start}, @dvar{end, @key{NL}}) +This sets @var{start} as the new begin-comment delimiter and @var{end} +as the new end-comment delimiter. If both arguments are missing, or +@var{start} is void, then comments are disabled. Otherwise, if +@var{end} is missing or void, the default end-comment delimiter of +newline is used. The comment delimiters can be of any length. + +The expansion of @code{changecom} is void. +@end deffn + +@example +define(`comment', `COMMENT') +@result{} +# A normal comment +@result{}# A normal comment +changecom(`/*', `*/') +@result{} +# Not a comment anymore +@result{}# Not a COMMENT anymore +But: /* this is a comment now */ while this is not a comment +@result{}But: /* this is a comment now */ while this is not a COMMENT +@end example + +@cindex comments, copied to output +Note how comments are copied to the output, much as if they were quoted +strings. If you want the text inside a comment expanded, quote the +begin-comment delimiter. + +Calling @code{changecom} without any arguments, or with @var{start} as +the empty string, will effectively disable the commenting mechanism. To +restore the original comment start of @samp{#}, you must explicitly ask +for it. If @var{start} is not empty, then an empty @var{end} will use +the default end-comment delimiter of newline, as otherwise, it would be +impossible to end a comment. However, this is not portable, as some +other @code{m4} implementations preserve the previous non-empty +delimiters instead. + +@example +define(`comment', `COMMENT') +@result{} +changecom +@result{} +# Not a comment anymore +@result{}# Not a COMMENT anymore +changecom(`#', `') +@result{} +# comment again +@result{}# comment again +@end example + +The comment strings can safely contain eight-bit characters. +@ignore +@comment Yuck. I know of no clean way to render an 8-bit character in +@comment both info and dvi. This example uses the `open-guillemot' and +@comment `close-guillemot' characters of the Latin-1 character set. + +@example +define(`a', `b') +@result{} +a +@result{}b +changecom(`', `') +@result{} +a +@result{}a +@end example +@end ignore +If no single character is appropriate, @var{start} and @var{end} can be +of any length. Other implementations cap the delimiter length to five +characters, but @acronym{GNU} has no inherent limit. + +Comments are recognized in preference to macros. However, this is not +compatible with other implementations, where macros and even quoting +takes precedence over comments, so it may change in a future release. +For portability, this means that @var{start} should not begin with a +letter, digit, or @samp{_} (underscore), and that neither the +start-quote nor the start-comment string should be a prefix of the +other. + +@example +define(`hi', `HI') +@result{} +define(`hi1hi2', `hello') +@result{} +changecom(`q', `Q') +@result{} +q hi Q hi +@result{}q hi Q HI +changecom(`1', `2') +@result{} +hi1hi2 +@result{}hello +hi 1hi2 +@result{}HI 1hi2 +@end example + +Comments are recognized in preference to argument collection. In +particular, if @var{start} is a single @samp{(}, then argument +collection is effectively disabled. For portability with other +implementations, it is a good idea to avoid @samp{(}, @samp{,}, and +@samp{)} as the first character in @var{start}. + +@example +define(`echo', `$#:$*:$@@:') +@result{} +define(`hi', `HI') +@result{} +changecom(`(',`)') +@result{} +echo(hi) +@result{}0:::(hi) +changecom +@result{} +changecom(`((', `))') +@result{} +echo(hi) +@result{}1:HI:HI: +echo((hi)) +@result{}0:::((hi)) +changecom(`,', `)') +@result{} +echo(hi,hi)bye) +@result{}1:HI,hi)bye:HI,hi)bye: +changecom +@result{} +echo(hi,`,`'hi',hi) +@result{}3:HI,,HI,HI:HI,,`'hi,HI: +echo(hi,`,`'hi',hi`'changecom(`,,', `hi')) +@result{}3:HI,,`'hi,HI:HI,,`'hi,HI: +@end example + +It is an error if the end of file occurs within a comment. + +@comment status: 1 +@example +changecom(`/*', `*/') +@result{} +/*dangling comment +^D +@error{}m4:stdin:2: ERROR: end of file in comment +@end example + +@node Changeword +@section Changing the lexical structure of words + +@cindex lexical structure of words +@cindex words, lexical structure of +@cindex syntax, changing +@cindex changing syntax +@cindex regular expressions +@quotation +The macro @code{changeword} and all associated functionality is +experimental. It is only available if the @option{--enable-changeword} +option was given to @command{configure}, at @acronym{GNU} @code{m4} +installation +time. The functionality will go away in the future, to be replaced by +other new features that are more efficient at providing the same +capabilities. @emph{Do not rely on it}. Please direct your comments +about it the same way you would do for bugs. +@end quotation + +A file being processed by @code{m4} is split into quoted strings, words +(potential macro names) and simple tokens (any other single character). +Initially a word is defined by the following regular expression: + +@comment ignore +@example +[_a-zA-Z][_a-zA-Z0-9]* +@end example + +Using @code{changeword}, you can change this regular expression: + +@deffn {Optional builtin} changeword (@var{regex}) +Changes the regular expression for recognizing macro names to be +@var{regex}. If @var{regex} is empty, use +@samp{[_a-zA-Z][_a-zA-Z0-9]*}. @var{regex} must obey the constraint +that every prefix of the desired final pattern is also accepted by the +regular expression. If @var{regex} contains grouping parentheses, the +macro invoked is the portion that matched the first group, rather than +the entire matching string. + +The expansion of @code{changeword} is void. +The macro @code{changeword} is recognized only with parameters. +@end deffn + +Relaxing the lexical rules of @code{m4} might be useful (for example) if +you wanted to apply translations to a file of numbers: + +@example +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +changeword(`[_a-zA-Z0-9]+') +@result{} +define(`1', `0')1 +@result{}0 +@end example + +Tightening the lexical rules is less useful, because it will generally +make some of the builtins unavailable. You could use it to prevent +accidental call of builtins, for example: + +@example +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +define(`_indir', defn(`indir')) +@result{} +changeword(`_[_a-zA-Z0-9]*') +@result{} +esyscmd(`foo') +@result{}esyscmd(foo) +_indir(`esyscmd', `echo hi') +@result{}hi +@result{} +@end example + +Because @code{m4} constructs its words a character at a time, there +is a restriction on the regular expressions that may be passed to +@code{changeword}. This is that if your regular expression accepts +@samp{foo}, it must also accept @samp{f} and @samp{fo}. + +@example +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +define(`foo +', `bar +') +@result{} +dnl This example wants to recognize changeword, dnl, and `foo\n'. +dnl First, we check that our regexp will match. +regexp(`changeword', `[cd][a-z]*\|foo[ +]') +@result{}0 +regexp(`foo +', `[cd][a-z]*\|foo[ +]') +@result{}0 +regexp(`f', `[cd][a-z]*\|foo[ +]') +@result{}-1 +foo +@result{}foo +changeword(`[cd][a-z]*\|foo[ +]') +@result{} +dnl Even though `foo\n' matches, we forgot to allow `f'. +foo +@result{}foo +changeword(`[cd][a-z]*\|fo*[ +]?') +@result{} +dnl Now we can call `foo\n'. +foo +@result{}bar +@end example + +@ignore +@comment One more test of including newline in a macro name; but this +@comment does not need to be displayed in the manual. This ensures +@comment that line numbering is correct when dnl cuts across include +@comment file boundaries, and when __file__ or __line__ is the last +@comment token in an include file. + +@example +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +define(`bar +', defn(`dnl'))dnl +define(`baz', `dnl +include(`foo') ignored +dnl')dnl +changeword(`\([_a-zA-Z][_a-zA-Z0-9]*\|bar +\)') +@result{} +__file__:__line__ +@result{}stdin:10 +include(`foo') ignored +__file__:__line__ +@result{}stdin:12 +baz ignored +__file__:__line__ +@result{}stdin:14 +define(`bar +', defn(`__file__')) +@result{} +include(`foo') +@result{}examples/foo +define(`bar +', defn(`__line__')) +@result{} +include(`foo') +@result{}1 +__file__:__line__ +@result{}stdin:21 +@end example +@end ignore + +@code{changeword} has another function. If the regular expression +supplied contains any grouped subexpressions, then text outside +the first of these is discarded before symbol lookup. So: + +@example +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics +')m4exit(`77')')dnl +changecom(`/*', `*/')dnl +define(`foo', `bar')dnl +changeword(`#\([_a-zA-Z0-9]*\)') +@result{} +#esyscmd(`echo foo \#foo') +@result{}foo bar +@result{} +@end example + +@code{m4} now requires a @samp{#} mark at the beginning of every +macro invocation, so one can use @code{m4} to preprocess plain +text without losing various words like @samp{divert}. + +In @code{m4}, macro substitution is based on text, while in @TeX{}, it +is based on tokens. @code{changeword} can throw this difference into +relief. For example, here is the same idea represented in @TeX{} and +@code{m4}. First, the @TeX{} version: + +@comment ignore +@example +\def\a@{\message@{Hello@}@} +\catcode`\@@=0 +\catcode`\\=12 +@@a +@@bye +@result{}Hello +@end example + +@noindent +Then, the @code{m4} version: + +@example +ifdef(`changeword', `', `errprint(` skipping: no changeword support +')m4exit(`77')')dnl +define(`a', `errprint(`Hello')')dnl +changeword(`@@\([_a-zA-Z0-9]*\)') +@result{} +@@a +@result{}errprint(Hello) +@end example + +In the @TeX{} example, the first line defines a macro @code{a} to +print the message @samp{Hello}. The second line defines @key{@@} to +be usable instead of @key{\} as an escape character. The third line +defines @key{\} to be a normal printing character, not an escape. +The fourth line invokes the macro @code{a}. So, when @TeX{} is run +on this file, it displays the message @samp{Hello}. + +When the @code{m4} example is passed through @code{m4}, it outputs +@samp{errprint(Hello)}. The reason for this is that @TeX{} does +lexical analysis of macro definition when the macro is @emph{defined}. +@code{m4} just stores the text, postponing the lexical analysis until +the macro is @emph{used}. + +You should note that using @code{changeword} will slow @code{m4} down +by a factor of about seven, once it is changed to something other +than the default regular expression. You can invoke @code{changeword} +with the empty string to restore the default word definition, and regain +the parsing speed. + +@node M4wrap +@section Saving text until end of input + +@cindex saving input +@cindex input, saving +@cindex deferring expansion +@cindex expansion, deferring +It is possible to `save' some text until the end of the normal input has +been seen. Text can be saved, to be read again by @code{m4} when the +normal input has been exhausted. This feature is normally used to +initiate cleanup actions before normal exit, e.g., deleting temporary +files. + +To save input text, use the builtin @code{m4wrap}: + +@deffn Builtin m4wrap (@var{string}, @dots{}) +Stores @var{string} in a safe place, to be reread when end of input is +reached. As a @acronym{GNU} extension, additional arguments are +concatenated with a space to the @var{string}. + +The expansion of @code{m4wrap} is void. +The macro @code{m4wrap} is recognized only with parameters. +@end deffn + +@example +define(`cleanup', `This is the `cleanup' action. +') +@result{} +m4wrap(`cleanup') +@result{} +This is the first and last normal input line. +@result{}This is the first and last normal input line. +^D +@result{}This is the cleanup action. +@end example + +The saved input is only reread when the end of normal input is seen, and +not if @code{m4exit} is used to exit @code{m4}. + +@comment FIXME: this contradicts POSIX, which requires that "If the +@comment m4wrap macro is used multiple times, the arguments specified +@comment shall be processed in the order in which the m4wrap macros were +@comment processed." +It is safe to call @code{m4wrap} from saved text, but then the order in +which the saved text is reread is undefined. If @code{m4wrap} is not used +recursively, the saved pieces of text are reread in the opposite order +in which they were saved (LIFO---last in, first out). However, this +behavior is likely to change in a future release, to match +@acronym{POSIX}, so you should not depend on this order. + +It is possible to emulate @acronym{POSIX} behavior even +with older versions of @acronym{GNU} M4 by including the file +@file{m4-@value{VERSION}/@/examples/@/wrapfifo.m4} from the +distribution: + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`wrapfifo.m4')dnl +@result{}dnl Redefine m4wrap to have FIFO semantics. +@result{}define(`_m4wrap_level', `0')dnl +@result{}define(`m4wrap', +@result{}`ifdef(`m4wrap'_m4wrap_level, +@result{} `define(`m4wrap'_m4wrap_level, +@result{} defn(`m4wrap'_m4wrap_level)`$1')', +@result{} `builtin(`m4wrap', `define(`_m4wrap_level', +@result{} incr(_m4wrap_level))dnl +@result{}m4wrap'_m4wrap_level)dnl +@result{}define(`m4wrap'_m4wrap_level, `$1')')')dnl +include(`wrapfifo.m4') +@result{} +m4wrap(`a`'m4wrap(`c +', `d')')m4wrap(`b') +@result{} +^D +@result{}abc +@end example + +It is likewise possible to emulate LIFO behavior without resorting to +the @acronym{GNU} M4 extension of @code{builtin}, by including the file +@file{m4-@value{VERSION}/@/examples/@/wraplifo.m4} from the +distribution. (Unfortunately, both examples shown here share some +subtle bugs. See if you can find and correct them; or @pxref{Improved +m4wrap, , Answers}). + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`wraplifo.m4')dnl +@result{}dnl Redefine m4wrap to have LIFO semantics. +@result{}define(`_m4wrap_level', `0')dnl +@result{}define(`_m4wrap', defn(`m4wrap'))dnl +@result{}define(`m4wrap', +@result{}`ifdef(`m4wrap'_m4wrap_level, +@result{} `define(`m4wrap'_m4wrap_level, +@result{} `$1'defn(`m4wrap'_m4wrap_level))', +@result{} `_m4wrap(`define(`_m4wrap_level', incr(_m4wrap_level))dnl +@result{}m4wrap'_m4wrap_level)dnl +@result{}define(`m4wrap'_m4wrap_level, `$1')')')dnl +include(`wraplifo.m4') +@result{} +m4wrap(`a`'m4wrap(`c +', `d')')m4wrap(`b') +@result{} +^D +@result{}bac +@end example + +Here is an example of implementing a factorial function using +@code{m4wrap}: + +@example +define(`f', `ifelse(`$1', `0', `Answer: 0!=1 +', eval(`$1>1'), `0', `Answer: $2$1=eval(`$2$1') +', `m4wrap(`f(decr(`$1'), `$2$1*')')')') +@result{} +f(`10') +@result{} +^D +@result{}Answer: 10*9*8*7*6*5*4*3*2*1=3628800 +@end example + +Invocations of @code{m4wrap} at the same recursion level are +concatenated and rescanned as usual: + +@example +define(`aa', `AA +') +@result{} +m4wrap(`a')m4wrap(`a') +@result{} +^D +@result{}AA +@end example + +@noindent +however, the transition between recursion levels behaves like an end of +file condition between two input files. + +@comment status: 1 +@example +m4wrap(`m4wrap(`)')len(abc') +@result{} +^D +@error{}m4:stdin:1: ERROR: end of file in argument list +@end example + +@node File Inclusion +@chapter File inclusion + +@cindex file inclusion +@cindex inclusion, of files +@code{m4} allows you to include named files at any point in the input. + +@menu +* Include:: Including named files +* Search Path:: Searching for include files +@end menu + +@node Include +@section Including named files + +There are two builtin macros in @code{m4} for including files: + +@deffn Builtin include (@var{file}) +@deffnx Builtin sinclude (@var{file}) +Both macros cause the file named @var{file} to be read by +@code{m4}. When the end of the file is reached, input is resumed from +the previous input file. + +The expansion of @code{include} and @code{sinclude} is therefore the +contents of @var{file}. + +If @var{file} does not exist, is a directory, or cannot otherwise be +read, the expansion is void, +and @code{include} will fail with an error while @code{sinclude} is +silent. The empty string counts as a file that does not exist. + +The macros @code{include} and @code{sinclude} are recognized only with +parameters. +@end deffn + +@comment status: 1 +@example +include(`none') +@error{}m4:stdin:1: cannot open `none': No such file or directory +@result{} +include() +@error{}m4:stdin:2: cannot open `': No such file or directory +@result{} +sinclude(`none') +@result{} +sinclude() +@result{} +@end example + +The rest of this section assumes that @code{m4} is invoked with the +@option{-I} option (@pxref{Preprocessor features, , Invoking m4}) +pointing to the @file{m4-@value{VERSION}/@/examples} +directory shipped as part of the @acronym{GNU} @code{m4} package. The +file @file{m4-@value{VERSION}/@/examples/@/incl.m4} in the distribution +contains the lines: + +@comment ignore +@example +$ @kbd{cat examples/incl.m4} +@result{}Include file start +@result{}foo +@result{}Include file end +@end example + +Normally file inclusion is used to insert the contents of a file +into the input stream. The contents of the file will be read by +@code{m4} and macro calls in the file will be expanded: + +@comment examples +@example +$ @kbd{m4 -I examples} +define(`foo', `FOO') +@result{} +include(`incl.m4') +@result{}Include file start +@result{}FOO +@result{}Include file end +@result{} +@end example + +The fact that @code{include} and @code{sinclude} expand to the contents +of the file can be used to define macros that operate on entire files. +Here is an example, which defines @samp{bar} to expand to the contents +of @file{incl.m4}: + +@comment examples +@example +$ @kbd{m4 -I examples} +define(`bar', include(`incl.m4')) +@result{} +This is `bar': >>bar<< +@result{}This is bar: >>Include file start +@result{}foo +@result{}Include file end +@result{}<< +@end example + +This use of @code{include} is not trivial, though, as files can contain +quotes, commas, and parentheses, which can interfere with the way the +@code{m4} parser works. @acronym{GNU} @code{m4} seamlessly concatenates +the file contents with the next character, even if the included file +ended in the middle of a comment, string, or macro call. These +conditions are only treated as end of file errors if specified as input +files on the command line. + +In @acronym{GNU} @code{m4}, an alternative method of reading files is +using @code{undivert} (@pxref{Undivert}) on a named file. + +@ignore +@comment Test that include(`file/') detects that file is not a +@comment directory; we can assume that the current directory contains a +@comment Makefile. mingw fails with EINVAL rather than ENOTDIR. + +@comment status: 1 +@comment xerr: ignore +@example +include(`Makefile/') +@error{}m4:stdin:1: cannot open `Makefile/': Not a directory +@result{} +@end example + +@comment POSIX allows, but doesn't require, failure on reading +@comment directories. But since they aren't text files, it never makes +@comment sense, so we globally forbid it even if fopen doesn't. mingw +@comment fails with EACCES rather than EISDIR. + +@comment status: 1 +@comment xerr: ignore +@example +include(`.') +@error{}m4:stdin:1: cannot open `.': Is a directory +@result{} +@end example + +@comment Meanwhile, ignore errors with sinclude. + +@example +sinclude(`Makefile/') +@result{} +sinclude(`.') +@result{} +@end example +@end ignore + +@node Search Path +@section Searching for include files + +@cindex search path for included files +@cindex included files, search path for +@cindex @acronym{GNU} extensions +@acronym{GNU} @code{m4} allows included files to be found in other directories +than the current working directory. + +@cindex @env{M4PATH} +If the @option{--prepend-include} or @option{-B} command-line option was +provided (@pxref{Preprocessor features, , Invoking m4}), those +directories are searched first, in reverse order that those options were +listed on the command line. Then @code{m4} looks in the current working +directory. Next comes the directories specified with the +@option{--include} or @option{-I} option, in the order found on the +command line. Finally, if the @env{M4PATH} environment variable is set, +it is expected to contain a colon-separated list of directories, which +will be searched in order. + +If the automatic search for include-files causes trouble, the @samp{p} +debug flag (@pxref{Debug Levels}) can help isolate the problem. + +@node Diversions +@chapter Diverting and undiverting output + +@cindex deferring output +Diversions are a way of temporarily saving output. The output of +@code{m4} can at any time be diverted to a temporary file, and be +reinserted into the output stream, @dfn{undiverted}, again at a later +time. + +@cindex @env{TMPDIR} +Numbered diversions are counted from 0 upwards, diversion number 0 +being the normal output stream. The number of simultaneous diversions +is limited mainly by the memory used to describe them, because @acronym{GNU} +@code{m4} tries to keep diversions in memory. However, there is a +limit to the overall memory usable by all diversions taken altogether +(512K, currently). When this maximum is about to be exceeded, +a temporary file is opened to receive the contents of the biggest +diversion still in memory, freeing this memory for other diversions. +When creating the temporary file, @code{m4} honors the value of the +environment variable @env{TMPDIR}, and falls back to @file{/tmp}. +So, it is theoretically possible that the number and aggregate size of +diversions is limited only by available disk space. + +@ignore +@comment We need to test spilled diversions, but don't need to expose +@comment this highly repetitive test in the manual. + +@example +divert(`-1')define(`f', `.') +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +divert`'dnl +len(f) +@result{}1048576 +divert(`1') +f +divert(`2') +f +divert(`-1')undivert +divert(`1')bye +^D +@result{}bye +@end example + +@comment Another test of spilled diversions. + +@example +divert(`-1')define(`f', `.') +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +define(`f', defn(`f')defn(`f')) +divert`'dnl +len(f) +@result{}1048576 +divert(`1') +f +m4exit +@end example + +@comment Catch regression in 1.4.10 with spilled diversions. + +@example +ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics +')m4exit(`77')')dnl +changequote(`[', `]')dnl +syscmd([echo 'divert(1)hi +format(%1000000d, 1)' | ']__program__[' | sed -n 1p])dnl +@result{}hi +sysval +@result{}0 +@end example + +@comment Avoid quadratic copying time when transferring diversions; +@comment test both in-memory and spilled to file. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`forloop2.m4')dnl +divert(`1')format(`%10000s', `')dnl +forloop(`i', `1', `10000', + `divert(incr(i))undivert(i)')dnl +divert(`9001')format(`%1000000s', `')dnl +forloop(`i', `9001', `10000', + `divert(incr(i))undivert(i)')dnl +divert(`-1')undivert +@end example +@end ignore + +Diversions make it possible to generate output in a different order than +the input was read. It is possible to implement topological sorting +dependencies. For example, @acronym{GNU} Autoconf makes use of +diversions under the hood to ensure that the expansion of a prerequisite +macro appears in the output prior to the expansion of a dependent macro, +regardless of which order the two macros were invoked in the user's +input file. + +@menu +* Divert:: Diverting output +* Undivert:: Undiverting output +* Divnum:: Diversion numbers +* Cleardivert:: Discarding diverted text +@end menu + +@node Divert +@section Diverting output + +@cindex diverting output to files +@cindex output, diverting to files +@cindex files, diverting output to +Output is diverted using @code{divert}: + +@deffn Builtin divert (@dvar{number, 0}) +The current diversion is changed to @var{number}. If @var{number} is left +out or empty, it is assumed to be zero. If @var{number} cannot be +parsed, the diversion is unchanged. + +The expansion of @code{divert} is void. +@end deffn + +When all the @code{m4} input will have been processed, all existing +diversions are automatically undiverted, in numerical order. + +@example +divert(`1') +This text is diverted. +divert +@result{} +This text is not diverted. +@result{}This text is not diverted. +^D +@result{} +@result{}This text is diverted. +@end example + +Several calls of @code{divert} with the same argument do not overwrite +the previous diverted text, but append to it. Diversions are printed +after any wrapped text is expanded. + +@example +define(`text', `TEXT') +@result{} +divert(`1')`diverted text.' +divert +@result{} +m4wrap(`Wrapped text precedes ') +@result{} +^D +@result{}Wrapped TEXT precedes diverted text. +@end example + +@cindex discarding input +@cindex input, discarding +If output is diverted to a negative diversion, it is simply discarded. +This can be used to suppress unwanted output. A common example of +unwanted output is the trailing newlines after macro definitions. Here +is a common programming idiom in @code{m4} for avoiding them. + +@example +divert(`-1') +define(`foo', `Macro `foo'.') +define(`bar', `Macro `bar'.') +divert +@result{} +@end example + +@cindex @acronym{GNU} extensions +Traditional implementations only supported ten diversions. But as a +@acronym{GNU} extension, diversion numbers can be as large as positive +integers will allow, rather than treating a multi-digit diversion number +as a request to discard text. + +@example +divert(eval(`1<<28'))world +divert(`2')hello +^D +@result{}hello +@result{}world +@end example + +Note that @code{divert} is an English word, but also an active macro +without arguments. When processing plain text, the word might appear in +normal text and be unintentionally swallowed as a macro invocation. One +way to avoid this is to use the @option{-P} option to rename all +builtins (@pxref{Operation modes, , Invoking m4}). Another is to write +a wrapper that requires a parameter to be recognized. + +@example +We decided to divert the stream for irrigation. +@result{}We decided to the stream for irrigation. +define(`divert', `ifelse(`$#', `0', ``$0'', `builtin(`$0', $@@)')') +@result{} +divert(`-1') +Ignored text. +divert(`0') +@result{} +We decided to divert the stream for irrigation. +@result{}We decided to divert the stream for irrigation. +@end example + +@node Undivert +@section Undiverting output + +Diverted text can be undiverted explicitly using the builtin +@code{undivert}: + +@deffn Builtin undivert (@ovar{diversions@dots{}}) +Undiverts the numeric @var{diversions} given by the arguments, in the +order given. If no arguments are supplied, all diversions are +undiverted, in numerical order. + +@cindex file inclusion +@cindex inclusion, of files +@cindex @acronym{GNU} extensions +As a @acronym{GNU} extension, @var{diversions} may contain non-numeric +strings, which are treated as the names of files to copy into the output +without expansion. A warning is issued if a file could not be opened. + +The expansion of @code{undivert} is void. +@end deffn + +@example +divert(`1') +This text is diverted. +divert +@result{} +This text is not diverted. +@result{}This text is not diverted. +undivert(`1') +@result{} +@result{}This text is diverted. +@result{} +@end example + +Notice the last two blank lines. One of them comes from the newline +following @code{undivert}, the other from the newline that followed the +@code{divert}! A diversion often starts with a blank line like this. + +When diverted text is undiverted, it is @emph{not} reread by @code{m4}, +but rather copied directly to the current output, and it is therefore +not an error to undivert into a diversion. Undiverting the empty string +is the same as specifying diversion 0; in either case nothing happens +since the output has already been flushed. + +@example +divert(`1')diverted text +divert +@result{} +undivert() +@result{} +undivert(`0') +@result{} +undivert +@result{}diverted text +@result{} +divert(`1')more +divert(`2')undivert(`1')diverted text`'divert +@result{} +undivert(`1') +@result{} +undivert(`2') +@result{}more +@result{}diverted text +@end example + +When a diversion has been undiverted, the diverted text is discarded, +and it is not possible to bring back diverted text more than once. + +@example +divert(`1') +This text is diverted first. +divert(`0')undivert(`1')dnl +@result{} +@result{}This text is diverted first. +undivert(`1') +@result{} +divert(`1') +This text is also diverted but not appended. +divert(`0')undivert(`1')dnl +@result{} +@result{}This text is also diverted but not appended. +@end example + +Attempts to undivert the current diversion are silently ignored. Thus, +when the current diversion is not 0, the current diversion does not get +rearranged among the other diversions. + +@example +divert(`1')one +divert(`2')two +divert(`3')three +divert(`2')undivert`'dnl +divert`'undivert`'dnl +@result{}two +@result{}one +@result{}three +@end example + +@cindex @acronym{GNU} extensions +@cindex file inclusion +@cindex inclusion, of files +@acronym{GNU} @code{m4} allows named files to be undiverted. Given a +non-numeric argument, the contents of the file named will be copied, +uninterpreted, to the current output. This complements the builtin +@code{include} (@pxref{Include}). To illustrate the difference, assume +the file @file{foo} contains: + +@comment ignore +@example +$ @kbd{cat foo} +bar +@end example + +@noindent +then + +@example +define(`bar', `BAR') +@result{} +undivert(`foo') +@result{}bar +@result{} +include(`foo') +@result{}BAR +@result{} +@end example + +If the file is not found (or cannot be read), an error message is +issued, and the expansion is void. It is possible to intermix files +and diversion numbers. + +@example +divert(`1')diversion one +divert(`2')undivert(`foo')dnl +divert(`3')diversion three +divert`'dnl +undivert(`1', `2', `foo', `3')dnl +@result{}diversion one +@result{}bar +@result{}bar +@result{}diversion three +@end example + +@node Divnum +@section Diversion numbers + +@cindex diversion numbers +The current diversion is tracked by the builtin @code{divnum}: + +@deffn Builtin divnum +Expands to the number of the current diversion. +@end deffn + +@example +Initial divnum +@result{}Initial 0 +divert(`1') +Diversion one: divnum +divert(`2') +Diversion two: divnum +^D +@result{} +@result{}Diversion one: 1 +@result{} +@result{}Diversion two: 2 +@end example + +@node Cleardivert +@section Discarding diverted text + +@cindex discarding diverted text +@cindex diverted text, discarding +Often it is not known, when output is diverted, whether the diverted +text is actually needed. Since all non-empty diversion are brought back +on the main output stream when the end of input is seen, a method of +discarding a diversion is needed. If all diversions should be +discarded, the easiest is to end the input to @code{m4} with +@samp{divert(`-1')} followed by an explicit @samp{undivert}: + +@example +divert(`1') +Diversion one: divnum +divert(`2') +Diversion two: divnum +divert(`-1') +undivert +^D +@end example + +@noindent +No output is produced at all. + +Clearing selected diversions can be done with the following macro: + +@deffn Composite cleardivert (@ovar{diversions@dots{}}) +Discard the contents of each of the listed numeric @var{diversions}. +@end deffn + +@example +define(`cleardivert', +`pushdef(`_n', divnum)divert(`-1')undivert($@@)divert(_n)popdef(`_n')') +@result{} +@end example + +It is called just like @code{undivert}, but the effect is to clear the +diversions, given by the arguments. (This macro has a nasty bug! You +should try to see if you can find it and correct it; or @pxref{Improved +cleardivert, , Answers}). + +@node Text handling +@chapter Macros for text handling + +There are a number of builtins in @code{m4} for manipulating text in +various ways, extracting substrings, searching, substituting, and so on. + +@menu +* Len:: Calculating length of strings +* Index macro:: Searching for substrings +* Regexp:: Searching for regular expressions +* Substr:: Extracting substrings +* Translit:: Translating characters +* Patsubst:: Substituting text by regular expression +* Format:: Formatting strings (printf-like) +@end menu + +@node Len +@section Calculating length of strings + +@cindex length of strings +@cindex strings, length of +The length of a string can be calculated by @code{len}: + +@deffn Builtin len (@var{string}) +Expands to the length of @var{string}, as a decimal number. + +The macro @code{len} is recognized only with parameters. +@end deffn + +@example +len() +@result{}0 +len(`abcdef') +@result{}6 +@end example + +@node Index macro +@section Searching for substrings + +@cindex substrings, locating +Searching for substrings is done with @code{index}: + +@deffn Builtin index (@var{string}, @var{substring}) +Expands to the index of the first occurrence of @var{substring} in +@var{string}. The first character in @var{string} has index 0. If +@var{substring} does not occur in @var{string}, @code{index} expands to +@samp{-1}. + +The macro @code{index} is recognized only with parameters. +@end deffn + +@example +index(`gnus, gnats, and armadillos', `nat') +@result{}7 +index(`gnus, gnats, and armadillos', `dag') +@result{}-1 +@end example + +Omitting @var{substring} evokes a warning, but still produces output; +contrast this with an empty @var{substring}. + +@example +index(`abc') +@error{}m4:stdin:1: Warning: too few arguments to builtin `index' +@result{}0 +index(`abc', `') +@result{}0 +index(`abc', `b') +@result{}1 +@end example + +@node Regexp +@section Searching for regular expressions + +@cindex basic regular expressions +@cindex regular expressions +@cindex expressions, regular +@cindex @acronym{GNU} extensions +Searching for regular expressions is done with the builtin +@code{regexp}: + +@deffn Builtin regexp (@var{string}, @var{regexp}, @ovar{replacement}) +Searches for @var{regexp} in @var{string}. The syntax for regular +expressions is the same as in @acronym{GNU} Emacs, which is similar to +@acronym{BRE, Basic Regular Expressions} in @acronym{POSIX}. +@ifnothtml +@xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs +Manual}. +@end ifnothtml +@ifhtml +See +@uref{http://www.gnu.org/@/software/@/emacs/@/manual/@/emacs.html#Regexps, +Syntax of Regular Expressions} in the @acronym{GNU} Emacs Manual. +@end ifhtml +Support for @acronym{ERE, Extended Regular Expressions} is not +available, but will be added in @acronym{GNU} M4 2.0. + +If @var{replacement} is omitted, @code{regexp} expands to the index of +the first match of @var{regexp} in @var{string}. If @var{regexp} does +not match anywhere in @var{string}, it expands to -1. + +If @var{replacement} is supplied, and there was a match, @code{regexp} +changes the expansion to this argument, with @samp{\@var{n}} substituted +by the text matched by the @var{n}th parenthesized sub-expression of +@var{regexp}, up to nine sub-expressions. The escape @samp{\&} is +replaced by the text of the entire regular expression matched. For +all other characters, @samp{\} treats the next character literally. A +warning is issued if there were fewer sub-expressions than the +@samp{\@var{n}} requested, or if there is a trailing @samp{\}. If there +was no match, @code{regexp} expands to the empty string. + +The macro @code{regexp} is recognized only with parameters. +@end deffn + +@example +regexp(`GNUs not Unix', `\<[a-z]\w+') +@result{}5 +regexp(`GNUs not Unix', `\a-c-a') +@result{}<;>abcba +translit(`abcdef', `aabdef', `bcged') +@result{}bgced +@end example + +In the @sc{ascii} encoding, the first example deletes all uppercase +letters, the second converts lowercase to uppercase, and the third +`mirrors' all uppercase letters, while converting them to lowercase. +The two first cases are by far the most common, even though they are not +portable to @sc{ebcdic} or other encodings. The fourth example shows a +range ending in @samp{-}, as well as back-to-back ranges. The final +example shows that @samp{a} is mapped to @samp{b}, not @samp{c}; the +resulting @samp{b} is not further remapped to @samp{g}; the @samp{d} and +@samp{e} are swapped, and the @samp{f} is discarded. + +@ignore +@comment No need to fight 8-bit characters, as it is difficult to get +@comment rendering right in both info and dvi. + +@example +translit(`abc~', `~-') +@result{}abc +@end example + +@comment Stress test short arguments, since they use a different code +@comment path. +@example +translit(`abcdeabcde', `a') +@result{}bcdebcde +translit(`abcdeabcde', `ab') +@result{}cdecde +translit(`abcdeabcde', `a', `f') +@result{}fbcdefbcde +translit(`abcdeabcde', `a', `f') +@result{}fbcdefbcde +translit(`abcdeabcde', `a', `fg') +@result{}fbcdefbcde +translit(`abcdeabcde', `ab', `f') +@result{}fcdefcde +translit(`abcdeabcde', `ab', `fg') +@result{}fgcdefgcde +translit(`abcdeabcde', `ab', `ba') +@result{}bacdebacde +translit(`abcdeabcde', `e', `f') +@result{}abcdfabcdf +translit(`abc', `', `cde') +@result{}abc +translit(`', `a', `bc') +@result{} +@end example +@end ignore + +Omitting @var{chars} evokes a warning, but still produces output. + +@example +translit(`abc') +@error{}m4:stdin:1: Warning: too few arguments to builtin `translit' +@result{}abc +@end example + +@node Patsubst +@section Substituting text by regular expression + +@cindex basic regular expressions +@cindex regular expressions +@cindex expressions, regular +@cindex pattern substitution +@cindex substitution by regular expression +@cindex @acronym{GNU} extensions +Global substitution in a string is done by @code{patsubst}: + +@deffn Builtin patsubst (@var{string}, @var{regexp}, @ovar{replacement}) +Searches @var{string} for matches of @var{regexp}, and substitutes +@var{replacement} for each match. The syntax for regular expressions +is the same as in @acronym{GNU} Emacs (@pxref{Regexp}). + +The parts of @var{string} that are not covered by any match of +@var{regexp} are copied to the expansion. Whenever a match is found, the +search proceeds from the end of the match, so a character from +@var{string} will never be substituted twice. If @var{regexp} matches a +string of zero length, the start position for the search is incremented, +to avoid infinite loops. + +When a replacement is to be made, @var{replacement} is inserted into +the expansion, with @samp{\@var{n}} substituted by the text matched by +the @var{n}th parenthesized sub-expression of @var{patsubst}, for up to +nine sub-expressions. The escape @samp{\&} is replaced by the text of +the entire regular expression matched. For all other characters, +@samp{\} treats the next character literally. A warning is issued if +there were fewer sub-expressions than the @samp{\@var{n}} requested, or +if there is a trailing @samp{\}. + +The @var{replacement} argument can be omitted, in which case the text +matched by @var{regexp} is deleted. + +The macro @code{patsubst} is recognized only with parameters. +@end deffn + +@example +patsubst(`GNUs not Unix', `^', `OBS: ') +@result{}OBS: GNUs not Unix +patsubst(`GNUs not Unix', `\<', `OBS: ') +@result{}OBS: GNUs OBS: not OBS: Unix +patsubst(`GNUs not Unix', `\w*', `(\&)') +@result{}(GNUs)() (not)() (Unix)() +patsubst(`GNUs not Unix', `\w+', `(\&)') +@result{}(GNUs) (not) (Unix) +patsubst(`GNUs not Unix', `[A-Z][a-z]+') +@result{}GN not@w{ } +patsubst(`GNUs not Unix', `not', `NOT\') +@error{}m4:stdin:6: Warning: trailing \ ignored in replacement +@result{}GNUs NOT Unix +@end example + +Here is a slightly more realistic example, which capitalizes individual +words or whole sentences, by substituting calls of the macros +@code{upcase} and @code{downcase} into the strings. + +@deffn Composite upcase (@var{text}) +@deffnx Composite downcase (@var{text}) +@deffnx Composite capitalize (@var{text}) +Expand to @var{text}, but with capitalization changed: @code{upcase} +changes all letters to upper case, @code{downcase} changes all letters +to lower case, and @code{capitalize} changes the first character of each +word to upper case and the remaining characters to lower case. +@end deffn + +First, an example of their usage, using implementations distributed in +@file{m4-@value{VERSION}/@/examples/@/capitalize.m4}. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`capitalize.m4') +@result{} +upcase(`GNUs not Unix') +@result{}GNUS NOT UNIX +downcase(`GNUs not Unix') +@result{}gnus not unix +capitalize(`GNUs not Unix') +@result{}Gnus Not Unix +@end example + +Now for the implementation. There is a helper macro @code{_capitalize} +which puts only its first word in mixed case. Then @code{capitalize} +merely parses out the words, and replaces them with an invocation of +@code{_capitalize}. (As presented here, the @code{capitalize} macro has +some subtle flaws. You should try to see if you can find and correct +them; or @pxref{Improved capitalize, , Answers}). + +@comment examples +@example +$ @kbd{m4 -I examples} +undivert(`capitalize.m4')dnl +@result{}divert(`-1') +@result{}# upcase(text) +@result{}# downcase(text) +@result{}# capitalize(text) +@result{}# change case of text, simple version +@result{}define(`upcase', `translit(`$*', `a-z', `A-Z')') +@result{}define(`downcase', `translit(`$*', `A-Z', `a-z')') +@result{}define(`_capitalize', +@result{} `regexp(`$1', `^\(\w\)\(\w*\)', +@result{} `upcase(`\1')`'downcase(`\2')')') +@result{}define(`capitalize', `patsubst(`$1', `\w+', `_$0(`\&')')') +@result{}divert`'dnl +@end example + +While @code{regexp} replaces the whole input with the replacement as +soon as there is a match, @code{patsubst} replaces each +@emph{occurrence} of a match and preserves non-matching pieces: + +@example +define(`patreg', +`patsubst($@@) +regexp($@@)')dnl +patreg(`bar foo baz Foo', `foo\|Foo', `FOO') +@result{}bar FOO baz FOO +@result{}FOO +patreg(`aba abb 121', `\(.\)\(.\)\1', `\2\1\2') +@result{}bab abb 212 +@result{}bab +@end example + +Omitting @var{regexp} evokes a warning, but still produces output; +contrast this with an empty @var{regexp} argument. + +@example +patsubst(`abc') +@error{}m4:stdin:1: Warning: too few arguments to builtin `patsubst' +@result{}abc +patsubst(`abc', `') +@result{}abc +patsubst(`abc', `', `\\-') +@result{}\-a\-b\-c\- +@end example + +@node Format +@section Formatting strings (printf-like) + +@cindex formatted output +@cindex output, formatted +@cindex @acronym{GNU} extensions +Formatted output can be made with @code{format}: + +@deffn Builtin format (@var{format-string}, @dots{}) +Works much like the C function @code{printf}. The first argument +@var{format-string} can contain @samp{%} specifications which are +satisfied by additional arguments, and the expansion of @code{format} is +the formatted string. + +The macro @code{format} is recognized only with parameters. +@end deffn + +Its use is best described by a few examples: + +@comment This test is a bit fragile, if someone tries to port to a +@comment platform without infinity. +@example +define(`foo', `The brown fox jumped over the lazy dog') +@result{} +format(`The string "%s" uses %d characters', foo, len(foo)) +@result{}The string "The brown fox jumped over the lazy dog" uses 38 characters +format(`%*.*d', `-1', `-1', `1') +@result{}1 +format(`%.0f', `56789.9876') +@result{}56790 +len(format(`%-*X', `5000', `1')) +@result{}5000 +ifelse(format(`%010F', `infinity'), ` INF', `success', + format(`%010F', `infinity'), ` INFINITY', `success', + format(`%010F', `infinity')) +@result{}success +ifelse(format(`%.1A', `1.999'), `0X1.0P+1', `success', + format(`%.1A', `1.999'), `0X2.0P+0', `success', + format(`%.1A', `1.999')) +@result{}success +format(`%g', `0xa.P+1') +@result{}20 +@end example + +Using the @code{forloop} macro defined earlier (@pxref{Forloop}), this +example shows how @code{format} can be used to produce tabular output. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`forloop.m4') +@result{} +forloop(`i', `1', `10', `format(`%6d squared is %10d +', i, eval(i**2))') +@result{} 1 squared is 1 +@result{} 2 squared is 4 +@result{} 3 squared is 9 +@result{} 4 squared is 16 +@result{} 5 squared is 25 +@result{} 6 squared is 36 +@result{} 7 squared is 49 +@result{} 8 squared is 64 +@result{} 9 squared is 81 +@result{} 10 squared is 100 +@result{} +@end example + +The builtin @code{format} is modeled after the ANSI C @samp{printf} +function, and supports these @samp{%} specifiers: @samp{c}, @samp{s}, +@samp{d}, @samp{o}, @samp{x}, @samp{X}, @samp{u}, @samp{a}, @samp{A}, +@samp{e}, @samp{E}, @samp{f}, @samp{F}, @samp{g}, @samp{G}, and +@samp{%}; it supports field widths and precisions, and the flags +@samp{+}, @samp{-}, @samp{ }, @samp{0}, @samp{#}, and @samp{'}. For +integer specifiers, the width modifiers @samp{hh}, @samp{h}, and +@samp{l} are recognized, and for floating point specifiers, the width +modifier @samp{l} is recognized. Items not yet supported include +positional arguments, the @samp{n}, @samp{p}, @samp{S}, and @samp{C} +specifiers, the @samp{z}, @samp{t}, @samp{j}, @samp{L} and @samp{ll} +modifiers, and any platform extensions available in the native +@code{printf}. For more details on the functioning of @code{printf}, +see the C Library Manual, or the @acronym{POSIX} specification (for +example, @samp{%a} is supported even on platforms that haven't yet +implemented C99 hexadecimal floating point output natively). + +Unrecognized specifiers result in a warning. It is anticipated that a +future release of @acronym{GNU} @code{m4} will support more specifiers, +and give better warnings when various problems such as overflow are +encountered. Likewise, escape sequences are not yet recognized. + +@example +format(`%p', `0') +@error{}m4:stdin:1: Warning: unrecognized specifier in `%p' +@result{} +@end example + +@node Arithmetic +@chapter Macros for doing arithmetic + +@cindex arithmetic +@cindex integer arithmetic +Integer arithmetic is included in @code{m4}, with a C-like syntax. As +convenient shorthands, there are builtins for simple increment and +decrement operations. + +@menu +* Incr:: Decrement and increment operators +* Eval:: Evaluating integer expressions +@end menu + +@node Incr +@section Decrement and increment operators + +@cindex decrement operator +@cindex increment operator +Increment and decrement of integers are supported using the builtins +@code{incr} and @code{decr}: + +@deffn Builtin incr (@var{number}) +@deffnx Builtin decr (@var{number}) +Expand to the numerical value of @var{number}, incremented +or decremented, respectively, by one. Except for the empty string, the +expansion is empty if @var{number} could not be parsed. + +The macros @code{incr} and @code{decr} are recognized only with +parameters. +@end deffn + +@example +incr(`4') +@result{}5 +decr(`7') +@result{}6 +incr() +@error{}m4:stdin:3: empty string treated as 0 in builtin `incr' +@result{}1 +decr() +@error{}m4:stdin:4: empty string treated as 0 in builtin `decr' +@result{}-1 +@end example + +@node Eval +@section Evaluating integer expressions + +@cindex integer expression evaluation +@cindex evaluation, of integer expressions +@cindex expressions, evaluation of integer +Integer expressions are evaluated with @code{eval}: + +@deffn Builtin eval (@var{expression}, @dvar{radix, 10}, @ovar{width}) +Expands to the value of @var{expression}. The expansion is empty +if a problem is encountered while parsing the arguments. If specified, +@var{radix} and @var{width} control the format of the output. + +Calculations are done with 32-bit signed numbers. Overflow silently +results in wraparound. A warning is issued if division by zero is +attempted, or if @var{expression} could not be parsed. + +Expressions can contain the following operators, listed in order of +decreasing precedence. + +@table @samp +@item () +Parentheses +@item + - ~ ! +Unary plus and minus, and bitwise and logical negation +@item ** +Exponentiation +@item * / % +Multiplication, division, and modulo +@item + - +Addition and subtraction +@item << >> +Shift left or right +@item > >= < <= +Relational operators +@item == != +Equality operators +@item & +Bitwise and +@item ^ +Bitwise exclusive-or +@item | +Bitwise or +@item && +Logical and +@item || +Logical or +@end table + +The macro @code{eval} is recognized only with parameters. +@end deffn + +All binary operators, except exponentiation, are left associative. C +operators that perform variable assignment, such as @samp{+=} or +@samp{--}, are not implemented, since @code{eval} only operates on +constants, not variables. Attempting to use them results in an error. +However, since traditional implementations treated @samp{=} as an +undocumented alias for @samp{==} as opposed to an assignment operator, +this usage is supported as a special case. Be aware that a future +version of @acronym{GNU} M4 may support assignment semantics as an +extension when @acronym{POSIX} mode is not requested, and that using +@samp{=} to check equality is not portable. + +@comment status: 1 +@example +eval(`2 = 2') +@error{}m4:stdin:1: Warning: recommend ==, not =, for equality operator +@result{}1 +eval(`++0') +@error{}m4:stdin:2: invalid operator in eval: ++0 +@result{} +eval(`0 |= 1') +@error{}m4:stdin:3: invalid operator in eval: 0 |= 1 +@result{} +@end example + +Note that some older @code{m4} implementations use @samp{^} as an +alternate operator for the exponentiation, although @acronym{POSIX} +requires the C behavior of bitwise exclusive-or. The precedence of the +negation operators, @samp{~} and @samp{!}, was traditionally lower than +equality. The unary operators could not be used reliably more than once +on the same term without intervening parentheses. The traditional +precedence of the equality operators @samp{==} and @samp{!=} was +identical instead of lower than the relational operators such as +@samp{<}, even through @acronym{GNU} M4 1.4.8. Starting with version +1.4.9, @acronym{GNU} M4 correctly follows @acronym{POSIX} precedence +rules. M4 scripts designed to be portable between releases must be +aware that parentheses may be required to enforce C precedence rules. +Likewise, division by zero, even in the unused branch of a +short-circuiting operator, is not always well-defined in other +implementations. + +Following are some examples where the current version of M4 follows C +precedence rules, but where older versions and some other +implementations of @code{m4} require explicit parentheses to get the +correct result: + +@example +eval(`1 == 2 > 0') +@result{}1 +eval(`(1 == 2) > 0') +@result{}0 +eval(`! 0 * 2') +@result{}2 +eval(`! (0 * 2)') +@result{}1 +eval(`1 | 1 ^ 1') +@result{}1 +eval(`(1 | 1) ^ 1') +@result{}0 +eval(`+ + - ~ ! ~ 0') +@result{}1 +eval(`2 || 1 / 0') +@result{}1 +eval(`0 || 1 / 0') +@error{}m4:stdin:9: divide by zero in eval: 0 || 1 / 0 +@result{} +eval(`0 && 1 % 0') +@result{}0 +eval(`2 && 1 % 0') +@error{}m4:stdin:11: modulo by zero in eval: 2 && 1 % 0 +@result{} +@end example + +@cindex @acronym{GNU} extensions +As a @acronym{GNU} extension, the operator @samp{**} performs integral +exponentiation. The operator is right-associative, and if evaluated, +the exponent must be non-negative, and at least one of the arguments +must be non-zero, or a warning is issued. + +@example +eval(`2 ** 3 ** 2') +@result{}512 +eval(`(2 ** 3) ** 2') +@result{}64 +eval(`0 ** 1') +@result{}0 +eval(`2 ** 0') +@result{}1 +eval(`0 ** 0') +@result{} +@error{}m4:stdin:5: divide by zero in eval: 0 ** 0 +eval(`4 ** -2') +@error{}m4:stdin:6: negative exponent in eval: 4 ** -2 +@result{} +@end example + +Within @var{expression}, (but not @var{radix} or @var{width}), numbers +without a special prefix are decimal. A simple @samp{0} prefix +introduces an octal number. @samp{0x} introduces a hexadecimal number. +As @acronym{GNU} extensions, @samp{0b} introduces a binary number. +@samp{0r} introduces a number expressed in any radix between 1 and 36: +the prefix should be immediately followed by the decimal expression of +the radix, a colon, then the digits making the number. For radix 1, +leading zeros are ignored, and all remaining digits must be @samp{1}; +for all other radices, the digits are @samp{0}, @samp{1}, @samp{2}, +@dots{}. Beyond @samp{9}, the digits are @samp{a}, @samp{b} @dots{} up +to @samp{z}. Lower and upper case letters can be used interchangeably +in numbers prefixes and as number digits. + +Parentheses may be used to group subexpressions whenever needed. For the +relational operators, a true relation returns @code{1}, and a false +relation return @code{0}. + +Here are a few examples of use of @code{eval}. + +@example +eval(`-3 * 5') +@result{}-15 +eval(`-99 / 10') +@result{}-9 +eval(`-99 % 10') +@result{}-9 +eval(`99 % -10') +@result{}9 +eval(index(`Hello world', `llo') >= 0) +@result{}1 +eval(`0r1:0111 + 0b100 + 0r3:12') +@result{}12 +define(`square', `eval(`($1) ** 2')') +@result{} +square(`9') +@result{}81 +square(square(`5')` + 1') +@result{}676 +define(`foo', `666') +@result{} +eval(`foo / 6') +@error{}m4:stdin:11: bad expression in eval: foo / 6 +@result{} +eval(foo / 6) +@result{}111 +@end example + +As the last two lines show, @code{eval} does not handle macro +names, even if they expand to a valid expression (or part of a valid +expression). Therefore all macros must be expanded before they are +passed to @code{eval}. + +Some calculations are not portable to other implementations, since they +have undefined semantics in C, but @acronym{GNU} @code{m4} has +well-defined behavior on overflow. When shifting, an out-of-range shift +amount is implicitly brought into the range of 32-bit signed integers +using an implicit bit-wise and with 0x1f). + +@example +define(`max_int', eval(`0x7fffffff')) +@result{} +define(`min_int', incr(max_int)) +@result{} +eval(min_int` < 0') +@result{}1 +eval(max_int` > 0') +@result{}1 +ifelse(eval(min_int` / -1'), min_int, `overflow occurred') +@result{}overflow occurred +min_int +@result{}-2147483648 +eval(`0x80000000 % -1') +@result{}0 +eval(`-4 >> 1') +@result{}-2 +eval(`-4 >> 33') +@result{}-2 +@end example + +If @var{radix} is specified, it specifies the radix to be used in the +expansion. The default radix is 10; this is also the case if +@var{radix} is the empty string. A warning results if the radix is +outside the range of 1 through 36, inclusive. The result of @code{eval} +is always taken to be signed. No radix prefix is output, and for +radices greater than 10, the digits are lower case. The @var{width} +argument specifies the minimum output width, excluding any negative +sign. The result is zero-padded to extend the expansion to the +requested width. A warning results if the width is negative. If +@var{radix} or @var{width} is out of bounds, the expansion of +@code{eval} is empty. + +@example +eval(`666', `10') +@result{}666 +eval(`666', `11') +@result{}556 +eval(`666', `6') +@result{}3030 +eval(`666', `6', `10') +@result{}0000003030 +eval(`-666', `6', `10') +@result{}-0000003030 +eval(`10', `', `0') +@result{}10 +`0r1:'eval(`10', `1', `11') +@result{}0r1:01111111111 +eval(`10', `16') +@result{}a +eval(`1', `37') +@error{}m4:stdin:9: radix 37 in builtin `eval' out of range +@result{} +eval(`1', , `-1') +@error{}m4:stdin:10: negative width to builtin `eval' +@result{} +eval() +@error{}m4:stdin:11: empty string treated as 0 in builtin `eval' +@result{}0 +@end example + +@node Shell commands +@chapter Macros for running shell commands + +@cindex UNIX commands, running +@cindex executing shell commands +@cindex running shell commands +@cindex shell commands, running +@cindex commands, running shell +There are a few builtin macros in @code{m4} that allow you to run shell +commands from within @code{m4}. + +Note that the definition of a valid shell command is system dependent. +On UNIX systems, this is the typical @command{/bin/sh}. But on other +systems, such as native Windows, the shell has a different syntax of +commands that it understands. Some examples in this chapter assume +@command{/bin/sh}, and also demonstrate how to quit early with a known +exit value if this is not the case. + +@menu +* Platform macros:: Determining the platform +* Syscmd:: Executing simple commands +* Esyscmd:: Reading the output of commands +* Sysval:: Exit status +* Mkstemp:: Making temporary files +@end menu + +@node Platform macros +@section Determining the platform + +@cindex platform macros +Sometimes it is desirable for an input file to know which platform +@code{m4} is running on. @acronym{GNU} @code{m4} provides several +macros that are predefined to expand to the empty string; checking for +their existence will confirm platform details. + +@deffn {Optional builtin} __gnu__ +@deffnx {Optional builtin} __os2__ +@deffnx {Optional builtin} os2 +@deffnx {Optional builtin} __unix__ +@deffnx {Optional builtin} unix +@deffnx {Optional builtin} __windows__ +@deffnx {Optional builtin} windows +Each of these macros is conditionally defined as needed to describe the +environment of @code{m4}. If defined, each macro expands to the empty +string. For now, these macros silently ignore all arguments, but in a +future release of M4, they might warn if arguments are present. +@end deffn + +When @acronym{GNU} extensions are in effect (that is, when you did not +use the @option{-G} option, @pxref{Limits control, , Invoking m4}), +@acronym{GNU} @code{m4} will define the macro @code{@w{__gnu__}} to +expand to the empty string. + +@example +$ @kbd{m4} +__gnu__ +@result{} +__gnu__(`ignored') +@result{} +Extensions are ifdef(`__gnu__', `active', `inactive') +@result{}Extensions are active +@end example + +@comment options: -G +@example +$ @kbd{m4 -G} +__gnu__ +@result{}__gnu__ +__gnu__(`ignored') +@result{}__gnu__(ignored) +Extensions are ifdef(`__gnu__', `active', `inactive') +@result{}Extensions are inactive +@end example + +On UNIX systems, @acronym{GNU} @code{m4} will define @code{@w{__unix__}} +by default, or @code{unix} when the @option{-G} option is specified. + +On native Windows systems, @acronym{GNU} @code{m4} will define +@code{@w{__windows__}} by default, or @code{windows} when the +@option{-G} option is specified. + +On OS/2 systems, @acronym{GNU} @code{m4} will define @code{@w{__os2__}} +by default, or @code{os2} when the @option{-G} option is specified. + +If @acronym{GNU} @code{m4} does not provide a platform macro for your system, +please report that as a bug. + +@example +define(`provided', `0') +@result{} +ifdef(`__unix__', `define(`provided', incr(provided))') +@result{} +ifdef(`__windows__', `define(`provided', incr(provided))') +@result{} +ifdef(`__os2__', `define(`provided', incr(provided))') +@result{} +provided +@result{}1 +@end example + +@node Syscmd +@section Executing simple commands + +Any shell command can be executed, using @code{syscmd}: + +@deffn Builtin syscmd (@var{shell-command}) +Executes @var{shell-command} as a shell command. + +The expansion of @code{syscmd} is void, @emph{not} the output from +@var{shell-command}! Output or error messages from @var{shell-command} +are not read by @code{m4}. @xref{Esyscmd}, if you need to process the +command output. + +Prior to executing the command, @code{m4} flushes its buffers. +The default standard input, output and error of @var{shell-command} are +the same as those of @code{m4}. + +By default, the @var{shell-command} will be used as the argument to the +@option{-c} option of the @command{/bin/sh} shell (or the version of +@command{sh} specified by @samp{command -p getconf PATH}, if your system +supports that). If you prefer a different shell, the +@command{configure} script can be given the option +@option{--with-syscmd-shell=@var{location}} to set the location of an +alternative shell at @acronym{GNU} @code{m4} installation; the +alternative shell must still support @option{-c}. + +The macro @code{syscmd} is recognized only with parameters. +@end deffn + +@example +define(`foo', `FOO') +@result{} +syscmd(`echo foo') +@result{}foo +@result{} +@end example + +Note how the expansion of @code{syscmd} keeps the trailing newline of +the command, as well as using the newline that appeared after the macro. + +The following is an example of @var{shell-command} using the same +standard input as @code{m4}: + +@comment ignore +@example +$ @kbd{echo "m4wrap(\`syscmd(\`cat')')" | m4} +@result{} +@end example + +@ignore +@comment If the user types the example below with stdin being an +@comment interactive terminal, then cat will hang waiting for additional +@comment input after m4 has exited. But the testsuite is using a pipe +@comment for stdin. Hence, we have two versions - the one we feed the +@comment testsuite below, and the one we display to the user above that +@comment more accurately shows what the testsuite is really doing but +@comment which the testsuite cannot parse. + +@example +m4wrap(`syscmd(`cat')') +@result{} +^D +@end example +@end ignore + +It tells @code{m4} to read all of its input before executing the wrapped +text, then hand a valid (albeit emptied) pipe as standard input for the +@code{cat} subcommand. Therefore, you should be careful when using +standard input (either by specifying no files, or by passing @samp{-} as +a file name on the command line, @pxref{Command line files, , Invoking +m4}), and also invoking subcommands via @code{syscmd} or @code{esyscmd} +that consume data from standard input. When standard input is a +seekable file, the subprocess will pick up with the next character not +yet processed by @code{m4}; when it is a pipe or other non-seekable +file, there is no guarantee how much data will already be buffered by +@code{m4} and thus unavailable to the child. + +@node Esyscmd +@section Reading the output of commands + +@cindex @acronym{GNU} extensions +If you want @code{m4} to read the output of a shell command, use +@code{esyscmd}: + +@deffn Builtin esyscmd (@var{shell-command}) +Expands to the standard output of the shell command +@var{shell-command}. + +Prior to executing the command, @code{m4} flushes its buffers. +The default standard input and standard error of @var{shell-command} are +the same as those of @code{m4}. The error output of @var{shell-command} +is not a part of the expansion: it will appear along with the error +output of @code{m4}. + +By default, the @var{shell-command} will be used as the argument to the +@option{-c} option of the @command{/bin/sh} shell (or the version of +@command{sh} specified by @samp{command -p getconf PATH}, if your system +supports that). If you prefer a different shell, the +@command{configure} script can be given the option +@option{--with-syscmd-shell=@var{location}} to set the location of an +alternative shell at @acronym{GNU} @code{m4} installation; the +alternative shell must still support @option{-c}. + +The macro @code{esyscmd} is recognized only with parameters. +@end deffn + +@example +define(`foo', `FOO') +@result{} +esyscmd(`echo foo') +@result{}FOO +@result{} +@end example + +Note how the expansion of @code{esyscmd} keeps the trailing newline of +the command, as well as using the newline that appeared after the macro. + +Just as with @code{syscmd}, care must be exercised when sharing standard +input between @code{m4} and the child process of @code{esyscmd}. + +@node Sysval +@section Exit status + +@cindex UNIX commands, exit status from +@cindex exit status from shell commands +@cindex shell commands, exit status from +@cindex commands, exit status from shell +@cindex status of shell commands +To see whether a shell command succeeded, use @code{sysval}: + +@deffn Builtin sysval +Expands to the exit status of the last shell command run with +@code{syscmd} or @code{esyscmd}. Expands to 0 if no command has been +run yet. +@end deffn + +@example +sysval +@result{}0 +syscmd(`false') +@result{} +ifelse(sysval, `0', `zero', `non-zero') +@result{}non-zero +syscmd(`exit 2') +@result{} +sysval +@result{}2 +syscmd(`true') +@result{} +sysval +@result{}0 +esyscmd(`false') +@result{} +ifelse(sysval, `0', `zero', `non-zero') +@result{}non-zero +esyscmd(`exit 2') +@result{} +sysval +@result{}2 +esyscmd(`true') +@result{} +sysval +@result{}0 +@end example + +@code{sysval} results in 127 if there was a problem executing the +command, for example, if the system-imposed argument length is exceeded, +or if there were not enough resources to fork. It is not possible to +distinguish between failed execution and successful execution that had +an exit status of 127. + +On UNIX platforms, where it is possible to detect when command execution +is terminated by a signal, rather than a normal exit, the result is the +signal number shifted left by eight bits. + +@comment This test has difficulties being portable, even on platforms +@comment where syscmd invokes /bin/sh. Kill is not portable with signal +@comment names. According to autoconf, the only portable signal numbers +@comment are 1 (HUP), 2 (INT), 9 (KILL), 13 (PIPE) and 15 (TERM). But +@comment all shells handle SIGINT, and ksh handles HUP (as in, the shell +@comment exits normally rather than letting the signal terminate it). +@comment Also, TERM is flaky, as it can also kill the running m4 on +@comment systems where /bin/sh does not create its own process group. +@comment And PIPE is unreliable, since people tend to run with it +@comment ignored, with m4 inheriting that choice. That leaves KILL as +@comment the only signal we can reliably test. +@example +dnl This test assumes kill is a shell builtin, and that signals are +dnl recognizable. +ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics +')m4exit(`77')')dnl +syscmd(`kill -9 $$') +@result{} +sysval +@result{}2304 +syscmd() +@result{} +sysval +@result{}0 +esyscmd(`kill -9 $$') +@result{} +sysval +@result{}2304 +@end example + +@node Mkstemp +@section Making temporary files + +@cindex temporary file names +@cindex files, names of temporary +Commands specified to @code{syscmd} or @code{esyscmd} might need a +temporary file, for output or for some other purpose. There is a +builtin macro, @code{mkstemp}, for making a temporary file: + +@deffn Builtin mkstemp (@var{template}) +@deffnx Builtin maketemp (@var{template}) +Expands to the quoted name of a new, empty file, made from the string +@var{template}, which should end with the string @samp{XXXXXX}. The six +@samp{X} characters are then replaced with random characters matching +the regular expression @samp{[a-zA-Z0-9._-]}, in order to make the file +name unique. If fewer than six @samp{X} characters are found at the end +of @code{template}, the result will be longer than the template. The +created file will have access permissions as if by @kbd{chmod =rw,go=}, +meaning that the current umask of the @code{m4} process is taken into +account, and at most only the current user can read and write the file. + +The traditional behavior, standardized by @acronym{POSIX}, is that +@code{maketemp} merely replaces the trailing @samp{X} with the process +id, without creating a file or quoting the expansion, and without +ensuring that the resulting +string is a unique file name. In part, this means that using the same +@var{template} twice in the same input file will result in the same +expansion. This behavior is a security hole, as it is very easy for +another process to guess the name that will be generated, and thus +interfere with a subsequent use of @code{syscmd} trying to manipulate +that file name. Hence, @acronym{POSIX} has recommended that all new +implementations of @code{m4} provide the secure @code{mkstemp} builtin, +and that users of @code{m4} check for its existence. + +The expansion is void and an error issued if a temporary file could +not be created. + +The macros @code{mkstemp} and @code{maketemp} are recognized only with +parameters. +@end deffn + +If you try this next example, you will most likely get different output +for the two file names, since the replacement characters are randomly +chosen: + +@comment ignore +@example +$ @kbd{m4} +define(`tmp', `oops') +@result{} +maketemp(`/tmp/fooXXXXXX') +@result{}/tmp/fooa07346 +ifdef(`mkstemp', `define(`maketemp', defn(`mkstemp'))', + `define(`mkstemp', defn(`maketemp'))dnl +errprint(`warning: potentially insecure maketemp implementation +')') +@result{} +mkstemp(`doc') +@result{}docQv83Uw +@end example + +@cindex @acronym{GNU} extensions +Unless you use the @option{--traditional} command line option (or +@option{-G}, @pxref{Limits control, , Invoking m4}), the @acronym{GNU} +version of @code{maketemp} is secure. This means that using the same +template to multiple calls will generate multiple files. However, we +recommend that you use the new @code{mkstemp} macro, introduced in +@acronym{GNU} M4 1.4.8, which is secure even in traditional mode. Also, +as of M4 1.4.11, the secure implementation quotes the resulting file +name, so that you are guaranteed to know what file was created even if +the random file name happens to match an existing macro. Notice that +this example is careful to use @code{defn} to avoid unintended expansion +of @samp{foo}. + +@example +$ @kbd{m4} +define(`foo', `errprint(`oops')') +@result{} +syscmd(`rm -f foo-??????')sysval +@result{}0 +define(`file1', maketemp(`foo-XXXXXX'))dnl +ifelse(esyscmd(`echo \` foo-?????? \''), ` foo-?????? ', + `no file', `created') +@result{}created +define(`file2', maketemp(`foo-XX'))dnl +define(`file3', mkstemp(`foo-XXXXXX'))dnl +ifelse(len(defn(`file1')), len(defn(`file2')), + `same length', `different') +@result{}same length +ifelse(defn(`file1'), defn(`file2'), `same', `different file') +@result{}different file +ifelse(defn(`file2'), defn(`file3'), `same', `different file') +@result{}different file +ifelse(defn(`file1'), defn(`file3'), `same', `different file') +@result{}different file +syscmd(`rm 'defn(`file1') defn(`file2') defn(`file3')) +@result{} +sysval +@result{}0 +@end example + +@ignore +@c Not worth documenting, but make sure we don't leave trailing NUL in +@c the expansion. + +@example +syscmd(`rm -rf foodir')sysval +@result{}0 +syscmd(`mkdir foodir')sysval +@result{}0 +len(mkstemp(`foodir/fooXXXXX')) +@result{}16 +syscmd(`rm -r foodir')sysval +@result{}0 +@end example + +@c Likewise, and ensure that traditional mode leaves the result unquoted +@c without creating a file. + +@comment options: -G +@example +syscmd(`rm -f foo-*')sysval +@result{}0 +len(maketemp(`foo-XXXXX')) +@error{}m4:stdin:2: recommend using mkstemp instead +@result{}9 +define(`abc', `def') +@result{} +maketemp(`foo-abc') +@result{}foo-def +@error{}m4:stdin:4: recommend using mkstemp instead +syscmd(`test -f foo-*')ifelse(sysval, `0', `0', `1') +@result{}1 +@end example +@end ignore + +@node Miscellaneous +@chapter Miscellaneous builtin macros + +This chapter describes various builtins, that do not really belong in +any of the previous chapters. + +@menu +* Errprint:: Printing error messages +* Location:: Printing current location +* M4exit:: Exiting from @code{m4} +@end menu + +@node Errprint +@section Printing error messages + +@cindex printing error messages +@cindex error messages, printing +@cindex messages, printing error +@cindex standard error, output to +You can print error messages using @code{errprint}: + +@deffn Builtin errprint (@var{message}, @dots{}) +Prints @var{message} and the rest of the arguments to standard error, +separated by spaces. Standard error is used, regardless of the +@option{--debugfile} option (@pxref{Debugging options, , Invoking m4}). + +The expansion of @code{errprint} is void. +The macro @code{errprint} is recognized only with parameters. +@end deffn + +@example +errprint(`Invalid arguments to forloop +') +@error{}Invalid arguments to forloop +@result{} +errprint(`1')errprint(`2',`3 +') +@error{}12 3 +@result{} +@end example + +A trailing newline is @emph{not} printed automatically, so it should be +supplied as part of the argument, as in the example. Unfortunately, the +exact output of @code{errprint} is not very portable to other @code{m4} +implementations: @acronym{POSIX} requires that all arguments be printed, +but some implementations of @code{m4} only print the first. +Furthermore, some @acronym{BSD} implementations always append a newline +for each @code{errprint} call, regardless of whether the last argument +already had one, and @acronym{POSIX} is silent on whether this is +acceptable. + +@node Location +@section Printing current location + +@cindex location, input +@cindex input location +To make it possible to specify the location of an error, three +utility builtins exist: + +@deffn Builtin __file__ +@deffnx Builtin __line__ +@deffnx Builtin __program__ +Expand to the quoted name of the current input file, the +current input line number in that file, and the quoted name of the +current invocation of @code{m4}. +@end deffn + +@example +errprint(__program__:__file__:__line__: `input error +') +@error{}m4:stdin:1: input error +@result{} +@end example + +Line numbers start at 1 for each file. If the file was found due to the +@option{-I} option or @env{M4PATH} environment variable, that is +reflected in the file name. The syncline option (@option{-s}, +@pxref{Preprocessor features, , Invoking m4}), and the +@samp{f} and @samp{l} flags of @code{debugmode} (@pxref{Debug Levels}), +also use this notion of current file and line. Redefining the three +location macros has no effect on syncline, debug, warning, or error +message output. + +This example reuses the file @file{incl.m4} mentioned earlier +(@pxref{Include}): + +@comment examples +@example +$ @kbd{m4 -I examples} +define(`foo', ``$0' called at __file__:__line__') +@result{} +foo +@result{}foo called at stdin:2 +include(`incl.m4') +@result{}Include file start +@result{}foo called at examples/incl.m4:2 +@result{}Include file end +@result{} +@end example + +The location of macros invoked during the rescanning of macro expansion +text corresponds to the location in the file where the expansion was +triggered, regardless of how many newline characters the expansion text +contains. As of @acronym{GNU} M4 1.4.8, the location of text wrapped +with @code{m4wrap} (@pxref{M4wrap}) is the point at which the +@code{m4wrap} was invoked. Previous versions, however, behaved as +though wrapped text came from line 0 of the file ``''. + +@example +define(`echo', `$@@') +@result{} +define(`foo', `echo(__line__ +__line__)') +@result{} +echo(__line__ +__line__) +@result{}4 +@result{}5 +m4wrap(`foo +') +@result{} +foo(errprint(__line__ +__line__ +)) +@error{}8 +@error{}9 +@result{}8 +@result{}8 +__line__ +@result{}11 +m4wrap(`__line__ +') +@result{} +^D +@result{}12 +@result{}6 +@result{}6 +@end example + +The @code{@w{__program__}} macro behaves like @samp{$0} in shell +terminology. If you invoke @code{m4} through an absolute path or a link +with a different spelling, rather than by relying on a @env{PATH} search +for plain @samp{m4}, it will affect how @code{@w{__program__}} expands. +The intent is that you can use it to produce error messages with the +same formatting that @code{m4} produces internally. It can also be used +within @code{syscmd} (@pxref{Syscmd}) to pick the same version of +@code{m4} that is currently running, rather than whatever version of +@code{m4} happens to be first in @env{PATH}. It was first introduced in +@acronym{GNU} M4 1.4.6. + +@node M4exit +@section Exiting from @code{m4} + +@cindex exiting from @code{m4} +@cindex status, setting @code{m4} exit +If you need to exit from @code{m4} before the entire input has been +read, you can use @code{m4exit}: + +@deffn Builtin m4exit (@dvar{code, 0}) +Causes @code{m4} to exit, with exit status @var{code}. If @var{code} is +left out, the exit status is zero. If @var{code} cannot be parsed, or +is outside the range of 0 to 255, the exit status is one. No further +input is read, and all wrapped and diverted text is discarded. +@end deffn + +@example +m4wrap(`This text is lost due to `m4exit'.') +@result{} +divert(`1') So is this. +divert +@result{} +m4exit And this is never read. +@end example + +A common use of this is to abort processing: + +@deffn Composite fatal_error (@var{message}) +Abort processing with an error message and non-zero status. Prefix +@var{message} with details about where the error occurred, and print the +resulting string to standard error. +@end deffn + +@comment status: 1 +@example +define(`fatal_error', + `errprint(__program__:__file__:__line__`: fatal error: $* +')m4exit(`1')') +@result{} +fatal_error(`this is a BAD one, buster') +@error{}m4:stdin:4: fatal error: this is a BAD one, buster +@end example + +After this macro call, @code{m4} will exit with exit status 1. This macro +is only intended for error exits, since the normal exit procedures are +not followed, i.e., diverted text is not undiverted, and saved text +(@pxref{M4wrap}) is not reread. (This macro could be made more robust +to earlier versions of @code{m4}. You should try to see if you can find +weaknesses and correct them; or @pxref{Improved fatal_error, , Answers}). + +Note that it is still possible for the exit status to be different than +what was requested by @code{m4exit}. If @code{m4} detects some other +error, such as a write error on standard output, the exit status will be +non-zero even if @code{m4exit} requested zero. + +If standard input is seekable, then the file will be positioned at the +next unread character. If it is a pipe or other non-seekable file, +then there are no guarantees how much data @code{m4} might have read +into buffers, and thus discarded. + +@node Frozen files +@chapter Fast loading of frozen state + +Some bigger @code{m4} applications may be built over a common base +containing hundreds of definitions and other costly initializations. +Usually, the common base is kept in one or more declarative files, +which files are listed on each @code{m4} invocation prior to the +user's input file, or else each input file uses @code{include}. + +Reading the common base of a big application, over and over again, may +be time consuming. @acronym{GNU} @code{m4} offers some machinery to +speed up the start of an application using lengthy common bases. + +@menu +* Using frozen files:: Using frozen files +* Frozen file format:: Frozen file format +@end menu + +@node Using frozen files +@section Using frozen files + +@cindex fast loading of frozen files +@cindex frozen files for fast loading +@cindex initialization, frozen state +@cindex dumping into frozen file +@cindex reloading a frozen file +@cindex @acronym{GNU} extensions +Suppose a user has a library of @code{m4} initializations in +@file{base.m4}, which is then used with multiple input files: + +@comment ignore +@example +$ @kbd{m4 base.m4 input1.m4} +$ @kbd{m4 base.m4 input2.m4} +$ @kbd{m4 base.m4 input3.m4} +@end example + +Rather than spending time parsing the fixed contents of @file{base.m4} +every time, the user might rather execute: + +@comment ignore +@example +$ @kbd{m4 -F base.m4f base.m4} +@end example + +@noindent +once, and further execute, as often as needed: + +@comment ignore +@example +$ @kbd{m4 -R base.m4f input1.m4} +$ @kbd{m4 -R base.m4f input2.m4} +$ @kbd{m4 -R base.m4f input3.m4} +@end example + +@noindent +with the varying input. The first call, containing the @option{-F} +option, only reads and executes file @file{base.m4}, defining +various application macros and computing other initializations. +Once the input file @file{base.m4} has been completely processed, @acronym{GNU} +@code{m4} produces in @file{base.m4f} a @dfn{frozen} file, that is, a +file which contains a kind of snapshot of the @code{m4} internal state. + +Later calls, containing the @option{-R} option, are able to reload +the internal state of @code{m4}, from @file{base.m4f}, +@emph{prior} to reading any other input files. This means +instead of starting with a virgin copy of @code{m4}, input will be +read after having effectively recovered the effect of a prior run. +In our example, the effect is the same as if file @file{base.m4} has +been read anew. However, this effect is achieved a lot faster. + +Only one frozen file may be created or read in any one @code{m4} +invocation. It is not possible to recover two frozen files at once. +However, frozen files may be updated incrementally, through using +@option{-R} and @option{-F} options simultaneously. For example, if +some care is taken, the command: + +@comment ignore +@example +$ @kbd{m4 file1.m4 file2.m4 file3.m4 file4.m4} +@end example + +@noindent +could be broken down in the following sequence, accumulating the same +output: + +@comment ignore +@example +$ @kbd{m4 -F file1.m4f file1.m4} +$ @kbd{m4 -R file1.m4f -F file2.m4f file2.m4} +$ @kbd{m4 -R file2.m4f -F file3.m4f file3.m4} +$ @kbd{m4 -R file3.m4f file4.m4} +@end example + +Some care is necessary because not every effort has been made for +this to work in all cases. In particular, the trace attribute of +macros is not handled, nor the current setting of @code{changeword}. +Currently, @code{m4wrap} and @code{sysval} also have problems. +Also, interactions for some options of @code{m4}, being used in one call +and not in the next, have not been fully analyzed yet. On the other +end, you may be confident that stacks of @code{pushdef} definitions +are handled correctly, as well as undefined or renamed builtins, and +changed strings for quotes or comments. And future releases of +@acronym{GNU} M4 will improve on the utility of frozen files. + +@ignore +@c This example is not worth putting in the manual, but caused core +@c dumps in all versions prior to 1.4.11. + +@comment options: -F /dev/null +@example +traceon(`undefined')dnl +@end example + +@c Make sure freezing is successful. + +@example +ifdef(`__unix__', , + `errprint(` skipping: syscmd does not have unix semantics +')m4exit(`77')')dnl +changequote(`[', `]')dnl +syscmd([echo 'changequote([,])pushdef([divnum],[hi])dnl' \ + | ']__program__[' -F in.m4f \ + && echo 'divnum popdef([divnum])divnum' \ + | ']__program__[' -R in.m4f \ + && rm in.m4f])status sysval +@result{}hi 0 +@result{}status 0 +@end example + +@c Detect inability to freeze. +@c Some systems harden /, and fail with EACCES rather than ENOENT. + +@comment options: -F /none/such +@comment xerr: ignore +@comment status: 1 +@example +$ @kbd{m4 -F /none/such} +^D +@error{}m4: cannot open `/none/such': No such file or directory +@end example +@end ignore + +When an @code{m4} run is to be frozen, the automatic undiversion +which takes place at end of execution is inhibited. Instead, all +positively numbered diversions are saved into the frozen file. +The active diversion number is also transmitted. + +A frozen file to be reloaded need not reside in the current directory. +It is looked up the same way as an @code{include} file (@pxref{Search +Path}). + +If the frozen file was generated with a newer version of @code{m4}, and +contains directives that an older @code{m4} cannot parse, attempting to +load the frozen file with option @option{-R} will cause @code{m4} to +exit with status 63 to indicate version mismatch. + +@node Frozen file format +@section Frozen file format + +@cindex frozen file format +@cindex file format, frozen file +Frozen files are sharable across architectures. It is safe to write +a frozen file on one machine and read it on another, given that the +second machine uses the same or newer version of @acronym{GNU} @code{m4}. +It is conventional, but not required, to give a frozen file the suffix +of @code{.m4f}. + +These are simple (editable) text files, made up of directives, +each starting with a capital letter and ending with a newline +(@key{NL}). Wherever a directive is expected, the character +@samp{#} introduces a comment line; empty lines are also ignored if they +are not part of an embedded string. +In the following descriptions, each @var{len} refers to the length of +the corresponding strings @var{str} in the next line of input. Numbers +are always expressed in decimal. There are no escape characters. The +directives are: + +@table @code +@item C @var{len1} , @var{len2} @key{NL} @var{str1} @var{str2} @key{NL} +Uses @var{str1} and @var{str2} as the begin-comment and +end-comment strings. If omitted, then @samp{#} and @key{NL} are the +comment delimiters. + +@item D @var{number}, @var{len} @key{NL} @var{str} @key{NL} +Selects diversion @var{number}, making it current, then copy +@var{str} in the current diversion. @var{number} may be a negative +number for a non-existing diversion. To merely specify an active +selection, use this command with an empty @var{str}. With 0 as the +diversion @var{number}, @var{str} will be issued on standard output +at reload time. @acronym{GNU} @code{m4} will not produce the @samp{D} +directive with non-zero length for diversion 0, but this can be done +with manual edits. This directive may +appear more than once for the same diversion, in which case the +diversion is the concatenation of the various uses. If omitted, then +diversion 0 is current. + +@item F @var{len1} , @var{len2} @key{NL} @var{str1} @var{str2} @key{NL} +Defines, through @code{pushdef}, a definition for @var{str1} +expanding to the function whose builtin name is @var{str2}. If the +builtin does not exist (for example, if the frozen file was produced by +a copy of @code{m4} compiled with changeword support, but the version +of @code{m4} reloading was compiled without it), the reload is silent, +but any subsequent use of the definition of @var{str1} will result in +a warning. This directive may appear more than once for the same name, +and its order, along with @samp{T}, is important. If omitted, you will +have no access to any builtins. + +@item Q @var{len1} , @var{len2} @key{NL} @var{str1} @var{str2} @key{NL} +Uses @var{str1} and @var{str2} as the begin-quote and end-quote +strings. If omitted, then @samp{`} and @samp{'} are the quote +delimiters. + +@item T @var{len1} , @var{len2} @key{NL} @var{str1} @var{str2} @key{NL} +Defines, though @code{pushdef}, a definition for @var{str1} +expanding to the text given by @var{str2}. This directive may appear +more than once for the same name, and its order, along with @samp{F}, is +important. + +@item V @var{number} @key{NL} +Confirms the format of the file. @code{m4} @value{VERSION} only creates +and understands frozen files where @var{number} is 1. This directive +must be the first non-comment in the file, and may not appear more than +once. +@end table + +@node Compatibility +@chapter Compatibility with other versions of @code{m4} + +@cindex compatibility +This chapter describes the many of the differences between this +implementation of @code{m4}, and of other implementations found under +UNIX, such as System V Release 3, Solaris, and @acronym{BSD} flavors. +In particular, it lists the known differences and extensions to +@acronym{POSIX}. However, the list is not necessarily comprehensive. + +At the time of this writing, @acronym{POSIX} 2001 (also known as IEEE +Std 1003.1-2001) is the latest standard, although a new version of +@acronym{POSIX} is under development and includes several proposals for +modifying what @code{m4} is required to do. The requirements for +@code{m4} are shared between @acronym{SUSv3} and @acronym{POSIX}, and +can be viewed at +@uref{http://www.opengroup.org/onlinepubs/@/000095399/@/utilities/@/m4.html}. + +@menu +* Extensions:: Extensions in @acronym{GNU} M4 +* Incompatibilities:: Facilities in System V m4 not in GNU M4 +* Other Incompatibilities:: Other incompatibilities +@end menu + +@node Extensions +@section Extensions in @acronym{GNU} M4 + +@cindex @acronym{GNU} extensions +@cindex @acronym{POSIX} +This version of @code{m4} contains a few facilities that do not exist +in System V @code{m4}. These extra facilities are all suppressed by +using the @option{-G} command line option (@pxref{Limits control, , +Invoking m4}), unless overridden by other command line options. + +@itemize @bullet +@item +In the @code{$@var{n}} notation for macro arguments, @var{n} can contain +several digits, while the System V @code{m4} only accepts one digit. +This allows macros in @acronym{GNU} @code{m4} to take any number of +arguments, and not only nine (@pxref{Arguments}). + +This means that @code{define(`foo', `$11')} is ambiguous between +implementations. To portably choose between grabbing the first +parameter and appending 1 to the expansion, or grabbing the eleventh +parameter, you can do the following: + +@example +define(`a1', `A1') +@result{} +dnl First argument, concatenated with 1 +define(`_1', `$1')define(`first1', `_1($@@)1') +@result{} +dnl Eleventh argument, portable +define(`_9', `$9')define(`eleventh', `_9(shift(shift($@@)))') +@result{} +dnl Eleventh argument, GNU style +define(`Eleventh', `$11') +@result{} +first1(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') +@result{}A1 +eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') +@result{}k +Eleventh(`a', `b', `c', `d', `e', `f', `g', `h', `i', `j', `k') +@result{}k +@end example + +@noindent +Also see the @code{argn} macro (@pxref{Shift}). + +@item +The @code{divert} (@pxref{Divert}) macro can manage more than 9 +diversions. @acronym{GNU} @code{m4} treats all positive numbers as valid +diversions, rather than discarding diversions greater than 9. + +@item +Files included with @code{include} and @code{sinclude} are sought in a +user specified search path, if they are not found in the working +directory. The search path is specified by the @option{-I} option and the +@env{M4PATH} environment variable (@pxref{Search Path}). + +@item +Arguments to @code{undivert} can be non-numeric, in which case the named +file will be included uninterpreted in the output (@pxref{Undivert}). + +@item +Formatted output is supported through the @code{format} builtin, which +is modeled after the C library function @code{printf} (@pxref{Format}). + +@item +Searches and text substitution through basic regular expressions are +supported by the @code{regexp} (@pxref{Regexp}) and @code{patsubst} +(@pxref{Patsubst}) builtins. Some @acronym{BSD} implementations use +extended regular expressions instead. + +@item +The output of shell commands can be read into @code{m4} with +@code{esyscmd} (@pxref{Esyscmd}). + +@item +There is indirect access to any builtin macro with @code{builtin} +(@pxref{Builtin}). + +@item +Macros can be called indirectly through @code{indir} (@pxref{Indir}). + +@item +The name of the program, the current input file, and the current input +line number are accessible through the builtins @code{@w{__program__}}, +@code{@w{__file__}}, and @code{@w{__line__}} (@pxref{Location}). + +@item +The format of the output from @code{dumpdef} and macro tracing can be +controlled with @code{debugmode} (@pxref{Debug Levels}). + +@item +The destination of trace and debug output can be controlled with +@code{debugfile} (@pxref{Debug Output}). + +@item +The @code{maketemp} (@pxref{Mkstemp}) macro behaves like @code{mkstemp}, +creating a new file with a unique name on every invocation, rather than +following the insecure behavior of replacing the trailing @samp{X} +characters with the @code{m4} process id. + +@item +@acronym{POSIX} only requires support for the command line options +@option{-s}, @option{-D}, and @option{-U}, so all other options accepted +by @acronym{GNU} M4 are extensions. @xref{Invoking m4}, for a +description of these options. + +The debugging and tracing facilities in @acronym{GNU} @code{m4} are much +more extensive than in most other versions of @code{m4}. +@end itemize + +@node Incompatibilities +@section Facilities in System V @code{m4} not in @acronym{GNU} @code{m4} + +The version of @code{m4} from System V contains a few facilities that +have not been implemented in @acronym{GNU} @code{m4} yet. Additionally, +@acronym{POSIX} requires some behaviors that @acronym{GNU} @code{m4} has not +implemented yet. Relying on these behaviors is non-portable, as a +future release of @acronym{GNU} @code{m4} may change. + +@itemize @bullet +@item +@acronym{POSIX} requires support for multiple arguments to @code{defn}, +without any clarification on how @code{defn} behaves when one of the +multiple arguments names a builtin. System V @code{m4} and some other +implementations allow mixing builtins and text macros into a single +macro. @acronym{GNU} @code{m4} only supports joining multiple text +arguments, although a future implementation may lift this restriction to +behave more like System V@. The only portable way to join text macros +with builtins is via helper macros and implicit concatenation of macro +results. + +@item +@acronym{POSIX} requires an application to exit with non-zero status if +it wrote an error message to stderr. This has not yet been consistently +implemented for the various builtins that are required to issue an error +(such as @code{eval} (@pxref{Eval}) when an argument cannot be parsed). + +@item +Some traditional implementations only allow reading standard input +once, but @acronym{GNU} @code{m4} correctly handles multiple instances +of @samp{-} on the command line. + +@item +@acronym{POSIX} requires @code{m4wrap} (@pxref{M4wrap}) to act in FIFO +(first-in, first-out) order, but @acronym{GNU} @code{m4} currently uses +LIFO order. Furthermore, @acronym{POSIX} states that only the first +argument to @code{m4wrap} is saved for later evaluation, but +@acronym{GNU} @code{m4} saves and processes all arguments, with output +separated by spaces. + +@item +@acronym{POSIX} states that builtins that require arguments, but are +called without arguments, have undefined behavior. Traditional +implementations simply behave as though empty strings had been passed. +For example, @code{a`'define`'b} would expand to @code{ab}. But +@acronym{GNU} @code{m4} ignores certain builtins if they have missing +arguments, giving @code{adefineb} for the above example. + +@item +Traditional implementations handle @code{define(`f',`1')} (@pxref{Define}) +by undefining the entire stack of previous definitions, and if doing +@code{undefine(`f')} first. @acronym{GNU} @code{m4} replaces just the top +definition on the stack, as if doing @code{popdef(`f')} followed by +@code{pushdef(`f',`1')}. @acronym{POSIX} allows either behavior. + +@item +@acronym{POSIX} 2001 requires @code{syscmd} (@pxref{Syscmd}) to evaluate +command output for macro expansion, but this was a mistake that is +anticipated to be corrected in the next version of @acronym{POSIX}. +@acronym{GNU} @code{m4} follows traditional behavior in @code{syscmd} +where output is not rescanned, and provides the extension @code{esyscmd} +that does scan the output. + +@item +At one point, @acronym{POSIX} required @code{changequote(@var{arg})} +(@pxref{Changequote}) to use newline as the close quote, but this was a +bug, and the next version of @acronym{POSIX} is anticipated to state +that using empty strings or just one argument is unspecified. +Meanwhile, the @acronym{GNU} @code{m4} behavior of treating an empty +end-quote delimiter as @samp{'} is not portable, as Solaris treats it as +repeating the start-quote delimiter, and BSD treats it as leaving the +previous end-quote delimiter unchanged. For predictable results, never +call changequote with just one argument, or with empty strings for +arguments. + +@item +At one point, @acronym{POSIX} required @code{changecom(@var{arg},)} +(@pxref{Changecom}) to make it impossible to end a comment, but this is +a bug, and the next version of @acronym{POSIX} is anticipated to state +that using empty strings is unspecified. Meanwhile, the @acronym{GNU} +@code{m4} behavior of treating an empty end-comment delimiter as newline +is not portable, as BSD treats it as leaving the previous end-comment +delimiter unchanged. It is also impossible in BSD implementations to +disable comments, even though that is required by @acronym{POSIX}. For +predictable results, never call changecom with empty strings for +arguments. + +@item +Most implementations of @code{m4} give macros a higher precedence than +comments when parsing, meaning that if the start delimiter given to +@code{changecom} (@pxref{Changecom}) starts with a macro name, comments +are effectively disabled. @acronym{POSIX} does not specify what the +precedence is, so this version of @acronym{GNU} @code{m4} parser +recognizes comments, then macros, then quoted strings. + +@item +Traditional implementations allow argument collection, but not string +and comment processing, to span file boundaries. Thus, if @file{a.m4} +contains @samp{len(}, and @file{b.m4} contains @samp{abc)}, +@kbd{m4 a.m4 b.m4} outputs @samp{3} with traditional @code{m4}, but +gives an error message that the end of file was encountered inside a +macro with @acronym{GNU} @code{m4}. On the other hand, traditional +implementations do end of file processing for files included with +@code{include} or @code{sinclude} (@pxref{Include}), while @acronym{GNU} +@code{m4} seamlessly integrates the content of those files. Thus +@code{include(`a.m4')include(`b.m4')} will output @samp{3} instead of +giving an error. + +@item +Traditional @code{m4} treats @code{traceon} (@pxref{Trace}) without +arguments as a global variable, independent of named macro tracing. +Also, once a macro is undefined, named tracing of that macro is lost. +On the other hand, when @acronym{GNU} @code{m4} encounters +@code{traceon} without +arguments, it turns tracing on for all existing definitions at the time, +but does not trace future definitions; @code{traceoff} without arguments +turns tracing off for all definitions regardless of whether they were +also traced by name; and tracing by name, such as with @option{-tfoo} at +the command line or @code{traceon(`foo')} in the input, is an attribute +that is preserved even if the macro is currently undefined. + +Additionally, while @acronym{POSIX} requires trace output, it makes no +demands on the formatting of that output. Parsing trace output is not +guaranteed to be reliable, even between different releases of +@acronym{GNU} M4; however, the intent is that any future changes in +trace output will only occur under the direction of additional +@code{debugmode} flags (@pxref{Debug Levels}). + +@item +@acronym{POSIX} requires @code{eval} (@pxref{Eval}) to treat all +operators with the same precedence as C@. However, earlier versions of +@acronym{GNU} @code{m4} followed the traditional behavior of other +@code{m4} implementations, where bitwise and logical negation (@samp{~} +and @samp{!}) have lower precedence than equality operators; and where +equality operators (@samp{==} and @samp{!=}) had the same precedence as +relational operators (such as @samp{<}). Use explicit parentheses to +ensure proper precedence. As extensions to @acronym{POSIX}, +@acronym{GNU} @code{m4} gives well-defined semantics to operations that +C leaves undefined, such as when overflow occurs, when shifting negative +numbers, or when performing division by zero. @acronym{POSIX} also +requires @samp{=} to cause an error, but many traditional +implementations allowed it as an alias for @samp{==}. + +@item +@acronym{POSIX} 2001 requires @code{translit} (@pxref{Translit}) to +treat each character of the second and third arguments literally. +However, it is anticipated that the next version of @acronym{POSIX} will +allow the @acronym{GNU} @code{m4} behavior of treating @samp{-} as a +range operator. + +@item +@acronym{POSIX} requires @code{m4} to honor the locale environment +variables of @env{LANG}, @env{LC_ALL}, @env{LC_CTYPE}, +@env{LC_MESSAGES}, and @env{NLSPATH}, but this has not yet been +implemented in @acronym{GNU} @code{m4}. + +@item +@acronym{POSIX} states that only unquoted leading newlines and blanks +(that is, space and tab) are ignored when collecting macro arguments. +However, this appears to be a bug in @acronym{POSIX}, since most +traditional implementations also ignore all whitespace (formfeed, +carriage return, and vertical tab). @acronym{GNU} @code{m4} follows +tradition and ignores all leading unquoted whitespace. + +@item +@cindex @env{POSIXLY_CORRECT} +A strictly-compliant @acronym{POSIX} client is not allowed to use +command-line arguments not specified by @acronym{POSIX}. However, since +this version of M4 ignores @env{POSIXLY_CORRECT} and enables the option +@code{--gnu} by default (@pxref{Limits control, , Invoking m4}), a +client desiring to be strictly compliant has no way to disable +@acronym{GNU} extensions that conflict with @acronym{POSIX} when +directly invoking the compiled @code{m4}. A future version of +@code{GNU} M4 will honor the environment variable @env{POSIXLY_CORRECT}, +implicitly enabling @option{--traditional} if it is set, in order to +allow a strictly-compliant client. In the meantime, a client needing +strict @acronym{POSIX} compliance can use the workaround of invoking a +shell script wrapper, where the wrapper then adds @option{--traditional} +to the arguments passed to the compiled @code{m4}. +@end itemize + +@node Other Incompatibilities +@section Other incompatibilities + +There are a few other incompatibilities between this implementation of +@code{m4}, and the System V version. + +@itemize @bullet +@item +@acronym{GNU} @code{m4} implements sync lines differently from System V +@code{m4}, when text is being diverted. @acronym{GNU} @code{m4} outputs +the sync lines when the text is being diverted, and System V @code{m4} +when the diverted text is being brought back. + +The problem is which lines and file names should be attached to text +that is being, or has been, diverted. System V @code{m4} regards all +the diverted text as being generated by the source line containing the +@code{undivert} call, whereas @acronym{GNU} @code{m4} regards the +diverted text as being generated at the time it is diverted. + +The sync line option is used mostly when using @code{m4} as +a front end to a compiler. If a diverted line causes a compiler error, +the error messages should most probably refer to the place where the +diversion was made, and not where it was inserted again. + +@comment options: -s +@example +divert(2)2 +divert(1)1 +divert`'0 +@result{}#line 3 "stdin" +@result{}0 +^D +@result{}#line 2 "stdin" +@result{}1 +@result{}#line 1 "stdin" +@result{}2 +@end example + +The current @code{m4} implementation has a limitation that the syncline +output at the start of each diversion occurs no matter what, even if the +previous diversion did not end with a newline. This goes contrary to +the claim that synclines appear on a line by themselves, so this +limitation may be corrected in a future version of @code{m4}. In the +meantime, when using @option{-s}, it is wisest to make sure all +diversions end with newline. + +@item +@acronym{GNU} @code{m4} makes no attempt at prohibiting self-referential +definitions like: + +@example +define(`x', `x') +@result{} +define(`x', `x ') +@result{} +@end example + +@cindex rescanning +There is nothing inherently wrong with defining @samp{x} to +return @samp{x}. The wrong thing is to expand @samp{x} unquoted, +because that would cause an infinite rescan loop. +In @code{m4}, one might use macros to hold strings, as we do for +variables in other programming languages, further checking them with: + +@comment ignore +@example +ifelse(defn(`@var{holder}'), `@var{value}', @dots{}) +@end example + +@noindent +In cases like this one, an interdiction for a macro to hold its own name +would be a useless limitation. Of course, this leaves more rope for the +@acronym{GNU} @code{m4} user to hang himself! Rescanning hangs may be +avoided through careful programming, a little like for endless loops in +traditional programming languages. +@end itemize + +@node Answers +@chapter Correct version of some examples + +Some of the examples in this manuals are buggy or not very robust, for +demonstration purposes. Improved versions of these composite macros are +presented here. + +@menu +* Improved exch:: Solution for @code{exch} +* Improved forloop:: Solution for @code{forloop} +* Improved foreach:: Solution for @code{foreach} +* Improved copy:: Solution for @code{copy} +* Improved m4wrap:: Solution for @code{m4wrap} +* Improved cleardivert:: Solution for @code{cleardivert} +* Improved capitalize:: Solution for @code{capitalize} +* Improved fatal_error:: Solution for @code{fatal_error} +@end menu + +@node Improved exch +@section Solution for @code{exch} + +The @code{exch} macro (@pxref{Arguments}) as presented requires clients +to double quote their arguments. A nicer definition, which lets +clients follow the rule of thumb of one level of quoting per level of +parentheses, involves adding quotes in the definition of @code{exch}, as +follows: + +@example +define(`exch', ``$2', `$1'') +@result{} +define(exch(`expansion text', `macro')) +@result{} +macro +@result{}expansion text +@end example + +@node Improved forloop +@section Solution for @code{forloop} + +The @code{forloop} macro (@pxref{Forloop}) as presented earlier can go +into an infinite loop if given an iterator that is not parsed as a macro +name. It does not do any sanity checking on its numeric bounds, and +only permits decimal numbers for bounds. Here is an improved version, +shipped as @file{m4-@value{VERSION}/@/examples/@/forloop2.m4}; this +version also optimizes overhead by calling four macros instead of six +per iteration (excluding those in @var{text}), by not dereferencing the +@var{iterator} in the helper @code{@w{_forloop}}. + +@comment examples +@example +$ @kbd{m4 -d -I examples} +undivert(`forloop2.m4')dnl +@result{}divert(`-1') +@result{}# forloop(var, from, to, stmt) - improved version: +@result{}# works even if VAR is not a strict macro name +@result{}# performs sanity check that FROM is larger than TO +@result{}# allows complex numerical expressions in TO and FROM +@result{}define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1', +@result{} `pushdef(`$1')_$0(`$1', eval(`$2'), +@result{} eval(`$3'), `$4')popdef(`$1')')') +@result{}define(`_forloop', +@result{} `define(`$1', `$2')$4`'ifelse(`$2', `$3', `', +@result{} `$0(`$1', incr(`$2'), `$3', `$4')')') +@result{}divert`'dnl +include(`forloop2.m4') +@result{} +forloop(`i', `2', `1', `no iteration occurs') +@result{} +forloop(`', `1', `2', ` odd iterator name') +@result{} odd iterator name odd iterator name +forloop(`i', `5 + 5', `0xc', ` 0x`'eval(i, `16')') +@result{} 0xa 0xb 0xc +forloop(`i', `a', `b', `non-numeric bounds') +@error{}m4:stdin:6: bad expression in eval (bad input): (a) <= (b) +@result{} +@end example + +One other change to notice is that the improved version used @samp{_$0} +rather than @samp{_foreach} to invoke the helper routine. In general, +this is a good practice to follow, because then the set of macros can be +uniformly transformed. The following example shows a transformation +that doubles the current quoting and appends a suffix @samp{2} to each +transformed macro. If @code{foreach} refers to the literal +@samp{_foreach}, then @code{foreach2} invokes @code{_foreach} instead of +the intended @code{_foreach2}, and the mixing of quoting paradigms leads +to an infinite recursion loop in this example. + +@comment options: -L9 +@comment status: 1 +@comment examples +@example +$ @kbd{m4 -d -L 9 -I examples} +define(`arg1', `$1')include(`forloop2.m4')include(`quote.m4') +@result{} +define(`double', `define(`$1'`2', + arg1(patsubst(dquote(defn(`$1')), `[`']', `\&\&')))') +@result{} +double(`forloop')double(`_forloop')defn(`forloop2') +@result{}ifelse(eval(``($2) <= ($3)''), ``1'', +@result{} ``pushdef(``$1'')_$0(``$1'', eval(``$2''), +@result{} eval(``$3''), ``$4'')popdef(``$1'')'') +forloop(i, 1, 5, `ifelse(')forloop(i, 1, 5, `)') +@result{} +changequote(`[', `]')changequote([``], ['']) +@result{} +forloop2(i, 1, 5, ``ifelse('')forloop2(i, 1, 5, ``)'') +@result{} +changequote`'include(`forloop.m4') +@result{} +double(`forloop')double(`_forloop')defn(`forloop2') +@result{}pushdef(``$1'', ``$2'')_forloop($@@)popdef(``$1'') +forloop(i, 1, 5, `ifelse(')forloop(i, 1, 5, `)') +@result{} +changequote(`[', `]')changequote([``], ['']) +@result{} +forloop2(i, 1, 5, ``ifelse('')forloop2(i, 1, 5, ``)'') +@error{}m4:stdin:12: recursion limit of 9 exceeded, use -L to change it +@end example + +One more optimization is still possible. Instead of repeatedly +assigning a variable then invoking or dereferencing it, it is possible +to pass the current iterator value as a single argument. Coupled with +@code{curry} if other arguments are needed (@pxref{Composition}), or +with helper macros if the argument is needed in more than one place in +the expansion, the output can be generated with three, rather than four, +macros of overhead per iteration. Notice how the file +@file{m4-@value{VERSION}/@/examples/@/forloop3.m4} rearranges the +arguments of the helper @code{_forloop} to take two arguments that are +placed around the current value. By splitting a balanced set of +parantheses across multiple arguments, the helper macro can now be +shared by @code{forloop} and the new @code{forloop_arg}. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`forloop3.m4') +@result{} +undivert(`forloop3.m4')dnl +@result{}divert(`-1') +@result{}# forloop_arg(from, to, macro) - invoke MACRO(value) for +@result{}# each value between FROM and TO, without define overhead +@result{}define(`forloop_arg', `ifelse(eval(`($1) <= ($2)'), `1', +@result{} `_forloop(`$1', eval(`$2'), `$3(', `)')')') +@result{}# forloop(var, from, to, stmt) - refactored to share code +@result{}define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1', +@result{} `pushdef(`$1')_forloop(eval(`$2'), eval(`$3'), +@result{} `define(`$1',', `)$4')popdef(`$1')')') +@result{}define(`_forloop', +@result{} `$3`$1'$4`'ifelse(`$1', `$2', `', +@result{} `$0(incr(`$1'), `$2', `$3', `$4')')') +@result{}divert`'dnl +forloop(`i', `1', `3', ` i') +@result{} 1 2 3 +define(`echo', `$@@') +@result{} +forloop_arg(`1', `3', ` echo') +@result{} 1 2 3 +include(`curry.m4') +@result{} +forloop_arg(`1', `3', `curry(`pushdef', `a')') +@result{} +a +@result{}3 +popdef(`a')a +@result{}2 +popdef(`a')a +@result{}1 +popdef(`a')a +@result{}a +@end example + +Of course, it is possible to make even more improvements, such as +adding an optional step argument, or allowing iteration through +descending sequences. @acronym{GNU} Autoconf provides some of these +additional bells and whistles in its @code{m4_for} macro. + +@node Improved foreach +@section Solution for @code{foreach} + +The @code{foreach} and @code{foreachq} macros (@pxref{Foreach}) as +presented earlier each have flaws. First, we will examine and fix the +quadratic behavior of @code{foreachq}: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreachq.m4') +@result{} +traceon(`shift')debugmode(`aq') +@result{} +foreachq(`x', ``1', `2', `3', `4'', `x +')dnl +@result{}1 +@error{}m4trace: -3- shift(`1', `2', `3', `4') +@error{}m4trace: -2- shift(`1', `2', `3', `4') +@result{}2 +@error{}m4trace: -4- shift(`1', `2', `3', `4') +@error{}m4trace: -3- shift(`2', `3', `4') +@error{}m4trace: -3- shift(`1', `2', `3', `4') +@error{}m4trace: -2- shift(`2', `3', `4') +@result{}3 +@error{}m4trace: -5- shift(`1', `2', `3', `4') +@error{}m4trace: -4- shift(`2', `3', `4') +@error{}m4trace: -3- shift(`3', `4') +@error{}m4trace: -4- shift(`1', `2', `3', `4') +@error{}m4trace: -3- shift(`2', `3', `4') +@error{}m4trace: -2- shift(`3', `4') +@result{}4 +@error{}m4trace: -6- shift(`1', `2', `3', `4') +@error{}m4trace: -5- shift(`2', `3', `4') +@error{}m4trace: -4- shift(`3', `4') +@error{}m4trace: -3- shift(`4') +@end example + +@cindex quadratic behavior, avoiding +@cindex avoiding quadratic behavior +Each successive iteration was adding more quoted @code{shift} +invocations, and the entire list contents were passing through every +iteration. In general, when recursing, it is a good idea to make the +recursion use fewer arguments, rather than adding additional quoted +uses of @code{shift}. By doing so, @code{m4} uses less memory, invokes +fewer macros, is less likely to run into machine limits, and most +importantly, performs faster. The fixed version of @code{foreachq} can +be found in @file{m4-@value{VERSION}/@/examples/@/foreachq2.m4}: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreachq2.m4') +@result{} +undivert(`foreachq2.m4')dnl +@result{}include(`quote.m4')dnl +@result{}divert(`-1') +@result{}# foreachq(x, `item_1, item_2, ..., item_n', stmt) +@result{}# quoted list, improved version +@result{}define(`foreachq', `pushdef(`$1')_$0($@@)popdef(`$1')') +@result{}define(`_arg1q', ``$1'') +@result{}define(`_rest', `ifelse(`$#', `1', `', `dquote(shift($@@))')') +@result{}define(`_foreachq', `ifelse(`$2', `', `', +@result{} `define(`$1', _arg1q($2))$3`'$0(`$1', _rest($2), `$3')')') +@result{}divert`'dnl +traceon(`shift')debugmode(`aq') +@result{} +foreachq(`x', ``1', `2', `3', `4'', `x +')dnl +@result{}1 +@error{}m4trace: -3- shift(`1', `2', `3', `4') +@result{}2 +@error{}m4trace: -3- shift(`2', `3', `4') +@result{}3 +@error{}m4trace: -3- shift(`3', `4') +@result{}4 +@end example + +Note that the fixed version calls unquoted helper macros in +@code{@w{_foreachq}} to trim elements immediately; those helper macros +in turn must re-supply the layer of quotes lost in the macro invocation. +Contrast the use of @code{@w{_arg1q}}, which quotes the first list +element, with @code{@w{_arg1}} of the earlier implementation that +returned the first list element directly. Additionally, by calling the +helper method immediately, the @samp{defn(`@var{iterator}')} no longer +contains unexpanded macros. + +The astute m4 programmer might notice that the solution above still uses +more memory and macro invocations, and thus more time, than strictly +necessary. Note that @samp{$2}, which contains an arbitrarily long +quoted list, is expanded and rescanned three times per iteration of +@code{_foreachq}. Furthermore, every iteration of the algorithm +effectively unboxes then reboxes the list, which costs a couple of macro +invocations. It is possible to rewrite the algorithm for a bit more +speed by swapping the order of the arguments to @code{_foreachq} in +order to operate on an unboxed list in the first place, and by using the +fixed-length @samp{$#} instead of an arbitrary length list as the key to +end recursion. The result is an overhead of six macro invocations per +loop (excluding any macros in @var{text}), instead of eight. This +alternative approach is available as +@file{m4-@value{VERSION}/@/examples/@/foreach3.m4}: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreachq3.m4') +@result{} +undivert(`foreachq3.m4')dnl +@result{}divert(`-1') +@result{}# foreachq(x, `item_1, item_2, ..., item_n', stmt) +@result{}# quoted list, alternate improved version +@result{}define(`foreachq', `ifelse(`$2', `', `', +@result{} `pushdef(`$1')_$0(`$1', `$3', `', $2)popdef(`$1')')') +@result{}define(`_foreachq', `ifelse(`$#', `3', `', +@result{} `define(`$1', `$4')$2`'$0(`$1', `$2', +@result{} shift(shift(shift($@@))))')') +@result{}divert`'dnl +traceon(`shift')debugmode(`aq') +@result{} +foreachq(`x', ``1', `2', `3', `4'', `x +')dnl +@result{}1 +@error{}m4trace: -4- shift(`x', `x +@error{}', `', `1', `2', `3', `4') +@error{}m4trace: -3- shift(`x +@error{}', `', `1', `2', `3', `4') +@error{}m4trace: -2- shift(`', `1', `2', `3', `4') +@result{}2 +@error{}m4trace: -4- shift(`x', `x +@error{}', `1', `2', `3', `4') +@error{}m4trace: -3- shift(`x +@error{}', `1', `2', `3', `4') +@error{}m4trace: -2- shift(`1', `2', `3', `4') +@result{}3 +@error{}m4trace: -4- shift(`x', `x +@error{}', `2', `3', `4') +@error{}m4trace: -3- shift(`x +@error{}', `2', `3', `4') +@error{}m4trace: -2- shift(`2', `3', `4') +@result{}4 +@error{}m4trace: -4- shift(`x', `x +@error{}', `3', `4') +@error{}m4trace: -3- shift(`x +@error{}', `3', `4') +@error{}m4trace: -2- shift(`3', `4') +@end example + +In the current version of M4, every instance of @samp{$@@} is rescanned +as it is encountered. Thus, the @file{foreachq3.m4} alternative uses +much less memory than @file{foreachq2.m4}, and executes as much as 10% +faster, since each iteration encounters fewer @samp{$@@}. However, the +implementation of rescanning every byte in @samp{$@@} is quadratic in +the number of bytes scanned (for example, making the broken version in +@file{foreachq.m4} cubic, rather than quadratic, in behavior). A future +release of M4 will improve the underlying implementation by reusing +results of previous scans, so that both styles of @code{foreachq} can +become linear in the number of bytes scanned. Notice how the +implementation injects an empty argument prior to expanding @samp{$2} +within @code{foreachq}; the helper macro @code{_foreachq} then ignores +the third argument altogether, and ends recursion when there are three +arguments left because there was nothing left to pass through +@code{shift}. Thus, each iteration only needs one @code{ifelse}, rather +than the two conditionals used in the version from @file{foreachq2.m4}. + +@cindex nine arguments, more than +@cindex more than nine arguments +@cindex arguments, more than nine +So far, all of the implementations of @code{foreachq} presented have +been quadratic with M4 1.4.x. But @code{forloop} is linear, because +each iteration parses a constant amount of arguments. So, it is +possible to design a variant that uses @code{forloop} to do the +iteration, then uses @samp{$@@} only once at the end, giving a linear +result even with older M4 implementations. This implementation relies +on the @acronym{GNU} extension that @samp{$10} expands to the tenth +argument rather than the first argument concatenated with @samp{0}. The +trick is to define an intermediate macro that repeats the text +@code{m4_define(`$1', `$@var{n}')$2`'}, with @samp{n} set to successive +integers corresponding to each argument. The helper macro +@code{_foreachq_} is needed in order to generate the literal sequences +such as @samp{$1} into the intermediate macro, rather than expanding +them as the arguments of @code{_foreachq}. With this approach, no +@code{shift} calls are even needed! Even though there are seven macros +of overhead per iteration instead of six in @file{foreachq3.m4}, the +linear scaling is apparent at relatively small list sizes. However, +this approach will need adjustment when a future version of M4 follows +@acronym{POSIX} by no longer treating @samp{$10} as the tenth argument; +the anticipation is that @samp{$@{10@}} can be used instead, although +that alternative syntax is not yet supported. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreachq4.m4') +@result{} +undivert(`foreachq4.m4')dnl +@result{}include(`forloop2.m4')dnl +@result{}divert(`-1') +@result{}# foreachq(x, `item_1, item_2, ..., item_n', stmt) +@result{}# quoted list, version based on forloop +@result{}define(`foreachq', +@result{}`ifelse(`$2', `', `', `_$0(`$1', `$3', $2)')') +@result{}define(`_foreachq', +@result{}`pushdef(`$1', forloop(`$1', `3', `$#', +@result{} `$0_(`1', `2', indir(`$1'))')`popdef( +@result{} `$1')')indir(`$1', $@@)') +@result{}define(`_foreachq_', +@result{}``define(`$$1', `$$3')$$2`''') +@result{}divert`'dnl +traceon(`shift')debugmode(`aq') +@result{} +foreachq(`x', ``1', `2', `3', `4'', `x +')dnl +@result{}1 +@result{}2 +@result{}3 +@result{}4 +@end example + +For yet another approach, the improved version of @code{foreach}, +available in @file{m4-@value{VERSION}/@/examples/@/foreach2.m4}, simply +overquotes the arguments to @code{@w{_foreach}} to begin with, using +@code{dquote_elt}. Then @code{@w{_foreach}} can just use +@code{@w{_arg1}} to remove the extra layer of quoting that was added up +front: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreach2.m4') +@result{} +undivert(`foreach2.m4')dnl +@result{}include(`quote.m4')dnl +@result{}divert(`-1') +@result{}# foreach(x, (item_1, item_2, ..., item_n), stmt) +@result{}# parenthesized list, improved version +@result{}define(`foreach', `pushdef(`$1')_$0(`$1', +@result{} (dquote(dquote_elt$2)), `$3')popdef(`$1')') +@result{}define(`_arg1', `$1') +@result{}define(`_foreach', `ifelse(`$2', `(`')', `', +@result{} `define(`$1', _arg1$2)$3`'$0(`$1', (dquote(shift$2)), `$3')')') +@result{}divert`'dnl +traceon(`shift')debugmode(`aq') +@result{} +foreach(`x', `(`1', `2', `3', `4')', `x +')dnl +@error{}m4trace: -4- shift(`1', `2', `3', `4') +@error{}m4trace: -4- shift(`2', `3', `4') +@error{}m4trace: -4- shift(`3', `4') +@result{}1 +@error{}m4trace: -3- shift(``1'', ``2'', ``3'', ``4'') +@result{}2 +@error{}m4trace: -3- shift(``2'', ``3'', ``4'') +@result{}3 +@error{}m4trace: -3- shift(``3'', ``4'') +@result{}4 +@error{}m4trace: -3- shift(``4'') +@end example + +It is likewise possible to write a variant of @code{foreach} that +performs in linear time on M4 1.4.x; the easiest method is probably +writing a version of @code{foreach} that unboxes its list, then invokes +@code{_foreachq} as previously defined in @file{foreachq4.m4}. + +In summary, recursion over list elements is trickier than it appeared at +first glance, but provides a powerful idiom within @code{m4} processing. +As a final demonstration, both list styles are now able to handle +several scenarios that would wreak havoc on one or both of the original +implementations. This points out one other difference between the +list styles. @code{foreach} evaluates unquoted list elements only once, +in preparation for calling @code{@w{_foreach}}, similary for +@code{foreachq} as provided by @file{foreachq3.m4} or +@file{foreachq4.m4}. But +@code{foreachq}, as provided by @file{foreachq2.m4}, +evaluates unquoted list elements twice while visiting the first list +element, once in @code{@w{_arg1q}} and once in @code{@w{_rest}}. When +deciding which list style to use, one must take into account whether +repeating the side effects of unquoted list elements will have any +detrimental effects. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`foreach2.m4') +@result{} +include(`foreachq2.m4') +@result{} +dnl 0-element list: +foreach(`x', `', `') / foreachq(`x', `', `') +@result{} /@w{ } +dnl 1-element list of empty element +foreach(`x', `()', `') / foreachq(`x', ``'', `') +@result{}<> / <> +dnl 2-element list of empty elements +foreach(`x', `(`',`')', `') / foreachq(`x', ``',`'', `') +@result{}<><> / <><> +dnl 1-element list of a comma +foreach(`x', `(`,')', `') / foreachq(`x', ``,'', `') +@result{}<,> / <,> +dnl 2-element list of unbalanced parentheses +foreach(`x', `(`(', `)')', `') / foreachq(`x', ``(', `)'', `') +@result{}<(><)> / <(><)> +define(`ab', `oops')dnl using defn(`iterator') +foreach(`x', `(`a', `b')', `defn(`x')') /dnl + foreachq(`x', ``a', `b'', `defn(`x')') +@result{}ab / ab +define(`active', `ACT, IVE') +@result{} +traceon(`active') +@result{} +dnl list of unquoted macros; expansion occurs before recursion +foreach(`x', `(active, active)', ` +')dnl +@error{}m4trace: -4- active -> `ACT, IVE' +@error{}m4trace: -4- active -> `ACT, IVE' +@result{} +@result{} +@result{} +@result{} +foreachq(`x', `active, active', ` +')dnl +@error{}m4trace: -3- active -> `ACT, IVE' +@error{}m4trace: -3- active -> `ACT, IVE' +@result{} +@error{}m4trace: -3- active -> `ACT, IVE' +@error{}m4trace: -3- active -> `ACT, IVE' +@result{} +@result{} +@result{} +dnl list of quoted macros; expansion occurs during recursion +foreach(`x', `(`active', `active')', ` +')dnl +@error{}m4trace: -1- active -> `ACT, IVE' +@result{} +@error{}m4trace: -1- active -> `ACT, IVE' +@result{} +foreachq(`x', ``active', `active'', ` +')dnl +@error{}m4trace: -1- active -> `ACT, IVE' +@result{} +@error{}m4trace: -1- active -> `ACT, IVE' +@result{} +dnl list of double-quoted macro names; no expansion +foreach(`x', `(``active'', ``active'')', ` +')dnl +@result{} +@result{} +foreachq(`x', ```active'', ``active''', ` +')dnl +@result{} +@result{} +@end example + +@ignore +@comment Not worth putting in the manual, but make sure that foreach +@comment implementations behave, and that final implementation is +@comment linear. + +@comment boxed recursion + +@comment examples +@comment options: -Dlimit=10 -Dverbose +@example +$ @kbd {m4 -I examples -Dlimit=10 -Dverbose} +include(`loop.m4')dnl +@result{} 1 2 3 4 5 6 7 8 9 10 +@end example + +@comment unboxed recursion + +@comment examples +@comment options: -Dlimit=10 -Dverbose -Dalt +@example +$ @kbd {m4 -I examples -Dlimit=10 -Dverbose -Dalt} +include(`loop.m4')dnl +@result{} 1 2 3 4 5 6 7 8 9 10 +@end example + +@comment foreach via forloop recursion + +@comment examples +@comment options: -Dlimit=10 -Dverbose -Dalt=4 +@example +$ @kbd {m4 -I examples -Dlimit=10 -Dverbose -Dalt=4} +include(`loop.m4')dnl +@result{} 1 2 3 4 5 6 7 8 9 10 +@end example + +@comment examples +@comment options: -Dlimit=2500 -Dalt=4 +@example +$ @kbd {m4 -I examples -Dlimit=2500 -Dalt=4} +include(`loop.m4')dnl +@end example + +@comment examples +@comment options: -Dlimit=10000 -Dalt=4 +@example +$ @kbd {m4 -I examples -Dlimit=10000 -Dalt=4} +define(`foo', `divert`'len(popdef(`_foreachq')_foreachq($@@))')dnl +define(`debug', `pushdef(`_foreachq', defn(`foo'))') +@result{} +include(`loop.m4')dnl +@result{}48894 +@end example + +@end ignore + +@node Improved copy +@section Solution for @code{copy} + +The macro @code{copy} presented above +is unable to handle builtin tokens with M4 1.4.x, because it tries to +pass the builtin token through the macro @code{curry}, where it is +silently flattened to an empty string (@pxref{Composition}). Rather +than using the problematic @code{curry} to work around the limitation +that @code{stack_foreach} expects to invoke a macro that takes exactly +one argument, we can write a new macro that lets us form the exact +two-argument @code{pushdef} call sequence needed, so that we are no +longer passing a builtin token through a text macro. + +@deffn Composite stack_foreach_sep (@var{macro}, @var{pre}, @var{post}, @ + @var{sep}) +@deffnx Composite stack_foreach_sep_lifo (@var{macro}, @var{pre}, @ + @var{post}, @var{sep}) +For each of the @code{pushdef} definitions associated with @var{macro}, +expand the sequence @samp{@var{pre}`'definition`'@var{post}}. +Additionally, expand @var{sep} between definitions. +@code{stack_foreach_sep} visits the oldest definition first, while +@code{stack_foreach_sep_lifo} visits the current definition first. The +expansion may dereference @var{macro}, but should not modify it. There +are a few special macros, such as @code{defn}, which cannot be used as +the @var{macro} parameter. +@end deffn + +Note that @code{stack_foreach(`@var{macro}', `@var{action}')} is +equivalent to @code{stack_foreach_sep(`@var{macro}', `@var{action}(', +`)')}. By supplying explicit parentheses, split among the @var{pre} and +@var{post} arguments to @code{stack_foreach_sep}, it is now possible to +construct macro calls with more than one argument, without passing +builtin tokens through a macro call. It is likewise possible to +directly reference the stack definitions without a macro call, by +leaving @var{pre} and @var{post} empty. Thus, in addition to fixing +@code{copy} on builtin tokens, it also executes with fewer macro +invocations. + +The new macro also adds a separator that is only output after the first +iteration of the helper @code{_stack_reverse_sep}, implemented by +prepending the original @var{sep} to @var{pre} and omitting a @var{sep} +argument in subsequent iterations. Note that the empty string that +separates @var{sep} from @var{pre} is provided as part of the fourth +argument when originally calling @code{_stack_reverse_sep}, and not by +writing @code{$4`'$3} as the third argument in the recursive call; while +the other approach would give the same output, it does so at the expense +of increasing the argument size on each iteration of +@code{_stack_reverse_sep}, which results in quadratic instead of linear +execution time. The improved stack walking macros are available in +@file{m4-@value{VERSION}/@/examples/@/stack_sep.m4}: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`stack_sep.m4') +@result{} +define(`copy', `ifdef(`$2', `errprint(`$2 already defined +')m4exit(`1')', + `stack_foreach_sep(`$1', `pushdef(`$2',', `)')')')dnl +pushdef(`a', `1')pushdef(`a', defn(`divnum')) +@result{} +copy(`a', `b') +@result{} +b +@result{}0 +popdef(`b') +@result{} +b +@result{}1 +pushdef(`c', `1')pushdef(`c', `2') +@result{} +stack_foreach_sep_lifo(`c', `', `', `, ') +@result{}2, 1 +undivert(`stack_sep.m4')dnl +@result{}divert(`-1') +@result{}# stack_foreach_sep(macro, pre, post, sep) +@result{}# Invoke PRE`'defn`'POST with a single argument of each definition +@result{}# from the definition stack of MACRO, starting with the oldest, and +@result{}# separated by SEP between definitions. +@result{}define(`stack_foreach_sep', +@result{}`_stack_reverse_sep(`$1', `tmp-$1')'dnl +@result{}`_stack_reverse_sep(`tmp-$1', `$1', `$2`'defn(`$1')$3', `$4`'')') +@result{}# stack_foreach_sep_lifo(macro, pre, post, sep) +@result{}# Like stack_foreach_sep, but starting with the newest definition. +@result{}define(`stack_foreach_sep_lifo', +@result{}`_stack_reverse_sep(`$1', `tmp-$1', `$2`'defn(`$1')$3', `$4`'')'dnl +@result{}`_stack_reverse_sep(`tmp-$1', `$1')') +@result{}define(`_stack_reverse_sep', +@result{}`ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0( +@result{} `$1', `$2', `$4$3')')') +@result{}divert`'dnl +@end example + +@ignore +@comment Not worth putting in the manual, but make sure that +@comment stack_foreach_sep has linear performance. + +@comment examples +@example +$ @kbd {m4 -I examples} +include(`forloop3.m4')include(`stack_sep.m4')dnl +forloop(`i', `1', `10000', `pushdef(`s', i)') +@result{} +define(`colon', `:')define(`dash', `-') +@result{} +len(stack_foreach_sep(`s', `dash', `', `colon')) +@result{}58893 +@end example +@end ignore + +@node Improved m4wrap +@section Solution for @code{m4wrap} + +The replacement @code{m4wrap} versions presented above, designed to +guarantee FIFO or LIFO order regardless of the underlying M4 +implementation, share a bug when dealing with wrapped text that looks +like parameter expansion. Note how the invocation of +@code{m4wrap@var{n}} interprets these parameters, while using the +builtin preserves them for their intended use. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`wraplifo.m4') +@result{} +m4wrap(`define(`foo', ``$0:'-$1-$*-$#-')foo(`a', `b') +') +@result{} +builtin(`m4wrap', ``'define(`bar', ``$0:'-$1-$*-$#-')bar(`a', `b') +') +@result{} +^D +@result{}bar:-a-a,b-2- +@result{}m4wrap0:---0- +@end example + +Additionally, the computation of @code{_m4wrap_level} and creation of +multiple @code{m4wrap@var{n}} placeholders in the original examples is +more expensive in time and memory than strictly necessary. Notice how +the improved version grabs the wrapped text via @code{defn} to avoid +parameter expansion, then undefines @code{_m4wrap_text}, before +stripping a level of quotes with @code{_arg1} to expand the text. That +way, each level of wrapping reuses the single placeholder, which starts +each nesting level in an undefined state. + +Finally, it is worth emulating the @acronym{GNU} M4 extension of saving +all arguments to @code{m4wrap}, separated by a space, rather than saving +just the first argument. This is done with the @code{join} macro +documented previously (@pxref{Shift}). The improved LIFO example is +shipped as @file{m4-@value{VERSION}/@/examples/@/wraplifo2.m4}, and can +easily be converted to a FIFO solution by swapping the adjacent +invocations of @code{joinall} and @code{defn}. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`wraplifo2.m4') +@result{} +undivert(`wraplifo2.m4')dnl +@result{}dnl Redefine m4wrap to have LIFO semantics, improved example. +@result{}include(`join.m4')dnl +@result{}define(`_m4wrap', defn(`m4wrap'))dnl +@result{}define(`_arg1', `$1')dnl +@result{}define(`m4wrap', +@result{}`ifdef(`_$0_text', +@result{} `define(`_$0_text', joinall(` ', $@@)defn(`_$0_text'))', +@result{} `_$0(`_arg1(defn(`_$0_text')undefine(`_$0_text'))')dnl +@result{}define(`_$0_text', joinall(` ', $@@))')')dnl +m4wrap(`define(`foo', ``$0:'-$1-$*-$#-')foo(`a', `b') +') +@result{} +m4wrap(`lifo text +m4wrap(`nested', `', `$@@ +')') +@result{} +^D +@result{}lifo text +@result{}foo:-a-a,b-2- +@result{}nested $@@ +@end example + +@node Improved cleardivert +@section Solution for @code{cleardivert} + +The @code{cleardivert} macro (@pxref{Cleardivert}) cannot, as it stands, be +called without arguments to clear all pending diversions. That is +because using undivert with an empty string for an argument is different +than using it with no arguments at all. Compare the earlier definition +with one that takes the number of arguments into account: + +@example +define(`cleardivert', + `pushdef(`_n', divnum)divert(`-1')undivert($@@)divert(_n)popdef(`_n')') +@result{} +divert(`1')one +divert +@result{} +cleardivert +@result{} +undivert +@result{}one +@result{} +define(`cleardivert', + `pushdef(`_num', divnum)divert(`-1')ifelse(`$#', `0', + `undivert`'', `undivert($@@)')divert(_num)popdef(`_num')') +@result{} +divert(`2')two +divert +@result{} +cleardivert +@result{} +undivert +@result{} +@end example + +@node Improved capitalize +@section Solution for @code{capitalize} + +The @code{capitalize} macro (@pxref{Patsubst}) as presented earlier does +not allow clients to follow the quoting rule of thumb. Consider the +three macros @code{active}, @code{Active}, and @code{ACTIVE}, and the +difference between calling @code{capitalize} with the expansion of a +macro, expanding the result of a case change, and changing the case of a +double-quoted string: + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`capitalize.m4')dnl +define(`active', `act1, ive')dnl +define(`Active', `Act2, Ive')dnl +define(`ACTIVE', `ACT3, IVE')dnl +upcase(active) +@result{}ACT1,IVE +upcase(`active') +@result{}ACT3, IVE +upcase(``active'') +@result{}ACTIVE +downcase(ACTIVE) +@result{}act3,ive +downcase(`ACTIVE') +@result{}act1, ive +downcase(``ACTIVE'') +@result{}active +capitalize(active) +@result{}Act1 +capitalize(`active') +@result{}Active +capitalize(``active'') +@result{}_capitalize(`active') +define(`A', `OOPS') +@result{} +capitalize(active) +@result{}OOPSct1 +capitalize(`active') +@result{}OOPSctive +@end example + +First, when @code{capitalize} is called with more than one argument, it +was throwing away later arguments, whereas @code{upcase} and +@code{downcase} used @samp{$*} to collect them all. The fix is simple: +use @samp{$*} consistently. + +Next, with single-quoting, @code{capitalize} outputs a single character, +a set of quotes, then the rest of the characters, making it impossible +to invoke @code{Active} after the fact, and allowing the alternate macro +@code{A} to interfere. Here, the solution is to use additional quoting +in the helper macros, then pass the final over-quoted output string +through @code{_arg1} to remove the extra quoting and finally invoke the +concatenated portions as a single string. + +Finally, when passed a double-quoted string, the nested macro +@code{_capitalize} is never invoked because it ended up nested inside +quotes. This one is the toughest to fix. In short, we have no idea how +many levels of quotes are in effect on the substring being altered by +@code{patsubst}. If the replacement string cannot be expressed entirely +in terms of literal text and backslash substitutions, then we need a +mechanism to guarantee that the helper macros are invoked outside of +quotes. In other words, this sounds like a job for @code{changequote} +(@pxref{Changequote}). By changing the active quoting characters, we +can guarantee that replacement text injected by @code{patsubst} always +occurs in the middle of a string that has exactly one level of +over-quoting using alternate quotes; so the replacement text closes the +quoted string, invokes the helper macros, then reopens the quoted +string. In turn, that means the replacement text has unbalanced quotes, +necessitating another round of @code{changequote}. + +In the fixed version below, (also shipped as +@file{m4-@value{VERSION}/@/examples/@/capitalize.m4}), @code{capitalize} +uses the alternate quotes of @samp{<<[} and @samp{]>>} (the longer +strings are chosen so as to be less likely to appear in the text being +converted). The helpers @code{_to_alt} and @code{_from_alt} merely +reduce the number of characters required to perform a +@code{changequote}, since the definition changes twice. The outermost +pair means that @code{patsubst} and @code{_capitalize_alt} are invoked +with alternate quoting; the innermost pair is used so that the third +argument to @code{patsubst} can contain an unbalanced +@samp{]>>}/@samp{<<[} pair. Note that @code{upcase} and @code{downcase} +must be redefined as @code{_upcase_alt} and @code{_downcase_alt}, since +they contain nested quotes but are invoked with the alternate quoting +scheme in effect. + +@comment examples +@example +$ @kbd{m4 -I examples} +include(`capitalize2.m4')dnl +define(`active', `act1, ive')dnl +define(`Active', `Act2, Ive')dnl +define(`ACTIVE', `ACT3, IVE')dnl +define(`A', `OOPS')dnl +capitalize(active; `active'; ``active''; ```actIVE''') +@result{}Act1,Ive; Act2, Ive; Active; `Active' +undivert(`capitalize2.m4')dnl +@result{}divert(`-1') +@result{}# upcase(text) +@result{}# downcase(text) +@result{}# capitalize(text) +@result{}# change case of text, improved version +@result{}define(`upcase', `translit(`$*', `a-z', `A-Z')') +@result{}define(`downcase', `translit(`$*', `A-Z', `a-z')') +@result{}define(`_arg1', `$1') +@result{}define(`_to_alt', `changequote(`<<[', `]>>')') +@result{}define(`_from_alt', `changequote(<<[`]>>, <<[']>>)') +@result{}define(`_upcase_alt', `translit(<<[$*]>>, <<[a-z]>>, <<[A-Z]>>)') +@result{}define(`_downcase_alt', `translit(<<[$*]>>, <<[A-Z]>>, <<[a-z]>>)') +@result{}define(`_capitalize_alt', +@result{} `regexp(<<[$1]>>, <<[^\(\w\)\(\w*\)]>>, +@result{} <<[_upcase_alt(<<[<<[\1]>>]>>)_downcase_alt(<<[<<[\2]>>]>>)]>>)') +@result{}define(`capitalize', +@result{} `_arg1(_to_alt()patsubst(<<[<<[$*]>>]>>, <<[\w+]>>, +@result{} _from_alt()`]>>_$0_alt(<<[\&]>>)<<['_to_alt())_from_alt())') +@result{}divert`'dnl +@end example + +@node Improved fatal_error +@section Solution for @code{fatal_error} + +The @code{fatal_error} macro (@pxref{M4exit}) is not robust to versions +of @acronym{GNU} M4 earlier than 1.4.8, where invoking +@code{@w{__file__}} (@pxref{Location}) inside @code{m4wrap} would result +in an empty string, and @code{@w{__line__}} resulted in @samp{0} even +though all files start at line 1. Furthermore, versions earlier than +1.4.6 did not support the @code{@w{__program__}} macro. If you want +@code{fatal_error} to work across the entire 1.4.x release series, a +better implementation would be: + +@comment status: 1 +@example +define(`fatal_error', + `errprint(ifdef(`__program__', `__program__', ``m4'')'dnl +`:ifelse(__line__, `0', `', + `__file__:__line__:')` fatal error: $* +')m4exit(`1')') +@result{} +m4wrap(`divnum(`demo of internal message') +fatal_error(`inside wrapped text')') +@result{} +^D +@error{}m4:stdin:6: Warning: excess arguments to builtin `divnum' ignored +@result{}0 +@error{}m4:stdin:6: fatal error: inside wrapped text +@end example + +@c ========================================================== Appendices + +@node Copying This Package +@appendix How to make copies of the overall M4 package +@cindex License, code + +This appendix covers the license for copying the source code of the +overall M4 package. This manual is under a different set of +restrictions, covered later (@pxref{Copying This Manual}). + +@menu +* GNU General Public License:: License for copying the M4 package +@end menu + +@node GNU General Public License +@appendixsec License for copying the M4 package +@cindex GPL, GNU General Public License +@cindex GNU General Public License +@cindex General Public License (GPL), GNU +@include gpl-3.0.texi + +@node Copying This Manual +@appendix How to make copies of this manual +@cindex License, manual + +This appendix covers the license for copying this manual. Note that +some of the longer examples in this manual are also distributed in the +directory @file{m4-@value{VERSION}/@/examples/}, where a more +permissive license is in effect when copying just the examples. + +@menu +* GNU Free Documentation License:: License for copying this manual +@end menu + +@node GNU Free Documentation License +@appendixsec License for copying this manual +@cindex FDL, GNU Free Documentation License +@cindex GNU Free Documentation License +@cindex Free Documentation License (FDL), GNU +@include fdl-1.3.texi + +@node Indices +@appendix Indices of concepts and macros + +@menu +* Macro index:: Index for all @code{m4} macros +* Concept index:: Index for many concepts +@end menu + +@node Macro index +@appendixsec Index for all @code{m4} macros + +This index covers all @code{m4} builtins, as well as several useful +composite macros. References are exclusively to the places where a +macro is introduced the first time. + +@printindex fn + +@node Concept index +@appendixsec Index for many concepts + +@printindex cp + +@bye + +@c Local Variables: +@c coding: iso-8859-1 +@c fill-column: 72 +@c ispell-local-dictionary: "american" +@c indent-tabs-mode: nil +@c whitespace-check-buffer-indent: nil +@c End: diff --git a/coreseek/m4-1.4.13/doc/stamp-vti b/coreseek/m4-1.4.13/doc/stamp-vti new file mode 100644 index 0000000..de28fc0 --- /dev/null +++ b/coreseek/m4-1.4.13/doc/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 5 March 2009 +@set UPDATED-MONTH March 2009 +@set EDITION 1.4.13 +@set VERSION 1.4.13 diff --git a/coreseek/m4-1.4.13/doc/version.texi b/coreseek/m4-1.4.13/doc/version.texi new file mode 100644 index 0000000..de28fc0 --- /dev/null +++ b/coreseek/m4-1.4.13/doc/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 5 March 2009 +@set UPDATED-MONTH March 2009 +@set EDITION 1.4.13 +@set VERSION 1.4.13 diff --git a/coreseek/m4-1.4.13/examples/COPYING b/coreseek/m4-1.4.13/examples/COPYING new file mode 100644 index 0000000..c79fe3e --- /dev/null +++ b/coreseek/m4-1.4.13/examples/COPYING @@ -0,0 +1,8 @@ +The files in this directory provide example uses of GNU M4. +The following copyright notice applies to each of these +description files. + +Copyright (C) 2006 Free Software Foundation, Inc. +This file is free software; the Free Software Foundation +gives unlimited permission to copy and/or distribute it, +with or without modifications, as long as this notice is preserved. diff --git a/coreseek/m4-1.4.13/examples/Makefile b/coreseek/m4-1.4.13/examples/Makefile new file mode 100644 index 0000000..62abba6 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/Makefile @@ -0,0 +1,892 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# examples/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/m4 +pkgincludedir = $(includedir)/m4 +pkglibdir = $(libdir)/m4 +pkglibexecdir = $(libexecdir)/m4 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +subdir = examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in COPYING +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run aclocal-1.10b +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run tar +APPLE_UNIVERSAL_BUILD = 0 +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run automake-1.10b +AWK = gawk +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FCNTL_H = fcntl.h +FLOAT_H = +GETOPT_H = +GLIBC21 = yes +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP2 = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCLOSE = 0 +GNULIB_FFLUSH = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FOPEN = 1 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPL = 1 +GNULIB_FSEEK = 0 +GNULIB_FSEEKO = 1 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 0 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FWRITE = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 0 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 0 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETSUBOPT = 0 +GNULIB_GETUSERSHELL = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MATHL = 0 +GNULIB_MBRLEN = 0 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDTEMP = 1 +GNULIB_MKSTEMP = 1 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_PERROR = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_RANDOM_R = 0 +GNULIB_RAWMEMCHR = 1 +GNULIB_READLINK = 0 +GNULIB_REALLOC_POSIX = 0 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SETENV = 1 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 1 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 0 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 0 +GNULIB_STRERROR = 1 +GNULIB_STRNDUP = 1 +GNULIB_STRNLEN = 1 +GNULIB_STRPBRK = 0 +GNULIB_STRSEP = 0 +GNULIB_STRSIGNAL = 1 +GNULIB_STRSTR = 1 +GNULIB_STRTOD = 1 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRVERSCMP = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNSETENV = 1 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCTOB = 1 +GNULIB_WCWIDTH = 0 +GNULIB_WRITE = 0 +GREP = /bin/grep +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_CALLOC_POSIX = 1 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_EUIDACCESS = 1 +HAVE_FSEEKO = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_GETDOMAINNAME = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETUSERSHELL = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWCNTRL = 1 +HAVE_LCHMOD = 1 +HAVE_LINK = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MALLOC_POSIX = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDTEMP = 1 +HAVE_OS_H = 0 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_REALLOC_POSIX = 1 +HAVE_RPMATCH = 1 +HAVE_SCHED_H = +HAVE_SETENV = 1 +HAVE_SIGACTION = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRNDUP = 1 +HAVE_STRPBRK = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYS_BITYPES_H = +HAVE_SYS_INTTYPES_H = +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_UNISTD_H = 1 +HAVE_UNSETENV = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCTYPE_H = 1 +HAVE_WINT_T = 1 +HAVE__BOOL = 1 +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBCSTACK = +LIBINTL = +LIBM4_LIBDEPS = +LIBM4_LTLIBDEPS = +LIBMULTITHREAD = +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBS = +LIBSIGSEGV = +LIBTESTS_LIBDEPS = +LIBTHREAD = +LOCALCHARSET_TESTS_ENVIRONMENT = CHARSETALIASDIR="$(top_builddir)/lib" +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTLIBCSTACK = +LTLIBINTL = +LTLIBMULTITHREAD = +LTLIBOBJS = +LTLIBPTH = +LTLIBSIGSEGV = +LTLIBTHREAD = +M4_LIBOBJS = asnprintf.o asprintf.o basename.o cloexec.o close-stream.o closein.o closeout.o dirname.o dup-safer.o exitfail.o fd-safer.o fflush.o filenamecat.o fopen-safer.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnprintf.o vasprintf.o xmalloc.o +M4_LTLIBOBJS = asnprintf.lo asprintf.lo basename.lo cloexec.lo close-stream.lo closein.lo closeout.lo dirname.lo dup-safer.lo exitfail.lo fd-safer.lo fflush.lo filenamecat.lo fopen-safer.lo fseeko.lo isnanl.lo mkstemp-safer.lo pipe-safer.lo printf-args.lo printf-parse.lo quotearg.lo regex.lo stripslash.lo strstr.lo tempname.lo vasnprintf.lo vasprintf.lo xmalloc.lo +M4tests_LIBOBJS = +M4tests_LTLIBOBJS = +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NEXT_ERRNO_H = +NEXT_FCNTL_H = +NEXT_FLOAT_H = +NEXT_MATH_H = +NEXT_SCHED_H = +NEXT_SIGNAL_H = +NEXT_SPAWN_H = +NEXT_STDARG_H = +NEXT_STDINT_H = +NEXT_STDIO_H = +NEXT_STDLIB_H = +NEXT_STRING_H = +NEXT_SYS_STAT_H = +NEXT_SYS_TIME_H = +NEXT_SYS_WAIT_H = +NEXT_UNISTD_H = +NEXT_WCHAR_H = +NEXT_WCTYPE_H = +OBJEXT = o +PACKAGE = m4 +PACKAGE_BUGREPORT = bug-m4@gnu.org +PACKAGE_NAME = GNU M4 +PACKAGE_STRING = GNU M4 1.4.13 +PACKAGE_TARNAME = m4 +PACKAGE_URL = http://www.gnu.org/software/m4/ +PACKAGE_VERSION = 1.4.13 +PATH_SEPARATOR = : +POW_LIB = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_BTOWC = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_DPRINTF = 0 +REPLACE_FCHDIR = 0 +REPLACE_FCLOSE = 0 +REPLACE_FFLUSH = 1 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 1 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_GETCWD = 0 +REPLACE_GETLINE = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MBRLEN = 0 +REPLACE_MBRTOWC = 0 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKSTEMP = 0 +REPLACE_NAN = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_PERROR = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_PRINTF = 0 +REPLACE_PUTENV = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 1 +REPLACE_STRTOD = 0 +REPLACE_TRUNCL = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 0 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCTOB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SET_MAKE = +SHELL = /bin/bash +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +SPAWN_H = +STDARG_H = +STDBOOL_H = +STDINT_H = +STRIP = +SYS_STAT_H = sys/stat.h +SYS_TIME_H = +SYS_WAIT_H = sys/wait.h +UNISTD_H_HAVE_WINSOCK2_H = 0 +VERSION = 1.4.13 +VOID_UNSETENV = 0 +WCHAR_H = +WCHAR_T_SUFFIX = +WCTYPE_H = +WINT_T_SUFFIX = +abs_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/examples +abs_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/examples +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +EXTRA_DIST = \ +capitalize.m4 \ +capitalize2.m4 \ +comments.m4 \ +curry.m4 \ +ddivert.m4 \ +debug.m4 \ +esyscmd.m4 \ +exp.m4 \ +file.m4 \ +foo \ +foreach.m4 \ +foreach2.m4 \ +foreachq.m4 \ +foreachq2.m4 \ +foreachq3.m4 \ +foreachq4.m4 \ +forloop.m4 \ +forloop2.m4 \ +forloop3.m4 \ +fstab.m4 \ +hanoi.m4 \ +incl-test.m4 \ +incl.m4 \ +include.m4 \ +indir.m4 \ +join.m4 \ +loop.m4 \ +misc.m4 \ +multiquotes.m4 \ +patsubst.m4 \ +pushpop.m4 \ +quote.m4 \ +regexp.m4 \ +reverse.m4 \ +stack.m4 \ +stack_sep.m4 \ +sync-lines.m4 \ +sysv-args.m4 \ +trace.m4 \ +translit.m4 \ +undivert.incl \ +undivert.m4 \ +wrap.m4 \ +wrapfifo.m4 \ +wraplifo.m4 \ +wraplifo2.m4 + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --silent-rules examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --silent-rules examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/examples/Makefile.am b/coreseek/m4-1.4.13/examples/Makefile.am new file mode 100644 index 0000000..d3e0a24 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/Makefile.am @@ -0,0 +1,68 @@ +## Makefile.am - template for generating Makefile via Automake +## +## Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. +## +## This file is part of GNU M4. +## +## GNU M4 is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## GNU M4 is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . +## +## This file written by Eric Blake + +EXTRA_DIST =\ +capitalize.m4 \ +capitalize2.m4 \ +comments.m4 \ +curry.m4 \ +ddivert.m4 \ +debug.m4 \ +esyscmd.m4 \ +exp.m4 \ +file.m4 \ +foo \ +foreach.m4 \ +foreach2.m4 \ +foreachq.m4 \ +foreachq2.m4 \ +foreachq3.m4 \ +foreachq4.m4 \ +forloop.m4 \ +forloop2.m4 \ +forloop3.m4 \ +fstab.m4 \ +hanoi.m4 \ +incl-test.m4 \ +incl.m4 \ +include.m4 \ +indir.m4 \ +join.m4 \ +loop.m4 \ +misc.m4 \ +multiquotes.m4 \ +patsubst.m4 \ +pushpop.m4 \ +quote.m4 \ +regexp.m4 \ +reverse.m4 \ +stack.m4 \ +stack_sep.m4 \ +sync-lines.m4 \ +sysv-args.m4 \ +trace.m4 \ +translit.m4 \ +undivert.incl \ +undivert.m4 \ +wrap.m4 \ +wrapfifo.m4 \ +wraplifo.m4 \ +wraplifo2.m4 diff --git a/coreseek/m4-1.4.13/examples/Makefile.in b/coreseek/m4-1.4.13/examples/Makefile.in new file mode 100644 index 0000000..0e22470 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/Makefile.in @@ -0,0 +1,892 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = examples +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in COPYING +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FCNTL_H = @FCNTL_H@ +FLOAT_H = @FLOAT_H@ +GETOPT_H = @GETOPT_H@ +GLIBC21 = @GLIBC21@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBINTL = @LIBINTL@ +LIBM4_LIBDEPS = @LIBM4_LIBDEPS@ +LIBM4_LTLIBDEPS = @LIBM4_LTLIBDEPS@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTHREAD = @LIBTHREAD@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +LTLIBTHREAD = @LTLIBTHREAD@ +M4_LIBOBJS = @M4_LIBOBJS@ +M4_LTLIBOBJS = @M4_LTLIBOBJS@ +M4tests_LIBOBJS = @M4tests_LIBOBJS@ +M4tests_LTLIBOBJS = @M4tests_LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +SPAWN_H = @SPAWN_H@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_STAT_H = @SYS_STAT_H@ +SYS_TIME_H = @SYS_TIME_H@ +SYS_WAIT_H = @SYS_WAIT_H@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ +capitalize.m4 \ +capitalize2.m4 \ +comments.m4 \ +curry.m4 \ +ddivert.m4 \ +debug.m4 \ +esyscmd.m4 \ +exp.m4 \ +file.m4 \ +foo \ +foreach.m4 \ +foreach2.m4 \ +foreachq.m4 \ +foreachq2.m4 \ +foreachq3.m4 \ +foreachq4.m4 \ +forloop.m4 \ +forloop2.m4 \ +forloop3.m4 \ +fstab.m4 \ +hanoi.m4 \ +incl-test.m4 \ +incl.m4 \ +include.m4 \ +indir.m4 \ +join.m4 \ +loop.m4 \ +misc.m4 \ +multiquotes.m4 \ +patsubst.m4 \ +pushpop.m4 \ +quote.m4 \ +regexp.m4 \ +reverse.m4 \ +stack.m4 \ +stack_sep.m4 \ +sync-lines.m4 \ +sysv-args.m4 \ +trace.m4 \ +translit.m4 \ +undivert.incl \ +undivert.m4 \ +wrap.m4 \ +wrapfifo.m4 \ +wraplifo.m4 \ +wraplifo2.m4 + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --silent-rules examples/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --silent-rules examples/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/examples/capitalize.m4 b/coreseek/m4-1.4.13/examples/capitalize.m4 new file mode 100644 index 0000000..d4e4a50 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/capitalize.m4 @@ -0,0 +1,12 @@ +divert(`-1') +# upcase(text) +# downcase(text) +# capitalize(text) +# change case of text, simple version +define(`upcase', `translit(`$*', `a-z', `A-Z')') +define(`downcase', `translit(`$*', `A-Z', `a-z')') +define(`_capitalize', + `regexp(`$1', `^\(\w\)\(\w*\)', + `upcase(`\1')`'downcase(`\2')')') +define(`capitalize', `patsubst(`$1', `\w+', `_$0(`\&')')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/capitalize2.m4 b/coreseek/m4-1.4.13/examples/capitalize2.m4 new file mode 100644 index 0000000..154dc50 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/capitalize2.m4 @@ -0,0 +1,19 @@ +divert(`-1') +# upcase(text) +# downcase(text) +# capitalize(text) +# change case of text, improved version +define(`upcase', `translit(`$*', `a-z', `A-Z')') +define(`downcase', `translit(`$*', `A-Z', `a-z')') +define(`_arg1', `$1') +define(`_to_alt', `changequote(`<<[', `]>>')') +define(`_from_alt', `changequote(<<[`]>>, <<[']>>)') +define(`_upcase_alt', `translit(<<[$*]>>, <<[a-z]>>, <<[A-Z]>>)') +define(`_downcase_alt', `translit(<<[$*]>>, <<[A-Z]>>, <<[a-z]>>)') +define(`_capitalize_alt', + `regexp(<<[$1]>>, <<[^\(\w\)\(\w*\)]>>, + <<[_upcase_alt(<<[<<[\1]>>]>>)_downcase_alt(<<[<<[\2]>>]>>)]>>)') +define(`capitalize', + `_arg1(_to_alt()patsubst(<<[<<[$*]>>]>>, <<[\w+]>>, + _from_alt()`]>>_$0_alt(<<[\&]>>)<<['_to_alt())_from_alt())') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/comments.m4 b/coreseek/m4-1.4.13/examples/comments.m4 new file mode 100644 index 0000000..c1e3be0 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/comments.m4 @@ -0,0 +1,7 @@ +# An ordinary comment +define(`foo', # A comment in a macro +`Macro `foo' expansion') +foo +define(`comment', `*** Macro `comment' expansion ***') +changecom(`@', `@') +foo diff --git a/coreseek/m4-1.4.13/examples/curry.m4 b/coreseek/m4-1.4.13/examples/curry.m4 new file mode 100644 index 0000000..00997c3 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/curry.m4 @@ -0,0 +1,7 @@ +divert(`-1') +# curry(macro, args) +# Expand to a macro call that takes one argument, then invoke +# macro(args, extra). +define(`curry', `$1(shift($@,)_$0') +define(`_curry', ``$1')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/ddivert.m4 b/coreseek/m4-1.4.13/examples/ddivert.m4 new file mode 100644 index 0000000..e6e0017 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/ddivert.m4 @@ -0,0 +1,4 @@ +divert(1)Text diverted a first time. +divert(0)undivert(1)dnl +divert(1)Text diverted a second time. +divert(0)undivert(1)dnl diff --git a/coreseek/m4-1.4.13/examples/debug.m4 b/coreseek/m4-1.4.13/examples/debug.m4 new file mode 100644 index 0000000..16f4c74 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/debug.m4 @@ -0,0 +1,4 @@ +define(`countdown', `$1 ifelse(eval($1 > 0), 1, `countdown(decr($1))', `Liftoff')') +debugmode(`aeqc') +traceon(`countdown') +countdown(2) diff --git a/coreseek/m4-1.4.13/examples/esyscmd.m4 b/coreseek/m4-1.4.13/examples/esyscmd.m4 new file mode 100644 index 0000000..b839148 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/esyscmd.m4 @@ -0,0 +1,5 @@ +define(`hostname', esyscmd(`hostname'))dnl +`hostname = >>'hostname`<<' +define(`hostname', +pushdef(`_tmp', `$1')_tmp(translit(esyscmd(`hostname'), `.', `,'))`'popdef(`_tmp'))dnl +`hostname = >>'hostname`<<' diff --git a/coreseek/m4-1.4.13/examples/exp.m4 b/coreseek/m4-1.4.13/examples/exp.m4 new file mode 100644 index 0000000..8aef93e --- /dev/null +++ b/coreseek/m4-1.4.13/examples/exp.m4 @@ -0,0 +1 @@ +define(`countdown', `$1 ifelse(eval($1 > 0), 1, `countdown(decr($1))', `Done')') diff --git a/coreseek/m4-1.4.13/examples/file.m4 b/coreseek/m4-1.4.13/examples/file.m4 new file mode 100644 index 0000000..e7db5f1 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/file.m4 @@ -0,0 +1,5 @@ +changequote([[,]])dnl +define([[quoteall]], [[patsubst([[[[$*]]]], [[,[ ]+]], [[,]])]])dnl +define([[group]], quoteall(include([[/etc/group]])))dnl +dnl +group()dnl diff --git a/coreseek/m4-1.4.13/examples/foo b/coreseek/m4-1.4.13/examples/foo new file mode 100644 index 0000000..5716ca5 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/foo @@ -0,0 +1 @@ +bar diff --git a/coreseek/m4-1.4.13/examples/foreach.m4 b/coreseek/m4-1.4.13/examples/foreach.m4 new file mode 100644 index 0000000..9be25b0 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/foreach.m4 @@ -0,0 +1,8 @@ +divert(`-1') +# foreach(x, (item_1, item_2, ..., item_n), stmt) +# parenthesized list, simple version +define(`foreach', `pushdef(`$1')_foreach($@)popdef(`$1')') +define(`_arg1', `$1') +define(`_foreach', `ifelse(`$2', `()', `', + `define(`$1', _arg1$2)$3`'$0(`$1', (shift$2), `$3')')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/foreach2.m4 b/coreseek/m4-1.4.13/examples/foreach2.m4 new file mode 100644 index 0000000..74d00fb --- /dev/null +++ b/coreseek/m4-1.4.13/examples/foreach2.m4 @@ -0,0 +1,10 @@ +include(`quote.m4')dnl +divert(`-1') +# foreach(x, (item_1, item_2, ..., item_n), stmt) +# parenthesized list, improved version +define(`foreach', `pushdef(`$1')_$0(`$1', + (dquote(dquote_elt$2)), `$3')popdef(`$1')') +define(`_arg1', `$1') +define(`_foreach', `ifelse(`$2', `(`')', `', + `define(`$1', _arg1$2)$3`'$0(`$1', (dquote(shift$2)), `$3')')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/foreachq.m4 b/coreseek/m4-1.4.13/examples/foreachq.m4 new file mode 100644 index 0000000..d34fb5b --- /dev/null +++ b/coreseek/m4-1.4.13/examples/foreachq.m4 @@ -0,0 +1,9 @@ +include(`quote.m4')dnl +divert(`-1') +# foreachq(x, `item_1, item_2, ..., item_n', stmt) +# quoted list, simple version +define(`foreachq', `pushdef(`$1')_foreachq($@)popdef(`$1')') +define(`_arg1', `$1') +define(`_foreachq', `ifelse(quote($2), `', `', + `define(`$1', `_arg1($2)')$3`'$0(`$1', `shift($2)', `$3')')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/foreachq2.m4 b/coreseek/m4-1.4.13/examples/foreachq2.m4 new file mode 100644 index 0000000..f57d3ed --- /dev/null +++ b/coreseek/m4-1.4.13/examples/foreachq2.m4 @@ -0,0 +1,10 @@ +include(`quote.m4')dnl +divert(`-1') +# foreachq(x, `item_1, item_2, ..., item_n', stmt) +# quoted list, improved version +define(`foreachq', `pushdef(`$1')_$0($@)popdef(`$1')') +define(`_arg1q', ``$1'') +define(`_rest', `ifelse(`$#', `1', `', `dquote(shift($@))')') +define(`_foreachq', `ifelse(`$2', `', `', + `define(`$1', _arg1q($2))$3`'$0(`$1', _rest($2), `$3')')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/foreachq3.m4 b/coreseek/m4-1.4.13/examples/foreachq3.m4 new file mode 100644 index 0000000..5e65672 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/foreachq3.m4 @@ -0,0 +1,9 @@ +divert(`-1') +# foreachq(x, `item_1, item_2, ..., item_n', stmt) +# quoted list, alternate improved version +define(`foreachq', `ifelse(`$2', `', `', + `pushdef(`$1')_$0(`$1', `$3', `', $2)popdef(`$1')')') +define(`_foreachq', `ifelse(`$#', `3', `', + `define(`$1', `$4')$2`'$0(`$1', `$2', + shift(shift(shift($@))))')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/foreachq4.m4 b/coreseek/m4-1.4.13/examples/foreachq4.m4 new file mode 100644 index 0000000..3da64c9 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/foreachq4.m4 @@ -0,0 +1,13 @@ +include(`forloop2.m4')dnl +divert(`-1') +# foreachq(x, `item_1, item_2, ..., item_n', stmt) +# quoted list, version based on forloop +define(`foreachq', +`ifelse(`$2', `', `', `_$0(`$1', `$3', $2)')') +define(`_foreachq', +`pushdef(`$1', forloop(`$1', `3', `$#', + `$0_(`1', `2', indir(`$1'))')`popdef( + `$1')')indir(`$1', $@)') +define(`_foreachq_', +``define(`$$1', `$$3')$$2`''') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/forloop.m4 b/coreseek/m4-1.4.13/examples/forloop.m4 new file mode 100644 index 0000000..fdca260 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/forloop.m4 @@ -0,0 +1,6 @@ +divert(`-1') +# forloop(var, from, to, stmt) - simple version +define(`forloop', `pushdef(`$1', `$2')_forloop($@)popdef(`$1')') +define(`_forloop', + `$4`'ifelse($1, `$3', `', `define(`$1', incr($1))$0($@)')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/forloop2.m4 b/coreseek/m4-1.4.13/examples/forloop2.m4 new file mode 100644 index 0000000..b7154e8 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/forloop2.m4 @@ -0,0 +1,12 @@ +divert(`-1') +# forloop(var, from, to, stmt) - improved version: +# works even if VAR is not a strict macro name +# performs sanity check that FROM is larger than TO +# allows complex numerical expressions in TO and FROM +define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1', + `pushdef(`$1')_$0(`$1', eval(`$2'), + eval(`$3'), `$4')popdef(`$1')')') +define(`_forloop', + `define(`$1', `$2')$4`'ifelse(`$2', `$3', `', + `$0(`$1', incr(`$2'), `$3', `$4')')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/forloop3.m4 b/coreseek/m4-1.4.13/examples/forloop3.m4 new file mode 100644 index 0000000..98db20f --- /dev/null +++ b/coreseek/m4-1.4.13/examples/forloop3.m4 @@ -0,0 +1,13 @@ +divert(`-1') +# forloop_arg(from, to, macro) - invoke MACRO(value) for +# each value between FROM and TO, without define overhead +define(`forloop_arg', `ifelse(eval(`($1) <= ($2)'), `1', + `_forloop(`$1', eval(`$2'), `$3(', `)')')') +# forloop(var, from, to, stmt) - refactored to share code +define(`forloop', `ifelse(eval(`($2) <= ($3)'), `1', + `pushdef(`$1')_forloop(eval(`$2'), eval(`$3'), + `define(`$1',', `)$4')popdef(`$1')')') +define(`_forloop', + `$3`$1'$4`'ifelse(`$1', `$2', `', + `$0(incr(`$1'), `$2', `$3', `$4')')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/fstab.m4 b/coreseek/m4-1.4.13/examples/fstab.m4 new file mode 100644 index 0000000..dbf538a --- /dev/null +++ b/coreseek/m4-1.4.13/examples/fstab.m4 @@ -0,0 +1,7 @@ +define(`concat', `translit(``$*'', ` ')') +define(`fsent', `format(`%-25s %-16s nfs %-16s 0 0', `$1:$2', `$3', concat$4)') + +fsent(freja, /home/gevn, /home/gevn, (rw, soft, bg, grpid)) +fsent(freja, /home/freja, /home/freja, (rw, soft, grpid)) +fsent(rimfaxe, /home/rimfaxe, /home/rimfaxe, (rw, soft, bg)) + diff --git a/coreseek/m4-1.4.13/examples/hanoi.m4 b/coreseek/m4-1.4.13/examples/hanoi.m4 new file mode 100644 index 0000000..d290866 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/hanoi.m4 @@ -0,0 +1,15 @@ +divert(-1) + +# move(from, to) +define(`move', `Move one disk from `$1' to `$2'. +') + +# _hanoi (cnt, from, to, aux) +define(`_hanoi', `ifelse(eval(`$1'<=1), 1, `move($2, $3)', +`$0(decr($1), $2, $4, $3)move($2, $3)$0(decr($1), $4, $3, $2)')') + +# hanoi (cnt) +define(`hanoi', `_$0(`$1', source, destination, auxilliary)') + +# traceon(`move', `_hanoi', `decr') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/incl-test.m4 b/coreseek/m4-1.4.13/examples/incl-test.m4 new file mode 100644 index 0000000..8b7d223 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/incl-test.m4 @@ -0,0 +1,2 @@ +`include test file.' +define() diff --git a/coreseek/m4-1.4.13/examples/incl.m4 b/coreseek/m4-1.4.13/examples/incl.m4 new file mode 100644 index 0000000..ab9572e --- /dev/null +++ b/coreseek/m4-1.4.13/examples/incl.m4 @@ -0,0 +1,3 @@ +Include file start +foo +Include file end diff --git a/coreseek/m4-1.4.13/examples/include.m4 b/coreseek/m4-1.4.13/examples/include.m4 new file mode 100644 index 0000000..fb78804 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/include.m4 @@ -0,0 +1,7 @@ +Beginning. +include(`NOFILE') +Intermidiate +include(`test/incl-test.m4') +After +include(`NOFILE') +very late diff --git a/coreseek/m4-1.4.13/examples/indir.m4 b/coreseek/m4-1.4.13/examples/indir.m4 new file mode 100644 index 0000000..bc30123 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/indir.m4 @@ -0,0 +1,10 @@ +define(`%%$$##', `>>>$0<<< cnt $#') + +# indir(`%%$$##', nonsens, nonsens) +indir(`%%$$##', nonsens, nonsens) + +# indir(`indir', `%%$$##', nonsens) +indir(`indir', `%%$$##', nonsens) + +# indir(`indir', `indir', `indir', `indir', `%%$$##') +indir(`indir', `indir', `indir', `indir', `%%$$##') diff --git a/coreseek/m4-1.4.13/examples/join.m4 b/coreseek/m4-1.4.13/examples/join.m4 new file mode 100644 index 0000000..8687ac7 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/join.m4 @@ -0,0 +1,15 @@ +divert(`-1') +# join(sep, args) - join each non-empty ARG into a single +# string, with each element separated by SEP +define(`join', +`ifelse(`$#', `2', ``$2'', + `ifelse(`$2', `', `', ``$2'_')$0(`$1', shift(shift($@)))')') +define(`_join', +`ifelse(`$#$2', `2', `', + `ifelse(`$2', `', `', ``$1$2'')$0(`$1', shift(shift($@)))')') +# joinall(sep, args) - join each ARG, including empty ones, +# into a single string, with each element separated by SEP +define(`joinall', ``$2'_$0(`$1', shift($@))') +define(`_joinall', +`ifelse(`$#', `2', `', ``$1$3'$0(`$1', shift(shift($@)))')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/loop.m4 b/coreseek/m4-1.4.13/examples/loop.m4 new file mode 100644 index 0000000..b2fc64c --- /dev/null +++ b/coreseek/m4-1.4.13/examples/loop.m4 @@ -0,0 +1,18 @@ +dnl Stress test for recursion algorithms. Usage: +dnl m4 -Ipath/to/examples [-Doptions] loop.m4 +dnl Options include: +dnl -Dalt[=] - test with foreachq instead of foreachq2, default 3 +dnl -Dlimit= - set upper limit of sequence to , default 1000 +dnl -Dverbose - print the sequence to the screen, rather than discarding +dnl -Ddebug[=] - execute after forloop but before foreach +dnl -Dsleep= - sleep for seconds before exit, to allow time +dnl to examine peak process memory usage +include(`forloop2.m4')dnl +include(`quote.m4')dnl +ifelse(alt, `alt', `define(`alt', `2')', alt, `', `define(`alt', `3')')dnl +include(`foreachq'alt`.m4')dnl +ifdef(`limit', `', `define(`limit', `1000')')dnl +ifdef(`verbose', `', `divert(`-1')')dnl +ifdef(`debug', `', `define(`debug')')dnl +foreachq(`i', dquote(1forloop(`i', `2', limit, `,i'))debug, ` i') +ifdef(`sleep',`syscmd(`echo done>/dev/tty;sleep 'sleep)')dnl diff --git a/coreseek/m4-1.4.13/examples/misc.m4 b/coreseek/m4-1.4.13/examples/misc.m4 new file mode 100644 index 0000000..eff8766 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/misc.m4 @@ -0,0 +1,9 @@ +divert(-1) +define(`HOST', `vale') +define(`TMP', maketemp(`/tmp/hejXXXXXX')) +syscmd(`ypmatch' HOST `hosts | awk "{print \$1}"' > TMP) +define(`IP', include(TMP)) +syscmd(`rm -f' TMP) +divert + +IP diff --git a/coreseek/m4-1.4.13/examples/multiquotes.m4 b/coreseek/m4-1.4.13/examples/multiquotes.m4 new file mode 100644 index 0000000..b56cfbd --- /dev/null +++ b/coreseek/m4-1.4.13/examples/multiquotes.m4 @@ -0,0 +1,17 @@ +traceon +changequote([,])dnl +changequote([``], [''])dnl +````traceon'''' +define(``foo'', ````FOO'''')dnl +dumpdef(``foo'')dnl +changequote(``!'', ``!'')dnl +!foo! +foo +dumpdef(!foo!)dnl +define(!bar!, !BAR!) +bar +changequote(!>*>*>*>*>!, !<*<*<*<**>*>*>*>foo bar<*<*<*<*< +foo bar +>*>*>*>*>*>*><*<*<*<*<*<*< +dumpdef(>*>*>*>*>foo<*<*<*<*<, >*>*>*>*>bar<*<*<*<*<)dnl diff --git a/coreseek/m4-1.4.13/examples/patsubst.m4 b/coreseek/m4-1.4.13/examples/patsubst.m4 new file mode 100644 index 0000000..3b390ae --- /dev/null +++ b/coreseek/m4-1.4.13/examples/patsubst.m4 @@ -0,0 +1,8 @@ +# traceon(`patsubst') +patsubst(`GNUs not Unix', `^', `OBS: ') +patsubst(`GNUs not Unix', `\<', `OBS: ') +patsubst(`GNUs not Unix', `\<\w', `\0=') +patsubst(`GNUs not Unix', `\w*', `(\0)') +patsubst(`GNUs not Unix', `\w+', `(\0)') +patsubst(`GNUs not Unix', `\w+') +patsubst(`GNUs not Unix', `[ ]+', ` ') diff --git a/coreseek/m4-1.4.13/examples/pushpop.m4 b/coreseek/m4-1.4.13/examples/pushpop.m4 new file mode 100644 index 0000000..d0f2ebb --- /dev/null +++ b/coreseek/m4-1.4.13/examples/pushpop.m4 @@ -0,0 +1,25 @@ +divert(-1) +pushdef(`hej', `def 1.') +dumpdef(`hej') +pushdef(`hej', `def 2.') +dumpdef(`hej') +pushdef(`hej', `def 3.') +dumpdef(`hej') +pushdef(`hej', `def 4.') +dumpdef(`hej') + +popdef(`hej') +dumpdef(`hej') +popdef(`hej') +dumpdef(`hej') +popdef(`hej') +dumpdef(`hej') +popdef(`hej') +dumpdef(`hej') +popdef(`hej') +dumpdef(`hej') +popdef(`hej') + +dumpdef(`mac2') +popdef(`mac2') +dumpdef(`mac2') diff --git a/coreseek/m4-1.4.13/examples/quote.m4 b/coreseek/m4-1.4.13/examples/quote.m4 new file mode 100644 index 0000000..fae52c3 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/quote.m4 @@ -0,0 +1,9 @@ +divert(`-1') +# quote(args) - convert args to single-quoted string +define(`quote', `ifelse(`$#', `0', `', ``$*'')') +# dquote(args) - convert args to quoted list of quoted strings +define(`dquote', ``$@'') +# dquote_elt(args) - convert args to list of double-quoted strings +define(`dquote_elt', `ifelse(`$#', `0', `', `$#', `1', ```$1''', + ```$1'',$0(shift($@))')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/regexp.m4 b/coreseek/m4-1.4.13/examples/regexp.m4 new file mode 100644 index 0000000..a4ca573 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/regexp.m4 @@ -0,0 +1,12 @@ +traceon(`regexp')dnl +regexp(`hej med dig', `.*', `>>\0<<') +regexp(`hej med dig', `\w*', `>>\0<<') +regexp(`hej med dig', `.+', `>>\0<<') +regexp(`hej med dig', `m\w+', `>>\0<<') +regexp(`hej med dig', `m\(.*\)', `>>\0<< >>\1<<') + +regexp(`hej med dig', `.*') +regexp(`hej med dig', `\w*') +regexp(`hej med dig', `.+') +regexp(`hej med dig', `m\w+') +regexp(`hej med dig', `m\(.*\)') diff --git a/coreseek/m4-1.4.13/examples/reverse.m4 b/coreseek/m4-1.4.13/examples/reverse.m4 new file mode 100644 index 0000000..1e62008 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/reverse.m4 @@ -0,0 +1,4 @@ +define(`reverse', `ifelse(eval($# > 1), 1, `reverse(shift($@)), `$1'', ``$1'')') +``'' => reverse +``hej'' => reverse(hej) +``hej, med, dig'' => reverse(hej, med, dig) diff --git a/coreseek/m4-1.4.13/examples/stack.m4 b/coreseek/m4-1.4.13/examples/stack.m4 new file mode 100644 index 0000000..c1b9833 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/stack.m4 @@ -0,0 +1,16 @@ +divert(`-1') +# stack_foreach(macro, action) +# Invoke ACTION with a single argument of each definition +# from the definition stack of MACRO, starting with the oldest. +define(`stack_foreach', +`_stack_reverse(`$1', `tmp-$1')'dnl +`_stack_reverse(`tmp-$1', `$1', `$2(defn(`$1'))')') +# stack_foreach_lifo(macro, action) +# Invoke ACTION with a single argument of each definition +# from the definition stack of MACRO, starting with the newest. +define(`stack_foreach_lifo', +`_stack_reverse(`$1', `tmp-$1', `$2(defn(`$1'))')'dnl +`_stack_reverse(`tmp-$1', `$1')') +define(`_stack_reverse', +`ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0($@)')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/stack_sep.m4 b/coreseek/m4-1.4.13/examples/stack_sep.m4 new file mode 100644 index 0000000..767d15e --- /dev/null +++ b/coreseek/m4-1.4.13/examples/stack_sep.m4 @@ -0,0 +1,17 @@ +divert(`-1') +# stack_foreach_sep(macro, pre, post, sep) +# Invoke PRE`'defn`'POST with a single argument of each definition +# from the definition stack of MACRO, starting with the oldest, and +# separated by SEP between definitions. +define(`stack_foreach_sep', +`_stack_reverse_sep(`$1', `tmp-$1')'dnl +`_stack_reverse_sep(`tmp-$1', `$1', `$2`'defn(`$1')$3', `$4`'')') +# stack_foreach_sep_lifo(macro, pre, post, sep) +# Like stack_foreach_sep, but starting with the newest definition. +define(`stack_foreach_sep_lifo', +`_stack_reverse_sep(`$1', `tmp-$1', `$2`'defn(`$1')$3', `$4`'')'dnl +`_stack_reverse_sep(`tmp-$1', `$1')') +define(`_stack_reverse_sep', +`ifdef(`$1', `pushdef(`$2', defn(`$1'))$3`'popdef(`$1')$0( + `$1', `$2', `$4$3')')') +divert`'dnl diff --git a/coreseek/m4-1.4.13/examples/sync-lines.m4 b/coreseek/m4-1.4.13/examples/sync-lines.m4 new file mode 100644 index 0000000..405ab61 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/sync-lines.m4 @@ -0,0 +1,11 @@ +# Several input lines, expanding to one +define(`foo', ``foo' line one. +`foo' line two. +`foo' line three.') xyz +foo +# Several input lines, expanding to none +define(`foo', ``foo' line one. +`foo' line two. +`foo' line three.')dnl +# one input line, expanding to several output lines +foo foo diff --git a/coreseek/m4-1.4.13/examples/sysv-args.m4 b/coreseek/m4-1.4.13/examples/sysv-args.m4 new file mode 100644 index 0000000..7c82beb --- /dev/null +++ b/coreseek/m4-1.4.13/examples/sysv-args.m4 @@ -0,0 +1,14 @@ +divert(-1) +define(`nargs', `$#') +define(`concat', `ifelse(1, $#, `$1', `$1` 'concat(shift($@))')') +traceon(`concat', `nargs') +divert + +nargs +nargs() +nargs(1,2,3,4,5,6) + +concat() +concat(`hej', `med', `dig') +concat(`hej', `med', `dig', `en gang igen') +concat(an, awful, lot, of, argument, at, least, more, that, ten, silly, arguments) diff --git a/coreseek/m4-1.4.13/examples/trace.m4 b/coreseek/m4-1.4.13/examples/trace.m4 new file mode 100644 index 0000000..92ce981 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/trace.m4 @@ -0,0 +1,30 @@ +divert(-1) + +# move(from, to) +define(`move', `Move one disk from `$1' to `$2'. +') + +# _hanoi (cnt, from, to, aux) +define(`_hanoi', `ifelse(eval(`$1'<=1), 1, `move($2, $3)', +`$0(decr($1), $2, $4, $3)move($2, $3)$0(decr($1), $4, $3, $2)')') + +# hanoi (cnt) +define(`hanoi', `_$0(`$1', source, destination, auxilliary)') +divert`'dnl + +# Debugmode t +debugmode(`t') +hanoi(2) + +# Debugmode taeq +debugmode(`taeq') +hanoi(2) + +# Debugmode OFF +debugmode +hanoi(2) + +# Debugmode ae +debugmode(`ae') +traceon(`move', `_hanoi') +hanoi(2) diff --git a/coreseek/m4-1.4.13/examples/translit.m4 b/coreseek/m4-1.4.13/examples/translit.m4 new file mode 100644 index 0000000..078d172 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/translit.m4 @@ -0,0 +1,8 @@ +# traceon(`translit')dnl +translit(`GNUs not Unix', `a-z') +translit(`GNUs not Unix', `a-z', `A-Z') +translit(`GNUs not Unix', `A-Z', `a-z') +translit(`GNUs not Unix', `A-Z') +translit(`a-z', `a-') +translit(`A-Z', `A-Z-', `-A-Z') +translit(`GNUs not Unix', `Z-A', `a-z') diff --git a/coreseek/m4-1.4.13/examples/undivert.incl b/coreseek/m4-1.4.13/examples/undivert.incl new file mode 100644 index 0000000..408e0e2 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/undivert.incl @@ -0,0 +1 @@ +This is to be undiverted soon. diff --git a/coreseek/m4-1.4.13/examples/undivert.m4 b/coreseek/m4-1.4.13/examples/undivert.m4 new file mode 100644 index 0000000..61dfb39 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/undivert.m4 @@ -0,0 +1,5 @@ +define(`undiverted', `UNDIVERTED') +# undiverted file. +undivert(`undivert.incl') +# included file. +include(`undivert.incl') diff --git a/coreseek/m4-1.4.13/examples/wrap.m4 b/coreseek/m4-1.4.13/examples/wrap.m4 new file mode 100644 index 0000000..bbe7ae0 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/wrap.m4 @@ -0,0 +1,10 @@ +divert(-1) +m4wrap(`Wrapper no. 1 +') + +m4wrap(`Wrapper no. 2 +m4wrap(`Wrapper no. 3 +m4wrap(`Wrapper no. 4 +')')') +divert +No. 33: The End. diff --git a/coreseek/m4-1.4.13/examples/wrapfifo.m4 b/coreseek/m4-1.4.13/examples/wrapfifo.m4 new file mode 100644 index 0000000..95ff87a --- /dev/null +++ b/coreseek/m4-1.4.13/examples/wrapfifo.m4 @@ -0,0 +1,10 @@ +dnl Redefine m4wrap to have FIFO semantics. +define(`_m4wrap_level', `0')dnl +define(`m4wrap', +`ifdef(`m4wrap'_m4wrap_level, + `define(`m4wrap'_m4wrap_level, + defn(`m4wrap'_m4wrap_level)`$1')', + `builtin(`m4wrap', `define(`_m4wrap_level', + incr(_m4wrap_level))dnl +m4wrap'_m4wrap_level)dnl +define(`m4wrap'_m4wrap_level, `$1')')')dnl diff --git a/coreseek/m4-1.4.13/examples/wraplifo.m4 b/coreseek/m4-1.4.13/examples/wraplifo.m4 new file mode 100644 index 0000000..bdbf3fb --- /dev/null +++ b/coreseek/m4-1.4.13/examples/wraplifo.m4 @@ -0,0 +1,10 @@ +dnl Redefine m4wrap to have LIFO semantics. +define(`_m4wrap_level', `0')dnl +define(`_m4wrap', defn(`m4wrap'))dnl +define(`m4wrap', +`ifdef(`m4wrap'_m4wrap_level, + `define(`m4wrap'_m4wrap_level, + `$1'defn(`m4wrap'_m4wrap_level))', + `_m4wrap(`define(`_m4wrap_level', incr(_m4wrap_level))dnl +m4wrap'_m4wrap_level)dnl +define(`m4wrap'_m4wrap_level, `$1')')')dnl diff --git a/coreseek/m4-1.4.13/examples/wraplifo2.m4 b/coreseek/m4-1.4.13/examples/wraplifo2.m4 new file mode 100644 index 0000000..5b450a7 --- /dev/null +++ b/coreseek/m4-1.4.13/examples/wraplifo2.m4 @@ -0,0 +1,9 @@ +dnl Redefine m4wrap to have LIFO semantics, improved example. +include(`join.m4')dnl +define(`_m4wrap', defn(`m4wrap'))dnl +define(`_arg1', `$1')dnl +define(`m4wrap', +`ifdef(`_$0_text', + `define(`_$0_text', joinall(` ', $@)defn(`_$0_text'))', + `_$0(`_arg1(defn(`_$0_text')undefine(`_$0_text'))')dnl +define(`_$0_text', joinall(` ', $@))')')dnl diff --git a/coreseek/m4-1.4.13/lib/.deps/alloca.Po b/coreseek/m4-1.4.13/lib/.deps/alloca.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/alloca.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/asnprintf.Po b/coreseek/m4-1.4.13/lib/.deps/asnprintf.Po new file mode 100644 index 0000000..60ca5aa --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/asnprintf.Po @@ -0,0 +1,11 @@ +asnprintf.o: asnprintf.c config.h vasnprintf.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h + +config.h: + +vasnprintf.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/asprintf.Po b/coreseek/m4-1.4.13/lib/.deps/asprintf.Po new file mode 100644 index 0000000..3c251e5 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/asprintf.Po @@ -0,0 +1,89 @@ +asprintf.o: asprintf.c config.h stdio.h /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h + +config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/basename.Po b/coreseek/m4-1.4.13/lib/.deps/basename.Po new file mode 100644 index 0000000..11ab075 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/basename.Po @@ -0,0 +1,67 @@ +basename.o: basename.c config.h dirname.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h string.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + xalloc.h xstrndup.h + +config.h: + +dirname.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +xalloc.h: + +xstrndup.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/btowc.Po b/coreseek/m4-1.4.13/lib/.deps/btowc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/btowc.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/c-ctype.Po b/coreseek/m4-1.4.13/lib/.deps/c-ctype.Po new file mode 100644 index 0000000..62c073e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/c-ctype.Po @@ -0,0 +1,8 @@ +c-ctype.o: c-ctype.c config.h c-ctype.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h + +config.h: + +c-ctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/c-stack.Po b/coreseek/m4-1.4.13/lib/.deps/c-stack.Po new file mode 100644 index 0000000..ec3399d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/c-stack.Po @@ -0,0 +1,161 @@ +c-stack.o: c-stack.c config.h gettext.h string.h /usr/include/string.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + signal.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/ucontext.h \ + c-stack.h exitfail.h + +config.h: + +gettext.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/ucontext.h: + +c-stack.h: + +exitfail.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/clean-temp.Po b/coreseek/m4-1.4.13/lib/.deps/clean-temp.Po new file mode 100644 index 0000000..2299ae4 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/clean-temp.Po @@ -0,0 +1,230 @@ +clean-temp.o: clean-temp.c config.h clean-temp.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + fcntl.h sys/stat.h /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h unistd.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h error.h fatal-signal.h \ + pathmax.h tmpdir.h xalloc.h xmalloca.h malloca.h gl_linkedhash_list.h \ + gl_list.h gettext.h close-stream.h stdio--.h stdio-safer.h + +config.h: + +clean-temp.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +fcntl.h: + +sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +error.h: + +fatal-signal.h: + +pathmax.h: + +tmpdir.h: + +xalloc.h: + +xmalloca.h: + +malloca.h: + +gl_linkedhash_list.h: + +gl_list.h: + +gettext.h: + +close-stream.h: + +stdio--.h: + +stdio-safer.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/cloexec.Po b/coreseek/m4-1.4.13/lib/.deps/cloexec.Po new file mode 100644 index 0000000..2a487c8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/cloexec.Po @@ -0,0 +1,125 @@ +cloexec.o: cloexec.c config.h cloexec.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h unistd.h \ + /usr/include/unistd.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h fcntl.h sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h + +config.h: + +cloexec.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +fcntl.h: + +sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/close-stream.Po b/coreseek/m4-1.4.13/lib/.deps/close-stream.Po new file mode 100644 index 0000000..c102b9d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/close-stream.Po @@ -0,0 +1,117 @@ +close-stream.o: close-stream.c config.h close-stream.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h fpending.h \ + /usr/include/stdio_ext.h unlocked-io.h + +config.h: + +close-stream.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +fpending.h: + +/usr/include/stdio_ext.h: + +unlocked-io.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/closein.Po b/coreseek/m4-1.4.13/lib/.deps/closein.Po new file mode 100644 index 0000000..757c056 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/closein.Po @@ -0,0 +1,172 @@ +closein.o: closein.c config.h closein.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h stdio.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h gettext.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h close-stream.h closeout.h \ + error.h exitfail.h freadahead.h quotearg.h + +config.h: + +closein.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +gettext.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +close-stream.h: + +closeout.h: + +error.h: + +exitfail.h: + +freadahead.h: + +quotearg.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/closeout.Po b/coreseek/m4-1.4.13/lib/.deps/closeout.Po new file mode 100644 index 0000000..2c264b8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/closeout.Po @@ -0,0 +1,169 @@ +closeout.o: closeout.c config.h closeout.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + stdio.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h gettext.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h close-stream.h error.h \ + exitfail.h quotearg.h + +config.h: + +closeout.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +gettext.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +close-stream.h: + +error.h: + +exitfail.h: + +quotearg.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/dirname.Po b/coreseek/m4-1.4.13/lib/.deps/dirname.Po new file mode 100644 index 0000000..342d1b0 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/dirname.Po @@ -0,0 +1,65 @@ +dirname.o: dirname.c config.h dirname.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h string.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + xalloc.h + +config.h: + +dirname.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +xalloc.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/dup-safer.Po b/coreseek/m4-1.4.13/lib/.deps/dup-safer.Po new file mode 100644 index 0000000..432fa22 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/dup-safer.Po @@ -0,0 +1,121 @@ +dup-safer.o: dup-safer.c config.h unistd-safer.h fcntl.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h unistd.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h + +config.h: + +unistd-safer.h: + +fcntl.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/error.Po b/coreseek/m4-1.4.13/lib/.deps/error.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/error.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/execute.Po b/coreseek/m4-1.4.13/lib/.deps/execute.Po new file mode 100644 index 0000000..272a36c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/execute.Po @@ -0,0 +1,193 @@ +execute.o: execute.c config.h execute.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + fcntl.h /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h unistd.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/fcntl.h /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h signal.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h error.h fatal-signal.h \ + wait-process.h gettext.h string.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/spawn.h \ + /usr/include/sched.h /usr/include/x86_64-linux-gnu/bits/sched.h + +config.h: + +execute.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +fcntl.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +error.h: + +fatal-signal.h: + +wait-process.h: + +gettext.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/spawn.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/exitfail.Po b/coreseek/m4-1.4.13/lib/.deps/exitfail.Po new file mode 100644 index 0000000..59f9d3b --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/exitfail.Po @@ -0,0 +1,100 @@ +exitfail.o: exitfail.c config.h exitfail.h stdlib.h /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h + +config.h: + +exitfail.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/fatal-signal.Po b/coreseek/m4-1.4.13/lib/.deps/fatal-signal.Po new file mode 100644 index 0000000..9fdb359 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/fatal-signal.Po @@ -0,0 +1,133 @@ +fatal-signal.o: fatal-signal.c config.h fatal-signal.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h signal.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h sig-handler.h xalloc.h + +config.h: + +fatal-signal.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +sig-handler.h: + +xalloc.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/fd-safer.Po b/coreseek/m4-1.4.13/lib/.deps/fd-safer.Po new file mode 100644 index 0000000..dc643b1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/fd-safer.Po @@ -0,0 +1,116 @@ +fd-safer.o: fd-safer.c config.h unistd-safer.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + unistd.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h + +config.h: + +unistd-safer.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/fflush.Po b/coreseek/m4-1.4.13/lib/.deps/fflush.Po new file mode 100644 index 0000000..3f01288 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/fflush.Po @@ -0,0 +1,152 @@ +fflush.o: fflush.c config.h stdio.h /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + unistd.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h freading.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/include/stdio_ext.h fpurge.h stdio-impl.h + +config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +freading.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/include/stdio_ext.h: + +fpurge.h: + +stdio-impl.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/filenamecat.Po b/coreseek/m4-1.4.13/lib/.deps/filenamecat.Po new file mode 100644 index 0000000..7782408 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/filenamecat.Po @@ -0,0 +1,121 @@ +filenamecat.o: filenamecat.c config.h filenamecat.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h dirname.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h xalloc.h + +config.h: + +filenamecat.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +dirname.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +xalloc.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/fopen-safer.Po b/coreseek/m4-1.4.13/lib/.deps/fopen-safer.Po new file mode 100644 index 0000000..6d9edfa --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/fopen-safer.Po @@ -0,0 +1,145 @@ +fopen-safer.o: fopen-safer.c config.h stdio-safer.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + unistd.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd-safer.h + +config.h: + +stdio-safer.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd-safer.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/fopen.Po b/coreseek/m4-1.4.13/lib/.deps/fopen.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/fopen.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/fpending.Po b/coreseek/m4-1.4.13/lib/.deps/fpending.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/fpending.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/fpurge.Po b/coreseek/m4-1.4.13/lib/.deps/fpurge.Po new file mode 100644 index 0000000..33cb9b2 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/fpurge.Po @@ -0,0 +1,131 @@ +fpurge.o: fpurge.c config.h fpurge.h stdio.h /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/stdio_ext.h stdlib.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdio-impl.h + +config.h: + +fpurge.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/stdio_ext.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdio-impl.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/freadahead.Po b/coreseek/m4-1.4.13/lib/.deps/freadahead.Po new file mode 100644 index 0000000..691413e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/freadahead.Po @@ -0,0 +1,129 @@ +freadahead.o: freadahead.c config.h freadahead.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdio-impl.h + +config.h: + +freadahead.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdio-impl.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/freading.Po b/coreseek/m4-1.4.13/lib/.deps/freading.Po new file mode 100644 index 0000000..e4b4035 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/freading.Po @@ -0,0 +1,100 @@ +freading.o: freading.c config.h freading.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/stdio_ext.h stdio-impl.h + +config.h: + +freading.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/stdio_ext.h: + +stdio-impl.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/frexp.Po b/coreseek/m4-1.4.13/lib/.deps/frexp.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/frexp.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/frexpl.Po b/coreseek/m4-1.4.13/lib/.deps/frexpl.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/frexpl.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/fseeko.Po b/coreseek/m4-1.4.13/lib/.deps/fseeko.Po new file mode 100644 index 0000000..acb74eb --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/fseeko.Po @@ -0,0 +1,126 @@ +fseeko.o: fseeko.c config.h stdio.h /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h stdio-impl.h + +config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +stdio-impl.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/ftello.Po b/coreseek/m4-1.4.13/lib/.deps/ftello.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/ftello.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/getdtablesize.Po b/coreseek/m4-1.4.13/lib/.deps/getdtablesize.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/getdtablesize.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/getopt.Po b/coreseek/m4-1.4.13/lib/.deps/getopt.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/getopt.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/getopt1.Po b/coreseek/m4-1.4.13/lib/.deps/getopt1.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/getopt1.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/gettimeofday.Po b/coreseek/m4-1.4.13/lib/.deps/gettimeofday.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/gettimeofday.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/gl_avltree_oset.Po b/coreseek/m4-1.4.13/lib/.deps/gl_avltree_oset.Po new file mode 100644 index 0000000..53e869e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/gl_avltree_oset.Po @@ -0,0 +1,110 @@ +gl_avltree_oset.o: gl_avltree_oset.c config.h gl_avltree_oset.h gl_oset.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h xalloc.h gl_anytree_oset.h + +config.h: + +gl_avltree_oset.h: + +gl_oset.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +xalloc.h: + +gl_anytree_oset.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/gl_linkedhash_list.Po b/coreseek/m4-1.4.13/lib/.deps/gl_linkedhash_list.Po new file mode 100644 index 0000000..17c18cb --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/gl_linkedhash_list.Po @@ -0,0 +1,152 @@ +gl_linkedhash_list.o: gl_linkedhash_list.c config.h gl_linkedhash_list.h \ + gl_list.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h xalloc.h xsize.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h gl_anyhash_list1.h \ + gl_anylinked_list1.h gl_anyhash_list2.h gl_anylinked_list2.h + +config.h: + +gl_linkedhash_list.h: + +gl_list.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +xalloc.h: + +xsize.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +gl_anyhash_list1.h: + +gl_anylinked_list1.h: + +gl_anyhash_list2.h: + +gl_anylinked_list2.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/gl_list.Po b/coreseek/m4-1.4.13/lib/.deps/gl_list.Po new file mode 100644 index 0000000..122955c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/gl_list.Po @@ -0,0 +1,11 @@ +gl_list.o: gl_list.c config.h gl_list.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h + +config.h: + +gl_list.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/gl_oset.Po b/coreseek/m4-1.4.13/lib/.deps/gl_oset.Po new file mode 100644 index 0000000..4d99cec --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/gl_oset.Po @@ -0,0 +1,11 @@ +gl_oset.o: gl_oset.c config.h gl_oset.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h + +config.h: + +gl_oset.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/isnan.Po b/coreseek/m4-1.4.13/lib/.deps/isnan.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/isnan.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/isnand.Po b/coreseek/m4-1.4.13/lib/.deps/isnand.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/isnand.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/isnanf.Po b/coreseek/m4-1.4.13/lib/.deps/isnanf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/isnanf.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/isnanl.Po b/coreseek/m4-1.4.13/lib/.deps/isnanl.Po new file mode 100644 index 0000000..8837512 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/isnanl.Po @@ -0,0 +1,90 @@ +isnanl.o: isnanl.c isnan.c config.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h string.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + float+.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h + +isnan.c: + +config.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +float+.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/localcharset.Po b/coreseek/m4-1.4.13/lib/.deps/localcharset.Po new file mode 100644 index 0000000..9133404 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/localcharset.Po @@ -0,0 +1,151 @@ +localcharset.o: localcharset.c config.h localcharset.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h string.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/langinfo.h \ + /usr/include/nl_types.h /usr/include/x86_64-linux-gnu/bits/locale.h \ + configmake.h + +config.h: + +localcharset.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +string.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/langinfo.h: + +/usr/include/nl_types.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +configmake.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/lseek.Po b/coreseek/m4-1.4.13/lib/.deps/lseek.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/lseek.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/lstat.Po b/coreseek/m4-1.4.13/lib/.deps/lstat.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/lstat.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/malloc.Po b/coreseek/m4-1.4.13/lib/.deps/malloc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/malloc.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/malloca.Po b/coreseek/m4-1.4.13/lib/.deps/malloca.Po new file mode 100644 index 0000000..c021ba1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/malloca.Po @@ -0,0 +1,101 @@ +malloca.o: malloca.c config.h malloca.h alloca.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h + +config.h: + +malloca.h: + +alloca.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/mbrtowc.Po b/coreseek/m4-1.4.13/lib/.deps/mbrtowc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/mbrtowc.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/mbsinit.Po b/coreseek/m4-1.4.13/lib/.deps/mbsinit.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/mbsinit.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/memchr2.Po b/coreseek/m4-1.4.13/lib/.deps/memchr2.Po new file mode 100644 index 0000000..fecfc20 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/memchr2.Po @@ -0,0 +1,94 @@ +memchr2.o: memchr2.c config.h memchr2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h string.h \ + /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h + +config.h: + +memchr2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +string.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/mkdtemp.Po b/coreseek/m4-1.4.13/lib/.deps/mkdtemp.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/mkdtemp.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/mkstemp-safer.Po b/coreseek/m4-1.4.13/lib/.deps/mkstemp-safer.Po new file mode 100644 index 0000000..7804a25 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/mkstemp-safer.Po @@ -0,0 +1,103 @@ +mkstemp-safer.o: mkstemp-safer.c config.h stdlib-safer.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h unistd-safer.h + +config.h: + +stdlib-safer.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +unistd-safer.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/mkstemp.Po b/coreseek/m4-1.4.13/lib/.deps/mkstemp.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/mkstemp.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/obstack.Po b/coreseek/m4-1.4.13/lib/.deps/obstack.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/obstack.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/open.Po b/coreseek/m4-1.4.13/lib/.deps/open.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/open.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/pipe-safer.Po b/coreseek/m4-1.4.13/lib/.deps/pipe-safer.Po new file mode 100644 index 0000000..6507df7 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/pipe-safer.Po @@ -0,0 +1,116 @@ +pipe-safer.o: pipe-safer.c config.h unistd-safer.h unistd.h \ + /usr/include/unistd.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h + +config.h: + +unistd-safer.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/pipe.Po b/coreseek/m4-1.4.13/lib/.deps/pipe.Po new file mode 100644 index 0000000..70d3a23 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/pipe.Po @@ -0,0 +1,195 @@ +pipe.o: pipe.c config.h pipe.h stdlib.h /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + fcntl.h sys/stat.h /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h signal.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h error.h fatal-signal.h \ + unistd-safer.h wait-process.h gettext.h string.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/spawn.h \ + /usr/include/sched.h /usr/include/x86_64-linux-gnu/bits/sched.h + +config.h: + +pipe.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +fcntl.h: + +sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +error.h: + +fatal-signal.h: + +unistd-safer.h: + +wait-process.h: + +gettext.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/spawn.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/printf-args.Po b/coreseek/m4-1.4.13/lib/.deps/printf-args.Po new file mode 100644 index 0000000..a488599 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/printf-args.Po @@ -0,0 +1,42 @@ +printf-args.o: printf-args.c config.h printf-args.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h /usr/include/wchar.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h stdio.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h + +config.h: + +printf-args.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/wchar.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/printf-frexp.Po b/coreseek/m4-1.4.13/lib/.deps/printf-frexp.Po new file mode 100644 index 0000000..df4de50 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/printf-frexp.Po @@ -0,0 +1,54 @@ +printf-frexp.o: printf-frexp.c config.h printf-frexp.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h math.h \ + /usr/include/math.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h + +config.h: + +printf-frexp.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +math.h: + +/usr/include/math.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/printf-frexpl.Po b/coreseek/m4-1.4.13/lib/.deps/printf-frexpl.Po new file mode 100644 index 0000000..52f9a35 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/printf-frexpl.Po @@ -0,0 +1,58 @@ +printf-frexpl.o: printf-frexpl.c printf-frexp.c config.h printf-frexpl.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h math.h \ + /usr/include/math.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h fpucw.h + +printf-frexp.c: + +config.h: + +printf-frexpl.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +math.h: + +/usr/include/math.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +fpucw.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/printf-parse.Po b/coreseek/m4-1.4.13/lib/.deps/printf-parse.Po new file mode 100644 index 0000000..a005d48 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/printf-parse.Po @@ -0,0 +1,166 @@ +printf-parse.o: printf-parse.c config.h printf-parse.h printf-args.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h /usr/include/wchar.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h stdio.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + stdlib.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + xsize.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h + +config.h: + +printf-parse.h: + +printf-args.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/wchar.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +xsize.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/progname.Po b/coreseek/m4-1.4.13/lib/.deps/progname.Po new file mode 100644 index 0000000..aa4041e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/progname.Po @@ -0,0 +1,58 @@ +progname.o: progname.c config.h progname.h string.h /usr/include/string.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h + +config.h: + +progname.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/quotearg.Po b/coreseek/m4-1.4.13/lib/.deps/quotearg.Po new file mode 100644 index 0000000..65fd873 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/quotearg.Po @@ -0,0 +1,183 @@ +quotearg.o: quotearg.c config.h quotearg.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h xalloc.h \ + /usr/include/ctype.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/wchar.h \ + stdio.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h /usr/include/wctype.h \ + gettext.h + +config.h: + +quotearg.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +xalloc.h: + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/wchar.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/wctype.h: + +gettext.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/rawmemchr.Po b/coreseek/m4-1.4.13/lib/.deps/rawmemchr.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/rawmemchr.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/regcomp.Po b/coreseek/m4-1.4.13/lib/.deps/regcomp.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/regcomp.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/regex.Po b/coreseek/m4-1.4.13/lib/.deps/regex.Po new file mode 100644 index 0000000..0cc4e07 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/regex.Po @@ -0,0 +1,200 @@ +regex.o: regex.c config.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h regex.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h regex_internal.h \ + /usr/include/assert.h /usr/include/ctype.h /usr/include/xlocale.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h localcharset.h \ + /usr/include/locale.h /usr/include/x86_64-linux-gnu/bits/locale.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + regex_internal.c regcomp.c regexec.c + +config.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +regex.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +regex_internal.h: + +/usr/include/assert.h: + +/usr/include/ctype.h: + +/usr/include/xlocale.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +localcharset.h: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/wctype.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +regex_internal.c: + +regcomp.c: + +regexec.c: diff --git a/coreseek/m4-1.4.13/lib/.deps/regex_internal.Po b/coreseek/m4-1.4.13/lib/.deps/regex_internal.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/regex_internal.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/regexec.Po b/coreseek/m4-1.4.13/lib/.deps/regexec.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/regexec.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/sigaction.Po b/coreseek/m4-1.4.13/lib/.deps/sigaction.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/sigaction.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/signbitd.Po b/coreseek/m4-1.4.13/lib/.deps/signbitd.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/signbitd.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/signbitf.Po b/coreseek/m4-1.4.13/lib/.deps/signbitf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/signbitf.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/signbitl.Po b/coreseek/m4-1.4.13/lib/.deps/signbitl.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/signbitl.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/sigprocmask.Po b/coreseek/m4-1.4.13/lib/.deps/sigprocmask.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/sigprocmask.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/snprintf.Po b/coreseek/m4-1.4.13/lib/.deps/snprintf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/snprintf.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawn_faction_addclose.Po b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_addclose.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_addclose.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawn_faction_adddup2.Po b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_adddup2.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_adddup2.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawn_faction_addopen.Po b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_addopen.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_addopen.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawn_faction_destroy.Po b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_destroy.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawn_faction_init.Po b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_init.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawn_faction_init.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawnattr_destroy.Po b/coreseek/m4-1.4.13/lib/.deps/spawnattr_destroy.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawnattr_destroy.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawnattr_init.Po b/coreseek/m4-1.4.13/lib/.deps/spawnattr_init.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawnattr_init.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawnattr_setflags.Po b/coreseek/m4-1.4.13/lib/.deps/spawnattr_setflags.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawnattr_setflags.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawnattr_setsigmask.Po b/coreseek/m4-1.4.13/lib/.deps/spawnattr_setsigmask.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawnattr_setsigmask.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawni.Po b/coreseek/m4-1.4.13/lib/.deps/spawni.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawni.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/spawnp.Po b/coreseek/m4-1.4.13/lib/.deps/spawnp.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/spawnp.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/stdio-write.Po b/coreseek/m4-1.4.13/lib/.deps/stdio-write.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/stdio-write.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/strchrnul.Po b/coreseek/m4-1.4.13/lib/.deps/strchrnul.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/strchrnul.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/strerror.Po b/coreseek/m4-1.4.13/lib/.deps/strerror.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/strerror.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/stripslash.Po b/coreseek/m4-1.4.13/lib/.deps/stripslash.Po new file mode 100644 index 0000000..f86cd0a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/stripslash.Po @@ -0,0 +1,11 @@ +stripslash.o: stripslash.c config.h dirname.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h + +config.h: + +dirname.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/strndup.Po b/coreseek/m4-1.4.13/lib/.deps/strndup.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/strndup.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/strnlen.Po b/coreseek/m4-1.4.13/lib/.deps/strnlen.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/strnlen.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/strsignal.Po b/coreseek/m4-1.4.13/lib/.deps/strsignal.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/strsignal.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/strstr.Po b/coreseek/m4-1.4.13/lib/.deps/strstr.Po new file mode 100644 index 0000000..eb22ede --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/strstr.Po @@ -0,0 +1,95 @@ +strstr.o: strstr.c config.h string.h /usr/include/string.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h str-two-way.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h + +config.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +str-two-way.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/strtod.Po b/coreseek/m4-1.4.13/lib/.deps/strtod.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/strtod.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/strtol.Po b/coreseek/m4-1.4.13/lib/.deps/strtol.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/strtol.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/tempname.Po b/coreseek/m4-1.4.13/lib/.deps/tempname.Po new file mode 100644 index 0000000..d92cbac --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/tempname.Po @@ -0,0 +1,189 @@ +tempname.o: tempname.c config.h tempname.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/assert.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h fcntl.h sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h \ + /usr/include/x86_64-linux-gnu/sys/time.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h + +config.h: + +tempname.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/assert.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +fcntl.h: + +sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/include/x86_64-linux-gnu/sys/time.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/tmpdir.Po b/coreseek/m4-1.4.13/lib/.deps/tmpdir.Po new file mode 100644 index 0000000..4bde4d1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/tmpdir.Po @@ -0,0 +1,167 @@ +tmpdir.o: tmpdir.c config.h tmpdir.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h + +config.h: + +tmpdir.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/vasnprintf.Po b/coreseek/m4-1.4.13/lib/.deps/vasnprintf.Po new file mode 100644 index 0000000..65d4c5a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/vasnprintf.Po @@ -0,0 +1,234 @@ +vasnprintf.o: vasnprintf.c config.h alloca.h vasnprintf.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h /usr/include/locale.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/xlocale.h \ + stdio.h /usr/include/stdio.h /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h printf-parse.h \ + printf-args.h /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h xsize.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + math.h /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h isnanl-nolibm.h fpucw.h + +config.h: + +alloca.h: + +vasnprintf.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/locale.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/xlocale.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/float.h: + +printf-parse.h: + +printf-args.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +xsize.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +math.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +isnanl-nolibm.h: + +fpucw.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/vasprintf.Po b/coreseek/m4-1.4.13/lib/.deps/vasprintf.Po new file mode 100644 index 0000000..7581c1f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/vasprintf.Po @@ -0,0 +1,164 @@ +vasprintf.o: vasprintf.c config.h stdio.h /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h vasnprintf.h + +config.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +vasnprintf.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/verror.Po b/coreseek/m4-1.4.13/lib/.deps/verror.Po new file mode 100644 index 0000000..1bd0ac4 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/verror.Po @@ -0,0 +1,124 @@ +verror.o: verror.c config.h verror.h error.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h xvasprintf.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + stdlib.h /usr/include/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h + +config.h: + +verror.h: + +error.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +xvasprintf.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/version-etc-fsf.Po b/coreseek/m4-1.4.13/lib/.deps/version-etc-fsf.Po new file mode 100644 index 0000000..eef438d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/version-etc-fsf.Po @@ -0,0 +1,92 @@ +version-etc-fsf.o: version-etc-fsf.c config.h version-etc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h + +config.h: + +version-etc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/version-etc.Po b/coreseek/m4-1.4.13/lib/.deps/version-etc.Po new file mode 100644 index 0000000..2958fd8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/version-etc.Po @@ -0,0 +1,145 @@ +version-etc.o: version-etc.c config.h version-etc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/xlocale.h \ + alloca.h /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h unlocked-io.h gettext.h \ + string.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h + +config.h: + +version-etc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/xlocale.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +unlocked-io.h: + +gettext.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/wait-process.Po b/coreseek/m4-1.4.13/lib/.deps/wait-process.Po new file mode 100644 index 0000000..09e7563 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/wait-process.Po @@ -0,0 +1,178 @@ +wait-process.o: wait-process.c config.h wait-process.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + string.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h signal.h \ + /usr/include/signal.h /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h sys/wait.h \ + /usr/include/x86_64-linux-gnu/sys/wait.h \ + /usr/include/x86_64-linux-gnu/sys/resource.h \ + /usr/include/x86_64-linux-gnu/bits/resource.h error.h fatal-signal.h \ + xalloc.h gettext.h + +config.h: + +wait-process.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +sys/wait.h: + +/usr/include/x86_64-linux-gnu/sys/wait.h: + +/usr/include/x86_64-linux-gnu/sys/resource.h: + +/usr/include/x86_64-linux-gnu/bits/resource.h: + +error.h: + +fatal-signal.h: + +xalloc.h: + +gettext.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/wcrtomb.Po b/coreseek/m4-1.4.13/lib/.deps/wcrtomb.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/wcrtomb.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/lib/.deps/xalloc-die.Po b/coreseek/m4-1.4.13/lib/.deps/xalloc-die.Po new file mode 100644 index 0000000..b6cc0f9 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/xalloc-die.Po @@ -0,0 +1,121 @@ +xalloc-die.o: xalloc-die.c config.h xalloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h error.h exitfail.h gettext.h \ + string.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h + +config.h: + +xalloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +error.h: + +exitfail.h: + +gettext.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/xasprintf.Po b/coreseek/m4-1.4.13/lib/.deps/xasprintf.Po new file mode 100644 index 0000000..0316897 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/xasprintf.Po @@ -0,0 +1,8 @@ +xasprintf.o: xasprintf.c config.h xvasprintf.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h + +config.h: + +xvasprintf.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/xmalloc.Po b/coreseek/m4-1.4.13/lib/.deps/xmalloc.Po new file mode 100644 index 0000000..d7b6174 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/xmalloc.Po @@ -0,0 +1,114 @@ +xmalloc.o: xmalloc.c config.h xalloc.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h string.h \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h + +config.h: + +xalloc.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +string.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/xmalloca.Po b/coreseek/m4-1.4.13/lib/.deps/xmalloca.Po new file mode 100644 index 0000000..ba9e00c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/xmalloca.Po @@ -0,0 +1,105 @@ +xmalloca.o: xmalloca.c config.h xmalloca.h malloca.h alloca.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h stdlib.h \ + /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h xalloc.h + +config.h: + +xmalloca.h: + +malloca.h: + +alloca.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +xalloc.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/xprintf.Po b/coreseek/m4-1.4.13/lib/.deps/xprintf.Po new file mode 100644 index 0000000..3076ce6 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/xprintf.Po @@ -0,0 +1,133 @@ +xprintf.o: xprintf.c config.h xprintf.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h stdio.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/endian.h /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/errno.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + error.h exitfail.h gettext.h string.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h + +config.h: + +xprintf.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +error.h: + +exitfail.h: + +gettext.h: + +string.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/xstrndup.Po b/coreseek/m4-1.4.13/lib/.deps/xstrndup.Po new file mode 100644 index 0000000..360ff03 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/xstrndup.Po @@ -0,0 +1,62 @@ +xstrndup.o: xstrndup.c config.h xstrndup.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h string.h \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + xalloc.h + +config.h: + +xstrndup.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +string.h: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +xalloc.h: diff --git a/coreseek/m4-1.4.13/lib/.deps/xvasprintf.Po b/coreseek/m4-1.4.13/lib/.deps/xvasprintf.Po new file mode 100644 index 0000000..2bb53b5 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/.deps/xvasprintf.Po @@ -0,0 +1,161 @@ +xvasprintf.o: xvasprintf.c config.h xvasprintf.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h /usr/include/errno.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + stdio.h /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h xalloc.h xsize.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h + +config.h: + +xvasprintf.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +xalloc.h: + +xsize.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: diff --git a/coreseek/m4-1.4.13/lib/Makefile b/coreseek/m4-1.4.13/lib/Makefile new file mode 100644 index 0000000..92655e2 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/Makefile @@ -0,0 +1,2164 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# lib/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: gnulib-tool --import --dir=. --local-dir=local --lib=libm4 --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --with-tests --avoid=lock-tests --avoid=tls-tests --no-libtool --macro-prefix=M4 announce-gen assert autobuild avltree-oset binary-io c-stack clean-temp cloexec close-stream closein config-h dirname error execute fdl-1.3 fflush filenamecat fopen fopen-safer fseeko gendocs getopt git-version-gen gnumakefile gnupload gpl-3.0 intprops memchr2 mkstemp obstack pipe progname regex sigaction stdbool stdint stdlib-safer strsignal strstr strtod strtol unlocked-io verror version-etc version-etc-fsf wait-process xalloc xprintf xvasprintf-posix + + + + +pkgdatadir = $(datadir)/m4 +pkgincludedir = $(includedir)/m4 +pkglibdir = $(libdir)/m4 +pkglibexecdir = $(libexecdir)/m4 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +subdir = lib +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.hin alloca.c +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +AM_V_AR = $(am__v_AR_$(V)) +am__v_AR_ = @echo " AR " $@; +am__v_AR_0 = @echo " AR " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +libm4_a_AR = $(AR) $(ARFLAGS) +am__DEPENDENCIES_1 = +am__dirstamp = $(am__leading_dot)dirstamp +am_libm4_a_OBJECTS = gl_avltree_oset.$(OBJEXT) c-ctype.$(OBJEXT) \ + c-stack.$(OBJEXT) clean-temp.$(OBJEXT) execute.$(OBJEXT) \ + fatal-signal.$(OBJEXT) fpurge.$(OBJEXT) freadahead.$(OBJEXT) \ + freading.$(OBJEXT) gl_linkedhash_list.$(OBJEXT) \ + gl_list.$(OBJEXT) localcharset.$(OBJEXT) \ + glthread/lock.$(OBJEXT) malloca.$(OBJEXT) memchr2.$(OBJEXT) \ + gl_oset.$(OBJEXT) pipe.$(OBJEXT) printf-frexp.$(OBJEXT) \ + printf-frexpl.$(OBJEXT) progname.$(OBJEXT) \ + glthread/threadlib.$(OBJEXT) glthread/tls.$(OBJEXT) \ + tmpdir.$(OBJEXT) verror.$(OBJEXT) version-etc.$(OBJEXT) \ + version-etc-fsf.$(OBJEXT) wait-process.$(OBJEXT) \ + xalloc-die.$(OBJEXT) xmalloca.$(OBJEXT) xprintf.$(OBJEXT) \ + xstrndup.$(OBJEXT) xvasprintf.$(OBJEXT) xasprintf.$(OBJEXT) +libm4_a_OBJECTS = $(am_libm4_a_OBJECTS) +LTLIBRARIES = $(noinst_LTLIBRARIES) +DEFAULT_INCLUDES = -I. +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = @echo " CC " $@; +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = @echo " CCLD " $@; +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libm4_a_SOURCES) $(EXTRA_libm4_a_SOURCES) +DIST_SOURCES = $(libm4_a_SOURCES) $(EXTRA_libm4_a_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run aclocal-1.10b +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run tar +APPLE_UNIVERSAL_BUILD = 0 +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run automake-1.10b +AWK = gawk +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FCNTL_H = fcntl.h +FLOAT_H = +GETOPT_H = +GLIBC21 = yes +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP2 = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCLOSE = 0 +GNULIB_FFLUSH = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FOPEN = 1 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPL = 1 +GNULIB_FSEEK = 0 +GNULIB_FSEEKO = 1 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 0 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FWRITE = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 0 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 0 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETSUBOPT = 0 +GNULIB_GETUSERSHELL = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MATHL = 0 +GNULIB_MBRLEN = 0 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDTEMP = 1 +GNULIB_MKSTEMP = 1 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_PERROR = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_RANDOM_R = 0 +GNULIB_RAWMEMCHR = 1 +GNULIB_READLINK = 0 +GNULIB_REALLOC_POSIX = 0 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SETENV = 1 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 1 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 0 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 0 +GNULIB_STRERROR = 1 +GNULIB_STRNDUP = 1 +GNULIB_STRNLEN = 1 +GNULIB_STRPBRK = 0 +GNULIB_STRSEP = 0 +GNULIB_STRSIGNAL = 1 +GNULIB_STRSTR = 1 +GNULIB_STRTOD = 1 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRVERSCMP = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNSETENV = 1 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCTOB = 1 +GNULIB_WCWIDTH = 0 +GNULIB_WRITE = 0 +GREP = /bin/grep +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_CALLOC_POSIX = 1 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_EUIDACCESS = 1 +HAVE_FSEEKO = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_GETDOMAINNAME = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETUSERSHELL = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWCNTRL = 1 +HAVE_LCHMOD = 1 +HAVE_LINK = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MALLOC_POSIX = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDTEMP = 1 +HAVE_OS_H = 0 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_REALLOC_POSIX = 1 +HAVE_RPMATCH = 1 +HAVE_SCHED_H = +HAVE_SETENV = 1 +HAVE_SIGACTION = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRNDUP = 1 +HAVE_STRPBRK = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYS_BITYPES_H = +HAVE_SYS_INTTYPES_H = +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_UNISTD_H = 1 +HAVE_UNSETENV = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCTYPE_H = 1 +HAVE_WINT_T = 1 +HAVE__BOOL = 1 +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBCSTACK = +LIBINTL = +LIBM4_LIBDEPS = +LIBM4_LTLIBDEPS = +LIBMULTITHREAD = +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBS = $(POW_LIB) +LIBSIGSEGV = +LIBTESTS_LIBDEPS = +LIBTHREAD = +LOCALCHARSET_TESTS_ENVIRONMENT = CHARSETALIASDIR="$(top_builddir)/lib" +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTLIBCSTACK = +LTLIBINTL = +LTLIBMULTITHREAD = +LTLIBOBJS = +LTLIBPTH = +LTLIBSIGSEGV = +LTLIBTHREAD = +M4_LIBOBJS = asnprintf.o asprintf.o basename.o cloexec.o close-stream.o closein.o closeout.o dirname.o dup-safer.o exitfail.o fd-safer.o fflush.o filenamecat.o fopen-safer.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnprintf.o vasprintf.o xmalloc.o +M4_LTLIBOBJS = asnprintf.lo asprintf.lo basename.lo cloexec.lo close-stream.lo closein.lo closeout.lo dirname.lo dup-safer.lo exitfail.lo fd-safer.lo fflush.lo filenamecat.lo fopen-safer.lo fseeko.lo isnanl.lo mkstemp-safer.lo pipe-safer.lo printf-args.lo printf-parse.lo quotearg.lo regex.lo stripslash.lo strstr.lo tempname.lo vasnprintf.lo vasprintf.lo xmalloc.lo +M4tests_LIBOBJS = +M4tests_LTLIBOBJS = +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NEXT_ERRNO_H = +NEXT_FCNTL_H = +NEXT_FLOAT_H = +NEXT_MATH_H = +NEXT_SCHED_H = +NEXT_SIGNAL_H = +NEXT_SPAWN_H = +NEXT_STDARG_H = +NEXT_STDINT_H = +NEXT_STDIO_H = +NEXT_STDLIB_H = +NEXT_STRING_H = +NEXT_SYS_STAT_H = +NEXT_SYS_TIME_H = +NEXT_SYS_WAIT_H = +NEXT_UNISTD_H = +NEXT_WCHAR_H = +NEXT_WCTYPE_H = +OBJEXT = o +PACKAGE = m4 +PACKAGE_BUGREPORT = bug-m4@gnu.org +PACKAGE_NAME = GNU M4 +PACKAGE_STRING = GNU M4 1.4.13 +PACKAGE_TARNAME = m4 +PACKAGE_URL = http://www.gnu.org/software/m4/ +PACKAGE_VERSION = 1.4.13 +PATH_SEPARATOR = : +POW_LIB = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_BTOWC = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_DPRINTF = 0 +REPLACE_FCHDIR = 0 +REPLACE_FCLOSE = 0 +REPLACE_FFLUSH = 1 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 1 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_GETCWD = 0 +REPLACE_GETLINE = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MBRLEN = 0 +REPLACE_MBRTOWC = 0 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKSTEMP = 0 +REPLACE_NAN = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_PERROR = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_PRINTF = 0 +REPLACE_PUTENV = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 1 +REPLACE_STRTOD = 0 +REPLACE_TRUNCL = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 0 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCTOB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SET_MAKE = +SHELL = /bin/bash +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +SPAWN_H = +STDARG_H = +STDBOOL_H = +STDINT_H = +STRIP = +SYS_STAT_H = sys/stat.h +SYS_TIME_H = +SYS_WAIT_H = sys/wait.h +UNISTD_H_HAVE_WINSOCK2_H = 0 +VERSION = 1.4.13 +VOID_UNSETENV = 0 +WCHAR_H = +WCHAR_T_SUFFIX = +WCTYPE_H = +WINT_T_SUFFIX = +abs_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/lib +abs_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/lib +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = libm4.a +noinst_LTLIBRARIES = +EXTRA_DIST = alloca.c alloca.in.h $(top_srcdir)/build-aux/announce-gen \ + btowc.c cloexec.c cloexec.h close-stream.c close-stream.h \ + closein.c closein.h closeout.c closeout.h basename.c dirname.c \ + dirname.h stripslash.c errno.in.h error.c error.h exitfail.c \ + exitfail.h fcntl.in.h fflush.c stdio-impl.h filenamecat.c \ + filenamecat.h float.in.h fopen.c fopen-safer.c stdio--.h \ + stdio-safer.h fpending.c fpending.h fpucw.h fpurge.h \ + stdio-impl.h freadahead.h stdio-impl.h freading.h stdio-impl.h \ + frexp.c frexp.c frexpl.c fseeko.c stdio-impl.h ftello.c \ + $(top_srcdir)/build-aux/gendocs.sh getdtablesize.c getopt.c \ + getopt.in.h getopt1.c getopt_int.h gettimeofday.c \ + $(top_srcdir)/build-aux/git-version-gen \ + $(top_srcdir)/GNUmakefile $(top_srcdir)/build-aux/gnupload \ + $(top_srcdir)/build-aux/config.rpath intprops.h float+.h \ + isnan.c isnand-nolibm.h isnand.c float+.h isnan.c \ + isnanf-nolibm.h isnanf.c float+.h isnan.c isnanl-nolibm.h \ + isnanl.c $(top_srcdir)/build-aux/link-warning.h config.charset \ + ref-add.sin ref-del.sin lseek.c lstat.c malloc.c malloc.c \ + malloca.h malloca.valgrind math.in.h mbrtowc.c mbsinit.c \ + mkdtemp.c mkstemp.c obstack.c obstack.h open.c pathmax.h \ + spawn_int.h spawni.c spawn_faction_addclose.c spawn_int.h \ + spawn_faction_adddup2.c spawn_int.h spawn_faction_addopen.c \ + spawn_int.h spawn_faction_destroy.c spawn_faction_init.c \ + spawn_int.h spawnattr_destroy.c spawnattr_init.c \ + spawnattr_setflags.c spawnattr_setsigmask.c spawnp.c \ + printf-frexp.h printf-frexp.c printf-frexpl.h quotearg.c \ + quotearg.h rawmemchr.c rawmemchr.valgrind regcomp.c regex.c \ + regex.h regex_internal.c regex_internal.h regexec.c sched.in.h \ + sig-handler.h sigaction.c signal.in.h float+.h signbitd.c \ + signbitf.c signbitl.c sigprocmask.c snprintf.c spawn.in.h \ + stdarg.in.h stdbool.in.h stdint.in.h stdio-write.c stdio.in.h \ + stdlib.in.h mkstemp-safer.c stdlib--.h stdlib-safer.h \ + strchrnul.c strchrnul.valgrind streq.h strerror.c string.in.h \ + strndup.c strnlen.c siglist.h strsignal.c str-two-way.h \ + strstr.c strtod.c strtol.c sys_stat.in.h sys_time.in.h \ + sys_wait.in.h tempname.c tempname.h \ + $(top_srcdir)/build-aux/config.rpath unistd.in.h dup-safer.c \ + fd-safer.c pipe-safer.c unistd--.h unistd-safer.h \ + unlocked-io.h asnprintf.c float+.h printf-args.c printf-args.h \ + printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h \ + asprintf.c vasprintf.c wchar.in.h wcrtomb.c wctype.in.h \ + xalloc.h xmalloc.c xmalloca.h xalloc.h +BUILT_SOURCES = $(ALLOCA_H) configmake.h $(ERRNO_H) $(FCNTL_H) \ + $(FLOAT_H) $(GETOPT_H) math.h $(SCHED_H) signal.h $(SPAWN_H) \ + $(STDARG_H) $(STDBOOL_H) $(STDINT_H) stdio.h stdlib.h string.h \ + $(SYS_STAT_H) $(SYS_TIME_H) $(SYS_WAIT_H) unistd.h $(WCHAR_H) \ + $(WCTYPE_H) +SUFFIXES = .sed .sin +MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \ + errno.h-t fcntl.h fcntl.h-t float.h float.h-t getopt.h \ + getopt.h-t math.h math.h-t sched.h sched.h-t signal.h \ + signal.h-t spawn.h spawn.h-t stdarg.h stdarg.h-t stdbool.h \ + stdbool.h-t stdint.h stdint.h-t stdio.h stdio.h-t stdlib.h \ + stdlib.h-t string.h string.h-t sys/stat.h sys/stat.h-t \ + sys/time.h sys/time.h-t sys/wait.h sys/wait.h-t unistd.h \ + unistd.h-t wchar.h wchar.h-t wctype.h wctype.h-t +MOSTLYCLEANDIRS = sys sys +CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \ + ref-del.sed +DISTCLEANFILES = +MAINTAINERCLEANFILES = +AM_CPPFLAGS = +AM_CFLAGS = +libm4_a_SOURCES = gl_avltree_oset.h gl_avltree_oset.c \ + gl_anytree_oset.h binary-io.h c-ctype.h c-ctype.c c-stack.h \ + c-stack.c clean-temp.h clean-temp.c execute.h execute.c \ + w32spawn.h fatal-signal.h fatal-signal.c fpurge.c freadahead.c \ + freading.c gettext.h gl_linkedhash_list.h gl_linkedhash_list.c \ + gl_anyhash_list1.h gl_anyhash_list2.h gl_anylinked_list1.h \ + gl_anylinked_list2.h gl_list.h gl_list.c localcharset.h \ + localcharset.c glthread/lock.h glthread/lock.c malloca.c \ + memchr2.h memchr2.c gl_oset.h gl_oset.c pipe.h pipe.c \ + w32spawn.h printf-frexp.c printf-frexpl.c progname.h \ + progname.c size_max.h glthread/threadlib.c glthread/tls.h \ + glthread/tls.c tmpdir.h tmpdir.c verify.h verror.h verror.c \ + version-etc.h version-etc.c version-etc-fsf.c wait-process.h \ + wait-process.c xalloc-die.c xmalloca.c xprintf.h xprintf.c \ + xsize.h xstrndup.h xstrndup.c xvasprintf.h xvasprintf.c \ + xasprintf.c +libm4_a_LIBADD = $(M4_LIBOBJS) +libm4_a_DEPENDENCIES = $(M4_LIBOBJS) +EXTRA_libm4_a_SOURCES = alloca.c btowc.c cloexec.c close-stream.c \ + closein.c closeout.c basename.c dirname.c stripslash.c error.c \ + exitfail.c fflush.c filenamecat.c fopen.c fopen-safer.c \ + fpending.c frexp.c frexp.c frexpl.c fseeko.c ftello.c \ + getdtablesize.c getopt.c getopt1.c gettimeofday.c isnan.c \ + isnand.c isnan.c isnanf.c isnan.c isnanl.c lseek.c lstat.c \ + malloc.c malloc.c mbrtowc.c mbsinit.c mkdtemp.c mkstemp.c \ + obstack.c open.c spawni.c spawn_faction_addclose.c \ + spawn_faction_adddup2.c spawn_faction_addopen.c \ + spawn_faction_destroy.c spawn_faction_init.c \ + spawnattr_destroy.c spawnattr_init.c spawnattr_setflags.c \ + spawnattr_setsigmask.c spawnp.c printf-frexp.c quotearg.c \ + rawmemchr.c regcomp.c regex.c regex_internal.c regexec.c \ + sigaction.c signbitd.c signbitf.c signbitl.c sigprocmask.c \ + snprintf.c stdio-write.c mkstemp-safer.c strchrnul.c \ + strerror.c strndup.c strnlen.c strsignal.c strstr.c strtod.c \ + strtol.c tempname.c dup-safer.c fd-safer.c pipe-safer.c \ + asnprintf.c printf-args.c printf-parse.c vasnprintf.c \ + asprintf.c vasprintf.c wcrtomb.c xmalloc.c +LINK_WARNING_H = $(top_srcdir)/build-aux/link-warning.h +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .sed .sin .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits --silent-rules lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits --silent-rules lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.hin $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status lib/config.h +$(srcdir)/config.hin: $(am__configure_deps) + $(am__cd) $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +glthread/$(am__dirstamp): + @$(MKDIR_P) glthread + @: > glthread/$(am__dirstamp) +glthread/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) glthread/$(DEPDIR) + @: > glthread/$(DEPDIR)/$(am__dirstamp) +glthread/lock.$(OBJEXT): glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) +glthread/threadlib.$(OBJEXT): glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) +glthread/tls.$(OBJEXT): glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) +libm4.a: $(libm4_a_OBJECTS) $(libm4_a_DEPENDENCIES) + $(AM_V_at)-rm -f libm4.a + $(AM_V_AR)$(libm4_a_AR) libm4.a $(libm4_a_OBJECTS) $(libm4_a_LIBADD) + $(AM_V_at)$(RANLIB) libm4.a + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f glthread/lock.$(OBJEXT) + -rm -f glthread/threadlib.$(OBJEXT) + -rm -f glthread/tls.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include $(DEPDIR)/alloca.Po +include ./$(DEPDIR)/alloca.Po +include ./$(DEPDIR)/asnprintf.Po +include ./$(DEPDIR)/asprintf.Po +include ./$(DEPDIR)/basename.Po +include ./$(DEPDIR)/btowc.Po +include ./$(DEPDIR)/c-ctype.Po +include ./$(DEPDIR)/c-stack.Po +include ./$(DEPDIR)/clean-temp.Po +include ./$(DEPDIR)/cloexec.Po +include ./$(DEPDIR)/close-stream.Po +include ./$(DEPDIR)/closein.Po +include ./$(DEPDIR)/closeout.Po +include ./$(DEPDIR)/dirname.Po +include ./$(DEPDIR)/dup-safer.Po +include ./$(DEPDIR)/error.Po +include ./$(DEPDIR)/execute.Po +include ./$(DEPDIR)/exitfail.Po +include ./$(DEPDIR)/fatal-signal.Po +include ./$(DEPDIR)/fd-safer.Po +include ./$(DEPDIR)/fflush.Po +include ./$(DEPDIR)/filenamecat.Po +include ./$(DEPDIR)/fopen-safer.Po +include ./$(DEPDIR)/fopen.Po +include ./$(DEPDIR)/fpending.Po +include ./$(DEPDIR)/fpurge.Po +include ./$(DEPDIR)/freadahead.Po +include ./$(DEPDIR)/freading.Po +include ./$(DEPDIR)/frexp.Po +include ./$(DEPDIR)/frexpl.Po +include ./$(DEPDIR)/fseeko.Po +include ./$(DEPDIR)/ftello.Po +include ./$(DEPDIR)/getdtablesize.Po +include ./$(DEPDIR)/getopt.Po +include ./$(DEPDIR)/getopt1.Po +include ./$(DEPDIR)/gettimeofday.Po +include ./$(DEPDIR)/gl_avltree_oset.Po +include ./$(DEPDIR)/gl_linkedhash_list.Po +include ./$(DEPDIR)/gl_list.Po +include ./$(DEPDIR)/gl_oset.Po +include ./$(DEPDIR)/isnan.Po +include ./$(DEPDIR)/isnand.Po +include ./$(DEPDIR)/isnanf.Po +include ./$(DEPDIR)/isnanl.Po +include ./$(DEPDIR)/localcharset.Po +include ./$(DEPDIR)/lseek.Po +include ./$(DEPDIR)/lstat.Po +include ./$(DEPDIR)/malloc.Po +include ./$(DEPDIR)/malloca.Po +include ./$(DEPDIR)/mbrtowc.Po +include ./$(DEPDIR)/mbsinit.Po +include ./$(DEPDIR)/memchr2.Po +include ./$(DEPDIR)/mkdtemp.Po +include ./$(DEPDIR)/mkstemp-safer.Po +include ./$(DEPDIR)/mkstemp.Po +include ./$(DEPDIR)/obstack.Po +include ./$(DEPDIR)/open.Po +include ./$(DEPDIR)/pipe-safer.Po +include ./$(DEPDIR)/pipe.Po +include ./$(DEPDIR)/printf-args.Po +include ./$(DEPDIR)/printf-frexp.Po +include ./$(DEPDIR)/printf-frexpl.Po +include ./$(DEPDIR)/printf-parse.Po +include ./$(DEPDIR)/progname.Po +include ./$(DEPDIR)/quotearg.Po +include ./$(DEPDIR)/rawmemchr.Po +include ./$(DEPDIR)/regcomp.Po +include ./$(DEPDIR)/regex.Po +include ./$(DEPDIR)/regex_internal.Po +include ./$(DEPDIR)/regexec.Po +include ./$(DEPDIR)/sigaction.Po +include ./$(DEPDIR)/signbitd.Po +include ./$(DEPDIR)/signbitf.Po +include ./$(DEPDIR)/signbitl.Po +include ./$(DEPDIR)/sigprocmask.Po +include ./$(DEPDIR)/snprintf.Po +include ./$(DEPDIR)/spawn_faction_addclose.Po +include ./$(DEPDIR)/spawn_faction_adddup2.Po +include ./$(DEPDIR)/spawn_faction_addopen.Po +include ./$(DEPDIR)/spawn_faction_destroy.Po +include ./$(DEPDIR)/spawn_faction_init.Po +include ./$(DEPDIR)/spawnattr_destroy.Po +include ./$(DEPDIR)/spawnattr_init.Po +include ./$(DEPDIR)/spawnattr_setflags.Po +include ./$(DEPDIR)/spawnattr_setsigmask.Po +include ./$(DEPDIR)/spawni.Po +include ./$(DEPDIR)/spawnp.Po +include ./$(DEPDIR)/stdio-write.Po +include ./$(DEPDIR)/strchrnul.Po +include ./$(DEPDIR)/strerror.Po +include ./$(DEPDIR)/stripslash.Po +include ./$(DEPDIR)/strndup.Po +include ./$(DEPDIR)/strnlen.Po +include ./$(DEPDIR)/strsignal.Po +include ./$(DEPDIR)/strstr.Po +include ./$(DEPDIR)/strtod.Po +include ./$(DEPDIR)/strtol.Po +include ./$(DEPDIR)/tempname.Po +include ./$(DEPDIR)/tmpdir.Po +include ./$(DEPDIR)/vasnprintf.Po +include ./$(DEPDIR)/vasprintf.Po +include ./$(DEPDIR)/verror.Po +include ./$(DEPDIR)/version-etc-fsf.Po +include ./$(DEPDIR)/version-etc.Po +include ./$(DEPDIR)/wait-process.Po +include ./$(DEPDIR)/wcrtomb.Po +include ./$(DEPDIR)/xalloc-die.Po +include ./$(DEPDIR)/xasprintf.Po +include ./$(DEPDIR)/xmalloc.Po +include ./$(DEPDIR)/xmalloca.Po +include ./$(DEPDIR)/xprintf.Po +include ./$(DEPDIR)/xstrndup.Po +include ./$(DEPDIR)/xvasprintf.Po +include glthread/$(DEPDIR)/lock.Po +include glthread/$(DEPDIR)/threadlib.Po +include glthread/$(DEPDIR)/tls.Po + +.c.o: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ + $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ + $(am__mv) $$depbase.Tpo $$depbase.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) config.h \ + all-local +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f glthread/$(DEPDIR)/$(am__dirstamp) + -rm -f glthread/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) glthread/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-exec-local + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) glthread/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local check check-am clean clean-generic \ + clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \ + ctags-recursive distclean distclean-compile distclean-generic \ + distclean-hdr distclean-local distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-local pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-local + + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +alloca.h: alloca.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t + mv -f $@-t $@ + +# Retrieve values of the variables through 'configure' followed by +# 'make', not directly through 'configure', so that a user who +# sets some of these variables consistently on the 'make' command +# line gets correct results. +# +# One advantage of this approach, compared to the classical +# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS, +# is that it protects against the use of undefined variables. +# If, say, $(libdir) is not set in the Makefile, LIBDIR is not +# defined by this module, and code using LIBDIR gives a +# compilation error. +# +# Another advantage is that 'make' output is shorter. +# +# Listed in the same order as the GNU makefile conventions. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that is POSIX compliant. +errno.h: errno.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ + -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ + -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ + -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ + -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ + -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ + -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ + < $(srcdir)/errno.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +fcntl.h: fcntl.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \ + -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ + < $(srcdir)/fcntl.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +float.h: float.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ + < $(srcdir)/float.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/getopt.in.h; \ + } > $@-t + mv -f $@-t $@ + +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : + +# We need the following in order to install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed +install-exec-local: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + rm -f t-$@ $@ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ + mv t-$@ $@ +.sin.sed: + rm -f t-$@ $@ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ + mv t-$@ $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +math.h: math.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_MATH_H''@|$(NEXT_MATH_H)|g' \ + -e 's|@''GNULIB_CEILF''@|$(GNULIB_CEILF)|g' \ + -e 's|@''GNULIB_CEILL''@|$(GNULIB_CEILL)|g' \ + -e 's|@''GNULIB_FLOORF''@|$(GNULIB_FLOORF)|g' \ + -e 's|@''GNULIB_FLOORL''@|$(GNULIB_FLOORL)|g' \ + -e 's|@''GNULIB_FREXP''@|$(GNULIB_FREXP)|g' \ + -e 's|@''GNULIB_FREXPL''@|$(GNULIB_FREXPL)|g' \ + -e 's|@''GNULIB_ISFINITE''@|$(GNULIB_ISFINITE)|g' \ + -e 's|@''GNULIB_ISINF''@|$(GNULIB_ISINF)|g' \ + -e 's|@''GNULIB_ISNAN''@|$(GNULIB_ISNAN)|g' \ + -e 's|@''GNULIB_ISNANF''@|$(GNULIB_ISNANF)|g' \ + -e 's|@''GNULIB_ISNAND''@|$(GNULIB_ISNAND)|g' \ + -e 's|@''GNULIB_ISNANL''@|$(GNULIB_ISNANL)|g' \ + -e 's|@''GNULIB_LDEXPL''@|$(GNULIB_LDEXPL)|g' \ + -e 's|@''GNULIB_MATHL''@|$(GNULIB_MATHL)|g' \ + -e 's|@''GNULIB_ROUND''@|$(GNULIB_ROUND)|g' \ + -e 's|@''GNULIB_ROUNDF''@|$(GNULIB_ROUNDF)|g' \ + -e 's|@''GNULIB_ROUNDL''@|$(GNULIB_ROUNDL)|g' \ + -e 's|@''GNULIB_SIGNBIT''@|$(GNULIB_SIGNBIT)|g' \ + -e 's|@''GNULIB_TRUNC''@|$(GNULIB_TRUNC)|g' \ + -e 's|@''GNULIB_TRUNCF''@|$(GNULIB_TRUNCF)|g' \ + -e 's|@''GNULIB_TRUNCL''@|$(GNULIB_TRUNCL)|g' \ + -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ + -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ + -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ + -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ + -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ + -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ + -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ + -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ + -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ + -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ + -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ + -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ + -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ + -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ + -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ + -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ + -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ + -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ + -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ + -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ + -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ + -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ + -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ + -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ + -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ + -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ + -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ + -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ + -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ + -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ + -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ + -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/math.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create a replacement for when +# the system doesn't have one. +sched.h: sched.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ + -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ + < $(srcdir)/sched.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have a complete one. +signal.h: signal.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ + -e 's|@''GNULIB_SIGNAL_H_SIGPIPE''@|$(GNULIB_SIGNAL_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_SIGPROCMASK''@|$(GNULIB_SIGPROCMASK)|g' \ + -e 's|@''GNULIB_SIGACTION''@|$(GNULIB_SIGACTION)|g' \ + -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ + -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ + -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ + -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ + -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ + -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/signal.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create a replacement for when +# the system doesn't have one. +spawn.h: spawn.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN''@|$(GNULIB_POSIX_SPAWN)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNP''@|$(GNULIB_POSIX_SPAWNP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_INIT''@|$(GNULIB_POSIX_SPAWNATTR_INIT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@|$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@|$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@|$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@|$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@|$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@|$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@|$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@|$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@|$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@|$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@|$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@|$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_DESTROY''@|$(GNULIB_POSIX_SPAWNATTR_DESTROY)|g' \ + -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/spawn.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdarg.h: stdarg.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ + < $(srcdir)/stdarg.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works. +stdbool.h: stdbool.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdint.h: stdint.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \ + -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \ + -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \ + -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \ + -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \ + -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \ + -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \ + -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \ + -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \ + -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \ + -e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \ + -e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \ + -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \ + -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \ + -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \ + -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \ + -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \ + -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \ + -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \ + -e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \ + -e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \ + -e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \ + -e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \ + -e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \ + -e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \ + -e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \ + -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \ + -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \ + -e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \ + -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/stdio.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \ + -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \ + -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \ + -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \ + -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \ + -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \ + -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \ + -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \ + -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \ + -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \ + -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \ + -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \ + -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \ + -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \ + -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \ + -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/stdlib.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \ + -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \ + -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \ + -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \ + -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \ + -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \ + -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \ + -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \ + -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \ + -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \ + -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \ + -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \ + -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \ + -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \ + -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \ + -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \ + -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \ + -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \ + -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \ + -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \ + -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \ + -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \ + -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \ + -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \ + -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \ + -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \ + -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \ + -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \ + -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \ + -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \ + -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \ + -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/string.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# has one that is incomplete. +sys/stat.h: sys_stat.in.h + /bin/mkdir -p sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ + -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \ + -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \ + -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ + -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ + -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ + -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/sys_stat.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +sys/time.h: sys_time.in.h + /bin/mkdir -p sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ + -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ + -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ + < $(srcdir)/sys_time.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# has one that is incomplete. +sys/wait.h: sys_wait.in.h + /bin/mkdir -p sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/sys_wait.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +unistd.h: unistd.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \ + -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \ + -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \ + -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \ + -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \ + -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \ + -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \ + -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \ + -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \ + -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \ + -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \ + -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \ + -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \ + -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \ + -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \ + -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \ + -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \ + -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \ + -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \ + -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \ + -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/unistd.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# version does not work standalone. +wchar.h: wchar.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \ + -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \ + -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \ + -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \ + -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \ + -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \ + -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \ + -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \ + -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \ + -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \ + -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \ + -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/wchar.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t + mv $@-t $@ + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/lib/Makefile.am b/coreseek/m4-1.4.13/lib/Makefile.am new file mode 100644 index 0000000..e8477e6 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/Makefile.am @@ -0,0 +1,1918 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: gnulib-tool --import --dir=. --local-dir=local --lib=libm4 --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --with-tests --avoid=lock-tests --avoid=tls-tests --no-libtool --macro-prefix=M4 announce-gen assert autobuild avltree-oset binary-io c-stack clean-temp cloexec close-stream closein config-h dirname error execute fdl-1.3 fflush filenamecat fopen fopen-safer fseeko gendocs getopt git-version-gen gnumakefile gnupload gpl-3.0 intprops memchr2 mkstemp obstack pipe progname regex sigaction stdbool stdint stdlib-safer strsignal strstr strtod strtol unlocked-io verror version-etc version-etc-fsf wait-process xalloc xprintf xvasprintf-posix + +AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects + +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = +noinst_LTLIBRARIES = +EXTRA_DIST = +BUILT_SOURCES = +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +AM_CPPFLAGS = +AM_CFLAGS = + +noinst_LIBRARIES += libm4.a + +libm4_a_SOURCES = +libm4_a_LIBADD = $(M4_LIBOBJS) +libm4_a_DEPENDENCIES = $(M4_LIBOBJS) +EXTRA_libm4_a_SOURCES = + +## begin gnulib module alloca + + +EXTRA_DIST += alloca.c + +EXTRA_libm4_a_SOURCES += alloca.c + +libm4_a_LIBADD += @ALLOCA@ +libm4_a_DEPENDENCIES += @ALLOCA@ +## end gnulib module alloca + +## begin gnulib module alloca-opt + +BUILT_SOURCES += $(ALLOCA_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +alloca.h: alloca.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t + mv -f $@-t $@ +MOSTLYCLEANFILES += alloca.h alloca.h-t + +EXTRA_DIST += alloca.in.h + +## end gnulib module alloca-opt + +## begin gnulib module announce-gen + + +EXTRA_DIST += $(top_srcdir)/build-aux/announce-gen + +## end gnulib module announce-gen + +## begin gnulib module avltree-oset + +libm4_a_SOURCES += gl_avltree_oset.h gl_avltree_oset.c gl_anytree_oset.h + +## end gnulib module avltree-oset + +## begin gnulib module binary-io + +libm4_a_SOURCES += binary-io.h + +## end gnulib module binary-io + +## begin gnulib module btowc + + +EXTRA_DIST += btowc.c + +EXTRA_libm4_a_SOURCES += btowc.c + +## end gnulib module btowc + +## begin gnulib module c-ctype + +libm4_a_SOURCES += c-ctype.h c-ctype.c + +## end gnulib module c-ctype + +## begin gnulib module c-stack + +libm4_a_SOURCES += c-stack.h c-stack.c + +## end gnulib module c-stack + +## begin gnulib module clean-temp + +libm4_a_SOURCES += clean-temp.h clean-temp.c + +## end gnulib module clean-temp + +## begin gnulib module cloexec + + +EXTRA_DIST += cloexec.c cloexec.h + +EXTRA_libm4_a_SOURCES += cloexec.c + +## end gnulib module cloexec + +## begin gnulib module close-stream + + +EXTRA_DIST += close-stream.c close-stream.h + +EXTRA_libm4_a_SOURCES += close-stream.c + +## end gnulib module close-stream + +## begin gnulib module closein + + +EXTRA_DIST += closein.c closein.h + +EXTRA_libm4_a_SOURCES += closein.c + +## end gnulib module closein + +## begin gnulib module closeout + + +EXTRA_DIST += closeout.c closeout.h + +EXTRA_libm4_a_SOURCES += closeout.c + +## end gnulib module closeout + +## begin gnulib module configmake + +# Retrieve values of the variables through 'configure' followed by +# 'make', not directly through 'configure', so that a user who +# sets some of these variables consistently on the 'make' command +# line gets correct results. +# +# One advantage of this approach, compared to the classical +# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS, +# is that it protects against the use of undefined variables. +# If, say, $(libdir) is not set in the Makefile, LIBDIR is not +# defined by this module, and code using LIBDIR gives a +# compilation error. +# +# Another advantage is that 'make' output is shorter. +# +# Listed in the same order as the GNU makefile conventions. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t + mv $@-t $@ +BUILT_SOURCES += configmake.h +CLEANFILES += configmake.h configmake.h-t + +## end gnulib module configmake + +## begin gnulib module dirname + + +EXTRA_DIST += basename.c dirname.c dirname.h stripslash.c + +EXTRA_libm4_a_SOURCES += basename.c dirname.c stripslash.c + +## end gnulib module dirname + +## begin gnulib module errno + +BUILT_SOURCES += $(ERRNO_H) + +# We need the following in order to create when the system +# doesn't have one that is POSIX compliant. +errno.h: errno.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ + -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ + -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ + -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ + -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ + -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ + -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ + < $(srcdir)/errno.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += errno.h errno.h-t + +EXTRA_DIST += errno.in.h + +## end gnulib module errno + +## begin gnulib module error + + +EXTRA_DIST += error.c error.h + +EXTRA_libm4_a_SOURCES += error.c + +## end gnulib module error + +## begin gnulib module execute + +libm4_a_SOURCES += execute.h execute.c w32spawn.h + +## end gnulib module execute + +## begin gnulib module exitfail + + +EXTRA_DIST += exitfail.c exitfail.h + +EXTRA_libm4_a_SOURCES += exitfail.c + +## end gnulib module exitfail + +## begin gnulib module fatal-signal + +libm4_a_SOURCES += fatal-signal.h fatal-signal.c + +## end gnulib module fatal-signal + +## begin gnulib module fcntl + +BUILT_SOURCES += $(FCNTL_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +fcntl.h: fcntl.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \ + -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ + < $(srcdir)/fcntl.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += fcntl.h fcntl.h-t + +EXTRA_DIST += fcntl.in.h + +## end gnulib module fcntl + +## begin gnulib module fflush + + +EXTRA_DIST += fflush.c stdio-impl.h + +EXTRA_libm4_a_SOURCES += fflush.c + +## end gnulib module fflush + +## begin gnulib module filenamecat + + +EXTRA_DIST += filenamecat.c filenamecat.h + +EXTRA_libm4_a_SOURCES += filenamecat.c + +## end gnulib module filenamecat + +## begin gnulib module float + +BUILT_SOURCES += $(FLOAT_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +float.h: float.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ + < $(srcdir)/float.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += float.h float.h-t + +EXTRA_DIST += float.in.h + +## end gnulib module float + +## begin gnulib module fopen + + +EXTRA_DIST += fopen.c + +EXTRA_libm4_a_SOURCES += fopen.c + +## end gnulib module fopen + +## begin gnulib module fopen-safer + + +EXTRA_DIST += fopen-safer.c stdio--.h stdio-safer.h + +EXTRA_libm4_a_SOURCES += fopen-safer.c + +## end gnulib module fopen-safer + +## begin gnulib module fpending + + +EXTRA_DIST += fpending.c fpending.h + +EXTRA_libm4_a_SOURCES += fpending.c + +## end gnulib module fpending + +## begin gnulib module fpucw + + +EXTRA_DIST += fpucw.h + +## end gnulib module fpucw + +## begin gnulib module fpurge + +libm4_a_SOURCES += fpurge.c + +EXTRA_DIST += fpurge.h stdio-impl.h + +## end gnulib module fpurge + +## begin gnulib module freadahead + +libm4_a_SOURCES += freadahead.c + +EXTRA_DIST += freadahead.h stdio-impl.h + +## end gnulib module freadahead + +## begin gnulib module freading + +libm4_a_SOURCES += freading.c + +EXTRA_DIST += freading.h stdio-impl.h + +## end gnulib module freading + +## begin gnulib module frexp-nolibm + + +EXTRA_DIST += frexp.c + +EXTRA_libm4_a_SOURCES += frexp.c + +## end gnulib module frexp-nolibm + +## begin gnulib module frexpl-nolibm + + +EXTRA_DIST += frexp.c frexpl.c + +EXTRA_libm4_a_SOURCES += frexp.c frexpl.c + +## end gnulib module frexpl-nolibm + +## begin gnulib module fseeko + + +EXTRA_DIST += fseeko.c stdio-impl.h + +EXTRA_libm4_a_SOURCES += fseeko.c + +## end gnulib module fseeko + +## begin gnulib module ftello + + +EXTRA_DIST += ftello.c + +EXTRA_libm4_a_SOURCES += ftello.c + +## end gnulib module ftello + +## begin gnulib module gendocs + + +EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh + +## end gnulib module gendocs + +## begin gnulib module getdtablesize + + +EXTRA_DIST += getdtablesize.c + +EXTRA_libm4_a_SOURCES += getdtablesize.c + +## end gnulib module getdtablesize + +## begin gnulib module getopt + +BUILT_SOURCES += $(GETOPT_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/getopt.in.h; \ + } > $@-t + mv -f $@-t $@ +MOSTLYCLEANFILES += getopt.h getopt.h-t + +EXTRA_DIST += getopt.c getopt.in.h getopt1.c getopt_int.h + +EXTRA_libm4_a_SOURCES += getopt.c getopt1.c + +## end gnulib module getopt + +## begin gnulib module gettext-h + +libm4_a_SOURCES += gettext.h + +## end gnulib module gettext-h + +## begin gnulib module gettimeofday + + +EXTRA_DIST += gettimeofday.c + +EXTRA_libm4_a_SOURCES += gettimeofday.c + +## end gnulib module gettimeofday + +## begin gnulib module git-version-gen + + +EXTRA_DIST += $(top_srcdir)/build-aux/git-version-gen + +## end gnulib module git-version-gen + +## begin gnulib module gnumakefile + +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : + +EXTRA_DIST += $(top_srcdir)/GNUmakefile + +## end gnulib module gnumakefile + +## begin gnulib module gnupload + + +EXTRA_DIST += $(top_srcdir)/build-aux/gnupload + +## end gnulib module gnupload + +## begin gnulib module havelib + + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module havelib + +## begin gnulib module intprops + + +EXTRA_DIST += intprops.h + +## end gnulib module intprops + +## begin gnulib module isnand-nolibm + + +EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c + +EXTRA_libm4_a_SOURCES += isnan.c isnand.c + +## end gnulib module isnand-nolibm + +## begin gnulib module isnanf-nolibm + + +EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c + +EXTRA_libm4_a_SOURCES += isnan.c isnanf.c + +## end gnulib module isnanf-nolibm + +## begin gnulib module isnanl-nolibm + + +EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c + +EXTRA_libm4_a_SOURCES += isnan.c isnanl.c + +## end gnulib module isnanl-nolibm + +## begin gnulib module link-warning + +LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h + +EXTRA_DIST += $(top_srcdir)/build-aux/link-warning.h + +## end gnulib module link-warning + +## begin gnulib module linkedhash-list + +libm4_a_SOURCES += gl_linkedhash_list.h gl_linkedhash_list.c gl_anyhash_list1.h gl_anyhash_list2.h gl_anylinked_list1.h gl_anylinked_list2.h + +## end gnulib module linkedhash-list + +## begin gnulib module list + +libm4_a_SOURCES += gl_list.h gl_list.c + +## end gnulib module list + +## begin gnulib module localcharset + +libm4_a_SOURCES += localcharset.h localcharset.c + +# We need the following in order to install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed + +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp +install-exec-local: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + rm -f t-$@ $@ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ + mv t-$@ $@ + +SUFFIXES += .sed .sin +.sin.sed: + rm -f t-$@ $@ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ + mv t-$@ $@ + +CLEANFILES += charset.alias ref-add.sed ref-del.sed + +EXTRA_DIST += config.charset ref-add.sin ref-del.sin + +## end gnulib module localcharset + +## begin gnulib module lock + +libm4_a_SOURCES += glthread/lock.h glthread/lock.c + +## end gnulib module lock + +## begin gnulib module lseek + + +EXTRA_DIST += lseek.c + +EXTRA_libm4_a_SOURCES += lseek.c + +## end gnulib module lseek + +## begin gnulib module lstat + + +EXTRA_DIST += lstat.c + +EXTRA_libm4_a_SOURCES += lstat.c + +## end gnulib module lstat + +## begin gnulib module malloc + + +EXTRA_DIST += malloc.c + +EXTRA_libm4_a_SOURCES += malloc.c + +## end gnulib module malloc + +## begin gnulib module malloc-posix + + +EXTRA_DIST += malloc.c + +EXTRA_libm4_a_SOURCES += malloc.c + +## end gnulib module malloc-posix + +## begin gnulib module malloca + +libm4_a_SOURCES += malloca.c + +EXTRA_DIST += malloca.h malloca.valgrind + +## end gnulib module malloca + +## begin gnulib module math + +BUILT_SOURCES += math.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +math.h: math.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_MATH_H''@|$(NEXT_MATH_H)|g' \ + -e 's|@''GNULIB_CEILF''@|$(GNULIB_CEILF)|g' \ + -e 's|@''GNULIB_CEILL''@|$(GNULIB_CEILL)|g' \ + -e 's|@''GNULIB_FLOORF''@|$(GNULIB_FLOORF)|g' \ + -e 's|@''GNULIB_FLOORL''@|$(GNULIB_FLOORL)|g' \ + -e 's|@''GNULIB_FREXP''@|$(GNULIB_FREXP)|g' \ + -e 's|@''GNULIB_FREXPL''@|$(GNULIB_FREXPL)|g' \ + -e 's|@''GNULIB_ISFINITE''@|$(GNULIB_ISFINITE)|g' \ + -e 's|@''GNULIB_ISINF''@|$(GNULIB_ISINF)|g' \ + -e 's|@''GNULIB_ISNAN''@|$(GNULIB_ISNAN)|g' \ + -e 's|@''GNULIB_ISNANF''@|$(GNULIB_ISNANF)|g' \ + -e 's|@''GNULIB_ISNAND''@|$(GNULIB_ISNAND)|g' \ + -e 's|@''GNULIB_ISNANL''@|$(GNULIB_ISNANL)|g' \ + -e 's|@''GNULIB_LDEXPL''@|$(GNULIB_LDEXPL)|g' \ + -e 's|@''GNULIB_MATHL''@|$(GNULIB_MATHL)|g' \ + -e 's|@''GNULIB_ROUND''@|$(GNULIB_ROUND)|g' \ + -e 's|@''GNULIB_ROUNDF''@|$(GNULIB_ROUNDF)|g' \ + -e 's|@''GNULIB_ROUNDL''@|$(GNULIB_ROUNDL)|g' \ + -e 's|@''GNULIB_SIGNBIT''@|$(GNULIB_SIGNBIT)|g' \ + -e 's|@''GNULIB_TRUNC''@|$(GNULIB_TRUNC)|g' \ + -e 's|@''GNULIB_TRUNCF''@|$(GNULIB_TRUNCF)|g' \ + -e 's|@''GNULIB_TRUNCL''@|$(GNULIB_TRUNCL)|g' \ + -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ + -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ + -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ + -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ + -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ + -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ + -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ + -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ + -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ + -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ + -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ + -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ + -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ + -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ + -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ + -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ + -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ + -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ + -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ + -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ + -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ + -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ + -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ + -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ + -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ + -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ + -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ + -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ + -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ + -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ + -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ + -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/math.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += math.h math.h-t + +EXTRA_DIST += math.in.h + +## end gnulib module math + +## begin gnulib module mbrtowc + + +EXTRA_DIST += mbrtowc.c + +EXTRA_libm4_a_SOURCES += mbrtowc.c + +## end gnulib module mbrtowc + +## begin gnulib module mbsinit + + +EXTRA_DIST += mbsinit.c + +EXTRA_libm4_a_SOURCES += mbsinit.c + +## end gnulib module mbsinit + +## begin gnulib module memchr2 + +libm4_a_SOURCES += memchr2.h memchr2.c + +## end gnulib module memchr2 + +## begin gnulib module mkdtemp + + +EXTRA_DIST += mkdtemp.c + +EXTRA_libm4_a_SOURCES += mkdtemp.c + +## end gnulib module mkdtemp + +## begin gnulib module mkstemp + + +EXTRA_DIST += mkstemp.c + +EXTRA_libm4_a_SOURCES += mkstemp.c + +## end gnulib module mkstemp + +## begin gnulib module obstack + + +EXTRA_DIST += obstack.c obstack.h + +EXTRA_libm4_a_SOURCES += obstack.c + +## end gnulib module obstack + +## begin gnulib module open + + +EXTRA_DIST += open.c + +EXTRA_libm4_a_SOURCES += open.c + +## end gnulib module open + +## begin gnulib module oset + +libm4_a_SOURCES += gl_oset.h gl_oset.c + +## end gnulib module oset + +## begin gnulib module pathmax + + +EXTRA_DIST += pathmax.h + +## end gnulib module pathmax + +## begin gnulib module pipe + +libm4_a_SOURCES += pipe.h pipe.c w32spawn.h + +## end gnulib module pipe + +## begin gnulib module posix_spawn-internal + + +EXTRA_DIST += spawn_int.h spawni.c + +EXTRA_libm4_a_SOURCES += spawni.c + +## end gnulib module posix_spawn-internal + +## begin gnulib module posix_spawn_file_actions_addclose + + +EXTRA_DIST += spawn_faction_addclose.c spawn_int.h + +EXTRA_libm4_a_SOURCES += spawn_faction_addclose.c + +## end gnulib module posix_spawn_file_actions_addclose + +## begin gnulib module posix_spawn_file_actions_adddup2 + + +EXTRA_DIST += spawn_faction_adddup2.c spawn_int.h + +EXTRA_libm4_a_SOURCES += spawn_faction_adddup2.c + +## end gnulib module posix_spawn_file_actions_adddup2 + +## begin gnulib module posix_spawn_file_actions_addopen + + +EXTRA_DIST += spawn_faction_addopen.c spawn_int.h + +EXTRA_libm4_a_SOURCES += spawn_faction_addopen.c + +## end gnulib module posix_spawn_file_actions_addopen + +## begin gnulib module posix_spawn_file_actions_destroy + + +EXTRA_DIST += spawn_faction_destroy.c + +EXTRA_libm4_a_SOURCES += spawn_faction_destroy.c + +## end gnulib module posix_spawn_file_actions_destroy + +## begin gnulib module posix_spawn_file_actions_init + + +EXTRA_DIST += spawn_faction_init.c spawn_int.h + +EXTRA_libm4_a_SOURCES += spawn_faction_init.c + +## end gnulib module posix_spawn_file_actions_init + +## begin gnulib module posix_spawnattr_destroy + + +EXTRA_DIST += spawnattr_destroy.c + +EXTRA_libm4_a_SOURCES += spawnattr_destroy.c + +## end gnulib module posix_spawnattr_destroy + +## begin gnulib module posix_spawnattr_init + + +EXTRA_DIST += spawnattr_init.c + +EXTRA_libm4_a_SOURCES += spawnattr_init.c + +## end gnulib module posix_spawnattr_init + +## begin gnulib module posix_spawnattr_setflags + + +EXTRA_DIST += spawnattr_setflags.c + +EXTRA_libm4_a_SOURCES += spawnattr_setflags.c + +## end gnulib module posix_spawnattr_setflags + +## begin gnulib module posix_spawnattr_setsigmask + + +EXTRA_DIST += spawnattr_setsigmask.c + +EXTRA_libm4_a_SOURCES += spawnattr_setsigmask.c + +## end gnulib module posix_spawnattr_setsigmask + +## begin gnulib module posix_spawnp + + +EXTRA_DIST += spawnp.c + +EXTRA_libm4_a_SOURCES += spawnp.c + +## end gnulib module posix_spawnp + +## begin gnulib module printf-frexp + +libm4_a_SOURCES += printf-frexp.c + +EXTRA_DIST += printf-frexp.h + +## end gnulib module printf-frexp + +## begin gnulib module printf-frexpl + +libm4_a_SOURCES += printf-frexpl.c + +EXTRA_DIST += printf-frexp.c printf-frexpl.h + +EXTRA_libm4_a_SOURCES += printf-frexp.c + +## end gnulib module printf-frexpl + +## begin gnulib module progname + +libm4_a_SOURCES += progname.h progname.c + +## end gnulib module progname + +## begin gnulib module quotearg + + +EXTRA_DIST += quotearg.c quotearg.h + +EXTRA_libm4_a_SOURCES += quotearg.c + +## end gnulib module quotearg + +## begin gnulib module rawmemchr + + +EXTRA_DIST += rawmemchr.c rawmemchr.valgrind + +EXTRA_libm4_a_SOURCES += rawmemchr.c + +## end gnulib module rawmemchr + +## begin gnulib module regex + + +EXTRA_DIST += regcomp.c regex.c regex.h regex_internal.c regex_internal.h regexec.c + +EXTRA_libm4_a_SOURCES += regcomp.c regex.c regex_internal.c regexec.c + +## end gnulib module regex + +## begin gnulib module sched + +BUILT_SOURCES += $(SCHED_H) + +# We need the following in order to create a replacement for when +# the system doesn't have one. +sched.h: sched.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ + -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ + < $(srcdir)/sched.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += sched.h sched.h-t + +EXTRA_DIST += sched.in.h + +## end gnulib module sched + +## begin gnulib module sigaction + + +EXTRA_DIST += sig-handler.h sigaction.c + +EXTRA_libm4_a_SOURCES += sigaction.c + +## end gnulib module sigaction + +## begin gnulib module signal + +BUILT_SOURCES += signal.h + +# We need the following in order to create when the system +# doesn't have a complete one. +signal.h: signal.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ + -e 's|@''GNULIB_SIGNAL_H_SIGPIPE''@|$(GNULIB_SIGNAL_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_SIGPROCMASK''@|$(GNULIB_SIGPROCMASK)|g' \ + -e 's|@''GNULIB_SIGACTION''@|$(GNULIB_SIGACTION)|g' \ + -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ + -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ + -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ + -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ + -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ + -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/signal.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += signal.h signal.h-t + +EXTRA_DIST += signal.in.h + +## end gnulib module signal + +## begin gnulib module signbit + + +EXTRA_DIST += float+.h signbitd.c signbitf.c signbitl.c + +EXTRA_libm4_a_SOURCES += signbitd.c signbitf.c signbitl.c + +## end gnulib module signbit + +## begin gnulib module sigprocmask + + +EXTRA_DIST += sigprocmask.c + +EXTRA_libm4_a_SOURCES += sigprocmask.c + +## end gnulib module sigprocmask + +## begin gnulib module size_max + +libm4_a_SOURCES += size_max.h + +## end gnulib module size_max + +## begin gnulib module snprintf + + +EXTRA_DIST += snprintf.c + +EXTRA_libm4_a_SOURCES += snprintf.c + +## end gnulib module snprintf + +## begin gnulib module spawn + +BUILT_SOURCES += $(SPAWN_H) + +# We need the following in order to create a replacement for when +# the system doesn't have one. +spawn.h: spawn.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN''@|$(GNULIB_POSIX_SPAWN)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNP''@|$(GNULIB_POSIX_SPAWNP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_INIT''@|$(GNULIB_POSIX_SPAWNATTR_INIT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@|$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@|$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@|$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@|$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@|$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@|$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@|$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@|$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@|$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@|$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@|$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@|$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_DESTROY''@|$(GNULIB_POSIX_SPAWNATTR_DESTROY)|g' \ + -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/spawn.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += spawn.h spawn.h-t + +EXTRA_DIST += spawn.in.h + +## end gnulib module spawn + +## begin gnulib module stdarg + +BUILT_SOURCES += $(STDARG_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdarg.h: stdarg.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ + < $(srcdir)/stdarg.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += stdarg.h stdarg.h-t + +EXTRA_DIST += stdarg.in.h + +## end gnulib module stdarg + +## begin gnulib module stdbool + +BUILT_SOURCES += $(STDBOOL_H) + +# We need the following in order to create when the system +# doesn't have one that works. +stdbool.h: stdbool.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += stdbool.h stdbool.h-t + +EXTRA_DIST += stdbool.in.h + +## end gnulib module stdbool + +## begin gnulib module stdint + +BUILT_SOURCES += $(STDINT_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdint.h: stdint.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += stdint.h stdint.h-t + +EXTRA_DIST += stdint.in.h + +## end gnulib module stdint + +## begin gnulib module stdio + +BUILT_SOURCES += stdio.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \ + -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \ + -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \ + -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \ + -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \ + -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \ + -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \ + -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \ + -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \ + -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \ + -e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \ + -e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \ + -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \ + -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \ + -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \ + -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \ + -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \ + -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \ + -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \ + -e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \ + -e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \ + -e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \ + -e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \ + -e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \ + -e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \ + -e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \ + -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \ + -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \ + -e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \ + -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/stdio.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += stdio.h stdio.h-t + +EXTRA_DIST += stdio-write.c stdio.in.h + +EXTRA_libm4_a_SOURCES += stdio-write.c + +## end gnulib module stdio + +## begin gnulib module stdlib + +BUILT_SOURCES += stdlib.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \ + -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \ + -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \ + -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \ + -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \ + -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \ + -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \ + -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \ + -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \ + -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \ + -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \ + -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \ + -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \ + -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \ + -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \ + -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/stdlib.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += stdlib.h stdlib.h-t + +EXTRA_DIST += stdlib.in.h + +## end gnulib module stdlib + +## begin gnulib module stdlib-safer + + +EXTRA_DIST += mkstemp-safer.c stdlib--.h stdlib-safer.h + +EXTRA_libm4_a_SOURCES += mkstemp-safer.c + +## end gnulib module stdlib-safer + +## begin gnulib module strchrnul + + +EXTRA_DIST += strchrnul.c strchrnul.valgrind + +EXTRA_libm4_a_SOURCES += strchrnul.c + +## end gnulib module strchrnul + +## begin gnulib module streq + + +EXTRA_DIST += streq.h + +## end gnulib module streq + +## begin gnulib module strerror + + +EXTRA_DIST += strerror.c + +EXTRA_libm4_a_SOURCES += strerror.c + +## end gnulib module strerror + +## begin gnulib module string + +BUILT_SOURCES += string.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \ + -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \ + -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \ + -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \ + -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \ + -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \ + -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \ + -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \ + -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \ + -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \ + -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \ + -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \ + -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \ + -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \ + -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \ + -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \ + -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \ + -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \ + -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \ + -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \ + -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \ + -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \ + -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \ + -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \ + -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \ + -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \ + -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \ + -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \ + -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \ + -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \ + -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \ + -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/string.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += string.h string.h-t + +EXTRA_DIST += string.in.h + +## end gnulib module string + +## begin gnulib module strndup + + +EXTRA_DIST += strndup.c + +EXTRA_libm4_a_SOURCES += strndup.c + +## end gnulib module strndup + +## begin gnulib module strnlen + + +EXTRA_DIST += strnlen.c + +EXTRA_libm4_a_SOURCES += strnlen.c + +## end gnulib module strnlen + +## begin gnulib module strsignal + + +EXTRA_DIST += siglist.h strsignal.c + +EXTRA_libm4_a_SOURCES += strsignal.c + +## end gnulib module strsignal + +## begin gnulib module strstr + + +EXTRA_DIST += str-two-way.h strstr.c + +EXTRA_libm4_a_SOURCES += strstr.c + +## end gnulib module strstr + +## begin gnulib module strtod + +LIBS += $(POW_LIB) + +EXTRA_DIST += strtod.c + +EXTRA_libm4_a_SOURCES += strtod.c + +## end gnulib module strtod + +## begin gnulib module strtol + + +EXTRA_DIST += strtol.c + +EXTRA_libm4_a_SOURCES += strtol.c + +## end gnulib module strtol + +## begin gnulib module sys_stat + +BUILT_SOURCES += $(SYS_STAT_H) + +# We need the following in order to create when the system +# has one that is incomplete. +sys/stat.h: sys_stat.in.h + @MKDIR_P@ sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ + -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \ + -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \ + -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ + -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ + -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ + -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/sys_stat.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t +MOSTLYCLEANDIRS += sys + +EXTRA_DIST += sys_stat.in.h + +## end gnulib module sys_stat + +## begin gnulib module sys_time + +BUILT_SOURCES += $(SYS_TIME_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +sys/time.h: sys_time.in.h + @MKDIR_P@ sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ + -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ + -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ + < $(srcdir)/sys_time.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += sys/time.h sys/time.h-t + +EXTRA_DIST += sys_time.in.h + +## end gnulib module sys_time + +## begin gnulib module sys_wait + +BUILT_SOURCES += $(SYS_WAIT_H) + +# We need the following in order to create when the system +# has one that is incomplete. +sys/wait.h: sys_wait.in.h + @MKDIR_P@ sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/sys_wait.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t +MOSTLYCLEANDIRS += sys + +EXTRA_DIST += sys_wait.in.h + +## end gnulib module sys_wait + +## begin gnulib module tempname + + +EXTRA_DIST += tempname.c tempname.h + +EXTRA_libm4_a_SOURCES += tempname.c + +## end gnulib module tempname + +## begin gnulib module threadlib + +libm4_a_SOURCES += glthread/threadlib.c + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module threadlib + +## begin gnulib module tls + +libm4_a_SOURCES += glthread/tls.h glthread/tls.c + +## end gnulib module tls + +## begin gnulib module tmpdir + +libm4_a_SOURCES += tmpdir.h tmpdir.c + +## end gnulib module tmpdir + +## begin gnulib module unistd + +BUILT_SOURCES += unistd.h + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +unistd.h: unistd.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \ + -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \ + -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \ + -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \ + -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \ + -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \ + -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \ + -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \ + -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \ + -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \ + -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \ + -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \ + -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \ + -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \ + -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \ + -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \ + -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \ + -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \ + -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \ + -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \ + -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/unistd.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += unistd.h unistd.h-t + +EXTRA_DIST += unistd.in.h + +## end gnulib module unistd + +## begin gnulib module unistd-safer + + +EXTRA_DIST += dup-safer.c fd-safer.c pipe-safer.c unistd--.h unistd-safer.h + +EXTRA_libm4_a_SOURCES += dup-safer.c fd-safer.c pipe-safer.c + +## end gnulib module unistd-safer + +## begin gnulib module unlocked-io + + +EXTRA_DIST += unlocked-io.h + +## end gnulib module unlocked-io + +## begin gnulib module vasnprintf + + +EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h + +EXTRA_libm4_a_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c + +## end gnulib module vasnprintf + +## begin gnulib module vasprintf + + +EXTRA_DIST += asprintf.c vasprintf.c + +EXTRA_libm4_a_SOURCES += asprintf.c vasprintf.c + +## end gnulib module vasprintf + +## begin gnulib module verify + +libm4_a_SOURCES += verify.h + +## end gnulib module verify + +## begin gnulib module verror + +libm4_a_SOURCES += verror.h verror.c + +## end gnulib module verror + +## begin gnulib module version-etc + +libm4_a_SOURCES += version-etc.h version-etc.c + +## end gnulib module version-etc + +## begin gnulib module version-etc-fsf + +libm4_a_SOURCES += version-etc-fsf.c + +## end gnulib module version-etc-fsf + +## begin gnulib module wait-process + +libm4_a_SOURCES += wait-process.h wait-process.c + +## end gnulib module wait-process + +## begin gnulib module wchar + +BUILT_SOURCES += $(WCHAR_H) + +# We need the following in order to create when the system +# version does not work standalone. +wchar.h: wchar.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \ + -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \ + -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \ + -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \ + -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \ + -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \ + -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \ + -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \ + -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \ + -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \ + -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \ + -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/wchar.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += wchar.h wchar.h-t + +EXTRA_DIST += wchar.in.h + +## end gnulib module wchar + +## begin gnulib module wcrtomb + + +EXTRA_DIST += wcrtomb.c + +EXTRA_libm4_a_SOURCES += wcrtomb.c + +## end gnulib module wcrtomb + +## begin gnulib module wctype + +BUILT_SOURCES += $(WCTYPE_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += wctype.h wctype.h-t + +EXTRA_DIST += wctype.in.h + +## end gnulib module wctype + +## begin gnulib module xalloc + + +EXTRA_DIST += xalloc.h xmalloc.c + +EXTRA_libm4_a_SOURCES += xmalloc.c + +## end gnulib module xalloc + +## begin gnulib module xalloc-die + +libm4_a_SOURCES += xalloc-die.c + +## end gnulib module xalloc-die + +## begin gnulib module xmalloca + +libm4_a_SOURCES += xmalloca.c + +EXTRA_DIST += xmalloca.h + +## end gnulib module xmalloca + +## begin gnulib module xprintf + +libm4_a_SOURCES += xprintf.h xprintf.c + +## end gnulib module xprintf + +## begin gnulib module xsize + +libm4_a_SOURCES += xsize.h + +## end gnulib module xsize + +## begin gnulib module xstrndup + +libm4_a_SOURCES += xstrndup.h xstrndup.c + +## end gnulib module xstrndup + +## begin gnulib module xvasprintf + +libm4_a_SOURCES += xvasprintf.h xvasprintf.c xasprintf.c + +EXTRA_DIST += xalloc.h + +## end gnulib module xvasprintf + + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : diff --git a/coreseek/m4-1.4.13/lib/Makefile.in b/coreseek/m4-1.4.13/lib/Makefile.in new file mode 100644 index 0000000..420f264 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/Makefile.in @@ -0,0 +1,2164 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# Reproduce by: gnulib-tool --import --dir=. --local-dir=local --lib=libm4 --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --with-tests --avoid=lock-tests --avoid=tls-tests --no-libtool --macro-prefix=M4 announce-gen assert autobuild avltree-oset binary-io c-stack clean-temp cloexec close-stream closein config-h dirname error execute fdl-1.3 fflush filenamecat fopen fopen-safer fseeko gendocs getopt git-version-gen gnumakefile gnupload gpl-3.0 intprops memchr2 mkstemp obstack pipe progname regex sigaction stdbool stdint stdlib-safer strsignal strstr strtod strtol unlocked-io verror version-etc version-etc-fsf wait-process xalloc xprintf xvasprintf-posix + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = lib +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.hin alloca.c +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +AM_V_AR = $(am__v_AR_$(V)) +am__v_AR_ = @echo " AR " $@; +am__v_AR_0 = @echo " AR " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +libm4_a_AR = $(AR) $(ARFLAGS) +am__DEPENDENCIES_1 = +am__dirstamp = $(am__leading_dot)dirstamp +am_libm4_a_OBJECTS = gl_avltree_oset.$(OBJEXT) c-ctype.$(OBJEXT) \ + c-stack.$(OBJEXT) clean-temp.$(OBJEXT) execute.$(OBJEXT) \ + fatal-signal.$(OBJEXT) fpurge.$(OBJEXT) freadahead.$(OBJEXT) \ + freading.$(OBJEXT) gl_linkedhash_list.$(OBJEXT) \ + gl_list.$(OBJEXT) localcharset.$(OBJEXT) \ + glthread/lock.$(OBJEXT) malloca.$(OBJEXT) memchr2.$(OBJEXT) \ + gl_oset.$(OBJEXT) pipe.$(OBJEXT) printf-frexp.$(OBJEXT) \ + printf-frexpl.$(OBJEXT) progname.$(OBJEXT) \ + glthread/threadlib.$(OBJEXT) glthread/tls.$(OBJEXT) \ + tmpdir.$(OBJEXT) verror.$(OBJEXT) version-etc.$(OBJEXT) \ + version-etc-fsf.$(OBJEXT) wait-process.$(OBJEXT) \ + xalloc-die.$(OBJEXT) xmalloca.$(OBJEXT) xprintf.$(OBJEXT) \ + xstrndup.$(OBJEXT) xvasprintf.$(OBJEXT) xasprintf.$(OBJEXT) +libm4_a_OBJECTS = $(am_libm4_a_OBJECTS) +LTLIBRARIES = $(noinst_LTLIBRARIES) +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = @echo " CC " $@; +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = @echo " CCLD " $@; +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libm4_a_SOURCES) $(EXTRA_libm4_a_SOURCES) +DIST_SOURCES = $(libm4_a_SOURCES) $(EXTRA_libm4_a_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FCNTL_H = @FCNTL_H@ +FLOAT_H = @FLOAT_H@ +GETOPT_H = @GETOPT_H@ +GLIBC21 = @GLIBC21@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBINTL = @LIBINTL@ +LIBM4_LIBDEPS = @LIBM4_LIBDEPS@ +LIBM4_LTLIBDEPS = @LIBM4_LTLIBDEPS@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBS = @LIBS@ $(POW_LIB) +LIBSIGSEGV = @LIBSIGSEGV@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTHREAD = @LIBTHREAD@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +LTLIBTHREAD = @LTLIBTHREAD@ +M4_LIBOBJS = @M4_LIBOBJS@ +M4_LTLIBOBJS = @M4_LTLIBOBJS@ +M4tests_LIBOBJS = @M4tests_LIBOBJS@ +M4tests_LTLIBOBJS = @M4tests_LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +SPAWN_H = @SPAWN_H@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_STAT_H = @SYS_STAT_H@ +SYS_TIME_H = @SYS_TIME_H@ +SYS_WAIT_H = @SYS_WAIT_H@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects +SUBDIRS = +noinst_HEADERS = +noinst_LIBRARIES = libm4.a +noinst_LTLIBRARIES = +EXTRA_DIST = alloca.c alloca.in.h $(top_srcdir)/build-aux/announce-gen \ + btowc.c cloexec.c cloexec.h close-stream.c close-stream.h \ + closein.c closein.h closeout.c closeout.h basename.c dirname.c \ + dirname.h stripslash.c errno.in.h error.c error.h exitfail.c \ + exitfail.h fcntl.in.h fflush.c stdio-impl.h filenamecat.c \ + filenamecat.h float.in.h fopen.c fopen-safer.c stdio--.h \ + stdio-safer.h fpending.c fpending.h fpucw.h fpurge.h \ + stdio-impl.h freadahead.h stdio-impl.h freading.h stdio-impl.h \ + frexp.c frexp.c frexpl.c fseeko.c stdio-impl.h ftello.c \ + $(top_srcdir)/build-aux/gendocs.sh getdtablesize.c getopt.c \ + getopt.in.h getopt1.c getopt_int.h gettimeofday.c \ + $(top_srcdir)/build-aux/git-version-gen \ + $(top_srcdir)/GNUmakefile $(top_srcdir)/build-aux/gnupload \ + $(top_srcdir)/build-aux/config.rpath intprops.h float+.h \ + isnan.c isnand-nolibm.h isnand.c float+.h isnan.c \ + isnanf-nolibm.h isnanf.c float+.h isnan.c isnanl-nolibm.h \ + isnanl.c $(top_srcdir)/build-aux/link-warning.h config.charset \ + ref-add.sin ref-del.sin lseek.c lstat.c malloc.c malloc.c \ + malloca.h malloca.valgrind math.in.h mbrtowc.c mbsinit.c \ + mkdtemp.c mkstemp.c obstack.c obstack.h open.c pathmax.h \ + spawn_int.h spawni.c spawn_faction_addclose.c spawn_int.h \ + spawn_faction_adddup2.c spawn_int.h spawn_faction_addopen.c \ + spawn_int.h spawn_faction_destroy.c spawn_faction_init.c \ + spawn_int.h spawnattr_destroy.c spawnattr_init.c \ + spawnattr_setflags.c spawnattr_setsigmask.c spawnp.c \ + printf-frexp.h printf-frexp.c printf-frexpl.h quotearg.c \ + quotearg.h rawmemchr.c rawmemchr.valgrind regcomp.c regex.c \ + regex.h regex_internal.c regex_internal.h regexec.c sched.in.h \ + sig-handler.h sigaction.c signal.in.h float+.h signbitd.c \ + signbitf.c signbitl.c sigprocmask.c snprintf.c spawn.in.h \ + stdarg.in.h stdbool.in.h stdint.in.h stdio-write.c stdio.in.h \ + stdlib.in.h mkstemp-safer.c stdlib--.h stdlib-safer.h \ + strchrnul.c strchrnul.valgrind streq.h strerror.c string.in.h \ + strndup.c strnlen.c siglist.h strsignal.c str-two-way.h \ + strstr.c strtod.c strtol.c sys_stat.in.h sys_time.in.h \ + sys_wait.in.h tempname.c tempname.h \ + $(top_srcdir)/build-aux/config.rpath unistd.in.h dup-safer.c \ + fd-safer.c pipe-safer.c unistd--.h unistd-safer.h \ + unlocked-io.h asnprintf.c float+.h printf-args.c printf-args.h \ + printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h \ + asprintf.c vasprintf.c wchar.in.h wcrtomb.c wctype.in.h \ + xalloc.h xmalloc.c xmalloca.h xalloc.h +BUILT_SOURCES = $(ALLOCA_H) configmake.h $(ERRNO_H) $(FCNTL_H) \ + $(FLOAT_H) $(GETOPT_H) math.h $(SCHED_H) signal.h $(SPAWN_H) \ + $(STDARG_H) $(STDBOOL_H) $(STDINT_H) stdio.h stdlib.h string.h \ + $(SYS_STAT_H) $(SYS_TIME_H) $(SYS_WAIT_H) unistd.h $(WCHAR_H) \ + $(WCTYPE_H) +SUFFIXES = .sed .sin +MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t errno.h \ + errno.h-t fcntl.h fcntl.h-t float.h float.h-t getopt.h \ + getopt.h-t math.h math.h-t sched.h sched.h-t signal.h \ + signal.h-t spawn.h spawn.h-t stdarg.h stdarg.h-t stdbool.h \ + stdbool.h-t stdint.h stdint.h-t stdio.h stdio.h-t stdlib.h \ + stdlib.h-t string.h string.h-t sys/stat.h sys/stat.h-t \ + sys/time.h sys/time.h-t sys/wait.h sys/wait.h-t unistd.h \ + unistd.h-t wchar.h wchar.h-t wctype.h wctype.h-t +MOSTLYCLEANDIRS = sys sys +CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \ + ref-del.sed +DISTCLEANFILES = +MAINTAINERCLEANFILES = +AM_CPPFLAGS = +AM_CFLAGS = +libm4_a_SOURCES = gl_avltree_oset.h gl_avltree_oset.c \ + gl_anytree_oset.h binary-io.h c-ctype.h c-ctype.c c-stack.h \ + c-stack.c clean-temp.h clean-temp.c execute.h execute.c \ + w32spawn.h fatal-signal.h fatal-signal.c fpurge.c freadahead.c \ + freading.c gettext.h gl_linkedhash_list.h gl_linkedhash_list.c \ + gl_anyhash_list1.h gl_anyhash_list2.h gl_anylinked_list1.h \ + gl_anylinked_list2.h gl_list.h gl_list.c localcharset.h \ + localcharset.c glthread/lock.h glthread/lock.c malloca.c \ + memchr2.h memchr2.c gl_oset.h gl_oset.c pipe.h pipe.c \ + w32spawn.h printf-frexp.c printf-frexpl.c progname.h \ + progname.c size_max.h glthread/threadlib.c glthread/tls.h \ + glthread/tls.c tmpdir.h tmpdir.c verify.h verror.h verror.c \ + version-etc.h version-etc.c version-etc-fsf.c wait-process.h \ + wait-process.c xalloc-die.c xmalloca.c xprintf.h xprintf.c \ + xsize.h xstrndup.h xstrndup.c xvasprintf.h xvasprintf.c \ + xasprintf.c +libm4_a_LIBADD = $(M4_LIBOBJS) @ALLOCA@ +libm4_a_DEPENDENCIES = $(M4_LIBOBJS) @ALLOCA@ +EXTRA_libm4_a_SOURCES = alloca.c btowc.c cloexec.c close-stream.c \ + closein.c closeout.c basename.c dirname.c stripslash.c error.c \ + exitfail.c fflush.c filenamecat.c fopen.c fopen-safer.c \ + fpending.c frexp.c frexp.c frexpl.c fseeko.c ftello.c \ + getdtablesize.c getopt.c getopt1.c gettimeofday.c isnan.c \ + isnand.c isnan.c isnanf.c isnan.c isnanl.c lseek.c lstat.c \ + malloc.c malloc.c mbrtowc.c mbsinit.c mkdtemp.c mkstemp.c \ + obstack.c open.c spawni.c spawn_faction_addclose.c \ + spawn_faction_adddup2.c spawn_faction_addopen.c \ + spawn_faction_destroy.c spawn_faction_init.c \ + spawnattr_destroy.c spawnattr_init.c spawnattr_setflags.c \ + spawnattr_setsigmask.c spawnp.c printf-frexp.c quotearg.c \ + rawmemchr.c regcomp.c regex.c regex_internal.c regexec.c \ + sigaction.c signbitd.c signbitf.c signbitl.c sigprocmask.c \ + snprintf.c stdio-write.c mkstemp-safer.c strchrnul.c \ + strerror.c strndup.c strnlen.c strsignal.c strstr.c strtod.c \ + strtol.c tempname.c dup-safer.c fd-safer.c pipe-safer.c \ + asnprintf.c printf-args.c printf-parse.c vasnprintf.c \ + asprintf.c vasprintf.c wcrtomb.c xmalloc.c +LINK_WARNING_H = $(top_srcdir)/build-aux/link-warning.h +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp +all: $(BUILT_SOURCES) config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .sed .sin .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits --silent-rules lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits --silent-rules lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.hin $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status lib/config.h +$(srcdir)/config.hin: $(am__configure_deps) + $(am__cd) $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +glthread/$(am__dirstamp): + @$(MKDIR_P) glthread + @: > glthread/$(am__dirstamp) +glthread/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) glthread/$(DEPDIR) + @: > glthread/$(DEPDIR)/$(am__dirstamp) +glthread/lock.$(OBJEXT): glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) +glthread/threadlib.$(OBJEXT): glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) +glthread/tls.$(OBJEXT): glthread/$(am__dirstamp) \ + glthread/$(DEPDIR)/$(am__dirstamp) +libm4.a: $(libm4_a_OBJECTS) $(libm4_a_DEPENDENCIES) + $(AM_V_at)-rm -f libm4.a + $(AM_V_AR)$(libm4_a_AR) libm4.a $(libm4_a_OBJECTS) $(libm4_a_LIBADD) + $(AM_V_at)$(RANLIB) libm4.a + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f glthread/lock.$(OBJEXT) + -rm -f glthread/threadlib.$(OBJEXT) + -rm -f glthread/tls.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/alloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asnprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-ctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c-stack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clean-temp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close-stream.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closein.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closeout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dup-safer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/execute.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fatal-signal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fd-safer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fflush.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filenamecat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fopen-safer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fopen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpending.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpurge.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freadahead.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freading.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frexp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frexpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fseeko.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ftello.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getdtablesize.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_avltree_oset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_linkedhash_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_oset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnand.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbrtowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbsinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memchr2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkdtemp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkstemp-safer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkstemp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obstack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe-safer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-args.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-frexp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-frexpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printf-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotearg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rawmemchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regcomp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_internal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regexec.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigaction.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signbitl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigprocmask.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_addclose.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_adddup2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_addopen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawn_faction_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_destroy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_setflags.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnattr_setsigmask.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawni.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spawnp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stdio-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strchrnul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnlen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strsignal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strstr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strtol.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tempname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tmpdir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasnprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vasprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc-fsf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wait-process.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcrtomb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xasprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrndup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xvasprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/lock.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/threadlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/tls.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.hin $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) config.h \ + all-local +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f glthread/$(DEPDIR)/$(am__dirstamp) + -rm -f glthread/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) glthread/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-exec-local + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) glthread/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local check check-am clean clean-generic \ + clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \ + ctags-recursive distclean distclean-compile distclean-generic \ + distclean-hdr distclean-local distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-local pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-local + + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +alloca.h: alloca.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t + mv -f $@-t $@ + +# Retrieve values of the variables through 'configure' followed by +# 'make', not directly through 'configure', so that a user who +# sets some of these variables consistently on the 'make' command +# line gets correct results. +# +# One advantage of this approach, compared to the classical +# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS, +# is that it protects against the use of undefined variables. +# If, say, $(libdir) is not set in the Makefile, LIBDIR is not +# defined by this module, and code using LIBDIR gives a +# compilation error. +# +# Another advantage is that 'make' output is shorter. +# +# Listed in the same order as the GNU makefile conventions. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that is POSIX compliant. +errno.h: errno.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ + -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ + -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ + -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ + -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ + -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ + -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ + < $(srcdir)/errno.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +fcntl.h: fcntl.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ + -e 's|@''GNULIB_OPEN''@|$(GNULIB_OPEN)|g' \ + -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ + < $(srcdir)/fcntl.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +float.h: float.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ + < $(srcdir)/float.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +getopt.h: getopt.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/getopt.in.h; \ + } > $@-t + mv -f $@-t $@ + +distclean-local: clean-GNUmakefile +clean-GNUmakefile: + test x'$(VPATH)' != x && rm -f $(top_builddir)/GNUmakefile || : + +# We need the following in order to install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed +install-exec-local: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + rm -f t-$@ $@ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ + mv t-$@ $@ +.sin.sed: + rm -f t-$@ $@ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ + mv t-$@ $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +math.h: math.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_MATH_H''@|$(NEXT_MATH_H)|g' \ + -e 's|@''GNULIB_CEILF''@|$(GNULIB_CEILF)|g' \ + -e 's|@''GNULIB_CEILL''@|$(GNULIB_CEILL)|g' \ + -e 's|@''GNULIB_FLOORF''@|$(GNULIB_FLOORF)|g' \ + -e 's|@''GNULIB_FLOORL''@|$(GNULIB_FLOORL)|g' \ + -e 's|@''GNULIB_FREXP''@|$(GNULIB_FREXP)|g' \ + -e 's|@''GNULIB_FREXPL''@|$(GNULIB_FREXPL)|g' \ + -e 's|@''GNULIB_ISFINITE''@|$(GNULIB_ISFINITE)|g' \ + -e 's|@''GNULIB_ISINF''@|$(GNULIB_ISINF)|g' \ + -e 's|@''GNULIB_ISNAN''@|$(GNULIB_ISNAN)|g' \ + -e 's|@''GNULIB_ISNANF''@|$(GNULIB_ISNANF)|g' \ + -e 's|@''GNULIB_ISNAND''@|$(GNULIB_ISNAND)|g' \ + -e 's|@''GNULIB_ISNANL''@|$(GNULIB_ISNANL)|g' \ + -e 's|@''GNULIB_LDEXPL''@|$(GNULIB_LDEXPL)|g' \ + -e 's|@''GNULIB_MATHL''@|$(GNULIB_MATHL)|g' \ + -e 's|@''GNULIB_ROUND''@|$(GNULIB_ROUND)|g' \ + -e 's|@''GNULIB_ROUNDF''@|$(GNULIB_ROUNDF)|g' \ + -e 's|@''GNULIB_ROUNDL''@|$(GNULIB_ROUNDL)|g' \ + -e 's|@''GNULIB_SIGNBIT''@|$(GNULIB_SIGNBIT)|g' \ + -e 's|@''GNULIB_TRUNC''@|$(GNULIB_TRUNC)|g' \ + -e 's|@''GNULIB_TRUNCF''@|$(GNULIB_TRUNCF)|g' \ + -e 's|@''GNULIB_TRUNCL''@|$(GNULIB_TRUNCL)|g' \ + -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ + -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ + -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ + -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ + -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ + -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ + -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ + -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ + -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ + -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ + -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ + -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ + -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ + -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ + -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ + -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ + -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ + -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ + -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ + -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ + -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ + -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ + -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ + -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ + -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ + -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ + -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ + -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ + -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ + -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ + -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ + -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/math.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create a replacement for when +# the system doesn't have one. +sched.h: sched.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ + -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ + < $(srcdir)/sched.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have a complete one. +signal.h: signal.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ + -e 's|@''GNULIB_SIGNAL_H_SIGPIPE''@|$(GNULIB_SIGNAL_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_SIGPROCMASK''@|$(GNULIB_SIGPROCMASK)|g' \ + -e 's|@''GNULIB_SIGACTION''@|$(GNULIB_SIGACTION)|g' \ + -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ + -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ + -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ + -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ + -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ + -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/signal.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create a replacement for when +# the system doesn't have one. +spawn.h: spawn.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN''@|$(GNULIB_POSIX_SPAWN)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNP''@|$(GNULIB_POSIX_SPAWNP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ + -e 's|@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@|$(GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_INIT''@|$(GNULIB_POSIX_SPAWNATTR_INIT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@|$(GNULIB_POSIX_SPAWNATTR_GETFLAGS)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@|$(GNULIB_POSIX_SPAWNATTR_SETFLAGS)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@|$(GNULIB_POSIX_SPAWNATTR_GETPGROUP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@|$(GNULIB_POSIX_SPAWNATTR_SETPGROUP)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@|$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@|$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@|$(GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@|$(GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@|$(GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@|$(GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@|$(GNULIB_POSIX_SPAWNATTR_GETSIGMASK)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@|$(GNULIB_POSIX_SPAWNATTR_SETSIGMASK)|g' \ + -e 's|@''GNULIB_POSIX_SPAWNATTR_DESTROY''@|$(GNULIB_POSIX_SPAWNATTR_DESTROY)|g' \ + -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ + -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/spawn.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdarg.h: stdarg.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ + < $(srcdir)/stdarg.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works. +stdbool.h: stdbool.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdint.h: stdint.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdio.h: stdio.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ + -e 's|@''GNULIB_FPRINTF''@|$(GNULIB_FPRINTF)|g' \ + -e 's|@''GNULIB_FPRINTF_POSIX''@|$(GNULIB_FPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_PRINTF''@|$(GNULIB_PRINTF)|g' \ + -e 's|@''GNULIB_PRINTF_POSIX''@|$(GNULIB_PRINTF_POSIX)|g' \ + -e 's|@''GNULIB_SNPRINTF''@|$(GNULIB_SNPRINTF)|g' \ + -e 's|@''GNULIB_SPRINTF_POSIX''@|$(GNULIB_SPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VFPRINTF''@|$(GNULIB_VFPRINTF)|g' \ + -e 's|@''GNULIB_VFPRINTF_POSIX''@|$(GNULIB_VFPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VPRINTF''@|$(GNULIB_VPRINTF)|g' \ + -e 's|@''GNULIB_VPRINTF_POSIX''@|$(GNULIB_VPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_VSNPRINTF''@|$(GNULIB_VSNPRINTF)|g' \ + -e 's|@''GNULIB_VSPRINTF_POSIX''@|$(GNULIB_VSPRINTF_POSIX)|g' \ + -e 's|@''GNULIB_DPRINTF''@|$(GNULIB_DPRINTF)|g' \ + -e 's|@''GNULIB_VDPRINTF''@|$(GNULIB_VDPRINTF)|g' \ + -e 's|@''GNULIB_VASPRINTF''@|$(GNULIB_VASPRINTF)|g' \ + -e 's|@''GNULIB_OBSTACK_PRINTF''@|$(GNULIB_OBSTACK_PRINTF)|g' \ + -e 's|@''GNULIB_OBSTACK_PRINTF_POSIX''@|$(GNULIB_OBSTACK_PRINTF_POSIX)|g' \ + -e 's|@''GNULIB_FOPEN''@|$(GNULIB_FOPEN)|g' \ + -e 's|@''GNULIB_FREOPEN''@|$(GNULIB_FREOPEN)|g' \ + -e 's|@''GNULIB_FSEEK''@|$(GNULIB_FSEEK)|g' \ + -e 's|@''GNULIB_FSEEKO''@|$(GNULIB_FSEEKO)|g' \ + -e 's|@''GNULIB_FTELL''@|$(GNULIB_FTELL)|g' \ + -e 's|@''GNULIB_FTELLO''@|$(GNULIB_FTELLO)|g' \ + -e 's|@''GNULIB_FFLUSH''@|$(GNULIB_FFLUSH)|g' \ + -e 's|@''GNULIB_FCLOSE''@|$(GNULIB_FCLOSE)|g' \ + -e 's|@''GNULIB_FPUTC''@|$(GNULIB_FPUTC)|g' \ + -e 's|@''GNULIB_PUTC''@|$(GNULIB_PUTC)|g' \ + -e 's|@''GNULIB_PUTCHAR''@|$(GNULIB_PUTCHAR)|g' \ + -e 's|@''GNULIB_FPUTS''@|$(GNULIB_FPUTS)|g' \ + -e 's|@''GNULIB_PUTS''@|$(GNULIB_PUTS)|g' \ + -e 's|@''GNULIB_FWRITE''@|$(GNULIB_FWRITE)|g' \ + -e 's|@''GNULIB_GETDELIM''@|$(GNULIB_GETDELIM)|g' \ + -e 's|@''GNULIB_GETLINE''@|$(GNULIB_GETLINE)|g' \ + -e 's|@''GNULIB_PERROR''@|$(GNULIB_PERROR)|g' \ + -e 's|@''GNULIB_STDIO_H_SIGPIPE''@|$(GNULIB_STDIO_H_SIGPIPE)|g' \ + -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ + -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ + -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ + -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ + -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ + -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ + -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ + -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ + -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ + -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ + -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ + -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ + -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ + -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ + -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ + -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ + -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ + -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ + -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ + -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ + -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ + -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ + -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ + -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ + -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ + -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ + -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ + -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ + -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ + -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/stdio.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \ + -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \ + -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \ + -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \ + -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \ + -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \ + -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \ + -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \ + -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \ + -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \ + -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \ + -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \ + -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \ + -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \ + -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \ + -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/stdlib.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \ + -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \ + -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \ + -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \ + -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \ + -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \ + -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \ + -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \ + -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \ + -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \ + -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \ + -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \ + -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \ + -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \ + -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \ + -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \ + -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \ + -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \ + -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \ + -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \ + -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \ + -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \ + -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \ + -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \ + -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \ + -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \ + -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \ + -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \ + -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \ + -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \ + -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \ + -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/string.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# has one that is incomplete. +sys/stat.h: sys_stat.in.h + @MKDIR_P@ sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ + -e 's|@''GNULIB_LCHMOD''@|$(GNULIB_LCHMOD)|g' \ + -e 's|@''GNULIB_LSTAT''@|$(GNULIB_LSTAT)|g' \ + -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ + -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ + -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ + -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/sys_stat.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +sys/time.h: sys_time.in.h + @MKDIR_P@ sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ + -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ + -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ + < $(srcdir)/sys_time.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# has one that is incomplete. +sys/wait.h: sys_wait.in.h + @MKDIR_P@ sys + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/sys_wait.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +unistd.h: unistd.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \ + -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \ + -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \ + -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \ + -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \ + -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \ + -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \ + -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \ + -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \ + -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \ + -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \ + -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \ + -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \ + -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \ + -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \ + -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \ + -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \ + -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \ + -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \ + -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \ + -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/unistd.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# version does not work standalone. +wchar.h: wchar.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \ + -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \ + -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \ + -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \ + -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \ + -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \ + -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \ + -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \ + -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \ + -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \ + -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \ + -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/wchar.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t + mv $@-t $@ + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/lib/alloca.c b/coreseek/m4-1.4.13/lib/alloca.c new file mode 100644 index 0000000..ff1cb7e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/alloca.c @@ -0,0 +1,489 @@ +/* alloca.c -- allocate automatically reclaimed memory + (Mostly) portable public-domain implementation -- D A Gwyn + + This implementation of the PWB library alloca function, + which is used to allocate space off the run-time stack so + that it is automatically reclaimed upon procedure exit, + was inspired by discussions with J. Q. Johnson of Cornell. + J.Otto Tennant contributed the Cray support. + + There are some preprocessor constants that can + be defined when compiling for your specific system, for + improved efficiency; however, the defaults should be okay. + + The general concept of this implementation is to keep + track of all alloca-allocated blocks, and reclaim any + that are found to be deeper in the stack than the current + invocation. This heuristic does not reclaim storage as + soon as it becomes invalid, but it will do so eventually. + + As a special case, alloca(0) reclaims storage without + allocating any. It is a good idea to use alloca(0) in + your main control loop, etc. to force garbage collection. */ + +#include + +#include + +#include +#include + +#ifdef emacs +# include "lisp.h" +# include "blockinput.h" +# ifdef EMACS_FREE +# undef free +# define free EMACS_FREE +# endif +#else +# define memory_full() abort () +#endif + +/* If compiling with GCC 2, this file's not needed. */ +#if !defined (__GNUC__) || __GNUC__ < 2 + +/* If someone has defined alloca as a macro, + there must be some other way alloca is supposed to work. */ +# ifndef alloca + +# ifdef emacs +# ifdef static +/* actually, only want this if static is defined as "" + -- this is for usg, in which emacs must undefine static + in order to make unexec workable + */ +# ifndef STACK_DIRECTION +you +lose +-- must know STACK_DIRECTION at compile-time +/* Using #error here is not wise since this file should work for + old and obscure compilers. */ +# endif /* STACK_DIRECTION undefined */ +# endif /* static */ +# endif /* emacs */ + +/* If your stack is a linked list of frames, you have to + provide an "address metric" ADDRESS_FUNCTION macro. */ + +# if defined (CRAY) && defined (CRAY_STACKSEG_END) +long i00afunc (); +# define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) +# else +# define ADDRESS_FUNCTION(arg) &(arg) +# endif + +/* Define STACK_DIRECTION if you know the direction of stack + growth for your system; otherwise it will be automatically + deduced at run-time. + + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ + +# ifndef STACK_DIRECTION +# define STACK_DIRECTION 0 /* Direction unknown. */ +# endif + +# if STACK_DIRECTION != 0 + +# define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ + +# else /* STACK_DIRECTION == 0; need run-time code. */ + +static int stack_dir; /* 1 or -1 once known. */ +# define STACK_DIR stack_dir + +static void +find_stack_direction (void) +{ + static char *addr = NULL; /* Address of first `dummy', once known. */ + auto char dummy; /* To get stack address. */ + + if (addr == NULL) + { /* Initial entry. */ + addr = ADDRESS_FUNCTION (dummy); + + find_stack_direction (); /* Recurse once. */ + } + else + { + /* Second entry. */ + if (ADDRESS_FUNCTION (dummy) > addr) + stack_dir = 1; /* Stack grew upward. */ + else + stack_dir = -1; /* Stack grew downward. */ + } +} + +# endif /* STACK_DIRECTION == 0 */ + +/* An "alloca header" is used to: + (a) chain together all alloca'ed blocks; + (b) keep track of stack depth. + + It is very important that sizeof(header) agree with malloc + alignment chunk size. The following default should work okay. */ + +# ifndef ALIGN_SIZE +# define ALIGN_SIZE sizeof(double) +# endif + +typedef union hdr +{ + char align[ALIGN_SIZE]; /* To force sizeof(header). */ + struct + { + union hdr *next; /* For chaining headers. */ + char *deep; /* For stack depth measure. */ + } h; +} header; + +static header *last_alloca_header = NULL; /* -> last alloca header. */ + +/* Return a pointer to at least SIZE bytes of storage, + which will be automatically reclaimed upon exit from + the procedure that called alloca. Originally, this space + was supposed to be taken from the current stack frame of the + caller, but that method cannot be made to work for some + implementations of C, for example under Gould's UTX/32. */ + +void * +alloca (size_t size) +{ + auto char probe; /* Probes stack depth: */ + register char *depth = ADDRESS_FUNCTION (probe); + +# if STACK_DIRECTION == 0 + if (STACK_DIR == 0) /* Unknown growth direction. */ + find_stack_direction (); +# endif + + /* Reclaim garbage, defined as all alloca'd storage that + was allocated from deeper in the stack than currently. */ + + { + register header *hp; /* Traverses linked list. */ + +# ifdef emacs + BLOCK_INPUT; +# endif + + for (hp = last_alloca_header; hp != NULL;) + if ((STACK_DIR > 0 && hp->h.deep > depth) + || (STACK_DIR < 0 && hp->h.deep < depth)) + { + register header *np = hp->h.next; + + free (hp); /* Collect garbage. */ + + hp = np; /* -> next header. */ + } + else + break; /* Rest are not deeper. */ + + last_alloca_header = hp; /* -> last valid storage. */ + +# ifdef emacs + UNBLOCK_INPUT; +# endif + } + + if (size == 0) + return NULL; /* No allocation required. */ + + /* Allocate combined header + user data storage. */ + + { + /* Address of header. */ + register header *new; + + size_t combined_size = sizeof (header) + size; + if (combined_size < sizeof (header)) + memory_full (); + + new = malloc (combined_size); + + if (! new) + memory_full (); + + new->h.next = last_alloca_header; + new->h.deep = depth; + + last_alloca_header = new; + + /* User storage begins just after header. */ + + return (void *) (new + 1); + } +} + +# if defined (CRAY) && defined (CRAY_STACKSEG_END) + +# ifdef DEBUG_I00AFUNC +# include +# endif + +# ifndef CRAY_STACK +# define CRAY_STACK +# ifndef CRAY2 +/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ +struct stack_control_header + { + long shgrow:32; /* Number of times stack has grown. */ + long shaseg:32; /* Size of increments to stack. */ + long shhwm:32; /* High water mark of stack. */ + long shsize:32; /* Current size of stack (all segments). */ + }; + +/* The stack segment linkage control information occurs at + the high-address end of a stack segment. (The stack + grows from low addresses to high addresses.) The initial + part of the stack segment linkage control information is + 0200 (octal) words. This provides for register storage + for the routine which overflows the stack. */ + +struct stack_segment_linkage + { + long ss[0200]; /* 0200 overflow words. */ + long sssize:32; /* Number of words in this segment. */ + long ssbase:32; /* Offset to stack base. */ + long:32; + long sspseg:32; /* Offset to linkage control of previous + segment of stack. */ + long:32; + long sstcpt:32; /* Pointer to task common address block. */ + long sscsnm; /* Private control structure number for + microtasking. */ + long ssusr1; /* Reserved for user. */ + long ssusr2; /* Reserved for user. */ + long sstpid; /* Process ID for pid based multi-tasking. */ + long ssgvup; /* Pointer to multitasking thread giveup. */ + long sscray[7]; /* Reserved for Cray Research. */ + long ssa0; + long ssa1; + long ssa2; + long ssa3; + long ssa4; + long ssa5; + long ssa6; + long ssa7; + long sss0; + long sss1; + long sss2; + long sss3; + long sss4; + long sss5; + long sss6; + long sss7; + }; + +# else /* CRAY2 */ +/* The following structure defines the vector of words + returned by the STKSTAT library routine. */ +struct stk_stat + { + long now; /* Current total stack size. */ + long maxc; /* Amount of contiguous space which would + be required to satisfy the maximum + stack demand to date. */ + long high_water; /* Stack high-water mark. */ + long overflows; /* Number of stack overflow ($STKOFEN) calls. */ + long hits; /* Number of internal buffer hits. */ + long extends; /* Number of block extensions. */ + long stko_mallocs; /* Block allocations by $STKOFEN. */ + long underflows; /* Number of stack underflow calls ($STKRETN). */ + long stko_free; /* Number of deallocations by $STKRETN. */ + long stkm_free; /* Number of deallocations by $STKMRET. */ + long segments; /* Current number of stack segments. */ + long maxs; /* Maximum number of stack segments so far. */ + long pad_size; /* Stack pad size. */ + long current_address; /* Current stack segment address. */ + long current_size; /* Current stack segment size. This + number is actually corrupted by STKSTAT to + include the fifteen word trailer area. */ + long initial_address; /* Address of initial segment. */ + long initial_size; /* Size of initial segment. */ + }; + +/* The following structure describes the data structure which trails + any stack segment. I think that the description in 'asdef' is + out of date. I only describe the parts that I am sure about. */ + +struct stk_trailer + { + long this_address; /* Address of this block. */ + long this_size; /* Size of this block (does not include + this trailer). */ + long unknown2; + long unknown3; + long link; /* Address of trailer block of previous + segment. */ + long unknown5; + long unknown6; + long unknown7; + long unknown8; + long unknown9; + long unknown10; + long unknown11; + long unknown12; + long unknown13; + long unknown14; + }; + +# endif /* CRAY2 */ +# endif /* not CRAY_STACK */ + +# ifdef CRAY2 +/* Determine a "stack measure" for an arbitrary ADDRESS. + I doubt that "lint" will like this much. */ + +static long +i00afunc (long *address) +{ + struct stk_stat status; + struct stk_trailer *trailer; + long *block, size; + long result = 0; + + /* We want to iterate through all of the segments. The first + step is to get the stack status structure. We could do this + more quickly and more directly, perhaps, by referencing the + $LM00 common block, but I know that this works. */ + + STKSTAT (&status); + + /* Set up the iteration. */ + + trailer = (struct stk_trailer *) (status.current_address + + status.current_size + - 15); + + /* There must be at least one stack segment. Therefore it is + a fatal error if "trailer" is null. */ + + if (trailer == 0) + abort (); + + /* Discard segments that do not contain our argument address. */ + + while (trailer != 0) + { + block = (long *) trailer->this_address; + size = trailer->this_size; + if (block == 0 || size == 0) + abort (); + trailer = (struct stk_trailer *) trailer->link; + if ((block <= address) && (address < (block + size))) + break; + } + + /* Set the result to the offset in this segment and add the sizes + of all predecessor segments. */ + + result = address - block; + + if (trailer == 0) + { + return result; + } + + do + { + if (trailer->this_size <= 0) + abort (); + result += trailer->this_size; + trailer = (struct stk_trailer *) trailer->link; + } + while (trailer != 0); + + /* We are done. Note that if you present a bogus address (one + not in any segment), you will get a different number back, formed + from subtracting the address of the first block. This is probably + not what you want. */ + + return (result); +} + +# else /* not CRAY2 */ +/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. + Determine the number of the cell within the stack, + given the address of the cell. The purpose of this + routine is to linearize, in some sense, stack addresses + for alloca. */ + +static long +i00afunc (long address) +{ + long stkl = 0; + + long size, pseg, this_segment, stack; + long result = 0; + + struct stack_segment_linkage *ssptr; + + /* Register B67 contains the address of the end of the + current stack segment. If you (as a subprogram) store + your registers on the stack and find that you are past + the contents of B67, you have overflowed the segment. + + B67 also points to the stack segment linkage control + area, which is what we are really interested in. */ + + stkl = CRAY_STACKSEG_END (); + ssptr = (struct stack_segment_linkage *) stkl; + + /* If one subtracts 'size' from the end of the segment, + one has the address of the first word of the segment. + + If this is not the first segment, 'pseg' will be + nonzero. */ + + pseg = ssptr->sspseg; + size = ssptr->sssize; + + this_segment = stkl - size; + + /* It is possible that calling this routine itself caused + a stack overflow. Discard stack segments which do not + contain the target address. */ + + while (!(this_segment <= address && address <= stkl)) + { +# ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); +# endif + if (pseg == 0) + break; + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + this_segment = stkl - size; + } + + result = address - this_segment; + + /* If you subtract pseg from the current end of the stack, + you get the address of the previous stack segment's end. + This seems a little convoluted to me, but I'll bet you save + a cycle somewhere. */ + + while (pseg != 0) + { +# ifdef DEBUG_I00AFUNC + fprintf (stderr, "%011o %011o\n", pseg, size); +# endif + stkl = stkl - pseg; + ssptr = (struct stack_segment_linkage *) stkl; + size = ssptr->sssize; + pseg = ssptr->sspseg; + result += size; + } + return (result); +} + +# endif /* not CRAY2 */ +# endif /* CRAY */ + +# endif /* no alloca */ +#endif /* not GCC version 3 */ diff --git a/coreseek/m4-1.4.13/lib/alloca.h b/coreseek/m4-1.4.13/lib/alloca.h new file mode 100644 index 0000000..97089ba --- /dev/null +++ b/coreseek/m4-1.4.13/lib/alloca.h @@ -0,0 +1,57 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2008 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca (N) returns a pointer to N bytes of memory + allocated on the stack, which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include +# define alloca _alloca +# elif defined __DECC && defined __VMS +# define alloca __ALLOCA +# else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/coreseek/m4-1.4.13/lib/alloca.in.h b/coreseek/m4-1.4.13/lib/alloca.in.h new file mode 100644 index 0000000..6269607 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/alloca.in.h @@ -0,0 +1,56 @@ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2008 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca (N) returns a pointer to N bytes of memory + allocated on the stack, which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include +# define alloca _alloca +# elif defined __DECC && defined __VMS +# define alloca __ALLOCA +# else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/coreseek/m4-1.4.13/lib/asnprintf.c b/coreseek/m4-1.4.13/lib/asnprintf.c new file mode 100644 index 0000000..bf2abf3 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/asnprintf.c @@ -0,0 +1,35 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include "vasnprintf.h" + +#include + +char * +asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + char *result; + + va_start (args, format); + result = vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return result; +} diff --git a/coreseek/m4-1.4.13/lib/asnprintf.o b/coreseek/m4-1.4.13/lib/asnprintf.o new file mode 100644 index 0000000..54db9ee Binary files /dev/null and b/coreseek/m4-1.4.13/lib/asnprintf.o differ diff --git a/coreseek/m4-1.4.13/lib/asprintf.c b/coreseek/m4-1.4.13/lib/asprintf.c new file mode 100644 index 0000000..0bbecf8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/asprintf.c @@ -0,0 +1,39 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#ifdef IN_LIBASPRINTF +# include "vasprintf.h" +#else +# include +#endif + +#include + +int +asprintf (char **resultp, const char *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = vasprintf (resultp, format, args); + va_end (args); + return result; +} diff --git a/coreseek/m4-1.4.13/lib/asprintf.o b/coreseek/m4-1.4.13/lib/asprintf.o new file mode 100644 index 0000000..93e37b4 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/asprintf.o differ diff --git a/coreseek/m4-1.4.13/lib/basename.c b/coreseek/m4-1.4.13/lib/basename.c new file mode 100644 index 0000000..426ed40 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/basename.c @@ -0,0 +1,128 @@ +/* basename.c -- return the last element in a file name + + Copyright (C) 1990, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +#include +#include "xalloc.h" +#include "xstrndup.h" + +/* Return the address of the last file name component of NAME. If + NAME has no relative file name components because it is a file + system root, return the empty string. */ + +char * +last_component (char const *name) +{ + char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); + char const *p; + bool saw_slash = false; + + while (ISSLASH (*base)) + base++; + + for (p = base; *p; p++) + { + if (ISSLASH (*p)) + saw_slash = true; + else if (saw_slash) + { + base = p; + saw_slash = false; + } + } + + return (char *) base; +} + + +/* In general, we can't use the builtin `basename' function if available, + since it has different meanings in different environments. + In some environments the builtin `basename' modifies its argument. + + Return the last file name component of NAME, allocated with + xmalloc. On systems with drive letters, a leading "./" + distinguishes relative names that would otherwise look like a drive + letter. Unlike POSIX basename(), NAME cannot be NULL, + base_name("") returns "", and the first trailing slash is not + stripped. + + If lstat (NAME) would succeed, then { chdir (dir_name (NAME)); + lstat (base_name (NAME)); } will access the same file. Likewise, + if the sequence { chdir (dir_name (NAME)); + rename (base_name (NAME), "foo"); } succeeds, you have renamed NAME + to "foo" in the same directory NAME was in. */ + +char * +base_name (char const *name) +{ + char const *base = last_component (name); + size_t length; + + /* If there is no last component, then name is a file system root or the + empty string. */ + if (! *base) + return xstrndup (name, base_len (name)); + + /* Collapse a sequence of trailing slashes into one. */ + length = base_len (base); + if (ISSLASH (base[length])) + length++; + + /* On systems with drive letters, `a/b:c' must return `./b:c' rather + than `b:c' to avoid confusion with a drive letter. On systems + with pure POSIX semantics, this is not an issue. */ + if (FILE_SYSTEM_PREFIX_LEN (base)) + { + char *p = xmalloc (length + 3); + p[0] = '.'; + p[1] = '/'; + memcpy (p + 2, base, length); + p[length + 2] = '\0'; + return p; + } + + /* Finally, copy the basename. */ + return xstrndup (base, length); +} + +/* Return the length of the basename NAME. Typically NAME is the + value returned by base_name or last_component. Act like strlen + (NAME), except omit all trailing slashes. */ + +size_t +base_len (char const *name) +{ + size_t len; + size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); + + for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) + continue; + + if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 + && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) + return 2; + + if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len + && len == prefix_len && ISSLASH (name[prefix_len])) + return prefix_len + 1; + + return len; +} diff --git a/coreseek/m4-1.4.13/lib/basename.o b/coreseek/m4-1.4.13/lib/basename.o new file mode 100644 index 0000000..7c38556 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/basename.o differ diff --git a/coreseek/m4-1.4.13/lib/binary-io.h b/coreseek/m4-1.4.13/lib/binary-io.h new file mode 100644 index 0000000..b1dc629 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/binary-io.h @@ -0,0 +1,62 @@ +/* Binary mode I/O. + Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _BINARY_H +#define _BINARY_H + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in . */ +#include + +/* The MSVC7 doesn't like to be included after '#define fileno ...', + so we include it here first. */ +#include + +#if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ +# define O_BINARY _O_BINARY +# define O_TEXT _O_TEXT +#endif +#if defined __BEOS__ || defined __HAIKU__ + /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ +# undef O_BINARY +# undef O_TEXT +#endif +#if O_BINARY +# if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ +# include /* declares setmode() */ +# else +# define setmode _setmode +# undef fileno +# define fileno _fileno +# endif +# ifdef __DJGPP__ +# include /* declares isatty() */ +# /* Avoid putting stdin/stdout in binary mode if it is connected to the +# console, because that would make it impossible for the user to +# interrupt the program through Ctrl-C or Ctrl-Break. */ +# define SET_BINARY(fd) (!isatty (fd) ? (setmode (fd, O_BINARY), 0) : 0) +# else +# define SET_BINARY(fd) setmode (fd, O_BINARY) +# endif +#else + /* On reasonable systems, binary I/O is the default. */ +# undef O_BINARY +# define O_BINARY 0 +# define SET_BINARY(fd) /* nothing */ +#endif + +#endif /* _BINARY_H */ diff --git a/coreseek/m4-1.4.13/lib/btowc.c b/coreseek/m4-1.4.13/lib/btowc.c new file mode 100644 index 0000000..7f3b966 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/btowc.c @@ -0,0 +1,38 @@ +/* Convert unibyte character to wide character. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +wint_t +btowc (int c) +{ + if (c != EOF) + { + char buf[1]; + wchar_t wc; + + buf[0] = c; + if (mbtowc (&wc, buf, 1) >= 0) + return wc; + } + return WEOF; +} diff --git a/coreseek/m4-1.4.13/lib/c-ctype.c b/coreseek/m4-1.4.13/lib/c-ctype.c new file mode 100644 index 0000000..b87e6ef --- /dev/null +++ b/coreseek/m4-1.4.13/lib/c-ctype.c @@ -0,0 +1,396 @@ +/* Character handling in C locale. + + Copyright 2000-2003, 2006 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#define NO_C_CTYPE_MACROS +#include "c-ctype.h" + +/* The function isascii is not locale dependent. Its use in EBCDIC is + questionable. */ +bool +c_isascii (int c) +{ + return (c >= 0x00 && c <= 0x7f); +} + +bool +c_isalnum (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')); +#else + return ((c >= '0' && c <= '9') + || (c >= 'A' && c <= 'Z') + || (c >= 'a' && c <= 'z')); +#endif +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isalpha (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'); +#else + return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); +#endif +#else + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isblank (int c) +{ + return (c == ' ' || c == '\t'); +} + +bool +c_iscntrl (int c) +{ +#if C_CTYPE_ASCII + return ((c & ~0x1f) == 0 || c == 0x7f); +#else + switch (c) + { + case ' ': case '!': case '"': case '#': case '$': case '%': + case '&': case '\'': case '(': case ')': case '*': case '+': + case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': case '?': + case '@': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '[': case '\\': case ']': case '^': case '_': case '`': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '{': case '|': case '}': case '~': + return 0; + default: + return 1; + } +#endif +} + +bool +c_isdigit (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS + return (c >= '0' && c <= '9'); +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + return 1; + default: + return 0; + } +#endif +} + +bool +c_islower (int c) +{ +#if C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'a' && c <= 'z'); +#else + switch (c) + { + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isgraph (int c) +{ +#if C_CTYPE_ASCII + return (c >= '!' && c <= '~'); +#else + switch (c) + { + case '!': case '"': case '#': case '$': case '%': case '&': + case '\'': case '(': case ')': case '*': case '+': case ',': + case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': case '?': + case '@': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '[': case '\\': case ']': case '^': case '_': case '`': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isprint (int c) +{ +#if C_CTYPE_ASCII + return (c >= ' ' && c <= '~'); +#else + switch (c) + { + case ' ': case '!': case '"': case '#': case '$': case '%': + case '&': case '\'': case '(': case ')': case '*': case '+': + case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': case '?': + case '@': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '[': case '\\': case ']': case '^': case '_': case '`': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_ispunct (int c) +{ +#if C_CTYPE_ASCII + return ((c >= '!' && c <= '~') + && !((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'))); +#else + switch (c) + { + case '!': case '"': case '#': case '$': case '%': case '&': + case '\'': case '(': case ')': case '*': case '+': case ',': + case '-': case '.': case '/': + case ':': case ';': case '<': case '=': case '>': case '?': + case '@': + case '[': case '\\': case ']': case '^': case '_': case '`': + case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isspace (int c) +{ + return (c == ' ' || c == '\t' + || c == '\n' || c == '\v' || c == '\f' || c == '\r'); +} + +bool +c_isupper (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE + return (c >= 'A' && c <= 'Z'); +#else + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isxdigit (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F')); +#else + return ((c >= '0' && c <= '9') + || (c >= 'A' && c <= 'F') + || (c >= 'a' && c <= 'f')); +#endif +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + return 1; + default: + return 0; + } +#endif +} + +int +c_tolower (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c); +#else + switch (c) + { + case 'A': return 'a'; + case 'B': return 'b'; + case 'C': return 'c'; + case 'D': return 'd'; + case 'E': return 'e'; + case 'F': return 'f'; + case 'G': return 'g'; + case 'H': return 'h'; + case 'I': return 'i'; + case 'J': return 'j'; + case 'K': return 'k'; + case 'L': return 'l'; + case 'M': return 'm'; + case 'N': return 'n'; + case 'O': return 'o'; + case 'P': return 'p'; + case 'Q': return 'q'; + case 'R': return 'r'; + case 'S': return 's'; + case 'T': return 't'; + case 'U': return 'u'; + case 'V': return 'v'; + case 'W': return 'w'; + case 'X': return 'x'; + case 'Y': return 'y'; + case 'Z': return 'z'; + default: return c; + } +#endif +} + +int +c_toupper (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c); +#else + switch (c) + { + case 'a': return 'A'; + case 'b': return 'B'; + case 'c': return 'C'; + case 'd': return 'D'; + case 'e': return 'E'; + case 'f': return 'F'; + case 'g': return 'G'; + case 'h': return 'H'; + case 'i': return 'I'; + case 'j': return 'J'; + case 'k': return 'K'; + case 'l': return 'L'; + case 'm': return 'M'; + case 'n': return 'N'; + case 'o': return 'O'; + case 'p': return 'P'; + case 'q': return 'Q'; + case 'r': return 'R'; + case 's': return 'S'; + case 't': return 'T'; + case 'u': return 'U'; + case 'v': return 'V'; + case 'w': return 'W'; + case 'x': return 'X'; + case 'y': return 'Y'; + case 'z': return 'Z'; + default: return c; + } +#endif +} diff --git a/coreseek/m4-1.4.13/lib/c-ctype.h b/coreseek/m4-1.4.13/lib/c-ctype.h new file mode 100644 index 0000000..d78dd19 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/c-ctype.h @@ -0,0 +1,295 @@ +/* Character handling in C locale. + + These functions work like the corresponding functions in , + except that they have the C (POSIX) locale hardwired, whereas the + functions' behaviour depends on the current locale set via + setlocale. + + Copyright (C) 2000-2003, 2006, 2008 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef C_CTYPE_H +#define C_CTYPE_H + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. */ + + +/* Check whether the ASCII optimizations apply. */ + +/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that + '0', '1', ..., '9' have consecutive integer values. */ +#define C_CTYPE_CONSECUTIVE_DIGITS 1 + +#if ('A' <= 'Z') \ + && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \ + && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \ + && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \ + && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \ + && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \ + && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \ + && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \ + && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \ + && ('Y' + 1 == 'Z') +#define C_CTYPE_CONSECUTIVE_UPPERCASE 1 +#endif + +#if ('a' <= 'z') \ + && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \ + && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \ + && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \ + && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \ + && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \ + && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \ + && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \ + && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \ + && ('y' + 1 == 'z') +#define C_CTYPE_CONSECUTIVE_LOWERCASE 1 +#endif + +#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) +/* The character set is ASCII or one of its variants or extensions, not EBCDIC. + Testing the value of '\n' and '\r' is not relevant. */ +#define C_CTYPE_ASCII 1 +#endif + + +/* Function declarations. */ + +/* Unlike the functions in , which require an argument in the range + of the 'unsigned char' type, the functions here operate on values that are + in the 'unsigned char' range or in the 'char' range. In other words, + when you have a 'char' value, you need to cast it before using it as + argument to a function: + + const char *s = ...; + if (isalpha ((unsigned char) *s)) ... + + but you don't need to cast it for the functions defined in this file: + + const char *s = ...; + if (c_isalpha (*s)) ... + */ + +extern bool c_isascii (int c); /* not locale dependent */ + +extern bool c_isalnum (int c); +extern bool c_isalpha (int c); +extern bool c_isblank (int c); +extern bool c_iscntrl (int c); +extern bool c_isdigit (int c); +extern bool c_islower (int c); +extern bool c_isgraph (int c); +extern bool c_isprint (int c); +extern bool c_ispunct (int c); +extern bool c_isspace (int c); +extern bool c_isupper (int c); +extern bool c_isxdigit (int c); + +extern int c_tolower (int c); +extern int c_toupper (int c); + + +#if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS + +/* ASCII optimizations. */ + +#undef c_isascii +#define c_isascii(c) \ + ({ int __c = (c); \ + (__c >= 0x00 && __c <= 0x7f); \ + }) + +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isalnum +#define c_isalnum(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \ + }) +#else +#undef c_isalnum +#define c_isalnum(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || (__c >= 'A' && __c <= 'Z') \ + || (__c >= 'a' && __c <= 'z')); \ + }) +#endif +#endif + +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isalpha +#define c_isalpha(c) \ + ({ int __c = (c); \ + ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \ + }) +#else +#undef c_isalpha +#define c_isalpha(c) \ + ({ int __c = (c); \ + ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \ + }) +#endif +#endif + +#undef c_isblank +#define c_isblank(c) \ + ({ int __c = (c); \ + (__c == ' ' || __c == '\t'); \ + }) + +#if C_CTYPE_ASCII +#undef c_iscntrl +#define c_iscntrl(c) \ + ({ int __c = (c); \ + ((__c & ~0x1f) == 0 || __c == 0x7f); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_DIGITS +#undef c_isdigit +#define c_isdigit(c) \ + ({ int __c = (c); \ + (__c >= '0' && __c <= '9'); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_LOWERCASE +#undef c_islower +#define c_islower(c) \ + ({ int __c = (c); \ + (__c >= 'a' && __c <= 'z'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_isgraph +#define c_isgraph(c) \ + ({ int __c = (c); \ + (__c >= '!' && __c <= '~'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_isprint +#define c_isprint(c) \ + ({ int __c = (c); \ + (__c >= ' ' && __c <= '~'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_ispunct +#define c_ispunct(c) \ + ({ int _c = (c); \ + (c_isgraph (_c) && ! c_isalnum (_c)); \ + }) +#endif + +#undef c_isspace +#define c_isspace(c) \ + ({ int __c = (c); \ + (__c == ' ' || __c == '\t' \ + || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \ + }) + +#if C_CTYPE_CONSECUTIVE_UPPERCASE +#undef c_isupper +#define c_isupper(c) \ + ({ int __c = (c); \ + (__c >= 'A' && __c <= 'Z'); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isxdigit +#define c_isxdigit(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \ + }) +#else +#undef c_isxdigit +#define c_isxdigit(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || (__c >= 'A' && __c <= 'F') \ + || (__c >= 'a' && __c <= 'f')); \ + }) +#endif +#endif + +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#undef c_tolower +#define c_tolower(c) \ + ({ int __c = (c); \ + (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \ + }) +#undef c_toupper +#define c_toupper(c) \ + ({ int __c = (c); \ + (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \ + }) +#endif + +#endif /* optimizing for speed */ + + +#ifdef __cplusplus +} +#endif + +#endif /* C_CTYPE_H */ diff --git a/coreseek/m4-1.4.13/lib/c-ctype.o b/coreseek/m4-1.4.13/lib/c-ctype.o new file mode 100644 index 0000000..86fba55 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/c-ctype.o differ diff --git a/coreseek/m4-1.4.13/lib/c-stack.c b/coreseek/m4-1.4.13/lib/c-stack.c new file mode 100644 index 0000000..d260b47 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/c-stack.c @@ -0,0 +1,342 @@ +/* Stack overflow handling. + + Copyright (C) 2002, 2004, 2006, 2008, 2009 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +/* NOTES: + + A program that uses alloca, dynamic arrays, or large local + variables may extend the stack by more than a page at a time. If + so, when the stack overflows the operating system may not detect + the overflow until the program uses the array, and this module may + incorrectly report a program error instead of a stack overflow. + + To avoid this problem, allocate only small objects on the stack; a + program should be OK if it limits single allocations to a page or + less. Allocate larger arrays in static storage, or on the heap + (e.g., with malloc). Yes, this is a pain, but we don't know of any + better solution that is portable. + + No attempt has been made to deal with multithreaded applications. */ + +#include + +#ifndef __attribute__ +# if __GNUC__ < 3 +# define __attribute__(x) +# endif +#endif + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +#include +#ifndef ENOTSUP +# define ENOTSUP EINVAL +#endif + +#include +#if ! HAVE_STACK_T && ! defined stack_t +typedef struct sigaltstack stack_t; +#endif +#ifndef SIGSTKSZ +# define SIGSTKSZ 16384 +#endif + +#include +#include + +/* Posix 2001 declares ucontext_t in , Posix 200x in + . */ +#if HAVE_UCONTEXT_H +# include +#endif + +#include + +#if HAVE_LIBSIGSEGV +# include +#endif + +#include "c-stack.h" +#include "exitfail.h" + +#if defined SA_ONSTACK && defined SA_SIGINFO +# define SIGACTION_WORKS 1 +#else +# define SIGACTION_WORKS 0 +# ifndef SA_ONSTACK +# define SA_ONSTACK 0 +# endif +#endif + +extern char *program_name; + +/* The user-specified action to take when a SEGV-related program error + or stack overflow occurs. */ +static void (* volatile segv_action) (int); + +/* Translated messages for program errors and stack overflow. Do not + translate them in the signal handler, since gettext is not + async-signal-safe. */ +static char const * volatile program_error_message; +static char const * volatile stack_overflow_message; + +/* Output an error message, then exit with status EXIT_FAILURE if it + appears to have been a stack overflow, or with a core dump + otherwise. This function is async-signal-safe. */ + +static void die (int) __attribute__ ((noreturn)); +static void +die (int signo) +{ + char const *message; + segv_action (signo); + message = signo ? program_error_message : stack_overflow_message; + write (STDERR_FILENO, program_name, strlen (program_name)); + write (STDERR_FILENO, ": ", 2); + write (STDERR_FILENO, message, strlen (message)); + write (STDERR_FILENO, "\n", 1); + if (! signo) + _exit (exit_failure); + raise (signo); + abort (); +} + +#if (HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK \ + && HAVE_STACK_OVERFLOW_HANDLING) || HAVE_LIBSIGSEGV + +/* Storage for the alternate signal stack. */ +static union +{ + char buffer[SIGSTKSZ]; + + /* These other members are for proper alignment. There's no + standard way to guarantee stack alignment, but this seems enough + in practice. */ + long double ld; + long l; + void *p; +} alternate_signal_stack; + +static void +null_action (int signo __attribute__ ((unused))) +{ +} + +#endif /* SIGALTSTACK || LIBSIGSEGV */ + +/* Only use libsigsegv if we need it; platforms like Solaris can + detect stack overflow without the overhead of an external + library. */ +#if HAVE_LIBSIGSEGV && ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC + +/* Nonzero if general segv handler could not be installed. */ +static volatile int segv_handler_missing; + +/* Handle a segmentation violation and exit if it cannot be stack + overflow. This function is async-signal-safe. */ + +static int segv_handler (void *address __attribute__ ((unused)), + int serious) +{ +# if DEBUG + { + char buf[1024]; + sprintf (buf, "segv_handler serious=%d\n", serious); + write (STDERR_FILENO, buf, strlen (buf)); + } +# endif + + /* If this fault is not serious, return 0 to let the stack overflow + handler take a shot at it. */ + if (!serious) + return 0; + die (SIGSEGV); +} + +/* Handle a segmentation violation that is likely to be a stack + overflow and exit. This function is async-signal-safe. */ + +static void overflow_handler (int, stackoverflow_context_t) + __attribute__ ((noreturn)); +static void +overflow_handler (int emergency, + stackoverflow_context_t context __attribute__ ((unused))) +{ +# if DEBUG + { + char buf[1024]; + sprintf (buf, "overflow_handler emergency=%d segv_handler_missing=%d\n", + emergency, segv_handler_missing); + write (STDERR_FILENO, buf, strlen (buf)); + } +# endif + + die ((!emergency || segv_handler_missing) ? 0 : SIGSEGV); +} + +int +c_stack_action (void (*action) (int)) +{ + segv_action = action ? action : null_action; + program_error_message = _("program error"); + stack_overflow_message = _("stack overflow"); + + /* Always install the overflow handler. */ + if (stackoverflow_install_handler (overflow_handler, + alternate_signal_stack.buffer, + sizeof alternate_signal_stack.buffer)) + { + errno = ENOTSUP; + return -1; + } + /* Try installing a general handler; if it fails, then treat all + segv as stack overflow. */ + segv_handler_missing = sigsegv_install_handler (segv_handler); + return 0; +} + +#elif HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK && HAVE_STACK_OVERFLOW_HANDLING + +/* Direction of the C runtime stack. This function is + async-signal-safe. */ + +# if STACK_DIRECTION +# define find_stack_direction(ptr) STACK_DIRECTION +# else +static int +find_stack_direction (char const *addr) +{ + char dummy; + return ! addr ? find_stack_direction (&dummy) : addr < &dummy ? 1 : -1; +} +# endif + +# if SIGACTION_WORKS + +/* Handle a segmentation violation and exit. This function is + async-signal-safe. */ + +static void segv_handler (int, siginfo_t *, void *) __attribute__((noreturn)); +static void +segv_handler (int signo, siginfo_t *info, + void *context __attribute__ ((unused))) +{ + /* Clear SIGNO if it seems to have been a stack overflow. */ +# if ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC + /* We can't easily determine whether it is a stack overflow; so + assume that the rest of our program is perfect (!) and that + this segmentation violation is a stack overflow. + + Note that although both Linux and Solaris provide + sigaltstack, SA_ONSTACK, and SA_SIGINFO, currently only + Solaris satisfies the XSI heueristic. This is because + Solaris populates uc_stack with the details of the + interrupted stack, while Linux populates it with the details + of the current stack. */ + signo = 0; +# else + if (0 < info->si_code) + { + /* If the faulting address is within the stack, or within one + page of the stack end, assume that it is a stack + overflow. */ + ucontext_t const *user_context = context; + char const *stack_base = user_context->uc_stack.ss_sp; + size_t stack_size = user_context->uc_stack.ss_size; + char const *faulting_address = info->si_addr; + size_t s = faulting_address - stack_base; + size_t page_size = sysconf (_SC_PAGESIZE); + if (find_stack_direction (NULL) < 0) + s += page_size; + if (s < stack_size + page_size) + signo = 0; + +# if DEBUG + { + char buf[1024]; + sprintf (buf, + "segv_handler fault=%p base=%p size=%lx page=%lx signo=%d\n", + faulting_address, stack_base, (unsigned long) stack_size, + (unsigned long) page_size, signo); + write (STDERR_FILENO, buf, strlen (buf)); + } +# endif + } +# endif + + die (signo); +} +# endif + +int +c_stack_action (void (*action) (int)) +{ + int r; + stack_t st; + struct sigaction act; + st.ss_flags = 0; +# if SIGALTSTACK_SS_REVERSED + /* Irix mistakenly treats ss_sp as the upper bound, rather than + lower bound, of the alternate stack. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ - sizeof (void *); + st.ss_size = sizeof alternate_signal_stack.buffer - sizeof (void *); +# else + st.ss_sp = alternate_signal_stack.buffer; + st.ss_size = sizeof alternate_signal_stack.buffer; +# endif + r = sigaltstack (&st, NULL); + if (r != 0) + return r; + + segv_action = action ? action : null_action; + program_error_message = _("program error"); + stack_overflow_message = _("stack overflow"); + + sigemptyset (&act.sa_mask); + +# if SIGACTION_WORKS + /* POSIX 1003.1-2001 says SA_RESETHAND implies SA_NODEFER, but + this is not true on Solaris 8 at least. It doesn't hurt to use + SA_NODEFER here, so leave it in. */ + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; + act.sa_sigaction = segv_handler; +# else + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND; + act.sa_handler = die; +# endif + +# if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, NULL) < 0) + return -1; +# endif + return sigaction (SIGSEGV, &act, NULL); +} + +#else /* ! ((HAVE_SIGALTSTACK && HAVE_DECL_SIGALTSTACK + && HAVE_STACK_OVERFLOW_HANDLING) || HAVE_LIBSIGSEGV) */ + +int +c_stack_action (void (*action) (int) __attribute__ ((unused))) +{ + errno = ENOTSUP; + return -1; +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/c-stack.h b/coreseek/m4-1.4.13/lib/c-stack.h new file mode 100644 index 0000000..e1e0a6e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/c-stack.h @@ -0,0 +1,44 @@ +/* Stack overflow handling. + + Copyright (C) 2002, 2004, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +/* Set up ACTION so that it is invoked on C stack overflow and on other, + stack-unrelated, segmentation violation. + Return -1 (setting errno) if this cannot be done. + + When a stack overflow or segmentation violation occurs: + 1) ACTION is called. It is passed an argument equal to + - 0, for a stack overflow, + - SIGSEGV, for a segmentation violation that does not appear related + to stack overflow. + On many platforms the two cases are hard to distinguish; when in doubt, + zero is passed. + 2) If ACTION returns, a message is written to standard error, and the + program is terminated: in the case of stack overflow, with exit code + exit_failure (see "exitfail.h"), otherwise through a signal SIGSEGV. + + A null ACTION acts like an action that does nothing. + + ACTION must be async-signal-safe. ACTION together with its callees + must not require more than SIGSTKSZ bytes of stack space. Also, + ACTION should not call longjmp, because this implementation does + not guarantee that it is safe to return to the original stack. + + This function may install a handler for the SIGSEGV signal or for the SIGBUS + signal or exercise other system dependent exception handling APIs. */ + +extern int c_stack_action (void (* /*action*/) (int)); diff --git a/coreseek/m4-1.4.13/lib/c-stack.o b/coreseek/m4-1.4.13/lib/c-stack.o new file mode 100644 index 0000000..67dd311 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/c-stack.o differ diff --git a/coreseek/m4-1.4.13/lib/charset.alias b/coreseek/m4-1.4.13/lib/charset.alias new file mode 100644 index 0000000..d9501e2 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/charset.alias @@ -0,0 +1,5 @@ +# This file contains a table of character encoding aliases, +# suitable for operating system 'linux-gnu'. +# It was automatically generated from config.charset. +# Packages using this file: +ISO_646.IRV:1983 ASCII diff --git a/coreseek/m4-1.4.13/lib/clean-temp.c b/coreseek/m4-1.4.13/lib/clean-temp.c new file mode 100644 index 0000000..283d8af --- /dev/null +++ b/coreseek/m4-1.4.13/lib/clean-temp.c @@ -0,0 +1,783 @@ +/* Temporary directories and temporary files with automatic cleanup. + Copyright (C) 2001, 2003, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include + +/* Specification. */ +#include "clean-temp.h" + +#include +#include +#include +#include +#include +#include +#include + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include +#endif + +#include "error.h" +#include "fatal-signal.h" +#include "pathmax.h" +#include "tmpdir.h" +#include "xalloc.h" +#include "xmalloca.h" +#include "gl_linkedhash_list.h" +#include "gettext.h" +#if GNULIB_FWRITEERROR +# include "fwriteerror.h" +#endif +#if GNULIB_CLOSE_STREAM +# include "close-stream.h" +#endif +#if GNULIB_FCNTL_SAFER +# include "fcntl--.h" +#endif +#if GNULIB_FOPEN_SAFER +# include "stdio--.h" +#endif + +#define _(str) gettext (str) + +/* GNU Hurd doesn't have PATH_MAX. */ +#ifndef PATH_MAX +# ifdef MAXPATHLEN +# define PATH_MAX MAXPATHLEN +# else +# define PATH_MAX 1024 +# endif +#endif + +#ifndef uintptr_t +# define uintptr_t unsigned long +#endif + +#if !GNULIB_FCNTL_SAFER +/* The results of open() in this file are not used with fchdir, + therefore save some unnecessary work in fchdir.c. */ +# undef open +# undef close +#endif + + +/* The use of 'volatile' in the types below (and ISO C 99 section 5.1.2.3.(5)) + ensure that while constructing or modifying the data structures, the field + values are written to memory in the order of the C statements. So the + signal handler can rely on these field values to be up to date. */ + + +/* Registry for a single temporary directory. + 'struct temp_dir' from the public header file overlaps with this. */ +struct tempdir +{ + /* The absolute pathname of the directory. */ + char * volatile dirname; + /* Whether errors during explicit cleanup are reported to standard error. */ + bool cleanup_verbose; + /* Absolute pathnames of subdirectories. */ + gl_list_t /* */ volatile subdirs; + /* Absolute pathnames of files. */ + gl_list_t /* */ volatile files; +}; + +/* List of all temporary directories. */ +static struct +{ + struct tempdir * volatile * volatile tempdir_list; + size_t volatile tempdir_count; + size_t tempdir_allocated; +} cleanup_list /* = { NULL, 0, 0 } */; + +/* List of all open file descriptors to temporary files. */ +static gl_list_t /* */ volatile descriptors; + + +/* For the subdirs and for the files, we use a gl_list_t of type LINKEDHASH. + Why? We need a data structure that + + 1) Can contain an arbitrary number of 'char *' values. The strings + are compared via strcmp, not pointer comparison. + 2) Has insertion and deletion operations that are fast: ideally O(1), + or possibly O(log n). This is important for GNU sort, which may + create a large number of temporary files. + 3) Allows iteration through all elements from within a signal handler. + 4) May or may not allow duplicates. It doesn't matter here, since + any file or subdir can only be removed once. + + Criterion 1) would allow any gl_list_t or gl_oset_t implementation. + + Criterion 2) leaves only GL_LINKEDHASH_LIST, GL_TREEHASH_LIST, or + GL_TREE_OSET. + + Criterion 3) puts at disadvantage GL_TREEHASH_LIST and GL_TREE_OSET. + Namely, iteration through the elements of a binary tree requires access + to many ->left, ->right, ->parent pointers. However, the rebalancing + code for insertion and deletion in an AVL or red-black tree is so + complicated that we cannot assume that >left, ->right, ->parent pointers + are in a consistent state throughout these operations. Therefore, to + avoid a crash in the signal handler, all destructive operations to the + lists would have to be protected by a + block_fatal_signals (); + ... + unblock_fatal_signals (); + pair. Which causes extra system calls. + + Criterion 3) would also discourage GL_ARRAY_LIST and GL_CARRAY_LIST, + if they were not already excluded. Namely, these implementations use + xrealloc(), leaving a time window in which in the list->elements pointer + points to already deallocated memory. To avoid a crash in the signal + handler at such a moment, all destructive operations would have to + protected by block/unblock_fatal_signals (), in this case too. + + A list of type GL_LINKEDHASH_LIST without duplicates fulfills all + requirements: + 2) Insertion and deletion are O(1) on average. + 3) The gl_list_iterator, gl_list_iterator_next implementations do + not trigger memory allocations, nor other system calls, and are + therefore safe to be called from a signal handler. + Furthermore, since SIGNAL_SAFE_LIST is defined, the implementation + of the destructive functions ensures that the list structure is + safe to be traversed at any moment, even when interrupted by an + asynchronous signal. + */ + +/* String equality and hash code functions used by the lists. */ + +static bool +string_equals (const void *x1, const void *x2) +{ + const char *s1 = (const char *) x1; + const char *s2 = (const char *) x2; + return strcmp (s1, s2) == 0; +} + +#define SIZE_BITS (sizeof (size_t) * CHAR_BIT) + +/* A hash function for NUL-terminated char* strings using + the method described by Bruno Haible. + See http://www.haible.de/bruno/hashfunc.html. */ +static size_t +string_hash (const void *x) +{ + const char *s = (const char *) x; + size_t h = 0; + + for (; *s; s++) + h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); + + return h; +} + + +/* The signal handler. It gets called asynchronously. */ +static void +cleanup () +{ + size_t i; + + /* First close all file descriptors to temporary files. */ + { + gl_list_t fds = descriptors; + + if (fds != NULL) + { + gl_list_iterator_t iter; + const void *element; + + iter = gl_list_iterator (fds); + while (gl_list_iterator_next (&iter, &element, NULL)) + { + int fd = (int) (uintptr_t) element; + close (fd); + } + gl_list_iterator_free (&iter); + } + } + + for (i = 0; i < cleanup_list.tempdir_count; i++) + { + struct tempdir *dir = cleanup_list.tempdir_list[i]; + + if (dir != NULL) + { + gl_list_iterator_t iter; + const void *element; + + /* First cleanup the files in the subdirectories. */ + iter = gl_list_iterator (dir->files); + while (gl_list_iterator_next (&iter, &element, NULL)) + { + const char *file = (const char *) element; + unlink (file); + } + gl_list_iterator_free (&iter); + + /* Then cleanup the subdirectories. */ + iter = gl_list_iterator (dir->subdirs); + while (gl_list_iterator_next (&iter, &element, NULL)) + { + const char *subdir = (const char *) element; + rmdir (subdir); + } + gl_list_iterator_free (&iter); + + /* Then cleanup the temporary directory itself. */ + rmdir (dir->dirname); + } + } +} + +/* Create a temporary directory. + PREFIX is used as a prefix for the name of the temporary directory. It + should be short and still give an indication about the program. + PARENTDIR can be used to specify the parent directory; if NULL, a default + parent directory is used (either $TMPDIR or /tmp or similar). + CLEANUP_VERBOSE determines whether errors during explicit cleanup are + reported to standard error. + Return a fresh 'struct temp_dir' on success. Upon error, an error message + is shown and NULL is returned. */ +struct temp_dir * +create_temp_dir (const char *prefix, const char *parentdir, + bool cleanup_verbose) +{ + struct tempdir * volatile *tmpdirp = NULL; + struct tempdir *tmpdir; + size_t i; + char *xtemplate; + char *tmpdirname; + + /* See whether it can take the slot of an earlier temporary directory + already cleaned up. */ + for (i = 0; i < cleanup_list.tempdir_count; i++) + if (cleanup_list.tempdir_list[i] == NULL) + { + tmpdirp = &cleanup_list.tempdir_list[i]; + break; + } + if (tmpdirp == NULL) + { + /* See whether the array needs to be extended. */ + if (cleanup_list.tempdir_count == cleanup_list.tempdir_allocated) + { + /* Note that we cannot use xrealloc(), because then the cleanup() + function could access an already deallocated array. */ + struct tempdir * volatile *old_array = cleanup_list.tempdir_list; + size_t old_allocated = cleanup_list.tempdir_allocated; + size_t new_allocated = 2 * cleanup_list.tempdir_allocated + 1; + struct tempdir * volatile *new_array = + XNMALLOC (new_allocated, struct tempdir * volatile); + + if (old_allocated == 0) + /* First use of this facility. Register the cleanup handler. */ + at_fatal_signal (&cleanup); + else + { + /* Don't use memcpy() here, because memcpy takes non-volatile + arguments and is therefore not guaranteed to complete all + memory stores before the next statement. */ + size_t k; + + for (k = 0; k < old_allocated; k++) + new_array[k] = old_array[k]; + } + + cleanup_list.tempdir_list = new_array; + cleanup_list.tempdir_allocated = new_allocated; + + /* Now we can free the old array. */ + if (old_array != NULL) + free ((struct tempdir **) old_array); + } + + tmpdirp = &cleanup_list.tempdir_list[cleanup_list.tempdir_count]; + /* Initialize *tmpdirp before incrementing tempdir_count, so that + cleanup() will skip this entry before it is fully initialized. */ + *tmpdirp = NULL; + cleanup_list.tempdir_count++; + } + + /* Initialize a 'struct tempdir'. */ + tmpdir = XMALLOC (struct tempdir); + tmpdir->dirname = NULL; + tmpdir->cleanup_verbose = cleanup_verbose; + tmpdir->subdirs = gl_list_create_empty (GL_LINKEDHASH_LIST, + string_equals, string_hash, NULL, + false); + tmpdir->files = gl_list_create_empty (GL_LINKEDHASH_LIST, + string_equals, string_hash, NULL, + false); + + /* Create the temporary directory. */ + xtemplate = (char *) xmalloca (PATH_MAX); + if (path_search (xtemplate, PATH_MAX, parentdir, prefix, parentdir == NULL)) + { + error (0, errno, + _("cannot find a temporary directory, try setting $TMPDIR")); + goto quit; + } + block_fatal_signals (); + tmpdirname = mkdtemp (xtemplate); + if (tmpdirname != NULL) + { + tmpdir->dirname = tmpdirname; + *tmpdirp = tmpdir; + } + unblock_fatal_signals (); + if (tmpdirname == NULL) + { + error (0, errno, + _("cannot create a temporary directory using template \"%s\""), + xtemplate); + goto quit; + } + /* Replace tmpdir->dirname with a copy that has indefinite extent. + We cannot do this inside the block_fatal_signals/unblock_fatal_signals + block because then the cleanup handler would not remove the directory + if xstrdup fails. */ + tmpdir->dirname = xstrdup (tmpdirname); + freea (xtemplate); + return (struct temp_dir *) tmpdir; + + quit: + freea (xtemplate); + return NULL; +} + +/* Register the given ABSOLUTE_FILE_NAME as being a file inside DIR, that + needs to be removed before DIR can be removed. + Should be called before the file ABSOLUTE_FILE_NAME is created. */ +void +register_temp_file (struct temp_dir *dir, + const char *absolute_file_name) +{ + struct tempdir *tmpdir = (struct tempdir *)dir; + + /* Add absolute_file_name to tmpdir->files, without duplicates. */ + if (gl_list_search (tmpdir->files, absolute_file_name) == NULL) + gl_list_add_first (tmpdir->files, xstrdup (absolute_file_name)); +} + +/* Unregister the given ABSOLUTE_FILE_NAME as being a file inside DIR, that + needs to be removed before DIR can be removed. + Should be called when the file ABSOLUTE_FILE_NAME could not be created. */ +void +unregister_temp_file (struct temp_dir *dir, + const char *absolute_file_name) +{ + struct tempdir *tmpdir = (struct tempdir *)dir; + gl_list_t list = tmpdir->files; + gl_list_node_t node; + + node = gl_list_search (list, absolute_file_name); + if (node != NULL) + { + char *old_string = (char *) gl_list_node_value (list, node); + + gl_list_remove_node (list, node); + free (old_string); + } +} + +/* Register the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, + that needs to be removed before DIR can be removed. + Should be called before the subdirectory ABSOLUTE_DIR_NAME is created. */ +void +register_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name) +{ + struct tempdir *tmpdir = (struct tempdir *)dir; + + /* Add absolute_dir_name to tmpdir->subdirs, without duplicates. */ + if (gl_list_search (tmpdir->subdirs, absolute_dir_name) == NULL) + gl_list_add_first (tmpdir->subdirs, xstrdup (absolute_dir_name)); +} + +/* Unregister the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, + that needs to be removed before DIR can be removed. + Should be called when the subdirectory ABSOLUTE_DIR_NAME could not be + created. */ +void +unregister_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name) +{ + struct tempdir *tmpdir = (struct tempdir *)dir; + gl_list_t list = tmpdir->subdirs; + gl_list_node_t node; + + node = gl_list_search (list, absolute_dir_name); + if (node != NULL) + { + char *old_string = (char *) gl_list_node_value (list, node); + + gl_list_remove_node (list, node); + free (old_string); + } +} + +/* Remove a file, with optional error message. + Return 0 upon success, or -1 if there was some problem. */ +static int +do_unlink (struct temp_dir *dir, const char *absolute_file_name) +{ + if (unlink (absolute_file_name) < 0 && dir->cleanup_verbose + && errno != ENOENT) + { + error (0, errno, _("cannot remove temporary file %s"), absolute_file_name); + return -1; + } + return 0; +} + +/* Remove a directory, with optional error message. + Return 0 upon success, or -1 if there was some problem. */ +static int +do_rmdir (struct temp_dir *dir, const char *absolute_dir_name) +{ + if (rmdir (absolute_dir_name) < 0 && dir->cleanup_verbose + && errno != ENOENT) + { + error (0, errno, + _("cannot remove temporary directory %s"), absolute_dir_name); + return -1; + } + return 0; +} + +/* Remove the given ABSOLUTE_FILE_NAME and unregister it. + Return 0 upon success, or -1 if there was some problem. */ +int +cleanup_temp_file (struct temp_dir *dir, + const char *absolute_file_name) +{ + int err; + + err = do_unlink (dir, absolute_file_name); + unregister_temp_file (dir, absolute_file_name); + + return err; +} + +/* Remove the given ABSOLUTE_DIR_NAME and unregister it. + Return 0 upon success, or -1 if there was some problem. */ +int +cleanup_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name) +{ + int err; + + err = do_rmdir (dir, absolute_dir_name); + unregister_temp_subdir (dir, absolute_dir_name); + + return err; +} + +/* Remove all registered files and subdirectories inside DIR. + Return 0 upon success, or -1 if there was some problem. */ +int +cleanup_temp_dir_contents (struct temp_dir *dir) +{ + struct tempdir *tmpdir = (struct tempdir *)dir; + int err = 0; + gl_list_t list; + gl_list_iterator_t iter; + const void *element; + gl_list_node_t node; + + /* First cleanup the files in the subdirectories. */ + list = tmpdir->files; + iter = gl_list_iterator (list); + while (gl_list_iterator_next (&iter, &element, &node)) + { + char *file = (char *) element; + + err |= do_unlink (dir, file); + gl_list_remove_node (list, node); + /* Now only we can free file. */ + free (file); + } + gl_list_iterator_free (&iter); + + /* Then cleanup the subdirectories. */ + list = tmpdir->subdirs; + iter = gl_list_iterator (list); + while (gl_list_iterator_next (&iter, &element, &node)) + { + char *subdir = (char *) element; + + err |= do_rmdir (dir, subdir); + gl_list_remove_node (list, node); + /* Now only we can free subdir. */ + free (subdir); + } + gl_list_iterator_free (&iter); + + return err; +} + +/* Remove all registered files and subdirectories inside DIR and DIR itself. + DIR cannot be used any more after this call. + Return 0 upon success, or -1 if there was some problem. */ +int +cleanup_temp_dir (struct temp_dir *dir) +{ + struct tempdir *tmpdir = (struct tempdir *)dir; + int err = 0; + size_t i; + + err |= cleanup_temp_dir_contents (dir); + err |= do_rmdir (dir, tmpdir->dirname); + + for (i = 0; i < cleanup_list.tempdir_count; i++) + if (cleanup_list.tempdir_list[i] == tmpdir) + { + /* Remove cleanup_list.tempdir_list[i]. */ + if (i + 1 == cleanup_list.tempdir_count) + { + while (i > 0 && cleanup_list.tempdir_list[i - 1] == NULL) + i--; + cleanup_list.tempdir_count = i; + } + else + cleanup_list.tempdir_list[i] = NULL; + /* Now only we can free the tmpdir->dirname and tmpdir itself. */ + free (tmpdir->dirname); + free (tmpdir); + return err; + } + + /* The user passed an invalid DIR argument. */ + abort (); +} + + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* On Windows, opening a file with _O_TEMPORARY has the effect of passing + the FILE_FLAG_DELETE_ON_CLOSE flag to CreateFile(), which has the effect + of deleting the file when it is closed - even when the program crashes. + But (according to the Cygwin sources) it works only on Windows NT or newer. + So we cache the info whether we are running on Windows NT or newer. */ + +static bool +supports_delete_on_close () +{ + static int known; /* 1 = yes, -1 = no, 0 = unknown */ + if (!known) + { + OSVERSIONINFO v; + + if (GetVersionEx (&v)) + known = (v.dwPlatformId == VER_PLATFORM_WIN32_NT ? 1 : -1); + else + known = -1; + } + return (known > 0); +} + +#endif + + +/* Register a file descriptor to be closed. */ +static void +register_fd (int fd) +{ + if (descriptors == NULL) + descriptors = gl_list_create_empty (GL_LINKEDHASH_LIST, NULL, NULL, NULL, + false); + gl_list_add_first (descriptors, (void *) (uintptr_t) fd); +} + +/* Unregister a file descriptor to be closed. */ +static void +unregister_fd (int fd) +{ + gl_list_t fds = descriptors; + gl_list_node_t node; + + if (fds == NULL) + /* descriptors should already contain fd. */ + abort (); + node = gl_list_search (fds, (void *) (uintptr_t) fd); + if (node == NULL) + /* descriptors should already contain fd. */ + abort (); + gl_list_remove_node (fds, node); +} + +/* Open a temporary file in a temporary directory. + Registers the resulting file descriptor to be closed. */ +int +open_temp (const char *file_name, int flags, mode_t mode) +{ + int fd; + int saved_errno; + + block_fatal_signals (); + /* Note: 'open' here is actually open() or open_safer(). */ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* Use _O_TEMPORARY when possible, to increase the chances that the + temporary file is removed when the process crashes. */ + if (supports_delete_on_close ()) + fd = open (file_name, flags | _O_TEMPORARY, mode); + else +#endif + fd = open (file_name, flags, mode); + saved_errno = errno; + if (fd >= 0) + register_fd (fd); + unblock_fatal_signals (); + errno = saved_errno; + return fd; +} + +/* Open a temporary file in a temporary directory. + Registers the resulting file descriptor to be closed. */ +FILE * +fopen_temp (const char *file_name, const char *mode) +{ + FILE *fp; + int saved_errno; + + block_fatal_signals (); + /* Note: 'fopen' here is actually fopen() or fopen_safer(). */ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* Use _O_TEMPORARY when possible, to increase the chances that the + temporary file is removed when the process crashes. */ + if (supports_delete_on_close ()) + { + size_t mode_len = strlen (mode); + char *augmented_mode = (char *) xmalloca (mode_len + 2); + memcpy (augmented_mode, mode, mode_len); + memcpy (augmented_mode + mode_len, "D", 2); + + fp = fopen (file_name, augmented_mode); + saved_errno = errno; + + freea (augmented_mode); + } + else +#endif + { + fp = fopen (file_name, mode); + saved_errno = errno; + } + if (fp != NULL) + { + /* It is sufficient to register fileno (fp) instead of the entire fp, + because at cleanup time there is no need to do an fflush (fp); a + close (fileno (fp)) will be enough. */ + int fd = fileno (fp); + if (!(fd >= 0)) + abort (); + register_fd (fd); + } + unblock_fatal_signals (); + errno = saved_errno; + return fp; +} + +/* Close a temporary file in a temporary directory. + Unregisters the previously registered file descriptor. */ +int +close_temp (int fd) +{ + if (fd >= 0) + { + /* No blocking of signals is needed here, since a double close of a + file descriptor is harmless. */ + int result = close (fd); + int saved_errno = errno; + + /* No race condition here: we assume a single-threaded program, hence + fd cannot be re-opened here. */ + + unregister_fd (fd); + + errno = saved_errno; + return result; + } + else + return close (fd); +} + +/* Close a temporary file in a temporary directory. + Unregisters the previously registered file descriptor. */ +int +fclose_temp (FILE *fp) +{ + int fd = fileno (fp); + /* No blocking of signals is needed here, since a double close of a + file descriptor is harmless. */ + int result = fclose (fp); + int saved_errno = errno; + + /* No race condition here: we assume a single-threaded program, hence + fd cannot be re-opened here. */ + + unregister_fd (fd); + + errno = saved_errno; + return result; +} + +#if GNULIB_FWRITEERROR +/* Like fwriteerror. + Unregisters the previously registered file descriptor. */ +int +fwriteerror_temp (FILE *fp) +{ + int fd = fileno (fp); + /* No blocking of signals is needed here, since a double close of a + file descriptor is harmless. */ + int result = fwriteerror (fp); + int saved_errno = errno; + + /* No race condition here: we assume a single-threaded program, hence + fd cannot be re-opened here. */ + + unregister_fd (fd); + + errno = saved_errno; + return result; +} +#endif + +#if GNULIB_CLOSE_STREAM +/* Like close_stream. + Unregisters the previously registered file descriptor. */ +int +close_stream_temp (FILE *fp) +{ + int fd = fileno (fp); + /* No blocking of signals is needed here, since a double close of a + file descriptor is harmless. */ + int result = close_stream (fp); + int saved_errno = errno; + + /* No race condition here: we assume a single-threaded program, hence + fd cannot be re-opened here. */ + + unregister_fd (fd); + + errno = saved_errno; + return result; +} +#endif diff --git a/coreseek/m4-1.4.13/lib/clean-temp.h b/coreseek/m4-1.4.13/lib/clean-temp.h new file mode 100644 index 0000000..65c427c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/clean-temp.h @@ -0,0 +1,133 @@ +/* Temporary directories and temporary files with automatic cleanup. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _CLEAN_TEMP_H +#define _CLEAN_TEMP_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Temporary directories and temporary files should be automatically removed + when the program exits either normally or through a fatal signal. We can't + rely on the "unlink before close" idiom, because it works only on Unix and + also - if no signal blocking is used - leaves a time window where a fatal + signal would not clean up the temporary file. + + Also, open file descriptors need to be closed before the temporary files + and the temporary directories can be removed, because only on Unix + (excluding Cygwin) can one remove directories containing open files. + + This module provides support for temporary directories and temporary files + inside these temporary directories. Temporary files without temporary + directories are not supported here. */ + +struct temp_dir +{ + /* The absolute pathname of the directory. */ + const char * const dir_name; + /* Whether errors during explicit cleanup are reported to standard error. */ + bool cleanup_verbose; + /* More fields are present here, but not public. */ +}; + +/* Create a temporary directory. + PREFIX is used as a prefix for the name of the temporary directory. It + should be short and still give an indication about the program. + PARENTDIR can be used to specify the parent directory; if NULL, a default + parent directory is used (either $TMPDIR or /tmp or similar). + CLEANUP_VERBOSE determines whether errors during explicit cleanup are + reported to standard error. + Return a fresh 'struct temp_dir' on success. Upon error, an error message + is shown and NULL is returned. */ +extern struct temp_dir * create_temp_dir (const char *prefix, + const char *parentdir, + bool cleanup_verbose); + +/* Register the given ABSOLUTE_FILE_NAME as being a file inside DIR, that + needs to be removed before DIR can be removed. + Should be called before the file ABSOLUTE_FILE_NAME is created. */ +extern void register_temp_file (struct temp_dir *dir, + const char *absolute_file_name); + +/* Unregister the given ABSOLUTE_FILE_NAME as being a file inside DIR, that + needs to be removed before DIR can be removed. + Should be called when the file ABSOLUTE_FILE_NAME could not be created. */ +extern void unregister_temp_file (struct temp_dir *dir, + const char *absolute_file_name); + +/* Register the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, + that needs to be removed before DIR can be removed. + Should be called before the subdirectory ABSOLUTE_DIR_NAME is created. */ +extern void register_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name); + +/* Unregister the given ABSOLUTE_DIR_NAME as being a subdirectory inside DIR, + that needs to be removed before DIR can be removed. + Should be called when the subdirectory ABSOLUTE_DIR_NAME could not be + created. */ +extern void unregister_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name); + +/* Remove the given ABSOLUTE_FILE_NAME and unregister it. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temp_file (struct temp_dir *dir, + const char *absolute_file_name); + +/* Remove the given ABSOLUTE_DIR_NAME and unregister it. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temp_subdir (struct temp_dir *dir, + const char *absolute_dir_name); + +/* Remove all registered files and subdirectories inside DIR. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temp_dir_contents (struct temp_dir *dir); + +/* Remove all registered files and subdirectories inside DIR and DIR itself. + DIR cannot be used any more after this call. + Return 0 upon success, or -1 if there was some problem. */ +extern int cleanup_temp_dir (struct temp_dir *dir); + +/* Open a temporary file in a temporary directory. + Registers the resulting file descriptor to be closed. */ +extern int open_temp (const char *file_name, int flags, mode_t mode); +extern FILE * fopen_temp (const char *file_name, const char *mode); + +/* Close a temporary file in a temporary directory. + Unregisters the previously registered file descriptor. */ +extern int close_temp (int fd); +extern int fclose_temp (FILE *fp); + +/* Like fwriteerror. + Unregisters the previously registered file descriptor. */ +extern int fwriteerror_temp (FILE *fp); + +/* Like close_stream. + Unregisters the previously registered file descriptor. */ +extern int close_stream_temp (FILE *fp); + + +#ifdef __cplusplus +} +#endif + +#endif /* _CLEAN_TEMP_H */ diff --git a/coreseek/m4-1.4.13/lib/clean-temp.o b/coreseek/m4-1.4.13/lib/clean-temp.o new file mode 100644 index 0000000..4f4043d Binary files /dev/null and b/coreseek/m4-1.4.13/lib/clean-temp.o differ diff --git a/coreseek/m4-1.4.13/lib/cloexec.c b/coreseek/m4-1.4.13/lib/cloexec.c new file mode 100644 index 0000000..ff8105b --- /dev/null +++ b/coreseek/m4-1.4.13/lib/cloexec.c @@ -0,0 +1,58 @@ +/* closexec.c - set or clear the close-on-exec descriptor flag + + Copyright (C) 1991, 2004, 2005, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + The code is taken from glibc/manual/llio.texi */ + +#include + +#include "cloexec.h" + +#include +#include + +#ifndef FD_CLOEXEC +# define FD_CLOEXEC 1 +#endif + +/* Set the `FD_CLOEXEC' flag of DESC if VALUE is true, + or clear the flag if VALUE is false. + Return 0 on success, or -1 on error with `errno' set. */ + +int +set_cloexec_flag (int desc, bool value) +{ +#if defined F_GETFD && defined F_SETFD + + int flags = fcntl (desc, F_GETFD, 0); + + if (0 <= flags) + { + int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC); + + if (flags == newflags + || fcntl (desc, F_SETFD, newflags) != -1) + return 0; + } + + return -1; + +#else + + return 0; + +#endif +} diff --git a/coreseek/m4-1.4.13/lib/cloexec.h b/coreseek/m4-1.4.13/lib/cloexec.h new file mode 100644 index 0000000..c25921d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/cloexec.h @@ -0,0 +1,2 @@ +#include +int set_cloexec_flag (int desc, bool value); diff --git a/coreseek/m4-1.4.13/lib/cloexec.o b/coreseek/m4-1.4.13/lib/cloexec.o new file mode 100644 index 0000000..aa90735 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/cloexec.o differ diff --git a/coreseek/m4-1.4.13/lib/close-stream.c b/coreseek/m4-1.4.13/lib/close-stream.c new file mode 100644 index 0000000..59ab616 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/close-stream.c @@ -0,0 +1,79 @@ +/* Close a stream, with nicer error checking than fclose's. + + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2007, 2008 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "close-stream.h" + +#include +#include + +#include "fpending.h" + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +/* Close STREAM. Return 0 if successful, EOF (setting errno) + otherwise. A failure might set errno to 0 if the error number + cannot be determined. + + A failure with errno set to EPIPE may or may not indicate an error + situation worth signaling to the user. See the documentation of the + close_stdout_set_ignore_EPIPE function for details. + + If a program writes *anything* to STREAM, that program should close + STREAM and make sure that it succeeds before exiting. Otherwise, + suppose that you go to the extreme of checking the return status + of every function that does an explicit write to STREAM. The last + printf can succeed in writing to the internal stream buffer, and yet + the fclose(STREAM) could still fail (due e.g., to a disk full error) + when it tries to write out that buffered data. Thus, you would be + left with an incomplete output file and the offending program would + exit successfully. Even calling fflush is not always sufficient, + since some file systems (NFS and CODA) buffer written/flushed data + until an actual close call. + + Besides, it's wasteful to check the return value from every call + that writes to STREAM -- just let the internal stream state record + the failure. That's what the ferror test is checking below. */ + +int +close_stream (FILE *stream) +{ + bool some_pending = (__fpending (stream) != 0); + bool prev_fail = (ferror (stream) != 0); + bool fclose_fail = (fclose (stream) != 0); + + /* Return an error indication if there was a previous failure or if + fclose failed, with one exception: ignore an fclose failure if + there was no previous error, no data remains to be flushed, and + fclose failed with EBADF. That can happen when a program like cp + is invoked like this `cp a b >&-' (i.e., with standard output + closed) and doesn't generate any output (hence no previous error + and nothing to be flushed). */ + + if (prev_fail || (fclose_fail && (some_pending || errno != EBADF))) + { + if (! fclose_fail) + errno = 0; + return EOF; + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/close-stream.h b/coreseek/m4-1.4.13/lib/close-stream.h new file mode 100644 index 0000000..be3d419 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/close-stream.h @@ -0,0 +1,2 @@ +#include +int close_stream (FILE *stream); diff --git a/coreseek/m4-1.4.13/lib/close-stream.o b/coreseek/m4-1.4.13/lib/close-stream.o new file mode 100644 index 0000000..104b693 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/close-stream.o differ diff --git a/coreseek/m4-1.4.13/lib/closein.c b/coreseek/m4-1.4.13/lib/closein.c new file mode 100644 index 0000000..c7fb581 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/closein.c @@ -0,0 +1,111 @@ +/* Close standard input, rewinding seekable stdin if necessary. + + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "closein.h" + +#include +#include +#include +#include + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +#include "close-stream.h" +#include "closeout.h" +#include "error.h" +#include "exitfail.h" +#include "freadahead.h" +#include "quotearg.h" + +static const char *file_name; + +/* Set the file name to be reported in the event an error is detected + on stdin by close_stdin. See also close_stdout_set_file_name, if + an error is detected when closing stdout. */ +void +close_stdin_set_file_name (const char *file) +{ + file_name = file; +} + +/* Close standard input, rewinding any unused input if stdin is + seekable. On error, issue a diagnostic and _exit with status + 'exit_failure'. Then call close_stdout. + + Most programs can get by with close_stdout. close_stdin is only + needed when a program wants to guarantee that partially read input + from seekable stdin is not consumed, for any subsequent clients. + For example, POSIX requires that these two commands behave alike: + + (sed -ne 1q; cat) < file + tail -n 1 file + + Since close_stdin is commonly registered via 'atexit', POSIX + and the C standard both say that it should not call 'exit', + because the behavior is undefined if 'exit' is called more than + once. So it calls '_exit' instead of 'exit'. If close_stdin + is registered via atexit before other functions are registered, + the other functions can act before this _exit is invoked. + + Applications that use close_stdout should flush any streams other + than stdin, stdout, and stderr before exiting, since the call to + _exit will bypass other buffer flushing. Applications should be + flushing and closing other streams anyway, to check for I/O errors. + Also, applications should not use tmpfile, since _exit can bypass + the removal of these files. + + It's important to detect such failures and exit nonzero because many + tools (most notably `make' and other build-management systems) depend + on being able to detect failure in other tools via their exit status. */ + +void +close_stdin (void) +{ + bool fail = false; + + /* There is no need to flush stdin if we can determine quickly that stdin's + input buffer is empty; in this case we know that if stdin is seekable, + fseeko (stdin, 0, SEEK_CUR) == lseek (0, 0, SEEK_CUR). */ + if (freadahead (stdin) > 0) + { + /* Only attempt flush if stdin is seekable, as fflush is entitled to + fail on non-seekable streams. */ + if (fseeko (stdin, 0, SEEK_CUR) == 0 && fflush (stdin) != 0) + fail = true; + } + if (close_stream (stdin) != 0) + fail = true; + if (fail) + { + /* Report failure, but defer exit until after closing stdout, + since the failure report should still be flushed. */ + char const *close_error = _("error closing file"); + if (file_name) + error (0, errno, "%s: %s", quotearg_colon (file_name), + close_error); + else + error (0, errno, "%s", close_error); + } + + close_stdout (); + + if (fail) + _exit (exit_failure); +} diff --git a/coreseek/m4-1.4.13/lib/closein.h b/coreseek/m4-1.4.13/lib/closein.h new file mode 100644 index 0000000..837ead6 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/closein.h @@ -0,0 +1,32 @@ +/* Close standard input, rewinding seekable stdin if necessary. + + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_CLOSEIN_H +# define _GL_CLOSEIN_H 1 + +# ifdef __cplusplus +extern "C" { +# endif + +void close_stdin_set_file_name (const char *file); +void close_stdin (void); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/coreseek/m4-1.4.13/lib/closein.o b/coreseek/m4-1.4.13/lib/closein.o new file mode 100644 index 0000000..9f64c0c Binary files /dev/null and b/coreseek/m4-1.4.13/lib/closein.o differ diff --git a/coreseek/m4-1.4.13/lib/closeout.c b/coreseek/m4-1.4.13/lib/closeout.c new file mode 100644 index 0000000..6a0b82f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/closeout.c @@ -0,0 +1,124 @@ +/* Close standard output and standard error, exiting with a diagnostic on error. + + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2008 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "closeout.h" + +#include +#include +#include +#include + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +#include "close-stream.h" +#include "error.h" +#include "exitfail.h" +#include "quotearg.h" + +static const char *file_name; + +/* Set the file name to be reported in the event an error is detected + by close_stdout. */ +void +close_stdout_set_file_name (const char *file) +{ + file_name = file; +} + +static bool ignore_EPIPE /* = false */; + +/* Specify the reaction to an EPIPE error during the closing of stdout: + - If ignore = true, it shall be ignored. + - If ignore = false, it shall evoke a diagnostic, along with a nonzero + exit status. + The default is ignore = false. + + This setting matters only if the SIGPIPE signal is ignored (i.e. its + handler set to SIG_IGN) or blocked. Only particular programs need to + temporarily ignore SIGPIPE. If SIGPIPE is ignored or blocked because + it was ignored or blocked in the parent process when it created the + child process, it usually is a bug in the parent process: It is bad + practice to have SIGPIPE ignored or blocked while creating a child + process. + + EPIPE occurs when writing to a pipe or socket that has no readers now, + when SIGPIPE is ignored or blocked. + + The ignore = false setting is suitable for a scenario where it is normally + guaranteed that the pipe writer terminates before the pipe reader. In + this case, an EPIPE is an indication of a premature termination of the + pipe reader and should lead to a diagnostic and a nonzero exit status. + + The ignore = true setting is suitable for a scenario where you don't know + ahead of time whether the pipe writer or the pipe reader will terminate + first. In this case, an EPIPE is an indication that the pipe writer can + stop doing useless write() calls; this is what close_stdout does anyway. + EPIPE is part of the normal pipe/socket shutdown protocol in this case, + and should not lead to a diagnostic message. */ + +void +close_stdout_set_ignore_EPIPE (bool ignore) +{ + ignore_EPIPE = ignore; +} + +/* Close standard output. On error, issue a diagnostic and _exit + with status 'exit_failure'. + + Also close standard error. On error, _exit with status 'exit_failure'. + + Since close_stdout is commonly registered via 'atexit', POSIX + and the C standard both say that it should not call 'exit', + because the behavior is undefined if 'exit' is called more than + once. So it calls '_exit' instead of 'exit'. If close_stdout + is registered via atexit before other functions are registered, + the other functions can act before this _exit is invoked. + + Applications that use close_stdout should flush any streams + other than stdout and stderr before exiting, since the call to + _exit will bypass other buffer flushing. Applications should + be flushing and closing other streams anyway, to check for I/O + errors. Also, applications should not use tmpfile, since _exit + can bypass the removal of these files. + + It's important to detect such failures and exit nonzero because many + tools (most notably `make' and other build-management systems) depend + on being able to detect failure in other tools via their exit status. */ + +void +close_stdout (void) +{ + if (close_stream (stdout) != 0 + && !(ignore_EPIPE && errno == EPIPE)) + { + char const *write_error = _("write error"); + if (file_name) + error (0, errno, "%s: %s", quotearg_colon (file_name), + write_error); + else + error (0, errno, "%s", write_error); + + _exit (exit_failure); + } + + if (close_stream (stderr) != 0) + _exit (exit_failure); +} diff --git a/coreseek/m4-1.4.13/lib/closeout.h b/coreseek/m4-1.4.13/lib/closeout.h new file mode 100644 index 0000000..34e61ef --- /dev/null +++ b/coreseek/m4-1.4.13/lib/closeout.h @@ -0,0 +1,36 @@ +/* Close standard output and standard error. + + Copyright (C) 1998, 2000, 2003, 2004, 2006, 2008 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef CLOSEOUT_H +# define CLOSEOUT_H 1 + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +void close_stdout_set_file_name (const char *file); +void close_stdout_set_ignore_EPIPE (bool ignore); +void close_stdout (void); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/coreseek/m4-1.4.13/lib/closeout.o b/coreseek/m4-1.4.13/lib/closeout.o new file mode 100644 index 0000000..639612a Binary files /dev/null and b/coreseek/m4-1.4.13/lib/closeout.o differ diff --git a/coreseek/m4-1.4.13/lib/config.charset b/coreseek/m4-1.4.13/lib/config.charset new file mode 100755 index 0000000..7f91212 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/config.charset @@ -0,0 +1,683 @@ +#! /bin/sh +# Output a system dependent table of character encoding aliases. +# +# Copyright (C) 2000-2004, 2006-2009 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# The table consists of lines of the form +# ALIAS CANONICAL +# +# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". +# ALIAS is compared in a case sensitive way. +# +# CANONICAL is the GNU canonical name for this character encoding. +# It must be an encoding supported by libiconv. Support by GNU libc is +# also desirable. CANONICAL is case insensitive. Usually an upper case +# MIME charset name is preferred. +# The current list of GNU canonical charset names is as follows. +# +# name MIME? used by which systems +# ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin +# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-3 Y glibc solaris +# ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin +# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-6 Y glibc aix hpux solaris +# ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin +# ISO-8859-8 Y glibc aix hpux osf solaris +# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin +# ISO-8859-13 glibc netbsd openbsd darwin +# ISO-8859-14 glibc +# ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin +# KOI8-R Y glibc solaris freebsd netbsd openbsd darwin +# KOI8-U Y glibc freebsd netbsd openbsd darwin +# KOI8-T glibc +# CP437 dos +# CP775 dos +# CP850 aix osf dos +# CP852 dos +# CP855 dos +# CP856 aix +# CP857 dos +# CP861 dos +# CP862 dos +# CP864 dos +# CP865 dos +# CP866 freebsd netbsd openbsd darwin dos +# CP869 dos +# CP874 woe32 dos +# CP922 aix +# CP932 aix woe32 dos +# CP943 aix +# CP949 osf darwin woe32 dos +# CP950 woe32 dos +# CP1046 aix +# CP1124 aix +# CP1125 dos +# CP1129 aix +# CP1131 darwin +# CP1250 woe32 +# CP1251 glibc solaris netbsd openbsd darwin woe32 +# CP1252 aix woe32 +# CP1253 woe32 +# CP1254 woe32 +# CP1255 glibc woe32 +# CP1256 woe32 +# CP1257 woe32 +# GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin +# EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-TW glibc aix hpux irix osf solaris netbsd +# BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin +# BIG5-HKSCS glibc solaris darwin +# GBK glibc aix osf solaris darwin woe32 dos +# GB18030 glibc solaris netbsd darwin +# SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin +# JOHAB glibc solaris woe32 +# TIS-620 glibc aix hpux osf solaris +# VISCII Y glibc +# TCVN5712-1 glibc +# ARMSCII-8 glibc darwin +# GEORGIAN-PS glibc +# PT154 glibc +# HP-ROMAN8 hpux +# HP-ARABIC8 hpux +# HP-GREEK8 hpux +# HP-HEBREW8 hpux +# HP-TURKISH8 hpux +# HP-KANA8 hpux +# DEC-KANJI osf +# DEC-HANYU osf +# UTF-8 Y glibc aix hpux osf solaris netbsd darwin +# +# Note: Names which are not marked as being a MIME name should not be used in +# Internet protocols for information interchange (mail, news, etc.). +# +# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications +# must understand both names and treat them as equivalent. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM + +host="$1" +os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` +echo "# This file contains a table of character encoding aliases," +echo "# suitable for operating system '${os}'." +echo "# It was automatically generated from config.charset." +# List of references, updated during installation: +echo "# Packages using this file: " +case "$os" in + linux-gnulibc1*) + # Linux libc5 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + echo "POSIX ASCII" + for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ + en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ + en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ + es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ + et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ + fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ + it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ + sv_FI sv_SE; do + echo "$l ISO-8859-1" + echo "$l.iso-8859-1 ISO-8859-1" + echo "$l.iso-8859-15 ISO-8859-15" + echo "$l.iso-8859-15@euro ISO-8859-15" + echo "$l@euro ISO-8859-15" + echo "$l.cp-437 CP437" + echo "$l.cp-850 CP850" + echo "$l.cp-1252 CP1252" + echo "$l.cp-1252@euro CP1252" + #echo "$l.atari-st ATARI-ST" # not a commonly used encoding + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ + sl_SI sr sr_CS sr_YU; do + echo "$l ISO-8859-2" + echo "$l.iso-8859-2 ISO-8859-2" + echo "$l.cp-852 CP852" + echo "$l.cp-1250 CP1250" + echo "$l.utf-8 UTF-8" + done + for l in mk mk_MK ru ru_RU; do + echo "$l ISO-8859-5" + echo "$l.iso-8859-5 ISO-8859-5" + echo "$l.koi8-r KOI8-R" + echo "$l.cp-866 CP866" + echo "$l.cp-1251 CP1251" + echo "$l.utf-8 UTF-8" + done + for l in ar ar_SA; do + echo "$l ISO-8859-6" + echo "$l.iso-8859-6 ISO-8859-6" + echo "$l.cp-864 CP864" + #echo "$l.cp-868 CP868" # not a commonly used encoding + echo "$l.cp-1256 CP1256" + echo "$l.utf-8 UTF-8" + done + for l in el el_GR gr gr_GR; do + echo "$l ISO-8859-7" + echo "$l.iso-8859-7 ISO-8859-7" + echo "$l.cp-869 CP869" + echo "$l.cp-1253 CP1253" + echo "$l.cp-1253@euro CP1253" + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in he he_IL iw iw_IL; do + echo "$l ISO-8859-8" + echo "$l.iso-8859-8 ISO-8859-8" + echo "$l.cp-862 CP862" + echo "$l.cp-1255 CP1255" + echo "$l.utf-8 UTF-8" + done + for l in tr tr_TR; do + echo "$l ISO-8859-9" + echo "$l.iso-8859-9 ISO-8859-9" + echo "$l.cp-857 CP857" + echo "$l.cp-1254 CP1254" + echo "$l.utf-8 UTF-8" + done + for l in lt lt_LT lv lv_LV; do + #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name + echo "$l ISO-8859-13" + done + for l in ru_UA uk uk_UA; do + echo "$l KOI8-U" + done + for l in zh zh_CN; do + #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name + echo "$l GB2312" + done + for l in ja ja_JP ja_JP.EUC; do + echo "$l EUC-JP" + done + for l in ko ko_KR; do + echo "$l EUC-KR" + done + for l in th th_TH; do + echo "$l TIS-620" + done + for l in fa fa_IR; do + #echo "$l ISIRI-3342" # a broken encoding + echo "$l.utf-8 UTF-8" + done + ;; + linux* | *-gnu*) + # With glibc-2.1 or newer, we don't need any canonicalization, + # because glibc has iconv and both glibc and libiconv support all + # GNU canonical names directly. Therefore, the Makefile does not + # need to install the alias file at all. + # The following applies only to glibc-2.0.x and older libcs. + echo "ISO_646.IRV:1983 ASCII" + ;; + aix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "IBM-850 CP850" + echo "IBM-856 CP856" + echo "IBM-921 ISO-8859-13" + echo "IBM-922 CP922" + echo "IBM-932 CP932" + echo "IBM-943 CP943" + echo "IBM-1046 CP1046" + echo "IBM-1124 CP1124" + echo "IBM-1129 CP1129" + echo "IBM-1252 CP1252" + echo "IBM-eucCN GB2312" + echo "IBM-eucJP EUC-JP" + echo "IBM-eucKR EUC-KR" + echo "IBM-eucTW EUC-TW" + echo "big5 BIG5" + echo "GBK GBK" + echo "TIS-620 TIS-620" + echo "UTF-8 UTF-8" + ;; + hpux*) + echo "iso88591 ISO-8859-1" + echo "iso88592 ISO-8859-2" + echo "iso88595 ISO-8859-5" + echo "iso88596 ISO-8859-6" + echo "iso88597 ISO-8859-7" + echo "iso88598 ISO-8859-8" + echo "iso88599 ISO-8859-9" + echo "iso885915 ISO-8859-15" + echo "roman8 HP-ROMAN8" + echo "arabic8 HP-ARABIC8" + echo "greek8 HP-GREEK8" + echo "hebrew8 HP-HEBREW8" + echo "turkish8 HP-TURKISH8" + echo "kana8 HP-KANA8" + echo "tis620 TIS-620" + echo "big5 BIG5" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "hp15CN GB2312" + #echo "ccdc ?" # what is this? + echo "SJIS SHIFT_JIS" + echo "utf8 UTF-8" + ;; + irix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + ;; + osf*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "cp850 CP850" + echo "big5 BIG5" + echo "dechanyu DEC-HANYU" + echo "dechanzi GB2312" + echo "deckanji DEC-KANJI" + echo "deckorean EUC-KR" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "GBK GBK" + echo "KSC5601 CP949" + echo "sdeckanji EUC-JP" + echo "SJIS SHIFT_JIS" + echo "TACTIS TIS-620" + echo "UTF-8 UTF-8" + ;; + solaris*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-3 ISO-8859-3" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "koi8-r KOI8-R" + echo "ansi-1251 CP1251" + echo "BIG5 BIG5" + echo "Big5-HKSCS BIG5-HKSCS" + echo "gb2312 GB2312" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "cns11643 EUC-TW" + echo "5601 EUC-KR" + echo "ko_KR.johap92 JOHAB" + echo "eucJP EUC-JP" + echo "PCK SHIFT_JIS" + echo "TIS620.2533 TIS-620" + #echo "sun_eu_greek ?" # what is this? + echo "UTF-8 UTF-8" + ;; + freebsd* | os2*) + # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just + # reuse FreeBSD's locale data for OS/2. + echo "C ASCII" + echo "US-ASCII ASCII" + for l in la_LN lt_LN; do + echo "$l.ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ + lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do + echo "$l.ISO_8859-1 ISO-8859-1" + echo "$l.DIS_8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do + echo "$l.ISO_8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO_8859-4 ISO-8859-4" + done + for l in ru_RU ru_SU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO_8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ja_JP.Shift_JIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + netbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "BIG5 BIG5" + echo "SJIS SHIFT_JIS" + ;; + openbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + ;; + darwin[56]*) + # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + for l in en_AU en_CA en_GB en_US la_LN; do + echo "$l.US-ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ + nl_NL no_NO pt_PT sv_SE; do + echo "$l ISO-8859-1" + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in la_LN; do + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do + echo "$l.ISO8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO8859-4 ISO-8859-4" + done + for l in ru_RU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + for l in bg_BG; do + echo "$l.CP1251 CP1251" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + darwin*) + # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is + # useless: + # - It returns the empty string when LANG is set to a locale of the + # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + # LC_CTYPE file. + # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + # - The documentation says: + # "... all code that calls BSD system routines should ensure + # that the const *char parameters of these routines are in UTF-8 + # encoding. All BSD system functions expect their string + # parameters to be in UTF-8 encoding and nothing else." + # It also says + # "An additional caveat is that string parameters for files, + # paths, and other file-system entities must be in canonical + # UTF-8. In a canonical UTF-8 Unicode string, all decomposable + # characters are decomposed ..." + # but this is not true: You can pass non-decomposed UTF-8 strings + # to file system functions, and it is the OS which will convert + # them to decomposed UTF-8 before accessing the file system. + # - The Apple Terminal application displays UTF-8 by default. + # - However, other applications are free to use different encodings: + # - xterm uses ISO-8859-1 by default. + # - TextEdit uses MacRoman by default. + # We prefer UTF-8 over decomposed UTF-8-MAC because one should + # minimize the use of decomposed Unicode. Unfortunately, through the + # Darwin file system, decomposed UTF-8 strings are leaked into user + # space nevertheless. + # Then there are also the locales with encodings other than US-ASCII + # and UTF-8. These locales can be occasionally useful to users (e.g. + # when grepping through ISO-8859-1 encoded text files), when all their + # file names are in US-ASCII. + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "KOI8-R KOI8-R" + echo "KOI8-U KOI8-U" + echo "CP866 CP866" + echo "CP949 CP949" + echo "CP1131 CP1131" + echo "CP1251 CP1251" + echo "eucCN GB2312" + echo "GB2312 GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "Big5 BIG5" + echo "Big5HKSCS BIG5-HKSCS" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "SJIS SHIFT_JIS" + echo "ARMSCII-8 ARMSCII-8" + echo "PT154 PT154" + #echo "ISCII-DEV ?" + echo "* UTF-8" + ;; + beos* | haiku*) + # BeOS and Haiku have a single locale, and it has UTF-8 encoding. + echo "* UTF-8" + ;; + msdosdjgpp*) + # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "#" + echo "# The encodings given here may not all be correct." + echo "# If you find that the encoding given for your language and" + echo "# country is not the one your DOS machine actually uses, just" + echo "# correct it in this file, and send a mail to" + echo "# Juan Manuel Guerrero " + echo "# and Bruno Haible ." + echo "#" + echo "C ASCII" + # ISO-8859-1 languages + echo "ca CP850" + echo "ca_ES CP850" + echo "da CP865" # not CP850 ?? + echo "da_DK CP865" # not CP850 ?? + echo "de CP850" + echo "de_AT CP850" + echo "de_CH CP850" + echo "de_DE CP850" + echo "en CP850" + echo "en_AU CP850" # not CP437 ?? + echo "en_CA CP850" + echo "en_GB CP850" + echo "en_NZ CP437" + echo "en_US CP437" + echo "en_ZA CP850" # not CP437 ?? + echo "es CP850" + echo "es_AR CP850" + echo "es_BO CP850" + echo "es_CL CP850" + echo "es_CO CP850" + echo "es_CR CP850" + echo "es_CU CP850" + echo "es_DO CP850" + echo "es_EC CP850" + echo "es_ES CP850" + echo "es_GT CP850" + echo "es_HN CP850" + echo "es_MX CP850" + echo "es_NI CP850" + echo "es_PA CP850" + echo "es_PY CP850" + echo "es_PE CP850" + echo "es_SV CP850" + echo "es_UY CP850" + echo "es_VE CP850" + echo "et CP850" + echo "et_EE CP850" + echo "eu CP850" + echo "eu_ES CP850" + echo "fi CP850" + echo "fi_FI CP850" + echo "fr CP850" + echo "fr_BE CP850" + echo "fr_CA CP850" + echo "fr_CH CP850" + echo "fr_FR CP850" + echo "ga CP850" + echo "ga_IE CP850" + echo "gd CP850" + echo "gd_GB CP850" + echo "gl CP850" + echo "gl_ES CP850" + echo "id CP850" # not CP437 ?? + echo "id_ID CP850" # not CP437 ?? + echo "is CP861" # not CP850 ?? + echo "is_IS CP861" # not CP850 ?? + echo "it CP850" + echo "it_CH CP850" + echo "it_IT CP850" + echo "lt CP775" + echo "lt_LT CP775" + echo "lv CP775" + echo "lv_LV CP775" + echo "nb CP865" # not CP850 ?? + echo "nb_NO CP865" # not CP850 ?? + echo "nl CP850" + echo "nl_BE CP850" + echo "nl_NL CP850" + echo "nn CP865" # not CP850 ?? + echo "nn_NO CP865" # not CP850 ?? + echo "no CP865" # not CP850 ?? + echo "no_NO CP865" # not CP850 ?? + echo "pt CP850" + echo "pt_BR CP850" + echo "pt_PT CP850" + echo "sv CP850" + echo "sv_SE CP850" + # ISO-8859-2 languages + echo "cs CP852" + echo "cs_CZ CP852" + echo "hr CP852" + echo "hr_HR CP852" + echo "hu CP852" + echo "hu_HU CP852" + echo "pl CP852" + echo "pl_PL CP852" + echo "ro CP852" + echo "ro_RO CP852" + echo "sk CP852" + echo "sk_SK CP852" + echo "sl CP852" + echo "sl_SI CP852" + echo "sq CP852" + echo "sq_AL CP852" + echo "sr CP852" # CP852 or CP866 or CP855 ?? + echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? + echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? + # ISO-8859-3 languages + echo "mt CP850" + echo "mt_MT CP850" + # ISO-8859-5 languages + echo "be CP866" + echo "be_BE CP866" + echo "bg CP866" # not CP855 ?? + echo "bg_BG CP866" # not CP855 ?? + echo "mk CP866" # not CP855 ?? + echo "mk_MK CP866" # not CP855 ?? + echo "ru CP866" + echo "ru_RU CP866" + echo "uk CP1125" + echo "uk_UA CP1125" + # ISO-8859-6 languages + echo "ar CP864" + echo "ar_AE CP864" + echo "ar_DZ CP864" + echo "ar_EG CP864" + echo "ar_IQ CP864" + echo "ar_IR CP864" + echo "ar_JO CP864" + echo "ar_KW CP864" + echo "ar_MA CP864" + echo "ar_OM CP864" + echo "ar_QA CP864" + echo "ar_SA CP864" + echo "ar_SY CP864" + # ISO-8859-7 languages + echo "el CP869" + echo "el_GR CP869" + # ISO-8859-8 languages + echo "he CP862" + echo "he_IL CP862" + # ISO-8859-9 languages + echo "tr CP857" + echo "tr_TR CP857" + # Japanese + echo "ja CP932" + echo "ja_JP CP932" + # Chinese + echo "zh_CN GBK" + echo "zh_TW CP950" # not CP938 ?? + # Korean + echo "kr CP949" # not CP934 ?? + echo "kr_KR CP949" # not CP934 ?? + # Thai + echo "th CP874" + echo "th_TH CP874" + # Other + echo "eo CP850" + echo "eo_EO CP850" + ;; +esac diff --git a/coreseek/m4-1.4.13/lib/config.h b/coreseek/m4-1.4.13/lib/config.h new file mode 100644 index 0000000..01d5985 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/config.h @@ -0,0 +1,1061 @@ +/* lib/config.h. Generated from config.hin by configure. */ +/* lib/config.hin. Generated from configure.ac by autoheader. */ + +/* Define if the compiler is building for multiple architectures of Apple + platforms at once. */ +/* #undef AA_APPLE_UNIVERSAL_BUILD */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* Define to the number of bits in type 'ptrdiff_t'. */ +/* #undef BITSIZEOF_PTRDIFF_T */ + +/* Define to the number of bits in type 'sig_atomic_t'. */ +/* #undef BITSIZEOF_SIG_ATOMIC_T */ + +/* Define to the number of bits in type 'size_t'. */ +/* #undef BITSIZEOF_SIZE_T */ + +/* Define to the number of bits in type 'wchar_t'. */ +/* #undef BITSIZEOF_WCHAR_T */ + +/* Define to the number of bits in type 'wint_t'. */ +/* #undef BITSIZEOF_WINT_T */ + +/* Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values. */ +#define CHECK_PRINTF_SAFE 1 + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +/* #undef CRAY_STACKSEG_END */ + +/* Define to 1 if using `alloca.c'. */ +/* #undef C_ALLOCA */ + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'double'. */ +#define DBL_EXPBIT0_BIT 20 + +/* Define as the word index where to find the exponent of 'double'. */ +#define DBL_EXPBIT0_WORD 1 + +/* Define as the bit index in the word where to find the sign of 'double'. */ +/* #undef DBL_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'double'. */ +/* #undef DBL_SIGNBIT_WORD */ + +/* Define to 1 if // is a file system root distinct from /. */ +/* #undef DOUBLE_SLASH_IS_DISTINCT_ROOT */ + +/* Define to 1 if the changeword(REGEXP) functionality is wanted */ +/* #undef ENABLE_CHANGEWORD */ + +/* Define to 1 if an invalid memory address access may yield a SIGBUS. */ +#define FAULT_YIELDS_SIGBUS 0 + +/* Define on systems for which file names may have a so-called `drive letter' + prefix, define this to compute the length of that prefix, including the + colon. */ +#define FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0 + +/* Define if the backslash character may also serve as a file name component + separator. */ +#define FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0 + +/* Define if a drive letter prefix denotes a relative path if it is not + followed by a file name component separator. */ +#define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'float'. */ +#define FLT_EXPBIT0_BIT 23 + +/* Define as the word index where to find the exponent of 'float'. */ +#define FLT_EXPBIT0_WORD 0 + +/* Define as the bit index in the word where to find the sign of 'float'. */ +/* #undef FLT_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'float'. */ +/* #undef FLT_SIGNBIT_WORD */ + +/* Define to 1 if fopen() fails to recognize a trailing slash. */ +/* #undef FOPEN_TRAILING_SLASH_BUG */ + +/* Define to 1 if ungetc is broken when used on arbitrary bytes. */ +/* #undef FUNC_UNGETC_BROKEN */ + +/* Define if gettimeofday clobbers the localtime buffer. */ +/* #undef GETTIMEOFDAY_CLOBBERS_LOCALTIME */ + +/* Define to 1 when using the gnulib module close-stream. */ +#define GNULIB_CLOSE_STREAM 1 + +/* Define to 1 when using the gnulib module fopen-safer. */ +#define GNULIB_FOPEN_SAFER 1 + +/* Define to indicate the 'malloc' module. */ +#define GNULIB_MALLOC_GNU 1 + +/* Define to 1 when using the gnulib module open. */ +#define GNULIB_OPEN 1 + +/* Define to 1 if you have 'alloca' after including , a header that + may be supplied by this distribution. */ +#define HAVE_ALLOCA 1 + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#define HAVE_ALLOCA_H 1 + +/* Define to 1 if you have the `btowc' function. */ +#define HAVE_BTOWC 1 + +/* Define to 1 if you have the `confstr' function. */ +/* #undef HAVE_CONFSTR */ + +/* Define if the copysignf function is declared in and available in + libc. */ +/* #undef HAVE_COPYSIGNF_IN_LIBC */ + +/* Define if the copysignl function is declared in and available in + libc. */ +/* #undef HAVE_COPYSIGNL_IN_LIBC */ + +/* Define if the copysign function is declared in and available in + libc. */ +/* #undef HAVE_COPYSIGN_IN_LIBC */ + +/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. + */ +#define HAVE_DECL_ALARM 1 + +/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_CLEARERR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `copysign', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGN */ + +/* Define to 1 if you have the declaration of `copysignf', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGNF */ + +/* Define to 1 if you have the declaration of `copysignl', and to 0 if you + don't. */ +/* #undef HAVE_DECL_COPYSIGNL */ + +/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_FEOF_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FERROR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FFLUSH_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FGETS_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fpurge', and to 0 if you don't. + */ +#define HAVE_DECL_FPURGE 0 + +/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FPUTC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FPUTS_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FREAD_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_FWRITE_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_GETCHAR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_GETC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't. + */ +#define HAVE_DECL_GETENV 1 + +/* Define to 1 if you have the declaration of `isblank', and to 0 if you + don't. */ +#define HAVE_DECL_ISBLANK 1 + +/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if + you don't. */ +#define HAVE_DECL_PUTCHAR_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you + don't. */ +#define HAVE_DECL_PUTC_UNLOCKED 1 + +/* Define to 1 if you have the declaration of `sigaltstack', and to 0 if you + don't. */ +#define HAVE_DECL_SIGALTSTACK 1 + +/* Define to 1 if you have the declaration of `snprintf', and to 0 if you + don't. */ +#define HAVE_DECL_SNPRINTF 1 + +/* Define to 1 if you have the declaration of `strerror', and to 0 if you + don't. */ +/* #undef HAVE_DECL_STRERROR */ + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#define HAVE_DECL_STRERROR_R 1 + +/* Define to 1 if you have the declaration of `strndup', and to 0 if you + don't. */ +#define HAVE_DECL_STRNDUP 1 + +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#define HAVE_DECL_STRNLEN 1 + +/* Define to 1 if you have the declaration of `strsignal', and to 0 if you + don't. */ +#define HAVE_DECL_STRSIGNAL 1 + +/* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you + don't. */ +#define HAVE_DECL_SYS_SIGLIST 1 + +/* Define to 1 if you have the declaration of `wctob', and to 0 if you don't. + */ +#define HAVE_DECL_WCTOB 1 + +/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ +#define HAVE_DECL__SNPRINTF 0 + +/* Define to 1 if you have the declaration of `_sys_siglist', and to 0 if you + don't. */ +/* #undef HAVE_DECL__SYS_SIGLIST */ + +/* Define to 1 if you have the declaration of `__fpending', and to 0 if you + don't. */ +#define HAVE_DECL___FPENDING 1 + +/* Define if you have the declaration of environ. */ +#define HAVE_ENVIRON_DECL 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FLOAT_H 1 + +/* Define to 1 if you have the `fpurge' function. */ +/* #undef HAVE_FPURGE */ + +/* Define if the frexpl function is available in libc. */ +#define HAVE_FREXPL_IN_LIBC 1 + +/* Define if the frexp function is available in libc. */ +#define HAVE_FREXP_IN_LIBC 1 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#define HAVE_FSEEKO 1 + +/* Define to 1 if you have the `getdtablesize' function. */ +#define HAVE_GETDTABLESIZE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_GETOPT_H 1 + +/* Define to 1 if you have the `getopt_long_only' function. */ +#define HAVE_GETOPT_LONG_ONLY 1 + +/* Define to 1 if you have the `gettimeofday' function. */ +#define HAVE_GETTIMEOFDAY 1 + +/* Define to 1 if the compiler supports one of the keywords 'inline', + '__inline__', '__inline' and effectively inlines functions marked as such. + */ +#define HAVE_INLINE 1 + +/* Define if you have the 'intmax_t' type in or . */ +#define HAVE_INTMAX_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if exists, doesn't clash with , and + declares uintmax_t. */ +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 + +/* Define to 1 if you have the `isblank' function. */ +#define HAVE_ISBLANK 1 + +/* Define if the isnan(double) function is available in libc. */ +#define HAVE_ISNAND_IN_LIBC 1 + +/* Define if the isnan(float) function is available in libc. */ +#define HAVE_ISNANF_IN_LIBC 1 + +/* Define if the isnan(long double) function is available in libc. */ +/* #undef HAVE_ISNANL_IN_LIBC */ + +/* Define to 1 if you have the `iswcntrl' function. */ +#define HAVE_ISWCNTRL 1 + +/* Define to 1 if you have the `iswctype' function. */ +#define HAVE_ISWCTYPE 1 + +/* Define if you have and nl_langinfo(CODESET). */ +#define HAVE_LANGINFO_CODESET 1 + +/* Define if the ldexpl function is available in libc. */ +#define HAVE_LDEXPL_IN_LIBC 1 + +/* Define if the ldexp function is available in libc. */ +#define HAVE_LDEXP_IN_LIBC 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_LIBINTL_H 1 + +/* Define if you have the libsigsegv library. */ +/* #undef HAVE_LIBSIGSEGV */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LOCALE_H 1 + +/* Define to 1 if the system has the type `long long int'. */ +#define HAVE_LONG_LONG_INT 1 + +/* Define to 1 if you have the `lstat' function. */ +#define HAVE_LSTAT 1 + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#define HAVE_MALLOC 1 + +/* Define if the 'malloc' function is POSIX compliant. */ +#define HAVE_MALLOC_POSIX 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MATH_H 1 + +/* Define to 1 if you have the `mbrtowc' function. */ +#define HAVE_MBRTOWC 1 + +/* Define to 1 if you have the `mbsinit' function. */ +#define HAVE_MBSINIT 1 + +/* Define to 1 if declares mbstate_t. */ +#define HAVE_MBSTATE_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `mempcpy' function. */ +#define HAVE_MEMPCPY 1 + +/* Define to 1 if you have the `mkdtemp' function. */ +#define HAVE_MKDTEMP 1 + +/* Define to 1 if you have the `nl_langinfo' function. */ +/* #undef HAVE_NL_LANGINFO */ + +/* Define to 1 if libc includes obstacks. */ +#define HAVE_OBSTACK 1 + +/* Define to 1 if you have the `pathconf' function. */ +#define HAVE_PATHCONF 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_PATHS_H */ + +/* Define to 1 if you have the `pipe' function. */ +#define HAVE_PIPE 1 + +/* Define to 1 if you have the `posix_spawn' function. */ +#define HAVE_POSIX_SPAWN 1 + +/* Define if the defines PTHREAD_MUTEX_RECURSIVE. */ +/* #undef HAVE_PTHREAD_MUTEX_RECURSIVE */ + +/* Define if the POSIX multithreading library has read/write locks. */ +/* #undef HAVE_PTHREAD_RWLOCK */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_RANDOM_H */ + +/* Define to 1 if you have the `rawmemchr' function. */ +#define HAVE_RAWMEMCHR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SCHED_H 1 + +/* Define to 1 if you have the `sched_setparam' function. */ +/* #undef HAVE_SCHED_SETPARAM */ + +/* Define to 1 if you have the `sched_setscheduler' function. */ +/* #undef HAVE_SCHED_SETSCHEDULER */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SEARCH_H */ + +/* Define to 1 if you have the `setegid' function. */ +/* #undef HAVE_SETEGID */ + +/* Define to 1 if you have the `setenv' function. */ +#define HAVE_SETENV 1 + +/* Define to 1 if you have the `seteuid' function. */ +/* #undef HAVE_SETEUID */ + +/* Define to 1 if you have the `setrlimit' function. */ +#define HAVE_SETRLIMIT 1 + +/* Define to 1 if you have the `sigaction' function. */ +#define HAVE_SIGACTION 1 + +/* Define to 1 if you have the `sigaltstack' function. */ +#define HAVE_SIGALTSTACK 1 + +/* Define to 1 if the system has the type `siginfo_t'. */ +/* #undef HAVE_SIGINFO_T */ + +/* Define to 1 if you have the `siginterrupt' function. */ +#define HAVE_SIGINTERRUPT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SIGNAL_H 1 + +/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_SIG_ATOMIC_T */ + +/* Define to 1 if 'wchar_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_WCHAR_T */ + +/* Define to 1 if 'wint_t' is a signed integer type. */ +/* #undef HAVE_SIGNED_WINT_T */ + +/* Define to 1 if the system has the type `sigset_t'. */ +/* #undef HAVE_SIGSET_T */ + +/* Define to 1 if the system has the type `sig_atomic_t'. */ +#define HAVE_SIG_ATOMIC_T 1 + +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SPAWN_H 1 + +/* Define to 1 if extending the stack slightly past the limit causes a SIGSEGV + which can be handled on an alternate stack established with sigaltstack. */ +#define HAVE_STACK_OVERFLOW_HANDLING 1 + +/* Define to 1 if the system has the type `stack_t'. */ +#define HAVE_STACK_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define to 1 if stdbool.h conforms to C99. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define if exists, doesn't clash with , and declares + uintmax_t. */ +#define HAVE_STDINT_H_WITH_UINTMAX 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_EXT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strchrnul' function. */ +#define HAVE_STRCHRNUL 1 + +/* Define to 1 if you have the `strerror_r' function. */ +#define HAVE_STRERROR_R 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the strndup() function and it works. */ +#define HAVE_STRNDUP 1 + +/* Define to 1 if you have the `strnlen' function. */ +#define HAVE_STRNLEN 1 + +/* Define to 1 if you have the `strsignal' function. */ +#define HAVE_STRSIGNAL 1 + +/* Define to 1 if you have the `strtol' function. */ +#define HAVE_STRTOL 1 + +/* Define to 1 if the system has the type `struct random_data'. */ +#define HAVE_STRUCT_RANDOM_DATA 1 + +/* Define to 1 if `struct sigaction' is a member of `sa_sigaction'. */ +#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_BITYPES_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_INTTYPES_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_SOCKET_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_TIMEB_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TIME_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the `tsearch' function. */ +/* #undef HAVE_TSEARCH */ + +/* Define to 1 if you have the header file. */ +#define HAVE_UCONTEXT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `unsetenv' function. */ +#define HAVE_UNSETENV 1 + +/* Define to 1 if the system has the type `unsigned long long int'. */ +#define HAVE_UNSIGNED_LONG_LONG_INT 1 + +/* Define to 1 if you have the `vasnprintf' function. */ +/* #undef HAVE_VASNPRINTF */ + +/* Define to 1 if you have the `vasprintf' function. */ +#define HAVE_VASPRINTF 1 + +/* Define to 1 if you have the `vfork' function. */ +/* #undef HAVE_VFORK */ + +/* Define to 1 if you have the `waitid' function. */ +#define HAVE_WAITID 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WCHAR_H 1 + +/* Define if you have the 'wchar_t' type. */ +#define HAVE_WCHAR_T 1 + +/* Define to 1 if you have the `wcrtomb' function. */ +#define HAVE_WCRTOMB 1 + +/* Define to 1 if you have the `wcscoll' function. */ +#define HAVE_WCSCOLL 1 + +/* Define to 1 if you have the `wcslen' function. */ +#define HAVE_WCSLEN 1 + +/* Define to 1 if you have the `wcsnlen' function. */ +#define HAVE_WCSNLEN 1 + +/* Define to 1 if you have the `wctob' function. */ +#define HAVE_WCTOB 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WCTYPE_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WINSOCK2_H */ + +/* Define if you have the 'wint_t' type. */ +#define HAVE_WINT_T 1 + +/* Define to 1 if O_NOATIME works. */ +#define HAVE_WORKING_O_NOATIME 1 + +/* Define to 1 if O_NOFOLLOW works. */ +#define HAVE_WORKING_O_NOFOLLOW 1 + +/* Define to 1 if extending the stack slightly past the limit causes a + SIGSEGV, and an alternate stack can be established with sigaltstack, and + the signal handler is passed a context that specifies the run time stack. + This behavior is defined by POSIX 1003.1-2001 with the X/Open System + Interface (XSI) option and is a standardized way to implement a SEGV-based + stack overflow detection heuristic. */ +/* #undef HAVE_XSI_STACK_OVERFLOW_HEURISTIC */ + +/* Define to 1 if the system has the type `_Bool'. */ +#define HAVE__BOOL 1 + +/* Define to 1 if you have the `_ftime' function. */ +/* #undef HAVE__FTIME */ + +/* Define to 1 if you have the `__fpending' function. */ +#define HAVE___FPENDING 1 + +/* Define to 1 if you have the `__fpurge' function. */ +#define HAVE___FPURGE 1 + +/* Define to 1 if you have the `__freading' function. */ +#define HAVE___FREADING 1 + +/* Define to 1 if you have the `__secure_getenv' function. */ +#define HAVE___SECURE_GETENV 1 + +#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else +# define ISSLASH(C) ((C) == '/') +#endif + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'long double'. */ +#define LDBL_EXPBIT0_BIT 0 + +/* Define as the word index where to find the exponent of 'long double'. */ +#define LDBL_EXPBIT0_WORD 2 + +/* Define as the bit index in the word where to find the sign of 'long + double'. */ +/* #undef LDBL_SIGNBIT_BIT */ + +/* Define as the word index where to find the sign of 'long double'. */ +/* #undef LDBL_SIGNBIT_WORD */ + +/* Define to 1 if lseek does not detect pipes. */ +/* #undef LSEEK_PIPE_BROKEN */ + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 + +/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ +#define MALLOC_0_IS_NONNULL 1 + +/* Define if the mbrtowc function has the NULL string argument bug. */ +/* #undef MBRTOWC_NULL_ARG_BUG */ + +/* Define if the mbrtowc function does not return 0 for a NUL character. */ +/* #undef MBRTOWC_NUL_RETVAL_BUG */ + +/* Define if the mbrtowc function returns a wrong return value. */ +/* #undef MBRTOWC_RETVAL_BUG */ + +/* Define to 1 if assertions should be disabled. */ +/* #undef NDEBUG */ + +/* Define if the vasnprintf implementation needs special code for the 'a' and + 'A' directives. */ +/* #undef NEED_PRINTF_DIRECTIVE_A */ + +/* Define if the vasnprintf implementation needs special code for the 'F' + directive. */ +/* #undef NEED_PRINTF_DIRECTIVE_F */ + +/* Define if the vasnprintf implementation needs special code for the 'ls' + directive. */ +/* #undef NEED_PRINTF_DIRECTIVE_LS */ + +/* Define if the vasnprintf implementation needs special code for 'double' + arguments. */ +/* #undef NEED_PRINTF_DOUBLE */ + +/* Define if the vasnprintf implementation needs special code for surviving + out-of-memory conditions. */ +/* #undef NEED_PRINTF_ENOMEM */ + +/* Define if the vasnprintf implementation needs special code for the ' flag. + */ +/* #undef NEED_PRINTF_FLAG_GROUPING */ + +/* Define if the vasnprintf implementation needs special code for the '-' + flag. */ +/* #undef NEED_PRINTF_FLAG_LEFTADJUST */ + +/* Define if the vasnprintf implementation needs special code for the 0 flag. + */ +/* #undef NEED_PRINTF_FLAG_ZERO */ + +/* Define if the vasnprintf implementation needs special code for infinite + 'double' arguments. */ +/* #undef NEED_PRINTF_INFINITE_DOUBLE */ + +/* Define if the vasnprintf implementation needs special code for infinite + 'long double' arguments. */ +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 + +/* Define if the vasnprintf implementation needs special code for 'long + double' arguments. */ +/* #undef NEED_PRINTF_LONG_DOUBLE */ + +/* Define if the vasnprintf implementation needs special code for supporting + large precisions without arbitrary bounds. */ +/* #undef NEED_PRINTF_UNBOUNDED_PRECISION */ + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Define to 1 if open() fails to recognize a trailing slash. */ +/* #undef OPEN_TRAILING_SLASH_BUG */ + +/* Name of package */ +#define PACKAGE "m4" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "bug-m4@gnu.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "GNU M4" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "GNU M4 1.4.13" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "m4" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "http://www.gnu.org/software/m4/" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "1.4.13" + +/* the number of pending output bytes on stream `fp' */ +/* #undef PENDING_OUTPUT_N_BYTES */ + +/* Define if the pthread_in_use() detection is hard. */ +/* #undef PTHREAD_IN_USE_DETECTION_HARD */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +/* #undef PTRDIFF_T_SUFFIX */ + +/* Define to 1 if a file can be renamed while open, or to 0 if not. */ +#define RENAME_OPEN_FILE_WORKS 1 + +/* Define this to 1 if strerror is broken. */ +/* #undef REPLACE_STRERROR */ + +/* Define if vasnprintf exists but is overridden by gnulib. */ +/* #undef REPLACE_VASNPRINTF */ + +/* Define if sigaltstack() interprets the stack_t.ss_sp field incorrectly, as + the highest address of the alternate stack range rather than as the lowest + address. */ +/* #undef SIGALTSTACK_SS_REVERSED */ + +/* Define if lists must be signal-safe. */ +#define SIGNAL_SAFE_LIST 1 + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +/* #undef SIG_ATOMIC_T_SUFFIX */ + +/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +/* #undef SIZE_MAX */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'size_t'. */ +/* #undef SIZE_T_SUFFIX */ + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +/* #undef STACK_DIRECTION */ + +/* Define to 1 if the `S_IS*' macros in do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Define to 1 if strerror_r returns char *. */ +#define STRERROR_R_CHAR_P 1 + +/* Shell used by syscmd and esyscmd, must accept -c argument. */ +#define SYSCMD_SHELL "/bin/sh" + +/* Define if the POSIX multithreading library can be used. */ +/* #undef USE_POSIX_THREADS */ + +/* Define if references to the POSIX multithreading library should be made + weak. */ +/* #undef USE_POSIX_THREADS_WEAK */ + +/* Define if the GNU Pth multithreading library can be used. */ +/* #undef USE_PTH_THREADS */ + +/* Define if references to the GNU Pth multithreading library should be made + weak. */ +/* #undef USE_PTH_THREADS_WEAK */ + +/* Define if the old Solaris multithreading library can be used. */ +/* #undef USE_SOLARIS_THREADS */ + +/* Define if references to the old Solaris multithreading library should be + made weak. */ +/* #undef USE_SOLARIS_THREADS_WEAK */ + +/* Define to 1 if you want getc etc. to use unlocked I/O if available. + Unlocked I/O can improve performance in unithreaded apps, but it is not + safe for multithreaded apps. */ +#define USE_UNLOCKED_IO 1 + +/* Define if the Win32 multithreading API can be used. */ +/* #undef USE_WIN32_THREADS */ + +/* Version number of package */ +#define VERSION "1.4.13" + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wchar_t'. */ +/* #undef WCHAR_T_SUFFIX */ + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wint_t'. */ +/* #undef WINT_T_SUFFIX */ + +/* Define to 1 if malloc debugging is enabled */ +/* #undef WITH_DMALLOC */ + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +/* # undef WORDS_BIGENDIAN */ +# endif +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +/* #undef _LARGEFILE_SOURCE */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ + +/* Define to 1 if on MINIX. */ +/* #undef _MINIX */ + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +/* #undef _POSIX_1_SOURCE */ + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +/* #undef _POSIX_SOURCE */ + +/* Define if you want regoff_t to be at least as wide POSIX requires. */ +#define _REGEX_LARGE_OFFSETS 1 + +/* Define to 500 only on HP-UX. */ +/* #undef _XOPEN_SOURCE */ + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +/* #undef __GETOPT_PREFIX */ + +/* Define to `int' if doesn't define. */ +/* #undef gid_t */ + +/* A replacement for va_copy, if needed. */ +#define gl_va_copy(a,b) ((a) = (b)) + +/* Define to rpl_gmtime if the replacement function should be used. */ +/* #undef gmtime */ + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +/* #undef inline */ +#endif + +/* Define to long or long long if and don't define. */ +/* #undef intmax_t */ + +/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for MacOS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif + +/* Define to rpl_localtime if the replacement function should be used. */ +/* #undef localtime */ + +/* Define to rpl_malloc if the replacement function should be used. */ +/* #undef malloc */ + +/* Define to a type if does not define. */ +/* #undef mbstate_t */ + +/* Define to `int' if does not define. */ +/* #undef mode_t */ + +/* Define to the type of st_nlink in struct stat, or a supertype. */ +/* #undef nlink_t */ + +/* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ +/* #undef ptrdiff_t */ + +/* Define to rpl_re_comp if the replacement should be used. */ +#define re_comp rpl_re_comp + +/* Define to rpl_re_compile_fastmap if the replacement should be used. */ +#define re_compile_fastmap rpl_re_compile_fastmap + +/* Define to rpl_re_compile_pattern if the replacement should be used. */ +#define re_compile_pattern rpl_re_compile_pattern + +/* Define to rpl_re_exec if the replacement should be used. */ +#define re_exec rpl_re_exec + +/* Define to rpl_re_match if the replacement should be used. */ +#define re_match rpl_re_match + +/* Define to rpl_re_match_2 if the replacement should be used. */ +#define re_match_2 rpl_re_match_2 + +/* Define to rpl_re_search if the replacement should be used. */ +#define re_search rpl_re_search + +/* Define to rpl_re_search_2 if the replacement should be used. */ +#define re_search_2 rpl_re_search_2 + +/* Define to rpl_re_set_registers if the replacement should be used. */ +#define re_set_registers rpl_re_set_registers + +/* Define to rpl_re_set_syntax if the replacement should be used. */ +#define re_set_syntax rpl_re_set_syntax + +/* Define to rpl_re_syntax_options if the replacement should be used. */ +#define re_syntax_options rpl_re_syntax_options + +/* Define to rpl_regcomp if the replacement should be used. */ +#define regcomp rpl_regcomp + +/* Define to rpl_regerror if the replacement should be used. */ +#define regerror rpl_regerror + +/* Define to rpl_regexec if the replacement should be used. */ +#define regexec rpl_regexec + +/* Define to rpl_regfree if the replacement should be used. */ +#define regfree rpl_regfree + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#define restrict __restrict +/* Work around a bug in Sun C++: it does not support _Restrict, even + though the corresponding Sun C compiler does, which causes + "#define restrict _Restrict" in the previous line. Perhaps some future + version of Sun C++ will work with _Restrict; if so, it'll probably + define __RESTRICT, just as Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +#endif + +/* Define as an integer type suitable for memory locations that can be + accessed atomically even in the presence of asynchnonous signals. */ +/* #undef sig_atomic_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ + +/* Define as a signed type of the same size as size_t. */ +/* #undef ssize_t */ + +/* Define to rpl_strnlen if the replacement function should be used. */ +/* #undef strnlen */ + +/* Define to `int' if doesn't define. */ +/* #undef uid_t */ + +/* Define as a marker that can be attached to function parameter declarations + for parameters that are not used. This helps to reduce warnings, such as + from GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _UNUSED_PARAMETER_ __attribute__ ((__unused__)) +#else +# define _UNUSED_PARAMETER_ +#endif + + +/* Define as a macro for copying va_list variables. */ +/* #undef va_copy */ diff --git a/coreseek/m4-1.4.13/lib/config.hin b/coreseek/m4-1.4.13/lib/config.hin new file mode 100755 index 0000000..7c8f683 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/config.hin @@ -0,0 +1,1060 @@ +/* lib/config.hin. Generated from configure.ac by autoheader. */ + +/* Define if the compiler is building for multiple architectures of Apple + platforms at once. */ +#undef AA_APPLE_UNIVERSAL_BUILD + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to the number of bits in type 'ptrdiff_t'. */ +#undef BITSIZEOF_PTRDIFF_T + +/* Define to the number of bits in type 'sig_atomic_t'. */ +#undef BITSIZEOF_SIG_ATOMIC_T + +/* Define to the number of bits in type 'size_t'. */ +#undef BITSIZEOF_SIZE_T + +/* Define to the number of bits in type 'wchar_t'. */ +#undef BITSIZEOF_WCHAR_T + +/* Define to the number of bits in type 'wint_t'. */ +#undef BITSIZEOF_WINT_T + +/* Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values. */ +#undef CHECK_PRINTF_SAFE + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'double'. */ +#undef DBL_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'double'. */ +#undef DBL_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'double'. */ +#undef DBL_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'double'. */ +#undef DBL_SIGNBIT_WORD + +/* Define to 1 if // is a file system root distinct from /. */ +#undef DOUBLE_SLASH_IS_DISTINCT_ROOT + +/* Define to 1 if the changeword(REGEXP) functionality is wanted */ +#undef ENABLE_CHANGEWORD + +/* Define to 1 if an invalid memory address access may yield a SIGBUS. */ +#undef FAULT_YIELDS_SIGBUS + +/* Define on systems for which file names may have a so-called `drive letter' + prefix, define this to compute the length of that prefix, including the + colon. */ +#undef FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX + +/* Define if the backslash character may also serve as a file name component + separator. */ +#undef FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR + +/* Define if a drive letter prefix denotes a relative path if it is not + followed by a file name component separator. */ +#undef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'float'. */ +#undef FLT_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'float'. */ +#undef FLT_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'float'. */ +#undef FLT_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'float'. */ +#undef FLT_SIGNBIT_WORD + +/* Define to 1 if fopen() fails to recognize a trailing slash. */ +#undef FOPEN_TRAILING_SLASH_BUG + +/* Define to 1 if ungetc is broken when used on arbitrary bytes. */ +#undef FUNC_UNGETC_BROKEN + +/* Define if gettimeofday clobbers the localtime buffer. */ +#undef GETTIMEOFDAY_CLOBBERS_LOCALTIME + +/* Define to 1 when using the gnulib module close-stream. */ +#undef GNULIB_CLOSE_STREAM + +/* Define to 1 when using the gnulib module fopen-safer. */ +#undef GNULIB_FOPEN_SAFER + +/* Define to indicate the 'malloc' module. */ +#undef GNULIB_MALLOC_GNU + +/* Define to 1 when using the gnulib module open. */ +#undef GNULIB_OPEN + +/* Define to 1 if you have 'alloca' after including , a header that + may be supplied by this distribution. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the `btowc' function. */ +#undef HAVE_BTOWC + +/* Define to 1 if you have the `confstr' function. */ +#undef HAVE_CONFSTR + +/* Define if the copysignf function is declared in and available in + libc. */ +#undef HAVE_COPYSIGNF_IN_LIBC + +/* Define if the copysignl function is declared in and available in + libc. */ +#undef HAVE_COPYSIGNL_IN_LIBC + +/* Define if the copysign function is declared in and available in + libc. */ +#undef HAVE_COPYSIGN_IN_LIBC + +/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. + */ +#undef HAVE_DECL_ALARM + +/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_CLEARERR_UNLOCKED + +/* Define to 1 if you have the declaration of `copysign', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGN + +/* Define to 1 if you have the declaration of `copysignf', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGNF + +/* Define to 1 if you have the declaration of `copysignl', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGNL + +/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_FEOF_UNLOCKED + +/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FERROR_UNLOCKED + +/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FFLUSH_UNLOCKED + +/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FGETS_UNLOCKED + +/* Define to 1 if you have the declaration of `fpurge', and to 0 if you don't. + */ +#undef HAVE_DECL_FPURGE + +/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FPUTC_UNLOCKED + +/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FPUTS_UNLOCKED + +/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FREAD_UNLOCKED + +/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_FWRITE_UNLOCKED + +/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_GETCHAR_UNLOCKED + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_GETC_UNLOCKED + +/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't. + */ +#undef HAVE_DECL_GETENV + +/* Define to 1 if you have the declaration of `isblank', and to 0 if you + don't. */ +#undef HAVE_DECL_ISBLANK + +/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if + you don't. */ +#undef HAVE_DECL_PUTCHAR_UNLOCKED + +/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_PUTC_UNLOCKED + +/* Define to 1 if you have the declaration of `sigaltstack', and to 0 if you + don't. */ +#undef HAVE_DECL_SIGALTSTACK + +/* Define to 1 if you have the declaration of `snprintf', and to 0 if you + don't. */ +#undef HAVE_DECL_SNPRINTF + +/* Define to 1 if you have the declaration of `strerror', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR_R + +/* Define to 1 if you have the declaration of `strndup', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNDUP + +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNLEN + +/* Define to 1 if you have the declaration of `strsignal', and to 0 if you + don't. */ +#undef HAVE_DECL_STRSIGNAL + +/* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you + don't. */ +#undef HAVE_DECL_SYS_SIGLIST + +/* Define to 1 if you have the declaration of `wctob', and to 0 if you don't. + */ +#undef HAVE_DECL_WCTOB + +/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ +#undef HAVE_DECL__SNPRINTF + +/* Define to 1 if you have the declaration of `_sys_siglist', and to 0 if you + don't. */ +#undef HAVE_DECL__SYS_SIGLIST + +/* Define to 1 if you have the declaration of `__fpending', and to 0 if you + don't. */ +#undef HAVE_DECL___FPENDING + +/* Define if you have the declaration of environ. */ +#undef HAVE_ENVIRON_DECL + +/* Define to 1 if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FLOAT_H + +/* Define to 1 if you have the `fpurge' function. */ +#undef HAVE_FPURGE + +/* Define if the frexpl function is available in libc. */ +#undef HAVE_FREXPL_IN_LIBC + +/* Define if the frexp function is available in libc. */ +#undef HAVE_FREXP_IN_LIBC + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +#undef HAVE_FSEEKO + +/* Define to 1 if you have the `getdtablesize' function. */ +#undef HAVE_GETDTABLESIZE + +/* Define to 1 if you have the header file. */ +#undef HAVE_GETOPT_H + +/* Define to 1 if you have the `getopt_long_only' function. */ +#undef HAVE_GETOPT_LONG_ONLY + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if the compiler supports one of the keywords 'inline', + '__inline__', '__inline' and effectively inlines functions marked as such. + */ +#undef HAVE_INLINE + +/* Define if you have the 'intmax_t' type in or . */ +#undef HAVE_INTMAX_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define if exists, doesn't clash with , and + declares uintmax_t. */ +#undef HAVE_INTTYPES_H_WITH_UINTMAX + +/* Define to 1 if you have the `isblank' function. */ +#undef HAVE_ISBLANK + +/* Define if the isnan(double) function is available in libc. */ +#undef HAVE_ISNAND_IN_LIBC + +/* Define if the isnan(float) function is available in libc. */ +#undef HAVE_ISNANF_IN_LIBC + +/* Define if the isnan(long double) function is available in libc. */ +#undef HAVE_ISNANL_IN_LIBC + +/* Define to 1 if you have the `iswcntrl' function. */ +#undef HAVE_ISWCNTRL + +/* Define to 1 if you have the `iswctype' function. */ +#undef HAVE_ISWCTYPE + +/* Define if you have and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + +/* Define if the ldexpl function is available in libc. */ +#undef HAVE_LDEXPL_IN_LIBC + +/* Define if the ldexp function is available in libc. */ +#undef HAVE_LDEXP_IN_LIBC + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBINTL_H + +/* Define if you have the libsigsegv library. */ +#undef HAVE_LIBSIGSEGV + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if the system has the type `long long int'. */ +#undef HAVE_LONG_LONG_INT + +/* Define to 1 if you have the `lstat' function. */ +#undef HAVE_LSTAT + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define if the 'malloc' function is POSIX compliant. */ +#undef HAVE_MALLOC_POSIX + +/* Define to 1 if you have the header file. */ +#undef HAVE_MATH_H + +/* Define to 1 if you have the `mbrtowc' function. */ +#undef HAVE_MBRTOWC + +/* Define to 1 if you have the `mbsinit' function. */ +#undef HAVE_MBSINIT + +/* Define to 1 if declares mbstate_t. */ +#undef HAVE_MBSTATE_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mempcpy' function. */ +#undef HAVE_MEMPCPY + +/* Define to 1 if you have the `mkdtemp' function. */ +#undef HAVE_MKDTEMP + +/* Define to 1 if you have the `nl_langinfo' function. */ +#undef HAVE_NL_LANGINFO + +/* Define to 1 if libc includes obstacks. */ +#undef HAVE_OBSTACK + +/* Define to 1 if you have the `pathconf' function. */ +#undef HAVE_PATHCONF + +/* Define to 1 if you have the header file. */ +#undef HAVE_PATHS_H + +/* Define to 1 if you have the `pipe' function. */ +#undef HAVE_PIPE + +/* Define to 1 if you have the `posix_spawn' function. */ +#undef HAVE_POSIX_SPAWN + +/* Define if the defines PTHREAD_MUTEX_RECURSIVE. */ +#undef HAVE_PTHREAD_MUTEX_RECURSIVE + +/* Define if the POSIX multithreading library has read/write locks. */ +#undef HAVE_PTHREAD_RWLOCK + +/* Define to 1 if you have the header file. */ +#undef HAVE_RANDOM_H + +/* Define to 1 if you have the `rawmemchr' function. */ +#undef HAVE_RAWMEMCHR + +/* Define to 1 if you have the header file. */ +#undef HAVE_SCHED_H + +/* Define to 1 if you have the `sched_setparam' function. */ +#undef HAVE_SCHED_SETPARAM + +/* Define to 1 if you have the `sched_setscheduler' function. */ +#undef HAVE_SCHED_SETSCHEDULER + +/* Define to 1 if you have the header file. */ +#undef HAVE_SEARCH_H + +/* Define to 1 if you have the `setegid' function. */ +#undef HAVE_SETEGID + +/* Define to 1 if you have the `setenv' function. */ +#undef HAVE_SETENV + +/* Define to 1 if you have the `seteuid' function. */ +#undef HAVE_SETEUID + +/* Define to 1 if you have the `setrlimit' function. */ +#undef HAVE_SETRLIMIT + +/* Define to 1 if you have the `sigaction' function. */ +#undef HAVE_SIGACTION + +/* Define to 1 if you have the `sigaltstack' function. */ +#undef HAVE_SIGALTSTACK + +/* Define to 1 if the system has the type `siginfo_t'. */ +#undef HAVE_SIGINFO_T + +/* Define to 1 if you have the `siginterrupt' function. */ +#undef HAVE_SIGINTERRUPT + +/* Define to 1 if you have the header file. */ +#undef HAVE_SIGNAL_H + +/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ +#undef HAVE_SIGNED_SIG_ATOMIC_T + +/* Define to 1 if 'wchar_t' is a signed integer type. */ +#undef HAVE_SIGNED_WCHAR_T + +/* Define to 1 if 'wint_t' is a signed integer type. */ +#undef HAVE_SIGNED_WINT_T + +/* Define to 1 if the system has the type `sigset_t'. */ +#undef HAVE_SIGSET_T + +/* Define to 1 if the system has the type `sig_atomic_t'. */ +#undef HAVE_SIG_ATOMIC_T + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_SPAWN_H + +/* Define to 1 if extending the stack slightly past the limit causes a SIGSEGV + which can be handled on an alternate stack established with sigaltstack. */ +#undef HAVE_STACK_OVERFLOW_HANDLING + +/* Define to 1 if the system has the type `stack_t'. */ +#undef HAVE_STACK_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define if exists, doesn't clash with , and declares + uintmax_t. */ +#undef HAVE_STDINT_H_WITH_UINTMAX + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_EXT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strchrnul' function. */ +#undef HAVE_STRCHRNUL + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define if you have the strndup() function and it works. */ +#undef HAVE_STRNDUP + +/* Define to 1 if you have the `strnlen' function. */ +#undef HAVE_STRNLEN + +/* Define to 1 if you have the `strsignal' function. */ +#undef HAVE_STRSIGNAL + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if the system has the type `struct random_data'. */ +#undef HAVE_STRUCT_RANDOM_DATA + +/* Define to 1 if `struct sigaction' is a member of `sa_sigaction'. */ +#undef HAVE_STRUCT_SIGACTION_SA_SIGACTION + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_BITYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIMEB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the `tsearch' function. */ +#undef HAVE_TSEARCH + +/* Define to 1 if you have the header file. */ +#undef HAVE_UCONTEXT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `unsetenv' function. */ +#undef HAVE_UNSETENV + +/* Define to 1 if the system has the type `unsigned long long int'. */ +#undef HAVE_UNSIGNED_LONG_LONG_INT + +/* Define to 1 if you have the `vasnprintf' function. */ +#undef HAVE_VASNPRINTF + +/* Define to 1 if you have the `vasprintf' function. */ +#undef HAVE_VASPRINTF + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the `waitid' function. */ +#undef HAVE_WAITID + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H + +/* Define if you have the 'wchar_t' type. */ +#undef HAVE_WCHAR_T + +/* Define to 1 if you have the `wcrtomb' function. */ +#undef HAVE_WCRTOMB + +/* Define to 1 if you have the `wcscoll' function. */ +#undef HAVE_WCSCOLL + +/* Define to 1 if you have the `wcslen' function. */ +#undef HAVE_WCSLEN + +/* Define to 1 if you have the `wcsnlen' function. */ +#undef HAVE_WCSNLEN + +/* Define to 1 if you have the `wctob' function. */ +#undef HAVE_WCTOB + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCTYPE_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_WINSOCK2_H + +/* Define if you have the 'wint_t' type. */ +#undef HAVE_WINT_T + +/* Define to 1 if O_NOATIME works. */ +#undef HAVE_WORKING_O_NOATIME + +/* Define to 1 if O_NOFOLLOW works. */ +#undef HAVE_WORKING_O_NOFOLLOW + +/* Define to 1 if extending the stack slightly past the limit causes a + SIGSEGV, and an alternate stack can be established with sigaltstack, and + the signal handler is passed a context that specifies the run time stack. + This behavior is defined by POSIX 1003.1-2001 with the X/Open System + Interface (XSI) option and is a standardized way to implement a SEGV-based + stack overflow detection heuristic. */ +#undef HAVE_XSI_STACK_OVERFLOW_HEURISTIC + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define to 1 if you have the `_ftime' function. */ +#undef HAVE__FTIME + +/* Define to 1 if you have the `__fpending' function. */ +#undef HAVE___FPENDING + +/* Define to 1 if you have the `__fpurge' function. */ +#undef HAVE___FPURGE + +/* Define to 1 if you have the `__freading' function. */ +#undef HAVE___FREADING + +/* Define to 1 if you have the `__secure_getenv' function. */ +#undef HAVE___SECURE_GETENV + +#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else +# define ISSLASH(C) ((C) == '/') +#endif + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'long double'. */ +#undef LDBL_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'long double'. */ +#undef LDBL_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'long + double'. */ +#undef LDBL_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'long double'. */ +#undef LDBL_SIGNBIT_WORD + +/* Define to 1 if lseek does not detect pipes. */ +#undef LSEEK_PIPE_BROKEN + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ +#undef MALLOC_0_IS_NONNULL + +/* Define if the mbrtowc function has the NULL string argument bug. */ +#undef MBRTOWC_NULL_ARG_BUG + +/* Define if the mbrtowc function does not return 0 for a NUL character. */ +#undef MBRTOWC_NUL_RETVAL_BUG + +/* Define if the mbrtowc function returns a wrong return value. */ +#undef MBRTOWC_RETVAL_BUG + +/* Define to 1 if assertions should be disabled. */ +#undef NDEBUG + +/* Define if the vasnprintf implementation needs special code for the 'a' and + 'A' directives. */ +#undef NEED_PRINTF_DIRECTIVE_A + +/* Define if the vasnprintf implementation needs special code for the 'F' + directive. */ +#undef NEED_PRINTF_DIRECTIVE_F + +/* Define if the vasnprintf implementation needs special code for the 'ls' + directive. */ +#undef NEED_PRINTF_DIRECTIVE_LS + +/* Define if the vasnprintf implementation needs special code for 'double' + arguments. */ +#undef NEED_PRINTF_DOUBLE + +/* Define if the vasnprintf implementation needs special code for surviving + out-of-memory conditions. */ +#undef NEED_PRINTF_ENOMEM + +/* Define if the vasnprintf implementation needs special code for the ' flag. + */ +#undef NEED_PRINTF_FLAG_GROUPING + +/* Define if the vasnprintf implementation needs special code for the '-' + flag. */ +#undef NEED_PRINTF_FLAG_LEFTADJUST + +/* Define if the vasnprintf implementation needs special code for the 0 flag. + */ +#undef NEED_PRINTF_FLAG_ZERO + +/* Define if the vasnprintf implementation needs special code for infinite + 'double' arguments. */ +#undef NEED_PRINTF_INFINITE_DOUBLE + +/* Define if the vasnprintf implementation needs special code for infinite + 'long double' arguments. */ +#undef NEED_PRINTF_INFINITE_LONG_DOUBLE + +/* Define if the vasnprintf implementation needs special code for 'long + double' arguments. */ +#undef NEED_PRINTF_LONG_DOUBLE + +/* Define if the vasnprintf implementation needs special code for supporting + large precisions without arbitrary bounds. */ +#undef NEED_PRINTF_UNBOUNDED_PRECISION + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Define to 1 if open() fails to recognize a trailing slash. */ +#undef OPEN_TRAILING_SLASH_BUG + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* the number of pending output bytes on stream `fp' */ +#undef PENDING_OUTPUT_N_BYTES + +/* Define if the pthread_in_use() detection is hard. */ +#undef PTHREAD_IN_USE_DETECTION_HARD + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +#undef PTRDIFF_T_SUFFIX + +/* Define to 1 if a file can be renamed while open, or to 0 if not. */ +#undef RENAME_OPEN_FILE_WORKS + +/* Define this to 1 if strerror is broken. */ +#undef REPLACE_STRERROR + +/* Define if vasnprintf exists but is overridden by gnulib. */ +#undef REPLACE_VASNPRINTF + +/* Define if sigaltstack() interprets the stack_t.ss_sp field incorrectly, as + the highest address of the alternate stack range rather than as the lowest + address. */ +#undef SIGALTSTACK_SS_REVERSED + +/* Define if lists must be signal-safe. */ +#undef SIGNAL_SAFE_LIST + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +#undef SIG_ATOMIC_T_SUFFIX + +/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#undef SIZE_MAX + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'size_t'. */ +#undef SIZE_T_SUFFIX + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if the `S_IS*' macros in do not work properly. */ +#undef STAT_MACROS_BROKEN + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if strerror_r returns char *. */ +#undef STRERROR_R_CHAR_P + +/* Shell used by syscmd and esyscmd, must accept -c argument. */ +#undef SYSCMD_SHELL + +/* Define if the POSIX multithreading library can be used. */ +#undef USE_POSIX_THREADS + +/* Define if references to the POSIX multithreading library should be made + weak. */ +#undef USE_POSIX_THREADS_WEAK + +/* Define if the GNU Pth multithreading library can be used. */ +#undef USE_PTH_THREADS + +/* Define if references to the GNU Pth multithreading library should be made + weak. */ +#undef USE_PTH_THREADS_WEAK + +/* Define if the old Solaris multithreading library can be used. */ +#undef USE_SOLARIS_THREADS + +/* Define if references to the old Solaris multithreading library should be + made weak. */ +#undef USE_SOLARIS_THREADS_WEAK + +/* Define to 1 if you want getc etc. to use unlocked I/O if available. + Unlocked I/O can improve performance in unithreaded apps, but it is not + safe for multithreaded apps. */ +#undef USE_UNLOCKED_IO + +/* Define if the Win32 multithreading API can be used. */ +#undef USE_WIN32_THREADS + +/* Version number of package */ +#undef VERSION + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wchar_t'. */ +#undef WCHAR_T_SUFFIX + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wint_t'. */ +#undef WINT_T_SUFFIX + +/* Define to 1 if malloc debugging is enabled */ +#undef WITH_DMALLOC + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ +#undef _LARGEFILE_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* Define if you want regoff_t to be at least as wide POSIX requires. */ +#undef _REGEX_LARGE_OFFSETS + +/* Define to 500 only on HP-UX. */ +#undef _XOPEN_SOURCE + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +#undef __GETOPT_PREFIX + +/* Define to `int' if doesn't define. */ +#undef gid_t + +/* A replacement for va_copy, if needed. */ +#define gl_va_copy(a,b) ((a) = (b)) + +/* Define to rpl_gmtime if the replacement function should be used. */ +#undef gmtime + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to long or long long if and don't define. */ +#undef intmax_t + +/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for MacOS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif + +/* Define to rpl_localtime if the replacement function should be used. */ +#undef localtime + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to a type if does not define. */ +#undef mbstate_t + +/* Define to `int' if does not define. */ +#undef mode_t + +/* Define to the type of st_nlink in struct stat, or a supertype. */ +#undef nlink_t + +/* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ +#undef ptrdiff_t + +/* Define to rpl_re_comp if the replacement should be used. */ +#undef re_comp + +/* Define to rpl_re_compile_fastmap if the replacement should be used. */ +#undef re_compile_fastmap + +/* Define to rpl_re_compile_pattern if the replacement should be used. */ +#undef re_compile_pattern + +/* Define to rpl_re_exec if the replacement should be used. */ +#undef re_exec + +/* Define to rpl_re_match if the replacement should be used. */ +#undef re_match + +/* Define to rpl_re_match_2 if the replacement should be used. */ +#undef re_match_2 + +/* Define to rpl_re_search if the replacement should be used. */ +#undef re_search + +/* Define to rpl_re_search_2 if the replacement should be used. */ +#undef re_search_2 + +/* Define to rpl_re_set_registers if the replacement should be used. */ +#undef re_set_registers + +/* Define to rpl_re_set_syntax if the replacement should be used. */ +#undef re_set_syntax + +/* Define to rpl_re_syntax_options if the replacement should be used. */ +#undef re_syntax_options + +/* Define to rpl_regcomp if the replacement should be used. */ +#undef regcomp + +/* Define to rpl_regerror if the replacement should be used. */ +#undef regerror + +/* Define to rpl_regexec if the replacement should be used. */ +#undef regexec + +/* Define to rpl_regfree if the replacement should be used. */ +#undef regfree + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict, even + though the corresponding Sun C compiler does, which causes + "#define restrict _Restrict" in the previous line. Perhaps some future + version of Sun C++ will work with _Restrict; if so, it'll probably + define __RESTRICT, just as Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +#endif + +/* Define as an integer type suitable for memory locations that can be + accessed atomically even in the presence of asynchnonous signals. */ +#undef sig_atomic_t + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* Define as a signed type of the same size as size_t. */ +#undef ssize_t + +/* Define to rpl_strnlen if the replacement function should be used. */ +#undef strnlen + +/* Define to `int' if doesn't define. */ +#undef uid_t + +/* Define as a marker that can be attached to function parameter declarations + for parameters that are not used. This helps to reduce warnings, such as + from GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _UNUSED_PARAMETER_ __attribute__ ((__unused__)) +#else +# define _UNUSED_PARAMETER_ +#endif + + +/* Define as a macro for copying va_list variables. */ +#undef va_copy diff --git a/coreseek/m4-1.4.13/lib/configmake.h b/coreseek/m4-1.4.13/lib/configmake.h new file mode 100644 index 0000000..edb7682 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/configmake.h @@ -0,0 +1,26 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +#define PREFIX "/usr/local" +#define EXEC_PREFIX "/usr/local" +#define BINDIR "/usr/local/bin" +#define SBINDIR "/usr/local/sbin" +#define LIBEXECDIR "/usr/local/libexec" +#define DATAROOTDIR "/usr/local/share" +#define DATADIR "/usr/local/share" +#define SYSCONFDIR "/usr/local/etc" +#define SHAREDSTATEDIR "/usr/local/com" +#define LOCALSTATEDIR "/usr/local/var" +#define INCLUDEDIR "/usr/local/include" +#define OLDINCLUDEDIR "/usr/include" +#define DOCDIR "/usr/local/share/doc/m4" +#define INFODIR "/usr/local/share/info" +#define HTMLDIR "/usr/local/share/doc/m4" +#define DVIDIR "/usr/local/share/doc/m4" +#define PDFDIR "/usr/local/share/doc/m4" +#define PSDIR "/usr/local/share/doc/m4" +#define LIBDIR "/usr/local/lib" +#define LOCALEDIR "/usr/local/share/locale" +#define MANDIR "/usr/local/share/man" +#define PKGDATADIR "/usr/local/share/m4" +#define PKGINCLUDEDIR "/usr/local/include/m4" +#define PKGLIBDIR "/usr/local/lib/m4" +#define PKGLIBEXECDIR "/usr/local/libexec/m4" diff --git a/coreseek/m4-1.4.13/lib/dirname.c b/coreseek/m4-1.4.13/lib/dirname.c new file mode 100644 index 0000000..c27e5b5 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/dirname.c @@ -0,0 +1,84 @@ +/* dirname.c -- return all but the last element in a file name + + Copyright (C) 1990, 1998, 2000, 2001, 2003, 2004, 2005, 2006 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +#include +#include "xalloc.h" + +/* Return the length of the prefix of FILE that will be used by + dir_name. If FILE is in the working directory, this returns zero + even though `dir_name (FILE)' will return ".". Works properly even + if there are trailing slashes (by effectively ignoring them). */ + +size_t +dir_len (char const *file) +{ + size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); + size_t length; + + /* Advance prefix_length beyond important leading slashes. */ + prefix_length += (prefix_length != 0 + ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && ISSLASH (file[prefix_length])) + : (ISSLASH (file[0]) + ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT + && ISSLASH (file[1]) && ! ISSLASH (file[2]) + ? 2 : 1)) + : 0)); + + /* Strip the basename and any redundant slashes before it. */ + for (length = last_component (file) - file; + prefix_length < length; length--) + if (! ISSLASH (file[length - 1])) + break; + return length; +} + + +/* In general, we can't use the builtin `dirname' function if available, + since it has different meanings in different environments. + In some environments the builtin `dirname' modifies its argument. + + Return the leading directories part of FILE, allocated with xmalloc. + Works properly even if there are trailing slashes (by effectively + ignoring them). Unlike POSIX dirname(), FILE cannot be NULL. + + If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); + lstat (base_name (FILE)); } will access the same file. Likewise, + if the sequence { chdir (dir_name (FILE)); + rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE + to "foo" in the same directory FILE was in. */ + +char * +dir_name (char const *file) +{ + size_t length = dir_len (file); + bool append_dot = (length == 0 + || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + && length == FILE_SYSTEM_PREFIX_LEN (file) + && file[2] != '\0' && ! ISSLASH (file[2]))); + char *dir = xmalloc (length + append_dot + 1); + memcpy (dir, file, length); + if (append_dot) + dir[length++] = '.'; + dir[length] = '\0'; + return dir; +} diff --git a/coreseek/m4-1.4.13/lib/dirname.h b/coreseek/m4-1.4.13/lib/dirname.h new file mode 100644 index 0000000..f592350 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/dirname.h @@ -0,0 +1,69 @@ +/* Take file names apart into directory and base names. + + Copyright (C) 1998, 2001, 2003-2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef DIRNAME_H_ +# define DIRNAME_H_ 1 + +# include +# include + +# ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +# endif + +# ifndef ISSLASH +# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) +# endif + +# ifndef FILE_SYSTEM_PREFIX_LEN +# if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX + /* This internal macro assumes ASCII, but all hosts that support drive + letters use ASCII. */ +# define _IS_DRIVE_LETTER(c) (((unsigned int) (c) | ('a' - 'A')) - 'a' \ + <= 'z' - 'a') +# define FILE_SYSTEM_PREFIX_LEN(Filename) \ + (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0) +# else +# define FILE_SYSTEM_PREFIX_LEN(Filename) 0 +# endif +# endif + +# ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 +# endif + +# ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT +# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 +# endif + +# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE +# define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)]) +# else +# define IS_ABSOLUTE_FILE_NAME(F) \ + (ISSLASH ((F)[0]) || 0 < FILE_SYSTEM_PREFIX_LEN (F)) +# endif +# define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F)) + +char *base_name (char const *file); +char *dir_name (char const *file); +size_t base_len (char const *file); +size_t dir_len (char const *file); +char *last_component (char const *file); + +bool strip_trailing_slashes (char *file); + +#endif /* not DIRNAME_H_ */ diff --git a/coreseek/m4-1.4.13/lib/dirname.o b/coreseek/m4-1.4.13/lib/dirname.o new file mode 100644 index 0000000..f5432ea Binary files /dev/null and b/coreseek/m4-1.4.13/lib/dirname.o differ diff --git a/coreseek/m4-1.4.13/lib/dup-safer.c b/coreseek/m4-1.4.13/lib/dup-safer.c new file mode 100644 index 0000000..7d9b2be --- /dev/null +++ b/coreseek/m4-1.4.13/lib/dup-safer.c @@ -0,0 +1,42 @@ +/* Invoke dup, but avoid some glitches. + + Copyright (C) 2001, 2004, 2005, 2006, 2009 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +#include "unistd-safer.h" + +#include + +#include + +/* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or + STDERR_FILENO. */ + +int +dup_safer (int fd) +{ +#if defined F_DUPFD && !defined FCHDIR_REPLACEMENT + return fcntl (fd, F_DUPFD, STDERR_FILENO + 1); +#else + /* fd_safer calls us back, but eventually the recursion unwinds and + does the right thing. */ + return fd_safer (dup (fd)); +#endif +} diff --git a/coreseek/m4-1.4.13/lib/dup-safer.o b/coreseek/m4-1.4.13/lib/dup-safer.o new file mode 100644 index 0000000..34a5e65 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/dup-safer.o differ diff --git a/coreseek/m4-1.4.13/lib/errno.in.h b/coreseek/m4-1.4.13/lib/errno.in.h new file mode 100644 index 0000000..51ac662 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/errno.in.h @@ -0,0 +1,155 @@ +/* A POSIX-like . + + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_ERRNO_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_ERRNO_H@ + +#ifndef _GL_ERRNO_H +#define _GL_ERRNO_H + + +/* On native Windows platforms, many macros are not defined. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* POSIX says that EAGAIN and EWOULDBLOCK may have the same value. */ +# define EWOULDBLOCK EAGAIN + +/* Values >= 100 seem safe to use. */ +# define ETXTBSY 100 +# define GNULIB_defined_ETXTBSY 1 + +/* These are intentionally the same values as the WSA* error numbers, defined + in . */ +# define EINPROGRESS 10036 +# define EALREADY 10037 +# define ENOTSOCK 10038 +# define EDESTADDRREQ 10039 +# define EMSGSIZE 10040 +# define EPROTOTYPE 10041 +# define ENOPROTOOPT 10042 +# define EPROTONOSUPPORT 10043 +# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ +# define EOPNOTSUPP 10045 +# define EPFNOSUPPORT 10046 /* not required by POSIX */ +# define EAFNOSUPPORT 10047 +# define EADDRINUSE 10048 +# define EADDRNOTAVAIL 10049 +# define ENETDOWN 10050 +# define ENETUNREACH 10051 +# define ENETRESET 10052 +# define ECONNABORTED 10053 +# define ECONNRESET 10054 +# define ENOBUFS 10055 +# define EISCONN 10056 +# define ENOTCONN 10057 +# define ESHUTDOWN 10058 /* not required by POSIX */ +# define ETOOMANYREFS 10059 /* not required by POSIX */ +# define ETIMEDOUT 10060 +# define ECONNREFUSED 10061 +# define ELOOP 10062 +# define EHOSTDOWN 10064 /* not required by POSIX */ +# define EHOSTUNREACH 10065 +# define EPROCLIM 10067 /* not required by POSIX */ +# define EUSERS 10068 /* not required by POSIX */ +# define EDQUOT 10069 +# define ESTALE 10070 +# define EREMOTE 10071 /* not required by POSIX */ +# define GNULIB_defined_ESOCK 1 + +# endif + + +/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros + EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ +# if @EMULTIHOP_HIDDEN@ +# define EMULTIHOP @EMULTIHOP_VALUE@ +# define GNULIB_defined_EMULTIHOP 1 +# endif +# if @ENOLINK_HIDDEN@ +# define ENOLINK @ENOLINK_VALUE@ +# define GNULIB_defined_ENOLINK 1 +# endif +# if @EOVERFLOW_HIDDEN@ +# define EOVERFLOW @EOVERFLOW_VALUE@ +# define GNULIB_defined_EOVERFLOW 1 +# endif + + +/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, + EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. + Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, + HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. + + Note: When one of these systems defines some of these macros some day, + binaries will have to be recompiled so that they recognizes the new + errno values from the system. */ + +# ifndef ENOMSG +# define ENOMSG 2000 +# define GNULIB_defined_ENOMSG 1 +# endif + +# ifndef EIDRM +# define EIDRM 2001 +# define GNULIB_defined_EIDRM 1 +# endif + +# ifndef ENOLINK +# define ENOLINK 2002 +# define GNULIB_defined_ENOLINK 1 +# endif + +# ifndef EPROTO +# define EPROTO 2003 +# define GNULIB_defined_EPROTO 1 +# endif + +# ifndef EMULTIHOP +# define EMULTIHOP 2004 +# define GNULIB_defined_EMULTIHOP 1 +# endif + +# ifndef EBADMSG +# define EBADMSG 2005 +# define GNULIB_defined_EBADMSG 1 +# endif + +# ifndef EOVERFLOW +# define EOVERFLOW 2006 +# define GNULIB_defined_EOVERFLOW 1 +# endif + +# ifndef ENOTSUP +# define ENOTSUP 2007 +# define GNULIB_defined_ENOTSUP 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 2008 +# define GNULIB_defined_ECANCELED 1 +# endif + + +#endif /* _GL_ERRNO_H */ +#endif /* _GL_ERRNO_H */ diff --git a/coreseek/m4-1.4.13/lib/error.c b/coreseek/m4-1.4.13/lib/error.c new file mode 100644 index 0000000..3177bd5 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/error.c @@ -0,0 +1,338 @@ +/* Error handler for noninteractive utilities + Copyright (C) 1990-1998, 2000-2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by David MacKenzie . */ + +#if !_LIBC +# include +#endif + +#include "error.h" + +#include +#include +#include +#include + +#if !_LIBC && ENABLE_NLS +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#ifdef _LIBC +# include +# include +# include +# include +# define mbsrtowcs __mbsrtowcs +#endif + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#ifndef _ +# define _(String) String +#endif + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +void (*error_print_progname) (void); + +/* This variable is incremented each time `error' is called. */ +unsigned int error_message_count; + +#ifdef _LIBC +/* In the GNU C library, there is a predefined variable for this. */ + +# define program_name program_invocation_name +# include +# include +# include + +/* In GNU libc we want do not want to use the common name `error' directly. + Instead make it a weak alias. */ +extern void __error (int status, int errnum, const char *message, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +extern void __error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, + ...) + __attribute__ ((__format__ (__printf__, 5, 6)));; +# define error __error +# define error_at_line __error_at_line + +# include +# define fflush(s) INTUSE(_IO_fflush) (s) +# undef putc +# define putc(c, fp) INTUSE(_IO_putc) (c, fp) + +# include + +#else /* not _LIBC */ + +# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P +# ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +# endif +char *strerror_r (); +# endif + +/* The calling program should define program_name and set it to the + name of the executing program. */ +extern char *program_name; + +# if HAVE_STRERROR_R || defined strerror_r +# define __strerror_r strerror_r +# endif /* HAVE_STRERROR_R || defined strerror_r */ +#endif /* not _LIBC */ + +static void +print_errno_message (int errnum) +{ + char const *s; + +#if defined HAVE_STRERROR_R || _LIBC + char errbuf[1024]; +# if STRERROR_R_CHAR_P || _LIBC + s = __strerror_r (errnum, errbuf, sizeof errbuf); +# else + if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) + s = errbuf; + else + s = 0; +# endif +#else + s = strerror (errnum); +#endif + +#if !_LIBC + if (! s) + s = _("Unknown system error"); +#endif + +#if _LIBC + __fxprintf (NULL, ": %s", s); +#else + fprintf (stderr, ": %s", s); +#endif +} + +static void +error_tail (int status, int errnum, const char *message, va_list args) +{ +#if _LIBC + if (_IO_fwide (stderr, 0) > 0) + { +# define ALLOCA_LIMIT 2000 + size_t len = strlen (message) + 1; + wchar_t *wmessage = NULL; + mbstate_t st; + size_t res; + const char *tmp; + bool use_malloc = false; + + while (1) + { + if (__libc_use_alloca (len * sizeof (wchar_t))) + wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); + else + { + if (!use_malloc) + wmessage = NULL; + + wchar_t *p = (wchar_t *) realloc (wmessage, + len * sizeof (wchar_t)); + if (p == NULL) + { + free (wmessage); + fputws_unlocked (L"out of memory\n", stderr); + return; + } + wmessage = p; + use_malloc = true; + } + + memset (&st, '\0', sizeof (st)); + tmp = message; + + res = mbsrtowcs (wmessage, &tmp, len, &st); + if (res != len) + break; + + if (__builtin_expect (len >= SIZE_MAX / 2, 0)) + { + /* This really should not happen if everything is fine. */ + res = (size_t) -1; + break; + } + + len *= 2; + } + + if (res == (size_t) -1) + { + /* The string cannot be converted. */ + if (use_malloc) + { + free (wmessage); + use_malloc = false; + } + wmessage = (wchar_t *) L"???"; + } + + __vfwprintf (stderr, wmessage, args); + + if (use_malloc) + free (wmessage); + } + else +#endif + vfprintf (stderr, message, args); + va_end (args); + + ++error_message_count; + if (errnum) + print_errno_message (errnum); +#if _LIBC + __fxprintf (NULL, "\n"); +#else + putc ('\n', stderr); +#endif + fflush (stderr); + if (status) + exit (status); +} + + +/* Print the program name and error message MESSAGE, which is a printf-style + format string with optional args. + If ERRNUM is nonzero, print its corresponding system error message. + Exit with status STATUS if it is nonzero. */ +void +error (int status, int errnum, const char *message, ...) +{ + va_list args; + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + fflush (stdout); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s: ", program_name); +#else + fprintf (stderr, "%s: ", program_name); +#endif + } + + va_start (args, message); + error_tail (status, errnum, message, args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +int error_one_per_line; + +void +error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, ...) +{ + va_list args; + + if (error_one_per_line) + { + static const char *old_file_name; + static unsigned int old_line_number; + + if (old_line_number == line_number + && (file_name == old_file_name + || strcmp (old_file_name, file_name) == 0)) + /* Simply return and print nothing. */ + return; + + old_file_name = file_name; + old_line_number = line_number; + } + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + fflush (stdout); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s:", program_name); +#else + fprintf (stderr, "%s:", program_name); +#endif + } + +#if _LIBC + __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ", + file_name, line_number); +#else + fprintf (stderr, file_name != NULL ? "%s:%d: " : " ", + file_name, line_number); +#endif + + va_start (args, message); + error_tail (status, errnum, message, args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +#ifdef _LIBC +/* Make the weak alias. */ +# undef error +# undef error_at_line +weak_alias (__error, error) +weak_alias (__error_at_line, error_at_line) +#endif diff --git a/coreseek/m4-1.4.13/lib/error.h b/coreseek/m4-1.4.13/lib/error.h new file mode 100644 index 0000000..6d49681 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/error.h @@ -0,0 +1,65 @@ +/* Declaration for error-reporting function + Copyright (C) 1995, 1996, 1997, 2003, 2006, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _ERROR_H +#define _ERROR_H 1 + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Print a message with `fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ + +extern void error (int __status, int __errnum, const char *__format, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); + +extern void error_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, ...) + __attribute__ ((__format__ (__printf__, 5, 6))); + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +extern void (*error_print_progname) (void); + +/* This variable is incremented each time `error' is called. */ +extern unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +extern int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* error.h */ diff --git a/coreseek/m4-1.4.13/lib/execute.c b/coreseek/m4-1.4.13/lib/execute.c new file mode 100644 index 0000000..a6911d9 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/execute.c @@ -0,0 +1,278 @@ +/* Creation of autonomous subprocesses. + Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include + +/* Specification. */ +#include "execute.h" + +#include +#include +#include +#include +#include +#include + +#include "error.h" +#include "fatal-signal.h" +#include "wait-process.h" +#include "gettext.h" + +#define _(str) gettext (str) + +#if defined _MSC_VER || defined __MINGW32__ + +/* Native Woe32 API. */ +# include +# include "w32spawn.h" + +#else + +/* Unix API. */ +# include + +#endif + +/* The results of open() in this file are not used with fchdir, + therefore save some unnecessary work in fchdir.c. */ +#undef open +#undef close + + +#ifdef EINTR + +/* EINTR handling for close(), open(). + These functions can return -1/EINTR even though we don't have any + signal handlers set up, namely when we get interrupted via SIGSTOP. */ + +static inline int +nonintr_close (int fd) +{ + int retval; + + do + retval = close (fd); + while (retval < 0 && errno == EINTR); + + return retval; +} +#define close nonintr_close + +static inline int +nonintr_open (const char *pathname, int oflag, mode_t mode) +{ + int retval; + + do + retval = open (pathname, oflag, mode); + while (retval < 0 && errno == EINTR); + + return retval; +} +#undef open /* avoid warning on VMS */ +#define open nonintr_open + +#endif + + +/* Execute a command, optionally redirecting any of the three standard file + descriptors to /dev/null. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. + If slave_process is true, the child process will be terminated when its + creator receives a catchable fatal signal. */ +int +execute (const char *progname, + const char *prog_path, char **prog_argv, + bool ignore_sigpipe, + bool null_stdin, bool null_stdout, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp) +{ +#if defined _MSC_VER || defined __MINGW32__ + + /* Native Woe32 API. */ + int orig_stdin; + int orig_stdout; + int orig_stderr; + int exitcode; + int nullinfd; + int nulloutfd; + + /* FIXME: Need to free memory allocated by prepare_spawn. */ + prog_argv = prepare_spawn (prog_argv); + + /* Save standard file handles of parent process. */ + if (null_stdin) + orig_stdin = dup_noinherit (STDIN_FILENO); + if (null_stdout) + orig_stdout = dup_noinherit (STDOUT_FILENO); + if (null_stderr) + orig_stderr = dup_noinherit (STDERR_FILENO); + exitcode = -1; + + /* Create standard file handles of child process. */ + nullinfd = -1; + nulloutfd = -1; + if ((!null_stdin + || ((nullinfd = open ("NUL", O_RDONLY, 0)) >= 0 + && (nullinfd == STDIN_FILENO + || (dup2 (nullinfd, STDIN_FILENO) >= 0 + && close (nullinfd) >= 0)))) + && (!(null_stdout || null_stderr) + || ((nulloutfd = open ("NUL", O_RDWR, 0)) >= 0 + && (!null_stdout + || nulloutfd == STDOUT_FILENO + || dup2 (nulloutfd, STDOUT_FILENO) >= 0) + && (!null_stderr + || nulloutfd == STDERR_FILENO + || dup2 (nulloutfd, STDERR_FILENO) >= 0) + && ((null_stdout && nulloutfd == STDOUT_FILENO) + || (null_stderr && nulloutfd == STDERR_FILENO) + || close (nulloutfd) >= 0)))) + /* Use spawnvpe and pass the environment explicitly. This is needed if + the program has modified the environment using putenv() or [un]setenv(). + On Windows, programs have two environments, one in the "environment + block" of the process and managed through SetEnvironmentVariable(), and + one inside the process, in the location retrieved by the 'environ' + macro. When using spawnvp() without 'e', the child process inherits a + copy of the environment block - ignoring the effects of putenv() and + [un]setenv(). */ + { + exitcode = spawnvpe (P_WAIT, prog_path, (const char **) prog_argv, + (const char **) environ); + if (exitcode < 0 && errno == ENOEXEC) + { + /* prog is not an native executable. Try to execute it as a + shell script. Note that prepare_spawn() has already prepended + a hidden element "sh.exe" to prog_argv. */ + --prog_argv; + exitcode = spawnvpe (P_WAIT, prog_argv[0], (const char **) prog_argv, + (const char **) environ); + } + } + if (nulloutfd >= 0) + close (nulloutfd); + if (nullinfd >= 0) + close (nullinfd); + + /* Restore standard file handles of parent process. */ + if (null_stderr) + dup2 (orig_stderr, STDERR_FILENO), close (orig_stderr); + if (null_stdout) + dup2 (orig_stdout, STDOUT_FILENO), close (orig_stdout); + if (null_stdin) + dup2 (orig_stdin, STDIN_FILENO), close (orig_stdin); + + if (termsigp != NULL) + *termsigp = 0; + + if (exitcode == -1) + { + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess failed"), progname); + return 127; + } + + return exitcode; + +#else + + /* Unix API. */ + /* Note about 127: Some errors during posix_spawnp() cause the function + posix_spawnp() to return an error code; some other errors cause the + subprocess to exit with return code 127. It is implementation + dependent which error is reported which way. We treat both cases as + equivalent. */ + sigset_t blocked_signals; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + + if (slave_process) + { + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + block_fatal_signals (); + } + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (null_stdin + && (err = posix_spawn_file_actions_addopen (&actions, + STDIN_FILENO, + "/dev/null", O_RDONLY, + 0)) + != 0) + || (null_stdout + && (err = posix_spawn_file_actions_addopen (&actions, + STDOUT_FILENO, + "/dev/null", O_RDWR, + 0)) + != 0) + || (null_stderr + && (err = posix_spawn_file_actions_addopen (&actions, + STDERR_FILENO, + "/dev/null", O_RDWR, + 0)) + != 0) + || (slave_process + && ((err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, + &blocked_signals)) + != 0 + || (err = posix_spawnattr_setflags (&attrs, + POSIX_SPAWN_SETSIGMASK)) + != 0))) + || (err = posix_spawnp (&child, prog_path, &actions, + attrs_allocated ? &attrs : NULL, prog_argv, + environ)) + != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + if (slave_process) + unblock_fatal_signals (); + if (termsigp != NULL) + *termsigp = 0; + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, err, + _("%s subprocess failed"), progname); + return 127; + } + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + if (slave_process) + { + register_slave_subprocess (child); + unblock_fatal_signals (); + } + + return wait_subprocess (child, progname, ignore_sigpipe, null_stderr, + slave_process, exit_on_error, termsigp); + +#endif +} diff --git a/coreseek/m4-1.4.13/lib/execute.h b/coreseek/m4-1.4.13/lib/execute.h new file mode 100644 index 0000000..b456aaf --- /dev/null +++ b/coreseek/m4-1.4.13/lib/execute.h @@ -0,0 +1,44 @@ +/* Creation of autonomous subprocesses. + Copyright (C) 2001-2003, 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _EXECUTE_H +#define _EXECUTE_H + +#include + +/* Execute a command, optionally redirecting any of the three standard file + descriptors to /dev/null. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. + If ignore_sigpipe is true, consider a subprocess termination due to SIGPIPE + as equivalent to a success. This is suitable for processes whose only + purpose is to write to standard output. + If slave_process is true, the child process will be terminated when its + creator receives a catchable fatal signal. + If termsigp is not NULL, *termsig will be set to the signal that terminated + the subprocess (if supported by the platform: not on native Windows + platforms), otherwise 0. + It is recommended that no signal is blocked or ignored while execute() + is called. See pipe.h for the reason. */ +extern int execute (const char *progname, + const char *prog_path, char **prog_argv, + bool ignore_sigpipe, + bool null_stdin, bool null_stdout, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp); + +#endif /* _EXECUTE_H */ diff --git a/coreseek/m4-1.4.13/lib/execute.o b/coreseek/m4-1.4.13/lib/execute.o new file mode 100644 index 0000000..1108739 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/execute.o differ diff --git a/coreseek/m4-1.4.13/lib/exitfail.c b/coreseek/m4-1.4.13/lib/exitfail.c new file mode 100644 index 0000000..6d1fe4a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/exitfail.c @@ -0,0 +1,24 @@ +/* Failure exit status + + Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "exitfail.h" + +#include + +int volatile exit_failure = EXIT_FAILURE; diff --git a/coreseek/m4-1.4.13/lib/exitfail.h b/coreseek/m4-1.4.13/lib/exitfail.h new file mode 100644 index 0000000..713f259 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/exitfail.h @@ -0,0 +1,18 @@ +/* Failure exit status + + Copyright (C) 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +extern int volatile exit_failure; diff --git a/coreseek/m4-1.4.13/lib/exitfail.o b/coreseek/m4-1.4.13/lib/exitfail.o new file mode 100644 index 0000000..466a4ce Binary files /dev/null and b/coreseek/m4-1.4.13/lib/exitfail.o differ diff --git a/coreseek/m4-1.4.13/lib/fatal-signal.c b/coreseek/m4-1.4.13/lib/fatal-signal.c new file mode 100644 index 0000000..df9e011 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fatal-signal.c @@ -0,0 +1,286 @@ +/* Emergency actions in case of a fatal signal. + Copyright (C) 2003-2004, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include + +/* Specification. */ +#include "fatal-signal.h" + +#include +#include +#include +#include + +#include "sig-handler.h" +#include "xalloc.h" + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +/* ========================================================================= */ + + +/* The list of fatal signals. + These are those signals whose default action is to terminate the process + without a core dump, except + SIGKILL - because it cannot be caught, + SIGALRM SIGUSR1 SIGUSR2 SIGPOLL SIGIO SIGLOST - because applications + often use them for their own purpose, + SIGPROF SIGVTALRM - because they are used for profiling, + SIGSTKFLT - because it is more similar to SIGFPE, SIGSEGV, SIGBUS, + SIGSYS - because it is more similar to SIGABRT, SIGSEGV, + SIGPWR - because it of too special use, + SIGRTMIN...SIGRTMAX - because they are reserved for application use. + plus + SIGXCPU, SIGXFSZ - because they are quite similar to SIGTERM. */ + +static int fatal_signals[] = + { + /* ISO C 99 signals. */ +#ifdef SIGINT + SIGINT, +#endif +#ifdef SIGTERM + SIGTERM, +#endif + /* POSIX:2001 signals. */ +#ifdef SIGHUP + SIGHUP, +#endif +#ifdef SIGPIPE + SIGPIPE, +#endif + /* BSD signals. */ +#ifdef SIGXCPU + SIGXCPU, +#endif +#ifdef SIGXFSZ + SIGXFSZ, +#endif + /* Woe32 signals. */ +#ifdef SIGBREAK + SIGBREAK, +#endif + 0 + }; + +#define num_fatal_signals (SIZEOF (fatal_signals) - 1) + +/* Eliminate signals whose signal handler is SIG_IGN. */ + +static void +init_fatal_signals (void) +{ + static bool fatal_signals_initialized = false; + if (!fatal_signals_initialized) + { + size_t i; + + for (i = 0; i < num_fatal_signals; i++) + { + struct sigaction action; + + if (sigaction (fatal_signals[i], NULL, &action) >= 0 + && get_handler (&action) == SIG_IGN) + fatal_signals[i] = -1; + } + + fatal_signals_initialized = true; + } +} + + +/* ========================================================================= */ + + +typedef void (*action_t) (void); + +/* Type of an entry in the actions array. + The 'action' field is accessed from within the fatal_signal_handler(), + therefore we mark it as 'volatile'. */ +typedef struct +{ + volatile action_t action; +} +actions_entry_t; + +/* The registered cleanup actions. */ +static actions_entry_t static_actions[32]; +static actions_entry_t * volatile actions = static_actions; +static sig_atomic_t volatile actions_count = 0; +static size_t actions_allocated = SIZEOF (static_actions); + + +/* The saved signal handlers. + Size 32 would not be sufficient: On HP-UX, SIGXCPU = 33, SIGXFSZ = 34. */ +static struct sigaction saved_sigactions[64]; + + +/* Uninstall the handlers. */ +static inline void +uninstall_handlers () +{ + size_t i; + + for (i = 0; i < num_fatal_signals; i++) + if (fatal_signals[i] >= 0) + { + int sig = fatal_signals[i]; + if (saved_sigactions[sig].sa_handler == SIG_IGN) + saved_sigactions[sig].sa_handler = SIG_DFL; + sigaction (sig, &saved_sigactions[sig], NULL); + } +} + + +/* The signal handler. It gets called asynchronously. */ +static void +fatal_signal_handler (int sig) +{ + for (;;) + { + /* Get the last registered cleanup action, in a reentrant way. */ + action_t action; + size_t n = actions_count; + if (n == 0) + break; + n--; + actions_count = n; + action = actions[n].action; + /* Execute the action. */ + action (); + } + + /* Now execute the signal's default action. + If the signal being delivered was blocked, the re-raised signal would be + delivered when this handler returns. But the way we install this handler, + no signal is blocked, and the re-raised signal is delivered already + during raise(). */ + uninstall_handlers (); + raise (sig); +} + + +/* Install the handlers. */ +static inline void +install_handlers () +{ + size_t i; + struct sigaction action; + + action.sa_handler = &fatal_signal_handler; + /* If we get a fatal signal while executing fatal_signal_handler, enter + fatal_signal_handler recursively, since it is reentrant. Hence no + SA_RESETHAND. */ + action.sa_flags = SA_NODEFER; + sigemptyset (&action.sa_mask); + for (i = 0; i < num_fatal_signals; i++) + if (fatal_signals[i] >= 0) + { + int sig = fatal_signals[i]; + + if (!(sig < sizeof (saved_sigactions) / sizeof (saved_sigactions[0]))) + abort (); + sigaction (sig, &action, &saved_sigactions[sig]); + } +} + + +/* Register a cleanup function to be executed when a catchable fatal signal + occurs. */ +void +at_fatal_signal (action_t action) +{ + static bool cleanup_initialized = false; + if (!cleanup_initialized) + { + init_fatal_signals (); + install_handlers (); + cleanup_initialized = true; + } + + if (actions_count == actions_allocated) + { + /* Extend the actions array. Note that we cannot use xrealloc(), + because then the cleanup() function could access an already + deallocated array. */ + actions_entry_t *old_actions = actions; + size_t old_actions_allocated = actions_allocated; + size_t new_actions_allocated = 2 * actions_allocated; + actions_entry_t *new_actions = + XNMALLOC (new_actions_allocated, actions_entry_t); + size_t k; + + /* Don't use memcpy() here, because memcpy takes non-volatile arguments + and is therefore not guaranteed to complete all memory stores before + the next statement. */ + for (k = 0; k < old_actions_allocated; k++) + new_actions[k] = old_actions[k]; + actions = new_actions; + actions_allocated = new_actions_allocated; + /* Now we can free the old actions array. */ + if (old_actions != static_actions) + free (old_actions); + } + /* The two uses of 'volatile' in the types above (and ISO C 99 section + 5.1.2.3.(5)) ensure that we increment the actions_count only after + the new action has been written to the memory location + actions[actions_count]. */ + actions[actions_count].action = action; + actions_count++; +} + + +/* ========================================================================= */ + + +static sigset_t fatal_signal_set; + +static void +init_fatal_signal_set () +{ + static bool fatal_signal_set_initialized = false; + if (!fatal_signal_set_initialized) + { + size_t i; + + init_fatal_signals (); + + sigemptyset (&fatal_signal_set); + for (i = 0; i < num_fatal_signals; i++) + if (fatal_signals[i] >= 0) + sigaddset (&fatal_signal_set, fatal_signals[i]); + + fatal_signal_set_initialized = true; + } +} + +/* Temporarily delay the catchable fatal signals. */ +void +block_fatal_signals () +{ + init_fatal_signal_set (); + sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); +} + +/* Stop delaying the catchable fatal signals. */ +void +unblock_fatal_signals () +{ + init_fatal_signal_set (); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); +} diff --git a/coreseek/m4-1.4.13/lib/fatal-signal.h b/coreseek/m4-1.4.13/lib/fatal-signal.h new file mode 100644 index 0000000..6cc2884 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fatal-signal.h @@ -0,0 +1,76 @@ +/* Emergency actions in case of a fatal signal. + Copyright (C) 2003-2004 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* It is often useful to do some cleanup action when a usually fatal signal + terminates the process, like removing a temporary file or killing a + subprocess that may be stuck waiting for a device, pipe or network input. + Such signals are SIGHUP, SIGINT, SIGPIPE, SIGTERM, and possibly others. + The limitation of this facility is that it cannot work for SIGKILL. + + Signals with a SIG_IGN handler are considered to be non-fatal. The + functions in this file assume that when a SIG_IGN handler is installed + for a signal, it was installed before any functions in this file were + called and it stays so for the whole lifetime of the process. */ + +/* Register a cleanup function to be executed when a catchable fatal signal + occurs. + + Restrictions for the cleanup function: + - The cleanup function can do all kinds of system calls. + - It can also access application dependent memory locations and data + structures provided they are in a consistent state. One way to ensure + this is through block_fatal_signals()/unblock_fatal_signals(), see + below. Another - more tricky - way to ensure this is the careful use + of 'volatile'. + However, + - malloc() and similarly complex facilities are not safe to be called + because they are not guaranteed to be in a consistent state. + - Also, the cleanup function must not block the catchable fatal signals + and leave them blocked upon return. + + The cleanup function is executed asynchronously. It is unspecified + whether during its execution the catchable fatal signals are blocked + or not. */ +extern void at_fatal_signal (void (*function) (void)); + + +/* Sometimes it is necessary to block the usually fatal signals while the + data structures being accessed by the cleanup action are being built or + reorganized. This is the case, for example, when a temporary file or + directory is created through mkstemp() or mkdtemp(), because these + functions create the temporary file or directory _before_ returning its + name to the application. */ + +/* Temporarily delay the catchable fatal signals. + The signals will be blocked (= delayed) until the next call to + unblock_fatal_signals(). If the signals are already blocked, a further + call to block_fatal_signals() has no effect. */ +extern void block_fatal_signals (void); + +/* Stop delaying the catchable fatal signals. */ +extern void unblock_fatal_signals (void); + + +#ifdef __cplusplus +} +#endif diff --git a/coreseek/m4-1.4.13/lib/fatal-signal.o b/coreseek/m4-1.4.13/lib/fatal-signal.o new file mode 100644 index 0000000..837bf4d Binary files /dev/null and b/coreseek/m4-1.4.13/lib/fatal-signal.o differ diff --git a/coreseek/m4-1.4.13/lib/fcntl.h b/coreseek/m4-1.4.13/lib/fcntl.h new file mode 100644 index 0000000..a8cf955 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fcntl.h @@ -0,0 +1,145 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Like , but with non-working flags defined to 0. + + Copyright (C) 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* written by Paul Eggert */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#if defined __need_system_fcntl_h +/* Special invocation convention. */ + +#include +#include +#include +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_FCNTL_H + +#include +#include +#include +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_FCNTL_H +#define _GL_FCNTL_H + + +/* Declare overridden functions. */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if 1 +# if 0 +# undef open +# define open rpl_open +extern int open (const char *filename, int flags, ...); +# endif +#endif + +#ifdef FCHDIR_REPLACEMENT +/* gnulib internal function. */ +extern void _gl_register_fd (int fd, const char *filename); +#endif + +#ifdef __cplusplus +} +#endif + + +/* Fix up the O_* macros. */ + +#if !defined O_DIRECT && defined O_DIRECTIO +/* Tru64 spells it `O_DIRECTIO'. */ +# define O_DIRECT O_DIRECTIO +#endif + +#ifndef O_DIRECT +# define O_DIRECT 0 +#endif + +#ifndef O_DIRECTORY +# define O_DIRECTORY 0 +#endif + +#ifndef O_DSYNC +# define O_DSYNC 0 +#endif + +#ifndef O_NDELAY +# define O_NDELAY 0 +#endif + +#ifndef O_NOATIME +# define O_NOATIME 0 +#endif + +#ifndef O_NONBLOCK +# define O_NONBLOCK O_NDELAY +#endif + +#ifndef O_NOCTTY +# define O_NOCTTY 0 +#endif + +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#ifndef O_NOLINKS +# define O_NOLINKS 0 +#endif + +#ifndef O_RSYNC +# define O_RSYNC 0 +#endif + +#ifndef O_SYNC +# define O_SYNC 0 +#endif + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in fcntl.h */ +#if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ +# define O_BINARY _O_BINARY +# define O_TEXT _O_TEXT +#endif + +#if defined __BEOS__ || defined __HAIKU__ + /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ +# undef O_BINARY +# undef O_TEXT +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +# define O_TEXT 0 +#endif + + +#endif /* _GL_FCNTL_H */ +#endif /* _GL_FCNTL_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/fcntl.in.h b/coreseek/m4-1.4.13/lib/fcntl.in.h new file mode 100644 index 0000000..fd7520e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fcntl.in.h @@ -0,0 +1,144 @@ +/* Like , but with non-working flags defined to 0. + + Copyright (C) 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* written by Paul Eggert */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_system_fcntl_h +/* Special invocation convention. */ + +#include +#include +#include +#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_FCNTL_H + +#include +#include +#include +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_FCNTL_H@ + +#ifndef _GL_FCNTL_H +#define _GL_FCNTL_H + + +/* Declare overridden functions. */ + +#ifdef __cplusplus +extern "C" { +#endif + +#if @GNULIB_OPEN@ +# if @REPLACE_OPEN@ +# undef open +# define open rpl_open +extern int open (const char *filename, int flags, ...); +# endif +#endif + +#ifdef FCHDIR_REPLACEMENT +/* gnulib internal function. */ +extern void _gl_register_fd (int fd, const char *filename); +#endif + +#ifdef __cplusplus +} +#endif + + +/* Fix up the O_* macros. */ + +#if !defined O_DIRECT && defined O_DIRECTIO +/* Tru64 spells it `O_DIRECTIO'. */ +# define O_DIRECT O_DIRECTIO +#endif + +#ifndef O_DIRECT +# define O_DIRECT 0 +#endif + +#ifndef O_DIRECTORY +# define O_DIRECTORY 0 +#endif + +#ifndef O_DSYNC +# define O_DSYNC 0 +#endif + +#ifndef O_NDELAY +# define O_NDELAY 0 +#endif + +#ifndef O_NOATIME +# define O_NOATIME 0 +#endif + +#ifndef O_NONBLOCK +# define O_NONBLOCK O_NDELAY +#endif + +#ifndef O_NOCTTY +# define O_NOCTTY 0 +#endif + +#ifndef O_NOFOLLOW +# define O_NOFOLLOW 0 +#endif + +#ifndef O_NOLINKS +# define O_NOLINKS 0 +#endif + +#ifndef O_RSYNC +# define O_RSYNC 0 +#endif + +#ifndef O_SYNC +# define O_SYNC 0 +#endif + +/* For systems that distinguish between text and binary I/O. + O_BINARY is usually declared in fcntl.h */ +#if !defined O_BINARY && defined _O_BINARY + /* For MSC-compatible compilers. */ +# define O_BINARY _O_BINARY +# define O_TEXT _O_TEXT +#endif + +#if defined __BEOS__ || defined __HAIKU__ + /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ +# undef O_BINARY +# undef O_TEXT +#endif + +#ifndef O_BINARY +# define O_BINARY 0 +# define O_TEXT 0 +#endif + + +#endif /* _GL_FCNTL_H */ +#endif /* _GL_FCNTL_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/fd-safer.c b/coreseek/m4-1.4.13/lib/fd-safer.c new file mode 100644 index 0000000..fb99001 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fd-safer.c @@ -0,0 +1,50 @@ +/* Return a safer copy of a file descriptor. + + Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +#include "unistd-safer.h" + +#include + +#include + +/* Return FD, unless FD would be a copy of standard input, output, or + error; in that case, return a duplicate of FD, closing FD. On + failure to duplicate, close FD, set errno, and return -1. Preserve + errno if FD is negative, so that the caller can always inspect + errno when the returned value is negative. + + This function is usefully wrapped around functions that return file + descriptors, e.g., fd_safer (open ("file", O_RDONLY)). */ + +int +fd_safer (int fd) +{ + if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) + { + int f = dup_safer (fd); + int e = errno; + close (fd); + errno = e; + fd = f; + } + + return fd; +} diff --git a/coreseek/m4-1.4.13/lib/fd-safer.o b/coreseek/m4-1.4.13/lib/fd-safer.o new file mode 100644 index 0000000..f26750b Binary files /dev/null and b/coreseek/m4-1.4.13/lib/fd-safer.o differ diff --git a/coreseek/m4-1.4.13/lib/fflush.c b/coreseek/m4-1.4.13/lib/fflush.c new file mode 100644 index 0000000..9f75ccd --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fflush.c @@ -0,0 +1,204 @@ +/* fflush.c -- allow flushing input streams + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake. */ + +#include + +/* Specification. */ +#include + +#include +#include + +#include "freading.h" +#include "fpurge.h" + +#include "stdio-impl.h" + +#undef fflush + + +#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + +/* Clear the stream's ungetc buffer, preserving the value of ftello (fp). */ +static inline void +clear_ungetc_buffer_preserving_position (FILE *fp) +{ + if (fp->_flags & _IO_IN_BACKUP) + /* _IO_free_backup_area is a bit complicated. Simply call fseek. */ + fseek (fp, 0, SEEK_CUR); +} + +#else + +/* Clear the stream's ungetc buffer. May modify the value of ftello (fp). */ +static inline void +clear_ungetc_buffer (FILE *fp) +{ +# if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + if (HASUB (fp)) + { + fp_->_p += fp_->_r; + fp_->_r = 0; + } +# elif defined __EMX__ /* emx+gcc */ + if (fp->_ungetc_count > 0) + { + fp->_ungetc_count = 0; + fp->_rcount = - fp->_rcount; + } +# elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + /* Nothing to do. */ +# else /* other implementations */ + fseek (fp, 0, SEEK_CUR); +# endif +} + +#endif + +#if (defined __sferror || defined __DragonFly__) && defined __SNPT /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + +static inline int +disable_seek_optimization (FILE *fp) +{ + int saved_flags = fp_->_flags & (__SOPT | __SNPT); + fp_->_flags = (fp_->_flags & ~__SOPT) | __SNPT; + return saved_flags; +} + +static inline void +restore_seek_optimization (FILE *fp, int saved_flags) +{ + fp_->_flags = (fp_->_flags & ~(__SOPT | __SNPT)) | saved_flags; +} + +#endif + +static inline void +update_fpos_cache (FILE *fp, off_t pos) +{ +#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_offset = pos; + fp_->_flags |= __SOFF; +#endif +} + +/* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. */ +int +rpl_fflush (FILE *stream) +{ + /* When stream is NULL, POSIX and C99 only require flushing of "output + streams and update streams in which the most recent operation was not + input", and all implementations do this. + + When stream is "an output stream or an update stream in which the most + recent operation was not input", POSIX and C99 requires that fflush + writes out any buffered data, and all implementations do this. + + When stream is, however, an input stream or an update stream in + which the most recent operation was input, C99 specifies nothing, + and POSIX only specifies behavior if the stream is seekable. + mingw, in particular, drops the input buffer, leaving the file + descriptor positioned at the end of the input buffer. I.e. ftell + (stream) is lost. We don't want to call the implementation's + fflush in this case. + + We test ! freading (stream) here, rather than fwriting (stream), because + what we need to know is whether the stream holds a "read buffer", and on + mingw this is indicated by _IOREAD, regardless of _IOWRT. */ + if (stream == NULL || ! freading (stream)) + return fflush (stream); + +#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + + clear_ungetc_buffer_preserving_position (stream); + + return fflush (stream); + +#else + { + /* Notes about the file-position indicator: + 1) The file position indicator is incremented by fgetc() and decremented + by ungetc(): + + "... the fgetc() function shall ... advance the associated file + position indicator for the stream ..." + + "The file-position indicator is decremented by each successful + call to ungetc()..." + 2) says: + "The value of the file-position indicator for the stream after + reading or discarding all pushed-back bytes shall be the same + as it was before the bytes were pushed back." + Here we are discarding all pushed-back bytes. But more specifically, + 3) says: + "[After fflush(),] the file offset of the underlying open file + description shall be set to the file position of the stream, and + any characters pushed back onto the stream by ungetc() ... shall + be discarded." */ + + /* POSIX does not specify fflush behavior for non-seekable input + streams. Some implementations purge unread data, some return + EBADF, some do nothing. */ + off_t pos = ftello (stream); + if (pos == -1) + { + errno = EBADF; + return EOF; + } + + /* Clear the ungetc buffer. */ + clear_ungetc_buffer (stream); + + /* To get here, we must be flushing a seekable input stream, so the + semantics of fpurge are now appropriate to clear the buffer. To + avoid losing data, the lseek is also necessary. */ + { + int result = fpurge (stream); + if (result != 0) + return result; + } + +# if (defined __sferror || defined __DragonFly__) && defined __SNPT /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + + { + /* Disable seek optimization for the next fseeko call. This tells the + following fseeko call to seek to the desired position directly, rather + than to seek to a block-aligned boundary. */ + int saved_flags = disable_seek_optimization (stream); + int result = fseeko (stream, pos, SEEK_SET); + + restore_seek_optimization (stream, saved_flags); + return result; + } + +# else + + pos = lseek (fileno (stream), pos, SEEK_SET); + if (pos == -1) + return EOF; + /* After a successful lseek, update the file descriptor's position cache + in the stream. */ + update_fpos_cache (stream, pos); + + return 0; + +# endif + } +#endif +} diff --git a/coreseek/m4-1.4.13/lib/fflush.o b/coreseek/m4-1.4.13/lib/fflush.o new file mode 100644 index 0000000..eb01dec Binary files /dev/null and b/coreseek/m4-1.4.13/lib/fflush.o differ diff --git a/coreseek/m4-1.4.13/lib/filenamecat.c b/coreseek/m4-1.4.13/lib/filenamecat.c new file mode 100644 index 0000000..ef46de2 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/filenamecat.c @@ -0,0 +1,102 @@ +/* Concatenate two arbitrary file names. + + Copyright (C) 1996-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#include + +/* Specification. */ +#include "filenamecat.h" + +#include +#include + +#include "dirname.h" +#include "xalloc.h" + +#if ! HAVE_MEMPCPY && ! defined mempcpy +# define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) +#endif + +/* Return the longest suffix of F that is a relative file name. + If it has no such suffix, return the empty string. */ + +static char const * +longest_relative_suffix (char const *f) +{ + for (f += FILE_SYSTEM_PREFIX_LEN (f); ISSLASH (*f); f++) + continue; + return f; +} + +/* Concatenate two file name components, DIR and ABASE, in + newly-allocated storage and return the result. + The resulting file name F is such that the commands "ls F" and "(cd + DIR; ls BASE)" refer to the same file, where BASE is ABASE with any + file system prefixes and leading separators removed. + Arrange for a directory separator if necessary between DIR and BASE + in the result, removing any redundant separators. + In any case, if BASE_IN_RESULT is non-NULL, set + *BASE_IN_RESULT to point to the copy of ABASE in the returned + concatenation. However, if ABASE begins with more than one slash, + set *BASE_IN_RESULT to point to the sole corresponding slash that + is copied into the result buffer. + + Return NULL if malloc fails. */ + +char * +mfile_name_concat (char const *dir, char const *abase, char **base_in_result) +{ + char const *dirbase = last_component (dir); + size_t dirbaselen = base_len (dirbase); + size_t dirlen = dirbase - dir + dirbaselen; + size_t needs_separator = (dirbaselen && ! ISSLASH (dirbase[dirbaselen - 1])); + + char const *base = longest_relative_suffix (abase); + size_t baselen = strlen (base); + + char *p_concat = malloc (dirlen + needs_separator + baselen + 1); + char *p; + + if (p_concat == NULL) + return NULL; + + p = mempcpy (p_concat, dir, dirlen); + *p = DIRECTORY_SEPARATOR; + p += needs_separator; + + if (base_in_result) + *base_in_result = p - IS_ABSOLUTE_FILE_NAME (abase); + + p = mempcpy (p, base, baselen); + *p = '\0'; + + return p_concat; +} + +/* Just like mfile_name_concat, above, except, rather than + returning NULL upon malloc failure, here, we report the + "memory exhausted" condition and exit. */ + +char * +file_name_concat (char const *dir, char const *abase, char **base_in_result) +{ + char *p = mfile_name_concat (dir, abase, base_in_result); + if (p == NULL) + xalloc_die (); + return p; +} diff --git a/coreseek/m4-1.4.13/lib/filenamecat.h b/coreseek/m4-1.4.13/lib/filenamecat.h new file mode 100644 index 0000000..334c887 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/filenamecat.h @@ -0,0 +1,24 @@ +/* Concatenate two arbitrary file names. + + Copyright (C) 1996, 1997, 2003, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +char *file_name_concat (char const *dir, char const *base, + char **base_in_result); + +char *mfile_name_concat (char const *dir, char const *base, + char **base_in_result); diff --git a/coreseek/m4-1.4.13/lib/filenamecat.o b/coreseek/m4-1.4.13/lib/filenamecat.o new file mode 100644 index 0000000..284a0d1 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/filenamecat.o differ diff --git a/coreseek/m4-1.4.13/lib/float+.h b/coreseek/m4-1.4.13/lib/float+.h new file mode 100644 index 0000000..240fe36 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/float+.h @@ -0,0 +1,148 @@ +/* Supplemental information about the floating-point formats. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _FLOATPLUS_H +#define _FLOATPLUS_H + +#include +#include + +/* Number of bits in the mantissa of a floating-point number, including the + "hidden bit". */ +#if FLT_RADIX == 2 +# define FLT_MANT_BIT FLT_MANT_DIG +# define DBL_MANT_BIT DBL_MANT_DIG +# define LDBL_MANT_BIT LDBL_MANT_DIG +#elif FLT_RADIX == 4 +# define FLT_MANT_BIT (FLT_MANT_DIG * 2) +# define DBL_MANT_BIT (DBL_MANT_DIG * 2) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) +#elif FLT_RADIX == 16 +# define FLT_MANT_BIT (FLT_MANT_DIG * 4) +# define DBL_MANT_BIT (DBL_MANT_DIG * 4) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) +#endif + +/* Bit mask that can be used to mask the exponent, as an unsigned number. */ +#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) +#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) + +/* Number of bits used for the exponent of a floating-point number, including + the exponent's sign. */ +#define FLT_EXP_BIT \ + (FLT_EXP_MASK < 0x100 ? 8 : \ + FLT_EXP_MASK < 0x200 ? 9 : \ + FLT_EXP_MASK < 0x400 ? 10 : \ + FLT_EXP_MASK < 0x800 ? 11 : \ + FLT_EXP_MASK < 0x1000 ? 12 : \ + FLT_EXP_MASK < 0x2000 ? 13 : \ + FLT_EXP_MASK < 0x4000 ? 14 : \ + FLT_EXP_MASK < 0x8000 ? 15 : \ + FLT_EXP_MASK < 0x10000 ? 16 : \ + FLT_EXP_MASK < 0x20000 ? 17 : \ + FLT_EXP_MASK < 0x40000 ? 18 : \ + FLT_EXP_MASK < 0x80000 ? 19 : \ + FLT_EXP_MASK < 0x100000 ? 20 : \ + FLT_EXP_MASK < 0x200000 ? 21 : \ + FLT_EXP_MASK < 0x400000 ? 22 : \ + FLT_EXP_MASK < 0x800000 ? 23 : \ + FLT_EXP_MASK < 0x1000000 ? 24 : \ + FLT_EXP_MASK < 0x2000000 ? 25 : \ + FLT_EXP_MASK < 0x4000000 ? 26 : \ + FLT_EXP_MASK < 0x8000000 ? 27 : \ + FLT_EXP_MASK < 0x10000000 ? 28 : \ + FLT_EXP_MASK < 0x20000000 ? 29 : \ + FLT_EXP_MASK < 0x40000000 ? 30 : \ + FLT_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define DBL_EXP_BIT \ + (DBL_EXP_MASK < 0x100 ? 8 : \ + DBL_EXP_MASK < 0x200 ? 9 : \ + DBL_EXP_MASK < 0x400 ? 10 : \ + DBL_EXP_MASK < 0x800 ? 11 : \ + DBL_EXP_MASK < 0x1000 ? 12 : \ + DBL_EXP_MASK < 0x2000 ? 13 : \ + DBL_EXP_MASK < 0x4000 ? 14 : \ + DBL_EXP_MASK < 0x8000 ? 15 : \ + DBL_EXP_MASK < 0x10000 ? 16 : \ + DBL_EXP_MASK < 0x20000 ? 17 : \ + DBL_EXP_MASK < 0x40000 ? 18 : \ + DBL_EXP_MASK < 0x80000 ? 19 : \ + DBL_EXP_MASK < 0x100000 ? 20 : \ + DBL_EXP_MASK < 0x200000 ? 21 : \ + DBL_EXP_MASK < 0x400000 ? 22 : \ + DBL_EXP_MASK < 0x800000 ? 23 : \ + DBL_EXP_MASK < 0x1000000 ? 24 : \ + DBL_EXP_MASK < 0x2000000 ? 25 : \ + DBL_EXP_MASK < 0x4000000 ? 26 : \ + DBL_EXP_MASK < 0x8000000 ? 27 : \ + DBL_EXP_MASK < 0x10000000 ? 28 : \ + DBL_EXP_MASK < 0x20000000 ? 29 : \ + DBL_EXP_MASK < 0x40000000 ? 30 : \ + DBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define LDBL_EXP_BIT \ + (LDBL_EXP_MASK < 0x100 ? 8 : \ + LDBL_EXP_MASK < 0x200 ? 9 : \ + LDBL_EXP_MASK < 0x400 ? 10 : \ + LDBL_EXP_MASK < 0x800 ? 11 : \ + LDBL_EXP_MASK < 0x1000 ? 12 : \ + LDBL_EXP_MASK < 0x2000 ? 13 : \ + LDBL_EXP_MASK < 0x4000 ? 14 : \ + LDBL_EXP_MASK < 0x8000 ? 15 : \ + LDBL_EXP_MASK < 0x10000 ? 16 : \ + LDBL_EXP_MASK < 0x20000 ? 17 : \ + LDBL_EXP_MASK < 0x40000 ? 18 : \ + LDBL_EXP_MASK < 0x80000 ? 19 : \ + LDBL_EXP_MASK < 0x100000 ? 20 : \ + LDBL_EXP_MASK < 0x200000 ? 21 : \ + LDBL_EXP_MASK < 0x400000 ? 22 : \ + LDBL_EXP_MASK < 0x800000 ? 23 : \ + LDBL_EXP_MASK < 0x1000000 ? 24 : \ + LDBL_EXP_MASK < 0x2000000 ? 25 : \ + LDBL_EXP_MASK < 0x4000000 ? 26 : \ + LDBL_EXP_MASK < 0x8000000 ? 27 : \ + LDBL_EXP_MASK < 0x10000000 ? 28 : \ + LDBL_EXP_MASK < 0x20000000 ? 29 : \ + LDBL_EXP_MASK < 0x40000000 ? 30 : \ + LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) + +/* Number of bits used for a floating-point number: the mantissa (not + counting the "hidden bit", since it may or may not be explicit), the + exponent, and the sign. */ +#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) +#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) +#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) + +/* Number of bytes used for a floating-point number. + This can be smaller than the 'sizeof'. For example, on i386 systems, + 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence + LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but + sizeof (long double) = 12 or = 16. */ +#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) + +/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ +typedef int verify_sizeof_flt[2 * (SIZEOF_FLT <= sizeof (float)) - 1]; +typedef int verify_sizeof_dbl[2 * (SIZEOF_DBL <= sizeof (double)) - 1]; +typedef int verify_sizeof_ldbl[2 * (SIZEOF_LDBL <= sizeof (long double)) - 1]; + +#endif /* _FLOATPLUS_H */ diff --git a/coreseek/m4-1.4.13/lib/float.in.h b/coreseek/m4-1.4.13/lib/float.in.h new file mode 100644 index 0000000..9ba2bce --- /dev/null +++ b/coreseek/m4-1.4.13/lib/float.in.h @@ -0,0 +1,62 @@ +/* A correct . + + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_FLOAT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_FLOAT_H@ + +#ifndef _GL_FLOAT_H +#define _GL_FLOAT_H + +/* 'long double' properties. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +/* Number of mantissa units, in base FLT_RADIX. */ +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 64 +/* Number of decimal digits that is sufficient for representing a number. */ +# undef LDBL_DIG +# define LDBL_DIG 18 +/* x-1 where x is the smallest representable number > 1. */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 1.0842021724855044340E-19L +/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ +# undef LDBL_MAX_EXP +# define LDBL_MAX_EXP 16384 +/* Minimum positive normalized number. */ +# undef LDBL_MIN +# define LDBL_MIN 3.3621031431120935063E-4932L +/* Maximum representable finite number. */ +# undef LDBL_MAX +# define LDBL_MAX 1.1897314953572317650E+4932L +/* Minimum e such that 10^e is in the range of normalized numbers. */ +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP (-4931) +/* Maximum e such that 10^e is in the range of representable finite numbers. */ +# undef LDBL_MAX_10_EXP +# define LDBL_MAX_10_EXP 4932 +#endif + +#endif /* _GL_FLOAT_H */ +#endif /* _GL_FLOAT_H */ diff --git a/coreseek/m4-1.4.13/lib/fopen-safer.c b/coreseek/m4-1.4.13/lib/fopen-safer.c new file mode 100644 index 0000000..9c79922 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fopen-safer.c @@ -0,0 +1,64 @@ +/* Invoke fopen, but avoid some glitches. + + Copyright (C) 2001, 2004, 2005, 2006, 2009 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +#include "stdio-safer.h" + +#include +#include +#include "unistd-safer.h" + +/* Like fopen, but do not return stdin, stdout, or stderr. */ + +FILE * +fopen_safer (char const *file, char const *mode) +{ + FILE *fp = fopen (file, mode); + + if (fp) + { + int fd = fileno (fp); + + if (0 <= fd && fd <= STDERR_FILENO) + { + int f = dup_safer (fd); + + if (f < 0) + { + int e = errno; + fclose (fp); + errno = e; + return NULL; + } + + if (fclose (fp) != 0 + || ! (fp = fdopen (f, mode))) + { + int e = errno; + close (f); + errno = e; + return NULL; + } + } + } + + return fp; +} diff --git a/coreseek/m4-1.4.13/lib/fopen-safer.o b/coreseek/m4-1.4.13/lib/fopen-safer.o new file mode 100644 index 0000000..4bda0d1 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/fopen-safer.o differ diff --git a/coreseek/m4-1.4.13/lib/fopen.c b/coreseek/m4-1.4.13/lib/fopen.c new file mode 100644 index 0000000..72610bd --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fopen.c @@ -0,0 +1,105 @@ +/* Open a stream to a file. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +/* Get the original definition of fopen. It might be defined as a macro. */ +#define __need_FILE +#include +#undef __need_FILE + +static inline FILE * +orig_fopen (const char *filename, const char *mode) +{ + return fopen (filename, mode); +} + +/* Specification. */ +#include + +#include +#include +#include +#include +#include +#include + +FILE * +rpl_fopen (const char *filename, const char *mode) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + if (strcmp (filename, "/dev/null") == 0) + filename = "NUL"; +#endif + +#if FOPEN_TRAILING_SLASH_BUG + /* If the filename ends in a slash and a mode that requires write access is + specified, then fail. + Rationale: POSIX + says that + "A pathname that contains at least one non-slash character and that + ends with one or more trailing slashes shall be resolved as if a + single dot character ( '.' ) were appended to the pathname." + and + "The special filename dot shall refer to the directory specified by + its predecessor." + If the named file already exists as a directory, then if a mode that + requires write access is specified, fopen() must fail because POSIX + says that it + fails with errno = EISDIR in this case. + If the named file does not exist or does not name a directory, then + fopen() must fail since the file does not contain a '.' directory. */ + { + size_t len = strlen (filename); + if (len > 0 && filename[len - 1] == '/') + { + int fd; + struct stat statbuf; + FILE *fp; + + if (mode[0] == 'w' || mode[0] == 'a') + { + errno = EISDIR; + return NULL; + } + + fd = open (filename, O_RDONLY); + if (fd < 0) + return NULL; + + if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) + { + close (fd); + errno = ENOTDIR; + return NULL; + } + + fp = fdopen (fd, mode); + if (fp == NULL) + { + int saved_errno = errno; + close (fd); + errno = saved_errno; + } + return fp; + } + } +# endif + + return orig_fopen (filename, mode); +} diff --git a/coreseek/m4-1.4.13/lib/fpending.c b/coreseek/m4-1.4.13/lib/fpending.c new file mode 100644 index 0000000..9250d6a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fpending.c @@ -0,0 +1,29 @@ +/* fpending.c -- return the number of pending output bytes on a stream + Copyright (C) 2000, 2004, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#include + +#include "fpending.h" + +/* Return the number of pending (aka buffered, unflushed) + bytes on the stream, FP, that is open for writing. */ +size_t +__fpending (FILE *fp) +{ + return PENDING_OUTPUT_N_BYTES; +} diff --git a/coreseek/m4-1.4.13/lib/fpending.h b/coreseek/m4-1.4.13/lib/fpending.h new file mode 100644 index 0000000..c6a493d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fpending.h @@ -0,0 +1,33 @@ +/* Declare __fpending. + + Copyright (C) 2000, 2003, 2005, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + Written by Jim Meyering. */ + +#include +#include + +#ifndef HAVE_DECL___FPENDING +"this configure-time declaration test was not run" +#endif + +#if HAVE_DECL___FPENDING +# if HAVE_STDIO_EXT_H +# include +# endif +#else +size_t __fpending (FILE *); +#endif diff --git a/coreseek/m4-1.4.13/lib/fpucw.h b/coreseek/m4-1.4.13/lib/fpucw.h new file mode 100644 index 0000000..a6226af --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fpucw.h @@ -0,0 +1,107 @@ +/* Manipulating the FPU control word. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _FPUCW_H +#define _FPUCW_H + +/* The i386 floating point hardware (the 387 compatible FPU, not the modern + SSE/SSE2 hardware) has a controllable rounding precision. It is specified + through the 'PC' bits in the FPU control word ('fctrl' register). (See + the GNU libc i386 header for details.) + + On some platforms, such as Linux or Solaris, the default precision setting + is set to "extended precision". This means that 'long double' instructions + operate correctly, but 'double' computations often produce slightly + different results as on strictly IEEE 754 conforming systems. + + On some platforms, such as NetBSD, the default precision is set to + "double precision". This means that 'long double' instructions will operate + only as 'double', i.e. lead wrong results. + + The FPU control word is under control of the application, i.e. it is + not required to be set either way by the ABI. (In fact, the i386 ABI + http://refspecs.freestandards.org/elf/abi386-4.pdf page 3-12 = page 38 + is not clear about it. But in any case, gcc treats the control word + like a "preserved" register: it emits code that assumes that the control + word is preserved across calls, and it restores the control word at the + end of functions that modify it.) + + See Vincent Lefèvre's page http://www.vinc17.org/research/extended.en.html + for a good explanation. + See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for + some argumentation which setting should be the default. */ + +/* This header file provides the following facilities: + fpucw_t integral type holding the value of 'fctrl' + FPU_PC_MASK bit mask denoting the precision control + FPU_PC_DOUBLE precision control for 53 bits mantissa + FPU_PC_EXTENDED precision control for 64 bits mantissa + GET_FPUCW () yields the current FPU control word + SET_FPUCW (word) sets the FPU control word + DECL_LONG_DOUBLE_ROUNDING variable declaration for + BEGIN/END_LONG_DOUBLE_ROUNDING + BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with + 'long double' safe operation precision + END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with + 'long double' safe operation precision + */ + +/* Inline assembler like this works only with GNU C. */ +#if (defined __i386__ || defined __x86_64__) && defined __GNUC__ + +typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ + +# define FPU_PC_MASK 0x0300 +# define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ +# define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ + +# define GET_FPUCW() \ + ({ fpucw_t _cw; \ + __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ + _cw; \ + }) +# define SET_FPUCW(word) \ + (void)({ fpucw_t _ncw = (word); \ + __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ + }) + +# define DECL_LONG_DOUBLE_ROUNDING \ + fpucw_t oldcw; +# define BEGIN_LONG_DOUBLE_ROUNDING() \ + (void)(oldcw = GET_FPUCW (), \ + SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) +# define END_LONG_DOUBLE_ROUNDING() \ + SET_FPUCW (oldcw) + +#else + +typedef unsigned int fpucw_t; + +# define FPU_PC_MASK 0 +# define FPU_PC_DOUBLE 0 +# define FPU_PC_EXTENDED 0 + +# define GET_FPUCW() 0 +# define SET_FPUCW(word) (void)(word) + +# define DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_LONG_DOUBLE_ROUNDING() +# define END_LONG_DOUBLE_ROUNDING() + +#endif + +#endif /* _FPUCW_H */ diff --git a/coreseek/m4-1.4.13/lib/fpurge.c b/coreseek/m4-1.4.13/lib/fpurge.c new file mode 100644 index 0000000..5e0d47d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fpurge.c @@ -0,0 +1,137 @@ +/* Flushing buffers of a FILE stream. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "fpurge.h" + +#if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7 */ +# include +#endif +#include + +#include "stdio-impl.h" + +int +fpurge (FILE *fp) +{ +#if HAVE___FPURGE /* glibc >= 2.2, Haiku, Solaris >= 7 */ + + __fpurge (fp); + /* The __fpurge function does not have a return value. */ + return 0; + +#elif HAVE_FPURGE /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X */ + + /* Call the system's fpurge function. */ +# undef fpurge +# if !HAVE_DECL_FPURGE + extern int fpurge (FILE *); +# endif + int result = fpurge (fp); +# if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + if (result == 0) + /* Correct the invariants that fpurge broke. + on BSD systems says: + "The following always hold: if _flags & __SRD, _w is 0." + If this invariant is not fulfilled and the stream is read-write but + currently writing, subsequent putc or fputc calls will write directly + into the buffer, although they shouldn't be allowed to. */ + if ((fp_->_flags & __SRD) != 0) + fp_->_w = 0; +# endif + return result; + +#else + + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +# if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_IO_read_end = fp->_IO_read_ptr; + fp->_IO_write_ptr = fp->_IO_write_base; + /* Avoid memory leak when there is an active ungetc buffer. */ + if (fp->_IO_save_base != NULL) + { + free (fp->_IO_save_base); + fp->_IO_save_base = NULL; + } + return 0; +# elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_p = fp_->_bf._base; + fp_->_r = 0; + fp_->_w = ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ + ? fp_->_bf._size + : 0); + /* Avoid memory leak when there is an active ungetc buffer. */ + if (fp_ub._base != NULL) + { + if (fp_ub._base != fp_->_ubuf) + free (fp_ub._base); + fp_ub._base = NULL; + } + return 0; +# elif defined __EMX__ /* emx+gcc */ + fp->_ptr = fp->_buffer; + fp->_rcount = 0; + fp->_wcount = 0; + fp->_ungetc_count = 0; + return 0; +# elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + fp->_ptr = fp->_base; + if (fp->_ptr != NULL) + fp->_cnt = 0; + return 0; +# elif defined __UCLIBC__ /* uClibc */ +# ifdef __STDIO_BUFFERS + if (fp->__modeflags & __FLAG_WRITING) + fp->__bufpos = fp->__bufstart; + else if (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) + fp->__bufpos = fp->__bufread; +# endif + return 0; +# elif defined __QNX__ /* QNX */ + fp->_Rback = fp->_Back + sizeof (fp->_Back); + fp->_Rsave = NULL; + if (fp->_Mode & 0x2000 /* _MWRITE */) + /* fp->_Buf <= fp->_Next <= fp->_Wend */ + fp->_Next = fp->_Buf; + else + /* fp->_Buf <= fp->_Next <= fp->_Rend */ + fp->_Rend = fp->_Next; + return 0; +# elif defined __MINT__ /* Atari FreeMiNT */ + if (fp->__pushed_back) + { + fp->__bufp = fp->__pushback_bufp; + fp->__pushed_back = 0; + } + /* Preserve the current file position. */ + if (fp->__target != -1) + fp->__target += fp->__bufp - fp->__buffer; + fp->__bufp = fp->__buffer; + /* Nothing in the buffer, next getc is nontrivial. */ + fp->__get_limit = fp->__bufp; + /* Nothing in the buffer, next putc is nontrivial. */ + fp->__put_limit = fp->__buffer; + return 0; +# else + #error "Please port gnulib fpurge.c to your platform! Look at the definitions of fflush, setvbuf and ungetc on your system, then report this to bug-gnulib." +# endif + +#endif +} diff --git a/coreseek/m4-1.4.13/lib/fpurge.h b/coreseek/m4-1.4.13/lib/fpurge.h new file mode 100644 index 0000000..d7150a1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fpurge.h @@ -0,0 +1,38 @@ +/* Flushing buffers of a FILE stream. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_FPURGE_H +#define _GL_FPURGE_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Discard all pending buffered I/O on the stream STREAM. + STREAM must not be wide-character oriented. + Return 0 if successful. Upon error, return -1 and set errno. */ +#if HAVE_FPURGE +# define fpurge rpl_fpurge +#endif +extern int fpurge (FILE *stream); + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_FPURGE_H */ diff --git a/coreseek/m4-1.4.13/lib/fpurge.o b/coreseek/m4-1.4.13/lib/fpurge.o new file mode 100644 index 0000000..de53fde Binary files /dev/null and b/coreseek/m4-1.4.13/lib/fpurge.o differ diff --git a/coreseek/m4-1.4.13/lib/freadahead.c b/coreseek/m4-1.4.13/lib/freadahead.c new file mode 100644 index 0000000..f4b5ed7 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/freadahead.c @@ -0,0 +1,85 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "freadahead.h" + +#include +#include "stdio-impl.h" + +size_t +freadahead (FILE *fp) +{ +#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_write_ptr > fp->_IO_write_base) + return 0; + return (fp->_IO_read_end - fp->_IO_read_ptr) + + (fp->_flags & _IO_IN_BACKUP ? fp->_IO_save_end - fp->_IO_save_base : + 0); +#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + if ((fp_->_flags & __SWR) != 0 || fp_->_r < 0) + return 0; +# if defined __DragonFly__ + return __sreadahead (fp); +# else + return fp_->_r + + (HASUB (fp) ? fp_->_ur : 0); +# endif +#elif defined __EMX__ /* emx+gcc */ + if ((fp->_flags & _IOWRT) != 0) + return 0; + /* Note: fp->_ungetc_count > 0 implies fp->_rcount <= 0, + fp->_ungetc_count = 0 implies fp->_rcount >= 0. */ + /* equivalent to + (fp->_ungetc_count == 0 ? fp->_rcount : fp->_ungetc_count - fp->_rcount) */ + return (fp->_rcount > 0 ? fp->_rcount : fp->_ungetc_count - fp->_rcount); +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + if ((fp_->_flag & _IOWRT) != 0) + return 0; + return fp_->_cnt; +#elif defined __UCLIBC__ /* uClibc */ +# ifdef __STDIO_BUFFERS + if (fp->__modeflags & __FLAG_WRITING) + return 0; + return (fp->__bufread - fp->__bufpos) + + (fp->__modeflags & __FLAG_UNGOT ? 1 : 0); +# else + return 0; +# endif +#elif defined __QNX__ /* QNX */ + if ((fp->_Mode & 0x2000 /* _MWRITE */) != 0) + return 0; + /* fp->_Buf <= fp->_Next <= fp->_Rend, + and fp->_Rend may be overridden by fp->_Rsave. */ + return ((fp->_Rsave ? fp->_Rsave : fp->_Rend) - fp->_Next) + + (fp->_Mode & 0x4000 /* _MBYTE */ + ? (fp->_Back + sizeof (fp->_Back)) - fp->_Rback + : 0); +#elif defined __MINT__ /* Atari FreeMiNT */ + if (!fp->__mode.__read) + return 0; + return (fp->__pushed_back + ? fp->__get_limit - fp->__pushback_bufp + 1 + : fp->__get_limit - fp->__bufp); +#elif defined SLOW_BUT_NO_HACKS /* users can define this */ + abort (); + return 0; +#else + #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib." +#endif +} diff --git a/coreseek/m4-1.4.13/lib/freadahead.h b/coreseek/m4-1.4.13/lib/freadahead.h new file mode 100644 index 0000000..96a97d1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/freadahead.h @@ -0,0 +1,38 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Assuming the stream STREAM is open for reading: + Return the number of bytes waiting in the input buffer of STREAM. + This includes both the bytes that have been read from the underlying input + source and the bytes that have been pushed back through 'ungetc'. + + If this number is 0 and the stream is not currently writing, + fflush (STREAM) is known to be a no-op. + + STREAM must not be wide-character oriented. */ + +extern size_t freadahead (FILE *stream); + +#ifdef __cplusplus +} +#endif diff --git a/coreseek/m4-1.4.13/lib/freadahead.o b/coreseek/m4-1.4.13/lib/freadahead.o new file mode 100644 index 0000000..0c31f7b Binary files /dev/null and b/coreseek/m4-1.4.13/lib/freadahead.o differ diff --git a/coreseek/m4-1.4.13/lib/freading.c b/coreseek/m4-1.4.13/lib/freading.c new file mode 100644 index 0000000..4da0e31 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/freading.c @@ -0,0 +1,64 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "freading.h" + +#include "stdio-impl.h" + +/* Don't use glibc's __freading function in glibc < 2.7, see + */ +#if !(HAVE___FREADING && (!defined __GLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7))) + +bool +freading (FILE *fp) +{ + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + return ((fp->_flags & _IO_NO_WRITES) != 0 + || ((fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) == 0 + && fp->_IO_read_base != NULL)); +#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + return (fp_->_flags & __SRD) != 0; +#elif defined __EMX__ /* emx+gcc */ + return (fp->_flags & _IOREAD) != 0; +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + return (fp->_flag & _IOREAD) != 0; +#elif defined __UCLIBC__ /* uClibc */ + return (fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) != 0; +#elif defined __QNX__ /* QNX */ + return ((fp->_Mode & 0x2 /* _MOPENW */) == 0 + || (fp->_Mode & 0x1000 /* _MREAD */) != 0); +#elif defined __MINT__ /* Atari FreeMiNT */ + if (!fp->__mode.__write) + return 1; + if (!fp->__mode.__read) + return 0; +# ifdef _IO_CURRENTLY_GETTING /* Flag added on 2009-02-28 */ + return (fp->__flags & _IO_CURRENTLY_GETTING) != 0; +# else + return (fp->__buffer < fp->__get_limit /*|| fp->__bufp == fp->__put_limit ??*/); +# endif +#else + #error "Please port gnulib freading.c to your platform!" +#endif +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/freading.h b/coreseek/m4-1.4.13/lib/freading.h new file mode 100644 index 0000000..5c41ae4 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/freading.h @@ -0,0 +1,53 @@ +/* Retrieve information about a FILE stream. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include +#include + +/* Return true if the stream STREAM is opened read-only, or if the + last operation on the stream was a read operation. Return false if + the stream is opened write-only or append-only, or if it supports + writing and there is no current read operation (such as fgetc). + + freading and fwriting will never both be true. If STREAM supports + both reads and writes, then: + - both freading and fwriting might be false when the stream is first + opened, after read encounters EOF, or after fflush, + - freading might be false or true and fwriting might be false + after repositioning (such as fseek, fsetpos, or rewind), + depending on the underlying implementation. + + STREAM must not be wide-character oriented. */ + +#if HAVE___FREADING && (!defined __GLIBC__ || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 7)) +/* Solaris >= 7, not glibc >= 2.2, but glibc >= 2.7 */ + +# include +# define freading(stream) (__freading (stream) != 0) + +#else + +# ifdef __cplusplus +extern "C" { +# endif + +extern bool freading (FILE *stream); + +# ifdef __cplusplus +} +# endif + +#endif diff --git a/coreseek/m4-1.4.13/lib/freading.o b/coreseek/m4-1.4.13/lib/freading.o new file mode 100644 index 0000000..74badaf Binary files /dev/null and b/coreseek/m4-1.4.13/lib/freading.o differ diff --git a/coreseek/m4-1.4.13/lib/frexp.c b/coreseek/m4-1.4.13/lib/frexp.c new file mode 100644 index 0000000..7e1f5d1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/frexp.c @@ -0,0 +1,166 @@ +/* Split a double into fraction and mantissa. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paolo Bonzini , 2003, and + Bruno Haible , 2007. */ + +#include + +/* Specification. */ +#include + +#include +#ifdef USE_LONG_DOUBLE +# include "isnanl-nolibm.h" +# include "fpucw.h" +#else +# include "isnand-nolibm.h" +#endif + +/* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater + than 2, or not even a power of 2, some rounding errors can occur, so that + then the returned mantissa is only guaranteed to be <= 1.0, not < 1.0. */ + +#ifdef USE_LONG_DOUBLE +# define FUNC frexpl +# define DOUBLE long double +# define ISNAN isnanl +# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () +# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () +# define L_(literal) literal##L +#else +# define FUNC frexp +# define DOUBLE double +# define ISNAN isnand +# define DECL_ROUNDING +# define BEGIN_ROUNDING() +# define END_ROUNDING() +# define L_(literal) literal +#endif + +DOUBLE +FUNC (DOUBLE x, int *expptr) +{ + int sign; + int exponent; + DECL_ROUNDING + + /* Test for NaN, infinity, and zero. */ + if (ISNAN (x) || x + x == x) + { + *expptr = 0; + return x; + } + + sign = 0; + if (x < 0) + { + x = - x; + sign = -1; + } + + BEGIN_ROUNDING (); + + { + /* Since the exponent is an 'int', it fits in 64 bits. Therefore the + loops are executed no more than 64 times. */ + DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ + DOUBLE powh[64]; /* powh[i] = 2^-2^i */ + int i; + + exponent = 0; + if (x >= L_(1.0)) + { + /* A positive exponent. */ + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x >= 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x >= pow2_i) + { + exponent += (1 << i); + x *= powh_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + /* Avoid making x too small, as it could become a denormalized + number and thus lose precision. */ + while (i > 0 && x < pow2[i - 1]) + { + i--; + powh_i = powh[i]; + } + exponent += (1 << i); + x *= powh_i; + /* Here 2^-2^i <= x < 1.0. */ + } + else + { + /* A negative or zero exponent. */ + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x < 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x < powh_i) + { + exponent -= (1 << i); + x *= pow2_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + /* Here 2^-2^i <= x < 1.0. */ + } + + /* Invariants: x * 2^exponent = argument, and 2^-2^i <= x < 1.0. */ + while (i > 0) + { + i--; + if (x < powh[i]) + { + exponent -= (1 << i); + x *= pow2[i]; + } + } + /* Here 0.5 <= x < 1.0. */ + } + + if (sign < 0) + x = - x; + + END_ROUNDING (); + + *expptr = exponent; + return x; +} diff --git a/coreseek/m4-1.4.13/lib/frexpl.c b/coreseek/m4-1.4.13/lib/frexpl.c new file mode 100644 index 0000000..d6f0d76 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/frexpl.c @@ -0,0 +1,18 @@ +/* Split a 'long double' into fraction and mantissa. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#define USE_LONG_DOUBLE +#include "frexp.c" diff --git a/coreseek/m4-1.4.13/lib/fseeko.c b/coreseek/m4-1.4.13/lib/fseeko.c new file mode 100644 index 0000000..cf7c42f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/fseeko.c @@ -0,0 +1,130 @@ +/* An fseeko() function that, together with fflush(), is POSIX compliant. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include + +/* Get off_t and lseek. */ +#include + +#include "stdio-impl.h" + +#undef fseeko +#if !HAVE_FSEEKO +# undef fseek +# define fseeko fseek +#endif + +int +rpl_fseeko (FILE *fp, off_t offset, int whence) +{ +#if LSEEK_PIPE_BROKEN + /* mingw gives bogus answers rather than failure on non-seekable files. */ + if (lseek (fileno (fp), 0, SEEK_CUR) == -1) + return EOF; +#endif + + /* These tests are based on fpurge.c. */ +#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + if (fp->_IO_read_end == fp->_IO_read_ptr + && fp->_IO_write_ptr == fp->_IO_write_base + && fp->_IO_save_base == NULL) +#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ +# if defined __SL64 && defined __SCLE /* Cygwin */ + if ((fp->_flags & __SL64) == 0) + { + /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit + mode; but has an fseeko that requires 64-bit mode. */ + FILE *tmp = fopen ("/dev/null", "r"); + if (!tmp) + return -1; + fp->_flags |= __SL64; + fp->_seek64 = tmp->_seek64; + fclose (tmp); + } +# endif + if (fp_->_p == fp_->_bf._base + && fp_->_r == 0 + && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ + ? fp_->_bf._size + : 0) + && fp_ub._base == NULL) +#elif defined __EMX__ /* emx+gcc */ + if (fp->_ptr == fp->_buffer + && fp->_rcount == 0 + && fp->_wcount == 0 + && fp->_ungetc_count == 0) +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + if (fp_->_ptr == fp_->_base + && (fp_->_ptr == NULL || fp_->_cnt == 0)) +#elif defined __UCLIBC__ /* uClibc */ + if (((fp->__modeflags & __FLAG_WRITING) == 0 + || fp->__bufpos == fp->__bufstart) + && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0 + || fp->__bufpos == fp->__bufread)) +#elif defined __QNX__ /* QNX */ + if ((fp->_Mode & _MWRITE ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend) + && fp->_Rback == fp->_Back + sizeof (fp->_Back) + && fp->_Rsave == NULL) +#elif defined __MINT__ /* Atari FreeMiNT */ + if (fp->__bufp == fp->__buffer + && fp->__get_limit == fp->__bufp + && fp->__put_limit == fp->__bufp + && !fp->__pushed_back) +#else + #error "Please port gnulib fseeko.c to your platform! Look at the code in fpurge.c, then report this to bug-gnulib." +#endif + { + /* We get here when an fflush() call immediately preceded this one. We + know there are no buffers. + POSIX requires us to modify the file descriptor's position. + But we cannot position beyond end of file here. */ + off_t pos = + lseek (fileno (fp), + whence == SEEK_END && offset > 0 ? 0 : offset, + whence); + if (pos == -1) + { +#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags &= ~__SOFF; +#endif + return -1; + } + +#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags &= ~_IO_EOF_SEEN; +#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_offset = pos; + fp_->_flags |= __SOFF; + fp_->_flags &= ~__SEOF; +#elif defined __EMX__ /* emx+gcc */ + fp->_flags &= ~_IOEOF; +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + fp->_flag &= ~_IOEOF; +#elif defined __MINT__ /* Atari FreeMiNT */ + fp->__offset = pos; + fp->__eof = 0; +#endif + /* If we were not requested to position beyond end of file, we're + done. */ + if (!(whence == SEEK_END && offset > 0)) + return 0; + } + return fseeko (fp, offset, whence); +} diff --git a/coreseek/m4-1.4.13/lib/fseeko.o b/coreseek/m4-1.4.13/lib/fseeko.o new file mode 100644 index 0000000..58e895f Binary files /dev/null and b/coreseek/m4-1.4.13/lib/fseeko.o differ diff --git a/coreseek/m4-1.4.13/lib/ftello.c b/coreseek/m4-1.4.13/lib/ftello.c new file mode 100644 index 0000000..f252408 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/ftello.c @@ -0,0 +1,54 @@ +/* An ftello() function that works around platform bugs. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Get lseek. */ +#include + +#undef ftello +#if !HAVE_FTELLO +# undef ftell +# define ftello ftell +#endif + +off_t +rpl_ftello (FILE *fp) +{ +#if LSEEK_PIPE_BROKEN + /* mingw gives bogus answers rather than failure on non-seekable files. */ + if (lseek (fileno (fp), 0, SEEK_CUR) == -1) + return -1; +#endif + +#if defined __SL64 && defined __SCLE /* Cygwin */ + if ((fp->_flags & __SL64) == 0) + { + /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit + mode; but has an ftello that requires 64-bit mode. */ + FILE *tmp = fopen ("/dev/null", "r"); + if (!tmp) + return -1; + fp->_flags |= __SL64; + fp->_seek64 = tmp->_seek64; + fclose (tmp); + } +#endif + return ftello (fp); +} diff --git a/coreseek/m4-1.4.13/lib/getdtablesize.c b/coreseek/m4-1.4.13/lib/getdtablesize.c new file mode 100644 index 0000000..a348cdd --- /dev/null +++ b/coreseek/m4-1.4.13/lib/getdtablesize.c @@ -0,0 +1,33 @@ +/* getdtablesize() function for platforms that don't have it. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +#include + +int +getdtablesize (void) +{ + return _getmaxstdio (); +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/getopt.c b/coreseek/m4-1.4.13/lib/getopt.c new file mode 100644 index 0000000..f1e6d1f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/getopt.c @@ -0,0 +1,1186 @@ +/* Getopt for GNU. + NOTE: getopt is now part of the C library, so if you don't know what + "Keep this file name-space clean" means, talk to drepper@gnu.org + before changing it! + Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004,2006,2008 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _LIBC +# include +#endif + +#include "getopt.h" + +#include +#include +#include +#include + +#ifdef _LIBC +# include +#else +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#if defined _LIBC && defined USE_IN_LIBIO +# include +#endif + +#ifndef attribute_hidden +# define attribute_hidden +#endif + +/* Unlike standard Unix `getopt', functions like `getopt_long' + let the user intersperse the options with the other arguments. + + As `getopt_long' works, it permutes the elements of ARGV so that, + when it is done, all the options precede everything else. Thus + all application programs are extended to handle flexible argument order. + + Using `getopt' or setting the environment variable POSIXLY_CORRECT + disables permutation. + Then the application's behavior is completely standard. + + GNU application programs can use a third alternative mode in which + they can distinguish the relative order of options and other arguments. */ + +#include "getopt_int.h" + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +/* 1003.2 says this must be 1 before any call. */ +int optind = 1; + +/* Callers store zero here to inhibit the error message + for unrecognized options. */ + +int opterr = 1; + +/* Set to an option character which was unrecognized. + This must be initialized on some systems to avoid linking in the + system's own getopt implementation. */ + +int optopt = '?'; + +/* Keep a global copy of all internal members of getopt_data. */ + +static struct _getopt_data getopt_data; + + +#if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV +extern char *getenv (); +#endif + +#ifdef _LIBC +/* Stored original parameters. + XXX This is no good solution. We should rather copy the args so + that we can compare them later. But we must not use malloc(3). */ +extern int __libc_argc; +extern char **__libc_argv; + +/* Bash 2.0 gives us an environment variable containing flags + indicating ARGV elements that should not be considered arguments. */ + +# ifdef USE_NONOPTION_FLAGS +/* Defined in getopt_init.c */ +extern char *__getopt_nonoption_flags; +# endif + +# ifdef USE_NONOPTION_FLAGS +# define SWAP_FLAGS(ch1, ch2) \ + if (d->__nonoption_flags_len > 0) \ + { \ + char __tmp = __getopt_nonoption_flags[ch1]; \ + __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ + __getopt_nonoption_flags[ch2] = __tmp; \ + } +# else +# define SWAP_FLAGS(ch1, ch2) +# endif +#else /* !_LIBC */ +# define SWAP_FLAGS(ch1, ch2) +#endif /* _LIBC */ + +/* Exchange two adjacent subsequences of ARGV. + One subsequence is elements [first_nonopt,last_nonopt) + which contains all the non-options that have been skipped so far. + The other is elements [last_nonopt,optind), which contains all + the options processed since those non-options were skipped. + + `first_nonopt' and `last_nonopt' are relocated so that they describe + the new indices of the non-options in ARGV after they are moved. */ + +static void +exchange (char **argv, struct _getopt_data *d) +{ + int bottom = d->__first_nonopt; + int middle = d->__last_nonopt; + int top = d->optind; + char *tem; + + /* Exchange the shorter segment with the far end of the longer segment. + That puts the shorter segment into the right place. + It leaves the longer segment in the right place overall, + but it consists of two parts that need to be swapped next. */ + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + /* First make sure the handling of the `__getopt_nonoption_flags' + string can work normally. Our top argument must be in the range + of the string. */ + if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len) + { + /* We must extend the array. The user plays games with us and + presents new arguments. */ + char *new_str = malloc (top + 1); + if (new_str == NULL) + d->__nonoption_flags_len = d->__nonoption_flags_max_len = 0; + else + { + memset (__mempcpy (new_str, __getopt_nonoption_flags, + d->__nonoption_flags_max_len), + '\0', top + 1 - d->__nonoption_flags_max_len); + d->__nonoption_flags_max_len = top + 1; + __getopt_nonoption_flags = new_str; + } + } +#endif + + while (top > middle && middle > bottom) + { + if (top - middle > middle - bottom) + { + /* Bottom segment is the short one. */ + int len = middle - bottom; + register int i; + + /* Swap it with the top part of the top segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[top - (middle - bottom) + i]; + argv[top - (middle - bottom) + i] = tem; + SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); + } + /* Exclude the moved bottom segment from further swapping. */ + top -= len; + } + else + { + /* Top segment is the short one. */ + int len = top - middle; + register int i; + + /* Swap it with the bottom part of the bottom segment. */ + for (i = 0; i < len; i++) + { + tem = argv[bottom + i]; + argv[bottom + i] = argv[middle + i]; + argv[middle + i] = tem; + SWAP_FLAGS (bottom + i, middle + i); + } + /* Exclude the moved top segment from further swapping. */ + bottom += len; + } + } + + /* Update records for the slots the non-options now occupy. */ + + d->__first_nonopt += (d->optind - d->__last_nonopt); + d->__last_nonopt = d->optind; +} + +/* Initialize the internal data when the first call is made. */ + +static const char * +_getopt_initialize (int argc, char **argv, const char *optstring, + int posixly_correct, struct _getopt_data *d) +{ + /* Start processing options with ARGV-element 1 (since ARGV-element 0 + is the program name); the sequence of previously skipped + non-option ARGV-elements is empty. */ + + d->__first_nonopt = d->__last_nonopt = d->optind; + + d->__nextchar = NULL; + + d->__posixly_correct = posixly_correct || !!getenv ("POSIXLY_CORRECT"); + + /* Determine how to handle the ordering of options and nonoptions. */ + + if (optstring[0] == '-') + { + d->__ordering = RETURN_IN_ORDER; + ++optstring; + } + else if (optstring[0] == '+') + { + d->__ordering = REQUIRE_ORDER; + ++optstring; + } + else if (d->__posixly_correct) + d->__ordering = REQUIRE_ORDER; + else + d->__ordering = PERMUTE; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + if (!d->__posixly_correct + && argc == __libc_argc && argv == __libc_argv) + { + if (d->__nonoption_flags_max_len == 0) + { + if (__getopt_nonoption_flags == NULL + || __getopt_nonoption_flags[0] == '\0') + d->__nonoption_flags_max_len = -1; + else + { + const char *orig_str = __getopt_nonoption_flags; + int len = d->__nonoption_flags_max_len = strlen (orig_str); + if (d->__nonoption_flags_max_len < argc) + d->__nonoption_flags_max_len = argc; + __getopt_nonoption_flags = + (char *) malloc (d->__nonoption_flags_max_len); + if (__getopt_nonoption_flags == NULL) + d->__nonoption_flags_max_len = -1; + else + memset (__mempcpy (__getopt_nonoption_flags, orig_str, len), + '\0', d->__nonoption_flags_max_len - len); + } + } + d->__nonoption_flags_len = d->__nonoption_flags_max_len; + } + else + d->__nonoption_flags_len = 0; +#endif + + return optstring; +} + +/* Scan elements of ARGV (whose length is ARGC) for option characters + given in OPTSTRING. + + If an element of ARGV starts with '-', and is not exactly "-" or "--", + then it is an option element. The characters of this element + (aside from the initial '-') are option characters. If `getopt' + is called repeatedly, it returns successively each of the option characters + from each of the option elements. + + If `getopt' finds another option character, it returns that character, + updating `optind' and `nextchar' so that the next call to `getopt' can + resume the scan with the following option character or ARGV-element. + + If there are no more option characters, `getopt' returns -1. + Then `optind' is the index in ARGV of the first ARGV-element + that is not an option. (The ARGV-elements have been permuted + so that those that are not options now come last.) + + OPTSTRING is a string containing the legitimate option characters. + If an option character is seen that is not listed in OPTSTRING, + return '?' after printing an error message. If you set `opterr' to + zero, the error message is suppressed but we still return '?'. + + If a char in OPTSTRING is followed by a colon, that means it wants an arg, + so the following text in the same ARGV-element, or the text of the following + ARGV-element, is returned in `optarg'. Two colons mean an option that + wants an optional arg; if there is text in the current ARGV-element, + it is returned in `optarg', otherwise `optarg' is set to zero. + + If OPTSTRING starts with `-' or `+', it requests different methods of + handling the non-option ARGV-elements. + See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. + + Long-named options begin with `--' instead of `-'. + Their names may be abbreviated as long as the abbreviation is unique + or is an exact match for some defined option. If they have an + argument, it follows the option name in the same ARGV-element, separated + from the option name by a `=', or else the in next ARGV-element. + When `getopt' finds a long-named option, it returns 0 if that option's + `flag' field is nonzero, the value of the option's `val' field + if the `flag' field is zero. + + LONGOPTS is a vector of `struct option' terminated by an + element containing a name which is zero. + + LONGIND returns the index in LONGOPT of the long-named option found. + It is only valid when a long-named option has been found by the most + recent call. + + If LONG_ONLY is nonzero, '-' as well as '--' can introduce + long-named options. + + If POSIXLY_CORRECT is nonzero, behave as if the POSIXLY_CORRECT + environment variable were set. */ + +int +_getopt_internal_r (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, + int long_only, int posixly_correct, struct _getopt_data *d) +{ + int print_errors = d->opterr; + if (optstring[0] == ':') + print_errors = 0; + + if (argc < 1) + return -1; + + d->optarg = NULL; + + if (d->optind == 0 || !d->__initialized) + { + if (d->optind == 0) + d->optind = 1; /* Don't scan ARGV[0], the program name. */ + optstring = _getopt_initialize (argc, argv, optstring, + posixly_correct, d); + d->__initialized = 1; + } + + /* Test whether ARGV[optind] points to a non-option argument. + Either it does not have option syntax, or there is an environment flag + from the shell indicating it is not an option. The later information + is only used when the used in the GNU libc. */ +#if defined _LIBC && defined USE_NONOPTION_FLAGS +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0' \ + || (d->optind < d->__nonoption_flags_len \ + && __getopt_nonoption_flags[d->optind] == '1')) +#else +# define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') +#endif + + if (d->__nextchar == NULL || *d->__nextchar == '\0') + { + /* Advance to the next ARGV-element. */ + + /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been + moved back by the user (who may also have changed the arguments). */ + if (d->__last_nonopt > d->optind) + d->__last_nonopt = d->optind; + if (d->__first_nonopt > d->optind) + d->__first_nonopt = d->optind; + + if (d->__ordering == PERMUTE) + { + /* If we have just processed some options following some non-options, + exchange them so that the options come first. */ + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange ((char **) argv, d); + else if (d->__last_nonopt != d->optind) + d->__first_nonopt = d->optind; + + /* Skip any additional non-options + and extend the range of non-options previously skipped. */ + + while (d->optind < argc && NONOPTION_P) + d->optind++; + d->__last_nonopt = d->optind; + } + + /* The special ARGV-element `--' means premature end of options. + Skip it like a null option, + then exchange with previous non-options as if it were an option, + then skip everything else like a non-option. */ + + if (d->optind != argc && !strcmp (argv[d->optind], "--")) + { + d->optind++; + + if (d->__first_nonopt != d->__last_nonopt + && d->__last_nonopt != d->optind) + exchange ((char **) argv, d); + else if (d->__first_nonopt == d->__last_nonopt) + d->__first_nonopt = d->optind; + d->__last_nonopt = argc; + + d->optind = argc; + } + + /* If we have done all the ARGV-elements, stop the scan + and back over any non-options that we skipped and permuted. */ + + if (d->optind == argc) + { + /* Set the next-arg-index to point at the non-options + that we previously skipped, so the caller will digest them. */ + if (d->__first_nonopt != d->__last_nonopt) + d->optind = d->__first_nonopt; + return -1; + } + + /* If we have come to a non-option and did not permute it, + either stop the scan or describe it to the caller and pass it by. */ + + if (NONOPTION_P) + { + if (d->__ordering == REQUIRE_ORDER) + return -1; + d->optarg = argv[d->optind++]; + return 1; + } + + /* We have found another option-ARGV-element. + Skip the initial punctuation. */ + + d->__nextchar = (argv[d->optind] + 1 + + (longopts != NULL && argv[d->optind][1] == '-')); + } + + /* Decode the current option-ARGV-element. */ + + /* Check whether the ARGV-element is a long option. + + If long_only and the ARGV-element has the form "-f", where f is + a valid short option, don't consider it an abbreviated form of + a long option that starts with f. Otherwise there would be no + way to give the -f short option. + + On the other hand, if there's a long option "fubar" and + the ARGV-element is "-fu", do consider that an abbreviation of + the long option, just like "--fu", and not "-f" with arg "u". + + This distinction seems to be the most useful approach. */ + + if (longopts != NULL + && (argv[d->optind][1] == '-' + || (long_only && (argv[d->optind][2] + || !strchr (optstring, argv[d->optind][1]))))) + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = -1; + int option_index; + + for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) + { + if ((unsigned int) (nameend - d->__nextchar) + == (unsigned int) strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else if (long_only + || pfound->has_arg != p->has_arg + || pfound->flag != p->flag + || pfound->val != p->val) + /* Second or later nonexact match found. */ + ambig = 1; + } + + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[d->optind]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option `%s' is ambiguous\n"), + argv[0], argv[d->optind]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + d->optopt = 0; + return '?'; + } + + if (pfound != NULL) + { + option_index = indfound; + d->optind++; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind - 1][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#else + fprintf (stderr, _("\ +%s: option `--%s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#else + fprintf (stderr, _("\ +%s: option `%c%s' doesn't allow an argument\n"), + argv[0], argv[d->optind - 1][0], + pfound->name); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + + d->__nextchar += strlen (d->__nextchar); + + d->optopt = pfound->val; + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option `%s' requires an argument\n"), + argv[0], argv[d->optind - 1]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[d->optind - 1]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optopt = pfound->val; + return optstring[0] == ':' ? ':' : '?'; + } + } + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + + /* Can't find it as a long option. If this is not getopt_long_only, + or the option starts with '--' or is not a valid short + option, then it's an error. + Otherwise interpret it as a short option. */ + if (!long_only || argv[d->optind][1] == '-' + || strchr (optstring, *d->__nextchar) == NULL) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (argv[d->optind][1] == '-') + { + /* --option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"), + argv[0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `--%s'\n"), + argv[0], d->__nextchar); +#endif + } + else + { + /* +option or -option */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#else + fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), + argv[0], argv[d->optind][0], d->__nextchar); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->__nextchar = (char *) ""; + d->optind++; + d->optopt = 0; + return '?'; + } + } + + /* Look at and handle the next short option-character. */ + + { + char c = *d->__nextchar++; + char *temp = strchr (optstring, c); + + /* Increment `optind' when we start to process its last character. */ + if (*d->__nextchar == '\0') + ++d->optind; + + if (temp == NULL || c == ':') + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + int n; +#endif + + if (d->__posixly_correct) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: illegal option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); +#endif + } + else + { +#if defined _LIBC && defined USE_IN_LIBIO + n = __asprintf (&buf, _("%s: invalid option -- %c\n"), + argv[0], c); +#else + fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); +#endif + } + +#if defined _LIBC && defined USE_IN_LIBIO + if (n >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#endif + } + d->optopt = c; + return '?'; + } + /* Convenience. Treat POSIX -W foo same as long option --foo */ + if (temp[0] == 'W' && temp[1] == ';') + { + char *nameend; + const struct option *p; + const struct option *pfound = NULL; + int exact = 0; + int ambig = 0; + int indfound = 0; + int option_index; + + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, + _("%s: option requires an argument -- %c\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + return c; + } + else + /* We already incremented `d->optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + + /* optarg is now the argument, see if it's in the + table of longopts. */ + + for (d->__nextchar = nameend = d->optarg; *nameend && *nameend != '='; + nameend++) + /* Do nothing. */ ; + + /* Test all long options for either exact match + or abbreviated matches. */ + for (p = longopts, option_index = 0; p->name; p++, option_index++) + if (!strncmp (p->name, d->__nextchar, nameend - d->__nextchar)) + { + if ((unsigned int) (nameend - d->__nextchar) == strlen (p->name)) + { + /* Exact match found. */ + pfound = p; + indfound = option_index; + exact = 1; + break; + } + else if (pfound == NULL) + { + /* First nonexact match found. */ + pfound = p; + indfound = option_index; + } + else + /* Second or later nonexact match found. */ + ambig = 1; + } + if (ambig && !exact) + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[d->optind]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), + argv[0], argv[d->optind]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + d->optind++; + return '?'; + } + if (pfound != NULL) + { + option_index = indfound; + if (*nameend) + { + /* Don't test has_arg with >, because some C compilers don't + allow it to be used on enums. */ + if (pfound->has_arg) + d->optarg = nameend + 1; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, _("\ +%s: option `-W %s' doesn't allow an argument\n"), + argv[0], pfound->name); +#endif + } + + d->__nextchar += strlen (d->__nextchar); + return '?'; + } + } + else if (pfound->has_arg == 1) + { + if (d->optind < argc) + d->optarg = argv[d->optind++]; + else + { + if (print_errors) + { +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option `%s' requires an argument\n"), + argv[0], argv[d->optind - 1]) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 + |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option `%s' requires an argument\n"), + argv[0], argv[d->optind - 1]); +#endif + } + d->__nextchar += strlen (d->__nextchar); + return optstring[0] == ':' ? ':' : '?'; + } + } + d->__nextchar += strlen (d->__nextchar); + if (longind != NULL) + *longind = option_index; + if (pfound->flag) + { + *(pfound->flag) = pfound->val; + return 0; + } + return pfound->val; + } + d->__nextchar = NULL; + return 'W'; /* Let the application handle it. */ + } + if (temp[1] == ':') + { + if (temp[2] == ':') + { + /* This is an option that accepts an argument optionally. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + d->optind++; + } + else + d->optarg = NULL; + d->__nextchar = NULL; + } + else + { + /* This is an option that requires an argument. */ + if (*d->__nextchar != '\0') + { + d->optarg = d->__nextchar; + /* If we end this ARGV-element by taking the rest as an arg, + we must advance to the next element now. */ + d->optind++; + } + else if (d->optind == argc) + { + if (print_errors) + { + /* 1003.2 specifies the format of this message. */ +#if defined _LIBC && defined USE_IN_LIBIO + char *buf; + + if (__asprintf (&buf, _("\ +%s: option requires an argument -- %c\n"), + argv[0], c) >= 0) + { + _IO_flockfile (stderr); + + int old_flags2 = ((_IO_FILE *) stderr)->_flags2; + ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL; + + __fxprintf (NULL, "%s", buf); + + ((_IO_FILE *) stderr)->_flags2 = old_flags2; + _IO_funlockfile (stderr); + + free (buf); + } +#else + fprintf (stderr, + _("%s: option requires an argument -- %c\n"), + argv[0], c); +#endif + } + d->optopt = c; + if (optstring[0] == ':') + c = ':'; + else + c = '?'; + } + else + /* We already incremented `optind' once; + increment it again when taking next ARGV-elt as argument. */ + d->optarg = argv[d->optind++]; + d->__nextchar = NULL; + } + } + return c; + } +} + +int +_getopt_internal (int argc, char **argv, const char *optstring, + const struct option *longopts, int *longind, + int long_only, int posixly_correct) +{ + int result; + + getopt_data.optind = optind; + getopt_data.opterr = opterr; + + result = _getopt_internal_r (argc, argv, optstring, longopts, longind, + long_only, posixly_correct, &getopt_data); + + optind = getopt_data.optind; + optarg = getopt_data.optarg; + optopt = getopt_data.optopt; + + return result; +} + +/* glibc gets a LSB-compliant getopt. + Standalone applications get a POSIX-compliant getopt. */ +#if _LIBC +enum { POSIXLY_CORRECT = 0 }; +#else +enum { POSIXLY_CORRECT = 1 }; +#endif + +int +getopt (int argc, char *const *argv, const char *optstring) +{ + return _getopt_internal (argc, (char **) argv, optstring, NULL, NULL, 0, + POSIXLY_CORRECT); +} + + +#ifdef TEST + +/* Compile with -DTEST to make an executable for use in testing + the above definition of `getopt'. */ + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + + c = getopt (argc, argv, "abc:d:0123456789"); + if (c == -1) + break; + + switch (c) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/coreseek/m4-1.4.13/lib/getopt.in.h b/coreseek/m4-1.4.13/lib/getopt.in.h new file mode 100644 index 0000000..d2d3e6e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/getopt.in.h @@ -0,0 +1,225 @@ +/* Declarations for getopt. + Copyright (C) 1989-1994,1996-1999,2001,2003,2004,2005,2006,2007 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GETOPT_H + +#ifndef __need_getopt +# define _GETOPT_H 1 +#endif + +/* Standalone applications should #define __GETOPT_PREFIX to an + identifier that prefixes the external functions and variables + defined in this header. When this happens, include the + headers that might declare getopt so that they will not cause + confusion if included after this file. Then systematically rename + identifiers so that they do not collide with the system functions + and variables. Renaming avoids problems with some compilers and + linkers. */ +#if defined __GETOPT_PREFIX && !defined __need_getopt +# include +# include +# include +# undef __need_getopt +# undef getopt +# undef getopt_long +# undef getopt_long_only +# undef optarg +# undef opterr +# undef optind +# undef optopt +# define __GETOPT_CONCAT(x, y) x ## y +# define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) +# define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) +# define getopt __GETOPT_ID (getopt) +# define getopt_long __GETOPT_ID (getopt_long) +# define getopt_long_only __GETOPT_ID (getopt_long_only) +# define optarg __GETOPT_ID (optarg) +# define opterr __GETOPT_ID (opterr) +# define optind __GETOPT_ID (optind) +# define optopt __GETOPT_ID (optopt) +#endif + +/* Standalone applications get correct prototypes for getopt_long and + getopt_long_only; they declare "char **argv". libc uses prototypes + with "char *const *argv" that are incorrect because getopt_long and + getopt_long_only can permute argv; this is required for backward + compatibility (e.g., for LSB 2.0.1). + + This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt', + but it caused redefinition warnings if both unistd.h and getopt.h were + included, since unistd.h includes getopt.h having previously defined + __need_getopt. + + The only place where __getopt_argv_const is used is in definitions + of getopt_long and getopt_long_only below, but these are visible + only if __need_getopt is not defined, so it is quite safe to rewrite + the conditional as follows: +*/ +#if !defined __need_getopt +# if defined __GETOPT_PREFIX +# define __getopt_argv_const /* empty */ +# else +# define __getopt_argv_const const +# endif +#endif + +/* If __GNU_LIBRARY__ is not already defined, either we are being used + standalone, or this is the first header included in the source file. + If we are being used with glibc, we need to include , but + that does not exist if we are standalone. So: if __GNU_LIBRARY__ is + not defined, include , which will pull in for us + if it's from glibc. (Why ctype.h? It's guaranteed to exist and it + doesn't flood the namespace with stuff the way some other headers do.) */ +#if !defined __GNU_LIBRARY__ +# include +#endif + +#ifndef __THROW +# ifndef __GNUC_PREREQ +# define __GNUC_PREREQ(maj, min) (0) +# endif +# if defined __cplusplus && __GNUC_PREREQ (2,8) +# define __THROW throw () +# else +# define __THROW +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* For communication from `getopt' to the caller. + When `getopt' finds an option that takes an argument, + the argument value is returned here. + Also, when `ordering' is RETURN_IN_ORDER, + each non-option ARGV-element is returned here. */ + +extern char *optarg; + +/* Index in ARGV of the next element to be scanned. + This is used for communication to and from the caller + and for communication between successive calls to `getopt'. + + On entry to `getopt', zero means this is the first call; initialize. + + When `getopt' returns -1, this is the index of the first of the + non-option elements that the caller should itself scan. + + Otherwise, `optind' communicates from one call to the next + how much of ARGV has been scanned so far. */ + +extern int optind; + +/* Callers store zero here to inhibit the error message `getopt' prints + for unrecognized options. */ + +extern int opterr; + +/* Set to an option character which was unrecognized. */ + +extern int optopt; + +#ifndef __need_getopt +/* Describe the long-named options requested by the application. + The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector + of `struct option' terminated by an element containing a name which is + zero. + + The field `has_arg' is: + no_argument (or 0) if the option does not take an argument, + required_argument (or 1) if the option requires an argument, + optional_argument (or 2) if the option takes an optional argument. + + If the field `flag' is not NULL, it points to a variable that is set + to the value given in the field `val' when the option is found, but + left unchanged if the option is not found. + + To have a long-named option do something other than set an `int' to + a compiled-in constant, such as set a value from `optarg', set the + option's `flag' field to zero and its `val' field to a nonzero + value (the equivalent single-letter option character, if there is + one). For long options that have a zero `flag' field, `getopt' + returns the contents of the `val' field. */ + +struct option +{ + const char *name; + /* has_arg can't be an enum because some compilers complain about + type mismatches in all the code that assumes it is an int. */ + int has_arg; + int *flag; + int val; +}; + +/* Names for the values of the `has_arg' field of `struct option'. */ + +# define no_argument 0 +# define required_argument 1 +# define optional_argument 2 +#endif /* need getopt */ + + +/* Get definitions and prototypes for functions to process the + arguments in ARGV (ARGC of them, minus the program name) for + options given in OPTS. + + Return the option character from OPTS just read. Return -1 when + there are no more options. For unrecognized options, or options + missing arguments, `optopt' is set to the option letter, and '?' is + returned. + + The OPTS string is a list of characters which are recognized option + letters, optionally followed by colons, specifying that that letter + takes an argument, to be placed in `optarg'. + + If a letter in OPTS is followed by two colons, its argument is + optional. This behavior is specific to the GNU `getopt'. + + The argument `--' causes premature termination of argument + scanning, explicitly telling `getopt' that there are no more + options. + + If OPTS begins with `-', then non-option arguments are treated as + arguments to the option '\1'. This behavior is specific to the GNU + `getopt'. If OPTS begins with `+', or POSIXLY_CORRECT is set in + the environment, then do not permute arguments. */ + +extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) + __THROW; + +#ifndef __need_getopt +extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW; +extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind) + __THROW; + +#endif + +#ifdef __cplusplus +} +#endif + +/* Make sure we later can get all the definitions and declarations. */ +#undef __need_getopt + +#endif /* getopt.h */ diff --git a/coreseek/m4-1.4.13/lib/getopt1.c b/coreseek/m4-1.4.13/lib/getopt1.c new file mode 100644 index 0000000..d6a3ecf --- /dev/null +++ b/coreseek/m4-1.4.13/lib/getopt1.c @@ -0,0 +1,170 @@ +/* getopt_long and getopt_long_only entry points for GNU getopt. + Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2004,2006 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef _LIBC +# include +#else +# include +# include "getopt.h" +#endif +#include "getopt_int.h" + +#include + +/* This needs to come after some library #include + to get __GNU_LIBRARY__ defined. */ +#ifdef __GNU_LIBRARY__ +#include +#endif + +#ifndef NULL +#define NULL 0 +#endif + +int +getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 0, 0); +} + +int +_getopt_long_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 0, 0, d); +} + +/* Like getopt_long, but '-' as well as '--' can indicate a long option. + If an option that starts with '-' (not '--') doesn't match a long option, + but does match a short option, it is parsed as a short option + instead. */ + +int +getopt_long_only (int argc, char *__getopt_argv_const *argv, + const char *options, + const struct option *long_options, int *opt_index) +{ + return _getopt_internal (argc, (char **) argv, options, long_options, + opt_index, 1, 0); +} + +int +_getopt_long_only_r (int argc, char **argv, const char *options, + const struct option *long_options, int *opt_index, + struct _getopt_data *d) +{ + return _getopt_internal_r (argc, argv, options, long_options, opt_index, + 1, 0, d); +} + + +#ifdef TEST + +#include + +int +main (int argc, char **argv) +{ + int c; + int digit_optind = 0; + + while (1) + { + int this_option_optind = optind ? optind : 1; + int option_index = 0; + static struct option long_options[] = + { + {"add", 1, 0, 0}, + {"append", 0, 0, 0}, + {"delete", 1, 0, 0}, + {"verbose", 0, 0, 0}, + {"create", 0, 0, 0}, + {"file", 1, 0, 0}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "abc:d:0123456789", + long_options, &option_index); + if (c == -1) + break; + + switch (c) + { + case 0: + printf ("option %s", long_options[option_index].name); + if (optarg) + printf (" with arg %s", optarg); + printf ("\n"); + break; + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + if (digit_optind != 0 && digit_optind != this_option_optind) + printf ("digits occur in two different argv-elements.\n"); + digit_optind = this_option_optind; + printf ("option %c\n", c); + break; + + case 'a': + printf ("option a\n"); + break; + + case 'b': + printf ("option b\n"); + break; + + case 'c': + printf ("option c with value `%s'\n", optarg); + break; + + case 'd': + printf ("option d with value `%s'\n", optarg); + break; + + case '?': + break; + + default: + printf ("?? getopt returned character code 0%o ??\n", c); + } + } + + if (optind < argc) + { + printf ("non-option ARGV-elements: "); + while (optind < argc) + printf ("%s ", argv[optind++]); + printf ("\n"); + } + + exit (0); +} + +#endif /* TEST */ diff --git a/coreseek/m4-1.4.13/lib/getopt_int.h b/coreseek/m4-1.4.13/lib/getopt_int.h new file mode 100644 index 0000000..3c6628b --- /dev/null +++ b/coreseek/m4-1.4.13/lib/getopt_int.h @@ -0,0 +1,130 @@ +/* Internal declarations for getopt. + Copyright (C) 1989-1994,1996-1999,2001,2003,2004 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GETOPT_INT_H +#define _GETOPT_INT_H 1 + +extern int _getopt_internal (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, int __posixly_correct); + + +/* Reentrant versions which can handle parsing multiple argument + vectors at the same time. */ + +/* Data type for reentrant functions. */ +struct _getopt_data +{ + /* These have exactly the same meaning as the corresponding global + variables, except that they are used for the reentrant + versions of getopt. */ + int optind; + int opterr; + int optopt; + char *optarg; + + /* Internal members. */ + + /* True if the internal members have been initialized. */ + int __initialized; + + /* The next char to be scanned in the option-element + in which the last option character we returned was found. + This allows us to pick up the scan where we left off. + + If this is zero, or a null string, it means resume the scan + by advancing to the next ARGV-element. */ + char *__nextchar; + + /* Describe how to deal with options that follow non-option ARGV-elements. + + If the caller did not specify anything, + the default is REQUIRE_ORDER if the environment variable + POSIXLY_CORRECT is defined, PERMUTE otherwise. + + REQUIRE_ORDER means don't recognize them as options; + stop option processing when the first non-option is seen. + This is what Unix does. + This mode of operation is selected by either setting the environment + variable POSIXLY_CORRECT, or using `+' as the first character + of the list of option characters, or by calling getopt. + + PERMUTE is the default. We permute the contents of ARGV as we + scan, so that eventually all the non-options are at the end. + This allows options to be given in any order, even with programs + that were not written to expect this. + + RETURN_IN_ORDER is an option available to programs that were + written to expect options and other ARGV-elements in any order + and that care about the ordering of the two. We describe each + non-option ARGV-element as if it were the argument of an option + with character code 1. Using `-' as the first character of the + list of option characters selects this mode of operation. + + The special argument `--' forces an end of option-scanning regardless + of the value of `ordering'. In the case of RETURN_IN_ORDER, only + `--' can cause `getopt' to return -1 with `optind' != ARGC. */ + + enum + { + REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER + } __ordering; + + /* If the POSIXLY_CORRECT environment variable is set + or getopt was called. */ + int __posixly_correct; + + + /* Handle permutation of arguments. */ + + /* Describe the part of ARGV that contains non-options that have + been skipped. `first_nonopt' is the index in ARGV of the first + of them; `last_nonopt' is the index after the last of them. */ + + int __first_nonopt; + int __last_nonopt; + +#if defined _LIBC && defined USE_NONOPTION_FLAGS + int __nonoption_flags_max_len; + int __nonoption_flags_len; +# endif +}; + +/* The initializer is necessary to set OPTIND and OPTERR to their + default values and to clear the initialization flag. */ +#define _GETOPT_DATA_INITIALIZER { 1, 1 } + +extern int _getopt_internal_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + int __long_only, int __posixly_correct, + struct _getopt_data *__data); + +extern int _getopt_long_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, int *__longind, + struct _getopt_data *__data); + +extern int _getopt_long_only_r (int ___argc, char **___argv, + const char *__shortopts, + const struct option *__longopts, + int *__longind, + struct _getopt_data *__data); + +#endif /* getopt_int.h */ diff --git a/coreseek/m4-1.4.13/lib/gettext.h b/coreseek/m4-1.4.13/lib/gettext.h new file mode 100644 index 0000000..763dd3c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gettext.h @@ -0,0 +1,270 @@ +/* Convenience header for conditional use of GNU . + Copyright (C) 1995-1998, 2000-2002, 2004-2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option. */ +#if ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include + +/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by + the gettext() and ngettext() macros. This is an alternative to calling + textdomain(), and is useful for libraries. */ +# ifdef DEFAULT_TEXT_DOMAIN +# undef gettext +# define gettext(Msgid) \ + dgettext (DEFAULT_TEXT_DOMAIN, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) +# endif + +#else + +/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which + chokes if dcgettext is defined as a macro. So include it now, to make + later inclusions of a NOP. We don't include + as well because people using "gettext.h" will not include , + and also including would fail on SunOS 4, whereas + is OK. */ +#if defined(__sun) +# include +#endif + +/* Many header files from the libstdc++ coming with g++ 3.3 or newer include + , which chokes if dcgettext is defined as a macro. So include + it now, to make later inclusions of a NOP. */ +#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) +# include +# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H +# include +# endif +#endif + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# define gettext(Msgid) ((const char *) (Msgid)) +# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) +# define dcgettext(Domainname, Msgid, Category) \ + ((void) (Category), dgettext (Domainname, Msgid)) +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 \ + ? ((void) (Msgid2), (const char *) (Msgid1)) \ + : ((void) (Msgid1), (const char *) (Msgid2))) +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N)) +# define textdomain(Domainname) ((const char *) (Domainname)) +# define bindtextdomain(Domainname, Dirname) \ + ((void) (Domainname), (const char *) (Dirname)) +# define bind_textdomain_codeset(Domainname, Codeset) \ + ((void) (Domainname), (const char *) (Codeset)) + +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +/* The separator between msgctxt and msgid in a .mo file. */ +#define GETTEXT_CONTEXT_GLUE "\004" + +/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a + MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be + short and rarely need to change. + The letter 'p' stands for 'particular' or 'special'. */ +#ifdef DEFAULT_TEXT_DOMAIN +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#else +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#endif +#define dpgettext(Domainname, Msgctxt, Msgid) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) +#ifdef DEFAULT_TEXT_DOMAIN +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#else +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#endif +#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +pgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + int category) +{ + const char *translation = dcgettext (domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + return msgid; + else + return translation; +} + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +npgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + const char *translation = + dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + if (translation == msg_ctxt_id || translation == msgid_plural) + return (n == 1 ? msgid : msgid_plural); + else + return translation; +} + +/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID + can be arbitrary expressions. But for string literals these macros are + less efficient than those above. */ + +#include + +#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ + (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \ + /* || __STDC_VERSION__ >= 199901L */ ) + +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS +#include +#endif + +#define pgettext_expr(Msgctxt, Msgid) \ + dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) +#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ + dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcgettext (domain, msg_ctxt_id, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (translation != msg_ctxt_id) + return translation; + } + return msgid; +} + +#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcnpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (!(translation == msg_ctxt_id || translation == msgid_plural)) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + +#endif /* _LIBGETTEXT_H */ diff --git a/coreseek/m4-1.4.13/lib/gettimeofday.c b/coreseek/m4-1.4.13/lib/gettimeofday.c new file mode 100644 index 0000000..eb6bf9c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gettimeofday.c @@ -0,0 +1,145 @@ +/* Provide gettimeofday for systems that don't have it or for which it's broken. + + Copyright (C) 2001, 2002, 2003, 2005, 2006, 2007 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* written by Jim Meyering */ + +#include + +/* Specification. */ +#include + +#include + +#if HAVE_SYS_TIMEB_H +# include +#endif + +#if GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME + +/* Work around the bug in some systems whereby gettimeofday clobbers + the static buffer that localtime uses for its return value. The + gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has + this problem. The tzset replacement is necessary for at least + Solaris 2.5, 2.5.1, and 2.6. */ + +static struct tm tm_zero_buffer; +static struct tm *localtime_buffer_addr = &tm_zero_buffer; + +#undef localtime +extern struct tm *localtime (time_t const *); + +#undef gmtime +extern struct tm *gmtime (time_t const *); + +/* This is a wrapper for localtime. It is used only on systems for which + gettimeofday clobbers the static buffer used for localtime's result. + + On the first call, record the address of the static buffer that + localtime uses for its result. */ + +struct tm * +rpl_localtime (time_t const *timep) +{ + struct tm *tm = localtime (timep); + + if (localtime_buffer_addr == &tm_zero_buffer) + localtime_buffer_addr = tm; + + return tm; +} + +/* Same as above, since gmtime and localtime use the same buffer. */ +struct tm * +rpl_gmtime (time_t const *timep) +{ + struct tm *tm = gmtime (timep); + + if (localtime_buffer_addr == &tm_zero_buffer) + localtime_buffer_addr = tm; + + return tm; +} + +#endif /* GETTIMEOFDAY_CLOBBERS_LOCALTIME || TZSET_CLOBBERS_LOCALTIME */ + +#if TZSET_CLOBBERS_LOCALTIME + +#undef tzset +extern void tzset (void); + +/* This is a wrapper for tzset, for systems on which tzset may clobber + the static buffer used for localtime's result. */ +void +rpl_tzset (void) +{ + /* Save and restore the contents of the buffer used for localtime's + result around the call to tzset. */ + struct tm save = *localtime_buffer_addr; + tzset (); + *localtime_buffer_addr = save; +} +#endif + +/* This is a wrapper for gettimeofday. It is used only on systems + that lack this function, or whose implementation of this function + causes problems. */ + +int +rpl_gettimeofday (struct timeval *restrict tv, void *restrict tz) +{ +#undef gettimeofday +#if HAVE_GETTIMEOFDAY +# if GETTIMEOFDAY_CLOBBERS_LOCALTIME + /* Save and restore the contents of the buffer used for localtime's + result around the call to gettimeofday. */ + struct tm save = *localtime_buffer_addr; +# endif + + int result = gettimeofday (tv, tz); + +# if GETTIMEOFDAY_CLOBBERS_LOCALTIME + *localtime_buffer_addr = save; +# endif + + return result; + +#else + +# if HAVE__FTIME + + struct _timeb timebuf; + _ftime (&timebuf); + tv->tv_sec = timebuf.time; + tv->tv_usec = timebuf.millitm * 1000; + +# else + +# if !defined OK_TO_USE_1S_CLOCK +# error "Only 1-second nominal clock resolution found. Is that intended?" \ + "If so, compile with the -DOK_TO_USE_1S_CLOCK option." +# endif + tv->tv_sec = time (NULL); + tv->tv_usec = 0; + +# endif + + return 0; + +#endif +} diff --git a/coreseek/m4-1.4.13/lib/gl_anyhash_list1.h b/coreseek/m4-1.4.13/lib/gl_anyhash_list1.h new file mode 100644 index 0000000..b75ffca --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_anyhash_list1.h @@ -0,0 +1,27 @@ +/* Sequential list data type implemented by a hash table with another list. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Common code of + gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c. */ + +/* Hash table entry. */ +struct gl_hash_entry +{ + struct gl_hash_entry *hash_next; /* chain of entries in same bucket */ + size_t hashcode; /* cache of values' common hash code */ +}; +typedef struct gl_hash_entry * gl_hash_entry_t; diff --git a/coreseek/m4-1.4.13/lib/gl_anyhash_list2.h b/coreseek/m4-1.4.13/lib/gl_anyhash_list2.h new file mode 100644 index 0000000..2ac0cda --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_anyhash_list2.h @@ -0,0 +1,126 @@ +/* Sequential list data type implemented by a hash table with another list. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Common code of + gl_linkedhash_list.c, gl_avltreehash_list.c, gl_rbtreehash_list.c. */ + +/* Array of primes, approximately in steps of factor 1.2. + This table was computed by executing the Common Lisp expression + (dotimes (i 244) (format t "nextprime(~D)~%" (ceiling (expt 1.2d0 i)))) + and feeding the result to PARI/gp. */ +static const size_t primes[] = + { + 11, 13, 17, 19, 23, 29, 37, 41, 47, 59, 67, 83, 97, 127, 139, 167, 199, + 239, 293, 347, 419, 499, 593, 709, 853, 1021, 1229, 1471, 1777, 2129, 2543, + 3049, 3659, 4391, 5273, 6323, 7589, 9103, 10937, 13109, 15727, 18899, + 22651, 27179, 32609, 39133, 46957, 56359, 67619, 81157, 97369, 116849, + 140221, 168253, 201907, 242309, 290761, 348889, 418667, 502409, 602887, + 723467, 868151, 1041779, 1250141, 1500181, 1800191, 2160233, 2592277, + 3110741, 3732887, 4479463, 5375371, 6450413, 7740517, 9288589, 11146307, + 13375573, 16050689, 19260817, 23112977, 27735583, 33282701, 39939233, + 47927081, 57512503, 69014987, 82818011, 99381577, 119257891, 143109469, + 171731387, 206077643, 247293161, 296751781, 356102141, 427322587, + 512787097, 615344489, 738413383, 886096061, 1063315271, 1275978331, + 1531174013, 1837408799, 2204890543UL, 2645868653UL, 3175042391UL, + 3810050851UL, +#if SIZE_MAX > 4294967295UL + 4572061027UL, 5486473229UL, 6583767889UL, 7900521449UL, 9480625733UL, + 11376750877UL, 13652101063UL, 16382521261UL, 19659025513UL, 23590830631UL, + 28308996763UL, 33970796089UL, 40764955463UL, 48917946377UL, 58701535657UL, + 70441842749UL, 84530211301UL, 101436253561UL, 121723504277UL, + 146068205131UL, 175281846149UL, 210338215379UL, 252405858521UL, + 302887030151UL, 363464436191UL, 436157323417UL, 523388788231UL, + 628066545713UL, 753679854847UL, 904415825857UL, 1085298991109UL, + 1302358789181UL, 1562830547009UL, 1875396656429UL, 2250475987709UL, + 2700571185239UL, 3240685422287UL, 3888822506759UL, 4666587008147UL, + 5599904409713UL, 6719885291641UL, 8063862349969UL, 9676634819959UL, + 11611961783951UL, 13934354140769UL, 16721224968907UL, 20065469962669UL, + 24078563955191UL, 28894276746229UL, 34673132095507UL, 41607758514593UL, + 49929310217531UL, 59915172260971UL, 71898206713183UL, 86277848055823UL, + 103533417666967UL, 124240101200359UL, 149088121440451UL, 178905745728529UL, + 214686894874223UL, 257624273849081UL, 309149128618903UL, 370978954342639UL, + 445174745211143UL, 534209694253381UL, 641051633104063UL, 769261959724877UL, + 923114351670013UL, 1107737222003791UL, 1329284666404567UL, + 1595141599685509UL, 1914169919622551UL, 2297003903547091UL, + 2756404684256459UL, 3307685621107757UL, 3969222745329323UL, + 4763067294395177UL, 5715680753274209UL, 6858816903929113UL, + 8230580284714831UL, 9876696341657791UL, 11852035609989371UL, + 14222442731987227UL, 17066931278384657UL, 20480317534061597UL, + 24576381040873903UL, 29491657249048679UL, 35389988698858471UL, + 42467986438630267UL, 50961583726356109UL, 61153900471627387UL, + 73384680565952851UL, 88061616679143347UL, 105673940014972061UL, + 126808728017966413UL, 152170473621559703UL, 182604568345871671UL, + 219125482015045997UL, 262950578418055169UL, 315540694101666193UL, + 378648832921999397UL, 454378599506399233UL, 545254319407679131UL, + 654305183289214771UL, 785166219947057701UL, 942199463936469157UL, + 1130639356723763129UL, 1356767228068515623UL, 1628120673682218619UL, + 1953744808418662409UL, 2344493770102394881UL, 2813392524122873857UL, + 3376071028947448339UL, 4051285234736937517UL, 4861542281684325481UL, + 5833850738021191727UL, 7000620885625427969UL, 8400745062750513217UL, + 10080894075300616261UL, 12097072890360739951UL, 14516487468432885797UL, + 17419784962119465179UL, +#endif + SIZE_MAX /* sentinel, to ensure the search terminates */ + }; + +/* Return a suitable prime >= ESTIMATE. */ +static size_t +next_prime (size_t estimate) +{ + size_t i; + + for (i = 0; i < sizeof (primes) / sizeof (primes[0]); i++) + if (primes[i] >= estimate) + return primes[i]; + return SIZE_MAX; /* not a prime, but better than nothing */ +} + +/* Resize the hash table with a new estimated size. */ +static void +hash_resize (gl_list_t list, size_t estimate) +{ + size_t new_size = next_prime (estimate); + + if (new_size > list->table_size) + { + gl_hash_entry_t *old_table = list->table; + /* Allocate the new table. */ + gl_hash_entry_t *new_table = XCALLOC (new_size, gl_hash_entry_t); + size_t i; + + /* Iterate through the entries of the old table. */ + for (i = list->table_size; i > 0; ) + { + gl_hash_entry_t node = old_table[--i]; + + while (node != NULL) + { + gl_hash_entry_t next = node->hash_next; + /* Add the entry to the new table. */ + size_t bucket = node->hashcode % new_size; + node->hash_next = new_table[bucket]; + new_table[bucket] = node; + + node = next; + } + } + + list->table = new_table; + list->table_size = new_size; + free (old_table); + } +} diff --git a/coreseek/m4-1.4.13/lib/gl_anylinked_list1.h b/coreseek/m4-1.4.13/lib/gl_anylinked_list1.h new file mode 100644 index 0000000..ff1bb31 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_anylinked_list1.h @@ -0,0 +1,48 @@ +/* Sequential list data type implemented by a linked list. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Common code of gl_linked_list.c and gl_linkedhash_list.c. */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Concrete list node implementation, valid for this file only. */ +struct gl_list_node_impl +{ +#if WITH_HASHTABLE + struct gl_hash_entry h; /* hash table entry fields; must be first */ +#endif + struct gl_list_node_impl *next; + struct gl_list_node_impl *prev; + const void *value; +}; + +/* Concrete gl_list_impl type, valid for this file only. */ +struct gl_list_impl +{ + struct gl_list_impl_base base; +#if WITH_HASHTABLE + /* A hash table: managed as an array of collision lists. */ + struct gl_hash_entry **table; + size_t table_size; +#endif + /* A circular list anchored at root. + The first node is = root.next, the last node is = root.prev. + The root's value is unused. */ + struct gl_list_node_impl root; + /* Number of list nodes, excluding the root. */ + size_t count; +}; diff --git a/coreseek/m4-1.4.13/lib/gl_anylinked_list2.h b/coreseek/m4-1.4.13/lib/gl_anylinked_list2.h new file mode 100644 index 0000000..9fbe5a8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_anylinked_list2.h @@ -0,0 +1,1081 @@ +/* Sequential list data type implemented by a linked list. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Common code of gl_linked_list.c and gl_linkedhash_list.c. */ + +/* If the symbol SIGNAL_SAFE_LIST is defined, the code is compiled in such + a way that a gl_list_t data structure may be used from within a signal + handler. The operations allowed in the signal handler are: + gl_list_iterator, gl_list_iterator_next, gl_list_iterator_free. + The list and node fields that are therefore accessed from the signal handler + are: + list->root, node->next, node->value. + We are careful to make modifications to these fields only in an order + that maintains the consistency of the list data structure at any moment, + and we use 'volatile' assignments to prevent the compiler from reordering + such assignments. */ +#ifdef SIGNAL_SAFE_LIST +# define ASYNCSAFE(type) *(volatile type *)& +#else +# define ASYNCSAFE(type) +#endif + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +static gl_list_t +gl_linked_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + struct gl_list_impl *list = XMALLOC (struct gl_list_impl); + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; +#if WITH_HASHTABLE + list->table_size = 11; + list->table = XCALLOC (list->table_size, gl_hash_entry_t); +#endif + list->root.next = &list->root; + list->root.prev = &list->root; + list->count = 0; + + return list; +} + +static gl_list_t +gl_linked_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + struct gl_list_impl *list = XMALLOC (struct gl_list_impl); + gl_list_node_t tail; + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; +#if WITH_HASHTABLE + { + size_t estimate = xsum (count, count / 2); /* 1.5 * count */ + if (estimate < 10) + estimate = 10; + list->table_size = next_prime (estimate); + list->table = XCALLOC (list->table_size, gl_hash_entry_t); + } +#endif + list->count = count; + tail = &list->root; + for (; count > 0; contents++, count--) + { + gl_list_node_t node = XMALLOC (struct gl_list_node_impl); + + node->value = *contents; +#if WITH_HASHTABLE + node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (node->value) + : (size_t)(uintptr_t) node->value); + + /* Add node to the hash table. */ + add_to_bucket (list, node); +#endif + + /* Add node to the list. */ + node->prev = tail; + tail->next = node; + tail = node; + } + tail->next = &list->root; + list->root.prev = tail; + + return list; +} + +static size_t +gl_linked_size (gl_list_t list) +{ + return list->count; +} + +static const void * +gl_linked_node_value (gl_list_t list, gl_list_node_t node) +{ + return node->value; +} + +static void +gl_linked_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt) +{ +#if WITH_HASHTABLE + if (elt != node->value) + { + size_t new_hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + + if (new_hashcode != node->h.hashcode) + { + remove_from_bucket (list, node); + node->value = elt; + node->h.hashcode = new_hashcode; + add_to_bucket (list, node); + } + else + node->value = elt; + } +#else + node->value = elt; +#endif +} + +static gl_list_node_t +gl_linked_next_node (gl_list_t list, gl_list_node_t node) +{ + return (node->next != &list->root ? node->next : NULL); +} + +static gl_list_node_t +gl_linked_previous_node (gl_list_t list, gl_list_node_t node) +{ + return (node->prev != &list->root ? node->prev : NULL); +} + +static const void * +gl_linked_get_at (gl_list_t list, size_t position) +{ + size_t count = list->count; + gl_list_node_t node; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + /* Here we know count > 0. */ + if (position <= ((count - 1) / 2)) + { + node = list->root.next; + for (; position > 0; position--) + node = node->next; + } + else + { + position = count - 1 - position; + node = list->root.prev; + for (; position > 0; position--) + node = node->prev; + } + return node->value; +} + +static gl_list_node_t +gl_linked_set_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = list->count; + gl_list_node_t node; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + /* Here we know count > 0. */ + if (position <= ((count - 1) / 2)) + { + node = list->root.next; + for (; position > 0; position--) + node = node->next; + } + else + { + position = count - 1 - position; + node = list->root.prev; + for (; position > 0; position--) + node = node->prev; + } +#if WITH_HASHTABLE + if (elt != node->value) + { + size_t new_hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + + if (new_hashcode != node->h.hashcode) + { + remove_from_bucket (list, node); + node->value = elt; + node->h.hashcode = new_hashcode; + add_to_bucket (list, node); + } + else + node->value = elt; + } +#else + node->value = elt; +#endif + return node; +} + +static gl_list_node_t +gl_linked_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + size_t count = list->count; + + if (!(start_index <= end_index && end_index <= count)) + /* Invalid arguments. */ + abort (); + { +#if WITH_HASHTABLE + size_t hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + size_t bucket = hashcode % list->table_size; + gl_listelement_equals_fn equals = list->base.equals_fn; + + if (!list->base.allow_duplicates) + { + /* Look for the first match in the hash bucket. */ + gl_list_node_t found = NULL; + gl_list_node_t node; + + for (node = (gl_list_node_t) list->table[bucket]; + node != NULL; + node = (gl_list_node_t) node->h.hash_next) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + { + found = node; + break; + } + if (start_index > 0) + /* Look whether found's index is < start_index. */ + for (node = list->root.next; ; node = node->next) + { + if (node == found) + return NULL; + if (--start_index == 0) + break; + } + if (end_index < count) + /* Look whether found's index is >= end_index. */ + { + end_index = count - end_index; + for (node = list->root.prev; ; node = node->prev) + { + if (node == found) + return NULL; + if (--end_index == 0) + break; + } + } + return found; + } + else + { + /* Look whether there is more than one match in the hash bucket. */ + bool multiple_matches = false; + gl_list_node_t first_match = NULL; + gl_list_node_t node; + + for (node = (gl_list_node_t) list->table[bucket]; + node != NULL; + node = (gl_list_node_t) node->h.hash_next) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + { + if (first_match == NULL) + first_match = node; + else + { + multiple_matches = true; + break; + } + } + if (multiple_matches) + { + /* We need the match with the smallest index. But we don't have + a fast mapping node -> index. So we have to walk the list. */ + end_index -= start_index; + node = list->root.next; + for (; start_index > 0; start_index--) + node = node->next; + + for (; + end_index > 0; + node = node->next, end_index--) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + return node; + /* The matches must have all been at indices < start_index or + >= end_index. */ + return NULL; + } + else + { + if (start_index > 0) + /* Look whether first_match's index is < start_index. */ + for (node = list->root.next; node != &list->root; node = node->next) + { + if (node == first_match) + return NULL; + if (--start_index == 0) + break; + } + if (end_index < list->count) + /* Look whether first_match's index is >= end_index. */ + { + end_index = list->count - end_index; + for (node = list->root.prev; ; node = node->prev) + { + if (node == first_match) + return NULL; + if (--end_index == 0) + break; + } + } + return first_match; + } + } +#else + gl_listelement_equals_fn equals = list->base.equals_fn; + gl_list_node_t node = list->root.next; + + end_index -= start_index; + for (; start_index > 0; start_index--) + node = node->next; + + if (equals != NULL) + { + for (; end_index > 0; node = node->next, end_index--) + if (equals (elt, node->value)) + return node; + } + else + { + for (; end_index > 0; node = node->next, end_index--) + if (elt == node->value) + return node; + } + return NULL; +#endif + } +} + +static size_t +gl_linked_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + size_t count = list->count; + + if (!(start_index <= end_index && end_index <= count)) + /* Invalid arguments. */ + abort (); + { +#if WITH_HASHTABLE + /* Here the hash table doesn't help much. It only allows us to minimize + the number of equals() calls, by looking up first the node and then + its index. */ + size_t hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (elt) + : (size_t)(uintptr_t) elt); + size_t bucket = hashcode % list->table_size; + gl_listelement_equals_fn equals = list->base.equals_fn; + gl_list_node_t node; + + /* First step: Look up the node. */ + if (!list->base.allow_duplicates) + { + /* Look for the first match in the hash bucket. */ + for (node = (gl_list_node_t) list->table[bucket]; + node != NULL; + node = (gl_list_node_t) node->h.hash_next) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + break; + } + else + { + /* Look whether there is more than one match in the hash bucket. */ + bool multiple_matches = false; + gl_list_node_t first_match = NULL; + + for (node = (gl_list_node_t) list->table[bucket]; + node != NULL; + node = (gl_list_node_t) node->h.hash_next) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + { + if (first_match == NULL) + first_match = node; + else + { + multiple_matches = true; + break; + } + } + if (multiple_matches) + { + /* We need the match with the smallest index. But we don't have + a fast mapping node -> index. So we have to walk the list. */ + size_t index; + + index = start_index; + node = list->root.next; + for (; start_index > 0; start_index--) + node = node->next; + + for (; + index < end_index; + node = node->next, index++) + if (node->h.hashcode == hashcode + && (equals != NULL + ? equals (elt, node->value) + : elt == node->value)) + return index; + /* The matches must have all been at indices < start_index or + >= end_index. */ + return (size_t)(-1); + } + node = first_match; + } + + /* Second step: Look up the index of the node. */ + if (node == NULL) + return (size_t)(-1); + else + { + size_t index = 0; + + for (; node->prev != &list->root; node = node->prev) + index++; + + if (index >= start_index && index < end_index) + return index; + else + return (size_t)(-1); + } +#else + gl_listelement_equals_fn equals = list->base.equals_fn; + size_t index = start_index; + gl_list_node_t node = list->root.next; + + for (; start_index > 0; start_index--) + node = node->next; + + if (equals != NULL) + { + for (; + index < end_index; + node = node->next, index++) + if (equals (elt, node->value)) + return index; + } + else + { + for (; + index < end_index; + node = node->next, index++) + if (elt == node->value) + return index; + } + return (size_t)(-1); +#endif + } +} + +static gl_list_node_t +gl_linked_add_first (gl_list_t list, const void *elt) +{ + gl_list_node_t node = XMALLOC (struct gl_list_node_impl); + + ASYNCSAFE(const void *) node->value = elt; +#if WITH_HASHTABLE + node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (node->value) + : (size_t)(uintptr_t) node->value); + + /* Add node to the hash table. */ + add_to_bucket (list, node); +#endif + + /* Add node to the list. */ + node->prev = &list->root; + ASYNCSAFE(gl_list_node_t) node->next = list->root.next; + node->next->prev = node; + ASYNCSAFE(gl_list_node_t) list->root.next = node; + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return node; +} + +static gl_list_node_t +gl_linked_add_last (gl_list_t list, const void *elt) +{ + gl_list_node_t node = XMALLOC (struct gl_list_node_impl); + + ASYNCSAFE(const void *) node->value = elt; +#if WITH_HASHTABLE + node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (node->value) + : (size_t)(uintptr_t) node->value); + + /* Add node to the hash table. */ + add_to_bucket (list, node); +#endif + + /* Add node to the list. */ + ASYNCSAFE(gl_list_node_t) node->next = &list->root; + node->prev = list->root.prev; + ASYNCSAFE(gl_list_node_t) node->prev->next = node; + list->root.prev = node; + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return node; +} + +static gl_list_node_t +gl_linked_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + gl_list_node_t new_node = XMALLOC (struct gl_list_node_impl); + + ASYNCSAFE(const void *) new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); + + /* Add new_node to the hash table. */ + add_to_bucket (list, new_node); +#endif + + /* Add new_node to the list. */ + ASYNCSAFE(gl_list_node_t) new_node->next = node; + new_node->prev = node->prev; + ASYNCSAFE(gl_list_node_t) new_node->prev->next = new_node; + node->prev = new_node; + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_linked_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + gl_list_node_t new_node = XMALLOC (struct gl_list_node_impl); + + ASYNCSAFE(const void *) new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); + + /* Add new_node to the hash table. */ + add_to_bucket (list, new_node); +#endif + + /* Add new_node to the list. */ + new_node->prev = node; + ASYNCSAFE(gl_list_node_t) new_node->next = node->next; + new_node->next->prev = new_node; + ASYNCSAFE(gl_list_node_t) node->next = new_node; + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return new_node; +} + +static gl_list_node_t +gl_linked_add_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = list->count; + gl_list_node_t new_node; + + if (!(position <= count)) + /* Invalid argument. */ + abort (); + + new_node = XMALLOC (struct gl_list_node_impl); + ASYNCSAFE(const void *) new_node->value = elt; +#if WITH_HASHTABLE + new_node->h.hashcode = + (list->base.hashcode_fn != NULL + ? list->base.hashcode_fn (new_node->value) + : (size_t)(uintptr_t) new_node->value); + + /* Add new_node to the hash table. */ + add_to_bucket (list, new_node); +#endif + + /* Add new_node to the list. */ + if (position <= (count / 2)) + { + gl_list_node_t node; + + node = &list->root; + for (; position > 0; position--) + node = node->next; + new_node->prev = node; + ASYNCSAFE(gl_list_node_t) new_node->next = node->next; + new_node->next->prev = new_node; + ASYNCSAFE(gl_list_node_t) node->next = new_node; + } + else + { + gl_list_node_t node; + + position = count - position; + node = &list->root; + for (; position > 0; position--) + node = node->prev; + ASYNCSAFE(gl_list_node_t) new_node->next = node; + new_node->prev = node->prev; + ASYNCSAFE(gl_list_node_t) new_node->prev->next = new_node; + node->prev = new_node; + } + list->count++; + +#if WITH_HASHTABLE + hash_resize_after_add (list); +#endif + + return new_node; +} + +static bool +gl_linked_remove_node (gl_list_t list, gl_list_node_t node) +{ + gl_list_node_t prev; + gl_list_node_t next; + +#if WITH_HASHTABLE + /* Remove node from the hash table. */ + remove_from_bucket (list, node); +#endif + + /* Remove node from the list. */ + prev = node->prev; + next = node->next; + + ASYNCSAFE(gl_list_node_t) prev->next = next; + next->prev = prev; + list->count--; + + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (node->value); + free (node); + return true; +} + +static bool +gl_linked_remove_at (gl_list_t list, size_t position) +{ + size_t count = list->count; + gl_list_node_t removed_node; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + /* Here we know count > 0. */ + if (position <= ((count - 1) / 2)) + { + gl_list_node_t node; + gl_list_node_t after_removed; + + node = &list->root; + for (; position > 0; position--) + node = node->next; + removed_node = node->next; + after_removed = node->next->next; + ASYNCSAFE(gl_list_node_t) node->next = after_removed; + after_removed->prev = node; + } + else + { + gl_list_node_t node; + gl_list_node_t before_removed; + + position = count - 1 - position; + node = &list->root; + for (; position > 0; position--) + node = node->prev; + removed_node = node->prev; + before_removed = node->prev->prev; + node->prev = before_removed; + ASYNCSAFE(gl_list_node_t) before_removed->next = node; + } +#if WITH_HASHTABLE + remove_from_bucket (list, removed_node); +#endif + list->count--; + + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (removed_node->value); + free (removed_node); + return true; +} + +static bool +gl_linked_remove (gl_list_t list, const void *elt) +{ + gl_list_node_t node = gl_linked_search_from_to (list, 0, list->count, elt); + + if (node != NULL) + return gl_linked_remove_node (list, node); + else + return false; +} + +static void +gl_linked_list_free (gl_list_t list) +{ + gl_listelement_dispose_fn dispose = list->base.dispose_fn; + gl_list_node_t node; + + for (node = list->root.next; node != &list->root; ) + { + gl_list_node_t next = node->next; + if (dispose != NULL) + dispose (node->value); + free (node); + node = next; + } +#if WITH_HASHTABLE + free (list->table); +#endif + free (list); +} + +/* --------------------- gl_list_iterator_t Data Type --------------------- */ + +static gl_list_iterator_t +gl_linked_iterator (gl_list_t list) +{ + gl_list_iterator_t result; + + result.vtable = list->base.vtable; + result.list = list; + result.p = list->root.next; + result.q = &list->root; +#ifdef lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static gl_list_iterator_t +gl_linked_iterator_from_to (gl_list_t list, + size_t start_index, size_t end_index) +{ + gl_list_iterator_t result; + size_t n1, n2, n3; + + if (!(start_index <= end_index && end_index <= list->count)) + /* Invalid arguments. */ + abort (); + result.vtable = list->base.vtable; + result.list = list; + n1 = start_index; + n2 = end_index - start_index; + n3 = list->count - end_index; + /* Find the maximum among n1, n2, n3, so as to reduce the number of + loop iterations to n1 + n2 + n3 - max(n1,n2,n3). */ + if (n1 > n2 && n1 > n3) + { + /* n1 is the maximum, use n2 and n3. */ + gl_list_node_t node; + size_t i; + + node = &list->root; + for (i = n3; i > 0; i--) + node = node->prev; + result.q = node; + for (i = n2; i > 0; i--) + node = node->prev; + result.p = node; + } + else if (n2 > n3) + { + /* n2 is the maximum, use n1 and n3. */ + gl_list_node_t node; + size_t i; + + node = list->root.next; + for (i = n1; i > 0; i--) + node = node->next; + result.p = node; + + node = &list->root; + for (i = n3; i > 0; i--) + node = node->prev; + result.q = node; + } + else + { + /* n3 is the maximum, use n1 and n2. */ + gl_list_node_t node; + size_t i; + + node = list->root.next; + for (i = n1; i > 0; i--) + node = node->next; + result.p = node; + for (i = n2; i > 0; i--) + node = node->next; + result.q = node; + } + +#ifdef lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static bool +gl_linked_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + if (iterator->p != iterator->q) + { + gl_list_node_t node = (gl_list_node_t) iterator->p; + *eltp = node->value; + if (nodep != NULL) + *nodep = node; + iterator->p = node->next; + return true; + } + else + return false; +} + +static void +gl_linked_iterator_free (gl_list_iterator_t *iterator) +{ +} + +/* ---------------------- Sorted gl_list_t Data Type ---------------------- */ + +static gl_list_node_t +gl_linked_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + + for (node = list->root.next; node != &list->root; node = node->next) + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return node; + } + return NULL; +} + +static gl_list_node_t +gl_linked_sortedlist_search_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + size_t count = list->count; + + if (!(low <= high && high <= list->count)) + /* Invalid arguments. */ + abort (); + + high -= low; + if (high > 0) + { + /* Here we know low < count. */ + size_t position = low; + gl_list_node_t node; + + if (position <= ((count - 1) / 2)) + { + node = list->root.next; + for (; position > 0; position--) + node = node->next; + } + else + { + position = count - 1 - position; + node = list->root.prev; + for (; position > 0; position--) + node = node->prev; + } + + do + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return node; + node = node->next; + } + while (--high > 0); + } + return NULL; +} + +static size_t +gl_linked_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + size_t index; + + for (node = list->root.next, index = 0; + node != &list->root; + node = node->next, index++) + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return index; + } + return (size_t)(-1); +} + +static size_t +gl_linked_sortedlist_indexof_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + size_t count = list->count; + + if (!(low <= high && high <= list->count)) + /* Invalid arguments. */ + abort (); + + high -= low; + if (high > 0) + { + /* Here we know low < count. */ + size_t index = low; + size_t position = low; + gl_list_node_t node; + + if (position <= ((count - 1) / 2)) + { + node = list->root.next; + for (; position > 0; position--) + node = node->next; + } + else + { + position = count - 1 - position; + node = list->root.prev; + for (; position > 0; position--) + node = node->prev; + } + + do + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return index; + node = node->next; + index++; + } + while (--high > 0); + } + return (size_t)(-1); +} + +static gl_list_node_t +gl_linked_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + + for (node = list->root.next; node != &list->root; node = node->next) + if (compar (node->value, elt) >= 0) + return gl_linked_add_before (list, node, elt); + return gl_linked_add_last (list, elt); +} + +static bool +gl_linked_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + gl_list_node_t node; + + for (node = list->root.next; node != &list->root; node = node->next) + { + int cmp = compar (node->value, elt); + + if (cmp > 0) + break; + if (cmp == 0) + return gl_linked_remove_node (list, node); + } + return false; +} diff --git a/coreseek/m4-1.4.13/lib/gl_anytree_oset.h b/coreseek/m4-1.4.13/lib/gl_anytree_oset.h new file mode 100644 index 0000000..95f2124 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_anytree_oset.h @@ -0,0 +1,290 @@ +/* Ordered set data type implemented by a binary tree. + Copyright (C) 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Common code of gl_avltree_oset.c and gl_rbtree_oset.c. */ + +/* An item on the stack used for iterating across the elements. */ +typedef struct +{ + gl_oset_node_t node; + bool rightp; +} iterstack_item_t; + +/* A stack used for iterating across the elements. */ +typedef iterstack_item_t iterstack_t[MAXHEIGHT]; + +static gl_oset_t +gl_tree_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) +{ + struct gl_oset_impl *set = XMALLOC (struct gl_oset_impl); + + set->base.vtable = implementation; + set->base.compar_fn = compar_fn; + set->base.dispose_fn = dispose_fn; + set->root = NULL; + set->count = 0; + + return set; +} + +static size_t +gl_tree_size (gl_oset_t set) +{ + return set->count; +} + +static bool +gl_tree_search (gl_oset_t set, const void *elt) +{ + gl_setelement_compar_fn compar = set->base.compar_fn; + gl_oset_node_t node; + + for (node = set->root; node != NULL; ) + { + int cmp = (compar != NULL + ? compar (node->value, elt) + : (node->value > elt ? 1 : + node->value < elt ? -1 : 0)); + + if (cmp < 0) + node = node->right; + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + /* We have an element equal to ELT. */ + return true; + } + return false; +} + +static bool +gl_tree_search_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, + const void **eltp) +{ + gl_oset_node_t node; + + for (node = set->root; node != NULL; ) + { + if (! threshold_fn (node->value, threshold)) + node = node->right; + else + { + /* We have an element >= VALUE. But we need the leftmost such + element. */ + gl_oset_node_t found = node; + node = node->left; + for (; node != NULL; ) + { + if (! threshold_fn (node->value, threshold)) + node = node->right; + else + { + found = node; + node = node->left; + } + } + *eltp = found->value; + return true; + } + } + return false; +} + +static gl_oset_node_t +gl_tree_search_node (gl_oset_t set, const void *elt) +{ + gl_setelement_compar_fn compar = set->base.compar_fn; + gl_oset_node_t node; + + for (node = set->root; node != NULL; ) + { + int cmp = (compar != NULL + ? compar (node->value, elt) + : (node->value > elt ? 1 : + node->value < elt ? -1 : 0)); + + if (cmp < 0) + node = node->right; + else if (cmp > 0) + node = node->left; + else /* cmp == 0 */ + /* We have an element equal to ELT. */ + return node; + } + return NULL; +} + +static bool +gl_tree_add (gl_oset_t set, const void *elt) +{ + gl_setelement_compar_fn compar; + gl_oset_node_t node = set->root; + + if (node == NULL) + { + gl_tree_add_first (set, elt); + return true; + } + + compar = set->base.compar_fn; + + for (;;) + { + int cmp = (compar != NULL + ? compar (node->value, elt) + : (node->value > elt ? 1 : + node->value < elt ? -1 : 0)); + + if (cmp < 0) + { + if (node->right == NULL) + { + gl_tree_add_after (set, node, elt); + return true; + } + node = node->right; + } + else if (cmp > 0) + { + if (node->left == NULL) + { + gl_tree_add_before (set, node, elt); + return true; + } + node = node->left; + } + else /* cmp == 0 */ + return false; + } +} + +static bool +gl_tree_remove (gl_oset_t set, const void *elt) +{ + gl_oset_node_t node = gl_tree_search_node (set, elt); + + if (node != NULL) + return gl_tree_remove_node (set, node); + else + return false; +} + +static void +gl_tree_oset_free (gl_oset_t set) +{ + /* Iterate across all elements in post-order. */ + gl_oset_node_t node = set->root; + iterstack_t stack; + iterstack_item_t *stack_ptr = &stack[0]; + + for (;;) + { + /* Descend on left branch. */ + for (;;) + { + if (node == NULL) + break; + stack_ptr->node = node; + stack_ptr->rightp = false; + node = node->left; + stack_ptr++; + } + /* Climb up again. */ + for (;;) + { + if (stack_ptr == &stack[0]) + goto done_iterate; + stack_ptr--; + node = stack_ptr->node; + if (!stack_ptr->rightp) + break; + /* Free the current node. */ + if (set->base.dispose_fn != NULL) + set->base.dispose_fn (node->value); + free (node); + } + /* Descend on right branch. */ + stack_ptr->rightp = true; + node = node->right; + stack_ptr++; + } + done_iterate: + free (set); +} + +/* --------------------- gl_oset_iterator_t Data Type --------------------- */ + +static gl_oset_iterator_t +gl_tree_iterator (gl_oset_t set) +{ + gl_oset_iterator_t result; + gl_oset_node_t node; + + result.vtable = set->base.vtable; + result.set = set; + /* Start node is the leftmost node. */ + node = set->root; + if (node != NULL) + while (node->left != NULL) + node = node->left; + result.p = node; + /* End point is past the rightmost node. */ + result.q = NULL; +#ifdef lint + result.i = 0; + result.j = 0; + result.count = 0; +#endif + + return result; +} + +static bool +gl_tree_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) +{ + if (iterator->p != iterator->q) + { + gl_oset_node_t node = (gl_oset_node_t) iterator->p; + *eltp = node->value; + /* Advance to the next node. */ + if (node->right != NULL) + { + node = node->right; + while (node->left != NULL) + node = node->left; + } + else + { + while (node->parent != NULL && node->parent->right == node) + node = node->parent; + node = node->parent; + } + iterator->p = node; + return true; + } + else + return false; +} + +static void +gl_tree_iterator_free (gl_oset_iterator_t *iterator) +{ +} diff --git a/coreseek/m4-1.4.13/lib/gl_avltree_oset.c b/coreseek/m4-1.4.13/lib/gl_avltree_oset.c new file mode 100644 index 0000000..6ac058d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_avltree_oset.c @@ -0,0 +1,573 @@ +/* Ordered set data type implemented by a binary tree. + Copyright (C) 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "gl_avltree_oset.h" + +#include + +#include "xalloc.h" + +/* An AVL tree is a binary tree where + 1. The height of each node is calculated as + heightof(node) = 1 + max (heightof(node.left), heightof(node.right)). + 2. The heights of the subtrees of each node differ by at most 1: + | heightof(right) - heightof(left) | <= 1. + 3. The index of the elements in the node.left subtree are smaller than + the index of node. + The index of the elements in the node.right subtree are larger than + the index of node. + */ + +/* -------------------------- gl_oset_t Data Type -------------------------- */ + +/* Tree node implementation, valid for this file only. */ +struct gl_oset_node_impl +{ + struct gl_oset_node_impl *left; /* left branch, or NULL */ + struct gl_oset_node_impl *right; /* right branch, or NULL */ + /* Parent pointer, or NULL. The parent pointer is not needed for most + operations. It is needed so that a gl_oset_node_t can be returned + without memory allocation, on which the functions gl_oset_remove_node, + gl_oset_add_before, gl_oset_add_after can be implemented. */ + struct gl_oset_node_impl *parent; + int balance; /* heightof(right) - heightof(left), + always = -1 or 0 or 1 */ + const void *value; +}; +typedef struct gl_oset_node_impl * gl_oset_node_t; + +/* Concrete gl_oset_impl type, valid for this file only. */ +struct gl_oset_impl +{ + struct gl_oset_impl_base base; + struct gl_oset_node_impl *root; /* root node or NULL */ + size_t count; /* number of nodes */ +}; + +/* An AVL tree of height h has at least F_(h+2) [Fibonacci number] and at most + 2^h - 1 elements. So, h <= 84 (because a tree of height h >= 85 would have + at least F_87 elements, and because even on 64-bit machines, + sizeof (gl_oset_node_impl) * F_87 > 2^64 + this would exceed the address space of the machine. */ +#define MAXHEIGHT 83 + +/* Ensure the tree is balanced, after an insertion or deletion operation. + The height of NODE is incremented by HEIGHT_DIFF (1 or -1). + PARENT = NODE->parent. (NODE can also be NULL. But PARENT is non-NULL.) + Rotation operations are performed starting at PARENT (not NODE itself!). */ +static void +rebalance (gl_oset_t set, + gl_oset_node_t node, int height_diff, gl_oset_node_t parent) +{ + for (;;) + { + gl_oset_node_t child; + int previous_balance; + int balance_diff; + gl_oset_node_t nodeleft; + gl_oset_node_t noderight; + + child = node; + node = parent; + + previous_balance = node->balance; + + /* The balance of NODE is incremented by BALANCE_DIFF: +1 if the right + branch's height has increased by 1 or the left branch's height has + decreased by 1, -1 if the right branch's height has decreased by 1 or + the left branch's height has increased by 1, 0 if no height change. */ + if (node->left != NULL || node->right != NULL) + balance_diff = (child == node->right ? height_diff : -height_diff); + else + /* Special case where above formula doesn't work, because the caller + didn't tell whether node's left or right branch shrunk from height 1 + to NULL. */ + balance_diff = - previous_balance; + + node->balance += balance_diff; + if (balance_diff == previous_balance) + { + /* node->balance is outside the range [-1,1]. Must rotate. */ + gl_oset_node_t *nodep; + + if (node->parent == NULL) + /* node == set->root */ + nodep = &set->root; + else if (node->parent->left == node) + nodep = &node->parent->left; + else if (node->parent->right == node) + nodep = &node->parent->right; + else + abort (); + + nodeleft = node->left; + noderight = node->right; + + if (balance_diff < 0) + { + /* node->balance = -2. The subtree is heavier on the left side. + Rotate from left to right: + + * + / \ + h+2 h + */ + gl_oset_node_t nodeleftright = nodeleft->right; + if (nodeleft->balance <= 0) + { + /* + * h+2|h+3 + / \ / \ + h+2 h --> / h+1|h+2 + / \ | / \ + h+1 h|h+1 h+1 h|h+1 h + */ + node->left = nodeleftright; + nodeleft->right = node; + + nodeleft->parent = node->parent; + node->parent = nodeleft; + if (nodeleftright != NULL) + nodeleftright->parent = node; + + nodeleft->balance += 1; + node->balance = - nodeleft->balance; + + *nodep = nodeleft; + height_diff = (height_diff < 0 + ? /* noderight's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2|h+3. */ + nodeleft->balance - 1 + : /* nodeleft's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2|h+3. */ + nodeleft->balance); + } + else + { + /* + * h+2 + / \ / \ + h+2 h --> h+1 h+1 + / \ / \ / \ + h h+1 h L R h + / \ + L R + + */ + gl_oset_node_t L = nodeleft->right = nodeleftright->left; + gl_oset_node_t R = node->left = nodeleftright->right; + nodeleftright->left = nodeleft; + nodeleftright->right = node; + + nodeleftright->parent = node->parent; + if (L != NULL) + L->parent = nodeleft; + if (R != NULL) + R->parent = node; + nodeleft->parent = nodeleftright; + node->parent = nodeleftright; + + nodeleft->balance = (nodeleftright->balance > 0 ? -1 : 0); + node->balance = (nodeleftright->balance < 0 ? 1 : 0); + nodeleftright->balance = 0; + + *nodep = nodeleftright; + height_diff = (height_diff < 0 + ? /* noderight's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2. */ + -1 + : /* nodeleft's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2. */ + 0); + } + } + else + { + /* node->balance = 2. The subtree is heavier on the right side. + Rotate from right to left: + + * + / \ + h h+2 + */ + gl_oset_node_t noderightleft = noderight->left; + if (noderight->balance >= 0) + { + /* + * h+2|h+3 + / \ / \ + h h+2 --> h+1|h+2 \ + / \ / \ | + h|h+1 h+1 h h|h+1 h+1 + */ + node->right = noderightleft; + noderight->left = node; + + noderight->parent = node->parent; + node->parent = noderight; + if (noderightleft != NULL) + noderightleft->parent = node; + + noderight->balance -= 1; + node->balance = - noderight->balance; + + *nodep = noderight; + height_diff = (height_diff < 0 + ? /* nodeleft's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2|h+3. */ + - noderight->balance - 1 + : /* noderight's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2|h+3. */ + - noderight->balance); + } + else + { + /* + * h+2 + / \ / \ + h h+2 --> h+1 h+1 + / \ / \ / \ + h+1 h h L R h + / \ + L R + + */ + gl_oset_node_t L = node->right = noderightleft->left; + gl_oset_node_t R = noderight->left = noderightleft->right; + noderightleft->left = node; + noderightleft->right = noderight; + + noderightleft->parent = node->parent; + if (L != NULL) + L->parent = node; + if (R != NULL) + R->parent = noderight; + node->parent = noderightleft; + noderight->parent = noderightleft; + + node->balance = (noderightleft->balance > 0 ? -1 : 0); + noderight->balance = (noderightleft->balance < 0 ? 1 : 0); + noderightleft->balance = 0; + + *nodep = noderightleft; + height_diff = (height_diff < 0 + ? /* nodeleft's height had been decremented from + h+1 to h. The subtree's height changes from + h+3 to h+2. */ + -1 + : /* noderight's height had been incremented from + h+1 to h+2. The subtree's height changes from + h+2 to h+2. */ + 0); + } + } + node = *nodep; + } + else + { + /* No rotation needed. Only propagation of the height change to the + next higher level. */ + if (height_diff < 0) + height_diff = (previous_balance == 0 ? 0 : -1); + else + height_diff = (node->balance == 0 ? 0 : 1); + } + + if (height_diff == 0) + break; + + parent = node->parent; + if (parent == NULL) + break; + } +} + +static gl_oset_node_t +gl_tree_add_first (gl_oset_t set, const void *elt) +{ + /* Create new node. */ + gl_oset_node_t new_node = XMALLOC (struct gl_oset_node_impl); + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + new_node->value = elt; + + /* Add it to the tree. */ + if (set->root == NULL) + { + set->root = new_node; + new_node->parent = NULL; + } + else + { + gl_oset_node_t node; + + for (node = set->root; node->left != NULL; ) + node = node->left; + + node->left = new_node; + new_node->parent = node; + node->balance--; + + /* Rebalance. */ + if (node->right == NULL && node->parent != NULL) + rebalance (set, node, 1, node->parent); + } + + set->count++; + return new_node; +} + +static gl_oset_node_t +gl_tree_add_before (gl_oset_t set, gl_oset_node_t node, const void *elt) +{ + /* Create new node. */ + gl_oset_node_t new_node = XMALLOC (struct gl_oset_node_impl); + bool height_inc; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + new_node->value = elt; + + /* Add it to the tree. */ + if (node->left == NULL) + { + node->left = new_node; + node->balance--; + height_inc = (node->right == NULL); + } + else + { + for (node = node->left; node->right != NULL; ) + node = node->right; + node->right = new_node; + node->balance++; + height_inc = (node->left == NULL); + } + new_node->parent = node; + + /* Rebalance. */ + if (height_inc && node->parent != NULL) + rebalance (set, node, 1, node->parent); + + set->count++; + return new_node; +} + +static gl_oset_node_t +gl_tree_add_after (gl_oset_t set, gl_oset_node_t node, const void *elt) +{ + /* Create new node. */ + gl_oset_node_t new_node = XMALLOC (struct gl_oset_node_impl); + bool height_inc; + + new_node->left = NULL; + new_node->right = NULL; + new_node->balance = 0; + new_node->value = elt; + + /* Add it to the tree. */ + if (node->right == NULL) + { + node->right = new_node; + node->balance++; + height_inc = (node->left == NULL); + } + else + { + for (node = node->right; node->left != NULL; ) + node = node->left; + node->left = new_node; + node->balance--; + height_inc = (node->right == NULL); + } + new_node->parent = node; + + /* Rebalance. */ + if (height_inc && node->parent != NULL) + rebalance (set, node, 1, node->parent); + + set->count++; + return new_node; +} + +static bool +gl_tree_remove_node (gl_oset_t set, gl_oset_node_t node) +{ + gl_oset_node_t parent = node->parent; + + if (node->left == NULL) + { + /* Replace node with node->right. */ + gl_oset_node_t child = node->right; + + if (child != NULL) + child->parent = parent; + if (parent == NULL) + set->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + rebalance (set, child, -1, parent); + } + } + else if (node->right == NULL) + { + /* It is not absolutely necessary to treat this case. But the more + general case below is more complicated, hence slower. */ + /* Replace node with node->left. */ + gl_oset_node_t child = node->left; + + child->parent = parent; + if (parent == NULL) + set->root = child; + else + { + if (parent->left == node) + parent->left = child; + else /* parent->right == node */ + parent->right = child; + + rebalance (set, child, -1, parent); + } + } + else + { + /* Replace node with the rightmost element of the node->left subtree. */ + gl_oset_node_t subst; + gl_oset_node_t subst_parent; + gl_oset_node_t child; + + for (subst = node->left; subst->right != NULL; ) + subst = subst->right; + + subst_parent = subst->parent; + + child = subst->left; + + /* The case subst_parent == node is special: If we do nothing special, + we get confusion about node->left, subst->left and child->parent. + subst_parent == node + <==> The 'for' loop above terminated immediately. + <==> subst == subst_parent->left + [otherwise subst == subst_parent->right] + In this case, we would need to first set + child->parent = node; node->left = child; + and later - when we copy subst into node's position - again + child->parent = subst; subst->left = child; + Altogether a no-op. */ + if (subst_parent != node) + { + if (child != NULL) + child->parent = subst_parent; + subst_parent->right = child; + } + + /* Copy subst into node's position. + (This is safer than to copy subst's value into node, keep node in + place, and free subst.) */ + if (subst_parent != node) + { + subst->left = node->left; + subst->left->parent = subst; + } + subst->right = node->right; + subst->right->parent = subst; + subst->balance = node->balance; + subst->parent = parent; + if (parent == NULL) + set->root = subst; + else if (parent->left == node) + parent->left = subst; + else /* parent->right == node */ + parent->right = subst; + + /* Rebalancing starts at child's parent, that is subst_parent - + except when subst_parent == node. In this case, we need to use + its replacement, subst. */ + rebalance (set, child, -1, subst_parent != node ? subst_parent : subst); + } + + set->count--; + if (set->base.dispose_fn != NULL) + set->base.dispose_fn (node->value); + free (node); + return true; +} + +/* Generic binary tree code. */ +#include "gl_anytree_oset.h" + +/* For debugging. */ +static unsigned int +check_invariants (gl_oset_node_t node, gl_oset_node_t parent, size_t *counterp) +{ + unsigned int left_height = + (node->left != NULL ? check_invariants (node->left, node, counterp) : 0); + unsigned int right_height = + (node->right != NULL ? check_invariants (node->right, node, counterp) : 0); + int balance = (int)right_height - (int)left_height; + + if (!(node->parent == parent)) + abort (); + if (!(balance >= -1 && balance <= 1)) + abort (); + if (!(node->balance == balance)) + abort (); + + (*counterp)++; + + return 1 + (left_height > right_height ? left_height : right_height); +} +void +gl_avltree_oset_check_invariants (gl_oset_t set) +{ + size_t counter = 0; + if (set->root != NULL) + check_invariants (set->root, NULL, &counter); + if (!(set->count == counter)) + abort (); +} + +const struct gl_oset_implementation gl_avltree_oset_implementation = + { + gl_tree_create_empty, + gl_tree_size, + gl_tree_search, + gl_tree_search_atleast, + gl_tree_add, + gl_tree_remove, + gl_tree_oset_free, + gl_tree_iterator, + gl_tree_iterator_next, + gl_tree_iterator_free + }; diff --git a/coreseek/m4-1.4.13/lib/gl_avltree_oset.h b/coreseek/m4-1.4.13/lib/gl_avltree_oset.h new file mode 100644 index 0000000..3656ef0 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_avltree_oset.h @@ -0,0 +1,34 @@ +/* Ordered set data type implemented by a binary tree. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_AVLTREE_OSET_H +#define _GL_AVLTREE_OSET_H + +#include "gl_oset.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_oset_implementation gl_avltree_oset_implementation; +#define GL_AVLTREE_OSET &gl_avltree_oset_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_AVLTREE_OSET_H */ diff --git a/coreseek/m4-1.4.13/lib/gl_avltree_oset.o b/coreseek/m4-1.4.13/lib/gl_avltree_oset.o new file mode 100644 index 0000000..e424086 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/gl_avltree_oset.o differ diff --git a/coreseek/m4-1.4.13/lib/gl_linkedhash_list.c b/coreseek/m4-1.4.13/lib/gl_linkedhash_list.c new file mode 100644 index 0000000..7afecb5 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_linkedhash_list.c @@ -0,0 +1,123 @@ +/* Sequential list data type implemented by a hash table with a linked list. + Copyright (C) 2006, 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "gl_linkedhash_list.h" + +#include /* for SIZE_MAX */ +#include + +#include "xalloc.h" +#include "xsize.h" + +#ifndef uintptr_t +# define uintptr_t unsigned long +#endif + +#define WITH_HASHTABLE 1 + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Generic hash-table code. */ +#include "gl_anyhash_list1.h" + +/* Generic linked list code. */ +#include "gl_anylinked_list1.h" + +/* Generic hash-table code. */ +#include "gl_anyhash_list2.h" + +/* Resize the hash table if needed, after list->count was incremented. */ +static inline void +hash_resize_after_add (gl_list_t list) +{ + size_t count = list->count; + size_t estimate = xsum (count, count / 2); /* 1.5 * count */ + if (estimate > list->table_size) + hash_resize (list, estimate); +} + +/* Add a node to the hash table structure. */ +static inline void +add_to_bucket (gl_list_t list, gl_list_node_t node) +{ + size_t bucket = node->h.hashcode % list->table_size; + + node->h.hash_next = list->table[bucket]; + list->table[bucket] = &node->h; +} + +/* Remove a node from the hash table structure. */ +static inline void +remove_from_bucket (gl_list_t list, gl_list_node_t node) +{ + size_t bucket = node->h.hashcode % list->table_size; + gl_hash_entry_t *p; + + for (p = &list->table[bucket]; ; p = &(*p)->hash_next) + { + if (*p == &node->h) + { + *p = node->h.hash_next; + break; + } + if (*p == NULL) + /* node is not in the right bucket. Did the hash codes + change inadvertently? */ + abort (); + } +} + +/* Generic linked list code. */ +#include "gl_anylinked_list2.h" + + +const struct gl_list_implementation gl_linkedhash_list_implementation = + { + gl_linked_create_empty, + gl_linked_create, + gl_linked_size, + gl_linked_node_value, + gl_linked_node_set_value, + gl_linked_next_node, + gl_linked_previous_node, + gl_linked_get_at, + gl_linked_set_at, + gl_linked_search_from_to, + gl_linked_indexof_from_to, + gl_linked_add_first, + gl_linked_add_last, + gl_linked_add_before, + gl_linked_add_after, + gl_linked_add_at, + gl_linked_remove_node, + gl_linked_remove_at, + gl_linked_remove, + gl_linked_list_free, + gl_linked_iterator, + gl_linked_iterator_from_to, + gl_linked_iterator_next, + gl_linked_iterator_free, + gl_linked_sortedlist_search, + gl_linked_sortedlist_search_from_to, + gl_linked_sortedlist_indexof, + gl_linked_sortedlist_indexof_from_to, + gl_linked_sortedlist_add, + gl_linked_sortedlist_remove + }; diff --git a/coreseek/m4-1.4.13/lib/gl_linkedhash_list.h b/coreseek/m4-1.4.13/lib/gl_linkedhash_list.h new file mode 100644 index 0000000..a0b9196 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_linkedhash_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by a hash table with a linked list. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_LINKEDHASH_LIST_H +#define _GL_LINKEDHASH_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_linkedhash_list_implementation; +#define GL_LINKEDHASH_LIST &gl_linkedhash_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_LINKEDHASH_LIST_H */ diff --git a/coreseek/m4-1.4.13/lib/gl_linkedhash_list.o b/coreseek/m4-1.4.13/lib/gl_linkedhash_list.o new file mode 100644 index 0000000..948932a Binary files /dev/null and b/coreseek/m4-1.4.13/lib/gl_linkedhash_list.o differ diff --git a/coreseek/m4-1.4.13/lib/gl_list.c b/coreseek/m4-1.4.13/lib/gl_list.c new file mode 100644 index 0000000..9eca9e4 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_list.c @@ -0,0 +1,280 @@ +/* Abstract sequential list data type. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "gl_list.h" + +#if !HAVE_INLINE + +/* Define all functions of this file as inline accesses to the + struct gl_list_implementation. + Use #define to avoid a warning because of extern vs. static. */ + +gl_list_t +gl_list_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + return implementation->create_empty (implementation, equals_fn, hashcode_fn, + dispose_fn, allow_duplicates); +} + +gl_list_t +gl_list_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + return implementation->create (implementation, equals_fn, hashcode_fn, + dispose_fn, allow_duplicates, count, contents); +} + +size_t +gl_list_size (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->size (list); +} + +const void * +gl_list_node_value (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->node_value (list, node); +} + +void +gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt) +{ + ((const struct gl_list_impl_base *) list)->vtable + ->node_set_value (list, node, elt); +} + +gl_list_node_t +gl_list_next_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->next_node (list, node); +} + +gl_list_node_t +gl_list_previous_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->previous_node (list, node); +} + +const void * +gl_list_get_at (gl_list_t list, size_t position) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->get_at (list, position); +} + +gl_list_node_t +gl_list_set_at (gl_list_t list, size_t position, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->set_at (list, position, elt); +} + +gl_list_node_t +gl_list_search (gl_list_t list, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, 0, size, elt); +} + +gl_list_node_t +gl_list_search_from (gl_list_t list, size_t start_index, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, start_index, size, elt); +} + +gl_list_node_t +gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, start_index, end_index, elt); +} + +size_t +gl_list_indexof (gl_list_t list, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, 0, size, elt); +} + +size_t +gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, start_index, size, elt); +} + +size_t +gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, start_index, end_index, elt); +} + +gl_list_node_t +gl_list_add_first (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_first (list, elt); +} + +gl_list_node_t +gl_list_add_last (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_last (list, elt); +} + +gl_list_node_t +gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_before (list, node, elt); +} + +gl_list_node_t +gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_after (list, node, elt); +} + +gl_list_node_t +gl_list_add_at (gl_list_t list, size_t position, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_at (list, position, elt); +} + +bool +gl_list_remove_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_node (list, node); +} + +bool +gl_list_remove_at (gl_list_t list, size_t position) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_at (list, position); +} + +bool +gl_list_remove (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove (list, elt); +} + +void +gl_list_free (gl_list_t list) +{ + ((const struct gl_list_impl_base *) list)->vtable->list_free (list); +} + +gl_list_iterator_t +gl_list_iterator (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->iterator (list); +} + +gl_list_iterator_t +gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->iterator_from_to (list, start_index, end_index); +} + +bool +gl_list_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + return iterator->vtable->iterator_next (iterator, eltp, nodep); +} + +void +gl_list_iterator_free (gl_list_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +gl_list_node_t +gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_search (list, compar, elt); +} + +gl_list_node_t +gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_search_from_to (list, compar, start_index, end_index, + elt); +} + +size_t +gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_indexof (list, compar, elt); +} + +size_t +gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_indexof_from_to (list, compar, start_index, end_index, + elt); +} + +gl_list_node_t +gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_add (list, compar, elt); +} + +bool +gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_remove (list, compar, elt); +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/gl_list.h b/coreseek/m4-1.4.13/lib/gl_list.h new file mode 100644 index 0000000..ca4f476 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_list.h @@ -0,0 +1,750 @@ +/* Abstract sequential list data type. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_LIST_H +#define _GL_LIST_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* gl_list is an abstract list data type. It can contain any number of + objects ('void *' or 'const void *' pointers) in any given order. + Duplicates are allowed, but can optionally be forbidden. + + There are several implementations of this list datatype, optimized for + different operations or for memory. You can start using the simplest list + implementation, GL_ARRAY_LIST, and switch to a different implementation + later, when you realize which operations are performed the most frequently. + The API of the different implementations is exactly the same; when + switching to a different implementation, you only have to change the + gl_list_create call. + + The implementations are: + GL_ARRAY_LIST a growable array + GL_CARRAY_LIST a growable circular array + GL_LINKED_LIST a linked list + GL_AVLTREE_LIST a binary tree (AVL tree) + GL_RBTREE_LIST a binary tree (red-black tree) + GL_LINKEDHASH_LIST a hash table with a linked list + GL_AVLTREEHASH_LIST a hash table with a binary tree (AVL tree) + GL_RBTREEHASH_LIST a hash table with a binary tree (red-black tree) + + The memory consumption is asymptotically the same: O(1) for every object + in the list. When looking more closely at the average memory consumed + for an object, GL_ARRAY_LIST is the most compact representation, and + GL_LINKEDHASH_LIST and GL_TREEHASH_LIST need more memory. + + The guaranteed average performance of the operations is, for a list of + n elements: + + Operation ARRAY LINKED TREE LINKEDHASH TREEHASH + CARRAY with|without with|without + duplicates duplicates + + gl_list_size O(1) O(1) O(1) O(1) O(1) + gl_list_node_value O(1) O(1) O(1) O(1) O(1) + gl_list_node_set_value O(1) O(1) O(1) O(1) O((log n)²)/O(1) + gl_list_next_node O(1) O(1) O(log n) O(1) O(log n) + gl_list_previous_node O(1) O(1) O(log n) O(1) O(log n) + gl_list_get_at O(1) O(n) O(log n) O(n) O(log n) + gl_list_set_at O(1) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_search O(n) O(n) O(n) O(n)/O(1) O(log n)/O(1) + gl_list_search_from O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_search_from_to O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_indexof O(n) O(n) O(n) O(n) O(log n) + gl_list_indexof_from O(n) O(n) O(n) O(n) O((log n)²)/O(log n) + gl_list_indexof_from_to O(n) O(n) O(n) O(n) O((log n)²)/O(log n) + gl_list_add_first O(n)/O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_last O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_before O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_after O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) + gl_list_add_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_remove_node O(n) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_remove_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_list_remove O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) + gl_list_iterator O(1) O(1) O(log n) O(1) O(log n) + gl_list_iterator_from_to O(1) O(n) O(log n) O(n) O(log n) + gl_list_iterator_next O(1) O(1) O(log n) O(1) O(log n) + gl_sortedlist_search O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_search_from O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_indexof O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_indexof_fro O(log n) O(n) O(log n) O(n) O(log n) + gl_sortedlist_add O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + gl_sortedlist_remove O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) + */ + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Type of function used to compare two elements. + NULL denotes pointer comparison. */ +typedef bool (*gl_listelement_equals_fn) (const void *elt1, const void *elt2); + +/* Type of function used to compute a hash code. + NULL denotes a function that depends only on the pointer itself. */ +typedef size_t (*gl_listelement_hashcode_fn) (const void *elt); + +/* Type of function used to dispose an element once it's removed from a list. + NULL denotes a no-op. */ +typedef void (*gl_listelement_dispose_fn) (const void *elt); + +struct gl_list_impl; +/* Type representing an entire list. */ +typedef struct gl_list_impl * gl_list_t; + +struct gl_list_node_impl; +/* Type representing the position of an element in the list, in a way that + is more adapted to the list implementation than a plain index. + Note: It is invalidated by insertions and removals! */ +typedef struct gl_list_node_impl * gl_list_node_t; + +struct gl_list_implementation; +/* Type representing a list datatype implementation. */ +typedef const struct gl_list_implementation * gl_list_implementation_t; + +/* Create an empty list. + IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, + GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, + GL_RBTREEHASH_LIST. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. + ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in + the list. The implementation may verify this at runtime. */ +extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates); + +/* Create a list with given contents. + IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, + GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, + GL_RBTREEHASH_LIST. + EQUALS_FN is an element comparison function or NULL. + HASHCODE_FN is an element hash code function or NULL. + DISPOSE_FN is an element disposal function or NULL. + ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in + the list. The implementation may verify this at runtime. + COUNT is the number of initial elements. + CONTENTS[0..COUNT-1] is the initial contents. */ +extern gl_list_t gl_list_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents); + +/* Return the current number of elements in a list. */ +extern size_t gl_list_size (gl_list_t list); + +/* Return the element value represented by a list node. */ +extern const void * gl_list_node_value (gl_list_t list, gl_list_node_t node); + +/* Replace the element value represented by a list node. */ +extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, + const void *elt); + +/* Return the node immediately after the given node in the list, or NULL + if the given node is the last (rightmost) one in the list. */ +extern gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node); + +/* Return the node immediately before the given node in the list, or NULL + if the given node is the first (leftmost) one in the list. */ +extern gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node); + +/* Return the element at a given position in the list. + POSITION must be >= 0 and < gl_list_size (list). */ +extern const void * gl_list_get_at (gl_list_t list, size_t position); + +/* Replace the element at a given position in the list. + POSITION must be >= 0 and < gl_list_size (list). + Return its node. */ +extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, + const void *elt); + +/* Search whether an element is already in the list. + Return its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search (gl_list_t list, const void *elt); + +/* Search whether an element is already in the list, + at a position >= START_INDEX. + Return its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index, + const void *elt); + +/* Search whether an element is already in the list, + at a position >= START_INDEX and < END_INDEX. + Return its node if found, or NULL if not present in the list. */ +extern gl_list_node_t gl_list_search_from_to (gl_list_t list, + size_t start_index, + size_t end_index, + const void *elt); + +/* Search whether an element is already in the list. + Return its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof (gl_list_t list, const void *elt); + +/* Search whether an element is already in the list, + at a position >= START_INDEX. + Return its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof_from (gl_list_t list, size_t start_index, + const void *elt); + +/* Search whether an element is already in the list, + at a position >= START_INDEX and < END_INDEX. + Return its position if found, or (size_t)(-1) if not present in the list. */ +extern size_t gl_list_indexof_from_to (gl_list_t list, + size_t start_index, size_t end_index, + const void *elt); + +/* Add an element as the first element of the list. + Return its node. */ +extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt); + +/* Add an element as the last element of the list. + Return its node. */ +extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt); + +/* Add an element before a given element node of the list. + Return its node. */ +extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node, + const void *elt); + +/* Add an element after a given element node of the list. + Return its node. */ +extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node, + const void *elt); + +/* Add an element add a given position in the list. + POSITION must be >= 0 and <= gl_list_size (list). */ +extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, + const void *elt); + +/* Remove an element from the list. + Return true. */ +extern bool gl_list_remove_node (gl_list_t list, gl_list_node_t node); + +/* Remove an element at a given position from the list. + POSITION must be >= 0 and < gl_list_size (list). + Return true. */ +extern bool gl_list_remove_at (gl_list_t list, size_t position); + +/* Search and remove an element from the list. + Return true if it was found and removed. */ +extern bool gl_list_remove (gl_list_t list, const void *elt); + +/* Free an entire list. + (But this call does not free the elements of the list.) */ +extern void gl_list_free (gl_list_t list); + +/* --------------------- gl_list_iterator_t Data Type --------------------- */ + +/* Functions for iterating through a list. */ + +/* Type of an iterator that traverses a list. + This is a fixed-size struct, so that creation of an iterator doesn't need + memory allocation on the heap. */ +typedef struct +{ + /* For fast dispatch of gl_list_iterator_next. */ + const struct gl_list_implementation *vtable; + /* For detecting whether the last returned element was removed. */ + gl_list_t list; + size_t count; + /* Other, implementation-private fields. */ + void *p; void *q; + size_t i; size_t j; +} gl_list_iterator_t; + +/* Create an iterator traversing a list. + The list contents must not be modified while the iterator is in use, + except for replacing or removing the last returned element. */ +extern gl_list_iterator_t gl_list_iterator (gl_list_t list); + +/* Create an iterator traversing the element with indices i, + start_index <= i < end_index, of a list. + The list contents must not be modified while the iterator is in use, + except for replacing or removing the last returned element. */ +extern gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list, + size_t start_index, + size_t end_index); + +/* If there is a next element, store the next element in *ELTP, store its + node in *NODEP if NODEP is non-NULL, advance the iterator and return true. + Otherwise, return false. */ +extern bool gl_list_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep); + +/* Free an iterator. */ +extern void gl_list_iterator_free (gl_list_iterator_t *iterator); + +/* ---------------------- Sorted gl_list_t Data Type ---------------------- */ + +/* The following functions are for lists without duplicates where the + order is given by a sort criterion. */ + +/* Type of function used to compare two elements. Same as for qsort(). + NULL denotes pointer comparison. */ +typedef int (*gl_listelement_compar_fn) (const void *elt1, const void *elt2); + +/* Search whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Return its node if found, or NULL if not present in the list. + If the list contains several copies of ELT, the node of the leftmost one is + returned. */ +extern gl_list_node_t gl_sortedlist_search (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* Search whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Only list elements with indices >= START_INDEX and < END_INDEX are + considered; the implementation uses these bounds to minimize the number + of COMPAR invocations. + Return its node if found, or NULL if not present in the list. + If the list contains several copies of ELT, the node of the leftmost one is + returned. */ +extern gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + +/* Search whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Return its position if found, or (size_t)(-1) if not present in the list. + If the list contains several copies of ELT, the position of the leftmost one + is returned. */ +extern size_t gl_sortedlist_indexof (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* Search whether an element is already in the list. + The list is assumed to be sorted with COMPAR. + Only list elements with indices >= START_INDEX and < END_INDEX are + considered; the implementation uses these bounds to minimize the number + of COMPAR invocations. + Return its position if found, or (size_t)(-1) if not present in the list. + If the list contains several copies of ELT, the position of the leftmost one + is returned. */ +extern size_t gl_sortedlist_indexof_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + +/* Add an element at the appropriate position in the list. + The list is assumed to be sorted with COMPAR. + Return its node. */ +extern gl_list_node_t gl_sortedlist_add (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* Search and remove an element from the list. + The list is assumed to be sorted with COMPAR. + Return true if it was found and removed. + If the list contains several copies of ELT, only the leftmost one is + removed. */ +extern bool gl_sortedlist_remove (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + +/* ------------------------ Implementation Details ------------------------ */ + +struct gl_list_implementation +{ + /* gl_list_t functions. */ + gl_list_t (*create_empty) (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates); + gl_list_t (*create) (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents); + size_t (*size) (gl_list_t list); + const void * (*node_value) (gl_list_t list, gl_list_node_t node); + void (*node_set_value) (gl_list_t list, gl_list_node_t node, const void *elt); + gl_list_node_t (*next_node) (gl_list_t list, gl_list_node_t node); + gl_list_node_t (*previous_node) (gl_list_t list, gl_list_node_t node); + const void * (*get_at) (gl_list_t list, size_t position); + gl_list_node_t (*set_at) (gl_list_t list, size_t position, const void *elt); + gl_list_node_t (*search_from_to) (gl_list_t list, size_t start_index, + size_t end_index, const void *elt); + size_t (*indexof_from_to) (gl_list_t list, size_t start_index, + size_t end_index, const void *elt); + gl_list_node_t (*add_first) (gl_list_t list, const void *elt); + gl_list_node_t (*add_last) (gl_list_t list, const void *elt); + gl_list_node_t (*add_before) (gl_list_t list, gl_list_node_t node, + const void *elt); + gl_list_node_t (*add_after) (gl_list_t list, gl_list_node_t node, + const void *elt); + gl_list_node_t (*add_at) (gl_list_t list, size_t position, + const void *elt); + bool (*remove_node) (gl_list_t list, gl_list_node_t node); + bool (*remove_at) (gl_list_t list, size_t position); + bool (*remove) (gl_list_t list, const void *elt); + void (*list_free) (gl_list_t list); + /* gl_list_iterator_t functions. */ + gl_list_iterator_t (*iterator) (gl_list_t list); + gl_list_iterator_t (*iterator_from_to) (gl_list_t list, + size_t start_index, + size_t end_index); + bool (*iterator_next) (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep); + void (*iterator_free) (gl_list_iterator_t *iterator); + /* Sorted gl_list_t functions. */ + gl_list_node_t (*sortedlist_search) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + gl_list_node_t (*sortedlist_search_from_to) (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, + size_t end_index, + const void *elt); + size_t (*sortedlist_indexof) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + size_t (*sortedlist_indexof_from_to) (gl_list_t list, + gl_listelement_compar_fn compar, + size_t start_index, size_t end_index, + const void *elt); + gl_list_node_t (*sortedlist_add) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); + bool (*sortedlist_remove) (gl_list_t list, + gl_listelement_compar_fn compar, + const void *elt); +}; + +struct gl_list_impl_base +{ + const struct gl_list_implementation *vtable; + gl_listelement_equals_fn equals_fn; + gl_listelement_hashcode_fn hashcode_fn; + gl_listelement_dispose_fn dispose_fn; + bool allow_duplicates; +}; + +#if HAVE_INLINE + +/* Define all functions of this file as inline accesses to the + struct gl_list_implementation. + Use #define to avoid a warning because of extern vs. static. */ + +# define gl_list_create_empty gl_list_create_empty_inline +static inline gl_list_t +gl_list_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + return implementation->create_empty (implementation, equals_fn, hashcode_fn, + dispose_fn, allow_duplicates); +} + +# define gl_list_create gl_list_create_inline +static inline gl_list_t +gl_list_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + return implementation->create (implementation, equals_fn, hashcode_fn, + dispose_fn, allow_duplicates, count, contents); +} + +# define gl_list_size gl_list_size_inline +static inline size_t +gl_list_size (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->size (list); +} + +# define gl_list_node_value gl_list_node_value_inline +static inline const void * +gl_list_node_value (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->node_value (list, node); +} + +# define gl_list_node_set_value gl_list_node_set_value_inline +static inline void +gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt) +{ + ((const struct gl_list_impl_base *) list)->vtable + ->node_set_value (list, node, elt); +} + +# define gl_list_next_node gl_list_next_node_inline +static inline gl_list_node_t +gl_list_next_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->next_node (list, node); +} + +# define gl_list_previous_node gl_list_previous_node_inline +static inline gl_list_node_t +gl_list_previous_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->previous_node (list, node); +} + +# define gl_list_get_at gl_list_get_at_inline +static inline const void * +gl_list_get_at (gl_list_t list, size_t position) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->get_at (list, position); +} + +# define gl_list_set_at gl_list_set_at_inline +static inline gl_list_node_t +gl_list_set_at (gl_list_t list, size_t position, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->set_at (list, position, elt); +} + +# define gl_list_search gl_list_search_inline +static inline gl_list_node_t +gl_list_search (gl_list_t list, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, 0, size, elt); +} + +# define gl_list_search_from gl_list_search_from_inline +static inline gl_list_node_t +gl_list_search_from (gl_list_t list, size_t start_index, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, start_index, size, elt); +} + +# define gl_list_search_from_to gl_list_search_from_to_inline +static inline gl_list_node_t +gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->search_from_to (list, start_index, end_index, elt); +} + +# define gl_list_indexof gl_list_indexof_inline +static inline size_t +gl_list_indexof (gl_list_t list, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, 0, size, elt); +} + +# define gl_list_indexof_from gl_list_indexof_from_inline +static inline size_t +gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt) +{ + size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, start_index, size, elt); +} + +# define gl_list_indexof_from_to gl_list_indexof_from_to_inline +static inline size_t +gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->indexof_from_to (list, start_index, end_index, elt); +} + +# define gl_list_add_first gl_list_add_first_inline +static inline gl_list_node_t +gl_list_add_first (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_first (list, elt); +} + +# define gl_list_add_last gl_list_add_last_inline +static inline gl_list_node_t +gl_list_add_last (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_last (list, elt); +} + +# define gl_list_add_before gl_list_add_before_inline +static inline gl_list_node_t +gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_before (list, node, elt); +} + +# define gl_list_add_after gl_list_add_after_inline +static inline gl_list_node_t +gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_after (list, node, elt); +} + +# define gl_list_add_at gl_list_add_at_inline +static inline gl_list_node_t +gl_list_add_at (gl_list_t list, size_t position, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->add_at (list, position, elt); +} + +# define gl_list_remove_node gl_list_remove_node_inline +static inline bool +gl_list_remove_node (gl_list_t list, gl_list_node_t node) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_node (list, node); +} + +# define gl_list_remove_at gl_list_remove_at_inline +static inline bool +gl_list_remove_at (gl_list_t list, size_t position) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove_at (list, position); +} + +# define gl_list_remove gl_list_remove_inline +static inline bool +gl_list_remove (gl_list_t list, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->remove (list, elt); +} + +# define gl_list_free gl_list_free_inline +static inline void +gl_list_free (gl_list_t list) +{ + ((const struct gl_list_impl_base *) list)->vtable->list_free (list); +} + +# define gl_list_iterator gl_list_iterator_inline +static inline gl_list_iterator_t +gl_list_iterator (gl_list_t list) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->iterator (list); +} + +# define gl_list_iterator_from_to gl_list_iterator_from_to_inline +static inline gl_list_iterator_t +gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->iterator_from_to (list, start_index, end_index); +} + +# define gl_list_iterator_next gl_list_iterator_next_inline +static inline bool +gl_list_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + return iterator->vtable->iterator_next (iterator, eltp, nodep); +} + +# define gl_list_iterator_free gl_list_iterator_free_inline +static inline void +gl_list_iterator_free (gl_list_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +# define gl_sortedlist_search gl_sortedlist_search_inline +static inline gl_list_node_t +gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_search (list, compar, elt); +} + +# define gl_sortedlist_search_from_to gl_sortedlist_search_from_to_inline +static inline gl_list_node_t +gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_search_from_to (list, compar, start_index, end_index, + elt); +} + +# define gl_sortedlist_indexof gl_sortedlist_indexof_inline +static inline size_t +gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_indexof (list, compar, elt); +} + +# define gl_sortedlist_indexof_from_to gl_sortedlist_indexof_from_to_inline +static inline size_t +gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_indexof_from_to (list, compar, start_index, end_index, + elt); +} + +# define gl_sortedlist_add gl_sortedlist_add_inline +static inline gl_list_node_t +gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_add (list, compar, elt); +} + +# define gl_sortedlist_remove gl_sortedlist_remove_inline +static inline bool +gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) +{ + return ((const struct gl_list_impl_base *) list)->vtable + ->sortedlist_remove (list, compar, elt); +} + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_LIST_H */ diff --git a/coreseek/m4-1.4.13/lib/gl_list.o b/coreseek/m4-1.4.13/lib/gl_list.o new file mode 100644 index 0000000..928c4ad Binary files /dev/null and b/coreseek/m4-1.4.13/lib/gl_list.o differ diff --git a/coreseek/m4-1.4.13/lib/gl_oset.c b/coreseek/m4-1.4.13/lib/gl_oset.c new file mode 100644 index 0000000..9e364f2 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_oset.c @@ -0,0 +1,94 @@ +/* Abstract ordered set data type. + Copyright (C) 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "gl_oset.h" + +#if !HAVE_INLINE + +/* Define all functions of this file as inline accesses to the + struct gl_list_implementation. + Use #define to avoid a warning because of extern vs. static. */ + +gl_oset_t +gl_oset_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) +{ + return implementation->create_empty (implementation, compar_fn, dispose_fn); +} + +size_t +gl_oset_size (gl_oset_t set) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->size (set); +} + +bool +gl_oset_search (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->search (set, elt); +} + +bool +gl_oset_search_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, const void **eltp) +{ + return ((const struct gl_oset_impl_base *) set)->vtable + ->search_atleast (set, threshold_fn, threshold, eltp); +} + +bool +gl_oset_add (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->add (set, elt); +} + +bool +gl_oset_remove (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->remove (set, elt); +} + +void +gl_oset_free (gl_oset_t set) +{ + ((const struct gl_oset_impl_base *) set)->vtable->oset_free (set); +} + +gl_oset_iterator_t +gl_oset_iterator (gl_oset_t set) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->iterator (set); +} + +bool +gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) +{ + return iterator->vtable->iterator_next (iterator, eltp); +} + +void +gl_oset_iterator_free (gl_oset_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/gl_oset.h b/coreseek/m4-1.4.13/lib/gl_oset.h new file mode 100644 index 0000000..0ecc611 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/gl_oset.h @@ -0,0 +1,273 @@ +/* Abstract ordered set data type. + Copyright (C) 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_OSET_H +#define _GL_OSET_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* gl_oset is an abstract ordered set data type. It can contain any number + of objects ('void *' or 'const void *' pointers) in the order of a given + comparator function. Duplicates (in the sense of the comparator) are + forbidden. + + There are several implementations of this ordered set datatype, optimized + for different operations or for memory. You can start using the simplest + ordered set implementation, GL_ARRAY_OSET, and switch to a different + implementation later, when you realize which operations are performed + the most frequently. The API of the different implementations is exactly + the same; when switching to a different implementation, you only have to + change the gl_oset_create call. + + The implementations are: + GL_ARRAY_OSET a growable array + GL_AVLTREE_OSET a binary tree (AVL tree) + GL_RBTREE_OSET a binary tree (red-black tree) + + The memory consumption is asymptotically the same: O(1) for every object + in the set. When looking more closely at the average memory consumed + for an object, GL_ARRAY_OSET is the most compact representation, and + GL_AVLTREE_OSET, GL_RBTREE_OSET need more memory. + + The guaranteed average performance of the operations is, for a set of + n elements: + + Operation ARRAY TREE + + gl_oset_size O(1) O(1) + gl_oset_add O(n) O(log n) + gl_oset_remove O(n) O(log n) + gl_oset_search O(log n) O(log n) + gl_oset_search_atleast O(log n) O(log n) + gl_oset_iterator O(1) O(log n) + gl_oset_iterator_next O(1) O(log n) + */ + +/* -------------------------- gl_oset_t Data Type -------------------------- */ + +/* Type of function used to compare two elements. Same as for qsort(). + NULL denotes pointer comparison. */ +typedef int (*gl_setelement_compar_fn) (const void *elt1, const void *elt2); + +/* Type of function used to dispose an element once it's removed from a set. + NULL denotes a no-op. */ +typedef void (*gl_setelement_dispose_fn) (const void *elt); + +/* Type of function used to compare an element with a threshold. + Return true if the element is greater or equal than the threshold. */ +typedef bool (*gl_setelement_threshold_fn) (const void *elt, const void *threshold); + +struct gl_oset_impl; +/* Type representing an entire ordered set. */ +typedef struct gl_oset_impl * gl_oset_t; + +struct gl_oset_implementation; +/* Type representing a ordered set datatype implementation. */ +typedef const struct gl_oset_implementation * gl_oset_implementation_t; + +/* Create an empty set. + IMPLEMENTATION is one of GL_ARRAY_OSET, GL_AVLTREE_OSET, GL_RBTREE_OSET. + COMPAR_FN is an element comparison function or NULL. + DISPOSE_FN is an element disposal function or NULL. */ +extern gl_oset_t gl_oset_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn); + +/* Return the current number of elements in an ordered set. */ +extern size_t gl_oset_size (gl_oset_t set); + +/* Search whether an element is already in the ordered set. + Return true if found, or false if not present in the set. */ +extern bool gl_oset_search (gl_oset_t set, const void *elt); + +/* Search the least element in the ordered set that compares greater or equal + to the given THRESHOLD. The representation of the THRESHOLD is defined + by the THRESHOLD_FN. + Return true and store the found element in *ELTP if found, otherwise return + false. */ +extern bool gl_oset_search_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, + const void **eltp); + +/* Add an element to an ordered set. + Return true if it was not already in the set and added. */ +extern bool gl_oset_add (gl_oset_t set, const void *elt); + +/* Remove an element from an ordered set. + Return true if it was found and removed. */ +extern bool gl_oset_remove (gl_oset_t set, const void *elt); + +/* Free an entire ordered set. + (But this call does not free the elements of the set.) */ +extern void gl_oset_free (gl_oset_t set); + +/* --------------------- gl_oset_iterator_t Data Type --------------------- */ + +/* Functions for iterating through an ordered set. */ + +/* Type of an iterator that traverses an ordered set. + This is a fixed-size struct, so that creation of an iterator doesn't need + memory allocation on the heap. */ +typedef struct +{ + /* For fast dispatch of gl_oset_iterator_next. */ + const struct gl_oset_implementation *vtable; + /* For detecting whether the last returned element was removed. */ + gl_oset_t set; + size_t count; + /* Other, implementation-private fields. */ + void *p; void *q; + size_t i; size_t j; +} gl_oset_iterator_t; + +/* Create an iterator traversing an ordered set. + The set's contents must not be modified while the iterator is in use, + except for removing the last returned element. */ +extern gl_oset_iterator_t gl_oset_iterator (gl_oset_t set); + +/* If there is a next element, store the next element in *ELTP, advance the + iterator and return true. Otherwise, return false. */ +extern bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, + const void **eltp); + +/* Free an iterator. */ +extern void gl_oset_iterator_free (gl_oset_iterator_t *iterator); + +/* ------------------------ Implementation Details ------------------------ */ + +struct gl_oset_implementation +{ + /* gl_oset_t functions. */ + gl_oset_t (*create_empty) (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn); + size_t (*size) (gl_oset_t set); + bool (*search) (gl_oset_t set, const void *elt); + bool (*search_atleast) (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, const void **eltp); + bool (*add) (gl_oset_t set, const void *elt); + bool (*remove) (gl_oset_t set, const void *elt); + void (*oset_free) (gl_oset_t set); + /* gl_oset_iterator_t functions. */ + gl_oset_iterator_t (*iterator) (gl_oset_t set); + bool (*iterator_next) (gl_oset_iterator_t *iterator, const void **eltp); + void (*iterator_free) (gl_oset_iterator_t *iterator); +}; + +struct gl_oset_impl_base +{ + const struct gl_oset_implementation *vtable; + gl_setelement_compar_fn compar_fn; + gl_setelement_dispose_fn dispose_fn; +}; + +#if HAVE_INLINE + +/* Define all functions of this file as inline accesses to the + struct gl_oset_implementation. + Use #define to avoid a warning because of extern vs. static. */ + +# define gl_oset_create_empty gl_oset_create_empty_inline +static inline gl_oset_t +gl_oset_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) +{ + return implementation->create_empty (implementation, compar_fn, dispose_fn); +} + +# define gl_oset_size gl_oset_size_inline +static inline size_t +gl_oset_size (gl_oset_t set) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->size (set); +} + +# define gl_oset_search gl_oset_search_inline +static inline bool +gl_oset_search (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->search (set, elt); +} + +# define gl_oset_search_atleast gl_oset_search_atleast_inline +static inline bool +gl_oset_search_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, const void **eltp) +{ + return ((const struct gl_oset_impl_base *) set)->vtable + ->search_atleast (set, threshold_fn, threshold, eltp); +} + +# define gl_oset_add gl_oset_add_inline +static inline bool +gl_oset_add (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->add (set, elt); +} + +# define gl_oset_remove gl_oset_remove_inline +static inline bool +gl_oset_remove (gl_oset_t set, const void *elt) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->remove (set, elt); +} + +# define gl_oset_free gl_oset_free_inline +static inline void +gl_oset_free (gl_oset_t set) +{ + ((const struct gl_oset_impl_base *) set)->vtable->oset_free (set); +} + +# define gl_oset_iterator gl_oset_iterator_inline +static inline gl_oset_iterator_t +gl_oset_iterator (gl_oset_t set) +{ + return ((const struct gl_oset_impl_base *) set)->vtable->iterator (set); +} + +# define gl_oset_iterator_next gl_oset_iterator_next_inline +static inline bool +gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) +{ + return iterator->vtable->iterator_next (iterator, eltp); +} + +# define gl_oset_iterator_free gl_oset_iterator_free_inline +static inline void +gl_oset_iterator_free (gl_oset_iterator_t *iterator) +{ + iterator->vtable->iterator_free (iterator); +} + +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_OSET_H */ diff --git a/coreseek/m4-1.4.13/lib/gl_oset.o b/coreseek/m4-1.4.13/lib/gl_oset.o new file mode 100644 index 0000000..150a4b7 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/gl_oset.o differ diff --git a/coreseek/m4-1.4.13/lib/glthread/.deps/.dirstamp b/coreseek/m4-1.4.13/lib/glthread/.deps/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/coreseek/m4-1.4.13/lib/glthread/.deps/lock.Po b/coreseek/m4-1.4.13/lib/glthread/.deps/lock.Po new file mode 100644 index 0000000..ac7a738 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/glthread/.deps/lock.Po @@ -0,0 +1,117 @@ +glthread/lock.o: glthread/lock.c config.h glthread/lock.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + stdlib.h /usr/include/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h + +config.h: + +glthread/lock.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: diff --git a/coreseek/m4-1.4.13/lib/glthread/.deps/threadlib.Po b/coreseek/m4-1.4.13/lib/glthread/.deps/threadlib.Po new file mode 100644 index 0000000..00d9ca7 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/glthread/.deps/threadlib.Po @@ -0,0 +1,3 @@ +glthread/threadlib.o: glthread/threadlib.c config.h + +config.h: diff --git a/coreseek/m4-1.4.13/lib/glthread/.deps/tls.Po b/coreseek/m4-1.4.13/lib/glthread/.deps/tls.Po new file mode 100644 index 0000000..a37b802 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/glthread/.deps/tls.Po @@ -0,0 +1,117 @@ +glthread/tls.o: glthread/tls.c config.h glthread/tls.h \ + /usr/include/errno.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/errno.h /usr/include/linux/errno.h \ + /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + stdlib.h /usr/include/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h + +config.h: + +glthread/tls.h: + +/usr/include/errno.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +stdlib.h: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: diff --git a/coreseek/m4-1.4.13/lib/glthread/.dirstamp b/coreseek/m4-1.4.13/lib/glthread/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/coreseek/m4-1.4.13/lib/glthread/lock.c b/coreseek/m4-1.4.13/lib/glthread/lock.c new file mode 100644 index 0000000..7db6426 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/glthread/lock.c @@ -0,0 +1,1058 @@ +/* Locking in multithreaded situations. + Copyright (C) 2005-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, + gthr-win32.h. */ + +#include + +#include "glthread/lock.h" + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +# if HAVE_PTHREAD_RWLOCK + +# if !defined PTHREAD_RWLOCK_INITIALIZER + +int +glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_rwlock_init (&lock->rwlock, NULL); + if (err != 0) + return err; + lock->initialized = 1; + return 0; +} + +int +glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) +{ + if (!lock->initialized) + { + int err; + + err = pthread_mutex_lock (&lock->guard); + if (err != 0) + return err; + if (!lock->initialized) + { + err = glthread_rwlock_init_multithreaded (lock); + if (err != 0) + { + pthread_mutex_unlock (&lock->guard); + return err; + } + } + err = pthread_mutex_unlock (&lock->guard); + if (err != 0) + return err; + } + return pthread_rwlock_rdlock (&lock->rwlock); +} + +int +glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) +{ + if (!lock->initialized) + { + int err; + + err = pthread_mutex_lock (&lock->guard); + if (err != 0) + return err; + if (!lock->initialized) + { + err = glthread_rwlock_init_multithreaded (lock); + if (err != 0) + { + pthread_mutex_unlock (&lock->guard); + return err; + } + } + err = pthread_mutex_unlock (&lock->guard); + if (err != 0) + return err; + } + return pthread_rwlock_wrlock (&lock->rwlock); +} + +int +glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) +{ + if (!lock->initialized) + return EINVAL; + return pthread_rwlock_unlock (&lock->rwlock); +} + +int +glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) +{ + int err; + + if (!lock->initialized) + return EINVAL; + err = pthread_rwlock_destroy (&lock->rwlock); + if (err != 0) + return err; + lock->initialized = 0; + return 0; +} + +# endif + +# else + +int +glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_init (&lock->lock, NULL); + if (err != 0) + return err; + err = pthread_cond_init (&lock->waiting_readers, NULL); + if (err != 0) + return err; + err = pthread_cond_init (&lock->waiting_writers, NULL); + if (err != 0) + return err; + lock->waiting_writers_count = 0; + lock->runcount = 0; + return 0; +} + +int +glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_lock (&lock->lock); + if (err != 0) + return err; + /* Test whether only readers are currently running, and whether the runcount + field will not overflow. */ + /* POSIX says: "It is implementation-defined whether the calling thread + acquires the lock when a writer does not hold the lock and there are + writers blocked on the lock." Let's say, no: give the writers a higher + priority. */ + while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_readers. */ + err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); + if (err != 0) + { + pthread_mutex_unlock (&lock->lock); + return err; + } + } + lock->runcount++; + return pthread_mutex_unlock (&lock->lock); +} + +int +glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_lock (&lock->lock); + if (err != 0) + return err; + /* Test whether no readers or writers are currently running. */ + while (!(lock->runcount == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_writers. */ + lock->waiting_writers_count++; + err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); + if (err != 0) + { + lock->waiting_writers_count--; + pthread_mutex_unlock (&lock->lock); + return err; + } + lock->waiting_writers_count--; + } + lock->runcount--; /* runcount becomes -1 */ + return pthread_mutex_unlock (&lock->lock); +} + +int +glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_lock (&lock->lock); + if (err != 0) + return err; + if (lock->runcount < 0) + { + /* Drop a writer lock. */ + if (!(lock->runcount == -1)) + { + pthread_mutex_unlock (&lock->lock); + return EINVAL; + } + lock->runcount = 0; + } + else + { + /* Drop a reader lock. */ + if (!(lock->runcount > 0)) + { + pthread_mutex_unlock (&lock->lock); + return EINVAL; + } + lock->runcount--; + } + if (lock->runcount == 0) + { + /* POSIX recommends that "write locks shall take precedence over read + locks", to avoid "writer starvation". */ + if (lock->waiting_writers_count > 0) + { + /* Wake up one of the waiting writers. */ + err = pthread_cond_signal (&lock->waiting_writers); + if (err != 0) + { + pthread_mutex_unlock (&lock->lock); + return err; + } + } + else + { + /* Wake up all waiting readers. */ + err = pthread_cond_broadcast (&lock->waiting_readers); + if (err != 0) + { + pthread_mutex_unlock (&lock->lock); + return err; + } + } + } + return pthread_mutex_unlock (&lock->lock); +} + +int +glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) +{ + int err; + + err = pthread_mutex_destroy (&lock->lock); + if (err != 0) + return err; + err = pthread_cond_destroy (&lock->waiting_readers); + if (err != 0) + return err; + err = pthread_cond_destroy (&lock->waiting_writers); + if (err != 0) + return err; + return 0; +} + +# endif + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +# if HAVE_PTHREAD_MUTEX_RECURSIVE + +# if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + +int +glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +{ + pthread_mutexattr_t attributes; + int err; + + err = pthread_mutexattr_init (&attributes); + if (err != 0) + return err; + err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); + if (err != 0) + { + pthread_mutexattr_destroy (&attributes); + return err; + } + err = pthread_mutex_init (lock, &attributes); + if (err != 0) + { + pthread_mutexattr_destroy (&attributes); + return err; + } + err = pthread_mutexattr_destroy (&attributes); + if (err != 0) + return err; + return 0; +} + +# else + +int +glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +{ + pthread_mutexattr_t attributes; + int err; + + err = pthread_mutexattr_init (&attributes); + if (err != 0) + return err; + err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); + if (err != 0) + { + pthread_mutexattr_destroy (&attributes); + return err; + } + err = pthread_mutex_init (&lock->recmutex, &attributes); + if (err != 0) + { + pthread_mutexattr_destroy (&attributes); + return err; + } + err = pthread_mutexattr_destroy (&attributes); + if (err != 0) + return err; + lock->initialized = 1; + return 0; +} + +int +glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) +{ + if (!lock->initialized) + { + int err; + + err = pthread_mutex_lock (&lock->guard); + if (err != 0) + return err; + if (!lock->initialized) + { + err = glthread_recursive_lock_init_multithreaded (lock); + if (err != 0) + { + pthread_mutex_unlock (&lock->guard); + return err; + } + } + err = pthread_mutex_unlock (&lock->guard); + if (err != 0) + return err; + } + return pthread_mutex_lock (&lock->recmutex); +} + +int +glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) +{ + if (!lock->initialized) + return EINVAL; + return pthread_mutex_unlock (&lock->recmutex); +} + +int +glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) +{ + int err; + + if (!lock->initialized) + return EINVAL; + err = pthread_mutex_destroy (&lock->recmutex); + if (err != 0) + return err; + lock->initialized = 0; + return 0; +} + +# endif + +# else + +int +glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +{ + int err; + + err = pthread_mutex_init (&lock->mutex, NULL); + if (err != 0) + return err; + lock->owner = (pthread_t) 0; + lock->depth = 0; + return 0; +} + +int +glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) +{ + pthread_t self = pthread_self (); + if (lock->owner != self) + { + int err; + + err = pthread_mutex_lock (&lock->mutex); + if (err != 0) + return err; + lock->owner = self; + } + if (++(lock->depth) == 0) /* wraparound? */ + { + lock->depth--; + return EAGAIN; + } + return 0; +} + +int +glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) +{ + if (lock->owner != pthread_self ()) + return EPERM; + if (lock->depth == 0) + return EINVAL; + if (--(lock->depth) == 0) + { + lock->owner = (pthread_t) 0; + return pthread_mutex_unlock (&lock->mutex); + } + else + return 0; +} + +int +glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) +{ + if (lock->owner != (pthread_t) 0) + return EBUSY; + return pthread_mutex_destroy (&lock->mutex); +} + +# endif + +/* -------------------------- gl_once_t datatype -------------------------- */ + +static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; + +int +glthread_once_singlethreaded (pthread_once_t *once_control) +{ + /* We don't know whether pthread_once_t is an integer type, a floating-point + type, a pointer type, or a structure type. */ + char *firstbyte = (char *)once_control; + if (*firstbyte == *(const char *)&fresh_once) + { + /* First time use of once_control. Invert the first byte. */ + *firstbyte = ~ *(const char *)&fresh_once; + return 1; + } + else + return 0; +} + +#endif + +/* ========================================================================= */ + +#if USE_PTH_THREADS + +/* Use the GNU Pth threads library. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +/* -------------------------- gl_once_t datatype -------------------------- */ + +static void +glthread_once_call (void *arg) +{ + void (**gl_once_temp_addr) (void) = (void (**) (void)) arg; + void (*initfunction) (void) = *gl_once_temp_addr; + initfunction (); +} + +int +glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)) +{ + void (*temp) (void) = initfunction; + return (!pth_once (once_control, glthread_once_call, &temp) ? errno : 0); +} + +int +glthread_once_singlethreaded (pth_once_t *once_control) +{ + /* We know that pth_once_t is an integer type. */ + if (*once_control == PTH_ONCE_INIT) + { + /* First time use of once_control. Invert the marker. */ + *once_control = ~ PTH_ONCE_INIT; + return 1; + } + else + return 0; +} + +#endif + +/* ========================================================================= */ + +#if USE_SOLARIS_THREADS + +/* Use the old Solaris threads library. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +int +glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) +{ + int err; + + err = mutex_init (&lock->mutex, USYNC_THREAD, NULL); + if (err != 0) + return err; + lock->owner = (thread_t) 0; + lock->depth = 0; + return 0; +} + +int +glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) +{ + thread_t self = thr_self (); + if (lock->owner != self) + { + int err; + + err = mutex_lock (&lock->mutex); + if (err != 0) + return err; + lock->owner = self; + } + if (++(lock->depth) == 0) /* wraparound? */ + { + lock->depth--; + return EAGAIN; + } + return 0; +} + +int +glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) +{ + if (lock->owner != thr_self ()) + return EPERM; + if (lock->depth == 0) + return EINVAL; + if (--(lock->depth) == 0) + { + lock->owner = (thread_t) 0; + return mutex_unlock (&lock->mutex); + } + else + return 0; +} + +int +glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) +{ + if (lock->owner != (thread_t) 0) + return EBUSY; + return mutex_destroy (&lock->mutex); +} + +/* -------------------------- gl_once_t datatype -------------------------- */ + +int +glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)) +{ + if (!once_control->inited) + { + int err; + + /* Use the mutex to guarantee that if another thread is already calling + the initfunction, this thread waits until it's finished. */ + err = mutex_lock (&once_control->mutex); + if (err != 0) + return err; + if (!once_control->inited) + { + once_control->inited = 1; + initfunction (); + } + return mutex_unlock (&once_control->mutex); + } + else + return 0; +} + +int +glthread_once_singlethreaded (gl_once_t *once_control) +{ + /* We know that gl_once_t contains an integer type. */ + if (!once_control->inited) + { + /* First time use of once_control. Invert the marker. */ + once_control->inited = ~ 0; + return 1; + } + else + return 0; +} + +#endif + +/* ========================================================================= */ + +#if USE_WIN32_THREADS + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +void +glthread_lock_init_func (gl_lock_t *lock) +{ + InitializeCriticalSection (&lock->lock); + lock->guard.done = 1; +} + +int +glthread_lock_lock_func (gl_lock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glthread_lock_init (lock); + else + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + EnterCriticalSection (&lock->lock); + return 0; +} + +int +glthread_lock_unlock_func (gl_lock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glthread_lock_destroy_func (gl_lock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + DeleteCriticalSection (&lock->lock); + lock->guard.done = 0; + return 0; +} + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +/* In this file, the waitqueues are implemented as circular arrays. */ +#define gl_waitqueue_t gl_carray_waitqueue_t + +static inline void +gl_waitqueue_init (gl_waitqueue_t *wq) +{ + wq->array = NULL; + wq->count = 0; + wq->alloc = 0; + wq->offset = 0; +} + +/* Enqueues the current thread, represented by an event, in a wait queue. + Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ +static HANDLE +gl_waitqueue_add (gl_waitqueue_t *wq) +{ + HANDLE event; + unsigned int index; + + if (wq->count == wq->alloc) + { + unsigned int new_alloc = 2 * wq->alloc + 1; + HANDLE *new_array = + (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); + if (new_array == NULL) + /* No more memory. */ + return INVALID_HANDLE_VALUE; + /* Now is a good opportunity to rotate the array so that its contents + starts at offset 0. */ + if (wq->offset > 0) + { + unsigned int old_count = wq->count; + unsigned int old_alloc = wq->alloc; + unsigned int old_offset = wq->offset; + unsigned int i; + if (old_offset + old_count > old_alloc) + { + unsigned int limit = old_offset + old_count - old_alloc; + for (i = 0; i < limit; i++) + new_array[old_alloc + i] = new_array[i]; + } + for (i = 0; i < old_count; i++) + new_array[i] = new_array[old_offset + i]; + wq->offset = 0; + } + wq->array = new_array; + wq->alloc = new_alloc; + } + /* Whether the created event is a manual-reset one or an auto-reset one, + does not matter, since we will wait on it only once. */ + event = CreateEvent (NULL, TRUE, FALSE, NULL); + if (event == INVALID_HANDLE_VALUE) + /* No way to allocate an event. */ + return INVALID_HANDLE_VALUE; + index = wq->offset + wq->count; + if (index >= wq->alloc) + index -= wq->alloc; + wq->array[index] = event; + wq->count++; + return event; +} + +/* Notifies the first thread from a wait queue and dequeues it. */ +static inline void +gl_waitqueue_notify_first (gl_waitqueue_t *wq) +{ + SetEvent (wq->array[wq->offset + 0]); + wq->offset++; + wq->count--; + if (wq->count == 0 || wq->offset == wq->alloc) + wq->offset = 0; +} + +/* Notifies all threads from a wait queue and dequeues them all. */ +static inline void +gl_waitqueue_notify_all (gl_waitqueue_t *wq) +{ + unsigned int i; + + for (i = 0; i < wq->count; i++) + { + unsigned int index = wq->offset + i; + if (index >= wq->alloc) + index -= wq->alloc; + SetEvent (wq->array[index]); + } + wq->count = 0; + wq->offset = 0; +} + +void +glthread_rwlock_init_func (gl_rwlock_t *lock) +{ + InitializeCriticalSection (&lock->lock); + gl_waitqueue_init (&lock->waiting_readers); + gl_waitqueue_init (&lock->waiting_writers); + lock->runcount = 0; + lock->guard.done = 1; +} + +int +glthread_rwlock_rdlock_func (gl_rwlock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glthread_rwlock_init (lock); + else + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + EnterCriticalSection (&lock->lock); + /* Test whether only readers are currently running, and whether the runcount + field will not overflow. */ + if (!(lock->runcount + 1 > 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_readers. */ + HANDLE event = gl_waitqueue_add (&lock->waiting_readers); + if (event != INVALID_HANDLE_VALUE) + { + DWORD result; + LeaveCriticalSection (&lock->lock); + /* Wait until another thread signals this event. */ + result = WaitForSingleObject (event, INFINITE); + if (result == WAIT_FAILED || result == WAIT_TIMEOUT) + abort (); + CloseHandle (event); + /* The thread which signalled the event already did the bookkeeping: + removed us from the waiting_readers, incremented lock->runcount. */ + if (!(lock->runcount > 0)) + abort (); + return 0; + } + else + { + /* Allocation failure. Weird. */ + do + { + LeaveCriticalSection (&lock->lock); + Sleep (1); + EnterCriticalSection (&lock->lock); + } + while (!(lock->runcount + 1 > 0)); + } + } + lock->runcount++; + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glthread_rwlock_wrlock_func (gl_rwlock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glthread_rwlock_init (lock); + else + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + EnterCriticalSection (&lock->lock); + /* Test whether no readers or writers are currently running. */ + if (!(lock->runcount == 0)) + { + /* This thread has to wait for a while. Enqueue it among the + waiting_writers. */ + HANDLE event = gl_waitqueue_add (&lock->waiting_writers); + if (event != INVALID_HANDLE_VALUE) + { + DWORD result; + LeaveCriticalSection (&lock->lock); + /* Wait until another thread signals this event. */ + result = WaitForSingleObject (event, INFINITE); + if (result == WAIT_FAILED || result == WAIT_TIMEOUT) + abort (); + CloseHandle (event); + /* The thread which signalled the event already did the bookkeeping: + removed us from the waiting_writers, set lock->runcount = -1. */ + if (!(lock->runcount == -1)) + abort (); + return 0; + } + else + { + /* Allocation failure. Weird. */ + do + { + LeaveCriticalSection (&lock->lock); + Sleep (1); + EnterCriticalSection (&lock->lock); + } + while (!(lock->runcount == 0)); + } + } + lock->runcount--; /* runcount becomes -1 */ + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glthread_rwlock_unlock_func (gl_rwlock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + EnterCriticalSection (&lock->lock); + if (lock->runcount < 0) + { + /* Drop a writer lock. */ + if (!(lock->runcount == -1)) + abort (); + lock->runcount = 0; + } + else + { + /* Drop a reader lock. */ + if (!(lock->runcount > 0)) + { + LeaveCriticalSection (&lock->lock); + return EPERM; + } + lock->runcount--; + } + if (lock->runcount == 0) + { + /* POSIX recommends that "write locks shall take precedence over read + locks", to avoid "writer starvation". */ + if (lock->waiting_writers.count > 0) + { + /* Wake up one of the waiting writers. */ + lock->runcount--; + gl_waitqueue_notify_first (&lock->waiting_writers); + } + else + { + /* Wake up all waiting readers. */ + lock->runcount += lock->waiting_readers.count; + gl_waitqueue_notify_all (&lock->waiting_readers); + } + } + LeaveCriticalSection (&lock->lock); + return 0; +} + +int +glthread_rwlock_destroy_func (gl_rwlock_t *lock) +{ + if (!lock->guard.done) + return EINVAL; + if (lock->runcount != 0) + return EBUSY; + DeleteCriticalSection (&lock->lock); + if (lock->waiting_readers.array != NULL) + free (lock->waiting_readers.array); + if (lock->waiting_writers.array != NULL) + free (lock->waiting_writers.array); + lock->guard.done = 0; + return 0; +} + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +void +glthread_recursive_lock_init_func (gl_recursive_lock_t *lock) +{ + lock->owner = 0; + lock->depth = 0; + InitializeCriticalSection (&lock->lock); + lock->guard.done = 1; +} + +int +glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock) +{ + if (!lock->guard.done) + { + if (InterlockedIncrement (&lock->guard.started) == 0) + /* This thread is the first one to need this lock. Initialize it. */ + glthread_recursive_lock_init (lock); + else + /* Yield the CPU while waiting for another thread to finish + initializing this lock. */ + while (!lock->guard.done) + Sleep (0); + } + { + DWORD self = GetCurrentThreadId (); + if (lock->owner != self) + { + EnterCriticalSection (&lock->lock); + lock->owner = self; + } + if (++(lock->depth) == 0) /* wraparound? */ + { + lock->depth--; + return EAGAIN; + } + } + return 0; +} + +int +glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock) +{ + if (lock->owner != GetCurrentThreadId ()) + return EPERM; + if (lock->depth == 0) + return EINVAL; + if (--(lock->depth) == 0) + { + lock->owner = 0; + LeaveCriticalSection (&lock->lock); + } + return 0; +} + +int +glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock) +{ + if (lock->owner != 0) + return EBUSY; + DeleteCriticalSection (&lock->lock); + lock->guard.done = 0; + return 0; +} + +/* -------------------------- gl_once_t datatype -------------------------- */ + +void +glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)) +{ + if (once_control->inited <= 0) + { + if (InterlockedIncrement (&once_control->started) == 0) + { + /* This thread is the first one to come to this once_control. */ + InitializeCriticalSection (&once_control->lock); + EnterCriticalSection (&once_control->lock); + once_control->inited = 0; + initfunction (); + once_control->inited = 1; + LeaveCriticalSection (&once_control->lock); + } + else + { + /* Undo last operation. */ + InterlockedDecrement (&once_control->started); + /* Some other thread has already started the initialization. + Yield the CPU while waiting for the other thread to finish + initializing and taking the lock. */ + while (once_control->inited < 0) + Sleep (0); + if (once_control->inited <= 0) + { + /* Take the lock. This blocks until the other thread has + finished calling the initfunction. */ + EnterCriticalSection (&once_control->lock); + LeaveCriticalSection (&once_control->lock); + if (!(once_control->inited > 0)) + abort (); + } + } + } +} + +#endif + +/* ========================================================================= */ diff --git a/coreseek/m4-1.4.13/lib/glthread/lock.h b/coreseek/m4-1.4.13/lib/glthread/lock.h new file mode 100644 index 0000000..0cfb30e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/glthread/lock.h @@ -0,0 +1,927 @@ +/* Locking in multithreaded situations. + Copyright (C) 2005-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Bruno Haible , 2005. + Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, + gthr-win32.h. */ + +/* This file contains locking primitives for use with a given thread library. + It does not contain primitives for creating threads or for other + synchronization primitives. + + Normal (non-recursive) locks: + Type: gl_lock_t + Declaration: gl_lock_define(extern, name) + Initializer: gl_lock_define_initialized(, name) + Initialization: gl_lock_init (name); + Taking the lock: gl_lock_lock (name); + Releasing the lock: gl_lock_unlock (name); + De-initialization: gl_lock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_lock_init (&name); + Taking the lock: err = glthread_lock_lock (&name); + Releasing the lock: err = glthread_lock_unlock (&name); + De-initialization: err = glthread_lock_destroy (&name); + + Read-Write (non-recursive) locks: + Type: gl_rwlock_t + Declaration: gl_rwlock_define(extern, name) + Initializer: gl_rwlock_define_initialized(, name) + Initialization: gl_rwlock_init (name); + Taking the lock: gl_rwlock_rdlock (name); + gl_rwlock_wrlock (name); + Releasing the lock: gl_rwlock_unlock (name); + De-initialization: gl_rwlock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_rwlock_init (&name); + Taking the lock: err = glthread_rwlock_rdlock (&name); + err = glthread_rwlock_wrlock (&name); + Releasing the lock: err = glthread_rwlock_unlock (&name); + De-initialization: err = glthread_rwlock_destroy (&name); + + Recursive locks: + Type: gl_recursive_lock_t + Declaration: gl_recursive_lock_define(extern, name) + Initializer: gl_recursive_lock_define_initialized(, name) + Initialization: gl_recursive_lock_init (name); + Taking the lock: gl_recursive_lock_lock (name); + Releasing the lock: gl_recursive_lock_unlock (name); + De-initialization: gl_recursive_lock_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_recursive_lock_init (&name); + Taking the lock: err = glthread_recursive_lock_lock (&name); + Releasing the lock: err = glthread_recursive_lock_unlock (&name); + De-initialization: err = glthread_recursive_lock_destroy (&name); + + Once-only execution: + Type: gl_once_t + Initializer: gl_once_define(extern, name) + Execution: gl_once (name, initfunction); + Equivalent functions with control of error handling: + Execution: err = glthread_once (&name, initfunction); +*/ + + +#ifndef _LOCK_H +#define _LOCK_H + +#include +#include + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The pthread_in_use() detection needs to be done at runtime. */ +# define pthread_in_use() \ + glthread_in_use () +extern int glthread_in_use (void); + +# endif + +# if USE_POSIX_THREADS_WEAK + +/* Use weak references to the POSIX threads library. */ + +/* Weak references avoid dragging in external libraries if the other parts + of the program don't use them. Here we use them, because we don't want + every program that uses libintl to depend on libpthread. This assumes + that libpthread would not be loaded after libintl; i.e. if libintl is + loaded first, by an executable that does not depend on libpthread, and + then a module is dynamically loaded that depends on libpthread, libintl + will not be multithread-safe. */ + +/* The way to test at runtime whether libpthread is present is to test + whether a function pointer's value, such as &pthread_mutex_init, is + non-NULL. However, some versions of GCC have a bug through which, in + PIC mode, &foo != NULL always evaluates to true if there is a direct + call to foo(...) in the same function. To avoid this, we test the + address of a function in libpthread that we don't use. */ + +# pragma weak pthread_mutex_init +# pragma weak pthread_mutex_lock +# pragma weak pthread_mutex_unlock +# pragma weak pthread_mutex_destroy +# pragma weak pthread_rwlock_init +# pragma weak pthread_rwlock_rdlock +# pragma weak pthread_rwlock_wrlock +# pragma weak pthread_rwlock_unlock +# pragma weak pthread_rwlock_destroy +# pragma weak pthread_once +# pragma weak pthread_cond_init +# pragma weak pthread_cond_wait +# pragma weak pthread_cond_signal +# pragma weak pthread_cond_broadcast +# pragma weak pthread_cond_destroy +# pragma weak pthread_mutexattr_init +# pragma weak pthread_mutexattr_settype +# pragma weak pthread_mutexattr_destroy +# ifndef pthread_self +# pragma weak pthread_self +# endif + +# if !PTHREAD_IN_USE_DETECTION_HARD +# pragma weak pthread_cancel +# define pthread_in_use() (pthread_cancel != NULL) +# endif + +# else + +# if !PTHREAD_IN_USE_DETECTION_HARD +# define pthread_in_use() 1 +# endif + +# endif + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef pthread_mutex_t gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + PTHREAD_MUTEX_INITIALIZER +# define glthread_lock_init(LOCK) \ + (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) +# define glthread_lock_lock(LOCK) \ + (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) +# define glthread_lock_unlock(LOCK) \ + (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) +# define glthread_lock_destroy(LOCK) \ + (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +# if HAVE_PTHREAD_RWLOCK + +# ifdef PTHREAD_RWLOCK_INITIALIZER + +typedef pthread_rwlock_t gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + PTHREAD_RWLOCK_INITIALIZER +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) + +# else + +typedef struct + { + int initialized; + pthread_mutex_t guard; /* protects the initialization */ + pthread_rwlock_t rwlock; /* read-write lock */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { 0, PTHREAD_MUTEX_INITIALIZER } +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) +extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); + +# endif + +# else + +typedef struct + { + pthread_mutex_t lock; /* protects the remaining fields */ + pthread_cond_t waiting_readers; /* waiting readers */ + pthread_cond_t waiting_writers; /* waiting writers */ + unsigned int waiting_writers_count; /* number of waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } +# define glthread_rwlock_init(LOCK) \ + (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) +extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); + +# endif + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +# if HAVE_PTHREAD_MUTEX_RECURSIVE + +# if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + +typedef pthread_mutex_t gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; +# ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER +# define gl_recursive_lock_initializer \ + PTHREAD_RECURSIVE_MUTEX_INITIALIZER +# else +# define gl_recursive_lock_initializer \ + PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP +# endif +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); + +# else + +typedef struct + { + pthread_mutex_t recmutex; /* recursive mutex */ + pthread_mutex_t guard; /* protects the initialization */ + int initialized; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); + +# endif + +# else + +/* Old versions of POSIX threads on Solaris did not have recursive locks. + We have to implement them ourselves. */ + +typedef struct + { + pthread_mutex_t mutex; + pthread_t owner; + unsigned long depth; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); + +# endif + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef pthread_once_t gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (pthread_in_use () \ + ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +extern int glthread_once_singlethreaded (pthread_once_t *once_control); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_PTH_THREADS + +/* Use the GNU Pth threads library. */ + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# if USE_PTH_THREADS_WEAK + +/* Use weak references to the GNU Pth threads library. */ + +# pragma weak pth_mutex_init +# pragma weak pth_mutex_acquire +# pragma weak pth_mutex_release +# pragma weak pth_rwlock_init +# pragma weak pth_rwlock_acquire +# pragma weak pth_rwlock_release +# pragma weak pth_once + +# pragma weak pth_cancel +# define pth_in_use() (pth_cancel != NULL) + +# else + +# define pth_in_use() 1 + +# endif + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef pth_mutex_t gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pth_mutex_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pth_mutex_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + PTH_MUTEX_INIT +# define glthread_lock_init(LOCK) \ + (pth_in_use() && !pth_mutex_init (LOCK) ? errno : 0) +# define glthread_lock_lock(LOCK) \ + (pth_in_use() && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) +# define glthread_lock_unlock(LOCK) \ + (pth_in_use() && !pth_mutex_release (LOCK) ? errno : 0) +# define glthread_lock_destroy(LOCK) \ + ((void)(LOCK), 0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef pth_rwlock_t gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS pth_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + PTH_RWLOCK_INIT +# define glthread_rwlock_init(LOCK) \ + (pth_in_use() && !pth_rwlock_init (LOCK) ? errno : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (pth_in_use() && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RD, 0, NULL) ? errno : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (pth_in_use() && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RW, 0, NULL) ? errno : 0) +# define glthread_rwlock_unlock(LOCK) \ + (pth_in_use() && !pth_rwlock_release (LOCK) ? errno : 0) +# define glthread_rwlock_destroy(LOCK) \ + ((void)(LOCK), 0) + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +/* In Pth, mutexes are recursive by default. */ +typedef pth_mutex_t gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS pth_mutex_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + PTH_MUTEX_INIT +# define glthread_recursive_lock_init(LOCK) \ + (pth_in_use() && !pth_mutex_init (LOCK) ? errno : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (pth_in_use() && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (pth_in_use() && !pth_mutex_release (LOCK) ? errno : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + ((void)(LOCK), 0) + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef pth_once_t gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (pth_in_use () \ + ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +extern int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)); +extern int glthread_once_singlethreaded (pth_once_t *once_control); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_SOLARIS_THREADS + +/* Use the old Solaris threads library. */ + +# include +# include + +# ifdef __cplusplus +extern "C" { +# endif + +# if USE_SOLARIS_THREADS_WEAK + +/* Use weak references to the old Solaris threads library. */ + +# pragma weak mutex_init +# pragma weak mutex_lock +# pragma weak mutex_unlock +# pragma weak mutex_destroy +# pragma weak rwlock_init +# pragma weak rw_rdlock +# pragma weak rw_wrlock +# pragma weak rw_unlock +# pragma weak rwlock_destroy +# pragma weak thr_self + +# pragma weak thr_suspend +# define thread_in_use() (thr_suspend != NULL) + +# else + +# define thread_in_use() 1 + +# endif + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef mutex_t gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS mutex_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS mutex_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + DEFAULTMUTEX +# define glthread_lock_init(LOCK) \ + (thread_in_use () ? mutex_init (LOCK, USYNC_THREAD, NULL) : 0) +# define glthread_lock_lock(LOCK) \ + (thread_in_use () ? mutex_lock (LOCK) : 0) +# define glthread_lock_unlock(LOCK) \ + (thread_in_use () ? mutex_unlock (LOCK) : 0) +# define glthread_lock_destroy(LOCK) \ + (thread_in_use () ? mutex_destroy (LOCK) : 0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef rwlock_t gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + DEFAULTRWLOCK +# define glthread_rwlock_init(LOCK) \ + (thread_in_use () ? rwlock_init (LOCK, USYNC_THREAD, NULL) : 0) +# define glthread_rwlock_rdlock(LOCK) \ + (thread_in_use () ? rw_rdlock (LOCK) : 0) +# define glthread_rwlock_wrlock(LOCK) \ + (thread_in_use () ? rw_wrlock (LOCK) : 0) +# define glthread_rwlock_unlock(LOCK) \ + (thread_in_use () ? rw_unlock (LOCK) : 0) +# define glthread_rwlock_destroy(LOCK) \ + (thread_in_use () ? rwlock_destroy (LOCK) : 0) + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +/* Old Solaris threads did not have recursive locks. + We have to implement them ourselves. */ + +typedef struct + { + mutex_t mutex; + thread_t owner; + unsigned long depth; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { DEFAULTMUTEX, (thread_t) 0, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (thread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_lock(LOCK) \ + (thread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_unlock(LOCK) \ + (thread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) +# define glthread_recursive_lock_destroy(LOCK) \ + (thread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) +extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef struct + { + volatile int inited; + mutex_t mutex; + } + gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX }; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (thread_in_use () \ + ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ + : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) +extern int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)); +extern int glthread_once_singlethreaded (gl_once_t *once_control); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if USE_WIN32_THREADS + +# include + +# ifdef __cplusplus +extern "C" { +# endif + +/* We can use CRITICAL_SECTION directly, rather than the Win32 Event, Mutex, + Semaphore types, because + - we need only to synchronize inside a single process (address space), + not inter-process locking, + - we don't need to support trylock operations. (TryEnterCriticalSection + does not work on Windows 95/98/ME. Packages that need trylock usually + define their own mutex type.) */ + +/* There is no way to statically initialize a CRITICAL_SECTION. It needs + to be done lazily, once only. For this we need spinlocks. */ + +typedef struct { volatile int done; volatile long started; } gl_spinlock_t; + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef struct + { + gl_spinlock_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; + } + gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_lock_t NAME; +# define gl_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_lock_t NAME = gl_lock_initializer; +# define gl_lock_initializer \ + { { 0, -1 } } +# define glthread_lock_init(LOCK) \ + (glthread_lock_init_func (LOCK), 0) +# define glthread_lock_lock(LOCK) \ + glthread_lock_lock_func (LOCK) +# define glthread_lock_unlock(LOCK) \ + glthread_lock_unlock_func (LOCK) +# define glthread_lock_destroy(LOCK) \ + glthread_lock_destroy_func (LOCK) +extern void glthread_lock_init_func (gl_lock_t *lock); +extern int glthread_lock_lock_func (gl_lock_t *lock); +extern int glthread_lock_unlock_func (gl_lock_t *lock); +extern int glthread_lock_destroy_func (gl_lock_t *lock); + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +/* It is impossible to implement read-write locks using plain locks, without + introducing an extra thread dedicated to managing read-write locks. + Therefore here we need to use the low-level Event type. */ + +typedef struct + { + HANDLE *array; /* array of waiting threads, each represented by an event */ + unsigned int count; /* number of waiting threads */ + unsigned int alloc; /* length of allocated array */ + unsigned int offset; /* index of first waiting thread in array */ + } + gl_carray_waitqueue_t; +typedef struct + { + gl_spinlock_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; /* protects the remaining fields */ + gl_carray_waitqueue_t waiting_readers; /* waiting readers */ + gl_carray_waitqueue_t waiting_writers; /* waiting writers */ + int runcount; /* number of readers running, or -1 when a writer runs */ + } + gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME; +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; +# define gl_rwlock_initializer \ + { { 0, -1 } } +# define glthread_rwlock_init(LOCK) \ + (glthread_rwlock_init_func (LOCK), 0) +# define glthread_rwlock_rdlock(LOCK) \ + glthread_rwlock_rdlock_func (LOCK) +# define glthread_rwlock_wrlock(LOCK) \ + glthread_rwlock_wrlock_func (LOCK) +# define glthread_rwlock_unlock(LOCK) \ + glthread_rwlock_unlock_func (LOCK) +# define glthread_rwlock_destroy(LOCK) \ + glthread_rwlock_destroy_func (LOCK) +extern void glthread_rwlock_init_func (gl_rwlock_t *lock); +extern int glthread_rwlock_rdlock_func (gl_rwlock_t *lock); +extern int glthread_rwlock_wrlock_func (gl_rwlock_t *lock); +extern int glthread_rwlock_unlock_func (gl_rwlock_t *lock); +extern int glthread_rwlock_destroy_func (gl_rwlock_t *lock); + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +/* The Win32 documentation says that CRITICAL_SECTION already implements a + recursive lock. But we need not rely on it: It's easy to implement a + recursive lock without this assumption. */ + +typedef struct + { + gl_spinlock_t guard; /* protects the initialization */ + DWORD owner; + unsigned long depth; + CRITICAL_SECTION lock; + } + gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME; +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ + STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; +# define gl_recursive_lock_initializer \ + { { 0, -1 }, 0, 0 } +# define glthread_recursive_lock_init(LOCK) \ + (glthread_recursive_lock_init_func (LOCK), 0) +# define glthread_recursive_lock_lock(LOCK) \ + glthread_recursive_lock_lock_func (LOCK) +# define glthread_recursive_lock_unlock(LOCK) \ + glthread_recursive_lock_unlock_func (LOCK) +# define glthread_recursive_lock_destroy(LOCK) \ + glthread_recursive_lock_destroy_func (LOCK) +extern void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock); +extern int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock); + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef struct + { + volatile int inited; + volatile long started; + CRITICAL_SECTION lock; + } + gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_once_t NAME = { -1, -1 }; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (glthread_once_func (ONCE_CONTROL, INITFUNCTION), 0) +extern void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)); + +# ifdef __cplusplus +} +# endif + +#endif + +/* ========================================================================= */ + +#if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +typedef int gl_lock_t; +# define gl_lock_define(STORAGECLASS, NAME) +# define gl_lock_define_initialized(STORAGECLASS, NAME) +# define glthread_lock_init(NAME) 0 +# define glthread_lock_lock(NAME) 0 +# define glthread_lock_unlock(NAME) 0 +# define glthread_lock_destroy(NAME) 0 + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +typedef int gl_rwlock_t; +# define gl_rwlock_define(STORAGECLASS, NAME) +# define gl_rwlock_define_initialized(STORAGECLASS, NAME) +# define glthread_rwlock_init(NAME) 0 +# define glthread_rwlock_rdlock(NAME) 0 +# define glthread_rwlock_wrlock(NAME) 0 +# define glthread_rwlock_unlock(NAME) 0 +# define glthread_rwlock_destroy(NAME) 0 + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +typedef int gl_recursive_lock_t; +# define gl_recursive_lock_define(STORAGECLASS, NAME) +# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) +# define glthread_recursive_lock_init(NAME) 0 +# define glthread_recursive_lock_lock(NAME) 0 +# define glthread_recursive_lock_unlock(NAME) 0 +# define glthread_recursive_lock_destroy(NAME) 0 + +/* -------------------------- gl_once_t datatype -------------------------- */ + +typedef int gl_once_t; +# define gl_once_define(STORAGECLASS, NAME) \ + STORAGECLASS gl_once_t NAME = 0; +# define glthread_once(ONCE_CONTROL, INITFUNCTION) \ + (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) + +#endif + +/* ========================================================================= */ + +/* Macros with built-in error handling. */ + +/* -------------------------- gl_lock_t datatype -------------------------- */ + +#define gl_lock_init(NAME) \ + do \ + { \ + if (glthread_lock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_lock(NAME) \ + do \ + { \ + if (glthread_lock_lock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_unlock(NAME) \ + do \ + { \ + if (glthread_lock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_lock_destroy(NAME) \ + do \ + { \ + if (glthread_lock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* ------------------------- gl_rwlock_t datatype ------------------------- */ + +#define gl_rwlock_init(NAME) \ + do \ + { \ + if (glthread_rwlock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_rdlock(NAME) \ + do \ + { \ + if (glthread_rwlock_rdlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_wrlock(NAME) \ + do \ + { \ + if (glthread_rwlock_wrlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_unlock(NAME) \ + do \ + { \ + if (glthread_rwlock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_rwlock_destroy(NAME) \ + do \ + { \ + if (glthread_rwlock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* --------------------- gl_recursive_lock_t datatype --------------------- */ + +#define gl_recursive_lock_init(NAME) \ + do \ + { \ + if (glthread_recursive_lock_init (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_lock(NAME) \ + do \ + { \ + if (glthread_recursive_lock_lock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_unlock(NAME) \ + do \ + { \ + if (glthread_recursive_lock_unlock (&NAME)) \ + abort (); \ + } \ + while (0) +#define gl_recursive_lock_destroy(NAME) \ + do \ + { \ + if (glthread_recursive_lock_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* -------------------------- gl_once_t datatype -------------------------- */ + +#define gl_once(NAME, INITFUNCTION) \ + do \ + { \ + if (glthread_once (&NAME, INITFUNCTION)) \ + abort (); \ + } \ + while (0) + +/* ========================================================================= */ + +#endif /* _LOCK_H */ diff --git a/coreseek/m4-1.4.13/lib/glthread/lock.o b/coreseek/m4-1.4.13/lib/glthread/lock.o new file mode 100644 index 0000000..c40397e Binary files /dev/null and b/coreseek/m4-1.4.13/lib/glthread/lock.o differ diff --git a/coreseek/m4-1.4.13/lib/glthread/threadlib.c b/coreseek/m4-1.4.13/lib/glthread/threadlib.c new file mode 100644 index 0000000..5feb304 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/glthread/threadlib.c @@ -0,0 +1,74 @@ +/* Multithreading primitives. + Copyright (C) 2005-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Bruno Haible , 2005. */ + +#include + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include +# include + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The function to be executed by a dummy thread. */ +static void * +dummy_thread_func (void *arg) +{ + return arg; +} + +int +glthread_in_use (void) +{ + static int tested; + static int result; /* 1: linked with -lpthread, 0: only with libc */ + + if (!tested) + { + pthread_t thread; + + if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) + /* Thread creation failed. */ + result = 0; + else + { + /* Thread creation works. */ + void *retval; + if (pthread_join (thread, &retval) != 0) + abort (); + result = 1; + } + tested = 1; + } + return result; +} + +# endif + +#endif + +/* ========================================================================= */ + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; diff --git a/coreseek/m4-1.4.13/lib/glthread/threadlib.o b/coreseek/m4-1.4.13/lib/glthread/threadlib.o new file mode 100644 index 0000000..3962494 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/glthread/threadlib.o differ diff --git a/coreseek/m4-1.4.13/lib/glthread/tls.c b/coreseek/m4-1.4.13/lib/glthread/tls.c new file mode 100644 index 0000000..46832fe --- /dev/null +++ b/coreseek/m4-1.4.13/lib/glthread/tls.c @@ -0,0 +1,61 @@ +/* Thread-local storage in multithreaded situations. + Copyright (C) 2005-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +#include + +#include "glthread/tls.h" + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +#endif + +/* ========================================================================= */ + +#if USE_PTH_THREADS + +#endif + +/* ========================================================================= */ + +#if USE_SOLARIS_THREADS + +/* Use the old Solaris threads library. */ + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +void * +glthread_tls_get_multithreaded (thread_key_t key) +{ + void *value; + + if (thr_getspecific (key, &value) != 0) + abort (); + return value; +} + +#endif + +/* ========================================================================= */ + +#if USE_WIN32_THREADS + +#endif + +/* ========================================================================= */ diff --git a/coreseek/m4-1.4.13/lib/glthread/tls.h b/coreseek/m4-1.4.13/lib/glthread/tls.h new file mode 100644 index 0000000..42f03ac --- /dev/null +++ b/coreseek/m4-1.4.13/lib/glthread/tls.h @@ -0,0 +1,298 @@ +/* Thread-local storage in multithreaded situations. + Copyright (C) 2005, 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +/* This file contains thread-local storage primitives for use with a given + thread library. It does not contain primitives for creating threads or + for other multithreading primitives. + + Type: gl_tls_key_t + Initialization: gl_tls_key_init (name, destructor); + Getting per-thread value: gl_tls_get (name) + Setting per-thread value: gl_tls_set (name, pointer); + De-initialization: gl_tls_key_destroy (name); + Equivalent functions with control of error handling: + Initialization: err = glthread_tls_key_init (&name, destructor); + Setting per-thread value: err = glthread_tls_set (&name, pointer); + De-initialization: err = glthread_tls_key_destroy (&name); + + A per-thread value is of type 'void *'. + + A destructor is a function pointer of type 'void (*) (void *)', called + when a thread exits, and taking the last per-thread value as argument. It + is unspecified whether the destructor function is called when the last + per-thread value is NULL. On some platforms, the destructor function is + not called at all. +*/ + + +#ifndef _TLS_H +#define _TLS_H + +#include +#include + +/* ========================================================================= */ + +#if USE_POSIX_THREADS + +/* Use the POSIX threads library. */ + +# include + +# if PTHREAD_IN_USE_DETECTION_HARD + +/* The pthread_in_use() detection needs to be done at runtime. */ +# define pthread_in_use() \ + glthread_in_use () +extern int glthread_in_use (void); + +# endif + +# if USE_POSIX_THREADS_WEAK + +/* Use weak references to the POSIX threads library. */ + +# pragma weak pthread_key_create +# pragma weak pthread_getspecific +# pragma weak pthread_setspecific +# pragma weak pthread_key_delete +# ifndef pthread_self +# pragma weak pthread_self +# endif + +# if !PTHREAD_IN_USE_DETECTION_HARD +# pragma weak pthread_cancel +# define pthread_in_use() (pthread_cancel != NULL) +# endif + +# else + +# if !PTHREAD_IN_USE_DETECTION_HARD +# define pthread_in_use() 1 +# endif + +# endif + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef union + { + void *singlethread_value; + pthread_key_t key; + } + gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + (pthread_in_use () \ + ? pthread_key_create (&(KEY)->key, DESTRUCTOR) \ + : ((KEY)->singlethread_value = NULL, 0)) +# define gl_tls_get(NAME) \ + (pthread_in_use () \ + ? pthread_getspecific ((NAME).key) \ + : (NAME).singlethread_value) +# define glthread_tls_set(KEY, POINTER) \ + (pthread_in_use () \ + ? pthread_setspecific ((KEY)->key, (POINTER)) \ + : ((KEY)->singlethread_value = (POINTER), 0)) +# define glthread_tls_key_destroy(KEY) \ + (pthread_in_use () ? pthread_key_delete ((KEY)->key) : 0) + +#endif + +/* ========================================================================= */ + +#if USE_PTH_THREADS + +/* Use the GNU Pth threads library. */ + +# include + +# if USE_PTH_THREADS_WEAK + +/* Use weak references to the GNU Pth threads library. */ + +# pragma weak pth_key_create +# pragma weak pth_key_getdata +# pragma weak pth_key_setdata +# pragma weak pth_key_delete + +# pragma weak pth_cancel +# define pth_in_use() (pth_cancel != NULL) + +# else + +# define pth_in_use() 1 + +# endif + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef union + { + void *singlethread_value; + pth_key_t key; + } + gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + (pth_in_use () \ + ? (!pth_key_create (&(KEY)->key, DESTRUCTOR) ? errno : 0) \ + : ((KEY)->singlethread_value = NULL, 0)) +# define gl_tls_get(NAME) \ + (pth_in_use () \ + ? pth_key_getdata ((NAME).key) \ + : (NAME).singlethread_value) +# define glthread_tls_set(KEY, POINTER) \ + (pth_in_use () \ + ? (!pth_key_setdata ((KEY)->key, (POINTER)) ? errno : 0) \ + : ((KEY)->singlethread_value = (POINTER), 0)) +# define glthread_tls_key_destroy(KEY) \ + (pth_in_use () \ + ? (!pth_key_delete ((KEY)->key) ? errno : 0) \ + : 0) + +#endif + +/* ========================================================================= */ + +#if USE_SOLARIS_THREADS + +/* Use the old Solaris threads library. */ + +# include + +# if USE_SOLARIS_THREADS_WEAK + +/* Use weak references to the old Solaris threads library. */ + +# pragma weak thr_keycreate +# pragma weak thr_getspecific +# pragma weak thr_setspecific + +# pragma weak thr_suspend +# define thread_in_use() (thr_suspend != NULL) + +# else + +# define thread_in_use() 1 + +# endif + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef union + { + void *singlethread_value; + thread_key_t key; + } + gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + (thread_in_use () \ + ? thr_keycreate (&(KEY)->key, DESTRUCTOR) \ + : ((KEY)->singlethread_value = NULL, 0)) +# define gl_tls_get(NAME) \ + (thread_in_use () \ + ? glthread_tls_get_multithreaded ((NAME).key) \ + : (NAME).singlethread_value) +extern void *glthread_tls_get_multithreaded (thread_key_t key); +# define glthread_tls_set(KEY, POINTER) \ + (thread_in_use () \ + ? thr_setspecific ((KEY)->key, (POINTER)) \ + : ((KEY)->singlethread_value = (POINTER), 0)) +# define glthread_tls_key_destroy(KEY) \ + /* Unsupported. */ \ + 0 + +#endif + +/* ========================================================================= */ + +#if USE_WIN32_THREADS + +# include + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef DWORD gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + /* The destructor is unsupported. */ \ + ((*(KEY) = TlsAlloc ()) == (DWORD)-1 ? EAGAIN : ((void) (DESTRUCTOR), 0)) +# define gl_tls_get(NAME) \ + TlsGetValue (NAME) +# define glthread_tls_set(KEY, POINTER) \ + (!TlsSetValue (*(KEY), POINTER) ? EINVAL : 0) +# define glthread_tls_key_destroy(KEY) \ + (!TlsFree (*(KEY)) ? EINVAL : 0) + +#endif + +/* ========================================================================= */ + +#if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_THREADS) + +/* Provide dummy implementation if threads are not supported. */ + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +typedef struct + { + void *singlethread_value; + } + gl_tls_key_t; +# define glthread_tls_key_init(KEY, DESTRUCTOR) \ + ((KEY)->singlethread_value = NULL, \ + (void) (DESTRUCTOR), \ + 0) +# define gl_tls_get(NAME) \ + (NAME).singlethread_value +# define glthread_tls_set(KEY, POINTER) \ + ((KEY)->singlethread_value = (POINTER), 0) +# define glthread_tls_key_destroy(KEY) \ + 0 + +#endif + +/* ========================================================================= */ + +/* Macros with built-in error handling. */ + +/* ------------------------- gl_tls_key_t datatype ------------------------- */ + +#define gl_tls_key_init(NAME, DESTRUCTOR) \ + do \ + { \ + if (glthread_tls_key_init (&NAME, DESTRUCTOR)) \ + abort (); \ + } \ + while (0) +#define gl_tls_set(NAME, POINTER) \ + do \ + { \ + if (glthread_tls_set (&NAME, POINTER)) \ + abort (); \ + } \ + while (0) +#define gl_tls_key_destroy(NAME) \ + do \ + { \ + if (glthread_tls_key_destroy (&NAME)) \ + abort (); \ + } \ + while (0) + +/* ========================================================================= */ + +#endif /* _TLS_H */ diff --git a/coreseek/m4-1.4.13/lib/glthread/tls.o b/coreseek/m4-1.4.13/lib/glthread/tls.o new file mode 100644 index 0000000..ac40f20 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/glthread/tls.o differ diff --git a/coreseek/m4-1.4.13/lib/intprops.h b/coreseek/m4-1.4.13/lib/intprops.h new file mode 100644 index 0000000..002161e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/intprops.h @@ -0,0 +1,77 @@ +/* intprops.h -- properties of integer types + + Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if the arithmetic type T is an integer type. bool counts as + an integer. */ +#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) + +/* True if negative values of the signed integer type T use two's + complement, ones' complement, or signed magnitude representation, + respectively. Much GNU code assumes two's complement, but some + people like to be portable to all possible C hosts. */ +#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) +#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) +#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) + +/* True if the arithmetic type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* The maximum and minimum values for the integer type T. These + macros have undefined behavior if T is signed and has padding bits. + If this is a problem for you, please let us know how to fix it for + your host. */ +#define TYPE_MINIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) 0 \ + : TYPE_SIGNED_MAGNITUDE (t) \ + ? ~ (t) 0 \ + : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) + +/* Return zero if T can be determined to be an unsigned type. + Otherwise, return 1. + When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a + tighter bound. Otherwise, it overestimates the true bound by one byte + when applied to unsigned types of size 2, 4, 16, ... bytes. + The symbol signed_type_or_expr__ is private to this header file. */ +#if __GNUC__ >= 2 +# define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t)) +#else +# define signed_type_or_expr__(t) 1 +#endif + +/* Bound on length of the string representing an integer type or expression T. + Subtract 1 for the sign bit if T is signed; log10 (2.0) < 146/485; + add 1 for integer division truncation; add 1 more for a minus sign + if needed. */ +#define INT_STRLEN_BOUND(t) \ + ((sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) * 146 / 485 \ + + signed_type_or_expr__ (t) + 1) + +/* Bound on buffer size needed to represent an integer type or expression T, + including the terminating null. */ +#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) diff --git a/coreseek/m4-1.4.13/lib/isnan.c b/coreseek/m4-1.4.13/lib/isnan.c new file mode 100644 index 0000000..a5ca38d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/isnan.c @@ -0,0 +1,161 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include +#include + +#include "float+.h" + +#ifdef USE_LONG_DOUBLE +# define FUNC rpl_isnanl +# define DOUBLE long double +# define MAX_EXP LDBL_MAX_EXP +# define MIN_EXP LDBL_MIN_EXP +# if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD LDBL_EXPBIT0_WORD +# define EXPBIT0_BIT LDBL_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_LDBL +# define L_(literal) literal##L +#elif ! defined USE_FLOAT +# define FUNC rpl_isnand +# define DOUBLE double +# define MAX_EXP DBL_MAX_EXP +# define MIN_EXP DBL_MIN_EXP +# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD DBL_EXPBIT0_WORD +# define EXPBIT0_BIT DBL_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_DBL +# define L_(literal) literal +#else /* defined USE_FLOAT */ +# define FUNC rpl_isnanf +# define DOUBLE float +# define MAX_EXP FLT_MAX_EXP +# define MIN_EXP FLT_MIN_EXP +# if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD FLT_EXPBIT0_WORD +# define EXPBIT0_BIT FLT_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_FLT +# define L_(literal) literal##f +#endif + +#define EXP_MASK ((MAX_EXP - MIN_EXP) | 7) + +#define NWORDS \ + ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; + +int +FUNC (DOUBLE x) +{ +#ifdef KNOWN_EXPBIT0_LOCATION +# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) + /* Special CPU dependent code is needed to treat bit patterns outside the + IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs. + These bit patterns are: + - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0, + - exponent = 0x0000, mantissa bit 63 = 1. + The NaN bit pattern is: + - exponent = 0x7FFF, mantissa >= 0x8000000000000001. */ + memory_double m; + unsigned int exponent; + + m.value = x; + exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK; +# ifdef WORDS_BIGENDIAN + /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16. */ + if (exponent == 0) + return 1 & (m.word[0] >> 15); + else if (exponent == EXP_MASK) + return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0; + else + return 1 & ~(m.word[0] >> 15); +# else + /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0. */ + if (exponent == 0) + return (m.word[1] >> 31); + else if (exponent == EXP_MASK) + return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0; + else + return (m.word[1] >> 31) ^ 1; +# endif +# else + /* Be careful to not do any floating-point operation on x, such as x == x, + because x may be a signaling NaN. */ +# if defined __SUNPRO_C || defined __DECC || (defined __sgi && !defined __GNUC__) + /* The Sun C 5.0 compilers and the Compaq (ex-DEC) 6.4 compilers don't + recognize the initializers as constant expressions. The latter compiler + also fails when constant-folding 0.0 / 0.0 even when constant-folding is + not required. The SGI MIPSpro C compiler complains about "floating-point + operation result is out of range". */ + static DOUBLE zero = L_(0.0); + memory_double nan; + DOUBLE plus_inf = L_(1.0) / L_(0.0); + DOUBLE minus_inf = -L_(1.0) / L_(0.0); + nan.value = zero / zero; +# else + static memory_double nan = { L_(0.0) / L_(0.0) }; + static DOUBLE plus_inf = L_(1.0) / L_(0.0); + static DOUBLE minus_inf = -L_(1.0) / L_(0.0); +# endif + { + memory_double m; + + /* A NaN can be recognized through its exponent. But exclude +Infinity and + -Infinity, which have the same exponent. */ + m.value = x; + if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) + & (EXP_MASK << EXPBIT0_BIT)) + == 0) + return (memcmp (&m.value, &plus_inf, SIZE) != 0 + && memcmp (&m.value, &minus_inf, SIZE) != 0); + else + return 0; + } +# endif +#else + /* The configuration did not find sufficient information. Give up about + the signaling NaNs, handle only the quiet NaNs. */ + if (x == x) + { +# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) + /* Detect any special bit patterns that pass ==; see comment above. */ + memory_double m1; + memory_double m2; + + memset (&m1.value, 0, SIZE); + memset (&m2.value, 0, SIZE); + m1.value = x; + m2.value = x + (x ? 0.0L : -0.0L); + if (memcmp (&m1.value, &m2.value, SIZE) != 0) + return 1; +# endif + return 0; + } + else + return 1; +#endif +} diff --git a/coreseek/m4-1.4.13/lib/isnand-nolibm.h b/coreseek/m4-1.4.13/lib/isnand-nolibm.h new file mode 100644 index 0000000..d248b2f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/isnand-nolibm.h @@ -0,0 +1,33 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if HAVE_ISNAND_IN_LIBC +/* Get declaration of isnan macro. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +extern int isnand (double x); +#endif diff --git a/coreseek/m4-1.4.13/lib/isnand.c b/coreseek/m4-1.4.13/lib/isnand.c new file mode 100644 index 0000000..8e5bbb3 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/isnand.c @@ -0,0 +1,19 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include "isnan.c" diff --git a/coreseek/m4-1.4.13/lib/isnanf-nolibm.h b/coreseek/m4-1.4.13/lib/isnanf-nolibm.h new file mode 100644 index 0000000..774942c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/isnanf-nolibm.h @@ -0,0 +1,33 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if HAVE_ISNANF_IN_LIBC +/* Get declaration of isnan macro or (older) isnanf function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +extern int isnanf (float x); +#endif diff --git a/coreseek/m4-1.4.13/lib/isnanf.c b/coreseek/m4-1.4.13/lib/isnanf.c new file mode 100644 index 0000000..8f70eb6 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/isnanf.c @@ -0,0 +1,20 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#define USE_FLOAT +#include "isnan.c" diff --git a/coreseek/m4-1.4.13/lib/isnanl-nolibm.h b/coreseek/m4-1.4.13/lib/isnanl-nolibm.h new file mode 100644 index 0000000..fa29f54 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/isnanl-nolibm.h @@ -0,0 +1,33 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if HAVE_ISNANL_IN_LIBC +/* Get declaration of isnan macro or (older) isnanl function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +extern int isnanl (long double x); +#endif diff --git a/coreseek/m4-1.4.13/lib/isnanl.c b/coreseek/m4-1.4.13/lib/isnanl.c new file mode 100644 index 0000000..6af5a70 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/isnanl.c @@ -0,0 +1,20 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#define USE_LONG_DOUBLE +#include "isnan.c" diff --git a/coreseek/m4-1.4.13/lib/isnanl.o b/coreseek/m4-1.4.13/lib/isnanl.o new file mode 100644 index 0000000..6e4f412 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/isnanl.o differ diff --git a/coreseek/m4-1.4.13/lib/libm4.a b/coreseek/m4-1.4.13/lib/libm4.a new file mode 100644 index 0000000..4f0068d Binary files /dev/null and b/coreseek/m4-1.4.13/lib/libm4.a differ diff --git a/coreseek/m4-1.4.13/lib/localcharset.c b/coreseek/m4-1.4.13/lib/localcharset.c new file mode 100644 index 0000000..a7ca94c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/localcharset.c @@ -0,0 +1,499 @@ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2006, 2008-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "localcharset.h" + +#include +#include +#include +#include + +#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET +# define DARWIN7 /* Darwin 7 or newer, i.e. MacOS X 10.3 or newer */ +#endif + +#if defined _WIN32 || defined __WIN32__ +# define WIN32_NATIVE +#endif + +#if defined __EMX__ +/* Assume EMX program runs on OS/2, even if compiled under DOS. */ +# ifndef OS2 +# define OS2 +# endif +#endif + +#if !defined WIN32_NATIVE +# if HAVE_LANGINFO_CODESET +# include +# else +# if 0 /* see comment below */ +# include +# endif +# endif +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +# endif +#elif defined WIN32_NATIVE +# define WIN32_LEAN_AND_MEAN +# include +#endif +#if defined OS2 +# define INCL_DOS +# include +#endif + +#if ENABLE_RELOCATABLE +# include "relocatable.h" +#else +# define relocate(pathname) (pathname) +#endif + +/* Get LIBDIR. */ +#ifndef LIBDIR +# include "configmake.h" +#endif + +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Win32, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#endif + +#ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +#endif + +#ifndef ISSLASH +# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) +#endif + +#if HAVE_DECL_GETC_UNLOCKED +# undef getc +# define getc getc_unlocked +#endif + +/* The following static variable is declared 'volatile' to avoid a + possible multithread problem in the function get_charset_aliases. If we + are running in a threaded environment, and if two threads initialize + 'charset_aliases' simultaneously, both will produce the same value, + and everything will be ok if the two assignments to 'charset_aliases' + are atomic. But I don't know what will happen if the two assignments mix. */ +#if __STDC__ != 1 +# define volatile /* empty */ +#endif +/* Pointer to the contents of the charset.alias file, if it has already been + read, else NULL. Its format is: + ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ +static const char * volatile charset_aliases; + +/* Return a pointer to the contents of the charset.alias file. */ +static const char * +get_charset_aliases (void) +{ + const char *cp; + + cp = charset_aliases; + if (cp == NULL) + { +#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) + FILE *fp; + const char *dir; + const char *base = "charset.alias"; + char *file_name; + + /* Make it possible to override the charset.alias location. This is + necessary for running the testsuite before "make install". */ + dir = getenv ("CHARSETALIASDIR"); + if (dir == NULL || dir[0] == '\0') + dir = relocate (LIBDIR); + + /* Concatenate dir and base into freshly allocated file_name. */ + { + size_t dir_len = strlen (dir); + size_t base_len = strlen (base); + int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); + file_name = (char *) malloc (dir_len + add_slash + base_len + 1); + if (file_name != NULL) + { + memcpy (file_name, dir, dir_len); + if (add_slash) + file_name[dir_len] = DIRECTORY_SEPARATOR; + memcpy (file_name + dir_len + add_slash, base, base_len + 1); + } + } + + if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) + /* Out of memory or file not found, treat it as empty. */ + cp = ""; + else + { + /* Parse the file's contents. */ + char *res_ptr = NULL; + size_t res_size = 0; + + for (;;) + { + int c; + char buf1[50+1]; + char buf2[50+1]; + size_t l1, l2; + char *old_res_ptr; + + c = getc (fp); + if (c == EOF) + break; + if (c == '\n' || c == ' ' || c == '\t') + continue; + if (c == '#') + { + /* Skip comment, to end of line. */ + do + c = getc (fp); + while (!(c == EOF || c == '\n')); + if (c == EOF) + break; + continue; + } + ungetc (c, fp); + if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) + break; + l1 = strlen (buf1); + l2 = strlen (buf2); + old_res_ptr = res_ptr; + if (res_size == 0) + { + res_size = l1 + 1 + l2 + 1; + res_ptr = (char *) malloc (res_size + 1); + } + else + { + res_size += l1 + 1 + l2 + 1; + res_ptr = (char *) realloc (res_ptr, res_size + 1); + } + if (res_ptr == NULL) + { + /* Out of memory. */ + res_size = 0; + if (old_res_ptr != NULL) + free (old_res_ptr); + break; + } + strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); + strcpy (res_ptr + res_size - (l2 + 1), buf2); + } + fclose (fp); + if (res_size == 0) + cp = ""; + else + { + *(res_ptr + res_size) = '\0'; + cp = res_ptr; + } + } + + if (file_name != NULL) + free (file_name); + +#else + +# if defined DARWIN7 + /* To avoid the trouble of installing a file that is shared by many + GNU packages -- many packaging systems have problems with this --, + simply inline the aliases here. */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-4" "\0" "ISO-8859-4" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + "ISO8859-13" "\0" "ISO-8859-13" "\0" + "ISO8859-15" "\0" "ISO-8859-15" "\0" + "KOI8-R" "\0" "KOI8-R" "\0" + "KOI8-U" "\0" "KOI8-U" "\0" + "CP866" "\0" "CP866" "\0" + "CP949" "\0" "CP949" "\0" + "CP1131" "\0" "CP1131" "\0" + "CP1251" "\0" "CP1251" "\0" + "eucCN" "\0" "GB2312" "\0" + "GB2312" "\0" "GB2312" "\0" + "eucJP" "\0" "EUC-JP" "\0" + "eucKR" "\0" "EUC-KR" "\0" + "Big5" "\0" "BIG5" "\0" + "Big5HKSCS" "\0" "BIG5-HKSCS" "\0" + "GBK" "\0" "GBK" "\0" + "GB18030" "\0" "GB18030" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "ARMSCII-8" "\0" "ARMSCII-8" "\0" + "PT154" "\0" "PT154" "\0" + /*"ISCII-DEV" "\0" "?" "\0"*/ + "*" "\0" "UTF-8" "\0"; +# endif + +# if defined VMS + /* To avoid the troubles of an extra file charset.alias_vms in the + sources of many GNU packages, simply inline the aliases here. */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-8" "\0" "ISO-8859-8" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + /* Japanese */ + "eucJP" "\0" "EUC-JP" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "DECKANJI" "\0" "DEC-KANJI" "\0" + "SDECKANJI" "\0" "EUC-JP" "\0" + /* Chinese */ + "eucTW" "\0" "EUC-TW" "\0" + "DECHANYU" "\0" "DEC-HANYU" "\0" + "DECHANZI" "\0" "GB2312" "\0" + /* Korean */ + "DECKOREAN" "\0" "EUC-KR" "\0"; +# endif + +# if defined WIN32_NATIVE || defined __CYGWIN__ + /* To avoid the troubles of installing a separate file in the same + directory as the DLL and of retrieving the DLL's directory at + runtime, simply inline the aliases here. */ + + cp = "CP936" "\0" "GBK" "\0" + "CP1361" "\0" "JOHAB" "\0" + "CP20127" "\0" "ASCII" "\0" + "CP20866" "\0" "KOI8-R" "\0" + "CP20936" "\0" "GB2312" "\0" + "CP21866" "\0" "KOI8-RU" "\0" + "CP28591" "\0" "ISO-8859-1" "\0" + "CP28592" "\0" "ISO-8859-2" "\0" + "CP28593" "\0" "ISO-8859-3" "\0" + "CP28594" "\0" "ISO-8859-4" "\0" + "CP28595" "\0" "ISO-8859-5" "\0" + "CP28596" "\0" "ISO-8859-6" "\0" + "CP28597" "\0" "ISO-8859-7" "\0" + "CP28598" "\0" "ISO-8859-8" "\0" + "CP28599" "\0" "ISO-8859-9" "\0" + "CP28605" "\0" "ISO-8859-15" "\0" + "CP38598" "\0" "ISO-8859-8" "\0" + "CP51932" "\0" "EUC-JP" "\0" + "CP51936" "\0" "GB2312" "\0" + "CP51949" "\0" "EUC-KR" "\0" + "CP51950" "\0" "EUC-TW" "\0" + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; +# endif +#endif + + charset_aliases = cp; + } + + return cp; +} + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ + +#ifdef STATIC +STATIC +#endif +const char * +locale_charset (void) +{ + const char *codeset; + const char *aliases; + +#if !(defined WIN32_NATIVE || defined OS2) + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# ifdef __CYGWIN__ + /* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". As long as this is not fixed, return the suffix + of the locale name from the environment variables (if present) or + the codepage as a number. */ + if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) + { + const char *locale; + static char buf[2 + 10 + 1]; + + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + } + + /* Woe32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + } +# endif + +# else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't + use setlocale here; it would return "C" when it doesn't support the + locale name the user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + } + + /* On some old systems, one used to set locale = "iso8859_1". On others, + you set it to "language_COUNTRY.charset". In any case, we resolve it + through the charset.alias file. */ + codeset = locale; + +# endif + +#elif defined WIN32_NATIVE + + static char buf[2 + 10 + 1]; + + /* Woe32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + +#elif defined OS2 + + const char *locale; + static char buf[2 + 10 + 1]; + ULONG cp[3]; + ULONG cplen; + + /* Allow user to override the codeset, as set in the operating system, + with standard language environment variables. */ + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + + /* Resolve through the charset.alias file. */ + codeset = locale; + } + else + { + /* OS/2 has a function returning the locale's codepage as a number. */ + if (DosQueryCp (sizeof (cp), cp, &cplen)) + codeset = ""; + else + { + sprintf (buf, "CP%u", cp[0]); + codeset = buf; + } + } + +#endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + + /* Resolve alias. */ + for (aliases = get_charset_aliases (); + *aliases != '\0'; + aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) + if (strcmp (codeset, aliases) == 0 + || (aliases[0] == '*' && aliases[1] == '\0')) + { + codeset = aliases + strlen (aliases) + 1; + break; + } + + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; + + return codeset; +} diff --git a/coreseek/m4-1.4.13/lib/localcharset.h b/coreseek/m4-1.4.13/lib/localcharset.h new file mode 100644 index 0000000..b9a3013 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/localcharset.h @@ -0,0 +1,41 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern const char * locale_charset (void); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/coreseek/m4-1.4.13/lib/localcharset.o b/coreseek/m4-1.4.13/lib/localcharset.o new file mode 100644 index 0000000..bc13511 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/localcharset.o differ diff --git a/coreseek/m4-1.4.13/lib/lseek.c b/coreseek/m4-1.4.13/lib/lseek.c new file mode 100644 index 0000000..f2ed8bb --- /dev/null +++ b/coreseek/m4-1.4.13/lib/lseek.c @@ -0,0 +1,62 @@ +/* An lseek() function that detects pipes. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +/* Windows platforms. */ +/* Get GetFileType. */ +# include +#else +# include +#endif +#include + +#undef lseek + +off_t +rpl_lseek (int fd, off_t offset, int whence) +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */ + HANDLE h = (HANDLE) _get_osfhandle (fd); + if (h == INVALID_HANDLE_VALUE) + { + errno = EBADF; + return -1; + } + if (GetFileType (h) != FILE_TYPE_DISK) + { + errno = ESPIPE; + return -1; + } +#else + /* BeOS lseek mistakenly succeeds on pipes... */ + struct stat statbuf; + if (fstat (fd, &statbuf) < 0) + return -1; + if (!S_ISREG (statbuf.st_mode)) + { + errno = ESPIPE; + return -1; + } +#endif + return lseek (fd, offset, whence); +} diff --git a/coreseek/m4-1.4.13/lib/lstat.c b/coreseek/m4-1.4.13/lib/lstat.c new file mode 100644 index 0000000..3e07270 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/lstat.c @@ -0,0 +1,82 @@ +/* Work around a bug of lstat on some systems + + Copyright (C) 1997-1999, 2000-2006, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* written by Jim Meyering */ + +#include + +/* Get the original definition of open. It might be defined as a macro. */ +#define __need_system_sys_stat_h +#include +#include +#undef __need_system_sys_stat_h + +static inline int +orig_lstat (const char *filename, struct stat *buf) +{ + return lstat (filename, buf); +} + +/* Specification. */ +#include + +#include +#include + +/* lstat works differently on Linux and Solaris systems. POSIX (see + `pathname resolution' in the glossary) requires that programs like + `ls' take into consideration the fact that FILE has a trailing slash + when FILE is a symbolic link. On Linux and Solaris 10 systems, the + lstat function already has the desired semantics (in treating + `lstat ("symlink/", sbuf)' just like `lstat ("symlink/.", sbuf)', + but on Solaris 9 and earlier it does not. + + If FILE has a trailing slash and specifies a symbolic link, + then use stat() to get more info on the referent of FILE. + If the referent is a non-directory, then set errno to ENOTDIR + and return -1. Otherwise, return stat's result. */ + +int +rpl_lstat (const char *file, struct stat *sbuf) +{ + size_t len; + int lstat_result = orig_lstat (file, sbuf); + + if (lstat_result != 0 || !S_ISLNK (sbuf->st_mode)) + return lstat_result; + + len = strlen (file); + if (len == 0 || file[len - 1] != '/') + return 0; + + /* FILE refers to a symbolic link and the name ends with a slash. + Call stat() to get info about the link's referent. */ + + /* If stat fails, then we do the same. */ + if (stat (file, sbuf) != 0) + return -1; + + /* If FILE references a directory, return 0. */ + if (S_ISDIR (sbuf->st_mode)) + return 0; + + /* Here, we know stat succeeded and FILE references a non-directory. + But it was specified via a name including a trailing slash. + Fail with errno set to ENOTDIR to indicate the contradiction. */ + errno = ENOTDIR; + return -1; +} diff --git a/coreseek/m4-1.4.13/lib/malloc.c b/coreseek/m4-1.4.13/lib/malloc.c new file mode 100644 index 0000000..f2f6663 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/malloc.c @@ -0,0 +1,57 @@ +/* malloc() function that is glibc compatible. + + Copyright (C) 1997, 1998, 2006, 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* written by Jim Meyering and Bruno Haible */ + +#include +/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ +#ifdef malloc +# define NEED_MALLOC_GNU +# undef malloc +#endif + +/* Specification. */ +#include + +#include + +/* Call the system's malloc below. */ +#undef malloc + +/* Allocate an N-byte block of memory from the heap. + If N is zero, allocate a 1-byte block. */ + +void * +rpl_malloc (size_t n) +{ + void *result; + +#ifdef NEED_MALLOC_GNU + if (n == 0) + n = 1; +#endif + + result = malloc (n); + +#if !HAVE_MALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/coreseek/m4-1.4.13/lib/malloca.c b/coreseek/m4-1.4.13/lib/malloca.c new file mode 100644 index 0000000..1f41078 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/malloca.c @@ -0,0 +1,137 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include "malloca.h" + +/* The speed critical point in this file is freea() applied to an alloca() + result: it must be fast, to match the speed of alloca(). The speed of + mmalloca() and freea() in the other case are not critical, because they + are only invoked for big memory sizes. */ + +#if HAVE_ALLOCA + +/* Store the mmalloca() results in a hash table. This is needed to reliably + distinguish a mmalloca() result and an alloca() result. + + Although it is possible that the same pointer is returned by alloca() and + by mmalloca() at different times in the same application, it does not lead + to a bug in freea(), because: + - Before a pointer returned by alloca() can point into malloc()ed memory, + the function must return, and once this has happened the programmer must + not call freea() on it anyway. + - Before a pointer returned by mmalloca() can point into the stack, it + must be freed. The only function that can free it is freea(), and + when freea() frees it, it also removes it from the hash table. */ + +#define MAGIC_NUMBER 0x1415fb4a +#define MAGIC_SIZE sizeof (int) +/* This is how the header info would look like without any alignment + considerations. */ +struct preliminary_header { void *next; char room[MAGIC_SIZE]; }; +/* But the header's size must be a multiple of sa_alignment_max. */ +#define HEADER_SIZE \ + (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max) +struct header { void *next; char room[HEADER_SIZE - sizeof (struct preliminary_header) + MAGIC_SIZE]; }; +/* Verify that HEADER_SIZE == sizeof (struct header). */ +typedef int verify1[2 * (HEADER_SIZE == sizeof (struct header)) - 1]; +/* We make the hash table quite big, so that during lookups the probability + of empty hash buckets is quite high. There is no need to make the hash + table resizable, because when the hash table gets filled so much that the + lookup becomes slow, it means that the application has memory leaks. */ +#define HASH_TABLE_SIZE 257 +static void * mmalloca_results[HASH_TABLE_SIZE]; + +#endif + +void * +mmalloca (size_t n) +{ +#if HAVE_ALLOCA + /* Allocate one more word, that serves as an indicator for malloc()ed + memory, so that freea() of an alloca() result is fast. */ + size_t nplus = n + HEADER_SIZE; + + if (nplus >= n) + { + char *p = (char *) malloc (nplus); + + if (p != NULL) + { + size_t slot; + + p += HEADER_SIZE; + + /* Put a magic number into the indicator word. */ + ((int *) p)[-1] = MAGIC_NUMBER; + + /* Enter p into the hash table. */ + slot = (unsigned long) p % HASH_TABLE_SIZE; + ((struct header *) (p - HEADER_SIZE))->next = mmalloca_results[slot]; + mmalloca_results[slot] = p; + + return p; + } + } + /* Out of memory. */ + return NULL; +#else +# if !MALLOC_0_IS_NONNULL + if (n == 0) + n = 1; +# endif + return malloc (n); +#endif +} + +#if HAVE_ALLOCA +void +freea (void *p) +{ + /* mmalloca() may have returned NULL. */ + if (p != NULL) + { + /* Attempt to quickly distinguish the mmalloca() result - which has + a magic indicator word - and the alloca() result - which has an + uninitialized indicator word. It is for this test that sa_increment + additional bytes are allocated in the alloca() case. */ + if (((int *) p)[-1] == MAGIC_NUMBER) + { + /* Looks like a mmalloca() result. To see whether it really is one, + perform a lookup in the hash table. */ + size_t slot = (unsigned long) p % HASH_TABLE_SIZE; + void **chain = &mmalloca_results[slot]; + for (; *chain != NULL;) + { + if (*chain == p) + { + /* Found it. Remove it from the hash table and free it. */ + char *p_begin = (char *) p - HEADER_SIZE; + *chain = ((struct header *) p_begin)->next; + free (p_begin); + return; + } + chain = &((struct header *) ((char *) *chain - HEADER_SIZE))->next; + } + } + /* At this point, we know it was not a mmalloca() result. */ + } +} +#endif diff --git a/coreseek/m4-1.4.13/lib/malloca.h b/coreseek/m4-1.4.13/lib/malloca.h new file mode 100644 index 0000000..3be0a38 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/malloca.h @@ -0,0 +1,134 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _MALLOCA_H +#define _MALLOCA_H + +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call + alloca(N); otherwise it returns NULL. It either returns N bytes of + memory allocated on the stack, that lasts until the function returns, + or NULL. + Use of safe_alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns. +*/ +#if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. + This must be a macro, not an inline function. */ +# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) +#else +# define safe_alloca(N) ((void) (N), NULL) +#endif + +/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of + memory allocated on the stack, that must be freed using freea() before + the function returns. Upon failure, it returns NULL. */ +#if HAVE_ALLOCA +# define malloca(N) \ + ((N) < 4032 - sa_increment \ + ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ + : mmalloca (N)) +#else +# define malloca(N) \ + mmalloca (N) +#endif +extern void * mmalloca (size_t n); + +/* Free a block of memory allocated through malloca(). */ +#if HAVE_ALLOCA +extern void freea (void *p); +#else +# define freea free +#endif + +/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). + It allocates an array of N objects, each with S bytes of memory, + on the stack. S must be positive and N must be nonnegative. + The array must be freed using freea() before the function returns. */ +#if 1 +/* Cf. the definition of xalloc_oversized. */ +# define nmalloca(n, s) \ + ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \ + ? NULL \ + : malloca ((n) * (s))) +#else +extern void * nmalloca (size_t n, size_t s); +#endif + + +#ifdef __cplusplus +} +#endif + + +/* ------------------- Auxiliary, non-public definitions ------------------- */ + +/* Determine the alignment of a type at compile time. */ +#if defined __GNUC__ +# define sa_alignof __alignof__ +#elif defined __cplusplus + template struct sa_alignof_helper { char __slot1; type __slot2; }; +# define sa_alignof(type) offsetof (sa_alignof_helper, __slot2) +#elif defined __hpux + /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#elif defined _AIX + /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#else +# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) +#endif + +enum +{ +/* The desired alignment of memory allocations is the maximum alignment + among all elementary types. */ + sa_alignment_long = sa_alignof (long), + sa_alignment_double = sa_alignof (double), +#if HAVE_LONG_LONG_INT + sa_alignment_longlong = sa_alignof (long long), +#endif + sa_alignment_longdouble = sa_alignof (long double), + sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) +#if HAVE_LONG_LONG_INT + | (sa_alignment_longlong - 1) +#endif + | (sa_alignment_longdouble - 1) + ) + 1, +/* The increment that guarantees room for a magic word must be >= sizeof (int) + and a multiple of sa_alignment_max. */ + sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max +}; + +#endif /* _MALLOCA_H */ diff --git a/coreseek/m4-1.4.13/lib/malloca.o b/coreseek/m4-1.4.13/lib/malloca.o new file mode 100644 index 0000000..fc9ae93 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/malloca.o differ diff --git a/coreseek/m4-1.4.13/lib/malloca.valgrind b/coreseek/m4-1.4.13/lib/malloca.valgrind new file mode 100644 index 0000000..52f0a50 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/malloca.valgrind @@ -0,0 +1,7 @@ +# Suppress a valgrind message about use of uninitialized memory in freea(). +# This use is OK because it provides only a speedup. +{ + freea + Memcheck:Cond + fun:freea +} diff --git a/coreseek/m4-1.4.13/lib/math.h b/coreseek/m4-1.4.13/lib/math.h new file mode 100644 index 0000000..2b58e46 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/math.h @@ -0,0 +1,593 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 2002-2003, 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_MATH_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_MATH_H +#define _GL_MATH_H + + +/* The definition of GL_LINK_WARNING is copied here. */ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* POSIX allows platforms that don't support NAN. But all major + machines in the past 15 years have supported something close to + IEEE NaN, so we define this unconditionally. We also must define + it on platforms like Solaris 10, where NAN is present but defined + as a function pointer rather than a floating point constant. */ +#if !defined NAN || 0 +# undef NAN + /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +# ifdef __DECC +static float +_NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +# define NAN (_NaN()) +# else +# define NAN (0.0f / 0.0f) +# endif +#endif + +/* Solaris 10 defines HUGE_VAL, but as a function pointer rather + than a floating point constant. */ +#if 0 +# undef HUGE_VAL +# define HUGE_VAL (1.0 / 0.0) +#endif + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if 1 +# if 0 +# define frexp rpl_frexp +extern double frexp (double x, int *expptr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef frexp +# define frexp(x,e) \ + (GL_LINK_WARNING ("frexp is unportable - " \ + "use gnulib module frexp for portability"), \ + frexp (x, e)) +#endif + + +#if 0 || !1 +extern long double acosl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef acosl +# define acosl(x) \ + (GL_LINK_WARNING ("acosl is unportable - " \ + "use gnulib module mathl for portability"), \ + acosl (x)) +#endif + + +#if 0 || !1 +extern long double asinl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef asinl +# define asinl(x) \ + (GL_LINK_WARNING ("asinl is unportable - " \ + "use gnulib module mathl for portability"), \ + asinl (x)) +#endif + + +#if 0 || !1 +extern long double atanl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef atanl +# define atanl(x) \ + (GL_LINK_WARNING ("atanl is unportable - " \ + "use gnulib module mathl for portability"), \ + atanl (x)) +#endif + + +#if 0 +# if 0 +# define ceilf rpl_ceilf +extern float ceilf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ceilf +# define ceilf(x) \ + (GL_LINK_WARNING ("ceilf is unportable - " \ + "use gnulib module ceilf for portability"), \ + ceilf (x)) +#endif + +#if 0 +# if 0 +# define ceill rpl_ceill +extern long double ceill (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ceill +# define ceill(x) \ + (GL_LINK_WARNING ("ceill is unportable - " \ + "use gnulib module ceill for portability"), \ + ceill (x)) +#endif + + +#if 0 || !1 +extern long double cosl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef cosl +# define cosl(x) \ + (GL_LINK_WARNING ("cosl is unportable - " \ + "use gnulib module mathl for portability"), \ + cosl (x)) +#endif + + +#if 0 || !1 +extern long double expl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef expl +# define expl(x) \ + (GL_LINK_WARNING ("expl is unportable - " \ + "use gnulib module mathl for portability"), \ + expl (x)) +#endif + + +#if 0 +# if 0 +# define floorf rpl_floorf +extern float floorf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef floorf +# define floorf(x) \ + (GL_LINK_WARNING ("floorf is unportable - " \ + "use gnulib module floorf for portability"), \ + floorf (x)) +#endif + +#if 0 +# if 0 +# define floorl rpl_floorl +extern long double floorl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef floorl +# define floorl(x) \ + (GL_LINK_WARNING ("floorl is unportable - " \ + "use gnulib module floorl for portability"), \ + floorl (x)) +#endif + + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if 1 && 0 +# define frexpl rpl_frexpl +#endif +#if (1 && 0) || !1 +extern long double frexpl (long double x, int *expptr); +#endif +#if !1 && defined GNULIB_POSIXCHECK +# undef frexpl +# define frexpl(x,e) \ + (GL_LINK_WARNING ("frexpl is unportable - " \ + "use gnulib module frexpl for portability"), \ + frexpl (x, e)) +#endif + + +/* Return x * 2^exp. */ +#if 0 && 0 +# define ldexpl rpl_ldexpl +#endif +#if (0 && 0) || !1 +extern long double ldexpl (long double x, int exp); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef ldexpl +# define ldexpl(x,e) \ + (GL_LINK_WARNING ("ldexpl is unportable - " \ + "use gnulib module ldexpl for portability"), \ + ldexpl (x, e)) +#endif + + +#if 0 || !1 +extern long double logl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef logl +# define logl(x) \ + (GL_LINK_WARNING ("logl is unportable - " \ + "use gnulib module mathl for portability"), \ + logl (x)) +#endif + + +#if 0 +# if 0 +# undef roundf +# define roundf rpl_roundf +extern float roundf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef roundf +# define roundf(x) \ + (GL_LINK_WARNING ("roundf is unportable - " \ + "use gnulib module roundf for portability"), \ + roundf (x)) +#endif + +#if 0 +# if 0 +# undef round +# define round rpl_round +extern double round (double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef round +# define round(x) \ + (GL_LINK_WARNING ("round is unportable - " \ + "use gnulib module round for portability"), \ + round (x)) +#endif + +#if 0 +# if 0 +# undef roundl +# define roundl rpl_roundl +extern long double roundl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef roundl +# define roundl(x) \ + (GL_LINK_WARNING ("roundl is unportable - " \ + "use gnulib module roundl for portability"), \ + roundl (x)) +#endif + + +#if 0 || !1 +extern long double sinl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef sinl +# define sinl(x) \ + (GL_LINK_WARNING ("sinl is unportable - " \ + "use gnulib module mathl for portability"), \ + sinl (x)) +#endif + + +#if 0 || !1 +extern long double sqrtl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef sqrtl +# define sqrtl(x) \ + (GL_LINK_WARNING ("sqrtl is unportable - " \ + "use gnulib module mathl for portability"), \ + sqrtl (x)) +#endif + + +#if 0 || !1 +extern long double tanl (long double x); +#endif +#if !0 && defined GNULIB_POSIXCHECK +# undef tanl +# define tanl(x) \ + (GL_LINK_WARNING ("tanl is unportable - " \ + "use gnulib module mathl for portability"), \ + tanl (x)) +#endif + + +#if 0 +# if !1 +# define truncf rpl_truncf +extern float truncf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef truncf +# define truncf(x) \ + (GL_LINK_WARNING ("truncf is unportable - " \ + "use gnulib module truncf for portability"), \ + truncf (x)) +#endif + +#if 0 +# if !1 +# define trunc rpl_trunc +extern double trunc (double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef trunc +# define trunc(x) \ + (GL_LINK_WARNING ("trunc is unportable - " \ + "use gnulib module trunc for portability"), \ + trunc (x)) +#endif + +#if 0 +# if 0 +# undef truncl +# define truncl rpl_truncl +extern long double truncl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef truncl +# define truncl(x) \ + (GL_LINK_WARNING ("truncl is unportable - " \ + "use gnulib module truncl for portability"), \ + truncl (x)) +#endif + + +#if 0 +# if 0 +extern int gl_isfinitef (float x); +extern int gl_isfinited (double x); +extern int gl_isfinitel (long double x); +# undef isfinite +# define isfinite(x) \ + (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ + sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ + gl_isfinitef (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if 0 +# if 0 +extern int gl_isinff (float x); +extern int gl_isinfd (double x); +extern int gl_isinfl (long double x); +# undef isinf +# define isinf(x) \ + (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ + sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ + gl_isinff (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if 0 +/* Test for NaN for 'float' numbers. */ +# if 1 +/* The original included above provides a declaration of isnan macro + or (older) isnanf function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +extern int isnanf (float x); +# endif +#endif + +#if 0 +/* Test for NaN for 'double' numbers. + This function is a gnulib extension, unlike isnan() which applied only + to 'double' numbers earlier but now is a type-generic macro. */ +# if 1 +/* The original included above provides a declaration of isnan macro. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +extern int isnand (double x); +# endif +#endif + +#if 0 +/* Test for NaN for 'long double' numbers. */ +# if 1 +/* The original included above provides a declaration of isnan macro or (older) isnanl function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +extern int isnanl (long double x); +# endif +#endif + +/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ +#if 0 +# if 0 +/* We can't just use the isnanf macro (e.g.) as exposed by + isnanf.h (e.g.) here, because those may end up being macros + that recursively expand back to isnan. So use the gnulib + replacements for them directly. */ +# if 1 && __GNUC__ >= 4 +# define gl_isnan_f(x) __builtin_isnan ((float)(x)) +# else +extern int rpl_isnanf (float x); +# define gl_isnan_f(x) rpl_isnanf (x) +# endif +# if 1 && __GNUC__ >= 4 +# define gl_isnan_d(x) __builtin_isnan ((double)(x)) +# else +extern int rpl_isnand (double x); +# define gl_isnan_d(x) rpl_isnand (x) +# endif +# if 1 && __GNUC__ >= 4 +# define gl_isnan_l(x) __builtin_isnan ((long double)(x)) +# else +extern int rpl_isnanl (long double x); +# define gl_isnan_l(x) rpl_isnanl (x) +# endif +# undef isnan +# define isnan(x) \ + (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ + sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ + gl_isnan_f (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if 1 +# if 1 +# undef signbit + /* GCC 4.0 and newer provides three built-ins for signbit. */ +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +# endif +# if 0 +# undef signbit +extern int gl_signbitf (float arg); +extern int gl_signbitd (double arg); +extern int gl_signbitl (long double arg); +# if __GNUC__ >= 2 && !__STRICT_ANSI__ +# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT +# define gl_signbitf(arg) \ + ({ union { float _value; \ + unsigned int _word[(sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT +# define gl_signbitd(arg) \ + ({ union { double _value; \ + unsigned int _word[(sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT +# define gl_signbitl(arg) \ + ({ union { long double _value; \ + unsigned int _word[(sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# endif +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ + sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ + gl_signbitf (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_MATH_H */ +#endif /* _GL_MATH_H */ diff --git a/coreseek/m4-1.4.13/lib/math.in.h b/coreseek/m4-1.4.13/lib/math.in.h new file mode 100644 index 0000000..6e1b9a2 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/math.in.h @@ -0,0 +1,564 @@ +/* A GNU-like . + + Copyright (C) 2002-2003, 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_MATH_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_MATH_H@ + +#ifndef _GL_MATH_H +#define _GL_MATH_H + + +/* The definition of GL_LINK_WARNING is copied here. */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* POSIX allows platforms that don't support NAN. But all major + machines in the past 15 years have supported something close to + IEEE NaN, so we define this unconditionally. We also must define + it on platforms like Solaris 10, where NAN is present but defined + as a function pointer rather than a floating point constant. */ +#if !defined NAN || @REPLACE_NAN@ +# undef NAN + /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +# ifdef __DECC +static float +_NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +# define NAN (_NaN()) +# else +# define NAN (0.0f / 0.0f) +# endif +#endif + +/* Solaris 10 defines HUGE_VAL, but as a function pointer rather + than a floating point constant. */ +#if @REPLACE_HUGE_VAL@ +# undef HUGE_VAL +# define HUGE_VAL (1.0 / 0.0) +#endif + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if @GNULIB_FREXP@ +# if @REPLACE_FREXP@ +# define frexp rpl_frexp +extern double frexp (double x, int *expptr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef frexp +# define frexp(x,e) \ + (GL_LINK_WARNING ("frexp is unportable - " \ + "use gnulib module frexp for portability"), \ + frexp (x, e)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_ACOSL@ +extern long double acosl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef acosl +# define acosl(x) \ + (GL_LINK_WARNING ("acosl is unportable - " \ + "use gnulib module mathl for portability"), \ + acosl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_ASINL@ +extern long double asinl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef asinl +# define asinl(x) \ + (GL_LINK_WARNING ("asinl is unportable - " \ + "use gnulib module mathl for portability"), \ + asinl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_ATANL@ +extern long double atanl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef atanl +# define atanl(x) \ + (GL_LINK_WARNING ("atanl is unportable - " \ + "use gnulib module mathl for portability"), \ + atanl (x)) +#endif + + +#if @GNULIB_CEILF@ +# if @REPLACE_CEILF@ +# define ceilf rpl_ceilf +extern float ceilf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ceilf +# define ceilf(x) \ + (GL_LINK_WARNING ("ceilf is unportable - " \ + "use gnulib module ceilf for portability"), \ + ceilf (x)) +#endif + +#if @GNULIB_CEILL@ +# if @REPLACE_CEILL@ +# define ceill rpl_ceill +extern long double ceill (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ceill +# define ceill(x) \ + (GL_LINK_WARNING ("ceill is unportable - " \ + "use gnulib module ceill for portability"), \ + ceill (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_COSL@ +extern long double cosl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef cosl +# define cosl(x) \ + (GL_LINK_WARNING ("cosl is unportable - " \ + "use gnulib module mathl for portability"), \ + cosl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_EXPL@ +extern long double expl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef expl +# define expl(x) \ + (GL_LINK_WARNING ("expl is unportable - " \ + "use gnulib module mathl for portability"), \ + expl (x)) +#endif + + +#if @GNULIB_FLOORF@ +# if @REPLACE_FLOORF@ +# define floorf rpl_floorf +extern float floorf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef floorf +# define floorf(x) \ + (GL_LINK_WARNING ("floorf is unportable - " \ + "use gnulib module floorf for portability"), \ + floorf (x)) +#endif + +#if @GNULIB_FLOORL@ +# if @REPLACE_FLOORL@ +# define floorl rpl_floorl +extern long double floorl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef floorl +# define floorl(x) \ + (GL_LINK_WARNING ("floorl is unportable - " \ + "use gnulib module floorl for portability"), \ + floorl (x)) +#endif + + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ +# define frexpl rpl_frexpl +#endif +#if (@GNULIB_FREXPL@ && @REPLACE_FREXPL@) || !@HAVE_DECL_FREXPL@ +extern long double frexpl (long double x, int *expptr); +#endif +#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK +# undef frexpl +# define frexpl(x,e) \ + (GL_LINK_WARNING ("frexpl is unportable - " \ + "use gnulib module frexpl for portability"), \ + frexpl (x, e)) +#endif + + +/* Return x * 2^exp. */ +#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ +# define ldexpl rpl_ldexpl +#endif +#if (@GNULIB_LDEXPL@ && @REPLACE_LDEXPL@) || !@HAVE_DECL_LDEXPL@ +extern long double ldexpl (long double x, int exp); +#endif +#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK +# undef ldexpl +# define ldexpl(x,e) \ + (GL_LINK_WARNING ("ldexpl is unportable - " \ + "use gnulib module ldexpl for portability"), \ + ldexpl (x, e)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_LOGL@ +extern long double logl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef logl +# define logl(x) \ + (GL_LINK_WARNING ("logl is unportable - " \ + "use gnulib module mathl for portability"), \ + logl (x)) +#endif + + +#if @GNULIB_ROUNDF@ +# if @REPLACE_ROUNDF@ +# undef roundf +# define roundf rpl_roundf +extern float roundf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef roundf +# define roundf(x) \ + (GL_LINK_WARNING ("roundf is unportable - " \ + "use gnulib module roundf for portability"), \ + roundf (x)) +#endif + +#if @GNULIB_ROUND@ +# if @REPLACE_ROUND@ +# undef round +# define round rpl_round +extern double round (double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef round +# define round(x) \ + (GL_LINK_WARNING ("round is unportable - " \ + "use gnulib module round for portability"), \ + round (x)) +#endif + +#if @GNULIB_ROUNDL@ +# if @REPLACE_ROUNDL@ +# undef roundl +# define roundl rpl_roundl +extern long double roundl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef roundl +# define roundl(x) \ + (GL_LINK_WARNING ("roundl is unportable - " \ + "use gnulib module roundl for portability"), \ + roundl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_SINL@ +extern long double sinl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef sinl +# define sinl(x) \ + (GL_LINK_WARNING ("sinl is unportable - " \ + "use gnulib module mathl for portability"), \ + sinl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_SQRTL@ +extern long double sqrtl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef sqrtl +# define sqrtl(x) \ + (GL_LINK_WARNING ("sqrtl is unportable - " \ + "use gnulib module mathl for portability"), \ + sqrtl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_TANL@ +extern long double tanl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef tanl +# define tanl(x) \ + (GL_LINK_WARNING ("tanl is unportable - " \ + "use gnulib module mathl for portability"), \ + tanl (x)) +#endif + + +#if @GNULIB_TRUNCF@ +# if !@HAVE_DECL_TRUNCF@ +# define truncf rpl_truncf +extern float truncf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef truncf +# define truncf(x) \ + (GL_LINK_WARNING ("truncf is unportable - " \ + "use gnulib module truncf for portability"), \ + truncf (x)) +#endif + +#if @GNULIB_TRUNC@ +# if !@HAVE_DECL_TRUNC@ +# define trunc rpl_trunc +extern double trunc (double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef trunc +# define trunc(x) \ + (GL_LINK_WARNING ("trunc is unportable - " \ + "use gnulib module trunc for portability"), \ + trunc (x)) +#endif + +#if @GNULIB_TRUNCL@ +# if @REPLACE_TRUNCL@ +# undef truncl +# define truncl rpl_truncl +extern long double truncl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef truncl +# define truncl(x) \ + (GL_LINK_WARNING ("truncl is unportable - " \ + "use gnulib module truncl for portability"), \ + truncl (x)) +#endif + + +#if @GNULIB_ISFINITE@ +# if @REPLACE_ISFINITE@ +extern int gl_isfinitef (float x); +extern int gl_isfinited (double x); +extern int gl_isfinitel (long double x); +# undef isfinite +# define isfinite(x) \ + (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ + sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ + gl_isfinitef (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if @GNULIB_ISINF@ +# if @REPLACE_ISINF@ +extern int gl_isinff (float x); +extern int gl_isinfd (double x); +extern int gl_isinfl (long double x); +# undef isinf +# define isinf(x) \ + (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ + sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ + gl_isinff (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if @GNULIB_ISNANF@ +/* Test for NaN for 'float' numbers. */ +# if @HAVE_ISNANF@ +/* The original included above provides a declaration of isnan macro + or (older) isnanf function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +extern int isnanf (float x); +# endif +#endif + +#if @GNULIB_ISNAND@ +/* Test for NaN for 'double' numbers. + This function is a gnulib extension, unlike isnan() which applied only + to 'double' numbers earlier but now is a type-generic macro. */ +# if @HAVE_ISNAND@ +/* The original included above provides a declaration of isnan macro. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +extern int isnand (double x); +# endif +#endif + +#if @GNULIB_ISNANL@ +/* Test for NaN for 'long double' numbers. */ +# if @HAVE_ISNANL@ +/* The original included above provides a declaration of isnan macro or (older) isnanl function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +extern int isnanl (long double x); +# endif +#endif + +/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ +#if @GNULIB_ISNAN@ +# if @REPLACE_ISNAN@ +/* We can't just use the isnanf macro (e.g.) as exposed by + isnanf.h (e.g.) here, because those may end up being macros + that recursively expand back to isnan. So use the gnulib + replacements for them directly. */ +# if @HAVE_ISNANF@ && __GNUC__ >= 4 +# define gl_isnan_f(x) __builtin_isnan ((float)(x)) +# else +extern int rpl_isnanf (float x); +# define gl_isnan_f(x) rpl_isnanf (x) +# endif +# if @HAVE_ISNAND@ && __GNUC__ >= 4 +# define gl_isnan_d(x) __builtin_isnan ((double)(x)) +# else +extern int rpl_isnand (double x); +# define gl_isnan_d(x) rpl_isnand (x) +# endif +# if @HAVE_ISNANL@ && __GNUC__ >= 4 +# define gl_isnan_l(x) __builtin_isnan ((long double)(x)) +# else +extern int rpl_isnanl (long double x); +# define gl_isnan_l(x) rpl_isnanl (x) +# endif +# undef isnan +# define isnan(x) \ + (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ + sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ + gl_isnan_f (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if @GNULIB_SIGNBIT@ +# if @REPLACE_SIGNBIT_USING_GCC@ +# undef signbit + /* GCC 4.0 and newer provides three built-ins for signbit. */ +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +# endif +# if @REPLACE_SIGNBIT@ +# undef signbit +extern int gl_signbitf (float arg); +extern int gl_signbitd (double arg); +extern int gl_signbitl (long double arg); +# if __GNUC__ >= 2 && !__STRICT_ANSI__ +# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT +# define gl_signbitf(arg) \ + ({ union { float _value; \ + unsigned int _word[(sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT +# define gl_signbitd(arg) \ + ({ union { double _value; \ + unsigned int _word[(sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT +# define gl_signbitl(arg) \ + ({ union { long double _value; \ + unsigned int _word[(sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# endif +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ + sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ + gl_signbitf (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_MATH_H */ +#endif /* _GL_MATH_H */ diff --git a/coreseek/m4-1.4.13/lib/mbrtowc.c b/coreseek/m4-1.4.13/lib/mbrtowc.c new file mode 100644 index 0000000..0fec5f1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/mbrtowc.c @@ -0,0 +1,386 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if GNULIB_defined_mbstate_t +/* Implement mbrtowc() on top of mbtowc(). */ + +# include +# include + +# include "localcharset.h" +# include "streq.h" +# include "verify.h" + + +verify (sizeof (mbstate_t) >= 4); + +static char internal_state[4]; + +size_t +mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + char *pstate = (char *)ps; + + if (pstate == NULL) + pstate = internal_state; + + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } + + if (n == 0) + return (size_t)(-2); + + /* Here n > 0. */ + { + size_t nstate = pstate[0]; + char buf[4]; + const char *p; + size_t m; + + switch (nstate) + { + case 0: + p = s; + m = n; + break; + case 3: + buf[2] = pstate[3]; + /*FALLTHROUGH*/ + case 2: + buf[1] = pstate[2]; + /*FALLTHROUGH*/ + case 1: + buf[0] = pstate[1]; + p = buf; + m = nstate; + buf[m++] = s[0]; + if (n >= 2 && m < 4) + { + buf[m++] = s[1]; + if (n >= 3 && m < 4) + buf[m++] = s[2]; + } + break; + default: + errno = EINVAL; + return (size_t)(-1); + } + + /* Here m > 0. */ + +# if __GLIBC__ + /* Work around bug */ + mbtowc (NULL, NULL, 0); +# endif + { + int res = mbtowc (pwc, p, m); + + if (res >= 0) + { + if (pwc != NULL && ((*pwc == 0) != (res == 0))) + abort (); + if (nstate >= (res > 0 ? res : 1)) + abort (); + res -= nstate; + pstate[0] = 0; + return res; + } + + /* mbtowc does not distinguish between invalid and incomplete multibyte + sequences. But mbrtowc needs to make this distinction. + There are two possible approaches: + - Use iconv() and its return value. + - Use built-in knowledge about the possible encodings. + Given the low quality of implementation of iconv() on the systems that + lack mbrtowc(), we use the second approach. + The possible encodings are: + - 8-bit encodings, + - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, + - UTF-8. + Use specialized code for each. */ + if (m >= 4 || m >= MB_CUR_MAX) + goto invalid; + /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ + { + const char *encoding = locale_charset (); + + if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + { + /* Cf. unistr/u8-mblen.c. */ + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (m == 1) + goto incomplete; + } + else if (c < 0xf0) + { + if (m == 1) + goto incomplete; + if (m == 2) + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xe1 || c2 >= 0xa0) + && (c != 0xed || c2 < 0xa0)) + goto incomplete; + } + } + else if (c <= 0xf4) + { + if (m == 1) + goto incomplete; + else /* m == 2 || m == 3 */ + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xf1 || c2 >= 0x90) + && (c < 0xf4 || (c == 0xf4 && c2 < 0x90))) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if ((c3 ^ 0x80) < 0x40) + goto incomplete; + } + } + } + } + } + goto invalid; + } + + /* As a reference for this code, you can use the GNU libiconv + implementation. Look for uses of the RET_TOOFEW macro. */ + + if (STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) + goto incomplete; + } + if (m == 2) + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8f) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0xa1 && c2 < 0xff) + goto incomplete; + } + } + goto invalid; + } + if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xa1 && c < 0xff) + goto incomplete; + } + goto invalid; + } + if (STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8e) + goto incomplete; + } + goto invalid; + } + if (STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0x90 && c <= 0xe3) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0x30 && c2 <= 0x39) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if (c3 >= 0x81 && c3 <= 0xfe) + goto incomplete; + } + } + } + } + goto invalid; + } + if (STREQ (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) + || (c >= 0xf0 && c <= 0xf9)) + goto incomplete; + } + goto invalid; + } + + /* An unknown multibyte encoding. */ + goto incomplete; + } + + incomplete: + { + size_t k = nstate; + /* Here 0 <= k < m < 4. */ + pstate[++k] = s[0]; + if (k < m) + { + pstate[++k] = s[1]; + if (k < m) + pstate[++k] = s[2]; + } + if (k != m) + abort (); + } + pstate[0] = m; + return (size_t)(-2); + + invalid: + errno = EILSEQ; + /* The conversion state is undefined, says POSIX. */ + return (size_t)(-1); + } + } +} + +#else +/* Override the system's mbrtowc() function. */ + +# undef mbrtowc + +size_t +rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ +# if MBRTOWC_NULL_ARG_BUG || MBRTOWC_RETVAL_BUG + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } +# endif + +# if MBRTOWC_RETVAL_BUG + { + static mbstate_t internal_state; + + /* Override mbrtowc's internal state. We can not call mbsinit() on the + hidden internal state, but we can call it on our variable. */ + if (ps == NULL) + ps = &internal_state; + + if (!mbsinit (ps)) + { + /* Parse the rest of the multibyte character byte for byte. */ + size_t count = 0; + for (; n > 0; s++, n--) + { + wchar_t wc; + size_t ret = mbrtowc (&wc, s, 1, ps); + + if (ret == (size_t)(-1)) + return (size_t)(-1); + count++; + if (ret != (size_t)(-2)) + { + /* The multibyte character has been completed. */ + if (pwc != NULL) + *pwc = wc; + return (wc == 0 ? 0 : count); + } + } + return (size_t)(-2); + } + } +# endif + +# if MBRTOWC_NUL_RETVAL_BUG + { + wchar_t wc; + size_t ret = mbrtowc (&wc, s, n, ps); + + if (ret != (size_t)(-1) && ret != (size_t)(-2)) + { + if (pwc != NULL) + *pwc = wc; + if (wc == 0) + ret = 0; + } + return ret; + } +# else + return mbrtowc (pwc, s, n, ps); +# endif +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/mbsinit.c b/coreseek/m4-1.4.13/lib/mbsinit.c new file mode 100644 index 0000000..81fed5a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/mbsinit.c @@ -0,0 +1,47 @@ +/* Test for initial conversion state. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include "verify.h" + +/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() + and wcrtomb(), wcsrtombs(). + We assume that + - sizeof (mbstate_t) >= 4, + - only stateless encodings are supported (such as UTF-8 and EUC-JP, but + not ISO-2022 variants), + - for each encoding, the number of bytes for a wide character is <= 4. + (This maximum is attained for UTF-8, GB18030, EUC-TW.) + We define the meaning of mbstate_t as follows: + - In mb -> wc direction, mbstate_t's first byte contains the number of + buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. + - In wc -> mb direction, mbstate_t contains no information. In other + words, it is always in the initial state. */ + +verify (sizeof (mbstate_t) >= 4); + +int +mbsinit (const mbstate_t *ps) +{ + const char *pstate = (const char *)ps; + + return pstate[0] == 0; +} diff --git a/coreseek/m4-1.4.13/lib/memchr2.c b/coreseek/m4-1.4.13/lib/memchr2.c new file mode 100644 index 0000000..ad78195 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/memchr2.c @@ -0,0 +1,164 @@ +/* Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2006, + 2008 Free Software Foundation, Inc. + + Based on strlen implementation by Torbjorn Granlund (tege@sics.se), + with help from Dan Sahlin (dan@sics.se) and + commentary by Jim Blandy (jimb@ai.mit.edu); + adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), + and implemented in glibc by Roland McGrath (roland@ai.mit.edu). + Extension to memchr2 implemented by Eric Blake (ebb9@byu.net). + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ + +#include + +#include "memchr2.h" + +#include +#include +#include + +/* Return the first address of either C1 or C2 (treated as unsigned + char) that occurs within N bytes of the memory region S. If + neither byte appears, return NULL. */ +void * +memchr2 (void const *s, int c1_in, int c2_in, size_t n) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c1; + longword repeated_c2; + unsigned char c1; + unsigned char c2; + + c1 = (unsigned char) c1_in; + c2 = (unsigned char) c2_in; + + if (c1 == c2) + return memchr (s, c1, n); + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + n > 0 && (size_t) char_ptr % sizeof (longword) != 0; + --n, ++char_ptr) + if (*char_ptr == c1 || *char_ptr == c2) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c1 has c1 in every byte. + repeated_c2 has c2 in every byte. */ + repeated_one = 0x01010101; + repeated_c1 = c1 | (c1 << 8); + repeated_c2 = c2 | (c2 << 8); + repeated_c1 |= repeated_c1 << 16; + repeated_c2 |= repeated_c2 << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c1 |= repeated_c1 << 31 << 1; + repeated_c2 |= repeated_c2 << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c1 |= repeated_c1 << i; + repeated_c2 |= repeated_c2 << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will test a + longword at a time. The tricky part is testing if *any of the four* + bytes in the longword in question are equal to c1 or c2. We first use + an xor with repeated_c1 and repeated_c2, respectively. This reduces + the task to testing whether *any of the four* bytes in longword1 or + longword2 is zero. + + Let's consider longword1. We compute tmp1 = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp1 is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + Similary, we compute tmp2 = + ((longword2 - repeated_one) & ~longword2) & (repeated_one << 7). + + The test whether any byte in longword1 or longword2 is zero is equivalent + to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine + this into a single test, whether (tmp1 | tmp2) is nonzero. */ + + while (n >= sizeof (longword)) + { + longword longword1 = *longword_ptr ^ repeated_c1; + longword longword2 = *longword_ptr ^ repeated_c2; + + if (((((longword1 - repeated_one) & ~longword1) + | ((longword2 - repeated_one) & ~longword2)) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + n -= sizeof (longword); + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that either n < sizeof (longword), or one of the + sizeof (longword) bytes starting at char_ptr is == c1 or == c2. On + little-endian machines, we could determine the first such byte without + any further memory accesses, just by looking at the (tmp1 | tmp2) result + from the last loop iteration. But this does not work on big-endian + machines. Choose code that works in both cases. */ + + for (; n > 0; --n, ++char_ptr) + { + if (*char_ptr == c1 || *char_ptr == c2) + return (void *) char_ptr; + } + + return NULL; +} diff --git a/coreseek/m4-1.4.13/lib/memchr2.h b/coreseek/m4-1.4.13/lib/memchr2.h new file mode 100644 index 0000000..e35b475 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/memchr2.h @@ -0,0 +1,31 @@ +/* Scan memory for the first of two bytes. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Return the first address of either C1 or C2 (treated as unsigned + char) that occurs within N bytes of the memory region S. If + neither byte appears, return NULL. */ + +extern void *memchr2 (void const *s, int c1, int c2, size_t n); + +#ifdef __cplusplus +} +#endif diff --git a/coreseek/m4-1.4.13/lib/memchr2.o b/coreseek/m4-1.4.13/lib/memchr2.o new file mode 100644 index 0000000..fdc55d6 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/memchr2.o differ diff --git a/coreseek/m4-1.4.13/lib/mkdtemp.c b/coreseek/m4-1.4.13/lib/mkdtemp.c new file mode 100644 index 0000000..6b9dd15 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/mkdtemp.c @@ -0,0 +1,38 @@ +/* Copyright (C) 1999, 2001-2003, 2006-2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Extracted from misc/mkdtemp.c. */ + +#include + +/* Specification. */ +#include + +#include "tempname.h" + +/* Generate a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the filename unique. + The directory is created, mode 700, and its name is returned. + (This function comes from OpenBSD.) */ +char * +mkdtemp (char *template) +{ + if (gen_tempname (template, GT_DIR)) + return NULL; + else + return template; +} diff --git a/coreseek/m4-1.4.13/lib/mkstemp-safer.c b/coreseek/m4-1.4.13/lib/mkstemp-safer.c new file mode 100644 index 0000000..4ba97c3 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/mkstemp-safer.c @@ -0,0 +1,34 @@ +/* Invoke mkstemp, but avoid some glitches. + + Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +#include "stdlib-safer.h" + +#include +#include "unistd-safer.h" + +/* Like mkstemp, but do not return STDIN_FILENO, STDOUT_FILENO, or + STDERR_FILENO. */ + +int +mkstemp_safer (char *templ) +{ + return fd_safer (mkstemp (templ)); +} diff --git a/coreseek/m4-1.4.13/lib/mkstemp-safer.o b/coreseek/m4-1.4.13/lib/mkstemp-safer.o new file mode 100644 index 0000000..495c91d Binary files /dev/null and b/coreseek/m4-1.4.13/lib/mkstemp-safer.o differ diff --git a/coreseek/m4-1.4.13/lib/mkstemp.c b/coreseek/m4-1.4.13/lib/mkstemp.c new file mode 100644 index 0000000..1b052f9 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/mkstemp.c @@ -0,0 +1,44 @@ +/* Copyright (C) 1998, 1999, 2001, 2005, 2006, 2007 Free Software Foundation, Inc. + This file is derived from the one in the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if !_LIBC +# include +#endif + +#include + +#if !_LIBC +# include "tempname.h" +# define __gen_tempname gen_tempname +# define __GT_FILE GT_FILE +#endif + +#include + +#ifndef __GT_FILE +# define __GT_FILE 0 +#endif + +/* Generate a unique temporary file name from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + Then open the file and return a fd. */ +int +mkstemp (template) + char *template; +{ + return __gen_tempname (template, __GT_FILE); +} diff --git a/coreseek/m4-1.4.13/lib/obstack.c b/coreseek/m4-1.4.13/lib/obstack.c new file mode 100644 index 0000000..5b87466 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/obstack.c @@ -0,0 +1,430 @@ +/* obstack.c - subroutines used implicitly by object stack macros + + Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, + 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software + Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef _LIBC +# include +# include +#else +# include +# include "obstack.h" +#endif + +/* NOTE BEFORE MODIFYING THIS FILE: This version number must be + incremented whenever callers compiled using an old obstack.h can no + longer properly call the functions in this obstack.c. */ +#define OBSTACK_INTERFACE_VERSION 1 + +/* Comment out all this code if we are using the GNU C Library, and are not + actually compiling the library itself, and the installed library + supports the same library interface we do. This code is part of the GNU + C Library, but also included in many other GNU distributions. Compiling + and linking in this code is a waste when using the GNU C library + (especially if it is a shared library). Rather than having every GNU + program understand `configure --with-gnu-libc' and omit the object + files, it is simpler to just do this in the source for each such file. */ + +#include /* Random thing to get __GNU_LIBRARY__. */ +#if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 +# include +# if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION +# define ELIDE_CODE +# endif +#endif + +#include + +#ifndef ELIDE_CODE + +# include + +/* Determine default alignment. */ +union fooround +{ + uintmax_t i; + long double d; + void *p; +}; +struct fooalign +{ + char c; + union fooround u; +}; +/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. + But in fact it might be less smart and round addresses to as much as + DEFAULT_ROUNDING. So we prepare for it to do that. */ +enum + { + DEFAULT_ALIGNMENT = offsetof (struct fooalign, u), + DEFAULT_ROUNDING = sizeof (union fooround) + }; + +/* When we copy a long block of data, this is the unit to do it with. + On some machines, copying successive ints does not work; + in such a case, redefine COPYING_UNIT to `long' (if that works) + or `char' as a last resort. */ +# ifndef COPYING_UNIT +# define COPYING_UNIT int +# endif + + +/* The functions allocating more room by calling `obstack_chunk_alloc' + jump to the handler pointed to by `obstack_alloc_failed_handler'. + This can be set to a user defined function which should either + abort gracefully or use longjump - but shouldn't return. This + variable by default points to the internal function + `print_and_abort'. */ +static void print_and_abort (void); +void (*obstack_alloc_failed_handler) (void) = print_and_abort; + +/* Exit value used when `print_and_abort' is used. */ +# include +# ifdef _LIBC +int obstack_exit_failure = EXIT_FAILURE; +# else +# include "exitfail.h" +# define obstack_exit_failure exit_failure +# endif + +# ifdef _LIBC +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) +/* A looong time ago (before 1994, anyway; we're not sure) this global variable + was used by non-GNU-C macros to avoid multiple evaluation. The GNU C + library still exports it because somebody might use it. */ +struct obstack *_obstack_compat; +compat_symbol (libc, _obstack_compat, _obstack, GLIBC_2_0); +# endif +# endif + +/* Define a macro that either calls functions with the traditional malloc/free + calling interface, or calls functions with the mmalloc/mfree interface + (that adds an extra first argument), based on the state of use_extra_arg. + For free, do not use ?:, since some compilers, like the MIPS compilers, + do not allow (expr) ? void : void. */ + +# define CALL_CHUNKFUN(h, size) \ + (((h) -> use_extra_arg) \ + ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ + : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) + +# define CALL_FREEFUN(h, old_chunk) \ + do { \ + if ((h) -> use_extra_arg) \ + (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ + else \ + (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ + } while (0) + + +/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). + Objects start on multiples of ALIGNMENT (0 means use default). + CHUNKFUN is the function to use to allocate chunks, + and FREEFUN the function to free them. + + Return nonzero if successful, calls obstack_alloc_failed_handler if + allocation fails. */ + +int +_obstack_begin (struct obstack *h, + int size, int alignment, + void *(*chunkfun) (long), + void (*freefun) (void *)) +{ + register struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + + h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; + h->chunk_size = size; + h->alignment_mask = alignment - 1; + h->use_extra_arg = 0; + + chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents, + alignment - 1); + h->chunk_limit = chunk->limit + = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +int +_obstack_begin_1 (struct obstack *h, int size, int alignment, + void *(*chunkfun) (void *, long), + void (*freefun) (void *, void *), + void *arg) +{ + register struct _obstack_chunk *chunk; /* points to new chunk */ + + if (alignment == 0) + alignment = DEFAULT_ALIGNMENT; + if (size == 0) + /* Default size is what GNU malloc can fit in a 4096-byte block. */ + { + /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. + Use the values for range checking, because if range checking is off, + the extra bytes won't be missed terribly, but if range checking is on + and we used a larger request, a whole extra 4096 bytes would be + allocated. + + These number are irrelevant to the new GNU malloc. I suspect it is + less sensitive to the size of the request. */ + int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + + 4 + DEFAULT_ROUNDING - 1) + & ~(DEFAULT_ROUNDING - 1)); + size = 4096 - extra; + } + + h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; + h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; + h->chunk_size = size; + h->alignment_mask = alignment - 1; + h->extra_arg = arg; + h->use_extra_arg = 1; + + chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); + if (!chunk) + (*obstack_alloc_failed_handler) (); + h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents, + alignment - 1); + h->chunk_limit = chunk->limit + = (char *) chunk + h->chunk_size; + chunk->prev = 0; + /* The initial chunk now contains no empty object. */ + h->maybe_empty_object = 0; + h->alloc_failed = 0; + return 1; +} + +/* Allocate a new current chunk for the obstack *H + on the assumption that LENGTH bytes need to be added + to the current object, or a new object of length LENGTH allocated. + Copies any partial object from the end of the old chunk + to the beginning of the new one. */ + +void +_obstack_newchunk (struct obstack *h, int length) +{ + register struct _obstack_chunk *old_chunk = h->chunk; + register struct _obstack_chunk *new_chunk; + register long new_size; + register long obj_size = h->next_free - h->object_base; + register long i; + long already; + char *object_base; + + /* Compute size for new chunk. */ + new_size = (obj_size + length) + (obj_size >> 3) + h->alignment_mask + 100; + if (new_size < h->chunk_size) + new_size = h->chunk_size; + + /* Allocate and initialize the new chunk. */ + new_chunk = CALL_CHUNKFUN (h, new_size); + if (!new_chunk) + (*obstack_alloc_failed_handler) (); + h->chunk = new_chunk; + new_chunk->prev = old_chunk; + new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; + + /* Compute an aligned object_base in the new chunk */ + object_base = + __PTR_ALIGN ((char *) new_chunk, new_chunk->contents, h->alignment_mask); + + /* Move the existing object to the new chunk. + Word at a time is fast and is safe if the object + is sufficiently aligned. */ + if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT) + { + for (i = obj_size / sizeof (COPYING_UNIT) - 1; + i >= 0; i--) + ((COPYING_UNIT *)object_base)[i] + = ((COPYING_UNIT *)h->object_base)[i]; + /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT, + but that can cross a page boundary on a machine + which does not do strict alignment for COPYING_UNITS. */ + already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT); + } + else + already = 0; + /* Copy remaining bytes one by one. */ + for (i = already; i < obj_size; i++) + object_base[i] = h->object_base[i]; + + /* If the object just copied was the only data in OLD_CHUNK, + free that chunk and remove it from the chain. + But not if that chunk might contain an empty object. */ + if (! h->maybe_empty_object + && (h->object_base + == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents, + h->alignment_mask))) + { + new_chunk->prev = old_chunk->prev; + CALL_FREEFUN (h, old_chunk); + } + + h->object_base = object_base; + h->next_free = h->object_base + obj_size; + /* The new chunk certainly contains no empty object yet. */ + h->maybe_empty_object = 0; +} +# ifdef _LIBC +libc_hidden_def (_obstack_newchunk) +# endif + +/* Return nonzero if object OBJ has been allocated from obstack H. + This is here for debugging. + If you use it in a program, you are probably losing. */ + +/* Suppress -Wmissing-prototypes warning. We don't want to declare this in + obstack.h because it is just for debugging. */ +int _obstack_allocated_p (struct obstack *h, void *obj); + +int +_obstack_allocated_p (struct obstack *h, void *obj) +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = (h)->chunk; + /* We use >= rather than > since the object cannot be exactly at + the beginning of the chunk but might be an empty object exactly + at the end of an adjacent chunk. */ + while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj)) + { + plp = lp->prev; + lp = plp; + } + return lp != 0; +} + +/* Free objects in obstack H, including OBJ and everything allocate + more recently than OBJ. If OBJ is zero, free everything in H. */ + +# undef obstack_free + +void +__obstack_free (struct obstack *h, void *obj) +{ + register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ + register struct _obstack_chunk *plp; /* point to previous chunk if any */ + + lp = h->chunk; + /* We use >= because there cannot be an object at the beginning of a chunk. + But there can be an empty object at that address + at the end of another chunk. */ + while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj)) + { + plp = lp->prev; + CALL_FREEFUN (h, lp); + lp = plp; + /* If we switch chunks, we can't tell whether the new current + chunk contains an empty object, so assume that it may. */ + h->maybe_empty_object = 1; + } + if (lp) + { + h->object_base = h->next_free = (char *) (obj); + h->chunk_limit = lp->limit; + h->chunk = lp; + } + else if (obj != 0) + /* obj is not in any of the chunks! */ + abort (); +} + +# ifdef _LIBC +/* Older versions of libc used a function _obstack_free intended to be + called by non-GCC compilers. */ +strong_alias (obstack_free, _obstack_free) +# endif + +int +_obstack_memory_used (struct obstack *h) +{ + register struct _obstack_chunk* lp; + register int nbytes = 0; + + for (lp = h->chunk; lp != 0; lp = lp->prev) + { + nbytes += lp->limit - (char *) lp; + } + return nbytes; +} + +/* Define the error handler. */ +# ifdef _LIBC +# include +# else +# include "gettext.h" +# endif +# ifndef _ +# define _(msgid) gettext (msgid) +# endif + +# ifdef _LIBC +# include +# endif + +# ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +# endif + +static void +__attribute__ ((noreturn)) +print_and_abort (void) +{ + /* Don't change any of these strings. Yes, it would be possible to add + the newline to the string and use fputs or so. But this must not + happen because the "memory exhausted" message appears in other places + like this and the translation should be reused instead of creating + a very similar string which requires a separate translation. */ +# ifdef _LIBC + (void) __fxprintf (NULL, "%s\n", _("memory exhausted")); +# else + fprintf (stderr, "%s\n", _("memory exhausted")); +# endif + exit (obstack_exit_failure); +} + +#endif /* !ELIDE_CODE */ diff --git a/coreseek/m4-1.4.13/lib/obstack.h b/coreseek/m4-1.4.13/lib/obstack.h new file mode 100644 index 0000000..1bf4b2f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/obstack.h @@ -0,0 +1,512 @@ +/* obstack.h - object stack macros + Copyright (C) 1988-1994,1996-1999,2003,2004,2005,2006 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Summary: + +All the apparent functions defined here are macros. The idea +is that you would use these pre-tested macros to solve a +very specific set of problems, and they would run fast. +Caution: no side-effects in arguments please!! They may be +evaluated MANY times!! + +These macros operate a stack of objects. Each object starts life +small, and may grow to maturity. (Consider building a word syllable +by syllable.) An object can move while it is growing. Once it has +been "finished" it never changes address again. So the "top of the +stack" is typically an immature growing object, while the rest of the +stack is of mature, fixed size and fixed address objects. + +These routines grab large chunks of memory, using a function you +supply, called `obstack_chunk_alloc'. On occasion, they free chunks, +by calling `obstack_chunk_free'. You must define them and declare +them before using any obstack macros. + +Each independent stack is represented by a `struct obstack'. +Each of the obstack macros expects a pointer to such a structure +as the first argument. + +One motivation for this package is the problem of growing char strings +in symbol tables. Unless you are "fascist pig with a read-only mind" +--Gosper's immortal quote from HAKMEM item 154, out of context--you +would not like to put any arbitrary upper limit on the length of your +symbols. + +In practice this often means you will build many short symbols and a +few long symbols. At the time you are reading a symbol you don't know +how long it is. One traditional method is to read a symbol into a +buffer, realloc()ating the buffer every time you try to read a symbol +that is longer than the buffer. This is beaut, but you still will +want to copy the symbol from the buffer to a more permanent +symbol-table entry say about half the time. + +With obstacks, you can work differently. Use one obstack for all symbol +names. As you read a symbol, grow the name in the obstack gradually. +When the name is complete, finalize it. Then, if the symbol exists already, +free the newly read name. + +The way we do this is to take a large chunk, allocating memory from +low addresses. When you want to build a symbol in the chunk you just +add chars above the current "high water mark" in the chunk. When you +have finished adding chars, because you got to the end of the symbol, +you know how long the chars are, and you can create a new object. +Mostly the chars will not burst over the highest address of the chunk, +because you would typically expect a chunk to be (say) 100 times as +long as an average object. + +In case that isn't clear, when we have enough chars to make up +the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) +so we just point to it where it lies. No moving of chars is +needed and this is the second win: potentially long strings need +never be explicitly shuffled. Once an object is formed, it does not +change its address during its lifetime. + +When the chars burst over a chunk boundary, we allocate a larger +chunk, and then copy the partly formed object from the end of the old +chunk to the beginning of the new larger chunk. We then carry on +accreting characters to the end of the object as we normally would. + +A special macro is provided to add a single char at a time to a +growing object. This allows the use of register variables, which +break the ordinary 'growth' macro. + +Summary: + We allocate large chunks. + We carve out one object at a time from the current chunk. + Once carved, an object never moves. + We are free to append data of any size to the currently + growing object. + Exactly one object is growing in an obstack at any one time. + You can run one obstack per control block. + You may have as many control blocks as you dare. + Because of the way we do it, you can `unwind' an obstack + back to a previous state. (You may remove objects much + as you would with a stack.) +*/ + + +/* Don't do the contents of this file more than once. */ + +#ifndef _OBSTACK_H +#define _OBSTACK_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* We need the type of a pointer subtraction. If __PTRDIFF_TYPE__ is + defined, as with GNU C, use that; that way we don't pollute the + namespace with 's symbols. Otherwise, include + and use ptrdiff_t. */ + +#ifdef __PTRDIFF_TYPE__ +# define PTR_INT_TYPE __PTRDIFF_TYPE__ +#else +# include +# define PTR_INT_TYPE ptrdiff_t +#endif + +/* If B is the base of an object addressed by P, return the result of + aligning P to the next multiple of A + 1. B and P must be of type + char *. A + 1 must be a power of 2. */ + +#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A))) + +/* Similiar to _BPTR_ALIGN (B, P, A), except optimize the common case + where pointers can be converted to integers, aligned as integers, + and converted back again. If PTR_INT_TYPE is narrower than a + pointer (e.g., the AS/400), play it safe and compute the alignment + relative to B. Otherwise, use the faster strategy of computing the + alignment relative to 0. */ + +#define __PTR_ALIGN(B, P, A) \ + __BPTR_ALIGN (sizeof (PTR_INT_TYPE) < sizeof (void *) ? (B) : (char *) 0, \ + P, A) + +#include + +struct _obstack_chunk /* Lives at front of each chunk. */ +{ + char *limit; /* 1 past end of this chunk */ + struct _obstack_chunk *prev; /* address of prior chunk or NULL */ + char contents[4]; /* objects begin here */ +}; + +struct obstack /* control current object in current chunk */ +{ + long chunk_size; /* preferred size to allocate chunks in */ + struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ + char *object_base; /* address of object we are building */ + char *next_free; /* where to add next char to current object */ + char *chunk_limit; /* address of char after current chunk */ + union + { + PTR_INT_TYPE tempint; + void *tempptr; + } temp; /* Temporary for some macros. */ + int alignment_mask; /* Mask of alignment for each object. */ + /* These prototypes vary based on `use_extra_arg', and we use + casts to the prototypeless function type in all assignments, + but having prototypes here quiets -Wstrict-prototypes. */ + struct _obstack_chunk *(*chunkfun) (void *, long); + void (*freefun) (void *, struct _obstack_chunk *); + void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ + unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */ + unsigned maybe_empty_object:1;/* There is a possibility that the current + chunk contains a zero-length object. This + prevents freeing the chunk if we allocate + a bigger chunk to replace it. */ + unsigned alloc_failed:1; /* No longer used, as we now call the failed + handler on error, but retained for binary + compatibility. */ +}; + +/* Declare the external functions we use; they are in obstack.c. */ + +extern void _obstack_newchunk (struct obstack *, int); +extern int _obstack_begin (struct obstack *, int, int, + void *(*) (long), void (*) (void *)); +extern int _obstack_begin_1 (struct obstack *, int, int, + void *(*) (void *, long), + void (*) (void *, void *), void *); +extern int _obstack_memory_used (struct obstack *); + +/* The default name of the function for freeing a chunk is 'obstack_free', + but gnulib users can override this by defining '__obstack_free'. */ +#ifndef __obstack_free +# define __obstack_free obstack_free +#endif +extern void __obstack_free (struct obstack *obstack, void *block); + + +/* Error handler called when `obstack_chunk_alloc' failed to allocate + more memory. This can be set to a user defined function which + should either abort gracefully or use longjump - but shouldn't + return. The default action is to print a message and abort. */ +extern void (*obstack_alloc_failed_handler) (void); + +/* Exit value used when `print_and_abort' is used. */ +extern int obstack_exit_failure; + +/* Pointer to beginning of object being allocated or to be allocated next. + Note that this might not be the final address of the object + because a new chunk might be needed to hold the final size. */ + +#define obstack_base(h) ((void *) (h)->object_base) + +/* Size for allocating ordinary chunks. */ + +#define obstack_chunk_size(h) ((h)->chunk_size) + +/* Pointer to next byte not yet allocated in current chunk. */ + +#define obstack_next_free(h) ((h)->next_free) + +/* Mask specifying low bits that should be clear in address of an object. */ + +#define obstack_alignment_mask(h) ((h)->alignment_mask) + +/* To prevent prototype warnings provide complete argument list. */ +#define obstack_init(h) \ + _obstack_begin ((h), 0, 0, \ + (void *(*) (long)) obstack_chunk_alloc, \ + (void (*) (void *)) obstack_chunk_free) + +#define obstack_begin(h, size) \ + _obstack_begin ((h), (size), 0, \ + (void *(*) (long)) obstack_chunk_alloc, \ + (void (*) (void *)) obstack_chunk_free) + +#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ + _obstack_begin ((h), (size), (alignment), \ + (void *(*) (long)) (chunkfun), \ + (void (*) (void *)) (freefun)) + +#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ + _obstack_begin_1 ((h), (size), (alignment), \ + (void *(*) (void *, long)) (chunkfun), \ + (void (*) (void *, void *)) (freefun), (arg)) + +#define obstack_chunkfun(h, newchunkfun) \ + ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) + +#define obstack_freefun(h, newfreefun) \ + ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) + +#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar)) + +#define obstack_blank_fast(h,n) ((h)->next_free += (n)) + +#define obstack_memory_used(h) _obstack_memory_used (h) + +#if defined __GNUC__ && defined __STDC__ && __STDC__ +/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and + does not implement __extension__. But that compiler doesn't define + __GNUC_MINOR__. */ +# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) +# define __extension__ +# endif + +/* For GNU C, if not -traditional, + we can define these macros to compute all args only once + without using a global variable. + Also, we can avoid using the `temp' slot, to make faster code. */ + +# define obstack_object_size(OBSTACK) \ + __extension__ \ + ({ struct obstack const *__o = (OBSTACK); \ + (unsigned) (__o->next_free - __o->object_base); }) + +# define obstack_room(OBSTACK) \ + __extension__ \ + ({ struct obstack const *__o = (OBSTACK); \ + (unsigned) (__o->chunk_limit - __o->next_free); }) + +# define obstack_make_room(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->chunk_limit - __o->next_free < __len) \ + _obstack_newchunk (__o, __len); \ + (void) 0; }) + +# define obstack_empty_p(OBSTACK) \ + __extension__ \ + ({ struct obstack const *__o = (OBSTACK); \ + (__o->chunk->prev == 0 \ + && __o->next_free == __PTR_ALIGN ((char *) __o->chunk, \ + __o->chunk->contents, \ + __o->alignment_mask)); }) + +# define obstack_grow(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->next_free + __len > __o->chunk_limit) \ + _obstack_newchunk (__o, __len); \ + memcpy (__o->next_free, where, __len); \ + __o->next_free += __len; \ + (void) 0; }) + +# define obstack_grow0(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->next_free + __len + 1 > __o->chunk_limit) \ + _obstack_newchunk (__o, __len + 1); \ + memcpy (__o->next_free, where, __len); \ + __o->next_free += __len; \ + *(__o->next_free)++ = 0; \ + (void) 0; }) + +# define obstack_1grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + 1 > __o->chunk_limit) \ + _obstack_newchunk (__o, 1); \ + obstack_1grow_fast (__o, datum); \ + (void) 0; }) + +/* These assume that the obstack alignment is good enough for pointers + or ints, and that the data added so far to the current object + shares that much alignment. */ + +# define obstack_ptr_grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + sizeof (void *) > __o->chunk_limit) \ + _obstack_newchunk (__o, sizeof (void *)); \ + obstack_ptr_grow_fast (__o, datum); }) \ + +# define obstack_int_grow(OBSTACK,datum) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + if (__o->next_free + sizeof (int) > __o->chunk_limit) \ + _obstack_newchunk (__o, sizeof (int)); \ + obstack_int_grow_fast (__o, datum); }) + +# define obstack_ptr_grow_fast(OBSTACK,aptr) \ +__extension__ \ +({ struct obstack *__o1 = (OBSTACK); \ + *(const void **) __o1->next_free = (aptr); \ + __o1->next_free += sizeof (const void *); \ + (void) 0; }) + +# define obstack_int_grow_fast(OBSTACK,aint) \ +__extension__ \ +({ struct obstack *__o1 = (OBSTACK); \ + *(int *) __o1->next_free = (aint); \ + __o1->next_free += sizeof (int); \ + (void) 0; }) + +# define obstack_blank(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + int __len = (length); \ + if (__o->chunk_limit - __o->next_free < __len) \ + _obstack_newchunk (__o, __len); \ + obstack_blank_fast (__o, __len); \ + (void) 0; }) + +# define obstack_alloc(OBSTACK,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_blank (__h, (length)); \ + obstack_finish (__h); }) + +# define obstack_copy(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_grow (__h, (where), (length)); \ + obstack_finish (__h); }) + +# define obstack_copy0(OBSTACK,where,length) \ +__extension__ \ +({ struct obstack *__h = (OBSTACK); \ + obstack_grow0 (__h, (where), (length)); \ + obstack_finish (__h); }) + +/* The local variable is named __o1 to avoid a name conflict + when obstack_blank is called. */ +# define obstack_finish(OBSTACK) \ +__extension__ \ +({ struct obstack *__o1 = (OBSTACK); \ + void *__value = (void *) __o1->object_base; \ + if (__o1->next_free == __value) \ + __o1->maybe_empty_object = 1; \ + __o1->next_free \ + = __PTR_ALIGN (__o1->object_base, __o1->next_free, \ + __o1->alignment_mask); \ + if (__o1->next_free - (char *)__o1->chunk \ + > __o1->chunk_limit - (char *)__o1->chunk) \ + __o1->next_free = __o1->chunk_limit; \ + __o1->object_base = __o1->next_free; \ + __value; }) + +# define obstack_free(OBSTACK, OBJ) \ +__extension__ \ +({ struct obstack *__o = (OBSTACK); \ + void *__obj = (OBJ); \ + if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \ + __o->next_free = __o->object_base = (char *)__obj; \ + else (__obstack_free) (__o, __obj); }) + +#else /* not __GNUC__ or not __STDC__ */ + +# define obstack_object_size(h) \ + (unsigned) ((h)->next_free - (h)->object_base) + +# define obstack_room(h) \ + (unsigned) ((h)->chunk_limit - (h)->next_free) + +# define obstack_empty_p(h) \ + ((h)->chunk->prev == 0 \ + && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk, \ + (h)->chunk->contents, \ + (h)->alignment_mask)) + +/* Note that the call to _obstack_newchunk is enclosed in (..., 0) + so that we can avoid having void expressions + in the arms of the conditional expression. + Casting the third operand to void was tried before, + but some compilers won't accept it. */ + +# define obstack_make_room(h,length) \ +( (h)->temp.tempint = (length), \ + (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0)) + +# define obstack_grow(h,where,length) \ +( (h)->temp.tempint = (length), \ + (((h)->next_free + (h)->temp.tempint > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0), \ + memcpy ((h)->next_free, where, (h)->temp.tempint), \ + (h)->next_free += (h)->temp.tempint) + +# define obstack_grow0(h,where,length) \ +( (h)->temp.tempint = (length), \ + (((h)->next_free + (h)->temp.tempint + 1 > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), (h)->temp.tempint + 1), 0) : 0), \ + memcpy ((h)->next_free, where, (h)->temp.tempint), \ + (h)->next_free += (h)->temp.tempint, \ + *((h)->next_free)++ = 0) + +# define obstack_1grow(h,datum) \ +( (((h)->next_free + 1 > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), 1), 0) : 0), \ + obstack_1grow_fast (h, datum)) + +# define obstack_ptr_grow(h,datum) \ +( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ + obstack_ptr_grow_fast (h, datum)) + +# define obstack_int_grow(h,datum) \ +( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ + ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ + obstack_int_grow_fast (h, datum)) + +# define obstack_ptr_grow_fast(h,aptr) \ + (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr)) + +# define obstack_int_grow_fast(h,aint) \ + (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint)) + +# define obstack_blank(h,length) \ +( (h)->temp.tempint = (length), \ + (((h)->chunk_limit - (h)->next_free < (h)->temp.tempint) \ + ? (_obstack_newchunk ((h), (h)->temp.tempint), 0) : 0), \ + obstack_blank_fast (h, (h)->temp.tempint)) + +# define obstack_alloc(h,length) \ + (obstack_blank ((h), (length)), obstack_finish ((h))) + +# define obstack_copy(h,where,length) \ + (obstack_grow ((h), (where), (length)), obstack_finish ((h))) + +# define obstack_copy0(h,where,length) \ + (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) + +# define obstack_finish(h) \ +( ((h)->next_free == (h)->object_base \ + ? (((h)->maybe_empty_object = 1), 0) \ + : 0), \ + (h)->temp.tempptr = (h)->object_base, \ + (h)->next_free \ + = __PTR_ALIGN ((h)->object_base, (h)->next_free, \ + (h)->alignment_mask), \ + (((h)->next_free - (char *) (h)->chunk \ + > (h)->chunk_limit - (char *) (h)->chunk) \ + ? ((h)->next_free = (h)->chunk_limit) : 0), \ + (h)->object_base = (h)->next_free, \ + (h)->temp.tempptr) + +# define obstack_free(h,obj) \ +( (h)->temp.tempint = (char *) (obj) - (char *) (h)->chunk, \ + ((((h)->temp.tempint > 0 \ + && (h)->temp.tempint < (h)->chunk_limit - (char *) (h)->chunk)) \ + ? (int) ((h)->next_free = (h)->object_base \ + = (h)->temp.tempint + (char *) (h)->chunk) \ + : (((__obstack_free) ((h), (h)->temp.tempint + (char *) (h)->chunk), 0), 0))) + +#endif /* not __GNUC__ or not __STDC__ */ + +#ifdef __cplusplus +} /* C++ */ +#endif + +#endif /* obstack.h */ diff --git a/coreseek/m4-1.4.13/lib/open.c b/coreseek/m4-1.4.13/lib/open.c new file mode 100644 index 0000000..13af274 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/open.c @@ -0,0 +1,140 @@ +/* Open a descriptor to a file. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +/* Get the original definition of open. It might be defined as a macro. */ +#define __need_system_fcntl_h +#include +#undef __need_system_fcntl_h +#include + +static inline int +orig_open (const char *filename, int flags, mode_t mode) +{ + return open (filename, flags, mode); +} + +/* Specification. */ +#include + +#include +#include +#include +#include +#include + +int +open (const char *filename, int flags, ...) +{ + mode_t mode; + int fd; + + mode = 0; + if (flags & O_CREAT) + { + va_list arg; + va_start (arg, flags); + + /* If mode_t is narrower than int, use the promoted type (int), + not mode_t. Use sizeof to guess whether mode_t is narrower; + we don't know of any practical counterexamples. */ + mode = (sizeof (mode_t) < sizeof (int) + ? va_arg (arg, int) + : va_arg (arg, mode_t)); + + va_end (arg); + } + +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + if (strcmp (filename, "/dev/null") == 0) + filename = "NUL"; +#endif + +#if OPEN_TRAILING_SLASH_BUG + /* If the filename ends in a slash and one of O_CREAT, O_WRONLY, O_RDWR + is specified, then fail. + Rationale: POSIX + says that + "A pathname that contains at least one non-slash character and that + ends with one or more trailing slashes shall be resolved as if a + single dot character ( '.' ) were appended to the pathname." + and + "The special filename dot shall refer to the directory specified by + its predecessor." + If the named file already exists as a directory, then + - if O_CREAT is specified, open() must fail because of the semantics + of O_CREAT, + - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX + says that it + fails with errno = EISDIR in this case. + If the named file does not exist or does not name a directory, then + - if O_CREAT is specified, open() must fail since open() cannot create + directories, + - if O_WRONLY or O_RDWR is specified, open() must fail because the + file does not contain a '.' directory. */ + if (flags & (O_CREAT | O_WRONLY | O_RDWR)) + { + size_t len = strlen (filename); + if (len > 0 && filename[len - 1] == '/') + { + errno = EISDIR; + return -1; + } + } +#endif + + fd = orig_open (filename, flags, mode); + +#if OPEN_TRAILING_SLASH_BUG + /* If the filename ends in a slash and fd does not refer to a directory, + then fail. + Rationale: POSIX + says that + "A pathname that contains at least one non-slash character and that + ends with one or more trailing slashes shall be resolved as if a + single dot character ( '.' ) were appended to the pathname." + and + "The special filename dot shall refer to the directory specified by + its predecessor." + If the named file without the slash is not a directory, open() must fail + with ENOTDIR. */ + if (fd >= 0) + { + size_t len = strlen (filename); + if (len > 0 && filename[len - 1] == '/') + { + struct stat statbuf; + + if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) + { + close (fd); + errno = ENOTDIR; + return -1; + } + } + } +#endif + +#ifdef FCHDIR_REPLACEMENT + if (fd >= 0) + _gl_register_fd (fd, filename); +#endif + + return fd; +} diff --git a/coreseek/m4-1.4.13/lib/pathmax.h b/coreseek/m4-1.4.13/lib/pathmax.h new file mode 100644 index 0000000..28d8504 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/pathmax.h @@ -0,0 +1,47 @@ +/* Define PATH_MAX somehow. Requires sys/types.h. + Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _PATHMAX_H +# define _PATHMAX_H + +# include + +# include + +# ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 256 +# endif + +# if !defined PATH_MAX && defined _PC_PATH_MAX && defined HAVE_PATHCONF +# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 \ + : pathconf ("/", _PC_PATH_MAX)) +# endif + +/* Don't include sys/param.h if it already has been. */ +# if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN +# include +# endif + +# if !defined PATH_MAX && defined MAXPATHLEN +# define PATH_MAX MAXPATHLEN +# endif + +# ifndef PATH_MAX +# define PATH_MAX _POSIX_PATH_MAX +# endif + +#endif /* _PATHMAX_H */ diff --git a/coreseek/m4-1.4.13/lib/pipe-safer.c b/coreseek/m4-1.4.13/lib/pipe-safer.c new file mode 100644 index 0000000..0fc6850 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/pipe-safer.c @@ -0,0 +1,56 @@ +/* Invoke pipe, but avoid some glitches. + Copyright (C) 2005, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#include + +#include "unistd-safer.h" + +#include +#include + +/* Like pipe, but ensure that neither of the file descriptors is + STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. Fail with ENOSYS on + platforms that lack pipe. */ + +int +pipe_safer (int fd[2]) +{ +#if HAVE_PIPE + if (pipe (fd) == 0) + { + int i; + for (i = 0; i < 2; i++) + { + fd[i] = fd_safer (fd[i]); + if (fd[i] < 0) + { + int e = errno; + close (fd[1 - i]); + errno = e; + return -1; + } + } + + return 0; + } +#else + errno = ENOSYS; +#endif + + return -1; +} diff --git a/coreseek/m4-1.4.13/lib/pipe-safer.o b/coreseek/m4-1.4.13/lib/pipe-safer.o new file mode 100644 index 0000000..b501456 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/pipe-safer.o differ diff --git a/coreseek/m4-1.4.13/lib/pipe.c b/coreseek/m4-1.4.13/lib/pipe.c new file mode 100644 index 0000000..f8e7dee --- /dev/null +++ b/coreseek/m4-1.4.13/lib/pipe.c @@ -0,0 +1,451 @@ +/* Creation of subprocesses, communicating via pipes. + Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include + +/* Specification. */ +#include "pipe.h" + +#include +#include +#include +#include +#include + +#include "error.h" +#include "fatal-signal.h" +#include "unistd-safer.h" +#include "wait-process.h" +#include "gettext.h" + +#define _(str) gettext (str) + +#if defined _MSC_VER || defined __MINGW32__ + +/* Native Woe32 API. */ +# include +# include "w32spawn.h" + +#else + +/* Unix API. */ +# include + +#endif + +/* The results of open() in this file are not used with fchdir, + therefore save some unnecessary work in fchdir.c. */ +#undef open +#undef close + + +#ifdef EINTR + +/* EINTR handling for close(). + These functions can return -1/EINTR even though we don't have any + signal handlers set up, namely when we get interrupted via SIGSTOP. */ + +static inline int +nonintr_close (int fd) +{ + int retval; + + do + retval = close (fd); + while (retval < 0 && errno == EINTR); + + return retval; +} +#define close nonintr_close + +static inline int +nonintr_open (const char *pathname, int oflag, mode_t mode) +{ + int retval; + + do + retval = open (pathname, oflag, mode); + while (retval < 0 && errno == EINTR); + + return retval; +} +#undef open /* avoid warning on VMS */ +#define open nonintr_open + +#endif + + +/* Open a pipe connected to a child process. + * + * write system read + * parent -> fd[1] -> STDIN_FILENO -> child if pipe_stdin + * parent <- fd[0] <- STDOUT_FILENO <- child if pipe_stdout + * read system write + * + * At least one of pipe_stdin, pipe_stdout must be true. + * pipe_stdin and prog_stdin together determine the child's standard input. + * pipe_stdout and prog_stdout together determine the child's standard output. + * If pipe_stdin is true, prog_stdin is ignored. + * If pipe_stdout is true, prog_stdout is ignored. + */ +static pid_t +create_pipe (const char *progname, + const char *prog_path, char **prog_argv, + bool pipe_stdin, bool pipe_stdout, + const char *prog_stdin, const char *prog_stdout, + bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[2]) +{ +#if defined _MSC_VER || defined __MINGW32__ + + /* Native Woe32 API. + This uses _pipe(), dup2(), and spawnv(). It could also be implemented + using the low-level functions CreatePipe(), DuplicateHandle(), + CreateProcess() and _open_osfhandle(); see the GNU make and GNU clisp + and cvs source code. */ + int ifd[2]; + int ofd[2]; + int orig_stdin; + int orig_stdout; + int orig_stderr; + int child; + int nulloutfd; + int stdinfd; + int stdoutfd; + + /* FIXME: Need to free memory allocated by prepare_spawn. */ + prog_argv = prepare_spawn (prog_argv); + + if (pipe_stdout) + if (_pipe (ifd, 4096, O_BINARY | O_NOINHERIT) < 0 + || (ifd[0] = fd_safer (ifd[0])) < 0) + error (EXIT_FAILURE, errno, _("cannot create pipe")); + if (pipe_stdin) + if (_pipe (ofd, 4096, O_BINARY | O_NOINHERIT) < 0 + || (ofd[1] = fd_safer (ofd[1])) < 0) + error (EXIT_FAILURE, errno, _("cannot create pipe")); +/* Data flow diagram: + * + * write system read + * parent -> ofd[1] -> ofd[0] -> child if pipe_stdin + * parent <- ifd[0] <- ifd[1] <- child if pipe_stdout + * read system write + * + */ + + /* Save standard file handles of parent process. */ + if (pipe_stdin || prog_stdin != NULL) + orig_stdin = dup_noinherit (STDIN_FILENO); + if (pipe_stdout || prog_stdout != NULL) + orig_stdout = dup_noinherit (STDOUT_FILENO); + if (null_stderr) + orig_stderr = dup_noinherit (STDERR_FILENO); + child = -1; + + /* Create standard file handles of child process. */ + nulloutfd = -1; + stdinfd = -1; + stdoutfd = -1; + if ((!pipe_stdin || dup2 (ofd[0], STDIN_FILENO) >= 0) + && (!pipe_stdout || dup2 (ifd[1], STDOUT_FILENO) >= 0) + && (!null_stderr + || ((nulloutfd = open ("NUL", O_RDWR, 0)) >= 0 + && (nulloutfd == STDERR_FILENO + || (dup2 (nulloutfd, STDERR_FILENO) >= 0 + && close (nulloutfd) >= 0)))) + && (pipe_stdin + || prog_stdin == NULL + || ((stdinfd = open (prog_stdin, O_RDONLY, 0)) >= 0 + && (stdinfd == STDIN_FILENO + || (dup2 (stdinfd, STDIN_FILENO) >= 0 + && close (stdinfd) >= 0)))) + && (pipe_stdout + || prog_stdout == NULL + || ((stdoutfd = open (prog_stdout, O_WRONLY, 0)) >= 0 + && (stdoutfd == STDOUT_FILENO + || (dup2 (stdoutfd, STDOUT_FILENO) >= 0 + && close (stdoutfd) >= 0))))) + /* The child process doesn't inherit ifd[0], ifd[1], ofd[0], ofd[1], + but it inherits all open()ed or dup2()ed file handles (which is what + we want in the case of STD*_FILENO) and also orig_stdin, + orig_stdout, orig_stderr (which is not explicitly wanted but + harmless). */ + /* Use spawnvpe and pass the environment explicitly. This is needed if + the program has modified the environment using putenv() or [un]setenv(). + On Windows, programs have two environments, one in the "environment + block" of the process and managed through SetEnvironmentVariable(), and + one inside the process, in the location retrieved by the 'environ' + macro. When using spawnvp() without 'e', the child process inherits a + copy of the environment block - ignoring the effects of putenv() and + [un]setenv(). */ + { + child = spawnvpe (P_NOWAIT, prog_path, (const char **) prog_argv, + (const char **) environ); + if (child < 0 && errno == ENOEXEC) + { + /* prog is not an native executable. Try to execute it as a + shell script. Note that prepare_spawn() has already prepended + a hidden element "sh.exe" to prog_argv. */ + --prog_argv; + child = spawnvpe (P_NOWAIT, prog_argv[0], (const char **) prog_argv, + (const char **) environ); + } + } + if (stdinfd >= 0) + close (stdinfd); + if (stdoutfd >= 0) + close (stdoutfd); + if (nulloutfd >= 0) + close (nulloutfd); + + /* Restore standard file handles of parent process. */ + if (null_stderr) + dup2 (orig_stderr, STDERR_FILENO), close (orig_stderr); + if (pipe_stdout || prog_stdout != NULL) + dup2 (orig_stdout, STDOUT_FILENO), close (orig_stdout); + if (pipe_stdin || prog_stdin != NULL) + dup2 (orig_stdin, STDIN_FILENO), close (orig_stdin); + + if (pipe_stdin) + close (ofd[0]); + if (pipe_stdout) + close (ifd[1]); + if (child == -1) + { + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess failed"), progname); + if (pipe_stdout) + close (ifd[0]); + if (pipe_stdin) + close (ofd[1]); + return -1; + } + + if (pipe_stdout) + fd[0] = ifd[0]; + if (pipe_stdin) + fd[1] = ofd[1]; + return child; + +#else + + /* Unix API. */ + int ifd[2]; + int ofd[2]; + sigset_t blocked_signals; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + + if (pipe_stdout) + if (pipe (ifd) < 0 + || (ifd[0] = fd_safer (ifd[0])) < 0) + error (EXIT_FAILURE, errno, _("cannot create pipe")); + if (pipe_stdin) + if (pipe (ofd) < 0 + || (ofd[1] = fd_safer (ofd[1])) < 0) + error (EXIT_FAILURE, errno, _("cannot create pipe")); +/* Data flow diagram: + * + * write system read + * parent -> ofd[1] -> ofd[0] -> child if pipe_stdin + * parent <- ifd[0] <- ifd[1] <- child if pipe_stdout + * read system write + * + */ + + if (slave_process) + { + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + block_fatal_signals (); + } + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (pipe_stdin + && (err = posix_spawn_file_actions_adddup2 (&actions, + ofd[0], STDIN_FILENO)) + != 0) + || (pipe_stdout + && (err = posix_spawn_file_actions_adddup2 (&actions, + ifd[1], STDOUT_FILENO)) + != 0) + || (pipe_stdin + && (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) + != 0) + || (pipe_stdout + && (err = posix_spawn_file_actions_addclose (&actions, ifd[1])) + != 0) + || (pipe_stdin + && (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) + != 0) + || (pipe_stdout + && (err = posix_spawn_file_actions_addclose (&actions, ifd[0])) + != 0) + || (null_stderr + && (err = posix_spawn_file_actions_addopen (&actions, + STDERR_FILENO, + "/dev/null", O_RDWR, + 0)) + != 0) + || (!pipe_stdin + && prog_stdin != NULL + && (err = posix_spawn_file_actions_addopen (&actions, + STDIN_FILENO, + prog_stdin, O_RDONLY, + 0)) + != 0) + || (!pipe_stdout + && prog_stdout != NULL + && (err = posix_spawn_file_actions_addopen (&actions, + STDOUT_FILENO, + prog_stdout, O_WRONLY, + 0)) + != 0) + || (slave_process + && ((err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, + &blocked_signals)) + != 0 + || (err = posix_spawnattr_setflags (&attrs, + POSIX_SPAWN_SETSIGMASK)) + != 0))) + || (err = posix_spawnp (&child, prog_path, &actions, + attrs_allocated ? &attrs : NULL, prog_argv, + environ)) + != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + if (slave_process) + unblock_fatal_signals (); + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, err, + _("%s subprocess failed"), progname); + if (pipe_stdout) + { + close (ifd[0]); + close (ifd[1]); + } + if (pipe_stdin) + { + close (ofd[0]); + close (ofd[1]); + } + return -1; + } + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + if (slave_process) + { + register_slave_subprocess (child); + unblock_fatal_signals (); + } + if (pipe_stdin) + close (ofd[0]); + if (pipe_stdout) + close (ifd[1]); + + if (pipe_stdout) + fd[0] = ifd[0]; + if (pipe_stdin) + fd[1] = ofd[1]; + return child; + +#endif +} + +/* Open a bidirectional pipe. + * + * write system read + * parent -> fd[1] -> STDIN_FILENO -> child + * parent <- fd[0] <- STDOUT_FILENO <- child + * read system write + * + */ +pid_t +create_pipe_bidi (const char *progname, + const char *prog_path, char **prog_argv, + bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[2]) +{ + pid_t result = create_pipe (progname, prog_path, prog_argv, + true, true, NULL, NULL, + null_stderr, slave_process, exit_on_error, + fd); + return result; +} + +/* Open a pipe for input from a child process. + * The child's stdin comes from a file. + * + * read system write + * parent <- fd[0] <- STDOUT_FILENO <- child + * + */ +pid_t +create_pipe_in (const char *progname, + const char *prog_path, char **prog_argv, + const char *prog_stdin, bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[1]) +{ + int iofd[2]; + pid_t result = create_pipe (progname, prog_path, prog_argv, + false, true, prog_stdin, NULL, + null_stderr, slave_process, exit_on_error, + iofd); + if (result != -1) + fd[0] = iofd[0]; + return result; +} + +/* Open a pipe for output to a child process. + * The child's stdout goes to a file. + * + * write system read + * parent -> fd[0] -> STDIN_FILENO -> child + * + */ +pid_t +create_pipe_out (const char *progname, + const char *prog_path, char **prog_argv, + const char *prog_stdout, bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[1]) +{ + int iofd[2]; + pid_t result = create_pipe (progname, prog_path, prog_argv, + true, false, NULL, prog_stdout, + null_stderr, slave_process, exit_on_error, + iofd); + if (result != -1) + fd[0] = iofd[1]; + return result; +} diff --git a/coreseek/m4-1.4.13/lib/pipe.h b/coreseek/m4-1.4.13/lib/pipe.h new file mode 100644 index 0000000..d76e874 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/pipe.h @@ -0,0 +1,134 @@ +/* Creation of subprocesses, communicating via pipes. + Copyright (C) 2001-2003, 2006, 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _PIPE_H +#define _PIPE_H + +/* Get pid_t. */ +#include +#include +#include + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* All these functions create a subprocess and don't wait for its termination. + They return the process id of the subprocess. They also return in fd[] + one or two file descriptors for communication with the subprocess. + If the subprocess creation fails: if exit_on_error is true, the main + process exits with an error message; otherwise, an error message is given + if null_stderr is false, then -1 is returned and fd[] remain uninitialized. + + After finishing communication, the caller should call wait_subprocess() + to get rid of the subprocess in the process table. + + If slave_process is true, the child process will be terminated when its + creator receives a catchable fatal signal or exits normally. If + slave_process is false, the child process will continue running in this + case, until it is lucky enough to attempt to communicate with its creator + and thus get a SIGPIPE signal. + + If exit_on_error is false, a child process id of -1 should be treated the + same way as a subprocess which accepts no input, produces no output and + terminates with exit code 127. Why? Some errors during posix_spawnp() + cause the function posix_spawnp() to return an error code; some other + errors cause the subprocess to exit with return code 127. It is + implementation dependent which error is reported which way. The caller + must treat both cases as equivalent. + + It is recommended that no signal is blocked or ignored (i.e. have a + signal handler with value SIG_IGN) while any of these functions is called. + The reason is that child processes inherit the mask of blocked signals + from their parent (both through posix_spawn() and fork()/exec()); + likewise, signals ignored in the parent are also ignored in the child + (except possibly for SIGCHLD). And POSIX:2001 says [in the description + of exec()]: + "it should be noted that many existing applications wrongly + assume that they start with certain signals set to the default + action and/or unblocked. In particular, applications written + with a simpler signal model that does not include blocking of + signals, such as the one in the ISO C standard, may not behave + properly if invoked with some signals blocked. Therefore, it is + best not to block or ignore signals across execs without explicit + reason to do so, and especially not to block signals across execs + of arbitrary (not closely co-operating) programs." */ + +/* Open a pipe for output to a child process. + * The child's stdout goes to a file. + * + * write system read + * parent -> fd[0] -> STDIN_FILENO -> child + * + * Note: When writing to a child process, it is useful to ignore the SIGPIPE + * signal and the EPIPE error code. + */ +extern pid_t create_pipe_out (const char *progname, + const char *prog_path, char **prog_argv, + const char *prog_stdout, bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[1]); + +/* Open a pipe for input from a child process. + * The child's stdin comes from a file. + * + * read system write + * parent <- fd[0] <- STDOUT_FILENO <- child + * + */ +extern pid_t create_pipe_in (const char *progname, + const char *prog_path, char **prog_argv, + const char *prog_stdin, bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[1]); + +/* Open a bidirectional pipe. + * + * write system read + * parent -> fd[1] -> STDIN_FILENO -> child + * parent <- fd[0] <- STDOUT_FILENO <- child + * read system write + * + * Note: When writing to a child process, it is useful to ignore the SIGPIPE + * signal and the EPIPE error code. + */ +extern pid_t create_pipe_bidi (const char *progname, + const char *prog_path, char **prog_argv, + bool null_stderr, + bool slave_process, bool exit_on_error, + int fd[2]); + +/* The name of the "always silent" device. */ +#if defined _MSC_VER || defined __MINGW32__ +/* Native Woe32 API. */ +# define DEV_NULL "NUL" +#else +/* Unix API. */ +# define DEV_NULL "/dev/null" +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _PIPE_H */ diff --git a/coreseek/m4-1.4.13/lib/pipe.o b/coreseek/m4-1.4.13/lib/pipe.o new file mode 100644 index 0000000..ec08c7d Binary files /dev/null and b/coreseek/m4-1.4.13/lib/pipe.o differ diff --git a/coreseek/m4-1.4.13/lib/printf-args.c b/coreseek/m4-1.4.13/lib/printf-args.c new file mode 100644 index 0000000..871c720 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/printf-args.c @@ -0,0 +1,187 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2005-2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be defined. + STATIC Set to 'static' to declare the function static. */ + +#ifndef PRINTF_FETCHARGS +# include +#endif + +/* Specification. */ +#ifndef PRINTF_FETCHARGS +# include "printf-args.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_FETCHARGS (va_list args, arguments *a) +{ + size_t i; + argument *ap; + + for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) + switch (ap->type) + { + case TYPE_SCHAR: + ap->a.a_schar = va_arg (args, /*signed char*/ int); + break; + case TYPE_UCHAR: + ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); + break; + case TYPE_SHORT: + ap->a.a_short = va_arg (args, /*short*/ int); + break; + case TYPE_USHORT: + ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); + break; + case TYPE_INT: + ap->a.a_int = va_arg (args, int); + break; + case TYPE_UINT: + ap->a.a_uint = va_arg (args, unsigned int); + break; + case TYPE_LONGINT: + ap->a.a_longint = va_arg (args, long int); + break; + case TYPE_ULONGINT: + ap->a.a_ulongint = va_arg (args, unsigned long int); + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + ap->a.a_longlongint = va_arg (args, long long int); + break; + case TYPE_ULONGLONGINT: + ap->a.a_ulonglongint = va_arg (args, unsigned long long int); + break; +#endif + case TYPE_DOUBLE: + ap->a.a_double = va_arg (args, double); + break; + case TYPE_LONGDOUBLE: + ap->a.a_longdouble = va_arg (args, long double); + break; + case TYPE_CHAR: + ap->a.a_char = va_arg (args, int); + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by + default argument promotions", this is not the case in mingw32, + where wint_t is 'unsigned short'. */ + ap->a.a_wide_char = + (sizeof (wint_t) < sizeof (int) + ? va_arg (args, int) + : va_arg (args, wint_t)); + break; +#endif + case TYPE_STRING: + ap->a.a_string = va_arg (args, const char *); + /* A null pointer is an invalid argument for "%s", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_string == NULL) + ap->a.a_string = "(NULL)"; + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + ap->a.a_wide_string = va_arg (args, const wchar_t *); + /* A null pointer is an invalid argument for "%ls", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_wide_string == NULL) + { + static const wchar_t wide_null_string[] = + { + (wchar_t)'(', + (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', + (wchar_t)')', + (wchar_t)0 + }; + ap->a.a_wide_string = wide_null_string; + } + break; +#endif + case TYPE_POINTER: + ap->a.a_pointer = va_arg (args, void *); + break; + case TYPE_COUNT_SCHAR_POINTER: + ap->a.a_count_schar_pointer = va_arg (args, signed char *); + break; + case TYPE_COUNT_SHORT_POINTER: + ap->a.a_count_short_pointer = va_arg (args, short *); + break; + case TYPE_COUNT_INT_POINTER: + ap->a.a_count_int_pointer = va_arg (args, int *); + break; + case TYPE_COUNT_LONGINT_POINTER: + ap->a.a_count_longint_pointer = va_arg (args, long int *); + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); + break; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case TYPE_U8_STRING: + ap->a.a_u8_string = va_arg (args, const uint8_t *); + /* A null pointer is an invalid argument for "%U", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u8_string == NULL) + { + static const uint8_t u8_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u8_string = u8_null_string; + } + break; + case TYPE_U16_STRING: + ap->a.a_u16_string = va_arg (args, const uint16_t *); + /* A null pointer is an invalid argument for "%lU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u16_string == NULL) + { + static const uint16_t u16_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u16_string = u16_null_string; + } + break; + case TYPE_U32_STRING: + ap->a.a_u32_string = va_arg (args, const uint32_t *); + /* A null pointer is an invalid argument for "%llU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u32_string == NULL) + { + static const uint32_t u32_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u32_string = u32_null_string; + } + break; +#endif + default: + /* Unknown type. */ + return -1; + } + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/printf-args.h b/coreseek/m4-1.4.13/lib/printf-args.h new file mode 100644 index 0000000..67cb990 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/printf-args.h @@ -0,0 +1,154 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2006-2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _PRINTF_ARGS_H +#define _PRINTF_ARGS_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be declared. + STATIC Set to 'static' to declare the function static. */ + +/* Default parameters. */ +#ifndef PRINTF_FETCHARGS +# define PRINTF_FETCHARGS printf_fetchargs +#endif + +/* Get size_t. */ +#include + +/* Get wchar_t. */ +#if HAVE_WCHAR_T +# include +#endif + +/* Get wint_t. */ +#if HAVE_WINT_T +# include +#endif + +/* Get va_list. */ +#include + + +/* Argument types */ +typedef enum +{ + TYPE_NONE, + TYPE_SCHAR, + TYPE_UCHAR, + TYPE_SHORT, + TYPE_USHORT, + TYPE_INT, + TYPE_UINT, + TYPE_LONGINT, + TYPE_ULONGINT, +#if HAVE_LONG_LONG_INT + TYPE_LONGLONGINT, + TYPE_ULONGLONGINT, +#endif + TYPE_DOUBLE, + TYPE_LONGDOUBLE, + TYPE_CHAR, +#if HAVE_WINT_T + TYPE_WIDE_CHAR, +#endif + TYPE_STRING, +#if HAVE_WCHAR_T + TYPE_WIDE_STRING, +#endif + TYPE_POINTER, + TYPE_COUNT_SCHAR_POINTER, + TYPE_COUNT_SHORT_POINTER, + TYPE_COUNT_INT_POINTER, + TYPE_COUNT_LONGINT_POINTER +#if HAVE_LONG_LONG_INT +, TYPE_COUNT_LONGLONGINT_POINTER +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ +, TYPE_U8_STRING +, TYPE_U16_STRING +, TYPE_U32_STRING +#endif +} arg_type; + +/* Polymorphic argument */ +typedef struct +{ + arg_type type; + union + { + signed char a_schar; + unsigned char a_uchar; + short a_short; + unsigned short a_ushort; + int a_int; + unsigned int a_uint; + long int a_longint; + unsigned long int a_ulongint; +#if HAVE_LONG_LONG_INT + long long int a_longlongint; + unsigned long long int a_ulonglongint; +#endif + float a_float; + double a_double; + long double a_longdouble; + int a_char; +#if HAVE_WINT_T + wint_t a_wide_char; +#endif + const char* a_string; +#if HAVE_WCHAR_T + const wchar_t* a_wide_string; +#endif + void* a_pointer; + signed char * a_count_schar_pointer; + short * a_count_short_pointer; + int * a_count_int_pointer; + long int * a_count_longint_pointer; +#if HAVE_LONG_LONG_INT + long long int * a_count_longlongint_pointer; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + const uint8_t * a_u8_string; + const uint16_t * a_u16_string; + const uint32_t * a_u32_string; +#endif + } + a; +} +argument; + +typedef struct +{ + size_t count; + argument *arg; +} +arguments; + + +/* Fetch the arguments, putting them into a. */ +#ifdef STATIC +STATIC +#else +extern +#endif +int PRINTF_FETCHARGS (va_list args, arguments *a); + +#endif /* _PRINTF_ARGS_H */ diff --git a/coreseek/m4-1.4.13/lib/printf-args.o b/coreseek/m4-1.4.13/lib/printf-args.o new file mode 100644 index 0000000..2e2d9b3 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/printf-args.o differ diff --git a/coreseek/m4-1.4.13/lib/printf-frexp.c b/coreseek/m4-1.4.13/lib/printf-frexp.c new file mode 100644 index 0000000..da5c9c3 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/printf-frexp.c @@ -0,0 +1,188 @@ +/* Split a double into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#ifdef USE_LONG_DOUBLE +# include "printf-frexpl.h" +#else +# include "printf-frexp.h" +#endif + +#include +#include +#ifdef USE_LONG_DOUBLE +# include "fpucw.h" +#endif + +/* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater + than 2, or not even a power of 2, some rounding errors can occur, so that + then the returned mantissa is only guaranteed to be <= 2.0, not < 2.0. */ + +#ifdef USE_LONG_DOUBLE +# define FUNC printf_frexpl +# define DOUBLE long double +# define MIN_EXP LDBL_MIN_EXP +# if HAVE_FREXPL_IN_LIBC && HAVE_LDEXPL_IN_LIBC +# define USE_FREXP_LDEXP +# define FREXP frexpl +# define LDEXP ldexpl +# endif +# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () +# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () +# define L_(literal) literal##L +#else +# define FUNC printf_frexp +# define DOUBLE double +# define MIN_EXP DBL_MIN_EXP +# if HAVE_FREXP_IN_LIBC && HAVE_LDEXP_IN_LIBC +# define USE_FREXP_LDEXP +# define FREXP frexp +# define LDEXP ldexp +# endif +# define DECL_ROUNDING +# define BEGIN_ROUNDING() +# define END_ROUNDING() +# define L_(literal) literal +#endif + +DOUBLE +FUNC (DOUBLE x, int *expptr) +{ + int exponent; + DECL_ROUNDING + + BEGIN_ROUNDING (); + +#ifdef USE_FREXP_LDEXP + /* frexp and ldexp are usually faster than the loop below. */ + x = FREXP (x, &exponent); + + x = x + x; + exponent -= 1; + + if (exponent < MIN_EXP - 1) + { + x = LDEXP (x, exponent - (MIN_EXP - 1)); + exponent = MIN_EXP - 1; + } +#else + { + /* Since the exponent is an 'int', it fits in 64 bits. Therefore the + loops are executed no more than 64 times. */ + DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ + DOUBLE powh[64]; /* powh[i] = 2^-2^i */ + int i; + + exponent = 0; + if (x >= L_(1.0)) + { + /* A nonnegative exponent. */ + { + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x >= 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x >= pow2_i) + { + exponent += (1 << i); + x *= powh_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + } + /* Here 1.0 <= x < 2^2^i. */ + } + else + { + /* A negative exponent. */ + { + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x < 1.0, exponent >= MIN_EXP - 1. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (exponent - (1 << i) < MIN_EXP - 1) + break; + + exponent -= (1 << i); + x *= pow2_i; + if (x >= L_(1.0)) + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + } + /* Here either x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + + if (x < L_(1.0)) + /* Invariants: x * 2^exponent = argument, x < 1.0 and + exponent - 2^i < MIN_EXP - 1 <= exponent. */ + while (i > 0) + { + i--; + if (exponent - (1 << i) >= MIN_EXP - 1) + { + exponent -= (1 << i); + x *= pow2[i]; + if (x >= L_(1.0)) + break; + } + } + + /* Here either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + } + + /* Invariants: x * 2^exponent = argument, and + either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + while (i > 0) + { + i--; + if (x >= pow2[i]) + { + exponent += (1 << i); + x *= powh[i]; + } + } + /* Here either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2.0 and exponent >= MIN_EXP - 1. */ + } +#endif + + END_ROUNDING (); + + *expptr = exponent; + return x; +} diff --git a/coreseek/m4-1.4.13/lib/printf-frexp.h b/coreseek/m4-1.4.13/lib/printf-frexp.h new file mode 100644 index 0000000..46c3276 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/printf-frexp.h @@ -0,0 +1,23 @@ +/* Split a double into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Write a finite, positive number x as + x = mantissa * 2^exp + where exp >= DBL_MIN_EXP - 1, + mantissa < 2.0, + if x is not a denormalized number then mantissa >= 1.0. + Store exp in *EXPPTR and return mantissa. */ +extern double printf_frexp (double x, int *expptr); diff --git a/coreseek/m4-1.4.13/lib/printf-frexp.o b/coreseek/m4-1.4.13/lib/printf-frexp.o new file mode 100644 index 0000000..572538b Binary files /dev/null and b/coreseek/m4-1.4.13/lib/printf-frexp.o differ diff --git a/coreseek/m4-1.4.13/lib/printf-frexpl.c b/coreseek/m4-1.4.13/lib/printf-frexpl.c new file mode 100644 index 0000000..460b609 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/printf-frexpl.c @@ -0,0 +1,18 @@ +/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#define USE_LONG_DOUBLE +#include "printf-frexp.c" diff --git a/coreseek/m4-1.4.13/lib/printf-frexpl.h b/coreseek/m4-1.4.13/lib/printf-frexpl.h new file mode 100644 index 0000000..6c2d214 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/printf-frexpl.h @@ -0,0 +1,23 @@ +/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Write a finite, positive number x as + x = mantissa * 2^exp + where exp >= LDBL_MIN_EXP - 1, + mantissa < 2.0, + if x is not a denormalized number then mantissa >= 1.0. + Store exp in *EXPPTR and return mantissa. */ +extern long double printf_frexpl (long double x, int *expptr); diff --git a/coreseek/m4-1.4.13/lib/printf-frexpl.o b/coreseek/m4-1.4.13/lib/printf-frexpl.o new file mode 100644 index 0000000..41cf9fc Binary files /dev/null and b/coreseek/m4-1.4.13/lib/printf-frexpl.o differ diff --git a/coreseek/m4-1.4.13/lib/printf-parse.c b/coreseek/m4-1.4.13/lib/printf-parse.c new file mode 100644 index 0000000..28b9bd4 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/printf-parse.c @@ -0,0 +1,627 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002-2003, 2006-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* This file can be parametrized with the following macros: + CHAR_T The element type of the format string. + CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. + DIRECTIVE Structure denoting a format directive. + Depends on CHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on CHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on CHAR_T. + STATIC Set to 'static' to declare the function static. + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ + +#ifndef PRINTF_PARSE +# include +#endif + +/* Specification. */ +#ifndef PRINTF_PARSE +# include "printf-parse.h" +#endif + +/* Default parameters. */ +#ifndef PRINTF_PARSE +# define PRINTF_PARSE printf_parse +# define CHAR_T char +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +#endif + +/* Get size_t, NULL. */ +#include + +/* Get intmax_t. */ +#if defined IN_LIBINTL || defined IN_LIBASPRINTF +# if HAVE_STDINT_H_WITH_UINTMAX +# include +# endif +# if HAVE_INTTYPES_H_WITH_UINTMAX +# include +# endif +#else +# include +#endif + +/* malloc(), realloc(), free(). */ +#include + +/* errno. */ +#include + +/* Checked size_t computations. */ +#include "xsize.h" + +#if CHAR_T_ONLY_ASCII +/* c_isascii(). */ +# include "c-ctype.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) +{ + const CHAR_T *cp = format; /* pointer into format */ + size_t arg_posn = 0; /* number of regular arguments consumed */ + size_t d_allocated; /* allocated elements of d->dir */ + size_t a_allocated; /* allocated elements of a->arg */ + size_t max_width_length = 0; + size_t max_precision_length = 0; + + d->count = 0; + d_allocated = 1; + d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE)); + if (d->dir == NULL) + /* Out of memory. */ + goto out_of_memory_1; + + a->count = 0; + a_allocated = 0; + a->arg = NULL; + +#define REGISTER_ARG(_index_,_type_) \ + { \ + size_t n = (_index_); \ + if (n >= a_allocated) \ + { \ + size_t memory_size; \ + argument *memory; \ + \ + a_allocated = xtimes (a_allocated, 2); \ + if (a_allocated <= n) \ + a_allocated = xsum (n, 1); \ + memory_size = xtimes (a_allocated, sizeof (argument)); \ + if (size_overflow_p (memory_size)) \ + /* Overflow, would lead to out of memory. */ \ + goto out_of_memory; \ + memory = (argument *) (a->arg \ + ? realloc (a->arg, memory_size) \ + : malloc (memory_size)); \ + if (memory == NULL) \ + /* Out of memory. */ \ + goto out_of_memory; \ + a->arg = memory; \ + } \ + while (a->count <= n) \ + a->arg[a->count++].type = TYPE_NONE; \ + if (a->arg[n].type == TYPE_NONE) \ + a->arg[n].type = (_type_); \ + else if (a->arg[n].type != (_type_)) \ + /* Ambiguous type for positional argument. */ \ + goto error; \ + } + + while (*cp != '\0') + { + CHAR_T c = *cp++; + if (c == '%') + { + size_t arg_index = ARG_NONE; + DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ + + /* Initialize the next directive. */ + dp->dir_start = cp - 1; + dp->flags = 0; + dp->width_start = NULL; + dp->width_end = NULL; + dp->width_arg_index = ARG_NONE; + dp->precision_start = NULL; + dp->precision_end = NULL; + dp->precision_arg_index = ARG_NONE; + dp->arg_index = ARG_NONE; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + arg_index = n - 1; + cp = np + 1; + } + } + + /* Read the flags. */ + for (;;) + { + if (*cp == '\'') + { + dp->flags |= FLAG_GROUP; + cp++; + } + else if (*cp == '-') + { + dp->flags |= FLAG_LEFT; + cp++; + } + else if (*cp == '+') + { + dp->flags |= FLAG_SHOWSIGN; + cp++; + } + else if (*cp == ' ') + { + dp->flags |= FLAG_SPACE; + cp++; + } + else if (*cp == '#') + { + dp->flags |= FLAG_ALT; + cp++; + } + else if (*cp == '0') + { + dp->flags |= FLAG_ZERO; + cp++; + } + else + break; + } + + /* Parse the field width. */ + if (*cp == '*') + { + dp->width_start = cp; + cp++; + dp->width_end = cp; + if (max_width_length < 1) + max_width_length = 1; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + dp->width_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->width_arg_index == ARG_NONE) + { + dp->width_arg_index = arg_posn++; + if (dp->width_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->width_arg_index, TYPE_INT); + } + else if (*cp >= '0' && *cp <= '9') + { + size_t width_length; + + dp->width_start = cp; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->width_end = cp; + width_length = dp->width_end - dp->width_start; + if (max_width_length < width_length) + max_width_length = width_length; + } + + /* Parse the precision. */ + if (*cp == '.') + { + cp++; + if (*cp == '*') + { + dp->precision_start = cp - 1; + cp++; + dp->precision_end = cp; + if (max_precision_length < 2) + max_precision_length = 2; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory + later. */ + goto error; + dp->precision_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->precision_arg_index == ARG_NONE) + { + dp->precision_arg_index = arg_posn++; + if (dp->precision_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->precision_arg_index, TYPE_INT); + } + else + { + size_t precision_length; + + dp->precision_start = cp - 1; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->precision_end = cp; + precision_length = dp->precision_end - dp->precision_start; + if (max_precision_length < precision_length) + max_precision_length = precision_length; + } + } + + { + arg_type type; + + /* Parse argument type/size specifiers. */ + { + int flags = 0; + + for (;;) + { + if (*cp == 'h') + { + flags |= (1 << (flags & 1)); + cp++; + } + else if (*cp == 'L') + { + flags |= 4; + cp++; + } + else if (*cp == 'l') + { + flags += 8; + cp++; + } + else if (*cp == 'j') + { + if (sizeof (intmax_t) > sizeof (long)) + { + /* intmax_t = long long */ + flags += 16; + } + else if (sizeof (intmax_t) > sizeof (int)) + { + /* intmax_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 'z' || *cp == 'Z') + { + /* 'z' is standardized in ISO C 99, but glibc uses 'Z' + because the warning facility in gcc-2.95.2 understands + only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ + if (sizeof (size_t) > sizeof (long)) + { + /* size_t = long long */ + flags += 16; + } + else if (sizeof (size_t) > sizeof (int)) + { + /* size_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 't') + { + if (sizeof (ptrdiff_t) > sizeof (long)) + { + /* ptrdiff_t = long long */ + flags += 16; + } + else if (sizeof (ptrdiff_t) > sizeof (int)) + { + /* ptrdiff_t = long */ + flags += 8; + } + cp++; + } +#if defined __APPLE__ && defined __MACH__ + /* On MacOS X 10.3, PRIdMAX is defined as "qd". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'q') + { + if (64 / 8 > sizeof (long)) + { + /* int64_t = long long */ + flags += 16; + } + else + { + /* int64_t = long */ + flags += 8; + } + cp++; + } +#endif +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On native Win32, PRIdMAX is defined as "I64d". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') + { + if (64 / 8 > sizeof (long)) + { + /* __int64 = long long */ + flags += 16; + } + else + { + /* __int64 = long */ + flags += 8; + } + cp += 3; + } +#endif + else + break; + } + + /* Read the conversion character. */ + c = *cp++; + switch (c) + { + case 'd': case 'i': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGLONGINT; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lld" into TYPE_LONGINT. */ + if (flags >= 8) + type = TYPE_LONGINT; + else if (flags & 2) + type = TYPE_SCHAR; + else if (flags & 1) + type = TYPE_SHORT; + else + type = TYPE_INT; + break; + case 'o': case 'u': case 'x': case 'X': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_ULONGLONGINT; + else +#endif + /* If 'unsigned long long' exists and is the same as + 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ + if (flags >= 8) + type = TYPE_ULONGINT; + else if (flags & 2) + type = TYPE_UCHAR; + else if (flags & 1) + type = TYPE_USHORT; + else + type = TYPE_UINT; + break; + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGDOUBLE; + else + type = TYPE_DOUBLE; + break; + case 'c': + if (flags >= 8) +#if HAVE_WINT_T + type = TYPE_WIDE_CHAR; +#else + goto error; +#endif + else + type = TYPE_CHAR; + break; +#if HAVE_WINT_T + case 'C': + type = TYPE_WIDE_CHAR; + c = 'c'; + break; +#endif + case 's': + if (flags >= 8) +#if HAVE_WCHAR_T + type = TYPE_WIDE_STRING; +#else + goto error; +#endif + else + type = TYPE_STRING; + break; +#if HAVE_WCHAR_T + case 'S': + type = TYPE_WIDE_STRING; + c = 's'; + break; +#endif + case 'p': + type = TYPE_POINTER; + break; + case 'n': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_COUNT_LONGLONGINT_POINTER; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lln" into TYPE_COUNT_LONGINT_POINTER. */ + if (flags >= 8) + type = TYPE_COUNT_LONGINT_POINTER; + else if (flags & 2) + type = TYPE_COUNT_SCHAR_POINTER; + else if (flags & 1) + type = TYPE_COUNT_SHORT_POINTER; + else + type = TYPE_COUNT_INT_POINTER; + break; +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case 'U': + if (flags >= 16) + type = TYPE_U32_STRING; + else if (flags >= 8) + type = TYPE_U16_STRING; + else + type = TYPE_U8_STRING; + break; +#endif + case '%': + type = TYPE_NONE; + break; + default: + /* Unknown conversion character. */ + goto error; + } + } + + if (type != TYPE_NONE) + { + dp->arg_index = arg_index; + if (dp->arg_index == ARG_NONE) + { + dp->arg_index = arg_posn++; + if (dp->arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->arg_index, type); + } + dp->conversion = c; + dp->dir_end = cp; + } + + d->count++; + if (d->count >= d_allocated) + { + size_t memory_size; + DIRECTIVE *memory; + + d_allocated = xtimes (d_allocated, 2); + memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); + if (size_overflow_p (memory_size)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + memory = (DIRECTIVE *) realloc (d->dir, memory_size); + if (memory == NULL) + /* Out of memory. */ + goto out_of_memory; + d->dir = memory; + } + } +#if CHAR_T_ONLY_ASCII + else if (!c_isascii (c)) + { + /* Non-ASCII character. Not supported. */ + goto error; + } +#endif + } + d->dir[d->count].dir_start = cp; + + d->max_width_length = max_width_length; + d->max_precision_length = max_precision_length; + return 0; + +error: + if (a->arg) + free (a->arg); + if (d->dir) + free (d->dir); + errno = EINVAL; + return -1; + +out_of_memory: + if (a->arg) + free (a->arg); + if (d->dir) + free (d->dir); +out_of_memory_1: + errno = ENOMEM; + return -1; +} + +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef CHAR_T_ONLY_ASCII +#undef CHAR_T diff --git a/coreseek/m4-1.4.13/lib/printf-parse.h b/coreseek/m4-1.4.13/lib/printf-parse.h new file mode 100644 index 0000000..e5d68d7 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/printf-parse.h @@ -0,0 +1,179 @@ +/* Parse printf format string. + Copyright (C) 1999, 2002-2003, 2005, 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _PRINTF_PARSE_H +#define _PRINTF_PARSE_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + STATIC Set to 'static' to declare the function static. */ + +#include "printf-args.h" + + +/* Flags */ +#define FLAG_GROUP 1 /* ' flag */ +#define FLAG_LEFT 2 /* - flag */ +#define FLAG_SHOWSIGN 4 /* + flag */ +#define FLAG_SPACE 8 /* space flag */ +#define FLAG_ALT 16 /* # flag */ +#define FLAG_ZERO 32 + +/* arg_index value indicating that no argument is consumed. */ +#define ARG_NONE (~(size_t)0) + +/* xxx_directive: A parsed directive. + xxx_directives: A parsed format string. */ + +/* A parsed directive. */ +typedef struct +{ + const char* dir_start; + const char* dir_end; + int flags; + const char* width_start; + const char* width_end; + size_t width_arg_index; + const char* precision_start; + const char* precision_end; + size_t precision_arg_index; + char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +char_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + char_directive *dir; + size_t max_width_length; + size_t max_precision_length; +} +char_directives; + +#if ENABLE_UNISTDIO + +/* A parsed directive. */ +typedef struct +{ + const uint8_t* dir_start; + const uint8_t* dir_end; + int flags; + const uint8_t* width_start; + const uint8_t* width_end; + size_t width_arg_index; + const uint8_t* precision_start; + const uint8_t* precision_end; + size_t precision_arg_index; + uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u8_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u8_directive *dir; + size_t max_width_length; + size_t max_precision_length; +} +u8_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint16_t* dir_start; + const uint16_t* dir_end; + int flags; + const uint16_t* width_start; + const uint16_t* width_end; + size_t width_arg_index; + const uint16_t* precision_start; + const uint16_t* precision_end; + size_t precision_arg_index; + uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u16_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u16_directive *dir; + size_t max_width_length; + size_t max_precision_length; +} +u16_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint32_t* dir_start; + const uint32_t* dir_end; + int flags; + const uint32_t* width_start; + const uint32_t* width_end; + size_t width_arg_index; + const uint32_t* precision_start; + const uint32_t* precision_end; + size_t precision_arg_index; + uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u32_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u32_directive *dir; + size_t max_width_length; + size_t max_precision_length; +} +u32_directives; + +#endif + + +/* Parses the format string. Fills in the number N of directives, and fills + in directives[0], ..., directives[N-1], and sets directives[N].dir_start + to the end of the format string. Also fills in the arg_type fields of the + arguments and the needed count of arguments. */ +#if ENABLE_UNISTDIO +extern int + ulc_printf_parse (const char *format, char_directives *d, arguments *a); +extern int + u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); +extern int + u16_printf_parse (const uint16_t *format, u16_directives *d, + arguments *a); +extern int + u32_printf_parse (const uint32_t *format, u32_directives *d, + arguments *a); +#else +# ifdef STATIC +STATIC +# else +extern +# endif +int printf_parse (const char *format, char_directives *d, arguments *a); +#endif + +#endif /* _PRINTF_PARSE_H */ diff --git a/coreseek/m4-1.4.13/lib/printf-parse.o b/coreseek/m4-1.4.13/lib/printf-parse.o new file mode 100644 index 0000000..29fbc80 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/printf-parse.o differ diff --git a/coreseek/m4-1.4.13/lib/progname.c b/coreseek/m4-1.4.13/lib/progname.c new file mode 100644 index 0000000..9854b5e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/progname.c @@ -0,0 +1,63 @@ +/* Program name management. + Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include + +/* Specification. */ +#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ +#include "progname.h" + +#include + + +/* String containing name the program is called with. + To be initialized by main(). */ +const char *program_name = NULL; + +/* Set program_name, based on argv[0]. */ +void +set_program_name (const char *argv0) +{ + /* libtool creates a temporary executable whose name is sometimes prefixed + with "lt-" (depends on the platform). It also makes argv[0] absolute. + But the name of the temporary executable is a detail that should not be + visible to the end user and to the test suite. + Remove this "/.libs/" or "/.libs/lt-" prefix here. */ + const char *slash; + const char *base; + + slash = strrchr (argv0, '/'); + base = (slash != NULL ? slash + 1 : argv0); + if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) + { + argv0 = base; + if (strncmp (base, "lt-", 3) == 0) + argv0 = base + 3; + } + + /* But don't strip off a leading / in general, because when the user + runs + /some/hidden/place/bin/cp foo foo + he should get the error message + /some/hidden/place/bin/cp: `foo' and `foo' are the same file + not + cp: `foo' and `foo' are the same file + */ + + program_name = argv0; +} diff --git a/coreseek/m4-1.4.13/lib/progname.h b/coreseek/m4-1.4.13/lib/progname.h new file mode 100644 index 0000000..82615c6 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/progname.h @@ -0,0 +1,60 @@ +/* Program name management. + Copyright (C) 2001-2004, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _PROGNAME_H +#define _PROGNAME_H + +/* Programs using this file should do the following in main(): + set_program_name (argv[0]); + */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* String containing name the program is called with. */ +extern const char *program_name; + +/* Set program_name, based on argv[0]. */ +extern void set_program_name (const char *argv0); + +#if ENABLE_RELOCATABLE + +/* Set program_name, based on argv[0], and original installation prefix and + directory, for relocatability. */ +extern void set_program_name_and_installdir (const char *argv0, + const char *orig_installprefix, + const char *orig_installdir); +#undef set_program_name +#define set_program_name(ARG0) \ + set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) + +/* Return the full pathname of the current executable, based on the earlier + call to set_program_name_and_installdir. Return NULL if unknown. */ +extern char *get_full_program_name (void); + +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _PROGNAME_H */ diff --git a/coreseek/m4-1.4.13/lib/progname.o b/coreseek/m4-1.4.13/lib/progname.o new file mode 100644 index 0000000..44fa6a6 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/progname.o differ diff --git a/coreseek/m4-1.4.13/lib/quotearg.c b/coreseek/m4-1.4.13/lib/quotearg.c new file mode 100644 index 0000000..339bf34 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/quotearg.c @@ -0,0 +1,799 @@ +/* quotearg.c - quote arguments for output + + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, + 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert */ + +#include + +#include "quotearg.h" + +#include "xalloc.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#define INT_BITS (sizeof (int) * CHAR_BIT) + +struct quoting_options +{ + /* Basic quoting style. */ + enum quoting_style style; + + /* Additional flags. Bitwise combination of enum quoting_flags. */ + int flags; + + /* Quote the characters indicated by this bit vector even if the + quoting style would not normally require them to be quoted. */ + unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1]; +}; + +/* Names of quoting styles. */ +char const *const quoting_style_args[] = +{ + "literal", + "shell", + "shell-always", + "c", + "c-maybe", + "escape", + "locale", + "clocale", + 0 +}; + +/* Correspondences to quoting style names. */ +enum quoting_style const quoting_style_vals[] = +{ + literal_quoting_style, + shell_quoting_style, + shell_always_quoting_style, + c_quoting_style, + c_maybe_quoting_style, + escape_quoting_style, + locale_quoting_style, + clocale_quoting_style +}; + +/* The default quoting options. */ +static struct quoting_options default_quoting_options; + +/* Allocate a new set of quoting options, with contents initially identical + to O if O is not null, or to the default if O is null. + It is the caller's responsibility to free the result. */ +struct quoting_options * +clone_quoting_options (struct quoting_options *o) +{ + int e = errno; + struct quoting_options *p = xmemdup (o ? o : &default_quoting_options, + sizeof *o); + errno = e; + return p; +} + +/* Get the value of O's quoting style. If O is null, use the default. */ +enum quoting_style +get_quoting_style (struct quoting_options *o) +{ + return (o ? o : &default_quoting_options)->style; +} + +/* In O (or in the default if O is null), + set the value of the quoting style to S. */ +void +set_quoting_style (struct quoting_options *o, enum quoting_style s) +{ + (o ? o : &default_quoting_options)->style = s; +} + +/* In O (or in the default if O is null), + set the value of the quoting options for character C to I. + Return the old value. Currently, the only values defined for I are + 0 (the default) and 1 (which means to quote the character even if + it would not otherwise be quoted). */ +int +set_char_quoting (struct quoting_options *o, char c, int i) +{ + unsigned char uc = c; + unsigned int *p = + (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS; + int shift = uc % INT_BITS; + int r = (*p >> shift) & 1; + *p ^= ((i & 1) ^ r) << shift; + return r; +} + +/* In O (or in the default if O is null), + set the value of the quoting options flag to I, which can be a + bitwise combination of enum quoting_flags, or 0 for default + behavior. Return the old value. */ +int +set_quoting_flags (struct quoting_options *o, int i) +{ + int r; + if (!o) + o = &default_quoting_options; + r = o->flags; + o->flags = i; + return r; +} + +/* Return quoting options for STYLE, with no extra quoting. */ +static struct quoting_options +quoting_options_from_style (enum quoting_style style) +{ + struct quoting_options o; + o.style = style; + o.flags = 0; + memset (o.quote_these_too, 0, sizeof o.quote_these_too); + return o; +} + +/* MSGID approximates a quotation mark. Return its translation if it + has one; otherwise, return either it or "\"", depending on S. */ +static char const * +gettext_quote (char const *msgid, enum quoting_style s) +{ + char const *translation = _(msgid); + if (translation == msgid && s == clocale_quoting_style) + translation = "\""; + return translation; +} + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and + QUOTE_THESE_TOO to control quoting. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. + + This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG, + ARGSIZE, O), except it breaks O into its component pieces and is + not careful about errno. */ + +static size_t +quotearg_buffer_restyled (char *buffer, size_t buffersize, + char const *arg, size_t argsize, + enum quoting_style quoting_style, int flags, + unsigned int const *quote_these_too) +{ + size_t i; + size_t len = 0; + char const *quote_string = 0; + size_t quote_string_len = 0; + bool backslash_escapes = false; + bool unibyte_locale = MB_CUR_MAX == 1; + bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0; + +#define STORE(c) \ + do \ + { \ + if (len < buffersize) \ + buffer[len] = (c); \ + len++; \ + } \ + while (0) + + switch (quoting_style) + { + case c_maybe_quoting_style: + quoting_style = c_quoting_style; + elide_outer_quotes = true; + /* Fall through. */ + case c_quoting_style: + if (!elide_outer_quotes) + STORE ('"'); + backslash_escapes = true; + quote_string = "\""; + quote_string_len = 1; + break; + + case escape_quoting_style: + backslash_escapes = true; + elide_outer_quotes = false; + break; + + case locale_quoting_style: + case clocale_quoting_style: + { + /* TRANSLATORS: + Get translations for open and closing quotation marks. + + The message catalog should translate "`" to a left + quotation mark suitable for the locale, and similarly for + "'". If the catalog has no translation, + locale_quoting_style quotes `like this', and + clocale_quoting_style quotes "like this". + + For example, an American English Unicode locale should + translate "`" to U+201C (LEFT DOUBLE QUOTATION MARK), and + should translate "'" to U+201D (RIGHT DOUBLE QUOTATION + MARK). A British English Unicode locale should instead + translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and + U+2019 (RIGHT SINGLE QUOTATION MARK), respectively. + + If you don't know what to put here, please see + + and use glyphs suitable for your language. */ + + char const *left = gettext_quote (N_("`"), quoting_style); + char const *right = gettext_quote (N_("'"), quoting_style); + if (!elide_outer_quotes) + for (quote_string = left; *quote_string; quote_string++) + STORE (*quote_string); + backslash_escapes = true; + quote_string = right; + quote_string_len = strlen (quote_string); + } + break; + + case shell_quoting_style: + quoting_style = shell_always_quoting_style; + elide_outer_quotes = true; + /* Fall through. */ + case shell_always_quoting_style: + if (!elide_outer_quotes) + STORE ('\''); + quote_string = "'"; + quote_string_len = 1; + break; + + case literal_quoting_style: + elide_outer_quotes = false; + break; + + default: + abort (); + } + + for (i = 0; ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize); i++) + { + unsigned char c; + unsigned char esc; + + if (backslash_escapes + && quote_string_len + && i + quote_string_len <= argsize + && memcmp (arg + i, quote_string, quote_string_len) == 0) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\\'); + } + + c = arg[i]; + switch (c) + { + case '\0': + if (backslash_escapes) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\\'); + if (i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9') + { + STORE ('0'); + STORE ('0'); + } + c = '0'; + } + else if (flags & QA_ELIDE_NULL_BYTES) + continue; + break; + + case '?': + switch (quoting_style) + { + case shell_always_quoting_style: + if (elide_outer_quotes) + goto force_outer_quoting_style; + break; + + case c_quoting_style: + if ((flags & QA_SPLIT_TRIGRAPHS) + && i + 2 < argsize && arg[i + 1] == '?') + switch (arg[i + 2]) + { + case '!': case '\'': + case '(': case ')': case '-': case '/': + case '<': case '=': case '>': + /* Escape the second '?' in what would otherwise be + a trigraph. */ + if (elide_outer_quotes) + goto force_outer_quoting_style; + c = arg[i + 2]; + i += 2; + STORE ('?'); + STORE ('"'); + STORE ('"'); + STORE ('?'); + break; + + default: + break; + } + break; + + default: + break; + } + break; + + case '\a': esc = 'a'; goto c_escape; + case '\b': esc = 'b'; goto c_escape; + case '\f': esc = 'f'; goto c_escape; + case '\n': esc = 'n'; goto c_and_shell_escape; + case '\r': esc = 'r'; goto c_and_shell_escape; + case '\t': esc = 't'; goto c_and_shell_escape; + case '\v': esc = 'v'; goto c_escape; + case '\\': esc = c; + /* No need to escape the escape if we are trying to elide + outer quotes and nothing else is problematic. */ + if (backslash_escapes && elide_outer_quotes && quote_string_len) + goto store_c; + + c_and_shell_escape: + if (quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + /* Fall through. */ + c_escape: + if (backslash_escapes) + { + c = esc; + goto store_escape; + } + break; + + case '{': case '}': /* sometimes special if isolated */ + if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1)) + break; + /* Fall through. */ + case '#': case '~': + if (i != 0) + break; + /* Fall through. */ + case ' ': + case '!': /* special in bash */ + case '"': case '$': case '&': + case '(': case ')': case '*': case ';': + case '<': + case '=': /* sometimes special in 0th or (with "set -k") later args */ + case '>': case '[': + case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */ + case '`': case '|': + /* A shell special character. In theory, '$' and '`' could + be the first bytes of multibyte characters, which means + we should check them with mbrtowc, but in practice this + doesn't happen so it's not worth worrying about. */ + if (quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + break; + + case '\'': + if (quoting_style == shell_always_quoting_style) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\''); + STORE ('\\'); + STORE ('\''); + } + break; + + case '%': case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': case ':': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': case ']': case '_': case 'a': case 'b': + case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': + case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': + case 'o': case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': + /* These characters don't cause problems, no matter what the + quoting style is. They cannot start multibyte sequences. */ + break; + + default: + /* If we have a multibyte sequence, copy it until we reach + its end, find an error, or come back to the initial shift + state. For C-like styles, if the sequence has + unprintable characters, escape the whole sequence, since + we can't easily escape single characters within it. */ + { + /* Length of multibyte sequence found so far. */ + size_t m; + + bool printable; + + if (unibyte_locale) + { + m = 1; + printable = isprint (c) != 0; + } + else + { + mbstate_t mbstate; + memset (&mbstate, 0, sizeof mbstate); + + m = 0; + printable = true; + if (argsize == SIZE_MAX) + argsize = strlen (arg); + + do + { + wchar_t w; + size_t bytes = mbrtowc (&w, &arg[i + m], + argsize - (i + m), &mbstate); + if (bytes == 0) + break; + else if (bytes == (size_t) -1) + { + printable = false; + break; + } + else if (bytes == (size_t) -2) + { + printable = false; + while (i + m < argsize && arg[i + m]) + m++; + break; + } + else + { + /* Work around a bug with older shells that "see" a '\' + that is really the 2nd byte of a multibyte character. + In practice the problem is limited to ASCII + chars >= '@' that are shell special chars. */ + if ('[' == 0x5b && elide_outer_quotes + && quoting_style == shell_always_quoting_style) + { + size_t j; + for (j = 1; j < bytes; j++) + switch (arg[i + m + j]) + { + case '[': case '\\': case '^': + case '`': case '|': + goto force_outer_quoting_style; + + default: + break; + } + } + + if (! iswprint (w)) + printable = false; + m += bytes; + } + } + while (! mbsinit (&mbstate)); + } + + if (1 < m || (backslash_escapes && ! printable)) + { + /* Output a multibyte sequence, or an escaped + unprintable unibyte character. */ + size_t ilim = i + m; + + for (;;) + { + if (backslash_escapes && ! printable) + { + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\\'); + STORE ('0' + (c >> 6)); + STORE ('0' + ((c >> 3) & 7)); + c = '0' + (c & 7); + } + if (ilim <= i + 1) + break; + STORE (c); + c = arg[++i]; + } + + goto store_c; + } + } + } + + if (! ((backslash_escapes || elide_outer_quotes) + && quote_these_too + && quote_these_too[c / INT_BITS] & (1 << (c % INT_BITS)))) + goto store_c; + + store_escape: + if (elide_outer_quotes) + goto force_outer_quoting_style; + STORE ('\\'); + + store_c: + STORE (c); + } + + if (len == 0 && quoting_style == shell_always_quoting_style + && elide_outer_quotes) + goto force_outer_quoting_style; + + if (quote_string && !elide_outer_quotes) + for (; *quote_string; quote_string++) + STORE (*quote_string); + + if (len < buffersize) + buffer[len] = '\0'; + return len; + + force_outer_quoting_style: + /* Don't reuse quote_these_too, since the addition of outer quotes + sufficiently quotes the specified characters. */ + return quotearg_buffer_restyled (buffer, buffersize, arg, argsize, + quoting_style, + flags & ~QA_ELIDE_OUTER_QUOTES, NULL); +} + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using O to control quoting. + If O is null, use the default. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is SIZE_MAX, use the string length of the argument for + ARGSIZE. */ +size_t +quotearg_buffer (char *buffer, size_t buffersize, + char const *arg, size_t argsize, + struct quoting_options const *o) +{ + struct quoting_options const *p = o ? o : &default_quoting_options; + int e = errno; + size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize, + p->style, p->flags, p->quote_these_too); + errno = e; + return r; +} + +/* Equivalent to quotearg_alloc (ARG, ARGSIZE, NULL, O). */ +char * +quotearg_alloc (char const *arg, size_t argsize, + struct quoting_options const *o) +{ + return quotearg_alloc_mem (arg, argsize, NULL, o); +} + +/* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly + allocated storage containing the quoted string, and store the + resulting size into *SIZE, if non-NULL. The result can contain + embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not + NULL, and set_quoting_flags has not set the null byte elision + flag. */ +char * +quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size, + struct quoting_options const *o) +{ + struct quoting_options const *p = o ? o : &default_quoting_options; + int e = errno; + /* Elide embedded null bytes if we can't return a size. */ + int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES); + size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style, + flags, p->quote_these_too) + 1; + char *buf = xcharalloc (bufsize); + quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags, + p->quote_these_too); + errno = e; + if (size) + *size = bufsize - 1; + return buf; +} + +/* A storage slot with size and pointer to a value. */ +struct slotvec +{ + size_t size; + char *val; +}; + +/* Preallocate a slot 0 buffer, so that the caller can always quote + one small component of a "memory exhausted" message in slot 0. */ +static char slot0[256]; +static unsigned int nslots = 1; +static struct slotvec slotvec0 = {sizeof slot0, slot0}; +static struct slotvec *slotvec = &slotvec0; + +void +quotearg_free (void) +{ + struct slotvec *sv = slotvec; + unsigned int i; + for (i = 1; i < nslots; i++) + free (sv[i].val); + if (sv[0].val != slot0) + { + free (sv[0].val); + slotvec0.size = sizeof slot0; + slotvec0.val = slot0; + } + if (sv != &slotvec0) + { + free (sv); + slotvec = &slotvec0; + } + nslots = 1; +} + +/* Use storage slot N to return a quoted version of argument ARG. + ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a + null-terminated string. + OPTIONS specifies the quoting options. + The returned value points to static storage that can be + reused by the next call to this function with the same value of N. + N must be nonnegative. N is deliberately declared with type "int" + to allow for future extensions (using negative values). */ +static char * +quotearg_n_options (int n, char const *arg, size_t argsize, + struct quoting_options const *options) +{ + int e = errno; + + unsigned int n0 = n; + struct slotvec *sv = slotvec; + + if (n < 0) + abort (); + + if (nslots <= n0) + { + /* FIXME: technically, the type of n1 should be `unsigned int', + but that evokes an unsuppressible warning from gcc-4.0.1 and + older. If gcc ever provides an option to suppress that warning, + revert to the original type, so that the test in xalloc_oversized + is once again performed only at compile time. */ + size_t n1 = n0 + 1; + bool preallocated = (sv == &slotvec0); + + if (xalloc_oversized (n1, sizeof *sv)) + xalloc_die (); + + slotvec = sv = xrealloc (preallocated ? NULL : sv, n1 * sizeof *sv); + if (preallocated) + *sv = slotvec0; + memset (sv + nslots, 0, (n1 - nslots) * sizeof *sv); + nslots = n1; + } + + { + size_t size = sv[n].size; + char *val = sv[n].val; + /* Elide embedded null bytes since we don't return a size. */ + int flags = options->flags | QA_ELIDE_NULL_BYTES; + size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize, + options->style, flags, + options->quote_these_too); + + if (size <= qsize) + { + sv[n].size = size = qsize + 1; + if (val != slot0) + free (val); + sv[n].val = val = xcharalloc (size); + quotearg_buffer_restyled (val, size, arg, argsize, options->style, + flags, options->quote_these_too); + } + + errno = e; + return val; + } +} + +char * +quotearg_n (int n, char const *arg) +{ + return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options); +} + +char * +quotearg_n_mem (int n, char const *arg, size_t argsize) +{ + return quotearg_n_options (n, arg, argsize, &default_quoting_options); +} + +char * +quotearg (char const *arg) +{ + return quotearg_n (0, arg); +} + +char * +quotearg_mem (char const *arg, size_t argsize) +{ + return quotearg_n_mem (0, arg, argsize); +} + +char * +quotearg_n_style (int n, enum quoting_style s, char const *arg) +{ + struct quoting_options const o = quoting_options_from_style (s); + return quotearg_n_options (n, arg, SIZE_MAX, &o); +} + +char * +quotearg_n_style_mem (int n, enum quoting_style s, + char const *arg, size_t argsize) +{ + struct quoting_options const o = quoting_options_from_style (s); + return quotearg_n_options (n, arg, argsize, &o); +} + +char * +quotearg_style (enum quoting_style s, char const *arg) +{ + return quotearg_n_style (0, s, arg); +} + +char * +quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize) +{ + return quotearg_n_style_mem (0, s, arg, argsize); +} + +char * +quotearg_char_mem (char const *arg, size_t argsize, char ch) +{ + struct quoting_options options; + options = default_quoting_options; + set_char_quoting (&options, ch, 1); + return quotearg_n_options (0, arg, argsize, &options); +} + +char * +quotearg_char (char const *arg, char ch) +{ + return quotearg_char_mem (arg, SIZE_MAX, ch); +} + +char * +quotearg_colon (char const *arg) +{ + return quotearg_char (arg, ':'); +} + +char * +quotearg_colon_mem (char const *arg, size_t argsize) +{ + return quotearg_char_mem (arg, argsize, ':'); +} diff --git a/coreseek/m4-1.4.13/lib/quotearg.h b/coreseek/m4-1.4.13/lib/quotearg.h new file mode 100644 index 0000000..7700107 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/quotearg.h @@ -0,0 +1,305 @@ +/* quotearg.h - quote arguments for output + + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2006, 2008 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert */ + +#ifndef QUOTEARG_H_ +# define QUOTEARG_H_ 1 + +# include + +/* Basic quoting styles. For each style, an example is given on the + input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using + quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that + style and the default flags and quoted characters. Note that the + examples are shown here as valid C strings rather than what + displays on a terminal (with "??/" as a trigraph for "\\"). */ +enum quoting_style + { + /* Output names as-is (ls --quoting-style=literal). Can result in + embedded null bytes if QA_ELIDE_NULL_BYTES is not in + effect. + + quotearg_buffer: + "simple", "\0 \t\n'\"\033??/\\", "a:b" + quotearg: + "simple", " \t\n'\"\033??/\\", "a:b" + quotearg_colon: + "simple", " \t\n'\"\033??/\\", "a:b" + */ + literal_quoting_style, + + /* Quote names for the shell if they contain shell metacharacters + or would cause ambiguous output (ls --quoting-style=shell). + Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not + in effect. + + quotearg_buffer: + "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b" + quotearg: + "simple", "' \t\n'\\''\"\033??/\\'", "a:b" + quotearg_colon: + "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'" + */ + shell_quoting_style, + + /* Quote names for the shell, even if they would normally not + require quoting (ls --quoting-style=shell-always). Can result + in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. + Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in + effect. + + quotearg_buffer: + "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'" + quotearg: + "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" + quotearg_colon: + "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" + */ + shell_always_quoting_style, + + /* Quote names as for a C language string (ls --quoting-style=c). + Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is + in effect. Split into consecutive strings if + QA_SPLIT_TRIGRAPHS. + + quotearg_buffer: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg_colon: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" + */ + c_quoting_style, + + /* Like c_quoting_style except omit the surrounding double-quote + characters if no quoted characters are encountered. + + quotearg_buffer: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" + quotearg: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" + quotearg_colon: + "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + */ + c_maybe_quoting_style, + + /* Like c_quoting_style except always omit the surrounding + double-quote characters (ls --quoting-style=escape). + + quotearg_buffer: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" + quotearg: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" + quotearg_colon: + "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b" + */ + escape_quoting_style, + + /* Like clocale_quoting_style, but quote `like this' instead of + "like this" in the default C locale (ls --quoting-style=locale). + + LC_MESSAGES=C + quotearg_buffer: + "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'" + quotearg: + "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'" + quotearg_colon: + "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a\\:b'" + + LC_MESSAGES=pt_PT.utf8 + quotearg_buffer: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg_colon: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" + */ + locale_quoting_style, + + /* Like c_quoting_style except use quotation marks appropriate for + the locale (ls --quoting-style=clocale). + + LC_MESSAGES=C + quotearg_buffer: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" + quotearg_colon: + "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" + + LC_MESSAGES=pt_PT.utf8 + quotearg_buffer: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" + quotearg_colon: + "\302\253simple\302\273", + "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" + */ + clocale_quoting_style + }; + +/* Flags for use in set_quoting_flags. */ +enum quoting_flags + { + /* Always elide null bytes from styles that do not quote them, + even when the length of the result is available to the + caller. */ + QA_ELIDE_NULL_BYTES = 0x01, + + /* Omit the surrounding quote characters if no escaped characters + are encountered. Note that if no other character needs + escaping, then neither does the escape character. */ + QA_ELIDE_OUTER_QUOTES = 0x02, + + /* In the c_quoting_style and c_maybe_quoting_style, split ANSI + trigraph sequences into concatenated strings (for example, + "?""?/" rather than "??/", which could be confused with + "\\"). */ + QA_SPLIT_TRIGRAPHS = 0x04 + }; + +/* For now, --quoting-style=literal is the default, but this may change. */ +# ifndef DEFAULT_QUOTING_STYLE +# define DEFAULT_QUOTING_STYLE literal_quoting_style +# endif + +/* Names of quoting styles and their corresponding values. */ +extern char const *const quoting_style_args[]; +extern enum quoting_style const quoting_style_vals[]; + +struct quoting_options; + +/* The functions listed below set and use a hidden variable + that contains the default quoting style options. */ + +/* Allocate a new set of quoting options, with contents initially identical + to O if O is not null, or to the default if O is null. + It is the caller's responsibility to free the result. */ +struct quoting_options *clone_quoting_options (struct quoting_options *o); + +/* Get the value of O's quoting style. If O is null, use the default. */ +enum quoting_style get_quoting_style (struct quoting_options *o); + +/* In O (or in the default if O is null), + set the value of the quoting style to S. */ +void set_quoting_style (struct quoting_options *o, enum quoting_style s); + +/* In O (or in the default if O is null), + set the value of the quoting options for character C to I. + Return the old value. Currently, the only values defined for I are + 0 (the default) and 1 (which means to quote the character even if + it would not otherwise be quoted). */ +int set_char_quoting (struct quoting_options *o, char c, int i); + +/* In O (or in the default if O is null), + set the value of the quoting options flag to I, which can be a + bitwise combination of enum quoting_flags, or 0 for default + behavior. Return the old value. */ +int set_quoting_flags (struct quoting_options *o, int i); + +/* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of + argument ARG (of size ARGSIZE), using O to control quoting. + If O is null, use the default. + Terminate the output with a null character, and return the written + size of the output, not counting the terminating null. + If BUFFERSIZE is too small to store the output string, return the + value that would have been returned had BUFFERSIZE been large enough. + If ARGSIZE is -1, use the string length of the argument for ARGSIZE. + On output, BUFFER might contain embedded null bytes if ARGSIZE was + not -1, the style of O does not use backslash escapes, and the + flags of O do not request elision of null bytes.*/ +size_t quotearg_buffer (char *buffer, size_t buffersize, + char const *arg, size_t argsize, + struct quoting_options const *o); + +/* Like quotearg_buffer, except return the result in a newly allocated + buffer. It is the caller's responsibility to free the result. The + result will not contain embedded null bytes. */ +char *quotearg_alloc (char const *arg, size_t argsize, + struct quoting_options const *o); + +/* Like quotearg_alloc, except that the length of the result, + excluding the terminating null byte, is stored into SIZE if it is + non-NULL. The result might contain embedded null bytes if ARGSIZE + was not -1, SIZE was not NULL, the style of O does not use + backslash escapes, and the flags of O do not request elision of + null bytes.*/ +char *quotearg_alloc_mem (char const *arg, size_t argsize, + size_t *size, struct quoting_options const *o); + +/* Use storage slot N to return a quoted version of the string ARG. + Use the default quoting options. + The returned value points to static storage that can be + reused by the next call to this function with the same value of N. + N must be nonnegative. The output of all functions in the + quotearg_n family are guaranteed to not contain embedded null + bytes.*/ +char *quotearg_n (int n, char const *arg); + +/* Equivalent to quotearg_n (0, ARG). */ +char *quotearg (char const *arg); + +/* Use storage slot N to return a quoted version of the argument ARG + of size ARGSIZE. This is like quotearg_n (N, ARG), except it can + quote null bytes. */ +char *quotearg_n_mem (int n, char const *arg, size_t argsize); + +/* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE). */ +char *quotearg_mem (char const *arg, size_t argsize); + +/* Use style S and storage slot N to return a quoted version of the string ARG. + This is like quotearg_n (N, ARG), except that it uses S with no other + options to specify the quoting method. */ +char *quotearg_n_style (int n, enum quoting_style s, char const *arg); + +/* Use style S and storage slot N to return a quoted version of the + argument ARG of size ARGSIZE. This is like quotearg_n_style + (N, S, ARG), except it can quote null bytes. */ +char *quotearg_n_style_mem (int n, enum quoting_style s, + char const *arg, size_t argsize); + +/* Equivalent to quotearg_n_style (0, S, ARG). */ +char *quotearg_style (enum quoting_style s, char const *arg); + +/* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE). */ +char *quotearg_style_mem (enum quoting_style s, + char const *arg, size_t argsize); + +/* Like quotearg (ARG), except also quote any instances of CH. */ +char *quotearg_char (char const *arg, char ch); + +/* Like quotearg_char (ARG, CH), except it can quote null bytes. */ +char *quotearg_char_mem (char const *arg, size_t argsize, char ch); + +/* Equivalent to quotearg_char (ARG, ':'). */ +char *quotearg_colon (char const *arg); + +/* Like quotearg_colon (ARG), except it can quote null bytes. */ +char *quotearg_colon_mem (char const *arg, size_t argsize); + +/* Free any dynamically allocated memory. */ +void quotearg_free (void); + +#endif /* !QUOTEARG_H_ */ diff --git a/coreseek/m4-1.4.13/lib/quotearg.o b/coreseek/m4-1.4.13/lib/quotearg.o new file mode 100644 index 0000000..7672222 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/quotearg.o differ diff --git a/coreseek/m4-1.4.13/lib/rawmemchr.c b/coreseek/m4-1.4.13/lib/rawmemchr.c new file mode 100644 index 0000000..d7cdc6e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/rawmemchr.c @@ -0,0 +1,136 @@ +/* Searching in a string. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Find the first occurrence of C in S. */ +void * +rawmemchr (const void *s, int c_in) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned char c; + + c = (unsigned char) c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + (size_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if *any of + the four* bytes in the longword in question are equal to NUL or + c. We first use an xor with repeated_c. This reduces the task + to testing whether *any of the four* bytes in longword1 is zero. + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 is zero is equivalent + to testing whether tmp is nonzero. + + This test can read beyond the end of a string, depending on where + C_IN is encountered. However, this is considered safe since the + initialization phase ensured that the read will be aligned, + therefore, the read will not cross page boundaries and will not + cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == c. On little-endian machines, we + could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. + Choose code that works in both cases. */ + + char_ptr = (unsigned char *) longword_ptr; + while (*char_ptr != c) + char_ptr++; + return (void *) char_ptr; +} diff --git a/coreseek/m4-1.4.13/lib/rawmemchr.valgrind b/coreseek/m4-1.4.13/lib/rawmemchr.valgrind new file mode 100644 index 0000000..6363923 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/rawmemchr.valgrind @@ -0,0 +1,12 @@ +# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). +# This use is OK because it provides only a speedup. +{ + rawmemchr-value4 + Memcheck:Value4 + fun:rawmemchr +} +{ + rawmemchr-value8 + Memcheck:Value8 + fun:rawmemchr +} diff --git a/coreseek/m4-1.4.13/lib/ref-add.sed b/coreseek/m4-1.4.13/lib/ref-add.sed new file mode 100644 index 0000000..8b56717 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/ref-add.sed @@ -0,0 +1,10 @@ +/^# Packages using this file: / { + s/# Packages using this file:// + ta + :a + s/ m4 / m4 / + tb + s/ $/ m4 / + :b + s/^/# Packages using this file:/ +} diff --git a/coreseek/m4-1.4.13/lib/ref-add.sin b/coreseek/m4-1.4.13/lib/ref-add.sin new file mode 100644 index 0000000..222d752 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/ref-add.sin @@ -0,0 +1,30 @@ +# Add this package to a list of references stored in a text file. +# +# Copyright (C) 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 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Written by Bruno Haible . +# +/^# Packages using this file: / { + s/# Packages using this file:// + ta + :a + s/ @PACKAGE@ / @PACKAGE@ / + tb + s/ $/ @PACKAGE@ / + :b + s/^/# Packages using this file:/ +} diff --git a/coreseek/m4-1.4.13/lib/ref-del.sed b/coreseek/m4-1.4.13/lib/ref-del.sed new file mode 100644 index 0000000..bc97064 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/ref-del.sed @@ -0,0 +1,5 @@ +/^# Packages using this file: / { + s/# Packages using this file:// + s/ m4 / / + s/^/# Packages using this file:/ +} diff --git a/coreseek/m4-1.4.13/lib/ref-del.sin b/coreseek/m4-1.4.13/lib/ref-del.sin new file mode 100644 index 0000000..1bf073e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/ref-del.sin @@ -0,0 +1,25 @@ +# Remove this package from a list of references stored in a text file. +# +# Copyright (C) 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 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Written by Bruno Haible . +# +/^# Packages using this file: / { + s/# Packages using this file:// + s/ @PACKAGE@ / / + s/^/# Packages using this file:/ +} diff --git a/coreseek/m4-1.4.13/lib/regcomp.c b/coreseek/m4-1.4.13/lib/regcomp.c new file mode 100644 index 0000000..b114b4d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/regcomp.c @@ -0,0 +1,3851 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, + size_t length, reg_syntax_t syntax); +static void re_compile_fastmap_iter (regex_t *bufp, + const re_dfastate_t *init_state, + char *fastmap); +static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); +#ifdef RE_ENABLE_I18N +static void free_charset (re_charset_t *cset); +#endif /* RE_ENABLE_I18N */ +static void free_workarea_compile (regex_t *preg); +static reg_errcode_t create_initial_state (re_dfa_t *dfa); +#ifdef RE_ENABLE_I18N +static void optimize_utf8 (re_dfa_t *dfa); +#endif +static reg_errcode_t analyze (regex_t *preg); +static reg_errcode_t preorder (bin_tree_t *root, + reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra); +static reg_errcode_t postorder (bin_tree_t *root, + reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra); +static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); +static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); +static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, + bin_tree_t *node); +static reg_errcode_t calc_first (void *extra, bin_tree_t *node); +static reg_errcode_t calc_next (void *extra, bin_tree_t *node); +static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); +static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); +static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, + unsigned int constraint); +static reg_errcode_t calc_eclosure (re_dfa_t *dfa); +static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, + Idx node, bool root); +static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); +static Idx fetch_number (re_string_t *input, re_token_t *token, + reg_syntax_t syntax); +static int peek_token (re_token_t *token, re_string_t *input, + reg_syntax_t syntax) internal_function; +static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, + reg_syntax_t syntax, reg_errcode_t *err); +static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, + re_token_t *token, reg_syntax_t syntax, + Idx nest, reg_errcode_t *err); +static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, + re_dfa_t *dfa, re_token_t *token, + reg_syntax_t syntax, reg_errcode_t *err); +static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, + re_token_t *token, reg_syntax_t syntax, + reg_errcode_t *err); +static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, + re_string_t *regexp, + re_token_t *token, int token_len, + re_dfa_t *dfa, + reg_syntax_t syntax, + bool accept_hyphen); +static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, + re_string_t *regexp, + re_token_t *token); +#ifdef RE_ENABLE_I18N +static reg_errcode_t build_equiv_class (bitset_t sbcset, + re_charset_t *mbcset, + Idx *equiv_class_alloc, + const unsigned char *name); +static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, + bitset_t sbcset, + re_charset_t *mbcset, + Idx *char_class_alloc, + const unsigned char *class_name, + reg_syntax_t syntax); +#else /* not RE_ENABLE_I18N */ +static reg_errcode_t build_equiv_class (bitset_t sbcset, + const unsigned char *name); +static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, + bitset_t sbcset, + const unsigned char *class_name, + reg_syntax_t syntax); +#endif /* not RE_ENABLE_I18N */ +static bin_tree_t *build_charclass_op (re_dfa_t *dfa, + RE_TRANSLATE_TYPE trans, + const unsigned char *class_name, + const unsigned char *extra, + bool non_match, reg_errcode_t *err); +static bin_tree_t *create_tree (re_dfa_t *dfa, + bin_tree_t *left, bin_tree_t *right, + re_token_type_t type); +static bin_tree_t *create_token_tree (re_dfa_t *dfa, + bin_tree_t *left, bin_tree_t *right, + const re_token_t *token); +static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); +static void free_token (re_token_t *node); +static reg_errcode_t free_tree (void *extra, bin_tree_t *node); +static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); + +/* This table gives an error message for each of the error codes listed + in regex.h. Obviously the order here has to be same as there. + POSIX doesn't require that we do anything for REG_NOERROR, + but why not be nice? */ + +static const char __re_error_msgid[] = + { +#define REG_NOERROR_IDX 0 + gettext_noop ("Success") /* REG_NOERROR */ + "\0" +#define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") + gettext_noop ("No match") /* REG_NOMATCH */ + "\0" +#define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") + gettext_noop ("Invalid regular expression") /* REG_BADPAT */ + "\0" +#define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") + gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ + "\0" +#define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") + gettext_noop ("Invalid character class name") /* REG_ECTYPE */ + "\0" +#define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") + gettext_noop ("Trailing backslash") /* REG_EESCAPE */ + "\0" +#define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") + gettext_noop ("Invalid back reference") /* REG_ESUBREG */ + "\0" +#define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") + gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */ + "\0" +#define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^") + gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ + "\0" +#define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") + gettext_noop ("Unmatched \\{") /* REG_EBRACE */ + "\0" +#define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") + gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ + "\0" +#define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") + gettext_noop ("Invalid range end") /* REG_ERANGE */ + "\0" +#define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") + gettext_noop ("Memory exhausted") /* REG_ESPACE */ + "\0" +#define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") + gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ + "\0" +#define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") + gettext_noop ("Premature end of regular expression") /* REG_EEND */ + "\0" +#define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") + gettext_noop ("Regular expression too big") /* REG_ESIZE */ + "\0" +#define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") + gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ + }; + +static const size_t __re_error_msgid_idx[] = + { + REG_NOERROR_IDX, + REG_NOMATCH_IDX, + REG_BADPAT_IDX, + REG_ECOLLATE_IDX, + REG_ECTYPE_IDX, + REG_EESCAPE_IDX, + REG_ESUBREG_IDX, + REG_EBRACK_IDX, + REG_EPAREN_IDX, + REG_EBRACE_IDX, + REG_BADBR_IDX, + REG_ERANGE_IDX, + REG_ESPACE_IDX, + REG_BADRPT_IDX, + REG_EEND_IDX, + REG_ESIZE_IDX, + REG_ERPAREN_IDX + }; + +/* Entry points for GNU code. */ + +/* re_compile_pattern is the GNU regular expression compiler: it + compiles PATTERN (of length LENGTH) and puts the result in BUFP. + Returns 0 if the pattern was valid, otherwise an error string. + + Assumes the `allocated' (and perhaps `buffer') and `translate' fields + are set in BUFP on entry. */ + +#ifdef _LIBC +const char * +re_compile_pattern (pattern, length, bufp) + const char *pattern; + size_t length; + struct re_pattern_buffer *bufp; +#else /* size_t might promote */ +const char * +re_compile_pattern (const char *pattern, size_t length, + struct re_pattern_buffer *bufp) +#endif +{ + reg_errcode_t ret; + + /* And GNU code determines whether or not to get register information + by passing null for the REGS argument to re_match, etc., not by + setting no_sub, unless RE_NO_SUB is set. */ + bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); + + /* Match anchors at newline. */ + bufp->newline_anchor = 1; + + ret = re_compile_internal (bufp, pattern, length, re_syntax_options); + + if (!ret) + return NULL; + return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); +} +#ifdef _LIBC +weak_alias (__re_compile_pattern, re_compile_pattern) +#endif + +/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can + also be assigned to arbitrarily: each pattern buffer stores its own + syntax, so it can be changed between regex compilations. */ +/* This has no initializer because initialized variables in Emacs + become read-only after dumping. */ +reg_syntax_t re_syntax_options; + + +/* Specify the precise syntax of regexps for compilation. This provides + for compatibility for various utilities which historically have + different, incompatible syntaxes. + + The argument SYNTAX is a bit mask comprised of the various bits + defined in regex.h. We return the old syntax. */ + +reg_syntax_t +re_set_syntax (syntax) + reg_syntax_t syntax; +{ + reg_syntax_t ret = re_syntax_options; + + re_syntax_options = syntax; + return ret; +} +#ifdef _LIBC +weak_alias (__re_set_syntax, re_set_syntax) +#endif + +int +re_compile_fastmap (bufp) + struct re_pattern_buffer *bufp; +{ + re_dfa_t *dfa = (re_dfa_t *) bufp->buffer; + char *fastmap = bufp->fastmap; + + memset (fastmap, '\0', sizeof (char) * SBC_MAX); + re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); + if (dfa->init_state != dfa->init_state_word) + re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); + if (dfa->init_state != dfa->init_state_nl) + re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); + if (dfa->init_state != dfa->init_state_begbuf) + re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); + bufp->fastmap_accurate = 1; + return 0; +} +#ifdef _LIBC +weak_alias (__re_compile_fastmap, re_compile_fastmap) +#endif + +static inline void +__attribute ((always_inline)) +re_set_fastmap (char *fastmap, bool icase, int ch) +{ + fastmap[ch] = 1; + if (icase) + fastmap[tolower (ch)] = 1; +} + +/* Helper function for re_compile_fastmap. + Compile fastmap for the initial_state INIT_STATE. */ + +static void +re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, + char *fastmap) +{ + re_dfa_t *dfa = (re_dfa_t *) bufp->buffer; + Idx node_cnt; + bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); + for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) + { + Idx node = init_state->nodes.elems[node_cnt]; + re_token_type_t type = dfa->nodes[node].type; + + if (type == CHARACTER) + { + re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); +#ifdef RE_ENABLE_I18N + if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) + { + unsigned char buf[MB_LEN_MAX]; + unsigned char *p; + wchar_t wc; + mbstate_t state; + + p = buf; + *p++ = dfa->nodes[node].opr.c; + while (++node < dfa->nodes_len + && dfa->nodes[node].type == CHARACTER + && dfa->nodes[node].mb_partial) + *p++ = dfa->nodes[node].opr.c; + memset (&state, '\0', sizeof (state)); + if (__mbrtowc (&wc, (const char *) buf, p - buf, + &state) == p - buf + && (__wcrtomb ((char *) buf, towlower (wc), &state) + != (size_t) -1)) + re_set_fastmap (fastmap, false, buf[0]); + } +#endif + } + else if (type == SIMPLE_BRACKET) + { + int i, ch; + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + { + int j; + bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + if (w & ((bitset_word_t) 1 << j)) + re_set_fastmap (fastmap, icase, ch); + } + } +#ifdef RE_ENABLE_I18N + else if (type == COMPLEX_BRACKET) + { + re_charset_t *cset = dfa->nodes[node].opr.mbcset; + Idx i; + +# ifdef _LIBC + /* See if we have to try all bytes which start multiple collation + elements. + e.g. In da_DK, we want to catch 'a' since "aa" is a valid + collation element, and don't catch 'b' since 'b' is + the only collation element which starts from 'b' (and + it is caught by SIMPLE_BRACKET). */ + if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 + && (cset->ncoll_syms || cset->nranges)) + { + const int32_t *table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + for (i = 0; i < SBC_MAX; ++i) + if (table[i] < 0) + re_set_fastmap (fastmap, icase, i); + } +# endif /* _LIBC */ + + /* See if we have to start the match at all multibyte characters, + i.e. where we would not find an invalid sequence. This only + applies to multibyte character sets; for single byte character + sets, the SIMPLE_BRACKET again suffices. */ + if (dfa->mb_cur_max > 1 + && (cset->nchar_classes || cset->non_match +# ifdef _LIBC + || cset->nequiv_classes +# endif /* _LIBC */ + )) + { + unsigned char c = 0; + do + { + mbstate_t mbs; + memset (&mbs, 0, sizeof (mbs)); + if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) + re_set_fastmap (fastmap, false, (int) c); + } + while (++c != 0); + } + + else + { + /* ... Else catch all bytes which can start the mbchars. */ + for (i = 0; i < cset->nmbchars; ++i) + { + char buf[256]; + mbstate_t state; + memset (&state, '\0', sizeof (state)); + if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) + re_set_fastmap (fastmap, icase, *(unsigned char *) buf); + if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) + { + if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state) + != (size_t) -1) + re_set_fastmap (fastmap, false, *(unsigned char *) buf); + } + } + } + } +#endif /* RE_ENABLE_I18N */ + else if (type == OP_PERIOD +#ifdef RE_ENABLE_I18N + || type == OP_UTF8_PERIOD +#endif /* RE_ENABLE_I18N */ + || type == END_OF_RE) + { + memset (fastmap, '\1', sizeof (char) * SBC_MAX); + if (type == END_OF_RE) + bufp->can_be_null = 1; + return; + } + } +} + +/* Entry point for POSIX code. */ +/* regcomp takes a regular expression as a string and compiles it. + + PREG is a regex_t *. We do not expect any fields to be initialized, + since POSIX says we shouldn't. Thus, we set + + `buffer' to the compiled pattern; + `used' to the length of the compiled pattern; + `syntax' to RE_SYNTAX_POSIX_EXTENDED if the + REG_EXTENDED bit in CFLAGS is set; otherwise, to + RE_SYNTAX_POSIX_BASIC; + `newline_anchor' to REG_NEWLINE being set in CFLAGS; + `fastmap' to an allocated space for the fastmap; + `fastmap_accurate' to zero; + `re_nsub' to the number of subexpressions in PATTERN. + + PATTERN is the address of the pattern string. + + CFLAGS is a series of bits which affect compilation. + + If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we + use POSIX basic syntax. + + If REG_NEWLINE is set, then . and [^...] don't match newline. + Also, regexec will try a match beginning after every newline. + + If REG_ICASE is set, then we considers upper- and lowercase + versions of letters to be equivalent when matching. + + If REG_NOSUB is set, then when PREG is passed to regexec, that + routine will report only success or failure, and nothing about the + registers. + + It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for + the return codes and their meanings.) */ + +int +regcomp (preg, pattern, cflags) + regex_t *_Restrict_ preg; + const char *_Restrict_ pattern; + int cflags; +{ + reg_errcode_t ret; + reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED + : RE_SYNTAX_POSIX_BASIC); + + preg->buffer = NULL; + preg->allocated = 0; + preg->used = 0; + + /* Try to allocate space for the fastmap. */ + preg->fastmap = re_malloc (char, SBC_MAX); + if (BE (preg->fastmap == NULL, 0)) + return REG_ESPACE; + + syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; + + /* If REG_NEWLINE is set, newlines are treated differently. */ + if (cflags & REG_NEWLINE) + { /* REG_NEWLINE implies neither . nor [^...] match newline. */ + syntax &= ~RE_DOT_NEWLINE; + syntax |= RE_HAT_LISTS_NOT_NEWLINE; + /* It also changes the matching behavior. */ + preg->newline_anchor = 1; + } + else + preg->newline_anchor = 0; + preg->no_sub = !!(cflags & REG_NOSUB); + preg->translate = NULL; + + ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); + + /* POSIX doesn't distinguish between an unmatched open-group and an + unmatched close-group: both are REG_EPAREN. */ + if (ret == REG_ERPAREN) + ret = REG_EPAREN; + + /* We have already checked preg->fastmap != NULL. */ + if (BE (ret == REG_NOERROR, 1)) + /* Compute the fastmap now, since regexec cannot modify the pattern + buffer. This function never fails in this implementation. */ + (void) re_compile_fastmap (preg); + else + { + /* Some error occurred while compiling the expression. */ + re_free (preg->fastmap); + preg->fastmap = NULL; + } + + return (int) ret; +} +#ifdef _LIBC +weak_alias (__regcomp, regcomp) +#endif + +/* Returns a message corresponding to an error code, ERRCODE, returned + from either regcomp or regexec. We don't use PREG here. */ + +#ifdef _LIBC +size_t +regerror (errcode, preg, errbuf, errbuf_size) + int errcode; + const regex_t *_Restrict_ preg; + char *_Restrict_ errbuf; + size_t errbuf_size; +#else /* size_t might promote */ +size_t +regerror (int errcode, const regex_t *_Restrict_ preg, + char *_Restrict_ errbuf, size_t errbuf_size) +#endif +{ + const char *msg; + size_t msg_size; + + if (BE (errcode < 0 + || errcode >= (int) (sizeof (__re_error_msgid_idx) + / sizeof (__re_error_msgid_idx[0])), 0)) + /* Only error codes returned by the rest of the code should be passed + to this routine. If we are given anything else, or if other regex + code generates an invalid error code, then the program has a bug. + Dump core so we can fix it. */ + abort (); + + msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); + + msg_size = strlen (msg) + 1; /* Includes the null. */ + + if (BE (errbuf_size != 0, 1)) + { + size_t cpy_size = msg_size; + if (BE (msg_size > errbuf_size, 0)) + { + cpy_size = errbuf_size - 1; + errbuf[cpy_size] = '\0'; + } + memcpy (errbuf, msg, cpy_size); + } + + return msg_size; +} +#ifdef _LIBC +weak_alias (__regerror, regerror) +#endif + + +#ifdef RE_ENABLE_I18N +/* This static array is used for the map to single-byte characters when + UTF-8 is used. Otherwise we would allocate memory just to initialize + it the same all the time. UTF-8 is the preferred encoding so this is + a worthwhile optimization. */ +static const bitset_t utf8_sb_map = +{ + /* Set the first 128 bits. */ +# if 4 * BITSET_WORD_BITS < ASCII_CHARS +# error "bitset_word_t is narrower than 32 bits" +# elif 3 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, +# elif 2 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, BITSET_WORD_MAX, +# elif 1 * BITSET_WORD_BITS < ASCII_CHARS + BITSET_WORD_MAX, +# endif + (BITSET_WORD_MAX + >> (SBC_MAX % BITSET_WORD_BITS == 0 + ? 0 + : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) +}; +#endif + + +static void +free_dfa_content (re_dfa_t *dfa) +{ + Idx i, j; + + if (dfa->nodes) + for (i = 0; i < dfa->nodes_len; ++i) + free_token (dfa->nodes + i); + re_free (dfa->nexts); + for (i = 0; i < dfa->nodes_len; ++i) + { + if (dfa->eclosures != NULL) + re_node_set_free (dfa->eclosures + i); + if (dfa->inveclosures != NULL) + re_node_set_free (dfa->inveclosures + i); + if (dfa->edests != NULL) + re_node_set_free (dfa->edests + i); + } + re_free (dfa->edests); + re_free (dfa->eclosures); + re_free (dfa->inveclosures); + re_free (dfa->nodes); + + if (dfa->state_table) + for (i = 0; i <= dfa->state_hash_mask; ++i) + { + struct re_state_table_entry *entry = dfa->state_table + i; + for (j = 0; j < entry->num; ++j) + { + re_dfastate_t *state = entry->array[j]; + free_state (state); + } + re_free (entry->array); + } + re_free (dfa->state_table); +#ifdef RE_ENABLE_I18N + if (dfa->sb_char != utf8_sb_map) + re_free (dfa->sb_char); +#endif + re_free (dfa->subexp_map); +#ifdef DEBUG + re_free (dfa->re_str); +#endif + + re_free (dfa); +} + + +/* Free dynamically allocated space used by PREG. */ + +void +regfree (preg) + regex_t *preg; +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + if (BE (dfa != NULL, 1)) + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + + re_free (preg->fastmap); + preg->fastmap = NULL; + + re_free (preg->translate); + preg->translate = NULL; +} +#ifdef _LIBC +weak_alias (__regfree, regfree) +#endif + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined _REGEX_RE_COMP || defined _LIBC + +/* BSD has one and only one pattern buffer. */ +static struct re_pattern_buffer re_comp_buf; + +char * +# ifdef _LIBC +/* Make these definitions weak in libc, so POSIX programs can redefine + these names if they don't use our functions, and still use + regcomp/regexec above without link errors. */ +weak_function +# endif +re_comp (s) + const char *s; +{ + reg_errcode_t ret; + char *fastmap; + + if (!s) + { + if (!re_comp_buf.buffer) + return gettext ("No previous regular expression"); + return 0; + } + + if (re_comp_buf.buffer) + { + fastmap = re_comp_buf.fastmap; + re_comp_buf.fastmap = NULL; + __regfree (&re_comp_buf); + memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); + re_comp_buf.fastmap = fastmap; + } + + if (re_comp_buf.fastmap == NULL) + { + re_comp_buf.fastmap = (char *) malloc (SBC_MAX); + if (re_comp_buf.fastmap == NULL) + return (char *) gettext (__re_error_msgid + + __re_error_msgid_idx[(int) REG_ESPACE]); + } + + /* Since `re_exec' always passes NULL for the `regs' argument, we + don't need to initialize the pattern buffer fields which affect it. */ + + /* Match anchors at newlines. */ + re_comp_buf.newline_anchor = 1; + + ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); + + if (!ret) + return NULL; + + /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */ + return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); +} + +#ifdef _LIBC +libc_freeres_fn (free_mem) +{ + __regfree (&re_comp_buf); +} +#endif + +#endif /* _REGEX_RE_COMP */ + +/* Internal entry point. + Compile the regular expression PATTERN, whose length is LENGTH. + SYNTAX indicate regular expression's syntax. */ + +static reg_errcode_t +re_compile_internal (regex_t *preg, const char * pattern, size_t length, + reg_syntax_t syntax) +{ + reg_errcode_t err = REG_NOERROR; + re_dfa_t *dfa; + re_string_t regexp; + + /* Initialize the pattern buffer. */ + preg->fastmap_accurate = 0; + preg->syntax = syntax; + preg->not_bol = preg->not_eol = 0; + preg->used = 0; + preg->re_nsub = 0; + preg->can_be_null = 0; + preg->regs_allocated = REGS_UNALLOCATED; + + /* Initialize the dfa. */ + dfa = (re_dfa_t *) preg->buffer; + if (BE (preg->allocated < sizeof (re_dfa_t), 0)) + { + /* If zero allocated, but buffer is non-null, try to realloc + enough space. This loses if buffer's address is bogus, but + that is the user's responsibility. If ->buffer is NULL this + is a simple allocation. */ + dfa = re_realloc (preg->buffer, re_dfa_t, 1); + if (dfa == NULL) + return REG_ESPACE; + preg->allocated = sizeof (re_dfa_t); + preg->buffer = (unsigned char *) dfa; + } + preg->used = sizeof (re_dfa_t); + + err = init_dfa (dfa, length); + if (BE (err != REG_NOERROR, 0)) + { + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + return err; + } +#ifdef DEBUG + /* Note: length+1 will not overflow since it is checked in init_dfa. */ + dfa->re_str = re_malloc (char, length + 1); + strncpy (dfa->re_str, pattern, length + 1); +#endif + + __libc_lock_init (dfa->lock); + + err = re_string_construct (®exp, pattern, length, preg->translate, + (syntax & RE_ICASE) != 0, dfa); + if (BE (err != REG_NOERROR, 0)) + { + re_compile_internal_free_return: + free_workarea_compile (preg); + re_string_destruct (®exp); + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + return err; + } + + /* Parse the regular expression, and build a structure tree. */ + preg->re_nsub = 0; + dfa->str_tree = parse (®exp, preg, syntax, &err); + if (BE (dfa->str_tree == NULL, 0)) + goto re_compile_internal_free_return; + + /* Analyze the tree and create the nfa. */ + err = analyze (preg); + if (BE (err != REG_NOERROR, 0)) + goto re_compile_internal_free_return; + +#ifdef RE_ENABLE_I18N + /* If possible, do searching in single byte encoding to speed things up. */ + if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) + optimize_utf8 (dfa); +#endif + + /* Then create the initial state of the dfa. */ + err = create_initial_state (dfa); + + /* Release work areas. */ + free_workarea_compile (preg); + re_string_destruct (®exp); + + if (BE (err != REG_NOERROR, 0)) + { + free_dfa_content (dfa); + preg->buffer = NULL; + preg->allocated = 0; + } + + return err; +} + +/* Initialize DFA. We use the length of the regular expression PAT_LEN + as the initial length of some arrays. */ + +static reg_errcode_t +init_dfa (re_dfa_t *dfa, size_t pat_len) +{ + __re_size_t table_size; +#ifdef RE_ENABLE_I18N + size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); +#else + size_t max_i18n_object_size = 0; +#endif + size_t max_object_size = + MAX (sizeof (struct re_state_table_entry), + MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + MAX (sizeof (regmatch_t), + max_i18n_object_size)))); + + memset (dfa, '\0', sizeof (re_dfa_t)); + + /* Force allocation of str_tree_storage the first time. */ + dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; + + /* Avoid overflows. The extra "/ 2" is for the table_size doubling + calculation below, and for similar doubling calculations + elsewhere. And it's <= rather than <, because some of the + doubling calculations add 1 afterwards. */ + if (BE (SIZE_MAX / max_object_size / 2 <= pat_len, 0)) + return REG_ESPACE; + + dfa->nodes_alloc = pat_len + 1; + dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); + + /* table_size = 2 ^ ceil(log pat_len) */ + for (table_size = 1; ; table_size <<= 1) + if (table_size > pat_len) + break; + + dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); + dfa->state_hash_mask = table_size - 1; + + dfa->mb_cur_max = MB_CUR_MAX; +#ifdef _LIBC + if (dfa->mb_cur_max == 6 + && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) + dfa->is_utf8 = 1; + dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) + != 0); +#else + if (strcmp (locale_charset (), "UTF-8") == 0) + dfa->is_utf8 = 1; + + /* We check exhaustively in the loop below if this charset is a + superset of ASCII. */ + dfa->map_notascii = 0; +#endif + +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + if (dfa->is_utf8) + dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; + else + { + int i, j, ch; + + dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); + if (BE (dfa->sb_char == NULL, 0)) + return REG_ESPACE; + + /* Set the bits corresponding to single byte chars. */ + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + { + wint_t wch = __btowc (ch); + if (wch != WEOF) + dfa->sb_char[i] |= (bitset_word_t) 1 << j; +# ifndef _LIBC + if (isascii (ch) && wch != ch) + dfa->map_notascii = 1; +# endif + } + } + } +#endif + + if (BE (dfa->nodes == NULL || dfa->state_table == NULL, 0)) + return REG_ESPACE; + return REG_NOERROR; +} + +/* Initialize WORD_CHAR table, which indicate which character is + "word". In this case "word" means that it is the word construction + character used by some operators like "\<", "\>", etc. */ + +static void +internal_function +init_word_char (re_dfa_t *dfa) +{ + int i, j, ch; + dfa->word_ops_used = 1; + for (i = 0, ch = 0; i < BITSET_WORDS; ++i) + for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) + if (isalnum (ch) || ch == '_') + dfa->word_char[i] |= (bitset_word_t) 1 << j; +} + +/* Free the work area which are only used while compiling. */ + +static void +free_workarea_compile (regex_t *preg) +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + bin_tree_storage_t *storage, *next; + for (storage = dfa->str_tree_storage; storage; storage = next) + { + next = storage->next; + re_free (storage); + } + dfa->str_tree_storage = NULL; + dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; + dfa->str_tree = NULL; + re_free (dfa->org_indices); + dfa->org_indices = NULL; +} + +/* Create initial states for all contexts. */ + +static reg_errcode_t +create_initial_state (re_dfa_t *dfa) +{ + Idx first, i; + reg_errcode_t err; + re_node_set init_nodes; + + /* Initial states have the epsilon closure of the node which is + the first node of the regular expression. */ + first = dfa->str_tree->first->node_idx; + dfa->init_node = first; + err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); + if (BE (err != REG_NOERROR, 0)) + return err; + + /* The back-references which are in initial states can epsilon transit, + since in this case all of the subexpressions can be null. + Then we add epsilon closures of the nodes which are the next nodes of + the back-references. */ + if (dfa->nbackref > 0) + for (i = 0; i < init_nodes.nelem; ++i) + { + Idx node_idx = init_nodes.elems[i]; + re_token_type_t type = dfa->nodes[node_idx].type; + + Idx clexp_idx; + if (type != OP_BACK_REF) + continue; + for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) + { + re_token_t *clexp_node; + clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; + if (clexp_node->type == OP_CLOSE_SUBEXP + && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) + break; + } + if (clexp_idx == init_nodes.nelem) + continue; + + if (type == OP_BACK_REF) + { + Idx dest_idx = dfa->edests[node_idx].elems[0]; + if (!re_node_set_contains (&init_nodes, dest_idx)) + { + re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); + i = 0; + } + } + } + + /* It must be the first time to invoke acquire_state. */ + dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); + /* We don't check ERR here, since the initial state must not be NULL. */ + if (BE (dfa->init_state == NULL, 0)) + return err; + if (dfa->init_state->has_constraint) + { + dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, + CONTEXT_WORD); + dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, + CONTEXT_NEWLINE); + dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, + &init_nodes, + CONTEXT_NEWLINE + | CONTEXT_BEGBUF); + if (BE (dfa->init_state_word == NULL || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL, 0)) + return err; + } + else + dfa->init_state_word = dfa->init_state_nl + = dfa->init_state_begbuf = dfa->init_state; + + re_node_set_free (&init_nodes); + return REG_NOERROR; +} + +#ifdef RE_ENABLE_I18N +/* If it is possible to do searching in single byte encoding instead of UTF-8 + to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change + DFA nodes where needed. */ + +static void +optimize_utf8 (re_dfa_t *dfa) +{ + Idx node; + int i; + bool mb_chars = false; + bool has_period = false; + + for (node = 0; node < dfa->nodes_len; ++node) + switch (dfa->nodes[node].type) + { + case CHARACTER: + if (dfa->nodes[node].opr.c >= ASCII_CHARS) + mb_chars = true; + break; + case ANCHOR: + switch (dfa->nodes[node].opr.ctx_type) + { + case LINE_FIRST: + case LINE_LAST: + case BUF_FIRST: + case BUF_LAST: + break; + default: + /* Word anchors etc. cannot be handled. It's okay to test + opr.ctx_type since constraints (for all DFA nodes) are + created by ORing one or more opr.ctx_type values. */ + return; + } + break; + case OP_PERIOD: + has_period = true; + break; + case OP_BACK_REF: + case OP_ALT: + case END_OF_RE: + case OP_DUP_ASTERISK: + case OP_OPEN_SUBEXP: + case OP_CLOSE_SUBEXP: + break; + case COMPLEX_BRACKET: + return; + case SIMPLE_BRACKET: + /* Just double check. */ + { + int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 + ? 0 + : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); + for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) + { + if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) + return; + rshift = 0; + } + } + break; + default: + abort (); + } + + if (mb_chars || has_period) + for (node = 0; node < dfa->nodes_len; ++node) + { + if (dfa->nodes[node].type == CHARACTER + && dfa->nodes[node].opr.c >= ASCII_CHARS) + dfa->nodes[node].mb_partial = 0; + else if (dfa->nodes[node].type == OP_PERIOD) + dfa->nodes[node].type = OP_UTF8_PERIOD; + } + + /* The search can be in single byte locale. */ + dfa->mb_cur_max = 1; + dfa->is_utf8 = 0; + dfa->has_mb_node = dfa->nbackref > 0 || has_period; +} +#endif + +/* Analyze the structure tree, and calculate "first", "next", "edest", + "eclosure", and "inveclosure". */ + +static reg_errcode_t +analyze (regex_t *preg) +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + reg_errcode_t ret; + + /* Allocate arrays. */ + dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); + dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); + dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); + dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); + if (BE (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL + || dfa->eclosures == NULL, 0)) + return REG_ESPACE; + + dfa->subexp_map = re_malloc (Idx, preg->re_nsub); + if (dfa->subexp_map != NULL) + { + Idx i; + for (i = 0; i < preg->re_nsub; i++) + dfa->subexp_map[i] = i; + preorder (dfa->str_tree, optimize_subexps, dfa); + for (i = 0; i < preg->re_nsub; i++) + if (dfa->subexp_map[i] != i) + break; + if (i == preg->re_nsub) + { + free (dfa->subexp_map); + dfa->subexp_map = NULL; + } + } + + ret = postorder (dfa->str_tree, lower_subexps, preg); + if (BE (ret != REG_NOERROR, 0)) + return ret; + ret = postorder (dfa->str_tree, calc_first, dfa); + if (BE (ret != REG_NOERROR, 0)) + return ret; + preorder (dfa->str_tree, calc_next, dfa); + ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); + if (BE (ret != REG_NOERROR, 0)) + return ret; + ret = calc_eclosure (dfa); + if (BE (ret != REG_NOERROR, 0)) + return ret; + + /* We only need this during the prune_impossible_nodes pass in regexec.c; + skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ + if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) + || dfa->nbackref) + { + dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); + if (BE (dfa->inveclosures == NULL, 0)) + return REG_ESPACE; + ret = calc_inveclosure (dfa); + } + + return ret; +} + +/* Our parse trees are very unbalanced, so we cannot use a stack to + implement parse tree visits. Instead, we use parent pointers and + some hairy code in these two functions. */ +static reg_errcode_t +postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra) +{ + bin_tree_t *node, *prev; + + for (node = root; ; ) + { + /* Descend down the tree, preferably to the left (or to the right + if that's the only child). */ + while (node->left || node->right) + if (node->left) + node = node->left; + else + node = node->right; + + do + { + reg_errcode_t err = fn (extra, node); + if (BE (err != REG_NOERROR, 0)) + return err; + if (node->parent == NULL) + return REG_NOERROR; + prev = node; + node = node->parent; + } + /* Go up while we have a node that is reached from the right. */ + while (node->right == prev || node->right == NULL); + node = node->right; + } +} + +static reg_errcode_t +preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), + void *extra) +{ + bin_tree_t *node; + + for (node = root; ; ) + { + reg_errcode_t err = fn (extra, node); + if (BE (err != REG_NOERROR, 0)) + return err; + + /* Go to the left node, or up and to the right. */ + if (node->left) + node = node->left; + else + { + bin_tree_t *prev = NULL; + while (node->right == prev || node->right == NULL) + { + prev = node; + node = node->parent; + if (!node) + return REG_NOERROR; + } + node = node->right; + } + } +} + +/* Optimization pass: if a SUBEXP is entirely contained, strip it and tell + re_search_internal to map the inner one's opr.idx to this one's. Adjust + backreferences as well. Requires a preorder visit. */ +static reg_errcode_t +optimize_subexps (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + + if (node->token.type == OP_BACK_REF && dfa->subexp_map) + { + int idx = node->token.opr.idx; + node->token.opr.idx = dfa->subexp_map[idx]; + dfa->used_bkref_map |= 1 << node->token.opr.idx; + } + + else if (node->token.type == SUBEXP + && node->left && node->left->token.type == SUBEXP) + { + Idx other_idx = node->left->token.opr.idx; + + node->left = node->left->left; + if (node->left) + node->left->parent = node; + + dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; + if (other_idx < BITSET_WORD_BITS) + dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); + } + + return REG_NOERROR; +} + +/* Lowering pass: Turn each SUBEXP node into the appropriate concatenation + of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ +static reg_errcode_t +lower_subexps (void *extra, bin_tree_t *node) +{ + regex_t *preg = (regex_t *) extra; + reg_errcode_t err = REG_NOERROR; + + if (node->left && node->left->token.type == SUBEXP) + { + node->left = lower_subexp (&err, preg, node->left); + if (node->left) + node->left->parent = node; + } + if (node->right && node->right->token.type == SUBEXP) + { + node->right = lower_subexp (&err, preg, node->right); + if (node->right) + node->right->parent = node; + } + + return err; +} + +static bin_tree_t * +lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + bin_tree_t *body = node->left; + bin_tree_t *op, *cls, *tree1, *tree; + + if (preg->no_sub + /* We do not optimize empty subexpressions, because otherwise we may + have bad CONCAT nodes with NULL children. This is obviously not + very common, so we do not lose much. An example that triggers + this case is the sed "script" /\(\)/x. */ + && node->left != NULL + && (node->token.opr.idx >= BITSET_WORD_BITS + || !(dfa->used_bkref_map + & ((bitset_word_t) 1 << node->token.opr.idx)))) + return node->left; + + /* Convert the SUBEXP node to the concatenation of an + OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ + op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); + cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); + tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; + tree = create_tree (dfa, op, tree1, CONCAT); + if (BE (tree == NULL || tree1 == NULL || op == NULL || cls == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + + op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; + op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; + return tree; +} + +/* Pass 1 in building the NFA: compute FIRST and create unlinked automaton + nodes. Requires a postorder visit. */ +static reg_errcode_t +calc_first (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + if (node->token.type == CONCAT) + { + node->first = node->left->first; + node->node_idx = node->left->node_idx; + } + else + { + node->first = node; + node->node_idx = re_dfa_add_node (dfa, node->token); + if (BE (node->node_idx == REG_MISSING, 0)) + return REG_ESPACE; + if (node->token.type == ANCHOR) + dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; + } + return REG_NOERROR; +} + +/* Pass 2: compute NEXT on the tree. Preorder visit. */ +static reg_errcode_t +calc_next (void *extra, bin_tree_t *node) +{ + switch (node->token.type) + { + case OP_DUP_ASTERISK: + node->left->next = node; + break; + case CONCAT: + node->left->next = node->right->first; + node->right->next = node->next; + break; + default: + if (node->left) + node->left->next = node->next; + if (node->right) + node->right->next = node->next; + break; + } + return REG_NOERROR; +} + +/* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ +static reg_errcode_t +link_nfa_nodes (void *extra, bin_tree_t *node) +{ + re_dfa_t *dfa = (re_dfa_t *) extra; + Idx idx = node->node_idx; + reg_errcode_t err = REG_NOERROR; + + switch (node->token.type) + { + case CONCAT: + break; + + case END_OF_RE: + assert (node->next == NULL); + break; + + case OP_DUP_ASTERISK: + case OP_ALT: + { + Idx left, right; + dfa->has_plural_match = 1; + if (node->left != NULL) + left = node->left->first->node_idx; + else + left = node->next->node_idx; + if (node->right != NULL) + right = node->right->first->node_idx; + else + right = node->next->node_idx; + assert (REG_VALID_INDEX (left)); + assert (REG_VALID_INDEX (right)); + err = re_node_set_init_2 (dfa->edests + idx, left, right); + } + break; + + case ANCHOR: + case OP_OPEN_SUBEXP: + case OP_CLOSE_SUBEXP: + err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); + break; + + case OP_BACK_REF: + dfa->nexts[idx] = node->next->node_idx; + if (node->token.type == OP_BACK_REF) + re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); + break; + + default: + assert (!IS_EPSILON_NODE (node->token.type)); + dfa->nexts[idx] = node->next->node_idx; + break; + } + + return err; +} + +/* Duplicate the epsilon closure of the node ROOT_NODE. + Note that duplicated nodes have constraint INIT_CONSTRAINT in addition + to their own constraint. */ + +static reg_errcode_t +internal_function +duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, + Idx root_node, unsigned int init_constraint) +{ + Idx org_node, clone_node; + bool ok; + unsigned int constraint = init_constraint; + for (org_node = top_org_node, clone_node = top_clone_node;;) + { + Idx org_dest, clone_dest; + if (dfa->nodes[org_node].type == OP_BACK_REF) + { + /* If the back reference epsilon-transit, its destination must + also have the constraint. Then duplicate the epsilon closure + of the destination of the back reference, and store it in + edests of the back reference. */ + org_dest = dfa->nexts[org_node]; + re_node_set_empty (dfa->edests + clone_node); + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + dfa->nexts[clone_node] = dfa->nexts[org_node]; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + } + else if (dfa->edests[org_node].nelem == 0) + { + /* In case of the node can't epsilon-transit, don't duplicate the + destination and store the original destination as the + destination of the node. */ + dfa->nexts[clone_node] = dfa->nexts[org_node]; + break; + } + else if (dfa->edests[org_node].nelem == 1) + { + /* In case of the node can epsilon-transit, and it has only one + destination. */ + org_dest = dfa->edests[org_node].elems[0]; + re_node_set_empty (dfa->edests + clone_node); + clone_dest = search_duplicated_node (dfa, org_dest, constraint); + /* If the node is root_node itself, it means the epsilon closure + has a loop. Then tie it to the destination of the root_node. */ + if (org_node == root_node && clone_node != org_node) + { + ok = re_node_set_insert (dfa->edests + clone_node, org_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + break; + } + /* In case the node has another constraint, append it. */ + constraint |= dfa->nodes[org_node].constraint; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + } + else /* dfa->edests[org_node].nelem == 2 */ + { + /* In case of the node can epsilon-transit, and it has two + destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ + org_dest = dfa->edests[org_node].elems[0]; + re_node_set_empty (dfa->edests + clone_node); + /* Search for a duplicated node which satisfies the constraint. */ + clone_dest = search_duplicated_node (dfa, org_dest, constraint); + if (clone_dest == REG_MISSING) + { + /* There is no such duplicated node, create a new one. */ + reg_errcode_t err; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + err = duplicate_node_closure (dfa, org_dest, clone_dest, + root_node, constraint); + if (BE (err != REG_NOERROR, 0)) + return err; + } + else + { + /* There is a duplicated node which satisfy the constraint, + use it to avoid infinite loop. */ + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + } + + org_dest = dfa->edests[org_node].elems[1]; + clone_dest = duplicate_node (dfa, org_dest, constraint); + if (BE (clone_dest == REG_MISSING, 0)) + return REG_ESPACE; + ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (! ok, 0)) + return REG_ESPACE; + } + org_node = org_dest; + clone_node = clone_dest; + } + return REG_NOERROR; +} + +/* Search for a node which is duplicated from the node ORG_NODE, and + satisfies the constraint CONSTRAINT. */ + +static Idx +search_duplicated_node (const re_dfa_t *dfa, Idx org_node, + unsigned int constraint) +{ + Idx idx; + for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) + { + if (org_node == dfa->org_indices[idx] + && constraint == dfa->nodes[idx].constraint) + return idx; /* Found. */ + } + return REG_MISSING; /* Not found. */ +} + +/* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. + Return the index of the new node, or REG_MISSING if insufficient storage is + available. */ + +static Idx +duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) +{ + Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); + if (BE (dup_idx != REG_MISSING, 1)) + { + dfa->nodes[dup_idx].constraint = constraint; + dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; + dfa->nodes[dup_idx].duplicated = 1; + + /* Store the index of the original node. */ + dfa->org_indices[dup_idx] = org_idx; + } + return dup_idx; +} + +static reg_errcode_t +calc_inveclosure (re_dfa_t *dfa) +{ + Idx src, idx; + bool ok; + for (idx = 0; idx < dfa->nodes_len; ++idx) + re_node_set_init_empty (dfa->inveclosures + idx); + + for (src = 0; src < dfa->nodes_len; ++src) + { + Idx *elems = dfa->eclosures[src].elems; + for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) + { + ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); + if (BE (! ok, 0)) + return REG_ESPACE; + } + } + + return REG_NOERROR; +} + +/* Calculate "eclosure" for all the node in DFA. */ + +static reg_errcode_t +calc_eclosure (re_dfa_t *dfa) +{ + Idx node_idx; + bool incomplete; +#ifdef DEBUG + assert (dfa->nodes_len > 0); +#endif + incomplete = false; + /* For each nodes, calculate epsilon closure. */ + for (node_idx = 0; ; ++node_idx) + { + reg_errcode_t err; + re_node_set eclosure_elem; + if (node_idx == dfa->nodes_len) + { + if (!incomplete) + break; + incomplete = false; + node_idx = 0; + } + +#ifdef DEBUG + assert (dfa->eclosures[node_idx].nelem != REG_MISSING); +#endif + + /* If we have already calculated, skip it. */ + if (dfa->eclosures[node_idx].nelem != 0) + continue; + /* Calculate epsilon closure of `node_idx'. */ + err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); + if (BE (err != REG_NOERROR, 0)) + return err; + + if (dfa->eclosures[node_idx].nelem == 0) + { + incomplete = true; + re_node_set_free (&eclosure_elem); + } + } + return REG_NOERROR; +} + +/* Calculate epsilon closure of NODE. */ + +static reg_errcode_t +calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) +{ + reg_errcode_t err; + Idx i; + bool incomplete; + bool ok; + re_node_set eclosure; + incomplete = false; + err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); + if (BE (err != REG_NOERROR, 0)) + return err; + + /* This indicates that we are calculating this node now. + We reference this value to avoid infinite loop. */ + dfa->eclosures[node].nelem = REG_MISSING; + + /* If the current node has constraints, duplicate all nodes + since they must inherit the constraints. */ + if (dfa->nodes[node].constraint + && dfa->edests[node].nelem + && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) + { + err = duplicate_node_closure (dfa, node, node, node, + dfa->nodes[node].constraint); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + /* Expand each epsilon destination nodes. */ + if (IS_EPSILON_NODE(dfa->nodes[node].type)) + for (i = 0; i < dfa->edests[node].nelem; ++i) + { + re_node_set eclosure_elem; + Idx edest = dfa->edests[node].elems[i]; + /* If calculating the epsilon closure of `edest' is in progress, + return intermediate result. */ + if (dfa->eclosures[edest].nelem == REG_MISSING) + { + incomplete = true; + continue; + } + /* If we haven't calculated the epsilon closure of `edest' yet, + calculate now. Otherwise use calculated epsilon closure. */ + if (dfa->eclosures[edest].nelem == 0) + { + err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); + if (BE (err != REG_NOERROR, 0)) + return err; + } + else + eclosure_elem = dfa->eclosures[edest]; + /* Merge the epsilon closure of `edest'. */ + re_node_set_merge (&eclosure, &eclosure_elem); + /* If the epsilon closure of `edest' is incomplete, + the epsilon closure of this node is also incomplete. */ + if (dfa->eclosures[edest].nelem == 0) + { + incomplete = true; + re_node_set_free (&eclosure_elem); + } + } + + /* Epsilon closures include itself. */ + ok = re_node_set_insert (&eclosure, node); + if (BE (! ok, 0)) + return REG_ESPACE; + if (incomplete && !root) + dfa->eclosures[node].nelem = 0; + else + dfa->eclosures[node] = eclosure; + *new_set = eclosure; + return REG_NOERROR; +} + +/* Functions for token which are used in the parser. */ + +/* Fetch a token from INPUT. + We must not use this function inside bracket expressions. */ + +static void +internal_function +fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) +{ + re_string_skip_bytes (input, peek_token (result, input, syntax)); +} + +/* Peek a token from INPUT, and return the length of the token. + We must not use this function inside bracket expressions. */ + +static int +internal_function +peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) +{ + unsigned char c; + + if (re_string_eoi (input)) + { + token->type = END_OF_RE; + return 0; + } + + c = re_string_peek_byte (input, 0); + token->opr.c = c; + + token->word_char = 0; +#ifdef RE_ENABLE_I18N + token->mb_partial = 0; + if (input->mb_cur_max > 1 && + !re_string_first_byte (input, re_string_cur_idx (input))) + { + token->type = CHARACTER; + token->mb_partial = 1; + return 1; + } +#endif + if (c == '\\') + { + unsigned char c2; + if (re_string_cur_idx (input) + 1 >= re_string_length (input)) + { + token->type = BACK_SLASH; + return 1; + } + + c2 = re_string_peek_byte_case (input, 1); + token->opr.c = c2; + token->type = CHARACTER; +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc = re_string_wchar_at (input, + re_string_cur_idx (input) + 1); + token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; + } + else +#endif + token->word_char = IS_WORD_CHAR (c2) != 0; + + switch (c2) + { + case '|': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) + token->type = OP_ALT; + break; + case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + if (!(syntax & RE_NO_BK_REFS)) + { + token->type = OP_BACK_REF; + token->opr.idx = c2 - '1'; + } + break; + case '<': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_FIRST; + } + break; + case '>': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_LAST; + } + break; + case 'b': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = WORD_DELIM; + } + break; + case 'B': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = NOT_WORD_DELIM; + } + break; + case 'w': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_WORD; + break; + case 'W': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_NOTWORD; + break; + case 's': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_SPACE; + break; + case 'S': + if (!(syntax & RE_NO_GNU_OPS)) + token->type = OP_NOTSPACE; + break; + case '`': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = BUF_FIRST; + } + break; + case '\'': + if (!(syntax & RE_NO_GNU_OPS)) + { + token->type = ANCHOR; + token->opr.ctx_type = BUF_LAST; + } + break; + case '(': + if (!(syntax & RE_NO_BK_PARENS)) + token->type = OP_OPEN_SUBEXP; + break; + case ')': + if (!(syntax & RE_NO_BK_PARENS)) + token->type = OP_CLOSE_SUBEXP; + break; + case '+': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_PLUS; + break; + case '?': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_QUESTION; + break; + case '{': + if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) + token->type = OP_OPEN_DUP_NUM; + break; + case '}': + if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) + token->type = OP_CLOSE_DUP_NUM; + break; + default: + break; + } + return 2; + } + + token->type = CHARACTER; +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); + token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; + } + else +#endif + token->word_char = IS_WORD_CHAR (token->opr.c); + + switch (c) + { + case '\n': + if (syntax & RE_NEWLINE_ALT) + token->type = OP_ALT; + break; + case '|': + if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) + token->type = OP_ALT; + break; + case '*': + token->type = OP_DUP_ASTERISK; + break; + case '+': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_PLUS; + break; + case '?': + if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) + token->type = OP_DUP_QUESTION; + break; + case '{': + if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + token->type = OP_OPEN_DUP_NUM; + break; + case '}': + if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) + token->type = OP_CLOSE_DUP_NUM; + break; + case '(': + if (syntax & RE_NO_BK_PARENS) + token->type = OP_OPEN_SUBEXP; + break; + case ')': + if (syntax & RE_NO_BK_PARENS) + token->type = OP_CLOSE_SUBEXP; + break; + case '[': + token->type = OP_OPEN_BRACKET; + break; + case '.': + token->type = OP_PERIOD; + break; + case '^': + if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) && + re_string_cur_idx (input) != 0) + { + char prev = re_string_peek_byte (input, -1); + if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') + break; + } + token->type = ANCHOR; + token->opr.ctx_type = LINE_FIRST; + break; + case '$': + if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && + re_string_cur_idx (input) + 1 != re_string_length (input)) + { + re_token_t next; + re_string_skip_bytes (input, 1); + peek_token (&next, input, syntax); + re_string_skip_bytes (input, -1); + if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) + break; + } + token->type = ANCHOR; + token->opr.ctx_type = LINE_LAST; + break; + default: + break; + } + return 1; +} + +/* Peek a token from INPUT, and return the length of the token. + We must not use this function out of bracket expressions. */ + +static int +internal_function +peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) +{ + unsigned char c; + if (re_string_eoi (input)) + { + token->type = END_OF_RE; + return 0; + } + c = re_string_peek_byte (input, 0); + token->opr.c = c; + +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1 && + !re_string_first_byte (input, re_string_cur_idx (input))) + { + token->type = CHARACTER; + return 1; + } +#endif /* RE_ENABLE_I18N */ + + if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) + && re_string_cur_idx (input) + 1 < re_string_length (input)) + { + /* In this case, '\' escape a character. */ + unsigned char c2; + re_string_skip_bytes (input, 1); + c2 = re_string_peek_byte (input, 0); + token->opr.c = c2; + token->type = CHARACTER; + return 1; + } + if (c == '[') /* '[' is a special char in a bracket exps. */ + { + unsigned char c2; + int token_len; + if (re_string_cur_idx (input) + 1 < re_string_length (input)) + c2 = re_string_peek_byte (input, 1); + else + c2 = 0; + token->opr.c = c2; + token_len = 2; + switch (c2) + { + case '.': + token->type = OP_OPEN_COLL_ELEM; + break; + case '=': + token->type = OP_OPEN_EQUIV_CLASS; + break; + case ':': + if (syntax & RE_CHAR_CLASSES) + { + token->type = OP_OPEN_CHAR_CLASS; + break; + } + /* else fall through. */ + default: + token->type = CHARACTER; + token->opr.c = c; + token_len = 1; + break; + } + return token_len; + } + switch (c) + { + case '-': + token->type = OP_CHARSET_RANGE; + break; + case ']': + token->type = OP_CLOSE_BRACKET; + break; + case '^': + token->type = OP_NON_MATCH_LIST; + break; + default: + token->type = CHARACTER; + } + return 1; +} + +/* Functions for parser. */ + +/* Entry point of the parser. + Parse the regular expression REGEXP and return the structure tree. + If an error is occured, ERR is set by error code, and return NULL. + This function build the following tree, from regular expression : + CAT + / \ + / \ + EOR + + CAT means concatenation. + EOR means end of regular expression. */ + +static bin_tree_t * +parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, + reg_errcode_t *err) +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + bin_tree_t *tree, *eor, *root; + re_token_t current_token; + dfa->syntax = syntax; + fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); + tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + eor = create_tree (dfa, NULL, NULL, END_OF_RE); + if (tree != NULL) + root = create_tree (dfa, tree, eor, CONCAT); + else + root = eor; + if (BE (eor == NULL || root == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + return root; +} + +/* This function build the following tree, from regular expression + |: + ALT + / \ + / \ + + + ALT means alternative, which represents the operator `|'. */ + +static bin_tree_t * +parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + bin_tree_t *tree, *branch = NULL; + tree = parse_branch (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + + while (token->type == OP_ALT) + { + fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); + if (token->type != OP_ALT && token->type != END_OF_RE + && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) + { + branch = parse_branch (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && branch == NULL, 0)) + return NULL; + } + else + branch = NULL; + tree = create_tree (dfa, tree, branch, OP_ALT); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + return tree; +} + +/* This function build the following tree, from regular expression + : + CAT + / \ + / \ + + + CAT means concatenation. */ + +static bin_tree_t * +parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + bin_tree_t *tree, *expr; + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + tree = parse_expression (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + + while (token->type != OP_ALT && token->type != END_OF_RE + && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) + { + expr = parse_expression (regexp, preg, token, syntax, nest, err); + if (BE (*err != REG_NOERROR && expr == NULL, 0)) + { + return NULL; + } + if (tree != NULL && expr != NULL) + { + tree = create_tree (dfa, tree, expr, CONCAT); + if (tree == NULL) + { + *err = REG_ESPACE; + return NULL; + } + } + else if (tree == NULL) + tree = expr; + /* Otherwise expr == NULL, we don't need to create new tree. */ + } + return tree; +} + +/* This function build the following tree, from regular expression a*: + * + | + a +*/ + +static bin_tree_t * +parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + bin_tree_t *tree; + switch (token->type) + { + case CHARACTER: + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + while (!re_string_eoi (regexp) + && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) + { + bin_tree_t *mbc_remain; + fetch_token (token, regexp, syntax); + mbc_remain = create_token_tree (dfa, NULL, NULL, token); + tree = create_tree (dfa, tree, mbc_remain, CONCAT); + if (BE (mbc_remain == NULL || tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + } +#endif + break; + case OP_OPEN_SUBEXP: + tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_OPEN_BRACKET: + tree = parse_bracket_exp (regexp, dfa, token, syntax, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_BACK_REF: + if (!BE (dfa->completed_bkref_map & (1 << token->opr.idx), 1)) + { + *err = REG_ESUBREG; + return NULL; + } + dfa->used_bkref_map |= 1 << token->opr.idx; + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + ++dfa->nbackref; + dfa->has_mb_node = 1; + break; + case OP_OPEN_DUP_NUM: + if (syntax & RE_CONTEXT_INVALID_DUP) + { + *err = REG_BADRPT; + return NULL; + } + /* FALLTHROUGH */ + case OP_DUP_ASTERISK: + case OP_DUP_PLUS: + case OP_DUP_QUESTION: + if (syntax & RE_CONTEXT_INVALID_OPS) + { + *err = REG_BADRPT; + return NULL; + } + else if (syntax & RE_CONTEXT_INDEP_OPS) + { + fetch_token (token, regexp, syntax); + return parse_expression (regexp, preg, token, syntax, nest, err); + } + /* else fall through */ + case OP_CLOSE_SUBEXP: + if ((token->type == OP_CLOSE_SUBEXP) && + !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) + { + *err = REG_ERPAREN; + return NULL; + } + /* else fall through */ + case OP_CLOSE_DUP_NUM: + /* We treat it as a normal character. */ + + /* Then we can these characters as normal characters. */ + token->type = CHARACTER; + /* mb_partial and word_char bits should be initialized already + by peek_token. */ + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + break; + case ANCHOR: + if ((token->opr.ctx_type + & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) + && dfa->word_ops_used == 0) + init_word_char (dfa); + if (token->opr.ctx_type == WORD_DELIM + || token->opr.ctx_type == NOT_WORD_DELIM) + { + bin_tree_t *tree_first, *tree_last; + if (token->opr.ctx_type == WORD_DELIM) + { + token->opr.ctx_type = WORD_FIRST; + tree_first = create_token_tree (dfa, NULL, NULL, token); + token->opr.ctx_type = WORD_LAST; + } + else + { + token->opr.ctx_type = INSIDE_WORD; + tree_first = create_token_tree (dfa, NULL, NULL, token); + token->opr.ctx_type = INSIDE_NOTWORD; + } + tree_last = create_token_tree (dfa, NULL, NULL, token); + tree = create_tree (dfa, tree_first, tree_last, OP_ALT); + if (BE (tree_first == NULL || tree_last == NULL || tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + else + { + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + } + /* We must return here, since ANCHORs can't be followed + by repetition operators. + eg. RE"^*" is invalid or "", + it must not be "". */ + fetch_token (token, regexp, syntax); + return tree; + case OP_PERIOD: + tree = create_token_tree (dfa, NULL, NULL, token); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + if (dfa->mb_cur_max > 1) + dfa->has_mb_node = 1; + break; + case OP_WORD: + case OP_NOTWORD: + tree = build_charclass_op (dfa, regexp->trans, + (const unsigned char *) "alnum", + (const unsigned char *) "_", + token->type == OP_NOTWORD, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_SPACE: + case OP_NOTSPACE: + tree = build_charclass_op (dfa, regexp->trans, + (const unsigned char *) "space", + (const unsigned char *) "", + token->type == OP_NOTSPACE, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + break; + case OP_ALT: + case END_OF_RE: + return NULL; + case BACK_SLASH: + *err = REG_EESCAPE; + return NULL; + default: + /* Must not happen? */ +#ifdef DEBUG + assert (0); +#endif + return NULL; + } + fetch_token (token, regexp, syntax); + + while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS + || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) + { + tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); + if (BE (*err != REG_NOERROR && tree == NULL, 0)) + return NULL; + /* In BRE consecutive duplications are not allowed. */ + if ((syntax & RE_CONTEXT_INVALID_DUP) + && (token->type == OP_DUP_ASTERISK + || token->type == OP_OPEN_DUP_NUM)) + { + *err = REG_BADRPT; + return NULL; + } + } + + return tree; +} + +/* This function build the following tree, from regular expression + (): + SUBEXP + | + +*/ + +static bin_tree_t * +parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, + reg_syntax_t syntax, Idx nest, reg_errcode_t *err) +{ + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; + bin_tree_t *tree; + size_t cur_nsub; + cur_nsub = preg->re_nsub++; + + fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); + + /* The subexpression may be a null string. */ + if (token->type == OP_CLOSE_SUBEXP) + tree = NULL; + else + { + tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); + if (BE (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP, 0)) + *err = REG_EPAREN; + if (BE (*err != REG_NOERROR, 0)) + return NULL; + } + + if (cur_nsub <= '9' - '1') + dfa->completed_bkref_map |= 1 << cur_nsub; + + tree = create_tree (dfa, tree, NULL, SUBEXP); + if (BE (tree == NULL, 0)) + { + *err = REG_ESPACE; + return NULL; + } + tree->token.opr.idx = cur_nsub; + return tree; +} + +/* This function parse repetition operators like "*", "+", "{1,3}" etc. */ + +static bin_tree_t * +parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, + re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) +{ + bin_tree_t *tree = NULL, *old_tree = NULL; + Idx i, start, end, start_idx = re_string_cur_idx (regexp); + re_token_t start_token = *token; + + if (token->type == OP_OPEN_DUP_NUM) + { + end = 0; + start = fetch_number (regexp, token, syntax); + if (start == REG_MISSING) + { + if (token->type == CHARACTER && token->opr.c == ',') + start = 0; /* We treat "{,m}" as "{0,m}". */ + else + { + *err = REG_BADBR; /* {} is invalid. */ + return NULL; + } + } + if (BE (start != REG_ERROR, 1)) + { + /* We treat "{n}" as "{n,n}". */ + end = ((token->type == OP_CLOSE_DUP_NUM) ? start + : ((token->type == CHARACTER && token->opr.c == ',') + ? fetch_number (regexp, token, syntax) : REG_ERROR)); + } + if (BE (start == REG_ERROR || end == REG_ERROR, 0)) + { + /* Invalid sequence. */ + if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0)) + { + if (token->type == END_OF_RE) + *err = REG_EBRACE; + else + *err = REG_BADBR; + + return NULL; + } + + /* If the syntax bit is set, rollback. */ + re_string_set_index (regexp, start_idx); + *token = start_token; + token->type = CHARACTER; + /* mb_partial and word_char bits should be already initialized by + peek_token. */ + return elem; + } + + if (BE (end != REG_MISSING && start > end, 0)) + { + /* First number greater than second. */ + *err = REG_BADBR; + return NULL; + } + } + else + { + start = (token->type == OP_DUP_PLUS) ? 1 : 0; + end = (token->type == OP_DUP_QUESTION) ? 1 : REG_MISSING; + } + + fetch_token (token, regexp, syntax); + + if (BE (elem == NULL, 0)) + return NULL; + if (BE (start == 0 && end == 0, 0)) + { + postorder (elem, free_tree, NULL); + return NULL; + } + + /* Extract "{n,m}" to "...{0,}". */ + if (BE (start > 0, 0)) + { + tree = elem; + for (i = 2; i <= start; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (BE (elem == NULL || tree == NULL, 0)) + goto parse_dup_op_espace; + } + + if (start == end) + return tree; + + /* Duplicate ELEM before it is marked optional. */ + elem = duplicate_tree (elem, dfa); + old_tree = tree; + } + else + old_tree = NULL; + + if (elem->token.type == SUBEXP) + postorder (elem, mark_opt_subexp, (void *) (long) elem->token.opr.idx); + + tree = create_tree (dfa, elem, NULL, + (end == REG_MISSING ? OP_DUP_ASTERISK : OP_ALT)); + if (BE (tree == NULL, 0)) + goto parse_dup_op_espace; + + /* This loop is actually executed only when end != REG_MISSING, + to rewrite {0,n} as ((...?)?)?... We have + already created the start+1-th copy. */ + if ((Idx) -1 < 0 || end != REG_MISSING) + for (i = start + 2; i <= end; ++i) + { + elem = duplicate_tree (elem, dfa); + tree = create_tree (dfa, tree, elem, CONCAT); + if (BE (elem == NULL || tree == NULL, 0)) + goto parse_dup_op_espace; + + tree = create_tree (dfa, tree, NULL, OP_ALT); + if (BE (tree == NULL, 0)) + goto parse_dup_op_espace; + } + + if (old_tree) + tree = create_tree (dfa, old_tree, tree, CONCAT); + + return tree; + + parse_dup_op_espace: + *err = REG_ESPACE; + return NULL; +} + +/* Size of the names for collating symbol/equivalence_class/character_class. + I'm not sure, but maybe enough. */ +#define BRACKET_NAME_BUF_SIZE 32 + +#ifndef _LIBC + /* Local function for parse_bracket_exp only used in case of NOT _LIBC. + Build the range expression which starts from START_ELEM, and ends + at END_ELEM. The result are written to MBCSET and SBCSET. + RANGE_ALLOC is the allocated size of mbcset->range_starts, and + mbcset->range_ends, is a pointer argument sinse we may + update it. */ + +static reg_errcode_t +internal_function +# ifdef RE_ENABLE_I18N +build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, + bracket_elem_t *start_elem, bracket_elem_t *end_elem) +# else /* not RE_ENABLE_I18N */ +build_range_exp (bitset_t sbcset, bracket_elem_t *start_elem, + bracket_elem_t *end_elem) +# endif /* not RE_ENABLE_I18N */ +{ + unsigned int start_ch, end_ch; + /* Equivalence Classes and Character Classes can't be a range start/end. */ + if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, + 0)) + return REG_ERANGE; + + /* We can handle no multi character collating elements without libc + support. */ + if (BE ((start_elem->type == COLL_SYM + && strlen ((char *) start_elem->opr.name) > 1) + || (end_elem->type == COLL_SYM + && strlen ((char *) end_elem->opr.name) > 1), 0)) + return REG_ECOLLATE; + +# ifdef RE_ENABLE_I18N + { + wchar_t wc; + wint_t start_wc; + wint_t end_wc; + wchar_t cmp_buf[6] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'}; + + start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch + : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] + : 0)); + end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch + : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] + : 0)); + start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) + ? __btowc (start_ch) : start_elem->opr.wch); + end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) + ? __btowc (end_ch) : end_elem->opr.wch); + if (start_wc == WEOF || end_wc == WEOF) + return REG_ECOLLATE; + cmp_buf[0] = start_wc; + cmp_buf[4] = end_wc; + if (wcscoll (cmp_buf, cmp_buf + 4) > 0) + return REG_ERANGE; + + /* Got valid collation sequence values, add them as a new entry. + However, for !_LIBC we have no collation elements: if the + character set is single byte, the single byte character set + that we build below suffices. parse_bracket_exp passes + no MBCSET if dfa->mb_cur_max == 1. */ + if (mbcset) + { + /* Check the space of the arrays. */ + if (BE (*range_alloc == mbcset->nranges, 0)) + { + /* There is not enough space, need realloc. */ + wchar_t *new_array_start, *new_array_end; + Idx new_nranges; + + /* +1 in case of mbcset->nranges is 0. */ + new_nranges = 2 * mbcset->nranges + 1; + /* Use realloc since mbcset->range_starts and mbcset->range_ends + are NULL if *range_alloc == 0. */ + new_array_start = re_realloc (mbcset->range_starts, wchar_t, + new_nranges); + new_array_end = re_realloc (mbcset->range_ends, wchar_t, + new_nranges); + + if (BE (new_array_start == NULL || new_array_end == NULL, 0)) + return REG_ESPACE; + + mbcset->range_starts = new_array_start; + mbcset->range_ends = new_array_end; + *range_alloc = new_nranges; + } + + mbcset->range_starts[mbcset->nranges] = start_wc; + mbcset->range_ends[mbcset->nranges++] = end_wc; + } + + /* Build the table for single byte characters. */ + for (wc = 0; wc < SBC_MAX; ++wc) + { + cmp_buf[2] = wc; + if (wcscoll (cmp_buf, cmp_buf + 2) <= 0 + && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0) + bitset_set (sbcset, wc); + } + } +# else /* not RE_ENABLE_I18N */ + { + unsigned int ch; + start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch + : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] + : 0)); + end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch + : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] + : 0)); + if (start_ch > end_ch) + return REG_ERANGE; + /* Build the table for single byte characters. */ + for (ch = 0; ch < SBC_MAX; ++ch) + if (start_ch <= ch && ch <= end_ch) + bitset_set (sbcset, ch); + } +# endif /* not RE_ENABLE_I18N */ + return REG_NOERROR; +} +#endif /* not _LIBC */ + +#ifndef _LIBC +/* Helper function for parse_bracket_exp only used in case of NOT _LIBC.. + Build the collating element which is represented by NAME. + The result are written to MBCSET and SBCSET. + COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a + pointer argument since we may update it. */ + +static reg_errcode_t +internal_function +build_collating_symbol (bitset_t sbcset, +# ifdef RE_ENABLE_I18N + re_charset_t *mbcset, Idx *coll_sym_alloc, +# endif + const unsigned char *name) +{ + size_t name_len = strlen ((const char *) name); + if (BE (name_len != 1, 0)) + return REG_ECOLLATE; + else + { + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } +} +#endif /* not _LIBC */ + +/* This function parse bracket expression like "[abc]", "[a-c]", + "[[.a-a.]]" etc. */ + +static bin_tree_t * +parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, + reg_syntax_t syntax, reg_errcode_t *err) +{ +#ifdef _LIBC + const unsigned char *collseqmb; + const char *collseqwc; + uint32_t nrules; + int32_t table_size; + const int32_t *symb_table; + const unsigned char *extra; + + /* Local function for parse_bracket_exp used in _LIBC environement. + Seek the collating symbol entry correspondings to NAME. + Return the index of the symbol in the SYMB_TABLE. */ + + auto inline int32_t + __attribute ((always_inline)) + seek_collating_symbol_entry (name, name_len) + const unsigned char *name; + size_t name_len; + { + int32_t hash = elem_hash ((const char *) name, name_len); + int32_t elem = hash % table_size; + if (symb_table[2 * elem] != 0) + { + int32_t second = hash % (table_size - 2) + 1; + + do + { + /* First compare the hashing value. */ + if (symb_table[2 * elem] == hash + /* Compare the length of the name. */ + && name_len == extra[symb_table[2 * elem + 1]] + /* Compare the name. */ + && memcmp (name, &extra[symb_table[2 * elem + 1] + 1], + name_len) == 0) + { + /* Yep, this is the entry. */ + break; + } + + /* Next entry. */ + elem += second; + } + while (symb_table[2 * elem] != 0); + } + return elem; + } + + /* Local function for parse_bracket_exp used in _LIBC environement. + Look up the collation sequence value of BR_ELEM. + Return the value if succeeded, UINT_MAX otherwise. */ + + auto inline unsigned int + __attribute ((always_inline)) + lookup_collation_sequence_value (br_elem) + bracket_elem_t *br_elem; + { + if (br_elem->type == SB_CHAR) + { + /* + if (MB_CUR_MAX == 1) + */ + if (nrules == 0) + return collseqmb[br_elem->opr.ch]; + else + { + wint_t wc = __btowc (br_elem->opr.ch); + return __collseq_table_lookup (collseqwc, wc); + } + } + else if (br_elem->type == MB_CHAR) + { + return __collseq_table_lookup (collseqwc, br_elem->opr.wch); + } + else if (br_elem->type == COLL_SYM) + { + size_t sym_name_len = strlen ((char *) br_elem->opr.name); + if (nrules != 0) + { + int32_t elem, idx; + elem = seek_collating_symbol_entry (br_elem->opr.name, + sym_name_len); + if (symb_table[2 * elem] != 0) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + /* Skip the byte sequence of the collating element. */ + idx += 1 + extra[idx]; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + /* Skip the multibyte collation sequence value. */ + idx += sizeof (unsigned int); + /* Skip the wide char sequence of the collating element. */ + idx += sizeof (unsigned int) * + (1 + *(unsigned int *) (extra + idx)); + /* Return the collation sequence value. */ + return *(unsigned int *) (extra + idx); + } + else if (symb_table[2 * elem] == 0 && sym_name_len == 1) + { + /* No valid character. Match it as a single byte + character. */ + return collseqmb[br_elem->opr.name[0]]; + } + } + else if (sym_name_len == 1) + return collseqmb[br_elem->opr.name[0]]; + } + return UINT_MAX; + } + + /* Local function for parse_bracket_exp used in _LIBC environement. + Build the range expression which starts from START_ELEM, and ends + at END_ELEM. The result are written to MBCSET and SBCSET. + RANGE_ALLOC is the allocated size of mbcset->range_starts, and + mbcset->range_ends, is a pointer argument sinse we may + update it. */ + + auto inline reg_errcode_t + __attribute ((always_inline)) + build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem) + re_charset_t *mbcset; + Idx *range_alloc; + bitset_t sbcset; + bracket_elem_t *start_elem, *end_elem; + { + unsigned int ch; + uint32_t start_collseq; + uint32_t end_collseq; + + /* Equivalence Classes and Character Classes can't be a range + start/end. */ + if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS + || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, + 0)) + return REG_ERANGE; + + start_collseq = lookup_collation_sequence_value (start_elem); + end_collseq = lookup_collation_sequence_value (end_elem); + /* Check start/end collation sequence values. */ + if (BE (start_collseq == UINT_MAX || end_collseq == UINT_MAX, 0)) + return REG_ECOLLATE; + if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq, 0)) + return REG_ERANGE; + + /* Got valid collation sequence values, add them as a new entry. + However, if we have no collation elements, and the character set + is single byte, the single byte character set that we + build below suffices. */ + if (nrules > 0 || dfa->mb_cur_max > 1) + { + /* Check the space of the arrays. */ + if (BE (*range_alloc == mbcset->nranges, 0)) + { + /* There is not enough space, need realloc. */ + uint32_t *new_array_start; + uint32_t *new_array_end; + Idx new_nranges; + + /* +1 in case of mbcset->nranges is 0. */ + new_nranges = 2 * mbcset->nranges + 1; + new_array_start = re_realloc (mbcset->range_starts, uint32_t, + new_nranges); + new_array_end = re_realloc (mbcset->range_ends, uint32_t, + new_nranges); + + if (BE (new_array_start == NULL || new_array_end == NULL, 0)) + return REG_ESPACE; + + mbcset->range_starts = new_array_start; + mbcset->range_ends = new_array_end; + *range_alloc = new_nranges; + } + + mbcset->range_starts[mbcset->nranges] = start_collseq; + mbcset->range_ends[mbcset->nranges++] = end_collseq; + } + + /* Build the table for single byte characters. */ + for (ch = 0; ch < SBC_MAX; ch++) + { + uint32_t ch_collseq; + /* + if (MB_CUR_MAX == 1) + */ + if (nrules == 0) + ch_collseq = collseqmb[ch]; + else + ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); + if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) + bitset_set (sbcset, ch); + } + return REG_NOERROR; + } + + /* Local function for parse_bracket_exp used in _LIBC environement. + Build the collating element which is represented by NAME. + The result are written to MBCSET and SBCSET. + COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a + pointer argument sinse we may update it. */ + + auto inline reg_errcode_t + __attribute ((always_inline)) + build_collating_symbol (sbcset, mbcset, coll_sym_alloc, name) + re_charset_t *mbcset; + Idx *coll_sym_alloc; + bitset_t sbcset; + const unsigned char *name; + { + int32_t elem, idx; + size_t name_len = strlen ((const char *) name); + if (nrules != 0) + { + elem = seek_collating_symbol_entry (name, name_len); + if (symb_table[2 * elem] != 0) + { + /* We found the entry. */ + idx = symb_table[2 * elem + 1]; + /* Skip the name of collating element name. */ + idx += 1 + extra[idx]; + } + else if (symb_table[2 * elem] == 0 && name_len == 1) + { + /* No valid character, treat it as a normal + character. */ + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } + else + return REG_ECOLLATE; + + /* Got valid collation sequence, add it as a new entry. */ + /* Check the space of the arrays. */ + if (BE (*coll_sym_alloc == mbcset->ncoll_syms, 0)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->ncoll_syms is 0. */ + Idx new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; + /* Use realloc since mbcset->coll_syms is NULL + if *alloc == 0. */ + int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, + new_coll_sym_alloc); + if (BE (new_coll_syms == NULL, 0)) + return REG_ESPACE; + mbcset->coll_syms = new_coll_syms; + *coll_sym_alloc = new_coll_sym_alloc; + } + mbcset->coll_syms[mbcset->ncoll_syms++] = idx; + return REG_NOERROR; + } + else + { + if (BE (name_len != 1, 0)) + return REG_ECOLLATE; + else + { + bitset_set (sbcset, name[0]); + return REG_NOERROR; + } + } + } +#endif + + re_token_t br_token; + re_bitset_ptr_t sbcset; +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; + Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; + Idx equiv_class_alloc = 0, char_class_alloc = 0; +#endif /* not RE_ENABLE_I18N */ + bool non_match = false; + bin_tree_t *work_tree; + int token_len; + bool first_round = true; +#ifdef _LIBC + collseqmb = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules) + { + /* + if (MB_CUR_MAX > 1) + */ + collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); + table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); + symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_TABLEMB); + extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_SYMB_EXTRAMB); + } +#endif + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); +#ifdef RE_ENABLE_I18N + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); +#endif /* RE_ENABLE_I18N */ +#ifdef RE_ENABLE_I18N + if (BE (sbcset == NULL || mbcset == NULL, 0)) +#else + if (BE (sbcset == NULL, 0)) +#endif /* RE_ENABLE_I18N */ + { + *err = REG_ESPACE; + return NULL; + } + + token_len = peek_token_bracket (token, regexp, syntax); + if (BE (token->type == END_OF_RE, 0)) + { + *err = REG_BADPAT; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_NON_MATCH_LIST) + { +#ifdef RE_ENABLE_I18N + mbcset->non_match = 1; +#endif /* not RE_ENABLE_I18N */ + non_match = true; + if (syntax & RE_HAT_LISTS_NOT_NEWLINE) + bitset_set (sbcset, '\n'); + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + token_len = peek_token_bracket (token, regexp, syntax); + if (BE (token->type == END_OF_RE, 0)) + { + *err = REG_BADPAT; + goto parse_bracket_exp_free_return; + } + } + + /* We treat the first ']' as a normal character. */ + if (token->type == OP_CLOSE_BRACKET) + token->type = CHARACTER; + + while (1) + { + bracket_elem_t start_elem, end_elem; + unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; + unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; + reg_errcode_t ret; + int token_len2 = 0; + bool is_range_exp = false; + re_token_t token2; + + start_elem.opr.name = start_name_buf; + ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, + syntax, first_round); + if (BE (ret != REG_NOERROR, 0)) + { + *err = ret; + goto parse_bracket_exp_free_return; + } + first_round = false; + + /* Get information about the next token. We need it in any case. */ + token_len = peek_token_bracket (token, regexp, syntax); + + /* Do not check for ranges if we know they are not allowed. */ + if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) + { + if (BE (token->type == END_OF_RE, 0)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_CHARSET_RANGE) + { + re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ + token_len2 = peek_token_bracket (&token2, regexp, syntax); + if (BE (token2.type == END_OF_RE, 0)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token2.type == OP_CLOSE_BRACKET) + { + /* We treat the last '-' as a normal character. */ + re_string_skip_bytes (regexp, -token_len); + token->type = CHARACTER; + } + else + is_range_exp = true; + } + } + + if (is_range_exp == true) + { + end_elem.opr.name = end_name_buf; + ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, + dfa, syntax, true); + if (BE (ret != REG_NOERROR, 0)) + { + *err = ret; + goto parse_bracket_exp_free_return; + } + + token_len = peek_token_bracket (token, regexp, syntax); + +#ifdef _LIBC + *err = build_range_exp (sbcset, mbcset, &range_alloc, + &start_elem, &end_elem); +#else +# ifdef RE_ENABLE_I18N + *err = build_range_exp (sbcset, + dfa->mb_cur_max > 1 ? mbcset : NULL, + &range_alloc, &start_elem, &end_elem); +# else + *err = build_range_exp (sbcset, &start_elem, &end_elem); +# endif +#endif /* RE_ENABLE_I18N */ + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + } + else + { + switch (start_elem.type) + { + case SB_CHAR: + bitset_set (sbcset, start_elem.opr.ch); + break; +#ifdef RE_ENABLE_I18N + case MB_CHAR: + /* Check whether the array has enough space. */ + if (BE (mbchar_alloc == mbcset->nmbchars, 0)) + { + wchar_t *new_mbchars; + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nmbchars is 0. */ + mbchar_alloc = 2 * mbcset->nmbchars + 1; + /* Use realloc since array is NULL if *alloc == 0. */ + new_mbchars = re_realloc (mbcset->mbchars, wchar_t, + mbchar_alloc); + if (BE (new_mbchars == NULL, 0)) + goto parse_bracket_exp_espace; + mbcset->mbchars = new_mbchars; + } + mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; + break; +#endif /* RE_ENABLE_I18N */ + case EQUIV_CLASS: + *err = build_equiv_class (sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &equiv_class_alloc, +#endif /* RE_ENABLE_I18N */ + start_elem.opr.name); + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + break; + case COLL_SYM: + *err = build_collating_symbol (sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &coll_sym_alloc, +#endif /* RE_ENABLE_I18N */ + start_elem.opr.name); + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + break; + case CHAR_CLASS: + *err = build_charclass (regexp->trans, sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &char_class_alloc, +#endif /* RE_ENABLE_I18N */ + start_elem.opr.name, syntax); + if (BE (*err != REG_NOERROR, 0)) + goto parse_bracket_exp_free_return; + break; + default: + assert (0); + break; + } + } + if (BE (token->type == END_OF_RE, 0)) + { + *err = REG_EBRACK; + goto parse_bracket_exp_free_return; + } + if (token->type == OP_CLOSE_BRACKET) + break; + } + + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + + /* If it is non-matching list. */ + if (non_match) + bitset_not (sbcset); + +#ifdef RE_ENABLE_I18N + /* Ensure only single byte characters are set. */ + if (dfa->mb_cur_max > 1) + bitset_mask (sbcset, dfa->sb_char); + + if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes + || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes + || mbcset->non_match))) + { + bin_tree_t *mbc_tree; + int sbc_idx; + /* Build a tree for complex bracket. */ + dfa->has_mb_node = 1; + br_token.type = COMPLEX_BRACKET; + br_token.opr.mbcset = mbcset; + mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (mbc_tree == NULL, 0)) + goto parse_bracket_exp_espace; + for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) + if (sbcset[sbc_idx]) + break; + /* If there are no bits set in sbcset, there is no point + of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ + if (sbc_idx < BITSET_WORDS) + { + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + work_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (work_tree == NULL, 0)) + goto parse_bracket_exp_espace; + + /* Then join them by ALT node. */ + work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); + if (BE (work_tree == NULL, 0)) + goto parse_bracket_exp_espace; + } + else + { + re_free (sbcset); + work_tree = mbc_tree; + } + } + else +#endif /* not RE_ENABLE_I18N */ + { +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + work_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (work_tree == NULL, 0)) + goto parse_bracket_exp_espace; + } + return work_tree; + + parse_bracket_exp_espace: + *err = REG_ESPACE; + parse_bracket_exp_free_return: + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + return NULL; +} + +/* Parse an element in the bracket expression. */ + +static reg_errcode_t +parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, + re_token_t *token, int token_len, re_dfa_t *dfa, + reg_syntax_t syntax, bool accept_hyphen) +{ +#ifdef RE_ENABLE_I18N + int cur_char_size; + cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); + if (cur_char_size > 1) + { + elem->type = MB_CHAR; + elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); + re_string_skip_bytes (regexp, cur_char_size); + return REG_NOERROR; + } +#endif /* RE_ENABLE_I18N */ + re_string_skip_bytes (regexp, token_len); /* Skip a token. */ + if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS + || token->type == OP_OPEN_EQUIV_CLASS) + return parse_bracket_symbol (elem, regexp, token); + if (BE (token->type == OP_CHARSET_RANGE, 0) && !accept_hyphen) + { + /* A '-' must only appear as anything but a range indicator before + the closing bracket. Everything else is an error. */ + re_token_t token2; + (void) peek_token_bracket (&token2, regexp, syntax); + if (token2.type != OP_CLOSE_BRACKET) + /* The actual error value is not standardized since this whole + case is undefined. But ERANGE makes good sense. */ + return REG_ERANGE; + } + elem->type = SB_CHAR; + elem->opr.ch = token->opr.c; + return REG_NOERROR; +} + +/* Parse a bracket symbol in the bracket expression. Bracket symbols are + such as [::], [..], and + [==]. */ + +static reg_errcode_t +parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, + re_token_t *token) +{ + unsigned char ch, delim = token->opr.c; + int i = 0; + if (re_string_eoi(regexp)) + return REG_EBRACK; + for (;; ++i) + { + if (i >= BRACKET_NAME_BUF_SIZE) + return REG_EBRACK; + if (token->type == OP_OPEN_CHAR_CLASS) + ch = re_string_fetch_byte_case (regexp); + else + ch = re_string_fetch_byte (regexp); + if (re_string_eoi(regexp)) + return REG_EBRACK; + if (ch == delim && re_string_peek_byte (regexp, 0) == ']') + break; + elem->opr.name[i] = ch; + } + re_string_skip_bytes (regexp, 1); + elem->opr.name[i] = '\0'; + switch (token->type) + { + case OP_OPEN_COLL_ELEM: + elem->type = COLL_SYM; + break; + case OP_OPEN_EQUIV_CLASS: + elem->type = EQUIV_CLASS; + break; + case OP_OPEN_CHAR_CLASS: + elem->type = CHAR_CLASS; + break; + default: + break; + } + return REG_NOERROR; +} + + /* Helper function for parse_bracket_exp. + Build the equivalence class which is represented by NAME. + The result are written to MBCSET and SBCSET. + EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, + is a pointer argument sinse we may update it. */ + +static reg_errcode_t +#ifdef RE_ENABLE_I18N +build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, + Idx *equiv_class_alloc, const unsigned char *name) +#else /* not RE_ENABLE_I18N */ +build_equiv_class (bitset_t sbcset, const unsigned char *name) +#endif /* not RE_ENABLE_I18N */ +{ +#ifdef _LIBC + uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + const int32_t *table, *indirect; + const unsigned char *weights, *extra, *cp; + unsigned char char_buf[2]; + int32_t idx1, idx2; + unsigned int ch; + size_t len; + /* This #include defines a local function! */ +# include + /* Calculate the index for equivalence class. */ + cp = name; + table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTMB); + idx1 = findidx (&cp); + if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0)) + /* This isn't a valid character. */ + return REG_ECOLLATE; + + /* Build single byte matcing table for this equivalence class. */ + char_buf[1] = (unsigned char) '\0'; + len = weights[idx1]; + for (ch = 0; ch < SBC_MAX; ++ch) + { + char_buf[0] = ch; + cp = char_buf; + idx2 = findidx (&cp); +/* + idx2 = table[ch]; +*/ + if (idx2 == 0) + /* This isn't a valid character. */ + continue; + if (len == weights[idx2]) + { + int cnt = 0; + while (cnt <= len && + weights[idx1 + 1 + cnt] == weights[idx2 + 1 + cnt]) + ++cnt; + + if (cnt > len) + bitset_set (sbcset, ch); + } + } + /* Check whether the array has enough space. */ + if (BE (*equiv_class_alloc == mbcset->nequiv_classes, 0)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nequiv_classes is 0. */ + Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; + /* Use realloc since the array is NULL if *alloc == 0. */ + int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, + int32_t, + new_equiv_class_alloc); + if (BE (new_equiv_classes == NULL, 0)) + return REG_ESPACE; + mbcset->equiv_classes = new_equiv_classes; + *equiv_class_alloc = new_equiv_class_alloc; + } + mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; + } + else +#endif /* _LIBC */ + { + if (BE (strlen ((const char *) name) != 1, 0)) + return REG_ECOLLATE; + bitset_set (sbcset, *name); + } + return REG_NOERROR; +} + + /* Helper function for parse_bracket_exp. + Build the character class which is represented by NAME. + The result are written to MBCSET and SBCSET. + CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, + is a pointer argument sinse we may update it. */ + +static reg_errcode_t +#ifdef RE_ENABLE_I18N +build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, + re_charset_t *mbcset, Idx *char_class_alloc, + const unsigned char *class_name, reg_syntax_t syntax) +#else /* not RE_ENABLE_I18N */ +build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, + const unsigned char *class_name, reg_syntax_t syntax) +#endif /* not RE_ENABLE_I18N */ +{ + int i; + const char *name = (const char *) class_name; + + /* In case of REG_ICASE "upper" and "lower" match the both of + upper and lower cases. */ + if ((syntax & RE_ICASE) + && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) + name = "alpha"; + +#ifdef RE_ENABLE_I18N + /* Check the space of the arrays. */ + if (BE (*char_class_alloc == mbcset->nchar_classes, 0)) + { + /* Not enough, realloc it. */ + /* +1 in case of mbcset->nchar_classes is 0. */ + Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; + /* Use realloc since array is NULL if *alloc == 0. */ + wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, + new_char_class_alloc); + if (BE (new_char_classes == NULL, 0)) + return REG_ESPACE; + mbcset->char_classes = new_char_classes; + *char_class_alloc = new_char_class_alloc; + } + mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); +#endif /* RE_ENABLE_I18N */ + +#define BUILD_CHARCLASS_LOOP(ctype_func) \ + do { \ + if (BE (trans != NULL, 0)) \ + { \ + for (i = 0; i < SBC_MAX; ++i) \ + if (ctype_func (i)) \ + bitset_set (sbcset, trans[i]); \ + } \ + else \ + { \ + for (i = 0; i < SBC_MAX; ++i) \ + if (ctype_func (i)) \ + bitset_set (sbcset, i); \ + } \ + } while (0) + + if (strcmp (name, "alnum") == 0) + BUILD_CHARCLASS_LOOP (isalnum); + else if (strcmp (name, "cntrl") == 0) + BUILD_CHARCLASS_LOOP (iscntrl); + else if (strcmp (name, "lower") == 0) + BUILD_CHARCLASS_LOOP (islower); + else if (strcmp (name, "space") == 0) + BUILD_CHARCLASS_LOOP (isspace); + else if (strcmp (name, "alpha") == 0) + BUILD_CHARCLASS_LOOP (isalpha); + else if (strcmp (name, "digit") == 0) + BUILD_CHARCLASS_LOOP (isdigit); + else if (strcmp (name, "print") == 0) + BUILD_CHARCLASS_LOOP (isprint); + else if (strcmp (name, "upper") == 0) + BUILD_CHARCLASS_LOOP (isupper); + else if (strcmp (name, "blank") == 0) + BUILD_CHARCLASS_LOOP (isblank); + else if (strcmp (name, "graph") == 0) + BUILD_CHARCLASS_LOOP (isgraph); + else if (strcmp (name, "punct") == 0) + BUILD_CHARCLASS_LOOP (ispunct); + else if (strcmp (name, "xdigit") == 0) + BUILD_CHARCLASS_LOOP (isxdigit); + else + return REG_ECTYPE; + + return REG_NOERROR; +} + +static bin_tree_t * +build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, + const unsigned char *class_name, + const unsigned char *extra, bool non_match, + reg_errcode_t *err) +{ + re_bitset_ptr_t sbcset; +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; + Idx alloc = 0; +#endif /* not RE_ENABLE_I18N */ + reg_errcode_t ret; + re_token_t br_token; + bin_tree_t *tree; + + sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); +#ifdef RE_ENABLE_I18N + mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); +#endif /* RE_ENABLE_I18N */ + +#ifdef RE_ENABLE_I18N + if (BE (sbcset == NULL || mbcset == NULL, 0)) +#else /* not RE_ENABLE_I18N */ + if (BE (sbcset == NULL, 0)) +#endif /* not RE_ENABLE_I18N */ + { + *err = REG_ESPACE; + return NULL; + } + + if (non_match) + { +#ifdef RE_ENABLE_I18N + mbcset->non_match = 1; +#endif /* not RE_ENABLE_I18N */ + } + + /* We don't care the syntax in this case. */ + ret = build_charclass (trans, sbcset, +#ifdef RE_ENABLE_I18N + mbcset, &alloc, +#endif /* RE_ENABLE_I18N */ + class_name, 0); + + if (BE (ret != REG_NOERROR, 0)) + { + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + *err = ret; + return NULL; + } + /* \w match '_' also. */ + for (; *extra; extra++) + bitset_set (sbcset, *extra); + + /* If it is non-matching list. */ + if (non_match) + bitset_not (sbcset); + +#ifdef RE_ENABLE_I18N + /* Ensure only single byte characters are set. */ + if (dfa->mb_cur_max > 1) + bitset_mask (sbcset, dfa->sb_char); +#endif + + /* Build a tree for simple bracket. */ + br_token.type = SIMPLE_BRACKET; + br_token.opr.sbcset = sbcset; + tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (tree == NULL, 0)) + goto build_word_op_espace; + +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + bin_tree_t *mbc_tree; + /* Build a tree for complex bracket. */ + br_token.type = COMPLEX_BRACKET; + br_token.opr.mbcset = mbcset; + dfa->has_mb_node = 1; + mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); + if (BE (mbc_tree == NULL, 0)) + goto build_word_op_espace; + /* Then join them by ALT node. */ + tree = create_tree (dfa, tree, mbc_tree, OP_ALT); + if (BE (mbc_tree != NULL, 1)) + return tree; + } + else + { + free_charset (mbcset); + return tree; + } +#else /* not RE_ENABLE_I18N */ + return tree; +#endif /* not RE_ENABLE_I18N */ + + build_word_op_espace: + re_free (sbcset); +#ifdef RE_ENABLE_I18N + free_charset (mbcset); +#endif /* RE_ENABLE_I18N */ + *err = REG_ESPACE; + return NULL; +} + +/* This is intended for the expressions like "a{1,3}". + Fetch a number from `input', and return the number. + Return REG_MISSING if the number field is empty like "{,1}". + Return REG_ERROR if an error occurred. */ + +static Idx +fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) +{ + Idx num = REG_MISSING; + unsigned char c; + while (1) + { + fetch_token (token, input, syntax); + c = token->opr.c; + if (BE (token->type == END_OF_RE, 0)) + return REG_ERROR; + if (token->type == OP_CLOSE_DUP_NUM || c == ',') + break; + num = ((token->type != CHARACTER || c < '0' || '9' < c + || num == REG_ERROR) + ? REG_ERROR + : ((num == REG_MISSING) ? c - '0' : num * 10 + c - '0')); + num = (num > RE_DUP_MAX) ? REG_ERROR : num; + } + return num; +} + +#ifdef RE_ENABLE_I18N +static void +free_charset (re_charset_t *cset) +{ + re_free (cset->mbchars); +# ifdef _LIBC + re_free (cset->coll_syms); + re_free (cset->equiv_classes); + re_free (cset->range_starts); + re_free (cset->range_ends); +# endif + re_free (cset->char_classes); + re_free (cset); +} +#endif /* RE_ENABLE_I18N */ + +/* Functions for binary tree operation. */ + +/* Create a tree node. */ + +static bin_tree_t * +create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + re_token_type_t type) +{ + re_token_t t; + t.type = type; + return create_token_tree (dfa, left, right, &t); +} + +static bin_tree_t * +create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, + const re_token_t *token) +{ + bin_tree_t *tree; + if (BE (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE, 0)) + { + bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); + + if (storage == NULL) + return NULL; + storage->next = dfa->str_tree_storage; + dfa->str_tree_storage = storage; + dfa->str_tree_storage_idx = 0; + } + tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; + + tree->parent = NULL; + tree->left = left; + tree->right = right; + tree->token = *token; + tree->token.duplicated = 0; + tree->token.opt_subexp = 0; + tree->first = NULL; + tree->next = NULL; + tree->node_idx = REG_MISSING; + + if (left != NULL) + left->parent = tree; + if (right != NULL) + right->parent = tree; + return tree; +} + +/* Mark the tree SRC as an optional subexpression. + To be called from preorder or postorder. */ + +static reg_errcode_t +mark_opt_subexp (void *extra, bin_tree_t *node) +{ + Idx idx = (Idx) (long) extra; + if (node->token.type == SUBEXP && node->token.opr.idx == idx) + node->token.opt_subexp = 1; + + return REG_NOERROR; +} + +/* Free the allocated memory inside NODE. */ + +static void +free_token (re_token_t *node) +{ +#ifdef RE_ENABLE_I18N + if (node->type == COMPLEX_BRACKET && node->duplicated == 0) + free_charset (node->opr.mbcset); + else +#endif /* RE_ENABLE_I18N */ + if (node->type == SIMPLE_BRACKET && node->duplicated == 0) + re_free (node->opr.sbcset); +} + +/* Worker function for tree walking. Free the allocated memory inside NODE + and its children. */ + +static reg_errcode_t +free_tree (void *extra, bin_tree_t *node) +{ + free_token (&node->token); + return REG_NOERROR; +} + + +/* Duplicate the node SRC, and return new node. This is a preorder + visit similar to the one implemented by the generic visitor, but + we need more infrastructure to maintain two parallel trees --- so, + it's easier to duplicate. */ + +static bin_tree_t * +duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) +{ + const bin_tree_t *node; + bin_tree_t *dup_root; + bin_tree_t **p_new = &dup_root, *dup_node = root->parent; + + for (node = root; ; ) + { + /* Create a new tree and link it back to the current parent. */ + *p_new = create_token_tree (dfa, NULL, NULL, &node->token); + if (*p_new == NULL) + return NULL; + (*p_new)->parent = dup_node; + (*p_new)->token.duplicated = 1; + dup_node = *p_new; + + /* Go to the left node, or up and to the right. */ + if (node->left) + { + node = node->left; + p_new = &dup_node->left; + } + else + { + const bin_tree_t *prev = NULL; + while (node->right == prev || node->right == NULL) + { + prev = node; + node = node->parent; + dup_node = dup_node->parent; + if (!node) + return dup_root; + } + node = node->right; + p_new = &dup_node->right; + } + } +} diff --git a/coreseek/m4-1.4.13/lib/regex.c b/coreseek/m4-1.4.13/lib/regex.c new file mode 100644 index 0000000..ee36378 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/regex.c @@ -0,0 +1,71 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Make sure noone compiles this code with a C++ compiler. */ +#if defined __cplusplus && defined _LIBC +# error "This is C code, use a C compiler" +#endif + +#ifdef _LIBC +/* We have to keep the namespace clean. */ +# define regfree(preg) __regfree (preg) +# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) +# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) +# define regerror(errcode, preg, errbuf, errbuf_size) \ + __regerror(errcode, preg, errbuf, errbuf_size) +# define re_set_registers(bu, re, nu, st, en) \ + __re_set_registers (bu, re, nu, st, en) +# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ + __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) +# define re_match(bufp, string, size, pos, regs) \ + __re_match (bufp, string, size, pos, regs) +# define re_search(bufp, string, size, startpos, range, regs) \ + __re_search (bufp, string, size, startpos, range, regs) +# define re_compile_pattern(pattern, length, bufp) \ + __re_compile_pattern (pattern, length, bufp) +# define re_set_syntax(syntax) __re_set_syntax (syntax) +# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ + __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) +# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) + +# include "../locale/localeinfo.h" +#endif + +/* On some systems, limits.h sets RE_DUP_MAX to a lower value than + GNU regex allows. Include it before , which correctly + #undefs RE_DUP_MAX and sets it to the right value. */ +#include + +#include +#include "regex_internal.h" + +#include "regex_internal.c" +#include "regcomp.c" +#include "regexec.c" + +/* Binary backward compatibility. */ +#if _LIBC +# include +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) +link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") +int re_max_failures = 2000; +# endif +#endif diff --git a/coreseek/m4-1.4.13/lib/regex.h b/coreseek/m4-1.4.13/lib/regex.h new file mode 100644 index 0000000..a531283 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/regex.h @@ -0,0 +1,675 @@ +/* Definitions for data structures and routines for the regular + expression library. + Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005,2006 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _REGEX_H +#define _REGEX_H 1 + +#include + +/* Allow the use in C++ code. */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Define __USE_GNU_REGEX to declare GNU extensions that violate the + POSIX name space rules. */ +#undef __USE_GNU_REGEX +#if (defined _GNU_SOURCE \ + || (!defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE \ + && !defined _XOPEN_SOURCE)) +# define __USE_GNU_REGEX 1 +#endif + +#ifdef _REGEX_LARGE_OFFSETS + +/* Use types and values that are wide enough to represent signed and + unsigned byte offsets in memory. This currently works only when + the regex code is used outside of the GNU C library; it is not yet + supported within glibc itself, and glibc users should not define + _REGEX_LARGE_OFFSETS. */ + +/* The type of the offset of a byte within a string. + For historical reasons POSIX 1003.1-2004 requires that regoff_t be + at least as wide as off_t. However, many common POSIX platforms set + regoff_t to the more-sensible ssize_t and the Open Group has + signalled its intention to change the requirement to be that + regoff_t be at least as wide as ptrdiff_t and ssize_t; see XBD ERN + 60 (2005-08-25). We don't know of any hosts where ssize_t or + ptrdiff_t is wider than ssize_t, so ssize_t is safe. */ +typedef ssize_t regoff_t; + +/* The type of nonnegative object indexes. Traditionally, GNU regex + uses 'int' for these. Code that uses __re_idx_t should work + regardless of whether the type is signed. */ +typedef size_t __re_idx_t; + +/* The type of object sizes. */ +typedef size_t __re_size_t; + +/* The type of object sizes, in places where the traditional code + uses unsigned long int. */ +typedef size_t __re_long_size_t; + +#else + +/* Use types that are binary-compatible with the traditional GNU regex + implementation, which mishandles strings longer than INT_MAX. */ + +typedef int regoff_t; +typedef int __re_idx_t; +typedef unsigned int __re_size_t; +typedef unsigned long int __re_long_size_t; + +#endif + +/* The following two types have to be signed and unsigned integer type + wide enough to hold a value of a pointer. For most ANSI compilers + ptrdiff_t and size_t should be likely OK. Still size of these two + types is 2 for Microsoft C. Ugh... */ +typedef long int s_reg_t; +typedef unsigned long int active_reg_t; + +/* The following bits are used to determine the regexp syntax we + recognize. The set/not-set meanings are chosen so that Emacs syntax + remains the value 0. The bits are given in alphabetical order, and + the definitions shifted by one from the previous bit; thus, when we + add or remove a bit, only one other definition need change. */ +typedef unsigned long int reg_syntax_t; + +#ifdef __USE_GNU_REGEX + +/* If this bit is not set, then \ inside a bracket expression is literal. + If set, then such a \ quotes the following character. */ +# define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) + +/* If this bit is not set, then + and ? are operators, and \+ and \? are + literals. + If set, then \+ and \? are operators and + and ? are literals. */ +# define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) + +/* If this bit is set, then character classes are supported. They are: + [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], + [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. + If not set, then character classes are not supported. */ +# define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) + +/* If this bit is set, then ^ and $ are always anchors (outside bracket + expressions, of course). + If this bit is not set, then it depends: + ^ is an anchor if it is at the beginning of a regular + expression or after an open-group or an alternation operator; + $ is an anchor if it is at the end of a regular expression, or + before a close-group or an alternation operator. + + This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because + POSIX draft 11.2 says that * etc. in leading positions is undefined. + We already implemented a previous draft which made those constructs + invalid, though, so we haven't changed the code back. */ +# define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) + +/* If this bit is set, then special characters are always special + regardless of where they are in the pattern. + If this bit is not set, then special characters are special only in + some contexts; otherwise they are ordinary. Specifically, + * + ? and intervals are only special when not after the beginning, + open-group, or alternation operator. */ +# define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) + +/* If this bit is set, then *, +, ?, and { cannot be first in an re or + immediately after an alternation or begin-group operator. */ +# define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) + +/* If this bit is set, then . matches newline. + If not set, then it doesn't. */ +# define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) + +/* If this bit is set, then . doesn't match NUL. + If not set, then it does. */ +# define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) + +/* If this bit is set, nonmatching lists [^...] do not match newline. + If not set, they do. */ +# define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) + +/* If this bit is set, either \{...\} or {...} defines an + interval, depending on RE_NO_BK_BRACES. + If not set, \{, \}, {, and } are literals. */ +# define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) + +/* If this bit is set, +, ? and | aren't recognized as operators. + If not set, they are. */ +# define RE_LIMITED_OPS (RE_INTERVALS << 1) + +/* If this bit is set, newline is an alternation operator. + If not set, newline is literal. */ +# define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) + +/* If this bit is set, then `{...}' defines an interval, and \{ and \} + are literals. + If not set, then `\{...\}' defines an interval. */ +# define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) + +/* If this bit is set, (...) defines a group, and \( and \) are literals. + If not set, \(...\) defines a group, and ( and ) are literals. */ +# define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) + +/* If this bit is set, then \ matches . + If not set, then \ is a back-reference. */ +# define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) + +/* If this bit is set, then | is an alternation operator, and \| is literal. + If not set, then \| is an alternation operator, and | is literal. */ +# define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) + +/* If this bit is set, then an ending range point collating higher + than the starting range point, as in [z-a], is invalid. + If not set, then when ending range point collates higher than the + starting range point, the range is ignored. */ +# define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) + +/* If this bit is set, then an unmatched ) is ordinary. + If not set, then an unmatched ) is invalid. */ +# define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) + +/* If this bit is set, succeed as soon as we match the whole pattern, + without further backtracking. */ +# define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) + +/* If this bit is set, do not process the GNU regex operators. + If not set, then the GNU regex operators are recognized. */ +# define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) + +/* If this bit is set, turn on internal regex debugging. + If not set, and debugging was on, turn it off. + This only works if regex.c is compiled -DDEBUG. + We define this bit always, so that all that's needed to turn on + debugging is to recompile regex.c; the calling code can always have + this bit set, and it won't affect anything in the normal case. */ +# define RE_DEBUG (RE_NO_GNU_OPS << 1) + +/* If this bit is set, a syntactically invalid interval is treated as + a string of ordinary characters. For example, the ERE 'a{1' is + treated as 'a\{1'. */ +# define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +# define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) + +/* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only + for ^, because it is difficult to scan the regex backwards to find + whether ^ should be special. */ +# define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) + +/* If this bit is set, then \{ cannot be first in an bre or + immediately after an alternation or begin-group operator. */ +# define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) + +/* If this bit is set, then no_sub will be set to 1 during + re_compile_pattern. */ +# define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) + +#endif /* defined __USE_GNU_REGEX */ + +/* This global variable defines the particular regexp syntax to use (for + some interfaces). When a regexp is compiled, the syntax used is + stored in the pattern buffer, so changing this does not affect + already-compiled regexps. */ +extern reg_syntax_t re_syntax_options; + +#ifdef __USE_GNU_REGEX +/* Define combinations of the above bits for the standard possibilities. + (The [[[ comments delimit what gets put into the Texinfo file, so + don't delete them!) */ +/* [[[begin syntaxes]]] */ +# define RE_SYNTAX_EMACS 0 + +# define RE_SYNTAX_AWK \ + (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ + | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ + | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) + +# define RE_SYNTAX_GNU_AWK \ + ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ + & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS \ + | RE_CONTEXT_INVALID_OPS )) + +# define RE_SYNTAX_POSIX_AWK \ + (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ + | RE_INTERVALS | RE_NO_GNU_OPS) + +# define RE_SYNTAX_GREP \ + (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ + | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ + | RE_NEWLINE_ALT) + +# define RE_SYNTAX_EGREP \ + (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ + | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ + | RE_NO_BK_VBAR) + +# define RE_SYNTAX_POSIX_EGREP \ + (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ + | RE_INVALID_INTERVAL_ORD) + +/* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ +# define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC + +# define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC + +/* Syntax bits common to both basic and extended POSIX regex syntax. */ +# define _RE_SYNTAX_POSIX_COMMON \ + (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ + | RE_INTERVALS | RE_NO_EMPTY_RANGES) + +# define RE_SYNTAX_POSIX_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) + +/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes + RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this + isn't minimal, since other operators, such as \`, aren't disabled. */ +# define RE_SYNTAX_POSIX_MINIMAL_BASIC \ + (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) + +# define RE_SYNTAX_POSIX_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ + | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) + +/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is + removed and RE_NO_BK_REFS is added. */ +# define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ + (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ + | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ + | RE_NO_BK_PARENS | RE_NO_BK_REFS \ + | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) +/* [[[end syntaxes]]] */ + +#endif /* defined __USE_GNU_REGEX */ + +#ifdef __USE_GNU_REGEX + +/* Maximum number of duplicates an interval can allow. POSIX-conforming + systems might define this in , but we want our + value, so remove any previous define. */ +# ifdef RE_DUP_MAX +# undef RE_DUP_MAX +# endif + +/* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored + the counter as a 2-byte signed integer. This is no longer true, so + RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to + ((SIZE_MAX - 2) / 10 - 1) if _REGEX_LARGE_OFFSETS is defined. + However, there would be a huge performance problem if someone + actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains + its historical value. */ +# define RE_DUP_MAX (0x7fff) + +#endif /* defined __USE_GNU_REGEX */ + + +/* POSIX `cflags' bits (i.e., information for `regcomp'). */ + +/* If this bit is set, then use extended regular expression syntax. + If not set, then use basic regular expression syntax. */ +#define REG_EXTENDED 1 + +/* If this bit is set, then ignore case when matching. + If not set, then case is significant. */ +#define REG_ICASE (1 << 1) + +/* If this bit is set, then anchors do not match at newline + characters in the string. + If not set, then anchors do match at newlines. */ +#define REG_NEWLINE (1 << 2) + +/* If this bit is set, then report only success or fail in regexec. + If not set, then returns differ between not matching and errors. */ +#define REG_NOSUB (1 << 3) + + +/* POSIX `eflags' bits (i.e., information for regexec). */ + +/* If this bit is set, then the beginning-of-line operator doesn't match + the beginning of the string (presumably because it's not the + beginning of a line). + If not set, then the beginning-of-line operator does match the + beginning of the string. */ +#define REG_NOTBOL 1 + +/* Like REG_NOTBOL, except for the end-of-line. */ +#define REG_NOTEOL (1 << 1) + +/* Use PMATCH[0] to delimit the start and end of the search in the + buffer. */ +#define REG_STARTEND (1 << 2) + + +/* If any error codes are removed, changed, or added, update the + `__re_error_msgid' table in regcomp.c. */ + +typedef enum +{ + _REG_ENOSYS = -1, /* This will never happen for this implementation. */ + _REG_NOERROR = 0, /* Success. */ + _REG_NOMATCH, /* Didn't find a match (for regexec). */ + + /* POSIX regcomp return error codes. (In the order listed in the + standard.) */ + _REG_BADPAT, /* Invalid pattern. */ + _REG_ECOLLATE, /* Invalid collating element. */ + _REG_ECTYPE, /* Invalid character class name. */ + _REG_EESCAPE, /* Trailing backslash. */ + _REG_ESUBREG, /* Invalid back reference. */ + _REG_EBRACK, /* Unmatched left bracket. */ + _REG_EPAREN, /* Parenthesis imbalance. */ + _REG_EBRACE, /* Unmatched \{. */ + _REG_BADBR, /* Invalid contents of \{\}. */ + _REG_ERANGE, /* Invalid range end. */ + _REG_ESPACE, /* Ran out of memory. */ + _REG_BADRPT, /* No preceding re for repetition op. */ + + /* Error codes we've added. */ + _REG_EEND, /* Premature end. */ + _REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ + _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ +} reg_errcode_t; + +#ifdef _XOPEN_SOURCE +# define REG_ENOSYS _REG_ENOSYS +#endif +#define REG_NOERROR _REG_NOERROR +#define REG_NOMATCH _REG_NOMATCH +#define REG_BADPAT _REG_BADPAT +#define REG_ECOLLATE _REG_ECOLLATE +#define REG_ECTYPE _REG_ECTYPE +#define REG_EESCAPE _REG_EESCAPE +#define REG_ESUBREG _REG_ESUBREG +#define REG_EBRACK _REG_EBRACK +#define REG_EPAREN _REG_EPAREN +#define REG_EBRACE _REG_EBRACE +#define REG_BADBR _REG_BADBR +#define REG_ERANGE _REG_ERANGE +#define REG_ESPACE _REG_ESPACE +#define REG_BADRPT _REG_BADRPT +#define REG_EEND _REG_EEND +#define REG_ESIZE _REG_ESIZE +#define REG_ERPAREN _REG_ERPAREN + +/* struct re_pattern_buffer normally uses member names like `buffer' + that POSIX does not allow. In POSIX mode these members have names + with leading `re_' (e.g., `re_buffer'). */ +#ifdef __USE_GNU_REGEX +# define _REG_RE_NAME(id) id +# define _REG_RM_NAME(id) id +#else +# define _REG_RE_NAME(id) re_##id +# define _REG_RM_NAME(id) rm_##id +#endif + +/* The user can specify the type of the re_translate member by + defining the macro RE_TRANSLATE_TYPE, which defaults to unsigned + char *. This pollutes the POSIX name space, so in POSIX mode just + use unsigned char *. */ +#ifdef __USE_GNU_REGEX +# ifndef RE_TRANSLATE_TYPE +# define RE_TRANSLATE_TYPE unsigned char * +# endif +# define REG_TRANSLATE_TYPE RE_TRANSLATE_TYPE +#else +# define REG_TRANSLATE_TYPE unsigned char * +#endif + +/* This data structure represents a compiled pattern. Before calling + the pattern compiler, the fields `buffer', `allocated', `fastmap', + `translate', and `no_sub' can be set. After the pattern has been + compiled, the `re_nsub' field is available. All other fields are + private to the regex routines. */ + +struct re_pattern_buffer +{ + /* Space that holds the compiled pattern. It is declared as + `unsigned char *' because its elements are sometimes used as + array indexes. */ + unsigned char *_REG_RE_NAME (buffer); + + /* Number of bytes to which `buffer' points. */ + __re_long_size_t _REG_RE_NAME (allocated); + + /* Number of bytes actually used in `buffer'. */ + __re_long_size_t _REG_RE_NAME (used); + + /* Syntax setting with which the pattern was compiled. */ + reg_syntax_t _REG_RE_NAME (syntax); + + /* Pointer to a fastmap, if any, otherwise zero. re_search uses the + fastmap, if there is one, to skip over impossible starting points + for matches. */ + char *_REG_RE_NAME (fastmap); + + /* Either a translate table to apply to all characters before + comparing them, or zero for no translation. The translation is + applied to a pattern when it is compiled and to a string when it + is matched. */ + REG_TRANSLATE_TYPE _REG_RE_NAME (translate); + + /* Number of subexpressions found by the compiler. */ + size_t re_nsub; + + /* Zero if this pattern cannot match the empty string, one else. + Well, in truth it's used only in `re_search_2', to see whether or + not we should use the fastmap, so we don't set this absolutely + perfectly; see `re_compile_fastmap' (the `duplicate' case). */ + unsigned int _REG_RE_NAME (can_be_null) : 1; + + /* If REGS_UNALLOCATED, allocate space in the `regs' structure + for `max (RE_NREGS, re_nsub + 1)' groups. + If REGS_REALLOCATE, reallocate space if necessary. + If REGS_FIXED, use what's there. */ +#ifdef __USE_GNU_REGEX +# define REGS_UNALLOCATED 0 +# define REGS_REALLOCATE 1 +# define REGS_FIXED 2 +#endif + unsigned int _REG_RE_NAME (regs_allocated) : 2; + + /* Set to zero when `regex_compile' compiles a pattern; set to one + by `re_compile_fastmap' if it updates the fastmap. */ + unsigned int _REG_RE_NAME (fastmap_accurate) : 1; + + /* If set, `re_match_2' does not return information about + subexpressions. */ + unsigned int _REG_RE_NAME (no_sub) : 1; + + /* If set, a beginning-of-line anchor doesn't match at the beginning + of the string. */ + unsigned int _REG_RE_NAME (not_bol) : 1; + + /* Similarly for an end-of-line anchor. */ + unsigned int _REG_RE_NAME (not_eol) : 1; + + /* If true, an anchor at a newline matches. */ + unsigned int _REG_RE_NAME (newline_anchor) : 1; + +/* [[[end pattern_buffer]]] */ +}; + +typedef struct re_pattern_buffer regex_t; + +/* This is the structure we store register match data in. See + regex.texinfo for a full description of what registers match. */ +struct re_registers +{ + __re_size_t _REG_RM_NAME (num_regs); + regoff_t *_REG_RM_NAME (start); + regoff_t *_REG_RM_NAME (end); +}; + + +/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, + `re_match_2' returns information about at least this many registers + the first time a `regs' structure is passed. */ +#if !defined RE_NREGS && defined __USE_GNU_REGEX +# define RE_NREGS 30 +#endif + + +/* POSIX specification for registers. Aside from the different names than + `re_registers', POSIX uses an array of structures, instead of a + structure of arrays. */ +typedef struct +{ + regoff_t rm_so; /* Byte offset from string's start to substring's start. */ + regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ +} regmatch_t; + +/* Declarations for routines. */ + +/* Sets the current default syntax to SYNTAX, and return the old syntax. + You can also simply assign to the `re_syntax_options' variable. */ +extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); + +/* Compile the regular expression PATTERN, with length LENGTH + and syntax given by the global `re_syntax_options', into the buffer + BUFFER. Return NULL if successful, and an error string if not. */ +extern const char *re_compile_pattern (const char *__pattern, size_t __length, + struct re_pattern_buffer *__buffer); + + +/* Compile a fastmap for the compiled pattern in BUFFER; used to + accelerate searches. Return 0 if successful and -2 if was an + internal error. */ +extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); + + +/* Search in the string STRING (with length LENGTH) for the pattern + compiled into BUFFER. Start searching at position START, for RANGE + characters. Return the starting position of the match, -1 for no + match, or -2 for an internal error. Also return register + information in REGS (if REGS and BUFFER->no_sub are nonzero). */ +extern regoff_t re_search (struct re_pattern_buffer *__buffer, + const char *__string, __re_idx_t __length, + __re_idx_t __start, regoff_t __range, + struct re_registers *__regs); + + +/* Like `re_search', but search in the concatenation of STRING1 and + STRING2. Also, stop searching at index START + STOP. */ +extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, + const char *__string1, __re_idx_t __length1, + const char *__string2, __re_idx_t __length2, + __re_idx_t __start, regoff_t __range, + struct re_registers *__regs, + __re_idx_t __stop); + + +/* Like `re_search', but return how many characters in STRING the regexp + in BUFFER matched, starting at position START. */ +extern regoff_t re_match (struct re_pattern_buffer *__buffer, + const char *__string, __re_idx_t __length, + __re_idx_t __start, struct re_registers *__regs); + + +/* Relates to `re_match' as `re_search_2' relates to `re_search'. */ +extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, + const char *__string1, __re_idx_t __length1, + const char *__string2, __re_idx_t __length2, + __re_idx_t __start, struct re_registers *__regs, + __re_idx_t __stop); + + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using BUFFER and REGS will use this memory + for recording register information. STARTS and ENDS must be + allocated with malloc, and must each be at least `NUM_REGS * sizeof + (regoff_t)' bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ +extern void re_set_registers (struct re_pattern_buffer *__buffer, + struct re_registers *__regs, + __re_size_t __num_regs, + regoff_t *__starts, regoff_t *__ends); + +#if defined _REGEX_RE_COMP || defined _LIBC +# ifndef _CRAY +/* 4.2 bsd compatibility. */ +extern char *re_comp (const char *); +extern int re_exec (const char *); +# endif +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if 199901L <= __STDC_VERSION__ +# define _Restrict_ restrict +# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) +# define _Restrict_ __restrict +# else +# define _Restrict_ +# endif +#endif +/* gcc 3.1 and up support the [restrict] syntax. Don't trust + sys/cdefs.h's definition of __restrict_arr, though, as it + mishandles gcc -ansi -pedantic. */ +#ifndef _Restrict_arr_ +# if ((199901L <= __STDC_VERSION__ \ + || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ + && !__STRICT_ANSI__)) \ + && !defined __GNUG__) +# define _Restrict_arr_ _Restrict_ +# else +# define _Restrict_arr_ +# endif +#endif + +/* POSIX compatibility. */ +extern int regcomp (regex_t *_Restrict_ __preg, + const char *_Restrict_ __pattern, + int __cflags); + +extern int regexec (const regex_t *_Restrict_ __preg, + const char *_Restrict_ __string, size_t __nmatch, + regmatch_t __pmatch[_Restrict_arr_], + int __eflags); + +extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, + char *_Restrict_ __errbuf, size_t __errbuf_size); + +extern void regfree (regex_t *__preg); + + +#ifdef __cplusplus +} +#endif /* C++ */ + +#endif /* regex.h */ diff --git a/coreseek/m4-1.4.13/lib/regex.o b/coreseek/m4-1.4.13/lib/regex.o new file mode 100644 index 0000000..a0f150b Binary files /dev/null and b/coreseek/m4-1.4.13/lib/regex.o differ diff --git a/coreseek/m4-1.4.13/lib/regex_internal.c b/coreseek/m4-1.4.13/lib/regex_internal.c new file mode 100644 index 0000000..7acec79 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/regex_internal.c @@ -0,0 +1,1737 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +static void re_string_construct_common (const char *str, Idx len, + re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, + const re_dfa_t *dfa) internal_function; +static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + re_hashval_t hash) internal_function; +static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, + const re_node_set *nodes, + unsigned int context, + re_hashval_t hash) internal_function; + +/* Functions for string operation. */ + +/* This function allocate the buffers. It is necessary to call + re_string_reconstruct before using the object. */ + +static reg_errcode_t +internal_function +re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, + RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) +{ + reg_errcode_t ret; + Idx init_buf_len; + + /* Ensure at least one character fits into the buffers. */ + if (init_len < dfa->mb_cur_max) + init_len = dfa->mb_cur_max; + init_buf_len = (len + 1 < init_len) ? len + 1: init_len; + re_string_construct_common (str, len, pstr, trans, icase, dfa); + + ret = re_string_realloc_buffers (pstr, init_buf_len); + if (BE (ret != REG_NOERROR, 0)) + return ret; + + pstr->word_char = dfa->word_char; + pstr->word_ops_used = dfa->word_ops_used; + pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; + pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; + pstr->valid_raw_len = pstr->valid_len; + return REG_NOERROR; +} + +/* This function allocate the buffers, and initialize them. */ + +static reg_errcode_t +internal_function +re_string_construct (re_string_t *pstr, const char *str, Idx len, + RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) +{ + reg_errcode_t ret; + memset (pstr, '\0', sizeof (re_string_t)); + re_string_construct_common (str, len, pstr, trans, icase, dfa); + + if (len > 0) + { + ret = re_string_realloc_buffers (pstr, len + 1); + if (BE (ret != REG_NOERROR, 0)) + return ret; + } + pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; + + if (icase) + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + { + while (1) + { + ret = build_wcs_upper_buffer (pstr); + if (BE (ret != REG_NOERROR, 0)) + return ret; + if (pstr->valid_raw_len >= len) + break; + if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) + break; + ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); + if (BE (ret != REG_NOERROR, 0)) + return ret; + } + } + else +#endif /* RE_ENABLE_I18N */ + build_upper_buffer (pstr); + } + else + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + build_wcs_buffer (pstr); + else +#endif /* RE_ENABLE_I18N */ + { + if (trans != NULL) + re_string_translate_buffer (pstr); + else + { + pstr->valid_len = pstr->bufs_len; + pstr->valid_raw_len = pstr->bufs_len; + } + } + } + + return REG_NOERROR; +} + +/* Helper functions for re_string_allocate, and re_string_construct. */ + +static reg_errcode_t +internal_function +re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) +{ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + wint_t *new_wcs; + + /* Avoid overflow. */ + size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); + if (BE (SIZE_MAX / max_object_size < new_buf_len, 0)) + return REG_ESPACE; + + new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); + if (BE (new_wcs == NULL, 0)) + return REG_ESPACE; + pstr->wcs = new_wcs; + if (pstr->offsets != NULL) + { + Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); + if (BE (new_offsets == NULL, 0)) + return REG_ESPACE; + pstr->offsets = new_offsets; + } + } +#endif /* RE_ENABLE_I18N */ + if (pstr->mbs_allocated) + { + unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, + new_buf_len); + if (BE (new_mbs == NULL, 0)) + return REG_ESPACE; + pstr->mbs = new_mbs; + } + pstr->bufs_len = new_buf_len; + return REG_NOERROR; +} + + +static void +internal_function +re_string_construct_common (const char *str, Idx len, re_string_t *pstr, + RE_TRANSLATE_TYPE trans, bool icase, + const re_dfa_t *dfa) +{ + pstr->raw_mbs = (const unsigned char *) str; + pstr->len = len; + pstr->raw_len = len; + pstr->trans = trans; + pstr->icase = icase; + pstr->mbs_allocated = (trans != NULL || icase); + pstr->mb_cur_max = dfa->mb_cur_max; + pstr->is_utf8 = dfa->is_utf8; + pstr->map_notascii = dfa->map_notascii; + pstr->stop = pstr->len; + pstr->raw_stop = pstr->stop; +} + +#ifdef RE_ENABLE_I18N + +/* Build wide character buffer PSTR->WCS. + If the byte sequence of the string are: + (0), (1), (0), (1), + Then wide character buffer will be: + , WEOF , , WEOF , + We use WEOF for padding, they indicate that the position isn't + a first byte of a multibyte character. + + Note that this function assumes PSTR->VALID_LEN elements are already + built and starts from PSTR->VALID_LEN. */ + +static void +internal_function +build_wcs_buffer (re_string_t *pstr) +{ +#ifdef _LIBC + unsigned char buf[MB_LEN_MAX]; + assert (MB_LEN_MAX >= pstr->mb_cur_max); +#else + unsigned char buf[64]; +#endif + mbstate_t prev_st; + Idx byte_idx, end_idx, remain_len; + size_t mbclen; + + /* Build the buffers from pstr->valid_len to either pstr->len or + pstr->bufs_len. */ + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + for (byte_idx = pstr->valid_len; byte_idx < end_idx;) + { + wchar_t wc; + const char *p; + + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + /* Apply the translation if we need. */ + if (BE (pstr->trans != NULL, 0)) + { + int i, ch; + + for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) + { + ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; + buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; + } + p = (const char *) buf; + } + else + p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; + mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); + if (BE (mbclen == (size_t) -2, 0)) + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + else if (BE (mbclen == (size_t) -1 || mbclen == 0, 0)) + { + /* We treat these cases as a singlebyte character. */ + mbclen = 1; + wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + if (BE (pstr->trans != NULL, 0)) + wc = pstr->trans[wc]; + pstr->cur_state = prev_st; + } + + /* Write wide character and padding. */ + pstr->wcs[byte_idx++] = wc; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = byte_idx; +} + +/* Build wide character buffer PSTR->WCS like build_wcs_buffer, + but for REG_ICASE. */ + +static reg_errcode_t +internal_function +build_wcs_upper_buffer (re_string_t *pstr) +{ + mbstate_t prev_st; + Idx src_idx, byte_idx, end_idx, remain_len; + size_t mbclen; +#ifdef _LIBC + char buf[MB_LEN_MAX]; + assert (MB_LEN_MAX >= pstr->mb_cur_max); +#else + char buf[64]; +#endif + + byte_idx = pstr->valid_len; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + /* The following optimization assumes that ASCII characters can be + mapped to wide characters with a simple cast. */ + if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) + { + while (byte_idx < end_idx) + { + wchar_t wc; + + if (isascii (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]) + && mbsinit (&pstr->cur_state)) + { + /* In case of a singlebyte character. */ + pstr->mbs[byte_idx] + = toupper (pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]); + /* The next step uses the assumption that wchar_t is encoded + ASCII-safe: all ASCII values can be converted like this. */ + pstr->wcs[byte_idx] = (wchar_t) pstr->mbs[byte_idx]; + ++byte_idx; + continue; + } + + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc, + ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + + byte_idx), remain_len, &pstr->cur_state); + if (BE (mbclen < (size_t) -2, 1)) + { + wchar_t wcu = wc; + if (iswlower (wc)) + { + size_t mbcdlen; + + wcu = towupper (wc); + mbcdlen = wcrtomb (buf, wcu, &prev_st); + if (BE (mbclen == mbcdlen, 1)) + memcpy (pstr->mbs + byte_idx, buf, mbclen); + else + { + src_idx = byte_idx; + goto offsets_needed; + } + } + else + memcpy (pstr->mbs + byte_idx, + pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); + pstr->wcs[byte_idx++] = wcu; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + else if (mbclen == (size_t) -1 || mbclen == 0) + { + /* It is an invalid character or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; + pstr->mbs[byte_idx] = ch; + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (BE (mbclen == (size_t) -1, 0)) + pstr->cur_state = prev_st; + } + else + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = byte_idx; + return REG_NOERROR; + } + else + for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) + { + wchar_t wc; + const char *p; + offsets_needed: + remain_len = end_idx - byte_idx; + prev_st = pstr->cur_state; + if (BE (pstr->trans != NULL, 0)) + { + int i, ch; + + for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) + { + ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; + buf[i] = pstr->trans[ch]; + } + p = (const char *) buf; + } + else + p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; + mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); + if (BE (mbclen < (size_t) -2, 1)) + { + wchar_t wcu = wc; + if (iswlower (wc)) + { + size_t mbcdlen; + + wcu = towupper (wc); + mbcdlen = wcrtomb ((char *) buf, wcu, &prev_st); + if (BE (mbclen == mbcdlen, 1)) + memcpy (pstr->mbs + byte_idx, buf, mbclen); + else if (mbcdlen != (size_t) -1) + { + size_t i; + + if (byte_idx + mbcdlen > pstr->bufs_len) + { + pstr->cur_state = prev_st; + break; + } + + if (pstr->offsets == NULL) + { + pstr->offsets = re_malloc (Idx, pstr->bufs_len); + + if (pstr->offsets == NULL) + return REG_ESPACE; + } + if (!pstr->offsets_needed) + { + for (i = 0; i < (size_t) byte_idx; ++i) + pstr->offsets[i] = i; + pstr->offsets_needed = 1; + } + + memcpy (pstr->mbs + byte_idx, buf, mbcdlen); + pstr->wcs[byte_idx] = wcu; + pstr->offsets[byte_idx] = src_idx; + for (i = 1; i < mbcdlen; ++i) + { + pstr->offsets[byte_idx + i] + = src_idx + (i < mbclen ? i : mbclen - 1); + pstr->wcs[byte_idx + i] = WEOF; + } + pstr->len += mbcdlen - mbclen; + if (pstr->raw_stop > src_idx) + pstr->stop += mbcdlen - mbclen; + end_idx = (pstr->bufs_len > pstr->len) + ? pstr->len : pstr->bufs_len; + byte_idx += mbcdlen; + src_idx += mbclen; + continue; + } + else + memcpy (pstr->mbs + byte_idx, p, mbclen); + } + else + memcpy (pstr->mbs + byte_idx, p, mbclen); + + if (BE (pstr->offsets_needed != 0, 0)) + { + size_t i; + for (i = 0; i < mbclen; ++i) + pstr->offsets[byte_idx + i] = src_idx + i; + } + src_idx += mbclen; + + pstr->wcs[byte_idx++] = wcu; + /* Write paddings. */ + for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) + pstr->wcs[byte_idx++] = WEOF; + } + else if (mbclen == (size_t) -1 || mbclen == 0) + { + /* It is an invalid character or '\0'. Just use the byte. */ + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; + + if (BE (pstr->trans != NULL, 0)) + ch = pstr->trans [ch]; + pstr->mbs[byte_idx] = ch; + + if (BE (pstr->offsets_needed != 0, 0)) + pstr->offsets[byte_idx] = src_idx; + ++src_idx; + + /* And also cast it to wide char. */ + pstr->wcs[byte_idx++] = (wchar_t) ch; + if (BE (mbclen == (size_t) -1, 0)) + pstr->cur_state = prev_st; + } + else + { + /* The buffer doesn't have enough space, finish to build. */ + pstr->cur_state = prev_st; + break; + } + } + pstr->valid_len = byte_idx; + pstr->valid_raw_len = src_idx; + return REG_NOERROR; +} + +/* Skip characters until the index becomes greater than NEW_RAW_IDX. + Return the index. */ + +static Idx +internal_function +re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) +{ + mbstate_t prev_st; + Idx rawbuf_idx; + size_t mbclen; + wint_t wc = WEOF; + + /* Skip the characters which are not necessary to check. */ + for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; + rawbuf_idx < new_raw_idx;) + { + wchar_t wc2; + Idx remain_len; + remain_len = pstr->len - rawbuf_idx; + prev_st = pstr->cur_state; + mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, + remain_len, &pstr->cur_state); + if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 0)) + { + /* We treat these cases as a single byte character. */ + if (mbclen == 0 || remain_len == 0) + wc = L'\0'; + else + wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); + mbclen = 1; + pstr->cur_state = prev_st; + } + else + wc = wc2; + /* Then proceed the next character. */ + rawbuf_idx += mbclen; + } + *last_wc = wc; + return rawbuf_idx; +} +#endif /* RE_ENABLE_I18N */ + +/* Build the buffer PSTR->MBS, and apply the translation if we need. + This function is used in case of REG_ICASE. */ + +static void +internal_function +build_upper_buffer (re_string_t *pstr) +{ + Idx char_idx, end_idx; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) + { + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; + if (BE (pstr->trans != NULL, 0)) + ch = pstr->trans[ch]; + if (islower (ch)) + pstr->mbs[char_idx] = toupper (ch); + else + pstr->mbs[char_idx] = ch; + } + pstr->valid_len = char_idx; + pstr->valid_raw_len = char_idx; +} + +/* Apply TRANS to the buffer in PSTR. */ + +static void +internal_function +re_string_translate_buffer (re_string_t *pstr) +{ + Idx buf_idx, end_idx; + end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; + + for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) + { + int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; + pstr->mbs[buf_idx] = pstr->trans[ch]; + } + + pstr->valid_len = buf_idx; + pstr->valid_raw_len = buf_idx; +} + +/* This function re-construct the buffers. + Concretely, convert to wide character in case of pstr->mb_cur_max > 1, + convert to upper case in case of REG_ICASE, apply translation. */ + +static reg_errcode_t +internal_function +re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) +{ + Idx offset; + + if (BE (pstr->raw_mbs_idx <= idx, 0)) + offset = idx - pstr->raw_mbs_idx; + else + { + /* Reset buffer. */ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); +#endif /* RE_ENABLE_I18N */ + pstr->len = pstr->raw_len; + pstr->stop = pstr->raw_stop; + pstr->valid_len = 0; + pstr->raw_mbs_idx = 0; + pstr->valid_raw_len = 0; + pstr->offsets_needed = 0; + pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF + : CONTEXT_NEWLINE | CONTEXT_BEGBUF); + if (!pstr->mbs_allocated) + pstr->mbs = (unsigned char *) pstr->raw_mbs; + offset = idx; + } + + if (BE (offset != 0, 1)) + { + /* Should the already checked characters be kept? */ + if (BE (offset < pstr->valid_raw_len, 1)) + { + /* Yes, move them to the front of the buffer. */ +#ifdef RE_ENABLE_I18N + if (BE (pstr->offsets_needed, 0)) + { + Idx low = 0, high = pstr->valid_len, mid; + do + { + mid = (high + low) / 2; + if (pstr->offsets[mid] > offset) + high = mid; + else if (pstr->offsets[mid] < offset) + low = mid + 1; + else + break; + } + while (low < high); + if (pstr->offsets[mid] < offset) + ++mid; + pstr->tip_context = re_string_context_at (pstr, mid - 1, + eflags); + /* This can be quite complicated, so handle specially + only the common and easy case where the character with + different length representation of lower and upper + case is present at or after offset. */ + if (pstr->valid_len > offset + && mid == offset && pstr->offsets[mid] == offset) + { + memmove (pstr->wcs, pstr->wcs + offset, + (pstr->valid_len - offset) * sizeof (wint_t)); + memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; + for (low = 0; low < pstr->valid_len; low++) + pstr->offsets[low] = pstr->offsets[low + offset] - offset; + } + else + { + /* Otherwise, just find out how long the partial multibyte + character at offset is and fill it with WEOF/255. */ + pstr->len = pstr->raw_len - idx + offset; + pstr->stop = pstr->raw_stop - idx + offset; + pstr->offsets_needed = 0; + while (mid > 0 && pstr->offsets[mid - 1] == offset) + --mid; + while (mid < pstr->valid_len) + if (pstr->wcs[mid] != WEOF) + break; + else + ++mid; + if (mid == pstr->valid_len) + pstr->valid_len = 0; + else + { + pstr->valid_len = pstr->offsets[mid] - offset; + if (pstr->valid_len) + { + for (low = 0; low < pstr->valid_len; ++low) + pstr->wcs[low] = WEOF; + memset (pstr->mbs, 255, pstr->valid_len); + } + } + pstr->valid_raw_len = pstr->valid_len; + } + } + else +#endif + { + pstr->tip_context = re_string_context_at (pstr, offset - 1, + eflags); +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + memmove (pstr->wcs, pstr->wcs + offset, + (pstr->valid_len - offset) * sizeof (wint_t)); +#endif /* RE_ENABLE_I18N */ + if (BE (pstr->mbs_allocated, 0)) + memmove (pstr->mbs, pstr->mbs + offset, + pstr->valid_len - offset); + pstr->valid_len -= offset; + pstr->valid_raw_len -= offset; +#if DEBUG + assert (pstr->valid_len > 0); +#endif + } + } + else + { +#ifdef RE_ENABLE_I18N + /* No, skip all characters until IDX. */ + Idx prev_valid_len = pstr->valid_len; + + if (BE (pstr->offsets_needed, 0)) + { + pstr->len = pstr->raw_len - idx + offset; + pstr->stop = pstr->raw_stop - idx + offset; + pstr->offsets_needed = 0; + } +#endif + pstr->valid_len = 0; +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + Idx wcs_idx; + wint_t wc = WEOF; + + if (pstr->is_utf8) + { + const unsigned char *raw, *p, *end; + + /* Special case UTF-8. Multi-byte chars start with any + byte other than 0x80 - 0xbf. */ + raw = pstr->raw_mbs + pstr->raw_mbs_idx; + end = raw + (offset - pstr->mb_cur_max); + if (end < pstr->raw_mbs) + end = pstr->raw_mbs; + p = raw + offset - 1; +#ifdef _LIBC + /* We know the wchar_t encoding is UCS4, so for the simple + case, ASCII characters, skip the conversion step. */ + if (isascii (*p) && BE (pstr->trans == NULL, 1)) + { + memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); + /* pstr->valid_len = 0; */ + wc = (wchar_t) *p; + } + else +#endif + for (; p >= end; --p) + if ((*p & 0xc0) != 0x80) + { + mbstate_t cur_state; + wchar_t wc2; + Idx mlen = raw + pstr->len - p; + unsigned char buf[6]; + size_t mbclen; + + if (BE (pstr->trans != NULL, 0)) + { + int i = mlen < 6 ? mlen : 6; + while (--i >= 0) + buf[i] = pstr->trans[p[i]]; + } + /* XXX Don't use mbrtowc, we know which conversion + to use (UTF-8 -> UCS4). */ + memset (&cur_state, 0, sizeof (cur_state)); + mbclen = __mbrtowc (&wc2, (const char *) p, mlen, + &cur_state); + if (raw + offset - p <= mbclen + && mbclen < (size_t) -2) + { + memset (&pstr->cur_state, '\0', + sizeof (mbstate_t)); + pstr->valid_len = mbclen - (raw + offset - p); + wc = wc2; + } + break; + } + } + + if (wc == WEOF) + pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; + if (wc == WEOF) + pstr->tip_context + = re_string_context_at (pstr, prev_valid_len - 1, eflags); + else + pstr->tip_context = ((BE (pstr->word_ops_used != 0, 0) + && IS_WIDE_WORD_CHAR (wc)) + ? CONTEXT_WORD + : ((IS_WIDE_NEWLINE (wc) + && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + if (BE (pstr->valid_len, 0)) + { + for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) + pstr->wcs[wcs_idx] = WEOF; + if (pstr->mbs_allocated) + memset (pstr->mbs, 255, pstr->valid_len); + } + pstr->valid_raw_len = pstr->valid_len; + } + else +#endif /* RE_ENABLE_I18N */ + { + int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; + pstr->valid_raw_len = 0; + if (pstr->trans) + c = pstr->trans[c]; + pstr->tip_context = (bitset_contain (pstr->word_char, c) + ? CONTEXT_WORD + : ((IS_NEWLINE (c) && pstr->newline_anchor) + ? CONTEXT_NEWLINE : 0)); + } + } + if (!BE (pstr->mbs_allocated, 0)) + pstr->mbs += offset; + } + pstr->raw_mbs_idx = idx; + pstr->len -= offset; + pstr->stop -= offset; + + /* Then build the buffers. */ +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + if (pstr->icase) + { + reg_errcode_t ret = build_wcs_upper_buffer (pstr); + if (BE (ret != REG_NOERROR, 0)) + return ret; + } + else + build_wcs_buffer (pstr); + } + else +#endif /* RE_ENABLE_I18N */ + if (BE (pstr->mbs_allocated, 0)) + { + if (pstr->icase) + build_upper_buffer (pstr); + else if (pstr->trans != NULL) + re_string_translate_buffer (pstr); + } + else + pstr->valid_len = pstr->len; + + pstr->cur_idx = 0; + return REG_NOERROR; +} + +static unsigned char +internal_function __attribute ((pure)) +re_string_peek_byte_case (const re_string_t *pstr, Idx idx) +{ + int ch; + Idx off; + + /* Handle the common (easiest) cases first. */ + if (BE (!pstr->mbs_allocated, 1)) + return re_string_peek_byte (pstr, idx); + +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1 + && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) + return re_string_peek_byte (pstr, idx); +#endif + + off = pstr->cur_idx + idx; +#ifdef RE_ENABLE_I18N + if (pstr->offsets_needed) + off = pstr->offsets[off]; +#endif + + ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; + +#ifdef RE_ENABLE_I18N + /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I + this function returns CAPITAL LETTER I instead of first byte of + DOTLESS SMALL LETTER I. The latter would confuse the parser, + since peek_byte_case doesn't advance cur_idx in any way. */ + if (pstr->offsets_needed && !isascii (ch)) + return re_string_peek_byte (pstr, idx); +#endif + + return ch; +} + +static unsigned char +internal_function __attribute ((pure)) +re_string_fetch_byte_case (re_string_t *pstr) +{ + if (BE (!pstr->mbs_allocated, 1)) + return re_string_fetch_byte (pstr); + +#ifdef RE_ENABLE_I18N + if (pstr->offsets_needed) + { + Idx off; + int ch; + + /* For tr_TR.UTF-8 [[:islower:]] there is + [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip + in that case the whole multi-byte character and return + the original letter. On the other side, with + [[: DOTLESS SMALL LETTER I return [[:I, as doing + anything else would complicate things too much. */ + + if (!re_string_first_byte (pstr, pstr->cur_idx)) + return re_string_fetch_byte (pstr); + + off = pstr->offsets[pstr->cur_idx]; + ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; + + if (! isascii (ch)) + return re_string_fetch_byte (pstr); + + re_string_skip_bytes (pstr, + re_string_char_size_at (pstr, pstr->cur_idx)); + return ch; + } +#endif + + return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; +} + +static void +internal_function +re_string_destruct (re_string_t *pstr) +{ +#ifdef RE_ENABLE_I18N + re_free (pstr->wcs); + re_free (pstr->offsets); +#endif /* RE_ENABLE_I18N */ + if (pstr->mbs_allocated) + re_free (pstr->mbs); +} + +/* Return the context at IDX in INPUT. */ + +static unsigned int +internal_function +re_string_context_at (const re_string_t *input, Idx idx, int eflags) +{ + int c; + if (BE (! REG_VALID_INDEX (idx), 0)) + /* In this case, we use the value stored in input->tip_context, + since we can't know the character in input->mbs[-1] here. */ + return input->tip_context; + if (BE (idx == input->len, 0)) + return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF + : CONTEXT_NEWLINE | CONTEXT_ENDBUF); +#ifdef RE_ENABLE_I18N + if (input->mb_cur_max > 1) + { + wint_t wc; + Idx wc_idx = idx; + while(input->wcs[wc_idx] == WEOF) + { +#ifdef DEBUG + /* It must not happen. */ + assert (REG_VALID_INDEX (wc_idx)); +#endif + --wc_idx; + if (! REG_VALID_INDEX (wc_idx)) + return input->tip_context; + } + wc = input->wcs[wc_idx]; + if (BE (input->word_ops_used != 0, 0) && IS_WIDE_WORD_CHAR (wc)) + return CONTEXT_WORD; + return (IS_WIDE_NEWLINE (wc) && input->newline_anchor + ? CONTEXT_NEWLINE : 0); + } + else +#endif + { + c = re_string_byte_at (input, idx); + if (bitset_contain (input->word_char, c)) + return CONTEXT_WORD; + return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; + } +} + +/* Functions for set operation. */ + +static reg_errcode_t +internal_function +re_node_set_alloc (re_node_set *set, Idx size) +{ + set->alloc = size; + set->nelem = 0; + set->elems = re_malloc (Idx, size); + if (BE (set->elems == NULL, 0)) + return REG_ESPACE; + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +re_node_set_init_1 (re_node_set *set, Idx elem) +{ + set->alloc = 1; + set->nelem = 1; + set->elems = re_malloc (Idx, 1); + if (BE (set->elems == NULL, 0)) + { + set->alloc = set->nelem = 0; + return REG_ESPACE; + } + set->elems[0] = elem; + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) +{ + set->alloc = 2; + set->elems = re_malloc (Idx, 2); + if (BE (set->elems == NULL, 0)) + return REG_ESPACE; + if (elem1 == elem2) + { + set->nelem = 1; + set->elems[0] = elem1; + } + else + { + set->nelem = 2; + if (elem1 < elem2) + { + set->elems[0] = elem1; + set->elems[1] = elem2; + } + else + { + set->elems[0] = elem2; + set->elems[1] = elem1; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +re_node_set_init_copy (re_node_set *dest, const re_node_set *src) +{ + dest->nelem = src->nelem; + if (src->nelem > 0) + { + dest->alloc = dest->nelem; + dest->elems = re_malloc (Idx, dest->alloc); + if (BE (dest->elems == NULL, 0)) + { + dest->alloc = dest->nelem = 0; + return REG_ESPACE; + } + memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); + } + else + re_node_set_init_empty (dest); + return REG_NOERROR; +} + +/* Calculate the intersection of the sets SRC1 and SRC2. And merge it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. + Note: We assume dest->elems is NULL, when dest->alloc is 0. */ + +static reg_errcode_t +internal_function +re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, + const re_node_set *src2) +{ + Idx i1, i2, is, id, delta, sbase; + if (src1->nelem == 0 || src2->nelem == 0) + return REG_NOERROR; + + /* We need dest->nelem + 2 * elems_in_intersection; this is a + conservative estimate. */ + if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) + { + Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; + Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); + if (BE (new_elems == NULL, 0)) + return REG_ESPACE; + dest->elems = new_elems; + dest->alloc = new_alloc; + } + + /* Find the items in the intersection of SRC1 and SRC2, and copy + into the top of DEST those that are not already in DEST itself. */ + sbase = dest->nelem + src1->nelem + src2->nelem; + i1 = src1->nelem - 1; + i2 = src2->nelem - 1; + id = dest->nelem - 1; + for (;;) + { + if (src1->elems[i1] == src2->elems[i2]) + { + /* Try to find the item in DEST. Maybe we could binary search? */ + while (REG_VALID_INDEX (id) && dest->elems[id] > src1->elems[i1]) + --id; + + if (! REG_VALID_INDEX (id) || dest->elems[id] != src1->elems[i1]) + dest->elems[--sbase] = src1->elems[i1]; + + if (! REG_VALID_INDEX (--i1) || ! REG_VALID_INDEX (--i2)) + break; + } + + /* Lower the highest of the two items. */ + else if (src1->elems[i1] < src2->elems[i2]) + { + if (! REG_VALID_INDEX (--i2)) + break; + } + else + { + if (! REG_VALID_INDEX (--i1)) + break; + } + } + + id = dest->nelem - 1; + is = dest->nelem + src1->nelem + src2->nelem - 1; + delta = is - sbase + 1; + + /* Now copy. When DELTA becomes zero, the remaining + DEST elements are already in place; this is more or + less the same loop that is in re_node_set_merge. */ + dest->nelem += delta; + if (delta > 0 && REG_VALID_INDEX (id)) + for (;;) + { + if (dest->elems[is] > dest->elems[id]) + { + /* Copy from the top. */ + dest->elems[id + delta--] = dest->elems[is--]; + if (delta == 0) + break; + } + else + { + /* Slide from the bottom. */ + dest->elems[id + delta] = dest->elems[id]; + if (! REG_VALID_INDEX (--id)) + break; + } + } + + /* Copy remaining SRC elements. */ + memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); + + return REG_NOERROR; +} + +/* Calculate the union set of the sets SRC1 and SRC2. And store it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ + +static reg_errcode_t +internal_function +re_node_set_init_union (re_node_set *dest, const re_node_set *src1, + const re_node_set *src2) +{ + Idx i1, i2, id; + if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) + { + dest->alloc = src1->nelem + src2->nelem; + dest->elems = re_malloc (Idx, dest->alloc); + if (BE (dest->elems == NULL, 0)) + return REG_ESPACE; + } + else + { + if (src1 != NULL && src1->nelem > 0) + return re_node_set_init_copy (dest, src1); + else if (src2 != NULL && src2->nelem > 0) + return re_node_set_init_copy (dest, src2); + else + re_node_set_init_empty (dest); + return REG_NOERROR; + } + for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) + { + if (src1->elems[i1] > src2->elems[i2]) + { + dest->elems[id++] = src2->elems[i2++]; + continue; + } + if (src1->elems[i1] == src2->elems[i2]) + ++i2; + dest->elems[id++] = src1->elems[i1++]; + } + if (i1 < src1->nelem) + { + memcpy (dest->elems + id, src1->elems + i1, + (src1->nelem - i1) * sizeof (Idx)); + id += src1->nelem - i1; + } + else if (i2 < src2->nelem) + { + memcpy (dest->elems + id, src2->elems + i2, + (src2->nelem - i2) * sizeof (Idx)); + id += src2->nelem - i2; + } + dest->nelem = id; + return REG_NOERROR; +} + +/* Calculate the union set of the sets DEST and SRC. And store it to + DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ + +static reg_errcode_t +internal_function +re_node_set_merge (re_node_set *dest, const re_node_set *src) +{ + Idx is, id, sbase, delta; + if (src == NULL || src->nelem == 0) + return REG_NOERROR; + if (dest->alloc < 2 * src->nelem + dest->nelem) + { + Idx new_alloc = 2 * (src->nelem + dest->alloc); + Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); + if (BE (new_buffer == NULL, 0)) + return REG_ESPACE; + dest->elems = new_buffer; + dest->alloc = new_alloc; + } + + if (BE (dest->nelem == 0, 0)) + { + dest->nelem = src->nelem; + memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); + return REG_NOERROR; + } + + /* Copy into the top of DEST the items of SRC that are not + found in DEST. Maybe we could binary search in DEST? */ + for (sbase = dest->nelem + 2 * src->nelem, + is = src->nelem - 1, id = dest->nelem - 1; + REG_VALID_INDEX (is) && REG_VALID_INDEX (id); ) + { + if (dest->elems[id] == src->elems[is]) + is--, id--; + else if (dest->elems[id] < src->elems[is]) + dest->elems[--sbase] = src->elems[is--]; + else /* if (dest->elems[id] > src->elems[is]) */ + --id; + } + + if (REG_VALID_INDEX (is)) + { + /* If DEST is exhausted, the remaining items of SRC must be unique. */ + sbase -= is + 1; + memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); + } + + id = dest->nelem - 1; + is = dest->nelem + 2 * src->nelem - 1; + delta = is - sbase + 1; + if (delta == 0) + return REG_NOERROR; + + /* Now copy. When DELTA becomes zero, the remaining + DEST elements are already in place. */ + dest->nelem += delta; + for (;;) + { + if (dest->elems[is] > dest->elems[id]) + { + /* Copy from the top. */ + dest->elems[id + delta--] = dest->elems[is--]; + if (delta == 0) + break; + } + else + { + /* Slide from the bottom. */ + dest->elems[id + delta] = dest->elems[id]; + if (! REG_VALID_INDEX (--id)) + { + /* Copy remaining SRC elements. */ + memcpy (dest->elems, dest->elems + sbase, + delta * sizeof (Idx)); + break; + } + } + } + + return REG_NOERROR; +} + +/* Insert the new element ELEM to the re_node_set* SET. + SET should not already have ELEM. + Return true if successful. */ + +static bool +internal_function +re_node_set_insert (re_node_set *set, Idx elem) +{ + Idx idx; + /* In case the set is empty. */ + if (set->alloc == 0) + return BE (re_node_set_init_1 (set, elem) == REG_NOERROR, 1); + + if (BE (set->nelem, 0) == 0) + { + /* We already guaranteed above that set->alloc != 0. */ + set->elems[0] = elem; + ++set->nelem; + return true; + } + + /* Realloc if we need. */ + if (set->alloc == set->nelem) + { + Idx *new_elems; + set->alloc = set->alloc * 2; + new_elems = re_realloc (set->elems, Idx, set->alloc); + if (BE (new_elems == NULL, 0)) + return false; + set->elems = new_elems; + } + + /* Move the elements which follows the new element. Test the + first element separately to skip a check in the inner loop. */ + if (elem < set->elems[0]) + { + idx = 0; + for (idx = set->nelem; idx > 0; idx--) + set->elems[idx] = set->elems[idx - 1]; + } + else + { + for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) + set->elems[idx] = set->elems[idx - 1]; + } + + /* Insert the new element. */ + set->elems[idx] = elem; + ++set->nelem; + return true; +} + +/* Insert the new element ELEM to the re_node_set* SET. + SET should not already have any element greater than or equal to ELEM. + Return true if successful. */ + +static bool +internal_function +re_node_set_insert_last (re_node_set *set, Idx elem) +{ + /* Realloc if we need. */ + if (set->alloc == set->nelem) + { + Idx *new_elems; + set->alloc = (set->alloc + 1) * 2; + new_elems = re_realloc (set->elems, Idx, set->alloc); + if (BE (new_elems == NULL, 0)) + return false; + set->elems = new_elems; + } + + /* Insert the new element. */ + set->elems[set->nelem++] = elem; + return true; +} + +/* Compare two node sets SET1 and SET2. + Return true if SET1 and SET2 are equivalent. */ + +static bool +internal_function __attribute ((pure)) +re_node_set_compare (const re_node_set *set1, const re_node_set *set2) +{ + Idx i; + if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) + return false; + for (i = set1->nelem ; REG_VALID_INDEX (--i) ; ) + if (set1->elems[i] != set2->elems[i]) + return false; + return true; +} + +/* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ + +static Idx +internal_function __attribute ((pure)) +re_node_set_contains (const re_node_set *set, Idx elem) +{ + __re_size_t idx, right, mid; + if (! REG_VALID_NONZERO_INDEX (set->nelem)) + return 0; + + /* Binary search the element. */ + idx = 0; + right = set->nelem - 1; + while (idx < right) + { + mid = (idx + right) / 2; + if (set->elems[mid] < elem) + idx = mid + 1; + else + right = mid; + } + return set->elems[idx] == elem ? idx + 1 : 0; +} + +static void +internal_function +re_node_set_remove_at (re_node_set *set, Idx idx) +{ + if (idx < 0 || idx >= set->nelem) + return; + --set->nelem; + for (; idx < set->nelem; idx++) + set->elems[idx] = set->elems[idx + 1]; +} + + +/* Add the token TOKEN to dfa->nodes, and return the index of the token. + Or return REG_MISSING if an error occurred. */ + +static Idx +internal_function +re_dfa_add_node (re_dfa_t *dfa, re_token_t token) +{ + if (BE (dfa->nodes_len >= dfa->nodes_alloc, 0)) + { + size_t new_nodes_alloc = dfa->nodes_alloc * 2; + Idx *new_nexts, *new_indices; + re_node_set *new_edests, *new_eclosures; + re_token_t *new_nodes; + size_t max_object_size = + MAX (sizeof (re_token_t), + MAX (sizeof (re_node_set), + sizeof (Idx))); + + /* Avoid overflows. */ + if (BE (SIZE_MAX / 2 / max_object_size < dfa->nodes_alloc, 0)) + return REG_MISSING; + + new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); + if (BE (new_nodes == NULL, 0)) + return REG_MISSING; + dfa->nodes = new_nodes; + new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); + new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); + new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); + new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); + if (BE (new_nexts == NULL || new_indices == NULL + || new_edests == NULL || new_eclosures == NULL, 0)) + return REG_MISSING; + dfa->nexts = new_nexts; + dfa->org_indices = new_indices; + dfa->edests = new_edests; + dfa->eclosures = new_eclosures; + dfa->nodes_alloc = new_nodes_alloc; + } + dfa->nodes[dfa->nodes_len] = token; + dfa->nodes[dfa->nodes_len].constraint = 0; +#ifdef RE_ENABLE_I18N + { + int type = token.type; + dfa->nodes[dfa->nodes_len].accept_mb = + (type == OP_PERIOD && dfa->mb_cur_max > 1) || type == COMPLEX_BRACKET; + } +#endif + dfa->nexts[dfa->nodes_len] = REG_MISSING; + re_node_set_init_empty (dfa->edests + dfa->nodes_len); + re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); + return dfa->nodes_len++; +} + +static inline re_hashval_t +internal_function +calc_state_hash (const re_node_set *nodes, unsigned int context) +{ + re_hashval_t hash = nodes->nelem + context; + Idx i; + for (i = 0 ; i < nodes->nelem ; i++) + hash += nodes->elems[i]; + return hash; +} + +/* Search for the state whose node_set is equivalent to NODES. + Return the pointer to the state, if we found it in the DFA. + Otherwise create the new one and return it. In case of an error + return NULL and set the error code in ERR. + Note: - We assume NULL as the invalid state, then it is possible that + return value is NULL and ERR is REG_NOERROR. + - We never return non-NULL value in case of any errors, it is for + optimization. */ + +static re_dfastate_t * +internal_function +re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, + const re_node_set *nodes) +{ + re_hashval_t hash; + re_dfastate_t *new_state; + struct re_state_table_entry *spot; + Idx i; +#ifdef lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (BE (nodes->nelem == 0, 0)) + { + *err = REG_NOERROR; + return NULL; + } + hash = calc_state_hash (nodes, 0); + spot = dfa->state_table + (hash & dfa->state_hash_mask); + + for (i = 0 ; i < spot->num ; i++) + { + re_dfastate_t *state = spot->array[i]; + if (hash != state->hash) + continue; + if (re_node_set_compare (&state->nodes, nodes)) + return state; + } + + /* There are no appropriate state in the dfa, create the new one. */ + new_state = create_ci_newstate (dfa, nodes, hash); + if (BE (new_state == NULL, 0)) + *err = REG_ESPACE; + + return new_state; +} + +/* Search for the state whose node_set is equivalent to NODES and + whose context is equivalent to CONTEXT. + Return the pointer to the state, if we found it in the DFA. + Otherwise create the new one and return it. In case of an error + return NULL and set the error code in ERR. + Note: - We assume NULL as the invalid state, then it is possible that + return value is NULL and ERR is REG_NOERROR. + - We never return non-NULL value in case of any errors, it is for + optimization. */ + +static re_dfastate_t * +internal_function +re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, + const re_node_set *nodes, unsigned int context) +{ + re_hashval_t hash; + re_dfastate_t *new_state; + struct re_state_table_entry *spot; + Idx i; +#ifdef lint + /* Suppress bogus uninitialized-variable warnings. */ + *err = REG_NOERROR; +#endif + if (nodes->nelem == 0) + { + *err = REG_NOERROR; + return NULL; + } + hash = calc_state_hash (nodes, context); + spot = dfa->state_table + (hash & dfa->state_hash_mask); + + for (i = 0 ; i < spot->num ; i++) + { + re_dfastate_t *state = spot->array[i]; + if (state->hash == hash + && state->context == context + && re_node_set_compare (state->entrance_nodes, nodes)) + return state; + } + /* There are no appropriate state in `dfa', create the new one. */ + new_state = create_cd_newstate (dfa, nodes, context, hash); + if (BE (new_state == NULL, 0)) + *err = REG_ESPACE; + + return new_state; +} + +/* Finish initialization of the new state NEWSTATE, and using its hash value + HASH put in the appropriate bucket of DFA's state table. Return value + indicates the error code if failed. */ + +static reg_errcode_t +register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, + re_hashval_t hash) +{ + struct re_state_table_entry *spot; + reg_errcode_t err; + Idx i; + + newstate->hash = hash; + err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); + if (BE (err != REG_NOERROR, 0)) + return REG_ESPACE; + for (i = 0; i < newstate->nodes.nelem; i++) + { + Idx elem = newstate->nodes.elems[i]; + if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) + if (BE (! re_node_set_insert_last (&newstate->non_eps_nodes, elem), 0)) + return REG_ESPACE; + } + + spot = dfa->state_table + (hash & dfa->state_hash_mask); + if (BE (spot->alloc <= spot->num, 0)) + { + Idx new_alloc = 2 * spot->num + 2; + re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, + new_alloc); + if (BE (new_array == NULL, 0)) + return REG_ESPACE; + spot->array = new_array; + spot->alloc = new_alloc; + } + spot->array[spot->num++] = newstate; + return REG_NOERROR; +} + +static void +free_state (re_dfastate_t *state) +{ + re_node_set_free (&state->non_eps_nodes); + re_node_set_free (&state->inveclosure); + if (state->entrance_nodes != &state->nodes) + { + re_node_set_free (state->entrance_nodes); + re_free (state->entrance_nodes); + } + re_node_set_free (&state->nodes); + re_free (state->word_trtable); + re_free (state->trtable); + re_free (state); +} + +/* Create the new state which is independ of contexts. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +internal_function +create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, + re_hashval_t hash) +{ + Idx i; + reg_errcode_t err; + re_dfastate_t *newstate; + + newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + if (BE (newstate == NULL, 0)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_free (newstate); + return NULL; + } + + newstate->entrance_nodes = &newstate->nodes; + for (i = 0 ; i < nodes->nelem ; i++) + { + re_token_t *node = dfa->nodes + nodes->elems[i]; + re_token_type_t type = node->type; + if (type == CHARACTER && !node->constraint) + continue; +#ifdef RE_ENABLE_I18N + newstate->accept_mb |= node->accept_mb; +#endif /* RE_ENABLE_I18N */ + + /* If the state has the halt node, the state is a halt state. */ + if (type == END_OF_RE) + newstate->halt = 1; + else if (type == OP_BACK_REF) + newstate->has_backref = 1; + else if (type == ANCHOR || node->constraint) + newstate->has_constraint = 1; + } + err = register_state (dfa, newstate, hash); + if (BE (err != REG_NOERROR, 0)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} + +/* Create the new state which is depend on the context CONTEXT. + Return the new state if succeeded, otherwise return NULL. */ + +static re_dfastate_t * +internal_function +create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, + unsigned int context, re_hashval_t hash) +{ + Idx i, nctx_nodes = 0; + reg_errcode_t err; + re_dfastate_t *newstate; + + newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); + if (BE (newstate == NULL, 0)) + return NULL; + err = re_node_set_init_copy (&newstate->nodes, nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_free (newstate); + return NULL; + } + + newstate->context = context; + newstate->entrance_nodes = &newstate->nodes; + + for (i = 0 ; i < nodes->nelem ; i++) + { + re_token_t *node = dfa->nodes + nodes->elems[i]; + re_token_type_t type = node->type; + unsigned int constraint = node->constraint; + + if (type == CHARACTER && !constraint) + continue; +#ifdef RE_ENABLE_I18N + newstate->accept_mb |= node->accept_mb; +#endif /* RE_ENABLE_I18N */ + + /* If the state has the halt node, the state is a halt state. */ + if (type == END_OF_RE) + newstate->halt = 1; + else if (type == OP_BACK_REF) + newstate->has_backref = 1; + + if (constraint) + { + if (newstate->entrance_nodes == &newstate->nodes) + { + newstate->entrance_nodes = re_malloc (re_node_set, 1); + if (BE (newstate->entrance_nodes == NULL, 0)) + { + free_state (newstate); + return NULL; + } + re_node_set_init_copy (newstate->entrance_nodes, nodes); + nctx_nodes = 0; + newstate->has_constraint = 1; + } + + if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) + { + re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); + ++nctx_nodes; + } + } + } + err = register_state (dfa, newstate, hash); + if (BE (err != REG_NOERROR, 0)) + { + free_state (newstate); + newstate = NULL; + } + return newstate; +} diff --git a/coreseek/m4-1.4.13/lib/regex_internal.h b/coreseek/m4-1.4.13/lib/regex_internal.h new file mode 100644 index 0000000..dc322ec --- /dev/null +++ b/coreseek/m4-1.4.13/lib/regex_internal.h @@ -0,0 +1,855 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _REGEX_INTERNAL_H +#define _REGEX_INTERNAL_H 1 + +#include +#include +#include +#include +#include +#include + +#ifdef _LIBC +# include +#else +# include "localcharset.h" +#endif +#if defined HAVE_LOCALE_H || defined _LIBC +# include +#endif + +#include +#include +#include +#if defined _LIBC +# include +#else +# define __libc_lock_init(NAME) do { } while (0) +# define __libc_lock_lock(NAME) do { } while (0) +# define __libc_lock_unlock(NAME) do { } while (0) +#endif + +/* In case that the system doesn't have isblank(). */ +#if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) +# define isblank(ch) ((ch) == ' ' || (ch) == '\t') +#endif + +#ifdef _LIBC +# ifndef _RE_DEFINE_LOCALE_FUNCTIONS +# define _RE_DEFINE_LOCALE_FUNCTIONS 1 +# include +# include +# include +# endif +#endif + +/* This is for other GNU distributions with internationalized messages. */ +#if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC +# include +# ifdef _LIBC +# undef gettext +# define gettext(msgid) \ + INTUSE(__dcgettext) (_libc_intl_domainname, msgid, LC_MESSAGES) +# endif +#else +# define gettext(msgid) (msgid) +#endif + +#ifndef gettext_noop +/* This define is so xgettext can find the internationalizable + strings. */ +# define gettext_noop(String) String +#endif + +/* For loser systems without the definition. */ +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +#if (defined MB_CUR_MAX && HAVE_LOCALE_H && HAVE_WCTYPE_H && HAVE_ISWCTYPE && HAVE_WCSCOLL) || _LIBC +# define RE_ENABLE_I18N +#endif + +#if __GNUC__ >= 3 +# define BE(expr, val) __builtin_expect (expr, val) +#else +# define BE(expr, val) (expr) +# ifdef _LIBC +# define inline +# endif +#endif + +/* Number of ASCII characters. */ +#define ASCII_CHARS 0x80 + +/* Number of single byte characters. */ +#define SBC_MAX (UCHAR_MAX + 1) + +#define COLL_ELEM_LEN_MAX 8 + +/* The character which represents newline. */ +#define NEWLINE_CHAR '\n' +#define WIDE_NEWLINE_CHAR L'\n' + +/* Rename to standard API for using out of glibc. */ +#ifndef _LIBC +# define __wctype wctype +# define __iswctype iswctype +# define __btowc btowc +# define __wcrtomb wcrtomb +# define __mbrtowc mbrtowc +# define __regfree regfree +# define attribute_hidden +#endif /* not _LIBC */ + +#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define __attribute(arg) __attribute__ (arg) +#else +# define __attribute(arg) +#endif + +typedef __re_idx_t Idx; + +/* Special return value for failure to match. */ +#define REG_MISSING ((Idx) -1) + +/* Special return value for internal error. */ +#define REG_ERROR ((Idx) -2) + +/* Test whether N is a valid index, and is not one of the above. */ +#ifdef _REGEX_LARGE_OFFSETS +# define REG_VALID_INDEX(n) ((Idx) (n) < REG_ERROR) +#else +# define REG_VALID_INDEX(n) (0 <= (n)) +#endif + +/* Test whether N is a valid nonzero index. */ +#ifdef _REGEX_LARGE_OFFSETS +# define REG_VALID_NONZERO_INDEX(n) ((Idx) ((n) - 1) < (Idx) (REG_ERROR - 1)) +#else +# define REG_VALID_NONZERO_INDEX(n) (0 < (n)) +#endif + +/* A hash value, suitable for computing hash tables. */ +typedef __re_size_t re_hashval_t; + +/* An integer used to represent a set of bits. It must be unsigned, + and must be at least as wide as unsigned int. */ +typedef unsigned long int bitset_word_t; +/* All bits set in a bitset_word_t. */ +#define BITSET_WORD_MAX ULONG_MAX + +/* Number of bits in a bitset_word_t. For portability to hosts with + padding bits, do not use '(sizeof (bitset_word_t) * CHAR_BIT)'; + instead, deduce it directly from BITSET_WORD_MAX. Avoid + greater-than-32-bit integers and unconditional shifts by more than + 31 bits, as they're not portable. */ +#if BITSET_WORD_MAX == 0xffffffffUL +# define BITSET_WORD_BITS 32 +#elif BITSET_WORD_MAX >> 31 >> 4 == 1 +# define BITSET_WORD_BITS 36 +#elif BITSET_WORD_MAX >> 31 >> 16 == 1 +# define BITSET_WORD_BITS 48 +#elif BITSET_WORD_MAX >> 31 >> 28 == 1 +# define BITSET_WORD_BITS 60 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 1 == 1 +# define BITSET_WORD_BITS 64 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 9 == 1 +# define BITSET_WORD_BITS 72 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 3 == 1 +# define BITSET_WORD_BITS 128 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 == 1 +# define BITSET_WORD_BITS 256 +#elif BITSET_WORD_MAX >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 31 >> 7 > 1 +# define BITSET_WORD_BITS 257 /* any value > SBC_MAX will do here */ +# if BITSET_WORD_BITS <= SBC_MAX +# error "Invalid SBC_MAX" +# endif +#else +# error "Add case for new bitset_word_t size" +#endif + +/* Number of bitset_word_t values in a bitset_t. */ +#define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) + +typedef bitset_word_t bitset_t[BITSET_WORDS]; +typedef bitset_word_t *re_bitset_ptr_t; +typedef const bitset_word_t *re_const_bitset_ptr_t; + +#define PREV_WORD_CONSTRAINT 0x0001 +#define PREV_NOTWORD_CONSTRAINT 0x0002 +#define NEXT_WORD_CONSTRAINT 0x0004 +#define NEXT_NOTWORD_CONSTRAINT 0x0008 +#define PREV_NEWLINE_CONSTRAINT 0x0010 +#define NEXT_NEWLINE_CONSTRAINT 0x0020 +#define PREV_BEGBUF_CONSTRAINT 0x0040 +#define NEXT_ENDBUF_CONSTRAINT 0x0080 +#define WORD_DELIM_CONSTRAINT 0x0100 +#define NOT_WORD_DELIM_CONSTRAINT 0x0200 + +typedef enum +{ + INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, + WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, + WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, + INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, + LINE_FIRST = PREV_NEWLINE_CONSTRAINT, + LINE_LAST = NEXT_NEWLINE_CONSTRAINT, + BUF_FIRST = PREV_BEGBUF_CONSTRAINT, + BUF_LAST = NEXT_ENDBUF_CONSTRAINT, + WORD_DELIM = WORD_DELIM_CONSTRAINT, + NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT +} re_context_type; + +typedef struct +{ + Idx alloc; + Idx nelem; + Idx *elems; +} re_node_set; + +typedef enum +{ + NON_TYPE = 0, + + /* Node type, These are used by token, node, tree. */ + CHARACTER = 1, + END_OF_RE = 2, + SIMPLE_BRACKET = 3, + OP_BACK_REF = 4, + OP_PERIOD = 5, +#ifdef RE_ENABLE_I18N + COMPLEX_BRACKET = 6, + OP_UTF8_PERIOD = 7, +#endif /* RE_ENABLE_I18N */ + + /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used + when the debugger shows values of this enum type. */ +#define EPSILON_BIT 8 + OP_OPEN_SUBEXP = EPSILON_BIT | 0, + OP_CLOSE_SUBEXP = EPSILON_BIT | 1, + OP_ALT = EPSILON_BIT | 2, + OP_DUP_ASTERISK = EPSILON_BIT | 3, + ANCHOR = EPSILON_BIT | 4, + + /* Tree type, these are used only by tree. */ + CONCAT = 16, + SUBEXP = 17, + + /* Token type, these are used only by token. */ + OP_DUP_PLUS = 18, + OP_DUP_QUESTION, + OP_OPEN_BRACKET, + OP_CLOSE_BRACKET, + OP_CHARSET_RANGE, + OP_OPEN_DUP_NUM, + OP_CLOSE_DUP_NUM, + OP_NON_MATCH_LIST, + OP_OPEN_COLL_ELEM, + OP_CLOSE_COLL_ELEM, + OP_OPEN_EQUIV_CLASS, + OP_CLOSE_EQUIV_CLASS, + OP_OPEN_CHAR_CLASS, + OP_CLOSE_CHAR_CLASS, + OP_WORD, + OP_NOTWORD, + OP_SPACE, + OP_NOTSPACE, + BACK_SLASH + +} re_token_type_t; + +#ifdef RE_ENABLE_I18N +typedef struct +{ + /* Multibyte characters. */ + wchar_t *mbchars; + + /* Collating symbols. */ +# ifdef _LIBC + int32_t *coll_syms; +# endif + + /* Equivalence classes. */ +# ifdef _LIBC + int32_t *equiv_classes; +# endif + + /* Range expressions. */ +# ifdef _LIBC + uint32_t *range_starts; + uint32_t *range_ends; +# else /* not _LIBC */ + wchar_t *range_starts; + wchar_t *range_ends; +# endif /* not _LIBC */ + + /* Character classes. */ + wctype_t *char_classes; + + /* If this character set is the non-matching list. */ + unsigned int non_match : 1; + + /* # of multibyte characters. */ + Idx nmbchars; + + /* # of collating symbols. */ + Idx ncoll_syms; + + /* # of equivalence classes. */ + Idx nequiv_classes; + + /* # of range expressions. */ + Idx nranges; + + /* # of character classes. */ + Idx nchar_classes; +} re_charset_t; +#endif /* RE_ENABLE_I18N */ + +typedef struct +{ + union + { + unsigned char c; /* for CHARACTER */ + re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ +#ifdef RE_ENABLE_I18N + re_charset_t *mbcset; /* for COMPLEX_BRACKET */ +#endif /* RE_ENABLE_I18N */ + Idx idx; /* for BACK_REF */ + re_context_type ctx_type; /* for ANCHOR */ + } opr; +#if __GNUC__ >= 2 && !__STRICT_ANSI__ + re_token_type_t type : 8; +#else + re_token_type_t type; +#endif + unsigned int constraint : 10; /* context constraint */ + unsigned int duplicated : 1; + unsigned int opt_subexp : 1; +#ifdef RE_ENABLE_I18N + unsigned int accept_mb : 1; + /* These 2 bits can be moved into the union if needed (e.g. if running out + of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ + unsigned int mb_partial : 1; +#endif + unsigned int word_char : 1; +} re_token_t; + +#define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) + +struct re_string_t +{ + /* Indicate the raw buffer which is the original string passed as an + argument of regexec(), re_search(), etc.. */ + const unsigned char *raw_mbs; + /* Store the multibyte string. In case of "case insensitive mode" like + REG_ICASE, upper cases of the string are stored, otherwise MBS points + the same address that RAW_MBS points. */ + unsigned char *mbs; +#ifdef RE_ENABLE_I18N + /* Store the wide character string which is corresponding to MBS. */ + wint_t *wcs; + Idx *offsets; + mbstate_t cur_state; +#endif + /* Index in RAW_MBS. Each character mbs[i] corresponds to + raw_mbs[raw_mbs_idx + i]. */ + Idx raw_mbs_idx; + /* The length of the valid characters in the buffers. */ + Idx valid_len; + /* The corresponding number of bytes in raw_mbs array. */ + Idx valid_raw_len; + /* The length of the buffers MBS and WCS. */ + Idx bufs_len; + /* The index in MBS, which is updated by re_string_fetch_byte. */ + Idx cur_idx; + /* length of RAW_MBS array. */ + Idx raw_len; + /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ + Idx len; + /* End of the buffer may be shorter than its length in the cases such + as re_match_2, re_search_2. Then, we use STOP for end of the buffer + instead of LEN. */ + Idx raw_stop; + /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ + Idx stop; + + /* The context of mbs[0]. We store the context independently, since + the context of mbs[0] may be different from raw_mbs[0], which is + the beginning of the input string. */ + unsigned int tip_context; + /* The translation passed as a part of an argument of re_compile_pattern. */ + RE_TRANSLATE_TYPE trans; + /* Copy of re_dfa_t's word_char. */ + re_const_bitset_ptr_t word_char; + /* true if REG_ICASE. */ + unsigned char icase; + unsigned char is_utf8; + unsigned char map_notascii; + unsigned char mbs_allocated; + unsigned char offsets_needed; + unsigned char newline_anchor; + unsigned char word_ops_used; + int mb_cur_max; +}; +typedef struct re_string_t re_string_t; + + +struct re_dfa_t; +typedef struct re_dfa_t re_dfa_t; + +#ifndef _LIBC +# if defined __i386__ && !defined __EMX__ +# define internal_function __attribute ((regparm (3), stdcall)) +# else +# define internal_function +# endif +#endif + +static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, + Idx new_buf_len) + internal_function; +#ifdef RE_ENABLE_I18N +static void build_wcs_buffer (re_string_t *pstr) internal_function; +static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr) + internal_function; +#endif /* RE_ENABLE_I18N */ +static void build_upper_buffer (re_string_t *pstr) internal_function; +static void re_string_translate_buffer (re_string_t *pstr) internal_function; +static unsigned int re_string_context_at (const re_string_t *input, Idx idx, + int eflags) + internal_function __attribute ((pure)); +#define re_string_peek_byte(pstr, offset) \ + ((pstr)->mbs[(pstr)->cur_idx + offset]) +#define re_string_fetch_byte(pstr) \ + ((pstr)->mbs[(pstr)->cur_idx++]) +#define re_string_first_byte(pstr, idx) \ + ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) +#define re_string_is_single_byte_char(pstr, idx) \ + ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ + || (pstr)->wcs[(idx) + 1] != WEOF)) +#define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) +#define re_string_cur_idx(pstr) ((pstr)->cur_idx) +#define re_string_get_buffer(pstr) ((pstr)->mbs) +#define re_string_length(pstr) ((pstr)->len) +#define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) +#define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) +#define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) + +#include + +#ifndef _LIBC +# if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. */ +# define __libc_use_alloca(n) ((n) < 4032) +# else +/* alloca is implemented with malloc, so just use malloc. */ +# define __libc_use_alloca(n) 0 +# endif +#endif + +#ifndef MAX +# define MAX(a,b) ((a) < (b) ? (b) : (a)) +#endif + +#define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) +#define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) +#define re_free(p) free (p) + +struct bin_tree_t +{ + struct bin_tree_t *parent; + struct bin_tree_t *left; + struct bin_tree_t *right; + struct bin_tree_t *first; + struct bin_tree_t *next; + + re_token_t token; + + /* `node_idx' is the index in dfa->nodes, if `type' == 0. + Otherwise `type' indicate the type of this node. */ + Idx node_idx; +}; +typedef struct bin_tree_t bin_tree_t; + +#define BIN_TREE_STORAGE_SIZE \ + ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) + +struct bin_tree_storage_t +{ + struct bin_tree_storage_t *next; + bin_tree_t data[BIN_TREE_STORAGE_SIZE]; +}; +typedef struct bin_tree_storage_t bin_tree_storage_t; + +#define CONTEXT_WORD 1 +#define CONTEXT_NEWLINE (CONTEXT_WORD << 1) +#define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) +#define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) + +#define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) +#define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) +#define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) +#define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) +#define IS_ORDINARY_CONTEXT(c) ((c) == 0) + +#define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') +#define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) +#define IS_WIDE_WORD_CHAR(ch) (iswalnum (ch) || (ch) == L'_') +#define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) + +#define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ + ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ + || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ + || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ + || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) + +#define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ + ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ + || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ + || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ + || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) + +struct re_dfastate_t +{ + re_hashval_t hash; + re_node_set nodes; + re_node_set non_eps_nodes; + re_node_set inveclosure; + re_node_set *entrance_nodes; + struct re_dfastate_t **trtable, **word_trtable; + unsigned int context : 4; + unsigned int halt : 1; + /* If this state can accept `multi byte'. + Note that we refer to multibyte characters, and multi character + collating elements as `multi byte'. */ + unsigned int accept_mb : 1; + /* If this state has backreference node(s). */ + unsigned int has_backref : 1; + unsigned int has_constraint : 1; +}; +typedef struct re_dfastate_t re_dfastate_t; + +struct re_state_table_entry +{ + Idx num; + Idx alloc; + re_dfastate_t **array; +}; + +/* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ + +typedef struct +{ + Idx next_idx; + Idx alloc; + re_dfastate_t **array; +} state_array_t; + +/* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ + +typedef struct +{ + Idx node; + Idx str_idx; /* The position NODE match at. */ + state_array_t path; +} re_sub_match_last_t; + +/* Store information about the node NODE whose type is OP_OPEN_SUBEXP. + And information about the node, whose type is OP_CLOSE_SUBEXP, + corresponding to NODE is stored in LASTS. */ + +typedef struct +{ + Idx str_idx; + Idx node; + state_array_t *path; + Idx alasts; /* Allocation size of LASTS. */ + Idx nlasts; /* The number of LASTS. */ + re_sub_match_last_t **lasts; +} re_sub_match_top_t; + +struct re_backref_cache_entry +{ + Idx node; + Idx str_idx; + Idx subexp_from; + Idx subexp_to; + char more; + char unused; + unsigned short int eps_reachable_subexps_map; +}; + +typedef struct +{ + /* The string object corresponding to the input string. */ + re_string_t input; +#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) + const re_dfa_t *const dfa; +#else + const re_dfa_t *dfa; +#endif + /* EFLAGS of the argument of regexec. */ + int eflags; + /* Where the matching ends. */ + Idx match_last; + Idx last_node; + /* The state log used by the matcher. */ + re_dfastate_t **state_log; + Idx state_log_top; + /* Back reference cache. */ + Idx nbkref_ents; + Idx abkref_ents; + struct re_backref_cache_entry *bkref_ents; + int max_mb_elem_len; + Idx nsub_tops; + Idx asub_tops; + re_sub_match_top_t **sub_tops; +} re_match_context_t; + +typedef struct +{ + re_dfastate_t **sifted_states; + re_dfastate_t **limited_states; + Idx last_node; + Idx last_str_idx; + re_node_set limits; +} re_sift_context_t; + +struct re_fail_stack_ent_t +{ + Idx idx; + Idx node; + regmatch_t *regs; + re_node_set eps_via_nodes; +}; + +struct re_fail_stack_t +{ + Idx num; + Idx alloc; + struct re_fail_stack_ent_t *stack; +}; + +struct re_dfa_t +{ + re_token_t *nodes; + size_t nodes_alloc; + size_t nodes_len; + Idx *nexts; + Idx *org_indices; + re_node_set *edests; + re_node_set *eclosures; + re_node_set *inveclosures; + struct re_state_table_entry *state_table; + re_dfastate_t *init_state; + re_dfastate_t *init_state_word; + re_dfastate_t *init_state_nl; + re_dfastate_t *init_state_begbuf; + bin_tree_t *str_tree; + bin_tree_storage_t *str_tree_storage; + re_bitset_ptr_t sb_char; + int str_tree_storage_idx; + + /* number of subexpressions `re_nsub' is in regex_t. */ + re_hashval_t state_hash_mask; + Idx init_node; + Idx nbackref; /* The number of backreference in this dfa. */ + + /* Bitmap expressing which backreference is used. */ + bitset_word_t used_bkref_map; + bitset_word_t completed_bkref_map; + + unsigned int has_plural_match : 1; + /* If this dfa has "multibyte node", which is a backreference or + a node which can accept multibyte character or multi character + collating element. */ + unsigned int has_mb_node : 1; + unsigned int is_utf8 : 1; + unsigned int map_notascii : 1; + unsigned int word_ops_used : 1; + int mb_cur_max; + bitset_t word_char; + reg_syntax_t syntax; + Idx *subexp_map; +#ifdef DEBUG + char* re_str; +#endif +#ifdef _LIBC + __libc_lock_define (, lock) +#endif +}; + +#define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) +#define re_node_set_remove(set,id) \ + (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) +#define re_node_set_empty(p) ((p)->nelem = 0) +#define re_node_set_free(set) re_free ((set)->elems) + + +typedef enum +{ + SB_CHAR, + MB_CHAR, + EQUIV_CLASS, + COLL_SYM, + CHAR_CLASS +} bracket_elem_type; + +typedef struct +{ + bracket_elem_type type; + union + { + unsigned char ch; + unsigned char *name; + wchar_t wch; + } opr; +} bracket_elem_t; + + +/* Inline functions for bitset_t operation. */ + +static inline void +bitset_set (bitset_t set, Idx i) +{ + set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; +} + +static inline void +bitset_clear (bitset_t set, Idx i) +{ + set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); +} + +static inline bool +bitset_contain (const bitset_t set, Idx i) +{ + return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; +} + +static inline void +bitset_empty (bitset_t set) +{ + memset (set, '\0', sizeof (bitset_t)); +} + +static inline void +bitset_set_all (bitset_t set) +{ + memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); + if (SBC_MAX % BITSET_WORD_BITS != 0) + set[BITSET_WORDS - 1] = + ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; +} + +static inline void +bitset_copy (bitset_t dest, const bitset_t src) +{ + memcpy (dest, src, sizeof (bitset_t)); +} + +static inline void +bitset_not (bitset_t set) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) + set[bitset_i] = ~set[bitset_i]; + if (SBC_MAX % BITSET_WORD_BITS != 0) + set[BITSET_WORDS - 1] = + ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) + & ~set[BITSET_WORDS - 1]); +} + +static inline void +bitset_merge (bitset_t dest, const bitset_t src) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) + dest[bitset_i] |= src[bitset_i]; +} + +static inline void +bitset_mask (bitset_t dest, const bitset_t src) +{ + int bitset_i; + for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) + dest[bitset_i] &= src[bitset_i]; +} + +#ifdef RE_ENABLE_I18N +/* Inline functions for re_string. */ +static inline int +internal_function __attribute ((pure)) +re_string_char_size_at (const re_string_t *pstr, Idx idx) +{ + int byte_idx; + if (pstr->mb_cur_max == 1) + return 1; + for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) + if (pstr->wcs[idx + byte_idx] != WEOF) + break; + return byte_idx; +} + +static inline wint_t +internal_function __attribute ((pure)) +re_string_wchar_at (const re_string_t *pstr, Idx idx) +{ + if (pstr->mb_cur_max == 1) + return (wint_t) pstr->mbs[idx]; + return (wint_t) pstr->wcs[idx]; +} + +static int +internal_function __attribute ((pure)) +re_string_elem_size_at (const re_string_t *pstr, Idx idx) +{ +# ifdef _LIBC + const unsigned char *p, *extra; + const int32_t *table, *indirect; + int32_t tmp; +# include + uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + + if (nrules != 0) + { + table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, + _NL_COLLATE_INDIRECTMB); + p = pstr->mbs + idx; + tmp = findidx (&p); + return p - pstr->mbs - idx; + } + else +# endif /* _LIBC */ + return 1; +} +#endif /* RE_ENABLE_I18N */ + +#endif /* _REGEX_INTERNAL_H */ diff --git a/coreseek/m4-1.4.13/lib/regexec.c b/coreseek/m4-1.4.13/lib/regexec.c new file mode 100644 index 0000000..5452ef7 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/regexec.c @@ -0,0 +1,4407 @@ +/* Extended regular expression matching and search library. + Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Isamu Hasegawa . + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, + Idx n) internal_function; +static void match_ctx_clean (re_match_context_t *mctx) internal_function; +static void match_ctx_free (re_match_context_t *cache) internal_function; +static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, + Idx str_idx, Idx from, Idx to) + internal_function; +static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) + internal_function; +static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, + Idx str_idx) internal_function; +static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, + Idx node, Idx str_idx) + internal_function; +static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, + re_dfastate_t **limited_sts, Idx last_node, + Idx last_str_idx) + internal_function; +static reg_errcode_t re_search_internal (const regex_t *preg, + const char *string, Idx length, + Idx start, Idx last_start, Idx stop, + size_t nmatch, regmatch_t pmatch[], + int eflags) internal_function; +static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, + const char *string1, Idx length1, + const char *string2, Idx length2, + Idx start, regoff_t range, + struct re_registers *regs, + Idx stop, bool ret_len) internal_function; +static regoff_t re_search_stub (struct re_pattern_buffer *bufp, + const char *string, Idx length, Idx start, + regoff_t range, Idx stop, + struct re_registers *regs, + bool ret_len) internal_function; +static unsigned int re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, + Idx nregs, int regs_allocated) + internal_function; +static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx) + internal_function; +static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first) internal_function; +static Idx check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx) + internal_function; +static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, + regmatch_t *prev_idx_match, Idx cur_node, + Idx cur_idx, Idx nmatch) internal_function; +static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, + Idx str_idx, Idx dest_node, Idx nregs, + regmatch_t *regs, + re_node_set *eps_via_nodes) + internal_function; +static reg_errcode_t set_regs (const regex_t *preg, + const re_match_context_t *mctx, + size_t nmatch, regmatch_t *pmatch, + bool fl_backtrack) internal_function; +static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) + internal_function; + +#ifdef RE_ENABLE_I18N +static int sift_states_iter_mb (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx node_idx, Idx str_idx, Idx max_str_idx) + internal_function; +#endif /* RE_ENABLE_I18N */ +static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, + re_sift_context_t *sctx) + internal_function; +static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, + re_sift_context_t *sctx, Idx str_idx, + re_node_set *cur_dest) + internal_function; +static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx str_idx, + re_node_set *dest_nodes) + internal_function; +static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates) + internal_function; +static bool check_dst_limits (const re_match_context_t *mctx, + const re_node_set *limits, + Idx dst_node, Idx dst_idx, Idx src_node, + Idx src_idx) internal_function; +static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, + int boundaries, Idx subexp_idx, + Idx from_node, Idx bkref_idx) + internal_function; +static int check_dst_limits_calc_pos (const re_match_context_t *mctx, + Idx limit, Idx subexp_idx, + Idx node, Idx str_idx, + Idx bkref_idx) internal_function; +static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, + re_node_set *dest_nodes, + const re_node_set *candidates, + re_node_set *limits, + struct re_backref_cache_entry *bkref_ents, + Idx str_idx) internal_function; +static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, + re_sift_context_t *sctx, + Idx str_idx, const re_node_set *candidates) + internal_function; +static reg_errcode_t merge_state_array (const re_dfa_t *dfa, + re_dfastate_t **dst, + re_dfastate_t **src, Idx num) + internal_function; +static re_dfastate_t *find_recover_state (reg_errcode_t *err, + re_match_context_t *mctx) internal_function; +static re_dfastate_t *transit_state (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *state) internal_function; +static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *next_state) + internal_function; +static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, + re_node_set *cur_nodes, + Idx str_idx) internal_function; +#if 0 +static re_dfastate_t *transit_state_sb (reg_errcode_t *err, + re_match_context_t *mctx, + re_dfastate_t *pstate) + internal_function; +#endif +#ifdef RE_ENABLE_I18N +static reg_errcode_t transit_state_mb (re_match_context_t *mctx, + re_dfastate_t *pstate) + internal_function; +#endif /* RE_ENABLE_I18N */ +static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, + const re_node_set *nodes) + internal_function; +static reg_errcode_t get_subexp (re_match_context_t *mctx, + Idx bkref_node, Idx bkref_str_idx) + internal_function; +static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, + const re_sub_match_top_t *sub_top, + re_sub_match_last_t *sub_last, + Idx bkref_node, Idx bkref_str) + internal_function; +static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type) internal_function; +static reg_errcode_t check_arrival (re_match_context_t *mctx, + state_array_t *path, Idx top_node, + Idx top_str, Idx last_node, Idx last_str, + int type) internal_function; +static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, + Idx str_idx, + re_node_set *cur_nodes, + re_node_set *next_nodes) + internal_function; +static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, + re_node_set *cur_nodes, + Idx ex_subexp, int type) + internal_function; +static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, + re_node_set *dst_nodes, + Idx target, Idx ex_subexp, + int type) internal_function; +static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, + re_node_set *cur_nodes, Idx cur_str, + Idx subexp_num, int type) + internal_function; +static bool build_trtable (const re_dfa_t *dfa, + re_dfastate_t *state) internal_function; +#ifdef RE_ENABLE_I18N +static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, + const re_string_t *input, Idx idx) + internal_function; +# ifdef _LIBC +static unsigned int find_collation_sequence_value (const unsigned char *mbs, + size_t name_len) + internal_function; +# endif /* _LIBC */ +#endif /* RE_ENABLE_I18N */ +static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, + const re_dfastate_t *state, + re_node_set *states_node, + bitset_t *states_ch) internal_function; +static bool check_node_accept (const re_match_context_t *mctx, + const re_token_t *node, Idx idx) + internal_function; +static reg_errcode_t extend_buffers (re_match_context_t *mctx) + internal_function; + +/* Entry point for POSIX code. */ + +/* regexec searches for a given pattern, specified by PREG, in the + string STRING. + + If NMATCH is zero or REG_NOSUB was set in the cflags argument to + `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at + least NMATCH elements, and we set them to the offsets of the + corresponding matched substrings. + + EFLAGS specifies `execution flags' which affect matching: if + REG_NOTBOL is set, then ^ does not match at the beginning of the + string; if REG_NOTEOL is set, then $ does not match at the end. + + We return 0 if we find a match and REG_NOMATCH if not. */ + +int +regexec (preg, string, nmatch, pmatch, eflags) + const regex_t *_Restrict_ preg; + const char *_Restrict_ string; + size_t nmatch; + regmatch_t pmatch[_Restrict_arr_]; + int eflags; +{ + reg_errcode_t err; + Idx start, length; +#ifdef _LIBC + re_dfa_t *dfa = (re_dfa_t *) preg->buffer; +#endif + + if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) + return REG_BADPAT; + + if (eflags & REG_STARTEND) + { + start = pmatch[0].rm_so; + length = pmatch[0].rm_eo; + } + else + { + start = 0; + length = strlen (string); + } + + __libc_lock_lock (dfa->lock); + if (preg->no_sub) + err = re_search_internal (preg, string, length, start, length, + length, 0, NULL, eflags); + else + err = re_search_internal (preg, string, length, start, length, + length, nmatch, pmatch, eflags); + __libc_lock_unlock (dfa->lock); + return err != REG_NOERROR; +} + +#ifdef _LIBC +# include +versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); + +# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) +__typeof__ (__regexec) __compat_regexec; + +int +attribute_compat_text_section +__compat_regexec (const regex_t *_Restrict_ preg, + const char *_Restrict_ string, size_t nmatch, + regmatch_t pmatch[], int eflags) +{ + return regexec (preg, string, nmatch, pmatch, + eflags & (REG_NOTBOL | REG_NOTEOL)); +} +compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); +# endif +#endif + +/* Entry points for GNU code. */ + +/* re_match, re_search, re_match_2, re_search_2 + + The former two functions operate on STRING with length LENGTH, + while the later two operate on concatenation of STRING1 and STRING2 + with lengths LENGTH1 and LENGTH2, respectively. + + re_match() matches the compiled pattern in BUFP against the string, + starting at index START. + + re_search() first tries matching at index START, then it tries to match + starting from index START + 1, and so on. The last start position tried + is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same + way as re_match().) + + The parameter STOP of re_{match,search}_2 specifies that no match exceeding + the first STOP characters of the concatenation of the strings should be + concerned. + + If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match + and all groups is stored in REGS. (For the "_2" variants, the offsets are + computed relative to the concatenation, not relative to the individual + strings.) + + On success, re_match* functions return the length of the match, re_search* + return the position of the start of the match. Return value -1 means no + match was found and -2 indicates an internal error. */ + +regoff_t +re_match (bufp, string, length, start, regs) + struct re_pattern_buffer *bufp; + const char *string; + Idx length, start; + struct re_registers *regs; +{ + return re_search_stub (bufp, string, length, start, 0, length, regs, true); +} +#ifdef _LIBC +weak_alias (__re_match, re_match) +#endif + +regoff_t +re_search (bufp, string, length, start, range, regs) + struct re_pattern_buffer *bufp; + const char *string; + Idx length, start; + regoff_t range; + struct re_registers *regs; +{ + return re_search_stub (bufp, string, length, start, range, length, regs, + false); +} +#ifdef _LIBC +weak_alias (__re_search, re_search) +#endif + +regoff_t +re_match_2 (bufp, string1, length1, string2, length2, start, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + Idx length1, length2, start, stop; + struct re_registers *regs; +{ + return re_search_2_stub (bufp, string1, length1, string2, length2, + start, 0, regs, stop, true); +} +#ifdef _LIBC +weak_alias (__re_match_2, re_match_2) +#endif + +regoff_t +re_search_2 (bufp, string1, length1, string2, length2, start, range, regs, stop) + struct re_pattern_buffer *bufp; + const char *string1, *string2; + Idx length1, length2, start, stop; + regoff_t range; + struct re_registers *regs; +{ + return re_search_2_stub (bufp, string1, length1, string2, length2, + start, range, regs, stop, false); +} +#ifdef _LIBC +weak_alias (__re_search_2, re_search_2) +#endif + +static regoff_t +internal_function +re_search_2_stub (struct re_pattern_buffer *bufp, + const char *string1, Idx length1, + const char *string2, Idx length2, + Idx start, regoff_t range, struct re_registers *regs, + Idx stop, bool ret_len) +{ + const char *str; + regoff_t rval; + Idx len = length1 + length2; + char *s = NULL; + + if (BE (length1 < 0 || length2 < 0 || stop < 0 || len < length1, 0)) + return -2; + + /* Concatenate the strings. */ + if (length2 > 0) + if (length1 > 0) + { + s = re_malloc (char, len); + + if (BE (s == NULL, 0)) + return -2; +#ifdef _LIBC + memcpy (__mempcpy (s, string1, length1), string2, length2); +#else + memcpy (s, string1, length1); + memcpy (s + length1, string2, length2); +#endif + str = s; + } + else + str = string2; + else + str = string1; + + rval = re_search_stub (bufp, str, len, start, range, stop, regs, + ret_len); + re_free (s); + return rval; +} + +/* The parameters have the same meaning as those of re_search. + Additional parameters: + If RET_LEN is true the length of the match is returned (re_match style); + otherwise the position of the match is returned. */ + +static regoff_t +internal_function +re_search_stub (struct re_pattern_buffer *bufp, + const char *string, Idx length, + Idx start, regoff_t range, Idx stop, struct re_registers *regs, + bool ret_len) +{ + reg_errcode_t result; + regmatch_t *pmatch; + Idx nregs; + regoff_t rval; + int eflags = 0; +#ifdef _LIBC + re_dfa_t *dfa = (re_dfa_t *) bufp->buffer; +#endif + Idx last_start = start + range; + + /* Check for out-of-range. */ + if (BE (start < 0 || start > length, 0)) + return -1; + if (BE (length < last_start || (0 <= range && last_start < start), 0)) + last_start = length; + else if (BE (last_start < 0 || (range < 0 && start <= last_start), 0)) + last_start = 0; + + __libc_lock_lock (dfa->lock); + + eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; + eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; + + /* Compile fastmap if we haven't yet. */ + if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) + re_compile_fastmap (bufp); + + if (BE (bufp->no_sub, 0)) + regs = NULL; + + /* We need at least 1 register. */ + if (regs == NULL) + nregs = 1; + else if (BE (bufp->regs_allocated == REGS_FIXED + && regs->num_regs <= bufp->re_nsub, 0)) + { + nregs = regs->num_regs; + if (BE (nregs < 1, 0)) + { + /* Nothing can be copied to regs. */ + regs = NULL; + nregs = 1; + } + } + else + nregs = bufp->re_nsub + 1; + pmatch = re_malloc (regmatch_t, nregs); + if (BE (pmatch == NULL, 0)) + { + rval = -2; + goto out; + } + + result = re_search_internal (bufp, string, length, start, last_start, stop, + nregs, pmatch, eflags); + + rval = 0; + + /* I hope we needn't fill ther regs with -1's when no match was found. */ + if (result != REG_NOERROR) + rval = -1; + else if (regs != NULL) + { + /* If caller wants register contents data back, copy them. */ + bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, + bufp->regs_allocated); + if (BE (bufp->regs_allocated == REGS_UNALLOCATED, 0)) + rval = -2; + } + + if (BE (rval == 0, 1)) + { + if (ret_len) + { + assert (pmatch[0].rm_so == start); + rval = pmatch[0].rm_eo - start; + } + else + rval = pmatch[0].rm_so; + } + re_free (pmatch); + out: + __libc_lock_unlock (dfa->lock); + return rval; +} + +static unsigned int +internal_function +re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, + int regs_allocated) +{ + int rval = REGS_REALLOCATE; + Idx i; + Idx need_regs = nregs + 1; + /* We need one extra element beyond `num_regs' for the `-1' marker GNU code + uses. */ + + /* Have the register data arrays been allocated? */ + if (regs_allocated == REGS_UNALLOCATED) + { /* No. So allocate them with malloc. */ + regs->start = re_malloc (regoff_t, need_regs); + if (BE (regs->start == NULL, 0)) + return REGS_UNALLOCATED; + regs->end = re_malloc (regoff_t, need_regs); + if (BE (regs->end == NULL, 0)) + { + re_free (regs->start); + return REGS_UNALLOCATED; + } + regs->num_regs = need_regs; + } + else if (regs_allocated == REGS_REALLOCATE) + { /* Yes. If we need more elements than were already + allocated, reallocate them. If we need fewer, just + leave it alone. */ + if (BE (need_regs > regs->num_regs, 0)) + { + regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); + regoff_t *new_end; + if (BE (new_start == NULL, 0)) + return REGS_UNALLOCATED; + new_end = re_realloc (regs->end, regoff_t, need_regs); + if (BE (new_end == NULL, 0)) + { + re_free (new_start); + return REGS_UNALLOCATED; + } + regs->start = new_start; + regs->end = new_end; + regs->num_regs = need_regs; + } + } + else + { + assert (regs_allocated == REGS_FIXED); + /* This function may not be called with REGS_FIXED and nregs too big. */ + assert (regs->num_regs >= nregs); + rval = REGS_FIXED; + } + + /* Copy the regs. */ + for (i = 0; i < nregs; ++i) + { + regs->start[i] = pmatch[i].rm_so; + regs->end[i] = pmatch[i].rm_eo; + } + for ( ; i < regs->num_regs; ++i) + regs->start[i] = regs->end[i] = -1; + + return rval; +} + +/* Set REGS to hold NUM_REGS registers, storing them in STARTS and + ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use + this memory for recording register information. STARTS and ENDS + must be allocated using the malloc library routine, and must each + be at least NUM_REGS * sizeof (regoff_t) bytes long. + + If NUM_REGS == 0, then subsequent matches should allocate their own + register data. + + Unless this function is called, the first search or match using + PATTERN_BUFFER will allocate its own register data, without + freeing the old data. */ + +void +re_set_registers (bufp, regs, num_regs, starts, ends) + struct re_pattern_buffer *bufp; + struct re_registers *regs; + __re_size_t num_regs; + regoff_t *starts, *ends; +{ + if (num_regs) + { + bufp->regs_allocated = REGS_REALLOCATE; + regs->num_regs = num_regs; + regs->start = starts; + regs->end = ends; + } + else + { + bufp->regs_allocated = REGS_UNALLOCATED; + regs->num_regs = 0; + regs->start = regs->end = NULL; + } +} +#ifdef _LIBC +weak_alias (__re_set_registers, re_set_registers) +#endif + +/* Entry points compatible with 4.2 BSD regex library. We don't define + them unless specifically requested. */ + +#if defined _REGEX_RE_COMP || defined _LIBC +int +# ifdef _LIBC +weak_function +# endif +re_exec (s) + const char *s; +{ + return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); +} +#endif /* _REGEX_RE_COMP */ + +/* Internal entry point. */ + +/* Searches for a compiled pattern PREG in the string STRING, whose + length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same + meaning as with regexec. LAST_START is START + RANGE, where + START and RANGE have the same meaning as with re_search. + Return REG_NOERROR if we find a match, and REG_NOMATCH if not, + otherwise return the error code. + Note: We assume front end functions already check ranges. + (0 <= LAST_START && LAST_START <= LENGTH) */ + +static reg_errcode_t +internal_function +re_search_internal (const regex_t *preg, + const char *string, Idx length, + Idx start, Idx last_start, Idx stop, + size_t nmatch, regmatch_t pmatch[], + int eflags) +{ + reg_errcode_t err; + const re_dfa_t *dfa = (const re_dfa_t *) preg->buffer; + Idx left_lim, right_lim; + int incr; + bool fl_longest_match; + int match_kind; + Idx match_first; + Idx match_last = REG_MISSING; + Idx extra_nmatch; + bool sb; + int ch; +#if defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) + re_match_context_t mctx = { .dfa = dfa }; +#else + re_match_context_t mctx; +#endif + char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate + && start != last_start && !preg->can_be_null) + ? preg->fastmap : NULL); + RE_TRANSLATE_TYPE t = preg->translate; + +#if !(defined _LIBC || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) + memset (&mctx, '\0', sizeof (re_match_context_t)); + mctx.dfa = dfa; +#endif + + extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; + nmatch -= extra_nmatch; + + /* Check if the DFA haven't been compiled. */ + if (BE (preg->used == 0 || dfa->init_state == NULL + || dfa->init_state_word == NULL || dfa->init_state_nl == NULL + || dfa->init_state_begbuf == NULL, 0)) + return REG_NOMATCH; + +#ifdef DEBUG + /* We assume front-end functions already check them. */ + assert (0 <= last_start && last_start <= length); +#endif + + /* If initial states with non-begbuf contexts have no elements, + the regex must be anchored. If preg->newline_anchor is set, + we'll never use init_state_nl, so do not check it. */ + if (dfa->init_state->nodes.nelem == 0 + && dfa->init_state_word->nodes.nelem == 0 + && (dfa->init_state_nl->nodes.nelem == 0 + || !preg->newline_anchor)) + { + if (start != 0 && last_start != 0) + return REG_NOMATCH; + start = last_start = 0; + } + + /* We must check the longest matching, if nmatch > 0. */ + fl_longest_match = (nmatch != 0 || dfa->nbackref); + + err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, + preg->translate, (preg->syntax & RE_ICASE) != 0, + dfa); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + mctx.input.stop = stop; + mctx.input.raw_stop = stop; + mctx.input.newline_anchor = preg->newline_anchor; + + err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + + /* We will log all the DFA states through which the dfa pass, + if nmatch > 1, or this dfa has "multibyte node", which is a + back-reference or a node which can accept multibyte character or + multi character collating element. */ + if (nmatch > 1 || dfa->has_mb_node) + { + /* Avoid overflow. */ + if (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= mctx.input.bufs_len, 0)) + { + err = REG_ESPACE; + goto free_return; + } + + mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); + if (BE (mctx.state_log == NULL, 0)) + { + err = REG_ESPACE; + goto free_return; + } + } + else + mctx.state_log = NULL; + + match_first = start; + mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF + : CONTEXT_NEWLINE | CONTEXT_BEGBUF; + + /* Check incrementally whether of not the input string match. */ + incr = (last_start < start) ? -1 : 1; + left_lim = (last_start < start) ? last_start : start; + right_lim = (last_start < start) ? start : last_start; + sb = dfa->mb_cur_max == 1; + match_kind = + (fastmap + ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) + | (start <= last_start ? 2 : 0) + | (t != NULL ? 1 : 0)) + : 8); + + for (;; match_first += incr) + { + err = REG_NOMATCH; + if (match_first < left_lim || right_lim < match_first) + goto free_return; + + /* Advance as rapidly as possible through the string, until we + find a plausible place to start matching. This may be done + with varying efficiency, so there are various possibilities: + only the most common of them are specialized, in order to + save on code size. We use a switch statement for speed. */ + switch (match_kind) + { + case 8: + /* No fastmap. */ + break; + + case 7: + /* Fastmap with single-byte translation, match forward. */ + while (BE (match_first < right_lim, 1) + && !fastmap[t[(unsigned char) string[match_first]]]) + ++match_first; + goto forward_match_found_start_or_reached_end; + + case 6: + /* Fastmap without translation, match forward. */ + while (BE (match_first < right_lim, 1) + && !fastmap[(unsigned char) string[match_first]]) + ++match_first; + + forward_match_found_start_or_reached_end: + if (BE (match_first == right_lim, 0)) + { + ch = match_first >= length + ? 0 : (unsigned char) string[match_first]; + if (!fastmap[t ? t[ch] : ch]) + goto free_return; + } + break; + + case 4: + case 5: + /* Fastmap without multi-byte translation, match backwards. */ + while (match_first >= left_lim) + { + ch = match_first >= length + ? 0 : (unsigned char) string[match_first]; + if (fastmap[t ? t[ch] : ch]) + break; + --match_first; + } + if (match_first < left_lim) + goto free_return; + break; + + default: + /* In this case, we can't determine easily the current byte, + since it might be a component byte of a multibyte + character. Then we use the constructed buffer instead. */ + for (;;) + { + /* If MATCH_FIRST is out of the valid range, reconstruct the + buffers. */ + __re_size_t offset = match_first - mctx.input.raw_mbs_idx; + if (BE (offset >= (__re_size_t) mctx.input.valid_raw_len, 0)) + { + err = re_string_reconstruct (&mctx.input, match_first, + eflags); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + + offset = match_first - mctx.input.raw_mbs_idx; + } + /* If MATCH_FIRST is out of the buffer, leave it as '\0'. + Note that MATCH_FIRST must not be smaller than 0. */ + ch = (match_first >= length + ? 0 : re_string_byte_at (&mctx.input, offset)); + if (fastmap[ch]) + break; + match_first += incr; + if (match_first < left_lim || match_first > right_lim) + { + err = REG_NOMATCH; + goto free_return; + } + } + break; + } + + /* Reconstruct the buffers so that the matcher can assume that + the matching starts from the beginning of the buffer. */ + err = re_string_reconstruct (&mctx.input, match_first, eflags); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + +#ifdef RE_ENABLE_I18N + /* Don't consider this char as a possible match start if it part, + yet isn't the head, of a multibyte character. */ + if (!sb && !re_string_first_byte (&mctx.input, 0)) + continue; +#endif + + /* It seems to be appropriate one, then use the matcher. */ + /* We assume that the matching starts from 0. */ + mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; + match_last = check_matching (&mctx, fl_longest_match, + start <= last_start ? &match_first : NULL); + if (match_last != REG_MISSING) + { + if (BE (match_last == REG_ERROR, 0)) + { + err = REG_ESPACE; + goto free_return; + } + else + { + mctx.match_last = match_last; + if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) + { + re_dfastate_t *pstate = mctx.state_log[match_last]; + mctx.last_node = check_halt_state_context (&mctx, pstate, + match_last); + } + if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) + || dfa->nbackref) + { + err = prune_impossible_nodes (&mctx); + if (err == REG_NOERROR) + break; + if (BE (err != REG_NOMATCH, 0)) + goto free_return; + match_last = REG_MISSING; + } + else + break; /* We found a match. */ + } + } + + match_ctx_clean (&mctx); + } + +#ifdef DEBUG + assert (match_last != REG_MISSING); + assert (err == REG_NOERROR); +#endif + + /* Set pmatch[] if we need. */ + if (nmatch > 0) + { + Idx reg_idx; + + /* Initialize registers. */ + for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) + pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; + + /* Set the points where matching start/end. */ + pmatch[0].rm_so = 0; + pmatch[0].rm_eo = mctx.match_last; + /* FIXME: This function should fail if mctx.match_last exceeds + the maximum possible regoff_t value. We need a new error + code REG_OVERFLOW. */ + + if (!preg->no_sub && nmatch > 1) + { + err = set_regs (preg, &mctx, nmatch, pmatch, + dfa->has_plural_match && dfa->nbackref > 0); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + + /* At last, add the offset to the each registers, since we slided + the buffers so that we could assume that the matching starts + from 0. */ + for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) + if (pmatch[reg_idx].rm_so != -1) + { +#ifdef RE_ENABLE_I18N + if (BE (mctx.input.offsets_needed != 0, 0)) + { + pmatch[reg_idx].rm_so = + (pmatch[reg_idx].rm_so == mctx.input.valid_len + ? mctx.input.valid_raw_len + : mctx.input.offsets[pmatch[reg_idx].rm_so]); + pmatch[reg_idx].rm_eo = + (pmatch[reg_idx].rm_eo == mctx.input.valid_len + ? mctx.input.valid_raw_len + : mctx.input.offsets[pmatch[reg_idx].rm_eo]); + } +#else + assert (mctx.input.offsets_needed == 0); +#endif + pmatch[reg_idx].rm_so += match_first; + pmatch[reg_idx].rm_eo += match_first; + } + for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) + { + pmatch[nmatch + reg_idx].rm_so = -1; + pmatch[nmatch + reg_idx].rm_eo = -1; + } + + if (dfa->subexp_map) + for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) + if (dfa->subexp_map[reg_idx] != reg_idx) + { + pmatch[reg_idx + 1].rm_so + = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; + pmatch[reg_idx + 1].rm_eo + = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; + } + } + + free_return: + re_free (mctx.state_log); + if (dfa->nbackref) + match_ctx_free (&mctx); + re_string_destruct (&mctx.input); + return err; +} + +static reg_errcode_t +internal_function +prune_impossible_nodes (re_match_context_t *mctx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx halt_node, match_last; + reg_errcode_t ret; + re_dfastate_t **sifted_states; + re_dfastate_t **lim_states = NULL; + re_sift_context_t sctx; +#ifdef DEBUG + assert (mctx->state_log != NULL); +#endif + match_last = mctx->match_last; + halt_node = mctx->last_node; + + /* Avoid overflow. */ + if (BE (SIZE_MAX / sizeof (re_dfastate_t *) <= match_last, 0)) + return REG_ESPACE; + + sifted_states = re_malloc (re_dfastate_t *, match_last + 1); + if (BE (sifted_states == NULL, 0)) + { + ret = REG_ESPACE; + goto free_return; + } + if (dfa->nbackref) + { + lim_states = re_malloc (re_dfastate_t *, match_last + 1); + if (BE (lim_states == NULL, 0)) + { + ret = REG_ESPACE; + goto free_return; + } + while (1) + { + memset (lim_states, '\0', + sizeof (re_dfastate_t *) * (match_last + 1)); + sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, + match_last); + ret = sift_states_backward (mctx, &sctx); + re_node_set_free (&sctx.limits); + if (BE (ret != REG_NOERROR, 0)) + goto free_return; + if (sifted_states[0] != NULL || lim_states[0] != NULL) + break; + do + { + --match_last; + if (! REG_VALID_INDEX (match_last)) + { + ret = REG_NOMATCH; + goto free_return; + } + } while (mctx->state_log[match_last] == NULL + || !mctx->state_log[match_last]->halt); + halt_node = check_halt_state_context (mctx, + mctx->state_log[match_last], + match_last); + } + ret = merge_state_array (dfa, sifted_states, lim_states, + match_last + 1); + re_free (lim_states); + lim_states = NULL; + if (BE (ret != REG_NOERROR, 0)) + goto free_return; + } + else + { + sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); + ret = sift_states_backward (mctx, &sctx); + re_node_set_free (&sctx.limits); + if (BE (ret != REG_NOERROR, 0)) + goto free_return; + if (sifted_states[0] == NULL) + { + ret = REG_NOMATCH; + goto free_return; + } + } + re_free (mctx->state_log); + mctx->state_log = sifted_states; + sifted_states = NULL; + mctx->last_node = halt_node; + mctx->match_last = match_last; + ret = REG_NOERROR; + free_return: + re_free (sifted_states); + re_free (lim_states); + return ret; +} + +/* Acquire an initial state and return it. + We must select appropriate initial state depending on the context, + since initial states may have constraints like "\<", "^", etc.. */ + +static inline re_dfastate_t * +__attribute ((always_inline)) internal_function +acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, + Idx idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + if (dfa->init_state->has_constraint) + { + unsigned int context; + context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); + if (IS_WORD_CONTEXT (context)) + return dfa->init_state_word; + else if (IS_ORDINARY_CONTEXT (context)) + return dfa->init_state; + else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) + return dfa->init_state_begbuf; + else if (IS_NEWLINE_CONTEXT (context)) + return dfa->init_state_nl; + else if (IS_BEGBUF_CONTEXT (context)) + { + /* It is relatively rare case, then calculate on demand. */ + return re_acquire_state_context (err, dfa, + dfa->init_state->entrance_nodes, + context); + } + else + /* Must not happen? */ + return dfa->init_state; + } + else + return dfa->init_state; +} + +/* Check whether the regular expression match input string INPUT or not, + and return the index where the matching end. Return REG_MISSING if + there is no match, and return REG_ERROR in case of an error. + FL_LONGEST_MATCH means we want the POSIX longest matching. + If P_MATCH_FIRST is not NULL, and the match fails, it is set to the + next place where we may want to try matching. + Note that the matcher assume that the maching starts from the current + index of the buffer. */ + +static Idx +internal_function +check_matching (re_match_context_t *mctx, bool fl_longest_match, + Idx *p_match_first) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx match = 0; + Idx match_last = REG_MISSING; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + re_dfastate_t *cur_state; + bool at_init_state = p_match_first != NULL; + Idx next_start_idx = cur_str_idx; + + err = REG_NOERROR; + cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); + /* An initial state must not be NULL (invalid). */ + if (BE (cur_state == NULL, 0)) + { + assert (err == REG_ESPACE); + return REG_ERROR; + } + + if (mctx->state_log != NULL) + { + mctx->state_log[cur_str_idx] = cur_state; + + /* Check OP_OPEN_SUBEXP in the initial state in case that we use them + later. E.g. Processing back references. */ + if (BE (dfa->nbackref, 0)) + { + at_init_state = false; + err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); + if (BE (err != REG_NOERROR, 0)) + return err; + + if (cur_state->has_backref) + { + err = transit_state_bkref (mctx, &cur_state->nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + } + + /* If the RE accepts NULL string. */ + if (BE (cur_state->halt, 0)) + { + if (!cur_state->has_constraint + || check_halt_state_context (mctx, cur_state, cur_str_idx)) + { + if (!fl_longest_match) + return cur_str_idx; + else + { + match_last = cur_str_idx; + match = 1; + } + } + } + + while (!re_string_eoi (&mctx->input)) + { + re_dfastate_t *old_state = cur_state; + Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; + + if (BE (next_char_idx >= mctx->input.bufs_len, 0) + || (BE (next_char_idx >= mctx->input.valid_len, 0) + && mctx->input.valid_len < mctx->input.len)) + { + err = extend_buffers (mctx); + if (BE (err != REG_NOERROR, 0)) + { + assert (err == REG_ESPACE); + return REG_ERROR; + } + } + + cur_state = transit_state (&err, mctx, cur_state); + if (mctx->state_log != NULL) + cur_state = merge_state_with_log (&err, mctx, cur_state); + + if (cur_state == NULL) + { + /* Reached the invalid state or an error. Try to recover a valid + state using the state log, if available and if we have not + already found a valid (even if not the longest) match. */ + if (BE (err != REG_NOERROR, 0)) + return REG_ERROR; + + if (mctx->state_log == NULL + || (match && !fl_longest_match) + || (cur_state = find_recover_state (&err, mctx)) == NULL) + break; + } + + if (BE (at_init_state, 0)) + { + if (old_state == cur_state) + next_start_idx = next_char_idx; + else + at_init_state = false; + } + + if (cur_state->halt) + { + /* Reached a halt state. + Check the halt state can satisfy the current context. */ + if (!cur_state->has_constraint + || check_halt_state_context (mctx, cur_state, + re_string_cur_idx (&mctx->input))) + { + /* We found an appropriate halt state. */ + match_last = re_string_cur_idx (&mctx->input); + match = 1; + + /* We found a match, do not modify match_first below. */ + p_match_first = NULL; + if (!fl_longest_match) + break; + } + } + } + + if (p_match_first) + *p_match_first += next_start_idx; + + return match_last; +} + +/* Check NODE match the current context. */ + +static bool +internal_function +check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) +{ + re_token_type_t type = dfa->nodes[node].type; + unsigned int constraint = dfa->nodes[node].constraint; + if (type != END_OF_RE) + return false; + if (!constraint) + return true; + if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) + return false; + return true; +} + +/* Check the halt state STATE match the current context. + Return 0 if not match, if the node, STATE has, is a halt node and + match the context, return the node. */ + +static Idx +internal_function +check_halt_state_context (const re_match_context_t *mctx, + const re_dfastate_t *state, Idx idx) +{ + Idx i; + unsigned int context; +#ifdef DEBUG + assert (state->halt); +#endif + context = re_string_context_at (&mctx->input, idx, mctx->eflags); + for (i = 0; i < state->nodes.nelem; ++i) + if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) + return state->nodes.elems[i]; + return 0; +} + +/* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA + corresponding to the DFA). + Return the destination node, and update EPS_VIA_NODES; + return REG_MISSING in case of errors. */ + +static Idx +internal_function +proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, + Idx *pidx, Idx node, re_node_set *eps_via_nodes, + struct re_fail_stack_t *fs) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx i; + bool ok; + if (IS_EPSILON_NODE (dfa->nodes[node].type)) + { + re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; + re_node_set *edests = &dfa->edests[node]; + Idx dest_node; + ok = re_node_set_insert (eps_via_nodes, node); + if (BE (! ok, 0)) + return REG_ERROR; + /* Pick up a valid destination, or return REG_MISSING if none + is found. */ + for (dest_node = REG_MISSING, i = 0; i < edests->nelem; ++i) + { + Idx candidate = edests->elems[i]; + if (!re_node_set_contains (cur_nodes, candidate)) + continue; + if (dest_node == REG_MISSING) + dest_node = candidate; + + else + { + /* In order to avoid infinite loop like "(a*)*", return the second + epsilon-transition if the first was already considered. */ + if (re_node_set_contains (eps_via_nodes, dest_node)) + return candidate; + + /* Otherwise, push the second epsilon-transition on the fail stack. */ + else if (fs != NULL + && push_fail_stack (fs, *pidx, candidate, nregs, regs, + eps_via_nodes)) + return REG_ERROR; + + /* We know we are going to exit. */ + break; + } + } + return dest_node; + } + else + { + Idx naccepted = 0; + re_token_type_t type = dfa->nodes[node].type; + +#ifdef RE_ENABLE_I18N + if (dfa->nodes[node].accept_mb) + naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); + else +#endif /* RE_ENABLE_I18N */ + if (type == OP_BACK_REF) + { + Idx subexp_idx = dfa->nodes[node].opr.idx + 1; + naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; + if (fs != NULL) + { + if (regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) + return REG_MISSING; + else if (naccepted) + { + char *buf = (char *) re_string_get_buffer (&mctx->input); + if (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, + naccepted) != 0) + return REG_MISSING; + } + } + + if (naccepted == 0) + { + Idx dest_node; + ok = re_node_set_insert (eps_via_nodes, node); + if (BE (! ok, 0)) + return REG_ERROR; + dest_node = dfa->edests[node].elems[0]; + if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, + dest_node)) + return dest_node; + } + } + + if (naccepted != 0 + || check_node_accept (mctx, dfa->nodes + node, *pidx)) + { + Idx dest_node = dfa->nexts[node]; + *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; + if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL + || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, + dest_node))) + return REG_MISSING; + re_node_set_empty (eps_via_nodes); + return dest_node; + } + } + return REG_MISSING; +} + +static reg_errcode_t +internal_function +push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, + Idx nregs, regmatch_t *regs, re_node_set *eps_via_nodes) +{ + reg_errcode_t err; + Idx num = fs->num++; + if (fs->num == fs->alloc) + { + struct re_fail_stack_ent_t *new_array; + new_array = realloc (fs->stack, (sizeof (struct re_fail_stack_ent_t) + * fs->alloc * 2)); + if (new_array == NULL) + return REG_ESPACE; + fs->alloc *= 2; + fs->stack = new_array; + } + fs->stack[num].idx = str_idx; + fs->stack[num].node = dest_node; + fs->stack[num].regs = re_malloc (regmatch_t, nregs); + if (fs->stack[num].regs == NULL) + return REG_ESPACE; + memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); + err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); + return err; +} + +static Idx +internal_function +pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, + regmatch_t *regs, re_node_set *eps_via_nodes) +{ + Idx num = --fs->num; + assert (REG_VALID_INDEX (num)); + *pidx = fs->stack[num].idx; + memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); + re_node_set_free (eps_via_nodes); + re_free (fs->stack[num].regs); + *eps_via_nodes = fs->stack[num].eps_via_nodes; + return fs->stack[num].node; +} + +/* Set the positions where the subexpressions are starts/ends to registers + PMATCH. + Note: We assume that pmatch[0] is already set, and + pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ + +static reg_errcode_t +internal_function +set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, + regmatch_t *pmatch, bool fl_backtrack) +{ + const re_dfa_t *dfa = (const re_dfa_t *) preg->buffer; + Idx idx, cur_node; + re_node_set eps_via_nodes; + struct re_fail_stack_t *fs; + struct re_fail_stack_t fs_body = { 0, 2, NULL }; + regmatch_t *prev_idx_match; + bool prev_idx_match_malloced = false; + +#ifdef DEBUG + assert (nmatch > 1); + assert (mctx->state_log != NULL); +#endif + if (fl_backtrack) + { + fs = &fs_body; + fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); + if (fs->stack == NULL) + return REG_ESPACE; + } + else + fs = NULL; + + cur_node = dfa->init_node; + re_node_set_init_empty (&eps_via_nodes); + + if (__libc_use_alloca (nmatch * sizeof (regmatch_t))) + prev_idx_match = (regmatch_t *) alloca (nmatch * sizeof (regmatch_t)); + else + { + prev_idx_match = re_malloc (regmatch_t, nmatch); + if (prev_idx_match == NULL) + { + free_fail_stack_return (fs); + return REG_ESPACE; + } + prev_idx_match_malloced = true; + } + memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); + + for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) + { + update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); + + if (idx == pmatch[0].rm_eo && cur_node == mctx->last_node) + { + Idx reg_idx; + if (fs) + { + for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) + if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) + break; + if (reg_idx == nmatch) + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return free_fail_stack_return (fs); + } + cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, + &eps_via_nodes); + } + else + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return REG_NOERROR; + } + } + + /* Proceed to next node. */ + cur_node = proceed_next_node (mctx, nmatch, pmatch, &idx, cur_node, + &eps_via_nodes, fs); + + if (BE (! REG_VALID_INDEX (cur_node), 0)) + { + if (BE (cur_node == REG_ERROR, 0)) + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + free_fail_stack_return (fs); + return REG_ESPACE; + } + if (fs) + cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, + &eps_via_nodes); + else + { + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return REG_NOMATCH; + } + } + } + re_node_set_free (&eps_via_nodes); + if (prev_idx_match_malloced) + re_free (prev_idx_match); + return free_fail_stack_return (fs); +} + +static reg_errcode_t +internal_function +free_fail_stack_return (struct re_fail_stack_t *fs) +{ + if (fs) + { + Idx fs_idx; + for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) + { + re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); + re_free (fs->stack[fs_idx].regs); + } + re_free (fs->stack); + } + return REG_NOERROR; +} + +static void +internal_function +update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, + regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) +{ + int type = dfa->nodes[cur_node].type; + if (type == OP_OPEN_SUBEXP) + { + Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; + + /* We are at the first node of this sub expression. */ + if (reg_num < nmatch) + { + pmatch[reg_num].rm_so = cur_idx; + pmatch[reg_num].rm_eo = -1; + } + } + else if (type == OP_CLOSE_SUBEXP) + { + Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; + if (reg_num < nmatch) + { + /* We are at the last node of this sub expression. */ + if (pmatch[reg_num].rm_so < cur_idx) + { + pmatch[reg_num].rm_eo = cur_idx; + /* This is a non-empty match or we are not inside an optional + subexpression. Accept this right away. */ + memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); + } + else + { + if (dfa->nodes[cur_node].opt_subexp + && prev_idx_match[reg_num].rm_so != -1) + /* We transited through an empty match for an optional + subexpression, like (a?)*, and this is not the subexp's + first match. Copy back the old content of the registers + so that matches of an inner subexpression are undone as + well, like in ((a?))*. */ + memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); + else + /* We completed a subexpression, but it may be part of + an optional one, so do not update PREV_IDX_MATCH. */ + pmatch[reg_num].rm_eo = cur_idx; + } + } + } +} + +/* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 + and sift the nodes in each states according to the following rules. + Updated state_log will be wrote to STATE_LOG. + + Rules: We throw away the Node `a' in the STATE_LOG[STR_IDX] if... + 1. When STR_IDX == MATCH_LAST(the last index in the state_log): + If `a' isn't the LAST_NODE and `a' can't epsilon transit to + the LAST_NODE, we throw away the node `a'. + 2. When 0 <= STR_IDX < MATCH_LAST and `a' accepts + string `s' and transit to `b': + i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw + away the node `a'. + ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is + thrown away, we throw away the node `a'. + 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': + i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the + node `a'. + ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, + we throw away the node `a'. */ + +#define STATE_NODE_CONTAINS(state,node) \ + ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) + +static reg_errcode_t +internal_function +sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) +{ + reg_errcode_t err; + int null_cnt = 0; + Idx str_idx = sctx->last_str_idx; + re_node_set cur_dest; + +#ifdef DEBUG + assert (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); +#endif + + /* Build sifted state_log[str_idx]. It has the nodes which can epsilon + transit to the last_node and the last_node itself. */ + err = re_node_set_init_1 (&cur_dest, sctx->last_node); + if (BE (err != REG_NOERROR, 0)) + return err; + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + + /* Then check each states in the state_log. */ + while (str_idx > 0) + { + /* Update counters. */ + null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; + if (null_cnt > mctx->max_mb_elem_len) + { + memset (sctx->sifted_states, '\0', + sizeof (re_dfastate_t *) * str_idx); + re_node_set_free (&cur_dest); + return REG_NOERROR; + } + re_node_set_empty (&cur_dest); + --str_idx; + + if (mctx->state_log[str_idx]) + { + err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + + /* Add all the nodes which satisfy the following conditions: + - It can epsilon transit to a node in CUR_DEST. + - It is in CUR_SRC. + And update state_log. */ + err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + err = REG_NOERROR; + free_return: + re_node_set_free (&cur_dest); + return err; +} + +static reg_errcode_t +internal_function +build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx str_idx, re_node_set *cur_dest) +{ + const re_dfa_t *const dfa = mctx->dfa; + const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; + Idx i; + + /* Then build the next sifted state. + We build the next sifted state on `cur_dest', and update + `sifted_states[str_idx]' with `cur_dest'. + Note: + `cur_dest' is the sifted state from `state_log[str_idx + 1]'. + `cur_src' points the node_set of the old `state_log[str_idx]' + (with the epsilon nodes pre-filtered out). */ + for (i = 0; i < cur_src->nelem; i++) + { + Idx prev_node = cur_src->elems[i]; + int naccepted = 0; + bool ok; + +#ifdef DEBUG + re_token_type_t type = dfa->nodes[prev_node].type; + assert (!IS_EPSILON_NODE (type)); +#endif +#ifdef RE_ENABLE_I18N + /* If the node may accept `multi byte'. */ + if (dfa->nodes[prev_node].accept_mb) + naccepted = sift_states_iter_mb (mctx, sctx, prev_node, + str_idx, sctx->last_str_idx); +#endif /* RE_ENABLE_I18N */ + + /* We don't check backreferences here. + See update_cur_sifted_state(). */ + if (!naccepted + && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) + && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], + dfa->nexts[prev_node])) + naccepted = 1; + + if (naccepted == 0) + continue; + + if (sctx->limits.nelem) + { + Idx to_idx = str_idx + naccepted; + if (check_dst_limits (mctx, &sctx->limits, + dfa->nexts[prev_node], to_idx, + prev_node, str_idx)) + continue; + } + ok = re_node_set_insert (cur_dest, prev_node); + if (BE (! ok, 0)) + return REG_ESPACE; + } + + return REG_NOERROR; +} + +/* Helper functions. */ + +static reg_errcode_t +internal_function +clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) +{ + Idx top = mctx->state_log_top; + + if (next_state_log_idx >= mctx->input.bufs_len + || (next_state_log_idx >= mctx->input.valid_len + && mctx->input.valid_len < mctx->input.len)) + { + reg_errcode_t err; + err = extend_buffers (mctx); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + if (top < next_state_log_idx) + { + memset (mctx->state_log + top + 1, '\0', + sizeof (re_dfastate_t *) * (next_state_log_idx - top)); + mctx->state_log_top = next_state_log_idx; + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, + re_dfastate_t **src, Idx num) +{ + Idx st_idx; + reg_errcode_t err; + for (st_idx = 0; st_idx < num; ++st_idx) + { + if (dst[st_idx] == NULL) + dst[st_idx] = src[st_idx]; + else if (src[st_idx] != NULL) + { + re_node_set merged_set; + err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, + &src[st_idx]->nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); + re_node_set_free (&merged_set); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +update_cur_sifted_state (const re_match_context_t *mctx, + re_sift_context_t *sctx, Idx str_idx, + re_node_set *dest_nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err = REG_NOERROR; + const re_node_set *candidates; + candidates = ((mctx->state_log[str_idx] == NULL) ? NULL + : &mctx->state_log[str_idx]->nodes); + + if (dest_nodes->nelem == 0) + sctx->sifted_states[str_idx] = NULL; + else + { + if (candidates) + { + /* At first, add the nodes which can epsilon transit to a node in + DEST_NODE. */ + err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + + /* Then, check the limitations in the current sift_context. */ + if (sctx->limits.nelem) + { + err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, + mctx->bkref_ents, str_idx); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + + sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + if (candidates && mctx->state_log[str_idx]->has_backref) + { + err = sift_states_bkref (mctx, sctx, str_idx, candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, + const re_node_set *candidates) +{ + reg_errcode_t err = REG_NOERROR; + Idx i; + + re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + + if (!state->inveclosure.alloc) + { + err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); + if (BE (err != REG_NOERROR, 0)) + return REG_ESPACE; + for (i = 0; i < dest_nodes->nelem; i++) + re_node_set_merge (&state->inveclosure, + dfa->inveclosures + dest_nodes->elems[i]); + } + return re_node_set_add_intersect (dest_nodes, candidates, + &state->inveclosure); +} + +static reg_errcode_t +internal_function +sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, + const re_node_set *candidates) +{ + Idx ecl_idx; + reg_errcode_t err; + re_node_set *inv_eclosure = dfa->inveclosures + node; + re_node_set except_nodes; + re_node_set_init_empty (&except_nodes); + for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) + { + Idx cur_node = inv_eclosure->elems[ecl_idx]; + if (cur_node == node) + continue; + if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) + { + Idx edst1 = dfa->edests[cur_node].elems[0]; + Idx edst2 = ((dfa->edests[cur_node].nelem > 1) + ? dfa->edests[cur_node].elems[1] : REG_MISSING); + if ((!re_node_set_contains (inv_eclosure, edst1) + && re_node_set_contains (dest_nodes, edst1)) + || (REG_VALID_NONZERO_INDEX (edst2) + && !re_node_set_contains (inv_eclosure, edst2) + && re_node_set_contains (dest_nodes, edst2))) + { + err = re_node_set_add_intersect (&except_nodes, candidates, + dfa->inveclosures + cur_node); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&except_nodes); + return err; + } + } + } + } + for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) + { + Idx cur_node = inv_eclosure->elems[ecl_idx]; + if (!re_node_set_contains (&except_nodes, cur_node)) + { + Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; + re_node_set_remove_at (dest_nodes, idx); + } + } + re_node_set_free (&except_nodes); + return REG_NOERROR; +} + +static bool +internal_function +check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, + Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx lim_idx, src_pos, dst_pos; + + Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); + Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); + for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) + { + Idx subexp_idx; + struct re_backref_cache_entry *ent; + ent = mctx->bkref_ents + limits->elems[lim_idx]; + subexp_idx = dfa->nodes[ent->node].opr.idx; + + dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], + subexp_idx, dst_node, dst_idx, + dst_bkref_idx); + src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], + subexp_idx, src_node, src_idx, + src_bkref_idx); + + /* In case of: + ( ) + ( ) + ( ) */ + if (src_pos == dst_pos) + continue; /* This is unrelated limitation. */ + else + return true; + } + return false; +} + +static int +internal_function +check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, + Idx subexp_idx, Idx from_node, Idx bkref_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + const re_node_set *eclosures = dfa->eclosures + from_node; + Idx node_idx; + + /* Else, we are on the boundary: examine the nodes on the epsilon + closure. */ + for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) + { + Idx node = eclosures->elems[node_idx]; + switch (dfa->nodes[node].type) + { + case OP_BACK_REF: + if (bkref_idx != REG_MISSING) + { + struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; + do + { + Idx dst; + int cpos; + + if (ent->node != node) + continue; + + if (subexp_idx < BITSET_WORD_BITS + && !(ent->eps_reachable_subexps_map + & ((bitset_word_t) 1 << subexp_idx))) + continue; + + /* Recurse trying to reach the OP_OPEN_SUBEXP and + OP_CLOSE_SUBEXP cases below. But, if the + destination node is the same node as the source + node, don't recurse because it would cause an + infinite loop: a regex that exhibits this behavior + is ()\1*\1* */ + dst = dfa->edests[node].elems[0]; + if (dst == from_node) + { + if (boundaries & 1) + return -1; + else /* if (boundaries & 2) */ + return 0; + } + + cpos = + check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, + dst, bkref_idx); + if (cpos == -1 /* && (boundaries & 1) */) + return -1; + if (cpos == 0 && (boundaries & 2)) + return 0; + + if (subexp_idx < BITSET_WORD_BITS) + ent->eps_reachable_subexps_map + &= ~((bitset_word_t) 1 << subexp_idx); + } + while (ent++->more); + } + break; + + case OP_OPEN_SUBEXP: + if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) + return -1; + break; + + case OP_CLOSE_SUBEXP: + if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) + return 0; + break; + + default: + break; + } + } + + return (boundaries & 2) ? 1 : 0; +} + +static int +internal_function +check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, + Idx subexp_idx, Idx from_node, Idx str_idx, + Idx bkref_idx) +{ + struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; + int boundaries; + + /* If we are outside the range of the subexpression, return -1 or 1. */ + if (str_idx < lim->subexp_from) + return -1; + + if (lim->subexp_to < str_idx) + return 1; + + /* If we are within the subexpression, return 0. */ + boundaries = (str_idx == lim->subexp_from); + boundaries |= (str_idx == lim->subexp_to) << 1; + if (boundaries == 0) + return 0; + + /* Else, examine epsilon closure. */ + return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, + from_node, bkref_idx); +} + +/* Check the limitations of sub expressions LIMITS, and remove the nodes + which are against limitations from DEST_NODES. */ + +static reg_errcode_t +internal_function +check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, + const re_node_set *candidates, re_node_set *limits, + struct re_backref_cache_entry *bkref_ents, Idx str_idx) +{ + reg_errcode_t err; + Idx node_idx, lim_idx; + + for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) + { + Idx subexp_idx; + struct re_backref_cache_entry *ent; + ent = bkref_ents + limits->elems[lim_idx]; + + if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) + continue; /* This is unrelated limitation. */ + + subexp_idx = dfa->nodes[ent->node].opr.idx; + if (ent->subexp_to == str_idx) + { + Idx ops_node = REG_MISSING; + Idx cls_node = REG_MISSING; + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + re_token_type_t type = dfa->nodes[node].type; + if (type == OP_OPEN_SUBEXP + && subexp_idx == dfa->nodes[node].opr.idx) + ops_node = node; + else if (type == OP_CLOSE_SUBEXP + && subexp_idx == dfa->nodes[node].opr.idx) + cls_node = node; + } + + /* Check the limitation of the open subexpression. */ + /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ + if (REG_VALID_INDEX (ops_node)) + { + err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, + candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + } + + /* Check the limitation of the close subexpression. */ + if (REG_VALID_INDEX (cls_node)) + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + if (!re_node_set_contains (dfa->inveclosures + node, + cls_node) + && !re_node_set_contains (dfa->eclosures + node, + cls_node)) + { + /* It is against this limitation. + Remove it form the current sifted state. */ + err = sub_epsilon_src_nodes (dfa, node, dest_nodes, + candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + --node_idx; + } + } + } + else /* (ent->subexp_to != str_idx) */ + { + for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) + { + Idx node = dest_nodes->elems[node_idx]; + re_token_type_t type = dfa->nodes[node].type; + if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) + { + if (subexp_idx != dfa->nodes[node].opr.idx) + continue; + /* It is against this limitation. + Remove it form the current sifted state. */ + err = sub_epsilon_src_nodes (dfa, node, dest_nodes, + candidates); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + } + } + return REG_NOERROR; +} + +static reg_errcode_t +internal_function +sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx str_idx, const re_node_set *candidates) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx node_idx, node; + re_sift_context_t local_sctx; + Idx first_idx = search_cur_bkref_entry (mctx, str_idx); + + if (first_idx == REG_MISSING) + return REG_NOERROR; + + local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ + + for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) + { + Idx enabled_idx; + re_token_type_t type; + struct re_backref_cache_entry *entry; + node = candidates->elems[node_idx]; + type = dfa->nodes[node].type; + /* Avoid infinite loop for the REs like "()\1+". */ + if (node == sctx->last_node && str_idx == sctx->last_str_idx) + continue; + if (type != OP_BACK_REF) + continue; + + entry = mctx->bkref_ents + first_idx; + enabled_idx = first_idx; + do + { + Idx subexp_len; + Idx to_idx; + Idx dst_node; + bool ok; + re_dfastate_t *cur_state; + + if (entry->node != node) + continue; + subexp_len = entry->subexp_to - entry->subexp_from; + to_idx = str_idx + subexp_len; + dst_node = (subexp_len ? dfa->nexts[node] + : dfa->edests[node].elems[0]); + + if (to_idx > sctx->last_str_idx + || sctx->sifted_states[to_idx] == NULL + || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) + || check_dst_limits (mctx, &sctx->limits, node, + str_idx, dst_node, to_idx)) + continue; + + if (local_sctx.sifted_states == NULL) + { + local_sctx = *sctx; + err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + local_sctx.last_node = node; + local_sctx.last_str_idx = str_idx; + ok = re_node_set_insert (&local_sctx.limits, enabled_idx); + if (BE (! ok, 0)) + { + err = REG_ESPACE; + goto free_return; + } + cur_state = local_sctx.sifted_states[str_idx]; + err = sift_states_backward (mctx, &local_sctx); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + if (sctx->limited_states != NULL) + { + err = merge_state_array (dfa, sctx->limited_states, + local_sctx.sifted_states, + str_idx + 1); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + local_sctx.sifted_states[str_idx] = cur_state; + re_node_set_remove (&local_sctx.limits, enabled_idx); + + /* mctx->bkref_ents may have changed, reload the pointer. */ + entry = mctx->bkref_ents + enabled_idx; + } + while (enabled_idx++, entry++->more); + } + err = REG_NOERROR; + free_return: + if (local_sctx.sifted_states != NULL) + { + re_node_set_free (&local_sctx.limits); + } + + return err; +} + + +#ifdef RE_ENABLE_I18N +static int +internal_function +sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, + Idx node_idx, Idx str_idx, Idx max_str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + int naccepted; + /* Check the node can accept `multi byte'. */ + naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); + if (naccepted > 0 && str_idx + naccepted <= max_str_idx && + !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], + dfa->nexts[node_idx])) + /* The node can't accept the `multi byte', or the + destination was already thrown away, then the node + could't accept the current input `multi byte'. */ + naccepted = 0; + /* Otherwise, it is sure that the node could accept + `naccepted' bytes input. */ + return naccepted; +} +#endif /* RE_ENABLE_I18N */ + + +/* Functions for state transition. */ + +/* Return the next state to which the current state STATE will transit by + accepting the current input byte, and update STATE_LOG if necessary. + If STATE can accept a multibyte char/collating element/back reference + update the destination of STATE_LOG. */ + +static re_dfastate_t * +internal_function +transit_state (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *state) +{ + re_dfastate_t **trtable; + unsigned char ch; + +#ifdef RE_ENABLE_I18N + /* If the current state can accept multibyte. */ + if (BE (state->accept_mb, 0)) + { + *err = transit_state_mb (mctx, state); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + } +#endif /* RE_ENABLE_I18N */ + + /* Then decide the next state with the single byte. */ +#if 0 + if (0) + /* don't use transition table */ + return transit_state_sb (err, mctx, state); +#endif + + /* Use transition table */ + ch = re_string_fetch_byte (&mctx->input); + for (;;) + { + trtable = state->trtable; + if (BE (trtable != NULL, 1)) + return trtable[ch]; + + trtable = state->word_trtable; + if (BE (trtable != NULL, 1)) + { + unsigned int context; + context + = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input) - 1, + mctx->eflags); + if (IS_WORD_CONTEXT (context)) + return trtable[ch + SBC_MAX]; + else + return trtable[ch]; + } + + if (!build_trtable (mctx->dfa, state)) + { + *err = REG_ESPACE; + return NULL; + } + + /* Retry, we now have a transition table. */ + } +} + +/* Update the state_log if we need */ +static re_dfastate_t * +internal_function +merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *next_state) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx cur_idx = re_string_cur_idx (&mctx->input); + + if (cur_idx > mctx->state_log_top) + { + mctx->state_log[cur_idx] = next_state; + mctx->state_log_top = cur_idx; + } + else if (mctx->state_log[cur_idx] == 0) + { + mctx->state_log[cur_idx] = next_state; + } + else + { + re_dfastate_t *pstate; + unsigned int context; + re_node_set next_nodes, *log_nodes, *table_nodes = NULL; + /* If (state_log[cur_idx] != 0), it implies that cur_idx is + the destination of a multibyte char/collating element/ + back reference. Then the next state is the union set of + these destinations and the results of the transition table. */ + pstate = mctx->state_log[cur_idx]; + log_nodes = pstate->entrance_nodes; + if (next_state != NULL) + { + table_nodes = next_state->entrance_nodes; + *err = re_node_set_init_union (&next_nodes, table_nodes, + log_nodes); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + } + else + next_nodes = *log_nodes; + /* Note: We already add the nodes of the initial state, + then we don't need to add them here. */ + + context = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input) - 1, + mctx->eflags); + next_state = mctx->state_log[cur_idx] + = re_acquire_state_context (err, dfa, &next_nodes, context); + /* We don't need to check errors here, since the return value of + this function is next_state and ERR is already set. */ + + if (table_nodes != NULL) + re_node_set_free (&next_nodes); + } + + if (BE (dfa->nbackref, 0) && next_state != NULL) + { + /* Check OP_OPEN_SUBEXP in the current state in case that we use them + later. We must check them here, since the back references in the + next state might use them. */ + *err = check_subexp_matching_top (mctx, &next_state->nodes, + cur_idx); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + + /* If the next state has back references. */ + if (next_state->has_backref) + { + *err = transit_state_bkref (mctx, &next_state->nodes); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + next_state = mctx->state_log[cur_idx]; + } + } + + return next_state; +} + +/* Skip bytes in the input that correspond to part of a + multi-byte match, then look in the log for a state + from which to restart matching. */ +static re_dfastate_t * +internal_function +find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) +{ + re_dfastate_t *cur_state; + do + { + Idx max = mctx->state_log_top; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + + do + { + if (++cur_str_idx > max) + return NULL; + re_string_skip_bytes (&mctx->input, 1); + } + while (mctx->state_log[cur_str_idx] == NULL); + + cur_state = merge_state_with_log (err, mctx, NULL); + } + while (*err == REG_NOERROR && cur_state == NULL); + return cur_state; +} + +/* Helper functions for transit_state. */ + +/* From the node set CUR_NODES, pick up the nodes whose types are + OP_OPEN_SUBEXP and which have corresponding back references in the regular + expression. And register them to use them later for evaluating the + correspoding back references. */ + +static reg_errcode_t +internal_function +check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, + Idx str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx node_idx; + reg_errcode_t err; + + /* TODO: This isn't efficient. + Because there might be more than one nodes whose types are + OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all + nodes. + E.g. RE: (a){2} */ + for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) + { + Idx node = cur_nodes->elems[node_idx]; + if (dfa->nodes[node].type == OP_OPEN_SUBEXP + && dfa->nodes[node].opr.idx < BITSET_WORD_BITS + && (dfa->used_bkref_map + & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) + { + err = match_ctx_add_subtop (mctx, node, str_idx); + if (BE (err != REG_NOERROR, 0)) + return err; + } + } + return REG_NOERROR; +} + +#if 0 +/* Return the next state to which the current state STATE will transit by + accepting the current input byte. */ + +static re_dfastate_t * +transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, + re_dfastate_t *state) +{ + const re_dfa_t *const dfa = mctx->dfa; + re_node_set next_nodes; + re_dfastate_t *next_state; + Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); + unsigned int context; + + *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); + if (BE (*err != REG_NOERROR, 0)) + return NULL; + for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) + { + Idx cur_node = state->nodes.elems[node_cnt]; + if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) + { + *err = re_node_set_merge (&next_nodes, + dfa->eclosures + dfa->nexts[cur_node]); + if (BE (*err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return NULL; + } + } + } + context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); + next_state = re_acquire_state_context (err, dfa, &next_nodes, context); + /* We don't need to check errors here, since the return value of + this function is next_state and ERR is already set. */ + + re_node_set_free (&next_nodes); + re_string_skip_bytes (&mctx->input, 1); + return next_state; +} +#endif + +#ifdef RE_ENABLE_I18N +static reg_errcode_t +internal_function +transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx i; + + for (i = 0; i < pstate->nodes.nelem; ++i) + { + re_node_set dest_nodes, *new_nodes; + Idx cur_node_idx = pstate->nodes.elems[i]; + int naccepted; + Idx dest_idx; + unsigned int context; + re_dfastate_t *dest_state; + + if (!dfa->nodes[cur_node_idx].accept_mb) + continue; + + if (dfa->nodes[cur_node_idx].constraint) + { + context = re_string_context_at (&mctx->input, + re_string_cur_idx (&mctx->input), + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, + context)) + continue; + } + + /* How many bytes the node can accept? */ + naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, + re_string_cur_idx (&mctx->input)); + if (naccepted == 0) + continue; + + /* The node can accepts `naccepted' bytes. */ + dest_idx = re_string_cur_idx (&mctx->input) + naccepted; + mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted + : mctx->max_mb_elem_len); + err = clean_state_log_if_needed (mctx, dest_idx); + if (BE (err != REG_NOERROR, 0)) + return err; +#ifdef DEBUG + assert (dfa->nexts[cur_node_idx] != REG_MISSING); +#endif + new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; + + dest_state = mctx->state_log[dest_idx]; + if (dest_state == NULL) + dest_nodes = *new_nodes; + else + { + err = re_node_set_init_union (&dest_nodes, + dest_state->entrance_nodes, new_nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + context = re_string_context_at (&mctx->input, dest_idx - 1, + mctx->eflags); + mctx->state_log[dest_idx] + = re_acquire_state_context (&err, dfa, &dest_nodes, context); + if (dest_state != NULL) + re_node_set_free (&dest_nodes); + if (BE (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR, 0)) + return err; + } + return REG_NOERROR; +} +#endif /* RE_ENABLE_I18N */ + +static reg_errcode_t +internal_function +transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx i; + Idx cur_str_idx = re_string_cur_idx (&mctx->input); + + for (i = 0; i < nodes->nelem; ++i) + { + Idx dest_str_idx, prev_nelem, bkc_idx; + Idx node_idx = nodes->elems[i]; + unsigned int context; + const re_token_t *node = dfa->nodes + node_idx; + re_node_set *new_dest_nodes; + + /* Check whether `node' is a backreference or not. */ + if (node->type != OP_BACK_REF) + continue; + + if (node->constraint) + { + context = re_string_context_at (&mctx->input, cur_str_idx, + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) + continue; + } + + /* `node' is a backreference. + Check the substring which the substring matched. */ + bkc_idx = mctx->nbkref_ents; + err = get_subexp (mctx, node_idx, cur_str_idx); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + + /* And add the epsilon closures (which is `new_dest_nodes') of + the backreference to appropriate state_log. */ +#ifdef DEBUG + assert (dfa->nexts[node_idx] != REG_MISSING); +#endif + for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) + { + Idx subexp_len; + re_dfastate_t *dest_state; + struct re_backref_cache_entry *bkref_ent; + bkref_ent = mctx->bkref_ents + bkc_idx; + if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) + continue; + subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; + new_dest_nodes = (subexp_len == 0 + ? dfa->eclosures + dfa->edests[node_idx].elems[0] + : dfa->eclosures + dfa->nexts[node_idx]); + dest_str_idx = (cur_str_idx + bkref_ent->subexp_to + - bkref_ent->subexp_from); + context = re_string_context_at (&mctx->input, dest_str_idx - 1, + mctx->eflags); + dest_state = mctx->state_log[dest_str_idx]; + prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 + : mctx->state_log[cur_str_idx]->nodes.nelem); + /* Add `new_dest_node' to state_log. */ + if (dest_state == NULL) + { + mctx->state_log[dest_str_idx] + = re_acquire_state_context (&err, dfa, new_dest_nodes, + context); + if (BE (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR, 0)) + goto free_return; + } + else + { + re_node_set dest_nodes; + err = re_node_set_init_union (&dest_nodes, + dest_state->entrance_nodes, + new_dest_nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&dest_nodes); + goto free_return; + } + mctx->state_log[dest_str_idx] + = re_acquire_state_context (&err, dfa, &dest_nodes, context); + re_node_set_free (&dest_nodes); + if (BE (mctx->state_log[dest_str_idx] == NULL + && err != REG_NOERROR, 0)) + goto free_return; + } + /* We need to check recursively if the backreference can epsilon + transit. */ + if (subexp_len == 0 + && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) + { + err = check_subexp_matching_top (mctx, new_dest_nodes, + cur_str_idx); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + err = transit_state_bkref (mctx, new_dest_nodes); + if (BE (err != REG_NOERROR, 0)) + goto free_return; + } + } + } + err = REG_NOERROR; + free_return: + return err; +} + +/* Enumerate all the candidates which the backreference BKREF_NODE can match + at BKREF_STR_IDX, and register them by match_ctx_add_entry(). + Note that we might collect inappropriate candidates here. + However, the cost of checking them strictly here is too high, then we + delay these checking for prune_impossible_nodes(). */ + +static reg_errcode_t +internal_function +get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) +{ + const re_dfa_t *const dfa = mctx->dfa; + Idx subexp_num, sub_top_idx; + const char *buf = (const char *) re_string_get_buffer (&mctx->input); + /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ + Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); + if (cache_idx != REG_MISSING) + { + const struct re_backref_cache_entry *entry + = mctx->bkref_ents + cache_idx; + do + if (entry->node == bkref_node) + return REG_NOERROR; /* We already checked it. */ + while (entry++->more); + } + + subexp_num = dfa->nodes[bkref_node].opr.idx; + + /* For each sub expression */ + for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) + { + reg_errcode_t err; + re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; + re_sub_match_last_t *sub_last; + Idx sub_last_idx, sl_str, bkref_str_off; + + if (dfa->nodes[sub_top->node].opr.idx != subexp_num) + continue; /* It isn't related. */ + + sl_str = sub_top->str_idx; + bkref_str_off = bkref_str_idx; + /* At first, check the last node of sub expressions we already + evaluated. */ + for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) + { + regoff_t sl_str_diff; + sub_last = sub_top->lasts[sub_last_idx]; + sl_str_diff = sub_last->str_idx - sl_str; + /* The matched string by the sub expression match with the substring + at the back reference? */ + if (sl_str_diff > 0) + { + if (BE (bkref_str_off + sl_str_diff > mctx->input.valid_len, 0)) + { + /* Not enough chars for a successful match. */ + if (bkref_str_off + sl_str_diff > mctx->input.len) + break; + + err = clean_state_log_if_needed (mctx, + bkref_str_off + + sl_str_diff); + if (BE (err != REG_NOERROR, 0)) + return err; + buf = (const char *) re_string_get_buffer (&mctx->input); + } + if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) + /* We don't need to search this sub expression any more. */ + break; + } + bkref_str_off += sl_str_diff; + sl_str += sl_str_diff; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + + /* Reload buf, since the preceding call might have reallocated + the buffer. */ + buf = (const char *) re_string_get_buffer (&mctx->input); + + if (err == REG_NOMATCH) + continue; + if (BE (err != REG_NOERROR, 0)) + return err; + } + + if (sub_last_idx < sub_top->nlasts) + continue; + if (sub_last_idx > 0) + ++sl_str; + /* Then, search for the other last nodes of the sub expression. */ + for (; sl_str <= bkref_str_idx; ++sl_str) + { + Idx cls_node; + regoff_t sl_str_off; + const re_node_set *nodes; + sl_str_off = sl_str - sub_top->str_idx; + /* The matched string by the sub expression match with the substring + at the back reference? */ + if (sl_str_off > 0) + { + if (BE (bkref_str_off >= mctx->input.valid_len, 0)) + { + /* If we are at the end of the input, we cannot match. */ + if (bkref_str_off >= mctx->input.len) + break; + + err = extend_buffers (mctx); + if (BE (err != REG_NOERROR, 0)) + return err; + + buf = (const char *) re_string_get_buffer (&mctx->input); + } + if (buf [bkref_str_off++] != buf[sl_str - 1]) + break; /* We don't need to search this sub expression + any more. */ + } + if (mctx->state_log[sl_str] == NULL) + continue; + /* Does this state have a ')' of the sub expression? */ + nodes = &mctx->state_log[sl_str]->nodes; + cls_node = find_subexp_node (dfa, nodes, subexp_num, + OP_CLOSE_SUBEXP); + if (cls_node == REG_MISSING) + continue; /* No. */ + if (sub_top->path == NULL) + { + sub_top->path = calloc (sizeof (state_array_t), + sl_str - sub_top->str_idx + 1); + if (sub_top->path == NULL) + return REG_ESPACE; + } + /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node + in the current context? */ + err = check_arrival (mctx, sub_top->path, sub_top->node, + sub_top->str_idx, cls_node, sl_str, + OP_CLOSE_SUBEXP); + if (err == REG_NOMATCH) + continue; + if (BE (err != REG_NOERROR, 0)) + return err; + sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); + if (BE (sub_last == NULL, 0)) + return REG_ESPACE; + err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, + bkref_str_idx); + if (err == REG_NOMATCH) + continue; + } + } + return REG_NOERROR; +} + +/* Helper functions for get_subexp(). */ + +/* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. + If it can arrive, register the sub expression expressed with SUB_TOP + and SUB_LAST. */ + +static reg_errcode_t +internal_function +get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, + re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) +{ + reg_errcode_t err; + Idx to_idx; + /* Can the subexpression arrive the back reference? */ + err = check_arrival (mctx, &sub_last->path, sub_last->node, + sub_last->str_idx, bkref_node, bkref_str, + OP_OPEN_SUBEXP); + if (err != REG_NOERROR) + return err; + err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, + sub_last->str_idx); + if (BE (err != REG_NOERROR, 0)) + return err; + to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; + return clean_state_log_if_needed (mctx, to_idx); +} + +/* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. + Search '(' if FL_OPEN, or search ')' otherwise. + TODO: This function isn't efficient... + Because there might be more than one nodes whose types are + OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all + nodes. + E.g. RE: (a){2} */ + +static Idx +internal_function +find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, + Idx subexp_idx, int type) +{ + Idx cls_idx; + for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) + { + Idx cls_node = nodes->elems[cls_idx]; + const re_token_t *node = dfa->nodes + cls_node; + if (node->type == type + && node->opr.idx == subexp_idx) + return cls_node; + } + return REG_MISSING; +} + +/* Check whether the node TOP_NODE at TOP_STR can arrive to the node + LAST_NODE at LAST_STR. We record the path onto PATH since it will be + heavily reused. + Return REG_NOERROR if it can arrive, or REG_NOMATCH otherwise. */ + +static reg_errcode_t +internal_function +check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, + Idx top_str, Idx last_node, Idx last_str, int type) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err = REG_NOERROR; + Idx subexp_num, backup_cur_idx, str_idx, null_cnt; + re_dfastate_t *cur_state = NULL; + re_node_set *cur_nodes, next_nodes; + re_dfastate_t **backup_state_log; + unsigned int context; + + subexp_num = dfa->nodes[top_node].opr.idx; + /* Extend the buffer if we need. */ + if (BE (path->alloc < last_str + mctx->max_mb_elem_len + 1, 0)) + { + re_dfastate_t **new_array; + Idx old_alloc = path->alloc; + Idx new_alloc = old_alloc + last_str + mctx->max_mb_elem_len + 1; + if (BE (new_alloc < old_alloc, 0) + || BE (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc, 0)) + return REG_ESPACE; + new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); + if (BE (new_array == NULL, 0)) + return REG_ESPACE; + path->array = new_array; + path->alloc = new_alloc; + memset (new_array + old_alloc, '\0', + sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); + } + + str_idx = path->next_idx ? path->next_idx : top_str; + + /* Temporary modify MCTX. */ + backup_state_log = mctx->state_log; + backup_cur_idx = mctx->input.cur_idx; + mctx->state_log = path->array; + mctx->input.cur_idx = str_idx; + + /* Setup initial node set. */ + context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); + if (str_idx == top_str) + { + err = re_node_set_init_1 (&next_nodes, top_node); + if (BE (err != REG_NOERROR, 0)) + return err; + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + else + { + cur_state = mctx->state_log[str_idx]; + if (cur_state && cur_state->has_backref) + { + err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); + if (BE (err != REG_NOERROR, 0)) + return err; + } + else + re_node_set_init_empty (&next_nodes); + } + if (str_idx == top_str || (cur_state && cur_state->has_backref)) + { + if (next_nodes.nelem) + { + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (BE (cur_state == NULL && err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + mctx->state_log[str_idx] = cur_state; + } + + for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) + { + re_node_set_empty (&next_nodes); + if (mctx->state_log[str_idx + 1]) + { + err = re_node_set_merge (&next_nodes, + &mctx->state_log[str_idx + 1]->nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + if (cur_state) + { + err = check_arrival_add_next_nodes (mctx, str_idx, + &cur_state->non_eps_nodes, + &next_nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + ++str_idx; + if (next_nodes.nelem) + { + err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + err = expand_bkref_cache (mctx, &next_nodes, str_idx, + subexp_num, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + } + context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); + cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); + if (BE (cur_state == NULL && err != REG_NOERROR, 0)) + { + re_node_set_free (&next_nodes); + return err; + } + mctx->state_log[str_idx] = cur_state; + null_cnt = cur_state == NULL ? null_cnt + 1 : 0; + } + re_node_set_free (&next_nodes); + cur_nodes = (mctx->state_log[last_str] == NULL ? NULL + : &mctx->state_log[last_str]->nodes); + path->next_idx = str_idx; + + /* Fix MCTX. */ + mctx->state_log = backup_state_log; + mctx->input.cur_idx = backup_cur_idx; + + /* Then check the current node set has the node LAST_NODE. */ + if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) + return REG_NOERROR; + + return REG_NOMATCH; +} + +/* Helper functions for check_arrival. */ + +/* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them + to NEXT_NODES. + TODO: This function is similar to the functions transit_state*(), + however this function has many additional works. + Can't we unify them? */ + +static reg_errcode_t +internal_function +check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, + re_node_set *cur_nodes, re_node_set *next_nodes) +{ + const re_dfa_t *const dfa = mctx->dfa; + bool ok; + Idx cur_idx; +#ifdef RE_ENABLE_I18N + reg_errcode_t err = REG_NOERROR; +#endif + re_node_set union_set; + re_node_set_init_empty (&union_set); + for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) + { + int naccepted = 0; + Idx cur_node = cur_nodes->elems[cur_idx]; +#ifdef DEBUG + re_token_type_t type = dfa->nodes[cur_node].type; + assert (!IS_EPSILON_NODE (type)); +#endif +#ifdef RE_ENABLE_I18N + /* If the node may accept `multi byte'. */ + if (dfa->nodes[cur_node].accept_mb) + { + naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, + str_idx); + if (naccepted > 1) + { + re_dfastate_t *dest_state; + Idx next_node = dfa->nexts[cur_node]; + Idx next_idx = str_idx + naccepted; + dest_state = mctx->state_log[next_idx]; + re_node_set_empty (&union_set); + if (dest_state) + { + err = re_node_set_merge (&union_set, &dest_state->nodes); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&union_set); + return err; + } + } + ok = re_node_set_insert (&union_set, next_node); + if (BE (! ok, 0)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + mctx->state_log[next_idx] = re_acquire_state (&err, dfa, + &union_set); + if (BE (mctx->state_log[next_idx] == NULL + && err != REG_NOERROR, 0)) + { + re_node_set_free (&union_set); + return err; + } + } + } +#endif /* RE_ENABLE_I18N */ + if (naccepted + || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) + { + ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); + if (BE (! ok, 0)) + { + re_node_set_free (&union_set); + return REG_ESPACE; + } + } + } + re_node_set_free (&union_set); + return REG_NOERROR; +} + +/* For all the nodes in CUR_NODES, add the epsilon closures of them to + CUR_NODES, however exclude the nodes which are: + - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. + - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. +*/ + +static reg_errcode_t +internal_function +check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, + Idx ex_subexp, int type) +{ + reg_errcode_t err; + Idx idx, outside_node; + re_node_set new_nodes; +#ifdef DEBUG + assert (cur_nodes->nelem); +#endif + err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); + if (BE (err != REG_NOERROR, 0)) + return err; + /* Create a new node set NEW_NODES with the nodes which are epsilon + closures of the node in CUR_NODES. */ + + for (idx = 0; idx < cur_nodes->nelem; ++idx) + { + Idx cur_node = cur_nodes->elems[idx]; + const re_node_set *eclosure = dfa->eclosures + cur_node; + outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); + if (outside_node == REG_MISSING) + { + /* There are no problematic nodes, just merge them. */ + err = re_node_set_merge (&new_nodes, eclosure); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&new_nodes); + return err; + } + } + else + { + /* There are problematic nodes, re-calculate incrementally. */ + err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, + ex_subexp, type); + if (BE (err != REG_NOERROR, 0)) + { + re_node_set_free (&new_nodes); + return err; + } + } + } + re_node_set_free (cur_nodes); + *cur_nodes = new_nodes; + return REG_NOERROR; +} + +/* Helper function for check_arrival_expand_ecl. + Check incrementally the epsilon closure of TARGET, and if it isn't + problematic append it to DST_NODES. */ + +static reg_errcode_t +internal_function +check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, + Idx target, Idx ex_subexp, int type) +{ + Idx cur_node; + for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) + { + bool ok; + + if (dfa->nodes[cur_node].type == type + && dfa->nodes[cur_node].opr.idx == ex_subexp) + { + if (type == OP_CLOSE_SUBEXP) + { + ok = re_node_set_insert (dst_nodes, cur_node); + if (BE (! ok, 0)) + return REG_ESPACE; + } + break; + } + ok = re_node_set_insert (dst_nodes, cur_node); + if (BE (! ok, 0)) + return REG_ESPACE; + if (dfa->edests[cur_node].nelem == 0) + break; + if (dfa->edests[cur_node].nelem == 2) + { + reg_errcode_t err; + err = check_arrival_expand_ecl_sub (dfa, dst_nodes, + dfa->edests[cur_node].elems[1], + ex_subexp, type); + if (BE (err != REG_NOERROR, 0)) + return err; + } + cur_node = dfa->edests[cur_node].elems[0]; + } + return REG_NOERROR; +} + + +/* For all the back references in the current state, calculate the + destination of the back references by the appropriate entry + in MCTX->BKREF_ENTS. */ + +static reg_errcode_t +internal_function +expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, + Idx cur_str, Idx subexp_num, int type) +{ + const re_dfa_t *const dfa = mctx->dfa; + reg_errcode_t err; + Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); + struct re_backref_cache_entry *ent; + + if (cache_idx_start == REG_MISSING) + return REG_NOERROR; + + restart: + ent = mctx->bkref_ents + cache_idx_start; + do + { + Idx to_idx, next_node; + + /* Is this entry ENT is appropriate? */ + if (!re_node_set_contains (cur_nodes, ent->node)) + continue; /* No. */ + + to_idx = cur_str + ent->subexp_to - ent->subexp_from; + /* Calculate the destination of the back reference, and append it + to MCTX->STATE_LOG. */ + if (to_idx == cur_str) + { + /* The backreference did epsilon transit, we must re-check all the + node in the current state. */ + re_node_set new_dests; + reg_errcode_t err2, err3; + next_node = dfa->edests[ent->node].elems[0]; + if (re_node_set_contains (cur_nodes, next_node)) + continue; + err = re_node_set_init_1 (&new_dests, next_node); + err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); + err3 = re_node_set_merge (cur_nodes, &new_dests); + re_node_set_free (&new_dests); + if (BE (err != REG_NOERROR || err2 != REG_NOERROR + || err3 != REG_NOERROR, 0)) + { + err = (err != REG_NOERROR ? err + : (err2 != REG_NOERROR ? err2 : err3)); + return err; + } + /* TODO: It is still inefficient... */ + goto restart; + } + else + { + re_node_set union_set; + next_node = dfa->nexts[ent->node]; + if (mctx->state_log[to_idx]) + { + bool ok; + if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, + next_node)) + continue; + err = re_node_set_init_copy (&union_set, + &mctx->state_log[to_idx]->nodes); + ok = re_node_set_insert (&union_set, next_node); + if (BE (err != REG_NOERROR || ! ok, 0)) + { + re_node_set_free (&union_set); + err = err != REG_NOERROR ? err : REG_ESPACE; + return err; + } + } + else + { + err = re_node_set_init_1 (&union_set, next_node); + if (BE (err != REG_NOERROR, 0)) + return err; + } + mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); + re_node_set_free (&union_set); + if (BE (mctx->state_log[to_idx] == NULL + && err != REG_NOERROR, 0)) + return err; + } + } + while (ent++->more); + return REG_NOERROR; +} + +/* Build transition table for the state. + Return true if successful. */ + +static bool +internal_function +build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) +{ + reg_errcode_t err; + Idx i, j; + int ch; + bool need_word_trtable = false; + bitset_word_t elem, mask; + bool dests_node_malloced = false; + bool dest_states_malloced = false; + Idx ndests; /* Number of the destination states from `state'. */ + re_dfastate_t **trtable; + re_dfastate_t **dest_states = NULL, **dest_states_word, **dest_states_nl; + re_node_set follows, *dests_node; + bitset_t *dests_ch; + bitset_t acceptable; + + struct dests_alloc + { + re_node_set dests_node[SBC_MAX]; + bitset_t dests_ch[SBC_MAX]; + } *dests_alloc; + + /* We build DFA states which corresponds to the destination nodes + from `state'. `dests_node[i]' represents the nodes which i-th + destination state contains, and `dests_ch[i]' represents the + characters which i-th destination state accepts. */ + if (__libc_use_alloca (sizeof (struct dests_alloc))) + dests_alloc = (struct dests_alloc *) alloca (sizeof (struct dests_alloc)); + else + { + dests_alloc = re_malloc (struct dests_alloc, 1); + if (BE (dests_alloc == NULL, 0)) + return false; + dests_node_malloced = true; + } + dests_node = dests_alloc->dests_node; + dests_ch = dests_alloc->dests_ch; + + /* Initialize transiton table. */ + state->word_trtable = state->trtable = NULL; + + /* At first, group all nodes belonging to `state' into several + destinations. */ + ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); + if (BE (! REG_VALID_NONZERO_INDEX (ndests), 0)) + { + if (dests_node_malloced) + free (dests_alloc); + if (ndests == 0) + { + state->trtable = (re_dfastate_t **) + calloc (sizeof (re_dfastate_t *), SBC_MAX); + return true; + } + return false; + } + + err = re_node_set_alloc (&follows, ndests + 1); + if (BE (err != REG_NOERROR, 0)) + goto out_free; + + /* Avoid arithmetic overflow in size calculation. */ + if (BE ((((SIZE_MAX - (sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX) + / (3 * sizeof (re_dfastate_t *))) + < ndests), + 0)) + goto out_free; + + if (__libc_use_alloca ((sizeof (re_node_set) + sizeof (bitset_t)) * SBC_MAX + + ndests * 3 * sizeof (re_dfastate_t *))) + dest_states = (re_dfastate_t **) + alloca (ndests * 3 * sizeof (re_dfastate_t *)); + else + { + dest_states = (re_dfastate_t **) + malloc (ndests * 3 * sizeof (re_dfastate_t *)); + if (BE (dest_states == NULL, 0)) + { +out_free: + if (dest_states_malloced) + free (dest_states); + re_node_set_free (&follows); + for (i = 0; i < ndests; ++i) + re_node_set_free (dests_node + i); + if (dests_node_malloced) + free (dests_alloc); + return false; + } + dest_states_malloced = true; + } + dest_states_word = dest_states + ndests; + dest_states_nl = dest_states_word + ndests; + bitset_empty (acceptable); + + /* Then build the states for all destinations. */ + for (i = 0; i < ndests; ++i) + { + Idx next_node; + re_node_set_empty (&follows); + /* Merge the follows of this destination states. */ + for (j = 0; j < dests_node[i].nelem; ++j) + { + next_node = dfa->nexts[dests_node[i].elems[j]]; + if (next_node != REG_MISSING) + { + err = re_node_set_merge (&follows, dfa->eclosures + next_node); + if (BE (err != REG_NOERROR, 0)) + goto out_free; + } + } + dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); + if (BE (dest_states[i] == NULL && err != REG_NOERROR, 0)) + goto out_free; + /* If the new state has context constraint, + build appropriate states for these contexts. */ + if (dest_states[i]->has_constraint) + { + dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, + CONTEXT_WORD); + if (BE (dest_states_word[i] == NULL && err != REG_NOERROR, 0)) + goto out_free; + + if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) + need_word_trtable = true; + + dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, + CONTEXT_NEWLINE); + if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0)) + goto out_free; + } + else + { + dest_states_word[i] = dest_states[i]; + dest_states_nl[i] = dest_states[i]; + } + bitset_merge (acceptable, dests_ch[i]); + } + + if (!BE (need_word_trtable, 0)) + { + /* We don't care about whether the following character is a word + character, or we are in a single-byte character set so we can + discern by looking at the character code: allocate a + 256-entry transition table. */ + trtable = state->trtable = + (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); + if (BE (trtable == NULL, 0)) + goto out_free; + + /* For all characters ch...: */ + for (i = 0; i < BITSET_WORDS; ++i) + for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; + elem; + mask <<= 1, elem >>= 1, ++ch) + if (BE (elem & 1, 0)) + { + /* There must be exactly one destination which accepts + character ch. See group_nodes_into_DFAstates. */ + for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) + ; + + /* j-th destination accepts the word character ch. */ + if (dfa->word_char[i] & mask) + trtable[ch] = dest_states_word[j]; + else + trtable[ch] = dest_states[j]; + } + } + else + { + /* We care about whether the following character is a word + character, and we are in a multi-byte character set: discern + by looking at the character code: build two 256-entry + transition tables, one starting at trtable[0] and one + starting at trtable[SBC_MAX]. */ + trtable = state->word_trtable = + (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); + if (BE (trtable == NULL, 0)) + goto out_free; + + /* For all characters ch...: */ + for (i = 0; i < BITSET_WORDS; ++i) + for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; + elem; + mask <<= 1, elem >>= 1, ++ch) + if (BE (elem & 1, 0)) + { + /* There must be exactly one destination which accepts + character ch. See group_nodes_into_DFAstates. */ + for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) + ; + + /* j-th destination accepts the word character ch. */ + trtable[ch] = dest_states[j]; + trtable[ch + SBC_MAX] = dest_states_word[j]; + } + } + + /* new line */ + if (bitset_contain (acceptable, NEWLINE_CHAR)) + { + /* The current state accepts newline character. */ + for (j = 0; j < ndests; ++j) + if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) + { + /* k-th destination accepts newline character. */ + trtable[NEWLINE_CHAR] = dest_states_nl[j]; + if (need_word_trtable) + trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; + /* There must be only one destination which accepts + newline. See group_nodes_into_DFAstates. */ + break; + } + } + + if (dest_states_malloced) + free (dest_states); + + re_node_set_free (&follows); + for (i = 0; i < ndests; ++i) + re_node_set_free (dests_node + i); + + if (dests_node_malloced) + free (dests_alloc); + + return true; +} + +/* Group all nodes belonging to STATE into several destinations. + Then for all destinations, set the nodes belonging to the destination + to DESTS_NODE[i] and set the characters accepted by the destination + to DEST_CH[i]. This function return the number of destinations. */ + +static Idx +internal_function +group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, + re_node_set *dests_node, bitset_t *dests_ch) +{ + reg_errcode_t err; + bool ok; + Idx i, j, k; + Idx ndests; /* Number of the destinations from `state'. */ + bitset_t accepts; /* Characters a node can accept. */ + const re_node_set *cur_nodes = &state->nodes; + bitset_empty (accepts); + ndests = 0; + + /* For all the nodes belonging to `state', */ + for (i = 0; i < cur_nodes->nelem; ++i) + { + re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; + re_token_type_t type = node->type; + unsigned int constraint = node->constraint; + + /* Enumerate all single byte character this node can accept. */ + if (type == CHARACTER) + bitset_set (accepts, node->opr.c); + else if (type == SIMPLE_BRACKET) + { + bitset_merge (accepts, node->opr.sbcset); + } + else if (type == OP_PERIOD) + { +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + bitset_merge (accepts, dfa->sb_char); + else +#endif + bitset_set_all (accepts); + if (!(dfa->syntax & RE_DOT_NEWLINE)) + bitset_clear (accepts, '\n'); + if (dfa->syntax & RE_DOT_NOT_NULL) + bitset_clear (accepts, '\0'); + } +#ifdef RE_ENABLE_I18N + else if (type == OP_UTF8_PERIOD) + { + if (ASCII_CHARS % BITSET_WORD_BITS == 0) + memset (accepts, -1, ASCII_CHARS / CHAR_BIT); + else + bitset_merge (accepts, utf8_sb_map); + if (!(dfa->syntax & RE_DOT_NEWLINE)) + bitset_clear (accepts, '\n'); + if (dfa->syntax & RE_DOT_NOT_NULL) + bitset_clear (accepts, '\0'); + } +#endif + else + continue; + + /* Check the `accepts' and sift the characters which are not + match it the context. */ + if (constraint) + { + if (constraint & NEXT_NEWLINE_CONSTRAINT) + { + bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); + bitset_empty (accepts); + if (accepts_newline) + bitset_set (accepts, NEWLINE_CHAR); + else + continue; + } + if (constraint & NEXT_ENDBUF_CONSTRAINT) + { + bitset_empty (accepts); + continue; + } + + if (constraint & NEXT_WORD_CONSTRAINT) + { + bitset_word_t any_set = 0; + if (type == CHARACTER && !node->word_char) + { + bitset_empty (accepts); + continue; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); + else +#endif + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= dfa->word_char[j]); + if (!any_set) + continue; + } + if (constraint & NEXT_NOTWORD_CONSTRAINT) + { + bitset_word_t any_set = 0; + if (type == CHARACTER && node->word_char) + { + bitset_empty (accepts); + continue; + } +#ifdef RE_ENABLE_I18N + if (dfa->mb_cur_max > 1) + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); + else +#endif + for (j = 0; j < BITSET_WORDS; ++j) + any_set |= (accepts[j] &= ~dfa->word_char[j]); + if (!any_set) + continue; + } + } + + /* Then divide `accepts' into DFA states, or create a new + state. Above, we make sure that accepts is not empty. */ + for (j = 0; j < ndests; ++j) + { + bitset_t intersec; /* Intersection sets, see below. */ + bitset_t remains; + /* Flags, see below. */ + bitset_word_t has_intersec, not_subset, not_consumed; + + /* Optimization, skip if this state doesn't accept the character. */ + if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) + continue; + + /* Enumerate the intersection set of this state and `accepts'. */ + has_intersec = 0; + for (k = 0; k < BITSET_WORDS; ++k) + has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; + /* And skip if the intersection set is empty. */ + if (!has_intersec) + continue; + + /* Then check if this state is a subset of `accepts'. */ + not_subset = not_consumed = 0; + for (k = 0; k < BITSET_WORDS; ++k) + { + not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; + not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; + } + + /* If this state isn't a subset of `accepts', create a + new group state, which has the `remains'. */ + if (not_subset) + { + bitset_copy (dests_ch[ndests], remains); + bitset_copy (dests_ch[j], intersec); + err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); + if (BE (err != REG_NOERROR, 0)) + goto error_return; + ++ndests; + } + + /* Put the position in the current group. */ + ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); + if (BE (! ok, 0)) + goto error_return; + + /* If all characters are consumed, go to next node. */ + if (!not_consumed) + break; + } + /* Some characters remain, create a new group. */ + if (j == ndests) + { + bitset_copy (dests_ch[ndests], accepts); + err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); + if (BE (err != REG_NOERROR, 0)) + goto error_return; + ++ndests; + bitset_empty (accepts); + } + } + return ndests; + error_return: + for (j = 0; j < ndests; ++j) + re_node_set_free (dests_node + j); + return REG_MISSING; +} + +#ifdef RE_ENABLE_I18N +/* Check how many bytes the node `dfa->nodes[node_idx]' accepts. + Return the number of the bytes the node accepts. + STR_IDX is the current index of the input string. + + This function handles the nodes which can accept one character, or + one collating element like '.', '[a-z]', opposite to the other nodes + can only accept one byte. */ + +static int +internal_function +check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, + const re_string_t *input, Idx str_idx) +{ + const re_token_t *node = dfa->nodes + node_idx; + int char_len, elem_len; + Idx i; + + if (BE (node->type == OP_UTF8_PERIOD, 0)) + { + unsigned char c = re_string_byte_at (input, str_idx), d; + if (BE (c < 0xc2, 1)) + return 0; + + if (str_idx + 2 > input->len) + return 0; + + d = re_string_byte_at (input, str_idx + 1); + if (c < 0xe0) + return (d < 0x80 || d > 0xbf) ? 0 : 2; + else if (c < 0xf0) + { + char_len = 3; + if (c == 0xe0 && d < 0xa0) + return 0; + } + else if (c < 0xf8) + { + char_len = 4; + if (c == 0xf0 && d < 0x90) + return 0; + } + else if (c < 0xfc) + { + char_len = 5; + if (c == 0xf8 && d < 0x88) + return 0; + } + else if (c < 0xfe) + { + char_len = 6; + if (c == 0xfc && d < 0x84) + return 0; + } + else + return 0; + + if (str_idx + char_len > input->len) + return 0; + + for (i = 1; i < char_len; ++i) + { + d = re_string_byte_at (input, str_idx + i); + if (d < 0x80 || d > 0xbf) + return 0; + } + return char_len; + } + + char_len = re_string_char_size_at (input, str_idx); + if (node->type == OP_PERIOD) + { + if (char_len <= 1) + return 0; + /* FIXME: I don't think this if is needed, as both '\n' + and '\0' are char_len == 1. */ + /* '.' accepts any one character except the following two cases. */ + if ((!(dfa->syntax & RE_DOT_NEWLINE) && + re_string_byte_at (input, str_idx) == '\n') || + ((dfa->syntax & RE_DOT_NOT_NULL) && + re_string_byte_at (input, str_idx) == '\0')) + return 0; + return char_len; + } + + elem_len = re_string_elem_size_at (input, str_idx); + if ((elem_len <= 1 && char_len <= 1) || char_len == 0) + return 0; + + if (node->type == COMPLEX_BRACKET) + { + const re_charset_t *cset = node->opr.mbcset; +# ifdef _LIBC + const unsigned char *pin + = ((const unsigned char *) re_string_get_buffer (input) + str_idx); + Idx j; + uint32_t nrules; +# endif /* _LIBC */ + int match_len = 0; + wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) + ? re_string_wchar_at (input, str_idx) : 0); + + /* match with multibyte character? */ + for (i = 0; i < cset->nmbchars; ++i) + if (wc == cset->mbchars[i]) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + /* match with character_class? */ + for (i = 0; i < cset->nchar_classes; ++i) + { + wctype_t wt = cset->char_classes[i]; + if (__iswctype (wc, wt)) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + } + +# ifdef _LIBC + nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules != 0) + { + unsigned int in_collseq = 0; + const int32_t *table, *indirect; + const unsigned char *weights, *extra; + const char *collseqwc; + int32_t idx; + /* This #include defines a local function! */ +# include + + /* match with collating_symbol? */ + if (cset->ncoll_syms) + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + for (i = 0; i < cset->ncoll_syms; ++i) + { + const unsigned char *coll_sym = extra + cset->coll_syms[i]; + /* Compare the length of input collating element and + the length of current collating element. */ + if (*coll_sym != elem_len) + continue; + /* Compare each bytes. */ + for (j = 0; j < *coll_sym; j++) + if (pin[j] != coll_sym[1 + j]) + break; + if (j == *coll_sym) + { + /* Match if every bytes is equal. */ + match_len = j; + goto check_node_accept_bytes_match; + } + } + + if (cset->nranges) + { + if (elem_len <= char_len) + { + collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); + in_collseq = __collseq_table_lookup (collseqwc, wc); + } + else + in_collseq = find_collation_sequence_value (pin, elem_len); + } + /* match with range expression? */ + for (i = 0; i < cset->nranges; ++i) + if (cset->range_starts[i] <= in_collseq + && in_collseq <= cset->range_ends[i]) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + + /* match with equivalence_class? */ + if (cset->nequiv_classes) + { + const unsigned char *cp = pin; + table = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); + weights = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); + extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); + indirect = (const int32_t *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); + idx = findidx (&cp); + if (idx > 0) + for (i = 0; i < cset->nequiv_classes; ++i) + { + int32_t equiv_class_idx = cset->equiv_classes[i]; + size_t weight_len = weights[idx]; + if (weight_len == weights[equiv_class_idx]) + { + Idx cnt = 0; + while (cnt <= weight_len + && (weights[equiv_class_idx + 1 + cnt] + == weights[idx + 1 + cnt])) + ++cnt; + if (cnt > weight_len) + { + match_len = elem_len; + goto check_node_accept_bytes_match; + } + } + } + } + } + else +# endif /* _LIBC */ + { + /* match with range expression? */ +#if __GNUC__ >= 2 && ! (__STDC_VERSION__ < 199901L && __STRICT_ANSI__) + wchar_t cmp_buf[] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'}; +#else + wchar_t cmp_buf[] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'}; + cmp_buf[2] = wc; +#endif + for (i = 0; i < cset->nranges; ++i) + { + cmp_buf[0] = cset->range_starts[i]; + cmp_buf[4] = cset->range_ends[i]; + if (wcscoll (cmp_buf, cmp_buf + 2) <= 0 + && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0) + { + match_len = char_len; + goto check_node_accept_bytes_match; + } + } + } + check_node_accept_bytes_match: + if (!cset->non_match) + return match_len; + else + { + if (match_len > 0) + return 0; + else + return (elem_len > char_len) ? elem_len : char_len; + } + } + return 0; +} + +# ifdef _LIBC +static unsigned int +internal_function +find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) +{ + uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); + if (nrules == 0) + { + if (mbs_len == 1) + { + /* No valid character. Match it as a single byte character. */ + const unsigned char *collseq = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); + return collseq[mbs[0]]; + } + return UINT_MAX; + } + else + { + int32_t idx; + const unsigned char *extra = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); + int32_t extrasize = (const unsigned char *) + _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; + + for (idx = 0; idx < extrasize;) + { + int mbs_cnt; + bool found = false; + int32_t elem_mbs_len; + /* Skip the name of collating element name. */ + idx = idx + extra[idx] + 1; + elem_mbs_len = extra[idx++]; + if (mbs_len == elem_mbs_len) + { + for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) + if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) + break; + if (mbs_cnt == elem_mbs_len) + /* Found the entry. */ + found = true; + } + /* Skip the byte sequence of the collating element. */ + idx += elem_mbs_len; + /* Adjust for the alignment. */ + idx = (idx + 3) & ~3; + /* Skip the collation sequence value. */ + idx += sizeof (uint32_t); + /* Skip the wide char sequence of the collating element. */ + idx = idx + sizeof (uint32_t) * (extra[idx] + 1); + /* If we found the entry, return the sequence value. */ + if (found) + return *(uint32_t *) (extra + idx); + /* Skip the collation sequence value. */ + idx += sizeof (uint32_t); + } + return UINT_MAX; + } +} +# endif /* _LIBC */ +#endif /* RE_ENABLE_I18N */ + +/* Check whether the node accepts the byte which is IDX-th + byte of the INPUT. */ + +static bool +internal_function +check_node_accept (const re_match_context_t *mctx, const re_token_t *node, + Idx idx) +{ + unsigned char ch; + ch = re_string_byte_at (&mctx->input, idx); + switch (node->type) + { + case CHARACTER: + if (node->opr.c != ch) + return false; + break; + + case SIMPLE_BRACKET: + if (!bitset_contain (node->opr.sbcset, ch)) + return false; + break; + +#ifdef RE_ENABLE_I18N + case OP_UTF8_PERIOD: + if (ch >= ASCII_CHARS) + return false; + /* FALLTHROUGH */ +#endif + case OP_PERIOD: + if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) + || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) + return false; + break; + + default: + return false; + } + + if (node->constraint) + { + /* The node has constraints. Check whether the current context + satisfies the constraints. */ + unsigned int context = re_string_context_at (&mctx->input, idx, + mctx->eflags); + if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) + return false; + } + + return true; +} + +/* Extend the buffers, if the buffers have run out. */ + +static reg_errcode_t +internal_function +extend_buffers (re_match_context_t *mctx) +{ + reg_errcode_t ret; + re_string_t *pstr = &mctx->input; + + /* Avoid overflow. */ + if (BE (SIZE_MAX / 2 / sizeof (re_dfastate_t *) <= pstr->bufs_len, 0)) + return REG_ESPACE; + + /* Double the lengthes of the buffers. */ + ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); + if (BE (ret != REG_NOERROR, 0)) + return ret; + + if (mctx->state_log != NULL) + { + /* And double the length of state_log. */ + /* XXX We have no indication of the size of this buffer. If this + allocation fail we have no indication that the state_log array + does not have the right size. */ + re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, + pstr->bufs_len + 1); + if (BE (new_array == NULL, 0)) + return REG_ESPACE; + mctx->state_log = new_array; + } + + /* Then reconstruct the buffers. */ + if (pstr->icase) + { +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + { + ret = build_wcs_upper_buffer (pstr); + if (BE (ret != REG_NOERROR, 0)) + return ret; + } + else +#endif /* RE_ENABLE_I18N */ + build_upper_buffer (pstr); + } + else + { +#ifdef RE_ENABLE_I18N + if (pstr->mb_cur_max > 1) + build_wcs_buffer (pstr); + else +#endif /* RE_ENABLE_I18N */ + { + if (pstr->trans != NULL) + re_string_translate_buffer (pstr); + } + } + return REG_NOERROR; +} + + +/* Functions for matching context. */ + +/* Initialize MCTX. */ + +static reg_errcode_t +internal_function +match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) +{ + mctx->eflags = eflags; + mctx->match_last = REG_MISSING; + if (n > 0) + { + /* Avoid overflow. */ + size_t max_object_size = + MAX (sizeof (struct re_backref_cache_entry), + sizeof (re_sub_match_top_t *)); + if (BE (SIZE_MAX / max_object_size < n, 0)) + return REG_ESPACE; + + mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); + mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); + if (BE (mctx->bkref_ents == NULL || mctx->sub_tops == NULL, 0)) + return REG_ESPACE; + } + /* Already zero-ed by the caller. + else + mctx->bkref_ents = NULL; + mctx->nbkref_ents = 0; + mctx->nsub_tops = 0; */ + mctx->abkref_ents = n; + mctx->max_mb_elem_len = 1; + mctx->asub_tops = n; + return REG_NOERROR; +} + +/* Clean the entries which depend on the current input in MCTX. + This function must be invoked when the matcher changes the start index + of the input, or changes the input string. */ + +static void +internal_function +match_ctx_clean (re_match_context_t *mctx) +{ + Idx st_idx; + for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) + { + Idx sl_idx; + re_sub_match_top_t *top = mctx->sub_tops[st_idx]; + for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) + { + re_sub_match_last_t *last = top->lasts[sl_idx]; + re_free (last->path.array); + re_free (last); + } + re_free (top->lasts); + if (top->path) + { + re_free (top->path->array); + re_free (top->path); + } + free (top); + } + + mctx->nsub_tops = 0; + mctx->nbkref_ents = 0; +} + +/* Free all the memory associated with MCTX. */ + +static void +internal_function +match_ctx_free (re_match_context_t *mctx) +{ + /* First, free all the memory associated with MCTX->SUB_TOPS. */ + match_ctx_clean (mctx); + re_free (mctx->sub_tops); + re_free (mctx->bkref_ents); +} + +/* Add a new backreference entry to MCTX. + Note that we assume that caller never call this function with duplicate + entry, and call with STR_IDX which isn't smaller than any existing entry. +*/ + +static reg_errcode_t +internal_function +match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, + Idx to) +{ + if (mctx->nbkref_ents >= mctx->abkref_ents) + { + struct re_backref_cache_entry* new_entry; + new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, + mctx->abkref_ents * 2); + if (BE (new_entry == NULL, 0)) + { + re_free (mctx->bkref_ents); + return REG_ESPACE; + } + mctx->bkref_ents = new_entry; + memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', + sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); + mctx->abkref_ents *= 2; + } + if (mctx->nbkref_ents > 0 + && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) + mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; + + mctx->bkref_ents[mctx->nbkref_ents].node = node; + mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; + mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; + mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; + + /* This is a cache that saves negative results of check_dst_limits_calc_pos. + If bit N is clear, means that this entry won't epsilon-transition to + an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If + it is set, check_dst_limits_calc_pos_1 will recurse and try to find one + such node. + + A backreference does not epsilon-transition unless it is empty, so set + to all zeros if FROM != TO. */ + mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map + = (from == to ? -1 : 0); + + mctx->bkref_ents[mctx->nbkref_ents++].more = 0; + if (mctx->max_mb_elem_len < to - from) + mctx->max_mb_elem_len = to - from; + return REG_NOERROR; +} + +/* Return the first entry with the same str_idx, or REG_MISSING if none is + found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ + +static Idx +internal_function +search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) +{ + Idx left, right, mid, last; + last = right = mctx->nbkref_ents; + for (left = 0; left < right;) + { + mid = (left + right) / 2; + if (mctx->bkref_ents[mid].str_idx < str_idx) + left = mid + 1; + else + right = mid; + } + if (left < last && mctx->bkref_ents[left].str_idx == str_idx) + return left; + else + return REG_MISSING; +} + +/* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches + at STR_IDX. */ + +static reg_errcode_t +internal_function +match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) +{ +#ifdef DEBUG + assert (mctx->sub_tops != NULL); + assert (mctx->asub_tops > 0); +#endif + if (BE (mctx->nsub_tops == mctx->asub_tops, 0)) + { + Idx new_asub_tops = mctx->asub_tops * 2; + re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, + re_sub_match_top_t *, + new_asub_tops); + if (BE (new_array == NULL, 0)) + return REG_ESPACE; + mctx->sub_tops = new_array; + mctx->asub_tops = new_asub_tops; + } + mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); + if (BE (mctx->sub_tops[mctx->nsub_tops] == NULL, 0)) + return REG_ESPACE; + mctx->sub_tops[mctx->nsub_tops]->node = node; + mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; + return REG_NOERROR; +} + +/* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches + at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. */ + +static re_sub_match_last_t * +internal_function +match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) +{ + re_sub_match_last_t *new_entry; + if (BE (subtop->nlasts == subtop->alasts, 0)) + { + Idx new_alasts = 2 * subtop->alasts + 1; + re_sub_match_last_t **new_array = re_realloc (subtop->lasts, + re_sub_match_last_t *, + new_alasts); + if (BE (new_array == NULL, 0)) + return NULL; + subtop->lasts = new_array; + subtop->alasts = new_alasts; + } + new_entry = calloc (1, sizeof (re_sub_match_last_t)); + if (BE (new_entry != NULL, 1)) + { + subtop->lasts[subtop->nlasts] = new_entry; + new_entry->node = node; + new_entry->str_idx = str_idx; + ++subtop->nlasts; + } + return new_entry; +} + +static void +internal_function +sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, + re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) +{ + sctx->sifted_states = sifted_sts; + sctx->limited_states = limited_sts; + sctx->last_node = last_node; + sctx->last_str_idx = last_str_idx; + re_node_set_init_empty (&sctx->limits); +} diff --git a/coreseek/m4-1.4.13/lib/sched.in.h b/coreseek/m4-1.4.13/lib/sched.in.h new file mode 100644 index 0000000..6621fa2 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sched.in.h @@ -0,0 +1,47 @@ +/* Replacement for platforms that lack it. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_SCHED_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_SCHED_H@ +# @INCLUDE_NEXT@ @NEXT_SCHED_H@ +#endif + +#ifndef _GL_SCHED_H +#define _GL_SCHED_H + +#if !@HAVE_STRUCT_SCHED_PARAM@ + +struct sched_param +{ + int sched_priority; +}; + +#endif + +#if !(defined SCHED_FIFO && defined SCHED_RR && defined SCHED_OTHER) +# define SCHED_FIFO 1 +# define SCHED_RR 2 +# define SCHED_OTHER 0 +#endif + +#endif /* _GL_SCHED_H */ +#endif /* _GL_SCHED_H */ diff --git a/coreseek/m4-1.4.13/lib/sig-handler.h b/coreseek/m4-1.4.13/lib/sig-handler.h new file mode 100644 index 0000000..969f679 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sig-handler.h @@ -0,0 +1,44 @@ +/* Convenience declarations when working with . + + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_SIG_HANDLER_H +#define _GL_SIG_HANDLER_H + +#include + +/* Convenience type when working with signal handlers. */ +typedef void (*sa_handler_t) (int); + +/* Return the handler of a signal, as a sa_handler_t value regardless + of its true type. The resulting function can be compared to + special values like SIG_IGN but it is not portable to call it. */ +static inline sa_handler_t +get_handler (struct sigaction const *a) +{ +#ifdef SA_SIGINFO + /* POSIX says that special values like SIG_IGN can only occur when + action.sa_flags does not contain SA_SIGINFO. But in Linux 2.4, + for example, sa_sigaction and sa_handler are aliases and a signal + is ignored if sa_sigaction (after casting) equals SIG_IGN. So + use (and cast) sa_sigaction in that case. */ + if (a->sa_flags & SA_SIGINFO) + return (sa_handler_t) a->sa_sigaction; +#endif + return a->sa_handler; +} + +#endif /* _GL_SIG_HANDLER_H */ diff --git a/coreseek/m4-1.4.13/lib/sigaction.c b/coreseek/m4-1.4.13/lib/sigaction.c new file mode 100644 index 0000000..5fcd3ed --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sigaction.c @@ -0,0 +1,204 @@ +/* POSIX compatible signal blocking. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Eric Blake , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include + +/* This implementation of sigaction is tailored to Woe32 behavior: + signal() has SysV semantics (ie. the handler is uninstalled before + it is invoked). This is an inherent data race if an asynchronous + signal is sent twice in a row before we can reinstall our handler, + but there's nothing we can do about it. Meanwhile, sigprocmask() + is not present, and while we can use the gnulib replacement to + provide critical sections, it too suffers from potential data races + in the face of an ill-timed asynchronous signal. And we compound + the situation by reading static storage in a signal handler, which + POSIX warns is not generically async-signal-safe. Oh well. + + Additionally: + - We don't implement SA_NOCLDSTOP or SA_NOCLDWAIT, because SIGCHLD + is not defined. + - We don't implement SA_ONSTACK, because sigaltstack() is not present. + - We ignore SA_RESTART, because blocking Win32 calls are not interrupted + anyway when an asynchronous signal occurs, and the MSVCRT runtime + never sets errno to EINTR. + - We don't implement SA_SIGINFO because it is impossible to do so + portably. + + POSIX states that an application should not mix signal() and + sigaction(). We support the use of signal() within the gnulib + sigprocmask() substitute, but all other application code linked + with this module should stick with only sigaction(). */ + +/* Check some of our assumptions. */ +#if defined SIGCHLD || defined HAVE_SIGALTSTACK || defined HAVE_SIGINTERRUPT +# error "Revisit the assumptions made in the sigaction module" +#endif + +/* Out-of-range substitutes make a good fallback for uncatchable + signals. */ +#ifndef SIGKILL +# define SIGKILL (-1) +#endif +#ifndef SIGSTOP +# define SIGSTOP (-1) +#endif + +/* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias + for the signal SIGABRT. Only one signal handler is stored for both + SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# undef SIGABRT_COMPAT +# define SIGABRT_COMPAT 6 +#endif + +/* A signal handler. */ +typedef void (*handler_t) (int signal); + +/* Set of current actions. If sa_handler for an entry is NULL, then + that signal is not currently handled by the sigaction handler. */ +static struct sigaction volatile action_array[NSIG] /* = 0 */; + +/* Signal handler that is installed for signals. */ +static void +sigaction_handler (int sig) +{ + handler_t handler; + sigset_t mask; + sigset_t oldmask; + int saved_errno = errno; + if (sig < 0 || NSIG <= sig || !action_array[sig].sa_handler) + { + /* Unexpected situation; be careful to avoid recursive abort. */ + if (sig == SIGABRT) + signal (SIGABRT, SIG_DFL); + abort (); + } + + /* Reinstall the signal handler when required; otherwise update the + bookkeeping so that the user's handler may call sigaction and get + accurate results. We know the signal isn't currently blocked, or + we wouldn't be in its handler, therefore we know that we are not + interrupting a sigaction() call. There is a race where any + asynchronous instance of the same signal occurring before we + reinstall the handler will trigger the default handler; oh + well. */ + handler = action_array[sig].sa_handler; + if ((action_array[sig].sa_flags & SA_RESETHAND) == 0) + signal (sig, sigaction_handler); + else + action_array[sig].sa_handler = NULL; + + /* Block appropriate signals. */ + mask = action_array[sig].sa_mask; + if ((action_array[sig].sa_flags & SA_NODEFER) == 0) + sigaddset (&mask, sig); + sigprocmask (SIG_BLOCK, &mask, &oldmask); + + /* Invoke the user's handler, then restore prior mask. */ + errno = saved_errno; + handler (sig); + saved_errno = errno; + sigprocmask (SIG_SETMASK, &oldmask, NULL); + errno = saved_errno; +} + +/* Change and/or query the action that will be taken on delivery of + signal SIG. If not NULL, ACT describes the new behavior. If not + NULL, OACT is set to the prior behavior. Return 0 on success, or + set errno and return -1 on failure. */ +int +sigaction (int sig, const struct sigaction *restrict act, + struct sigaction *restrict oact) +{ + sigset_t mask; + sigset_t oldmask; + int saved_errno; + + if (sig < 0 || NSIG <= sig || sig == SIGKILL || sig == SIGSTOP + || (act && act->sa_handler == SIG_ERR)) + { + errno = EINVAL; + return -1; + } + + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + /* POSIX requires sigaction() to be async-signal-safe. In other + words, if an asynchronous signal can occur while we are anywhere + inside this function, the user's handler could then call + sigaction() recursively and expect consistent results. We meet + this rule by using sigprocmask to block all signals before + modifying any data structure that could be read from a signal + handler; this works since we know that the gnulib sigprocmask + replacement does not try to use sigaction() from its handler. */ + if (!act && !oact) + return 0; + sigfillset (&mask); + sigprocmask (SIG_BLOCK, &mask, &oldmask); + if (oact) + { + if (action_array[sig].sa_handler) + *oact = action_array[sig]; + else + { + /* Safe to change the handler at will here, since all + signals are currently blocked. */ + oact->sa_handler = signal (sig, SIG_DFL); + if (oact->sa_handler == SIG_ERR) + goto failure; + signal (sig, oact->sa_handler); + oact->sa_flags = SA_RESETHAND | SA_NODEFER; + sigemptyset (&oact->sa_mask); + } + } + + if (act) + { + /* Safe to install the handler before updating action_array, + since all signals are currently blocked. */ + if (act->sa_handler == SIG_DFL || act->sa_handler == SIG_IGN) + { + if (signal (sig, act->sa_handler) == SIG_ERR) + goto failure; + action_array[sig].sa_handler = NULL; + } + else + { + if (signal (sig, sigaction_handler) == SIG_ERR) + goto failure; + action_array[sig] = *act; + } + } + sigprocmask (SIG_SETMASK, &oldmask, NULL); + return 0; + + failure: + saved_errno = errno; + sigprocmask (SIG_SETMASK, &oldmask, NULL); + errno = saved_errno; + return -1; +} diff --git a/coreseek/m4-1.4.13/lib/siglist.h b/coreseek/m4-1.4.13/lib/siglist.h new file mode 100644 index 0000000..4e8a749 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/siglist.h @@ -0,0 +1,131 @@ +/* Canonical list of all signal names. + Copyright (C) 1996,97,98,99,2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* This file should be usable for any platform, since it just associates + the SIG* macros with text names and descriptions. The actual values + come from (via ). For any signal macros do not + exist on every platform, we can use #ifdef tests here and still use + this single common file for all platforms. */ + +/* This file is included multiple times. */ + +/* Standard signals */ +#ifdef SIGHUP + init_sig (SIGHUP, "HUP", N_("Hangup")) +#endif +#ifdef SIGINT + init_sig (SIGINT, "INT", N_("Interrupt")) +#endif +#ifdef SIGQUIT + init_sig (SIGQUIT, "QUIT", N_("Quit")) +#endif +#ifdef SIGILL + init_sig (SIGILL, "ILL", N_("Illegal instruction")) +#endif +#ifdef SIGTRAP + init_sig (SIGTRAP, "TRAP", N_("Trace/breakpoint trap")) +#endif +#ifdef SIGABRT + init_sig (SIGABRT, "ABRT", N_("Aborted")) +#endif +#ifdef SIGFPE + init_sig (SIGFPE, "FPE", N_("Floating point exception")) +#endif +#ifdef SIGKILL + init_sig (SIGKILL, "KILL", N_("Killed")) +#endif +#ifdef SIGBUS + init_sig (SIGBUS, "BUS", N_("Bus error")) +#endif +#ifdef SIGSEGV + init_sig (SIGSEGV, "SEGV", N_("Segmentation fault")) +#endif +#ifdef SIGPIPE + init_sig (SIGPIPE, "PIPE", N_("Broken pipe")) +#endif +#ifdef SIGALRM + init_sig (SIGALRM, "ALRM", N_("Alarm clock")) +#endif +#ifdef SIGTERM + init_sig (SIGTERM, "TERM", N_("Terminated")) +#endif +#ifdef SIGURG + init_sig (SIGURG, "URG", N_("Urgent I/O condition")) +#endif +#ifdef SIGSTOP + init_sig (SIGSTOP, "STOP", N_("Stopped (signal)")) +#endif +#ifdef SIGTSTP + init_sig (SIGTSTP, "TSTP", N_("Stopped")) +#endif +#ifdef SIGCONT + init_sig (SIGCONT, "CONT", N_("Continued")) +#endif +#ifdef SIGCHLD + init_sig (SIGCHLD, "CHLD", N_("Child exited")) +#endif +#ifdef SIGTTIN + init_sig (SIGTTIN, "TTIN", N_("Stopped (tty input)")) +#endif +#ifdef SIGTTOU + init_sig (SIGTTOU, "TTOU", N_("Stopped (tty output)")) +#endif +#ifdef SIGIO + init_sig (SIGIO, "IO", N_("I/O possible")) +#endif +#ifdef SIGXCPU + init_sig (SIGXCPU, "XCPU", N_("CPU time limit exceeded")) +#endif +#ifdef SIGXFSZ + init_sig (SIGXFSZ, "XFSZ", N_("File size limit exceeded")) +#endif +#ifdef SIGVTALRM + init_sig (SIGVTALRM, "VTALRM", N_("Virtual timer expired")) +#endif +#ifdef SIGPROF + init_sig (SIGPROF, "PROF", N_("Profiling timer expired")) +#endif +#ifdef SIGWINCH + init_sig (SIGWINCH, "WINCH", N_("Window changed")) +#endif +#ifdef SIGUSR1 + init_sig (SIGUSR1, "USR1", N_("User defined signal 1")) +#endif +#ifdef SIGUSR2 + init_sig (SIGUSR2, "USR2", N_("User defined signal 2")) +#endif + +/* Variations */ +#ifdef SIGEMT + init_sig (SIGEMT, "EMT", N_("EMT trap")) +#endif +#ifdef SIGSYS + init_sig (SIGSYS, "SYS", N_("Bad system call")) +#endif +#ifdef SIGSTKFLT + init_sig (SIGSTKFLT, "STKFLT", N_("Stack fault")) +#endif +#ifdef SIGINFO + init_sig (SIGINFO, "INFO", N_("Information request")) +#elif defined(SIGPWR) && (!defined(SIGLOST) || (SIGPWR != SIGLOST)) + init_sig (SIGPWR, "PWR", N_("Power failure")) +#endif +#ifdef SIGLOST + init_sig (SIGLOST, "LOST", N_("Resource lost")) +#endif diff --git a/coreseek/m4-1.4.13/lib/signal.h b/coreseek/m4-1.4.13/lib/signal.h new file mode 100644 index 0000000..2ee6b40 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/signal.h @@ -0,0 +1,231 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 2006-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#if defined __need_sig_atomic_t || defined __need_sigset_t +/* Special invocation convention inside glibc header files. */ + +# include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SIGNAL_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_SIGNAL_H +#define _GL_SIGNAL_H + +/* The definition of GL_LINK_WARNING is copied here. */ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif + +/* Define pid_t, uid_t. + Also, mingw defines sigset_t not in , but in . */ +#include + +/* On AIX, sig_atomic_t already includes volatile. C99 requires that + 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. + Hence, redefine this to a non-volatile type as needed. */ +#if ! 1 +typedef int rpl_sig_atomic_t; +# undef sig_atomic_t +# define sig_atomic_t rpl_sig_atomic_t +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#if 0 +# ifndef SIGPIPE +/* Define SIGPIPE to a value that does not overlap with other signals. */ +# define SIGPIPE 13 +# define GNULIB_defined_SIGPIPE 1 +/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', + 'write', 'stdio'. */ +# endif +#endif + + +#if !1 + +/* Maximum signal number + 1. */ +# ifndef NSIG +# define NSIG 32 +# endif + +/* This code supports only 32 signals. */ +typedef int verify_NSIG_constraint[2 * (NSIG <= 32) - 1]; + +/* A set or mask of signals. */ +# if !1 +typedef unsigned int sigset_t; +# endif + +/* Test whether a given signal is contained in a signal set. */ +extern int sigismember (const sigset_t *set, int sig); + +/* Initialize a signal set to the empty set. */ +extern int sigemptyset (sigset_t *set); + +/* Add a signal to a signal set. */ +extern int sigaddset (sigset_t *set, int sig); + +/* Remove a signal from a signal set. */ +extern int sigdelset (sigset_t *set, int sig); + +/* Fill a signal set with all possible signals. */ +extern int sigfillset (sigset_t *set); + +/* Return the set of those blocked signals that are pending. */ +extern int sigpending (sigset_t *set); + +/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. + Then, if SET is not NULL, affect the current set of blocked signals by + combining it with *SET as indicated in OPERATION. + In this implementation, you are not allowed to change a signal handler + while the signal is blocked. */ +# define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ +# define SIG_SETMASK 1 /* blocked_set = *set; */ +# define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ +extern int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set); + +# define signal rpl_signal +/* Install the handler FUNC for signal SIG, and return the previous + handler. */ +extern void (*signal (int sig, void (*func) (int))) (int); + +# if GNULIB_defined_SIGPIPE + +/* Raise signal SIG. */ +# undef raise +# define raise rpl_raise +extern int raise (int sig); + +# endif + +#endif /* !1 */ + + +#if !1 + +# if !1 +/* Present to allow compilation, but unsupported by gnulib. */ +union sigval +{ + int sival_int; + void *sival_ptr; +}; + +/* Present to allow compilation, but unsupported by gnulib. */ +struct siginfo_t +{ + int si_signo; + int si_code; + int si_errno; + pid_t si_pid; + uid_t si_uid; + void *si_addr; + int si_status; + long si_band; + union sigval si_value; +}; +typedef struct siginfo_t siginfo_t; +# endif /* !1 */ + +/* We assume that platforms which lack the sigaction() function also lack + the 'struct sigaction' type, and vice versa. */ + +struct sigaction +{ + union + { + void (*_sa_handler) (int); + /* Present to allow compilation, but unsupported by gnulib. POSIX + says that implementations may, but not must, make sa_sigaction + overlap with sa_handler, but we know of no implementation where + they do not overlap. */ + void (*_sa_sigaction) (int, siginfo_t *, void *); + } _sa_func; + sigset_t sa_mask; + /* Not all POSIX flags are supported. */ + int sa_flags; +}; +# define sa_handler _sa_func._sa_handler +# define sa_sigaction _sa_func._sa_sigaction +/* Unsupported flags are not present. */ +# define SA_RESETHAND 1 +# define SA_NODEFER 2 +# define SA_RESTART 4 + +extern int sigaction (int, const struct sigaction *restrict, + struct sigaction *restrict); + +#elif !1 + +# define sa_sigaction sa_handler + +#endif /* !1, !1 */ + + +/* Some systems don't have SA_NODEFER. */ +#ifndef SA_NODEFER +# define SA_NODEFER 0 +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_SIGNAL_H */ +#endif /* _GL_SIGNAL_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/signal.in.h b/coreseek/m4-1.4.13/lib/signal.in.h new file mode 100644 index 0000000..5c42fe9 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/signal.in.h @@ -0,0 +1,202 @@ +/* A GNU-like . + + Copyright (C) 2006-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_sig_atomic_t || defined __need_sigset_t +/* Special invocation convention inside glibc header files. */ + +# @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SIGNAL_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ + +#ifndef _GL_SIGNAL_H +#define _GL_SIGNAL_H + +/* The definition of GL_LINK_WARNING is copied here. */ + +/* Define pid_t, uid_t. + Also, mingw defines sigset_t not in , but in . */ +#include + +/* On AIX, sig_atomic_t already includes volatile. C99 requires that + 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. + Hence, redefine this to a non-volatile type as needed. */ +#if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +typedef int rpl_sig_atomic_t; +# undef sig_atomic_t +# define sig_atomic_t rpl_sig_atomic_t +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_SIGNAL_H_SIGPIPE@ +# ifndef SIGPIPE +/* Define SIGPIPE to a value that does not overlap with other signals. */ +# define SIGPIPE 13 +# define GNULIB_defined_SIGPIPE 1 +/* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', + 'write', 'stdio'. */ +# endif +#endif + + +#if !@HAVE_POSIX_SIGNALBLOCKING@ + +/* Maximum signal number + 1. */ +# ifndef NSIG +# define NSIG 32 +# endif + +/* This code supports only 32 signals. */ +typedef int verify_NSIG_constraint[2 * (NSIG <= 32) - 1]; + +/* A set or mask of signals. */ +# if !@HAVE_SIGSET_T@ +typedef unsigned int sigset_t; +# endif + +/* Test whether a given signal is contained in a signal set. */ +extern int sigismember (const sigset_t *set, int sig); + +/* Initialize a signal set to the empty set. */ +extern int sigemptyset (sigset_t *set); + +/* Add a signal to a signal set. */ +extern int sigaddset (sigset_t *set, int sig); + +/* Remove a signal from a signal set. */ +extern int sigdelset (sigset_t *set, int sig); + +/* Fill a signal set with all possible signals. */ +extern int sigfillset (sigset_t *set); + +/* Return the set of those blocked signals that are pending. */ +extern int sigpending (sigset_t *set); + +/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. + Then, if SET is not NULL, affect the current set of blocked signals by + combining it with *SET as indicated in OPERATION. + In this implementation, you are not allowed to change a signal handler + while the signal is blocked. */ +# define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ +# define SIG_SETMASK 1 /* blocked_set = *set; */ +# define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ +extern int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set); + +# define signal rpl_signal +/* Install the handler FUNC for signal SIG, and return the previous + handler. */ +extern void (*signal (int sig, void (*func) (int))) (int); + +# if GNULIB_defined_SIGPIPE + +/* Raise signal SIG. */ +# undef raise +# define raise rpl_raise +extern int raise (int sig); + +# endif + +#endif /* !@HAVE_POSIX_SIGNALBLOCKING@ */ + + +#if !@HAVE_SIGACTION@ + +# if !@HAVE_SIGINFO_T@ +/* Present to allow compilation, but unsupported by gnulib. */ +union sigval +{ + int sival_int; + void *sival_ptr; +}; + +/* Present to allow compilation, but unsupported by gnulib. */ +struct siginfo_t +{ + int si_signo; + int si_code; + int si_errno; + pid_t si_pid; + uid_t si_uid; + void *si_addr; + int si_status; + long si_band; + union sigval si_value; +}; +typedef struct siginfo_t siginfo_t; +# endif /* !@HAVE_SIGINFO_T@ */ + +/* We assume that platforms which lack the sigaction() function also lack + the 'struct sigaction' type, and vice versa. */ + +struct sigaction +{ + union + { + void (*_sa_handler) (int); + /* Present to allow compilation, but unsupported by gnulib. POSIX + says that implementations may, but not must, make sa_sigaction + overlap with sa_handler, but we know of no implementation where + they do not overlap. */ + void (*_sa_sigaction) (int, siginfo_t *, void *); + } _sa_func; + sigset_t sa_mask; + /* Not all POSIX flags are supported. */ + int sa_flags; +}; +# define sa_handler _sa_func._sa_handler +# define sa_sigaction _sa_func._sa_sigaction +/* Unsupported flags are not present. */ +# define SA_RESETHAND 1 +# define SA_NODEFER 2 +# define SA_RESTART 4 + +extern int sigaction (int, const struct sigaction *restrict, + struct sigaction *restrict); + +#elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ + +# define sa_sigaction sa_handler + +#endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ + + +/* Some systems don't have SA_NODEFER. */ +#ifndef SA_NODEFER +# define SA_NODEFER 0 +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_SIGNAL_H */ +#endif /* _GL_SIGNAL_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/signbitd.c b/coreseek/m4-1.4.13/lib/signbitd.c new file mode 100644 index 0000000..9a7d725 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/signbitd.c @@ -0,0 +1,62 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include "isnand-nolibm.h" +#include "float+.h" + +#undef gl_signbitd + +int +gl_signbitd (double arg) +{ +#if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { double value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGN_IN_LIBC + return copysign (1.0, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnand (arg)) + return 0; + if (arg < 0.0) + return 1; + else if (arg == 0.0) + { + /* Distinguish 0.0 and -0.0. */ + static double plus_zero = 0.0; + double arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0); + } + else + return 0; +#endif +} diff --git a/coreseek/m4-1.4.13/lib/signbitf.c b/coreseek/m4-1.4.13/lib/signbitf.c new file mode 100644 index 0000000..d03fcdd --- /dev/null +++ b/coreseek/m4-1.4.13/lib/signbitf.c @@ -0,0 +1,62 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include "isnanf-nolibm.h" +#include "float+.h" + +#undef gl_signbitf + +int +gl_signbitf (float arg) +{ +#if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { float value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGNF_IN_LIBC + return copysignf (1.0f, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnanf (arg)) + return 0; + if (arg < 0.0f) + return 1; + else if (arg == 0.0f) + { + /* Distinguish 0.0f and -0.0f. */ + static float plus_zero = 0.0f; + float arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0); + } + else + return 0; +#endif +} diff --git a/coreseek/m4-1.4.13/lib/signbitl.c b/coreseek/m4-1.4.13/lib/signbitl.c new file mode 100644 index 0000000..7024697 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/signbitl.c @@ -0,0 +1,62 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include "isnanl-nolibm.h" +#include "float+.h" + +#undef gl_signbitl + +int +gl_signbitl (long double arg) +{ +#if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { long double value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGNL_IN_LIBC + return copysignl (1.0L, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnanl (arg)) + return 0; + if (arg < 0.0L) + return 1; + else if (arg == 0.0L) + { + /* Distinguish 0.0L and -0.0L. */ + static long double plus_zero = 0.0L; + long double arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0); + } + else + return 0; +#endif +} diff --git a/coreseek/m4-1.4.13/lib/sigprocmask.c b/coreseek/m4-1.4.13/lib/sigprocmask.c new file mode 100644 index 0000000..7b486a2 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sigprocmask.c @@ -0,0 +1,329 @@ +/* POSIX compatible signal blocking. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include + +/* We assume that a platform without POSIX signal blocking functions + also does not have the POSIX sigaction() function, only the + signal() function. We also assume signal() has SysV semantics, + where any handler is uninstalled prior to being invoked. This is + true for Woe32 platforms. */ + +/* We use raw signal(), but also provide a wrapper rpl_signal() so + that applications can query or change a blocked signal. */ +#undef signal + +/* Provide invalid signal numbers as fallbacks if the uncatchable + signals are not defined. */ +#ifndef SIGKILL +# define SIGKILL (-1) +#endif +#ifndef SIGSTOP +# define SIGSTOP (-1) +#endif + +/* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias + for the signal SIGABRT. Only one signal handler is stored for both + SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# undef SIGABRT_COMPAT +# define SIGABRT_COMPAT 6 +#endif +#ifdef SIGABRT_COMPAT +# define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT) +#else +# define SIGABRT_COMPAT_MASK 0 +#endif + +typedef void (*handler_t) (int); + +/* Handling of gnulib defined signals. */ + +#if GNULIB_defined_SIGPIPE +static handler_t SIGPIPE_handler = SIG_DFL; +#endif + +#if GNULIB_defined_SIGPIPE +static handler_t +ext_signal (int sig, handler_t handler) +{ + switch (sig) + { + case SIGPIPE: + { + handler_t old_handler = SIGPIPE_handler; + SIGPIPE_handler = handler; + return old_handler; + } + default: /* System defined signal */ + return signal (sig, handler); + } +} +# define signal ext_signal +#endif + +int +sigismember (const sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + return (*set >> sig) & 1; + } + else + return 0; +} + +int +sigemptyset (sigset_t *set) +{ + *set = 0; + return 0; +} + +int +sigaddset (sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + *set |= 1U << sig; + return 0; + } + else + { + errno = EINVAL; + return -1; + } +} + +int +sigdelset (sigset_t *set, int sig) +{ + if (sig >= 0 && sig < NSIG) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + *set &= ~(1U << sig); + return 0; + } + else + { + errno = EINVAL; + return -1; + } +} + + +int +sigfillset (sigset_t *set) +{ + *set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK; + return 0; +} + +/* Set of currently blocked signals. */ +static volatile sigset_t blocked_set /* = 0 */; + +/* Set of currently blocked and pending signals. */ +static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */; + +/* Signal handler that is installed for blocked signals. */ +static void +blocked_handler (int sig) +{ + /* Reinstall the handler, in case the signal occurs multiple times + while blocked. There is an inherent race where an asynchronous + signal in between when the kernel uninstalled the handler and + when we reinstall it will trigger the default handler; oh + well. */ + signal (sig, blocked_handler); + if (sig >= 0 && sig < NSIG) + pending_array[sig] = 1; +} + +int +sigpending (sigset_t *set) +{ + sigset_t pending = 0; + int sig; + + for (sig = 0; sig < NSIG; sig++) + if (pending_array[sig]) + pending |= 1U << sig; + *set = pending; + return 0; +} + +/* The previous signal handlers. + Only the array elements corresponding to blocked signals are relevant. */ +static volatile handler_t old_handlers[NSIG]; + +int +sigprocmask (int operation, const sigset_t *set, sigset_t *old_set) +{ + if (old_set != NULL) + *old_set = blocked_set; + + if (set != NULL) + { + sigset_t new_blocked_set; + sigset_t to_unblock; + sigset_t to_block; + + switch (operation) + { + case SIG_BLOCK: + new_blocked_set = blocked_set | *set; + break; + case SIG_SETMASK: + new_blocked_set = *set; + break; + case SIG_UNBLOCK: + new_blocked_set = blocked_set & ~*set; + break; + default: + errno = EINVAL; + return -1; + } + to_unblock = blocked_set & ~new_blocked_set; + to_block = new_blocked_set & ~blocked_set; + + if (to_block != 0) + { + int sig; + + for (sig = 0; sig < NSIG; sig++) + if ((to_block >> sig) & 1) + { + pending_array[sig] = 0; + if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR) + blocked_set |= 1U << sig; + } + } + + if (to_unblock != 0) + { + sig_atomic_t received[NSIG]; + int sig; + + for (sig = 0; sig < NSIG; sig++) + if ((to_unblock >> sig) & 1) + { + if (signal (sig, old_handlers[sig]) != blocked_handler) + /* The application changed a signal handler while the signal + was blocked, bypassing our rpl_signal replacement. + We don't support this. */ + abort (); + received[sig] = pending_array[sig]; + blocked_set &= ~(1U << sig); + pending_array[sig] = 0; + } + else + received[sig] = 0; + + for (sig = 0; sig < NSIG; sig++) + if (received[sig]) + raise (sig); + } + } + return 0; +} + +/* Install the handler FUNC for signal SIG, and return the previous + handler. */ +handler_t +rpl_signal (int sig, handler_t handler) +{ + /* We must provide a wrapper, so that a user can query what handler + they installed even if that signal is currently blocked. */ + if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP + && handler != SIG_ERR) + { + #ifdef SIGABRT_COMPAT + if (sig == SIGABRT_COMPAT) + sig = SIGABRT; + #endif + + if (blocked_set & (1U << sig)) + { + /* POSIX states that sigprocmask and signal are both + async-signal-safe. This is not true of our + implementation - there is a slight data race where an + asynchronous interrupt on signal A can occur after we + install blocked_handler but before we have updated + old_handlers for signal B, such that handler A can see + stale information if it calls signal(B). Oh well - + signal handlers really shouldn't try to manipulate the + installed handlers of unrelated signals. */ + handler_t result = old_handlers[sig]; + old_handlers[sig] = handler; + return result; + } + else + return signal (sig, handler); + } + else + { + errno = EINVAL; + return SIG_ERR; + } +} + +#if GNULIB_defined_SIGPIPE +/* Raise the signal SIG. */ +int +rpl_raise (int sig) +# undef raise +{ + switch (sig) + { + case SIGPIPE: + if (blocked_set & (1U << sig)) + pending_array[sig] = 1; + else + { + handler_t handler = SIGPIPE_handler; + if (handler == SIG_DFL) + exit (128 + SIGPIPE); + else if (handler != SIG_IGN) + (*handler) (sig); + } + return 0; + default: /* System defined signal */ + return raise (sig); + } +} +#endif diff --git a/coreseek/m4-1.4.13/lib/size_max.h b/coreseek/m4-1.4.13/lib/size_max.h new file mode 100644 index 0000000..2ccc5f0 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/size_max.h @@ -0,0 +1,31 @@ +/* size_max.h -- declare SIZE_MAX through system headers + Copyright (C) 2005-2006 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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 GNULIB_SIZE_MAX_H +#define GNULIB_SIZE_MAX_H + +/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ +# include +/* Get SIZE_MAX declaration on systems like glibc 2. */ +# if HAVE_STDINT_H +# include +# endif +/* On systems where these include files don't define it, SIZE_MAX is defined + in config.h. */ + +#endif /* GNULIB_SIZE_MAX_H */ diff --git a/coreseek/m4-1.4.13/lib/snprintf.c b/coreseek/m4-1.4.13/lib/snprintf.c new file mode 100644 index 0000000..dafbda8 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/snprintf.c @@ -0,0 +1,72 @@ +/* Formatted output to strings. + Copyright (C) 2004, 2006-2008 Free Software Foundation, Inc. + Written by Simon Josefsson and Paul Eggert. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include + +#include +#include +#include +#include +#include + +#include "vasnprintf.h" + +/* Print formatted output to string STR. Similar to sprintf, but + additional length SIZE limit how much is written into STR. Returns + string length of formatted string (which may be larger than SIZE). + STR may be NULL, in which case nothing will be written. On error, + return a negative value. */ +int +snprintf (char *str, size_t size, const char *format, ...) +{ + char *output; + size_t len; + size_t lenbuf = size; + va_list args; + + va_start (args, format); + output = vasnprintf (str, &lenbuf, format, args); + len = lenbuf; + va_end (args); + + if (!output) + return -1; + + if (output != str) + { + if (size) + { + size_t pruned_len = (len < size ? len : size - 1); + memcpy (str, output, pruned_len); + str[pruned_len] = '\0'; + } + + free (output); + } + + if (INT_MAX < len) + { + errno = EOVERFLOW; + return -1; + } + + return len; +} diff --git a/coreseek/m4-1.4.13/lib/spawn.in.h b/coreseek/m4-1.4.13/lib/spawn.in.h new file mode 100644 index 0000000..d67b766 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawn.in.h @@ -0,0 +1,397 @@ +/* Definitions for POSIX spawn interface. + Copyright (C) 2000, 2003, 2004, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_SPAWN_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_SPAWN_H@ +# @INCLUDE_NEXT@ @NEXT_SPAWN_H@ +#endif + +#ifndef _GL_SPAWN_H +#define _GL_SPAWN_H + +#include +#include +#include + +#ifndef __THROW +# define __THROW +#endif + +/* GCC 2.95 and later have "__restrict"; C99 compilers have + "restrict", and "configure" may have defined "restrict". + Other compilers use __restrict, __restrict__, and _Restrict, and + 'configure' might #define 'restrict' to those words, so pick a + different name. */ +#ifndef _Restrict_ +# if 199901L <= __STDC_VERSION__ +# define _Restrict_ restrict +# elif 2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) +# define _Restrict_ __restrict +# else +# define _Restrict_ +# endif +#endif +/* gcc 3.1 and up support the [restrict] syntax. Don't trust + sys/cdefs.h's definition of __restrict_arr, though, as it + mishandles gcc -ansi -pedantic. */ +#ifndef _Restrict_arr_ +# if ((199901L <= __STDC_VERSION__ \ + || ((3 < __GNUC__ || (3 == __GNUC__ && 1 <= __GNUC_MINOR__)) \ + && !__STRICT_ANSI__)) \ + && !defined __GNUG__) +# define _Restrict_arr_ _Restrict_ +# else +# define _Restrict_arr_ +# endif +#endif + +/* The definition of GL_LINK_WARNING is copied here. */ + + +/* Data structure to contain attributes for thread creation. */ +#if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_t rpl_posix_spawnattr_t +#endif +typedef struct +{ + short int _flags; + pid_t _pgrp; + sigset_t _sd; + sigset_t _ss; + struct sched_param _sp; + int _policy; + int __pad[16]; +} posix_spawnattr_t; + + +/* Data structure to contain information about the actions to be + performed in the new process with respect to file descriptors. */ +#if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t +#endif +typedef struct +{ + int _allocated; + int _used; + struct __spawn_action *_actions; + int __pad[16]; +} posix_spawn_file_actions_t; + + +/* Flags to be set in the `posix_spawnattr_t'. */ +#if @REPLACE_POSIX_SPAWN@ +/* Use the values from the system, for better compatibility. */ +/* But this implementation does not support AIX extensions. */ +# undef POSIX_SPAWN_FORK_HANDLERS +#else +# define POSIX_SPAWN_RESETIDS 0x01 +# define POSIX_SPAWN_SETPGROUP 0x02 +# define POSIX_SPAWN_SETSIGDEF 0x04 +# define POSIX_SPAWN_SETSIGMASK 0x08 +# define POSIX_SPAWN_SETSCHEDPARAM 0x10 +# define POSIX_SPAWN_SETSCHEDULER 0x20 +#endif +/* A GNU extension. Use the next free bit position. */ +#define POSIX_SPAWN_USEVFORK \ + ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1) \ + | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1) \ + | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1) \ + | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1) \ + | POSIX_SPAWN_SETSCHEDPARAM | (POSIX_SPAWN_SETSCHEDPARAM - 1) \ + | POSIX_SPAWN_SETSCHEDULER | (POSIX_SPAWN_SETSCHEDULER - 1)) \ + + 1) +typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap + [2 * (((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP + | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK + | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER) + & POSIX_SPAWN_USEVFORK) == 0) - 1]; + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_POSIX_SPAWN@ +/* Spawn a new process executing PATH with the attributes describes in *ATTRP. + Before running the process perform the actions described in FILE-ACTIONS. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn rpl_posix_spawn +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn (pid_t *_Restrict_ __pid, + const char *_Restrict_ __path, + const posix_spawn_file_actions_t *_Restrict_ __file_actions, + const posix_spawnattr_t *_Restrict_ __attrp, + char *const argv[_Restrict_arr_], + char *const envp[_Restrict_arr_]); +# endif +#endif + +#if @GNULIB_POSIX_SPAWNP@ +/* Similar to `posix_spawn' but search for FILE in the PATH. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnp rpl_posix_spawnp +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnp (pid_t *__pid, const char *__file, + const posix_spawn_file_actions_t *__file_actions, + const posix_spawnattr_t *__attrp, + char *const argv[], char *const envp[]); +# endif +#endif + + +#if @GNULIB_POSIX_SPAWNATTR_INIT@ +/* Initialize data structure with attributes for `spawn' to default values. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_init rpl_posix_spawnattr_init +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_init (posix_spawnattr_t *__attr) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_DESTROY@ +/* Free resources associated with ATTR. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_destroy rpl_posix_spawnattr_destroy +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_destroy (posix_spawnattr_t *__attr) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +/* Store signal mask for signals with default handling from ATTR in + SIGDEFAULT. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getsigdefault (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigdefault) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +/* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setsigdefault (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigdefault) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +/* Store signal mask for the new process from ATTR in SIGMASK. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getsigmask (const posix_spawnattr_t *_Restrict_ __attr, + sigset_t *_Restrict_ __sigmask) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +/* Set signal mask for the new process in ATTR to SIGMASK. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setsigmask (posix_spawnattr_t *_Restrict_ __attr, + const sigset_t *_Restrict_ __sigmask) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +/* Get flag word from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getflags rpl_posix_spawnattr_getflags +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getflags (const posix_spawnattr_t *_Restrict_ __attr, + short int *_Restrict_ __flags) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +/* Store flags in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setflags rpl_posix_spawnattr_setflags +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setflags (posix_spawnattr_t *__attr, + short int __flags) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +/* Get process group ID from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getpgroup (const posix_spawnattr_t *_Restrict_ __attr, + pid_t *_Restrict_ __pgroup) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +/* Store process group ID in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setpgroup (posix_spawnattr_t *__attr, + pid_t __pgroup) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +/* Get scheduling policy from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getschedpolicy (const posix_spawnattr_t *_Restrict_ __attr, + int *_Restrict_ __schedpolicy) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +/* Store scheduling policy in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setschedpolicy (posix_spawnattr_t *__attr, + int __schedpolicy) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +/* Get scheduling parameters from the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_getschedparam (const posix_spawnattr_t *_Restrict_ __attr, + struct sched_param *_Restrict_ __schedparam) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +/* Store scheduling parameters in the attribute structure. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawnattr_setschedparam (posix_spawnattr_t *_Restrict_ __attr, + const struct sched_param *_Restrict_ __schedparam) __THROW; +# endif +#endif + + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +/* Initialize data structure for file attribute for `spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_init (posix_spawn_file_actions_t *__file_actions) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +/* Free resources associated with FILE-ACTIONS. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *__file_actions) __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + `open' for the given file during the `spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *_Restrict_ __file_actions, + int __fd, + const char *_Restrict_ __path, + int __oflag, mode_t __mode) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + `close' for the given file descriptor during the `spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *__file_actions, + int __fd) + __THROW; +# endif +#endif + +#if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +/* Add an action to FILE-ACTIONS which tells the implementation to call + `dup2' for the given file descriptors during the `spawn' call. */ +# if @REPLACE_POSIX_SPAWN@ +# define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2 +# endif +# if !@HAVE_POSIX_SPAWN@ || @REPLACE_POSIX_SPAWN@ +extern int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *__file_actions, + int __fd, int __newfd) __THROW; +# endif +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _GL_SPAWN_H */ +#endif /* _GL_SPAWN_H */ diff --git a/coreseek/m4-1.4.13/lib/spawn_faction_addclose.c b/coreseek/m4-1.4.13/lib/spawn_faction_addclose.c new file mode 100644 index 0000000..3566047 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawn_faction_addclose.c @@ -0,0 +1,59 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +#if !_LIBC +# define __sysconf(open_max) getdtablesize () +#endif + +#include "spawn_int.h" + +/* Add an action to FILE-ACTIONS which tells the implementation to call + `close' for the given file descriptor during the `spawn' call. */ +int +posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *file_actions, + int fd) +{ + int maxfd = __sysconf (_SC_OPEN_MAX); + struct __spawn_action *rec; + + /* Test for the validity of the file descriptor. */ + if (fd < 0 || fd >= maxfd) + return EBADF; + + /* Allocate more memory if needed. */ + if (file_actions->_used == file_actions->_allocated + && __posix_spawn_file_actions_realloc (file_actions) != 0) + /* This can only mean we ran out of memory. */ + return ENOMEM; + + /* Add the new value. */ + rec = &file_actions->_actions[file_actions->_used]; + rec->tag = spawn_do_close; + rec->action.open_action.fd = fd; + + /* Account for the new entry. */ + ++file_actions->_used; + + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawn_faction_adddup2.c b/coreseek/m4-1.4.13/lib/spawn_faction_adddup2.c new file mode 100644 index 0000000..688873f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawn_faction_adddup2.c @@ -0,0 +1,60 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +#if !_LIBC +# define __sysconf(open_max) getdtablesize () +#endif + +#include "spawn_int.h" + +/* Add an action to FILE-ACTIONS which tells the implementation to call + `dup2' for the given file descriptors during the `spawn' call. */ +int +posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *file_actions, + int fd, int newfd) +{ + int maxfd = __sysconf (_SC_OPEN_MAX); + struct __spawn_action *rec; + + /* Test for the validity of the file descriptor. */ + if (fd < 0 || newfd < 0 || fd >= maxfd || newfd >= maxfd) + return EBADF; + + /* Allocate more memory if needed. */ + if (file_actions->_used == file_actions->_allocated + && __posix_spawn_file_actions_realloc (file_actions) != 0) + /* This can only mean we ran out of memory. */ + return ENOMEM; + + /* Add the new value. */ + rec = &file_actions->_actions[file_actions->_used]; + rec->tag = spawn_do_dup2; + rec->action.dup2_action.fd = fd; + rec->action.dup2_action.newfd = newfd; + + /* Account for the new entry. */ + ++file_actions->_used; + + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawn_faction_addopen.c b/coreseek/m4-1.4.13/lib/spawn_faction_addopen.c new file mode 100644 index 0000000..2f63bc3 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawn_faction_addopen.c @@ -0,0 +1,63 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +#if !_LIBC +# define __sysconf(open_max) getdtablesize () +#endif + +#include "spawn_int.h" + +/* Add an action to FILE-ACTIONS which tells the implementation to call + `open' for the given file during the `spawn' call. */ +int +posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *file_actions, + int fd, const char *path, int oflag, + mode_t mode) +{ + int maxfd = __sysconf (_SC_OPEN_MAX); + struct __spawn_action *rec; + + /* Test for the validity of the file descriptor. */ + if (fd < 0 || fd >= maxfd) + return EBADF; + + /* Allocate more memory if needed. */ + if (file_actions->_used == file_actions->_allocated + && __posix_spawn_file_actions_realloc (file_actions) != 0) + /* This can only mean we ran out of memory. */ + return ENOMEM; + + /* Add the new value. */ + rec = &file_actions->_actions[file_actions->_used]; + rec->tag = spawn_do_open; + rec->action.open_action.fd = fd; + rec->action.open_action.path = path; + rec->action.open_action.oflag = oflag; + rec->action.open_action.mode = mode; + + /* Account for the new entry. */ + ++file_actions->_used; + + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawn_faction_destroy.c b/coreseek/m4-1.4.13/lib/spawn_faction_destroy.c new file mode 100644 index 0000000..2857302 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawn_faction_destroy.c @@ -0,0 +1,31 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +/* Initialize data structure for file attribute for `spawn' call. */ +int +posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions) +{ + /* Free the memory allocated. */ + free (file_actions->_actions); + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawn_faction_init.c b/coreseek/m4-1.4.13/lib/spawn_faction_init.c new file mode 100644 index 0000000..28271a7 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawn_faction_init.c @@ -0,0 +1,56 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include +#include + +#include "spawn_int.h" + + +/* Function used to increase the size of the allocated array. This + function is called from the `add'-functions. */ +int +__posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *file_actions) +{ + int newalloc = file_actions->_allocated + 8; + void *newmem = realloc (file_actions->_actions, + newalloc * sizeof (struct __spawn_action)); + + if (newmem == NULL) + /* Not enough memory. */ + return ENOMEM; + + file_actions->_actions = (struct __spawn_action *) newmem; + file_actions->_allocated = newalloc; + + return 0; +} + + +/* Initialize data structure for file attribute for `spawn' call. */ +int +posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions) +{ + /* Simply clear all the elements. */ + memset (file_actions, '\0', sizeof (*file_actions)); + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawn_int.h b/coreseek/m4-1.4.13/lib/spawn_int.h new file mode 100644 index 0000000..ec06779 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawn_int.h @@ -0,0 +1,62 @@ +/* Copyright (C) 2000, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Data structure to contain the action information. */ +struct __spawn_action +{ + enum + { + spawn_do_close, + spawn_do_dup2, + spawn_do_open + } tag; + + union + { + struct + { + int fd; + } close_action; + struct + { + int fd; + int newfd; + } dup2_action; + struct + { + int fd; + const char *path; + int oflag; + mode_t mode; + } open_action; + } action; +}; + +#if !_LIBC +# define __posix_spawn_file_actions_realloc gl_posix_spawn_file_actions_realloc +#endif +extern int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t * + file_actions); + +#if !_LIBC +# define __spawni gl_posix_spawn_internal +#endif +extern int __spawni (pid_t *pid, const char *path, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, char *const argv[], + char *const envp[], int use_path); diff --git a/coreseek/m4-1.4.13/lib/spawnattr_destroy.c b/coreseek/m4-1.4.13/lib/spawnattr_destroy.c new file mode 100644 index 0000000..44ce4e0 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawnattr_destroy.c @@ -0,0 +1,28 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Initialize data structure for file attribute for `spawn' call. */ +int +posix_spawnattr_destroy (posix_spawnattr_t *attr) +{ + /* Nothing to do in the moment. */ + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawnattr_init.c b/coreseek/m4-1.4.13/lib/spawnattr_init.c new file mode 100644 index 0000000..1f59143 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawnattr_init.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +/* Initialize data structure for file attribute for `spawn' call. */ +int +posix_spawnattr_init (posix_spawnattr_t *attr) +{ + /* All elements have to be initialized to the default values which + is generally zero. */ + memset (attr, '\0', sizeof (*attr)); + + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawnattr_setflags.c b/coreseek/m4-1.4.13/lib/spawnattr_setflags.c new file mode 100644 index 0000000..f5c2dfe --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawnattr_setflags.c @@ -0,0 +1,45 @@ +/* Copyright (C) 2000, 2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +#define ALL_FLAGS (POSIX_SPAWN_RESETIDS \ + | POSIX_SPAWN_SETPGROUP \ + | POSIX_SPAWN_SETSIGDEF \ + | POSIX_SPAWN_SETSIGMASK \ + | POSIX_SPAWN_SETSCHEDPARAM \ + | POSIX_SPAWN_SETSCHEDULER \ + | POSIX_SPAWN_USEVFORK) + +/* Store flags in the attribute structure. */ +int +posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags) +{ + /* Check no invalid bits are set. */ + if (flags & ~ALL_FLAGS) + return EINVAL; + + /* Store the flag word. */ + attr->_flags = flags; + + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawnattr_setsigmask.c b/coreseek/m4-1.4.13/lib/spawnattr_setsigmask.c new file mode 100644 index 0000000..a3dea26 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawnattr_setsigmask.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +/* Set signal mask for the new process in ATTR to SIGMASK. */ +int +posix_spawnattr_setsigmask (posix_spawnattr_t *attr, + const sigset_t *sigmask) +{ + /* Copy the sigset_t data to the user buffer. */ + memcpy (&attr->_ss, sigmask, sizeof (sigset_t)); + + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/spawni.c b/coreseek/m4-1.4.13/lib/spawni.c new file mode 100644 index 0000000..484a50b --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawni.c @@ -0,0 +1,374 @@ +/* Guts of POSIX spawn interface. Generic POSIX.1 version. + Copyright (C) 2000-2006, 2008-2009 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include +#include "spawn_int.h" + +#include +#include + +#include +#ifndef O_LARGEFILE +# define O_LARGEFILE 0 +#endif + +#if _LIBC || HAVE_PATHS_H +# include +#else +# define _PATH_BSHELL "/bin/sh" +#endif + +#include +#include +#include +#include + +#if _LIBC +# include +#else +# define close_not_cancel close +# define open_not_cancel open +#endif + +#if _LIBC +# include +#else +# if !HAVE_SETEUID +# define seteuid(id) setresuid (-1, id, -1) +# endif +# if !HAVE_SETEGID +# define setegid(id) setresgid (-1, id, -1) +# endif +# define local_seteuid(id) seteuid (id) +# define local_setegid(id) setegid (id) +#endif + +#if _LIBC +# define alloca __alloca +# define execve __execve +# define dup2 __dup2 +# define fork __fork +# define getgid __getgid +# define getuid __getuid +# define sched_setparam __sched_setparam +# define sched_setscheduler __sched_setscheduler +# define setpgid __setpgid +# define sigaction __sigaction +# define sigismember __sigismember +# define sigprocmask __sigprocmask +# define strchrnul __strchrnul +# define vfork __vfork +#else +# undef internal_function +# define internal_function /* empty */ +#endif + + +/* The Unix standard contains a long explanation of the way to signal + an error after the fork() was successful. Since no new wait status + was wanted there is no way to signal an error using one of the + available methods. The committee chose to signal an error by a + normal program exit with the exit code 127. */ +#define SPAWN_ERROR 127 + + +#if defined _MSC_VER || defined __MINGW32__ + +/* Native Woe32 API. */ +int +__spawni (pid_t *pid, const char *file, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, char *const argv[], + char *const envp[], int use_path) +{ + /* Not yet implemented. */ + return ENOSYS; +} + +#else + + +/* The file is accessible but it is not an executable file. Invoke + the shell to interpret it as a script. */ +static void +internal_function +script_execute (const char *file, char *const argv[], char *const envp[]) +{ + /* Count the arguments. */ + int argc = 0; + while (argv[argc++]) + ; + + /* Construct an argument list for the shell. */ + { + char **new_argv = (char **) alloca ((argc + 1) * sizeof (char *)); + new_argv[0] = (char *) _PATH_BSHELL; + new_argv[1] = (char *) file; + while (argc > 1) + { + new_argv[argc] = argv[argc - 1]; + --argc; + } + + /* Execute the shell. */ + execve (new_argv[0], new_argv, envp); + } +} + + +/* Spawn a new process executing PATH with the attributes describes in *ATTRP. + Before running the process perform the actions described in FILE-ACTIONS. */ +int +__spawni (pid_t *pid, const char *file, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, char *const argv[], + char *const envp[], int use_path) +{ + pid_t new_pid; + char *path, *p, *name; + size_t len; + size_t pathlen; + + /* Do this once. */ + short int flags = attrp == NULL ? 0 : attrp->_flags; + + /* Avoid gcc warning + "variable 'flags' might be clobbered by 'longjmp' or 'vfork'" */ + (void) &flags; + + /* Generate the new process. */ +#if HAVE_VFORK + if ((flags & POSIX_SPAWN_USEVFORK) != 0 + /* If no major work is done, allow using vfork. Note that we + might perform the path searching. But this would be done by + a call to execvp(), too, and such a call must be OK according + to POSIX. */ + || ((flags & (POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSIGDEF + | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER + | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_RESETIDS)) == 0 + && file_actions == NULL)) + new_pid = vfork (); + else +#endif + new_pid = fork (); + + if (new_pid != 0) + { + if (new_pid < 0) + return errno; + + /* The call was successful. Store the PID if necessary. */ + if (pid != NULL) + *pid = new_pid; + + return 0; + } + + /* Set signal mask. */ + if ((flags & POSIX_SPAWN_SETSIGMASK) != 0 + && sigprocmask (SIG_SETMASK, &attrp->_ss, NULL) != 0) + _exit (SPAWN_ERROR); + + /* Set signal default action. */ + if ((flags & POSIX_SPAWN_SETSIGDEF) != 0) + { + /* We have to iterate over all signals. This could possibly be + done better but it requires system specific solutions since + the sigset_t data type can be very different on different + architectures. */ + int sig; + struct sigaction sa; + + memset (&sa, '\0', sizeof (sa)); + sa.sa_handler = SIG_DFL; + + for (sig = 1; sig <= NSIG; ++sig) + if (sigismember (&attrp->_sd, sig) != 0 + && sigaction (sig, &sa, NULL) != 0) + _exit (SPAWN_ERROR); + + } + +#if (_LIBC ? defined _POSIX_PRIORITY_SCHEDULING : HAVE_SCHED_SETPARAM && HAVE_SCHED_SETSCHEDULER) + /* Set the scheduling algorithm and parameters. */ + if ((flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)) + == POSIX_SPAWN_SETSCHEDPARAM) + { + if (sched_setparam (0, &attrp->_sp) == -1) + _exit (SPAWN_ERROR); + } + else if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0) + { + if (sched_setscheduler (0, attrp->_policy, + (flags & POSIX_SPAWN_SETSCHEDPARAM) != 0 + ? &attrp->_sp : NULL) == -1) + _exit (SPAWN_ERROR); + } +#endif + + /* Set the process group ID. */ + if ((flags & POSIX_SPAWN_SETPGROUP) != 0 + && setpgid (0, attrp->_pgrp) != 0) + _exit (SPAWN_ERROR); + + /* Set the effective user and group IDs. */ + if ((flags & POSIX_SPAWN_RESETIDS) != 0 + && (local_seteuid (getuid ()) != 0 + || local_setegid (getgid ()) != 0)) + _exit (SPAWN_ERROR); + + /* Execute the file actions. */ + if (file_actions != NULL) + { + int cnt; + + for (cnt = 0; cnt < file_actions->_used; ++cnt) + { + struct __spawn_action *action = &file_actions->_actions[cnt]; + + switch (action->tag) + { + case spawn_do_close: + if (close_not_cancel (action->action.close_action.fd) != 0) + /* Signal the error. */ + _exit (SPAWN_ERROR); + break; + + case spawn_do_open: + { + int new_fd = open_not_cancel (action->action.open_action.path, + action->action.open_action.oflag + | O_LARGEFILE, + action->action.open_action.mode); + + if (new_fd == -1) + /* The `open' call failed. */ + _exit (SPAWN_ERROR); + + /* Make sure the desired file descriptor is used. */ + if (new_fd != action->action.open_action.fd) + { + if (dup2 (new_fd, action->action.open_action.fd) + != action->action.open_action.fd) + /* The `dup2' call failed. */ + _exit (SPAWN_ERROR); + + if (close_not_cancel (new_fd) != 0) + /* The `close' call failed. */ + _exit (SPAWN_ERROR); + } + } + break; + + case spawn_do_dup2: + if (dup2 (action->action.dup2_action.fd, + action->action.dup2_action.newfd) + != action->action.dup2_action.newfd) + /* The `dup2' call failed. */ + _exit (SPAWN_ERROR); + break; + } + } + } + + if (! use_path || strchr (file, '/') != NULL) + { + /* The FILE parameter is actually a path. */ + execve (file, argv, envp); + + if (errno == ENOEXEC) + script_execute (file, argv, envp); + + /* Oh, oh. `execve' returns. This is bad. */ + _exit (SPAWN_ERROR); + } + + /* We have to search for FILE on the path. */ + path = getenv ("PATH"); + if (path == NULL) + { +#if HAVE_CONFSTR + /* There is no `PATH' in the environment. + The default search path is the current directory + followed by the path `confstr' returns for `_CS_PATH'. */ + len = confstr (_CS_PATH, (char *) NULL, 0); + path = (char *) alloca (1 + len); + path[0] = ':'; + (void) confstr (_CS_PATH, path + 1, len); +#else + /* Pretend that the PATH contains only the current directory. */ + path = ""; +#endif + } + + len = strlen (file) + 1; + pathlen = strlen (path); + name = alloca (pathlen + len + 1); + /* Copy the file name at the top. */ + name = (char *) memcpy (name + pathlen + 1, file, len); + /* And add the slash. */ + *--name = '/'; + + p = path; + do + { + char *startp; + + path = p; + p = strchrnul (path, ':'); + + if (p == path) + /* Two adjacent colons, or a colon at the beginning or the end + of `PATH' means to search the current directory. */ + startp = name + 1; + else + startp = (char *) memcpy (name - (p - path), path, p - path); + + /* Try to execute this name. If it works, execv will not return. */ + execve (startp, argv, envp); + + if (errno == ENOEXEC) + script_execute (startp, argv, envp); + + switch (errno) + { + case EACCES: + case ENOENT: + case ESTALE: + case ENOTDIR: + /* Those errors indicate the file is missing or not executable + by us, in which case we want to just try the next path + directory. */ + break; + + default: + /* Some other error means we found an executable file, but + something went wrong executing it; return the error to our + caller. */ + _exit (SPAWN_ERROR); + } + } + while (*p++ != '\0'); + + /* Return with an error. */ + _exit (SPAWN_ERROR); +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/spawnp.c b/coreseek/m4-1.4.13/lib/spawnp.c new file mode 100644 index 0000000..183a17e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/spawnp.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2000 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include "spawn_int.h" + +/* Spawn a new process executing FILE with the attributes describes in *ATTRP. + Before running the process perform the actions described in FILE-ACTIONS. */ +int +posix_spawnp (pid_t *pid, const char *file, + const posix_spawn_file_actions_t *file_actions, + const posix_spawnattr_t *attrp, char *const argv[], + char *const envp[]) +{ + return __spawni (pid, file, file_actions, attrp, argv, envp, 1); +} diff --git a/coreseek/m4-1.4.13/lib/stamp-h1 b/coreseek/m4-1.4.13/lib/stamp-h1 new file mode 100644 index 0000000..8ce1fe9 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stamp-h1 @@ -0,0 +1 @@ +timestamp for lib/config.h diff --git a/coreseek/m4-1.4.13/lib/stdarg.in.h b/coreseek/m4-1.4.13/lib/stdarg.in.h new file mode 100644 index 0000000..186a495 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdarg.in.h @@ -0,0 +1,35 @@ +/* Substitute for and wrapper around . + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_STDARG_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDARG_H@ + +#ifndef _GL_STDARG_H +#define _GL_STDARG_H + +#ifndef va_copy +# define va_copy(a,b) ((a) = (b)) +#endif + +#endif /* _GL_STDARG_H */ +#endif /* _GL_STDARG_H */ diff --git a/coreseek/m4-1.4.13/lib/stdbool.in.h b/coreseek/m4-1.4.13/lib/stdbool.in.h new file mode 100644 index 0000000..cffa0ab --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdbool.in.h @@ -0,0 +1,119 @@ +/* Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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 _GL_STDBOOL_H +#define _GL_STDBOOL_H + +/* ISO C 99 for platforms that lack it. */ + +/* Usage suggestions: + + Programs that use should be aware of some limitations + and standards compliance issues. + + Standards compliance: + + - must be #included before 'bool', 'false', 'true' + can be used. + + - You cannot assume that sizeof (bool) == 1. + + - Programs should not undefine the macros bool, true, and false, + as C99 lists that as an "obsolescent feature". + + Limitations of this substitute, when used in a C89 environment: + + - must be #included before the '_Bool' type can be used. + + - You cannot assume that _Bool is a typedef; it might be a macro. + + - Bit-fields of type 'bool' are not supported. Portable code + should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. + + - In C99, casts and automatic conversions to '_Bool' or 'bool' are + performed in such a way that every nonzero value gets converted + to 'true', and zero gets converted to 'false'. This doesn't work + with this substitute. With this substitute, only the values 0 and 1 + give the expected result when converted to _Bool' or 'bool'. + + Also, it is suggested that programs use 'bool' rather than '_Bool'; + this isn't required, but 'bool' is more common. */ + + +/* 7.16. Boolean type and values */ + +/* BeOS already #defines false 0, true 1. We use the same + definitions below, but temporarily we have to #undef them. */ +#if defined __BEOS__ && !defined __HAIKU__ +# include /* defines bool but not _Bool */ +# undef false +# undef true +#endif + +/* For the sake of symbolic names in gdb, we define true and false as + enum constants, not only as macros. + It is tempting to write + typedef enum { false = 0, true = 1 } _Bool; + so that gdb prints values of type 'bool' symbolically. But if we do + this, values of type '_Bool' may promote to 'int' or 'unsigned int' + (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' + (see ISO C 99 6.3.1.1.(2)). So we add a negative value to the + enum; this ensures that '_Bool' promotes to 'int'. */ +#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__) + /* A compiler known to have 'bool'. */ + /* If the compiler already has both 'bool' and '_Bool', we can assume they + are the same types. */ +# if !@HAVE__BOOL@ +typedef bool _Bool; +# endif +#else +# if !defined __GNUC__ + /* If @HAVE__BOOL@: + Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when + the built-in _Bool type is used. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + Similar bugs are likely with other compilers as well; this file + wouldn't be used if was working. + So we override the _Bool type. + If !@HAVE__BOOL@: + Need to define _Bool ourselves. As 'signed char' or as an enum type? + Use of a typedef, with SunPRO C, leads to a stupid + "warning: _Bool is a keyword in ISO C99". + Use of an enum type, with IRIX cc, leads to a stupid + "warning(1185): enumerated type mixed with another type". + Even the existence of an enum type, without a typedef, + "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. + The only benefit of the enum, debuggability, is not important + with these compilers. So use 'signed char' and no enum. */ +# define _Bool signed char +# else + /* With this compiler, trust the _Bool type if the compiler has it. */ +# if !@HAVE__BOOL@ +typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; +# endif +# endif +#endif +#define bool _Bool + +/* The other macros must be usable in preprocessor directives. */ +#define false 0 +#define true 1 +#define __bool_true_false_are_defined 1 + +#endif /* _GL_STDBOOL_H */ diff --git a/coreseek/m4-1.4.13/lib/stdint.in.h b/coreseek/m4-1.4.13/lib/stdint.in.h new file mode 100644 index 0000000..53aa34a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdint.in.h @@ -0,0 +1,567 @@ +/* Copyright (C) 2001-2002, 2004-2009 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* + * ISO C 99 for platforms that lack it. + * + */ + +#ifndef _GL_STDINT_H + +/* When including a system file that in turn includes , + use the system , not our substitute. This avoids + problems with (for example) VMS, whose includes + . */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if @HAVE_STDINT_H@ +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + /* Other systems may have an incomplete or buggy . + Include it before , since any "#include " + in would reinclude us, skipping our contents because + _GL_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +# endif +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#endif + +#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _GL_STDINT_H + +/* defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via ). + AIX 5.2 isn't needed and causes troubles. + MacOS X 10.4.6 includes (which is us), but + relies on the system definitions, so include + after @NEXT_STDINT_H@. */ +#if @HAVE_SYS_TYPES_H@ && ! defined _AIX +# include +#endif + +/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */ +#include + +#if @HAVE_INTTYPES_H@ + /* In OpenBSD 3.8, includes , which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + also defines intptr_t and uintptr_t. */ +# include +#elif @HAVE_SYS_INTTYPES_H@ + /* Solaris 7 has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include +#endif + +#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by . */ +# include +#endif + +#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Minimum and maximum values for a integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +#define _STDINT_MIN(signed, bits, zero) \ + ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) + +#define _STDINT_MAX(signed, bits, zero) \ + ((signed) \ + ? ~ _STDINT_MIN (signed, bits, zero) \ + : /* The expression for the unsigned case. The subtraction of (signed) \ + is a nop in the unsigned case and avoids "signed integer overflow" \ + warnings in the signed case. */ \ + ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef int8_t +#undef uint8_t +typedef signed char gl_int8_t; +typedef unsigned char gl_uint8_t; +#define int8_t gl_int8_t +#define uint8_t gl_uint8_t + +#undef int16_t +#undef uint16_t +typedef short int gl_int16_t; +typedef unsigned short int gl_uint16_t; +#define int16_t gl_int16_t +#define uint16_t gl_uint16_t + +#undef int32_t +#undef uint32_t +typedef int gl_int32_t; +typedef unsigned int gl_uint32_t; +#define int32_t gl_int32_t +#define uint32_t gl_uint32_t + +/* Do not undefine int64_t if gnulib is not being used with 64-bit + types, since otherwise it breaks platforms like Tandem/NSK. */ +#if LONG_MAX >> 31 >> 31 == 1 +# undef int64_t +typedef long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +#elif defined _MSC_VER +# undef int64_t +typedef __int64 gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +#elif @HAVE_LONG_LONG_INT@ +# undef int64_t +typedef long long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +#endif + +#if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# undef uint64_t +typedef unsigned long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +#elif defined _MSC_VER +# undef uint64_t +typedef unsigned __int64 gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +#elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# undef uint64_t +typedef unsigned long long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +#endif + +/* Avoid collision with Solaris 2.5.1 etc. */ +#define _UINT8_T +#define _UINT32_T +#define _UINT64_T + + +/* 7.18.1.2. Minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +#undef int_least8_t +#undef uint_least8_t +#undef int_least16_t +#undef uint_least16_t +#undef int_least32_t +#undef uint_least32_t +#undef int_least64_t +#undef uint_least64_t +#define int_least8_t int8_t +#define uint_least8_t uint8_t +#define int_least16_t int16_t +#define uint_least16_t uint16_t +#define int_least32_t int32_t +#define uint_least32_t uint32_t +#ifdef GL_INT64_T +# define int_least64_t int64_t +#endif +#ifdef GL_UINT64_T +# define uint_least64_t uint64_t +#endif + +/* 7.18.1.3. Fastest minimum-width integer types */ + +/* Note: Other substitutes may define these types differently. + It is not recommended to use these types in public header files. */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. Assume that 'long int' + is fast enough for all narrower integers. */ + +#undef int_fast8_t +#undef uint_fast8_t +#undef int_fast16_t +#undef uint_fast16_t +#undef int_fast32_t +#undef uint_fast32_t +#undef int_fast64_t +#undef uint_fast64_t +typedef long int gl_int_fast8_t; +typedef unsigned long int gl_uint_fast8_t; +typedef long int gl_int_fast16_t; +typedef unsigned long int gl_uint_fast16_t; +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_t; +#define int_fast8_t gl_int_fast8_t +#define uint_fast8_t gl_uint_fast8_t +#define int_fast16_t gl_int_fast16_t +#define uint_fast16_t gl_uint_fast16_t +#define int_fast32_t gl_int_fast32_t +#define uint_fast32_t gl_uint_fast32_t +#ifdef GL_INT64_T +# define int_fast64_t int64_t +#endif +#ifdef GL_UINT64_T +# define uint_fast64_t uint64_t +#endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ + +#undef intptr_t +#undef uintptr_t +typedef long int gl_intptr_t; +typedef unsigned long int gl_uintptr_t; +#define intptr_t gl_intptr_t +#define uintptr_t gl_uintptr_t + +/* 7.18.1.5. Greatest-width integer types */ + +/* Note: These types are compiler dependent. It may be unwise to use them in + public header files. */ + +#undef intmax_t +#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +typedef long long int gl_intmax_t; +# define intmax_t gl_intmax_t +#elif defined GL_INT64_T +# define intmax_t int64_t +#else +typedef long int gl_intmax_t; +# define intmax_t gl_intmax_t +#endif + +#undef uintmax_t +#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +typedef unsigned long long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +#elif defined GL_UINT64_T +# define uintmax_t uint64_t +#else +typedef unsigned long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +#endif + +/* Verify that intmax_t and uintmax_t have the same size. Too much code + breaks if this is not the case. If this check fails, the reason is likely + to be found in the autoconf macros. */ +typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1]; + +/* 7.18.2. Limits of specified-width integer types */ + +#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS + +/* 7.18.2.1. Limits of exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef INT8_MIN +#undef INT8_MAX +#undef UINT8_MAX +#define INT8_MIN (~ INT8_MAX) +#define INT8_MAX 127 +#define UINT8_MAX 255 + +#undef INT16_MIN +#undef INT16_MAX +#undef UINT16_MAX +#define INT16_MIN (~ INT16_MAX) +#define INT16_MAX 32767 +#define UINT16_MAX 65535 + +#undef INT32_MIN +#undef INT32_MAX +#undef UINT32_MAX +#define INT32_MIN (~ INT32_MAX) +#define INT32_MAX 2147483647 +#define UINT32_MAX 4294967295U + +#undef INT64_MIN +#undef INT64_MAX +#ifdef GL_INT64_T +/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 + evaluates the latter incorrectly in preprocessor expressions. */ +# define INT64_MIN (- INTMAX_C (1) << 63) +# define INT64_MAX INTMAX_C (9223372036854775807) +#endif + +#undef UINT64_MAX +#ifdef GL_UINT64_T +# define UINT64_MAX UINTMAX_C (18446744073709551615) +#endif + +/* 7.18.2.2. Limits of minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +#undef INT_LEAST8_MIN +#undef INT_LEAST8_MAX +#undef UINT_LEAST8_MAX +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define UINT_LEAST8_MAX UINT8_MAX + +#undef INT_LEAST16_MIN +#undef INT_LEAST16_MAX +#undef UINT_LEAST16_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define UINT_LEAST16_MAX UINT16_MAX + +#undef INT_LEAST32_MIN +#undef INT_LEAST32_MAX +#undef UINT_LEAST32_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define UINT_LEAST32_MAX UINT32_MAX + +#undef INT_LEAST64_MIN +#undef INT_LEAST64_MAX +#ifdef GL_INT64_T +# define INT_LEAST64_MIN INT64_MIN +# define INT_LEAST64_MAX INT64_MAX +#endif + +#undef UINT_LEAST64_MAX +#ifdef GL_UINT64_T +# define UINT_LEAST64_MAX UINT64_MAX +#endif + +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. */ + +#undef INT_FAST8_MIN +#undef INT_FAST8_MAX +#undef UINT_FAST8_MAX +#define INT_FAST8_MIN LONG_MIN +#define INT_FAST8_MAX LONG_MAX +#define UINT_FAST8_MAX ULONG_MAX + +#undef INT_FAST16_MIN +#undef INT_FAST16_MAX +#undef UINT_FAST16_MAX +#define INT_FAST16_MIN LONG_MIN +#define INT_FAST16_MAX LONG_MAX +#define UINT_FAST16_MAX ULONG_MAX + +#undef INT_FAST32_MIN +#undef INT_FAST32_MAX +#undef UINT_FAST32_MAX +#define INT_FAST32_MIN LONG_MIN +#define INT_FAST32_MAX LONG_MAX +#define UINT_FAST32_MAX ULONG_MAX + +#undef INT_FAST64_MIN +#undef INT_FAST64_MAX +#ifdef GL_INT64_T +# define INT_FAST64_MIN INT64_MIN +# define INT_FAST64_MAX INT64_MAX +#endif + +#undef UINT_FAST64_MAX +#ifdef GL_UINT64_T +# define UINT_FAST64_MAX UINT64_MAX +#endif + +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +#undef INTPTR_MIN +#undef INTPTR_MAX +#undef UINTPTR_MAX +#define INTPTR_MIN LONG_MIN +#define INTPTR_MAX LONG_MAX +#define UINTPTR_MAX ULONG_MAX + +/* 7.18.2.5. Limits of greatest-width integer types */ + +#undef INTMAX_MIN +#undef INTMAX_MAX +#ifdef INT64_MAX +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +#else +# define INTMAX_MIN INT32_MIN +# define INTMAX_MAX INT32_MAX +#endif + +#undef UINTMAX_MAX +#ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +#else +# define UINTMAX_MAX UINT32_MAX +#endif + +/* 7.18.3. Limits of other integer types */ + +/* ptrdiff_t limits */ +#undef PTRDIFF_MIN +#undef PTRDIFF_MAX +#if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +#else +# define PTRDIFF_MIN \ + _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +# define PTRDIFF_MAX \ + _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +#endif + +/* sig_atomic_t limits */ +#undef SIG_ATOMIC_MIN +#undef SIG_ATOMIC_MAX +#define SIG_ATOMIC_MIN \ + _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) +#define SIG_ATOMIC_MAX \ + _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) + + +/* size_t limit */ +#undef SIZE_MAX +#if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# else +# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) +# endif +#else +# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) +#endif + +/* wchar_t limits */ +/* Get WCHAR_MIN, WCHAR_MAX. + This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested + includes -> -> -> , and the latter includes + and assumes its types are already defined. */ +#if ! (defined WCHAR_MIN && defined WCHAR_MAX) +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +#endif +#undef WCHAR_MIN +#undef WCHAR_MAX +#define WCHAR_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +#define WCHAR_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) + +/* wint_t limits */ +#undef WINT_MIN +#undef WINT_MAX +#define WINT_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +#define WINT_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) + +#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */ + +/* 7.18.4. Macros for integer constants */ + +#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS + +/* 7.18.4.1. Macros for minimum-width integer constants */ +/* According to ISO C 99 Technical Corrigendum 1 */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ + +#undef INT8_C +#undef UINT8_C +#define INT8_C(x) x +#define UINT8_C(x) x + +#undef INT16_C +#undef UINT16_C +#define INT16_C(x) x +#define UINT16_C(x) x + +#undef INT32_C +#undef UINT32_C +#define INT32_C(x) x +#define UINT32_C(x) x ## U + +#undef INT64_C +#undef UINT64_C +#if LONG_MAX >> 31 >> 31 == 1 +# define INT64_C(x) x##L +#elif defined _MSC_VER +# define INT64_C(x) x##i64 +#elif @HAVE_LONG_LONG_INT@ +# define INT64_C(x) x##LL +#endif +#if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# define UINT64_C(x) x##UL +#elif defined _MSC_VER +# define UINT64_C(x) x##ui64 +#elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# define UINT64_C(x) x##ULL +#endif + +/* 7.18.4.2. Macros for greatest-width integer constants */ + +#undef INTMAX_C +#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# define INTMAX_C(x) x##LL +#elif defined GL_INT64_T +# define INTMAX_C(x) INT64_C(x) +#else +# define INTMAX_C(x) x##L +#endif + +#undef UINTMAX_C +#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# define UINTMAX_C(x) x##ULL +#elif defined GL_UINT64_T +# define UINTMAX_C(x) UINT64_C(x) +#else +# define UINTMAX_C(x) x##UL +#endif + +#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ + +#endif /* _GL_STDINT_H */ +#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/coreseek/m4-1.4.13/lib/stdio--.h b/coreseek/m4-1.4.13/lib/stdio--.h new file mode 100644 index 0000000..39fca29 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdio--.h @@ -0,0 +1,27 @@ +/* Like stdio.h, but redefine some names to avoid glitches. + + Copyright (C) 2005, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include +#include "stdio-safer.h" + +#undef fopen +#define fopen fopen_safer + +#undef tmpfile +#define tmpfile tmpfile_safer diff --git a/coreseek/m4-1.4.13/lib/stdio-impl.h b/coreseek/m4-1.4.13/lib/stdio-impl.h new file mode 100644 index 0000000..c803e88 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdio-impl.h @@ -0,0 +1,94 @@ +/* Implementation details of FILE streams. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Many stdio implementations have the same logic and therefore can share + the same implementation of stdio extension API, except that some fields + have different naming conventions, or their access requires some casts. */ + + +/* BSD stdio derived implementations. */ + +#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + +# if defined __DragonFly__ /* DragonFly */ + /* See . */ +# define fp_ ((struct { struct __FILE_public pub; \ + struct { unsigned char *_base; int _size; } _bf; \ + void *cookie; \ + void *_close; \ + void *_read; \ + void *_seek; \ + void *_write; \ + struct { unsigned char *_base; int _size; } _ub; \ + int _ur; \ + unsigned char _ubuf[3]; \ + unsigned char _nbuf[1]; \ + struct { unsigned char *_base; int _size; } _lb; \ + int _blksize; \ + fpos_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) + /* See . */ +# define _p pub._p +# define _flags pub._flags +# define _r pub._r +# define _w pub._w +# else +# define fp_ fp +# endif + +# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */ + /* See + and */ + struct __sfileext + { + struct __sbuf _ub; /* ungetc buffer */ + /* More fields, not relevant here. */ + }; +# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub +# else /* FreeBSD, DragonFly, MacOS X, Cygwin */ +# define fp_ub fp_->_ub +# endif + +# define HASUB(fp) (fp_ub._base != NULL) + +#endif + + +/* SystemV derived implementations. */ + +#if defined _IOERR + +# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ +# define fp_ ((struct { unsigned char *_ptr; \ + unsigned char *_base; \ + unsigned char *_end; \ + long _cnt; \ + int _file; \ + unsigned int _flag; \ + } *) fp) +# else +# define fp_ fp +# endif + +# if defined _SCO_DS /* OpenServer */ +# define _cnt __cnt +# define _ptr __ptr +# define _base __base +# define _flag __flag +# endif + +#endif diff --git a/coreseek/m4-1.4.13/lib/stdio-safer.h b/coreseek/m4-1.4.13/lib/stdio-safer.h new file mode 100644 index 0000000..c881d5a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdio-safer.h @@ -0,0 +1,23 @@ +/* Invoke stdio functions, but avoid some glitches. + + Copyright (C) 2001, 2003, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +FILE *fopen_safer (char const *, char const *); +FILE *tmpfile_safer (void); diff --git a/coreseek/m4-1.4.13/lib/stdio-write.c b/coreseek/m4-1.4.13/lib/stdio-write.c new file mode 100644 index 0000000..f1d0fcb --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdio-write.c @@ -0,0 +1,148 @@ +/* POSIX compatible FILE stream write function. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Replace these functions only if module 'sigpipe' is requested. */ +#if GNULIB_SIGPIPE + +/* On native Windows platforms, SIGPIPE does not exist. When write() is + called on a pipe with no readers, WriteFile() fails with error + GetLastError() = ERROR_NO_DATA, and write() in consequence fails with + error EINVAL. This write() function is at the basis of the function + which flushes the buffer of a FILE stream. */ + +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +# include +# include +# include + +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include + +# define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ + if (ferror (stream)) \ + return (EXPRESSION); \ + else \ + { \ + RETTYPE ret; \ + SetLastError (0); \ + ret = (EXPRESSION); \ + if (FAILED && GetLastError () == ERROR_NO_DATA && ferror (stream)) \ + { \ + int fd = fileno (stream); \ + if (fd >= 0 \ + && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE)\ + { \ + /* Try to raise signal SIGPIPE. */ \ + raise (SIGPIPE); \ + /* If it is currently blocked or ignored, change errno from \ + EINVAL to EPIPE. */ \ + errno = EPIPE; \ + } \ + } \ + return ret; \ + } + +# if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ +int +printf (const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfprintf (stdout, format, args); + va_end (args); + + return retval; +} +# endif + +# if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ +int +fprintf (FILE *stream, const char *format, ...) +{ + int retval; + va_list args; + + va_start (args, format); + retval = vfprintf (stream, format, args); + va_end (args); + + return retval; +} +# endif + +# if !REPLACE_VFPRINTF_POSIX /* avoid collision with vprintf.c */ +int +vprintf (const char *format, va_list args) +{ + return vfprintf (stdout, format, args); +} +# endif + +# if !REPLACE_VPRINTF_POSIX /* avoid collision with vfprintf.c */ +int +vfprintf (FILE *stream, const char *format, va_list args) +#undef vfprintf +{ + CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF) +} +# endif + +int +putchar (int c) +{ + return fputc (c, stdout); +} + +int +fputc (int c, FILE *stream) +#undef fputc +{ + CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF) +} + +int +fputs (const char *string, FILE *stream) +#undef fputs +{ + CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF) +} + +int +puts (const char *string) +#undef puts +{ + FILE *stream = stdout; + CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF) +} + +size_t +fwrite (const void *ptr, size_t s, size_t n, FILE *stream) +#undef fwrite +{ + CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n) +} + +# endif +#endif diff --git a/coreseek/m4-1.4.13/lib/stdio.h b/coreseek/m4-1.4.13/lib/stdio.h new file mode 100644 index 0000000..dd680e4 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdio.h @@ -0,0 +1,553 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 2004, 2007-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#if defined __need_FILE || defined __need___FILE +/* Special invocation convention inside glibc header files. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_STDIO_H +#define _GL_STDIO_H + +#include +#include + +#if (1 && 1) \ + || (1 && 0) \ + || (0 && !1) \ + || (0 && (!1 || 0)) +/* Get off_t and ssize_t. */ +# include +#endif + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + + +/* The definition of GL_LINK_WARNING is copied here. */ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if 0 +# if 0 +# define fprintf rpl_fprintf +extern int fprintf (FILE *fp, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +# endif +#elif 1 && 0 && 0 +# define fprintf rpl_fprintf +extern int fprintf (FILE *fp, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +#elif defined GNULIB_POSIXCHECK +# undef fprintf +# define fprintf \ + (GL_LINK_WARNING ("fprintf is not always POSIX compliant - " \ + "use gnulib module fprintf-posix for portable " \ + "POSIX compliance"), \ + fprintf) +#endif + +#if 0 +# if 0 +# define vfprintf rpl_vfprintf +extern int vfprintf (FILE *fp, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#elif 1 && 0 && 0 +# define vfprintf rpl_vfprintf +extern int vfprintf (FILE *fp, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +#elif defined GNULIB_POSIXCHECK +# undef vfprintf +# define vfprintf(s,f,a) \ + (GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \ + "use gnulib module vfprintf-posix for portable " \ + "POSIX compliance"), \ + vfprintf (s, f, a)) +#endif + +#if 0 +# if 0 +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +extern int printf (const char *format, ...) + __attribute__ ((__format__ (__printf__, 1, 2))); +# endif +#elif 1 && 0 && 0 +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +extern int printf (const char *format, ...) + __attribute__ ((__format__ (__printf__, 1, 2))); +#elif defined GNULIB_POSIXCHECK +# undef printf +# define printf \ + (GL_LINK_WARNING ("printf is not always POSIX compliant - " \ + "use gnulib module printf-posix for portable " \ + "POSIX compliance"), \ + printf) +/* Don't break __attribute__((format(printf,M,N))). */ +# define format(kind,m,n) format (__##kind##__, m, n) +# define __format__(kind,m,n) __format__ (__##kind##__, m, n) +# define ____printf____ __printf__ +# define ____scanf____ __scanf__ +# define ____strftime____ __strftime__ +# define ____strfmon____ __strfmon__ +#endif + +#if 0 +# if 0 +# define vprintf rpl_vprintf +extern int vprintf (const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 1, 0))); +# endif +#elif 1 && 0 && 0 +# define vprintf rpl_vprintf +extern int vprintf (const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 1, 0))); +#elif defined GNULIB_POSIXCHECK +# undef vprintf +# define vprintf(f,a) \ + (GL_LINK_WARNING ("vprintf is not always POSIX compliant - " \ + "use gnulib module vprintf-posix for portable " \ + "POSIX compliance"), \ + vprintf (f, a)) +#endif + +#if 1 +# if 0 +# define snprintf rpl_snprintf +# endif +# if 0 || !1 +extern int snprintf (char *str, size_t size, const char *format, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef snprintf +# define snprintf \ + (GL_LINK_WARNING ("snprintf is unportable - " \ + "use gnulib module snprintf for portability"), \ + snprintf) +#endif + +#if 0 +# if 0 +# define vsnprintf rpl_vsnprintf +# endif +# if 0 || !1 +extern int vsnprintf (char *str, size_t size, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 3, 0))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vsnprintf +# define vsnprintf(b,s,f,a) \ + (GL_LINK_WARNING ("vsnprintf is unportable - " \ + "use gnulib module vsnprintf for portability"), \ + vsnprintf (b, s, f, a)) +#endif + +#if 0 +# if 0 +# define sprintf rpl_sprintf +extern int sprintf (char *str, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sprintf +# define sprintf \ + (GL_LINK_WARNING ("sprintf is not always POSIX compliant - " \ + "use gnulib module sprintf-posix for portable " \ + "POSIX compliance"), \ + sprintf) +#endif + +#if 0 +# if 0 +# define vsprintf rpl_vsprintf +extern int vsprintf (char *str, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vsprintf +# define vsprintf(b,f,a) \ + (GL_LINK_WARNING ("vsprintf is not always POSIX compliant - " \ + "use gnulib module vsprintf-posix for portable " \ + "POSIX compliance"), \ + vsprintf (b, f, a)) +#endif + +#if 0 +# if 0 +# define dprintf rpl_dprintf +# endif +# if 0 || !1 +extern int dprintf (int fd, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef dprintf +# define dprintf(d,f,a) \ + (GL_LINK_WARNING ("dprintf is unportable - " \ + "use gnulib module dprintf for portability"), \ + dprintf (d, f, a)) +#endif + +#if 0 +# if 0 +# define vdprintf rpl_vdprintf +# endif +# if 0 || !1 +extern int vdprintf (int fd, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vdprintf +# define vdprintf(d,f,a) \ + (GL_LINK_WARNING ("vdprintf is unportable - " \ + "use gnulib module vdprintf for portability"), \ + vdprintf (d, f, a)) +#endif + +#if 1 +# if 1 +# define asprintf rpl_asprintf +# define vasprintf rpl_vasprintf +# endif +# if 1 || !1 + /* Write formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, store the address of the string in + *RESULT and return the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, return -1. */ + extern int asprintf (char **result, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + extern int vasprintf (char **result, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#endif + +#if 0 +# if 0 +# define obstack_printf rpl_osbtack_printf +# define obstack_vprintf rpl_obstack_vprintf +# endif +# if 0 || !1 + struct obstack; + /* Grow an obstack with formatted output. Return the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. Upon + memory allocation error, call obstack_alloc_failed_handler. Upon + other error, return -1. */ + extern int obstack_printf (struct obstack *obs, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + extern int obstack_vprintf (struct obstack *obs, const char *format, + va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#endif + +#if 1 +# if 0 +# undef fopen +# define fopen rpl_fopen +extern FILE * fopen (const char *filename, const char *mode); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fopen +# define fopen(f,m) \ + (GL_LINK_WARNING ("fopen on Win32 platforms is not POSIX compatible - " \ + "use gnulib module fopen for portability"), \ + fopen (f, m)) +#endif + +#if 0 +# if 0 +# undef freopen +# define freopen rpl_freopen +extern FILE * freopen (const char *filename, const char *mode, FILE *stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef freopen +# define freopen(f,m,s) \ + (GL_LINK_WARNING ("freopen on Win32 platforms is not POSIX compatible - " \ + "use gnulib module freopen for portability"), \ + freopen (f, m, s)) +#endif + +#if 1 +# if 1 +/* Provide fseek, fseeko functions that are aware of a preceding + fflush(), and which detect pipes. */ +# define fseeko rpl_fseeko +extern int fseeko (FILE *fp, off_t offset, int whence); +# define fseek(fp, offset, whence) fseeko (fp, (off_t)(offset), whence) +# endif +#elif defined GNULIB_POSIXCHECK +# undef fseeko +# define fseeko(f,o,w) \ + (GL_LINK_WARNING ("fseeko is unportable - " \ + "use gnulib module fseeko for portability"), \ + fseeko (f, o, w)) +#endif + +#if 0 && 0 +extern int rpl_fseek (FILE *fp, long offset, int whence); +# undef fseek +# if defined GNULIB_POSIXCHECK +# define fseek(f,o,w) \ + (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use fseeko function for handling of large files"), \ + rpl_fseek (f, o, w)) +# else +# define fseek rpl_fseek +# endif +#elif defined GNULIB_POSIXCHECK +# ifndef fseek +# define fseek(f,o,w) \ + (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use fseeko function for handling of large files"), \ + fseek (f, o, w)) +# endif +#endif + +#if 1 +# if 0 +# define ftello rpl_ftello +extern off_t ftello (FILE *fp); +# define ftell(fp) ftello (fp) +# endif +#elif defined GNULIB_POSIXCHECK +# undef ftello +# define ftello(f) \ + (GL_LINK_WARNING ("ftello is unportable - " \ + "use gnulib module ftello for portability"), \ + ftello (f)) +#endif + +#if 0 && 0 +extern long rpl_ftell (FILE *fp); +# undef ftell +# if GNULIB_POSIXCHECK +# define ftell(f) \ + (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use ftello function for handling of large files"), \ + rpl_ftell (f)) +# else +# define ftell rpl_ftell +# endif +#elif defined GNULIB_POSIXCHECK +# ifndef ftell +# define ftell(f) \ + (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use ftello function for handling of large files"), \ + ftell (f)) +# endif +#endif + +#if 1 +# if 1 +# define fflush rpl_fflush + /* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ + extern int fflush (FILE *gl_stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fflush +# define fflush(f) \ + (GL_LINK_WARNING ("fflush is not always POSIX compliant - " \ + "use gnulib module fflush for portable " \ + "POSIX compliance"), \ + fflush (f)) +#endif + +#if 0 +# if 0 +# define fclose rpl_fclose + /* Close STREAM and its underlying file descriptor. */ +extern int fclose (FILE *stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fclose +# define fclose(f) \ + (GL_LINK_WARNING ("fclose is not always POSIX compliant - " \ + "use gnulib module fclose for portable " \ + "POSIX compliance"), \ + fclose (f)) +#endif + +#if 1 && 0 && 0 +# undef fputc +# define fputc rpl_fputc +extern int fputc (int c, FILE *stream); +#endif + +#if 1 && 0 && 0 +# undef putc +# define putc rpl_fputc +extern int putc (int c, FILE *stream); +#endif + +#if 1 && 0 && 0 +# undef putchar +# define putchar rpl_putchar +extern int putchar (int c); +#endif + +#if 1 && 0 && 0 +# undef fputs +# define fputs rpl_fputs +extern int fputs (const char *string, FILE *stream); +#endif + +#if 1 && 0 && 0 +# undef puts +# define puts rpl_puts +extern int puts (const char *string); +#endif + +#if 1 && 0 && 0 +# undef fwrite +# define fwrite rpl_fwrite +extern size_t fwrite (const void *ptr, size_t s, size_t n, FILE *stream); +#endif + +#if 0 +# if !1 +/* Read input, up to (and including) the next occurrence of DELIMITER, from + STREAM, store it in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +extern ssize_t getdelim (char **lineptr, size_t *linesize, int delimiter, + FILE *stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdelim +# define getdelim(l, s, d, f) \ + (GL_LINK_WARNING ("getdelim is unportable - " \ + "use gnulib module getdelim for portability"), \ + getdelim (l, s, d, f)) +#endif + +#if 0 +# if 0 +# undef getline +# define getline rpl_getline +# endif +# if !1 || 0 +/* Read a line, up to (and including) the next newline, from STREAM, store it + in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +extern ssize_t getline (char **lineptr, size_t *linesize, FILE *stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getline +# define getline(l, s, f) \ + (GL_LINK_WARNING ("getline is unportable - " \ + "use gnulib module getline for portability"), \ + getline (l, s, f)) +#endif + +#if 0 +# if 0 +# define perror rpl_perror +/* Print a message to standard error, describing the value of ERRNO, + (if STRING is not NULL and not empty) prefixed with STRING and ": ", + and terminated with a newline. */ +extern void perror (const char *string); +# endif +#elif defined GNULIB_POSIXCHECK +# undef perror +# define perror(s) \ + (GL_LINK_WARNING ("perror is not always POSIX compliant - " \ + "use gnulib module perror for portability"), \ + perror (s)) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STDIO_H */ +#endif /* _GL_STDIO_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/stdio.in.h b/coreseek/m4-1.4.13/lib/stdio.in.h new file mode 100644 index 0000000..cb273d7 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdio.in.h @@ -0,0 +1,524 @@ +/* A GNU-like . + + Copyright (C) 2004, 2007-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_FILE || defined __need___FILE +/* Special invocation convention inside glibc header files. */ + +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDIO_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDIO_H@ + +#ifndef _GL_STDIO_H +#define _GL_STDIO_H + +#include +#include + +#if (@GNULIB_FSEEKO@ && @REPLACE_FSEEKO@) \ + || (@GNULIB_FTELLO@ && @REPLACE_FTELLO@) \ + || (@GNULIB_GETDELIM@ && !@HAVE_DECL_GETDELIM@) \ + || (@GNULIB_GETLINE@ && (!@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@)) +/* Get off_t and ssize_t. */ +# include +#endif + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + + +/* The definition of GL_LINK_WARNING is copied here. */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_FPRINTF_POSIX@ +# if @REPLACE_FPRINTF@ +# define fprintf rpl_fprintf +extern int fprintf (FILE *fp, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +# endif +#elif @GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# define fprintf rpl_fprintf +extern int fprintf (FILE *fp, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +#elif defined GNULIB_POSIXCHECK +# undef fprintf +# define fprintf \ + (GL_LINK_WARNING ("fprintf is not always POSIX compliant - " \ + "use gnulib module fprintf-posix for portable " \ + "POSIX compliance"), \ + fprintf) +#endif + +#if @GNULIB_VFPRINTF_POSIX@ +# if @REPLACE_VFPRINTF@ +# define vfprintf rpl_vfprintf +extern int vfprintf (FILE *fp, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#elif @GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# define vfprintf rpl_vfprintf +extern int vfprintf (FILE *fp, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +#elif defined GNULIB_POSIXCHECK +# undef vfprintf +# define vfprintf(s,f,a) \ + (GL_LINK_WARNING ("vfprintf is not always POSIX compliant - " \ + "use gnulib module vfprintf-posix for portable " \ + "POSIX compliance"), \ + vfprintf (s, f, a)) +#endif + +#if @GNULIB_PRINTF_POSIX@ +# if @REPLACE_PRINTF@ +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +extern int printf (const char *format, ...) + __attribute__ ((__format__ (__printf__, 1, 2))); +# endif +#elif @GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +/* Don't break __attribute__((format(printf,M,N))). */ +# define printf __printf__ +extern int printf (const char *format, ...) + __attribute__ ((__format__ (__printf__, 1, 2))); +#elif defined GNULIB_POSIXCHECK +# undef printf +# define printf \ + (GL_LINK_WARNING ("printf is not always POSIX compliant - " \ + "use gnulib module printf-posix for portable " \ + "POSIX compliance"), \ + printf) +/* Don't break __attribute__((format(printf,M,N))). */ +# define format(kind,m,n) format (__##kind##__, m, n) +# define __format__(kind,m,n) __format__ (__##kind##__, m, n) +# define ____printf____ __printf__ +# define ____scanf____ __scanf__ +# define ____strftime____ __strftime__ +# define ____strfmon____ __strfmon__ +#endif + +#if @GNULIB_VPRINTF_POSIX@ +# if @REPLACE_VPRINTF@ +# define vprintf rpl_vprintf +extern int vprintf (const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 1, 0))); +# endif +#elif @GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# define vprintf rpl_vprintf +extern int vprintf (const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 1, 0))); +#elif defined GNULIB_POSIXCHECK +# undef vprintf +# define vprintf(f,a) \ + (GL_LINK_WARNING ("vprintf is not always POSIX compliant - " \ + "use gnulib module vprintf-posix for portable " \ + "POSIX compliance"), \ + vprintf (f, a)) +#endif + +#if @GNULIB_SNPRINTF@ +# if @REPLACE_SNPRINTF@ +# define snprintf rpl_snprintf +# endif +# if @REPLACE_SNPRINTF@ || !@HAVE_DECL_SNPRINTF@ +extern int snprintf (char *str, size_t size, const char *format, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef snprintf +# define snprintf \ + (GL_LINK_WARNING ("snprintf is unportable - " \ + "use gnulib module snprintf for portability"), \ + snprintf) +#endif + +#if @GNULIB_VSNPRINTF@ +# if @REPLACE_VSNPRINTF@ +# define vsnprintf rpl_vsnprintf +# endif +# if @REPLACE_VSNPRINTF@ || !@HAVE_DECL_VSNPRINTF@ +extern int vsnprintf (char *str, size_t size, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 3, 0))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vsnprintf +# define vsnprintf(b,s,f,a) \ + (GL_LINK_WARNING ("vsnprintf is unportable - " \ + "use gnulib module vsnprintf for portability"), \ + vsnprintf (b, s, f, a)) +#endif + +#if @GNULIB_SPRINTF_POSIX@ +# if @REPLACE_SPRINTF@ +# define sprintf rpl_sprintf +extern int sprintf (char *str, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sprintf +# define sprintf \ + (GL_LINK_WARNING ("sprintf is not always POSIX compliant - " \ + "use gnulib module sprintf-posix for portable " \ + "POSIX compliance"), \ + sprintf) +#endif + +#if @GNULIB_VSPRINTF_POSIX@ +# if @REPLACE_VSPRINTF@ +# define vsprintf rpl_vsprintf +extern int vsprintf (char *str, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vsprintf +# define vsprintf(b,f,a) \ + (GL_LINK_WARNING ("vsprintf is not always POSIX compliant - " \ + "use gnulib module vsprintf-posix for portable " \ + "POSIX compliance"), \ + vsprintf (b, f, a)) +#endif + +#if @GNULIB_DPRINTF@ +# if @REPLACE_DPRINTF@ +# define dprintf rpl_dprintf +# endif +# if @REPLACE_DPRINTF@ || !@HAVE_DPRINTF@ +extern int dprintf (int fd, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef dprintf +# define dprintf(d,f,a) \ + (GL_LINK_WARNING ("dprintf is unportable - " \ + "use gnulib module dprintf for portability"), \ + dprintf (d, f, a)) +#endif + +#if @GNULIB_VDPRINTF@ +# if @REPLACE_VDPRINTF@ +# define vdprintf rpl_vdprintf +# endif +# if @REPLACE_VDPRINTF@ || !@HAVE_VDPRINTF@ +extern int vdprintf (int fd, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#elif defined GNULIB_POSIXCHECK +# undef vdprintf +# define vdprintf(d,f,a) \ + (GL_LINK_WARNING ("vdprintf is unportable - " \ + "use gnulib module vdprintf for portability"), \ + vdprintf (d, f, a)) +#endif + +#if @GNULIB_VASPRINTF@ +# if @REPLACE_VASPRINTF@ +# define asprintf rpl_asprintf +# define vasprintf rpl_vasprintf +# endif +# if @REPLACE_VASPRINTF@ || !@HAVE_VASPRINTF@ + /* Write formatted output to a string dynamically allocated with malloc(). + If the memory allocation succeeds, store the address of the string in + *RESULT and return the number of resulting bytes, excluding the trailing + NUL. Upon memory allocation error, or some other error, return -1. */ + extern int asprintf (char **result, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + extern int vasprintf (char **result, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#endif + +#if @GNULIB_OBSTACK_PRINTF@ +# if @REPLACE_OBSTACK_PRINTF@ +# define obstack_printf rpl_osbtack_printf +# define obstack_vprintf rpl_obstack_vprintf +# endif +# if @REPLACE_OBSTACK_PRINTF@ || !@HAVE_DECL_OBSTACK_PRINTF@ + struct obstack; + /* Grow an obstack with formatted output. Return the number of + bytes added to OBS. No trailing nul byte is added, and the + object should be closed with obstack_finish before use. Upon + memory allocation error, call obstack_alloc_failed_handler. Upon + other error, return -1. */ + extern int obstack_printf (struct obstack *obs, const char *format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); + extern int obstack_vprintf (struct obstack *obs, const char *format, + va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); +# endif +#endif + +#if @GNULIB_FOPEN@ +# if @REPLACE_FOPEN@ +# undef fopen +# define fopen rpl_fopen +extern FILE * fopen (const char *filename, const char *mode); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fopen +# define fopen(f,m) \ + (GL_LINK_WARNING ("fopen on Win32 platforms is not POSIX compatible - " \ + "use gnulib module fopen for portability"), \ + fopen (f, m)) +#endif + +#if @GNULIB_FREOPEN@ +# if @REPLACE_FREOPEN@ +# undef freopen +# define freopen rpl_freopen +extern FILE * freopen (const char *filename, const char *mode, FILE *stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef freopen +# define freopen(f,m,s) \ + (GL_LINK_WARNING ("freopen on Win32 platforms is not POSIX compatible - " \ + "use gnulib module freopen for portability"), \ + freopen (f, m, s)) +#endif + +#if @GNULIB_FSEEKO@ +# if @REPLACE_FSEEKO@ +/* Provide fseek, fseeko functions that are aware of a preceding + fflush(), and which detect pipes. */ +# define fseeko rpl_fseeko +extern int fseeko (FILE *fp, off_t offset, int whence); +# define fseek(fp, offset, whence) fseeko (fp, (off_t)(offset), whence) +# endif +#elif defined GNULIB_POSIXCHECK +# undef fseeko +# define fseeko(f,o,w) \ + (GL_LINK_WARNING ("fseeko is unportable - " \ + "use gnulib module fseeko for portability"), \ + fseeko (f, o, w)) +#endif + +#if @GNULIB_FSEEK@ && @REPLACE_FSEEK@ +extern int rpl_fseek (FILE *fp, long offset, int whence); +# undef fseek +# if defined GNULIB_POSIXCHECK +# define fseek(f,o,w) \ + (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use fseeko function for handling of large files"), \ + rpl_fseek (f, o, w)) +# else +# define fseek rpl_fseek +# endif +#elif defined GNULIB_POSIXCHECK +# ifndef fseek +# define fseek(f,o,w) \ + (GL_LINK_WARNING ("fseek cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use fseeko function for handling of large files"), \ + fseek (f, o, w)) +# endif +#endif + +#if @GNULIB_FTELLO@ +# if @REPLACE_FTELLO@ +# define ftello rpl_ftello +extern off_t ftello (FILE *fp); +# define ftell(fp) ftello (fp) +# endif +#elif defined GNULIB_POSIXCHECK +# undef ftello +# define ftello(f) \ + (GL_LINK_WARNING ("ftello is unportable - " \ + "use gnulib module ftello for portability"), \ + ftello (f)) +#endif + +#if @GNULIB_FTELL@ && @REPLACE_FTELL@ +extern long rpl_ftell (FILE *fp); +# undef ftell +# if GNULIB_POSIXCHECK +# define ftell(f) \ + (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use ftello function for handling of large files"), \ + rpl_ftell (f)) +# else +# define ftell rpl_ftell +# endif +#elif defined GNULIB_POSIXCHECK +# ifndef ftell +# define ftell(f) \ + (GL_LINK_WARNING ("ftell cannot handle files larger than 4 GB " \ + "on 32-bit platforms - " \ + "use ftello function for handling of large files"), \ + ftell (f)) +# endif +#endif + +#if @GNULIB_FFLUSH@ +# if @REPLACE_FFLUSH@ +# define fflush rpl_fflush + /* Flush all pending data on STREAM according to POSIX rules. Both + output and seekable input streams are supported. + Note! LOSS OF DATA can occur if fflush is applied on an input stream + that is _not_seekable_ or on an update stream that is _not_seekable_ + and in which the most recent operation was input. Seekability can + be tested with lseek(fileno(fp),0,SEEK_CUR). */ + extern int fflush (FILE *gl_stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fflush +# define fflush(f) \ + (GL_LINK_WARNING ("fflush is not always POSIX compliant - " \ + "use gnulib module fflush for portable " \ + "POSIX compliance"), \ + fflush (f)) +#endif + +#if @GNULIB_FCLOSE@ +# if @REPLACE_FCLOSE@ +# define fclose rpl_fclose + /* Close STREAM and its underlying file descriptor. */ +extern int fclose (FILE *stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fclose +# define fclose(f) \ + (GL_LINK_WARNING ("fclose is not always POSIX compliant - " \ + "use gnulib module fclose for portable " \ + "POSIX compliance"), \ + fclose (f)) +#endif + +#if @GNULIB_FPUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# undef fputc +# define fputc rpl_fputc +extern int fputc (int c, FILE *stream); +#endif + +#if @GNULIB_PUTC@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# undef putc +# define putc rpl_fputc +extern int putc (int c, FILE *stream); +#endif + +#if @GNULIB_PUTCHAR@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# undef putchar +# define putchar rpl_putchar +extern int putchar (int c); +#endif + +#if @GNULIB_FPUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# undef fputs +# define fputs rpl_fputs +extern int fputs (const char *string, FILE *stream); +#endif + +#if @GNULIB_PUTS@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# undef puts +# define puts rpl_puts +extern int puts (const char *string); +#endif + +#if @GNULIB_FWRITE@ && @REPLACE_STDIO_WRITE_FUNCS@ && @GNULIB_STDIO_H_SIGPIPE@ +# undef fwrite +# define fwrite rpl_fwrite +extern size_t fwrite (const void *ptr, size_t s, size_t n, FILE *stream); +#endif + +#if @GNULIB_GETDELIM@ +# if !@HAVE_DECL_GETDELIM@ +/* Read input, up to (and including) the next occurrence of DELIMITER, from + STREAM, store it in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +extern ssize_t getdelim (char **lineptr, size_t *linesize, int delimiter, + FILE *stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdelim +# define getdelim(l, s, d, f) \ + (GL_LINK_WARNING ("getdelim is unportable - " \ + "use gnulib module getdelim for portability"), \ + getdelim (l, s, d, f)) +#endif + +#if @GNULIB_GETLINE@ +# if @REPLACE_GETLINE@ +# undef getline +# define getline rpl_getline +# endif +# if !@HAVE_DECL_GETLINE@ || @REPLACE_GETLINE@ +/* Read a line, up to (and including) the next newline, from STREAM, store it + in *LINEPTR (and NUL-terminate it). + *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE + bytes of space. It is realloc'd as necessary. + Return the number of bytes read and stored at *LINEPTR (not including the + NUL terminator), or -1 on error or EOF. */ +extern ssize_t getline (char **lineptr, size_t *linesize, FILE *stream); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getline +# define getline(l, s, f) \ + (GL_LINK_WARNING ("getline is unportable - " \ + "use gnulib module getline for portability"), \ + getline (l, s, f)) +#endif + +#if @GNULIB_PERROR@ +# if @REPLACE_PERROR@ +# define perror rpl_perror +/* Print a message to standard error, describing the value of ERRNO, + (if STRING is not NULL and not empty) prefixed with STRING and ": ", + and terminated with a newline. */ +extern void perror (const char *string); +# endif +#elif defined GNULIB_POSIXCHECK +# undef perror +# define perror(s) \ + (GL_LINK_WARNING ("perror is not always POSIX compliant - " \ + "use gnulib module perror for portability"), \ + perror (s)) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STDIO_H */ +#endif /* _GL_STDIO_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/stdlib--.h b/coreseek/m4-1.4.13/lib/stdlib--.h new file mode 100644 index 0000000..495d0eb --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdlib--.h @@ -0,0 +1,24 @@ +/* Like stdlib.h, but redefine some names to avoid glitches. + + Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include +#include "stdlib-safer.h" + +#undef mkstemp +#define mkstemp mkstemp_safer diff --git a/coreseek/m4-1.4.13/lib/stdlib-safer.h b/coreseek/m4-1.4.13/lib/stdlib-safer.h new file mode 100644 index 0000000..a014372 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdlib-safer.h @@ -0,0 +1,20 @@ +/* Invoke stdlib.h functions, but avoid some glitches. + + Copyright (C) 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +int mkstemp_safer (char *); diff --git a/coreseek/m4-1.4.13/lib/stdlib.h b/coreseek/m4-1.4.13/lib/stdlib.h new file mode 100644 index 0000000..0e47bb9 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdlib.h @@ -0,0 +1,412 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 1995, 2001-2004, 2006-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#if defined __need_malloc_and_calloc +/* Special invocation convention inside glibc header files. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_STDLIB_H +#define _GL_STDLIB_H + + +/* Solaris declares getloadavg() in . */ +#if 0 && 0 +# include +#endif + +/* OSF/1 5.1 declares 'struct random_data' in , which is included + from if _REENTRANT is defined. Include it always. */ +#if 0 +# include +#endif + +#if 0 || !1 +# include +#endif + +#if !1 +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +#endif + +/* The definition of GL_LINK_WARNING is copied here. */ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if 1 +# if !1 +# undef malloc +# define malloc rpl_malloc +extern void * malloc (size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef malloc +# define malloc(s) \ + (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \ + "use gnulib module malloc-posix for portability"), \ + malloc (s)) +#endif + + +#if 0 +# if !1 +# undef realloc +# define realloc rpl_realloc +extern void * realloc (void *ptr, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef realloc +# define realloc(p,s) \ + (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \ + "use gnulib module realloc-posix for portability"), \ + realloc (p, s)) +#endif + + +#if 0 +# if !1 +# undef calloc +# define calloc rpl_calloc +extern void * calloc (size_t nmemb, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef calloc +# define calloc(n,s) \ + (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \ + "use gnulib module calloc-posix for portability"), \ + calloc (n, s)) +#endif + + +#if 0 +# if !1 +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +extern long long atoll (const char *string); +# endif +#elif defined GNULIB_POSIXCHECK +# undef atoll +# define atoll(s) \ + (GL_LINK_WARNING ("atoll is unportable - " \ + "use gnulib module atoll for portability"), \ + atoll (s)) +#endif + + +#if 0 +# if !1 +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +extern int getloadavg (double loadavg[], int nelem); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# define getloadavg(l,n) \ + (GL_LINK_WARNING ("getloadavg is not portable - " \ + "use gnulib module getloadavg for portability"), \ + getloadavg (l, n)) +#endif + + +#if 0 +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX:2001 specification. + http://www.opengroup.org/susv3xsh/getsubopt.html */ +# if !1 +extern int getsubopt (char **optionp, char *const *tokens, char **valuep); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# define getsubopt(o,t,v) \ + (GL_LINK_WARNING ("getsubopt is unportable - " \ + "use gnulib module getsubopt for portability"), \ + getsubopt (o, t, v)) +#endif + + +#if 1 +# if !1 +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +extern char * mkdtemp (char * /*template*/); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# define mkdtemp(t) \ + (GL_LINK_WARNING ("mkdtemp is unportable - " \ + "use gnulib module mkdtemp for portability"), \ + mkdtemp (t)) +#endif + + +#if 1 +# if 0 +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# define mkstemp rpl_mkstemp +extern int mkstemp (char * /*template*/); +# else +/* On MacOS X 10.3, only declares mkstemp. */ +# include +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# define mkstemp(t) \ + (GL_LINK_WARNING ("mkstemp is unportable - " \ + "use gnulib module mkstemp for portability"), \ + mkstemp (t)) +#endif + + +#if 0 +# if 0 +# undef putenv +# define putenv rpl_putenv +extern int putenv (char *string); +# endif +#endif + + +#if 0 +# if !1 + +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif + +int srandom_r (unsigned int seed, struct random_data *rand_state); +int initstate_r (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state); +int setstate_r (char *arg_state, struct random_data *rand_state); +int random_r (struct random_data *buf, int32_t *result); +# endif +#elif defined GNULIB_POSIXCHECK +# undef random_r +# define random_r(b,r) \ + (GL_LINK_WARNING ("random_r is unportable - " \ + "use gnulib module random_r for portability"), \ + random_r (b,r)) +# undef initstate_r +# define initstate_r(s,b,sz,r) \ + (GL_LINK_WARNING ("initstate_r is unportable - " \ + "use gnulib module random_r for portability"), \ + initstate_r (s,b,sz,r)) +# undef srandom_r +# define srandom_r(s,r) \ + (GL_LINK_WARNING ("srandom_r is unportable - " \ + "use gnulib module random_r for portability"), \ + srandom_r (s,r)) +# undef setstate_r +# define setstate_r(a,r) \ + (GL_LINK_WARNING ("setstate_r is unportable - " \ + "use gnulib module random_r for portability"), \ + setstate_r (a,r)) +#endif + + +#if 0 +# if !1 +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +extern int rpmatch (const char *response); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# define rpmatch(r) \ + (GL_LINK_WARNING ("rpmatch is unportable - " \ + "use gnulib module rpmatch for portability"), \ + rpmatch (r)) +#endif + + +#if 1 +# if !1 +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +extern int setenv (const char *name, const char *value, int replace); +# endif +#endif + + +#if 1 +# if 1 +# if 0 +/* On some systems, unsetenv() returns void. + This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */ +# define unsetenv(name) ((unsetenv)(name), 0) +# endif +# else +/* Remove the variable NAME from the environment. */ +extern int unsetenv (const char *name); +# endif +#endif + + +#if 1 +# if 0 +# define strtod rpl_strtod +# endif +# if !1 || 0 + /* Parse a double from STRING, updating ENDP if appropriate. */ +extern double strtod (const char *str, char **endp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtod +# define strtod(s, e) \ + (GL_LINK_WARNING ("strtod is unportable - " \ + "use gnulib module strtod for portability"), \ + strtod (s, e)) +#endif + + +#if 0 +# if !1 +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +extern long long strtoll (const char *string, char **endptr, int base); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# define strtoll(s,e,b) \ + (GL_LINK_WARNING ("strtoll is unportable - " \ + "use gnulib module strtoll for portability"), \ + strtoll (s, e, b)) +#endif + + +#if 0 +# if !1 +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +extern unsigned long long strtoull (const char *string, char **endptr, int base); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# define strtoull(s,e,b) \ + (GL_LINK_WARNING ("strtoull is unportable - " \ + "use gnulib module strtoull for portability"), \ + strtoull (s, e, b)) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STDLIB_H */ +#endif /* _GL_STDLIB_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/stdlib.in.h b/coreseek/m4-1.4.13/lib/stdlib.in.h new file mode 100644 index 0000000..f99767f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stdlib.in.h @@ -0,0 +1,383 @@ +/* A GNU-like . + + Copyright (C) 1995, 2001-2004, 2006-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_malloc_and_calloc +/* Special invocation convention inside glibc header files. */ + +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#ifndef _GL_STDLIB_H +#define _GL_STDLIB_H + + +/* Solaris declares getloadavg() in . */ +#if @GNULIB_GETLOADAVG@ && @HAVE_SYS_LOADAVG_H@ +# include +#endif + +/* OSF/1 5.1 declares 'struct random_data' in , which is included + from if _REENTRANT is defined. Include it always. */ +#if @HAVE_RANDOM_H@ +# include +#endif + +#if @GNULIB_RANDOM_R@ || !@HAVE_STRUCT_RANDOM_DATA@ +# include +#endif + +#if !@HAVE_STRUCT_RANDOM_DATA@ +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +#endif + +/* The definition of GL_LINK_WARNING is copied here. */ + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_MALLOC_POSIX@ +# if !@HAVE_MALLOC_POSIX@ +# undef malloc +# define malloc rpl_malloc +extern void * malloc (size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef malloc +# define malloc(s) \ + (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \ + "use gnulib module malloc-posix for portability"), \ + malloc (s)) +#endif + + +#if @GNULIB_REALLOC_POSIX@ +# if !@HAVE_REALLOC_POSIX@ +# undef realloc +# define realloc rpl_realloc +extern void * realloc (void *ptr, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef realloc +# define realloc(p,s) \ + (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \ + "use gnulib module realloc-posix for portability"), \ + realloc (p, s)) +#endif + + +#if @GNULIB_CALLOC_POSIX@ +# if !@HAVE_CALLOC_POSIX@ +# undef calloc +# define calloc rpl_calloc +extern void * calloc (size_t nmemb, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef calloc +# define calloc(n,s) \ + (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \ + "use gnulib module calloc-posix for portability"), \ + calloc (n, s)) +#endif + + +#if @GNULIB_ATOLL@ +# if !@HAVE_ATOLL@ +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +extern long long atoll (const char *string); +# endif +#elif defined GNULIB_POSIXCHECK +# undef atoll +# define atoll(s) \ + (GL_LINK_WARNING ("atoll is unportable - " \ + "use gnulib module atoll for portability"), \ + atoll (s)) +#endif + + +#if @GNULIB_GETLOADAVG@ +# if !@HAVE_DECL_GETLOADAVG@ +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +extern int getloadavg (double loadavg[], int nelem); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# define getloadavg(l,n) \ + (GL_LINK_WARNING ("getloadavg is not portable - " \ + "use gnulib module getloadavg for portability"), \ + getloadavg (l, n)) +#endif + + +#if @GNULIB_GETSUBOPT@ +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX:2001 specification. + http://www.opengroup.org/susv3xsh/getsubopt.html */ +# if !@HAVE_GETSUBOPT@ +extern int getsubopt (char **optionp, char *const *tokens, char **valuep); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# define getsubopt(o,t,v) \ + (GL_LINK_WARNING ("getsubopt is unportable - " \ + "use gnulib module getsubopt for portability"), \ + getsubopt (o, t, v)) +#endif + + +#if @GNULIB_MKDTEMP@ +# if !@HAVE_MKDTEMP@ +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +extern char * mkdtemp (char * /*template*/); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# define mkdtemp(t) \ + (GL_LINK_WARNING ("mkdtemp is unportable - " \ + "use gnulib module mkdtemp for portability"), \ + mkdtemp (t)) +#endif + + +#if @GNULIB_MKSTEMP@ +# if @REPLACE_MKSTEMP@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# define mkstemp rpl_mkstemp +extern int mkstemp (char * /*template*/); +# else +/* On MacOS X 10.3, only declares mkstemp. */ +# include +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# define mkstemp(t) \ + (GL_LINK_WARNING ("mkstemp is unportable - " \ + "use gnulib module mkstemp for portability"), \ + mkstemp (t)) +#endif + + +#if @GNULIB_PUTENV@ +# if @REPLACE_PUTENV@ +# undef putenv +# define putenv rpl_putenv +extern int putenv (char *string); +# endif +#endif + + +#if @GNULIB_RANDOM_R@ +# if !@HAVE_RANDOM_R@ + +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif + +int srandom_r (unsigned int seed, struct random_data *rand_state); +int initstate_r (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state); +int setstate_r (char *arg_state, struct random_data *rand_state); +int random_r (struct random_data *buf, int32_t *result); +# endif +#elif defined GNULIB_POSIXCHECK +# undef random_r +# define random_r(b,r) \ + (GL_LINK_WARNING ("random_r is unportable - " \ + "use gnulib module random_r for portability"), \ + random_r (b,r)) +# undef initstate_r +# define initstate_r(s,b,sz,r) \ + (GL_LINK_WARNING ("initstate_r is unportable - " \ + "use gnulib module random_r for portability"), \ + initstate_r (s,b,sz,r)) +# undef srandom_r +# define srandom_r(s,r) \ + (GL_LINK_WARNING ("srandom_r is unportable - " \ + "use gnulib module random_r for portability"), \ + srandom_r (s,r)) +# undef setstate_r +# define setstate_r(a,r) \ + (GL_LINK_WARNING ("setstate_r is unportable - " \ + "use gnulib module random_r for portability"), \ + setstate_r (a,r)) +#endif + + +#if @GNULIB_RPMATCH@ +# if !@HAVE_RPMATCH@ +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +extern int rpmatch (const char *response); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# define rpmatch(r) \ + (GL_LINK_WARNING ("rpmatch is unportable - " \ + "use gnulib module rpmatch for portability"), \ + rpmatch (r)) +#endif + + +#if @GNULIB_SETENV@ +# if !@HAVE_SETENV@ +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +extern int setenv (const char *name, const char *value, int replace); +# endif +#endif + + +#if @GNULIB_UNSETENV@ +# if @HAVE_UNSETENV@ +# if @VOID_UNSETENV@ +/* On some systems, unsetenv() returns void. + This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */ +# define unsetenv(name) ((unsetenv)(name), 0) +# endif +# else +/* Remove the variable NAME from the environment. */ +extern int unsetenv (const char *name); +# endif +#endif + + +#if @GNULIB_STRTOD@ +# if @REPLACE_STRTOD@ +# define strtod rpl_strtod +# endif +# if !@HAVE_STRTOD@ || @REPLACE_STRTOD@ + /* Parse a double from STRING, updating ENDP if appropriate. */ +extern double strtod (const char *str, char **endp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtod +# define strtod(s, e) \ + (GL_LINK_WARNING ("strtod is unportable - " \ + "use gnulib module strtod for portability"), \ + strtod (s, e)) +#endif + + +#if @GNULIB_STRTOLL@ +# if !@HAVE_STRTOLL@ +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +extern long long strtoll (const char *string, char **endptr, int base); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# define strtoll(s,e,b) \ + (GL_LINK_WARNING ("strtoll is unportable - " \ + "use gnulib module strtoll for portability"), \ + strtoll (s, e, b)) +#endif + + +#if @GNULIB_STRTOULL@ +# if !@HAVE_STRTOULL@ +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +extern unsigned long long strtoull (const char *string, char **endptr, int base); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# define strtoull(s,e,b) \ + (GL_LINK_WARNING ("strtoull is unportable - " \ + "use gnulib module strtoull for portability"), \ + strtoull (s, e, b)) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STDLIB_H */ +#endif /* _GL_STDLIB_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/str-two-way.h b/coreseek/m4-1.4.13/lib/str-two-way.h new file mode 100644 index 0000000..1999380 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/str-two-way.h @@ -0,0 +1,429 @@ +/* Byte-wise substring search, using the Two-Way algorithm. + Copyright (C) 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Eric Blake , 2008. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Before including this file, you need to include and + , and define: + RESULT_TYPE A macro that expands to the return type. + AVAILABLE(h, h_l, j, n_l) + A macro that returns nonzero if there are + at least N_L bytes left starting at H[J]. + H is 'unsigned char *', H_L, J, and N_L + are 'size_t'; H_L is an lvalue. For + NUL-terminated searches, H_L can be + modified each iteration to avoid having + to compute the end of H up front. + + For case-insensitivity, you may optionally define: + CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L + characters of P1 and P2 are equal. + CANON_ELEMENT(c) A macro that canonicalizes an element right after + it has been fetched from one of the two strings. + The argument is an 'unsigned char'; the result + must be an 'unsigned char' as well. + + This file undefines the macros documented above, and defines + LONG_NEEDLE_THRESHOLD. +*/ + +#include +#include + +/* We use the Two-Way string matching algorithm, which guarantees + linear complexity with constant space. Additionally, for long + needles, we also use a bad character shift table similar to the + Boyer-Moore algorithm to achieve improved (potentially sub-linear) + performance. + + See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260 + and http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm +*/ + +/* Point at which computing a bad-byte shift table is likely to be + worthwhile. Small needles should not compute a table, since it + adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a + speedup no greater than a factor of NEEDLE_LEN. The larger the + needle, the better the potential performance gain. On the other + hand, on non-POSIX systems with CHAR_BIT larger than eight, the + memory required for the table is prohibitive. */ +#if CHAR_BIT < 10 +# define LONG_NEEDLE_THRESHOLD 32U +#else +# define LONG_NEEDLE_THRESHOLD SIZE_MAX +#endif + +#ifndef MAX +# define MAX(a, b) ((a < b) ? (b) : (a)) +#endif + +#ifndef CANON_ELEMENT +# define CANON_ELEMENT(c) c +#endif +#ifndef CMP_FUNC +# define CMP_FUNC memcmp +#endif + +/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. + Return the index of the first byte in the right half, and set + *PERIOD to the global period of the right half. + + The global period of a string is the smallest index (possibly its + length) at which all remaining bytes in the string are repetitions + of the prefix (the last repetition may be a subset of the prefix). + + When NEEDLE is factored into two halves, a local period is the + length of the smallest word that shares a suffix with the left half + and shares a prefix with the right half. All factorizations of a + non-empty NEEDLE have a local period of at least 1 and no greater + than NEEDLE_LEN. + + A critical factorization has the property that the local period + equals the global period. All strings have at least one critical + factorization with the left half smaller than the global period. + + Given an ordered alphabet, a critical factorization can be computed + in linear time, with 2 * NEEDLE_LEN comparisons, by computing the + larger of two ordered maximal suffixes. The ordered maximal + suffixes are determined by lexicographic comparison of + periodicity. */ +static size_t +critical_factorization (const unsigned char *needle, size_t needle_len, + size_t *period) +{ + /* Index of last byte of left half, or SIZE_MAX. */ + size_t max_suffix, max_suffix_rev; + size_t j; /* Index into NEEDLE for current candidate suffix. */ + size_t k; /* Offset into current period. */ + size_t p; /* Intermediate period. */ + unsigned char a, b; /* Current comparison bytes. */ + + /* Invariants: + 0 <= j < NEEDLE_LEN - 1 + -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) + min(max_suffix, max_suffix_rev) < global period of NEEDLE + 1 <= p <= global period of NEEDLE + p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] + 1 <= k <= p + */ + + /* Perform lexicographic search. */ + max_suffix = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix + k]); + if (a < b) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* b < a */ + { + /* Suffix is larger, start over from current location. */ + max_suffix = j++; + k = p = 1; + } + } + *period = p; + + /* Perform reverse lexicographic search. */ + max_suffix_rev = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix_rev + k]); + if (b < a) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix_rev; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* a < b */ + { + /* Suffix is larger, start over from current location. */ + max_suffix_rev = j++; + k = p = 1; + } + } + + /* Choose the longer suffix. Return the first byte of the right + half, rather than the last byte of the left half. */ + if (max_suffix_rev + 1 < max_suffix + 1) + return max_suffix + 1; + *period = p; + return max_suffix_rev + 1; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. + Performance is guaranteed to be linear, with an initialization cost + of 2 * NEEDLE_LEN comparisons. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ +static RETURN_TYPE +two_way_short_needle (const unsigned char *haystack, size_t haystack_len, + const unsigned char *needle, size_t needle_len) +{ + size_t i; /* Index into current byte of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch can only advance by the + period, so use memory to avoid rescanning known occurrences + of the period. */ + size_t memory = 0; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = MAX (suffix, memory); + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = suffix; + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. + Performance is guaranteed to be linear, with an initialization cost + of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, + and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and + sublinear performance is not possible. */ +static RETURN_TYPE +two_way_long_needle (const unsigned char *haystack, size_t haystack_len, + const unsigned char *needle, size_t needle_len) +{ + size_t i; /* Index into current byte of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + size_t shift_table[1U << CHAR_BIT]; /* See below. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Populate shift_table. For each possible byte value c, + shift_table[c] is the distance from the last occurrence of c to + the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. + shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ + for (i = 0; i < 1U << CHAR_BIT; i++) + shift_table[i] = needle_len; + for (i = 0; i < needle_len; i++) + shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch can only advance by the + period, so use memory to avoid rescanning known occurrences + of the period. */ + size_t memory = 0; + size_t shift; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Check the last byte first; if it does not match, then + shift to the next possible match location. */ + shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; + if (0 < shift) + { + if (memory && shift < period) + { + /* Since needle is periodic, but the last period has + a byte out of place, there can be no match until + after the mismatch. */ + shift = needle_len - period; + memory = 0; + } + j += shift; + continue; + } + /* Scan for matches in right half. The last byte has + already been matched, by virtue of the shift table. */ + i = MAX (suffix, memory); + while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len - 1 <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + size_t shift; + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Check the last byte first; if it does not match, then + shift to the next possible match location. */ + shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; + if (0 < shift) + { + j += shift; + continue; + } + /* Scan for matches in right half. The last byte has + already been matched, by virtue of the shift table. */ + i = suffix; + while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len - 1 <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +#undef AVAILABLE +#undef CANON_ELEMENT +#undef CMP_FUNC +#undef MAX +#undef RETURN_TYPE diff --git a/coreseek/m4-1.4.13/lib/strchrnul.c b/coreseek/m4-1.4.13/lib/strchrnul.c new file mode 100644 index 0000000..5ed237c --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strchrnul.c @@ -0,0 +1,142 @@ +/* Searching in a string. + Copyright (C) 2003, 2007, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Find the first occurrence of C in S or the final NUL byte. */ +char * +strchrnul (const char *s, int c_in) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned char c; + + c = (unsigned char) c_in; + if (!c) + return rawmemchr (s, 0); + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + (size_t) char_ptr % sizeof (longword) != 0; + ++char_ptr) + if (!*char_ptr || *char_ptr == c) + return (char *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will + test a longword at a time. The tricky part is testing if *any of + the four* bytes in the longword in question are equal to NUL or + c. We first use an xor with repeated_c. This reduces the task + to testing whether *any of the four* bytes in longword1 or + longword2 is zero. + + Let's consider longword1. We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + The test whether any byte in longword1 or longword2 is zero is equivalent + to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine + this into a single test, whether (tmp1 | tmp2) is nonzero. + + This test can read more than one byte beyond the end of a string, + depending on where the terminating NUL is encountered. However, + this is considered safe since the initialization phase ensured + that the read will be aligned, therefore, the read will not cross + page boundaries and will not cause a fault. */ + + while (1) + { + longword longword1 = *longword_ptr ^ repeated_c; + longword longword2 = *longword_ptr; + + if (((((longword1 - repeated_one) & ~longword1) + | ((longword2 - repeated_one) & ~longword2)) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that one of the sizeof (longword) bytes + starting at char_ptr is == 0 or == c. On little-endian machines, + we could determine the first such byte without any further memory + accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. + Choose code that works in both cases. */ + + char_ptr = (unsigned char *) longword_ptr; + while (*char_ptr && (*char_ptr != c)) + char_ptr++; + return (char *) char_ptr; +} diff --git a/coreseek/m4-1.4.13/lib/strchrnul.valgrind b/coreseek/m4-1.4.13/lib/strchrnul.valgrind new file mode 100644 index 0000000..b14fa13 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strchrnul.valgrind @@ -0,0 +1,12 @@ +# Suppress a valgrind message about use of uninitialized memory in strchrnul(). +# This use is OK because it provides only a speedup. +{ + strchrnul-value4 + Memcheck:Value4 + fun:strchrnul +} +{ + strchrnul-value8 + Memcheck:Value8 + fun:strchrnul +} diff --git a/coreseek/m4-1.4.13/lib/streq.h b/coreseek/m4-1.4.13/lib/streq.h new file mode 100644 index 0000000..80df916 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/streq.h @@ -0,0 +1,176 @@ +/* Optimized string comparison. + Copyright (C) 2001-2002, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#ifndef _GL_STREQ_H +#define _GL_STREQ_H + +#include + +/* STREQ allows to optimize string comparison with a small literal string. + STREQ (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + is semantically equivalent to + strcmp (s, "EUC-KR") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if defined (__GNUC__) && defined (__OPTIMIZE__) + +static inline int +streq9 (const char *s1, const char *s2) +{ + return strcmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +streq8 (const char *s1, const char *s2, char s28) +{ + if (s1[8] == s28) + { + if (s28 == 0) + return 1; + else + return streq9 (s1, s2); + } + else + return 0; +} + +static inline int +streq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (s1[7] == s27) + { + if (s27 == 0) + return 1; + else + return streq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +streq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (s1[6] == s26) + { + if (s26 == 0) + return 1; + else + return streq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (s1[5] == s25) + { + if (s25 == 0) + return 1; + else + return streq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[4] == s24) + { + if (s24 == 0) + return 1; + else + return streq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[3] == s23) + { + if (s23 == 0) + return 1; + else + return streq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[2] == s22) + { + if (s22 == 0) + return 1; + else + return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[1] == s21) + { + if (s21 == 0) + return 1; + else + return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[0] == s20) + { + if (s20 == 0) + return 1; + else + return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (strcmp (s1, s2) == 0) + +#endif + +#endif /* _GL_STREQ_H */ diff --git a/coreseek/m4-1.4.13/lib/strerror.c b/coreseek/m4-1.4.13/lib/strerror.c new file mode 100644 index 0000000..798d854 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strerror.c @@ -0,0 +1,341 @@ +/* strerror.c --- POSIX compatible system error routine + + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include + +#if REPLACE_STRERROR + +# include +# include + +# if GNULIB_defined_ESOCK /* native Windows platforms */ +# if HAVE_WINSOCK2_H +# include +# endif +# endif + +# include "intprops.h" + +# undef strerror +# if ! HAVE_DECL_STRERROR +# define strerror(n) NULL +# endif + +char * +rpl_strerror (int n) +{ + char const *msg = NULL; + /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ + switch (n) + { +# if GNULIB_defined_ETXTBSY + case ETXTBSY: + msg = "Text file busy"; + break; +# endif + +# if GNULIB_defined_ESOCK /* native Windows platforms */ + /* EWOULDBLOCK is the same as EAGAIN. */ + case EINPROGRESS: + msg = "Operation now in progress"; + break; + case EALREADY: + msg = "Operation already in progress"; + break; + case ENOTSOCK: + msg = "Socket operation on non-socket"; + break; + case EDESTADDRREQ: + msg = "Destination address required"; + break; + case EMSGSIZE: + msg = "Message too long"; + break; + case EPROTOTYPE: + msg = "Protocol wrong type for socket"; + break; + case ENOPROTOOPT: + msg = "Protocol not available"; + break; + case EPROTONOSUPPORT: + msg = "Protocol not supported"; + break; + case ESOCKTNOSUPPORT: + msg = "Socket type not supported"; + break; + case EOPNOTSUPP: + msg = "Operation not supported"; + break; + case EPFNOSUPPORT: + msg = "Protocol family not supported"; + break; + case EAFNOSUPPORT: + msg = "Address family not supported by protocol"; + break; + case EADDRINUSE: + msg = "Address already in use"; + break; + case EADDRNOTAVAIL: + msg = "Cannot assign requested address"; + break; + case ENETDOWN: + msg = "Network is down"; + break; + case ENETUNREACH: + msg = "Network is unreachable"; + break; + case ENETRESET: + msg = "Network dropped connection on reset"; + break; + case ECONNABORTED: + msg = "Software caused connection abort"; + break; + case ECONNRESET: + msg = "Connection reset by peer"; + break; + case ENOBUFS: + msg = "No buffer space available"; + break; + case EISCONN: + msg = "Transport endpoint is already connected"; + break; + case ENOTCONN: + msg = "Transport endpoint is not connected"; + break; + case ESHUTDOWN: + msg = "Cannot send after transport endpoint shutdown"; + break; + case ETOOMANYREFS: + msg = "Too many references: cannot splice"; + break; + case ETIMEDOUT: + msg = "Connection timed out"; + break; + case ECONNREFUSED: + msg = "Connection refused"; + break; + case ELOOP: + msg = "Too many levels of symbolic links"; + break; + case EHOSTDOWN: + msg = "Host is down"; + break; + case EHOSTUNREACH: + msg = "No route to host"; + break; + case EPROCLIM: + msg = "Too many processes"; + break; + case EUSERS: + msg = "Too many users"; + break; + case EDQUOT: + msg = "Disk quota exceeded"; + break; + case ESTALE: + msg = "Stale NFS file handle"; + break; + case EREMOTE: + msg = "Object is remote"; + break; +# if HAVE_WINSOCK2_H + /* WSA_INVALID_HANDLE maps to EBADF */ + /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ + /* WSA_INVALID_PARAMETER maps to EINVAL */ + case WSA_OPERATION_ABORTED: + msg = "Overlapped operation aborted"; + break; + case WSA_IO_INCOMPLETE: + msg = "Overlapped I/O event object not in signaled state"; + break; + case WSA_IO_PENDING: + msg = "Overlapped operations will complete later"; + break; + /* WSAEINTR maps to EINTR */ + /* WSAEBADF maps to EBADF */ + /* WSAEACCES maps to EACCES */ + /* WSAEFAULT maps to EFAULT */ + /* WSAEINVAL maps to EINVAL */ + /* WSAEMFILE maps to EMFILE */ + /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ + /* WSAEINPROGRESS is EINPROGRESS */ + /* WSAEALREADY is EALREADY */ + /* WSAENOTSOCK is ENOTSOCK */ + /* WSAEDESTADDRREQ is EDESTADDRREQ */ + /* WSAEMSGSIZE is EMSGSIZE */ + /* WSAEPROTOTYPE is EPROTOTYPE */ + /* WSAENOPROTOOPT is ENOPROTOOPT */ + /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */ + /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ + /* WSAEOPNOTSUPP is EOPNOTSUPP */ + /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ + /* WSAEAFNOSUPPORT is EAFNOSUPPORT */ + /* WSAEADDRINUSE is EADDRINUSE */ + /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */ + /* WSAENETDOWN is ENETDOWN */ + /* WSAENETUNREACH is ENETUNREACH */ + /* WSAENETRESET is ENETRESET */ + /* WSAECONNABORTED is ECONNABORTED */ + /* WSAECONNRESET is ECONNRESET */ + /* WSAENOBUFS is ENOBUFS */ + /* WSAEISCONN is EISCONN */ + /* WSAENOTCONN is ENOTCONN */ + /* WSAESHUTDOWN is ESHUTDOWN */ + /* WSAETOOMANYREFS is ETOOMANYREFS */ + /* WSAETIMEDOUT is ETIMEDOUT */ + /* WSAECONNREFUSED is ECONNREFUSED */ + /* WSAELOOP is ELOOP */ + /* WSAENAMETOOLONG maps to ENAMETOOLONG */ + /* WSAEHOSTDOWN is EHOSTDOWN */ + /* WSAEHOSTUNREACH is EHOSTUNREACH */ + /* WSAENOTEMPTY maps to ENOTEMPTY */ + /* WSAEPROCLIM is EPROCLIM */ + /* WSAEUSERS is EUSERS */ + /* WSAEDQUOT is EDQUOT */ + /* WSAESTALE is ESTALE */ + /* WSAEREMOTE is EREMOTE */ + case WSASYSNOTREADY: + msg = "Network subsystem is unavailable"; + break; + case WSAVERNOTSUPPORTED: + msg = "Winsock.dll version out of range"; + break; + case WSANOTINITIALISED: + msg = "Successful WSAStartup not yet performed"; + break; + case WSAEDISCON: + msg = "Graceful shutdown in progress"; + break; + case WSAENOMORE: case WSA_E_NO_MORE: + msg = "No more results"; + break; + case WSAECANCELLED: case WSA_E_CANCELLED: + msg = "Call was canceled"; + break; + case WSAEINVALIDPROCTABLE: + msg = "Procedure call table is invalid"; + break; + case WSAEINVALIDPROVIDER: + msg = "Service provider is invalid"; + break; + case WSAEPROVIDERFAILEDINIT: + msg = "Service provider failed to initialize"; + break; + case WSASYSCALLFAILURE: + msg = "System call failure"; + break; + case WSASERVICE_NOT_FOUND: + msg = "Service not found"; + break; + case WSATYPE_NOT_FOUND: + msg = "Class type not found"; + break; + case WSAEREFUSED: + msg = "Database query was refused"; + break; + case WSAHOST_NOT_FOUND: + msg = "Host not found"; + break; + case WSATRY_AGAIN: + msg = "Nonauthoritative host not found"; + break; + case WSANO_RECOVERY: + msg = "Nonrecoverable error"; + break; + case WSANO_DATA: + msg = "Valid name, no data record of requested type"; + break; + /* WSA_QOS_* omitted */ +# endif +# endif + +# if GNULIB_defined_ENOMSG + case ENOMSG: + msg = "No message of desired type"; + break; +# endif + +# if GNULIB_defined_EIDRM + case EIDRM: + msg = "Identifier removed"; + break; +# endif + +# if GNULIB_defined_ENOLINK + case ENOLINK: + msg = "Link has been severed"; + break; +# endif + +# if GNULIB_defined_EPROTO + case EPROTO: + msg = "Protocol error"; + break; +# endif + +# if GNULIB_defined_EMULTIHOP + case EMULTIHOP: + msg = "Multihop attempted"; + break; +# endif + +# if GNULIB_defined_EBADMSG + case EBADMSG: + msg = "Bad message"; + break; +# endif + +# if GNULIB_defined_EOVERFLOW + case EOVERFLOW: + msg = "Value too large for defined data type"; + break; +# endif + +# if GNULIB_defined_ENOTSUP + case ENOTSUP: + msg = "Not supported"; + break; +# endif + +# if GNULIB_defined_ + case ECANCELED: + msg = "Operation canceled"; + break; +# endif + } + + if (msg) + return (char *) msg; + + { + char *result = strerror (n); + + if (result == NULL || result[0] == '\0') + { + static char const fmt[] = "Unknown error (%d)"; + static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)]; + sprintf (msg_buf, fmt, n); + return msg_buf; + } + + return result; + } +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/string.h b/coreseek/m4-1.4.13/lib/string.h new file mode 100644 index 0000000..6187ffd --- /dev/null +++ b/coreseek/m4-1.4.13/lib/string.h @@ -0,0 +1,634 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A GNU-like . + + Copyright (C) 1995-1996, 2001-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_STRING_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_STRING_H +#define _GL_STRING_H + + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The attribute __pure__ was added in gcc 2.96. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +# define __pure__ /* empty */ +# endif +#endif + + +/* The definition of GL_LINK_WARNING is copied here. */ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if 0 +# if 0 +# define memmem rpl_memmem +# endif +# if ! 1 || 0 +extern void *memmem (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memmem +# define memmem(a,al,b,bl) \ + (GL_LINK_WARNING ("memmem is unportable and often quadratic - " \ + "use gnulib module memmem-simple for portability, " \ + "and module memmem for speed" ), \ + memmem (a, al, b, bl)) +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if 0 +# if ! 1 +extern void *mempcpy (void *restrict __dest, void const *restrict __src, + size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# define mempcpy(a,b,n) \ + (GL_LINK_WARNING ("mempcpy is unportable - " \ + "use gnulib module mempcpy for portability"), \ + mempcpy (a, b, n)) +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if 0 +# if ! 1 +extern void *memrchr (void const *, int, size_t) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# define memrchr(a,b,c) \ + (GL_LINK_WARNING ("memrchr is unportable - " \ + "use gnulib module memrchr for portability"), \ + memrchr (a, b, c)) +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if 1 +# if ! 1 +extern void *rawmemchr (void const *__s, int __c_in) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# define rawmemchr(a,b) \ + (GL_LINK_WARNING ("rawmemchr is unportable - " \ + "use gnulib module rawmemchr for portability"), \ + rawmemchr (a, b)) +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if 0 +# if ! 1 +extern char *stpcpy (char *restrict __dst, char const *restrict __src); +# endif +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# define stpcpy(a,b) \ + (GL_LINK_WARNING ("stpcpy is unportable - " \ + "use gnulib module stpcpy for portability"), \ + stpcpy (a, b)) +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if 0 +# if ! 1 +# define stpncpy gnu_stpncpy +extern char *stpncpy (char *restrict __dst, char const *restrict __src, + size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# define stpncpy(a,b,n) \ + (GL_LINK_WARNING ("stpncpy is unportable - " \ + "use gnulib module stpncpy for portability"), \ + stpncpy (a, b, n)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +# define strchr(s,c) \ + (GL_LINK_WARNING ("strchr cannot work correctly on character strings " \ + "in some multibyte locales - " \ + "use mbschr if you care about internationalization"), \ + strchr (s, c)) +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if 1 +# if ! 1 +extern char *strchrnul (char const *__s, int __c_in) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# define strchrnul(a,b) \ + (GL_LINK_WARNING ("strchrnul is unportable - " \ + "use gnulib module strchrnul for portability"), \ + strchrnul (a, b)) +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if 0 +# if 0 +# undef strdup +# define strdup rpl_strdup +# endif +# if !(1 || defined strdup) || 0 +extern char *strdup (char const *__s); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strdup +# define strdup(a) \ + (GL_LINK_WARNING ("strdup is unportable - " \ + "use gnulib module strdup for portability"), \ + strdup (a)) +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if 1 +# if ! 1 +# undef strndup +# define strndup rpl_strndup +# endif +# if ! 1 || ! 1 +extern char *strndup (char const *__string, size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strndup +# define strndup(a,n) \ + (GL_LINK_WARNING ("strndup is unportable - " \ + "use gnulib module strndup for portability"), \ + strndup (a, n)) +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if 1 +# if ! 1 +extern size_t strnlen (char const *__string, size_t __maxlen) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# define strnlen(a,n) \ + (GL_LINK_WARNING ("strnlen is unportable - " \ + "use gnulib module strnlen for portability"), \ + strnlen (a, n)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +# define strcspn(s,a) \ + (GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbscspn if you care about internationalization"), \ + strcspn (s, a)) +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if 0 +# if ! 1 +extern char *strpbrk (char const *__s, char const *__accept) + __attribute__ ((__pure__)); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +# define strpbrk(s,a) \ + (GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbspbrk if you care about internationalization"), \ + strpbrk (s, a)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# define strpbrk(s,a) \ + (GL_LINK_WARNING ("strpbrk is unportable - " \ + "use gnulib module strpbrk for portability"), \ + strpbrk (s, a)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +# define strspn(s,a) \ + (GL_LINK_WARNING ("strspn cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbsspn if you care about internationalization"), \ + strspn (s, a)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +# define strrchr(s,c) \ + (GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \ + "in some multibyte locales - " \ + "use mbsrchr if you care about internationalization"), \ + strrchr (s, c)) +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if 0 +# if ! 1 +extern char *strsep (char **restrict __stringp, char const *restrict __delim); +# endif +# if defined GNULIB_POSIXCHECK +# undef strsep +# define strsep(s,d) \ + (GL_LINK_WARNING ("strsep cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbssep if you care about internationalization"), \ + strsep (s, d)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# define strsep(s,d) \ + (GL_LINK_WARNING ("strsep is unportable - " \ + "use gnulib module strsep for portability"), \ + strsep (s, d)) +#endif + +#if 1 +# if 1 +# define strstr rpl_strstr +char *strstr (const char *haystack, const char *needle) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +# define strstr(a,b) \ + (GL_LINK_WARNING ("strstr is quadratic on many systems, and cannot " \ + "work correctly on character strings in most " \ + "multibyte locales - " \ + "use mbsstr if you care about internationalization, " \ + "or use strstr if you care about speed"), \ + strstr (a, b)) +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if 0 +# if 0 +# define strcasestr rpl_strcasestr +# endif +# if ! 1 || 0 +extern char *strcasestr (const char *haystack, const char *needle) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# define strcasestr(a,b) \ + (GL_LINK_WARNING ("strcasestr does work correctly on character strings " \ + "in multibyte locales - " \ + "use mbscasestr if you care about " \ + "internationalization, or use c-strcasestr if you want " \ + "a locale independent function"), \ + strcasestr (a, b)) +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + http://www.opengroup.org/susv3xsh/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if 0 +# if ! 1 +extern char *strtok_r (char *restrict s, char const *restrict delim, + char **restrict save_ptr); +# endif +# if defined GNULIB_POSIXCHECK +# undef strtok_r +# define strtok_r(s,d,p) \ + (GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbstok_r if you care about internationalization"), \ + strtok_r (s, d, p)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# define strtok_r(s,d,p) \ + (GL_LINK_WARNING ("strtok_r is unportable - " \ + "use gnulib module strtok_r for portability"), \ + strtok_r (s, d, p)) +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if 0 +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +extern size_t mbslen (const char *string); +#endif + +#if 0 +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +extern size_t mbsnlen (const char *string, size_t len); +#endif + +#if 0 +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +extern char * mbschr (const char *string, int c); +#endif + +#if 0 +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ +extern char * mbsrchr (const char *string, int c); +#endif + +#if 0 +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +extern char * mbsstr (const char *haystack, const char *needle); +#endif + +#if 0 +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +extern int mbscasecmp (const char *s1, const char *s2); +#endif + +#if 0 +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +extern int mbsncasecmp (const char *s1, const char *s2, size_t n); +#endif + +#if 0 +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case, returning less than, equal to or greater than zero if this + initial segment is lexicographically less than, equal to or greater than + PREFIX. + Note: This function may, in multibyte locales, return 0 if STRING is of + smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +extern char * mbspcasecmp (const char *string, const char *prefix); +#endif + +#if 0 +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +extern char * mbscasestr (const char *haystack, const char *needle); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +extern size_t mbscspn (const char *string, const char *accept); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +extern char * mbspbrk (const char *string, const char *accept); +#endif + +#if 0 +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +extern size_t mbsspn (const char *string, const char *reject); +#endif + +#if 0 +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +extern char * mbssep (char **stringp, const char *delim); +#endif + +#if 0 +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +extern char * mbstok_r (char *string, const char *delim, char **save_ptr); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if 1 +# if 0 +# undef strerror +# define strerror rpl_strerror +extern char *strerror (int); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror +# define strerror(e) \ + (GL_LINK_WARNING ("strerror is unportable - " \ + "use gnulib module strerror to guarantee non-NULL result"), \ + strerror (e)) +#endif + +#if 1 +# if 0 +# define strsignal rpl_strsignal +# endif +# if ! 1 || 0 +extern char *strsignal (int __sig); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# define strsignal(a) \ + (GL_LINK_WARNING ("strsignal is unportable - " \ + "use gnulib module strsignal for portability"), \ + strsignal (a)) +#endif + +#if 0 +# if !1 +extern int strverscmp (const char *, const char *); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# define strverscmp(a, b) \ + (GL_LINK_WARNING ("strverscmp is unportable - " \ + "use gnulib module strverscmp for portability"), \ + strverscmp (a, b)) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STRING_H */ +#endif /* _GL_STRING_H */ diff --git a/coreseek/m4-1.4.13/lib/string.in.h b/coreseek/m4-1.4.13/lib/string.in.h new file mode 100644 index 0000000..f021a3e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/string.in.h @@ -0,0 +1,605 @@ +/* A GNU-like . + + Copyright (C) 1995-1996, 2001-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_STRING_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STRING_H@ + +#ifndef _GL_STRING_H +#define _GL_STRING_H + + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The attribute __pure__ was added in gcc 2.96. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +# define __pure__ /* empty */ +# endif +#endif + + +/* The definition of GL_LINK_WARNING is copied here. */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if @GNULIB_MEMMEM@ +# if @REPLACE_MEMMEM@ +# define memmem rpl_memmem +# endif +# if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@ +extern void *memmem (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memmem +# define memmem(a,al,b,bl) \ + (GL_LINK_WARNING ("memmem is unportable and often quadratic - " \ + "use gnulib module memmem-simple for portability, " \ + "and module memmem for speed" ), \ + memmem (a, al, b, bl)) +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if @GNULIB_MEMPCPY@ +# if ! @HAVE_MEMPCPY@ +extern void *mempcpy (void *restrict __dest, void const *restrict __src, + size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# define mempcpy(a,b,n) \ + (GL_LINK_WARNING ("mempcpy is unportable - " \ + "use gnulib module mempcpy for portability"), \ + mempcpy (a, b, n)) +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if @GNULIB_MEMRCHR@ +# if ! @HAVE_DECL_MEMRCHR@ +extern void *memrchr (void const *, int, size_t) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# define memrchr(a,b,c) \ + (GL_LINK_WARNING ("memrchr is unportable - " \ + "use gnulib module memrchr for portability"), \ + memrchr (a, b, c)) +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if @GNULIB_RAWMEMCHR@ +# if ! @HAVE_RAWMEMCHR@ +extern void *rawmemchr (void const *__s, int __c_in) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# define rawmemchr(a,b) \ + (GL_LINK_WARNING ("rawmemchr is unportable - " \ + "use gnulib module rawmemchr for portability"), \ + rawmemchr (a, b)) +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if @GNULIB_STPCPY@ +# if ! @HAVE_STPCPY@ +extern char *stpcpy (char *restrict __dst, char const *restrict __src); +# endif +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# define stpcpy(a,b) \ + (GL_LINK_WARNING ("stpcpy is unportable - " \ + "use gnulib module stpcpy for portability"), \ + stpcpy (a, b)) +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if @GNULIB_STPNCPY@ +# if ! @HAVE_STPNCPY@ +# define stpncpy gnu_stpncpy +extern char *stpncpy (char *restrict __dst, char const *restrict __src, + size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# define stpncpy(a,b,n) \ + (GL_LINK_WARNING ("stpncpy is unportable - " \ + "use gnulib module stpncpy for portability"), \ + stpncpy (a, b, n)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +# define strchr(s,c) \ + (GL_LINK_WARNING ("strchr cannot work correctly on character strings " \ + "in some multibyte locales - " \ + "use mbschr if you care about internationalization"), \ + strchr (s, c)) +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if @GNULIB_STRCHRNUL@ +# if ! @HAVE_STRCHRNUL@ +extern char *strchrnul (char const *__s, int __c_in) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# define strchrnul(a,b) \ + (GL_LINK_WARNING ("strchrnul is unportable - " \ + "use gnulib module strchrnul for portability"), \ + strchrnul (a, b)) +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if @GNULIB_STRDUP@ +# if @REPLACE_STRDUP@ +# undef strdup +# define strdup rpl_strdup +# endif +# if !(@HAVE_DECL_STRDUP@ || defined strdup) || @REPLACE_STRDUP@ +extern char *strdup (char const *__s); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strdup +# define strdup(a) \ + (GL_LINK_WARNING ("strdup is unportable - " \ + "use gnulib module strdup for portability"), \ + strdup (a)) +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if @GNULIB_STRNDUP@ +# if ! @HAVE_STRNDUP@ +# undef strndup +# define strndup rpl_strndup +# endif +# if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@ +extern char *strndup (char const *__string, size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strndup +# define strndup(a,n) \ + (GL_LINK_WARNING ("strndup is unportable - " \ + "use gnulib module strndup for portability"), \ + strndup (a, n)) +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if @GNULIB_STRNLEN@ +# if ! @HAVE_DECL_STRNLEN@ +extern size_t strnlen (char const *__string, size_t __maxlen) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# define strnlen(a,n) \ + (GL_LINK_WARNING ("strnlen is unportable - " \ + "use gnulib module strnlen for portability"), \ + strnlen (a, n)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +# define strcspn(s,a) \ + (GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbscspn if you care about internationalization"), \ + strcspn (s, a)) +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if @GNULIB_STRPBRK@ +# if ! @HAVE_STRPBRK@ +extern char *strpbrk (char const *__s, char const *__accept) + __attribute__ ((__pure__)); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +# define strpbrk(s,a) \ + (GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbspbrk if you care about internationalization"), \ + strpbrk (s, a)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# define strpbrk(s,a) \ + (GL_LINK_WARNING ("strpbrk is unportable - " \ + "use gnulib module strpbrk for portability"), \ + strpbrk (s, a)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +# define strspn(s,a) \ + (GL_LINK_WARNING ("strspn cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbsspn if you care about internationalization"), \ + strspn (s, a)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +# define strrchr(s,c) \ + (GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \ + "in some multibyte locales - " \ + "use mbsrchr if you care about internationalization"), \ + strrchr (s, c)) +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if @GNULIB_STRSEP@ +# if ! @HAVE_STRSEP@ +extern char *strsep (char **restrict __stringp, char const *restrict __delim); +# endif +# if defined GNULIB_POSIXCHECK +# undef strsep +# define strsep(s,d) \ + (GL_LINK_WARNING ("strsep cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbssep if you care about internationalization"), \ + strsep (s, d)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# define strsep(s,d) \ + (GL_LINK_WARNING ("strsep is unportable - " \ + "use gnulib module strsep for portability"), \ + strsep (s, d)) +#endif + +#if @GNULIB_STRSTR@ +# if @REPLACE_STRSTR@ +# define strstr rpl_strstr +char *strstr (const char *haystack, const char *needle) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +# define strstr(a,b) \ + (GL_LINK_WARNING ("strstr is quadratic on many systems, and cannot " \ + "work correctly on character strings in most " \ + "multibyte locales - " \ + "use mbsstr if you care about internationalization, " \ + "or use strstr if you care about speed"), \ + strstr (a, b)) +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if @GNULIB_STRCASESTR@ +# if @REPLACE_STRCASESTR@ +# define strcasestr rpl_strcasestr +# endif +# if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@ +extern char *strcasestr (const char *haystack, const char *needle) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# define strcasestr(a,b) \ + (GL_LINK_WARNING ("strcasestr does work correctly on character strings " \ + "in multibyte locales - " \ + "use mbscasestr if you care about " \ + "internationalization, or use c-strcasestr if you want " \ + "a locale independent function"), \ + strcasestr (a, b)) +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + http://www.opengroup.org/susv3xsh/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if @GNULIB_STRTOK_R@ +# if ! @HAVE_DECL_STRTOK_R@ +extern char *strtok_r (char *restrict s, char const *restrict delim, + char **restrict save_ptr); +# endif +# if defined GNULIB_POSIXCHECK +# undef strtok_r +# define strtok_r(s,d,p) \ + (GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbstok_r if you care about internationalization"), \ + strtok_r (s, d, p)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# define strtok_r(s,d,p) \ + (GL_LINK_WARNING ("strtok_r is unportable - " \ + "use gnulib module strtok_r for portability"), \ + strtok_r (s, d, p)) +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if @GNULIB_MBSLEN@ +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +extern size_t mbslen (const char *string); +#endif + +#if @GNULIB_MBSNLEN@ +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +extern size_t mbsnlen (const char *string, size_t len); +#endif + +#if @GNULIB_MBSCHR@ +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +extern char * mbschr (const char *string, int c); +#endif + +#if @GNULIB_MBSRCHR@ +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ +extern char * mbsrchr (const char *string, int c); +#endif + +#if @GNULIB_MBSSTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +extern char * mbsstr (const char *haystack, const char *needle); +#endif + +#if @GNULIB_MBSCASECMP@ +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +extern int mbscasecmp (const char *s1, const char *s2); +#endif + +#if @GNULIB_MBSNCASECMP@ +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +extern int mbsncasecmp (const char *s1, const char *s2, size_t n); +#endif + +#if @GNULIB_MBSPCASECMP@ +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case, returning less than, equal to or greater than zero if this + initial segment is lexicographically less than, equal to or greater than + PREFIX. + Note: This function may, in multibyte locales, return 0 if STRING is of + smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +extern char * mbspcasecmp (const char *string, const char *prefix); +#endif + +#if @GNULIB_MBSCASESTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +extern char * mbscasestr (const char *haystack, const char *needle); +#endif + +#if @GNULIB_MBSCSPN@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +extern size_t mbscspn (const char *string, const char *accept); +#endif + +#if @GNULIB_MBSPBRK@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +extern char * mbspbrk (const char *string, const char *accept); +#endif + +#if @GNULIB_MBSSPN@ +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +extern size_t mbsspn (const char *string, const char *reject); +#endif + +#if @GNULIB_MBSSEP@ +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +extern char * mbssep (char **stringp, const char *delim); +#endif + +#if @GNULIB_MBSTOK_R@ +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +extern char * mbstok_r (char *string, const char *delim, char **save_ptr); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if @GNULIB_STRERROR@ +# if @REPLACE_STRERROR@ +# undef strerror +# define strerror rpl_strerror +extern char *strerror (int); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror +# define strerror(e) \ + (GL_LINK_WARNING ("strerror is unportable - " \ + "use gnulib module strerror to guarantee non-NULL result"), \ + strerror (e)) +#endif + +#if @GNULIB_STRSIGNAL@ +# if @REPLACE_STRSIGNAL@ +# define strsignal rpl_strsignal +# endif +# if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@ +extern char *strsignal (int __sig); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# define strsignal(a) \ + (GL_LINK_WARNING ("strsignal is unportable - " \ + "use gnulib module strsignal for portability"), \ + strsignal (a)) +#endif + +#if @GNULIB_STRVERSCMP@ +# if !@HAVE_STRVERSCMP@ +extern int strverscmp (const char *, const char *); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# define strverscmp(a, b) \ + (GL_LINK_WARNING ("strverscmp is unportable - " \ + "use gnulib module strverscmp for portability"), \ + strverscmp (a, b)) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STRING_H */ +#endif /* _GL_STRING_H */ diff --git a/coreseek/m4-1.4.13/lib/stripslash.c b/coreseek/m4-1.4.13/lib/stripslash.c new file mode 100644 index 0000000..4084410 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/stripslash.c @@ -0,0 +1,44 @@ +/* stripslash.c -- remove redundant trailing slashes from a file name + + Copyright (C) 1990, 2001, 2003-2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +/* Remove trailing slashes from FILE. Return true if a trailing slash + was removed. This is useful when using file name completion from a + shell that adds a "/" after directory names (such as tcsh and + bash), because on symlinks to directories, several system calls + have different semantics according to whether a trailing slash is + present. */ + +bool +strip_trailing_slashes (char *file) +{ + char *base = last_component (file); + char *base_lim; + bool had_slash; + + /* last_component returns "" for file system roots, but we need to turn + `///' into `/'. */ + if (! *base) + base = file; + base_lim = base + base_len (base); + had_slash = (*base_lim != '\0'); + *base_lim = '\0'; + return had_slash; +} diff --git a/coreseek/m4-1.4.13/lib/stripslash.o b/coreseek/m4-1.4.13/lib/stripslash.o new file mode 100644 index 0000000..95a5add Binary files /dev/null and b/coreseek/m4-1.4.13/lib/stripslash.o differ diff --git a/coreseek/m4-1.4.13/lib/strndup.c b/coreseek/m4-1.4.13/lib/strndup.c new file mode 100644 index 0000000..507e9c0 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strndup.c @@ -0,0 +1,37 @@ +/* A replacement function, for systems that lack strndup. + + Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2005, 2006, 2007 + Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3, or (at your option) any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +#include + +#include + +char * +strndup (char const *s, size_t n) +{ + size_t len = strnlen (s, n); + char *new = malloc (len + 1); + + if (new == NULL) + return NULL; + + new[len] = '\0'; + return memcpy (new, s, len); +} diff --git a/coreseek/m4-1.4.13/lib/strnlen.c b/coreseek/m4-1.4.13/lib/strnlen.c new file mode 100644 index 0000000..93d1ac1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strnlen.c @@ -0,0 +1,31 @@ +/* Find the length of STRING, but scan at most MAXLEN characters. + Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU 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. */ + +#include + +#include + +/* Find the length of STRING, but scan at most MAXLEN characters. + If no '\0' terminator is found in that many characters, return MAXLEN. */ + +size_t +strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} diff --git a/coreseek/m4-1.4.13/lib/strsignal.c b/coreseek/m4-1.4.13/lib/strsignal.c new file mode 100644 index 0000000..4bf017d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strsignal.c @@ -0,0 +1,197 @@ +/* Copyright (C) 1991, 1994-2002, 2005, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _LIBC +# include +#endif + +#include +#include +#include +#include + +#ifdef _LIBC +# include +#else /* !_LIBC */ +# include "gettext.h" +# define _(msgid) gettext (msgid) +# define N_(msgid) gettext_noop (msgid) +#endif /* _LIBC */ + +#ifdef _LIBC +# include +#else /* !_LIBC */ +# include "glthread/lock.h" +# include "glthread/tls.h" +# define __libc_once_define(CLASS, NAME) gl_once_define (CLASS, NAME) +# define __libc_once(NAME, INIT) gl_once ((NAME), (INIT)) +# define __libc_key_t gl_tls_key_t +# define __libc_getspecific(NAME) gl_tls_get ((NAME)) +# define __libc_setspecific(NAME, POINTER) gl_tls_set ((NAME), (POINTER)) +# define __snprintf snprintf +#endif /* _LIBC */ + +#ifdef _LIBC + +/* Defined in siglist.c. */ +extern const char *const _sys_siglist[]; +extern const char *const _sys_siglist_internal[] attribute_hidden; + +#else /* !_LIBC */ + +/* NetBSD declares sys_siglist in unistd.h. */ +# include + +# define INTUSE(x) (x) + +# if HAVE_DECL_SYS_SIGLIST +# undef _sys_siglist +# define _sys_siglist sys_siglist +# else /* !HAVE_DECL_SYS_SIGLIST */ +# ifndef NSIG +# define NSIG 32 +# endif /* NSIG */ +# if !HAVE_DECL__SYS_SIGLIST +static const char *_sys_siglist[NSIG]; +# endif +# endif /* !HAVE_DECL_SYS_SIGLIST */ + +#endif /* _LIBC */ + +static __libc_key_t key; + +/* If nonzero the key allocation failed and we should better use a + static buffer than fail. */ +#define BUFFERSIZ 100 +static char local_buf[BUFFERSIZ]; +static char *static_buf; + +/* Destructor for the thread-specific data. */ +static void init (void); +static void free_key_mem (void *mem); +static char *getbuffer (void); + + +/* Return a string describing the meaning of the signal number SIGNUM. */ +char * +strsignal (int signum) +{ + const char *desc; + __libc_once_define (static, once); + + /* If we have not yet initialized the buffer do it now. */ + __libc_once (once, init); + + if ( +#ifdef SIGRTMIN + (signum >= SIGRTMIN && signum <= SIGRTMAX) || +#endif + signum < 0 || signum >= NSIG + || (desc = INTUSE(_sys_siglist)[signum]) == NULL) + { + char *buffer = getbuffer (); + int len; +#ifdef SIGRTMIN + if (signum >= SIGRTMIN && signum <= SIGRTMAX) + len = __snprintf (buffer, BUFFERSIZ - 1, _("Real-time signal %d"), + signum - SIGRTMIN); + else +#endif + len = __snprintf (buffer, BUFFERSIZ - 1, _("Unknown signal %d"), + signum); + if (len >= BUFFERSIZ) + buffer = NULL; + else + buffer[len] = '\0'; + + return buffer; + } + + return (char *) _(desc); +} + + +/* Initialize buffer. */ +static void +init (void) +{ +#ifdef _LIBC + if (__libc_key_create (&key, free_key_mem)) + /* Creating the key failed. This means something really went + wrong. In any case use a static buffer which is better than + nothing. */ + static_buf = local_buf; +#else /* !_LIBC */ + gl_tls_key_init (key, free_key_mem); + +# if !HAVE_DECL_SYS_SIGLIST + memset (_sys_siglist, 0, NSIG * sizeof *_sys_siglist); + + /* No need to use a do {} while (0) here since init_sig(...) must expand + to a complete statement. (We cannot use the ISO C99 designated array + initializer syntax since it is not supported by ANSI C compilers and + since some signal numbers might exceed NSIG.) */ +# define init_sig(sig, abbrev, desc) \ + if (sig >= 0 && sig < NSIG) \ + _sys_siglist[sig] = desc; + +# include "siglist.h" + +# undef init_sig + +# endif /* !HAVE_DECL_SYS_SIGLIST */ +#endif /* !_LIBC */ +} + + +/* Free the thread specific data, this is done if a thread terminates. */ +static void +free_key_mem (void *mem) +{ + free (mem); + __libc_setspecific (key, NULL); +} + + +/* Return the buffer to be used. */ +static char * +getbuffer (void) +{ + char *result; + + if (static_buf != NULL) + result = static_buf; + else + { + /* We don't use the static buffer and so we have a key. Use it + to get the thread-specific buffer. */ + result = __libc_getspecific (key); + if (result == NULL) + { + /* No buffer allocated so far. */ + result = malloc (BUFFERSIZ); + if (result == NULL) + /* No more memory available. We use the static buffer. */ + result = local_buf; + else + __libc_setspecific (key, result); + } + } + + return result; +} diff --git a/coreseek/m4-1.4.13/lib/strstr.c b/coreseek/m4-1.4.13/lib/strstr.c new file mode 100644 index 0000000..5cca739 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strstr.c @@ -0,0 +1,83 @@ +/* Copyright (C) 1991,92,93,94,96,97,98,2000,2004,2007,2008 Free Software + Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* This particular implementation was written by Eric Blake, 2008. */ + +#ifndef _LIBC +# include +#endif + +/* Specification of strstr. */ +#include + +#include + +#ifndef _LIBC +# define __builtin_expect(expr, val) (expr) +#endif + +#define RETURN_TYPE char * +#define AVAILABLE(h, h_l, j, n_l) \ + (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ + && ((h_l) = (j) + (n_l))) +#include "str-two-way.h" + +/* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK + if NEEDLE is empty, otherwise NULL if NEEDLE is not found in + HAYSTACK. */ +char * +strstr (const char *haystack_start, const char *needle_start) +{ + const char *haystack = haystack_start; + const char *needle = needle_start; + size_t needle_len; /* Length of NEEDLE. */ + size_t haystack_len; /* Known minimum length of HAYSTACK. */ + bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ + + /* Determine length of NEEDLE, and in the process, make sure + HAYSTACK is at least as long (no point processing all of a long + NEEDLE if HAYSTACK is too short). */ + while (*haystack && *needle) + ok &= *haystack++ == *needle++; + if (*needle) + return NULL; + if (ok) + return (char *) haystack_start; + + /* Reduce the size of haystack using strchr, since it has a smaller + linear coefficient than the Two-Way algorithm. */ + needle_len = needle - needle_start; + haystack = strchr (haystack_start + 1, *needle_start); + if (!haystack || __builtin_expect (needle_len == 1, 0)) + return (char *) haystack; + needle -= needle_len; + haystack_len = (haystack > haystack_start + needle_len ? 1 + : needle_len + haystack_start - haystack); + + /* Perform the search. Abstract memory is considered to be an array + of 'unsigned char' values, not an array of 'char' values. See + ISO C 99 section 6.2.6.1. */ + if (needle_len < LONG_NEEDLE_THRESHOLD) + return two_way_short_needle ((const unsigned char *) haystack, + haystack_len, + (const unsigned char *) needle, needle_len); + return two_way_long_needle ((const unsigned char *) haystack, haystack_len, + (const unsigned char *) needle, needle_len); +} + +#undef LONG_NEEDLE_THRESHOLD diff --git a/coreseek/m4-1.4.13/lib/strstr.o b/coreseek/m4-1.4.13/lib/strstr.o new file mode 100644 index 0000000..b3719a6 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/strstr.o differ diff --git a/coreseek/m4-1.4.13/lib/strtod.c b/coreseek/m4-1.4.13/lib/strtod.c new file mode 100644 index 0000000..a2a4d3d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strtod.c @@ -0,0 +1,272 @@ +/* Copyright (C) 1991, 1992, 1997, 1999, 2003, 2006, 2008 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include "c-ctype.h" + +/* Convert NPTR to a double. If ENDPTR is not NULL, a pointer to the + character after the last one used in the number is put in *ENDPTR. */ +double +strtod (const char *nptr, char **endptr) +{ + const unsigned char *s; + bool negative = false; + + /* The number so far. */ + double num; + + bool got_dot; /* Found a decimal point. */ + bool got_digit; /* Seen any digits. */ + bool hex = false; /* Look for hex float exponent. */ + + /* The exponent of the number. */ + long int exponent; + + if (nptr == NULL) + { + errno = EINVAL; + goto noconv; + } + + /* Use unsigned char for the ctype routines. */ + s = (unsigned char *) nptr; + + /* Eat whitespace. */ + while (isspace (*s)) + ++s; + + /* Get the sign. */ + negative = *s == '-'; + if (*s == '-' || *s == '+') + ++s; + + num = 0.0; + got_dot = false; + got_digit = false; + exponent = 0; + + /* Check for hex float. */ + if (*s == '0' && c_tolower (s[1]) == 'x' + && (c_isxdigit (s[2]) || ('.' == s[2] && c_isxdigit (s[3])))) + { + hex = true; + s += 2; + for (;; ++s) + { + if (c_isxdigit (*s)) + { + got_digit = true; + + /* Make sure that multiplication by 16 will not overflow. */ + if (num > DBL_MAX / 16) + /* The value of the digit doesn't matter, since we have already + gotten as many digits as can be represented in a `double'. + This doesn't necessarily mean the result will overflow. + The exponent may reduce it to within range. + + We just need to record that there was another + digit so that we can multiply by 16 later. */ + ++exponent; + else + num = ((num * 16.0) + + (c_tolower (*s) - (c_isdigit (*s) ? '0' : 'a' - 10))); + + /* Keep track of the number of digits after the decimal point. + If we just divided by 16 here, we would lose precision. */ + if (got_dot) + --exponent; + } + else if (!got_dot && *s == '.') + /* Record that we have found the decimal point. */ + got_dot = true; + else + /* Any other character terminates the number. */ + break; + } + } + + /* Not a hex float. */ + else + { + for (;; ++s) + { + if (c_isdigit (*s)) + { + got_digit = true; + + /* Make sure that multiplication by 10 will not overflow. */ + if (num > DBL_MAX * 0.1) + /* The value of the digit doesn't matter, since we have already + gotten as many digits as can be represented in a `double'. + This doesn't necessarily mean the result will overflow. + The exponent may reduce it to within range. + + We just need to record that there was another + digit so that we can multiply by 10 later. */ + ++exponent; + else + num = (num * 10.0) + (*s - '0'); + + /* Keep track of the number of digits after the decimal point. + If we just divided by 10 here, we would lose precision. */ + if (got_dot) + --exponent; + } + else if (!got_dot && *s == '.') + /* Record that we have found the decimal point. */ + got_dot = true; + else + /* Any other character terminates the number. */ + break; + } + } + + if (!got_digit) + { + /* Check for infinities and NaNs. */ + if (c_tolower (*s) == 'i' + && c_tolower (s[1]) == 'n' + && c_tolower (s[2]) == 'f') + { + s += 3; + num = HUGE_VAL; + if (c_tolower (*s) == 'i' + && c_tolower (s[1]) == 'n' + && c_tolower (s[2]) == 'i' + && c_tolower (s[3]) == 't' + && c_tolower (s[4]) == 'y') + s += 5; + goto valid; + } +#ifdef NAN + else if (c_tolower (*s) == 'n' + && c_tolower (s[1]) == 'a' + && c_tolower (s[2]) == 'n') + { + s += 3; + num = NAN; + /* Since nan() is implementation-defined, + we define it by ignoring . A nicer + implementation would populate the bits of the NaN + according to interpreting n-char-sequence as a + hexadecimal number, but the result is still a NaN. */ + if (*s == '(') + { + const unsigned char *p = s + 1; + while (c_isalnum (*p)) + p++; + if (*p == ')') + s = p + 1; + } + goto valid; + } +#endif + goto noconv; + } + + if (c_tolower (*s) == (hex ? 'p' : 'e') && !isspace (s[1])) + { + /* Get the exponent specified after the `e' or `E'. */ + int save = errno; + char *end; + long int value; + + errno = 0; + ++s; + value = strtol ((char *) s, &end, 10); + if (errno == ERANGE && num) + { + /* The exponent overflowed a `long int'. It is probably a safe + assumption that an exponent that cannot be represented by + a `long int' exceeds the limits of a `double'. */ + if (endptr != NULL) + *endptr = end; + if (value < 0) + goto underflow; + else + goto overflow; + } + else if (end == (char *) s) + /* There was no exponent. Reset END to point to + the 'e' or 'E', so *ENDPTR will be set there. */ + end = (char *) s - 1; + errno = save; + s = (unsigned char *) end; + exponent += value; + } + + if (num == 0.0) + goto valid; + + if (hex) + { + /* ldexp takes care of range errors. */ + num = ldexp (num, exponent); + goto valid; + } + + /* Multiply NUM by 10 to the EXPONENT power, + checking for overflow and underflow. */ + + if (exponent < 0) + { + if (num < DBL_MIN * pow (10.0, (double) -exponent)) + goto underflow; + } + else if (exponent > 0) + { + if (num > DBL_MAX * pow (10.0, (double) -exponent)) + goto overflow; + } + + num *= pow (10.0, (double) exponent); + + valid: + if (endptr != NULL) + *endptr = (char *) s; + return negative ? -num : num; + + overflow: + /* Return an overflow error. */ + if (endptr != NULL) + *endptr = (char *) s; + errno = ERANGE; + return negative ? -HUGE_VAL : HUGE_VAL; + + underflow: + /* Return an underflow error. */ + if (endptr != NULL) + *endptr = (char *) s; + errno = ERANGE; + return negative ? -0.0 : 0.0; + + noconv: + /* There was no number. */ + if (endptr != NULL) + *endptr = (char *) nptr; + errno = EINVAL; + return 0.0; +} diff --git a/coreseek/m4-1.4.13/lib/strtol.c b/coreseek/m4-1.4.13/lib/strtol.c new file mode 100644 index 0000000..0b2c82a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/strtol.c @@ -0,0 +1,435 @@ +/* Convert string representation of a number into an integer value. + + Copyright (C) 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2005, + 2006, 2007 + Free Software Foundation, Inc. + + NOTE: The canonical source of this file is maintained with the GNU C + Library. Bugs can be reported to bug-glibc@gnu.org. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 3 of the License, or any + later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifdef _LIBC +# define USE_NUMBER_GROUPING +#else +# include +#endif + +#include +#include +#ifndef __set_errno +# define __set_errno(Val) errno = (Val) +#endif + +#include +#include +#include +#include + +#ifdef USE_NUMBER_GROUPING +# include "../locale/localeinfo.h" +#endif + +/* Nonzero if we are defining `strtoul' or `strtoull', operating on + unsigned integers. */ +#ifndef UNSIGNED +# define UNSIGNED 0 +# define INT LONG int +#else +# define INT unsigned LONG int +#endif + +/* Determine the name. */ +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# if UNSIGNED +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol __wcstoull_l +# else +# define strtol __wcstoul_l +# endif +# else +# ifdef QUAD +# define strtol __strtoull_l +# else +# define strtol __strtoul_l +# endif +# endif +# else +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol __wcstoll_l +# else +# define strtol __wcstol_l +# endif +# else +# ifdef QUAD +# define strtol __strtoll_l +# else +# define strtol __strtol_l +# endif +# endif +# endif +#else +# if UNSIGNED +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol wcstoull +# else +# define strtol wcstoul +# endif +# else +# ifdef QUAD +# define strtol strtoull +# else +# define strtol strtoul +# endif +# endif +# else +# ifdef USE_WIDE_CHAR +# ifdef QUAD +# define strtol wcstoll +# else +# define strtol wcstol +# endif +# else +# ifdef QUAD +# define strtol strtoll +# endif +# endif +# endif +#endif + +/* If QUAD is defined, we are defining `strtoll' or `strtoull', + operating on `long long int's. */ +#ifdef QUAD +# define LONG long long +# define STRTOL_LONG_MIN LONG_LONG_MIN +# define STRTOL_LONG_MAX LONG_LONG_MAX +# define STRTOL_ULONG_MAX ULONG_LONG_MAX + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if negative values of the signed integer type T use two's + complement, ones' complement, or signed magnitude representation, + respectively. Much GNU code assumes two's complement, but some + people like to be portable to all possible C hosts. */ +# define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) +# define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) +# define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) + +/* True if the arithmetic type T is signed. */ +# define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* The maximum and minimum values for the integer type T. These + macros have undefined behavior if T is signed and has padding bits. + If this is a problem for you, please let us know how to fix it for + your host. */ +# define TYPE_MINIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) 0 \ + : TYPE_SIGNED_MAGNITUDE (t) \ + ? ~ (t) 0 \ + : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +# define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) + +# ifndef ULONG_LONG_MAX +# define ULONG_LONG_MAX TYPE_MAXIMUM (unsigned long long) +# endif +# ifndef LONG_LONG_MAX +# define LONG_LONG_MAX TYPE_MAXIMUM (long long int) +# endif +# ifndef LONG_LONG_MIN +# define LONG_LONG_MIN TYPE_MINIMUM (long long int) +# endif + +# if __GNUC__ == 2 && __GNUC_MINOR__ < 7 + /* Work around gcc bug with using this constant. */ + static const unsigned long long int maxquad = ULONG_LONG_MAX; +# undef STRTOL_ULONG_MAX +# define STRTOL_ULONG_MAX maxquad +# endif +#else +# define LONG long +# define STRTOL_LONG_MIN LONG_MIN +# define STRTOL_LONG_MAX LONG_MAX +# define STRTOL_ULONG_MAX ULONG_MAX +#endif + + +/* We use this code also for the extended locale handling where the + function gets as an additional argument the locale which has to be + used. To access the values we have to redefine the _NL_CURRENT + macro. */ +#ifdef USE_IN_EXTENDED_LOCALE_MODEL +# undef _NL_CURRENT +# define _NL_CURRENT(category, item) \ + (current->values[_NL_ITEM_INDEX (item)].string) +# define LOCALE_PARAM , loc +# define LOCALE_PARAM_PROTO , __locale_t loc +#else +# define LOCALE_PARAM +# define LOCALE_PARAM_PROTO +#endif + +#include + +#ifdef USE_WIDE_CHAR +# include +# define L_(Ch) L##Ch +# define UCHAR_TYPE wint_t +# define STRING_TYPE wchar_t +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define ISSPACE(Ch) __iswspace_l ((Ch), loc) +# define ISALPHA(Ch) __iswalpha_l ((Ch), loc) +# define TOUPPER(Ch) __towupper_l ((Ch), loc) +# else +# define ISSPACE(Ch) iswspace (Ch) +# define ISALPHA(Ch) iswalpha (Ch) +# define TOUPPER(Ch) towupper (Ch) +# endif +#else +# define L_(Ch) Ch +# define UCHAR_TYPE unsigned char +# define STRING_TYPE char +# ifdef USE_IN_EXTENDED_LOCALE_MODEL +# define ISSPACE(Ch) __isspace_l ((Ch), loc) +# define ISALPHA(Ch) __isalpha_l ((Ch), loc) +# define TOUPPER(Ch) __toupper_l ((Ch), loc) +# else +# define ISSPACE(Ch) isspace (Ch) +# define ISALPHA(Ch) isalpha (Ch) +# define TOUPPER(Ch) toupper (Ch) +# endif +#endif + +#define INTERNAL(X) INTERNAL1(X) +#define INTERNAL1(X) __##X##_internal +#define WEAKNAME(X) WEAKNAME1(X) + +#ifdef USE_NUMBER_GROUPING +/* This file defines a function to check for correct grouping. */ +# include "grouping.h" +#endif + + + +/* Convert NPTR to an `unsigned long int' or `long int' in base BASE. + If BASE is 0 the base is determined by the presence of a leading + zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal. + If BASE is < 2 or > 36, it is reset to 10. + If ENDPTR is not NULL, a pointer to the character after the last + one converted is stored in *ENDPTR. */ + +INT +INTERNAL (strtol) (const STRING_TYPE *nptr, STRING_TYPE **endptr, + int base, int group LOCALE_PARAM_PROTO) +{ + int negative; + register unsigned LONG int cutoff; + register unsigned int cutlim; + register unsigned LONG int i; + register const STRING_TYPE *s; + register UCHAR_TYPE c; + const STRING_TYPE *save, *end; + int overflow; + +#ifdef USE_NUMBER_GROUPING +# ifdef USE_IN_EXTENDED_LOCALE_MODEL + struct locale_data *current = loc->__locales[LC_NUMERIC]; +# endif + /* The thousands character of the current locale. */ + wchar_t thousands = L'\0'; + /* The numeric grouping specification of the current locale, + in the format described in . */ + const char *grouping; + + if (group) + { + grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); + if (*grouping <= 0 || *grouping == CHAR_MAX) + grouping = NULL; + else + { + /* Figure out the thousands separator character. */ +# if defined _LIBC || defined _HAVE_BTOWC + thousands = __btowc (*_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP)); + if (thousands == WEOF) + thousands = L'\0'; +# endif + if (thousands == L'\0') + grouping = NULL; + } + } + else + grouping = NULL; +#endif + + if (base < 0 || base == 1 || base > 36) + { + __set_errno (EINVAL); + return 0; + } + + save = s = nptr; + + /* Skip white space. */ + while (ISSPACE (*s)) + ++s; + if (*s == L_('\0')) + goto noconv; + + /* Check for a sign. */ + if (*s == L_('-')) + { + negative = 1; + ++s; + } + else if (*s == L_('+')) + { + negative = 0; + ++s; + } + else + negative = 0; + + /* Recognize number prefix and if BASE is zero, figure it out ourselves. */ + if (*s == L_('0')) + { + if ((base == 0 || base == 16) && TOUPPER (s[1]) == L_('X')) + { + s += 2; + base = 16; + } + else if (base == 0) + base = 8; + } + else if (base == 0) + base = 10; + + /* Save the pointer so we can check later if anything happened. */ + save = s; + +#ifdef USE_NUMBER_GROUPING + if (group) + { + /* Find the end of the digit string and check its grouping. */ + end = s; + for (c = *end; c != L_('\0'); c = *++end) + if ((wchar_t) c != thousands + && ((wchar_t) c < L_('0') || (wchar_t) c > L_('9')) + && (!ISALPHA (c) || (int) (TOUPPER (c) - L_('A') + 10) >= base)) + break; + if (*s == thousands) + end = s; + else + end = correctly_grouped_prefix (s, end, thousands, grouping); + } + else +#endif + end = NULL; + + cutoff = STRTOL_ULONG_MAX / (unsigned LONG int) base; + cutlim = STRTOL_ULONG_MAX % (unsigned LONG int) base; + + overflow = 0; + i = 0; + for (c = *s; c != L_('\0'); c = *++s) + { + if (s == end) + break; + if (c >= L_('0') && c <= L_('9')) + c -= L_('0'); + else if (ISALPHA (c)) + c = TOUPPER (c) - L_('A') + 10; + else + break; + if ((int) c >= base) + break; + /* Check for overflow. */ + if (i > cutoff || (i == cutoff && c > cutlim)) + overflow = 1; + else + { + i *= (unsigned LONG int) base; + i += c; + } + } + + /* Check if anything actually happened. */ + if (s == save) + goto noconv; + + /* Store in ENDPTR the address of one character + past the last character we converted. */ + if (endptr != NULL) + *endptr = (STRING_TYPE *) s; + +#if !UNSIGNED + /* Check for a value that is within the range of + `unsigned LONG int', but outside the range of `LONG int'. */ + if (overflow == 0 + && i > (negative + ? -((unsigned LONG int) (STRTOL_LONG_MIN + 1)) + 1 + : (unsigned LONG int) STRTOL_LONG_MAX)) + overflow = 1; +#endif + + if (overflow) + { + __set_errno (ERANGE); +#if UNSIGNED + return STRTOL_ULONG_MAX; +#else + return negative ? STRTOL_LONG_MIN : STRTOL_LONG_MAX; +#endif + } + + /* Return the result of the appropriate sign. */ + return negative ? -i : i; + +noconv: + /* We must handle a special case here: the base is 0 or 16 and the + first two characters are '0' and 'x', but the rest are no + hexadecimal digits. This is no error case. We return 0 and + ENDPTR points to the `x`. */ + if (endptr != NULL) + { + if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X') + && save[-2] == L_('0')) + *endptr = (STRING_TYPE *) &save[-1]; + else + /* There was no number to convert. */ + *endptr = (STRING_TYPE *) nptr; + } + + return 0L; +} + +/* External user entry point. */ + + +INT +#ifdef weak_function +weak_function +#endif +strtol (const STRING_TYPE *nptr, STRING_TYPE **endptr, + int base LOCALE_PARAM_PROTO) +{ + return INTERNAL (strtol) (nptr, endptr, base, 0 LOCALE_PARAM); +} diff --git a/coreseek/m4-1.4.13/lib/sys/stat.h b/coreseek/m4-1.4.13/lib/sys/stat.h new file mode 100644 index 0000000..b298681 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sys/stat.h @@ -0,0 +1,390 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Provide a more complete sys/stat header file. + Copyright (C) 2005-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ + +/* This file is supposed to be used on platforms where is + incomplete. It is intended to provide definitions and prototypes + needed by an application. Start with what the system provides. */ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +#if defined __need_system_sys_stat_h +/* Special invocation convention. */ + +#include_next + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_STAT_H + +/* Get nlink_t. */ +#include + +/* The include_next requires a split double-inclusion guard. */ +#include_next + +#ifndef _GL_SYS_STAT_H +#define _GL_SYS_STAT_H + +/* The definition of GL_LINK_WARNING is copied here. */ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif + +/* Before doing "#define mkdir rpl_mkdir" below, we need to include all + headers that may declare mkdir(). */ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# include +#endif + +#ifndef S_IFMT +# define S_IFMT 0170000 +#endif + +#if STAT_MACROS_BROKEN +# undef S_ISBLK +# undef S_ISCHR +# undef S_ISDIR +# undef S_ISFIFO +# undef S_ISLNK +# undef S_ISNAM +# undef S_ISMPB +# undef S_ISMPC +# undef S_ISNWK +# undef S_ISREG +# undef S_ISSOCK +#endif + +#ifndef S_ISBLK +# ifdef S_IFBLK +# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +# else +# define S_ISBLK(m) 0 +# endif +#endif + +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(m) 0 +# endif +#endif + +#ifndef S_ISDIR +# ifdef S_IFDIR +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# else +# define S_ISDIR(m) 0 +# endif +#endif + +#ifndef S_ISDOOR /* Solaris 2.5 and up */ +# define S_ISDOOR(m) 0 +#endif + +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(m) 0 +# endif +#endif + +#ifndef S_ISLNK +# ifdef S_IFLNK +# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +# else +# define S_ISLNK(m) 0 +# endif +#endif + +#ifndef S_ISMPB /* V7 */ +# ifdef S_IFMPB +# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) +# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) +# else +# define S_ISMPB(m) 0 +# define S_ISMPC(m) 0 +# endif +#endif + +#ifndef S_ISNAM /* Xenix */ +# ifdef S_IFNAM +# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) +# else +# define S_ISNAM(m) 0 +# endif +#endif + +#ifndef S_ISNWK /* HP/UX */ +# ifdef S_IFNWK +# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) +# else +# define S_ISNWK(m) 0 +# endif +#endif + +#ifndef S_ISPORT /* Solaris 10 and up */ +# define S_ISPORT(m) 0 +#endif + +#ifndef S_ISREG +# ifdef S_IFREG +# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +# else +# define S_ISREG(m) 0 +# endif +#endif + +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(m) 0 +# endif +#endif + + +#ifndef S_TYPEISMQ +# define S_TYPEISMQ(p) 0 +#endif + +#ifndef S_TYPEISTMO +# define S_TYPEISTMO(p) 0 +#endif + + +#ifndef S_TYPEISSEM +# ifdef S_INSEM +# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) +# else +# define S_TYPEISSEM(p) 0 +# endif +#endif + +#ifndef S_TYPEISSHM +# ifdef S_INSHD +# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) +# else +# define S_TYPEISSHM(p) 0 +# endif +#endif + +/* high performance ("contiguous data") */ +#ifndef S_ISCTG +# define S_ISCTG(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with data */ +#ifndef S_ISOFD +# define S_ISOFD(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with no data */ +#ifndef S_ISOFL +# define S_ISOFL(p) 0 +#endif + +/* 4.4BSD whiteout */ +#ifndef S_ISWHT +# define S_ISWHT(m) 0 +#endif + +/* If any of the following are undefined, + define them to their de facto standard values. */ +#if !S_ISUID +# define S_ISUID 04000 +#endif +#if !S_ISGID +# define S_ISGID 02000 +#endif + +/* S_ISVTX is a common extension to POSIX. */ +#ifndef S_ISVTX +# define S_ISVTX 01000 +#endif + +#if !S_IRUSR && S_IREAD +# define S_IRUSR S_IREAD +#endif +#if !S_IRUSR +# define S_IRUSR 00400 +#endif +#if !S_IRGRP +# define S_IRGRP (S_IRUSR >> 3) +#endif +#if !S_IROTH +# define S_IROTH (S_IRUSR >> 6) +#endif + +#if !S_IWUSR && S_IWRITE +# define S_IWUSR S_IWRITE +#endif +#if !S_IWUSR +# define S_IWUSR 00200 +#endif +#if !S_IWGRP +# define S_IWGRP (S_IWUSR >> 3) +#endif +#if !S_IWOTH +# define S_IWOTH (S_IWUSR >> 6) +#endif + +#if !S_IXUSR && S_IEXEC +# define S_IXUSR S_IEXEC +#endif +#if !S_IXUSR +# define S_IXUSR 00100 +#endif +#if !S_IXGRP +# define S_IXGRP (S_IXUSR >> 3) +#endif +#if !S_IXOTH +# define S_IXOTH (S_IXUSR >> 6) +#endif + +#if !S_IRWXU +# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#endif +#if !S_IRWXG +# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) +#endif +#if !S_IRWXO +# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) +#endif + +/* S_IXUGO is a common extension to POSIX. */ +#if !S_IXUGO +# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) +#endif + +#ifndef S_IRWXUGO +# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if 1 +# if ! 1 +/* mingw does not support symlinks, therefore it does not have lstat. But + without links, stat does just fine. */ +# define lstat stat +# elif 0 +# undef lstat +# define lstat rpl_lstat +extern int rpl_lstat (const char *name, struct stat *buf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lstat +# define lstat(p,b) \ + (GL_LINK_WARNING ("lstat is unportable - " \ + "use gnulib module lstat for portability"), \ + lstat (p, b)) +#endif + + +#if 0 +# undef mkdir +# define mkdir rpl_mkdir +extern int mkdir (char const *name, mode_t mode); +#else +/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. + Additionally, it declares _mkdir (and depending on compile flags, an + alias mkdir), only in the nonstandard , which is included above. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +static inline int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} + +# define mkdir rpl_mkdir +# endif +#endif + + +/* Declare BSD extensions. */ + +#if 0 +/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME + denotes a symbolic link. */ +# if !1 +/* The lchmod replacement follows symbolic links. Callers should take + this into account; lchmod should be applied only to arguments that + are known to not be symbolic links. On hosts that lack lchmod, + this can lead to race conditions between the check and the + invocation of lchmod, but we know of no workarounds that are + reliable in general. You might try requesting support for lchmod + from your operating system supplier. */ +# define lchmod chmod +# endif +# if 0 /* assume already declared */ +extern int lchmod (const char *filename, mode_t mode); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lchmod +# define lchmod(f,m) \ + (GL_LINK_WARNING ("lchmod is unportable - " \ + "use gnulib module lchmod for portability"), \ + lchmod (f, m)) +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _GL_SYS_STAT_H */ +#endif /* _GL_SYS_STAT_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/sys/wait.h b/coreseek/m4-1.4.13/lib/sys/wait.h new file mode 100644 index 0000000..c9984bc --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sys/wait.h @@ -0,0 +1,137 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* A POSIX-like . + Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + + +#ifndef _GL_SYS_WAIT_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +# include_next +#endif + +#ifndef _GL_SYS_WAIT_H +#define _GL_SYS_WAIT_H + +/* The definition of GL_LINK_WARNING is copied here. */ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif + +#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +/* Unix API. */ + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid(). + On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and + WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs + have to use the abstract macros. */ + +/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) + is true. */ +# ifndef WIFSIGNALED +# define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) +# endif +# ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +# endif +# ifndef WIFSTOPPED +# define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) +# endif + +/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ +# ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +# endif + +/* The exit status. Only to be accessed if WIFEXITED(x) is true. */ +# ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +# endif + +/* True if the process dumped core. Not standardized by POSIX. */ +# ifndef WCOREDUMP +# define WCOREDUMP(x) ((x) & 0x80) +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* Declarations of functions. */ + +# ifdef __cplusplus +} +# endif + +#else +/* Native Windows API. */ + +# include + +# define waitpid(pid,statusp,options) _cwait (statusp, pid, WAIT_CHILD) + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). + This value is simply an 'int', not composed of bit fields. */ + +/* When an unhandled fatal signal terminates a process, the exit code is 3. */ +# define WIFSIGNALED(x) ((x) == 3) +# define WIFEXITED(x) ((x) != 3) +# define WIFSTOPPED(x) 0 + +/* The signal that terminated a process is not known posthum. */ +# define WTERMSIG(x) SIGTERM + +# define WEXITSTATUS(x) (x) + +/* There are no core dumps. */ +# define WCOREDUMP(x) 0 + +#endif + +#endif /* _GL_SYS_WAIT_H */ +#endif /* _GL_SYS_WAIT_H */ diff --git a/coreseek/m4-1.4.13/lib/sys_stat.in.h b/coreseek/m4-1.4.13/lib/sys_stat.in.h new file mode 100644 index 0000000..1e6294d --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sys_stat.in.h @@ -0,0 +1,361 @@ +/* Provide a more complete sys/stat header file. + Copyright (C) 2005-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ + +/* This file is supposed to be used on platforms where is + incomplete. It is intended to provide definitions and prototypes + needed by an application. Start with what the system provides. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_system_sys_stat_h +/* Special invocation convention. */ + +#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_SYS_STAT_H + +/* Get nlink_t. */ +#include + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ + +#ifndef _GL_SYS_STAT_H +#define _GL_SYS_STAT_H + +/* The definition of GL_LINK_WARNING is copied here. */ + +/* Before doing "#define mkdir rpl_mkdir" below, we need to include all + headers that may declare mkdir(). */ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ +# include +#endif + +#ifndef S_IFMT +# define S_IFMT 0170000 +#endif + +#if STAT_MACROS_BROKEN +# undef S_ISBLK +# undef S_ISCHR +# undef S_ISDIR +# undef S_ISFIFO +# undef S_ISLNK +# undef S_ISNAM +# undef S_ISMPB +# undef S_ISMPC +# undef S_ISNWK +# undef S_ISREG +# undef S_ISSOCK +#endif + +#ifndef S_ISBLK +# ifdef S_IFBLK +# define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +# else +# define S_ISBLK(m) 0 +# endif +#endif + +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(m) 0 +# endif +#endif + +#ifndef S_ISDIR +# ifdef S_IFDIR +# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +# else +# define S_ISDIR(m) 0 +# endif +#endif + +#ifndef S_ISDOOR /* Solaris 2.5 and up */ +# define S_ISDOOR(m) 0 +#endif + +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(m) 0 +# endif +#endif + +#ifndef S_ISLNK +# ifdef S_IFLNK +# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +# else +# define S_ISLNK(m) 0 +# endif +#endif + +#ifndef S_ISMPB /* V7 */ +# ifdef S_IFMPB +# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) +# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) +# else +# define S_ISMPB(m) 0 +# define S_ISMPC(m) 0 +# endif +#endif + +#ifndef S_ISNAM /* Xenix */ +# ifdef S_IFNAM +# define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) +# else +# define S_ISNAM(m) 0 +# endif +#endif + +#ifndef S_ISNWK /* HP/UX */ +# ifdef S_IFNWK +# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) +# else +# define S_ISNWK(m) 0 +# endif +#endif + +#ifndef S_ISPORT /* Solaris 10 and up */ +# define S_ISPORT(m) 0 +#endif + +#ifndef S_ISREG +# ifdef S_IFREG +# define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +# else +# define S_ISREG(m) 0 +# endif +#endif + +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(m) 0 +# endif +#endif + + +#ifndef S_TYPEISMQ +# define S_TYPEISMQ(p) 0 +#endif + +#ifndef S_TYPEISTMO +# define S_TYPEISTMO(p) 0 +#endif + + +#ifndef S_TYPEISSEM +# ifdef S_INSEM +# define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) +# else +# define S_TYPEISSEM(p) 0 +# endif +#endif + +#ifndef S_TYPEISSHM +# ifdef S_INSHD +# define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) +# else +# define S_TYPEISSHM(p) 0 +# endif +#endif + +/* high performance ("contiguous data") */ +#ifndef S_ISCTG +# define S_ISCTG(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with data */ +#ifndef S_ISOFD +# define S_ISOFD(p) 0 +#endif + +/* Cray DMF (data migration facility): off line, with no data */ +#ifndef S_ISOFL +# define S_ISOFL(p) 0 +#endif + +/* 4.4BSD whiteout */ +#ifndef S_ISWHT +# define S_ISWHT(m) 0 +#endif + +/* If any of the following are undefined, + define them to their de facto standard values. */ +#if !S_ISUID +# define S_ISUID 04000 +#endif +#if !S_ISGID +# define S_ISGID 02000 +#endif + +/* S_ISVTX is a common extension to POSIX. */ +#ifndef S_ISVTX +# define S_ISVTX 01000 +#endif + +#if !S_IRUSR && S_IREAD +# define S_IRUSR S_IREAD +#endif +#if !S_IRUSR +# define S_IRUSR 00400 +#endif +#if !S_IRGRP +# define S_IRGRP (S_IRUSR >> 3) +#endif +#if !S_IROTH +# define S_IROTH (S_IRUSR >> 6) +#endif + +#if !S_IWUSR && S_IWRITE +# define S_IWUSR S_IWRITE +#endif +#if !S_IWUSR +# define S_IWUSR 00200 +#endif +#if !S_IWGRP +# define S_IWGRP (S_IWUSR >> 3) +#endif +#if !S_IWOTH +# define S_IWOTH (S_IWUSR >> 6) +#endif + +#if !S_IXUSR && S_IEXEC +# define S_IXUSR S_IEXEC +#endif +#if !S_IXUSR +# define S_IXUSR 00100 +#endif +#if !S_IXGRP +# define S_IXGRP (S_IXUSR >> 3) +#endif +#if !S_IXOTH +# define S_IXOTH (S_IXUSR >> 6) +#endif + +#if !S_IRWXU +# define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) +#endif +#if !S_IRWXG +# define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) +#endif +#if !S_IRWXO +# define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) +#endif + +/* S_IXUGO is a common extension to POSIX. */ +#if !S_IXUGO +# define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) +#endif + +#ifndef S_IRWXUGO +# define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_LSTAT@ +# if ! @HAVE_LSTAT@ +/* mingw does not support symlinks, therefore it does not have lstat. But + without links, stat does just fine. */ +# define lstat stat +# elif @REPLACE_LSTAT@ +# undef lstat +# define lstat rpl_lstat +extern int rpl_lstat (const char *name, struct stat *buf); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lstat +# define lstat(p,b) \ + (GL_LINK_WARNING ("lstat is unportable - " \ + "use gnulib module lstat for portability"), \ + lstat (p, b)) +#endif + + +#if @REPLACE_MKDIR@ +# undef mkdir +# define mkdir rpl_mkdir +extern int mkdir (char const *name, mode_t mode); +#else +/* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. + Additionally, it declares _mkdir (and depending on compile flags, an + alias mkdir), only in the nonstandard , which is included above. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +static inline int +rpl_mkdir (char const *name, mode_t mode) +{ + return _mkdir (name); +} + +# define mkdir rpl_mkdir +# endif +#endif + + +/* Declare BSD extensions. */ + +#if @GNULIB_LCHMOD@ +/* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME + denotes a symbolic link. */ +# if !@HAVE_LCHMOD@ +/* The lchmod replacement follows symbolic links. Callers should take + this into account; lchmod should be applied only to arguments that + are known to not be symbolic links. On hosts that lack lchmod, + this can lead to race conditions between the check and the + invocation of lchmod, but we know of no workarounds that are + reliable in general. You might try requesting support for lchmod + from your operating system supplier. */ +# define lchmod chmod +# endif +# if 0 /* assume already declared */ +extern int lchmod (const char *filename, mode_t mode); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lchmod +# define lchmod(f,m) \ + (GL_LINK_WARNING ("lchmod is unportable - " \ + "use gnulib module lchmod for portability"), \ + lchmod (f, m)) +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _GL_SYS_STAT_H */ +#endif /* _GL_SYS_STAT_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/sys_time.in.h b/coreseek/m4-1.4.13/lib/sys_time.in.h new file mode 100644 index 0000000..454078f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sys_time.in.h @@ -0,0 +1,64 @@ +/* Provide a more complete sys/time.h. + + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Paul Eggert. */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined _GL_SYS_TIME_H + +/* Simply delegate to the system's header, without adding anything. */ +# if @HAVE_SYS_TIME_H@ +# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ +# endif + +#else + +# define _GL_SYS_TIME_H + +# if @HAVE_SYS_TIME_H@ +# @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ +# else +# include +# endif + +#ifdef __cplusplus +extern "C" { +#endif + +# if ! @HAVE_STRUCT_TIMEVAL@ +struct timeval +{ + time_t tv_sec; + long int tv_usec; +}; +# endif + +# if @REPLACE_GETTIMEOFDAY@ +# undef gettimeofday +# define gettimeofday rpl_gettimeofday +int gettimeofday (struct timeval *restrict, void *restrict); +# endif + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_SYS_TIME_H */ diff --git a/coreseek/m4-1.4.13/lib/sys_wait.in.h b/coreseek/m4-1.4.13/lib/sys_wait.in.h new file mode 100644 index 0000000..4b7fd40 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/sys_wait.in.h @@ -0,0 +1,108 @@ +/* A POSIX-like . + Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + + +#ifndef _GL_SYS_WAIT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +# @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@ +#endif + +#ifndef _GL_SYS_WAIT_H +#define _GL_SYS_WAIT_H + +/* The definition of GL_LINK_WARNING is copied here. */ + +#if !((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) +/* Unix API. */ + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid(). + On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and + WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs + have to use the abstract macros. */ + +/* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) + is true. */ +# ifndef WIFSIGNALED +# define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) +# endif +# ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +# endif +# ifndef WIFSTOPPED +# define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) +# endif + +/* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ +# ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +# endif + +/* The exit status. Only to be accessed if WIFEXITED(x) is true. */ +# ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +# endif + +/* True if the process dumped core. Not standardized by POSIX. */ +# ifndef WCOREDUMP +# define WCOREDUMP(x) ((x) & 0x80) +# endif + +# ifdef __cplusplus +extern "C" { +# endif + +/* Declarations of functions. */ + +# ifdef __cplusplus +} +# endif + +#else +/* Native Windows API. */ + +# include + +# define waitpid(pid,statusp,options) _cwait (statusp, pid, WAIT_CHILD) + +/* The following macros apply to an argument x, that is a status of a process, + as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). + This value is simply an 'int', not composed of bit fields. */ + +/* When an unhandled fatal signal terminates a process, the exit code is 3. */ +# define WIFSIGNALED(x) ((x) == 3) +# define WIFEXITED(x) ((x) != 3) +# define WIFSTOPPED(x) 0 + +/* The signal that terminated a process is not known posthum. */ +# define WTERMSIG(x) SIGTERM + +# define WEXITSTATUS(x) (x) + +/* There are no core dumps. */ +# define WCOREDUMP(x) 0 + +#endif + +#endif /* _GL_SYS_WAIT_H */ +#endif /* _GL_SYS_WAIT_H */ diff --git a/coreseek/m4-1.4.13/lib/tempname.c b/coreseek/m4-1.4.13/lib/tempname.c new file mode 100644 index 0000000..5a3a326 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/tempname.c @@ -0,0 +1,314 @@ +/* tempname.c - generate the name of a temporary file. + + Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2000, 2001, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Extracted from glibc sysdeps/posix/tempname.c. See also tmpdir.c. */ + +#if !_LIBC +# include +# include "tempname.h" +#endif + +#include +#include + +#include +#ifndef __set_errno +# define __set_errno(Val) errno = (Val) +#endif + +#include +#ifndef P_tmpdir +# define P_tmpdir "/tmp" +#endif +#ifndef TMP_MAX +# define TMP_MAX 238328 +#endif +#ifndef __GT_FILE +# define __GT_FILE 0 +# define __GT_BIGFILE 1 +# define __GT_DIR 2 +# define __GT_NOCREATE 3 +#endif + +#include +#include +#include + +#include +#include +#include +#include + +#include + +#if _LIBC +# define struct_stat64 struct stat64 +# define small_open __open +# define large_open __open64 +#else +# define struct_stat64 struct stat +# define small_open open +# define large_open open +# define __gen_tempname gen_tempname +# define __getpid getpid +# define __gettimeofday gettimeofday +# define __mkdir mkdir +# define __lxstat64(version, file, buf) lstat (file, buf) +# define __xstat64(version, file, buf) stat (file, buf) +#endif + +#if ! (HAVE___SECURE_GETENV || _LIBC) +# define __secure_getenv getenv +#endif + +#ifdef _LIBC +# include +# if HP_TIMING_AVAIL +# define RANDOM_BITS(Var) \ + if (__builtin_expect (value == UINT64_C (0), 0)) \ + { \ + /* If this is the first time this function is used initialize \ + the variable we accumulate the value in to some somewhat \ + random value. If we'd not do this programs at startup time \ + might have a reduced set of possible names, at least on slow \ + machines. */ \ + struct timeval tv; \ + __gettimeofday (&tv, NULL); \ + value = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; \ + } \ + HP_TIMING_NOW (Var) +# endif +#endif + +/* Use the widest available unsigned type if uint64_t is not + available. The algorithm below extracts a number less than 62**6 + (approximately 2**35.725) from uint64_t, so ancient hosts where + uintmax_t is only 32 bits lose about 3.725 bits of randomness, + which is better than not having mkstemp at all. */ +#if !defined UINT64_MAX && !defined uint64_t +# define uint64_t uintmax_t +#endif + +#if _LIBC +/* Return nonzero if DIR is an existent directory. */ +static int +direxists (const char *dir) +{ + struct_stat64 buf; + return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); +} + +/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is + non-null and exists, uses it; otherwise uses the first of $TMPDIR, + P_tmpdir, /tmp that exists. Copies into TMPL a template suitable + for use with mk[s]temp. Will fail (-1) if DIR is non-null and + doesn't exist, none of the searched dirs exists, or there's not + enough space in TMPL. */ +int +__path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, + int try_tmpdir) +{ + const char *d; + size_t dlen, plen; + + if (!pfx || !pfx[0]) + { + pfx = "file"; + plen = 4; + } + else + { + plen = strlen (pfx); + if (plen > 5) + plen = 5; + } + + if (try_tmpdir) + { + d = __secure_getenv ("TMPDIR"); + if (d != NULL && direxists (d)) + dir = d; + else if (dir != NULL && direxists (dir)) + /* nothing */ ; + else + dir = NULL; + } + if (dir == NULL) + { + if (direxists (P_tmpdir)) + dir = P_tmpdir; + else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) + dir = "/tmp"; + else + { + __set_errno (ENOENT); + return -1; + } + } + + dlen = strlen (dir); + while (dlen > 1 && dir[dlen - 1] == '/') + dlen--; /* remove trailing slashes */ + + /* check we have room for "${dir}/${pfx}XXXXXX\0" */ + if (tmpl_len < dlen + 1 + plen + 6 + 1) + { + __set_errno (EINVAL); + return -1; + } + + sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx); + return 0; +} +#endif /* _LIBC */ + +/* These are the characters used in temporary file names. */ +static const char letters[] = +"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed + does not exist at the time of the call to __gen_tempname. TMPL is + overwritten with the result. + + KIND may be one of: + __GT_NOCREATE: simply verify that the name does not exist + at the time of the call. + __GT_FILE: create the file using open(O_CREAT|O_EXCL) + and return a read-write fd. The file is mode 0600. + __GT_BIGFILE: same as __GT_FILE but use open64(). + __GT_DIR: create a directory, which will be mode 0700. + + We use a clever algorithm to get hard-to-predict names. */ +int +__gen_tempname (char *tmpl, int kind) +{ + int len; + char *XXXXXX; + static uint64_t value; + uint64_t random_time_bits; + unsigned int count; + int fd = -1; + int save_errno = errno; + struct_stat64 st; + + /* A lower bound on the number of temporary files to attempt to + generate. The maximum total number of temporary file names that + can exist for a given template is 62**6. It should never be + necessary to try all these combinations. Instead if a reasonable + number of names is tried (we define reasonable as 62**3) fail to + give the system administrator the chance to remove the problems. */ +#define ATTEMPTS_MIN (62 * 62 * 62) + + /* The number of times to attempt to generate a temporary file. To + conform to POSIX, this must be no smaller than TMP_MAX. */ +#if ATTEMPTS_MIN < TMP_MAX + unsigned int attempts = TMP_MAX; +#else + unsigned int attempts = ATTEMPTS_MIN; +#endif + + len = strlen (tmpl); + if (len < 6 || strcmp (&tmpl[len - 6], "XXXXXX")) + { + __set_errno (EINVAL); + return -1; + } + + /* This is where the Xs start. */ + XXXXXX = &tmpl[len - 6]; + + /* Get some more or less random data. */ +#ifdef RANDOM_BITS + RANDOM_BITS (random_time_bits); +#else + { + struct timeval tv; + __gettimeofday (&tv, NULL); + random_time_bits = ((uint64_t) tv.tv_usec << 16) ^ tv.tv_sec; + } +#endif + value += random_time_bits ^ __getpid (); + + for (count = 0; count < attempts; value += 7777, ++count) + { + uint64_t v = value; + + /* Fill in the random bits. */ + XXXXXX[0] = letters[v % 62]; + v /= 62; + XXXXXX[1] = letters[v % 62]; + v /= 62; + XXXXXX[2] = letters[v % 62]; + v /= 62; + XXXXXX[3] = letters[v % 62]; + v /= 62; + XXXXXX[4] = letters[v % 62]; + v /= 62; + XXXXXX[5] = letters[v % 62]; + + switch (kind) + { + case __GT_FILE: + fd = small_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); + break; + + case __GT_BIGFILE: + fd = large_open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); + break; + + case __GT_DIR: + fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); + break; + + case __GT_NOCREATE: + /* This case is backward from the other three. __gen_tempname + succeeds if __xstat fails because the name does not exist. + Note the continue to bypass the common logic at the bottom + of the loop. */ + if (__lxstat64 (_STAT_VER, tmpl, &st) < 0) + { + if (errno == ENOENT) + { + __set_errno (save_errno); + return 0; + } + else + /* Give up now. */ + return -1; + } + continue; + + default: + assert (! "invalid KIND in __gen_tempname"); + } + + if (fd >= 0) + { + __set_errno (save_errno); + return fd; + } + else if (errno != EEXIST) + return -1; + } + + /* We got out of the loop because we ran out of combinations to try. */ + __set_errno (EEXIST); + return -1; +} diff --git a/coreseek/m4-1.4.13/lib/tempname.h b/coreseek/m4-1.4.13/lib/tempname.h new file mode 100644 index 0000000..74da03b --- /dev/null +++ b/coreseek/m4-1.4.13/lib/tempname.h @@ -0,0 +1,39 @@ +/* Create a temporary file or directory. + + Copyright (C) 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* header written by Eric Blake */ + +/* In gnulib, always prefer large files. GT_FILE maps to + __GT_BIGFILE, not __GT_FILE, for a reason. */ +#define GT_FILE 1 +#define GT_DIR 2 +#define GT_NOCREATE 3 + +/* Generate a temporary file name based on TMPL. TMPL must match the + rules for mk[s]temp (i.e. end in "XXXXXX"). The name constructed + does not exist at the time of the call to gen_tempname. TMPL is + overwritten with the result. + + KIND may be one of: + GT_NOCREATE: simply verify that the name does not exist + at the time of the call. + GT_FILE: create a large file using open(O_CREAT|O_EXCL) + and return a read-write fd. The file is mode 0600. + GT_DIR: create a directory, which will be mode 0700. + + We use a clever algorithm to get hard-to-predict names. */ +extern int gen_tempname (char *tmpl, int kind); diff --git a/coreseek/m4-1.4.13/lib/tempname.o b/coreseek/m4-1.4.13/lib/tempname.o new file mode 100644 index 0000000..c55fe4b Binary files /dev/null and b/coreseek/m4-1.4.13/lib/tempname.o differ diff --git a/coreseek/m4-1.4.13/lib/tmpdir.c b/coreseek/m4-1.4.13/lib/tmpdir.c new file mode 100644 index 0000000..f5982ed --- /dev/null +++ b/coreseek/m4-1.4.13/lib/tmpdir.c @@ -0,0 +1,132 @@ +/* Copyright (C) 1999, 2001-2002, 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Extracted from sysdeps/posix/tempname.c. */ + +#include + +/* Specification. */ +#include "tmpdir.h" + +#include +#include +#include + +#include +#ifndef __set_errno +# define __set_errno(Val) errno = (Val) +#endif + +#include +#ifndef P_tmpdir +# define P_tmpdir "/tmp" +#endif + +#include + +#if _LIBC +# define struct_stat64 struct stat64 +#else +# define struct_stat64 struct stat +# define __xstat64(version, path, buf) stat (path, buf) +#endif + +#if ! (HAVE___SECURE_GETENV || _LIBC) +# define __secure_getenv getenv +#endif + +/* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + */ +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Win32, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +#endif + + +/* Return nonzero if DIR is an existent directory. */ +static bool +direxists (const char *dir) +{ + struct_stat64 buf; + return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); +} + +/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is + non-null and exists, uses it; otherwise uses the first of $TMPDIR, + P_tmpdir, /tmp that exists. Copies into TMPL a template suitable + for use with mk[s]temp. Will fail (-1) if DIR is non-null and + doesn't exist, none of the searched dirs exists, or there's not + enough space in TMPL. */ +int +path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, + bool try_tmpdir) +{ + const char *d; + size_t dlen, plen; + + if (!pfx || !pfx[0]) + { + pfx = "file"; + plen = 4; + } + else + { + plen = strlen (pfx); + if (plen > 5) + plen = 5; + } + + if (try_tmpdir) + { + d = __secure_getenv ("TMPDIR"); + if (d != NULL && direxists (d)) + dir = d; + else if (dir != NULL && direxists (dir)) + /* nothing */ ; + else + dir = NULL; + } + if (dir == NULL) + { + if (direxists (P_tmpdir)) + dir = P_tmpdir; + else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) + dir = "/tmp"; + else + { + __set_errno (ENOENT); + return -1; + } + } + + dlen = strlen (dir); + while (dlen >= 1 && ISSLASH (dir[dlen - 1])) + dlen--; /* remove trailing slashes */ + + /* check we have room for "${dir}/${pfx}XXXXXX\0" */ + if (tmpl_len < dlen + 1 + plen + 6 + 1) + { + __set_errno (EINVAL); + return -1; + } + + sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx); + return 0; +} diff --git a/coreseek/m4-1.4.13/lib/tmpdir.h b/coreseek/m4-1.4.13/lib/tmpdir.h new file mode 100644 index 0000000..d0d6558 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/tmpdir.h @@ -0,0 +1,26 @@ +/* Determine a temporary directory. + Copyright (C) 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include +#include + +/* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is + non-null and exists, uses it; otherwise uses the first of $TMPDIR, + P_tmpdir, /tmp that exists. Copies into TMPL a template suitable + for use with mk[s]temp. Will fail (-1) if DIR is non-null and + doesn't exist, none of the searched dirs exists, or there's not + enough space in TMPL. */ +extern int path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, bool try_tmpdir); diff --git a/coreseek/m4-1.4.13/lib/tmpdir.o b/coreseek/m4-1.4.13/lib/tmpdir.o new file mode 100644 index 0000000..8554542 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/tmpdir.o differ diff --git a/coreseek/m4-1.4.13/lib/unistd--.h b/coreseek/m4-1.4.13/lib/unistd--.h new file mode 100644 index 0000000..1a7fd78 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/unistd--.h @@ -0,0 +1,27 @@ +/* Like unistd.h, but redefine some names to avoid glitches. + + Copyright (C) 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include +#include "unistd-safer.h" + +#undef dup +#define dup dup_safer + +#undef pipe +#define pipe pipe_safer diff --git a/coreseek/m4-1.4.13/lib/unistd-safer.h b/coreseek/m4-1.4.13/lib/unistd-safer.h new file mode 100644 index 0000000..033e857 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/unistd-safer.h @@ -0,0 +1,22 @@ +/* Invoke unistd-like functions, but avoid some glitches. + + Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +int dup_safer (int); +int fd_safer (int); +int pipe_safer (int[2]); diff --git a/coreseek/m4-1.4.13/lib/unistd.h b/coreseek/m4-1.4.13/lib/unistd.h new file mode 100644 index 0000000..119133a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/unistd.h @@ -0,0 +1,607 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Substitute for and wrapper around . + Copyright (C) 2003-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_UNISTD_H + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if 1 +# include_next +#endif + +#ifndef _GL_UNISTD_H +#define _GL_UNISTD_H + +/* mingw doesn't define the SEEK_* or *_FILENO macros in . */ +#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) +# include +#endif + +/* mingw fails to declare _exit in . */ +/* mingw, BeOS, Haiku declare environ in , not in . */ +#include + +#if 0 && 0 && 0 +/* Get ssize_t. */ +# include +#endif + +#if 0 +/* Get all possible declarations of gethostname(). */ +# if 0 +# include +# if !defined _GL_SYS_SOCKET_H +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# endif +# if !defined _GL_SYS_SELECT_H +# undef select +# define select select_used_without_including_sys_select_h +# endif +# endif +#endif + +/* The definition of GL_LINK_WARNING is copied here. */ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Declare overridden functions. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#if 0 +# if 0 +# ifndef REPLACE_CHOWN +# define REPLACE_CHOWN 1 +# endif +# if REPLACE_CHOWN +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define chown rpl_chown +extern int chown (const char *file, uid_t uid, gid_t gid); +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef chown +# define chown(f,u,g) \ + (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \ + "doesn't treat a uid or gid of -1 on some systems - " \ + "use gnulib module chown for portability"), \ + chown (f, u, g)) +#endif + + +#if 0 +# if 0 +/* Automatically included by modules that need a replacement for close. */ +# undef close +# define close rpl_close +extern int close (int); +# endif +#elif 0 +# undef close +# define close close_used_without_requesting_gnulib_module_close +#elif defined GNULIB_POSIXCHECK +# undef close +# define close(f) \ + (GL_LINK_WARNING ("close does not portably work on sockets - " \ + "use gnulib module close for portability"), \ + close (f)) +#endif + + +#if 0 +# if !1 +/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if + NEWFD = OLDFD, otherwise close NEWFD first if it is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int dup2 (int oldfd, int newfd); +# endif +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# define dup2(o,n) \ + (GL_LINK_WARNING ("dup2 is unportable - " \ + "use gnulib module dup2 for portability"), \ + dup2 (o, n)) +#endif + + +#if 1 +# if !1 +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include +# define environ (*_NSGetEnviron ()) +# else +extern char **environ; +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef environ +# define environ \ + (GL_LINK_WARNING ("environ is unportable - " \ + "use gnulib module environ for portability"), \ + environ) +#endif + + +#if 0 +# if !1 +/* Like access(), except that is uses the effective user id and group id of + the current process. */ +extern int euidaccess (const char *filename, int mode); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# define euidaccess(f,m) \ + (GL_LINK_WARNING ("euidaccess is unportable - " \ + "use gnulib module euidaccess for portability"), \ + euidaccess (f, m)) +#endif + + +#if 0 +# if 0 + +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int fchdir (int /*fd*/); + +# define dup rpl_dup +extern int dup (int); +# define dup2 rpl_dup2 +extern int dup2 (int, int); + +# endif +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# define fchdir(f) \ + (GL_LINK_WARNING ("fchdir is unportable - " \ + "use gnulib module fchdir for portability"), \ + fchdir (f)) +#endif + + +#if 0 +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2001 specification + . */ +# if !1 +extern int fsync (int fd); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fsync +# define fsync(fd) \ + (GL_LINK_WARNING ("fsync is unportable - " \ + "use gnulib module fsync for portability"), \ + fsync (fd)) +#endif + + +#if 0 +# if !1 +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int ftruncate (int fd, off_t length); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# define ftruncate(f,l) \ + (GL_LINK_WARNING ("ftruncate is unportable - " \ + "use gnulib module ftruncate for portability"), \ + ftruncate (f, l)) +#endif + + +#if 0 +/* Include the headers that might declare getcwd so that they will not + cause confusion if included after this file. */ +# include +# if 0 +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2001 specification + . + Additionally, the gnulib module 'getcwd' guarantees the following GNU + extension: If BUF is NULL, an array is allocated with 'malloc'; the array + is SIZE bytes long, unless SIZE == 0, in which case it is as big as + necessary. */ +# define getcwd rpl_getcwd +extern char * getcwd (char *buf, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# define getcwd(b,s) \ + (GL_LINK_WARNING ("getcwd is unportable - " \ + "use gnulib module getcwd for portability"), \ + getcwd (b, s)) +#endif + + +#if 0 +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if !1 +extern int getdomainname(char *name, size_t len); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# define getdomainname(n,l) \ + (GL_LINK_WARNING ("getdomainname is unportable - " \ + "use gnulib module getdomainname for portability"), \ + getdomainname (n, l)) +#endif + + +#if 1 +# if !1 +/* Return the maximum number of file descriptors in the current process. */ +extern int getdtablesize (void); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# define getdtablesize() \ + (GL_LINK_WARNING ("getdtablesize is unportable - " \ + "use gnulib module getdtablesize for portability"), \ + getdtablesize ()) +#endif + + +#if 0 +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if 0 +# undef gethostname +# define gethostname rpl_gethostname +# endif +# if 0 || !1 +extern int gethostname(char *name, size_t len); +# endif +#elif 0 +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# define gethostname(n,l) \ + (GL_LINK_WARNING ("gethostname is unportable - " \ + "use gnulib module gethostname for portability"), \ + gethostname (n, l)) +#endif + + +#if 0 +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See . + */ +# if !1 +# include +extern int getlogin_r (char *name, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# define getlogin_r(n,s) \ + (GL_LINK_WARNING ("getlogin_r is unportable - " \ + "use gnulib module getlogin_r for portability"), \ + getlogin_r (n, s)) +#endif + + +#if 0 +# if 0 +# define getpagesize rpl_getpagesize +extern int getpagesize (void); +# elif !1 +/* This is for POSIX systems. */ +# if !defined getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined getpagesize && defined __VMS +# ifdef __ALPHA +# define getpagesize() 8192 +# else +# define getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined getpagesize && 0 +# include +# if defined B_PAGE_SIZE +# define getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined getpagesize && defined __amigaos4__ +# define getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined getpagesize && 0 +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define getpagesize() NBPC +# endif +# endif +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# define getpagesize() \ + (GL_LINK_WARNING ("getpagesize is unportable - " \ + "use gnulib module getpagesize for portability"), \ + getpagesize ()) +#endif + + +#if 0 +# if !1 +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +extern char *getusershell (void); +/* Rewind to pointer that is advanced at each getusershell() call. */ +extern void setusershell (void); +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +extern void endusershell (void); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# define getusershell() \ + (GL_LINK_WARNING ("getusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + getusershell ()) +# undef setusershell +# define setusershell() \ + (GL_LINK_WARNING ("setusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + setusershell ()) +# undef endusershell +# define endusershell() \ + (GL_LINK_WARNING ("endusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + endusershell ()) +#endif + + +#if 0 +# if 0 +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define lchown rpl_lchown +extern int lchown (char const *file, uid_t owner, gid_t group); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lchown +# define lchown(f,u,g) \ + (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \ + "systems - use gnulib module lchown for portability"), \ + lchown (f, u, g)) +#endif + + +#if 0 +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2001 specification + . */ +# if !1 +extern int link (const char *path1, const char *path2); +# endif +#elif defined GNULIB_POSIXCHECK +# undef link +# define link(path1,path2) \ + (GL_LINK_WARNING ("link is unportable - " \ + "use gnulib module link for portability"), \ + link (path1, path2)) +#endif + + +#if 1 +# if 0 +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define lseek rpl_lseek + extern off_t lseek (int fd, off_t offset, int whence); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lseek +# define lseek(f,o,w) \ + (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \ + "systems - use gnulib module lseek for portability"), \ + lseek (f, o, w)) +#endif + + +#if 0 +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# if !1 +# include +extern int readlink (const char *file, char *buf, size_t bufsize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef readlink +# define readlink(f,b,s) \ + (GL_LINK_WARNING ("readlink is unportable - " \ + "use gnulib module readlink for portability"), \ + readlink (f, b, s)) +#endif + + +#if 0 +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2001 specification + . */ +# if !1 +extern unsigned int sleep (unsigned int n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sleep +# define sleep(n) \ + (GL_LINK_WARNING ("sleep is unportable - " \ + "use gnulib module sleep for portability"), \ + sleep (n)) +#endif + + +#if 0 && 0 && 0 +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2001 specification + . */ +# undef write +# define write rpl_write +extern ssize_t write (int fd, const void *buf, size_t count); +#endif + + +#ifdef FCHDIR_REPLACEMENT +/* gnulib internal function. */ +extern void _gl_unregister_fd (int fd); +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _GL_UNISTD_H */ +#endif /* _GL_UNISTD_H */ diff --git a/coreseek/m4-1.4.13/lib/unistd.in.h b/coreseek/m4-1.4.13/lib/unistd.in.h new file mode 100644 index 0000000..fa8d84a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/unistd.in.h @@ -0,0 +1,578 @@ +/* Substitute for and wrapper around . + Copyright (C) 2003-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_UNISTD_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_UNISTD_H@ +# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ +#endif + +#ifndef _GL_UNISTD_H +#define _GL_UNISTD_H + +/* mingw doesn't define the SEEK_* or *_FILENO macros in . */ +#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) +# include +#endif + +/* mingw fails to declare _exit in . */ +/* mingw, BeOS, Haiku declare environ in , not in . */ +#include + +#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@ +/* Get ssize_t. */ +# include +#endif + +#if @GNULIB_GETHOSTNAME@ +/* Get all possible declarations of gethostname(). */ +# if @UNISTD_H_HAVE_WINSOCK2_H@ +# include +# if !defined _GL_SYS_SOCKET_H +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# endif +# if !defined _GL_SYS_SELECT_H +# undef select +# define select select_used_without_including_sys_select_h +# endif +# endif +#endif + +/* The definition of GL_LINK_WARNING is copied here. */ + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Declare overridden functions. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_CHOWN@ +# if @REPLACE_CHOWN@ +# ifndef REPLACE_CHOWN +# define REPLACE_CHOWN 1 +# endif +# if REPLACE_CHOWN +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define chown rpl_chown +extern int chown (const char *file, uid_t uid, gid_t gid); +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef chown +# define chown(f,u,g) \ + (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \ + "doesn't treat a uid or gid of -1 on some systems - " \ + "use gnulib module chown for portability"), \ + chown (f, u, g)) +#endif + + +#if @GNULIB_CLOSE@ +# if @REPLACE_CLOSE@ +/* Automatically included by modules that need a replacement for close. */ +# undef close +# define close rpl_close +extern int close (int); +# endif +#elif @UNISTD_H_HAVE_WINSOCK2_H@ +# undef close +# define close close_used_without_requesting_gnulib_module_close +#elif defined GNULIB_POSIXCHECK +# undef close +# define close(f) \ + (GL_LINK_WARNING ("close does not portably work on sockets - " \ + "use gnulib module close for portability"), \ + close (f)) +#endif + + +#if @GNULIB_DUP2@ +# if !@HAVE_DUP2@ +/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if + NEWFD = OLDFD, otherwise close NEWFD first if it is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int dup2 (int oldfd, int newfd); +# endif +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# define dup2(o,n) \ + (GL_LINK_WARNING ("dup2 is unportable - " \ + "use gnulib module dup2 for portability"), \ + dup2 (o, n)) +#endif + + +#if @GNULIB_ENVIRON@ +# if !@HAVE_DECL_ENVIRON@ +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include +# define environ (*_NSGetEnviron ()) +# else +extern char **environ; +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef environ +# define environ \ + (GL_LINK_WARNING ("environ is unportable - " \ + "use gnulib module environ for portability"), \ + environ) +#endif + + +#if @GNULIB_EUIDACCESS@ +# if !@HAVE_EUIDACCESS@ +/* Like access(), except that is uses the effective user id and group id of + the current process. */ +extern int euidaccess (const char *filename, int mode); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# define euidaccess(f,m) \ + (GL_LINK_WARNING ("euidaccess is unportable - " \ + "use gnulib module euidaccess for portability"), \ + euidaccess (f, m)) +#endif + + +#if @GNULIB_FCHDIR@ +# if @REPLACE_FCHDIR@ + +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int fchdir (int /*fd*/); + +# define dup rpl_dup +extern int dup (int); +# define dup2 rpl_dup2 +extern int dup2 (int, int); + +# endif +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# define fchdir(f) \ + (GL_LINK_WARNING ("fchdir is unportable - " \ + "use gnulib module fchdir for portability"), \ + fchdir (f)) +#endif + + +#if @GNULIB_FSYNC@ +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2001 specification + . */ +# if !@HAVE_FSYNC@ +extern int fsync (int fd); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fsync +# define fsync(fd) \ + (GL_LINK_WARNING ("fsync is unportable - " \ + "use gnulib module fsync for portability"), \ + fsync (fd)) +#endif + + +#if @GNULIB_FTRUNCATE@ +# if !@HAVE_FTRUNCATE@ +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int ftruncate (int fd, off_t length); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# define ftruncate(f,l) \ + (GL_LINK_WARNING ("ftruncate is unportable - " \ + "use gnulib module ftruncate for portability"), \ + ftruncate (f, l)) +#endif + + +#if @GNULIB_GETCWD@ +/* Include the headers that might declare getcwd so that they will not + cause confusion if included after this file. */ +# include +# if @REPLACE_GETCWD@ +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2001 specification + . + Additionally, the gnulib module 'getcwd' guarantees the following GNU + extension: If BUF is NULL, an array is allocated with 'malloc'; the array + is SIZE bytes long, unless SIZE == 0, in which case it is as big as + necessary. */ +# define getcwd rpl_getcwd +extern char * getcwd (char *buf, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# define getcwd(b,s) \ + (GL_LINK_WARNING ("getcwd is unportable - " \ + "use gnulib module getcwd for portability"), \ + getcwd (b, s)) +#endif + + +#if @GNULIB_GETDOMAINNAME@ +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if !@HAVE_GETDOMAINNAME@ +extern int getdomainname(char *name, size_t len); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# define getdomainname(n,l) \ + (GL_LINK_WARNING ("getdomainname is unportable - " \ + "use gnulib module getdomainname for portability"), \ + getdomainname (n, l)) +#endif + + +#if @GNULIB_GETDTABLESIZE@ +# if !@HAVE_GETDTABLESIZE@ +/* Return the maximum number of file descriptors in the current process. */ +extern int getdtablesize (void); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# define getdtablesize() \ + (GL_LINK_WARNING ("getdtablesize is unportable - " \ + "use gnulib module getdtablesize for portability"), \ + getdtablesize ()) +#endif + + +#if @GNULIB_GETHOSTNAME@ +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if @UNISTD_H_HAVE_WINSOCK2_H@ +# undef gethostname +# define gethostname rpl_gethostname +# endif +# if @UNISTD_H_HAVE_WINSOCK2_H@ || !@HAVE_GETHOSTNAME@ +extern int gethostname(char *name, size_t len); +# endif +#elif @UNISTD_H_HAVE_WINSOCK2_H@ +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# define gethostname(n,l) \ + (GL_LINK_WARNING ("gethostname is unportable - " \ + "use gnulib module gethostname for portability"), \ + gethostname (n, l)) +#endif + + +#if @GNULIB_GETLOGIN_R@ +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See . + */ +# if !@HAVE_DECL_GETLOGIN_R@ +# include +extern int getlogin_r (char *name, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# define getlogin_r(n,s) \ + (GL_LINK_WARNING ("getlogin_r is unportable - " \ + "use gnulib module getlogin_r for portability"), \ + getlogin_r (n, s)) +#endif + + +#if @GNULIB_GETPAGESIZE@ +# if @REPLACE_GETPAGESIZE@ +# define getpagesize rpl_getpagesize +extern int getpagesize (void); +# elif !@HAVE_GETPAGESIZE@ +/* This is for POSIX systems. */ +# if !defined getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined getpagesize && defined __VMS +# ifdef __ALPHA +# define getpagesize() 8192 +# else +# define getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined getpagesize && @HAVE_OS_H@ +# include +# if defined B_PAGE_SIZE +# define getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined getpagesize && defined __amigaos4__ +# define getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined getpagesize && @HAVE_SYS_PARAM_H@ +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define getpagesize() NBPC +# endif +# endif +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# define getpagesize() \ + (GL_LINK_WARNING ("getpagesize is unportable - " \ + "use gnulib module getpagesize for portability"), \ + getpagesize ()) +#endif + + +#if @GNULIB_GETUSERSHELL@ +# if !@HAVE_GETUSERSHELL@ +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +extern char *getusershell (void); +/* Rewind to pointer that is advanced at each getusershell() call. */ +extern void setusershell (void); +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +extern void endusershell (void); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# define getusershell() \ + (GL_LINK_WARNING ("getusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + getusershell ()) +# undef setusershell +# define setusershell() \ + (GL_LINK_WARNING ("setusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + setusershell ()) +# undef endusershell +# define endusershell() \ + (GL_LINK_WARNING ("endusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + endusershell ()) +#endif + + +#if @GNULIB_LCHOWN@ +# if @REPLACE_LCHOWN@ +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define lchown rpl_lchown +extern int lchown (char const *file, uid_t owner, gid_t group); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lchown +# define lchown(f,u,g) \ + (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \ + "systems - use gnulib module lchown for portability"), \ + lchown (f, u, g)) +#endif + + +#if @GNULIB_LINK@ +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2001 specification + . */ +# if !@HAVE_LINK@ +extern int link (const char *path1, const char *path2); +# endif +#elif defined GNULIB_POSIXCHECK +# undef link +# define link(path1,path2) \ + (GL_LINK_WARNING ("link is unportable - " \ + "use gnulib module link for portability"), \ + link (path1, path2)) +#endif + + +#if @GNULIB_LSEEK@ +# if @REPLACE_LSEEK@ +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define lseek rpl_lseek + extern off_t lseek (int fd, off_t offset, int whence); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lseek +# define lseek(f,o,w) \ + (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \ + "systems - use gnulib module lseek for portability"), \ + lseek (f, o, w)) +#endif + + +#if @GNULIB_READLINK@ +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# if !@HAVE_READLINK@ +# include +extern int readlink (const char *file, char *buf, size_t bufsize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef readlink +# define readlink(f,b,s) \ + (GL_LINK_WARNING ("readlink is unportable - " \ + "use gnulib module readlink for portability"), \ + readlink (f, b, s)) +#endif + + +#if @GNULIB_SLEEP@ +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2001 specification + . */ +# if !@HAVE_SLEEP@ +extern unsigned int sleep (unsigned int n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sleep +# define sleep(n) \ + (GL_LINK_WARNING ("sleep is unportable - " \ + "use gnulib module sleep for portability"), \ + sleep (n)) +#endif + + +#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@ +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2001 specification + . */ +# undef write +# define write rpl_write +extern ssize_t write (int fd, const void *buf, size_t count); +#endif + + +#ifdef FCHDIR_REPLACEMENT +/* gnulib internal function. */ +extern void _gl_unregister_fd (int fd); +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _GL_UNISTD_H */ +#endif /* _GL_UNISTD_H */ diff --git a/coreseek/m4-1.4.13/lib/unlocked-io.h b/coreseek/m4-1.4.13/lib/unlocked-io.h new file mode 100644 index 0000000..6b2939e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/unlocked-io.h @@ -0,0 +1,136 @@ +/* Prefer faster, non-thread-safe stdio functions if available. + + Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#ifndef UNLOCKED_IO_H +# define UNLOCKED_IO_H 1 + +/* These are wrappers for functions/macros from the GNU C library, and + from other C libraries supporting POSIX's optional thread-safe functions. + + The standard I/O functions are thread-safe. These *_unlocked ones are + more efficient but not thread-safe. That they're not thread-safe is + fine since all of the applications in this package are single threaded. + + Also, some code that is shared with the GNU C library may invoke + the *_unlocked functions directly. On hosts that lack those + functions, invoke the non-thread-safe versions instead. */ + +# include + +# if HAVE_DECL_CLEARERR_UNLOCKED +# undef clearerr +# define clearerr(x) clearerr_unlocked (x) +# else +# define clearerr_unlocked(x) clearerr (x) +# endif + +# if HAVE_DECL_FEOF_UNLOCKED +# undef feof +# define feof(x) feof_unlocked (x) +# else +# define feof_unlocked(x) feof (x) +# endif + +# if HAVE_DECL_FERROR_UNLOCKED +# undef ferror +# define ferror(x) ferror_unlocked (x) +# else +# define ferror_unlocked(x) ferror (x) +# endif + +# if HAVE_DECL_FFLUSH_UNLOCKED +# undef fflush +# define fflush(x) fflush_unlocked (x) +# else +# define fflush_unlocked(x) fflush (x) +# endif + +# if HAVE_DECL_FGETS_UNLOCKED +# undef fgets +# define fgets(x,y,z) fgets_unlocked (x,y,z) +# else +# define fgets_unlocked(x,y,z) fgets (x,y,z) +# endif + +# if HAVE_DECL_FPUTC_UNLOCKED +# undef fputc +# define fputc(x,y) fputc_unlocked (x,y) +# else +# define fputc_unlocked(x,y) fputc (x,y) +# endif + +# if HAVE_DECL_FPUTS_UNLOCKED +# undef fputs +# define fputs(x,y) fputs_unlocked (x,y) +# else +# define fputs_unlocked(x,y) fputs (x,y) +# endif + +# if HAVE_DECL_FREAD_UNLOCKED +# undef fread +# define fread(w,x,y,z) fread_unlocked (w,x,y,z) +# else +# define fread_unlocked(w,x,y,z) fread (w,x,y,z) +# endif + +# if HAVE_DECL_FWRITE_UNLOCKED +# undef fwrite +# define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z) +# else +# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) +# endif + +# if HAVE_DECL_GETC_UNLOCKED +# undef getc +# define getc(x) getc_unlocked (x) +# else +# define getc_unlocked(x) getc (x) +# endif + +# if HAVE_DECL_GETCHAR_UNLOCKED +# undef getchar +# define getchar() getchar_unlocked () +# else +# define getchar_unlocked() getchar () +# endif + +# if HAVE_DECL_PUTC_UNLOCKED +# undef putc +# define putc(x,y) putc_unlocked (x,y) +# else +# define putc_unlocked(x,y) putc (x,y) +# endif + +# if HAVE_DECL_PUTCHAR_UNLOCKED +# undef putchar +# define putchar(x) putchar_unlocked (x) +# else +# define putchar_unlocked(x) putchar (x) +# endif + +# undef flockfile +# define flockfile(x) ((void) 0) + +# undef ftrylockfile +# define ftrylockfile(x) 0 + +# undef funlockfile +# define funlockfile(x) ((void) 0) + +#endif /* UNLOCKED_IO_H */ diff --git a/coreseek/m4-1.4.13/lib/vasnprintf.c b/coreseek/m4-1.4.13/lib/vasnprintf.c new file mode 100644 index 0000000..a583ebd --- /dev/null +++ b/coreseek/m4-1.4.13/lib/vasnprintf.c @@ -0,0 +1,5489 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 1999, 2002-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* This file can be parametrized with the following macros: + VASNPRINTF The name of the function being defined. + FCHAR_T The element type of the format string. + DCHAR_T The element type of the destination (result) string. + FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. MUST be set if + FCHAR_T and DCHAR_T are not the same type. + DIRECTIVE Structure denoting a format directive. + Depends on FCHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on FCHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on FCHAR_T. + DCHAR_CPY memcpy like function for DCHAR_T[] arrays. + DCHAR_SET memset like function for DCHAR_T[] arrays. + DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. + SNPRINTF The system's snprintf (or similar) function. + This may be either snprintf or swprintf. + TCHAR_T The element type of the argument and result string + of the said SNPRINTF function. This may be either + char or wchar_t. The code exploits that + sizeof (TCHAR_T) | sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). + DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. + DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. + DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. + DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. + DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifndef VASNPRINTF +# include +#endif +#ifndef IN_LIBINTL +# include +#endif + +/* Specification. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "vasnwprintf.h" +# else +# include "vasnprintf.h" +# endif +#endif + +#include /* localeconv() */ +#include /* snprintf(), sprintf() */ +#include /* abort(), malloc(), realloc(), free() */ +#include /* memcpy(), strlen() */ +#include /* errno */ +#include /* CHAR_BIT */ +#include /* DBL_MAX_EXP, LDBL_MAX_EXP */ +#if HAVE_NL_LANGINFO +# include +#endif +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "wprintf-parse.h" +# else +# include "printf-parse.h" +# endif +#endif + +/* Checked size_t computations. */ +#include "xsize.h" + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "float+.h" +#endif + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnand-nolibm.h" +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnanl-nolibm.h" +# include "fpucw.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnand-nolibm.h" +# include "printf-frexp.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnanl-nolibm.h" +# include "printf-frexpl.h" +# include "fpucw.h" +#endif + +/* Default parameters. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# define VASNPRINTF vasnwprintf +# define FCHAR_T wchar_t +# define DCHAR_T wchar_t +# define TCHAR_T wchar_t +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE wchar_t_directive +# define DIRECTIVES wchar_t_directives +# define PRINTF_PARSE wprintf_parse +# define DCHAR_CPY wmemcpy +# define DCHAR_SET wmemset +# else +# define VASNPRINTF vasnprintf +# define FCHAR_T char +# define DCHAR_T char +# define TCHAR_T char +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +# define PRINTF_PARSE printf_parse +# define DCHAR_CPY memcpy +# define DCHAR_SET memset +# endif +#endif +#if WIDE_CHAR_VERSION + /* TCHAR_T is wchar_t. */ +# define USE_SNPRINTF 1 +# if HAVE_DECL__SNWPRINTF + /* On Windows, the function swprintf() has a different signature than + on Unix; we use the _snwprintf() function instead. */ +# define SNPRINTF _snwprintf +# else + /* Unix. */ +# define SNPRINTF swprintf +# endif +#else + /* TCHAR_T is char. */ + /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. + But don't use it on BeOS, since BeOS snprintf produces no output if the + size argument is >= 0x3000000. + Also don't use it on Linux libc5, since there snprintf with size = 1 + writes any output without bounds, like sprintf. */ +# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) +# define USE_SNPRINTF 1 +# else +# define USE_SNPRINTF 0 +# endif +# if HAVE_DECL__SNPRINTF + /* Windows. */ +# define SNPRINTF _snprintf +# else + /* Unix. */ +# define SNPRINTF snprintf + /* Here we need to call the native snprintf, not rpl_snprintf. */ +# undef snprintf +# endif +#endif +/* Here we need to call the native sprintf, not rpl_sprintf. */ +#undef sprintf + +/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" + warnings in this file. Use -Dlint to suppress them. */ +#ifdef lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif + +/* Avoid some warnings from "gcc -Wshadow". + This file doesn't use the exp() and remainder() functions. */ +#undef exp +#define exp expo +#undef remainder +#define remainder rem + +#if !USE_SNPRINTF && !WIDE_CHAR_VERSION +# if (HAVE_STRNLEN && !defined _AIX) +# define local_strnlen strnlen +# else +# ifndef local_strnlen_defined +# define local_strnlen_defined 1 +static size_t +local_strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} +# endif +# endif +#endif + +#if (!USE_SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T && (WIDE_CHAR_VERSION || DCHAR_IS_TCHAR) +# if HAVE_WCSLEN +# define local_wcslen wcslen +# else + /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid + a dependency towards this library, here is a local substitute. + Define this substitute only once, even if this file is included + twice in the same compilation unit. */ +# ifndef local_wcslen_defined +# define local_wcslen_defined 1 +static size_t +local_wcslen (const wchar_t *s) +{ + const wchar_t *ptr; + + for (ptr = s; *ptr != (wchar_t) 0; ptr++) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if !USE_SNPRINTF && HAVE_WCHAR_T && WIDE_CHAR_VERSION +# if HAVE_WCSNLEN +# define local_wcsnlen wcsnlen +# else +# ifndef local_wcsnlen_defined +# define local_wcsnlen_defined 1 +static size_t +local_wcsnlen (const wchar_t *s, size_t maxlen) +{ + const wchar_t *ptr; + + for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +/* Determine the decimal-point character according to the current locale. */ +# ifndef decimal_point_char_defined +# define decimal_point_char_defined 1 +static char +decimal_point_char () +{ + const char *point; + /* Determine it in a multithread-safe way. We know nl_langinfo is + multithread-safe on glibc systems, but is not required to be multithread- + safe by POSIX. sprintf(), however, is multithread-safe. localeconv() + is rarely multithread-safe. */ +# if HAVE_NL_LANGINFO && __GLIBC__ + point = nl_langinfo (RADIXCHAR); +# elif 1 + char pointbuf[5]; + sprintf (pointbuf, "%#.0f", 1.0); + point = &pointbuf[1]; +# else + point = localeconv () -> decimal_point; +# endif + /* The decimal point is always a single byte: either '.' or ','. */ + return (point[0] != '\0' ? point[0] : '.'); +} +# endif +#endif + +#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zero (double x) +{ + return isnand (x) || x + x == x; +} + +#endif + +#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zerol (long double x) +{ + return isnanl (x) || x + x == x; +} + +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + +/* Converting 'long double' to decimal without rare rounding bugs requires + real bignums. We use the naming conventions of GNU gmp, but vastly simpler + (and slower) algorithms. */ + +typedef unsigned int mp_limb_t; +# define GMP_LIMB_BITS 32 +typedef int mp_limb_verify[2 * (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS) - 1]; + +typedef unsigned long long mp_twolimb_t; +# define GMP_TWOLIMB_BITS 64 +typedef int mp_twolimb_verify[2 * (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS) - 1]; + +/* Representation of a bignum >= 0. */ +typedef struct +{ + size_t nlimbs; + mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ +} mpn_t; + +/* Compute the product of two bignums >= 0. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +multiply (mpn_t src1, mpn_t src2, mpn_t *dest) +{ + const mp_limb_t *p1; + const mp_limb_t *p2; + size_t len1; + size_t len2; + + if (src1.nlimbs <= src2.nlimbs) + { + len1 = src1.nlimbs; + p1 = src1.limbs; + len2 = src2.nlimbs; + p2 = src2.limbs; + } + else + { + len1 = src2.nlimbs; + p1 = src2.limbs; + len2 = src1.nlimbs; + p2 = src1.limbs; + } + /* Now 0 <= len1 <= len2. */ + if (len1 == 0) + { + /* src1 or src2 is zero. */ + dest->nlimbs = 0; + dest->limbs = (mp_limb_t *) malloc (1); + } + else + { + /* Here 1 <= len1 <= len2. */ + size_t dlen; + mp_limb_t *dp; + size_t k, i, j; + + dlen = len1 + len2; + dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); + if (dp == NULL) + return NULL; + for (k = len2; k > 0; ) + dp[--k] = 0; + for (i = 0; i < len1; i++) + { + mp_limb_t digit1 = p1[i]; + mp_twolimb_t carry = 0; + for (j = 0; j < len2; j++) + { + mp_limb_t digit2 = p2[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + carry += dp[i + j]; + dp[i + j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + dp[i + len2] = (mp_limb_t) carry; + } + /* Normalise. */ + while (dlen > 0 && dp[dlen - 1] == 0) + dlen--; + dest->nlimbs = dlen; + dest->limbs = dp; + } + return dest->limbs; +} + +/* Compute the quotient of a bignum a >= 0 and a bignum b > 0. + a is written as a = q * b + r with 0 <= r < b. q is the quotient, r + the remainder. + Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, + q is incremented. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +divide (mpn_t a, mpn_t b, mpn_t *q) +{ + /* Algorithm: + First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] + with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). + If m=n=1, perform a single-precision division: + r:=0, j:=m, + while j>0 do + {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = + = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: + We have a/b < beta^(m-n+1). + s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. + For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} + Compute q* : + q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). + In case of overflow (q* >= beta) set q* := beta-1. + Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] + and c3 := b[n-2] * q*. + {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow + occurred. Furthermore 0 <= c3 < beta^2. + If there was overflow and + r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, + the next test can be skipped.} + While c3 > c2, {Here 0 <= c2 < c3 < beta^2} + Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. + If q* > 0: + Put r := r - b * q* * beta^j. In detail: + [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. + hence: u:=0, for i:=0 to n-1 do + u := u + q* * b[i], + r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), + u:=u div beta (+ 1, if carry in subtraction) + r[n+j]:=r[n+j]-u. + {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 + < q* + 1 <= beta, + the carry u does not overflow.} + If a negative carry occurs, put q* := q* - 1 + and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. + Set q[j] := q*. + Normalise [q[m-n],..,q[0]]; this yields the quotient q. + Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the + rest r. + The room for q[j] can be allocated at the memory location of r[n+j]. + Finally, round-to-even: + Shift r left by 1 bit. + If r > b or if r = b and q[0] is odd, q := q+1. + */ + const mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + const mp_limb_t *b_ptr = b.limbs; + size_t b_len = b.nlimbs; + mp_limb_t *roomptr; + mp_limb_t *tmp_roomptr = NULL; + mp_limb_t *q_ptr; + size_t q_len; + mp_limb_t *r_ptr; + size_t r_len; + + /* Allocate room for a_len+2 digits. + (Need a_len+1 digits for the real division and 1 more digit for the + final rounding of q.) */ + roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); + if (roomptr == NULL) + return NULL; + + /* Normalise a. */ + while (a_len > 0 && a_ptr[a_len - 1] == 0) + a_len--; + + /* Normalise b. */ + for (;;) + { + if (b_len == 0) + /* Division by zero. */ + abort (); + if (b_ptr[b_len - 1] == 0) + b_len--; + else + break; + } + + /* Here m = a_len >= 0 and n = b_len > 0. */ + + if (a_len < b_len) + { + /* m beta^(m-2) <= a/b < beta^m */ + r_ptr = roomptr; + q_ptr = roomptr + 1; + { + mp_limb_t den = b_ptr[0]; + mp_limb_t remainder = 0; + const mp_limb_t *sourceptr = a_ptr + a_len; + mp_limb_t *destptr = q_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; + *--destptr = num / den; + remainder = num % den; + } + /* Normalise and store r. */ + if (remainder > 0) + { + r_ptr[0] = remainder; + r_len = 1; + } + else + r_len = 0; + /* Normalise q. */ + q_len = a_len; + if (q_ptr[q_len - 1] == 0) + q_len--; + } + } + else + { + /* n>1: multiple precision division. + beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> + beta^(m-n-1) <= a/b < beta^(m-n+1). */ + /* Determine s. */ + size_t s; + { + mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ + s = 31; + if (msd >= 0x10000) + { + msd = msd >> 16; + s -= 16; + } + if (msd >= 0x100) + { + msd = msd >> 8; + s -= 8; + } + if (msd >= 0x10) + { + msd = msd >> 4; + s -= 4; + } + if (msd >= 0x4) + { + msd = msd >> 2; + s -= 2; + } + if (msd >= 0x2) + { + msd = msd >> 1; + s -= 1; + } + } + /* 0 <= s < GMP_LIMB_BITS. + Copy b, shifting it left by s bits. */ + if (s > 0) + { + tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); + if (tmp_roomptr == NULL) + { + free (roomptr); + return NULL; + } + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = tmp_roomptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + /* accu must be zero, since that was how s was determined. */ + if (accu != 0) + abort (); + } + b_ptr = tmp_roomptr; + } + /* Copy a, shifting it left by s bits, yields r. + Memory layout: + At the beginning: r = roomptr[0..a_len], + at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ + r_ptr = roomptr; + if (s == 0) + { + memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); + r_ptr[a_len] = 0; + } + else + { + const mp_limb_t *sourceptr = a_ptr; + mp_limb_t *destptr = r_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = a_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + *destptr++ = (mp_limb_t) accu; + } + q_ptr = roomptr + b_len; + q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ + { + size_t j = a_len - b_len; /* m-n */ + mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ + mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ + mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ + ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; + /* Division loop, traversed m-n+1 times. + j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ + for (;;) + { + mp_limb_t q_star; + mp_limb_t c1; + if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ + { + /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ + mp_twolimb_t num = + ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) + | r_ptr[j + b_len - 1]; + q_star = num / b_msd; + c1 = num % b_msd; + } + else + { + /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ + q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ + /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta + <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta + <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) + {<= beta !}. + If yes, jump directly to the subtraction loop. + (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta + <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ + if (r_ptr[j + b_len] > b_msd + || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) + /* r[j+n] >= b[n-1]+1 or + r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a + carry. */ + goto subtract; + } + /* q_star = q*, + c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by + b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 + this can happen only twice. */ + if (c3 > c2) + { + q_star = q_star - 1; /* q* := q* - 1 */ + if (c3 - c2 > b_msdd) + q_star = q_star - 1; /* q* := q* - 1 */ + } + } + if (q_star > 0) + subtract: + { + /* Subtract r := r - b * q* * beta^j. */ + mp_limb_t cr; + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_twolimb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + /* Here 0 <= carry <= q*. */ + carry = + carry + + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + + (mp_limb_t) ~(*destptr); + /* Here 0 <= carry <= beta*q* + beta-1. */ + *destptr++ = ~(mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; /* <= q* */ + } + cr = (mp_limb_t) carry; + } + /* Subtract cr from r_ptr[j + b_len], then forget about + r_ptr[j + b_len]. */ + if (cr > r_ptr[j + b_len]) + { + /* Subtraction gave a carry. */ + q_star = q_star - 1; /* q* := q* - 1 */ + /* Add b back. */ + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_limb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + mp_limb_t source1 = *sourceptr++; + mp_limb_t source2 = *destptr; + *destptr++ = source1 + source2 + carry; + carry = + (carry + ? source1 >= (mp_limb_t) ~source2 + : source1 > (mp_limb_t) ~source2); + } + } + /* Forget about the carry and about r[j+n]. */ + } + } + /* q* is determined. Store it as q[j]. */ + q_ptr[j] = q_star; + if (j == 0) + break; + j--; + } + } + r_len = b_len; + /* Normalise q. */ + if (q_ptr[q_len - 1] == 0) + q_len--; +# if 0 /* Not needed here, since we need r only to compare it with b/2, and + b is shifted left by s bits. */ + /* Shift r right by s bits. */ + if (s > 0) + { + mp_limb_t ptr = r_ptr + r_len; + mp_twolimb_t accu = 0; + size_t count; + for (count = r_len; count > 0; count--) + { + accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; + accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); + *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); + } + } +# endif + /* Normalise r. */ + while (r_len > 0 && r_ptr[r_len - 1] == 0) + r_len--; + } + /* Compare r << 1 with b. */ + if (r_len > b_len) + goto increment_q; + { + size_t i; + for (i = b_len;;) + { + mp_limb_t r_i = + (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) + | (i < r_len ? r_ptr[i] << 1 : 0); + mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); + if (r_i > b_i) + goto increment_q; + if (r_i < b_i) + goto keep_q; + if (i == 0) + break; + i--; + } + } + if (q_len > 0 && ((q_ptr[0] & 1) != 0)) + /* q is odd. */ + increment_q: + { + size_t i; + for (i = 0; i < q_len; i++) + if (++(q_ptr[i]) != 0) + goto keep_q; + q_ptr[q_len++] = 1; + } + keep_q: + if (tmp_roomptr != NULL) + free (tmp_roomptr); + q->limbs = q_ptr; + q->nlimbs = q_len; + return roomptr; +} + +/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal + representation. + Destroys the contents of a. + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +convert_to_decimal (mpn_t a, size_t extra_zeroes) +{ + mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ + size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); + char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); + if (c_ptr != NULL) + { + char *d_ptr = c_ptr; + for (; extra_zeroes > 0; extra_zeroes--) + *d_ptr++ = '0'; + while (a_len > 0) + { + /* Divide a by 10^9, in-place. */ + mp_limb_t remainder = 0; + mp_limb_t *ptr = a_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; + *ptr = num / 1000000000; + remainder = num % 1000000000; + } + /* Store the remainder as 9 decimal digits. */ + for (count = 9; count > 0; count--) + { + *d_ptr++ = '0' + (remainder % 10); + remainder = remainder / 10; + } + /* Normalize a. */ + if (a_ptr[a_len - 1] == 0) + a_len--; + } + /* Remove leading zeroes. */ + while (d_ptr > c_ptr && d_ptr[-1] == '0') + d_ptr--; + /* But keep at least one zero. */ + if (d_ptr == c_ptr) + *d_ptr++ = '0'; + /* Terminate the string. */ + *d_ptr = '\0'; + } + return c_ptr; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_long_double (long double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + long double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * LDBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * LDBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'long double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +#if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess + precision. */ + if (!(y == 0.0L)) + abort (); +#endif + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - LDBL_MANT_BIT; + return m.limbs; +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_double (double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * DBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * DBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } + if (!(y == 0.0)) + abort (); + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - DBL_MANT_BIT; + return m.limbs; +} + +# endif + +/* Assuming x = 2^e * m is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) +{ + int s; + size_t extra_zeroes; + unsigned int abs_n; + unsigned int abs_s; + mp_limb_t *pow5_ptr; + size_t pow5_len; + unsigned int s_limbs; + unsigned int s_bits; + mpn_t pow5; + mpn_t z; + void *z_memory; + char *digits; + + if (memory == NULL) + return NULL; + /* x = 2^e * m, hence + y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) + = round (2^s * 5^n * m). */ + s = e + n; + extra_zeroes = 0; + /* Factor out a common power of 10 if possible. */ + if (s > 0 && n > 0) + { + extra_zeroes = (s < n ? s : n); + s -= extra_zeroes; + n -= extra_zeroes; + } + /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. + Before converting to decimal, we need to compute + z = round (2^s * 5^n * m). */ + /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same + sign. 2.322 is slightly larger than log(5)/log(2). */ + abs_n = (n >= 0 ? n : -n); + abs_s = (s >= 0 ? s : -s); + pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + + abs_s / GMP_LIMB_BITS + 1) + * sizeof (mp_limb_t)); + if (pow5_ptr == NULL) + { + free (memory); + return NULL; + } + /* Initialize with 1. */ + pow5_ptr[0] = 1; + pow5_len = 1; + /* Multiply with 5^|n|. */ + if (abs_n > 0) + { + static mp_limb_t const small_pow5[13 + 1] = + { + 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, + 48828125, 244140625, 1220703125 + }; + unsigned int n13; + for (n13 = 0; n13 <= abs_n; n13 += 13) + { + mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; + size_t j; + mp_twolimb_t carry = 0; + for (j = 0; j < pow5_len; j++) + { + mp_limb_t digit2 = pow5_ptr[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + pow5_ptr[j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + if (carry > 0) + pow5_ptr[pow5_len++] = (mp_limb_t) carry; + } + } + s_limbs = abs_s / GMP_LIMB_BITS; + s_bits = abs_s % GMP_LIMB_BITS; + if (n >= 0 ? s >= 0 : s <= 0) + { + /* Multiply with 2^|s|. */ + if (s_bits > 0) + { + mp_limb_t *ptr = pow5_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = pow5_len; count > 0; count--) + { + accu += (mp_twolimb_t) *ptr << s_bits; + *ptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + { + *ptr = (mp_limb_t) accu; + pow5_len++; + } + } + if (s_limbs > 0) + { + size_t count; + for (count = pow5_len; count > 0;) + { + count--; + pow5_ptr[s_limbs + count] = pow5_ptr[count]; + } + for (count = s_limbs; count > 0;) + { + count--; + pow5_ptr[count] = 0; + } + pow5_len += s_limbs; + } + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* Multiply m with pow5. No division needed. */ + z_memory = multiply (m, pow5, &z); + } + else + { + /* Divide m by pow5 and round. */ + z_memory = divide (m, pow5, &z); + } + } + else + { + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* n >= 0, s < 0. + Multiply m with pow5, then divide by 2^|s|. */ + mpn_t numerator; + mpn_t denominator; + void *tmp_memory; + tmp_memory = multiply (m, pow5, &numerator); + if (tmp_memory == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + /* Construct 2^|s|. */ + { + mp_limb_t *ptr = pow5_ptr + pow5_len; + size_t i; + for (i = 0; i < s_limbs; i++) + ptr[i] = 0; + ptr[s_limbs] = (mp_limb_t) 1 << s_bits; + denominator.limbs = ptr; + denominator.nlimbs = s_limbs + 1; + } + z_memory = divide (numerator, denominator, &z); + free (tmp_memory); + } + else + { + /* n < 0, s > 0. + Multiply m with 2^s, then divide by pow5. */ + mpn_t numerator; + mp_limb_t *num_ptr; + num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) + * sizeof (mp_limb_t)); + if (num_ptr == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + { + mp_limb_t *destptr = num_ptr; + { + size_t i; + for (i = 0; i < s_limbs; i++) + *destptr++ = 0; + } + if (s_bits > 0) + { + const mp_limb_t *sourceptr = m.limbs; + mp_twolimb_t accu = 0; + size_t count; + for (count = m.nlimbs; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s_bits; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + *destptr++ = (mp_limb_t) accu; + } + else + { + const mp_limb_t *sourceptr = m.limbs; + size_t count; + for (count = m.nlimbs; count > 0; count--) + *destptr++ = *sourceptr++; + } + numerator.limbs = num_ptr; + numerator.nlimbs = destptr - num_ptr; + } + z_memory = divide (numerator, pow5, &z); + free (num_ptr); + } + } + free (pow5_ptr); + free (memory); + + /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ + + if (z_memory == NULL) + return NULL; + digits = convert_to_decimal (z, extra_zeroes); + free (z_memory); + return digits; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_long_double (long double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_long_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_double (double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10l (long double x) +{ + int exp; + long double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + if (y == 0.0L) + return INT_MIN; + if (y < 0.5L) + { + while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0L / (1 << 16))) + { + y *= 1.0L * (1 << 16); + exp -= 16; + } + if (y < (1.0L / (1 << 8))) + { + y *= 1.0L * (1 << 8); + exp -= 8; + } + if (y < (1.0L / (1 << 4))) + { + y *= 1.0L * (1 << 4); + exp -= 4; + } + if (y < (1.0L / (1 << 2))) + { + y *= 1.0L * (1 << 2); + exp -= 2; + } + if (y < (1.0L / (1 << 1))) + { + y *= 1.0L * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5L && y < 1.0L)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10 (double x) +{ + int exp; + double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + if (y == 0.0) + return INT_MIN; + if (y < 0.5) + { + while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0 / (1 << 16))) + { + y *= 1.0 * (1 << 16); + exp -= 16; + } + if (y < (1.0 / (1 << 8))) + { + y *= 1.0 * (1 << 8); + exp -= 8; + } + if (y < (1.0 / (1 << 4))) + { + y *= 1.0 * (1 << 4); + exp -= 4; + } + if (y < (1.0 / (1 << 2))) + { + y *= 1.0 * (1 << 2); + exp -= 2; + } + if (y < (1.0 / (1 << 1))) + { + y *= 1.0 * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5 && y < 1.0)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +/* Tests whether a string of digits consists of exactly PRECISION zeroes and + a single '1' digit. */ +static int +is_borderline (const char *digits, size_t precision) +{ + for (; precision > 0; precision--, digits++) + if (*digits != '0') + return 0; + if (*digits != '1') + return 0; + digits++; + return *digits == '\0'; +} + +#endif + +DCHAR_T * +VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, + const FCHAR_T *format, va_list args) +{ + DIRECTIVES d; + arguments a; + + if (PRINTF_PARSE (format, &d, &a) < 0) + /* errno is already set. */ + return NULL; + +#define CLEANUP() \ + free (d.dir); \ + if (a.arg) \ + free (a.arg); + + if (PRINTF_FETCHARGS (args, &a) < 0) + { + CLEANUP (); + errno = EINVAL; + return NULL; + } + + { + size_t buf_neededlength; + TCHAR_T *buf; + TCHAR_T *buf_malloced; + const FCHAR_T *cp; + size_t i; + DIRECTIVE *dp; + /* Output string accumulator. */ + DCHAR_T *result; + size_t allocated; + size_t length; + + /* Allocate a small buffer that will hold a directive passed to + sprintf or snprintf. */ + buf_neededlength = + xsum4 (7, d.max_width_length, d.max_precision_length, 6); +#if HAVE_ALLOCA + if (buf_neededlength < 4000 / sizeof (TCHAR_T)) + { + buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); + buf_malloced = NULL; + } + else +#endif + { + size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); + if (size_overflow_p (buf_memsize)) + goto out_of_memory_1; + buf = (TCHAR_T *) malloc (buf_memsize); + if (buf == NULL) + goto out_of_memory_1; + buf_malloced = buf; + } + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + /* Ensures that allocated >= needed. Aborts through a jump to + out_of_memory if needed is SIZE_MAX or otherwise too big. */ +#define ENSURE_ALLOCATION(needed) \ + if ((needed) > allocated) \ + { \ + size_t memory_size; \ + DCHAR_T *memory; \ + \ + allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ + if ((needed) > allocated) \ + allocated = (needed); \ + memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ + if (size_overflow_p (memory_size)) \ + goto out_of_memory; \ + if (result == resultbuf || result == NULL) \ + memory = (DCHAR_T *) malloc (memory_size); \ + else \ + memory = (DCHAR_T *) realloc (result, memory_size); \ + if (memory == NULL) \ + goto out_of_memory; \ + if (result == resultbuf && length > 0) \ + DCHAR_CPY (memory, result, length); \ + result = memory; \ + } + + for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) + { + if (cp != dp->dir_start) + { + size_t n = dp->dir_start - cp; + size_t augmented_length = xsum (length, n); + + ENSURE_ALLOCATION (augmented_length); + /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we + need that the format string contains only ASCII characters + if FCHAR_T and DCHAR_T are not the same type. */ + if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) + { + DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); + length = augmented_length; + } + else + { + do + result[length++] = (unsigned char) *cp++; + while (--n > 0); + } + } + if (i == d.count) + break; + + /* Execute a single directive. */ + if (dp->conversion == '%') + { + size_t augmented_length; + + if (!(dp->arg_index == ARG_NONE)) + abort (); + augmented_length = xsum (length, 1); + ENSURE_ALLOCATION (augmented_length); + result[length] = '%'; + length = augmented_length; + } + else + { + if (!(dp->arg_index != ARG_NONE)) + abort (); + + if (dp->conversion == 'n') + { + switch (a.arg[dp->arg_index].type) + { + case TYPE_COUNT_SCHAR_POINTER: + *a.arg[dp->arg_index].a.a_count_schar_pointer = length; + break; + case TYPE_COUNT_SHORT_POINTER: + *a.arg[dp->arg_index].a.a_count_short_pointer = length; + break; + case TYPE_COUNT_INT_POINTER: + *a.arg[dp->arg_index].a.a_count_int_pointer = length; + break; + case TYPE_COUNT_LONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longint_pointer = length; + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; + break; +#endif + default: + abort (); + } + } +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + else if (dp->conversion == 'U') + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + switch (type) + { + case TYPE_U8_STRING: + { + const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; + const uint8_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u8_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT8_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-8 to locale encoding. */ + if (u8_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + &converted, &converted_len) + < 0) +# else + /* Convert from UTF-8 to UTF-16/UTF-32. */ + converted = + U8_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); + if (converted == NULL) +# endif + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U16_STRING: + { + const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; + const uint16_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u16_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT16_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-16 to locale encoding. */ + if (u16_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + &converted, &converted_len) + < 0) +# else + /* Convert from UTF-16 to UTF-8/UTF-32. */ + converted = + U16_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); + if (converted == NULL) +# endif + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U32_STRING: + { + const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; + const uint32_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u32_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT32_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-32 to locale encoding. */ + if (u32_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + &converted, &converted_len) + < 0) +# else + /* Convert from UTF-32 to UTF-8/UTF-16. */ + converted = + U32_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); + if (converted == NULL) +# endif + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + default: + abort (); + } + } +#endif +#if (!USE_SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T + else if (dp->conversion == 's' +# if WIDE_CHAR_VERSION + && a.arg[dp->arg_index].type != TYPE_WIDE_STRING +# else + && a.arg[dp->arg_index].type == TYPE_WIDE_STRING +# endif + ) + { + /* The normal handling of the 's' directive below requires + allocating a temporary buffer. The determination of its + length (tmp_length), in the case when a precision is + specified, below requires a conversion between a char[] + string and a wchar_t[] wide string. It could be done, but + we have no guarantee that the implementation of sprintf will + use the exactly same algorithm. Without this guarantee, it + is possible to have buffer overrun bugs. In order to avoid + such bugs, we implement the entire processing of the 's' + directive ourselves. */ + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + +# if WIDE_CHAR_VERSION + /* %s in vasnwprintf. See the specification of fwprintf. */ + { + const char *arg = a.arg[dp->arg_index].a.a_string; + const char *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only as many bytes as needed to produce PRECISION + wide characters, from the left. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of wide + characters. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + + if (has_precision || has_width) + { + /* We know the number of wide characters in advance. */ + size_t remaining; +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; remaining--) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + result[length++] = wc; + arg += count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + ENSURE_ALLOCATION (xsum (length, 1)); + result[length++] = wc; + arg += count; + } + } + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } +# else + /* %ls in vasnprintf. See the specification of fprintf. */ + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + const wchar_t *arg_end; + size_t characters; +# if !DCHAR_IS_TCHAR + /* This code assumes that TCHAR_T is 'char'. */ + typedef int TCHAR_T_verify[2 * (sizeof (TCHAR_T) == 1) - 1]; + TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; +# endif + size_t w; + + if (has_precision) + { + /* Use only as many wide characters as needed to produce + at most PRECISION bytes, from the left. */ +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + while (precision > 0) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg_end, &state); +# else + count = wctomb (buf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + if (precision < count) + break; + arg_end++; + characters += count; + precision -= count; + } + } +# if DCHAR_IS_TCHAR + else if (has_width) +# else + else +# endif + { + /* Use the entire string, and count the number of + bytes. */ +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg_end, &state); +# else + count = wctomb (buf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end++; + characters += count; + } + } +# if DCHAR_IS_TCHAR + else + { + /* Use the entire string. */ + arg_end = arg + local_wcslen (arg); + /* The number of bytes doesn't matter. */ + characters = 0; + } +# endif + +# if !DCHAR_IS_TCHAR + /* Convert the string into a piece of temporary memory. */ + tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); + if (tmpsrc == NULL) + goto out_of_memory; + { + TCHAR_T *tmpptr = tmpsrc; + size_t remaining; +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + for (remaining = characters; remaining > 0; ) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg, &state); +# else + count = wctomb (buf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (tmpptr, buf, count); + tmpptr += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + tmpdst = NULL; + tmpdst_len = 0; + if (DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, characters, + NULL, + &tmpdst, &tmpdst_len) + < 0) + { + int saved_errno = errno; + free (tmpsrc); + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + free (tmpsrc); +# endif + + if (has_width) + { +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferrable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, characters); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = characters; +# endif + } + else + /* w doesn't matter. */ + w = 0; + + if (has_width && width > w + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_TCHAR + if (has_precision || has_width) + { + /* We know the number of bytes in advance. */ + size_t remaining; +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; ) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg, &state); +# else + count = wctomb (buf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (result + length, buf, count); + length += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg, &state); +# else + count = wctomb (buf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + ENSURE_ALLOCATION (xsum (length, count)); + memcpy (result + length, buf, count); + length += count; + arg++; + } + } +# else + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + length += tmpdst_len; +# endif + + if (has_width && width > w + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + } +# endif +#endif +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'a' || dp->conversion == 'A') +# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# endif + ) +# endif + ) + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* Allocate a temporary buffer of sufficient size. */ + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) ((LDBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) ((DBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + if (type == TYPE_LONGDOUBLE) + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + long double mantissa; + + if (arg > 0.0L) + mantissa = printf_frexpl (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0L; + } + + if (has_precision + && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + long double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5L : tail > 0.5L) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0L; + } + if (tail != 0.0L) + for (q = precision; q > 0; q--) + tail *= 0.0625L; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0L || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0L) + { + mantissa *= 16.0L; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } +# else + abort (); +# endif + } + else + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + double mantissa; + + if (arg > 0.0) + mantissa = printf_frexp (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0; + } + + if (has_precision + && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5 : tail > 0.5) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0; + } + if (tail != 0.0) + for (q = precision; q > 0; q--) + tail *= 0.0625; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0 || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0) + { + mantissa *= 16.0; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + } +# else + abort (); +# endif + } + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + if (has_width && p - tmp < width) + { + size_t pad = width - (p - tmp); + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + { + size_t count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } + } +#endif +#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'f' || dp->conversion == 'F' + || dp->conversion == 'e' || dp->conversion == 'E' + || dp->conversion == 'g' || dp->conversion == 'G' + || dp->conversion == 'a' || dp->conversion == 'A') + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# elif NEED_PRINTF_INFINITE_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_DOUBLE + /* The systems (mingw) which produce wrong output + for Inf, -Inf, and NaN also do so for -0.0. + Therefore we treat this case here as well. */ + && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# elif NEED_PRINTF_INFINITE_LONG_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE + /* Some systems produce wrong output for Inf, + -Inf, and NaN. Some systems in this category + (IRIX 5.3) also do so for -0.0. Therefore we + treat this case here as well. */ + && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) +# endif + )) + { +# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) + arg_type type = a.arg[dp->arg_index].type; +# endif + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* POSIX specifies the default precision to be 6 for %f, %F, + %e, %E, but not for %g, %G. Implementations appear to use + the same default precision also for %g, %G. But for %a, %A, + the default precision is 0. */ + if (!has_precision) + if (!(dp->conversion == 'a' || dp->conversion == 'A')) + precision = 6; + + /* Allocate a temporary buffer of sufficient size. */ +# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); +# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); +# elif NEED_PRINTF_LONG_DOUBLE + tmp_length = LDBL_DIG + 1; +# elif NEED_PRINTF_DOUBLE + tmp_length = DBL_DIG + 1; +# else + tmp_length = 0; +# endif + if (tmp_length < precision) + tmp_length = precision; +# if NEED_PRINTF_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + if (!(isnanl (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10l (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif +# if NEED_PRINTF_DOUBLE +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE + if (type == TYPE_DOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + double arg = a.arg[dp->arg_index].a.a_double; + if (!(isnand (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10 (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_LONG_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_long_double (arg, precision); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0L) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0L. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)precision - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0L) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0L. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t count = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; count > 0; count--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t count = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; count > 0; count--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0L)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else if (dp->conversion == 'a' || dp->conversion == 'A') + { + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion - 'A' + 'P'; + *p++ = '+'; + *p++ = '0'; + } + else + abort (); +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } + } +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + else +# endif +# endif +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + { + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_double (arg, precision); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)precision - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t count = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; count > 0; count--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t count = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; count > 0; count--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + /* Produce the same number of exponent digits as + the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + *p++ = '0'; +# endif + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else + abort (); +# endif + } + } + } +# endif + + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + if (has_width && p - tmp < width) + { + size_t pad = width - (p - tmp); + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + { + size_t count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } + } +#endif + else + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; +#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int has_width; + size_t width; +#endif +#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION + int has_precision; + size_t precision; +#endif +#if NEED_PRINTF_UNBOUNDED_PRECISION + int prec_ourselves; +#else +# define prec_ourselves 0 +#endif +#if NEED_PRINTF_FLAG_LEFTADJUST +# define pad_ourselves 1 +#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int pad_ourselves; +#else +# define pad_ourselves 0 +#endif + TCHAR_T *fbp; + unsigned int prefix_count; + int prefixes[2] IF_LINT (= { 0 }); +#if !USE_SNPRINTF + size_t tmp_length; + TCHAR_T tmpbuf[700]; + TCHAR_T *tmp; +#endif + +#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } +#endif + +#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } +#endif + + /* Decide whether to handle the precision ourselves. */ +#if NEED_PRINTF_UNBOUNDED_PRECISION + switch (dp->conversion) + { + case 'd': case 'i': case 'u': + case 'o': + case 'x': case 'X': case 'p': + prec_ourselves = has_precision && (precision > 0); + break; + default: + prec_ourselves = 0; + break; + } +#endif + + /* Decide whether to perform the padding ourselves. */ +#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) + switch (dp->conversion) + { +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need + to perform the padding after this conversion. Functions + with unistdio extensions perform the padding based on + character count rather than element count. */ + case 'c': case 's': +# endif +# if NEED_PRINTF_FLAG_ZERO + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': +# endif + pad_ourselves = 1; + break; + default: + pad_ourselves = prec_ourselves; + break; + } +#endif + +#if !USE_SNPRINTF + /* Allocate a temporary buffer of sufficient size for calling + sprintf. */ + { + switch (dp->conversion) + { + + case 'd': case 'i': case 'u': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Multiply by 2, as an estimate for FLAG_GROUP. */ + tmp_length = xsum (tmp_length, tmp_length); + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'o': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'x': case 'X': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 2, to account for a leading sign or alternate form. */ + tmp_length = xsum (tmp_length, 2); + break; + + case 'f': case 'F': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + else + tmp_length = + (unsigned int) (DBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'e': case 'E': case 'g': case 'G': + tmp_length = + 12; /* sign, decimal point, exponent etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'a': case 'A': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (DBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + break; + + case 'c': +# if HAVE_WINT_T && !WIDE_CHAR_VERSION + if (type == TYPE_WIDE_CHAR) + tmp_length = MB_CUR_MAX; + else +# endif + tmp_length = 1; + break; + + case 's': +# if HAVE_WCHAR_T + if (type == TYPE_WIDE_STRING) + { +# if WIDE_CHAR_VERSION + /* ISO C says about %ls in fwprintf: + "If the precision is not specified or is greater + than the size of the array, the array shall + contain a null wide character." + So if there is a precision, we must not use + wcslen. */ + const wchar_t *arg = + a.arg[dp->arg_index].a.a_wide_string; + + if (has_precision) + tmp_length = local_wcsnlen (arg, precision); + else + tmp_length = local_wcslen (arg); +# else + /* ISO C says about %ls in fprintf: + "If a precision is specified, no more than that + many bytes are written (including shift + sequences, if any), and the array shall contain + a null wide character if, to equal the + multibyte character sequence length given by + the precision, the function would need to + access a wide character one past the end of the + array." + So if there is a precision, we must not use + wcslen. */ + /* This case has already been handled above. */ + abort (); +# endif + } + else +# endif + { +# if WIDE_CHAR_VERSION + /* ISO C says about %s in fwprintf: + "If the precision is not specified or is greater + than the size of the converted array, the + converted array shall contain a null wide + character." + So if there is a precision, we must not use + strlen. */ + /* This case has already been handled above. */ + abort (); +# else + /* ISO C says about %s in fprintf: + "If the precision is not specified or greater + than the size of the array, the array shall + contain a null character." + So if there is a precision, we must not use + strlen. */ + const char *arg = a.arg[dp->arg_index].a.a_string; + + if (has_precision) + tmp_length = local_strnlen (arg, precision); + else + tmp_length = strlen (arg); +# endif + } + break; + + case 'p': + tmp_length = + (unsigned int) (sizeof (void *) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1 /* turn floor into ceil */ + + 2; /* account for leading 0x */ + break; + + default: + abort (); + } + + if (!pad_ourselves) + { +# if ENABLE_UNISTDIO + /* Padding considers the number of characters, therefore + the number of elements after padding may be + > max (tmp_length, width) + but is certainly + <= tmp_length + width. */ + tmp_length = xsum (tmp_length, width); +# else + /* Padding considers the number of elements, + says POSIX. */ + if (tmp_length < width) + tmp_length = width; +# endif + } + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + } + + if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (TCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } +#endif + + /* Construct the format string for calling snprintf or + sprintf. */ + fbp = buf; + *fbp++ = '%'; +#if NEED_PRINTF_FLAG_GROUPING + /* The underlying implementation doesn't support the ' flag. + Produce no grouping characters in this case; this is + acceptable because the grouping is locale dependent. */ +#else + if (flags & FLAG_GROUP) + *fbp++ = '\''; +#endif + if (flags & FLAG_LEFT) + *fbp++ = '-'; + if (flags & FLAG_SHOWSIGN) + *fbp++ = '+'; + if (flags & FLAG_SPACE) + *fbp++ = ' '; + if (flags & FLAG_ALT) + *fbp++ = '#'; + if (!pad_ourselves) + { + if (flags & FLAG_ZERO) + *fbp++ = '0'; + if (dp->width_start != dp->width_end) + { + size_t n = dp->width_end - dp->width_start; + /* The width specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->width_start; + do + *fbp++ = (unsigned char) *mp++; + while (--n > 0); + } + } + } + if (!prec_ourselves) + { + if (dp->precision_start != dp->precision_end) + { + size_t n = dp->precision_end - dp->precision_start; + /* The precision specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->precision_start; + do + *fbp++ = (unsigned char) *mp++; + while (--n > 0); + } + } + } + + switch (type) + { +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + case TYPE_ULONGLONGINT: +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + *fbp++ = 'I'; + *fbp++ = '6'; + *fbp++ = '4'; + break; +# else + *fbp++ = 'l'; + /*FALLTHROUGH*/ +# endif +#endif + case TYPE_LONGINT: + case TYPE_ULONGINT: +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: +#endif +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: +#endif + *fbp++ = 'l'; + break; + case TYPE_LONGDOUBLE: + *fbp++ = 'L'; + break; + default: + break; + } +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + *fbp = 'f'; + else +#endif + *fbp = dp->conversion; +#if USE_SNPRINTF +# if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) + fbp[1] = '%'; + fbp[2] = 'n'; + fbp[3] = '\0'; +# else + /* On glibc2 systems from glibc >= 2.3 - probably also older + ones - we know that snprintf's returns value conforms to + ISO C 99: the gl_SNPRINTF_DIRECTIVE_N test passes. + Therefore we can avoid using %n in this situation. + On glibc2 systems from 2004-10-18 or newer, the use of %n + in format strings in writable memory may crash the program + (if compiled with _FORTIFY_SOURCE=2), so we should avoid it + in this situation. */ + /* On native Win32 systems (such as mingw), we can avoid using + %n because: + - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, + snprintf does not write more than the specified number + of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes + '4', '5', '6' into buf, not '4', '5', '\0'.) + - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf + allows us to recognize the case of an insufficient + buffer size: it returns -1 in this case. + On native Win32 systems (such as mingw) where the OS is + Windows Vista, the use of %n in format strings by default + crashes the program. See + and + + So we should avoid %n in this situation. */ + fbp[1] = '\0'; +# endif +#else + fbp[1] = '\0'; +#endif + + /* Construct the arguments for calling snprintf or sprintf. */ + prefix_count = 0; + if (!pad_ourselves && dp->width_arg_index != ARG_NONE) + { + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; + } + if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) + { + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; + } + +#if USE_SNPRINTF + /* The SNPRINTF result is appended after result[0..length]. + The latter is an array of DCHAR_T; SNPRINTF appends an + array of TCHAR_T to it. This is possible because + sizeof (TCHAR_T) divides sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). */ +# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) + /* Ensure that maxlen below will be >= 2. Needed on BeOS, + where an snprintf() with maxlen==1 acts like sprintf(). */ + ENSURE_ALLOCATION (xsum (length, + (2 + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR)); + /* Prepare checking whether snprintf returns the count + via %n. */ + *(TCHAR_T *) (result + length) = '\0'; +#endif + + for (;;) + { + int count = -1; + +#if USE_SNPRINTF + int retcount = 0; + size_t maxlen = allocated - length; + /* SNPRINTF can fail if its second argument is + > INT_MAX. */ + if (maxlen > INT_MAX / TCHARS_PER_DCHAR) + maxlen = INT_MAX / TCHARS_PER_DCHAR; + maxlen = maxlen * TCHARS_PER_DCHAR; +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + arg, &count); \ + break; \ + case 1: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], arg, &count); \ + break; \ + case 2: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], prefixes[1], arg, \ + &count); \ + break; \ + default: \ + abort (); \ + } +#else +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + count = sprintf (tmp, buf, arg); \ + break; \ + case 1: \ + count = sprintf (tmp, buf, prefixes[0], arg); \ + break; \ + case 2: \ + count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ + arg); \ + break; \ + default: \ + abort (); \ + } +#endif + + switch (type) + { + case TYPE_SCHAR: + { + int arg = a.arg[dp->arg_index].a.a_schar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UCHAR: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uchar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_SHORT: + { + int arg = a.arg[dp->arg_index].a.a_short; + SNPRINTF_BUF (arg); + } + break; + case TYPE_USHORT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_ushort; + SNPRINTF_BUF (arg); + } + break; + case TYPE_INT: + { + int arg = a.arg[dp->arg_index].a.a_int; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UINT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGINT: + { + long int arg = a.arg[dp->arg_index].a.a_longint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGINT: + { + unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + { + long long int arg = a.arg[dp->arg_index].a.a_longlongint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGLONGINT: + { + unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_DOUBLE: + { + double arg = a.arg[dp->arg_index].a.a_double; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGDOUBLE: + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + SNPRINTF_BUF (arg); + } + break; + case TYPE_CHAR: + { + int arg = a.arg[dp->arg_index].a.a_char; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + { + wint_t arg = a.arg[dp->arg_index].a.a_wide_char; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_STRING: + { + const char *arg = a.arg[dp->arg_index].a.a_string; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_POINTER: + { + void *arg = a.arg[dp->arg_index].a.a_pointer; + SNPRINTF_BUF (arg); + } + break; + default: + abort (); + } + +#if USE_SNPRINTF + /* Portability: Not all implementations of snprintf() + are ISO C 99 compliant. Determine the number of + bytes that snprintf() has produced or would have + produced. */ + if (count >= 0) + { + /* Verify that snprintf() has NUL-terminated its + result. */ + if (count < maxlen + && ((TCHAR_T *) (result + length)) [count] != '\0') + abort (); + /* Portability hack. */ + if (retcount > count) + count = retcount; + } + else + { + /* snprintf() doesn't understand the '%n' + directive. */ + if (fbp[1] != '\0') + { + /* Don't use the '%n' directive; instead, look + at the snprintf() return value. */ + fbp[1] = '\0'; + continue; + } + else + { + /* Look at the snprintf() return value. */ + if (retcount < 0) + { + /* HP-UX 10.20 snprintf() is doubly deficient: + It doesn't understand the '%n' directive, + *and* it returns -1 (rather than the length + that would have been required) when the + buffer is too small. */ + size_t bigger_need = + xsum (xtimes (allocated, 2), 12); + ENSURE_ALLOCATION (bigger_need); + continue; + } + else + count = retcount; + } + } +#endif + + /* Attempt to handle failure. */ + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EINVAL; + return NULL; + } + +#if USE_SNPRINTF + /* Handle overflow of the allocated buffer. + If such an overflow occurs, a C99 compliant snprintf() + returns a count >= maxlen. However, a non-compliant + snprintf() function returns only count = maxlen - 1. To + cover both cases, test whether count >= maxlen - 1. */ + if ((unsigned int) count + 1 >= maxlen) + { + /* If maxlen already has attained its allowed maximum, + allocating more memory will not increase maxlen. + Instead of looping, bail out. */ + if (maxlen == INT_MAX / TCHARS_PER_DCHAR) + goto overflow; + else + { + /* Need at least (count + 1) * sizeof (TCHAR_T) + bytes. (The +1 is for the trailing NUL.) + But ask for (count + 2) * sizeof (TCHAR_T) + bytes, so that in the next round, we likely get + maxlen > (unsigned int) count + 1 + and so we don't get here again. + And allocate proportionally, to avoid looping + eternally if snprintf() reports a too small + count. */ + size_t n = + xmax (xsum (length, + ((unsigned int) count + 2 + + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR), + xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + continue; + } + } +#endif + +#if NEED_PRINTF_UNBOUNDED_PRECISION + if (prec_ourselves) + { + /* Handle the precision. */ + TCHAR_T *prec_ptr = +# if USE_SNPRINTF + (TCHAR_T *) (result + length); +# else + tmp; +# endif + size_t prefix_count; + size_t move; + + prefix_count = 0; + /* Put the additional zeroes after the sign. */ + if (count >= 1 + && (*prec_ptr == '-' || *prec_ptr == '+' + || *prec_ptr == ' ')) + prefix_count = 1; + /* Put the additional zeroes after the 0x prefix if + (flags & FLAG_ALT) || (dp->conversion == 'p'). */ + else if (count >= 2 + && prec_ptr[0] == '0' + && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) + prefix_count = 2; + + move = count - prefix_count; + if (precision > move) + { + /* Insert zeroes. */ + size_t insert = precision - move; + TCHAR_T *prec_end; + +# if USE_SNPRINTF + size_t n = + xsum (length, + (count + insert + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR); + length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + ENSURE_ALLOCATION (n); + length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + prec_ptr = (TCHAR_T *) (result + length); +# endif + + prec_end = prec_ptr + count; + prec_ptr += prefix_count; + + while (prec_end > prec_ptr) + { + prec_end--; + prec_end[insert] = prec_end[0]; + } + + prec_end += insert; + do + *--prec_end = '0'; + while (prec_end > prec_ptr); + + count += insert; + } + } +#endif + +#if !USE_SNPRINTF + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); +#endif + +#if !DCHAR_IS_TCHAR + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + if (dp->conversion == 'c' || dp->conversion == 's') + { + /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING + TYPE_WIDE_STRING. + The result string is not certainly ASCII. */ + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; + /* This code assumes that TCHAR_T is 'char'. */ + typedef int TCHAR_T_verify + [2 * (sizeof (TCHAR_T) == 1) - 1]; +# if USE_SNPRINTF + tmpsrc = (TCHAR_T *) (result + length); +# else + tmpsrc = tmp; +# endif + tmpdst = NULL; + tmpdst_len = 0; + if (DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, count, + NULL, + &tmpdst, &tmpdst_len) + < 0) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + count = tmpdst_len; + } + else + { + /* The result string is ASCII. + Simple 1:1 conversion. */ +# if USE_SNPRINTF + /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a + no-op conversion, in-place on the array starting + at (result + length). */ + if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) +# endif + { + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t n; + +# if USE_SNPRINTF + if (result == resultbuf) + { + tmpsrc = (TCHAR_T *) (result + length); + /* ENSURE_ALLOCATION will not move tmpsrc + (because it's part of resultbuf). */ + ENSURE_ALLOCATION (xsum (length, count)); + } + else + { + /* ENSURE_ALLOCATION will move the array + (because it uses realloc(). */ + ENSURE_ALLOCATION (xsum (length, count)); + tmpsrc = (TCHAR_T *) (result + length); + } +# else + tmpsrc = tmp; + ENSURE_ALLOCATION (xsum (length, count)); +# endif + tmpdst = result + length; + /* Copy backwards, because of overlapping. */ + tmpsrc += count; + tmpdst += count; + for (n = count; n > 0; n--) + *--tmpdst = (unsigned char) *--tmpsrc; + } + } +#endif + +#if DCHAR_IS_TCHAR && !USE_SNPRINTF + /* Make room for the result. */ + if (count > allocated - length) + { + /* Need at least count elements. But allocate + proportionally. */ + size_t n = + xmax (xsum (length, count), xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + } +#endif + + /* Here count <= allocated - length. */ + + /* Perform padding. */ +#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + if (pad_ourselves && has_width) + { + size_t w; +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferrable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, count); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = count; +# endif + if (w < width) + { + size_t pad = width - w; + + /* Make room for the result. */ + if (xsum (count, pad) > allocated - length) + { + /* Need at least count + pad elements. But + allocate proportionally. */ + size_t n = + xmax (xsum3 (length, count, pad), + xtimes (allocated, 2)); + +# if USE_SNPRINTF + length += count; + ENSURE_ALLOCATION (n); + length -= count; +# else + ENSURE_ALLOCATION (n); +# endif + } + /* Here count + pad <= allocated - length. */ + + { +# if !DCHAR_IS_TCHAR || USE_SNPRINTF + DCHAR_T * const rp = result + length; +# else + DCHAR_T * const rp = tmp; +# endif + DCHAR_T *p = rp + count; + DCHAR_T *end = p + pad; + DCHAR_T *pad_ptr; +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + if (dp->conversion == 'c' + || dp->conversion == 's') + /* No zero-padding for string directives. */ + pad_ptr = NULL; + else +# endif + { + pad_ptr = (*rp == '-' ? rp + 1 : rp); + /* No zero-padding of "inf" and "nan". */ + if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') + || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) + pad_ptr = NULL; + } + /* The generated string now extends from rp to p, + with the zero padding insertion point being at + pad_ptr. */ + + count = count + pad; /* = end - rp */ + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > rp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + } + } + } +#endif + + /* Here still count <= allocated - length. */ + +#if !DCHAR_IS_TCHAR || USE_SNPRINTF + /* The snprintf() result did fit. */ +#else + /* Append the sprintf() result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); +#endif +#if !USE_SNPRINTF + if (tmp != tmpbuf) + free (tmp); +#endif + +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + { + /* Convert the %f result to upper case for %F. */ + DCHAR_T *rp = result + length; + size_t rc; + for (rc = count; rc > 0; rc--, rp++) + if (*rp >= 'a' && *rp <= 'z') + *rp = *rp - 'a' + 'A'; + } +#endif + + length += count; + break; + } + } + } + } + + /* Add the final NUL. */ + ENSURE_ALLOCATION (xsum (length, 1)); + result[length] = '\0'; + + if (result != resultbuf && length + 1 < allocated) + { + /* Shrink the allocated memory if possible. */ + DCHAR_T *memory; + + memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); + if (memory != NULL) + result = memory; + } + + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + *lengthp = length; + /* Note that we can produce a big string of a length > INT_MAX. POSIX + says that snprintf() fails with errno = EOVERFLOW in this case, but + that's only because snprintf() returns an 'int'. This function does + not have this limitation. */ + return result; + +#if USE_SNPRINTF + overflow: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EOVERFLOW; + return NULL; +#endif + + out_of_memory: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + out_of_memory_1: + CLEANUP (); + errno = ENOMEM; + return NULL; + } +} + +#undef TCHARS_PER_DCHAR +#undef SNPRINTF +#undef USE_SNPRINTF +#undef DCHAR_CPY +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef DCHAR_IS_TCHAR +#undef TCHAR_T +#undef DCHAR_T +#undef FCHAR_T +#undef VASNPRINTF diff --git a/coreseek/m4-1.4.13/lib/vasnprintf.h b/coreseek/m4-1.4.13/lib/vasnprintf.h new file mode 100644 index 0000000..b9a3d6e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/vasnprintf.h @@ -0,0 +1,81 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 2002-2004, 2007-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _VASNPRINTF_H +#define _VASNPRINTF_H + +/* Get va_list. */ +#include + +/* Get size_t. */ +#include + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write formatted output to a string dynamically allocated with malloc(). + You can pass a preallocated buffer for the result in RESULTBUF and its + size in *LENGTHP; otherwise you pass RESULTBUF = NULL. + If successful, return the address of the string (this may be = RESULTBUF + if no dynamic memory allocation was necessary) and set *LENGTHP to the + number of resulting bytes, excluding the trailing NUL. Upon error, set + errno and return NULL. + + When dynamic memory allocation occurs, the preallocated buffer is left + alone (with possibly modified contents). This makes it possible to use + a statically allocated or stack-allocated buffer, like this: + + char buf[100]; + size_t len = sizeof (buf); + char *output = vasnprintf (buf, &len, format, args); + if (output == NULL) + ... error handling ...; + else + { + ... use the output string ...; + if (output != buf) + free (output); + } + */ +#if REPLACE_VASNPRINTF +# define asnprintf rpl_asnprintf +# define vasnprintf rpl_vasnprintf +#endif +extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 3, 0))); + +#ifdef __cplusplus +} +#endif + +#endif /* _VASNPRINTF_H */ diff --git a/coreseek/m4-1.4.13/lib/vasnprintf.o b/coreseek/m4-1.4.13/lib/vasnprintf.o new file mode 100644 index 0000000..951871f Binary files /dev/null and b/coreseek/m4-1.4.13/lib/vasnprintf.o differ diff --git a/coreseek/m4-1.4.13/lib/vasprintf.c b/coreseek/m4-1.4.13/lib/vasprintf.c new file mode 100644 index 0000000..d1b8137 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/vasprintf.c @@ -0,0 +1,51 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#ifdef IN_LIBASPRINTF +# include "vasprintf.h" +#else +# include +#endif + +#include +#include +#include + +#include "vasnprintf.h" + +int +vasprintf (char **resultp, const char *format, va_list args) +{ + size_t length; + char *result = vasnprintf (NULL, &length, format, args); + if (result == NULL) + return -1; + + if (length > INT_MAX) + { + free (result); + errno = EOVERFLOW; + return -1; + } + + *resultp = result; + /* Return the number of resulting bytes, excluding the trailing NUL. */ + return length; +} diff --git a/coreseek/m4-1.4.13/lib/vasprintf.o b/coreseek/m4-1.4.13/lib/vasprintf.o new file mode 100644 index 0000000..554557f Binary files /dev/null and b/coreseek/m4-1.4.13/lib/vasprintf.o differ diff --git a/coreseek/m4-1.4.13/lib/verify.h b/coreseek/m4-1.4.13/lib/verify.h new file mode 100644 index 0000000..fac53f6 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/verify.h @@ -0,0 +1,140 @@ +/* Compile-time assert-like macros. + + Copyright (C) 2005, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef VERIFY_H +# define VERIFY_H 1 + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + There are two macros, since no single macro can be used in all + contexts in C. verify_true (R) is for scalar contexts, including + integer constant expression contexts. verify (R) is for declaration + contexts, e.g., the top level. + + Symbols ending in "__" are private to this header. + + The code below uses several ideas. + + * The first step is ((R) ? 1 : -1). Given an expression R, of + integral or boolean or floating-point type, this yields an + expression of integral type, whose value is later verified to be + constant and nonnegative. + + * Next this expression W is wrapped in a type + struct verify_type__ { unsigned int verify_error_if_negative_size__: W; }. + If W is negative, this yields a compile-time error. No compiler can + deal with a bit-field of negative size. + + One might think that an array size check would have the same + effect, that is, that the type struct { unsigned int dummy[W]; } + would work as well. However, inside a function, some compilers + (such as C++ compilers and GNU C) allow local parameters and + variables inside array size expressions. With these compilers, + an array size check would not properly diagnose this misuse of + the verify macro: + + void function (int n) { verify (n < 0); } + + * For the verify macro, the struct verify_type__ will need to + somehow be embedded into a declaration. To be portable, this + declaration must declare an object, a constant, a function, or a + typedef name. If the declared entity uses the type directly, + such as in + + struct dummy {...}; + typedef struct {...} dummy; + extern struct {...} *dummy; + extern void dummy (struct {...} *); + extern struct {...} *dummy (void); + + two uses of the verify macro would yield colliding declarations + if the entity names are not disambiguated. A workaround is to + attach the current line number to the entity name: + + #define GL_CONCAT0(x, y) x##y + #define GL_CONCAT(x, y) GL_CONCAT0 (x, y) + extern struct {...} * GL_CONCAT(dummy,__LINE__); + + But this has the problem that two invocations of verify from + within the same macro would collide, since the __LINE__ value + would be the same for both invocations. + + A solution is to use the sizeof operator. It yields a number, + getting rid of the identity of the type. Declarations like + + extern int dummy [sizeof (struct {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + + can be repeated. + + * Should the implementation use a named struct or an unnamed struct? + Which of the following alternatives can be used? + + extern int dummy [sizeof (struct {...})]; + extern int dummy [sizeof (struct verify_type__ {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct verify_type__ {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct verify_type__ {...})]; + + In the second and sixth case, the struct type is exported to the + outer scope; two such declarations therefore collide. GCC warns + about the first, third, and fourth cases. So the only remaining + possibility is the fifth case: + + extern int (*dummy (void)) [sizeof (struct {...})]; + + * This implementation exploits the fact that GCC does not warn about + the last declaration mentioned above. If a future version of GCC + introduces a warning for this, the problem could be worked around + by using code specialized to GCC, e.g.,: + + #if 4 <= __GNUC__ + # define verify(R) \ + extern int (* verify_function__ (void)) \ + [__builtin_constant_p (R) && (R) ? 1 : -1] + #endif + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + + +/* Verify requirement R at compile-time, as an integer constant expression. + Return 1. */ + +# ifdef __cplusplus +template + struct verify_type__ { unsigned int verify_error_if_negative_size__: w; }; +# define verify_true(R) \ + (!!sizeof (verify_type__<(R) ? 1 : -1>)) +# else +# define verify_true(R) \ + (!!sizeof \ + (struct { unsigned int verify_error_if_negative_size__: (R) ? 1 : -1; })) +# endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. */ + +# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)] + +#endif diff --git a/coreseek/m4-1.4.13/lib/verror.c b/coreseek/m4-1.4.13/lib/verror.c new file mode 100644 index 0000000..0a7981e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/verror.c @@ -0,0 +1,77 @@ +/* va_list error handler for noninteractive utilities + Copyright (C) 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake. */ + +#include + +#include "verror.h" +#include "xvasprintf.h" + +#include +#include +#include + +#if ENABLE_NLS +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#ifndef _ +# define _(String) String +#endif + +/* Print a message with `vfprintf (stderr, FORMAT, ARGS)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. + Use the globals error_print_progname and error_message_count similarly + to error(). */ +void +verror (int status, int errnum, const char *format, va_list args) +{ + verror_at_line (status, errnum, NULL, 0, format, args); +} + +/* Print a message with `vfprintf (stderr, FORMAT, ARGS)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. + If FNAME is not NULL, prepend the message with `FNAME:LINENO:'. + Use the globals error_print_progname, error_message_count, and + error_one_per_line similarly to error_at_line(). */ +void +verror_at_line (int status, int errnum, const char *file, + unsigned int line_number, const char *format, va_list args) +{ + char *message = xvasprintf (format, args); + if (message) + { + /* Until http://sourceware.org/bugzilla/show_bug.cgi?id=2997 is fixed, + glibc violates GNU Coding Standards when the file argument to + error_at_line is NULL. */ + if (file) + error_at_line (status, errnum, file, line_number, "%s", message); + else + error (status, errnum, "%s", message); + } + else + { + /* EOVERFLOW, EINVAL, and EILSEQ from xvasprintf are signs of + serious programmer errors. */ + error (0, errno, _("unable to display error message")); + abort (); + } + free (message); +} diff --git a/coreseek/m4-1.4.13/lib/verror.h b/coreseek/m4-1.4.13/lib/verror.h new file mode 100644 index 0000000..4d3b7ce --- /dev/null +++ b/coreseek/m4-1.4.13/lib/verror.h @@ -0,0 +1,53 @@ +/* Declaration for va_list error-reporting function + Copyright (C) 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _VERROR_H +#define _VERROR_H 1 + +#include "error.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* Print a message with `vfprintf (stderr, FORMAT, ARGS)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. + Use the globals error_print_progname and error_message_count similarly + to error(). */ + +extern void verror (int __status, int __errnum, const char *__format, + va_list __args) + __attribute__ ((__format__ (__printf__, 3, 0))); + +/* Print a message with `vfprintf (stderr, FORMAT, ARGS)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. + If FNAME is not NULL, prepend the message with `FNAME:LINENO:'. + Use the globals error_print_progname, error_message_count, and + error_one_per_line similarly to error_at_line(). */ + +extern void verror_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, + va_list __args) + __attribute__ ((__format__ (__printf__, 5, 0))); + +#ifdef __cplusplus +} +#endif + +#endif /* verror.h */ diff --git a/coreseek/m4-1.4.13/lib/verror.o b/coreseek/m4-1.4.13/lib/verror.o new file mode 100644 index 0000000..a537f89 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/verror.o differ diff --git a/coreseek/m4-1.4.13/lib/version-etc-fsf.c b/coreseek/m4-1.4.13/lib/version-etc-fsf.c new file mode 100644 index 0000000..4c0d174 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/version-etc-fsf.c @@ -0,0 +1,30 @@ +/* Variable with FSF copyright information, for version-etc. + Copyright (C) 1999-2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#include + +/* Specification. */ +#include "version-etc.h" + +/* Default copyright goes to the FSF. */ + +const char version_etc_copyright[] = + /* Do *not* mark this string for translation. %s is a copyright + symbol suitable for this locale, and %d is the copyright + year. */ + "Copyright %s %d Free Software Foundation, Inc."; diff --git a/coreseek/m4-1.4.13/lib/version-etc-fsf.o b/coreseek/m4-1.4.13/lib/version-etc-fsf.o new file mode 100644 index 0000000..bb7009d Binary files /dev/null and b/coreseek/m4-1.4.13/lib/version-etc-fsf.o differ diff --git a/coreseek/m4-1.4.13/lib/version-etc.c b/coreseek/m4-1.4.13/lib/version-etc.c new file mode 100644 index 0000000..2258c2e --- /dev/null +++ b/coreseek/m4-1.4.13/lib/version-etc.c @@ -0,0 +1,186 @@ +/* Print --version and bug-reporting information in a consistent format. + Copyright (C) 1999-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#include + +/* Specification. */ +#include "version-etc.h" + +#include +#include +#include + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +enum { COPYRIGHT_YEAR = 2009 }; + +/* Like version_etc, below, but with the NULL-terminated author list + provided via a variable of type va_list. */ +void +version_etc_va (FILE *stream, + const char *command_name, const char *package, + const char *version, va_list authors) +{ + size_t n_authors; + + /* Count the number of authors. */ + { + va_list tmp_authors; + + va_copy (tmp_authors, authors); + + n_authors = 0; + while (va_arg (tmp_authors, const char *) != NULL) + ++n_authors; + } + + if (command_name) + fprintf (stream, "%s (%s) %s\n", command_name, package, version); + else + fprintf (stream, "%s %s\n", package, version); + + /* TRANSLATORS: Translate "(C)" to the copyright symbol + (C-in-a-circle), if this symbol is available in the user's + locale. Otherwise, do not translate "(C)"; leave it as-is. */ + fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR); + + fputs (_("\ +\n\ +License GPLv3+: GNU GPL version 3 or later .\n\ +This is free software: you are free to change and redistribute it.\n\ +There is NO WARRANTY, to the extent permitted by law.\n\ +\n\ +"), + stream); + + switch (n_authors) + { + case 0: + /* The caller must provide at least one author name. */ + abort (); + case 1: + /* TRANSLATORS: %s denotes an author name. */ + vfprintf (stream, _("Written by %s.\n"), authors); + break; + case 2: + /* TRANSLATORS: Each %s denotes an author name. */ + vfprintf (stream, _("Written by %s and %s.\n"), authors); + break; + case 3: + /* TRANSLATORS: Each %s denotes an author name. */ + vfprintf (stream, _("Written by %s, %s, and %s.\n"), authors); + break; + case 4: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + vfprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"), authors); + break; + case 5: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + vfprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"), authors); + break; + case 6: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + vfprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"), + authors); + break; + case 7: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + vfprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"), + authors); + break; + case 8: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + vfprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"), + authors); + break; + case 9: + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + vfprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"), + authors); + break; + default: + /* 10 or more authors. Use an abbreviation, since the human reader + will probably not want to read the entire list anyway. */ + /* TRANSLATORS: Each %s denotes an author name. + You can use line breaks, estimating that each author name occupies + ca. 16 screen columns and that a screen line has ca. 80 columns. */ + vfprintf (stream, _("\ +Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"), + authors); + break; + } + va_end (authors); +} + + +/* Display the --version information the standard way. + + If COMMAND_NAME is NULL, the PACKAGE is asumed to be the name of + the program. The formats are therefore: + + PACKAGE VERSION + + or + + COMMAND_NAME (PACKAGE) VERSION. + + The author names are passed as separate arguments, with an additional + NULL argument at the end. */ +void +version_etc (FILE *stream, + const char *command_name, const char *package, + const char *version, /* const char *author1, ...*/ ...) +{ + va_list authors; + + va_start (authors, version); + version_etc_va (stream, command_name, package, version, authors); +} + +void +emit_bug_reporting_address (void) +{ + /* TRANSLATORS: The placeholder indicates the bug-reporting address + for this package. Please add _another line_ saying + "Report translation bugs to <...>\n" with the address for translation + bugs (typically your translation team's web or email address). */ + printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); + printf (_("%s home page: .\n"), + PACKAGE_NAME, PACKAGE); + fputs (_("General help using GNU software: .\n"), + stdout); +} diff --git a/coreseek/m4-1.4.13/lib/version-etc.h b/coreseek/m4-1.4.13/lib/version-etc.h new file mode 100644 index 0000000..33a8e7f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/version-etc.h @@ -0,0 +1,38 @@ +/* Print --version and bug-reporting information in a consistent format. + Copyright (C) 1999, 2003, 2005, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#ifndef VERSION_ETC_H +# define VERSION_ETC_H 1 + +# include +# include + +extern const char version_etc_copyright[]; + +extern void version_etc_va (FILE *stream, + const char *command_name, const char *package, + const char *version, va_list authors); + +extern void version_etc (FILE *stream, + const char *command_name, const char *package, + const char *version, + /* const char *author1, ...*/ ...); + +extern void emit_bug_reporting_address (void); + +#endif /* VERSION_ETC_H */ diff --git a/coreseek/m4-1.4.13/lib/version-etc.o b/coreseek/m4-1.4.13/lib/version-etc.o new file mode 100644 index 0000000..84862e6 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/version-etc.o differ diff --git a/coreseek/m4-1.4.13/lib/w32spawn.h b/coreseek/m4-1.4.13/lib/w32spawn.h new file mode 100644 index 0000000..ee286dd --- /dev/null +++ b/coreseek/m4-1.4.13/lib/w32spawn.h @@ -0,0 +1,176 @@ +/* Auxiliary functions for the creation of subprocesses. Native Woe32 API. + Copyright (C) 2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Get declarations of the Win32 API functions. */ +#define WIN32_LEAN_AND_MEAN +#include + +/* Get _get_osfhandle() and _open_osfhandle(). */ +#include + +#include +#include +#include + +#include "xalloc.h" + +/* Duplicates a file handle, making the copy uninheritable. */ +static int +dup_noinherit (int fd) +{ + HANDLE curr_process = GetCurrentProcess (); + HANDLE old_handle = (HANDLE) _get_osfhandle (fd); + HANDLE new_handle; + int nfd; + + if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ + old_handle, /* SourceHandle */ + curr_process, /* TargetProcessHandle */ + (PHANDLE) &new_handle, /* TargetHandle */ + (DWORD) 0, /* DesiredAccess */ + FALSE, /* InheritHandle */ + DUPLICATE_SAME_ACCESS)) /* Options */ + error (EXIT_FAILURE, 0, _("DuplicateHandle failed with error code 0x%08x"), + (unsigned int) GetLastError ()); + + nfd = _open_osfhandle ((long) new_handle, O_BINARY); + if (nfd < 0) + error (EXIT_FAILURE, errno, _("_open_osfhandle failed")); + + return nfd; +} + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +static char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XNMALLOC (1 + argc + 1, char *); + + /* Add an element upfront that can be used when argv[0] turns out to be a + script, not a program. + On Unix, this would be "/bin/sh". On native Windows, "sh" is actually + "sh.exe". We have to omit the directory part and rely on the search in + PATH, because the mingw "mount points" are not visible inside Win32 + CreateProcess(). */ + *new_argv++ = "sh.exe"; + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + bool quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = (char *) xmalloc (length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} diff --git a/coreseek/m4-1.4.13/lib/wait-process.c b/coreseek/m4-1.4.13/lib/wait-process.c new file mode 100644 index 0000000..cf55ec1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/wait-process.c @@ -0,0 +1,361 @@ +/* Waiting for a subprocess to finish. + Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include + +/* Specification. */ +#include "wait-process.h" + +#include +#include +#include +#include + +#include +#include + +#include "error.h" +#include "fatal-signal.h" +#include "xalloc.h" +#include "gettext.h" + +#define _(str) gettext (str) + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + + +#if defined _MSC_VER || defined __MINGW32__ + +#define WIN32_LEAN_AND_MEAN +#include + +/* The return value of spawnvp() is really a process handle as returned + by CreateProcess(). Therefore we can kill it using TerminateProcess. */ +#define kill(pid,sig) TerminateProcess ((HANDLE) (pid), sig) + +#endif + + +/* Type of an entry in the slaves array. + The 'used' bit determines whether this entry is currently in use. + (If pid_t was an atomic type like sig_atomic_t, we could just set the + 'child' field to 0 when unregistering a slave process, and wouldn't need + the 'used' field.) + The 'used' and 'child' fields are accessed from within the cleanup_slaves() + action, therefore we mark them as 'volatile'. */ +typedef struct +{ + volatile sig_atomic_t used; + volatile pid_t child; +} +slaves_entry_t; + +/* The registered slave subprocesses. */ +static slaves_entry_t static_slaves[32]; +static slaves_entry_t * volatile slaves = static_slaves; +static sig_atomic_t volatile slaves_count = 0; +static size_t slaves_allocated = SIZEOF (static_slaves); + +/* The termination signal for slave subprocesses. + 2003-10-07: Terminator becomes Governator. */ +#ifdef SIGHUP +# define TERMINATOR SIGHUP +#else +# define TERMINATOR SIGTERM +#endif + +/* The cleanup action. It gets called asynchronously. */ +static void +cleanup_slaves (void) +{ + for (;;) + { + /* Get the last registered slave. */ + size_t n = slaves_count; + if (n == 0) + break; + n--; + slaves_count = n; + /* Skip unused entries in the slaves array. */ + if (slaves[n].used) + { + pid_t slave = slaves[n].child; + + /* Kill the slave. */ + kill (slave, TERMINATOR); + } + } +} + +/* Register a subprocess as being a slave process. This means that the + subprocess will be terminated when its creator receives a catchable fatal + signal or exits normally. Registration ends when wait_subprocess() + notices that the subprocess has exited. */ +void +register_slave_subprocess (pid_t child) +{ + static bool cleanup_slaves_registered = false; + if (!cleanup_slaves_registered) + { + atexit (cleanup_slaves); + at_fatal_signal (cleanup_slaves); + cleanup_slaves_registered = true; + } + + /* Try to store the new slave in an unused entry of the slaves array. */ + { + slaves_entry_t *s = slaves; + slaves_entry_t *s_end = s + slaves_count; + + for (; s < s_end; s++) + if (!s->used) + { + /* The two uses of 'volatile' in the slaves_entry_t type above + (and ISO C 99 section 5.1.2.3.(5)) ensure that we mark the + entry as used only after the child pid has been written to the + memory location s->child. */ + s->child = child; + s->used = 1; + return; + } + } + + if (slaves_count == slaves_allocated) + { + /* Extend the slaves array. Note that we cannot use xrealloc(), + because then the cleanup_slaves() function could access an already + deallocated array. */ + slaves_entry_t *old_slaves = slaves; + size_t new_slaves_allocated = 2 * slaves_allocated; + slaves_entry_t *new_slaves = + (slaves_entry_t *) + malloc (new_slaves_allocated * sizeof (slaves_entry_t)); + if (new_slaves == NULL) + { + /* xalloc_die() will call exit() which will invoke cleanup_slaves(). + Additionally we need to kill child, because it's not yet among + the slaves list. */ + kill (child, TERMINATOR); + xalloc_die (); + } + memcpy (new_slaves, old_slaves, + slaves_allocated * sizeof (slaves_entry_t)); + slaves = new_slaves; + slaves_allocated = new_slaves_allocated; + /* Now we can free the old slaves array. */ + if (old_slaves != static_slaves) + free (old_slaves); + } + /* The three uses of 'volatile' in the types above (and ISO C 99 section + 5.1.2.3.(5)) ensure that we increment the slaves_count only after the + new slave and its 'used' bit have been written to the memory locations + that make up slaves[slaves_count]. */ + slaves[slaves_count].child = child; + slaves[slaves_count].used = 1; + slaves_count++; +} + +/* Unregister a child from the list of slave subprocesses. */ +static inline void +unregister_slave_subprocess (pid_t child) +{ + /* The easiest way to remove an entry from a list that can be used by + an asynchronous signal handler is just to mark it as unused. For this, + we rely on sig_atomic_t. */ + slaves_entry_t *s = slaves; + slaves_entry_t *s_end = s + slaves_count; + + for (; s < s_end; s++) + if (s->used && s->child == child) + s->used = 0; +} + + +/* Wait for a subprocess to finish. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. */ +int +wait_subprocess (pid_t child, const char *progname, + bool ignore_sigpipe, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp) +{ +#if HAVE_WAITID && defined WNOWAIT && 0 + /* Commented out because waitid() without WEXITED and with WNOWAIT doesn't + work: On Solaris 7 and OSF/1 4.0, it returns -1 and sets errno = ECHILD, + and on HP-UX 10.20 it just hangs. */ + /* Use of waitid() with WNOWAIT avoids a race condition: If slave_process is + true, and this process sleeps a very long time between the return from + waitpid() and the execution of unregister_slave_subprocess(), and + meanwhile another process acquires the same PID as child, and then - still + before unregister_slave_subprocess() - this process gets a fatal signal, + it would kill the other totally unrelated process. */ + siginfo_t info; + + if (termsigp != NULL) + *termsigp = 0; + for (;;) + { + if (waitid (P_PID, child, &info, WEXITED | (slave_process ? WNOWAIT : 0)) + < 0) + { +# ifdef EINTR + if (errno == EINTR) + continue; +# endif + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess"), progname); + return 127; + } + + /* info.si_code is set to one of CLD_EXITED, CLD_KILLED, CLD_DUMPED, + CLD_TRAPPED, CLD_STOPPED, CLD_CONTINUED. Loop until the program + terminates. */ + if (info.si_code == CLD_EXITED + || info.si_code == CLD_KILLED || info.si_code == CLD_DUMPED) + break; + } + + /* The child process has exited or was signalled. */ + + if (slave_process) + { + /* Unregister the child from the list of slave subprocesses, so that + later, when we exit, we don't kill a totally unrelated process which + may have acquired the same pid. */ + unregister_slave_subprocess (child); + + /* Now remove the zombie from the process list. */ + for (;;) + { + if (waitid (P_PID, child, &info, WEXITED) < 0) + { +# ifdef EINTR + if (errno == EINTR) + continue; +# endif + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess"), progname); + return 127; + } + break; + } + } + + switch (info.si_code) + { + case CLD_KILLED: + case CLD_DUMPED: + if (termsigp != NULL) + *termsigp = info.si_status; /* TODO: or info.si_signo? */ +# ifdef SIGPIPE + if (info.si_status == SIGPIPE && ignore_sigpipe) + return 0; +# endif + if (exit_on_error || (!null_stderr && termsigp == NULL)) + error (exit_on_error ? EXIT_FAILURE : 0, 0, + _("%s subprocess got fatal signal %d"), + progname, info.si_status); + return 127; + case CLD_EXITED: + if (info.si_status == 127) + { + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, 0, + _("%s subprocess failed"), progname); + return 127; + } + return info.si_status; + default: + abort (); + } +#else + /* waitpid() is just as portable as wait() nowadays. */ + int status; + + if (termsigp != NULL) + *termsigp = 0; + status = 0; + for (;;) + { + int result = waitpid (child, &status, 0); + + if (result != child) + { +# ifdef EINTR + if (errno == EINTR) + continue; +# endif +# if 0 /* defined ECHILD */ + if (errno == ECHILD) + { + /* Child process nonexistent?! Assume it terminated + successfully. */ + status = 0; + break; + } +# endif + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, errno, + _("%s subprocess"), progname); + return 127; + } + + /* One of WIFSIGNALED (status), WIFEXITED (status), WIFSTOPPED (status) + must always be true, since we did not specify WCONTINUED in the + waitpid() call. Loop until the program terminates. */ + if (!WIFSTOPPED (status)) + break; + } + + /* The child process has exited or was signalled. */ + + if (slave_process) + /* Unregister the child from the list of slave subprocesses, so that + later, when we exit, we don't kill a totally unrelated process which + may have acquired the same pid. */ + unregister_slave_subprocess (child); + + if (WIFSIGNALED (status)) + { + if (termsigp != NULL) + *termsigp = WTERMSIG (status); +# ifdef SIGPIPE + if (WTERMSIG (status) == SIGPIPE && ignore_sigpipe) + return 0; +# endif + if (exit_on_error || (!null_stderr && termsigp == NULL)) + error (exit_on_error ? EXIT_FAILURE : 0, 0, + _("%s subprocess got fatal signal %d"), + progname, (int) WTERMSIG (status)); + return 127; + } + if (!WIFEXITED (status)) + abort (); + if (WEXITSTATUS (status) == 127) + { + if (exit_on_error || !null_stderr) + error (exit_on_error ? EXIT_FAILURE : 0, 0, + _("%s subprocess failed"), progname); + return 127; + } + return WEXITSTATUS (status); +#endif +} diff --git a/coreseek/m4-1.4.13/lib/wait-process.h b/coreseek/m4-1.4.13/lib/wait-process.h new file mode 100644 index 0000000..cb24fd7 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/wait-process.h @@ -0,0 +1,74 @@ +/* Waiting for a subprocess to finish. + Copyright (C) 2001-2003, 2006, 2008-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _WAIT_PROCESS_H +#define _WAIT_PROCESS_H + +/* Get pid_t. */ +#include +#include +#include + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Wait for a subprocess to finish. Return its exit code. + If it didn't terminate correctly, exit if exit_on_error is true, otherwise + return 127. + Arguments: + - child is the pid of the subprocess. + - progname is the name of the program executed by the subprocess, used for + error messages. + - If ignore_sigpipe is true, consider a subprocess termination due to + SIGPIPE as equivalent to a success. This is suitable for processes whose + only purpose is to write to standard output. This flag can be safely set + to false when the process' standard output is known to go to DEV_NULL. + - If null_stderr is true, the usual error message to stderr will be omitted. + This is suitable when the subprocess does not fulfill an important task. + - slave_process should be set to true if the process has been launched as a + slave process. + - If exit_on_error is true, any error will cause the main process to exit + with an error status. + - If termsigp is not NULL: *termsig will be set to the signal that + terminated the subprocess (if supported by the platform: not on native + Windows platforms), otherwise 0, and the error message about the signal + that terminated the subprocess will be omitted. + Prerequisites: The signal handler for SIGCHLD should not be set to SIG_IGN, + otherwise this function will not work. */ +extern int wait_subprocess (pid_t child, const char *progname, + bool ignore_sigpipe, bool null_stderr, + bool slave_process, bool exit_on_error, + int *termsigp); + +/* Register a subprocess as being a slave process. This means that the + subprocess will be terminated when its creator receives a catchable fatal + signal or exits normally. Registration ends when wait_subprocess() + notices that the subprocess has exited. */ +extern void register_slave_subprocess (pid_t child); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _WAIT_PROCESS_H */ diff --git a/coreseek/m4-1.4.13/lib/wait-process.o b/coreseek/m4-1.4.13/lib/wait-process.o new file mode 100644 index 0000000..1ec5492 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/wait-process.o differ diff --git a/coreseek/m4-1.4.13/lib/wchar.in.h b/coreseek/m4-1.4.13/lib/wchar.in.h new file mode 100644 index 0000000..cc436b1 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/wchar.in.h @@ -0,0 +1,306 @@ +/* A substitute for ISO C99 , for platforms that have issues. + + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake. */ + +/* + * ISO C 99 for platforms that have issues. + * + * + * For now, this just ensures proper prerequisite inclusion order and + * the declaration of wcwidth(). + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_mbstate_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H +/* Special invocation convention: + - Inside uClibc header files. + - On HP-UX 11.00 we have a sequence of nested includes + -> -> , and the latter includes , + once indirectly -> -> -> + and once directly. In both situations 'wint_t' is not yet defined, + therefore we cannot provide the function overrides; instead include only + the system's . + - On IRIX 6.5, similarly, we have an include -> , and + the latter includes . But here, we have no way to detect whether + is completely included or is still being included. */ + +#@INCLUDE_NEXT@ @NEXT_WCHAR_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_H + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include + +/* Include the original if it exists. + Some builds of uClibc lack it. */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCHAR_H@ +# @INCLUDE_NEXT@ @NEXT_WCHAR_H@ +#endif + +#undef _GL_ALREADY_INCLUDING_WCHAR_H + +#ifndef _GL_WCHAR_H +#define _GL_WCHAR_H + +/* The definition of GL_LINK_WARNING is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Define wint_t. (Also done in wctype.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#endif + + +/* Override mbstate_t if it is too small. + On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for + implementing mbrtowc for encodings like UTF-8. */ +#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# define GNULIB_defined_mbstate_t 1 +#endif + + +/* Convert a single-byte character to a wide character. */ +#if @GNULIB_BTOWC@ +# if @REPLACE_BTOWC@ +# undef btowc +# define btowc rpl_btowc +# endif +# if !@HAVE_BTOWC@ || @REPLACE_BTOWC@ +extern wint_t btowc (int c); +# endif +#elif defined GNULIB_POSIXCHECK +# undef btowc +# define btowc(c) \ + (GL_LINK_WARNING ("btowc is unportable - " \ + "use gnulib module btowc for portability"), \ + btowc (c)) +#endif + + +/* Convert a wide character to a single-byte character. */ +#if @GNULIB_WCTOB@ +# if @REPLACE_WCTOB@ +# undef wctob +# define wctob rpl_wctob +# endif +# if (!defined wctob && !@HAVE_DECL_WCTOB@) || @REPLACE_WCTOB@ +/* wctob is provided by gnulib, or wctob exists but is not declared. */ +extern int wctob (wint_t wc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wctob +# define wctob(w) \ + (GL_LINK_WARNING ("wctob is unportable - " \ + "use gnulib module wctob for portability"), \ + wctob (w)) +#endif + + +/* Test whether *PS is in the initial state. */ +#if @GNULIB_MBSINIT@ +# if @REPLACE_MBSINIT@ +# undef mbsinit +# define mbsinit rpl_mbsinit +# endif +# if !@HAVE_MBSINIT@ || @REPLACE_MBSINIT@ +extern int mbsinit (const mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsinit +# define mbsinit(p) \ + (GL_LINK_WARNING ("mbsinit is unportable - " \ + "use gnulib module mbsinit for portability"), \ + mbsinit (p)) +#endif + + +/* Convert a multibyte character to a wide character. */ +#if @GNULIB_MBRTOWC@ +# if @REPLACE_MBRTOWC@ +# undef mbrtowc +# define mbrtowc rpl_mbrtowc +# endif +# if !@HAVE_MBRTOWC@ || @REPLACE_MBRTOWC@ +extern size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrtowc +# define mbrtowc(w,s,n,p) \ + (GL_LINK_WARNING ("mbrtowc is unportable - " \ + "use gnulib module mbrtowc for portability"), \ + mbrtowc (w, s, n, p)) +#endif + + +/* Recognize a multibyte character. */ +#if @GNULIB_MBRLEN@ +# if @REPLACE_MBRLEN@ +# undef mbrlen +# define mbrlen rpl_mbrlen +# endif +# if !@HAVE_MBRLEN@ || @REPLACE_MBRLEN@ +extern size_t mbrlen (const char *s, size_t n, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrlen +# define mbrlen(s,n,p) \ + (GL_LINK_WARNING ("mbrlen is unportable - " \ + "use gnulib module mbrlen for portability"), \ + mbrlen (s, n, p)) +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSRTOWCS@ +# if @REPLACE_MBSRTOWCS@ +# undef mbsrtowcs +# define mbsrtowcs rpl_mbsrtowcs +# endif +# if !@HAVE_MBSRTOWCS@ || @REPLACE_MBSRTOWCS@ +extern size_t mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsrtowcs +# define mbsrtowcs(d,s,l,p) \ + (GL_LINK_WARNING ("mbsrtowcs is unportable - " \ + "use gnulib module mbsrtowcs for portability"), \ + mbsrtowcs (d, s, l, p)) +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSNRTOWCS@ +# if @REPLACE_MBSNRTOWCS@ +# undef mbsnrtowcs +# define mbsnrtowcs rpl_mbsnrtowcs +# endif +# if !@HAVE_MBSNRTOWCS@ || @REPLACE_MBSNRTOWCS@ +extern size_t mbsnrtowcs (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsnrtowcs +# define mbsnrtowcs(d,s,n,l,p) \ + (GL_LINK_WARNING ("mbsnrtowcs is unportable - " \ + "use gnulib module mbsnrtowcs for portability"), \ + mbsnrtowcs (d, s, n, l, p)) +#endif + + +/* Convert a wide character to a multibyte character. */ +#if @GNULIB_WCRTOMB@ +# if @REPLACE_WCRTOMB@ +# undef wcrtomb +# define wcrtomb rpl_wcrtomb +# endif +# if !@HAVE_WCRTOMB@ || @REPLACE_WCRTOMB@ +extern size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcrtomb +# define wcrtomb(s,w,p) \ + (GL_LINK_WARNING ("wcrtomb is unportable - " \ + "use gnulib module wcrtomb for portability"), \ + wcrtomb (s, w, p)) +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSRTOMBS@ +# if @REPLACE_WCSRTOMBS@ +# undef wcsrtombs +# define wcsrtombs rpl_wcsrtombs +# endif +# if !@HAVE_WCSRTOMBS@ || @REPLACE_WCSRTOMBS@ +extern size_t wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrtombs +# define wcsrtombs(d,s,l,p) \ + (GL_LINK_WARNING ("wcsrtombs is unportable - " \ + "use gnulib module wcsrtombs for portability"), \ + wcsrtombs (d, s, l, p)) +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSNRTOMBS@ +# if !@HAVE_WCSNRTOMBS@ +extern size_t wcsnrtombs (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsnrtombs +# define wcsnrtombs(d,s,n,l,p) \ + (GL_LINK_WARNING ("wcsnrtombs is unportable - " \ + "use gnulib module wcsnrtombs for portability"), \ + wcsnrtombs (d, s, n, l, p)) +#endif + + +/* Return the number of screen columns needed for WC. */ +#if @GNULIB_WCWIDTH@ +# if @REPLACE_WCWIDTH@ +# undef wcwidth +# define wcwidth rpl_wcwidth +extern int wcwidth (wchar_t); +# else +# if !defined wcwidth && !@HAVE_DECL_WCWIDTH@ +/* wcwidth exists but is not declared. */ +extern int wcwidth (int /* actually wchar_t */); +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcwidth +# define wcwidth(w) \ + (GL_LINK_WARNING ("wcwidth is unportable - " \ + "use gnulib module wcwidth for portability"), \ + wcwidth (w)) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_WCHAR_H */ +#endif /* _GL_WCHAR_H */ +#endif diff --git a/coreseek/m4-1.4.13/lib/wcrtomb.c b/coreseek/m4-1.4.13/lib/wcrtomb.c new file mode 100644 index 0000000..79df99f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/wcrtomb.c @@ -0,0 +1,53 @@ +/* Convert wide character to multibyte character. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + + +size_t +wcrtomb (char *s, wchar_t wc, mbstate_t *ps) +{ + /* This implementation of wcrtomb on top of wctomb() supports only + stateless encodings. ps must be in the initial state. */ + if (ps != NULL && !mbsinit (ps)) + { + errno = EINVAL; + return (size_t)(-1); + } + + if (s == NULL) + /* We know the NUL wide character corresponds to the NUL character. */ + return 1; + else + { + int ret = wctomb (s, wc); + + if (ret >= 0) + return ret; + else + { + errno = EILSEQ; + return (size_t)(-1); + } + } +} diff --git a/coreseek/m4-1.4.13/lib/wctype.in.h b/coreseek/m4-1.4.13/lib/wctype.in.h new file mode 100644 index 0000000..f008d8f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/wctype.in.h @@ -0,0 +1,184 @@ +/* A substitute for ISO C99 , for platforms that lack it. + + Copyright (C) 2006-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Bruno Haible and Paul Eggert. */ + +/* + * ISO C 99 for platforms that lack it. + * + * + * iswctype, towctrans, towlower, towupper, wctrans, wctype, + * wctrans_t, and wctype_t are not yet implemented. + */ + +#ifndef _GL_WCTYPE_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if @HAVE_WINT_T@ +/* Solaris 2.5 has a bug: must be included before . + Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +# include +# include +# include +# include +#endif + +/* Include the original if it exists. + BeOS 5 has the functions but no . */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCTYPE_H@ +# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ +#endif + +#ifndef _GL_WCTYPE_H +#define _GL_WCTYPE_H + +/* Define wint_t. (Also done in wchar.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#endif + +/* FreeBSD 4.4 to 4.11 has but lacks the functions. + Linux libc5 has and the functions but they are broken. + Assume all 12 functions are implemented the same way, or not at all. */ +#if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ + +/* IRIX 5.3 has macros but no functions, its isw* macros refer to an + undefined variable _ctmp_ and to macros like _P, and they + refer to system functions like _iswctype that are not in the + standard C library. Rather than try to get ancient buggy + implementations like this to work, just disable them. */ +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit + +/* Linux libc5 has and the functions but they are broken. */ +# if @REPLACE_ISWCNTRL@ +# define iswalnum rpl_iswalnum +# define iswalpha rpl_iswalpha +# define iswblank rpl_iswblank +# define iswcntrl rpl_iswcntrl +# define iswdigit rpl_iswdigit +# define iswgraph rpl_iswgraph +# define iswlower rpl_iswlower +# define iswprint rpl_iswprint +# define iswpunct rpl_iswpunct +# define iswspace rpl_iswspace +# define iswupper rpl_iswupper +# define iswxdigit rpl_iswxdigit +# endif + +static inline int +iswalnum (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); +} + +static inline int +iswalpha (wint_t wc) +{ + return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; +} + +static inline int +iswblank (wint_t wc) +{ + return wc == ' ' || wc == '\t'; +} + +static inline int +iswcntrl (wint_t wc) +{ + return (wc & ~0x1f) == 0 || wc == 0x7f; +} + +static inline int +iswdigit (wint_t wc) +{ + return wc >= '0' && wc <= '9'; +} + +static inline int +iswgraph (wint_t wc) +{ + return wc >= '!' && wc <= '~'; +} + +static inline int +iswlower (wint_t wc) +{ + return wc >= 'a' && wc <= 'z'; +} + +static inline int +iswprint (wint_t wc) +{ + return wc >= ' ' && wc <= '~'; +} + +static inline int +iswpunct (wint_t wc) +{ + return (wc >= '!' && wc <= '~' + && !((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); +} + +static inline int +iswspace (wint_t wc) +{ + return (wc == ' ' || wc == '\t' + || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); +} + +static inline int +iswupper (wint_t wc) +{ + return wc >= 'A' && wc <= 'Z'; +} + +static inline int +iswxdigit (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); +} + +# endif /* ! HAVE_ISWCNTRL */ + +#endif /* _GL_WCTYPE_H */ +#endif /* _GL_WCTYPE_H */ diff --git a/coreseek/m4-1.4.13/lib/xalloc-die.c b/coreseek/m4-1.4.13/lib/xalloc-die.c new file mode 100644 index 0000000..0a0694f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xalloc-die.c @@ -0,0 +1,41 @@ +/* Report a memory allocation failure and exit. + + Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "xalloc.h" + +#include + +#include "error.h" +#include "exitfail.h" + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +void +xalloc_die (void) +{ + error (exit_failure, 0, "%s", _("memory exhausted")); + + /* The `noreturn' cannot be given to error, since it may return if + its first argument is 0. To help compilers understand the + xalloc_die does not return, call abort. Also, the abort is a + safety feature if exit_failure is 0 (which shouldn't happen). */ + abort (); +} diff --git a/coreseek/m4-1.4.13/lib/xalloc-die.o b/coreseek/m4-1.4.13/lib/xalloc-die.o new file mode 100644 index 0000000..c4e5603 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/xalloc-die.o differ diff --git a/coreseek/m4-1.4.13/lib/xalloc.h b/coreseek/m4-1.4.13/lib/xalloc.h new file mode 100644 index 0000000..57a13e0 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xalloc.h @@ -0,0 +1,280 @@ +/* xalloc.h -- malloc with out-of-memory checking + + Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef XALLOC_H_ +# define XALLOC_H_ + +# include + + +# ifdef __cplusplus +extern "C" { +# endif + + +# ifndef __attribute__ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) +# define __attribute__(x) +# endif +# endif + +# ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +# endif + +# ifndef ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 +# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define ATTRIBUTE_MALLOC +# endif +# endif + +/* This function is always triggered when memory is exhausted. + It must be defined by the application, either explicitly + or by using gnulib's xalloc-die module. This is the + function to call when one wants the program to die because of a + memory allocation failure. */ +extern void xalloc_die (void) ATTRIBUTE_NORETURN; + +void *xmalloc (size_t s) ATTRIBUTE_MALLOC; +void *xzalloc (size_t s) ATTRIBUTE_MALLOC; +void *xcalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; +void *xrealloc (void *p, size_t s); +void *x2realloc (void *p, size_t *pn); +void *xmemdup (void const *p, size_t s) ATTRIBUTE_MALLOC; +char *xstrdup (char const *str) ATTRIBUTE_MALLOC; + +/* Return 1 if an array of N objects, each of size S, cannot exist due + to size arithmetic overflow. S must be positive and N must be + nonnegative. This is a macro, not an inline function, so that it + works correctly even when SIZE_MAX < N. + + By gnulib convention, SIZE_MAX represents overflow in size + calculations, so the conservative dividend to use here is + SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. + However, malloc (SIZE_MAX) fails on all known hosts where + sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for + exactly-SIZE_MAX allocations on such hosts; this avoids a test and + branch when S is known to be 1. */ +# define xalloc_oversized(n, s) \ + ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) + + +/* In the following macros, T must be an elementary or structure/union or + typedef'ed type, or a pointer to such a type. To apply one of the + following macros to a function pointer or array type, you need to typedef + it first and use the typedef name. */ + +/* Allocate an object of type T dynamically, with error checking. */ +/* extern t *XMALLOC (typename t); */ +# define XMALLOC(t) ((t *) xmalloc (sizeof (t))) + +/* Allocate memory for N elements of type T, with error checking. */ +/* extern t *XNMALLOC (size_t n, typename t); */ +# define XNMALLOC(n, t) \ + ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) + +/* Allocate an object of type T dynamically, with error checking, + and zero it. */ +/* extern t *XZALLOC (typename t); */ +# define XZALLOC(t) ((t *) xzalloc (sizeof (t))) + +/* Allocate memory for N elements of type T, with error checking, + and zero it. */ +/* extern t *XCALLOC (size_t n, typename t); */ +# define XCALLOC(n, t) \ + ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) + + +# if HAVE_INLINE +# define static_inline static inline +# else + void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; + void *xnrealloc (void *p, size_t n, size_t s); + void *x2nrealloc (void *p, size_t *pn, size_t s); + char *xcharalloc (size_t n) ATTRIBUTE_MALLOC; +# endif + +# ifdef static_inline + +/* Allocate an array of N objects, each with S bytes of memory, + dynamically, with error checking. S must be nonzero. */ + +static_inline void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; +static_inline void * +xnmalloc (size_t n, size_t s) +{ + if (xalloc_oversized (n, s)) + xalloc_die (); + return xmalloc (n * s); +} + +/* Change the size of an allocated block of memory P to an array of N + objects each of S bytes, with error checking. S must be nonzero. */ + +static_inline void * +xnrealloc (void *p, size_t n, size_t s) +{ + if (xalloc_oversized (n, s)) + xalloc_die (); + return xrealloc (p, n * s); +} + +/* If P is null, allocate a block of at least *PN such objects; + otherwise, reallocate P so that it contains more than *PN objects + each of S bytes. *PN must be nonzero unless P is null, and S must + be nonzero. Set *PN to the new number of objects, and return the + pointer to the new block. *PN is never set to zero, and the + returned pointer is never null. + + Repeated reallocations are guaranteed to make progress, either by + allocating an initial block with a nonzero size, or by allocating a + larger block. + + In the following implementation, nonzero sizes are increased by a + factor of approximately 1.5 so that repeated reallocations have + O(N) overall cost rather than O(N**2) cost, but the + specification for this function does not guarantee that rate. + + Here is an example of use: + + int *p = NULL; + size_t used = 0; + size_t allocated = 0; + + void + append_int (int value) + { + if (used == allocated) + p = x2nrealloc (p, &allocated, sizeof *p); + p[used++] = value; + } + + This causes x2nrealloc to allocate a block of some nonzero size the + first time it is called. + + To have finer-grained control over the initial size, set *PN to a + nonzero value before calling this function with P == NULL. For + example: + + int *p = NULL; + size_t used = 0; + size_t allocated = 0; + size_t allocated1 = 1000; + + void + append_int (int value) + { + if (used == allocated) + { + p = x2nrealloc (p, &allocated1, sizeof *p); + allocated = allocated1; + } + p[used++] = value; + } + + */ + +static_inline void * +x2nrealloc (void *p, size_t *pn, size_t s) +{ + size_t n = *pn; + + if (! p) + { + if (! n) + { + /* The approximate size to use for initial small allocation + requests, when the invoking code specifies an old size of + zero. 64 bytes is the largest "small" request for the + GNU C library malloc. */ + enum { DEFAULT_MXFAST = 64 }; + + n = DEFAULT_MXFAST / s; + n += !n; + } + } + else + { + /* Set N = ceil (1.5 * N) so that progress is made if N == 1. + Check for overflow, so that N * S stays in size_t range. + The check is slightly conservative, but an exact check isn't + worth the trouble. */ + if ((size_t) -1 / 3 * 2 / s <= n) + xalloc_die (); + n += (n + 1) / 2; + } + + *pn = n; + return xrealloc (p, n * s); +} + +/* Return a pointer to a new buffer of N bytes. This is like xmalloc, + except it returns char *. */ + +static_inline char *xcharalloc (size_t n) ATTRIBUTE_MALLOC; +static_inline char * +xcharalloc (size_t n) +{ + return XNMALLOC (n, char); +} + +# endif + +# ifdef __cplusplus +} + +/* C++ does not allow conversions from void * to other pointer types + without a cast. Use templates to work around the problem when + possible. */ + +template inline T * +xrealloc (T *p, size_t s) +{ + return (T *) xrealloc ((void *) p, s); +} + +template inline T * +xnrealloc (T *p, size_t n, size_t s) +{ + return (T *) xnrealloc ((void *) p, n, s); +} + +template inline T * +x2realloc (T *p, size_t *pn) +{ + return (T *) x2realloc ((void *) p, pn); +} + +template inline T * +x2nrealloc (T *p, size_t *pn, size_t s) +{ + return (T *) x2nrealloc ((void *) p, pn, s); +} + +template inline T * +xmemdup (T const *p, size_t s) +{ + return (T *) xmemdup ((void const *) p, s); +} + +# endif + + +#endif /* !XALLOC_H_ */ diff --git a/coreseek/m4-1.4.13/lib/xasprintf.c b/coreseek/m4-1.4.13/lib/xasprintf.c new file mode 100644 index 0000000..5b4f0c0 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xasprintf.c @@ -0,0 +1,33 @@ +/* vasprintf and asprintf with out-of-memory checking. + Copyright (C) 1999, 2002-2004, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "xvasprintf.h" + +char * +xasprintf (const char *format, ...) +{ + va_list args; + char *result; + + va_start (args, format); + result = xvasprintf (format, args); + va_end (args); + + return result; +} diff --git a/coreseek/m4-1.4.13/lib/xasprintf.o b/coreseek/m4-1.4.13/lib/xasprintf.o new file mode 100644 index 0000000..3f50362 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/xasprintf.o differ diff --git a/coreseek/m4-1.4.13/lib/xmalloc.c b/coreseek/m4-1.4.13/lib/xmalloc.c new file mode 100644 index 0000000..585fb4b --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xmalloc.c @@ -0,0 +1,118 @@ +/* xmalloc.c -- malloc with out of memory checking + + Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2008-2009 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#if ! HAVE_INLINE +# define static_inline +#endif +#include "xalloc.h" +#undef static_inline + +#include +#include + +/* 1 if calloc is known to be compatible with GNU calloc. This + matters if we are not also using the calloc module, which defines + HAVE_CALLOC and supports the GNU API even on non-GNU platforms. */ +#if defined HAVE_CALLOC || defined __GLIBC__ +enum { HAVE_GNU_CALLOC = 1 }; +#else +enum { HAVE_GNU_CALLOC = 0 }; +#endif + +/* Allocate N bytes of memory dynamically, with error checking. */ + +void * +xmalloc (size_t n) +{ + void *p = malloc (n); + if (!p && n != 0) + xalloc_die (); + return p; +} + +/* Change the size of an allocated block of memory P to N bytes, + with error checking. */ + +void * +xrealloc (void *p, size_t n) +{ + p = realloc (p, n); + if (!p && n != 0) + xalloc_die (); + return p; +} + +/* If P is null, allocate a block of at least *PN bytes; otherwise, + reallocate P so that it contains more than *PN bytes. *PN must be + nonzero unless P is null. Set *PN to the new block's size, and + return the pointer to the new block. *PN is never set to zero, and + the returned pointer is never null. */ + +void * +x2realloc (void *p, size_t *pn) +{ + return x2nrealloc (p, pn, 1); +} + +/* Allocate S bytes of zeroed memory dynamically, with error checking. + There's no need for xnzalloc (N, S), since it would be equivalent + to xcalloc (N, S). */ + +void * +xzalloc (size_t s) +{ + return memset (xmalloc (s), 0, s); +} + +/* Allocate zeroed memory for N elements of S bytes, with error + checking. S must be nonzero. */ + +void * +xcalloc (size_t n, size_t s) +{ + void *p; + /* Test for overflow, since some calloc implementations don't have + proper overflow checks. But omit overflow and size-zero tests if + HAVE_GNU_CALLOC, since GNU calloc catches overflow and never + returns NULL if successful. */ + if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s)) + || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0))) + xalloc_die (); + return p; +} + +/* Clone an object P of size S, with error checking. There's no need + for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any + need for an arithmetic overflow check. */ + +void * +xmemdup (void const *p, size_t s) +{ + return memcpy (xmalloc (s), p, s); +} + +/* Clone STRING. */ + +char * +xstrdup (char const *string) +{ + return xmemdup (string, strlen (string) + 1); +} diff --git a/coreseek/m4-1.4.13/lib/xmalloc.o b/coreseek/m4-1.4.13/lib/xmalloc.o new file mode 100644 index 0000000..d197124 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/xmalloc.o differ diff --git a/coreseek/m4-1.4.13/lib/xmalloca.c b/coreseek/m4-1.4.13/lib/xmalloca.c new file mode 100644 index 0000000..d7cc346 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xmalloca.c @@ -0,0 +1,38 @@ +/* Safe automatic memory allocation with out of memory checking. + Copyright (C) 2003, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "xmalloca.h" + +#include "xalloc.h" + +#if HAVE_ALLOCA + +void * +xmmalloca (size_t n) +{ + void *p; + + p = mmalloca (n); + if (p == NULL) + xalloc_die (); + return p; +} + +#endif diff --git a/coreseek/m4-1.4.13/lib/xmalloca.h b/coreseek/m4-1.4.13/lib/xmalloca.h new file mode 100644 index 0000000..bd4c5a9 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xmalloca.h @@ -0,0 +1,64 @@ +/* Safe automatic memory allocation with out of memory checking. + Copyright (C) 2003, 2005, 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _XMALLOCA_H +#define _XMALLOCA_H + +#include "malloca.h" +#include "xalloc.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* xmalloca(N) is a checking safe variant of alloca(N). It allocates N bytes + of memory allocated on the stack, that must be freed using freea() before + the function returns. Upon failure, it exits with an error message. */ +#if HAVE_ALLOCA +# define xmalloca(N) \ + ((N) < 4032 - sa_increment \ + ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ + : xmmalloca (N)) +extern void * xmmalloca (size_t n); +#else +# define xmalloca(N) \ + xmalloc (N) +#endif + +/* xnmalloca(N,S) is an overflow-safe variant of xmalloca (N * S). + It allocates an array of N objects, each with S bytes of memory, + on the stack. S must be positive and N must be nonnegative. + The array must be freed using freea() before the function returns. + Upon failure, it exits with an error message. */ +#if HAVE_ALLOCA +/* Rely on xmalloca (SIZE_MAX) calling xalloc_die (). */ +# define xnmalloca(n, s) \ + xmalloca (xalloc_oversized ((n), (s)) ? (size_t) (-1) : (n) * (s)) +#else +# define xnmalloca(n, s) \ + xnmalloc ((n), (s)) +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _XMALLOCA_H */ diff --git a/coreseek/m4-1.4.13/lib/xmalloca.o b/coreseek/m4-1.4.13/lib/xmalloca.o new file mode 100644 index 0000000..5eb8d35 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/xmalloca.o differ diff --git a/coreseek/m4-1.4.13/lib/xprintf.c b/coreseek/m4-1.4.13/lib/xprintf.c new file mode 100644 index 0000000..8f279fa --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xprintf.c @@ -0,0 +1,79 @@ +/* printf wrappers that fail immediately for non-file-related errors + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "xprintf.h" + +#include + +#include "error.h" +#include "exitfail.h" +#include "gettext.h" + +/* written by Jim Meyering */ + +/* Just like printf, but call error if it fails without setting the + stream's error indicator. */ +int +xprintf (char const *restrict format, ...) +{ + va_list args; + int retval; + va_start (args, format); + retval = xvprintf (format, args); + va_end (args); + + return retval; +} + +/* Just like vprintf, but call error if it fails without setting the + stream's error indicator. */ +int +xvprintf (char const *restrict format, va_list args) +{ + int retval = vprintf (format, args); + if (retval < 0 && ! ferror (stdout)) + error (exit_failure, errno, gettext ("cannot perform formatted output")); + + return retval; +} + +/* Just like fprintf, but call error if it fails without setting the + stream's error indicator. */ +int +xfprintf (FILE *restrict stream, char const *restrict format, ...) +{ + va_list args; + int retval; + va_start (args, format); + retval = xvfprintf (stream, format, args); + va_end (args); + + return retval; +} + +/* Just like vfprintf, but call error if it fails without setting the + stream's error indicator. */ +int +xvfprintf (FILE *restrict stream, char const *restrict format, va_list args) +{ + int retval = vfprintf (stream, format, args); + if (retval < 0 && ! ferror (stream)) + error (exit_failure, errno, gettext ("cannot perform formatted output")); + + return retval; +} diff --git a/coreseek/m4-1.4.13/lib/xprintf.h b/coreseek/m4-1.4.13/lib/xprintf.h new file mode 100644 index 0000000..d11e270 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xprintf.h @@ -0,0 +1,46 @@ +/* printf wrappers that fail immediately for non-file-related errors + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _XPRINTF_H +#define _XPRINTF_H + +#include +#include + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + +extern int xprintf (char const *restrict format, ...) + __attribute__ ((__format__ (__printf__, 1, 2))); +extern int xvprintf (char const *restrict format, va_list args) + __attribute__ ((__format__ (__printf__, 1, 0))); +extern int xfprintf (FILE *restrict stream, char const *restrict format, ...) + __attribute__ ((__format__ (__printf__, 2, 3))); +extern int xvfprintf (FILE *restrict stream, char const *restrict format, + va_list args) + __attribute__ ((__format__ (__printf__, 2, 0))); + +#endif diff --git a/coreseek/m4-1.4.13/lib/xprintf.o b/coreseek/m4-1.4.13/lib/xprintf.o new file mode 100644 index 0000000..6960e3f Binary files /dev/null and b/coreseek/m4-1.4.13/lib/xprintf.o differ diff --git a/coreseek/m4-1.4.13/lib/xsize.h b/coreseek/m4-1.4.13/lib/xsize.h new file mode 100644 index 0000000..284cf7f --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xsize.h @@ -0,0 +1,108 @@ +/* xsize.h -- Checked size_t computations. + + Copyright (C) 2003, 2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _XSIZE_H +#define _XSIZE_H + +/* Get size_t. */ +#include + +/* Get SIZE_MAX. */ +#include +#if HAVE_STDINT_H +# include +#endif + +/* The size of memory objects is often computed through expressions of + type size_t. Example: + void* p = malloc (header_size + n * element_size). + These computations can lead to overflow. When this happens, malloc() + returns a piece of memory that is way too small, and the program then + crashes while attempting to fill the memory. + To avoid this, the functions and macros in this file check for overflow. + The convention is that SIZE_MAX represents overflow. + malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc + implementation that uses mmap --, it's recommended to use size_overflow_p() + or size_in_bounds_p() before invoking malloc(). + The example thus becomes: + size_t size = xsum (header_size, xtimes (n, element_size)); + void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); +*/ + +/* Convert an arbitrary value >= 0 to type size_t. */ +#define xcast_size_t(N) \ + ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) + +/* Sum of two sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum (size_t size1, size_t size2) +{ + size_t sum = size1 + size2; + return (sum >= size1 ? sum : SIZE_MAX); +} + +/* Sum of three sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum3 (size_t size1, size_t size2, size_t size3) +{ + return xsum (xsum (size1, size2), size3); +} + +/* Sum of four sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) +{ + return xsum (xsum (xsum (size1, size2), size3), size4); +} + +/* Maximum of two sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xmax (size_t size1, size_t size2) +{ + /* No explicit check is needed here, because for any n: + max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ + return (size1 >= size2 ? size1 : size2); +} + +/* Multiplication of a count with an element size, with overflow check. + The count must be >= 0 and the element size must be > 0. + This is a macro, not an inline function, so that it works correctly even + when N is of a wider type and N > SIZE_MAX. */ +#define xtimes(N, ELSIZE) \ + ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) + +/* Check for overflow. */ +#define size_overflow_p(SIZE) \ + ((SIZE) == SIZE_MAX) +/* Check against overflow. */ +#define size_in_bounds_p(SIZE) \ + ((SIZE) != SIZE_MAX) + +#endif /* _XSIZE_H */ diff --git a/coreseek/m4-1.4.13/lib/xstrndup.c b/coreseek/m4-1.4.13/lib/xstrndup.c new file mode 100644 index 0000000..37488cd --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xstrndup.c @@ -0,0 +1,36 @@ +/* Duplicate a bounded initial segment of a string, with out-of-memory + checking. + Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "xstrndup.h" + +#include +#include "xalloc.h" + +/* Return a newly allocated copy of at most N bytes of STRING. + In other words, return a copy of the initial segment of length N of + STRING. */ +char * +xstrndup (const char *string, size_t n) +{ + char *s = strndup (string, n); + if (! s) + xalloc_die (); + return s; +} diff --git a/coreseek/m4-1.4.13/lib/xstrndup.h b/coreseek/m4-1.4.13/lib/xstrndup.h new file mode 100644 index 0000000..4882e39 --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xstrndup.h @@ -0,0 +1,23 @@ +/* Duplicate a bounded initial segment of a string, with out-of-memory + checking. + Copyright (C) 2003 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Return a newly allocated copy of at most N bytes of STRING. + In other words, return a copy of the initial segment of length N of + STRING. */ +extern char *xstrndup (const char *string, size_t n); diff --git a/coreseek/m4-1.4.13/lib/xstrndup.o b/coreseek/m4-1.4.13/lib/xstrndup.o new file mode 100644 index 0000000..ece6c98 Binary files /dev/null and b/coreseek/m4-1.4.13/lib/xstrndup.o differ diff --git a/coreseek/m4-1.4.13/lib/xvasprintf.c b/coreseek/m4-1.4.13/lib/xvasprintf.c new file mode 100644 index 0000000..fd7f21b --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xvasprintf.c @@ -0,0 +1,110 @@ +/* vasprintf and asprintf with out-of-memory checking. + Copyright (C) 1999, 2002-2004, 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "xvasprintf.h" + +#include +#include +#include +#include + +#include "xalloc.h" + +/* Checked size_t computations. */ +#include "xsize.h" + +static inline char * +xstrcat (size_t argcount, va_list args) +{ + char *result; + va_list ap; + size_t totalsize; + size_t i; + char *p; + + /* Determine the total size. */ + totalsize = 0; + va_copy (ap, args); + for (i = argcount; i > 0; i--) + { + const char *next = va_arg (ap, const char *); + totalsize = xsum (totalsize, strlen (next)); + } + va_end (ap); + + /* Test for overflow in the summing pass above or in (totalsize + 1) below. + Also, don't return a string longer than INT_MAX, for consistency with + vasprintf(). */ + if (totalsize == SIZE_MAX || totalsize > INT_MAX) + { + errno = EOVERFLOW; + return NULL; + } + + /* Allocate and fill the result string. */ + result = XNMALLOC (totalsize + 1, char); + p = result; + for (i = argcount; i > 0; i--) + { + const char *next = va_arg (args, const char *); + size_t len = strlen (next); + memcpy (p, next, len); + p += len; + } + *p = '\0'; + + return result; +} + +char * +xvasprintf (const char *format, va_list args) +{ + char *result; + + /* Recognize the special case format = "%s...%s". It is a frequently used + idiom for string concatenation and needs to be fast. We don't want to + have a separate function xstrcat() for this purpose. */ + { + size_t argcount = 0; + const char *f; + + for (f = format;;) + { + if (*f == '\0') + /* Recognized the special case of string concatenation. */ + return xstrcat (argcount, args); + if (*f != '%') + break; + f++; + if (*f != 's') + break; + f++; + argcount++; + } + } + + if (vasprintf (&result, format, args) < 0) + { + if (errno == ENOMEM) + xalloc_die (); + return NULL; + } + + return result; +} diff --git a/coreseek/m4-1.4.13/lib/xvasprintf.h b/coreseek/m4-1.4.13/lib/xvasprintf.h new file mode 100644 index 0000000..42b032a --- /dev/null +++ b/coreseek/m4-1.4.13/lib/xvasprintf.h @@ -0,0 +1,56 @@ +/* vasprintf and asprintf with out-of-memory checking. + Copyright (C) 2002-2004, 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _XVASPRINTF_H +#define _XVASPRINTF_H + +/* Get va_list. */ +#include + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Write formatted output to a string dynamically allocated with malloc(), + and return it. Upon [ENOMEM] memory allocation error, call xalloc_die. + On some other error + - [EOVERFLOW] resulting string length is > INT_MAX, + - [EINVAL] invalid format string, + - [EILSEQ] error during conversion between wide and multibyte characters, + return NULL. */ +extern char *xasprintf (const char *format, ...) + __attribute__ ((__format__ (__printf__, 1, 2))); +extern char *xvasprintf (const char *format, va_list args) + __attribute__ ((__format__ (__printf__, 1, 0))); + +#ifdef __cplusplus +} +#endif + +#endif /* _XVASPRINTF_H */ diff --git a/coreseek/m4-1.4.13/lib/xvasprintf.o b/coreseek/m4-1.4.13/lib/xvasprintf.o new file mode 100644 index 0000000..e38ba3d Binary files /dev/null and b/coreseek/m4-1.4.13/lib/xvasprintf.o differ diff --git a/coreseek/m4-1.4.13/m4/00gnulib.m4 b/coreseek/m4-1.4.13/m4/00gnulib.m4 new file mode 100644 index 0000000..d4d04d1 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/00gnulib.m4 @@ -0,0 +1,30 @@ +# 00gnulib.m4 serial 2 +dnl Copyright (C) 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This file must be named something that sorts before all other +dnl gnulib-provided .m4 files. It is needed until such time as we can +dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics. + +# AC_DEFUN_ONCE([NAME], VALUE) +# ---------------------------- +# Define NAME to expand to VALUE on the first use (whether by direct +# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. +# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This +# definition is slower than the version in Autoconf 2.64, because it +# can only use interfaces that existed since 2.59; but it achieves the +# same effect. Quoting is necessary to avoid confusing Automake. +m4_version_prereq([2.63.263], [], +[m4_define([AC][_DEFUN_ONCE], + [AC][_DEFUN([$1], + [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], + [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl +[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) + +# gl_00GNULIB +# ----------- +# Witness macro that this file has been included. Needed to force +# Automake to include this file prior to all other gnulib .m4 files. +AC_DEFUN([gl_00GNULIB]) diff --git a/coreseek/m4-1.4.13/m4/alloca.m4 b/coreseek/m4-1.4.13/m4/alloca.m4 new file mode 100644 index 0000000..4b978e1 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/alloca.m4 @@ -0,0 +1,46 @@ +# alloca.m4 serial 9 +dnl Copyright (C) 2002-2004, 2006, 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_ALLOCA], +[ + dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57. + AC_REQUIRE([AC_PROG_CPP]) + AC_REQUIRE([AC_PROG_EGREP]) + + AC_REQUIRE([AC_FUNC_ALLOCA]) + if test $ac_cv_func_alloca_works = no; then + gl_PREREQ_ALLOCA + fi + + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ + AC_EGREP_CPP([Need own alloca], [ +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif + ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) + ]) + if test $gl_cv_rpl_alloca = yes; then + dnl OK, alloca can be implemented through a compiler built-in. + AC_DEFINE([HAVE_ALLOCA], [1], + [Define to 1 if you have 'alloca' after including , + a header that may be supplied by this distribution.]) + ALLOCA_H=alloca.h + else + dnl alloca exists as a library function, i.e. it is slow and probably + dnl a memory leak. Don't define HAVE_ALLOCA in this case. + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + AC_SUBST([ALLOCA_H]) +]) + +# Prerequisites of lib/alloca.c. +# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. +AC_DEFUN([gl_PREREQ_ALLOCA], [:]) diff --git a/coreseek/m4-1.4.13/m4/assert.m4 b/coreseek/m4-1.4.13/m4/assert.m4 new file mode 100644 index 0000000..fb90cb3 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/assert.m4 @@ -0,0 +1,24 @@ +#serial 7 + +# Copyright (C) 1998, 1999, 2001, 2004, 2008 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl based on code from Eleftherios Gkioulekas +dnl Autoconf 2.60 provides AC_HEADER_ASSERT for the same purpose, but +dnl it has broken semantics for --enable-assert until 2.64. +AC_DEFUN([gl_ASSERT], +[ + AC_MSG_CHECKING([whether to enable assertions]) + AC_ARG_ENABLE([assert], + [AS_HELP_STRING([--disable-assert], [turn off assertions])], + [AS_IF([test "x$enableval" = xno], + [AC_DEFINE([NDEBUG], [1], + [Define to 1 if assertions should be disabled.])], + [test "x$enableval" != xyes], + [AC_MSG_WARN([invalid argument supplied to --enable-assert]) + enable_assert=yes])], + [enable_assert=yes]) + AC_MSG_RESULT([$enable_assert]) +]) diff --git a/coreseek/m4-1.4.13/m4/autobuild.m4 b/coreseek/m4-1.4.13/m4/autobuild.m4 new file mode 100644 index 0000000..a025e73 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/autobuild.m4 @@ -0,0 +1,39 @@ +# autobuild.m4 serial 7 +dnl Copyright (C) 2004, 2006, 2007, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Simon Josefsson + +# Usage: AB_INIT([MODE]). +AC_DEFUN([AB_INIT], +[ + AC_REQUIRE([AC_CANONICAL_BUILD]) + AC_REQUIRE([AC_CANONICAL_HOST]) + + if test -z "$AB_PACKAGE"; then + AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} + fi + AC_MSG_NOTICE([autobuild project... $AB_PACKAGE]) + + if test -z "$AB_VERSION"; then + AB_VERSION=${PACKAGE_VERSION:-$VERSION} + fi + AC_MSG_NOTICE([autobuild revision... $AB_VERSION]) + + hostname=`hostname` + if test "$hostname"; then + AC_MSG_NOTICE([autobuild hostname... $hostname]) + fi + + ifelse([$1],[],,[AC_MSG_NOTICE([autobuild mode... $1])]) + + date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` + if test "$?" != 0; then + date=`date` + fi + if test "$date"; then + AC_MSG_NOTICE([autobuild timestamp... $date]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/btowc.m4 b/coreseek/m4-1.4.13/m4/btowc.m4 new file mode 100644 index 0000000..64ff829 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/btowc.m4 @@ -0,0 +1,68 @@ +# btowc.m4 serial 3 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_BTOWC], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_CHECK_FUNCS_ONCE([btowc]) + if test $ac_cv_func_btowc = no; then + HAVE_BTOWC=0 + else + + dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF. + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether btowc(EOF) is correct], + [gl_cv_func_btowc_eof], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on IRIX. + irix*) gl_cv_func_btowc_eof="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_btowc_eof="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR != none; then + AC_TRY_RUN([ +#include +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (btowc (EOF) != WEOF) + return 1; + } + return 0; +}], + [gl_cv_func_btowc_eof=yes], + [gl_cv_func_btowc_eof=no], + []) + fi + ]) + case "$gl_cv_func_btowc_eof" in + *yes) ;; + *) REPLACE_BTOWC=1 ;; + esac + fi + if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([btowc]) + gl_PREREQ_BTOWC + fi +]) + +# Prerequisites of lib/btowc.c. +AC_DEFUN([gl_PREREQ_BTOWC], [ + : +]) diff --git a/coreseek/m4-1.4.13/m4/c-stack.m4 b/coreseek/m4-1.4.13/m4/c-stack.m4 new file mode 100644 index 0000000..0963cc5 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/c-stack.m4 @@ -0,0 +1,348 @@ +# Check prerequisites for compiling lib/c-stack.c. + +# Copyright (C) 2002, 2003, 2004, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Paul Eggert. + +# serial 9 + +AC_DEFUN([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC], + [# for STACK_DIRECTION + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS_ONCE([setrlimit]) + AC_CHECK_HEADERS_ONCE([ucontext.h]) + + dnl List of signals that are sent when an invalid virtual memory address + dnl is accessed, or when the stack overflows. + dnl Either { SIGSEGV } or { SIGSEGV, SIGBUS }. + case "$host_os" in + sunos4* | freebsd* | dragonfly* | openbsd* | netbsd* | kfreebsd* | knetbsd*) # BSD systems + FAULT_YIELDS_SIGBUS=1 ;; + hpux*) # HP-UX + FAULT_YIELDS_SIGBUS=1 ;; + macos* | darwin*) # MacOS X + FAULT_YIELDS_SIGBUS=1 ;; + gnu*) # Hurd + FAULT_YIELDS_SIGBUS=1 ;; + *) + FAULT_YIELDS_SIGBUS=0 ;; + esac + AC_DEFINE_UNQUOTED([FAULT_YIELDS_SIGBUS], [$FAULT_YIELDS_SIGBUS], + [Define to 1 if an invalid memory address access may yield a SIGBUS.]) + + AC_CACHE_CHECK([for working C stack overflow detection], + [ac_cv_sys_stack_overflow_works], + [AC_TRY_RUN( + [ + #include + #include + #if HAVE_SETRLIMIT + # include + # include + # include + #endif + #ifndef SIGSTKSZ + # define SIGSTKSZ 16384 + #endif + + static union + { + char buffer[2 * SIGSTKSZ]; + long double ld; + long u; + void *p; + } alternate_signal_stack; + + static void + segv_handler (int signo) + { + _exit (0); + } + + static int + c_stack_action () + { + stack_t st; + struct sigaction act; + int r; + + st.ss_flags = 0; + /* Use the midpoint to avoid Irix sigaltstack bug. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; + st.ss_size = SIGSTKSZ; + r = sigaltstack (&st, 0); + if (r != 0) + return r; + + sigemptyset (&act.sa_mask); + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND; + act.sa_handler = segv_handler; + #if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, 0) < 0) + return -1; + #endif + return sigaction (SIGSEGV, &act, 0); + } + static volatile int * + recurse_1 (volatile int n, volatile int *p) + { + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; + } + static int + recurse (volatile int n) + { + int sum = 0; + return *recurse_1 (n, &sum); + } + int + main () + { + #if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly + to the user's machine. On some Linux 2.2.x systems, there + is no stack limit for user processes at all. We don't want + to kill such systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); + #endif + + return c_stack_action () || recurse (0); + } + ], + [ac_cv_sys_stack_overflow_works=yes], + [ac_cv_sys_stack_overflow_works=no], + [ac_cv_sys_stack_overflow_works=cross-compiling])]) + + if test $ac_cv_sys_stack_overflow_works = yes; then + AC_DEFINE([HAVE_STACK_OVERFLOW_HANDLING], [1], + [Define to 1 if extending the stack slightly past the limit causes + a SIGSEGV which can be handled on an alternate stack established + with sigaltstack.]) + + dnl The ss_sp field of a stack_t is, according to POSIX, the lowest address + dnl of the memory block designated as an alternate stack. But IRIX 5.3 + dnl interprets it as the highest address! + AC_CACHE_CHECK([for correct stack_t interpretation], + [gl_cv_sigaltstack_low_base], [ + AC_RUN_IFELSE([ + AC_LANG_SOURCE([[ +#include +#include +#if HAVE_SYS_SIGNAL_H +# include +#endif +#ifndef SIGSTKSZ +# define SIGSTKSZ 16384 +#endif +volatile char *stack_lower_bound; +volatile char *stack_upper_bound; +static void check_stack_location (volatile char *addr) +{ + if (addr >= stack_lower_bound && addr <= stack_upper_bound) + exit (0); + else + exit (1); +} +static void stackoverflow_handler (int sig) +{ + char dummy; + check_stack_location (&dummy); +} +int main () +{ + char mystack[2 * SIGSTKSZ]; + stack_t altstack; + struct sigaction action; + /* Install the alternate stack. */ + altstack.ss_sp = mystack + SIGSTKSZ; + altstack.ss_size = SIGSTKSZ; + stack_lower_bound = (char *) altstack.ss_sp; + stack_upper_bound = (char *) altstack.ss_sp + altstack.ss_size - 1; + altstack.ss_flags = 0; /* no SS_DISABLE */ + if (sigaltstack (&altstack, NULL) < 0) + exit (2); + /* Install the SIGSEGV handler. */ + sigemptyset (&action.sa_mask); + action.sa_handler = &stackoverflow_handler; + action.sa_flags = SA_ONSTACK; + if (sigaction (SIGSEGV, &action, (struct sigaction *) NULL) < 0) + exit(3); + /* Provoke a SIGSEGV. */ + raise (SIGSEGV); + exit (3); +}]])], + [gl_cv_sigaltstack_low_base=yes], + [gl_cv_sigaltstack_low_base=no], + [gl_cv_sigaltstack_low_base=cross-compiling])]) + if test "$gl_cv_sigaltstack_low_base" = no; then + AC_DEFINE([SIGALTSTACK_SS_REVERSED], [1], + [Define if sigaltstack() interprets the stack_t.ss_sp field + incorrectly, as the highest address of the alternate stack range + rather than as the lowest address.]) + fi + + AC_CACHE_CHECK([for precise C stack overflow detection], + ac_cv_sys_xsi_stack_overflow_heuristic, + [AC_TRY_RUN( + [ + #include + #include + #if HAVE_UCONTEXT_H + # include + #endif + #if HAVE_SETRLIMIT + # include + # include + # include + #endif + #ifndef SIGSTKSZ + # define SIGSTKSZ 16384 + #endif + + static union + { + char buffer[2 * SIGSTKSZ]; + long double ld; + long u; + void *p; + } alternate_signal_stack; + + #if STACK_DIRECTION + # define find_stack_direction(ptr) STACK_DIRECTION + #else + static int + find_stack_direction (char const *addr) + { + char dummy; + return (! addr ? find_stack_direction (&dummy) + : addr < &dummy ? 1 : -1); + } + #endif + + static void + segv_handler (int signo, siginfo_t *info, void *context) + { + if (0 < info->si_code) + { + /* For XSI heuristics to work, we need uc_stack to describe + the interrupted stack (as on Solaris), and not the + currently executing stack (as on Linux). */ + ucontext_t const *user_context = context; + char const *stack_min = user_context->uc_stack.ss_sp; + size_t stack_size = user_context->uc_stack.ss_size; + char const *faulting_address = info->si_addr; + size_t s = faulting_address - stack_min; + size_t page_size = sysconf (_SC_PAGESIZE); + if (find_stack_direction (0) < 0) + s += page_size; + if (s < stack_size + page_size) + _exit (0); + } + + _exit (1); + } + + static int + c_stack_action () + { + stack_t st; + struct sigaction act; + int r; + + st.ss_flags = 0; + /* Use the midpoint to avoid Irix sigaltstack bug. */ + st.ss_sp = alternate_signal_stack.buffer + SIGSTKSZ; + st.ss_size = SIGSTKSZ; + r = sigaltstack (&st, 0); + if (r != 0) + return r; + + sigemptyset (&act.sa_mask); + act.sa_flags = SA_NODEFER | SA_ONSTACK | SA_RESETHAND | SA_SIGINFO; + act.sa_sigaction = segv_handler; + #if FAULT_YIELDS_SIGBUS + if (sigaction (SIGBUS, &act, 0) < 0) + return -1; + #endif + return sigaction (SIGSEGV, &act, 0); + } + static volatile int * + recurse_1 (volatile int n, volatile int *p) + { + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; + } + static int + recurse (volatile int n) + { + int sum = 0; + return *recurse_1 (n, &sum); + } + int + main () + { + #if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly + to the user's machine. On some Linux 2.2.x systems, there + is no stack limit for user processes at all. We don't want + to kill such systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); + #endif + + return c_stack_action () || recurse (0); + } + ], + [ac_cv_sys_xsi_stack_overflow_heuristic=yes], + [ac_cv_sys_xsi_stack_overflow_heuristic=no], + [ac_cv_sys_xsi_stack_overflow_heuristic=cross-compiling])]) + + if test $ac_cv_sys_xsi_stack_overflow_heuristic = yes; then + AC_DEFINE([HAVE_XSI_STACK_OVERFLOW_HEURISTIC], [1], + [Define to 1 if extending the stack slightly past the limit causes + a SIGSEGV, and an alternate stack can be established with sigaltstack, + and the signal handler is passed a context that specifies the + run time stack. This behavior is defined by POSIX 1003.1-2001 + with the X/Open System Interface (XSI) option + and is a standardized way to implement a SEGV-based stack + overflow detection heuristic.]) + fi + fi]) + + +AC_DEFUN([gl_PREREQ_C_STACK], + [AC_REQUIRE([AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC]) + AC_REQUIRE([gl_LIBSIGSEGV]) + + # for STACK_DIRECTION + AC_REQUIRE([AC_FUNC_ALLOCA]) + + AC_CHECK_FUNCS_ONCE([sigaltstack]) + AC_CHECK_DECLS([sigaltstack], , , [#include ]) + + AC_CHECK_HEADERS_ONCE([unistd.h ucontext.h]) + + AC_CHECK_TYPES([stack_t], , , [#include ]) + + dnl c-stack does not need -lsigsegv if the system has XSI heuristics. + if test "$gl_cv_lib_sigsegv" = yes \ + && test $"ac_cv_sys_xsi_stack_overflow_heuristic" != yes ; then + AC_SUBST([LIBCSTACK], [$LIBSIGSEGV]) + AC_SUBST([LTLIBCSTACK], [$LTLIBSIGSEGV]) + fi +]) + +AC_DEFUN([gl_C_STACK], +[ + dnl Prerequisites of lib/c-stack.c. + gl_PREREQ_C_STACK +]) diff --git a/coreseek/m4-1.4.13/m4/cloexec.m4 b/coreseek/m4-1.4.13/m4/cloexec.m4 new file mode 100644 index 0000000..4c4e26a --- /dev/null +++ b/coreseek/m4-1.4.13/m4/cloexec.m4 @@ -0,0 +1,10 @@ +#serial 6 +dnl Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_CLOEXEC], +[ + AC_LIBOBJ([cloexec]) +]) diff --git a/coreseek/m4-1.4.13/m4/close-stream.m4 b/coreseek/m4-1.4.13/m4/close-stream.m4 new file mode 100644 index 0000000..b1f9d54 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/close-stream.m4 @@ -0,0 +1,13 @@ +#serial 3 +dnl Copyright (C) 2006-2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_CLOSE_STREAM], +[ + AC_LIBOBJ([close-stream]) + + dnl Prerequisites of lib/close-stream.c. + : +]) diff --git a/coreseek/m4-1.4.13/m4/closein.m4 b/coreseek/m4-1.4.13/m4/closein.m4 new file mode 100644 index 0000000..bf8ff38 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/closein.m4 @@ -0,0 +1,13 @@ +# closein.m4 serial 1 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_CLOSEIN], +[ + AC_LIBOBJ([closein]) + + dnl Prerequisites of lib/closein.c. + : +]) diff --git a/coreseek/m4-1.4.13/m4/closeout.m4 b/coreseek/m4-1.4.13/m4/closeout.m4 new file mode 100644 index 0000000..55a65f0 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/closeout.m4 @@ -0,0 +1,13 @@ +# closeout.m4 serial 5 +dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_CLOSEOUT], +[ + AC_LIBOBJ([closeout]) + + dnl Prerequisites of lib/closeout.c. + : +]) diff --git a/coreseek/m4-1.4.13/m4/codeset.m4 b/coreseek/m4-1.4.13/m4/codeset.m4 new file mode 100644 index 0000000..413217b --- /dev/null +++ b/coreseek/m4-1.4.13/m4/codeset.m4 @@ -0,0 +1,21 @@ +# codeset.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 2000-2002, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET); return !cs;], + [am_cv_langinfo_codeset=yes], + [am_cv_langinfo_codeset=no]) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE([HAVE_LANGINFO_CODESET], [1], + [Define if you have and nl_langinfo(CODESET).]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/config-h.m4 b/coreseek/m4-1.4.13/m4/config-h.m4 new file mode 100644 index 0000000..807d515 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/config-h.m4 @@ -0,0 +1,13 @@ +# Say that -DHAVE_CONFIG_H is not needed. + +dnl Copyright (C) 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +# This package's source files all include config.h unconditionally, +# so there's no need to pass -DHAVE_CONFIG_H to the compiler. +AC_DEFUN([gl_CONFIG_H], + [AC_CONFIG_COMMANDS_PRE([test "X$DEFS" = X-DHAVE_CONFIG_H && DEFS=])]) diff --git a/coreseek/m4-1.4.13/m4/dirname.m4 b/coreseek/m4-1.4.13/m4/dirname.m4 new file mode 100644 index 0000000..e35da96 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/dirname.m4 @@ -0,0 +1,18 @@ +#serial 7 -*- autoconf -*- +dnl Copyright (C) 2002-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_DIRNAME], +[ + AC_LIBOBJ([basename]) + AC_LIBOBJ([dirname]) + AC_LIBOBJ([stripslash]) + + dnl Prerequisites of lib/dirname.h. + AC_REQUIRE([gl_AC_DOS]) + AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) + + dnl No prerequisites of lib/basename.c, lib/dirname.c, lib/stripslash.c. +]) diff --git a/coreseek/m4-1.4.13/m4/dos.m4 b/coreseek/m4-1.4.13/m4/dos.m4 new file mode 100644 index 0000000..dd59571 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/dos.m4 @@ -0,0 +1,71 @@ +#serial 10 -*- autoconf -*- + +# Define some macros required for proper operation of code in lib/*.c +# on MSDOS/Windows systems. + +# Copyright (C) 2000, 2001, 2004, 2005, 2006 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# From Jim Meyering. + +AC_DEFUN([gl_AC_DOS], + [ + AC_CACHE_CHECK([whether system is Windows or MSDOS], [ac_cv_win_or_dos], + [ + AC_TRY_COMPILE([], + [#if !defined _WIN32 && !defined __WIN32__ && !defined __MSDOS__ && !defined __CYGWIN__ +neither MSDOS nor Windows +#endif], + [ac_cv_win_or_dos=yes], + [ac_cv_win_or_dos=no]) + ]) + + if test x"$ac_cv_win_or_dos" = xyes; then + ac_fs_accepts_drive_letter_prefix=1 + ac_fs_backslash_is_file_name_separator=1 + AC_CACHE_CHECK([whether drive letter can start relative path], + [ac_cv_drive_letter_can_be_relative], + [ + AC_TRY_COMPILE([], + [#if defined __CYGWIN__ +drive letters are always absolute +#endif], + [ac_cv_drive_letter_can_be_relative=yes], + [ac_cv_drive_letter_can_be_relative=no]) + ]) + if test x"$ac_cv_drive_letter_can_be_relative" = xyes; then + ac_fs_drive_letter_can_be_relative=1 + else + ac_fs_drive_letter_can_be_relative=0 + fi + else + ac_fs_accepts_drive_letter_prefix=0 + ac_fs_backslash_is_file_name_separator=0 + ac_fs_drive_letter_can_be_relative=0 + fi + + AC_DEFINE_UNQUOTED([FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX], + $ac_fs_accepts_drive_letter_prefix, + [Define on systems for which file names may have a so-called + `drive letter' prefix, define this to compute the length of that + prefix, including the colon.]) + + AH_VERBATIM(ISSLASH, + [#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#else +# define ISSLASH(C) ((C) == '/') +#endif]) + + AC_DEFINE_UNQUOTED([FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR], + $ac_fs_backslash_is_file_name_separator, + [Define if the backslash character may also serve as a file name + component separator.]) + + AC_DEFINE_UNQUOTED([FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE], + $ac_fs_drive_letter_can_be_relative, + [Define if a drive letter prefix denotes a relative path if it is + not followed by a file name component separator.]) + ]) diff --git a/coreseek/m4-1.4.13/m4/double-slash-root.m4 b/coreseek/m4-1.4.13/m4/double-slash-root.m4 new file mode 100644 index 0000000..8c6841b --- /dev/null +++ b/coreseek/m4-1.4.13/m4/double-slash-root.m4 @@ -0,0 +1,38 @@ +# double-slash-root.m4 serial 4 -*- Autoconf -*- +dnl Copyright (C) 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_DOUBLE_SLASH_ROOT], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], + [ if test x"$cross_compiling" = xyes ; then + # When cross-compiling, there is no way to tell whether // is special + # short of a list of hosts. However, the only known hosts to date + # that have a distinct // are Apollo DomainOS (too old to port to), + # Cygwin, and z/OS. If anyone knows of another system for which // has + # special semantics and is distinct from /, please report it to + # . + case $host in + *-cygwin | i370-ibm-openedition) + gl_cv_double_slash_root=yes ;; + *) + # Be optimistic and assume that / and // are the same when we + # don't know. + gl_cv_double_slash_root='unknown, assuming no' ;; + esac + else + set x `ls -di / // 2>/dev/null` + if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then + gl_cv_double_slash_root=no + else + gl_cv_double_slash_root=yes + fi + fi]) + if test "$gl_cv_double_slash_root" = yes; then + AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], + [Define to 1 if // is a file system root distinct from /.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/eealloc.m4 b/coreseek/m4-1.4.13/m4/eealloc.m4 new file mode 100644 index 0000000..3c9c0b5 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/eealloc.m4 @@ -0,0 +1,32 @@ +# eealloc.m4 serial 2 +dnl Copyright (C) 2003, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EEALLOC], +[ + AC_REQUIRE([gl_EEMALLOC]) + AC_REQUIRE([gl_EEREALLOC]) + AC_REQUIRE([AC_C_INLINE]) +]) + +AC_DEFUN([gl_EEMALLOC], +[ + _AC_FUNC_MALLOC_IF( + [gl_cv_func_malloc_0_nonnull=1], + [gl_cv_func_malloc_0_nonnull=0]) + AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], + [If malloc(0) is != NULL, define this to 1. Otherwise define this + to 0.]) +]) + +AC_DEFUN([gl_EEREALLOC], +[ + _AC_FUNC_REALLOC_IF( + [gl_cv_func_realloc_0_nonnull=1], + [gl_cv_func_realloc_0_nonnull=0]) + AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], + [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this + to 0.]) +]) diff --git a/coreseek/m4-1.4.13/m4/environ.m4 b/coreseek/m4-1.4.13/m4/environ.m4 new file mode 100644 index 0000000..b17bb60 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/environ.m4 @@ -0,0 +1,36 @@ +# environ.m4 serial 2 +dnl Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_ENVIRON], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + dnl Persuade glibc to declare environ. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + gt_CHECK_VAR_DECL([#include ], environ) + if test $gt_cv_var_environ_declaration != yes; then + HAVE_DECL_ENVIRON=0 + fi +]) + +# Check if a variable is properly declared. +# gt_CHECK_VAR_DECL(includes,variable) +AC_DEFUN([gt_CHECK_VAR_DECL], +[ + define([gt_cv_var], [gt_cv_var_]$2[_declaration]) + AC_MSG_CHECKING([if $2 is properly declared]) + AC_CACHE_VAL([gt_cv_var], [ + AC_TRY_COMPILE([$1 + extern struct { int foo; } $2;], + [$2.foo = 1;], + gt_cv_var=no, + gt_cv_var=yes)]) + AC_MSG_RESULT([$gt_cv_var]) + if test $gt_cv_var = yes; then + AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z])[_DECL], 1, + [Define if you have the declaration of $2.]) + fi + undefine([gt_cv_var]) +]) diff --git a/coreseek/m4-1.4.13/m4/errno_h.m4 b/coreseek/m4-1.4.13/m4/errno_h.m4 new file mode 100644 index 0000000..4d77672 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/errno_h.m4 @@ -0,0 +1,113 @@ +# errno_h.m4 serial 4 +dnl Copyright (C) 2004, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This macro must pass through AC_REQUIRE (never directly invoke it). +AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ + AC_EGREP_CPP([booboo],[ +#include +#if !defined ENOMSG +booboo +#endif +#if !defined EIDRM +booboo +#endif +#if !defined ENOLINK +booboo +#endif +#if !defined EPROTO +booboo +#endif +#if !defined EMULTIHOP +booboo +#endif +#if !defined EBADMSG +booboo +#endif +#if !defined EOVERFLOW +booboo +#endif +#if !defined ENOTSUP +booboo +#endif +#if !defined ECANCELED +booboo +#endif + ], + [gl_cv_header_errno_h_complete=no], + [gl_cv_header_errno_h_complete=yes]) + ]) + if test $gl_cv_header_errno_h_complete = yes; then + ERRNO_H='' + else + gl_CHECK_NEXT_HEADERS([errno.h]) + ERRNO_H='errno.h' + fi + AC_SUBST([ERRNO_H]) + gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) + gl_REPLACE_ERRNO_VALUE([ENOLINK]) + gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) +]) + +# Assuming $1 = EOVERFLOW. +# The EOVERFLOW errno value ought to be defined in , according to +# POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and +# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. +# Check for the value of EOVERFLOW. +# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. +AC_DEFUN([gl_REPLACE_ERRNO_VALUE], +[ + if test -n "$ERRNO_H"; then + AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ + AC_EGREP_CPP([yes],[ +#include +#ifdef ]$1[ +yes +#endif + ], + [gl_cv_header_errno_h_]$1[=yes], + [gl_cv_header_errno_h_]$1[=no]) + if test $gl_cv_header_errno_h_]$1[ = no; then + AC_EGREP_CPP([yes],[ +#define _XOPEN_SOURCE_EXTENDED 1 +#include +#ifdef ]$1[ +yes +#endif + ], [gl_cv_header_errno_h_]$1[=hidden]) + if test $gl_cv_header_errno_h_]$1[ = hidden; then + dnl The macro exists but is hidden. + dnl Define it to the same value. + AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include +]) + fi + fi + ]) + case $gl_cv_header_errno_h_]$1[ in + yes | no) + ]$1[_HIDDEN=0; ]$1[_VALUE= + ;; + *) + ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" + ;; + esac + AC_SUBST($1[_HIDDEN]) + AC_SUBST($1[_VALUE]) + fi +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) diff --git a/coreseek/m4-1.4.13/m4/error.m4 b/coreseek/m4-1.4.13/m4/error.m4 new file mode 100644 index 0000000..7c7746e --- /dev/null +++ b/coreseek/m4-1.4.13/m4/error.m4 @@ -0,0 +1,22 @@ +#serial 11 + +# Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_ERROR], +[ + AC_FUNC_ERROR_AT_LINE + dnl Note: AC_FUNC_ERROR_AT_LINE does AC_LIBSOURCES([error.h, error.c]). + gl_PREREQ_ERROR +]) + +# Prerequisites of lib/error.c. +AC_DEFUN([gl_PREREQ_ERROR], +[ + AC_REQUIRE([AC_FUNC_STRERROR_R]) + : +]) diff --git a/coreseek/m4-1.4.13/m4/execute.m4 b/coreseek/m4-1.4.13/m4/execute.m4 new file mode 100644 index 0000000..b89d43a --- /dev/null +++ b/coreseek/m4-1.4.13/m4/execute.m4 @@ -0,0 +1,12 @@ +# execute.m4 serial 4 +dnl Copyright (C) 2003, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EXECUTE], +[ + dnl Prerequisites of lib/execute.c. + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([AC_TYPE_MODE_T]) +]) diff --git a/coreseek/m4-1.4.13/m4/exitfail.m4 b/coreseek/m4-1.4.13/m4/exitfail.m4 new file mode 100644 index 0000000..b7a691e --- /dev/null +++ b/coreseek/m4-1.4.13/m4/exitfail.m4 @@ -0,0 +1,13 @@ +# exitfail.m4 serial 6 +dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EXITFAIL], +[ + AC_LIBOBJ([exitfail]) + + dnl No prerequisites of lib/exitfail.c. + : +]) diff --git a/coreseek/m4-1.4.13/m4/exponentd.m4 b/coreseek/m4-1.4.13/m4/exponentd.m4 new file mode 100644 index 0000000..140cee4 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/exponentd.m4 @@ -0,0 +1,114 @@ +# exponentd.m4 serial 1 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], +[ + AC_CACHE_CHECK([where to find the exponent in a 'double'], + [gl_cv_cc_double_expbit0], + [ + AC_TRY_RUN([ +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ], + [gl_cv_cc_double_expbit0=`cat conftest.out`], + [gl_cv_cc_double_expbit0="unknown"], + [ + dnl On ARM, there are two 'double' floating-point formats, used by + dnl different sets of instructions: The older FPA instructions assume + dnl that they are stored in big-endian word order, while the words + dnl (like integer types) are stored in little-endian byte order. + dnl The newer VFP instructions assume little-endian order consistenly. + AC_EGREP_CPP([mixed_endianness], [ +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + ], + [gl_cv_cc_double_expbit0="unknown"], + [ + pushdef([AC_MSG_CHECKING],[:])dnl + pushdef([AC_MSG_RESULT],[:])dnl + pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl + AC_C_BIGENDIAN( + [gl_cv_cc_double_expbit0="word 0 bit 20"], + [gl_cv_cc_double_expbit0="word 1 bit 20"], + [gl_cv_cc_double_expbit0="unknown"]) + popdef([AC_MSG_RESULT_UNQUOTED])dnl + popdef([AC_MSG_RESULT])dnl + popdef([AC_MSG_CHECKING])dnl + ]) + ]) + rm -f conftest.out + ]) + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'double'.]) + AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) + ;; + esac +]) diff --git a/coreseek/m4-1.4.13/m4/exponentf.m4 b/coreseek/m4-1.4.13/m4/exponentf.m4 new file mode 100644 index 0000000..7ff3413 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/exponentf.m4 @@ -0,0 +1,91 @@ +# exponentf.m4 serial 1 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION], +[ + AC_CACHE_CHECK([where to find the exponent in a 'float'], + [gl_cv_cc_float_expbit0], + [ + AC_TRY_RUN([ +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ], + [gl_cv_cc_float_expbit0=`cat conftest.out`], + [gl_cv_cc_float_expbit0="unknown"], + [gl_cv_cc_float_expbit0="word 0 bit 23"]) + rm -f conftest.out + ]) + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'float'.]) + AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.]) + ;; + esac +]) diff --git a/coreseek/m4-1.4.13/m4/exponentl.m4 b/coreseek/m4-1.4.13/m4/exponentl.m4 new file mode 100644 index 0000000..98e35eb --- /dev/null +++ b/coreseek/m4-1.4.13/m4/exponentl.m4 @@ -0,0 +1,97 @@ +# exponentl.m4 serial 2 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION], +[ + AC_REQUIRE([gl_BIGENDIAN]) + AC_CACHE_CHECK([where to find the exponent in a 'long double'], + [gl_cv_cc_long_double_expbit0], + [ + AC_TRY_RUN([ +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (long double x) +{ + memory_long_double m; + size_t i; + /* Clear it first, in case + sizeof (long double) < sizeof (memory_long_double). */ + memset (&m, 0, sizeof (memory_long_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25L); + add_to_ored_words (0.5L); + add_to_ored_words (1.0L); + add_to_ored_words (2.0L); + add_to_ored_words (4.0L); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ], + [gl_cv_cc_long_double_expbit0=`cat conftest.out`], + [gl_cv_cc_long_double_expbit0="unknown"], + [ + dnl When cross-compiling, we don't know. It depends on the + dnl ABI and compiler version. There are too many cases. + gl_cv_cc_long_double_expbit0="unknown" + ]) + rm -f conftest.out + ]) + case "$gl_cv_cc_long_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'long double'.]) + AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.]) + ;; + esac +]) diff --git a/coreseek/m4-1.4.13/m4/extensions.m4 b/coreseek/m4-1.4.13/m4/extensions.m4 new file mode 100644 index 0000000..ba6d5e1 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/extensions.m4 @@ -0,0 +1,104 @@ +# serial 8 -*- Autoconf -*- +# Enable extensions on systems that normally disable them. + +# Copyright (C) 2003, 2006-2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS +# Autoconf. Perhaps we can remove this once we can assume Autoconf +# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly +# enough in this area it's likely we'll need to redefine +# AC_USE_SYSTEM_EXTENSIONS for quite some time. + +# AC_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +# Remember that #undef in AH_VERBATIM gets replaced with #define by +# AC_DEFINE. The goal here is to define all known feature-enabling +# macros, then, if reports of conflicts are made, disable macros that +# cause problems on some platforms (such as __EXTENSIONS__). +AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], +[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl +AC_BEFORE([$0], [AC_RUN_IFELSE])dnl + + AC_REQUIRE([AC_CANONICAL_HOST]) + + AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) + if test "$MINIX" = yes; then + AC_DEFINE([_POSIX_SOURCE], [1], + [Define to 1 if you need to in order for `stat' and other + things to work.]) + AC_DEFINE([_POSIX_1_SOURCE], [2], + [Define to 2 if the system does not provide POSIX.1 features + except with this defined.]) + AC_DEFINE([_MINIX], [1], + [Define to 1 if on MINIX.]) + fi + + dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, + dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already + dnl provided. + case "$host_os" in + hpux*) + AC_DEFINE([_XOPEN_SOURCE], [500], + [Define to 500 only on HP-UX.]) + ;; + esac + + AH_VERBATIM([__EXTENSIONS__], +[/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif +]) + AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], + [ac_cv_safe_to_define___extensions__], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ +# define __EXTENSIONS__ 1 + ]AC_INCLUDES_DEFAULT])], + [ac_cv_safe_to_define___extensions__=yes], + [ac_cv_safe_to_define___extensions__=no])]) + test $ac_cv_safe_to_define___extensions__ = yes && + AC_DEFINE([__EXTENSIONS__]) + AC_DEFINE([_ALL_SOURCE]) + AC_DEFINE([_GNU_SOURCE]) + AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) + AC_DEFINE([_TANDEM_SOURCE]) +])# AC_USE_SYSTEM_EXTENSIONS + +# gl_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], +[ + dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. + dnl gnulib does not need it. But if it gets required by third-party macros + dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a + dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". + dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, + dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. + AC_REQUIRE([AC_GNU_SOURCE]) + + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +]) diff --git a/coreseek/m4-1.4.13/m4/fatal-signal.m4 b/coreseek/m4-1.4.13/m4/fatal-signal.m4 new file mode 100644 index 0000000..e8b9bf9 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/fatal-signal.m4 @@ -0,0 +1,12 @@ +# fatal-signal.m4 serial 7 +dnl Copyright (C) 2003-2004, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FATAL_SIGNAL], +[ + AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + gl_PREREQ_SIG_HANDLER_H +]) diff --git a/coreseek/m4-1.4.13/m4/fcntl_h.m4 b/coreseek/m4-1.4.13/m4/fcntl_h.m4 new file mode 100644 index 0000000..4a7fc42 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/fcntl_h.m4 @@ -0,0 +1,94 @@ +# Configure fcntl.h. +dnl Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_FCNTL_H], +[ + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + #include + #include + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif + #ifndef O_NOFOLLOW + #define O_NOFOLLOW 0 + #endif + static int const constants[] = + { + O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, + O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY + }; + ]], + [[ + int status = !constants; + { + static char const sym[] = "conftest.sym"; + if (symlink (".", sym) != 0 + || close (open (sym, O_RDONLY | O_NOFOLLOW)) == 0) + status |= 32; + } + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + char c; + struct stat st0, st1; + if (fd < 0 + || fstat (fd, &st0) != 0 + || sleep (1) != 0 + || read (fd, &c, 1) != 1 + || close (fd) != 0 + || stat (file, &st1) != 0 + || st0.st_atime != st1.st_atime) + status |= 64; + } + return status;]])], + [gl_cv_header_working_fcntl_h=yes], + [case $? in #( + 32) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 96) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac], + [gl_cv_header_working_fcntl_h=cross-compiling])]) + + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], + [Define to 1 if O_NOATIME works.]) + + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], + [Define to 1 if O_NOFOLLOW works.]) + + gl_CHECK_NEXT_HEADERS([fcntl.h]) + FCNTL_H='fcntl.h' + AC_SUBST([FCNTL_H]) +]) + +AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_FCNTL_H_DEFAULTS], +[ + GNULIB_OPEN=0; AC_SUBST([GNULIB_OPEN]) + dnl Assume proper GNU behavior unless another module says otherwise. + REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) +]) diff --git a/coreseek/m4-1.4.13/m4/fflush.m4 b/coreseek/m4-1.4.13/m4/fflush.m4 new file mode 100644 index 0000000..da30e1f --- /dev/null +++ b/coreseek/m4-1.4.13/m4/fflush.m4 @@ -0,0 +1,82 @@ +# fflush.m4 serial 7 + +# Copyright (C) 2007-2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Eric Blake + +dnl Find out how to obey POSIX semantics of fflush(stdin) discarding +dnl unread input on seekable streams, rather than C99 undefined semantics. + +AC_DEFUN([gl_FUNC_FFLUSH], +[ + AC_CACHE_CHECK([whether fflush works on input streams], + [gl_cv_func_fflush_stdin], + [echo hello world > conftest.txt + AC_RUN_IFELSE([AC_LANG_PROGRAM( + [[ +#include +#include + ]], [[FILE *f = fopen ("conftest.txt", "r"); + char buffer[10]; + int fd; + int c; + if (f == NULL) + return 1; + fd = fileno (f); + if (fd < 0 || fread (buffer, 1, 5, f) != 5) + return 2; + /* For deterministic results, ensure f read a bigger buffer. */ + if (lseek (fd, 0, SEEK_CUR) == 5) + return 3; + /* POSIX requires fflush-fseek to set file offset of fd. This fails + on BSD systems and on mingw. */ + if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0) + return 4; + if (lseek (fd, 0, SEEK_CUR) != 5) + return 5; + /* Verify behaviour of fflush after ungetc. See + */ + /* Verify behaviour of fflush after a backup ungetc. This fails on + mingw. */ + c = fgetc (f); + ungetc (c, f); + fflush (f); + if (fgetc (f) != c) + return 6; + /* Verify behaviour of fflush after a non-backup ungetc. This fails + on glibc 2.8 and on BSD systems. */ + c = fgetc (f); + ungetc ('@', f); + fflush (f); + if (fgetc (f) != c) + return 7; + return 0; + ]])], [gl_cv_func_fflush_stdin=yes], [gl_cv_func_fflush_stdin=no], + [dnl Pessimistically assume fflush is broken. + gl_cv_func_fflush_stdin=no]) + rm conftest.txt + ]) + if test $gl_cv_func_fflush_stdin = no; then + gl_REPLACE_FFLUSH + fi +]) + +AC_DEFUN([gl_REPLACE_FFLUSH], +[ + AC_LIBOBJ([fflush]) + AC_LIBOBJ([fseeko]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + REPLACE_FFLUSH=1 + REPLACE_FSEEKO=1 + gl_PREREQ_FFLUSH +]) + +# Prerequisites of lib/fflush.c. +AC_DEFUN([gl_PREREQ_FFLUSH], +[ + AC_REQUIRE([AC_C_INLINE]) + : +]) diff --git a/coreseek/m4-1.4.13/m4/filenamecat.m4 b/coreseek/m4-1.4.13/m4/filenamecat.m4 new file mode 100644 index 0000000..77a3b6a --- /dev/null +++ b/coreseek/m4-1.4.13/m4/filenamecat.m4 @@ -0,0 +1,13 @@ +# filenamecat.m4 serial 9 +dnl Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FILE_NAME_CONCAT], +[ + AC_LIBOBJ([filenamecat]) + + dnl Prerequisites of lib/filenamecat.c. + AC_CHECK_FUNCS_ONCE([mempcpy]) +]) diff --git a/coreseek/m4-1.4.13/m4/float_h.m4 b/coreseek/m4-1.4.13/m4/float_h.m4 new file mode 100644 index 0000000..d36e3a4 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/float_h.m4 @@ -0,0 +1,19 @@ +# float_h.m4 serial 3 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FLOAT_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + FLOAT_H= + case "$host_os" in + beos* | openbsd*) + FLOAT_H=float.h + gl_CHECK_NEXT_HEADERS([float.h]) + ;; + esac + AC_SUBST([FLOAT_H]) +]) diff --git a/coreseek/m4-1.4.13/m4/fopen.m4 b/coreseek/m4-1.4.13/m4/fopen.m4 new file mode 100644 index 0000000..aabe022 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/fopen.m4 @@ -0,0 +1,61 @@ +# fopen.m4 serial 5 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FOPEN], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw* | pw*) + dnl Replace fopen, for handling of "/dev/null". + REPLACE_FOPEN=1 + dnl fopen on mingw also has the trailing slash bug. + gl_cv_func_fopen_slash="guessing no" + ;; + *) + dnl fopen("foo/", "w") should not create a file when the file name has a + dnl trailing slash. + AC_CACHE_CHECK([whether fopen recognizes a trailing slash], + [gl_cv_func_fopen_slash], + [ + AC_TRY_RUN([ +#include +#include +int main () +{ + return fopen ("conftest.sl/", "w") != NULL; +}], [gl_cv_func_fopen_slash=yes], [gl_cv_func_fopen_slash=no], + [ +changequote(,)dnl + case "$host_os" in + solaris2.[0-9]*) gl_cv_func_fopen_slash="guessing no" ;; + hpux*) gl_cv_func_fopen_slash="guessing no" ;; + *) gl_cv_func_fopen_slash="guessing yes" ;; + esac +changequote([,])dnl + ]) + rm -f conftest.sl + ]) + ;; + esac + case "$gl_cv_func_fopen_slash" in + *no) + AC_DEFINE([FOPEN_TRAILING_SLASH_BUG], [1], + [Define to 1 if fopen() fails to recognize a trailing slash.]) + REPLACE_FOPEN=1 + ;; + esac + if test $REPLACE_FOPEN = 1; then + AC_LIBOBJ([fopen]) + gl_PREREQ_FOPEN + fi +]) + +# Prerequisites of lib/fopen.c. +AC_DEFUN([gl_PREREQ_FOPEN], +[ + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/coreseek/m4-1.4.13/m4/fpending.m4 b/coreseek/m4-1.4.13/m4/fpending.m4 new file mode 100644 index 0000000..7860d70 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/fpending.m4 @@ -0,0 +1,85 @@ +# serial 14 + +# Copyright (C) 2000-2001, 2004-2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering +dnl Using code from emacs, based on suggestions from Paul Eggert +dnl and Ulrich Drepper. + +dnl Find out how to determine the number of pending output bytes on a stream. +dnl glibc (2.1.93 and newer) and Solaris provide __fpending. On other systems, +dnl we have to grub around in the FILE struct. + +AC_DEFUN([gl_FUNC_FPENDING], +[ + AC_CHECK_HEADERS_ONCE([stdio_ext.h]) + AC_CHECK_FUNCS_ONCE([__fpending]) + fp_headers=' +# include +# if HAVE_STDIO_EXT_H +# include +# endif +' + AC_CHECK_DECLS([__fpending], , , $fp_headers) + if test $ac_cv_func___fpending = no; then + AC_CACHE_CHECK( + [how to determine the number of pending output bytes on a stream], + ac_cv_sys_pending_output_n_bytes, + [ + for ac_expr in \ + \ + '# glibc2' \ + 'fp->_IO_write_ptr - fp->_IO_write_base' \ + \ + '# traditional Unix' \ + 'fp->_ptr - fp->_base' \ + \ + '# BSD' \ + 'fp->_p - fp->_bf._base' \ + \ + '# SCO, Unixware' \ + '(fp->__ptr ? fp->__ptr - fp->__base : 0)' \ + \ + '# QNX' \ + '(fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0)' \ + \ + '# old glibc?' \ + 'fp->__bufp - fp->__buffer' \ + \ + '# old glibc iostream?' \ + 'fp->_pptr - fp->_pbase' \ + \ + '# emx+gcc' \ + 'fp->_ptr - fp->_buffer' \ + \ + '# VMS' \ + '(*fp)->_ptr - (*fp)->_base' \ + \ + '# e.g., DGUX R4.11; the info is not available' \ + 1 \ + ; do + + # Skip each embedded comment. + case "$ac_expr" in '#'*) continue;; esac + + AC_TRY_COMPILE( + [#include + ], + [FILE *fp = stdin; (void) ($ac_expr);], + fp_done=yes + ) + test "$fp_done" = yes && break + done + + ac_cv_sys_pending_output_n_bytes=$ac_expr + ] + ) + AC_DEFINE_UNQUOTED([PENDING_OUTPUT_N_BYTES], + $ac_cv_sys_pending_output_n_bytes, + [the number of pending output bytes on stream `fp']) + AC_LIBOBJ([fpending]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/fpieee.m4 b/coreseek/m4-1.4.13/m4/fpieee.m4 new file mode 100644 index 0000000..9f4a92c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/fpieee.m4 @@ -0,0 +1,52 @@ +# fpieee.m4 serial 1 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl IEEE 754 standardized three items: +dnl - The formats of single-float and double-float - nowadays commonly +dnl available as 'float' and 'double' in C and C++. +dnl No autoconf test needed. +dnl - The overflow and division by zero behaviour: The result are values +dnl '±Inf' and 'NaN', rather than exceptions as it was before. +dnl This file provides an autoconf macro for ensuring this behaviour of +dnl floating-point operations. +dnl - A set of conditions (overflow, underflow, inexact, etc.) which can +dnl be configured to trigger an exception. +dnl This cannot be done in a portable way: it depends on the compiler, +dnl libc, kernel, and CPU. No autoconf macro is provided for this. + +dnl Ensure non-trapping behaviour of floating-point overflow and +dnl floating-point division by zero. +dnl (For integer overflow, see gcc's -ftrapv option; for integer division by +dnl zero, see the autoconf macro in intdiv0.m4.) + +AC_DEFUN([gl_FP_IEEE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + # IEEE behaviour is the default on all CPUs except Alpha and SH + # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 + # and the GCC 4.1.2 manual). + case "$host_cpu" in + alpha*) + # On Alpha systems, a compiler option provides the behaviour. + # See the ieee(3) manual page, also available at + # + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + else + # Compaq (ex-DEC) C has the option -ieee. + CPPFLAGS="$CPPFLAGS -ieee" + fi + ;; + sh*) + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + fi + ;; + esac +]) diff --git a/coreseek/m4-1.4.13/m4/fpurge.m4 b/coreseek/m4-1.4.13/m4/fpurge.m4 new file mode 100644 index 0000000..796b66c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/fpurge.m4 @@ -0,0 +1,12 @@ +# fpurge.m4 serial 2 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FPURGE], +[ + AC_CHECK_FUNCS_ONCE([fpurge]) + AC_CHECK_FUNCS_ONCE([__fpurge]) + AC_CHECK_DECLS([fpurge], , , [#include ]) +]) diff --git a/coreseek/m4-1.4.13/m4/freading.m4 b/coreseek/m4-1.4.13/m4/freading.m4 new file mode 100644 index 0000000..b1f9089 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/freading.m4 @@ -0,0 +1,10 @@ +# freading.m4 serial 1 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FREADING], +[ + AC_CHECK_FUNCS_ONCE([__freading]) +]) diff --git a/coreseek/m4-1.4.13/m4/frexp.m4 b/coreseek/m4-1.4.13/m4/frexp.m4 new file mode 100644 index 0000000..6c91112 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/frexp.m4 @@ -0,0 +1,146 @@ +# frexp.m4 serial 7 +dnl Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FREXP], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + FREXP_LIBM= + AC_CACHE_CHECK([whether frexp() can be used without linking with libm], + [gl_cv_func_frexp_no_libm], + [ + AC_TRY_LINK([#include + double x;], + [int e; return frexp (x, &e) > 0;], + [gl_cv_func_frexp_no_libm=yes], + [gl_cv_func_frexp_no_libm=no]) + ]) + if test $gl_cv_func_frexp_no_libm = no; then + AC_CACHE_CHECK([whether frexp() can be used with libm], + [gl_cv_func_frexp_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + double x;], + [int e; return frexp (x, &e) > 0;], + [gl_cv_func_frexp_in_libm=yes], + [gl_cv_func_frexp_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_frexp_in_libm = yes; then + FREXP_LIBM=-lm + fi + fi + if test $gl_cv_func_frexp_no_libm = yes \ + || test $gl_cv_func_frexp_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $FREXP_LIBM" + gl_FUNC_FREXP_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp=yes ;; + *) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;; + esac + else + gl_func_frexp=no + fi + if test $gl_func_frexp = yes; then + AC_DEFINE([HAVE_FREXP], [1], + [Define if the frexp() function is available and works.]) + else + AC_LIBOBJ([frexp]) + fi + AC_SUBST([FREXP_LIBM]) +]) + +AC_DEFUN([gl_FUNC_FREXP_NO_LIBM], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_CACHE_CHECK([whether frexp() can be used without linking with libm], + [gl_cv_func_frexp_no_libm], + [ + AC_TRY_LINK([#include + double x;], + [int e; return frexp (x, &e) > 0;], + [gl_cv_func_frexp_no_libm=yes], + [gl_cv_func_frexp_no_libm=no]) + ]) + if test $gl_cv_func_frexp_no_libm = yes; then + gl_FUNC_FREXP_WORKS + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp_no_libm=yes ;; + *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; + esac + else + gl_func_frexp_no_libm=no + dnl Set REPLACE_FREXP here because the system may have frexp in libm. + REPLACE_FREXP=1 + fi + if test $gl_func_frexp_no_libm = yes; then + AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], + [Define if the frexp() function is available in libc.]) + else + AC_LIBOBJ([frexp]) + fi +]) + +dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on +dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw), +dnl and on negative zero (this fails e.g. on NetBSD 4.99). +AC_DEFUN([gl_FUNC_FREXP_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works], + [ + AC_TRY_RUN([ +#include +#include +#include +int main() +{ + int i; + volatile double x; +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ + double zero = 0.0; + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + return 1; + } + /* Test on infinite numbers. */ + x = 1.0 / 0.0; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + return 1; + } + /* Test on negative zero. */ + x = -zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + return 1; + } + return 0; +}], [gl_cv_func_frexp_works=yes], [gl_cv_func_frexp_works=no], + [case "$host_os" in + netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";; + *) gl_cv_func_frexp_works="guessing yes";; + esac + ]) + ]) +]) diff --git a/coreseek/m4-1.4.13/m4/frexpl.m4 b/coreseek/m4-1.4.13/m4/frexpl.m4 new file mode 100644 index 0000000..c5da744 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/frexpl.m4 @@ -0,0 +1,186 @@ +# frexpl.m4 serial 9 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FREXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + FREXPL_LIBM= + AC_CACHE_CHECK([whether frexpl() can be used without linking with libm], + [gl_cv_func_frexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x;], + [int e; return frexpl (x, &e) > 0;], + [gl_cv_func_frexpl_no_libm=yes], + [gl_cv_func_frexpl_no_libm=no]) + ]) + if test $gl_cv_func_frexpl_no_libm = no; then + AC_CACHE_CHECK([whether frexpl() can be used with libm], + [gl_cv_func_frexpl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + long double x;], + [int e; return frexpl (x, &e) > 0;], + [gl_cv_func_frexpl_in_libm=yes], + [gl_cv_func_frexpl_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_frexpl_in_libm = yes; then + FREXPL_LIBM=-lm + fi + fi + if test $gl_cv_func_frexpl_no_libm = yes \ + || test $gl_cv_func_frexpl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $FREXPL_LIBM" + gl_FUNC_FREXPL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl=yes ;; + *) gl_func_frexpl=no; REPLACE_FREXPL=1; FREXPL_LIBM= ;; + esac + else + gl_func_frexpl=no + fi + if test $gl_func_frexpl = yes; then + AC_DEFINE([HAVE_FREXPL], [1], + [Define if the frexpl() function is available.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has frexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [#include ]) + else + HAVE_DECL_FREXPL=0 + AC_LIBOBJ([frexpl]) + fi + AC_SUBST([FREXPL_LIBM]) +]) + +AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_CACHE_CHECK([whether frexpl() can be used without linking with libm], + [gl_cv_func_frexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x;], + [int e; return frexpl (x, &e) > 0;], + [gl_cv_func_frexpl_no_libm=yes], + [gl_cv_func_frexpl_no_libm=no]) + ]) + if test $gl_cv_func_frexpl_no_libm = yes; then + gl_FUNC_FREXPL_WORKS + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], + [Define if the frexpl() function is available in libc.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has frexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [#include ]) + else + HAVE_DECL_FREXPL=0 + AC_LIBOBJ([frexpl]) + fi +]) + +dnl Test whether frexpl() works on finite numbers (this fails on +dnl MacOS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers +dnl (this fails on MacOS X 10.5/i386), and also on infinite numbers (this +dnl fails e.g. on IRIX 6.5 and mingw). +AC_DEFUN([gl_FUNC_FREXPL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works], + [ + AC_TRY_RUN([ +#include +#include +/* Override the values of , like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +extern long double frexpl (long double, int *); +int main() +{ + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + return 1; + } + /* Test on finite numbers that fails on MacOS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + return 1; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + return 1; + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On MacOS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + return 1; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + return 1; + } + return 0; +}], [gl_cv_func_frexpl_works=yes], [gl_cv_func_frexpl_works=no], + [case "$host_os" in + aix* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac + ]) + ]) +]) diff --git a/coreseek/m4-1.4.13/m4/fseeko.m4 b/coreseek/m4-1.4.13/m4/fseeko.m4 new file mode 100644 index 0000000..3d77365 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/fseeko.m4 @@ -0,0 +1,34 @@ +# fseeko.m4 serial 4 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FSEEKO], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) + + dnl Persuade glibc to declare fseeko(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko], + [ + AC_TRY_LINK([#include ], [fseeko (stdin, 0, 0);], + [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no]) + ]) + if test $gl_cv_func_fseeko = no; then + HAVE_FSEEKO=0 + gl_REPLACE_FSEEKO + elif test $gl_cv_var_stdin_large_offset = no; then + gl_REPLACE_FSEEKO + fi +]) + +AC_DEFUN([gl_REPLACE_FSEEKO], +[ + AC_LIBOBJ([fseeko]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + REPLACE_FSEEKO=1 +]) diff --git a/coreseek/m4-1.4.13/m4/ftello.m4 b/coreseek/m4-1.4.13/m4/ftello.m4 new file mode 100644 index 0000000..51308ef --- /dev/null +++ b/coreseek/m4-1.4.13/m4/ftello.m4 @@ -0,0 +1,34 @@ +# ftello.m4 serial 4 +dnl Copyright (C) 2007, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FTELLO], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) + + dnl Persuade glibc to declare fseeko(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_CACHE_CHECK([for ftello], [gl_cv_func_ftello], + [ + AC_TRY_LINK([#include ], [ftello (stdin);], + [gl_cv_func_ftello=yes], [gl_cv_func_ftello=no]) + ]) + if test $gl_cv_func_ftello = no; then + HAVE_FTELLO=0 + gl_REPLACE_FTELLO + elif test $gl_cv_var_stdin_large_offset = no; then + gl_REPLACE_FTELLO + fi +]) + +AC_DEFUN([gl_REPLACE_FTELLO], +[ + AC_LIBOBJ([ftello]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + REPLACE_FTELLO=1 +]) diff --git a/coreseek/m4-1.4.13/m4/getdtablesize.m4 b/coreseek/m4-1.4.13/m4/getdtablesize.m4 new file mode 100644 index 0000000..3237744 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/getdtablesize.m4 @@ -0,0 +1,15 @@ +# getdtablesize.m4 serial 1 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_GETDTABLESIZE], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([getdtablesize]) + if test $ac_cv_func_getdtablesize != yes; then + HAVE_GETDTABLESIZE=0 + AC_LIBOBJ([getdtablesize]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/getopt.m4 b/coreseek/m4-1.4.13/m4/getopt.m4 new file mode 100644 index 0000000..9b683c2 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/getopt.m4 @@ -0,0 +1,83 @@ +# getopt.m4 serial 14 +dnl Copyright (C) 2002-2006, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# The getopt module assume you want GNU getopt, with getopt_long etc, +# rather than vanilla POSIX getopt. This means your code should +# always include for the getopt prototypes. + +AC_DEFUN([gl_GETOPT_SUBSTITUTE], +[ + AC_LIBOBJ([getopt]) + AC_LIBOBJ([getopt1]) + gl_GETOPT_SUBSTITUTE_HEADER + gl_PREREQ_GETOPT +]) + +AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], +[ + GETOPT_H=getopt.h + AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], + [Define to rpl_ if the getopt replacement functions and variables + should be used.]) + AC_SUBST([GETOPT_H]) +]) + +AC_DEFUN([gl_GETOPT_CHECK_HEADERS], +[ + if test -z "$GETOPT_H"; then + AC_CHECK_HEADERS([getopt.h], [], [GETOPT_H=getopt.h]) + fi + + if test -z "$GETOPT_H"; then + AC_CHECK_FUNCS([getopt_long_only], [], [GETOPT_H=getopt.h]) + fi + + dnl BSD getopt_long uses an incompatible method to reset option processing, + dnl and (as of 2004-10-15) mishandles optional option-arguments. + if test -z "$GETOPT_H"; then + AC_CHECK_DECL([optreset], [GETOPT_H=getopt.h], [], [#include ]) + fi + + dnl Solaris 10 getopt doesn't handle `+' as a leading character in an + dnl option string (as of 2005-05-05). + if test -z "$GETOPT_H"; then + AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_gnu_getopt], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM([[#include ]], + [[ + char *myargv[3]; + myargv[0] = "conftest"; + myargv[1] = "-+"; + myargv[2] = 0; + return getopt (2, myargv, "+a") != '?'; + ]])], + [gl_cv_func_gnu_getopt=yes], + [gl_cv_func_gnu_getopt=no], + [dnl cross compiling - pessimistically guess based on decls + dnl Solaris 10 getopt doesn't handle `+' as a leading character in an + dnl option string (as of 2005-05-05). + AC_CHECK_DECL([getopt_clip], + [gl_cv_func_gnu_getopt=no], [gl_cv_func_gnu_getopt=yes], + [#include ])])]) + if test "$gl_cv_func_gnu_getopt" = "no"; then + GETOPT_H=getopt.h + fi + fi +]) + +AC_DEFUN([gl_GETOPT_IFELSE], +[ + AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) + AS_IF([test -n "$GETOPT_H"], [$1], [$2]) +]) + +AC_DEFUN([gl_GETOPT], [gl_GETOPT_IFELSE([gl_GETOPT_SUBSTITUTE])]) + +# Prerequisites of lib/getopt*. +AC_DEFUN([gl_PREREQ_GETOPT], +[ + AC_CHECK_DECLS_ONCE([getenv]) +]) diff --git a/coreseek/m4-1.4.13/m4/gettext.m4 b/coreseek/m4-1.4.13/m4/gettext.m4 new file mode 100644 index 0000000..d90c850 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/gettext.m4 @@ -0,0 +1,381 @@ +# gettext.m4 serial 62 (gettext-0.18) +dnl Copyright (C) 1995-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2006. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], + ifelse([$1], [external], + ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), + [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + gt_NEEDS_INIT + AM_GNU_GETTEXT_NEED([$2]) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl Add a version number to the cache macros. + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH([included-gettext], + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], + [AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], + [eval "$gt_func_gnugettext_libc=yes"], + [eval "$gt_func_gnugettext_libc=no"])]) + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + [$gt_func_gnugettext_libintl], + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [eval "$gt_func_gnugettext_libintl=yes"], + [eval "$gt_func_gnugettext_libintl=no"]) + dnl Now see whether libintl exists and depends on libiconv. + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE([ENABLE_NLS], [1], + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE([HAVE_GETTEXT], [1], + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE([HAVE_DCGETTEXT], [1], + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST([BUILD_INCLUDED_LIBINTL]) + AC_SUBST([USE_INCLUDED_LIBINTL]) + AC_SUBST([CATOBJEXT]) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST([DATADIRNAME]) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST([INSTOBJEXT]) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST([GENCAT]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST([INTLOBJS]) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST([INTLLIBS]) + + dnl Make all documented variables known to autoconf. + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + AC_SUBST([POSUB]) +]) + + +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ + m4_divert_text([DEFAULTS], [gt_needs=]) + m4_define([gt_NEEDS_INIT], []) +]) + + +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ + m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/coreseek/m4-1.4.13/m4/gettimeofday.m4 b/coreseek/m4-1.4.13/m4/gettimeofday.m4 new file mode 100644 index 0000000..0fec7d4 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/gettimeofday.m4 @@ -0,0 +1,101 @@ +# serial 12 + +# Copyright (C) 2001-2003, 2005, 2007, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering. + +AC_DEFUN([gl_FUNC_GETTIMEOFDAY], +[ + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([gl_HEADER_SYS_TIME_H]) + AC_CHECK_FUNCS_ONCE([gettimeofday]) + + AC_CACHE_CHECK([for gettimeofday with POSIX signature], + [gl_cv_func_gettimeofday_posix_signature], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + struct timeval c; + ]], + [[ + int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; + int x = f (&c, 0); + return !(x | c.tv_sec | c.tv_usec); + ]])], + [gl_cv_func_gettimeofday_posix_signature=yes], + [gl_cv_func_gettimeofday_posix_signature=no])]) + + gl_FUNC_GETTIMEOFDAY_CLOBBER + + if test $gl_cv_func_gettimeofday_posix_signature != yes; then + REPLACE_GETTIMEOFDAY=1 + SYS_TIME_H=sys/time.h + if test $gl_cv_func_gettimeofday_clobber != yes; then + AC_LIBOBJ([gettimeofday]) + gl_PREREQ_GETTIMEOFDAY + fi + fi +]) + + +dnl See if gettimeofday clobbers the static buffer that localtime uses +dnl for its return value. The gettimeofday function from Mac OS X 10.0.4 +dnl (i.e., Darwin 1.3.7) has this problem. +dnl +dnl If it does, then arrange to use gettimeofday and localtime only via +dnl the wrapper functions that work around the problem. + +AC_DEFUN([gl_FUNC_GETTIMEOFDAY_CLOBBER], +[ + AC_REQUIRE([gl_HEADER_SYS_TIME_H]) + + AC_CACHE_CHECK([whether gettimeofday clobbers localtime buffer], + [gl_cv_func_gettimeofday_clobber], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + #include + #include + ]], + [[ + time_t t = 0; + struct tm *lt; + struct tm saved_lt; + struct timeval tv; + lt = localtime (&t); + saved_lt = *lt; + gettimeofday (&tv, NULL); + return memcmp (lt, &saved_lt, sizeof (struct tm)) != 0; + ]])], + [gl_cv_func_gettimeofday_clobber=no], + [gl_cv_func_gettimeofday_clobber=yes], + dnl When crosscompiling, assume it is broken. + [gl_cv_func_gettimeofday_clobber=yes])]) + + if test $gl_cv_func_gettimeofday_clobber = yes; then + REPLACE_GETTIMEOFDAY=1 + SYS_TIME_H=sys/time.h + gl_GETTIMEOFDAY_REPLACE_LOCALTIME + AC_DEFINE([GETTIMEOFDAY_CLOBBERS_LOCALTIME], [1], + [Define if gettimeofday clobbers the localtime buffer.]) + fi +]) + +AC_DEFUN([gl_GETTIMEOFDAY_REPLACE_LOCALTIME], [ + AC_LIBOBJ([gettimeofday]) + gl_PREREQ_GETTIMEOFDAY + AC_DEFINE([gmtime], [rpl_gmtime], + [Define to rpl_gmtime if the replacement function should be used.]) + AC_DEFINE([localtime], [rpl_localtime], + [Define to rpl_localtime if the replacement function should be used.]) +]) + +# Prerequisites of lib/gettimeofday.c. +AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [ + AC_CHECK_HEADERS([sys/timeb.h]) + AC_CHECK_FUNCS([_ftime]) +]) diff --git a/coreseek/m4-1.4.13/m4/gl_list.m4 b/coreseek/m4-1.4.13/m4/gl_list.m4 new file mode 100644 index 0000000..86f6e00 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/gl_list.m4 @@ -0,0 +1,10 @@ +# gl_list.m4 serial 2 +dnl Copyright (C) 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LIST], +[ + AC_REQUIRE([gl_INLINE]) +]) diff --git a/coreseek/m4-1.4.13/m4/glibc21.m4 b/coreseek/m4-1.4.13/m4/glibc21.m4 new file mode 100644 index 0000000..93fbf47 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/glibc21.m4 @@ -0,0 +1,30 @@ +# glibc21.m4 serial 4 +dnl Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK([whether we are using the GNU C Library 2.1 or newer], + [ac_cv_gnu_library_2_1], + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + [ac_cv_gnu_library_2_1=yes], + [ac_cv_gnu_library_2_1=no]) + ] + ) + AC_SUBST([GLIBC21]) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) diff --git a/coreseek/m4-1.4.13/m4/gnulib-cache.m4 b/coreseek/m4-1.4.13/m4/gnulib-cache.m4 new file mode 100644 index 0000000..3c59620 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/gnulib-cache.m4 @@ -0,0 +1,83 @@ +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# +# This file represents the specification of how gnulib-tool is used. +# It acts as a cache: It is written and read by gnulib-tool. +# In projects using CVS, this file is meant to be stored in CVS, +# like the configure.ac and various Makefile.am files. + + +# Specification in the form of a command-line invocation: +# gnulib-tool --import --dir=. --local-dir=local --lib=libm4 --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --with-tests --avoid=lock-tests --avoid=tls-tests --no-libtool --macro-prefix=M4 announce-gen assert autobuild avltree-oset binary-io c-stack clean-temp cloexec close-stream closein config-h dirname error execute fdl-1.3 fflush filenamecat fopen fopen-safer fseeko gendocs getopt git-version-gen gnumakefile gnupload gpl-3.0 intprops memchr2 mkstemp obstack pipe progname regex sigaction stdbool stdint stdlib-safer strsignal strstr strtod strtol unlocked-io verror version-etc version-etc-fsf wait-process xalloc xprintf xvasprintf-posix + +# Specification in the form of a few gnulib-tool.m4 macro invocations: +gl_LOCAL_DIR([local]) +gl_MODULES([ + announce-gen + assert + autobuild + avltree-oset + binary-io + c-stack + clean-temp + cloexec + close-stream + closein + config-h + dirname + error + execute + fdl-1.3 + fflush + filenamecat + fopen + fopen-safer + fseeko + gendocs + getopt + git-version-gen + gnumakefile + gnupload + gpl-3.0 + intprops + memchr2 + mkstemp + obstack + pipe + progname + regex + sigaction + stdbool + stdint + stdlib-safer + strsignal + strstr + strtod + strtol + unlocked-io + verror + version-etc + version-etc-fsf + wait-process + xalloc + xprintf + xvasprintf-posix +]) +gl_AVOID([lock-tests tls-tests]) +gl_SOURCE_BASE([lib]) +gl_M4_BASE([m4]) +gl_PO_BASE([]) +gl_DOC_BASE([doc]) +gl_TESTS_BASE([tests]) +gl_WITH_TESTS +gl_LIB([libm4]) +gl_MAKEFILE_NAME([]) +gl_MACRO_PREFIX([M4]) +gl_PO_DOMAIN([]) diff --git a/coreseek/m4-1.4.13/m4/gnulib-common.m4 b/coreseek/m4-1.4.13/m4/gnulib-common.m4 new file mode 100644 index 0000000..c8fda20 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/gnulib-common.m4 @@ -0,0 +1,124 @@ +# gnulib-common.m4 serial 11 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# gl_COMMON +# is expanded unconditionally through gnulib-tool magic. +AC_DEFUN([gl_COMMON], [ + dnl Use AC_REQUIRE here, so that the code is expanded once only. + AC_REQUIRE([gl_00GNULIB]) + AC_REQUIRE([gl_COMMON_BODY]) +]) +AC_DEFUN([gl_COMMON_BODY], [ + AH_VERBATIM([isoc99_inline], +[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for MacOS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif]) + AH_VERBATIM([unused_parameter], +[/* Define as a marker that can be attached to function parameter declarations + for parameters that are not used. This helps to reduce warnings, such as + from GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _UNUSED_PARAMETER_ __attribute__ ((__unused__)) +#else +# define _UNUSED_PARAMETER_ +#endif +]) +]) + +# gl_MODULE_INDICATOR([modulename]) +# defines a C macro indicating the presence of the given module. +AC_DEFUN([gl_MODULE_INDICATOR], +[ + AC_DEFINE([GNULIB_]translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], + [Define to 1 when using the gnulib module ]$1[.]) +]) + +# m4_foreach_w +# is a backport of autoconf-2.59c's m4_foreach_w. +# Remove this macro when we can assume autoconf >= 2.60. +m4_ifndef([m4_foreach_w], + [m4_define([m4_foreach_w], + [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) + +# AC_PROG_MKDIR_P +# is a backport of autoconf-2.60's AC_PROG_MKDIR_P. +# Remove this macro when we can assume autoconf >= 2.60. +m4_ifdef([AC_PROG_MKDIR_P], [], [ + AC_DEFUN_ONCE([AC_PROG_MKDIR_P], + [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + MKDIR_P='$(mkdir_p)' + AC_SUBST([MKDIR_P])])]) + +# AC_C_RESTRICT +# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61, +# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++ +# works. +# This definition can be removed once autoconf >= 2.62 can be assumed. +AC_DEFUN([AC_C_RESTRICT], +[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], + [ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [[typedef int * int_ptr; + int foo (int_ptr $ac_kw ip) { + return ip[0]; + }]], + [[int s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(t)]])], + [ac_cv_c_restrict=$ac_kw]) + test "$ac_cv_c_restrict" != no && break + done + ]) + AH_VERBATIM([restrict], +[/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict, even + though the corresponding Sun C compiler does, which causes + "#define restrict _Restrict" in the previous line. Perhaps some future + version of Sun C++ will work with _Restrict; if so, it'll probably + define __RESTRICT, just as Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +#endif]) + case $ac_cv_c_restrict in + restrict) ;; + no) AC_DEFINE([restrict], []) ;; + *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; + esac +]) + +# gl_BIGENDIAN +# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. +# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some +# macros invoke AC_C_BIGENDIAN with arguments. +AC_DEFUN([gl_BIGENDIAN], +[ + AC_C_BIGENDIAN +]) + +# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) +# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not +# output a spurious "(cached)" mark in the midst of other configure output. +# This macro should be used instead of AC_CACHE_VAL when it is not surrounded +# by an AC_MSG_CHECKING/AC_MSG_RESULT pair. +AC_DEFUN([gl_CACHE_VAL_SILENT], +[ + saved_as_echo_n="$as_echo_n" + as_echo_n=':' + AC_CACHE_VAL([$1], [$2]) + as_echo_n="$saved_as_echo_n" +]) diff --git a/coreseek/m4-1.4.13/m4/gnulib-comp.m4 b/coreseek/m4-1.4.13/m4/gnulib-comp.m4 new file mode 100644 index 0000000..bf03c08 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/gnulib-comp.m4 @@ -0,0 +1,962 @@ +# DO NOT EDIT! GENERATED AUTOMATICALLY! +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# +# This file represents the compiled summary of the specification in +# gnulib-cache.m4. It lists the computed macro invocations that need +# to be invoked from configure.ac. +# In projects using CVS, this file can be treated like other built files. + + +# This macro should be invoked from ./configure.ac, in the section +# "Checks for programs", right after AC_PROG_CC, and certainly before +# any checks for libraries, header files, types and library functions. +AC_DEFUN([M4_EARLY], +[ + m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace + m4_pattern_allow([^gl_ES$])dnl a valid locale name + m4_pattern_allow([^gl_LIBOBJS$])dnl a variable + m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable + AC_REQUIRE([AC_PROG_RANLIB]) + AC_REQUIRE([AM_PROG_CC_C_O]) + AB_INIT + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([AC_FUNC_FSEEKO]) + AC_REQUIRE([gl_FP_IEEE]) + AC_REQUIRE([AC_FUNC_FSEEKO]) + AC_REQUIRE([AC_FUNC_FSEEKO]) + dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode + dnl for the builtin va_copy to work. With Autoconf 2.60 or later, + dnl AC_PROG_CC_STDC arranges for this. With older Autoconf AC_PROG_CC_STDC + dnl shouldn't hurt, though installers are on their own to set c99 mode. + AC_REQUIRE([AC_PROG_CC_STDC]) + gl_THREADLIB_EARLY +]) + +# This macro should be invoked from ./configure.ac, in the section +# "Check for header files, types and library functions". +AC_DEFUN([M4_INIT], +[ + AM_CONDITIONAL([GL_COND_LIBTOOL], [false]) + gl_cond_libtool=false + gl_libdeps= + gl_ltlibdeps= + m4_pushdef([AC_LIBOBJ], m4_defn([M4_LIBOBJ])) + m4_pushdef([AC_REPLACE_FUNCS], m4_defn([M4_REPLACE_FUNCS])) + m4_pushdef([AC_LIBSOURCES], m4_defn([M4_LIBSOURCES])) + m4_pushdef([M4_LIBSOURCES_LIST], []) + m4_pushdef([M4_LIBSOURCES_DIR], []) + gl_COMMON + gl_source_base='lib' + gl_FUNC_ALLOCA + gl_ASSERT + gl_FUNC_BTOWC + gl_WCHAR_MODULE_INDICATOR([btowc]) + gl_C_STACK + AC_DEFINE([SIGNAL_SAFE_LIST], [1], [Define if lists must be signal-safe.]) + gl_CLOEXEC + gl_CLOSE_STREAM + gl_MODULE_INDICATOR([close-stream]) + gl_CLOSEIN + gl_CLOSEOUT + gl_CONFIG_H + gl_DIRNAME + gl_DOUBLE_SLASH_ROOT + gl_ENVIRON + gl_UNISTD_MODULE_INDICATOR([environ]) + AC_REQUIRE([gl_HEADER_ERRNO_H]) + gl_ERROR + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_XGETTEXT_OPTION([--flag=error:3:c-format]) + AM_XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) + gl_EXECUTE + gl_EXITFAIL + gl_FATAL_SIGNAL + gl_FCNTL_H + gl_FUNC_FFLUSH + gl_STDIO_MODULE_INDICATOR([fflush]) + gl_FILE_NAME_CONCAT + gl_FLOAT_H + gl_FUNC_FOPEN + gl_STDIO_MODULE_INDICATOR([fopen]) + gl_FOPEN_SAFER + gl_MODULE_INDICATOR([fopen-safer]) + gl_FUNC_FPENDING + gl_FUNC_FPURGE + gl_FUNC_FREADING + gl_FUNC_FREXP_NO_LIBM + gl_MATH_MODULE_INDICATOR([frexp]) + gl_FUNC_FREXPL_NO_LIBM + gl_MATH_MODULE_INDICATOR([frexpl]) + gl_FUNC_FSEEKO + gl_STDIO_MODULE_INDICATOR([fseeko]) + gl_FUNC_FTELLO + gl_STDIO_MODULE_INDICATOR([ftello]) + gl_FUNC_GETDTABLESIZE + gl_UNISTD_MODULE_INDICATOR([getdtablesize]) + gl_GETOPT + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + gl_FUNC_GETTIMEOFDAY + # Autoconf 2.61a.99 and earlier don't support linking a file only + # in VPATH builds. But since GNUmakefile is for maintainer use + # only, it does not matter if we skip the link with older autoconf. + # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH + # builds, so use a shell variable to bypass this. + GNUmakefile=GNUmakefile + m4_if(m4_version_compare([2.61a.100], + m4_defn([m4_PACKAGE_VERSION])), [1], [], + [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], + [GNUmakefile=$GNUmakefile])]) + gl_INLINE + gl_FUNC_ISNAND_NO_LIBM + gl_FUNC_ISNANF_NO_LIBM + gl_FUNC_ISNANL_NO_LIBM + gl_LIBSIGSEGV + gl_LIST + gl_LOCALCHARSET + LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\"" + AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) + gl_LOCK + gl_FUNC_LSEEK + gl_UNISTD_MODULE_INDICATOR([lseek]) + gl_FUNC_LSTAT + gl_SYS_STAT_MODULE_INDICATOR([lstat]) + AC_FUNC_MALLOC + AC_DEFINE([GNULIB_MALLOC_GNU], 1, [Define to indicate the 'malloc' module.]) + gl_FUNC_MALLOC_POSIX + gl_STDLIB_MODULE_INDICATOR([malloc-posix]) + gl_MALLOCA + gl_MATH_H + gl_FUNC_MBRTOWC + gl_WCHAR_MODULE_INDICATOR([mbrtowc]) + gl_FUNC_MBSINIT + gl_WCHAR_MODULE_INDICATOR([mbsinit]) + gt_FUNC_MKDTEMP + gl_STDLIB_MODULE_INDICATOR([mkdtemp]) + gl_FUNC_MKSTEMP + gl_STDLIB_MODULE_INDICATOR([mkstemp]) + AC_REQUIRE([gl_MULTIARCH]) + AC_FUNC_OBSTACK + dnl Note: AC_FUNC_OBSTACK does AC_LIBSOURCES([obstack.h, obstack.c]). + gl_FUNC_OPEN + gl_MODULE_INDICATOR([open]) + gl_FCNTL_MODULE_INDICATOR([open]) + gl_LIST + gl_PATHMAX + gl_PIPE + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawn_faction_addclose]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addclose]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawn_faction_adddup2]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_adddup2]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawn_faction_addopen]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addopen]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawn_faction_destroy]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_destroy]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawn_faction_init]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_init]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawnattr_destroy]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_destroy]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawnattr_init]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_init]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawnattr_setflags]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setflags]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawnattr_setsigmask]) + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setsigmask]) + gl_POSIX_SPAWN + if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then + gl_REPLACE_SPAWN_H + AC_LIBOBJ([spawnp]) + gl_POSIX_SPAWN_INTERNAL + fi + gl_SPAWN_MODULE_INDICATOR([posix_spawnp]) + gl_FUNC_PRINTF_FREXP + gl_FUNC_PRINTF_FREXPL + m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes]) + gl_QUOTEARG + gl_FUNC_RAWMEMCHR + gl_STRING_MODULE_INDICATOR([rawmemchr]) + gl_REGEX + gl_SCHED_H + gl_SIGACTION + gl_SIGNAL_MODULE_INDICATOR([sigaction]) + gl_SIGNAL_H + gl_SIGNBIT + gl_MATH_MODULE_INDICATOR([signbit]) + gl_SIGNALBLOCKING + gl_SIGNAL_MODULE_INDICATOR([sigprocmask]) + gl_SIZE_MAX + gl_FUNC_SNPRINTF + gl_STDIO_MODULE_INDICATOR([snprintf]) + gl_SPAWN_H + gt_TYPE_SSIZE_T + gl_STDARG_H + AM_STDBOOL_H + gl_STDINT_H + gl_STDIO_H + gl_STDLIB_H + gl_STDLIB_SAFER + gl_FUNC_STRCHRNUL + gl_STRING_MODULE_INDICATOR([strchrnul]) + gl_FUNC_STRERROR + gl_STRING_MODULE_INDICATOR([strerror]) + gl_HEADER_STRING_H + gl_FUNC_STRNDUP + gl_STRING_MODULE_INDICATOR([strndup]) + gl_FUNC_STRNLEN + gl_STRING_MODULE_INDICATOR([strnlen]) + gl_FUNC_STRSIGNAL + gl_STRING_MODULE_INDICATOR([strsignal]) + gl_FUNC_STRSTR + gl_STRING_MODULE_INDICATOR([strstr]) + gl_FUNC_STRTOD + gl_STDLIB_MODULE_INDICATOR([strtod]) + gl_FUNC_STRTOL + gl_HEADER_SYS_STAT_H + AC_PROG_MKDIR_P + gl_HEADER_SYS_TIME_H + AC_PROG_MKDIR_P + gl_SYS_WAIT_H + AC_PROG_MKDIR_P + gl_FUNC_GEN_TEMPNAME + gl_THREADLIB + gl_TLS + gt_TMPDIR + gl_UNISTD_H + gl_UNISTD_SAFER + gl_FUNC_GLIBC_UNLOCKED_IO + gl_FUNC_VASNPRINTF + gl_FUNC_VASPRINTF + gl_STDIO_MODULE_INDICATOR([vasprintf]) + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_XGETTEXT_OPTION([--flag=asprintf:2:c-format]) + AM_XGETTEXT_OPTION([--flag=vasprintf:2:c-format])]) + gl_FUNC_VASPRINTF_POSIX + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_XGETTEXT_OPTION([--flag=verror:3:c-format]) + AM_XGETTEXT_OPTION([--flag=verror_at_line:5:c-format])]) + gl_WAIT_PROCESS + gl_WCHAR_H + gl_FUNC_WCRTOMB + gl_WCHAR_MODULE_INDICATOR([wcrtomb]) + gl_WCTYPE_H + gl_XALLOC + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_XGETTEXT_OPTION([--flag=xprintf:1:c-format]) + AM_XGETTEXT_OPTION([--flag=xvprintf:1:c-format]) + AM_XGETTEXT_OPTION([--flag=xfprintf:2:c-format]) + AM_XGETTEXT_OPTION([--flag=xvfprintf:2:c-format])]) + gl_XSIZE + gl_XSTRNDUP + gl_XVASPRINTF + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_XGETTEXT_OPTION([--flag=xasprintf:1:c-format])]) + m4_ifval(M4_LIBSOURCES_LIST, [ + m4_syscmd([test ! -d ]m4_defn([M4_LIBSOURCES_DIR])[ || + for gl_file in ]M4_LIBSOURCES_LIST[ ; do + if test ! -r ]m4_defn([M4_LIBSOURCES_DIR])[/$gl_file ; then + echo "missing file ]m4_defn([M4_LIBSOURCES_DIR])[/$gl_file" >&2 + exit 1 + fi + done])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) + ]) + m4_popdef([M4_LIBSOURCES_DIR]) + m4_popdef([M4_LIBSOURCES_LIST]) + m4_popdef([AC_LIBSOURCES]) + m4_popdef([AC_REPLACE_FUNCS]) + m4_popdef([AC_LIBOBJ]) + AC_CONFIG_COMMANDS_PRE([ + M4_libobjs= + M4_ltlibobjs= + if test -n "$M4_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $M4_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do + M4_libobjs="$M4_libobjs $i.$ac_objext" + M4_ltlibobjs="$M4_ltlibobjs $i.lo" + done + fi + AC_SUBST([M4_LIBOBJS], [$M4_libobjs]) + AC_SUBST([M4_LTLIBOBJS], [$M4_ltlibobjs]) + ]) + gltests_libdeps= + gltests_ltlibdeps= + m4_pushdef([AC_LIBOBJ], m4_defn([M4tests_LIBOBJ])) + m4_pushdef([AC_REPLACE_FUNCS], m4_defn([M4tests_REPLACE_FUNCS])) + m4_pushdef([AC_LIBSOURCES], m4_defn([M4tests_LIBSOURCES])) + m4_pushdef([M4tests_LIBSOURCES_LIST], []) + m4_pushdef([M4tests_LIBSOURCES_DIR], []) + gl_COMMON + gl_source_base='tests' + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gl_FUNC_UNGETC_WORKS + gl_FUNC_UNGETC_WORKS + dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac. + AM_GNU_GETTEXT_VERSION([0.17]) + gl_DOUBLE_EXPONENT_LOCATION + gl_FLOAT_EXPONENT_LOCATION + gl_LONG_DOUBLE_EXPONENT_LOCATION + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_JA + gt_LOCALE_ZH_CN + gt_LOCALE_FR_UTF8 + AC_EGREP_CPP([notposix], [[ + #if defined _MSC_VER || defined __MINGW32__ + notposix + #endif + ]], + [posix_spawn_ported=no], + [posix_spawn_ported=yes]) + AM_CONDITIONAL([POSIX_SPAWN_PORTED], [test $posix_spawn_ported = yes]) + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gl_FUNC_SETENV + gl_STDLIB_MODULE_INDICATOR([setenv]) + AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) + AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) + AC_REQUIRE([gl_LONG_DOUBLE_EXPONENT_LOCATION]) + gt_TYPE_WCHAR_T + gt_TYPE_WINT_T + AC_CHECK_DECLS_ONCE([alarm]) + gl_FUNC_UNSETENV + gl_STDLIB_MODULE_INDICATOR([unsetenv]) + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_JA + gt_LOCALE_ZH_CN + gl_FUNC_WCTOB + gl_WCHAR_MODULE_INDICATOR([wctob]) + m4_ifval(M4tests_LIBSOURCES_LIST, [ + m4_syscmd([test ! -d ]m4_defn([M4tests_LIBSOURCES_DIR])[ || + for gl_file in ]M4tests_LIBSOURCES_LIST[ ; do + if test ! -r ]m4_defn([M4tests_LIBSOURCES_DIR])[/$gl_file ; then + echo "missing file ]m4_defn([M4tests_LIBSOURCES_DIR])[/$gl_file" >&2 + exit 1 + fi + done])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) + ]) + m4_popdef([M4tests_LIBSOURCES_DIR]) + m4_popdef([M4tests_LIBSOURCES_LIST]) + m4_popdef([AC_LIBSOURCES]) + m4_popdef([AC_REPLACE_FUNCS]) + m4_popdef([AC_LIBOBJ]) + AC_CONFIG_COMMANDS_PRE([ + M4tests_libobjs= + M4tests_ltlibobjs= + if test -n "$M4tests_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $M4tests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do + M4tests_libobjs="$M4tests_libobjs $i.$ac_objext" + M4tests_ltlibobjs="$M4tests_ltlibobjs $i.lo" + done + fi + AC_SUBST([M4tests_LIBOBJS], [$M4tests_libobjs]) + AC_SUBST([M4tests_LTLIBOBJS], [$M4tests_ltlibobjs]) + ]) + LIBM4_LIBDEPS="$gl_libdeps" + AC_SUBST([LIBM4_LIBDEPS]) + LIBM4_LTLIBDEPS="$gl_ltlibdeps" + AC_SUBST([LIBM4_LTLIBDEPS]) + LIBTESTS_LIBDEPS="$gltests_libdeps" + AC_SUBST([LIBTESTS_LIBDEPS]) +]) + +# Like AC_LIBOBJ, except that the module name goes +# into M4_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([M4_LIBOBJ], [ + AS_LITERAL_IF([$1], [M4_LIBSOURCES([$1.c])])dnl + M4_LIBOBJS="$M4_LIBOBJS $1.$ac_objext" +]) + +# Like AC_REPLACE_FUNCS, except that the module name goes +# into M4_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([M4_REPLACE_FUNCS], [ + m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl + AC_CHECK_FUNCS([$1], , [M4_LIBOBJ($ac_func)]) +]) + +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is derived from the gnulib-tool parameterization, +# and alloca is special cased (for the alloca-opt module). +# We could also entirely rely on EXTRA_lib..._SOURCES. +AC_DEFUN([M4_LIBSOURCES], [ + m4_foreach([_gl_NAME], [$1], [ + m4_if(_gl_NAME, [alloca.c], [], [ + m4_define([M4_LIBSOURCES_DIR], [lib]) + m4_append([M4_LIBSOURCES_LIST], _gl_NAME, [ ]) + ]) + ]) +]) + +# Like AC_LIBOBJ, except that the module name goes +# into M4tests_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([M4tests_LIBOBJ], [ + AS_LITERAL_IF([$1], [M4tests_LIBSOURCES([$1.c])])dnl + M4tests_LIBOBJS="$M4tests_LIBOBJS $1.$ac_objext" +]) + +# Like AC_REPLACE_FUNCS, except that the module name goes +# into M4tests_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([M4tests_REPLACE_FUNCS], [ + m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl + AC_CHECK_FUNCS([$1], , [M4tests_LIBOBJ($ac_func)]) +]) + +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is derived from the gnulib-tool parameterization, +# and alloca is special cased (for the alloca-opt module). +# We could also entirely rely on EXTRA_lib..._SOURCES. +AC_DEFUN([M4tests_LIBSOURCES], [ + m4_foreach([_gl_NAME], [$1], [ + m4_if(_gl_NAME, [alloca.c], [], [ + m4_define([M4tests_LIBSOURCES_DIR], [tests]) + m4_append([M4tests_LIBSOURCES_LIST], _gl_NAME, [ ]) + ]) + ]) +]) + +# This macro records the list of files which have been installed by +# gnulib-tool and may be removed by future gnulib-tool invocations. +AC_DEFUN([M4_FILE_LIST], [ + build-aux/announce-gen + build-aux/config.rpath + build-aux/gendocs.sh + build-aux/git-version-gen + build-aux/gnupload + build-aux/link-warning.h + doc/fdl-1.3.texi + doc/gendocs_template + doc/gpl-3.0.texi + lib/alloca.c + lib/alloca.in.h + lib/asnprintf.c + lib/asprintf.c + lib/basename.c + lib/binary-io.h + lib/btowc.c + lib/c-ctype.c + lib/c-ctype.h + lib/c-stack.c + lib/c-stack.h + lib/clean-temp.c + lib/clean-temp.h + lib/cloexec.c + lib/cloexec.h + lib/close-stream.c + lib/close-stream.h + lib/closein.c + lib/closein.h + lib/closeout.c + lib/closeout.h + lib/config.charset + lib/dirname.c + lib/dirname.h + lib/dup-safer.c + lib/errno.in.h + lib/error.c + lib/error.h + lib/execute.c + lib/execute.h + lib/exitfail.c + lib/exitfail.h + lib/fatal-signal.c + lib/fatal-signal.h + lib/fcntl.in.h + lib/fd-safer.c + lib/fflush.c + lib/filenamecat.c + lib/filenamecat.h + lib/float+.h + lib/float.in.h + lib/fopen-safer.c + lib/fopen.c + lib/fpending.c + lib/fpending.h + lib/fpucw.h + lib/fpurge.c + lib/fpurge.h + lib/freadahead.c + lib/freadahead.h + lib/freading.c + lib/freading.h + lib/frexp.c + lib/frexpl.c + lib/fseeko.c + lib/ftello.c + lib/getdtablesize.c + lib/getopt.c + lib/getopt.in.h + lib/getopt1.c + lib/getopt_int.h + lib/gettext.h + lib/gettimeofday.c + lib/gl_anyhash_list1.h + lib/gl_anyhash_list2.h + lib/gl_anylinked_list1.h + lib/gl_anylinked_list2.h + lib/gl_anytree_oset.h + lib/gl_avltree_oset.c + lib/gl_avltree_oset.h + lib/gl_linkedhash_list.c + lib/gl_linkedhash_list.h + lib/gl_list.c + lib/gl_list.h + lib/gl_oset.c + lib/gl_oset.h + lib/glthread/lock.c + lib/glthread/lock.h + lib/glthread/threadlib.c + lib/glthread/tls.c + lib/glthread/tls.h + lib/intprops.h + lib/isnan.c + lib/isnand-nolibm.h + lib/isnand.c + lib/isnanf-nolibm.h + lib/isnanf.c + lib/isnanl-nolibm.h + lib/isnanl.c + lib/localcharset.c + lib/localcharset.h + lib/lseek.c + lib/lstat.c + lib/malloc.c + lib/malloca.c + lib/malloca.h + lib/malloca.valgrind + lib/math.in.h + lib/mbrtowc.c + lib/mbsinit.c + lib/memchr2.c + lib/memchr2.h + lib/mkdtemp.c + lib/mkstemp-safer.c + lib/mkstemp.c + lib/obstack.c + lib/obstack.h + lib/open.c + lib/pathmax.h + lib/pipe-safer.c + lib/pipe.c + lib/pipe.h + lib/printf-args.c + lib/printf-args.h + lib/printf-frexp.c + lib/printf-frexp.h + lib/printf-frexpl.c + lib/printf-frexpl.h + lib/printf-parse.c + lib/printf-parse.h + lib/progname.c + lib/progname.h + lib/quotearg.c + lib/quotearg.h + lib/rawmemchr.c + lib/rawmemchr.valgrind + lib/ref-add.sin + lib/ref-del.sin + lib/regcomp.c + lib/regex.c + lib/regex.h + lib/regex_internal.c + lib/regex_internal.h + lib/regexec.c + lib/sched.in.h + lib/sig-handler.h + lib/sigaction.c + lib/siglist.h + lib/signal.in.h + lib/signbitd.c + lib/signbitf.c + lib/signbitl.c + lib/sigprocmask.c + lib/size_max.h + lib/snprintf.c + lib/spawn.in.h + lib/spawn_faction_addclose.c + lib/spawn_faction_adddup2.c + lib/spawn_faction_addopen.c + lib/spawn_faction_destroy.c + lib/spawn_faction_init.c + lib/spawn_int.h + lib/spawnattr_destroy.c + lib/spawnattr_init.c + lib/spawnattr_setflags.c + lib/spawnattr_setsigmask.c + lib/spawni.c + lib/spawnp.c + lib/stdarg.in.h + lib/stdbool.in.h + lib/stdint.in.h + lib/stdio--.h + lib/stdio-impl.h + lib/stdio-safer.h + lib/stdio-write.c + lib/stdio.in.h + lib/stdlib--.h + lib/stdlib-safer.h + lib/stdlib.in.h + lib/str-two-way.h + lib/strchrnul.c + lib/strchrnul.valgrind + lib/streq.h + lib/strerror.c + lib/string.in.h + lib/stripslash.c + lib/strndup.c + lib/strnlen.c + lib/strsignal.c + lib/strstr.c + lib/strtod.c + lib/strtol.c + lib/sys_stat.in.h + lib/sys_time.in.h + lib/sys_wait.in.h + lib/tempname.c + lib/tempname.h + lib/tmpdir.c + lib/tmpdir.h + lib/unistd--.h + lib/unistd-safer.h + lib/unistd.in.h + lib/unlocked-io.h + lib/vasnprintf.c + lib/vasnprintf.h + lib/vasprintf.c + lib/verify.h + lib/verror.c + lib/verror.h + lib/version-etc-fsf.c + lib/version-etc.c + lib/version-etc.h + lib/w32spawn.h + lib/wait-process.c + lib/wait-process.h + lib/wchar.in.h + lib/wcrtomb.c + lib/wctype.in.h + lib/xalloc-die.c + lib/xalloc.h + lib/xasprintf.c + lib/xmalloc.c + lib/xmalloca.c + lib/xmalloca.h + lib/xprintf.c + lib/xprintf.h + lib/xsize.h + lib/xstrndup.c + lib/xstrndup.h + lib/xvasprintf.c + lib/xvasprintf.h + m4/00gnulib.m4 + m4/alloca.m4 + m4/assert.m4 + m4/autobuild.m4 + m4/btowc.m4 + m4/c-stack.m4 + m4/cloexec.m4 + m4/close-stream.m4 + m4/closein.m4 + m4/closeout.m4 + m4/codeset.m4 + m4/config-h.m4 + m4/dirname.m4 + m4/dos.m4 + m4/double-slash-root.m4 + m4/eealloc.m4 + m4/environ.m4 + m4/errno_h.m4 + m4/error.m4 + m4/execute.m4 + m4/exitfail.m4 + m4/exponentd.m4 + m4/exponentf.m4 + m4/exponentl.m4 + m4/extensions.m4 + m4/fatal-signal.m4 + m4/fcntl_h.m4 + m4/fflush.m4 + m4/filenamecat.m4 + m4/float_h.m4 + m4/fopen.m4 + m4/fpending.m4 + m4/fpieee.m4 + m4/fpurge.m4 + m4/freading.m4 + m4/frexp.m4 + m4/frexpl.m4 + m4/fseeko.m4 + m4/ftello.m4 + m4/getdtablesize.m4 + m4/getopt.m4 + m4/gettext.m4 + m4/gettimeofday.m4 + m4/gl_list.m4 + m4/glibc2.m4 + m4/glibc21.m4 + m4/gnulib-common.m4 + m4/iconv.m4 + m4/include_next.m4 + m4/inline.m4 + m4/intdiv0.m4 + m4/intl.m4 + m4/intldir.m4 + m4/intlmacosx.m4 + m4/intmax.m4 + m4/intmax_t.m4 + m4/inttypes-pri.m4 + m4/inttypes_h.m4 + m4/isnand.m4 + m4/isnanf.m4 + m4/isnanl.m4 + m4/lcmessage.m4 + m4/ldexpl.m4 + m4/lib-ld.m4 + m4/lib-link.m4 + m4/lib-prefix.m4 + m4/libsigsegv.m4 + m4/localcharset.m4 + m4/locale-fr.m4 + m4/locale-ja.m4 + m4/locale-zh.m4 + m4/lock.m4 + m4/longlong.m4 + m4/lseek.m4 + m4/lstat.m4 + m4/malloc.m4 + m4/malloca.m4 + m4/math_h.m4 + m4/mbrtowc.m4 + m4/mbsinit.m4 + m4/mbstate_t.m4 + m4/mkdtemp.m4 + m4/mkstemp.m4 + m4/multiarch.m4 + m4/nls.m4 + m4/nocrash.m4 + m4/open.m4 + m4/pathmax.m4 + m4/pipe.m4 + m4/po.m4 + m4/posix_spawn.m4 + m4/printf-frexp.m4 + m4/printf-frexpl.m4 + m4/printf-posix.m4 + m4/printf.m4 + m4/progtest.m4 + m4/quotearg.m4 + m4/rawmemchr.m4 + m4/regex.m4 + m4/sched_h.m4 + m4/setenv.m4 + m4/sig_atomic_t.m4 + m4/sigaction.m4 + m4/signal_h.m4 + m4/signalblocking.m4 + m4/signbit.m4 + m4/size_max.m4 + m4/snprintf.m4 + m4/spawn_h.m4 + m4/ssize_t.m4 + m4/stdarg.m4 + m4/stdbool.m4 + m4/stdint.m4 + m4/stdint_h.m4 + m4/stdio-safer.m4 + m4/stdio_h.m4 + m4/stdlib-safer.m4 + m4/stdlib_h.m4 + m4/strchrnul.m4 + m4/strerror.m4 + m4/string_h.m4 + m4/strndup.m4 + m4/strnlen.m4 + m4/strsignal.m4 + m4/strstr.m4 + m4/strtod.m4 + m4/strtol.m4 + m4/sys_stat_h.m4 + m4/sys_time_h.m4 + m4/sys_wait_h.m4 + m4/tempname.m4 + m4/threadlib.m4 + m4/tls.m4 + m4/tmpdir.m4 + m4/uintmax_t.m4 + m4/ungetc.m4 + m4/unistd-safer.m4 + m4/unistd_h.m4 + m4/unlocked-io.m4 + m4/vasnprintf.m4 + m4/vasprintf-posix.m4 + m4/vasprintf.m4 + m4/visibility.m4 + m4/wait-process.m4 + m4/wchar.m4 + m4/wchar_t.m4 + m4/wcrtomb.m4 + m4/wctob.m4 + m4/wctype.m4 + m4/wint_t.m4 + m4/xalloc.m4 + m4/xsize.m4 + m4/xstrndup.m4 + m4/xvasprintf.m4 + tests/locale/fr/LC_MESSAGES/test-quotearg.mo + tests/locale/fr/LC_MESSAGES/test-quotearg.po + tests/nan.h + tests/test-alloca-opt.c + tests/test-array_list.c + tests/test-array_oset.c + tests/test-avltree_oset.c + tests/test-binary-io.c + tests/test-binary-io.sh + tests/test-btowc.c + tests/test-btowc1.sh + tests/test-btowc2.sh + tests/test-c-ctype.c + tests/test-c-stack.c + tests/test-c-stack.sh + tests/test-c-stack2.sh + tests/test-closein.c + tests/test-closein.sh + tests/test-dirname.c + tests/test-environ.c + tests/test-errno.c + tests/test-fcntl.c + tests/test-fflush.c + tests/test-fflush2.c + tests/test-fflush2.sh + tests/test-filenamecat.c + tests/test-fopen.c + tests/test-fpending.c + tests/test-fpending.sh + tests/test-fpurge.c + tests/test-freadahead.c + tests/test-freadahead.sh + tests/test-freading.c + tests/test-frexp.c + tests/test-frexpl.c + tests/test-fseeko.c + tests/test-fseeko.sh + tests/test-fseeko2.sh + tests/test-ftello.c + tests/test-ftello.sh + tests/test-ftello2.sh + tests/test-getdtablesize.c + tests/test-gettimeofday.c + tests/test-isnand-nolibm.c + tests/test-isnand.h + tests/test-isnanf-nolibm.c + tests/test-isnanf.h + tests/test-isnanl-nolibm.c + tests/test-isnanl.h + tests/test-linkedhash_list.c + tests/test-lseek.c + tests/test-lseek.sh + tests/test-lstat.c + tests/test-malloca.c + tests/test-math.c + tests/test-mbrtowc.c + tests/test-mbrtowc1.sh + tests/test-mbrtowc2.sh + tests/test-mbrtowc3.sh + tests/test-mbrtowc4.sh + tests/test-mbsinit.c + tests/test-mbsinit.sh + tests/test-memchr2.c + tests/test-open.c + tests/test-posix_spawn1.c + tests/test-posix_spawn1.in.sh + tests/test-posix_spawn2.c + tests/test-posix_spawn2.in.sh + tests/test-printf-frexp.c + tests/test-printf-frexpl.c + tests/test-quotearg.c + tests/test-quotearg.sh + tests/test-rawmemchr.c + tests/test-sched.c + tests/test-sigaction.c + tests/test-signal.c + tests/test-signbit.c + tests/test-snprintf.c + tests/test-stdbool.c + tests/test-stdint.c + tests/test-stdio.c + tests/test-stdlib.c + tests/test-strchrnul.c + tests/test-strerror.c + tests/test-string.c + tests/test-strsignal.c + tests/test-strstr.c + tests/test-strtod.c + tests/test-sys_stat.c + tests/test-sys_time.c + tests/test-unistd.c + tests/test-vasnprintf.c + tests/test-vasprintf-posix.c + tests/test-vasprintf.c + tests/test-wchar.c + tests/test-wcrtomb.c + tests/test-wcrtomb.sh + tests/test-wctype.c + tests/test-xvasprintf.c + tests=lib/gl_array_list.c + tests=lib/gl_array_list.h + tests=lib/gl_array_oset.c + tests=lib/gl_array_oset.h + tests=lib/setenv.c + tests=lib/unsetenv.c + tests=lib/wctob.c + top/GNUmakefile +]) diff --git a/coreseek/m4-1.4.13/m4/include_next.m4 b/coreseek/m4-1.4.13/m4/include_next.m4 new file mode 100644 index 0000000..d6101fe --- /dev/null +++ b/coreseek/m4-1.4.13/m4/include_next.m4 @@ -0,0 +1,171 @@ +# include_next.m4 serial 12 +dnl Copyright (C) 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert and Derek Price. + +dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. +dnl +dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to +dnl 'include' otherwise. +dnl +dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler +dnl supports it in the special case that it is the first include directive in +dnl the given file, or to 'include' otherwise. +dnl +dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, +dnl so as to avoid GCC warnings when the gcc option -pedantic is used. +dnl '#pragma GCC system_header' has the same effect as if the file was found +dnl through the include search path specified with '-isystem' options (as +dnl opposed to the search path specified with '-I' options). Namely, gcc +dnl does not warn about some things, and on some systems (Solaris and Interix) +dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side +dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead +dnl of plain '__STDC__'. + +AC_DEFUN([gl_INCLUDE_NEXT], +[ + AC_LANG_PREPROC_REQUIRE() + AC_CACHE_CHECK([whether the preprocessor supports include_next], + [gl_cv_have_include_next], + [rm -rf conftestd1a conftestd1b conftestd2 + mkdir conftestd1a conftestd1b conftestd2 + dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on + dnl AIX 6.1 support include_next when used as first preprocessor directive + dnl in a file, but not when preceded by another include directive. Check + dnl for this bug by including . + dnl Additionally, with this same compiler, include_next is a no-op when + dnl used in a header file that was included by specifying its absolute + dnl file name. Despite these two bugs, include_next is used in the + dnl compiler's . By virtue of the second bug, we need to use + dnl include_next as well in this case. + cat < conftestd1a/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include_next +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat < conftestd1b/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include +#include_next +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat < conftestd2/conftest.h +#ifndef DEFINED_IN_CONFTESTD1 +#error "include_next test doesn't work" +#endif +#define DEFINED_IN_CONFTESTD2 +EOF + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" + AC_COMPILE_IFELSE([#include ], + [gl_cv_have_include_next=yes], + [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + AC_COMPILE_IFELSE([#include ], + [gl_cv_have_include_next=buggy], + [gl_cv_have_include_next=no]) + ]) + CPPFLAGS="$gl_save_CPPFLAGS" + rm -rf conftestd1a conftestd1b conftestd2 + ]) + PRAGMA_SYSTEM_HEADER= + if test $gl_cv_have_include_next = yes; then + INCLUDE_NEXT=include_next + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + if test -n "$GCC"; then + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' + fi + else + if test $gl_cv_have_include_next = buggy; then + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + else + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include + fi + fi + AC_SUBST([INCLUDE_NEXT]) + AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) + AC_SUBST([PRAGMA_SYSTEM_HEADER]) +]) + +# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) +# ------------------------------------------ +# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be +# ''; otherwise define it to be +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. +# That way, a header file with the following line: +# #@INCLUDE_NEXT@ @NEXT_FOO_H@ +# behaves (after sed substitution) as if it contained +# #include_next +# even if the compiler does not support include_next. +# The three "///" are to pacify Sun C 5.8, which otherwise would say +# "warning: #include of /usr/include/... may be non-portable". +# Use `""', not `<>', so that the /// cannot be confused with a C99 comment. +# Note: This macro assumes that the header file is not empty after +# preprocessing, i.e. it does not only define preprocessor macros but also +# provides some type/enum definitions or function/variable declarations. +AC_DEFUN([gl_CHECK_NEXT_HEADERS], +[ + AC_REQUIRE([gl_INCLUDE_NEXT]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_HEADERS_ONCE([$1]) + + m4_foreach_w([gl_HEADER_NAME], [$1], + [AS_VAR_PUSHDEF([gl_next_header], + [gl_cv_next_]m4_quote(m4_defn([gl_HEADER_NAME]))) + if test $gl_cv_have_include_next = yes; then + AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) + else + AC_CACHE_CHECK( + [absolute name of <]m4_quote(m4_defn([gl_HEADER_NAME]))[>], + m4_quote(m4_defn([gl_next_header])), + [AS_VAR_PUSHDEF([gl_header_exists], + [ac_cv_header_]m4_quote(m4_defn([gl_HEADER_NAME]))) + if test AS_VAR_GET(gl_header_exists) = yes; then + AC_LANG_CONFTEST( + [AC_LANG_SOURCE( + [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]] + )]) + dnl AIX "xlc -E" and "cc -E" omit #line directives for header files + dnl that contain only a #include of other header files and no + dnl non-comment tokens of their own. This leads to a failure to + dnl detect the absolute name of , , + dnl and others. The workaround is to force preservation of comments + dnl through option -C. This ensures all necessary #line directives + dnl are present. GCC supports option -C as well. + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + dnl eval is necessary to expand gl_absname_cpp. + dnl Ultrix and Pyramid sh refuse to redirect output of eval, + dnl so use subshell. + AS_VAR_SET([gl_next_header], + ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | + sed -n '\#/]m4_quote(m4_defn([gl_HEADER_NAME]))[#{ + s#.*"\(.*/]m4_quote(m4_defn([gl_HEADER_NAME]))[\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"']) + else + AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) + fi + AS_VAR_POPDEF([gl_header_exists])]) + fi + AC_SUBST( + AS_TR_CPP([NEXT_]m4_quote(m4_defn([gl_HEADER_NAME]))), + [AS_VAR_GET([gl_next_header])]) + AS_VAR_POPDEF([gl_next_header])]) +]) diff --git a/coreseek/m4-1.4.13/m4/inline.m4 b/coreseek/m4-1.4.13/m4/inline.m4 new file mode 100644 index 0000000..cee5109 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/inline.m4 @@ -0,0 +1,40 @@ +# inline.m4 serial 4 +dnl Copyright (C) 2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Test for the 'inline' keyword or equivalent. +dnl Define 'inline' to a supported equivalent, or to nothing if not supported, +dnl like AC_C_INLINE does. Also, define HAVE_INLINE if 'inline' or an +dnl equivalent is effectively supported, i.e. if the compiler is likely to +dnl drop unused 'static inline' functions. +AC_DEFUN([gl_INLINE], +[ + AC_REQUIRE([AC_C_INLINE]) + AC_CACHE_CHECK([whether the compiler generally respects inline], + [gl_cv_c_inline_effective], + [if test $ac_cv_c_inline = no; then + gl_cv_c_inline_effective=no + else + dnl GCC defines __NO_INLINE__ if not optimizing or if -fno-inline is + dnl specified. + dnl Use AC_COMPILE_IFELSE here, not AC_EGREP_CPP, because the result + dnl depends on optimization flags, which can be in CFLAGS. + dnl (AC_EGREP_CPP looks only at the CPPFLAGS.) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], + [[#ifdef __NO_INLINE__ + #error "inline is not effective" + #endif]])], + [gl_cv_c_inline_effective=yes], + [gl_cv_c_inline_effective=no]) + fi + ]) + if test $gl_cv_c_inline_effective = yes; then + AC_DEFINE([HAVE_INLINE], [1], + [Define to 1 if the compiler supports one of the keywords + 'inline', '__inline__', '__inline' and effectively inlines + functions marked as such.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/intmax_t.m4 b/coreseek/m4-1.4.13/m4/intmax_t.m4 new file mode 100644 index 0000000..264cb57 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/intmax_t.m4 @@ -0,0 +1,61 @@ +# intmax_t.m4 serial 7 +dnl Copyright (C) 1997-2004, 2006-2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +AC_PREREQ([2.13]) + +# Define intmax_t to 'long' or 'long long' +# if it is not already defined in or . + +AC_DEFUN([gl_AC_TYPE_INTMAX_T], +[ + dnl For simplicity, we assume that a header file defines 'intmax_t' if and + dnl only if it defines 'uintmax_t'. + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to long or long long if and don't define.]) + else + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in or .]) + fi +]) + +dnl An alternative would be to explicitly test for 'intmax_t'. + +AC_DEFUN([gt_AC_TYPE_INTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], + [AC_TRY_COMPILE([ +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif +], [intmax_t x = -1; return !x;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) + if test $gt_cv_c_intmax_t = yes; then + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in or .]) + else + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to long or long long if and don't define.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/inttypes_h.m4 b/coreseek/m4-1.4.13/m4/inttypes_h.m4 new file mode 100644 index 0000000..f4ca160 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/inttypes_h.m4 @@ -0,0 +1,26 @@ +# inttypes_h.m4 serial 9 +dnl Copyright (C) 1997-2004, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1; return !i;], + [gl_cv_header_inttypes_h=yes], + [gl_cv_header_inttypes_h=no])]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/isnand.m4 b/coreseek/m4-1.4.13/m4/isnand.m4 new file mode 100644 index 0000000..c823c2c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/isnand.m4 @@ -0,0 +1,95 @@ +# isnand.m4 serial 6 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to get or define isnand(). + +AC_DEFUN([gl_FUNC_ISNAND], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNAND_LIBM= + gl_HAVE_ISNAND_NO_LIBM + if test $gl_cv_func_isnand_no_libm = no; then + gl_HAVE_ISNAND_IN_LIBM + if test $gl_cv_func_isnand_in_libm = yes; then + ISNAND_LIBM=-lm + fi + fi + dnl The variable gl_func_isnand set here is used by isnan.m4. + if test $gl_cv_func_isnand_no_libm = yes \ + || test $gl_cv_func_isnand_in_libm = yes; then + gl_func_isnand=yes + else + gl_func_isnand=no + HAVE_ISNAND=0 + gl_BUILD_ISNAND + fi + AC_SUBST([ISNAND_LIBM]) +]) + +dnl Check how to get or define isnand() without linking with libm. + +AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], +[ + gl_HAVE_ISNAND_NO_LIBM + if test $gl_cv_func_isnand_no_libm = yes; then + AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1], + [Define if the isnan(double) function is available in libc.]) + else + gl_BUILD_ISNAND + fi +]) + +dnl Pull in replacement isnand definition. It does not need -lm. +AC_DEFUN([gl_BUILD_ISNAND], +[ + AC_LIBOBJ([isnand]) + gl_DOUBLE_EXPONENT_LOCATION +]) + +dnl Test whether isnand() can be used with libm. + +AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(double) can be used with libm], + [gl_cv_func_isnand_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnand ((double)(x)) + #elif defined isnan + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x;], + [return isnand (x);], + [gl_cv_func_isnand_in_libm=yes], + [gl_cv_func_isnand_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], + [gl_cv_func_isnand_no_libm], + [ + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnan ((double)(x)) + #else + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x;], + [return isnand (x);], + [gl_cv_func_isnand_no_libm=yes], + [gl_cv_func_isnand_no_libm=no]) + ]) +]) diff --git a/coreseek/m4-1.4.13/m4/isnanf.m4 b/coreseek/m4-1.4.13/m4/isnanf.m4 new file mode 100644 index 0000000..2ad8f94 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/isnanf.m4 @@ -0,0 +1,179 @@ +# isnanf.m4 serial 10 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to get or define isnanf(). + +AC_DEFUN([gl_FUNC_ISNANF], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNANF_LIBM= + gl_HAVE_ISNANF_NO_LIBM + if test $gl_cv_func_isnanf_no_libm = no; then + gl_HAVE_ISNANF_IN_LIBM + if test $gl_cv_func_isnanf_in_libm = yes; then + ISNANF_LIBM=-lm + fi + fi + if test $gl_cv_func_isnanf_no_libm = yes \ + || test $gl_cv_func_isnanf_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $ISNANF_LIBM" + gl_ISNANF_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_isnanf_works" in + *yes) gl_func_isnanf=yes ;; + *) gl_func_isnanf=no; ISNANF_LIBM= ;; + esac + else + gl_func_isnanf=no + fi + if test $gl_func_isnanf != yes; then + HAVE_ISNANF=0 + gl_BUILD_ISNANF + fi + AC_SUBST([ISNANF_LIBM]) +]) + +dnl Check how to get or define isnanf() without linking with libm. + +AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM], +[ + gl_HAVE_ISNANF_NO_LIBM + if test $gl_cv_func_isnanf_no_libm = yes; then + gl_ISNANF_WORKS + fi + if test $gl_cv_func_isnanf_no_libm = yes \ + && { case "$gl_cv_func_isnanf_works" in + *yes) true;; + *) false;; + esac + }; then + AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1], + [Define if the isnan(float) function is available in libc.]) + else + gl_BUILD_ISNANF + fi +]) + +dnl Pull in replacement isnanf definition. It does not need -lm. +AC_DEFUN([gl_BUILD_ISNANF], +[ + AC_LIBOBJ([isnanf]) + gl_FLOAT_EXPONENT_LOCATION +]) + +dnl Test whether isnanf() can be used without libm. +AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm], + [gl_cv_func_isnanf_no_libm], + [ + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x;], + [return isnanf (x);], + [gl_cv_func_isnanf_no_libm=yes], + [gl_cv_func_isnanf_no_libm=no]) + ]) +]) + +dnl Test whether isnanf() can be used with libm. +AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(float) can be used with libm], + [gl_cv_func_isnanf_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x;], + [return isnanf (x);], + [gl_cv_func_isnanf_in_libm=yes], + [gl_cv_func_isnanf_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1), +dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN +dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5). +AC_DEFUN([gl_ISNANF_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) + AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works], + [ + AC_TRY_RUN([ +#include +#if __GNUC__ >= 4 +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +#elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +#endif +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static float +NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +#else +# define NaN() (0.0f / 0.0f) +#endif +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; float value; } memory_float; +int main() +{ + memory_float m; + + if (isnanf (1.0f / 0.0f)) + return 1; + + if (!isnanf (NaN ())) + return 1; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* The isnanf function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit. */ + if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) + { + m.value = NaN (); + /* Set the bits below the exponent to 01111...111. */ + m.word[0] &= -1U << FLT_EXPBIT0_BIT; + m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1; + if (!isnanf (m.value)) + return 1; + } +#endif + + return 0; +}], [gl_cv_func_isnanf_works=yes], [gl_cv_func_isnanf_works=no], + [case "$host_os" in + irix* | solaris*) gl_cv_func_isnanf_works="guessing no";; + *) gl_cv_func_isnanf_works="guessing yes";; + esac + ]) + ]) +]) diff --git a/coreseek/m4-1.4.13/m4/isnanl.m4 b/coreseek/m4-1.4.13/m4/isnanl.m4 new file mode 100644 index 0000000..e3029f5 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/isnanl.m4 @@ -0,0 +1,245 @@ +# isnanl.m4 serial 12 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_ISNANL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNANL_LIBM= + gl_HAVE_ISNANL_NO_LIBM + if test $gl_cv_func_isnanl_no_libm = no; then + gl_HAVE_ISNANL_IN_LIBM + if test $gl_cv_func_isnanl_in_libm = yes; then + ISNANL_LIBM=-lm + fi + fi + if test $gl_cv_func_isnanl_no_libm = yes \ + || test $gl_cv_func_isnanl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $ISNANL_LIBM" + gl_FUNC_ISNANL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_isnanl_works" in + *yes) gl_func_isnanl=yes ;; + *) gl_func_isnanl=no; ISNANL_LIBM= ;; + esac + else + gl_func_isnanl=no + fi + if test $gl_func_isnanl != yes; then + HAVE_ISNANL=0 + gl_BUILD_ISNANL + fi + AC_SUBST([ISNANL_LIBM]) +]) + +AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM], +[ + gl_HAVE_ISNANL_NO_LIBM + gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm + if test $gl_func_isnanl_no_libm = yes; then + gl_FUNC_ISNANL_WORKS + case "$gl_cv_func_isnanl_works" in + *yes) ;; + *) gl_func_isnanl_no_libm=no ;; + esac + fi + if test $gl_func_isnanl_no_libm = yes; then + AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1], + [Define if the isnan(long double) function is available in libc.]) + else + gl_BUILD_ISNANL + fi +]) + +dnl Pull in replacement isnanl definition. It does not need -lm. +AC_DEFUN([gl_BUILD_ISNANL], +[ + AC_LIBOBJ([isnanl]) + gl_LONG_DOUBLE_EXPONENT_LOCATION +]) + +dnl Test whether isnanl() can be used without libm. +AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm], + [gl_cv_func_isnanl_no_libm], + [ + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x;], + [return isnanl (x);], + [gl_cv_func_isnanl_no_libm=yes], + [gl_cv_func_isnanl_no_libm=no]) + ]) +]) + +dnl Test whether isnanl() can be used with libm. +AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(long double) can be used with libm], + [gl_cv_func_isnanl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x;], + [return isnanl (x);], + [gl_cv_func_isnanl_in_libm=yes], + [gl_cv_func_isnanl_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +dnl Test whether isnanl() recognizes all numbers which are neither finite nor +dnl infinite. This test fails e.g. on NetBSD/i386 and on glibc/ia64. +dnl Also, the GCC >= 4.0 built-in __builtin_isnanl does not pass the tests +dnl - for pseudo-denormals on i686 and x86_64, +dnl - for pseudo-zeroes, unnormalized numbers, and pseudo-denormals on ia64. +AC_DEFUN([gl_FUNC_ISNANL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works], + [ + AC_TRY_RUN([ +#include +#include +#include +#if __GNUC__ >= 4 +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +#elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +#endif +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; long double value; } + memory_long_double; +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif +int main () +{ + memory_long_double m; + unsigned int i; + + if (!isnanl (NaNl ())) + return 1; + + /* The isnanl function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit (since the exponent never extends to + bit 31). */ + m.value = NaNl (); + m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + for (i = 0; i < NWORDS; i++) + m.word[i] |= 1; + if (!isnanl (m.value)) + return 1; + +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { + /* Signalling NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Infinity. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Zero. */ + static memory_long_double x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Unnormalized number. */ + static memory_long_double x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Denormal. */ + static memory_long_double x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } +#endif + + return 0; +}], [gl_cv_func_isnanl_works=yes], [gl_cv_func_isnanl_works=no], + [case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";; + *) + case "$host_os" in + netbsd*) gl_cv_func_isnanl_works="guessing no";; + *) gl_cv_func_isnanl_works="guessing yes";; + esac + ;; + esac + ]) + ]) +]) diff --git a/coreseek/m4-1.4.13/m4/ldexpl.m4 b/coreseek/m4-1.4.13/m4/ldexpl.m4 new file mode 100644 index 0000000..8ba85c6 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/ldexpl.m4 @@ -0,0 +1,88 @@ +# ldexpl.m4 serial 4 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_LDEXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + LDEXPL_LIBM= + AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm], + [gl_cv_func_ldexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x;], + [return ldexpl (x, -1) > 0;], + [gl_cv_func_ldexpl_no_libm=yes], + [gl_cv_func_ldexpl_no_libm=no]) + ]) + if test $gl_cv_func_ldexpl_no_libm = no; then + AC_CACHE_CHECK([whether ldexpl() can be used with libm], + [gl_cv_func_ldexpl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + long double x;], + [return ldexpl (x, -1) > 0;], + [gl_cv_func_ldexpl_in_libm=yes], + [gl_cv_func_ldexpl_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_ldexpl_in_libm = yes; then + LDEXPL_LIBM=-lm + fi + fi + if test $gl_cv_func_ldexpl_no_libm = yes \ + || test $gl_cv_func_ldexpl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $LDEXPL_LIBM" + gl_FUNC_LDEXPL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_ldexpl_works" in + *yes) gl_func_ldexpl=yes ;; + *) gl_func_ldexpl=no; REPLACE_LDEXPL=1; LDEXPL_LIBM= ;; + esac + else + gl_func_ldexpl=no + fi + if test $gl_func_ldexpl = yes; then + AC_DEFINE([HAVE_LDEXPL], [1], + [Define if the ldexpl() function is available.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has ldexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [#include ]) + else + HAVE_DECL_LDEXPL=0 + AC_LIBOBJ([ldexpl]) + fi + AC_SUBST([LDEXPL_LIBM]) +]) + +dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1 +dnl and MacOS X 10.4/PowerPC). +AC_DEFUN([gl_FUNC_LDEXPL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works], + [ + AC_TRY_RUN([ +#include +extern long double ldexpl (long double, int); +int main() +{ + volatile long double x1 = 1.0; + volatile long double y1 = ldexpl (x1, -1); + volatile long double x2 = 1.73205L; + volatile long double y2 = ldexpl (x2, 0); + return (y1 != 0.5L) || (y2 != x2); +}], [gl_cv_func_ldexpl_works=yes], [gl_cv_func_ldexpl_works=no], + [case "$host_os" in + aix*) gl_cv_func_ldexpl_works="guessing no";; + *) gl_cv_func_ldexpl_works="guessing yes";; + esac + ]) + ]) +]) diff --git a/coreseek/m4-1.4.13/m4/lib-ld.m4 b/coreseek/m4-1.4.13/m4/lib-ld.m4 new file mode 100644 index 0000000..e4863f2 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/lib-ld.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 1996-2003, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 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 +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL([acl_cv_path_LD], +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT([$LD]) +else + AC_MSG_RESULT([no]) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) diff --git a/coreseek/m4-1.4.13/m4/lib-link.m4 b/coreseek/m4-1.4.13/m4/lib-link.m4 new file mode 100644 index 0000000..fcd3391 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/lib-link.m4 @@ -0,0 +1,758 @@ +# lib-link.m4 serial 18 (gettext-0.18) +dnl Copyright (C) 2001-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.54]) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[translit([$1],[./-], [___])]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + popdef([NAME]) + popdef([Name]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[translit([$1],[./-], [___])]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + LIB[]NAME[]_PREFIX= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + popdef([NAME]) + popdef([Name]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl acl_libext, +dnl acl_shlibext, +dnl acl_hardcode_libdir_flag_spec, +dnl acl_hardcode_libdir_separator, +dnl acl_hardcode_direct, +dnl acl_hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE([rpath], + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl Autoconf >= 2.61 supports dots in --with options. + pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH(P_A_C_K[-prefix], +[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + LIB[]NAME[]_PREFIX= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi + popdef([P_A_C_K]) + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) diff --git a/coreseek/m4-1.4.13/m4/lib-prefix.m4 b/coreseek/m4-1.4.13/m4/lib-prefix.m4 new file mode 100644 index 0000000..3bdc0fc --- /dev/null +++ b/coreseek/m4-1.4.13/m4/lib-prefix.m4 @@ -0,0 +1,221 @@ +# lib-prefix.m4 serial 6 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. + dnl On glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine + dnl the compiler's default mode by looking at the compiler's library search + dnl path. If at least one of its elements ends in /lib64 or points to a + dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. + dnl Otherwise we use the default, namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl . + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits +#endif + ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) + ]) + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) diff --git a/coreseek/m4-1.4.13/m4/libsigsegv.m4 b/coreseek/m4-1.4.13/m4/libsigsegv.m4 new file mode 100644 index 0000000..ecd81f2 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/libsigsegv.m4 @@ -0,0 +1,48 @@ +# libsigsegv.m4 serial 3 +dnl Copyright (C) 2002-2003, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible, Sam Steingold. + +AC_DEFUN([gl_LIBSIGSEGV], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libsigsegv and define LIBSIGSEGV, LTLIBSIGSEGV and INCSIGSEGV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([sigsegv]) + + dnl Add $INCSIGSEGV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libsigsegv and not disabled its use + dnl via --without-libsigsegv-prefix, he wants to use it. + gl_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCSIGSEGV]) + + AC_CACHE_CHECK([for libsigsegv], [gl_cv_lib_sigsegv], [ + gl_cv_lib_sigsegv="no, consider installing GNU libsigsegv" + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBSIGSEGV" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [sigsegv_deinstall_handler();])], + [gl_cv_lib_sigsegv=yes]) + LIBS="$gl_save_LIBS" + ]) + if test "$gl_cv_lib_sigsegv" = yes; then + AC_DEFINE([HAVE_LIBSIGSEGV], [1], + [Define if you have the libsigsegv library.]) + AC_MSG_CHECKING([how to link with libsigsegv]) + AC_MSG_RESULT([$LIBSIGSEGV]) + else + dnl If $LIBSIGSEGV didn't lead to a usable library, we don't need + dnl $INCSIGSEGV either. + CPPFLAGS="$gl_save_CPPFLAGS" + LIBSIGSEGV= + LTLIBSIGSEGV= + fi + AC_SUBST([LIBSIGSEGV]) + AC_SUBST([LTLIBSIGSEGV]) +]) diff --git a/coreseek/m4-1.4.13/m4/localcharset.m4 b/coreseek/m4-1.4.13/m4/localcharset.m4 new file mode 100644 index 0000000..e960104 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/localcharset.m4 @@ -0,0 +1,16 @@ +# localcharset.m4 serial 6 +dnl Copyright (C) 2002, 2004, 2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALCHARSET], +[ + dnl Prerequisites of lib/localcharset.c. + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CHECK_DECLS_ONCE([getc_unlocked]) + + dnl Prerequisites of the lib/Makefile.am snippet. + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_GLIBC21]) +]) diff --git a/coreseek/m4-1.4.13/m4/locale-fr.m4 b/coreseek/m4-1.4.13/m4/locale-fr.m4 new file mode 100644 index 0000000..653a5bc --- /dev/null +++ b/coreseek/m4-1.4.13/m4/locale-fr.m4 @@ -0,0 +1,185 @@ +# locale-fr.m4 serial 11 +dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a french locale with traditional encoding. +AC_DEFUN([gt_LOCALE_FR], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + ]) + LOCALE_FR=$gt_cv_locale_fr + AC_SUBST([LOCALE_FR]) +]) + +dnl Determine the name of a french locale with UTF-8 encoding. +AC_DEFUN([gt_LOCALE_FR_UTF8], +[ + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + ]) + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + AC_SUBST([LOCALE_FR_UTF8]) +]) diff --git a/coreseek/m4-1.4.13/m4/locale-ja.m4 b/coreseek/m4-1.4.13/m4/locale-ja.m4 new file mode 100644 index 0000000..9360576 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/locale-ja.m4 @@ -0,0 +1,107 @@ +# locale-ja.m4 serial 7 +dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a japanese locale with EUC-JP encoding. +AC_DEFUN([gt_LOCALE_JA], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + fi + rm -fr conftest* + ]) + LOCALE_JA=$gt_cv_locale_ja + AC_SUBST([LOCALE_JA]) +]) diff --git a/coreseek/m4-1.4.13/m4/locale-zh.m4 b/coreseek/m4-1.4.13/m4/locale-zh.m4 new file mode 100644 index 0000000..36a5f1d --- /dev/null +++ b/coreseek/m4-1.4.13/m4/locale-zh.m4 @@ -0,0 +1,92 @@ +# locale-zh.m4 serial 6 +dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a chinese locale with GB18030 encoding. +AC_DEFUN([gt_LOCALE_ZH_CN], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + ]) + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + AC_SUBST([LOCALE_ZH_CN]) +]) diff --git a/coreseek/m4-1.4.13/m4/lock.m4 b/coreseek/m4-1.4.13/m4/lock.m4 new file mode 100644 index 0000000..b416e31 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/lock.m4 @@ -0,0 +1,37 @@ +# lock.m4 serial 10 (gettext-0.18) +dnl Copyright (C) 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_LOCK], +[ + AC_REQUIRE([gl_THREADLIB]) + if test "$gl_threads_api" = posix; then + # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + AC_CHECK_TYPE([pthread_rwlock_t], + [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], + [Define if the POSIX multithreading library has read/write locks.])], + [], + [#include ]) + # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. + AC_TRY_COMPILE([#include ], + [#if __FreeBSD__ == 4 +error "No, in FreeBSD 4.0 recursive mutexes actually don't work." +#else +int x = (int)PTHREAD_MUTEX_RECURSIVE; +return !x; +#endif], + [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], + [Define if the defines PTHREAD_MUTEX_RECURSIVE.])]) + fi + gl_PREREQ_LOCK +]) + +# Prerequisites of lib/lock.c. +AC_DEFUN([gl_PREREQ_LOCK], [ + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/coreseek/m4-1.4.13/m4/longlong.m4 b/coreseek/m4-1.4.13/m4/longlong.m4 new file mode 100644 index 0000000..eedc8d5 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/longlong.m4 @@ -0,0 +1,106 @@ +# longlong.m4 serial 14 +dnl Copyright (C) 1999-2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_LONG_LONG_INT if 'long long int' works. +# This fixes a bug in Autoconf 2.61, but can be removed once we +# assume 2.62 everywhere. + +# Note: If the type 'long long int' exists but is only 32 bits large +# (as on some very old compilers), HAVE_LONG_LONG_INT will not be +# defined. In this case you can treat 'long long int' like 'long int'. + +AC_DEFUN([AC_TYPE_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], + [AC_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. + dnl If cross compiling, assume the bug isn't important, since + dnl nobody cross compiles for this platform as far as we know. + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[@%:@include + @%:@ifndef LLONG_MAX + @%:@ define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + @%:@ define LLONG_MAX (HALF - 1 + HALF) + @%:@endif]], + [[long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0;]])], + [ac_cv_type_long_long_int=yes], + [ac_cv_type_long_long_int=no], + [ac_cv_type_long_long_int=yes])], + [ac_cv_type_long_long_int=no])]) + if test $ac_cv_type_long_long_int = yes; then + AC_DEFINE([HAVE_LONG_LONG_INT], [1], + [Define to 1 if the system has the type `long long int'.]) + fi +]) + +# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. +# This fixes a bug in Autoconf 2.61, but can be removed once we +# assume 2.62 everywhere. + +# Note: If the type 'unsigned long long int' exists but is only 32 bits +# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT +# will not be defined. In this case you can treat 'unsigned long long int' +# like 'unsigned long int'. + +AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for unsigned long long int], + [ac_cv_type_unsigned_long_long_int], + [AC_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [ac_cv_type_unsigned_long_long_int=yes], + [ac_cv_type_unsigned_long_long_int=no])]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], + [Define to 1 if the system has the type `unsigned long long int'.]) + fi +]) + +# Expands to a C program that can be used to test for simultaneous support +# of 'long long' and 'unsigned long long'. We don't want to say that +# 'long long' is available if 'unsigned long long' is not, or vice versa, +# because too many programs rely on the symmetry between signed and unsigned +# integer types (excluding 'bool'). +AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], +[ + AC_LANG_PROGRAM( + [[/* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63;]], + [[/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull));]]) +]) diff --git a/coreseek/m4-1.4.13/m4/lseek.m4 b/coreseek/m4-1.4.13/m4/lseek.m4 new file mode 100644 index 0000000..f336990 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/lseek.m4 @@ -0,0 +1,50 @@ +# lseek.m4 serial 4 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_LSEEK], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], + [if test $cross_compiling = no; then + AC_LINK_IFELSE([ +#include /* for off_t */ +#include /* for SEEK_CUR */ +#include +int main () +{ + /* Exit with success only if stdin is seekable. */ + return lseek (0, (off_t)0, SEEK_CUR) < 0; +}], + [if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext < conftest.$ac_ext \ + && { echo hi | ./conftest$ac_exeext; test $? = 1; }; then + gl_cv_func_lseek_pipe=yes + else + gl_cv_func_lseek_pipe=no + fi], + [gl_cv_func_lseek_pipe=no]) + else + AC_COMPILE_IFELSE([ +#if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) || defined __BEOS__ +/* mingw and BeOS mistakenly return 0 when trying to seek on pipes. */ + Choke me. +#endif], + [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no]) + fi]) + if test $gl_cv_func_lseek_pipe = no; then + gl_REPLACE_LSEEK + fi +]) + +AC_DEFUN([gl_REPLACE_LSEEK], +[ + AC_LIBOBJ([lseek]) + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + REPLACE_LSEEK=1 + AC_DEFINE([LSEEK_PIPE_BROKEN], [1], + [Define to 1 if lseek does not detect pipes.]) +]) diff --git a/coreseek/m4-1.4.13/m4/lstat.m4 b/coreseek/m4-1.4.13/m4/lstat.m4 new file mode 100644 index 0000000..74c78fe --- /dev/null +++ b/coreseek/m4-1.4.13/m4/lstat.m4 @@ -0,0 +1,26 @@ +# serial 19 + +# Copyright (C) 1997-2001, 2003-2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering. + +AC_DEFUN([gl_FUNC_LSTAT], +[ + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + dnl If lstat does not exist, the replacement does + dnl "#define lstat stat", and lstat.c does not need to be compiled. + AC_CHECK_FUNCS_ONCE([lstat]) + if test $ac_cv_func_lstat = yes; then + AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK + dnl Note: AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK does AC_LIBOBJ([lstat]). + if test $ac_cv_func_lstat_dereferences_slashed_symlink = no; then + REPLACE_LSTAT=1 + fi + # Prerequisites of lib/lstat.c. + AC_REQUIRE([AC_C_INLINE]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/malloc.m4 b/coreseek/m4-1.4.13/m4/malloc.m4 new file mode 100644 index 0000000..8070171 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/malloc.m4 @@ -0,0 +1,41 @@ +# malloc.m4 serial 9 +dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# gl_FUNC_MALLOC_POSIX +# -------------------- +# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it +# fails), and replace malloc if it is not. +AC_DEFUN([gl_FUNC_MALLOC_POSIX], +[ + AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) + if test $gl_cv_func_malloc_posix = yes; then + HAVE_MALLOC_POSIX=1 + AC_DEFINE([HAVE_MALLOC_POSIX], [1], + [Define if the 'malloc' function is POSIX compliant.]) + else + AC_LIBOBJ([malloc]) + HAVE_MALLOC_POSIX=0 + fi + AC_SUBST([HAVE_MALLOC_POSIX]) +]) + +# Test whether malloc, realloc, calloc are POSIX compliant, +# Set gl_cv_func_malloc_posix to yes or no accordingly. +AC_DEFUN([gl_CHECK_MALLOC_POSIX], +[ + AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], + [gl_cv_func_malloc_posix], + [ + dnl It is too dangerous to try to allocate a large amount of memory: + dnl some systems go to their knees when you do that. So assume that + dnl all Unix implementations of the function are POSIX compliant. + AC_TRY_COMPILE([], + [#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + choke me + #endif + ], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no]) + ]) +]) diff --git a/coreseek/m4-1.4.13/m4/malloca.m4 b/coreseek/m4-1.4.13/m4/malloca.m4 new file mode 100644 index 0000000..2841ae8 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/malloca.m4 @@ -0,0 +1,14 @@ +# malloca.m4 serial 1 +dnl Copyright (C) 2003-2004, 2006-2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_MALLOCA], +[ + dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables + dnl @ALLOCA@ and @LTALLOCA@. + dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. + AC_REQUIRE([gl_EEMALLOC]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) +]) diff --git a/coreseek/m4-1.4.13/m4/math_h.m4 b/coreseek/m4-1.4.13/m4/math_h.m4 new file mode 100644 index 0000000..d941bc3 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/math_h.m4 @@ -0,0 +1,103 @@ +# math_h.m4 serial 14 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_MATH_H], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([math.h]) + AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[/* Solaris 10 has a broken definition of NAN. Other platforms + fail to provide NAN, or provide it only in C99 mode; this + test only needs to fail when NAN is provided but wrong. */ + float f = 1.0f; +#ifdef NAN + f = NAN; +#endif + return f == 0;]])], + [gl_cv_header_math_nan_works=yes], + [gl_cv_header_math_nan_works=no])]) + if test $gl_cv_header_math_nan_works = no; then + REPLACE_NAN=1 + fi + AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[/* Solaris 10 has a broken definition of HUGE_VAL. */ + double d = HUGE_VAL; + return d == 0;]])], + [gl_cv_header_math_huge_val_works=yes], + [gl_cv_header_math_huge_val_works=no])]) + if test $gl_cv_header_math_huge_val_works = no; then + REPLACE_HUGE_VAL=1 + fi +]) + +AC_DEFUN([gl_MATH_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_MATH_H_DEFAULTS], +[ + GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF]) + GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL]) + GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF]) + GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL]) + GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP]) + GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL]) + GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE]) + GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF]) + GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN]) + GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF]) + GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND]) + GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL]) + GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL]) + GNULIB_MATHL=0; AC_SUBST([GNULIB_MATHL]) + GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND]) + GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF]) + GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL]) + GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT]) + GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC]) + GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF]) + GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) + HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) + HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) + HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) + HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) + HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) + HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) + HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) + HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) + HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) + HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) + HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) + HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) + HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) + HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) + HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) + REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) + REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) + REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) + REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) + REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) + REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) + REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) + REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) + REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) + REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) + REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) + REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) + REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) + REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) + REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) + REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) + REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) + REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) +]) diff --git a/coreseek/m4-1.4.13/m4/mbrtowc.m4 b/coreseek/m4-1.4.13/m4/mbrtowc.m4 new file mode 100644 index 0000000..b6276b2 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/mbrtowc.m4 @@ -0,0 +1,382 @@ +# mbrtowc.m4 serial 14 +dnl Copyright (C) 2001-2002, 2004-2005, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBRTOWC], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + fi + AC_CHECK_FUNCS_ONCE([mbrtowc]) + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + fi + if test $HAVE_MBRTOWC != 0 && test $REPLACE_MBRTOWC != 1; then + gl_MBRTOWC_NULL_ARG + gl_MBRTOWC_RETVAL + gl_MBRTOWC_NUL_RETVAL + case "$gl_cv_func_mbrtowc_null_arg" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_NULL_ARG_BUG], [1], + [Define if the mbrtowc function has the NULL string argument bug.]) + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], + [Define if the mbrtowc function returns a wrong return value.]) + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], + [Define if the mbrtowc function does not return 0 for a NUL character.]) + REPLACE_MBRTOWC=1 + ;; + esac + fi + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([mbrtowc]) + gl_PREREQ_MBRTOWC + fi +]) + +dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that +dnl redefines the semantics of the given mbstate_t type. +dnl Result is REPLACE_MBSTATE_T. +dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to +dnl avoid inconsistencies. + +AC_DEFUN([gl_MBSTATE_T_BROKEN], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_CHECK_FUNCS_ONCE([mbsinit]) + AC_CHECK_FUNCS_ONCE([mbrtowc]) + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + gl_MBRTOWC_INCOMPLETE_STATE + gl_MBRTOWC_SANITYCHECK + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + if test $REPLACE_MBSTATE_T = 1; then + gl_REPLACE_WCHAR_H + fi +]) + +dnl Test whether mbrtowc puts the state into non-initial state when parsing an +dnl incomplete multibyte character. +dnl Result is gl_cv_func_mbrtowc_incomplete_state. + +AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], + [gl_cv_func_mbrtowc_incomplete_state], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on AIX and OSF/1. + osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_JA != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +}], + [gl_cv_func_mbrtowc_incomplete_state=yes], + [gl_cv_func_mbrtowc_incomplete_state=no], + []) + fi + ]) +]) + +dnl Test whether mbrtowc works not worse than mbtowc. +dnl Result is gl_cv_func_mbrtowc_sanitycheck. + +AC_DEFUN([gl_MBRTOWC_SANITYCHECK], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], + [gl_cv_func_mbrtowc_sanitycheck], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_ZH_CN != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +}], + [gl_cv_func_mbrtowc_sanitycheck=yes], + [gl_cv_func_mbrtowc_sanitycheck=no], + []) + fi + ]) +]) + +dnl Test whether mbrtowc supports a NULL string argument correctly. +dnl Result is gl_cv_func_mbrtowc_null_arg. + +AC_DEFUN([gl_MBRTOWC_NULL_ARG], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], + [gl_cv_func_mbrtowc_null_arg], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + mbstate_t state; + wchar_t wc; + int ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + mbrtowc (&wc, NULL, 5, &state); + /* Check that wc was not modified. */ + if (wc != (wchar_t) 0xBADFACE) + return 1; + } + return 0; +}], [gl_cv_func_mbrtowc_null_arg=yes], [gl_cv_func_mbrtowc_null_arg=no], []) + fi + ]) +]) + +dnl Test whether mbrtowc, when parsing the end of a multibyte character, +dnl correctly returns the number of bytes that were needed to complete the +dnl character (not the total number of bytes of the multibyte character). +dnl Result is gl_cv_func_mbrtowc_retval. + +AC_DEFUN([gl_MBRTOWC_RETVAL], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc has a correct return value], + [gl_cv_func_mbrtowc_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on HP-UX and Solaris. + hpux* | solaris*) gl_cv_func_mbrtowc_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 1) + return 1; + } + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 2) + return 1; + } + } + return 0; +}], + [gl_cv_func_mbrtowc_retval=yes], + [gl_cv_func_mbrtowc_retval=no], + []) + fi + ]) +]) + +dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. +dnl Result is gl_cv_func_mbrtowc_nul_retval. + +AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], + [gl_cv_func_mbrtowc_nul_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_ZH_CN != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 1; + } + return 0; +}], + [gl_cv_func_mbrtowc_nul_retval=yes], + [gl_cv_func_mbrtowc_nul_retval=no], + []) + fi + ]) +]) + +# Prerequisites of lib/mbrtowc.c. +AC_DEFUN([gl_PREREQ_MBRTOWC], [ + : +]) + + +dnl From Paul Eggert + +dnl This override of an autoconf macro can be removed when autoconf 2.60 or +dnl newer can be assumed everywhere. + +m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.60]),[-1],[ +AC_DEFUN([AC_FUNC_MBRTOWC], +[ + dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. + AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], + gl_cv_func_mbrtowc, + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[wchar_t wc; + char const s[] = ""; + size_t n = 1; + mbstate_t state; + return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], + gl_cv_func_mbrtowc=yes, + gl_cv_func_mbrtowc=no)]) + if test $gl_cv_func_mbrtowc = yes; then + AC_DEFINE([HAVE_MBRTOWC], [1], + [Define to 1 if mbrtowc and mbstate_t are properly declared.]) + fi +]) +]) diff --git a/coreseek/m4-1.4.13/m4/mbsinit.m4 b/coreseek/m4-1.4.13/m4/mbsinit.m4 new file mode 100644 index 0000000..03b055c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/mbsinit.m4 @@ -0,0 +1,30 @@ +# mbsinit.m4 serial 3 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBSINIT], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + fi + AC_CHECK_FUNCS_ONCE([mbsinit]) + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + fi + if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([mbsinit]) + gl_PREREQ_MBSINIT + fi +]) + +# Prerequisites of lib/mbsinit.c. +AC_DEFUN([gl_PREREQ_MBSINIT], [ + : +]) diff --git a/coreseek/m4-1.4.13/m4/mbstate_t.m4 b/coreseek/m4-1.4.13/m4/mbstate_t.m4 new file mode 100644 index 0000000..d4ec6f0 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/mbstate_t.m4 @@ -0,0 +1,34 @@ +# mbstate_t.m4 serial 12 +dnl Copyright (C) 2000-2002, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# From Paul Eggert. + +# BeOS 5 has but does not define mbstate_t, +# so you can't declare an object of that type. +# Check for this incompatibility with Standard C. + +# AC_TYPE_MBSTATE_T +# ----------------- +AC_DEFUN([AC_TYPE_MBSTATE_T], +[ + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11 + + AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT[ +# include ]], + [[mbstate_t x; return sizeof x;]])], + [ac_cv_type_mbstate_t=yes], + [ac_cv_type_mbstate_t=no])]) + if test $ac_cv_type_mbstate_t = yes; then + AC_DEFINE([HAVE_MBSTATE_T], [1], + [Define to 1 if declares mbstate_t.]) + else + AC_DEFINE([mbstate_t], [int], + [Define to a type if does not define.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/mkdtemp.m4 b/coreseek/m4-1.4.13/m4/mkdtemp.m4 new file mode 100644 index 0000000..444b618 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/mkdtemp.m4 @@ -0,0 +1,20 @@ +# mkdtemp.m4 serial 6 +dnl Copyright (C) 2001-2003, 2006-2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gt_FUNC_MKDTEMP], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REPLACE_FUNCS([mkdtemp]) + if test $ac_cv_func_mkdtemp = no; then + HAVE_MKDTEMP=0 + gl_PREREQ_MKDTEMP + fi +]) + +# Prerequisites of lib/mkdtemp.c +AC_DEFUN([gl_PREREQ_MKDTEMP], +[: +]) diff --git a/coreseek/m4-1.4.13/m4/mkstemp.m4 b/coreseek/m4-1.4.13/m4/mkstemp.m4 new file mode 100644 index 0000000..20d8a1b --- /dev/null +++ b/coreseek/m4-1.4.13/m4/mkstemp.m4 @@ -0,0 +1,56 @@ +#serial 17 + +# Copyright (C) 2001, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# On some hosts (e.g., HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a +# silly limit that it can create no more than 26 files from a given template. +# Other systems lack mkstemp altogether. +# On OSF1/Tru64 V4.0F, the system-provided mkstemp function can create +# only 32 files per process. +# On systems like the above, arrange to use the replacement function. +AC_DEFUN([gl_FUNC_MKSTEMP], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_REQUIRE([AC_SYS_LARGEFILE]) + + AC_CACHE_CHECK([for working mkstemp], + [gl_cv_func_working_mkstemp], + [ + mkdir conftest.mkstemp + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT], + [[int i; + off_t large = (off_t) 4294967295u; + if (large < 0) + large = 2147483647; + for (i = 0; i < 70; i++) + { + char templ[] = "conftest.mkstemp/coXXXXXX"; + int (*mkstemp_function) (char *) = mkstemp; + int fd = mkstemp_function (templ); + if (fd < 0 || lseek (fd, large, SEEK_SET) != large) + return 1; + close (fd); + } + return 0;]])], + [gl_cv_func_working_mkstemp=yes], + [gl_cv_func_working_mkstemp=no], + [gl_cv_func_working_mkstemp=no]) + rm -rf conftest.mkstemp + ]) + + if test $gl_cv_func_working_mkstemp != yes; then + REPLACE_MKSTEMP=1 + AC_LIBOBJ([mkstemp]) + gl_PREREQ_MKSTEMP + fi +]) + +# Prerequisites of lib/mkstemp.c. +AC_DEFUN([gl_PREREQ_MKSTEMP], +[ +]) diff --git a/coreseek/m4-1.4.13/m4/multiarch.m4 b/coreseek/m4-1.4.13/m4/multiarch.m4 new file mode 100644 index 0000000..3948e6e --- /dev/null +++ b/coreseek/m4-1.4.13/m4/multiarch.m4 @@ -0,0 +1,66 @@ +# multiarch.m4 serial 4 +dnl Copyright (C) 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Determine whether the compiler is or may be producing universal binaries. +# +# On MacOS X 10.5 and later systems, the user can create libraries and +# executables that work on multiple system types--known as "fat" or +# "universal" binaries--by specifying multiple '-arch' options to the +# compiler but only a single '-arch' option to the preprocessor. Like +# this: +# +# ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +# CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +# CPP="gcc -E" CXXCPP="g++ -E" +# +# Detect this situation and set the macro AA_APPLE_UNIVERSAL_BUILD at the +# beginning of config.h and set APPLE_UNIVERSAL_BUILD accordingly. + +dnl This macro must pass through AC_REQUIRE (never directly invoke it). +AC_DEFUN_ONCE([gl_MULTIARCH], +[ + dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. + gl_cv_c_multiarch=no + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + ]])], + [ + dnl Check for potential -arch flags. It is not universal unless + dnl there are at least two -arch flags with different values. + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done + ]) + if test $gl_cv_c_multiarch = yes; then + AC_DEFINE([AA_APPLE_UNIVERSAL_BUILD], [1], + [Define if the compiler is building for multiple architectures of Apple platforms at once.]) + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + AC_SUBST([APPLE_UNIVERSAL_BUILD]) +]) diff --git a/coreseek/m4-1.4.13/m4/nocrash.m4 b/coreseek/m4-1.4.13/m4/nocrash.m4 new file mode 100644 index 0000000..8626ea0 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/nocrash.m4 @@ -0,0 +1,102 @@ +# nocrash.m4 serial 2 +dnl Copyright (C) 2005, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. + +AC_PREREQ([2.13]) + +dnl Expands to some code for use in .c programs that will cause the configure +dnl test to exit instead of crashing. This is useful to avoid triggering +dnl action from a background debugger and to avoid core dumps. +dnl Usage: ... +dnl ]GL_NOCRASH[ +dnl ... +dnl int main() { nocrash_init(); ... } +AC_DEFUN([GL_NOCRASH],[[ +#include +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on MacOS X. */ +#include +#include +#include +#include +#include +#include +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#else +/* Avoid a crash on POSIX systems. */ +#include +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif +]]) diff --git a/coreseek/m4-1.4.13/m4/open.m4 b/coreseek/m4-1.4.13/m4/open.m4 new file mode 100644 index 0000000..6e286c9 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/open.m4 @@ -0,0 +1,66 @@ +# open.m4 serial 5 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_OPEN], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw* | pw*) + gl_REPLACE_OPEN + ;; + *) + dnl open("foo/") should not create a file when the file name has a + dnl trailing slash. + AC_CACHE_CHECK([whether open recognizes a trailing slash], + [gl_cv_func_open_slash], + [ + AC_TRY_RUN([ +#include +#if HAVE_UNISTD_H +# include +#endif +int main () +{ + return open ("conftest.sl/", O_CREAT, 0600) >= 0; +}], [gl_cv_func_open_slash=yes], [gl_cv_func_open_slash=no], + [ +changequote(,)dnl + case "$host_os" in + solaris2.[0-9]*) gl_cv_func_open_slash="guessing no" ;; + hpux*) gl_cv_func_open_slash="guessing no" ;; + *) gl_cv_func_open_slash="guessing yes" ;; + esac +changequote([,])dnl + ]) + rm -f conftest.sl + ]) + case "$gl_cv_func_open_slash" in + *no) + AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], + [Define to 1 if open() fails to recognize a trailing slash.]) + gl_REPLACE_OPEN + ;; + esac + ;; + esac +]) + +AC_DEFUN([gl_REPLACE_OPEN], +[ + AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) + if test $REPLACE_OPEN != 1; then + AC_LIBOBJ([open]) + gl_PREREQ_OPEN + fi + REPLACE_OPEN=1 +]) + +# Prerequisites of lib/open.c. +AC_DEFUN([gl_PREREQ_OPEN], +[ + AC_REQUIRE([AC_C_INLINE]) + : +]) diff --git a/coreseek/m4-1.4.13/m4/pathmax.m4 b/coreseek/m4-1.4.13/m4/pathmax.m4 new file mode 100644 index 0000000..4651801 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/pathmax.m4 @@ -0,0 +1,12 @@ +# pathmax.m4 serial 8 +dnl Copyright (C) 2002, 2003, 2005, 2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_PATHMAX], +[ + dnl Prerequisites of lib/pathmax.h. + AC_CHECK_FUNCS_ONCE([pathconf]) + AC_CHECK_HEADERS_ONCE([sys/param.h]) +]) diff --git a/coreseek/m4-1.4.13/m4/pipe.m4 b/coreseek/m4-1.4.13/m4/pipe.m4 new file mode 100644 index 0000000..fe7876f --- /dev/null +++ b/coreseek/m4-1.4.13/m4/pipe.m4 @@ -0,0 +1,12 @@ +# pipe.m4 serial 4 +dnl Copyright (C) 2004, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_PIPE], +[ + dnl Prerequisites of lib/pipe.c. + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([AC_TYPE_MODE_T]) +]) diff --git a/coreseek/m4-1.4.13/m4/po.m4 b/coreseek/m4-1.4.13/m4/po.m4 new file mode 100644 index 0000000..2284fa5 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/po.m4 @@ -0,0 +1,449 @@ +# po.m4 serial 17 (gettext-0.18) +dnl Copyright (C) 1995-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ([2.50]) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + AC_REQUIRE([AM_NLS])dnl + + dnl Release version of the gettext macros. This is used to ensure that + dnl the gettext macros and po/Makefile.in.in are in sync. + AC_SUBST([GETTEXT_MACRO_VERSION], [0.17]) + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + dnl Support for AM_XGETTEXT_OPTION. + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" < +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern char **environ; + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +#ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +#endif +#ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +#endif +#ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +#endif + +#define CHILD_PROGRAM_FILENAME "/non/exist/ent" + +static int +fd_safer (int fd) +{ + if (0 <= fd && fd <= 2) + { + int f = fd_safer (dup (fd)); + int e = errno; + close (fd); + errno = e; + fd = f; + } + + return fd; +} + +int +main () +{ + char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL }; + int ofd[2]; + sigset_t blocked_signals; + sigset_t fatal_signal_set; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + int status; + int exitstatus; + + setvbuf (stdout, NULL, _IOFBF, 0); + puts ("This should be seen only once."); + if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) + { + perror ("cannot create pipe"); + exit (1); + } + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + sigemptyset (&fatal_signal_set); + sigaddset (&fatal_signal_set, SIGINT); + sigaddset (&fatal_signal_set, SIGTERM); + sigaddset (&fatal_signal_set, SIGHUP); + sigaddset (&fatal_signal_set, SIGPIPE); + sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 + || (err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 + || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) + || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + if (err == ENOENT) + return 0; + else + { + errno = err; + perror ("subprocess failed"); + exit (1); + } + } + posix_spawn_file_actions_destroy (&actions); + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + close (ofd[0]); + close (ofd[1]); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + exit (1); + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 127) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + exit (1); + } + return 0; +} +]])], + [if test -s conftest$ac_exeext \ + && ./conftest$ac_exeext > conftest.out \ + && echo 'This should be seen only once.' > conftest.ok \ + && cmp conftest.out conftest.ok > /dev/null; then + gl_cv_func_posix_spawn_works=yes + else + gl_cv_func_posix_spawn_works=no + fi], + [gl_cv_func_posix_spawn_works=no]) + if test $gl_cv_func_posix_spawn_works = yes; then + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +/* Test whether posix_spawn_file_actions_addopen supports filename arguments + that contain special characters such as '*'. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern char **environ; + +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +#ifndef WTERMSIG +# define WTERMSIG(x) ((x) & 0x7f) +#endif +#ifndef WIFEXITED +# define WIFEXITED(x) (WTERMSIG (x) == 0) +#endif +#ifndef WEXITSTATUS +# define WEXITSTATUS(x) (((x) >> 8) & 0xff) +#endif + +#define CHILD_PROGRAM_FILENAME "conftest" +#define DATA_FILENAME "conftest%=*#?" + +static int +parent_main (void) +{ + FILE *fp; + char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; + posix_spawn_file_actions_t actions; + bool actions_allocated; + int err; + pid_t child; + int status; + int exitstatus; + + /* Create a data file with specific contents. */ + fp = fopen (DATA_FILENAME, "wb"); + if (fp == NULL) + { + perror ("cannot create data file"); + return 1; + } + fwrite ("Halle Potta", 1, 11, fp); + if (fflush (fp) || fclose (fp)) + { + perror ("cannot prepare data file"); + return 1; + } + + /* Avoid reading from our stdin, as it could block. */ + freopen ("/dev/null", "rb", stdin); + + /* Test whether posix_spawn_file_actions_addopen with this file name + actually works, but spawning a child that reads from this file. */ + actions_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0 + || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + errno = err; + perror ("subprocess failed"); + return 1; + } + posix_spawn_file_actions_destroy (&actions); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + return 1; + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 0) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + return 1; + } + return 0; +} + +static int +child_main (void) +{ + char buf[1024]; + + /* See if reading from STDIN_FILENO yields the expected contents. */ + if (fread (buf, 1, sizeof (buf), stdin) == 11 + && memcmp (buf, "Halle Potta", 11) == 0) + return 0; + else + return 2; +} + +static void +cleanup_then_die (int sig) +{ + /* Clean up data file. */ + unlink (DATA_FILENAME); + + /* Re-raise the signal and die from it. */ + signal (sig, SIG_DFL); + raise (sig); +} + +int +main (int argc, char *argv[]) +{ + int exitstatus; + + if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) + { + /* This is the parent process. */ + signal (SIGINT, cleanup_then_die); + signal (SIGTERM, cleanup_then_die); + #ifdef SIGHUP + signal (SIGHUP, cleanup_then_die); + #endif + + exitstatus = parent_main (); + } + else + { + /* This is the child process. */ + + exitstatus = child_main (); + } + unlink (DATA_FILENAME); + return exitstatus; +} +]])], + [], + [gl_cv_func_posix_spawn_works=no]) + fi + else + case "$host_os" in + aix*) gl_cv_func_posix_spawn_works="guessing no";; + *) gl_cv_func_posix_spawn_works="guessing yes";; + esac + fi + ]) +]) + +AC_DEFUN([gl_POSIX_SPAWN_INTERNAL], +[ + AC_LIBOBJ([spawni]) + dnl Prerequisites of lib/spawni.c. + AC_CHECK_HEADERS([paths.h]) + AC_CHECK_FUNCS([confstr sched_setparam sched_setscheduler setegid seteuid vfork]) +]) diff --git a/coreseek/m4-1.4.13/m4/printf-frexp.m4 b/coreseek/m4-1.4.13/m4/printf-frexp.m4 new file mode 100644 index 0000000..fa0aa15 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/printf-frexp.m4 @@ -0,0 +1,45 @@ +# printf-frexp.m4 serial 3 +dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to define printf_frexp() without linking with libm. + +AC_DEFUN([gl_FUNC_PRINTF_FREXP], +[ + AC_CACHE_CHECK([whether frexp can be used without linking with libm], + [gl_cv_func_frexp_no_libm], + [ + AC_TRY_LINK([#include + double x; + int y;], + [return frexp (x, &y) < 1;], + [gl_cv_func_frexp_no_libm=yes], + [gl_cv_func_frexp_no_libm=no]) + ]) + if test $gl_cv_func_frexp_no_libm = yes; then + gl_FUNC_FREXP_WORKS + case "$gl_cv_func_frexp_works" in + *yes) + AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], + [Define if the frexp function is available in libc.]) + ;; + esac + fi + + AC_CACHE_CHECK([whether ldexp can be used without linking with libm], + [gl_cv_func_ldexp_no_libm], + [ + AC_TRY_LINK([#include + double x; + int y;], + [return ldexp (x, y) < 1;], + [gl_cv_func_ldexp_no_libm=yes], + [gl_cv_func_ldexp_no_libm=no]) + ]) + if test $gl_cv_func_ldexp_no_libm = yes; then + AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], + [Define if the ldexp function is available in libc.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/printf-frexpl.m4 b/coreseek/m4-1.4.13/m4/printf-frexpl.m4 new file mode 100644 index 0000000..f2eb200 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/printf-frexpl.m4 @@ -0,0 +1,64 @@ +# printf-frexpl.m4 serial 6 +dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to define printf_frexpl() without linking with libm. + +AC_DEFUN([gl_FUNC_PRINTF_FREXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + dnl Subset of gl_FUNC_FREXPL_NO_LIBM. + AC_CACHE_CHECK([whether frexpl can be used without linking with libm], + [gl_cv_func_frexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x; + int y;], + [return frexpl (x, &y) < 1;], + [gl_cv_func_frexpl_no_libm=yes], + [gl_cv_func_frexpl_no_libm=no]) + ]) + if test $gl_cv_func_frexpl_no_libm = yes; then + gl_FUNC_FREXPL_WORKS + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], + [Define if the frexpl function is available in libc.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has frexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [#include ]) + fi + + AC_CACHE_CHECK([whether ldexpl can be used without linking with libm], + [gl_cv_func_ldexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x; + int y;], + [return ldexpl (x, y) < 1;], + [gl_cv_func_ldexpl_no_libm=yes], + [gl_cv_func_ldexpl_no_libm=no]) + ]) + if test $gl_cv_func_ldexpl_no_libm = yes; then + gl_FUNC_LDEXPL_WORKS + case "$gl_cv_func_ldexpl_works" in + *yes) + AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1], + [Define if the ldexpl function is available in libc.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has ldexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [#include ]) + ;; + esac + fi +]) diff --git a/coreseek/m4-1.4.13/m4/printf.m4 b/coreseek/m4-1.4.13/m4/printf.m4 new file mode 100644 index 0000000..87aa45c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/printf.m4 @@ -0,0 +1,1416 @@ +# printf.m4 serial 33 +dnl Copyright (C) 2003, 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Test whether the *printf family of functions supports the 'j', 'z', 't', +dnl 'L' size specifiers. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_sizes_c99. + +AC_DEFUN([gl_PRINTF_SIZES_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports size specifiers as in C99], + [gl_cv_func_printf_sizes_c99], + [ + AC_TRY_RUN([ +#include +#include +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +# include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +# include +#endif +static char buf[100]; +int main () +{ +#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX + buf[0] = '\0'; + if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 + || strcmp (buf, "12345671 33") != 0) + return 1; +#endif + buf[0] = '\0'; + if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 + || strcmp (buf, "12345672 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 + || strcmp (buf, "12345673 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 + || strcmp (buf, "1.5 33") != 0) + return 1; + return 0; +}], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_printf_sizes_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; + darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_printf_sizes_c99="guessing no";; + openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[0-9]*) gl_cv_func_printf_sizes_c99="guessing no";; + solaris*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_sizes_c99="guessing no";; + netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_sizes_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports 'long double' +dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_long_double. + +AC_DEFUN([gl_PRINTF_LONG_DOUBLE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports 'long double' arguments], + [gl_cv_func_printf_long_double], + [ + AC_TRY_RUN([ +#include +#include +static char buf[10000]; +int main () +{ + buf[0] = '\0'; + if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000e+00 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.75 33") != 0) + return 1; + return 0; +}], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no], + [ +changequote(,)dnl + case "$host_os" in + beos*) gl_cv_func_printf_long_double="guessing no";; + mingw* | pw*) gl_cv_func_printf_long_double="guessing no";; + *) gl_cv_func_printf_long_double="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports infinite and NaN +dnl 'double' arguments and negative zero arguments in the %f, %e, %g +dnl directives. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_infinite. + +AC_DEFUN([gl_PRINTF_INFINITE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], + [gl_cv_func_printf_infinite], + [ + AC_TRY_RUN([ +#include +#include +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static int +have_minus_zero () +{ + static double plus_zero = 0.0; + double minus_zero = - plus_zero; + return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; +} +static char buf[10000]; +static double zero = 0.0; +int main () +{ + if (sprintf (buf, "%f", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%f", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%f", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%e", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%e", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%e", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%g", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%g", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%g", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + /* This test fails on HP-UX 10.20. */ + if (have_minus_zero ()) + if (sprintf (buf, "%g", - zero) < 0 + || strcmp (buf, "-0") != 0) + return 1; + return 0; +}], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; + darwin*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; + hpux*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite="guessing no";; + netbsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_infinite="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports infinite and NaN +dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_infinite_long_double. + +AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl The user can set or unset the variable gl_printf_safe to indicate + dnl that he wishes a safe handling of non-IEEE-754 'long double' values. + if test -n "$gl_printf_safe"; then + AC_DEFINE([CHECK_PRINTF_SAFE], [1], + [Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values.]) + fi + case "$gl_cv_func_printf_long_double" in + *yes) + AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], + [gl_cv_func_printf_infinite_long_double], + [ + AC_TRY_RUN([ +]GL_NOCRASH[ +#include +#include +#include +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static char buf[10000]; +static long double zeroL = 0.0L; +int main () +{ + nocrash_init(); + if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Le", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } +#endif + return 0; +}], + [gl_cv_func_printf_infinite_long_double=yes], + [gl_cv_func_printf_infinite_long_double=no], + [ +changequote(,)dnl + case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; + *) + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite_long_double="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite_long_double="guessing no";; + darwin*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; + hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite_long_double="guessing no";; + netbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite_long_double="guessing no";; + esac + ;; + esac +changequote([,])dnl + ]) + ]) + ;; + *) + gl_cv_func_printf_infinite_long_double="irrelevant" + ;; + esac +]) + +dnl Test whether the *printf family of functions supports the 'a' and 'A' +dnl conversion specifier for hexadecimal output of floating-point numbers. +dnl (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_a. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_A], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], + [gl_cv_func_printf_directive_a], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.922p+1 33") != 0 + && strcmp (buf, "0x3.244p+0 33") != 0 + && strcmp (buf, "0x6.488p-1 33") != 0 + && strcmp (buf, "0xc.91p-2 33") != 0)) + return 1; + if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "-0X1.922P+1 33") != 0 + && strcmp (buf, "-0X3.244P+0 33") != 0 + && strcmp (buf, "-0X6.488P-1 33") != 0 + && strcmp (buf, "-0XC.91P-2 33") != 0)) + return 1; + /* This catches a FreeBSD 6.1 bug: it doesn't round. */ + if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.83p+0 33") != 0 + && strcmp (buf, "0x3.05p-1 33") != 0 + && strcmp (buf, "0x6.0ap-2 33") != 0 + && strcmp (buf, "0xc.14p-3 33") != 0)) + return 1; + /* This catches a FreeBSD 6.1 bug. See + */ + if (sprintf (buf, "%010a %d", 1.0 / 0.0, 33, 44, 55) < 0 + || buf[0] == '0') + return 1; + /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */ + if (sprintf (buf, "%.1a", 1.999) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + return 1; + /* This catches the same MacOS X 10.3.9 (Darwin 7.9) bug and also a + glibc 2.4 bug . */ + if (sprintf (buf, "%.1La", 1.999L) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + return 1; + return 0; +}], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no], + [ + case "$host_os" in + # Guess yes on glibc >= 2.5 systems. + *-gnu*) + AC_EGREP_CPP([BZ2908], [ + #include + #ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2) + BZ2908 + #endif + #endif + ], + [gl_cv_func_printf_directive_a="guessing yes"], + [gl_cv_func_printf_directive_a="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_a="guessing no";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %F format +dnl directive. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_f. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_F], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'F' directive], + [gl_cv_func_printf_directive_f], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 + || strcmp (buf, "1234567.000000 33") != 0) + return 1; + if (sprintf (buf, "%F", 1.0 / 0.0) < 0 + || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) + return 1; + /* This catches a Cygwin 1.5.x bug. */ + if (sprintf (buf, "%.F", 1234.0) < 0 + || strcmp (buf, "1234") != 0) + return 1; + return 0; +}], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_directive_f="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; + darwin*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[0-9]*) gl_cv_func_printf_directive_f="guessing no";; + solaris*) gl_cv_func_printf_directive_f="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_f="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %n format +dnl directive. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_n. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_N], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'n' directive], + [gl_cv_func_printf_directive_n], + [ + AC_TRY_RUN([ +#include +#include +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 + || strcmp (buf, "123 ") != 0 + || count != 4) + return 1; + return 0; +}], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no], + [ +changequote(,)dnl + case "$host_os" in + *) gl_cv_func_printf_directive_n="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %ls format +dnl directive and in particular, when a precision is specified, whether +dnl the functions stop converting the wide string argument when the number +dnl of bytes that have been produced by this conversion equals or exceeds +dnl the precision. +dnl Result is gl_cv_func_printf_directive_ls. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'ls' directive], + [gl_cv_func_printf_directive_ls], + [ + AC_TRY_RUN([ +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +#include +int main () +{ + char buf[100]; + /* Test whether %ls works at all. + This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on + Cygwin 1.5. */ + { + static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "abc") != 0) + return 1; + } + /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an + assertion failure inside libc), but not on OpenBSD 4.0. */ + { + static const wchar_t wstring[] = { 'a', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "a") != 0) + return 1; + } + /* Test whether precisions in %ls are supported as specified in ISO C 99 + section 7.19.6.1: + "If a precision is specified, no more than that many bytes are written + (including shift sequences, if any), and the array shall contain a + null wide character if, to equal the multibyte character sequence + length given by the precision, the function would need to access a + wide character one past the end of the array." + This test fails on Solaris 10. */ + { + static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%.2ls", wstring) < 0 + || strcmp (buf, "ab") != 0) + return 1; + } + return 0; +}], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no], + [ +changequote(,)dnl + case "$host_os" in + openbsd*) gl_cv_func_printf_directive_ls="guessing no";; + irix*) gl_cv_func_printf_directive_ls="guessing no";; + solaris*) gl_cv_func_printf_directive_ls="guessing no";; + cygwin*) gl_cv_func_printf_directive_ls="guessing no";; + beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; + *) gl_cv_func_printf_directive_ls="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports POSIX/XSI format +dnl strings with positions. (POSIX:2001) +dnl Result is gl_cv_func_printf_positions. + +AC_DEFUN([gl_PRINTF_POSITIONS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], + [gl_cv_func_printf_positions], + [ + AC_TRY_RUN([ +#include +#include +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +}], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no], + [ +changequote(,)dnl + case "$host_os" in + netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) + gl_cv_func_printf_positions="guessing no";; + beos*) gl_cv_func_printf_positions="guessing no";; + mingw* | pw*) gl_cv_func_printf_positions="guessing no";; + *) gl_cv_func_printf_positions="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports POSIX/XSI format +dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) +dnl Result is gl_cv_func_printf_flag_grouping. + +AC_DEFUN([gl_PRINTF_FLAG_GROUPING], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the grouping flag], + [gl_cv_func_printf_flag_grouping], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%'d %d", 1234567, 99) < 0 + || buf[strlen (buf) - 1] != '9') + return 1; + return 0; +}], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no], + [ +changequote(,)dnl + case "$host_os" in + cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; + netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; + mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; + *) gl_cv_func_printf_flag_grouping="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the - flag correctly. +dnl (ISO C99.) See +dnl +dnl Result is gl_cv_func_printf_flag_leftadjust. + +AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], + [gl_cv_func_printf_flag_leftadjust], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + /* Check that a '-' flag is not annihilated by a negative width. */ + if (sprintf (buf, "a%-*sc", -3, "b") < 0 + || strcmp (buf, "ab c") != 0) + return 1; + return 0; +}], + [gl_cv_func_printf_flag_leftadjust=yes], + [gl_cv_func_printf_flag_leftadjust=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on HP-UX 11. + hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess no on HP-UX 10 and older. + hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; + # Guess yes otherwise. + *) gl_cv_func_printf_flag_leftadjust="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports padding of non-finite +dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See +dnl +dnl Result is gl_cv_func_printf_flag_zero. + +AC_DEFUN([gl_PRINTF_FLAG_ZERO], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the zero flag correctly], + [gl_cv_func_printf_flag_zero], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%010f", 1.0 / 0.0, 33, 44, 55) < 0 + || (strcmp (buf, " inf") != 0 + && strcmp (buf, " infinity") != 0)) + return 1; + return 0; +}], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_flag_zero="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_flag_zero="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports large precisions. +dnl On mingw, precisions larger than 512 are treated like 512, in integer, +dnl floating-point or pointer output. On BeOS, precisions larger than 1044 +dnl crash the program. +dnl Result is gl_cv_func_printf_precision. + +AC_DEFUN([gl_PRINTF_PRECISION], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports large precisions], + [gl_cv_func_printf_precision], + [ + AC_TRY_RUN([ +#include +#include +static char buf[5000]; +int main () +{ +#ifdef __BEOS__ + /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ + return 1; +#endif + if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + return 1; + return 0; +}], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess no only on native Win32 and BeOS systems. + mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; + beos*) gl_cv_func_printf_precision="guessing no" ;; + *) gl_cv_func_printf_precision="guessing yes" ;; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions recovers gracefully in case +dnl of an out-of-memory condition, or whether it crashes the entire program. +dnl Result is gl_cv_func_printf_enomem. + +AC_DEFUN([gl_PRINTF_ENOMEM], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_MULTIARCH]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf survives out-of-memory conditions], + [gl_cv_func_printf_enomem], + [ + gl_cv_func_printf_enomem="guessing no" + if test "$cross_compiling" = no; then + if test $APPLE_UNIVERSAL_BUILD = 0; then + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +]GL_NOCRASH[ +changequote(,)dnl +#include +#include +#include +#include +#include +int main() +{ + struct rlimit limit; + int ret; + nocrash_init (); + /* Some printf implementations allocate temporary space with malloc. */ + /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ +#ifdef RLIMIT_DATA + if (getrlimit (RLIMIT_DATA, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_DATA, &limit) < 0) + return 77; +#endif + /* On Linux systems, malloc() is limited by RLIMIT_AS. */ +#ifdef RLIMIT_AS + if (getrlimit (RLIMIT_AS, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_AS, &limit) < 0) + return 77; +#endif + /* Some printf implementations allocate temporary space on the stack. */ +#ifdef RLIMIT_STACK + if (getrlimit (RLIMIT_STACK, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_STACK, &limit) < 0) + return 77; +#endif + ret = printf ("%.5000000f", 1.0); + return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + (./conftest + result=$? + if test $result != 0 && test $result != 77; then result=1; fi + exit $result + ) >/dev/null 2>/dev/null + case $? in + 0) gl_cv_func_printf_enomem="yes" ;; + 77) gl_cv_func_printf_enomem="guessing no" ;; + *) gl_cv_func_printf_enomem="no" ;; + esac + else + gl_cv_func_printf_enomem="guessing no" + fi + rm -fr conftest* + else + dnl A universal build on Apple MacOS X platforms. + dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. + dnl But we need a configuration result that is valid in both modes. + gl_cv_func_printf_enomem="guessing no" + fi + fi + if test "$gl_cv_func_printf_enomem" = "guessing no"; then +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Solaris. + solaris*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on AIX. + aix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on HP-UX/hppa. + hpux*) case "$host_cpu" in + hppa*) gl_cv_func_printf_enomem="guessing yes";; + *) gl_cv_func_printf_enomem="guessing no";; + esac + ;; + # Guess yes on IRIX. + irix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on OSF/1. + osf*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Haiku. + haiku*) gl_cv_func_printf_enomem="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_enomem="guessing no";; + esac +changequote([,])dnl + fi + ]) +]) + +dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) +dnl Result is ac_cv_func_snprintf. + +AC_DEFUN([gl_SNPRINTF_PRESENCE], +[ + AC_CHECK_FUNCS_ONCE([snprintf]) +]) + +dnl Test whether the string produced by the snprintf function is always NUL +dnl terminated. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_snprintf_truncation_c99. + +AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether snprintf truncates the result as in C99], + [gl_cv_func_snprintf_truncation_c99], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + snprintf (buf, 3, "%d %d", 4567, 89); + if (memcmp (buf, "45\0DEF", 6) != 0) + return 1; + return 0; +}], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; + darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; + hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on OSF/1 >= 5. + osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_truncation_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the return value of the snprintf function is the number +dnl of bytes (excluding the terminating NUL) that would have been produced +dnl if the buffer had been large enough. (ISO C99, POSIX:2001) +dnl For example, this test program fails on IRIX 6.5: +dnl --------------------------------------------------------------------- +dnl #include +dnl int main() +dnl { +dnl static char buf[8]; +dnl int retval = snprintf (buf, 3, "%d", 12345); +dnl return retval >= 0 && retval < 3; +dnl } +dnl --------------------------------------------------------------------- +dnl Result is gl_cv_func_snprintf_retval_c99. + +AC_DEFUN([gl_SNPRINTF_RETVAL_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], + [gl_cv_func_snprintf_retval_c99], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + if (snprintf (buf, 3, "%d %d", 4567, 89) != 7) + return 1; + return 0; +}], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_retval_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; + darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_retval_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5]*) gl_cv_func_snprintf_retval_c99="guessing no";; + solaris*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; + aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_retval_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_retval_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the snprintf function supports the %n format directive +dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_snprintf_directive_n. + +AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], + [gl_cv_func_snprintf_directive_n], + [ + AC_TRY_RUN([ +#include +#include +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); + if (count != 6) + return 1; + return 0; +}], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_directive_n="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; + darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5]*) gl_cv_func_snprintf_directive_n="guessing no";; + solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; + aix*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on OSF/1 >= 5. + osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; + osf*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_directive_n="guessing no";; + netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_directive_n="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_directive_n="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the snprintf function, when passed a size = 1, writes any +dnl output without bounds in this case, behaving like sprintf. This is the +dnl case on Linux libc5. +dnl Result is gl_cv_func_snprintf_size1. + +AC_DEFUN([gl_SNPRINTF_SIZE1], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([whether snprintf respects a size of 1], + [gl_cv_func_snprintf_size1], + [ + AC_TRY_RUN([ +#include +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + snprintf (buf, 1, "%d", 12345); + return buf[1] != 'E'; +}], + [gl_cv_func_snprintf_size1=yes], + [gl_cv_func_snprintf_size1=no], + [gl_cv_func_snprintf_size1="guessing yes"]) + ]) +]) + +dnl Test whether the vsnprintf function, when passed a zero size, produces no +dnl output. (ISO C99, POSIX:2001) +dnl For example, snprintf nevertheless writes a NUL byte in this case +dnl on OSF/1 5.1: +dnl --------------------------------------------------------------------- +dnl #include +dnl int main() +dnl { +dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; +dnl snprintf (buf, 0, "%d", 12345); +dnl return buf[0] != 'D'; +dnl } +dnl --------------------------------------------------------------------- +dnl And vsnprintf writes any output without bounds in this case, behaving like +dnl vsprintf, on HP-UX 11 and OSF/1 5.1: +dnl --------------------------------------------------------------------- +dnl #include +dnl #include +dnl static int my_snprintf (char *buf, int size, const char *format, ...) +dnl { +dnl va_list args; +dnl int ret; +dnl va_start (args, format); +dnl ret = vsnprintf (buf, size, format, args); +dnl va_end (args); +dnl return ret; +dnl } +dnl int main() +dnl { +dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; +dnl my_snprintf (buf, 0, "%d", 12345); +dnl return buf[0] != 'D'; +dnl } +dnl --------------------------------------------------------------------- +dnl Result is gl_cv_func_vsnprintf_zerosize_c99. + +AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], + [gl_cv_func_vsnprintf_zerosize_c99], + [ + AC_TRY_RUN([ +#include +#include +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + my_snprintf (buf, 0, "%d", 12345); + return buf[0] != 'D'; +}], + [gl_cv_func_vsnprintf_zerosize_c99=yes], + [gl_cv_func_vsnprintf_zerosize_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Cygwin. + cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on mingw. + mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl The results of these tests on various platforms are: +dnl +dnl 1 = gl_PRINTF_SIZES_C99 +dnl 2 = gl_PRINTF_LONG_DOUBLE +dnl 3 = gl_PRINTF_INFINITE +dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE +dnl 5 = gl_PRINTF_DIRECTIVE_A +dnl 6 = gl_PRINTF_DIRECTIVE_F +dnl 7 = gl_PRINTF_DIRECTIVE_N +dnl 8 = gl_PRINTF_DIRECTIVE_LS +dnl 9 = gl_PRINTF_POSITIONS +dnl 10 = gl_PRINTF_FLAG_GROUPING +dnl 11 = gl_PRINTF_FLAG_LEFTADJUST +dnl 12 = gl_PRINTF_FLAG_ZERO +dnl 13 = gl_PRINTF_PRECISION +dnl 14 = gl_PRINTF_ENOMEM +dnl 15 = gl_SNPRINTF_PRESENCE +dnl 16 = gl_SNPRINTF_TRUNCATION_C99 +dnl 17 = gl_SNPRINTF_RETVAL_C99 +dnl 18 = gl_SNPRINTF_DIRECTIVE_N +dnl 19 = gl_SNPRINTF_SIZE1 +dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 +dnl +dnl 1 = checking whether printf supports size specifiers as in C99... +dnl 2 = checking whether printf supports 'long double' arguments... +dnl 3 = checking whether printf supports infinite 'double' arguments... +dnl 4 = checking whether printf supports infinite 'long double' arguments... +dnl 5 = checking whether printf supports the 'a' and 'A' directives... +dnl 6 = checking whether printf supports the 'F' directive... +dnl 7 = checking whether printf supports the 'n' directive... +dnl 8 = checking whether printf supports the 'ls' directive... +dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... +dnl 10 = checking whether printf supports the grouping flag... +dnl 11 = checking whether printf supports the left-adjust flag correctly... +dnl 12 = checking whether printf supports the zero flag correctly... +dnl 13 = checking whether printf supports large precisions... +dnl 14 = checking whether printf survives out-of-memory conditions... +dnl 15 = checking for snprintf... +dnl 16 = checking whether snprintf truncates the result as in C99... +dnl 17 = checking whether snprintf returns a byte count as in C99... +dnl 18 = checking whether snprintf fully supports the 'n' directive... +dnl 19 = checking whether snprintf respects a size of 1... +dnl 20 = checking whether vsnprintf respects a zero size as in C99... +dnl +dnl . = yes, # = no. +dnl +dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . +dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . +dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . +dnl MacOS X 10.3.9 . . . . # . . . . . . # . # . . . . . . +dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . +dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . +dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . +dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . +dnl Solaris 10 . . # # # . . # . . . # . . . . . . . . +dnl Solaris 2.6 ... 9 # . # # # # . # . . . # . . . . . . . . +dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # +dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . +dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . . . . . +dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . +dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # +dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # +dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . +dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # +dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # +dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? +dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . +dnl Haiku . . . # # # . # . . . . . ? . . . . . . +dnl BeOS # # . # # # . ? # . ? . # ? . . . . . . +dnl mingw # # # # # # . . # # . # # ? . # # # . . diff --git a/coreseek/m4-1.4.13/m4/quotearg.m4 b/coreseek/m4-1.4.13/m4/quotearg.m4 new file mode 100644 index 0000000..eec9e68 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/quotearg.m4 @@ -0,0 +1,10 @@ +# quotearg.m4 serial 8 +dnl Copyright (C) 2002, 2004-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_QUOTEARG], +[ + AC_LIBOBJ([quotearg]) +]) diff --git a/coreseek/m4-1.4.13/m4/rawmemchr.m4 b/coreseek/m4-1.4.13/m4/rawmemchr.m4 new file mode 100644 index 0000000..1ac7b74 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/rawmemchr.m4 @@ -0,0 +1,21 @@ +# rawmemchr.m4 serial 1 +dnl Copyright (C) 2003, 2007, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_RAWMEMCHR], +[ + dnl Persuade glibc to declare rawmemchr(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REPLACE_FUNCS([rawmemchr]) + if test $ac_cv_func_rawmemchr = no; then + HAVE_RAWMEMCHR=0 + gl_PREREQ_RAWMEMCHR + fi +]) + +# Prerequisites of lib/strchrnul.c. +AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:]) diff --git a/coreseek/m4-1.4.13/m4/regex.m4 b/coreseek/m4-1.4.13/m4/regex.m4 new file mode 100644 index 0000000..aef53d2 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/regex.m4 @@ -0,0 +1,221 @@ +# serial 54 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl Initially derived from code in GNU grep. +dnl Mostly written by Jim Meyering. + +AC_PREREQ([2.50]) + +AC_DEFUN([gl_REGEX], +[ + AC_CHECK_HEADERS_ONCE([locale.h]) + + AC_ARG_WITH([included-regex], + [AS_HELP_STRING([--without-included-regex], + [don't compile regex; this is the default on systems + with recent-enough versions of the GNU C Library + (use with caution on other systems).])]) + + case $with_included_regex in #( + yes|no) ac_use_included_regex=$with_included_regex + ;; + '') + # If the system regex support is good enough that it passes the + # following run test, then default to *not* using the included regex.c. + # If cross compiling, assume the test would fail and use the included + # regex.c. + AC_CACHE_CHECK([for working re_compile_pattern], + [gl_cv_func_re_compile_pattern_working], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT[ + #if HAVE_LOCALE_H + #include + #endif + #include + #include + ]], + [[static struct re_pattern_buffer regex; + unsigned char folded_chars[UCHAR_MAX + 1]; + int i; + const char *s; + struct re_registers regs; + + #if HAVE_LOCALE_H + /* http://sourceware.org/ml/libc-hacker/2006-09/msg00008.html + This test needs valgrind to catch the bug on Debian + GNU/Linux 3.1 x86, but it might catch the bug better + on other platforms and it shouldn't hurt to try the + test here. */ + if (setlocale (LC_ALL, "en_US.UTF-8")) + { + static char const pat[] = "insert into"; + static char const data[] = + "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; + re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE + | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern (pat, sizeof pat - 1, ®ex); + if (s) + return 1; + if (re_search (®ex, data, sizeof data - 1, + 0, sizeof data - 1, ®s) + != -1) + return 1; + if (! setlocale (LC_ALL, "C")) + return 1; + } + #endif + + /* This test is from glibc bug 3957, reported by Andrew Mackey. */ + re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("a[^x]b", 6, ®ex); + if (s) + return 1; + + /* This should fail, but succeeds for glibc-2.5. */ + if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) + return 1; + + /* This regular expression is from Spencer ere test number 75 + in grep-2.3. */ + re_set_syntax (RE_SYNTAX_POSIX_EGREP); + memset (®ex, 0, sizeof regex); + for (i = 0; i <= UCHAR_MAX; i++) + folded_chars[i] = i; + regex.translate = folded_chars; + s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); + /* This should fail with _Invalid character class name_ error. */ + if (!s) + return 1; + + /* This should succeed, but does not for glibc-2.1.3. */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("{1", 2, ®ex); + + if (s) + return 1; + + /* The following example is derived from a problem report + against gawk from Jorge Stolfi . */ + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[an\371]*n", 7, ®ex); + if (s) + return 1; + + /* This should match, but does not for glibc-2.2.1. */ + if (re_match (®ex, "an", 2, 0, ®s) != 2) + return 1; + + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + return 1; + + /* glibc-2.2.93 does not work with a negative RANGE argument. */ + if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) + return 1; + + /* The version of regex.c in older versions of gnulib + ignored RE_ICASE. Detect that problem too. */ + re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("x", 1, ®ex); + if (s) + return 1; + + if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) + return 1; + + /* Catch a bug reported by Vin Shelton in + http://lists.gnu.org/archive/html/bug-coreutils/2007-06/msg00089.html + */ + re_set_syntax (RE_SYNTAX_POSIX_BASIC + & ~RE_CONTEXT_INVALID_DUP + & ~RE_NO_EMPTY_RANGES); + memset (®ex, 0, sizeof regex); + s = re_compile_pattern ("[[:alnum:]_-]\\\\+$", 16, ®ex); + if (s) + return 1; + + /* REG_STARTEND was added to glibc on 2004-01-15. + Reject older versions. */ + if (! REG_STARTEND) + return 1; + + /* Reject hosts whose regoff_t values are too narrow. + These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t + and 32-bit int. */ + if (sizeof (regoff_t) < sizeof (ptrdiff_t) + || sizeof (regoff_t) < sizeof (ssize_t)) + return 1; + + return 0;]])], + [gl_cv_func_re_compile_pattern_working=yes], + [gl_cv_func_re_compile_pattern_working=no], + dnl When crosscompiling, assume it is not working. + [gl_cv_func_re_compile_pattern_working=no])]) + case $gl_cv_func_re_compile_pattern_working in #( + yes) ac_use_included_regex=no;; #( + no) ac_use_included_regex=yes;; + esac + ;; + *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex]) + ;; + esac + + if test $ac_use_included_regex = yes; then + AC_DEFINE([_REGEX_LARGE_OFFSETS], [1], + [Define if you want regoff_t to be at least as wide POSIX requires.]) + AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], + [Define to rpl_re_syntax_options if the replacement should be used.]) + AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], + [Define to rpl_re_set_syntax if the replacement should be used.]) + AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern], + [Define to rpl_re_compile_pattern if the replacement should be used.]) + AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap], + [Define to rpl_re_compile_fastmap if the replacement should be used.]) + AC_DEFINE([re_search], [rpl_re_search], + [Define to rpl_re_search if the replacement should be used.]) + AC_DEFINE([re_search_2], [rpl_re_search_2], + [Define to rpl_re_search_2 if the replacement should be used.]) + AC_DEFINE([re_match], [rpl_re_match], + [Define to rpl_re_match if the replacement should be used.]) + AC_DEFINE([re_match_2], [rpl_re_match_2], + [Define to rpl_re_match_2 if the replacement should be used.]) + AC_DEFINE([re_set_registers], [rpl_re_set_registers], + [Define to rpl_re_set_registers if the replacement should be used.]) + AC_DEFINE([re_comp], [rpl_re_comp], + [Define to rpl_re_comp if the replacement should be used.]) + AC_DEFINE([re_exec], [rpl_re_exec], + [Define to rpl_re_exec if the replacement should be used.]) + AC_DEFINE([regcomp], [rpl_regcomp], + [Define to rpl_regcomp if the replacement should be used.]) + AC_DEFINE([regexec], [rpl_regexec], + [Define to rpl_regexec if the replacement should be used.]) + AC_DEFINE([regerror], [rpl_regerror], + [Define to rpl_regerror if the replacement should be used.]) + AC_DEFINE([regfree], [rpl_regfree], + [Define to rpl_regfree if the replacement should be used.]) + AC_LIBOBJ([regex]) + gl_PREREQ_REGEX + fi +]) + +# Prerequisites of lib/regex.c and lib/regex_internal.c. +AC_DEFUN([gl_PREREQ_REGEX], +[ + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_CHECK_HEADERS([libintl.h]) + AC_CHECK_FUNCS_ONCE([isblank iswctype wcscoll]) + AC_CHECK_DECLS([isblank], [], [], [#include ]) +]) diff --git a/coreseek/m4-1.4.13/m4/sched_h.m4 b/coreseek/m4-1.4.13/m4/sched_h.m4 new file mode 100644 index 0000000..30c4d98 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/sched_h.m4 @@ -0,0 +1,36 @@ +# sched_h.m4 serial 2 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Bruno Haible. + +AC_DEFUN([gl_SCHED_H], +[ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ + #include + struct sched_param a; + int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER }; + ]])], + [SCHED_H=''], + [SCHED_H='sched.h' + + gl_CHECK_NEXT_HEADERS([sched.h]) + + AC_CHECK_HEADERS_ONCE([sched.h]) + if test $ac_cv_header_sched_h = yes; then + HAVE_SCHED_H=1 + else + HAVE_SCHED_H=0 + fi + AC_SUBST([HAVE_SCHED_H]) + + AC_CHECK_TYPE([struct sched_param], + [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0], + [#include ]) + AC_SUBST([HAVE_STRUCT_SCHED_PARAM]) + ]) + AC_SUBST([SCHED_H]) +]) diff --git a/coreseek/m4-1.4.13/m4/setenv.m4 b/coreseek/m4-1.4.13/m4/setenv.m4 new file mode 100644 index 0000000..e28407e --- /dev/null +++ b/coreseek/m4-1.4.13/m4/setenv.m4 @@ -0,0 +1,71 @@ +# setenv.m4 serial 11 +dnl Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_SETENV], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([setenv]) + if test $ac_cv_func_setenv = no; then + HAVE_SETENV=0 + AC_LIBOBJ([setenv]) + gl_PREREQ_SETENV + fi +]) + +# Like gl_FUNC_SETENV, except prepare for separate compilation (no AC_LIBOBJ). +AC_DEFUN([gl_FUNC_SETENV_SEPARATE], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([setenv]) + if test $ac_cv_func_setenv = no; then + HAVE_SETENV=0 + fi + gl_PREREQ_SETENV +]) + +AC_DEFUN([gl_FUNC_UNSETENV], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS([unsetenv]) + if test $ac_cv_func_unsetenv = no; then + HAVE_UNSETENV=0 + AC_LIBOBJ([unsetenv]) + gl_PREREQ_UNSETENV + else + AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], + [AC_TRY_COMPILE([#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +int unsetenv (const char *name); +#else +int unsetenv(); +#endif +], , gt_cv_func_unsetenv_ret='int', gt_cv_func_unsetenv_ret='void')]) + if test $gt_cv_func_unsetenv_ret = 'void'; then + VOID_UNSETENV=1 + fi + fi +]) + +# Prerequisites of lib/setenv.c. +AC_DEFUN([gl_PREREQ_SETENV], +[ + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([gl_ENVIRON]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CHECK_HEADERS([search.h]) + AC_CHECK_FUNCS([tsearch]) +]) + +# Prerequisites of lib/unsetenv.c. +AC_DEFUN([gl_PREREQ_UNSETENV], +[ + AC_REQUIRE([gl_ENVIRON]) + AC_CHECK_HEADERS_ONCE([unistd.h]) +]) diff --git a/coreseek/m4-1.4.13/m4/sig_atomic_t.m4 b/coreseek/m4-1.4.13/m4/sig_atomic_t.m4 new file mode 100644 index 0000000..d69f8cb --- /dev/null +++ b/coreseek/m4-1.4.13/m4/sig_atomic_t.m4 @@ -0,0 +1,14 @@ +# sig_atomic_t.m4 serial 2 +dnl Copyright (C) 2003, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gt_TYPE_SIG_ATOMIC_T], +[ + AC_CHECK_TYPES([sig_atomic_t], , + [AC_DEFINE([sig_atomic_t], [int], + [Define as an integer type suitable for memory locations that can be + accessed atomically even in the presence of asynchnonous signals.])], + [#include ]) +]) diff --git a/coreseek/m4-1.4.13/m4/sigaction.m4 b/coreseek/m4-1.4.13/m4/sigaction.m4 new file mode 100644 index 0000000..3a3ed9f --- /dev/null +++ b/coreseek/m4-1.4.13/m4/sigaction.m4 @@ -0,0 +1,45 @@ +# sigaction.m4 serial 5 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Determine if sigaction interface is present. +AC_DEFUN([gl_SIGACTION], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([sigaction]) + if test $ac_cv_func_sigaction = yes; then + AC_CHECK_MEMBERS([struct sigaction.sa_sigaction], , , + [[#include ]]) + if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then + HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 + fi + else + HAVE_SIGACTION=0 + AC_LIBOBJ([sigaction]) + gl_PREREQ_SIGACTION + fi +]) + +# Prerequisites of the part of lib/signal.in.h and of lib/sigaction.c. +AC_DEFUN([gl_PREREQ_SIGACTION], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([AC_TYPE_UID_T]) + AC_REQUIRE([gl_PREREQ_SIG_HANDLER_H]) + AC_CHECK_FUNCS_ONCE([sigaltstack siginterrupt]) + AC_CHECK_TYPES([siginfo_t], [], [], [[ +#include + ]]) + if test $ac_cv_type_siginfo_t = no; then + HAVE_SIGINFO_T=0 + fi +]) + +# Prerequisites of lib/sig-handler.h. +AC_DEFUN([gl_PREREQ_SIG_HANDLER_H], +[ + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/coreseek/m4-1.4.13/m4/signal_h.m4 b/coreseek/m4-1.4.13/m4/signal_h.m4 new file mode 100644 index 0000000..e69befd --- /dev/null +++ b/coreseek/m4-1.4.13/m4/signal_h.m4 @@ -0,0 +1,40 @@ +# signal_h.m4 serial 7 +dnl Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_SIGNAL_H], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([signal.h]) +# AIX declares sig_atomic_t to already include volatile, and C89 compilers +# then choke on 'volatile sig_atomic_t'. C99 requires that it compile. + AC_CHECK_TYPE([volatile sig_atomic_t], [], + [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[ +#include + ]]) +]) + +AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_SIGNAL_H_DEFAULTS], +[ + GNULIB_SIGNAL_H_SIGPIPE=0; AC_SUBST([GNULIB_SIGNAL_H_SIGPIPE]) + GNULIB_SIGPROCMASK=0; AC_SUBST([GNULIB_SIGPROCMASK]) + GNULIB_SIGACTION=0; AC_SUBST([GNULIB_SIGACTION]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING]) + HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T]) + HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T]) + HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION]) + HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; + AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION]) + HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; + AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T]) +]) diff --git a/coreseek/m4-1.4.13/m4/signalblocking.m4 b/coreseek/m4-1.4.13/m4/signalblocking.m4 new file mode 100644 index 0000000..82b0404 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/signalblocking.m4 @@ -0,0 +1,42 @@ +# signalblocking.m4 serial 10 +dnl Copyright (C) 2001-2002, 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Determine available signal blocking primitives. Three different APIs exist: +# 1) POSIX: sigemptyset, sigaddset, sigprocmask +# 2) SYSV: sighold, sigrelse +# 3) BSD: sigblock, sigsetmask +# For simplicity, here we check only for the POSIX signal blocking. +AC_DEFUN([gl_SIGNALBLOCKING], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + signals_not_posix= + AC_EGREP_HEADER([sigset_t], [signal.h], , [signals_not_posix=1]) + if test -z "$signals_not_posix"; then + AC_CHECK_FUNC([sigprocmask], [gl_cv_func_sigprocmask=1]) + fi + if test -z "$gl_cv_func_sigprocmask"; then + HAVE_POSIX_SIGNALBLOCKING=0 + AC_LIBOBJ([sigprocmask]) + gl_PREREQ_SIGPROCMASK + fi +]) + +# Prerequisites of the part of lib/signal.in.h and of lib/sigprocmask.c. +AC_DEFUN([gl_PREREQ_SIGPROCMASK], +[ + AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) + AC_CHECK_TYPES([sigset_t], + [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no], + [#include +/* Mingw defines sigset_t not in , but in . */ +#include ]) + if test $gl_cv_type_sigset_t != yes; then + HAVE_SIGSET_T=0 + fi + dnl HAVE_SIGSET_T is 1 if the system lacks the sigprocmask function but has + dnl the sigset_t type. + AC_SUBST([HAVE_SIGSET_T]) +]) diff --git a/coreseek/m4-1.4.13/m4/signbit.m4 b/coreseek/m4-1.4.13/m4/signbit.m4 new file mode 100644 index 0000000..233bf2a --- /dev/null +++ b/coreseek/m4-1.4.13/m4/signbit.m4 @@ -0,0 +1,287 @@ +# signbit.m4 serial 6 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_SIGNBIT], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit], + [ + AC_TRY_RUN([ +#include +/* If signbit is defined as a function, don't use it, since calling it for + 'float' or 'long double' arguments would involve conversions. + If signbit is not declared at all but exists as a library function, don't + use it, since the prototype may not match. + If signbit is not declared at all but exists as a compiler built-in, don't + use it, since it's preferable to use __builtin_signbit* (no warnings, + no conversions). */ +#ifndef signbit +# error "signbit should be a macro" +#endif +#include +]gl_SIGNBIT_TEST_PROGRAM +, [gl_cv_func_signbit=yes], [gl_cv_func_signbit=no], + [gl_cv_func_signbit="guessing no"]) + ]) + dnl GCC 4.0 and newer provides three built-ins for signbit. + dnl They can be used without warnings, also in C++, regardless of . + dnl But they may expand to calls to functions, which may or may not be in + dnl libc. + AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_gcc], + [ + AC_TRY_RUN([ +#if __GNUC__ >= 4 +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +#else +# error "signbit should be three compiler built-ins" +#endif +#include +]gl_SIGNBIT_TEST_PROGRAM +, [gl_cv_func_signbit_gcc=yes], [gl_cv_func_signbit_gcc=no], + [gl_cv_func_signbit_gcc="guessing no"]) + ]) + dnl Use the compiler built-ins whenever possible, because they are more + dnl efficient than the system library functions (if they exist). + if test "$gl_cv_func_signbit_gcc" = yes; then + REPLACE_SIGNBIT_USING_GCC=1 + else + if test "$gl_cv_func_signbit" != yes; then + REPLACE_SIGNBIT=1 + AC_LIBOBJ([signbitf]) + AC_LIBOBJ([signbitd]) + AC_LIBOBJ([signbitl]) + gl_FLOAT_SIGN_LOCATION + gl_DOUBLE_SIGN_LOCATION + gl_LONG_DOUBLE_SIGN_LOCATION + if test "$gl_cv_cc_float_signbit" = unknown; then + dnl Test whether copysignf() is declared. + AC_CHECK_DECLS([copysignf], , , [#include ]) + if test "$ac_cv_have_decl_copysignf" = yes; then + dnl Test whether copysignf() can be used without libm. + AC_CACHE_CHECK([whether copysignf can be used without linking with libm], + [gl_cv_func_copysignf_no_libm], + [ + AC_TRY_LINK([#include + float x, y;], + [return copysignf (x, y) < 0;], + [gl_cv_func_copysignf_no_libm=yes], + [gl_cv_func_copysignf_no_libm=no]) + ]) + if test $gl_cv_func_copysignf_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1], + [Define if the copysignf function is declared in and available in libc.]) + fi + fi + fi + if test "$gl_cv_cc_double_signbit" = unknown; then + dnl Test whether copysign() is declared. + AC_CHECK_DECLS([copysign], , , [#include ]) + if test "$ac_cv_have_decl_copysign" = yes; then + dnl Test whether copysign() can be used without libm. + AC_CACHE_CHECK([whether copysign can be used without linking with libm], + [gl_cv_func_copysign_no_libm], + [ + AC_TRY_LINK([#include + double x, y;], + [return copysign (x, y) < 0;], + [gl_cv_func_copysign_no_libm=yes], + [gl_cv_func_copysign_no_libm=no]) + ]) + if test $gl_cv_func_copysign_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1], + [Define if the copysign function is declared in and available in libc.]) + fi + fi + fi + if test "$gl_cv_cc_long_double_signbit" = unknown; then + dnl Test whether copysignl() is declared. + AC_CHECK_DECLS([copysignl], , , [#include ]) + if test "$ac_cv_have_decl_copysignl" = yes; then + dnl Test whether copysignl() can be used without libm. + AC_CACHE_CHECK([whether copysignl can be used without linking with libm], + [gl_cv_func_copysignl_no_libm], + [ + AC_TRY_LINK([#include + long double x, y;], + [return copysignl (x, y) < 0;], + [gl_cv_func_copysignl_no_libm=yes], + [gl_cv_func_copysignl_no_libm=no]) + ]) + if test $gl_cv_func_copysignl_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1], + [Define if the copysignl function is declared in and available in libc.]) + fi + fi + fi + fi + fi +]) + +AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on MacOS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + if (signbit (vf)) + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vd)) + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vl)) + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (!(!signbit (255.0L) + && signbit (-255.0L) + && !signbit (p0l) + && (memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + return 0; +} +]]) + +AC_DEFUN([gl_FLOAT_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT]) +]) + +AC_DEFUN([gl_DOUBLE_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL]) +]) + +AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL]) +]) + +AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION], +[ + AC_CACHE_CHECK([where to find the sign bit in a '$1'], + [$2], + [ + AC_TRY_RUN([ +#include +#include +#define NWORDS \ + ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { $1 value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0$3 }; +static memory_float minus = { -1.0$3 }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + return 1; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + return 1; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + return 1; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + return (fclose (fp) != 0); +} + ], + [$2=`cat conftest.out`], + [$2="unknown"], + [ + dnl When cross-compiling, we don't know. It depends on the + dnl ABI and compiler version. There are too many cases. + $2="unknown" + ]) + rm -f conftest.out + ]) + case "$]$2[" in + word*bit*) + word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$]$2[" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word], + [Define as the word index where to find the sign of '$1'.]) + AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit], + [Define as the bit index in the word where to find the sign of '$1'.]) + ;; + esac +]) diff --git a/coreseek/m4-1.4.13/m4/size_max.m4 b/coreseek/m4-1.4.13/m4/size_max.m4 new file mode 100644 index 0000000..e0e7b3f --- /dev/null +++ b/coreseek/m4-1.4.13/m4/size_max.m4 @@ -0,0 +1,68 @@ +# size_max.m4 serial 7 +dnl Copyright (C) 2003, 2005-2006, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_SIZE_MAX], +[ + AC_CHECK_HEADERS([stdint.h]) + dnl First test whether the system already has SIZE_MAX. + AC_MSG_CHECKING([for SIZE_MAX]) + AC_CACHE_VAL([gl_cv_size_max], [ + gl_cv_size_max= + AC_EGREP_CPP([Found it], [ +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif +], [gl_cv_size_max=yes]) + if test -z "$gl_cv_size_max"; then + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider + dnl than the type 'unsigned long'. Try hard to find a definition that can + dnl be used in a preprocessor #if, i.e. doesn't contain a cast. + AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], + [#include +#include ], [size_t_bits_minus_1=]) + AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], + [#include ], [fits_in_uint=]) + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. + AC_TRY_COMPILE([#include + extern size_t foo; + extern unsigned long foo; + ], [], [fits_in_uint=0]) + fi + dnl We cannot use 'expr' to simplify this expression, because 'expr' + dnl works only with 'long' integers in the host environment, while we + dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + dnl Shouldn't happen, but who knows... + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + ]) + AC_MSG_RESULT([$gl_cv_size_max]) + if test "$gl_cv_size_max" != yes; then + AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) + fi +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) diff --git a/coreseek/m4-1.4.13/m4/snprintf.m4 b/coreseek/m4-1.4.13/m4/snprintf.m4 new file mode 100644 index 0000000..6021786 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/snprintf.m4 @@ -0,0 +1,40 @@ +# snprintf.m4 serial 5 +dnl Copyright (C) 2002-2004, 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_SNPRINTF], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + gl_cv_func_snprintf_usable=no + AC_CHECK_FUNCS([snprintf]) + if test $ac_cv_func_snprintf = yes; then + gl_SNPRINTF_SIZE1 + case "$gl_cv_func_snprintf_size1" in + *yes) + gl_cv_func_snprintf_usable=yes + ;; + esac + fi + if test $gl_cv_func_snprintf_usable = no; then + gl_REPLACE_SNPRINTF + fi + AC_CHECK_DECLS_ONCE([snprintf]) + if test $ac_cv_have_decl_snprintf = no; then + HAVE_DECL_SNPRINTF=0 + fi +]) + +AC_DEFUN([gl_REPLACE_SNPRINTF], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_LIBOBJ([snprintf]) + if test $ac_cv_func_snprintf = yes; then + REPLACE_SNPRINTF=1 + fi + gl_PREREQ_SNPRINTF +]) + +# Prerequisites of lib/snprintf.c. +AC_DEFUN([gl_PREREQ_SNPRINTF], [:]) diff --git a/coreseek/m4-1.4.13/m4/spawn_h.m4 b/coreseek/m4-1.4.13/m4/spawn_h.m4 new file mode 100644 index 0000000..50ef49e --- /dev/null +++ b/coreseek/m4-1.4.13/m4/spawn_h.m4 @@ -0,0 +1,69 @@ +# spawn_h.m4 serial 1 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Bruno Haible. + +AC_DEFUN([gl_SPAWN_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([spawn.h]) + + AC_CHECK_HEADERS_ONCE([spawn.h]) + if test $ac_cv_header_spawn_h = yes; then + HAVE_SPAWN_H=1 + else + HAVE_SPAWN_H=0 + fi + AC_SUBST([HAVE_SPAWN_H]) + + AC_REQUIRE([AC_C_RESTRICT]) +]) + +dnl Unconditionally enables the replacement of . +AC_DEFUN([gl_REPLACE_SPAWN_H], +[ + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + SPAWN_H='spawn.h' +]) + +AC_DEFUN([gl_SPAWN_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_SPAWN_H_DEFAULTS], +[ + GNULIB_POSIX_SPAWN=0; AC_SUBST([GNULIB_POSIX_SPAWN]) + GNULIB_POSIX_SPAWNP=0; AC_SUBST([GNULIB_POSIX_SPAWNP]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) + GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0; AC_SUBST([GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY]) + GNULIB_POSIX_SPAWNATTR_INIT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_INIT]) + GNULIB_POSIX_SPAWNATTR_GETFLAGS=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETFLAGS]) + GNULIB_POSIX_SPAWNATTR_SETFLAGS=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETFLAGS]) + GNULIB_POSIX_SPAWNATTR_GETPGROUP=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETPGROUP]) + GNULIB_POSIX_SPAWNATTR_SETPGROUP=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETPGROUP]) + GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM]) + GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM]) + GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY]) + GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY]) + GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT]) + GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT]) + GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_GETSIGMASK]) + GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_SETSIGMASK]) + GNULIB_POSIX_SPAWNATTR_DESTROY=0; AC_SUBST([GNULIB_POSIX_SPAWNATTR_DESTROY]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_POSIX_SPAWN=1; AC_SUBST([HAVE_POSIX_SPAWN]) + REPLACE_POSIX_SPAWN=0; AC_SUBST([REPLACE_POSIX_SPAWN]) + SPAWN_H=''; AC_SUBST([SPAWN_H]) +]) diff --git a/coreseek/m4-1.4.13/m4/ssize_t.m4 b/coreseek/m4-1.4.13/m4/ssize_t.m4 new file mode 100644 index 0000000..4eaef93 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/ssize_t.m4 @@ -0,0 +1,21 @@ +# ssize_t.m4 serial 4 (gettext-0.15) +dnl Copyright (C) 2001-2003, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether ssize_t is defined. + +AC_DEFUN([gt_TYPE_SSIZE_T], +[ + AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], + [AC_TRY_COMPILE([#include ], + [int x = sizeof (ssize_t *) + sizeof (ssize_t); + return !x;], + [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) + if test $gt_cv_ssize_t = no; then + AC_DEFINE([ssize_t], [int], + [Define as a signed type of the same size as size_t.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/stdarg.m4 b/coreseek/m4-1.4.13/m4/stdarg.m4 new file mode 100644 index 0000000..a9ada4f --- /dev/null +++ b/coreseek/m4-1.4.13/m4/stdarg.m4 @@ -0,0 +1,67 @@ +# stdarg.m4 serial 3 +dnl Copyright (C) 2006, 2008-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Provide a working va_copy in combination with . + +AC_DEFUN([gl_STDARG_H], +[ + STDARG_H=''; AC_SUBST([STDARG_H]) + NEXT_STDARG_H=''; AC_SUBST([NEXT_STDARG_H]) + AC_MSG_CHECKING([for va_copy]) + AC_CACHE_VAL([gl_cv_func_va_copy], [ + AC_TRY_COMPILE([#include ], [ +#ifndef va_copy +void (*func) (va_list, va_list) = va_copy; +#endif +], + [gl_cv_func_va_copy=yes], [gl_cv_func_va_copy=no])]) + AC_MSG_RESULT([$gl_cv_func_va_copy]) + if test $gl_cv_func_va_copy = no; then + dnl Provide a substitute. + dnl Usually a simple definition in is enough. Not so on AIX 5 + dnl with some versions of the /usr/vac/bin/cc compiler. It has an + dnl which does '#undef va_copy', leading to a missing va_copy symbol. For + dnl this platform, we use an substitute. But we cannot use this + dnl approach on other platforms, because often defines only + dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do + dnl not work in this situation. + AC_EGREP_CPP([vaccine], + [#if defined _AIX && !defined __GNUC__ + AIX vaccine + #endif + ], [gl_aixcc=yes], [gl_aixcc=no]) + if test $gl_aixcc = yes; then + dnl Provide a substitute file. + STDARG_H=stdarg.h + gl_CHECK_NEXT_HEADERS([stdarg.h]) + dnl Fallback for the case when contains only macro definitions. + if test "$gl_cv_next_stdarg_h" = '""'; then + gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' + NEXT_STDARG_H="$gl_cv_next_stdarg_h" + fi + else + dnl Provide a substitute in , either __va_copy or as a simple + dnl assignment. + gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [ + AC_TRY_COMPILE([#include ], [ +#ifndef __va_copy +error, bail out +#endif +], + [gl_cv_func___va_copy=yes], [gl_cv_func___va_copy=no])]) + if test $gl_cv_func___va_copy = yes; then + AC_DEFINE([va_copy], [__va_copy], + [Define as a macro for copying va_list variables.]) + else + AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */ +#define gl_va_copy(a,b) ((a) = (b))]) + AC_DEFINE([va_copy], [gl_va_copy], + [Define as a macro for copying va_list variables.]) + fi + fi + fi +]) diff --git a/coreseek/m4-1.4.13/m4/stdbool.m4 b/coreseek/m4-1.4.13/m4/stdbool.m4 new file mode 100644 index 0000000..57c804a --- /dev/null +++ b/coreseek/m4-1.4.13/m4/stdbool.m4 @@ -0,0 +1,115 @@ +# Check for stdbool.h that conforms to C99. + +dnl Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Prepare for substituting if it is not supported. + +AC_DEFUN([AM_STDBOOL_H], +[ + AC_REQUIRE([AC_HEADER_STDBOOL]) + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + AC_SUBST([STDBOOL_H]) + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + AC_SUBST([HAVE__BOOL]) +]) + +# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. +AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) + +# This macro is only needed in autoconf <= 2.59. Newer versions of autoconf +# have this macro built-in. + +AC_DEFUN([AC_HEADER_STDBOOL], + [AC_CACHE_CHECK([for stdbool.h that conforms to C99], + [ac_cv_header_stdbool_h], + [AC_TRY_COMPILE( + [ + #include + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + bool e = &s; + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + #if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); + #endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + ], + [ + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + ], + [ac_cv_header_stdbool_h=yes], + [ac_cv_header_stdbool_h=no])]) + AC_CHECK_TYPES([_Bool]) + if test $ac_cv_header_stdbool_h = yes; then + AC_DEFINE([HAVE_STDBOOL_H], [1], [Define to 1 if stdbool.h conforms to C99.]) + fi]) diff --git a/coreseek/m4-1.4.13/m4/stdint.m4 b/coreseek/m4-1.4.13/m4/stdint.m4 new file mode 100644 index 0000000..a2e8bdd --- /dev/null +++ b/coreseek/m4-1.4.13/m4/stdint.m4 @@ -0,0 +1,472 @@ +# stdint.m4 serial 34 +dnl Copyright (C) 2001-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert and Bruno Haible. +dnl Test whether is supported or must be substituted. + +AC_DEFUN([gl_STDINT_H], +[ + AC_PREREQ([2.59])dnl + + dnl Check for long long int and unsigned long long int. + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + if test $ac_cv_type_long_long_int = yes; then + HAVE_LONG_LONG_INT=1 + else + HAVE_LONG_LONG_INT=0 + fi + AC_SUBST([HAVE_LONG_LONG_INT]) + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + HAVE_UNSIGNED_LONG_LONG_INT=1 + else + HAVE_UNSIGNED_LONG_LONG_INT=0 + fi + AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) + + dnl Check for . + dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + AC_SUBST([HAVE_INTTYPES_H]) + + dnl Check for . + dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi + AC_SUBST([HAVE_SYS_TYPES_H]) + + gl_CHECK_NEXT_HEADERS([stdint.h]) + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi + AC_SUBST([HAVE_STDINT_H]) + + dnl Now see whether we need a substitute . + if test $ac_cv_header_stdint_h = yes; then + AC_CACHE_CHECK([whether stdint.h conforms to C99], + [gl_cv_header_working_stdint_h], + [gl_cv_header_working_stdint_h=no + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in " +#endif +] +gl_STDINT_INCLUDES +[ +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +#include /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; + ]])], + [dnl Determine whether the various *_MIN, *_MAX macros are usable + dnl in preprocessor expression. We could do it by compiling a test + dnl program for each of these macros. It is faster to run a program + dnl that inspects the macro expansion. + dnl This detects a bug on HP-UX 11.23/ia64. + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include +] +gl_STDINT_INCLUDES +[ +#include +#include +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), +#endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; +]], [[ + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return 1; + } + return 0; +]])], + [gl_cv_header_working_stdint_h=yes], + [], + [dnl When cross-compiling, assume it works. + gl_cv_header_working_stdint_h=yes + ]) + ]) + ]) + fi + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + dnl Check for , and for + dnl (used in Linux libc4 >= 4.6.7 and libc5). + AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + else + HAVE_SYS_INTTYPES_H=0 + fi + AC_SUBST([HAVE_SYS_INTTYPES_H]) + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + fi + AC_SUBST([HAVE_SYS_BITYPES_H]) + + dnl Check for (missing in Linux uClibc when built without wide + dnl character support). + AC_CHECK_HEADERS_ONCE([wchar.h]) + + gl_STDINT_TYPE_PROPERTIES + STDINT_H=stdint.h + fi + AC_SUBST([STDINT_H]) +]) + +dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) +dnl Determine the size of each of the given types in bits. +AC_DEFUN([gl_STDINT_BITSIZEOF], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), + [Define to the number of bits in type ']gltype['.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], + [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], + [$2 +#include ], [result=unknown]) + eval gl_cv_bitsizeof_${gltype}=\$result + ]) + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, + dnl do a syntax check even on unused #if conditions and give an error + dnl on valid C code like this: + dnl #if 0 + dnl # if > 32 + dnl # endif + dnl #endif + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) + eval BITSIZEOF_${GLTYPE}=\$result + done + m4_foreach_w([gltype], [$1], + [AC_SUBST([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) +]) + +dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) +dnl Determine the signedness of each of the given types. +dnl Define HAVE_SIGNED_TYPE if type is signed. +AC_DEFUN([gl_CHECK_TYPES_SIGNED], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), + [Define to 1 if ']gltype[' is a signed integer type.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([$2[ + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], + result=yes, result=no) + eval gl_cv_type_${gltype}_signed=\$result + ]) + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 + fi + done + m4_foreach_w([gltype], [$1], + [AC_SUBST([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) +]) + +dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) +dnl Determine the suffix to use for integer constants of the given types. +dnl Define t_SUFFIX for each such type. +AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], + [Define to l, ll, u, ul, ull, etc., as suitable for + constants of type ']gltype['.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([for $gltype integer literal suffix], + [gl_cv_type_${gltype}_suffix], + [eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([$2[ + extern $gltype foo; + extern $gltype1 foo;]])], + [eval gl_cv_type_${gltype}_suffix=\$glsuf]) + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done]) + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) + done + m4_foreach_w([gltype], [$1], + [AC_SUBST(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) +]) + +dnl gl_STDINT_INCLUDES +AC_DEFUN([gl_STDINT_INCLUDES], +[[ + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif +]]) + +dnl gl_STDINT_TYPE_PROPERTIES +dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t +dnl of interest to stdint.in.h. +AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], +[ + AC_REQUIRE([gl_MULTIARCH]) + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_STDINT_BITSIZEOF([ptrdiff_t size_t], + [gl_STDINT_INCLUDES]) + fi + gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], + [gl_STDINT_INCLUDES]) + fi + gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) + +# Hey Emacs! +# Local Variables: +# indent-tabs-mode: nil +# End: diff --git a/coreseek/m4-1.4.13/m4/stdint_h.m4 b/coreseek/m4-1.4.13/m4/stdint_h.m4 new file mode 100644 index 0000000..82f0c24 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/stdint_h.m4 @@ -0,0 +1,26 @@ +# stdint_h.m4 serial 8 +dnl Copyright (C) 1997-2004, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1; return !i;], + [gl_cv_header_stdint_h=yes], + [gl_cv_header_stdint_h=no])]) + if test $gl_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/stdio-safer.m4 b/coreseek/m4-1.4.13/m4/stdio-safer.m4 new file mode 100644 index 0000000..3d71452 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/stdio-safer.m4 @@ -0,0 +1,15 @@ +#serial 10 +dnl Copyright (C) 2002, 2005-2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FOPEN_SAFER], +[ + AC_LIBOBJ([fopen-safer]) +]) + +AC_DEFUN([gl_TMPFILE_SAFER], +[ + AC_LIBOBJ([tmpfile-safer]) +]) diff --git a/coreseek/m4-1.4.13/m4/stdio_h.m4 b/coreseek/m4-1.4.13/m4/stdio_h.m4 new file mode 100644 index 0000000..846b65d --- /dev/null +++ b/coreseek/m4-1.4.13/m4/stdio_h.m4 @@ -0,0 +1,133 @@ +# stdio_h.m4 serial 15 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_STDIO_H], +[ + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([stdio.h]) + dnl No need to create extra modules for these functions. Everyone who uses + dnl likely needs them. + GNULIB_FPRINTF=1 + GNULIB_PRINTF=1 + GNULIB_VFPRINTF=1 + GNULIB_VPRINTF=1 + GNULIB_FPUTC=1 + GNULIB_PUTC=1 + GNULIB_PUTCHAR=1 + GNULIB_FPUTS=1 + GNULIB_PUTS=1 + GNULIB_FWRITE=1 + dnl This ifdef is just an optimization, to avoid performing a configure + dnl check whose result is not used. It does not make the test of + dnl GNULIB_STDIO_H_SIGPIPE or GNULIB_SIGPIPE redundant. + m4_ifdef([gl_SIGNAL_SIGPIPE], [ + gl_SIGNAL_SIGPIPE + if test $gl_cv_header_signal_h_SIGPIPE != yes; then + REPLACE_STDIO_WRITE_FUNCS=1 + AC_LIBOBJ([stdio-write]) + fi + ]) +]) + +AC_DEFUN([gl_STDIO_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_STDIO_H_DEFAULTS], +[ + GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) + GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) + GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) + GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) + GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) + GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) + GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) + GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) + GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) + GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) + GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) + GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) + GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) + GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) + GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) + GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) + GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) + GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) + GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) + GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) + GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) + GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) + GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) + GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) + GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) + GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) + GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) + GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) + GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) + GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) + GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) + GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) + GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) + GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) + GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) + dnl Assume proper GNU behavior unless another module says otherwise. + REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) + REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) + REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) + REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) + REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) + REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) + HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) + REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) + HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) + REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) + REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) + HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) + REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) + HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) + REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) + HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) + REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) + HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) + REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) + REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) + REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) + HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) + REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) + REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) + HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) + REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) + REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) + REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) + REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) + HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) + HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) + REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) + REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) +]) + +dnl Code shared by fseeko and ftello. Determine if large files are supported, +dnl but stdin does not start as a large file by default. +AC_DEFUN([gl_STDIN_LARGE_OFFSET], + [ + AC_CACHE_CHECK([whether stdin defaults to large file offsets], + [gl_cv_var_stdin_large_offset], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], +[[#if defined __SL64 && defined __SCLE /* cygwin */ + /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making + fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and + it is easier to do a version check than building a runtime test. */ +# include +# if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) + choke me +# endif +#endif]])], + [gl_cv_var_stdin_large_offset=yes], + [gl_cv_var_stdin_large_offset=no])]) +]) diff --git a/coreseek/m4-1.4.13/m4/stdlib-safer.m4 b/coreseek/m4-1.4.13/m4/stdlib-safer.m4 new file mode 100644 index 0000000..36fd17c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/stdlib-safer.m4 @@ -0,0 +1,10 @@ +# stdlib-safer.m4 serial 2 +dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_STDLIB_SAFER], +[ + AC_LIBOBJ([mkstemp-safer]) +]) diff --git a/coreseek/m4-1.4.13/m4/stdlib_h.m4 b/coreseek/m4-1.4.13/m4/stdlib_h.m4 new file mode 100644 index 0000000..b295f16 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/stdlib_h.m4 @@ -0,0 +1,73 @@ +# stdlib_h.m4 serial 15 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_STDLIB_H], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([stdlib.h]) + AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT]) + if test $ac_cv_header_random_h = yes; then + HAVE_RANDOM_H=1 + else + HAVE_RANDOM_H=0 + fi + AC_SUBST([HAVE_RANDOM_H]) + AC_CHECK_TYPES([struct random_data], + [], [HAVE_STRUCT_RANDOM_DATA=0], + [[#include + #if HAVE_RANDOM_H + # include + #endif + ]]) +]) + +AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_STDLIB_H_DEFAULTS], +[ + GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) + GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) + GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) + GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) + GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) + GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) + GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) + GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) + GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) + GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) + GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) + GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) + GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) + GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) + GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) + GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) + HAVE_CALLOC_POSIX=1; AC_SUBST([HAVE_CALLOC_POSIX]) + HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) + HAVE_MALLOC_POSIX=1; AC_SUBST([HAVE_MALLOC_POSIX]) + HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) + HAVE_REALLOC_POSIX=1; AC_SUBST([HAVE_REALLOC_POSIX]) + HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) + HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) + HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) + HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) + HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) + HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) + HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) + HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) + HAVE_UNSETENV=1; AC_SUBST([HAVE_UNSETENV]) + HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) + REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) + REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) + REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) + VOID_UNSETENV=0; AC_SUBST([VOID_UNSETENV]) +]) diff --git a/coreseek/m4-1.4.13/m4/strchrnul.m4 b/coreseek/m4-1.4.13/m4/strchrnul.m4 new file mode 100644 index 0000000..7e270d0 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/strchrnul.m4 @@ -0,0 +1,21 @@ +# strchrnul.m4 serial 7 +dnl Copyright (C) 2003, 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRCHRNUL], +[ + dnl Persuade glibc to declare strchrnul(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REPLACE_FUNCS([strchrnul]) + if test $ac_cv_func_strchrnul = no; then + HAVE_STRCHRNUL=0 + gl_PREREQ_STRCHRNUL + fi +]) + +# Prerequisites of lib/strchrnul.c. +AC_DEFUN([gl_PREREQ_STRCHRNUL], [:]) diff --git a/coreseek/m4-1.4.13/m4/strerror.m4 b/coreseek/m4-1.4.13/m4/strerror.m4 new file mode 100644 index 0000000..8c16ca9 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/strerror.m4 @@ -0,0 +1,68 @@ +# strerror.m4 serial 9 +dnl Copyright (C) 2002, 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRERROR], +[ + AC_REQUIRE([gl_FUNC_STRERROR_SEPARATE]) + if test $REPLACE_STRERROR = 1; then + AC_LIBOBJ([strerror]) + AC_DEFINE_UNQUOTED([REPLACE_STRERROR], [$REPLACE_STRERROR], + [Define this to 1 if strerror is broken.]) + fi +]) + +# Like gl_FUNC_STRERROR, except prepare for separate compilation (no AC_LIBOBJ). +AC_DEFUN([gl_FUNC_STRERROR_SEPARATE], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([gl_HEADER_ERRNO_H]) + if test -z "$ERRNO_H"; then + AC_CACHE_CHECK([for working strerror function], + [gl_cv_func_working_strerror], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + ]], + [[return !*strerror (-2);]])], + [gl_cv_func_working_strerror=yes], + [gl_cv_func_working_strerror=no], + [dnl Assume crossbuild works if it compiles. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + ]], + [[return !*strerror (-2);]])], + [gl_cv_func_working_strerror=yes], + [gl_cv_func_working_strerror=no]) + ]) + ]) + if test $gl_cv_func_working_strerror = no; then + dnl The system's strerror() fails to return a string for out-of-range + dnl integers. Replace it. + REPLACE_STRERROR=1 + fi + else + dnl The system's strerror() cannot know about the new errno values we add + dnl to . Replace it. + REPLACE_STRERROR=1 + fi + if test $REPLACE_STRERROR = 1; then + gl_PREREQ_STRERROR + fi +]) + +# Prerequisites of lib/strerror.c. +AC_DEFUN([gl_PREREQ_STRERROR], [ + AC_CHECK_DECLS([strerror]) + AC_CHECK_HEADERS_ONCE([sys/socket.h]) + if test $ac_cv_header_sys_socket_h != yes; then + dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make + dnl the check for those headers unconditional; yet cygwin reports + dnl that the headers are present but cannot be compiled (since on + dnl cygwin, all socket information should come from sys/socket.h). + AC_CHECK_HEADERS([winsock2.h]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/string_h.m4 b/coreseek/m4-1.4.13/m4/string_h.m4 new file mode 100644 index 0000000..2d5553c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/string_h.m4 @@ -0,0 +1,92 @@ +# Configure a GNU-like replacement for . + +# Copyright (C) 2007, 2008 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# Written by Paul Eggert. + +AC_DEFUN([gl_HEADER_STRING_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_HEADER_STRING_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_STRING_H_BODY], +[ + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([string.h]) +]) + +AC_DEFUN([gl_STRING_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], +[ + GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) + GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) + GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) + GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) + GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) + GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) + GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) + GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) + GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) + GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) + GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) + GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) + GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) + GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) + GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) + GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) + GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) + GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) + GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) + GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) + GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) + GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) + GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) + GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) + GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) + GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) + GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) + GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) + GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) + GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) + GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) + GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) + HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) + HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) + HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) + HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) + HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) + HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) + HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) + HAVE_STRNDUP=1; AC_SUBST([HAVE_STRNDUP]) + HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) + HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) + HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) + HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) + HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) + HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) + HAVE_DECL_STRERROR=1; AC_SUBST([HAVE_DECL_STRERROR]) + HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) + HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) + REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) + REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) + REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) + REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) + REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) + REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) +]) diff --git a/coreseek/m4-1.4.13/m4/strndup.m4 b/coreseek/m4-1.4.13/m4/strndup.m4 new file mode 100644 index 0000000..4fa7d5a --- /dev/null +++ b/coreseek/m4-1.4.13/m4/strndup.m4 @@ -0,0 +1,53 @@ +# strndup.m4 serial 16 +dnl Copyright (C) 2002-2003, 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRNDUP], +[ + dnl Persuade glibc to declare strndup(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_DECLS_ONCE([strndup]) + if test $ac_cv_have_decl_strndup = no; then + HAVE_DECL_STRNDUP=0 + fi + + # AIX 4.3.3, AIX 5.1 have a function that fails to add the terminating '\0'. + AC_CACHE_CHECK([for working strndup], [gl_cv_func_strndup], + [AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[#include + #include ]], [[ +#ifndef HAVE_DECL_STRNDUP + extern char *strndup (const char *, size_t); +#endif + char *s; + s = strndup ("some longer string", 15); + free (s); + s = strndup ("shorter string", 13); + return s[13] != '\0';]])], + [gl_cv_func_strndup=yes], + [gl_cv_func_strndup=no], + [AC_CHECK_FUNC([strndup], + [AC_EGREP_CPP([too risky], [ +#ifdef _AIX + too risky +#endif + ], + [gl_cv_func_strndup=no], + [gl_cv_func_strndup=yes])], + [gl_cv_func_strndup=no])])]) + if test $gl_cv_func_strndup = yes; then + AC_DEFINE([HAVE_STRNDUP], [1], + [Define if you have the strndup() function and it works.]) + else + HAVE_STRNDUP=0 + AC_LIBOBJ([strndup]) + gl_PREREQ_STRNDUP + fi +]) + +# Prerequisites of lib/strndup.c. +AC_DEFUN([gl_PREREQ_STRNDUP], [:]) diff --git a/coreseek/m4-1.4.13/m4/strnlen.m4 b/coreseek/m4-1.4.13/m4/strnlen.m4 new file mode 100644 index 0000000..1c97859 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/strnlen.m4 @@ -0,0 +1,31 @@ +# strnlen.m4 serial 10 +dnl Copyright (C) 2002-2003, 2005-2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRNLEN], +[ + dnl Persuade glibc to declare strnlen(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CHECK_DECLS_ONCE([strnlen]) + if test $ac_cv_have_decl_strnlen = no; then + HAVE_DECL_STRNLEN=0 + fi + + AC_FUNC_STRNLEN + if test $ac_cv_func_strnlen_working = no; then + # This is necessary because automake-1.6.1 doesn't understand + # that the above use of AC_FUNC_STRNLEN means we may have to use + # lib/strnlen.c. + #AC_LIBOBJ([strnlen]) + AC_DEFINE([strnlen], [rpl_strnlen], + [Define to rpl_strnlen if the replacement function should be used.]) + gl_PREREQ_STRNLEN + fi +]) + +# Prerequisites of lib/strnlen.c. +AC_DEFUN([gl_PREREQ_STRNLEN], [:]) diff --git a/coreseek/m4-1.4.13/m4/strsignal.m4 b/coreseek/m4-1.4.13/m4/strsignal.m4 new file mode 100644 index 0000000..d71f096 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/strsignal.m4 @@ -0,0 +1,55 @@ +# strsignal.m4 serial 3 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRSIGNAL], +[ + dnl Persuade glibc to declare strsignal(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + AC_CHECK_DECLS_ONCE([strsignal]) + if test $ac_cv_have_decl_strsignal = no; then + HAVE_DECL_STRSIGNAL=0 + fi + + AC_CHECK_FUNCS([strsignal]) + if test $ac_cv_func_strsignal = yes; then + dnl Check if strsignal behaves reasonably for out-of-range signal numbers. + dnl On Solaris it returns NULL; on AIX 5.1 it returns (char *) -1. + AC_CACHE_CHECK([whether strsignal always returns a string], + [gl_cv_func_working_strsignal], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + ]], + [[char *s = strsignal (-1); + return !(s != (char *) 0 && s != (char *) -1);]])], + [gl_cv_func_working_strsignal=yes], + [gl_cv_func_working_strsignal=no], + [case "$host_os" in + solaris* | aix*) gl_cv_func_working_strsignal=no;; + *) gl_cv_func_working_strsignal="guessing yes";; + esac])]) + else + gl_cv_func_working_strsignal=no + fi + + if test "$gl_cv_func_working_strsignal" = no; then + if test $ac_cv_func_strsignal = yes; then + REPLACE_STRSIGNAL=1 + fi + AC_LIBOBJ([strsignal]) + gl_PREREQ_STRSIGNAL + fi +]) + +# Prerequisites of lib/strsignal.c. +AC_DEFUN([gl_PREREQ_STRSIGNAL], [ + AC_REQUIRE([AC_DECL_SYS_SIGLIST]) + AC_CHECK_DECLS([_sys_siglist], [], [], [#include ]) +]) diff --git a/coreseek/m4-1.4.13/m4/strstr.m4 b/coreseek/m4-1.4.13/m4/strstr.m4 new file mode 100644 index 0000000..f48bebb --- /dev/null +++ b/coreseek/m4-1.4.13/m4/strstr.m4 @@ -0,0 +1,64 @@ +# strstr.m4 serial 5 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check that strstr is efficient. +AC_DEFUN([gl_FUNC_STRSTR], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_CACHE_CHECK([whether strstr works in linear time], + [gl_cv_func_strstr_linear], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include /* for signal */ +#include /* for memmem */ +#include /* for malloc */ +#include /* for alarm */ +]], [[size_t m = 1000000; + char *haystack = (char *) malloc (2 * m + 2); + char *needle = (char *) malloc (m + 2); + void *result = 0; + /* Failure to compile this test due to missing alarm is okay, + since all such platforms (mingw) also have quadratic strstr. */ + signal (SIGALRM, SIG_DFL); + alarm (5); + /* Check for quadratic performance. */ + if (haystack && needle) + { + memset (haystack, 'A', 2 * m); + haystack[2 * m] = 'B'; + haystack[2 * m + 1] = 0; + memset (needle, 'A', m); + needle[m] = 'B'; + needle[m + 1] = 0; + result = strstr (haystack, needle); + } + return !result;]])], + [gl_cv_func_strstr_linear=yes], [gl_cv_func_strstr_linear=no], + [dnl Only glibc >= 2.9 and cygwin >= 1.7.0 are known to have a + dnl strstr that works in linear time. + AC_EGREP_CPP([Lucky user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 9) || (__GLIBC__ > 2) + Lucky user + #endif +#endif +#ifdef __CYGWIN__ + #include + #if CYGWIN_VERSION_DLL_MAJOR >= 1007 + Lucky user + #endif +#endif + ], + [gl_cv_func_strstr_linear=yes], + [gl_cv_func_strstr_linear="guessing no"]) + ]) + ]) + if test "$gl_cv_func_strstr_linear" != yes; then + REPLACE_STRSTR=1 + AC_LIBOBJ([strstr]) + fi +]) # gl_FUNC_STRSTR diff --git a/coreseek/m4-1.4.13/m4/strtod.m4 b/coreseek/m4-1.4.13/m4/strtod.m4 new file mode 100644 index 0000000..9769436 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/strtod.m4 @@ -0,0 +1,82 @@ +# strtod.m4 serial 12 +dnl Copyright (C) 2002-2003, 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRTOD], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_FUNC_STRTOD + dnl Note: AC_FUNC_STRTOD does AC_LIBOBJ([strtod]). + if test $ac_cv_func_strtod = no; then + HAVE_STRTOD=0 + REPLACE_STRTOD=1 + gl_PREREQ_STRTOD + else + AC_CACHE_CHECK([whether strtod obeys C99], [gl_cv_func_strtod_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include +#include +#include +/* Compare two numbers with ==. + This is a separate function because IRIX 6.5 "cc -O" miscompiles an + 'x == x' test. */ +static int +numeric_equal (double x, double y) +{ + return x == y; +} +]], [[ + { + /* Older glibc and Cygwin mis-parse "-0x". */ + const char *string = "-0x"; + char *term; + double value = strtod (string, &term); + double zero = 0.0; + if (1.0 / value != -1.0 / zero || term != (string + 2)) + return 1; + } + { + /* Many platforms do not parse hex floats. */ + const char *string = "0XaP+1"; + char *term; + double value = strtod (string, &term); + if (value != 20.0 || term != (string + 6)) + return 1; + } + { + /* Many platforms do not parse infinities. HP-UX 11.31 parses inf, + but mistakenly sets errno. */ + const char *string = "inf"; + char *term; + double value; + errno = 0; + value = strtod (string, &term); + if (value != HUGE_VAL || term != (string + 3) || errno) + return 1; + } + { + /* glibc 2.7 and cygwin 1.5.24 misparse "nan()". */ + const char *string = "nan()"; + char *term; + double value = strtod (string, &term); + if (numeric_equal (value, value) || term != (string + 5)) + return 1; + } +]])], + [gl_cv_func_strtod_works=yes], + [gl_cv_func_strtod_works=no], + [gl_cv_func_strtod_works="guessing no"])]) + if test "$gl_cv_func_strtod_works" != yes; then + REPLACE_STRTOD=1 + gl_PREREQ_STRTOD + dnl Use undocumented macro to set POW_LIB correctly. + _AC_LIBOBJ_STRTOD + fi + fi +]) + +# Prerequisites of lib/strtod.c. +# The need for pow() is already handled by AC_FUNC_STRTOD. +AC_DEFUN([gl_PREREQ_STRTOD], [:]) diff --git a/coreseek/m4-1.4.13/m4/strtol.m4 b/coreseek/m4-1.4.13/m4/strtol.m4 new file mode 100644 index 0000000..25c09fd --- /dev/null +++ b/coreseek/m4-1.4.13/m4/strtol.m4 @@ -0,0 +1,10 @@ +# strtol.m4 serial 5 +dnl Copyright (C) 2002, 2003, 2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRTOL], +[ + AC_REPLACE_FUNCS([strtol]) +]) diff --git a/coreseek/m4-1.4.13/m4/sys_stat_h.m4 b/coreseek/m4-1.4.13/m4/sys_stat_h.m4 new file mode 100644 index 0000000..20c82ed --- /dev/null +++ b/coreseek/m4-1.4.13/m4/sys_stat_h.m4 @@ -0,0 +1,59 @@ +# sys_stat_h.m4 serial 10 -*- Autoconf -*- +dnl Copyright (C) 2006-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Eric Blake. +dnl Test whether contains lstat and mkdir or must be substituted. + +AC_DEFUN([gl_HEADER_SYS_STAT_H], +[ + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + + dnl Check for lstat. Systems that lack it (mingw) also lack symlinks, so + dnl stat is a good replacement. + AC_CHECK_FUNCS_ONCE([lstat]) + if test $ac_cv_func_lstat = yes; then + HAVE_LSTAT=1 + else + HAVE_LSTAT=0 + fi + AC_SUBST([HAVE_LSTAT]) + + dnl For the mkdir substitute. + AC_REQUIRE([AC_C_INLINE]) + + dnl Check for broken stat macros. + AC_REQUIRE([AC_HEADER_STAT]) + + gl_CHECK_NEXT_HEADERS([sys/stat.h]) + SYS_STAT_H='sys/stat.h' + AC_SUBST([SYS_STAT_H]) + + dnl Define types that are supposed to be defined in or + dnl . + AC_CHECK_TYPE([nlink_t], [], + [AC_DEFINE([nlink_t], [int], + [Define to the type of st_nlink in struct stat, or a supertype.])], + [#include + #include ]) + +]) # gl_HEADER_SYS_STAT_H + +AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], +[ + GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD]) + GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) + REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) + REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) +]) diff --git a/coreseek/m4-1.4.13/m4/sys_time_h.m4 b/coreseek/m4-1.4.13/m4/sys_time_h.m4 new file mode 100644 index 0000000..13ac576 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/sys_time_h.m4 @@ -0,0 +1,57 @@ +# Configure a replacement for . + +# Copyright (C) 2007 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Written by Paul Eggert and Martin Lambers. + +AC_DEFUN([gl_HEADER_SYS_TIME_H], +[ + dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement + dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 + dnl statements that occur in other macros. + AC_REQUIRE([gl_HEADER_SYS_TIME_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_SYS_TIME_H_BODY], +[ + AC_REQUIRE([AC_C_RESTRICT]) + gl_CHECK_NEXT_HEADERS([sys/time.h]) + + if test $ac_cv_header_sys_time_h = yes; then + HAVE_SYS_TIME_H=1 + else + HAVE_SYS_TIME_H=0 + fi + AC_SUBST([HAVE_SYS_TIME_H]) + + AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#if HAVE_SYS_TIME_H + #include + #endif + #include + ]], + [[static struct timeval x; x.tv_sec = x.tv_usec;]])], + [gl_cv_sys_struct_timeval=yes], + [gl_cv_sys_struct_timeval=no])]) + if test $gl_cv_sys_struct_timeval = yes; then + HAVE_STRUCT_TIMEVAL=1 + else + HAVE_STRUCT_TIMEVAL=0 + fi + AC_SUBST([HAVE_STRUCT_TIMEVAL]) + + dnl Assume POSIX behavior unless another module says otherwise. + REPLACE_GETTIMEOFDAY=0 + AC_SUBST([REPLACE_GETTIMEOFDAY]) + if test $HAVE_SYS_TIME_H = 0 || test $HAVE_STRUCT_TIMEVAL = 0; then + SYS_TIME_H=sys/time.h + else + SYS_TIME_H= + fi + AC_SUBST([SYS_TIME_H]) +]) diff --git a/coreseek/m4-1.4.13/m4/sys_wait_h.m4 b/coreseek/m4-1.4.13/m4/sys_wait_h.m4 new file mode 100644 index 0000000..9d7fb44 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/sys_wait_h.m4 @@ -0,0 +1,26 @@ +# sys_wait_h.m4 serial 1 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_SYS_WAIT_H], +[ + AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([sys/wait.h]) + SYS_WAIT_H='sys/wait.h' + AC_SUBST([SYS_WAIT_H]) +]) + +AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS], +[ + dnl Assume proper GNU behavior unless another module says otherwise. +]) diff --git a/coreseek/m4-1.4.13/m4/tempname.m4 b/coreseek/m4-1.4.13/m4/tempname.m4 new file mode 100644 index 0000000..4c44d37 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/tempname.m4 @@ -0,0 +1,22 @@ +#serial 3 + +# Copyright (C) 2006-2007 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# glibc provides __gen_tempname as a wrapper for mk[ds]temp. Expose +# it as a public API, and provide it on systems that are lacking. +AC_DEFUN([gl_FUNC_GEN_TEMPNAME], +[ + AC_REQUIRE([AC_SYS_LARGEFILE]) + + AC_LIBOBJ([tempname]) + gl_PREREQ_TEMPNAME +]) + +# Prerequisites of lib/tempname.c. +AC_DEFUN([gl_PREREQ_TEMPNAME], +[ + : +]) diff --git a/coreseek/m4-1.4.13/m4/threadlib.m4 b/coreseek/m4-1.4.13/m4/threadlib.m4 new file mode 100644 index 0000000..3dd38aa --- /dev/null +++ b/coreseek/m4-1.4.13/m4/threadlib.m4 @@ -0,0 +1,313 @@ +# threadlib.m4 serial 3 (gettext-0.18) +dnl Copyright (C) 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl gl_THREADLIB +dnl ------------ +dnl Tests for a multithreading library to be used. +dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, +dnl USE_PTH_THREADS, USE_WIN32_THREADS +dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use +dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with +dnl libtool). +dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for +dnl programs that really need multithread functionality. The difference +dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak +dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread". +dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for +dnl multithread-safe programs. + +AC_DEFUN([gl_THREADLIB_EARLY], +[ + AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) +]) + +dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. + +AC_DEFUN([gl_THREADLIB_EARLY_BODY], +[ + dnl Ordering constraints: This macro modifies CPPFLAGS in a way that + dnl influences the result of the autoconf tests that test for *_unlocked + dnl declarations, on AIX 5 at least. Therefore it must come early. + AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl + AC_BEFORE([$0], [gl_ARGP])dnl + + AC_REQUIRE([AC_CANONICAL_HOST]) + dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. + dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes + dnl AC_GNU_SOURCE. + m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], + [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], + [AC_REQUIRE([AC_GNU_SOURCE])]) + dnl Check for multithreading. + m4_divert_text([DEFAULTS], [gl_use_threads_default=]) + AC_ARG_ENABLE([threads], +AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API]) +AC_HELP_STRING([--disable-threads], [build without multithread safety]), + [gl_use_threads=$enableval], + [if test -n "$gl_use_threads_default"; then + gl_use_threads="$gl_use_threads_default" + else + case "$host_os" in + dnl Disable multithreading by default on OSF/1, because it interferes + dnl with fork()/exec(): When msgexec is linked with -lpthread, its + dnl child process gets an endless segmentation fault inside execvp(). + osf*) gl_use_threads=no ;; + *) gl_use_threads=yes ;; + esac + fi + ]) + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # For using : + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks . cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_TRY_LINK test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in . + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + fi +]) + +dnl The guts of gl_THREADLIB. Needs to be expanded only once. + +AC_DEFUN([gl_THREADLIB_BODY], +[ + AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then + dnl Check whether the compiler and linker support weak declarations. + AC_MSG_CHECKING([whether imported symbols can be declared weak]) + gl_have_weak=no + AC_TRY_LINK([extern void xyzzy (); +#pragma weak xyzzy], [xyzzy();], [gl_have_weak=yes]) + AC_MSG_RESULT([$gl_have_weak]) + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. + AC_CHECK_HEADER([pthread.h], + [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + gl_have_pthread= + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + AC_TRY_LINK([#include ], + [pthread_mutex_lock((pthread_mutex_t*)0); + pthread_mutexattr_init((pthread_mutexattr_t*)0);], + [gl_have_pthread=yes]) + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test -n "$gl_have_pthread"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + AC_CHECK_LIB([pthread], [pthread_kill], + [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + case "$host_os" in + solaris* | hpux*) + AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], + [Define if the pthread_in_use() detection is hard.]) + esac + ]) + else + # Some library is needed. Try libpthread and libc_r. + AC_CHECK_LIB([pthread], [pthread_kill], + [gl_have_pthread=yes + LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) + if test -z "$gl_have_pthread"; then + # For FreeBSD 4. + AC_CHECK_LIB([c_r], [pthread_kill], + [gl_have_pthread=yes + LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r + LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) + fi + fi + if test -n "$gl_have_pthread"; then + gl_threads_api=posix + AC_DEFINE([USE_POSIX_THREADS], [1], + [Define if the POSIX multithreading library can be used.]) + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if test $gl_have_weak = yes; then + AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], + [Define if references to the POSIX multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then + gl_have_solaristhread= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lthread" + AC_TRY_LINK([#include +#include ], + [thr_self();], + [gl_have_solaristhread=yes]) + LIBS="$gl_save_LIBS" + if test -n "$gl_have_solaristhread"; then + gl_threads_api=solaris + LIBTHREAD=-lthread + LTLIBTHREAD=-lthread + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + AC_DEFINE([USE_SOLARIS_THREADS], [1], + [Define if the old Solaris multithreading library can be used.]) + if test $gl_have_weak = yes; then + AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], + [Define if references to the old Solaris multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + if test "$gl_use_threads" = pth; then + gl_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_LINKFLAGS([pth]) + gl_have_pth= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lpth" + AC_TRY_LINK([#include ], [pth_self();], [gl_have_pth=yes]) + LIBS="$gl_save_LIBS" + if test -n "$gl_have_pth"; then + gl_threads_api=pth + LIBTHREAD="$LIBPTH" + LTLIBTHREAD="$LTLIBPTH" + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + AC_DEFINE([USE_PTH_THREADS], [1], + [Define if the GNU Pth multithreading library can be used.]) + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if test $gl_have_weak = yes; then + AC_DEFINE([USE_PTH_THREADS_WEAK], [1], + [Define if references to the GNU Pth multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + else + CPPFLAGS="$gl_save_CPPFLAGS" + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=win32 + AC_DEFINE([USE_WIN32_THREADS], [1], + [Define if the Win32 multithreading API can be used.]) + fi + fi + fi + fi + AC_MSG_CHECKING([for multithread API to use]) + AC_MSG_RESULT([$gl_threads_api]) + AC_SUBST([LIBTHREAD]) + AC_SUBST([LTLIBTHREAD]) + AC_SUBST([LIBMULTITHREAD]) + AC_SUBST([LTLIBMULTITHREAD]) +]) + +AC_DEFUN([gl_THREADLIB], +[ + AC_REQUIRE([gl_THREADLIB_EARLY]) + AC_REQUIRE([gl_THREADLIB_BODY]) +]) + + +dnl gl_DISABLE_THREADS +dnl ------------------ +dnl Sets the gl_THREADLIB default so that threads are not used by default. +dnl The user can still override it at installation time, by using the +dnl configure option '--enable-threads'. + +AC_DEFUN([gl_DISABLE_THREADS], [ + m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) +]) + + +dnl Survey of platforms: +dnl +dnl Platform Available Compiler Supports test-lock +dnl flavours option weak result +dnl --------------- --------- --------- -------- --------- +dnl Linux 2.4/glibc posix -lpthread Y OK +dnl +dnl GNU Hurd/glibc posix +dnl +dnl FreeBSD 5.3 posix -lc_r Y +dnl posix -lkse ? Y +dnl posix -lpthread ? Y +dnl posix -lthr Y +dnl +dnl FreeBSD 5.2 posix -lc_r Y +dnl posix -lkse Y +dnl posix -lthr Y +dnl +dnl FreeBSD 4.0,4.10 posix -lc_r Y OK +dnl +dnl NetBSD 1.6 -- +dnl +dnl OpenBSD 3.4 posix -lpthread Y OK +dnl +dnl MacOS X 10.[123] posix -lpthread Y OK +dnl +dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK +dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK +dnl +dnl HP-UX 11 posix -lpthread N (cc) OK +dnl Y (gcc) +dnl +dnl IRIX 6.5 posix -lpthread Y 0.5 +dnl +dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK +dnl +dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK +dnl -lpthread (gcc) Y +dnl +dnl Cygwin posix -lpthread Y OK +dnl +dnl Any of the above pth -lpth 0.0 +dnl +dnl Mingw win32 N OK +dnl +dnl BeOS 5 -- +dnl +dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is +dnl turned off: +dnl OK if all three tests terminate OK, +dnl 0.5 if the first test terminates OK but the second one loops endlessly, +dnl 0.0 if the first test already loops endlessly. diff --git a/coreseek/m4-1.4.13/m4/tls.m4 b/coreseek/m4-1.4.13/m4/tls.m4 new file mode 100644 index 0000000..1b22d82 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/tls.m4 @@ -0,0 +1,12 @@ +# tls.m4 serial 2 (gettext-0.18) +dnl Copyright (C) 2005, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_TLS], +[ + AC_REQUIRE([gl_THREADLIB]) +]) diff --git a/coreseek/m4-1.4.13/m4/tmpdir.m4 b/coreseek/m4-1.4.13/m4/tmpdir.m4 new file mode 100644 index 0000000..0bf223b --- /dev/null +++ b/coreseek/m4-1.4.13/m4/tmpdir.m4 @@ -0,0 +1,12 @@ +# tmpdir.m4 serial 3 +dnl Copyright (C) 2001-2002, 2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Prerequisites for lib/tmpdir.c + +AC_DEFUN([gt_TMPDIR], +[ + AC_CHECK_FUNCS([__secure_getenv]) +]) diff --git a/coreseek/m4-1.4.13/m4/ungetc.m4 b/coreseek/m4-1.4.13/m4/ungetc.m4 new file mode 100644 index 0000000..9236d4c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/ungetc.m4 @@ -0,0 +1,36 @@ +# ungetc.m4 serial 1 +dnl Copyright (C) 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN_ONCE([gl_FUNC_UNGETC_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + + AC_CACHE_CHECK([whether ungetc works on arbitrary bytes], + [gl_cv_func_ungetc_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include + ]], [FILE *f; long l; + if (!(f = fopen ("conftest.tmp", "w+"))) return 1; + if (fputs ("abc", f) < 0) return 2; + rewind (f); + if (fgetc (f) != 'a') return 3; + if (fgetc (f) != 'b') return 4; + if (ungetc ('d', f) != 'd') return 5; + if (ftell (f) != 1) return 6; + if (fgetc (f) != 'd') return 7; + if (ftell (f) != 2) return 8; + if (fseek (f, 0, SEEK_CUR) != 0) return 9; + if (ftell (f) != 2) return 10; + if (fgetc (f) != 'c') return 11; + fclose (f); remove ("conftest.tmp");])], + [gl_cv_func_ungetc_works=yes], [gl_cv_func_ungetc_works=no], + [gl_cv_func_ungetc_works='guessing no']) + ]) + if test "$gl_cv_func_ungetc_works" != yes; then + AC_DEFINE([FUNC_UNGETC_BROKEN], [1], + [Define to 1 if ungetc is broken when used on arbitrary bytes.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/unistd-safer.m4 b/coreseek/m4-1.4.13/m4/unistd-safer.m4 new file mode 100644 index 0000000..09adf93 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/unistd-safer.m4 @@ -0,0 +1,13 @@ +#serial 8 +dnl Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_UNISTD_SAFER], +[ + AC_CHECK_FUNCS_ONCE([pipe]) + AC_LIBOBJ([dup-safer]) + AC_LIBOBJ([fd-safer]) + AC_LIBOBJ([pipe-safer]) +]) diff --git a/coreseek/m4-1.4.13/m4/unistd_h.m4 b/coreseek/m4-1.4.13/m4/unistd_h.m4 new file mode 100644 index 0000000..ff9a4ea --- /dev/null +++ b/coreseek/m4-1.4.13/m4/unistd_h.m4 @@ -0,0 +1,83 @@ +# unistd_h.m4 serial 17 +dnl Copyright (C) 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Simon Josefsson, Bruno Haible. + +AC_DEFUN([gl_UNISTD_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([unistd.h]) + + AC_CHECK_HEADERS_ONCE([unistd.h]) + if test $ac_cv_header_unistd_h = yes; then + HAVE_UNISTD_H=1 + else + HAVE_UNISTD_H=0 + fi + AC_SUBST([HAVE_UNISTD_H]) +]) + +AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_UNISTD_H_DEFAULTS], +[ + GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) + GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) + GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) + GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) + GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) + GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) + GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) + GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) + GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) + GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) + GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) + GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) + GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) + GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) + GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) + GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) + GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) + GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) + GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) + GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) + GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) + GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) + HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) + HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) + HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) + HAVE_GETDOMAINNAME=1; AC_SUBST([HAVE_GETDOMAINNAME]) + HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) + HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) + HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) + HAVE_GETUSERSHELL=1; AC_SUBST([HAVE_GETUSERSHELL]) + HAVE_LINK=1; AC_SUBST([HAVE_LINK]) + HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) + HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) + HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) + HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) + HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) + HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) + REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) + REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) + REPLACE_FCHDIR=0; AC_SUBST([REPLACE_FCHDIR]) + REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) + REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) + REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) + REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) + REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) + UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) +]) diff --git a/coreseek/m4-1.4.13/m4/unlocked-io.m4 b/coreseek/m4-1.4.13/m4/unlocked-io.m4 new file mode 100644 index 0000000..cd5079b --- /dev/null +++ b/coreseek/m4-1.4.13/m4/unlocked-io.m4 @@ -0,0 +1,41 @@ +# unlocked-io.m4 serial 15 + +# Copyright (C) 1998-2006, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +dnl From Jim Meyering. +dnl +dnl See if the glibc *_unlocked I/O macros or functions are available. +dnl Use only those *_unlocked macros or functions that are declared +dnl (because some of them were declared in Solaris 2.5.1 but were removed +dnl in Solaris 2.6, whereas we want binaries built on Solaris 2.5.1 to run +dnl on Solaris 2.6). + +AC_DEFUN([gl_FUNC_GLIBC_UNLOCKED_IO], +[ + AC_DEFINE([USE_UNLOCKED_IO], [1], + [Define to 1 if you want getc etc. to use unlocked I/O if available. + Unlocked I/O can improve performance in unithreaded apps, + but it is not safe for multithreaded apps.]) + + dnl Persuade glibc and Solaris to declare + dnl fgets_unlocked(), fputs_unlocked() etc. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + AC_CHECK_DECLS_ONCE([clearerr_unlocked]) + AC_CHECK_DECLS_ONCE([feof_unlocked]) + AC_CHECK_DECLS_ONCE([ferror_unlocked]) + AC_CHECK_DECLS_ONCE([fflush_unlocked]) + AC_CHECK_DECLS_ONCE([fgets_unlocked]) + AC_CHECK_DECLS_ONCE([fputc_unlocked]) + AC_CHECK_DECLS_ONCE([fputs_unlocked]) + AC_CHECK_DECLS_ONCE([fread_unlocked]) + AC_CHECK_DECLS_ONCE([fwrite_unlocked]) + AC_CHECK_DECLS_ONCE([getc_unlocked]) + AC_CHECK_DECLS_ONCE([getchar_unlocked]) + AC_CHECK_DECLS_ONCE([putc_unlocked]) + AC_CHECK_DECLS_ONCE([putchar_unlocked]) +]) diff --git a/coreseek/m4-1.4.13/m4/vasnprintf.m4 b/coreseek/m4-1.4.13/m4/vasnprintf.m4 new file mode 100644 index 0000000..01e8772 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/vasnprintf.m4 @@ -0,0 +1,276 @@ +# vasnprintf.m4 serial 28 +dnl Copyright (C) 2002-2004, 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VASNPRINTF], +[ + AC_CHECK_FUNCS_ONCE([vasnprintf]) + if test $ac_cv_func_vasnprintf = no; then + gl_REPLACE_VASNPRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_VASNPRINTF], +[ + AC_CHECK_FUNCS_ONCE([vasnprintf]) + AC_LIBOBJ([vasnprintf]) + AC_LIBOBJ([printf-args]) + AC_LIBOBJ([printf-parse]) + AC_LIBOBJ([asnprintf]) + if test $ac_cv_func_vasnprintf = yes; then + AC_DEFINE([REPLACE_VASNPRINTF], [1], + [Define if vasnprintf exists but is overridden by gnulib.]) + fi + gl_PREREQ_PRINTF_ARGS + gl_PREREQ_PRINTF_PARSE + gl_PREREQ_VASNPRINTF + gl_PREREQ_ASNPRINTF +]) + +# Prequisites of lib/printf-args.h, lib/printf-args.c. +AC_DEFUN([gl_PREREQ_PRINTF_ARGS], +[ + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) +]) + +# Prequisites of lib/printf-parse.h, lib/printf-parse.c. +AC_DEFUN([gl_PREREQ_PRINTF_PARSE], +[ + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + AC_REQUIRE([AC_TYPE_SIZE_T]) + AC_CHECK_TYPE([ptrdiff_t], , + [AC_DEFINE([ptrdiff_t], [long], + [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) + ]) + AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) +]) + +# Prerequisites of lib/vasnprintf.c. +AC_DEFUN([gl_PREREQ_VASNPRINTF], +[ + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) + dnl Use the _snprintf function only if it is declared (because on NetBSD it + dnl is defined as a weak alias of snprintf; we prefer to use the latter). + AC_CHECK_DECLS([_snprintf], , , [#include ]) +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting 'long double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + case "$gl_cv_func_printf_long_double" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_INFINITE]) + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + infinite 'double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if + dnl NEED_PRINTF_LONG_DOUBLE is already set. + AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + infinite 'long double' arguments.]) + ;; + esac + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], + [Define if the vasnprintf implementation needs special code for + the 'a' and 'A' directives.]) + AC_CHECK_FUNCS([nl_langinfo]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], + [Define if the vasnprintf implementation needs special code for + the 'F' directive.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], + [Define if the vasnprintf implementation needs special code for + the 'ls' directive.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], +[ + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], + [Define if the vasnprintf implementation needs special code for the + ' flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], +[ + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], + [Define if the vasnprintf implementation needs special code for the + '-' flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], +[ + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], + [Define if the vasnprintf implementation needs special code for the + 0 flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting large precisions. +AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], +[ + AC_REQUIRE([gl_PRINTF_PRECISION]) + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], + [Define if the vasnprintf implementation needs special code for + supporting large precisions without arbitrary bounds.]) + AC_DEFINE([NEED_PRINTF_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'double' arguments.]) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory +# conditions. +AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], +[ + AC_REQUIRE([gl_PRINTF_ENOMEM]) + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_ENOMEM], [1], + [Define if the vasnprintf implementation needs special code for + surviving out-of-memory conditions.]) + AC_DEFINE([NEED_PRINTF_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'double' arguments.]) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. +AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], +[ + AC_REQUIRE([gl_PREREQ_VASNPRINTF]) + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM +]) + +# Prerequisites of lib/asnprintf.c. +AC_DEFUN([gl_PREREQ_ASNPRINTF], +[ +]) diff --git a/coreseek/m4-1.4.13/m4/vasprintf-posix.m4 b/coreseek/m4-1.4.13/m4/vasprintf-posix.m4 new file mode 100644 index 0000000..7ea6daa --- /dev/null +++ b/coreseek/m4-1.4.13/m4/vasprintf-posix.m4 @@ -0,0 +1,101 @@ +# vasprintf-posix.m4 serial 13 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VASPRINTF_POSIX], +[ + AC_REQUIRE([gl_PRINTF_SIZES_C99]) + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_INFINITE]) + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + AC_REQUIRE([gl_PRINTF_POSITIONS]) + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + AC_REQUIRE([gl_PRINTF_PRECISION]) + AC_REQUIRE([gl_PRINTF_ENOMEM]) + gl_cv_func_vasprintf_posix=no + AC_CHECK_FUNCS([vasprintf]) + case "$gl_cv_func_printf_sizes_c99" in + *yes) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + case "$gl_cv_func_printf_directive_a" in + *yes) + case "$gl_cv_func_printf_directive_f" in + *yes) + case "$gl_cv_func_printf_directive_n" in + *yes) + case "$gl_cv_func_printf_directive_ls" in + *yes) + case "$gl_cv_func_printf_positions" in + *yes) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + case "$gl_cv_func_printf_flag_zero" in + *yes) + case "$gl_cv_func_printf_precision" in + *yes) + case "$gl_cv_func_printf_enomem" in + *yes) + if test $ac_cv_func_vasprintf = yes; then + # vasprintf exists and is + # already POSIX compliant. + gl_cv_func_vasprintf_posix=yes + fi + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + ;; + esac + if test $gl_cv_func_vasprintf_posix = no; then + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM + gl_REPLACE_VASNPRINTF + gl_REPLACE_VASPRINTF + fi +]) diff --git a/coreseek/m4-1.4.13/m4/vasprintf.m4 b/coreseek/m4-1.4.13/m4/vasprintf.m4 new file mode 100644 index 0000000..074b03c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/vasprintf.m4 @@ -0,0 +1,45 @@ +# vasprintf.m4 serial 6 +dnl Copyright (C) 2002-2003, 2006-2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VASPRINTF], +[ + AC_CHECK_FUNCS([vasprintf]) + if test $ac_cv_func_vasprintf = no; then + gl_REPLACE_VASPRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_VASPRINTF], +[ + AC_LIBOBJ([vasprintf]) + AC_LIBOBJ([asprintf]) + AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + if test $ac_cv_func_vasprintf = yes; then + REPLACE_VASPRINTF=1 + else + HAVE_VASPRINTF=0 + fi + gl_PREREQ_VASPRINTF_H + gl_PREREQ_VASPRINTF + gl_PREREQ_ASPRINTF +]) + +# Prerequisites of the vasprintf portion of lib/stdio.h. +AC_DEFUN([gl_PREREQ_VASPRINTF_H], +[ + dnl Persuade glibc to declare asprintf() and vasprintf(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +]) + +# Prerequisites of lib/vasprintf.c. +AC_DEFUN([gl_PREREQ_VASPRINTF], +[ +]) + +# Prerequisites of lib/asprintf.c. +AC_DEFUN([gl_PREREQ_ASPRINTF], +[ +]) diff --git a/coreseek/m4-1.4.13/m4/wait-process.m4 b/coreseek/m4-1.4.13/m4/wait-process.m4 new file mode 100644 index 0000000..f03ad76 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/wait-process.m4 @@ -0,0 +1,12 @@ +# wait-process.m4 serial 4 +dnl Copyright (C) 2003, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_WAIT_PROCESS], +[ + dnl Prerequisites of lib/wait-process.c. + AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) + AC_CHECK_FUNCS([waitid]) +]) diff --git a/coreseek/m4-1.4.13/m4/wchar.m4 b/coreseek/m4-1.4.13/m4/wchar.m4 new file mode 100644 index 0000000..ba8ee6a --- /dev/null +++ b/coreseek/m4-1.4.13/m4/wchar.m4 @@ -0,0 +1,99 @@ +dnl A placeholder for ISO C99 , for platforms that have issues. + +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Eric Blake. + +# wchar.m4 serial 22 + +AC_DEFUN([gl_WCHAR_H], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_CACHE_CHECK([whether is standalone], + [gl_cv_header_wchar_h_standalone], + [AC_COMPILE_IFELSE([[#include +wchar_t w;]], + [gl_cv_header_wchar_h_standalone=yes], + [gl_cv_header_wchar_h_standalone=no])]) + + AC_REQUIRE([gt_TYPE_WINT_T]) + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + AC_SUBST([HAVE_WINT_T]) + + if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != yes; then + WCHAR_H=wchar.h + fi + + dnl Prepare for creating substitute . + dnl Do it always: WCHAR_H may be empty here but can be set later. + dnl Check for (missing in Linux uClibc when built without wide + dnl character support). + AC_CHECK_HEADERS_ONCE([wchar.h]) + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + AC_SUBST([HAVE_WCHAR_H]) + gl_CHECK_NEXT_HEADERS([wchar.h]) +]) + +dnl Unconditionally enables the replacement of . +AC_DEFUN([gl_REPLACE_WCHAR_H], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + WCHAR_H=wchar.h +]) + +AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_WCHAR_H_DEFAULTS], +[ + GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) + GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) + GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) + GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) + GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) + GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) + GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) + GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) + GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) + GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) + GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) + HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) + HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) + HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) + HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) + HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) + HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) + HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) + HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) + HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) + HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) + REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) + REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) + REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) + REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) + REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) + REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) + REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) + REPLACE_MBSNRTOWCS=0;AC_SUBST([REPLACE_MBSNRTOWCS]) + REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) + REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) + REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) + WCHAR_H=''; AC_SUBST([WCHAR_H]) +]) diff --git a/coreseek/m4-1.4.13/m4/wchar_t.m4 b/coreseek/m4-1.4.13/m4/wchar_t.m4 new file mode 100644 index 0000000..fb27a7f --- /dev/null +++ b/coreseek/m4-1.4.13/m4/wchar_t.m4 @@ -0,0 +1,20 @@ +# wchar_t.m4 serial 3 (gettext-0.18) +dnl Copyright (C) 2002-2003, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wchar_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WCHAR_T], +[ + AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], + [AC_TRY_COMPILE([#include + wchar_t foo = (wchar_t)'\0';], , + [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) + if test $gt_cv_c_wchar_t = yes; then + AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/wcrtomb.m4 b/coreseek/m4-1.4.13/m4/wcrtomb.m4 new file mode 100644 index 0000000..22d9433 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/wcrtomb.m4 @@ -0,0 +1,88 @@ +# wcrtomb.m4 serial 2 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WCRTOMB], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_CHECK_FUNCS_ONCE([wcrtomb]) + if test $ac_cv_func_wcrtomb = no; then + HAVE_WCRTOMB=0 + else + + dnl On OSF/1 5.1 and Solaris 10, wcrtomb (NULL, 0, NULL) sometimes + dnl returns 0 instead of 1. + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether wcrtomb return value is correct], + [gl_cv_func_wcrtomb_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on OSF/1 and Solaris. + osf* | solaris*) gl_cv_func_wcrtomb_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wcrtomb_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then + AC_TRY_RUN([ +#include +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + if (wcrtomb (NULL, 0, NULL) != 1) + return 1; + } + return 0; +}], + [gl_cv_func_wcrtomb_retval=yes], + [gl_cv_func_wcrtomb_retval=no], + []) + fi + ]) + case "$gl_cv_func_wcrtomb_retval" in + *yes) ;; + *) REPLACE_WCRTOMB=1 ;; + esac + fi + if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([wcrtomb]) + gl_PREREQ_WCRTOMB + fi +]) + +# Prerequisites of lib/wcrtomb.c. +AC_DEFUN([gl_PREREQ_WCRTOMB], [ + : +]) diff --git a/coreseek/m4-1.4.13/m4/wctob.m4 b/coreseek/m4-1.4.13/m4/wctob.m4 new file mode 100644 index 0000000..40cb709 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/wctob.m4 @@ -0,0 +1,91 @@ +# wctob.m4 serial 3 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WCTOB], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_CHECK_FUNCS_ONCE([wctob]) + if test $ac_cv_func_wctob = no; then + HAVE_DECL_WCTOB=0 + gl_REPLACE_WCHAR_H + AC_LIBOBJ([wctob]) + gl_PREREQ_WCTOB + else + + dnl Solaris 9 has the wctob() function but it does not work. + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether wctob works], + [gl_cv_func_wctob_works], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris <= 9. + solaris2.[1-9] | solaris2.[1-9].*) + gl_cv_func_wctob_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wctob_works="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + wchar_t wc; + + if (mbtowc (&wc, "\374", 1) == 1) + if (wctob (wc) != (unsigned char) '\374') + return 1; + } + return 0; +}], + [gl_cv_func_wctob_works=yes], + [gl_cv_func_wctob_works=no], + []) + fi + ]) + case "$gl_cv_func_wctob_works" in + *yes) ;; + *) REPLACE_WCTOB=1 ;; + esac + if test $REPLACE_WCTOB = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([wctob]) + gl_PREREQ_WCTOB + else + + dnl IRIX 6.5 has the wctob() function but does not declare it. + AC_CHECK_DECLS([wctob], [], [], [ +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include +]) + if test $ac_cv_have_decl_wctob != yes; then + HAVE_DECL_WCTOB=0 + gl_REPLACE_WCHAR_H + fi + fi + fi +]) + +# Prerequisites of lib/wctob.c. +AC_DEFUN([gl_PREREQ_WCTOB], [ + : +]) diff --git a/coreseek/m4-1.4.13/m4/wctype.m4 b/coreseek/m4-1.4.13/m4/wctype.m4 new file mode 100644 index 0000000..6a1b6f0 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/wctype.m4 @@ -0,0 +1,74 @@ +# wctype.m4 serial 2 + +dnl A placeholder for ISO C99 , for platforms that lack it. + +dnl Copyright (C) 2006-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_WCTYPE_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_CHECK_FUNCS_ONCE([iswcntrl]) + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + AC_SUBST([HAVE_ISWCNTRL]) + AC_CHECK_HEADERS_ONCE([wctype.h]) + AC_REQUIRE([AC_C_INLINE]) + + AC_REQUIRE([gt_TYPE_WINT_T]) + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + AC_SUBST([HAVE_WINT_T]) + + WCTYPE_H=wctype.h + if test $ac_cv_header_wctype_h = yes; then + if test $ac_cv_func_iswcntrl = yes; then + dnl Linux libc5 has an iswprint function that returns 0 for all arguments. + dnl The other functions are likely broken in the same way. + AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], + [ + AC_TRY_RUN([#include + #include + #include + #include + #include + int main () { return iswprint ('x') == 0; }], + [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], + [AC_TRY_COMPILE([#include + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif], [], + [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no]) + ]) + ]) + if test $gl_cv_func_iswcntrl_works = yes; then + WCTYPE_H= + fi + fi + dnl Compute NEXT_WCTYPE_H even if WCTYPE_H is empty, + dnl for the benefit of builds from non-distclean directories. + gl_CHECK_NEXT_HEADERS([wctype.h]) + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + AC_SUBST([HAVE_WCTYPE_H]) + AC_SUBST([WCTYPE_H]) + + if test "$gl_cv_func_iswcntrl_works" = no; then + REPLACE_ISWCNTRL=1 + else + REPLACE_ISWCNTRL=0 + fi + AC_SUBST([REPLACE_ISWCNTRL]) +]) diff --git a/coreseek/m4-1.4.13/m4/wint_t.m4 b/coreseek/m4-1.4.13/m4/wint_t.m4 new file mode 100644 index 0000000..47a4363 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/wint_t.m4 @@ -0,0 +1,28 @@ +# wint_t.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 2003, 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wint_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], + [AC_TRY_COMPILE([ +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + wint_t foo = (wchar_t)'\0';], , + [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) + if test $gt_cv_c_wint_t = yes; then + AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) + fi +]) diff --git a/coreseek/m4-1.4.13/m4/xalloc.m4 b/coreseek/m4-1.4.13/m4/xalloc.m4 new file mode 100644 index 0000000..837a948 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/xalloc.m4 @@ -0,0 +1,24 @@ +# xalloc.m4 serial 16 +dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XALLOC], +[ + AC_LIBOBJ([xmalloc]) + + gl_PREREQ_XALLOC + gl_PREREQ_XMALLOC +]) + +# Prerequisites of lib/xalloc.h. +AC_DEFUN([gl_PREREQ_XALLOC], [ + AC_REQUIRE([gl_INLINE]) + : +]) + +# Prerequisites of lib/xmalloc.c. +AC_DEFUN([gl_PREREQ_XMALLOC], [ + : +]) diff --git a/coreseek/m4-1.4.13/m4/xsize.m4 b/coreseek/m4-1.4.13/m4/xsize.m4 new file mode 100644 index 0000000..631893c --- /dev/null +++ b/coreseek/m4-1.4.13/m4/xsize.m4 @@ -0,0 +1,13 @@ +# xsize.m4 serial 4 +dnl Copyright (C) 2003-2004, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XSIZE], +[ + dnl Prerequisites of lib/xsize.h. + AC_REQUIRE([gl_SIZE_MAX]) + AC_REQUIRE([AC_C_INLINE]) + AC_CHECK_HEADERS([stdint.h]) +]) diff --git a/coreseek/m4-1.4.13/m4/xstrndup.m4 b/coreseek/m4-1.4.13/m4/xstrndup.m4 new file mode 100644 index 0000000..8a30ab1 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/xstrndup.m4 @@ -0,0 +1,15 @@ +# xstrndup.m4 serial 2 +dnl Copyright (C) 2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XSTRNDUP], +[ + gl_PREREQ_XSTRNDUP +]) + +# Prerequisites of lib/xstrndup.c. +AC_DEFUN([gl_PREREQ_XSTRNDUP], [ + : +]) diff --git a/coreseek/m4-1.4.13/m4/xvasprintf.m4 b/coreseek/m4-1.4.13/m4/xvasprintf.m4 new file mode 100644 index 0000000..0e7eed9 --- /dev/null +++ b/coreseek/m4-1.4.13/m4/xvasprintf.m4 @@ -0,0 +1,11 @@ +# xvasprintf.m4 serial 1 +dnl Copyright (C) 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XVASPRINTF], +[ + dnl Prerequisites of lib/xvasprintf.c. + AC_REQUIRE([AC_C_INLINE]) +]) diff --git a/coreseek/m4-1.4.13/maint.mk b/coreseek/m4-1.4.13/maint.mk new file mode 100644 index 0000000..5b3f7cc --- /dev/null +++ b/coreseek/m4-1.4.13/maint.mk @@ -0,0 +1,200 @@ +## maint.mk -- Makefile rules for m4 maintainers -*-Makefile-*- +## +## Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software +## Foundation +## +## This file is part of GNU M4. +## +## GNU M4 is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## GNU M4 is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . + +# This is reported not to work with make-3.79.1 +# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +ME := maint.mk + +# Do not save the original name or timestamp in the .tar.gz file. +# Use --rsyncable if available. +gzip_rsyncable := \ + $(shell gzip --help 2>/dev/null|grep rsyncable >/dev/null && echo --rsyncable) +GZIP_ENV = '--no-name --best $(gzip_rsyncable)' + +GIT = git +VC = $(GIT) +VC-tag = git tag -s -m '$(VERSION)' -u $(gpg_key_ID) + +VERSION_REGEXP = $(subst .,\.,$(VERSION)) +my_distdir = $(PACKAGE)-$(VERSION) + +# Ensure that we use only the standard $(VAR) notation, +# not @...@ in Makefile.am, now that we can rely on automake +# to emit a definition for each substituted variable. +makefile-check: + grep -nE '@[A-Z_0-9]+@' `find $(srcdir) -name Makefile.am` \ + && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : + +news-date-check: NEWS version-check + today=`date +%Y-%m-%d`; \ + if head $(srcdir)/NEWS | grep '^\*.* $(VERSION_REGEXP) ('$$today')' \ + >/dev/null; then \ + :; \ + else \ + echo "version or today's date is not in NEWS" 1>&2; \ + exit 1; \ + fi + +changelog-check: + if head $(srcdir)/ChangeLog | grep 'Version $(VERSION_REGEXP)\.$$' \ + >/dev/null; then \ + :; \ + else \ + echo "$(VERSION) not in ChangeLog" 1>&2; \ + exit 1; \ + fi + +m4-check: + @grep -n 'AC_DEFUN([^[]' $(srcdir)/m4/*.m4 \ + && { echo '$(ME): quote the first arg to AC_DEFUN' 1>&2; \ + exit 1; } || : + +vc-diff-check: + (CDPATH=; cd $(srcdir) && $(VC) diff) > vc-diffs || : + if test -s vc-diffs; then \ + cat vc-diffs; \ + echo "Some files are locally modified:" 1>&2; \ + exit 1; \ + else \ + rm vc-diffs; \ + fi + +maintainer-distcheck: + $(MAKE) distcheck + $(MAKE) my-distcheck + +# Don't make a distribution if checks fail. +# Also, make sure the NEWS file is up-to-date. +vc-dist: $(local-check) vc-diff-check maintainer-distcheck + $(MAKE) dist + +# Use this to make sure we don't run these programs when building +# from a virgin tgz file, below. +null_AM_MAKEFLAGS = \ + ACLOCAL=false \ + AUTOCONF=false \ + AUTOMAKE=false \ + AUTOHEADER=false \ + MAKEINFO=false + +# Use -Wformat -Werror to detect format-string/arg-list mismatches. +# Also, check for shadowing problems with -Wshadow, and for pointer +# arithmetic problems with -Wpointer-arith. +# These CFLAGS are pretty strict. If you build this target, you probably +# have to have a recent version of gcc and glibc headers. +TMPDIR ?= /tmp +t=$(TMPDIR)/$(PACKAGE)/test +my-distcheck: $(local-check) check + -rm -rf $(t) + mkdir -p $(t) + GZIP=$(GZIP_ENV) $(AMTAR) -C $(t) -zxf $(distdir).tar.gz + cd $(t)/$(distdir) \ + && ./configure \ + && $(MAKE) CFLAGS='$(warn_cflags)' \ + AM_MAKEFLAGS='$(null_AM_MAKEFLAGS)' \ + && $(MAKE) dvi \ + && $(MAKE) check \ + && $(MAKE) distclean + (cd $(t) && mv $(distdir) $(distdir).old \ + && $(AMTAR) -zxf - ) < $(distdir).tar.gz + diff -ur $(t)/$(distdir).old $(t)/$(distdir) + -rm -rf $(t) + @echo "========================"; \ + echo "$(distdir).tar.gz is ready for distribution"; \ + echo "========================" + +gnulib-version = $$(cd $(gnulib_dir) && git describe) + +announcement: NEWS ChangeLog $(rel-files) + @$(srcdir)/build-aux/announce-gen \ + --release-type=$(RELEASE_TYPE) \ + --package=$(PACKAGE) \ + --prev=$(PREV_VERSION) \ + --curr=$(VERSION) \ + --gpg-key-id=$(gpg_key_ID) \ + --news=$(srcdir)/NEWS \ + --bootstrap-tools=autoconf,automake,gnulib \ + --gnulib-version=$(gnulib-version) \ + $(addprefix --url-dir=, $(url_dir_list)) + +.PHONY: alpha beta major +alpha beta major: $(local-check) version-check + test $@ = major \ + && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \ + || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ + || : + $(MAKE) vc-dist + $(MAKE) news-date-check changelog-check + $(MAKE) deltas + $(MAKE) -s announcement RELEASE_TYPE=$@ > /tmp/announce-$(my_distdir) + +.PHONY: version-check +version-check: + @case $(VERSION) in \ + *[acegikmoqsuwy]) \ + echo "Version \`$(VERSION)' is not a releasable version, please read:"; \ + echo " http://www.gnu.org/software/libtool/contribute.html"; \ + exit 1; \ + ;; \ + esac + @if test -z "$(PREV_VERSION)"; \ + then echo "PREV_VERSION is not set"; exit 1; fi + +.PHONY: prev-tarball +prev-tarball: version-check +## Make sure we have the previous release tarball in the tree. + @ofile="$(PACKAGE)-$(PREV_VERSION).tar.gz"; \ + if test -f $$ofile; then :; \ + else echo "Cannot make deltas without $$ofile"; exit 1; fi + +.PHONY: new-tarball +new-tarball: +## Make sure we have the new release tarball in the tree. + @ofile="$(PACKAGE)-$(VERSION).tar.gz"; \ + if test -f $$ofile; then :; \ + else echo "Cannot make deltas without $$ofile"; exit 1; fi + +.PHONY: deltas +deltas: delta-diff + +DIFF = diff +DIFF_OPTIONS = -ruNp + +.PHONY: delta-diff +delta-diff: prev-tarball new-tarball +## Unpack the tarballs somewhere to diff them + rm -rf delta-diff + mkdir delta-diff + ofile="../$(PACKAGE)-$(PREV_VERSION)-$(VERSION).diff.gz"; \ + cd delta-diff \ + && tar xzf "../$(PACKAGE)-$(PREV_VERSION).tar.gz" \ + && tar xzf "../$(PACKAGE)-$(VERSION).tar.gz" \ + && $(DIFF) $(DIFF_OPTIONS) \ + $(PACKAGE)-$(PREV_VERSION) $(PACKAGE)-$(VERSION) \ + | GZIP=$(GZIP_ENV) gzip -c > $$ofile + rm -rf delta-diff + +.PHONY: web-manual +web-manual: + @cd '$(srcdir)/doc' ; \ + $(SHELL) ../build-aux/gendocs.sh -o '$(abs_builddir)/doc/manual' \ + --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ + "$(PACKAGE_NAME) - $(manual_title)" + @echo " *** Upload the doc/manual directory to web-cvs." diff --git a/coreseek/m4-1.4.13/src/.deps/builtin.Po b/coreseek/m4-1.4.13/src/.deps/builtin.Po new file mode 100644 index 0000000..abfde5f --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/builtin.Po @@ -0,0 +1,273 @@ +builtin.o: builtin.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h ../lib/execute.h ../lib/memchr2.h ../lib/pipe.h \ + ../lib/regex.h ../lib/wait-process.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: + +../lib/execute.h: + +../lib/memchr2.h: + +../lib/pipe.h: + +../lib/regex.h: + +../lib/wait-process.h: diff --git a/coreseek/m4-1.4.13/src/.deps/debug.Po b/coreseek/m4-1.4.13/src/.deps/debug.Po new file mode 100644 index 0000000..5f3cdd9 --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/debug.Po @@ -0,0 +1,262 @@ +debug.o: debug.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: diff --git a/coreseek/m4-1.4.13/src/.deps/eval.Po b/coreseek/m4-1.4.13/src/.deps/eval.Po new file mode 100644 index 0000000..a4593a7 --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/eval.Po @@ -0,0 +1,262 @@ +eval.o: eval.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: diff --git a/coreseek/m4-1.4.13/src/.deps/format.Po b/coreseek/m4-1.4.13/src/.deps/format.Po new file mode 100644 index 0000000..e55886a --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/format.Po @@ -0,0 +1,262 @@ +format.o: format.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: diff --git a/coreseek/m4-1.4.13/src/.deps/freeze.Po b/coreseek/m4-1.4.13/src/.deps/freeze.Po new file mode 100644 index 0000000..c702698 --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/freeze.Po @@ -0,0 +1,262 @@ +freeze.o: freeze.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: diff --git a/coreseek/m4-1.4.13/src/.deps/input.Po b/coreseek/m4-1.4.13/src/.deps/input.Po new file mode 100644 index 0000000..3de5c8c --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/input.Po @@ -0,0 +1,264 @@ +input.o: input.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h ../lib/memchr2.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: + +../lib/memchr2.h: diff --git a/coreseek/m4-1.4.13/src/.deps/m4.Po b/coreseek/m4-1.4.13/src/.deps/m4.Po new file mode 100644 index 0000000..1fe1632 --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/m4.Po @@ -0,0 +1,294 @@ +m4.o: m4.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h ../lib/signal.h /usr/include/signal.h \ + /usr/include/x86_64-linux-gnu/bits/signum.h \ + /usr/include/x86_64-linux-gnu/bits/siginfo.h \ + /usr/include/x86_64-linux-gnu/bits/sigaction.h \ + /usr/include/x86_64-linux-gnu/bits/sigcontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigstack.h \ + /usr/include/x86_64-linux-gnu/sys/ucontext.h \ + /usr/include/x86_64-linux-gnu/bits/sigthread.h ../lib/c-stack.h \ + ../lib/progname.h ../lib/version-etc.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: + +../lib/signal.h: + +/usr/include/signal.h: + +/usr/include/x86_64-linux-gnu/bits/signum.h: + +/usr/include/x86_64-linux-gnu/bits/siginfo.h: + +/usr/include/x86_64-linux-gnu/bits/sigaction.h: + +/usr/include/x86_64-linux-gnu/bits/sigcontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigstack.h: + +/usr/include/x86_64-linux-gnu/sys/ucontext.h: + +/usr/include/x86_64-linux-gnu/bits/sigthread.h: + +../lib/c-stack.h: + +../lib/progname.h: + +../lib/version-etc.h: diff --git a/coreseek/m4-1.4.13/src/.deps/macro.Po b/coreseek/m4-1.4.13/src/.deps/macro.Po new file mode 100644 index 0000000..8d54981 --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/macro.Po @@ -0,0 +1,262 @@ +macro.o: macro.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: diff --git a/coreseek/m4-1.4.13/src/.deps/output.Po b/coreseek/m4-1.4.13/src/.deps/output.Po new file mode 100644 index 0000000..1bac9f2 --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/output.Po @@ -0,0 +1,266 @@ +output.o: output.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h ../lib/gl_avltree_oset.h ../lib/gl_oset.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: + +../lib/gl_avltree_oset.h: + +../lib/gl_oset.h: diff --git a/coreseek/m4-1.4.13/src/.deps/path.Po b/coreseek/m4-1.4.13/src/.deps/path.Po new file mode 100644 index 0000000..e6f859e --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/path.Po @@ -0,0 +1,262 @@ +path.o: path.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: diff --git a/coreseek/m4-1.4.13/src/.deps/symtab.Po b/coreseek/m4-1.4.13/src/.deps/symtab.Po new file mode 100644 index 0000000..6b3f61f --- /dev/null +++ b/coreseek/m4-1.4.13/src/.deps/symtab.Po @@ -0,0 +1,262 @@ +symtab.o: symtab.c m4.h ../lib/config.h /usr/include/assert.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/errno.h /usr/include/x86_64-linux-gnu/bits/errno.h \ + /usr/include/linux/errno.h /usr/include/x86_64-linux-gnu/asm/errno.h \ + /usr/include/asm-generic/errno.h /usr/include/asm-generic/errno-base.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \ + /usr/include/x86_64-linux-gnu/bits/local_lim.h \ + /usr/include/linux/limits.h \ + /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \ + /usr/include/x86_64-linux-gnu/bits/xopen_lim.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h /usr/include/stdint.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h ../lib/string.h \ + /usr/include/string.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h ../lib/stdlib.h \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h ../lib/binary-io.h \ + ../lib/fcntl.h ../lib/sys/stat.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h ../lib/unistd.h \ + /usr/include/unistd.h /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h ../lib/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/uio.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h ../lib/stdio.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../lib/clean-temp.h \ + ../lib/cloexec.h ../lib/close-stream.h ../lib/closein.h ../lib/dirname.h \ + ../lib/error.h ../lib/exitfail.h ../lib/filenamecat.h ../lib/obstack.h \ + ../lib/stdio--.h ../lib/stdio-safer.h ../lib/stdlib--.h \ + ../lib/stdlib-safer.h ../lib/unistd--.h ../lib/unistd-safer.h \ + ../lib/verror.h ../lib/error.h ../lib/xalloc.h ../lib/xprintf.h \ + ../lib/xvasprintf.h + +m4.h: + +../lib/config.h: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/errno.h: + +/usr/include/x86_64-linux-gnu/bits/errno.h: + +/usr/include/linux/errno.h: + +/usr/include/x86_64-linux-gnu/asm/errno.h: + +/usr/include/asm-generic/errno.h: + +/usr/include/asm-generic/errno-base.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/limits.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix1_lim.h: + +/usr/include/x86_64-linux-gnu/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/x86_64-linux-gnu/bits/posix2_lim.h: + +/usr/include/x86_64-linux-gnu/bits/xopen_lim.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdbool.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdint.h: + +/usr/include/stdint.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +../lib/string.h: + +/usr/include/string.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +../lib/stdlib.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +../lib/binary-io.h: + +../lib/fcntl.h: + +../lib/sys/stat.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +../lib/unistd.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +../lib/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/uio.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +../lib/stdio.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../lib/clean-temp.h: + +../lib/cloexec.h: + +../lib/close-stream.h: + +../lib/closein.h: + +../lib/dirname.h: + +../lib/error.h: + +../lib/exitfail.h: + +../lib/filenamecat.h: + +../lib/obstack.h: + +../lib/stdio--.h: + +../lib/stdio-safer.h: + +../lib/stdlib--.h: + +../lib/stdlib-safer.h: + +../lib/unistd--.h: + +../lib/unistd-safer.h: + +../lib/verror.h: + +../lib/error.h: + +../lib/xalloc.h: + +../lib/xprintf.h: + +../lib/xvasprintf.h: diff --git a/coreseek/m4-1.4.13/src/Makefile b/coreseek/m4-1.4.13/src/Makefile new file mode 100644 index 0000000..c6c75fb --- /dev/null +++ b/coreseek/m4-1.4.13/src/Makefile @@ -0,0 +1,1008 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# src/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/m4 +pkgincludedir = $(includedir)/m4 +pkglibdir = $(libdir)/m4 +pkglibexecdir = $(libexecdir)/m4 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +bin_PROGRAMS = m4$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_m4_OBJECTS = m4.$(OBJEXT) builtin.$(OBJEXT) debug.$(OBJEXT) \ + eval.$(OBJEXT) format.$(OBJEXT) freeze.$(OBJEXT) \ + input.$(OBJEXT) macro.$(OBJEXT) output.$(OBJEXT) \ + path.$(OBJEXT) symtab.$(OBJEXT) +m4_OBJECTS = $(am_m4_OBJECTS) +am__DEPENDENCIES_1 = +m4_DEPENDENCIES = ../lib/libm4.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = @echo " CC " $@; +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = @echo " CCLD " $@; +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(m4_SOURCES) +DIST_SOURCES = $(m4_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run aclocal-1.10b +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run tar +APPLE_UNIVERSAL_BUILD = 0 +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run automake-1.10b +AWK = gawk +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FCNTL_H = fcntl.h +FLOAT_H = +GETOPT_H = +GLIBC21 = yes +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP2 = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCLOSE = 0 +GNULIB_FFLUSH = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FOPEN = 1 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPL = 1 +GNULIB_FSEEK = 0 +GNULIB_FSEEKO = 1 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 0 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FWRITE = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 0 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 0 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETSUBOPT = 0 +GNULIB_GETUSERSHELL = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MATHL = 0 +GNULIB_MBRLEN = 0 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDTEMP = 1 +GNULIB_MKSTEMP = 1 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_PERROR = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_RANDOM_R = 0 +GNULIB_RAWMEMCHR = 1 +GNULIB_READLINK = 0 +GNULIB_REALLOC_POSIX = 0 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SETENV = 1 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 1 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 0 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 0 +GNULIB_STRERROR = 1 +GNULIB_STRNDUP = 1 +GNULIB_STRNLEN = 1 +GNULIB_STRPBRK = 0 +GNULIB_STRSEP = 0 +GNULIB_STRSIGNAL = 1 +GNULIB_STRSTR = 1 +GNULIB_STRTOD = 1 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRVERSCMP = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNSETENV = 1 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCTOB = 1 +GNULIB_WCWIDTH = 0 +GNULIB_WRITE = 0 +GREP = /bin/grep +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_CALLOC_POSIX = 1 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_EUIDACCESS = 1 +HAVE_FSEEKO = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_GETDOMAINNAME = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETUSERSHELL = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWCNTRL = 1 +HAVE_LCHMOD = 1 +HAVE_LINK = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MALLOC_POSIX = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDTEMP = 1 +HAVE_OS_H = 0 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_REALLOC_POSIX = 1 +HAVE_RPMATCH = 1 +HAVE_SCHED_H = +HAVE_SETENV = 1 +HAVE_SIGACTION = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRNDUP = 1 +HAVE_STRPBRK = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYS_BITYPES_H = +HAVE_SYS_INTTYPES_H = +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_UNISTD_H = 1 +HAVE_UNSETENV = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCTYPE_H = 1 +HAVE_WINT_T = 1 +HAVE__BOOL = 1 +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBCSTACK = +LIBINTL = +LIBM4_LIBDEPS = +LIBM4_LTLIBDEPS = +LIBMULTITHREAD = +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBS = +LIBSIGSEGV = +LIBTESTS_LIBDEPS = +LIBTHREAD = +LOCALCHARSET_TESTS_ENVIRONMENT = CHARSETALIASDIR="$(top_builddir)/lib" +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTLIBCSTACK = +LTLIBINTL = +LTLIBMULTITHREAD = +LTLIBOBJS = +LTLIBPTH = +LTLIBSIGSEGV = +LTLIBTHREAD = +M4_LIBOBJS = asnprintf.o asprintf.o basename.o cloexec.o close-stream.o closein.o closeout.o dirname.o dup-safer.o exitfail.o fd-safer.o fflush.o filenamecat.o fopen-safer.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnprintf.o vasprintf.o xmalloc.o +M4_LTLIBOBJS = asnprintf.lo asprintf.lo basename.lo cloexec.lo close-stream.lo closein.lo closeout.lo dirname.lo dup-safer.lo exitfail.lo fd-safer.lo fflush.lo filenamecat.lo fopen-safer.lo fseeko.lo isnanl.lo mkstemp-safer.lo pipe-safer.lo printf-args.lo printf-parse.lo quotearg.lo regex.lo stripslash.lo strstr.lo tempname.lo vasnprintf.lo vasprintf.lo xmalloc.lo +M4tests_LIBOBJS = +M4tests_LTLIBOBJS = +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NEXT_ERRNO_H = +NEXT_FCNTL_H = +NEXT_FLOAT_H = +NEXT_MATH_H = +NEXT_SCHED_H = +NEXT_SIGNAL_H = +NEXT_SPAWN_H = +NEXT_STDARG_H = +NEXT_STDINT_H = +NEXT_STDIO_H = +NEXT_STDLIB_H = +NEXT_STRING_H = +NEXT_SYS_STAT_H = +NEXT_SYS_TIME_H = +NEXT_SYS_WAIT_H = +NEXT_UNISTD_H = +NEXT_WCHAR_H = +NEXT_WCTYPE_H = +OBJEXT = o +PACKAGE = m4 +PACKAGE_BUGREPORT = bug-m4@gnu.org +PACKAGE_NAME = GNU M4 +PACKAGE_STRING = GNU M4 1.4.13 +PACKAGE_TARNAME = m4 +PACKAGE_URL = http://www.gnu.org/software/m4/ +PACKAGE_VERSION = 1.4.13 +PATH_SEPARATOR = : +POW_LIB = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_BTOWC = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_DPRINTF = 0 +REPLACE_FCHDIR = 0 +REPLACE_FCLOSE = 0 +REPLACE_FFLUSH = 1 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 1 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_GETCWD = 0 +REPLACE_GETLINE = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MBRLEN = 0 +REPLACE_MBRTOWC = 0 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKSTEMP = 0 +REPLACE_NAN = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_PERROR = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_PRINTF = 0 +REPLACE_PUTENV = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 1 +REPLACE_STRTOD = 0 +REPLACE_TRUNCL = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 0 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCTOB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SET_MAKE = +SHELL = /bin/bash +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +SPAWN_H = +STDARG_H = +STDBOOL_H = +STDINT_H = +STRIP = +SYS_STAT_H = sys/stat.h +SYS_TIME_H = +SYS_WAIT_H = sys/wait.h +UNISTD_H_HAVE_WINSOCK2_H = 0 +VERSION = 1.4.13 +VOID_UNSETENV = 0 +WCHAR_H = +WCHAR_T_SUFFIX = +WCTYPE_H = +WINT_T_SUFFIX = +abs_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/src +abs_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/src +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +AUTOMAKE_OPTIONS = nostdinc +AM_CPPFLAGS = -I$(top_srcdir)/lib -I../lib +m4_SOURCES = m4.h m4.c builtin.c debug.c eval.c format.c freeze.c input.c \ +macro.c output.c path.c symtab.c + +m4_LDADD = ../lib/libm4.a $(LIBM4_LIBDEPS) $(POW_LIB) $(LIBCSTACK) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --silent-rules src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --silent-rules src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +m4$(EXEEXT): $(m4_OBJECTS) $(m4_DEPENDENCIES) + @rm -f m4$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(m4_OBJECTS) $(m4_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/builtin.Po +include ./$(DEPDIR)/debug.Po +include ./$(DEPDIR)/eval.Po +include ./$(DEPDIR)/format.Po +include ./$(DEPDIR)/freeze.Po +include ./$(DEPDIR)/input.Po +include ./$(DEPDIR)/m4.Po +include ./$(DEPDIR)/macro.Po +include ./$(DEPDIR)/output.Po +include ./$(DEPDIR)/path.Po +include ./$(DEPDIR)/symtab.Po + +.c.o: + $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/src/Makefile.am b/coreseek/m4-1.4.13/src/Makefile.am new file mode 100644 index 0000000..80b9acf --- /dev/null +++ b/coreseek/m4-1.4.13/src/Makefile.am @@ -0,0 +1,27 @@ +## Makefile.am - template for generating Makefile via Automake +## +## Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc. +## +## This file is part of GNU M4. +## +## GNU M4 is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation, either version 3 of the License, or +## (at your option) any later version. +## +## GNU M4 is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . +## +## This file written by Eric Blake + +AUTOMAKE_OPTIONS = nostdinc +AM_CPPFLAGS = -I$(top_srcdir)/lib -I../lib +bin_PROGRAMS = m4 +m4_SOURCES = m4.h m4.c builtin.c debug.c eval.c format.c freeze.c input.c \ +macro.c output.c path.c symtab.c +m4_LDADD = ../lib/libm4.a $(LIBM4_LIBDEPS) $(POW_LIB) $(LIBCSTACK) diff --git a/coreseek/m4-1.4.13/src/Makefile.in b/coreseek/m4-1.4.13/src/Makefile.in new file mode 100644 index 0000000..f826c98 --- /dev/null +++ b/coreseek/m4-1.4.13/src/Makefile.in @@ -0,0 +1,1008 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = m4$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_m4_OBJECTS = m4.$(OBJEXT) builtin.$(OBJEXT) debug.$(OBJEXT) \ + eval.$(OBJEXT) format.$(OBJEXT) freeze.$(OBJEXT) \ + input.$(OBJEXT) macro.$(OBJEXT) output.$(OBJEXT) \ + path.$(OBJEXT) symtab.$(OBJEXT) +m4_OBJECTS = $(am_m4_OBJECTS) +am__DEPENDENCIES_1 = +m4_DEPENDENCIES = ../lib/libm4.a $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = @echo " CC " $@; +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = @echo " CCLD " $@; +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(m4_SOURCES) +DIST_SOURCES = $(m4_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FCNTL_H = @FCNTL_H@ +FLOAT_H = @FLOAT_H@ +GETOPT_H = @GETOPT_H@ +GLIBC21 = @GLIBC21@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBINTL = @LIBINTL@ +LIBM4_LIBDEPS = @LIBM4_LIBDEPS@ +LIBM4_LTLIBDEPS = @LIBM4_LTLIBDEPS@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBS = @LIBS@ +LIBSIGSEGV = @LIBSIGSEGV@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTHREAD = @LIBTHREAD@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +LTLIBTHREAD = @LTLIBTHREAD@ +M4_LIBOBJS = @M4_LIBOBJS@ +M4_LTLIBOBJS = @M4_LTLIBOBJS@ +M4tests_LIBOBJS = @M4tests_LIBOBJS@ +M4tests_LTLIBOBJS = @M4tests_LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +SPAWN_H = @SPAWN_H@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_STAT_H = @SYS_STAT_H@ +SYS_TIME_H = @SYS_TIME_H@ +SYS_WAIT_H = @SYS_WAIT_H@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = nostdinc +AM_CPPFLAGS = -I$(top_srcdir)/lib -I../lib +m4_SOURCES = m4.h m4.c builtin.c debug.c eval.c format.c freeze.c input.c \ +macro.c output.c path.c symtab.c + +m4_LDADD = ../lib/libm4.a $(LIBM4_LIBDEPS) $(POW_LIB) $(LIBCSTACK) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --silent-rules src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu --silent-rules src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +m4$(EXEEXT): $(m4_OBJECTS) $(m4_DEPENDENCIES) + @rm -f m4$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(m4_OBJECTS) $(m4_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/builtin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eval.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/freeze.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macro.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/output.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symtab.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/src/builtin.c b/coreseek/m4-1.4.13/src/builtin.c new file mode 100644 index 0000000..05146df --- /dev/null +++ b/coreseek/m4-1.4.13/src/builtin.c @@ -0,0 +1,2241 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2000, 2004, 2006, + 2007, 2008, 2009 Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Code for all builtin macros, initialization of symbol table, and + expansion of user defined macros. */ + +#include "m4.h" + +#include "execute.h" +#include "memchr2.h" +#include "pipe.h" +#include "regex.h" +#include "wait-process.h" + +#define ARG(i) (argc > (i) ? TOKEN_DATA_TEXT (argv[i]) : "") + +/* Initialization of builtin and predefined macros. The table + "builtin_tab" is both used for initialization, and by the "builtin" + builtin. */ + +#define DECLARE(name) \ + static void name (struct obstack *, int, token_data **) + +DECLARE (m4___file__); +DECLARE (m4___line__); +DECLARE (m4___program__); +DECLARE (m4_builtin); +DECLARE (m4_changecom); +DECLARE (m4_changequote); +#ifdef ENABLE_CHANGEWORD +DECLARE (m4_changeword); +#endif +DECLARE (m4_debugmode); +DECLARE (m4_debugfile); +DECLARE (m4_decr); +DECLARE (m4_define); +DECLARE (m4_defn); +DECLARE (m4_divert); +DECLARE (m4_divnum); +DECLARE (m4_dnl); +DECLARE (m4_dumpdef); +DECLARE (m4_errprint); +DECLARE (m4_esyscmd); +DECLARE (m4_eval); +DECLARE (m4_format); +DECLARE (m4_ifdef); +DECLARE (m4_ifelse); +DECLARE (m4_include); +DECLARE (m4_incr); +DECLARE (m4_index); +DECLARE (m4_indir); +DECLARE (m4_len); +DECLARE (m4_m4exit); +DECLARE (m4_m4wrap); +DECLARE (m4_maketemp); +DECLARE (m4_mkstemp); +DECLARE (m4_patsubst); +DECLARE (m4_popdef); +DECLARE (m4_pushdef); +DECLARE (m4_regexp); +DECLARE (m4_shift); +DECLARE (m4_sinclude); +DECLARE (m4_substr); +DECLARE (m4_syscmd); +DECLARE (m4_sysval); +DECLARE (m4_traceoff); +DECLARE (m4_traceon); +DECLARE (m4_translit); +DECLARE (m4_undefine); +DECLARE (m4_undivert); + +#undef DECLARE + +static builtin const builtin_tab[] = +{ + + /* name GNUext macros blind function */ + + { "__file__", true, false, false, m4___file__ }, + { "__line__", true, false, false, m4___line__ }, + { "__program__", true, false, false, m4___program__ }, + { "builtin", true, true, true, m4_builtin }, + { "changecom", false, false, false, m4_changecom }, + { "changequote", false, false, false, m4_changequote }, +#ifdef ENABLE_CHANGEWORD + { "changeword", true, false, true, m4_changeword }, +#endif + { "debugmode", true, false, false, m4_debugmode }, + { "debugfile", true, false, false, m4_debugfile }, + { "decr", false, false, true, m4_decr }, + { "define", false, true, true, m4_define }, + { "defn", false, false, true, m4_defn }, + { "divert", false, false, false, m4_divert }, + { "divnum", false, false, false, m4_divnum }, + { "dnl", false, false, false, m4_dnl }, + { "dumpdef", false, false, false, m4_dumpdef }, + { "errprint", false, false, true, m4_errprint }, + { "esyscmd", true, false, true, m4_esyscmd }, + { "eval", false, false, true, m4_eval }, + { "format", true, false, true, m4_format }, + { "ifdef", false, false, true, m4_ifdef }, + { "ifelse", false, false, true, m4_ifelse }, + { "include", false, false, true, m4_include }, + { "incr", false, false, true, m4_incr }, + { "index", false, false, true, m4_index }, + { "indir", true, true, true, m4_indir }, + { "len", false, false, true, m4_len }, + { "m4exit", false, false, false, m4_m4exit }, + { "m4wrap", false, false, true, m4_m4wrap }, + { "maketemp", false, false, true, m4_maketemp }, + { "mkstemp", false, false, true, m4_mkstemp }, + { "patsubst", true, false, true, m4_patsubst }, + { "popdef", false, false, true, m4_popdef }, + { "pushdef", false, true, true, m4_pushdef }, + { "regexp", true, false, true, m4_regexp }, + { "shift", false, false, true, m4_shift }, + { "sinclude", false, false, true, m4_sinclude }, + { "substr", false, false, true, m4_substr }, + { "syscmd", false, false, true, m4_syscmd }, + { "sysval", false, false, false, m4_sysval }, + { "traceoff", false, false, false, m4_traceoff }, + { "traceon", false, false, false, m4_traceon }, + { "translit", false, false, true, m4_translit }, + { "undefine", false, false, true, m4_undefine }, + { "undivert", false, false, false, m4_undivert }, + + { 0, false, false, false, 0 }, + + /* placeholder is intentionally stuck after the table end delimiter, + so that we can easily find it, while not treating it as a real + builtin. */ + { "placeholder", true, false, false, m4_placeholder }, +}; + +static predefined const predefined_tab[] = +{ +#if UNIX + { "unix", "__unix__", "" }, +#endif +#if W32_NATIVE + { "windows", "__windows__", "" }, +#endif +#if OS2 + { "os2", "__os2__", "" }, +#endif +#if !UNIX && !W32_NATIVE && !OS2 +# warning Platform macro not provided +#endif + { NULL, "__gnu__", "" }, + + { NULL, NULL, NULL }, +}; + +/*----------------------------------------. +| Find the builtin, which lives on ADDR. | +`----------------------------------------*/ + +const builtin * +find_builtin_by_addr (builtin_func *func) +{ + const builtin *bp; + + for (bp = &builtin_tab[0]; bp->name != NULL; bp++) + if (bp->func == func) + return bp; + if (func == m4_placeholder) + return bp + 1; + return NULL; +} + +/*----------------------------------------------------------. +| Find the builtin, which has NAME. On failure, return the | +| placeholder builtin. | +`----------------------------------------------------------*/ + +const builtin * +find_builtin_by_name (const char *name) +{ + const builtin *bp; + + for (bp = &builtin_tab[0]; bp->name != NULL; bp++) + if (strcmp (bp->name, name) == 0) + return bp; + return bp + 1; +} + +/*-------------------------------------------------------------------------. +| Install a builtin macro with name NAME, bound to the C function given in | +| BP. MODE is SYMBOL_INSERT or SYMBOL_PUSHDEF. TRACED defines whether | +| NAME is to be traced. | +`-------------------------------------------------------------------------*/ + +void +define_builtin (const char *name, const builtin *bp, symbol_lookup mode) +{ + symbol *sym; + + sym = lookup_symbol (name, mode); + SYMBOL_TYPE (sym) = TOKEN_FUNC; + SYMBOL_MACRO_ARGS (sym) = bp->groks_macro_args; + SYMBOL_BLIND_NO_ARGS (sym) = bp->blind_if_no_args; + SYMBOL_FUNC (sym) = bp->func; +} + +/* Storage for the compiled regular expression of + --warn-macro-sequence. */ +static struct re_pattern_buffer macro_sequence_buf; + +/* Storage for the matches of --warn-macro-sequence. */ +static struct re_registers macro_sequence_regs; + +/* True if --warn-macro-sequence is in effect. */ +static bool macro_sequence_inuse; + +/*----------------------------------------. +| Clean up regular expression variables. | +`----------------------------------------*/ + +static void +free_pattern_buffer (struct re_pattern_buffer *buf, struct re_registers *regs) +{ + regfree (buf); + free (regs->start); + free (regs->end); +} + +/*-----------------------------------------------------------------. +| Set the regular expression of --warn-macro-sequence that will be | +| checked during define and pushdef. Exit on failure. | +`-----------------------------------------------------------------*/ +void +set_macro_sequence (const char *regexp) +{ + const char *msg; + + if (! regexp) + regexp = DEFAULT_MACRO_SEQUENCE; + else if (regexp[0] == '\0') + { + macro_sequence_inuse = false; + return; + } + + msg = re_compile_pattern (regexp, strlen (regexp), ¯o_sequence_buf); + if (msg != NULL) + { + M4ERROR ((EXIT_FAILURE, 0, + "--warn-macro-sequence: bad regular expression `%s': %s", + regexp, msg)); + } + re_set_registers (¯o_sequence_buf, ¯o_sequence_regs, + macro_sequence_regs.num_regs, + macro_sequence_regs.start, macro_sequence_regs.end); + macro_sequence_inuse = true; +} + +/*------------------------------------------------------------. +| Free dynamic memory utilized by the define sequence regular | +| expression. | +`------------------------------------------------------------*/ +void +free_macro_sequence (void) +{ + free_pattern_buffer (¯o_sequence_buf, ¯o_sequence_regs); +} + +/*-------------------------------------------------------------------------. +| Define a predefined or user-defined macro, with name NAME, and expansion | +| TEXT. MODE destinguishes between the "define" and the "pushdef" case. | +| It is also used from main (). | +`-------------------------------------------------------------------------*/ + +void +define_user_macro (const char *name, const char *text, symbol_lookup mode) +{ + symbol *s; + char *defn = xstrdup (text ? text : ""); + + s = lookup_symbol (name, mode); + if (SYMBOL_TYPE (s) == TOKEN_TEXT) + free (SYMBOL_TEXT (s)); + + SYMBOL_TYPE (s) = TOKEN_TEXT; + SYMBOL_TEXT (s) = defn; + + /* Implement --warn-macro-sequence. */ + if (macro_sequence_inuse && text) + { + regoff_t offset = 0; + size_t len = strlen (defn); + + while ((offset = re_search (¯o_sequence_buf, defn, len, offset, + len - offset, ¯o_sequence_regs)) >= 0) + { + /* Skip empty matches. */ + if (macro_sequence_regs.start[0] == macro_sequence_regs.end[0]) + offset++; + else + { + char tmp; + offset = macro_sequence_regs.end[0]; + tmp = defn[offset]; + defn[offset] = '\0'; + M4ERROR ((warning_status, 0, + "Warning: definition of `%s' contains sequence `%s'", + name, defn + macro_sequence_regs.start[0])); + defn[offset] = tmp; + } + } + if (offset == -2) + M4ERROR ((warning_status, 0, + "error checking --warn-macro-sequence for macro `%s'", + name)); + } +} + +/*-----------------------------------------------. +| Initialize all builtin and predefined macros. | +`-----------------------------------------------*/ + +void +builtin_init (void) +{ + const builtin *bp; + const predefined *pp; + char *string; + + for (bp = &builtin_tab[0]; bp->name != NULL; bp++) + if (!no_gnu_extensions || !bp->gnu_extension) + { + if (prefix_all_builtins) + { + string = (char *) xmalloc (strlen (bp->name) + 4); + strcpy (string, "m4_"); + strcat (string, bp->name); + define_builtin (string, bp, SYMBOL_INSERT); + free (string); + } + else + define_builtin (bp->name, bp, SYMBOL_INSERT); + } + + for (pp = &predefined_tab[0]; pp->func != NULL; pp++) + if (no_gnu_extensions) + { + if (pp->unix_name != NULL) + define_user_macro (pp->unix_name, pp->func, SYMBOL_INSERT); + } + else + { + if (pp->gnu_name != NULL) + define_user_macro (pp->gnu_name, pp->func, SYMBOL_INSERT); + } +} + +/*------------------------------------------------------------------------. +| Give friendly warnings if a builtin macro is passed an inappropriate | +| number of arguments. NAME is macro name for messages, ARGC is actual | +| number of arguments, MIN is the minimum number of acceptable arguments, | +| negative if not applicable, MAX is the maximum number, negative if not | +| applicable. | +`------------------------------------------------------------------------*/ + +static bool +bad_argc (token_data *name, int argc, int min, int max) +{ + bool isbad = false; + + if (min > 0 && argc < min) + { + if (!suppress_warnings) + M4ERROR ((warning_status, 0, + "Warning: too few arguments to builtin `%s'", + TOKEN_DATA_TEXT (name))); + isbad = true; + } + else if (max > 0 && argc > max && !suppress_warnings) + M4ERROR ((warning_status, 0, + "Warning: excess arguments to builtin `%s' ignored", + TOKEN_DATA_TEXT (name))); + + return isbad; +} + +/*--------------------------------------------------------------------------. +| The function numeric_arg () converts ARG to an int pointed to by VALUEP. | +| If the conversion fails, print error message for macro MACRO. Return | +| true iff conversion succeeds. | +`--------------------------------------------------------------------------*/ + +static bool +numeric_arg (token_data *macro, const char *arg, int *valuep) +{ + char *endp; + + if (*arg == '\0') + { + *valuep = 0; + M4ERROR ((warning_status, 0, + "empty string treated as 0 in builtin `%s'", + TOKEN_DATA_TEXT (macro))); + } + else + { + errno = 0; + *valuep = strtol (arg, &endp, 10); + if (*endp != '\0') + { + M4ERROR ((warning_status, 0, + "non-numeric argument to builtin `%s'", + TOKEN_DATA_TEXT (macro))); + return false; + } + if (isspace (to_uchar (*arg))) + M4ERROR ((warning_status, 0, + "leading whitespace ignored in builtin `%s'", + TOKEN_DATA_TEXT (macro))); + else if (errno == ERANGE) + M4ERROR ((warning_status, 0, + "numeric overflow detected in builtin `%s'", + TOKEN_DATA_TEXT (macro))); + } + return true; +} + +/*------------------------------------------------------------------------. +| The function ntoa () converts VALUE to a signed ASCII representation in | +| radix RADIX. | +`------------------------------------------------------------------------*/ + +/* Digits for number to ASCII conversions. */ +static char const digits[] = "0123456789abcdefghijklmnopqrstuvwxyz"; + +const char * +ntoa (int32_t value, int radix) +{ + bool negative; + uint32_t uvalue; + static char str[256]; + char *s = &str[sizeof str]; + + *--s = '\0'; + + if (value < 0) + { + negative = true; + uvalue = -(uint32_t) value; + } + else + { + negative = false; + uvalue = (uint32_t) value; + } + + do + { + *--s = digits[uvalue % radix]; + uvalue /= radix; + } + while (uvalue > 0); + + if (negative) + *--s = '-'; + return s; +} + +/*----------------------------------------------------------------------. +| Format an int VAL, and stuff it into an obstack OBS. Used for macros | +| expanding to numbers. | +`----------------------------------------------------------------------*/ + +static void +shipout_int (struct obstack *obs, int val) +{ + const char *s; + + s = ntoa ((int32_t) val, 10); + obstack_grow (obs, s, strlen (s)); +} + +/*----------------------------------------------------------------------. +| Print ARGC arguments from the table ARGV to obstack OBS, separated by | +| SEP, and quoted by the current quotes, if QUOTED is true. | +`----------------------------------------------------------------------*/ + +static void +dump_args (struct obstack *obs, int argc, token_data **argv, + const char *sep, bool quoted) +{ + int i; + size_t len = strlen (sep); + + for (i = 1; i < argc; i++) + { + if (i > 1) + obstack_grow (obs, sep, len); + if (quoted) + obstack_grow (obs, lquote.string, lquote.length); + obstack_grow (obs, TOKEN_DATA_TEXT (argv[i]), + strlen (TOKEN_DATA_TEXT (argv[i]))); + if (quoted) + obstack_grow (obs, rquote.string, rquote.length); + } +} + +/* The rest of this file is code for builtins and expansion of user + defined macros. All the functions for builtins have a prototype as: + + void m4_MACRONAME (struct obstack *obs, int argc, char *argv[]); + + The function are expected to leave their expansion on the obstack OBS, + as an unfinished object. ARGV is a table of ARGC pointers to the + individual arguments to the macro. Please note that in general + argv[argc] != NULL. */ + +/* The first section are macros for definining, undefining, examining, + changing, ... other macros. */ + +/*-------------------------------------------------------------------------. +| The function define_macro is common for the builtins "define", | +| "undefine", "pushdef" and "popdef". ARGC and ARGV is as for the caller, | +| and MODE argument determines how the macro name is entered into the | +| symbol table. | +`-------------------------------------------------------------------------*/ + +static void +define_macro (int argc, token_data **argv, symbol_lookup mode) +{ + const builtin *bp; + + if (bad_argc (argv[0], argc, 2, 3)) + return; + + if (TOKEN_DATA_TYPE (argv[1]) != TOKEN_TEXT) + { + M4ERROR ((warning_status, 0, + "Warning: %s: invalid macro name ignored", ARG (0))); + return; + } + + if (argc == 2) + { + define_user_macro (ARG (1), "", mode); + return; + } + + switch (TOKEN_DATA_TYPE (argv[2])) + { + case TOKEN_TEXT: + define_user_macro (ARG (1), ARG (2), mode); + break; + + case TOKEN_FUNC: + bp = find_builtin_by_addr (TOKEN_DATA_FUNC (argv[2])); + if (bp == NULL) + return; + else + define_builtin (ARG (1), bp, mode); + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad token data type in define_macro ()")); + abort (); + } +} + +static void +m4_define (struct obstack *obs, int argc, token_data **argv) +{ + define_macro (argc, argv, SYMBOL_INSERT); +} + +static void +m4_undefine (struct obstack *obs, int argc, token_data **argv) +{ + int i; + if (bad_argc (argv[0], argc, 2, -1)) + return; + for (i = 1; i < argc; i++) + lookup_symbol (ARG (i), SYMBOL_DELETE); +} + +static void +m4_pushdef (struct obstack *obs, int argc, token_data **argv) +{ + define_macro (argc, argv, SYMBOL_PUSHDEF); +} + +static void +m4_popdef (struct obstack *obs, int argc, token_data **argv) +{ + int i; + if (bad_argc (argv[0], argc, 2, -1)) + return; + for (i = 1; i < argc; i++) + lookup_symbol (ARG (i), SYMBOL_POPDEF); +} + +/*---------------------. +| Conditionals of m4. | +`---------------------*/ + +static void +m4_ifdef (struct obstack *obs, int argc, token_data **argv) +{ + symbol *s; + const char *result; + + if (bad_argc (argv[0], argc, 3, 4)) + return; + s = lookup_symbol (ARG (1), SYMBOL_LOOKUP); + + if (s != NULL && SYMBOL_TYPE (s) != TOKEN_VOID) + result = ARG (2); + else if (argc >= 4) + result = ARG (3); + else + result = NULL; + + if (result != NULL) + obstack_grow (obs, result, strlen (result)); +} + +static void +m4_ifelse (struct obstack *obs, int argc, token_data **argv) +{ + const char *result; + token_data *me = argv[0]; + + if (argc == 2) + return; + + if (bad_argc (me, argc, 4, -1)) + return; + else + /* Diagnose excess arguments if 5, 8, 11, etc., actual arguments. */ + bad_argc (me, (argc + 2) % 3, -1, 1); + + argv++; + argc--; + + result = NULL; + while (result == NULL) + + if (strcmp (ARG (0), ARG (1)) == 0) + result = ARG (2); + + else + switch (argc) + { + case 3: + return; + + case 4: + case 5: + result = ARG (3); + break; + + default: + argc -= 3; + argv += 3; + } + + obstack_grow (obs, result, strlen (result)); +} + +/*---------------------------------------------------------------------. +| The function dump_symbol () is for use by "dumpdef". It builds up a | +| table of all defined, un-shadowed, symbols. | +`---------------------------------------------------------------------*/ + +/* The structure dump_symbol_data is used to pass the information needed + from call to call to dump_symbol. */ + +struct dump_symbol_data +{ + struct obstack *obs; /* obstack for table */ + symbol **base; /* base of table */ + int size; /* size of table */ +}; + +static void +dump_symbol (symbol *sym, void *arg) +{ + struct dump_symbol_data *data = (struct dump_symbol_data *) arg; + if (!SYMBOL_SHADOWED (sym) && SYMBOL_TYPE (sym) != TOKEN_VOID) + { + obstack_blank (data->obs, sizeof (symbol *)); + data->base = (symbol **) obstack_base (data->obs); + data->base[data->size++] = sym; + } +} + +/*------------------------------------------------------------------------. +| qsort comparison routine, for sorting the table made in m4_dumpdef (). | +`------------------------------------------------------------------------*/ + +static int +dumpdef_cmp (const void *s1, const void *s2) +{ + return strcmp (SYMBOL_NAME (* (symbol *const *) s1), + SYMBOL_NAME (* (symbol *const *) s2)); +} + +/*-------------------------------------------------------------------------. +| Implementation of "dumpdef" itself. It builds up a table of pointers to | +| symbols, sorts it and prints the sorted table. | +`-------------------------------------------------------------------------*/ + +static void +m4_dumpdef (struct obstack *obs, int argc, token_data **argv) +{ + symbol *s; + int i; + struct dump_symbol_data data; + const builtin *bp; + + data.obs = obs; + data.base = (symbol **) obstack_base (obs); + data.size = 0; + + if (argc == 1) + { + hack_all_symbols (dump_symbol, &data); + } + else + { + for (i = 1; i < argc; i++) + { + s = lookup_symbol (TOKEN_DATA_TEXT (argv[i]), SYMBOL_LOOKUP); + if (s != NULL && SYMBOL_TYPE (s) != TOKEN_VOID) + dump_symbol (s, &data); + else + M4ERROR ((warning_status, 0, + "undefined macro `%s'", TOKEN_DATA_TEXT (argv[i]))); + } + } + + /* Make table of symbols invisible to expand_macro (). */ + + obstack_finish (obs); + + qsort (data.base, data.size, sizeof (symbol *), dumpdef_cmp); + + for (; data.size > 0; --data.size, data.base++) + { + DEBUG_PRINT1 ("%s:\t", SYMBOL_NAME (data.base[0])); + + switch (SYMBOL_TYPE (data.base[0])) + { + case TOKEN_TEXT: + if (debug_level & DEBUG_TRACE_QUOTE) + DEBUG_PRINT3 ("%s%s%s\n", + lquote.string, SYMBOL_TEXT (data.base[0]), rquote.string); + else + DEBUG_PRINT1 ("%s\n", SYMBOL_TEXT (data.base[0])); + break; + + case TOKEN_FUNC: + bp = find_builtin_by_addr (SYMBOL_FUNC (data.base[0])); + if (bp == NULL) + { + M4ERROR ((warning_status, 0, "\ +INTERNAL ERROR: builtin not found in builtin table")); + abort (); + } + DEBUG_PRINT1 ("<%s>\n", bp->name); + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad token data type in m4_dumpdef ()")); + abort (); + break; + } + } +} + +/*---------------------------------------------------------------------. +| The builtin "builtin" allows calls to builtin macros, even if their | +| definition has been overridden or shadowed. It is thus possible to | +| redefine builtins, and still access their original definition. This | +| macro is not available in compatibility mode. | +`---------------------------------------------------------------------*/ + +static void +m4_builtin (struct obstack *obs, int argc, token_data **argv) +{ + const builtin *bp; + const char *name; + + if (bad_argc (argv[0], argc, 2, -1)) + return; + if (TOKEN_DATA_TYPE (argv[1]) != TOKEN_TEXT) + { + M4ERROR ((warning_status, 0, + "Warning: %s: invalid macro name ignored", ARG (0))); + return; + } + + name = ARG (1); + bp = find_builtin_by_name (name); + if (bp->func == m4_placeholder) + M4ERROR ((warning_status, 0, + "undefined builtin `%s'", name)); + else + { + int i; + if (! bp->groks_macro_args) + for (i = 2; i < argc; i++) + if (TOKEN_DATA_TYPE (argv[i]) != TOKEN_TEXT) + { + TOKEN_DATA_TYPE (argv[i]) = TOKEN_TEXT; + TOKEN_DATA_TEXT (argv[i]) = (char *) ""; + } + bp->func (obs, argc - 1, argv + 1); + } +} + +/*------------------------------------------------------------------------. +| The builtin "indir" allows indirect calls to macros, even if their name | +| is not a proper macro name. It is thus possible to define macros with | +| ill-formed names for internal use in larger macro packages. This macro | +| is not available in compatibility mode. | +`------------------------------------------------------------------------*/ + +static void +m4_indir (struct obstack *obs, int argc, token_data **argv) +{ + symbol *s; + const char *name; + + if (bad_argc (argv[0], argc, 2, -1)) + return; + if (TOKEN_DATA_TYPE (argv[1]) != TOKEN_TEXT) + { + M4ERROR ((warning_status, 0, + "Warning: %s: invalid macro name ignored", ARG (0))); + return; + } + + name = ARG (1); + s = lookup_symbol (name, SYMBOL_LOOKUP); + if (s == NULL || SYMBOL_TYPE (s) == TOKEN_VOID) + M4ERROR ((warning_status, 0, + "undefined macro `%s'", name)); + else + { + int i; + if (! SYMBOL_MACRO_ARGS (s)) + for (i = 2; i < argc; i++) + if (TOKEN_DATA_TYPE (argv[i]) != TOKEN_TEXT) + { + TOKEN_DATA_TYPE (argv[i]) = TOKEN_TEXT; + TOKEN_DATA_TEXT (argv[i]) = (char *) ""; + } + call_macro (s, argc - 1, argv + 1, obs); + } +} + +/*-------------------------------------------------------------------------. +| The macro "defn" returns the quoted definition of the macro named by the | +| first argument. If the macro is builtin, it will push a special | +| macro-definition token on the input stack. | +`-------------------------------------------------------------------------*/ + +static void +m4_defn (struct obstack *obs, int argc, token_data **argv) +{ + symbol *s; + builtin_func *b; + int i; + + if (bad_argc (argv[0], argc, 2, -1)) + return; + + for (i = 1; i < argc; i++) + { + s = lookup_symbol (ARG (i), SYMBOL_LOOKUP); + if (s == NULL) + continue; + + switch (SYMBOL_TYPE (s)) + { + case TOKEN_TEXT: + obstack_grow (obs, lquote.string, lquote.length); + obstack_grow (obs, SYMBOL_TEXT (s), strlen (SYMBOL_TEXT (s))); + obstack_grow (obs, rquote.string, rquote.length); + break; + + case TOKEN_FUNC: + b = SYMBOL_FUNC (s); + if (b == m4_placeholder) + M4ERROR ((warning_status, 0, "\ +builtin `%s' requested by frozen file is not supported", ARG (i))); + else if (argc != 2) + M4ERROR ((warning_status, 0, + "Warning: cannot concatenate builtin `%s'", + ARG (i))); + else + push_macro (b); + break; + + case TOKEN_VOID: + /* Nothing to do for traced but undefined macro. */ + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad symbol type in m4_defn ()")); + abort (); + } + } +} + +/*------------------------------------------------------------------------. +| This section contains macros to handle the builtins "syscmd", "esyscmd" | +| and "sysval". "esyscmd" is GNU specific. | +`------------------------------------------------------------------------*/ + +/* Exit code from last "syscmd" command. */ +static int sysval; + +static void +m4_syscmd (struct obstack *obs, int argc, token_data **argv) +{ + const char *cmd = ARG (1); + int status; + int sig_status; + const char *prog_args[4] = { "sh", "-c" }; + if (bad_argc (argv[0], argc, 2, 2) || !*cmd) + { + /* The empty command is successful. */ + sysval = 0; + return; + } + + debug_flush_files (); +#if W32_NATIVE + if (strstr (SYSCMD_SHELL, "cmd")) + { + prog_args[0] = "cmd"; + prog_args[1] = "/c"; + } +#endif + prog_args[2] = cmd; + errno = 0; + status = execute (ARG (0), SYSCMD_SHELL, (char **) prog_args, false, + false, false, false, true, false, &sig_status); + if (sig_status) + { + assert (status == 127); + sysval = sig_status << 8; + } + else + { + if (status == 127 && errno) + M4ERROR ((warning_status, errno, "cannot run command `%s'", cmd)); + sysval = status; + } +} + +static void +m4_esyscmd (struct obstack *obs, int argc, token_data **argv) +{ + const char *cmd = ARG (1); + const char *prog_args[4] = { "sh", "-c" }; + pid_t child; + int fd; + FILE *pin; + int status; + int sig_status; + + if (bad_argc (argv[0], argc, 2, 2) || !*cmd) + { + /* The empty command is successful. */ + sysval = 0; + return; + } + + debug_flush_files (); +#if W32_NATIVE + if (strstr (SYSCMD_SHELL, "cmd")) + { + prog_args[0] = "cmd"; + prog_args[1] = "/c"; + } +#endif + prog_args[2] = cmd; + errno = 0; + child = create_pipe_in (ARG (0), SYSCMD_SHELL, (char **) prog_args, + NULL, false, true, false, &fd); + if (child == -1) + { + M4ERROR ((warning_status, errno, "cannot run command `%s'", cmd)); + sysval = 127; + return; + } + pin = fdopen (fd, "r"); + if (pin == NULL) + { + M4ERROR ((warning_status, errno, "cannot run command `%s'", cmd)); + sysval = 127; + close (fd); + return; + } + while (1) + { + size_t avail = obstack_room (obs); + size_t len; + if (!avail) + { + int ch = getc (pin); + if (ch == EOF) + break; + obstack_1grow (obs, ch); + continue; + } + len = fread (obstack_next_free (obs), 1, avail, pin); + if (len <= 0) + break; + obstack_blank_fast (obs, len); + } + if (ferror (pin) || fclose (pin)) + M4ERROR ((EXIT_FAILURE, errno, "cannot read pipe")); + status = wait_subprocess (child, ARG (0), false, false, true, false, + &sig_status); + if (sig_status) + { + assert (status == 127); + sysval = sig_status << 8; + } + else + { + if (status == 127 && errno) + M4ERROR ((warning_status, errno, "cannot run command `%s'", cmd)); + sysval = status; + } +} + +static void +m4_sysval (struct obstack *obs, int argc, token_data **argv) +{ + shipout_int (obs, sysval); +} + +/*-------------------------------------------------------------------------. +| This section contains the top level code for the "eval" builtin. The | +| actual work is done in the function evaluate (), which lives in eval.c. | +`-------------------------------------------------------------------------*/ + +static void +m4_eval (struct obstack *obs, int argc, token_data **argv) +{ + int32_t value = 0; + int radix = 10; + int min = 1; + const char *s; + + if (bad_argc (argv[0], argc, 2, 4)) + return; + + if (*ARG (2) && !numeric_arg (argv[0], ARG (2), &radix)) + return; + + if (radix < 1 || radix > (int) strlen (digits)) + { + M4ERROR ((warning_status, 0, + "radix %d in builtin `%s' out of range", + radix, ARG (0))); + return; + } + + if (argc >= 4 && !numeric_arg (argv[0], ARG (3), &min)) + return; + if (min < 0) + { + M4ERROR ((warning_status, 0, + "negative width to builtin `%s'", ARG (0))); + return; + } + + if (!*ARG (1)) + M4ERROR ((warning_status, 0, + "empty string treated as 0 in builtin `%s'", ARG (0))); + else if (evaluate (ARG (1), &value)) + return; + + if (radix == 1) + { + if (value < 0) + { + obstack_1grow (obs, '-'); + value = -value; + } + /* This assumes 2's-complement for correctly handling INT_MIN. */ + while (min-- - value > 0) + obstack_1grow (obs, '0'); + while (value-- != 0) + obstack_1grow (obs, '1'); + obstack_1grow (obs, '\0'); + return; + } + + s = ntoa (value, radix); + + if (*s == '-') + { + obstack_1grow (obs, '-'); + s++; + } + for (min -= strlen (s); --min >= 0;) + obstack_1grow (obs, '0'); + + obstack_grow (obs, s, strlen (s)); +} + +static void +m4_incr (struct obstack *obs, int argc, token_data **argv) +{ + int value; + + if (bad_argc (argv[0], argc, 2, 2)) + return; + + if (!numeric_arg (argv[0], ARG (1), &value)) + return; + + shipout_int (obs, value + 1); +} + +static void +m4_decr (struct obstack *obs, int argc, token_data **argv) +{ + int value; + + if (bad_argc (argv[0], argc, 2, 2)) + return; + + if (!numeric_arg (argv[0], ARG (1), &value)) + return; + + shipout_int (obs, value - 1); +} + +/* This section contains the macros "divert", "undivert" and "divnum" for + handling diversion. The utility functions used lives in output.c. */ + +/*-----------------------------------------------------------------------. +| Divert further output to the diversion given by ARGV[1]. Out of range | +| means discard further output. | +`-----------------------------------------------------------------------*/ + +static void +m4_divert (struct obstack *obs, int argc, token_data **argv) +{ + int i = 0; + + if (bad_argc (argv[0], argc, 1, 2)) + return; + + if (argc >= 2 && !numeric_arg (argv[0], ARG (1), &i)) + return; + + make_diversion (i); +} + +/*-----------------------------------------------------. +| Expand to the current diversion number, -1 if none. | +`-----------------------------------------------------*/ + +static void +m4_divnum (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 1, 1)) + return; + shipout_int (obs, current_diversion); +} + +/*-----------------------------------------------------------------------. +| Bring back the diversion given by the argument list. If none is | +| specified, bring back all diversions. GNU specific is the option of | +| undiverting named files, by passing a non-numeric argument to undivert | +| (). | +`-----------------------------------------------------------------------*/ + +static void +m4_undivert (struct obstack *obs, int argc, token_data **argv) +{ + int i, file; + FILE *fp; + char *endp; + + if (argc == 1) + undivert_all (); + else + for (i = 1; i < argc; i++) + { + file = strtol (ARG (i), &endp, 10); + if (*endp == '\0' && !isspace (to_uchar (*ARG (i)))) + insert_diversion (file); + else if (no_gnu_extensions) + M4ERROR ((warning_status, 0, + "non-numeric argument to builtin `%s'", ARG (0))); + else + { + fp = m4_path_search (ARG (i), NULL); + if (fp != NULL) + { + insert_file (fp); + if (fclose (fp) == EOF) + M4ERROR ((warning_status, errno, + "error undiverting `%s'", ARG (i))); + } + else + M4ERROR ((warning_status, errno, + "cannot undivert `%s'", ARG (i))); + } + } +} + +/* This section contains various macros, which does not fall into any + specific group. These are "dnl", "shift", "changequote", "changecom" + and "changeword". */ + +/*------------------------------------------------------------------------. +| Delete all subsequent whitespace from input. The function skip_line () | +| lives in input.c. | +`------------------------------------------------------------------------*/ + +static void +m4_dnl (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 1, 1)) + return; + + skip_line (); +} + +/*-------------------------------------------------------------------------. +| Shift all argument one to the left, discarding the first argument. Each | +| output argument is quoted with the current quotes. | +`-------------------------------------------------------------------------*/ + +static void +m4_shift (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 2, -1)) + return; + dump_args (obs, argc - 1, argv + 1, ",", true); +} + +/*--------------------------------------------------------------------------. +| Change the current quotes. The function set_quotes () lives in input.c. | +`--------------------------------------------------------------------------*/ + +static void +m4_changequote (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 1, 3)) + return; + + /* Explicit NULL distinguishes between empty and missing argument. */ + set_quotes ((argc >= 2) ? TOKEN_DATA_TEXT (argv[1]) : NULL, + (argc >= 3) ? TOKEN_DATA_TEXT (argv[2]) : NULL); +} + +/*--------------------------------------------------------------------. +| Change the current comment delimiters. The function set_comment () | +| lives in input.c. | +`--------------------------------------------------------------------*/ + +static void +m4_changecom (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 1, 3)) + return; + + /* Explicit NULL distinguishes between empty and missing argument. */ + set_comment ((argc >= 2) ? TOKEN_DATA_TEXT (argv[1]) : NULL, + (argc >= 3) ? TOKEN_DATA_TEXT (argv[2]) : NULL); +} + +#ifdef ENABLE_CHANGEWORD + +/*-----------------------------------------------------------------------. +| Change the regular expression used for breaking the input into words. | +| The function set_word_regexp () lives in input.c. | +`-----------------------------------------------------------------------*/ + +static void +m4_changeword (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 2, 2)) + return; + + set_word_regexp (TOKEN_DATA_TEXT (argv[1])); +} + +#endif /* ENABLE_CHANGEWORD */ + +/* This section contains macros for inclusion of other files -- "include" + and "sinclude". This differs from bringing back diversions, in that + the input is scanned before being copied to the output. */ + +/*-------------------------------------------------------------------------. +| Generic include function. Include the file given by the first argument, | +| if it exists. Complain about inaccessible files iff SILENT is false. | +`-------------------------------------------------------------------------*/ + +static void +include (int argc, token_data **argv, bool silent) +{ + FILE *fp; + char *name; + + if (bad_argc (argv[0], argc, 2, 2)) + return; + + fp = m4_path_search (ARG (1), &name); + if (fp == NULL) + { + if (!silent) + { + M4ERROR ((warning_status, errno, "cannot open `%s'", ARG (1))); + retcode = EXIT_FAILURE; + } + return; + } + + push_file (fp, name, true); + free (name); +} + +/*------------------------------------------------. +| Include a file, complaining in case of errors. | +`------------------------------------------------*/ + +static void +m4_include (struct obstack *obs, int argc, token_data **argv) +{ + include (argc, argv, false); +} + +/*----------------------------------. +| Include a file, ignoring errors. | +`----------------------------------*/ + +static void +m4_sinclude (struct obstack *obs, int argc, token_data **argv) +{ + include (argc, argv, true); +} + +/* More miscellaneous builtins -- "maketemp", "errprint", "__file__", + "__line__", and "__program__". The last three are GNU specific. */ + +/*------------------------------------------------------------------. +| Use the first argument as at template for a temporary file name. | +`------------------------------------------------------------------*/ + +/* Add trailing 'X' to PATTERN of length LEN as necessary, then + securely create the file, and place the quoted new file name on + OBS. Report errors on behalf of ME. */ +static void +mkstemp_helper (struct obstack *obs, const char *me, const char *pattern, + size_t len) +{ + int fd; + int i; + char *name; + + /* Guarantee that there are six trailing 'X' characters, even if the + user forgot to supply them. Output must be quoted if + successful. */ + obstack_grow (obs, lquote.string, lquote.length); + obstack_grow (obs, pattern, len); + for (i = 0; len > 0 && i < 6; i++) + if (pattern[len - i - 1] != 'X') + break; + obstack_grow0 (obs, "XXXXXX", 6 - i); + name = (char *) obstack_base (obs) + lquote.length; + + errno = 0; + fd = mkstemp (name); + if (fd < 0) + { + M4ERROR ((0, errno, "cannot create tempfile `%s'", pattern)); + obstack_free (obs, obstack_finish (obs)); + } + else + { + close (fd); + /* Remove NUL, then finish quote. */ + obstack_blank (obs, -1); + obstack_grow (obs, rquote.string, rquote.length); + } +} + +static void +m4_maketemp (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 2, 2)) + return; + if (no_gnu_extensions) + { + /* POSIX states "any trailing 'X' characters [are] replaced with + the current process ID as a string", without referencing the + file system. Horribly insecure, but we have to do it when we + are in traditional mode. + + For reference, Solaris m4 does: + maketemp() -> `' + maketemp(X) -> `X' + maketemp(XX) -> `Xn', where n is last digit of pid + maketemp(XXXXXXXX) -> `X00nnnnn', where nnnnn is 16-bit pid + */ + const char *str = ARG (1); + int len = strlen (str); + int i; + int len2; + + M4ERROR ((warning_status, 0, "recommend using mkstemp instead")); + for (i = len; i > 1; i--) + if (str[i - 1] != 'X') + break; + obstack_grow (obs, str, i); + str = ntoa ((int32_t) getpid (), 10); + len2 = strlen (str); + if (len2 > len - i) + obstack_grow0 (obs, str + len2 - (len - i), len - i); + else + { + while (i++ < len - len2) + obstack_1grow (obs, '0'); + obstack_grow0 (obs, str, len2); + } + } + else + mkstemp_helper (obs, ARG (0), ARG (1), strlen (ARG (1))); +} + +static void +m4_mkstemp (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 2, 2)) + return; + mkstemp_helper (obs, ARG (0), ARG (1), strlen (ARG (1))); +} + +/*----------------------------------------. +| Print all arguments on standard error. | +`----------------------------------------*/ + +static void +m4_errprint (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 2, -1)) + return; + dump_args (obs, argc, argv, " ", false); + obstack_1grow (obs, '\0'); + debug_flush_files (); + xfprintf (stderr, "%s", (char *) obstack_finish (obs)); + fflush (stderr); +} + +static void +m4___file__ (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 1, 1)) + return; + obstack_grow (obs, lquote.string, lquote.length); + obstack_grow (obs, current_file, strlen (current_file)); + obstack_grow (obs, rquote.string, rquote.length); +} + +static void +m4___line__ (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 1, 1)) + return; + shipout_int (obs, current_line); +} + +static void +m4___program__ (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 1, 1)) + return; + obstack_grow (obs, lquote.string, lquote.length); + obstack_grow (obs, program_name, strlen (program_name)); + obstack_grow (obs, rquote.string, rquote.length); +} + +/* This section contains various macros for exiting, saving input until + EOF is seen, and tracing macro calls. That is: "m4exit", "m4wrap", + "traceon" and "traceoff". */ + +/*-------------------------------------------------------------------------. +| Exit immediately, with exitcode specified by the first argument, 0 if no | +| arguments are present. | +`-------------------------------------------------------------------------*/ + +static void +m4_m4exit (struct obstack *obs, int argc, token_data **argv) +{ + int exit_code = EXIT_SUCCESS; + + /* Warn on bad arguments, but still exit. */ + bad_argc (argv[0], argc, 1, 2); + if (argc >= 2 && !numeric_arg (argv[0], ARG (1), &exit_code)) + exit_code = EXIT_FAILURE; + if (exit_code < 0 || exit_code > 255) + { + M4ERROR ((warning_status, 0, + "exit status out of range: `%d'", exit_code)); + exit_code = EXIT_FAILURE; + } + /* Change debug stream back to stderr, to force flushing debug stream and + detect any errors it might have encountered. */ + debug_set_output (NULL); + debug_flush_files (); + if (exit_code == EXIT_SUCCESS && retcode != EXIT_SUCCESS) + exit_code = retcode; + /* Propagate non-zero status to atexit handlers. */ + if (exit_code != EXIT_SUCCESS) + exit_failure = exit_code; + exit (exit_code); +} + +/*-------------------------------------------------------------------------. +| Save the argument text until EOF has been seen, allowing for user | +| specified cleanup action. GNU version saves all arguments, the standard | +| version only the first. | +`-------------------------------------------------------------------------*/ + +static void +m4_m4wrap (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 2, -1)) + return; + if (no_gnu_extensions) + obstack_grow (obs, ARG (1), strlen (ARG (1))); + else + dump_args (obs, argc, argv, " ", false); + obstack_1grow (obs, '\0'); + push_wrapup ((char *) obstack_finish (obs)); +} + +/* Enable tracing of all specified macros, or all, if none is specified. + Tracing is disabled by default, when a macro is defined. This can be + overridden by the "t" debug flag. */ + +/*-----------------------------------------------------------------------. +| Set_trace () is used by "traceon" and "traceoff" to enable and disable | +| tracing of a macro. It disables tracing if DATA is NULL, otherwise it | +| enable tracing. | +`-----------------------------------------------------------------------*/ + +static void +set_trace (symbol *sym, void *data) +{ + SYMBOL_TRACED (sym) = data != NULL; + /* Remove placeholder from table if macro is undefined and untraced. */ + if (SYMBOL_TYPE (sym) == TOKEN_VOID && data == NULL) + lookup_symbol (SYMBOL_NAME (sym), SYMBOL_POPDEF); +} + +static void +m4_traceon (struct obstack *obs, int argc, token_data **argv) +{ + symbol *s; + int i; + + if (argc == 1) + hack_all_symbols (set_trace, obs); + else + for (i = 1; i < argc; i++) + { + s = lookup_symbol (ARG (i), SYMBOL_LOOKUP); + if (!s) + s = lookup_symbol (ARG (i), SYMBOL_INSERT); + set_trace (s, obs); + } +} + +/*------------------------------------------------------------------------. +| Disable tracing of all specified macros, or all, if none is specified. | +`------------------------------------------------------------------------*/ + +static void +m4_traceoff (struct obstack *obs, int argc, token_data **argv) +{ + symbol *s; + int i; + + if (argc == 1) + hack_all_symbols (set_trace, NULL); + else + for (i = 1; i < argc; i++) + { + s = lookup_symbol (TOKEN_DATA_TEXT (argv[i]), SYMBOL_LOOKUP); + if (s != NULL) + set_trace (s, NULL); + } +} + +/*----------------------------------------------------------------------. +| On-the-fly control of the format of the tracing output. It takes one | +| argument, which is a character string like given to the -d option, or | +| none in which case the debug_level is zeroed. | +`----------------------------------------------------------------------*/ + +static void +m4_debugmode (struct obstack *obs, int argc, token_data **argv) +{ + int new_debug_level; + int change_flag; + + if (bad_argc (argv[0], argc, 1, 2)) + return; + + if (argc == 1) + debug_level = 0; + else + { + if (ARG (1)[0] == '+' || ARG (1)[0] == '-') + { + change_flag = ARG (1)[0]; + new_debug_level = debug_decode (ARG (1) + 1); + } + else + { + change_flag = 0; + new_debug_level = debug_decode (ARG (1)); + } + + if (new_debug_level < 0) + M4ERROR ((warning_status, 0, + "Debugmode: bad debug flags: `%s'", ARG (1))); + else + { + switch (change_flag) + { + case 0: + debug_level = new_debug_level; + break; + + case '+': + debug_level |= new_debug_level; + break; + + case '-': + debug_level &= ~new_debug_level; + break; + } + } + } +} + +/*-------------------------------------------------------------------------. +| Specify the destination of the debugging output. With one argument, the | +| argument is taken as a file name, with no arguments, revert to stderr. | +`-------------------------------------------------------------------------*/ + +static void +m4_debugfile (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 1, 2)) + return; + + if (argc == 1) + debug_set_output (NULL); + else if (!debug_set_output (ARG (1))) + M4ERROR ((warning_status, errno, + "cannot set debug file `%s'", ARG (1))); +} + +/* This section contains text processing macros: "len", "index", + "substr", "translit", "format", "regexp" and "patsubst". The last + three are GNU specific. */ + +/*---------------------------------------------. +| Expand to the length of the first argument. | +`---------------------------------------------*/ + +static void +m4_len (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 2, 2)) + return; + shipout_int (obs, strlen (ARG (1))); +} + +/*-------------------------------------------------------------------------. +| The macro expands to the first index of the second argument in the first | +| argument. | +`-------------------------------------------------------------------------*/ + +static void +m4_index (struct obstack *obs, int argc, token_data **argv) +{ + const char *haystack; + const char *result; + int retval; + + if (bad_argc (argv[0], argc, 3, 3)) + { + /* builtin(`index') is blank, but index(`abc') is 0. */ + if (argc == 2) + shipout_int (obs, 0); + return; + } + + haystack = ARG (1); + result = strstr (haystack, ARG (2)); + retval = result ? result - haystack : -1; + + shipout_int (obs, retval); +} + +/*-------------------------------------------------------------------------. +| The macro "substr" extracts substrings from the first argument, starting | +| from the index given by the second argument, extending for a length | +| given by the third argument. If the third argument is missing, the | +| substring extends to the end of the first argument. | +`-------------------------------------------------------------------------*/ + +static void +m4_substr (struct obstack *obs, int argc, token_data **argv) +{ + int start = 0; + int length, avail; + + if (bad_argc (argv[0], argc, 3, 4)) + { + /* builtin(`substr') is blank, but substr(`abc') is abc. */ + if (argc == 2) + obstack_grow (obs, ARG (1), strlen (ARG (1))); + return; + } + + length = avail = strlen (ARG (1)); + if (!numeric_arg (argv[0], ARG (2), &start)) + return; + + if (argc >= 4 && !numeric_arg (argv[0], ARG (3), &length)) + return; + + if (start < 0 || length <= 0 || start >= avail) + return; + + if (start + length > avail) + length = avail - start; + obstack_grow (obs, ARG (1) + start, length); +} + +/*------------------------------------------------------------------------. +| For "translit", ranges are allowed in the second and third argument. | +| They are expanded in the following function, and the expanded strings, | +| without any ranges left, are used to translate the characters of the | +| first argument. A single - (dash) can be included in the strings by | +| being the first or the last character in the string. If the first | +| character in a range is after the first in the character set, the range | +| is made backwards, thus 9-0 is the string 9876543210. | +`------------------------------------------------------------------------*/ + +static const char * +expand_ranges (const char *s, struct obstack *obs) +{ + unsigned char from; + unsigned char to; + + for (from = '\0'; *s != '\0'; from = to_uchar (*s++)) + { + if (*s == '-' && from != '\0') + { + to = to_uchar (*++s); + if (to == '\0') + { + /* trailing dash */ + obstack_1grow (obs, '-'); + break; + } + else if (from <= to) + { + while (from++ < to) + obstack_1grow (obs, from); + } + else + { + while (--from >= to) + obstack_1grow (obs, from); + } + } + else + obstack_1grow (obs, *s); + } + obstack_1grow (obs, '\0'); + return (char *) obstack_finish (obs); +} + +/*----------------------------------------------------------------------. +| The macro "translit" translates all characters in the first argument, | +| which are present in the second argument, into the corresponding | +| character from the third argument. If the third argument is shorter | +| than the second, the extra characters in the second argument, are | +| deleted from the first (pueh). | +`----------------------------------------------------------------------*/ + +static void +m4_translit (struct obstack *obs, int argc, token_data **argv) +{ + const char *data = ARG (1); + const char *from = ARG (2); + const char *to; + char map[UCHAR_MAX + 1]; + char found[UCHAR_MAX + 1]; + unsigned char ch; + + if (bad_argc (argv[0], argc, 3, 4) || !*data || !*from) + { + /* builtin(`translit') is blank, but translit(`abc') is abc. */ + if (2 <= argc) + obstack_grow (obs, data, strlen (data)); + return; + } + + to = ARG (3); + if (strchr (to, '-') != NULL) + { + to = expand_ranges (to, obs); + assert (to && *to); + } + + /* If there are only one or two bytes to replace, it is faster to + use memchr2. Using expand_ranges does nothing unless there are + at least three bytes. */ + if (!from[1] || !from[2]) + { + const char *p; + size_t len = strlen (data); + while ((p = (char *) memchr2 (data, from[0], from[1], len))) + { + obstack_grow (obs, data, p - data); + len -= p - data; + if (!len) + return; + data = p + 1; + len--; + if (*p == from[0] && to[0]) + obstack_1grow (obs, to[0]); + else if (*p == from[1] && to[0] && to[1]) + obstack_1grow (obs, to[1]); + } + obstack_grow (obs, data, len); + return; + } + + if (strchr (from, '-') != NULL) + { + from = expand_ranges (from, obs); + assert (from && *from); + } + + /* Calling strchr(from) for each character in data is quadratic, + since both strings can be arbitrarily long. Instead, create a + from-to mapping in one pass of from, then use that map in one + pass of data, for linear behavior. Traditional behavior is that + only the first instance of a character in from is consulted, + hence the found map. */ + memset (map, 0, sizeof map); + memset (found, 0, sizeof found); + for ( ; (ch = *from) != '\0'; from++) + { + if (! found[ch]) + { + found[ch] = 1; + map[ch] = *to; + } + if (*to != '\0') + to++; + } + + for (data = ARG (1); (ch = *data) != '\0'; data++) + { + if (! found[ch]) + obstack_1grow (obs, ch); + else if (map[ch]) + obstack_1grow (obs, map[ch]); + } +} + +/*----------------------------------------------------------------------. +| Frontend for printf like formatting. The function format () lives in | +| the file format.c. | +`----------------------------------------------------------------------*/ + +static void +m4_format (struct obstack *obs, int argc, token_data **argv) +{ + if (bad_argc (argv[0], argc, 2, -1)) + return; + expand_format (obs, argc - 1, argv + 1); +} + +/*-------------------------------------------------------------------------. +| Function to perform substitution by regular expressions. Used by the | +| builtins regexp and patsubst. The changed text is placed on the | +| obstack. The substitution is REPL, with \& substituted by this part of | +| VICTIM matched by the last whole regular expression, taken from REGS[0], | +| and \N substituted by the text matched by the Nth parenthesized | +| sub-expression, taken from REGS[N]. | +`-------------------------------------------------------------------------*/ + +static int substitute_warned = 0; + +static void +substitute (struct obstack *obs, const char *victim, const char *repl, + struct re_registers *regs) +{ + int ch; + while (1) + { + const char *backslash = strchr (repl, '\\'); + if (!backslash) + { + obstack_grow (obs, repl, strlen (repl)); + return; + } + obstack_grow (obs, repl, backslash - repl); + repl = backslash; + ch = *++repl; + switch (ch) + { + case '0': + if (!substitute_warned) + { + M4ERROR ((warning_status, 0, "\ +Warning: \\0 will disappear, use \\& instead in replacements")); + substitute_warned = 1; + } + /* Fall through. */ + + case '&': + obstack_grow (obs, victim + regs->start[0], + regs->end[0] - regs->start[0]); + repl++; + break; + + case '1': case '2': case '3': case '4': case '5': case '6': + case '7': case '8': case '9': + ch -= '0'; + if (regs->num_regs - 1 <= ch) + M4ERROR ((warning_status, 0, + "Warning: sub-expression %d not present", ch)); + else if (regs->end[ch] > 0) + obstack_grow (obs, victim + regs->start[ch], + regs->end[ch] - regs->start[ch]); + repl++; + break; + + case '\0': + M4ERROR ((warning_status, 0, + "Warning: trailing \\ ignored in replacement")); + return; + + default: + obstack_1grow (obs, ch); + repl++; + break; + } + } +} + +/*------------------------------------------. +| Initialize regular expression variables. | +`------------------------------------------*/ + +void +init_pattern_buffer (struct re_pattern_buffer *buf, struct re_registers *regs) +{ + buf->translate = NULL; + buf->fastmap = NULL; + buf->buffer = NULL; + buf->allocated = 0; + if (regs) + { + regs->start = NULL; + regs->end = NULL; + } +} + +/*--------------------------------------------------------------------------. +| Regular expression version of index. Given two arguments, expand to the | +| index of the first match of the second argument (a regexp) in the first. | +| Expand to -1 if here is no match. Given a third argument, is changes | +| the expansion to this argument. | +`--------------------------------------------------------------------------*/ + +static void +m4_regexp (struct obstack *obs, int argc, token_data **argv) +{ + const char *victim; /* first argument */ + const char *regexp; /* regular expression */ + const char *repl; /* replacement string */ + + struct re_pattern_buffer buf; /* compiled regular expression */ + struct re_registers regs; /* for subexpression matches */ + const char *msg; /* error message from re_compile_pattern */ + int startpos; /* start position of match */ + int length; /* length of first argument */ + + if (bad_argc (argv[0], argc, 3, 4)) + { + /* builtin(`regexp') is blank, but regexp(`abc') is 0. */ + if (argc == 2) + shipout_int (obs, 0); + return; + } + + victim = TOKEN_DATA_TEXT (argv[1]); + regexp = TOKEN_DATA_TEXT (argv[2]); + + init_pattern_buffer (&buf, ®s); + msg = re_compile_pattern (regexp, strlen (regexp), &buf); + + if (msg != NULL) + { + M4ERROR ((warning_status, 0, + "bad regular expression: `%s': %s", regexp, msg)); + free_pattern_buffer (&buf, ®s); + return; + } + + length = strlen (victim); + /* Avoid overhead of allocating regs if we won't use it. */ + startpos = re_search (&buf, victim, length, 0, length, + argc == 3 ? NULL : ®s); + + if (startpos == -2) + M4ERROR ((warning_status, 0, + "error matching regular expression `%s'", regexp)); + else if (argc == 3) + shipout_int (obs, startpos); + else if (startpos >= 0) + { + repl = TOKEN_DATA_TEXT (argv[3]); + substitute (obs, victim, repl, ®s); + } + + free_pattern_buffer (&buf, ®s); +} + +/*--------------------------------------------------------------------------. +| Substitute all matches of a regexp occuring in a string. Each match of | +| the second argument (a regexp) in the first argument is changed to the | +| third argument, with \& substituted by the matched text, and \N | +| substituted by the text matched by the Nth parenthesized sub-expression. | +`--------------------------------------------------------------------------*/ + +static void +m4_patsubst (struct obstack *obs, int argc, token_data **argv) +{ + const char *victim; /* first argument */ + const char *regexp; /* regular expression */ + + struct re_pattern_buffer buf; /* compiled regular expression */ + struct re_registers regs; /* for subexpression matches */ + const char *msg; /* error message from re_compile_pattern */ + int matchpos; /* start position of match */ + int offset; /* current match offset */ + int length; /* length of first argument */ + + if (bad_argc (argv[0], argc, 3, 4)) + { + /* builtin(`patsubst') is blank, but patsubst(`abc') is abc. */ + if (argc == 2) + obstack_grow (obs, ARG (1), strlen (ARG (1))); + return; + } + + regexp = TOKEN_DATA_TEXT (argv[2]); + + init_pattern_buffer (&buf, ®s); + msg = re_compile_pattern (regexp, strlen (regexp), &buf); + + if (msg != NULL) + { + M4ERROR ((warning_status, 0, + "bad regular expression `%s': %s", regexp, msg)); + free (buf.buffer); + return; + } + + victim = TOKEN_DATA_TEXT (argv[1]); + length = strlen (victim); + + offset = 0; + matchpos = 0; + while (offset <= length) + { + matchpos = re_search (&buf, victim, length, + offset, length - offset, ®s); + if (matchpos < 0) + { + + /* Match failed -- either error or there is no match in the + rest of the string, in which case the rest of the string is + copied verbatim. */ + + if (matchpos == -2) + M4ERROR ((warning_status, 0, + "error matching regular expression `%s'", regexp)); + else if (offset < length) + obstack_grow (obs, victim + offset, length - offset); + break; + } + + /* Copy the part of the string that was skipped by re_search (). */ + + if (matchpos > offset) + obstack_grow (obs, victim + offset, matchpos - offset); + + /* Handle the part of the string that was covered by the match. */ + + substitute (obs, victim, ARG (3), ®s); + + /* Update the offset to the end of the match. If the regexp + matched a null string, advance offset one more, to avoid + infinite loops. */ + + offset = regs.end[0]; + if (regs.start[0] == regs.end[0]) + obstack_1grow (obs, victim[offset++]); + } + obstack_1grow (obs, '\0'); + + free_pattern_buffer (&buf, ®s); +} + +/* Finally, a placeholder builtin. This builtin is not installed by + default, but when reading back frozen files, this is associated + with any builtin we don't recognize (for example, if the frozen + file was created with a changeword capable m4, but is then loaded + by a different m4 that does not support changeword). This way, we + can keep 'm4 -R' quiet in the common case that the user did not + know or care about the builtin when the frozen file was created, + while still flagging it as a potential error if an attempt is made + to actually use the builtin. */ + +/*--------------------------------------------------------------------. +| Issue a warning that this macro is a placeholder for an unsupported | +| builtin that was requested while reloading a frozen file. | +`--------------------------------------------------------------------*/ + +void +m4_placeholder (struct obstack *obs, int argc, token_data **argv) +{ + M4ERROR ((warning_status, 0, "\ +builtin `%s' requested by frozen file is not supported", ARG (0))); +} + +/*-------------------------------------------------------------------------. +| This function handles all expansion of user defined and predefined | +| macros. It is called with an obstack OBS, where the macros expansion | +| will be placed, as an unfinished object. SYM points to the macro | +| definition, giving the expansion text. ARGC and ARGV are the arguments, | +| as usual. | +`-------------------------------------------------------------------------*/ + +void +expand_user_macro (struct obstack *obs, symbol *sym, + int argc, token_data **argv) +{ + const char *text = SYMBOL_TEXT (sym); + int i; + while (1) + { + const char *dollar = strchr (text, '$'); + if (!dollar) + { + obstack_grow (obs, text, strlen (text)); + return; + } + obstack_grow (obs, text, dollar - text); + text = dollar; + switch (*++text) + { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + if (no_gnu_extensions) + { + i = *text++ - '0'; + } + else + { + for (i = 0; isdigit (to_uchar (*text)); text++) + i = i*10 + (*text - '0'); + } + if (i < argc) + obstack_grow (obs, TOKEN_DATA_TEXT (argv[i]), + strlen (TOKEN_DATA_TEXT (argv[i]))); + break; + + case '#': /* number of arguments */ + shipout_int (obs, argc - 1); + text++; + break; + + case '*': /* all arguments */ + case '@': /* ... same, but quoted */ + dump_args (obs, argc, argv, ",", *text == '@'); + text++; + break; + + default: + obstack_1grow (obs, '$'); + break; + } + } +} diff --git a/coreseek/m4-1.4.13/src/builtin.o b/coreseek/m4-1.4.13/src/builtin.o new file mode 100644 index 0000000..116d4e7 Binary files /dev/null and b/coreseek/m4-1.4.13/src/builtin.o differ diff --git a/coreseek/m4-1.4.13/src/debug.c b/coreseek/m4-1.4.13/src/debug.c new file mode 100644 index 0000000..c94a746 --- /dev/null +++ b/coreseek/m4-1.4.13/src/debug.c @@ -0,0 +1,443 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1991, 1992, 1993, 1994, 2004, 2006, 2007 Free Software + Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "m4.h" + +#include +#include + +/* File for debugging output. */ +FILE *debug = NULL; + +/* Obstack for trace messages. */ +static struct obstack trace; + +extern int expansion_level; + +static void debug_set_file (FILE *); + +/*----------------------------------. +| Initialise the debugging module. | +`----------------------------------*/ + +void +debug_init (void) +{ + debug_set_file (stderr); + obstack_init (&trace); +} + +/*-----------------------------------------------------------------. +| Function to decode the debugging flags OPTS. Used by main while | +| processing option -d, and by the builtin debugmode (). | +`-----------------------------------------------------------------*/ + +int +debug_decode (const char *opts) +{ + int level; + + if (opts == NULL || *opts == '\0') + level = DEBUG_TRACE_DEFAULT; + else + { + for (level = 0; *opts; opts++) + { + switch (*opts) + { + case 'a': + level |= DEBUG_TRACE_ARGS; + break; + + case 'e': + level |= DEBUG_TRACE_EXPANSION; + break; + + case 'q': + level |= DEBUG_TRACE_QUOTE; + break; + + case 't': + level |= DEBUG_TRACE_ALL; + break; + + case 'l': + level |= DEBUG_TRACE_LINE; + break; + + case 'f': + level |= DEBUG_TRACE_FILE; + break; + + case 'p': + level |= DEBUG_TRACE_PATH; + break; + + case 'c': + level |= DEBUG_TRACE_CALL; + break; + + case 'i': + level |= DEBUG_TRACE_INPUT; + break; + + case 'x': + level |= DEBUG_TRACE_CALLID; + break; + + case 'V': + level |= DEBUG_TRACE_VERBOSE; + break; + + default: + return -1; + } + } + } + + /* This is to avoid screwing up the trace output due to changes in the + debug_level. */ + + obstack_free (&trace, obstack_finish (&trace)); + + return level; +} + +/*------------------------------------------------------------------------. +| Change the debug output stream to FP. If the underlying file is the | +| same as stdout, use stdout instead so that debug messages appear in the | +| correct relative position. | +`------------------------------------------------------------------------*/ + +static void +debug_set_file (FILE *fp) +{ + struct stat stdout_stat, debug_stat; + + if (debug != NULL && debug != stderr && debug != stdout + && close_stream (debug) != 0) + { + M4ERROR ((warning_status, errno, "error writing to debug stream")); + retcode = EXIT_FAILURE; + } + debug = fp; + + if (debug != NULL && debug != stdout) + { + if (fstat (STDOUT_FILENO, &stdout_stat) < 0) + return; + if (fstat (fileno (debug), &debug_stat) < 0) + return; + + /* mingw has a bug where fstat on a regular file reports st_ino + of 0. On normal system, st_ino should never be 0. */ + if (stdout_stat.st_ino == debug_stat.st_ino + && stdout_stat.st_dev == debug_stat.st_dev + && stdout_stat.st_ino != 0) + { + if (debug != stderr && close_stream (debug) != 0) + { + M4ERROR ((warning_status, errno, + "error writing to debug stream")); + retcode = EXIT_FAILURE; + } + debug = stdout; + } + } +} + +/*-----------------------------------------------------------. +| Serialize files. Used before executing a system command. | +`-----------------------------------------------------------*/ + +void +debug_flush_files (void) +{ + fflush (stdout); + fflush (stderr); + if (debug != NULL && debug != stdout && debug != stderr) + fflush (debug); + /* POSIX requires that if m4 doesn't consume all input, but stdin is + opened on a seekable file, that the file pointer be left at the + next character on exit (but places no restrictions on the file + pointer location on a non-seekable file). It also requires that + fflush() followed by fseeko() on an input file set the underlying + file pointer, and gnulib guarantees these semantics. However, + fflush() on a non-seekable file can lose buffered data, which we + might otherwise want to process after syscmd. Hence, we must + check whether stdin is seekable. We must also be tolerant of + operating with stdin closed, so we don't report any failures in + this attempt. The stdio-safer module and friends are essential, + so that if stdin was closed, this lseek is not on some other file + that we have since opened. */ + if (lseek (STDIN_FILENO, 0, SEEK_CUR) >= 0 + && fflush (stdin) == 0) + { + fseeko (stdin, 0, SEEK_CUR); + } +} + +/*-------------------------------------------------------------------------. +| Change the debug output to file NAME. If NAME is NULL, debug output is | +| reverted to stderr, and if empty debug output is discarded. Return true | +| iff the output stream was changed. | +`-------------------------------------------------------------------------*/ + +bool +debug_set_output (const char *name) +{ + FILE *fp; + + if (name == NULL) + debug_set_file (stderr); + else if (*name == '\0') + debug_set_file (NULL); + else + { + fp = fopen (name, "a"); + if (fp == NULL) + return false; + + if (set_cloexec_flag (fileno (fp), true) != 0) + M4ERROR ((warning_status, errno, + "Warning: cannot protect debug file across forks")); + debug_set_file (fp); + } + return true; +} + +/*-----------------------------------------------------------------------. +| Print the header of a one-line debug message, starting by "m4 debug". | +`-----------------------------------------------------------------------*/ + +void +debug_message_prefix (void) +{ + xfprintf (debug, "m4debug:"); + if (current_line) + { + if (debug_level & DEBUG_TRACE_FILE) + xfprintf (debug, "%s:", current_file); + if (debug_level & DEBUG_TRACE_LINE) + xfprintf (debug, "%d:", current_line); + } + putc (' ', debug); +} + +/* The rest of this file contains the functions for macro tracing output. + All tracing output for a macro call is collected on an obstack TRACE, + and printed whenever the line is complete. This prevents tracing + output from interfering with other debug messages generated by the + various builtins. */ + +/*---------------------------------------------------------------------. +| Tracing output is formatted here, by a simplified printf-to-obstack | +| function trace_format (). Understands only %S, %s, %d, %l (optional | +| left quote) and %r (optional right quote). | +`---------------------------------------------------------------------*/ + +static void +trace_format (const char *fmt, ...) +{ + va_list args; + char ch; + + int d; + const char *s; + int slen; + int maxlen; + + va_start (args, fmt); + + while (true) + { + while ((ch = *fmt++) != '\0' && ch != '%') + obstack_1grow (&trace, ch); + + if (ch == '\0') + break; + + maxlen = 0; + switch (*fmt++) + { + case 'S': + maxlen = max_debug_argument_length; + /* fall through */ + + case 's': + s = va_arg (args, const char *); + break; + + case 'l': + s = (debug_level & DEBUG_TRACE_QUOTE) ? lquote.string : ""; + break; + + case 'r': + s = (debug_level & DEBUG_TRACE_QUOTE) ? rquote.string : ""; + break; + + case 'd': + d = va_arg (args, int); + s = ntoa (d, 10); + break; + + default: + s = ""; + break; + } + + slen = strlen (s); + if (maxlen == 0 || maxlen > slen) + obstack_grow (&trace, s, slen); + else + { + obstack_grow (&trace, s, maxlen); + obstack_grow (&trace, "...", 3); + } + } + + va_end (args); +} + +/*------------------------------------------------------------------. +| Format the standard header attached to all tracing output lines. | +`------------------------------------------------------------------*/ + +static void +trace_header (int id) +{ + trace_format ("m4trace:"); + if (current_line) + { + if (debug_level & DEBUG_TRACE_FILE) + trace_format ("%s:", current_file); + if (debug_level & DEBUG_TRACE_LINE) + trace_format ("%d:", current_line); + } + trace_format (" -%d- ", expansion_level); + if (debug_level & DEBUG_TRACE_CALLID) + trace_format ("id %d: ", id); +} + +/*----------------------------------------------------. +| Print current tracing line, and clear the obstack. | +`----------------------------------------------------*/ + +static void +trace_flush (void) +{ + char *line; + + obstack_1grow (&trace, '\0'); + line = (char *) obstack_finish (&trace); + DEBUG_PRINT1 ("%s\n", line); + obstack_free (&trace, line); +} + +/*-------------------------------------------------------------. +| Do pre-argument-collction tracing for macro NAME. Used from | +| expand_macro (). | +`-------------------------------------------------------------*/ + +void +trace_prepre (const char *name, int id) +{ + trace_header (id); + trace_format ("%s ...", name); + trace_flush (); +} + +/*-----------------------------------------------------------------------. +| Format the parts of a trace line, that can be made before the macro is | +| actually expanded. Used from expand_macro (). | +`-----------------------------------------------------------------------*/ + +void +trace_pre (const char *name, int id, int argc, token_data **argv) +{ + int i; + const builtin *bp; + + trace_header (id); + trace_format ("%s", name); + + if (argc > 1 && (debug_level & DEBUG_TRACE_ARGS)) + { + trace_format ("("); + + for (i = 1; i < argc; i++) + { + if (i != 1) + trace_format (", "); + + switch (TOKEN_DATA_TYPE (argv[i])) + { + case TOKEN_TEXT: + trace_format ("%l%S%r", TOKEN_DATA_TEXT (argv[i])); + break; + + case TOKEN_FUNC: + bp = find_builtin_by_addr (TOKEN_DATA_FUNC (argv[i])); + if (bp == NULL) + { + M4ERROR ((warning_status, 0, "\ +INTERNAL ERROR: builtin not found in builtin table! (trace_pre ())")); + abort (); + } + trace_format ("<%s>", bp->name); + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad token data type (trace_pre ())")); + abort (); + } + + } + trace_format (")"); + } + + if (debug_level & DEBUG_TRACE_CALL) + { + trace_format (" -> ???"); + trace_flush (); + } +} + +/*-------------------------------------------------------------------. +| Format the final part of a trace line and print it all. Used from | +| expand_macro (). | +`-------------------------------------------------------------------*/ + +void +trace_post (const char *name, int id, int argc, token_data **argv, + const char *expanded) +{ + if (debug_level & DEBUG_TRACE_CALL) + { + trace_header (id); + trace_format ("%s%s", name, (argc > 1) ? "(...)" : ""); + } + + if (expanded && (debug_level & DEBUG_TRACE_EXPANSION)) + trace_format (" -> %l%S%r", expanded); + trace_flush (); +} diff --git a/coreseek/m4-1.4.13/src/debug.o b/coreseek/m4-1.4.13/src/debug.o new file mode 100644 index 0000000..e4a942d Binary files /dev/null and b/coreseek/m4-1.4.13/src/debug.o differ diff --git a/coreseek/m4-1.4.13/src/eval.c b/coreseek/m4-1.4.13/src/eval.c new file mode 100644 index 0000000..d35364c --- /dev/null +++ b/coreseek/m4-1.4.13/src/eval.c @@ -0,0 +1,856 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2006, 2007 + Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* This file contains the functions to evaluate integer expressions for + the "eval" macro. It is a little, fairly self-contained module, with + its own scanner, and a recursive descent parser. The only entry point + is evaluate (). */ + +#include "m4.h" + +/* Evaluates token types. */ + +typedef enum eval_token + { + ERROR, BADOP, + PLUS, MINUS, + EXPONENT, + TIMES, DIVIDE, MODULO, + ASSIGN, EQ, NOTEQ, GT, GTEQ, LS, LSEQ, + LSHIFT, RSHIFT, + LNOT, LAND, LOR, + NOT, AND, OR, XOR, + LEFTP, RIGHTP, + NUMBER, EOTEXT + } +eval_token; + +/* Error types. */ + +typedef enum eval_error + { + NO_ERROR, + DIVIDE_ZERO, + MODULO_ZERO, + NEGATIVE_EXPONENT, + /* All errors prior to SYNTAX_ERROR can be ignored in a dead + branch of && and ||. All errors after are just more details + about a syntax error. */ + SYNTAX_ERROR, + MISSING_RIGHT, + UNKNOWN_INPUT, + EXCESS_INPUT, + INVALID_OPERATOR + } +eval_error; + +static eval_error logical_or_term (eval_token, int32_t *); +static eval_error logical_and_term (eval_token, int32_t *); +static eval_error or_term (eval_token, int32_t *); +static eval_error xor_term (eval_token, int32_t *); +static eval_error and_term (eval_token, int32_t *); +static eval_error equality_term (eval_token, int32_t *); +static eval_error cmp_term (eval_token, int32_t *); +static eval_error shift_term (eval_token, int32_t *); +static eval_error add_term (eval_token, int32_t *); +static eval_error mult_term (eval_token, int32_t *); +static eval_error exp_term (eval_token, int32_t *); +static eval_error unary_term (eval_token, int32_t *); +static eval_error simple_term (eval_token, int32_t *); + +/*--------------------. +| Lexical functions. | +`--------------------*/ + +/* Pointer to next character of input text. */ +static const char *eval_text; + +/* Value of eval_text, from before last call of eval_lex (). This is so we + can back up, if we have read too much. */ +static const char *last_text; + +static void +eval_init_lex (const char *text) +{ + eval_text = text; + last_text = NULL; +} + +static void +eval_undo (void) +{ + eval_text = last_text; +} + +/* VAL is numerical value, if any. */ + +static eval_token +eval_lex (int32_t *val) +{ + while (isspace (to_uchar (*eval_text))) + eval_text++; + + last_text = eval_text; + + if (*eval_text == '\0') + return EOTEXT; + + if (isdigit (to_uchar (*eval_text))) + { + int base, digit; + + if (*eval_text == '0') + { + eval_text++; + switch (*eval_text) + { + case 'x': + case 'X': + base = 16; + eval_text++; + break; + + case 'b': + case 'B': + base = 2; + eval_text++; + break; + + case 'r': + case 'R': + base = 0; + eval_text++; + while (isdigit (to_uchar (*eval_text)) && base <= 36) + base = 10 * base + *eval_text++ - '0'; + if (base == 0 || base > 36 || *eval_text != ':') + return ERROR; + eval_text++; + break; + + default: + base = 8; + } + } + else + base = 10; + + /* FIXME - this calculation can overflow. Consider xstrtol. */ + *val = 0; + for (; *eval_text; eval_text++) + { + if (isdigit (to_uchar (*eval_text))) + digit = *eval_text - '0'; + else if (islower (to_uchar (*eval_text))) + digit = *eval_text - 'a' + 10; + else if (isupper (to_uchar (*eval_text))) + digit = *eval_text - 'A' + 10; + else + break; + + if (base == 1) + { + if (digit == 1) + (*val)++; + else if (digit == 0 && !*val) + continue; + else + break; + } + else if (digit >= base) + break; + else + *val = *val * base + digit; + } + return NUMBER; + } + + switch (*eval_text++) + { + case '+': + if (*eval_text == '+' || *eval_text == '=') + return BADOP; + return PLUS; + case '-': + if (*eval_text == '-' || *eval_text == '=') + return BADOP; + return MINUS; + case '*': + if (*eval_text == '*') + { + eval_text++; + return EXPONENT; + } + else if (*eval_text == '=') + return BADOP; + return TIMES; + case '/': + if (*eval_text == '=') + return BADOP; + return DIVIDE; + case '%': + if (*eval_text == '=') + return BADOP; + return MODULO; + case '=': + if (*eval_text == '=') + { + eval_text++; + return EQ; + } + return ASSIGN; + case '!': + if (*eval_text == '=') + { + eval_text++; + return NOTEQ; + } + return LNOT; + case '>': + if (*eval_text == '=') + { + eval_text++; + return GTEQ; + } + else if (*eval_text == '>') + { + if (*++eval_text == '=') + return BADOP; + return RSHIFT; + } + return GT; + case '<': + if (*eval_text == '=') + { + eval_text++; + return LSEQ; + } + else if (*eval_text == '<') + { + if (*++eval_text == '=') + return BADOP; + return LSHIFT; + } + return LS; + case '^': + if (*eval_text == '=') + return BADOP; + return XOR; + case '~': + return NOT; + case '&': + if (*eval_text == '&') + { + eval_text++; + return LAND; + } + else if (*eval_text == '=') + return BADOP; + return AND; + case '|': + if (*eval_text == '|') + { + eval_text++; + return LOR; + } + else if (*eval_text == '=') + return BADOP; + return OR; + case '(': + return LEFTP; + case ')': + return RIGHTP; + default: + return ERROR; + } +} + +/*---------------------------------------. +| Main entry point, called from "eval". | +`---------------------------------------*/ + +bool +evaluate (const char *expr, int32_t *val) +{ + eval_token et; + eval_error err; + + eval_init_lex (expr); + et = eval_lex (val); + err = logical_or_term (et, val); + + if (err == NO_ERROR && *eval_text != '\0') + { + if (eval_lex (val) == BADOP) + err = INVALID_OPERATOR; + else + err = EXCESS_INPUT; + } + + switch (err) + { + case NO_ERROR: + break; + + case MISSING_RIGHT: + M4ERROR ((warning_status, 0, + "bad expression in eval (missing right parenthesis): %s", + expr)); + break; + + case SYNTAX_ERROR: + M4ERROR ((warning_status, 0, + "bad expression in eval: %s", expr)); + break; + + case UNKNOWN_INPUT: + M4ERROR ((warning_status, 0, + "bad expression in eval (bad input): %s", expr)); + break; + + case EXCESS_INPUT: + M4ERROR ((warning_status, 0, + "bad expression in eval (excess input): %s", expr)); + break; + + case INVALID_OPERATOR: + M4ERROR ((warning_status, 0, + "invalid operator in eval: %s", expr)); + retcode = EXIT_FAILURE; + break; + + case DIVIDE_ZERO: + M4ERROR ((warning_status, 0, + "divide by zero in eval: %s", expr)); + break; + + case MODULO_ZERO: + M4ERROR ((warning_status, 0, + "modulo by zero in eval: %s", expr)); + break; + + case NEGATIVE_EXPONENT: + M4ERROR ((warning_status, 0, + "negative exponent in eval: %s", expr)); + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad error code in evaluate ()")); + abort (); + } + + return err != NO_ERROR; +} + +/*---------------------------. +| Recursive descent parser. | +`---------------------------*/ + +static eval_error +logical_or_term (eval_token et, int32_t *v1) +{ + int32_t v2; + eval_error er; + + if ((er = logical_and_term (et, v1)) != NO_ERROR) + return er; + + while ((et = eval_lex (&v2)) == LOR) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + /* Implement short-circuiting of valid syntax. */ + er = logical_and_term (et, &v2); + if (er == NO_ERROR) + *v1 = *v1 || v2; + else if (*v1 != 0 && er < SYNTAX_ERROR) + *v1 = 1; + else + return er; + } + if (et == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +logical_and_term (eval_token et, int32_t *v1) +{ + int32_t v2; + eval_error er; + + if ((er = or_term (et, v1)) != NO_ERROR) + return er; + + while ((et = eval_lex (&v2)) == LAND) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + /* Implement short-circuiting of valid syntax. */ + er = or_term (et, &v2); + if (er == NO_ERROR) + *v1 = *v1 && v2; + else if (*v1 == 0 && er < SYNTAX_ERROR) + ; /* v1 is already 0 */ + else + return er; + } + if (et == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +or_term (eval_token et, int32_t *v1) +{ + int32_t v2; + eval_error er; + + if ((er = xor_term (et, v1)) != NO_ERROR) + return er; + + while ((et = eval_lex (&v2)) == OR) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = xor_term (et, &v2)) != NO_ERROR) + return er; + + *v1 |= v2; + } + if (et == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +xor_term (eval_token et, int32_t *v1) +{ + int32_t v2; + eval_error er; + + if ((er = and_term (et, v1)) != NO_ERROR) + return er; + + while ((et = eval_lex (&v2)) == XOR) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = and_term (et, &v2)) != NO_ERROR) + return er; + + *v1 ^= v2; + } + if (et == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +and_term (eval_token et, int32_t *v1) +{ + int32_t v2; + eval_error er; + + if ((er = equality_term (et, v1)) != NO_ERROR) + return er; + + while ((et = eval_lex (&v2)) == AND) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = equality_term (et, &v2)) != NO_ERROR) + return er; + + *v1 &= v2; + } + if (et == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +equality_term (eval_token et, int32_t *v1) +{ + eval_token op; + int32_t v2; + eval_error er; + + if ((er = cmp_term (et, v1)) != NO_ERROR) + return er; + + /* In the 1.4.x series, we maintain the traditional behavior that + '=' is a synonym for '=='; however, this is contrary to POSIX and + we hope to convert '=' to mean assignment in 2.0. */ + while ((op = eval_lex (&v2)) == EQ || op == NOTEQ || op == ASSIGN) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = cmp_term (et, &v2)) != NO_ERROR) + return er; + + if (op == ASSIGN) + { + M4ERROR ((warning_status, 0, "\ +Warning: recommend ==, not =, for equality operator")); + op = EQ; + } + *v1 = (op == EQ) == (*v1 == v2); + } + if (op == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +cmp_term (eval_token et, int32_t *v1) +{ + eval_token op; + int32_t v2; + eval_error er; + + if ((er = shift_term (et, v1)) != NO_ERROR) + return er; + + while ((op = eval_lex (&v2)) == GT || op == GTEQ + || op == LS || op == LSEQ) + { + + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = shift_term (et, &v2)) != NO_ERROR) + return er; + + switch (op) + { + case GT: + *v1 = *v1 > v2; + break; + + case GTEQ: + *v1 = *v1 >= v2; + break; + + case LS: + *v1 = *v1 < v2; + break; + + case LSEQ: + *v1 = *v1 <= v2; + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad comparison operator in cmp_term ()")); + abort (); + } + } + if (op == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +shift_term (eval_token et, int32_t *v1) +{ + eval_token op; + int32_t v2; + uint32_t u1; + eval_error er; + + if ((er = add_term (et, v1)) != NO_ERROR) + return er; + + while ((op = eval_lex (&v2)) == LSHIFT || op == RSHIFT) + { + + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = add_term (et, &v2)) != NO_ERROR) + return er; + + /* Minimize undefined C behavior (shifting by a negative number, + shifting by the width or greater, left shift overflow, or + right shift of a negative number). Implement Java 32-bit + wrap-around semantics. This code assumes that the + implementation-defined overflow when casting unsigned to + signed is a silent twos-complement wrap-around. */ + switch (op) + { + case LSHIFT: + u1 = *v1; + u1 <<= (uint32_t) (v2 & 0x1f); + *v1 = u1; + break; + + case RSHIFT: + u1 = *v1 < 0 ? ~*v1 : *v1; + u1 >>= (uint32_t) (v2 & 0x1f); + *v1 = *v1 < 0 ? ~u1 : u1; + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad shift operator in shift_term ()")); + abort (); + } + } + if (op == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +add_term (eval_token et, int32_t *v1) +{ + eval_token op; + int32_t v2; + eval_error er; + + if ((er = mult_term (et, v1)) != NO_ERROR) + return er; + + while ((op = eval_lex (&v2)) == PLUS || op == MINUS) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = mult_term (et, &v2)) != NO_ERROR) + return er; + + /* Minimize undefined C behavior on overflow. This code assumes + that the implementation-defined overflow when casting + unsigned to signed is a silent twos-complement + wrap-around. */ + if (op == PLUS) + *v1 = (int32_t) ((uint32_t) *v1 + (uint32_t) v2); + else + *v1 = (int32_t) ((uint32_t) *v1 - (uint32_t) v2); + } + if (op == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +mult_term (eval_token et, int32_t *v1) +{ + eval_token op; + int32_t v2; + eval_error er; + + if ((er = exp_term (et, v1)) != NO_ERROR) + return er; + + while ((op = eval_lex (&v2)) == TIMES || op == DIVIDE || op == MODULO) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = exp_term (et, &v2)) != NO_ERROR) + return er; + + /* Minimize undefined C behavior on overflow. This code assumes + that the implementation-defined overflow when casting + unsigned to signed is a silent twos-complement + wrap-around. */ + switch (op) + { + case TIMES: + *v1 = (int32_t) ((uint32_t) *v1 * (uint32_t) v2); + break; + + case DIVIDE: + if (v2 == 0) + return DIVIDE_ZERO; + else if (v2 == -1) + /* Avoid overflow, and the x86 SIGFPE on INT_MIN / -1. */ + *v1 = (int32_t) -(uint32_t) *v1; + else + *v1 /= v2; + break; + + case MODULO: + if (v2 == 0) + return MODULO_ZERO; + else if (v2 == -1) + /* Avoid the x86 SIGFPE on INT_MIN % -1. */ + *v1 = 0; + else + *v1 %= v2; + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad operator in mult_term ()")); + abort (); + } + } + if (op == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +exp_term (eval_token et, int32_t *v1) +{ + uint32_t result; + int32_t v2; + eval_error er; + + if ((er = unary_term (et, v1)) != NO_ERROR) + return er; + + while ((et = eval_lex (&v2)) == EXPONENT) + { + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = exp_term (et, &v2)) != NO_ERROR) + return er; + + /* Minimize undefined C behavior on overflow. This code assumes + that the implementation-defined overflow when casting + unsigned to signed is a silent twos-complement + wrap-around. */ + result = 1; + if (v2 < 0) + return NEGATIVE_EXPONENT; + if (*v1 == 0 && v2 == 0) + return DIVIDE_ZERO; + while (v2-- > 0) + result *= (uint32_t) *v1; + *v1 = result; + } + if (et == ERROR) + return UNKNOWN_INPUT; + + eval_undo (); + return NO_ERROR; +} + +static eval_error +unary_term (eval_token et, int32_t *v1) +{ + eval_token et2 = et; + eval_error er; + + if (et == PLUS || et == MINUS || et == NOT || et == LNOT) + { + et2 = eval_lex (v1); + if (et2 == ERROR) + return UNKNOWN_INPUT; + + if ((er = unary_term (et2, v1)) != NO_ERROR) + return er; + + /* Minimize undefined C behavior on overflow. This code assumes + that the implementation-defined overflow when casting + unsigned to signed is a silent twos-complement + wrap-around. */ + if (et == MINUS) + *v1 = (int32_t) -(uint32_t) *v1; + else if (et == NOT) + *v1 = ~*v1; + else if (et == LNOT) + *v1 = *v1 == 0 ? 1 : 0; + } + else if ((er = simple_term (et, v1)) != NO_ERROR) + return er; + + return NO_ERROR; +} + +static eval_error +simple_term (eval_token et, int32_t *v1) +{ + int32_t v2; + eval_error er; + + switch (et) + { + case LEFTP: + et = eval_lex (v1); + if (et == ERROR) + return UNKNOWN_INPUT; + + if ((er = logical_or_term (et, v1)) != NO_ERROR) + return er; + + et = eval_lex (&v2); + if (et == ERROR) + return UNKNOWN_INPUT; + + if (et != RIGHTP) + return MISSING_RIGHT; + + break; + + case NUMBER: + break; + + case BADOP: + return INVALID_OPERATOR; + + default: + return SYNTAX_ERROR; + } + return NO_ERROR; +} diff --git a/coreseek/m4-1.4.13/src/eval.o b/coreseek/m4-1.4.13/src/eval.o new file mode 100644 index 0000000..11c8dcb Binary files /dev/null and b/coreseek/m4-1.4.13/src/eval.o differ diff --git a/coreseek/m4-1.4.13/src/format.c b/coreseek/m4-1.4.13/src/format.c new file mode 100644 index 0000000..a0519a0 --- /dev/null +++ b/coreseek/m4-1.4.13/src/format.c @@ -0,0 +1,314 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* printf like formatting for m4. */ + +#include "m4.h" +#include "xvasprintf.h" + +/* Simple varargs substitute. We assume int and unsigned int are the + same size; likewise for long and unsigned long. */ + +#define ARG_INT(argc, argv) \ + ((argc == 0) ? 0 : \ + (--argc, argv++, atoi (TOKEN_DATA_TEXT (argv[-1])))) + +#define ARG_LONG(argc, argv) \ + ((argc == 0) ? 0 : \ + (--argc, argv++, atol (TOKEN_DATA_TEXT (argv[-1])))) + +#define ARG_STR(argc, argv) \ + ((argc == 0) ? "" : \ + (--argc, argv++, TOKEN_DATA_TEXT (argv[-1]))) + +#define ARG_DOUBLE(argc, argv) \ + ((argc == 0) ? 0 : \ + (--argc, argv++, strtod (TOKEN_DATA_TEXT (argv[-1]), NULL))) + + +/*------------------------------------------------------------------. +| The main formatting function. Output is placed on the obstack | +| OBS, the first argument in ARGV is the formatting string, and the | +| rest is arguments for the string. Warn rather than invoke | +| unspecified behavior in the underlying printf when we do not | +| recognize a format. | +`------------------------------------------------------------------*/ + +void +expand_format (struct obstack *obs, int argc, token_data **argv) +{ + const char *f; /* format control string */ + const char *fmt; /* position within f */ + char fstart[] = "%'+- 0#*.*hhd"; /* current format spec */ + char *p; /* position within fstart */ + unsigned char c; /* a simple character */ + + /* Flags. */ + char flags; /* flags to use in fstart */ + enum { + THOUSANDS = 0x01, /* ' */ + PLUS = 0x02, /* + */ + MINUS = 0x04, /* - */ + SPACE = 0x08, /* */ + ZERO = 0x10, /* 0 */ + ALT = 0x20, /* # */ + DONE = 0x40 /* no more flags */ + }; + + /* Precision specifiers. */ + int width; /* minimum field width */ + int prec; /* precision */ + char lflag; /* long flag */ + + /* Specifiers we are willing to accept. ok['x'] implies %x is ok. + Various modifiers reduce the set, in order to avoid undefined + behavior in printf. */ + char ok[128]; + + /* Buffer and stuff. */ + char *str; /* malloc'd buffer of formatted text */ + enum {CHAR, INT, LONG, DOUBLE, STR} datatype; + + f = fmt = ARG_STR (argc, argv); + memset (ok, 0, sizeof ok); + while (1) + { + const char *percent = strchr (fmt, '%'); + if (!percent) + { + obstack_grow (obs, fmt, strlen (fmt)); + return; + } + obstack_grow (obs, fmt, percent - fmt); + fmt = percent + 1; + + if (*fmt == '%') + { + obstack_1grow (obs, '%'); + fmt++; + continue; + } + + p = fstart + 1; /* % */ + lflag = 0; + ok['a'] = ok['A'] = ok['c'] = ok['d'] = ok['e'] = ok['E'] + = ok['f'] = ok['F'] = ok['g'] = ok['G'] = ok['i'] = ok['o'] + = ok['s'] = ok['u'] = ok['x'] = ok['X'] = 1; + + /* Parse flags. */ + flags = 0; + do + { + switch (*fmt) + { + case '\'': /* thousands separator */ + ok['a'] = ok['A'] = ok['c'] = ok['e'] = ok['E'] + = ok['o'] = ok['s'] = ok['x'] = ok['X'] = 0; + flags |= THOUSANDS; + break; + + case '+': /* mandatory sign */ + ok['c'] = ok['o'] = ok['s'] = ok['u'] = ok['x'] = ok['X'] = 0; + flags |= PLUS; + break; + + case ' ': /* space instead of positive sign */ + ok['c'] = ok['o'] = ok['s'] = ok['u'] = ok['x'] = ok['X'] = 0; + flags |= SPACE; + break; + + case '0': /* zero padding */ + ok['c'] = ok['s'] = 0; + flags |= ZERO; + break; + + case '#': /* alternate output */ + ok['c'] = ok['d'] = ok['i'] = ok['s'] = ok['u'] = 0; + flags |= ALT; + break; + + case '-': /* left justification */ + flags |= MINUS; + break; + + default: + flags |= DONE; + break; + } + } + while (!(flags & DONE) && fmt++); + if (flags & THOUSANDS) + *p++ = '\''; + if (flags & PLUS) + *p++ = '+'; + if (flags & MINUS) + *p++ = '-'; + if (flags & SPACE) + *p++ = ' '; + if (flags & ZERO) + *p++ = '0'; + if (flags & ALT) + *p++ = '#'; + + /* Minimum field width; an explicit 0 is the same as not giving + the width. */ + width = 0; + *p++ = '*'; + if (*fmt == '*') + { + width = ARG_INT (argc, argv); + fmt++; + } + else + while (isdigit (to_uchar (*fmt))) + { + width = 10 * width + *fmt - '0'; + fmt++; + } + + /* Maximum precision; an explicit negative precision is the same + as not giving the precision. A lone '.' is a precision of 0. */ + prec = -1; + *p++ = '.'; + *p++ = '*'; + if (*fmt == '.') + { + ok['c'] = 0; + if (*(++fmt) == '*') + { + prec = ARG_INT (argc, argv); + ++fmt; + } + else + { + prec = 0; + while (isdigit (to_uchar (*fmt))) + { + prec = 10 * prec + *fmt - '0'; + fmt++; + } + } + } + + /* Length modifiers. We don't yet recognize ll, j, t, or z. */ + if (*fmt == 'l') + { + *p++ = 'l'; + lflag = 1; + fmt++; + ok['c'] = ok['s'] = 0; + } + else if (*fmt == 'h') + { + *p++ = 'h'; + fmt++; + if (*fmt == 'h') + { + *p++ = 'h'; + fmt++; + } + ok['a'] = ok['A'] = ok['c'] = ok['e'] = ok['E'] = ok['f'] = ok['F'] + = ok['g'] = ok['G'] = ok['s'] = 0; + } + + c = *fmt++; + if (c > sizeof ok || !ok[c]) + { + M4ERROR ((warning_status, 0, + "Warning: unrecognized specifier in `%s'", f)); + if (c == '\0') + fmt--; + continue; + } + + /* Specifiers. We don't yet recognize C, S, n, or p. */ + switch (c) + { + case 'c': + datatype = CHAR; + p -= 2; /* %.*c is undefined, so undo the '.*'. */ + break; + + case 's': + datatype = STR; + break; + + case 'd': + case 'i': + case 'o': + case 'x': + case 'X': + case 'u': + datatype = lflag ? LONG : INT; + break; + + case 'a': + case 'A': + case 'e': + case 'E': + case 'f': + case 'F': + case 'g': + case 'G': + datatype = DOUBLE; + break; + + default: + abort (); + } + *p++ = c; + *p = '\0'; + + switch (datatype) + { + case CHAR: + str = xasprintf (fstart, width, ARG_INT(argc, argv)); + break; + + case INT: + str = xasprintf (fstart, width, prec, ARG_INT(argc, argv)); + break; + + case LONG: + str = xasprintf (fstart, width, prec, ARG_LONG(argc, argv)); + break; + + case DOUBLE: + str = xasprintf (fstart, width, prec, ARG_DOUBLE(argc, argv)); + break; + + case STR: + str = xasprintf (fstart, width, prec, ARG_STR(argc, argv)); + break; + + default: + abort(); + } + + /* NULL was returned on failure, such as invalid format string. For + now, just silently ignore that bad specifier. */ + if (str == NULL) + continue; + + obstack_grow (obs, str, strlen (str)); + free (str); + } +} diff --git a/coreseek/m4-1.4.13/src/format.o b/coreseek/m4-1.4.13/src/format.o new file mode 100644 index 0000000..7856cd6 Binary files /dev/null and b/coreseek/m4-1.4.13/src/format.o differ diff --git a/coreseek/m4-1.4.13/src/freeze.c b/coreseek/m4-1.4.13/src/freeze.c new file mode 100644 index 0000000..ddc2e08 --- /dev/null +++ b/coreseek/m4-1.4.13/src/freeze.c @@ -0,0 +1,399 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2006, 2007, 2008 + Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* This module handles frozen files. */ + +#include "m4.h" + +/*-------------------------------------------------------------------. +| Destructively reverse a symbol list and return the reversed list. | +`-------------------------------------------------------------------*/ + +static symbol * +reverse_symbol_list (symbol *sym) +{ + symbol *result; + symbol *next; + + result = NULL; + while (sym) + { + next = SYMBOL_NEXT (sym); + SYMBOL_NEXT (sym) = result; + result = sym; + sym = next; + } + return result; +} + +/*------------------------------------------------. +| Produce a frozen state to the given file NAME. | +`------------------------------------------------*/ + +void +produce_frozen_state (const char *name) +{ + FILE *file; + int h; + symbol *sym; + const builtin *bp; + + file = fopen (name, O_BINARY ? "wb" : "w"); + if (!file) + { + M4ERROR ((EXIT_FAILURE, errno, "cannot open `%s'", name)); + return; + } + + /* Write a recognizable header. */ + + xfprintf (file, "# This is a frozen state file generated by %s\n", + PACKAGE_STRING); + xfprintf (file, "V1\n"); + + /* Dump quote delimiters. */ + + if (strcmp (lquote.string, DEF_LQUOTE) || strcmp (rquote.string, DEF_RQUOTE)) + { + xfprintf (file, "Q%d,%d\n", (int) lquote.length, (int) rquote.length); + fputs (lquote.string, file); + fputs (rquote.string, file); + fputc ('\n', file); + } + + /* Dump comment delimiters. */ + + if (strcmp (bcomm.string, DEF_BCOMM) || strcmp (ecomm.string, DEF_ECOMM)) + { + xfprintf (file, "C%d,%d\n", (int) bcomm.length, (int) ecomm.length); + fputs (bcomm.string, file); + fputs (ecomm.string, file); + fputc ('\n', file); + } + + /* Dump all symbols. */ + + for (h = 0; h < hash_table_size; h++) + { + + /* Process all entries in one bucket, from the last to the first. + This order ensures that, at reload time, pushdef's will be + executed with the oldest definitions first. */ + + symtab[h] = reverse_symbol_list (symtab[h]); + for (sym = symtab[h]; sym; sym = SYMBOL_NEXT (sym)) + { + switch (SYMBOL_TYPE (sym)) + { + case TOKEN_TEXT: + xfprintf (file, "T%d,%d\n", + (int) strlen (SYMBOL_NAME (sym)), + (int) strlen (SYMBOL_TEXT (sym))); + fputs (SYMBOL_NAME (sym), file); + fputs (SYMBOL_TEXT (sym), file); + fputc ('\n', file); + break; + + case TOKEN_FUNC: + bp = find_builtin_by_addr (SYMBOL_FUNC (sym)); + if (bp == NULL) + { + M4ERROR ((warning_status, 0, "\ +INTERNAL ERROR: builtin not found in builtin table!")); + abort (); + } + xfprintf (file, "F%d,%d\n", + (int) strlen (SYMBOL_NAME (sym)), + (int) strlen (bp->name)); + fputs (SYMBOL_NAME (sym), file); + fputs (bp->name, file); + fputc ('\n', file); + break; + + case TOKEN_VOID: + /* Ignore placeholder tokens that exist due to traceon. */ + break; + + default: + M4ERROR ((warning_status, 0, "\ +INTERNAL ERROR: bad token data type in freeze_one_symbol ()")); + abort (); + break; + } + } + + /* Reverse the bucket once more, putting it back as it was. */ + + symtab[h] = reverse_symbol_list (symtab[h]); + } + + /* Let diversions be issued from output.c module, its cleaner to have this + piece of code there. */ + + freeze_diversions (file); + + /* All done. */ + + fputs ("# End of frozen state file\n", file); + if (close_stream (file) != 0) + M4ERROR ((EXIT_FAILURE, errno, "unable to create frozen state")); +} + +/*----------------------------------------------------------------------. +| Issue a message saying that some character is an EXPECTED character. | +`----------------------------------------------------------------------*/ + +static void +issue_expect_message (int expected) +{ + if (expected == '\n') + M4ERROR ((EXIT_FAILURE, 0, "expecting line feed in frozen file")); + else + M4ERROR ((EXIT_FAILURE, 0, "expecting character `%c' in frozen file", + expected)); +} + +/*-------------------------------------------------. +| Reload a frozen state from the given file NAME. | +`-------------------------------------------------*/ + +/* We are seeking speed, here. */ + +void +reload_frozen_state (const char *name) +{ + FILE *file; + int character; + int operation; + char *string[2]; + int allocated[2]; + int number[2]; + const builtin *bp; + bool advance_line = true; + +#define GET_CHARACTER \ + do \ + { \ + if (advance_line) \ + { \ + current_line++; \ + advance_line = false; \ + } \ + (character = getc (file)); \ + if (character == '\n') \ + advance_line = true; \ + } \ + while (0) + +#define GET_NUMBER(Number, AllowNeg) \ + do \ + { \ + unsigned int n = 0; \ + while (isdigit (character) && n <= INT_MAX / 10) \ + { \ + n = 10 * n + character - '0'; \ + GET_CHARACTER; \ + } \ + if (((AllowNeg) ? INT_MIN : INT_MAX) < n \ + || isdigit (character)) \ + m4_error (EXIT_FAILURE, 0, \ + _("integer overflow in frozen file")); \ + (Number) = n; \ + } \ + while (0) + +#define VALIDATE(Expected) \ + do \ + { \ + if (character != (Expected)) \ + issue_expect_message (Expected); \ + } \ + while (0) + + /* Skip comments (`#' at beginning of line) and blank lines, setting + character to the next directive or to EOF. */ + +#define GET_DIRECTIVE \ + do \ + { \ + GET_CHARACTER; \ + if (character == '#') \ + { \ + while (character != EOF && character != '\n') \ + GET_CHARACTER; \ + VALIDATE ('\n'); \ + } \ + } \ + while (character == '\n') + +#define GET_STRING(i) \ + do \ + { \ + void *tmp; \ + char *p; \ + if (number[(i)] + 1 > allocated[(i)]) \ + { \ + free (string[(i)]); \ + allocated[(i)] = number[(i)] + 1; \ + string[(i)] = xcharalloc ((size_t) allocated[(i)]); \ + } \ + if (number[(i)] > 0 \ + && !fread (string[(i)], (size_t) number[(i)], 1, file)) \ + m4_error (EXIT_FAILURE, 0, \ + _("premature end of frozen file")); \ + string[(i)][number[(i)]] = '\0'; \ + p = string[(i)]; \ + while ((tmp = memchr(p, '\n', number[(i)] - (p - string[(i)])))) \ + { \ + current_line++; \ + p = (char *) tmp + 1; \ + } \ + } \ + while (0) + + file = m4_path_search (name, NULL); + if (file == NULL) + M4ERROR ((EXIT_FAILURE, errno, "cannot open %s", name)); + current_file = name; + + allocated[0] = 100; + string[0] = xcharalloc ((size_t) allocated[0]); + allocated[1] = 100; + string[1] = xcharalloc ((size_t) allocated[1]); + + /* Validate format version. Only `1' is acceptable for now. */ + GET_DIRECTIVE; + VALIDATE ('V'); + GET_CHARACTER; + GET_NUMBER (number[0], false); + if (number[0] > 1) + M4ERROR ((EXIT_MISMATCH, 0, + "frozen file version %d greater than max supported of 1", + number[0])); + else if (number[0] < 1) + M4ERROR ((EXIT_FAILURE, 0, + "ill-formed frozen file, version directive expected")); + VALIDATE ('\n'); + + GET_DIRECTIVE; + while (character != EOF) + { + switch (character) + { + default: + M4ERROR ((EXIT_FAILURE, 0, "ill-formed frozen file")); + + case 'C': + case 'D': + case 'F': + case 'T': + case 'Q': + operation = character; + GET_CHARACTER; + + /* Get string lengths. Accept a negative diversion number. */ + + if (operation == 'D' && character == '-') + { + GET_CHARACTER; + GET_NUMBER (number[0], true); + number[0] = -number[0]; + } + else + GET_NUMBER (number[0], false); + VALIDATE (','); + GET_CHARACTER; + GET_NUMBER (number[1], false); + VALIDATE ('\n'); + + if (operation != 'D') + GET_STRING (0); + GET_STRING (1); + GET_CHARACTER; + VALIDATE ('\n'); + + /* Act according to operation letter. */ + + switch (operation) + { + case 'C': + + /* Change comment strings. */ + + set_comment (string[0], string[1]); + break; + + case 'D': + + /* Select a diversion and add a string to it. */ + + make_diversion (number[0]); + if (number[1] > 0) + output_text (string[1], number[1]); + break; + + case 'F': + + /* Enter a macro having a builtin function as a definition. */ + + bp = find_builtin_by_name (string[1]); + define_builtin (string[0], bp, SYMBOL_PUSHDEF); + break; + + case 'T': + + /* Enter a macro having an expansion text as a definition. */ + + define_user_macro (string[0], string[1], SYMBOL_PUSHDEF); + break; + + case 'Q': + + /* Change quote strings. */ + + set_quotes (string[0], string[1]); + break; + + default: + + /* Cannot happen. */ + + break; + } + break; + + } + GET_DIRECTIVE; + } + + free (string[0]); + free (string[1]); + if (close_stream (file) != 0) + m4_error (EXIT_FAILURE, errno, _("unable to read frozen state")); + current_file = NULL; + current_line = 0; + +#undef GET_CHARACTER +#undef GET_DIRECTIVE +#undef GET_NUMBER +#undef VALIDATE +#undef GET_STRING +} diff --git a/coreseek/m4-1.4.13/src/freeze.o b/coreseek/m4-1.4.13/src/freeze.o new file mode 100644 index 0000000..5344b97 Binary files /dev/null and b/coreseek/m4-1.4.13/src/freeze.o differ diff --git a/coreseek/m4-1.4.13/src/input.c b/coreseek/m4-1.4.13/src/input.c new file mode 100644 index 0000000..63480be --- /dev/null +++ b/coreseek/m4-1.4.13/src/input.c @@ -0,0 +1,1167 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, + 2007, 2008, 2009 Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Handling of different input sources, and lexical analysis. */ + +#include "m4.h" + +#include "memchr2.h" + +/* Unread input can be either files, that should be read (eg. included + files), strings, which should be rescanned (eg. macro expansion text), + or quoted macro definitions (as returned by the builtin "defn"). + Unread input are organised in a stack, implemented with an obstack. + Each input source is described by a "struct input_block". The obstack + is "current_input". The top of the input stack is "isp". + + The macro "m4wrap" places the text to be saved on another input + stack, on the obstack "wrapup_stack", whose top is "wsp". When EOF + is seen on normal input (eg, when "current_input" is empty), input is + switched over to "wrapup_stack", and the original "current_input" is + freed. A new stack is allocated for "wrapup_stack", which will + accept any text produced by calls to "m4wrap" from within the + wrapped text. This process of shuffling "wrapup_stack" to + "current_input" can continue indefinitely, even generating infinite + loops (e.g. "define(`f',`m4wrap(`f')')f"), without memory leaks. + + Pushing new input on the input stack is done by push_file (), + push_string (), push_wrapup () (for wrapup text), and push_macro () + (for macro definitions). Because macro expansion needs direct access + to the current input obstack (for optimisation), push_string () are + split in two functions, push_string_init (), which returns a pointer + to the current input stack, and push_string_finish (), which return a + pointer to the final text. The input_block *next is used to manage + the coordination between the different push routines. + + The current file and line number are stored in two global + variables, for use by the error handling functions in m4.c. Macro + expansion wants to report the line where a macro name was detected, + rather than where it finished collecting arguments. This also + applies to text resulting from macro expansions. So each input + block maintains its own notion of the current file and line, and + swapping between input blocks updates the global variables + accordingly. */ + +#ifdef ENABLE_CHANGEWORD +#include "regex.h" +#endif + +enum input_type +{ + INPUT_STRING, /* String resulting from macro expansion. */ + INPUT_FILE, /* File from command line or include. */ + INPUT_MACRO /* Builtin resulting from defn. */ +}; + +typedef enum input_type input_type; + +struct input_block +{ + struct input_block *prev; /* previous input_block on the input stack */ + input_type type; /* see enum values */ + const char *file; /* file where this input is from */ + int line; /* line where this input is from */ + union + { + struct + { + char *string; /* remaining string value */ + char *end; /* terminating NUL of string */ + } + u_s; /* INPUT_STRING */ + struct + { + FILE *fp; /* input file handle */ + bool_bitfield end : 1; /* true if peek has seen EOF */ + bool_bitfield close : 1; /* true if we should close file on pop */ + bool_bitfield advance : 1; /* track previous start_of_input_line */ + } + u_f; /* INPUT_FILE */ + builtin_func *func; /* pointer to macro's function */ + } + u; +}; + +typedef struct input_block input_block; + + +/* Current input file name. */ +const char *current_file; + +/* Current input line number. */ +int current_line; + +/* Obstack for storing individual tokens. */ +static struct obstack token_stack; + +/* Obstack for storing file names. */ +static struct obstack file_names; + +/* Wrapup input stack. */ +static struct obstack *wrapup_stack; + +/* Current stack, from input or wrapup. */ +static struct obstack *current_input; + +/* Bottom of token_stack, for obstack_free. */ +static void *token_bottom; + +/* Pointer to top of current_input. */ +static input_block *isp; + +/* Pointer to top of wrapup_stack. */ +static input_block *wsp; + +/* Aux. for handling split push_string (). */ +static input_block *next; + +/* Flag for next_char () to increment current_line. */ +static bool start_of_input_line; + +/* Flag for next_char () to recognize change in input block. */ +static bool input_change; + +#define CHAR_EOF 256 /* character return on EOF */ +#define CHAR_MACRO 257 /* character return for MACRO token */ + +/* Quote chars. */ +STRING rquote; +STRING lquote; + +/* Comment chars. */ +STRING bcomm; +STRING ecomm; + +#ifdef ENABLE_CHANGEWORD + +# define DEFAULT_WORD_REGEXP "[_a-zA-Z][_a-zA-Z0-9]*" + +static char *word_start; +static struct re_pattern_buffer word_regexp; +static int default_word_regexp; +static struct re_registers regs; + +#else /* ! ENABLE_CHANGEWORD */ +# define default_word_regexp 1 +#endif /* ! ENABLE_CHANGEWORD */ + +#ifdef DEBUG_INPUT +static const char *token_type_string (token_type); +#endif + + +/*-------------------------------------------------------------------. +| push_file () pushes an input file on the input stack, saving the | +| current file name and line number. If next is non-NULL, this push | +| invalidates a call to push_string_init (), whose storage is | +| consequently released. If CLOSE_WHEN_DONE, then close FP after | +| EOF is detected. | +`-------------------------------------------------------------------*/ + +void +push_file (FILE *fp, const char *title, bool close_when_done) +{ + input_block *i; + + if (next != NULL) + { + obstack_free (current_input, next); + next = NULL; + } + + if (debug_level & DEBUG_TRACE_INPUT) + DEBUG_MESSAGE1 ("input read from %s", title); + + i = (input_block *) obstack_alloc (current_input, + sizeof (struct input_block)); + i->type = INPUT_FILE; + i->file = (char *) obstack_copy0 (&file_names, title, strlen (title)); + i->line = 1; + input_change = true; + + i->u.u_f.fp = fp; + i->u.u_f.end = false; + i->u.u_f.close = close_when_done; + i->u.u_f.advance = start_of_input_line; + output_current_line = -1; + + i->prev = isp; + isp = i; +} + +/*---------------------------------------------------------------. +| push_macro () pushes a builtin macro's definition on the input | +| stack. If next is non-NULL, this push invalidates a call to | +| push_string_init (), whose storage is consequently released. | +`---------------------------------------------------------------*/ + +void +push_macro (builtin_func *func) +{ + input_block *i; + + if (next != NULL) + { + obstack_free (current_input, next); + next = NULL; + } + + i = (input_block *) obstack_alloc (current_input, + sizeof (struct input_block)); + i->type = INPUT_MACRO; + i->file = current_file; + i->line = current_line; + input_change = true; + + i->u.func = func; + i->prev = isp; + isp = i; +} + +/*------------------------------------------------------------------. +| First half of push_string (). The pointer next points to the new | +| input_block. | +`------------------------------------------------------------------*/ + +struct obstack * +push_string_init (void) +{ + if (next != NULL) + { + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: recursive push_string!")); + abort (); + } + + next = (input_block *) obstack_alloc (current_input, + sizeof (struct input_block)); + next->type = INPUT_STRING; + next->file = current_file; + next->line = current_line; + + return current_input; +} + +/*------------------------------------------------------------------------. +| Last half of push_string (). If next is now NULL, a call to push_file | +| () has invalidated the previous call to push_string_init (), so we just | +| give up. If the new object is void, we do not push it. The function | +| push_string_finish () returns a pointer to the finished object. This | +| pointer is only for temporary use, since reading the next token might | +| release the memory used for the object. | +`------------------------------------------------------------------------*/ + +const char * +push_string_finish (void) +{ + const char *ret = NULL; + + if (next == NULL) + return NULL; + + if (obstack_object_size (current_input) > 0) + { + size_t len = obstack_object_size (current_input); + obstack_1grow (current_input, '\0'); + next->u.u_s.string = (char *) obstack_finish (current_input); + next->u.u_s.end = next->u.u_s.string + len; + next->prev = isp; + isp = next; + ret = isp->u.u_s.string; /* for immediate use only */ + input_change = true; + } + else + obstack_free (current_input, next); /* people might leave garbage on it. */ + next = NULL; + return ret; +} + +/*------------------------------------------------------------------. +| The function push_wrapup () pushes a string on the wrapup stack. | +| When the normal input stack gets empty, the wrapup stack will | +| become the input stack, and push_string () and push_file () will | +| operate on wrapup_stack. Push_wrapup should be done as | +| push_string (), but this will suffice, as long as arguments to | +| m4_m4wrap () are moderate in size. | +`------------------------------------------------------------------*/ + +void +push_wrapup (const char *s) +{ + size_t len = strlen (s); + input_block *i; + i = (input_block *) obstack_alloc (wrapup_stack, + sizeof (struct input_block)); + i->prev = wsp; + i->type = INPUT_STRING; + i->file = current_file; + i->line = current_line; + i->u.u_s.string = (char *) obstack_copy0 (wrapup_stack, s, len); + i->u.u_s.end = i->u.u_s.string + len; + wsp = i; +} + + +/*-------------------------------------------------------------------------. +| The function pop_input () pops one level of input sources. If the | +| popped input_block is a file, current_file and current_line are reset to | +| the saved values before the memory for the input_block are released. | +`-------------------------------------------------------------------------*/ + +static void +pop_input (void) +{ + input_block *tmp = isp->prev; + + switch (isp->type) + { + case INPUT_STRING: + case INPUT_MACRO: + break; + + case INPUT_FILE: + if (debug_level & DEBUG_TRACE_INPUT) + { + if (tmp) + DEBUG_MESSAGE2 ("input reverted to %s, line %d", + tmp->file, tmp->line); + else + DEBUG_MESSAGE ("input exhausted"); + } + + if (ferror (isp->u.u_f.fp)) + { + M4ERROR ((warning_status, 0, "read error")); + if (isp->u.u_f.close) + fclose (isp->u.u_f.fp); + retcode = EXIT_FAILURE; + } + else if (isp->u.u_f.close && fclose (isp->u.u_f.fp) == EOF) + { + M4ERROR ((warning_status, errno, "error reading file")); + retcode = EXIT_FAILURE; + } + start_of_input_line = isp->u.u_f.advance; + output_current_line = -1; + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: input stack botch in pop_input ()")); + abort (); + } + obstack_free (current_input, isp); + next = NULL; /* might be set in push_string_init () */ + + isp = tmp; + input_change = true; +} + +/*------------------------------------------------------------------------. +| To switch input over to the wrapup stack, main () calls pop_wrapup (). | +| Since wrapup text can install new wrapup text, pop_wrapup () returns | +| false when there is no wrapup text on the stack, and true otherwise. | +`------------------------------------------------------------------------*/ + +bool +pop_wrapup (void) +{ + next = NULL; + obstack_free (current_input, NULL); + free (current_input); + + if (wsp == NULL) + { + /* End of the program. Free all memory even though we are about + to exit, since it makes leak detection easier. */ + obstack_free (&token_stack, NULL); + obstack_free (&file_names, NULL); + obstack_free (wrapup_stack, NULL); + free (wrapup_stack); + return false; + } + + current_input = wrapup_stack; + wrapup_stack = (struct obstack *) xmalloc (sizeof (struct obstack)); + obstack_init (wrapup_stack); + + isp = wsp; + wsp = NULL; + input_change = true; + + return true; +} + +/*-------------------------------------------------------------------. +| When a MACRO token is seen, next_token () uses init_macro_token () | +| to retrieve the value of the function pointer. | +`-------------------------------------------------------------------*/ + +static void +init_macro_token (token_data *td) +{ + if (isp->type != INPUT_MACRO) + { + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad call to init_macro_token ()")); + abort (); + } + + TOKEN_DATA_TYPE (td) = TOKEN_FUNC; + TOKEN_DATA_FUNC (td) = isp->u.func; +} + + +/*------------------------------------------------------------------------. +| Low level input is done a character at a time. The function peek_input | +| () is used to look at the next character in the input stream. At any | +| given time, it reads from the input_block on the top of the current | +| input stack. | +`------------------------------------------------------------------------*/ + +static int +peek_input (void) +{ + int ch; + input_block *block = isp; + + while (1) + { + if (block == NULL) + return CHAR_EOF; + + switch (block->type) + { + case INPUT_STRING: + ch = to_uchar (block->u.u_s.string[0]); + if (ch != '\0') + return ch; + break; + + case INPUT_FILE: + ch = getc (block->u.u_f.fp); + if (ch != EOF) + { + ungetc (ch, block->u.u_f.fp); + return ch; + } + block->u.u_f.end = true; + break; + + case INPUT_MACRO: + return CHAR_MACRO; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: input stack botch in peek_input ()")); + abort (); + } + block = block->prev; + } +} + +/*-------------------------------------------------------------------------. +| The function next_char () is used to read and advance the input to the | +| next character. It also manages line numbers for error messages, so | +| they do not get wrong, due to lookahead. The token consisting of a | +| newline alone is taken as belonging to the line it ends, and the current | +| line number is not incremented until the next character is read. | +| 99.9% of all calls will read from a string, so factor that out into a | +| macro for speed. | +`-------------------------------------------------------------------------*/ + +#define next_char() \ + (isp && isp->type == INPUT_STRING && isp->u.u_s.string[0] \ + && !input_change \ + ? to_uchar (*isp->u.u_s.string++) \ + : next_char_1 ()) + +static int +next_char_1 (void) +{ + int ch; + + while (1) + { + if (isp == NULL) + { + current_file = ""; + current_line = 0; + return CHAR_EOF; + } + + if (input_change) + { + current_file = isp->file; + current_line = isp->line; + input_change = false; + } + + switch (isp->type) + { + case INPUT_STRING: + ch = to_uchar (*isp->u.u_s.string++); + if (ch != '\0') + return ch; + break; + + case INPUT_FILE: + if (start_of_input_line) + { + start_of_input_line = false; + current_line = ++isp->line; + } + + /* If stdin is a terminal, calling getc after peek_input + already called it would make the user have to hit ^D + twice to quit. */ + ch = isp->u.u_f.end ? EOF : getc (isp->u.u_f.fp); + if (ch != EOF) + { + if (ch == '\n') + start_of_input_line = true; + return ch; + } + break; + + case INPUT_MACRO: + pop_input (); /* INPUT_MACRO input sources has only one + token */ + return CHAR_MACRO; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: input stack botch in next_char ()")); + abort (); + } + + /* End of input source --- pop one level. */ + pop_input (); + } +} + +/*------------------------------------------------------------------------. +| skip_line () simply discards all immediately following characters, upto | +| the first newline. It is only used from m4_dnl (). | +`------------------------------------------------------------------------*/ + +void +skip_line (void) +{ + int ch; + const char *file = current_file; + int line = current_line; + + while ((ch = next_char ()) != CHAR_EOF && ch != '\n') + ; + if (ch == CHAR_EOF) + /* current_file changed to "" if we see CHAR_EOF, use the + previous value we stored earlier. */ + M4ERROR_AT_LINE ((warning_status, 0, file, line, + "Warning: end of file treated as newline")); + /* On the rare occasion that dnl crosses include file boundaries + (either the input file did not end in a newline, or changeword + was used), calling next_char can update current_file and + current_line, and that update will be undone as we return to + expand_macro. This informs next_char to fix things again. */ + if (file != current_file || line != current_line) + input_change = true; +} + + +/*------------------------------------------------------------------. +| This function is for matching a string against a prefix of the | +| input stream. If the string matches the input and consume is | +| true, the input is discarded; otherwise any characters read are | +| pushed back again. The function is used only when multicharacter | +| quotes or comment delimiters are used. | +`------------------------------------------------------------------*/ + +static bool +match_input (const char *s, bool consume) +{ + int n; /* number of characters matched */ + int ch; /* input character */ + const char *t; + bool result = false; + + ch = peek_input (); + if (ch != to_uchar (*s)) + return false; /* fail */ + + if (s[1] == '\0') + { + if (consume) + (void) next_char (); + return true; /* short match */ + } + + (void) next_char (); + for (n = 1, t = s++; (ch = peek_input ()) == to_uchar (*s++); ) + { + (void) next_char (); + n++; + if (*s == '\0') /* long match */ + { + if (consume) + return true; + result = true; + break; + } + } + + /* Failed or shouldn't consume, push back input. */ + { + struct obstack *h = push_string_init (); + + /* `obstack_grow' may be macro evaluating its arg 1 several times. */ + obstack_grow (h, t, n); + } + push_string_finish (); + return result; +} + +/*--------------------------------------------------------------------. +| The macro MATCH() is used to match a string S against the input. | +| The first character is handled inline, for speed. Hopefully, this | +| will not hurt efficiency too much when single character quotes and | +| comment delimiters are used. If CONSUME, then CH is the result of | +| next_char, and a successful match will discard the matched string. | +| Otherwise, CH is the result of peek_char, and the input stream is | +| effectively unchanged. | +`--------------------------------------------------------------------*/ + +#define MATCH(ch, s, consume) \ + (to_uchar ((s)[0]) == (ch) \ + && (ch) != '\0' \ + && ((s)[1] == '\0' || (match_input ((s) + (consume), consume)))) + + +/*--------------------------------------------------------. +| Initialize input stacks, and quote/comment characters. | +`--------------------------------------------------------*/ + +void +input_init (void) +{ + current_file = ""; + current_line = 0; + + current_input = (struct obstack *) xmalloc (sizeof (struct obstack)); + obstack_init (current_input); + wrapup_stack = (struct obstack *) xmalloc (sizeof (struct obstack)); + obstack_init (wrapup_stack); + + obstack_init (&file_names); + + /* Allocate an object in the current chunk, so that obstack_free + will always work even if the first token parsed spills to a new + chunk. */ + obstack_init (&token_stack); + obstack_alloc (&token_stack, 1); + token_bottom = obstack_base (&token_stack); + + isp = NULL; + wsp = NULL; + next = NULL; + + start_of_input_line = false; + + lquote.string = xstrdup (DEF_LQUOTE); + lquote.length = strlen (lquote.string); + rquote.string = xstrdup (DEF_RQUOTE); + rquote.length = strlen (rquote.string); + bcomm.string = xstrdup (DEF_BCOMM); + bcomm.length = strlen (bcomm.string); + ecomm.string = xstrdup (DEF_ECOMM); + ecomm.length = strlen (ecomm.string); + +#ifdef ENABLE_CHANGEWORD + set_word_regexp (user_word_regexp); +#endif +} + + +/*------------------------------------------------------------------. +| Functions for setting quotes and comment delimiters. Used by | +| m4_changecom () and m4_changequote (). Pass NULL if the argument | +| was not present, to distinguish from an explicit empty string. | +`------------------------------------------------------------------*/ + +void +set_quotes (const char *lq, const char *rq) +{ + free (lquote.string); + free (rquote.string); + + /* POSIX states that with 0 arguments, the default quotes are used. + POSIX XCU ERN 112 states that behavior is implementation-defined + if there was only one argument, or if there is an empty string in + either position when there are two arguments. We allow an empty + left quote to disable quoting, but a non-empty left quote will + always create a non-empty right quote. See the texinfo for what + some other implementations do. */ + if (!lq) + { + lq = DEF_LQUOTE; + rq = DEF_RQUOTE; + } + else if (!rq || (*lq && !*rq)) + rq = DEF_RQUOTE; + + lquote.string = xstrdup (lq); + lquote.length = strlen (lquote.string); + rquote.string = xstrdup (rq); + rquote.length = strlen (rquote.string); +} + +void +set_comment (const char *bc, const char *ec) +{ + free (bcomm.string); + free (ecomm.string); + + /* POSIX requires no arguments to disable comments. It requires + empty arguments to be used as-is, but this is counter to + traditional behavior, because a non-null begin and null end makes + it impossible to end a comment. An aardvark has been filed: + http://www.opengroup.org/austin/mailarchives/ag-review/msg02168.html + This implementation assumes the aardvark will be approved. See + the texinfo for what some other implementations do. */ + if (!bc) + bc = ec = ""; + else if (!ec || (*bc && !*ec)) + ec = DEF_ECOMM; + + bcomm.string = xstrdup (bc); + bcomm.length = strlen (bcomm.string); + ecomm.string = xstrdup (ec); + ecomm.length = strlen (ecomm.string); +} + +#ifdef ENABLE_CHANGEWORD + +void +set_word_regexp (const char *regexp) +{ + int i; + char test[2]; + const char *msg; + struct re_pattern_buffer new_word_regexp; + + if (!*regexp || !strcmp (regexp, DEFAULT_WORD_REGEXP)) + { + default_word_regexp = true; + return; + } + + /* Dry run to see whether the new expression is compilable. */ + init_pattern_buffer (&new_word_regexp, NULL); + msg = re_compile_pattern (regexp, strlen (regexp), &new_word_regexp); + regfree (&new_word_regexp); + + if (msg != NULL) + { + M4ERROR ((warning_status, 0, + "bad regular expression `%s': %s", regexp, msg)); + return; + } + + /* If compilation worked, retry using the word_regexp struct. + Can't rely on struct assigns working, so redo the compilation. */ + regfree (&word_regexp); + msg = re_compile_pattern (regexp, strlen (regexp), &word_regexp); + re_set_registers (&word_regexp, ®s, regs.num_regs, regs.start, regs.end); + + if (msg != NULL) + { + M4ERROR ((EXIT_FAILURE, 0, + "INTERNAL ERROR: expression recompilation `%s': %s", + regexp, msg)); + } + + default_word_regexp = false; + + if (word_start == NULL) + word_start = (char *) xmalloc (256); + + word_start[0] = '\0'; + test[1] = '\0'; + for (i = 1; i < 256; i++) + { + test[0] = i; + word_start[i] = re_search (&word_regexp, test, 1, 0, 0, NULL) >= 0; + } +} + +#endif /* ENABLE_CHANGEWORD */ + + +/*--------------------------------------------------------------------. +| Parse and return a single token from the input stream. A token | +| can either be TOKEN_EOF, if the input_stack is empty; it can be | +| TOKEN_STRING for a quoted string; TOKEN_WORD for something that is | +| a potential macro name; and TOKEN_SIMPLE for any single character | +| that is not a part of any of the previous types. If LINE is not | +| NULL, set *LINE to the line where the token starts. | +| | +| Next_token () return the token type, and passes back a pointer to | +| the token data through TD. The token text is collected on the | +| obstack token_stack, which never contains more than one token text | +| at a time. The storage pointed to by the fields in TD is | +| therefore subject to change the next time next_token () is called. | +`--------------------------------------------------------------------*/ + +token_type +next_token (token_data *td, int *line) +{ + int ch; + int quote_level; + token_type type; +#ifdef ENABLE_CHANGEWORD + int startpos; + char *orig_text = NULL; +#endif + const char *file; + int dummy; + + obstack_free (&token_stack, token_bottom); + if (!line) + line = &dummy; + + /* Can't consume character until after CHAR_MACRO is handled. */ + ch = peek_input (); + if (ch == CHAR_EOF) + { +#ifdef DEBUG_INPUT + xfprintf (stderr, "next_token -> EOF\n"); +#endif + next_char (); + return TOKEN_EOF; + } + if (ch == CHAR_MACRO) + { + init_macro_token (td); + next_char (); +#ifdef DEBUG_INPUT + xfprintf (stderr, "next_token -> MACDEF (%s)\n", + find_builtin_by_addr (TOKEN_DATA_FUNC (td))->name); +#endif + return TOKEN_MACDEF; + } + + next_char (); /* Consume character we already peeked at. */ + file = current_file; + *line = current_line; + if (MATCH (ch, bcomm.string, true)) + { + obstack_grow (&token_stack, bcomm.string, bcomm.length); + while ((ch = next_char ()) != CHAR_EOF + && !MATCH (ch, ecomm.string, true)) + obstack_1grow (&token_stack, ch); + if (ch != CHAR_EOF) + obstack_grow (&token_stack, ecomm.string, ecomm.length); + else + /* current_file changed to "" if we see CHAR_EOF, use the + previous value we stored earlier. */ + M4ERROR_AT_LINE ((EXIT_FAILURE, 0, file, *line, + "ERROR: end of file in comment")); + + type = TOKEN_STRING; + } + else if (default_word_regexp && (isalpha (ch) || ch == '_')) + { + obstack_1grow (&token_stack, ch); + while ((ch = peek_input ()) != CHAR_EOF && (isalnum (ch) || ch == '_')) + { + obstack_1grow (&token_stack, ch); + (void) next_char (); + } + type = TOKEN_WORD; + } + +#ifdef ENABLE_CHANGEWORD + + else if (!default_word_regexp && word_start[ch]) + { + obstack_1grow (&token_stack, ch); + while (1) + { + ch = peek_input (); + if (ch == CHAR_EOF) + break; + obstack_1grow (&token_stack, ch); + startpos = re_search (&word_regexp, + (char *) obstack_base (&token_stack), + obstack_object_size (&token_stack), 0, 0, + ®s); + if (startpos != 0 || + regs.end [0] != obstack_object_size (&token_stack)) + { + *(((char *) obstack_base (&token_stack) + + obstack_object_size (&token_stack)) - 1) = '\0'; + break; + } + next_char (); + } + + obstack_1grow (&token_stack, '\0'); + orig_text = (char *) obstack_finish (&token_stack); + + if (regs.start[1] != -1) + obstack_grow (&token_stack,orig_text + regs.start[1], + regs.end[1] - regs.start[1]); + else + obstack_grow (&token_stack, orig_text,regs.end[0]); + + type = TOKEN_WORD; + } + +#endif /* ENABLE_CHANGEWORD */ + + else if (!MATCH (ch, lquote.string, true)) + { + switch (ch) + { + case '(': + type = TOKEN_OPEN; + break; + case ',': + type = TOKEN_COMMA; + break; + case ')': + type = TOKEN_CLOSE; + break; + default: + type = TOKEN_SIMPLE; + break; + } + obstack_1grow (&token_stack, ch); + } + else + { + bool fast = lquote.length == 1 && rquote.length == 1; + quote_level = 1; + while (1) + { + /* Try scanning a buffer first. */ + const char *buffer = (isp && isp->type == INPUT_STRING + ? isp->u.u_s.string : NULL); + if (buffer && *buffer) + { + size_t len = isp->u.u_s.end - buffer; + const char *p = buffer; + do + { + p = (char *) memchr2 (p, *lquote.string, *rquote.string, + buffer + len - p); + } + while (p && fast && (*p++ == *rquote.string + ? --quote_level : ++quote_level)); + if (p) + { + if (fast) + { + assert (!quote_level); + obstack_grow (&token_stack, buffer, p - buffer - 1); + isp->u.u_s.string += p - buffer; + break; + } + obstack_grow (&token_stack, buffer, p - buffer); + ch = to_uchar (*p); + isp->u.u_s.string += p - buffer + 1; + } + else + { + obstack_grow (&token_stack, buffer, len); + isp->u.u_s.string += len; + continue; + } + } + /* Fall back to a byte. */ + else + ch = next_char (); + if (ch == CHAR_EOF) + /* current_file changed to "" if we see CHAR_EOF, use + the previous value we stored earlier. */ + M4ERROR_AT_LINE ((EXIT_FAILURE, 0, file, *line, + "ERROR: end of file in string")); + + if (MATCH (ch, rquote.string, true)) + { + if (--quote_level == 0) + break; + obstack_grow (&token_stack, rquote.string, rquote.length); + } + else if (MATCH (ch, lquote.string, true)) + { + quote_level++; + obstack_grow (&token_stack, lquote.string, lquote.length); + } + else + obstack_1grow (&token_stack, ch); + } + type = TOKEN_STRING; + } + + obstack_1grow (&token_stack, '\0'); + + TOKEN_DATA_TYPE (td) = TOKEN_TEXT; + TOKEN_DATA_TEXT (td) = (char *) obstack_finish (&token_stack); +#ifdef ENABLE_CHANGEWORD + if (orig_text == NULL) + orig_text = TOKEN_DATA_TEXT (td); + TOKEN_DATA_ORIG_TEXT (td) = orig_text; +#endif +#ifdef DEBUG_INPUT + xfprintf (stderr, "next_token -> %s (%s)\n", + token_type_string (type), TOKEN_DATA_TEXT (td)); +#endif + return type; +} + +/*-----------------------------------------------. +| Peek at the next token from the input stream. | +`-----------------------------------------------*/ + +token_type +peek_token (void) +{ + token_type result; + int ch = peek_input (); + + if (ch == CHAR_EOF) + { + result = TOKEN_EOF; + } + else if (ch == CHAR_MACRO) + { + result = TOKEN_MACDEF; + } + else if (MATCH (ch, bcomm.string, false)) + { + result = TOKEN_STRING; + } + else if ((default_word_regexp && (isalpha (ch) || ch == '_')) +#ifdef ENABLE_CHANGEWORD + || (! default_word_regexp && word_start[ch]) +#endif /* ENABLE_CHANGEWORD */ + ) + { + result = TOKEN_WORD; + } + else if (MATCH (ch, lquote.string, false)) + { + result = TOKEN_STRING; + } + else + switch (ch) + { + case '(': + result = TOKEN_OPEN; + break; + case ',': + result = TOKEN_COMMA; + break; + case ')': + result = TOKEN_CLOSE; + break; + default: + result = TOKEN_SIMPLE; + } + +#ifdef DEBUG_INPUT + xfprintf (stderr, "peek_token -> %s\n", token_type_string (result)); +#endif /* DEBUG_INPUT */ + return result; +} + + +#ifdef DEBUG_INPUT + +static const char * +token_type_string (token_type t) +{ + switch (t) + { /* TOKSW */ + case TOKEN_EOF: + return "EOF"; + case TOKEN_STRING: + return "STRING"; + case TOKEN_WORD: + return "WORD"; + case TOKEN_OPEN: + return "OPEN"; + case TOKEN_COMMA: + return "COMMA"; + case TOKEN_CLOSE: + return "CLOSE"; + case TOKEN_SIMPLE: + return "SIMPLE"; + case TOKEN_MACDEF: + return "MACDEF"; + default: + abort (); + } + } + +static void +print_token (const char *s, token_type t, token_data *td) +{ + xfprintf (stderr, "%s: ", s); + switch (t) + { /* TOKSW */ + case TOKEN_OPEN: + case TOKEN_COMMA: + case TOKEN_CLOSE: + case TOKEN_SIMPLE: + xfprintf (stderr, "char:"); + break; + + case TOKEN_WORD: + xfprintf (stderr, "word:"); + break; + + case TOKEN_STRING: + xfprintf (stderr, "string:"); + break; + + case TOKEN_MACDEF: + xfprintf (stderr, "macro: %p\n", TOKEN_DATA_FUNC (td)); + break; + + case TOKEN_EOF: + xfprintf (stderr, "eof\n"); + break; + } + xfprintf (stderr, "\t\"%s\"\n", TOKEN_DATA_TEXT (td)); +} + +static void M4_GNUC_UNUSED +lex_debug (void) +{ + token_type t; + token_data td; + + while ((t = next_token (&td, NULL)) != TOKEN_EOF) + print_token ("lex", t, &td); +} +#endif /* DEBUG_INPUT */ diff --git a/coreseek/m4-1.4.13/src/input.o b/coreseek/m4-1.4.13/src/input.o new file mode 100644 index 0000000..8f36318 Binary files /dev/null and b/coreseek/m4-1.4.13/src/input.o differ diff --git a/coreseek/m4-1.4.13/src/m4 b/coreseek/m4-1.4.13/src/m4 new file mode 100755 index 0000000..018da01 Binary files /dev/null and b/coreseek/m4-1.4.13/src/m4 differ diff --git a/coreseek/m4-1.4.13/src/m4.c b/coreseek/m4-1.4.13/src/m4.c new file mode 100644 index 0000000..914655a --- /dev/null +++ b/coreseek/m4-1.4.13/src/m4.c @@ -0,0 +1,685 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, + 2007, 2008, 2009 Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "m4.h" + +#include +#include +#include + +#include "c-stack.h" +#include "progname.h" +#include "version-etc.h" + +#ifdef DEBUG_STKOVF +# include "assert.h" +#endif + +#define AUTHORS "Rene' Seindal" + +static void usage (int); + +/* Enable sync output for /lib/cpp (-s). */ +int sync_output = 0; + +/* Debug (-d[flags]). */ +int debug_level = 0; + +/* Hash table size (should be a prime) (-Hsize). */ +size_t hash_table_size = HASHMAX; + +/* Disable GNU extensions (-G). */ +int no_gnu_extensions = 0; + +/* Prefix all builtin functions by `m4_'. */ +int prefix_all_builtins = 0; + +/* Max length of arguments in trace output (-lsize). */ +int max_debug_argument_length = 0; + +/* Suppress warnings about missing arguments. */ +int suppress_warnings = 0; + +/* If true, then warnings affect exit status. */ +static bool fatal_warnings = false; + +/* If not zero, then value of exit status for warning diagnostics. */ +int warning_status = 0; + +/* Artificial limit for expansion_level in macro.c. */ +int nesting_limit = 1024; + +#ifdef ENABLE_CHANGEWORD +/* User provided regexp for describing m4 words. */ +const char *user_word_regexp = ""; +#endif + +/* Global catchall for any errors that should affect final error status, but + where we try to continue execution in the meantime. */ +int retcode; + +struct macro_definition +{ + struct macro_definition *next; + int code; /* D, U, s, t, '\1', or DEBUGFILE_OPTION. */ + const char *arg; +}; +typedef struct macro_definition macro_definition; + +/* Error handling functions. */ + +/*-----------------------. +| Wrapper around error. | +`-----------------------*/ + +void +m4_error (int status, int errnum, const char *format, ...) +{ + va_list args; + va_start (args, format); + verror_at_line (status, errnum, current_line ? current_file : NULL, + current_line, format, args); + if (fatal_warnings && ! retcode) + retcode = EXIT_FAILURE; +} + +/*-------------------------------. +| Wrapper around error_at_line. | +`-------------------------------*/ + +void +m4_error_at_line (int status, int errnum, const char *file, int line, + const char *format, ...) +{ + va_list args; + va_start (args, format); + verror_at_line (status, errnum, line ? file : NULL, line, format, args); + if (fatal_warnings && ! retcode) + retcode = EXIT_FAILURE; +} + +#ifndef SIGBUS +# define SIGBUS SIGILL +#endif + +#ifndef NSIG +# ifndef MAX +# define MAX(a,b) ((a) < (b) ? (b) : (a)) +# endif +# define NSIG (MAX (SIGABRT, MAX (SIGILL, MAX (SIGFPE, \ + MAX (SIGSEGV, SIGBUS)))) + 1) +#endif + +/* Pre-translated messages for program errors. Do not translate in + the signal handler, since gettext and strsignal are not + async-signal-safe. */ +static const char * volatile program_error_message; +static const char * volatile signal_message[NSIG]; + +/* Print a nicer message about any programmer errors, then exit. This + must be aysnc-signal safe, since it is executed as a signal + handler. If SIGNO is zero, this represents a stack overflow; in + that case, we return to allow c_stack_action to handle things. */ +static void +fault_handler (int signo) +{ + if (signo) + { + /* POSIX states that reading static memory is, in general, not + async-safe. However, the static variables that we read are + never modified once this handler is installed, so this + particular usage is safe. And it seems an oversight that + POSIX claims strlen is not async-safe. */ + write (STDERR_FILENO, program_name, strlen (program_name)); + write (STDERR_FILENO, ": ", 2); + write (STDERR_FILENO, program_error_message, + strlen (program_error_message)); + if (signal_message[signo]) + { + write (STDERR_FILENO, ": ", 2); + write (STDERR_FILENO, signal_message[signo], + strlen (signal_message[signo])); + } + write (STDERR_FILENO, "\n", 1); + _exit (EXIT_INTERNAL_ERROR); + } +} + + +/*---------------------------------------------. +| Print a usage message and exit with STATUS. | +`---------------------------------------------*/ + +static void +usage (int status) +{ + if (status != EXIT_SUCCESS) + xfprintf (stderr, "Try `%s --help' for more information.\n", program_name); + else + { + xprintf ("Usage: %s [OPTION]... [FILE]...\n", program_name); + fputs ("\ +Process macros in FILEs. If no FILE or if FILE is `-', standard input\n\ +is read.\n\ +", stdout); + fputs ("\ +\n\ +Mandatory or optional arguments to long options are mandatory or optional\n\ +for short options too.\n\ +\n\ +Operation modes:\n\ + --help display this help and exit\n\ + --version output version information and exit\n\ +", stdout); + xprintf ("\ + -E, --fatal-warnings once: warnings become errors, twice: stop\n\ + execution at first error\n\ + -i, --interactive unbuffer output, ignore interrupts\n\ + -P, --prefix-builtins force a `m4_' prefix to all builtins\n\ + -Q, --quiet, --silent suppress some warnings for builtins\n\ + --warn-macro-sequence[=REGEXP]\n\ + warn if macro definition matches REGEXP,\n\ + default %s\n\ +", DEFAULT_MACRO_SEQUENCE); +#ifdef ENABLE_CHANGEWORD + fputs ("\ + -W, --word-regexp=REGEXP use REGEXP for macro name syntax\n\ +", stdout); +#endif + fputs ("\ +\n\ +Preprocessor features:\n\ + -D, --define=NAME[=VALUE] define NAME as having VALUE, or empty\n\ + -I, --include=DIRECTORY append DIRECTORY to include path\n\ + -s, --synclines generate `#line NUM \"FILE\"' lines\n\ + -U, --undefine=NAME undefine NAME\n\ +", stdout); + puts (""); + xprintf (_("\ +Limits control:\n\ + -g, --gnu override -G to re-enable GNU extensions\n\ + -G, --traditional suppress all GNU extensions\n\ + -H, --hashsize=PRIME set symbol lookup hash table size [509]\n\ + -L, --nesting-limit=NUMBER change nesting limit, 0 for unlimited [%d]\n\ +"), nesting_limit); + puts (""); + fputs ("\ +Frozen state files:\n\ + -F, --freeze-state=FILE produce a frozen state on FILE at end\n\ + -R, --reload-state=FILE reload a frozen state from FILE at start\n\ +", stdout); + fputs ("\ +\n\ +Debugging:\n\ + -d, --debug[=FLAGS] set debug level (no FLAGS implies `aeq')\n\ + --debugfile[=FILE] redirect debug and trace output to FILE\n\ + (default stderr, discard if empty string)\n\ + -l, --arglength=NUM restrict macro tracing size\n\ + -t, --trace=NAME trace NAME when it is defined\n\ +", stdout); + fputs ("\ +\n\ +FLAGS is any of:\n\ + a show actual arguments\n\ + c show before collect, after collect and after call\n\ + e show expansion\n\ + f say current input file name\n\ + i show changes in input files\n\ + l say current input line number\n\ + p show results of path searches\n\ + q quote values as necessary, with a or e flag\n\ + t trace for all macro calls, not only traceon'ed\n\ + x add a unique macro call id, useful with c flag\n\ + V shorthand for all of the above flags\n\ +", stdout); + fputs ("\ +\n\ +If defined, the environment variable `M4PATH' is a colon-separated list\n\ +of directories included after any specified by `-I'.\n\ +", stdout); + fputs ("\ +\n\ +Exit status is 0 for success, 1 for failure, 63 for frozen file version\n\ +mismatch, or whatever value was passed to the m4exit macro.\n\ +", stdout); + emit_bug_reporting_address (); + } + exit (status); +} + +/*--------------------------------------. +| Decode options and launch execution. | +`--------------------------------------*/ + +/* For long options that have no equivalent short option, use a + non-character as a pseudo short option, starting with CHAR_MAX + 1. */ +enum +{ + DEBUGFILE_OPTION = CHAR_MAX + 1, /* no short opt */ + DIVERSIONS_OPTION, /* not quite -N, because of message */ + WARN_MACRO_SEQUENCE_OPTION, /* no short opt */ + + HELP_OPTION, /* no short opt */ + VERSION_OPTION /* no short opt */ +}; + +static const struct option long_options[] = +{ + {"arglength", required_argument, NULL, 'l'}, + {"debug", optional_argument, NULL, 'd'}, + {"define", required_argument, NULL, 'D'}, + {"error-output", required_argument, NULL, 'o'}, /* FIXME: deprecate in 2.0 */ + {"fatal-warnings", no_argument, NULL, 'E'}, + {"freeze-state", required_argument, NULL, 'F'}, + {"gnu", no_argument, NULL, 'g'}, + {"hashsize", required_argument, NULL, 'H'}, + {"include", required_argument, NULL, 'I'}, + {"interactive", no_argument, NULL, 'i'}, + {"nesting-limit", required_argument, NULL, 'L'}, + {"prefix-builtins", no_argument, NULL, 'P'}, + {"quiet", no_argument, NULL, 'Q'}, + {"reload-state", required_argument, NULL, 'R'}, + {"silent", no_argument, NULL, 'Q'}, + {"synclines", no_argument, NULL, 's'}, + {"trace", required_argument, NULL, 't'}, + {"traditional", no_argument, NULL, 'G'}, + {"undefine", required_argument, NULL, 'U'}, + {"word-regexp", required_argument, NULL, 'W'}, + + {"debugfile", optional_argument, NULL, DEBUGFILE_OPTION}, + {"diversions", required_argument, NULL, DIVERSIONS_OPTION}, + {"warn-macro-sequence", optional_argument, NULL, WARN_MACRO_SEQUENCE_OPTION}, + + {"help", no_argument, NULL, HELP_OPTION}, + {"version", no_argument, NULL, VERSION_OPTION}, + + { NULL, 0, NULL, 0 }, +}; + +/* Process a command line file NAME, and return true only if it was + stdin. */ +static void +process_file (const char *name) +{ + if (strcmp (name, "-") == 0) + { + /* If stdin is a terminal, we want to allow 'm4 - file -' + to read input from stdin twice, like GNU cat. Besides, + there is no point closing stdin before wrapped text, to + minimize bugs in syscmd called from wrapped text. */ + push_file (stdin, "stdin", false); + } + else + { + char *full_name; + FILE *fp = m4_path_search (name, &full_name); + if (fp == NULL) + { + error (0, errno, "cannot open `%s'", name); + /* Set the status to EXIT_FAILURE, even though we + continue to process files after a missing file. */ + retcode = EXIT_FAILURE; + return; + } + push_file (fp, full_name, true); + free (full_name); + } + expand_input (); +} + +/* POSIX requires only -D, -U, and -s; and says that the first two + must be recognized when interspersed with file names. Traditional + behavior also handles -s between files. Starting OPTSTRING with + '-' forces getopt_long to hand back file names as arguments to opt + '\1', rather than reordering the command line. */ +#ifdef ENABLE_CHANGEWORD +#define OPTSTRING "-B:D:EF:GH:I:L:N:PQR:S:T:U:W:d::egil:o:st:" +#else +#define OPTSTRING "-B:D:EF:GH:I:L:N:PQR:S:T:U:d::egil:o:st:" +#endif + +int +main (int argc, char *const *argv, char *const *envp) +{ + struct sigaction act; + macro_definition *head; /* head of deferred argument list */ + macro_definition *tail; + macro_definition *defn; + int optchar; /* option character */ + + macro_definition *defines; + bool interactive = false; + bool seen_file = false; + const char *debugfile = NULL; + const char *frozen_file_to_read = NULL; + const char *frozen_file_to_write = NULL; + const char *macro_sequence = ""; + + set_program_name (argv[0]); + retcode = EXIT_SUCCESS; + atexit (close_stdin); + + include_init (); + debug_init (); + + /* Stack overflow and program error handling. Ignore failure to + install a handler, since this is merely for improved output on + crash, and we should never crash ;). We install SIGBUS and + SIGSEGV handlers prior to using the c-stack module; depending on + the platform, c-stack will then override none, SIGSEGV, or both + handlers. */ + program_error_message + = xasprintf (_("internal error detected; please report this bug to <%s>"), + PACKAGE_BUGREPORT); + signal_message[SIGSEGV] = xstrdup (strsignal (SIGSEGV)); + signal_message[SIGABRT] = xstrdup (strsignal (SIGABRT)); + signal_message[SIGILL] = xstrdup (strsignal (SIGILL)); + signal_message[SIGFPE] = xstrdup (strsignal (SIGFPE)); + if (SIGBUS != SIGILL) + signal_message[SIGBUS] = xstrdup (strsignal (SIGBUS)); + sigemptyset (&act.sa_mask); + /* One-shot - if we fault while handling a fault, we want to revert + to default signal behavior. */ + act.sa_flags = SA_NODEFER | SA_RESETHAND; + act.sa_handler = fault_handler; + sigaction (SIGSEGV, &act, NULL); + sigaction (SIGABRT, &act, NULL); + sigaction (SIGILL, &act, NULL); + sigaction (SIGFPE, &act, NULL); + sigaction (SIGBUS, &act, NULL); + if (c_stack_action (fault_handler) == 0) + nesting_limit = 0; + +#ifdef DEBUG_STKOVF + /* Make it easier to test our fault handlers. Exporting M4_CRASH=0 + attempts a SIGSEGV, exporting it as 1 attempts an assertion + failure with a fallback to abort. */ + { + char *crash = getenv ("M4_CRASH"); + if (crash) + { + if (!atoi (crash)) + ++*(int *) 8; + assert (false); + abort (); + } + } +#endif /* DEBUG_STKOVF */ + + /* First, we decode the arguments, to size up tables and stuff. */ + head = tail = NULL; + + while ((optchar = getopt_long (argc, (char **) argv, OPTSTRING, + long_options, NULL)) != -1) + switch (optchar) + { + default: + usage (EXIT_FAILURE); + + case 'B': + case 'S': + case 'T': + /* Compatibility junk: options that other implementations + support, but which we ignore as no-ops and don't list in + --help. */ + error (0, 0, "Warning: `m4 -%c' may be removed in a future release", + optchar); + break; + + case 'N': + case DIVERSIONS_OPTION: + /* -N became an obsolete no-op in 1.4.x. */ + error (0, 0, "Warning: `m4 %s' is deprecated", + optchar == 'N' ? "-N" : "--diversions"); + break; + + case 'D': + case 'U': + case 's': + case 't': + case '\1': + case DEBUGFILE_OPTION: + /* Arguments that cannot be handled until later are accumulated. */ + + defn = (macro_definition *) xmalloc (sizeof (macro_definition)); + defn->code = optchar; + defn->arg = optarg; + defn->next = NULL; + + if (head == NULL) + head = defn; + else + tail->next = defn; + tail = defn; + + break; + + case 'E': + if (! fatal_warnings) + fatal_warnings = true; + else + warning_status = EXIT_FAILURE; + break; + + case 'F': + frozen_file_to_write = optarg; + break; + + case 'G': + no_gnu_extensions = 1; + break; + + case 'H': + hash_table_size = atol (optarg); + if (hash_table_size == 0) + hash_table_size = HASHMAX; + break; + + case 'I': + add_include_directory (optarg); + break; + + case 'L': + nesting_limit = atoi (optarg); + break; + + case 'P': + prefix_all_builtins = 1; + break; + + case 'Q': + suppress_warnings = 1; + break; + + case 'R': + frozen_file_to_read = optarg; + break; + +#ifdef ENABLE_CHANGEWORD + case 'W': + user_word_regexp = optarg; + break; +#endif + + case 'd': + debug_level = debug_decode (optarg); + if (debug_level < 0) + { + error (0, 0, "bad debug flags: `%s'", optarg); + debug_level = 0; + } + break; + + case 'e': + error (0, 0, "Warning: `m4 -e' is deprecated, use `-i' instead"); + /* fall through */ + case 'i': + interactive = true; + break; + + case 'g': + no_gnu_extensions = 0; + break; + + case 'l': + max_debug_argument_length = atoi (optarg); + if (max_debug_argument_length <= 0) + max_debug_argument_length = 0; + break; + + case 'o': + /* -o/--error-output are deprecated synonyms of --debugfile, + but don't issue a deprecation warning until autoconf 2.61 + or later is more widely established, as such a warning + would interfere with all earlier versions of autoconf. */ + /* Don't call debug_set_output here, as it has side effects. */ + debugfile = optarg; + break; + + case WARN_MACRO_SEQUENCE_OPTION: + /* Don't call set_macro_sequence here, as it can exit. + --warn-macro-sequence sets optarg to NULL (which uses the + default regexp); --warn-macro-sequence= sets optarg to "" + (which disables these warnings). */ + macro_sequence = optarg; + break; + + case VERSION_OPTION: + version_etc (stdout, PACKAGE, PACKAGE_NAME, VERSION, AUTHORS, NULL); + exit (EXIT_SUCCESS); + break; + + case HELP_OPTION: + usage (EXIT_SUCCESS); + break; + } + + defines = head; + + /* Do the basic initializations. */ + if (debugfile && !debug_set_output (debugfile)) + M4ERROR ((warning_status, errno, "cannot set debug file `%s'", debugfile)); + + input_init (); + output_init (); + symtab_init (); + set_macro_sequence (macro_sequence); + include_env_init (); + + if (frozen_file_to_read) + reload_frozen_state (frozen_file_to_read); + else + builtin_init (); + + /* Interactive mode means unbuffered output, and interrupts ignored. */ + + if (interactive) + { + signal (SIGINT, SIG_IGN); + setbuf (stdout, (char *) NULL); + } + + /* Handle deferred command line macro definitions. Must come after + initialization of the symbol table. */ + + while (defines != NULL) + { + macro_definition *next; + symbol *sym; + + switch (defines->code) + { + case 'D': + { + /* defines->arg is read-only, so we need a copy. */ + char *macro_name = xstrdup (defines->arg); + char *macro_value = strchr (macro_name, '='); + if (macro_value) + *macro_value++ = '\0'; + define_user_macro (macro_name, macro_value, SYMBOL_INSERT); + free (macro_name); + } + break; + + case 'U': + lookup_symbol (defines->arg, SYMBOL_DELETE); + break; + + case 't': + sym = lookup_symbol (defines->arg, SYMBOL_INSERT); + SYMBOL_TRACED (sym) = true; + break; + + case 's': + sync_output = 1; + break; + + case '\1': + seen_file = true; + process_file (defines->arg); + break; + + case DEBUGFILE_OPTION: + if (!debug_set_output (defines->arg)) + M4ERROR ((warning_status, errno, "cannot set debug file `%s'", + debugfile ? debugfile : _("stderr"))); + break; + + default: + M4ERROR ((0, 0, "INTERNAL ERROR: bad code in deferred arguments")); + abort (); + } + + next = defines->next; + free (defines); + defines = next; + } + + /* Handle remaining input files. Each file is pushed on the input, + and the input read. Wrapup text is handled separately later. */ + + if (optind == argc && !seen_file) + process_file ("-"); + else + for (; optind < argc; optind++) + process_file (argv[optind]); + + /* Now handle wrapup text. */ + + while (pop_wrapup ()) + expand_input (); + + /* Change debug stream back to stderr, to force flushing the debug + stream and detect any errors it might have encountered. The + three standard streams are closed by close_stdin. */ + debug_set_output (NULL); + + if (frozen_file_to_write) + produce_frozen_state (frozen_file_to_write); + else + { + make_diversion (0); + undivert_all (); + } + output_exit (); + free_macro_sequence (); + exit (retcode); +} diff --git a/coreseek/m4-1.4.13/src/m4.h b/coreseek/m4-1.4.13/src/m4.h new file mode 100644 index 0000000..d741ed9 --- /dev/null +++ b/coreseek/m4-1.4.13/src/m4.h @@ -0,0 +1,483 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, + 2007, 2008 Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* We use instead of "config.h" so that a compilation + using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h + (which it would do because it found this file in $srcdir). */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "binary-io.h" +#include "clean-temp.h" +#include "cloexec.h" +#include "close-stream.h" +#include "closein.h" +#include "dirname.h" +#include "error.h" +#include "exitfail.h" +#include "filenamecat.h" +#include "obstack.h" +#include "stdio--.h" +#include "stdlib--.h" +#include "unistd--.h" +#include "verror.h" +#include "xalloc.h" +#include "xprintf.h" +#include "xvasprintf.h" + +/* Canonicalize UNIX recognition macros. */ +#if defined unix || defined __unix || defined __unix__ \ + || defined _POSIX_VERSION || defined _POSIX2_VERSION \ + || defined __NetBSD__ || defined __OpenBSD__ \ + || defined __APPLE__ || defined __APPLE_CC__ +# define UNIX 1 +#endif + +/* Canonicalize Windows recognition macros. */ +#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ +# define W32_NATIVE 1 +#endif + +/* Canonicalize OS/2 recognition macro. */ +#ifdef __EMX__ +# define OS2 1 +# undef UNIX +#endif + +/* Used if any programmer error is detected (not possible, right?) */ +#define EXIT_INTERNAL_ERROR 2 + +/* Used for version mismatch, when -R detects a frozen file it can't parse. */ +#define EXIT_MISMATCH 63 + +/* No-op, for future gettext compatibility. */ +#define _(ARG) ARG + +/* Various declarations. */ + +struct string + { + char *string; /* characters of the string */ + size_t length; /* length of the string */ + }; +typedef struct string STRING; + +/* Memory allocation. */ +#define obstack_chunk_alloc xmalloc +#define obstack_chunk_free free + +/* Those must come first. */ +typedef struct token_data token_data; +typedef void builtin_func (struct obstack *, int, token_data **); + +/* Gnulib's stdbool doesn't work with bool bitfields. For nicer + debugging, use bool when we know it works, but use the more + portable unsigned int elsewhere. */ +#if __GNUC__ > 2 +typedef bool bool_bitfield; +#else +typedef unsigned int bool_bitfield; +#endif /* ! __GNUC__ */ + +/* Take advantage of GNU C compiler source level optimization hints, + using portable macros. */ +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 6) +# define M4_GNUC_ATTRIBUTE(args) __attribute__(args) +#else +# define M4_GNUC_ATTRIBUTE(args) +#endif /* __GNUC__ */ + +#define M4_GNUC_UNUSED M4_GNUC_ATTRIBUTE((__unused__)) +#define M4_GNUC_PRINTF(fmt, arg) \ + M4_GNUC_ATTRIBUTE((__format__ (__printf__, fmt, arg))) + +/* File: m4.c --- global definitions. */ + +/* Option flags. */ +extern int sync_output; /* -s */ +extern int debug_level; /* -d */ +extern size_t hash_table_size; /* -H */ +extern int no_gnu_extensions; /* -G */ +extern int prefix_all_builtins; /* -P */ +extern int max_debug_argument_length; /* -l */ +extern int suppress_warnings; /* -Q */ +extern int warning_status; /* -E */ +extern int nesting_limit; /* -L */ +#ifdef ENABLE_CHANGEWORD +extern const char *user_word_regexp; /* -W */ +#endif + +/* Error handling. */ +extern int retcode; +extern const char *program_name; + +void m4_error (int, int, const char *, ...) M4_GNUC_PRINTF(3, 4); +void m4_error_at_line (int, int, const char *, int, + const char *, ...) M4_GNUC_PRINTF(5, 6); + +#define M4ERROR(Arglist) (m4_error Arglist) +#define M4ERROR_AT_LINE(Arglist) (m4_error_at_line Arglist) + + +/* File: debug.c --- debugging and tracing function. */ + +extern FILE *debug; + +/* The value of debug_level is a bitmask of the following. */ + +/* a: show arglist in trace output */ +#define DEBUG_TRACE_ARGS 1 +/* e: show expansion in trace output */ +#define DEBUG_TRACE_EXPANSION 2 +/* q: quote args and expansion in trace output */ +#define DEBUG_TRACE_QUOTE 4 +/* t: trace all macros -- overrides trace{on,off} */ +#define DEBUG_TRACE_ALL 8 +/* l: add line numbers to trace output */ +#define DEBUG_TRACE_LINE 16 +/* f: add file name to trace output */ +#define DEBUG_TRACE_FILE 32 +/* p: trace path search of include files */ +#define DEBUG_TRACE_PATH 64 +/* c: show macro call before args collection */ +#define DEBUG_TRACE_CALL 128 +/* i: trace changes of input files */ +#define DEBUG_TRACE_INPUT 256 +/* x: add call id to trace output */ +#define DEBUG_TRACE_CALLID 512 + +/* V: very verbose -- print everything */ +#define DEBUG_TRACE_VERBOSE 1023 +/* default flags -- equiv: aeq */ +#define DEBUG_TRACE_DEFAULT 7 + +#define DEBUG_PRINT1(Fmt, Arg1) \ + do \ + { \ + if (debug != NULL) \ + xfprintf (debug, Fmt, Arg1); \ + } \ + while (0) + +#define DEBUG_PRINT3(Fmt, Arg1, Arg2, Arg3) \ + do \ + { \ + if (debug != NULL) \ + xfprintf (debug, Fmt, Arg1, Arg2, Arg3); \ + } \ + while (0) + +#define DEBUG_MESSAGE(Fmt) \ + do \ + { \ + if (debug != NULL) \ + { \ + debug_message_prefix (); \ + xfprintf (debug, Fmt); \ + putc ('\n', debug); \ + } \ + } \ + while (0) + +#define DEBUG_MESSAGE1(Fmt, Arg1) \ + do \ + { \ + if (debug != NULL) \ + { \ + debug_message_prefix (); \ + xfprintf (debug, Fmt, Arg1); \ + putc ('\n', debug); \ + } \ + } \ + while (0) + +#define DEBUG_MESSAGE2(Fmt, Arg1, Arg2) \ + do \ + { \ + if (debug != NULL) \ + { \ + debug_message_prefix (); \ + xfprintf (debug, Fmt, Arg1, Arg2); \ + putc ('\n', debug); \ + } \ + } \ + while (0) + +void debug_init (void); +int debug_decode (const char *); +void debug_flush_files (void); +bool debug_set_output (const char *); +void debug_message_prefix (void); + +void trace_prepre (const char *, int); +void trace_pre (const char *, int, int, token_data **); +void trace_post (const char *, int, int, token_data **, const char *); + +/* File: input.c --- lexical definitions. */ + +/* Various different token types. */ +enum token_type +{ + TOKEN_EOF, /* end of file */ + TOKEN_STRING, /* a quoted string or comment */ + TOKEN_WORD, /* an identifier */ + TOKEN_OPEN, /* ( */ + TOKEN_COMMA, /* , */ + TOKEN_CLOSE, /* ) */ + TOKEN_SIMPLE, /* any other single character */ + TOKEN_MACDEF /* a macro's definition (see "defn") */ +}; + +/* The data for a token, a macro argument, and a macro definition. */ +enum token_data_type +{ + TOKEN_VOID, + TOKEN_TEXT, + TOKEN_FUNC +}; + +struct token_data +{ + enum token_data_type type; + union + { + struct + { + char *text; +#ifdef ENABLE_CHANGEWORD + char *original_text; +#endif + } + u_t; + builtin_func *func; + } + u; +}; + +#define TOKEN_DATA_TYPE(Td) ((Td)->type) +#define TOKEN_DATA_TEXT(Td) ((Td)->u.u_t.text) +#ifdef ENABLE_CHANGEWORD +# define TOKEN_DATA_ORIG_TEXT(Td) ((Td)->u.u_t.original_text) +#endif +#define TOKEN_DATA_FUNC(Td) ((Td)->u.func) + +typedef enum token_type token_type; +typedef enum token_data_type token_data_type; + +void input_init (void); +token_type peek_token (void); +token_type next_token (token_data *, int *); +void skip_line (void); + +/* push back input */ +void push_file (FILE *, const char *, bool); +void push_macro (builtin_func *); +struct obstack *push_string_init (void); +const char *push_string_finish (void); +void push_wrapup (const char *); +bool pop_wrapup (void); + +/* current input file, and line */ +extern const char *current_file; +extern int current_line; + +/* left and right quote, begin and end comment */ +extern STRING bcomm, ecomm; +extern STRING lquote, rquote; + +#define DEF_LQUOTE "`" +#define DEF_RQUOTE "\'" +#define DEF_BCOMM "#" +#define DEF_ECOMM "\n" + +void set_quotes (const char *, const char *); +void set_comment (const char *, const char *); +#ifdef ENABLE_CHANGEWORD +void set_word_regexp (const char *); +#endif + +/* File: output.c --- output functions. */ +extern int current_diversion; +extern int output_current_line; + +void output_init (void); +void output_exit (void); +void output_text (const char *, int); +void shipout_text (struct obstack *, const char *, int, int); +void make_diversion (int); +void insert_diversion (int); +void insert_file (FILE *); +void freeze_diversions (FILE *); + +/* File symtab.c --- symbol table definitions. */ + +/* Operation modes for lookup_symbol (). */ +enum symbol_lookup +{ + SYMBOL_LOOKUP, + SYMBOL_INSERT, + SYMBOL_DELETE, + SYMBOL_PUSHDEF, + SYMBOL_POPDEF +}; + +/* Symbol table entry. */ +struct symbol +{ + struct symbol *next; + bool_bitfield traced : 1; + bool_bitfield shadowed : 1; + bool_bitfield macro_args : 1; + bool_bitfield blind_no_args : 1; + bool_bitfield deleted : 1; + int pending_expansions; + + char *name; + token_data data; +}; + +#define SYMBOL_NEXT(S) ((S)->next) +#define SYMBOL_TRACED(S) ((S)->traced) +#define SYMBOL_SHADOWED(S) ((S)->shadowed) +#define SYMBOL_MACRO_ARGS(S) ((S)->macro_args) +#define SYMBOL_BLIND_NO_ARGS(S) ((S)->blind_no_args) +#define SYMBOL_DELETED(S) ((S)->deleted) +#define SYMBOL_PENDING_EXPANSIONS(S) ((S)->pending_expansions) +#define SYMBOL_NAME(S) ((S)->name) +#define SYMBOL_TYPE(S) (TOKEN_DATA_TYPE (&(S)->data)) +#define SYMBOL_TEXT(S) (TOKEN_DATA_TEXT (&(S)->data)) +#define SYMBOL_FUNC(S) (TOKEN_DATA_FUNC (&(S)->data)) + +typedef enum symbol_lookup symbol_lookup; +typedef struct symbol symbol; +typedef void hack_symbol (symbol *, void *); + +#define HASHMAX 509 /* default, overridden by -Hsize */ + +extern symbol **symtab; + +void free_symbol (symbol *sym); +void symtab_init (void); +symbol *lookup_symbol (const char *, symbol_lookup); +void hack_all_symbols (hack_symbol *, void *); + +/* File: macro.c --- macro expansion. */ + +void expand_input (void); +void call_macro (symbol *, int, token_data **, struct obstack *); + +/* File: builtin.c --- builtins. */ + +struct builtin +{ + const char *name; + bool_bitfield gnu_extension : 1; + bool_bitfield groks_macro_args : 1; + bool_bitfield blind_if_no_args : 1; + builtin_func *func; +}; + +struct predefined +{ + const char *unix_name; + const char *gnu_name; + const char *func; +}; + +typedef struct builtin builtin; +typedef struct predefined predefined; +struct re_pattern_buffer; +struct re_registers; + +/* The default sequence detects multi-digit parameters (obsolete after + 1.4.x), and any use of extended arguments with the default ${} + syntax (new in 2.0). */ +#define DEFAULT_MACRO_SEQUENCE "\\$\\({[^}]*}\\|[0-9][0-9]+\\)" + +void builtin_init (void); +void define_builtin (const char *, const builtin *, symbol_lookup); +void set_macro_sequence (const char *); +void free_macro_sequence (void); +void define_user_macro (const char *, const char *, symbol_lookup); +void undivert_all (void); +void expand_user_macro (struct obstack *, symbol *, int, token_data **); +void m4_placeholder (struct obstack *, int, token_data **); +void init_pattern_buffer (struct re_pattern_buffer *, struct re_registers *); +const char *ntoa (int32_t, int); + +const builtin *find_builtin_by_addr (builtin_func *); +const builtin *find_builtin_by_name (const char *); + +/* File: path.c --- path search for include files. */ + +void include_init (void); +void include_env_init (void); +void add_include_directory (const char *); +FILE *m4_path_search (const char *, char **); + +/* File: eval.c --- expression evaluation. */ + +bool evaluate (const char *, int32_t *); + +/* File: format.c --- printf like formatting. */ + +void expand_format (struct obstack *, int, token_data **); + +/* File: freeze.c --- frozen state files. */ + +void produce_frozen_state (const char *); +void reload_frozen_state (const char *); + +/* Debugging the memory allocator. */ + +#ifdef WITH_DMALLOC +# define DMALLOC_FUNC_CHECK +# include +#endif + +/* Other debug stuff. */ + +#ifdef DEBUG +# define DEBUG_INCL 1 +# define DEBUG_INPUT 1 +# define DEBUG_MACRO 1 +# define DEBUG_OUTPUT 1 +# define DEBUG_STKOVF 1 +# define DEBUG_SYM 1 +#endif + +/* Convert a possibly-signed character to an unsigned character. This is + a bit safer than casting to unsigned char, since it catches some type + errors that the cast doesn't. */ +#if HAVE_INLINE +static inline unsigned char to_uchar (char ch) { return ch; } +#else +# define to_uchar(C) ((unsigned char) (C)) +#endif diff --git a/coreseek/m4-1.4.13/src/m4.o b/coreseek/m4-1.4.13/src/m4.o new file mode 100644 index 0000000..4c53f90 Binary files /dev/null and b/coreseek/m4-1.4.13/src/m4.o differ diff --git a/coreseek/m4-1.4.13/src/macro.c b/coreseek/m4-1.4.13/src/macro.c new file mode 100644 index 0000000..f9c5fe1 --- /dev/null +++ b/coreseek/m4-1.4.13/src/macro.c @@ -0,0 +1,387 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2006, 2007 Free + Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* This file contains the functions, that performs the basic argument + parsing and macro expansion. */ + +#include "m4.h" + +static void expand_macro (symbol *); +static void expand_token (struct obstack *, token_type, token_data *, int); + +/* Current recursion level in expand_macro (). */ +int expansion_level = 0; + +/* The number of the current call of expand_macro (). */ +static int macro_call_id = 0; + +/* The shared stack of collected arguments for macro calls; as each + argument is collected, it is finished and its location stored in + argv_stack. Normally, this stack can be used simultaneously by + multiple macro calls; the exception is when an outer macro has + generated some text, then calls a nested macro, in which case the + nested macro must use a local stack to leave the unfinished text + alone. Too bad obstack.h does not provide an easy way to reopen a + finished object for further growth, but in practice this does not + hurt us too much. */ +static struct obstack argc_stack; + +/* The shared stack of pointers to collected arguments for macro + calls. This object is never finished; we exploit the fact that + obstack_blank is documented to take a negative size to reduce the + size again. */ +static struct obstack argv_stack; + +/*----------------------------------------------------------------------. +| This function read all input, and expands each token, one at a time. | +`----------------------------------------------------------------------*/ + +void +expand_input (void) +{ + token_type t; + token_data td; + int line; + + obstack_init (&argc_stack); + obstack_init (&argv_stack); + + while ((t = next_token (&td, &line)) != TOKEN_EOF) + expand_token ((struct obstack *) NULL, t, &td, line); + + obstack_free (&argc_stack, NULL); + obstack_free (&argv_stack, NULL); +} + + +/*------------------------------------------------------------------------. +| Expand one token, according to its type. Potential macro names | +| (TOKEN_WORD) are looked up in the symbol table, to see if they have a | +| macro definition. If they have, they are expanded as macros, otherwise | +| the text are just copied to the output. | +`------------------------------------------------------------------------*/ + +static void +expand_token (struct obstack *obs, token_type t, token_data *td, int line) +{ + symbol *sym; + + switch (t) + { /* TOKSW */ + case TOKEN_EOF: + case TOKEN_MACDEF: + break; + + case TOKEN_OPEN: + case TOKEN_COMMA: + case TOKEN_CLOSE: + case TOKEN_SIMPLE: + case TOKEN_STRING: + shipout_text (obs, TOKEN_DATA_TEXT (td), strlen (TOKEN_DATA_TEXT (td)), + line); + break; + + case TOKEN_WORD: + sym = lookup_symbol (TOKEN_DATA_TEXT (td), SYMBOL_LOOKUP); + if (sym == NULL || SYMBOL_TYPE (sym) == TOKEN_VOID + || (SYMBOL_TYPE (sym) == TOKEN_FUNC + && SYMBOL_BLIND_NO_ARGS (sym) + && peek_token () != TOKEN_OPEN)) + { +#ifdef ENABLE_CHANGEWORD + shipout_text (obs, TOKEN_DATA_ORIG_TEXT (td), + strlen (TOKEN_DATA_ORIG_TEXT (td)), line); +#else + shipout_text (obs, TOKEN_DATA_TEXT (td), + strlen (TOKEN_DATA_TEXT (td)), line); +#endif + } + else + expand_macro (sym); + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad token type in expand_token ()")); + abort (); + } +} + + +/*-------------------------------------------------------------------------. +| This function parses one argument to a macro call. It expects the first | +| left parenthesis, or the separating comma to have been read by the | +| caller. It skips leading whitespace, and reads and expands tokens, | +| until it finds a comma or an right parenthesis at the same level of | +| parentheses. It returns a flag indicating whether the argument read are | +| the last for the active macro call. The argument are build on the | +| obstack OBS, indirectly through expand_token (). | +`-------------------------------------------------------------------------*/ + +static bool +expand_argument (struct obstack *obs, token_data *argp) +{ + token_type t; + token_data td; + char *text; + int paren_level; + const char *file = current_file; + int line = current_line; + + TOKEN_DATA_TYPE (argp) = TOKEN_VOID; + + /* Skip leading white space. */ + do + { + t = next_token (&td, NULL); + } + while (t == TOKEN_SIMPLE && isspace (to_uchar (*TOKEN_DATA_TEXT (&td)))); + + paren_level = 0; + + while (1) + { + + switch (t) + { /* TOKSW */ + case TOKEN_COMMA: + case TOKEN_CLOSE: + if (paren_level == 0) + { + /* The argument MUST be finished, whether we want it or not. */ + obstack_1grow (obs, '\0'); + text = (char *) obstack_finish (obs); + + if (TOKEN_DATA_TYPE (argp) == TOKEN_VOID) + { + TOKEN_DATA_TYPE (argp) = TOKEN_TEXT; + TOKEN_DATA_TEXT (argp) = text; + } + return t == TOKEN_COMMA; + } + /* fallthru */ + case TOKEN_OPEN: + case TOKEN_SIMPLE: + text = TOKEN_DATA_TEXT (&td); + + if (*text == '(') + paren_level++; + else if (*text == ')') + paren_level--; + expand_token (obs, t, &td, line); + break; + + case TOKEN_EOF: + /* current_file changed to "" if we see TOKEN_EOF, use the + previous value we stored earlier. */ + M4ERROR_AT_LINE ((EXIT_FAILURE, 0, file, line, + "ERROR: end of file in argument list")); + break; + + case TOKEN_WORD: + case TOKEN_STRING: + expand_token (obs, t, &td, line); + break; + + case TOKEN_MACDEF: + if (obstack_object_size (obs) == 0) + { + TOKEN_DATA_TYPE (argp) = TOKEN_FUNC; + TOKEN_DATA_FUNC (argp) = TOKEN_DATA_FUNC (&td); + } + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad token type in expand_argument ()")); + abort (); + } + + t = next_token (&td, NULL); + } +} + +/*-------------------------------------------------------------------------. +| Collect all the arguments to a call of the macro SYM. The arguments are | +| stored on the obstack ARGUMENTS and a table of pointers to the arguments | +| on the obstack ARGPTR. | +`-------------------------------------------------------------------------*/ + +static void +collect_arguments (symbol *sym, struct obstack *argptr, + struct obstack *arguments) +{ + token_data td; + token_data *tdp; + bool more_args; + bool groks_macro_args = SYMBOL_MACRO_ARGS (sym); + + TOKEN_DATA_TYPE (&td) = TOKEN_TEXT; + TOKEN_DATA_TEXT (&td) = SYMBOL_NAME (sym); + tdp = (token_data *) obstack_copy (arguments, &td, sizeof td); + obstack_ptr_grow (argptr, tdp); + + if (peek_token () == TOKEN_OPEN) + { + next_token (&td, NULL); /* gobble parenthesis */ + do + { + more_args = expand_argument (arguments, &td); + + if (!groks_macro_args && TOKEN_DATA_TYPE (&td) == TOKEN_FUNC) + { + TOKEN_DATA_TYPE (&td) = TOKEN_TEXT; + TOKEN_DATA_TEXT (&td) = (char *) ""; + } + tdp = (token_data *) obstack_copy (arguments, &td, sizeof td); + obstack_ptr_grow (argptr, tdp); + } + while (more_args); + } +} + + +/*------------------------------------------------------------------------. +| The actual call of a macro is handled by call_macro (). call_macro () | +| is passed a symbol SYM, whose type is used to call either a builtin | +| function, or the user macro expansion function expand_user_macro () | +| (lives in builtin.c). There are ARGC arguments to the call, stored in | +| the ARGV table. The expansion is left on the obstack EXPANSION. Macro | +| tracing is also handled here. | +`------------------------------------------------------------------------*/ + +void +call_macro (symbol *sym, int argc, token_data **argv, + struct obstack *expansion) +{ + switch (SYMBOL_TYPE (sym)) + { + case TOKEN_FUNC: + (*SYMBOL_FUNC (sym)) (expansion, argc, argv); + break; + + case TOKEN_TEXT: + expand_user_macro (expansion, sym, argc, argv); + break; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: bad symbol type in call_macro ()")); + abort (); + } +} + +/*-------------------------------------------------------------------------. +| The macro expansion is handled by expand_macro (). It parses the | +| arguments, using collect_arguments (), and builds a table of pointers to | +| the arguments. The arguments themselves are stored on a local obstack. | +| Expand_macro () uses call_macro () to do the call of the macro. | +| | +| Expand_macro () is potentially recursive, since it calls expand_argument | +| (), which might call expand_token (), which might call expand_macro (). | +`-------------------------------------------------------------------------*/ + +static void +expand_macro (symbol *sym) +{ + struct obstack arguments; /* Alternate obstack if argc_stack is busy. */ + unsigned argv_base; /* Size of argv_stack on entry. */ + bool use_argc_stack = true; /* Whether argc_stack is safe. */ + token_data **argv; + int argc; + struct obstack *expansion; + const char *expanded; + bool traced; + int my_call_id; + + /* Report errors at the location where the open parenthesis (if any) + was found, but after expansion, restore global state back to the + location of the close parenthesis. This is safe since we + guarantee that macro expansion does not alter the state of + current_file/current_line (dnl, include, and sinclude are special + cased in the input engine to ensure this fact). */ + const char *loc_open_file = current_file; + int loc_open_line = current_line; + const char *loc_close_file; + int loc_close_line; + + SYMBOL_PENDING_EXPANSIONS (sym)++; + expansion_level++; + if (nesting_limit > 0 && expansion_level > nesting_limit) + M4ERROR ((EXIT_FAILURE, 0, + "recursion limit of %d exceeded, use -L to change it", + nesting_limit)); + + macro_call_id++; + my_call_id = macro_call_id; + + traced = (debug_level & DEBUG_TRACE_ALL) || SYMBOL_TRACED (sym); + + argv_base = obstack_object_size (&argv_stack); + if (obstack_object_size (&argc_stack) > 0) + { + /* We cannot use argc_stack if this is a nested invocation, and an + outer invocation has an unfinished argument being + collected. */ + obstack_init (&arguments); + use_argc_stack = false; + } + + if (traced && (debug_level & DEBUG_TRACE_CALL)) + trace_prepre (SYMBOL_NAME (sym), my_call_id); + + collect_arguments (sym, &argv_stack, + use_argc_stack ? &argc_stack : &arguments); + + argc = ((obstack_object_size (&argv_stack) - argv_base) + / sizeof (token_data *)); + argv = (token_data **) ((char *) obstack_base (&argv_stack) + argv_base); + + loc_close_file = current_file; + loc_close_line = current_line; + current_file = loc_open_file; + current_line = loc_open_line; + + if (traced) + trace_pre (SYMBOL_NAME (sym), my_call_id, argc, argv); + + expansion = push_string_init (); + call_macro (sym, argc, argv, expansion); + expanded = push_string_finish (); + + if (traced) + trace_post (SYMBOL_NAME (sym), my_call_id, argc, argv, expanded); + + current_file = loc_close_file; + current_line = loc_close_line; + + --expansion_level; + --SYMBOL_PENDING_EXPANSIONS (sym); + + if (SYMBOL_DELETED (sym)) + free_symbol (sym); + + if (use_argc_stack) + obstack_free (&argc_stack, argv[0]); + else + obstack_free (&arguments, NULL); + obstack_blank (&argv_stack, -argc * sizeof (token_data *)); +} diff --git a/coreseek/m4-1.4.13/src/macro.o b/coreseek/m4-1.4.13/src/macro.o new file mode 100644 index 0000000..ff4c563 Binary files /dev/null and b/coreseek/m4-1.4.13/src/macro.o differ diff --git a/coreseek/m4-1.4.13/src/output.c b/coreseek/m4-1.4.13/src/output.c new file mode 100644 index 0000000..a39d1e5 --- /dev/null +++ b/coreseek/m4-1.4.13/src/output.c @@ -0,0 +1,1013 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006, + 2007, 2008, 2009 Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "m4.h" + +#include +#include + +#include "gl_avltree_oset.h" + +/* Size of initial in-memory buffer size for diversions. Small diversions + would usually fit in. */ +#define INITIAL_BUFFER_SIZE 512 + +/* Maximum value for the total of all in-memory buffer sizes for + diversions. */ +#define MAXIMUM_TOTAL_SIZE (512 * 1024) + +/* Size of buffer size to use while copying files. */ +#define COPY_BUFFER_SIZE (32 * 512) + +/* Output functions. Most of the complexity is for handling cpp like + sync lines. + + This code is fairly entangled with the code in input.c, and maybe it + belongs there? */ + +typedef struct temp_dir m4_temp_dir; + +/* When part of diversion_table, each struct m4_diversion either + represents an open file (zero size, non-NULL u.file), an in-memory + buffer (non-zero size, non-NULL u.buffer), or an unused placeholder + diversion (zero size, u is NULL, non-zero used indicates that a + file has been created). When not part of diversion_table, u.next + is a pointer to the free_list chain. */ + +typedef struct m4_diversion m4_diversion; + +struct m4_diversion + { + union + { + FILE *file; /* Diversion file on disk. */ + char *buffer; /* Malloc'd diversion buffer. */ + m4_diversion *next; /* Free-list pointer */ + } u; + int divnum; /* Which diversion this represents. */ + int size; /* Usable size before reallocation. */ + int used; /* Used buffer length, or tmp file exists. */ + }; + +/* Table of diversions 1 through INT_MAX. */ +static gl_oset_t diversion_table; + +/* Diversion 0 (not part of diversion_table). */ +static m4_diversion div0; + +/* Linked list of reclaimed diversion storage. */ +static m4_diversion *free_list; + +/* Obstack from which diversion storage is allocated. */ +static struct obstack diversion_storage; + +/* Total size of all in-memory buffer sizes. */ +static int total_buffer_size; + +/* The number of the currently active diversion. This variable is + maintained for the `divnum' builtin function. */ +int current_diversion; + +/* Current output diversion, NULL if output is being currently + discarded. output_diversion->u is guaranteed non-NULL except when + the diversion has never been used; use size to determine if it is a + malloc'd buffer or a FILE. output_diversion->used is 0 if u.file + is stdout, and non-zero if this is a malloc'd buffer or a temporary + diversion file. */ +static m4_diversion *output_diversion; + +/* Cache of output_diversion->u.file, only valid when + output_diversion->size is 0. */ +static FILE *output_file; + +/* Cache of output_diversion->u.buffer + output_diversion->used, only + valid when output_diversion->size is non-zero. */ +static char *output_cursor; + +/* Cache of output_diversion->size - output_diversion->used, only + valid when output_diversion->size is non-zero. */ +static int output_unused; + +/* Number of input line we are generating output for. */ +int output_current_line; + +/* Temporary directory holding all spilled diversion files. */ +static m4_temp_dir *output_temp_dir; + +/* Cache of most recently used spilled diversion files. */ +static FILE *tmp_file1; +static FILE *tmp_file2; + +/* Diversions that own tmp_file, or 0. */ +static int tmp_file1_owner; +static int tmp_file2_owner; + +/* True if tmp_file2 is more recently used. */ +static bool tmp_file2_recent; + + +/* Internal routines. */ + +/* Callback for comparing list elements ELT1 and ELT2 for order in + diversion_table. */ +static int +cmp_diversion_CB (const void *elt1, const void *elt2) +{ + const m4_diversion *d1 = (const m4_diversion *) elt1; + const m4_diversion *d2 = (const m4_diversion *) elt2; + /* No need to worry about overflow, since we don't create diversions + with negative divnum. */ + return d1->divnum - d2->divnum; +} + +/* Callback for comparing list element ELT against THRESHOLD. */ +static bool +threshold_diversion_CB (const void *elt, const void *threshold) +{ + const m4_diversion *diversion = (const m4_diversion *) elt; + /* No need to worry about overflow, since we don't create diversions + with negative divnum. */ + return diversion->divnum >= *(const int *) threshold; +} + +/* Clean up any temporary directory. Designed for use as an atexit + handler, where it is not safe to call exit() recursively; so this + calls _exit if a problem is encountered. */ +static void +cleanup_tmpfile (void) +{ + /* Close any open diversions. */ + bool fail = false; + + if (diversion_table) + { + const void *elt; + gl_oset_iterator_t iter = gl_oset_iterator (diversion_table); + while (gl_oset_iterator_next (&iter, &elt)) + { + m4_diversion *diversion = (m4_diversion *) elt; + if (!diversion->size && diversion->u.file + && close_stream_temp (diversion->u.file) != 0) + { + M4ERROR ((0, errno, + "cannot clean temporary file for diversion")); + fail = true; + } + } + gl_oset_iterator_free (&iter); + } + + /* Clean up the temporary directory. */ + if (cleanup_temp_dir (output_temp_dir) != 0) + fail = true; + if (fail) + _exit (exit_failure); +} + +/* Convert DIVNUM into a temporary file name for use in m4_tmp*. */ +static const char * +m4_tmpname (int divnum) +{ + static char *buffer; + static char *tail; + if (buffer == NULL) + { + tail = xasprintf ("%s/m4-%d", output_temp_dir->dir_name, INT_MAX); + buffer = obstack_copy0 (&diversion_storage, tail, strlen (tail)); + free (tail); + tail = strrchr (buffer, '-') + 1; + } + assert (0 < divnum); + sprintf (tail, "%d", divnum); + return buffer; +} + +/* Create a temporary file for diversion DIVNUM open for reading and + writing in a secure temp directory. The file will be automatically + closed and deleted on a fatal signal. The file can be closed and + reopened with m4_tmpclose and m4_tmpopen, or moved with + m4_tmprename; when finally done with the file, close it with + m4_tmpremove. Exits on failure, so the return value is always an + open file. */ +static FILE * +m4_tmpfile (int divnum) +{ + const char *name; + FILE *file; + + if (output_temp_dir == NULL) + { + output_temp_dir = create_temp_dir ("m4-", NULL, true); + if (output_temp_dir == NULL) + M4ERROR ((EXIT_FAILURE, errno, + "cannot create temporary file for diversion")); + atexit (cleanup_tmpfile); + } + name = m4_tmpname (divnum); + register_temp_file (output_temp_dir, name); + file = fopen_temp (name, O_BINARY ? "wb+" : "w+"); + if (file == NULL) + { + unregister_temp_file (output_temp_dir, name); + M4ERROR ((EXIT_FAILURE, errno, + "cannot create temporary file for diversion")); + } + else if (set_cloexec_flag (fileno (file), true) != 0) + M4ERROR ((warning_status, errno, + "Warning: cannot protect diversion across forks")); + return file; +} + +/* Reopen a temporary file for diversion DIVNUM for reading and + writing in a secure temp directory. If REREAD, the file is + positioned at offset 0, otherwise the file is positioned at the + end. Exits on failure, so the return value is always an open + file. */ +static FILE * +m4_tmpopen (int divnum, bool reread) +{ + const char *name; + FILE *file; + + if (tmp_file1_owner == divnum) + { + if (reread && fseeko (tmp_file1, 0, SEEK_SET) != 0) + m4_error (EXIT_FAILURE, errno, + _("cannot seek within diversion")); + tmp_file2_recent = false; + return tmp_file1; + } + else if (tmp_file2_owner == divnum) + { + if (reread && fseeko (tmp_file2, 0, SEEK_SET) != 0) + m4_error (EXIT_FAILURE, errno, + _("cannot seek within diversion")); + tmp_file2_recent = true; + return tmp_file2; + } + name = m4_tmpname (divnum); + /* We need update mode, to avoid truncation. */ + file = fopen_temp (name, O_BINARY ? "rb+" : "r+"); + if (file == NULL) + M4ERROR ((EXIT_FAILURE, errno, + "cannot create temporary file for diversion")); + else if (set_cloexec_flag (fileno (file), true) != 0) + m4_error (0, errno, _("cannot protect diversion across forks")); + /* Update mode starts at the beginning of the stream, but sometimes + we want the end. */ + else if (!reread && fseeko (file, 0, SEEK_END) != 0) + m4_error (EXIT_FAILURE, errno, + _("cannot seek within diversion")); + return file; +} + +/* Close, but don't delete, a temporary FILE for diversion DIVNUM. To + reduce the I/O overhead of repeatedly opening and closing the same + file, this implementation caches the most recent spilled diversion. + On the other hand, keeping every spilled diversion open would run + into EMFILE limits. */ +static int +m4_tmpclose (FILE *file, int divnum) +{ + int result = 0; + if (divnum != tmp_file1_owner && divnum != tmp_file2_owner) + { + if (tmp_file2_recent) + { + if (tmp_file1_owner) + result = close_stream_temp (tmp_file1); + tmp_file1 = file; + tmp_file1_owner = divnum; + } + else + { + if (tmp_file2_owner) + result = close_stream_temp (tmp_file2); + tmp_file2 = file; + tmp_file2_owner = divnum; + } + } + return result; +} + +/* Delete a closed temporary FILE for diversion DIVNUM. */ +static int +m4_tmpremove (int divnum) +{ + if (divnum == tmp_file1_owner) + { + int result = close_stream_temp (tmp_file1); + if (result) + return result; + tmp_file1_owner = 0; + } + else if (divnum == tmp_file2_owner) + { + int result = close_stream_temp (tmp_file2); + if (result) + return result; + tmp_file2_owner = 0; + } + return cleanup_temp_file (output_temp_dir, m4_tmpname (divnum)); +} + +/* Transfer the temporary file for diversion OLDNUM to the previously + unused diversion NEWNUM. Return an open stream visiting the new + temporary file, positioned at the end, or exit on failure. */ +static FILE* +m4_tmprename (int oldnum, int newnum) +{ + /* m4_tmpname reuses its return buffer. */ + char *oldname = xstrdup (m4_tmpname (oldnum)); + const char *newname = m4_tmpname (newnum); + register_temp_file (output_temp_dir, newname); + if (oldnum == tmp_file1_owner) + { + /* Be careful of mingw, which can't rename an open file. */ + if (RENAME_OPEN_FILE_WORKS) + tmp_file1_owner = newnum; + else + { + if (close_stream_temp (tmp_file1)) + m4_error (EXIT_FAILURE, errno, + _("cannot close temporary file for diversion")); + tmp_file1_owner = 0; + } + } + else if (oldnum == tmp_file2_owner) + { + /* Be careful of mingw, which can't rename an open file. */ + if (RENAME_OPEN_FILE_WORKS) + tmp_file2_owner = newnum; + else + { + if (close_stream_temp (tmp_file2)) + m4_error (EXIT_FAILURE, errno, + _("cannot close temporary file for diversion")); + tmp_file2_owner = 0; + } + } + /* Either it is safe to rename an open file, or no one should have + oldname open at this point. */ + if (rename (oldname, newname)) + m4_error (EXIT_FAILURE, errno, + _("cannot create temporary file for diversion")); + unregister_temp_file (output_temp_dir, oldname); + free (oldname); + return m4_tmpopen (newnum, false); +} + + +/*------------------------. +| Output initialization. | +`------------------------*/ + +void +output_init (void) +{ + diversion_table = gl_oset_create_empty (GL_AVLTREE_OSET, cmp_diversion_CB, + NULL); + div0.u.file = stdout; + output_diversion = &div0; + output_file = stdout; + obstack_init (&diversion_storage); +} + +void +output_exit (void) +{ + /* Order is important, since we may have registered cleanup_tmpfile + as an atexit handler, and it must not traverse stale memory. */ + gl_oset_t table = diversion_table; + if (tmp_file1_owner) + m4_tmpremove (tmp_file1_owner); + if (tmp_file2_owner) + m4_tmpremove (tmp_file2_owner); + diversion_table = NULL; + gl_oset_free (table); + obstack_free (&diversion_storage, NULL); +} + +/*-----------------------------------------------------------------------. +| Reorganize in-memory diversion buffers so the current diversion can | +| accomodate LENGTH more characters without further reorganization. The | +| current diversion buffer is made bigger if possible. But to make room | +| for a bigger buffer, one of the in-memory diversion buffers might have | +| to be flushed to a newly created temporary file. This flushed buffer | +| might well be the current one. | +`-----------------------------------------------------------------------*/ + +static void +make_room_for (int length) +{ + int wanted_size; + m4_diversion *selected_diversion = NULL; + + /* Compute needed size for in-memory buffer. Diversions in-memory + buffers start at 0 bytes, then 512, then keep doubling until it is + decided to flush them to disk. */ + + output_diversion->used = output_diversion->size - output_unused; + + for (wanted_size = output_diversion->size; + wanted_size < output_diversion->used + length; + wanted_size = wanted_size == 0 ? INITIAL_BUFFER_SIZE : wanted_size * 2) + ; + + /* Check if we are exceeding the maximum amount of buffer memory. */ + + if (total_buffer_size - output_diversion->size + wanted_size + > MAXIMUM_TOTAL_SIZE) + { + int selected_used; + char *selected_buffer; + m4_diversion *diversion; + int count; + gl_oset_iterator_t iter; + const void *elt; + + /* Find out the buffer having most data, in view of flushing it to + disk. Fake the current buffer as having already received the + projected data, while making the selection. So, if it is + selected indeed, we will flush it smaller, before it grows. */ + + selected_diversion = output_diversion; + selected_used = output_diversion->used + length; + + iter = gl_oset_iterator (diversion_table); + while (gl_oset_iterator_next (&iter, &elt)) + { + diversion = (m4_diversion *) elt; + if (diversion->used > selected_used) + { + selected_diversion = diversion; + selected_used = diversion->used; + } + } + gl_oset_iterator_free (&iter); + + /* Create a temporary file, write the in-memory buffer of the + diversion to this file, then release the buffer. Zero the + diversion before doing anything that can exit () (including + m4_tmpfile), so that the atexit handler doesn't try to close + a garbage pointer as a file. */ + + selected_buffer = selected_diversion->u.buffer; + total_buffer_size -= selected_diversion->size; + selected_diversion->size = 0; + selected_diversion->u.file = NULL; + selected_diversion->u.file = m4_tmpfile (selected_diversion->divnum); + + if (selected_diversion->used > 0) + { + count = fwrite (selected_buffer, (size_t) selected_diversion->used, + 1, selected_diversion->u.file); + if (count != 1) + M4ERROR ((EXIT_FAILURE, errno, + "ERROR: cannot flush diversion to temporary file")); + } + + /* Reclaim the buffer space for other diversions. */ + + free (selected_buffer); + selected_diversion->used = 1; + } + + /* Reload output_file, just in case the flushed diversion was current. */ + + if (output_diversion == selected_diversion) + { + /* The flushed diversion was current indeed. */ + + output_file = output_diversion->u.file; + output_cursor = NULL; + output_unused = 0; + } + else + { + /* Close any selected file since it is not the current diversion. */ + if (selected_diversion) + { + FILE *file = selected_diversion->u.file; + selected_diversion->u.file = NULL; + if (m4_tmpclose (file, selected_diversion->divnum) != 0) + m4_error (0, errno, + _("cannot close temporary file for diversion")); + } + + /* The current buffer may be safely reallocated. */ + { + char *buffer = output_diversion->u.buffer; + output_diversion->u.buffer = xcharalloc ((size_t) wanted_size); + memcpy (output_diversion->u.buffer, buffer, output_diversion->used); + free (buffer); + } + + total_buffer_size += wanted_size - output_diversion->size; + output_diversion->size = wanted_size; + + output_cursor = output_diversion->u.buffer + output_diversion->used; + output_unused = wanted_size - output_diversion->used; + } +} + +/*------------------------------------------------------------------------. +| Output one character CHAR, when it is known that it goes to a diversion | +| file or an in-memory diversion buffer. | +`------------------------------------------------------------------------*/ + +#define OUTPUT_CHARACTER(Char) \ + if (output_file) \ + putc ((Char), output_file); \ + else if (output_unused == 0) \ + output_character_helper ((Char)); \ + else \ + (output_unused--, *output_cursor++ = (Char)) + +static void +output_character_helper (int character) +{ + make_room_for (1); + + if (output_file) + putc (character, output_file); + else + { + *output_cursor++ = character; + output_unused--; + } +} + +/*------------------------------------------------------------------------. +| Output one TEXT having LENGTH characters, when it is known that it goes | +| to a diversion file or an in-memory diversion buffer. | +`------------------------------------------------------------------------*/ + +void +output_text (const char *text, int length) +{ + int count; + + if (!output_diversion || !length) + return; + + if (!output_file && length > output_unused) + make_room_for (length); + + if (output_file) + { + count = fwrite (text, length, 1, output_file); + if (count != 1) + M4ERROR ((EXIT_FAILURE, errno, "ERROR: copying inserted file")); + } + else + { + memcpy (output_cursor, text, (size_t) length); + output_cursor += length; + output_unused -= length; + } +} + +/*--------------------------------------------------------------------. +| Add some text into an obstack OBS, taken from TEXT, having LENGTH | +| characters. If OBS is NULL, output the text to an external file | +| or an in-memory diversion buffer instead. If OBS is NULL, and | +| there is no output file, the text is discarded. LINE is the line | +| where the token starts (not necessarily current_line, in the case | +| of multiline tokens). | +| | +| If we are generating sync lines, the output has to be examined, | +| because we need to know how much output each input line generates. | +| In general, sync lines are output whenever a single input lines | +| generates several output lines, or when several input lines do not | +| generate any output. | +`--------------------------------------------------------------------*/ + +void +shipout_text (struct obstack *obs, const char *text, int length, int line) +{ + static bool start_of_output_line = true; + const char *cursor; + + /* If output goes to an obstack, merely add TEXT to it. */ + + if (obs != NULL) + { + obstack_grow (obs, text, length); + return; + } + + /* Do nothing if TEXT should be discarded. */ + + if (output_diversion == NULL) + return; + + /* Output TEXT to a file, or in-memory diversion buffer. */ + + if (!sync_output) + switch (length) + { + + /* In-line short texts. */ + + case 8: OUTPUT_CHARACTER (*text); text++; + case 7: OUTPUT_CHARACTER (*text); text++; + case 6: OUTPUT_CHARACTER (*text); text++; + case 5: OUTPUT_CHARACTER (*text); text++; + case 4: OUTPUT_CHARACTER (*text); text++; + case 3: OUTPUT_CHARACTER (*text); text++; + case 2: OUTPUT_CHARACTER (*text); text++; + case 1: OUTPUT_CHARACTER (*text); + case 0: + return; + + /* Optimize longer texts. */ + + default: + output_text (text, length); + } + else + { + /* Check for syncline only at the start of a token. Multiline + tokens, and tokens that are out of sync but in the middle of + the line, must wait until the next raw newline triggers a + syncline. */ + if (start_of_output_line) + { + start_of_output_line = false; + output_current_line++; +#ifdef DEBUG_OUTPUT + xfprintf (stderr, "DEBUG: line %d, cur %d, cur out %d\n", + line, current_line, output_current_line); +#endif + + /* Output a `#line NUM' synchronization directive if needed. + If output_current_line was previously given a negative + value (invalidated), output `#line NUM "FILE"' instead. */ + + if (output_current_line != line) + { + OUTPUT_CHARACTER ('#'); + OUTPUT_CHARACTER ('l'); + OUTPUT_CHARACTER ('i'); + OUTPUT_CHARACTER ('n'); + OUTPUT_CHARACTER ('e'); + OUTPUT_CHARACTER (' '); + for (cursor = ntoa (line, 10); *cursor; cursor++) + OUTPUT_CHARACTER (*cursor); + if (output_current_line < 1 && current_file[0] != '\0') + { + OUTPUT_CHARACTER (' '); + OUTPUT_CHARACTER ('"'); + for (cursor = current_file; *cursor; cursor++) + OUTPUT_CHARACTER (*cursor); + OUTPUT_CHARACTER ('"'); + } + OUTPUT_CHARACTER ('\n'); + output_current_line = line; + } + } + + /* Output the token, and track embedded newlines. */ + for (; length-- > 0; text++) + { + if (start_of_output_line) + { + start_of_output_line = false; + output_current_line++; +#ifdef DEBUG_OUTPUT + xfprintf (stderr, "DEBUG: line %d, cur %d, cur out %d\n", + line, current_line, output_current_line); +#endif + } + OUTPUT_CHARACTER (*text); + if (*text == '\n') + start_of_output_line = true; + } + } +} + +/* Functions for use by diversions. */ + +/*--------------------------------------------------------------------------. +| Make a file for diversion DIVNUM, and install it in the diversion table. | +| Grow the size of the diversion table as needed. | +`--------------------------------------------------------------------------*/ + +/* The number of possible diversions is limited only by memory and + available file descriptors (each overflowing diversion uses one). */ + +void +make_diversion (int divnum) +{ + m4_diversion *diversion = NULL; + + if (current_diversion == divnum) + return; + + if (output_diversion) + { + if (!output_diversion->size && !output_diversion->u.file) + { + assert (!output_diversion->used); + if (!gl_oset_remove (diversion_table, output_diversion)) + error (EXIT_FAILURE, 0, "INTERNAL ERROR: make_diversion failed"); + output_diversion->u.next = free_list; + free_list = output_diversion; + } + else if (output_diversion->size) + output_diversion->used = output_diversion->size - output_unused; + else if (output_diversion->used) + { + FILE *file = output_diversion->u.file; + output_diversion->u.file = NULL; + if (m4_tmpclose (file, output_diversion->divnum) != 0) + m4_error (0, errno, + _("cannot close temporary file for diversion")); + } + output_diversion = NULL; + output_file = NULL; + output_cursor = NULL; + output_unused = 0; + } + + current_diversion = divnum; + + if (divnum < 0) + return; + + if (divnum == 0) + diversion = &div0; + else + { + const void *elt; + if (gl_oset_search_atleast (diversion_table, threshold_diversion_CB, + &divnum, &elt)) + { + m4_diversion *temp = (m4_diversion *) elt; + if (temp->divnum == divnum) + diversion = temp; + } + } + if (diversion == NULL) + { + /* First time visiting this diversion. */ + if (free_list) + { + diversion = free_list; + free_list = diversion->u.next; + } + else + { + diversion = (m4_diversion *) obstack_alloc (&diversion_storage, + sizeof *diversion); + diversion->size = 0; + diversion->used = 0; + } + diversion->u.file = NULL; + diversion->divnum = divnum; + gl_oset_add (diversion_table, diversion); + } + + output_diversion = diversion; + if (output_diversion->size) + { + output_cursor = output_diversion->u.buffer + output_diversion->used; + output_unused = output_diversion->size - output_diversion->used; + } + else + { + if (!output_diversion->u.file && output_diversion->used) + output_diversion->u.file = m4_tmpopen (output_diversion->divnum, + false); + output_file = output_diversion->u.file; + } + output_current_line = -1; +} + +/*-------------------------------------------------------------------. +| Insert a FILE into the current output file, in the same manner | +| diversions are handled. This allows files to be included, without | +| having them rescanned by m4. | +`-------------------------------------------------------------------*/ + +void +insert_file (FILE *file) +{ + static char buffer[COPY_BUFFER_SIZE]; + size_t length; + + /* Optimize out inserting into a sink. */ + if (!output_diversion) + return; + + /* Insert output by big chunks. */ + while (1) + { + length = fread (buffer, 1, sizeof buffer, file); + if (ferror (file)) + M4ERROR ((EXIT_FAILURE, errno, "error reading inserted file")); + if (length == 0) + break; + output_text (buffer, length); + } +} + +/*-------------------------------------------------------------------. +| Insert DIVERSION (but not div0) into the current output file. The | +| diversion is NOT placed on the expansion obstack, because it must | +| not be rescanned. When the file is closed, it is deleted by the | +| system. | +`-------------------------------------------------------------------*/ + +static void +insert_diversion_helper (m4_diversion *diversion) +{ + /* Effectively undivert only if an output stream is active. */ + if (output_diversion) + { + if (diversion->size) + { + if (!output_diversion->u.file) + { + /* Transferring diversion metadata is faster than + copying contents. */ + assert (!output_diversion->used && output_diversion != &div0 + && !output_file); + output_diversion->u.buffer = diversion->u.buffer; + output_diversion->size = diversion->size; + output_cursor = diversion->u.buffer + diversion->used; + output_unused = diversion->size - diversion->used; + diversion->u.buffer = NULL; + } + else + { + /* Avoid double-charging the total in-memory size when + transferring from one in-memory diversion to + another. */ + total_buffer_size -= diversion->size; + output_text (diversion->u.buffer, diversion->used); + } + } + else if (!output_diversion->u.file) + { + /* Transferring diversion metadata is faster than copying + contents. */ + assert (!output_diversion->used && output_diversion != &div0 + && !output_file); + output_diversion->u.file = m4_tmprename (diversion->divnum, + output_diversion->divnum); + output_diversion->used = 1; + output_file = output_diversion->u.file; + diversion->u.file = NULL; + diversion->size = 1; + } + else + { + if (!diversion->u.file) + diversion->u.file = m4_tmpopen (diversion->divnum, true); + insert_file (diversion->u.file); + } + + output_current_line = -1; + } + + /* Return all space used by the diversion. */ + if (diversion->size) + { + if (!output_diversion) + total_buffer_size -= diversion->size; + free (diversion->u.buffer); + diversion->size = 0; + } + else + { + if (diversion->u.file) + { + FILE *file = diversion->u.file; + diversion->u.file = NULL; + if (m4_tmpclose (file, diversion->divnum) != 0) + m4_error (0, errno, + _("cannot clean temporary file for diversion")); + } + if (m4_tmpremove (diversion->divnum) != 0) + M4ERROR ((0, errno, "cannot clean temporary file for diversion")); + } + diversion->used = 0; + gl_oset_remove (diversion_table, diversion); + diversion->u.next = free_list; + free_list = diversion; +} + +/*-------------------------------------------------------------------------. +| Insert diversion number DIVNUM into the current output file. The | +| diversion is NOT placed on the expansion obstack, because it must not be | +| rescanned. When the file is closed, it is deleted by the system. | +`-------------------------------------------------------------------------*/ + +void +insert_diversion (int divnum) +{ + const void *elt; + + /* Do not care about nonexistent diversions, and undiverting stdout + or self is a no-op. */ + if (divnum <= 0 || current_diversion == divnum) + return; + if (gl_oset_search_atleast (diversion_table, threshold_diversion_CB, + &divnum, &elt)) + { + m4_diversion *diversion = (m4_diversion *) elt; + if (diversion->divnum == divnum) + insert_diversion_helper (diversion); + } +} + +/*-------------------------------------------------------------------------. +| Get back all diversions. This is done just before exiting from main (), | +| and from m4_undivert (), if called without arguments. | +`-------------------------------------------------------------------------*/ + +void +undivert_all (void) +{ + const void *elt; + gl_oset_iterator_t iter = gl_oset_iterator (diversion_table); + while (gl_oset_iterator_next (&iter, &elt)) + { + m4_diversion *diversion = (m4_diversion *) elt; + if (diversion->divnum != current_diversion) + insert_diversion_helper (diversion); + } + gl_oset_iterator_free (&iter); +} + +/*-------------------------------------------------------------. +| Produce all diversion information in frozen format on FILE. | +`-------------------------------------------------------------*/ + +void +freeze_diversions (FILE *file) +{ + int saved_number; + int last_inserted; + gl_oset_iterator_t iter; + const void *elt; + + saved_number = current_diversion; + last_inserted = 0; + make_diversion (0); + output_file = file; /* kludge in the frozen file */ + + iter = gl_oset_iterator (diversion_table); + while (gl_oset_iterator_next (&iter, &elt)) + { + m4_diversion *diversion = (m4_diversion *) elt; + if (diversion->size || diversion->used) + { + if (diversion->size) + xfprintf (file, "D%d,%d\n", diversion->divnum, diversion->used); + else + { + struct stat file_stat; + diversion->u.file = m4_tmpopen (diversion->divnum, true); + if (fstat (fileno (diversion->u.file), &file_stat) < 0) + M4ERROR ((EXIT_FAILURE, errno, "cannot stat diversion")); + if (file_stat.st_size < 0 + || file_stat.st_size != (unsigned long int) file_stat.st_size) + M4ERROR ((EXIT_FAILURE, 0, "diversion too large")); + xfprintf (file, "D%d,%lu\n", diversion->divnum, + (unsigned long int) file_stat.st_size); + } + + insert_diversion_helper (diversion); + putc ('\n', file); + + last_inserted = diversion->divnum; + } + } + gl_oset_iterator_free (&iter); + + /* Save the active diversion number, if not already. */ + + if (saved_number != last_inserted) + xfprintf (file, "D%d,0\n\n", saved_number); +} diff --git a/coreseek/m4-1.4.13/src/output.o b/coreseek/m4-1.4.13/src/output.o new file mode 100644 index 0000000..76d1152 Binary files /dev/null and b/coreseek/m4-1.4.13/src/output.o differ diff --git a/coreseek/m4-1.4.13/src/path.c b/coreseek/m4-1.4.13/src/path.c new file mode 100644 index 0000000..317bd4e --- /dev/null +++ b/coreseek/m4-1.4.13/src/path.c @@ -0,0 +1,205 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 2004, 2006, 2007, 2008 + Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* Handling of path search of included files via the builtins "include" + and "sinclude". */ + +#include "m4.h" + +struct includes +{ + struct includes *next; /* next directory to search */ + const char *dir; /* directory */ + int len; +}; + +typedef struct includes includes; + +static includes *dir_list; /* the list of path directories */ +static includes *dir_list_end; /* the end of same */ +static int dir_max_length; /* length of longest directory name */ + + +void +include_init (void) +{ + dir_list = NULL; + dir_list_end = NULL; + dir_max_length = 0; +} + +void +include_env_init (void) +{ + char *path; + char *path_end; + char *env_path; + + if (no_gnu_extensions) + return; + + env_path = getenv ("M4PATH"); + if (env_path == NULL) + return; + + env_path = xstrdup (env_path); + path = env_path; + + do + { + path_end = strchr (path, ':'); + if (path_end) + *path_end = '\0'; + add_include_directory (path); + path = path_end + 1; + } + while (path_end); + free (env_path); +} + +void +add_include_directory (const char *dir) +{ + includes *incl; + + if (no_gnu_extensions) + return; + + if (*dir == '\0') + dir = "."; + + incl = (includes *) xmalloc (sizeof (struct includes)); + incl->next = NULL; + incl->len = strlen (dir); + incl->dir = xstrdup (dir); + + if (incl->len > dir_max_length) /* remember len of longest directory */ + dir_max_length = incl->len; + + if (dir_list_end == NULL) + dir_list = incl; + else + dir_list_end->next = incl; + dir_list_end = incl; + +#ifdef DEBUG_INCL + xfprintf (stderr, "add_include_directory (%s);\n", dir); +#endif +} + +/* Attempt to open FILE; if it opens, verify that it is not a + directory, and ensure it does not leak across execs. */ +static FILE * +m4_fopen (const char *file, const char *mode) +{ + FILE *fp = fopen (file, "r"); + if (fp) + { + struct stat st; + int fd = fileno (fp); + if (fstat (fd, &st) == 0 && S_ISDIR (st.st_mode)) + { + fclose (fp); + errno = EISDIR; + return NULL; + } + if (set_cloexec_flag (fd, true) != 0) + M4ERROR ((warning_status, errno, + "Warning: cannot protect input file across forks")); + } + return fp; +} + +/* Search for FILE, first in `.', then according to -I options. If + successful, return the open file, and if RESULT is not NULL, set + *RESULT to a malloc'd string that represents the file found with + respect to the current working directory. */ + +FILE * +m4_path_search (const char *file, char **result) +{ + FILE *fp; + includes *incl; + char *name; /* buffer for constructed name */ + int e; + + if (result) + *result = NULL; + + /* Reject empty file. */ + if (!*file) + { + errno = ENOENT; + return NULL; + } + + /* Look in current working directory first. */ + fp = m4_fopen (file, "r"); + if (fp != NULL) + { + if (result) + *result = xstrdup (file); + return fp; + } + + /* If file not found, and filename absolute, fail. */ + if (IS_ABSOLUTE_FILE_NAME (file) || no_gnu_extensions) + return NULL; + e = errno; + + for (incl = dir_list; incl != NULL; incl = incl->next) + { + name = file_name_concat (incl->dir, file, NULL); + +#ifdef DEBUG_INCL + xfprintf (stderr, "m4_path_search (%s) -- trying %s\n", file, name); +#endif + + fp = m4_fopen (name, "r"); + if (fp != NULL) + { + if (debug_level & DEBUG_TRACE_PATH) + DEBUG_MESSAGE2 ("path search for `%s' found `%s'", file, name); + if (result) + *result = name; + else + free (name); + return fp; + } + free (name); + } + errno = e; + return fp; +} + +#ifdef DEBUG_INCL + +static void M4_GNUC_UNUSED +include_dump (void) +{ + includes *incl; + + xfprintf (stderr, "include_dump:\n"); + for (incl = dir_list; incl != NULL; incl = incl->next) + xfprintf (stderr, "\t%s\n", incl->dir); +} + +#endif /* DEBUG_INCL */ diff --git a/coreseek/m4-1.4.13/src/path.o b/coreseek/m4-1.4.13/src/path.o new file mode 100644 index 0000000..b8d2f3c Binary files /dev/null and b/coreseek/m4-1.4.13/src/path.o differ diff --git a/coreseek/m4-1.4.13/src/symtab.c b/coreseek/m4-1.4.13/src/symtab.c new file mode 100644 index 0000000..b755790 --- /dev/null +++ b/coreseek/m4-1.4.13/src/symtab.c @@ -0,0 +1,403 @@ +/* GNU m4 -- A simple macro processor + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2003, 2006, 2007, + 2008 Free Software Foundation, Inc. + + This file is part of GNU M4. + + GNU M4 is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + GNU M4 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/* This file handles all the low level work around the symbol table. The + symbol table is a simple chained hash table. Each symbol is described + by a struct symbol, which is placed in the hash table based upon the + symbol name. Symbols that hash to the same entry in the table are + kept on a list, sorted by name. As a special case, to facilitate the + "pushdef" and "popdef" builtins, a symbol can be several times in the + symbol table, one for each definition. Since the name is the same, + all the entries for the symbol will be on the same list, and will + also, because the list is sorted, be adjacent. All the entries for a + name are simply ordered on the list by age. The current definition + will then always be the first found. */ + +#include "m4.h" +#include + +#ifdef DEBUG_SYM +/* When evaluating hash table performance, this profiling code shows + how many collisions were encountered. */ + +struct profile +{ + int entry; /* Number of times lookup_symbol called with this mode. */ + int comparisons; /* Number of times strcmp was called. */ + int misses; /* Number of times strcmp did not return 0. */ + long long bytes; /* Number of bytes compared. */ +}; + +static struct profile profiles[5]; +static symbol_lookup current_mode; + +/* On exit, show a profile of symbol table performance. */ +static void +show_profile (void) +{ + int i; + for (i = 0; i < 5; i++) + { + xfprintf(stderr, "m4: lookup mode %d called %d times, %d compares, " + "%d misses, %lld bytes\n", + i, profiles[i].entry, profiles[i].comparisons, + profiles[i].misses, profiles[i].bytes); + } +} + +/* Like strcmp (S1, S2), but also track profiling statistics. */ +static int +profile_strcmp (const char *s1, const char *s2) +{ + int i = 1; + int result; + while (*s1 && *s1 == *s2) + { + s1++; + s2++; + i++; + } + result = (unsigned char) *s1 - (unsigned char) *s2; + profiles[current_mode].comparisons++; + if (result != 0) + profiles[current_mode].misses++; + profiles[current_mode].bytes += i; + return result; +} + +# define strcmp profile_strcmp +#endif /* DEBUG_SYM */ + + +/*----------------------------------------------------------------------. +| Initialise the symbol table, by allocating the necessary storage, and | +| zeroing all the entries. | +`----------------------------------------------------------------------*/ + +/* Pointer to symbol table. */ +symbol **symtab; + +void +symtab_init (void) +{ + size_t i; + symbol **s; + + s = symtab = (symbol **) xnmalloc (hash_table_size, sizeof (symbol *)); + + for (i = 0; i < hash_table_size; i++) + s[i] = NULL; + +#ifdef DEBUG_SYM + { + int e = atexit(show_profile); + if (e != 0) + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: unable to show symtab profile")); + } +#endif /* DEBUG_SYM */ +} + +/*--------------------------------------------------. +| Return a hashvalue for a string, from GNU-emacs. | +`--------------------------------------------------*/ + +static size_t +hash (const char *s) +{ + register size_t val = 0; + + register const char *ptr = s; + register char ch; + + while ((ch = *ptr++) != '\0') + val = (val << 7) + (val >> (sizeof (val) * CHAR_BIT - 7)) + ch; + return val; +} + +/*--------------------------------------------. +| Free all storage associated with a symbol. | +`--------------------------------------------*/ + +void +free_symbol (symbol *sym) +{ + if (SYMBOL_PENDING_EXPANSIONS (sym) > 0) + SYMBOL_DELETED (sym) = true; + else + { + free (SYMBOL_NAME (sym)); + if (SYMBOL_TYPE (sym) == TOKEN_TEXT) + free (SYMBOL_TEXT (sym)); + free (sym); + } +} + +/*-------------------------------------------------------------------. +| Search in, and manipulation of the symbol table, are all done by | +| lookup_symbol (). It basically hashes NAME to a list in the | +| symbol table, and searches this list for the first occurrence of a | +| symbol with the name. | +| | +| The MODE parameter determines what lookup_symbol () will do. It | +| can either just do a lookup, do a lookup and insert if not | +| present, do an insertion even if the name is already in the list, | +| delete the first occurrence of the name on the list, or delete all | +| occurrences of the name on the list. | +`-------------------------------------------------------------------*/ + +symbol * +lookup_symbol (const char *name, symbol_lookup mode) +{ + size_t h; + int cmp = 1; + symbol *sym, *prev; + symbol **spp; + +#if DEBUG_SYM + current_mode = mode; + profiles[mode].entry++; +#endif /* DEBUG_SYM */ + + h = hash (name); + sym = symtab[h % hash_table_size]; + + for (prev = NULL; sym != NULL; prev = sym, sym = sym->next) + { + cmp = strcmp (SYMBOL_NAME (sym), name); + if (cmp >= 0) + break; + } + + /* If just searching, return status of search. */ + + if (mode == SYMBOL_LOOKUP) + return cmp == 0 ? sym : NULL; + + /* Symbol not found. */ + + spp = (prev != NULL) ? &prev->next : &symtab[h % hash_table_size]; + + switch (mode) + { + + case SYMBOL_INSERT: + + /* If the name was found in the table, check whether it is still in + use by a pending expansion. If so, replace the table element with + a new one; if not, just return the symbol. If not found, just + insert the name, and return the new symbol. */ + + if (cmp == 0 && sym != NULL) + { + if (SYMBOL_PENDING_EXPANSIONS (sym) > 0) + { + symbol *old = sym; + SYMBOL_DELETED (old) = true; + + sym = (symbol *) xmalloc (sizeof (symbol)); + SYMBOL_TYPE (sym) = TOKEN_VOID; + SYMBOL_TRACED (sym) = SYMBOL_TRACED (old); + SYMBOL_NAME (sym) = xstrdup (name); + SYMBOL_SHADOWED (sym) = false; + SYMBOL_MACRO_ARGS (sym) = false; + SYMBOL_BLIND_NO_ARGS (sym) = false; + SYMBOL_DELETED (sym) = false; + SYMBOL_PENDING_EXPANSIONS (sym) = 0; + + SYMBOL_NEXT (sym) = SYMBOL_NEXT (old); + SYMBOL_NEXT (old) = NULL; + (*spp) = sym; + } + return sym; + } + /* Fall through. */ + + case SYMBOL_PUSHDEF: + + /* Insert a name in the symbol table. If there is already a symbol + with the name, insert this in front of it, and mark the old + symbol as "shadowed". */ + + sym = (symbol *) xmalloc (sizeof (symbol)); + SYMBOL_TYPE (sym) = TOKEN_VOID; + SYMBOL_TRACED (sym) = false; + SYMBOL_NAME (sym) = xstrdup (name); + SYMBOL_SHADOWED (sym) = false; + SYMBOL_MACRO_ARGS (sym) = false; + SYMBOL_BLIND_NO_ARGS (sym) = false; + SYMBOL_DELETED (sym) = false; + SYMBOL_PENDING_EXPANSIONS (sym) = 0; + + SYMBOL_NEXT (sym) = *spp; + (*spp) = sym; + + if (mode == SYMBOL_PUSHDEF && cmp == 0) + { + SYMBOL_SHADOWED (SYMBOL_NEXT (sym)) = true; + SYMBOL_TRACED (sym) = SYMBOL_TRACED (SYMBOL_NEXT (sym)); + } + return sym; + + case SYMBOL_DELETE: + case SYMBOL_POPDEF: + + /* Delete occurrences of symbols with NAME. SYMBOL_DELETE kills + all definitions, SYMBOL_POPDEF kills only the first. + However, if the last instance of a symbol is marked for + tracing, reinsert a placeholder in the table. And if the + definition is still in use, let the caller free the memory + after it is done with the symbol. */ + + if (cmp != 0 || sym == NULL) + return NULL; + { + bool traced = false; + if (SYMBOL_NEXT (sym) != NULL + && SYMBOL_SHADOWED (SYMBOL_NEXT (sym)) + && mode == SYMBOL_POPDEF) + { + SYMBOL_SHADOWED (SYMBOL_NEXT (sym)) = false; + SYMBOL_TRACED (SYMBOL_NEXT (sym)) = SYMBOL_TRACED (sym); + } + else + traced = SYMBOL_TRACED (sym); + do + { + *spp = SYMBOL_NEXT (sym); + free_symbol (sym); + sym = *spp; + } + while (*spp != NULL && SYMBOL_SHADOWED (*spp) + && mode == SYMBOL_DELETE); + if (traced) + { + sym = (symbol *) xmalloc (sizeof (symbol)); + SYMBOL_TYPE (sym) = TOKEN_VOID; + SYMBOL_TRACED (sym) = true; + SYMBOL_NAME (sym) = xstrdup (name); + SYMBOL_SHADOWED (sym) = false; + SYMBOL_MACRO_ARGS (sym) = false; + SYMBOL_BLIND_NO_ARGS (sym) = false; + SYMBOL_DELETED (sym) = false; + SYMBOL_PENDING_EXPANSIONS (sym) = 0; + + SYMBOL_NEXT (sym) = *spp; + (*spp) = sym; + } + } + return NULL; + + default: + M4ERROR ((warning_status, 0, + "INTERNAL ERROR: invalid mode to symbol_lookup ()")); + abort (); + } +} + +/*-----------------------------------------------------------------. +| The following function is used for the cases where we want to do | +| something to each and every symbol in the table. The function | +| hack_all_symbols () traverses the symbol table, and calls a | +| specified function FUNC for each symbol in the table. FUNC is | +| called with a pointer to the symbol, and the DATA argument. | +| | +| FUNC may safely call lookup_symbol with mode SYMBOL_POPDEF or | +| SYMBOL_LOOKUP, but any other mode can break the iteration. | +`-----------------------------------------------------------------*/ + +void +hack_all_symbols (hack_symbol *func, void *data) +{ + size_t h; + symbol *sym; + symbol *next; + + for (h = 0; h < hash_table_size; h++) + { + /* We allow func to call SYMBOL_POPDEF, which can invalidate + sym, so we must grab the next element to traverse before + calling func. */ + for (sym = symtab[h]; sym != NULL; sym = next) + { + next = SYMBOL_NEXT (sym); + func (sym, data); + } + } +} + +#ifdef DEBUG_SYM + +static void symtab_print_list (int i); + +static void M4_GNUC_UNUSED +symtab_debug (void) +{ + token_data td; + const char *text; + symbol *s; + int delete; + static int i; + + while (next_token (&td, NULL) == TOKEN_WORD) + { + text = TOKEN_DATA_TEXT (&td); + if (*text == '_') + { + delete = 1; + text++; + } + else + delete = 0; + + s = lookup_symbol (text, SYMBOL_LOOKUP); + + if (s == NULL) + xprintf ("Name `%s' is unknown\n", text); + + if (delete) + (void) lookup_symbol (text, SYMBOL_DELETE); + else + (void) lookup_symbol (text, SYMBOL_INSERT); + } + symtab_print_list (i++); +} + +static void +symtab_print_list (int i) +{ + symbol *sym; + size_t h; + + xprintf ("Symbol dump #%d:\n", i); + for (h = 0; h < hash_table_size; h++) + for (sym = symtab[h]; sym != NULL; sym = sym->next) + xprintf ("\tname %s, bucket %lu, addr %p, next %p, " + "flags%s%s%s, pending %d\n", + SYMBOL_NAME (sym), + (unsigned long int) h, sym, SYMBOL_NEXT (sym), + SYMBOL_TRACED (sym) ? " traced" : "", + SYMBOL_SHADOWED (sym) ? " shadowed" : "", + SYMBOL_DELETED (sym) ? " deleted" : "", + SYMBOL_PENDING_EXPANSIONS (sym)); +} + +#endif /* DEBUG_SYM */ diff --git a/coreseek/m4-1.4.13/src/symtab.o b/coreseek/m4-1.4.13/src/symtab.o new file mode 100644 index 0000000..bc58430 Binary files /dev/null and b/coreseek/m4-1.4.13/src/symtab.o differ diff --git a/coreseek/m4-1.4.13/stamp-h b/coreseek/m4-1.4.13/stamp-h new file mode 100644 index 0000000..0d8f975 --- /dev/null +++ b/coreseek/m4-1.4.13/stamp-h @@ -0,0 +1 @@ +Sun Dec 11 15:34:29 CST 2016 diff --git a/coreseek/m4-1.4.13/tests/.deps/gl_array_list.Po b/coreseek/m4-1.4.13/tests/.deps/gl_array_list.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/gl_array_list.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/gl_array_oset.Po b/coreseek/m4-1.4.13/tests/.deps/gl_array_oset.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/gl_array_oset.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/setenv.Po b/coreseek/m4-1.4.13/tests/.deps/setenv.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/setenv.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-alloca-opt.Po b/coreseek/m4-1.4.13/tests/.deps/test-alloca-opt.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-alloca-opt.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-array_list.Po b/coreseek/m4-1.4.13/tests/.deps/test-array_list.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-array_list.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-array_oset.Po b/coreseek/m4-1.4.13/tests/.deps/test-array_oset.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-array_oset.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-avltree_oset.Po b/coreseek/m4-1.4.13/tests/.deps/test-avltree_oset.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-avltree_oset.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-binary-io.Po b/coreseek/m4-1.4.13/tests/.deps/test-binary-io.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-binary-io.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-btowc.Po b/coreseek/m4-1.4.13/tests/.deps/test-btowc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-btowc.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-c-ctype.Po b/coreseek/m4-1.4.13/tests/.deps/test-c-ctype.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-c-ctype.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-c-stack.Po b/coreseek/m4-1.4.13/tests/.deps/test-c-stack.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-c-stack.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-closein.Po b/coreseek/m4-1.4.13/tests/.deps/test-closein.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-closein.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-dirname.Po b/coreseek/m4-1.4.13/tests/.deps/test-dirname.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-dirname.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-environ.Po b/coreseek/m4-1.4.13/tests/.deps/test-environ.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-environ.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-errno.Po b/coreseek/m4-1.4.13/tests/.deps/test-errno.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-errno.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-fcntl.Po b/coreseek/m4-1.4.13/tests/.deps/test-fcntl.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-fcntl.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-fflush.Po b/coreseek/m4-1.4.13/tests/.deps/test-fflush.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-fflush.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-fflush2.Po b/coreseek/m4-1.4.13/tests/.deps/test-fflush2.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-fflush2.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-filenamecat.Po b/coreseek/m4-1.4.13/tests/.deps/test-filenamecat.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-filenamecat.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-fopen.Po b/coreseek/m4-1.4.13/tests/.deps/test-fopen.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-fopen.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-fpending.Po b/coreseek/m4-1.4.13/tests/.deps/test-fpending.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-fpending.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-fpurge.Po b/coreseek/m4-1.4.13/tests/.deps/test-fpurge.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-fpurge.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-freadahead.Po b/coreseek/m4-1.4.13/tests/.deps/test-freadahead.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-freadahead.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-freading.Po b/coreseek/m4-1.4.13/tests/.deps/test-freading.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-freading.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-frexp.Po b/coreseek/m4-1.4.13/tests/.deps/test-frexp.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-frexp.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-frexpl.Po b/coreseek/m4-1.4.13/tests/.deps/test-frexpl.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-frexpl.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-fseeko.Po b/coreseek/m4-1.4.13/tests/.deps/test-fseeko.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-fseeko.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-ftello.Po b/coreseek/m4-1.4.13/tests/.deps/test-ftello.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-ftello.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-getdtablesize.Po b/coreseek/m4-1.4.13/tests/.deps/test-getdtablesize.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-getdtablesize.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-gettimeofday.Po b/coreseek/m4-1.4.13/tests/.deps/test-gettimeofday.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-gettimeofday.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-isnand-nolibm.Po b/coreseek/m4-1.4.13/tests/.deps/test-isnand-nolibm.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-isnand-nolibm.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-isnanf-nolibm.Po b/coreseek/m4-1.4.13/tests/.deps/test-isnanf-nolibm.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-isnanf-nolibm.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-isnanl-nolibm.Po b/coreseek/m4-1.4.13/tests/.deps/test-isnanl-nolibm.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-isnanl-nolibm.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-linkedhash_list.Po b/coreseek/m4-1.4.13/tests/.deps/test-linkedhash_list.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-linkedhash_list.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-lseek.Po b/coreseek/m4-1.4.13/tests/.deps/test-lseek.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-lseek.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-lstat.Po b/coreseek/m4-1.4.13/tests/.deps/test-lstat.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-lstat.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-malloca.Po b/coreseek/m4-1.4.13/tests/.deps/test-malloca.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-malloca.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-math.Po b/coreseek/m4-1.4.13/tests/.deps/test-math.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-math.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-mbrtowc.Po b/coreseek/m4-1.4.13/tests/.deps/test-mbrtowc.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-mbrtowc.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-mbsinit.Po b/coreseek/m4-1.4.13/tests/.deps/test-mbsinit.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-mbsinit.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-memchr2.Po b/coreseek/m4-1.4.13/tests/.deps/test-memchr2.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-memchr2.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-open.Po b/coreseek/m4-1.4.13/tests/.deps/test-open.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-open.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-posix_spawn1.Po b/coreseek/m4-1.4.13/tests/.deps/test-posix_spawn1.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-posix_spawn1.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-posix_spawn2.Po b/coreseek/m4-1.4.13/tests/.deps/test-posix_spawn2.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-posix_spawn2.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-printf-frexp.Po b/coreseek/m4-1.4.13/tests/.deps/test-printf-frexp.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-printf-frexp.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-printf-frexpl.Po b/coreseek/m4-1.4.13/tests/.deps/test-printf-frexpl.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-printf-frexpl.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-quotearg.Po b/coreseek/m4-1.4.13/tests/.deps/test-quotearg.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-quotearg.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-rawmemchr.Po b/coreseek/m4-1.4.13/tests/.deps/test-rawmemchr.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-rawmemchr.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-sched.Po b/coreseek/m4-1.4.13/tests/.deps/test-sched.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-sched.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-sigaction.Po b/coreseek/m4-1.4.13/tests/.deps/test-sigaction.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-sigaction.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-signal.Po b/coreseek/m4-1.4.13/tests/.deps/test-signal.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-signal.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-signbit.Po b/coreseek/m4-1.4.13/tests/.deps/test-signbit.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-signbit.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-snprintf.Po b/coreseek/m4-1.4.13/tests/.deps/test-snprintf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-snprintf.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-stdbool.Po b/coreseek/m4-1.4.13/tests/.deps/test-stdbool.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-stdbool.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-stdint.Po b/coreseek/m4-1.4.13/tests/.deps/test-stdint.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-stdint.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-stdio.Po b/coreseek/m4-1.4.13/tests/.deps/test-stdio.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-stdio.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-stdlib.Po b/coreseek/m4-1.4.13/tests/.deps/test-stdlib.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-stdlib.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-strchrnul.Po b/coreseek/m4-1.4.13/tests/.deps/test-strchrnul.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-strchrnul.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-strerror.Po b/coreseek/m4-1.4.13/tests/.deps/test-strerror.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-strerror.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-string.Po b/coreseek/m4-1.4.13/tests/.deps/test-string.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-string.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-strsignal.Po b/coreseek/m4-1.4.13/tests/.deps/test-strsignal.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-strsignal.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-strstr.Po b/coreseek/m4-1.4.13/tests/.deps/test-strstr.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-strstr.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-strtod.Po b/coreseek/m4-1.4.13/tests/.deps/test-strtod.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-strtod.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-sys_stat.Po b/coreseek/m4-1.4.13/tests/.deps/test-sys_stat.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-sys_stat.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-sys_time.Po b/coreseek/m4-1.4.13/tests/.deps/test-sys_time.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-sys_time.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-unistd.Po b/coreseek/m4-1.4.13/tests/.deps/test-unistd.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-unistd.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-vasnprintf.Po b/coreseek/m4-1.4.13/tests/.deps/test-vasnprintf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-vasnprintf.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-vasprintf-posix.Po b/coreseek/m4-1.4.13/tests/.deps/test-vasprintf-posix.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-vasprintf-posix.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-vasprintf.Po b/coreseek/m4-1.4.13/tests/.deps/test-vasprintf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-vasprintf.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-wchar.Po b/coreseek/m4-1.4.13/tests/.deps/test-wchar.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-wchar.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-wcrtomb.Po b/coreseek/m4-1.4.13/tests/.deps/test-wcrtomb.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-wcrtomb.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-wctype.Po b/coreseek/m4-1.4.13/tests/.deps/test-wctype.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-wctype.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/test-xvasprintf.Po b/coreseek/m4-1.4.13/tests/.deps/test-xvasprintf.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/test-xvasprintf.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/unsetenv.Po b/coreseek/m4-1.4.13/tests/.deps/unsetenv.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/unsetenv.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/.deps/wctob.Po b/coreseek/m4-1.4.13/tests/.deps/wctob.Po new file mode 100644 index 0000000..9ce06a8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/.deps/wctob.Po @@ -0,0 +1 @@ +# dummy diff --git a/coreseek/m4-1.4.13/tests/Makefile b/coreseek/m4-1.4.13/tests/Makefile new file mode 100644 index 0000000..f043269 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/Makefile @@ -0,0 +1,2078 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# tests/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + + + + +pkgdatadir = $(datadir)/m4 +pkgincludedir = $(includedir)/m4 +pkglibdir = $(libdir)/m4 +pkglibexecdir = $(libexecdir)/m4 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +TESTS = test-alloca-opt$(EXEEXT) test-array_list$(EXEEXT) \ + test-array_oset$(EXEEXT) test-avltree_oset$(EXEEXT) \ + test-binary-io.sh test-btowc1.sh test-btowc2.sh \ + test-c-ctype$(EXEEXT) test-c-stack.sh test-c-stack2.sh \ + test-closein.sh test-dirname$(EXEEXT) test-environ$(EXEEXT) \ + test-errno$(EXEEXT) test-fcntl$(EXEEXT) test-fflush$(EXEEXT) \ + test-fflush2.sh test-filenamecat$(EXEEXT) test-fopen$(EXEEXT) \ + test-fpending.sh test-fpurge$(EXEEXT) test-freadahead.sh \ + test-freading$(EXEEXT) test-frexp-nolibm$(EXEEXT) \ + test-frexpl-nolibm$(EXEEXT) test-fseeko.sh test-fseeko2.sh \ + test-ftello.sh test-ftello2.sh test-getdtablesize$(EXEEXT) \ + test-gettimeofday$(EXEEXT) test-isnand-nolibm$(EXEEXT) \ + test-isnanf-nolibm$(EXEEXT) test-isnanl-nolibm$(EXEEXT) \ + test-linkedhash_list$(EXEEXT) test-lseek.sh \ + test-lstat$(EXEEXT) test-malloca$(EXEEXT) test-math$(EXEEXT) \ + test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh \ + test-mbrtowc4.sh test-mbsinit.sh test-memchr2$(EXEEXT) \ + test-open$(EXEEXT) $(am__EXEEXT_1) test-printf-frexp$(EXEEXT) \ + test-printf-frexpl$(EXEEXT) test-quotearg.sh \ + test-rawmemchr$(EXEEXT) test-sched$(EXEEXT) \ + test-sigaction$(EXEEXT) test-signal$(EXEEXT) \ + test-signbit$(EXEEXT) test-snprintf$(EXEEXT) \ + test-stdbool$(EXEEXT) test-stdint$(EXEEXT) test-stdio$(EXEEXT) \ + test-stdlib$(EXEEXT) test-strchrnul$(EXEEXT) \ + test-strerror$(EXEEXT) test-string$(EXEEXT) \ + test-strsignal$(EXEEXT) test-strstr$(EXEEXT) \ + test-strtod$(EXEEXT) test-sys_stat$(EXEEXT) \ + test-sys_time$(EXEEXT) test-unistd$(EXEEXT) \ + test-vasnprintf$(EXEEXT) test-vasprintf-posix$(EXEEXT) \ + test-vasprintf$(EXEEXT) test-wchar$(EXEEXT) test-wcrtomb.sh \ + test-wctype$(EXEEXT) test-xvasprintf$(EXEEXT) +noinst_PROGRAMS = +check_PROGRAMS = test-alloca-opt$(EXEEXT) test-array_list$(EXEEXT) \ + test-array_oset$(EXEEXT) test-avltree_oset$(EXEEXT) \ + test-binary-io$(EXEEXT) test-btowc$(EXEEXT) \ + test-c-ctype$(EXEEXT) test-c-stack$(EXEEXT) \ + test-closein$(EXEEXT) test-dirname$(EXEEXT) \ + test-environ$(EXEEXT) test-errno$(EXEEXT) test-fcntl$(EXEEXT) \ + test-fflush$(EXEEXT) test-fflush2$(EXEEXT) \ + test-filenamecat$(EXEEXT) test-fopen$(EXEEXT) \ + test-fpending$(EXEEXT) test-fpurge$(EXEEXT) \ + test-freadahead$(EXEEXT) test-freading$(EXEEXT) \ + test-frexp-nolibm$(EXEEXT) test-frexpl-nolibm$(EXEEXT) \ + test-fseeko$(EXEEXT) test-ftello$(EXEEXT) \ + test-getdtablesize$(EXEEXT) test-gettimeofday$(EXEEXT) \ + test-isnand-nolibm$(EXEEXT) test-isnanf-nolibm$(EXEEXT) \ + test-isnanl-nolibm$(EXEEXT) test-linkedhash_list$(EXEEXT) \ + test-lseek$(EXEEXT) test-lstat$(EXEEXT) test-malloca$(EXEEXT) \ + test-math$(EXEEXT) test-mbrtowc$(EXEEXT) test-mbsinit$(EXEEXT) \ + test-memchr2$(EXEEXT) test-open$(EXEEXT) $(am__EXEEXT_1) \ + test-printf-frexp$(EXEEXT) test-printf-frexpl$(EXEEXT) \ + test-quotearg$(EXEEXT) test-rawmemchr$(EXEEXT) \ + test-sched$(EXEEXT) test-sigaction$(EXEEXT) \ + test-signal$(EXEEXT) test-signbit$(EXEEXT) \ + test-snprintf$(EXEEXT) test-stdbool$(EXEEXT) \ + test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ + test-strchrnul$(EXEEXT) test-strerror$(EXEEXT) \ + test-string$(EXEEXT) test-strsignal$(EXEEXT) \ + test-strstr$(EXEEXT) test-strtod$(EXEEXT) \ + test-sys_stat$(EXEEXT) test-sys_time$(EXEEXT) \ + test-unistd$(EXEEXT) test-vasnprintf$(EXEEXT) \ + test-vasprintf-posix$(EXEEXT) test-vasprintf$(EXEEXT) \ + test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) test-wctype$(EXEEXT) \ + test-xvasprintf$(EXEEXT) +am__append_1 = test-posix_spawn1 test-posix_spawn2 +am__append_2 = test-posix_spawn1 test-posix_spawn2 +am__append_3 = test-posix_spawn1.sh \ + test-posix_spawn2.sh +am__append_4 = test-posix_spawn1.sh \ + test-posix_spawn1.sh-t \ + test-posix_spawn2.sh \ + test-posix_spawn2.sh-t +subdir = tests +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +AM_V_AR = $(am__v_AR_$(V)) +am__v_AR_ = @echo " AR " $@; +am__v_AR_0 = @echo " AR " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +libtests_a_AR = $(AR) $(ARFLAGS) +am__DEPENDENCIES_1 = +am_libtests_a_OBJECTS = gl_array_list.$(OBJEXT) \ + gl_array_oset.$(OBJEXT) +libtests_a_OBJECTS = $(am_libtests_a_OBJECTS) +am__EXEEXT_1 = test-posix_spawn1$(EXEEXT) \ + test-posix_spawn2$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +test_alloca_opt_SOURCES = test-alloca-opt.c +test_alloca_opt_OBJECTS = test-alloca-opt.$(OBJEXT) +test_alloca_opt_LDADD = $(LDADD) +test_alloca_opt_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_array_list_SOURCES = test-array_list.c +test_array_list_OBJECTS = test-array_list.$(OBJEXT) +am__DEPENDENCIES_2 = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_array_list_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_array_oset_SOURCES = test-array_oset.c +test_array_oset_OBJECTS = test-array_oset.$(OBJEXT) +test_array_oset_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_avltree_oset_SOURCES = test-avltree_oset.c +test_avltree_oset_OBJECTS = test-avltree_oset.$(OBJEXT) +test_avltree_oset_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_binary_io_SOURCES = test-binary-io.c +test_binary_io_OBJECTS = test-binary-io.$(OBJEXT) +test_binary_io_LDADD = $(LDADD) +test_binary_io_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_btowc_SOURCES = test-btowc.c +test_btowc_OBJECTS = test-btowc.$(OBJEXT) +test_btowc_LDADD = $(LDADD) +test_btowc_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_c_ctype_SOURCES = test-c-ctype.c +test_c_ctype_OBJECTS = test-c-ctype.$(OBJEXT) +test_c_ctype_LDADD = $(LDADD) +test_c_ctype_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_c_stack_SOURCES = test-c-stack.c +test_c_stack_OBJECTS = test-c-stack.$(OBJEXT) +test_c_stack_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) +test_closein_SOURCES = test-closein.c +test_closein_OBJECTS = test-closein.$(OBJEXT) +test_closein_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_dirname_SOURCES = test-dirname.c +test_dirname_OBJECTS = test-dirname.$(OBJEXT) +test_dirname_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_environ_SOURCES = test-environ.c +test_environ_OBJECTS = test-environ.$(OBJEXT) +test_environ_LDADD = $(LDADD) +test_environ_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_errno_SOURCES = test-errno.c +test_errno_OBJECTS = test-errno.$(OBJEXT) +test_errno_LDADD = $(LDADD) +test_errno_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fcntl_SOURCES = test-fcntl.c +test_fcntl_OBJECTS = test-fcntl.$(OBJEXT) +test_fcntl_LDADD = $(LDADD) +test_fcntl_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fflush_SOURCES = test-fflush.c +test_fflush_OBJECTS = test-fflush.$(OBJEXT) +test_fflush_LDADD = $(LDADD) +test_fflush_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fflush2_SOURCES = test-fflush2.c +test_fflush2_OBJECTS = test-fflush2.$(OBJEXT) +test_fflush2_LDADD = $(LDADD) +test_fflush2_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_filenamecat_SOURCES = test-filenamecat.c +test_filenamecat_OBJECTS = test-filenamecat.$(OBJEXT) +test_filenamecat_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_fopen_SOURCES = test-fopen.c +test_fopen_OBJECTS = test-fopen.$(OBJEXT) +test_fopen_LDADD = $(LDADD) +test_fopen_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fpending_SOURCES = test-fpending.c +test_fpending_OBJECTS = test-fpending.$(OBJEXT) +test_fpending_LDADD = $(LDADD) +test_fpending_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fpurge_SOURCES = test-fpurge.c +test_fpurge_OBJECTS = test-fpurge.$(OBJEXT) +test_fpurge_LDADD = $(LDADD) +test_fpurge_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_freadahead_SOURCES = test-freadahead.c +test_freadahead_OBJECTS = test-freadahead.$(OBJEXT) +test_freadahead_LDADD = $(LDADD) +test_freadahead_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_freading_SOURCES = test-freading.c +test_freading_OBJECTS = test-freading.$(OBJEXT) +test_freading_LDADD = $(LDADD) +test_freading_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +am_test_frexp_nolibm_OBJECTS = test-frexp.$(OBJEXT) +test_frexp_nolibm_OBJECTS = $(am_test_frexp_nolibm_OBJECTS) +test_frexp_nolibm_LDADD = $(LDADD) +test_frexp_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +am_test_frexpl_nolibm_OBJECTS = test-frexpl.$(OBJEXT) +test_frexpl_nolibm_OBJECTS = $(am_test_frexpl_nolibm_OBJECTS) +test_frexpl_nolibm_LDADD = $(LDADD) +test_frexpl_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fseeko_SOURCES = test-fseeko.c +test_fseeko_OBJECTS = test-fseeko.$(OBJEXT) +test_fseeko_LDADD = $(LDADD) +test_fseeko_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_ftello_SOURCES = test-ftello.c +test_ftello_OBJECTS = test-ftello.$(OBJEXT) +test_ftello_LDADD = $(LDADD) +test_ftello_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_getdtablesize_SOURCES = test-getdtablesize.c +test_getdtablesize_OBJECTS = test-getdtablesize.$(OBJEXT) +test_getdtablesize_LDADD = $(LDADD) +test_getdtablesize_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_gettimeofday_SOURCES = test-gettimeofday.c +test_gettimeofday_OBJECTS = test-gettimeofday.$(OBJEXT) +test_gettimeofday_LDADD = $(LDADD) +test_gettimeofday_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_isnand_nolibm_SOURCES = test-isnand-nolibm.c +test_isnand_nolibm_OBJECTS = test-isnand-nolibm.$(OBJEXT) +test_isnand_nolibm_LDADD = $(LDADD) +test_isnand_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_isnanf_nolibm_SOURCES = test-isnanf-nolibm.c +test_isnanf_nolibm_OBJECTS = test-isnanf-nolibm.$(OBJEXT) +test_isnanf_nolibm_LDADD = $(LDADD) +test_isnanf_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_isnanl_nolibm_SOURCES = test-isnanl-nolibm.c +test_isnanl_nolibm_OBJECTS = test-isnanl-nolibm.$(OBJEXT) +test_isnanl_nolibm_LDADD = $(LDADD) +test_isnanl_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_linkedhash_list_SOURCES = test-linkedhash_list.c +test_linkedhash_list_OBJECTS = test-linkedhash_list.$(OBJEXT) +test_linkedhash_list_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_lseek_SOURCES = test-lseek.c +test_lseek_OBJECTS = test-lseek.$(OBJEXT) +test_lseek_LDADD = $(LDADD) +test_lseek_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_lstat_SOURCES = test-lstat.c +test_lstat_OBJECTS = test-lstat.$(OBJEXT) +test_lstat_LDADD = $(LDADD) +test_lstat_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_malloca_SOURCES = test-malloca.c +test_malloca_OBJECTS = test-malloca.$(OBJEXT) +test_malloca_LDADD = $(LDADD) +test_malloca_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_math_SOURCES = test-math.c +test_math_OBJECTS = test-math.$(OBJEXT) +test_math_LDADD = $(LDADD) +test_math_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_mbrtowc_SOURCES = test-mbrtowc.c +test_mbrtowc_OBJECTS = test-mbrtowc.$(OBJEXT) +test_mbrtowc_LDADD = $(LDADD) +test_mbrtowc_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_mbsinit_SOURCES = test-mbsinit.c +test_mbsinit_OBJECTS = test-mbsinit.$(OBJEXT) +test_mbsinit_LDADD = $(LDADD) +test_mbsinit_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_memchr2_SOURCES = test-memchr2.c +test_memchr2_OBJECTS = test-memchr2.$(OBJEXT) +test_memchr2_LDADD = $(LDADD) +test_memchr2_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_open_SOURCES = test-open.c +test_open_OBJECTS = test-open.$(OBJEXT) +test_open_LDADD = $(LDADD) +test_open_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_posix_spawn1_SOURCES = test-posix_spawn1.c +test_posix_spawn1_OBJECTS = test-posix_spawn1.$(OBJEXT) +test_posix_spawn1_LDADD = $(LDADD) +test_posix_spawn1_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_posix_spawn2_SOURCES = test-posix_spawn2.c +test_posix_spawn2_OBJECTS = test-posix_spawn2.$(OBJEXT) +test_posix_spawn2_LDADD = $(LDADD) +test_posix_spawn2_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_printf_frexp_SOURCES = test-printf-frexp.c +test_printf_frexp_OBJECTS = test-printf-frexp.$(OBJEXT) +test_printf_frexp_LDADD = $(LDADD) +test_printf_frexp_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_printf_frexpl_SOURCES = test-printf-frexpl.c +test_printf_frexpl_OBJECTS = test-printf-frexpl.$(OBJEXT) +test_printf_frexpl_LDADD = $(LDADD) +test_printf_frexpl_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_quotearg_SOURCES = test-quotearg.c +test_quotearg_OBJECTS = test-quotearg.$(OBJEXT) +test_quotearg_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_rawmemchr_SOURCES = test-rawmemchr.c +test_rawmemchr_OBJECTS = test-rawmemchr.$(OBJEXT) +test_rawmemchr_LDADD = $(LDADD) +test_rawmemchr_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sched_SOURCES = test-sched.c +test_sched_OBJECTS = test-sched.$(OBJEXT) +test_sched_LDADD = $(LDADD) +test_sched_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sigaction_SOURCES = test-sigaction.c +test_sigaction_OBJECTS = test-sigaction.$(OBJEXT) +test_sigaction_LDADD = $(LDADD) +test_sigaction_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_signal_SOURCES = test-signal.c +test_signal_OBJECTS = test-signal.$(OBJEXT) +test_signal_LDADD = $(LDADD) +test_signal_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_signbit_SOURCES = test-signbit.c +test_signbit_OBJECTS = test-signbit.$(OBJEXT) +test_signbit_LDADD = $(LDADD) +test_signbit_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_snprintf_SOURCES = test-snprintf.c +test_snprintf_OBJECTS = test-snprintf.$(OBJEXT) +test_snprintf_LDADD = $(LDADD) +test_snprintf_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdbool_SOURCES = test-stdbool.c +test_stdbool_OBJECTS = test-stdbool.$(OBJEXT) +test_stdbool_LDADD = $(LDADD) +test_stdbool_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdint_SOURCES = test-stdint.c +test_stdint_OBJECTS = test-stdint.$(OBJEXT) +test_stdint_LDADD = $(LDADD) +test_stdint_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdio_SOURCES = test-stdio.c +test_stdio_OBJECTS = test-stdio.$(OBJEXT) +test_stdio_LDADD = $(LDADD) +test_stdio_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdlib_SOURCES = test-stdlib.c +test_stdlib_OBJECTS = test-stdlib.$(OBJEXT) +test_stdlib_LDADD = $(LDADD) +test_stdlib_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strchrnul_SOURCES = test-strchrnul.c +test_strchrnul_OBJECTS = test-strchrnul.$(OBJEXT) +test_strchrnul_LDADD = $(LDADD) +test_strchrnul_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strerror_SOURCES = test-strerror.c +test_strerror_OBJECTS = test-strerror.$(OBJEXT) +test_strerror_LDADD = $(LDADD) +test_strerror_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_string_SOURCES = test-string.c +test_string_OBJECTS = test-string.$(OBJEXT) +test_string_LDADD = $(LDADD) +test_string_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strsignal_SOURCES = test-strsignal.c +test_strsignal_OBJECTS = test-strsignal.$(OBJEXT) +test_strsignal_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_strstr_SOURCES = test-strstr.c +test_strstr_OBJECTS = test-strstr.$(OBJEXT) +test_strstr_LDADD = $(LDADD) +test_strstr_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strtod_SOURCES = test-strtod.c +test_strtod_OBJECTS = test-strtod.$(OBJEXT) +test_strtod_LDADD = $(LDADD) +test_strtod_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sys_stat_SOURCES = test-sys_stat.c +test_sys_stat_OBJECTS = test-sys_stat.$(OBJEXT) +test_sys_stat_LDADD = $(LDADD) +test_sys_stat_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sys_time_SOURCES = test-sys_time.c +test_sys_time_OBJECTS = test-sys_time.$(OBJEXT) +test_sys_time_LDADD = $(LDADD) +test_sys_time_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_unistd_SOURCES = test-unistd.c +test_unistd_OBJECTS = test-unistd.$(OBJEXT) +test_unistd_LDADD = $(LDADD) +test_unistd_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_vasnprintf_SOURCES = test-vasnprintf.c +test_vasnprintf_OBJECTS = test-vasnprintf.$(OBJEXT) +test_vasnprintf_LDADD = $(LDADD) +test_vasnprintf_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_vasprintf_SOURCES = test-vasprintf.c +test_vasprintf_OBJECTS = test-vasprintf.$(OBJEXT) +test_vasprintf_LDADD = $(LDADD) +test_vasprintf_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_vasprintf_posix_SOURCES = test-vasprintf-posix.c +test_vasprintf_posix_OBJECTS = test-vasprintf-posix.$(OBJEXT) +test_vasprintf_posix_LDADD = $(LDADD) +test_vasprintf_posix_DEPENDENCIES = libtests.a ../lib/libm4.a \ + libtests.a $(am__DEPENDENCIES_1) +test_wchar_SOURCES = test-wchar.c +test_wchar_OBJECTS = test-wchar.$(OBJEXT) +test_wchar_LDADD = $(LDADD) +test_wchar_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_wcrtomb_SOURCES = test-wcrtomb.c +test_wcrtomb_OBJECTS = test-wcrtomb.$(OBJEXT) +test_wcrtomb_LDADD = $(LDADD) +test_wcrtomb_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_wctype_SOURCES = test-wctype.c +test_wctype_OBJECTS = test-wctype.$(OBJEXT) +test_wctype_LDADD = $(LDADD) +test_wctype_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_xvasprintf_SOURCES = test-xvasprintf.c +test_xvasprintf_OBJECTS = test-xvasprintf.$(OBJEXT) +test_xvasprintf_DEPENDENCIES = $(am__DEPENDENCIES_2) +DEFAULT_INCLUDES = -I. -I$(top_builddir)/lib +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = @echo " CC " $@; +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = @echo " CCLD " $@; +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ + test-alloca-opt.c test-array_list.c test-array_oset.c \ + test-avltree_oset.c test-binary-io.c test-btowc.c \ + test-c-ctype.c test-c-stack.c test-closein.c test-dirname.c \ + test-environ.c test-errno.c test-fcntl.c test-fflush.c \ + test-fflush2.c test-filenamecat.c test-fopen.c test-fpending.c \ + test-fpurge.c test-freadahead.c test-freading.c \ + $(test_frexp_nolibm_SOURCES) $(test_frexpl_nolibm_SOURCES) \ + test-fseeko.c test-ftello.c test-getdtablesize.c \ + test-gettimeofday.c test-isnand-nolibm.c test-isnanf-nolibm.c \ + test-isnanl-nolibm.c test-linkedhash_list.c test-lseek.c \ + test-lstat.c test-malloca.c test-math.c test-mbrtowc.c \ + test-mbsinit.c test-memchr2.c test-open.c test-posix_spawn1.c \ + test-posix_spawn2.c test-printf-frexp.c test-printf-frexpl.c \ + test-quotearg.c test-rawmemchr.c test-sched.c test-sigaction.c \ + test-signal.c test-signbit.c test-snprintf.c test-stdbool.c \ + test-stdint.c test-stdio.c test-stdlib.c test-strchrnul.c \ + test-strerror.c test-string.c test-strsignal.c test-strstr.c \ + test-strtod.c test-sys_stat.c test-sys_time.c test-unistd.c \ + test-vasnprintf.c test-vasprintf.c test-vasprintf-posix.c \ + test-wchar.c test-wcrtomb.c test-wctype.c test-xvasprintf.c +DIST_SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ + test-alloca-opt.c test-array_list.c test-array_oset.c \ + test-avltree_oset.c test-binary-io.c test-btowc.c \ + test-c-ctype.c test-c-stack.c test-closein.c test-dirname.c \ + test-environ.c test-errno.c test-fcntl.c test-fflush.c \ + test-fflush2.c test-filenamecat.c test-fopen.c test-fpending.c \ + test-fpurge.c test-freadahead.c test-freading.c \ + $(test_frexp_nolibm_SOURCES) $(test_frexpl_nolibm_SOURCES) \ + test-fseeko.c test-ftello.c test-getdtablesize.c \ + test-gettimeofday.c test-isnand-nolibm.c test-isnanf-nolibm.c \ + test-isnanl-nolibm.c test-linkedhash_list.c test-lseek.c \ + test-lstat.c test-malloca.c test-math.c test-mbrtowc.c \ + test-mbsinit.c test-memchr2.c test-open.c test-posix_spawn1.c \ + test-posix_spawn2.c test-printf-frexp.c test-printf-frexpl.c \ + test-quotearg.c test-rawmemchr.c test-sched.c test-sigaction.c \ + test-signal.c test-signbit.c test-snprintf.c test-stdbool.c \ + test-stdint.c test-stdio.c test-stdlib.c test-strchrnul.c \ + test-strerror.c test-string.c test-strsignal.c test-strstr.c \ + test-strtod.c test-sys_stat.c test-sys_time.c test-unistd.c \ + test-vasnprintf.c test-vasprintf.c test-vasprintf-posix.c \ + test-wchar.c test-wcrtomb.c test-wctype.c test-xvasprintf.c +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run aclocal-1.10b +ALLOCA = +ALLOCA_H = alloca.h +AMTAR = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run tar +APPLE_UNIVERSAL_BUILD = 0 +AUTOCONF = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoconf +AUTOHEADER = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run autoheader +AUTOMAKE = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run automake-1.10b +AWK = gawk +BITSIZEOF_PTRDIFF_T = +BITSIZEOF_SIG_ATOMIC_T = +BITSIZEOF_SIZE_T = +BITSIZEOF_WCHAR_T = +BITSIZEOF_WINT_T = +CC = gcc -std=gnu99 +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EMULTIHOP_HIDDEN = +EMULTIHOP_VALUE = +ENOLINK_HIDDEN = +ENOLINK_VALUE = +EOVERFLOW_HIDDEN = +EOVERFLOW_VALUE = +ERRNO_H = +EXEEXT = +FCNTL_H = fcntl.h +FLOAT_H = +GETOPT_H = +GLIBC21 = yes +GNULIB_ATOLL = 0 +GNULIB_BTOWC = 1 +GNULIB_CALLOC_POSIX = 0 +GNULIB_CEILF = 0 +GNULIB_CEILL = 0 +GNULIB_CHOWN = 0 +GNULIB_CLOSE = 0 +GNULIB_DPRINTF = 0 +GNULIB_DUP2 = 0 +GNULIB_ENVIRON = 1 +GNULIB_EUIDACCESS = 0 +GNULIB_FCHDIR = 0 +GNULIB_FCLOSE = 0 +GNULIB_FFLUSH = 1 +GNULIB_FLOORF = 0 +GNULIB_FLOORL = 0 +GNULIB_FOPEN = 1 +GNULIB_FPRINTF = 1 +GNULIB_FPRINTF_POSIX = 0 +GNULIB_FPUTC = 1 +GNULIB_FPUTS = 1 +GNULIB_FREOPEN = 0 +GNULIB_FREXP = 1 +GNULIB_FREXPL = 1 +GNULIB_FSEEK = 0 +GNULIB_FSEEKO = 1 +GNULIB_FSYNC = 0 +GNULIB_FTELL = 0 +GNULIB_FTELLO = 1 +GNULIB_FTRUNCATE = 0 +GNULIB_FWRITE = 1 +GNULIB_GETCWD = 0 +GNULIB_GETDELIM = 0 +GNULIB_GETDOMAINNAME = 0 +GNULIB_GETDTABLESIZE = 1 +GNULIB_GETHOSTNAME = 0 +GNULIB_GETLINE = 0 +GNULIB_GETLOADAVG = 0 +GNULIB_GETLOGIN_R = 0 +GNULIB_GETPAGESIZE = 0 +GNULIB_GETSUBOPT = 0 +GNULIB_GETUSERSHELL = 0 +GNULIB_ISFINITE = 0 +GNULIB_ISINF = 0 +GNULIB_ISNAN = 0 +GNULIB_ISNAND = 0 +GNULIB_ISNANF = 0 +GNULIB_ISNANL = 0 +GNULIB_LCHMOD = 0 +GNULIB_LCHOWN = 0 +GNULIB_LDEXPL = 0 +GNULIB_LINK = 0 +GNULIB_LSEEK = 1 +GNULIB_LSTAT = 1 +GNULIB_MALLOC_POSIX = 1 +GNULIB_MATHL = 0 +GNULIB_MBRLEN = 0 +GNULIB_MBRTOWC = 1 +GNULIB_MBSCASECMP = 0 +GNULIB_MBSCASESTR = 0 +GNULIB_MBSCHR = 0 +GNULIB_MBSCSPN = 0 +GNULIB_MBSINIT = 1 +GNULIB_MBSLEN = 0 +GNULIB_MBSNCASECMP = 0 +GNULIB_MBSNLEN = 0 +GNULIB_MBSNRTOWCS = 0 +GNULIB_MBSPBRK = 0 +GNULIB_MBSPCASECMP = 0 +GNULIB_MBSRCHR = 0 +GNULIB_MBSRTOWCS = 0 +GNULIB_MBSSEP = 0 +GNULIB_MBSSPN = 0 +GNULIB_MBSSTR = 0 +GNULIB_MBSTOK_R = 0 +GNULIB_MEMMEM = 0 +GNULIB_MEMPCPY = 0 +GNULIB_MEMRCHR = 0 +GNULIB_MKDTEMP = 1 +GNULIB_MKSTEMP = 1 +GNULIB_OBSTACK_PRINTF = 0 +GNULIB_OBSTACK_PRINTF_POSIX = 0 +GNULIB_OPEN = 1 +GNULIB_PERROR = 0 +GNULIB_POSIX_SPAWN = 0 +GNULIB_POSIX_SPAWNATTR_DESTROY = 1 +GNULIB_POSIX_SPAWNATTR_GETFLAGS = 0 +GNULIB_POSIX_SPAWNATTR_GETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = 0 +GNULIB_POSIX_SPAWNATTR_INIT = 1 +GNULIB_POSIX_SPAWNATTR_SETFLAGS = 1 +GNULIB_POSIX_SPAWNATTR_SETPGROUP = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = 0 +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = 0 +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = 1 +GNULIB_POSIX_SPAWNP = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = 1 +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = 1 +GNULIB_PRINTF = 1 +GNULIB_PRINTF_POSIX = 0 +GNULIB_PUTC = 1 +GNULIB_PUTCHAR = 1 +GNULIB_PUTENV = 0 +GNULIB_PUTS = 1 +GNULIB_RANDOM_R = 0 +GNULIB_RAWMEMCHR = 1 +GNULIB_READLINK = 0 +GNULIB_REALLOC_POSIX = 0 +GNULIB_ROUND = 0 +GNULIB_ROUNDF = 0 +GNULIB_ROUNDL = 0 +GNULIB_RPMATCH = 0 +GNULIB_SETENV = 1 +GNULIB_SIGACTION = 1 +GNULIB_SIGNAL_H_SIGPIPE = 0 +GNULIB_SIGNBIT = 1 +GNULIB_SIGPROCMASK = 1 +GNULIB_SLEEP = 0 +GNULIB_SNPRINTF = 1 +GNULIB_SPRINTF_POSIX = 0 +GNULIB_STDIO_H_SIGPIPE = 0 +GNULIB_STPCPY = 0 +GNULIB_STPNCPY = 0 +GNULIB_STRCASESTR = 0 +GNULIB_STRCHRNUL = 1 +GNULIB_STRDUP = 0 +GNULIB_STRERROR = 1 +GNULIB_STRNDUP = 1 +GNULIB_STRNLEN = 1 +GNULIB_STRPBRK = 0 +GNULIB_STRSEP = 0 +GNULIB_STRSIGNAL = 1 +GNULIB_STRSTR = 1 +GNULIB_STRTOD = 1 +GNULIB_STRTOK_R = 0 +GNULIB_STRTOLL = 0 +GNULIB_STRTOULL = 0 +GNULIB_STRVERSCMP = 0 +GNULIB_TRUNC = 0 +GNULIB_TRUNCF = 0 +GNULIB_TRUNCL = 0 +GNULIB_UNISTD_H_SIGPIPE = 0 +GNULIB_UNSETENV = 1 +GNULIB_VASPRINTF = 1 +GNULIB_VDPRINTF = 0 +GNULIB_VFPRINTF = 1 +GNULIB_VFPRINTF_POSIX = 0 +GNULIB_VPRINTF = 1 +GNULIB_VPRINTF_POSIX = 0 +GNULIB_VSNPRINTF = 0 +GNULIB_VSPRINTF_POSIX = 0 +GNULIB_WCRTOMB = 1 +GNULIB_WCSNRTOMBS = 0 +GNULIB_WCSRTOMBS = 0 +GNULIB_WCTOB = 1 +GNULIB_WCWIDTH = 0 +GNULIB_WRITE = 0 +GREP = /bin/grep +HAVE_ATOLL = 1 +HAVE_BTOWC = 1 +HAVE_CALLOC_POSIX = 1 +HAVE_DECL_ACOSL = 1 +HAVE_DECL_ASINL = 1 +HAVE_DECL_ATANL = 1 +HAVE_DECL_COSL = 1 +HAVE_DECL_ENVIRON = 1 +HAVE_DECL_EXPL = 1 +HAVE_DECL_FREXPL = 1 +HAVE_DECL_GETDELIM = 1 +HAVE_DECL_GETLINE = 1 +HAVE_DECL_GETLOADAVG = 1 +HAVE_DECL_GETLOGIN_R = 1 +HAVE_DECL_LDEXPL = 1 +HAVE_DECL_LOGL = 1 +HAVE_DECL_MEMMEM = 1 +HAVE_DECL_MEMRCHR = 1 +HAVE_DECL_OBSTACK_PRINTF = 1 +HAVE_DECL_SINL = 1 +HAVE_DECL_SNPRINTF = 1 +HAVE_DECL_SQRTL = 1 +HAVE_DECL_STRDUP = 1 +HAVE_DECL_STRERROR = 1 +HAVE_DECL_STRNDUP = 1 +HAVE_DECL_STRNLEN = 1 +HAVE_DECL_STRSIGNAL = 1 +HAVE_DECL_STRTOK_R = 1 +HAVE_DECL_TANL = 1 +HAVE_DECL_TRUNC = 1 +HAVE_DECL_TRUNCF = 1 +HAVE_DECL_VSNPRINTF = 1 +HAVE_DECL_WCTOB = 1 +HAVE_DECL_WCWIDTH = 1 +HAVE_DPRINTF = 1 +HAVE_DUP2 = 1 +HAVE_EUIDACCESS = 1 +HAVE_FSEEKO = 1 +HAVE_FSYNC = 1 +HAVE_FTELLO = 1 +HAVE_FTRUNCATE = 1 +HAVE_GETDOMAINNAME = 1 +HAVE_GETDTABLESIZE = 1 +HAVE_GETHOSTNAME = 1 +HAVE_GETPAGESIZE = 1 +HAVE_GETSUBOPT = 1 +HAVE_GETUSERSHELL = 1 +HAVE_INTTYPES_H = 1 +HAVE_ISNAND = 1 +HAVE_ISNANF = 1 +HAVE_ISNANL = 1 +HAVE_ISWCNTRL = 1 +HAVE_LCHMOD = 1 +HAVE_LINK = 1 +HAVE_LONG_LONG_INT = 1 +HAVE_LSTAT = 1 +HAVE_MALLOC_POSIX = 1 +HAVE_MBRLEN = 1 +HAVE_MBRTOWC = 1 +HAVE_MBSINIT = 1 +HAVE_MBSNRTOWCS = 1 +HAVE_MBSRTOWCS = 1 +HAVE_MEMPCPY = 1 +HAVE_MKDTEMP = 1 +HAVE_OS_H = 0 +HAVE_POSIX_SIGNALBLOCKING = 1 +HAVE_POSIX_SPAWN = 1 +HAVE_RANDOM_H = 0 +HAVE_RANDOM_R = 1 +HAVE_RAWMEMCHR = 1 +HAVE_READLINK = 1 +HAVE_REALLOC_POSIX = 1 +HAVE_RPMATCH = 1 +HAVE_SCHED_H = +HAVE_SETENV = 1 +HAVE_SIGACTION = 1 +HAVE_SIGINFO_T = 1 +HAVE_SIGNED_SIG_ATOMIC_T = +HAVE_SIGNED_WCHAR_T = +HAVE_SIGNED_WINT_T = +HAVE_SIGSET_T = 1 +HAVE_SLEEP = 1 +HAVE_SPAWN_H = 1 +HAVE_STDINT_H = 1 +HAVE_STPCPY = 1 +HAVE_STPNCPY = 1 +HAVE_STRCASESTR = 1 +HAVE_STRCHRNUL = 1 +HAVE_STRNDUP = 1 +HAVE_STRPBRK = 1 +HAVE_STRSEP = 1 +HAVE_STRTOD = 1 +HAVE_STRTOLL = 1 +HAVE_STRTOULL = 1 +HAVE_STRUCT_RANDOM_DATA = 1 +HAVE_STRUCT_SCHED_PARAM = +HAVE_STRUCT_SIGACTION_SA_SIGACTION = 1 +HAVE_STRUCT_TIMEVAL = 1 +HAVE_STRVERSCMP = 1 +HAVE_SYS_BITYPES_H = +HAVE_SYS_INTTYPES_H = +HAVE_SYS_LOADAVG_H = 0 +HAVE_SYS_PARAM_H = 0 +HAVE_SYS_TIME_H = 1 +HAVE_SYS_TYPES_H = 1 +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = 1 +HAVE_UNISTD_H = 1 +HAVE_UNSETENV = 1 +HAVE_UNSIGNED_LONG_LONG_INT = 1 +HAVE_VASPRINTF = 1 +HAVE_VDPRINTF = 1 +HAVE_WCHAR_H = 1 +HAVE_WCRTOMB = 1 +HAVE_WCSNRTOMBS = 1 +HAVE_WCSRTOMBS = 1 +HAVE_WCTYPE_H = 1 +HAVE_WINT_T = 1 +HAVE__BOOL = 1 +INCLUDE_NEXT = include_next +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = include_next +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LDFLAGS = +LIBCSTACK = +LIBINTL = +LIBM4_LIBDEPS = +LIBM4_LTLIBDEPS = +LIBMULTITHREAD = +LIBOBJS = +LIBPTH = +LIBPTH_PREFIX = +LIBS = $(POW_LIB) +LIBSIGSEGV = +LIBTESTS_LIBDEPS = +LIBTHREAD = +LOCALCHARSET_TESTS_ENVIRONMENT = CHARSETALIASDIR="$(top_builddir)/lib" +LOCALE_FR = none +LOCALE_FR_UTF8 = none +LOCALE_JA = none +LOCALE_ZH_CN = none +LTLIBCSTACK = +LTLIBINTL = +LTLIBMULTITHREAD = +LTLIBOBJS = +LTLIBPTH = +LTLIBSIGSEGV = +LTLIBTHREAD = +M4_LIBOBJS = asnprintf.o asprintf.o basename.o cloexec.o close-stream.o closein.o closeout.o dirname.o dup-safer.o exitfail.o fd-safer.o fflush.o filenamecat.o fopen-safer.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnprintf.o vasprintf.o xmalloc.o +M4_LTLIBOBJS = asnprintf.lo asprintf.lo basename.lo cloexec.lo close-stream.lo closein.lo closeout.lo dirname.lo dup-safer.lo exitfail.lo fd-safer.lo fflush.lo filenamecat.lo fopen-safer.lo fseeko.lo isnanl.lo mkstemp-safer.lo pipe-safer.lo printf-args.lo printf-parse.lo quotearg.lo regex.lo stripslash.lo strstr.lo tempname.lo vasnprintf.lo vasprintf.lo xmalloc.lo +M4tests_LIBOBJS = +M4tests_LTLIBOBJS = +MAKEINFO = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NEXT_ERRNO_H = +NEXT_FCNTL_H = +NEXT_FLOAT_H = +NEXT_MATH_H = +NEXT_SCHED_H = +NEXT_SIGNAL_H = +NEXT_SPAWN_H = +NEXT_STDARG_H = +NEXT_STDINT_H = +NEXT_STDIO_H = +NEXT_STDLIB_H = +NEXT_STRING_H = +NEXT_SYS_STAT_H = +NEXT_SYS_TIME_H = +NEXT_SYS_WAIT_H = +NEXT_UNISTD_H = +NEXT_WCHAR_H = +NEXT_WCTYPE_H = +OBJEXT = o +PACKAGE = m4 +PACKAGE_BUGREPORT = bug-m4@gnu.org +PACKAGE_NAME = GNU M4 +PACKAGE_STRING = GNU M4 1.4.13 +PACKAGE_TARNAME = m4 +PACKAGE_URL = http://www.gnu.org/software/m4/ +PACKAGE_VERSION = 1.4.13 +PATH_SEPARATOR = : +POW_LIB = +PRAGMA_SYSTEM_HEADER = #pragma GCC system_header +PTRDIFF_T_SUFFIX = +RANLIB = ranlib +REPLACE_BTOWC = 0 +REPLACE_CEILF = 0 +REPLACE_CEILL = 0 +REPLACE_CHOWN = 0 +REPLACE_CLOSE = 0 +REPLACE_DPRINTF = 0 +REPLACE_FCHDIR = 0 +REPLACE_FCLOSE = 0 +REPLACE_FFLUSH = 1 +REPLACE_FLOORF = 0 +REPLACE_FLOORL = 0 +REPLACE_FOPEN = 0 +REPLACE_FPRINTF = 0 +REPLACE_FREOPEN = 0 +REPLACE_FREXP = 0 +REPLACE_FREXPL = 0 +REPLACE_FSEEK = 0 +REPLACE_FSEEKO = 1 +REPLACE_FTELL = 0 +REPLACE_FTELLO = 0 +REPLACE_GETCWD = 0 +REPLACE_GETLINE = 0 +REPLACE_GETPAGESIZE = 0 +REPLACE_GETTIMEOFDAY = 0 +REPLACE_HUGE_VAL = 0 +REPLACE_ISFINITE = 0 +REPLACE_ISINF = 0 +REPLACE_ISNAN = 0 +REPLACE_ISWCNTRL = 0 +REPLACE_LCHOWN = 0 +REPLACE_LDEXPL = 0 +REPLACE_LSEEK = 0 +REPLACE_LSTAT = 0 +REPLACE_MBRLEN = 0 +REPLACE_MBRTOWC = 0 +REPLACE_MBSINIT = 0 +REPLACE_MBSNRTOWCS = 0 +REPLACE_MBSRTOWCS = 0 +REPLACE_MBSTATE_T = 0 +REPLACE_MEMMEM = 0 +REPLACE_MKDIR = 0 +REPLACE_MKSTEMP = 0 +REPLACE_NAN = 0 +REPLACE_OBSTACK_PRINTF = 0 +REPLACE_OPEN = 0 +REPLACE_PERROR = 0 +REPLACE_POSIX_SPAWN = 0 +REPLACE_PRINTF = 0 +REPLACE_PUTENV = 0 +REPLACE_ROUND = 0 +REPLACE_ROUNDF = 0 +REPLACE_ROUNDL = 0 +REPLACE_SIGNBIT = 0 +REPLACE_SIGNBIT_USING_GCC = 1 +REPLACE_SNPRINTF = 0 +REPLACE_SPRINTF = 0 +REPLACE_STDIO_WRITE_FUNCS = 0 +REPLACE_STRCASESTR = 0 +REPLACE_STRDUP = 0 +REPLACE_STRERROR = 0 +REPLACE_STRSIGNAL = 0 +REPLACE_STRSTR = 1 +REPLACE_STRTOD = 0 +REPLACE_TRUNCL = 0 +REPLACE_VASPRINTF = 1 +REPLACE_VDPRINTF = 0 +REPLACE_VFPRINTF = 0 +REPLACE_VPRINTF = 0 +REPLACE_VSNPRINTF = 0 +REPLACE_VSPRINTF = 0 +REPLACE_WCRTOMB = 0 +REPLACE_WCSRTOMBS = 0 +REPLACE_WCTOB = 0 +REPLACE_WCWIDTH = 0 +REPLACE_WRITE = 0 +SCHED_H = +SET_MAKE = +SHELL = /bin/bash +SIG_ATOMIC_T_SUFFIX = +SIZE_T_SUFFIX = +SPAWN_H = +STDARG_H = +STDBOOL_H = +STDINT_H = +STRIP = +SYS_STAT_H = sys/stat.h +SYS_TIME_H = +SYS_WAIT_H = sys/wait.h +UNISTD_H_HAVE_WINSOCK2_H = 0 +VERSION = 1.4.13 +VOID_UNSETENV = 0 +WCHAR_H = +WCHAR_T_SUFFIX = +WCTYPE_H = +WINT_T_SUFFIX = +abs_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/tests +abs_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13/tests +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/m4-1.4.13 +ac_ct_CC = gcc +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/m4-1.4.13/build-aux/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +AUTOMAKE_OPTIONS = 1.5 foreign +SUBDIRS = +TESTS_ENVIRONMENT = EXEEXT='' EXEEXT='' \ + LOCALE_FR='none' LOCALE_FR_UTF8='none' \ + EXEEXT='' LIBSIGSEGV='' EXEEXT='' \ + EXEEXT='' srcdir='$(srcdir)' EXEEXT='' \ + EXEEXT='' srcdir='$(srcdir)' EXEEXT='' \ + srcdir='$(srcdir)' EXEEXT='' srcdir='$(srcdir)' \ + EXEEXT='' srcdir='$(srcdir)' EXEEXT='' \ + LOCALE_FR='none' LOCALE_FR_UTF8='none' \ + LOCALE_JA='none' LOCALE_ZH_CN='none' \ + EXEEXT='' LOCALE_FR_UTF8='none' \ + EXEEXT='' srcdir='$(srcdir)' LOCALE_FR='none' \ + LOCALE_FR_UTF8='none' EXEEXT='' \ + LOCALE_FR='none' LOCALE_FR_UTF8='none' \ + LOCALE_JA='none' LOCALE_ZH_CN='none' +noinst_HEADERS = +noinst_LIBRARIES = +check_LIBRARIES = libtests.a +EXTRA_DIST = test-alloca-opt.c test-array_list.c test-array_oset.c \ + test-avltree_oset.c test-binary-io.sh test-binary-io.c \ + test-btowc1.sh test-btowc2.sh test-btowc.c test-c-ctype.c \ + test-c-stack.c test-c-stack.sh test-c-stack2.sh \ + test-closein.sh test-closein.c test-dirname.c test-environ.c \ + test-errno.c test-fcntl.c test-fflush.c test-fflush2.sh \ + test-fflush2.c test-filenamecat.c test-fopen.c test-fpending.c \ + test-fpending.sh test-fpurge.c test-freadahead.c \ + test-freadahead.sh test-freading.c test-frexp.c test-frexpl.c \ + test-fseeko.c test-fseeko.sh test-fseeko2.sh test-ftello.c \ + test-ftello.sh test-ftello2.sh test-getdtablesize.c \ + $(top_srcdir)/build-aux/config.rpath test-gettimeofday.c \ + test-isnand-nolibm.c test-isnand.h nan.h test-isnanf-nolibm.c \ + test-isnanf.h nan.h test-isnanl-nolibm.c test-isnanl.h nan.h \ + test-linkedhash_list.c test-lseek.c test-lseek.sh test-lstat.c \ + test-malloca.c test-math.c test-mbrtowc1.sh test-mbrtowc2.sh \ + test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc.c \ + test-mbsinit.sh test-mbsinit.c test-memchr2.c test-open.c \ + test-posix_spawn1.c test-posix_spawn1.in.sh \ + test-posix_spawn2.c test-posix_spawn2.in.sh \ + test-printf-frexp.c test-printf-frexpl.c test-quotearg.sh \ + test-quotearg.c locale/fr/LC_MESSAGES/test-quotearg.po \ + locale/fr/LC_MESSAGES/test-quotearg.mo test-rawmemchr.c \ + test-sched.c setenv.c test-sigaction.c test-signal.c \ + test-signbit.c test-snprintf.c test-stdbool.c test-stdint.c \ + test-stdio.c test-stdlib.c test-strchrnul.c test-strerror.c \ + test-string.c test-strsignal.c test-strstr.c test-strtod.c \ + test-sys_stat.c test-sys_time.c test-unistd.c unsetenv.c \ + test-vasnprintf.c test-vasprintf-posix.c nan.h \ + test-vasprintf.c test-wchar.c test-wcrtomb.sh test-wcrtomb.c \ + wctob.c test-wctype.c test-xvasprintf.c +BUILT_SOURCES = $(am__append_3) +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump t-c-stack.tmp t-c-stack2.tmp \ + test-fflush.txt test-fpending.t t-fpurge.tmp t-freading.tmp \ + $(am__append_4) +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +# This is for those projects which use "gettextize --intl" to put a source-code +# copy of libintl into their package. In such projects, every Makefile.am needs +# -I$(top_builddir)/intl, so that can be found in this directory. +# For the Makefile.ams in other directories it is the maintainer's +# responsibility; for the one from gnulib we do it here. +# This option has no effect when the user disables NLS (because then the intl +# directory contains no libintl.h file) or when the project does not use +# "gettextize --intl". +AM_CPPFLAGS = -I. -I$(srcdir) -I.. -I$(srcdir)/.. -I../lib \ + -I$(srcdir)/../lib -I$(top_builddir)/intl +LDADD = libtests.a ../lib/libm4.a libtests.a $(LIBTESTS_LIBDEPS) +libtests_a_SOURCES = gl_array_list.h gl_array_list.c gl_array_oset.h \ + gl_array_oset.c +libtests_a_LIBADD = $(M4tests_LIBOBJS) +libtests_a_DEPENDENCIES = $(M4tests_LIBOBJS) +EXTRA_libtests_a_SOURCES = setenv.c unsetenv.c wctob.c +AM_LIBTOOLFLAGS = --preserve-dup-deps +test_array_list_LDADD = $(LDADD) +test_array_oset_LDADD = $(LDADD) +test_avltree_oset_LDADD = $(LDADD) +test_c_stack_LDADD = $(LDADD) $(LIBCSTACK) +test_closein_LDADD = $(LDADD) +test_dirname_LDADD = $(LDADD) +test_filenamecat_LDADD = $(LDADD) +test_frexp_nolibm_SOURCES = test-frexp.c +test_frexpl_nolibm_SOURCES = test-frexpl.c +test_linkedhash_list_LDADD = $(LDADD) +test_quotearg_LDADD = $(LDADD) +test_strsignal_LDADD = $(LDADD) +test_xvasprintf_LDADD = $(LDADD) +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --silent-rules tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign --silent-rules tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkLIBRARIES: + -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libtests.a: $(libtests_a_OBJECTS) $(libtests_a_DEPENDENCIES) + $(AM_V_at)-rm -f libtests.a + $(AM_V_AR)$(libtests_a_AR) libtests.a $(libtests_a_OBJECTS) $(libtests_a_LIBADD) + $(AM_V_at)$(RANLIB) libtests.a + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +test-alloca-opt$(EXEEXT): $(test_alloca_opt_OBJECTS) $(test_alloca_opt_DEPENDENCIES) + @rm -f test-alloca-opt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_alloca_opt_OBJECTS) $(test_alloca_opt_LDADD) $(LIBS) +test-array_list$(EXEEXT): $(test_array_list_OBJECTS) $(test_array_list_DEPENDENCIES) + @rm -f test-array_list$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_array_list_OBJECTS) $(test_array_list_LDADD) $(LIBS) +test-array_oset$(EXEEXT): $(test_array_oset_OBJECTS) $(test_array_oset_DEPENDENCIES) + @rm -f test-array_oset$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_array_oset_OBJECTS) $(test_array_oset_LDADD) $(LIBS) +test-avltree_oset$(EXEEXT): $(test_avltree_oset_OBJECTS) $(test_avltree_oset_DEPENDENCIES) + @rm -f test-avltree_oset$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_avltree_oset_OBJECTS) $(test_avltree_oset_LDADD) $(LIBS) +test-binary-io$(EXEEXT): $(test_binary_io_OBJECTS) $(test_binary_io_DEPENDENCIES) + @rm -f test-binary-io$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_binary_io_OBJECTS) $(test_binary_io_LDADD) $(LIBS) +test-btowc$(EXEEXT): $(test_btowc_OBJECTS) $(test_btowc_DEPENDENCIES) + @rm -f test-btowc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_btowc_OBJECTS) $(test_btowc_LDADD) $(LIBS) +test-c-ctype$(EXEEXT): $(test_c_ctype_OBJECTS) $(test_c_ctype_DEPENDENCIES) + @rm -f test-c-ctype$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_ctype_OBJECTS) $(test_c_ctype_LDADD) $(LIBS) +test-c-stack$(EXEEXT): $(test_c_stack_OBJECTS) $(test_c_stack_DEPENDENCIES) + @rm -f test-c-stack$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_stack_OBJECTS) $(test_c_stack_LDADD) $(LIBS) +test-closein$(EXEEXT): $(test_closein_OBJECTS) $(test_closein_DEPENDENCIES) + @rm -f test-closein$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_closein_OBJECTS) $(test_closein_LDADD) $(LIBS) +test-dirname$(EXEEXT): $(test_dirname_OBJECTS) $(test_dirname_DEPENDENCIES) + @rm -f test-dirname$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_dirname_OBJECTS) $(test_dirname_LDADD) $(LIBS) +test-environ$(EXEEXT): $(test_environ_OBJECTS) $(test_environ_DEPENDENCIES) + @rm -f test-environ$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_environ_OBJECTS) $(test_environ_LDADD) $(LIBS) +test-errno$(EXEEXT): $(test_errno_OBJECTS) $(test_errno_DEPENDENCIES) + @rm -f test-errno$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_errno_OBJECTS) $(test_errno_LDADD) $(LIBS) +test-fcntl$(EXEEXT): $(test_fcntl_OBJECTS) $(test_fcntl_DEPENDENCIES) + @rm -f test-fcntl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fcntl_OBJECTS) $(test_fcntl_LDADD) $(LIBS) +test-fflush$(EXEEXT): $(test_fflush_OBJECTS) $(test_fflush_DEPENDENCIES) + @rm -f test-fflush$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fflush_OBJECTS) $(test_fflush_LDADD) $(LIBS) +test-fflush2$(EXEEXT): $(test_fflush2_OBJECTS) $(test_fflush2_DEPENDENCIES) + @rm -f test-fflush2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fflush2_OBJECTS) $(test_fflush2_LDADD) $(LIBS) +test-filenamecat$(EXEEXT): $(test_filenamecat_OBJECTS) $(test_filenamecat_DEPENDENCIES) + @rm -f test-filenamecat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_filenamecat_OBJECTS) $(test_filenamecat_LDADD) $(LIBS) +test-fopen$(EXEEXT): $(test_fopen_OBJECTS) $(test_fopen_DEPENDENCIES) + @rm -f test-fopen$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fopen_OBJECTS) $(test_fopen_LDADD) $(LIBS) +test-fpending$(EXEEXT): $(test_fpending_OBJECTS) $(test_fpending_DEPENDENCIES) + @rm -f test-fpending$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fpending_OBJECTS) $(test_fpending_LDADD) $(LIBS) +test-fpurge$(EXEEXT): $(test_fpurge_OBJECTS) $(test_fpurge_DEPENDENCIES) + @rm -f test-fpurge$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fpurge_OBJECTS) $(test_fpurge_LDADD) $(LIBS) +test-freadahead$(EXEEXT): $(test_freadahead_OBJECTS) $(test_freadahead_DEPENDENCIES) + @rm -f test-freadahead$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_freadahead_OBJECTS) $(test_freadahead_LDADD) $(LIBS) +test-freading$(EXEEXT): $(test_freading_OBJECTS) $(test_freading_DEPENDENCIES) + @rm -f test-freading$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_freading_OBJECTS) $(test_freading_LDADD) $(LIBS) +test-frexp-nolibm$(EXEEXT): $(test_frexp_nolibm_OBJECTS) $(test_frexp_nolibm_DEPENDENCIES) + @rm -f test-frexp-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_frexp_nolibm_OBJECTS) $(test_frexp_nolibm_LDADD) $(LIBS) +test-frexpl-nolibm$(EXEEXT): $(test_frexpl_nolibm_OBJECTS) $(test_frexpl_nolibm_DEPENDENCIES) + @rm -f test-frexpl-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_frexpl_nolibm_OBJECTS) $(test_frexpl_nolibm_LDADD) $(LIBS) +test-fseeko$(EXEEXT): $(test_fseeko_OBJECTS) $(test_fseeko_DEPENDENCIES) + @rm -f test-fseeko$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fseeko_OBJECTS) $(test_fseeko_LDADD) $(LIBS) +test-ftello$(EXEEXT): $(test_ftello_OBJECTS) $(test_ftello_DEPENDENCIES) + @rm -f test-ftello$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ftello_OBJECTS) $(test_ftello_LDADD) $(LIBS) +test-getdtablesize$(EXEEXT): $(test_getdtablesize_OBJECTS) $(test_getdtablesize_DEPENDENCIES) + @rm -f test-getdtablesize$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_getdtablesize_OBJECTS) $(test_getdtablesize_LDADD) $(LIBS) +test-gettimeofday$(EXEEXT): $(test_gettimeofday_OBJECTS) $(test_gettimeofday_DEPENDENCIES) + @rm -f test-gettimeofday$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_gettimeofday_OBJECTS) $(test_gettimeofday_LDADD) $(LIBS) +test-isnand-nolibm$(EXEEXT): $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_DEPENDENCIES) + @rm -f test-isnand-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_LDADD) $(LIBS) +test-isnanf-nolibm$(EXEEXT): $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_DEPENDENCIES) + @rm -f test-isnanf-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_LDADD) $(LIBS) +test-isnanl-nolibm$(EXEEXT): $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_DEPENDENCIES) + @rm -f test-isnanl-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_LDADD) $(LIBS) +test-linkedhash_list$(EXEEXT): $(test_linkedhash_list_OBJECTS) $(test_linkedhash_list_DEPENDENCIES) + @rm -f test-linkedhash_list$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_linkedhash_list_OBJECTS) $(test_linkedhash_list_LDADD) $(LIBS) +test-lseek$(EXEEXT): $(test_lseek_OBJECTS) $(test_lseek_DEPENDENCIES) + @rm -f test-lseek$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_lseek_OBJECTS) $(test_lseek_LDADD) $(LIBS) +test-lstat$(EXEEXT): $(test_lstat_OBJECTS) $(test_lstat_DEPENDENCIES) + @rm -f test-lstat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_lstat_OBJECTS) $(test_lstat_LDADD) $(LIBS) +test-malloca$(EXEEXT): $(test_malloca_OBJECTS) $(test_malloca_DEPENDENCIES) + @rm -f test-malloca$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_malloca_OBJECTS) $(test_malloca_LDADD) $(LIBS) +test-math$(EXEEXT): $(test_math_OBJECTS) $(test_math_DEPENDENCIES) + @rm -f test-math$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_math_OBJECTS) $(test_math_LDADD) $(LIBS) +test-mbrtowc$(EXEEXT): $(test_mbrtowc_OBJECTS) $(test_mbrtowc_DEPENDENCIES) + @rm -f test-mbrtowc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbrtowc_OBJECTS) $(test_mbrtowc_LDADD) $(LIBS) +test-mbsinit$(EXEEXT): $(test_mbsinit_OBJECTS) $(test_mbsinit_DEPENDENCIES) + @rm -f test-mbsinit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbsinit_OBJECTS) $(test_mbsinit_LDADD) $(LIBS) +test-memchr2$(EXEEXT): $(test_memchr2_OBJECTS) $(test_memchr2_DEPENDENCIES) + @rm -f test-memchr2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_memchr2_OBJECTS) $(test_memchr2_LDADD) $(LIBS) +test-open$(EXEEXT): $(test_open_OBJECTS) $(test_open_DEPENDENCIES) + @rm -f test-open$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_open_OBJECTS) $(test_open_LDADD) $(LIBS) +test-posix_spawn1$(EXEEXT): $(test_posix_spawn1_OBJECTS) $(test_posix_spawn1_DEPENDENCIES) + @rm -f test-posix_spawn1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_posix_spawn1_OBJECTS) $(test_posix_spawn1_LDADD) $(LIBS) +test-posix_spawn2$(EXEEXT): $(test_posix_spawn2_OBJECTS) $(test_posix_spawn2_DEPENDENCIES) + @rm -f test-posix_spawn2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_posix_spawn2_OBJECTS) $(test_posix_spawn2_LDADD) $(LIBS) +test-printf-frexp$(EXEEXT): $(test_printf_frexp_OBJECTS) $(test_printf_frexp_DEPENDENCIES) + @rm -f test-printf-frexp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_printf_frexp_OBJECTS) $(test_printf_frexp_LDADD) $(LIBS) +test-printf-frexpl$(EXEEXT): $(test_printf_frexpl_OBJECTS) $(test_printf_frexpl_DEPENDENCIES) + @rm -f test-printf-frexpl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_printf_frexpl_OBJECTS) $(test_printf_frexpl_LDADD) $(LIBS) +test-quotearg$(EXEEXT): $(test_quotearg_OBJECTS) $(test_quotearg_DEPENDENCIES) + @rm -f test-quotearg$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_quotearg_OBJECTS) $(test_quotearg_LDADD) $(LIBS) +test-rawmemchr$(EXEEXT): $(test_rawmemchr_OBJECTS) $(test_rawmemchr_DEPENDENCIES) + @rm -f test-rawmemchr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_rawmemchr_OBJECTS) $(test_rawmemchr_LDADD) $(LIBS) +test-sched$(EXEEXT): $(test_sched_OBJECTS) $(test_sched_DEPENDENCIES) + @rm -f test-sched$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sched_OBJECTS) $(test_sched_LDADD) $(LIBS) +test-sigaction$(EXEEXT): $(test_sigaction_OBJECTS) $(test_sigaction_DEPENDENCIES) + @rm -f test-sigaction$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sigaction_OBJECTS) $(test_sigaction_LDADD) $(LIBS) +test-signal$(EXEEXT): $(test_signal_OBJECTS) $(test_signal_DEPENDENCIES) + @rm -f test-signal$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_signal_OBJECTS) $(test_signal_LDADD) $(LIBS) +test-signbit$(EXEEXT): $(test_signbit_OBJECTS) $(test_signbit_DEPENDENCIES) + @rm -f test-signbit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_signbit_OBJECTS) $(test_signbit_LDADD) $(LIBS) +test-snprintf$(EXEEXT): $(test_snprintf_OBJECTS) $(test_snprintf_DEPENDENCIES) + @rm -f test-snprintf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_snprintf_OBJECTS) $(test_snprintf_LDADD) $(LIBS) +test-stdbool$(EXEEXT): $(test_stdbool_OBJECTS) $(test_stdbool_DEPENDENCIES) + @rm -f test-stdbool$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdbool_OBJECTS) $(test_stdbool_LDADD) $(LIBS) +test-stdint$(EXEEXT): $(test_stdint_OBJECTS) $(test_stdint_DEPENDENCIES) + @rm -f test-stdint$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdint_OBJECTS) $(test_stdint_LDADD) $(LIBS) +test-stdio$(EXEEXT): $(test_stdio_OBJECTS) $(test_stdio_DEPENDENCIES) + @rm -f test-stdio$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdio_OBJECTS) $(test_stdio_LDADD) $(LIBS) +test-stdlib$(EXEEXT): $(test_stdlib_OBJECTS) $(test_stdlib_DEPENDENCIES) + @rm -f test-stdlib$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdlib_OBJECTS) $(test_stdlib_LDADD) $(LIBS) +test-strchrnul$(EXEEXT): $(test_strchrnul_OBJECTS) $(test_strchrnul_DEPENDENCIES) + @rm -f test-strchrnul$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strchrnul_OBJECTS) $(test_strchrnul_LDADD) $(LIBS) +test-strerror$(EXEEXT): $(test_strerror_OBJECTS) $(test_strerror_DEPENDENCIES) + @rm -f test-strerror$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strerror_OBJECTS) $(test_strerror_LDADD) $(LIBS) +test-string$(EXEEXT): $(test_string_OBJECTS) $(test_string_DEPENDENCIES) + @rm -f test-string$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_string_OBJECTS) $(test_string_LDADD) $(LIBS) +test-strsignal$(EXEEXT): $(test_strsignal_OBJECTS) $(test_strsignal_DEPENDENCIES) + @rm -f test-strsignal$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strsignal_OBJECTS) $(test_strsignal_LDADD) $(LIBS) +test-strstr$(EXEEXT): $(test_strstr_OBJECTS) $(test_strstr_DEPENDENCIES) + @rm -f test-strstr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strstr_OBJECTS) $(test_strstr_LDADD) $(LIBS) +test-strtod$(EXEEXT): $(test_strtod_OBJECTS) $(test_strtod_DEPENDENCIES) + @rm -f test-strtod$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strtod_OBJECTS) $(test_strtod_LDADD) $(LIBS) +test-sys_stat$(EXEEXT): $(test_sys_stat_OBJECTS) $(test_sys_stat_DEPENDENCIES) + @rm -f test-sys_stat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sys_stat_OBJECTS) $(test_sys_stat_LDADD) $(LIBS) +test-sys_time$(EXEEXT): $(test_sys_time_OBJECTS) $(test_sys_time_DEPENDENCIES) + @rm -f test-sys_time$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sys_time_OBJECTS) $(test_sys_time_LDADD) $(LIBS) +test-unistd$(EXEEXT): $(test_unistd_OBJECTS) $(test_unistd_DEPENDENCIES) + @rm -f test-unistd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_unistd_OBJECTS) $(test_unistd_LDADD) $(LIBS) +test-vasnprintf$(EXEEXT): $(test_vasnprintf_OBJECTS) $(test_vasnprintf_DEPENDENCIES) + @rm -f test-vasnprintf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_vasnprintf_OBJECTS) $(test_vasnprintf_LDADD) $(LIBS) +test-vasprintf$(EXEEXT): $(test_vasprintf_OBJECTS) $(test_vasprintf_DEPENDENCIES) + @rm -f test-vasprintf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_vasprintf_OBJECTS) $(test_vasprintf_LDADD) $(LIBS) +test-vasprintf-posix$(EXEEXT): $(test_vasprintf_posix_OBJECTS) $(test_vasprintf_posix_DEPENDENCIES) + @rm -f test-vasprintf-posix$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_vasprintf_posix_OBJECTS) $(test_vasprintf_posix_LDADD) $(LIBS) +test-wchar$(EXEEXT): $(test_wchar_OBJECTS) $(test_wchar_DEPENDENCIES) + @rm -f test-wchar$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wchar_OBJECTS) $(test_wchar_LDADD) $(LIBS) +test-wcrtomb$(EXEEXT): $(test_wcrtomb_OBJECTS) $(test_wcrtomb_DEPENDENCIES) + @rm -f test-wcrtomb$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wcrtomb_OBJECTS) $(test_wcrtomb_LDADD) $(LIBS) +test-wctype$(EXEEXT): $(test_wctype_OBJECTS) $(test_wctype_DEPENDENCIES) + @rm -f test-wctype$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wctype_OBJECTS) $(test_wctype_LDADD) $(LIBS) +test-xvasprintf$(EXEEXT): $(test_xvasprintf_OBJECTS) $(test_xvasprintf_DEPENDENCIES) + @rm -f test-xvasprintf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_xvasprintf_OBJECTS) $(test_xvasprintf_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/gl_array_list.Po +include ./$(DEPDIR)/gl_array_oset.Po +include ./$(DEPDIR)/setenv.Po +include ./$(DEPDIR)/test-alloca-opt.Po +include ./$(DEPDIR)/test-array_list.Po +include ./$(DEPDIR)/test-array_oset.Po +include ./$(DEPDIR)/test-avltree_oset.Po +include ./$(DEPDIR)/test-binary-io.Po +include ./$(DEPDIR)/test-btowc.Po +include ./$(DEPDIR)/test-c-ctype.Po +include ./$(DEPDIR)/test-c-stack.Po +include ./$(DEPDIR)/test-closein.Po +include ./$(DEPDIR)/test-dirname.Po +include ./$(DEPDIR)/test-environ.Po +include ./$(DEPDIR)/test-errno.Po +include ./$(DEPDIR)/test-fcntl.Po +include ./$(DEPDIR)/test-fflush.Po +include ./$(DEPDIR)/test-fflush2.Po +include ./$(DEPDIR)/test-filenamecat.Po +include ./$(DEPDIR)/test-fopen.Po +include ./$(DEPDIR)/test-fpending.Po +include ./$(DEPDIR)/test-fpurge.Po +include ./$(DEPDIR)/test-freadahead.Po +include ./$(DEPDIR)/test-freading.Po +include ./$(DEPDIR)/test-frexp.Po +include ./$(DEPDIR)/test-frexpl.Po +include ./$(DEPDIR)/test-fseeko.Po +include ./$(DEPDIR)/test-ftello.Po +include ./$(DEPDIR)/test-getdtablesize.Po +include ./$(DEPDIR)/test-gettimeofday.Po +include ./$(DEPDIR)/test-isnand-nolibm.Po +include ./$(DEPDIR)/test-isnanf-nolibm.Po +include ./$(DEPDIR)/test-isnanl-nolibm.Po +include ./$(DEPDIR)/test-linkedhash_list.Po +include ./$(DEPDIR)/test-lseek.Po +include ./$(DEPDIR)/test-lstat.Po +include ./$(DEPDIR)/test-malloca.Po +include ./$(DEPDIR)/test-math.Po +include ./$(DEPDIR)/test-mbrtowc.Po +include ./$(DEPDIR)/test-mbsinit.Po +include ./$(DEPDIR)/test-memchr2.Po +include ./$(DEPDIR)/test-open.Po +include ./$(DEPDIR)/test-posix_spawn1.Po +include ./$(DEPDIR)/test-posix_spawn2.Po +include ./$(DEPDIR)/test-printf-frexp.Po +include ./$(DEPDIR)/test-printf-frexpl.Po +include ./$(DEPDIR)/test-quotearg.Po +include ./$(DEPDIR)/test-rawmemchr.Po +include ./$(DEPDIR)/test-sched.Po +include ./$(DEPDIR)/test-sigaction.Po +include ./$(DEPDIR)/test-signal.Po +include ./$(DEPDIR)/test-signbit.Po +include ./$(DEPDIR)/test-snprintf.Po +include ./$(DEPDIR)/test-stdbool.Po +include ./$(DEPDIR)/test-stdint.Po +include ./$(DEPDIR)/test-stdio.Po +include ./$(DEPDIR)/test-stdlib.Po +include ./$(DEPDIR)/test-strchrnul.Po +include ./$(DEPDIR)/test-strerror.Po +include ./$(DEPDIR)/test-string.Po +include ./$(DEPDIR)/test-strsignal.Po +include ./$(DEPDIR)/test-strstr.Po +include ./$(DEPDIR)/test-strtod.Po +include ./$(DEPDIR)/test-sys_stat.Po +include ./$(DEPDIR)/test-sys_time.Po +include ./$(DEPDIR)/test-unistd.Po +include ./$(DEPDIR)/test-vasnprintf.Po +include ./$(DEPDIR)/test-vasprintf-posix.Po +include ./$(DEPDIR)/test-vasprintf.Po +include ./$(DEPDIR)/test-wchar.Po +include ./$(DEPDIR)/test-wcrtomb.Po +include ./$(DEPDIR)/test-wctype.Po +include ./$(DEPDIR)/test-xvasprintf.Po +include ./$(DEPDIR)/unsetenv.Po +include ./$(DEPDIR)/wctob.Po + +.c.o: + $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# $(AM_V_CC) \ +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + echo "$$grn$$dashes"; \ + else \ + echo "$$red$$dashes"; \ + fi; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes$$std"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ + clean-local clean-noinstLIBRARIES clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + check-am ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-TESTS check-am clean \ + clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ + clean-local clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ + ctags-recursive distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-local pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +test-posix_spawn1.sh: test-posix_spawn1.in.sh + cp $(srcdir)/test-posix_spawn1.in.sh $@-t + mv $@-t $@ +test-posix_spawn2.sh: test-posix_spawn2.in.sh + cp $(srcdir)/test-posix_spawn2.in.sh $@-t + mv $@-t $@ + +# Clean up after Solaris cc. +clean-local: + rm -rf SunWS_cache + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/tests/Makefile.am b/coreseek/m4-1.4.13/tests/Makefile.am new file mode 100644 index 0000000..9b39cba --- /dev/null +++ b/coreseek/m4-1.4.13/tests/Makefile.am @@ -0,0 +1,753 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + +AUTOMAKE_OPTIONS = 1.5 foreign + +SUBDIRS = +TESTS = +TESTS_ENVIRONMENT = +noinst_PROGRAMS = +check_PROGRAMS = +noinst_HEADERS = +noinst_LIBRARIES = +check_LIBRARIES = libtests.a +EXTRA_DIST = +BUILT_SOURCES = +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +AM_CPPFLAGS = \ + -I. -I$(srcdir) \ + -I.. -I$(srcdir)/.. \ + -I../lib -I$(srcdir)/../lib + +LDADD = libtests.a ../lib/libm4.a libtests.a $(LIBTESTS_LIBDEPS) + +libtests_a_SOURCES = +libtests_a_LIBADD = $(M4tests_LIBOBJS) +libtests_a_DEPENDENCIES = $(M4tests_LIBOBJS) +EXTRA_libtests_a_SOURCES = +AM_LIBTOOLFLAGS = --preserve-dup-deps + +## begin gnulib module alloca-opt-tests + +TESTS += test-alloca-opt +check_PROGRAMS += test-alloca-opt + +EXTRA_DIST += test-alloca-opt.c + +## end gnulib module alloca-opt-tests + +## begin gnulib module array-list + +libtests_a_SOURCES += gl_array_list.h gl_array_list.c + +## end gnulib module array-list + +## begin gnulib module array-list-tests + +TESTS += test-array_list +check_PROGRAMS += test-array_list +test_array_list_LDADD = $(LDADD) @LIBINTL@ + +EXTRA_DIST += test-array_list.c + +## end gnulib module array-list-tests + +## begin gnulib module array-oset + +libtests_a_SOURCES += gl_array_oset.h gl_array_oset.c + +## end gnulib module array-oset + +## begin gnulib module array-oset-tests + +TESTS += test-array_oset +check_PROGRAMS += test-array_oset +test_array_oset_LDADD = $(LDADD) @LIBINTL@ + +EXTRA_DIST += test-array_oset.c + +## end gnulib module array-oset-tests + +## begin gnulib module avltree-oset-tests + +TESTS += test-avltree_oset +check_PROGRAMS += test-avltree_oset +test_avltree_oset_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-avltree_oset.c + +## end gnulib module avltree-oset-tests + +## begin gnulib module binary-io-tests + +TESTS += test-binary-io.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' +check_PROGRAMS += test-binary-io + +EXTRA_DIST += test-binary-io.sh test-binary-io.c + +## end gnulib module binary-io-tests + +## begin gnulib module btowc-tests + +TESTS += test-btowc1.sh test-btowc2.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-btowc + +EXTRA_DIST += test-btowc1.sh test-btowc2.sh test-btowc.c + +## end gnulib module btowc-tests + +## begin gnulib module c-ctype-tests + +TESTS += test-c-ctype +check_PROGRAMS += test-c-ctype + +EXTRA_DIST += test-c-ctype.c + +## end gnulib module c-ctype-tests + +## begin gnulib module c-stack-tests + +TESTS += test-c-stack.sh test-c-stack2.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LIBSIGSEGV='@LIBSIGSEGV@' +check_PROGRAMS += test-c-stack +test_c_stack_LDADD = $(LDADD) $(LIBCSTACK) @LIBINTL@ +MOSTLYCLEANFILES += t-c-stack.tmp t-c-stack2.tmp +EXTRA_DIST += test-c-stack.c test-c-stack.sh test-c-stack2.sh + +## end gnulib module c-stack-tests + +## begin gnulib module closein-tests + +TESTS += test-closein.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' +check_PROGRAMS += test-closein +test_closein_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-closein.sh test-closein.c + +## end gnulib module closein-tests + +## begin gnulib module dirname-tests + +TESTS += test-dirname +check_PROGRAMS += test-dirname +test_dirname_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-dirname.c + +## end gnulib module dirname-tests + +## begin gnulib module environ-tests + +TESTS += test-environ +check_PROGRAMS += test-environ + +EXTRA_DIST += test-environ.c + +## end gnulib module environ-tests + +## begin gnulib module errno-tests + +TESTS += test-errno +check_PROGRAMS += test-errno + +EXTRA_DIST += test-errno.c + +## end gnulib module errno-tests + +## begin gnulib module fcntl-tests + +TESTS += test-fcntl +check_PROGRAMS += test-fcntl + +EXTRA_DIST += test-fcntl.c + +## end gnulib module fcntl-tests + +## begin gnulib module fflush-tests + +TESTS += test-fflush test-fflush2.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' +check_PROGRAMS += test-fflush test-fflush2 +MOSTLYCLEANFILES += test-fflush.txt +EXTRA_DIST += test-fflush.c test-fflush2.sh test-fflush2.c + +## end gnulib module fflush-tests + +## begin gnulib module filenamecat-tests + +TESTS += test-filenamecat +check_PROGRAMS += test-filenamecat +test_filenamecat_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-filenamecat.c + +## end gnulib module filenamecat-tests + +## begin gnulib module fopen-tests + +TESTS += test-fopen +check_PROGRAMS += test-fopen + +EXTRA_DIST += test-fopen.c + +## end gnulib module fopen-tests + +## begin gnulib module fpending-tests + +TESTS += test-fpending.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' +check_PROGRAMS += test-fpending +MOSTLYCLEANFILES += test-fpending.t +EXTRA_DIST += test-fpending.c test-fpending.sh + +## end gnulib module fpending-tests + +## begin gnulib module fpurge-tests + +TESTS += test-fpurge +check_PROGRAMS += test-fpurge +MOSTLYCLEANFILES += t-fpurge.tmp +EXTRA_DIST += test-fpurge.c + +## end gnulib module fpurge-tests + +## begin gnulib module freadahead-tests + +TESTS += test-freadahead.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' +check_PROGRAMS += test-freadahead +EXTRA_DIST += test-freadahead.c test-freadahead.sh + +## end gnulib module freadahead-tests + +## begin gnulib module freading-tests + +TESTS += test-freading +check_PROGRAMS += test-freading +MOSTLYCLEANFILES += t-freading.tmp +EXTRA_DIST += test-freading.c + +## end gnulib module freading-tests + +## begin gnulib module frexp-nolibm-tests + +TESTS += test-frexp-nolibm +check_PROGRAMS += test-frexp-nolibm +test_frexp_nolibm_SOURCES = test-frexp.c + +EXTRA_DIST += test-frexp.c + +## end gnulib module frexp-nolibm-tests + +## begin gnulib module frexpl-nolibm-tests + +TESTS += test-frexpl-nolibm +check_PROGRAMS += test-frexpl-nolibm +test_frexpl_nolibm_SOURCES = test-frexpl.c + +EXTRA_DIST += test-frexpl.c + +## end gnulib module frexpl-nolibm-tests + +## begin gnulib module fseeko-tests + +TESTS += test-fseeko.sh test-fseeko2.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' +check_PROGRAMS += test-fseeko +EXTRA_DIST += test-fseeko.c test-fseeko.sh test-fseeko2.sh + +## end gnulib module fseeko-tests + +## begin gnulib module ftello-tests + +TESTS += test-ftello.sh test-ftello2.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' +check_PROGRAMS += test-ftello +EXTRA_DIST += test-ftello.c test-ftello.sh test-ftello2.sh + +## end gnulib module ftello-tests + +## begin gnulib module getdtablesize-tests + +TESTS += test-getdtablesize +check_PROGRAMS += test-getdtablesize +EXTRA_DIST += test-getdtablesize.c + +## end gnulib module getdtablesize-tests + +## begin gnulib module gettext + +# This is for those projects which use "gettextize --intl" to put a source-code +# copy of libintl into their package. In such projects, every Makefile.am needs +# -I$(top_builddir)/intl, so that can be found in this directory. +# For the Makefile.ams in other directories it is the maintainer's +# responsibility; for the one from gnulib we do it here. +# This option has no effect when the user disables NLS (because then the intl +# directory contains no libintl.h file) or when the project does not use +# "gettextize --intl". +AM_CPPFLAGS += -I$(top_builddir)/intl + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module gettext + +## begin gnulib module gettimeofday-tests + +TESTS += test-gettimeofday +check_PROGRAMS += test-gettimeofday + +EXTRA_DIST += test-gettimeofday.c + +## end gnulib module gettimeofday-tests + +## begin gnulib module isnand-nolibm-tests + +TESTS += test-isnand-nolibm +check_PROGRAMS += test-isnand-nolibm + +EXTRA_DIST += test-isnand-nolibm.c test-isnand.h nan.h + +## end gnulib module isnand-nolibm-tests + +## begin gnulib module isnanf-nolibm-tests + +TESTS += test-isnanf-nolibm +check_PROGRAMS += test-isnanf-nolibm + +EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h nan.h + +## end gnulib module isnanf-nolibm-tests + +## begin gnulib module isnanl-nolibm-tests + +TESTS += test-isnanl-nolibm +check_PROGRAMS += test-isnanl-nolibm + +EXTRA_DIST += test-isnanl-nolibm.c test-isnanl.h nan.h + +## end gnulib module isnanl-nolibm-tests + +## begin gnulib module linkedhash-list-tests + +TESTS += test-linkedhash_list +check_PROGRAMS += test-linkedhash_list +test_linkedhash_list_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-linkedhash_list.c + +## end gnulib module linkedhash-list-tests + +## begin gnulib module lseek-tests + +TESTS += test-lseek.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' +check_PROGRAMS += test-lseek +EXTRA_DIST += test-lseek.c test-lseek.sh + +## end gnulib module lseek-tests + +## begin gnulib module lstat-tests + +TESTS += test-lstat +check_PROGRAMS += test-lstat +EXTRA_DIST += test-lstat.c + +## end gnulib module lstat-tests + +## begin gnulib module malloca-tests + +TESTS += test-malloca +check_PROGRAMS += test-malloca + +EXTRA_DIST += test-malloca.c + +## end gnulib module malloca-tests + +## begin gnulib module math-tests + +TESTS += test-math +check_PROGRAMS += test-math + +EXTRA_DIST += test-math.c + +## end gnulib module math-tests + +## begin gnulib module mbrtowc-tests + +TESTS += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh +TESTS_ENVIRONMENT += \ + EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-mbrtowc + +EXTRA_DIST += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc.c + +## end gnulib module mbrtowc-tests + +## begin gnulib module mbsinit-tests + +TESTS += test-mbsinit.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-mbsinit + +EXTRA_DIST += test-mbsinit.sh test-mbsinit.c + +## end gnulib module mbsinit-tests + +## begin gnulib module memchr2-tests + +TESTS += test-memchr2 +check_PROGRAMS += test-memchr2 +EXTRA_DIST += test-memchr2.c + +## end gnulib module memchr2-tests + +## begin gnulib module open-tests + +TESTS += test-open +check_PROGRAMS += test-open + +EXTRA_DIST += test-open.c + +## end gnulib module open-tests + +## begin gnulib module posix_spawnp-tests + +if POSIX_SPAWN_PORTED +TESTS += test-posix_spawn1 test-posix_spawn2 +check_PROGRAMS += test-posix_spawn1 test-posix_spawn2 + +BUILT_SOURCES += test-posix_spawn1.sh +test-posix_spawn1.sh: test-posix_spawn1.in.sh + cp $(srcdir)/test-posix_spawn1.in.sh $@-t + mv $@-t $@ +MOSTLYCLEANFILES += test-posix_spawn1.sh test-posix_spawn1.sh-t + +BUILT_SOURCES += test-posix_spawn2.sh +test-posix_spawn2.sh: test-posix_spawn2.in.sh + cp $(srcdir)/test-posix_spawn2.in.sh $@-t + mv $@-t $@ +MOSTLYCLEANFILES += test-posix_spawn2.sh test-posix_spawn2.sh-t +endif +EXTRA_DIST += test-posix_spawn1.c test-posix_spawn1.in.sh test-posix_spawn2.c test-posix_spawn2.in.sh + +## end gnulib module posix_spawnp-tests + +## begin gnulib module printf-frexp-tests + +TESTS += test-printf-frexp +check_PROGRAMS += test-printf-frexp + +EXTRA_DIST += test-printf-frexp.c + +## end gnulib module printf-frexp-tests + +## begin gnulib module printf-frexpl-tests + +TESTS += test-printf-frexpl +check_PROGRAMS += test-printf-frexpl + +EXTRA_DIST += test-printf-frexpl.c + +## end gnulib module printf-frexpl-tests + +## begin gnulib module quotearg-tests + +TESTS += test-quotearg.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-quotearg +test_quotearg_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-quotearg.sh test-quotearg.c locale/fr/LC_MESSAGES/test-quotearg.po locale/fr/LC_MESSAGES/test-quotearg.mo + +## end gnulib module quotearg-tests + +## begin gnulib module rawmemchr-tests + +TESTS += test-rawmemchr +check_PROGRAMS += test-rawmemchr +EXTRA_DIST += test-rawmemchr.c + +## end gnulib module rawmemchr-tests + +## begin gnulib module sched-tests + +TESTS += test-sched +check_PROGRAMS += test-sched +EXTRA_DIST += test-sched.c + +## end gnulib module sched-tests + +## begin gnulib module setenv + + +EXTRA_DIST += setenv.c + +EXTRA_libtests_a_SOURCES += setenv.c + +## end gnulib module setenv + +## begin gnulib module sigaction-tests + +TESTS += test-sigaction +check_PROGRAMS += test-sigaction +EXTRA_DIST += test-sigaction.c + +## end gnulib module sigaction-tests + +## begin gnulib module signal-tests + +TESTS += test-signal +check_PROGRAMS += test-signal + +EXTRA_DIST += test-signal.c + +## end gnulib module signal-tests + +## begin gnulib module signbit-tests + +TESTS += test-signbit +check_PROGRAMS += test-signbit + +EXTRA_DIST += test-signbit.c + +## end gnulib module signbit-tests + +## begin gnulib module snprintf-tests + +TESTS += test-snprintf +check_PROGRAMS += test-snprintf + +EXTRA_DIST += test-snprintf.c + +## end gnulib module snprintf-tests + +## begin gnulib module stdbool-tests + +TESTS += test-stdbool +check_PROGRAMS += test-stdbool + +EXTRA_DIST += test-stdbool.c + +## end gnulib module stdbool-tests + +## begin gnulib module stdint-tests + +TESTS += test-stdint +check_PROGRAMS += test-stdint + +EXTRA_DIST += test-stdint.c + +## end gnulib module stdint-tests + +## begin gnulib module stdio-tests + +TESTS += test-stdio +check_PROGRAMS += test-stdio + +EXTRA_DIST += test-stdio.c + +## end gnulib module stdio-tests + +## begin gnulib module stdlib-tests + +TESTS += test-stdlib +check_PROGRAMS += test-stdlib + +EXTRA_DIST += test-stdlib.c + +## end gnulib module stdlib-tests + +## begin gnulib module strchrnul-tests + +TESTS += test-strchrnul +check_PROGRAMS += test-strchrnul +EXTRA_DIST += test-strchrnul.c + +## end gnulib module strchrnul-tests + +## begin gnulib module strerror-tests + +TESTS += test-strerror +check_PROGRAMS += test-strerror +EXTRA_DIST += test-strerror.c + +## end gnulib module strerror-tests + +## begin gnulib module string-tests + +TESTS += test-string +check_PROGRAMS += test-string + +EXTRA_DIST += test-string.c + +## end gnulib module string-tests + +## begin gnulib module strsignal-tests + +TESTS += test-strsignal +check_PROGRAMS += test-strsignal +test_strsignal_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += test-strsignal.c + +## end gnulib module strsignal-tests + +## begin gnulib module strstr-tests + +TESTS += test-strstr +check_PROGRAMS += test-strstr + +EXTRA_DIST += test-strstr.c + +## end gnulib module strstr-tests + +## begin gnulib module strtod-tests + +LIBS += $(POW_LIB) +TESTS += test-strtod +check_PROGRAMS += test-strtod +EXTRA_DIST += test-strtod.c + +## end gnulib module strtod-tests + +## begin gnulib module sys_stat-tests + +TESTS += test-sys_stat +check_PROGRAMS += test-sys_stat + +EXTRA_DIST += test-sys_stat.c + +## end gnulib module sys_stat-tests + +## begin gnulib module sys_time-tests + +TESTS += test-sys_time +check_PROGRAMS += test-sys_time + +EXTRA_DIST += test-sys_time.c + +## end gnulib module sys_time-tests + +## begin gnulib module unistd-tests + +TESTS += test-unistd +check_PROGRAMS += test-unistd + +EXTRA_DIST += test-unistd.c + +## end gnulib module unistd-tests + +## begin gnulib module unsetenv + + +EXTRA_DIST += unsetenv.c + +EXTRA_libtests_a_SOURCES += unsetenv.c + +## end gnulib module unsetenv + +## begin gnulib module vasnprintf-tests + +TESTS += test-vasnprintf +check_PROGRAMS += test-vasnprintf + +EXTRA_DIST += test-vasnprintf.c + +## end gnulib module vasnprintf-tests + +## begin gnulib module vasprintf-posix-tests + +TESTS += test-vasprintf-posix +check_PROGRAMS += test-vasprintf-posix + +EXTRA_DIST += test-vasprintf-posix.c nan.h + +## end gnulib module vasprintf-posix-tests + +## begin gnulib module vasprintf-tests + +TESTS += test-vasprintf +check_PROGRAMS += test-vasprintf + +EXTRA_DIST += test-vasprintf.c + +## end gnulib module vasprintf-tests + +## begin gnulib module wchar-tests + +TESTS += test-wchar +check_PROGRAMS += test-wchar + +EXTRA_DIST += test-wchar.c + +## end gnulib module wchar-tests + +## begin gnulib module wcrtomb-tests + +TESTS += test-wcrtomb.sh +TESTS_ENVIRONMENT += \ + EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-wcrtomb + +EXTRA_DIST += test-wcrtomb.sh test-wcrtomb.c + +## end gnulib module wcrtomb-tests + +## begin gnulib module wctob + + +EXTRA_DIST += wctob.c + +EXTRA_libtests_a_SOURCES += wctob.c + +## end gnulib module wctob + +## begin gnulib module wctype-tests + +TESTS += test-wctype +check_PROGRAMS += test-wctype + +EXTRA_DIST += test-wctype.c + +## end gnulib module wctype-tests + +## begin gnulib module xvasprintf-tests + +TESTS += test-xvasprintf +check_PROGRAMS += test-xvasprintf +test_xvasprintf_LDADD = $(LDADD) @LIBINTL@ + +EXTRA_DIST += test-xvasprintf.c + +## end gnulib module xvasprintf-tests + +# Clean up after Solaris cc. +clean-local: + rm -rf SunWS_cache + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : diff --git a/coreseek/m4-1.4.13/tests/Makefile.in b/coreseek/m4-1.4.13/tests/Makefile.in new file mode 100644 index 0000000..61222b1 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/Makefile.in @@ -0,0 +1,2078 @@ +# Makefile.in generated by automake 1.10b from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +TESTS = test-alloca-opt$(EXEEXT) test-array_list$(EXEEXT) \ + test-array_oset$(EXEEXT) test-avltree_oset$(EXEEXT) \ + test-binary-io.sh test-btowc1.sh test-btowc2.sh \ + test-c-ctype$(EXEEXT) test-c-stack.sh test-c-stack2.sh \ + test-closein.sh test-dirname$(EXEEXT) test-environ$(EXEEXT) \ + test-errno$(EXEEXT) test-fcntl$(EXEEXT) test-fflush$(EXEEXT) \ + test-fflush2.sh test-filenamecat$(EXEEXT) test-fopen$(EXEEXT) \ + test-fpending.sh test-fpurge$(EXEEXT) test-freadahead.sh \ + test-freading$(EXEEXT) test-frexp-nolibm$(EXEEXT) \ + test-frexpl-nolibm$(EXEEXT) test-fseeko.sh test-fseeko2.sh \ + test-ftello.sh test-ftello2.sh test-getdtablesize$(EXEEXT) \ + test-gettimeofday$(EXEEXT) test-isnand-nolibm$(EXEEXT) \ + test-isnanf-nolibm$(EXEEXT) test-isnanl-nolibm$(EXEEXT) \ + test-linkedhash_list$(EXEEXT) test-lseek.sh \ + test-lstat$(EXEEXT) test-malloca$(EXEEXT) test-math$(EXEEXT) \ + test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh \ + test-mbrtowc4.sh test-mbsinit.sh test-memchr2$(EXEEXT) \ + test-open$(EXEEXT) $(am__EXEEXT_1) test-printf-frexp$(EXEEXT) \ + test-printf-frexpl$(EXEEXT) test-quotearg.sh \ + test-rawmemchr$(EXEEXT) test-sched$(EXEEXT) \ + test-sigaction$(EXEEXT) test-signal$(EXEEXT) \ + test-signbit$(EXEEXT) test-snprintf$(EXEEXT) \ + test-stdbool$(EXEEXT) test-stdint$(EXEEXT) test-stdio$(EXEEXT) \ + test-stdlib$(EXEEXT) test-strchrnul$(EXEEXT) \ + test-strerror$(EXEEXT) test-string$(EXEEXT) \ + test-strsignal$(EXEEXT) test-strstr$(EXEEXT) \ + test-strtod$(EXEEXT) test-sys_stat$(EXEEXT) \ + test-sys_time$(EXEEXT) test-unistd$(EXEEXT) \ + test-vasnprintf$(EXEEXT) test-vasprintf-posix$(EXEEXT) \ + test-vasprintf$(EXEEXT) test-wchar$(EXEEXT) test-wcrtomb.sh \ + test-wctype$(EXEEXT) test-xvasprintf$(EXEEXT) +noinst_PROGRAMS = +check_PROGRAMS = test-alloca-opt$(EXEEXT) test-array_list$(EXEEXT) \ + test-array_oset$(EXEEXT) test-avltree_oset$(EXEEXT) \ + test-binary-io$(EXEEXT) test-btowc$(EXEEXT) \ + test-c-ctype$(EXEEXT) test-c-stack$(EXEEXT) \ + test-closein$(EXEEXT) test-dirname$(EXEEXT) \ + test-environ$(EXEEXT) test-errno$(EXEEXT) test-fcntl$(EXEEXT) \ + test-fflush$(EXEEXT) test-fflush2$(EXEEXT) \ + test-filenamecat$(EXEEXT) test-fopen$(EXEEXT) \ + test-fpending$(EXEEXT) test-fpurge$(EXEEXT) \ + test-freadahead$(EXEEXT) test-freading$(EXEEXT) \ + test-frexp-nolibm$(EXEEXT) test-frexpl-nolibm$(EXEEXT) \ + test-fseeko$(EXEEXT) test-ftello$(EXEEXT) \ + test-getdtablesize$(EXEEXT) test-gettimeofday$(EXEEXT) \ + test-isnand-nolibm$(EXEEXT) test-isnanf-nolibm$(EXEEXT) \ + test-isnanl-nolibm$(EXEEXT) test-linkedhash_list$(EXEEXT) \ + test-lseek$(EXEEXT) test-lstat$(EXEEXT) test-malloca$(EXEEXT) \ + test-math$(EXEEXT) test-mbrtowc$(EXEEXT) test-mbsinit$(EXEEXT) \ + test-memchr2$(EXEEXT) test-open$(EXEEXT) $(am__EXEEXT_1) \ + test-printf-frexp$(EXEEXT) test-printf-frexpl$(EXEEXT) \ + test-quotearg$(EXEEXT) test-rawmemchr$(EXEEXT) \ + test-sched$(EXEEXT) test-sigaction$(EXEEXT) \ + test-signal$(EXEEXT) test-signbit$(EXEEXT) \ + test-snprintf$(EXEEXT) test-stdbool$(EXEEXT) \ + test-stdint$(EXEEXT) test-stdio$(EXEEXT) test-stdlib$(EXEEXT) \ + test-strchrnul$(EXEEXT) test-strerror$(EXEEXT) \ + test-string$(EXEEXT) test-strsignal$(EXEEXT) \ + test-strstr$(EXEEXT) test-strtod$(EXEEXT) \ + test-sys_stat$(EXEEXT) test-sys_time$(EXEEXT) \ + test-unistd$(EXEEXT) test-vasnprintf$(EXEEXT) \ + test-vasprintf-posix$(EXEEXT) test-vasprintf$(EXEEXT) \ + test-wchar$(EXEEXT) test-wcrtomb$(EXEEXT) test-wctype$(EXEEXT) \ + test-xvasprintf$(EXEEXT) +@POSIX_SPAWN_PORTED_TRUE@am__append_1 = test-posix_spawn1 test-posix_spawn2 +@POSIX_SPAWN_PORTED_TRUE@am__append_2 = test-posix_spawn1 test-posix_spawn2 +@POSIX_SPAWN_PORTED_TRUE@am__append_3 = test-posix_spawn1.sh \ +@POSIX_SPAWN_PORTED_TRUE@ test-posix_spawn2.sh +@POSIX_SPAWN_PORTED_TRUE@am__append_4 = test-posix_spawn1.sh \ +@POSIX_SPAWN_PORTED_TRUE@ test-posix_spawn1.sh-t \ +@POSIX_SPAWN_PORTED_TRUE@ test-posix_spawn2.sh \ +@POSIX_SPAWN_PORTED_TRUE@ test-posix_spawn2.sh-t +subdir = tests +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ + $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/assert.m4 \ + $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/btowc.m4 \ + $(top_srcdir)/m4/c-stack.m4 $(top_srcdir)/m4/cloexec.m4 \ + $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/closein.m4 \ + $(top_srcdir)/m4/closeout.m4 $(top_srcdir)/m4/codeset.m4 \ + $(top_srcdir)/m4/config-h.m4 $(top_srcdir)/m4/dirname.m4 \ + $(top_srcdir)/m4/dos.m4 $(top_srcdir)/m4/double-slash-root.m4 \ + $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ + $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ + $(top_srcdir)/m4/execute.m4 $(top_srcdir)/m4/exitfail.m4 \ + $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ + $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ + $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fcntl_h.m4 \ + $(top_srcdir)/m4/fflush.m4 $(top_srcdir)/m4/filenamecat.m4 \ + $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \ + $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ + $(top_srcdir)/m4/fpurge.m4 $(top_srcdir)/m4/freading.m4 \ + $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ + $(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/ftello.m4 \ + $(top_srcdir)/m4/getdtablesize.m4 $(top_srcdir)/m4/getopt.m4 \ + $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettimeofday.m4 \ + $(top_srcdir)/m4/gl_list.m4 $(top_srcdir)/m4/glibc21.m4 \ + $(top_srcdir)/m4/gnulib-common.m4 \ + $(top_srcdir)/m4/gnulib-comp.m4 \ + $(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inline.m4 \ + $(top_srcdir)/m4/intmax_t.m4 $(top_srcdir)/m4/inttypes_h.m4 \ + $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ + $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/ldexpl.m4 \ + $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ + $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libsigsegv.m4 \ + $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/locale-fr.m4 \ + $(top_srcdir)/m4/locale-ja.m4 $(top_srcdir)/m4/locale-zh.m4 \ + $(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \ + $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ + $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ + $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrtowc.m4 \ + $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbstate_t.m4 \ + $(top_srcdir)/m4/mkdtemp.m4 $(top_srcdir)/m4/mkstemp.m4 \ + $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/nocrash.m4 \ + $(top_srcdir)/m4/open.m4 $(top_srcdir)/m4/pathmax.m4 \ + $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/posix_spawn.m4 \ + $(top_srcdir)/m4/printf-frexp.m4 \ + $(top_srcdir)/m4/printf-frexpl.m4 $(top_srcdir)/m4/printf.m4 \ + $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/rawmemchr.m4 \ + $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/sched_h.m4 \ + $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/sig_atomic_t.m4 \ + $(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \ + $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ + $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/snprintf.m4 \ + $(top_srcdir)/m4/spawn_h.m4 $(top_srcdir)/m4/ssize_t.m4 \ + $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ + $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \ + $(top_srcdir)/m4/stdio-safer.m4 $(top_srcdir)/m4/stdio_h.m4 \ + $(top_srcdir)/m4/stdlib-safer.m4 $(top_srcdir)/m4/stdlib_h.m4 \ + $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strerror.m4 \ + $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strndup.m4 \ + $(top_srcdir)/m4/strnlen.m4 $(top_srcdir)/m4/strsignal.m4 \ + $(top_srcdir)/m4/strstr.m4 $(top_srcdir)/m4/strtod.m4 \ + $(top_srcdir)/m4/strtol.m4 $(top_srcdir)/m4/sys_stat_h.m4 \ + $(top_srcdir)/m4/sys_time_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ + $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ + $(top_srcdir)/m4/tls.m4 $(top_srcdir)/m4/tmpdir.m4 \ + $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ + $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlocked-io.m4 \ + $(top_srcdir)/m4/vasnprintf.m4 \ + $(top_srcdir)/m4/vasprintf-posix.m4 \ + $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/wait-process.m4 \ + $(top_srcdir)/m4/wchar.m4 $(top_srcdir)/m4/wchar_t.m4 \ + $(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \ + $(top_srcdir)/m4/wctype.m4 $(top_srcdir)/m4/wint_t.m4 \ + $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xsize.m4 \ + $(top_srcdir)/m4/xstrndup.m4 $(top_srcdir)/m4/xvasprintf.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +AM_V_AR = $(am__v_AR_$(V)) +am__v_AR_ = @echo " AR " $@; +am__v_AR_0 = @echo " AR " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = @ +am__v_at_0 = @ +libtests_a_AR = $(AR) $(ARFLAGS) +am__DEPENDENCIES_1 = +am_libtests_a_OBJECTS = gl_array_list.$(OBJEXT) \ + gl_array_oset.$(OBJEXT) +libtests_a_OBJECTS = $(am_libtests_a_OBJECTS) +@POSIX_SPAWN_PORTED_TRUE@am__EXEEXT_1 = test-posix_spawn1$(EXEEXT) \ +@POSIX_SPAWN_PORTED_TRUE@ test-posix_spawn2$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +test_alloca_opt_SOURCES = test-alloca-opt.c +test_alloca_opt_OBJECTS = test-alloca-opt.$(OBJEXT) +test_alloca_opt_LDADD = $(LDADD) +test_alloca_opt_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_array_list_SOURCES = test-array_list.c +test_array_list_OBJECTS = test-array_list.$(OBJEXT) +am__DEPENDENCIES_2 = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_array_list_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_array_oset_SOURCES = test-array_oset.c +test_array_oset_OBJECTS = test-array_oset.$(OBJEXT) +test_array_oset_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_avltree_oset_SOURCES = test-avltree_oset.c +test_avltree_oset_OBJECTS = test-avltree_oset.$(OBJEXT) +test_avltree_oset_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_binary_io_SOURCES = test-binary-io.c +test_binary_io_OBJECTS = test-binary-io.$(OBJEXT) +test_binary_io_LDADD = $(LDADD) +test_binary_io_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_btowc_SOURCES = test-btowc.c +test_btowc_OBJECTS = test-btowc.$(OBJEXT) +test_btowc_LDADD = $(LDADD) +test_btowc_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_c_ctype_SOURCES = test-c-ctype.c +test_c_ctype_OBJECTS = test-c-ctype.$(OBJEXT) +test_c_ctype_LDADD = $(LDADD) +test_c_ctype_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_c_stack_SOURCES = test-c-stack.c +test_c_stack_OBJECTS = test-c-stack.$(OBJEXT) +test_c_stack_DEPENDENCIES = $(am__DEPENDENCIES_2) \ + $(am__DEPENDENCIES_1) +test_closein_SOURCES = test-closein.c +test_closein_OBJECTS = test-closein.$(OBJEXT) +test_closein_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_dirname_SOURCES = test-dirname.c +test_dirname_OBJECTS = test-dirname.$(OBJEXT) +test_dirname_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_environ_SOURCES = test-environ.c +test_environ_OBJECTS = test-environ.$(OBJEXT) +test_environ_LDADD = $(LDADD) +test_environ_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_errno_SOURCES = test-errno.c +test_errno_OBJECTS = test-errno.$(OBJEXT) +test_errno_LDADD = $(LDADD) +test_errno_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fcntl_SOURCES = test-fcntl.c +test_fcntl_OBJECTS = test-fcntl.$(OBJEXT) +test_fcntl_LDADD = $(LDADD) +test_fcntl_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fflush_SOURCES = test-fflush.c +test_fflush_OBJECTS = test-fflush.$(OBJEXT) +test_fflush_LDADD = $(LDADD) +test_fflush_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fflush2_SOURCES = test-fflush2.c +test_fflush2_OBJECTS = test-fflush2.$(OBJEXT) +test_fflush2_LDADD = $(LDADD) +test_fflush2_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_filenamecat_SOURCES = test-filenamecat.c +test_filenamecat_OBJECTS = test-filenamecat.$(OBJEXT) +test_filenamecat_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_fopen_SOURCES = test-fopen.c +test_fopen_OBJECTS = test-fopen.$(OBJEXT) +test_fopen_LDADD = $(LDADD) +test_fopen_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fpending_SOURCES = test-fpending.c +test_fpending_OBJECTS = test-fpending.$(OBJEXT) +test_fpending_LDADD = $(LDADD) +test_fpending_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fpurge_SOURCES = test-fpurge.c +test_fpurge_OBJECTS = test-fpurge.$(OBJEXT) +test_fpurge_LDADD = $(LDADD) +test_fpurge_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_freadahead_SOURCES = test-freadahead.c +test_freadahead_OBJECTS = test-freadahead.$(OBJEXT) +test_freadahead_LDADD = $(LDADD) +test_freadahead_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_freading_SOURCES = test-freading.c +test_freading_OBJECTS = test-freading.$(OBJEXT) +test_freading_LDADD = $(LDADD) +test_freading_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +am_test_frexp_nolibm_OBJECTS = test-frexp.$(OBJEXT) +test_frexp_nolibm_OBJECTS = $(am_test_frexp_nolibm_OBJECTS) +test_frexp_nolibm_LDADD = $(LDADD) +test_frexp_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +am_test_frexpl_nolibm_OBJECTS = test-frexpl.$(OBJEXT) +test_frexpl_nolibm_OBJECTS = $(am_test_frexpl_nolibm_OBJECTS) +test_frexpl_nolibm_LDADD = $(LDADD) +test_frexpl_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_fseeko_SOURCES = test-fseeko.c +test_fseeko_OBJECTS = test-fseeko.$(OBJEXT) +test_fseeko_LDADD = $(LDADD) +test_fseeko_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_ftello_SOURCES = test-ftello.c +test_ftello_OBJECTS = test-ftello.$(OBJEXT) +test_ftello_LDADD = $(LDADD) +test_ftello_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_getdtablesize_SOURCES = test-getdtablesize.c +test_getdtablesize_OBJECTS = test-getdtablesize.$(OBJEXT) +test_getdtablesize_LDADD = $(LDADD) +test_getdtablesize_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_gettimeofday_SOURCES = test-gettimeofday.c +test_gettimeofday_OBJECTS = test-gettimeofday.$(OBJEXT) +test_gettimeofday_LDADD = $(LDADD) +test_gettimeofday_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_isnand_nolibm_SOURCES = test-isnand-nolibm.c +test_isnand_nolibm_OBJECTS = test-isnand-nolibm.$(OBJEXT) +test_isnand_nolibm_LDADD = $(LDADD) +test_isnand_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_isnanf_nolibm_SOURCES = test-isnanf-nolibm.c +test_isnanf_nolibm_OBJECTS = test-isnanf-nolibm.$(OBJEXT) +test_isnanf_nolibm_LDADD = $(LDADD) +test_isnanf_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_isnanl_nolibm_SOURCES = test-isnanl-nolibm.c +test_isnanl_nolibm_OBJECTS = test-isnanl-nolibm.$(OBJEXT) +test_isnanl_nolibm_LDADD = $(LDADD) +test_isnanl_nolibm_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_linkedhash_list_SOURCES = test-linkedhash_list.c +test_linkedhash_list_OBJECTS = test-linkedhash_list.$(OBJEXT) +test_linkedhash_list_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_lseek_SOURCES = test-lseek.c +test_lseek_OBJECTS = test-lseek.$(OBJEXT) +test_lseek_LDADD = $(LDADD) +test_lseek_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_lstat_SOURCES = test-lstat.c +test_lstat_OBJECTS = test-lstat.$(OBJEXT) +test_lstat_LDADD = $(LDADD) +test_lstat_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_malloca_SOURCES = test-malloca.c +test_malloca_OBJECTS = test-malloca.$(OBJEXT) +test_malloca_LDADD = $(LDADD) +test_malloca_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_math_SOURCES = test-math.c +test_math_OBJECTS = test-math.$(OBJEXT) +test_math_LDADD = $(LDADD) +test_math_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_mbrtowc_SOURCES = test-mbrtowc.c +test_mbrtowc_OBJECTS = test-mbrtowc.$(OBJEXT) +test_mbrtowc_LDADD = $(LDADD) +test_mbrtowc_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_mbsinit_SOURCES = test-mbsinit.c +test_mbsinit_OBJECTS = test-mbsinit.$(OBJEXT) +test_mbsinit_LDADD = $(LDADD) +test_mbsinit_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_memchr2_SOURCES = test-memchr2.c +test_memchr2_OBJECTS = test-memchr2.$(OBJEXT) +test_memchr2_LDADD = $(LDADD) +test_memchr2_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_open_SOURCES = test-open.c +test_open_OBJECTS = test-open.$(OBJEXT) +test_open_LDADD = $(LDADD) +test_open_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_posix_spawn1_SOURCES = test-posix_spawn1.c +test_posix_spawn1_OBJECTS = test-posix_spawn1.$(OBJEXT) +test_posix_spawn1_LDADD = $(LDADD) +test_posix_spawn1_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_posix_spawn2_SOURCES = test-posix_spawn2.c +test_posix_spawn2_OBJECTS = test-posix_spawn2.$(OBJEXT) +test_posix_spawn2_LDADD = $(LDADD) +test_posix_spawn2_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_printf_frexp_SOURCES = test-printf-frexp.c +test_printf_frexp_OBJECTS = test-printf-frexp.$(OBJEXT) +test_printf_frexp_LDADD = $(LDADD) +test_printf_frexp_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_printf_frexpl_SOURCES = test-printf-frexpl.c +test_printf_frexpl_OBJECTS = test-printf-frexpl.$(OBJEXT) +test_printf_frexpl_LDADD = $(LDADD) +test_printf_frexpl_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_quotearg_SOURCES = test-quotearg.c +test_quotearg_OBJECTS = test-quotearg.$(OBJEXT) +test_quotearg_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_rawmemchr_SOURCES = test-rawmemchr.c +test_rawmemchr_OBJECTS = test-rawmemchr.$(OBJEXT) +test_rawmemchr_LDADD = $(LDADD) +test_rawmemchr_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sched_SOURCES = test-sched.c +test_sched_OBJECTS = test-sched.$(OBJEXT) +test_sched_LDADD = $(LDADD) +test_sched_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sigaction_SOURCES = test-sigaction.c +test_sigaction_OBJECTS = test-sigaction.$(OBJEXT) +test_sigaction_LDADD = $(LDADD) +test_sigaction_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_signal_SOURCES = test-signal.c +test_signal_OBJECTS = test-signal.$(OBJEXT) +test_signal_LDADD = $(LDADD) +test_signal_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_signbit_SOURCES = test-signbit.c +test_signbit_OBJECTS = test-signbit.$(OBJEXT) +test_signbit_LDADD = $(LDADD) +test_signbit_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_snprintf_SOURCES = test-snprintf.c +test_snprintf_OBJECTS = test-snprintf.$(OBJEXT) +test_snprintf_LDADD = $(LDADD) +test_snprintf_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdbool_SOURCES = test-stdbool.c +test_stdbool_OBJECTS = test-stdbool.$(OBJEXT) +test_stdbool_LDADD = $(LDADD) +test_stdbool_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdint_SOURCES = test-stdint.c +test_stdint_OBJECTS = test-stdint.$(OBJEXT) +test_stdint_LDADD = $(LDADD) +test_stdint_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdio_SOURCES = test-stdio.c +test_stdio_OBJECTS = test-stdio.$(OBJEXT) +test_stdio_LDADD = $(LDADD) +test_stdio_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_stdlib_SOURCES = test-stdlib.c +test_stdlib_OBJECTS = test-stdlib.$(OBJEXT) +test_stdlib_LDADD = $(LDADD) +test_stdlib_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strchrnul_SOURCES = test-strchrnul.c +test_strchrnul_OBJECTS = test-strchrnul.$(OBJEXT) +test_strchrnul_LDADD = $(LDADD) +test_strchrnul_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strerror_SOURCES = test-strerror.c +test_strerror_OBJECTS = test-strerror.$(OBJEXT) +test_strerror_LDADD = $(LDADD) +test_strerror_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_string_SOURCES = test-string.c +test_string_OBJECTS = test-string.$(OBJEXT) +test_string_LDADD = $(LDADD) +test_string_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strsignal_SOURCES = test-strsignal.c +test_strsignal_OBJECTS = test-strsignal.$(OBJEXT) +test_strsignal_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_strstr_SOURCES = test-strstr.c +test_strstr_OBJECTS = test-strstr.$(OBJEXT) +test_strstr_LDADD = $(LDADD) +test_strstr_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_strtod_SOURCES = test-strtod.c +test_strtod_OBJECTS = test-strtod.$(OBJEXT) +test_strtod_LDADD = $(LDADD) +test_strtod_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sys_stat_SOURCES = test-sys_stat.c +test_sys_stat_OBJECTS = test-sys_stat.$(OBJEXT) +test_sys_stat_LDADD = $(LDADD) +test_sys_stat_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_sys_time_SOURCES = test-sys_time.c +test_sys_time_OBJECTS = test-sys_time.$(OBJEXT) +test_sys_time_LDADD = $(LDADD) +test_sys_time_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_unistd_SOURCES = test-unistd.c +test_unistd_OBJECTS = test-unistd.$(OBJEXT) +test_unistd_LDADD = $(LDADD) +test_unistd_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_vasnprintf_SOURCES = test-vasnprintf.c +test_vasnprintf_OBJECTS = test-vasnprintf.$(OBJEXT) +test_vasnprintf_LDADD = $(LDADD) +test_vasnprintf_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_vasprintf_SOURCES = test-vasprintf.c +test_vasprintf_OBJECTS = test-vasprintf.$(OBJEXT) +test_vasprintf_LDADD = $(LDADD) +test_vasprintf_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_vasprintf_posix_SOURCES = test-vasprintf-posix.c +test_vasprintf_posix_OBJECTS = test-vasprintf-posix.$(OBJEXT) +test_vasprintf_posix_LDADD = $(LDADD) +test_vasprintf_posix_DEPENDENCIES = libtests.a ../lib/libm4.a \ + libtests.a $(am__DEPENDENCIES_1) +test_wchar_SOURCES = test-wchar.c +test_wchar_OBJECTS = test-wchar.$(OBJEXT) +test_wchar_LDADD = $(LDADD) +test_wchar_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_wcrtomb_SOURCES = test-wcrtomb.c +test_wcrtomb_OBJECTS = test-wcrtomb.$(OBJEXT) +test_wcrtomb_LDADD = $(LDADD) +test_wcrtomb_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_wctype_SOURCES = test-wctype.c +test_wctype_OBJECTS = test-wctype.$(OBJEXT) +test_wctype_LDADD = $(LDADD) +test_wctype_DEPENDENCIES = libtests.a ../lib/libm4.a libtests.a \ + $(am__DEPENDENCIES_1) +test_xvasprintf_SOURCES = test-xvasprintf.c +test_xvasprintf_OBJECTS = test-xvasprintf.$(OBJEXT) +test_xvasprintf_DEPENDENCIES = $(am__DEPENDENCIES_2) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/lib +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = @echo " CC " $@; +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = @echo " CCLD " $@; +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = @echo " GEN " $@; +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ + test-alloca-opt.c test-array_list.c test-array_oset.c \ + test-avltree_oset.c test-binary-io.c test-btowc.c \ + test-c-ctype.c test-c-stack.c test-closein.c test-dirname.c \ + test-environ.c test-errno.c test-fcntl.c test-fflush.c \ + test-fflush2.c test-filenamecat.c test-fopen.c test-fpending.c \ + test-fpurge.c test-freadahead.c test-freading.c \ + $(test_frexp_nolibm_SOURCES) $(test_frexpl_nolibm_SOURCES) \ + test-fseeko.c test-ftello.c test-getdtablesize.c \ + test-gettimeofday.c test-isnand-nolibm.c test-isnanf-nolibm.c \ + test-isnanl-nolibm.c test-linkedhash_list.c test-lseek.c \ + test-lstat.c test-malloca.c test-math.c test-mbrtowc.c \ + test-mbsinit.c test-memchr2.c test-open.c test-posix_spawn1.c \ + test-posix_spawn2.c test-printf-frexp.c test-printf-frexpl.c \ + test-quotearg.c test-rawmemchr.c test-sched.c test-sigaction.c \ + test-signal.c test-signbit.c test-snprintf.c test-stdbool.c \ + test-stdint.c test-stdio.c test-stdlib.c test-strchrnul.c \ + test-strerror.c test-string.c test-strsignal.c test-strstr.c \ + test-strtod.c test-sys_stat.c test-sys_time.c test-unistd.c \ + test-vasnprintf.c test-vasprintf.c test-vasprintf-posix.c \ + test-wchar.c test-wcrtomb.c test-wctype.c test-xvasprintf.c +DIST_SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ + test-alloca-opt.c test-array_list.c test-array_oset.c \ + test-avltree_oset.c test-binary-io.c test-btowc.c \ + test-c-ctype.c test-c-stack.c test-closein.c test-dirname.c \ + test-environ.c test-errno.c test-fcntl.c test-fflush.c \ + test-fflush2.c test-filenamecat.c test-fopen.c test-fpending.c \ + test-fpurge.c test-freadahead.c test-freading.c \ + $(test_frexp_nolibm_SOURCES) $(test_frexpl_nolibm_SOURCES) \ + test-fseeko.c test-ftello.c test-getdtablesize.c \ + test-gettimeofday.c test-isnand-nolibm.c test-isnanf-nolibm.c \ + test-isnanl-nolibm.c test-linkedhash_list.c test-lseek.c \ + test-lstat.c test-malloca.c test-math.c test-mbrtowc.c \ + test-mbsinit.c test-memchr2.c test-open.c test-posix_spawn1.c \ + test-posix_spawn2.c test-printf-frexp.c test-printf-frexpl.c \ + test-quotearg.c test-rawmemchr.c test-sched.c test-sigaction.c \ + test-signal.c test-signbit.c test-snprintf.c test-stdbool.c \ + test-stdint.c test-stdio.c test-stdlib.c test-strchrnul.c \ + test-strerror.c test-string.c test-strsignal.c test-strstr.c \ + test-strtod.c test-sys_stat.c test-sys_time.c test-unistd.c \ + test-vasnprintf.c test-vasprintf.c test-vasprintf-posix.c \ + test-wchar.c test-wcrtomb.c test-wctype.c test-xvasprintf.c +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +am__tty_colors = \ +red=; grn=; lgn=; blu=; std= +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FCNTL_H = @FCNTL_H@ +FLOAT_H = @FLOAT_H@ +GETOPT_H = @GETOPT_H@ +GLIBC21 = @GLIBC21@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DPRINTF = @GNULIB_DPRINTF@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FCLOSE = @GNULIB_FCLOSE@ +GNULIB_FFLUSH = @GNULIB_FFLUSH@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FOPEN = @GNULIB_FOPEN@ +GNULIB_FPRINTF = @GNULIB_FPRINTF@ +GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ +GNULIB_FPUTC = @GNULIB_FPUTC@ +GNULIB_FPUTS = @GNULIB_FPUTS@ +GNULIB_FREOPEN = @GNULIB_FREOPEN@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSEEK = @GNULIB_FSEEK@ +GNULIB_FSEEKO = @GNULIB_FSEEKO@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTELL = @GNULIB_FTELL@ +GNULIB_FTELLO = @GNULIB_FTELLO@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_FWRITE = @GNULIB_FWRITE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDELIM = @GNULIB_GETDELIM@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLINE = @GNULIB_GETLINE@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHMOD = @GNULIB_LCHMOD@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_LSTAT = @GNULIB_LSTAT@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ +GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ +GNULIB_OPEN = @GNULIB_OPEN@ +GNULIB_PERROR = @GNULIB_PERROR@ +GNULIB_POSIX_SPAWN = @GNULIB_POSIX_SPAWN@ +GNULIB_POSIX_SPAWNATTR_DESTROY = @GNULIB_POSIX_SPAWNATTR_DESTROY@ +GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ +GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ +GNULIB_POSIX_SPAWNATTR_INIT = @GNULIB_POSIX_SPAWNATTR_INIT@ +GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ +GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ +GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ +GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ +GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ +GNULIB_POSIX_SPAWNP = @GNULIB_POSIX_SPAWNP@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ +GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ +GNULIB_PRINTF = @GNULIB_PRINTF@ +GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ +GNULIB_PUTC = @GNULIB_PUTC@ +GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_PUTS = @GNULIB_PUTS@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGACTION = @GNULIB_SIGACTION@ +GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ +GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ +GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ +GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ +GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ +GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ +GNULIB_VPRINTF = @GNULIB_VPRINTF@ +GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ +GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ +GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ +HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DPRINTF = @HAVE_DPRINTF@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSEEKO = @HAVE_FSEEKO@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTELLO = @HAVE_FTELLO@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LCHMOD = @HAVE_LCHMOD@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_LSTAT = @HAVE_LSTAT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ +HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SCHED_H = @HAVE_SCHED_H@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGACTION = @HAVE_SIGACTION@ +HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SIGSET_T = @HAVE_SIGSET_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_SPAWN_H = @HAVE_SPAWN_H@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ +HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ +HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_VASPRINTF = @HAVE_VASPRINTF@ +HAVE_VDPRINTF = @HAVE_VDPRINTF@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBCSTACK = @LIBCSTACK@ +LIBINTL = @LIBINTL@ +LIBM4_LIBDEPS = @LIBM4_LIBDEPS@ +LIBM4_LTLIBDEPS = @LIBM4_LTLIBDEPS@ +LIBMULTITHREAD = @LIBMULTITHREAD@ +LIBOBJS = @LIBOBJS@ +LIBPTH = @LIBPTH@ +LIBPTH_PREFIX = @LIBPTH_PREFIX@ +LIBS = @LIBS@ $(POW_LIB) +LIBSIGSEGV = @LIBSIGSEGV@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTHREAD = @LIBTHREAD@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBCSTACK = @LTLIBCSTACK@ +LTLIBINTL = @LTLIBINTL@ +LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ +LTLIBOBJS = @LTLIBOBJS@ +LTLIBPTH = @LTLIBPTH@ +LTLIBSIGSEGV = @LTLIBSIGSEGV@ +LTLIBTHREAD = @LTLIBTHREAD@ +M4_LIBOBJS = @M4_LIBOBJS@ +M4_LTLIBOBJS = @M4_LTLIBOBJS@ +M4tests_LIBOBJS = @M4tests_LIBOBJS@ +M4tests_LTLIBOBJS = @M4tests_LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FCNTL_H = @NEXT_FCNTL_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_SCHED_H = @NEXT_SCHED_H@ +NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ +NEXT_SPAWN_H = @NEXT_SPAWN_H@ +NEXT_STDARG_H = @NEXT_STDARG_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDIO_H = @NEXT_STDIO_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ +NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ +NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POW_LIB = @POW_LIB@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_DPRINTF = @REPLACE_DPRINTF@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FCLOSE = @REPLACE_FCLOSE@ +REPLACE_FFLUSH = @REPLACE_FFLUSH@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FOPEN = @REPLACE_FOPEN@ +REPLACE_FPRINTF = @REPLACE_FPRINTF@ +REPLACE_FREOPEN = @REPLACE_FREOPEN@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_FSEEK = @REPLACE_FSEEK@ +REPLACE_FSEEKO = @REPLACE_FSEEKO@ +REPLACE_FTELL = @REPLACE_FTELL@ +REPLACE_FTELLO = @REPLACE_FTELLO@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETLINE = @REPLACE_GETLINE@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_LSTAT = @REPLACE_LSTAT@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKDIR = @REPLACE_MKDIR@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ +REPLACE_OPEN = @REPLACE_OPEN@ +REPLACE_PERROR = @REPLACE_PERROR@ +REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ +REPLACE_PRINTF = @REPLACE_PRINTF@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ +REPLACE_SPRINTF = @REPLACE_SPRINTF@ +REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ +REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ +REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ +REPLACE_VPRINTF = @REPLACE_VPRINTF@ +REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ +REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SCHED_H = @SCHED_H@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +SPAWN_H = @SPAWN_H@ +STDARG_H = @STDARG_H@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +SYS_STAT_H = @SYS_STAT_H@ +SYS_TIME_H = @SYS_TIME_H@ +SYS_WAIT_H = @SYS_WAIT_H@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.5 foreign +SUBDIRS = +TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + EXEEXT='@EXEEXT@' LIBSIGSEGV='@LIBSIGSEGV@' EXEEXT='@EXEEXT@' \ + EXEEXT='@EXEEXT@' srcdir='$(srcdir)' EXEEXT='@EXEEXT@' \ + EXEEXT='@EXEEXT@' srcdir='$(srcdir)' EXEEXT='@EXEEXT@' \ + srcdir='$(srcdir)' EXEEXT='@EXEEXT@' srcdir='$(srcdir)' \ + EXEEXT='@EXEEXT@' srcdir='$(srcdir)' EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + EXEEXT='@EXEEXT@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + EXEEXT='@EXEEXT@' srcdir='$(srcdir)' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' +noinst_HEADERS = +noinst_LIBRARIES = +check_LIBRARIES = libtests.a +EXTRA_DIST = test-alloca-opt.c test-array_list.c test-array_oset.c \ + test-avltree_oset.c test-binary-io.sh test-binary-io.c \ + test-btowc1.sh test-btowc2.sh test-btowc.c test-c-ctype.c \ + test-c-stack.c test-c-stack.sh test-c-stack2.sh \ + test-closein.sh test-closein.c test-dirname.c test-environ.c \ + test-errno.c test-fcntl.c test-fflush.c test-fflush2.sh \ + test-fflush2.c test-filenamecat.c test-fopen.c test-fpending.c \ + test-fpending.sh test-fpurge.c test-freadahead.c \ + test-freadahead.sh test-freading.c test-frexp.c test-frexpl.c \ + test-fseeko.c test-fseeko.sh test-fseeko2.sh test-ftello.c \ + test-ftello.sh test-ftello2.sh test-getdtablesize.c \ + $(top_srcdir)/build-aux/config.rpath test-gettimeofday.c \ + test-isnand-nolibm.c test-isnand.h nan.h test-isnanf-nolibm.c \ + test-isnanf.h nan.h test-isnanl-nolibm.c test-isnanl.h nan.h \ + test-linkedhash_list.c test-lseek.c test-lseek.sh test-lstat.c \ + test-malloca.c test-math.c test-mbrtowc1.sh test-mbrtowc2.sh \ + test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc.c \ + test-mbsinit.sh test-mbsinit.c test-memchr2.c test-open.c \ + test-posix_spawn1.c test-posix_spawn1.in.sh \ + test-posix_spawn2.c test-posix_spawn2.in.sh \ + test-printf-frexp.c test-printf-frexpl.c test-quotearg.sh \ + test-quotearg.c locale/fr/LC_MESSAGES/test-quotearg.po \ + locale/fr/LC_MESSAGES/test-quotearg.mo test-rawmemchr.c \ + test-sched.c setenv.c test-sigaction.c test-signal.c \ + test-signbit.c test-snprintf.c test-stdbool.c test-stdint.c \ + test-stdio.c test-stdlib.c test-strchrnul.c test-strerror.c \ + test-string.c test-strsignal.c test-strstr.c test-strtod.c \ + test-sys_stat.c test-sys_time.c test-unistd.c unsetenv.c \ + test-vasnprintf.c test-vasprintf-posix.c nan.h \ + test-vasprintf.c test-wchar.c test-wcrtomb.sh test-wcrtomb.c \ + wctob.c test-wctype.c test-xvasprintf.c +BUILT_SOURCES = $(am__append_3) +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump t-c-stack.tmp t-c-stack2.tmp \ + test-fflush.txt test-fpending.t t-fpurge.tmp t-freading.tmp \ + $(am__append_4) +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +# This is for those projects which use "gettextize --intl" to put a source-code +# copy of libintl into their package. In such projects, every Makefile.am needs +# -I$(top_builddir)/intl, so that can be found in this directory. +# For the Makefile.ams in other directories it is the maintainer's +# responsibility; for the one from gnulib we do it here. +# This option has no effect when the user disables NLS (because then the intl +# directory contains no libintl.h file) or when the project does not use +# "gettextize --intl". +AM_CPPFLAGS = -I. -I$(srcdir) -I.. -I$(srcdir)/.. -I../lib \ + -I$(srcdir)/../lib -I$(top_builddir)/intl +LDADD = libtests.a ../lib/libm4.a libtests.a $(LIBTESTS_LIBDEPS) +libtests_a_SOURCES = gl_array_list.h gl_array_list.c gl_array_oset.h \ + gl_array_oset.c +libtests_a_LIBADD = $(M4tests_LIBOBJS) +libtests_a_DEPENDENCIES = $(M4tests_LIBOBJS) +EXTRA_libtests_a_SOURCES = setenv.c unsetenv.c wctob.c +AM_LIBTOOLFLAGS = --preserve-dup-deps +test_array_list_LDADD = $(LDADD) @LIBINTL@ +test_array_oset_LDADD = $(LDADD) @LIBINTL@ +test_avltree_oset_LDADD = $(LDADD) @LIBINTL@ +test_c_stack_LDADD = $(LDADD) $(LIBCSTACK) @LIBINTL@ +test_closein_LDADD = $(LDADD) @LIBINTL@ +test_dirname_LDADD = $(LDADD) @LIBINTL@ +test_filenamecat_LDADD = $(LDADD) @LIBINTL@ +test_frexp_nolibm_SOURCES = test-frexp.c +test_frexpl_nolibm_SOURCES = test-frexpl.c +test_linkedhash_list_LDADD = $(LDADD) @LIBINTL@ +test_quotearg_LDADD = $(LDADD) @LIBINTL@ +test_strsignal_LDADD = $(LDADD) @LIBINTL@ +test_xvasprintf_LDADD = $(LDADD) @LIBINTL@ +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --silent-rules tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign --silent-rules tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkLIBRARIES: + -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libtests.a: $(libtests_a_OBJECTS) $(libtests_a_DEPENDENCIES) + $(AM_V_at)-rm -f libtests.a + $(AM_V_AR)$(libtests_a_AR) libtests.a $(libtests_a_OBJECTS) $(libtests_a_LIBADD) + $(AM_V_at)$(RANLIB) libtests.a + +clean-checkPROGRAMS: + -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +test-alloca-opt$(EXEEXT): $(test_alloca_opt_OBJECTS) $(test_alloca_opt_DEPENDENCIES) + @rm -f test-alloca-opt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_alloca_opt_OBJECTS) $(test_alloca_opt_LDADD) $(LIBS) +test-array_list$(EXEEXT): $(test_array_list_OBJECTS) $(test_array_list_DEPENDENCIES) + @rm -f test-array_list$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_array_list_OBJECTS) $(test_array_list_LDADD) $(LIBS) +test-array_oset$(EXEEXT): $(test_array_oset_OBJECTS) $(test_array_oset_DEPENDENCIES) + @rm -f test-array_oset$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_array_oset_OBJECTS) $(test_array_oset_LDADD) $(LIBS) +test-avltree_oset$(EXEEXT): $(test_avltree_oset_OBJECTS) $(test_avltree_oset_DEPENDENCIES) + @rm -f test-avltree_oset$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_avltree_oset_OBJECTS) $(test_avltree_oset_LDADD) $(LIBS) +test-binary-io$(EXEEXT): $(test_binary_io_OBJECTS) $(test_binary_io_DEPENDENCIES) + @rm -f test-binary-io$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_binary_io_OBJECTS) $(test_binary_io_LDADD) $(LIBS) +test-btowc$(EXEEXT): $(test_btowc_OBJECTS) $(test_btowc_DEPENDENCIES) + @rm -f test-btowc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_btowc_OBJECTS) $(test_btowc_LDADD) $(LIBS) +test-c-ctype$(EXEEXT): $(test_c_ctype_OBJECTS) $(test_c_ctype_DEPENDENCIES) + @rm -f test-c-ctype$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_ctype_OBJECTS) $(test_c_ctype_LDADD) $(LIBS) +test-c-stack$(EXEEXT): $(test_c_stack_OBJECTS) $(test_c_stack_DEPENDENCIES) + @rm -f test-c-stack$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_stack_OBJECTS) $(test_c_stack_LDADD) $(LIBS) +test-closein$(EXEEXT): $(test_closein_OBJECTS) $(test_closein_DEPENDENCIES) + @rm -f test-closein$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_closein_OBJECTS) $(test_closein_LDADD) $(LIBS) +test-dirname$(EXEEXT): $(test_dirname_OBJECTS) $(test_dirname_DEPENDENCIES) + @rm -f test-dirname$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_dirname_OBJECTS) $(test_dirname_LDADD) $(LIBS) +test-environ$(EXEEXT): $(test_environ_OBJECTS) $(test_environ_DEPENDENCIES) + @rm -f test-environ$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_environ_OBJECTS) $(test_environ_LDADD) $(LIBS) +test-errno$(EXEEXT): $(test_errno_OBJECTS) $(test_errno_DEPENDENCIES) + @rm -f test-errno$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_errno_OBJECTS) $(test_errno_LDADD) $(LIBS) +test-fcntl$(EXEEXT): $(test_fcntl_OBJECTS) $(test_fcntl_DEPENDENCIES) + @rm -f test-fcntl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fcntl_OBJECTS) $(test_fcntl_LDADD) $(LIBS) +test-fflush$(EXEEXT): $(test_fflush_OBJECTS) $(test_fflush_DEPENDENCIES) + @rm -f test-fflush$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fflush_OBJECTS) $(test_fflush_LDADD) $(LIBS) +test-fflush2$(EXEEXT): $(test_fflush2_OBJECTS) $(test_fflush2_DEPENDENCIES) + @rm -f test-fflush2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fflush2_OBJECTS) $(test_fflush2_LDADD) $(LIBS) +test-filenamecat$(EXEEXT): $(test_filenamecat_OBJECTS) $(test_filenamecat_DEPENDENCIES) + @rm -f test-filenamecat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_filenamecat_OBJECTS) $(test_filenamecat_LDADD) $(LIBS) +test-fopen$(EXEEXT): $(test_fopen_OBJECTS) $(test_fopen_DEPENDENCIES) + @rm -f test-fopen$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fopen_OBJECTS) $(test_fopen_LDADD) $(LIBS) +test-fpending$(EXEEXT): $(test_fpending_OBJECTS) $(test_fpending_DEPENDENCIES) + @rm -f test-fpending$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fpending_OBJECTS) $(test_fpending_LDADD) $(LIBS) +test-fpurge$(EXEEXT): $(test_fpurge_OBJECTS) $(test_fpurge_DEPENDENCIES) + @rm -f test-fpurge$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fpurge_OBJECTS) $(test_fpurge_LDADD) $(LIBS) +test-freadahead$(EXEEXT): $(test_freadahead_OBJECTS) $(test_freadahead_DEPENDENCIES) + @rm -f test-freadahead$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_freadahead_OBJECTS) $(test_freadahead_LDADD) $(LIBS) +test-freading$(EXEEXT): $(test_freading_OBJECTS) $(test_freading_DEPENDENCIES) + @rm -f test-freading$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_freading_OBJECTS) $(test_freading_LDADD) $(LIBS) +test-frexp-nolibm$(EXEEXT): $(test_frexp_nolibm_OBJECTS) $(test_frexp_nolibm_DEPENDENCIES) + @rm -f test-frexp-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_frexp_nolibm_OBJECTS) $(test_frexp_nolibm_LDADD) $(LIBS) +test-frexpl-nolibm$(EXEEXT): $(test_frexpl_nolibm_OBJECTS) $(test_frexpl_nolibm_DEPENDENCIES) + @rm -f test-frexpl-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_frexpl_nolibm_OBJECTS) $(test_frexpl_nolibm_LDADD) $(LIBS) +test-fseeko$(EXEEXT): $(test_fseeko_OBJECTS) $(test_fseeko_DEPENDENCIES) + @rm -f test-fseeko$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fseeko_OBJECTS) $(test_fseeko_LDADD) $(LIBS) +test-ftello$(EXEEXT): $(test_ftello_OBJECTS) $(test_ftello_DEPENDENCIES) + @rm -f test-ftello$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ftello_OBJECTS) $(test_ftello_LDADD) $(LIBS) +test-getdtablesize$(EXEEXT): $(test_getdtablesize_OBJECTS) $(test_getdtablesize_DEPENDENCIES) + @rm -f test-getdtablesize$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_getdtablesize_OBJECTS) $(test_getdtablesize_LDADD) $(LIBS) +test-gettimeofday$(EXEEXT): $(test_gettimeofday_OBJECTS) $(test_gettimeofday_DEPENDENCIES) + @rm -f test-gettimeofday$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_gettimeofday_OBJECTS) $(test_gettimeofday_LDADD) $(LIBS) +test-isnand-nolibm$(EXEEXT): $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_DEPENDENCIES) + @rm -f test-isnand-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_LDADD) $(LIBS) +test-isnanf-nolibm$(EXEEXT): $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_DEPENDENCIES) + @rm -f test-isnanf-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_LDADD) $(LIBS) +test-isnanl-nolibm$(EXEEXT): $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_DEPENDENCIES) + @rm -f test-isnanl-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_LDADD) $(LIBS) +test-linkedhash_list$(EXEEXT): $(test_linkedhash_list_OBJECTS) $(test_linkedhash_list_DEPENDENCIES) + @rm -f test-linkedhash_list$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_linkedhash_list_OBJECTS) $(test_linkedhash_list_LDADD) $(LIBS) +test-lseek$(EXEEXT): $(test_lseek_OBJECTS) $(test_lseek_DEPENDENCIES) + @rm -f test-lseek$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_lseek_OBJECTS) $(test_lseek_LDADD) $(LIBS) +test-lstat$(EXEEXT): $(test_lstat_OBJECTS) $(test_lstat_DEPENDENCIES) + @rm -f test-lstat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_lstat_OBJECTS) $(test_lstat_LDADD) $(LIBS) +test-malloca$(EXEEXT): $(test_malloca_OBJECTS) $(test_malloca_DEPENDENCIES) + @rm -f test-malloca$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_malloca_OBJECTS) $(test_malloca_LDADD) $(LIBS) +test-math$(EXEEXT): $(test_math_OBJECTS) $(test_math_DEPENDENCIES) + @rm -f test-math$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_math_OBJECTS) $(test_math_LDADD) $(LIBS) +test-mbrtowc$(EXEEXT): $(test_mbrtowc_OBJECTS) $(test_mbrtowc_DEPENDENCIES) + @rm -f test-mbrtowc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbrtowc_OBJECTS) $(test_mbrtowc_LDADD) $(LIBS) +test-mbsinit$(EXEEXT): $(test_mbsinit_OBJECTS) $(test_mbsinit_DEPENDENCIES) + @rm -f test-mbsinit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbsinit_OBJECTS) $(test_mbsinit_LDADD) $(LIBS) +test-memchr2$(EXEEXT): $(test_memchr2_OBJECTS) $(test_memchr2_DEPENDENCIES) + @rm -f test-memchr2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_memchr2_OBJECTS) $(test_memchr2_LDADD) $(LIBS) +test-open$(EXEEXT): $(test_open_OBJECTS) $(test_open_DEPENDENCIES) + @rm -f test-open$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_open_OBJECTS) $(test_open_LDADD) $(LIBS) +test-posix_spawn1$(EXEEXT): $(test_posix_spawn1_OBJECTS) $(test_posix_spawn1_DEPENDENCIES) + @rm -f test-posix_spawn1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_posix_spawn1_OBJECTS) $(test_posix_spawn1_LDADD) $(LIBS) +test-posix_spawn2$(EXEEXT): $(test_posix_spawn2_OBJECTS) $(test_posix_spawn2_DEPENDENCIES) + @rm -f test-posix_spawn2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_posix_spawn2_OBJECTS) $(test_posix_spawn2_LDADD) $(LIBS) +test-printf-frexp$(EXEEXT): $(test_printf_frexp_OBJECTS) $(test_printf_frexp_DEPENDENCIES) + @rm -f test-printf-frexp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_printf_frexp_OBJECTS) $(test_printf_frexp_LDADD) $(LIBS) +test-printf-frexpl$(EXEEXT): $(test_printf_frexpl_OBJECTS) $(test_printf_frexpl_DEPENDENCIES) + @rm -f test-printf-frexpl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_printf_frexpl_OBJECTS) $(test_printf_frexpl_LDADD) $(LIBS) +test-quotearg$(EXEEXT): $(test_quotearg_OBJECTS) $(test_quotearg_DEPENDENCIES) + @rm -f test-quotearg$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_quotearg_OBJECTS) $(test_quotearg_LDADD) $(LIBS) +test-rawmemchr$(EXEEXT): $(test_rawmemchr_OBJECTS) $(test_rawmemchr_DEPENDENCIES) + @rm -f test-rawmemchr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_rawmemchr_OBJECTS) $(test_rawmemchr_LDADD) $(LIBS) +test-sched$(EXEEXT): $(test_sched_OBJECTS) $(test_sched_DEPENDENCIES) + @rm -f test-sched$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sched_OBJECTS) $(test_sched_LDADD) $(LIBS) +test-sigaction$(EXEEXT): $(test_sigaction_OBJECTS) $(test_sigaction_DEPENDENCIES) + @rm -f test-sigaction$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sigaction_OBJECTS) $(test_sigaction_LDADD) $(LIBS) +test-signal$(EXEEXT): $(test_signal_OBJECTS) $(test_signal_DEPENDENCIES) + @rm -f test-signal$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_signal_OBJECTS) $(test_signal_LDADD) $(LIBS) +test-signbit$(EXEEXT): $(test_signbit_OBJECTS) $(test_signbit_DEPENDENCIES) + @rm -f test-signbit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_signbit_OBJECTS) $(test_signbit_LDADD) $(LIBS) +test-snprintf$(EXEEXT): $(test_snprintf_OBJECTS) $(test_snprintf_DEPENDENCIES) + @rm -f test-snprintf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_snprintf_OBJECTS) $(test_snprintf_LDADD) $(LIBS) +test-stdbool$(EXEEXT): $(test_stdbool_OBJECTS) $(test_stdbool_DEPENDENCIES) + @rm -f test-stdbool$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdbool_OBJECTS) $(test_stdbool_LDADD) $(LIBS) +test-stdint$(EXEEXT): $(test_stdint_OBJECTS) $(test_stdint_DEPENDENCIES) + @rm -f test-stdint$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdint_OBJECTS) $(test_stdint_LDADD) $(LIBS) +test-stdio$(EXEEXT): $(test_stdio_OBJECTS) $(test_stdio_DEPENDENCIES) + @rm -f test-stdio$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdio_OBJECTS) $(test_stdio_LDADD) $(LIBS) +test-stdlib$(EXEEXT): $(test_stdlib_OBJECTS) $(test_stdlib_DEPENDENCIES) + @rm -f test-stdlib$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdlib_OBJECTS) $(test_stdlib_LDADD) $(LIBS) +test-strchrnul$(EXEEXT): $(test_strchrnul_OBJECTS) $(test_strchrnul_DEPENDENCIES) + @rm -f test-strchrnul$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strchrnul_OBJECTS) $(test_strchrnul_LDADD) $(LIBS) +test-strerror$(EXEEXT): $(test_strerror_OBJECTS) $(test_strerror_DEPENDENCIES) + @rm -f test-strerror$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strerror_OBJECTS) $(test_strerror_LDADD) $(LIBS) +test-string$(EXEEXT): $(test_string_OBJECTS) $(test_string_DEPENDENCIES) + @rm -f test-string$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_string_OBJECTS) $(test_string_LDADD) $(LIBS) +test-strsignal$(EXEEXT): $(test_strsignal_OBJECTS) $(test_strsignal_DEPENDENCIES) + @rm -f test-strsignal$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strsignal_OBJECTS) $(test_strsignal_LDADD) $(LIBS) +test-strstr$(EXEEXT): $(test_strstr_OBJECTS) $(test_strstr_DEPENDENCIES) + @rm -f test-strstr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strstr_OBJECTS) $(test_strstr_LDADD) $(LIBS) +test-strtod$(EXEEXT): $(test_strtod_OBJECTS) $(test_strtod_DEPENDENCIES) + @rm -f test-strtod$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strtod_OBJECTS) $(test_strtod_LDADD) $(LIBS) +test-sys_stat$(EXEEXT): $(test_sys_stat_OBJECTS) $(test_sys_stat_DEPENDENCIES) + @rm -f test-sys_stat$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sys_stat_OBJECTS) $(test_sys_stat_LDADD) $(LIBS) +test-sys_time$(EXEEXT): $(test_sys_time_OBJECTS) $(test_sys_time_DEPENDENCIES) + @rm -f test-sys_time$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sys_time_OBJECTS) $(test_sys_time_LDADD) $(LIBS) +test-unistd$(EXEEXT): $(test_unistd_OBJECTS) $(test_unistd_DEPENDENCIES) + @rm -f test-unistd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_unistd_OBJECTS) $(test_unistd_LDADD) $(LIBS) +test-vasnprintf$(EXEEXT): $(test_vasnprintf_OBJECTS) $(test_vasnprintf_DEPENDENCIES) + @rm -f test-vasnprintf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_vasnprintf_OBJECTS) $(test_vasnprintf_LDADD) $(LIBS) +test-vasprintf$(EXEEXT): $(test_vasprintf_OBJECTS) $(test_vasprintf_DEPENDENCIES) + @rm -f test-vasprintf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_vasprintf_OBJECTS) $(test_vasprintf_LDADD) $(LIBS) +test-vasprintf-posix$(EXEEXT): $(test_vasprintf_posix_OBJECTS) $(test_vasprintf_posix_DEPENDENCIES) + @rm -f test-vasprintf-posix$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_vasprintf_posix_OBJECTS) $(test_vasprintf_posix_LDADD) $(LIBS) +test-wchar$(EXEEXT): $(test_wchar_OBJECTS) $(test_wchar_DEPENDENCIES) + @rm -f test-wchar$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wchar_OBJECTS) $(test_wchar_LDADD) $(LIBS) +test-wcrtomb$(EXEEXT): $(test_wcrtomb_OBJECTS) $(test_wcrtomb_DEPENDENCIES) + @rm -f test-wcrtomb$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wcrtomb_OBJECTS) $(test_wcrtomb_LDADD) $(LIBS) +test-wctype$(EXEEXT): $(test_wctype_OBJECTS) $(test_wctype_DEPENDENCIES) + @rm -f test-wctype$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wctype_OBJECTS) $(test_wctype_LDADD) $(LIBS) +test-xvasprintf$(EXEEXT): $(test_xvasprintf_OBJECTS) $(test_xvasprintf_DEPENDENCIES) + @rm -f test-xvasprintf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_xvasprintf_OBJECTS) $(test_xvasprintf_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_array_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl_array_oset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alloca-opt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-array_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-array_oset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-avltree_oset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-binary-io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-btowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-ctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-stack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-closein.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-dirname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-environ.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-errno.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fcntl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fflush.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fflush2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-filenamecat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fopen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fpending.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fpurge.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-freadahead.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-freading.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-frexp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-frexpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fseeko.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-ftello.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-getdtablesize.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnand-nolibm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanf-nolibm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanl-nolibm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-linkedhash_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-lstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-math.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-memchr2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-posix_spawn1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-posix_spawn2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-printf-frexp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-printf-frexpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-quotearg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-rawmemchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sched.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sigaction.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signbit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-snprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdbool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdint.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strchrnul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strerror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-string.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strsignal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strstr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strtod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-sys_time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unistd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vasnprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vasprintf-posix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-vasprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wchar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcrtomb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-xvasprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctob.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + echo "$$grn$$dashes"; \ + else \ + echo "$$red$$dashes"; \ + fi; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes$$std"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ + clean-local clean-noinstLIBRARIES clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + check-am ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-TESTS check-am clean \ + clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ + clean-local clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ + ctags-recursive distclean distclean-compile distclean-generic \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-local pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + +@POSIX_SPAWN_PORTED_TRUE@test-posix_spawn1.sh: test-posix_spawn1.in.sh +@POSIX_SPAWN_PORTED_TRUE@ cp $(srcdir)/test-posix_spawn1.in.sh $@-t +@POSIX_SPAWN_PORTED_TRUE@ mv $@-t $@ +@POSIX_SPAWN_PORTED_TRUE@test-posix_spawn2.sh: test-posix_spawn2.in.sh +@POSIX_SPAWN_PORTED_TRUE@ cp $(srcdir)/test-posix_spawn2.in.sh $@-t +@POSIX_SPAWN_PORTED_TRUE@ mv $@-t $@ + +# Clean up after Solaris cc. +clean-local: + rm -rf SunWS_cache + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/m4-1.4.13/tests/gl_array_list.c b/coreseek/m4-1.4.13/tests/gl_array_list.c new file mode 100644 index 0000000..f82d01b --- /dev/null +++ b/coreseek/m4-1.4.13/tests/gl_array_list.c @@ -0,0 +1,657 @@ +/* Sequential list data type implemented by an array. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "gl_array_list.h" + +#include +/* Get memcpy. */ +#include + +#include "xalloc.h" + +/* Checked size_t computations. */ +#include "xsize.h" + +#ifndef uintptr_t +# define uintptr_t unsigned long +#endif + +/* -------------------------- gl_list_t Data Type -------------------------- */ + +/* Concrete gl_list_impl type, valid for this file only. */ +struct gl_list_impl +{ + struct gl_list_impl_base base; + /* An array of ALLOCATED elements, of which the first COUNT are used. + 0 <= COUNT <= ALLOCATED. */ + const void **elements; + size_t count; + size_t allocated; +}; + +/* struct gl_list_node_impl doesn't exist here. The pointers are actually + indices + 1. */ +#define INDEX_TO_NODE(index) (gl_list_node_t)(uintptr_t)(size_t)((index) + 1) +#define NODE_TO_INDEX(node) ((uintptr_t)(node) - 1) + +static gl_list_t +gl_array_create_empty (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates) +{ + struct gl_list_impl *list = XMALLOC (struct gl_list_impl); + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; + list->elements = NULL; + list->count = 0; + list->allocated = 0; + + return list; +} + +static gl_list_t +gl_array_create (gl_list_implementation_t implementation, + gl_listelement_equals_fn equals_fn, + gl_listelement_hashcode_fn hashcode_fn, + gl_listelement_dispose_fn dispose_fn, + bool allow_duplicates, + size_t count, const void **contents) +{ + struct gl_list_impl *list = XMALLOC (struct gl_list_impl); + + list->base.vtable = implementation; + list->base.equals_fn = equals_fn; + list->base.hashcode_fn = hashcode_fn; + list->base.dispose_fn = dispose_fn; + list->base.allow_duplicates = allow_duplicates; + if (count > 0) + { + list->elements = XNMALLOC (count, const void *); + memcpy (list->elements, contents, count * sizeof (const void *)); + } + else + list->elements = NULL; + list->count = count; + list->allocated = count; + + return list; +} + +static size_t +gl_array_size (gl_list_t list) +{ + return list->count; +} + +static const void * +gl_array_node_value (gl_list_t list, gl_list_node_t node) +{ + uintptr_t index = NODE_TO_INDEX (node); + if (!(index < list->count)) + /* Invalid argument. */ + abort (); + return list->elements[index]; +} + +static void +gl_array_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt) +{ + uintptr_t index = NODE_TO_INDEX (node); + if (!(index < list->count)) + /* Invalid argument. */ + abort (); + list->elements[index] = elt; +} + +static gl_list_node_t +gl_array_next_node (gl_list_t list, gl_list_node_t node) +{ + uintptr_t index = NODE_TO_INDEX (node); + if (!(index < list->count)) + /* Invalid argument. */ + abort (); + index++; + if (index < list->count) + return INDEX_TO_NODE (index); + else + return NULL; +} + +static gl_list_node_t +gl_array_previous_node (gl_list_t list, gl_list_node_t node) +{ + uintptr_t index = NODE_TO_INDEX (node); + if (!(index < list->count)) + /* Invalid argument. */ + abort (); + if (index > 0) + return INDEX_TO_NODE (index - 1); + else + return NULL; +} + +static const void * +gl_array_get_at (gl_list_t list, size_t position) +{ + size_t count = list->count; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + return list->elements[position]; +} + +static gl_list_node_t +gl_array_set_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = list->count; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + list->elements[position] = elt; + return INDEX_TO_NODE (position); +} + +static size_t +gl_array_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + size_t count = list->count; + + if (!(start_index <= end_index && end_index <= count)) + /* Invalid arguments. */ + abort (); + + if (start_index < end_index) + { + gl_listelement_equals_fn equals = list->base.equals_fn; + if (equals != NULL) + { + size_t i; + + for (i = start_index;;) + { + if (equals (elt, list->elements[i])) + return i; + i++; + if (i == end_index) + break; + } + } + else + { + size_t i; + + for (i = start_index;;) + { + if (elt == list->elements[i]) + return i; + i++; + if (i == end_index) + break; + } + } + } + return (size_t)(-1); +} + +static gl_list_node_t +gl_array_search_from_to (gl_list_t list, size_t start_index, size_t end_index, + const void *elt) +{ + size_t index = gl_array_indexof_from_to (list, start_index, end_index, elt); + return INDEX_TO_NODE (index); +} + +/* Ensure that list->allocated > list->count. */ +static void +grow (gl_list_t list) +{ + size_t new_allocated; + size_t memory_size; + const void **memory; + + new_allocated = xtimes (list->allocated, 2); + new_allocated = xsum (new_allocated, 1); + memory_size = xtimes (new_allocated, sizeof (const void *)); + if (size_overflow_p (memory_size)) + /* Overflow, would lead to out of memory. */ + xalloc_die (); + memory = (const void **) xrealloc (list->elements, memory_size); + if (memory == NULL) + /* Out of memory. */ + xalloc_die (); + list->elements = memory; + list->allocated = new_allocated; +} + +static gl_list_node_t +gl_array_add_first (gl_list_t list, const void *elt) +{ + size_t count = list->count; + const void **elements; + size_t i; + + if (count == list->allocated) + grow (list); + elements = list->elements; + for (i = count; i > 0; i--) + elements[i] = elements[i - 1]; + elements[0] = elt; + list->count = count + 1; + return INDEX_TO_NODE (0); +} + +static gl_list_node_t +gl_array_add_last (gl_list_t list, const void *elt) +{ + size_t count = list->count; + + if (count == list->allocated) + grow (list); + list->elements[count] = elt; + list->count = count + 1; + return INDEX_TO_NODE (count); +} + +static gl_list_node_t +gl_array_add_before (gl_list_t list, gl_list_node_t node, const void *elt) +{ + size_t count = list->count; + uintptr_t index = NODE_TO_INDEX (node); + size_t position; + const void **elements; + size_t i; + + if (!(index < count)) + /* Invalid argument. */ + abort (); + position = index; + if (count == list->allocated) + grow (list); + elements = list->elements; + for (i = count; i > position; i--) + elements[i] = elements[i - 1]; + elements[position] = elt; + list->count = count + 1; + return INDEX_TO_NODE (position); +} + +static gl_list_node_t +gl_array_add_after (gl_list_t list, gl_list_node_t node, const void *elt) +{ + size_t count = list->count; + uintptr_t index = NODE_TO_INDEX (node); + size_t position; + const void **elements; + size_t i; + + if (!(index < count)) + /* Invalid argument. */ + abort (); + position = index + 1; + if (count == list->allocated) + grow (list); + elements = list->elements; + for (i = count; i > position; i--) + elements[i] = elements[i - 1]; + elements[position] = elt; + list->count = count + 1; + return INDEX_TO_NODE (position); +} + +static gl_list_node_t +gl_array_add_at (gl_list_t list, size_t position, const void *elt) +{ + size_t count = list->count; + const void **elements; + size_t i; + + if (!(position <= count)) + /* Invalid argument. */ + abort (); + if (count == list->allocated) + grow (list); + elements = list->elements; + for (i = count; i > position; i--) + elements[i] = elements[i - 1]; + elements[position] = elt; + list->count = count + 1; + return INDEX_TO_NODE (position); +} + +static bool +gl_array_remove_node (gl_list_t list, gl_list_node_t node) +{ + size_t count = list->count; + uintptr_t index = NODE_TO_INDEX (node); + size_t position; + const void **elements; + size_t i; + + if (!(index < count)) + /* Invalid argument. */ + abort (); + position = index; + elements = list->elements; + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (elements[position]); + for (i = position + 1; i < count; i++) + elements[i - 1] = elements[i]; + list->count = count - 1; + return true; +} + +static bool +gl_array_remove_at (gl_list_t list, size_t position) +{ + size_t count = list->count; + const void **elements; + size_t i; + + if (!(position < count)) + /* Invalid argument. */ + abort (); + elements = list->elements; + if (list->base.dispose_fn != NULL) + list->base.dispose_fn (elements[position]); + for (i = position + 1; i < count; i++) + elements[i - 1] = elements[i]; + list->count = count - 1; + return true; +} + +static bool +gl_array_remove (gl_list_t list, const void *elt) +{ + size_t position = gl_array_indexof_from_to (list, 0, list->count, elt); + if (position == (size_t)(-1)) + return false; + else + return gl_array_remove_at (list, position); +} + +static void +gl_array_list_free (gl_list_t list) +{ + if (list->elements != NULL) + { + if (list->base.dispose_fn != NULL) + { + size_t count = list->count; + + if (count > 0) + { + gl_listelement_dispose_fn dispose = list->base.dispose_fn; + const void **elements = list->elements; + + do + dispose (*elements++); + while (--count > 0); + } + } + free (list->elements); + } + free (list); +} + +/* --------------------- gl_list_iterator_t Data Type --------------------- */ + +static gl_list_iterator_t +gl_array_iterator (gl_list_t list) +{ + gl_list_iterator_t result; + + result.vtable = list->base.vtable; + result.list = list; + result.count = list->count; + result.p = list->elements + 0; + result.q = list->elements + list->count; +#ifdef lint + result.i = 0; + result.j = 0; +#endif + + return result; +} + +static gl_list_iterator_t +gl_array_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) +{ + gl_list_iterator_t result; + + if (!(start_index <= end_index && end_index <= list->count)) + /* Invalid arguments. */ + abort (); + result.vtable = list->base.vtable; + result.list = list; + result.count = list->count; + result.p = list->elements + start_index; + result.q = list->elements + end_index; +#ifdef lint + result.i = 0; + result.j = 0; +#endif + + return result; +} + +static bool +gl_array_iterator_next (gl_list_iterator_t *iterator, + const void **eltp, gl_list_node_t *nodep) +{ + gl_list_t list = iterator->list; + if (iterator->count != list->count) + { + if (iterator->count != list->count + 1) + /* Concurrent modifications were done on the list. */ + abort (); + /* The last returned element was removed. */ + iterator->count--; + iterator->p = (const void **) iterator->p - 1; + iterator->q = (const void **) iterator->q - 1; + } + if (iterator->p < iterator->q) + { + const void **p = (const void **) iterator->p; + *eltp = *p; + if (nodep != NULL) + *nodep = INDEX_TO_NODE (p - list->elements); + iterator->p = p + 1; + return true; + } + else + return false; +} + +static void +gl_array_iterator_free (gl_list_iterator_t *iterator) +{ +} + +/* ---------------------- Sorted gl_list_t Data Type ---------------------- */ + +static size_t +gl_array_sortedlist_indexof_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + if (!(low <= high && high <= list->count)) + /* Invalid arguments. */ + abort (); + if (low < high) + { + /* At each loop iteration, low < high; for indices < low the values + are smaller than ELT; for indices >= high the values are greater + than ELT. So, if the element occurs in the list, it is at + low <= position < high. */ + do + { + size_t mid = low + (high - low) / 2; /* low <= mid < high */ + int cmp = compar (list->elements[mid], elt); + + if (cmp < 0) + low = mid + 1; + else if (cmp > 0) + high = mid; + else /* cmp == 0 */ + { + /* We have an element equal to ELT at index MID. But we need + the minimal such index. */ + high = mid; + /* At each loop iteration, low <= high and + compar (list->elements[high], elt) == 0, + and we know that the first occurrence of the element is at + low <= position <= high. */ + while (low < high) + { + size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */ + int cmp2 = compar (list->elements[mid2], elt); + + if (cmp2 < 0) + low = mid2 + 1; + else if (cmp2 > 0) + /* The list was not sorted. */ + abort (); + else /* cmp2 == 0 */ + { + if (mid2 == low) + break; + high = mid2 - 1; + } + } + return low; + } + } + while (low < high); + /* Here low == high. */ + } + return (size_t)(-1); +} + +static size_t +gl_array_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + return gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, + elt); +} + +static gl_list_node_t +gl_array_sortedlist_search_from_to (gl_list_t list, + gl_listelement_compar_fn compar, + size_t low, size_t high, + const void *elt) +{ + size_t index = + gl_array_sortedlist_indexof_from_to (list, compar, low, high, elt); + return INDEX_TO_NODE (index); +} + +static gl_list_node_t +gl_array_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + size_t index = + gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, elt); + return INDEX_TO_NODE (index); +} + +static gl_list_node_t +gl_array_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + size_t count = list->count; + size_t low = 0; + size_t high = count; + + /* At each loop iteration, low <= high; for indices < low the values are + smaller than ELT; for indices >= high the values are greater than ELT. */ + while (low < high) + { + size_t mid = low + (high - low) / 2; /* low <= mid < high */ + int cmp = compar (list->elements[mid], elt); + + if (cmp < 0) + low = mid + 1; + else if (cmp > 0) + high = mid; + else /* cmp == 0 */ + { + low = mid; + break; + } + } + return gl_array_add_at (list, low, elt); +} + +static bool +gl_array_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, + const void *elt) +{ + size_t index = gl_array_sortedlist_indexof (list, compar, elt); + if (index == (size_t)(-1)) + return false; + else + return gl_array_remove_at (list, index); +} + + +const struct gl_list_implementation gl_array_list_implementation = + { + gl_array_create_empty, + gl_array_create, + gl_array_size, + gl_array_node_value, + gl_array_node_set_value, + gl_array_next_node, + gl_array_previous_node, + gl_array_get_at, + gl_array_set_at, + gl_array_search_from_to, + gl_array_indexof_from_to, + gl_array_add_first, + gl_array_add_last, + gl_array_add_before, + gl_array_add_after, + gl_array_add_at, + gl_array_remove_node, + gl_array_remove_at, + gl_array_remove, + gl_array_list_free, + gl_array_iterator, + gl_array_iterator_from_to, + gl_array_iterator_next, + gl_array_iterator_free, + gl_array_sortedlist_search, + gl_array_sortedlist_search_from_to, + gl_array_sortedlist_indexof, + gl_array_sortedlist_indexof_from_to, + gl_array_sortedlist_add, + gl_array_sortedlist_remove + }; diff --git a/coreseek/m4-1.4.13/tests/gl_array_list.h b/coreseek/m4-1.4.13/tests/gl_array_list.h new file mode 100644 index 0000000..b0513f7 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/gl_array_list.h @@ -0,0 +1,34 @@ +/* Sequential list data type implemented by an array. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_ARRAY_LIST_H +#define _GL_ARRAY_LIST_H + +#include "gl_list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_list_implementation gl_array_list_implementation; +#define GL_ARRAY_LIST &gl_array_list_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ARRAY_LIST_H */ diff --git a/coreseek/m4-1.4.13/tests/gl_array_oset.c b/coreseek/m4-1.4.13/tests/gl_array_oset.c new file mode 100644 index 0000000..83c563b --- /dev/null +++ b/coreseek/m4-1.4.13/tests/gl_array_oset.c @@ -0,0 +1,351 @@ +/* Ordered set data type implemented by an array. + Copyright (C) 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "gl_array_oset.h" + +#include + +#include "xalloc.h" + +/* Checked size_t computations. */ +#include "xsize.h" + +/* -------------------------- gl_oset_t Data Type -------------------------- */ + +/* Concrete gl_oset_impl type, valid for this file only. */ +struct gl_oset_impl +{ + struct gl_oset_impl_base base; + /* An array of ALLOCATED elements, of which the first COUNT are used. + 0 <= COUNT <= ALLOCATED. */ + const void **elements; + size_t count; + size_t allocated; +}; + +static gl_oset_t +gl_array_create_empty (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn) +{ + struct gl_oset_impl *set = XMALLOC (struct gl_oset_impl); + + set->base.vtable = implementation; + set->base.compar_fn = compar_fn; + set->base.dispose_fn = dispose_fn; + set->elements = NULL; + set->count = 0; + set->allocated = 0; + + return set; +} + +static size_t +gl_array_size (gl_oset_t set) +{ + return set->count; +} + +static size_t +gl_array_indexof (gl_oset_t set, const void *elt) +{ + size_t count = set->count; + + if (count > 0) + { + gl_setelement_compar_fn compar = set->base.compar_fn; + size_t low = 0; + size_t high = count; + + /* At each loop iteration, low < high; for indices < low the values + are smaller than ELT; for indices >= high the values are greater + than ELT. So, if the element occurs in the list, it is at + low <= position < high. */ + do + { + size_t mid = low + (high - low) / 2; /* low <= mid < high */ + int cmp = (compar != NULL + ? compar (set->elements[mid], elt) + : (set->elements[mid] > elt ? 1 : + set->elements[mid] < elt ? -1 : 0)); + + if (cmp < 0) + low = mid + 1; + else if (cmp > 0) + high = mid; + else /* cmp == 0 */ + /* We have an element equal to ELT at index MID. */ + return mid; + } + while (low < high); + } + return (size_t)(-1); +} + +static bool +gl_array_search (gl_oset_t set, const void *elt) +{ + return gl_array_indexof (set, elt) != (size_t)(-1); +} + +static bool +gl_array_search_atleast (gl_oset_t set, + gl_setelement_threshold_fn threshold_fn, + const void *threshold, + const void **eltp) +{ + size_t count = set->count; + + if (count > 0) + { + size_t low = 0; + size_t high = count; + + /* At each loop iteration, low < high; for indices < low the values are + smaller than THRESHOLD; for indices >= high the values are nonexistent. + So, if an element >= THRESHOLD occurs in the list, it is at + low <= position < high. */ + do + { + size_t mid = low + (high - low) / 2; /* low <= mid < high */ + + if (! threshold_fn (set->elements[mid], threshold)) + low = mid + 1; + else + { + /* We have an element >= THRESHOLD at index MID. But we need the + minimal such index. */ + high = mid; + /* At each loop iteration, low <= high and + compar (list->elements[high], value) >= 0, + and we know that the first occurrence of the element is at + low <= position <= high. */ + while (low < high) + { + size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */ + + if (! threshold_fn (set->elements[mid2], threshold)) + low = mid2 + 1; + else + high = mid2; + } + *eltp = set->elements[low]; + return true; + } + } + while (low < high); + } + return false; +} + +/* Ensure that set->allocated > set->count. */ +static void +grow (gl_oset_t set) +{ + size_t new_allocated; + size_t memory_size; + const void **memory; + + new_allocated = xtimes (set->allocated, 2); + new_allocated = xsum (new_allocated, 1); + memory_size = xtimes (new_allocated, sizeof (const void *)); + if (size_overflow_p (memory_size)) + /* Overflow, would lead to out of memory. */ + xalloc_die (); + memory = (const void **) xrealloc (set->elements, memory_size); + if (memory == NULL) + /* Out of memory. */ + xalloc_die (); + set->elements = memory; + set->allocated = new_allocated; +} + +/* Add the given element ELT at the given position, + 0 <= position <= gl_oset_size (set). */ +static inline void +gl_array_add_at (gl_oset_t set, size_t position, const void *elt) +{ + size_t count = set->count; + const void **elements; + size_t i; + + if (count == set->allocated) + grow (set); + elements = set->elements; + for (i = count; i > position; i--) + elements[i] = elements[i - 1]; + elements[position] = elt; + set->count = count + 1; +} + +/* Remove the element at the given position, + 0 <= position < gl_oset_size (set). */ +static inline void +gl_array_remove_at (gl_oset_t set, size_t position) +{ + size_t count = set->count; + const void **elements; + size_t i; + + elements = set->elements; + if (set->base.dispose_fn != NULL) + set->base.dispose_fn (elements[position]); + for (i = position + 1; i < count; i++) + elements[i - 1] = elements[i]; + set->count = count - 1; +} + +static bool +gl_array_add (gl_oset_t set, const void *elt) +{ + size_t count = set->count; + size_t low = 0; + + if (count > 0) + { + gl_setelement_compar_fn compar = set->base.compar_fn; + size_t high = count; + + /* At each loop iteration, low < high; for indices < low the values + are smaller than ELT; for indices >= high the values are greater + than ELT. So, if the element occurs in the list, it is at + low <= position < high. */ + do + { + size_t mid = low + (high - low) / 2; /* low <= mid < high */ + int cmp = (compar != NULL + ? compar (set->elements[mid], elt) + : (set->elements[mid] > elt ? 1 : + set->elements[mid] < elt ? -1 : 0)); + + if (cmp < 0) + low = mid + 1; + else if (cmp > 0) + high = mid; + else /* cmp == 0 */ + return false; + } + while (low < high); + } + gl_array_add_at (set, low, elt); + return true; +} + +static bool +gl_array_remove (gl_oset_t set, const void *elt) +{ + size_t index = gl_array_indexof (set, elt); + if (index != (size_t)(-1)) + { + gl_array_remove_at (set, index); + return true; + } + else + return false; +} + +static void +gl_array_free (gl_oset_t set) +{ + if (set->elements != NULL) + { + if (set->base.dispose_fn != NULL) + { + size_t count = set->count; + + if (count > 0) + { + gl_setelement_dispose_fn dispose = set->base.dispose_fn; + const void **elements = set->elements; + + do + dispose (*elements++); + while (--count > 0); + } + } + free (set->elements); + } + free (set); +} + +/* --------------------- gl_oset_iterator_t Data Type --------------------- */ + +static gl_oset_iterator_t +gl_array_iterator (gl_oset_t set) +{ + gl_oset_iterator_t result; + + result.vtable = set->base.vtable; + result.set = set; + result.count = set->count; + result.p = set->elements + 0; + result.q = set->elements + set->count; +#ifdef lint + result.i = 0; + result.j = 0; +#endif + + return result; +} + +static bool +gl_array_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) +{ + gl_oset_t set = iterator->set; + if (iterator->count != set->count) + { + if (iterator->count != set->count + 1) + /* Concurrent modifications were done on the set. */ + abort (); + /* The last returned element was removed. */ + iterator->count--; + iterator->p = (const void **) iterator->p - 1; + iterator->q = (const void **) iterator->q - 1; + } + if (iterator->p < iterator->q) + { + const void **p = (const void **) iterator->p; + *eltp = *p; + iterator->p = p + 1; + return true; + } + else + return false; +} + +static void +gl_array_iterator_free (gl_oset_iterator_t *iterator) +{ +} + + +const struct gl_oset_implementation gl_array_oset_implementation = + { + gl_array_create_empty, + gl_array_size, + gl_array_search, + gl_array_search_atleast, + gl_array_add, + gl_array_remove, + gl_array_free, + gl_array_iterator, + gl_array_iterator_next, + gl_array_iterator_free + }; diff --git a/coreseek/m4-1.4.13/tests/gl_array_oset.h b/coreseek/m4-1.4.13/tests/gl_array_oset.h new file mode 100644 index 0000000..153dae0 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/gl_array_oset.h @@ -0,0 +1,34 @@ +/* Ordered set data type implemented by an array. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_ARRAY_OSET_H +#define _GL_ARRAY_OSET_H + +#include "gl_oset.h" + +#ifdef __cplusplus +extern "C" { +#endif + +extern const struct gl_oset_implementation gl_array_oset_implementation; +#define GL_ARRAY_OSET &gl_array_oset_implementation + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ARRAY_OSET_H */ diff --git a/coreseek/m4-1.4.13/tests/locale/fr/LC_MESSAGES/test-quotearg.mo b/coreseek/m4-1.4.13/tests/locale/fr/LC_MESSAGES/test-quotearg.mo new file mode 100644 index 0000000..87e97e1 Binary files /dev/null and b/coreseek/m4-1.4.13/tests/locale/fr/LC_MESSAGES/test-quotearg.mo differ diff --git a/coreseek/m4-1.4.13/tests/locale/fr/LC_MESSAGES/test-quotearg.po b/coreseek/m4-1.4.13/tests/locale/fr/LC_MESSAGES/test-quotearg.po new file mode 100644 index 0000000..1ea251f --- /dev/null +++ b/coreseek/m4-1.4.13/tests/locale/fr/LC_MESSAGES/test-quotearg.po @@ -0,0 +1,20 @@ +# Message catalog that maps the ASCII replacements for single-quote characters +# to real single-quote characters. +# The header entry is commented out on purpose, so that gettext() performs no +# no character set conversion from the PO file's encoding to the locale +# encoding. This allows us to use the same PO file in various locales. +#msgid "" +#msgstr "" +#"Project-Id-Version: GNU gnulib\n" +#"PO-Revision-Date: 2009-01-26 01:02+01:00\n" +#"Last-Translator: Eric Blake \n" +#"Language-Team: Undetermined \n" +#"MIME-Version: 1.0\n" +#"Content-Type: text/plain; charset=UTF-8\n" +#"Content-Transfer-Encoding: 8bit\n" + +msgid "`" +msgstr "\302\253" + +msgid "'" +msgstr "\302\273" diff --git a/coreseek/m4-1.4.13/tests/nan.h b/coreseek/m4-1.4.13/tests/nan.h new file mode 100644 index 0000000..8aa8bf0 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/nan.h @@ -0,0 +1,60 @@ +/* Macros for not-a-number. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +/* NaNf () returns a 'float' not-a-number. */ + +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static float +NaNf () +{ + static float zero = 0.0f; + return zero / zero; +} +#else +# define NaNf() (0.0f / 0.0f) +#endif + + +/* NaNd () returns a 'double' not-a-number. */ + +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static double +NaNd () +{ + static double zero = 0.0; + return zero / zero; +} +#else +# define NaNd() (0.0 / 0.0) +#endif + + +/* NaNl () returns a 'long double' not-a-number. */ + +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif diff --git a/coreseek/m4-1.4.13/tests/setenv.c b/coreseek/m4-1.4.13/tests/setenv.c new file mode 100644 index 0000000..83b52b8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/setenv.c @@ -0,0 +1,330 @@ +/* Copyright (C) 1992,1995-1999,2000-2003,2005-2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if !_LIBC +# include +#endif +#include + +/* Specification. */ +#include + +#include +#ifndef __set_errno +# define __set_errno(ev) ((errno) = (ev)) +#endif + +#include +#if _LIBC || HAVE_UNISTD_H +# include +#endif + +#if _LIBC || !HAVE_SETENV + +#if !_LIBC +# include "malloca.h" +#endif + +#if !_LIBC +# define __environ environ +#endif + +#if _LIBC +/* This lock protects against simultaneous modifications of `environ'. */ +# include +__libc_lock_define_initialized (static, envlock) +# define LOCK __libc_lock_lock (envlock) +# define UNLOCK __libc_lock_unlock (envlock) +#else +# define LOCK +# define UNLOCK +#endif + +/* In the GNU C library we must keep the namespace clean. */ +#ifdef _LIBC +# define setenv __setenv +# define clearenv __clearenv +# define tfind __tfind +# define tsearch __tsearch +#endif + +/* In the GNU C library implementation we try to be more clever and + allow arbitrarily many changes of the environment given that the used + values are from a small set. Outside glibc this will eat up all + memory after a while. */ +#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ + && defined __GNUC__) +# define USE_TSEARCH 1 +# include +typedef int (*compar_fn_t) (const void *, const void *); + +/* This is a pointer to the root of the search tree with the known + values. */ +static void *known_values; + +# define KNOWN_VALUE(Str) \ + ({ \ + void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ + value != NULL ? *(char **) value : NULL; \ + }) +# define STORE_VALUE(Str) \ + tsearch (Str, &known_values, (compar_fn_t) strcmp) + +#else +# undef USE_TSEARCH + +# define KNOWN_VALUE(Str) NULL +# define STORE_VALUE(Str) do { } while (0) + +#endif + + +/* If this variable is not a null pointer we allocated the current + environment. */ +static char **last_environ; + + +/* This function is used by `setenv' and `putenv'. The difference between + the two functions is that for the former must create a new string which + is then placed in the environment, while the argument of `putenv' + must be used directly. This is all complicated by the fact that we try + to reuse values once generated for a `setenv' call since we can never + free the strings. */ +int +__add_to_environ (const char *name, const char *value, const char *combined, + int replace) +{ + register char **ep; + register size_t size; + const size_t namelen = strlen (name); + const size_t vallen = value != NULL ? strlen (value) + 1 : 0; + + LOCK; + + /* We have to get the pointer now that we have the lock and not earlier + since another thread might have created a new environment. */ + ep = __environ; + + size = 0; + if (ep != NULL) + { + for (; *ep != NULL; ++ep) + if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') + break; + else + ++size; + } + + if (ep == NULL || *ep == NULL) + { + char **new_environ; +#ifdef USE_TSEARCH + char *new_value; +#endif + + /* We allocated this space; we can extend it. */ + new_environ = + (char **) (last_environ == NULL + ? malloc ((size + 2) * sizeof (char *)) + : realloc (last_environ, (size + 2) * sizeof (char *))); + if (new_environ == NULL) + { + UNLOCK; + return -1; + } + + /* If the whole entry is given add it. */ + if (combined != NULL) + /* We must not add the string to the search tree since it belongs + to the user. */ + new_environ[size] = (char *) combined; + else + { + /* See whether the value is already known. */ +#ifdef USE_TSEARCH +# ifdef _LIBC + new_value = (char *) alloca (namelen + 1 + vallen); + __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), + value, vallen); +# else + new_value = (char *) malloca (namelen + 1 + vallen); + if (new_value == NULL) + { + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + memcpy (new_value, name, namelen); + new_value[namelen] = '='; + memcpy (&new_value[namelen + 1], value, vallen); +# endif + + new_environ[size] = KNOWN_VALUE (new_value); + if (new_environ[size] == NULL) +#endif + { + new_environ[size] = (char *) malloc (namelen + 1 + vallen); + if (new_environ[size] == NULL) + { +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + +#ifdef USE_TSEARCH + memcpy (new_environ[size], new_value, namelen + 1 + vallen); +#else + memcpy (new_environ[size], name, namelen); + new_environ[size][namelen] = '='; + memcpy (&new_environ[size][namelen + 1], value, vallen); +#endif + /* And save the value now. We cannot do this when we remove + the string since then we cannot decide whether it is a + user string or not. */ + STORE_VALUE (new_environ[size]); + } +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + } + + if (__environ != last_environ) + memcpy ((char *) new_environ, (char *) __environ, + size * sizeof (char *)); + + new_environ[size + 1] = NULL; + + last_environ = __environ = new_environ; + } + else if (replace) + { + char *np; + + /* Use the user string if given. */ + if (combined != NULL) + np = (char *) combined; + else + { +#ifdef USE_TSEARCH + char *new_value; +# ifdef _LIBC + new_value = alloca (namelen + 1 + vallen); + __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), + value, vallen); +# else + new_value = malloca (namelen + 1 + vallen); + if (new_value == NULL) + { + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + memcpy (new_value, name, namelen); + new_value[namelen] = '='; + memcpy (&new_value[namelen + 1], value, vallen); +# endif + + np = KNOWN_VALUE (new_value); + if (np == NULL) +#endif + { + np = malloc (namelen + 1 + vallen); + if (np == NULL) + { +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + +#ifdef USE_TSEARCH + memcpy (np, new_value, namelen + 1 + vallen); +#else + memcpy (np, name, namelen); + np[namelen] = '='; + memcpy (&np[namelen + 1], value, vallen); +#endif + /* And remember the value. */ + STORE_VALUE (np); + } +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + } + + *ep = np; + } + + UNLOCK; + + return 0; +} + +int +setenv (const char *name, const char *value, int replace) +{ + return __add_to_environ (name, value, NULL, replace); +} + +/* The `clearenv' was planned to be added to POSIX.1 but probably + never made it. Nevertheless the POSIX.9 standard (POSIX bindings + for Fortran 77) requires this function. */ +int +clearenv (void) +{ + LOCK; + + if (__environ == last_environ && __environ != NULL) + { + /* We allocated this environment so we can free it. */ + free (__environ); + last_environ = NULL; + } + + /* Clear the environment pointer removes the whole environment. */ + __environ = NULL; + + UNLOCK; + + return 0; +} + +#ifdef _LIBC +static void +free_mem (void) +{ + /* Remove all traces. */ + clearenv (); + + /* Now remove the search tree. */ + __tdestroy (known_values, free); + known_values = NULL; +} +text_set_element (__libc_subfreeres, free_mem); + + +# undef setenv +# undef clearenv +weak_alias (__setenv, setenv) +weak_alias (__clearenv, clearenv) +#endif + +#endif /* _LIBC || !HAVE_SETENV */ diff --git a/coreseek/m4-1.4.13/tests/test-alloca-opt.c b/coreseek/m4-1.4.13/tests/test-alloca-opt.c new file mode 100644 index 0000000..68d906d --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-alloca-opt.c @@ -0,0 +1,62 @@ +/* Test of optional automatic memory allocation. + Copyright (C) 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#if HAVE_ALLOCA + +static void +do_allocation (int n) +{ + void *ptr = alloca (n); + (void) ptr; +} + +void (*func) (int) = do_allocation; + +#endif + +int +main () +{ +#if HAVE_ALLOCA + int i; + + /* Repeat a lot of times, to make sure there's no memory leak. */ + for (i = 0; i < 100000; i++) + { + /* Try various values. + n = 0 gave a crash on Alpha with gcc-2.5.8. + Some versions of MacOS X have a stack size limit of 512 KB. */ + func (34); + func (134); + func (399); + func (510823); + func (129321); + func (0); + func (4070); + func (4095); + func (1); + func (16582); + } +#endif + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-array_list.c b/coreseek/m4-1.4.13/tests/test-array_list.c new file mode 100644 index 0000000..9426294 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-array_list.c @@ -0,0 +1,325 @@ +/* Test of sequential list data type implementation. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "gl_array_list.h" + +#include +#include + +#include "progname.h" + +static const char *objects[15] = + { + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" + }; + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define RANDOM(n) (rand () % (n)) +#define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] + +static void +check_equals (gl_list_t list1, gl_list_t list2) +{ + size_t n, i; + + n = gl_list_size (list1); + ASSERT (n == gl_list_size (list2)); + for (i = 0; i < n; i++) + { + ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); + } +} + +int +main (int argc, char *argv[]) +{ + gl_list_t list1, list2; + + set_program_name (argv[0]); + + /* Allow the user to provide a non-default random seed on the command line. */ + if (argc > 1) + srand (atoi (argv[1])); + + { + size_t initial_size = RANDOM (50); + const void **contents = + (const void **) malloc (initial_size * sizeof (const void *)); + size_t i; + unsigned int repeat; + + for (i = 0; i < initial_size; i++) + contents[i] = RANDOM_OBJECT (); + + /* Create list1. */ + list1 = gl_list_create (GL_ARRAY_LIST, NULL, NULL, NULL, true, + initial_size, contents); + /* Create list2. */ + list2 = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, true); + for (i = 0; i < initial_size; i++) + gl_list_add_last (list2, contents[i]); + + check_equals (list1, list2); + + for (repeat = 0; repeat < 10000; repeat++) + { + unsigned int operation = RANDOM (16); + switch (operation) + { + case 0: + if (gl_list_size (list1) > 0) + { + size_t index = RANDOM (gl_list_size (list1)); + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2; + + node1 = gl_list_set_at (list1, index, obj); + ASSERT (gl_list_get_at (list1, index) == obj); + ASSERT (gl_list_node_value (list1, node1) == obj); + + node2 = gl_list_set_at (list2, index, obj); + ASSERT (gl_list_get_at (list2, index) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + + if (index > 0) + { + ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) + == gl_list_get_at (list1, index - 1)); + } + if (index + 1 < gl_list_size (list1)) + { + ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) + == gl_list_get_at (list1, index + 1)); + } + } + break; + case 1: + { + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2; + node1 = gl_list_search (list1, obj); + node2 = gl_list_search (list2, obj); + if (node1 == NULL) + { + ASSERT (node2 == NULL); + } + else + { + ASSERT (node2 != NULL); + ASSERT (gl_list_node_value (list1, node1) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + } + } + break; + case 2: + { + const char *obj = RANDOM_OBJECT (); + size_t index1, index2; + index1 = gl_list_indexof (list1, obj); + index2 = gl_list_indexof (list2, obj); + if (index1 == (size_t)(-1)) + { + ASSERT (index2 == (size_t)(-1)); + } + else + { + ASSERT (index2 != (size_t)(-1)); + ASSERT (gl_list_get_at (list1, index1) == obj); + ASSERT (gl_list_get_at (list2, index2) == obj); + ASSERT (index2 == index1); + } + } + break; + case 3: /* add 1 element */ + { + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2; + node1 = gl_list_add_first (list1, obj); + node2 = gl_list_add_first (list2, obj); + ASSERT (gl_list_node_value (list1, node1) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + ASSERT (gl_list_get_at (list1, 0) == obj); + ASSERT (gl_list_get_at (list2, 0) == obj); + } + break; + case 4: /* add 1 element */ + { + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2; + node1 = gl_list_add_last (list1, obj); + node2 = gl_list_add_last (list2, obj); + ASSERT (gl_list_node_value (list1, node1) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); + ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); + } + break; + case 5: /* add 3 elements */ + { + const char *obj0 = RANDOM_OBJECT (); + const char *obj1 = RANDOM_OBJECT (); + const char *obj2 = RANDOM_OBJECT (); + gl_list_node_t node1, node2; + node1 = gl_list_add_first (list1, obj2); + node1 = gl_list_add_before (list1, node1, obj0); + node1 = gl_list_add_after (list1, node1, obj1); + node2 = gl_list_add_first (list2, obj2); + node2 = gl_list_add_before (list2, node2, obj0); + node2 = gl_list_add_after (list2, node2, obj1); + ASSERT (gl_list_node_value (list1, node1) == obj1); + ASSERT (gl_list_node_value (list2, node2) == obj1); + ASSERT (gl_list_get_at (list1, 0) == obj0); + ASSERT (gl_list_get_at (list1, 1) == obj1); + ASSERT (gl_list_get_at (list1, 2) == obj2); + ASSERT (gl_list_get_at (list2, 0) == obj0); + ASSERT (gl_list_get_at (list2, 1) == obj1); + ASSERT (gl_list_get_at (list2, 2) == obj2); + } + break; + case 6: /* add 1 element */ + { + size_t index = RANDOM (gl_list_size (list1) + 1); + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2; + node1 = gl_list_add_at (list1, index, obj); + node2 = gl_list_add_at (list2, index, obj); + ASSERT (gl_list_get_at (list1, index) == obj); + ASSERT (gl_list_node_value (list1, node1) == obj); + ASSERT (gl_list_get_at (list2, index) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + if (index > 0) + { + ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) + == gl_list_get_at (list1, index - 1)); + } + if (index + 1 < gl_list_size (list1)) + { + ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) + == gl_list_get_at (list1, index + 1)); + } + } + break; + case 7: case 8: /* remove 1 element */ + if (gl_list_size (list1) > 0) + { + size_t n = gl_list_size (list1); + const char *obj = gl_list_get_at (list1, RANDOM (n)); + gl_list_node_t node1, node2; + node1 = gl_list_search (list1, obj); + node2 = gl_list_search (list2, obj); + ASSERT (node1 != NULL); + ASSERT (node2 != NULL); + ASSERT (gl_list_remove_node (list1, node1)); + ASSERT (gl_list_remove_node (list2, node2)); + ASSERT (gl_list_size (list1) == n - 1); + } + break; + case 9: case 10: /* remove 1 element */ + if (gl_list_size (list1) > 0) + { + size_t n = gl_list_size (list1); + size_t index = RANDOM (n); + ASSERT (gl_list_remove_at (list1, index)); + ASSERT (gl_list_remove_at (list2, index)); + ASSERT (gl_list_size (list1) == n - 1); + } + break; + case 11: case 12: /* remove 1 element */ + if (gl_list_size (list1) > 0) + { + size_t n = gl_list_size (list1); + const char *obj = gl_list_get_at (list1, RANDOM (n)); + ASSERT (gl_list_remove (list1, obj)); + ASSERT (gl_list_remove (list2, obj)); + ASSERT (gl_list_size (list1) == n - 1); + } + break; + case 13: + if (gl_list_size (list1) > 0) + { + size_t n = gl_list_size (list1); + const char *obj = "xyzzy"; + ASSERT (!gl_list_remove (list1, obj)); + ASSERT (!gl_list_remove (list2, obj)); + ASSERT (gl_list_size (list1) == n); + } + break; + case 14: + { + size_t n = gl_list_size (list1); + gl_list_iterator_t iter1, iter2; + const void *elt; + iter1 = gl_list_iterator (list1); + iter2 = gl_list_iterator (list2); + for (i = 0; i < n; i++) + { + ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); + ASSERT (gl_list_get_at (list1, i) == elt); + ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); + ASSERT (gl_list_get_at (list2, i) == elt); + } + ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); + ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); + gl_list_iterator_free (&iter1); + gl_list_iterator_free (&iter2); + } + break; + case 15: + { + size_t end = RANDOM (gl_list_size (list1) + 1); + size_t start = RANDOM (end + 1); + gl_list_iterator_t iter1, iter2; + const void *elt; + iter1 = gl_list_iterator_from_to (list1, start, end); + iter2 = gl_list_iterator_from_to (list2, start, end); + for (i = start; i < end; i++) + { + ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); + ASSERT (gl_list_get_at (list1, i) == elt); + ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); + ASSERT (gl_list_get_at (list2, i) == elt); + } + ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); + ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); + gl_list_iterator_free (&iter1); + gl_list_iterator_free (&iter2); + } + break; + } + check_equals (list1, list2); + } + + gl_list_free (list1); + gl_list_free (list2); + free (contents); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-array_oset.c b/coreseek/m4-1.4.13/tests/test-array_oset.c new file mode 100644 index 0000000..5aba7e0 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-array_oset.c @@ -0,0 +1,154 @@ +/* Test of ordered set data type implementation. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "gl_array_oset.h" + +#include +#include +#include + +#include "gl_array_list.h" +#include "progname.h" + +static const char *objects[30] = + { + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", + "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" + }; + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define RANDOM(n) (rand () % (n)) +#define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] + +static void +check_equals (gl_oset_t set1, gl_list_t set2) +{ + size_t n = gl_oset_size (set1); + gl_oset_iterator_t iter1; + gl_list_iterator_t iter2; + const void *elt1; + const void *elt2; + gl_list_node_t node2; + size_t i; + + iter1 = gl_oset_iterator (set1); + iter2 = gl_list_iterator (set2); + for (i = 0; i < n; i++) + { + ASSERT (gl_oset_iterator_next (&iter1, &elt1)); + ASSERT (gl_list_iterator_next (&iter2, &elt2, &node2)); + ASSERT (elt1 == elt2); + } + ASSERT (!gl_oset_iterator_next (&iter1, &elt1)); + ASSERT (!gl_list_iterator_next (&iter2, &elt2, &node2)); + gl_oset_iterator_free (&iter1); + gl_list_iterator_free (&iter2); +} + +static void +check_all (gl_oset_t set1, gl_list_t set2) +{ + check_equals (set1, set2); +} + +int +main (int argc, char *argv[]) +{ + gl_oset_t set1; + gl_list_t set2; + + set_program_name (argv[0]); + + /* Allow the user to provide a non-default random seed on the command line. */ + if (argc > 1) + srand (atoi (argv[1])); + + { + size_t initial_size = RANDOM (20); + size_t i; + unsigned int repeat; + + /* Create set1. */ + set1 = gl_oset_create_empty (GL_ARRAY_OSET, (gl_setelement_compar_fn) strcmp, NULL); + + /* Create set2. */ + set2 = gl_list_create_empty (GL_ARRAY_LIST, NULL, NULL, NULL, false); + + check_all (set1, set2); + + /* Initialize them. */ + for (i = 0; i < initial_size; i++) + { + const char *obj = RANDOM_OBJECT (); + ASSERT (gl_oset_add (set1, obj) + == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL + ? false + : (gl_sortedlist_add (set2, (gl_listelement_compar_fn)strcmp, obj), true))); + check_all (set1, set2); + } + + for (repeat = 0; repeat < 100000; repeat++) + { + unsigned int operation = RANDOM (3); + switch (operation) + { + case 0: + { + const char *obj = RANDOM_OBJECT (); + ASSERT (gl_oset_search (set1, obj) + == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL)); + } + break; + case 1: + { + const char *obj = RANDOM_OBJECT (); + ASSERT (gl_oset_add (set1, obj) + == (gl_sortedlist_search (set2, (gl_listelement_compar_fn)strcmp, obj) != NULL + ? false + : (gl_sortedlist_add (set2, (gl_listelement_compar_fn)strcmp, obj), true))); + } + break; + case 2: + { + const char *obj = RANDOM_OBJECT (); + ASSERT (gl_oset_remove (set1, obj) + == gl_sortedlist_remove (set2, (gl_listelement_compar_fn)strcmp, obj)); + } + break; + } + check_all (set1, set2); + } + + gl_oset_free (set1); + gl_list_free (set2); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-avltree_oset.c b/coreseek/m4-1.4.13/tests/test-avltree_oset.c new file mode 100644 index 0000000..3bdf0aa --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-avltree_oset.c @@ -0,0 +1,146 @@ +/* Test of ordered set data type implementation. + Copyright (C) 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "gl_avltree_oset.h" + +#include +#include +#include + +#include "gl_array_oset.h" +#include "progname.h" + +extern void gl_avltree_oset_check_invariants (gl_oset_t set); + +static const char *objects[30] = + { + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", + "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "<", ">", "[", "]" + }; + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define RANDOM(n) (rand () % (n)) +#define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] + +static void +check_equals (gl_oset_t set1, gl_oset_t set2) +{ + size_t n = gl_oset_size (set1); + gl_oset_iterator_t iter1, iter2; + const void *elt1; + const void *elt2; + size_t i; + + iter1 = gl_oset_iterator (set1); + iter2 = gl_oset_iterator (set2); + for (i = 0; i < n; i++) + { + ASSERT (gl_oset_iterator_next (&iter1, &elt1)); + ASSERT (gl_oset_iterator_next (&iter2, &elt2)); + ASSERT (elt1 == elt2); + } + ASSERT (!gl_oset_iterator_next (&iter1, &elt1)); + ASSERT (!gl_oset_iterator_next (&iter2, &elt2)); + gl_oset_iterator_free (&iter1); + gl_oset_iterator_free (&iter2); +} + +static void +check_all (gl_oset_t set1, gl_oset_t set2) +{ + gl_avltree_oset_check_invariants (set2); + check_equals (set1, set2); +} + +int +main (int argc, char *argv[]) +{ + gl_oset_t set1, set2; + + set_program_name (argv[0]); + + /* Allow the user to provide a non-default random seed on the command line. */ + if (argc > 1) + srand (atoi (argv[1])); + + { + size_t initial_size = RANDOM (20); + size_t i; + unsigned int repeat; + + /* Create set1. */ + set1 = gl_oset_create_empty (GL_ARRAY_OSET, (gl_setelement_compar_fn) strcmp, NULL); + + /* Create set2. */ + set2 = gl_oset_create_empty (GL_AVLTREE_OSET, (gl_setelement_compar_fn) strcmp, NULL); + + check_all (set1, set2); + + /* Initialize them. */ + for (i = 0; i < initial_size; i++) + { + const char *obj = RANDOM_OBJECT (); + ASSERT (gl_oset_add (set1, obj) == gl_oset_add (set2, obj)); + check_all (set1, set2); + } + + for (repeat = 0; repeat < 100000; repeat++) + { + unsigned int operation = RANDOM (3); + switch (operation) + { + case 0: + { + const char *obj = RANDOM_OBJECT (); + ASSERT (gl_oset_search (set1, obj) == gl_oset_search (set2, obj)); + } + break; + case 1: + { + const char *obj = RANDOM_OBJECT (); + ASSERT (gl_oset_add (set1, obj) == gl_oset_add (set2, obj)); + } + break; + case 2: + { + const char *obj = RANDOM_OBJECT (); + ASSERT (gl_oset_remove (set1, obj) == gl_oset_remove (set2, obj)); + } + break; + } + check_all (set1, set2); + } + + gl_oset_free (set1); + gl_oset_free (set2); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-binary-io.c b/coreseek/m4-1.4.13/tests/test-binary-io.c new file mode 100644 index 0000000..7e35108 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-binary-io.c @@ -0,0 +1,74 @@ +/* Test of binary mode I/O. + Copyright (C) 2005, 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +#include + +#include "binary-io.h" + +#include +#include +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test the O_BINARY macro. */ + { + int fd = + open ("t-bin-out2.tmp", O_CREAT | O_TRUNC | O_RDWR | O_BINARY, 0600); + if (write (fd, "Hello\n", 6) < 0) + exit (1); + close (fd); + } + { + struct stat statbuf; + if (stat ("t-bin-out2.tmp", &statbuf) < 0) + exit (1); + ASSERT (statbuf.st_size == 6); + } + unlink ("t-bin-out2.tmp"); + + /* Test the SET_BINARY macro. */ + SET_BINARY (1); + fputs ("Hello\n", stdout); + fclose (stdout); + fclose (stderr); + { + struct stat statbuf; + if (stat ("t-bin-out1.tmp", &statbuf) < 0) + exit (1); + ASSERT (statbuf.st_size == 6); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-binary-io.sh b/coreseek/m4-1.4.13/tests/test-binary-io.sh new file mode 100755 index 0000000..33e128c --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-binary-io.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles t-bin-out1.tmp t-bin-out2.tmp" +./test-binary-io${EXEEXT} > t-bin-out1.tmp || exit 1 + +rm -fr $tmpfiles + +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-btowc.c b/coreseek/m4-1.4.13/tests/test-btowc.c new file mode 100644 index 0000000..ce9cfea --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-btowc.c @@ -0,0 +1,71 @@ +/* Test of conversion of unibyte character to wide character. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + int c; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + ASSERT (btowc (EOF) == WEOF); + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + for (c = 0; c < 0x80; c++) + ASSERT (btowc (c) == c); + for (c = 0xA0; c < 0x100; c++) + ASSERT (btowc (c) != WEOF); + return 0; + + case '2': + /* Locale encoding is UTF-8. */ + for (c = 0; c < 0x80; c++) + ASSERT (btowc (c) == c); + for (c = 0x80; c < 0x100; c++) + ASSERT (btowc (c) == WEOF); + return 0; + } + + return 1; +} diff --git a/coreseek/m4-1.4.13/tests/test-btowc1.sh b/coreseek/m4-1.4.13/tests/test-btowc1.sh new file mode 100755 index 0000000..aaef48d --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-btowc1.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-btowc${EXEEXT} 1 diff --git a/coreseek/m4-1.4.13/tests/test-btowc2.sh b/coreseek/m4-1.4.13/tests/test-btowc2.sh new file mode 100755 index 0000000..2e06038 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-btowc2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-btowc${EXEEXT} 2 diff --git a/coreseek/m4-1.4.13/tests/test-c-ctype.c b/coreseek/m4-1.4.13/tests/test-c-ctype.c new file mode 100644 index 0000000..6d7fe1b --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-c-ctype.c @@ -0,0 +1,398 @@ +/* Test of character handling in C locale. + Copyright (C) 2005, 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +#include + +#include "c-ctype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_all (void) +{ + int c; + + for (c = -0x80; c < 0x100; c++) + { + ASSERT (c_isascii (c) == (c >= 0 && c < 0x80)); + + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + ASSERT (c_isalnum (c) == 1); + break; + default: + ASSERT (c_isalnum (c) == 0); + break; + } + + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + ASSERT (c_isalpha (c) == 1); + break; + default: + ASSERT (c_isalpha (c) == 0); + break; + } + + switch (c) + { + case '\t': case ' ': + ASSERT (c_isblank (c) == 1); + break; + default: + ASSERT (c_isblank (c) == 0); + break; + } + + ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f)); + + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + ASSERT (c_isdigit (c) == 1); + break; + default: + ASSERT (c_isdigit (c) == 0); + break; + } + + switch (c) + { + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + ASSERT (c_islower (c) == 1); + break; + default: + ASSERT (c_islower (c) == 0); + break; + } + + ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' ')); + + ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f)); + + ASSERT (c_ispunct (c) == (c_isgraph (c) && !c_isalnum (c))); + + switch (c) + { + case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': + ASSERT (c_isspace (c) == 1); + break; + default: + ASSERT (c_isspace (c) == 0); + break; + } + + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + ASSERT (c_isupper (c) == 1); + break; + default: + ASSERT (c_isupper (c) == 0); + break; + } + + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + ASSERT (c_isxdigit (c) == 1); + break; + default: + ASSERT (c_isxdigit (c) == 0); + break; + } + + switch (c) + { + case 'A': + ASSERT (c_tolower (c) == 'a'); + ASSERT (c_toupper (c) == c); + break; + case 'B': + ASSERT (c_tolower (c) == 'b'); + ASSERT (c_toupper (c) == c); + break; + case 'C': + ASSERT (c_tolower (c) == 'c'); + ASSERT (c_toupper (c) == c); + break; + case 'D': + ASSERT (c_tolower (c) == 'd'); + ASSERT (c_toupper (c) == c); + break; + case 'E': + ASSERT (c_tolower (c) == 'e'); + ASSERT (c_toupper (c) == c); + break; + case 'F': + ASSERT (c_tolower (c) == 'f'); + ASSERT (c_toupper (c) == c); + break; + case 'G': + ASSERT (c_tolower (c) == 'g'); + ASSERT (c_toupper (c) == c); + break; + case 'H': + ASSERT (c_tolower (c) == 'h'); + ASSERT (c_toupper (c) == c); + break; + case 'I': + ASSERT (c_tolower (c) == 'i'); + ASSERT (c_toupper (c) == c); + break; + case 'J': + ASSERT (c_tolower (c) == 'j'); + ASSERT (c_toupper (c) == c); + break; + case 'K': + ASSERT (c_tolower (c) == 'k'); + ASSERT (c_toupper (c) == c); + break; + case 'L': + ASSERT (c_tolower (c) == 'l'); + ASSERT (c_toupper (c) == c); + break; + case 'M': + ASSERT (c_tolower (c) == 'm'); + ASSERT (c_toupper (c) == c); + break; + case 'N': + ASSERT (c_tolower (c) == 'n'); + ASSERT (c_toupper (c) == c); + break; + case 'O': + ASSERT (c_tolower (c) == 'o'); + ASSERT (c_toupper (c) == c); + break; + case 'P': + ASSERT (c_tolower (c) == 'p'); + ASSERT (c_toupper (c) == c); + break; + case 'Q': + ASSERT (c_tolower (c) == 'q'); + ASSERT (c_toupper (c) == c); + break; + case 'R': + ASSERT (c_tolower (c) == 'r'); + ASSERT (c_toupper (c) == c); + break; + case 'S': + ASSERT (c_tolower (c) == 's'); + ASSERT (c_toupper (c) == c); + break; + case 'T': + ASSERT (c_tolower (c) == 't'); + ASSERT (c_toupper (c) == c); + break; + case 'U': + ASSERT (c_tolower (c) == 'u'); + ASSERT (c_toupper (c) == c); + break; + case 'V': + ASSERT (c_tolower (c) == 'v'); + ASSERT (c_toupper (c) == c); + break; + case 'W': + ASSERT (c_tolower (c) == 'w'); + ASSERT (c_toupper (c) == c); + break; + case 'X': + ASSERT (c_tolower (c) == 'x'); + ASSERT (c_toupper (c) == c); + break; + case 'Y': + ASSERT (c_tolower (c) == 'y'); + ASSERT (c_toupper (c) == c); + break; + case 'Z': + ASSERT (c_tolower (c) == 'z'); + ASSERT (c_toupper (c) == c); + break; + case 'a': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'A'); + break; + case 'b': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'B'); + break; + case 'c': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'C'); + break; + case 'd': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'D'); + break; + case 'e': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'E'); + break; + case 'f': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'F'); + break; + case 'g': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'G'); + break; + case 'h': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'H'); + break; + case 'i': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'I'); + break; + case 'j': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'J'); + break; + case 'k': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'K'); + break; + case 'l': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'L'); + break; + case 'm': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'M'); + break; + case 'n': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'N'); + break; + case 'o': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'O'); + break; + case 'p': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'P'); + break; + case 'q': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Q'); + break; + case 'r': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'R'); + break; + case 's': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'S'); + break; + case 't': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'T'); + break; + case 'u': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'U'); + break; + case 'v': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'V'); + break; + case 'w': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'W'); + break; + case 'x': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'X'); + break; + case 'y': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Y'); + break; + case 'z': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Z'); + break; + default: + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == c); + break; + } + } +} + +int +main () +{ + test_all (); + + setlocale (LC_ALL, "de_DE"); + test_all (); + + setlocale (LC_ALL, "ja_JP.EUC-JP"); + test_all (); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-c-stack.c b/coreseek/m4-1.4.13/tests/test-c-stack.c new file mode 100644 index 0000000..96ab152 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-c-stack.c @@ -0,0 +1,87 @@ +/* Test of c-stack module. + Copyright (C) 2002, 2004, 2006, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "c-stack.h" + +#include "exitfail.h" +#include +#include +#if HAVE_SETRLIMIT +/* At least FreeBSD 5.0 needs extra headers before + will compile. */ +# include +# include +# include +#endif + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +char *program_name; + +static volatile int * +recurse_1 (volatile int n, volatile int *p) +{ + if (n >= 0) + *recurse_1 (n + 1, p) += n; + return p; +} + +static int +recurse (volatile int n) +{ + int sum = 0; + return *recurse_1 (n, &sum); +} + +int +main (int argc, char **argv) +{ +#if HAVE_SETRLIMIT && defined RLIMIT_STACK + /* Before starting the endless recursion, try to be friendly to the + user's machine. On some Linux 2.2.x systems, there is no stack + limit for user processes at all. We don't want to kill such + systems. */ + struct rlimit rl; + rl.rlim_cur = rl.rlim_max = 0x100000; /* 1 MB */ + setrlimit (RLIMIT_STACK, &rl); +#endif + + program_name = argv[0]; + if (c_stack_action (0) == 0) + { + if (1 < argc) + { + exit_failure = 77; + ++*argv[argc]; /* Intentionally dereference NULL. */ + } + return recurse (0); + } + fputs ("skipping test: ", stderr); + perror ("c_stack_action"); + return 77; +} diff --git a/coreseek/m4-1.4.13/tests/test-c-stack.sh b/coreseek/m4-1.4.13/tests/test-c-stack.sh new file mode 100755 index 0000000..f979065 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-c-stack.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="t-c-stack.tmp" +./test-c-stack${EXEEXT} 2> t-c-stack.tmp +case $? in + 77) cat t-c-stack.tmp >&2; (exit 77); exit 77 ;; + 1) ;; + *) (exit 1); exit 1 ;; +esac +if grep 'stack overflow' t-c-stack.tmp >/dev/null ; then + : +else + (exit 1); exit 1 +fi + +rm -fr $tmpfiles + +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-c-stack2.sh b/coreseek/m4-1.4.13/tests/test-c-stack2.sh new file mode 100755 index 0000000..a80373d --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-c-stack2.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="t-c-stack2.tmp" + +# Sanitize exit status within a subshell, since some shells fail to +# redirect stderr on their message about death due to signal. +(./test-c-stack${EXEEXT} 1; exit $?) 2> t-c-stack2.tmp + +case $? in + 77) if grep 'stack overflow' t-c-stack2.tmp >/dev/null ; then + if test -z "$LIBSIGSEGV"; then + echo 'cannot tell stack overflow from crash; consider installing libsigsegv' >&2 + exit 77 + else + echo 'cannot tell stack overflow from crash, in spite of libsigsegv' >&2 + exit 1 + fi + else + cat t-c-stack2.tmp >&2 + exit 77 + fi + ;; + 0) (exit 1); exit 1 ;; +esac +if grep 'program error' t-c-stack2.tmp >/dev/null ; then + : +else + (exit 1); exit 1 +fi + +rm -fr $tmpfiles + +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-closein.c b/coreseek/m4-1.4.13/tests/test-closein.c new file mode 100644 index 0000000..57d968b --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-closein.c @@ -0,0 +1,52 @@ +/* Test of closein module. + Copyright (C) 2007, 2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake. */ + +#include + +#include "closein.h" + +#include +#include +#include + +#include "binary-io.h" + +char *program_name; + +/* With no arguments, do nothing. With arguments, attempt to consume + first 6 bytes of stdin. In either case, let exit() take care of + closing std streams and changing exit status if ferror(stdin). */ +int +main (int argc, char **argv) +{ + char buf[7]; + atexit (close_stdin); + program_name = argv[0]; + + /* close_stdin currently relies on ftell, but mingw ftell is + unreliable on text mode input. */ + SET_BINARY (0); + + if (argc > 2) + close (0); + + if (argc > 1) + fread (buf, 1, 6, stdin); + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-closein.sh b/coreseek/m4-1.4.13/tests/test-closein.sh new file mode 100755 index 0000000..a75929a --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-closein.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +tmpfiles= +trap 'rm -fr $tmpfiles' 1 2 3 15 + +p=t-closein- +tmpfiles="${p}in.tmp ${p}xout.tmp ${p}out1.tmp ${p}out2.tmp" + +echo Hello world > ${p}in.tmp +echo world > ${p}xout.tmp + +# Test with seekable stdin; followon process must see remaining data +(./test-closein${EXEEXT}; cat) < ${p}in.tmp > ${p}out1.tmp || exit 1 +cmp ${p}out1.tmp ${p}in.tmp || exit 1 + +(./test-closein${EXEEXT} consume; cat) < ${p}in.tmp > ${p}out2.tmp || exit 1 +cmp ${p}out2.tmp ${p}xout.tmp || exit 1 + +# Test for lack of error on pipe. Ignore any EPIPE failures from cat. +cat ${p}in.tmp 2>/dev/null | ./test-closein${EXEEXT} || exit 1 + +cat ${p}in.tmp 2>/dev/null | ./test-closein${EXEEXT} consume || exit 1 + +# Test for lack of error when nothing is read +./test-closein${EXEEXT} /dev/null && exit 1 + +# Cleanup +rm -fr $tmpfiles + +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-dirname.c b/coreseek/m4-1.4.13/tests/test-dirname.c new file mode 100644 index 0000000..44898dd --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-dirname.c @@ -0,0 +1,193 @@ +/* Test the gnulib dirname module. + Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "dirname.h" + +#include +#include +#include +#include + +const char *program_name = "test-dirname"; + +struct test { + const char *name; /* Name under test. */ + const char *dir; /* dir_name (name). */ + const char *last; /* last_component (name). */ + const char *base; /* base_name (name). */ + const char *stripped; /* name after strip_trailing_slashes (name). */ + bool modified; /* result of strip_trailing_slashes (name). */ + bool absolute; /* IS_ABSOLUTE_FILE_NAME (name). */ +}; + +static struct test tests[] = { + {"d/f", "d", "f", "f", "d/f", false, false}, + {"/d/f", "/d", "f", "f", "/d/f", false, true}, + {"d/f/", "d", "f/", "f/", "d/f", true, false}, + {"d/f//", "d", "f//", "f/", "d/f", true, false}, + {"f", ".", "f", "f", "f", false, false}, + {"/", "/", "", "/", "/", false, true}, +#if DOUBLE_SLASH_IS_DISTINCT_ROOT + {"//", "//", "", "//", "//", false, true}, + {"//d", "//", "d", "d", "//d", false, true}, +#else + {"//", "/", "", "/", "/", true, true}, + {"//d", "/", "d", "d", "//d", false, true}, +#endif + {"///", "/", "", "/", "/", true, true}, + {"///a///", "/", "a///", "a/", "///a", true, true}, + /* POSIX requires dirname("") and basename("") to both return ".", + but dir_name and base_name are defined differently. */ + {"", ".", "", "", "", false, false}, + {".", ".", ".", ".", ".", false, false}, + {"..", ".", "..", "..", "..", false, false}, +#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR + {"a\\", ".", "a\\", "a\\", "a", true, false}, + {"a\\b", "a", "b", "b", "a\\b", false, false}, + {"\\", "\\", "", "\\", "\\", false, true}, + {"\\/\\", "\\", "", "\\", "\\", true, true}, + {"\\\\/", "\\", "", "\\", "\\", true, true}, + {"\\//", "\\", "", "\\", "\\", true, true}, + {"//\\", "/", "", "/", "/", true, true}, +#else + {"a\\", ".", "a\\", "a\\", "a\\", false, false}, + {"a\\b", ".", "a\\b", "a\\b", "a\\b", false, false}, + {"\\", ".", "\\", "\\", "\\", false, false}, + {"\\/\\", "\\", "\\", "\\", "\\/\\",false, false}, + {"\\\\/", ".", "\\\\/","\\\\/","\\\\", true, false}, + {"\\//", ".", "\\//", "\\/", "\\", true, false}, +# if DOUBLE_SLASH_IS_DISTINCT_ROOT + {"//\\", "//", "\\", "\\", "//\\", false, true}, +# else + {"//\\", "/", "\\", "\\", "//\\", false, true}, +# endif +#endif +#if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX +# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE + {"c:", "c:", "", "c:", "c:", false, false}, + {"c:/", "c:/", "", "c:/", "c:/", false, true}, + {"c://", "c:/", "", "c:/", "c:/", true, true}, + {"c:/d", "c:/", "d", "d", "c:/d", false, true}, + {"c://d", "c:/", "d", "d", "c://d",false, true}, + {"c:/d/", "c:/", "d/", "d/", "c:/d", true, true}, + {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, true}, + {"c:d", "c:.", "d", "d", "c:d", false, false}, + {"c:d/", "c:.", "d/", "d/", "c:d", true, false}, + {"c:d/f", "c:d", "f", "f", "c:d/f",false, false}, + {"a:b:c", "a:.", "b:c", "./b:c","a:b:c",false, false}, + {"a/b:c", "a", "b:c", "./b:c","a/b:c",false, false}, + {"a/b:c/", "a", "b:c/", "./b:c/","a/b:c",true, false}, +# else /* ! FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE */ + {"c:", "c:", "", "c:", "c:", false, true}, + {"c:/", "c:", "", "c:", "c:", true, true}, + {"c://", "c:", "", "c:", "c:", true, true}, + {"c:/d", "c:", "d", "d", "c:/d", false, true}, + {"c://d", "c:", "d", "d", "c://d",false, true}, + {"c:/d/", "c:", "d/", "d/", "c:/d", true, true}, + {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, true}, + {"c:d", "c:", "d", "d", "c:d", false, true}, + {"c:d/", "c:", "d/", "d/", "c:d", true, true}, + {"c:d/f", "c:d", "f", "f", "c:d/f",false, true}, + {"a:b:c", "a:", "b:c", "./b:c","a:b:c",false, true}, + {"a/b:c", "a", "b:c", "./b:c","a/b:c",false, false}, + {"a/b:c/", "a", "b:c/", "./b:c/","a/b:c",true, false}, +# endif +#else /* ! FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX */ + {"c:", ".", "c:", "c:", "c:", false, false}, + {"c:/", ".", "c:/", "c:/", "c:", true, false}, + {"c://", ".", "c://", "c:/", "c:", true, false}, + {"c:/d", "c:", "d", "d", "c:/d", false, false}, + {"c://d", "c:", "d", "d", "c://d",false, false}, + {"c:/d/", "c:", "d/", "d/", "c:/d", true, false}, + {"c:/d/f", "c:/d", "f", "f", "c:/d/f",false, false}, + {"c:d", ".", "c:d", "c:d", "c:d", false, false}, + {"c:d/", ".", "c:d/", "c:d/", "c:d", true, false}, + {"c:d/f", "c:d", "f", "f", "c:d/f",false, false}, + {"a:b:c", ".", "a:b:c","a:b:c","a:b:c",false, false}, + {"a/b:c", "a", "b:c", "b:c", "a/b:c",false, false}, + {"a/b:c/", "a", "b:c/", "b:c/", "a/b:c",true, false}, +#endif + {"1:", ".", "1:", "1:", "1:", false, false}, + {"1:/", ".", "1:/", "1:/", "1:", true, false}, + {"/:", "/", ":", ":", "/:", false, true}, + {"/:/", "/", ":/", ":/", "/:", true, true}, + /* End sentinel. */ + {NULL, NULL, NULL, NULL, NULL, false, false} +}; + +int +main () +{ + struct test *t; + bool ok = true; + + for (t = tests; t->name; t++) + { + char *dir = dir_name (t->name); + int dirlen = dir_len (t->name); + char *last = last_component (t->name); + char *base = base_name (t->name); + int baselen = base_len (base); + char *stripped = strdup (t->name); + bool modified = strip_trailing_slashes (stripped); + bool absolute = IS_ABSOLUTE_FILE_NAME (t->name); + if (! (strcmp (dir, t->dir) == 0 + && (dirlen == strlen (dir) + || (dirlen + 1 == strlen (dir) && dir[dirlen] == '.')))) + { + ok = false; + printf ("dir_name `%s': got `%s' len %d, expected `%s' len %ld\n", + t->name, dir, dirlen, + t->dir, (unsigned long) strlen (t->dir)); + } + if (strcmp (last, t->last)) + { + ok = false; + printf ("last_component `%s': got `%s', expected `%s'\n", + t->name, last, t->last); + } + if (! (strcmp (base, t->base) == 0 + && (baselen == strlen (base) + || (baselen + 1 == strlen (base) + && ISSLASH (base[baselen]))))) + { + ok = false; + printf ("base_name `%s': got `%s' len %d, expected `%s' len %ld\n", + t->name, base, baselen, + t->base, (unsigned long) strlen (t->base)); + } + if (strcmp (stripped, t->stripped) || modified != t->modified) + { + ok = false; + printf ("strip_trailing_slashes `%s': got %s %s, expected %s %s\n", + t->name, stripped, modified ? "changed" : "unchanged", + t->stripped, t->modified ? "changed" : "unchanged"); + } + if (t->absolute != absolute) + { + ok = false; + printf ("`%s': got %s, expected %s\n", t->name, + absolute ? "absolute" : "relative", + t->absolute ? "absolute" : "relative"); + } + free (dir); + free (base); + free (stripped); + } + return ok ? 0 : 1; +} diff --git a/coreseek/m4-1.4.13/tests/test-environ.c b/coreseek/m4-1.4.13/tests/test-environ.c new file mode 100644 index 0000000..d9501bb --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-environ.c @@ -0,0 +1,44 @@ +/* Test of environ variable. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include + +int +main () +{ + /* The environment variables that are set even in the weirdest situations + are HOME and PATH. + POSIX says that HOME is initialized by the system, and that PATH may be + unset. But in practice it's more frequent to see HOME unset and PATH + set. So we test the presence of PATH. */ + char **remaining_variables = environ; + char *string; + + for (; (string = *remaining_variables) != NULL; remaining_variables++) + { + if (strncmp (string, "PATH=", 5) == 0) + /* Found the PATH environment variable. */ + return 0; + } + /* Failed to find the PATH environment variable. */ + return 1; +} diff --git a/coreseek/m4-1.4.13/tests/test-errno.c b/coreseek/m4-1.4.13/tests/test-errno.c new file mode 100644 index 0000000..4642027 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-errno.c @@ -0,0 +1,117 @@ +/* Test of substitute. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +/* Verify that the POSIX mandated errno values exist and can be used as + initializers outside of a function. + The variable names happen to match the Linux/x86 error numbers. */ +int e1 = EPERM; +int e2 = ENOENT; +int e3 = ESRCH; +int e4 = EINTR; +int e5 = EIO; +int e6 = ENXIO; +int e7 = E2BIG; +int e8 = ENOEXEC; +int e9 = EBADF; +int e10 = ECHILD; +int e11 = EAGAIN; +int e11a = EWOULDBLOCK; +int e12 = ENOMEM; +int e13 = EACCES; +int e14 = EFAULT; +int e16 = EBUSY; +int e17 = EEXIST; +int e18 = EXDEV; +int e19 = ENODEV; +int e20 = ENOTDIR; +int e21 = EISDIR; +int e22 = EINVAL; +int e23 = ENFILE; +int e24 = EMFILE; +int e25 = ENOTTY; +int e26 = ETXTBSY; +int e27 = EFBIG; +int e28 = ENOSPC; +int e29 = ESPIPE; +int e30 = EROFS; +int e31 = EMLINK; +int e32 = EPIPE; +int e33 = EDOM; +int e34 = ERANGE; +int e35 = EDEADLK; +int e36 = ENAMETOOLONG; +int e37 = ENOLCK; +int e38 = ENOSYS; +int e39 = ENOTEMPTY; +int e40 = ELOOP; +int e42 = ENOMSG; +int e43 = EIDRM; +int e67 = ENOLINK; +int e71 = EPROTO; +int e72 = EMULTIHOP; +int e74 = EBADMSG; +int e75 = EOVERFLOW; +int e84 = EILSEQ; +int e88 = ENOTSOCK; +int e89 = EDESTADDRREQ; +int e90 = EMSGSIZE; +int e91 = EPROTOTYPE; +int e92 = ENOPROTOOPT; +int e93 = EPROTONOSUPPORT; +int e95 = EOPNOTSUPP; +int e95a = ENOTSUP; +int e97 = EAFNOSUPPORT; +int e98 = EADDRINUSE; +int e99 = EADDRNOTAVAIL; +int e100 = ENETDOWN; +int e101 = ENETUNREACH; +int e102 = ENETRESET; +int e103 = ECONNABORTED; +int e104 = ECONNRESET; +int e105 = ENOBUFS; +int e106 = EISCONN; +int e107 = ENOTCONN; +int e110 = ETIMEDOUT; +int e111 = ECONNREFUSED; +int e113 = EHOSTUNREACH; +int e114 = EALREADY; +int e115 = EINPROGRESS; +int e116 = ESTALE; +int e122 = EDQUOT; +int e125 = ECANCELED; + +/* Don't verify that these errno values are all different, except for possibly + EWOULDBLOCK == EAGAIN. Even Linux/x86 does not pass this check: it has + ENOTSUP == EOPNOTSUPP. */ + +int +main () +{ + /* Verify that errno can be assigned. */ + errno = EOVERFLOW; + + /* snprintf() callers want to distinguish EINVAL and EOVERFLOW. */ + if (errno == EINVAL) + return 1; + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-fcntl.c b/coreseek/m4-1.4.13/tests/test-fcntl.c new file mode 100644 index 0000000..449984c --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fcntl.c @@ -0,0 +1,35 @@ +/* Test of substitute. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +/* Check that the various O_* macros are defined. */ +int o = O_DIRECT | O_DIRECTORY | O_DSYNC | O_NDELAY | O_NOATIME | O_NONBLOCK + | O_NOCTTY | O_NOFOLLOW | O_NOLINKS | O_RSYNC | O_SYNC + | O_BINARY | O_TEXT; + +/* Check that the various SEEK_* macros are defined. */ +int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-fflush.c b/coreseek/m4-1.4.13/tests/test-fflush.c new file mode 100644 index 0000000..6f369f0 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fflush.c @@ -0,0 +1,138 @@ +/* Test of POSIX compatible fflush() function. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake, 2007. */ + +#include + +#include +#include + +int +main (int argc, char *argv[]) +{ + FILE *f; + char buffer[10]; + int fd; + + /* Create test file. */ + f = fopen ("test-fflush.txt", "w"); + if (!f || fwrite ("1234567890ABCDEFG", 1, 17, f) != 17 || fclose (f) != 0) + { + fputs ("Failed to create sample file.\n", stderr); + unlink ("test-fflush.txt"); + return 1; + } + + /* Test fflush. */ + f = fopen ("test-fflush.txt", "r"); + fd = fileno (f); + if (!f || 0 > fd || fread (buffer, 1, 5, f) != 5) + { + fputs ("Failed initial read of sample file.\n", stderr); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + /* For deterministic results, ensure f read a bigger buffer. + This is not the case on BeOS, nor on uClibc. */ +#if !(defined __BEOS__ || defined __UCLIBC__) + if (lseek (fd, 0, SEEK_CUR) == 5) + { + fputs ("Sample file was not buffered after fread.\n", stderr); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } +#endif + /* POSIX requires fflush-fseek to set file offset of fd. */ + if (fflush (f) != 0 || fseek (f, 0, SEEK_CUR) != 0) + { + fputs ("Failed to flush-fseek sample file.\n", stderr); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + /* Check that offset is correct. */ + if (lseek (fd, 0, SEEK_CUR) != 5) + { + fprintf (stderr, "File offset is wrong after fseek: %ld.\n", + (long) lseek (fd, 0, SEEK_CUR)); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + if (ftell (f) != 5) + { + fprintf (stderr, "ftell result is wrong after fseek: %ld.\n", + (long) ftell (f)); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + /* Check that file reading resumes at correct location. */ + if (fgetc (f) != '6') + { + fputs ("Failed to read next byte after fseek.\n", stderr); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + /* For deterministic results, ensure f read a bigger buffer. */ + if (lseek (fd, 0, SEEK_CUR) == 6) + { + fputs ("Sample file was not buffered after fgetc.\n", stderr); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + /* POSIX requires fflush-fseeko to set file offset of fd. */ + if (fflush (f) != 0 || fseeko (f, 0, SEEK_CUR) != 0) + { + fputs ("Failed to flush-fseeko sample file.\n", stderr); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + /* Check that offset is correct. */ + if (lseek (fd, 0, SEEK_CUR) != 6) + { + fprintf (stderr, "File offset is wrong after fseeko: %ld.\n", + (long) lseek (fd, 0, SEEK_CUR)); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + if (ftell (f) != 6) + { + fprintf (stderr, "ftell result is wrong after fseeko: %ld.\n", + (long) ftell (f)); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + /* Check that file reading resumes at correct location. */ + if (fgetc (f) != '7') + { + fputs ("Failed to read next byte after fseeko.\n", stderr); + fclose (f); + unlink ("test-fflush.txt"); + return 1; + } + fclose (f); + unlink ("test-fflush.txt"); + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-fflush2.c b/coreseek/m4-1.4.13/tests/test-fflush2.c new file mode 100644 index 0000000..a395c6d --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fflush2.c @@ -0,0 +1,121 @@ +/* Test of POSIX compatible fflush() function. + Copyright (C) 2008-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include + +#include + +#include "binary-io.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char **argv) +{ + int c; + + /* Avoid the well-known bugs of fflush() on streams in O_TEXT mode + on native Windows platforms. */ + SET_BINARY (0); + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Check fflush after a backup ungetc() call. This is case 1a in + terms of + , + according to the Austin Group's resolution on 2009-01-08. */ + + c = fgetc (stdin); + ASSERT (c == '#'); + + c = fgetc (stdin); + ASSERT (c == '!'); + + /* Here the file-position indicator must be 2. */ + + c = ungetc ('!', stdin); + ASSERT (c == '!'); + + fflush (stdin); + + /* Here the file-position indicator must be 1. */ + + c = fgetc (stdin); + ASSERT (c == '!'); + + c = fgetc (stdin); + ASSERT (c == '/'); + + return 0; + + case '2': + /* Check fflush after a non-backup ungetc() call. This is case 2a in + terms of + , + according to the Austin Group's resolution on 2009-01-08. */ + /* Check that fflush after a non-backup ungetc() call discards the + ungetc buffer. This is mandated by POSIX + : + "The value of the file-position indicator for the stream after + reading or discarding all pushed-back bytes shall be the same + as it was before the bytes were pushed back." + + "[After fflush(),] the file offset of the underlying open file + description shall be set to the file position of the stream, and + any characters pushed back onto the stream by ungetc() or + ungetwc() that have not subsequently been read from the stream + shall be discarded." */ + + c = fgetc (stdin); + ASSERT (c == '#'); + + c = fgetc (stdin); + ASSERT (c == '!'); + + /* Here the file-position indicator must be 2. */ + + c = ungetc ('@', stdin); + ASSERT (c == '@'); + + fflush (stdin); + + /* Here the file-position indicator must be 1. */ + + c = fgetc (stdin); + ASSERT (c == '!'); + + c = fgetc (stdin); + ASSERT (c == '/'); + + return 0; + } + + return 1; +} diff --git a/coreseek/m4-1.4.13/tests/test-fflush2.sh b/coreseek/m4-1.4.13/tests/test-fflush2.sh new file mode 100755 index 0000000..ef77fa4 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fflush2.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Execute the test only with seekable input stream. +# The behaviour of fflush() on a non-seekable input stream is undefined. +./test-fflush2${EXEEXT} 1 < "$srcdir/test-fflush2.sh" || exit $? +./test-fflush2${EXEEXT} 2 < "$srcdir/test-fflush2.sh" || exit $? +#cat "$srcdir/test-fflush2.sh" | ./test-fflush2${EXEEXT} || exit $? + +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-filenamecat.c b/coreseek/m4-1.4.13/tests/test-filenamecat.c new file mode 100644 index 0000000..d102ef6 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-filenamecat.c @@ -0,0 +1,66 @@ +/* Test of concatenation of two arbitrary file names. + + Copyright (C) 1996-2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Jim Meyering. */ + +#include + +#include "filenamecat.h" + +#include +#include +#include +#include + +#include "progname.h" + +int +main (int argc, char *argv[]) +{ + static char const *const tests[][3] = + { + {"a", "b", "a/b"}, + {"a/", "b", "a/b"}, + {"a/", "/b", "a/b"}, + {"a", "/b", "a/b"}, + + {"/", "b", "/b"}, + {"/", "/b", "/b"}, + {"/", "/", "/"}, + {"a", "/", "a/"}, /* this might deserve a diagnostic */ + {"/a", "/", "/a/"}, /* this might deserve a diagnostic */ + {"a", "//b", "a/b"}, + {"", "a", "a"}, /* this might deserve a diagnostic */ + }; + unsigned int i; + bool fail = false; + + set_program_name (argv[0]); + + for (i = 0; i < sizeof tests / sizeof tests[0]; i++) + { + char *base_in_result; + char const *const *t = tests[i]; + char *res = file_name_concat (t[0], t[1], &base_in_result); + if (strcmp (res, t[2]) != 0) + { + fprintf (stderr, "test #%u: got %s, expected %s\n", i, res, t[2]); + fail = true; + } + } + exit (fail ? EXIT_FAILURE : EXIT_SUCCESS); +} diff --git a/coreseek/m4-1.4.13/tests/test-fopen.c b/coreseek/m4-1.4.13/tests/test-fopen.c new file mode 100644 index 0000000..337a389 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fopen.c @@ -0,0 +1,45 @@ +/* Test of opening a file stream. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (fopen ("nonexist.ent/", "w") == NULL); + ASSERT (fopen ("/dev/null/", "r") == NULL); + + ASSERT (fopen ("/dev/null", "r") != NULL); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-fpending.c b/coreseek/m4-1.4.13/tests/test-fpending.c new file mode 100644 index 0000000..8d9e5ae --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fpending.c @@ -0,0 +1,51 @@ +/* Ensure that __fpending works. + + Copyright (C) 2004, 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + + Written by Jim Meyering. */ + +#include + +#include "fpending.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (__fpending (stdout) == 0); + + fputs ("foo", stdout); + ASSERT (__fpending (stdout) == 3); + + fflush (stdout); + ASSERT (__fpending (stdout) == 0); + + exit (0); +} diff --git a/coreseek/m4-1.4.13/tests/test-fpending.sh b/coreseek/m4-1.4.13/tests/test-fpending.sh new file mode 100755 index 0000000..636af25 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fpending.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +tmpfile= +trap 'rm -fr $tmpfile' 1 2 3 15 + +tmpfile=test-fpending.t + +./test-fpending${EXEEXT} > $tmpfile || exit 1 + +rm -fr $tmpfile + +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-fpurge.c b/coreseek/m4-1.4.13/tests/test-fpurge.c new file mode 100644 index 0000000..280da99 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fpurge.c @@ -0,0 +1,88 @@ +/* Test of fpurge() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "fpurge.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define TESTFILE "t-fpurge.tmp" + +int +main () +{ + FILE *fp; + + /* Create a file with some contents. */ + fp = fopen (TESTFILE, "w"); + if (fp == NULL) + goto skip; + if (fwrite ("foobarsh", 1, 8, fp) < 8) + goto skip; + if (fclose (fp)) + goto skip; + + /* Open it in read-write mode. */ + fp = fopen (TESTFILE, "r+"); + if (fp == NULL) + goto skip; + if (fseek (fp, 3, SEEK_CUR)) + goto skip; + if (fwrite ("g", 1, 1, fp) < 1) + goto skip; + if (fflush (fp)) + goto skip; + if (fwrite ("az", 1, 2, fp) < 2) + goto skip; + ASSERT (fpurge (fp) == 0); + ASSERT (fclose (fp) == 0); + + /* Open it in read-only mode. */ + fp = fopen (TESTFILE, "r"); + if (fp == NULL) + goto skip; + { + char buf[8]; + if (fread (buf, 1, 8, fp) < 8) + goto skip; + ASSERT (memcmp (buf, "foogarsh", 8) == 0); + } + ASSERT (fpurge (fp) == 0); + ASSERT (fclose (fp) == 0); + + return 0; + + skip: + fprintf (stderr, "Skipping test: file operations failed.\n"); + return 77; +} diff --git a/coreseek/m4-1.4.13/tests/test-freadahead.c b/coreseek/m4-1.4.13/tests/test-freadahead.c new file mode 100644 index 0000000..c369cba --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-freadahead.c @@ -0,0 +1,84 @@ +/* Test of freadahead() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "freadahead.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char **argv) +{ + int nbytes = atoi (argv[1]); + if (nbytes > 0) + { + void *buf = malloc (nbytes); + ASSERT (fread (buf, 1, nbytes, stdin) == nbytes); + } + + if (nbytes == 0) + ASSERT (freadahead (stdin) == 0); + else + { + if (lseek (0, 0, SEEK_CUR) == nbytes) + /* An unbuffered stdio, such as BeOS or on uClibc compiled without + __STDIO_BUFFERS. */ + ASSERT (freadahead (stdin) == 0); + else + { + /* Normal buffered stdio. */ + size_t buffered; + int c, c2; + + ASSERT (freadahead (stdin) != 0); + buffered = freadahead (stdin); + + c = fgetc (stdin); + ASSERT (freadahead (stdin) == buffered - 1); + ungetc (c, stdin); + ASSERT (freadahead (stdin) == buffered); + c2 = fgetc (stdin); + ASSERT (c2 == c); + ASSERT (freadahead (stdin) == buffered - 1); + + c = '@'; + ungetc (c, stdin); + ASSERT (freadahead (stdin) == buffered); + c2 = fgetc (stdin); + ASSERT (c2 == c); + ASSERT (freadahead (stdin) == buffered - 1); + } + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-freadahead.sh b/coreseek/m4-1.4.13/tests/test-freadahead.sh new file mode 100755 index 0000000..27cf550 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-freadahead.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +./test-freadahead${EXEEXT} 0 < "$srcdir/test-freadahead.sh" || exit 1 +./test-freadahead${EXEEXT} 5 < "$srcdir/test-freadahead.sh" || exit 1 +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-freading.c b/coreseek/m4-1.4.13/tests/test-freading.c new file mode 100644 index 0000000..c4d5533 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-freading.c @@ -0,0 +1,172 @@ +/* Test of freading() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "freading.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define TESTFILE "t-freading.tmp" + +int +main () +{ + FILE *fp; + + /* Create a file with some contents. Write-only file is never reading. */ + fp = fopen (TESTFILE, "w"); + if (fp == NULL) + goto skip; + ASSERT (!freading (fp)); + if (fwrite ("foobarsh", 1, 8, fp) < 8) + goto skip; + ASSERT (!freading (fp)); + if (fclose (fp)) + goto skip; + + /* Open it in read-only mode. Read-only file is always reading. */ + fp = fopen (TESTFILE, "r"); + if (fp == NULL) + goto skip; + ASSERT (freading (fp)); + if (fgetc (fp) != 'f') + goto skip; + ASSERT (freading (fp)); + if (fseek (fp, 2, SEEK_CUR)) + goto skip; + ASSERT (freading (fp)); + if (fgetc (fp) != 'b') + goto skip; + ASSERT (freading (fp)); + fflush (fp); + ASSERT (freading (fp)); + if (fgetc (fp) != 'a') + goto skip; + ASSERT (freading (fp)); + if (fseek (fp, 0, SEEK_END)) + goto skip; + ASSERT (freading (fp)); + if (fclose (fp)) + goto skip; + + /* Open it in read-write mode. POSIX requires a reposition (fseek, + fsetpos, rewind) or EOF when transitioning from read to write; + freading is only deterministic after input or output, but this + test case should be portable even on open, after reposition, and + at EOF. */ + /* First a scenario with only fgetc, fseek, fputc. */ + fp = fopen (TESTFILE, "r+"); + if (fp == NULL) + goto skip; + ASSERT (!freading (fp)); + if (fgetc (fp) != 'f') + goto skip; + ASSERT (freading (fp)); + if (fseek (fp, 2, SEEK_CUR)) + goto skip; + /* freading (fp) is undefined here, but fwriting (fp) is false. */ + if (fgetc (fp) != 'b') + goto skip; + ASSERT (freading (fp)); + /* This fseek call is necessary when switching from reading to writing. + See the description of fopen(), ISO C 99 7.19.5.3.(6). */ + if (fseek (fp, 0, SEEK_CUR) != 0) + goto skip; + /* freading (fp) is undefined here, but fwriting (fp) is false. */ + if (fputc ('x', fp) != 'x') + goto skip; + ASSERT (!freading (fp)); + if (fseek (fp, 0, SEEK_END)) + goto skip; + /* freading (fp) is undefined here, because on some implementations (e.g. + glibc) fseek causes a buffer to be read. + fwriting (fp) is undefined as well. */ + if (fclose (fp)) + goto skip; + + /* Open it in read-write mode. POSIX requires a reposition (fseek, + fsetpos, rewind) or EOF when transitioning from read to write; + freading is only deterministic after input or output, but this + test case should be portable even on open, after reposition, and + at EOF. */ + /* Here a scenario that includes fflush. */ + fp = fopen (TESTFILE, "r+"); + if (fp == NULL) + goto skip; + ASSERT (!freading (fp)); + if (fgetc (fp) != 'f') + goto skip; + ASSERT (freading (fp)); + if (fseek (fp, 2, SEEK_CUR)) + goto skip; + /* freading (fp) is undefined here, but fwriting (fp) is false. */ + if (fgetc (fp) != 'b') + goto skip; + ASSERT (freading (fp)); + fflush (fp); + /* freading (fp) is undefined here, but fwriting (fp) is false. */ + if (fgetc (fp) != 'x') + goto skip; + ASSERT (freading (fp)); + /* This fseek call is necessary when switching from reading to writing. + See the description of fopen(), ISO C 99 7.19.5.3.(6). */ + if (fseek (fp, 0, SEEK_CUR) != 0) + goto skip; + /* freading (fp) is undefined here, but fwriting (fp) is false. */ + if (fputc ('z', fp) != 'z') + goto skip; + ASSERT (!freading (fp)); + if (fseek (fp, 0, SEEK_END)) + goto skip; + /* freading (fp) is undefined here, because on some implementations (e.g. + glibc) fseek causes a buffer to be read. + fwriting (fp) is undefined as well. */ + if (fclose (fp)) + goto skip; + + /* Open it in append mode. Write-only file is never reading. */ + fp = fopen (TESTFILE, "a"); + if (fp == NULL) + goto skip; + ASSERT (!freading (fp)); + if (fwrite ("bla", 1, 3, fp) < 3) + goto skip; + ASSERT (!freading (fp)); + if (fclose (fp)) + goto skip; + + return 0; + + skip: + fprintf (stderr, "Skipping test: file operations failed.\n"); + return 77; +} diff --git a/coreseek/m4-1.4.13/tests/test-frexp.c b/coreseek/m4-1.4.13/tests/test-frexp.c new file mode 100644 index 0000000..0cd0823 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-frexp.c @@ -0,0 +1,209 @@ +/* Test of splitting a double into fraction and mantissa. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include +#include + +#include "isnand-nolibm.h" +#include "nan.h" + +/* Avoid some warnings from "gcc -Wshadow". + This file doesn't use the exp() function. */ +#undef exp +#define exp exponent + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + +static double +my_ldexp (double x, int d) +{ + for (; d > 0; d--) + x *= 2.0; + for (; d < 0; d++) + x *= 0.5; + return x; +} + +int +main () +{ + int i; + /* The use of 'volatile' guarantees that excess precision bits are dropped + when dealing with denormalized numbers. It is necessary on x86 systems + where double-floats are not IEEE compliant by default, to avoid that the + results become platform and compiler option dependent. 'volatile' is a + portable alternative to gcc's -ffloat-store option. */ + volatile double x; + + { /* NaN. */ + int exp = -9999; + double mantissa; + x = NaNd (); + mantissa = frexp (x, &exp); + ASSERT (isnand (mantissa)); + } + + { /* Positive infinity. */ + int exp = -9999; + double mantissa; + x = 1.0 / 0.0; + mantissa = frexp (x, &exp); + ASSERT (mantissa == x); + } + + { /* Negative infinity. */ + int exp = -9999; + double mantissa; + x = -1.0 / 0.0; + mantissa = frexp (x, &exp); + ASSERT (mantissa == x); + } + + { /* Positive zero. */ + int exp = -9999; + double mantissa; + x = 0.0; + mantissa = frexp (x, &exp); + ASSERT (exp == 0); + ASSERT (mantissa == x); + ASSERT (!signbit (mantissa)); + } + + { /* Negative zero. */ + int exp = -9999; + double mantissa; + x = -zero; + mantissa = frexp (x, &exp); + ASSERT (exp == 0); + ASSERT (mantissa == x); + ASSERT (signbit (mantissa)); + } + + for (i = 1, x = 1.0; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5); + } + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5); + } + + for (i = 1, x = -1.0; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5); + } + for (i = 1, x = -1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5); + } + for (; i >= DBL_MIN_EXP - 100 && x < 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5); + } + + for (i = 1, x = 1.01; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.505); + } + for (i = 1, x = 1.01; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.505); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa >= 0.5); + ASSERT (mantissa < 1.0); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + for (i = 1, x = 1.73205; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.866025); + } + for (i = 1, x = 1.73205; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.866025); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = frexp (x, &exp); + ASSERT (exp == i || exp == i + 1); + ASSERT (mantissa >= 0.5); + ASSERT (mantissa < 1.0); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-frexpl.c b/coreseek/m4-1.4.13/tests/test-frexpl.c new file mode 100644 index 0000000..d4babb8 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-frexpl.c @@ -0,0 +1,233 @@ +/* Test of splitting a 'long double' into fraction and mantissa. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include +#include + +#include "fpucw.h" +#include "isnanl-nolibm.h" +#include "nan.h" + +/* Avoid some warnings from "gcc -Wshadow". + This file doesn't use the exp() function. */ +#undef exp +#define exp exponent + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable + exponent for 'long double' is -964. Similarly, on PowerPC machines, + LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' + is -968. For exponents below that, the precision may be truncated to the + precision used for 'double'. */ +#ifdef __sgi +# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57) +#elif defined __ppc || defined __ppc__ || defined __powerpc || defined __powerpc__ +# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 53) +#else +# define MIN_NORMAL_EXP LDBL_MIN_EXP +#endif + +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. + IRIX cc can't put -0.0L into .data, but can compute at runtime. + Note that the expression -LDBL_MIN * LDBL_MIN does not work on other + platforms, such as when cross-compiling to PowerPC on MacOS X 10.5. */ +#if defined __hpux || defined __sgi +static long double +compute_minus_zero (void) +{ + return -LDBL_MIN * LDBL_MIN; +} +# define minus_zero compute_minus_zero () +#else +long double minus_zero = -0.0L; +#endif + +static long double +my_ldexp (long double x, int d) +{ + for (; d > 0; d--) + x *= 2.0L; + for (; d < 0; d++) + x *= 0.5L; + return x; +} + +int +main () +{ + int i; + long double x; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + { /* NaN. */ + int exp = -9999; + long double mantissa; + x = NaNl (); + mantissa = frexpl (x, &exp); + ASSERT (isnanl (mantissa)); + } + + { /* Positive infinity. */ + int exp = -9999; + long double mantissa; + x = 1.0L / 0.0L; + mantissa = frexpl (x, &exp); + ASSERT (mantissa == x); + } + + { /* Negative infinity. */ + int exp = -9999; + long double mantissa; + x = -1.0L / 0.0L; + mantissa = frexpl (x, &exp); + ASSERT (mantissa == x); + } + + { /* Positive zero. */ + int exp = -9999; + long double mantissa; + x = 0.0L; + mantissa = frexpl (x, &exp); + ASSERT (exp == 0); + ASSERT (mantissa == x); + ASSERT (!signbit (mantissa)); + } + + { /* Negative zero. */ + int exp = -9999; + long double mantissa; + x = minus_zero; + mantissa = frexpl (x, &exp); + ASSERT (exp == 0); + ASSERT (mantissa == x); + ASSERT (signbit (mantissa)); + } + + for (i = 1, x = 1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5L); + } + for (i = 1, x = 1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5L); + } + for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5L); + } + + for (i = 1, x = -1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5L); + } + for (i = 1, x = -1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5L); + } + for (; i >= LDBL_MIN_EXP - 100 && x < 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5L); + } + + for (i = 1, x = 1.01L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.505L); + } + for (i = 1, x = 1.01L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.505L); + } + for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa >= 0.5L); + ASSERT (mantissa < 1.0L); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + for (i = 1, x = 1.73205L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.866025L); + } + for (i = 1, x = 1.73205L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.866025L); + } + for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i || exp == i + 1); + ASSERT (mantissa >= 0.5L); + ASSERT (mantissa < 1.0L); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-fseeko.c b/coreseek/m4-1.4.13/tests/test-fseeko.c new file mode 100644 index 0000000..9c284da --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fseeko.c @@ -0,0 +1,78 @@ +/* Test of fseeko() function. + Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#ifndef FUNC_UNGETC_BROKEN +# define FUNC_UNGETC_BROKEN 0 +#endif + +int +main (int argc, char **argv) +{ + /* Assume stdin is non-empty, seekable, and starts with '#!/bin/sh' + iff argc > 1. */ + int expected = argc > 1 ? 0 : -1; + /* Exit with success only if fseek/fseeko agree. */ + int r1 = fseeko (stdin, 0, SEEK_CUR); + int r2 = fseek (stdin, 0, SEEK_CUR); + ASSERT (r1 == r2 && r1 == expected); + if (argc > 1) + { + /* Test that fseek discards previously read ungetc data. */ + int ch = fgetc (stdin); + ASSERT (ch == '#'); + ASSERT (ungetc (ch, stdin) == ch); + ASSERT (fseeko (stdin, 2, SEEK_SET) == 0); + ch = fgetc (stdin); + ASSERT (ch == '/'); + if (2 < argc) + { + if (FUNC_UNGETC_BROKEN) + { + fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n", + stderr); + return 77; + } + /* Test that fseek discards random ungetc data. */ + ASSERT (ungetc (ch ^ 0xff, stdin) == (ch ^ 0xff)); + } + ASSERT (fseeko (stdin, 0, SEEK_END) == 0); + ASSERT (fgetc (stdin) == EOF); + /* Test that fseek resets end-of-file marker. */ + ASSERT (feof (stdin)); + ASSERT (fseeko (stdin, 0, SEEK_END) == 0); + ASSERT (!feof (stdin)); + } + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-fseeko.sh b/coreseek/m4-1.4.13/tests/test-fseeko.sh new file mode 100755 index 0000000..5c55827 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fseeko.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +./test-fseeko${EXEEXT} 1 < "$srcdir/test-fseeko.sh" || exit 1 +echo hi | ./test-fseeko${EXEEXT} || exit 1 +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-fseeko2.sh b/coreseek/m4-1.4.13/tests/test-fseeko2.sh new file mode 100755 index 0000000..6e1130c --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-fseeko2.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +exec ./test-fseeko${EXEEXT} 1 2 < "$srcdir/test-fseeko2.sh" diff --git a/coreseek/m4-1.4.13/tests/test-ftello.c b/coreseek/m4-1.4.13/tests/test-ftello.c new file mode 100644 index 0000000..d3401ee --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-ftello.c @@ -0,0 +1,124 @@ +/* Test of ftello() function. + Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include +#include + +#include "binary-io.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#ifndef FUNC_UNGETC_BROKEN +# define FUNC_UNGETC_BROKEN 0 +#endif + +int +main (int argc, char **argv) +{ + int ch; + /* Assume stdin is seekable iff argc > 1. */ + if (argc == 1) + { + ASSERT (ftell (stdin) == -1); + ASSERT (ftello (stdin) == -1); + return 0; + } + + /* mingw ftell is unreliable on text mode input. */ + SET_BINARY (0); + + /* Simple tests. For each test, make sure ftell and ftello agree. */ + ASSERT (ftell (stdin) == 0); + ASSERT (ftello (stdin) == 0); + + ch = fgetc (stdin); + ASSERT (ch == '#'); + ASSERT (ftell (stdin) == 1); + ASSERT (ftello (stdin) == 1); + + /* Test ftell after ungetc of read input. */ + ch = ungetc ('#', stdin); + ASSERT (ch == '#'); + ASSERT (ftell (stdin) == 0); + ASSERT (ftello (stdin) == 0); + + ch = fgetc (stdin); + ASSERT (ch == '#'); + ASSERT (ftell (stdin) == 1); + ASSERT (ftello (stdin) == 1); + + /* Test ftell after fseek. */ + ASSERT (fseek (stdin, 2, SEEK_SET) == 0); + ASSERT (ftell (stdin) == 2); + ASSERT (ftello (stdin) == 2); + + /* Test ftell after random ungetc. */ + ch = fgetc (stdin); + ASSERT (ch == '/'); + ch = ungetc ('@', stdin); + ASSERT (ch == '@'); + ASSERT (ftell (stdin) == 2); + ASSERT (ftello (stdin) == 2); + + ch = fgetc (stdin); + ASSERT (ch == '@'); + ASSERT (ftell (stdin) == 3); + ASSERT (ftello (stdin) == 3); + + if (2 < argc) + { + if (FUNC_UNGETC_BROKEN) + { + fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n", + stderr); + return 77; + } + /* Test ftell after ungetc without read. */ + ASSERT (fseek (stdin, 0, SEEK_CUR) == 0); + ASSERT (ftell (stdin) == 3); + ASSERT (ftello (stdin) == 3); + + ch = ungetc ('~', stdin); + ASSERT (ch == '~'); + ASSERT (ftell (stdin) == 2); + ASSERT (ftello (stdin) == 2); + } + +#if !defined __MINT__ /* FreeMiNT has problems seeking past end of file */ + /* Test ftell beyond end of file. */ + ASSERT (fseek (stdin, 0, SEEK_END) == 0); + ch = ftello (stdin); + ASSERT (fseek (stdin, 10, SEEK_END) == 0); + ASSERT (ftell (stdin) == ch + 10); + ASSERT (ftello (stdin) == ch + 10); +#endif + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-ftello.sh b/coreseek/m4-1.4.13/tests/test-ftello.sh new file mode 100755 index 0000000..33d2e83 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-ftello.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +./test-ftello${EXEEXT} 1 < "$srcdir/test-ftello.sh" || exit 1 +echo hi | ./test-ftello${EXEEXT} || exit 1 +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-ftello2.sh b/coreseek/m4-1.4.13/tests/test-ftello2.sh new file mode 100755 index 0000000..ba750b0 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-ftello2.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +exec ./test-ftello${EXEEXT} 1 2 < "$srcdir/test-ftello2.sh" diff --git a/coreseek/m4-1.4.13/tests/test-getdtablesize.c b/coreseek/m4-1.4.13/tests/test-getdtablesize.c new file mode 100644 index 0000000..db77534 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-getdtablesize.c @@ -0,0 +1,44 @@ +/* Test of getdtablesize() function. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + ASSERT (getdtablesize () >= 3); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-gettimeofday.c b/coreseek/m4-1.4.13/tests/test-gettimeofday.c new file mode 100644 index 0000000..892b188 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-gettimeofday.c @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2005, 2007 Free Software Foundation + * Written by Jim Meyering. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +#include + +#include +#include + +#include +#include + +int +main (int argc, char *argv[]) +{ + time_t t = 0; + struct tm *lt; + struct tm saved_lt; + struct timeval tv; + lt = localtime (&t); + saved_lt = *lt; + gettimeofday (&tv, NULL); + if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) + { + fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); + return 1; + } + else + { + return 0; + } +} diff --git a/coreseek/m4-1.4.13/tests/test-isnand-nolibm.c b/coreseek/m4-1.4.13/tests/test-isnand-nolibm.c new file mode 100644 index 0000000..fd739ca --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-isnand-nolibm.c @@ -0,0 +1,22 @@ +/* Test of isnand() substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "isnand-nolibm.h" + +#include "test-isnand.h" + diff --git a/coreseek/m4-1.4.13/tests/test-isnand.h b/coreseek/m4-1.4.13/tests/test-isnand.h new file mode 100644 index 0000000..09c5e97 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-isnand.h @@ -0,0 +1,78 @@ +/* Test of isnand() substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include +#include +#include + +#include "nan.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + +int +main () +{ + /* Finite values. */ + ASSERT (!isnand (3.141)); + ASSERT (!isnand (3.141e30)); + ASSERT (!isnand (3.141e-30)); + ASSERT (!isnand (-2.718)); + ASSERT (!isnand (-2.718e30)); + ASSERT (!isnand (-2.718e-30)); + ASSERT (!isnand (0.0)); + ASSERT (!isnand (-zero)); + /* Infinite values. */ + ASSERT (!isnand (1.0 / 0.0)); + ASSERT (!isnand (-1.0 / 0.0)); + /* Quiet NaN. */ + ASSERT (isnand (NaNd ())); +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { double value; unsigned int word[NWORDS]; } memory_double; + memory_double m; + m.value = NaNd (); +# if DBL_EXPBIT0_BIT > 0 + m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); +# else + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << DBL_EXPBIT0_BIT; + ASSERT (isnand (m.value)); + } +#endif + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-isnanf-nolibm.c b/coreseek/m4-1.4.13/tests/test-isnanf-nolibm.c new file mode 100644 index 0000000..0105ce9 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-isnanf-nolibm.c @@ -0,0 +1,21 @@ +/* Test of isnanf() substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "isnanf-nolibm.h" + +#include "test-isnanf.h" diff --git a/coreseek/m4-1.4.13/tests/test-isnanf.h b/coreseek/m4-1.4.13/tests/test-isnanf.h new file mode 100644 index 0000000..f3f387c --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-isnanf.h @@ -0,0 +1,80 @@ +/* Test of isnanf() substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include +#include +#include + +#include "nan.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zero instead. */ +float zero = 0.0f; + +int +main () +{ + /* Finite values. */ + ASSERT (!isnanf (3.141f)); + ASSERT (!isnanf (3.141e30f)); + ASSERT (!isnanf (3.141e-30f)); + ASSERT (!isnanf (-2.718f)); + ASSERT (!isnanf (-2.718e30f)); + ASSERT (!isnanf (-2.718e-30f)); + ASSERT (!isnanf (0.0f)); + ASSERT (!isnanf (-zero)); + /* Infinite values. */ + ASSERT (!isnanf (1.0f / 0.0f)); + ASSERT (!isnanf (-1.0f / 0.0f)); + /* Quiet NaN. */ + ASSERT (isnanf (NaNf ())); +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { float value; unsigned int word[NWORDS]; } memory_float; + memory_float m; + m.value = NaNf (); +# if FLT_EXPBIT0_BIT > 0 + m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); +# else + m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + if (FLT_EXPBIT0_WORD < NWORDS / 2) + m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; + else + m.word[0] |= (unsigned int) 1; + ASSERT (isnanf (m.value)); + } +#endif + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-isnanl-nolibm.c b/coreseek/m4-1.4.13/tests/test-isnanl-nolibm.c new file mode 100644 index 0000000..70c984d --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-isnanl-nolibm.c @@ -0,0 +1,23 @@ +/* Test of isnanl() substitute. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "isnanl-nolibm.h" + +#include "test-isnanl.h" diff --git a/coreseek/m4-1.4.13/tests/test-isnanl.h b/coreseek/m4-1.4.13/tests/test-isnanl.h new file mode 100644 index 0000000..baf04db --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-isnanl.h @@ -0,0 +1,154 @@ +/* Test of isnanl() substitute. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include +#include +#include +#include + +#include "nan.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. + IRIX cc can't put -0.0L into .data, but can compute at runtime. + Note that the expression -LDBL_MIN * LDBL_MIN does not work on other + platforms, such as when cross-compiling to PowerPC on MacOS X 10.5. */ +#if defined __hpux || defined __sgi +static long double +compute_minus_zero (void) +{ + return -LDBL_MIN * LDBL_MIN; +} +# define minus_zero compute_minus_zero () +#else +long double minus_zero = -0.0L; +#endif + +int +main () +{ + #define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { unsigned int word[NWORDS]; long double value; } + memory_long_double; + + /* Finite values. */ + ASSERT (!isnanl (3.141L)); + ASSERT (!isnanl (3.141e30L)); + ASSERT (!isnanl (3.141e-30L)); + ASSERT (!isnanl (-2.718L)); + ASSERT (!isnanl (-2.718e30L)); + ASSERT (!isnanl (-2.718e-30L)); + ASSERT (!isnanl (0.0L)); + ASSERT (!isnanl (minus_zero)); + /* Infinite values. */ + ASSERT (!isnanl (1.0L / 0.0L)); + ASSERT (!isnanl (-1.0L / 0.0L)); + /* Quiet NaN. */ + ASSERT (isnanl (NaNl ())); + +#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT + /* A bit pattern that is different from a Quiet NaN. With a bit of luck, + it's a Signalling NaN. */ + { + memory_long_double m; + m.value = NaNl (); +# if LDBL_EXPBIT0_BIT > 0 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); +# else + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; + ASSERT (isnanl (m.value)); + } +#endif + +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { + /* Signalling NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { /* Pseudo-Infinity. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { /* Pseudo-Zero. */ + static memory_long_double x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { /* Unnormalized number. */ + static memory_long_double x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { /* Pseudo-Denormal. */ + static memory_long_double x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + ASSERT (isnanl (x.value)); + } +#endif + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-linkedhash_list.c b/coreseek/m4-1.4.13/tests/test-linkedhash_list.c new file mode 100644 index 0000000..c4be623 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-linkedhash_list.c @@ -0,0 +1,429 @@ +/* Test of sequential list data type implementation. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "gl_linkedhash_list.h" + +#include +#include +#include +#include + +#include "gl_array_list.h" +#include "progname.h" + +static const char *objects[15] = + { + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o" + }; + +#define SIZE_BITS (sizeof (size_t) * CHAR_BIT) + +static bool +string_equals (const void *x1, const void *x2) +{ + const char *s1 = x1; + const char *s2 = x2; + return strcmp (s1, s2) == 0; +} + +/* A hash function for NUL-terminated char* strings using + the method described by Bruno Haible. + See http://www.haible.de/bruno/hashfunc.html. */ +static size_t +string_hash (const void *x) +{ + const char *s = x; + size_t h = 0; + + for (; *s; s++) + h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); + + return h; +} + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define RANDOM(n) (rand () % (n)) +#define RANDOM_OBJECT() objects[RANDOM (SIZEOF (objects))] + +static void +check_equals (gl_list_t list1, gl_list_t list2) +{ + size_t n, i; + + n = gl_list_size (list1); + ASSERT (n == gl_list_size (list2)); + for (i = 0; i < n; i++) + { + ASSERT (gl_list_get_at (list1, i) == gl_list_get_at (list2, i)); + } +} + +static void +check_all (gl_list_t list1, gl_list_t list2, gl_list_t list3) +{ + check_equals (list1, list2); + check_equals (list1, list3); +} + +int +main (int argc, char *argv[]) +{ + gl_list_t list1, list2, list3; + + set_program_name (argv[0]); + + /* Allow the user to provide a non-default random seed on the command line. */ + if (argc > 1) + srand (atoi (argv[1])); + + { + size_t initial_size = RANDOM (50); + const void **contents = + (const void **) malloc (initial_size * sizeof (const void *)); + size_t i; + unsigned int repeat; + + for (i = 0; i < initial_size; i++) + contents[i] = RANDOM_OBJECT (); + + /* Create list1. */ + list1 = gl_list_create (GL_ARRAY_LIST, + string_equals, string_hash, NULL, true, + initial_size, contents); + /* Create list2. */ + list2 = gl_list_create_empty (GL_LINKEDHASH_LIST, + string_equals, string_hash, NULL, true); + for (i = 0; i < initial_size; i++) + gl_list_add_last (list2, contents[i]); + + /* Create list3. */ + list3 = gl_list_create (GL_LINKEDHASH_LIST, + string_equals, string_hash, NULL, true, + initial_size, contents); + + check_all (list1, list2, list3); + + for (repeat = 0; repeat < 10000; repeat++) + { + unsigned int operation = RANDOM (16); + switch (operation) + { + case 0: + if (gl_list_size (list1) > 0) + { + size_t index = RANDOM (gl_list_size (list1)); + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2, node3; + + node1 = gl_list_set_at (list1, index, obj); + ASSERT (gl_list_get_at (list1, index) == obj); + ASSERT (gl_list_node_value (list1, node1) == obj); + + node2 = gl_list_set_at (list2, index, obj); + ASSERT (gl_list_get_at (list2, index) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + + node3 = gl_list_set_at (list3, index, obj); + ASSERT (gl_list_get_at (list3, index) == obj); + ASSERT (gl_list_node_value (list3, node3) == obj); + + if (index > 0) + { + ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) + == gl_list_get_at (list1, index - 1)); + ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) + == gl_list_get_at (list2, index - 1)); + ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) + == gl_list_get_at (list2, index - 1)); + } + if (index + 1 < gl_list_size (list1)) + { + ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) + == gl_list_get_at (list1, index + 1)); + ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) + == gl_list_get_at (list2, index + 1)); + ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) + == gl_list_get_at (list2, index + 1)); + } + } + break; + case 1: + { + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2, node3; + node1 = gl_list_search (list1, obj); + node2 = gl_list_search (list2, obj); + node3 = gl_list_search (list3, obj); + if (node1 == NULL) + { + ASSERT (node2 == NULL); + ASSERT (node3 == NULL); + } + else + { + ASSERT (node2 != NULL); + ASSERT (node3 != NULL); + ASSERT (gl_list_node_value (list1, node1) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + ASSERT (gl_list_node_value (list3, node3) == obj); + } + } + break; + case 2: + { + const char *obj = RANDOM_OBJECT (); + size_t index1, index2, index3; + index1 = gl_list_indexof (list1, obj); + index2 = gl_list_indexof (list2, obj); + index3 = gl_list_indexof (list3, obj); + if (index1 == (size_t)(-1)) + { + ASSERT (index2 == (size_t)(-1)); + ASSERT (index3 == (size_t)(-1)); + } + else + { + ASSERT (index2 != (size_t)(-1)); + ASSERT (index3 != (size_t)(-1)); + ASSERT (gl_list_get_at (list1, index1) == obj); + ASSERT (gl_list_get_at (list2, index2) == obj); + ASSERT (gl_list_get_at (list3, index3) == obj); + ASSERT (index2 == index1); + ASSERT (index3 == index1); + } + } + break; + case 3: /* add 1 element */ + { + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2, node3; + node1 = gl_list_add_first (list1, obj); + node2 = gl_list_add_first (list2, obj); + node3 = gl_list_add_first (list3, obj); + ASSERT (gl_list_node_value (list1, node1) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + ASSERT (gl_list_node_value (list3, node3) == obj); + ASSERT (gl_list_get_at (list1, 0) == obj); + ASSERT (gl_list_get_at (list2, 0) == obj); + ASSERT (gl_list_get_at (list3, 0) == obj); + } + break; + case 4: /* add 1 element */ + { + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2, node3; + node1 = gl_list_add_last (list1, obj); + node2 = gl_list_add_last (list2, obj); + node3 = gl_list_add_last (list3, obj); + ASSERT (gl_list_node_value (list1, node1) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + ASSERT (gl_list_node_value (list3, node3) == obj); + ASSERT (gl_list_get_at (list1, gl_list_size (list1) - 1) == obj); + ASSERT (gl_list_get_at (list2, gl_list_size (list2) - 1) == obj); + ASSERT (gl_list_get_at (list3, gl_list_size (list3) - 1) == obj); + } + break; + case 5: /* add 3 elements */ + { + const char *obj0 = RANDOM_OBJECT (); + const char *obj1 = RANDOM_OBJECT (); + const char *obj2 = RANDOM_OBJECT (); + gl_list_node_t node1, node2, node3; + node1 = gl_list_add_first (list1, obj2); + node1 = gl_list_add_before (list1, node1, obj0); + node1 = gl_list_add_after (list1, node1, obj1); + node2 = gl_list_add_first (list2, obj2); + node2 = gl_list_add_before (list2, node2, obj0); + node2 = gl_list_add_after (list2, node2, obj1); + node3 = gl_list_add_first (list3, obj2); + node3 = gl_list_add_before (list3, node3, obj0); + node3 = gl_list_add_after (list3, node3, obj1); + ASSERT (gl_list_node_value (list1, node1) == obj1); + ASSERT (gl_list_node_value (list2, node2) == obj1); + ASSERT (gl_list_node_value (list3, node3) == obj1); + ASSERT (gl_list_get_at (list1, 0) == obj0); + ASSERT (gl_list_get_at (list1, 1) == obj1); + ASSERT (gl_list_get_at (list1, 2) == obj2); + ASSERT (gl_list_get_at (list2, 0) == obj0); + ASSERT (gl_list_get_at (list2, 1) == obj1); + ASSERT (gl_list_get_at (list2, 2) == obj2); + ASSERT (gl_list_get_at (list3, 0) == obj0); + ASSERT (gl_list_get_at (list3, 1) == obj1); + ASSERT (gl_list_get_at (list3, 2) == obj2); + } + break; + case 6: /* add 1 element */ + { + size_t index = RANDOM (gl_list_size (list1) + 1); + const char *obj = RANDOM_OBJECT (); + gl_list_node_t node1, node2, node3; + node1 = gl_list_add_at (list1, index, obj); + node2 = gl_list_add_at (list2, index, obj); + node3 = gl_list_add_at (list3, index, obj); + ASSERT (gl_list_get_at (list1, index) == obj); + ASSERT (gl_list_node_value (list1, node1) == obj); + ASSERT (gl_list_get_at (list2, index) == obj); + ASSERT (gl_list_node_value (list2, node2) == obj); + ASSERT (gl_list_get_at (list3, index) == obj); + ASSERT (gl_list_node_value (list3, node3) == obj); + if (index > 0) + { + ASSERT (gl_list_node_value (list1, gl_list_previous_node (list1, node1)) + == gl_list_get_at (list1, index - 1)); + ASSERT (gl_list_node_value (list2, gl_list_previous_node (list3, node3)) + == gl_list_get_at (list2, index - 1)); + ASSERT (gl_list_node_value (list3, gl_list_previous_node (list3, node3)) + == gl_list_get_at (list2, index - 1)); + } + if (index + 1 < gl_list_size (list1)) + { + ASSERT (gl_list_node_value (list1, gl_list_next_node (list1, node1)) + == gl_list_get_at (list1, index + 1)); + ASSERT (gl_list_node_value (list2, gl_list_next_node (list3, node3)) + == gl_list_get_at (list2, index + 1)); + ASSERT (gl_list_node_value (list3, gl_list_next_node (list3, node3)) + == gl_list_get_at (list2, index + 1)); + } + } + break; + case 7: case 8: /* remove 1 element */ + if (gl_list_size (list1) > 0) + { + size_t n = gl_list_size (list1); + const char *obj = gl_list_get_at (list1, RANDOM (n)); + gl_list_node_t node1, node2, node3; + node1 = gl_list_search (list1, obj); + node2 = gl_list_search (list2, obj); + node3 = gl_list_search (list3, obj); + ASSERT (node1 != NULL); + ASSERT (node2 != NULL); + ASSERT (node3 != NULL); + ASSERT (gl_list_remove_node (list1, node1)); + ASSERT (gl_list_remove_node (list2, node2)); + ASSERT (gl_list_remove_node (list3, node3)); + ASSERT (gl_list_size (list1) == n - 1); + } + break; + case 9: case 10: /* remove 1 element */ + if (gl_list_size (list1) > 0) + { + size_t n = gl_list_size (list1); + size_t index = RANDOM (n); + ASSERT (gl_list_remove_at (list1, index)); + ASSERT (gl_list_remove_at (list2, index)); + ASSERT (gl_list_remove_at (list3, index)); + ASSERT (gl_list_size (list1) == n - 1); + } + break; + case 11: case 12: /* remove 1 element */ + if (gl_list_size (list1) > 0) + { + size_t n = gl_list_size (list1); + const char *obj = gl_list_get_at (list1, RANDOM (n)); + ASSERT (gl_list_remove (list1, obj)); + ASSERT (gl_list_remove (list2, obj)); + ASSERT (gl_list_remove (list3, obj)); + ASSERT (gl_list_size (list1) == n - 1); + } + break; + case 13: + if (gl_list_size (list1) > 0) + { + size_t n = gl_list_size (list1); + const char *obj = "xyzzy"; + ASSERT (!gl_list_remove (list1, obj)); + ASSERT (!gl_list_remove (list2, obj)); + ASSERT (!gl_list_remove (list3, obj)); + ASSERT (gl_list_size (list1) == n); + } + break; + case 14: + { + size_t n = gl_list_size (list1); + gl_list_iterator_t iter1, iter2, iter3; + const void *elt; + iter1 = gl_list_iterator (list1); + iter2 = gl_list_iterator (list2); + iter3 = gl_list_iterator (list3); + for (i = 0; i < n; i++) + { + ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); + ASSERT (gl_list_get_at (list1, i) == elt); + ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); + ASSERT (gl_list_get_at (list2, i) == elt); + ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); + ASSERT (gl_list_get_at (list3, i) == elt); + } + ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); + ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); + ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); + gl_list_iterator_free (&iter1); + gl_list_iterator_free (&iter2); + gl_list_iterator_free (&iter3); + } + break; + case 15: + { + size_t end = RANDOM (gl_list_size (list1) + 1); + size_t start = RANDOM (end + 1); + gl_list_iterator_t iter1, iter2, iter3; + const void *elt; + iter1 = gl_list_iterator_from_to (list1, start, end); + iter2 = gl_list_iterator_from_to (list2, start, end); + iter3 = gl_list_iterator_from_to (list3, start, end); + for (i = start; i < end; i++) + { + ASSERT (gl_list_iterator_next (&iter1, &elt, NULL)); + ASSERT (gl_list_get_at (list1, i) == elt); + ASSERT (gl_list_iterator_next (&iter2, &elt, NULL)); + ASSERT (gl_list_get_at (list2, i) == elt); + ASSERT (gl_list_iterator_next (&iter3, &elt, NULL)); + ASSERT (gl_list_get_at (list3, i) == elt); + } + ASSERT (!gl_list_iterator_next (&iter1, &elt, NULL)); + ASSERT (!gl_list_iterator_next (&iter2, &elt, NULL)); + ASSERT (!gl_list_iterator_next (&iter3, &elt, NULL)); + gl_list_iterator_free (&iter1); + gl_list_iterator_free (&iter2); + gl_list_iterator_free (&iter3); + } + break; + } + check_all (list1, list2, list3); + } + + gl_list_free (list1); + gl_list_free (list2); + gl_list_free (list3); + free (contents); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-lseek.c b/coreseek/m4-1.4.13/tests/test-lseek.c new file mode 100644 index 0000000..ebba02e --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-lseek.c @@ -0,0 +1,103 @@ +/* Test of lseek() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake, 2007. */ + +#include + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* ARGC must be 2; *ARGV[1] is '0' if stdin and stdout are files, '1' + if they are pipes, and '2' if they are closed. Check for proper + semantics of lseek. */ +int +main (int argc, char **argv) +{ + if (argc != 2) + return 2; + switch (*argv[1]) + { + case '0': /* regular files */ + ASSERT (lseek (0, (off_t)2, SEEK_SET) == 2); + ASSERT (lseek (0, (off_t)-4, SEEK_CUR) == -1); + ASSERT (errno == EINVAL); + errno = 0; +#if ! defined __BEOS__ + /* POSIX says that the last lseek call, when failing, does not change + the current offset. But BeOS sets it to 0. */ + ASSERT (lseek (0, (off_t)0, SEEK_CUR) == 2); +#endif +#if 0 /* leads to SIGSYS on IRIX 6.5 */ + ASSERT (lseek (0, (off_t)0, (SEEK_SET | SEEK_CUR | SEEK_END) + 1) == -1); + ASSERT (errno == EINVAL); +#endif + ASSERT (lseek (1, (off_t)2, SEEK_SET) == 2); + errno = 0; + ASSERT (lseek (1, (off_t)-4, SEEK_CUR) == -1); + ASSERT (errno == EINVAL); + errno = 0; +#if ! defined __BEOS__ + /* POSIX says that the last lseek call, when failing, does not change + the current offset. But BeOS sets it to 0. */ + ASSERT (lseek (1, (off_t)0, SEEK_CUR) == 2); +#endif +#if 0 /* leads to SIGSYS on IRIX 6.5 */ + ASSERT (lseek (1, (off_t)0, (SEEK_SET | SEEK_CUR | SEEK_END) + 1) == -1); + ASSERT (errno == EINVAL); +#endif + break; + + case '1': /* pipes */ + errno = 0; + ASSERT (lseek (0, (off_t)0, SEEK_CUR) == -1); + ASSERT (errno == ESPIPE); + errno = 0; + ASSERT (lseek (1, (off_t)0, SEEK_CUR) == -1); + ASSERT (errno == ESPIPE); + break; + + case '2': /* closed */ + /* Explicitly close file descriptors 0 and 1. The <&- and >&- in the + invoking shell are not enough on HP-UX. */ + close (0); + close (1); + errno = 0; + ASSERT (lseek (0, (off_t)0, SEEK_CUR) == -1); + ASSERT (errno == EBADF); + errno = 0; + ASSERT (lseek (1, (off_t)0, SEEK_CUR) == -1); + ASSERT (errno == EBADF); + break; + + default: + return 1; + } + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-lseek.sh b/coreseek/m4-1.4.13/tests/test-lseek.sh new file mode 100755 index 0000000..e84c2bb --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-lseek.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +tmpfiles= +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles=t-lseek.tmp +# seekable files +./test-lseek${EXEEXT} 0 < "$srcdir/test-lseek.sh" > t-lseek.tmp || exit 1 + +# pipes +echo hi | ./test-lseek${EXEEXT} 1 | cat || exit 1 + +# closed descriptors +./test-lseek${EXEEXT} 2 <&- >&- || exit 1 + +rm -rf $tmpfiles +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-lstat.c b/coreseek/m4-1.4.13/tests/test-lstat.c new file mode 100644 index 0000000..1a0a0f2 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-lstat.c @@ -0,0 +1,37 @@ +/* Test of lstat() function. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Simon Josefsson, 2008. */ + +#include + +#include + +#include + +int +main (int argc, char **argv) +{ + struct stat buf; + + if (lstat ("/", &buf) != 0) + { + perror ("lstat"); + return 1; + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-malloca.c b/coreseek/m4-1.4.13/tests/test-malloca.c new file mode 100644 index 0000000..7de6c68 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-malloca.c @@ -0,0 +1,59 @@ +/* Test of safe automatic memory allocation. + Copyright (C) 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +#include + +#include "malloca.h" + +#include + +static void +do_allocation (int n) +{ + void *ptr = malloca (n); + freea (ptr); + ptr = safe_alloca (n); +} + +void (*func) (int) = do_allocation; + +int +main () +{ + int i; + + /* Repeat a lot of times, to make sure there's no memory leak. */ + for (i = 0; i < 50000; i++) + { + /* Try various values. + n = 0 gave a crash on Alpha with gcc-2.5.8. + Some versions of MacOS X have a stack size limit of 512 KB. */ + func (34); + func (134); + func (399); + func (510823); + func (129321); + func (0); + func (4070); + func (4095); + func (1); + func (16582); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-math.c b/coreseek/m4-1.4.13/tests/test-math.c new file mode 100644 index 0000000..aa51f85 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-math.c @@ -0,0 +1,53 @@ +/* Test of substitute. + Copyright (C) 2007, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#ifndef NAN +# error NAN should be defined +choke me +#endif + +#if 0 +/* Check that NAN expands into a constant expression. */ +static float n = NAN; +#endif + +/* Compare two numbers with ==. + This is a separate function because IRIX 6.5 "cc -O" miscompiles an + 'x == x' test. */ +static int +numeric_equal (double x, double y) +{ + return x == y; +} + +int +main () +{ + double d = NAN; + double zero = 0.0; + if (numeric_equal (d, d)) + return 1; + d = HUGE_VAL; + if (!numeric_equal (d, 1.0 / zero)) + return 1; + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-mbrtowc.c b/coreseek/m4-1.4.13/tests/test-mbrtowc.c new file mode 100644 index 0000000..8f1f1be --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-mbrtowc.c @@ -0,0 +1,330 @@ +/* Test of conversion of multibyte character to wide character. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + mbstate_t state; + wchar_t wc; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test zero-length input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "x", 0, &state); + /* gnulib's implementation returns (size_t)(-2). + The AIX 5.1 implementation returns (size_t)(-1). + glibc's implementation returns 0. */ + ASSERT (ret == (size_t)(-2) || ret == (size_t)(-1) || ret == 0); + ASSERT (mbsinit (&state)); + } + + /* Test NUL byte input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "", 1, &state); + ASSERT (ret == 0); + ASSERT (wc == 0); + ASSERT (mbsinit (&state)); + ret = mbrtowc (NULL, "", 1, &state); + ASSERT (ret == 0); + ASSERT (mbsinit (&state)); + } + + /* Test single-byte input. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = c; + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == c); + ASSERT (mbsinit (&state)); + ret = mbrtowc (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + break; + } + } + + /* Test special calling convention, passing a NULL pointer. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, NULL, 5, &state); + ASSERT (ret == 0); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + char input[] = "B\374\337er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == (unsigned char) '\374'); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == (unsigned char) '\337'); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 4, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '2': + /* Locale encoding is UTF-8. */ + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 5, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 4, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 5, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 6, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '3': + /* Locale encoding is EUC-JP. */ + { + char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '<'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[3] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 4, 4, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[4] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 7, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '>'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 7, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 6, &state); + ASSERT (ret == 4); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + input[5] = '\0'; + input[6] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 7, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 8, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + } + + return 1; +} diff --git a/coreseek/m4-1.4.13/tests/test-mbrtowc1.sh b/coreseek/m4-1.4.13/tests/test-mbrtowc1.sh new file mode 100755 index 0000000..3becba3 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-mbrtowc1.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-mbrtowc${EXEEXT} 1 diff --git a/coreseek/m4-1.4.13/tests/test-mbrtowc2.sh b/coreseek/m4-1.4.13/tests/test-mbrtowc2.sh new file mode 100755 index 0000000..0405aba --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-mbrtowc2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-mbrtowc${EXEEXT} 2 diff --git a/coreseek/m4-1.4.13/tests/test-mbrtowc3.sh b/coreseek/m4-1.4.13/tests/test-mbrtowc3.sh new file mode 100755 index 0000000..63a89a2 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-mbrtowc3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific EUC-JP locale is installed. +: ${LOCALE_JA=ja_JP} +if test $LOCALE_JA = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional japanese locale is installed" + else + echo "Skipping test: no traditional japanese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_JA \ +./test-mbrtowc${EXEEXT} 3 diff --git a/coreseek/m4-1.4.13/tests/test-mbrtowc4.sh b/coreseek/m4-1.4.13/tests/test-mbrtowc4.sh new file mode 100755 index 0000000..b299a2c --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-mbrtowc4.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific GB18030 locale is installed. +: ${LOCALE_ZH_CN=zh_CN.GB18030} +if test $LOCALE_ZH_CN = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no transitional chinese locale is installed" + else + echo "Skipping test: no transitional chinese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_ZH_CN \ +./test-mbrtowc${EXEEXT} 4 diff --git a/coreseek/m4-1.4.13/tests/test-mbsinit.c b/coreseek/m4-1.4.13/tests/test-mbsinit.c new file mode 100644 index 0000000..5d4c9c3 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-mbsinit.c @@ -0,0 +1,62 @@ +/* Test of test for initial conversion state. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + static mbstate_t state; + + ASSERT (mbsinit (&state)); + + if (argc > 1) + { + static const char input[1] = "\303"; + wchar_t wc; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (!mbsinit (&state)); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-mbsinit.sh b/coreseek/m4-1.4.13/tests/test-mbsinit.sh new file mode 100755 index 0000000..bbda48d --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-mbsinit.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-mbsinit${EXEEXT} diff --git a/coreseek/m4-1.4.13/tests/test-memchr2.c b/coreseek/m4-1.4.13/tests/test-memchr2.c new file mode 100644 index 0000000..c804a41 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-memchr2.c @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2008 Free Software Foundation + * Written by Eric Blake + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +#include + +#include "memchr2.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Calculating void * + int is not portable, so this wrapper converts + to char * to make the tests easier to write. */ +#define MEMCHR2 (char *) memchr2 + +int +main () +{ + size_t n = 0x100000; + char *input = malloc (n); + ASSERT (input); + + input[0] = 'a'; + input[1] = 'b'; + memset (input + 2, 'c', 1024); + memset (input + 1026, 'd', n - 1028); + input[n - 2] = 'e'; + input[n - 1] = 'a'; + + /* Basic behavior tests. */ + ASSERT (MEMCHR2 (input, 'a', 'b', n) == input); + ASSERT (MEMCHR2 (input, 'b', 'a', n) == input); + + ASSERT (MEMCHR2 (input, 'a', 'b', 0) == NULL); + ASSERT (MEMCHR2 (NULL, 'a', 'b', 0) == NULL); + + ASSERT (MEMCHR2 (input, 'b', 'd', n) == input + 1); + ASSERT (MEMCHR2 (input + 2, 'b', 'd', n - 2) == input + 1026); + + ASSERT (MEMCHR2 (input, 'd', 'e', n) == input + 1026); + ASSERT (MEMCHR2 (input, 'e', 'd', n) == input + 1026); + + ASSERT (MEMCHR2 (input + 1, 'a', 'e', n - 1) == input + n - 2); + ASSERT (MEMCHR2 (input + 1, 'e', 'a', n - 1) == input + n - 2); + + ASSERT (MEMCHR2 (input, 'f', 'g', n) == NULL); + ASSERT (MEMCHR2 (input, 'f', '\0', n) == NULL); + + ASSERT (MEMCHR2 (input, 'a', 'a', n) == input); + ASSERT (MEMCHR2 (input + 1, 'a', 'a', n - 1) == input + n - 1); + ASSERT (MEMCHR2 (input, 'f', 'f', n) == NULL); + + /* Check that a very long haystack is handled quickly if one of the + two bytes is found near the beginning. */ + { + size_t repeat = 10000; + for (; repeat > 0; repeat--) + { + ASSERT (MEMCHR2 (input, 'c', 'e', n) == input + 2); + ASSERT (MEMCHR2 (input, 'e', 'c', n) == input + 2); + ASSERT (MEMCHR2 (input, 'c', '\0', n) == input + 2); + ASSERT (MEMCHR2 (input, '\0', 'c', n) == input + 2); + } + } + + /* Alignment tests. */ + { + int i, j; + for (i = 0; i < 32; i++) + { + for (j = 0; j < 256; j++) + input[i + j] = j; + for (j = 0; j < 256; j++) + { + ASSERT (MEMCHR2 (input + i, j, 0xff, 256) == input + i + j); + ASSERT (MEMCHR2 (input + i, 0xff, j, 256) == input + i + j); + } + } + } + + free (input); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-open.c b/coreseek/m4-1.4.13/tests/test-open.c new file mode 100644 index 0000000..0eb8a33 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-open.c @@ -0,0 +1,47 @@ +/* Test of opening a file descriptor. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (open ("nonexist.ent/", O_CREAT, 0600) < 0); + ASSERT (open ("/dev/null/", O_RDONLY) < 0); + + ASSERT (open ("/dev/null", O_RDONLY) >= 0); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-posix_spawn1.c b/coreseek/m4-1.4.13/tests/test-posix_spawn1.c new file mode 100644 index 0000000..d3951eb --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-posix_spawn1.c @@ -0,0 +1,144 @@ +/* Test of posix_spawn() function. + Copyright (C) 2008, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern char **environ; + +#define CHILD_PROGRAM_FILENAME "test-posix_spawn1.sh" + +static int +fd_safer (int fd) +{ + if (0 <= fd && fd <= 2) + { + int f = fd_safer (dup (fd)); + int e = errno; + close (fd); + errno = e; + fd = f; + } + + return fd; +} + +int +main () +{ + char *argv[3] = { "/bin/sh", CHILD_PROGRAM_FILENAME, NULL }; + int ifd[2]; + sigset_t blocked_signals; + sigset_t fatal_signal_set; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + int fd; + FILE *fp; + char line[80]; + int status; + int exitstatus; + + if (pipe (ifd) < 0 || (ifd[0] = fd_safer (ifd[0])) < 0) + { + perror ("cannot create pipe"); + exit (1); + } + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + sigemptyset (&fatal_signal_set); + sigaddset (&fatal_signal_set, SIGINT); + sigaddset (&fatal_signal_set, SIGTERM); + sigaddset (&fatal_signal_set, SIGHUP); + sigaddset (&fatal_signal_set, SIGPIPE); + sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_adddup2 (&actions, ifd[1], STDOUT_FILENO)) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ifd[1])) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ifd[0])) != 0 + || (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, "/dev/null", O_RDONLY, 0)) != 0 + || (err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 + || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) + || (err = posix_spawnp (&child, "/bin/sh", &actions, &attrs, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + errno = err; + perror ("subprocess failed"); + exit (1); + } + posix_spawn_file_actions_destroy (&actions); + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + close (ifd[1]); + fd = ifd[0]; + fp = fdopen (fd, "r"); + if (fp == NULL) + { + fprintf (stderr, "fdopen() failed\n"); + exit (1); + } + if (fread (line, 1, 80, fp) < 12) + { + fprintf (stderr, "could not read expected output\n"); + exit (1); + } + if (memcmp (line, "Halle Potta", 11) != 0) + { + fprintf (stderr, "read output is not the expected output"); + exit (1); + } + fclose (fp); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + exit (1); + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 0) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + exit (1); + } + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-posix_spawn1.in.sh b/coreseek/m4-1.4.13/tests/test-posix_spawn1.in.sh new file mode 100644 index 0000000..b370856 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-posix_spawn1.in.sh @@ -0,0 +1,2 @@ +#!/bin/sh +echo "Halle Potta" diff --git a/coreseek/m4-1.4.13/tests/test-posix_spawn1.sh b/coreseek/m4-1.4.13/tests/test-posix_spawn1.sh new file mode 100644 index 0000000..b370856 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-posix_spawn1.sh @@ -0,0 +1,2 @@ +#!/bin/sh +echo "Halle Potta" diff --git a/coreseek/m4-1.4.13/tests/test-posix_spawn2.c b/coreseek/m4-1.4.13/tests/test-posix_spawn2.c new file mode 100644 index 0000000..ca57713 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-posix_spawn2.c @@ -0,0 +1,139 @@ +/* Test of posix_spawn() function. + Copyright (C) 2008, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern char **environ; + +#define CHILD_PROGRAM_FILENAME "test-posix_spawn2.sh" + +static int +fd_safer (int fd) +{ + if (0 <= fd && fd <= 2) + { + int f = fd_safer (dup (fd)); + int e = errno; + close (fd); + errno = e; + fd = f; + } + + return fd; +} + +int +main () +{ + char *argv[3] = { "/bin/sh", CHILD_PROGRAM_FILENAME, NULL }; + int ofd[2]; + sigset_t blocked_signals; + sigset_t fatal_signal_set; + posix_spawn_file_actions_t actions; + bool actions_allocated; + posix_spawnattr_t attrs; + bool attrs_allocated; + int err; + pid_t child; + int fd; + FILE *fp; + int written; + int status; + int exitstatus; + + if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) + { + perror ("cannot create pipe"); + exit (1); + } + sigprocmask (SIG_SETMASK, NULL, &blocked_signals); + sigemptyset (&fatal_signal_set); + sigaddset (&fatal_signal_set, SIGINT); + sigaddset (&fatal_signal_set, SIGTERM); + sigaddset (&fatal_signal_set, SIGHUP); + sigaddset (&fatal_signal_set, SIGPIPE); + sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); + actions_allocated = false; + attrs_allocated = false; + if ((err = posix_spawn_file_actions_init (&actions)) != 0 + || (actions_allocated = true, + (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 + || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 + || (err = posix_spawnattr_init (&attrs)) != 0 + || (attrs_allocated = true, + (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 + || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) + || (err = posix_spawnp (&child, "/bin/sh", &actions, &attrs, argv, environ)) != 0)) + { + if (actions_allocated) + posix_spawn_file_actions_destroy (&actions); + if (attrs_allocated) + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + errno = err; + perror ("subprocess failed"); + exit (1); + } + posix_spawn_file_actions_destroy (&actions); + posix_spawnattr_destroy (&attrs); + sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); + close (ofd[0]); + fd = ofd[1]; + fp = fdopen (fd, "w"); + if (fp == NULL) + { + fprintf (stderr, "fdopen() failed\n"); + exit (1); + } + written = fwrite ("Halle Potta\n", 1, 12, fp); + if (written < 12) + { + fprintf (stderr, "could not write input\n"); + exit (1); + } + fclose (fp); + status = 0; + while (waitpid (child, &status, 0) != child) + ; + if (!WIFEXITED (status)) + { + fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); + exit (1); + } + exitstatus = WEXITSTATUS (status); + if (exitstatus != 0) + { + fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); + exit (1); + } + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-posix_spawn2.in.sh b/coreseek/m4-1.4.13/tests/test-posix_spawn2.in.sh new file mode 100644 index 0000000..29a9b28 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-posix_spawn2.in.sh @@ -0,0 +1,3 @@ +#!/bin/sh +read line +test "$line" = "Halle Potta" diff --git a/coreseek/m4-1.4.13/tests/test-posix_spawn2.sh b/coreseek/m4-1.4.13/tests/test-posix_spawn2.sh new file mode 100644 index 0000000..29a9b28 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-posix_spawn2.sh @@ -0,0 +1,3 @@ +#!/bin/sh +read line +test "$line" = "Halle Potta" diff --git a/coreseek/m4-1.4.13/tests/test-printf-frexp.c b/coreseek/m4-1.4.13/tests/test-printf-frexp.c new file mode 100644 index 0000000..8ba9348 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-printf-frexp.c @@ -0,0 +1,131 @@ +/* Test of splitting a double into fraction and mantissa. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "printf-frexp.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static double +my_ldexp (double x, int d) +{ + for (; d > 0; d--) + x *= 2.0; + for (; d < 0; d++) + x *= 0.5; + return x; +} + +int +main () +{ + int i; + /* The use of 'volatile' guarantees that excess precision bits are dropped + when dealing with denormalized numbers. It is necessary on x86 systems + where double-floats are not IEEE compliant by default, to avoid that the + results become platform and compiler option dependent. 'volatile' is a + portable alternative to gcc's -ffloat-store option. */ + volatile double x; + + for (i = 1, x = 1.0; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.0); + } + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.0); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == DBL_MIN_EXP - 1); + ASSERT (mantissa == my_ldexp (1.0, i - DBL_MIN_EXP)); + } + + for (i = 1, x = 1.01; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.01); + } + for (i = 1, x = 1.01; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.01); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == DBL_MIN_EXP - 1); + ASSERT (mantissa >= my_ldexp (1.0, i - DBL_MIN_EXP)); + ASSERT (mantissa <= my_ldexp (2.0, i - DBL_MIN_EXP)); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + for (i = 1, x = 1.73205; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.73205); + } + for (i = 1, x = 1.73205; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.73205); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == DBL_MIN_EXP - 1); + ASSERT (mantissa >= my_ldexp (1.0, i - DBL_MIN_EXP)); + ASSERT (mantissa <= my_ldexp (2.0, i - DBL_MIN_EXP)); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-printf-frexpl.c b/coreseek/m4-1.4.13/tests/test-printf-frexpl.c new file mode 100644 index 0000000..c4c156a --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-printf-frexpl.c @@ -0,0 +1,147 @@ +/* Test of splitting a 'long double' into fraction and mantissa. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "printf-frexpl.h" + +#include +#include +#include + +#include "fpucw.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable + exponent for 'long double' is -964. Similarly, on PowerPC machines, + LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' + is -968. For exponents below that, the precision may be truncated to the + precision used for 'double'. */ +#ifdef __sgi +# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57) +# define MIN_SUBNORMAL_EXP MIN_NORMAL_EXP +#elif defined __ppc || defined __ppc__ || defined __powerpc || defined __powerpc__ +# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 53) +# define MIN_SUBNORMAL_EXP MIN_NORMAL_EXP +#else +# define MIN_NORMAL_EXP LDBL_MIN_EXP +# define MIN_SUBNORMAL_EXP (LDBL_MIN_EXP - 100) +#endif + +static long double +my_ldexp (long double x, int d) +{ + for (; d > 0; d--) + x *= 2.0L; + for (; d < 0; d++) + x *= 0.5L; + return x; +} + +int +main () +{ + int i; + long double x; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + for (i = 1, x = 1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.0L); + } + for (i = 1, x = 1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.0L); + } + for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == LDBL_MIN_EXP - 1); + ASSERT (mantissa == my_ldexp (1.0L, i - LDBL_MIN_EXP)); + } + + for (i = 1, x = 1.01L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.01L); + } + for (i = 1, x = 1.01L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.01L); + } + for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == LDBL_MIN_EXP - 1); + ASSERT (mantissa >= my_ldexp (1.0L, i - LDBL_MIN_EXP)); + ASSERT (mantissa <= my_ldexp (2.0L, i - LDBL_MIN_EXP)); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + for (i = 1, x = 1.73205L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.73205L); + } + for (i = 1, x = 1.73205L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.73205L); + } + for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == LDBL_MIN_EXP - 1); + ASSERT (mantissa >= my_ldexp (1.0L, i - LDBL_MIN_EXP)); + ASSERT (mantissa <= my_ldexp (2.0L, i - LDBL_MIN_EXP)); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-quotearg.c b/coreseek/m4-1.4.13/tests/test-quotearg.c new file mode 100644 index 0000000..73bb1f9 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-quotearg.c @@ -0,0 +1,323 @@ +/* Test of quotearg family of functions. + Copyright (C) 2008-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake , 2008. */ + +#include + +#include "quotearg.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "progname.h" +#include "gettext.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +struct result_strings { + char const *str1; /* Translation of "". */ + char const *str2; /* Translation of "\0""1\0". */ + size_t len2; /* Length of str2. */ + char const *str3; /* Translation of "simple". */ + char const *str4; /* Translation of " \t\n'\"\033?""?/\\". */ + char const *str5; /* Translation of "a:b". */ + char const *str6; /* Translation of "a\\b". */ +}; + +struct result_groups { + struct result_strings group1; /* Via quotearg_buffer. */ + struct result_strings group2; /* Via quotearg{,_mem}. */ + struct result_strings group3; /* Via quotearg_colon{,_mem}. */ +}; + +static struct result_strings inputs = { + "", "\0001\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b" +}; + +static struct result_groups results_g[] = { + /* literal_quoting_style */ + { { "", "\0""1\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b" }, + { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b" }, + { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b" } }, + + /* shell_quoting_style */ + { { "''", "\0""1\0", 3, "simple", "' \t\n'\\''\"\033?""?/\\'", "a:b", + "'a\\b'" }, + { "''", "1", 1, "simple", "' \t\n'\\''\"\033?""?/\\'", "a:b", + "'a\\b'" }, + { "''", "1", 1, "simple", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", + "'a\\b'" } }, + + /* shell_always_quoting_style */ + { { "''", "'\0""1\0'", 5, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", + "'a\\b'" }, + { "''", "'1'", 3, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", + "'a\\b'" }, + { "''", "'1'", 3, "'simple'", "' \t\n'\\''\"\033?""?/\\'", "'a:b'", + "'a\\b'" } }, + + /* c_quoting_style */ + { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"" } }, + + /* c_maybe_quoting_style */ + { { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "a:b", "a\\b" }, + { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "a:b", "a\\b" }, + { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "\"a:b\"", "a\\b" } }, + + /* escape_quoting_style */ + { { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", + "a\\\\b" }, + { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a:b", + "a\\\\b" }, + { "", "\\0001\\0", 7, "simple", " \\t\\n'\"\\033?""?/\\\\", "a\\:b", + "a\\\\b" } }, + + /* locale_quoting_style */ + { { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", + "`a:b'", "`a\\\\b'" }, + { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", + "`a:b'", "`a\\\\b'" }, + { "`'", "`\\0001\\0'", 9, "`simple'", "` \\t\\n\\'\"\\033?""?/\\\\'", + "`a\\:b'", "`a\\\\b'" } }, + + /* clocale_quoting_style */ + { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a:b\"", "\"a\\\\b\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?""?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"" } } +}; + +static struct result_groups flag_results[] = { + /* literal_quoting_style and QA_ELIDE_NULL_BYTES */ + { { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b" }, + { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b" }, + { "", "1", 1, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b" } }, + + /* c_quoting_style and QA_ELIDE_OUTER_QUOTES */ + { { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "a:b", "a\\b" }, + { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "a:b", "a\\b" }, + { "", "\"\\0001\\0\"", 9, "simple", "\" \\t\\n'\\\"\\033?""?/\\\\\"", + "\"a:b\"", "a\\b" } }, + + /* c_quoting_style and QA_SPLIT_TRIGRAPHS */ + { { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a:b\"", "\"a\\\\b\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a:b\"", "\"a\\\\b\"" }, + { "\"\"", "\"\\0001\\0\"", 9, "\"simple\"", + "\" \\t\\n'\\\"\\033?\"\"?/\\\\\"", "\"a\\:b\"", "\"a\\\\b\"" } } +}; + +#if ENABLE_NLS + +/* These quotes are borrowed from a pt_PT.utf8 translation. */ +# define LQ "\302\253" +# define RQ "\302\273" + +static struct result_groups locale_results[] = { + /* locale_quoting_style */ + { { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ }, + { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ }, + { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a\\:b" RQ, LQ "a\\\\b" RQ } }, + + /* clocale_quoting_style */ + { { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ }, + { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a:b" RQ, LQ "a\\\\b" RQ }, + { LQ RQ, LQ "\\0001\\0" RQ, 11, LQ "simple" RQ, + LQ " \\t\\n'\"\\033?""?/\\\\" RQ, LQ "a\\:b" RQ, LQ "a\\\\b" RQ } } +}; + +#endif /* ENABLE_NLS */ + +static void +compare (char const *a, size_t la, char const *b, size_t lb) +{ + ASSERT (la == lb); + ASSERT (memcmp (a, b, la) == 0); + ASSERT (b[lb] == '\0'); +} + +static void +compare_strings (char *(func) (char const *, size_t *), + struct result_strings *results) +{ + size_t len; + char *p; + + len = 0; + p = func (inputs.str1, &len); + compare (results->str1, strlen (results->str1), p, len); + + len = inputs.len2; + p = func (inputs.str2, &len); + compare (results->str2, results->len2, p, len); + + len = SIZE_MAX; + p = func (inputs.str3, &len); + compare (results->str3, strlen (results->str3), p, len); + + len = strlen (inputs.str4); + p = func (inputs.str4, &len); + compare (results->str4, strlen (results->str4), p, len); + + len = SIZE_MAX; + p = func (inputs.str5, &len); + compare (results->str5, strlen (results->str5), p, len); + + len = strlen (inputs.str6); + p = func (inputs.str6, &len); + compare (results->str6, strlen (results->str6), p, len); +} + +static char * +use_quotearg_buffer (const char *str, size_t *len) +{ + static char buf[100]; + size_t size; + memset (buf, 0xa5, 100); + size = quotearg_buffer (buf, 100, str, *len, NULL); + *len = size; + ASSERT ((unsigned char) buf[size + 1] == 0xa5); + return buf; +} + +static char * +use_quotearg (const char *str, size_t *len) +{ + char *p = *len == SIZE_MAX ? quotearg (str) : quotearg_mem (str, *len); + *len = strlen (p); + return p; +} + +static char * +use_quotearg_colon (const char *str, size_t *len) +{ + char *p = (*len == SIZE_MAX ? quotearg_colon (str) + : quotearg_colon_mem (str, *len)); + *len = strlen (p); + return p; +} + +int +main (int argc, char *argv[]) +{ + int i; + + set_program_name (argv[0]); + + /* This program part is hard-wired to the C locale since it does not call + setlocale. */ + ASSERT (!isprint ('\033')); + for (i = literal_quoting_style; i <= clocale_quoting_style; i++) + { + set_quoting_style (NULL, i); + compare_strings (use_quotearg_buffer, &results_g[i].group1); + compare_strings (use_quotearg, &results_g[i].group2); + compare_strings (use_quotearg_colon, &results_g[i].group3); + } + + set_quoting_style (NULL, literal_quoting_style); + ASSERT (set_quoting_flags (NULL, QA_ELIDE_NULL_BYTES) == 0); + compare_strings (use_quotearg_buffer, &flag_results[0].group1); + compare_strings (use_quotearg, &flag_results[0].group2); + compare_strings (use_quotearg_colon, &flag_results[0].group3); + + set_quoting_style (NULL, c_quoting_style); + ASSERT (set_quoting_flags (NULL, QA_ELIDE_OUTER_QUOTES) + == QA_ELIDE_NULL_BYTES); + compare_strings (use_quotearg_buffer, &flag_results[1].group1); + compare_strings (use_quotearg, &flag_results[1].group2); + compare_strings (use_quotearg_colon, &flag_results[1].group3); + + ASSERT (set_quoting_flags (NULL, QA_SPLIT_TRIGRAPHS) + == QA_ELIDE_OUTER_QUOTES); + compare_strings (use_quotearg_buffer, &flag_results[2].group1); + compare_strings (use_quotearg, &flag_results[2].group2); + compare_strings (use_quotearg_colon, &flag_results[2].group3); + + ASSERT (set_quoting_flags (NULL, 0) == QA_SPLIT_TRIGRAPHS); + +#if ENABLE_NLS + /* Clean up environment. */ + unsetenv ("LANGUAGE"); + unsetenv ("LC_ALL"); + unsetenv ("LC_MESSAGES"); + unsetenv ("LC_CTYPE"); + unsetenv ("LANG"); + unsetenv ("OUTPUT_CHARSET"); + + /* This program part runs in a French UTF-8 locale. It uses + the test-quotearg.mo message catalog. */ + { + const char *locale_name = getenv ("LOCALE"); + + if (locale_name != NULL && strcmp (locale_name, "none") != 0 + && setenv ("LC_ALL", locale_name, 1) == 0 + && setlocale (LC_ALL, "") != NULL) + { + textdomain ("test-quotearg"); + bindtextdomain ("test-quotearg", getenv ("LOCALEDIR")); + + set_quoting_style (NULL, locale_quoting_style); + compare_strings (use_quotearg_buffer, &locale_results[0].group1); + compare_strings (use_quotearg, &locale_results[0].group2); + compare_strings (use_quotearg_colon, &locale_results[0].group3); + + set_quoting_style (NULL, clocale_quoting_style); + compare_strings (use_quotearg_buffer, &locale_results[1].group1); + compare_strings (use_quotearg, &locale_results[1].group2); + compare_strings (use_quotearg_colon, &locale_results[1].group3); + } + } +#endif /* ENABLE_NLS */ + + quotearg_free (); + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-quotearg.sh b/coreseek/m4-1.4.13/tests/test-quotearg.sh new file mode 100755 index 0000000..e050d07 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-quotearg.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Choose an existing locale. The locale encoding does not matter; see the +# comment in test-quotearg.po. +if test $LOCALE_FR_UTF8 != none; then + locale=$LOCALE_FR_UTF8 +else + if test $LOCALE_FR != none; then + locale=$LOCALE_FR + else + locale=none + fi +fi + +LOCALE=$locale LOCALEDIR="$srcdir/locale" \ +./test-quotearg${EXEEXT} diff --git a/coreseek/m4-1.4.13/tests/test-rawmemchr.c b/coreseek/m4-1.4.13/tests/test-rawmemchr.c new file mode 100644 index 0000000..34e70ef --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-rawmemchr.c @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2008 Free Software Foundation + * Written by Eric Blake and Bruno Haible + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +#include + +#include + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Calculating void * + int is not portable, so this wrapper converts + to char * to make the tests easier to write. */ +#define RAWMEMCHR (char *) rawmemchr + +int +main () +{ + size_t n = 0x100000; + char *input = malloc (n + 1); + ASSERT (input); + + input[0] = 'a'; + input[1] = 'b'; + memset (input + 2, 'c', 1024); + memset (input + 1026, 'd', n - 1028); + input[n - 2] = 'e'; + input[n - 1] = 'a'; + input[n] = '\0'; + + /* Basic behavior tests. */ + ASSERT (RAWMEMCHR (input, 'a') == input); + ASSERT (RAWMEMCHR (input, 'b') == input + 1); + ASSERT (RAWMEMCHR (input, 'c') == input + 2); + ASSERT (RAWMEMCHR (input, 'd') == input + 1026); + + ASSERT (RAWMEMCHR (input + 1, 'a') == input + n - 1); + ASSERT (RAWMEMCHR (input + 1, 'e') == input + n - 2); + + ASSERT (RAWMEMCHR (input, '\0') == input + n); + + /* Alignment tests. */ + { + int i, j; + for (i = 0; i < 32; i++) + { + for (j = 0; j < 256; j++) + input[i + j] = j; + for (j = 0; j < 256; j++) + { + ASSERT (RAWMEMCHR (input + i, j) == input + i + j); + } + } + } + + free (input); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-sched.c b/coreseek/m4-1.4.13/tests/test-sched.c new file mode 100644 index 0000000..6bec1f7 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-sched.c @@ -0,0 +1,38 @@ +/* Test of substitute. + Copyright (C) 2008-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +/* Check that 'struct sched_param' is defined. */ +static struct sched_param a; + +/* Check that the SCHED_* macros are defined and compile-time constants. */ +int b[] = { SCHED_FIFO, SCHED_RR, SCHED_OTHER }; + +static int f1; + +int +main () +{ + /* Check fields of 'struct sched_param'. */ + f1 = a.sched_priority; + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-sigaction.c b/coreseek/m4-1.4.13/tests/test-sigaction.c new file mode 100644 index 0000000..c06e6f7 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-sigaction.c @@ -0,0 +1,124 @@ +/* Test of sigaction() function. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake , 2008. */ + +#include + +#include + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + signal (SIGABRT, SIG_DFL); \ + abort (); \ + } \ + } \ + while (0) + +#ifndef SA_NOCLDSTOP +# define SA_NOCLDSTOP 0 +#endif +#ifndef SA_ONSTACK +# define SA_ONSTACK 0 +#endif +#ifndef SA_SIGINFO +# define SA_SIGINFO 0 +#endif +#ifndef SA_NOCLDWAIT +# define SA_NOCLDWAIT 0 +#endif + +/* Define a mask of flags required by POSIX. Some implementations + provide other flags as extensions, such as SA_RESTORER, that we + must ignore in this test. */ +#define MASK_SA_FLAGS (SA_NOCLDSTOP | SA_ONSTACK | SA_RESETHAND | SA_RESTART \ + | SA_SIGINFO | SA_NOCLDWAIT | SA_NODEFER) + +/* This test is unsafe in the presence of an asynchronous SIGABRT, + because we install a signal-handler that is intentionally not + async-safe. Hopefully, this does not lead to too many reports of + false failures, since people don't generally use 'kill -s SIGABRT' + to end a runaway program. */ + +static void +handler (int sig) +{ + static int entry_count; + struct sigaction sa; + ASSERT (sig == SIGABRT); + ASSERT (sigaction (SIGABRT, NULL, &sa) == 0); + ASSERT ((sa.sa_flags & SA_SIGINFO) == 0); + switch (entry_count++) + { + case 0: + ASSERT ((sa.sa_flags & SA_RESETHAND) == 0); + ASSERT (sa.sa_handler == handler); + break; + case 1: + /* This assertion fails on glibc-2.3.6 systems with LinuxThreads, + when this program is linked with -lpthread, due to the sigaction() + override in libpthread.so. */ +#if !defined __GLIBC__ + ASSERT (sa.sa_handler == SIG_DFL); +#endif + break; + default: + ASSERT (0); + } +} + +int +main (int argc, char *argv[]) +{ + struct sigaction sa; + struct sigaction old_sa; + sa.sa_handler = handler; + + sa.sa_flags = 0; + ASSERT (sigemptyset (&sa.sa_mask) == 0); + ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); + ASSERT (raise (SIGABRT) == 0); + + sa.sa_flags = SA_RESETHAND | SA_NODEFER; + ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0); + ASSERT ((old_sa.sa_flags & MASK_SA_FLAGS) == 0); + ASSERT (old_sa.sa_handler == handler); + ASSERT (raise (SIGABRT) == 0); + + sa.sa_handler = SIG_DFL; + ASSERT (sigaction (SIGABRT, &sa, &old_sa) == 0); + ASSERT ((old_sa.sa_flags & SA_SIGINFO) == 0); +#if !defined __GLIBC__ /* see above */ + ASSERT (old_sa.sa_handler == SIG_DFL); +#endif + + sa.sa_handler = SIG_IGN; + ASSERT (sigaction (SIGABRT, &sa, NULL) == 0); + ASSERT (raise (SIGABRT) == 0); + ASSERT (sigaction (SIGABRT, NULL, &old_sa) == 0); + ASSERT (old_sa.sa_handler == SIG_IGN); + ASSERT (raise (SIGABRT) == 0); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-signal.c b/coreseek/m4-1.4.13/tests/test-signal.c new file mode 100644 index 0000000..4bc13ab --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-signal.c @@ -0,0 +1,28 @@ +/* Test of substitute. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Eric Blake , 2009. */ + +#include + +#include + +volatile sig_atomic_t s; + +int main () +{ + return s; +} diff --git a/coreseek/m4-1.4.13/tests/test-signbit.c b/coreseek/m4-1.4.13/tests/test-signbit.c new file mode 100644 index 0000000..97f68e6 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-signbit.c @@ -0,0 +1,204 @@ +/* Test of signbit() substitute. + Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +float zerof = 0.0f; +double zerod = 0.0; +long double zerol = 0.0L; + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zerof instead. */ + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zerod instead. */ + +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. + IRIX cc can't put -0.0L into .data, but can compute at runtime. + Note that the expression -LDBL_MIN * LDBL_MIN does not work on other + platforms, such as when cross-compiling to PowerPC on MacOS X 10.5. */ +#if defined __hpux || defined __sgi +static long double +compute_minus_zerol (void) +{ + return -LDBL_MIN * LDBL_MIN; +} +# define minus_zerol compute_minus_zerol () +#else +long double minus_zerol = -0.0L; +#endif + +static void +test_signbitf () +{ + /* Finite values. */ + ASSERT (!signbit (3.141f)); + ASSERT (!signbit (3.141e30f)); + ASSERT (!signbit (3.141e-30f)); + ASSERT (signbit (-2.718f)); + ASSERT (signbit (-2.718e30f)); + ASSERT (signbit (-2.718e-30f)); + /* Zeros. */ + ASSERT (!signbit (0.0f)); + if (1.0f / -zerof < 0) + ASSERT (signbit (-zerof)); + else + ASSERT (!signbit (-zerof)); + /* Infinite values. */ + ASSERT (!signbit (1.0f / 0.0f)); + ASSERT (signbit (-1.0f / 0.0f)); + /* Quiet NaN. */ + (void) signbit (zerof / zerof); +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { float value; unsigned int word[NWORDS]; } memory_float; + memory_float m; + m.value = zerof / zerof; +# if FLT_EXPBIT0_BIT > 0 + m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); +# else + m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + if (FLT_EXPBIT0_WORD < NWORDS / 2) + m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; + else + m.word[0] |= (unsigned int) 1; + (void) signbit (m.value); + #undef NWORDS + } +#endif +} + +static void +test_signbitd () +{ + /* Finite values. */ + ASSERT (!signbit (3.141)); + ASSERT (!signbit (3.141e30)); + ASSERT (!signbit (3.141e-30)); + ASSERT (signbit (-2.718)); + ASSERT (signbit (-2.718e30)); + ASSERT (signbit (-2.718e-30)); + /* Zeros. */ + ASSERT (!signbit (0.0)); + if (1.0 / -zerod < 0) + ASSERT (signbit (-zerod)); + else + ASSERT (!signbit (-zerod)); + /* Infinite values. */ + ASSERT (!signbit (1.0 / 0.0)); + ASSERT (signbit (-1.0 / 0.0)); + /* Quiet NaN. */ + (void) signbit (zerod / zerod); +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { double value; unsigned int word[NWORDS]; } memory_double; + memory_double m; + m.value = zerod / zerod; +# if DBL_EXPBIT0_BIT > 0 + m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); +# else + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << DBL_EXPBIT0_BIT; + (void) signbit (m.value); + #undef NWORDS + } +#endif +} + +static void +test_signbitl () +{ + /* Finite values. */ + ASSERT (!signbit (3.141L)); + ASSERT (!signbit (3.141e30L)); + ASSERT (!signbit (3.141e-30L)); + ASSERT (signbit (-2.718L)); + ASSERT (signbit (-2.718e30L)); + ASSERT (signbit (-2.718e-30L)); + /* Zeros. */ + ASSERT (!signbit (0.0L)); + if (1.0L / minus_zerol < 0) + ASSERT (signbit (minus_zerol)); + else + ASSERT (!signbit (minus_zerol)); + /* Infinite values. */ + ASSERT (!signbit (1.0L / 0.0L)); + ASSERT (signbit (-1.0L / 0.0L)); + /* Quiet NaN. */ + (void) signbit (zerol / zerol); +#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; + memory_long_double m; + m.value = zerol / zerol; +# if LDBL_EXPBIT0_BIT > 0 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); +# else + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; + (void) signbit (m.value); + #undef NWORDS + } +#endif +} + +int +main () +{ + test_signbitf (); + test_signbitd (); + test_signbitl (); + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-snprintf.c b/coreseek/m4-1.4.13/tests/test-snprintf.c new file mode 100644 index 0000000..790c999 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-snprintf.c @@ -0,0 +1,72 @@ +/* Test of snprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + char buf[8]; + int size; + int retval; + + for (size = 0; size <= 8; size++) + { + memcpy (buf, "DEADBEEF", 8); + retval = snprintf (buf, size, "%d", 12345); + if (size < 6) + { +#if CHECK_SNPRINTF_POSIX + ASSERT (retval < 0 || retval >= size); +#endif + if (size > 0) + { + ASSERT (memcmp (buf, "12345", size - 1) == 0); + ASSERT (buf[size - 1] == '\0' || buf[size - 1] == '0' + size); + } +#if !CHECK_SNPRINTF_POSIX + if (size > 0) +#endif + ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0); + } + else + { + ASSERT (retval == 5); + ASSERT (memcmp (buf, "12345\0EF", 8) == 0); + } + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-stdbool.c b/coreseek/m4-1.4.13/tests/test-stdbool.c new file mode 100644 index 0000000..30d5321 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-stdbool.c @@ -0,0 +1,95 @@ +/* Test of substitute. + Copyright (C) 2002-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + +#if 0 /* Cannot be guaranteed with gnulib's . */ +struct s { _Bool s: 1; _Bool t; } s; +#endif + +char a[true == 1 ? 1 : -1]; +char b[false == 0 ? 1 : -1]; +char c[__bool_true_false_are_defined == 1 ? 1 : -1]; +#if 0 /* Cannot be guaranteed with gnulib's . */ +char d[(bool) 0.5 == true ? 1 : -1]; +bool e = &s; +#endif +char f[(_Bool) 0.0 == false ? 1 : -1]; +char g[true]; +char h[sizeof (_Bool)]; +#if 0 /* See above. */ +char i[sizeof s.t]; +#endif +enum { j = false, k = true, l = false * true, m = true * 256 }; +_Bool n[m]; +char o[sizeof n == m * sizeof n[0] ? 1 : -1]; +char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; +#if 0 /* Cannot be guaranteed with gnulib's . */ +#if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); +#endif +#endif +/* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ +_Bool q = true; +_Bool *pq = &q; + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-stdint.c b/coreseek/m4-1.4.13/tests/test-stdint.c new file mode 100644 index 0000000..a2bf42a --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-stdint.c @@ -0,0 +1,360 @@ +/* Test of substitute. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2006. */ + +#include + +/* Whether to enable pedantic checks. */ +#define DO_PEDANTIC 0 + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#include + +#include "verify.h" +#include "intprops.h" + +#if __GNUC__ >= 2 && DO_PEDANTIC +# define verify_same_types(expr1,expr2) \ + extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \ + extern void _verify_func(__LINE__) (__typeof__ (expr2) *); +# define _verify_func(line) _verify_func2(line) +# define _verify_func2(line) verify_func_ ## line +#else +# define verify_same_types(expr1,expr2) extern void verify_func (int) +#endif + +/* 7.18.1.1. Exact-width integer types */ +/* 7.18.2.1. Limits of exact-width integer types */ + +int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX }; +verify (TYPE_MINIMUM (int8_t) == INT8_MIN); +verify (TYPE_MAXIMUM (int8_t) == INT8_MAX); +verify_same_types (INT8_MIN, (int8_t) 0 + 0); +verify_same_types (INT8_MAX, (int8_t) 0 + 0); + +int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX }; +verify (TYPE_MINIMUM (int16_t) == INT16_MIN); +verify (TYPE_MAXIMUM (int16_t) == INT16_MAX); +verify_same_types (INT16_MIN, (int16_t) 0 + 0); +verify_same_types (INT16_MAX, (int16_t) 0 + 0); + +int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX }; +verify (TYPE_MINIMUM (int32_t) == INT32_MIN); +verify (TYPE_MAXIMUM (int32_t) == INT32_MAX); +verify_same_types (INT32_MIN, (int32_t) 0 + 0); +verify_same_types (INT32_MAX, (int32_t) 0 + 0); + +#ifdef INT64_MAX +int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX }; +verify (TYPE_MINIMUM (int64_t) == INT64_MIN); +verify (TYPE_MAXIMUM (int64_t) == INT64_MAX); +verify_same_types (INT64_MIN, (int64_t) 0 + 0); +verify_same_types (INT64_MAX, (int64_t) 0 + 0); +#endif + +uint8_t b1[2] = { UINT8_C (17), UINT8_MAX }; +verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX); +verify_same_types (UINT8_MAX, (uint8_t) 0 + 0); + +uint16_t b2[2] = { UINT16_C (17), UINT16_MAX }; +verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX); +verify_same_types (UINT16_MAX, (uint16_t) 0 + 0); + +uint32_t b3[2] = { UINT32_C (17), UINT32_MAX }; +verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX); +verify_same_types (UINT32_MAX, (uint32_t) 0 + 0); + +#ifdef UINT64_MAX +uint64_t b4[2] = { UINT64_C (17), UINT64_MAX }; +verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX); +verify_same_types (UINT64_MAX, (uint64_t) 0 + 0); +#endif + +#if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT8_MAX && UINT16_MAX && UINT32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.2. Minimum-width integer types */ +/* 7.18.2.2. Limits of minimum-width integer types */ + +int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX }; +verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN); +verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX); +verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0); +verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0); + +int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX }; +verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN); +verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX); +verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0); +verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0); + +int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX }; +verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN); +verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX); +verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0); +verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0); + +#ifdef INT_LEAST64_MAX +int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX }; +verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN); +verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX); +verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0); +verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0); +#endif + +uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX }; +verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX); +verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0); + +uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX }; +verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX); +verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0); + +uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX }; +verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX); +verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0); + +#ifdef UINT_LEAST64_MAX +uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX }; +verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX); +verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0); +#endif + +#if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.3. Fastest minimum-width integer types */ +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX }; +verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN); +verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX); +verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0); +verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0); + +int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX }; +verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN); +verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX); +verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0); +verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0); + +int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX }; +verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN); +verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX); +verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0); +verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0); + +#ifdef INT_FAST64_MAX +int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX }; +verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN); +verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX); +verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0); +verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0); +#endif + +uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX }; +verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX); +verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0); + +uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX }; +verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX); +verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0); + +uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX }; +verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX); +verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0); + +#ifdef UINT_FAST64_MAX +uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX }; +verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX); +verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0); +#endif + +#if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; +verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); +verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); +verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); +verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); + +uintptr_t h[2] = { 17, UINTPTR_MAX }; +verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); +verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); + +#if INTPTR_MIN && INTPTR_MAX && UINTPTR_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.5. Greatest-width integer types */ +/* 7.18.2.5. Limits of greatest-width integer types */ + +intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX }; +verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); +verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); +verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0); +verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0); + +uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX }; +verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); +verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0); + +/* As of 2007, Sun C and HP-UX 10.20 cc don't support 'long long' constants in + the preprocessor. */ +#if !(defined __SUNPRO_C || (defined __hpux && !defined __GNUC__)) +#if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX +/* ok */ +#else +err or; +#endif +#endif + +/* 7.18.3. Limits of other integer types */ + +#include + +verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN); +verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX); +verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0); +verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0); + +#if PTRDIFF_MIN && PTRDIFF_MAX +/* ok */ +#else +err or; +#endif + +#include + +verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN); +verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX); +verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0); +verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0); + +#if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX +/* ok */ +#else +err or; +#endif + +verify (TYPE_MAXIMUM (size_t) == SIZE_MAX); +verify_same_types (SIZE_MAX, (size_t) 0 + 0); + +#if SIZE_MAX +/* ok */ +#else +err or; +#endif + +#if HAVE_WCHAR_T +verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN); +verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX); +verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0); +verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0); + +# if WCHAR_MIN != 17 && WCHAR_MAX +/* ok */ +# else +err or; +# endif +#endif + +#if HAVE_WINT_T +# include + +verify (TYPE_MINIMUM (wint_t) == WINT_MIN); +verify (TYPE_MAXIMUM (wint_t) == WINT_MAX); +verify_same_types (WINT_MIN, (wint_t) 0 + 0); +verify_same_types (WINT_MAX, (wint_t) 0 + 0); + +# if WINT_MIN != 17 && WINT_MAX +/* ok */ +# else +err or; +# endif +#endif + +/* 7.18.4. Macros for integer constants */ + +verify (INT8_C (17) == 17); +verify_same_types (INT8_C (17), (int_least8_t)0 + 0); +verify (UINT8_C (17) == 17); +verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0); + +verify (INT16_C (17) == 17); +verify_same_types (INT16_C (17), (int_least16_t)0 + 0); +verify (UINT16_C (17) == 17); +verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0); + +verify (INT32_C (17) == 17); +verify_same_types (INT32_C (17), (int_least32_t)0 + 0); +verify (UINT32_C (17) == 17); +verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0); + +#ifdef INT64_C +verify (INT64_C (17) == 17); +verify_same_types (INT64_C (17), (int_least64_t)0 + 0); +#endif +#ifdef UINT64_C +verify (UINT64_C (17) == 17); +verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0); +#endif + +verify (INTMAX_C (17) == 17); +verify_same_types (INTMAX_C (17), (intmax_t)0 + 0); +verify (UINTMAX_C (17) == 17); +verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0); + + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-stdio.c b/coreseek/m4-1.4.13/tests/test-stdio.c new file mode 100644 index 0000000..a5efa32 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-stdio.c @@ -0,0 +1,30 @@ +/* Test of substitute. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +/* Check that the various SEEK_* macros are defined. */ +int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-stdlib.c b/coreseek/m4-1.4.13/tests/test-stdlib.c new file mode 100644 index 0000000..e103d46 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-stdlib.c @@ -0,0 +1,37 @@ +/* Test of substitute. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +int exitcode; + +int +main () +{ + /* Check that some macros are defined and different integer constants. */ + switch (exitcode) + { + case EXIT_SUCCESS: + case EXIT_FAILURE: + break; + } + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-strchrnul.c b/coreseek/m4-1.4.13/tests/test-strchrnul.c new file mode 100644 index 0000000..dc55066 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-strchrnul.c @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2008 Free Software Foundation + * Written by Eric Blake and Bruno Haible + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +#include + +#include + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + size_t n = 0x100000; + char *input = malloc (n + 1); + ASSERT (input); + + input[0] = 'a'; + input[1] = 'b'; + memset (input + 2, 'c', 1024); + memset (input + 1026, 'd', n - 1028); + input[n - 2] = 'e'; + input[n - 1] = 'a'; + input[n] = '\0'; + + /* Basic behavior tests. */ + ASSERT (strchrnul (input, 'a') == input); + ASSERT (strchrnul (input, 'b') == input + 1); + ASSERT (strchrnul (input, 'c') == input + 2); + ASSERT (strchrnul (input, 'd') == input + 1026); + + ASSERT (strchrnul (input + 1, 'a') == input + n - 1); + ASSERT (strchrnul (input + 1, 'e') == input + n - 2); + + ASSERT (strchrnul (input, 'f') == input + n); + ASSERT (strchrnul (input, '\0') == input + n); + + /* Check that a very long haystack is handled quickly if the byte is + found near the beginning. */ + { + size_t repeat = 10000; + for (; repeat > 0; repeat--) + { + ASSERT (strchrnul (input, 'c') == input + 2); + } + } + + /* Alignment tests. */ + { + int i, j; + for (i = 0; i < 32; i++) + { + for (j = 0; j < 256; j++) + input[i + j] = (j + 1) & 0xff; + for (j = 1; j < 256; j++) + { + ASSERT (strchrnul (input + i, j) == input + i + j - 1); + input[i + j - 1] = (j == 1 ? 2 : 1); + ASSERT (strchrnul (input + i, j) == input + i + 255); + input[i + j - 1] = j; + } + } + } + + free (input); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-strerror.c b/coreseek/m4-1.4.13/tests/test-strerror.c new file mode 100644 index 0000000..3d9814d --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-strerror.c @@ -0,0 +1,65 @@ +/* Test of strerror() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake , 2007. */ + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char **argv) +{ + char *str; + + str = strerror (EACCES); + ASSERT (str); + ASSERT (*str); + + str = strerror (ETIMEDOUT); + ASSERT (str); + ASSERT (*str); + + str = strerror (EOVERFLOW); + ASSERT (str); + ASSERT (*str); + + str = strerror (0); + ASSERT (str); + ASSERT (*str); + + str = strerror (-3); + ASSERT (str); + ASSERT (*str); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-string.c b/coreseek/m4-1.4.13/tests/test-string.c new file mode 100644 index 0000000..68014f5 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-string.c @@ -0,0 +1,27 @@ +/* Test of substitute. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-strsignal.c b/coreseek/m4-1.4.13/tests/test-strsignal.c new file mode 100644 index 0000000..8868346 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-strsignal.c @@ -0,0 +1,86 @@ +/* Test of strsignal() function. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Colin Watson , 2008. */ + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#if HAVE_DECL_SYS_SIGLIST +# define ASSERT_DESCRIPTION(got, expect) +#else +/* In this case, we can guarantee some signal descriptions. */ +# define ASSERT_DESCRIPTION(got, expect) ASSERT (!strcmp (got, expect)) +#endif + +int +main (int argc, char **argv) +{ + /* Work around bug in cygwin 1.5.25 by declaring str as + const char *, even though strsignal is supposed to return char *. + At any rate, this doesn't hurt, since POSIX 200x states that "The + string pointed to shall not be modified by the application." */ + const char *str; + + /* We try a couple of signals, since not all signals are supported + everywhere. Notwithstanding the #ifdef for neatness, SIGINT should in + fact be available on all platforms. */ + +#ifdef SIGHUP + str = strsignal (SIGHUP); + ASSERT (str); + ASSERT (*str); + ASSERT_DESCRIPTION (str, "Hangup"); +#endif + +#ifdef SIGINT + str = strsignal (SIGINT); + ASSERT (str); + ASSERT (*str); + ASSERT_DESCRIPTION (str, "Interrupt"); +#endif + + /* Test that for out-of-range signal numbers the result is usable. */ + + str = strsignal (-1); + ASSERT (str); + ASSERT (str != (char *) -1); + ASSERT (strlen (str)); + + str = strsignal (9249234); + ASSERT (str); + ASSERT (str != (char *) -1); + ASSERT (strlen (str)); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-strstr.c b/coreseek/m4-1.4.13/tests/test-strstr.c new file mode 100644 index 0000000..8a05e88 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-strstr.c @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2004, 2007, 2008 Free Software Foundation + * Written by Bruno Haible and Eric Blake + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +#include + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. All known platforms that lack alarm also have + a quadratic strstr, and the replacement strstr is known to not + take too long. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + { + const char input[] = "foo"; + const char *result = strstr (input, ""); + ASSERT (result == input); + } + + { + const char input[] = "foo"; + const char *result = strstr (input, "o"); + ASSERT (result == input + 1); + } + + { + const char input[] = "ABC ABCDAB ABCDABCDABDE"; + const char *result = strstr (input, "ABCDABD"); + ASSERT (result == input + 15); + } + + { + const char input[] = "ABC ABCDAB ABCDABCDABDE"; + const char *result = strstr (input, "ABCDABE"); + ASSERT (result == NULL); + } + + { + const char input[] = "ABC ABCDAB ABCDABCDABDE"; + const char *result = strstr (input, "ABCDABCD"); + ASSERT (result == input + 11); + } + + /* Check that a very long haystack is handled quickly if the needle is + short and occurs near the beginning. */ + { + size_t repeat = 10000; + size_t m = 1000000; + char *needle = + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + char *haystack = (char *) malloc (m + 1); + if (haystack != NULL) + { + memset (haystack, 'A', m); + haystack[0] = 'B'; + haystack[m] = '\0'; + + for (; repeat > 0; repeat--) + { + ASSERT (strstr (haystack, needle) == haystack + 1); + } + + free (haystack); + } + } + + /* Check that a very long needle is discarded quickly if the haystack is + short. */ + { + size_t repeat = 10000; + size_t m = 1000000; + char *haystack = + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB"; + char *needle = (char *) malloc (m + 1); + if (needle != NULL) + { + memset (needle, 'A', m); + needle[m] = '\0'; + + for (; repeat > 0; repeat--) + { + ASSERT (strstr (haystack, needle) == NULL); + } + + free (needle); + } + } + + /* Check that the asymptotic worst-case complexity is not quadratic. */ + { + size_t m = 1000000; + char *haystack = (char *) malloc (2 * m + 2); + char *needle = (char *) malloc (m + 2); + if (haystack != NULL && needle != NULL) + { + const char *result; + + memset (haystack, 'A', 2 * m); + haystack[2 * m] = 'B'; + haystack[2 * m + 1] = '\0'; + + memset (needle, 'A', m); + needle[m] = 'B'; + needle[m + 1] = '\0'; + + result = strstr (haystack, needle); + ASSERT (result == haystack + m); + } + free (needle); + free (haystack); + } + + /* Sublinear speed is only possible in memmem; strstr must examine + every character of haystack to find its length. */ + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-strtod.c b/coreseek/m4-1.4.13/tests/test-strtod.c new file mode 100644 index 0000000..d99e5fe --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-strtod.c @@ -0,0 +1,927 @@ +/* + * Copyright (C) 2008 Free Software Foundation + * Written by Eric Blake + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +#include + +#include + +#include +#include +#include +#include +#include + +#include "isnand-nolibm.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + /* FIXME abort ();*/status = 1; \ + } \ + } \ + while (0) + +/* Avoid requiring -lm just for fabs. */ +#define FABS(d) ((d) < 0.0 ? -(d) : (d)) + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + +int +main () +{ + int status = 0; + /* Subject sequence empty or invalid. */ + { + const char input[] = ""; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); + ASSERT (errno == 0 || errno == EINVAL); + } + { + const char input[] = " "; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); + ASSERT (errno == 0 || errno == EINVAL); + } + { + const char input[] = " +"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); + ASSERT (errno == 0 || errno == EINVAL); + } + { + const char input[] = " ."; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); + ASSERT (errno == 0 || errno == EINVAL); + } + { + const char input[] = " .e0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); /* IRIX 6.5, OSF/1 5.1 */ + ASSERT (errno == 0 || errno == EINVAL); + } + { + const char input[] = " +.e-0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); /* IRIX 6.5, OSF/1 5.1 */ + ASSERT (errno == 0 || errno == EINVAL); + } + { + const char input[] = " in"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); + ASSERT (errno == 0 || errno == EINVAL); + } + { + const char input[] = " na"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); + ASSERT (errno == 0 || errno == EINVAL); + } + + /* Simple floating point values. */ + { + const char input[] = "1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 1); + ASSERT (errno == 0); + } + { + const char input[] = "1."; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + { + const char input[] = ".5"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + /* FIXME - gnulib's version is rather inaccurate. It would be + nice to guarantee an exact result, but for now, we settle for a + 1-ulp error. */ + ASSERT (FABS (result - 0.5) < DBL_EPSILON); + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + { + const char input[] = " 1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + { + const char input[] = "+1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + { + const char input[] = "-1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == -1.0); + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + { + const char input[] = "1e0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 3); + ASSERT (errno == 0); + } + { + const char input[] = "1e+0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 4); + ASSERT (errno == 0); + } + { + const char input[] = "1e-0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 4); + ASSERT (errno == 0); + } + { + const char input[] = "1e1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 10.0); + ASSERT (ptr == input + 3); + ASSERT (errno == 0); + } + { + const char input[] = "5e-1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + /* FIXME - gnulib's version is rather inaccurate. It would be + nice to guarantee an exact result, but for now, we settle for a + 1-ulp error. */ + ASSERT (FABS (result - 0.5) < DBL_EPSILON); + ASSERT (ptr == input + 4); + ASSERT (errno == 0); + } + + /* Zero. */ + { + const char input[] = "0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 1); + ASSERT (errno == 0); + } + { + const char input[] = ".0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + { + const char input[] = "0e0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 3); + ASSERT (errno == 0); + } + { + const char input[] = "0e+9999999"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 10); + ASSERT (errno == 0); + } + { + const char input[] = "0e-9999999"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 10); + ASSERT (errno == 0); + } + { + const char input[] = "-0"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!!signbit (result) == !!signbit (-zero)); /* IRIX 6.5, OSF/1 4.0 */ + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + + /* Suffixes. */ + { + const char input[] = "1f"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 1); + ASSERT (errno == 0); + } + { + const char input[] = "1.f"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + { + const char input[] = "1e"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 1); + ASSERT (errno == 0); + } + { + const char input[] = "1e+"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 1); + ASSERT (errno == 0); + } + { + const char input[] = "1e-"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 1); + ASSERT (errno == 0); + } + { + const char input[] = "1E 2"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); /* HP-UX 11.11, IRIX 6.5, OSF/1 4.0 */ + ASSERT (ptr == input + 1); /* HP-UX 11.11, IRIX 6.5 */ + ASSERT (errno == 0); + } + { + const char input[] = "0x"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 1); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ + ASSERT (errno == 0); + } + { + const char input[] = "00x1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 2); + ASSERT (errno == 0); + } + { + const char input[] = "-0x"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!!signbit (result) == !!signbit (-zero)); /* MacOS X 10.3, FreeBSD 6.2, IRIX 6.5, OSF/1 4.0 */ + ASSERT (ptr == input + 2); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ + ASSERT (errno == 0); + } + { + const char input[] = "0xg"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 1); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ + ASSERT (errno == 0); + } + { + const char input[] = "0xp"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 1); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ + ASSERT (errno == 0); + } + { + const char input[] = "0x."; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 1); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ + ASSERT (errno == 0); + } + { + const char input[] = "0xp+"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 1); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ + ASSERT (errno == 0); + } + { + const char input[] = "0xp+1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 1); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ + ASSERT (errno == 0); + } + { + const char input[] = "0x.p+1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 1); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2 */ + ASSERT (errno == 0); + } + { + const char input[] = "1p+1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + 1); + ASSERT (errno == 0); + } + + /* Overflow/underflow. */ + { + const char input[] = "1E1000000"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == HUGE_VAL); + ASSERT (ptr == input + 9); /* OSF/1 5.1 */ + ASSERT (errno == ERANGE); + } + { + const char input[] = "-1E1000000"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == -HUGE_VAL); + ASSERT (ptr == input + 10); + ASSERT (errno == ERANGE); + } + { + const char input[] = "1E-100000"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (0.0 <= result && result <= DBL_MIN); + ASSERT (!signbit (result)); + ASSERT (ptr == input + 9); + ASSERT (errno == ERANGE); + } + { + const char input[] = "-1E-100000"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (-DBL_MIN <= result && result <= 0.0); +#if 0 + /* FIXME - this is glibc bug 5995; POSIX allows returning positive + 0 on negative underflow, even though quality of implementation + demands preserving the sign. Disable this test until fixed + glibc is more prevalent. */ + ASSERT (!!signbit (result) == !!signbit (-zero)); /* glibc-2.3.6, mingw */ +#endif + ASSERT (ptr == input + 10); + ASSERT (errno == ERANGE); + } + + /* Infinity. */ + { + const char input[] = "iNf"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr == input + 3); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw */ + ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ + } + { + const char input[] = "-InF"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == -HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr == input + 4); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 4.0, Solaris 9, mingw */ + ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ + } + { + const char input[] = "infinite"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr == input + 3); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (errno == 0); /* OSF/1 4.0 */ + } + { + const char input[] = "infinitY"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr == input + 8); /* OpenBSD 4.0, HP-UX 11.00, IRIX 6.5, OSF/1 5.1, Solaris 9, mingw */ + ASSERT (errno == 0); /* HP-UX 11.11, OSF/1 4.0 */ + } + { + const char input[] = "infinitY."; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == HUGE_VAL); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr == input + 8); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (errno == 0); /* OSF/1 4.0 */ + } + + /* NaN. Some processors set the sign bit of the default NaN, so all + we check is that using a sign changes the result. */ + { + const char input[] = "-nan"; + char *ptr1; + char *ptr2; + double result1; + double result2; + errno = 0; + result1 = strtod (input, &ptr1); + result2 = strtod (input + 1, &ptr2); +#if 1 /* All known CPUs support NaNs. */ + ASSERT (isnand (result1)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result2)); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ +# if 0 + /* Sign bits of NaN is a portability sticking point, not worth + worrying about. */ + ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ +# endif + ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ + ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ + ASSERT (errno == 0); /* HP-UX 11.11 */ +#else + ASSERT (result1 == 0.0); + ASSERT (result2 == 0.0); + ASSERT (!signbit (result1)); + ASSERT (!signbit (result2)); + ASSERT (ptr1 == input); + ASSERT (ptr2 == input + 1); + ASSERT (errno == 0 || errno == EINVAL); +#endif + } + { + const char input[] = "+nan("; + char *ptr1; + char *ptr2; + double result1; + double result2; + errno = 0; + result1 = strtod (input, &ptr1); + result2 = strtod (input + 1, &ptr2); +#if 1 /* All known CPUs support NaNs. */ + ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (!!signbit (result1) == !!signbit (result2)); + ASSERT (ptr1 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ + ASSERT (ptr2 == input + 4); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 2.5.1, mingw */ + ASSERT (errno == 0); +#else + ASSERT (result1 == 0.0); + ASSERT (result2 == 0.0); + ASSERT (!signbit (result1)); + ASSERT (!signbit (result2)); + ASSERT (ptr1 == input); + ASSERT (ptr2 == input + 1); + ASSERT (errno == 0 || errno == EINVAL); +#endif + } + { + const char input[] = "-nan()"; + char *ptr1; + char *ptr2; + double result1; + double result2; + errno = 0; + result1 = strtod (input, &ptr1); + result2 = strtod (input + 1, &ptr2); +#if 1 /* All known CPUs support NaNs. */ + ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ +# if 0 + /* Sign bits of NaN is a portability sticking point, not worth + worrying about. */ + ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ +# endif + ASSERT (ptr1 == input + 6); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr2 == input + 6); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (errno == 0); +#else + ASSERT (result1 == 0.0); + ASSERT (result2 == 0.0); + ASSERT (!signbit (result1)); + ASSERT (!signbit (result2)); + ASSERT (ptr1 == input); + ASSERT (ptr2 == input + 1); + ASSERT (errno == 0 || errno == EINVAL); +#endif + } + { + const char input[] = " nan()."; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); +#if 1 /* All known CPUs support NaNs. */ + ASSERT (isnand (result)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr == input + 6); /* glibc-2.3.6, MacOS X 10.3, FreeBSD 6.2, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (errno == 0); +#else + ASSERT (result == 0.0); + ASSERT (!signbit (result)); + ASSERT (ptr == input); + ASSERT (errno == 0 || errno == EINVAL); +#endif + } + { + /* The behavior of nan(0) is implementation-defined, but all + implementations we know of which handle optional + n-char-sequences handle nan(0) the same as nan(). */ + const char input[] = "-nan(0)."; + char *ptr1; + char *ptr2; + double result1; + double result2; + errno = 0; + result1 = strtod (input, &ptr1); + result2 = strtod (input + 1, &ptr2); +#if 1 /* All known CPUs support NaNs. */ + ASSERT (isnand (result1)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (isnand (result2)); /* OpenBSD 4.0, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ +# if 0 + /* Sign bits of NaN is a portability sticking point, not worth + worrying about. */ + ASSERT (!!signbit (result1) != !!signbit (result2)); /* glibc-2.3.6, IRIX 6.5, OSF/1 5.1, mingw */ +# endif + ASSERT (ptr1 == input + 7); /* glibc-2.3.6, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr2 == input + 7); /* glibc-2.3.6, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (errno == 0); +#else + ASSERT (result1 == 0.0); + ASSERT (result2 == 0.0); + ASSERT (!signbit (result1)); + ASSERT (!signbit (result2)); + ASSERT (ptr1 == input); + ASSERT (ptr2 == input + 1); + ASSERT (errno == 0 || errno == EINVAL); +#endif + } + + /* Hex. */ + { + const char input[] = "0xa"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 10.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (errno == 0); + } + { + const char input[] = "0XA"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 10.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (errno == 0); + } + { + const char input[] = "0x1p"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (errno == 0); + } + { + const char input[] = "0x1p+"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (ptr == input + 3); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (errno == 0); + } + { + const char input[] = "0x1p+1"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (errno == 0); + } + { + const char input[] = "0x1p+1a"; + char *ptr; + double result; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 2.0); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (ptr == input + 6); /* NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11.11, IRIX 6.5, OSF/1 5.1, Solaris 10, mingw */ + ASSERT (errno == 0); + } + + /* Large buffers. */ + { + size_t m = 1000000; + char *input = malloc (m + 1); + if (input) + { + char *ptr; + double result; + memset (input, '\t', m - 1); + input[m - 1] = '1'; + input[m] = '\0'; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + m); + ASSERT (errno == 0); + } + free (input); + } + { + size_t m = 1000000; + char *input = malloc (m + 1); + if (input) + { + char *ptr; + double result; + memset (input, '0', m - 1); + input[m - 1] = '1'; + input[m] = '\0'; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); + ASSERT (ptr == input + m); + ASSERT (errno == 0); + } + free (input); + } +#if 0 + /* Newlib has an artificial limit of 20000 for the exponent. TODO - + gnulib should fix this. */ + { + size_t m = 1000000; + char *input = malloc (m + 1); + if (input) + { + char *ptr; + double result; + input[0] = '.'; + memset (input + 1, '0', m - 10); + input[m - 9] = '1'; + input[m - 8] = 'e'; + input[m - 7] = '+'; + input[m - 6] = '9'; + input[m - 5] = '9'; + input[m - 4] = '9'; + input[m - 3] = '9'; + input[m - 2] = '9'; + input[m - 1] = '1'; + input[m] = '\0'; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); /* MacOS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr == input + m); /* OSF/1 5.1 */ + ASSERT (errno == 0); /* MacOS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + } + free (input); + } + { + size_t m = 1000000; + char *input = malloc (m + 1); + if (input) + { + char *ptr; + double result; + input[0] = '1'; + memset (input + 1, '0', m - 9); + input[m - 8] = 'e'; + input[m - 7] = '-'; + input[m - 6] = '9'; + input[m - 5] = '9'; + input[m - 4] = '9'; + input[m - 3] = '9'; + input[m - 2] = '9'; + input[m - 1] = '1'; + input[m] = '\0'; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 1.0); /* MacOS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + ASSERT (ptr == input + m); + ASSERT (errno == 0); /* MacOS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, IRIX 6.5, OSF/1 5.1, mingw */ + } + free (input); + } +#endif + { + size_t m = 1000000; + char *input = malloc (m + 1); + if (input) + { + char *ptr; + double result; + input[0] = '-'; + input[1] = '0'; + input[2] = 'e'; + input[3] = '1'; + memset (input + 4, '0', m - 3); + input[m] = '\0'; + errno = 0; + result = strtod (input, &ptr); + ASSERT (result == 0.0); + ASSERT (!!signbit (result) == !!signbit (-zero)); /* IRIX 6.5, OSF/1 4.0 */ + ASSERT (ptr == input + m); + ASSERT (errno == 0); + } + free (input); + } + + /* Rounding. */ + /* TODO - is it worth some tests of rounding for typical IEEE corner + cases, such as .5 ULP rounding up to the smallest denormal and + not causing underflow, or DBL_MIN - .5 ULP not causing an + infinite loop? */ + + return status; +} diff --git a/coreseek/m4-1.4.13/tests/test-sys_stat.c b/coreseek/m4-1.4.13/tests/test-sys_stat.c new file mode 100644 index 0000000..4b5eb76 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-sys_stat.c @@ -0,0 +1,263 @@ +/* Test of substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include "verify.h" + +/* Check the existence of some macros. */ +int a[] = + { + S_IFMT, + S_IFBLK, S_IFCHR, S_IFDIR, S_IFIFO, S_IFREG, +#ifdef S_IFLNK /* missing on mingw and djgpp */ + S_IFLNK, +#endif +#ifdef S_IFSOCK /* missing on mingw and djgpp */ + S_IFSOCK, +#endif + S_IRWXU, S_IRUSR, S_IWUSR, S_IXUSR, + S_IRWXG, S_IRGRP, S_IWGRP, S_IXGRP, + S_IRWXO, S_IROTH, S_IWOTH, S_IXOTH, + S_ISUID, S_ISGID, S_ISVTX, + S_ISBLK (S_IFREG), + S_ISCHR (S_IFREG), + S_ISDIR (S_IFREG), + S_ISFIFO (S_IFREG), + S_ISREG (S_IFREG), + S_ISLNK (S_IFREG), + S_ISSOCK (S_IFREG), + S_ISDOOR (S_IFREG), + S_ISMPB (S_IFREG), + S_ISNAM (S_IFREG), + S_ISNWK (S_IFREG), + S_ISPORT (S_IFREG), + S_ISCTG (S_IFREG), + S_ISOFD (S_IFREG), + S_ISOFL (S_IFREG), + S_ISWHT (S_IFREG) + }; + +/* Sanity checks. */ + +verify (S_IRWXU == (S_IRUSR | S_IWUSR | S_IXUSR)); +verify (S_IRWXG == (S_IRGRP | S_IWGRP | S_IXGRP)); +verify (S_IRWXO == (S_IROTH | S_IWOTH | S_IXOTH)); + +verify (S_ISBLK (S_IFBLK)); +verify (!S_ISBLK (S_IFCHR)); +verify (!S_ISBLK (S_IFDIR)); +verify (!S_ISBLK (S_IFIFO)); +verify (!S_ISBLK (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISBLK (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISBLK (S_IFSOCK)); +#endif + +verify (!S_ISCHR (S_IFBLK)); +verify (S_ISCHR (S_IFCHR)); +verify (!S_ISCHR (S_IFDIR)); +verify (!S_ISCHR (S_IFIFO)); +verify (!S_ISCHR (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISCHR (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISCHR (S_IFSOCK)); +#endif + +verify (!S_ISDIR (S_IFBLK)); +verify (!S_ISDIR (S_IFCHR)); +verify (S_ISDIR (S_IFDIR)); +verify (!S_ISDIR (S_IFIFO)); +verify (!S_ISDIR (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISDIR (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISDIR (S_IFSOCK)); +#endif + +verify (!S_ISFIFO (S_IFBLK)); +verify (!S_ISFIFO (S_IFCHR)); +verify (!S_ISFIFO (S_IFDIR)); +verify (S_ISFIFO (S_IFIFO)); +verify (!S_ISFIFO (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISFIFO (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISFIFO (S_IFSOCK)); +#endif + +verify (!S_ISREG (S_IFBLK)); +verify (!S_ISREG (S_IFCHR)); +verify (!S_ISREG (S_IFDIR)); +verify (!S_ISREG (S_IFIFO)); +verify (S_ISREG (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISREG (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISREG (S_IFSOCK)); +#endif + +verify (!S_ISLNK (S_IFBLK)); +verify (!S_ISLNK (S_IFCHR)); +verify (!S_ISLNK (S_IFDIR)); +verify (!S_ISLNK (S_IFIFO)); +verify (!S_ISLNK (S_IFREG)); +#ifdef S_IFLNK +verify (S_ISLNK (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISLNK (S_IFSOCK)); +#endif + +verify (!S_ISSOCK (S_IFBLK)); +verify (!S_ISSOCK (S_IFCHR)); +verify (!S_ISSOCK (S_IFDIR)); +verify (!S_ISSOCK (S_IFIFO)); +verify (!S_ISSOCK (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISSOCK (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (S_ISSOCK (S_IFSOCK)); +#endif + +verify (!S_ISDOOR (S_IFBLK)); +verify (!S_ISDOOR (S_IFCHR)); +verify (!S_ISDOOR (S_IFDIR)); +verify (!S_ISDOOR (S_IFIFO)); +verify (!S_ISDOOR (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISDOOR (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISDOOR (S_IFSOCK)); +#endif + +verify (!S_ISMPB (S_IFBLK)); +verify (!S_ISMPB (S_IFCHR)); +verify (!S_ISMPB (S_IFDIR)); +verify (!S_ISMPB (S_IFIFO)); +verify (!S_ISMPB (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISMPB (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISMPB (S_IFSOCK)); +#endif + +verify (!S_ISNAM (S_IFBLK)); +verify (!S_ISNAM (S_IFCHR)); +verify (!S_ISNAM (S_IFDIR)); +verify (!S_ISNAM (S_IFIFO)); +verify (!S_ISNAM (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISNAM (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISNAM (S_IFSOCK)); +#endif + +verify (!S_ISNWK (S_IFBLK)); +verify (!S_ISNWK (S_IFCHR)); +verify (!S_ISNWK (S_IFDIR)); +verify (!S_ISNWK (S_IFIFO)); +verify (!S_ISNWK (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISNWK (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISNWK (S_IFSOCK)); +#endif + +verify (!S_ISPORT (S_IFBLK)); +verify (!S_ISPORT (S_IFCHR)); +verify (!S_ISPORT (S_IFDIR)); +verify (!S_ISPORT (S_IFIFO)); +verify (!S_ISPORT (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISPORT (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISPORT (S_IFSOCK)); +#endif + +verify (!S_ISCTG (S_IFBLK)); +verify (!S_ISCTG (S_IFCHR)); +verify (!S_ISCTG (S_IFDIR)); +verify (!S_ISCTG (S_IFIFO)); +verify (!S_ISCTG (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISCTG (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISCTG (S_IFSOCK)); +#endif + +verify (!S_ISOFD (S_IFBLK)); +verify (!S_ISOFD (S_IFCHR)); +verify (!S_ISOFD (S_IFDIR)); +verify (!S_ISOFD (S_IFIFO)); +verify (!S_ISOFD (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISOFD (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISOFD (S_IFSOCK)); +#endif + +verify (!S_ISOFL (S_IFBLK)); +verify (!S_ISOFL (S_IFCHR)); +verify (!S_ISOFL (S_IFDIR)); +verify (!S_ISOFL (S_IFIFO)); +verify (!S_ISOFL (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISOFL (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISOFL (S_IFSOCK)); +#endif + +verify (!S_ISWHT (S_IFBLK)); +verify (!S_ISWHT (S_IFCHR)); +verify (!S_ISWHT (S_IFDIR)); +verify (!S_ISWHT (S_IFIFO)); +verify (!S_ISWHT (S_IFREG)); +#ifdef S_IFLNK +verify (!S_ISWHT (S_IFLNK)); +#endif +#ifdef S_IFSOCK +verify (!S_ISWHT (S_IFSOCK)); +#endif + +/* Check the existence of some types. */ +nlink_t t1; + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-sys_time.c b/coreseek/m4-1.4.13/tests/test-sys_time.c new file mode 100644 index 0000000..bae4108 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-sys_time.c @@ -0,0 +1,29 @@ +/* Test of substitute. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +struct timeval a; + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-unistd.c b/coreseek/m4-1.4.13/tests/test-unistd.c new file mode 100644 index 0000000..5fed15c --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-unistd.c @@ -0,0 +1,50 @@ +/* Test of substitute. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +/* Check that the various SEEK_* macros are defined. */ +int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; + +/* Check that the various *_FILENO macros are defined. */ +#if ! (defined STDIN_FILENO \ + && (STDIN_FILENO + STDOUT_FILENO + STDERR_FILENO == 3)) +missing or broken *_FILENO macros +#endif + +/* Check that the types are all defined. */ +size_t t1; +ssize_t t2; +#ifdef TODO /* Not implemented in gnulib yet */ +uid_t t3; +gid_t t4; +#endif +off_t t5; +pid_t t6; +#ifdef TODO +useconds_t t7; +intptr_t t8; +#endif + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-vasnprintf.c b/coreseek/m4-1.4.13/tests/test-vasnprintf.c new file mode 100644 index 0000000..2f3f890 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-vasnprintf.c @@ -0,0 +1,128 @@ +/* Test of vasnprintf() and asnprintf() functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "vasnprintf.h" + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static char * +my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + char *ret; + + va_start (args, format); + ret = vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + char buf[8]; + int size; + + for (size = 0; size <= 8; size++) + { + size_t length = size; + char *result = my_asnprintf (NULL, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + ASSERT (length == 5); + free (result); + } + + for (size = 0; size <= 8; size++) + { + size_t length; + char *result; + + memcpy (buf, "DEADBEEF", 8); + length = size; + result = my_asnprintf (buf, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + ASSERT (length == 5); + if (size < 6) + ASSERT (result != buf); + ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0); + if (result != buf) + free (result); + } +} + +static void +test_asnprintf () +{ + char buf[8]; + int size; + + for (size = 0; size <= 8; size++) + { + size_t length = size; + char *result = asnprintf (NULL, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + ASSERT (length == 5); + free (result); + } + + for (size = 0; size <= 8; size++) + { + size_t length; + char *result; + + memcpy (buf, "DEADBEEF", 8); + length = size; + result = asnprintf (buf, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + ASSERT (length == 5); + if (size < 6) + ASSERT (result != buf); + ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0); + if (result != buf) + free (result); + } +} + +int +main (int argc, char *argv[]) +{ + test_vasnprintf (); + test_asnprintf (); + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-vasprintf-posix.c b/coreseek/m4-1.4.13/tests/test-vasprintf-posix.c new file mode 100644 index 0000000..ee3e758 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-vasprintf-posix.c @@ -0,0 +1,3664 @@ +/* Test of POSIX compatible vasprintf() and asprintf() functions. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include "nan.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* The SGI MIPS floating-point format does not distinguish 0.0 and -0.0. */ +static int +have_minus_zero () +{ + static double plus_zero = 0.0; + double minus_zero = - plus_zero; + return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; +} + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zerod instead. */ +double zerod = 0.0; + +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. + IRIX cc can't put -0.0L into .data, but can compute at runtime. + Note that the expression -LDBL_MIN * LDBL_MIN does not work on other + platforms, such as when cross-compiling to PowerPC on MacOS X 10.5. */ +#if defined __hpux || defined __sgi +static long double +compute_minus_zerol (void) +{ + return -LDBL_MIN * LDBL_MIN; +} +# define minus_zerol compute_minus_zerol () +#else +long double minus_zerol = -0.0L; +#endif + +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +#ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +#else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +#endif + +static int +strmatch (const char *pattern, const char *string) +{ + if (strlen (pattern) != strlen (string)) + return 0; + for (; *pattern != '\0'; pattern++, string++) + if (*pattern != '*' && *string != *pattern) + return 0; + return 1; +} + +/* Test whether string[start_index..end_index-1] is a valid textual + representation of NaN. */ +static int +strisnan (const char *string, size_t start_index, size_t end_index, int uppercase) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, uppercase ? "NAN" : "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} + +static void +test_function (int (*my_asprintf) (char **, const char *, ...)) +{ + int repeat; + + /* Test return value convention. */ + + for (repeat = 0; repeat <= 8; repeat++) + { + char *result; + int retval = asprintf (&result, "%d", 12345); + ASSERT (retval == 5); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + free (result); + } + + /* Test support of size specifiers as in C99. */ + + { + char *result; + int retval = + my_asprintf (&result, "%ju %d", (uintmax_t) 12345671, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345671 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%zu %d", (size_t) 12345672, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345672 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345673 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%Lg %d", (long double) 1.5, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.5 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal + output of floating-point numbers. */ + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%a %d", 3.1416015625, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.922p+1 33") == 0 + || strcmp (result, "0x3.244p+0 33") == 0 + || strcmp (result, "0x6.488p-1 33") == 0 + || strcmp (result, "0xc.91p-2 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%A %d", -3.1416015625, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 + || strcmp (result, "-0X3.244P+0 33") == 0 + || strcmp (result, "-0X6.488P-1 33") == 0 + || strcmp (result, "-0XC.91P-2 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%a %d", 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x0p+0 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%a %d", -zerod, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0x0p+0 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%a %d", 1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "inf 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%a %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-inf 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%a %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding near the decimal point. */ + char *result; + int retval = + my_asprintf (&result, "%.0a %d", 1.5, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x2p+0 33") == 0 + || strcmp (result, "0x3p-1 33") == 0 + || strcmp (result, "0x6p-2 33") == 0 + || strcmp (result, "0xcp-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding with precision 0. */ + char *result; + int retval = + my_asprintf (&result, "%.0a %d", 1.51, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x2p+0 33") == 0 + || strcmp (result, "0x3p-1 33") == 0 + || strcmp (result, "0x6p-2 33") == 0 + || strcmp (result, "0xcp-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding with precision 1. */ + char *result; + int retval = + my_asprintf (&result, "%.1a %d", 1.51, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.8p+0 33") == 0 + || strcmp (result, "0x3.0p-1 33") == 0 + || strcmp (result, "0x6.1p-2 33") == 0 + || strcmp (result, "0xc.1p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding with precision 2. */ + char *result; + int retval = + my_asprintf (&result, "%.2a %d", 1.51, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.83p+0 33") == 0 + || strcmp (result, "0x3.05p-1 33") == 0 + || strcmp (result, "0x6.0ap-2 33") == 0 + || strcmp (result, "0xc.14p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding with precision 3. */ + char *result; + int retval = + my_asprintf (&result, "%.3a %d", 1.51, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.829p+0 33") == 0 + || strcmp (result, "0x3.052p-1 33") == 0 + || strcmp (result, "0x6.0a4p-2 33") == 0 + || strcmp (result, "0xc.148p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding can turn a ...FFF into a ...000. */ + char *result; + int retval = + my_asprintf (&result, "%.3a %d", 1.49999, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.800p+0 33") == 0 + || strcmp (result, "0x3.000p-1 33") == 0 + || strcmp (result, "0x6.000p-2 33") == 0 + || strcmp (result, "0xc.000p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding can turn a ...FFF into a ...000. + This shows a MacOS X 10.3.9 (Darwin 7.9) bug. */ + char *result; + int retval = + my_asprintf (&result, "%.1a %d", 1.999, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.0p+1 33") == 0 + || strcmp (result, "0x2.0p+0 33") == 0 + || strcmp (result, "0x4.0p-1 33") == 0 + || strcmp (result, "0x8.0p-2 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Width. */ + char *result; + int retval = + my_asprintf (&result, "%10a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 0x1.cp+0 33") == 0 + || strcmp (result, " 0x3.8p-1 33") == 0 + || strcmp (result, " 0x7p-2 33") == 0 + || strcmp (result, " 0xep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Small precision. */ + char *result; + int retval = + my_asprintf (&result, "%.10a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 + || strcmp (result, "0x3.8000000000p-1 33") == 0 + || strcmp (result, "0x7.0000000000p-2 33") == 0 + || strcmp (result, "0xe.0000000000p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Large precision. */ + char *result; + int retval = + my_asprintf (&result, "%.50a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 + || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 + || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 + || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_LEFT. */ + char *result; + int retval = + my_asprintf (&result, "%-10a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.cp+0 33") == 0 + || strcmp (result, "0x3.8p-1 33") == 0 + || strcmp (result, "0x7p-2 33") == 0 + || strcmp (result, "0xep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SHOWSIGN. */ + char *result; + int retval = + my_asprintf (&result, "%+a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "+0x1.cp+0 33") == 0 + || strcmp (result, "+0x3.8p-1 33") == 0 + || strcmp (result, "+0x7p-2 33") == 0 + || strcmp (result, "+0xep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SPACE. */ + char *result; + int retval = + my_asprintf (&result, "% a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 0x1.cp+0 33") == 0 + || strcmp (result, " 0x3.8p-1 33") == 0 + || strcmp (result, " 0x7p-2 33") == 0 + || strcmp (result, " 0xep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.cp+0 33") == 0 + || strcmp (result, "0x3.8p-1 33") == 0 + || strcmp (result, "0x7.p-2 33") == 0 + || strcmp (result, "0xe.p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#a %d", 1.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.p+0 33") == 0 + || strcmp (result, "0x2.p-1 33") == 0 + || strcmp (result, "0x4.p-2 33") == 0 + || strcmp (result, "0x8.p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with finite number. */ + char *result; + int retval = + my_asprintf (&result, "%010a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x001.cp+0 33") == 0 + || strcmp (result, "0x003.8p-1 33") == 0 + || strcmp (result, "0x00007p-2 33") == 0 + || strcmp (result, "0x0000ep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%010a %d", 1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with NaN. */ + char *result; + int retval = + my_asprintf (&result, "%050a %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%La %d", 3.1416015625L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.922p+1 33") == 0 + || strcmp (result, "0x3.244p+0 33") == 0 + || strcmp (result, "0x6.488p-1 33") == 0 + || strcmp (result, "0xc.91p-2 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%LA %d", -3.1416015625L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-0X1.922P+1 33") == 0 + || strcmp (result, "-0X3.244P+0 33") == 0 + || strcmp (result, "-0X6.488P-1 33") == 0 + || strcmp (result, "-0XC.91P-2 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%La %d", 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x0p+0 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%La %d", minus_zerol, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0x0p+0 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%La %d", 1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "inf 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%La %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-inf 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%La %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%La %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%La %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%La %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%La %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%La %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%La %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%La %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } +#endif + + { /* Rounding near the decimal point. */ + char *result; + int retval = + my_asprintf (&result, "%.0La %d", 1.5L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x2p+0 33") == 0 + || strcmp (result, "0x3p-1 33") == 0 + || strcmp (result, "0x6p-2 33") == 0 + || strcmp (result, "0xcp-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding with precision 0. */ + char *result; + int retval = + my_asprintf (&result, "%.0La %d", 1.51L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x2p+0 33") == 0 + || strcmp (result, "0x3p-1 33") == 0 + || strcmp (result, "0x6p-2 33") == 0 + || strcmp (result, "0xcp-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding with precision 1. */ + char *result; + int retval = + my_asprintf (&result, "%.1La %d", 1.51L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.8p+0 33") == 0 + || strcmp (result, "0x3.0p-1 33") == 0 + || strcmp (result, "0x6.1p-2 33") == 0 + || strcmp (result, "0xc.1p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding with precision 2. */ + char *result; + int retval = + my_asprintf (&result, "%.2La %d", 1.51L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.83p+0 33") == 0 + || strcmp (result, "0x3.05p-1 33") == 0 + || strcmp (result, "0x6.0ap-2 33") == 0 + || strcmp (result, "0xc.14p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding with precision 3. */ + char *result; + int retval = + my_asprintf (&result, "%.3La %d", 1.51L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.829p+0 33") == 0 + || strcmp (result, "0x3.052p-1 33") == 0 + || strcmp (result, "0x6.0a4p-2 33") == 0 + || strcmp (result, "0xc.148p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding can turn a ...FFF into a ...000. */ + char *result; + int retval = + my_asprintf (&result, "%.3La %d", 1.49999L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.800p+0 33") == 0 + || strcmp (result, "0x3.000p-1 33") == 0 + || strcmp (result, "0x6.000p-2 33") == 0 + || strcmp (result, "0xc.000p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Rounding can turn a ...FFF into a ...000. + This shows a MacOS X 10.3.9 (Darwin 7.9) bug and a + glibc 2.4 bug . */ + char *result; + int retval = + my_asprintf (&result, "%.1La %d", 1.999L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.0p+1 33") == 0 + || strcmp (result, "0x2.0p+0 33") == 0 + || strcmp (result, "0x4.0p-1 33") == 0 + || strcmp (result, "0x8.0p-2 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Width. */ + char *result; + int retval = + my_asprintf (&result, "%10La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 0x1.cp+0 33") == 0 + || strcmp (result, " 0x3.8p-1 33") == 0 + || strcmp (result, " 0x7p-2 33") == 0 + || strcmp (result, " 0xep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Small precision. */ + char *result; + int retval = + my_asprintf (&result, "%.10La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 + || strcmp (result, "0x3.8000000000p-1 33") == 0 + || strcmp (result, "0x7.0000000000p-2 33") == 0 + || strcmp (result, "0xe.0000000000p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Large precision. */ + char *result; + int retval = + my_asprintf (&result, "%.50La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 + || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 + || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 + || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_LEFT. */ + char *result; + int retval = + my_asprintf (&result, "%-10La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.cp+0 33") == 0 + || strcmp (result, "0x3.8p-1 33") == 0 + || strcmp (result, "0x7p-2 33") == 0 + || strcmp (result, "0xep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SHOWSIGN. */ + char *result; + int retval = + my_asprintf (&result, "%+La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "+0x1.cp+0 33") == 0 + || strcmp (result, "+0x3.8p-1 33") == 0 + || strcmp (result, "+0x7p-2 33") == 0 + || strcmp (result, "+0xep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SPACE. */ + char *result; + int retval = + my_asprintf (&result, "% La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 0x1.cp+0 33") == 0 + || strcmp (result, " 0x3.8p-1 33") == 0 + || strcmp (result, " 0x7p-2 33") == 0 + || strcmp (result, " 0xep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.cp+0 33") == 0 + || strcmp (result, "0x3.8p-1 33") == 0 + || strcmp (result, "0x7.p-2 33") == 0 + || strcmp (result, "0xe.p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#La %d", 1.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.p+0 33") == 0 + || strcmp (result, "0x2.p-1 33") == 0 + || strcmp (result, "0x4.p-2 33") == 0 + || strcmp (result, "0x8.p-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with finite number. */ + char *result; + int retval = + my_asprintf (&result, "%010La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x001.cp+0 33") == 0 + || strcmp (result, "0x003.8p-1 33") == 0 + || strcmp (result, "0x00007p-2 33") == 0 + || strcmp (result, "0x0000ep-3 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%010La %d", 1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + /* "0000000inf 33" is not a valid result; see + */ + ASSERT (strcmp (result, " inf 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with NaN. */ + char *result; + int retval = + my_asprintf (&result, "%050La %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + /* "0000000nan 33" is not a valid result; see + */ + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the %f format directive. */ + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%f %d", 12.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A larger positive number. */ + char *result; + int retval = + my_asprintf (&result, "%f %d", 1234567.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234567.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Small and large positive numbers. */ + static struct { double value; const char *string; } data[] = + { + { 1.234321234321234e-37, "0.000000" }, + { 1.234321234321234e-36, "0.000000" }, + { 1.234321234321234e-35, "0.000000" }, + { 1.234321234321234e-34, "0.000000" }, + { 1.234321234321234e-33, "0.000000" }, + { 1.234321234321234e-32, "0.000000" }, + { 1.234321234321234e-31, "0.000000" }, + { 1.234321234321234e-30, "0.000000" }, + { 1.234321234321234e-29, "0.000000" }, + { 1.234321234321234e-28, "0.000000" }, + { 1.234321234321234e-27, "0.000000" }, + { 1.234321234321234e-26, "0.000000" }, + { 1.234321234321234e-25, "0.000000" }, + { 1.234321234321234e-24, "0.000000" }, + { 1.234321234321234e-23, "0.000000" }, + { 1.234321234321234e-22, "0.000000" }, + { 1.234321234321234e-21, "0.000000" }, + { 1.234321234321234e-20, "0.000000" }, + { 1.234321234321234e-19, "0.000000" }, + { 1.234321234321234e-18, "0.000000" }, + { 1.234321234321234e-17, "0.000000" }, + { 1.234321234321234e-16, "0.000000" }, + { 1.234321234321234e-15, "0.000000" }, + { 1.234321234321234e-14, "0.000000" }, + { 1.234321234321234e-13, "0.000000" }, + { 1.234321234321234e-12, "0.000000" }, + { 1.234321234321234e-11, "0.000000" }, + { 1.234321234321234e-10, "0.000000" }, + { 1.234321234321234e-9, "0.000000" }, + { 1.234321234321234e-8, "0.000000" }, + { 1.234321234321234e-7, "0.000000" }, + { 1.234321234321234e-6, "0.000001" }, + { 1.234321234321234e-5, "0.000012" }, + { 1.234321234321234e-4, "0.000123" }, + { 1.234321234321234e-3, "0.001234" }, + { 1.234321234321234e-2, "0.012343" }, + { 1.234321234321234e-1, "0.123432" }, + { 1.234321234321234, "1.234321" }, + { 1.234321234321234e1, "12.343212" }, + { 1.234321234321234e2, "123.432123" }, + { 1.234321234321234e3, "1234.321234" }, + { 1.234321234321234e4, "12343.212343" }, + { 1.234321234321234e5, "123432.123432" }, + { 1.234321234321234e6, "1234321.234321" }, + { 1.234321234321234e7, "12343212.343212" }, + { 1.234321234321234e8, "123432123.432123" }, + { 1.234321234321234e9, "1234321234.321234" }, + { 1.234321234321234e10, "12343212343.2123**" }, + { 1.234321234321234e11, "123432123432.123***" }, + { 1.234321234321234e12, "1234321234321.23****" }, + { 1.234321234321234e13, "12343212343212.3*****" }, + { 1.234321234321234e14, "123432123432123.******" }, + { 1.234321234321234e15, "1234321234321234.000000" }, + { 1.234321234321234e16, "123432123432123**.000000" }, + { 1.234321234321234e17, "123432123432123***.000000" }, + { 1.234321234321234e18, "123432123432123****.000000" }, + { 1.234321234321234e19, "123432123432123*****.000000" }, + { 1.234321234321234e20, "123432123432123******.000000" }, + { 1.234321234321234e21, "123432123432123*******.000000" }, + { 1.234321234321234e22, "123432123432123********.000000" }, + { 1.234321234321234e23, "123432123432123*********.000000" }, + { 1.234321234321234e24, "123432123432123**********.000000" }, + { 1.234321234321234e25, "123432123432123***********.000000" }, + { 1.234321234321234e26, "123432123432123************.000000" }, + { 1.234321234321234e27, "123432123432123*************.000000" }, + { 1.234321234321234e28, "123432123432123**************.000000" }, + { 1.234321234321234e29, "123432123432123***************.000000" }, + { 1.234321234321234e30, "123432123432123****************.000000" }, + { 1.234321234321234e31, "123432123432123*****************.000000" }, + { 1.234321234321234e32, "123432123432123******************.000000" }, + { 1.234321234321234e33, "123432123432123*******************.000000" }, + { 1.234321234321234e34, "123432123432123********************.000000" }, + { 1.234321234321234e35, "123432123432123*********************.000000" }, + { 1.234321234321234e36, "123432123432123**********************.000000" } + }; + size_t k; + for (k = 0; k < SIZEOF (data); k++) + { + char *result; + int retval = + my_asprintf (&result, "%f", data[k].value); + ASSERT (result != NULL); + ASSERT (strmatch (data[k].string, result)); + ASSERT (retval == strlen (result)); + free (result); + } + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%f %d", -0.03125, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-0.031250 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%f %d", 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%f %d", -zerod, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%f %d", 1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "inf 33") == 0 + || strcmp (result, "infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%f %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-inf 33") == 0 + || strcmp (result, "-infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%f %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Width. */ + char *result; + int retval = + my_asprintf (&result, "%10f %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_LEFT. */ + char *result; + int retval = + my_asprintf (&result, "%-10f %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SHOWSIGN. */ + char *result; + int retval = + my_asprintf (&result, "%+f %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "+1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SPACE. */ + char *result; + int retval = + my_asprintf (&result, "% f %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#f %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.f %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "2. 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with finite number. */ + char *result; + int retval = + my_asprintf (&result, "%015f %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "00001234.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%015f %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " -inf 33") == 0 + || strcmp (result, " -infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with NaN. */ + char *result; + int retval = + my_asprintf (&result, "%050f %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision. */ + char *result; + int retval = + my_asprintf (&result, "%.f %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with no rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.2f %d", 999.951, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.2f %d", 999.996, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1000.00 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%Lf %d", 12.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A larger positive number. */ + char *result; + int retval = + my_asprintf (&result, "%Lf %d", 1234567.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234567.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Small and large positive numbers. */ + static struct { long double value; const char *string; } data[] = + { + { 1.234321234321234e-37L, "0.000000" }, + { 1.234321234321234e-36L, "0.000000" }, + { 1.234321234321234e-35L, "0.000000" }, + { 1.234321234321234e-34L, "0.000000" }, + { 1.234321234321234e-33L, "0.000000" }, + { 1.234321234321234e-32L, "0.000000" }, + { 1.234321234321234e-31L, "0.000000" }, + { 1.234321234321234e-30L, "0.000000" }, + { 1.234321234321234e-29L, "0.000000" }, + { 1.234321234321234e-28L, "0.000000" }, + { 1.234321234321234e-27L, "0.000000" }, + { 1.234321234321234e-26L, "0.000000" }, + { 1.234321234321234e-25L, "0.000000" }, + { 1.234321234321234e-24L, "0.000000" }, + { 1.234321234321234e-23L, "0.000000" }, + { 1.234321234321234e-22L, "0.000000" }, + { 1.234321234321234e-21L, "0.000000" }, + { 1.234321234321234e-20L, "0.000000" }, + { 1.234321234321234e-19L, "0.000000" }, + { 1.234321234321234e-18L, "0.000000" }, + { 1.234321234321234e-17L, "0.000000" }, + { 1.234321234321234e-16L, "0.000000" }, + { 1.234321234321234e-15L, "0.000000" }, + { 1.234321234321234e-14L, "0.000000" }, + { 1.234321234321234e-13L, "0.000000" }, + { 1.234321234321234e-12L, "0.000000" }, + { 1.234321234321234e-11L, "0.000000" }, + { 1.234321234321234e-10L, "0.000000" }, + { 1.234321234321234e-9L, "0.000000" }, + { 1.234321234321234e-8L, "0.000000" }, + { 1.234321234321234e-7L, "0.000000" }, + { 1.234321234321234e-6L, "0.000001" }, + { 1.234321234321234e-5L, "0.000012" }, + { 1.234321234321234e-4L, "0.000123" }, + { 1.234321234321234e-3L, "0.001234" }, + { 1.234321234321234e-2L, "0.012343" }, + { 1.234321234321234e-1L, "0.123432" }, + { 1.234321234321234L, "1.234321" }, + { 1.234321234321234e1L, "12.343212" }, + { 1.234321234321234e2L, "123.432123" }, + { 1.234321234321234e3L, "1234.321234" }, + { 1.234321234321234e4L, "12343.212343" }, + { 1.234321234321234e5L, "123432.123432" }, + { 1.234321234321234e6L, "1234321.234321" }, + { 1.234321234321234e7L, "12343212.343212" }, + { 1.234321234321234e8L, "123432123.432123" }, + { 1.234321234321234e9L, "1234321234.321234" }, + { 1.234321234321234e10L, "12343212343.2123**" }, + { 1.234321234321234e11L, "123432123432.123***" }, + { 1.234321234321234e12L, "1234321234321.23****" }, + { 1.234321234321234e13L, "12343212343212.3*****" }, + { 1.234321234321234e14L, "123432123432123.******" }, + { 1.234321234321234e15L, "1234321234321234.000000" }, + { 1.234321234321234e16L, "123432123432123**.000000" }, + { 1.234321234321234e17L, "123432123432123***.000000" }, + { 1.234321234321234e18L, "123432123432123****.000000" }, + { 1.234321234321234e19L, "123432123432123*****.000000" }, + { 1.234321234321234e20L, "123432123432123******.000000" }, + { 1.234321234321234e21L, "123432123432123*******.000000" }, + { 1.234321234321234e22L, "123432123432123********.000000" }, + { 1.234321234321234e23L, "123432123432123*********.000000" }, + { 1.234321234321234e24L, "123432123432123**********.000000" }, + { 1.234321234321234e25L, "123432123432123***********.000000" }, + { 1.234321234321234e26L, "123432123432123************.000000" }, + { 1.234321234321234e27L, "123432123432123*************.000000" }, + { 1.234321234321234e28L, "123432123432123**************.000000" }, + { 1.234321234321234e29L, "123432123432123***************.000000" }, + { 1.234321234321234e30L, "123432123432123****************.000000" }, + { 1.234321234321234e31L, "123432123432123*****************.000000" }, + { 1.234321234321234e32L, "123432123432123******************.000000" }, + { 1.234321234321234e33L, "123432123432123*******************.000000" }, + { 1.234321234321234e34L, "123432123432123********************.000000" }, + { 1.234321234321234e35L, "123432123432123*********************.000000" }, + { 1.234321234321234e36L, "123432123432123**********************.000000" } + }; + size_t k; + for (k = 0; k < SIZEOF (data); k++) + { + char *result; + int retval = + my_asprintf (&result, "%Lf", data[k].value); + ASSERT (result != NULL); + ASSERT (strmatch (data[k].string, result)); + ASSERT (retval == strlen (result)); + free (result); + } + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%Lf %d", -0.03125L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-0.031250 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%Lf %d", 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%Lf %d", minus_zerol, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%Lf %d", 1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "inf 33") == 0 + || strcmp (result, "infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%Lf %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-inf 33") == 0 + || strcmp (result, "-infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%Lf %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lf %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } +#endif + + { /* Width. */ + char *result; + int retval = + my_asprintf (&result, "%10Lf %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_LEFT. */ + char *result; + int retval = + my_asprintf (&result, "%-10Lf %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SHOWSIGN. */ + char *result; + int retval = + my_asprintf (&result, "%+Lf %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "+1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SPACE. */ + char *result; + int retval = + my_asprintf (&result, "% Lf %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#Lf %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.Lf %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "2. 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with finite number. */ + char *result; + int retval = + my_asprintf (&result, "%015Lf %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "00001234.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%015Lf %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " -inf 33") == 0 + || strcmp (result, " -infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with NaN. */ + char *result; + int retval = + my_asprintf (&result, "%050Lf %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision. */ + char *result; + int retval = + my_asprintf (&result, "%.Lf %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with no rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.2Lf %d", 999.951L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.2Lf %d", 999.996L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1000.00 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the %F format directive. */ + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%F %d", 12.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A larger positive number. */ + char *result; + int retval = + my_asprintf (&result, "%F %d", 1234567.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234567.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%F %d", -0.03125, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-0.031250 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%F %d", 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%F %d", -zerod, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%F %d", 1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "INF 33") == 0 + || strcmp (result, "INFINITY 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%F %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-INF 33") == 0 + || strcmp (result, "-INFINITY 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%F %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 1) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO. */ + char *result; + int retval = + my_asprintf (&result, "%015F %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "00001234.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%015F %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " -INF 33") == 0 + || strcmp (result, " -INFINITY 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision. */ + char *result; + int retval = + my_asprintf (&result, "%.F %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with no rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.2F %d", 999.951, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.2F %d", 999.996, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1000.00 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%LF %d", 12.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.750000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A larger positive number. */ + char *result; + int retval = + my_asprintf (&result, "%LF %d", 1234567.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234567.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%LF %d", -0.03125L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-0.031250 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%LF %d", 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%LF %d", minus_zerol, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%LF %d", 1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "INF 33") == 0 + || strcmp (result, "INFINITY 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%LF %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-INF 33") == 0 + || strcmp (result, "-INFINITY 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%LF %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 1) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO. */ + char *result; + int retval = + my_asprintf (&result, "%015LF %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "00001234.000000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%015LF %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " -INF 33") == 0 + || strcmp (result, " -INFINITY 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision. */ + char *result; + int retval = + my_asprintf (&result, "%.LF %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with no rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.2LF %d", 999.951L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.2LF %d", 999.996L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1000.00 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the %e format directive. */ + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%e %d", 12.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.275000e+01 33") == 0 + || strcmp (result, "1.275000e+001 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A larger positive number. */ + char *result; + int retval = + my_asprintf (&result, "%e %d", 1234567.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.234567e+06 33") == 0 + || strcmp (result, "1.234567e+006 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Small and large positive numbers. */ + static struct { double value; const char *string; } data[] = + { + { 1.234321234321234e-37, "1.234321e-37" }, + { 1.234321234321234e-36, "1.234321e-36" }, + { 1.234321234321234e-35, "1.234321e-35" }, + { 1.234321234321234e-34, "1.234321e-34" }, + { 1.234321234321234e-33, "1.234321e-33" }, + { 1.234321234321234e-32, "1.234321e-32" }, + { 1.234321234321234e-31, "1.234321e-31" }, + { 1.234321234321234e-30, "1.234321e-30" }, + { 1.234321234321234e-29, "1.234321e-29" }, + { 1.234321234321234e-28, "1.234321e-28" }, + { 1.234321234321234e-27, "1.234321e-27" }, + { 1.234321234321234e-26, "1.234321e-26" }, + { 1.234321234321234e-25, "1.234321e-25" }, + { 1.234321234321234e-24, "1.234321e-24" }, + { 1.234321234321234e-23, "1.234321e-23" }, + { 1.234321234321234e-22, "1.234321e-22" }, + { 1.234321234321234e-21, "1.234321e-21" }, + { 1.234321234321234e-20, "1.234321e-20" }, + { 1.234321234321234e-19, "1.234321e-19" }, + { 1.234321234321234e-18, "1.234321e-18" }, + { 1.234321234321234e-17, "1.234321e-17" }, + { 1.234321234321234e-16, "1.234321e-16" }, + { 1.234321234321234e-15, "1.234321e-15" }, + { 1.234321234321234e-14, "1.234321e-14" }, + { 1.234321234321234e-13, "1.234321e-13" }, + { 1.234321234321234e-12, "1.234321e-12" }, + { 1.234321234321234e-11, "1.234321e-11" }, + { 1.234321234321234e-10, "1.234321e-10" }, + { 1.234321234321234e-9, "1.234321e-09" }, + { 1.234321234321234e-8, "1.234321e-08" }, + { 1.234321234321234e-7, "1.234321e-07" }, + { 1.234321234321234e-6, "1.234321e-06" }, + { 1.234321234321234e-5, "1.234321e-05" }, + { 1.234321234321234e-4, "1.234321e-04" }, + { 1.234321234321234e-3, "1.234321e-03" }, + { 1.234321234321234e-2, "1.234321e-02" }, + { 1.234321234321234e-1, "1.234321e-01" }, + { 1.234321234321234, "1.234321e+00" }, + { 1.234321234321234e1, "1.234321e+01" }, + { 1.234321234321234e2, "1.234321e+02" }, + { 1.234321234321234e3, "1.234321e+03" }, + { 1.234321234321234e4, "1.234321e+04" }, + { 1.234321234321234e5, "1.234321e+05" }, + { 1.234321234321234e6, "1.234321e+06" }, + { 1.234321234321234e7, "1.234321e+07" }, + { 1.234321234321234e8, "1.234321e+08" }, + { 1.234321234321234e9, "1.234321e+09" }, + { 1.234321234321234e10, "1.234321e+10" }, + { 1.234321234321234e11, "1.234321e+11" }, + { 1.234321234321234e12, "1.234321e+12" }, + { 1.234321234321234e13, "1.234321e+13" }, + { 1.234321234321234e14, "1.234321e+14" }, + { 1.234321234321234e15, "1.234321e+15" }, + { 1.234321234321234e16, "1.234321e+16" }, + { 1.234321234321234e17, "1.234321e+17" }, + { 1.234321234321234e18, "1.234321e+18" }, + { 1.234321234321234e19, "1.234321e+19" }, + { 1.234321234321234e20, "1.234321e+20" }, + { 1.234321234321234e21, "1.234321e+21" }, + { 1.234321234321234e22, "1.234321e+22" }, + { 1.234321234321234e23, "1.234321e+23" }, + { 1.234321234321234e24, "1.234321e+24" }, + { 1.234321234321234e25, "1.234321e+25" }, + { 1.234321234321234e26, "1.234321e+26" }, + { 1.234321234321234e27, "1.234321e+27" }, + { 1.234321234321234e28, "1.234321e+28" }, + { 1.234321234321234e29, "1.234321e+29" }, + { 1.234321234321234e30, "1.234321e+30" }, + { 1.234321234321234e31, "1.234321e+31" }, + { 1.234321234321234e32, "1.234321e+32" }, + { 1.234321234321234e33, "1.234321e+33" }, + { 1.234321234321234e34, "1.234321e+34" }, + { 1.234321234321234e35, "1.234321e+35" }, + { 1.234321234321234e36, "1.234321e+36" } + }; + size_t k; + for (k = 0; k < SIZEOF (data); k++) + { + char *result; + int retval = + my_asprintf (&result, "%e", data[k].value); + const char *expected = data[k].string; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0 + /* Some implementations produce exponents with 3 digits. */ + || (strlen (result) == strlen (expected) + 1 + && memcmp (result, expected, strlen (expected) - 2) == 0 + && result[strlen (expected) - 2] == '0' + && strcmp (result + strlen (expected) - 1, + expected + strlen (expected) - 2) + == 0)); + ASSERT (retval == strlen (result)); + free (result); + } + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%e %d", -0.03125, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-3.125000e-02 33") == 0 + || strcmp (result, "-3.125000e-002 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%e %d", 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0.000000e+00 33") == 0 + || strcmp (result, "0.000000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%e %d", -zerod, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0.000000e+00 33") == 0 + || strcmp (result, "-0.000000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%e %d", 1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "inf 33") == 0 + || strcmp (result, "infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%e %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-inf 33") == 0 + || strcmp (result, "-infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%e %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Width. */ + char *result; + int retval = + my_asprintf (&result, "%15e %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000e+00 33") == 0 + || strcmp (result, " 1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_LEFT. */ + char *result; + int retval = + my_asprintf (&result, "%-15e %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000e+00 33") == 0 + || strcmp (result, "1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SHOWSIGN. */ + char *result; + int retval = + my_asprintf (&result, "%+e %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "+1.750000e+00 33") == 0 + || strcmp (result, "+1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SPACE. */ + char *result; + int retval = + my_asprintf (&result, "% e %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000e+00 33") == 0 + || strcmp (result, " 1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#e %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000e+00 33") == 0 + || strcmp (result, "1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.e %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "2.e+00 33") == 0 + || strcmp (result, "2.e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.e %d", 9.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.e+01 33") == 0 + || strcmp (result, "1.e+001 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with finite number. */ + char *result; + int retval = + my_asprintf (&result, "%015e %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0001.234000e+03 33") == 0 + || strcmp (result, "001.234000e+003 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%015e %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " -inf 33") == 0 + || strcmp (result, " -infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with NaN. */ + char *result; + int retval = + my_asprintf (&result, "%050e %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision. */ + char *result; + int retval = + my_asprintf (&result, "%.e %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1e+03 33") == 0 + || strcmp (result, "1e+003 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with no rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.4e %d", 999.951, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "9.9995e+02 33") == 0 + || strcmp (result, "9.9995e+002 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.4e %d", 999.996, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.0000e+03 33") == 0 + || strcmp (result, "1.0000e+003 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%Le %d", 12.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.275000e+01 33") == 0 + || strcmp (result, "1.275000e+001 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A larger positive number. */ + char *result; + int retval = + my_asprintf (&result, "%Le %d", 1234567.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.234567e+06 33") == 0 + || strcmp (result, "1.234567e+006 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Small and large positive numbers. */ + static struct { long double value; const char *string; } data[] = + { + { 1.234321234321234e-37L, "1.234321e-37" }, + { 1.234321234321234e-36L, "1.234321e-36" }, + { 1.234321234321234e-35L, "1.234321e-35" }, + { 1.234321234321234e-34L, "1.234321e-34" }, + { 1.234321234321234e-33L, "1.234321e-33" }, + { 1.234321234321234e-32L, "1.234321e-32" }, + { 1.234321234321234e-31L, "1.234321e-31" }, + { 1.234321234321234e-30L, "1.234321e-30" }, + { 1.234321234321234e-29L, "1.234321e-29" }, + { 1.234321234321234e-28L, "1.234321e-28" }, + { 1.234321234321234e-27L, "1.234321e-27" }, + { 1.234321234321234e-26L, "1.234321e-26" }, + { 1.234321234321234e-25L, "1.234321e-25" }, + { 1.234321234321234e-24L, "1.234321e-24" }, + { 1.234321234321234e-23L, "1.234321e-23" }, + { 1.234321234321234e-22L, "1.234321e-22" }, + { 1.234321234321234e-21L, "1.234321e-21" }, + { 1.234321234321234e-20L, "1.234321e-20" }, + { 1.234321234321234e-19L, "1.234321e-19" }, + { 1.234321234321234e-18L, "1.234321e-18" }, + { 1.234321234321234e-17L, "1.234321e-17" }, + { 1.234321234321234e-16L, "1.234321e-16" }, + { 1.234321234321234e-15L, "1.234321e-15" }, + { 1.234321234321234e-14L, "1.234321e-14" }, + { 1.234321234321234e-13L, "1.234321e-13" }, + { 1.234321234321234e-12L, "1.234321e-12" }, + { 1.234321234321234e-11L, "1.234321e-11" }, + { 1.234321234321234e-10L, "1.234321e-10" }, + { 1.234321234321234e-9L, "1.234321e-09" }, + { 1.234321234321234e-8L, "1.234321e-08" }, + { 1.234321234321234e-7L, "1.234321e-07" }, + { 1.234321234321234e-6L, "1.234321e-06" }, + { 1.234321234321234e-5L, "1.234321e-05" }, + { 1.234321234321234e-4L, "1.234321e-04" }, + { 1.234321234321234e-3L, "1.234321e-03" }, + { 1.234321234321234e-2L, "1.234321e-02" }, + { 1.234321234321234e-1L, "1.234321e-01" }, + { 1.234321234321234L, "1.234321e+00" }, + { 1.234321234321234e1L, "1.234321e+01" }, + { 1.234321234321234e2L, "1.234321e+02" }, + { 1.234321234321234e3L, "1.234321e+03" }, + { 1.234321234321234e4L, "1.234321e+04" }, + { 1.234321234321234e5L, "1.234321e+05" }, + { 1.234321234321234e6L, "1.234321e+06" }, + { 1.234321234321234e7L, "1.234321e+07" }, + { 1.234321234321234e8L, "1.234321e+08" }, + { 1.234321234321234e9L, "1.234321e+09" }, + { 1.234321234321234e10L, "1.234321e+10" }, + { 1.234321234321234e11L, "1.234321e+11" }, + { 1.234321234321234e12L, "1.234321e+12" }, + { 1.234321234321234e13L, "1.234321e+13" }, + { 1.234321234321234e14L, "1.234321e+14" }, + { 1.234321234321234e15L, "1.234321e+15" }, + { 1.234321234321234e16L, "1.234321e+16" }, + { 1.234321234321234e17L, "1.234321e+17" }, + { 1.234321234321234e18L, "1.234321e+18" }, + { 1.234321234321234e19L, "1.234321e+19" }, + { 1.234321234321234e20L, "1.234321e+20" }, + { 1.234321234321234e21L, "1.234321e+21" }, + { 1.234321234321234e22L, "1.234321e+22" }, + { 1.234321234321234e23L, "1.234321e+23" }, + { 1.234321234321234e24L, "1.234321e+24" }, + { 1.234321234321234e25L, "1.234321e+25" }, + { 1.234321234321234e26L, "1.234321e+26" }, + { 1.234321234321234e27L, "1.234321e+27" }, + { 1.234321234321234e28L, "1.234321e+28" }, + { 1.234321234321234e29L, "1.234321e+29" }, + { 1.234321234321234e30L, "1.234321e+30" }, + { 1.234321234321234e31L, "1.234321e+31" }, + { 1.234321234321234e32L, "1.234321e+32" }, + { 1.234321234321234e33L, "1.234321e+33" }, + { 1.234321234321234e34L, "1.234321e+34" }, + { 1.234321234321234e35L, "1.234321e+35" }, + { 1.234321234321234e36L, "1.234321e+36" } + }; + size_t k; + for (k = 0; k < SIZEOF (data); k++) + { + char *result; + int retval = + my_asprintf (&result, "%Le", data[k].value); + const char *expected = data[k].string; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0 + /* Some implementations produce exponents with 3 digits. */ + || (strlen (result) == strlen (expected) + 1 + && memcmp (result, expected, strlen (expected) - 2) == 0 + && result[strlen (expected) - 2] == '0' + && strcmp (result + strlen (expected) - 1, + expected + strlen (expected) - 2) + == 0)); + ASSERT (retval == strlen (result)); + free (result); + } + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%Le %d", -0.03125L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-3.125000e-02 33") == 0 + || strcmp (result, "-3.125000e-002 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%Le %d", 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0.000000e+00 33") == 0 + || strcmp (result, "0.000000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%Le %d", minus_zerol, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0.000000e+00 33") == 0 + || strcmp (result, "-0.000000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%Le %d", 1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "inf 33") == 0 + || strcmp (result, "infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%Le %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-inf 33") == 0 + || strcmp (result, "-infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%Le %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Le %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } +#endif + + { /* Width. */ + char *result; + int retval = + my_asprintf (&result, "%15Le %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000e+00 33") == 0 + || strcmp (result, " 1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_LEFT. */ + char *result; + int retval = + my_asprintf (&result, "%-15Le %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000e+00 33") == 0 + || strcmp (result, "1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SHOWSIGN. */ + char *result; + int retval = + my_asprintf (&result, "%+Le %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "+1.750000e+00 33") == 0 + || strcmp (result, "+1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SPACE. */ + char *result; + int retval = + my_asprintf (&result, "% Le %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000e+00 33") == 0 + || strcmp (result, " 1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#Le %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.750000e+00 33") == 0 + || strcmp (result, "1.750000e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.Le %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "2.e+00 33") == 0 + || strcmp (result, "2.e+000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.Le %d", 9.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.e+01 33") == 0 + || strcmp (result, "1.e+001 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with finite number. */ + char *result; + int retval = + my_asprintf (&result, "%015Le %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0001.234000e+03 33") == 0 + || strcmp (result, "001.234000e+003 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%015Le %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " -inf 33") == 0 + || strcmp (result, " -infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with NaN. */ + char *result; + int retval = + my_asprintf (&result, "%050Le %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision. */ + char *result; + int retval = + my_asprintf (&result, "%.Le %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1e+03 33") == 0 + || strcmp (result, "1e+003 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with no rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.4Le %d", 999.951L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "9.9995e+02 33") == 0 + || strcmp (result, "9.9995e+002 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.4Le %d", 999.996L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.0000e+03 33") == 0 + || strcmp (result, "1.0000e+003 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the %g format directive. */ + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%g %d", 12.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A larger positive number. */ + char *result; + int retval = + my_asprintf (&result, "%g %d", 1234567.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.23457e+06 33") == 0 + || strcmp (result, "1.23457e+006 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Small and large positive numbers. */ + static struct { double value; const char *string; } data[] = + { + { 1.234321234321234e-37, "1.23432e-37" }, + { 1.234321234321234e-36, "1.23432e-36" }, + { 1.234321234321234e-35, "1.23432e-35" }, + { 1.234321234321234e-34, "1.23432e-34" }, + { 1.234321234321234e-33, "1.23432e-33" }, + { 1.234321234321234e-32, "1.23432e-32" }, + { 1.234321234321234e-31, "1.23432e-31" }, + { 1.234321234321234e-30, "1.23432e-30" }, + { 1.234321234321234e-29, "1.23432e-29" }, + { 1.234321234321234e-28, "1.23432e-28" }, + { 1.234321234321234e-27, "1.23432e-27" }, + { 1.234321234321234e-26, "1.23432e-26" }, + { 1.234321234321234e-25, "1.23432e-25" }, + { 1.234321234321234e-24, "1.23432e-24" }, + { 1.234321234321234e-23, "1.23432e-23" }, + { 1.234321234321234e-22, "1.23432e-22" }, + { 1.234321234321234e-21, "1.23432e-21" }, + { 1.234321234321234e-20, "1.23432e-20" }, + { 1.234321234321234e-19, "1.23432e-19" }, + { 1.234321234321234e-18, "1.23432e-18" }, + { 1.234321234321234e-17, "1.23432e-17" }, + { 1.234321234321234e-16, "1.23432e-16" }, + { 1.234321234321234e-15, "1.23432e-15" }, + { 1.234321234321234e-14, "1.23432e-14" }, + { 1.234321234321234e-13, "1.23432e-13" }, + { 1.234321234321234e-12, "1.23432e-12" }, + { 1.234321234321234e-11, "1.23432e-11" }, + { 1.234321234321234e-10, "1.23432e-10" }, + { 1.234321234321234e-9, "1.23432e-09" }, + { 1.234321234321234e-8, "1.23432e-08" }, + { 1.234321234321234e-7, "1.23432e-07" }, + { 1.234321234321234e-6, "1.23432e-06" }, + { 1.234321234321234e-5, "1.23432e-05" }, + { 1.234321234321234e-4, "0.000123432" }, + { 1.234321234321234e-3, "0.00123432" }, + { 1.234321234321234e-2, "0.0123432" }, + { 1.234321234321234e-1, "0.123432" }, + { 1.234321234321234, "1.23432" }, + { 1.234321234321234e1, "12.3432" }, + { 1.234321234321234e2, "123.432" }, + { 1.234321234321234e3, "1234.32" }, + { 1.234321234321234e4, "12343.2" }, + { 1.234321234321234e5, "123432" }, + { 1.234321234321234e6, "1.23432e+06" }, + { 1.234321234321234e7, "1.23432e+07" }, + { 1.234321234321234e8, "1.23432e+08" }, + { 1.234321234321234e9, "1.23432e+09" }, + { 1.234321234321234e10, "1.23432e+10" }, + { 1.234321234321234e11, "1.23432e+11" }, + { 1.234321234321234e12, "1.23432e+12" }, + { 1.234321234321234e13, "1.23432e+13" }, + { 1.234321234321234e14, "1.23432e+14" }, + { 1.234321234321234e15, "1.23432e+15" }, + { 1.234321234321234e16, "1.23432e+16" }, + { 1.234321234321234e17, "1.23432e+17" }, + { 1.234321234321234e18, "1.23432e+18" }, + { 1.234321234321234e19, "1.23432e+19" }, + { 1.234321234321234e20, "1.23432e+20" }, + { 1.234321234321234e21, "1.23432e+21" }, + { 1.234321234321234e22, "1.23432e+22" }, + { 1.234321234321234e23, "1.23432e+23" }, + { 1.234321234321234e24, "1.23432e+24" }, + { 1.234321234321234e25, "1.23432e+25" }, + { 1.234321234321234e26, "1.23432e+26" }, + { 1.234321234321234e27, "1.23432e+27" }, + { 1.234321234321234e28, "1.23432e+28" }, + { 1.234321234321234e29, "1.23432e+29" }, + { 1.234321234321234e30, "1.23432e+30" }, + { 1.234321234321234e31, "1.23432e+31" }, + { 1.234321234321234e32, "1.23432e+32" }, + { 1.234321234321234e33, "1.23432e+33" }, + { 1.234321234321234e34, "1.23432e+34" }, + { 1.234321234321234e35, "1.23432e+35" }, + { 1.234321234321234e36, "1.23432e+36" } + }; + size_t k; + for (k = 0; k < SIZEOF (data); k++) + { + char *result; + int retval = + my_asprintf (&result, "%g", data[k].value); + const char *expected = data[k].string; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0 + /* Some implementations produce exponents with 3 digits. */ + || (expected[strlen (expected) - 4] == 'e' + && strlen (result) == strlen (expected) + 1 + && memcmp (result, expected, strlen (expected) - 2) == 0 + && result[strlen (expected) - 2] == '0' + && strcmp (result + strlen (expected) - 1, + expected + strlen (expected) - 2) + == 0)); + ASSERT (retval == strlen (result)); + free (result); + } + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%g %d", -0.03125, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-0.03125 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%g %d", 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%g %d", -zerod, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%g %d", 1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "inf 33") == 0 + || strcmp (result, "infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%g %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-inf 33") == 0 + || strcmp (result, "-infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%g %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Width. */ + char *result; + int retval = + my_asprintf (&result, "%10g %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_LEFT. */ + char *result; + int retval = + my_asprintf (&result, "%-10g %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SHOWSIGN. */ + char *result; + int retval = + my_asprintf (&result, "%+g %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "+1.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SPACE. */ + char *result; + int retval = + my_asprintf (&result, "% g %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#g %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.75000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.g %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "2. 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.g %d", 9.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.e+01 33") == 0 + || strcmp (result, "1.e+001 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with finite number. */ + char *result; + int retval = + my_asprintf (&result, "%010g %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0000001234 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%015g %d", -1.0 / 0.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " -inf 33") == 0 + || strcmp (result, " -infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with NaN. */ + char *result; + int retval = + my_asprintf (&result, "%050g %d", NaNd (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision. */ + char *result; + int retval = + my_asprintf (&result, "%.g %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1e+03 33") == 0 + || strcmp (result, "1e+003 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with no rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.5g %d", 999.951, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.5g %d", 999.996, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A positive number. */ + char *result; + int retval = + my_asprintf (&result, "%Lg %d", 12.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* A larger positive number. */ + char *result; + int retval = + my_asprintf (&result, "%Lg %d", 1234567.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.23457e+06 33") == 0 + || strcmp (result, "1.23457e+006 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Small and large positive numbers. */ + static struct { long double value; const char *string; } data[] = + { + { 1.234321234321234e-37L, "1.23432e-37" }, + { 1.234321234321234e-36L, "1.23432e-36" }, + { 1.234321234321234e-35L, "1.23432e-35" }, + { 1.234321234321234e-34L, "1.23432e-34" }, + { 1.234321234321234e-33L, "1.23432e-33" }, + { 1.234321234321234e-32L, "1.23432e-32" }, + { 1.234321234321234e-31L, "1.23432e-31" }, + { 1.234321234321234e-30L, "1.23432e-30" }, + { 1.234321234321234e-29L, "1.23432e-29" }, + { 1.234321234321234e-28L, "1.23432e-28" }, + { 1.234321234321234e-27L, "1.23432e-27" }, + { 1.234321234321234e-26L, "1.23432e-26" }, + { 1.234321234321234e-25L, "1.23432e-25" }, + { 1.234321234321234e-24L, "1.23432e-24" }, + { 1.234321234321234e-23L, "1.23432e-23" }, + { 1.234321234321234e-22L, "1.23432e-22" }, + { 1.234321234321234e-21L, "1.23432e-21" }, + { 1.234321234321234e-20L, "1.23432e-20" }, + { 1.234321234321234e-19L, "1.23432e-19" }, + { 1.234321234321234e-18L, "1.23432e-18" }, + { 1.234321234321234e-17L, "1.23432e-17" }, + { 1.234321234321234e-16L, "1.23432e-16" }, + { 1.234321234321234e-15L, "1.23432e-15" }, + { 1.234321234321234e-14L, "1.23432e-14" }, + { 1.234321234321234e-13L, "1.23432e-13" }, + { 1.234321234321234e-12L, "1.23432e-12" }, + { 1.234321234321234e-11L, "1.23432e-11" }, + { 1.234321234321234e-10L, "1.23432e-10" }, + { 1.234321234321234e-9L, "1.23432e-09" }, + { 1.234321234321234e-8L, "1.23432e-08" }, + { 1.234321234321234e-7L, "1.23432e-07" }, + { 1.234321234321234e-6L, "1.23432e-06" }, + { 1.234321234321234e-5L, "1.23432e-05" }, + { 1.234321234321234e-4L, "0.000123432" }, + { 1.234321234321234e-3L, "0.00123432" }, + { 1.234321234321234e-2L, "0.0123432" }, + { 1.234321234321234e-1L, "0.123432" }, + { 1.234321234321234L, "1.23432" }, + { 1.234321234321234e1L, "12.3432" }, + { 1.234321234321234e2L, "123.432" }, + { 1.234321234321234e3L, "1234.32" }, + { 1.234321234321234e4L, "12343.2" }, + { 1.234321234321234e5L, "123432" }, + { 1.234321234321234e6L, "1.23432e+06" }, + { 1.234321234321234e7L, "1.23432e+07" }, + { 1.234321234321234e8L, "1.23432e+08" }, + { 1.234321234321234e9L, "1.23432e+09" }, + { 1.234321234321234e10L, "1.23432e+10" }, + { 1.234321234321234e11L, "1.23432e+11" }, + { 1.234321234321234e12L, "1.23432e+12" }, + { 1.234321234321234e13L, "1.23432e+13" }, + { 1.234321234321234e14L, "1.23432e+14" }, + { 1.234321234321234e15L, "1.23432e+15" }, + { 1.234321234321234e16L, "1.23432e+16" }, + { 1.234321234321234e17L, "1.23432e+17" }, + { 1.234321234321234e18L, "1.23432e+18" }, + { 1.234321234321234e19L, "1.23432e+19" }, + { 1.234321234321234e20L, "1.23432e+20" }, + { 1.234321234321234e21L, "1.23432e+21" }, + { 1.234321234321234e22L, "1.23432e+22" }, + { 1.234321234321234e23L, "1.23432e+23" }, + { 1.234321234321234e24L, "1.23432e+24" }, + { 1.234321234321234e25L, "1.23432e+25" }, + { 1.234321234321234e26L, "1.23432e+26" }, + { 1.234321234321234e27L, "1.23432e+27" }, + { 1.234321234321234e28L, "1.23432e+28" }, + { 1.234321234321234e29L, "1.23432e+29" }, + { 1.234321234321234e30L, "1.23432e+30" }, + { 1.234321234321234e31L, "1.23432e+31" }, + { 1.234321234321234e32L, "1.23432e+32" }, + { 1.234321234321234e33L, "1.23432e+33" }, + { 1.234321234321234e34L, "1.23432e+34" }, + { 1.234321234321234e35L, "1.23432e+35" }, + { 1.234321234321234e36L, "1.23432e+36" } + }; + size_t k; + for (k = 0; k < SIZEOF (data); k++) + { + char *result; + int retval = + my_asprintf (&result, "%Lg", data[k].value); + const char *expected = data[k].string; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0 + /* Some implementations produce exponents with 3 digits. */ + || (expected[strlen (expected) - 4] == 'e' + && strlen (result) == strlen (expected) + 1 + && memcmp (result, expected, strlen (expected) - 2) == 0 + && result[strlen (expected) - 2] == '0' + && strcmp (result + strlen (expected) - 1, + expected + strlen (expected) - 2) + == 0)); + ASSERT (retval == strlen (result)); + free (result); + } + } + + { /* A negative number. */ + char *result; + int retval = + my_asprintf (&result, "%Lg %d", -0.03125L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-0.03125 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive zero. */ + char *result; + int retval = + my_asprintf (&result, "%Lg %d", 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative zero. */ + char *result; + int retval = + my_asprintf (&result, "%Lg %d", minus_zerol, 33, 44, 55); + ASSERT (result != NULL); + if (have_minus_zero ()) + ASSERT (strcmp (result, "-0 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Positive infinity. */ + char *result; + int retval = + my_asprintf (&result, "%Lg %d", 1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "inf 33") == 0 + || strcmp (result, "infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Negative infinity. */ + char *result; + int retval = + my_asprintf (&result, "%Lg %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "-inf 33") == 0 + || strcmp (result, "-infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* NaN. */ + char *result; + int retval = + my_asprintf (&result, "%Lg %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + char *result; + int retval = + my_asprintf (&result, "%Lg %d", x.value, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) >= 3 + 3 + && strisnan (result, 0, strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } +#endif + + { /* Width. */ + char *result; + int retval = + my_asprintf (&result, "%10Lg %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_LEFT. */ + char *result; + int retval = + my_asprintf (&result, "%-10Lg %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SHOWSIGN. */ + char *result; + int retval = + my_asprintf (&result, "%+Lg %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "+1.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_SPACE. */ + char *result; + int retval = + my_asprintf (&result, "% Lg %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.75 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#Lg %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.75000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.Lg %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "2. 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ALT. */ + char *result; + int retval = + my_asprintf (&result, "%#.Lg %d", 9.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.e+01 33") == 0 + || strcmp (result, "1.e+001 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with finite number. */ + char *result; + int retval = + my_asprintf (&result, "%010Lg %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0000001234 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with infinite number. */ + char *result; + int retval = + my_asprintf (&result, "%015Lg %d", -1.0L / 0.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " -inf 33") == 0 + || strcmp (result, " -infinity 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* FLAG_ZERO with NaN. */ + char *result; + int retval = + my_asprintf (&result, "%050Lg %d", NaNl (), 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strlen (result) == 50 + 3 + && strisnan (result, strspn (result, " "), strlen (result) - 3, 0) + && strcmp (result + strlen (result) - 3, " 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision. */ + char *result; + int retval = + my_asprintf (&result, "%.Lg %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1e+03 33") == 0 + || strcmp (result, "1e+003 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with no rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.5Lg %d", 999.951L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "999.95 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { /* Precision with rounding. */ + char *result; + int retval = + my_asprintf (&result, "%.5Lg %d", 999.996L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1000 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the %n format directive. */ + + { + int count = -1; + char *result; + int retval = + my_asprintf (&result, "%d %n", 123, &count, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "123 ") == 0); + ASSERT (retval == strlen (result)); + ASSERT (count == 4); + free (result); + } + + /* Test the support of the POSIX/XSI format strings with positions. */ + + { + char *result; + int retval = + my_asprintf (&result, "%2$d %1$d", 33, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "55 33") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the grouping flag. */ + + { + char *result; + int retval = + my_asprintf (&result, "%'d %d", 1234567, 99); + ASSERT (result != NULL); + ASSERT (result[strlen (result) - 1] == '9'); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the left-adjust flag. */ + + { + char *result; + int retval = + my_asprintf (&result, "a%*sc", -3, "b"); + ASSERT (result != NULL); + ASSERT (strcmp (result, "ab c") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "a%-*sc", 3, "b"); + ASSERT (result != NULL); + ASSERT (strcmp (result, "ab c") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "a%-*sc", -3, "b"); + ASSERT (result != NULL); + ASSERT (strcmp (result, "ab c") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of large precision. */ + + { + char *result; + int retval = + my_asprintf (&result, "%.4000d %d", 1234567, 99); + size_t i; + ASSERT (result != NULL); + for (i = 0; i < 4000 - 7; i++) + ASSERT (result[i] == '0'); + ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%.*d %d", 4000, 1234567, 99); + size_t i; + ASSERT (result != NULL); + for (i = 0; i < 4000 - 7; i++) + ASSERT (result[i] == '0'); + ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%.4000d %d", -1234567, 99); + size_t i; + ASSERT (result != NULL); + ASSERT (result[0] == '-'); + for (i = 0; i < 4000 - 7; i++) + ASSERT (result[1 + i] == '0'); + ASSERT (strcmp (result + 1 + 4000 - 7, "1234567 99") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%.4000u %d", 1234567, 99); + size_t i; + ASSERT (result != NULL); + for (i = 0; i < 4000 - 7; i++) + ASSERT (result[i] == '0'); + ASSERT (strcmp (result + 4000 - 7, "1234567 99") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%.4000o %d", 1234567, 99); + size_t i; + ASSERT (result != NULL); + for (i = 0; i < 4000 - 7; i++) + ASSERT (result[i] == '0'); + ASSERT (strcmp (result + 4000 - 7, "4553207 99") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%.4000x %d", 1234567, 99); + size_t i; + ASSERT (result != NULL); + for (i = 0; i < 4000 - 6; i++) + ASSERT (result[i] == '0'); + ASSERT (strcmp (result + 4000 - 6, "12d687 99") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char *result; + int retval = + my_asprintf (&result, "%#.4000x %d", 1234567, 99); + size_t i; + ASSERT (result != NULL); + ASSERT (result[0] == '0'); + ASSERT (result[1] == 'x'); + for (i = 0; i < 4000 - 6; i++) + ASSERT (result[2 + i] == '0'); + ASSERT (strcmp (result + 2 + 4000 - 6, "12d687 99") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + { + char input[5000]; + char *result; + int retval; + size_t i; + + for (i = 0; i < sizeof (input) - 1; i++) + input[i] = 'a' + ((1000000 / (i + 1)) % 26); + input[i] = '\0'; + retval = my_asprintf (&result, "%.4000s %d", input, 99); + ASSERT (result != NULL); + ASSERT (memcmp (result, input, 4000) == 0); + ASSERT (strcmp (result + 4000, " 99") == 0); + ASSERT (retval == strlen (result)); + free (result); + } + + /* Test the support of the %s format directive. */ + + /* To verify that these tests succeed, it is necessary to run them under + a tool that checks against invalid memory accesses, such as ElectricFence + or "valgrind --tool=memcheck". */ + { + size_t i; + + for (i = 1; i <= 8; i++) + { + char *block; + char *result; + int retval; + + block = (char *) malloc (i); + memcpy (block, "abcdefgh", i); + retval = my_asprintf (&result, "%.*s", (int) i, block); + ASSERT (result != NULL); + ASSERT (memcmp (result, block, i) == 0); + ASSERT (result[i] == '\0'); + ASSERT (retval == strlen (result)); + free (result); + free (block); + } + } +#if HAVE_WCHAR_T + { + size_t i; + + for (i = 1; i <= 8; i++) + { + wchar_t *block; + size_t j; + char *result; + int retval; + + block = (wchar_t *) malloc (i * sizeof (wchar_t)); + for (j = 0; j < i; j++) + block[j] = "abcdefgh"[j]; + retval = my_asprintf (&result, "%.*ls", (int) i, block); + ASSERT (result != NULL); + ASSERT (memcmp (result, "abcdefgh", i) == 0); + ASSERT (result[i] == '\0'); + ASSERT (retval == strlen (result)); + free (result); + free (block); + } + } +#endif +} + +static int +my_asprintf (char **result, const char *format, ...) +{ + va_list args; + int ret; + + va_start (args, format); + ret = vasprintf (result, format, args); + va_end (args); + return ret; +} + +static void +test_vasprintf () +{ + test_function (my_asprintf); +} + +static void +test_asprintf () +{ + test_function (asprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasprintf (); + test_asprintf (); + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-vasprintf.c b/coreseek/m4-1.4.13/tests/test-vasprintf.c new file mode 100644 index 0000000..7c4a728 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-vasprintf.c @@ -0,0 +1,89 @@ +/* Test of vasprintf() and asprintf() functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +my_asprintf (char **result, const char *format, ...) +{ + va_list args; + int ret; + + va_start (args, format); + ret = vasprintf (result, format, args); + va_end (args); + return ret; +} + +static void +test_vasprintf () +{ + int repeat; + + for (repeat = 0; repeat <= 8; repeat++) + { + char *result; + int retval = my_asprintf (&result, "%d", 12345); + ASSERT (retval == 5); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + free (result); + } +} + +static void +test_asprintf () +{ + int repeat; + + for (repeat = 0; repeat <= 8; repeat++) + { + char *result; + int retval = asprintf (&result, "%d", 12345); + ASSERT (retval == 5); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + free (result); + } +} + +int +main (int argc, char *argv[]) +{ + test_vasprintf (); + test_asprintf (); + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-wchar.c b/coreseek/m4-1.4.13/tests/test-wchar.c new file mode 100644 index 0000000..19da7d9 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-wchar.c @@ -0,0 +1,31 @@ +/* Test of substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +/* Check that the types wchar_t and wint_t are defined. */ +wchar_t a = 'c'; +wint_t b = 'x'; + +int +main () +{ + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-wcrtomb.c b/coreseek/m4-1.4.13/tests/test-wcrtomb.c new file mode 100644 index 0000000..5ad6edc --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-wcrtomb.c @@ -0,0 +1,162 @@ +/* Test of conversion of wide character to multibyte character. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Check the multibyte character s[0..n-1]. */ +static void +check_character (const char *s, size_t n) +{ + wchar_t wc; + char buf[64]; + int iret; + size_t ret; + + wc = (wchar_t) 0xBADFACE; + iret = mbtowc (&wc, s, n); + ASSERT (iret == n); + + ret = wcrtomb (buf, wc, NULL); + ASSERT (ret == n); + ASSERT (memcmp (buf, s, n) == 0); + + /* Test special calling convention, passing a NULL pointer. */ + ret = wcrtomb (NULL, wc, NULL); + ASSERT (ret == 1); +} + +int +main (int argc, char *argv[]) +{ + char buf[64]; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test NUL character. */ + { + buf[0] = 'x'; + ret = wcrtomb (buf, 0, NULL); + ASSERT (ret == 1); + ASSERT (buf[0] == '\0'); + } + + /* Test single bytes. */ + { + int c; + + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + ret = wcrtomb (buf, btowc (c), NULL); + ASSERT (ret == 1); + ASSERT (buf[0] == (char) c); + break; + } + } + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + const char input[] = "B\374\337er"; /* "Büßer" */ + + check_character (input + 1, 1); + check_character (input + 2, 1); + } + return 0; + + case '2': + /* Locale encoding is UTF-8. */ + { + const char input[] = "B\303\274\303\237er"; /* "Büßer" */ + + check_character (input + 1, 2); + check_character (input + 3, 2); + } + return 0; + + case '3': + /* Locale encoding is EUC-JP. */ + { + const char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + + check_character (input + 1, 2); + check_character (input + 3, 2); + check_character (input + 5, 2); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + { + const char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + + check_character (input + 1, 2); + check_character (input + 3, 4); + } + return 0; + } + + return 1; +} diff --git a/coreseek/m4-1.4.13/tests/test-wcrtomb.sh b/coreseek/m4-1.4.13/tests/test-wcrtomb.sh new file mode 100755 index 0000000..3eda8f3 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-wcrtomb.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR \ + ./test-wcrtomb${EXEEXT} 1 \ + || exit 1 +fi + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 \ + ./test-wcrtomb${EXEEXT} 2 \ + || exit 1 +fi + +# Test whether a specific EUC-JP locale is installed. +: ${LOCALE_JA=ja_JP} +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA \ + ./test-wcrtomb${EXEEXT} 3 \ + || exit 1 +fi + +# Test whether a specific GB18030 locale is installed. +: ${LOCALE_ZH_CN=zh_CN.GB18030} +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN \ + ./test-wcrtomb${EXEEXT} 4 \ + || exit 1 +fi + +exit 0 diff --git a/coreseek/m4-1.4.13/tests/test-wctype.c b/coreseek/m4-1.4.13/tests/test-wctype.c new file mode 100644 index 0000000..c2d8601 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-wctype.c @@ -0,0 +1,46 @@ +/* Test of substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +/* Check that the type wint_t is defined. */ +wint_t a = 'x'; + +int +main () +{ + /* Check that the isw* functions exist as functions or as macros. */ + (void) iswalnum (0); + (void) iswalpha (0); +#if 0 /* not portable: missing on mingw */ + (void) iswblank (0); +#endif + (void) iswcntrl (0); + (void) iswdigit (0); + (void) iswgraph (0); + (void) iswlower (0); + (void) iswprint (0); + (void) iswpunct (0); + (void) iswspace (0); + (void) iswupper (0); + (void) iswxdigit (0); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/test-xvasprintf.c b/coreseek/m4-1.4.13/tests/test-xvasprintf.c new file mode 100644 index 0000000..234ec83 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/test-xvasprintf.c @@ -0,0 +1,91 @@ +/* Test of xvasprintf() and xasprintf() functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "xvasprintf.h" + +#include +#include +#include +#include + +#include "progname.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static char * +my_xasprintf (const char *format, ...) +{ + va_list args; + char *ret; + + va_start (args, format); + ret = xvasprintf (format, args); + va_end (args); + return ret; +} + +static void +test_xvasprintf () +{ + int repeat; + + for (repeat = 0; repeat <= 8; repeat++) + { + char *result = my_xasprintf ("%d", 12345); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + free (result); + } +} + +static void +test_xasprintf () +{ + int repeat; + + for (repeat = 0; repeat <= 8; repeat++) + { + char *result = xasprintf ("%d", 12345); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + free (result); + } +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_xvasprintf (); + test_xasprintf (); + + return 0; +} diff --git a/coreseek/m4-1.4.13/tests/unsetenv.c b/coreseek/m4-1.4.13/tests/unsetenv.c new file mode 100644 index 0000000..73ea878 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/unsetenv.c @@ -0,0 +1,90 @@ +/* Copyright (C) 1992,1995-1999,2000-2002,2005-2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#if !_LIBC +# define __set_errno(ev) ((errno) = (ev)) +#endif + +#include +#include + +#if !_LIBC +# define __environ environ +#endif + +#if _LIBC +/* This lock protects against simultaneous modifications of `environ'. */ +# include +__libc_lock_define_initialized (static, envlock) +# define LOCK __libc_lock_lock (envlock) +# define UNLOCK __libc_lock_unlock (envlock) +#else +# define LOCK +# define UNLOCK +#endif + +/* In the GNU C library we must keep the namespace clean. */ +#ifdef _LIBC +# define unsetenv __unsetenv +#endif + + +int +unsetenv (const char *name) +{ + size_t len; + char **ep; + + if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) + { + __set_errno (EINVAL); + return -1; + } + + len = strlen (name); + + LOCK; + + ep = __environ; + while (*ep != NULL) + if (!strncmp (*ep, name, len) && (*ep)[len] == '=') + { + /* Found it. Remove this pointer by moving later ones back. */ + char **dp = ep; + + do + dp[0] = dp[1]; + while (*dp++); + /* Continue the loop in case NAME appears again. */ + } + else + ++ep; + + UNLOCK; + + return 0; +} + +#ifdef _LIBC +# undef unsetenv +weak_alias (__unsetenv, unsetenv) +#endif diff --git a/coreseek/m4-1.4.13/tests/wctob.c b/coreseek/m4-1.4.13/tests/wctob.c new file mode 100644 index 0000000..4fa71b0 --- /dev/null +++ b/coreseek/m4-1.4.13/tests/wctob.c @@ -0,0 +1,37 @@ +/* Convert wide character to unibyte character. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +int +wctob (wint_t wc) +{ + char buf[64]; + + if (!(MB_CUR_MAX <= sizeof (buf))) + abort (); + if (wctomb (buf, wc) == 1) + return (unsigned char) buf[0]; + else + return EOF; +} diff --git a/coreseek/mmseg-3.2.14/.hg/00changelog.i b/coreseek/mmseg-3.2.14/.hg/00changelog.i new file mode 100755 index 0000000..d3a8311 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/00changelog.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/branchheads.cache b/coreseek/mmseg-3.2.14/.hg/branchheads.cache new file mode 100755 index 0000000..d249572 --- /dev/null +++ b/coreseek/mmseg-3.2.14/.hg/branchheads.cache @@ -0,0 +1,2 @@ +f714172a1ede3f1cb7f46c9c95dfe17207a549e9 2 +f714172a1ede3f1cb7f46c9c95dfe17207a549e9 default diff --git a/coreseek/mmseg-3.2.14/.hg/dirstate b/coreseek/mmseg-3.2.14/.hg/dirstate new file mode 100755 index 0000000..40de3e1 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/dirstate differ diff --git a/coreseek/mmseg-3.2.14/.hg/last-message.txt b/coreseek/mmseg-3.2.14/.hg/last-message.txt new file mode 100755 index 0000000..00a69c6 --- /dev/null +++ b/coreseek/mmseg-3.2.14/.hg/last-message.txt @@ -0,0 +1 @@ +ļʽ \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/.hg/requires b/coreseek/mmseg-3.2.14/.hg/requires new file mode 100755 index 0000000..5175383 --- /dev/null +++ b/coreseek/mmseg-3.2.14/.hg/requires @@ -0,0 +1,3 @@ +revlogv1 +store +fncache diff --git a/coreseek/mmseg-3.2.14/.hg/store/00changelog.i b/coreseek/mmseg-3.2.14/.hg/store/00changelog.i new file mode 100755 index 0000000..6fadf26 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/00changelog.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/00manifest.i b/coreseek/mmseg-3.2.14/.hg/store/00manifest.i new file mode 100755 index 0000000..a02e8a1 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/00manifest.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/.hgignore.i b/coreseek/mmseg-3.2.14/.hg/store/data/.hgignore.i new file mode 100755 index 0000000..2431023 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/.hgignore.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_a_u_t_h_o_r_s.i b/coreseek/mmseg-3.2.14/.hg/store/data/_a_u_t_h_o_r_s.i new file mode 100755 index 0000000..2431023 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_a_u_t_h_o_r_s.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_c_o_p_y_i_n_g.i b/coreseek/mmseg-3.2.14/.hg/store/data/_c_o_p_y_i_n_g.i new file mode 100755 index 0000000..c0a2e57 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_c_o_p_y_i_n_g.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_change_log.i b/coreseek/mmseg-3.2.14/.hg/store/data/_change_log.i new file mode 100755 index 0000000..2431023 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_change_log.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_i_n_s_t_a_l_l.i b/coreseek/mmseg-3.2.14/.hg/store/data/_i_n_s_t_a_l_l.i new file mode 100755 index 0000000..2431023 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_i_n_s_t_a_l_l.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_makefile.am.i b/coreseek/mmseg-3.2.14/.hg/store/data/_makefile.am.i new file mode 100755 index 0000000..4bbaf4a Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_makefile.am.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_makefile.in.i b/coreseek/mmseg-3.2.14/.hg/store/data/_makefile.in.i new file mode 100755 index 0000000..38a235b Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_makefile.in.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_n_e_w_s.i b/coreseek/mmseg-3.2.14/.hg/store/data/_n_e_w_s.i new file mode 100755 index 0000000..2431023 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_n_e_w_s.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_r_e_a_d_m_e.i b/coreseek/mmseg-3.2.14/.hg/store/data/_r_e_a_d_m_e.i new file mode 100755 index 0000000..2431023 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_r_e_a_d_m_e.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/_t_h_a_n_k_s.i b/coreseek/mmseg-3.2.14/.hg/store/data/_t_h_a_n_k_s.i new file mode 100755 index 0000000..2431023 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/_t_h_a_n_k_s.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/aclocal.m4.i b/coreseek/mmseg-3.2.14/.hg/store/data/aclocal.m4.i new file mode 100755 index 0000000..509ece7 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/aclocal.m4.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/bootstrap.i b/coreseek/mmseg-3.2.14/.hg/store/data/bootstrap.i new file mode 100755 index 0000000..6a3c274 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/bootstrap.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config-h.in.i b/coreseek/mmseg-3.2.14/.hg/store/data/config-h.in.i new file mode 100755 index 0000000..ff00432 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config-h.in.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/.cvsignore.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/.cvsignore.i new file mode 100755 index 0000000..82c7032 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/.cvsignore.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/apu-conf.m4.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/apu-conf.m4.i new file mode 100755 index 0000000..f166f96 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/apu-conf.m4.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/apu-hints.m4.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/apu-hints.m4.i new file mode 100755 index 0000000..8731d10 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/apu-hints.m4.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/config.guess.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/config.guess.i new file mode 100755 index 0000000..36ed402 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/config.guess.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/config.sub.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/config.sub.i new file mode 100755 index 0000000..03b1386 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/config.sub.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/depcomp.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/depcomp.i new file mode 100755 index 0000000..d58c125 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/depcomp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/find__apr.m4.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/find__apr.m4.i new file mode 100755 index 0000000..40eeb9c Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/find__apr.m4.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/install-sh.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/install-sh.i new file mode 100755 index 0000000..ade7e30 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/install-sh.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/ltmain.sh.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/ltmain.sh.i new file mode 100755 index 0000000..36ce8ac Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/ltmain.sh.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/mdate-sh.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/mdate-sh.i new file mode 100755 index 0000000..ecdb24f Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/mdate-sh.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/missing.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/missing.i new file mode 100755 index 0000000..43c801d Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/missing.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/mkinstalldirs.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/mkinstalldirs.i new file mode 100755 index 0000000..6853c77 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/mkinstalldirs.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/readline.m4.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/readline.m4.i new file mode 100755 index 0000000..3017e20 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/readline.m4.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/sys__errlist.m4.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/sys__errlist.m4.i new file mode 100755 index 0000000..df99fbf Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/sys__errlist.m4.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/config/sys__siglist.m4.i b/coreseek/mmseg-3.2.14/.hg/store/data/config/sys__siglist.m4.i new file mode 100755 index 0000000..b627720 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/config/sys__siglist.m4.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/configure.d b/coreseek/mmseg-3.2.14/.hg/store/data/configure.d new file mode 100755 index 0000000..55cafc7 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/configure.d differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/configure.i b/coreseek/mmseg-3.2.14/.hg/store/data/configure.i new file mode 100755 index 0000000..ab4a41d Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/configure.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/configure.in.i b/coreseek/mmseg-3.2.14/.hg/store/data/configure.in.i new file mode 100755 index 0000000..1d64f0b Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/configure.in.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/_lexicon__full__words.txt.d b/coreseek/mmseg-3.2.14/.hg/store/data/data/_lexicon__full__words.txt.d new file mode 100755 index 0000000..174d0ef Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/_lexicon__full__words.txt.d differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/_lexicon__full__words.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/data/_lexicon__full__words.txt.i new file mode 100755 index 0000000..2d6a674 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/_lexicon__full__words.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/build__unigram.py.i b/coreseek/mmseg-3.2.14/.hg/store/data/data/build__unigram.py.i new file mode 100755 index 0000000..8446418 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/build__unigram.py.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/char.stat.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/data/char.stat.txt.i new file mode 100755 index 0000000..b9f646f Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/char.stat.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/mmseg.ini.i b/coreseek/mmseg-3.2.14/.hg/store/data/data/mmseg.ini.i new file mode 100755 index 0000000..4623cf3 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/mmseg.ini.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/uni.lib.d b/coreseek/mmseg-3.2.14/.hg/store/data/data/uni.lib.d new file mode 100755 index 0000000..0f7696a Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/uni.lib.d differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/uni.lib.i b/coreseek/mmseg-3.2.14/.hg/store/data/data/uni.lib.i new file mode 100755 index 0000000..2411495 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/uni.lib.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/unigram.txt.d b/coreseek/mmseg-3.2.14/.hg/store/data/data/unigram.txt.d new file mode 100755 index 0000000..5731a08 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/unigram.txt.d differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/data/unigram.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/data/unigram.txt.i new file mode 100755 index 0000000..48c63c7 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/data/unigram.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/python/mmseg__interface.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/python/mmseg__interface.cpp.i new file mode 100755 index 0000000..5dee090 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/python/mmseg__interface.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/python/mmseg__interface.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/python/mmseg__interface.h.i new file mode 100755 index 0000000..2195b8c Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/python/mmseg__interface.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.c.i b/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.c.i new file mode 100755 index 0000000..25aff90 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.c.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.sln.i b/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.sln.i new file mode 100755 index 0000000..910fc90 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.sln.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.vcproj.i b/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.vcproj.i new file mode 100755 index 0000000..d846cc0 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/python/pymmseg.vcproj.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/python/tmmseg.py.i b/coreseek/mmseg-3.2.14/.hg/store/data/python/tmmseg.py.i new file mode 100755 index 0000000..4608b92 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/python/tmmseg.py.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/ruby/_makefile.i b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/_makefile.i new file mode 100755 index 0000000..b83ea69 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/_makefile.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/ruby/extconf.lin.rb.i b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/extconf.lin.rb.i new file mode 100755 index 0000000..3d28381 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/extconf.lin.rb.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/ruby/extconf.win.rb.i b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/extconf.win.rb.i new file mode 100755 index 0000000..82d5815 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/extconf.win.rb.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/ruby/mmseg-i386-mswin32.def.i b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/mmseg-i386-mswin32.def.i new file mode 100755 index 0000000..12caa6a Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/mmseg-i386-mswin32.def.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/ruby/mmseg-i386-mswin32.exp.i b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/mmseg-i386-mswin32.exp.i new file mode 100755 index 0000000..4db6866 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/mmseg-i386-mswin32.exp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/ruby/readme.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/readme.txt.i new file mode 100755 index 0000000..27bc596 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/readme.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/ruby/rubyapi.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/rubyapi.cpp.i new file mode 100755 index 0000000..c700446 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/rubyapi.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/ruby/test.rb.i b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/test.rb.i new file mode 100755 index 0000000..e7d945b Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/ruby/test.rb.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/script/build__thesaurus.py.i b/coreseek/mmseg-3.2.14/.hg/store/data/script/build__thesaurus.py.i new file mode 100755 index 0000000..e020f1d Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/script/build__thesaurus.py.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/script/build__tolower__table.py.i b/coreseek/mmseg-3.2.14/.hg/store/data/script/build__tolower__table.py.i new file mode 100755 index 0000000..ceefec0 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/script/build__tolower__table.py.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/script/char__table__build.py.i b/coreseek/mmseg-3.2.14/.hg/store/data/script/char__table__build.py.i new file mode 100755 index 0000000..b520710 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/script/char__table__build.py.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/script/tolower.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/script/tolower.txt.i new file mode 100755 index 0000000..eef32b8 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/script/tolower.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/_makefile.am.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/_makefile.am.i new file mode 100755 index 0000000..48a2e59 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/_makefile.am.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/config.win.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/config.win.h.i new file mode 100755 index 0000000..bd013b1 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/config.win.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/csr__typedefs.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/csr__typedefs.h.i new file mode 100755 index 0000000..ec2a29e Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/csr__typedefs.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_i_corpus_reader.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_i_corpus_reader.h.i new file mode 100755 index 0000000..9bda2d8 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_i_corpus_reader.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segment_pkg.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segment_pkg.cpp.i new file mode 100755 index 0000000..cf77122 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segment_pkg.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segment_pkg.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segment_pkg.h.i new file mode 100755 index 0000000..aaaf278 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segment_pkg.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter.h.i new file mode 100755 index 0000000..2727599 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter_manager.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter_manager.cpp.i new file mode 100755 index 0000000..b7f723f Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter_manager.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter_manager.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter_manager.h.i new file mode 100755 index 0000000..f454917 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_segmenter_manager.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_synonyms_dict.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_synonyms_dict.cpp.i new file mode 100755 index 0000000..a26349e Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_synonyms_dict.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_synonyms_dict.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_synonyms_dict.h.i new file mode 100755 index 0000000..26da50e Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_synonyms_dict.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_thesaurus_dict.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_thesaurus_dict.cpp.i new file mode 100755 index 0000000..6aa7dc6 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_thesaurus_dict.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_thesaurus_dict.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_thesaurus_dict.h.i new file mode 100755 index 0000000..570526c Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_thesaurus_dict.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_corpus_reader.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_corpus_reader.cpp.i new file mode 100755 index 0000000..05b9acd Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_corpus_reader.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_corpus_reader.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_corpus_reader.h.i new file mode 100755 index 0000000..8912d2c Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_corpus_reader.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_dict.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_dict.cpp.i new file mode 100755 index 0000000..5dfab79 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_dict.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_dict.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_dict.h.i new file mode 100755 index 0000000..53c33cf Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_dict.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_record.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_record.cpp.i new file mode 100755 index 0000000..0e29d0e Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_record.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_record.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_record.h.i new file mode 100755 index 0000000..c8ee6c6 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/_unigram_record.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/mmthunk.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/mmthunk.cpp.i new file mode 100755 index 0000000..1c43e57 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/mmthunk.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/mmthunk.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/mmthunk.h.i new file mode 100755 index 0000000..beff032 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/mmthunk.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/segmenter.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/segmenter.cpp.i new file mode 100755 index 0000000..b02818e Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/segmenter.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/css/tolowercase.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/tolowercase.h.i new file mode 100755 index 0000000..685f5ea Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/css/tolowercase.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/dictionary.c.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/dictionary.c.i new file mode 100755 index 0000000..2bfe50e Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/dictionary.c.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/dictionary.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/dictionary.h.i new file mode 100755 index 0000000..fb273a4 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/dictionary.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/iniparser.c.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/iniparser.c.i new file mode 100755 index 0000000..a88e1c0 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/iniparser.c.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/iniparser.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/iniparser.h.i new file mode 100755 index 0000000..830947f Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/iniparser/iniparser.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/mk__dist.bat.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/mk__dist.bat.i new file mode 100755 index 0000000..ad9e5dd Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/mk__dist.bat.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/mmseg__main.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/mmseg__main.cpp.i new file mode 100755 index 0000000..232aa56 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/mmseg__main.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/t1.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/t1.txt.i new file mode 100755 index 0000000..148e8ac Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/t1.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_singleton.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_singleton.h.i new file mode 100755 index 0000000..108a72a Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_singleton.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_string_tokenizer.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_string_tokenizer.cpp.i new file mode 100755 index 0000000..20a9158 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_string_tokenizer.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_string_tokenizer.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_string_tokenizer.h.i new file mode 100755 index 0000000..b5683a6 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_string_tokenizer.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_utf8__16.cpp.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_utf8__16.cpp.i new file mode 100755 index 0000000..52dd975 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_utf8__16.cpp.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_utf8__16.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_utf8__16.h.i new file mode 100755 index 0000000..11016d8 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/_utf8__16.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/assert.c.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/assert.c.i new file mode 100755 index 0000000..ae34fc6 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/assert.c.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt.c.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt.c.i new file mode 100755 index 0000000..2f930f3 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt.c.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt.h.i new file mode 100755 index 0000000..3923bfa Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt__win.c.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt__win.c.i new file mode 100755 index 0000000..6d86945 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt__win.c.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt__win.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt__win.h.i new file mode 100755 index 0000000..3d9a84c Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/bsd__getopt__win.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr.h.i new file mode 100755 index 0000000..ac2e837 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__assert.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__assert.h.i new file mode 100755 index 0000000..d1b0760 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__assert.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__mmap.c.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__mmap.c.i new file mode 100755 index 0000000..2947ece Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__mmap.c.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__mmap.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__mmap.h.i new file mode 100755 index 0000000..fac0292 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__mmap.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__pool.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__pool.h.i new file mode 100755 index 0000000..0a84894 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__pool.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__utils.c.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__utils.c.i new file mode 100755 index 0000000..b7636ed Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__utils.c.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__utils.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__utils.h.i new file mode 100755 index 0000000..e9f9cd5 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/csr__utils.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/darts.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/darts.h.i new file mode 100755 index 0000000..373fb50 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/darts.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/freelist.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/freelist.h.i new file mode 100755 index 0000000..53c32fd Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/freelist.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/os.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/os.h.i new file mode 100755 index 0000000..e9665f2 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/os.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/scoped__ptr.h.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/scoped__ptr.h.i new file mode 100755 index 0000000..1b2bf12 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/utils/scoped__ptr.h.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/changelog.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/changelog.txt.i new file mode 100755 index 0000000..7d2b448 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/changelog.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/css03.sln.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/css03.sln.i new file mode 100755 index 0000000..9f53c4f Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/css03.sln.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/css05.sln.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/css05.sln.i new file mode 100755 index 0000000..20a4036 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/css05.sln.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/libcss03.vcproj.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/libcss03.vcproj.i new file mode 100755 index 0000000..6d2790e Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/libcss03.vcproj.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/libcss05.vcproj.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/libcss05.vcproj.i new file mode 100755 index 0000000..8a27d91 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/libcss05.vcproj.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/mmseg03.vcproj.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/mmseg03.vcproj.i new file mode 100755 index 0000000..506a91c Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/mmseg03.vcproj.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/mmseg05.vcproj.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/mmseg05.vcproj.i new file mode 100755 index 0000000..3dbe9dc Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/mmseg05.vcproj.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/readme.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/readme.txt.i new file mode 100755 index 0000000..0e65c41 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/readme.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/syb.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/syb.txt.i new file mode 100755 index 0000000..0fba0f6 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/syb.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t.txt.i new file mode 100755 index 0000000..339f2e0 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t1.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t1.txt.i new file mode 100755 index 0000000..edca3cf Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t1.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t2.txt.i b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t2.txt.i new file mode 100755 index 0000000..461cf6c Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/src/win32/t2.txt.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/data/stamp-h.in.i b/coreseek/mmseg-3.2.14/.hg/store/data/stamp-h.in.i new file mode 100755 index 0000000..0c81020 Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/data/stamp-h.in.i differ diff --git a/coreseek/mmseg-3.2.14/.hg/store/fncache b/coreseek/mmseg-3.2.14/.hg/store/fncache new file mode 100755 index 0000000..a933900 --- /dev/null +++ b/coreseek/mmseg-3.2.14/.hg/store/fncache @@ -0,0 +1,122 @@ +data/.hgignore.i +data/AUTHORS.i +data/COPYING.i +data/ChangeLog.i +data/INSTALL.i +data/Makefile.am.i +data/Makefile.in.i +data/NEWS.i +data/README.i +data/THANKS.i +data/aclocal.m4.i +data/bootstrap.i +data/config-h.in.i +data/config/.cvsignore.i +data/config/apu-conf.m4.i +data/config/apu-hints.m4.i +data/config/config.guess.i +data/config/config.sub.i +data/config/depcomp.i +data/config/find_apr.m4.i +data/config/install-sh.i +data/config/ltmain.sh.i +data/config/mdate-sh.i +data/config/missing.i +data/config/mkinstalldirs.i +data/config/readline.m4.i +data/config/sys_errlist.m4.i +data/config/sys_siglist.m4.i +data/configure.i +data/configure.d +data/configure.in.i +data/data/Lexicon_full_words.txt.i +data/data/Lexicon_full_words.txt.d +data/data/build_unigram.py.i +data/data/char.stat.txt.i +data/data/mmseg.ini.i +data/data/uni.lib.i +data/data/uni.lib.d +data/data/unigram.txt.i +data/data/unigram.txt.d +data/python/mmseg_interface.cpp.i +data/python/mmseg_interface.h.i +data/python/pymmseg.c.i +data/python/pymmseg.sln.i +data/python/pymmseg.vcproj.i +data/python/tmmseg.py.i +data/ruby/Makefile.i +data/ruby/extconf.lin.rb.i +data/ruby/extconf.win.rb.i +data/ruby/mmseg-i386-mswin32.def.i +data/ruby/mmseg-i386-mswin32.exp.i +data/ruby/readme.txt.i +data/ruby/rubyapi.cpp.i +data/ruby/test.rb.i +data/script/build_thesaurus.py.i +data/script/build_tolower_table.py.i +data/script/char_table_build.py.i +data/script/tolower.txt.i +data/src/Makefile.am.i +data/src/config.win.h.i +data/src/csr_typedefs.h.i +data/src/css/ICorpusReader.h.i +data/src/css/SegmentPkg.cpp.i +data/src/css/SegmentPkg.h.i +data/src/css/Segmenter.h.i +data/src/css/SegmenterManager.cpp.i +data/src/css/SegmenterManager.h.i +data/src/css/SynonymsDict.cpp.i +data/src/css/SynonymsDict.h.i +data/src/css/ThesaurusDict.cpp.i +data/src/css/ThesaurusDict.h.i +data/src/css/UnigramCorpusReader.cpp.i +data/src/css/UnigramCorpusReader.h.i +data/src/css/UnigramDict.cpp.i +data/src/css/UnigramDict.h.i +data/src/css/UnigramRecord.cpp.i +data/src/css/UnigramRecord.h.i +data/src/css/mmthunk.cpp.i +data/src/css/mmthunk.h.i +data/src/css/segmenter.cpp.i +data/src/css/tolowercase.h.i +data/src/iniparser/dictionary.c.i +data/src/iniparser/dictionary.h.i +data/src/iniparser/iniparser.c.i +data/src/iniparser/iniparser.h.i +data/src/mk_dist.bat.i +data/src/mmseg_main.cpp.i +data/src/t1.txt.i +data/src/utils/Singleton.h.i +data/src/utils/StringTokenizer.cpp.i +data/src/utils/StringTokenizer.h.i +data/src/utils/Utf8_16.cpp.i +data/src/utils/Utf8_16.h.i +data/src/utils/assert.c.i +data/src/utils/bsd_getopt.c.i +data/src/utils/bsd_getopt.h.i +data/src/utils/bsd_getopt_win.c.i +data/src/utils/bsd_getopt_win.h.i +data/src/utils/csr.h.i +data/src/utils/csr_assert.h.i +data/src/utils/csr_mmap.c.i +data/src/utils/csr_mmap.h.i +data/src/utils/csr_pool.h.i +data/src/utils/csr_utils.c.i +data/src/utils/csr_utils.h.i +data/src/utils/darts.h.i +data/src/utils/freelist.h.i +data/src/utils/os.h.i +data/src/utils/scoped_ptr.h.i +data/src/win32/changelog.txt.i +data/src/win32/css03.sln.i +data/src/win32/css05.sln.i +data/src/win32/libcss03.vcproj.i +data/src/win32/libcss05.vcproj.i +data/src/win32/mmseg03.vcproj.i +data/src/win32/mmseg05.vcproj.i +data/src/win32/readme.txt.i +data/src/win32/syb.txt.i +data/src/win32/t.txt.i +data/src/win32/t1.txt.i +data/src/win32/t2.txt.i +data/stamp-h.in.i diff --git a/coreseek/mmseg-3.2.14/.hg/store/undo b/coreseek/mmseg-3.2.14/.hg/store/undo new file mode 100755 index 0000000..5cef9dd Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/store/undo differ diff --git a/coreseek/mmseg-3.2.14/.hg/tags.cache b/coreseek/mmseg-3.2.14/.hg/tags.cache new file mode 100755 index 0000000..39c320b --- /dev/null +++ b/coreseek/mmseg-3.2.14/.hg/tags.cache @@ -0,0 +1,2 @@ +2 f714172a1ede3f1cb7f46c9c95dfe17207a549e9 + diff --git a/coreseek/mmseg-3.2.14/.hg/thgstatus b/coreseek/mmseg-3.2.14/.hg/thgstatus new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/.hg/undo.branch b/coreseek/mmseg-3.2.14/.hg/undo.branch new file mode 100755 index 0000000..331d858 --- /dev/null +++ b/coreseek/mmseg-3.2.14/.hg/undo.branch @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/.hg/undo.desc b/coreseek/mmseg-3.2.14/.hg/undo.desc new file mode 100755 index 0000000..2aa13db --- /dev/null +++ b/coreseek/mmseg-3.2.14/.hg/undo.desc @@ -0,0 +1,2 @@ +2 +commit diff --git a/coreseek/mmseg-3.2.14/.hg/undo.dirstate b/coreseek/mmseg-3.2.14/.hg/undo.dirstate new file mode 100755 index 0000000..79b025a Binary files /dev/null and b/coreseek/mmseg-3.2.14/.hg/undo.dirstate differ diff --git a/coreseek/mmseg-3.2.14/.hgignore b/coreseek/mmseg-3.2.14/.hgignore new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/AUTHORS b/coreseek/mmseg-3.2.14/AUTHORS new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/COPYING b/coreseek/mmseg-3.2.14/COPYING new file mode 100755 index 0000000..d60c31a --- /dev/null +++ b/coreseek/mmseg-3.2.14/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 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. + + 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 + + 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/coreseek/mmseg-3.2.14/ChangeLog b/coreseek/mmseg-3.2.14/ChangeLog new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/INSTALL b/coreseek/mmseg-3.2.14/INSTALL new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/Makefile b/coreseek/mmseg-3.2.14/Makefile new file mode 100644 index 0000000..63c5aef --- /dev/null +++ b/coreseek/mmseg-3.2.14/Makefile @@ -0,0 +1,867 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + +pkgdatadir = $(datadir)/mmseg +pkgincludedir = $(includedir)/mmseg +pkglibdir = $(libdir)/mmseg +pkglibexecdir = $(libexecdir)/mmseg +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +subdir = . +DIST_COMMON = README $(am__configure_deps) $(dist_dict_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config-h.in $(top_srcdir)/configure AUTHORS COPYING \ + ChangeLog INSTALL NEWS THANKS config/config.guess \ + config/config.sub config/depcomp config/install-sh \ + config/ltmain.sh config/mdate-sh config/missing \ + config/mkinstalldirs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/config/sys_errlist.m4 \ + $(top_srcdir)/config/sys_siglist.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(dictdir)" +SCRIPTS = $(dist_dict_SCRIPTS) +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = aclocal -I $(ac_aux_dir) +AMTAR = $${TAR-tar} +AR = ar +AUTOCONF = autoconf +AUTOHEADER = autoheader +AUTOMAKE = automake-1.11 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = ${LIBOBJDIR}$U.o +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = ${LIBOBJDIR}$U.lo +MAKEINFO = makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = mmseg +PACKAGE_BUGREPORT = +PACKAGE_NAME = +PACKAGE_STRING = +PACKAGE_TARNAME = +PACKAGE_URL = +PACKAGE_VERSION = +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 0.7 +abs_builddir = /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14 +abs_srcdir = /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14 +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14 +ac_aux_dir = config +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local/mmseg3 +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = +top_builddir = . +top_srcdir = . +AUX_DIST = $(ac_aux_dir)/config.guess \ + $(ac_aux_dir)/config.sub \ + $(ac_aux_dir)/install-sh \ + $(ac_aux_dir)/ltconfig \ + $(ac_aux_dir)/ltmain.sh \ + $(ac_aux_dir)/mdate-sh \ + $(ac_aux_dir)/missing \ + $(ac_aux_dir)/mkinstalldirs + +AUX_DIST_EXTRA = $(ac_aux_dir)/readline.m4 \ + $(ac_aux_dir)/sys_errlist.m4 \ + $(ac_aux_dir)/sys_siglist.m4 + +EXTRA_DIST = bootstrap +dictdir = $(prefix)/etc +dist_dict_SCRIPTS = data/unigram.txt data/uni.lib data/mmseg.ini +AUTOMAKE_OPTIONS = gnits +SUBDIRS = src +MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure config-h.in \ + stamp-h.in $(AUX_DIST) + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnits'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnits \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then rm -f stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi + +stamp-h1: $(srcdir)/config-h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config-h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-dist_dictSCRIPTS: $(dist_dict_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(dictdir)" || $(MKDIR_P) "$(DESTDIR)$(dictdir)" + @list='$(dist_dict_SCRIPTS)'; test -n "$(dictdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(dictdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(dictdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-dist_dictSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_dict_SCRIPTS)'; test -n "$(dictdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(dictdir)'; $(am__uninstall_files_from_dir) + +installcheck-dist_dictSCRIPTS: $(dist_dict_SCRIPTS) + bad=0; pid=$$$$; list="$(dist_dict_SCRIPTS)"; for p in $$list; do \ + case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ + *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ + esac; \ + f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \ + for opt in --help --version; do \ + if "$(DESTDIR)$(dictdir)/$$f" $$opt >c$${pid}_.out \ + 2>c$${pid}_.err &2; bad=1; fi; \ + done; \ + done; rm -f c$${pid}_.???; exit $$bad + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config-h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config-h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config-h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config-h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @case `sed 15q $(srcdir)/NEWS` in \ + *"$(VERSION)"*) : ;; \ + *) \ + echo "NEWS not updated; not releasing" 1>&2; \ + exit 1;; \ + esac + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(SCRIPTS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(dictdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-dist_dictSCRIPTS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: installcheck-dist_dictSCRIPTS + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_dictSCRIPTS + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzip dist-lzma dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dist_dictSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installcheck-dist_dictSCRIPTS \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dist_dictSCRIPTS + + +html: + @echo Making $@ in $(docdir) + @cd $(docdir) && make $@ +dist-hook: + (cd $(distdir) && mkdir $(ac_aux_dir)) + for file in $(AUX_DIST) $(AUX_DIST_EXTRA); do \ + cp $$file $(distdir)/$$file; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/mmseg-3.2.14/Makefile.am b/coreseek/mmseg-3.2.14/Makefile.am new file mode 100755 index 0000000..0dc93ce --- /dev/null +++ b/coreseek/mmseg-3.2.14/Makefile.am @@ -0,0 +1,55 @@ +## Makefile.am -- Process this file with automake to produce Makefile.in +## Copyright (C) 2000 Gary V. Vaughan +## +## This program is free software; you can 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +## @start 1 +AUX_DIST = $(ac_aux_dir)/config.guess \ + $(ac_aux_dir)/config.sub \ + $(ac_aux_dir)/install-sh \ + $(ac_aux_dir)/ltconfig \ + $(ac_aux_dir)/ltmain.sh \ + $(ac_aux_dir)/mdate-sh \ + $(ac_aux_dir)/missing \ + $(ac_aux_dir)/mkinstalldirs +AUX_DIST_EXTRA = $(ac_aux_dir)/readline.m4 \ + $(ac_aux_dir)/sys_errlist.m4 \ + $(ac_aux_dir)/sys_siglist.m4 +EXTRA_DIST = bootstrap + +dictdir = $(prefix)/etc +dist_dict_SCRIPTS = data/unigram.txt data/uni.lib data/mmseg.ini + +## @end 1 +AUTOMAKE_OPTIONS = gnits +SUBDIRS = src +## @start 1 +MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure config-h.in \ + stamp-h.in $(AUX_DIST) + +## @end 1 +ACLOCAL = aclocal -I $(ac_aux_dir) + +html: + @echo Making $@ in $(docdir) + @cd $(docdir) && make $@ +## @end 2 +## @start 1 +dist-hook: + (cd $(distdir) && mkdir $(ac_aux_dir)) + for file in $(AUX_DIST) $(AUX_DIST_EXTRA); do \ + cp $$file $(distdir)/$$file; \ + done +## @end 1 diff --git a/coreseek/mmseg-3.2.14/Makefile.in b/coreseek/mmseg-3.2.14/Makefile.in new file mode 100644 index 0000000..a3234c9 --- /dev/null +++ b/coreseek/mmseg-3.2.14/Makefile.in @@ -0,0 +1,867 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(dist_dict_SCRIPTS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config-h.in $(top_srcdir)/configure AUTHORS COPYING \ + ChangeLog INSTALL NEWS THANKS config/config.guess \ + config/config.sub config/depcomp config/install-sh \ + config/ltmain.sh config/mdate-sh config/missing \ + config/mkinstalldirs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/config/sys_errlist.m4 \ + $(top_srcdir)/config/sys_siglist.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(dictdir)" +SCRIPTS = $(dist_dict_SCRIPTS) +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = aclocal -I $(ac_aux_dir) +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUX_DIST = $(ac_aux_dir)/config.guess \ + $(ac_aux_dir)/config.sub \ + $(ac_aux_dir)/install-sh \ + $(ac_aux_dir)/ltconfig \ + $(ac_aux_dir)/ltmain.sh \ + $(ac_aux_dir)/mdate-sh \ + $(ac_aux_dir)/missing \ + $(ac_aux_dir)/mkinstalldirs + +AUX_DIST_EXTRA = $(ac_aux_dir)/readline.m4 \ + $(ac_aux_dir)/sys_errlist.m4 \ + $(ac_aux_dir)/sys_siglist.m4 + +EXTRA_DIST = bootstrap +dictdir = $(prefix)/etc +dist_dict_SCRIPTS = data/unigram.txt data/uni.lib data/mmseg.ini +AUTOMAKE_OPTIONS = gnits +SUBDIRS = src +MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure config-h.in \ + stamp-h.in $(AUX_DIST) + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnits'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnits \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then rm -f stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi + +stamp-h1: $(srcdir)/config-h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config-h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-dist_dictSCRIPTS: $(dist_dict_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(dictdir)" || $(MKDIR_P) "$(DESTDIR)$(dictdir)" + @list='$(dist_dict_SCRIPTS)'; test -n "$(dictdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(dictdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(dictdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-dist_dictSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_dict_SCRIPTS)'; test -n "$(dictdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + dir='$(DESTDIR)$(dictdir)'; $(am__uninstall_files_from_dir) + +installcheck-dist_dictSCRIPTS: $(dist_dict_SCRIPTS) + bad=0; pid=$$$$; list="$(dist_dict_SCRIPTS)"; for p in $$list; do \ + case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ + *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ + esac; \ + f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \ + for opt in --help --version; do \ + if "$(DESTDIR)$(dictdir)/$$f" $$opt >c$${pid}_.out \ + 2>c$${pid}_.err &2; bad=1; fi; \ + done; \ + done; rm -f c$${pid}_.???; exit $$bad + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config-h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config-h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config-h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config-h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @case `sed 15q $(srcdir)/NEWS` in \ + *"$(VERSION)"*) : ;; \ + *) \ + echo "NEWS not updated; not releasing" 1>&2; \ + exit 1;; \ + esac + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(SCRIPTS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(dictdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-dist_dictSCRIPTS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: installcheck-dist_dictSCRIPTS + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-dist_dictSCRIPTS + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzip dist-lzma dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dist_dictSCRIPTS install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installcheck-dist_dictSCRIPTS \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-dist_dictSCRIPTS + + +html: + @echo Making $@ in $(docdir) + @cd $(docdir) && make $@ +dist-hook: + (cd $(distdir) && mkdir $(ac_aux_dir)) + for file in $(AUX_DIST) $(AUX_DIST_EXTRA); do \ + cp $$file $(distdir)/$$file; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/mmseg-3.2.14/NEWS b/coreseek/mmseg-3.2.14/NEWS new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/README b/coreseek/mmseg-3.2.14/README new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/THANKS b/coreseek/mmseg-3.2.14/THANKS new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/aclocal.m4 b/coreseek/mmseg-3.2.14/aclocal.m4 new file mode 100644 index 0000000..f3544c2 --- /dev/null +++ b/coreseek/mmseg-3.2.14/aclocal.m4 @@ -0,0 +1,9615 @@ +# generated automatically by aclocal 1.11.3 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, +# Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 57 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# `#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test $lt_write_fail = 0 && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_REPLACE_SHELLFNS + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script which will find a shell with a builtin +# printf (which we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case "$ECHO" in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + _LT_TAGVAR(link_all_deplibs, $1)=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) + + +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) + + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) + + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi + +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) + + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 7 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 3337 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.2]) +m4_define([LT_PACKAGE_REVISION], [1.3337]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.2' +macro_revision='1.3337' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.3], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.3])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + + +# Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# This was merged into AC_PROG_CC in Autoconf. + +AU_DEFUN([AM_PROG_CC_STDC], +[AC_PROG_CC +AC_DIAGNOSE([obsolete], [$0: + your code should no longer depend upon `am_cv_prog_cc_stdc', but upon + `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when + you adjust the code. You can also remove the above call to + AC_PROG_CC if you already called it elsewhere.]) +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc +]) +AU_DEFUN([fp_PROG_CC_STDC]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, +# 2010, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, +# Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([config/readline.m4]) +m4_include([config/sys_errlist.m4]) +m4_include([config/sys_siglist.m4]) diff --git a/coreseek/mmseg-3.2.14/autom4te.cache/output.0 b/coreseek/mmseg-3.2.14/autom4te.cache/output.0 new file mode 100644 index 0000000..2bfb6e4 --- /dev/null +++ b/coreseek/mmseg-3.2.14/autom4te.cache/output.0 @@ -0,0 +1,18517 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.68. +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in @%:@ (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +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='mkdir -p "$as_dir"' +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'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="src/mmseg_main.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +ac_aux_dir +LIB@&t@OBJS +WITH_READLINE_FALSE +WITH_READLINE_TRUE +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +with_sysroot +enable_libtool_lock +with_readline +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CPP +CXXCPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +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= ;; + *) 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_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'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_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 .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures 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 + @<:@@S|@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 + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic@<:@=PKGS@:>@ try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-readline compile with the system readline library + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + 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. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + $as_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.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_cpp LINENO +@%:@ ------------------------ +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_cpp + +@%:@ ac_fn_cxx_try_link LINENO +@%:@ ------------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_link + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_mongrel + +@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES +@%:@ ------------------------------------------- +@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache +@%:@ variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +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 +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_type +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.68. 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=. + $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_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'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > 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 + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in @%:@(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_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,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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 + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_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. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +ac_config_headers="$ac_config_headers config.h:config-h.in" + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=mmseg + VERSION=0.7 + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +#AC_PROG_CC +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+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 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C++ compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$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 +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +@%:@ Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +@%:@ Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + @%:@ Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + @%:@ Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +@%:@ Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + @%:@ Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +@%:@define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +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 + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +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_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "@%:@define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +for ac_header in stdlib.h unistd.h errno.h assert.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in string.h strings.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + break +fi + +done + + +# @start 2 +# am_cv_prog_cc_stdc is set by AM_PROG_CC_STDC +case $am_cv_prog_cc_stdc,$ac_cv_header_varargs_h in +no,) + # Non-ANSI compiler, so we must use varargs.h. + for ac_header in varargs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default" +if test "x$ac_cv_header_varargs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VARARGS_H 1 +_ACEOF + +fi + +done + + ;; +*,yes) + # Parent package is using varargs.h which is incompatible with + # stdarg.h, so we do the same (recheck to generate checking... + # message). + for ac_header in varargs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default" +if test "x$ac_cv_header_varargs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VARARGS_H 1 +_ACEOF + +fi + +done + + ;; +*) + # If stdarg.h is present define HAVE_STDARG_H. + for ac_header in stdarg.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default" +if test "x$ac_cv_header_stdarg_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STDARG_H 1 +_ACEOF + +fi + +done + + ;; +esac + +case x$ac_cv_header_stdarg_h$ac_cv_header_varargs_h in +x*yes*) ;; +*) as_fn_error one of which \ +is required for the build to proceed. "Could not find stdarg.h or varargs.h" "$LINENO" 5 ;; +esac +# @end 2 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "@%:@define const /**/" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define pid_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define size_t unsigned int +_ACEOF + +fi + + + +@%:@ Check whether --with-readline was given. +if test "${with_readline+set}" = set; then : + withval=$with_readline; if test x"${withval-no}" != no; then + sic_save_LIBS=$LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 +$as_echo_n "checking for readline in -lreadline... " >&6; } +if ${ac_cv_lib_readline_readline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lreadline $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char readline (); +int +main () +{ +return readline (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_readline_readline=yes +else + ac_cv_lib_readline_readline=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5 +$as_echo "$ac_cv_lib_readline_readline" >&6; } +if test "x$ac_cv_lib_readline_readline" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBREADLINE 1 +_ACEOF + + LIBS="-lreadline $LIBS" + +fi + + if test x"${ac_cv_lib_readline_readline}" = xno; then + as_fn_error $? "libreadline not found" "$LINENO" 5 + fi + LIBS=$sic_save_LIBS +fi +fi + + if test x"${with_readline-no}" != xno; then + WITH_READLINE_TRUE= + WITH_READLINE_FALSE='#' +else + WITH_READLINE_TRUE='#' + WITH_READLINE_FALSE= +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_errlist" >&5 +$as_echo_n "checking for sys_errlist... " >&6; } +if ${sic_cv_var_sys_errlist+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int *p; +int +main () +{ +extern int sys_errlist; p = &sys_errlist; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + sic_cv_var_sys_errlist=yes +else + sic_cv_var_sys_errlist=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sic_cv_var_sys_errlist" >&5 +$as_echo "$sic_cv_var_sys_errlist" >&6; } +if test x"$sic_cv_var_sys_errlist" = xyes; then + +$as_echo "@%:@define HAVE_SYS_ERRLIST 1" >>confdefs.h + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_siglist" >&5 +$as_echo_n "checking for sys_siglist... " >&6; } +if ${sic_cv_var_sys_siglist+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int *p; +int +main () +{ +extern int sys_siglist; p = &sys_siglist; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + sic_cv_var_sys_siglist=yes +else + sic_cv_var_sys_siglist=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sic_cv_var_sys_siglist" >&5 +$as_echo "$sic_cv_var_sys_siglist" >&6; } +if test x"$sic_cv_var_sys_siglist" = xyes; then + +$as_echo "@%:@define HAVE_SYS_SIGLIST 1" >>confdefs.h + +fi + +for ac_func in bzero memset +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + break +fi +done + +for ac_func in calloc strchr strrchr +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +ac_fn_c_check_func "$LINENO" "basename" "ac_cv_func_basename" +if test "x$ac_cv_func_basename" = xyes; then : + $as_echo "@%:@define HAVE_BASENAME 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" basename.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS basename.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strspn" "ac_cv_func_strspn" +if test "x$ac_cv_func_strspn" = xyes; then : + $as_echo "@%:@define HAVE_STRSPN 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" strspn.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strspn.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strcspn" "ac_cv_func_strcspn" +if test "x$ac_cv_func_strcspn" = xyes; then : + $as_echo "@%:@define HAVE_STRCSPN 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" strcspn.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strcspn.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + $as_echo "@%:@define HAVE_STRERROR 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" strerror.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strerror.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal" +if test "x$ac_cv_func_strsignal" = xyes; then : + $as_echo "@%:@define HAVE_STRSIGNAL 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" strsignal.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strsignal.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "vfprintf" "ac_cv_func_vfprintf" +if test "x$ac_cv_func_vfprintf" = xyes; then : + $as_echo "@%:@define HAVE_VFPRINTF 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" vfprintf.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS vfprintf.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" +if test "x$ac_cv_func_waitpid" = xyes; then : + $as_echo "@%:@define HAVE_WAITPID 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" waitpid.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS waitpid.$ac_objext" + ;; +esac + +fi + + + +# @start 5 +# ---------------------------------------------------------------------- +# Add code to config.status to create an installable host dependent +# configuration file. +# ---------------------------------------------------------------------- +ac_config_commands="$ac_config_commands default-1" + +# @end 5 +# @start 1 +Xsed="sed -e s/^X//" +case " $LIB@&t@OBJS " in + *" .$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS .$ac_objext" + ;; +esac + +#LTLIBOBJS=`echo X"$LIBOBJS" | \ +# [$Xsed -e 's,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,']` +#AC_SUBST(LTLIBOBJS) +# @end 1 + + + +ac_config_files="$ac_config_files Makefile src/Makefile" + +ac_config_commands="$ac_config_commands default" + +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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+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 + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_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= +U= +for ac_i in : $LIB@&t@OBJS; 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=`$as_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. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_READLINE_TRUE}" && test -z "${WITH_READLINE_FALSE}"; then + as_fn_error $? "conditional \"WITH_READLINE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + + srcdir=$srcdir + ac_cv_func_bzero=$ac_cv_func_bzero + ac_cv_func_memset=$ac_cv_func_memset + ac_cv_func_strchr=$ac_cv_func_strchr + ac_cv_func_strrchr=$ac_cv_func_strrchr +# @end 5 + ac_cv_func_basename=$ac_cv_func_basename + ac_cv_func_strcspn=$ac_cv_func_strcspn + ac_cv_func_strerror=$ac_cv_func_strerror + ac_cv_func_strsignal=$ac_cv_func_strsignal + ac_cv_func_strspn=$ac_cv_func_strspn + ac_cv_func_vfprintf=$ac_cv_func_vfprintf + ac_cv_func_waitpid=$ac_cv_func_waitpid + ac_cv_header_assert_h=$ac_cv_header_assert_h + ac_cv_header_errno_h=$ac_cv_header_errno_h + ac_cv_header_stdlib_h=$ac_cv_header_stdlib_h + ac_cv_header_stdarg_h=$ac_cv_header_stdarg_h + ac_cv_header_string_h=$ac_cv_header_string_h + ac_cv_header_strings_h=$ac_cv_header_strings_h + ac_cv_header_sys_wait_h=$ac_cv_header_sys_wait_h + ac_cv_header_unistd_h=$ac_cv_header_unistd_h + ac_cv_header_varargs_h=$ac_cv_header_varargs_h +# @start 5 + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config-h.in" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + "default-1":C) + #if test -n "$CONFIG_FILES" && test -n "$CONFIG_HEADERS"; then + # # If both these vars are non-empty, then config.status wasn't run by + # # automake rules (which always set one or the other to empty). + # CONFIG_OTHER=${CONFIG_OTHER-sic/common.h} + #fi + case "$CONFIG_OTHER" in + *sic/common.h*) + outfile=sic/common.h + stampfile=sic/stamp-common + tmpfile=${outfile}T + dirname="sed s,^.*/,,g" + + echo creating $outfile + cat > $tmpfile << _EOF_ +/* -*- Mode: C -*- + * -------------------------------------------------------------------- + * DO NOT EDIT THIS FILE! It has been automatically generated + * from: configure.in and `echo $outfile|$dirname`.in + * on host: `(hostname || uname -n) 2>/dev/null | sed 1q` + * -------------------------------------------------------------------- + */ + +#ifndef SIC_COMMON_H +#define SIC_COMMON_H 1 + +#include +#include +_EOF_ + +# @end 5 +# @start 4 + # Add the code to include these headers only if autoconf has + # shown them to be present. + if test x$ac_cv_header_stdlib_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_unistd_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_sys_wait_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_errno_h = xyes; then + echo '#include ' >> $tmpfile + fi + cat >> $tmpfile << '_EOF_' +#ifndef errno +/* Some sytems #define this! */ +extern int errno; +#endif +_EOF_ + if test x$ac_cv_header_string_h = xyes; then + echo '#include ' >> $tmpfile + elif test x$ac_cv_header_strings_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_assert_h = xyes; then + cat >> $tmpfile << '_EOF_' + +#include +#define SIC_ASSERT assert + +_EOF_ + else + echo '#define SIC_ASSERT(expr) ((void) 0)' >> $tmpfile + fi +# @end 4 +# @start 3 + # Make a choice between the two different API's for variadic + # functions. In general, prefer stdarg.h over varargs.h, except + # where varargs.h has already been chosen by the parent package. + if test x$ac_cv_header_stdarg_h = xyes \ + && test x$ac_cv_header_varargs_h != xyes + then + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a, f) +#endif /* !VA_START */ + +_EOF_ + else + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a) +#endif /* !VA_START */ + +_EOF_ + fi + +# @end 3 +# @start 5 + if test x$ac_cv_func_bzero = xno && \ + test x$ac_cv_func_memset = xyes; then + cat >> $tmpfile << '_EOF_' +#define bzero(buf, bytes) ((void) memset (buf, 0, bytes)) +_EOF_ + fi + if test x$ac_cv_func_strchr = xno; then + echo '#define strchr index' >> $tmpfile + fi + if test x$ac_cv_func_strrchr = xno; then + echo '#define strrchr rindex' >> $tmpfile + fi + + # The ugly but portable cpp stuff comes from here + infile=$srcdir/sic/`echo $outfile | sed 's,.*/,,g;s,\..*$,,g'`-h.in + sed '/^##.*$/d' $infile >> $tmpfile + +# @end 5 + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + if test x$ac_cv_func_basename = xno; then + echo 'extern char *basename PARAMS((const char *path));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strcspn = xno; then + echo 'extern size_t strcspn PARAMS((const char *string, const char *accept));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strerror = xno; then + echo 'extern char *strerror PARAMS((int err));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strsignal = xno; then + echo 'extern char *strsignal PARAMS((int signo));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strspn = xno; then + echo 'extern size_t strspn PARAMS((const char *string, const char *reject));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_vfprintf = xno; then + echo 'extern int vfprintf PARAMS((FILE *file, const char *format, va_list ap));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_waitpid = xno; then + echo 'extern pid_t waitpid PARAMS((pid_t pid, int *pstatus, int options));' >> ${tmpfile}2 + fi + + if test -f ${tmpfile}2; then + cat >> $tmpfile << '_EOF_' + +BEGIN_C_DECLS +_EOF_ + cat ${tmpfile}2 >> $tmpfile + echo 'END_C_DECLS' >> $tmpfile + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + fi + + cat >> $tmpfile << '_EOF_' + +#endif /* !SIC_COMMON_H */ +_EOF_ + + if cmp -s $tmpfile $outfile; then + echo $outfile is unchanged + rm -f $tmpfile + else + mv $tmpfile $outfile + touch $stampfile + fi + ;; + esac +# @start 5 + ;; + "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h.in ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +echo \ +"------------------------------------------------------------------------ +Configuration: + + Source code location: ${srcdir} + Compiler: ${CC} + Compiler flags: ${CFLAGS} + Host System Type: ${host} + Install path: ${prefix} + + See config.h for further configuration information. +------------------------------------------------------------------------" diff --git a/coreseek/mmseg-3.2.14/autom4te.cache/output.1 b/coreseek/mmseg-3.2.14/autom4te.cache/output.1 new file mode 100644 index 0000000..74384c8 --- /dev/null +++ b/coreseek/mmseg-3.2.14/autom4te.cache/output.1 @@ -0,0 +1,18513 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.68. +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in @%:@ (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +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='mkdir -p "$as_dir"' +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'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="src/mmseg_main.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +ac_aux_dir +LIB@&t@OBJS +WITH_READLINE_FALSE +WITH_READLINE_TRUE +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +with_sysroot +enable_libtool_lock +with_readline +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CPP +CXXCPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +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= ;; + *) 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_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'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_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 .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures 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 + @<:@@S|@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 + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic@<:@=PKGS@:>@ try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-readline compile with the system readline library + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + 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. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + $as_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.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_cpp LINENO +@%:@ ------------------------ +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_cpp + +@%:@ ac_fn_cxx_try_link LINENO +@%:@ ------------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_link + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_header_mongrel + +@%:@ ac_fn_c_check_type LINENO TYPE VAR INCLUDES +@%:@ ------------------------------------------- +@%:@ Tests whether TYPE exists after having included INCLUDES, setting cache +@%:@ variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +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 +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} @%:@ ac_fn_c_check_type +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.68. 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=. + $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_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'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > 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 + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in @%:@(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_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,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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 + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_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. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +ac_config_headers="$ac_config_headers config.h:config-h.in" + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=mmseg + VERSION=0.7 + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +#AC_PROG_CC +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+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 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C++ compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$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 +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +@%:@ Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +@%:@ Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + @%:@ Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + @%:@ Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +@%:@ Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + @%:@ Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +@%:@define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +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 + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +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_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "@%:@define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +for ac_header in stdlib.h unistd.h errno.h assert.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in string.h strings.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + break +fi + +done + + +# @start 2 +# am_cv_prog_cc_stdc is set by AM_PROG_CC_STDC +case $am_cv_prog_cc_stdc,$ac_cv_header_varargs_h in +no,) + # Non-ANSI compiler, so we must use varargs.h. + for ac_header in varargs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default" +if test "x$ac_cv_header_varargs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VARARGS_H 1 +_ACEOF + +fi + +done + + ;; +*,yes) + # Parent package is using varargs.h which is incompatible with + # stdarg.h, so we do the same (recheck to generate checking... + # message). + for ac_header in varargs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default" +if test "x$ac_cv_header_varargs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_VARARGS_H 1 +_ACEOF + +fi + +done + + ;; +*) + # If stdarg.h is present define HAVE_STDARG_H. + for ac_header in stdarg.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default" +if test "x$ac_cv_header_stdarg_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_STDARG_H 1 +_ACEOF + +fi + +done + + ;; +esac + +case x$ac_cv_header_stdarg_h$ac_cv_header_varargs_h in +x*yes*) ;; +*) as_fn_error one of which \ +is required for the build to proceed. "Could not find stdarg.h or varargs.h" "$LINENO" 5 ;; +esac +# @end 2 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "@%:@define const /**/" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define pid_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +@%:@define size_t unsigned int +_ACEOF + +fi + + + +@%:@ Check whether --with-readline was given. +if test "${with_readline+set}" = set; then : + withval=$with_readline; if test x"${withval-no}" != no; then + sic_save_LIBS=$LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 +$as_echo_n "checking for readline in -lreadline... " >&6; } +if ${ac_cv_lib_readline_readline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lreadline $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char readline (); +int +main () +{ +return readline (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_readline_readline=yes +else + ac_cv_lib_readline_readline=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5 +$as_echo "$ac_cv_lib_readline_readline" >&6; } +if test "x$ac_cv_lib_readline_readline" = xyes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_LIBREADLINE 1 +_ACEOF + + LIBS="-lreadline $LIBS" + +fi + + if test x"${ac_cv_lib_readline_readline}" = xno; then + as_fn_error $? "libreadline not found" "$LINENO" 5 + fi + LIBS=$sic_save_LIBS +fi +fi + + if test x"${with_readline-no}" != xno; then + WITH_READLINE_TRUE= + WITH_READLINE_FALSE='#' +else + WITH_READLINE_TRUE='#' + WITH_READLINE_FALSE= +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_errlist" >&5 +$as_echo_n "checking for sys_errlist... " >&6; } +if ${sic_cv_var_sys_errlist+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int *p; +int +main () +{ +extern int sys_errlist; p = &sys_errlist; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + sic_cv_var_sys_errlist=yes +else + sic_cv_var_sys_errlist=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sic_cv_var_sys_errlist" >&5 +$as_echo "$sic_cv_var_sys_errlist" >&6; } +if test x"$sic_cv_var_sys_errlist" = xyes; then + +$as_echo "@%:@define HAVE_SYS_ERRLIST 1" >>confdefs.h + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_siglist" >&5 +$as_echo_n "checking for sys_siglist... " >&6; } +if ${sic_cv_var_sys_siglist+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int *p; +int +main () +{ +extern int sys_siglist; p = &sys_siglist; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + sic_cv_var_sys_siglist=yes +else + sic_cv_var_sys_siglist=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sic_cv_var_sys_siglist" >&5 +$as_echo "$sic_cv_var_sys_siglist" >&6; } +if test x"$sic_cv_var_sys_siglist" = xyes; then + +$as_echo "@%:@define HAVE_SYS_SIGLIST 1" >>confdefs.h + +fi + +for ac_func in bzero memset +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + break +fi +done + +for ac_func in calloc strchr strrchr +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +ac_fn_c_check_func "$LINENO" "basename" "ac_cv_func_basename" +if test "x$ac_cv_func_basename" = xyes; then : + $as_echo "@%:@define HAVE_BASENAME 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" basename.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS basename.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strspn" "ac_cv_func_strspn" +if test "x$ac_cv_func_strspn" = xyes; then : + $as_echo "@%:@define HAVE_STRSPN 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" strspn.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strspn.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strcspn" "ac_cv_func_strcspn" +if test "x$ac_cv_func_strcspn" = xyes; then : + $as_echo "@%:@define HAVE_STRCSPN 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" strcspn.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strcspn.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + $as_echo "@%:@define HAVE_STRERROR 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" strerror.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strerror.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal" +if test "x$ac_cv_func_strsignal" = xyes; then : + $as_echo "@%:@define HAVE_STRSIGNAL 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" strsignal.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS strsignal.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "vfprintf" "ac_cv_func_vfprintf" +if test "x$ac_cv_func_vfprintf" = xyes; then : + $as_echo "@%:@define HAVE_VFPRINTF 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" vfprintf.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS vfprintf.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" +if test "x$ac_cv_func_waitpid" = xyes; then : + $as_echo "@%:@define HAVE_WAITPID 1" >>confdefs.h + +else + case " $LIB@&t@OBJS " in + *" waitpid.$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS waitpid.$ac_objext" + ;; +esac + +fi + + + +# @start 5 +# ---------------------------------------------------------------------- +# Add code to config.status to create an installable host dependent +# configuration file. +# ---------------------------------------------------------------------- +ac_config_commands="$ac_config_commands default-1" + +# @end 5 +# @start 1 +Xsed="sed -e s/^X//" +case " $LIB@&t@OBJS " in + *" .$ac_objext "* ) ;; + *) LIB@&t@OBJS="$LIB@&t@OBJS .$ac_objext" + ;; +esac + +#LTLIBOBJS=`echo X"$LIBOBJS" | \ +# [$Xsed -e 's,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,']` +#AC_SUBST(LTLIBOBJS) +# @end 1 + + + +ac_config_files="$ac_config_files Makefile src/Makefile" + +ac_config_commands="$ac_config_commands default" + +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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+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 + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_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= +U= +for ac_i in : $LIB@&t@OBJS; 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=`$as_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. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_READLINE_TRUE}" && test -z "${WITH_READLINE_FALSE}"; then + as_fn_error $? "conditional \"WITH_READLINE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + + srcdir=$srcdir + ac_cv_func_bzero=$ac_cv_func_bzero + ac_cv_func_memset=$ac_cv_func_memset + ac_cv_func_strchr=$ac_cv_func_strchr + ac_cv_func_strrchr=$ac_cv_func_strrchr +# @end 5 + ac_cv_func_basename=$ac_cv_func_basename + ac_cv_func_strcspn=$ac_cv_func_strcspn + ac_cv_func_strerror=$ac_cv_func_strerror + ac_cv_func_strsignal=$ac_cv_func_strsignal + ac_cv_func_strspn=$ac_cv_func_strspn + ac_cv_func_vfprintf=$ac_cv_func_vfprintf + ac_cv_func_waitpid=$ac_cv_func_waitpid + ac_cv_header_assert_h=$ac_cv_header_assert_h + ac_cv_header_errno_h=$ac_cv_header_errno_h + ac_cv_header_stdlib_h=$ac_cv_header_stdlib_h + ac_cv_header_stdarg_h=$ac_cv_header_stdarg_h + ac_cv_header_string_h=$ac_cv_header_string_h + ac_cv_header_strings_h=$ac_cv_header_strings_h + ac_cv_header_sys_wait_h=$ac_cv_header_sys_wait_h + ac_cv_header_unistd_h=$ac_cv_header_unistd_h + ac_cv_header_varargs_h=$ac_cv_header_varargs_h +# @start 5 + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config-h.in" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + "default-1":C) + #if test -n "$CONFIG_FILES" && test -n "$CONFIG_HEADERS"; then + # # If both these vars are non-empty, then config.status wasn't run by + # # automake rules (which always set one or the other to empty). + # CONFIG_OTHER=${CONFIG_OTHER-sic/common.h} + #fi + case "$CONFIG_OTHER" in + *sic/common.h*) + outfile=sic/common.h + stampfile=sic/stamp-common + tmpfile=${outfile}T + dirname="sed s,^.*/,,g" + + echo creating $outfile + cat > $tmpfile << _EOF_ +/* -*- Mode: C -*- + * -------------------------------------------------------------------- + * DO NOT EDIT THIS FILE! It has been automatically generated + * from: configure.in and `echo $outfile|$dirname`.in + * on host: `(hostname || uname -n) 2>/dev/null | sed 1q` + * -------------------------------------------------------------------- + */ + +#ifndef SIC_COMMON_H +#define SIC_COMMON_H 1 + +#include +#include +_EOF_ + +# @end 5 +# @start 4 + # Add the code to include these headers only if autoconf has + # shown them to be present. + if test x$ac_cv_header_stdlib_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_unistd_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_sys_wait_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_errno_h = xyes; then + echo '#include ' >> $tmpfile + fi + cat >> $tmpfile << '_EOF_' +#ifndef errno +/* Some sytems #define this! */ +extern int errno; +#endif +_EOF_ + if test x$ac_cv_header_string_h = xyes; then + echo '#include ' >> $tmpfile + elif test x$ac_cv_header_strings_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_assert_h = xyes; then + cat >> $tmpfile << '_EOF_' + +#include +#define SIC_ASSERT assert + +_EOF_ + else + echo '#define SIC_ASSERT(expr) ((void) 0)' >> $tmpfile + fi +# @end 4 +# @start 3 + # Make a choice between the two different API's for variadic + # functions. In general, prefer stdarg.h over varargs.h, except + # where varargs.h has already been chosen by the parent package. + if test x$ac_cv_header_stdarg_h = xyes \ + && test x$ac_cv_header_varargs_h != xyes + then + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a, f) +#endif /* !VA_START */ + +_EOF_ + else + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a) +#endif /* !VA_START */ + +_EOF_ + fi + +# @end 3 +# @start 5 + if test x$ac_cv_func_bzero = xno && \ + test x$ac_cv_func_memset = xyes; then + cat >> $tmpfile << '_EOF_' +#define bzero(buf, bytes) ((void) memset (buf, 0, bytes)) +_EOF_ + fi + if test x$ac_cv_func_strchr = xno; then + echo '#define strchr index' >> $tmpfile + fi + if test x$ac_cv_func_strrchr = xno; then + echo '#define strrchr rindex' >> $tmpfile + fi + + # The ugly but portable cpp stuff comes from here + infile=$srcdir/sic/`echo $outfile | sed 's,.*/,,g;s,\..*$,,g'`-h.in + sed '/^##.*$/d' $infile >> $tmpfile + +# @end 5 + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + if test x$ac_cv_func_basename = xno; then + echo 'extern char *basename PARAMS((const char *path));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strcspn = xno; then + echo 'extern size_t strcspn PARAMS((const char *string, const char *accept));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strerror = xno; then + echo 'extern char *strerror PARAMS((int err));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strsignal = xno; then + echo 'extern char *strsignal PARAMS((int signo));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strspn = xno; then + echo 'extern size_t strspn PARAMS((const char *string, const char *reject));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_vfprintf = xno; then + echo 'extern int vfprintf PARAMS((FILE *file, const char *format, va_list ap));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_waitpid = xno; then + echo 'extern pid_t waitpid PARAMS((pid_t pid, int *pstatus, int options));' >> ${tmpfile}2 + fi + + if test -f ${tmpfile}2; then + cat >> $tmpfile << '_EOF_' + +BEGIN_C_DECLS +_EOF_ + cat ${tmpfile}2 >> $tmpfile + echo 'END_C_DECLS' >> $tmpfile + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + fi + + cat >> $tmpfile << '_EOF_' + +#endif /* !SIC_COMMON_H */ +_EOF_ + + if cmp -s $tmpfile $outfile; then + echo $outfile is unchanged + rm -f $tmpfile + else + mv $tmpfile $outfile + touch $stampfile + fi + ;; + esac +# @start 5 + ;; + "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h.in ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +echo \ +"------------------------------------------------------------------------ +Configuration: + + Source code location: ${srcdir} + Compiler: ${CC} + Compiler flags: ${CFLAGS} + Host System Type: ${host} + Install path: ${prefix} + + See config.h for further configuration information. +------------------------------------------------------------------------" diff --git a/coreseek/mmseg-3.2.14/autom4te.cache/requests b/coreseek/mmseg-3.2.14/autom4te.cache/requests new file mode 100644 index 0000000..372d28c --- /dev/null +++ b/coreseek/mmseg-3.2.14/autom4te.cache/requests @@ -0,0 +1,300 @@ +# This file was generated by Autom4te Sun Nov 6 20:57:04 UTC 2011. +# It contains the lists of macros which have been traced. +# It can be safely removed. + +@request = ( + bless( [ + '0', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + '/usr/share/aclocal/argz.m4', + '/usr/share/aclocal/libtool.m4', + '/usr/share/aclocal/ltdl.m4', + '/usr/share/aclocal/ltoptions.m4', + '/usr/share/aclocal/ltsugar.m4', + '/usr/share/aclocal/ltversion.m4', + '/usr/share/aclocal/lt~obsolete.m4', + '/usr/share/aclocal-1.11/amversion.m4', + '/usr/share/aclocal-1.11/auxdir.m4', + '/usr/share/aclocal-1.11/ccstdc.m4', + '/usr/share/aclocal-1.11/cond.m4', + '/usr/share/aclocal-1.11/depend.m4', + '/usr/share/aclocal-1.11/depout.m4', + '/usr/share/aclocal-1.11/header.m4', + '/usr/share/aclocal-1.11/init.m4', + '/usr/share/aclocal-1.11/install-sh.m4', + '/usr/share/aclocal-1.11/lead-dot.m4', + '/usr/share/aclocal-1.11/make.m4', + '/usr/share/aclocal-1.11/missing.m4', + '/usr/share/aclocal-1.11/mkdirp.m4', + '/usr/share/aclocal-1.11/options.m4', + '/usr/share/aclocal-1.11/runlog.m4', + '/usr/share/aclocal-1.11/sanity.m4', + '/usr/share/aclocal-1.11/silent.m4', + '/usr/share/aclocal-1.11/strip.m4', + '/usr/share/aclocal-1.11/substnot.m4', + '/usr/share/aclocal-1.11/tar.m4', + 'config/readline.m4', + 'config/sys_errlist.m4', + 'config/sys_siglist.m4', + 'configure.in' + ], + { + 'AM_ENABLE_STATIC' => 1, + 'AC_LIBTOOL_LANG_RC_CONFIG' => 1, + '_LT_AC_SHELL_INIT' => 1, + 'SIC_VAR_SYS_SIGLIST' => 1, + 'AC_DEFUN' => 1, + '_LT_AC_LANG_CXX_CONFIG' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'AM_SUBST_NOTMAKE' => 1, + 'AM_MISSING_PROG' => 1, + 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1, + '_LT_AC_LANG_C_CONFIG' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + '_m4_warn' => 1, + 'AC_LIBTOOL_OBJDIR' => 1, + 'gl_FUNC_ARGZ' => 1, + 'AM_SANITY_CHECK' => 1, + 'LTOBSOLETE_VERSION' => 1, + 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, + 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, + 'LT_LIB_M' => 1, + '_LT_AC_CHECK_DLFCN' => 1, + 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1, + 'LTSUGAR_VERSION' => 1, + '_LT_PROG_LTMAIN' => 1, + 'LT_SYS_SYMBOL_USCORE' => 1, + '_AM_PROG_TAR' => 1, + 'AC_LIBTOOL_GCJ' => 1, + '_LT_WITH_SYSROOT' => 1, + 'LT_FUNC_DLSYM_USCORE' => 1, + 'LT_SYS_DLOPEN_DEPLIBS' => 1, + '_LT_AC_LANG_F77' => 1, + 'AC_LIBTOOL_CONFIG' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'AC_LTDL_DLLIB' => 1, + '_AM_AUTOCONF_VERSION' => 1, + 'AM_DISABLE_SHARED' => 1, + '_LT_PROG_ECHO_BACKSLASH' => 1, + '_LTDL_SETUP' => 1, + 'AM_PROG_LIBTOOL' => 1, + '_LT_AC_LANG_CXX' => 1, + 'AC_LIB_LTDL' => 1, + '_LT_AC_FILE_LTDLL_C' => 1, + 'AM_PROG_LD' => 1, + 'AU_DEFUN' => 1, + 'AC_PROG_NM' => 1, + 'AC_LIBTOOL_DLOPEN' => 1, + 'AC_PROG_LD' => 1, + 'AC_PROG_LD_GNU' => 1, + 'AC_ENABLE_FAST_INSTALL' => 1, + 'AC_LIBTOOL_FC' => 1, + 'LTDL_CONVENIENCE' => 1, + 'SIC_VAR_SYS_ERRLIST' => 1, + '_AM_SET_OPTION' => 1, + 'AC_LTDL_PREOPEN' => 1, + '_LT_LINKER_BOILERPLATE' => 1, + '_LT_PREPARE_SED_QUOTE_VARS' => 1, + 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1, + 'AC_LIBTOOL_PROG_CC_C_O' => 1, + 'gl_PREREQ_ARGZ' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'LT_PROG_RC' => 1, + 'LT_SYS_MODULE_EXT' => 1, + 'AC_DEFUN_ONCE' => 1, + '_LT_AC_LANG_GCJ' => 1, + 'fp_PROG_CC_STDC' => 1, + 'AC_LTDL_OBJDIR' => 1, + '_LT_PATH_TOOL_PREFIX' => 1, + 'AC_LIBTOOL_RC' => 1, + 'AM_SILENT_RULES' => 1, + 'AC_DISABLE_FAST_INSTALL' => 1, + '_LT_AC_PROG_ECHO_BACKSLASH' => 1, + '_LT_AC_SYS_LIBPATH_AIX' => 1, + '_LT_AC_TRY_DLOPEN_SELF' => 1, + 'include' => 1, + 'LT_AC_PROG_SED' => 1, + 'AM_ENABLE_SHARED' => 1, + 'LTDL_INSTALLABLE' => 1, + '_LT_AC_LANG_GCJ_CONFIG' => 1, + 'AC_ENABLE_SHARED' => 1, + 'AC_ENABLE_STATIC' => 1, + 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, + '_LT_REQUIRED_DARWIN_CHECKS' => 1, + '_LT_AC_TAGVAR' => 1, + 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, + 'AM_CONDITIONAL' => 1, + 'LT_LIB_DLLOAD' => 1, + 'SIC_WITH_READLINE' => 1, + 'LTDL_INIT' => 1, + '_LT_PROG_F77' => 1, + '_LT_PROG_CXX' => 1, + 'LTVERSION_VERSION' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'm4_include' => 1, + 'AC_PROG_EGREP' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AC_PATH_MAGIC' => 1, + 'AC_LTDL_SYSSEARCHPATH' => 1, + 'AM_MAKE_INCLUDE' => 1, + 'LT_CMD_MAX_LEN' => 1, + '_LT_AC_TAGCONFIG' => 1, + 'm4_pattern_forbid' => 1, + '_LT_LINKER_OPTION' => 1, + 'AC_LIBTOOL_COMPILER_OPTION' => 1, + 'AC_DISABLE_SHARED' => 1, + '_LT_COMPILER_BOILERPLATE' => 1, + 'AC_LIBTOOL_WIN32_DLL' => 1, + 'AC_LIBTOOL_SETUP' => 1, + 'AC_PROG_LD_RELOAD_FLAG' => 1, + 'AC_LTDL_DLSYM_USCORE' => 1, + 'AM_MISSING_HAS_RUN' => 1, + 'LT_LANG' => 1, + 'LT_SYS_DLSEARCH_PATH' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_LIBTOOL_DLOPEN_SELF' => 1, + 'LT_OUTPUT' => 1, + 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1, + 'AC_WITH_LTDL' => 1, + 'AC_LIBTOOL_LINKER_OPTION' => 1, + 'LT_AC_PROG_RC' => 1, + 'AC_LIBTOOL_CXX' => 1, + 'LT_INIT' => 1, + 'LT_AC_PROG_GCJ' => 1, + 'LT_SYS_DLOPEN_SELF' => 1, + 'AM_DISABLE_STATIC' => 1, + '_LT_AC_PROG_CXXCPP' => 1, + 'AM_DEP_TRACK' => 1, + '_AC_PROG_LIBTOOL' => 1, + 'AM_CONFIG_HEADER' => 1, + 'AM_PROG_CC_STDC' => 1, + '_AM_IF_OPTION' => 1, + 'AC_PATH_TOOL_PREFIX' => 1, + 'AC_LIBTOOL_F77' => 1, + 'm4_pattern_allow' => 1, + 'AM_SET_LEADING_DOT' => 1, + 'LT_AC_PROG_EGREP' => 1, + '_LT_PROG_FC' => 1, + '_AM_DEPENDENCIES' => 1, + 'AC_LIBTOOL_LANG_C_CONFIG' => 1, + 'LTOPTIONS_VERSION' => 1, + '_LT_AC_SYS_COMPILER' => 1, + 'AM_PROG_NM' => 1, + 'AC_LIBLTDL_CONVENIENCE' => 1, + 'AC_DEPLIBS_CHECK_METHOD' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + 'AC_LIBLTDL_INSTALLABLE' => 1, + 'AC_LTDL_ENABLE_INSTALL' => 1, + 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, + 'LT_PROG_GCJ' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_DISABLE_STATIC' => 1, + 'LT_PATH_NM' => 1, + 'AC_LTDL_SHLIBEXT' => 1, + '_LT_AC_LOCK' => 1, + '_LT_AC_LANG_RC_CONFIG' => 1, + 'LT_PROG_GO' => 1, + 'LT_SYS_MODULE_PATH' => 1, + 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, + 'LT_WITH_LTDL' => 1, + 'AC_LTDL_SHLIBPATH' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + '_LT_AC_LANG_F77_CONFIG' => 1, + 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, + '_AM_SET_OPTIONS' => 1, + '_LT_COMPILER_OPTION' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AM_RUN_LOG' => 1, + 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, + 'AC_LIBTOOL_PICMODE' => 1, + 'LT_PATH_LD' => 1, + 'AC_CHECK_LIBM' => 1, + 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, + '_AM_MANGLE_OPTION' => 1, + 'AC_LTDL_SYMBOL_USCORE' => 1, + 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, + 'AM_SET_DEPDIR' => 1, + '_LT_CC_BASENAME' => 1, + '_LT_LIBOBJ' => 1 + } + ], 'Autom4te::Request' ), + bless( [ + '1', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + 'aclocal.m4', + 'configure.in' + ], + { + '_LT_AC_TAGCONFIG' => 1, + 'AM_PROG_F77_C_O' => 1, + 'AC_INIT' => 1, + 'm4_pattern_forbid' => 1, + '_AM_COND_IF' => 1, + 'AC_CANONICAL_TARGET' => 1, + 'AC_SUBST' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, + 'AC_FC_SRCEXT' => 1, + 'AC_CANONICAL_HOST' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AM_PATH_GUILE' => 1, + 'AC_CONFIG_SUBDIRS' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_REQUIRE_AUX_FILE' => 1, + 'AC_CONFIG_LINKS' => 1, + 'm4_sinclude' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'AM_MAINTAINER_MODE' => 1, + 'AM_NLS' => 1, + 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + 'AM_MAKEFILE_INCLUDE' => 1, + '_m4_warn' => 1, + 'AM_PROG_CXX_C_O' => 1, + '_AM_COND_ENDIF' => 1, + '_AM_MAKEFILE_INCLUDE' => 1, + 'AM_ENABLE_MULTILIB' => 1, + 'AM_SILENT_RULES' => 1, + 'AM_PROG_MOC' => 1, + 'AC_CONFIG_FILES' => 1, + 'include' => 1, + 'LT_INIT' => 1, + 'AM_PROG_AR' => 1, + 'AM_GNU_GETTEXT' => 1, + 'AC_LIBSOURCE' => 1, + 'AM_PROG_FC_C_O' => 1, + 'AC_CANONICAL_BUILD' => 1, + 'AC_FC_FREEFORM' => 1, + 'AH_OUTPUT' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'AC_CONFIG_AUX_DIR' => 1, + 'sinclude' => 1, + 'AM_PROG_CC_C_O' => 1, + 'm4_pattern_allow' => 1, + 'AM_XGETTEXT_OPTION' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'AM_CONDITIONAL' => 1, + 'AC_CONFIG_HEADERS' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, + 'AM_POT_TOOLS' => 1, + 'm4_include' => 1, + '_AM_COND_ELSE' => 1, + 'AC_SUBST_TRACE' => 1 + } + ], 'Autom4te::Request' ) + ); + diff --git a/coreseek/mmseg-3.2.14/autom4te.cache/traces.0 b/coreseek/mmseg-3.2.14/autom4te.cache/traces.0 new file mode 100644 index 0000000..3149cb8 --- /dev/null +++ b/coreseek/mmseg-3.2.14/autom4te.cache/traces.0 @@ -0,0 +1,2580 @@ +m4trace:/usr/share/aclocal/argz.m4:12: -1- AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ + +AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT]) + +AC_CHECK_TYPES([error_t], + [], + [AC_DEFINE([error_t], [int], + [Define to a type to use for `error_t' if it is not otherwise available.]) + AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h + does not typedef error_t.])], + [#if defined(HAVE_ARGZ_H) +# include +#endif]) + +ARGZ_H= +AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \ + argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])]) + +dnl if have system argz functions, allow forced use of +dnl libltdl-supplied implementation (and default to do so +dnl on "known bad" systems). Could use a runtime check, but +dnl (a) detecting malloc issues is notoriously unreliable +dnl (b) only known system that declares argz functions, +dnl provides them, yet they are broken, is cygwin +dnl releases prior to 16-Mar-2007 (1.5.24 and earlier) +dnl So, it's more straightforward simply to special case +dnl this for known bad systems. +AS_IF([test -z "$ARGZ_H"], + [AC_CACHE_CHECK( + [if argz actually works], + [lt_cv_sys_argz_works], + [[case $host_os in #( + *cygwin*) + lt_cv_sys_argz_works=no + if test "$cross_compiling" != no; then + lt_cv_sys_argz_works="guessing no" + else + lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/' + save_IFS=$IFS + IFS=-. + set x `uname -r | sed -e "$lt_sed_extract_leading_digits"` + IFS=$save_IFS + lt_os_major=${2-0} + lt_os_minor=${3-0} + lt_os_micro=${4-0} + if test "$lt_os_major" -gt 1 \ + || { test "$lt_os_major" -eq 1 \ + && { test "$lt_os_minor" -gt 5 \ + || { test "$lt_os_minor" -eq 5 \ + && test "$lt_os_micro" -gt 24; }; }; }; then + lt_cv_sys_argz_works=yes + fi + fi + ;; #( + *) lt_cv_sys_argz_works=yes ;; + esac]]) + AS_IF([test "$lt_cv_sys_argz_works" = yes], + [AC_DEFINE([HAVE_WORKING_ARGZ], 1, + [This value is set to 1 to indicate that the system argz facility works])], + [ARGZ_H=argz.h + AC_LIBOBJ([argz])])]) + +AC_SUBST([ARGZ_H]) +]) +m4trace:/usr/share/aclocal/argz.m4:79: -1- AC_DEFUN([gl_PREREQ_ARGZ], [:]) +m4trace:/usr/share/aclocal/libtool.m4:69: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +]) +m4trace:/usr/share/aclocal/libtool.m4:107: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:107: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:108: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:108: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:609: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +]) +m4trace:/usr/share/aclocal/libtool.m4:790: -1- AC_DEFUN([LT_SUPPORTED_TAG], []) +m4trace:/usr/share/aclocal/libtool.m4:801: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +]) +m4trace:/usr/share/aclocal/libtool.m4:893: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +m4trace:/usr/share/aclocal/libtool.m4:893: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete. +You should run autoupdate.])dnl +LT_LANG(C++)]) +m4trace:/usr/share/aclocal/libtool.m4:894: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +m4trace:/usr/share/aclocal/libtool.m4:894: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Fortran 77)]) +m4trace:/usr/share/aclocal/libtool.m4:895: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +m4trace:/usr/share/aclocal/libtool.m4:895: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Fortran)]) +m4trace:/usr/share/aclocal/libtool.m4:896: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +m4trace:/usr/share/aclocal/libtool.m4:896: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Java)]) +m4trace:/usr/share/aclocal/libtool.m4:897: -1- AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +m4trace:/usr/share/aclocal/libtool.m4:897: -1- AC_DEFUN([AC_LIBTOOL_RC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_RC' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Windows Resource)]) +m4trace:/usr/share/aclocal/libtool.m4:1225: -1- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) +m4trace:/usr/share/aclocal/libtool.m4:1502: -1- AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1544: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1544: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1553: -1- AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1588: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1588: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1595: -1- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +]) +m4trace:/usr/share/aclocal/libtool.m4:1733: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1733: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1844: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +]) +m4trace:/usr/share/aclocal/libtool.m4:1961: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1961: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:2942: -1- AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +]) +m4trace:/usr/share/aclocal/libtool.m4:3004: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3004: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3027: -1- AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +]) +m4trace:/usr/share/aclocal/libtool.m4:3501: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3501: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3502: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3502: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3572: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +]) +m4trace:/usr/share/aclocal/libtool.m4:3591: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3591: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7641: -1- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) +m4trace:/usr/share/aclocal/libtool.m4:7650: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7650: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7657: -1- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) +]) +m4trace:/usr/share/aclocal/libtool.m4:7664: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) +]) +m4trace:/usr/share/aclocal/libtool.m4:7669: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7669: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7789: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7789: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT]) +_$0($*) +]) +m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl +dnl Although the argument is deprecated and no longer documented, +dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one +dnl here make sure it is the same as any other declaration of libltdl's +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is +dnl not yet using an explicit LT_CONFIG_LTDL_DIR. +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl +_$0() +]) +m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_CONVENIENCE]) +m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete. +You should run autoupdate.])dnl +_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_CONVENIENCE]) +m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl +dnl Although the argument is deprecated and no longer documented, +dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one +dnl here make sure it is the same as any other declaration of libltdl's +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is +dnl not yet using an explicit LT_CONFIG_LTDL_DIR. +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl +_$0() +]) +m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_INSTALLABLE]) +m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete. +You should run autoupdate.])dnl +_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_INSTALLABLE]) +m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [ + m4_pattern_allow([^_LT_LIBOBJS$]) + _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" +]) +m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +dnl We need to keep our own list of libobjs separate from our parent project, +dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while +dnl we look for our own LIBOBJs. +m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) +m4_pushdef([AC_LIBSOURCES]) + +dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: +m4_if(_LTDL_MODE, [], + [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) + m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], + [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) + +AC_ARG_WITH([included_ltdl], + [AS_HELP_STRING([--with-included-ltdl], + [use the GNU ltdl sources included here])]) + +if test "x$with_included_ltdl" != xyes; then + # We are not being forced to use the included libltdl sources, so + # decide whether there is a useful installed version we can use. + AC_CHECK_HEADER([ltdl.h], + [AC_CHECK_DECL([lt_dlinterface_register], + [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], + [with_included_ltdl=no], + [with_included_ltdl=yes])], + [with_included_ltdl=yes], + [AC_INCLUDES_DEFAULT + #include ])], + [with_included_ltdl=yes], + [AC_INCLUDES_DEFAULT] + ) +fi + +dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE +dnl was called yet, then for old times' sake, we assume libltdl is in an +dnl eponymous directory: +AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) + +AC_ARG_WITH([ltdl_include], + [AS_HELP_STRING([--with-ltdl-include=DIR], + [use the ltdl headers installed in DIR])]) + +if test -n "$with_ltdl_include"; then + if test -f "$with_ltdl_include/ltdl.h"; then : + else + AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include']) + fi +else + with_ltdl_include=no +fi + +AC_ARG_WITH([ltdl_lib], + [AS_HELP_STRING([--with-ltdl-lib=DIR], + [use the libltdl.la installed in DIR])]) + +if test -n "$with_ltdl_lib"; then + if test -f "$with_ltdl_lib/libltdl.la"; then : + else + AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib']) + fi +else + with_ltdl_lib=no +fi + +case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in + ,yes,no,no,) + m4_case(m4_default(_LTDL_TYPE, [convenience]), + [convenience], [_LTDL_CONVENIENCE], + [installable], [_LTDL_INSTALLABLE], + [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) + ;; + ,no,no,no,) + # If the included ltdl is not to be used, then use the + # preinstalled libltdl we found. + AC_DEFINE([HAVE_LTDL], [1], + [Define this if a modern libltdl is already installed]) + LIBLTDL=-lltdl + LTDLDEPS= + LTDLINCL= + ;; + ,no*,no,*) + AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together]) + ;; + *) with_included_ltdl=no + LIBLTDL="-L$with_ltdl_lib -lltdl" + LTDLDEPS= + LTDLINCL="-I$with_ltdl_include" + ;; +esac +INCLTDL="$LTDLINCL" + +# Report our decision... +AC_MSG_CHECKING([where to find libltdl headers]) +AC_MSG_RESULT([$LTDLINCL]) +AC_MSG_CHECKING([where to find libltdl library]) +AC_MSG_RESULT([$LIBLTDL]) + +_LTDL_SETUP + +dnl restore autoconf definition. +m4_popdef([AC_LIBOBJ]) +m4_popdef([AC_LIBSOURCES]) + +AC_CONFIG_COMMANDS_PRE([ + _ltdl_libobjs= + _ltdl_ltlibobjs= + if test -n "$_LT_LIBOBJS"; then + # Remove the extension. + _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do + _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" + _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" + done + fi + AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) + AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) +]) + +# Only expand once: +m4_define([LTDL_INIT]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_SYS_MODULE_EXT])dnl +AC_REQUIRE([LT_SYS_MODULE_PATH])dnl +AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl +AC_REQUIRE([LT_LIB_DLLOAD])dnl +AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl +AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl +AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl +AC_REQUIRE([gl_FUNC_ARGZ])dnl + +m4_require([_LT_CHECK_OBJDIR])dnl +m4_require([_LT_HEADER_DLFCN])dnl +m4_require([_LT_CHECK_DLPREOPEN])dnl +m4_require([_LT_DECL_SED])dnl + +dnl Don't require this, or it will be expanded earlier than the code +dnl that sets the variables it relies on: +_LT_ENABLE_INSTALL + +dnl _LTDL_MODE specific code must be called at least once: +_LTDL_MODE_DISPATCH + +# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS +# the user used. This is so that ltdl.h can pick up the parent projects +# config.h file, The first file in AC_CONFIG_HEADERS must contain the +# definitions required by ltdl.c. +# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). +AC_CONFIG_COMMANDS_PRE([dnl +m4_pattern_allow([^LT_CONFIG_H$])dnl +m4_ifset([AH_HEADER], + [LT_CONFIG_H=AH_HEADER], + [m4_ifset([AC_LIST_HEADERS], + [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`], + [])])]) +AC_SUBST([LT_CONFIG_H]) + +AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], + [], [], [AC_INCLUDES_DEFAULT]) + +AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) +AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) + +m4_pattern_allow([LT_LIBEXT])dnl +AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) + +name= +eval "lt_libprefix=\"$libname_spec\"" +m4_pattern_allow([LT_LIBPREFIX])dnl +AC_DEFINE_UNQUOTED([LT_LIBPREFIX],["$lt_libprefix"],[The archive prefix]) + +name=ltdl +eval "LTDLOPEN=\"$libname_spec\"" +AC_SUBST([LTDLOPEN]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:443: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_CACHE_CHECK([whether deplibs are loaded by dlopen], + [lt_cv_sys_dlopen_deplibs], + [# PORTME does your system automatically load deplibs for dlopen? + # or its logical equivalent (e.g. shl_load for HP-UX < 11) + # For now, we just catch OSes we know something about -- in the + # future, we'll try test this programmatically. + lt_cv_sys_dlopen_deplibs=unknown + case $host_os in + aix3*|aix4.1.*|aix4.2.*) + # Unknown whether this is true for these versions of AIX, but + # we want this `case' here to explicitly catch those versions. + lt_cv_sys_dlopen_deplibs=unknown + ;; + aix[[4-9]]*) + lt_cv_sys_dlopen_deplibs=yes + ;; + amigaos*) + case $host_cpu in + powerpc) + lt_cv_sys_dlopen_deplibs=no + ;; + esac + ;; + darwin*) + # Assuming the user has installed a libdl from somewhere, this is true + # If you are looking for one http://www.opendarwin.org/projects/dlcompat + lt_cv_sys_dlopen_deplibs=yes + ;; + freebsd* | dragonfly*) + lt_cv_sys_dlopen_deplibs=yes + ;; + gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) + # GNU and its variants, using gnu ld.so (Glibc) + lt_cv_sys_dlopen_deplibs=yes + ;; + hpux10*|hpux11*) + lt_cv_sys_dlopen_deplibs=yes + ;; + interix*) + lt_cv_sys_dlopen_deplibs=yes + ;; + irix[[12345]]*|irix6.[[01]]*) + # Catch all versions of IRIX before 6.2, and indicate that we don't + # know how it worked for any of those versions. + lt_cv_sys_dlopen_deplibs=unknown + ;; + irix*) + # The case above catches anything before 6.2, and it's known that + # at 6.2 and later dlopen does load deplibs. + lt_cv_sys_dlopen_deplibs=yes + ;; + netbsd* | netbsdelf*-gnu) + lt_cv_sys_dlopen_deplibs=yes + ;; + openbsd*) + lt_cv_sys_dlopen_deplibs=yes + ;; + osf[[1234]]*) + # dlopen did load deplibs (at least at 4.x), but until the 5.x series, + # it did *not* use an RPATH in a shared library to find objects the + # library depends on, so we explicitly say `no'. + lt_cv_sys_dlopen_deplibs=no + ;; + osf5.0|osf5.0a|osf5.1) + # dlopen *does* load deplibs and with the right loader patch applied + # it even uses RPATH in a shared library to search for shared objects + # that the library depends on, but there's no easy way to know if that + # patch is installed. Since this is the case, all we can really + # say is unknown -- it depends on the patch being installed. If + # it is, this changes to `yes'. Without it, it would be `no'. + lt_cv_sys_dlopen_deplibs=unknown + ;; + osf*) + # the two cases above should catch all versions of osf <= 5.1. Read + # the comments above for what we know about them. + # At > 5.1, deplibs are loaded *and* any RPATH in a shared library + # is used to find them so we can finally say `yes'. + lt_cv_sys_dlopen_deplibs=yes + ;; + qnx*) + lt_cv_sys_dlopen_deplibs=yes + ;; + solaris*) + lt_cv_sys_dlopen_deplibs=yes + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + esac + ]) +if test "$lt_cv_sys_dlopen_deplibs" != yes; then + AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], + [Define if the OS needs help to load dependent libraries for dlopen().]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:542: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:542: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:549: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([which extension is used for runtime loadable modules], + [libltdl_cv_shlibext], +[ +module=yes +eval libltdl_cv_shlibext=$shrext_cmds +module=no +eval libltdl_cv_shrext=$shrext_cmds + ]) +if test -n "$libltdl_cv_shlibext"; then + m4_pattern_allow([LT_MODULE_EXT])dnl + AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], + [Define to the extension used for runtime loadable modules, say, ".so".]) +fi +if test "$libltdl_cv_shrext" != "$libltdl_cv_shlibext"; then + m4_pattern_allow([LT_SHARED_EXT])dnl + AC_DEFINE_UNQUOTED([LT_SHARED_EXT], ["$libltdl_cv_shrext"], + [Define to the shared library suffix, say, ".dylib".]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:572: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:572: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:579: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([which variable specifies run-time module search path], + [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"]) +if test -n "$lt_cv_module_path_var"; then + m4_pattern_allow([LT_MODULE_PATH_VAR])dnl + AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], + [Define to the name of the environment variable that determines the run-time module search path.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:591: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:591: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:598: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([for the default library search path], + [lt_cv_sys_dlsearch_path], + [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"]) +if test -n "$lt_cv_sys_dlsearch_path"; then + sys_dlsearch_path= + for dir in $lt_cv_sys_dlsearch_path; do + if test -z "$sys_dlsearch_path"; then + sys_dlsearch_path="$dir" + else + sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir" + fi + done + m4_pattern_allow([LT_DLSEARCH_PATH])dnl + AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], + [Define to the system default library search path.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:619: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:619: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:645: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$]) +LT_DLLOADERS= +AC_SUBST([LT_DLLOADERS]) + +AC_LANG_PUSH([C]) + +LIBADD_DLOPEN= +AC_SEARCH_LIBS([dlopen], [dl], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + if test "$ac_cv_search_dlopen" != "none required" ; then + LIBADD_DLOPEN="-ldl" + fi + libltdl_cv_lib_dl_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H +# include +#endif + ]], [[dlopen(0, 0);]])], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + libltdl_cv_func_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], + [AC_CHECK_LIB([svld], [dlopen], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) +if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes +then + lt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DLOPEN" + AC_CHECK_FUNCS([dlerror]) + LIBS="$lt_save_LIBS" +fi +AC_SUBST([LIBADD_DLOPEN]) + +LIBADD_SHL_LOAD= +AC_CHECK_FUNC([shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], + [AC_CHECK_LIB([dld], [shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" + LIBADD_SHL_LOAD="-ldld"])]) +AC_SUBST([LIBADD_SHL_LOAD]) + +case $host_os in +darwin[[1567]].*) +# We only want this for pre-Mac OS X 10.4. + AC_CHECK_FUNC([_dyld_func_lookup], + [AC_DEFINE([HAVE_DYLD], [1], + [Define if you have the _dyld_func_lookup function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) + ;; +beos*) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" + ;; +cygwin* | mingw* | os2* | pw32*) + AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" + ;; +esac + +AC_CHECK_LIB([dld], [dld_link], + [AC_DEFINE([HAVE_DLD], [1], + [Define if you have the GNU dld library.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) +AC_SUBST([LIBADD_DLD_LINK]) + +m4_pattern_allow([^LT_DLPREOPEN$]) +LT_DLPREOPEN= +if test -n "$LT_DLLOADERS" +then + for lt_loader in $LT_DLLOADERS; do + LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " + done + AC_DEFINE([HAVE_LIBDLLOADER], [1], + [Define if libdlloader will be built on this platform]) +fi +AC_SUBST([LT_DLPREOPEN]) + +dnl This isn't used anymore, but set it for backwards compatibility +LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" +AC_SUBST([LIBADD_DL]) + +AC_LANG_POP +]) +m4trace:/usr/share/aclocal/ltdl.m4:738: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:738: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:746: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +AC_CACHE_CHECK([for _ prefix in compiled symbols], + [lt_cv_sys_symbol_underscore], + [lt_cv_sys_symbol_underscore=no + cat > conftest.$ac_ext <<_LT_EOF +void nm_test_func(){} +int main(){nm_test_func;return 0;} +_LT_EOF + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + ac_nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then + # See whether the symbols have a leading underscore. + if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then + lt_cv_sys_symbol_underscore=yes + else + if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then + : + else + echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD + fi + fi + else + echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.c >&AS_MESSAGE_LOG_FD + fi + rm -rf conftest* + ]) + sys_symbol_underscore=$lt_cv_sys_symbol_underscore + AC_SUBST([sys_symbol_underscore]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:783: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:783: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:790: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl +if test x"$lt_cv_sys_symbol_underscore" = xyes; then + if test x"$libltdl_cv_func_dlopen" = xyes || + test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then + AC_CACHE_CHECK([whether we have to add an underscore for dlsym], + [libltdl_cv_need_uscore], + [libltdl_cv_need_uscore=unknown + save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DLOPEN" + _LT_TRY_DLOPEN_SELF( + [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], + [], [libltdl_cv_need_uscore=cross]) + LIBS="$save_LIBS" + ]) + fi +fi + +if test x"$libltdl_cv_need_uscore" = xyes; then + AC_DEFINE([NEED_USCORE], [1], + [Define if dlsym() requires a leading underscore in symbol names.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:815: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:815: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltoptions.m4:14: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) +m4trace:/usr/share/aclocal/ltoptions.m4:111: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:111: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:146: -1- AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:146: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. +You should run autoupdate.])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:195: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:199: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:203: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:203: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete. +You should run autoupdate.])dnl +AC_ENABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:204: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:204: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete. +You should run autoupdate.])dnl +AC_DISABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:249: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:253: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:257: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:257: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete. +You should run autoupdate.])dnl +AC_ENABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:258: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:258: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete. +You should run autoupdate.])dnl +AC_DISABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:303: -1- AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:303: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:310: -1- AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:310: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:358: -1- AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:358: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltsugar.m4:13: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) +m4trace:/usr/share/aclocal/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' +macro_revision='1.3337' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:36: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:40: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_SHELL_INIT]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:44: -1- AC_DEFUN([_LT_AC_TAGVAR]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:45: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_PREOPEN]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:47: -1- AC_DEFUN([_LT_AC_SYS_COMPILER]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_LOCK]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:49: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:50: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:51: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LTDL_OBJDIR]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:57: -1- AC_DEFUN([AC_PATH_MAGIC]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PROG_LD_GNU]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:60: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:61: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:66: -1- AC_DEFUN([LT_AC_PROG_EGREP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:71: -1- AC_DEFUN([_AC_PROG_LIBTOOL]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:72: -1- AC_DEFUN([AC_LIBTOOL_SETUP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:73: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:74: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:75: -1- AC_DEFUN([_LT_AC_TAGCONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:77: -1- AC_DEFUN([_LT_AC_LANG_CXX]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_F77]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_GCJ]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:80: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:81: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:82: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:83: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:84: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:85: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:86: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:87: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:88: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:89: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:90: -1- AC_DEFUN([AC_LIBTOOL_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:91: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:93: -1- AC_DEFUN([_LT_AC_PROG_CXXCPP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:96: -1- AC_DEFUN([_LT_PROG_F77]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:97: -1- AC_DEFUN([_LT_PROG_FC]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:98: -1- AC_DEFUN([_LT_PROG_CXX]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:17: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.3], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:36: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.3])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +m4trace:/usr/share/aclocal-1.11/auxdir.m4:49: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) +m4trace:/usr/share/aclocal-1.11/ccstdc.m4:17: -1- AU_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC +AC_DIAGNOSE([obsolete], [$0: + your code should no longer depend upon `am_cv_prog_cc_stdc', but upon + `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when + you adjust the code. You can also remove the above call to + AC_PROG_CC if you already called it elsewhere.]) +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc +]) +m4trace:/usr/share/aclocal-1.11/ccstdc.m4:17: -1- AC_DEFUN([AM_PROG_CC_STDC], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_CC_STDC' is obsolete. +You should run autoupdate.])dnl +AC_PROG_CC +AC_DIAGNOSE([obsolete], [$0: + your code should no longer depend upon `am_cv_prog_cc_stdc', but upon + `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when + you adjust the code. You can also remove the above call to + AC_PROG_CC if you already called it elsewhere.]) +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc +]) +m4trace:/usr/share/aclocal-1.11/ccstdc.m4:26: -1- AU_DEFUN([fp_PROG_CC_STDC]) +m4trace:/usr/share/aclocal-1.11/ccstdc.m4:26: -1- AC_DEFUN([fp_PROG_CC_STDC], [AC_DIAGNOSE([obsolete], [The macro `fp_PROG_CC_STDC' is obsolete. +You should run autoupdate.])dnl +]) +m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) +m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:164: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:172: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) +m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) +m4trace:/usr/share/aclocal-1.11/header.m4:12: -1- AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. +You should run autoupdate.])dnl +AC_CONFIG_HEADERS($@)]) +m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) +m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) +m4trace:/usr/share/aclocal-1.11/install-sh.m4:14: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) +m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) +m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) +m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) +m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) +m4trace:/usr/share/aclocal-1.11/mkdirp.m4:14: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) +m4trace:/usr/share/aclocal-1.11/options.m4:14: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) +m4trace:/usr/share/aclocal-1.11/options.m4:20: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +m4trace:/usr/share/aclocal-1.11/options.m4:26: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +m4trace:/usr/share/aclocal-1.11/options.m4:32: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +m4trace:/usr/share/aclocal-1.11/runlog.m4:14: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) +m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) +m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few `make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using `$V' instead of `$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/strip.m4:19: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) +m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) +m4trace:config/readline.m4:20: -1- AC_DEFUN([SIC_WITH_READLINE], [AC_ARG_WITH(readline, +[ --with-readline compile with the system readline library], +[if test x"${withval-no}" != no; then + sic_save_LIBS=$LIBS + AC_CHECK_LIB(readline, readline) + if test x"${ac_cv_lib_readline_readline}" = xno; then + AC_MSG_ERROR(libreadline not found) + fi + LIBS=$sic_save_LIBS +fi]) +AM_CONDITIONAL(WITH_READLINE, test x"${with_readline-no}" != xno) +]) +m4trace:config/sys_errlist.m4:20: -1- AC_DEFUN([SIC_VAR_SYS_ERRLIST], [AC_CACHE_CHECK([for sys_errlist], +sic_cv_var_sys_errlist, +[AC_TRY_LINK([int *p;], [extern int sys_errlist; p = &sys_errlist;], + sic_cv_var_sys_errlist=yes, sic_cv_var_sys_errlist=no)]) +if test x"$sic_cv_var_sys_errlist" = xyes; then + AC_DEFINE(HAVE_SYS_ERRLIST, 1, + [Define if your system libraries have a sys_errlist variable.]) +fi]) +m4trace:config/sys_siglist.m4:20: -1- AC_DEFUN([SIC_VAR_SYS_SIGLIST], [AC_CACHE_CHECK([for sys_siglist], +sic_cv_var_sys_siglist, +[AC_TRY_LINK([int *p;], [extern int sys_siglist; p = &sys_siglist;], + sic_cv_var_sys_siglist=yes, sic_cv_var_sys_siglist=no)]) +if test x"$sic_cv_var_sys_siglist" = xyes; then + AC_DEFINE(HAVE_SYS_SIGLIST, 1, + [Define if your system libraries have a sys_siglist variable.]) +fi]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.in:18: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.in:18: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.in:18: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.in:18: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.in:20: -1- AM_CONFIG_HEADER([config.h:config-h.in]) +m4trace:configure.in:20: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. +You should run autoupdate.], [/usr/share/aclocal-1.11/header.m4:12: AM_CONFIG_HEADER is expanded from... +configure.in:20: the top level]) +m4trace:configure.in:21: -1- AM_INIT_AUTOMAKE([mmseg], [0.7]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.in:21: -1- AM_SET_CURRENT_AUTOMAKE_VERSION +m4trace:configure.in:21: -1- AM_AUTOMAKE_VERSION([1.11.3]) +m4trace:configure.in:21: -1- _AM_AUTOCONF_VERSION([2.68]) +m4trace:configure.in:21: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.in:21: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.in:21: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.in:21: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) +m4trace:configure.in:21: -2- _AM_MANGLE_OPTION([no-define]) +m4trace:configure.in:21: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.in:21: -1- AM_SANITY_CHECK +m4trace:configure.in:21: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +m4trace:configure.in:21: -1- AM_MISSING_HAS_RUN +m4trace:configure.in:21: -1- AM_AUX_DIR_EXPAND +m4trace:configure.in:21: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.in:21: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.in:21: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.in:21: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.in:21: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) +m4trace:configure.in:21: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.in:21: -1- AM_PROG_INSTALL_SH +m4trace:configure.in:21: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.in:21: -1- AM_PROG_INSTALL_STRIP +m4trace:configure.in:21: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.in:21: -1- AM_PROG_MKDIR_P +m4trace:configure.in:21: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.in:21: -1- AM_SET_LEADING_DOT +m4trace:configure.in:21: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.in:21: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +m4trace:configure.in:21: -2- _AM_MANGLE_OPTION([tar-ustar]) +m4trace:configure.in:21: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) +m4trace:configure.in:21: -2- _AM_MANGLE_OPTION([tar-pax]) +m4trace:configure.in:21: -1- _AM_PROG_TAR([v7]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.in:21: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.in:21: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +m4trace:configure.in:21: -2- _AM_MANGLE_OPTION([no-dependencies]) +m4trace:configure.in:21: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])]) +m4trace:configure.in:21: -2- _AM_MANGLE_OPTION([silent-rules]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.in:24: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.in:24: -1- AM_SET_DEPDIR +m4trace:configure.in:24: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.in:24: -1- AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.in:24: -1- AM_MAKE_INCLUDE +m4trace:configure.in:24: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.in:24: -1- AM_DEP_TRACK +m4trace:configure.in:24: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.in:24: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.in:24: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__nodep$]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([am__nodep]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.in:24: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.in:25: -1- AM_PROG_CC_STDC +m4trace:configure.in:25: -1- _m4_warn([obsolete], [The macro `AM_PROG_CC_STDC' is obsolete. +You should run autoupdate.], [/usr/share/aclocal-1.11/ccstdc.m4:17: AM_PROG_CC_STDC is expanded from... +configure.in:25: the top level]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.in:25: -1- _AM_DEPENDENCIES([CC]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.in:25: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.in:25: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.in:25: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.in:25: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.in:25: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.in:25: -1- _m4_warn([obsolete], [AM_PROG_CC_STDC: + your code should no longer depend upon `am_cv_prog_cc_stdc', but upon + `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when + you adjust the code. You can also remove the above call to + AC_PROG_CC if you already called it elsewhere.], [/usr/share/aclocal-1.11/ccstdc.m4:17: AM_PROG_CC_STDC is expanded from... +configure.in:25: the top level]) +m4trace:configure.in:26: -1- AM_PROG_LIBTOOL +m4trace:configure.in:26: -1- _m4_warn([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. +You should run autoupdate.], [/usr/share/aclocal/libtool.m4:108: AM_PROG_LIBTOOL is expanded from... +configure.in:26: the top level]) +m4trace:configure.in:26: -1- LT_INIT +m4trace:configure.in:26: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) +m4trace:configure.in:26: -1- LTOPTIONS_VERSION +m4trace:configure.in:26: -1- LTSUGAR_VERSION +m4trace:configure.in:26: -1- LTVERSION_VERSION +m4trace:configure.in:26: -1- LTOBSOLETE_VERSION +m4trace:configure.in:26: -1- _LT_PROG_LTMAIN +m4trace:configure.in:26: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^build$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^host$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.in:26: -1- _LT_PREPARE_SED_QUOTE_VARS +m4trace:configure.in:26: -1- _LT_PROG_ECHO_BACKSLASH +m4trace:configure.in:26: -1- LT_PATH_LD +m4trace:configure.in:26: -1- m4_pattern_allow([^SED$]) +m4trace:configure.in:26: -1- AC_PROG_EGREP +m4trace:configure.in:26: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^FGREP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LD$]) +m4trace:configure.in:26: -1- LT_PATH_NM +m4trace:configure.in:26: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^NM$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.in:26: -1- LT_CMD_MAX_LEN +m4trace:configure.in:26: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^DLLTOOL$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^DLLTOOL$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^AR$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^ac_ct_AR$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.in:26: -1- _LT_WITH_SYSROOT +m4trace:configure.in:26: -1- m4_pattern_allow([LT_OBJDIR]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LT_OBJDIR$]) +m4trace:configure.in:26: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:26: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.in:26: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.in:26: -1- LT_SUPPORTED_TAG([CC]) +m4trace:configure.in:26: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.in:26: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.in:26: -1- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"]) +m4trace:configure.in:26: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t@m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;; + esac], [_LT_TAGVAR(lt_prog_compiler_pic, )= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no]) +m4trace:configure.in:26: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=]) +m4trace:configure.in:26: -1- m4_pattern_allow([^MANIFEST_TOOL$]) +m4trace:configure.in:26: -1- _LT_REQUIRED_DARWIN_CHECKS +m4trace:configure.in:26: -1- m4_pattern_allow([^DSYMUTIL$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^NMEDIT$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LIPO$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^OTOOL$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^OTOOL64$]) +m4trace:configure.in:26: -1- _LT_LINKER_OPTION([if $CC understands -b], [lt_cv_prog_compiler__b], [-b], [_LT_TAGVAR(archive_cmds, )='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, )='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags']) +m4trace:configure.in:26: -1- LT_SYS_DLOPEN_SELF +m4trace:configure.in:26: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) +m4trace:configure.in:26: -1- LT_LANG([CXX]) +m4trace:configure.in:26: -1- LT_SUPPORTED_TAG([CXX]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.in:26: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.in:26: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.in:26: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.in:26: -1- LT_PATH_LD +m4trace:configure.in:26: -1- m4_pattern_allow([^LD$]) +m4trace:configure.in:26: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, CXX) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, CXX)], [$_LT_TAGVAR(lt_prog_compiler_pic, CXX)@&t@m4_if([CXX],[],[ -DPIC],[m4_if([CXX],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, CXX) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, CXX)=" $_LT_TAGVAR(lt_prog_compiler_pic, CXX)" ;; + esac], [_LT_TAGVAR(lt_prog_compiler_pic, CXX)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, CXX)=no]) +m4trace:configure.in:26: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works_CXX], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, CXX)=]) +m4trace:configure.in:28: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.in:29: -1- m4_pattern_allow([^HAVE_SYS_WAIT_H$]) +m4trace:configure.in:38: -1- m4_pattern_allow([^HAVE_VARARGS_H$]) +m4trace:configure.in:44: -1- m4_pattern_allow([^HAVE_VARARGS_H$]) +m4trace:configure.in:48: -1- m4_pattern_allow([^HAVE_STDARG_H$]) +m4trace:configure.in:59: -1- m4_pattern_allow([^const$]) +m4trace:configure.in:60: -1- m4_pattern_allow([^pid_t$]) +m4trace:configure.in:61: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.in:63: -1- SIC_WITH_READLINE +m4trace:configure.in:63: -1- m4_pattern_allow([^HAVE_LIBREADLINE$]) +m4trace:configure.in:63: -1- AM_CONDITIONAL([WITH_READLINE], [test x"${with_readline-no}" != xno]) +m4trace:configure.in:63: -1- m4_pattern_allow([^WITH_READLINE_TRUE$]) +m4trace:configure.in:63: -1- m4_pattern_allow([^WITH_READLINE_FALSE$]) +m4trace:configure.in:63: -1- _AM_SUBST_NOTMAKE([WITH_READLINE_TRUE]) +m4trace:configure.in:63: -1- _AM_SUBST_NOTMAKE([WITH_READLINE_FALSE]) +m4trace:configure.in:65: -1- SIC_VAR_SYS_ERRLIST +m4trace:configure.in:65: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +config/sys_errlist.m4:20: SIC_VAR_SYS_ERRLIST is expanded from... +configure.in:65: the top level]) +m4trace:configure.in:65: -1- m4_pattern_allow([^HAVE_SYS_ERRLIST$]) +m4trace:configure.in:66: -1- SIC_VAR_SYS_SIGLIST +m4trace:configure.in:66: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +config/sys_siglist.m4:20: SIC_VAR_SYS_SIGLIST is expanded from... +configure.in:66: the top level]) +m4trace:configure.in:66: -1- m4_pattern_allow([^HAVE_SYS_SIGLIST$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_BASENAME$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_STRSPN$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_STRCSPN$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_STRERROR$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_STRSIGNAL$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_VFPRINTF$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_WAITPID$]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:77: -1- _m4_warn([obsolete], [The macro `AC_OUTPUT_COMMANDS' is obsolete. +You should run autoupdate.], [../../lib/autoconf/status.m4:1028: AC_OUTPUT_COMMANDS is expanded from... +configure.in:77: the top level]) +m4trace:configure.in:267: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:273: -1- m4_pattern_allow([^ac_aux_dir$]) +m4trace:configure.in:275: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. +You should run autoupdate.], []) +m4trace:configure.in:275: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:275: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.in:275: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.in:275: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.in:275: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.in:275: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.in:275: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.in:275: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) +m4trace:configure.in:275: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.in:275: -1- _LT_PROG_LTMAIN diff --git a/coreseek/mmseg-3.2.14/autom4te.cache/traces.1 b/coreseek/mmseg-3.2.14/autom4te.cache/traces.1 new file mode 100644 index 0000000..f1fe58e --- /dev/null +++ b/coreseek/mmseg-3.2.14/autom4te.cache/traces.1 @@ -0,0 +1,713 @@ +m4trace:aclocal.m4:9613: -1- m4_include([config/readline.m4]) +m4trace:aclocal.m4:9614: -1- m4_include([config/sys_errlist.m4]) +m4trace:aclocal.m4:9615: -1- m4_include([config/sys_siglist.m4]) +m4trace:configure.in:18: -1- AC_INIT([src/mmseg_main.cpp]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.in:18: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.in:18: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.in:18: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.in:18: -1- AC_SUBST([SHELL]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([SHELL]) +m4trace:configure.in:18: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.in:18: -1- AC_SUBST([PATH_SEPARATOR]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.in:18: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([PACKAGE_NAME]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.in:18: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.in:18: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.in:18: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([PACKAGE_STRING]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.in:18: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.in:18: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([PACKAGE_URL]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.in:18: -1- AC_SUBST([exec_prefix], [NONE]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([exec_prefix]) +m4trace:configure.in:18: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.in:18: -1- AC_SUBST([prefix], [NONE]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([prefix]) +m4trace:configure.in:18: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.in:18: -1- AC_SUBST([program_transform_name], [s,x,x,]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([program_transform_name]) +m4trace:configure.in:18: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.in:18: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([bindir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.in:18: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([sbindir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.in:18: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([libexecdir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.in:18: -1- AC_SUBST([datarootdir], ['${prefix}/share']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([datarootdir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.in:18: -1- AC_SUBST([datadir], ['${datarootdir}']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([datadir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.in:18: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([sysconfdir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.in:18: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([sharedstatedir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.in:18: -1- AC_SUBST([localstatedir], ['${prefix}/var']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([localstatedir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.in:18: -1- AC_SUBST([includedir], ['${prefix}/include']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([includedir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.in:18: -1- AC_SUBST([oldincludedir], ['/usr/include']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([oldincludedir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.in:18: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], + ['${datarootdir}/doc/${PACKAGE_TARNAME}'], + ['${datarootdir}/doc/${PACKAGE}'])]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([docdir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.in:18: -1- AC_SUBST([infodir], ['${datarootdir}/info']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([infodir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.in:18: -1- AC_SUBST([htmldir], ['${docdir}']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([htmldir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.in:18: -1- AC_SUBST([dvidir], ['${docdir}']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([dvidir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.in:18: -1- AC_SUBST([pdfdir], ['${docdir}']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([pdfdir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.in:18: -1- AC_SUBST([psdir], ['${docdir}']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([psdir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.in:18: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([libdir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.in:18: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([localedir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.in:18: -1- AC_SUBST([mandir], ['${datarootdir}/man']) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([mandir]) +m4trace:configure.in:18: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.in:18: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.in:18: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ +@%:@undef PACKAGE_NAME]) +m4trace:configure.in:18: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.in:18: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ +@%:@undef PACKAGE_TARNAME]) +m4trace:configure.in:18: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.in:18: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ +@%:@undef PACKAGE_VERSION]) +m4trace:configure.in:18: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.in:18: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ +@%:@undef PACKAGE_STRING]) +m4trace:configure.in:18: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.in:18: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ +@%:@undef PACKAGE_BUGREPORT]) +m4trace:configure.in:18: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) +m4trace:configure.in:18: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.in:18: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ +@%:@undef PACKAGE_URL]) +m4trace:configure.in:18: -1- AC_SUBST([DEFS]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([DEFS]) +m4trace:configure.in:18: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.in:18: -1- AC_SUBST([ECHO_C]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([ECHO_C]) +m4trace:configure.in:18: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.in:18: -1- AC_SUBST([ECHO_N]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([ECHO_N]) +m4trace:configure.in:18: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.in:18: -1- AC_SUBST([ECHO_T]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([ECHO_T]) +m4trace:configure.in:18: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.in:18: -1- AC_SUBST([LIBS]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.in:18: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:18: -1- AC_SUBST([build_alias]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([build_alias]) +m4trace:configure.in:18: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.in:18: -1- AC_SUBST([host_alias]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([host_alias]) +m4trace:configure.in:18: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.in:18: -1- AC_SUBST([target_alias]) +m4trace:configure.in:18: -1- AC_SUBST_TRACE([target_alias]) +m4trace:configure.in:18: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.in:19: -1- AC_CONFIG_AUX_DIR([config]) +m4trace:configure.in:20: -1- _m4_warn([obsolete], [The macro `AM_CONFIG_HEADER' is obsolete. +You should run autoupdate.], [aclocal.m4:9058: AM_CONFIG_HEADER is expanded from... +configure.in:20: the top level]) +m4trace:configure.in:20: -1- AC_CONFIG_HEADERS([config.h:config-h.in]) +m4trace:configure.in:21: -1- AM_INIT_AUTOMAKE([mmseg], [0.7]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.in:21: -1- AM_AUTOMAKE_VERSION([1.11.3]) +m4trace:configure.in:21: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.in:21: -1- AC_SUBST([INSTALL_PROGRAM]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) +m4trace:configure.in:21: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.in:21: -1- AC_SUBST([INSTALL_SCRIPT]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) +m4trace:configure.in:21: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.in:21: -1- AC_SUBST([INSTALL_DATA]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([INSTALL_DATA]) +m4trace:configure.in:21: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.in:21: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([am__isrc]) +m4trace:configure.in:21: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.in:21: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.in:21: -1- AC_SUBST([CYGPATH_W]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([CYGPATH_W]) +m4trace:configure.in:21: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.in:21: -1- AC_SUBST([PACKAGE], [mmseg]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([PACKAGE]) +m4trace:configure.in:21: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.in:21: -1- AC_SUBST([VERSION], [0.7]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([VERSION]) +m4trace:configure.in:21: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.in:21: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) +m4trace:configure.in:21: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.in:21: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ +@%:@undef PACKAGE]) +m4trace:configure.in:21: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) +m4trace:configure.in:21: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.in:21: -1- AH_OUTPUT([VERSION], [/* Version number of package */ +@%:@undef VERSION]) +m4trace:configure.in:21: -1- AC_REQUIRE_AUX_FILE([missing]) +m4trace:configure.in:21: -1- AC_SUBST([ACLOCAL]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([ACLOCAL]) +m4trace:configure.in:21: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.in:21: -1- AC_SUBST([AUTOCONF]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([AUTOCONF]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.in:21: -1- AC_SUBST([AUTOMAKE]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([AUTOMAKE]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.in:21: -1- AC_SUBST([AUTOHEADER]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([AUTOHEADER]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.in:21: -1- AC_SUBST([MAKEINFO]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([MAKEINFO]) +m4trace:configure.in:21: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.in:21: -1- AC_SUBST([install_sh]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([install_sh]) +m4trace:configure.in:21: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.in:21: -1- AC_SUBST([STRIP]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.in:21: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.in:21: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) +m4trace:configure.in:21: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.in:21: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.in:21: -1- AC_SUBST([MKDIR_P]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.in:21: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.in:21: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([mkdir_p]) +m4trace:configure.in:21: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.in:21: -1- AC_SUBST([AWK]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([AWK]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.in:21: -1- AC_SUBST([SET_MAKE]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([SET_MAKE]) +m4trace:configure.in:21: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.in:21: -1- AC_SUBST([am__leading_dot]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([am__leading_dot]) +m4trace:configure.in:21: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.in:21: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([AMTAR]) +m4trace:configure.in:21: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.in:21: -1- AC_SUBST([am__tar]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([am__tar]) +m4trace:configure.in:21: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.in:21: -1- AC_SUBST([am__untar]) +m4trace:configure.in:21: -1- AC_SUBST_TRACE([am__untar]) +m4trace:configure.in:21: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.in:24: -1- AC_SUBST([CXX]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.in:24: -1- AC_SUBST([CXXFLAGS]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([CXXFLAGS]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.in:24: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.in:24: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:24: -1- AC_SUBST([LIBS]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.in:24: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:24: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:24: -1- AC_SUBST([CXX]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.in:24: -1- AC_SUBST([ac_ct_CXX]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([ac_ct_CXX]) +m4trace:configure.in:24: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.in:24: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([EXEEXT]) +m4trace:configure.in:24: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.in:24: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([OBJEXT]) +m4trace:configure.in:24: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.in:24: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([DEPDIR]) +m4trace:configure.in:24: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.in:24: -1- AC_SUBST([am__include]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([am__include]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.in:24: -1- AC_SUBST([am__quote]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([am__quote]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.in:24: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.in:24: -1- AC_SUBST([AMDEP_TRUE]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([AMDEP_TRUE]) +m4trace:configure.in:24: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.in:24: -1- AC_SUBST([AMDEP_FALSE]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([AMDEP_FALSE]) +m4trace:configure.in:24: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.in:24: -1- AC_SUBST([AMDEPBACKSLASH]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) +m4trace:configure.in:24: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.in:24: -1- AC_SUBST([am__nodep]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([am__nodep]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__nodep$]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([am__nodep]) +m4trace:configure.in:24: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([CXXDEPMODE]) +m4trace:configure.in:24: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.in:24: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.in:24: -1- AC_SUBST([am__fastdepCXX_TRUE]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.in:24: -1- AC_SUBST([am__fastdepCXX_FALSE]) +m4trace:configure.in:24: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE]) +m4trace:configure.in:24: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.in:24: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.in:25: -1- _m4_warn([obsolete], [The macro `AM_PROG_CC_STDC' is obsolete. +You should run autoupdate.], [aclocal.m4:8735: AM_PROG_CC_STDC is expanded from... +configure.in:25: the top level]) +m4trace:configure.in:25: -1- AC_SUBST([CC]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- AC_SUBST([CFLAGS]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([CFLAGS]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.in:25: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.in:25: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.in:25: -1- AC_SUBST([LIBS]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.in:25: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.in:25: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:25: -1- AC_SUBST([CC]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- AC_SUBST([CC]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- AC_SUBST([CC]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- AC_SUBST([CC]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CC$]) +m4trace:configure.in:25: -1- AC_SUBST([ac_ct_CC]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([ac_ct_CC]) +m4trace:configure.in:25: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.in:25: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([CCDEPMODE]) +m4trace:configure.in:25: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.in:25: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.in:25: -1- AC_SUBST([am__fastdepCC_TRUE]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) +m4trace:configure.in:25: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.in:25: -1- AC_SUBST([am__fastdepCC_FALSE]) +m4trace:configure.in:25: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) +m4trace:configure.in:25: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.in:25: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.in:25: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.in:25: -1- _m4_warn([obsolete], [AM_PROG_CC_STDC: + your code should no longer depend upon `am_cv_prog_cc_stdc', but upon + `ac_cv_prog_cc_stdc'. Remove this warning and the assignment when + you adjust the code. You can also remove the above call to + AC_PROG_CC if you already called it elsewhere.], [aclocal.m4:8735: AM_PROG_CC_STDC is expanded from... +configure.in:25: the top level]) +m4trace:configure.in:26: -1- _m4_warn([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. +You should run autoupdate.], [aclocal.m4:130: AM_PROG_LIBTOOL is expanded from... +configure.in:26: the top level]) +m4trace:configure.in:26: -1- LT_INIT +m4trace:configure.in:26: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) +m4trace:configure.in:26: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) +m4trace:configure.in:26: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) +m4trace:configure.in:26: -1- AC_SUBST([LIBTOOL]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([LIBTOOL]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.in:26: -1- AC_CANONICAL_HOST +m4trace:configure.in:26: -1- AC_CANONICAL_BUILD +m4trace:configure.in:26: -1- AC_REQUIRE_AUX_FILE([config.sub]) +m4trace:configure.in:26: -1- AC_REQUIRE_AUX_FILE([config.guess]) +m4trace:configure.in:26: -1- AC_SUBST([build], [$ac_cv_build]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([build]) +m4trace:configure.in:26: -1- m4_pattern_allow([^build$]) +m4trace:configure.in:26: -1- AC_SUBST([build_cpu], [$[1]]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([build_cpu]) +m4trace:configure.in:26: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.in:26: -1- AC_SUBST([build_vendor], [$[2]]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([build_vendor]) +m4trace:configure.in:26: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.in:26: -1- AC_SUBST([build_os]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([build_os]) +m4trace:configure.in:26: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.in:26: -1- AC_SUBST([host], [$ac_cv_host]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([host]) +m4trace:configure.in:26: -1- m4_pattern_allow([^host$]) +m4trace:configure.in:26: -1- AC_SUBST([host_cpu], [$[1]]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([host_cpu]) +m4trace:configure.in:26: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.in:26: -1- AC_SUBST([host_vendor], [$[2]]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([host_vendor]) +m4trace:configure.in:26: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.in:26: -1- AC_SUBST([host_os]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([host_os]) +m4trace:configure.in:26: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.in:26: -1- AC_SUBST([SED]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([SED]) +m4trace:configure.in:26: -1- m4_pattern_allow([^SED$]) +m4trace:configure.in:26: -1- AC_SUBST([GREP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.in:26: -1- AC_SUBST([EGREP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([EGREP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.in:26: -1- AC_SUBST([FGREP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([FGREP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^FGREP$]) +m4trace:configure.in:26: -1- AC_SUBST([GREP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.in:26: -1- AC_SUBST([LD]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([LD]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LD$]) +m4trace:configure.in:26: -1- AC_SUBST([DUMPBIN]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([DUMPBIN]) +m4trace:configure.in:26: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.in:26: -1- AC_SUBST([ac_ct_DUMPBIN]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN]) +m4trace:configure.in:26: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) +m4trace:configure.in:26: -1- AC_SUBST([DUMPBIN]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([DUMPBIN]) +m4trace:configure.in:26: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.in:26: -1- AC_SUBST([NM]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([NM]) +m4trace:configure.in:26: -1- m4_pattern_allow([^NM$]) +m4trace:configure.in:26: -1- AC_SUBST([LN_S], [$as_ln_s]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([LN_S]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.in:26: -1- AC_SUBST([OBJDUMP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([OBJDUMP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.in:26: -1- AC_SUBST([OBJDUMP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([OBJDUMP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.in:26: -1- AC_SUBST([DLLTOOL]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([DLLTOOL]) +m4trace:configure.in:26: -1- m4_pattern_allow([^DLLTOOL$]) +m4trace:configure.in:26: -1- AC_SUBST([DLLTOOL]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([DLLTOOL]) +m4trace:configure.in:26: -1- m4_pattern_allow([^DLLTOOL$]) +m4trace:configure.in:26: -1- AC_SUBST([AR]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([AR]) +m4trace:configure.in:26: -1- m4_pattern_allow([^AR$]) +m4trace:configure.in:26: -1- AC_SUBST([ac_ct_AR]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([ac_ct_AR]) +m4trace:configure.in:26: -1- m4_pattern_allow([^ac_ct_AR$]) +m4trace:configure.in:26: -1- AC_SUBST([STRIP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.in:26: -1- AC_SUBST([RANLIB]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([RANLIB]) +m4trace:configure.in:26: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.in:26: -1- m4_pattern_allow([LT_OBJDIR]) +m4trace:configure.in:26: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LT_OBJDIR$]) +m4trace:configure.in:26: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +@%:@undef LT_OBJDIR]) +m4trace:configure.in:26: -1- LT_SUPPORTED_TAG([CC]) +m4trace:configure.in:26: -1- AC_SUBST([MANIFEST_TOOL]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([MANIFEST_TOOL]) +m4trace:configure.in:26: -1- m4_pattern_allow([^MANIFEST_TOOL$]) +m4trace:configure.in:26: -1- AC_SUBST([DSYMUTIL]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([DSYMUTIL]) +m4trace:configure.in:26: -1- m4_pattern_allow([^DSYMUTIL$]) +m4trace:configure.in:26: -1- AC_SUBST([NMEDIT]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([NMEDIT]) +m4trace:configure.in:26: -1- m4_pattern_allow([^NMEDIT$]) +m4trace:configure.in:26: -1- AC_SUBST([LIPO]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([LIPO]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LIPO$]) +m4trace:configure.in:26: -1- AC_SUBST([OTOOL]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([OTOOL]) +m4trace:configure.in:26: -1- m4_pattern_allow([^OTOOL$]) +m4trace:configure.in:26: -1- AC_SUBST([OTOOL64]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([OTOOL64]) +m4trace:configure.in:26: -1- m4_pattern_allow([^OTOOL64$]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_DLFCN_H]) +m4trace:configure.in:26: -1- AC_SUBST([CPP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.in:26: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:26: -1- AC_SUBST([CPP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.in:26: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.in:26: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.in:26: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +@%:@undef STDC_HEADERS]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_TYPES_H]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_STAT_H]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRING_H]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_MEMORY_H]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRINGS_H]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_INTTYPES_H]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDINT_H]) +m4trace:configure.in:26: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_UNISTD_H]) +m4trace:configure.in:26: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H]) +m4trace:configure.in:26: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) +m4trace:configure.in:26: -1- LT_SUPPORTED_TAG([CXX]) +m4trace:configure.in:26: -1- AC_SUBST([CXXCPP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([CXXCPP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.in:26: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.in:26: -1- AC_SUBST([CXXCPP]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([CXXCPP]) +m4trace:configure.in:26: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.in:26: -1- AC_SUBST([LD]) +m4trace:configure.in:26: -1- AC_SUBST_TRACE([LD]) +m4trace:configure.in:26: -1- m4_pattern_allow([^LD$]) +m4trace:configure.in:28: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.in:28: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.in:28: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +@%:@undef STDC_HEADERS]) +m4trace:configure.in:29: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_WAIT_H]) +m4trace:configure.in:29: -1- m4_pattern_allow([^HAVE_SYS_WAIT_H$]) +m4trace:configure.in:29: -1- AH_OUTPUT([HAVE_SYS_WAIT_H], [/* Define to 1 if you have that is POSIX.1 compatible. */ +@%:@undef HAVE_SYS_WAIT_H]) +m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_UNISTD_H]) +m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_ERRNO_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_ERRNO_H]) +m4trace:configure.in:30: -1- AH_OUTPUT([HAVE_ASSERT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_ASSERT_H]) +m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRING_H]) +m4trace:configure.in:31: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRINGS_H]) +m4trace:configure.in:38: -1- AH_OUTPUT([HAVE_VARARGS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_VARARGS_H]) +m4trace:configure.in:38: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VARARGS_H]) +m4trace:configure.in:38: -1- m4_pattern_allow([^HAVE_VARARGS_H$]) +m4trace:configure.in:44: -1- AH_OUTPUT([HAVE_VARARGS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_VARARGS_H]) +m4trace:configure.in:44: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VARARGS_H]) +m4trace:configure.in:44: -1- m4_pattern_allow([^HAVE_VARARGS_H$]) +m4trace:configure.in:48: -1- AH_OUTPUT([HAVE_STDARG_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDARG_H]) +m4trace:configure.in:48: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDARG_H]) +m4trace:configure.in:48: -1- m4_pattern_allow([^HAVE_STDARG_H$]) +m4trace:configure.in:59: -1- AC_DEFINE_TRACE_LITERAL([const]) +m4trace:configure.in:59: -1- m4_pattern_allow([^const$]) +m4trace:configure.in:59: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */ +@%:@undef const]) +m4trace:configure.in:60: -1- AC_DEFINE_TRACE_LITERAL([pid_t]) +m4trace:configure.in:60: -1- m4_pattern_allow([^pid_t$]) +m4trace:configure.in:60: -1- AH_OUTPUT([pid_t], [/* Define to `int\' if does not define. */ +@%:@undef pid_t]) +m4trace:configure.in:61: -1- AC_DEFINE_TRACE_LITERAL([size_t]) +m4trace:configure.in:61: -1- m4_pattern_allow([^size_t$]) +m4trace:configure.in:61: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if does not define. */ +@%:@undef size_t]) +m4trace:configure.in:63: -1- AH_OUTPUT([HAVE_LIBREADLINE], [/* Define to 1 if you have the `readline\' library (-lreadline). */ +@%:@undef HAVE_LIBREADLINE]) +m4trace:configure.in:63: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBREADLINE]) +m4trace:configure.in:63: -1- m4_pattern_allow([^HAVE_LIBREADLINE$]) +m4trace:configure.in:63: -1- AM_CONDITIONAL([WITH_READLINE], [test x"${with_readline-no}" != xno]) +m4trace:configure.in:63: -1- AC_SUBST([WITH_READLINE_TRUE]) +m4trace:configure.in:63: -1- AC_SUBST_TRACE([WITH_READLINE_TRUE]) +m4trace:configure.in:63: -1- m4_pattern_allow([^WITH_READLINE_TRUE$]) +m4trace:configure.in:63: -1- AC_SUBST([WITH_READLINE_FALSE]) +m4trace:configure.in:63: -1- AC_SUBST_TRACE([WITH_READLINE_FALSE]) +m4trace:configure.in:63: -1- m4_pattern_allow([^WITH_READLINE_FALSE$]) +m4trace:configure.in:63: -1- _AM_SUBST_NOTMAKE([WITH_READLINE_TRUE]) +m4trace:configure.in:63: -1- _AM_SUBST_NOTMAKE([WITH_READLINE_FALSE]) +m4trace:configure.in:65: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +config/sys_errlist.m4:20: SIC_VAR_SYS_ERRLIST is expanded from... +configure.in:65: the top level]) +m4trace:configure.in:65: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_ERRLIST]) +m4trace:configure.in:65: -1- m4_pattern_allow([^HAVE_SYS_ERRLIST$]) +m4trace:configure.in:65: -1- AH_OUTPUT([HAVE_SYS_ERRLIST], [/* Define if your system libraries have a sys_errlist variable. */ +@%:@undef HAVE_SYS_ERRLIST]) +m4trace:configure.in:66: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete. +You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from... +../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from... +../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from... +../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from... +config/sys_siglist.m4:20: SIC_VAR_SYS_SIGLIST is expanded from... +configure.in:66: the top level]) +m4trace:configure.in:66: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_SIGLIST]) +m4trace:configure.in:66: -1- m4_pattern_allow([^HAVE_SYS_SIGLIST$]) +m4trace:configure.in:66: -1- AH_OUTPUT([HAVE_SYS_SIGLIST], [/* Define if your system libraries have a sys_siglist variable. */ +@%:@undef HAVE_SYS_SIGLIST]) +m4trace:configure.in:68: -1- AH_OUTPUT([HAVE_BZERO], [/* Define to 1 if you have the `bzero\' function. */ +@%:@undef HAVE_BZERO]) +m4trace:configure.in:68: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */ +@%:@undef HAVE_MEMSET]) +m4trace:configure.in:69: -1- AH_OUTPUT([HAVE_CALLOC], [/* Define to 1 if you have the `calloc\' function. */ +@%:@undef HAVE_CALLOC]) +m4trace:configure.in:69: -1- AH_OUTPUT([HAVE_STRCHR], [/* Define to 1 if you have the `strchr\' function. */ +@%:@undef HAVE_STRCHR]) +m4trace:configure.in:69: -1- AH_OUTPUT([HAVE_STRRCHR], [/* Define to 1 if you have the `strrchr\' function. */ +@%:@undef HAVE_STRRCHR]) +m4trace:configure.in:70: -1- AH_OUTPUT([HAVE_BASENAME], [/* Define to 1 if you have the `basename\' function. */ +@%:@undef HAVE_BASENAME]) +m4trace:configure.in:70: -1- AC_DEFINE_TRACE_LITERAL([HAVE_BASENAME]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_BASENAME$]) +m4trace:configure.in:70: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS basename.$ac_objext"]) +m4trace:configure.in:70: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- AC_LIBSOURCE([basename.c]) +m4trace:configure.in:70: -1- AH_OUTPUT([HAVE_STRSPN], [/* Define to 1 if you have the `strspn\' function. */ +@%:@undef HAVE_STRSPN]) +m4trace:configure.in:70: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRSPN]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_STRSPN$]) +m4trace:configure.in:70: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strspn.$ac_objext"]) +m4trace:configure.in:70: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- AC_LIBSOURCE([strspn.c]) +m4trace:configure.in:70: -1- AH_OUTPUT([HAVE_STRCSPN], [/* Define to 1 if you have the `strcspn\' function. */ +@%:@undef HAVE_STRCSPN]) +m4trace:configure.in:70: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCSPN]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_STRCSPN$]) +m4trace:configure.in:70: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strcspn.$ac_objext"]) +m4trace:configure.in:70: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- AC_LIBSOURCE([strcspn.c]) +m4trace:configure.in:70: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */ +@%:@undef HAVE_STRERROR]) +m4trace:configure.in:70: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRERROR]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_STRERROR$]) +m4trace:configure.in:70: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strerror.$ac_objext"]) +m4trace:configure.in:70: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- AC_LIBSOURCE([strerror.c]) +m4trace:configure.in:70: -1- AH_OUTPUT([HAVE_STRSIGNAL], [/* Define to 1 if you have the `strsignal\' function. */ +@%:@undef HAVE_STRSIGNAL]) +m4trace:configure.in:70: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRSIGNAL]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_STRSIGNAL$]) +m4trace:configure.in:70: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strsignal.$ac_objext"]) +m4trace:configure.in:70: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- AC_LIBSOURCE([strsignal.c]) +m4trace:configure.in:70: -1- AH_OUTPUT([HAVE_VFPRINTF], [/* Define to 1 if you have the `vfprintf\' function. */ +@%:@undef HAVE_VFPRINTF]) +m4trace:configure.in:70: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VFPRINTF]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_VFPRINTF$]) +m4trace:configure.in:70: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS vfprintf.$ac_objext"]) +m4trace:configure.in:70: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- AC_LIBSOURCE([vfprintf.c]) +m4trace:configure.in:70: -1- AH_OUTPUT([HAVE_WAITPID], [/* Define to 1 if you have the `waitpid\' function. */ +@%:@undef HAVE_WAITPID]) +m4trace:configure.in:70: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WAITPID]) +m4trace:configure.in:70: -1- m4_pattern_allow([^HAVE_WAITPID$]) +m4trace:configure.in:70: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS waitpid.$ac_objext"]) +m4trace:configure.in:70: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:70: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:70: -1- AC_LIBSOURCE([waitpid.c]) +m4trace:configure.in:77: -1- _m4_warn([obsolete], [The macro `AC_OUTPUT_COMMANDS' is obsolete. +You should run autoupdate.], [../../lib/autoconf/status.m4:1028: AC_OUTPUT_COMMANDS is expanded from... +configure.in:77: the top level]) +m4trace:configure.in:267: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS .$ac_objext"]) +m4trace:configure.in:267: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:267: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:267: -1- AC_LIBSOURCE([.c]) +m4trace:configure.in:273: -1- AC_SUBST([ac_aux_dir]) +m4trace:configure.in:273: -1- AC_SUBST_TRACE([ac_aux_dir]) +m4trace:configure.in:273: -1- m4_pattern_allow([^ac_aux_dir$]) +m4trace:configure.in:275: -1- AC_CONFIG_FILES([Makefile src/Makefile]) +m4trace:configure.in:275: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments. +You should run autoupdate.], []) +m4trace:configure.in:275: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.in:275: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.in:275: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([LTLIBOBJS]) +m4trace:configure.in:275: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.in:275: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.in:275: -1- AC_SUBST([am__EXEEXT_TRUE]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) +m4trace:configure.in:275: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.in:275: -1- AC_SUBST([am__EXEEXT_FALSE]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) +m4trace:configure.in:275: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.in:275: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.in:275: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([top_builddir]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([top_build_prefix]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([srcdir]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([abs_srcdir]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([top_srcdir]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([abs_top_srcdir]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([builddir]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([abs_builddir]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([abs_top_builddir]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([INSTALL]) +m4trace:configure.in:275: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.in:275: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) diff --git a/coreseek/mmseg-3.2.14/bootstrap b/coreseek/mmseg-3.2.14/bootstrap new file mode 100755 index 0000000..bb99ac3 --- /dev/null +++ b/coreseek/mmseg-3.2.14/bootstrap @@ -0,0 +1,28 @@ +#! /bin/sh +# bootstrap -- Use this script to create generated files from the CVS dist +# Copyright (C) 2000 Gary V. Vaughan +# +# This program is free software; you can 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +## @start 1 +#! /bin/sh + +set -x +aclocal -I config +libtoolize --force --copy +autoheader +automake --add-missing --copy +autoconf +## @end 1 diff --git a/coreseek/mmseg-3.2.14/config-h.in b/coreseek/mmseg-3.2.14/config-h.in new file mode 100644 index 0000000..22313c4 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config-h.in @@ -0,0 +1,131 @@ +/* config-h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_ASSERT_H + +/* Define to 1 if you have the `basename' function. */ +#undef HAVE_BASENAME + +/* Define to 1 if you have the `bzero' function. */ +#undef HAVE_BZERO + +/* Define to 1 if you have the `calloc' function. */ +#undef HAVE_CALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `readline' library (-lreadline). */ +#undef HAVE_LIBREADLINE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the `strcspn' function. */ +#undef HAVE_STRCSPN + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strrchr' function. */ +#undef HAVE_STRRCHR + +/* Define to 1 if you have the `strsignal' function. */ +#undef HAVE_STRSIGNAL + +/* Define to 1 if you have the `strspn' function. */ +#undef HAVE_STRSPN + +/* Define if your system libraries have a sys_errlist variable. */ +#undef HAVE_SYS_ERRLIST + +/* Define if your system libraries have a sys_siglist variable. */ +#undef HAVE_SYS_SIGLIST + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_VARARGS_H + +/* Define to 1 if you have the `vfprintf' function. */ +#undef HAVE_VFPRINTF + +/* Define to 1 if you have the `waitpid' function. */ +#undef HAVE_WAITPID + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define to `unsigned int' if does not define. */ +#undef size_t diff --git a/coreseek/mmseg-3.2.14/config-h.in~ b/coreseek/mmseg-3.2.14/config-h.in~ new file mode 100755 index 0000000..de1226f --- /dev/null +++ b/coreseek/mmseg-3.2.14/config-h.in~ @@ -0,0 +1,124 @@ +/* config-h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_ASSERT_H + +/* Define to 1 if you have the `basename' function. */ +#undef HAVE_BASENAME + +/* Define to 1 if you have the `bzero' function. */ +#undef HAVE_BZERO + +/* Define to 1 if you have the `calloc' function. */ +#undef HAVE_CALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `readline' library (-lreadline). */ +#undef HAVE_LIBREADLINE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDARG_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the `strcspn' function. */ +#undef HAVE_STRCSPN + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strrchr' function. */ +#undef HAVE_STRRCHR + +/* Define to 1 if you have the `strsignal' function. */ +#undef HAVE_STRSIGNAL + +/* Define to 1 if you have the `strspn' function. */ +#undef HAVE_STRSPN + +/* Define if your system libraries have a sys_errlist variable. */ +#undef HAVE_SYS_ERRLIST + +/* Define if your system libraries have a sys_siglist variable. */ +#undef HAVE_SYS_SIGLIST + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_VARARGS_H + +/* Define to 1 if you have the `vfprintf' function. */ +#undef HAVE_VFPRINTF + +/* Define to 1 if you have the `waitpid' function. */ +#undef HAVE_WAITPID + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* 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 + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define to `unsigned' if does not define. */ +#undef size_t diff --git a/coreseek/mmseg-3.2.14/config.h b/coreseek/mmseg-3.2.14/config.h new file mode 100644 index 0000000..63db74c --- /dev/null +++ b/coreseek/mmseg-3.2.14/config.h @@ -0,0 +1,132 @@ +/* config.h. Generated from config-h.in by configure. */ +/* config-h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ASSERT_H 1 + +/* Define to 1 if you have the `basename' function. */ +#define HAVE_BASENAME 1 + +/* Define to 1 if you have the `bzero' function. */ +#define HAVE_BZERO 1 + +/* Define to 1 if you have the `calloc' function. */ +#define HAVE_CALLOC 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_ERRNO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `readline' library (-lreadline). */ +/* #undef HAVE_LIBREADLINE */ + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `memset' function. */ +/* #undef HAVE_MEMSET */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STDARG_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the `strchr' function. */ +#define HAVE_STRCHR 1 + +/* Define to 1 if you have the `strcspn' function. */ +#define HAVE_STRCSPN 1 + +/* Define to 1 if you have the `strerror' function. */ +#define HAVE_STRERROR 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the `strrchr' function. */ +#define HAVE_STRRCHR 1 + +/* Define to 1 if you have the `strsignal' function. */ +#define HAVE_STRSIGNAL 1 + +/* Define to 1 if you have the `strspn' function. */ +#define HAVE_STRSPN 1 + +/* Define if your system libraries have a sys_errlist variable. */ +#define HAVE_SYS_ERRLIST 1 + +/* Define if your system libraries have a sys_siglist variable. */ +#define HAVE_SYS_SIGLIST 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have that is POSIX.1 compatible. */ +#define HAVE_SYS_WAIT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_VARARGS_H */ + +/* Define to 1 if you have the `vfprintf' function. */ +#define HAVE_VFPRINTF 1 + +/* Define to 1 if you have the `waitpid' function. */ +#define HAVE_WAITPID 1 + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Name of package */ +#define PACKAGE "mmseg" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "0.7" + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ + +/* Define to `int' if does not define. */ +/* #undef pid_t */ + +/* Define to `unsigned int' if does not define. */ +/* #undef size_t */ diff --git a/coreseek/mmseg-3.2.14/config.log b/coreseek/mmseg-3.2.14/config.log new file mode 100644 index 0000000..77d79f4 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config.log @@ -0,0 +1,1054 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by configure, which was +generated by GNU Autoconf 2.68. Invocation command line was + + $ ./configure --prefix=/usr/local/mmseg3 + +## --------- ## +## Platform. ## +## --------- ## + +hostname = data-center +uname -m = x86_64 +uname -r = 3.2.0-100-generic +uname -s = Linux +uname -v = #140-Ubuntu SMP Tue Feb 23 02:23:59 UTC 2016 + +/usr/bin/uname -p = unknown +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = unknown +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /usr/local/sbin +PATH: /usr/local/bin +PATH: /usr/sbin +PATH: /usr/bin +PATH: /sbin +PATH: /bin +PATH: /opt/chef/embedded/bin +PATH: /opt/chef/embedded/bin +PATH: /var/lib/gems/1.8/bin + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:2410: checking for a BSD-compatible install +configure:2478: result: /usr/bin/install -c +configure:2489: checking whether build environment is sane +configure:2539: result: yes +configure:2567: WARNING: `missing' script is too old or missing +configure:2680: checking for a thread-safe mkdir -p +configure:2719: result: /bin/mkdir -p +configure:2732: checking for gawk +configure:2748: found /usr/bin/gawk +configure:2759: result: gawk +configure:2770: checking whether make sets $(MAKE) +configure:2792: result: yes +configure:2932: checking for g++ +configure:2948: found /usr/bin/g++ +configure:2959: result: g++ +configure:2986: checking for C++ compiler version +configure:2995: g++ --version >&5 +g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 +Copyright (C) 2011 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:3006: $? = 0 +configure:2995: g++ -v >&5 +Using built-in specs. +COLLECT_GCC=g++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) +configure:3006: $? = 0 +configure:2995: g++ -V >&5 +g++: error: unrecognized option '-V' +g++: fatal error: no input files +compilation terminated. +configure:3006: $? = 4 +configure:2995: g++ -qversion >&5 +g++: error: unrecognized option '-qversion' +g++: fatal error: no input files +compilation terminated. +configure:3006: $? = 4 +configure:3026: checking whether the C++ compiler works +configure:3048: g++ conftest.cpp >&5 +configure:3052: $? = 0 +configure:3100: result: yes +configure:3103: checking for C++ compiler default output file name +configure:3105: result: a.out +configure:3111: checking for suffix of executables +configure:3118: g++ -o conftest conftest.cpp >&5 +configure:3122: $? = 0 +configure:3144: result: +configure:3166: checking whether we are cross compiling +configure:3174: g++ -o conftest conftest.cpp >&5 +configure:3178: $? = 0 +configure:3185: ./conftest +configure:3189: $? = 0 +configure:3204: result: no +configure:3209: checking for suffix of object files +configure:3231: g++ -c conftest.cpp >&5 +configure:3235: $? = 0 +configure:3256: result: o +configure:3260: checking whether we are using the GNU C++ compiler +configure:3279: g++ -c conftest.cpp >&5 +configure:3279: $? = 0 +configure:3288: result: yes +configure:3297: checking whether g++ accepts -g +configure:3317: g++ -c -g conftest.cpp >&5 +configure:3317: $? = 0 +configure:3358: result: yes +configure:3392: checking for style of include used by make +configure:3420: result: GNU +configure:3446: checking dependency style of g++ +configure:3557: result: gcc3 +configure:3620: checking for gcc +configure:3636: found /usr/bin/gcc +configure:3647: result: gcc +configure:3876: checking for C compiler version +configure:3885: gcc --version >&5 +gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 +Copyright (C) 2011 Free Software Foundation, Inc. +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +configure:3896: $? = 0 +configure:3885: gcc -v >&5 +Using built-in specs. +COLLECT_GCC=gcc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6/lto-wrapper +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) +configure:3896: $? = 0 +configure:3885: gcc -V >&5 +gcc: error: unrecognized option '-V' +gcc: fatal error: no input files +compilation terminated. +configure:3896: $? = 4 +configure:3885: gcc -qversion >&5 +gcc: error: unrecognized option '-qversion' +gcc: fatal error: no input files +compilation terminated. +configure:3896: $? = 4 +configure:3900: checking whether we are using the GNU C compiler +configure:3919: gcc -c conftest.c >&5 +configure:3919: $? = 0 +configure:3928: result: yes +configure:3937: checking whether gcc accepts -g +configure:3957: gcc -c -g conftest.c >&5 +configure:3957: $? = 0 +configure:3998: result: yes +configure:4015: checking for gcc option to accept ISO C89 +configure:4079: gcc -c -g -O2 conftest.c >&5 +configure:4079: $? = 0 +configure:4092: result: none needed +configure:4114: checking dependency style of gcc +configure:4225: result: gcc3 +configure:4272: checking build system type +configure:4286: result: x86_64-unknown-linux-gnu +configure:4306: checking host system type +configure:4319: result: x86_64-unknown-linux-gnu +configure:4360: checking how to print strings +configure:4387: result: printf +configure:4408: checking for a sed that does not truncate output +configure:4472: result: /bin/sed +configure:4490: checking for grep that handles long lines and -e +configure:4548: result: /bin/grep +configure:4553: checking for egrep +configure:4615: result: /bin/grep -E +configure:4620: checking for fgrep +configure:4682: result: /bin/grep -F +configure:4717: checking for ld used by gcc +configure:4784: result: /usr/bin/ld +configure:4791: checking if the linker (/usr/bin/ld) is GNU ld +configure:4806: result: yes +configure:4818: checking for BSD- or MS-compatible name lister (nm) +configure:4867: result: /usr/bin/nm -B +configure:4997: checking the name lister (/usr/bin/nm -B) interface +configure:5004: gcc -c -g -O2 conftest.c >&5 +configure:5007: /usr/bin/nm -B "conftest.o" +configure:5010: output +0000000000000000 B some_variable +configure:5017: result: BSD nm +configure:5020: checking whether ln -s works +configure:5024: result: yes +configure:5032: checking the maximum length of command line arguments +configure:5162: result: 1572864 +configure:5179: checking whether the shell understands some XSI constructs +configure:5189: result: yes +configure:5193: checking whether the shell understands "+=" +configure:5199: result: yes +configure:5234: checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format +configure:5274: result: func_convert_file_noop +configure:5281: checking how to convert x86_64-unknown-linux-gnu file names to toolchain format +configure:5301: result: func_convert_file_noop +configure:5308: checking for /usr/bin/ld option to reload object files +configure:5315: result: -r +configure:5389: checking for objdump +configure:5405: found /usr/bin/objdump +configure:5416: result: objdump +configure:5448: checking how to recognize dependent libraries +configure:5650: result: pass_all +configure:5735: checking for dlltool +configure:5765: result: no +configure:5795: checking how to associate runtime and link libraries +configure:5822: result: printf %s\n +configure:5883: checking for ar +configure:5899: found /usr/bin/ar +configure:5910: result: ar +configure:5947: checking for archiver @FILE support +configure:5964: gcc -c -g -O2 conftest.c >&5 +configure:5964: $? = 0 +configure:5967: ar cru libconftest.a @conftest.lst >&5 +configure:5970: $? = 0 +configure:5975: ar cru libconftest.a @conftest.lst >&5 +ar: conftest.o: No such file or directory +configure:5978: $? = 1 +configure:5990: result: @ +configure:6048: checking for strip +configure:6064: found /usr/bin/strip +configure:6075: result: strip +configure:6147: checking for ranlib +configure:6163: found /usr/bin/ranlib +configure:6174: result: ranlib +configure:6276: checking command to parse /usr/bin/nm -B output from gcc object +configure:6396: gcc -c -g -O2 conftest.c >&5 +configure:6399: $? = 0 +configure:6403: /usr/bin/nm -B conftest.o \| sed -n -e 's/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p' | sed '/ __gnu_lto/d' \> conftest.nm +configure:6406: $? = 0 +configure:6472: gcc -o conftest -g -O2 conftest.c conftstm.o >&5 +configure:6475: $? = 0 +configure:6513: result: ok +configure:6550: checking for sysroot +configure:6580: result: no +configure:6657: gcc -c -g -O2 conftest.c >&5 +configure:6660: $? = 0 +configure:6836: checking for mt +configure:6852: found /bin/mt +configure:6863: result: mt +configure:6886: checking if mt is a manifest tool +configure:6892: mt '-?' +configure:6900: result: no +configure:7542: checking how to run the C preprocessor +configure:7573: gcc -E conftest.c +configure:7573: $? = 0 +configure:7587: gcc -E conftest.c +conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:7587: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "" +| #define PACKAGE_TARNAME "" +| #define PACKAGE_VERSION "" +| #define PACKAGE_STRING "" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE_URL "" +| #define PACKAGE "mmseg" +| #define VERSION "0.7" +| /* end confdefs.h. */ +| #include +configure:7612: result: gcc -E +configure:7632: gcc -E conftest.c +configure:7632: $? = 0 +configure:7646: gcc -E conftest.c +conftest.c:11:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:7646: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "" +| #define PACKAGE_TARNAME "" +| #define PACKAGE_VERSION "" +| #define PACKAGE_STRING "" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE_URL "" +| #define PACKAGE "mmseg" +| #define VERSION "0.7" +| /* end confdefs.h. */ +| #include +configure:7675: checking for ANSI C header files +configure:7695: gcc -c -g -O2 conftest.c >&5 +configure:7695: $? = 0 +configure:7768: gcc -o conftest -g -O2 conftest.c >&5 +configure:7768: $? = 0 +configure:7768: ./conftest +configure:7768: $? = 0 +configure:7779: result: yes +configure:7792: checking for sys/types.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7792: checking for sys/stat.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7792: checking for stdlib.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7792: checking for string.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7792: checking for memory.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7792: checking for strings.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7792: checking for inttypes.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7792: checking for stdint.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7792: checking for unistd.h +configure:7792: gcc -c -g -O2 conftest.c >&5 +configure:7792: $? = 0 +configure:7792: result: yes +configure:7806: checking for dlfcn.h +configure:7806: gcc -c -g -O2 conftest.c >&5 +configure:7806: $? = 0 +configure:7806: result: yes +configure:8023: checking for objdir +configure:8038: result: .libs +configure:8305: checking if gcc supports -fno-rtti -fno-exceptions +configure:8323: gcc -c -g -O2 -fno-rtti -fno-exceptions conftest.c >&5 +cc1: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for C [enabled by default] +configure:8327: $? = 0 +configure:8340: result: no +configure:8667: checking for gcc option to produce PIC +configure:8674: result: -fPIC -DPIC +configure:8682: checking if gcc PIC flag -fPIC -DPIC works +configure:8700: gcc -c -g -O2 -fPIC -DPIC -DPIC conftest.c >&5 +configure:8704: $? = 0 +configure:8717: result: yes +configure:8746: checking if gcc static flag -static works +configure:8774: result: yes +configure:8789: checking if gcc supports -c -o file.o +configure:8810: gcc -c -g -O2 -o out/conftest2.o conftest.c >&5 +configure:8814: $? = 0 +configure:8836: result: yes +configure:8844: checking if gcc supports -c -o file.o +configure:8891: result: yes +configure:8924: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +configure:10081: result: yes +configure:10118: checking whether -lc should be explicitly linked in +configure:10126: gcc -c -g -O2 conftest.c >&5 +configure:10129: $? = 0 +configure:10144: gcc -shared -fPIC -DPIC conftest.o -v -Wl,-soname -Wl,conftest -o conftest 2\>\&1 \| /bin/grep -lc \>/dev/null 2\>\&1 +configure:10147: $? = 0 +configure:10161: result: no +configure:10321: checking dynamic linker characteristics +configure:10832: gcc -o conftest -g -O2 -Wl,-rpath -Wl,/foo conftest.c >&5 +configure:10832: $? = 0 +configure:11066: result: GNU/Linux ld.so +configure:11173: checking how to hardcode library paths into programs +configure:11198: result: immediate +configure:11738: checking whether stripping libraries is possible +configure:11743: result: yes +configure:11778: checking if libtool supports shared libraries +configure:11780: result: yes +configure:11783: checking whether to build shared libraries +configure:11804: result: yes +configure:11807: checking whether to build static libraries +configure:11811: result: yes +configure:11834: checking how to run the C++ preprocessor +configure:11861: g++ -E conftest.cpp +configure:11861: $? = 0 +configure:11875: g++ -E conftest.cpp +conftest.cpp:23:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:11875: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "" +| #define PACKAGE_TARNAME "" +| #define PACKAGE_VERSION "" +| #define PACKAGE_STRING "" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE_URL "" +| #define PACKAGE "mmseg" +| #define VERSION "0.7" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| /* end confdefs.h. */ +| #include +configure:11900: result: g++ -E +configure:11920: g++ -E conftest.cpp +configure:11920: $? = 0 +configure:11934: g++ -E conftest.cpp +conftest.cpp:23:28: fatal error: ac_nonexistent.h: No such file or directory +compilation terminated. +configure:11934: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "" +| #define PACKAGE_TARNAME "" +| #define PACKAGE_VERSION "" +| #define PACKAGE_STRING "" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE_URL "" +| #define PACKAGE "mmseg" +| #define VERSION "0.7" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| /* end confdefs.h. */ +| #include +configure:12103: checking for ld used by g++ +configure:12170: result: /usr/bin/ld -m elf_x86_64 +configure:12177: checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld +configure:12192: result: yes +configure:12247: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +configure:13252: result: yes +configure:13288: g++ -c -g -O2 conftest.cpp >&5 +configure:13291: $? = 0 +configure:13811: checking for g++ option to produce PIC +configure:13818: result: -fPIC -DPIC +configure:13826: checking if g++ PIC flag -fPIC -DPIC works +configure:13844: g++ -c -g -O2 -fPIC -DPIC -DPIC conftest.cpp >&5 +configure:13848: $? = 0 +configure:13861: result: yes +configure:13884: checking if g++ static flag -static works +configure:13912: result: yes +configure:13924: checking if g++ supports -c -o file.o +configure:13945: g++ -c -g -O2 -o out/conftest2.o conftest.cpp >&5 +configure:13949: $? = 0 +configure:13971: result: yes +configure:13976: checking if g++ supports -c -o file.o +configure:14023: result: yes +configure:14053: checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries +configure:14092: result: yes +configure:14233: checking dynamic linker characteristics +configure:14912: result: GNU/Linux ld.so +configure:14965: checking how to hardcode library paths into programs +configure:14990: result: immediate +configure:15052: checking for ANSI C header files +configure:15156: result: yes +configure:15164: checking for sys/wait.h that is POSIX.1 compatible +configure:15190: gcc -c -g -O2 conftest.c >&5 +configure:15190: $? = 0 +configure:15197: result: yes +configure:15208: checking for stdlib.h +configure:15208: result: yes +configure:15208: checking for unistd.h +configure:15208: result: yes +configure:15208: checking errno.h usability +configure:15208: gcc -c -g -O2 conftest.c >&5 +configure:15208: $? = 0 +configure:15208: result: yes +configure:15208: checking errno.h presence +configure:15208: gcc -E conftest.c +configure:15208: $? = 0 +configure:15208: result: yes +configure:15208: checking for errno.h +configure:15208: result: yes +configure:15208: checking assert.h usability +configure:15208: gcc -c -g -O2 conftest.c >&5 +configure:15208: $? = 0 +configure:15208: result: yes +configure:15208: checking assert.h presence +configure:15208: gcc -E conftest.c +configure:15208: $? = 0 +configure:15208: result: yes +configure:15208: checking for assert.h +configure:15208: result: yes +configure:15221: checking for string.h +configure:15221: result: yes +configure:15271: checking stdarg.h usability +configure:15271: gcc -c -g -O2 conftest.c >&5 +configure:15271: $? = 0 +configure:15271: result: yes +configure:15271: checking stdarg.h presence +configure:15271: gcc -E conftest.c +configure:15271: $? = 0 +configure:15271: result: yes +configure:15271: checking for stdarg.h +configure:15271: result: yes +configure:15291: checking for an ANSI C-conforming const +configure:15356: gcc -c -g -O2 conftest.c >&5 +configure:15356: $? = 0 +configure:15363: result: yes +configure:15371: checking for pid_t +configure:15371: gcc -c -g -O2 conftest.c >&5 +configure:15371: $? = 0 +configure:15371: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:67:20: error: expected expression before ')' token +configure:15371: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "" +| #define PACKAGE_TARNAME "" +| #define PACKAGE_VERSION "" +| #define PACKAGE_STRING "" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE_URL "" +| #define PACKAGE "mmseg" +| #define VERSION "0.7" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_ASSERT_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_STDARG_H 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if (sizeof ((pid_t))) +| return 0; +| ; +| return 0; +| } +configure:15371: result: yes +configure:15382: checking for size_t +configure:15382: gcc -c -g -O2 conftest.c >&5 +configure:15382: $? = 0 +configure:15382: gcc -c -g -O2 conftest.c >&5 +conftest.c: In function 'main': +conftest.c:67:21: error: expected expression before ')' token +configure:15382: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "" +| #define PACKAGE_TARNAME "" +| #define PACKAGE_VERSION "" +| #define PACKAGE_STRING "" +| #define PACKAGE_BUGREPORT "" +| #define PACKAGE_URL "" +| #define PACKAGE "mmseg" +| #define VERSION "0.7" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_MEMORY_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_DLFCN_H 1 +| #define LT_OBJDIR ".libs/" +| #define STDC_HEADERS 1 +| #define HAVE_SYS_WAIT_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_ERRNO_H 1 +| #define HAVE_ASSERT_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_STDARG_H 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef STDC_HEADERS +| # include +| # include +| #else +| # ifdef HAVE_STDLIB_H +| # include +| # endif +| #endif +| #ifdef HAVE_STRING_H +| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H +| # include +| # endif +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main () +| { +| if (sizeof ((size_t))) +| return 0; +| ; +| return 0; +| } +configure:15382: result: yes +configure:15461: checking for sys_errlist +configure:15477: gcc -o conftest -g -O2 conftest.c >&5 +configure:15477: $? = 0 +configure:15485: result: yes +configure:15492: checking for sys_siglist +configure:15508: gcc -o conftest -g -O2 conftest.c >&5 +configure:15508: $? = 0 +configure:15516: result: yes +configure:15527: checking for bzero +configure:15527: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:56:6: warning: conflicting types for built-in function 'bzero' [enabled by default] +configure:15527: $? = 0 +configure:15527: result: yes +configure:15539: checking for calloc +configure:15539: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:57:6: warning: conflicting types for built-in function 'calloc' [enabled by default] +configure:15539: $? = 0 +configure:15539: result: yes +configure:15539: checking for strchr +configure:15539: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:58:6: warning: conflicting types for built-in function 'strchr' [enabled by default] +configure:15539: $? = 0 +configure:15539: result: yes +configure:15539: checking for strrchr +configure:15539: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:59:6: warning: conflicting types for built-in function 'strrchr' [enabled by default] +configure:15539: $? = 0 +configure:15539: result: yes +configure:15548: checking for basename +configure:15548: gcc -o conftest -g -O2 conftest.c >&5 +configure:15548: $? = 0 +configure:15548: result: yes +configure:15561: checking for strspn +configure:15561: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:61:6: warning: conflicting types for built-in function 'strspn' [enabled by default] +configure:15561: $? = 0 +configure:15561: result: yes +configure:15574: checking for strcspn +configure:15574: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:62:6: warning: conflicting types for built-in function 'strcspn' [enabled by default] +configure:15574: $? = 0 +configure:15574: result: yes +configure:15587: checking for strerror +configure:15587: gcc -o conftest -g -O2 conftest.c >&5 +configure:15587: $? = 0 +configure:15587: result: yes +configure:15600: checking for strsignal +configure:15600: gcc -o conftest -g -O2 conftest.c >&5 +configure:15600: $? = 0 +configure:15600: result: yes +configure:15613: checking for vfprintf +configure:15613: gcc -o conftest -g -O2 conftest.c >&5 +conftest.c:65:6: warning: conflicting types for built-in function 'vfprintf' [enabled by default] +configure:15613: $? = 0 +configure:15613: result: yes +configure:15626: checking for waitpid +configure:15626: gcc -o conftest -g -O2 conftest.c >&5 +configure:15626: $? = 0 +configure:15626: result: yes +configure:15806: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by config.status, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on data-center + +config.status:1203: creating Makefile +config.status:1203: creating src/Makefile +config.status:1203: creating config.h +config.status:1384: config.h is unchanged +config.status:1432: executing depfiles commands +config.status:1432: executing libtool commands +config.status:1432: executing default-1 commands +config.status:1432: executing default commands + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=x86_64-unknown-linux-gnu +ac_cv_c_compiler_gnu=yes +ac_cv_c_const=yes +ac_cv_cxx_compiler_gnu=yes +ac_cv_env_CCC_set= +ac_cv_env_CCC_value= +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_CXXCPP_set= +ac_cv_env_CXXCPP_value= +ac_cv_env_CXXFLAGS_set= +ac_cv_env_CXXFLAGS_value= +ac_cv_env_CXX_set= +ac_cv_env_CXX_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_func_basename=yes +ac_cv_func_bzero=yes +ac_cv_func_calloc=yes +ac_cv_func_strchr=yes +ac_cv_func_strcspn=yes +ac_cv_func_strerror=yes +ac_cv_func_strrchr=yes +ac_cv_func_strsignal=yes +ac_cv_func_strspn=yes +ac_cv_func_vfprintf=yes +ac_cv_func_waitpid=yes +ac_cv_header_assert_h=yes +ac_cv_header_dlfcn_h=yes +ac_cv_header_errno_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_memory_h=yes +ac_cv_header_stdarg_h=yes +ac_cv_header_stdc=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_sys_wait_h=yes +ac_cv_header_unistd_h=yes +ac_cv_host=x86_64-unknown-linux-gnu +ac_cv_objext=o +ac_cv_path_EGREP='/bin/grep -E' +ac_cv_path_FGREP='/bin/grep -F' +ac_cv_path_GREP=/bin/grep +ac_cv_path_SED=/bin/sed +ac_cv_path_install='/usr/bin/install -c' +ac_cv_path_mkdir=/bin/mkdir +ac_cv_prog_AWK=gawk +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_CXXCPP='g++ -E' +ac_cv_prog_ac_ct_AR=ar +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_CXX=g++ +ac_cv_prog_ac_ct_MANIFEST_TOOL=mt +ac_cv_prog_ac_ct_OBJDUMP=objdump +ac_cv_prog_ac_ct_RANLIB=ranlib +ac_cv_prog_ac_ct_STRIP=strip +ac_cv_prog_cc_c89= +ac_cv_prog_cc_g=yes +ac_cv_prog_cxx_g=yes +ac_cv_prog_make_make_set=yes +ac_cv_type_pid_t=yes +ac_cv_type_size_t=yes +am_cv_CC_dependencies_compiler_type=gcc3 +am_cv_CXX_dependencies_compiler_type=gcc3 +am_cv_prog_cc_stdc= +lt_cv_ar_at_file=@ +lt_cv_archive_cmds_need_lc=no +lt_cv_deplibs_check_method=pass_all +lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_ld_reload_flag=-r +lt_cv_nm_interface='BSD nm' +lt_cv_objdir=.libs +lt_cv_path_LD=/usr/bin/ld +lt_cv_path_LDCXX='/usr/bin/ld -m elf_x86_64' +lt_cv_path_NM='/usr/bin/nm -B' +lt_cv_path_mainfest_tool=no +lt_cv_prog_compiler_c_o=yes +lt_cv_prog_compiler_c_o_CXX=yes +lt_cv_prog_compiler_pic='-fPIC -DPIC' +lt_cv_prog_compiler_pic_CXX='-fPIC -DPIC' +lt_cv_prog_compiler_pic_works=yes +lt_cv_prog_compiler_pic_works_CXX=yes +lt_cv_prog_compiler_rtti_exceptions=no +lt_cv_prog_compiler_static_works=yes +lt_cv_prog_compiler_static_works_CXX=yes +lt_cv_prog_gnu_ld=yes +lt_cv_prog_gnu_ldcxx=yes +lt_cv_sharedlib_from_linklib_cmd='printf %s\n' +lt_cv_shlibpath_overrides_runpath=no +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_max_cmd_len=1572864 +lt_cv_to_host_file_cmd=func_convert_file_noop +lt_cv_to_tool_file_cmd=func_convert_file_noop +sic_cv_var_sys_errlist=yes +sic_cv_var_sys_siglist=yes + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ACLOCAL='aclocal-1.11' +AMDEPBACKSLASH='\' +AMDEP_FALSE='#' +AMDEP_TRUE='' +AMTAR='$${TAR-tar}' +AR='ar' +AUTOCONF='autoconf' +AUTOHEADER='autoheader' +AUTOMAKE='automake-1.11' +AWK='gawk' +CC='gcc' +CCDEPMODE='depmode=gcc3' +CFLAGS='-g -O2' +CPP='gcc -E' +CPPFLAGS='' +CXX='g++' +CXXCPP='g++ -E' +CXXDEPMODE='depmode=gcc3' +CXXFLAGS='-g -O2' +CYGPATH_W='echo' +DEFS='-DHAVE_CONFIG_H' +DEPDIR='.deps' +DLLTOOL='false' +DSYMUTIL='' +DUMPBIN='' +ECHO_C='' +ECHO_N='-n' +ECHO_T='' +EGREP='/bin/grep -E' +EXEEXT='' +FGREP='/bin/grep -F' +GREP='/bin/grep' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTALL_STRIP_PROGRAM='$(install_sh) -c -s' +LD='/usr/bin/ld -m elf_x86_64' +LDFLAGS='' +LIBOBJS=' ${LIBOBJDIR}$U.o' +LIBS='' +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +LIPO='' +LN_S='ln -s' +LTLIBOBJS=' ${LIBOBJDIR}$U.lo' +MAKEINFO='makeinfo' +MANIFEST_TOOL=':' +MKDIR_P='/bin/mkdir -p' +NM='/usr/bin/nm -B' +NMEDIT='' +OBJDUMP='objdump' +OBJEXT='o' +OTOOL64='' +OTOOL='' +PACKAGE='mmseg' +PACKAGE_BUGREPORT='' +PACKAGE_NAME='' +PACKAGE_STRING='' +PACKAGE_TARNAME='' +PACKAGE_URL='' +PACKAGE_VERSION='' +PATH_SEPARATOR=':' +RANLIB='ranlib' +SED='/bin/sed' +SET_MAKE='' +SHELL='/bin/bash' +STRIP='strip' +VERSION='0.7' +WITH_READLINE_FALSE='' +WITH_READLINE_TRUE='#' +ac_aux_dir='config' +ac_ct_AR='ar' +ac_ct_CC='gcc' +ac_ct_CXX='g++' +ac_ct_DUMPBIN='' +am__EXEEXT_FALSE='' +am__EXEEXT_TRUE='#' +am__fastdepCC_FALSE='#' +am__fastdepCC_TRUE='' +am__fastdepCXX_FALSE='#' +am__fastdepCXX_TRUE='' +am__include='include' +am__isrc='' +am__leading_dot='.' +am__nodep='_no' +am__quote='' +am__tar='$${TAR-tar} chof - "$$tardir"' +am__untar='$${TAR-tar} xf -' +bindir='${exec_prefix}/bin' +build='x86_64-unknown-linux-gnu' +build_alias='' +build_cpu='x86_64' +build_os='linux-gnu' +build_vendor='unknown' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host='x86_64-unknown-linux-gnu' +host_alias='' +host_cpu='x86_64' +host_os='linux-gnu' +host_vendor='unknown' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +install_sh='${SHELL} /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14/config/install-sh' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +mkdir_p='/bin/mkdir -p' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local/mmseg3' +program_transform_name='s,x,x,' +psdir='${docdir}' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +/* confdefs.h */ +#define PACKAGE_NAME "" +#define PACKAGE_TARNAME "" +#define PACKAGE_VERSION "" +#define PACKAGE_STRING "" +#define PACKAGE_BUGREPORT "" +#define PACKAGE_URL "" +#define PACKAGE "mmseg" +#define VERSION "0.7" +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_DLFCN_H 1 +#define LT_OBJDIR ".libs/" +#define STDC_HEADERS 1 +#define HAVE_SYS_WAIT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_ERRNO_H 1 +#define HAVE_ASSERT_H 1 +#define HAVE_STRING_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_SYS_ERRLIST 1 +#define HAVE_SYS_SIGLIST 1 +#define HAVE_BZERO 1 +#define HAVE_CALLOC 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_BASENAME 1 +#define HAVE_STRSPN 1 +#define HAVE_STRCSPN 1 +#define HAVE_STRERROR 1 +#define HAVE_STRSIGNAL 1 +#define HAVE_VFPRINTF 1 +#define HAVE_WAITPID 1 + +configure: exit 0 diff --git a/coreseek/mmseg-3.2.14/config.status b/coreseek/mmseg-3.2.14/config.status new file mode 100755 index 0000000..0b4bc9d --- /dev/null +++ b/coreseek/mmseg-3.2.14/config.status @@ -0,0 +1,2500 @@ +#! /bin/bash +# Generated by configure. +# 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-/bin/bash} +export SHELL +## -------------------- ## +## 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +# 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.68. 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` +" + +# Files that config.status was made for. +config_files=" Makefile src/Makefile" +config_headers=" config.h:config-h.in" +config_commands=" depfiles libtool default-1 default" + +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +ac_cs_config="'--prefix=/usr/local/mmseg3'" +ac_cs_version="\ +config.status +configured by ./configure, generated by GNU Autoconf 2.68, + with options \"$ac_cs_config\" + +Copyright (C) 2010 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='/home/coreseek/coreseek-4.1-beta/mmseg-3.2.14' +srcdir='.' +INSTALL='/usr/bin/install -c' +MKDIR_P='/bin/mkdir -p' +AWK='gawk' +test -n "$AWK" || AWK=awk +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + set X '/bin/bash' './configure' '--prefix=/usr/local/mmseg3' $ac_configure_extra_args --no-create --no-recursion + shift + $as_echo "running CONFIG_SHELL=/bin/bash $*" >&6 + CONFIG_SHELL='/bin/bash' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +# +# INIT-COMMANDS +# +AMDEP_TRUE="" ac_aux_dir="config" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +double_quote_subst='s/\(["`\\]\)/\\\1/g' +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' +macro_version='2.4.2' +macro_revision='1.3337' +enable_shared='yes' +enable_static='yes' +pic_mode='default' +enable_fast_install='yes' +SHELL='/bin/bash' +ECHO='printf %s\n' +PATH_SEPARATOR=':' +host_alias='' +host='x86_64-unknown-linux-gnu' +host_os='linux-gnu' +build_alias='' +build='x86_64-unknown-linux-gnu' +build_os='linux-gnu' +SED='/bin/sed' +Xsed='sed -e s/^X//' +GREP='/bin/grep' +EGREP='/bin/grep -E' +FGREP='/bin/grep -F' +LD='/usr/bin/ld -m elf_x86_64' +NM='/usr/bin/nm -B' +LN_S='ln -s' +max_cmd_len='1572864' +ac_objext='o' +exeext='' +lt_unset='unset' +lt_SP2NL='tr \040 \012' +lt_NL2SP='tr \015\012 \040\040' +lt_cv_to_host_file_cmd='func_convert_file_noop' +lt_cv_to_tool_file_cmd='func_convert_file_noop' +reload_flag=' -r' +reload_cmds='$LD$reload_flag -o $output$reload_objs' +OBJDUMP='objdump' +deplibs_check_method='pass_all' +file_magic_cmd='$MAGIC_CMD' +file_magic_glob='' +want_nocaseglob='no' +DLLTOOL='false' +sharedlib_from_linklib_cmd='printf %s\n' +AR='ar' +AR_FLAGS='cru' +archiver_list_spec='@' +STRIP='strip' +RANLIB='ranlib' +old_postinstall_cmds='chmod 644 $oldlib~$RANLIB $tool_oldlib' +old_postuninstall_cmds='' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' +lock_old_archive_extraction='no' +CC='gcc' +CFLAGS='-g -O2' +compiler='g++' +GCC='yes' +lt_cv_sys_global_symbol_pipe='sed -n -e '\''s/^.*[ ]\([ABCDGIRSTW][ABCDGIRSTW]*\)[ ][ ]*\([_A-Za-z][_A-Za-z0-9]*\)$/\1 \2 \2/p'\'' | sed '\''/ __gnu_lto/d'\''' +lt_cv_sys_global_symbol_to_cdecl='sed -n -e '\''s/^T .* \(.*\)$/extern int \1();/p'\'' -e '\''s/^[ABCDGIRSTW]* .* \(.*\)$/extern char \1;/p'\''' +lt_cv_sys_global_symbol_to_c_name_address='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"\2", (void *) \&\2},/p'\''' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='sed -n -e '\''s/^: \([^ ]*\)[ ]*$/ {\"\1\", (void *) 0},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \(lib[^ ]*\)$/ {"\2", (void *) \&\2},/p'\'' -e '\''s/^[ABCDGIRSTW]* \([^ ]*\) \([^ ]*\)$/ {"lib\2", (void *) \&\2},/p'\''' +nm_file_list_spec='@' +lt_sysroot='' +objdir='.libs' +MAGIC_CMD='file' +lt_prog_compiler_no_builtin_flag=' -fno-builtin' +lt_prog_compiler_pic=' -fPIC -DPIC' +lt_prog_compiler_wl='-Wl,' +lt_prog_compiler_static='-static' +lt_cv_prog_compiler_c_o='yes' +need_locks='no' +MANIFEST_TOOL=':' +DSYMUTIL='' +NMEDIT='' +LIPO='' +OTOOL='' +OTOOL64='' +libext='a' +shrext_cmds='.so' +extract_expsyms_cmds='' +archive_cmds_need_lc='no' +enable_shared_with_static_runtimes='no' +export_dynamic_flag_spec='${wl}--export-dynamic' +whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' +compiler_needs_object='no' +old_archive_from_new_cmds='' +old_archive_from_expsyms_cmds='' +archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' +archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' +module_cmds='' +module_expsym_cmds='' +with_gnu_ld='yes' +allow_undefined_flag='' +no_undefined_flag='' +hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' +hardcode_libdir_separator='' +hardcode_direct='no' +hardcode_direct_absolute='no' +hardcode_minus_L='no' +hardcode_shlibpath_var='unsupported' +hardcode_automatic='no' +inherit_rpath='no' +link_all_deplibs='no' +always_export_symbols='no' +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' +include_expsyms='' +prelink_cmds='' +postlink_cmds='' +file_list_spec='' +variables_saved_for_relink='PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH' +need_lib_prefix='no' +need_version='no' +version_type='linux' +runpath_var='LD_RUN_PATH' +shlibpath_var='LD_LIBRARY_PATH' +shlibpath_overrides_runpath='no' +libname_spec='lib$name' +library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' +soname_spec='${libname}${release}${shared_ext}$major' +install_override_mode='' +postinstall_cmds='' +postuninstall_cmds='' +finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' +finish_eval='' +hardcode_into_libs='yes' +sys_lib_search_path_spec='/usr/lib/gcc/x86_64-linux-gnu/4.6 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib ' +sys_lib_dlsearch_path_spec='/lib /usr/lib /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/mesa ' +hardcode_action='immediate' +enable_dlopen='unknown' +enable_dlopen_self='unknown' +enable_dlopen_self_static='unknown' +old_striplib='strip --strip-debug' +striplib='strip --strip-unneeded' +compiler_lib_search_dirs='' +predep_objects='' +postdep_objects='' +predeps='' +postdeps='' +compiler_lib_search_path='' +LD_CXX='/usr/bin/ld -m elf_x86_64' +reload_flag_CXX=' -r' +reload_cmds_CXX='$LD$reload_flag -o $output$reload_objs' +old_archive_cmds_CXX='$AR $AR_FLAGS $oldlib$oldobjs~$RANLIB $tool_oldlib' +compiler_CXX='g++' +GCC_CXX='yes' +lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' +lt_prog_compiler_pic_CXX=' -fPIC -DPIC' +lt_prog_compiler_wl_CXX='-Wl,' +lt_prog_compiler_static_CXX='-static' +lt_cv_prog_compiler_c_o_CXX='yes' +archive_cmds_need_lc_CXX='no' +enable_shared_with_static_runtimes_CXX='no' +export_dynamic_flag_spec_CXX='${wl}--export-dynamic' +whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' +compiler_needs_object_CXX='no' +old_archive_from_new_cmds_CXX='' +old_archive_from_expsyms_cmds_CXX='' +archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' +archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' +module_cmds_CXX='' +module_expsym_cmds_CXX='' +with_gnu_ld_CXX='yes' +allow_undefined_flag_CXX='' +no_undefined_flag_CXX='' +hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' +hardcode_libdir_separator_CXX='' +hardcode_direct_CXX='no' +hardcode_direct_absolute_CXX='no' +hardcode_minus_L_CXX='no' +hardcode_shlibpath_var_CXX='unsupported' +hardcode_automatic_CXX='no' +inherit_rpath_CXX='no' +link_all_deplibs_CXX='no' +always_export_symbols_CXX='no' +export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' +exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' +include_expsyms_CXX='' +prelink_cmds_CXX='' +postlink_cmds_CXX='' +file_list_spec_CXX='' +hardcode_action_CXX='immediate' +compiler_lib_search_dirs_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.6 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /usr/lib/gcc/x86_64-linux-gnu/4.6/../../..' +predep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginS.o' +postdep_objects_CXX='/usr/lib/gcc/x86_64-linux-gnu/4.6/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o' +predeps_CXX='' +postdeps_CXX='-lstdc++ -lm -lgcc_s -lc -lgcc_s' +compiler_lib_search_path_CXX='-L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../..' + +LTCC='gcc' +LTCFLAGS='-g -O2' +compiler='gcc' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL ECHO PATH_SEPARATOR SED GREP EGREP FGREP LD NM LN_S lt_SP2NL lt_NL2SP reload_flag OBJDUMP deplibs_check_method file_magic_cmd file_magic_glob want_nocaseglob DLLTOOL sharedlib_from_linklib_cmd AR AR_FLAGS archiver_list_spec STRIP RANLIB CC CFLAGS compiler lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl lt_cv_sys_global_symbol_to_c_name_address lt_cv_sys_global_symbol_to_c_name_address_lib_prefix nm_file_list_spec lt_prog_compiler_no_builtin_flag lt_prog_compiler_pic lt_prog_compiler_wl lt_prog_compiler_static lt_cv_prog_compiler_c_o need_locks MANIFEST_TOOL DSYMUTIL NMEDIT LIPO OTOOL OTOOL64 shrext_cmds export_dynamic_flag_spec whole_archive_flag_spec compiler_needs_object with_gnu_ld allow_undefined_flag no_undefined_flag hardcode_libdir_flag_spec hardcode_libdir_separator exclude_expsyms include_expsyms file_list_spec variables_saved_for_relink libname_spec library_names_spec soname_spec install_override_mode finish_eval old_striplib striplib compiler_lib_search_dirs predep_objects postdep_objects predeps postdeps compiler_lib_search_path LD_CXX reload_flag_CXX compiler_CXX lt_prog_compiler_no_builtin_flag_CXX lt_prog_compiler_pic_CXX lt_prog_compiler_wl_CXX lt_prog_compiler_static_CXX lt_cv_prog_compiler_c_o_CXX export_dynamic_flag_spec_CXX whole_archive_flag_spec_CXX compiler_needs_object_CXX with_gnu_ld_CXX allow_undefined_flag_CXX no_undefined_flag_CXX hardcode_libdir_flag_spec_CXX hardcode_libdir_separator_CXX exclude_expsyms_CXX include_expsyms_CXX file_list_spec_CXX compiler_lib_search_dirs_CXX predep_objects_CXX postdep_objects_CXX predeps_CXX postdeps_CXX compiler_lib_search_path_CXX; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED \"\$sed_quote_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds old_postinstall_cmds old_postuninstall_cmds old_archive_cmds extract_expsyms_cmds old_archive_from_new_cmds old_archive_from_expsyms_cmds archive_cmds archive_expsym_cmds module_cmds module_expsym_cmds export_symbols_cmds prelink_cmds postlink_cmds postinstall_cmds postuninstall_cmds finish_cmds sys_lib_search_path_spec sys_lib_dlsearch_path_spec reload_cmds_CXX old_archive_cmds_CXX old_archive_from_new_cmds_CXX old_archive_from_expsyms_cmds_CXX archive_cmds_CXX archive_expsym_cmds_CXX module_cmds_CXX module_expsym_cmds_CXX export_symbols_cmds_CXX prelink_cmds_CXX postlink_cmds_CXX; do + case `eval \\$ECHO \\""\\$$var"\\"` in + *[\\\`\"\$]*) + eval "lt_$var=\\\"\`\$ECHO \"\$$var\" | \$SED -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\$$var\\\"" + ;; + esac +done + +ac_aux_dir='config' +xsi_shell='yes' +lt_shell_append='yes' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='mmseg' + VERSION='0.7' + TIMESTAMP='' + RM='rm -f' + ofile='libtool' + + + + + + + srcdir=. + ac_cv_func_bzero=yes + ac_cv_func_memset= + ac_cv_func_strchr=yes + ac_cv_func_strrchr=yes +# @end 5 + ac_cv_func_basename=yes + ac_cv_func_strcspn=yes + ac_cv_func_strerror=yes + ac_cv_func_strsignal=yes + ac_cv_func_strspn=yes + ac_cv_func_vfprintf=yes + ac_cv_func_waitpid=yes + ac_cv_header_assert_h=yes + ac_cv_header_errno_h=yes + ac_cv_header_stdlib_h=yes + ac_cv_header_stdarg_h=yes + ac_cv_header_string_h=yes + ac_cv_header_strings_h=yes + ac_cv_header_sys_wait_h=yes + ac_cv_header_unistd_h=yes + ac_cv_header_varargs_h= +# @start 5 + + + +# 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:config-h.in" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && +S["am__EXEEXT_FALSE"]="" +S["am__EXEEXT_TRUE"]="#" +S["LTLIBOBJS"]=" ${LIBOBJDIR}$U.lo" +S["ac_aux_dir"]="config" +S["LIBOBJS"]=" ${LIBOBJDIR}$U.o" +S["WITH_READLINE_FALSE"]="" +S["WITH_READLINE_TRUE"]="#" +S["CXXCPP"]="g++ -E" +S["CPP"]="gcc -E" +S["OTOOL64"]="" +S["OTOOL"]="" +S["LIPO"]="" +S["NMEDIT"]="" +S["DSYMUTIL"]="" +S["MANIFEST_TOOL"]=":" +S["RANLIB"]="ranlib" +S["ac_ct_AR"]="ar" +S["AR"]="ar" +S["DLLTOOL"]="false" +S["OBJDUMP"]="objdump" +S["LN_S"]="ln -s" +S["NM"]="/usr/bin/nm -B" +S["ac_ct_DUMPBIN"]="" +S["DUMPBIN"]="" +S["LD"]="/usr/bin/ld -m elf_x86_64" +S["FGREP"]="/bin/grep -F" +S["EGREP"]="/bin/grep -E" +S["GREP"]="/bin/grep" +S["SED"]="/bin/sed" +S["host_os"]="linux-gnu" +S["host_vendor"]="unknown" +S["host_cpu"]="x86_64" +S["host"]="x86_64-unknown-linux-gnu" +S["build_os"]="linux-gnu" +S["build_vendor"]="unknown" +S["build_cpu"]="x86_64" +S["build"]="x86_64-unknown-linux-gnu" +S["LIBTOOL"]="$(SHELL) $(top_builddir)/libtool" +S["am__fastdepCC_FALSE"]="#" +S["am__fastdepCC_TRUE"]="" +S["CCDEPMODE"]="depmode=gcc3" +S["ac_ct_CC"]="gcc" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc" +S["am__fastdepCXX_FALSE"]="#" +S["am__fastdepCXX_TRUE"]="" +S["CXXDEPMODE"]="depmode=gcc3" +S["am__nodep"]="_no" +S["AMDEPBACKSLASH"]="\\" +S["AMDEP_FALSE"]="#" +S["AMDEP_TRUE"]="" +S["am__quote"]="" +S["am__include"]="include" +S["DEPDIR"]=".deps" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CXX"]="g++" +S["CPPFLAGS"]="" +S["LDFLAGS"]="" +S["CXXFLAGS"]="-g -O2" +S["CXX"]="g++" +S["am__untar"]="$${TAR-tar} xf -" +S["am__tar"]="$${TAR-tar} chof - \"$$tardir\"" +S["AMTAR"]="$${TAR-tar}" +S["am__leading_dot"]="." +S["SET_MAKE"]="" +S["AWK"]="gawk" +S["mkdir_p"]="/bin/mkdir -p" +S["MKDIR_P"]="/bin/mkdir -p" +S["INSTALL_STRIP_PROGRAM"]="$(install_sh) -c -s" +S["STRIP"]="strip" +S["install_sh"]="${SHELL} /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14/config/install-sh" +S["MAKEINFO"]="makeinfo" +S["AUTOHEADER"]="autoheader" +S["AUTOMAKE"]="automake-1.11" +S["AUTOCONF"]="autoconf" +S["ACLOCAL"]="aclocal-1.11" +S["VERSION"]="0.7" +S["PACKAGE"]="mmseg" +S["CYGPATH_W"]="echo" +S["am__isrc"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="" +S["ECHO_T"]="" +S["ECHO_N"]="-n" +S["ECHO_C"]="" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local/mmseg3" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="" +S["PACKAGE_BUGREPORT"]="" +S["PACKAGE_STRING"]="" +S["PACKAGE_VERSION"]="" +S["PACKAGE_TARNAME"]="" +S["PACKAGE_NAME"]="" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/bash" +_ACAWK +cat >>"$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +D["PACKAGE_NAME"]=" \"\"" +D["PACKAGE_TARNAME"]=" \"\"" +D["PACKAGE_VERSION"]=" \"\"" +D["PACKAGE_STRING"]=" \"\"" +D["PACKAGE_BUGREPORT"]=" \"\"" +D["PACKAGE_URL"]=" \"\"" +D["PACKAGE"]=" \"mmseg\"" +D["VERSION"]=" \"0.7\"" +D["STDC_HEADERS"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_MEMORY_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_DLFCN_H"]=" 1" +D["LT_OBJDIR"]=" \".libs/\"" +D["STDC_HEADERS"]=" 1" +D["HAVE_SYS_WAIT_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_ERRNO_H"]=" 1" +D["HAVE_ASSERT_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_STDARG_H"]=" 1" +D["HAVE_SYS_ERRLIST"]=" 1" +D["HAVE_SYS_SIGLIST"]=" 1" +D["HAVE_BZERO"]=" 1" +D["HAVE_CALLOC"]=" 1" +D["HAVE_STRCHR"]=" 1" +D["HAVE_STRRCHR"]=" 1" +D["HAVE_BASENAME"]=" 1" +D["HAVE_STRSPN"]=" 1" +D["HAVE_STRCSPN"]=" 1" +D["HAVE_STRERROR"]=" 1" +D["HAVE_STRSIGNAL"]=" 1" +D["HAVE_VFPRINTF"]=" 1" +D["HAVE_WAITPID"]=" 1" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\t (]|$)/ { + line = $ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + "default-1":C) + #if test -n "$CONFIG_FILES" && test -n "$CONFIG_HEADERS"; then + # # If both these vars are non-empty, then config.status wasn't run by + # # automake rules (which always set one or the other to empty). + # CONFIG_OTHER=${CONFIG_OTHER-sic/common.h} + #fi + case "$CONFIG_OTHER" in + *sic/common.h*) + outfile=sic/common.h + stampfile=sic/stamp-common + tmpfile=${outfile}T + dirname="sed s,^.*/,,g" + + echo creating $outfile + cat > $tmpfile << _EOF_ +/* -*- Mode: C -*- + * -------------------------------------------------------------------- + * DO NOT EDIT THIS FILE! It has been automatically generated + * from: configure.in and `echo $outfile|$dirname`.in + * on host: `(hostname || uname -n) 2>/dev/null | sed 1q` + * -------------------------------------------------------------------- + */ + +#ifndef SIC_COMMON_H +#define SIC_COMMON_H 1 + +#include +#include +_EOF_ + +# @end 5 +# @start 4 + # Add the code to include these headers only if autoconf has + # shown them to be present. + if test x$ac_cv_header_stdlib_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_unistd_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_sys_wait_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_errno_h = xyes; then + echo '#include ' >> $tmpfile + fi + cat >> $tmpfile << '_EOF_' +#ifndef errno +/* Some sytems #define this! */ +extern int errno; +#endif +_EOF_ + if test x$ac_cv_header_string_h = xyes; then + echo '#include ' >> $tmpfile + elif test x$ac_cv_header_strings_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_assert_h = xyes; then + cat >> $tmpfile << '_EOF_' + +#include +#define SIC_ASSERT assert + +_EOF_ + else + echo '#define SIC_ASSERT(expr) ((void) 0)' >> $tmpfile + fi +# @end 4 +# @start 3 + # Make a choice between the two different API's for variadic + # functions. In general, prefer stdarg.h over varargs.h, except + # where varargs.h has already been chosen by the parent package. + if test x$ac_cv_header_stdarg_h = xyes \ + && test x$ac_cv_header_varargs_h != xyes + then + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a, f) +#endif /* !VA_START */ + +_EOF_ + else + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a) +#endif /* !VA_START */ + +_EOF_ + fi + +# @end 3 +# @start 5 + if test x$ac_cv_func_bzero = xno && \ + test x$ac_cv_func_memset = xyes; then + cat >> $tmpfile << '_EOF_' +#define bzero(buf, bytes) ((void) memset (buf, 0, bytes)) +_EOF_ + fi + if test x$ac_cv_func_strchr = xno; then + echo '#define strchr index' >> $tmpfile + fi + if test x$ac_cv_func_strrchr = xno; then + echo '#define strrchr rindex' >> $tmpfile + fi + + # The ugly but portable cpp stuff comes from here + infile=$srcdir/sic/`echo $outfile | sed 's,.*/,,g;s,\..*$,,g'`-h.in + sed '/^##.*$/d' $infile >> $tmpfile + +# @end 5 + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + if test x$ac_cv_func_basename = xno; then + echo 'extern char *basename PARAMS((const char *path));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strcspn = xno; then + echo 'extern size_t strcspn PARAMS((const char *string, const char *accept));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strerror = xno; then + echo 'extern char *strerror PARAMS((int err));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strsignal = xno; then + echo 'extern char *strsignal PARAMS((int signo));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strspn = xno; then + echo 'extern size_t strspn PARAMS((const char *string, const char *reject));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_vfprintf = xno; then + echo 'extern int vfprintf PARAMS((FILE *file, const char *format, va_list ap));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_waitpid = xno; then + echo 'extern pid_t waitpid PARAMS((pid_t pid, int *pstatus, int options));' >> ${tmpfile}2 + fi + + if test -f ${tmpfile}2; then + cat >> $tmpfile << '_EOF_' + +BEGIN_C_DECLS +_EOF_ + cat ${tmpfile}2 >> $tmpfile + echo 'END_C_DECLS' >> $tmpfile + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + fi + + cat >> $tmpfile << '_EOF_' + +#endif /* !SIC_COMMON_H */ +_EOF_ + + if cmp -s $tmpfile $outfile; then + echo $outfile is unchanged + rm -f $tmpfile + else + mv $tmpfile $outfile + touch $stampfile + fi + ;; + esac +# @start 5 + ;; + "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h.in ;; + + esac +done # for ac_tag + + +as_fn_exit 0 diff --git a/coreseek/mmseg-3.2.14/config/.cvsignore b/coreseek/mmseg-3.2.14/config/.cvsignore new file mode 100755 index 0000000..ef837b1 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/.cvsignore @@ -0,0 +1,5 @@ +*.texi +*.la +*.lo +*.o +configure.scan diff --git a/coreseek/mmseg-3.2.14/config/apu-conf.m4 b/coreseek/mmseg-3.2.14/config/apu-conf.m4 new file mode 100755 index 0000000..b78b038 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/apu-conf.m4 @@ -0,0 +1,435 @@ +dnl -------------------------------------------------------- -*- autoconf -*- +dnl Copyright 2000-2005 The Apache Software Foundation or its licensors, as +dnl applicable. +dnl +dnl Licensed under the Apache License, Version 2.0 (the "License"); +dnl you may not use this file except in compliance with the License. +dnl You may obtain a copy of the License at +dnl +dnl http://www.apache.org/licenses/LICENSE-2.0 +dnl +dnl Unless required by applicable law or agreed to in writing, software +dnl distributed under the License is distributed on an "AS IS" BASIS, +dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +dnl See the License for the specific language governing permissions and +dnl limitations under the License. + + +dnl +dnl custom autoconf rules for APRUTIL +dnl + +dnl +dnl APU_FIND_APR: figure out where APR is located +dnl +AC_DEFUN([APU_FIND_APR], [ + + dnl use the find_apr.m4 script to locate APR. sets apr_found and apr_config + APR_FIND_APR(,,,[1]) + if test "$apr_found" = "no"; then + AC_MSG_ERROR(APR could not be located. Please use the --with-apr option.) + fi + + APR_BUILD_DIR="`$apr_config --installbuilddir`" + + dnl make APR_BUILD_DIR an absolute directory (we'll need it in the + dnl sub-projects in some cases) + APR_BUILD_DIR="`cd $APR_BUILD_DIR && pwd`" + + APR_INCLUDES="`$apr_config --includes`" + APR_LIBS="`$apr_config --link-libtool --libs`" + APR_SO_EXT="`$apr_config --apr-so-ext`" + APR_LIB_TARGET="`$apr_config --apr-lib-target`" + + AC_SUBST(APR_INCLUDES) + AC_SUBST(APR_LIBS) + AC_SUBST(APR_BUILD_DIR) +]) + + +dnl +dnl APU_TEST_EXPAT(directory): test if Expat is located in the specified dir +dnl +dnl if present: sets expat_include_dir, expat_libs, possibly expat_old +dnl +AC_DEFUN([APU_TEST_EXPAT], [ + AC_MSG_CHECKING(for Expat in ifelse($2,,$1,$2)) + + expat_libtool="" + + if test -r "$1/lib/expat.h.in"; then + dnl Expat 1.95.* distribution + expat_include_dir="$1/lib" + expat_ldflags="-L$1/lib" + expat_libs="-lexpat" + expat_libtool="$1/lib/libexpat.la" + elif test -r "$1/include/expat.h" -a \ + -r "$1/lib/libexpat.la"; then + dnl Expat 1.95.* installation (with libtool) + expat_include_dir="$1/include" + expat_ldflags="-L$1/lib" + expat_libs="-lexpat" + expat_libtool="$1/lib/libexpat.la" + elif test -r "$1/include/expat.h" -a \ + -r "$1/lib64/libexpat.la"; then + dnl Expat 1.95.* installation on certain 64-bit platforms (with libtool) + expat_include_dir="$1/include" + expat_ldflags="-L$1/lib64" + expat_libs="-lexpat" + expat_libtool="$1/lib64/libexpat.la" + elif test -r "$1/include/expat.h" -a \ + -r "$1/lib/libexpat.a"; then + dnl Expat 1.95.* installation (without libtool) + dnl FreeBSD textproc/expat2 + expat_include_dir="$1/include" + expat_ldflags="-L$1/lib" + expat_libs="-lexpat" + elif test -r "$1/xmlparse.h"; then + dnl maybe an expat-lite. use this dir for both includes and libs + expat_include_dir="$1" + expat_ldflags="-L$1" + expat_libs="-lexpat" + expat_libtool="$1/libexpat.la" + expat_old=yes + elif test -r "$1/include/xmlparse.h" -a \ + -r "$1/lib/libexpat.a"; then + dnl previously installed expat + expat_include_dir="$1/include" + expat_ldflags="-L$1/lib" + expat_libs="-lexpat" + expat_old=yes + elif test -r "$1/include/xml/xmlparse.h" -a \ + -r "$1/lib/xml/libexpat.a"; then + dnl previously installed expat + expat_include_dir="$1/include/xml" + expat_ldflags="-L$1/lib" + expat_libs="-lexpat" + expat_old=yes + elif test -r "$1/include/xmltok/xmlparse.h"; then + dnl Debian distribution + expat_include_dir="$1/include/xmltok" + expat_ldflags="-L$1/lib" + expat_libs="-lxmlparse -lxmltok" + expat_old=yes + elif test -r "$1/include/xml/xmlparse.h" -a \ + -r "$1/lib/libexpat.a"; then + dnl FreeBSD textproc/expat package + expat_include_dir="$1/include/xml" + expat_ldflags="-L$1/lib" + expat_libs="-lexpat" + expat_old=yes + elif test -r "$1/xmlparse/xmlparse.h"; then + dnl Expat 1.0 or 1.1 source directory + expat_include_dir="$1/xmlparse" + expat_ldflags="-L$1" + expat_libs="-lexpat" + expat_old=yes + fi + dnl ### test for installed Expat 1.95.* distros + + if test -n "$expat_include_dir"; then + dnl ### more info about what we found there? version? using .la? + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi +]) + + +dnl +dnl APU_FIND_EXPAT: figure out where EXPAT is located (or use bundled) +dnl +AC_DEFUN([APU_FIND_EXPAT], [ + +AC_ARG_WITH([expat], +[ --with-expat=DIR specify Expat location or 'builtin'], [ + if test "$withval" = "yes"; then + AC_MSG_ERROR([a directory must be specified for --with-expat]) + elif test "$withval" = "no"; then + AC_MSG_ERROR([Expat cannot be disabled (at this time)]) + elif test "$withval" = "builtin"; then + abs_expatdir="`cd $srcdir/xml/expat && pwd`" + if test -d $abs_expatdir/. -a ! -d xml/expat/.; then + $mkdir_p xml/expat + fi + APU_TEST_EXPAT($abs_expatdir, xml/expat) + else + abs_expatdir="`cd $withval && pwd`" + APU_TEST_EXPAT($abs_expatdir, $withval) + if test -z "$expat_include_dir"; then + AC_MSG_ERROR([Expat was not found (or recognized) in \"$withval\"]) + fi + fi +]) + +if test -z "$expat_include_dir"; then + for d in /usr /usr/local xml/expat-cvs xml/expat $srcdir/xml/expat ; do + APU_TEST_EXPAT($d) + if test -n "$expat_include_dir"; then + dnl For /usr installs of expat, we can't specify -L/usr/lib + if test "$d" = "/usr"; then + expat_ldflags="" + fi + break + fi + done +fi +if test -z "$expat_include_dir"; then + AC_MSG_ERROR([could not locate Expat. use --with-expat]) +fi + +dnl If this expat doesn't use libtool natively, we'll mimic it for our +dnl dependency library generation. +if test -z "$expat_libtool"; then + expat_libtool="$expat_ldflags $expat_libs" +fi + +if test -n "$expat_old"; then + AC_DEFINE(APR_HAVE_OLD_EXPAT, 1, [define if Expat 1.0 or 1.1 was found]) +fi + +dnl special-case the bundled distribution (use absolute dirs) +if test "$expat_include_dir" = "xml/expat/lib" -o "$expat_include_dir" = "xml/expat-cvs/lib"; then + bundled_subdir="`echo $expat_include_dir | sed -e 's%/lib%%'`" + APR_SUBDIR_CONFIG($bundled_subdir, [--prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir]) + expat_include_dir=$top_builddir/$bundled_subdir/lib + expat_ldflags="-L$top_builddir/$bundled_subdir/lib" + expat_libs="-lexpat" + expat_libtool=$top_builddir/$bundled_subdir/lib/libexpat.la + APR_XML_SUBDIRS="`echo $bundled_subdir | sed -e 's%xml/%%'`" + APR_ADDTO(APRUTIL_EXPORT_LIBS, [$expat_libtool]) +else +if test "$expat_include_dir" = "$abs_srcdir/xml/expat/include" -o "$expat_include_dir" = "$abs_srcdir/xml/expat/lib"; then + dnl This is a bit of a hack. This only works because we know that + dnl we are working with the bundled version of the software. + bundled_subdir="xml/expat" + APR_SUBDIR_CONFIG($bundled_subdir, [--prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir]) + expat_include_dir=$top_builddir/$bundled_subdir/lib + expat_ldflags="-L$top_builddir/$bundled_subdir/lib" + expat_libs="-lexpat" + expat_libtool=$top_builddir/$bundled_subdir/lib/libexpat.la + APR_XML_SUBDIRS="`echo $bundled_subdir | sed -e 's%xml/%%'`" + APR_ADDTO(APRUTIL_EXPORT_LIBS, [$expat_libtool]) +else + APR_ADDTO(APRUTIL_EXPORT_LIBS, [$expat_libs]) +fi +fi +APR_XML_DIR=$bundled_subdir +APR_XML_EXPAT_OLD=$expat_old +AC_SUBST(APR_XML_SUBDIRS) +AC_SUBST(APR_XML_DIR) +AC_SUBST(APR_XML_EXPAT_OLD) + +if test "$expat_include_dir" != "/usr/include"; then + APR_ADDTO(APRUTIL_INCLUDES, [-I$expat_include_dir]) +fi +APR_ADDTO(APRUTIL_LDFLAGS, [$expat_ldflags]) +APR_ADDTO(APRUTIL_LIBS, [$expat_libtool]) +]) + + +dnl +dnl Find a particular LDAP library +dnl +AC_DEFUN([APU_FIND_LDAPLIB], [ + if test ${apu_has_ldap} != "1"; then + ldaplib=$1 + extralib=$2 + unset ac_cv_lib_${ldaplib}_ldap_init + unset ac_cv_lib_${ldaplib}___ldap_init + AC_CHECK_LIB(${ldaplib}, ldap_init, + [ + APR_ADDTO(APRUTIL_EXPORT_LIBS,[-l${ldaplib} ${extralib}]) + APR_ADDTO(APRUTIL_LIBS,[-l${ldaplib} ${extralib}]) + AC_CHECK_LIB(${ldaplib}, ldapssl_client_init, apu_has_ldapssl_client_init="1", , ${extralib}) + AC_CHECK_LIB(${ldaplib}, ldapssl_client_deinit, apu_has_ldapssl_client_deinit="1", , ${extralib}) + AC_CHECK_LIB(${ldaplib}, ldapssl_add_trusted_cert, apu_has_ldapssl_add_trusted_cert="1", , ${extralib}) + AC_CHECK_LIB(${ldaplib}, ldap_start_tls_s, apu_has_ldap_start_tls_s="1", , ${extralib}) + AC_CHECK_LIB(${ldaplib}, ldap_sslinit, apu_has_ldap_sslinit="1", , ${extralib}) + AC_CHECK_LIB(${ldaplib}, ldapssl_init, apu_has_ldapssl_init="1", , ${extralib}) + AC_CHECK_LIB(${ldaplib}, ldapssl_install_routines, apu_has_ldapssl_install_routines="1", , ${extralib}) + apu_has_ldap="1"; + ], , ${extralib}) + fi +]) + + +dnl +dnl APU_FIND_LDAP: figure out where LDAP is located +dnl +AC_DEFUN([APU_FIND_LDAP], [ + +echo $ac_n "${nl}checking for ldap support..." + +apu_has_ldap="0"; +apu_has_ldapssl_client_init="0" +apu_has_ldapssl_client_deinit="0" +apu_has_ldapssl_add_trusted_cert="0" +apu_has_ldap_start_tls_s="0" +apu_has_ldapssl_init="0" +apu_has_ldap_sslinit="0" +apu_has_ldapssl_install_routines="0" +apu_has_ldap_openldap="0" +apu_has_ldap_solaris="0" +apu_has_ldap_novell="0" +apu_has_ldap_microsoft="0" +apu_has_ldap_netscape="0" +apu_has_ldap_mozilla="0" +apu_has_ldap_other="0" + +AC_ARG_WITH(ldap-include,[ --with-ldap-include=path path to ldap include files with trailing slash]) +AC_ARG_WITH(ldap-lib,[ --with-ldap-lib=path path to ldap lib file]) +AC_ARG_WITH(ldap,[ --with-ldap=library ldap library to use], + [ + save_cppflags="$CPPFLAGS" + save_ldflags="$LDFLAGS" + save_libs="$LIBS" + if test -n "$with_ldap_include"; then + CPPFLAGS="$CPPFLAGS -I$with_ldap_include" + APR_ADDTO(APRUTIL_INCLUDES, [-I$with_ldap_include]) + fi + if test -n "$with_ldap_lib"; then + LDFLAGS="$LDFLAGS -L$with_ldap_lib" + APR_ADDTO(APRUTIL_LDFLAGS, [-L$with_ldap_lib]) + fi + + LIBLDAP="$withval" + if test "$LIBLDAP" = "yes"; then +dnl The iPlanet C SDK 5.0 is as yet untested... + APU_FIND_LDAPLIB("ldap50", "-lnspr4 -lplc4 -lplds4 -liutil50 -llber50 -lldif50 -lnss3 -lprldap50 -lssl3 -lssldap50") + APU_FIND_LDAPLIB("ldapssl41", "-lnspr3 -lplc3 -lplds3") + APU_FIND_LDAPLIB("ldapssl40") + APU_FIND_LDAPLIB("ldapssl30") + APU_FIND_LDAPLIB("ldapssl20") + APU_FIND_LDAPLIB("ldapsdk", "-lldapx -lldapssl -lldapgss -lgssapi_krb5") + APU_FIND_LDAPLIB("ldapsdk", "-lldapx -lldapssl -lldapgss -lgss -lresolv -lsocket") + APU_FIND_LDAPLIB("ldap", "-llber") + APU_FIND_LDAPLIB("ldap", "-llber -lresolv") + APU_FIND_LDAPLIB("ldap", "-llber -lresolv -lsocket -lnsl") + APU_FIND_LDAPLIB("ldap", "-ldl -lpthread") + else + APU_FIND_LDAPLIB($LIBLDAP) + APU_FIND_LDAPLIB($LIBLDAP, "-lresolv") + APU_FIND_LDAPLIB($LIBLDAP, "-lresolv -lsocket -lnsl") + APU_FIND_LDAPLIB($LIBLDAP, "-ldl -lpthread") + fi + + test ${apu_has_ldap} != "1" && AC_MSG_ERROR(could not find an LDAP library) + AC_CHECK_LIB(lber, ber_init) + + AC_CHECK_HEADERS(lber.h, lber_h=["#include "]) + + # Solaris has a problem in which prevents it from + # being included by itself. Check for manually, + # including lber.h first. + AC_CACHE_CHECK([for ldap.h], [apr_cv_hdr_ldap_h], + [AC_TRY_CPP( + [#ifdef HAVE_LBER_H + #include + #endif + #include + ], [apr_cv_hdr_ldap_h=yes], [apr_cv_hdr_ldap_h=no])]) + if test "$apr_cv_hdr_ldap_h" = "yes"; then + ldap_h=["#include "] + AC_DEFINE([HAVE_LDAP_H], 1, [Defined if ldap.h is present]) + fi + + AC_CHECK_HEADERS(ldap_ssl.h, ldap_ssl_h=["#include "]) + + if test "$apr_cv_hdr_ldap_h" = "yes"; then + AC_CACHE_CHECK([for LDAP toolkit], + [apr_cv_ldap_toolkit], [ + if test "x$apr_cv_ldap_toolkit" = "x"; then + AC_EGREP_CPP([OpenLDAP], [$lber_h + $ldap_h + LDAP_VENDOR_NAME], [apu_has_ldap_openldap="1" + apr_cv_ldap_toolkit="OpenLDAP"]) + fi + if test "x$apr_cv_ldap_toolkit" = "x"; then + AC_EGREP_CPP([Sun Microsystems Inc.], [$lber_h + $ldap_h + LDAP_VENDOR_NAME], [apu_has_ldap_solaris="1" + apr_cv_ldap_toolkit="Solaris"]) + fi + if test "x$apr_cv_ldap_toolkit" = "x"; then + AC_EGREP_CPP([Novell], [$lber_h + $ldap_h + LDAP_VENDOR_NAME], [apu_has_ldap_novell="1" + apr_cv_ldap_toolkit="Novell"]) + fi + if test "x$apr_cv_ldap_toolkit" = "x"; then + AC_EGREP_CPP([Microsoft Corporation.], [$lber_h + $ldap_h + LDAP_VENDOR_NAME], [apu_has_ldap_microsoft="1" + apr_cv_ldap_toolkit="Microsoft"]) + fi + if test "x$apr_cv_ldap_toolkit" = "x"; then + AC_EGREP_CPP([Netscape Communications Corp.], [$lber_h + $ldap_h + LDAP_VENDOR_NAME], [apu_has_ldap_netscape="1" + apr_cv_ldap_toolkit="Netscape"]) + fi + if test "x$apr_cv_ldap_toolkit" = "x"; then + AC_EGREP_CPP([mozilla.org], [$lber_h + $ldap_h + LDAP_VENDOR_NAME], [apu_has_ldap_mozilla="1" + apr_cv_ldap_toolkit="Mozilla"]) + fi + if test "x$apr_cv_ldap_toolkit" = "x"; then + apu_has_ldap_other="1" + apr_cv_ldap_toolkit="unknown" + fi + ]) + fi + + CPPFLAGS=$save_cppflags + LDFLAGS=$save_ldflags + LIBS=$save_libs + ]) + +AC_SUBST(ldap_h) +AC_SUBST(lber_h) +AC_SUBST(ldap_ssl_h) +AC_SUBST(apu_has_ldapssl_client_init) +AC_SUBST(apu_has_ldapssl_client_deinit) +AC_SUBST(apu_has_ldapssl_add_trusted_cert) +AC_SUBST(apu_has_ldap_start_tls_s) +AC_SUBST(apu_has_ldapssl_init) +AC_SUBST(apu_has_ldap_sslinit) +AC_SUBST(apu_has_ldapssl_install_routines) +AC_SUBST(apu_has_ldap) +AC_SUBST(apu_has_ldap_openldap) +AC_SUBST(apu_has_ldap_solaris) +AC_SUBST(apu_has_ldap_novell) +AC_SUBST(apu_has_ldap_microsoft) +AC_SUBST(apu_has_ldap_netscape) +AC_SUBST(apu_has_ldap_mozilla) +AC_SUBST(apu_has_ldap_other) + +]) + +dnl +dnl APU_CHECK_CRYPT_R_STYLE +dnl +dnl Decide which of a couple of flavors of crypt_r() is necessary for +dnl this platform. +dnl +AC_DEFUN([APU_CHECK_CRYPT_R_STYLE], [ + +AC_CACHE_CHECK([style of crypt_r], apr_cv_crypt_r_style, +[AC_TRY_COMPILE([#include ], + [CRYPTD buffer; + crypt_r("passwd", "hash", &buffer);], + [apr_cv_crypt_r_style=cryptd], + [AC_TRY_COMPILE([#include ], + [struct crypt_data buffer; + crypt_r("passwd", "hash", &buffer);], + [apr_cv_crypt_r_style=struct_crypt_data], + [apr_cv_crypt_r_style=none])])]) + +if test "$apr_cv_crypt_r_style" = "cryptd"; then + AC_DEFINE(CRYPT_R_CRYPTD, 1, [Define if crypt_r has uses CRYPTD]) +elif test "$apr_cv_crypt_r_style" = "struct_crypt_data"; then + AC_DEFINE(CRYPT_R_STRUCT_CRYPT_DATA, 1, [Define if crypt_r uses struct crypt_data]) +fi +]) diff --git a/coreseek/mmseg-3.2.14/config/apu-hints.m4 b/coreseek/mmseg-3.2.14/config/apu-hints.m4 new file mode 100755 index 0000000..20878d3 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/apu-hints.m4 @@ -0,0 +1,61 @@ +dnl -------------------------------------------------------- -*- autoconf -*- +dnl Copyright 2003-2005 The Apache Software Foundation or its licensors, as +dnl applicable. +dnl +dnl Licensed under the Apache License, Version 2.0 (the "License"); +dnl you may not use this file except in compliance with the License. +dnl You may obtain a copy of the License at +dnl +dnl http://www.apache.org/licenses/LICENSE-2.0 +dnl +dnl Unless required by applicable law or agreed to in writing, software +dnl distributed under the License is distributed on an "AS IS" BASIS, +dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +dnl See the License for the specific language governing permissions and +dnl limitations under the License. + +dnl ----------------------------------------------------------------- +dnl apu-hints.m4: apr-util's autoconf macros for platform-specific hints +dnl +dnl We preload various configure settings depending +dnl on previously obtained platform knowledge. +dnl We allow all settings to be overridden from +dnl the command-line. + +dnl +dnl APU_PRELOAD +dnl +dnl Preload various build parameters based on outside knowledge. +dnl +AC_DEFUN([APU_PRELOAD], [ +if test "x$apu_preload_done" != "xyes" ; then + apu_preload_done="yes" + + echo "Applying apr-util hints file rules for $host" + + case "$host" in + *-dec-osf*) + APR_SETIFNULL(apu_crypt_threadsafe, [1]) + ;; + *-hp-hpux11.*) + APR_SETIFNULL(apu_crypt_threadsafe, [1]) + ;; + *-ibm-aix4*|*-ibm-aix5.1*) + APR_SETIFNULL(apu_iconv_inbuf_const, [1]) + ;; + *-ibm-os390) + APR_SETIFNULL(apu_crypt_threadsafe, [1]) + ;; + *-solaris2*) + APR_SETIFNULL(apu_iconv_inbuf_const, [1]) + APR_SETIFNULL(apu_crypt_threadsafe, [1]) + ;; + *-sco3.2v5*) + APR_SETIFNULL(apu_db_xtra_libs, [-lsocket]) + ;; + esac + +fi +]) + + diff --git a/coreseek/mmseg-3.2.14/config/config.guess b/coreseek/mmseg-3.2.14/config/config.guess new file mode 100755 index 0000000..2fc3acc --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/config.guess @@ -0,0 +1,1411 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-06-17' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 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. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +## for Red Hat Linux +if test -f /etc/redhat-release ; then + VENDOR=redhat ; +else + VENDOR= ; +fi + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha*:OpenVMS:*:*) + echo alpha-hp-vms + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*|*:GNU/FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR:-unknown}-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-${VENDOR:-unknown}-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-${VENDOR:-unknown}-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-${VENDOR:-ibm}-linux-gnu + exit 0 ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-${VENDOR:-unknown}-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR:-pc}-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +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` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/coreseek/mmseg-3.2.14/config/config.sub b/coreseek/mmseg-3.2.14/config/config.sub new file mode 100755 index 0000000..6b2ff9f --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/config.sub @@ -0,0 +1,1500 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-06-18' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | s390 | s390x \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | s390-* | s390x-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/coreseek/mmseg-3.2.14/config/depcomp b/coreseek/mmseg-3.2.14/config/depcomp new file mode 100755 index 0000000..04701da --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/depcomp @@ -0,0 +1,530 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2005-07-09.11 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 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. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mecanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/coreseek/mmseg-3.2.14/config/find_apr.m4 b/coreseek/mmseg-3.2.14/config/find_apr.m4 new file mode 100755 index 0000000..117fb06 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/find_apr.m4 @@ -0,0 +1,166 @@ +dnl -------------------------------------------------------- -*- autoconf -*- +dnl Copyright 2000-2005 The Apache Software Foundation +dnl +dnl Licensed under the Apache License, Version 2.0 (the "License"); +dnl you may not use this file except in compliance with the License. +dnl You may obtain a copy of the License at +dnl +dnl http://www.apache.org/licenses/LICENSE-2.0 +dnl +dnl Unless required by applicable law or agreed to in writing, software +dnl distributed under the License is distributed on an "AS IS" BASIS, +dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +dnl See the License for the specific language governing permissions and +dnl limitations under the License. + +dnl +dnl find_apr.m4 : locate the APR include files and libraries +dnl +dnl This macro file can be used by applications to find and use the APR +dnl library. It provides a standardized mechanism for using APR. It supports +dnl embedding APR into the application source, or locating an installed +dnl copy of APR. +dnl +dnl APR_FIND_APR(srcdir, builddir, implicit-install-check, acceptable-majors) +dnl +dnl where srcdir is the location of the bundled APR source directory, or +dnl empty if source is not bundled. +dnl +dnl where builddir is the location where the bundled APR will will be built, +dnl or empty if the build will occur in the srcdir. +dnl +dnl where implicit-install-check set to 1 indicates if there is no +dnl --with-apr option specified, we will look for installed copies. +dnl +dnl where acceptable-majors is a space separated list of acceptable major +dnl version numbers. Often only a single major version will be acceptable. +dnl If multiple versions are specified, and --with-apr=PREFIX or the +dnl implicit installed search are used, then the first (leftmost) version +dnl in the list that is found will be used. Currently defaults to [0 1]. +dnl +dnl Sets the following variables on exit: +dnl +dnl apr_found : "yes", "no", "reconfig" +dnl +dnl apr_config : If the apr-config tool exists, this refers to it. If +dnl apr_found is "reconfig", then the bundled directory +dnl should be reconfigured *before* using apr_config. +dnl +dnl Note: this macro file assumes that apr-config has been installed; it +dnl is normally considered a required part of an APR installation. +dnl +dnl If a bundled source directory is available and needs to be (re)configured, +dnl then apr_found is set to "reconfig". The caller should reconfigure the +dnl (passed-in) source directory, placing the result in the build directory, +dnl as appropriate. +dnl +dnl If apr_found is "yes" or "reconfig", then the caller should use the +dnl value of apr_config to fetch any necessary build/link information. +dnl + +AC_DEFUN([APR_FIND_APR], [ + apr_found="no" + + if test "$target_os" = "os2-emx"; then + # Scripts don't pass test -x on OS/2 + TEST_X="test -f" + else + TEST_X="test -x" + fi + + ifelse([$4], [], [ + ifdef(AC_WARNING,AC_WARNING([$0: missing argument 4 (acceptable-majors): Defaulting to APR 0.x then APR 1.x])) + acceptable_majors="0 1"], + [acceptable_majors="$4"]) + + apr_temp_acceptable_apr_config="" + for apr_temp_major in $acceptable_majors + do + case $apr_temp_major in + 0) + apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config apr-config" + ;; + *) + apr_temp_acceptable_apr_config="$apr_temp_acceptable_apr_config apr-$apr_temp_major-config" + ;; + esac + done + + AC_MSG_CHECKING(for APR) + AC_ARG_WITH(apr, + [ --with-apr=PATH prefix for installed APR, path to APR build tree, + or the full path to apr-config], + [ + if test "$withval" = "no" || test "$withval" = "yes"; then + AC_MSG_ERROR([--with-apr requires a directory or file to be provided]) + fi + + for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config + do + for lookdir in "$withval/bin" "$withval" + do + if $TEST_X "$lookdir/$apr_temp_apr_config_file"; then + apr_found="yes" + apr_config="$lookdir/$apr_temp_apr_config_file" + break 2 + fi + done + done + + if test "$apr_found" != "yes" && $TEST_X "$withval" && $withval --help > /dev/null 2>&1 ; then + apr_found="yes" + apr_config="$withval" + fi + + dnl if --with-apr is used, it is a fatal error for its argument + dnl to be invalid + if test "$apr_found" != "yes"; then + AC_MSG_ERROR([the --with-apr parameter is incorrect. It must specify an install prefix, a build directory, or an apr-config file.]) + fi + ],[ + dnl If we allow installed copies, check those before using bundled copy. + if test -n "$3" && test "$3" = "1"; then + for apr_temp_apr_config_file in $apr_temp_acceptable_apr_config + do + if $apr_temp_apr_config_file --help > /dev/null 2>&1 ; then + apr_found="yes" + apr_config="$apr_temp_apr_config_file" + break + else + dnl look in some standard places + for lookdir in /usr /usr/local /usr/local/apr /opt/apr /usr/local/apache2; do + if $TEST_X "$lookdir/bin/$apr_temp_apr_config_file"; then + apr_found="yes" + apr_config="$lookdir/bin/$apr_temp_apr_config_file" + break 2 + fi + done + fi + done + fi + dnl if we have not found anything yet and have bundled source, use that + if test "$apr_found" = "no" && test -d "$1"; then + apr_temp_abs_srcdir="`cd $1 && pwd`" + apr_found="reconfig" + apr_bundled_major="`sed -n '/#define.*APR_MAJOR_VERSION/s/^[^0-9]*\([0-9]*\).*$/\1/p' \"$1/include/apr_version.h\"`" + case $apr_bundled_major in + "") + AC_MSG_ERROR([failed to find major version of bundled APR]) + ;; + 0) + apr_temp_apr_config_file="apr-config" + ;; + *) + apr_temp_apr_config_file="apr-$apr_bundled_major-config" + ;; + esac + if test -n "$2"; then + apr_config="$2/$apr_temp_apr_config_file" + else + apr_config="$1/$apr_temp_apr_config_file" + fi + fi + ]) + + AC_MSG_RESULT($apr_found) +]) diff --git a/coreseek/mmseg-3.2.14/config/install-sh b/coreseek/mmseg-3.2.14/config/install-sh new file mode 100755 index 0000000..d4744f0 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/install-sh @@ -0,0 +1,269 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/coreseek/mmseg-3.2.14/config/ltmain.sh b/coreseek/mmseg-3.2.14/config/ltmain.sh new file mode 100644 index 0000000..c2852d8 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/ltmain.sh @@ -0,0 +1,9661 @@ + +# libtool (GNU libtool) 2.4.2 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --no-warn don't display warning messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.2 Debian-2.4.2-1ubuntu1" +TIMESTAMP="" +package_revision=1.3337 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_warning=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +func_append preserve_args " $opt" + ;; + --no-warning|--no-warn) + opt_warning=false +func_append preserve_args " $opt" + ;; + --no-verbose) + opt_verbose=false +func_append preserve_args " $opt" + ;; + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$absdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type \`$version_type'" + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + func_append verstring ":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + func_append libobjs " $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Remove ${wl} instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + func_append oldobjs " $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + func_resolve_sysroot "$deplib" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + func_append rmfiles " $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/coreseek/mmseg-3.2.14/config/mdate-sh b/coreseek/mmseg-3.2.14/config/mdate-sh new file mode 100755 index 0000000..37171f2 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/mdate-sh @@ -0,0 +1,92 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. +# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# written by Ulrich Drepper , June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# Get the extended ls output of the file or directory. +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +if ls -L /dev/null 1>/dev/null 2>&1; then + set - x`ls -L -l -d $1` +else + set - x`ls -l -d $1` +fi +# The month is at least the fourth argument +# (3 shifts here, the next inside the loop). +shift +shift +shift + +# Find the month. Next argument is day, followed by the year or time. +month= +until test $month +do + shift + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +day=$2 + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year diff --git a/coreseek/mmseg-3.2.14/config/missing b/coreseek/mmseg-3.2.14/config/missing new file mode 100755 index 0000000..22e101a --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/missing @@ -0,0 +1,198 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997, 2001, 2002 Free Software Foundation, Inc. +# Franc,ois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.in; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`$configure_ac'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`$configure_ac'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`$configure_ac'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' $configure_ac` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`$configure_ac'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/coreseek/mmseg-3.2.14/config/mkinstalldirs b/coreseek/mmseg-3.2.14/config/mkinstalldirs new file mode 100755 index 0000000..4f58503 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/mkinstalldirs @@ -0,0 +1,40 @@ +#! /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/coreseek/mmseg-3.2.14/config/readline.m4 b/coreseek/mmseg-3.2.14/config/readline.m4 new file mode 100755 index 0000000..6f65471 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/readline.m4 @@ -0,0 +1,32 @@ +## readline.m4 -- provide and handle --with-readline configure option +## Copyright (C) 2000 Gary V. Vaughan +## +## This program is free software; you can 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +# serial 1 SIC_WITH_READLINE + +AC_DEFUN(SIC_WITH_READLINE, +[AC_ARG_WITH(readline, +[ --with-readline compile with the system readline library], +[if test x"${withval-no}" != no; then + sic_save_LIBS=$LIBS + AC_CHECK_LIB(readline, readline) + if test x"${ac_cv_lib_readline_readline}" = xno; then + AC_MSG_ERROR(libreadline not found) + fi + LIBS=$sic_save_LIBS +fi]) +AM_CONDITIONAL(WITH_READLINE, test x"${with_readline-no}" != xno) +]) diff --git a/coreseek/mmseg-3.2.14/config/sys_errlist.m4 b/coreseek/mmseg-3.2.14/config/sys_errlist.m4 new file mode 100755 index 0000000..8d8f4ec --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/sys_errlist.m4 @@ -0,0 +1,28 @@ +## sys_errlist.m4 -- determine whether the system library provides sys_errlist +## Copyright (C) 2000 Gary V. Vaughan +## +## This program is free software; you can 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +# serial 1 SIC_VAR_SYS_ERRLIST + +AC_DEFUN(SIC_VAR_SYS_ERRLIST, +[AC_CACHE_CHECK([for sys_errlist], +sic_cv_var_sys_errlist, +[AC_TRY_LINK([int *p;], [extern int sys_errlist; p = &sys_errlist;], + sic_cv_var_sys_errlist=yes, sic_cv_var_sys_errlist=no)]) +if test x"$sic_cv_var_sys_errlist" = xyes; then + AC_DEFINE(HAVE_SYS_ERRLIST, 1, + [Define if your system libraries have a sys_errlist variable.]) +fi]) diff --git a/coreseek/mmseg-3.2.14/config/sys_siglist.m4 b/coreseek/mmseg-3.2.14/config/sys_siglist.m4 new file mode 100755 index 0000000..8031130 --- /dev/null +++ b/coreseek/mmseg-3.2.14/config/sys_siglist.m4 @@ -0,0 +1,28 @@ +## sys_siglist.m4 -- determine whether the system library provides sys_siglist +## Copyright (C) 2000 Gary V. Vaughan +## +## This program is free software; you can 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +# serial 1 SIC_VAR_SYS_SIGLIST + +AC_DEFUN(SIC_VAR_SYS_SIGLIST, +[AC_CACHE_CHECK([for sys_siglist], +sic_cv_var_sys_siglist, +[AC_TRY_LINK([int *p;], [extern int sys_siglist; p = &sys_siglist;], + sic_cv_var_sys_siglist=yes, sic_cv_var_sys_siglist=no)]) +if test x"$sic_cv_var_sys_siglist" = xyes; then + AC_DEFINE(HAVE_SYS_SIGLIST, 1, + [Define if your system libraries have a sys_siglist variable.]) +fi]) diff --git a/coreseek/mmseg-3.2.14/configure b/coreseek/mmseg-3.2.14/configure new file mode 100755 index 0000000..25d7caa --- /dev/null +++ b/coreseek/mmseg-3.2.14/configure @@ -0,0 +1,18513 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.68. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_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 +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +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='mkdir -p "$as_dir"' +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'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="src/mmseg_main.cpp" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +ac_aux_dir +LIBOBJS +WITH_READLINE_FALSE +WITH_READLINE_TRUE +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +DLLTOOL +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +ac_ct_CC +CFLAGS +CC +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CXX +CPPFLAGS +LDFLAGS +CXXFLAGS +CXX +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +with_sysroot +enable_libtool_lock +with_readline +' + ac_precious_vars='build_alias +host_alias +target_alias +CXX +CXXFLAGS +LDFLAGS +LIBS +CPPFLAGS +CCC +CC +CFLAGS +CPP +CXXCPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +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= ;; + *) 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_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_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'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_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 .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures 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 + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-readline compile with the system readline library + +Some influential environment variables: + CXX C++ compiler command + CXXFLAGS C++ compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CC C compiler command + CFLAGS C compiler flags + CPP C preprocessor + 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. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + $as_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.68 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_cxx_try_cpp LINENO +# ------------------------ +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_cpp + +# ac_fn_cxx_try_link LINENO +# ------------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_cxx_try_link + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +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 +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type +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.68. 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=. + $as_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=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_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'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > 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 + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_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,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_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 + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_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. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +ac_config_headers="$ac_config_headers config.h:config-h.in" + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=mmseg + VERSION=0.7 + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +#AC_PROG_CC +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CXX+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 +$as_echo_n "checking whether the C++ compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+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 +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C++ compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 +$as_echo_n "checking for C++ compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C++ compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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 ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if ${ac_cv_cxx_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if ${ac_cv_prog_cxx_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$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 +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CXX_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* 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" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +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) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + +am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&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" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf + + + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if ${ac_cv_prog_CXXCPP+:} false; then : + $as_echo_n "(cached) " >&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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$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 confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + +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 + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +reload_flag_CXX=$reload_flag +reload_cmds_CXX=$reload_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath__CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath__CXX"; then + lt_cv_aix_libpath__CXX="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath__CXX +fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + fi + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec_CXX=' ' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=yes + file_list_spec_CXX='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' + enable_shared_with_static_runtimes_CXX=yes + # Don't use ranlib + old_postinstall_cmds_CXX='chmod 644 $oldlib' + postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec_CXX='' + fi + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + haiku*) + archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs_CXX=yes + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5].* | *pgcpp\ [1-5].*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ + '"$old_archive_cmds_CXX" + reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ + '"$reload_cmds_CXX" + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case ${prev}${p} in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test "$pre_test_object_deps_done" = no; then + case ${prev} in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC* | sunCC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } +lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global defined + # symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + ;; + esac + ;; + linux* | k*bsd*-gnu | gnu*) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc_CXX=no + else + lt_cv_archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } + archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +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_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if ${ac_cv_header_sys_wait_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes +else + ac_cv_header_sys_wait_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then + +$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h + +fi + +for ac_header in stdlib.h unistd.h errno.h assert.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in string.h strings.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + break +fi + +done + + +# @start 2 +# am_cv_prog_cc_stdc is set by AM_PROG_CC_STDC +case $am_cv_prog_cc_stdc,$ac_cv_header_varargs_h in +no,) + # Non-ANSI compiler, so we must use varargs.h. + for ac_header in varargs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default" +if test "x$ac_cv_header_varargs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VARARGS_H 1 +_ACEOF + +fi + +done + + ;; +*,yes) + # Parent package is using varargs.h which is incompatible with + # stdarg.h, so we do the same (recheck to generate checking... + # message). + for ac_header in varargs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default" +if test "x$ac_cv_header_varargs_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VARARGS_H 1 +_ACEOF + +fi + +done + + ;; +*) + # If stdarg.h is present define HAVE_STDARG_H. + for ac_header in stdarg.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default" +if test "x$ac_cv_header_stdarg_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDARG_H 1 +_ACEOF + +fi + +done + + ;; +esac + +case x$ac_cv_header_stdarg_h$ac_cv_header_varargs_h in +x*yes*) ;; +*) as_fn_error one of which \ +is required for the build to proceed. "Could not find stdarg.h or varargs.h" "$LINENO" 5 ;; +esac +# @end 2 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if ${ac_cv_c_const+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_const=yes +else + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +$as_echo "#define const /**/" >>confdefs.h + +fi + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + + +# Check whether --with-readline was given. +if test "${with_readline+set}" = set; then : + withval=$with_readline; if test x"${withval-no}" != no; then + sic_save_LIBS=$LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 +$as_echo_n "checking for readline in -lreadline... " >&6; } +if ${ac_cv_lib_readline_readline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lreadline $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char readline (); +int +main () +{ +return readline (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_readline_readline=yes +else + ac_cv_lib_readline_readline=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5 +$as_echo "$ac_cv_lib_readline_readline" >&6; } +if test "x$ac_cv_lib_readline_readline" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBREADLINE 1 +_ACEOF + + LIBS="-lreadline $LIBS" + +fi + + if test x"${ac_cv_lib_readline_readline}" = xno; then + as_fn_error $? "libreadline not found" "$LINENO" 5 + fi + LIBS=$sic_save_LIBS +fi +fi + + if test x"${with_readline-no}" != xno; then + WITH_READLINE_TRUE= + WITH_READLINE_FALSE='#' +else + WITH_READLINE_TRUE='#' + WITH_READLINE_FALSE= +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_errlist" >&5 +$as_echo_n "checking for sys_errlist... " >&6; } +if ${sic_cv_var_sys_errlist+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int *p; +int +main () +{ +extern int sys_errlist; p = &sys_errlist; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + sic_cv_var_sys_errlist=yes +else + sic_cv_var_sys_errlist=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sic_cv_var_sys_errlist" >&5 +$as_echo "$sic_cv_var_sys_errlist" >&6; } +if test x"$sic_cv_var_sys_errlist" = xyes; then + +$as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_siglist" >&5 +$as_echo_n "checking for sys_siglist... " >&6; } +if ${sic_cv_var_sys_siglist+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int *p; +int +main () +{ +extern int sys_siglist; p = &sys_siglist; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + sic_cv_var_sys_siglist=yes +else + sic_cv_var_sys_siglist=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sic_cv_var_sys_siglist" >&5 +$as_echo "$sic_cv_var_sys_siglist" >&6; } +if test x"$sic_cv_var_sys_siglist" = xyes; then + +$as_echo "#define HAVE_SYS_SIGLIST 1" >>confdefs.h + +fi + +for ac_func in bzero memset +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + break +fi +done + +for ac_func in calloc strchr strrchr +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +ac_fn_c_check_func "$LINENO" "basename" "ac_cv_func_basename" +if test "x$ac_cv_func_basename" = xyes; then : + $as_echo "#define HAVE_BASENAME 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" basename.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS basename.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strspn" "ac_cv_func_strspn" +if test "x$ac_cv_func_strspn" = xyes; then : + $as_echo "#define HAVE_STRSPN 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" strspn.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strspn.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strcspn" "ac_cv_func_strcspn" +if test "x$ac_cv_func_strcspn" = xyes; then : + $as_echo "#define HAVE_STRCSPN 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" strcspn.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strcspn.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" +if test "x$ac_cv_func_strerror" = xyes; then : + $as_echo "#define HAVE_STRERROR 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" strerror.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strerror.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "strsignal" "ac_cv_func_strsignal" +if test "x$ac_cv_func_strsignal" = xyes; then : + $as_echo "#define HAVE_STRSIGNAL 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" strsignal.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strsignal.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "vfprintf" "ac_cv_func_vfprintf" +if test "x$ac_cv_func_vfprintf" = xyes; then : + $as_echo "#define HAVE_VFPRINTF 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" vfprintf.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS vfprintf.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" +if test "x$ac_cv_func_waitpid" = xyes; then : + $as_echo "#define HAVE_WAITPID 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" waitpid.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS waitpid.$ac_objext" + ;; +esac + +fi + + + +# @start 5 +# ---------------------------------------------------------------------- +# Add code to config.status to create an installable host dependent +# configuration file. +# ---------------------------------------------------------------------- +ac_config_commands="$ac_config_commands default-1" + +# @end 5 +# @start 1 +Xsed="sed -e s/^X//" +case " $LIBOBJS " in + *" .$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS .$ac_objext" + ;; +esac + +#LTLIBOBJS=`echo X"$LIBOBJS" | \ +# [$Xsed -e 's,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,']` +#AC_SUBST(LTLIBOBJS) +# @end 1 + + + +ac_config_files="$ac_config_files Makefile src/Makefile" + +ac_config_commands="$ac_config_commands default" + +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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+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 + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_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= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_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. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_READLINE_TRUE}" && test -z "${WITH_READLINE_FALSE}"; then + as_fn_error $? "conditional \"WITH_READLINE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# 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.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + 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 + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -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 +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_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 || +$as_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" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.68. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.68, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_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. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' +predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' +predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' +postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' +reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' +reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +DLLTOOL \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +reload_flag_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_separator_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +reload_cmds_CXX \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX \ +postlink_cmds_CXX; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + + srcdir=$srcdir + ac_cv_func_bzero=$ac_cv_func_bzero + ac_cv_func_memset=$ac_cv_func_memset + ac_cv_func_strchr=$ac_cv_func_strchr + ac_cv_func_strrchr=$ac_cv_func_strrchr +# @end 5 + ac_cv_func_basename=$ac_cv_func_basename + ac_cv_func_strcspn=$ac_cv_func_strcspn + ac_cv_func_strerror=$ac_cv_func_strerror + ac_cv_func_strsignal=$ac_cv_func_strsignal + ac_cv_func_strspn=$ac_cv_func_strspn + ac_cv_func_vfprintf=$ac_cv_func_vfprintf + ac_cv_func_waitpid=$ac_cv_func_waitpid + ac_cv_header_assert_h=$ac_cv_header_assert_h + ac_cv_header_errno_h=$ac_cv_header_errno_h + ac_cv_header_stdlib_h=$ac_cv_header_stdlib_h + ac_cv_header_stdarg_h=$ac_cv_header_stdarg_h + ac_cv_header_string_h=$ac_cv_header_string_h + ac_cv_header_strings_h=$ac_cv_header_strings_h + ac_cv_header_sys_wait_h=$ac_cv_header_sys_wait_h + ac_cv_header_unistd_h=$ac_cv_header_unistd_h + ac_cv_header_varargs_h=$ac_cv_header_varargs_h +# @start 5 + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config-h.in" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_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"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_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 + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_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 "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# How to create reloadable object files. +reload_flag=$lt_reload_flag_CXX +reload_cmds=$lt_reload_cmds_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + "default-1":C) + #if test -n "$CONFIG_FILES" && test -n "$CONFIG_HEADERS"; then + # # If both these vars are non-empty, then config.status wasn't run by + # # automake rules (which always set one or the other to empty). + # CONFIG_OTHER=${CONFIG_OTHER-sic/common.h} + #fi + case "$CONFIG_OTHER" in + *sic/common.h*) + outfile=sic/common.h + stampfile=sic/stamp-common + tmpfile=${outfile}T + dirname="sed s,^.*/,,g" + + echo creating $outfile + cat > $tmpfile << _EOF_ +/* -*- Mode: C -*- + * -------------------------------------------------------------------- + * DO NOT EDIT THIS FILE! It has been automatically generated + * from: configure.in and `echo $outfile|$dirname`.in + * on host: `(hostname || uname -n) 2>/dev/null | sed 1q` + * -------------------------------------------------------------------- + */ + +#ifndef SIC_COMMON_H +#define SIC_COMMON_H 1 + +#include +#include +_EOF_ + +# @end 5 +# @start 4 + # Add the code to include these headers only if autoconf has + # shown them to be present. + if test x$ac_cv_header_stdlib_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_unistd_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_sys_wait_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_errno_h = xyes; then + echo '#include ' >> $tmpfile + fi + cat >> $tmpfile << '_EOF_' +#ifndef errno +/* Some sytems #define this! */ +extern int errno; +#endif +_EOF_ + if test x$ac_cv_header_string_h = xyes; then + echo '#include ' >> $tmpfile + elif test x$ac_cv_header_strings_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_assert_h = xyes; then + cat >> $tmpfile << '_EOF_' + +#include +#define SIC_ASSERT assert + +_EOF_ + else + echo '#define SIC_ASSERT(expr) ((void) 0)' >> $tmpfile + fi +# @end 4 +# @start 3 + # Make a choice between the two different API's for variadic + # functions. In general, prefer stdarg.h over varargs.h, except + # where varargs.h has already been chosen by the parent package. + if test x$ac_cv_header_stdarg_h = xyes \ + && test x$ac_cv_header_varargs_h != xyes + then + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a, f) +#endif /* !VA_START */ + +_EOF_ + else + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a) +#endif /* !VA_START */ + +_EOF_ + fi + +# @end 3 +# @start 5 + if test x$ac_cv_func_bzero = xno && \ + test x$ac_cv_func_memset = xyes; then + cat >> $tmpfile << '_EOF_' +#define bzero(buf, bytes) ((void) memset (buf, 0, bytes)) +_EOF_ + fi + if test x$ac_cv_func_strchr = xno; then + echo '#define strchr index' >> $tmpfile + fi + if test x$ac_cv_func_strrchr = xno; then + echo '#define strrchr rindex' >> $tmpfile + fi + + # The ugly but portable cpp stuff comes from here + infile=$srcdir/sic/`echo $outfile | sed 's,.*/,,g;s,\..*$,,g'`-h.in + sed '/^##.*$/d' $infile >> $tmpfile + +# @end 5 + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + if test x$ac_cv_func_basename = xno; then + echo 'extern char *basename PARAMS((const char *path));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strcspn = xno; then + echo 'extern size_t strcspn PARAMS((const char *string, const char *accept));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strerror = xno; then + echo 'extern char *strerror PARAMS((int err));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strsignal = xno; then + echo 'extern char *strsignal PARAMS((int signo));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strspn = xno; then + echo 'extern size_t strspn PARAMS((const char *string, const char *reject));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_vfprintf = xno; then + echo 'extern int vfprintf PARAMS((FILE *file, const char *format, va_list ap));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_waitpid = xno; then + echo 'extern pid_t waitpid PARAMS((pid_t pid, int *pstatus, int options));' >> ${tmpfile}2 + fi + + if test -f ${tmpfile}2; then + cat >> $tmpfile << '_EOF_' + +BEGIN_C_DECLS +_EOF_ + cat ${tmpfile}2 >> $tmpfile + echo 'END_C_DECLS' >> $tmpfile + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + fi + + cat >> $tmpfile << '_EOF_' + +#endif /* !SIC_COMMON_H */ +_EOF_ + + if cmp -s $tmpfile $outfile; then + echo $outfile is unchanged + rm -f $tmpfile + else + mv $tmpfile $outfile + touch $stampfile + fi + ;; + esac +# @start 5 + ;; + "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h.in ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + +echo \ +"------------------------------------------------------------------------ +Configuration: + + Source code location: ${srcdir} + Compiler: ${CC} + Compiler flags: ${CFLAGS} + Host System Type: ${host} + Install path: ${prefix} + + See config.h for further configuration information. +------------------------------------------------------------------------" diff --git a/coreseek/mmseg-3.2.14/configure.in b/coreseek/mmseg-3.2.14/configure.in new file mode 100755 index 0000000..cdada7e --- /dev/null +++ b/coreseek/mmseg-3.2.14/configure.in @@ -0,0 +1,289 @@ +# configure.in -- Process this file with autoconf to produce configure +# Copyright (C) 2000 Gary V. Vaughan +# +# This program is free software; you can 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +AC_INIT(src/mmseg_main.cpp) +AC_CONFIG_AUX_DIR(config) +AM_CONFIG_HEADER(config.h:config-h.in) +AM_INIT_AUTOMAKE(mmseg, 0.7) + +#AC_PROG_CC +AC_PROG_CXX +AM_PROG_CC_STDC +AM_PROG_LIBTOOL + +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS(stdlib.h unistd.h errno.h assert.h) +AC_CHECK_HEADERS(string.h strings.h, break) + +# @start 2 +# am_cv_prog_cc_stdc is set by AM_PROG_CC_STDC +case $am_cv_prog_cc_stdc,$ac_cv_header_varargs_h in +no,) + # Non-ANSI compiler, so we must use varargs.h. + AC_CHECK_HEADERS(varargs.h) + ;; +*,yes) + # Parent package is using varargs.h which is incompatible with + # stdarg.h, so we do the same (recheck to generate checking... + # message). + AC_CHECK_HEADERS(varargs.h) + ;; +*) + # If stdarg.h is present define HAVE_STDARG_H. + AC_CHECK_HEADERS(stdarg.h) + ;; +esac + +case x$ac_cv_header_stdarg_h$ac_cv_header_varargs_h in +x*yes*) ;; +*) AC_MSG_ERROR(Could not find stdarg.h or varargs.h, one of which \ +is required for the build to proceed.) ;; +esac +# @end 2 + +AC_C_CONST +AC_TYPE_PID_T +AC_TYPE_SIZE_T + +SIC_WITH_READLINE + +SIC_VAR_SYS_ERRLIST +SIC_VAR_SYS_SIGLIST + +AC_CHECK_FUNCS(bzero memset, break) +AC_CHECK_FUNCS(calloc strchr strrchr) +AC_REPLACE_FUNCS(basename strspn strcspn strerror strsignal vfprintf waitpid) + +# @start 5 +# ---------------------------------------------------------------------- +# Add code to config.status to create an installable host dependent +# configuration file. +# ---------------------------------------------------------------------- +AC_OUTPUT_COMMANDS([ + #if test -n "$CONFIG_FILES" && test -n "$CONFIG_HEADERS"; then + # # If both these vars are non-empty, then config.status wasn't run by + # # automake rules (which always set one or the other to empty). + # CONFIG_OTHER=${CONFIG_OTHER-sic/common.h} + #fi + case "$CONFIG_OTHER" in + *sic/common.h*) + outfile=sic/common.h + stampfile=sic/stamp-common + tmpfile=${outfile}T + dirname="sed s,^.*/,,g" + + echo creating $outfile + cat > $tmpfile << _EOF_ +/* -*- Mode: C -*- + * -------------------------------------------------------------------- + * DO NOT EDIT THIS FILE! It has been automatically generated + * from: configure.in and `echo $outfile|$dirname`.in + * on host: `(hostname || uname -n) 2>/dev/null | sed 1q` + * -------------------------------------------------------------------- + */ + +#ifndef SIC_COMMON_H +#define SIC_COMMON_H 1 + +#include +#include +_EOF_ + +# @end 5 +# @start 4 + # Add the code to include these headers only if autoconf has + # shown them to be present. + if test x$ac_cv_header_stdlib_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_unistd_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_sys_wait_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_errno_h = xyes; then + echo '#include ' >> $tmpfile + fi + cat >> $tmpfile << '_EOF_' +#ifndef errno +/* Some sytems #define this! */ +extern int errno; +#endif +_EOF_ + if test x$ac_cv_header_string_h = xyes; then + echo '#include ' >> $tmpfile + elif test x$ac_cv_header_strings_h = xyes; then + echo '#include ' >> $tmpfile + fi + if test x$ac_cv_header_assert_h = xyes; then + cat >> $tmpfile << '_EOF_' + +#include +#define SIC_ASSERT assert + +_EOF_ + else + echo '#define SIC_ASSERT(expr) ((void) 0)' >> $tmpfile + fi +# @end 4 +# @start 3 + # Make a choice between the two different API's for variadic + # functions. In general, prefer stdarg.h over varargs.h, except + # where varargs.h has already been chosen by the parent package. + if test x$ac_cv_header_stdarg_h = xyes \ + && test x$ac_cv_header_varargs_h != xyes + then + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a, f) +#endif /* !VA_START */ + +_EOF_ + else + cat >> $tmpfile << '_EOF_' + +#include +#ifndef VA_START +# define VA_START(a, f) va_start(a) +#endif /* !VA_START */ + +_EOF_ + fi + +# @end 3 +# @start 5 + if test x$ac_cv_func_bzero = xno && \ + test x$ac_cv_func_memset = xyes; then + cat >> $tmpfile << '_EOF_' +#define bzero(buf, bytes) ((void) memset (buf, 0, bytes)) +_EOF_ + fi + if test x$ac_cv_func_strchr = xno; then + echo '#define strchr index' >> $tmpfile + fi + if test x$ac_cv_func_strrchr = xno; then + echo '#define strrchr rindex' >> $tmpfile + fi + + # The ugly but portable cpp stuff comes from here + infile=$srcdir/sic/`echo $outfile | sed 's,.*/,,g;s,\..*$,,g'`-h.in + sed '/^##.*$/d' $infile >> $tmpfile + +# @end 5 + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + if test x$ac_cv_func_basename = xno; then + echo 'extern char *basename PARAMS((const char *path));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strcspn = xno; then + echo 'extern size_t strcspn PARAMS((const char *string, const char *accept));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strerror = xno; then + echo 'extern char *strerror PARAMS((int err));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strsignal = xno; then + echo 'extern char *strsignal PARAMS((int signo));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_strspn = xno; then + echo 'extern size_t strspn PARAMS((const char *string, const char *reject));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_vfprintf = xno; then + echo 'extern int vfprintf PARAMS((FILE *file, const char *format, va_list ap));' >> ${tmpfile}2 + fi + if test x$ac_cv_func_waitpid = xno; then + echo 'extern pid_t waitpid PARAMS((pid_t pid, int *pstatus, int options));' >> ${tmpfile}2 + fi + + if test -f ${tmpfile}2; then + cat >> $tmpfile << '_EOF_' + +BEGIN_C_DECLS +_EOF_ + cat ${tmpfile}2 >> $tmpfile + echo 'END_C_DECLS' >> $tmpfile + ${RM-/bin/rm -f} ${tmpfile}2 2>/dev/null + fi + + cat >> $tmpfile << '_EOF_' + +#endif /* !SIC_COMMON_H */ +_EOF_ + + if cmp -s $tmpfile $outfile; then + echo $outfile is unchanged + rm -f $tmpfile + else + mv $tmpfile $outfile + touch $stampfile + fi + ;; + esac +# @start 5 +],[ + srcdir=$srcdir + ac_cv_func_bzero=$ac_cv_func_bzero + ac_cv_func_memset=$ac_cv_func_memset + ac_cv_func_strchr=$ac_cv_func_strchr + ac_cv_func_strrchr=$ac_cv_func_strrchr +# @end 5 + ac_cv_func_basename=$ac_cv_func_basename + ac_cv_func_strcspn=$ac_cv_func_strcspn + ac_cv_func_strerror=$ac_cv_func_strerror + ac_cv_func_strsignal=$ac_cv_func_strsignal + ac_cv_func_strspn=$ac_cv_func_strspn + ac_cv_func_vfprintf=$ac_cv_func_vfprintf + ac_cv_func_waitpid=$ac_cv_func_waitpid + ac_cv_header_assert_h=$ac_cv_header_assert_h + ac_cv_header_errno_h=$ac_cv_header_errno_h + ac_cv_header_stdlib_h=$ac_cv_header_stdlib_h + ac_cv_header_stdarg_h=$ac_cv_header_stdarg_h + ac_cv_header_string_h=$ac_cv_header_string_h + ac_cv_header_strings_h=$ac_cv_header_strings_h + ac_cv_header_sys_wait_h=$ac_cv_header_sys_wait_h + ac_cv_header_unistd_h=$ac_cv_header_unistd_h + ac_cv_header_varargs_h=$ac_cv_header_varargs_h +# @start 5 +]) +# @end 5 +# @start 1 +Xsed="sed -e s/^X//" +AC_LIBOBJ +#LTLIBOBJS=`echo X"$LIBOBJS" | \ +# [$Xsed -e 's,\.[^.]* ,.lo ,g;s,\.[^.]*$,.lo,']` +#AC_SUBST(LTLIBOBJS) +# @end 1 + +AC_SUBST(ac_aux_dir) + +AC_OUTPUT([Makefile src/Makefile], +[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h.in]) + +echo \ +"------------------------------------------------------------------------ +Configuration: + + Source code location: ${srcdir} + Compiler: ${CC} + Compiler flags: ${CFLAGS} + Host System Type: ${host} + Install path: ${prefix} + + See config.h for further configuration information. +------------------------------------------------------------------------" diff --git a/coreseek/mmseg-3.2.14/data/Lexicon_full_words.txt b/coreseek/mmseg-3.2.14/data/Lexicon_full_words.txt new file mode 100755 index 0000000..a36efe5 --- /dev/null +++ b/coreseek/mmseg-3.2.14/data/Lexicon_full_words.txt @@ -0,0 +1,108749 @@ +阿 +阿巴丹 +阿巴岛 +阿巴鸟 +阿巴伊达 +阿坝 +阿爸 +阿北乡 +阿比林市 +阿比让 +阿比让港 +阿比让市 +阿比托 +阿布迪斯 +阿布哈兹 +阿布贾 +阿布扎比 +阿昌族 +阿城 +阿城市 +阿城县 +阿达纳 +阿达纳市 +阿德莱德 +阿的里海 +阿登 +阿弟 +阿斗 +阿杜瓦 +阿队 +阿尔 +阿尔卑斯 +阿尔法星 +阿尔法镇 +阿尔甘德 +阿尔及尔 +阿尔金山 +阿尔勒 +阿尔萨斯 +阿尔山 +阿尔泰 +阿尔泰省 +阿尔托 +阿方 +阿房宫 +阿飞 +阿富汗 +阿哥 +阿根廷 +阿根廷队 +阿根廷湖 +阿贡 +阿国 +阿航 +阿訇 +阿胶 +阿姐 +阿科松博 +阿克拉 +阿克莫拉 +阿克萨 +阿克苏 +阿克苏河 +阿克苏市 +阿肯色 +阿肯色州 +阿拉 +阿拉伯 +阿拉伯化 +阿拉伯人 +阿拉伯式 +阿拉伯湾 +阿拉德 +阿拉德市 +阿拉木图 +阿拉善 +阿拉善盟 +阿拉善旗 +阿拉善湾 +阿拉斯加 +阿莱曼 +阿兰山 +阿劳龟 +阿勒菲 +阿勒泰 +阿里 +阿里河 +阿里山 +阿里特纳 +阿联酋 +阿灵顿县 +阿鲁巴 +阿鲁巴岛 +阿鲁沙 +阿鲁沙省 +阿妈 +阿曼 +阿曼湾 +阿美利加 +阿妹 +阿盟 +阿弥陀佛 +阿米巴 +阿摩尼亚 +阿穆尔河 +阿穆尔虎 +阿穆尔州 +阿囡 +阿南 +阿帕网 +阿婆 +阿齐兹 +阿其 +阿萨伊果 +阿塞拜疆 +阿瑟港 +阿森纳队 +阿市 +阿式 +阿是穴 +阿司匹林 +阿斯马拉 +阿斯匹林 +阿斯塔纳 +阿斯旺 +阿特拉 +阿特拉斯 +阿嚏 +阿通社 +阿图什市 +阿托品 +阿瓦拉山 +阿佤 +阿佤山 +阿万达罗 +阿韦龙省 +阿维尼翁 +阿维西奥 +阿维亚诺 +阿西西 +阿西西城 +阿雅克肖 +阿亚古兹 +阿爷 +阿姨 +阿谀 +阿谀逢迎 +阿谀奉承 +阿约 +阿族 +阿族人 +啊 +啊啊 +哎 +哎呀 +哎哟 +哀 +哀哀 +哀哀哭泣 +哀兵必胜 +哀愁 +哀辞 +哀悼 +哀悼日 +哀告 +哀歌 +哀嚎 +哀号 +哀呼 +哀叫 +哀牢山 +哀牢山系 +哀乐 +哀鸣 +哀怒 +哀戚 +哀求 +哀荣 +哀伤 +哀思 +哀叹 +哀痛 +哀婉 +哀怨 +唉 +唉声叹气 +唉声叹息 +唉叹 +埃 +埃镑 +埃博拉 +埃德蒙顿 +埃方 +埃菲社 +埃夫拉特 +埃航 +埃及 +埃及队 +埃及王国 +埃加 +埃居 +埃拉特 +埃拉特湾 +埃雷迪亚 +埃雷兹 +埃里克市 +埃里斯特 +埃里温 +埃米尔 +埃默鲁市 +埃塞 +埃舍德 +埃斯波市 +埃斯特角 +埃松省 +埃特纳 +埃文 +埃因霍温 +埃元 +挨 +挨边 +挨次 +挨打 +挨冻 +挨斗 +挨斗者 +挨饿 +挨个 +挨个儿 +挨户 +挨家挨户 +挨近 +挨骂 +挨门 +挨批 +挨整 +挨着 +挨揍 +捱 +皑皑 +癌 +癌变 +癌病 +癌魔 +癌细胞 +癌星 +癌症 +癌肿 +矮 +矮矮的 +矮凳 +矮墩墩 +矮秆 +矮个儿 +矮个子 +矮化 +矮胖 +矮墙 +矮生 +矮小 +矮寨镇 +矮子 +霭霭白云 +霭空 +艾 +艾单驼 +艾尔河 +艾尔索普 +艾菲尔 +艾佛莱特 +艾基莱镇 +艾利逊 +艾美特队 +艾绒 +艾滋病 +艾滋病毒 +爱 +爱不释手 +爱才如命 +爱财如命 +爱厂如家 +爱巢 +爱称 +爱戴 +爱丁堡 +爱尔福特 +爱尔兰 +爱尔兰岛 +爱尔兰队 +爱尔兰裔 +爱方 +爱抚 +爱岗 +爱岗敬业 +爱岗争优 +爱国 +爱国华侨 +爱国会 +爱国人士 +爱国同胞 +爱国心 +爱国者 +爱国至诚 +爱国志士 +爱国主义 +爱好 +爱好者 +爱河 +爱护 +爱花者 +爱将 +爱康 +爱康工程 +爱乐者 +爱理不理 +爱丽舍宫 +爱怜 +爱恋 +爱侣 +爱美 +爱面子 +爱民 +爱民如子 +爱莫能助 +爱慕 +爱鸟 +爱鸟护鸟 +爱鸟周 +爱女 +爱妻 +爱琴海 +爱情 +爱泉 +爱犬 +爱人 +爱沙尼亚 +爱上 +爱神 +爱书者 +爱斯基摩 +爱孙 +爱徒 +爱委会 +爱卫办 +爱卫会 +爱屋及乌 +爱惜 +爱心 +爱心卡 +爱眼日 +爱意 +爱因斯坦 +爱印 +爱欲 +爱憎 +爱憎分明 +爱知 +爱知县 +爱滋病 +爱子 +爱子教子 +隘 +隘口 +隘路 +碍 +碍事 +碍手碍脚 +碍眼 +碍于情面 +暧暧 +暧昧 +安 +安安静静 +安安稳稳 +安凹镇 +安邦 +安邦定国 +安邦富民 +安保 +安边 +安波汤 +安波汤镇 +安步当车 +安插 +安次区 +安达 +安达市 +安大略省 +安道尔 +安道尔队 +安得拉 +安得拉邦 +安德里 +安德鲁斯 +安德镇 +安的列斯 +安抵 +安第斯 +安第斯山 +安定 +安定感 +安定门 +安定团结 +安东市 +安度 +安顿 +安多 +安多县 +安放 +安非拉酮 +安非他明 +安分 +安分守己 +安丰乡 +安福 +安福县 +安抚 +安哥拉 +安工办 +安国 +安国市 +安海镇 +安好 +安华西里 +安化 +安化县 +安徽 +安徽籍 +安徽省 +安徽省籍 +安徽厅 +安徽团 +安魂 +安魂曲 +安吉 +安吉县 +安济 +安家 +安家堡乡 +安家费 +安家立业 +安家落户 +安家镇 +安检 +安检门 +安检区 +安检员 +安检站 +安江乡 +安静 +安静村 +安居 +安居房 +安居工程 +安居乐教 +安居乐业 +安居梦 +安居镇 +安卡拉 +安康 +安康市 +安科纳 +安克雷奇 +安口镇 +安澜 +安老 +安乐 +安乐窝 +安乐椅 +安理会 +安立路 +安流 +安隆汶 +安陆 +安陆市 +安曼 +安曼城 +安曼市 +安盟 +安谧 +安眠 +安眠药 +安民 +安民告示 +安民济世 +安民乐业 +安乃近 +安宁 +安宁区 +安宁市 +安排 +安排者 +安培 +安培计 +安贫乐道 +安平 +安平县 +安琪儿 +安企 +安企部 +安企部法 +安庆 +安庆市 +安丘 +安丘市 +安全 +安全玻璃 +安全部 +安全带 +安全岛 +安全灯 +安全地 +安全电压 +安全阀 +安全法 +安全感 +安全观 +安全局 +安全壳 +安全论 +安全帽 +安全面 +安全区 +安全山 +安全史 +安全网 +安全系数 +安全线 +安全型 +安全性 +安全员 +安全值 +安然 +安然无恙 +安仁 +安仁村 +安塞 +安莎社 +安山 +安上 +安身 +安身立命 +安身之地 +安神 +安生 +安盛 +安守本分 +安睡 +安顺 +安顺市 +安肃镇 +安塔拉 +安太堡 +安太堡矿 +安恬 +安图 +安洼 +安外 +安危 +安危祸福 +安慰 +安慰话 +安慰剂 +安文镇 +安稳 +安稳感 +安卧 +安西 +安息 +安息堂 +安溪 +安溪县 +安闲 +安乡县 +安详 +安享 +安享清福 +安享晚年 +安歇 +安心 +安新县 +安阳 +安阳市 +安阳县 +安义 +安义县 +安逸 +安营扎寨 +安于 +安于现状 +安源 +安岳 +安葬 +安葬地 +安葬法 +安贞 +安之若素 +安置 +安置点 +安置费 +安置国 +安置率 +安置型 +安装 +安装队 +安装费 +安坐 +桉树 +桉树林 +桉树苗 +桉油 +氨 +氨氮化菌 +氨化 +氨化池 +氨基 +氨基酸 +氨纶 +氨气 +氨水 +庵 +庵东镇 +谙练 +谙熟 +谙晓 +谙知 +鹌鹑 +鞍 +鞍钢 +鞍湖镇 +鞍花 +鞍马 +鞍马劳顿 +鞍前马后 +鞍山 +鞍山市 +鞍子 +俺 +俺村 +俺家 +俺们 +岸 +岸壁 +岸边 +岸标 +岸导 +岸堤 +岸防 +岸基 +岸柳 +岸炮 +岸坡 +岸区 +岸上 +岸石 +岸滩 +岸下 +岸线 +岸站 +按 +按兵不动 +按部就班 +按察使 +按动 +按价 +按键 +按揭 +按扣儿 +按劳分配 +按劳付酬 +按劳取酬 +按理 +按理说 +按量 +按摩 +按摩厅 +按摩院 +按捺不住 +按钮 +按钮式 +按期 +按时 +按说 +按图索骥 +按需分配 +按压 +按语 +按照 +按质 +按质论价 +按住 +案 +案板 +案秤 +案底 +案发 +案发地 +案发率 +案犯 +案后 +案籍 +案件 +案卷 +案例 +案例库 +案例学 +案前 +案情 +案头 +案由 +案语 +案源 +案值 +案值数 +案主 +案子 +胺 +暗 +暗暗 +暗坝 +暗堡 +暗藏 +暗察 +暗娼 +暗沉沉 +暗处 +暗淡 +暗地 +暗地里 +暗渡陈仓 +暗访 +暗访组 +暗格 +暗沟 +暗害 +暗号 +暗合 +暗河 +暗盒 +暗红 +暗红色 +暗乎乎 +暗花 +暗花儿 +暗疾 +暗计 +暗记 +暗记儿 +暗箭 +暗箭伤人 +暗礁 +暗扣 +暗蓝色 +暗流 +暗绿 +暗昧 +暗门 +暗密 +暗器 +暗色 +暗杀 +暗伤 +暗示 +暗室 +暗送秋波 +暗算 +暗锁 +暗滩 +暗探 +暗无天日 +暗喜 +暗香 +暗箱 +暗想 +暗笑 +暗影 +暗语 +暗喻 +暗喻化 +暗中 +暗中斗黑 +暗中摸索 +暗自 +黯淡 +黯然 +黯然神伤 +黯然失色 +肮脏 +昂 +昂贵 +昂立 +昂然 +昂热市 +昂首 +昂首阔步 +昂首挺胸 +昂扬 +昂扬斗志 +盎然 +盎司 +凹 +凹底镇 +凹进 +凹镜 +凹面 +凹面镜 +凹透镜 +凹凸 +凹凸不平 +凹陷 +敖 +敖拜淖尔 +敖包 +敖东队 +敖汉旗 +嗷嗷待哺 +嗷嗷叫 +遨游 +熬 +熬煎 +熬心 +熬夜 +翱 +翱翔 +鳌峰 +鳌泉村 +鳌头 +鏖兵 +鏖战 +拗不过 +拗口 +拗口令 +岙山卫镇 +傲 +傲岸 +傲骨 +傲居 +傲立 +傲慢 +傲睨一世 +傲气 +傲然 +傲世 +傲视 +奥 +奥波莱市 +奥博 +奥迪车 +奥地利 +奥地利队 +奥地利籍 +奥方 +奥科辛弋 +奥克兰 +奥克兰港 +奥肯淖尔 +奥兰 +奥兰多 +奥勒松 +奥勒松市 +奥里萨邦 +奥利亚山 +奥林匹克 +奥卢市 +奥伦堡 +奥秘 +奥妙 +奥赛 +奥胜队 +奥什州 +奥斯卡 +奥斯卡史 +奥斯陆 +奥斯马奇 +奥斯曼 +奥斯威辛 +奥陶纪 +奥体 +奥委会 +奥希金斯 +奥新社 +奥运 +奥运村 +奥运会 +澳 +澳大利队 +澳大利亚 +澳方 +澳分 +澳航 +澳抗 +澳联社 +澳门 +澳门币 +澳门籍 +澳门元 +澳人 +澳人治澳 +澳头 +澳元 +澳众院 +澳州 +澳洲 +懊悔 +懊恼 +懊丧 +鏊子 +八 +八·一三 +八八年 +八拜之交 +八宝菜 +八宝饭 +八宝山 +八宝箱 +八不要 +八次全会 +八达岭 +八大 +八大处 +八大关 +八大山人 +八大姨 +八带鱼 +八点 +八点半 +八点钟 +八都镇 +八度 +八渡 +八二年 +八方来客 +八方支援 +八分音符 +八哥 +八哥儿 +八公桥 +八沟路 +八股 +八股文 +八卦 +八卦教 +八卦拳 +八卦三路 +八卦掌 +八卦阵 +八拐 +八国联军 +八机部 +八家村 +八家户 +八家户村 +八角 +八角茴香 +八角楼 +八角田 +八角亭 +八角形 +八节 +八九点钟 +八九月 +八廓街 +八里罕镇 +八里庄 +八里庄桥 +八连 +八连冠 +八六年 +八路 +八路军 +八面风 +八面来风 +八面玲珑 +八面威风 +八闽 +八平柴 +八七年 +八旗 +八日 +八三年 +八十中 +八时 +八宿 +八宿县 +八所 +八五年 +八仙 +八仙包 +八仙茶 +八仙过海 +八仙桌 +八乡四邻 +八辛庄村 +八要 +八一 +八一厂 +八一队 +八一年 +八一镇 +八音盒 +八音匣子 +八员 +八月 +八月十五 +八运 +八运会 +八中 +八重樱 +八字 +八字步 +八纵八横 +巴 +巴巴 +巴巴多斯 +巴比伦 +巴别塔 +巴不得 +巴村 +巴丹吉林 +巴德梅 +巴登 +巴东 +巴东栎 +巴东县 +巴豆 +巴恩市 +巴儿狗 +巴尔的摩 +巴尔干 +巴尔各扎 +巴尔扎克 +巴伐利亚 +巴方 +巴甫洛夫 +巴格达 +巴格达城 +巴国 +巴哈马 +巴哈马籍 +巴基斯坦 +巴籍 +巴结 +巴解 +巴解组织 +巴金 +巴卡尼 +巴克夏猪 +巴库 +巴拉丁山 +巴拉圭 +巴拉圭队 +巴拉圭籍 +巴拉哈斯 +巴拉那河 +巴勒斯坦 +巴厘巴板 +巴厘岛 +巴厘虎 +巴厘纱 +巴黎 +巴黎城 +巴黎公社 +巴黎市 +巴里巴里 +巴里港 +巴里坤县 +巴里洛切 +巴利阿里 +巴林 +巴林国 +巴林右旗 +巴陵 +巴陵郡 +巴伦西亚 +巴伦支海 +巴罗克式 +巴马 +巴马科 +巴马县 +巴毛 +巴茅茨 +巴盟 +巴拿马 +巴拿马城 +巴拿马籍 +巴蓬式 +巴侨 +巴青 +巴人 +巴塞尔 +巴塞罗那 +巴桑 +巴山 +巴山蜀水 +巴山雨夜 +巴蛇 +巴士 +巴士拉 +巴士式 +巴蜀 +巴特农 +巴望 +巴雾峡 +巴西 +巴西队 +巴西籍 +巴西节 +巴西利亚 +巴西木 +巴县 +巴新 +巴彦 +巴彦浩特 +巴伊亚 +巴伊亚州 +巴音郭楞 +巴鱼 +巴约纳 +巴扎 +巴掌 +巴中 +巴中市 +巴州 +叭 +叭儿 +叭儿狗 +扒 +扒开 +扒窃 +扒手 +扒子 +吧 +吧哒 +吧嗒 +吧台 +芭蕉 +芭蕉扇 +芭蕉叶 +芭蕾 +芭蕾舞 +芭蕾舞界 +芭蕾舞剧 +芭蕾舞史 +芭蕾舞团 +疤 +疤痕 +疤瘌 +疤瘌眼儿 +笆斗 +笆篱 +笆篓 +粑粑 +拔 +拔草 +拔除 +拔地而起 +拔掉 +拔高 +拔河 +拔河场 +拔河绳 +拔乎其萃 +拔尖 +拔尖儿 +拔剑 +拔节 +拔锚 +拔苗助长 +拔丝 +拔腿 +拔秧 +跋 +跋扈 +跋山涉水 +跋涉 +跋涉者 +跋文 +把 +把把 +把柄 +把持 +把儿 +把关 +把关者 +把酒 +把酒言欢 +把脉 +把门 +把门人 +把式 +把势 +把手 +把守 +把头 +把玩 +把握 +把握性 +把戏 +把下 +把兄弟 +把盏 +把诊 +把子 +靶 +靶场 +靶档 +靶机 +靶圈 +靶向 +靶子 +坝 +坝地 +坝顶 +坝段 +坝墩 +坝基 +坝区 +坝上 +坝体 +坝头 +坝沿 +坝址 +坝子 +爸 +爸爸 +爸爸日 +罢 +罢哺 +罢工 +罢官 +罢教 +罢课 +罢了 +罢论 +罢免 +罢免权 +罢市 +罢手 +罢休 +罢选 +鲅鱼圈 +鲅鱼圈区 +霸 +霸道 +霸权 +霸权主义 +霸王 +霸王别姬 +霸王花 +霸王龙 +霸王战 +霸业 +霸占 +霸州 +霸州市 +霸主 +灞河滩 +灞桥区 +灞水 +掰 +掰掰 +白 +白皑皑 +白矮星 +白案 +白巴乡 +白白 +白白绿绿 +白白胖胖 +白百破 +白班 +白斑 +白斑病 +白报纸 +白璧无瑕 +白驳风 +白不呲咧 +白布 +白布篷 +白菜 +白菜帮 +白菜碑 +白菜苔 +白菜心 +白苍苍 +白鲳 +白城 +白城市 +白吃 +白痴 +白螭 +白炽灯 +白炽电灯 +白绸 +白唇鹿 +白瓷 +白醋 +白搭 +白大褂 +白带 +白地 +白帝 +白帝城 +白点 +白癜风 +白丁 +白俄 +白俄罗斯 +白垩纪 +白发 +白发苍苍 +白发皤然 +白发人 +白发翁 +白矾 +白饭 +白匪 +白费 +白粉 +白粉病 +白干 +白干儿 +白杆 +白鸽 +白公馆 +白宫 +白沟 +白沟村 +白沟镇 +白骨 +白骨精 +白瓜子 +白关 +白关镇 +白鹳 +白龟 +白龟池 +白龟山 +白鲑 +白果 +白果树 +白果塔村 +白河 +白河县 +白鹤 +白喉 +白乎乎 +白狐 +白湖乡 +白虎 +白虎星 +白花 +白花花 +白花蛇 +白化 +白化病 +白话 +白话诗 +白话文 +白话文学 +白桦 +白桦林 +白桦树 +白晃晃 +白灰 +白货 +白集 +白暨豚 +白家庄 +白肩雕 +白介素 +白金 +白金汉宫 +白净 +白净净 +白酒 +白居寺 +白驹过隙 +白剧 +白剧团 +白卷 +白开水 +白口 +白口铁 +白盔 +白蜡 +白蜡虫 +白蜡树 +白兰地 +白兰花 +白朗 +白朗朗 +白浪 +白梨 +白痢 +白莲 +白莲教 +白鲢 +白琳镇 +白磷 +白鳞鱼 +白领 +白领阶层 +白令 +白令海 +白溜溜 +白龙江 +白龙乡 +白垅村 +白露 +白鹿泉乡 +白鹿原 +白鹭 +白萝卜 +白马 +白马村 +白马垅 +白马寺 +白马镇 +白鳗 +白茫茫 +白猫 +白毛风 +白毛女 +白帽 +白蒙蒙 +白米 +白米饭 +白棉 +白面 +白面儿 +白面书生 +白描 +白庙乡 +白庙子乡 +白沫 +白木耳 +白内障 +白嫩 +白尼罗河 +白袍 +白坯布 +白皮书 +白皮松 +白皮蒜 +白葡萄酒 +白棋 +白旗 +白鳍豚 +白求恩 +白区 +白髯 +白热 +白热化 +白人 +白刃战 +白日 +白日梦 +白日升天 +白日作梦 +白日做梦 +白绒绒 +白三烯 +白三叶 +白色 +白色恐怖 +白色棉 +白沙 +白沙利亚 +白沙瓦 +白沙县 +白沙镇 +白砂糖 +白煞煞 +白山 +白山黑水 +白山市 +白闪闪 +白鳝 +白芍 +白蛇 +白蛇传 +白石灰 +白食 +白事 +白手起家 +白首穷经 +白薯 +白霜 +白水 +白水城 +白水江 +白水镇 +白寺口沟 +白送 +白叟黄童 +白塔 +白塔路 +白塔山 +白塔乡 +白塔镇 +白台山 +白檀 +白汤 +白糖 +白糖水 +白藤 +白体 +白天 +白天鹅 +白条 +白条肉 +白条鸭 +白条猪 +白条子 +白铁 +白铁皮 +白厅 +白铜 +白头 +白头发 +白头翁 +白头偕老 +白头鹰 +白兔 +白文 +白钨矿 +白皙 +白细胞 +白鹇 +白熊 +白癣 +白雪 +白雪皑皑 +白雪公主 +白血病 +白血球 +白岩 +白眼 +白眼傲物 +白眼珠 +白杨 +白杨树 +白洋淀 +白药 +白衣 +白衣使者 +白衣天使 +白衣战士 +白蚁 +白邑乡 +白银 +白银市 +白银丸 +白营村 +白油 +白釉 +白羽 +白玉 +白玉兰 +白云 +白云村 +白云观 +白云区 +白云山 +白云石 +白宰鸡 +白蜘蛛 +白纸 +白纸坊 +白纸黑字 +白质 +白种人 +白昼 +白烛 +白专 +白庄 +白庄村 +白子 +白字 +白族 +白嘴鸦 +百 +百白破 +百般 +百般刁难 +百般无奈 +百宝箱 +百步穿杨 +百草 +百尺竿头 +百川归海 +百大 +百读不厌 +百二河 +百发百中 +百废待举 +百废待兴 +百废具兴 +百废俱兴 +百分 +百分比 +百分表 +百分尺 +百分点 +百分号 +百分率 +百分数 +百分之 +百分之百 +百分制 +百感 +百感丛生 +百感交集 +百舸争流 +百股胜和 +百合 +百合花 +百合种 +百花 +百花丛 +百花莲 +百花路 +百花齐放 +百花山 +百花园 +百花苑 +百花争艳 +百花洲 +百卉吐艳 +百货 +百货大楼 +百货店 +百货公司 +百货架 +百货商店 +百货业 +百家饭 +百家姓 +百家衣 +百家争鸣 +百看不厌 +百科 +百科辞典 +百科全书 +百刻图 +百孔千疮 +百口泉 +百老汇 +百老汇街 +百里 +百里挑一 +百里洲 +百里洲镇 +百炼成钢 +百灵 +百忙 +百忙之中 +百米赛 +百慕大 +百衲本 +百衲衣 +百年 +百年不遇 +百年大计 +百年史 +百年树人 +百年一遇 +百年之后 +百鸟朝凤 +百鸟呈祥 +百鸟衣 +百鸟园 +百鸟之王 +百女节 +百强县 +百泉 +百日 +百日咳 +百日维新 +百色 +百色市 +百舌鸟 +百事待兴 +百事通 +百兽 +百思不解 +百岁堂 +百态纷呈 +百听不厌 +百万 +百万富翁 +百万言 +百无禁忌 +百无聊赖 +百姓 +百姓家 +百业 +百业待兴 +百业俱兴 +百业兴旺 +百叶窗 +百叶箱 +百依百顺 +百育乡 +百战百胜 +百战不殆 +百折不回 +百折不挠 +百褶裙 +百转千回 +百子炮 +柏 +柏柏尔 +柏村 +柏各庄镇 +柏里村 +柏梁镇 +柏林 +柏林墙 +柏林市 +柏林州 +柏尼加队 +柏埔镇 +柏树 +柏树林 +柏油 +柏油路 +柏枝 +柏枝村 +摆 +摆摆 +摆布 +摆地摊 +摆动 +摆渡 +摆放 +摆架子 +摆件 +摆开 +摆阔 +摆阔气 +摆列 +摆龙门阵 +摆明 +摆弄 +摆平 +摆谱儿 +摆勺 +摆勺村 +摆设 +摆式 +摆式列车 +摆手 +摆摊 +摆摊者 +摆摊子 +摆脱 +摆样子 +摆制 +摆钟 +呗 +败 +败北 +败笔 +败坏 +败绩 +败家子 +败将 +败局 +败类 +败露 +败落 +败诉 +败诉方 +败退 +败亡 +败象 +败兴 +败絮其中 +败血病 +败血症 +败也萧何 +败叶 +败因 +败仗 +败招 +败者 +败阵 +败走麦城 +拜 +拜把兄弟 +拜拜 +拜倒 +拜读 +拜多阿 +拜访 +拜佛 +拜会 +拜见 +拜金主义 +拜科努尔 +拜伦多 +拜年 +拜年法儿 +拜年歌 +拜年会 +拜年钱 +拜泉县 +拜师 +拜寿 +拜天地 +拜托 +拜望 +拜物教 +拜谒 +拜谒者 +拜占庭 +稗 +稗子 +扳 +扳倒 +扳道夫 +扳回 +扳机 +扳平 +扳手 +扳子 +班 +班班 +班禅 +班长 +班长鞋 +班车 +班车站 +班次 +班底 +班房 +班风 +班戈 +班歌 +班规 +班后 +班会 +班机 +班吉 +班级 +班集体 +班加罗尔 +班加西市 +班克斯塘 +班里 +班列 +班轮 +班门弄斧 +班前 +班师回营 +班头 +班厦 +班友 +班员 +班主 +班主任 +班子 +班组 +班组长 +般 +般般 +般的 +般配 +颁 +颁布 +颁发 +颁奖 +颁奖会 +颁奖式 +颁行 +颁证 +颁证会 +斑 +斑白 +斑斑 +斑斑痕痕 +斑豹一窥 +斑驳 +斑驳陆离 +斑点 +斑痕 +斑鸠 +斑块 +斑斓 +斑马 +斑马线 +斑马鱼 +斑茅 +斑桃 +斑秃 +斑纹 +斑痣 +斑竹 +斑状 +搬 +搬兵 +搬动 +搬家 +搬进 +搬弄 +搬弄是非 +搬迁 +搬迁户 +搬运 +搬运车 +搬运队 +搬运工 +搬走 +瘢块 +阪 +阪神 +坂 +坂下 +坂下村 +坂仔镇 +坂子矶 +板 +板板整整 +板报 +板报栏 +板壁 +板壁房 +板擦儿 +板材 +板场乡 +板车 +板床 +板锉 +板凳 +板对 +板儿车 +板房 +板房沟 +板房沟乡 +板斧 +板柜 +板胡 +板胡曲 +板角 +板结 +板卡 +板块 +板兰根 +板蓝根 +板栗 +板栗树 +板栗园 +板料 +板门 +板门店 +板面 +板坯 +板皮 +板墙 +板桥 +板桥村 +板桥酒 +板桥口 +板桥镇 +板球 +板上钉钉 +板石 +板实 +板式 +板书 +板刷 +板鸭 +板牙 +板岩 +板眼 +板羽球 +板枣 +板轧机 +板障 +板正 +板滞 +板状 +板子 +版 +版本 +版本学家 +版次 +版画 +版画集 +版画家 +版画史 +版画系 +版刻 +版块 +版框 +版面 +版纳 +版片 +版权 +版权法 +版权局 +版权日 +版权司 +版权业 +版权页 +版式 +版税 +版图 +版协 +版心 +版种 +办 +办案 +办案费 +办案权 +办案人 +办案组 +办班 +办班费 +办报 +办报人 +办厂 +办场 +办到 +办发 +办法 +办复 +办复率 +办公 +办公处 +办公地 +办公房 +办公费 +办公会 +办公会议 +办公楼 +办公区 +办公室 +办公厅 +办公桌 +办函 +办结率 +办刊 +办刊者 +办理 +办理费 +办理制 +办赛 +办事 +办事处 +办事人 +办事员 +办事者 +办事组 +办水 +办水热 +办税 +办税厅 +办校 +办学 +办学点 +办学率 +办学者 +办证 +办证费 +半 +半壁 +半壁店 +半壁店村 +半壁河山 +半壁江山 +半边 +半边山 +半边天 +半部 +半部论语 +半侧 +半成品 +半程 +半大 +半导体 +半导体场 +半导体业 +半岛 +半道 +半地穴式 +半吊子 +半渡击 +半封建 +半工半读 +半公开 +半饥半饱 +半价 +半截 +半截子 +半斤八两 +半径 +半旧 +半决赛 +半掘浦 +半军事化 +半空 +半盔 +半拉子 +半劳动力 +半流体 +半路 +半路出家 +半梦半醒 +半年 +半年前 +半票 +半瓶醋 +半旗 +半球 +半日 +半山 +半山区 +半山上 +半山腰 +半晌 +半身不遂 +半身像 +半生不熟 +半数 +半衰期 +半私用 +半死 +半死不活 +半天 +半停产 +半途 +半途而废 +半推半就 +半文盲 +半信半疑 +半夜 +半夜三更 +半音 +半元音 +半圆 +半圆形 +半月 +半月刊 +半月形 +半遮半掩 +半殖民地 +半制品 +半子 +半自动 +半自给 +半自耕农 +伴 +伴唱 +伴儿 +伴君 +伴郎 +伴侣 +伴娘 +伴入 +伴生 +伴生气 +伴生树 +伴伺 +伴随 +伴随着 +伴同 +伴舞 +伴星 +伴音 +伴游 +伴有 +伴奏 +伴奏带 +伴奏声 +扮 +扮成 +扮鬼脸 +扮相 +扮演 +扮演者 +扮作 +拌 +拌和机 +拌种 +拌嘴 +绊 +绊绊磕磕 +绊倒 +绊脚石 +绊马索 +瓣 +瓣瓣 +瓣儿 +瓣膜 +邦 +邦邦硬 +邦长 +邦达 +邦迪 +邦典村 +邦国 +邦交 +邦交国 +邦联 +邦坦 +邦威 +邦政府 +帮 +帮爱 +帮办 +帮帮 +帮衬 +帮厨 +帮带 +帮倒忙 +帮扶 +帮扶带 +帮扶点 +帮扶户 +帮扶团 +帮工 +帮孤助残 +帮会 +帮教 +帮接工 +帮困 +帮忙 +帮派 +帮贫济困 +帮贫致富 +帮贫助困 +帮腔 +帮丘河 +帮手 +帮套 +帮凶 +帮助 +帮助者 +帮子 +梆硬 +梆子 +梆子腔 +绑 +绑带 +绑匪 +绑架 +绑架者 +绑票 +绑扎 +榜 +榜山镇 +榜上无名 +榜上有名 +榜首 +榜文 +榜眼 +榜样 +榜样性 +膀 +膀臂 +膀粗腰圆 +膀大腰圆 +膀胱 +膀胱癌 +膀阔腰圆 +膀子 +蚌埠 +蚌埠市 +蚌雕 +蚌壳 +傍 +傍晚 +棒 +棒棒军 +棒冰 +棒材 +棒棰岛 +棒棰柳 +棒槌 +棒打鸳鸯 +棒儿香 +棒垒球 +棒球 +棒球队 +棒曲霉素 +棒状 +棒子 +棒子面 +棒子面粥 +磅 +磅礴 +磅秤 +磅湛 +磅湛省 +镑 +包 +包办 +包帮 +包包 +包保 +包背装 +包庇 +包庇罪 +包藏祸心 +包产 +包产到户 +包产户 +包场 +包抄 +包车 +包乘制 +包乘组 +包村 +包村组 +包打天下 +包点 +包饭 +包房 +包扶 +包袱 +包袱井 +包干 +包干儿 +包干制 +包钢 +包工 +包工头 +包公 +包公祠 +包购包销 +包谷 +包谷壳 +包管 +包裹 +包裹单 +包含 +包涵 +包河 +包户 +包换 +包伙 +包机 +包间费 +包教包会 +包金 +包括 +包揽 +包笼 +包罗 +包罗万象 +包门 +包米 +包膜 +包赔 +包皮 +包票 +包容 +包容力 +包容性 +包身工 +包身工制 +包身契 +包刷处 +包探 +包头 +包头市 +包团 +包退 +包围 +包围圈 +包厢 +包销 +包销商 +包心菜 +包修 +包养 +包衣 +包衣率 +包衣种 +包圆 +包圆儿 +包月制 +包蕴 +包扎 +包扎带 +包治百病 +包装 +包装厂 +包装袋 +包装工 +包装罐 +包装盒 +包装物 +包装箱 +包装用 +包装纸 +包子 +包子铺 +包租 +包租费 +孢子 +孢子粉 +孢子植物 +苞 +苞菜 +苞谷 +苞谷饭 +苞蕾 +苞米 +胞波 +胞弟 +胞妹 +胞胎 +胞兄 +胞兄弟 +胞衣 +煲 +龅牙 +褒 +褒贬 +褒贬不一 +褒词 +褒奖 +褒恤 +褒扬 +褒扬状 +褒义 +褒义词 +褒誉 +褒者 +雹 +雹灾 +雹子 +宝 +宝安 +宝安区 +宝宝 +宝贝 +宝贝儿 +宝贝疙瘩 +宝藏 +宝刀 +宝刀不老 +宝岛 +宝坻 +宝坻县 +宝地 +宝顶 +宝顶山 +宝丰 +宝丰县 +宝盖儿 +宝盖头 +宝钢 +宝贵 +宝号 +宝鸡 +宝鸡市 +宝鸡县 +宝剑 +宝窟 +宝库 +宝莲灯 +宝林乡 +宝马 +宝盆 +宝瓶 +宝瓶座 +宝器 +宝清县 +宝山 +宝山村 +宝山区 +宝山镇 +宝商 +宝石 +宝塔 +宝塔菜 +宝塔山 +宝塔形 +宝汤村 +宝物 +宝匣 +宝象河 +宝应 +宝应拾屯 +宝应县 +宝玉 +宝元队 +宝中之宝 +宝珠 +宝珠寺 +宝座 +饱 +饱餐 +饱尝 +饱嗝儿 +饱含 +饱和 +饱和点 +饱和度 +饱和量 +饱和溶液 +饱和色 +饱经 +饱经沧桑 +饱经风霜 +饱经忧患 +饱览 +饱历 +饱满 +饱暖 +饱食终日 +饱受 +饱学 +饱眼福 +饱蕴 +饱蘸 +保 +保安 +保安部 +保安队 +保安法 +保安费 +保安局 +保安科 +保安厅 +保安业 +保安员 +保包制 +保北 +保本 +保镖 +保不定 +保不齐 +保不住 +保藏 +保长 +保持 +保持法 +保持性 +保持者 +保存 +保存本 +保存率 +保存期 +保单 +保德 +保定 +保定市 +保额 +保方 +保费 +保福乡 +保管 +保管部 +保管费 +保管人 +保管室 +保管员 +保国 +保国村 +保国乡 +保函 +保和殿 +保户 +保护 +保护编 +保护层 +保护地 +保护阀 +保护法 +保护费 +保护关税 +保护国 +保护剂 +保护价 +保护局 +保护林 +保护率 +保护膜 +保护鸟 +保护牌 +保护期 +保护器 +保护区 +保护人 +保护伞 +保护色 +保护神 +保护套 +保护性 +保护油 +保护者 +保护主义 +保皇党 +保皇派 +保级 +保级战 +保加利亚 +保家卫国 +保甲 +保价 +保价信 +保驾 +保荐 +保荐人 +保健 +保健操 +保健茶 +保健法 +保健局 +保健品 +保健品厂 +保健食品 +保健室 +保健所 +保健箱 +保健型 +保健医 +保健院 +保健站 +保浇地 +保洁 +保洁队 +保洁费 +保洁工 +保洁女 +保洁权 +保洁员 +保靖 +保靖县 +保举 +保军转民 +保康 +保康县 +保量 +保龄 +保龄球 +保龄球道 +保龄球馆 +保龄球热 +保龄球赛 +保留 +保留剧目 +保留率 +保留期 +保留区 +保满路 +保盟 +保密 +保密法 +保密局 +保密性 +保密员 +保密制 +保苗 +保苗率 +保命田 +保姆 +保暖 +保暖房 +保暖棚 +保暖性 +保票 +保坪乡 +保期 +保全 +保人 +保山 +保山市 +保墒 +保时 +保释 +保释金 +保守 +保守党 +保守派 +保守主义 +保水 +保税 +保税仓 +保税区 +保送 +保送生 +保通社 +保土 +保外 +保外就医 +保卫 +保卫部 +保卫处 +保卫局 +保卫科 +保卫员 +保卫战 +保卫者 +保温 +保温杯 +保温房 +保温瓶 +保温屋 +保鲜 +保鲜剂 +保险 +保险杯 +保险处 +保险带 +保险单 +保险刀 +保险灯 +保险额 +保险法 +保险费 +保险费率 +保险费用 +保险杠 +保险柜 +保险号 +保险界 +保险金 +保险局 +保险卡 +保险人 +保险商 +保险丝 +保险所 +保险箱 +保险业 +保险业界 +保险员 +保险者 +保险证 +保险装置 +保协 +保修 +保修包换 +保修单 +保修卡 +保修期 +保需 +保畜 +保养 +保优汰劣 +保有 +保有量 +保有率 +保佑 +保育 +保育费 +保育会 +保育生 +保育员 +保育院 +保障 +保障法 +保障费 +保障金 +保障线 +保障型 +保障性 +保真 +保证 +保证金 +保证卡 +保证率 +保证期 +保证人 +保证书 +保值 +保值率 +保值期 +保质 +保质保量 +保质期 +保重 +保住 +保准 +保准儿 +堡 +堡安村 +堡口村 +堡垒 +堡子村 +葆 +报 +报案 +报案人 +报靶 +报靶员 +报本坊 +报表 +报偿 +报仇 +报仇雪恨 +报酬 +报酬率 +报出 +报出地 +报橱 +报春 +报春花 +报答 +报单 +报导 +报到 +报到处 +报到机 +报到卡 +报道 +报道面 +报道社 +报道员 +报道组 +报端 +报恩 +报废 +报废品 +报废站 +报复 +报复性 +报复主义 +报告 +报告单 +报告会 +报告期 +报告人 +报告书 +报告厅 +报告团 +报告文学 +报告员 +报告者 +报告制 +报关 +报关单 +报关行 +报关员 +报馆 +报国 +报国情 +报国无门 +报国志 +报话机 +报价 +报价声 +报架 +报建 +报建率 +报奖 +报捷 +报界 +报经 +报警 +报警点 +报警器 +报警器业 +报警台 +报警亭 +报警网 +报警仪 +报刊 +报刊费 +报刊架 +报刊界 +报刊社 +报刊业 +报考 +报考者 +报栏 +报廊 +报领 +报名 +报名点 +报名费 +报名者 +报幕 +报幕员 +报盘 +报批 +报前 +报请 +报人 +报嫂 +报商 +报社 +报审制 +报升 +报失 +报时 +报时钟 +报收 +报数 +报送 +报摊 +报摊儿 +报亭 +报停 +报童 +报头 +报文 +报务 +报喜 +报喜者 +报箱 +报销 +报晓 +报效 +报协 +报信 +报修 +报修单 +报样 +报业 +报以 +报应 +报忧 +报忧者 +报友 +报章 +报章杂志 +报账 +报之以李 +报知 +报纸 +报纸者 +抱 +抱抱 +抱病 +抱残守缺 +抱成一团 +抱定 +抱佛脚 +抱负 +抱憾 +抱恨 +抱恨终身 +抱歉 +抱屈 +抱拳礼 +抱石怀沙 +抱头 +抱头大哭 +抱头鼠窜 +抱头痛哭 +抱团 +抱薪救火 +抱养 +抱有 +抱怨 +豹 +豹猫 +豹头 +豹纹 +豹子 +鲍峡镇 +鲍鱼 +暴 +暴病 +暴潮 +暴跌 +暴动 +暴发 +暴发户 +暴风 +暴风雪 +暴风雨 +暴风骤雨 +暴富 +暴洪 +暴虎冯河 +暴举 +暴君 +暴客 +暴力 +暴力化 +暴力片 +暴力式 +暴力团 +暴利 +暴戾 +暴敛 +暴烈 +暴露 +暴露文学 +暴露无遗 +暴虐 +暴晒 +暴殄天物 +暴跳如雷 +暴徒 +暴行 +暴腌 +暴腌肉 +暴饮暴食 +暴雨 +暴躁 +暴涨 +暴胀 +暴政 +暴走族 +爆 +爆炒 +爆出 +爆跌 +爆肚儿 +爆发 +爆发力 +爆发星 +爆发性 +爆发音 +爆冷 +爆冷门 +爆裂 +爆裂声 +爆裂性 +爆满 +爆米花 +爆破 +爆破洞 +爆破法 +爆破手 +爆破筒 +爆炸 +爆炸案 +爆炸波 +爆炸力 +爆炸品 +爆炸声 +爆炸物 +爆炸性 +爆绽 +爆竹 +爆竹声 +卑 +卑鄙 +卑尔根 +卑躬屈膝 +卑贱 +卑劣 +卑怯 +卑微 +卑污 +卑下 +杯 +杯杯 +杯壁 +杯弓蛇影 +杯口 +杯盘狼藉 +杯赛 +杯水 +杯水车薪 +杯沿 +杯影 +杯中 +杯中物 +杯子 +悲 +悲哀 +悲惨 +悲惨惨 +悲怆 +悲悼 +悲愤 +悲歌 +悲观 +悲观失望 +悲观主义 +悲号 +悲欢 +悲欢离合 +悲剧 +悲剧感 +悲剧式 +悲剧性 +悲苦 +悲泪 +悲凉 +悲悯 +悲戚 +悲泣 +悲切 +悲伤 +悲伤欲绝 +悲叹 +悲天悯人 +悲恸 +悲痛 +悲痛欲绝 +悲惋 +悲喜 +悲喜交集 +悲喜交加 +悲喜剧 +悲壮 +碑 +碑版 +碑额 +碑基 +碑记 +碑碣 +碑刻 +碑廊 +碑林 +碑面 +碑名 +碑铭 +碑身 +碑石 +碑帖 +碑头 +碑文 +碑学 +碑阴 +碑志 +碑柱 +碑座 +北 +北爱 +北爱党 +北爱尔兰 +北安 +北安市 +北岸 +北半球 +北碚区 +北边 +北冰洋 +北部 +北部湾 +北侧 +北叉口村 +北朝 +北朝鲜 +北辰 +北辰区 +北城 +北池子 +北川江 +北大 +北大仓 +北大荒 +北大派 +北大西洋 +北大营 +北大营村 +北戴河 +北导堤 +北道区 +北电 +北甸子乡 +北东端 +北洞山 +北斗 +北斗星 +北端 +北段 +北伐 +北伐军 +北伐战争 +北方 +北方邦 +北方话 +北方局 +北方佬 +北非 +北非洲 +北风 +北钢 +北古村 +北固碾 +北固碾村 +北关 +北关区 +北国 +北海 +北海村 +北海道 +北海港 +北海市 +北汉 +北航 +北河 +北河乡 +北河沿 +北黑石村 +北横东街 +北后 +北胡 +北回归线 +北极 +北极带 +北极点 +北极光 +北极狐 +北极圈 +北极星 +北极熊 +北江 +北疆 +北郊 +北郊区 +北角 +北较场 +北教场 +北窖镇 +北街 +北界城 +北界城村 +北京 +北京城 +北京大学 +北京道 +北京队 +北京籍 +北京路 +北京人 +北京市 +北京团 +北京鸭 +北京猿人 +北京站 +北科大 +北空 +北控 +北昆 +北岚村 +北郎中 +北郎中村 +北里 +北陵 +北流 +北流江 +北流市 +北流县 +北龙 +北娄村 +北麓 +北仑 +北仑港 +北仑河口 +北仑区 +北马集村 +北美 +北美局 +北美洲 +北门 +北门东 +北面 +北南方 +北南向 +北农大 +北欧 +北欧队 +北盘江 +北票市 +北平 +北平道 +北平市 +北坡 +北坡洋县 +北普陀 +北七家镇 +北齐 +北齐人 +北汽 +北轻 +北轻汽 +北区 +北三环 +北三环路 +北沙滩 +北上 +北师大 +北师店乡 +北石店乡 +北水南调 +北四环 +北宋 +北台 +北太平庄 +北厅 +北头 +北图 +北土城 +北威州 +北纬 +北魏 +北温带 +北无 +北吴村 +北务 +北务乡 +北乡 +北孝义乡 +北新街 +北新桥 +北亚 +北洋 +北洋军阀 +北冶乡 +北医大 +北影 +北影厂 +北隅 +北园镇 +北缘 +北苑 +北约 +北约克区 +北岳 +北岳区 +北运菜 +北韵 +北站 +北赵村 +北枝 +北周 +贝 +贝布托 +贝雕 +贝多芬 +贝尔蒙 +贝方 +贝加尔 +贝加尔湖 +贝卡 +贝壳 +贝壳馆 +贝克萨区 +贝劳 +贝类 +贝利 +贝鲁特 +贝伦 +贝伦市 +贝母 +贝宁 +贝桑松 +贝叶经 +贝叶树 +备 +备案 +备案单 +备播 +备不住 +备查 +备抵金 +备而不用 +备份 +备付金 +备付金率 +备付率 +备感 +备感荣幸 +备耕 +备荒 +备加 +备件 +备降 +备考 +备课 +备料 +备品 +备齐 +备勤 +备勤组 +备受 +备忘录 +备选 +备要 +备用 +备用金 +备用品 +备用胎 +备有 +备战 +备种 +备注 +备足 +背 +背板 +背包 +背包带 +背包袱 +背部 +背搭子 +背带 +背带式 +背道而驰 +背地里 +背兜 +背篼 +背斗 +背对 +背风 +背风处 +背负 +背负式 +背光性 +背后 +背悔 +背脊 +背街 +背井离乡 +背景 +背景台 +背静 +背靠背 +背离 +背篓 +背毛 +背面 +背谬 +背囊 +背叛 +背鳍 +背弃 +背日性 +背山起楼 +背时 +背书 +背水一战 +背水阵 +背诵 +背痛 +背斜 +背斜层 +背心 +背心装 +背信弃义 +背阴 +背影 +背运 +背着 +钡 +钡餐 +钡核 +钡盐 +倍 +倍场 +倍儿 +倍感 +倍加 +倍受 +倍数 +倍增 +悖 +悖晦 +被 +被包 +被保险人 +被捕 +被采访人 +被采访者 +被乘数 +被冲击方 +被除数 +被打者 +被代理人 +被袋 +被单 +被担保人 +被盗 +被盗案 +被盗物 +被调查者 +被动 +被动免疫 +被动式 +被动型 +被罚者 +被访问者 +被访者 +被分解数 +被服 +被服务者 +被俘 +被覆 +被告 +被告人 +被告席 +被关爱者 +被管理者 +被害 +被害人 +被害者 +被毁灭者 +被纪念者 +被加数 +被减数 +被角 +被叫 +被叫方 +被救 +被救者 +被卷 +被开方数 +被控人 +被里 +被领导者 +被录用者 +被面 +被骗者 +被迫 +被窃 +被褥 +被褥者 +被上诉方 +被上诉人 +被收购方 +被诉人 +被套 +被特赦者 +被特许者 +被提名人 +被统治者 +被头 +被窝 +被窝儿 +被卧 +被选举权 +被选举者 +被冤枉者 +被约见人 +被占领区 +被占领土 +被罩 +被征服者 +被执行人 +被转载率 +被装 +被子 +被子植物 +惫 +辈 +辈出 +辈儿 +辈分 +辈份 +辈数 +辈子 +蓓蕾 +奔 +奔波 +奔波如梭 +奔驰 +奔放 +奔赴 +奔流 +奔马 +奔马图 +奔忙 +奔命 +奔跑 +奔丧 +奔驶 +奔腾 +奔腾激越 +奔头 +奔头儿 +奔突 +奔袭 +奔泻 +奔涌 +奔月 +奔逐 +奔走 +奔走呼号 +奔走相告 +贲门 +贲张 +本 +本案 +本版 +本报 +本本 +本本分分 +本本主义 +本币 +本部 +本草经 +本厂 +本场 +本次 +本村 +本当 +本地 +本地化 +本队 +本儿 +本法 +本分 +本分人 +本该 +本钢 +本港 +本格拉 +本格拉省 +本固枝荣 +本国 +本级 +本辑 +本纪 +本家 +本家儿 +本届 +本金 +本金额 +本剧 +本刊 +本科 +本科班 +本科段 +本科率 +本科生 +本科者 +本来 +本来面目 +本栏 +本垒打 +本利 +本领 +本轮 +本名 +本命年 +本末 +本末倒置 +本能 +本年 +本片 +本票 +本期 +本钱 +本区 +本人 +本赛 +本嗓 +本色 +本色调 +本上有名 +本社 +本身 +本省 +本世纪 +本市 +本事 +本书 +本数 +本题 +本体 +本体论 +本条 +本土 +本外币 +本位 +本位货币 +本位主义 +本味 +本文 +本息 +本溪 +本溪籍 +本溪市 +本戏 +本县 +本乡 +本乡本土 +本相 +本小利大 +本校 +本心 +本行 +本性 +本义 +本意 +本影 +本园 +本原 +本源 +本院 +本月 +本月底 +本站 +本真 +本镇 +本职 +本职工作 +本质 +本质论 +本质性 +本州 +本州岛 +本周 +本周末 +本周一 +本诸 +本主儿 +本专科 +本专科生 +本着 +本子 +本字 +本组 +苯 +苯胺 +苯丙胺类 +苯酚 +苯基 +苯甲酸 +苯教 +苯乙烯 +坌 +笨 +笨蛋 +笨活儿 +笨家伙 +笨鸟先飞 +笨手笨脚 +笨重 +笨拙 +崩 +崩岸 +崩决 +崩溃 +崩裂 +崩龙族 +崩塌 +绷 +绷带 +绷硬 +绷子 +甭 +甭管 +甭提 +泵 +泵房 +泵业 +泵站 +迸 +迸发 +迸裂 +迸射 +甏 +蹦 +蹦蹦 +蹦蹦车 +蹦蹦跳跳 +蹦床 +蹦迪 +蹦子 +逼 +逼岸 +逼报 +逼供 +逼和 +逼近 +逼进 +逼良为娼 +逼迫 +逼抢 +逼上梁山 +逼使 +逼视 +逼肖 +逼仄 +逼债 +逼真 +逼真感 +逼租 +荸荠 +鼻 +鼻部 +鼻窦 +鼻窦炎 +鼻端 +鼻儿 +鼻化元音 +鼻尖 +鼻孔 +鼻梁 +鼻梁儿 +鼻梁骨 +鼻梁子 +鼻腔 +鼻青脸肿 +鼻饲 +鼻涕 +鼻洼子 +鼻弯 +鼻息 +鼻血 +鼻咽癌 +鼻烟 +鼻烟壶 +鼻炎 +鼻翼 +鼻音 +鼻韵母 +鼻子 +鼻祖 +匕首 +比 +比比 +比比划划 +比比皆是 +比比看 +比不上 +比额 +比尔 +比方 +比分 +比附 +比格尔 +比国 +比哈尔邦 +比合法 +比划 +比价 +比肩 +比肩而立 +比肩而邻 +比较 +比较法 +比较价格 +比较文学 +比较性 +比阔气 +比拉米德 +比利时 +比利时队 +比例 +比例表 +比例尺 +比例规 +比例制 +比量 +比邻 +比率 +比美 +比目鱼 +比拟 +比奇 +比起 +比热 +比热戈斯 +比如 +比如说 +比萨 +比萨饼 +比萨屋 +比赛 +比赛场 +比赛灯 +比赛服 +比赛期 +比色计 +比上不足 +比绍 +比绍城 +比绍市 +比什凯克 +比试 +比索 +比特 +比武 +比下有余 +比翼 +比翼竞飞 +比翼鸟 +比翼齐飞 +比翼双飞 +比喻 +比照 +比值 +比重 +比重计 +比作 +比做 +吡 +吡啶 +彼 +彼岸 +彼岸性 +彼此 +彼得保罗 +彼得堡 +彼得格勒 +彼时 +彼一时 +秕糠 +秕子 +俾 +俾路支省 +笔 +笔笔 +笔触 +笔答 +笔道 +笔底下 +笔调 +笔端 +笔法 +笔锋 +笔杆 +笔杆子 +笔耕 +笔耕不辍 +笔耕墨耘 +笔耕者 +笔供 +笔划 +笔画 +笔会 +笔迹 +笔记 +笔记本 +笔记簿 +笔技 +笔架 +笔尖 +笔简意深 +笔力 +笔录 +笔录体 +笔路 +笔帽 +笔名 +笔墨 +笔墨官司 +笔墨纸砚 +笔铅 +笔势 +笔试 +笔手 +笔顺 +笔算 +笔谈 +笔套 +笔体 +笔挺 +笔筒 +笔头 +笔头儿 +笔误 +笔洗 +笔下 +笔心 +笔芯 +笔砚 +笔译 +笔意 +笔油 +笔友 +笔札 +笔者 +笔直 +笔致 +鄙薄 +鄙夫 +鄙吝 +鄙陋 +鄙弃 +鄙人 +鄙视 +鄙俗 +鄙夷 +鄙意 +币 +币面 +币值 +币制 +币种 +必 +必备 +必备书 +必不可缺 +必不可少 +必答题 +必得 +必定 +必读 +必恭必敬 +必将 +必经 +必然 +必然王国 +必然性 +必胜 +必亡 +必先予之 +必修 +必修课 +必须 +必需 +必需品 +必要 +必要产品 +必要劳动 +必要条件 +必要性 +必也正名 +必由之路 +必争之地 +毕 +毕分办 +毕恭毕敬 +毕节 +毕竟 +毕生 +毕现 +毕肖 +毕业 +毕业班 +毕业生 +毕业证 +闭 +闭闭 +闭关 +闭关锁国 +闭关自守 +闭馆 +闭合 +闭合电路 +闭合性 +闭会 +闭卷 +闭口不谈 +闭口龟 +闭口价 +闭路电视 +闭门不出 +闭门羹 +闭门思过 +闭门谢客 +闭门造车 +闭目塞听 +闭目养神 +闭幕 +闭幕词 +闭幕会 +闭幕式 +闭塞 +闭市价 +闭锁 +闭月羞花 +庇 +庇护 +庇护国 +庇护所 +哔叽 +毖 +陛下 +毙 +毙命 +婢女 +敝帚自珍 +弼时镇 +筚路蓝缕 +痹 +痹论 +痹痛平 +痹症 +蓖麻 +蓖麻蚕 +蓖麻子 +裨益 +辟 +辟谣 +弊 +弊病 +弊端 +弊害 +弊政 +碧 +碧波 +碧波万顷 +碧草 +碧澄 +碧池 +碧葱 +碧海 +碧黄 +碧空 +碧蓝 +碧浪 +碧绿 +碧绿如茵 +碧萝春 +碧螺春 +碧青 +碧青碧青 +碧水 +碧桃 +碧天 +碧头村 +碧瓦 +碧血 +碧眼 +碧幽幽 +碧油 +碧油油 +碧玉 +碧云里 +碧云天 +碧湛湛 +碧洲 +箅子 +蔽 +蔽日 +蔽日遮天 +蔽塞 +蔽体 +壁 +壁板 +壁报 +壁橱 +壁灯 +壁峰相连 +壁挂 +壁挂式 +壁柜 +壁虎 +壁画 +壁画库 +壁龛 +壁垒 +壁垒森严 +壁立 +壁炉 +壁钱 +壁球 +壁上 +壁室 +壁毯 +壁纸 +壁柱 +篦子 +避 +避而不谈 +避风 +避风港 +避寒 +避讳 +避居 +避开 +避雷器 +避雷线 +避雷针 +避乱 +避免 +避难 +避难层 +避难间 +避难就易 +避难权 +避难者 +避其所短 +避让 +避暑 +避税 +避嫌 +避险 +避孕 +避孕环 +避孕率 +避孕片 +避孕套 +避孕丸 +避孕药 +避孕针 +避震器 +避重就轻 +臂 +臂膀 +臂膊 +臂徽 +臂力 +臂弯 +臂腕 +臂章 +璧山 +边 +边裁 +边城 +边陲 +边带 +边地 +边儿 +边防 +边防队 +边防局 +边防军 +边防连 +边防团 +边防系 +边防线 +边防站 +边封 +边锋 +边关 +边海防 +边花闲草 +边荒 +边际 +边检 +边检处 +边检站 +边将 +边疆 +边疆区 +边疆史 +边角 +边角地 +边角料 +边角余料 +边界 +边界线 +边境 +边境区 +边境县 +边境线 +边卡 +边款 +边框 +边路 +边贸 +边门 +边民 +边民证 +边僻 +边区 +边塞 +边塞诗 +边上 +边上市 +边饰 +边线 +边沿 +边音 +边隅 +边缘 +边缘化 +边缘科学 +边缘型 +边缘性 +边远 +边寨 +边纵 +砭 +砭石 +编 +编报 +编采 +编采播 +编成 +编程 +编创 +编创人员 +编导 +编导家 +编导演 +编导演职 +编导者 +编订 +编订馆 +编读 +编队 +编发 +编号 +编后 +编绘 +编缉 +编集 +编辑 +编辑部 +编辑股 +编辑家 +编辑奖 +编辑室 +编辑者 +编辑组 +编剧 +编卷 +编录 +编码 +编码夹 +编目 +编目卡 +编内 +编年 +编年史 +编年史式 +编年体 +编排 +编配 +编磬 +编入 +编审 +编审科 +编图者 +编外 +编委 +编委会 +编舞师 +编校 +编写 +编写者 +编写组 +编选 +编选者 +编演 +编译 +编译程序 +编译馆 +编译局 +编译器 +编译语言 +编印 +编印发 +编印者 +编余 +编造 +编者 +编者按 +编者案 +编织 +编织厂 +编织袋 +编织机 +编织品 +编织业 +编制 +编制法 +编制数 +编制员 +编钟 +编著 +编著者 +编撰 +编撰者 +编组 +编组站 +编纂 +煸 +蝙蝠 +蝙蝠侠 +鞭 +鞭辟入里 +鞭策 +鞭长莫及 +鞭笞 +鞭打 +鞭花 +鞭毛 +鞭毛虫 +鞭毛藻 +鞭炮 +鞭炮声 +鞭炮瘾 +鞭声 +鞭挞 +鞭子 +贬 +贬褒 +贬斥 +贬词 +贬辞 +贬低 +贬幅 +贬损 +贬义 +贬抑 +贬者 +贬值 +贬值率 +贬职 +扁 +扁柏 +扁锉 +扁担 +扁豆 +扁骨 +扁率 +扁平 +扁平足 +扁桃 +扁桃体 +扁桃体炎 +扁桃腺 +扁形动物 +扁鱼 +扁圆形 +扁舟 +匾 +匾额 +匾牌 +褊 +褊狭 +汴河 +汴京 +汴梁 +汴水 +汴州 +拚命 +便 +便餐 +便车 +便当 +便道 +便道砖 +便毒 +便饭 +便服 +便函 +便后 +便壶 +便笺 +便捷 +便览 +便利 +便利店 +便了 +便路 +便帽 +便门 +便秘 +便民 +便民店 +便民化 +便民卡 +便民利民 +便民牌 +便民箱 +便盆 +便桥 +便人 +便士 +便所 +便条 +便桶 +便携 +便携式 +便鞋 +便血 +便宴 +便衣 +便宜 +便宜货 +便于 +便装 +变 +变本加厉 +变成 +变蛋 +变电器 +变电所 +变电亭 +变电站 +变调 +变动 +变动表 +变动不居 +变动性 +变动者 +变法 +变法维新 +变废为宝 +变幅 +变革 +变更 +变更关 +变故 +变卦 +变轨 +变化 +变化多端 +变化率 +变化莫测 +变化球 +变化图 +变化万端 +变化无常 +变化有致 +变幻 +变幻莫测 +变幻无常 +变换 +变价 +变节 +变局 +变例 +变脸 +变量 +变流器 +变乱 +变卖 +变频 +变频管 +变迁 +变色 +变色镜 +变色龙 +变数 +变速 +变速器 +变速箱 +变速运动 +变态 +变态反应 +变天 +变天账 +变通 +变为 +变位 +变味 +变温层 +变温动物 +变文 +变戏法 +变现 +变现性 +变线 +变相 +变心 +变新 +变星 +变形 +变形虫 +变型 +变性 +变性酒精 +变压器 +变压器厂 +变样 +变异 +变异型 +变异性 +变造 +变则通 +变质 +变质岩 +变种 +变子 +变阻器 +遍 +遍布 +遍采 +遍尝 +遍地 +遍地开花 +遍访 +遍及 +遍燃 +遍身 +遍体 +遍体鳞伤 +遍野 +辨 +辨别 +辨别力 +辨认 +辨识 +辨析 +辨证 +辨症 +辩 +辩白 +辩驳 +辩才 +辩称 +辩护 +辩护律师 +辩护权 +辩护人 +辩护士 +辩解 +辩解性 +辩论 +辩论会 +辩论赛 +辩论声 +辩明 +辩士 +辩题 +辩学 +辩证 +辩证法 +辩证法观 +辩证论者 +辩证逻辑 +辫 +辫子 +彪炳 +彪炳春秋 +彪炳千秋 +彪炳史册 +彪形 +彪形大汉 +标 +标榜 +标本 +标本虫 +标本馆 +标本兼治 +标本室 +标兵 +标兵船 +标兵户 +标兵库 +标尺 +标的 +标的额 +标灯 +标底 +标点 +标点符号 +标定 +标段 +标吨 +标杆 +标竿 +标高 +标格 +标号 +标记 +标记原子 +标价 +标价牌 +标价签 +标金 +标立 +标量 +标煤 +标明 +标牌 +标签 +标签机 +标枪 +标石 +标识 +标识符 +标识号 +标识物 +标示 +标书 +标题 +标题音乐 +标王 +标线 +标新 +标新立异 +标引词 +标语 +标语牌 +标值 +标志 +标志处 +标志点 +标志牌 +标志旗 +标志物 +标志型 +标志性 +标致 +标注 +标注值 +标桩 +标准 +标准单位 +标准电阻 +标准分 +标准粉 +标准杆 +标准岗 +标准公顷 +标准规 +标准化 +标准化法 +标准级 +标准价 +标准间 +标准件 +标准局 +标准科 +标准论 +标准煤 +标准时 +标准速 +标准台 +标准体 +标准团 +标准舞 +标准箱 +标准像 +标准型 +标准音 +标准语 +标准源 +标准值 +膘 +膘肥筋劲 +膘肥肉厚 +膘肥体壮 +膘情 +镖 +镖客 +镖师 +飙升 +表 +表白 +表报 +表表 +表册 +表层 +表尺 +表达 +表达式 +表达题 +表带 +表弟 +表哥 +表格 +表功 +表冠 +表记 +表姐 +表姐妹 +表解 +表舅 +表决 +表决器 +表决权 +表里 +表里如一 +表里山河 +表链 +表露 +表率 +表妹 +表蒙子 +表面 +表面波 +表面层 +表面化 +表面积 +表面文章 +表面性 +表面张力 +表明 +表盘 +表皮 +表亲 +表情 +表嫂 +表墒 +表身 +表示 +表叔 +表述 +表态 +表态会 +表头 +表土 +表现 +表现力 +表现型 +表现性 +表现欲 +表现者 +表现主义 +表象 +表兄弟 +表演 +表演场 +表演唱 +表演队 +表演会 +表演机 +表演家 +表演奖 +表演区 +表演赛 +表演史 +表演系 +表演性 +表演者 +表扬 +表扬电 +表扬稿 +表扬话 +表扬信 +表意文字 +表语 +表彰 +表彰会 +表针 +表征 +表侄 +表侄女 +表字 +婊子 +裱 +裱糊 +鳔胶 +憋 +憋闷 +憋气 +憋屈 +憋足劲 +鳖 +鳖边 +鳖精 +别 +别别扭扭 +别称 +别出机杼 +别出心裁 +别处 +别的 +别动队 +别国 +别号 +别集 +别家 +别具风采 +别具匠心 +别具特色 +别具一格 +别开生面 +别来无恙 +别类 +别离 +别连科 +别名 +别内河 +别扭 +别妻离子 +别情 +别人 +别史 +别是 +别树一帜 +别墅 +别墅区 +别墅式 +别说 +别提 +别无出路 +别无二致 +别无分店 +别无良策 +别无选择 +别样 +别有洞天 +别有风味 +别有见地 +别有情趣 +别有天地 +别有用心 +别针 +别致 +别字 +蹩 +蹩脚 +瘪 +瘪瘪的 +瘪三 +瘪嘴 +宾 +宾词 +宾格尔省 +宾馆 +宾馆化 +宾馆业 +宾客 +宾朋 +宾县 +宾阳 +宾语 +宾至如归 +宾主 +彬彬有礼 +彬县 +傧相 +滨 +滨城 +滨海 +滨海区 +滨海县 +滨河 +滨湖 +滨江 +滨江道 +滨江路 +滨州 +滨州市 +滨洲 +缤纷 +槟城 +槟榔 +槟子 +镔铁 +濒 +濒海 +濒临 +濒死 +濒危 +濒危种 +濒于 +摈 +摈除 +摈弃 +摈逐 +殡车 +殡工 +殡敛 +殡仪 +殡仪馆 +殡葬 +殡葬工 +膑足 +髌骨 +鬓 +鬓发 +鬓间 +鬓角 +鬓毛 +冰 +冰棒 +冰雹 +冰暴 +冰冰 +冰层 +冰碴 +冰场 +冰城 +冰川 +冰川期 +冰川所 +冰川学 +冰床 +冰醋酸 +冰镩 +冰袋 +冰蛋 +冰刀 +冰岛 +冰道 +冰灯 +冰灯展 +冰点 +冰雕 +冰雕群 +冰雕玉琢 +冰调 +冰冻 +冰冻期 +冰冻三尺 +冰洞 +冰毒 +冰风暴 +冰封雪裹 +冰封雪飘 +冰峰 +冰峰雪岭 +冰盖 +冰盖层 +冰糕 +冰镐 +冰挂 +冰柜 +冰棍 +冰棍儿 +冰海 +冰河 +冰河期 +冰壶 +冰湖 +冰花 +冰魂 +冰激凌 +冰窖 +冰结 +冰晶 +冰晶石 +冰窟 +冰窟窿 +冰块 +冰棱 +冰冷 +冰粒 +冰凉 +冰凌 +冰凌花 +冰溜 +冰轮 +冰面 +冰排 +冰啤 +冰片 +冰瓶 +冰期 +冰淇淋 +冰钎 +冰橇 +冰清玉洁 +冰情 +冰球 +冰球场 +冰球队 +冰球馆 +冰球界 +冰球赛 +冰球史 +冰区 +冰山 +冰上 +冰舌 +冰释 +冰霜 +冰水 +冰笋 +冰塔林 +冰台 +冰态水 +冰坛 +冰糖 +冰糖葫芦 +冰天雪地 +冰铜 +冰坨 +冰温 +冰舞 +冰箱 +冰箱门 +冰箱业 +冰消瓦解 +冰协 +冰鞋 +冰鞋跟 +冰芯 +冰雪 +冰雪崩 +冰雪节 +冰雪界 +冰雪期 +冰样 +冰雨 +冰洲石 +冰柱 +冰砖 +冰锥 +兵 +兵变 +兵不厌诈 +兵部 +兵操 +兵差 +兵城 +兵船 +兵道 +兵丁 +兵法 +兵符 +兵戈 +兵戈相见 +兵工 +兵工厂 +兵贵神速 +兵荒马乱 +兵火 +兵机策 +兵家 +兵舰 +兵谏 +兵谏亭 +兵库县 +兵力 +兵连祸结 +兵临 +兵临城下 +兵乱 +兵马 +兵马俑 +兵痞 +兵器 +兵器史 +兵强马壮 +兵权 +兵刃 +兵戎 +兵戎相见 +兵圣 +兵士 +兵事 +兵书 +兵头官尾 +兵团 +兵味 +兵燹 +兵小子 +兵学 +兵役 +兵役法 +兵役制 +兵营 +兵油子 +兵员 +兵源 +兵站 +兵站部 +兵阵 +兵种 +兵种部 +兵卒 +丙 +丙醇 +丙肝 +丙璜舒 +丙磺舒 +丙纶 +丙酮 +丙烷 +丙烯腈 +丙烯酸 +丙稀 +丙寅 +丙种射线 +秉 +秉笔 +秉笔直书 +秉承 +秉持 +秉赋 +秉公 +秉公为政 +秉公执法 +秉借 +秉性 +秉性难移 +秉烛夜读 +柄 +饼 +饼饵 +饼肥 +饼干 +饼干桶 +饼子 +禀报 +禀承 +禀赋 +禀帖 +禀性 +并 +并不 +并称 +并处 +并存 +并蒂 +并蒂莲 +并发 +并发症 +并非 +并非如此 +并非易事 +并购 +并购案 +并购额 +并轨 +并轨生 +并驾齐驱 +并肩 +并肩作战 +并进 +并举 +并力 +并立 +并联 +并联式 +并列 +并拢 +并排 +并且 +并日而食 +并入 +并提 +并条机 +并吞 +并网 +并网发电 +并未 +并线 +并行 +并行不悖 +并行机 +并用 +并重 +并作 +病 +病案 +病案室 +病包儿 +病变 +病残 +病程 +病虫 +病虫草害 +病虫害 +病床 +病从口入 +病倒 +病毒 +病毒清 +病毒性 +病毒学 +病毒唑 +病儿 +病房 +病夫 +病根 +病故 +病孩 +病害 +病号 +病家 +病假 +病假条 +病句 +病菌 +病况 +病理 +病理性 +病理学 +病历 +病例 +病魔 +病魔缠身 +病情 +病区 +病人 +病容 +病入膏肓 +病弱 +病身 +病史 +病势 +病室 +病逝 +病死率 +病榻 +病态 +病瘫 +病体 +病痛 +病退 +病歪歪 +病危 +病险 +病象 +病休 +病眼 +病殃殃 +病秧子 +病怏怏 +病因 +病友 +病愈 +病员 +病原 +病原虫 +病原菌 +病原体 +病源 +病源体 +病院 +病灶 +病征 +病症 +病种 +病重 +病株 +病猪 +病状 +病字旁儿 +摒 +摒除 +摒弃 +拨 +拨拨 +拨打 +拨贷款 +拨动 +拨发 +拨付 +拨改贷 +拨给 +拨号 +拨号盘 +拨开 +拨款 +拨拉 +拨浪鼓 +拨乱反正 +拨弄 +拨冗 +拨通 +拨弦 +拨云见日 +波 +波长 +波茨坦 +波导管 +波动 +波动性 +波段 +波多黎各 +波恩 +波恩市 +波尔多 +波尔多城 +波尔多队 +波尔多市 +波尔卡 +波方 +波峰 +波峰浪谷 +波幅 +波谷 +波光 +波光潋滟 +波光云影 +波诡 +波海 +波黑 +波及 +波及面 +波谲云诡 +波兰 +波兰队 +波澜 +波澜不惊 +波澜壮阔 +波浪 +波浪鼓 +波浪式 +波浪形 +波流固村 +波伦亚 +波罗的海 +波密 +波密县 +波普 +波谱 +波士顿 +波束 +波斯 +波斯虎 +波斯菊 +波斯猫 +波斯尼亚 +波斯湾 +波涛 +波特兰 +波特率 +波通社 +波纹 +波兴浪涌 +波形 +波音 +波涌涛起 +波源 +波折 +波兹南 +玻 +玻方 +玻壳 +玻璃 +玻璃板 +玻璃杯 +玻璃舱 +玻璃碴 +玻璃厂 +玻璃橱 +玻璃窗 +玻璃窗门 +玻璃粉 +玻璃缸 +玻璃钢 +玻璃柜 +玻璃品 +玻璃瓶 +玻璃墙 +玻璃球 +玻璃丝 +玻璃体 +玻璃亭 +玻璃纤维 +玻璃纸 +玻璃砖 +玻利瓦尔 +玻利维亚 +玻纤 +玻纤厂 +剥 +剥夺 +剥离 +剥落 +剥弃 +剥蚀 +剥削 +剥削阶级 +剥削者 +钵 +钵池乡 +钵盘 +钵头 +钵盂 +钵子 +饽饽 +脖 +脖根 +脖颈 +脖颈儿 +脖颈子 +脖子 +菠菜 +菠萝 +菠萝蜜 +菠萝蜜叶 +菠萝园 +播 +播报 +播出 +播出量 +播发 +播放 +播放点 +播放机 +播幅 +播及 +播讲 +播绿 +播麦 +播撒 +播撒地 +播洒 +播散力 +播散期 +播送 +播扬 +播音 +播音室 +播音台 +播音员 +播映 +播种 +播种机 +播种期 +播种人 +播种者 +播州 +伯 +伯伯 +伯尔尼 +伯尔萨 +伯父 +伯爵 +伯克兰 +伯克利 +伯乐 +伯乐相马 +伯利恒 +伯利兹籍 +伯明翰 +伯母 +伯南布哥 +伯诺尼 +伯塞达市 +伯延村 +伯仲 +伯仲之间 +伯祖 +伯祖母 +驳 +驳岸 +驳斥 +驳船 +驳倒 +驳回 +驳壳枪 +驳运 +驳杂 +帛 +帛画 +帛书 +泊 +泊车 +泊机位 +泊南村 +泊位 +泊宅编 +勃 +勃勃 +勃勃生机 +勃长期 +勃发 +勃发生机 +勃郎宁 +勃李乡 +勃然 +勃然大怒 +勃兴 +亳 +亳县 +亳州 +亳州城 +亳州市 +铂 +舶 +舶来 +博 +博爱 +博爱县 +博采 +博采众长 +博城 +博茨瓦纳 +博大 +博大精深 +博大胸怀 +博大胸襟 +博导 +博得 +博德鲁姆 +博尔伦格 +博尔西路 +博格达峰 +博格腾 +博古通今 +博厚镇 +博湖 +博湖县 +博极群书 +博卡 +博卡区 +博克兰 +博拉 +博览 +博览会 +博览局 +博览群书 +博罗县 +博洛尼亚 +博取 +博山区 +博士 +博士点 +博士后 +博士奖 +博士生 +博士院 +博斯腾湖 +博泰 +博通古今 +博望 +博望镇 +博闻强记 +博闻强识 +博闻强志 +博物 +博物馆 +博物馆界 +博物馆学 +博物院 +博兴县 +博学 +博学多才 +博学院 +博雅 +博雅塔 +博野县 +博弈 +博弈论 +渤海 +渤海湾 +渤西 +鹁鸽 +鹁鸪 +鹁鸠 +搏 +搏冰斗雪 +搏动 +搏动声 +搏斗 +搏击 +搏击赛 +搏浪 +搏杀 +箔条 +薄 +薄板 +薄板坯 +薄壁 +薄冰 +薄饼 +薄薄 +薄薄的 +薄唇 +薄脆 +薄地 +薄父母 +薄荷 +薄厚 +薄酒 +薄壳核桃 +薄礼 +薄利 +薄利多销 +薄露 +薄膜 +薄暮 +薄坯 +薄片 +薄情 +薄弱 +薄弱点 +薄弱校 +薄弱者 +薄纱 +薄田 +薄雾 +薄型 +薄纸 +跛子 +跛足 +簸箕 +卜 +卜辞 +卜官庄村 +卜少 +卟啉铁 +补 +补白 +补办 +补报 +补报机 +补补 +补差 +补偿 +补偿费 +补偿金 +补充 +补充性 +补丁 +补发 +补给 +补给船 +补给品 +补过 +补集 +补交 +补角 +补缴 +补救 +补救性 +补考 +补课 +补亏 +补篮 +补漏 +补码 +补苗 +补偏救弊 +补票 +补品 +补缺 +补赛 +补色 +补射 +补时 +补税 +补税额 +补饲 +补胎 +补台 +补天浴日 +补贴 +补贴额 +补贴金 +补贴款 +补袜板 +补习 +补习班 +补选 +补血 +补血剂 +补牙法 +补养 +补药 +补遗 +补益 +补语 +补员 +补阵 +补征 +补种 +补助 +补助费 +补助货币 +补助金 +补助款 +补足 +哺 +哺乳 +哺乳动物 +哺乳纲 +哺乳类 +哺乳期 +哺养 +哺育 +捕 +捕风捉影 +捕获 +捕获量 +捕捞 +捕捞业 +捕猎 +捕杀 +捕食 +捕手 +捕头 +捕鱼 +捕鱼量 +捕渔业 +捕捉 +不 +不安 +不安全感 +不谙 +不谙世事 +不白之冤 +不卑不亢 +不比 +不必 +不避艰险 +不便 +不变价格 +不变资本 +不辨菽麦 +不才 +不测 +不测风云 +不称职者 +不成 +不成方圆 +不成人子 +不成体统 +不成文法 +不成想 +不齿 +不耻下问 +不啻 +不出所料 +不出意外 +不辍 +不辞而别 +不辞劳苦 +不辞辛苦 +不辞辛劳 +不错 +不打自招 +不大 +不大不小 +不丹 +不丹王国 +不单 +不但 +不当 +不倒翁 +不道德 +不得 +不得不 +不得而知 +不得劲 +不得了 +不得其详 +不得人心 +不得要领 +不得已 +不等 +不等号 +不等量 +不等式 +不定 +不定根 +不懂装懂 +不动产 +不动产业 +不动声色 +不冻港 +不独 +不端 +不断 +不对 +不多时 +不乏 +不乏其人 +不法 +不法分子 +不法之徒 +不凡 +不犯 +不妨 +不菲 +不分彼此 +不分伯仲 +不分上下 +不服 +不符 +不负 +不负众望 +不负重望 +不复 +不复存在 +不干不净 +不甘 +不甘寂寞 +不甘落后 +不甘示弱 +不敢当 +不公 +不公正性 +不攻自破 +不共戴天 +不苟言笑 +不够 +不够意思 +不顾 +不顾流俗 +不顾死活 +不顾一切 +不管 +不管不顾 +不管部 +不管部长 +不管怎样 +不光 +不规则 +不轨 +不过 +不过尔尔 +不过如此 +不含糊 +不寒而栗 +不好 +不好过 +不好意思 +不合 +不合格率 +不合格品 +不合格者 +不合理性 +不合时宜 +不和 +不哼不哈 +不欢而散 +不慌不乱 +不慌不忙 +不会儿 +不讳 +不惑 +不惑之年 +不羁 +不及 +不及格者 +不即不离 +不计其数 +不济 +不假思索 +不减当年 +不见 +不见得 +不见经传 +不见天日 +不骄不躁 +不教而诛 +不结盟 +不结之缘 +不竭 +不解 +不解之缘 +不仅 +不仅仅 +不仅如此 +不尽然 +不尽人意 +不近人情 +不进则退 +不禁 +不经济性 +不经意 +不经之谈 +不景气 +不胫而走 +不久 +不久前 +不久以后 +不咎既往 +不拘 +不拘小节 +不拘一格 +不绝如缕 +不绝于耳 +不觉 +不均 +不刊之论 +不堪 +不堪回首 +不堪入耳 +不堪入目 +不堪设想 +不堪一击 +不堪造就 +不堪重负 +不亢不卑 +不可 +不可避免 +不可不 +不可动摇 +不可多得 +不可分割 +不可告人 +不可估量 +不可或缺 +不可救药 +不可开交 +不可抗力 +不可靠性 +不可理喻 +不可名状 +不可磨灭 +不可逆转 +不可偏废 +不可企及 +不可胜数 +不可收拾 +不可思议 +不可忘者 +不可限量 +不可向迩 +不可言传 +不可一世 +不可逾越 +不可御遏 +不可知论 +不可置疑 +不可终日 +不可捉摸 +不快 +不愧 +不愧为 +不愧于 +不来梅 +不来梅州 +不赖 +不郎不秀 +不劳而获 +不冷不热 +不理 +不力 +不利 +不连沟村 +不连惯性 +不廉 +不廉则败 +不良 +不良率 +不了了之 +不料 +不列颠 +不吝 +不灵 +不露声色 +不伦不类 +不论 +不落窠臼 +不落征帆 +不买账 +不瞒你说 +不瞒您说 +不满 +不满足感 +不毛之地 +不眠之夜 +不免 +不妙 +不名一文 +不名誉 +不明 +不明不白 +不鸣则已 +不谋而合 +不谋而同 +不耐烦 +不难 +不能不 +不能自拔 +不能自己 +不能自已 +不念旧恶 +不佞 +不怕 +不怕苦 +不怕累 +不怕牺牲 +不配 +不偏不倚 +不平 +不平等性 +不平衡性 +不平家 +不平则鸣 +不期而遇 +不期而至 +不起眼 +不弃前诺 +不巧 +不切实际 +不情之请 +不请自到 +不求甚解 +不求有功 +不屈 +不屈不挠 +不确定性 +不然 +不人道 +不忍 +不日 +不容 +不容忽视 +不容乐观 +不容小视 +不容置疑 +不如 +不如说 +不辱使命 +不入流 +不三不四 +不善 +不善言辞 +不尚空谈 +不少 +不舍昼夜 +不甚了了 +不甚起眼 +不慎 +不声不吭 +不声不响 +不胜 +不胜枚举 +不省人事 +不失时机 +不失时宜 +不失为 +不时 +不时之需 +不识大体 +不识时变 +不识时务 +不识抬举 +不实之词 +不世之功 +不适 +不适感 +不衰 +不说 +不思悔改 +不思进取 +不俗 +不速之客 +不随意肌 +不索何获 +不挑不拣 +不祧之祖 +不停 +不通 +不同 +不同点 +不同凡响 +不同寻常 +不痛不痒 +不图 +不妥 +不外 +不外乎 +不完全叶 +不为人知 +不为所动 +不为已甚 +不违农时 +不唯上 +不唯书 +不惟 +不畏 +不畏难辛 +不畏强暴 +不闻不问 +不稳定性 +不稳平衡 +不问 +不问自明 +不无 +不无裨益 +不无道理 +不无关系 +不无遗憾 +不务正业 +不息 +不惜 +不惜工本 +不贤 +不相上下 +不详 +不祥 +不祥之兆 +不象话 +不像话 +不消 +不孝 +不孝之子 +不肖 +不肖子孙 +不屑 +不屑一顾 +不懈 +不懈努力 +不信任案 +不信任感 +不行 +不幸 +不幸者 +不休 +不修边幅 +不朽 +不锈钢 +不锈钢板 +不锈钢管 +不虚此行 +不许 +不学无术 +不徇私情 +不亚于 +不严肃性 +不言不语 +不言而喻 +不言自明 +不厌其烦 +不厌其详 +不要 +不要紧 +不夜城 +不一 +不一而足 +不一会 +不一会儿 +不依 +不依不饶 +不宜 +不遗余力 +不已 +不以为耻 +不以为然 +不义之财 +不亦乐乎 +不易 +不易之论 +不意 +不翼而飞 +不用 +不用说 +不由 +不由得 +不由分说 +不由自主 +不予 +不虞之誉 +不育症 +不预则废 +不远处 +不远千里 +不远万里 +不约而同 +不悦 +不孕 +不孕症 +不孕籽 +不再 +不在乎 +不在话下 +不在少数 +不择手段 +不怎么 +不曾 +不战而胜 +不战自败 +不折不扣 +不折不挠 +不正之风 +不知 +不知不觉 +不知凡几 +不知进退 +不知去向 +不知死活 +不知所措 +不知所云 +不知所终 +不知者 +不值一提 +不止 +不只 +不至 +不至于 +不治之症 +不致 +不致于 +不置可否 +不置一词 +不周 +不住 +不准 +不着边际 +不自禁 +不自量力 +不自由 +不足 +不足称道 +不足道 +不足挂齿 +不足为怪 +不足为凭 +不足为奇 +不足为训 +不足以 +不足者 +布 +布包 +布帛 +布测 +布厂 +布陈 +布楚 +布达拉宫 +布达佩斯 +布袋 +布道 +布道台 +布底鞋 +布点 +布点网 +布丁 +布兜 +布段 +布尔 +布尔卡 +布尔诺 +布尔奇科 +布防 +布放 +布幅 +布告 +布告栏 +布谷 +布谷鸟 +布鼓雷门 +布褂 +布赫 +布吉镇 +布景 +布景钱 +布局 +布局谋篇 +布军 +布控 +布拉 +布拉格 +布拉格宫 +布拉吉 +布拉图西 +布莱夏 +布兰卡 +布朗托姆 +布朗运动 +布朗族 +布老虎 +布雷 +布雷顿 +布雷器 +布里斯班 +布里特 +布帘 +布料 +布龙 +布隆迪 +布鲁塞尔 +布鲁氏菌 +布吕肯街 +布伦纳 +布伦特 +布罗特比 +布满 +布帽 +布面 +布面鞋 +布冧 +布木格 +布木格村 +布偶 +布篷 +布匹 +布片 +布琼布拉 +布热津卡 +布洒 +布伞 +布设 +布施 +布什 +布市 +布势 +布套 +布条 +布条条 +布贴 +布头 +布托 +布拖 +布拖县 +布娃娃 +布纹纸 +布线 +布鞋 +布行 +布业 +布衣 +布依族 +布艺 +布于 +布展 +布阵 +布政使 +布质 +布置 +布置一新 +步 +步兵 +步兵师 +步兵团 +步步 +步步高升 +步步为营 +步长 +步代 +步道 +步调 +步调一致 +步伐 +步法 +步幅 +步弓 +步话机 +步进制 +步犁 +步履 +步履艰难 +步履声 +步履维艰 +步炮 +步频 +步骑炮兵 +步枪 +步人后尘 +步入 +步哨 +步数 +步态 +步谈机 +步校 +步行 +步行虫 +步行机 +步行街 +步行区 +步行者 +步行者队 +步骤 +步子 +怖 +钚 +部 +部标 +部长 +部长会议 +部长级 +部党组 +部队 +部分 +部风 +部副 +部会 +部级 +部际 +部件 +部类 +部里 +部落 +部门 +部门法 +部门级 +部内 +部省级 +部室 +部手机 +部首 +部署 +部头 +部委 +部委办 +部委级 +部委局 +部位 +部务会 +部下 +部优 +部属 +部属处 +部族 +埠 +埠头 +簿 +簿册 +簿籍 +簿记 +簿子 +嚓嚓 +擦 +擦边球 +擦擦 +擦车 +擦黑 +擦肩而过 +擦亮 +擦屁股 +擦伤 +擦身而过 +擦拭 +擦洗 +擦鞋嫂 +擦鞋业 +擦眼而过 +擦音 +擦脂抹粉 +猜 +猜猜 +猜测 +猜度 +猜忌 +猜谜 +猜拳 +猜拳行令 +猜先 +猜想 +猜疑 +猜中 +才 +才分 +才干 +才高八斗 +才华 +才华横溢 +才杰 +才尽其用 +才俊 +才力 +才路 +才略 +才貌 +才能 +才女 +才气 +才情 +才识 +才疏学浅 +才思 +才思敏捷 +才望 +才学 +才源 +才智 +才子 +才子佳人 +材 +材积 +材料 +材料部 +材料厂 +材料处 +材料费 +材料科 +材料科学 +材料库 +材料组 +材质 +财 +财办 +财宝 +财保 +财帛 +财产 +财产法 +财产权 +财产税 +财产险 +财长 +财大 +财大气粗 +财东 +财阀 +财阀式 +财富 +财富表 +财改 +财革法 +财工发 +财工字 +财会 +财价字 +财界 +财金 +财金处 +财金队 +财经 +财经界 +财经类 +财经委 +财礼 +财力 +财路 +财贸 +财贸办 +财贸处 +财贸所 +财贸委 +财迷 +财迷心窍 +财年 +财农事 +财企 +财权 +财神 +财神老爷 +财神庙 +财神爷 +财势 +财税 +财税厅 +财团 +财委 +财委会 +财文 +财文字 +财务 +财务部 +财务处 +财务局 +财务科 +财务室 +财务司 +财物 +财险 +财校 +财雄势大 +财预 +财源 +财院 +财运 +财政 +财政部 +财政部长 +财政寡头 +财政化 +财政奖 +财政局 +财政科 +财政司 +财政所 +财政厅 +财政危机 +财政系 +财政性 +财政学 +财政资本 +财主 +财综 +财综字 +裁 +裁撤 +裁定 +裁定书 +裁断 +裁夺 +裁缝 +裁减 +裁剪 +裁决 +裁决书 +裁军 +裁军会 +裁量 +裁判 +裁判长 +裁判官 +裁判员 +裁判桌 +裁谈会 +裁员 +裁员量 +采 +采办 +采宝者 +采编 +采采 +采菜节 +采茶 +采茶调 +采茶戏 +采茶戏团 +采蒂涅 +采伐 +采伐量 +采伐业 +采访 +采访部 +采访服 +采访记 +采访团 +采访行 +采访者 +采访组 +采风 +采风团 +采购 +采购部 +采购员 +采光 +采花节 +采集 +采集者 +采价点 +采景 +采掘 +采掘业 +采矿 +采矿点 +采矿区 +采矿权 +采矿业 +采矿者 +采莲船 +采莲调 +采莲歌 +采录 +采煤 +采煤队 +采煤工 +采纳 +采纳率 +采暖 +采区 +采取 +采石 +采石场 +采收 +采收率 +采通科 +采撷 +采写 +采行 +采选业 +采血车 +采样 +采样管 +采药 +采药人 +采银 +采用 +采油 +采油厂 +采油工 +采油井 +采油树 +采育镇 +采摘 +采种 +彩 +彩板型 +彩报 +彩笔 +彩布条 +彩车 +彩绸 +彩船 +彩带 +彩旦 +彩灯 +彩笛 +彩笛卷 +彩电 +彩电业 +彩蝶 +彩蝶飞舞 +彩儿 +彩帆 +彩粉 +彩号 +彩虹 +彩虹灯 +彩虹门 +彩虹厅 +彩蝴蝶 +彩花 +彩花灯 +彩画 +彩绘 +彩轿 +彩金 +彩卷 +彩扩部 +彩礼 +彩礼钱 +彩练 +彩梦 +彩棉 +彩蘑 +彩墨画 +彩南 +彩排 +彩棚 +彩票 +彩票潮 +彩漆 +彩旗 +彩旗猎猎 +彩桥 +彩球 +彩泉 +彩裙 +彩色 +彩色电视 +彩色棉 +彩色片 +彩饰 +彩塑 +彩陶 +彩陶文化 +彩头 +彩图 +彩涂 +彩团 +彩屯 +彩霞 +彩绣 +彩翼 +彩印 +彩印厂 +彩釉 +彩釉砖 +彩云 +彩云飞 +彩韵 +彩照 +彩纸 +彩珠 +踩 +踩踩 +踩高跷 +踩鼓堂 +菜 +菜霸 +菜板 +菜饼 +菜场 +菜单 +菜刀 +菜地 +菜店 +菜豆 +菜鹅 +菜饭 +菜贩 +菜粉蝶 +菜鸽 +菜瓜 +菜馆 +菜糊 +菜花 +菜价 +菜窖 +菜筐 +菜篮 +菜篮子 +菜料 +菜苗 +菜牛 +菜农 +菜棚 +菜品 +菜圃 +菜谱 +菜畦 +菜青虫 +菜区 +菜色 +菜商 +菜市 +菜市场 +菜市口 +菜蔬 +菜汤 +菜田 +菜团子 +菜系 +菜心 +菜蚜 +菜羊 +菜肴 +菜叶 +菜油 +菜园 +菜园子 +菜籽粕 +菜籽油 +菜子 +菜子坝村 +菜子油 +蔡 +蔡坂 +蔡甸区 +蔡锷路 +蔡公堂乡 +蔡家坡 +蔡塘 +蔡塘村 +参 +参拜 +参半 +参保 +参保率 +参编部 +参变量 +参差 +参差不齐 +参差不一 +参场 +参赌 +参赌者 +参访 +参股 +参观 +参观点 +参观记 +参观团 +参观者 +参会 +参会者 +参加 +参加方 +参加国 +参加者 +参见 +参建 +参军 +参看 +参考 +参考价 +参考书 +参考系 +参考值 +参联会 +参量 +参谋 +参谋部 +参谋长 +参谋处 +参评 +参评率 +参茸 +参赛 +参赛队 +参赛费 +参赛国 +参赛马 +参赛面 +参赛权 +参赛者 +参赛证 +参事 +参事官 +参试 +参数 +参体 +参天 +参天大树 +参统 +参选 +参选率 +参选人 +参训 +参训者 +参演 +参演者 +参议长 +参议会 +参议员 +参议院 +参与 +参与感 +参与率 +参与面 +参与权 +参与人 +参与人员 +参与性 +参与者 +参预 +参院 +参阅 +参赞 +参展 +参展国 +参展商 +参展团 +参展者 +参战 +参照 +参照本 +参照物 +参照系 +参证 +参政 +参政党 +参政会 +参政议政 +参政员 +参知政事 +参众 +参众两院 +参资 +骖 +餐 +餐餐 +餐车 +餐船 +餐点 +餐房 +餐费 +餐费票 +餐风宿露 +餐风宿雪 +餐馆 +餐盒 +餐会 +餐巾 +餐具 +餐券 +餐食 +餐厅 +餐业 +餐椅 +餐饮 +餐饮部 +餐饮店 +餐饮具 +餐饮业 +餐桌 +残 +残暴 +残本 +残币 +残壁 +残臂 +残编断简 +残兵 +残兵败将 +残部 +残采 +残次林 +残次品 +残存 +残敌 +残毒 +残匪 +残废 +残废证 +残稿 +残羹 +残羹剩饭 +残工委 +残骸 +残害 +残货 +残迹 +残疾 +残疾金 +残疾率 +残疾人 +残局 +残酷 +残酷无情 +残酷性 +残困户 +残历碑 +残联 +残留 +残留量 +残留物 +残留性 +残年 +残片 +残篇 +残篇断简 +残品 +残破 +残墙断壁 +残缺 +残缺不全 +残忍 +残杀 +残生 +残剩 +残损 +残损币 +残协委 +残雪 +残阳 +残余 +残垣断壁 +残月 +残渣 +残渣余孽 +残照 +残砖碎瓦 +蚕 +蚕宝宝 +蚕箔 +蚕蔟 +蚕豆 +蚕茧 +蚕卵 +蚕眠 +蚕农 +蚕桑 +蚕沙 +蚕食 +蚕食鲸吞 +蚕室 +蚕丝 +蚕蚁 +蚕蛹 +蚕蛹油 +蚕纸 +蚕种 +蚕子 +惭 +惭疚 +惭愧 +惨 +惨案 +惨白 +惨白色 +惨败 +惨变 +惨不忍睹 +惨淡 +惨淡经营 +惨毒 +惨祸 +惨叫 +惨叫声 +惨境 +惨剧 +惨绝人寰 +惨烈 +惨杀 +惨死 +惨痛 +惨无人道 +惨象 +惨遭 +惨重 +惨状 +灿 +灿灿 +灿烂 +灿烂夺目 +灿烂辉煌 +灿朗 +灿然 +灿若明霞 +灿若群星 +灿若星河 +灿若云霞 +粲然 +粲然可观 +仓 +仓仓囤囤 +仓储 +仓储场 +仓储费 +仓储式 +仓储业 +仓促 +仓单 +仓房 +仓管处 +仓惶 +仓库 +仓廪 +仓满库盈 +仓琼玛 +仓容 +仓山 +仓山区 +仓鼠 +仓盈粮丰 +仓卒 +沧海 +沧海横流 +沧海桑田 +沧海一粟 +沧江 +沧桑 +沧桑感 +沧桑史 +沧县 +沧源 +沧州 +沧州市 +苍 +苍白 +苍苍 +苍翠 +苍翠欲滴 +苍东村 +苍耳 +苍狗 +苍古 +苍黑 +苍劲 +苍老 +苍凉 +苍岭 +苍龙 +苍鹭 +苍茫 +苍莽 +苍溟 +苍南 +苍南县 +苍青 +苍穹 +苍然 +苍山 +苍山县 +苍生 +苍松 +苍松翠柏 +苍天 +苍头 +苍梧 +苍梧县 +苍溪 +苍雄 +苍岩 +苍岩山 +苍鹰 +苍蝇 +苍蝇拍子 +苍郁 +苍原 +舱 +舱单 +舱盖 +舱口 +舱门 +舱面 +舱室 +舱体 +舱位 +藏 +藏版 +藏胞 +藏北 +藏本 +藏传 +藏刀 +藏东 +藏而不露 +藏垢纳污 +藏红花 +藏画 +藏家 +藏家人 +藏经洞 +藏剧团 +藏蓝色 +藏历 +藏羚 +藏龙卧虎 +藏马 +藏民 +藏南 +藏匿 +藏品 +藏品展 +藏青 +藏青果 +藏琼玛 +藏区 +藏人 +藏身 +藏式 +藏书 +藏书家 +藏书角 +藏书界 +藏书库 +藏书量 +藏书楼 +藏书票 +藏书室 +藏头露尾 +藏娃 +藏污纳垢 +藏戏 +藏相 +藏香 +藏学 +藏学家 +藏学界 +藏药 +藏药史 +藏药学 +藏医 +藏医科 +藏医学 +藏医药 +藏医院 +藏印 +藏有 +藏语系 +藏园 +藏原 +藏装 +藏族 +藏族人 +操 +操办 +操场 +操持 +操典 +操控 +操劳 +操练 +操切 +操神 +操守 +操心 +操心费 +操行 +操演 +操之过急 +操纵 +操纵杆 +操纵台 +操纵箱 +操纵员 +操纵者 +操作 +操作层 +操作法 +操作符 +操作机 +操作间 +操作室 +操作手 +操作数 +操作台 +操作系统 +操作性 +操作员 +操作者 +糙 +糙甸乡 +糙粮 +糙米 +糙米饭 +糙子 +曹 +曹庵镇 +曹甸镇 +曹娥江 +曹娥江畔 +曹市镇 +曹县 +曹杨新村 +曹峪村 +曹州 +嘈杂 +漕河 +漕河泾 +漕粮 +槽 +槽床 +槽钢 +槽灌 +槽孔 +槽门 +槽体 +槽牙 +槽子 +草 +草案 +草坝 +草坝村 +草包 +草本 +草本植物 +草编 +草辫 +草标儿 +草草 +草草收场 +草产业 +草长莺飞 +草场 +草场村 +草创 +草刺儿 +草丛 +草袋 +草底儿 +草地 +草甸 +草甸子 +草店村 +草垫 +草垫子 +草豆蔻 +草垛 +草儿 +草房 +草房子 +草丰林长 +草芙蓉 +草稿 +草根 +草菇 +草菇场 +草果 +草海 +草狐 +草花蜜 +草荒 +草黄 +草黄色 +草灰 +草鸡 +草鸡蛋 +草菅人命 +草荐 +草浆 +草浆碱 +草芥 +草寇 +草库伦 +草帘 +草料 +草料场 +草驴 +草履虫 +草率 +草绿 +草绿色 +草马湖村 +草码 +草莽 +草莽英雄 +草帽 +草帽缏 +草莓 +草莓棚 +草煤 +草门 +草棉 +草民 +草茉莉 +草木 +草木灰 +草木皆兵 +草木犀 +草牧场 +草拟 +草棚 +草棚席 +草皮 +草坪 +草坪村 +草坪坡 +草坡 +草铺 +草签 +草桥 +草蜻蛉 +草裙舞 +草苫 +草生菌 +草绳 +草圣 +草石蚕 +草食 +草食性 +草书 +草酸 +草台班子 +草台岗 +草滩 +草炭 +草堂 +草体 +草头 +草头儿 +草图 +草团 +草委 +草窝 +草窝棚 +草屋 +草席 +草鞋 +草鞋岭 +草屑 +草畜 +草堰 +草药 +草药店 +草野 +草业 +草叶 +草鱼 +草原 +草原法 +草原学 +草约 +草泽 +草纸 +草质茎 +草种 +草籽 +草籽儿 +草字 +草字头儿 +册 +册次 +册封 +册封使 +册亨县 +册谱 +册数 +册页 +册子 +侧 +侧柏 +侧吹 +侧刀儿 +侧道 +侧耳 +侧方 +侧根 +侧后 +侧击 +侧记 +侧漏 +侧门 +侧面 +侧面图 +侧目 +侧目而视 +侧身 +侧蚀力 +侧视图 +侧室 +侧束 +侧卧 +侧线 +侧压力 +侧芽 +侧翼 +侧枝 +侧重 +侧重点 +厕 +厕上 +厕身 +厕所 +厕所间 +恻 +恻隐之心 +测 +测报 +测报网 +测报站 +测出 +测点 +测电笔 +测定 +测度 +测风站 +测绘 +测绘兵 +测绘法 +测绘局 +测井 +测距 +测距标 +测控船 +测控站 +测力计 +测量 +测量部 +测量队 +测量网 +测量学 +测量学家 +测年技术 +测评 +测评表 +测评会 +测评票 +测旗 +测试 +测试盒 +测试题 +测试仪 +测速仪 +测算 +测验 +测雨站 +测字 +策 +策鞭 +策动 +策反 +策划 +策划部 +策划人 +策划室 +策划者 +策进会 +策勒 +策勒县 +策励 +策略 +策略师 +策略性 +策马飞驰 +策马急驰 +策士 +策应 +策源地 +岑寂 +噌 +噌噌 +噌噌噌 +层 +层报 +层层 +层层叠叠 +层出不穷 +层次 +层次感 +层次化 +层次性 +层递式 +层高 +层级 +层级制 +层见叠出 +层林 +层流 +层峦迭嶂 +层峦叠嶂 +层面 +层系 +层子 +蹭 +蹭蹬 +蹭痒 +叉 +叉车 +叉脚 +叉路口 +叉腰 +叉子 +杈 +杈子 +插 +插班 +插班生 +插标 +插播 +插翅难飞 +插翅难逃 +插队 +插队落户 +插花 +插花型 +插画 +插话 +插件 +插件机 +插建 +插箭节 +插科打诨 +插孔 +插口 +插屏 +插曲 +插曲奖 +插入 +插手 +插条 +插头 +插图 +插销 +插叙 +插言 +插秧 +插页 +插种 +插足 +插嘴 +插座 +查 +查案 +查办 +查补 +查查 +查抄 +查出 +查处 +查错程序 +查当山 +查当乡 +查档 +查点 +查堵 +查对 +查房 +查访 +查封 +查盖 +查号台 +查核 +查获 +查获记 +查缉 +查检 +查缴 +查结 +查结率 +查禁 +查究 +查勘 +查看 +查考 +查克 +查控 +查扣 +查没 +查明 +查谟 +查破 +查铺 +查讫 +查清 +查全率 +查哨 +查实 +查收 +查私 +查体 +查问 +查无实据 +查新 +查血钾 +查寻 +查询 +查询表 +查询费 +查询卡 +查询台 +查询网 +查询者 +查验 +查验簿 +查阅 +查阅者 +查阅制 +查账 +查找 +查证 +查准率 +茬 +茬茬 +茬儿 +茶 +茶杯 +茶拨 +茶厂 +茶场 +茶匙 +茶道 +茶点 +茶店 +茶碟 +茶饭 +茶饭不思 +茶坊 +茶房 +茶麸 +茶缸 +茶缸子 +茶歌 +茶馆 +茶罐 +茶荷 +茶褐色 +茶壶 +茶花 +茶花女 +茶花王 +茶话会 +茶会 +茶鸡蛋 +茶几 +茶技 +茶夹 +茶碱 +茶巾 +茶晶 +茶精 +茶镜 +茶具 +茶客 +茶蕾 +茶陵 +茶陵县 +茶楼 +茶漏 +茶炉 +茶卤 +茶卤儿 +茶毛虫 +茶密村 +茶苗 +茶农 +茶盘 +茶泡饭 +茶钱 +茶馓 +茶色 +茶色素厂 +茶山 +茶商 +茶社 +茶食 +茶市 +茶室 +茶树 +茶树王 +茶水 +茶素 +茶汤 +茶汤壶 +茶堂 +茶厅 +茶亭 +茶桶 +茶托 +茶碗 +茶文化 +茶香 +茶锈 +茶学 +茶业 +茶叶 +茶叶蛋 +茶叶花 +茶叶节 +茶艺 +茶艺馆 +茶艺室 +茶艺术 +茶油 +茶余饭后 +茶余酒后 +茶园 +茶缘 +茶斋 +茶针 +茶制品 +茶盅 +茶砖 +茶庄 +茶桌 +茶资 +茶渍 +茶座 +搽脂抹粉 +槎 +槎溪镇 +察 +察北 +察察为明 +察尔汗 +察哈尔 +察哈尔省 +察觉 +察看 +察明 +察南 +察微知晓 +察言观色 +察右旗 +察右前旗 +碴儿 +衩 +汊港 +汊河镇 +汊涧镇 +汊流 +岔 +岔道 +岔道儿 +岔河镇 +岔开 +岔口 +岔流 +岔路 +岔路河镇 +岔南乡 +岔曲儿 +岔子 +诧异 +姹紫嫣红 +差 +差别 +差别性 +差不多 +差不离 +差错 +差错率 +差点 +差点儿 +差额 +差额选举 +差价 +差价比 +差价款 +差价率 +差劲 +差距 +差旅 +差旅费 +差率 +差遣 +差强人意 +差生 +差使 +差事 +差数 +差速器 +差一点 +差异 +差异性 +差役 +差之毫厘 +差之甚远 +差转台 +差转站 +拆 +拆除 +拆穿 +拆分 +拆封 +拆毁 +拆解 +拆借 +拆开 +拆迁 +拆迁房 +拆迁户 +拆迁量 +拆散 +拆台 +拆息 +拆洗 +拆线 +拆卸 +拆资 +拆字 +钗 +钗头凤 +侪 +柴 +柴草 +柴草堆 +柴达木 +柴刀 +柴扉 +柴沟门村 +柴禾 +柴河 +柴河镇 +柴胡 +柴胡店镇 +柴火 +柴火垛 +柴鸡 +柴林头村 +柴门 +柴米 +柴米油盐 +柴汽比 +柴汽车 +柴树 +柴薪 +柴一 +柴油 +柴油机 +豺狼 +豺狼成性 +豺狼当道 +豺狼虎豹 +掺 +掺和 +掺假 +掺假使杂 +掺沙子 +掺水 +掺杂 +掺杂使假 +搀 +搀扶 +搀和 +搀假 +搀杂 +婵娟 +谗 +谗言 +孱弱 +禅 +禅房 +禅机 +禅静 +禅师 +禅寺 +禅意 +禅隐 +禅院 +禅宗 +馋 +馋猫子 +馋涎欲滴 +馋嘴 +缠 +缠管 +缠绵 +缠绕 +缠绕茎 +缠身 +缠手 +缠诉 +缠住 +蝉 +蝉联 +蝉蜕 +蝉翼 +潺潺 +潺潺流水 +蟾蜍 +蟾宫 +蟾光 +蟾酥 +产 +产草量 +产成品 +产出 +产出量 +产出率 +产床 +产蛋鸡 +产蛋率 +产道 +产地 +产儿 +产方 +产房 +产妇 +产妇术 +产供 +产供销 +产官学 +产后 +产后风 +产加销 +产假 +产科 +产莲区 +产粮 +产粮区 +产量 +产量比 +产量型 +产卵 +产卵场 +产门 +产棉区 +产棉省 +产奶量 +产奶率 +产能 +产品 +产品部 +产品化 +产品链 +产品名 +产品权 +产婆 +产期 +产前 +产钳 +产区 +产权 +产权法 +产权界 +产权局 +产权人 +产权证 +产肉量 +产褥期 +产褥热 +产生 +产生量 +产物 +产险 +产销 +产销地 +产销合同 +产销量 +产销率 +产学研 +产业 +产业部 +产业处 +产业带 +产业革命 +产业工人 +产业化 +产业界 +产业军 +产业链 +产业桥 +产业群 +产业群体 +产业性 +产业资本 +产油国 +产油井 +产油量 +产院 +产枣量 +产枣区 +产值 +产中 +产子 +谄媚 +铲 +铲车 +铲除 +铲刀 +铲工 +铲土机 +铲吸量 +铲雪车 +铲运车 +铲运机 +铲子 +阐 +阐发 +阐明 +阐释 +阐述 +蒇 +忏悔 +忏悔录 +忏悔书 +颤 +颤颤 +颤颤巍巍 +颤动 +颤抖 +颤栗 +颤微微 +颤巍巍 +颤音 +颤悠悠 +伥鬼 +昌 +昌都 +昌都寺 +昌都县 +昌虎 +昌江 +昌江县 +昌乐县 +昌黎 +昌黎县 +昌里 +昌宁县 +昌平 +昌平县 +昌平园 +昌盛 +昌图县 +昌邑 +娼妇 +娼妓 +猖獗 +猖狂 +菖蒲 +长 +长安 +长安城 +长安街 +长安县 +长安乡 +长安镇 +长白 +长白参 +长白山 +长白山区 +长白猪 +长坂坡 +长辈 +长鼻目 +长臂虾 +长臂猿 +长编 +长鞭 +长波 +长长 +长长的 +长长地 +长成 +长城 +长城卡 +长城人 +长城湾 +长城站 +长城镇 +长池 +长虫 +长抽短吊 +长处 +长传 +长春 +长春村 +长春道 +长春沟村 +长春桥 +长春市 +长春园 +长春站 +长此下去 +长此以往 +长存 +长大 +长大成材 +长大成人 +长岛 +长岛县 +长凳 +长堤 +长堤路 +长笛 +长调 +长度 +长短 +长短句 +长短期 +长短枪 +长短途 +长队 +长二丙 +长二捆 +长发 +长发镇 +长法 +长方脸 +长方体 +长方形 +长丰县 +长风 +长风破浪 +长涪 +长赋 +长岗岭 +长钢 +长歌当哭 +长歌当啸 +长阁村 +长葛 +长葛市 +长工 +长骨 +长鼓 +长官 +长管状 +长海县 +长航 +长河 +长恨歌 +长虹桥 +长湖 +长话 +长话短说 +长话费 +长话局 +长话市话 +长话线 +长淮 +长活 +长机 +长假 +长剑 +长江 +长江村 +长江局 +长江口 +长江路 +长江天堑 +长江头 +长街 +长进 +长颈鹿 +长胫 +长镜头 +长久 +长久性 +长局 +长剧 +长距离 +长踞 +长卷 +长空 +长裤 +长廊 +长老 +长老塔 +长涝池村 +长乐市 +长梁山 +长梁乡 +长林乡 +长岭 +长岭岗乡 +长岭县 +长翎 +长流 +长龙 +长毛 +长毛绒 +长毛兔 +长矛 +长眠 +长眠不醒 +长明灯 +长鸣 +长命百岁 +长命富贵 +长年 +长年累月 +长宁 +长宁区 +长宁县 +长女 +长袍 +长袍儿 +长跑 +长跑队 +长跑节 +长跑赛 +长篇 +长篇大论 +长篇卷 +长篇小说 +长平乡 +长坪镇 +长期 +长期班 +长期化 +长期性 +长期以来 +长崎 +长崎县 +长枪 +长亲 +长青 +长青林 +长青树 +长清县 +长清镇 +长庆 +长驱 +长驱直入 +长拳 +长裙 +长三 +长三丙 +长三火箭 +长三甲 +长三乙 +长沙 +长沙城 +长沙路 +长沙市 +长沙县 +长山村 +长衫 +长衫族 +长上 +长舌妇 +长蛇阵 +长生 +长生不老 +长生果 +长生塔 +长胜村 +长绳 +长盛不衰 +长诗 +长石 +长石岭 +长势 +长逝 +长寿 +长寿菜 +长寿路 +长寿面 +长寿县 +长舒广袖 +长水 +长水村 +长丝 +长随 +长隧 +长孙 +长台 +长泰 +长泰县 +长滩 +长滩峡 +长谈 +长叹 +长天 +长条 +长汀 +长汀县 +长亭 +长头 +长途 +长途跋涉 +长途车 +长途电话 +长途费 +长途票 +长途汽车 +长湾 +长文 +长武县 +长物 +长线 +长线产品 +长相 +长项 +长效 +长啸 +长啸贯林 +长辛店 +长信 +长兴 +长兴县 +长兄 +长袖 +长袖善舞 +长袖者 +长须 +长须鲸 +长阳 +长阳县 +长野 +长野市 +长野县 +长夜 +长一智 +长衣 +长椅 +长翼 +长印 +长缨 +长影 +长影厂 +长游 +长幼有序 +长于 +长吁短叹 +长垣 +长远 +长远型 +长远性 +长斋 +长者 +长者团 +长征 +长治 +长治久安 +长治市 +长治县 +长智 +长中短篇 +长住 +长桌 +长子 +长子县 +长足 +长嘴 +长座 +肠 +肠癌 +肠壁 +肠穿孔 +肠道 +肠儿 +肠梗阻 +肠骨 +肠管 +肠结核 +肠镜 +肠绒毛 +肠伤寒 +肠套叠 +肠胃 +肠胃病 +肠胃炎 +肠系膜 +肠炎 +肠液 +肠衣 +肠子 +肠阻塞 +苌 +苌池乡 +尝 +尝尝 +尝鼎一脔 +尝试 +尝受 +尝新 +偿 +偿付 +偿还 +偿还期 +偿命 +偿愿 +偿债 +偿债率 +常 +常安 +常备 +常备不懈 +常备军 +常柴 +常常 +常川 +常春藤 +常导 +常德 +常德市 +常规 +常规岛 +常规赛 +常规武器 +常规性 +常规战争 +常轨 +常会 +常家庄 +常见 +常见病 +常见于 +常开不败 +常客 +常理 +常例 +常量 +常流水 +常绿树 +常绿植物 +常秘 +常明灯 +常年 +常年累月 +常年性 +常宁 +常宁市 +常平 +常平镇 +常青 +常青不衰 +常青草 +常青树 +常青藤 +常青乡 +常青镇 +常青组 +常情 +常人 +常任 +常山 +常山县 +常设 +常设性 +常胜 +常胜不衰 +常时 +常识 +常识课 +常识性 +常事 +常熟 +常熟市 +常数 +常太镇 +常态 +常委 +常委会 +常温 +常温层 +常温动物 +常武 +常务 +常务董事 +常务会 +常务委员 +常压 +常言 +常言道 +常用 +常用对数 +常用语 +常用字 +常沅 +常沅村 +常值 +常州 +常州城 +常州港 +常州沟 +常州籍 +常州市 +常住 +常驻 +常驻程序 +常驻地 +常抓不懈 +徜徉 +嫦娥 +厂 +厂办 +厂报 +厂部 +厂长 +厂长室 +厂厂 +厂甸 +厂方 +厂房 +厂规 +厂棍 +厂级 +厂籍 +厂纪 +厂际 +厂家 +厂矿 +厂里 +厂龄 +厂貌 +厂门 +厂名 +厂桥 +厂情 +厂庆 +厂区 +厂容 +厂商 +厂史 +厂务 +厂休 +厂训 +厂证 +厂址 +厂主 +厂子 +场 +场办 +场边 +场部 +场裁 +场长 +场场 +场次 +场道 +场地 +场地费 +场房 +场馆 +场馆处 +场磙 +场合 +场记 +场景 +场里 +场面 +场内 +场内外 +场圃 +场强 +场区 +场上 +场所 +场外 +场下 +场员 +场院 +场站 +场址 +场主 +场子 +场租 +敞 +敞车 +敞架 +敞开 +敞开儿 +敞开式 +敞亮 +敞亮亮 +敞露 +敞篷 +敞篷车 +怅怅 +怅然 +怅然若失 +怅然之余 +怅惘 +畅 +畅达 +畅快 +畅流 +畅顺 +畅所欲言 +畅谈 +畅通 +畅通无阻 +畅想 +畅想曲 +畅销 +畅销货 +畅销书 +畅行 +畅行无阻 +畅叙 +畅饮 +畅游 +倡 +倡办 +倡导 +倡导国 +倡导者 +倡和 +倡廉 +倡言 +倡言者 +倡议 +倡议书 +倡议信 +倡议者 +唱 +唱本 +唱词 +唱段 +唱对台戏 +唱法 +唱反调 +唱高调 +唱歌 +唱工 +唱和 +唱红 +唱红脸 +唱机 +唱经声 +唱盘 +唱片 +唱片儿 +唱片业 +唱票 +唱票员 +唱腔 +唱曲 +唱诗班 +唱头 +唱戏 +唱响 +唱针 +唱主角 +抄 +抄报 +抄本 +抄表员 +抄抄写写 +抄家 +抄件 +抄录 +抄收 +抄送 +抄袭 +抄袭者 +抄写 +抄纸 +钞 +钞本 +钞票 +超 +超拔 +超霸 +超编 +超标 +超标车 +超标费 +超标率 +超标准 +超薄 +超薄型 +超采 +超产 +超长 +超长穗型 +超常 +超常规 +超车 +超尘绝俗 +超稠油 +超出 +超储 +超纯水 +超大 +超大规模 +超大穗 +超大型 +超党派 +超导 +超导电性 +超导体 +超低空 +超低温 +超度 +超短波 +超短裙 +超额 +超额利润 +超二级 +超凡 +超凡入圣 +超凡脱俗 +超范围 +超负荷 +超高 +超高层 +超高产 +超高频 +超高速 +超高压 +超固态 +超规定 +超国家 +超过 +超过者 +超乎 +超级 +超级大国 +超级稻 +超级市场 +超极限 +超计划 +超纪录 +超假 +超交 +超阶段 +超阶级 +超金 +超巨星 +超巨型 +超绝 +超历史 +超量 +超临界 +超龄 +超迈 +超期 +超前 +超前性 +超浅 +超强 +超强度 +超轻量 +超群 +超群绝伦 +超然 +超然物外 +超人 +超人眼 +超社会 +超生 +超声 +超声波 +超声室 +超时 +超时空 +超时令 +超世之才 +超市 +超收 +超爽型 +超水平 +超速 +超脱 +超文本 +超稳定 +超稀植 +超现实 +超限额 +超新星 +超需求 +超一流 +超逸 +超逸尘 +超音速 +超音速队 +超预算 +超员 +超远 +超越 +超载 +超正常 +超支 +超重 +超重者 +超自然 +巢 +巢湖 +巢鼠 +巢县 +巢穴 +朝 +朝拜 +朝不保夕 +朝朝暮暮 +朝城县 +朝代 +朝发夕至 +朝方 +朝奉郎 +朝服 +朝晖 +朝见 +朝觐 +朝觐部 +朝觐者 +朝连岛 +朝令夕改 +朝露 +朝气 +朝气蓬勃 +朝乾夕惕 +朝秦暮楚 +朝日 +朝三暮四 +朝圣 +朝圣者 +朝思暮想 +朝天椒 +朝天门 +朝天门港 +朝天区 +朝廷 +朝廷树 +朝外 +朝文系 +朝夕 +朝夕相处 +朝霞 +朝鲜 +朝鲜队 +朝鲜式 +朝鲜族 +朝向 +朝阳 +朝阳花 +朝阳路 +朝阳门 +朝阳区 +朝阳市 +朝阳镇 +朝野 +朝政 +朝中社 +朝着 +嘲 +嘲风咏月 +嘲讽 +嘲弄 +嘲笑 +嘲笑声 +潮 +潮安县 +潮白河 +潮白河畔 +潮河 +潮乎乎 +潮籍 +潮剧 +潮卷浪涌 +潮流 +潮起 +潮起潮落 +潮气 +潮热 +潮润 +潮汕 +潮湿 +潮水 +潮田街 +潮田乡 +潮头 +潮位 +潮汐 +潮汐能 +潮汛 +潮阳 +潮阳市 +潮涌 +潮涨潮落 +潮州 +潮州籍 +潮州市 +吵 +吵吵闹闹 +吵吵嚷嚷 +吵架 +吵闹 +吵闹声 +吵嚷 +吵醒 +吵嘴 +炒 +炒菜 +炒豆子 +炒股 +炒锅 +炒黄豆 +炒汇 +炒货 +炒家 +炒冷饭 +炒买炒卖 +炒卖 +炒米 +炒面 +炒勺 +炒手 +炒鱿鱼 +炒作 +炒作者 +车 +车把 +车把势 +车板 +车长 +车场 +车臣 +车城 +车程 +车船 +车船费 +车船票 +车船税 +车窗 +车床 +车次 +车刀 +车道 +车灯 +车底 +车顶 +车斗 +车队 +车尔臣河 +车贩子 +车匪 +车匪路霸 +车费 +车夫 +车改 +车盖 +车工 +车公庄 +车钩 +车轱辘 +车轱辘话 +车管 +车管科 +车管所 +车海 +车号 +车痕 +车户 +车祸 +车迹 +车技 +车价 +车驾 +车架 +车架厂 +车间 +车江乡 +车江窑 +车库 +车况 +车辆 +车辆厂 +车辆场 +车辆险 +车辚马啸 +车铃 +车流 +车流量 +车流声 +车旅费 +车轮 +车轮赛 +车轮战 +车马 +车马费 +车马坑 +车马炮 +车马盈门 +车满为患 +车门 +车模 +车膜 +车牌 +车棚 +车篷 +车皮 +车票 +车票费 +车票款 +车铺 +车骑 +车钱 +车桥 +车桥厂 +车上 +车身 +车身险 +车市 +车手 +车水马龙 +车速 +车损 +车损险 +车锁 +车胎 +车摊 +车体 +车条 +车头 +车尾 +车位 +车务 +车务段 +车险 +车厢 +车箱 +车箱厂 +车行道 +车型 +车业 +车印 +车影 +车用 +车载 +车载斗量 +车载式 +车展 +车战 +车站 +车照 +车辙 +车轴 +车主 +车子 +车组 +车座 +扯 +扯动 +扯后腿 +扯皮 +扯皮电 +扯平 +扯秧 +彻 +彻底 +彻底性 +彻骨 +彻里彻外 +彻头彻尾 +彻悟 +彻夜 +彻夜不眠 +彻夜未眠 +掣 +掣动 +掣肘 +撤 +撤案 +撤编 +撤兵 +撤并 +撤出 +撤除 +撤掉 +撤换 +撤回 +撤军 +撤离 +撤诉 +撤退 +撤消 +撤销 +撤职 +撤资 +撤走 +抻 +抻面 +郴 +郴县 +郴州 +郴州市 +嗔怪 +尘 +尘埃 +尘埃传染 +尘埃落定 +尘埃盘 +尘埃云 +尘暴 +尘封 +尘封日久 +尘垢 +尘寰 +尘沙 +尘砂 +尘世 +尘事 +尘俗 +尘土 +尘嚣 +尘烟 +臣 +臣僚 +臣民 +臣下 +臣子 +忱 +沉 +沉沉 +沉沉的 +沉船 +沉底 +沉甸 +沉甸甸 +沉淀 +沉淀物 +沉浮 +沉厚 +沉湖镇 +沉积 +沉积层 +沉积岩 +沉寂 +沉降 +沉浸 +沉井 +沉静 +沉疴 +沉雷 +沉沦 +沉没 +沉闷 +沉迷 +沉湎 +沉默 +沉默寡言 +沉默少语 +沉溺 +沉凝 +沉潜 +沉实 +沉水植物 +沉睡 +沉思 +沉思默想 +沉痛 +沉稳 +沉陷 +沉香亭 +沉箱 +沉心 +沉心静气 +沉雄 +沉毅 +沉吟 +沉吟不决 +沉鱼落雁 +沉郁 +沉冤 +沉陨 +沉渣 +沉重 +沉重感 +沉住气 +沉着 +沉醉 +辰 +辰光杯 +辰河 +辰砂 +辰溪 +辰阳 +陈 +陈案 +陈兵 +陈埠乡 +陈曹乡 +陈陈相因 +陈词滥调 +陈辞旧语 +陈醋 +陈村 +陈笪村 +陈埭镇 +陈放 +陈腐 +陈工 +陈官乡 +陈规 +陈规陋习 +陈迹 +陈集乡 +陈家村 +陈家山 +陈家屯 +陈酒 +陈旧 +陈旧感 +陈列 +陈列部 +陈列馆 +陈列柜 +陈列品 +陈列室 +陈米 +陈年 +陈年旧规 +陈年老辞 +陈皮 +陈绍 +陈设 +陈述 +陈述句 +陈说 +陈宿 +陈屋村 +陈屋坡 +陈吴乡 +陈言 +陈屿 +陈屿镇 +陈渣 +陈展 +陈州 +陈庄 +陈庄村 +陈庄乡 +晨 +晨报 +晨风 +晨光 +晨光熹微 +晨晖 +晨辉 +晨昏 +晨课 +晨练 +晨练点 +晨练者 +晨露 +晨幕 +晨时 +晨晚练点 +晨雾 +晨夕 +晨曦 +晨兴 +晨星 +晨阳 +晨钟 +晨钟暮鼓 +谌 +闯 +闯闯 +闯荡 +闯关东 +闯关夺隘 +闯祸 +闯祸者 +闯江湖 +闯将 +闯劲 +闯进 +闯入 +衬 +衬布 +衬底 +衬垫 +衬裤 +衬里 +衬砌 +衬裙 +衬衫 +衬衫业 +衬托 +衬衣 +衬字 +称 +称霸 +称称 +称道 +称得上 +称多县 +称法 +称孤道寡 +称号 +称呼 +称快 +称量 +称身 +称颂 +称体裁衣 +称王 +称王称霸 +称为 +称谓 +称羡 +称谢 +称心 +称心如意 +称兄道弟 +称雄 +称许 +称意 +称誉 +称赞 +称赞声 +称之为 +称职 +称职者 +称著 +称作 +称做 +趁 +趁便 +趁火打劫 +趁机 +趁亮 +趁热打铁 +趁人之危 +趁势 +趁早 +趁着 +谶 +谶纬 +谶语 +蛏干 +蛏田 +蛏子 +撑 +撑持 +撑杆跳 +撑杆跳高 +撑竿跳 +撑竿跳高 +撑篙 +撑紧轮 +撑开 +撑门面 +撑腰 +撑住 +瞠目 +瞠目结舌 +丞相 +成 +成安 +成安县 +成百 +成败 +成倍 +成本 +成本额 +成本费 +成本会计 +成本价 +成不了 +成才 +成才路 +成材 +成材林 +成材率 +成册 +成长 +成长林 +成长期 +成长史 +成长性 +成虫 +成大海 +成都 +成都籍 +成都路 +成都市 +成堆 +成法 +成方 +成飞 +成分 +成分股 +成分论 +成份 +成份股 +成风 +成功 +成功路 +成功率 +成功者 +成骨 +成规 +成果 +成果奖 +成果率 +成果展 +成果者 +成化五年 +成婚 +成活 +成活关 +成活率 +成绩 +成绩单 +成家 +成家立业 +成见 +成建制 +成交 +成交额 +成交价 +成交量 +成教 +成教处 +成井 +成就 +成就感 +成就奖 +成就展 +成筐 +成矿 +成矿作用 +成立 +成立会 +成例 +成料 +成林 +成龙 +成龙配套 +成寐 +成名 +成名成家 +成名作 +成命 +成年 +成年累月 +成年人 +成年组 +成牛 +成培 +成批 +成皮 +成片 +成品 +成品房 +成品率 +成品油 +成其为 +成气候 +成器 +成千上百 +成千上万 +成亲 +成全 +成群 +成群结队 +成群结对 +成群连片 +成人 +成人版 +成人化 +成人节 +成人气 +成人式 +成人者 +成人之美 +成人装 +成人组 +成仁 +成色 +成事 +成书 +成熟 +成熟度 +成熟林 +成熟论 +成熟期 +成熟性 +成树 +成数 +成说 +成塑机 +成算 +成套 +成套率 +成天 +成田 +成铁局 +成团 +成为 +成文 +成文法 +成问题 +成武 +成武县 +成习 +成箱 +成像机 +成效 +成心 +成行 +成形 +成形术 +成型 +成型法 +成型机 +成型件 +成药 +成也萧何 +成衣 +成衣店 +成衣法 +成议 +成因 +成瘾性 +成鱼 +成语 +成员 +成员国 +成员体 +成约 +成灾 +成指 +成竹在胸 +成组技术 +呈 +呈报 +呈递 +呈奉 +呈贡县 +呈交 +呈缴 +呈缴本 +呈列 +呈请 +呈示 +呈送 +呈文 +呈现 +呈献 +呈子 +承 +承办 +承办人 +承办者 +承包 +承包地 +承包点 +承包额 +承包方 +承包费 +承包户 +承包价 +承包款 +承包期 +承包权 +承包人 +承包商 +承包田 +承包者 +承包制 +承保 +承保商 +承保者 +承船厢 +承贷 +承贷承还 +承担 +承担者 +承当 +承德 +承德市 +承兑 +承发包 +承付 +承负 +承购 +承购人 +承还 +承继 +承建 +承建方 +承建商 +承建者 +承接 +承救 +承揽 +承蒙 +承诺 +承诺额 +承诺函 +承诺卡 +承诺书 +承诺制 +承前启后 +承认 +承上启下 +承审员 +承受 +承受力 +承受者 +承台梁 +承天殿 +承托 +承托运 +承袭 +承先启后 +承销 +承销商 +承销团 +承修 +承压 +承印 +承印点 +承运 +承运人 +承载 +承载力 +承债式 +承制 +承重 +承重墙 +承租 +承租人 +承租商 +承租者 +承做 +诚 +诚笃 +诚惶诚恐 +诚恳 +诚聘 +诚朴 +诚然 +诚如 +诚实 +诚心 +诚心诚意 +诚心实意 +诚信 +诚邀 +诚意 +诚挚 +城 +城巴 +城堡 +城北 +城北区 +城北乡 +城北镇 +城步 +城池 +城雕委 +城调队 +城东 +城东村 +城东区 +城东乡 +城垛 +城防 +城府 +城根 +城工部 +城工委 +城固 +城固县 +城关 +城关村 +城关乡 +城关镇 +城管 +城管办 +城管局 +城郭 +城壕 +城隍 +城隍庙 +城徽 +城际 +城建 +城建费 +城建局 +城建司 +城郊 +城郊乡 +城郊型 +城角 +城近郊 +城近郊区 +城口县 +城里 +城里人 +城陵矶 +城楼 +城门 +城门头 +城内 +城南 +城南区 +城南庄 +城墙 +城墙史 +城庆 +城区 +城山镇 +城设通 +城市 +城市处 +城市化 +城市贫民 +城市群 +城台 +城头 +城外 +城西乡 +城下 +城下之盟 +城乡 +城乡村 +城乡游 +城厢 +城厢镇 +城信 +城阳区 +城邑 +城垣 +城垣史 +城运会 +城镇 +城镇化 +城镇群 +城址 +城中 +城砖 +乘 +乘车 +乘车人 +乘车证 +乘除 +乘船 +乘法 +乘方 +乘风破浪 +乘风扬帆 +乘号 +乘机 +乘机人 +乘积 +乘警 +乘警队 +乘客 +乘凉 +乘幂 +乘其不备 +乘骑者 +乘人之危 +乘胜 +乘胜前进 +乘胜追击 +乘势 +乘势而上 +乘数 +乘务 +乘务部 +乘务长 +乘务警 +乘务员 +乘务组 +乘隙 +乘兴 +乘兴而来 +乘虚而入 +乘以 +乘员 +乘晕宁 +乘着 +乘坐 +埕 +惩 +惩办 +惩处 +惩恶扬善 +惩罚 +惩罚性 +惩戒 +惩前毖后 +惩一儆百 +惩治 +程 +程度 +程度者 +程海乡 +程家峪村 +程控 +程控化 +程控机 +程林街 +程林庄 +程派 +程式 +程式化 +程途 +程序 +程序法 +程序化 +程序名 +程序模块 +程序性 +澄 +澄北镇 +澄碧 +澄澈 +澄海市 +澄江 +澄江县 +澄浆泥 +澄明 +澄清 +澄沙 +橙 +橙红色 +橙黄 +橙黄色 +橙色 +橙子 +逞 +逞暴 +逞能 +逞强 +逞凶 +秤 +秤锤 +秤杆 +秤钩 +秤毫 +秤纽 +秤盘 +秤盘子 +秤砣 +秤星 +吃 +吃败仗 +吃闭门羹 +吃不服 +吃不开 +吃不来 +吃不起 +吃不消 +吃不住 +吃吃 +吃吃喝喝 +吃穿住行 +吃大锅饭 +吃大户 +吃刀子 +吃得开 +吃得来 +吃得消 +吃得住 +吃掉 +吃独食 +吃法 +吃饭 +吃饭型 +吃干榨净 +吃瓜人 +吃官司 +吃光 +吃喝 +吃喝费 +吃喝风 +吃喝玩乐 +吃后悔药 +吃回扣 +吃紧 +吃劲 +吃惊 +吃苦 +吃苦耐劳 +吃苦头 +吃亏 +吃亏论 +吃亏上当 +吃老本 +吃里扒外 +吃里爬外 +吃力 +吃零食 +吃零嘴 +吃派饭 +吃偏饭 +吃请 +吃剩 +吃食 +吃水 +吃水量 +吃水线 +吃素 +吃透 +吃闲饭 +吃现成 +吃现成饭 +吃香 +吃哑巴亏 +吃药 +吃一堑 +吃重 +吃住行 +蚩 +蚩尤北寨 +蚩尤寨 +鸱尾 +笞 +嗤 +嗤笑 +嗤之以鼻 +痴 +痴痴 +痴痴地 +痴呆 +痴呆呆 +痴迷 +痴迷者 +痴情 +痴情不移 +痴人说梦 +痴心 +痴心妄想 +痴愚世延 +痴者 +痴子 +痴醉 +弛 +弛缓 +弛懈 +池 +池边 +池袋 +池洞 +池洞镇 +池阁 +池馆台榭 +池河 +池杉 +池杉株 +池上 +池水 +池塘 +池屋 +池盐 +池园 +池沼 +池州 +池子 +池组 +池座 +驰 +驰骋 +驰荡 +驰道 +驰名 +驰名中外 +驰去 +驰骛 +驰誉 +驰援 +迟 +迟报 +迟迟 +迟到 +迟到者 +迟钝 +迟缓 +迟缓率 +迟脉 +迟暮 +迟误 +迟效肥料 +迟延 +迟疑 +迟疑不决 +迟早 +迟滞 +迟滞不前 +茌平 +茌平县 +持 +持币人 +持股会 +持机人 +持机者 +持家 +持久 +持久化 +持久性 +持久战 +持卡人 +持卡者 +持平 +持旗人 +持旗者 +持枪 +持枪者 +持枪证 +持球 +持球者 +持券人 +持外汇者 +持锨者 +持械 +持续 +持续性 +持异议者 +持有 +持有额 +持有期 +持有人 +持有者 +持证 +持之以恒 +持之有故 +持重 +匙尾子 +匙子 +墀 +踟蹰 +尺 +尺寸 +尺动脉 +尺牍 +尺度 +尺幅 +尺幅千里 +尺骨 +尺蠖 +尺码 +尺有所短 +尺中 +尺子 +侈 +侈谈 +齿 +齿斑 +齿唇音 +齿垢 +齿鲸 +齿科 +齿冷 +齿轮 +齿轮泵 +齿轮厂 +齿轮油 +齿鸟类 +齿腔 +齿髓 +齿舞 +齿龈 +耻 +耻骨 +耻辱 +耻辱榜 +耻辱感 +耻辱柱 +耻笑 +叱咤 +叱咤风云 +斥 +斥力 +斥骂 +斥责 +斥之为 +斥资 +赤 +赤坂 +赤壁 +赤膊 +赤膊上阵 +赤潮 +赤忱 +赤诚 +赤胆忠心 +赤道 +赤豆 +赤豆粥 +赤峰 +赤峰市 +赤岗村 +赤瓜礁 +赤红 +赤狐 +赤角 +赤脚 +赤脚医生 +赤金 +赤痢 +赤练蛇 +赤磷 +赤裸 +赤裸裸 +赤霉病 +赤霉素 +赤面 +赤贫 +赤热 +赤色 +赤芍 +赤身露体 +赤身裸体 +赤石 +赤手空拳 +赤水 +赤水河 +赤松 +赤塔 +赤条条 +赤铁矿 +赤铜矿 +赤铜色 +赤兔马 +赤卫队 +赤卫军 +赤县 +赤小豆 +赤心 +赤心报国 +赤眼蜂 +赤杨 +赤竹 +赤柱 +赤子 +赤子情 +赤子之心 +赤字 +赤字额 +赤足 +炽 +炽烈 +炽热 +翅 +翅膀 +翅果 +翅脉 +翅鞘 +翅翼 +翅子 +敕 +敕勒 +敕勒川 +充 +充畅 +充斥 +充充 +充充电 +充当 +充电 +充电房 +充电器 +充耳不闻 +充放电 +充分 +充分性 +充公 +充饥 +充军 +充满 +充沛 +充其量 +充气 +充气棒 +充气灯泡 +充气垫 +充气机 +充气式 +充任 +充塞 +充实 +充数 +充填 +充血 +充压 +充要条件 +充溢 +充盈 +充裕 +充装站 +充足 +充足率 +冲 +冲厕 +冲程 +冲床 +冲刺 +冲淡 +冲抵法 +冲掉 +冲动 +冲动型 +冲锋 +冲锋号 +冲锋枪 +冲锋陷阵 +冲服 +冲毁 +冲昏 +冲昏头脑 +冲击 +冲击波 +冲击方 +冲击力 +冲击伤 +冲击性 +冲击钻 +冲积 +冲积平原 +冲积扇 +冲剂 +冲劲 +冲决 +冲开 +冲垮 +冲扩点 +冲浪 +冲浪者 +冲力 +冲凉 +冲量 +冲脉乡 +冲模 +冲泡 +冲破 +冲拳 +冲赛康 +冲散 +冲杀 +冲砂闸 +冲绳 +冲绳岛 +冲绳馆 +冲绳县 +冲刷 +冲水式 +冲腾 +冲天 +冲天炮 +冲突 +冲突点 +冲洗 +冲线 +冲向 +冲消 +冲销 +冲压 +冲压机 +冲压线 +冲翼艇 +冲渣池 +冲账 +冲撞 +冲撞力 +冲子 +冲走 +忡忡 +憧憬 +虫 +虫草 +虫唱 +虫吃牙 +虫害 +虫胶 +虫卵 +虫媒花 +虫情 +虫牙 +虫眼 +虫瘿 +虫灾 +虫子 +崇 +崇拜 +崇拜者 +崇高 +崇皇乡 +崇敬 +崇敬感 +崇礼乡 +崇明 +崇明岛 +崇明县 +崇仁 +崇山峻岭 +崇尚 +崇文 +崇文门 +崇文区 +崇武镇 +崇洋 +崇洋媚外 +崇仰 +崇义县 +崇祯 +崇州市 +宠 +宠爱 +宠爱有加 +宠爱者 +宠臣 +宠儿 +宠坏 +宠辱不惊 +宠物 +宠信 +宠幸 +铳 +铳伤 +铳响 +抽 +抽查 +抽抽 +抽出 +抽搐 +抽打 +抽点 +抽调 +抽动 +抽斗 +抽风 +抽击 +抽击力 +抽检 +抽奖 +抽筋 +抽紧 +抽空 +抽冷子 +抽气机 +抽泣 +抽泣声 +抽签 +抽签式 +抽取 +抽取量 +抽身 +抽水 +抽水泵 +抽水机 +抽水马桶 +抽水站 +抽丝 +抽穗 +抽穗期 +抽屉 +抽屉式 +抽暇 +抽象 +抽象代数 +抽象化 +抽象画 +抽象劳动 +抽象美 +抽象派 +抽象性 +抽血 +抽芽 +抽烟 +抽验 +抽样 +抽样调查 +抽噎 +抽油机 +抽油烟机 +仇 +仇敌 +仇恨 +仇湖镇 +仇家 +仇人 +仇杀 +仇视 +仇外 +仇怨 +仇者 +俦 +惆怅 +绸 +绸布 +绸带 +绸缎 +绸料 +绸面 +绸纹纸 +绸子 +畴昔 +愁 +愁肠百结 +愁怀 +愁苦 +愁眉不展 +愁眉苦脸 +愁眉锁眼 +愁容 +愁事 +愁丝 +愁思 +愁绪 +愁云 +稠 +稠乎乎 +稠密 +稠油 +稠油田 +筹 +筹办 +筹备 +筹备处 +筹备会 +筹备组 +筹措 +筹划 +筹集 +筹建 +筹借 +筹款 +筹码 +筹谋 +筹募 +筹拍 +筹融资 +筹算 +筹委 +筹委会 +筹资 +筹资额 +筹组 +酬 +酬报 +酬宾 +酬答 +酬对 +酬金 +酬劳 +酬谢 +踌躇 +踌躇不前 +踌躇满志 +丑 +丑八怪 +丑诋 +丑恶 +丑化 +丑话 +丑角 +丑剧 +丑类 +丑陋 +丑牛 +丑婆子 +丑事 +丑态 +丑态百出 +丑闻 +丑小鸭 +瞅 +瞅瞅 +臭 +臭虫 +臭椿 +臭豆腐 +臭烘烘 +臭乎乎 +臭活 +臭老九 +臭骂 +臭帽 +臭名远扬 +臭名昭彰 +臭名昭著 +臭皮囊 +臭气 +臭味 +臭味相投 +臭腺 +臭氧 +臭氧层 +臭氧洞 +出 +出版 +出版法 +出版家 +出版奖 +出版界 +出版局 +出版量 +出版权 +出版人 +出版商 +出版社 +出版史 +出版署 +出版物 +出版学 +出版业 +出版者 +出奔 +出殡 +出兵 +出彩 +出操 +出岔子 +出差 +出差者 +出产 +出厂 +出厂价 +出场 +出场费 +出超 +出车 +出尘脱俗 +出丑 +出出 +出出进进 +出处 +出错 +出道 +出敌不意 +出典 +出点子 +出动 +出兑 +出尔反尔 +出发 +出发地 +出发点 +出访 +出粉率 +出粪口 +出风头 +出港 +出格 +出工 +出菇率 +出乖露丑 +出关 +出轨 +出国 +出国潮 +出国梦 +出果期 +出海 +出海口 +出海人 +出航 +出乎 +出乎意料 +出乎预料 +出活 +出击 +出家 +出家为尼 +出价 +出嫁 +出疆棉 +出界 +出借 +出借方 +出借人 +出警 +出警率 +出境 +出境部 +出境费 +出局 +出具 +出口 +出口不凡 +出口成章 +出口处 +出口地 +出口额 +出口儿 +出口国 +出口量 +出口路 +出口品 +出口权 +出口人 +出口商 +出口型 +出口业 +出口者 +出口值 +出来 +出栏 +出栏率 +出栏数 +出类拔萃 +出冷门 +出力 +出列 +出猎 +出笼 +出路 +出乱子 +出落 +出马 +出麦口 +出卖 +出毛病 +出没 +出门 +出门在外 +出米率 +出面 +出苗 +出名 +出谋划策 +出谋献策 +出纳 +出纳台 +出纳员 +出难题 +出票机 +出品 +出品人 +出其不意 +出奇 +出奇制胜 +出气 +出气儿 +出气筒 +出钱 +出鞘 +出勤 +出勤率 +出去 +出让 +出让方 +出让金 +出人命 +出人头地 +出人意表 +出人意料 +出人意外 +出人预料 +出仁率 +出任 +出肉率 +出入 +出入境 +出入口 +出入院 +出入证 +出赛 +出色 +出山 +出身 +出神 +出神入化 +出生 +出生地 +出生率 +出生入死 +出生证 +出省证 +出师 +出使 +出世 +出世作 +出示 +出事 +出手 +出手不凡 +出售 +出售方 +出售关 +出售者 +出水孔 +出水量 +出台 +出摊 +出汤量 +出逃 +出题 +出庭 +出头 +出头露面 +出头之日 +出徒 +出土 +出土文物 +出外 +出息 +出席 +出席证 +出弦度 +出险 +出险率 +出现 +出线 +出线楼 +出线权 +出项 +出新 +出行 +出血 +出血点 +出血量 +出血热 +出巡 +出芽 +出芽生殖 +出言 +出言不慎 +出言不逊 +出演 +出洋 +出洋相 +出以公心 +出油率 +出游 +出游率 +出游者 +出于 +出于无奈 +出狱 +出浴 +出院 +出院者 +出运 +出展 +出战 +出站口 +出掌 +出诊 +出阵 +出征 +出证 +出众 +出资 +出资额 +出资方 +出资国 +出资人 +出资者 +出资证 +出自 +出走 +出租 +出租车 +出租地 +出租店 +出租费 +出租率 +出租汽车 +出租人 +出租业 +初 +初八 +初版 +初版本 +初保 +初步 +初出茅庐 +初创 +初春 +初次 +初等 +初等教育 +初冬 +初度 +初段 +初二 +初犯 +初犯者 +初访者 +初伏 +初高中 +初稿 +初观者 +初婚 +初基 +初级 +初级类 +初级社 +初级线圈 +初级小学 +初级中学 +初记 +初霁 +初见 +初见成效 +初见端倪 +初交 +初教处 +初解 +初九 +初具 +初具规模 +初刻 +初来乍到 +初来者 +初恋 +初六 +初露 +初露端倪 +初露锋芒 +初年 +初评 +初七 +初期 +初秋 +初任 +初赛 +初三 +初涉 +初涉者 +初审 +初生 +初生态 +初生之犊 +初十 +初时 +初识 +初始 +初始条件 +初试 +初试锋芒 +初四 +初四五 +初速 +初探 +初唐 +初五 +初夏 +初显式微 +初小 +初选 +初学 +初学者 +初雪 +初芽 +初样 +初叶 +初一 +初印 +初院 +初愿 +初轧厂 +初战 +初掌帅印 +初诊 +初值 +初中 +初中版 +初中级 +初中生 +初中组 +初衷 +初装费 +刍议 +除 +除暴安良 +除弊 +除冰液 +除草 +除草剂 +除颤器 +除尘 +除尘器 +除虫菊 +除臭剂 +除此而外 +除此外 +除此以外 +除此之外 +除掉 +除恶 +除恶务尽 +除法 +除非 +除根 +除害 +除害兴利 +除害者 +除号 +除旧布新 +除旧迎新 +除开 +除了 +除名 +除去 +除却 +除湿 +除数 +除外 +除夕 +除夕夜 +除险 +除以 +除忧 +厨 +厨刀 +厨房 +厨具 +厨师 +厨师班 +厨子 +滁县 +滁州 +滁州市 +锄 +锄草 +锄草机 +锄强扶弱 +锄头 +雏 +雏儿 +雏鸡 +雏鸟 +雏形 +雏燕 +雏鹰 +橱 +橱窗 +橱柜 +杵 +础 +础石 +储 +储备 +储备金 +储备局 +储备库 +储备粮 +储备量 +储备率 +储备棉 +储备头寸 +储采 +储藏 +储藏量 +储藏室 +储存 +储存罐 +储存量 +储存器 +储存区 +储贷 +储电量 +储罐 +储洪 +储户 +储灰场 +储金 +储量 +储木场 +储能技术 +储气瓶 +储气田 +储水柜 +储蓄 +储蓄额 +储蓄卡 +储蓄率 +储蓄所 +储蓄箱 +储蓄型 +储蓄性 +储蓄员 +储血 +储油构造 +储油罐 +储油库 +储油轮 +储油区 +储油站 +储运 +储运部 +储运费 +楚 +楚边 +楚布寺 +楚才杯 +楚楚 +楚楚动人 +楚楚静立 +楚辞 +楚歌 +楚国 +楚汉相争 +楚汉之争 +楚河大街 +楚河汉界 +楚河州 +楚剧 +楚剧团 +楚乐宫 +楚鲁松杰 +楚门镇 +楚人 +楚天 +楚王 +楚王陵 +楚雄 +楚雄市 +楚雄州 +楚庄乡 +褚褐色 +处 +处变 +处变不惊 +处长 +处处 +处罚 +处罚法 +处罚权 +处方 +处方单 +处方权 +处分 +处分者 +处级 +处结 +处警 +处境 +处决 +处里 +处理 +处理不当 +处理厂 +处理场 +处理费 +处理关 +处理机 +处理剂 +处理价 +处理量 +处理率 +处理品 +处理器 +处理权 +处理站 +处女 +处女地 +处女膜 +处女作 +处人 +处身 +处士 +处世 +处世经 +处事 +处室 +处暑 +处死 +处所 +处所词 +处心积虑 +处刑 +处以 +处于 +处在 +处之泰然 +处治 +处置 +处置场 +处置费 +处置权 +处子 +怵 +怵头 +触 +触电 +触动 +触发 +触发器 +触犯 +触及 +触礁 +触角 +触景伤情 +触景生情 +触觉 +触雷 +触类旁通 +触媒 +触摸 +触摸池 +触摸屏 +触摸式 +触目 +触目皆是 +触目惊心 +触怒 +触手 +触痛 +触须 +触爪 +憷头 +矗立 +矗起 +搋子 +揣 +揣测 +揣度 +揣摸 +揣摩 +揣想 +啜 +啜泣 +嘬 +踹 +川 +川北 +川贝 +川贝母 +川菜 +川岛 +川东 +川鄂 +川红 +川黄液 +川籍 +川江 +川剧 +川剧团 +川剧院 +川军 +川流不息 +川马 +川妹 +川棉 +川奈 +川南 +川田 +川西 +川戏 +川芎 +川渝 +川语 +川中 +川资 +穿 +穿插 +穿刺 +穿戴 +穿法 +穿缝透窗 +穿过 +穿甲弹 +穿孔 +穿孔机 +穿流 +穿山甲 +穿山龙 +穿山越谷 +穿山越岭 +穿射 +穿梭 +穿梭机 +穿堂儿 +穿堂风 +穿堂门 +穿天杨 +穿透 +穿透力 +穿小鞋 +穿心莲 +穿行 +穿巡 +穿衣 +穿衣镜 +穿越 +穿云破雾 +穿凿附会 +穿针引线 +穿着 +传 +传帮带 +传遍 +传播 +传播点 +传播台 +传播学 +传播业 +传播者 +传布 +传唱 +传抄 +传承 +传出 +传出神经 +传达 +传达室 +传代 +传单 +传导 +传道 +传道授业 +传递 +传递力 +传动 +传动比 +传动带 +传动轮 +传动轴 +传感 +传感器 +传呼 +传呼电话 +传呼机 +传呼台 +传话 +传唤 +传回 +传记 +传记类 +传记片 +传记性 +传家 +传家宝 +传教 +传教士 +传接 +传接球 +传经授道 +传经授艺 +传经送宝 +传开 +传来 +传令 +传略 +传媒 +传媒界 +传媒者 +传票 +传奇 +传奇式 +传奇性 +传情 +传球 +传染 +传染病 +传染科 +传染性 +传染源 +传热 +传人 +传入 +传入期 +传入神经 +传神 +传声器 +传声筒 +传石 +传世 +传世之作 +传授 +传输 +传输网 +传输线 +传说 +传诵 +传送 +传送带 +传颂 +传统 +传统课 +传统式 +传统戏 +传统校 +传统型 +传统性 +传为佳话 +传为美谈 +传闻 +传习 +传习所 +传销 +传销价 +传销客 +传销商 +传销商品 +传销业 +传销员 +传销者 +传讯 +传讯台 +传言 +传扬 +传艺 +传阅 +传真 +传真电报 +传真机 +传真件 +传之久远 +传中球 +传种 +传主 +传宗接代 +船 +船板 +船帮 +船泊 +船舶 +船舶业 +船埠 +船舱 +船长 +船厂 +船底 +船电 +船东 +船队 +船墩 +船儿 +船帆 +船夫 +船夫曲 +船歌 +船舸 +船工 +船公 +船户 +船级社 +船家 +船坚炮利 +船桨 +船壳 +船老大 +船龄 +船民 +船模 +船篷 +船票 +船期 +船期费 +船钱 +船蛆 +船山乡 +船上 +船身 +船速 +船台 +船体 +船艇 +船头 +船王 +船尾 +船位 +船坞 +船务 +船舷 +船形帽 +船型 +船营区 +船用 +船员 +船运 +船闸 +船闸门 +船闸式 +船只 +船主 +椽 +椽檩 +椽子 +舛讹 +舛误 +喘 +喘喘气 +喘气 +喘息 +喘息甫定 +喘嘘嘘 +串 +串并联 +串城 +串串 +串灯 +串供 +串会 +串连 +串联 +串联式 +串列 +串铃 +串门 +串门儿 +串门子 +串亲戚 +串通 +串通一气 +串味 +串线 +串珠 +串子 +疮疤 +疮痂 +疮口 +疮痍满目 +窗 +窗玻璃 +窗洞 +窗缝 +窗格 +窗格子 +窗户 +窗花 +窗口 +窗框 +窗里 +窗帘 +窗棂 +窗门 +窗明几净 +窗膜 +窗前 +窗纱 +窗扇 +窗上 +窗式 +窗式机 +窗台 +窗体 +窗外 +窗沿 +窗牖 +窗子 +床 +床板 +床帮 +床边 +床边橱 +床边柜 +床单 +床单厂 +床垫 +床架 +床铺 +床身 +床榻 +床头 +床头柜 +床位 +床位费 +床沿 +床罩 +床子 +创 +创安 +创办 +创办人 +创办者 +创编 +创编者 +创出 +创导 +创痕 +创汇 +创汇额 +创汇率 +创纪录 +创见 +创见性 +创建 +创建人 +创建性 +创建者 +创举 +创巨痛深 +创刊 +创刊词 +创刊号 +创可贴 +创口 +创立 +创立者 +创利 +创例 +创联部 +创面 +创牌子 +创评 +创三安 +创伤 +创设 +创史人 +创始 +创始国 +创始人 +创始者 +创世 +创收 +创收奖 +创叔 +创痛 +创下 +创先 +创新 +创新奖 +创新力 +创新论 +创新型 +创新性 +创新业 +创新者 +创研部 +创演 +创业 +创业潮 +创业股 +创业区 +创业人 +创业史 +创业维艰 +创业园 +创业者 +创益 +创意 +创意人 +创意者 +创优 +创造 +创造力 +创造期 +创造物 +创造型 +创造性 +创造欲 +创造者 +创制 +创组 +创作 +创作奖 +创作界 +创作力 +创作面 +创作室 +创作者 +创作组 +怆然 +吹 +吹吹打打 +吹打 +吹打乐 +吹动 +吹风 +吹风会 +吹风机 +吹拂 +吹鼓手 +吹管 +吹号者 +吹角 +吹糠见米 +吹喇叭 +吹冷风 +吹毛求疵 +吹牛 +吹牛话 +吹牛皮 +吹捧 +吹腔 +吹沙居 +吹台 +吹响 +吹箫者 +吹嘘 +吹奏 +吹奏者 +炊 +炊具 +炊事 +炊事班 +炊事班长 +炊事员 +炊烟 +炊烟袅袅 +炊帚 +垂 +垂爱 +垂垂老矣 +垂耷 +垂钓 +垂钓园 +垂钓者 +垂范 +垂拂 +垂幅 +垂花门 +垂泪 +垂帘听政 +垂柳 +垂落 +垂暮之年 +垂青 +垂青史 +垂手而得 +垂手可得 +垂丝柳 +垂死 +垂死挣扎 +垂体 +垂髫 +垂头 +垂头丧气 +垂危 +垂尾 +垂涎 +垂涎三尺 +垂涎欲滴 +垂线 +垂线足 +垂询 +垂杨 +垂杨柳 +垂帐 +垂照 +垂直 +垂直带 +垂直面 +垂直线 +垂直型 +垂足 +捶 +捶胸顿足 +槌 +槌儿 +槌响 +锤 +锤骨 +锤炼 +锤声 +锤子 +春 +春饼 +春播 +春播期 +春蚕 +春草 +春茶 +春潮 +春潮秋闹 +春城 +春绸 +春大麦 +春凳 +春防 +春肥 +春分 +春分点 +春风 +春风得意 +春风化雨 +春风满面 +春风顺意 +春风骀荡 +春歌 +春耕 +春耕大忙 +春供 +春宫 +春姑娘 +春菇 +春管 +春灌 +春灌水 +春光 +春光明媚 +春光曲 +春寒 +春寒料峭 +春旱 +春合厂 +春和景明 +春和镇 +春花作物 +春华 +春华秋实 +春华镇 +春荒 +春晖 +春季 +春假 +春江 +春节 +春景 +春菊 +春卷 +春卷皮 +春兰 +春雷 +春雷声 +春蕾 +春蕾班 +春联 +春恋 +春粮 +春麦 +春忙 +春梦 +春苗 +春茗 +春暖花开 +春气 +春情 +春秋 +春秋笔法 +春秋季 +春去秋来 +春泉 +春日 +春色 +春色满园 +春上 +春事 +春试 +春水 +春睡 +春笋 +春天 +春天颂 +春味 +春瘟 +春熙路 +春夏季 +春夏秋冬 +春小麦 +春心 +春修 +春雪 +春汛 +春芽 +春宴 +春燕 +春阳 +春夜 +春意 +春意盎然 +春游 +春雨 +春运 +春运办 +春韵 +春种 +春装 +春字头儿 +椿树 +椿芽 +纯 +纯白 +纯纯 +纯粹 +纯度 +纯化 +纯碱 +纯碱厂 +纯洁 +纯洁性 +纯金 +纯净 +纯净度 +纯净率 +纯净水 +纯利 +纯利润 +纯棉 +纯凝 +纯朴 +纯情 +纯然 +纯收入 +纯熟 +纯数学 +纯水 +纯水厂 +纯天然 +纯文学 +纯小数 +纯形码 +纯血 +纯血马 +纯音 +纯真 +纯正 +纯中药 +纯种 +纯种马 +纯属 +唇 +唇齿相依 +唇齿音 +唇干舌燥 +唇膏 +唇裂 +唇枪舌剑 +唇舌 +唇亡齿寒 +唇吻 +唇音 +莼菜 +淳 +淳安县 +淳厚 +淳朴 +淳情 +淳熙 +淳熙六年 +淳佑九年 +醇 +醇芳 +醇酣 +醇和 +醇厚 +醇化 +醇酒 +醇美 +醇醚 +醇朴 +醇香 +醇雅 +蠢 +蠢笨 +蠢材 +蠢蠢 +蠢蠢欲动 +蠢动 +蠢货 +蠢人 +蠢事 +蠢物 +戳 +戳穿 +戳儿 +戳记 +绰绰有余 +绰尔 +绰号 +绰源 +绰约 +辍 +辍笔 +辍学 +辍学率 +疵 +疵点 +词 +词表 +词典 +词调 +词儿 +词法 +词锋 +词干 +词根 +词话 +词汇 +词汇学 +词句 +词类 +词令 +词牌 +词频 +词谱 +词曲 +词曲论 +词曲牌 +词人 +词数 +词讼 +词素 +词条 +词头 +词尾 +词形 +词性 +词序 +词义 +词意 +词语 +词源 +词韵 +词藻 +词章 +词旨 +词缀 +词宗 +词组 +词作家 +词作者 +祠 +祠墓 +祠堂 +茨 +茨城县 +茨菰 +瓷 +瓷杯 +瓷厂 +瓷雕 +瓷都 +瓷盒 +瓷壶 +瓷花瓶 +瓷盘 +瓷片 +瓷瓶 +瓷漆 +瓷器 +瓷人 +瓷勺 +瓷实 +瓷胎 +瓷土 +瓷碗 +瓷业 +瓷艺 +瓷质 +瓷种 +瓷砖 +慈 +慈爱 +慈悲 +慈城镇 +慈父 +慈姑 +慈光 +慈和 +慈江道 +慈利 +慈利县 +慈联 +慈眉善目 +慈母 +慈母村 +慈善 +慈善潮 +慈善会 +慈善家 +慈善性 +慈溪 +慈溪市 +慈祥 +慈协 +慈心 +慈云寺 +辞 +辞别 +辞呈 +辞典 +辞掉 +辞赋 +辞海 +辞旧迎新 +辞句 +辞令 +辞目 +辞去 +辞却 +辞色 +辞世 +辞书 +辞讼 +辞岁 +辞条 +辞退 +辞退制 +辞行 +辞语 +辞源 +辞藻 +辞章 +辞职 +辞职书 +辞职信 +磁 +磁棒 +磁暴 +磁厂 +磁场 +磁场环 +磁场强度 +磁带 +磁导率 +磁道 +磁电 +磁电机 +磁电式 +磁碟 +磁峰 +磁峰镇 +磁浮 +磁感应 +磁钢 +磁共振 +磁鼓 +磁合金 +磁化 +磁环 +磁极 +磁卡 +磁卡式 +磁力 +磁力计 +磁力线 +磁路 +磁能 +磁盘 +磁偏角 +磁谱仪 +磁强计 +磁倾角 +磁山 +磁山镇 +磁石 +磁探仪 +磁体 +磁条 +磁铁 +磁铁矿 +磁通量 +磁头 +磁县 +磁县都 +磁效应 +磁心 +磁芯 +磁性 +磁性瓷 +磁悬浮 +磁学 +磁针 +磁轴 +雌 +雌蜂 +雌花 +雌黄 +雌激素 +雌老虎 +雌鸟 +雌蕊 +雌鼠 +雌性 +雌雄 +雌雄同体 +雌雄同株 +雌雄异体 +雌雄异株 +糍粑 +此 +此岸性 +此案 +此碑 +此笔 +此病 +此策 +此愁 +此处 +此次 +此等 +此地 +此法 +此访 +此风 +此伏彼起 +此公 +此后 +此湖 +此画 +此话 +此际 +此价 +此间 +此见 +此奖 +此井 +此景 +此举 +此剧 +此卡 +此刻 +此类 +此理 +此例 +此列 +此楼 +此路 +此路不通 +此片 +此起彼伏 +此起彼落 +此前 +此情 +此情此景 +此人 +此生 +此诗 +此时 +此时此刻 +此事 +此书 +此说 +此条 +此外 +此文 +此物 +此项 +此消彼长 +此信 +此行 +此讯 +此言 +此药 +此一时 +此议 +此役 +此语 +此愿 +此战 +此张 +此镇 +此证 +此症 +此职 +此志 +此致 +此种 +此著 +次 +次长 +次次 +次大陆 +次等 +次地区 +次第 +次发展极 +次方 +次方米 +次官 +次果 +次好 +次货 +次级 +次级线圈 +次氯酸 +次氯酸钠 +次内阁级 +次年 +次女 +次贫 +次品 +次区域 +次区域级 +次日 +次生 +次生矿物 +次生林 +次数 +次帅 +次席 +次序 +次要 +次要方 +次役 +次于 +次之 +次子 +刺 +刺柏 +刺鼻 +刺参 +刺刺不休 +刺刀 +刺儿 +刺儿头 +刺耳 +刺骨 +刺槐 +刺激 +刺激剂 +刺激素 +刺激性 +刺激仪 +刺客 +刺溜 +刺玫 +刺目 +刺杀 +刺伤 +刺史 +刺丝 +刺探 +刺桐 +刺头 +刺猬 +刺细胞 +刺斜 +刺绣 +刺绣工 +刺绣组 +刺眼 +刺痒 +刺议 +刺针 +刺状物 +赐 +赐福 +赐稿 +赐教 +赐予 +赐与 +从 +从不 +从长计议 +从此 +从此以后 +从从容容 +从动 +从而 +从犯 +从古到今 +从古至今 +从化 +从化市 +从简 +从谏如流 +从江 +从江县 +从教 +从今 +从紧 +从井救人 +从警 +从句 +从军 +从军记 +从快 +从宽 +从来 +从来不 +从略 +从轮 +从没 +从免 +从命 +从那之后 +从难 +从前 +从轻 +从轻发落 +从权 +从戎 +从容 +从容不迫 +从容就义 +从弱到强 +从善如流 +从商 +从师 +从始至终 +从事 +从速 +从天而降 +从头 +从头到尾 +从头至尾 +从未 +从未有过 +从无到有 +从五开始 +从细 +从小 +从小到大 +从心所欲 +从新 +从刑 +从学 +从严 +从严治政 +从业 +从业员 +从业者 +从一而终 +从医 +从艺 +从艺者 +从影 +从优 +从早到晚 +从者 +从征 +从政 +从政者 +从中 +从重 +从属 +匆匆 +匆匆忙忙 +匆促 +匆猝 +匆忙 +枞树 +枞阳县 +葱 +葱白 +葱白儿 +葱葱 +葱葱郁郁 +葱翠 +葱花 +葱茏 +葱绿 +葱头 +葱叶 +葱郁 +聪 +聪慧 +聪灵 +聪敏 +聪明 +聪明才智 +聪明伶俐 +聪明人 +聪明一世 +聪颖 +丛 +丛编 +丛丛 +丛集 +丛刊 +丛刻 +丛林 +丛林区 +丛生 +丛书 +丛台区 +丛谈 +丛杂 +丛葬 +丛中 +淙淙 +琮琮 +凑 +凑份子 +凑合 +凑和 +凑集 +凑近 +凑巧 +凑趣 +凑热闹 +凑手 +凑数 +凑足 +腠 +辏 +粗 +粗暴 +粗笨 +粗鄙 +粗布 +粗糙 +粗茶淡饭 +粗初加工 +粗粗 +粗粗拉拉 +粗大 +粗大动脉 +粗墩墩 +粗放 +粗放经营 +粗放式 +粗放型 +粗杆 +粗犷 +粗豪 +粗厚 +粗花呢 +粗话 +粗活 +粗加工 +粗加工品 +粗粝 +粗粮 +粗劣 +粗陋 +粗鲁 +粗率 +粗略 +粗蛮 +粗毛皮 +粗气 +粗浅 +粗沙 +粗纱 +粗纱机 +粗实 +粗疏 +粗饲料 +粗俗 +粗腿病 +粗细 +粗细有致 +粗线条 +粗心 +粗心大意 +粗言秽语 +粗野 +粗衣淡食 +粗枝大叶 +粗制滥造 +粗制品 +粗重 +粗壮 +粗壮者 +粗作 +促 +促成 +促和 +促进 +促进会 +促进派 +促请 +促生产 +促使 +促膝 +促膝长谈 +促膝交谈 +促膝谈心 +促销 +促销队 +促销员 +猝 +猝不及防 +猝然 +猝死 +醋 +醋劲儿 +醋栗 +醋酸 +醋酸纤维 +醋意 +簇 +簇簇 +簇集 +簇聚 +簇射波 +簇新 +簇拥 +簇坐 +蹙 +蹴球 +撺弄 +蹿 +窜 +窜犯 +窜扰 +窜升 +窜逃 +篡 +篡党 +篡夺 +篡改 +篡逆 +篡位 +崔 +崔马镇 +崔嵬 +崔巷 +崔庄乡 +催 +催办 +催逼 +催产 +催春 +催促 +催促式 +催动 +催发 +催肥 +催花量 +催化 +催化剂 +催化剂液 +催缴 +催款 +催泪弹 +催粮 +催眠 +催眠曲 +催眠术 +催眠药 +催命 +催人奋进 +催人泪下 +催生 +催收 +催讨 +催吐剂 +催芽 +催要 +摧 +摧残 +摧毁 +摧枯拉朽 +摧崖拍岸 +摧折 +璀璨 +璀璨夺目 +璀瑰 +脆 +脆度 +脆骨 +脆丽 +脆亮 +脆弱 +脆弱性 +脆生 +脆响 +脆性 +淬火 +萃 +瘁 +粹 +翠 +翠柏 +翠柏丛 +翠碧 +翠谷 +翠亨 +翠亨镇 +翠湖 +翠菊 +翠林村 +翠绿 +翠绿色 +翠鸟 +翠屏峰 +翠屏山 +翠翘 +翠青 +翠微微 +翠微中里 +翠玉 +翠竹 +村 +村霸 +村班子 +村办 +村边 +村部 +村长 +村村 +村村户户 +村村落落 +村村寨寨 +村村组组 +村埭 +村党委 +村道 +村东 +村风 +村夫 +村妇 +村干 +村干部 +村公所 +村姑 +村官 +村规民约 +村户 +村徽 +村级 +村口 +村里 +村里人 +村落 +村貌 +村民 +村民会 +村内 +村农 +村农民 +村平 +村旗 +村容 +村容村貌 +村山场 +村上 +村舍 +村社党 +村史 +村塾 +村提留 +村头 +村屯 +村围 +村委 +村委会 +村务 +村务公开 +村务实情 +村小 +村校 +村学 +村训 +村野 +村医 +村宅 +村寨 +村镇 +村支部 +村支书 +村主任 +村庄 +村子 +村组 +皴法 +皴裂 +皴染 +存 +存包处 +存本 +存查 +存车费 +存储 +存储点 +存储器 +存贷 +存贷款 +存单 +存单联 +存档 +存额 +存而不论 +存放 +存放场 +存放点 +存根 +存乎一心 +存户 +存活 +存活率 +存货 +存款 +存款单 +存款额 +存款人 +存款者 +存栏 +存栏量 +存栏数 +存粮 +存量 +存目 +存钱 +存取 +存入 +存瑞乡 +存身 +存史 +存世 +存亡 +存亡未卜 +存项 +存小异 +存心 +存续期 +存养 +存疑 +存异 +存有 +存在 +存在论 +存在物 +存在主义 +存照 +存折 +存执 +存贮 +存贮器 +寸 +寸白虫 +寸步不离 +寸步不让 +寸步难行 +寸草不留 +寸草不生 +寸草寸金 +寸寸 +寸楷 +寸口 +寸木岑楼 +寸水 +寸土 +寸土不让 +寸土寸金 +寸心 +寸阴 +寸有所长 +搓 +搓板 +搓洗 +搓澡工 +磋商 +磋商会 +磋商权 +撮 +撮合 +撮箕 +蹉跎村 +蹉跎岁月 +矬子 +厝 +挫 +挫败 +挫裂伤 +挫伤 +挫折 +措 +措词 +措辞 +措大 +措玛 +措施 +措施法 +措手不及 +锉 +锉刀 +错 +错爱 +错案 +错别字 +错车 +错处 +错讹 +错怪 +错过 +错划 +错话 +错简 +错荐 +错金 +错觉 +错开 +错漏填率 +错乱 +错落 +错落有致 +错码 +错谬 +错判 +错判案 +错失 +错失良机 +错事 +错填率 +错位 +错误 +错误率 +错误者 +错字 +错综 +错综复杂 +错作 +哒 +哒哒 +耷拉 +搭 +搭班子 +搭伴 +搭车 +搭乘 +搭档 +搭构 +搭话 +搭伙 +搭架 +搭架子 +搭建 +搭救 +搭拉 +搭理 +搭配 +搭棚 +搭腔 +搭桥 +搭桥会 +搭桥术 +搭讪 +搭设 +搭台 +搭头 +搭线 +搭腰 +搭载 +褡包 +褡裢 +达 +达坂城 +达标 +达标户 +达标率 +达标赛 +达布逊湖 +达产 +达产期 +达成 +达川 +达川市 +达到 +达尔文 +达观 +达观者 +达官 +达官贵人 +达荷美 +达江 +达江乡 +达喀尔 +达喀尔港 +达卡 +达科他州 +达拉斯 +达拉特 +达拉特旗 +达赖 +达赖喇嘛 +达林顿 +达令港 +达马托 +达马托法 +达姆弹 +达尼洛娃 +达旗 +达人知命 +达特茅思 +达瓦卡 +达瓦纳吉 +达沃斯 +达斡尔 +达西村 +达县 +达意 +达孜 +达孜县 +沓 +笪公祠 +答 +答案 +答辩 +答辩会 +答辩状 +答茬儿 +答词 +答道 +答对 +答非所问 +答复 +答话 +答卷 +答卷者 +答理 +答声 +答数 +答题 +答问 +答谢 +答谢辞 +答谢话 +答询 +答疑 +答应 +答语 +鞑靼 +打 +打靶 +打靶场 +打败 +打扮 +打包 +打饱嗝儿 +打抱不平 +打比方 +打遍天下 +打草惊蛇 +打岔 +打场 +打车 +打成一片 +打打 +打打停停 +打倒 +打道回府 +打得火热 +打的 +打的费 +打点 +打点费 +打电话 +打吊针 +打动 +打动力 +打斗 +打斗片 +打斗招式 +打赌 +打短工 +打断 +打盹 +打哆嗦 +打发 +打法 +打翻 +打翻身仗 +打防 +打非 +打分 +打封闭 +打糕 +打歌舞 +打更 +打工 +打工地 +打工妹 +打工女 +打工者 +打工仔 +打工族 +打鼓 +打鼓儿的 +打瓜 +打官腔 +打官司 +打光棍儿 +打滚 +打棍子 +打哈哈 +打鼾 +打夯 +打滑 +打火 +打火机 +打击 +打击乐 +打击乐器 +打基础 +打家劫舍 +打架 +打假 +打假办 +打假保真 +打假惩劣 +打假声 +打假者 +打假治劣 +打尖 +打浆机 +打交道 +打搅 +打窖 +打劫 +打紧 +打井 +打井热 +打酒 +打开 +打瞌睡 +打孔 +打孔器 +打孔术 +打垮 +打捆 +打蜡 +打捞 +打雷 +打擂 +打擂台 +打理 +打量 +打猎 +打零工 +打乱 +打落 +打落水狗 +打马虎眼 +打骂 +打埋伏 +打麦场 +打磨 +打闹 +打埝 +打拍子 +打牌 +打炮 +打喷嚏 +打平 +打破 +打谱 +打气 +打气筒 +打气站 +打前站 +打枪 +打情骂俏 +打秋风 +打球 +打趣 +打圈子 +打拳 +打群架 +打扰 +打入 +打入冷宫 +打伞 +打散 +打扫 +打伤 +打手 +打手势 +打私 +打私办 +打算 +打算盘 +打碎 +打探 +打天下 +打铁 +打铁趁热 +打铁者 +打听 +打通 +打头 +打头风 +打头阵 +打退堂鼓 +打问 +打下 +打下手 +打馅 +打响 +打消 +打小算盘 +打斜 +打旋 +打穴 +打雪仗 +打牙祭 +打蔫儿 +打掩护 +打眼 +打烊 +打药 +打音 +打印 +打印稿 +打印机 +打印台 +打印纸 +打硬仗 +打油诗 +打游击 +打鱼 +打鱼郎 +打圆场 +打杂 +打杂儿 +打砸抢 +打砸抢烧 +打造 +打斋醮 +打仗 +打招呼 +打照面 +打照面儿 +打折 +打折风 +打折扣 +打折票 +打针 +打中 +打竹舞 +打主意 +打住 +打转 +打转儿 +打转转 +打桩 +打字 +打字机 +打字员 +打字组 +打钻 +打坐 +大 +大安 +大安山乡 +大安市 +大安乡 +大安镇 +大埯 +大案 +大案要案 +大澳 +大巴 +大巴车 +大巴山 +大巴山区 +大坝 +大坝标 +大白菜 +大白话 +大白天 +大百科 +大败 +大班 +大阪 +大阪府 +大阪市 +大板车 +大板村 +大版纸 +大办 +大半 +大半年 +大半生 +大半夜 +大棒 +大包大揽 +大包干 +大包小袋 +大宝镇 +大饱耳福 +大饱眼福 +大鸨 +大堡礁 +大堡镇 +大葆台 +大报 +大暴雨 +大悲大喜 +大北窑 +大北直街 +大本本 +大本营 +大本子 +大鼻子 +大笔 +大便 +大辩论 +大别 +大别山 +大别山区 +大别山乡 +大兵 +大兵团 +大饼 +大脖子病 +大伯 +大泊 +大不了 +大不列颠 +大步 +大步流星 +大部分 +大部头 +大部头儿 +大部制 +大材小用 +大菜 +大餐 +大藏 +大藏经 +大藏省 +大藏相 +大操大办 +大曹庄 +大肠 +大肠杆菌 +大肠菌 +大厂 +大厂县 +大氅 +大朝山 +大潮 +大潮山 +大吵大闹 +大车 +大臣 +大成 +大成者 +大城 +大城县 +大吃八喝 +大吃大喝 +大吃一惊 +大冲黄 +大虫 +大仇 +大出风头 +大出血 +大处方 +大处落墨 +大处着眼 +大船 +大吹大擂 +大醇小疵 +大戳 +大慈大悲 +大葱 +大村镇 +大打出手 +大大 +大大方方 +大大咧咧 +大大小小 +大袋蛾 +大袋鼠 +大胆 +大刀 +大刀阔斧 +大到暴雨 +大道 +大道队 +大道理 +大得人心 +大德 +大堤 +大堤脚 +大敌 +大敌当前 +大抵 +大地 +大地回春 +大帝 +大典 +大殿 +大跌 +大跌眼镜 +大碟 +大东 +大东区 +大东庄 +大动大静 +大动干戈 +大动脉 +大洞 +大洞尺五 +大都 +大都会 +大都市 +大陡山 +大豆 +大豆胶 +大肚汉 +大肚子 +大度 +大度包容 +大渡河 +大端 +大堆 +大队 +大队长 +大队人马 +大多 +大多数 +大额 +大恩 +大恩大德 +大儿子 +大而化之 +大而无当 +大而言之 +大二环 +大发慈悲 +大发横财 +大发雷霆 +大法 +大法官 +大法院 +大凡 +大饭厅 +大方 +大方向 +大放厥词 +大放异彩 +大肥 +大分子 +大粪 +大粪球 +大丰港 +大丰市 +大丰县 +大风 +大风村 +大风大浪 +大佛 +大佛殿 +大佛湾 +大佛像 +大夫 +大幅 +大幅度 +大幅让利 +大福 +大副 +大赋 +大腹便便 +大盖帽 +大概 +大概其 +大干 +大干一场 +大冈镇 +大岗 +大纲 +大港 +大港区 +大圪 +大圪村 +大哥 +大哥大 +大歌大哭 +大歌剧 +大革命 +大个 +大个儿 +大个子 +大公 +大公报 +大公储 +大公府 +大公国 +大公让 +大公无私 +大功 +大功告成 +大功率 +大宫 +大购大销 +大姑 +大姑儿 +大姑娘 +大姑子 +大沽口 +大骨节病 +大鼓 +大鼓墩 +大鼓手 +大鼓子 +大褂 +大关 +大关村 +大观 +大观楼 +大观园 +大观镇 +大规模 +大滚刀 +大锅 +大锅菜 +大锅饭 +大锅话 +大锅水 +大国 +大国家党 +大过 +大海 +大海捞针 +大寒 +大韩 +大韩民国 +大喊 +大喊大叫 +大汉 +大汗淋漓 +大旱 +大好 +大好河山 +大好人 +大号 +大禾 +大合唱 +大河 +大河岸 +大河村 +大河家乡 +大河上下 +大河乡 +大黑汀 +大亨 +大轰大嗡 +大红 +大红大紫 +大红帆 +大红人 +大洪 +大后方 +大呼隆 +大呼小叫 +大胡笳 +大湖 +大湖地村 +大湖型 +大湖镇 +大户 +大花脸 +大华府 +大华行 +大化 +大话 +大槐树 +大黄山 +大黄山市 +大黄鱼 +大灰狼 +大回转 +大茴香 +大会 +大会党 +大会计 +大会奖 +大会堂 +大会战 +大烩菜 +大慧寺 +大火 +大伙 +大伙儿 +大获全胜 +大祸 +大惑不解 +大吉 +大吉大利 +大集 +大计 +大计方针 +大忌 +大季 +大加 +大夹街 +大家 +大家风范 +大家伙 +大家伙儿 +大家鼠 +大家庭 +大家庭制 +大家族 +大贾 +大件 +大建福 +大涧 +大涧村 +大江 +大江南北 +大将 +大将军 +大讲堂 +大奖 +大奖赛 +大酱汤 +大脚 +大脚洞 +大街 +大街小巷 +大节 +大捷 +大姐 +大解 +大金塔 +大襟 +大惊失色 +大惊小怪 +大静脉 +大酒店 +大舅 +大舅子 +大局 +大局观 +大举 +大决战 +大军 +大卡 +大开大合 +大开眼界 +大楷 +大康 +大康队 +大考 +大可不必 +大客 +大客车 +大客厅 +大课 +大坑 +大口井 +大哭 +大块 +大块头 +大块文章 +大快人心 +大款 +大浪 +大浪区 +大浪淘沙 +大牢 +大老 +大老粗 +大老婆 +大老爷们 +大涝 +大礼 +大礼包 +大礼服 +大礼堂 +大理 +大理石 +大理市 +大理站 +大理州 +大力 +大力村 +大力士 +大吏 +大丽花 +大荔县 +大连 +大连队 +大连港 +大连市 +大连湾 +大良 +大凉山 +大梁 +大量 +大料 +大咧咧 +大林村 +大岭 +大岭镇 +大凌河 +大龄 +大溜 +大流乡 +大柳树 +大龙 +大娄山脉 +大娄山区 +大楼 +大陆 +大陆架 +大陆军 +大陆坡 +大陆桥 +大辂椎轮 +大鹿岛村 +大路 +大路货 +大路坡 +大略 +大萝卜 +大妈 +大麻 +大麻类 +大麻者 +大麻子 +大马 +大马哈鱼 +大马力 +大马士革 +大迈阿密 +大麦 +大忙 +大忙人 +大忙时节 +大猫熊 +大帽子 +大妹 +大门 +大门口 +大梦初醒 +大米 +大米饭 +大米粥 +大面 +大面儿 +大面儿上 +大面积 +大名 +大名鼎鼎 +大名县 +大明 +大明村 +大明湖 +大明寺 +大明镇 +大鸣门桥 +大谬不然 +大模大样 +大莫古乡 +大漠 +大拇指 +大牧场 +大幕 +大内 +大南沟 +大南门 +大难不死 +大难临头 +大脑 +大脑库 +大脑皮层 +大脑炎 +大逆不道 +大年 +大年初八 +大年初二 +大年初三 +大年初四 +大年初五 +大年初一 +大年三十 +大年夜 +大娘 +大宁 +大宁河 +大农场 +大农区 +大排档 +大牌 +大盘 +大盘股 +大炮 +大炮仗 +大棚 +大棚菜 +大棚式 +大鹏 +大鹏湾 +大篷车 +大批 +大片 +大片大片 +大朴大拙 +大埔 +大谱儿 +大漆 +大旗 +大起大落 +大气 +大气磅礴 +大气层 +大气候 +大气圈 +大气压 +大器 +大器晚成 +大千世界 +大前年 +大前提 +大钱 +大枪 +大墙 +大桥 +大桥局 +大桥路 +大桥镇 +大巧若拙 +大琴村 +大青山 +大青杨 +大清白日 +大清国 +大清河 +大清早 +大庆 +大庆市 +大邱 +大秋作物 +大球场 +大区 +大曲 +大曲虫 +大全 +大全册 +大权 +大权独揽 +大权在握 +大犬座 +大人 +大人物 +大仁大智 +大任 +大容山 +大肉 +大撒把 +大赛 +大嗓门 +大嗓门儿 +大嫂 +大嫂子 +大沙河 +大沙湖 +大沙田 +大煞风景 +大山 +大山包乡 +大山村 +大山顶 +大少爷 +大舌头 +大赦 +大婶 +大婶儿 +大声 +大声疾呼 +大胜 +大失所望 +大师 +大师傅 +大师级 +大师赛 +大石 +大石坝 +大石碑 +大石队 +大石庙镇 +大石桥 +大石桥市 +大石山 +大石头村 +大石镇 +大使 +大使馆 +大使级 +大使库 +大世界 +大市 +大事 +大事记 +大事录 +大势 +大势所趋 +大势已去 +大是大非 +大手笔 +大手大脚 +大寿 +大书特书 +大叔 +大暑 +大树 +大数 +大双覆 +大水 +大顺 +大四 +大肆 +大苏打 +大蒜 +大穗 +大孙各庄 +大踏步 +大堂 +大塘 +大塘乡 +大特写 +大提琴 +大题小做 +大体 +大体量 +大体上 +大天白日 +大天鹅 +大田 +大田县 +大田乡 +大田庄乡 +大田作物 +大铁罐 +大厅 +大庭广众 +大通 +大通道 +大通港 +大通河 +大通铺式 +大同 +大同道 +大同江 +大同江畔 +大同世界 +大同市 +大同小异 +大头 +大头菜 +大头小尾 +大头鱼 +大头针 +大屠杀 +大团结 +大团圆 +大腿 +大腿骨 +大屯村 +大屯营乡 +大洼县 +大瓦窑村 +大宛齐 +大碗 +大碗茶 +大腕 +大王 +大网 +大为 +大围山 +大尾 +大尉 +大我 +大无畏 +大五金 +大武村 +大悟 +大悟县 +大雾 +大西 +大西北 +大西门 +大西南 +大西山 +大西洋 +大西洋城 +大溪 +大喜 +大喜大悲 +大喜过望 +大喜事 +大喜之日 +大戏 +大戏院 +大系 +大虾 +大侠 +大峡谷 +大厦 +大厦将倾 +大显身手 +大显神通 +大相径庭 +大项 +大象 +大象村 +大象者 +大小 +大小便 +大小凉山 +大小事 +大小腿 +大小写 +大校 +大笑 +大笑不止 +大写 +大写家 +大写意 +大辛阁区 +大新乡 +大兴 +大兴安岭 +大兴岛 +大兴土木 +大兴县 +大兴寨村 +大猩猩 +大刑 +大行其道 +大行星 +大行政区 +大型 +大型化 +大型机 +大姓 +大幸 +大雄宝殿 +大熊猫 +大熊座 +大修 +大修费 +大许屯 +大选 +大选日 +大学 +大学部 +大学法 +大学生 +大学堂 +大雪 +大雪纷飞 +大循环 +大汛 +大牙 +大雅 +大雅大俗 +大雅之堂 +大亚湾 +大烟 +大烟泡 +大言不惭 +大盐 +大檐帽 +大眼贼 +大宴宾客 +大堰川 +大堰河 +大雁 +大秧歌 +大洋 +大洋坝 +大洋河 +大洋洲 +大样 +大窑村 +大窑湾 +大摇大摆 +大要 +大要案 +大爷 +大冶 +大冶市 +大野 +大业 +大业乡 +大一 +大一统 +大衣 +大衣呢 +大姨 +大姨子 +大义 +大义凛然 +大义灭亲 +大邑 +大邑县 +大意 +大印 +大营 +大营门 +大营盘乡 +大营子镇 +大油 +大有裨益 +大有可为 +大有人在 +大有文章 +大有益处 +大有作为 +大于 +大余 +大余县 +大鱼 +大鱼大肉 +大鱼洞 +大宇队 +大屿山 +大雨 +大雨倾盆 +大雨如注 +大狱 +大元帅 +大远 +大院 +大约 +大约摸 +大跃进 +大云镇 +大运 +大运河 +大杂烩 +大杂院 +大杂院儿 +大早 +大枣 +大灶 +大泽 +大泽山 +大增 +大轧 +大轧厂 +大栅栏 +大寨 +大展 +大展宏图 +大展经纶 +大展身手 +大战 +大站 +大张旗鼓 +大张挞伐 +大彰山 +大丈夫 +大昭寺 +大者 +大真大实 +大振 +大整大肃 +大正 +大正八年 +大正六年 +大郑镇 +大政 +大政方针 +大支援 +大职校 +大旨 +大至暴雨 +大志 +大致 +大致说来 +大智大慧 +大智大趣 +大智大勇 +大智若愚 +大中 +大中城市 +大中华区 +大中企业 +大中小 +大中小型 +大中小学 +大中型 +大中修 +大中学生 +大中学校 +大中院校 +大中镇 +大中专 +大中专班 +大中专生 +大钟寺 +大众 +大众报 +大众车 +大众化 +大众呢 +大众性 +大洲岛 +大轴子 +大珠山镇 +大竹 +大竹县 +大主教 +大著 +大专 +大专班 +大专生 +大专学校 +大专院校 +大篆 +大庄矿 +大子 +大子儿 +大紫 +大字 +大字报 +大自然 +大自在图 +大宗 +大总统 +大足 +大足县 +大族 +大佐 +大作 +大作家 +大作品 +大做文章 +呆 +呆板 +呆笨 +呆呆板板 +呆呆地 +呆惯 +呆坏帐 +呆坏账 +呆矿 +呆愣愣 +呆若木鸡 +呆傻 +呆头呆脑 +呆小症 +呆帐 +呆账 +呆账率 +呆滞 +呆子 +呆坐 +歹 +歹毒 +歹话 +歹人 +歹徒 +歹心 +歹意 +傣 +傣家 +傣家人 +傣历 +傣味 +傣乡 +傣族 +代 +代跋 +代办 +代办处 +代办点 +代办费 +代办所 +代办员 +代办站 +代笔 +代表 +代表部 +代表处 +代表大会 +代表队 +代表法 +代表会 +代表人 +代表室 +代表团 +代表性 +代表院 +代表者 +代表证 +代表制 +代表组 +代表作 +代步 +代步器 +代部长 +代常委 +代厂长 +代称 +代储员 +代词 +代代 +代代不已 +代代红 +代代木 +代代相承 +代代相传 +代顿 +代顿市 +代发 +代付 +代沟 +代购 +代购点 +代管 +代管权 +代号 +代换 +代际 +代际人 +代价 +代交 +代缴 +代金 +代开 +代考 +代考者 +代课 +代扣 +代扣代缴 +代劳 +代理 +代理处 +代理点 +代理费 +代理量 +代理权 +代理人 +代理商 +代理行 +代理业 +代理制 +代码 +代码费 +代码卡 +代买 +代卖 +代脉 +代名词 +代培 +代乳粉 +代社长 +代省长 +代市长 +代收 +代收代缴 +代售 +代售点 +代书记 +代数 +代数方程 +代数根 +代数和 +代数式 +代数学 +代替 +代替论 +代外长 +代为 +代销 +代销点 +代销店 +代销商 +代销者 +代谢 +代行 +代序 +代言人 +代议长 +代议制 +代印 +代英县 +代用品 +代远年湮 +代征 +代职 +代种 +代州长 +代主席 +代总裁 +代总理 +代总统 +岱庙 +岱宗 +带 +带班 +带班人 +带兵 +带兵官 +带兵论 +带兵人 +带病 +带材 +带到 +带电 +带动 +带动力 +带动型 +带动性 +带队 +带分数 +带工头 +带工者 +带回 +带机 +带劲 +带菌者 +带宽 +带来 +带粮 +带领 +带露 +带路 +带路费 +带路人 +带勤率 +带入 +带伤 +带田 +带头 +带头户 +带头人 +带头雁 +带头羊 +带徒 +带卧车 +带响 +带有 +带鱼 +带状 +带状林 +带资 +带子 +带走 +待 +待办 +待查 +待产 +待定 +待岗 +待岗者 +待岗证 +待工 +待工证 +待会儿 +待价而沽 +待就业 +待考 +待客 +待命 +待人 +待人接物 +待续 +待业 +待业率 +待业青年 +待业者 +待遇 +待援 +待战 +待制 +待字闺中 +怠 +怠惰 +怠工 +怠慢 +殆 +殆尽 +贷 +贷存 +贷存比 +贷方 +贷户 +贷款 +贷款额 +贷款国 +贷款量 +贷款人 +贷款项 +贷款行 +贷款性 +贷款者 +贷款值 +贷学金 +袋 +袋底 +袋花 +袋口 +袋料 +袋猫 +袋鼠 +袋形 +袋中 +袋装 +袋装化 +袋装率 +袋子 +逮 +逮捕 +逮捕令 +戴 +戴戴 +戴高帽子 +戴盆望天 +戴维营 +戴胸签者 +戴眼镜者 +戴月披星 +戴者 +戴罪立功 +黛 +黛绿 +黛瓦 +丹 +丹参 +丹参素 +丹参酮 +丹墀 +丹顶鹤 +丹东 +丹东港 +丹东市 +丹方 +丹粉 +丹凤朝阳 +丹凤眼 +丹佛 +丹佛市 +丹桂 +丹江 +丹江口 +丹江口市 +丹剧 +丹荔 +丹麦 +丹麦队 +丹麦王国 +丹青 +丹青妙笔 +丹砂 +丹田 +丹田村 +丹铁 +丹霞山 +丹心 +丹阳 +丹阳市 +丹阳县 +丹寨县 +单 +单摆 +单摆浮搁 +单板 +单瓣 +单帮 +单倍体 +单被 +单比 +单比例 +单边 +单兵 +单兵作战 +单薄 +单舱 +单层 +单层次 +单产 +单厂 +单车 +单车道 +单程 +单纯 +单纯词 +单纯林 +单纯性 +单词 +单打 +单打独斗 +单单 +单弹头 +单刀 +单刀赴会 +单刀直入 +单店 +单调 +单独 +单杜科村 +单耳刀儿 +单耳旁儿 +单方 +单方面 +单峰驼 +单幅 +单复数 +单干 +单干风 +单干户 +单杠 +单个 +单个儿 +单根独苗 +单工槽 +单功能 +单褂 +单轨 +单航次 +单核 +单环 +单簧管 +单机 +单极 +单季 +单季稻 +单家独户 +单价 +单间 +单间儿 +单件 +单件性 +单晶 +单晶硅 +单晶河 +单晶河村 +单晶河乡 +单晶体 +单精度 +单井 +单句 +单据 +单科 +单科性 +单克隆 +单孔 +单孔目 +单口相声 +单裤 +单冷 +单冷型 +单立人 +单立人儿 +单利 +单链 +单列 +单门独户 +单面 +单名 +单名数 +单模 +单宁酸 +单排 +单炮 +单片机 +单篇 +单骑 +单枪匹马 +单亲 +单拳 +单人 +单人床 +单人独马 +单人滑 +单人旁儿 +单人舞 +单日 +单弱 +单色 +单色光 +单身 +单身汉 +单身者 +单身只影 +单生花 +单式 +单式编制 +单数 +单双打 +单双杠 +单塔 +单瘫 +单淘汰制 +单体 +单条 +单位 +单位名 +单位制 +单细胞 +单纤细度 +单弦 +单弦儿 +单县 +单线 +单线铁路 +单相思 +单向 +单项 +单项奖 +单项赛 +单项式 +单斜层 +单行 +单行本 +单行道 +单行路 +单行线 +单性 +单性花 +单雄蕊 +单循环 +单循环赛 +单循环制 +单眼 +单眼皮 +单一 +单一化 +单一论 +单衣 +单衣服 +单义性 +单音词 +单浴盆式 +单元 +单元房 +单元化 +单元楼 +单元式 +单月 +单张 +单证 +单纸张 +单质 +单株 +单株独枝 +单子 +单字 +单组 +担 +担保 +担保法 +担保费 +担保函 +担保人 +担保书 +担待 +担担面 +担当 +担儿 +担风险 +担负 +担纲 +担纲挑梁 +担架 +担架车 +担架队 +担惊受怕 +担笼 +担任 +担心 +担心桥 +担忧 +担子 +眈眈 +耽 +耽搁 +耽误 +耽心 +郸城 +郸城县 +殚精竭虑 +殚思竭虑 +箪食壶浆 +儋 +儋州 +儋州市 +胆 +胆大 +胆大包天 +胆大妄为 +胆大心细 +胆矾 +胆敢 +胆固醇 +胆管 +胆红素 +胆碱 +胆力 +胆量 +胆绿素 +胆略 +胆囊 +胆囊炎 +胆瓶 +胆破心惊 +胆魄 +胆气 +胆怯 +胆色素 +胆石病 +胆识 +胆识过人 +胆酸 +胆小 +胆小鬼 +胆小如鼠 +胆星 +胆战心寒 +胆战心惊 +胆汁 +胆壮山河 +胆子 +掸 +掸帚 +掸子 +旦 +旦角 +旦角儿 +旦荣 +旦夕 +旦夕存亡 +旦夕祸福 +但 +但凡 +但求无过 +但是 +但书 +但愿 +诞辰 +诞辰日 +诞纪 +诞生 +诞生地 +啖 +弹 +弹拨乐 +弹拨乐器 +弹唱 +弹词 +弹道 +弹道导弹 +弹道式 +弹道学 +弹弓 +弹冠相庆 +弹劾 +弹痕 +弹簧 +弹簧厂 +弹簧秤 +弹簧钢 +弹簧门 +弹簧锁 +弹尽粮绝 +弹壳 +弹坑 +弹孔 +弹库 +弹力 +弹力布 +弹力呢 +弹力袜 +弹片 +弹起 +弹腔 +弹琴 +弹入 +弹射 +弹跳 +弹头 +弹涂鱼 +弹丸 +弹丸之地 +弹无虚发 +弹性 +弹性模量 +弹性体 +弹药 +弹药库 +弹药箱 +弹雨 +弹跃 +弹着 +弹着点 +弹子 +弹子锁 +弹奏 +惮 +淡 +淡巴巴 +淡泊 +淡泊名利 +淡泊明志 +淡薄 +淡出 +淡村 +淡淡 +淡而无味 +淡褐色 +淡红 +淡红色 +淡化 +淡黄 +淡灰 +淡季 +淡蓝 +淡露 +淡路 +淡路岛 +淡漠 +淡青色 +淡去 +淡然 +淡如逝水 +淡水 +淡水钓 +淡水湖 +淡水井 +淡水鱼 +淡忘 +淡旺季 +淡雅 +淡月 +淡竹 +淡妆 +淡妆浓抹 +淡紫 +蛋 +蛋白 +蛋白胨 +蛋白酶 +蛋白尿 +蛋白石 +蛋白质 +蛋蛋 +蛋粉 +蛋糕 +蛋羹 +蛋黄 +蛋鸡 +蛋鸡场 +蛋价 +蛋壳 +蛋类 +蛋品 +蛋清 +蛋松 +蛋汤 +蛋形 +蛋鸭 +氮 +氮肥 +氮肥厂 +氮化合物 +氮气 +氮素 +氮氧化物 +当 +当班 +当兵 +当差 +当场 +当朝 +当成 +当初 +当代 +当代人 +当代史 +当当 +当道 +当地 +当地国 +当地化 +当地人 +当断不断 +当儿 +当官 +当归 +当机立断 +当即 +当家 +当家的 +当家人 +当家作主 +当家做主 +当今 +当金山 +当局 +当局者 +当局者迷 +当空 +当口 +当量 +当面 +当年 +当年度 +当票 +当铺 +当期 +当前 +当权 +当权者 +当然 +当仁不让 +当日 +当时 +当世 +当事 +当事国 +当事人 +当事者 +当堂 +当天 +当庭 +当头 +当头棒喝 +当头一棒 +当涂 +当涂县 +当晚 +当务之急 +当务之重 +当下 +当心 +当雄 +当选 +当选者 +当阳 +当阳街 +当阳市 +当腰 +当夜 +当月 +当真 +当政 +当政者 +当之无愧 +当中 +当众 +当周 +当轴处中 +当着 +当作 +当做 +裆部 +挡 +挡板 +挡边 +挡车工 +挡风 +挡风墙 +挡风遮雨 +挡火墙 +挡驾 +挡箭牌 +挡路 +挡泥板 +挡墙 +挡热层 +挡水面 +挡雨棚 +挡住 +党 +党八股 +党办 +党报 +党部 +党参 +党代表 +党代会 +党恩 +党阀 +党法 +党费 +党风 +党风室 +党纲 +党工委 +党锢 +党规 +党棍 +党徽 +党魂 +党籍 +党纪 +党纪国法 +党纪政纪 +党际 +党建 +党禁 +党刊 +党课 +党课日 +党魁 +党龄 +党内 +党派 +党票 +党旗 +党群 +党群干群 +党群关系 +党史 +党史办 +党史部 +党首 +党同伐异 +党徒 +党团 +党团员 +党外 +党外人士 +党委 +党委办 +党委会 +党委制 +党卫军 +党务 +党务案 +党乡 +党小组 +党小组长 +党校 +党心 +党性 +党学委 +党训班 +党羽 +党员 +党员秤 +党章 +党证 +党政 +党政不分 +党政工 +党政工团 +党政机关 +党政纪 +党政军 +党政军警 +党政军民 +党政军群 +党政群 +党支 +党支部 +党支书 +党中央 +党总支 +党总支部 +党组 +党组会 +党组织 +谠 +凼仔 +宕入 +砀 +砀山 +砀山县 +荡 +荡荡 +荡荡乎 +荡涤 +荡妇 +荡魂摄魄 +荡检逾闲 +荡气回肠 +荡秋千 +荡然无存 +荡人心魄 +荡漾 +档 +档案 +档案袋 +档案堆 +档案法 +档案馆 +档案局 +档案卷 +档案库 +档案史 +档案室 +档案系 +档案学 +档次 +档儿 +档级 +档卡 +档子 +刀 +刀疤 +刀把 +刀把儿 +刀把子 +刀背 +刀笔 +刀币 +刀兵 +刀柄 +刀叉 +刀豆 +刀儿 +刀法 +刀锋 +刀斧手 +刀耕火种 +刀工 +刀光剑影 +刀光血影 +刀痕 +刀会 +刀戟 +刀尖 +刀具 +刀距 +刀锯 +刀口 +刀螂 +刀马旦 +刀茅巷 +刀片 +刀枪 +刀枪不入 +刀枪街 +刀刃 +刀山火海 +刀山剑林 +刀伤 +刀术 +刀梯 +刀头 +刀削面 +刀鱼 +刀凿 +刀斫斧砍 +刀子 +叨登 +叨咕 +导 +导报 +导标 +导表演 +导出 +导磁率 +导弹 +导弹艇 +导电 +导电性 +导读 +导购册 +导购人 +导购台 +导购员 +导管 +导轨 +导航 +导航连 +导航站 +导航者 +导护 +导火索 +导火线 +导坑 +导流 +导流洞 +导流明渠 +导轮 +导论 +导纳 +导尿 +导尿管 +导热 +导入 +导师 +导师制 +导士 +导水管 +导体 +导线 +导向 +导向管 +导向型 +导向性 +导言 +导演 +导演奖 +导演铃 +导演系 +导演组 +导医 +导引 +导引车 +导游 +导游员 +导游证 +导语 +导诊 +导致 +岛 +岛国 +岛弧 +岛礁 +岛景 +岛内 +岛内外 +岛区 +岛上 +岛外 +岛屿 +岛园 +岛子 +倒 +倒班 +倒班制 +倒闭 +倒闭年 +倒不如 +倒彩 +倒插 +倒车 +倒车镜 +倒春寒 +倒刺 +倒打一耙 +倒蛋鬼 +倒底 +倒地 +倒掉 +倒伏 +倒戈 +倒阁 +倒挂 +倒挂金钟 +倒灌 +倒果为因 +倒海翻江 +倒好儿 +倒换 +倒汇者 +倒计时 +倒计时牌 +倒计时钟 +倒金字塔 +倒客 +倒扣 +倒立 +倒流 +倒卵形 +倒轮闸 +倒买 +倒买倒卖 +倒卖 +倒霉 +倒弄 +倒票 +倒骑驴 +倒入 +倒是 +倒手 +倒树 +倒数 +倒水 +倒算 +倒算法 +倒塌 +倒台 +倒坍 +倒淌河乡 +倒腾 +倒梯形 +倒贴 +倒退 +倒胃口 +倒下 +倒行逆施 +倒休 +倒悬 +倒爷 +倒影 +倒映 +倒映成趣 +倒针法 +倒置 +倒转 +倒装 +捣 +捣蛋 +捣蛋鬼 +捣固焦 +捣鬼 +捣毁 +捣乱 +捣碎 +捣腾 +祷 +祷告 +祷告日 +祷告声 +祷告厅 +祷念 +祷文 +蹈 +蹈常袭故 +蹈舞 +蹈袭 +到 +到岸价 +到厂价 +到场 +到处 +到此为止 +到此一游 +到达 +到底 +到点 +到顶 +到访 +到会 +到会者 +到货 +到家 +到课率 +到来 +到来之际 +到期 +到期日 +到任 +到时 +到手 +到庭 +到头 +到头来 +到位 +到位关 +到位率 +到位数 +到校 +到职 +到资 +到资额 +悼 +悼词 +悼辞 +悼念 +悼唁 +盗 +盗案 +盗版 +盗版案 +盗版商 +盗版者 +盗宝 +盗拆 +盗车 +盗车人 +盗车者 +盗打 +盗伐 +盗犯 +盗匪 +盗割 +盗号 +盗掘 +盗寇 +盗魁 +盗码者 +盗卖 +盗卖案 +盗卖者 +盗名欺世 +盗墓 +盗鸟 +盗牛者 +盗抢 +盗窃 +盗窃案 +盗窃犯 +盗窃风 +盗窃险 +盗窃者 +盗窃罪 +盗取 +盗印 +盗印案 +盗用 +盗用者 +盗贼 +盗走 +道 +道白 +道班 +道班长 +道别 +道不明 +道不拾遗 +道藏 +道岔 +道岔厂 +道场 +道党委 +道道 +道道儿 +道德 +道德村 +道德感 +道德观 +道德化 +道德家 +道德街 +道德乡 +道德性 +道法 +道高一尺 +道格拉斯 +道姑 +道观 +道轨 +道好 +道号 +道河乡 +道贺 +道家 +道教 +道教徒 +道经 +道经圣 +道具 +道具车 +道口 +道里 +道里区 +道理 +道林纸 +道路 +道路口 +道路以目 +道貌岸然 +道木 +道袍 +道破 +道歉 +道歉不迭 +道桥 +道情 +道人 +道士 +道听途说 +道统 +道徒 +道途 +道外 +道外区 +道喜 +道县 +道谢 +道心 +道学 +道义 +道义感 +道院 +道指 +道子 +稻 +稻草 +稻草人 +稻地村 +稻谷 +稻花 +稻花香 +稻糠 +稻粱谋 +稻米 +稻苗 +稻区 +稻神 +稻树 +稻穗 +稻田 +稻瘟病 +稻秧 +稻种 +稻子 +得 +得病 +得不偿失 +得步进步 +得逞 +得宠 +得出 +得寸进尺 +得大自在 +得当 +得到 +得道多助 +得法 +得分 +得分率 +得分手 +得分王 +得分制 +得过且过 +得计 +得奖 +得劲 +得救 +得克萨斯 +得空 +得来 +得力 +得利 +得了 +得陇望蜀 +得名 +得票率 +得票数 +得人心 +得人者 +得胜 +得胜村 +得胜河 +得失 +得识 +得势 +得手 +得数 +得遂 +得体 +得天独厚 +得悟 +得悉 +得闲 +得心应手 +得以 +得益 +得意 +得意门生 +得意忘形 +得意洋洋 +得意之笔 +得鱼忘筌 +得愈 +得之不易 +得知 +得志 +得州 +得主 +得罪 +德 +德安县 +德班 +德班港 +德保县 +德才 +德才兼备 +德城 +德城区 +德冲寺 +德岛县 +德方 +德高望重 +德国 +德国队 +德国式 +德和园 +德河 +德黑兰 +德黑兰市 +德恒所 +德宏 +德宏傣乡 +德宏州 +德化 +德化县 +德惠市 +德籍 +德江 +德军 +德寇 +德雷克 +德雷西塔 +德累斯顿 +德里 +德里市 +德量 +德能勤绩 +德农厅 +德钦 +德清县 +德人联 +德赛 +德胜门 +德望 +德文 +德文版 +德文本 +德西尔吉 +德新社 +德兴 +德行 +德性 +德选 +德阳 +德阳市 +德艺双馨 +德意志 +德语 +德语区 +德育 +德育课 +德育室 +德育乡 +德政 +德治 +德智体 +德州 +德州市 +的 +的笃班 +的哥 +的话 +的姐 +的卡 +的黎波里 +的确 +的确良 +的士 +灯 +灯标 +灯彩 +灯草 +灯管 +灯光 +灯光师 +灯海火市 +灯红酒绿 +灯壶 +灯会 +灯火 +灯火辉煌 +灯节 +灯颈 +灯具 +灯壳 +灯帘 +灯笼 +灯笼椒 +灯笼裤 +灯笼罩 +灯谜 +灯谜队 +灯苗 +灯泡 +灯泡厂 +灯墙 +灯伞 +灯绳 +灯市 +灯市口 +灯市西口 +灯饰 +灯丝 +灯塔 +灯塔工 +灯塔市 +灯台 +灯头 +灯舞 +灯箱 +灯心 +灯心草 +灯心绒 +灯心条 +灯芯绒 +灯影 +灯油 +灯语 +灯展 +灯盏 +灯罩 +灯罩子 +灯柱 +灯座 +登 +登岸 +登报 +登场 +登程 +登顶 +登封 +登封市 +登峰造极 +登杆塔 +登高 +登高望远 +登革热病 +登机 +登机口 +登机牌 +登机闸 +登基 +登记 +登记本 +登记表 +登记簿 +登记册 +登记处 +登记法 +登记费 +登记卡 +登记量 +登记率 +登记牌 +登记书 +登记数 +登记在册 +登记账 +登记者 +登记证 +登记制 +登科录 +登联 +登临 +登临意 +登龙有术 +登陆 +登陆点 +登陆舰 +登陆艇 +登陆战 +登陆站 +登录 +登门 +登攀 +登山 +登山队 +登山队员 +登山家 +登山界 +登山路 +登山绳 +登山运动 +登山者 +登时 +登台 +登堂入室 +登月舱 +登载 +登字头儿 +蹬 +蹬技 +蹬立 +蹬腿 +等 +等比级数 +等比数列 +等不及 +等差 +等差级数 +等差数列 +等次 +等待 +等到 +等等 +等第 +等额选举 +等而下之 +等分 +等份 +等高线 +等号 +等候 +等候席 +等积形 +等级 +等级分 +等级分制 +等级观 +等级赛 +等级证 +等级组 +等价 +等价交换 +等价物 +等奖 +等角 +等距离 +等客上门 +等离子 +等离子态 +等离子体 +等量 +等量齐观 +等米下锅 +等深线 +等式 +等速 +等速运动 +等同 +等同于 +等外路 +等外品 +等温 +等温线 +等闲 +等闲视之 +等闲之辈 +等效 +等效电路 +等效声 +等压线 +等腰 +等因奉此 +等于 +等值 +等值线 +邓 +邓底村 +邓东村 +邓家湾村 +邓家庄村 +邓县 +邓小平 +邓选 +邓州 +邓州府 +邓州市 +邓庄乡 +凳 +凳子 +瞪 +瞪眼 +磴口 +磴口县 +低 +低矮 +低凹 +低产 +低产田 +低潮 +低沉 +低垂 +低磁钢 +低档 +低等 +低等动物 +低地 +低点 +低调 +低毒 +低毒级 +低度 +低峰 +低幅 +低高型 +低工资制 +低估 +低谷 +低轨 +低寒带 +低耗 +低缓 +低回 +低级 +低级趣味 +低级者 +低价 +低价位 +低贱 +低空 +低栏 +低廉 +低劣 +低龄 +低龄化 +低落 +低眉顺眼 +低迷 +低迷不振 +低靡 +低能 +低能儿 +低年级 +低牌子 +低频 +低聘 +低平 +低气压区 +低热 +低人一等 +低三下四 +低烧 +低射 +低声 +低声波 +低声下气 +低收入 +低收入者 +低俗 +低速 +低碳钢 +低头 +低洼 +低洼地 +低微 +低纬度 +低位 +低温 +低息 +低下 +低效 +低薪者 +低压 +低压网 +低哑 +低音 +低音炮 +低音提琴 +低幼 +低幼儿 +低于 +低语 +低云 +低者 +低职高挂 +低质 +低中放 +低做 +堤 +堤岸 +堤坝 +堤坝路 +堤顶 +堤段 +堤防 +堤埂 +堤南 +堤坡 +堤身 +堤塘 +堤围 +堤堰 +嘀嘀 +嘀咕 +嘀里嘟噜 +滴 +滴鼻剂 +滴虫 +滴翠 +滴翠峡 +滴滴 +滴滴答答 +滴滴涕 +滴定管 +滴管 +滴灌 +滴壶 +滴剂 +滴里嘟噜 +滴溜溜 +滴溜溜转 +滴漏 +滴露 +滴水 +滴水不漏 +滴水成冰 +滴水穿石 +滴水村 +滴水瓦 +滴丸 +滴香流蜜 +狄 +狄塞耳机 +迪拜 +迪拜港 +迪恩街 +迪化 +迪庆 +迪斯科 +迪瓦市 +敌 +敌百虫 +敌敌畏 +敌对 +敌对者 +敌方 +敌分我袭 +敌国 +敌害 +敌后 +敌击我隐 +敌机 +敌舰 +敌进我伏 +敌军 +敌忾同仇 +敌寇 +敌楼 +敌骑兵 +敌强我弱 +敌情 +敌酋 +敌区 +敌群 +敌人 +敌杀死 +敌视 +敌手 +敌台 +敌探 +敌特 +敌顽 +敌围我散 +敌伪 +敌我 +敌我矛盾 +敌穴 +敌焰 +敌意 +敌营 +敌营房 +敌友 +敌占区 +敌阵 +敌众我寡 +涤 +涤除 +涤荡 +涤纶 +涤纶厂 +涤棉 +涤痰开窍 +涤瑕荡秽 +涤浊扬清 +荻 +笛 +笛膜 +笛声 +笛箫 +笛箫埙 +笛音 +笛子 +嫡传 +嫡派 +嫡亲 +嫡孙 +嫡堂 +嫡系 +诋毁 +底 +底板 +底版 +底本 +底边 +底部 +底舱 +底册 +底层 +底处 +底档 +底儿 +底肥 +底粉 +底粪 +底稿 +底格里斯 +底工 +底谷 +底火 +底价 +底角 +底金 +底壳 +底孔 +底楼 +底码 +底泥 +底牌 +底盘 +底片 +底栖生物 +底气 +底气十足 +底情 +底色 +底墒 +底数 +底水 +底特律市 +底土 +底托 +底纹 +底细 +底下 +底线 +底限 +底薪 +底窑 +底蕴 +底账 +底质 +底子 +底座 +抵 +抵补 +抵偿 +抵触 +抵达 +抵挡 +抵近 +抵京 +抵抗 +抵抗力 +抵扣 +抵扣率 +抵赖 +抵消 +抵雪 +抵押 +抵押金 +抵押科 +抵押品 +抵押权 +抵押物 +抵御 +抵债 +抵仗 +抵账 +抵制 +抵罪 +砥 +砥砺 +砥柱中流 +骶骨 +地 +地安门 +地霸 +地板 +地板胶 +地板刷 +地板砖 +地磅 +地保 +地堡 +地标 +地表 +地表水 +地波 +地步 +地层 +地产 +地产股 +地产界 +地产品 +地产业 +地秤 +地处 +地磁 +地磁极 +地磁力 +地大物博 +地带 +地带性 +地道 +地道战 +地底 +地地道道 +地点 +地动山摇 +地动仪 +地洞 +地段 +地对地 +地对空 +地盾 +地儿 +地方 +地方报 +地方病 +地方队 +地方官 +地方话 +地方级 +地方军 +地方矿 +地方时 +地方税 +地方台 +地方戏 +地方性 +地方志 +地方主义 +地覆天翻 +地埂 +地宫 +地沟 +地瓜 +地瓜蔓 +地瓜秧 +地光 +地广人稀 +地核 +地花鼓 +地黄 +地黄牛 +地火 +地积 +地基 +地级 +地极 +地价 +地价款 +地价税 +地角 +地角天涯 +地脚 +地脚螺丝 +地脚棉 +地窖 +地界 +地尽其利 +地久天长 +地勘 +地勘处 +地勘局 +地炕 +地壳 +地空导弹 +地窟 +地库 +地块 +地矿 +地矿部 +地矿厅 +地拉那 +地缆 +地牢 +地老虎 +地老天荒 +地雷 +地雷战 +地雷阵 +地梨 +地理 +地理系 +地理学 +地理学家 +地力 +地利 +地利人和 +地邻 +地灵人杰 +地炉 +地埋 +地脉 +地幔 +地锚 +地貌 +地貌学 +地霉素 +地门 +地面 +地面孔 +地面水 +地面战 +地面站 +地名 +地膜 +地膜棉 +地盘 +地炮旅 +地皮 +地皮菜 +地皮费 +地痞 +地平线 +地铺 +地气 +地契 +地勤 +地球 +地球村 +地球化学 +地球日 +地球仪 +地区 +地区部 +地区差价 +地区级 +地区司 +地区行 +地区性 +地权 +地热 +地热井 +地热能 +地热学 +地上 +地上茎 +地上权 +地史 +地市 +地市级 +地市委 +地势 +地税 +地税局 +地税所 +地税征管 +地摊 +地摊儿 +地坛 +地毯 +地躺鞭 +地躺拳 +地铁 +地铁局 +地铁口 +地铁票 +地铁站 +地厅级 +地头 +地头虎 +地头蛇 +地图 +地图板 +地图册 +地图集 +地图学家 +地委 +地位 +地温 +地武 +地物 +地峡 +地下 +地下层 +地下党 +地下党员 +地下道 +地下茎 +地下室 +地下水 +地下铁道 +地县 +地线 +地心 +地心说 +地心引力 +地形 +地形区 +地形图 +地穴 +地学 +地学部 +地学界 +地压 +地衣 +地役权 +地应力 +地油 +地狱 +地狱谷 +地域 +地域性 +地缘 +地震 +地震波 +地震带 +地震局 +地震烈度 +地震台 +地震台站 +地震学 +地震仪 +地震震级 +地政 +地政局 +地支 +地祗 +地直 +地址 +地志 +地质 +地质部 +地质带 +地质队 +地质局 +地质师 +地质所 +地质图 +地质系 +地质学 +地质学家 +地质学界 +地中海 +地中海港 +地轴 +地主 +地主家 +地主阶级 +地砖 +地租 +弟 +弟弟 +弟妇 +弟妹 +弟媳 +弟兄 +弟子 +帝 +帝都 +帝都史 +帝国 +帝国主义 +帝豪 +帝号 +帝君 +帝王 +帝王将相 +帝位 +帝制 +递 +递补 +递给 +递减 +递减率 +递交 +递进 +递升 +递水 +递送 +递增 +第 +第八屯 +第比利斯 +第二 +第二产业 +第二国际 +第纳尔 +第三产业 +第三方 +第三国际 +第三纪 +第三世界 +第三系 +第三者 +第十甫路 +第四纪 +第四系 +第四营村 +第五组 +第一 +第一把手 +第一版 +第一产业 +第一夫人 +第一国际 +第一流 +第一手 +第一线 +第一性 +谛听 +睇 +缔结 +缔约 +缔约方 +缔约国 +缔造 +缔造者 +蒂 +蒂罗尔 +嗲 +嗲声嗲气 +嗲味儿 +掂 +掂掂 +掂斤播两 +掂量 +掂量掂量 +滇 +滇北 +滇池 +滇东 +滇东南 +滇红 +滇剧 +滇南 +滇西 +颠 +颠簸 +颠簸车 +颠荡 +颠倒 +颠倒黑白 +颠倒是非 +颠颠簸簸 +颠儿 +颠覆 +颠狂 +颠来倒去 +颠沛 +颠沛流离 +颠扑不破 +颠三倒四 +巅 +巅峰 +巅峰期 +癫 +癫狂 +癫痫 +癫痫病 +典 +典藏 +典藏本 +典册 +典当 +典法 +典范 +典故 +典籍 +典鉴 +典礼 +典论 +典权 +典守者 +典型 +典型性 +典雅 +典雅无华 +典医监 +典仪 +典章 +典租 +点 +点拨 +点播 +点菜 +点钞机 +点贷 +点到为止 +点灯 +点滴 +点点 +点点滴滴 +点点头 +点电荷 +点多面广 +点儿 +点歌 +点焊 +点化 +点画 +点火 +点火率 +点火器 +点击数 +点将 +点将台 +点金成铁 +点金术 +点卯 +点面结合 +点名 +点名册 +点明 +点炮手 +点票站 +点评 +点破 +点球 +点燃 +点燃者 +点染 +点射 +点石成金 +点收款 +点数 +点题 +点铁成金 +点头 +点头哈腰 +点头之交 +点位 +点校 +点心 +点心餐 +点心店 +点心纸 +点源 +点阵 +点种 +点状 +点缀 +点子 +碘 +碘胺 +碘仿 +碘钙片 +碘化钾 +碘化钠 +碘化银 +碘酒 +碘片 +碘缺乏病 +碘酸 +碘钨灯 +碘盐 +踮 +电 +电板 +电棒 +电报 +电报机 +电报局 +电泵 +电笔 +电表 +电表费 +电冰箱 +电波 +电铲 +电厂 +电场 +电唱机 +电唱头 +电车 +电池 +电池板 +电池厂 +电池组 +电传 +电传机 +电船 +电吹风 +电磁 +电磁波 +电磁场 +电磁法 +电磁辐射 +电磁感应 +电磁能 +电磁式 +电磁锁 +电磁铁 +电磁学 +电大 +电导率 +电灯 +电灯泡 +电定 +电动 +电动车 +电动机 +电动力学 +电动式 +电动势 +电度表 +电镀 +电镀厂 +电镀件 +电饭煲 +电费 +电费单 +电风扇 +电复 +电杆 +电感 +电镐 +电告 +电工 +电工室 +电工所 +电工系 +电工学 +电功率 +电管局 +电管员 +电管站 +电灌站 +电光 +电焊 +电焊工 +电焊机 +电焊条 +电荷 +电贺 +电弧 +电弧焊接 +电化 +电化教育 +电化学 +电话 +电话簿 +电话单 +电话费 +电话杆 +电话会 +电话会议 +电话机 +电话局 +电话铃 +电话声 +电话亭 +电话网 +电话线 +电话业 +电汇 +电火花 +电火花机 +电击 +电击法 +电击穴 +电机 +电机厂 +电机界 +电机系 +电极 +电极法 +电价 +电建 +电键 +电教 +电教片 +电教室 +电解 +电解槽 +电解铝 +电解铜 +电解盐 +电解质 +电介质 +电镜 +电锯 +电抗 +电抗器 +电烤灯 +电烤箱 +电控柜 +电缆 +电缆厂 +电缆沟 +电缆井 +电缆桥 +电缆线 +电老虎 +电烙铁 +电离 +电离层 +电力 +电力部 +电力城 +电力法 +电力局 +电力网 +电力线 +电力业 +电联 +电量 +电疗 +电料 +电铃 +电令 +电流 +电流表 +电流计 +电流强度 +电流值 +电炉 +电炉厂 +电炉子 +电路 +电路板 +电路图 +电码 +电鳗 +电盲 +电门 +电磨 +电木 +电脑 +电脑班 +电脑板 +电脑部 +电脑灯 +电脑凳 +电脑房 +电脑费 +电脑节 +电脑课 +电脑迷 +电脑商 +电脑式 +电脑室 +电脑系 +电脑业 +电脑展 +电脑桌 +电能 +电钮 +电暖气 +电排闸 +电排站 +电喷 +电喷车 +电平 +电瓶 +电瓶车 +电气 +电气焊 +电气化 +电气化率 +电汽车 +电器 +电器厂 +电器道 +电器街 +电器行 +电钳 +电潜泵 +电桥 +电热 +电热器 +电热式 +电热水壶 +电热水器 +电热型 +电容 +电容器 +电闪 +电扇 +电声 +电石 +电石气 +电示 +电势差 +电视 +电视报 +电视部 +电视大学 +电视电话 +电视机 +电视机厂 +电视界 +电视剧 +电视剧部 +电视片 +电视屏 +电视人 +电视塔 +电视台 +电视厅 +电视网 +电视业 +电枢 +电算 +电算化 +电台 +电碳 +电梯 +电梯厂 +电梯处 +电梯工 +电梯间 +电筒 +电网 +电位 +电位差 +电位器 +电位仪 +电慰 +电文 +电务 +电务处 +电务段 +电线 +电线杆 +电信 +电信法 +电信号 +电信局 +电信网 +电信业 +电信业者 +电信展 +电刑 +电性能 +电学 +电讯 +电讯报 +电讯部 +电讯局 +电讯社 +电讯业 +电压 +电压计 +电眼 +电冶 +电业 +电业局 +电仪 +电椅 +电影 +电影厂 +电影城 +电影馆 +电影机 +电影家 +电影节 +电影界 +电影局 +电影剧本 +电影片 +电影票 +电影史 +电影室 +电影厅 +电影业 +电影院 +电影站 +电影周 +电泳 +电源 +电源线 +电孕乡 +电晕 +电熨斗 +电灶 +电渣炉 +电闸 +电站 +电针 +电针疗法 +电钟 +电珠 +电铸 +电子 +电子版 +电子表 +电子部 +电子层 +电子厂 +电子城 +电子秤 +电子对 +电子管 +电子光学 +电子柜 +电子化 +电子流 +电子论 +电子器件 +电子枪 +电子琴 +电子书 +电子束 +电子系 +电子学 +电子学家 +电子眼 +电子业 +电子游戏 +电子元件 +电子云 +电子战 +电子钟 +电阻 +电阻器 +电钻 +佃户 +佃农 +佃权 +佃租 +店 +店长 +店方 +店风 +店家 +店里 +店貌 +店面 +店面间 +店名 +店铺 +店史 +店堂 +店小二 +店员 +店张镇 +店址 +店主 +店主任 +垫 +垫板 +垫背 +垫被 +垫补 +垫布 +垫底 +垫付 +垫肩 +垫脚 +垫脚石 +垫款 +垫片 +垫圈 +垫上运动 +垫支 +垫支性 +垫子 +玷辱 +玷污 +惦 +惦挂 +惦记 +惦念 +淀底 +淀粉 +淀粉厂 +淀粉酶 +淀区 +奠 +奠定 +奠基 +奠基礼 +奠基人 +奠基石 +奠基性 +奠基者 +奠立 +殿 +殿房 +殿军 +殿内 +殿堂 +殿堂式 +殿下 +殿宇 +殿中房 +靛蓝 +靛青 +靛水 +刁 +刁悍 +刁滑 +刁民 +刁难 +刁孽 +刁顽 +刁羊 +刁庄村 +刁钻 +刁钻古怪 +叼 +凋 +凋敝 +凋蔽 +凋残 +凋零 +凋落 +凋谢 +貂皮 +貂熊 +碉堡 +碉堡式 +雕 +雕版 +雕虫小技 +雕刀 +雕工 +雕红漆 +雕花 +雕花竹 +雕刻 +雕刻家 +雕刻件 +雕栏 +雕栏画栋 +雕栏玉砌 +雕梁画栋 +雕镂 +雕漆 +雕饰 +雕塑 +雕塑刀 +雕塑感 +雕塑家 +雕塑界 +雕塑品 +雕塑热 +雕塑史 +雕塑系 +雕塑像 +雕像 +雕像头 +雕艺 +雕凿 +雕制品 +雕琢 +鲷科 +吊 +吊白块 +吊车 +吊窗 +吊床 +吊带 +吊灯 +吊顶 +吊放 +吊杆 +吊钩 +吊柜 +吊环 +吊灰 +吊架 +吊脚 +吊脚楼 +吊脚柱 +吊脚状 +吊睛白额 +吊客 +吊扣 +吊兰 +吊链 +吊楼 +吊民伐罪 +吊瓶 +吊铺 +吊起 +吊桥 +吊扇 +吊丝竹 +吊死 +吊索 +吊梯 +吊桶 +吊袜带 +吊销 +吊销期 +吊唁 +吊养 +吊针 +吊装 +钓 +钓大鱼 +钓饵 +钓杆 +钓竿 +钓公 +钓钩 +钓具 +钓迷 +钓手 +钓协 +钓友 +钓鱼 +钓鱼岛 +钓鱼迷 +钓鱼人 +钓鱼税 +钓鱼台 +钓鱼者 +钓者 +调 +调包计 +调兵遣将 +调拨 +调拨价 +调查 +调查表 +调查处 +调查村 +调查点 +调查队 +调查官 +调查会 +调查局 +调查科 +调查区 +调查权 +调查团 +调查网 +调查业 +调查员 +调查站 +调查组 +调出 +调出量 +调储 +调处 +调处会 +调处员 +调档 +调调 +调动 +调度 +调度局 +调度室 +调防 +调峰 +调幅 +调干 +调羹 +调号 +调合油 +调和 +调和漆 +调虎离山 +调换 +调换费 +调换者 +调集 +调剂 +调剂金 +调剂室 +调寄 +调价 +调减 +调角器 +调教 +调节 +调节费 +调节剂 +调节价 +调节金 +调节器 +调节税 +调节司 +调节型 +调节性 +调解 +调解队 +调解国 +调解剂 +调解率 +调解人 +调解书 +调解者 +调进 +调侃 +调控 +调控室 +调控者 +调类 +调离 +调理 +调料 +调令 +调流 +调门 +调门儿 +调派 +调配 +调批权 +调皮 +调频 +调遣 +调取 +调人 +调任 +调入 +调入地 +调入量 +调三斡四 +调色 +调色板 +调升 +调式 +调试 +调适 +调水 +调停 +调停人 +调头 +调委会 +调味 +调味品 +调戏 +调馅 +调销 +调笑 +调谐 +调性 +调休 +调蓄 +调训 +调压井 +调压站 +调研 +调研部 +调研科 +调研室 +调研员 +调研组 +调演 +调养 +调用 +调阅 +调匀 +调运 +调整 +调整表 +调整工 +调整面 +调整期 +调整日 +调值 +调职 +调制 +调质处理 +调转 +调资 +调资费 +调子 +调嘴弄舌 +掉 +掉队 +掉话 +掉话率 +掉换 +掉价 +掉价儿 +掉泪 +掉落 +掉色 +掉头 +掉以轻心 +掉转 +爹 +爹地 +爹爹 +爹妈 +爹娘 +跌 +跌宕 +跌宕起伏 +跌倒 +跌跌撞撞 +跌幅 +跌价 +跌交 +跌跤 +跌进 +跌落 +跌破 +跌入 +跌伤 +跌势 +迭 +迭部 +迭部县 +迭创新高 +迭起 +垤 +谍报 +谍报员 +喋喋不休 +喋血 +堞 +叠 +叠层石 +叠床架屋 +叠翠 +叠放 +叠加 +叠落 +叠现 +叠音 +叠印 +叠韵 +叠嶂 +碟 +碟片 +碟子 +蝶 +蝶翅 +蝶岛 +蝶儿 +蝶阀 +蝶阀厂 +蝶骨 +蝶形 +蝶形花 +蝶形花冠 +蝶影 +蝶泳 +丁 +丁坝 +丁苯吡 +丁苯橡胶 +丁步头 +丁丑 +丁丑年 +丁当 +丁点儿 +丁丁 +丁丁当当 +丁丁冬冬 +丁冬 +丁二烯 +丁亥年 +丁基橡胶 +丁家村 +丁家山 +丁金村 +丁腈橡胶 +丁零声 +丁卯 +丁目 +丁是丁 +丁烷 +丁香 +丁香花 +丁字尺 +丁字堤 +丁字镐 +丁字规 +丁字街 +叮 +叮当 +叮当作响 +叮叮当当 +叮咚 +叮咛 +叮咬 +叮嘱 +玎玎玲玲 +盯 +盯人 +盯梢 +盯住 +钉 +钉齿耙 +钉锤 +钉螺 +钉帽 +钉耙 +钉鞋 +钉子 +钉子户 +酊 +顶 +顶班 +顶板 +顶部 +顶层 +顶底 +顶点 +顶顶 +顶端 +顶多 +顶风 +顶风冒雪 +顶峰 +顶盖 +顶岗 +顶骨 +顶呱呱 +顶冠 +顶级 +顶尖 +顶尖级 +顶角 +顶宽 +顶礼膜拜 +顶梁柱 +顶楼 +顶煤 +顶门儿 +顶牛 +顶牛儿 +顶棚 +顶篷 +顶坪村 +顶上 +顶事 +顶视图 +顶替 +顶天 +顶天立地 +顶头 +顶头上司 +顶效 +顶效镇 +顶芽 +顶叶 +顶针 +顶住 +顶柱 +顶撞 +顶子 +顶嘴 +鼎 +鼎城 +鼎城区 +鼎鼎大名 +鼎锅 +鼎湖 +鼎湖山 +鼎力 +鼎力相助 +鼎立 +鼎盛 +鼎盛期 +鼎篆 +鼎足 +鼎足之势 +订 +订报 +订餐 +订单 +订购 +订购价 +订购粮 +订购人 +订户 +订婚 +订货 +订货会 +订货量 +订货人 +订机 +订价 +订金 +订立 +订书机 +订数 +订约 +订阅 +订阅费 +订正 +定 +定安里 +定安县 +定案 +定本 +定边县 +定编 +定标 +定补面 +定场白 +定场诗 +定单 +定当 +定地 +定点 +定点店 +定点球 +定都 +定夺 +定额 +定岗 +定稿 +定格 +定购 +定购价 +定购粮 +定规 +定果 +定海 +定海区 +定海神针 +定滑轮 +定婚 +定活两便 +定货 +定货会 +定货量 +定级 +定计 +定价 +定价关 +定价权 +定检 +定见 +定界符 +定金 +定惊 +定睛 +定居 +定居点 +定居者 +定居证 +定局 +定军山 +定理 +定力 +定例 +定量 +定量分析 +定林寺 +定陵 +定律 +定论 +定名 +定盘星 +定期 +定钱 +定亲 +定然 +定人 +定日 +定日县 +定神 +定时 +定时炸弹 +定式 +定式化 +定势 +定损 +定位 +定位点 +定位球 +定位仪 +定西 +定息 +定下 +定弦 +定县 +定线员 +定襄 +定襄县 +定向 +定向井 +定向培养 +定向培育 +定向生 +定向天线 +定向招生 +定心丸 +定兴县 +定型 +定型机 +定性 +定性处理 +定性分析 +定性关 +定窑 +定义 +定义域 +定音鼓 +定于 +定于一尊 +定语 +定员 +定远店 +定造 +定责 +定植 +定制 +定中结构 +定州 +定州市 +定准 +定子 +定罪 +定做 +锭 +锭子 +锭子油 +丢 +丢标 +丢丑 +丢掉 +丢丢的 +丢官 +丢开 +丢盔弃甲 +丢盔卸甲 +丢脸 +丢面子 +丢弃 +丢人 +丢人现眼 +丢三落四 +丢三忘四 +丢失 +丢手 +丢卒保车 +东 +东阿 +东安 +东岸 +东巴 +东坝头村 +东柏坡 +东半球 +东宝区 +东北 +东北部 +东北菜 +东北侧 +东北方 +东北非 +东北风 +东北虎 +东北角 +东北局 +东北军 +东北腔 +东北亚 +东奔西窜 +东奔西跑 +东奔西走 +东边 +东边沿 +东便门 +东不拉 +东不压桥 +东部 +东侧 +东昌府区 +东苌池村 +东城 +东城区 +东窗事发 +东村 +东大 +东大街 +东大梁村 +东大桥 +东大桥站 +东大寺 +东单 +东荡 +东倒西歪 +东道 +东道国 +东道主 +东佃 +东洞山 +东杜村 +东渡 +东端 +东段 +东躲西藏 +东方 +东方城 +东方村 +东方队 +东方人 +东方市 +东方乡 +东方学 +东方学家 +东方学系 +东非 +东丰县 +东风 +东风村 +东风岗 +东风湖 +东风路 +东风区 +东风乡 +东弗兰德 +东嘎村 +东嘎镇 +东港 +东港区 +东港市 +东港镇 +东高埝村 +东耿村 +东弓营村 +东宫 +东沟 +东购 +东关 +东关村 +东海 +东海道 +东海郡 +东海路 +东海县 +东海镇 +东汉 +东航 +东河南镇 +东河塘 +东湖 +东湖村 +东花市 +东华 +东华门 +东环路 +东家 +东渐史 +东江 +东江镇 +东交民巷 +东郊 +东郊区 +东郊镇 +东街 +东街村 +东街口 +东借西凑 +东进 +东晋 +东京 +东京都 +东京港 +东京湾 +东经 +东旧寨镇 +东坑乡 +东拉西扯 +东莱 +东莱街 +东濑户 +东里坟 +东丽 +东丽区 +东联 +东邻西舍 +东鳞西爪 +东陵 +东陵区 +东楼 +东麓 +东轮 +东马 +东瑁洲 +东门 +东门礁 +东门码头 +东门外 +东门屿 +东盟 +东弭河村 +东面 +东明 +东明县 +东南 +东南部 +东南村 +东南方 +东南风 +东南极 +东南郊 +东南角 +东南麓 +东南面 +东南欧 +东南西北 +东南亚 +东南亚虎 +东挪西借 +东欧 +东欧司 +东庞矿 +东跑西颠 +东拼西凑 +东平 +东平湖 +东平县 +东坡 +东坡塔 +东圃镇 +东汽 +东钱湖 +东区 +东却村 +东人 +东软 +东三 +东三环 +东三省 +东山 +东山岛 +东山后村 +东山区 +东山县 +东山乡 +东山再起 +东山镇 +东升 +东胜 +东胜市 +东盛 +东施效颦 +东首 +东顺城街 +东四 +东四合村 +东寺 +东宋镇 +东笋 +东台 +东台市 +东太河村 +东滩 +东滩矿 +东塘 +东亭 +东亭区 +东头 +东团堡乡 +东瓦 +东瓦窑 +东外环路 +东莞 +东莞市 +东莞站 +东往 +东吴 +东五路 +东西 +东西部 +东西方 +东西南北 +东西欧 +东西区 +东西向 +东线 +东线组 +东乡 +东乡县 +东厢 +东孝乡 +东辛房 +东兴 +东兴市 +东行 +东亚 +东亚马孙 +东亚区 +东亚系 +东亚学系 +东阳 +东阳市 +东阳镇 +东洋 +东洋车 +东夷 +东移 +东营 +东营村 +东营区 +东营市 +东瀛 +东影村 +东映 +东映像 +东语系 +东园 +东源 +东源村 +东源县 +东月湖 +东岳庙 +东寨港 +东站 +东张西望 +东征 +东征军 +东枝 +东直门 +东直门桥 +东中西部 +东周 +东周村 +东主 +冬 +冬奥 +冬奥会 +冬奥运会 +冬不拉 +冬菜 +冬常服 +冬虫夏草 +冬初 +冬储 +冬春 +冬春季 +冬春汛 +冬防 +冬宫 +冬菇 +冬瓜 +冬灌 +冬寒 +冬烘 +冬候鸟 +冬季 +冬季两项 +冬季圈 +冬间 +冬剪 +冬练三九 +冬令 +冬令营 +冬麦 +冬麦区 +冬忙 +冬眠 +冬暖式 +冬暖夏凉 +冬青 +冬情 +冬去春来 +冬趣 +冬日 +冬笋 +冬桃 +冬天 +冬闲 +冬闲田 +冬小麦 +冬雪 +冬训 +冬训制 +冬汛 +冬叶 +冬夜 +冬衣 +冬忆 +冬泳 +冬泳者 +冬雨 +冬运 +冬运会 +冬至 +冬至点 +冬至线 +冬种 +冬装 +冬作物 +咚 +咚咚 +鸫鸟 +董 +董鄂河 +董家河乡 +董家山村 +董监事 +董事 +董事长 +董事会 +董事局 +董塘 +董塘镇 +懂 +懂得 +懂法 +懂事 +懂行 +懂中文者 +动 +动笔 +动宾 +动不动 +动产 +动词 +动粗耍野 +动弹 +动荡 +动荡不安 +动荡不定 +动荡期 +动动 +动感 +动感画 +动感情 +动工 +动滑轮 +动画 +动画部 +动画片 +动画人 +动火 +动机 +动检 +动检站 +动静 +动力 +动力部 +动力车 +动力处 +动力机 +动力伞 +动力系 +动力性 +动力学 +动力学家 +动力源 +动量 +动量矩 +动乱 +动轮 +动脉 +动脉瘤 +动脉血 +动脉硬化 +动脑 +动脑筋 +动能 +动怒 +动魄惊心 +动气 +动迁 +动迁房 +动迁户 +动情 +动情处 +动群 +动人 +动人肺腑 +动人魂魄 +动人心魄 +动人心弦 +动容 +动身 +动势 +动势中 +动手 +动手动脚 +动手术 +动态 +动态化 +动态平衡 +动态性 +动听 +动土 +动委会 +动问 +动武 +动物 +动物淀粉 +动物界 +动物区 +动物群 +动物纤维 +动物像 +动物性 +动物学 +动物学家 +动物油 +动物园 +动向 +动心 +动心忍性 +动眼神经 +动摇 +动摇不定 +动议 +动因 +动用 +动用量 +动员 +动员部 +动员会 +动员令 +动辄 +动真格 +动真格的 +动之以情 +动植物 +动作 +冻 +冻场 +冻疮 +冻豆腐 +冻儿 +冻干 +冻干粉 +冻害 +冻鸡 +冻僵 +冻结 +冻结令 +冻结室 +冻库 +冻裂 +冻融 +冻伤 +冻死 +冻土 +冻土带 +冻土区 +冻虾 +冻雪 +冻雨 +冻原 +冻灾 +冻猪肉 +侗 +侗家 +侗家人 +侗民 +侗乡 +侗寨 +侗族 +峒中 +恫吓 +栋 +栋栋 +栋号 +栋梁 +栋梁材 +栋梁之材 +洞 +洞察 +洞察力 +洞穿 +洞道 +洞房 +洞房花烛 +洞纺 +洞嘎乡 +洞见 +洞经 +洞井乡 +洞井镇 +洞净杆赛 +洞开 +洞口 +洞窟 +洞库 +洞若观火 +洞体 +洞庭 +洞庭湖 +洞庭湖畔 +洞庭湖区 +洞悉 +洞箫 +洞穴 +洞子 +洞总杆赛 +胴体 +都 +都安 +都柏林 +都柏灵 +都城 +都城墙 +都城史 +都督 +都港区 +都斛镇 +都会 +都江堰 +都灵 +都柳江 +都庞岭 +都市 +都市人 +都市型 +都水 +都行 +都匀 +都镇湾镇 +都政府 +兜 +兜底 +兜兜 +兜肚 +兜儿 +兜风 +兜盖 +兜揽 +兜里 +兜圈子 +兜售 +兜销 +兜子 +斗 +斗必十倍 +斗车 +斗胆 +斗法 +斗方 +斗拱 +斗鸡 +斗笠 +斗门 +斗门县 +斗门镇 +斗牛 +斗牛场 +斗牛宫 +斗牛士 +斗牛舞 +斗殴 +斗殴案 +斗篷 +斗批改 +斗渠 +斗山 +斗士 +斗室 +斗兽场 +斗心眼 +斗心眼儿 +斗烟丝 +斗眼 +斗勇 +斗争 +斗争会 +斗争史 +斗志 +斗志昂扬 +斗智 +斗智斗勇 +斗转星移 +斗嘴 +抖 +抖动 +抖搂 +抖落 +抖擞 +抖擞精神 +抖威风 +陡 +陡壁 +陡陡仄仄 +陡河 +陡峻 +陡坡 +陡坡地 +陡峭 +陡然 +陡然生凉 +陡山沱组 +陡增 +陡直 +豆 +豆瓣 +豆瓣儿酱 +豆包 +豆饼 +豆豉 +豆豆 +豆粉 +豆腐 +豆腐店 +豆腐房 +豆腐粉 +豆腐干 +豆腐干儿 +豆腐羹 +豆腐花 +豆腐块 +豆腐脑 +豆腐脑儿 +豆腐皮 +豆腐乳 +豆腐夭村 +豆花 +豆花儿 +豆荚 +豆架 +豆浆 +豆浆机 +豆酱 +豆角 +豆角儿 +豆角角 +豆科 +豆蔻年华 +豆类 +豆绿 +豆美丝 +豆面 +豆苗 +豆奶 +豆奶粉 +豆奶机 +豆粕 +豆蓉 +豆乳 +豆沙 +豆薯 +豆酥糖 +豆芽 +豆芽菜 +豆芽儿 +豆油 +豆渣 +豆汁 +豆制品 +豆种 +豆庄镇 +豆子 +逗 +逗点 +逗逗 +逗逗哏 +逗逗乐乐 +逗号 +逗乐 +逗留 +逗趣 +逗趣儿 +逗人 +逗笑 +逗笑儿 +窦 +窦段 +嘟 +嘟嘟 +嘟囔 +嘟哝 +督 +督办 +督查 +督查队 +督查室 +督查员 +督查组 +督察 +督察部 +督察处 +督察队 +督察官 +督察权 +督察员 +督察组 +督促 +督导 +督导室 +督导团 +督导员 +督访行 +督抚 +督教 +督军 +督考团 +督学 +督造 +督战 +督阵 +督政 +毒 +毒草 +毒潮 +毒虫 +毒打 +毒蛾 +毒饵 +毒贩 +毒贩子 +毒副作用 +毒害 +毒花花 +毒化 +毒计 +毒剂 +毒箭 +毒酒 +毒菌 +毒辣 +毒辣辣 +毒理 +毒理学 +毒理学家 +毒瘤 +毒麦 +毒魔 +毒谋 +毒品 +毒品者 +毒气 +毒气弹头 +毒气室 +毒情 +毒日 +毒砂 +毒蛇 +毒手 +毒死 +毒素 +毒瓦斯 +毒丸 +毒物 +毒腺 +毒枭 +毒刑 +毒性 +毒药 +毒液 +毒瘾 +毒雨 +毒源 +毒源地 +毒杂草 +毒汁 +毒资 +读 +读报 +读报会 +读报栏 +读报员 +读本 +读出 +读读 +读法 +读后感 +读卡机 +读卡器 +读秒 +读秒声 +读取 +读取头 +读诗班 +读书 +读书班 +读书报 +读书潮 +读书处 +读书会 +读书角 +读书节 +读书界 +读书路 +读书热 +读书人 +读书社 +读书声 +读书者 +读数 +读完 +读物 +读音 +读友 +读者 +读者节 +读者群 +渎职 +渎职案 +渎职罪 +犊 +独 +独霸 +独白 +独辟蹊径 +独辫 +独步清流 +独步天下 +独裁 +独裁者 +独唱 +独唱家 +独超 +独出心裁 +独处 +独创 +独创性 +独此一家 +独当一面 +独岛 +独到 +独到之处 +独独 +独断 +独断独行 +独断专行 +独夫 +独个儿 +独孤求败 +独家 +独角戏 +独脚戏 +独居 +独具 +独具慧眼 +独具匠心 +独具特色 +独具一格 +独具只眼 +独来独往 +独揽 +独力 +独立 +独立报 +独立词 +独立党 +独立宫 +独立国 +独立国家 +独立连 +独立日 +独立师 +独立厅 +独立团 +独立王国 +独立型 +独立性 +独立营 +独立主义 +独立自主 +独联体 +独联体队 +独领风骚 +独流镇 +独龙族 +独轮车 +独门 +独门独户 +独门独院 +独门儿 +独苗 +独木 +独木赤烈 +独木难支 +独木桥 +独木舟 +独木舟队 +独幕 +独幕剧 +独女户 +独山子 +独山子区 +独善其身 +独身 +独身汉 +独生 +独生女 +独生子 +独生子女 +独树一帜 +独台 +独特 +独特性 +独吞 +独往独来 +独舞 +独弦琴 +独行客 +独行人 +独行侠 +独秀 +独秀一枝 +独眼龙 +独一无二 +独一性 +独异 +独有 +独院儿 +独展芳容 +独占 +独占鳌头 +独占资本 +独资 +独子 +独自 +独奏 +独奏家 +独奏曲 +笃 +笃定 +笃笃定定 +笃深 +笃实 +笃信 +笃行不倦 +笃志好学 +堵 +堵车 +堵击 +堵截 +堵漏 +堵塞 +堵头 +堵源 +堵源截流 +堵住 +赌 +赌本 +赌博 +赌博机 +赌博业 +赌场 +赌风 +赌鬼 +赌棍 +赌局 +赌具 +赌客 +赌气 +赌钱 +赌徒 +赌窝 +赌业 +赌账 +赌咒 +赌注 +赌资 +睹 +睹奥 +睹物伤情 +睹物思人 +妒嫉 +妒忌 +妒忌心 +妒贤嫉能 +杜 +杜菜园 +杜菜园村 +杜尔伯特 +杜甫 +杜衡 +杜集区 +杜鹃 +杜鹃花 +杜绝 +杜康酒 +杜拉 +杜拉村 +杜梨 +杜门谢客 +杜尚别 +杜诗 +杜仲 +杜仲树 +杜撰 +肚 +肚兜 +肚量 +肚皮 +肚脐 +肚脐眼 +肚脐眼儿 +肚脐装 +肚子 +度 +度德量力 +度度 +度过 +度假 +度假村 +度假地 +度假区 +度假者 +度量 +度量衡 +度日 +度日如年 +度数 +度汛 +渡 +渡槽 +渡船 +渡过 +渡航 +渡口 +渡轮 +渡人 +渡头 +渡汛 +渡鸦 +镀 +镀镀 +镀铬钢 +镀金 +镀膜 +镀膜钛 +镀锡板 +镀锡铁 +镀锌铁 +蠹虫 +端 +端点 +端端正正 +端公 +端面 +端倪 +端平 +端头 +端午 +端午节 +端详 +端砚 +端阳 +端正 +端庄 +端子 +端坐 +短 +短巴巴 +短兵相接 +短柄 +短波 +短舱 +短程 +短池 +短池赛 +短出出 +短处 +短传 +短粗 +短粗的 +短促 +短打 +短道 +短笛 +短短 +短短的 +短吨 +短发 +短稿 +短工 +短骨 +短号 +短见 +短剑 +短斤缺两 +短斤少两 +短句 +短剧 +短距离 +短撅撅 +短库 +短裤 +短路 +短论 +短命 +短跑 +短片 +短篇 +短篇卷 +短篇小说 +短平快 +短评 +短期 +短期化 +短浅 +短枪 +短缺 +短缺点 +短缺型 +短裙 +短少 +短时 +短时期 +短式 +短视 +短视症 +短收 +短途 +短网 +短网队 +短尾猴 +短文 +短线 +短线产品 +短线型 +短小 +短小精悍 +短效 +短袖 +短训班 +短讯 +短衣 +短语 +短暂 +短装 +段 +段长 +段家寨 +段里 +段落 +段木 +段式 +段委 +段位 +段位差 +段位制 +段子 +断 +断案 +断壁 +断壁残垣 +断臂 +断编残简 +断层 +断层处 +断层地震 +断层湖 +断层山 +断炊 +断代 +断代史 +断档 +断堤 +断点 +断电 +断掉 +断定 +断断续续 +断顿 +断发性 +断鸿声 +断后 +断简 +断简残编 +断交 +断井颓垣 +断绝 +断开 +断口 +断粮 +断裂 +断裂带 +断裂面 +断流 +断流期 +断垄 +断路 +断路器 +断面 +断面图 +断木 +断奶 +断气 +断桥 +断然 +断送 +断头 +断头路 +断头台 +断腿 +断线风筝 +断续 +断崖 +断言 +断涌期 +断语 +断垣残壁 +断章取义 +断枝 +断肢 +断指裂肤 +断钻 +缎 +缎带 +缎面 +缎子 +椴木 +椴木丛村 +椴树 +煅石灰 +锻 +锻锤 +锻工 +锻件 +锻炼 +锻炼法 +锻炼者 +锻铁 +锻压 +锻造 +堆 +堆场 +堆存 +堆存费 +堆叠 +堆房 +堆放 +堆放场 +堆放地 +堆放站 +堆肥 +堆高 +堆沟港 +堆焊 +堆积 +堆积层 +堆积如山 +堆积体 +堆积物 +堆金积玉 +堆龙德庆 +堆满 +堆砌 +堆石坝 +堆笑 +堆渣 +堆栈 +堆制 +队 +队报 +队部 +队长 +队方 +队风 +队服 +队副 +队规 +队会 +队礼 +队里 +队列 +队名 +队旗 +队日 +队尾 +队委 +队委会 +队伍 +队形 +队型 +队医 +队友 +队员 +队章 +队阵 +队组 +对 +对/日 +对岸 +对白 +对本 +对比 +对比度 +对比色 +对比性 +对不对头 +对不起 +对不住 +对簿公堂 +对策 +对唱 +对衬 +对称 +对称性 +对称轴 +对冲 +对此 +对错 +对答 +对答如流 +对打 +对待 +对得起 +对等 +对敌 +对调 +对顶角 +对赌 +对二甲苯 +对方 +对付 +对歌 +对攻 +对攻战 +对光 +对号 +对号入座 +对喝 +对合 +对话 +对话费 +对话会 +对话性 +对夹式 +对讲 +对讲机 +对角 +对角线 +对接 +对接点 +对接口 +对街 +对襟 +对劲 +对劲儿 +对进 +对景 +对酒当歌 +对局 +对局费 +对局室 +对开 +对抗 +对抗赛 +对抗性 +对抗战 +对口 +对口词 +对口相声 +对垒 +对立 +对立论 +对立面 +对立统一 +对立物 +对联 +对练 +对流 +对流层 +对路 +对面 +对内 +对内搞活 +对牛弹琴 +对偶 +对杀 +对视 +对手 +对手戏 +对数 +对台戏 +对谈 +对头 +对外 +对外部 +对外开放 +对外贸易 +对外商 +对外司 +对味 +对虾 +对象 +对象国 +对象化 +对象性 +对验 +对弈 +对饮 +对应 +对应物 +对于 +对仗 +对账单 +对照 +对照班 +对照表 +对照点 +对照体 +对照组 +对阵 +对证 +对症下药 +对质 +对峙 +对撞 +对撞机 +对准 +对子 +对坐 +兑 +兑付 +兑付期 +兑换 +兑换点 +兑换机 +兑换率 +兑换券 +兑汇处 +兑取 +兑现 +兑现奖 +兑现率 +兑制 +吨 +吨/年 +吨/人 +吨/日 +吨/小时 +吨钢 +吨公里 +吨谷镇 +吨粮田 +吨粮县 +吨位 +敦 +敦促 +敦厚 +敦化 +敦煌 +敦煌市 +敦煌学 +敦雷 +敦请 +敦劝 +敦实 +墩 +墩布 +墩子 +蹲 +蹲点 +蹲坑 +蹲马步 +蹲苗 +蹲守 +蹲位 +蹲坐者 +盹 +趸 +趸船 +囤 +囤仓 +囤积 +囤积居奇 +炖 +盾 +盾牌 +砘 +钝 +钝顶 +钝角 +钝响 +顿 +顿挫疗法 +顿顿 +顿号 +顿河 +顿觉 +顿开茅塞 +顿然 +顿生 +顿时 +顿首 +顿悟 +顿足 +遁 +遁词 +遁入 +遁身 +遁世 +遁世者 +遁逃 +多 +多巴哥 +多巴哥岛 +多半 +多半数 +多宝港 +多报 +多边 +多边形 +多变 +多变性 +多标准论 +多病在身 +多才多艺 +多彩 +多彩缤纷 +多彩的 +多彩多姿 +多彩生活 +多彩重绘 +多层板 +多层次性 +多吃多占 +多愁善感 +多此一举 +多存多贷 +多弹头 +多党制 +多道程序 +多度津 +多多 +多多的 +多多马 +多多许 +多多益善 +多发 +多发病 +多发期 +多发区 +多发性 +多方 +多方面 +多方式 +多方位 +多付 +多哥 +多寡 +多管齐下 +多管闲事 +多哈 +多孩率 +多汗症 +多会儿 +多级 +多级火箭 +多极 +多极化 +多价 +多见者 +多角度 +多角亭 +多角形 +多经林 +多晶硅 +多晶体 +多久 +多聚糖 +多抗 +多科性 +多孔 +多口相声 +多快好省 +多亏 +多来咪 +多劳多得 +多类型 +多棱镜 +多礼 +多利 +多粒子 +多领化 +多隆乡 +多伦多 +多伦多市 +多罗米蒂 +多毛类 +多么 +多媒体 +多媒体化 +多门 +多米尼加 +多面角 +多面手 +多面体 +多谋善断 +多姆斯特 +多幕 +多幕剧 +多难 +多难兴邦 +多瑙河 +多能 +多年 +多年生 +多拍球 +多胚生殖 +多普尔 +多普勒 +多情 +多球制 +多渠道 +多日 +多如牛毛 +多少 +多神教 +多时 +多式 +多事 +多事之秋 +多数 +多数百姓 +多数党 +多数派 +多数票 +多数制 +多肽 +多糖 +多糖类 +多头 +多头管理 +多维性 +多位点型 +多味斋 +多闻者 +多向 +多项式 +多谢 +多心 +多性 +多样 +多样化 +多样式 +多样性 +多业 +多疑 +多义词 +多义性 +多义字 +多音字 +多用 +多用机 +多用型 +多于 +多余 +多余者 +多雨区 +多元 +多元化 +多元论 +多元酸 +多元性 +多云到阴 +多云间晴 +多云间阴 +多云转晴 +多云转阴 +多灾多难 +多咱 +多躁少静 +多者 +多阵性 +多智善谋 +多种 +多种多样 +多重 +多姿 +多姿多彩 +多姿多态 +多子 +多子多孙 +多足类 +多嘴 +咄咄 +咄咄逼人 +咄咄怪事 +哆来咪 +哆嗦 +夺 +夺杯 +夺标 +夺得 +夺关斩将 +夺冠 +夺眶而出 +夺魁 +夺路 +夺目 +夺取 +夺权 +夺食 +夺占 +夺走 +踱 +踱步 +朵 +朵朵 +朵儿 +垛 +垛口 +垛音 +垛子 +躲 +躲避 +躲藏 +躲躲闪闪 +躲开 +躲闪 +躲债 +剁 +堕 +堕落 +堕入 +堕胎 +堕胎法 +堕胎者 +舵 +舵轮 +舵手 +惰 +惰性 +惰性元素 +跺 +跺跺脚 +跺脚 +讹传 +讹谬 +讹误 +讹诈 +俄 +俄城 +俄二战 +俄方 +俄共 +俄国 +俄国化 +俄亥俄 +俄亥俄州 +俄籍 +俄军 +俄勒冈 +俄勒冈州 +俄罗斯 +俄罗斯队 +俄罗斯籍 +俄罗斯族 +俄顷 +俄式 +俄通社 +俄文 +俄文楼 +俄新社 +俄央行 +俄语 +俄族人 +娥眉 +峨边县 +峨冠博带 +峨金 +峨眉 +峨眉泉 +峨眉山 +峨嵋 +峨嵋岭 +峨嵋山 +峨铁 +鹅 +鹅蛋脸 +鹅观草 +鹅冠草 +鹅湖 +鹅黄 +鹅黄色 +鹅卵 +鹅卵石 +鹅毛 +鹅毛大雪 +鹅毛扇 +鹅毛雪 +鹅绒 +鹅行鸭步 +鹅掌风 +鹅掌楸 +蛾眉 +蛾眉月 +蛾子 +额 +额定 +额度 +额角 +额手称庆 +额数 +额头 +额外 +婀娜 +婀娜多姿 +厄 +厄方 +厄瓜多尔 +厄音 +厄运 +呃 +扼 +扼杀 +扼守 +扼腕 +扼腕叹息 +扼要 +扼制 +扼住 +恶 +恶霸 +恶霸地主 +恶报 +恶臭 +恶毒 +恶感 +恶贯满盈 +恶鬼 +恶棍 +恶果 +恶狠狠 +恶化 +恶疾 +恶计 +恶浪 +恶劣 +恶劣性 +恶骂 +恶梦 +恶名 +恶魔 +恶气 +恶拳 +恶人 +恶少 +恶习 +恶心 +恶行 +恶性 +恶性循环 +恶性肿瘤 +恶言 +恶意 +恶语 +恶运 +恶战 +恶仗 +恶竹 +恶作剧 +恶作剧者 +饿 +饿虎扑食 +饿殍 +饿殍遍野 +饿死事小 +鄂 +鄂北 +鄂城 +鄂东 +鄂尔多斯 +鄂钢 +鄂伦春 +鄂伦春乡 +鄂南 +鄂托克 +鄂托克旗 +鄂温克 +鄂温克旗 +鄂西 +鄂豫皖 +鄂州 +鄂州市 +愕然 +遏 +遏止 +遏制 +鹗 +颚裂 +噩耗 +噩梦 +噩运 +鳄 +鳄鱼 +鳄鱼衫 +鳄鱼眼泪 +恩 +恩巴 +恩仇 +恩赐 +恩德 +恩德培 +恩典 +恩恩怨怨 +恩格斯 +恩公 +恩古巴尼 +恩惠 +恩将仇报 +恩尽义绝 +恩纳村 +恩平市 +恩情 +恩情郡 +恩人 +恩师 +恩施 +恩施市 +恩施州 +恩同再造 +恩图曼 +恩义 +恩怨 +恩怨史 +恩泽 +恩泽沁溢 +恩重如山 +恩准 +蒽环类 +摁 +摁钉儿 +摁扣儿 +儿 +儿辈 +儿歌 +儿皇帝 +儿康宁 +儿科 +儿科病 +儿郎 +儿马 +儿女 +儿女情 +儿女情长 +儿女式 +儿少 +儿时 +儿孙 +儿孙满堂 +儿童 +儿童村 +儿童画 +儿童节 +儿童剧 +儿童片 +儿童伞 +儿童书 +儿童团 +儿童文学 +儿童周 +儿童组 +儿媳 +儿媳妇 +儿戏 +儿研所 +儿艺 +儿子 +而 +而后 +而今 +而况 +而立 +而立之年 +而且 +而是 +而外 +而言 +而已 +尔 +尔等 +尔后 +尔虞我诈 +尔诈我虞 +耳 +耳背 +耳边 +耳边风 +耳垂 +耳聪 +耳聪目明 +耳朵 +耳朵垂 +耳朵眼 +耳朵眼儿 +耳福 +耳根 +耳垢 +耳鼓 +耳鼓膜 +耳刮子 +耳光 +耳郭 +耳环 +耳机 +耳际 +耳科 +耳孔 +耳聋 +耳轮 +耳鸣 +耳膜 +耳目 +耳目一新 +耳畔 +耳旁风 +耳屏 +耳濡 +耳濡目染 +耳软心活 +耳塞 +耳生 +耳熟 +耳熟能详 +耳顺 +耳提面命 +耳听八方 +耳听为虚 +耳挖子 +耳闻 +耳闻目睹 +耳闻目见 +耳细胞 +耳性 +耳穴 +耳语 +耳针 +耳坠 +耳坠子 +耳子 +洱海 +洱源 +饵 +饵料 +珥陵 +珥陵镇 +二 +二·二八 +二把刀 +二把手 +二苯基 +二不怕死 +二不图利 +二不休 +二部制 +二产 +二传 +二传奖 +二传手 +二次方程 +二醋酸 +二大 +二单 +二档 +二道 +二道贩子 +二道沟村 +二道河 +二道河乡 +二等 +二等功 +二等奖 +二叠纪 +二二八 +二房 +二房东 +二分 +二伏 +二副 +二哥 +二工乡 +二宫乡 +二锅头 +二号机 +二胡 +二胡曲 +二花脸 +二化螟 +二话 +二话不说 +二话没说 +二环 +二环路 +二黄 +二簧 +二机 +二机部 +二级 +二级化 +二级品 +二极管 +二季度 +二甲 +二甲胺 +二甲苯 +二建 +二进宫 +二进位 +二进制 +二京 +二军大 +二来 +二郎 +二郎庙 +二郎腿 +二老 +二类 +二愣子 +二里塘 +二里头 +二里庄 +二连 +二连冠 +二连星 +二流 +二流子 +二硫化碳 +二硫基苯 +二门 +二秘 +二棉 +二面角 +二拇指 +二奶 +二难 +二娘 +二炮 +二七 +二七路 +二七区 +二期 +二汽 +二青洞 +二轻 +二轻局 +二轻企字 +二人转 +二日 +二三流 +二三月 +二三月份 +二审 +二十八分 +二十八日 +二十八宿 +二十大 +二十二日 +二十二时 +二十分 +二十九日 +二十六日 +二十七日 +二十日 +二十三日 +二十时 +二十四日 +二十四史 +二十五日 +二十五史 +二十一年 +二十一日 +二十一中 +二时 +二是二 +二手 +二手车 +二手货 +二手机 +二双 +二台子乡 +二滩 +二踢脚 +二田村 +二为 +二五眼 +二线 +二项式 +二小 +二心 +二星级 +二修所 +二氧化硅 +二氧化硫 +二氧化氯 +二氧化碳 +二药 +二爷 +二医大 +二乙胺基 +二义性 +二酉斋 +二元 +二元论 +二元酸 +二元杂交 +二月 +二月份 +二则 +二战 +二者 +二职教 +二中 +二中全会 +二重唱 +二重性 +二重奏 +佴 +发 +发案 +发案地 +发案率 +发案数 +发榜 +发包 +发包方 +发包权 +发报 +发报量 +发报声 +发表 +发表期 +发病 +发病率 +发布 +发布费 +发布会 +发布权 +发布厅 +发布者 +发布周 +发财 +发财狂 +发财梦 +发财图 +发菜 +发颤 +发钞量 +发钞行 +发潮 +发车 +发愁 +发臭 +发出 +发怵 +发憷 +发达 +发达国家 +发达县 +发大财 +发呆 +发单 +发电 +发电厂 +发电场 +发电机 +发电机组 +发电量 +发电站 +发动 +发动机 +发动机盖 +发动者 +发抖 +发端 +发发 +发放 +发放点 +发放量 +发放站 +发奋 +发奋图强 +发愤 +发愤图强 +发愤忘食 +发疯 +发福 +发高烧 +发糕 +发稿 +发给 +发光 +发光剂 +发函 +发汗 +发号机 +发号施令 +发黑 +发狠 +发横财 +发红 +发乎 +发花 +发话 +发话器 +发还 +发慌 +发黄 +发挥 +发昏 +发火 +发火点 +发货 +发货部 +发货票 +发货权 +发迹 +发急 +发计委 +发髻 +发夹 +发家 +发奖 +发酵 +发酵仓 +发酵厂 +发酵剂 +发酵站 +发旧 +发觉 +发掘 +发掘地 +发掘面 +发卡 +发卡量 +发刊词 +发狂 +发蜡 +发烂 +发廊 +发牢骚 +发楞 +发冷 +发愣 +发亮 +发令 +发令枪 +发聋振聩 +发落 +发麻 +发毛 +发霉 +发懵 +发面 +发明 +发明地 +发明家 +发明奖 +发明权 +发明人 +发明型 +发明者 +发难 +发腻 +发怒 +发排 +发胖 +发泡 +发泡镍 +发配 +发脾气 +发票 +发票款 +发妻 +发起 +发起人 +发起者 +发起组 +发情 +发情期 +发球 +发球法 +发球奖 +发球手 +发球线 +发热 +发热量 +发人深省 +发人深思 +发人深醒 +发轫 +发轫期 +发乳 +发散 +发散透镜 +发痧 +发傻 +发上 +发梢 +发烧 +发烧圈 +发烧式 +发烧友 +发射 +发射臂 +发射场 +发射点 +发射机 +发射极 +发射架 +发射率 +发射塔 +发射台 +发射状 +发审委 +发生 +发生场 +发生地 +发生量 +发生率 +发生器 +发声 +发式 +发饰 +发誓 +发售 +发水 +发丝 +发送 +发送机 +发送键 +发送量 +发酸 +发套 +发条 +发帖 +发网 +发微 +发委会 +发文 +发问 +发物 +发现 +发现地 +发现号 +发现者 +发祥 +发祥地 +发祥之地 +发笑 +发泄 +发信 +发行 +发行部 +发行点 +发行额 +发行费 +发行价 +发行科 +发行款 +发行量 +发行期 +发行人 +发行日 +发行史 +发行所 +发行体 +发行网 +发行业 +发行员 +发行站 +发行者 +发型 +发型师 +发芽 +发芽率 +发芽势 +发言 +发言稿 +发言权 +发言人 +发言台 +发言者 +发言组 +发炎 +发扬 +发扬踔厉 +发扬光大 +发痒 +发音 +发语词 +发育 +发育期 +发源 +发源地 +发愿 +发运 +发运人 +发晕 +发簪 +发债 +发粘 +发展 +发展部 +发展带 +发展党 +发展点 +发展费 +发展观 +发展极 +发展奖 +发展金 +发展局 +发展科 +发展链 +发展论 +发展期 +发展前途 +发展权 +发展商 +发展史 +发展署 +发展司 +发展型 +发展性 +发展学 +发展组 +发涨 +发照 +发证 +发自 +发纵指示 +发作 +乏 +乏力 +乏煤 +乏善可陈 +乏味 +乏意 +伐 +伐木 +伐木工 +伐区 +罚 +罚不当罪 +罚单 +罚金 +罚款 +罚款单 +罚款额 +罚款率 +罚没 +罚没款 +罚球 +罚息 +罚则 +阀 +阀门 +阀门界 +阀体 +阀状 +阀座 +筏 +筏基 +筏式 +筏型 +筏养底播 +筏子 +法 +法案 +法办 +法宝 +法币 +法不责众 +法餐 +法场 +法尺 +法典 +法典化 +法定 +法定人数 +法定性 +法度 +法儿 +法方 +法工委 +法共 +法官 +法官法 +法规 +法规处 +法规化 +法规科 +法规性 +法国 +法国杯赛 +法国队 +法国法郎 +法国籍 +法国史 +法国式 +法国梧桐 +法航 +法号 +法核 +法会 +法籍 +法纪 +法纪星 +法家 +法警 +法兰克福 +法兰盘 +法兰绒 +法兰西 +法兰西堡 +法郎 +法郎区 +法老 +法理 +法理学 +法理学界 +法力 +法立特 +法例 +法令 +法卢斯村 +法律 +法律案 +法律部 +法律处 +法律化 +法律界 +法律系 +法律性 +法律学 +法律学系 +法罗 +法盲 +法门 +法门寺 +法名 +法器 +法权 +法人 +法人股 +法人化 +法人制 +法商 +法师 +法式 +法事 +法书 +法术 +法条 +法帖 +法庭 +法庭罪 +法桐 +法统 +法王洞 +法王庙村 +法网 +法网恢恢 +法文 +法文版 +法文化 +法文学 +法务 +法西斯 +法系 +法线 +法新社 +法学 +法学班 +法学会 +法学家 +法学界 +法学所 +法学系 +法学院 +法眼 +法衣 +法医 +法医学 +法医院 +法语 +法苑 +法院 +法则 +法扎巴德 +法政 +法旨 +法制 +法制办 +法制观 +法制化 +法制局 +法制科 +法制课 +法制史 +法治 +法治化 +法治论 +法子 +砝码 +珐琅 +珐琅质 +帆 +帆板 +帆布 +帆布厂 +帆布床 +帆船 +帆樯 +帆影 +帆张网 +番 +番号 +番椒 +番木瓜 +番茄 +番茄丁 +番茄酱 +番石榴 +番薯 +番禺 +番禺市 +幡 +幡然 +幡然醒悟 +翻 +翻案 +翻版 +翻本 +翻查 +翻车 +翻车鱼 +翻沉 +翻船 +翻地 +翻动 +翻斗车 +翻番 +翻翻 +翻飞 +翻盖 +翻跟头 +翻供 +翻滚 +翻过 +翻回 +翻悔 +翻江倒海 +翻卷 +翻开 +翻看 +翻刻 +翻刻本 +翻来覆去 +翻脸 +翻两番 +翻领 +翻毛 +翻盘 +翻然 +翻然悔悟 +翻砂 +翻砂工 +翻山越岭 +翻身 +翻身仗 +翻腾 +翻天 +翻天复地 +翻天覆地 +翻箱倒柜 +翻新 +翻修 +翻演 +翻译 +翻译家 +翻译器 +翻译史 +翻译者 +翻印 +翻涌 +翻阅 +翻越 +翻云覆雨 +翻整 +翻转 +藩 +藩国 +藩篱 +藩属 +凡 +凡堡村 +凡此等等 +凡尔 +凡尔赛 +凡尔赛宫 +凡尔赛门 +凡夫俗子 +凡间 +凡例 +凡人 +凡士林 +凡事 +凡是 +凡俗 +凡响 +矾土 +钒 +烦 +烦劳 +烦乱 +烦难 +烦恼 +烦扰 +烦冗 +烦琐 +烦琐哲学 +烦嚣 +烦心 +烦心事 +烦言 +烦忧 +烦杂 +烦躁 +樊城 +樊集 +樊篱 +樊西 +樊尧村 +蕃茄 +燔 +繁 +繁博 +繁多 +繁分数 +繁复 +繁花 +繁花似锦 +繁华 +繁华似锦 +繁苛 +繁丽 +繁忙 +繁茂 +繁密 +繁难 +繁荣 +繁荣昌盛 +繁荣带 +繁荣党 +繁荣富强 +繁荣期 +繁荣区 +繁缛 +繁盛 +繁琐 +繁体 +繁体字 +繁文缛节 +繁芜 +繁星 +繁衍 +繁育 +繁育期 +繁杂 +繁枝茂叶 +繁殖 +繁殖场 +繁殖地 +繁殖关 +繁殖量 +繁殖率 +繁殖区 +繁峙 +繁峙县 +繁重 +反 +反霸 +反败为胜 +反比 +反比例 +反驳 +反驳者 +反哺 +反差 +反常 +反常规 +反潮流 +反衬 +反冲力 +反刍 +反刍动物 +反串 +反唇相讥 +反弹 +反党 +反倒 +反帝 +反调 +反动 +反动派 +反动性 +反毒 +反毒局 +反毒网 +反毒月 +反对 +反对党 +反对派 +反对票 +反对声 +反对者 +反而 +反反复复 +反方 +反腐 +反腐败 +反腐倡廉 +反腐纠风 +反腐者 +反复 +反复无常 +反复性 +反感 +反戈一击 +反革命 +反攻 +反攻倒算 +反躬 +反躬自省 +反躬自问 +反共 +反顾 +反观 +反光 +反光镜 +反过来 +反过来说 +反函数 +反话 +反悔 +反击 +反击战 +反季节 +反假 +反间计 +反抗 +反科学 +反客为主 +反馈 +反馈簿 +反馈性 +反拉 +反垄断法 +反面 +反面教材 +反面人物 +反目 +反目成仇 +反目为仇 +反派 +反叛 +反叛者 +反扑 +反潜 +反潜机 +反切法 +反求诸己 +反犬旁儿 +反日会 +反射 +反射度 +反射光 +反射角 +反射面 +反射线 +反省 +反省式 +反是 +反收购 +反手 +反思 +反诉 +反诉费 +反锁 +反贪局 +反贪科 +反坦克雷 +反胃 +反文旁儿 +反问 +反问句 +反先 +反响 +反向 +反咬一口 +反义词 +反应 +反应堆 +反应器 +反应塔 +反映 +反映论 +反犹主义 +反右 +反战 +反折 +反正 +反证法 +反之 +反之亦然 +反质子 +反中子 +反转 +反转片 +反作用 +反作用力 +返 +返潮 +返程 +返程票 +返抵 +返工 +返观 +返光镜 +返国 +返航 +返还 +返还金 +返还款 +返还权 +返回 +返回式 +返家 +返老还童 +返利 +返贫 +返贫率 +返聘 +返聘者 +返璞归真 +返青 +返青肥 +返乡 +返销 +返销粮 +返校 +返修 +返修率 +返祖现象 +犯 +犯案 +犯病 +犯不着 +犯愁 +犯嘀咕 +犯法 +犯规 +犯规者 +犯纪 +犯忌 +犯戒 +犯禁 +犯困 +犯难 +犯人 +犯人照 +犯颜直谏 +犯疑 +犯意 +犯有 +犯属 +犯罪 +犯罪案 +犯罪法 +犯罪分子 +犯罪感 +犯罪率 +犯罪人 +犯罪性 +泛 +泛称 +泛泛 +泛泛而论 +泛泛而谈 +泛非大 +泛化 +泛金 +泛滥 +泛滥成灾 +泛旅 +泛美 +泛起 +泛区 +泛神论 +泛太平洋 +泛谈 +泛亚 +泛音 +泛指 +泛舟 +饭 +饭钵 +饭菜 +饭店 +饭店化 +饭店业 +饭费 +饭纲 +饭馆 +饭锅 +饭盒 +饭后 +饭来张口 +饭粒 +饭量 +饭囊 +饭票 +饭铺 +饭前 +饭钱 +饭食 +饭堂 +饭厅 +饭桶 +饭团 +饭碗 +饭碗子 +饭庄 +饭桌 +范 +范本 +范畴 +范公堤 +范画 +范家梁村 +范例 +范楼村 +范派 +范市镇 +范式 +范式化 +范围 +范文 +范县 +范性 +贩 +贩毒 +贩毒案 +贩毒船 +贩毒点 +贩毒人 +贩毒者 +贩黄 +贩假 +贩卖 +贩枪 +贩私 +贩销 +贩运 +贩子 +畈 +梵蒂冈 +梵净山 +方 +方案 +方便 +方便化 +方便卡 +方便面 +方便面碗 +方便牌 +方便之门 +方步 +方才 +方舱 +方策 +方城 +方城县 +方程 +方程式 +方程组 +方村镇 +方寸 +方寸已乱 +方寸之地 +方凳 +方东村 +方队 +方法 +方法论 +方方 +方方面面 +方方正正 +方格 +方格呢 +方根 +方盒 +方壶 +方剂 +方家见笑 +方家区 +方尖碑 +方解石 +方巾 +方巾气 +方可 +方块 +方块糖 +方块字 +方框 +方框图 +方括号 +方粒 +方略 +方略图 +方面 +方面军 +方木 +方铅矿 +方桥 +方桥镇 +方山 +方山村 +方山县 +方始 +方式 +方术 +方顺桥乡 +方塘 +方糖 +方头鞋 +方位 +方位词 +方向 +方向舵 +方向盘 +方向性 +方兴未艾 +方形 +方形盘 +方言 +方言词 +方言土语 +方药 +方音 +方圆 +方丈 +方针 +方针论 +方针性 +方枕 +方阵 +方整化 +方正 +方正县 +方志 +方舟 +方柱 +方庄 +方庄镇 +方桌 +方子 +方字 +方嘴鱼 +坊 +坊会 +芳 +芳草 +芳草地 +芳村 +芳菲 +芳菲苑 +芳华 +芳龄 +芳纶 +芳名 +芳溪镇 +芳香 +芳泽 +芳洲 +防 +防癌 +防办 +防雹网 +防暴 +防备 +防病 +防波堤 +防不胜防 +防查 +防潮 +防潮堤 +防尘 +防城 +防城港 +防城港市 +防城市 +防虫 +防弹车 +防弹服 +防弹衣 +防倒轮 +防盗 +防盗打器 +防盗门 +防盗器 +防盗网 +防地 +防冻 +防冻棚 +防毒 +防毒面具 +防反术 +防范 +防范金 +防范性 +防风 +防风固沙 +防风林 +防风衣 +防腐 +防腐败法 +防腐厂 +防腐剂 +防腐蚀 +防寒 +防寒服 +防寒屋 +防旱 +防洪 +防洪堤 +防洪法 +防洪工程 +防洪渠 +防护 +防护堤 +防护堆 +防护栏 +防护林 +防护林带 +防护门 +防护网 +防护衣 +防化 +防化兵 +防化学 +防化学兵 +防患化险 +防患未然 +防火 +防火板 +防火办 +防火期 +防火墙 +防火员 +防火罩 +防火罩费 +防假 +防骄破满 +防抗灾 +防空 +防空兵 +防空洞 +防空法 +防空壕 +防空网 +防涝 +防凌 +防盲 +防霉剂 +防欠 +防撬门 +防区 +防龋 +防沙 +防沙林 +防晒霜 +防身 +防渗 +防渗墙 +防渗渠 +防守 +防守奖 +防守型 +防守战 +防暑 +防暑降温 +防霜林 +防水 +防水坝 +防水表 +防水层 +防微杜渐 +防伪 +防伪灯 +防伪服 +防伪盖 +防伪字 +防卫 +防卫局 +防卫厅 +防污 +防务 +防务展 +防线 +防锈 +防汛 +防汛办 +防疫 +防疫法 +防疫费 +防疫员 +防疫站 +防疫针 +防意如城 +防雨布 +防雨罩 +防御 +防御区 +防御型 +防御性 +防御战 +防灾 +防灾费 +防震 +防震棚 +防止 +防治 +防治法 +防蛀 +防蛀剂 +防撞性 +防总 +防总办 +妨碍 +妨害 +房 +房补 +房产 +房产处 +房产局 +房产商 +房产证 +房产主 +房贷部 +房地 +房地产 +房地产部 +房地产权 +房地产热 +房地产商 +房地产业 +房地局 +房顶 +房东 +房费 +房改 +房改办 +房改价 +房盖 +房管 +房管局 +房管所 +房号 +房基 +房价 +房间 +房建 +房建队 +房客 +房款 +房梁 +房门 +房契 +房前 +房山 +房山区 +房舍 +房市 +房事 +房室 +房帖 +房委会 +房屋 +房屋基 +房屋业 +房县 +房型 +房檐 +房源 +房院 +房主 +房子 +房租 +房租费 +仿 +仿单 +仿佛 +仿古 +仿古砖 +仿画 +仿冒 +仿若 +仿生 +仿生学 +仿宋 +仿宋体 +仿效 +仿造 +仿章 +仿照 +仿真 +仿真度 +仿真机 +仿真丝 +仿纸 +仿制 +仿制品 +仿制者 +仿字 +仿作 +访 +访华 +访华团 +访贫问苦 +访求 +访谈 +访谈录 +访问 +访问记 +访问量 +访问率 +访问团 +访问者 +访友 +访者 +彷徨 +纺 +纺车 +纺绸 +纺锤 +纺锤形 +纺锭 +纺工 +纺机 +纺嫂 +纺纱 +纺纱机 +纺丝 +纺线 +纺线线 +纺织 +纺织部 +纺织厂 +纺织机 +纺织界 +纺织局 +纺织娘 +纺织品 +纺织染厂 +纺织图 +纺织业 +放 +放不放开 +放长线 +放出 +放达 +放大 +放大镜 +放大器 +放大纸 +放贷 +放贷人 +放胆 +放诞 +放荡 +放荡不羁 +放到 +放电 +放毒 +放放 +放飞 +放飞场 +放飞关 +放风 +放歌 +放工 +放过 +放红 +放虎归山 +放缓 +放活 +放火 +放假 +放开 +放空 +放空炮 +放空气 +放宽 +放款 +放浪 +放浪形骸 +放冷风 +放亮 +放疗 +放流 +放录像 +放虑 +放慢 +放牧 +放牛 +放牛郎 +放牛娃 +放排 +放炮 +放气门 +放弃 +放晴 +放权 +放热 +放热反应 +放任 +放任自流 +放散 +放哨 +放射 +放射病 +放射科 +放射器 +放射线 +放射形 +放射性 +放射性束 +放生 +放声 +放手 +放水 +放水沟 +放肆 +放松 +放谈 +放卫星 +放下 +放线 +放像机 +放像厅 +放小 +放心 +放心菜 +放心车 +放心店 +放心房 +放心桥 +放行 +放行率 +放学 +放血 +放眼 +放眼看去 +放眼世界 +放羊 +放养 +放映 +放映点 +放映队 +放映机 +放映权 +放映室 +放映厅 +放映业 +放油区 +放在 +放在眼里 +放责 +放债 +放置 +放逐 +放纵 +放走 +飞 +飞白 +飞奔 +飞播 +飞车 +飞车走壁 +飞驰 +飞船 +飞弹 +飞荡 +飞抵 +飞地 +飞碟 +飞锭 +飞动 +飞渡 +飞短流长 +飞夺 +飞蛾 +飞蛾投火 +飞飞 +飞歌 +飞过 +飞鸿 +飞鸿堂 +飞狐 +飞虎队 +飞花 +飞黄腾达 +飞蝗 +飞机 +飞机场 +飞机库 +飞机票 +飞架 +飞溅 +飞箭 +飞将军 +飞快 +飞来 +飞来石 +飞来峡 +飞雷炮 +飞流直下 +飞龙 +飞轮 +飞毛 +飞毛腿 +飞秒级 +飞鸟 +飞鸥 +飞跑 +飞瀑 +飞潜动植 +飞桥 +飞禽 +飞禽走兽 +飞泉 +飞人 +飞人赛 +飞入 +飞洒 +飞沙走石 +飞砂走石 +飞身 +飞升 +飞驶 +飞鼠 +飞速 +飞梭 +飞毯 +飞腾 +飞天 +飞艇 +飞往 +飞吻 +飞舞 +飞翔 +飞翔式 +飞行 +飞行部 +飞行点 +飞行量 +飞行器 +飞行区 +飞行日 +飞行史 +飞行体 +飞行员 +飞旋 +飞漩 +飞雪 +飞檐 +飞檐翘角 +飞檐走壁 +飞雁 +飞燕 +飞扬 +飞扬跋扈 +飞鹰 +飞鱼 +飞雨 +飞语 +飞跃 +飞跃性 +飞越 +飞云 +飞贼 +飞涨 +飞针走线 +飞舟 +妃子 +非 +非饱和 +非暴力 +非本土 +非标准件 +非财政 +非常 +非常规 +非常任 +非常设 +非常态 +非成员 +非成员国 +非传统 +非船 +非船舶 +非此即彼 +非单向 +非但 +非蛋白 +非当地 +非党 +非党人士 +非党员 +非导体 +非道德化 +非得 +非地震 +非对抗 +非对抗性 +非儿戏 +非法 +非法定 +非法人 +非法所得 +非凡 +非分 +非分之想 +非耕地 +非工程 +非工程性 +非工会 +非工业 +非工作 +非公经济 +非公司制 +非公务 +非公有 +非公有制 +非功利性 +非骨干 +非关键 +非关税 +非官方 +非官守 +非国大 +非国定 +非国家 +非国有化 +非国有制 +非核心 +非互惠 +非会员 +非伙伴 +非机动 +非机动车 +非集体 +非计算机 +非技术 +非加太 +非价格 +非交易所 +非焦油 +非教派 +非教师 +非接触型 +非结晶 +非结盟 +非金融 +非金属 +非进口 +非经济 +非经营性 +非警务 +非竞赛类 +非君莫属 +非均衡 +非科技 +非可溶性 +非离子氨 +非礼 +非理性 +非例行 +非良性 +非粮 +非林地 +非领导 +非驴非马 +非卖品 +非贸易 +非难 +非农 +非农产业 +非农业 +非歧视 +非歧视性 +非企业 +非亲非故 +非亲胜亲 +非情节化 +非请莫入 +非全国性 +非全日制 +非人 +非人化 +非僧非俗 +非商品 +非商业 +非上市 +非生产 +非生产性 +非生命 +非石油 +非实物 +非市场 +非试点 +非手术 +非税 +非司机 +非斯 +非诉 +非诉讼 +非提速 +非体力 +非体育 +非天然气 +非同儿戏 +非同凡响 +非同小可 +非同寻常 +非同一般 +非统 +非图书 +非徒 +非文盲率 +非武力 +非武装 +非西方 +非贤不肖 +非现金 +非线形 +非线型 +非线性 +非行 +非行政 +非行政性 +非虚构型 +非学历 +非鞅 +非样本 +非业务 +非一流 +非胰岛素 +非遗传性 +非艺术 +非议 +非意愿 +非银行 +非应试 +非盈利 +非盈利性 +非营利 +非营利性 +非油 +非源 +非战斗性 +非站牌 +非正常 +非正规 +非正式 +非正义 +非政府 +非政治性 +非织造 +非职务 +非职业 +非殖民化 +非智力 +非洲 +非洲队 +非洲狮 +非主导 +非主业 +非住宅 +非专科 +非专业 +非专职 +非自身 +非作战 +绯红 +绯色 +绯闻 +菲 +菲薄 +菲方 +菲律宾 +菲律宾队 +菲律宾裔 +菲尼克斯 +菲央行 +扉画 +扉页 +蜚声 +蜚声于世 +蜚声中外 +霏霏 +鲱鱼 +肥 +肥肠 +肥城 +肥城市 +肥床 +肥大 +肥得鲁儿 +肥地 +肥东 +肥东县 +肥度 +肥分 +肥滚滚 +肥厚 +肥乎乎 +肥佬 +肥力 +肥料 +肥麦 +肥煤 +肥美 +肥囊囊 +肥嫩 +肥牛 +肥牛场 +肥胖 +肥胖儿 +肥胖率 +肥胖型 +肥胖症 +肥缺 +肥肉 +肥实 +肥瘦 +肥瘦儿 +肥水 +肥硕 +肥桃 +肥田 +肥田草 +肥田粉 +肥头 +肥王 +肥沃 +肥西县 +肥乡县 +肥效 +肥性 +肥业 +肥育 +肥源 +肥皂 +肥皂粉 +肥猪 +肥壮 +淝河 +腓骨 +匪 +匪帮 +匪兵 +匪盗 +匪患 +匪祸 +匪军 +匪气 +匪首 +匪徒 +匪相 +匪穴 +匪夷所思 +诽谤 +诽谤罪 +悱 +斐 +斐斐 +斐济 +斐济队 +斐然 +榧子 +翡翠 +翡翠鱼 +吠 +吠形吠声 +废 +废除 +废黜 +废地 +废钢 +废钢铁 +废耕地 +废话 +废旧 +废坑塘 +废料 +废麻 +废奴令 +废票 +废品 +废品率 +废品站 +废气 +废弃 +废弃地 +废弃物 +废寝忘食 +废人 +废水 +废丝 +废塑料 +废碎料 +废铁 +废铜 +废物 +废墟 +废盐 +废液 +废油 +废元钢 +废渣 +废止 +废纸 +废纸屑 +废置 +沸 +沸点 +沸反盈天 +沸沸扬扬 +沸泉 +沸水 +沸腾 +狒狒 +肺 +肺癌 +肺病 +肺部 +肺动脉 +肺腑 +肺腑之言 +肺活量 +肺结核 +肺静脉 +肺科 +肺痨 +肺脓肿 +肺泡 +肺泡液 +肺气肿 +肺水肿 +肺心病 +肺循环 +肺炎 +肺叶 +肺鱼 +肺脏 +肺燥 +费 +费边主义 +费城 +费丹 +费恩梅 +费改税 +费工 +费工夫 +费话 +费加罗 +费解 +费尽 +费尽心机 +费尽心力 +费尽周折 +费劲 +费款 +费力 +费率 +费伦堡 +费难 +费钱 +费神 +费时 +费事 +费县 +费心 +费用 +费用率 +费用权 +费转税 +痱子 +痱子粉 +分 +分包 +分包村 +分包人 +分保 +分贝 +分崩离析 +分币 +分辨 +分辨力 +分辨率 +分辩 +分标 +分别 +分兵把口 +分布 +分布点 +分布面 +分布区 +分布式 +分布图 +分步 +分步法 +分部 +分餐制 +分册 +分层 +分叉 +分杈 +分厂 +分场 +分成 +分乘 +分处 +分寸 +分寸感 +分担 +分党委 +分党支部 +分档 +分道扬镳 +分得 +分等 +分电器 +分店 +分动箱 +分段 +分队 +分队长 +分发 +分房 +分分 +分分秒秒 +分封 +分赴 +分割 +分割感 +分割肉 +分隔 +分隔符 +分给 +分工 +分工合作 +分公司 +分骨 +分馆 +分管 +分光 +分光计 +分光镜 +分光膜 +分光仪 +分规 +分毫不差 +分号 +分红 +分洪 +分洪道 +分洪闸 +分化 +分化瓦解 +分化腺癌 +分划 +分会 +分会场 +分获 +分机 +分级 +分家 +分拣 +分拣机 +分检机 +分交 +分解 +分界 +分界线 +分斤掰两 +分进合击 +分镜头 +分久必合 +分居 +分局 +分局长 +分句 +分卷 +分开 +分科 +分库 +分类 +分类法 +分类式 +分类箱 +分类学 +分类造册 +分厘卡 +分离 +分离舱 +分离法 +分离户 +分离机 +分离式 +分离主义 +分理 +分理处 +分力 +分立 +分立式 +分量 +分量感 +分列 +分列式 +分裂 +分裂生殖 +分裂症 +分裂主义 +分流 +分流港 +分流口 +分流率 +分毛沟 +分门别类 +分米 +分米波 +分泌 +分娩 +分娩期 +分秒 +分秒必争 +分明 +分母 +分内 +分内事 +分蘖 +分派 +分配 +分配办 +分配处 +分配观 +分配量 +分配器 +分配权 +分配数 +分配型 +分批 +分片 +分期 +分期付款 +分歧 +分歧点 +分钱 +分清 +分区 +分权 +分赛场 +分赛区 +分散 +分散化 +分散型 +分散性 +分色镜 +分色片 +分设 +分社 +分身 +分身术 +分神 +分市场 +分式 +分手 +分署 +分数 +分数线 +分水岭 +分税制 +分送 +分摊 +分摊金 +分体 +分体机 +分体式 +分挑 +分庭抗礼 +分头 +分团 +分外 +分外夺目 +分外活 +分外事 +分外妖娆 +分为 +分委 +分委会 +分文 +分文不取 +分析 +分析化学 +分析会 +分析家 +分析器 +分析师 +分析图 +分析仪 +分析语 +分析员 +分系统 +分线规 +分线盒 +分享 +分项 +分销 +分销点 +分销业 +分小组 +分晓 +分校 +分心 +分行 +分行业 +分蓄洪区 +分选 +分野 +分业 +分业制 +分阴 +分印点 +分忧 +分院 +分赃 +分则 +分赠 +分站 +分站赛 +分诊 +分之 +分支 +分支部 +分支行 +分支性 +分值 +分指数 +分至点 +分治 +分中心 +分钟 +分钟时段 +分属 +分装 +分装厂 +分子 +分子病 +分子结构 +分子力 +分子量 +分子论 +分子溶液 +分子筛 +分子式 +分子学 +分总支 +分组 +分组会 +分组赛 +吩咐 +纷 +纷呈 +纷繁 +纷飞 +纷纷 +纷纷扬扬 +纷乱 +纷披 +纷起 +纷然 +纷扰 +纷扬 +纷拥 +纷纭 +纷纭斑驳 +纷纭复杂 +纷争 +纷至沓来 +芬 +芬芳 +芬芳娇艳 +芬花芳蕾 +芬兰 +芬兰队 +氛围 +酚 +酚醛 +酚醛树脂 +酚醛塑料 +酚酞 +坟 +坟场 +坟地 +坟堆 +坟墓 +坟丘 +坟山 +坟头 +坟茔 +汾河 +汾河湾 +汾酒 +汾酒厂 +汾西县 +汾阳 +汾阳路 +汾阳市 +焚 +焚膏继晷 +焚稿 +焚化 +焚毁 +焚林 +焚烧 +焚烧厂 +焚烧场 +焚烧炉 +焚书坑儒 +粉 +粉白 +粉白色 +粉笔 +粉笔盒 +粉笔字 +粉肠 +粉尘 +粉刺 +粉底 +粉蝶 +粉盒 +粉红 +粉红色 +粉乎乎 +粉糊 +粉黄 +粉灰 +粉剂 +粉领 +粉煤灰 +粉煤灰砖 +粉末 +粉末状 +粉墨登场 +粉嫩 +粉牌 +粉皮 +粉扑 +粉扑扑 +粉芡 +粉墙 +粉色 +粉沙 +粉身碎骨 +粉饰 +粉刷 +粉刷工 +粉丝 +粉碎 +粉碎车 +粉碎法 +粉碎机 +粉碎毛 +粉碎性 +粉体 +粉条 +粉细砂 +粉线 +粉针 +粉蒸肉 +粉妆女子 +粉妆玉琢 +粉状 +份 +份餐 +份餐制 +份额 +份额油 +份儿 +份儿饭 +份饭 +份量 +份子 +奋 +奋笔疾书 +奋笔直书 +奋不顾身 +奋翅展翼 +奋斗 +奋斗路 +奋斗史 +奋斗以成 +奋斗与共 +奋斗者 +奋发 +奋发进取 +奋发努力 +奋发上进 +奋发图强 +奋发向上 +奋发有为 +奋发自救 +奋飞 +奋进 +奋力 +奋起 +奋起拼搏 +奋起直追 +奋然 +奋身 +奋勇 +奋勇当先 +奋勇争先 +奋战 +奋争 +忿 +忿忿 +忿忿不平 +愤 +愤而辞职 +愤愤 +愤愤不平 +愤恨 +愤激 +愤慨 +愤闷 +愤懑 +愤怒 +愤然 +愤世嫉俗 +粪 +粪便 +粪池 +粪堆 +粪肥 +粪箕子 +粪坑 +粪筐 +粪篓 +粪土 +丰 +丰碑 +丰采 +丰产 +丰产村 +丰产沟 +丰产林 +丰产期 +丰城 +丰城市 +丰富 +丰富多采 +丰富多彩 +丰富化 +丰富性 +丰镐 +丰功 +丰功传绩 +丰功伟绩 +丰功伟业 +丰宏 +丰厚 +丰乐镇 +丰林 +丰隆 +丰满 +丰满区 +丰茂 +丰美 +丰南市 +丰南县 +丰年 +丰宁 +丰宁县 +丰沛 +丰饶 +丰稔 +丰茸 +丰润 +丰润县 +丰赡 +丰赡鲜活 +丰盛 +丰实 +丰收 +丰收年 +丰收期 +丰收乡 +丰水期 +丰顺县 +丰硕 +丰台 +丰台区 +丰台站 +丰田市 +丰县 +丰衣足食 +丰溢 +丰盈 +丰腴 +丰裕 +丰韵 +丰镇 +丰姿 +丰足 +风 +风雹 +风暴 +风暴潮 +风泵 +风痹 +风波 +风剥雨蚀 +风采 +风采录 +风餐露宿 +风残 +风操 +风铲 +风潮 +风车 +风尘 +风尘仆仆 +风成于上 +风驰电掣 +风传 +风吹草动 +风吹浪打 +风吹日晒 +风吹雨打 +风吹雨淋 +风锤 +风带 +风挡 +风灯 +风笛 +风电 +风电场 +风调雨顺 +风动工具 +风动石 +风洞 +风斗 +风度 +风度翩翩 +风儿 +风帆 +风范 +风范犹存 +风风光光 +风风火火 +风风雨雨 +风干 +风岗 +风镐 +风格 +风格各异 +风骨 +风光 +风光带 +风光片 +风光一时 +风光旖旎 +风害 +风寒 +风和日丽 +风和日暖 +风荷 +风花雪月 +风华 +风华绝代 +风华正茂 +风化 +风化砂 +风火轮 +风火墙 +风机 +风机厂 +风级 +风急浪大 +风急浪高 +风纪 +风纪扣 +风景 +风景点 +风景画 +风景林 +风景区 +风景如画 +风景树 +风景线 +风镜 +风卷残云 +风口 +风口浪尖 +风狂雨骤 +风籁 +风兰 +风浪 +风雷 +风冷 +风里来 +风力 +风凉 +风凉话 +风量 +风铃 +风流 +风流人物 +风流云散 +风流韵事 +风轮 +风帽 +风貌 +风媒花 +风靡 +风靡一时 +风磨 +风能 +风鸟 +风偏 +风平浪静 +风平乡 +风起云涌 +风气 +风气者 +风气之先 +风枪 +风琴 +风情 +风情画 +风情片 +风情万种 +风情园 +风趣 +风圈 +风骚 +风色 +风沙 +风沙区 +风扇 +风扇车 +风尚 +风尚奖 +风神 +风生 +风声 +风声鹤唳 +风湿 +风湿病 +风湿病学 +风湿类 +风蚀 +风势 +风霜 +风霜雨雪 +风水 +风水宝地 +风俗 +风俗画 +风俗人情 +风速 +风瘫 +风天 +风痛停 +风头 +风土 +风土民情 +风土人情 +风味 +风闻 +风物 +风习 +风险 +风险关 +风险金 +风险区 +风险性 +风险源 +风乡 +风箱 +风翔县 +风向 +风向标 +风啸子 +风信子 +风行 +风行草偃 +风行一时 +风雪 +风雪交加 +风雪帽 +风压 +风雅 +风烟 +风言风语 +风谣 +风衣 +风仪 +风油精 +风油量 +风雨 +风雨剥蚀 +风雨灯 +风雨兼程 +风雨交加 +风雨飘摇 +风雨凄凄 +风雨如晦 +风雨如磐 +风雨同舟 +风雨无阻 +风雨衣 +风雨与共 +风源 +风月 +风云 +风云变幻 +风云际会 +风云录 +风云人物 +风云突变 +风韵 +风韵犹存 +风灾 +风闸 +风障 +风疹 +风疹块 +风筝 +风筝会 +风筝节 +风致 +风中之烛 +风烛残年 +风姿 +风钻 +枫 +枫丹白露 +枫果 +枫林 +枫桥 +枫桥镇 +枫树 +枫叶 +封 +封浜 +封闭 +封闭疗法 +封闭墙 +封闭式 +封闭型 +封闭性 +封冰 +封禅 +封存 +封底 +封地 +封店村 +封顶 +封顶价 +封冻 +封堵 +封二 +封发 +封诰 +封关 +封官许愿 +封号 +封建 +封建把头 +封建残余 +封建割据 +封建礼教 +封建迷信 +封建社会 +封建王朝 +封建主 +封建主义 +封镜 +封口 +封里 +封路 +封门 +封面 +封泥 +封盘 +封皮 +封妻荫子 +封丘县 +封三 +封杀 +封山 +封山育林 +封四 +封锁 +封锁线 +封坛 +封套 +封条 +封湾 +封一 +封育区 +封斋 +封志 +封装 +封资修 +封阻 +疯 +疯病 +疯杈 +疯长 +疯颠颠 +疯狗 +疯话 +疯狂 +疯狂性 +疯了呱几 +疯魔 +疯牛病 +疯人 +疯人院 +疯瘫 +疯药 +疯枝 +疯子 +峰 +峰巅 +峰顶 +峰峰 +峰峰镇 +峰回路转 +峰会 +峰岭 +峰峦 +峰值 +烽火 +烽火连天 +烽火山 +烽火台 +烽燧 +烽烟 +锋 +锋利 +锋芒 +锋芒毕露 +锋芒所向 +锋刃 +锋线 +蜂 +蜂产品 +蜂巢 +蜂巢胃 +蜂巢状 +蜂房 +蜂糕 +蜂皇浆 +蜂皇精 +蜂蜡 +蜂蜜 +蜂鸟 +蜂起 +蜂群 +蜂乳 +蜂王 +蜂王浆 +蜂王精 +蜂窝 +蜂窝煤 +蜂窝煤厂 +蜂窝式 +蜂窝状 +蜂箱 +蜂拥 +蜂拥而来 +蜂拥而起 +蜂拥而上 +蜂拥而至 +冯 +冯村 +冯家镇 +冯桥乡 +冯湾村 +逢 +逢场作戏 +逢冠必夺 +逢集 +逢年过节 +逢山开路 +逢先必争 +逢凶化吉 +逢迎 +缝 +缝包 +缝补 +缝缝 +缝缝补补 +缝合 +缝纫 +缝纫店 +缝纫工 +缝纫机 +缝隙 +缝线 +缝衣针 +缝针 +缝制 +缝制者 +讽 +讽刺 +讽诵 +讽喻 +唪 +凤 +凤城 +凤城市 +凤蝶 +凤岗 +凤岗镇 +凤冠 +凤凰 +凤凰村 +凤凰岭 +凤凰岭村 +凤凰山 +凤凰县 +凤凰竹 +凤梨 +凤毛麟角 +凤辇 +凤山镇 +凤台县 +凤头 +凤尾 +凤尾鱼 +凤尾竹 +凤梧 +凤梧乡 +凤仙花 +凤翔 +凤翔县 +凤响乡 +凤眼莲 +凤阳 +凤阳县 +凤爪 +凤庄村 +奉 +奉承 +奉调 +奉告 +奉公守法 +奉化 +奉化市 +奉还 +奉节 +奉节县 +奉命 +奉命唯谨 +奉陪 +奉劝 +奉若神明 +奉送 +奉天 +奉贤县 +奉献 +奉献篇 +奉献日 +奉新 +奉行 +奉养 +奉迎 +奉赠 +俸禄 +佛 +佛得角 +佛殿 +佛法 +佛光山寺 +佛光寺 +佛国 +佛家 +佛教 +佛教会 +佛教界 +佛教史 +佛教徒 +佛节 +佛经 +佛开 +佛龛 +佛口蛇心 +佛窟 +佛拉芒 +佛拉明戈 +佛莱芒 +佛理 +佛历 +佛罗里达 +佛罗伦萨 +佛门 +佛蒙特州 +佛面 +佛山 +佛山市 +佛事 +佛释 +佛手 +佛寺 +佛塔 +佛台 +佛堂 +佛统 +佛头着粪 +佛陀 +佛湾 +佛像 +佛学 +佛学院 +佛牙 +佛爷 +佛影 +佛珠 +佛祖 +佛祖像 +缶掌 +否 +否定 +否定论 +否定者 +否极泰来 +否决 +否决率 +否决票 +否决权 +否决权制 +否认 +否则 +夫 +夫唱妇随 +夫妇 +夫贵妻荣 +夫君 +夫妻 +夫妻店 +夫妻间 +夫妻林 +夫妻情 +夫权 +夫人 +夫婿 +夫子 +夫子庙 +夫子自道 +肤 +肤泛 +肤皮潦草 +肤浅 +肤色 +肤阴洁 +麸皮 +麸子 +稃皮 +鄜县 +孵 +孵化 +孵化场 +孵化器 +孵卵 +孵卵器 +敷 +敷料 +敷料单 +敷设 +敷衍 +敷衍了事 +敷衍塞责 +敷药 +弗 +弗吉尼亚 +弗里敦 +弗里敦市 +弗纶 +弗罗阿 +弗罗阿登 +弗罗拉 +弗罗拉市 +弗罗林 +弗如 +伏 +伏安 +伏案 +伏案疾书 +伏笔 +伏辩 +伏兵 +伏尔加 +伏尔加河 +伏法 +伏跗室 +伏旱 +伏击 +伏击圈 +伏击战 +伏季 +伏流 +伏龙桥 +伏牛 +伏牛山 +伏秋 +伏狮形 +伏特 +伏特计 +伏天 +伏贴 +伏帖 +伏象 +伏休 +伏汛 +孚 +孚日山 +扶 +扶保 +扶病 +扶残 +扶残济困 +扶残解困 +扶残助残 +扶持 +扶持金 +扶风 +扶风县 +扶扶 +扶沟 +扶困 +扶老携幼 +扶老助孤 +扶犁人 +扶眉 +扶农 +扶贫 +扶贫办 +扶贫帮困 +扶贫点 +扶贫户 +扶贫济困 +扶贫款 +扶贫区 +扶贫史 +扶贫团 +扶贫网 +扶贫县 +扶贫乡 +扶贫助困 +扶贫助优 +扶贫组 +扶强 +扶桑 +扶善疾恶 +扶上马 +扶手 +扶手椅 +扶疏 +扶绥 +扶绥县 +扶梯 +扶危济困 +扶危救困 +扶危救难 +扶养 +扶摇直上 +扶优 +扶优打劣 +扶优扶强 +扶优汰劣 +扶优治劣 +扶余 +扶余县 +扶正 +扶正培本 +扶正祛邪 +扶直 +扶植 +扶志 +扶智 +扶助 +扶助会 +芙蓉 +芙蓉城 +芙蓉区 +芙蓉镇 +芾 +拂 +拂尘 +拂面 +拂逆 +拂逆众意 +拂拭 +拂晓 +拂袖而去 +拂扬 +拂衣而去 +服 +服兵役 +服从 +服毒 +服法 +服服帖帖 +服理 +服气 +服软 +服丧期 +服侍 +服饰 +服饰店 +服输 +服帖 +服务 +服务班 +服务部 +服务舱 +服务车 +服务处 +服务窗 +服务点 +服务队 +服务法 +服务费 +服务观 +服务化 +服务奖 +服务经 +服务局 +服务卡 +服务量 +服务路 +服务年 +服务牌 +服务期 +服务器 +服务区 +服务嫂 +服务商 +服务社 +服务生 +服务所 +服务台 +服务厅 +服务团 +服务网 +服务箱 +服务行 +服务行业 +服务型 +服务性 +服务业 +服务员 +服务战 +服务站 +服务者 +服务证 +服务制 +服务组 +服刑 +服刑犯 +服药 +服药者 +服役 +服役期 +服用 +服用量 +服用者 +服装 +服装部 +服装厂 +服装城 +服装店 +服装奖 +服装节 +服装界 +服装类 +服装史 +服装系 +服装业 +服装业界 +服装员 +服装展 +苻 +俘 +俘获 +俘虏 +氟 +氟骨病 +氟化氢 +氟化物 +氟里昂 +氟利昂 +氟哌酸 +氟嗪酸 +氟石 +氟橡胶 +洑家 +洑家村 +茯苓 +浮 +浮标 +浮冰 +浮财 +浮尘 +浮尘子 +浮沉 +浮沉荣枯 +浮船坞 +浮荡 +浮雕 +浮雕感 +浮雕像 +浮吊 +浮动 +浮动感 +浮动汇率 +浮动价 +浮动性 +浮动制 +浮渡河 +浮筏 +浮法 +浮泛 +浮光掠影 +浮华 +浮灰 +浮冀汾 +浮价款 +浮价烟 +浮夸 +浮夸风 +浮来山 +浮力 +浮利 +浮面 +浮名 +浮皮儿 +浮皮潦草 +浮萍 +浮签 +浮浅 +浮桥 +浮山 +浮山后 +浮山镇 +浮生 +浮石 +浮式 +浮水印 +浮思翩翩 +浮筒 +浮屠 +浮土 +浮土层 +浮物 +浮现 +浮想 +浮想联翩 +浮想翩翩 +浮悬 +浮岩 +浮艳 +浮翼 +浮游 +浮游生物 +浮云 +浮躁 +浮渣 +浮肿 +浮子 +莩 +涪 +涪城 +涪城区 +涪江 +涪陵 +涪陵市 +符 +符号 +符号串 +符号论 +符合 +符合率 +符山镇 +符咒 +符庄村 +幅 +幅度 +幅宽 +幅面 +幅员 +幅员辽阔 +福 +福安 +福安市 +福庇子孙 +福地 +福鼎市 +福尔马林 +福费庭 +福分 +福冈 +福冈市 +福海 +福海县 +福华路 +福祸 +福建 +福建籍 +福建省 +福建厅 +福建团 +福将 +福井县 +福居 +福橘 +福坑口村 +福利 +福利部 +福利法 +福利会 +福利楼 +福利型 +福利性 +福利业 +福利院 +福利制 +福气 +福清 +福清市 +福全镇 +福泉 +福人 +福如东海 +福塞特 +福山路 +福山区 +福寿 +福绥境 +福塔莱萨 +福特车 +福田 +福田区 +福田乡 +福相 +福兴寺 +福星 +福荫 +福音 +福音书 +福祉 +福至心灵 +福州 +福州籍 +福州路 +福州市 +福州市人 +福州戏 +蜉蝣 +辐 +辐射 +辐射点 +辐射计 +辐射力 +辐射量 +辐射面 +辐射能 +辐射区 +辐射式 +辐射型 +辐射性 +辐射仪 +辐射源 +辐条 +辐照 +抚 +抚爱 +抚躬自问 +抚孤 +抚河 +抚今忆昔 +抚今追昔 +抚摸 +抚平 +抚顺 +抚顺市 +抚慰 +抚恤 +抚恤金 +抚养 +抚养费 +抚养权 +抚育 +抚熨 +抚州 +甫 +甫入 +府 +府办 +府城 +府城镇 +府绸 +府邸 +府第 +府发 +府函 +府令 +府芒市 +府南 +府南河 +府南河畔 +府前路 +府上 +府厅发 +府尹 +府治 +斧 +斧头 +斧凿声 +斧子 +俯 +俯冲 +俯伏 +俯角 +俯瞰 +俯身 +俯拾即是 +俯拾皆是 +俯视 +俯视式 +俯视图 +俯首 +俯首称臣 +俯首帖耳 +俯望 +俯卧 +俯卧撑 +俯仰 +俯仰由人 +俯仰之间 +俯仰自如 +俯贻 +釜 +釜底抽薪 +釜底游鱼 +釜山 +脯 +脯子 +辅 +辅币 +辅导 +辅导班 +辅导费 +辅导书 +辅导性 +辅导员 +辅导站 +辅道 +辅洞 +辅读班 +辅轨 +辅机 +辅具 +辅料 +辅料展 +辅路 +辅线 +辅修 +辅业 +辅以 +辅音 +辅助 +辅助货币 +辅助品 +辅助性 +辅佐 +滏临庄 +腐 +腐败 +腐败风 +腐败论 +腐臭 +腐恶 +腐干 +腐化 +腐坏 +腐烂 +腐烂河 +腐乳 +腐蚀 +腐蚀剂 +腐蚀力 +腐蚀性 +腐朽 +腐朽性 +腐植酸 +腐殖质 +腐竹 +父 +父爱 +父辈 +父本 +父老 +父老乡亲 +父老兄弟 +父母 +父母官 +父母官儿 +父母亲 +父女 +父亲 +父权 +父权制 +父系 +父兄 +父执 +父志 +父子 +讣告 +讣闻 +付 +付酬 +付出 +付店乡 +付方 +付费 +付给 +付汇联 +付家坪 +付家寨镇 +付款 +付款部 +付讫 +付钱 +付清 +付息 +付印 +付与 +付账 +付之东流 +付之一炬 +付之一笑 +付诸 +付诸东流 +付诸实践 +付诸实施 +付梓 +妇 +妇保 +妇产科 +妇唱夫随 +妇代会 +妇道 +妇道人家 +妇弟 +妇儿 +妇工委 +妇教所 +妇科 +妇科病 +妇联 +妇女 +妇女病 +妇女部 +妇女部长 +妇女观 +妇女节 +妇女界 +妇女学 +妇人 +妇孺 +妇孺皆晓 +妇孺皆知 +妇委 +妇委会 +妇协 +妇婴 +妇幼 +妇运 +负 +负担 +负担卡 +负担率 +负电 +负电荷 +负队 +负分 +负号 +负荷 +负荷率 +负极 +负笈 +负笈归来 +负荆请罪 +负离子 +负面 +负片 +负气 +负伤 +负数 +负翁 +负效应 +负心人 +负氧离子 +负有 +负于 +负隅顽抗 +负约 +负载 +负责 +负责人 +负责者 +负责制 +负债 +负债表 +负债村 +负债额 +负债感 +负债国 +负债累累 +负债率 +负债人 +负债者 +负者 +负值 +负重 +负罪 +负罪感 +附 +附本 +附笔 +附表 +附城镇 +附带 +附耳 +附和 +附会 +附记 +附加 +附加费 +附加税 +附加刑 +附加值 +附件 +附近 +附具 +附聚 +附丽 +附梁 +附料 +附录 +附配件 +附上 +附设 +附识 +附体 +附图 +附息 +附小 +附信 +附言 +附印 +附营 +附庸 +附庸风雅 +附有 +附院 +附则 +附赠物 +附中 +附中队 +附属 +附属国 +附属物 +附注 +附着 +附着力 +附着物 +阜成门 +阜城 +阜城县 +阜康 +阜康市 +阜南县 +阜宁 +阜宁县 +阜平 +阜平县 +阜新 +阜新市 +阜阳 +阜阳市 +驸马 +驸马巷 +复 +复摆 +复瓣 +复本 +复比 +复辟 +复查 +复查组 +复仇 +复仇者 +复出 +复旦 +复调 +复读 +复发 +复返 +复方 +复辅音 +复根 +复耕 +复工 +复古 +复馆 +复归 +复国主义 +复函 +复合 +复合板 +复合材料 +复合词 +复合肥 +复合肥料 +复合管 +复合量词 +复合门 +复合驱油 +复合式 +复合型 +复合性 +复合元音 +复核 +复会 +复婚 +复活 +复活节 +复活节岛 +复活日 +复机 +复检 +复建 +复交 +复旧 +复句 +复刊 +复课 +复垦 +复垦费 +复垦区 +复矿 +复来 +复利 +复利率 +复隆镇 +复盲 +复萌 +复名数 +复明 +复排 +复派 +复评 +复起 +复赛 +复色光 +复审 +复升 +复生 +复式 +复试 +复述 +复数 +复苏 +复苏术 +复谈 +复位 +复文 +复吸率 +复习 +复习题 +复现 +复线 +复线率 +复写 +复写纸 +复新剂 +复信 +复兴 +复兴村 +复兴党 +复兴路 +复兴门 +复兴门外 +复兴门站 +复兴区 +复姓 +复修 +复学 +复训 +复盐 +复眼 +复验 +复业 +复叶 +复议 +复音 +复音词 +复印 +复印费 +复印机 +复印机厂 +复印件 +复印社 +复印员 +复印纸 +复元膏 +复员 +复员兵 +复员费 +复员军人 +复员退伍 +复员证 +复原 +复杂 +复杂化 +复杂性 +复诊 +复职 +复制 +复制件 +复制品 +复种 +复种指数 +复转 +复壮 +赴 +赴会 +赴任 +赴死 +赴汤蹈火 +赴宴 +赴约 +副 +副本 +副本费 +副标题 +副博士 +副产品 +副厂级 +副处 +副处级 +副词 +副高 +副攻 +副官 +副将 +副教授 +副局级 +副刊 +副科 +副科级 +副品 +副伤寒 +副神经 +副肾 +副食 +副食店 +副食品 +副手 +副题 +副厅级 +副团职 +副县级 +副线圈 +副项 +副性征 +副业 +副翼 +副职 +副总 +副作用 +傅 +傅村 +傅村镇 +富 +富川 +富春江 +富存区 +富港 +富港村 +富贵 +富贵病 +富贵浮云 +富贵竹 +富国 +富国墩 +富国强兵 +富国兴邦 +富含 +富含氢 +富豪 +富户 +富集 +富集点 +富集区 +富家 +富家区 +富甲 +富贾 +富锦市 +富矿 +富拉尔基 +富莱堡 +富丽 +富丽堂皇 +富岭村 +富民 +富民路 +富民政策 +富宁 +富宁县 +富农 +富婆 +富强 +富饶 +富人 +富山市 +富山乡 +富商 +富士 +富士山 +富士通 +富庶 +富庶乡 +富水街村 +富水镇 +富态 +富塘村 +富翁 +富县 +富阳 +富阳市 +富营养化 +富有 +富有者 +富于 +富余 +富余票 +富裕 +富裕兵 +富裕村 +富裕户 +富裕型 +富裕中农 +富源 +富源县 +富者 +富足 +赋 +赋彩 +赋存 +赋格 +赋青镇 +赋诗 +赋税 +赋闲 +赋性 +赋役 +赋有 +赋予 +缚 +腹 +腹背受敌 +腹壁 +腹部 +腹地 +腹稿 +腹沟 +腹股沟 +腹毛 +腹面 +腹膜 +腹内 +腹评 +腹鳍 +腹腔 +腹水 +腹痛 +腹泻 +腹心 +腹心区 +腹胀 +腹中 +腹足类 +赙 +蝮蛇 +覆 +覆盖 +覆盖度 +覆盖率 +覆盖面 +覆盖物 +覆没 +覆灭 +覆膜 +覆膜机 +覆盆之冤 +覆辙 +馥 +馥郁 +旮旯 +伽利略 +伽马射线 +伽马仪 +伽师 +伽师县 +嘎 +嘎查 +嘎昌河 +嘎登 +嘎嘎 +嘎那 +嘎秧舞 +噶尔丹 +噶伦 +噶厦 +尕斯库勒 +该 +该案 +该邦 +该报 +该病 +该部 +该厂 +该场 +该车 +该城 +该处 +该村 +该当何论 +该党 +该岛 +该地 +该店 +该段 +该队 +该法 +该房 +该峰 +该港 +该关 +该馆 +该柜 +该国 +该户 +该会 +该机 +该奖 +该局 +该剧 +该卡 +该刊 +该款 +该矿 +该类 +该连 +该楼 +该路 +该片 +该桥 +该区 +该日 +该社 +该省 +该市 +该书 +该死 +该寺 +该所 +该台 +该团 +该系 +该县 +该乡 +该项 +该校 +该行 +该药 +该院 +该站 +该镇 +该州 +该组 +该罪 +赅 +改 +改版 +改扮 +改编 +改编权 +改编者 +改变 +改厕 +改朝换代 +改称 +改乘 +改错 +改道 +改掉 +改订 +改动 +改恶从善 +改改 +改稿 +改革 +改革法 +改革观 +改革家 +改革面 +改革派 +改革史 +改革战 +改革者 +改观 +改过 +改过迁善 +改过自新 +改好率 +改换 +改换门庭 +改悔 +改嫁 +改建 +改进 +改进剂 +改进型 +改旧 +改口 +改扩 +改扩建 +改良 +改良党 +改良费 +改良派 +改良羊 +改良种 +改良主义 +改名 +改名换姓 +改判 +改频 +改频点 +改期 +改任 +改日 +改善 +改天 +改天换地 +改头换面 +改土 +改弦更张 +改弦易辙 +改邪归正 +改写 +改行 +改型 +改性 +改选 +改用 +改由 +改造 +改造权 +改则 +改正 +改制 +改制面 +改种 +改装 +改装厂 +改锥 +改组 +改嘴 +改作 +丐帮 +钙 +钙华池 +钙化 +钙剂 +钙维片 +钙质 +盖 +盖板 +盖菜 +盖城 +盖茨堡镇 +盖度 +盖饭 +盖房 +盖棺论定 +盖家峪村 +盖浇饭 +盖里 +盖帘 +盖帽 +盖帽王 +盖然性 +盖世 +盖世太保 +盖世无双 +盖柿 +盖头 +盖碗茶 +盖有 +盖章 +盖章人 +盖州 +盖州市 +盖子 +溉 +概 +概不负责 +概而言之 +概观 +概况 +概括 +概括性 +概览 +概览表 +概率 +概率论 +概略 +概论 +概貌 +概莫能外 +概念 +概念比 +概念股 +概念化 +概念性 +概述 +概数 +概说 +概算 +概言之 +概要 +概预算 +干 +干巴 +干巴巴 +干爸 +干白 +干梆梆 +干杯 +干贝 +干瘪 +干瘪瘪 +干冰 +干部 +干部部 +干部处 +干部会 +干部科 +干部司 +干部团 +干才 +干菜 +干草 +干草垛 +干柴 +干脆 +干脆利落 +干打垒 +干丹省 +干道 +干道口 +干道路 +干瞪眼 +干堤 +干电池 +干掉 +干儿子 +干法 +干饭 +干肥 +干粉 +干干净净 +干戈 +干戈扰攘 +干戈四起 +干管 +干国之器 +干果 +干旱 +干旱区 +干河坝村 +干涸 +干红 +干红酒 +干活 +干活儿 +干货 +干极 +干涧 +干涧村 +干将 +干结 +干结核量 +干劲 +干劲冲天 +干警 +干净 +干净利落 +干靠 +干咳 +干渴 +干枯 +干酪 +干酪素 +干冷 +干练 +干粮 +干粮袋 +干裂 +干流 +干路 +干妈 +干吗 +干馕 +干娘 +干亲 +干渠 +干群 +干扰 +干扰素 +干扰源 +干扰者 +干热 +干热风 +干涩 +干涉 +干涉现象 +干涉性 +干涉仪 +干审 +干审处 +干湿 +干什么 +干事 +干事长 +干事会 +干瘦 +干头 +干熄焦 +干洗 +干系 +干细胞 +干鲜果 +干鲜果品 +干线 +干线网 +干校 +干笑 +干薪 +干性油 +干休 +干休所 +干血浆 +干眼 +干眼症 +干椰枣 +干爷娘 +干预 +干预性 +干云蔽日 +干燥 +干燥化 +干燥箱 +干支 +干支沟 +干枝 +干着急 +甘 +甘巴拉 +甘拜下风 +甘草 +甘草店乡 +甘草榄 +甘城 +甘丹寺 +甘当 +甘汞 +甘化 +甘蕉 +甘井子 +甘井子区 +甘居中游 +甘苦 +甘苦与共 +甘蓝 +甘蓝型 +甘洌 +甘霖 +甘露 +甘露园 +甘洛 +甘洛乡 +甘美 +甘耐 +甘南藏区 +甘柒乡 +甘泉 +甘石桥 +甘石桥站 +甘薯 +甘肃 +甘肃队 +甘肃籍 +甘肃省 +甘肃团 +甘棠镇 +甘桃片 +甘甜 +甘心 +甘心情愿 +甘休 +甘怡 +甘油 +甘于 +甘雨 +甘愿 +甘蔗 +甘蔗林 +甘蔗园 +甘蔗渣 +甘之如饴 +甘孜 +甘孜州 +甘紫菜 +杆 +杆秤 +杆儿 +杆菌 +杆塔 +杆子 +肝 +肝癌 +肝病 +肝部 +肝肠寸断 +肝胆 +肝胆相照 +肝胆照人 +肝儿 +肝风 +肝功能 +肝火 +肝脑涂地 +肝气 +肝素 +肝条 +肝吸虫 +肝炎 +肝炎病 +肝硬变 +肝硬化 +肝郁 +肝脏 +肝蛭 +坩埚 +泔水 +泔水缸 +泔水桶 +柑 +柑桔 +柑桔园 +柑橘 +柑子 +竿 +竿子 +疳疮 +尴尬 +秆 +秆儿 +秆子 +赶 +赶奔 +赶场 +赶超 +赶潮流 +赶车 +赶到 +赶赴 +赶赶 +赶工 +赶海 +赶回 +赶集 +赶集会 +赶集日 +赶紧 +赶尽杀绝 +赶考 +赶快 +赶来 +赶浪头 +赶路 +赶忙 +赶排 +赶跑 +赶巧 +赶上 +赶时髦 +赶趟 +赶往 +赶下台 +赶早 +赶制 +赶锥 +赶走 +敢 +敢当 +敢情 +敢死队 +敢为人先 +敢于 +敢作敢为 +敢做敢为 +感 +感触 +感到 +感动 +感恩 +感恩戴德 +感恩图报 +感奋 +感观 +感官 +感光 +感光片 +感光纸 +感化 +感怀 +感激 +感激不尽 +感觉 +感觉器官 +感觉神经 +感慨 +感慨不已 +感慨万端 +感慨万分 +感慨万千 +感慨系之 +感冒 +感冒片 +感冒药 +感念 +感佩 +感情 +感情式 +感情用事 +感染 +感染力 +感染率 +感染性 +感染者 +感染症 +感人 +感人肺腑 +感人心者 +感人至深 +感伤 +感生电流 +感受 +感受力 +感受器 +感说 +感叹 +感叹词 +感叹号 +感叹句 +感天动地 +感同身受 +感闻 +感悟 +感想 +感谢 +感谢辞 +感谢电 +感谢饭 +感谢信 +感谢状 +感兴趣者 +感性 +感性化 +感性认识 +感言 +感仰 +感应 +感应电流 +感应圈 +感咏 +感遇之恩 +感召 +感召力 +感知 +橄榄 +橄榄绿 +橄榄绿色 +橄榄球 +橄榄球队 +橄榄球界 +橄榄球赛 +橄榄石 +橄榄型 +橄榄油 +橄榄枝 +擀 +擀面杖 +擀杖 +擀制 +矸石 +赣 +赣北 +赣东 +赣鄂皖 +赣江 +赣剧 +赣南 +赣西 +赣西南 +赣县 +赣榆县 +赣中南 +赣州 +赣州市 +冈 +冈比亚 +冈比亚河 +冈陵 +冈峦 +冈崎 +冈山 +冈山县 +冈上 +刚 +刚愎 +刚愎自用 +刚才 +刚察县 +刚度 +刚方 +刚刚 +刚构 +刚构桥 +刚果 +刚果队 +刚好 +刚健 +刚劲 +刚烈 +刚强 +刚巧 +刚柔并济 +刚柔相济 +刚石 +刚体 +刚性 +刚毅 +刚硬 +刚玉 +刚正 +刚正不阿 +刚直 +刚直不阿 +岗 +岗底村 +岗地 +岗点 +岗警 +岗楼 +岗美镇 +岗南 +岗南乡 +岗南镇 +岗旁 +岗前 +岗区 +岗上 +岗哨 +岗台 +岗亭 +岗头 +岗头镇 +岗位 +岗位数 +岗位制 +岗薪 +岗镇 +岗子 +岗组 +纲 +纲常 +纲纪 +纲举目张 +纲领 +纲领性 +纲目 +纲要 +肛肠科 +肛道 +肛管 +肛门 +缸 +缸房 +缸盖 +缸缸坛坛 +缸管 +缸口 +缸盆 +缸体 +缸瓦 +缸砖 +缸子 +钢 +钢板 +钢包 +钢笔 +钢笔尖 +钢笔套 +钢笔字 +钢材 +钢材厂 +钢厂 +钢城 +钢尺 +钢窗 +钢刀 +钢垫 +钢锭 +钢都 +钢骨 +钢骨架 +钢骨水泥 +钢管 +钢管厂 +钢轨 +钢花 +钢花呢 +钢化玻璃 +钢架 +钢绞线 +钢筋 +钢筋网 +钢精 +钢锯 +钢盔 +钢缆 +钢帘线 +钢梁 +钢门 +钢木 +钢坯 +钢瓶 +钢瓶厂 +钢钎 +钢钳 +钢枪 +钢琴 +钢琴厂 +钢琴家 +钢琴曲 +钢球 +钢人 +钢砂 +钢水 +钢丝 +钢丝床 +钢丝锯 +钢丝绳 +钢索 +钢塔 +钢条 +钢铁 +钢铁长城 +钢铁厂 +钢铁量 +钢铁业 +钢筒 +钢芯 +钢性 +钢研 +钢研所 +钢印 +钢渣 +钢栅 +钢针 +钢支柱 +钢纸 +钢制 +钢质 +钢种 +钢珠 +港 +港澳 +港澳办 +港澳台 +港澳台侨 +港胞 +港北区 +港币 +港汊 +港城 +港城镇 +港岛 +港堤 +港督 +港方 +港府 +港股 +港航 +港机 +港监局 +港九 +港客 +港口 +港口法 +港口区 +港口型 +港口镇 +港情 +港区 +港人 +港人制港 +港人治港 +港森牌 +港商 +港上镇 +港台 +港湾 +港湾式 +港务 +港务局 +港戊己 +港西港池 +港下镇 +港协 +港墟沟 +港元 +港资 +杠 +杠杆 +杠杠 +杠铃 +杠子 +戆 +戆直 +羔 +羔羊 +羔羊皮 +羔子 +高 +高矮 +高昂 +高傲 +高保真 +高堡乡 +高碑店 +高碑店市 +高背椅 +高倍 +高鼻深目 +高鼻子 +高比 +高比例 +高标 +高不可攀 +高才高学 +高才生 +高材生 +高参 +高层 +高差叠落 +高产 +高产点 +高产年 +高产田 +高昌 +高唱 +高超 +高潮 +高潮迭起 +高潮期 +高潮线 +高城 +高城镇 +高程 +高出一筹 +高处 +高矗 +高次方程 +高村乡 +高达 +高打 +高大 +高蛋白 +高档 +高档化 +高蹈派 +高等 +高等级 +高等教育 +高等学校 +高等院校 +高低 +高低杠 +高低型 +高低压 +高地 +高弟 +高点 +高调 +高都 +高都镇 +高度 +高度层 +高度化 +高度计 +高度酒 +高墩台 +高额 +高尔夫 +高尔夫球 +高尔基路 +高尔基市 +高尔克 +高二 +高发 +高发区 +高法 +高钒铁 +高分 +高分低能 +高分子 +高风亮节 +高风险 +高峰 +高峰村 +高峰会 +高峰期 +高峰乡 +高干 +高杆 +高感 +高感光度 +高高 +高高大大 +高高的 +高高地 +高高挂起 +高高兴兴 +高高在上 +高高壮壮 +高歌 +高歌猛进 +高个 +高个儿 +高个子 +高跟儿鞋 +高跟鞋 +高工 +高估 +高古曼妙 +高官 +高官贵爵 +高官厚禄 +高贵 +高寒 +高寒区 +高喊 +高耗能 +高红 +高红村 +高呼 +高胡 +高花乡 +高活性 +高级 +高级化 +高级品 +高级社 +高级神经 +高级小学 +高级中学 +高技术 +高技术化 +高技术司 +高加索 +高家湾 +高价 +高价票 +高价生 +高架 +高架道路 +高架路 +高架桥 +高检 +高检院 +高见 +高涧 +高脚杯 +高脚楼 +高脚屋 +高教 +高教部 +高教法 +高教委 +高洁 +高精尖 +高居 +高举 +高句丽 +高聚物 +高峻 +高亢 +高抗 +高考 +高科 +高科技化 +高坑田 +高空 +高空槽 +高空作业 +高栏 +高黎贡 +高黎贡山 +高丽 +高丽参 +高丽纸 +高利 +高利贷 +高利贷式 +高利贷者 +高梁 +高梁米 +高梁面 +高粱 +高粱酒 +高粱米 +高林村镇 +高岭土 +高陵 +高陵深谷 +高陵县 +高龄 +高龄者 +高领 +高六房 +高楼 +高楼大厦 +高炉 +高论 +高迈 +高帽 +高帽儿 +高帽子 +高锰酸钾 +高锰酸盐 +高密 +高密市 +高密镇 +高棉 +高渺 +高妙 +高庙 +高庙村 +高明 +高明市 +高难 +高能 +高能低就 +高能耗 +高能所 +高能物理 +高年级 +高浓度 +高攀 +高炮 +高炮旅 +高炮团 +高朋满座 +高频 +高频电波 +高品位 +高平 +高平市 +高坪 +高坪区 +高坡 +高气压区 +高腔 +高强 +高墙 +高跷 +高乔 +高桥 +高桥堰村 +高桥镇 +高青县 +高热 +高人 +高人一筹 +高人一等 +高三 +高僧 +高山 +高山病 +高山反应 +高山湖 +高山流水 +高山铺 +高山榕 +高山仰止 +高山族 +高尚 +高烧 +高射 +高射炮 +高深 +高深莫测 +高升 +高升村 +高升镇 +高声 +高湿 +高士 +高视阔步 +高收入者 +高手 +高寿 +高硕 +高耸 +高耸入云 +高素质 +高速 +高速档 +高速公路 +高速路 +高塔 +高台 +高台县 +高抬贵手 +高钛型 +高谈阔论 +高碳钢 +高汤 +高唐 +高唐县 +高堂 +高堂邃宇 +高塘 +高天行云 +高田 +高田乡 +高挑 +高迢险峻 +高筒 +高头大马 +高头讲章 +高徒 +高坨 +高危 +高维 +高纬度 +高位 +高位池 +高温 +高温带 +高温多雨 +高温假 +高温区 +高温作业 +高屋建瓴 +高息 +高息揽存 +高溪村 +高下 +高小 +高小生 +高效 +高效化 +高效率 +高效益 +高校 +高新 +高新产品 +高新产业 +高新技术 +高新科技 +高新区 +高薪 +高兴 +高兴处 +高兴劲 +高性能 +高雄 +高雄市 +高悬 +高血糖 +高血压 +高血脂 +高压 +高压包 +高压电 +高压服 +高压柜 +高压锅 +高压脊 +高压界 +高压区 +高压线 +高压氧 +高雅 +高扬 +高阳 +高阳县 +高氧水 +高要 +高要市 +高一 +高邑 +高邑县 +高音 +高音区 +高银巷 +高邮 +高邮市 +高于 +高逾 +高原 +高塬 +高远 +高院 +高云 +高运价率 +高增值 +高瞻远瞩 +高涨 +高招 +高照 +高者 +高枕而卧 +高枕无忧 +高支 +高支纱 +高知 +高职 +高质 +高中 +高中版 +高中部 +高中层 +高中档 +高中低档 +高中级 +高中生 +高中收入 +高中组 +高州 +高专 +高奏 +高足 +高祖 +高祖母 +睾丸 +膏 +膏剂 +膏粱 +膏粱子弟 +膏血 +膏药 +膏药旗 +膏腴之地 +膏状 +篙 +篙头 +糕 +糕饼 +糕点 +糕干 +搞 +搞法 +搞搞 +搞关系 +搞鬼 +搞好 +搞活 +搞垮 +搞清 +搞头 +搞笑 +缟素 +稿 +稿本 +稿酬 +稿费 +稿件 +稿约 +稿纸 +稿子 +镐 +镐头 +藁城市 +告 +告白 +告别 +告别室 +告别厅 +告别游 +告吹 +告辞 +告发 +告负 +告急 +告假 +告捷 +告诫 +告警 +告竣 +告老还乡 +告密 +告破 +告罄 +告缺 +告饶 +告申庭 +告示 +告示牌 +告诉 +告特 +告特叶 +告退 +告慰 +告一段落 +告知 +告终 +告状 +告状信 +诰命 +锆包壳 +戈 +戈比 +戈壁 +戈壁石 +戈壁滩 +戈登堂 +戈家沟村 +戈兰 +戈兰区 +戈矛 +戈梅里 +戈阳县 +圪节 +圪塔 +圪塔村 +圪台 +圪台子 +疙瘩 +疙瘩腔 +疙疙瘩瘩 +哥 +哥白尼 +哥本哈根 +哥德堡 +哥德堡市 +哥德兰岛 +哥儿 +哥儿们 +哥哥 +哥老会 +哥俩 +哥伦比亚 +哥伦布 +哥伦布市 +哥伦布斯 +哥们 +哥们儿 +哥萨克人 +哥特 +哥特式 +胳臂 +胳膊 +胳膊腕子 +胳膊肘 +胳膊肘儿 +胳膊肘子 +胳肢 +胳肢窝 +胳肢窝儿 +鸽 +鸽场 +鸽笼 +鸽群 +鸽食 +鸽市 +鸽镇 +鸽子 +鸽子花 +鸽子笼 +割 +割爱 +割草机 +割除 +割刀 +割地 +割断 +割接法 +割据 +割离 +割裂 +割麦 +割让 +割晒机 +割伤 +割舍 +割线 +搁 +搁浅 +搁置 +搁置不前 +歌 +歌本 +歌唱 +歌唱家 +歌唱性 +歌词 +歌鸫 +歌儿 +歌赋 +歌功颂德 +歌海 +歌喉 +歌会 +歌魂 +歌剧 +歌剧本 +歌剧界 +歌剧式 +歌剧团 +歌剧系 +歌剧院 +歌诀 +歌乐山 +歌乐舞 +歌路 +歌迷 +歌名 +歌谱 +歌曲 +歌曲集 +歌曲奖 +歌人 +歌山镇 +歌声 +歌手 +歌似潮 +歌颂 +歌坛 +歌厅 +歌王 +歌舞 +歌舞伎 +歌舞剧 +歌舞升平 +歌舞厅 +歌舞团 +歌星 +歌行 +歌宴 +歌谣 +歌以咏志 +歌艺 +歌吟 +歌咏 +歌咏队 +歌赞 +歌者 +歌仔戏 +歌子 +阁 +阁藏 +阁僚 +阁楼 +阁下 +阁员 +阁栅 +革 +革除 +革大 +革故鼎新 +革吉县 +革命 +革命党 +革命化 +革命家 +革命军 +革命派 +革命情 +革命史 +革命性 +革命者 +革囊 +革委会 +革新 +革新家 +革新里 +革新迷 +革新派 +革职 +格 +格但斯克 +格登 +格登碑 +格登山 +格调 +格斗 +格斗术 +格恩济岛 +格尔木 +格方 +格格 +格格不入 +格局 +格拉茨 +格拉茨市 +格拉夫屋 +格拉玛 +格拉斯哥 +格老村 +格雷罗州 +格里芬湖 +格林尼治 +格林威治 +格陵兰 +格陵兰岛 +格鲁吉亚 +格鲁派 +格律 +格律体 +格罗宁根 +格罗兹尼 +格木 +格穆苏村 +格日寺 +格杀勿论 +格式 +格式化 +格套 +格外 +格外村 +格威特杯 +格位 +格西 +格学 +格言 +格言式 +格致诚正 +格子 +鬲 +葛 +葛布 +葛村 +葛店 +葛洪岩 +葛巾羽扇 +葛藤 +葛武镇 +葛仙米 +葛营 +葛镇 +葛洲坝 +蛤 +蛤蚧 +蛤蜊 +蛤蟆 +蛤蟆街 +蛤蟆镜 +蛤蟆泉村 +隔 +隔岸观火 +隔板 +隔壁 +隔断 +隔海相望 +隔河岩 +隔阂 +隔间 +隔绝 +隔开 +隔离 +隔离带 +隔离道 +隔离栏 +隔离区 +隔离线 +隔膜 +隔膜感 +隔墙 +隔墙有耳 +隔热 +隔热性 +隔日 +隔三差五 +隔扇 +隔世 +隔雾看花 +隔靴搔痒 +隔夜 +隔音 +隔音板 +隔音符号 +隔音墙 +隔音纸 +隔阻 +嗝儿 +镉 +个 +个案 +个别 +个别差异 +个别化 +个别生 +个贷 +个顶个 +个儿 +个个 +个股 +个旧 +个旧市 +个量 +个人 +个人崇拜 +个人股 +个人化 +个人奖 +个人赛 +个人所 +个人所有 +个人性 +个人展 +个人主义 +个数 +个私 +个体 +个体户 +个体经济 +个体性 +个体主义 +个头 +个头儿 +个位 +个位数 +个协 +个性 +个性化 +个展 +个中 +个子 +各 +各奔东西 +各奔前程 +各别 +各部 +各持己见 +各处 +各村 +各党 +各得其所 +各地 +各队 +各方 +各负其责 +各个 +各个击破 +各国 +各户 +各级 +各家 +各家各户 +各界 +各尽其责 +各尽所长 +各尽所能 +各就各位 +各具特色 +各卷 +各科 +各口村 +各类 +各路 +各谋其政 +各派 +各区 +各取所需 +各人 +各色 +各色各样 +各色人等 +各省 +各市 +各式 +各式各样 +各抒己见 +各税 +各司其职 +各条 +各位 +各显其能 +各显身手 +各显神通 +各县 +各向同性 +各向异性 +各项 +各校 +各行 +各行各业 +各行其道 +各行其事 +各行其是 +各样 +各业 +各异 +各有千秋 +各有所爱 +各有所长 +各有所持 +各有所好 +各有所求 +各有所识 +各展所长 +各执一词 +各执一端 +各种 +各种各样 +各州 +各洲 +各自 +各自为战 +各自为政 +各族 +各组 +铬 +铬钢 +铬矿砂 +铬镍钢 +铬铁 +铬铁矿 +给 +给定 +给付 +给付金 +给惠国 +给面子 +给排水 +给水 +给水团 +给养 +给以 +给予 +给与 +根 +根本 +根本点 +根本法 +根本性 +根部 +根除 +根德拉 +根底 +根雕 +根雕家 +根堆群培 +根儿 +根腐病 +根根 +根冠 +根号 +根基 +根脚 +根杰 +根茎 +根据 +根据地 +根绝 +根量 +根瘤 +根瘤菌 +根毛 +根苗 +根目录 +根深蒂固 +根深叶茂 +根式 +根特市 +根系 +根形 +根须 +根芽 +根艺 +根由 +根源 +根植 +根指数 +根治 +根治性 +根子 +跟 +跟班 +跟斗 +跟风 +跟脚 +跟进 +跟前 +跟手 +跟随 +跟随者 +跟趟儿 +跟头 +跟着 +跟踪 +跟踪单 +跟踪式 +哏 +亘 +亘古 +亘古未有 +更 +更迭 +更动 +更夫 +更改 +更高一筹 +更鼓 +更何况 +更换 +更加 +更戛乡 +更进一步 +更具 +更名 +更年期 +更仆难数 +更其 +更上层楼 +更生 +更生霉素 +更胜一筹 +更替 +更为 +更弦易辙 +更新 +更新换代 +更型换代 +更衣 +更衣室 +更有甚者 +更正 +庚臣 +庚申 +庚午 +庚寅年 +庚子 +耕 +耕层 +耕地 +耕地量 +耕地者 +耕翻 +耕具 +耕牛 +耕田 +耕畜 +耕耘 +耕耘者 +耕者 +耕种 +耕种人 +耕作 +耕作层 +羹 +羹材 +羹匙 +哽咽 +埂 +埂子 +耿北村 +耿饼 +耿耿 +耿耿不忘 +耿耿于怀 +耿介 +耿介拔俗 +耿镇 +耿直 +耿庄镇 +梗 +梗概 +梗塞 +梗直 +梗阻 +鲠直 +工 +工班 +工办 +工本 +工本费 +工笔 +工笔画 +工兵 +工兵连 +工兵农 +工兵团 +工部局 +工长 +工厂 +工厂化 +工场 +工潮 +工程 +工程兵 +工程部 +工程车 +工程处 +工程队 +工程浩大 +工程化 +工程奖 +工程界 +工程局 +工程科 +工程款 +工程量 +工程师 +工程师室 +工程室 +工程署 +工程团 +工程系 +工程性 +工程学 +工程业 +工程院 +工尺 +工大 +工党 +工地 +工点 +工读生 +工段 +工段长 +工法 +工房 +工分 +工蜂 +工夫 +工副业 +工工整整 +工号 +工号牌 +工会 +工会法 +工会界 +工价 +工架 +工间操 +工件 +工匠 +工交 +工交司 +工缴费 +工具 +工具厂 +工具车 +工具钢 +工具书 +工具箱 +工楷 +工科 +工控机 +工况法 +工矿 +工矿企业 +工矿区 +工矿业 +工力 +工力悉敌 +工丽 +工联 +工联会 +工联主义 +工料 +工龄 +工贸 +工贸部 +工农 +工农兵 +工农差别 +工农党 +工农分子 +工农红军 +工农联盟 +工农贸 +工农业 +工棚 +工期 +工企 +工钱 +工巧 +工勤 +工青妇 +工区 +工人 +工人党 +工人贵族 +工人阶级 +工人运动 +工日 +工伤 +工商 +工商部 +工商费 +工商户 +工商会 +工商界 +工商局 +工商联 +工商税 +工商司 +工商所 +工商行 +工商型 +工商业 +工商业部 +工商业户 +工商业者 +工社党 +工时 +工时费 +工事 +工体 +工头 +工头制 +工团主义 +工亡 +工委 +工委会 +工委纪委 +工位 +工稳 +工务 +工务段 +工务科 +工细 +工效 +工校 +工薪 +工薪层 +工薪阶层 +工薪族 +工行 +工休日 +工序 +工学 +工学院 +工业 +工业病 +工业部 +工业处 +工业革命 +工业国 +工业化 +工业级 +工业家 +工业界 +工业局 +工业品 +工业气压 +工业区 +工业省 +工业史 +工业署 +工业体系 +工业型 +工业性 +工业学系 +工业园 +工业园区 +工业展 +工业组 +工一师 +工艺 +工艺瓷 +工艺科 +工艺流程 +工艺论典 +工艺美术 +工艺品 +工艺师 +工艺室 +工艺系 +工艺学 +工友 +工于 +工余 +工运史 +工贼 +工整 +工致 +工种 +工装 +工装架 +工装裤 +工资 +工资本 +工资袋 +工资额 +工资分 +工资款 +工资性 +工资制 +工字钢 +工字形 +工作 +工作部 +工作餐 +工作处 +工作单 +工作地 +工作队 +工作法 +工作费 +工作服 +工作观 +工作会 +工作间 +工作科 +工作狂 +工作量 +工作帽 +工作面 +工作母机 +工作日 +工作日制 +工作史 +工作室 +工作台 +工作团 +工作员 +工作站 +工作者 +工作证 +工作制 +工作周 +工作组 +弓 +弓箭 +弓弩 +弓弩手 +弓弦 +弓形 +弓形体 +弓腰 +弓子 +公 +公安 +公安部 +公安部队 +公安处 +公安段 +公安队 +公安局 +公安局长 +公安军 +公安科 +公安人员 +公安所 +公安厅 +公安县 +公案 +公办 +公办侨助 +公报 +公报私仇 +公倍数 +公比 +公伯峡 +公捕 +公布 +公布栏 +公布牌 +公布于世 +公布于众 +公财 +公厕 +公差 +公产 +公车 +公尺 +公出 +公垂线 +公担 +公道 +公德 +公敌 +公爹 +公断 +公而忘私 +公法 +公房 +公费 +公费生 +公分 +公愤 +公干 +公告 +公告费 +公告栏 +公告书 +公公 +公公正正 +公共 +公共场所 +公共积累 +公共课 +公共性 +公估行 +公关 +公关部 +公馆 +公国 +公海 +公害 +公函 +公会 +公会堂 +公贿 +公鸡 +公积金 +公祭 +公家 +公家人 +公假 +公检法 +公检法司 +公建 +公交 +公交车 +公交化 +公交线 +公斤 +公决 +公爵 +公开 +公开办 +公开化 +公开栏 +公开牌 +公开墙 +公开日 +公开赛 +公开信 +公开性 +公开组 +公款 +公款吃喝 +公厘 +公里 +公里数 +公理 +公理式 +公历 +公立 +公例 +公粮 +公路 +公路法 +公路费 +公路局 +公路口 +公路桥 +公路网 +公路站 +公驴 +公论 +公民 +公民党 +公民权 +公民院 +公明党 +公明镇 +公亩 +公墓 +公墓区 +公牛 +公牛队 +公派 +公判 +公平 +公平秤 +公平感 +公平交易 +公平性 +公婆 +公仆 +公汽 +公切线 +公卿 +公顷 +公然 +公人 +公认 +公设 +公社 +公社化 +公审 +公升 +公生明 +公使 +公使衔 +公示制 +公式 +公式化 +公事 +公事公办 +公署 +公司 +公司部 +公司法 +公司级 +公司税 +公司制 +公私 +公私章 +公诉 +公诉人 +公堂 +公团 +公推 +公网 +公文 +公文包 +公文夹 +公文纸 +公屋 +公务 +公务车 +公务机 +公务员 +公物 +公心 +公信力 +公休 +公休日 +公修 +公畜 +公选 +公学 +公言报 +公演 +公议 +公益 +公益金 +公益林 +公益性 +公谊 +公意 +公因式 +公英 +公营 +公营事业 +公映 +公用 +公用电话 +公用局 +公用事业 +公有 +公有性 +公有制 +公寓 +公寓楼 +公元 +公元前 +公园 +公园法 +公园局 +公园式 +公约 +公约数 +公允 +公杂 +公债 +公债券 +公章 +公正 +公正化 +公正无私 +公正性 +公证 +公证处 +公证费 +公证人 +公证人员 +公证室 +公证书 +公证团 +公证员 +公之于世 +公之于众 +公职 +公制 +公雉 +公众 +公诸于世 +公诸于众 +公猪 +公主 +公主岭 +公主岭市 +公助 +公转 +公子 +公子哥儿 +公租户 +功 +功败垂成 +功不可没 +功曹 +功臣 +功成名就 +功成名遂 +功成身退 +功成引退 +功道杯 +功德 +功德碑 +功德无量 +功德圆满 +功底 +功法 +功放 +功放厂 +功放机 +功夫 +功夫茶 +功夫服 +功夫片 +功高权重 +功过 +功耗 +功惠 +功绩 +功架 +功课 +功亏一篑 +功劳 +功劳簿 +功力 +功力者 +功利 +功利性 +功利主义 +功率 +功率因数 +功名 +功名榜 +功名利禄 +功模 +功莫大焉 +功能 +功能钮 +功能区 +功能型 +功能性 +功效 +功勋 +功业 +功用 +功在当代 +功在千秋 +功罪 +攻 +攻城掠地 +攻城略地 +攻打 +攻读 +攻防 +攻关 +攻关点 +攻关田 +攻关战 +攻关组 +攻击 +攻击点 +攻击机 +攻击力 +攻击手 +攻击型 +攻击性 +攻坚 +攻坚乡 +攻坚战 +攻坚仗 +攻歼 +攻讦 +攻克 +攻破 +攻其不备 +攻球 +攻取 +攻势 +攻守 +攻守同盟 +攻无不克 +攻陷 +攻心 +攻心为上 +攻心战 +攻占 +供 +供不应求 +供词 +供大于求 +供电 +供电局 +供电量 +供电所 +供电网 +供电系统 +供电站 +供方 +供奉 +供稿 +供给 +供给部 +供给方 +供给量 +供给型 +供给者 +供给证 +供给制 +供过于求 +供货 +供货点 +供货方 +供货户 +供货量 +供货期 +供货商 +供联财字 +供能 +供暖 +供排水 +供品 +供气 +供气量 +供求 +供热 +供热率 +供认 +供认不讳 +供水 +供水管 +供水量 +供水站 +供体 +供销 +供销社 +供销员 +供需 +供养 +供养人 +供应 +供应部 +供应处 +供应船 +供应地 +供应点 +供应科 +供应粮 +供应量 +供应权 +供应券 +供应商 +供应室 +供应司 +供应线 +供应站 +供应者 +供应证 +供用电 +供油 +供职 +供职者 +供种 +供种量 +供状 +供桌 +肱骨 +宫 +宫灯 +宫殿 +宫殿式 +宫调 +宫娥 +宫粉梅 +宫观 +宫颈 +宫颈癌 +宫门 +宫内 +宫女 +宫腔 +宫腔镜 +宫腔镜检 +宫墙 +宫阙 +宫室 +宫廷 +宫廷部 +宫廷舞 +宫廷戏 +宫廷政变 +宫外孕 +宫闱 +宫刑 +宫苑 +宫中 +恭 +恭城 +恭城县 +恭恭敬敬 +恭贺 +恭贺新禧 +恭候 +恭敬 +恭楷 +恭陪 +恭亲王 +恭顺 +恭桶 +恭维 +恭喜 +恭喜发财 +恭祝 +躬 +躬逢 +躬逢其盛 +躬耕 +躬亲 +躬身 +躬行实践 +龚 +觥筹交错 +巩固 +巩固村 +巩固率 +巩留 +巩膜 +巩乃斯 +巩义 +巩义市 +汞 +汞溴红 +拱 +拱坝 +拱北 +拱北关 +拱北石 +拱顶 +拱跨径 +拱廊 +拱门 +拱棚 +拱桥 +拱圈 +拱券 +拱石桥 +拱手 +拱体 +拱形 +珙泉镇 +珙桐 +珙县 +共 +共悲共愤 +共产党 +共产党人 +共产党员 +共产国际 +共产主义 +共处 +共存 +共度 +共轭点 +共管 +共和 +共和党 +共和国 +共和国宫 +共和国院 +共和军 +共和派 +共和县 +共和镇 +共和制 +共话 +共计 +共济 +共价键 +共建 +共建点 +共教 +共聚 +共利 +共勉 +共勉共励 +共鸣 +共鸣板 +共鸣点 +共鸣区 +共鸣说 +共命运 +共谋 +共青 +共青城 +共青团 +共青团员 +共商 +共商国是 +共生 +共生矿 +共识 +共事 +共通性 +共同 +共同点 +共同纲领 +共同社 +共同市场 +共同体 +共同性 +共同语 +共同语言 +共享 +共享税 +共享性 +共性 +共益权 +共用 +共有 +共有性 +共育 +共葬 +共振 +共振点 +共治 +共诛 +共总 +贡 +贡缎 +贡缎布 +贡嘎 +贡嘎县 +贡酒 +贡米 +贡品 +贡山 +贡扇 +贡税 +贡唐金塔 +贡献 +贡献度 +贡献奖 +贡献率 +贡献者 +勾 +勾笔 +勾除 +勾搭 +勾当 +勾兑 +勾股定理 +勾股形 +勾画 +勾肩搭背 +勾结 +勾勒 +勾连 +勾留 +勾漏令 +勾芡 +勾通 +勾销 +勾心斗角 +勾引 +勾针 +佝偻 +佝偻病 +沟 +沟北 +沟槽 +沟沟 +沟沟岔岔 +沟沟壑壑 +沟沟卡卡 +沟沟坎坎 +沟沟峁峁 +沟谷 +沟灌 +沟壕 +沟河庄 +沟河庄村 +沟壑 +沟壑区 +沟坎 +沟口 +沟梁 +沟门乡 +沟渠 +沟施 +沟鼠 +沟通 +沟通者 +沟王寨村 +钩 +钩沉 +钩虫 +钩儿 +钩挂 +钩心斗角 +钩针 +钩子 +篝火 +狗 +狗吃屎 +狗岛 +狗东西 +狗吠 +狗牯脑 +狗獾 +狗急跳墙 +狗叫屯 +狗爬犁 +狗皮 +狗皮膏药 +狗屁 +狗屁不通 +狗肉 +狗屎堆 +狗市 +狗头军师 +狗腿子 +狗尾巴草 +狗尾草 +狗尾续貂 +狗熊 +狗血喷头 +狗牙草 +狗鱼 +狗崽 +狗崽子 +狗仗人势 +狗爪子花 +苟 +苟安 +苟刻 +苟且 +苟且偷安 +苟且偷生 +苟取 +苟全性命 +苟同 +苟延残喘 +枸杞 +枸杞子 +构 +构成 +构成美 +构成性 +构词法 +构架 +构件 +构建 +构剧 +构配件 +构思 +构图 +构陷 +构想 +构造 +构造地震 +构造运动 +构造柱 +构筑 +构筑物 +诟 +诟病 +诟骂 +购 +购并 +购车 +购车费 +购车者 +购到 +购得 +购地 +购毒 +购房 +购房户 +购房款 +购房量 +购房人 +购房者 +购房置业 +购画者 +购汇 +购货 +购货本 +购货者 +购机 +购机费 +购机款 +购价 +购假者 +购进 +购进价 +购领 +购买 +购买点 +购买方 +购买国 +购买户 +购买价 +购买金 +购买力 +购买率 +购买群 +购买人 +购买日 +购买欲 +购买者 +购煤款 +购配 +购票 +购票单 +购票点 +购票卡 +购票款 +购票者 +购入 +购书 +购书点 +购书卡 +购书款 +购书人 +购书者 +购物 +购物车 +购物点 +购物额 +购物卡 +购物券 +购物者 +购销 +购销处 +购销额 +购销两旺 +购销型 +购销员 +购油量 +购置 +购置费 +购置税 +购置者 +购种卡 +垢 +垢污 +够 +够本 +够格 +够交情 +够朋友 +够呛 +够用 +媾和 +彀 +估 +估测 +估产 +估估 +估衡 +估计 +估价 +估价师 +估斤算两 +估量 +估摸 +估算 +咕咚 +咕咚咕咚 +咕嘟嘟 +咕哩村 +咕哩寨 +咕噜 +咕噜噜 +姑 +姑表 +姑表亲 +姑夫 +姑父 +姑姑 +姑舅 +姑老爷 +姑妈 +姑母 +姑奶奶 +姑娘 +姑娘儿 +姑娘家 +姑娘群 +姑婆 +姑且 +姑嫂 +姑苏 +姑妄听之 +姑息 +姑息疗法 +姑息迁就 +姑息养奸 +姑爷 +姑丈 +姑子 +姑子营村 +孤 +孤傲 +孤本 +孤残 +孤雌生殖 +孤单 +孤单单 +孤胆 +孤岛 +孤灯 +孤独 +孤儿 +孤儿村 +孤儿寡母 +孤儿节 +孤儿院 +孤芳自赏 +孤坟 +孤高 +孤孤单单 +孤寡 +孤寡病残 +孤寡老人 +孤鬼 +孤寒 +孤魂 +孤寂 +孤寂感 +孤家寡人 +孤家子 +孤军 +孤军奋战 +孤军作战 +孤苦 +孤苦伶丁 +孤苦伶仃 +孤老 +孤老户 +孤立 +孤立化 +孤立无援 +孤伶伶 +孤零零 +孤陋寡闻 +孤旅 +孤僻 +孤品 +孤弱 +孤山 +孤身 +孤身一人 +孤石 +孤童 +孤行 +孤行己见 +孤远 +孤掌难鸣 +孤舟 +孤注一掷 +沽 +沽名钓誉 +沽售 +沽源县 +轱辘 +菇 +菇场 +菇床 +菇类 +菇农 +菇种 +菇子 +觚 +辜负 +箍 +古 +古奥 +古巴 +古巴队 +古柏 +古板 +古堡 +古北口 +古北新村 +古北新区 +古本 +古币 +古城 +古城镇 +古城子镇 +古虫 +古代 +古代人 +古代史 +古道 +古道热肠 +古典 +古典式 +古典文学 +古典主义 +古董 +古都 +古尔邦节 +古尔达拉 +古方 +古风 +古格 +古共 +古怪 +古国 +古画 +古话 +古槐 +古黄河 +古迹 +古籍 +古脊椎 +古脊椎所 +古间 +古建 +古建筑 +古建筑学 +古交市 +古交西曲 +古街 +古今 +古今合璧 +古今中外 +古晋 +古井 +古旧 +古柯 +古刻 +古兰经 +古浪县 +古老 +古乐 +古里古怪 +古蔺县 +古龙乡 +古隆中 +古马乡 +古梅 +古庙 +古木 +古木参天 +古墓 +古墓群 +古朴 +古钱币 +古琴 +古曲 +古人 +古人类 +古人类学 +古色古香 +古刹 +古山 +古杉 +古生物 +古生物学 +古圣 +古尸 +古诗 +古诗词 +古时 +古时候 +古史 +古式 +古书 +古树 +古寺 +古松 +古潭州 +古藤蔓 +古提 +古体 +古体诗 +古天文学 +古田 +古田四路 +古铜 +古铜色 +古玩 +古往 +古往今来 +古为今用 +古文 +古文化 +古文献 +古文字 +古屋 +古物 +古稀 +古稀之年 +古戏楼 +古仙洞 +古县 +古训 +古雅 +古谚 +古窑 +古谣 +古冶区 +古已有之 +古义陵 +古意 +古音 +古语 +古语词 +古猿 +古运河畔 +古韵 +古樟 +古丈县 +古镇 +古镇村 +古镇镇 +古筝 +古筝曲 +古志 +古竹村 +古竹乡 +古庄店 +古庄店乡 +古装 +古装剧 +古装片 +古装戏 +古拙 +古字 +汩汩 +汩汩淙淙 +谷 +谷氨酸 +谷斑皮蠹 +谷草 +谷城 +谷城县 +谷底 +谷地 +谷堆 +谷坊 +谷坊坝 +谷壑 +谷家峪村 +谷贱伤农 +谷糠 +谷口 +谷类 +谷类作物 +谷苗 +谷内 +谷饶镇 +谷物 +谷雨 +谷种 +谷子 +股 +股本 +股本金 +股比 +股长 +股东 +股东会 +股额 +股分 +股份 +股份公司 +股份化 +股份制 +股骨 +股骨颈 +股骨头 +股海 +股肌 +股级 +股价 +股交所 +股金 +股金款 +股利 +股民 +股票 +股票版 +股票机 +股票商 +股票数 +股评 +股评家 +股权 +股权证 +股市 +股数 +股息 +股员 +股灾 +股值 +股指 +股子 +牯牛 +骨 +骨癌 +骨痹 +骨病 +骨材 +骨刺 +骨脆性 +骨董 +骨朵 +骨朵儿 +骨粉 +骨干 +骨干网 +骨骼 +骨骼肌 +骨关节 +骨化 +骨坏死 +骨坏死病 +骨灰 +骨灰盒 +骨灰堂 +骨灰箱 +骨架 +骨架子 +骨胶 +骨节 +骨结核 +骨科 +骨库 +骨里 +骨力 +骨量 +骨料 +骨密度 +骨膜 +骨膜炎 +骨木 +骨囊肿 +骨牌 +骨盆 +骨气 +骨器 +骨肉 +骨肉相残 +骨肉相连 +骨伤 +骨伤病 +骨瘦如柴 +骨疏松症 +骨髓 +骨髓库 +骨髓瘤 +骨髓炎 +骨炭 +骨腾肉飞 +骨头 +骨头架子 +骨纤维 +骨性 +骨学 +骨血 +骨折 +骨针 +骨质 +骨质增生 +骨子 +骨子里 +骨组织 +钴 +钴胺素 +蛊惑 +蛊惑人心 +鹄 +鼓 +鼓板 +鼓吹 +鼓吹者 +鼓槌 +鼓词 +鼓荡 +鼓捣 +鼓点 +鼓点子 +鼓动 +鼓动性 +鼓风机 +鼓风炉 +鼓鼓 +鼓鼓的 +鼓鼓囊囊 +鼓鼓掌 +鼓号 +鼓号队 +鼓魂 +鼓角 +鼓劲 +鼓浪屿 +鼓浪屿港 +鼓乐 +鼓乐队 +鼓乐齐鸣 +鼓乐声 +鼓乐喧天 +鼓励 +鼓励奖 +鼓励类 +鼓楼 +鼓楼区 +鼓楼苑 +鼓面 +鼓膜 +鼓囊囊 +鼓气 +鼓曲 +鼓声 +鼓师 +鼓手 +鼓书 +鼓王 +鼓舞 +鼓翼欲飞 +鼓噪 +鼓涨 +鼓掌 +鼓掌声 +鼓子词 +鼓足 +鼓足干劲 +鼓座 +固 +固安 +固安县 +固步自封 +固城乡 +固氮 +固氮菌 +固氮酶 +固定 +固定点 +固定岗 +固定工 +固定汇率 +固定式 +固定性 +固定资产 +固定资金 +固化 +固疾 +固脚 +固能 +固墙镇 +固然 +固若金汤 +固沙 +固沙林 +固始县 +固守 +固态 +固态氢 +固体 +固体潮 +固习 +固县 +固阳 +固有 +固原 +固原县 +固镇 +固执 +固执己见 +故 +故步自封 +故城 +故城县 +故此 +故道 +故道区 +故地 +故地重游 +故都 +故而 +故房 +故宫 +故官 +故国 +故迹 +故伎 +故伎重演 +故技 +故技重演 +故交 +故旧 +故居 +故郡 +故垒 +故里 +故弄玄虚 +故去 +故人 +故事 +故事稿 +故事会 +故事集 +故事类 +故事链 +故事片 +故事性 +故态 +故态复萌 +故土 +故土难移 +故物 +故乡 +故乡人 +故意 +故友 +故园 +故宅 +故障 +故障率 +故知 +故址 +故纸 +故纸堆 +故智 +故作姿态 +顾 +顾不得 +顾不了 +顾此失彼 +顾村镇 +顾及 +顾忌 +顾藉 +顾客 +顾虑 +顾虑重重 +顾名思义 +顾盼 +顾全 +顾全大局 +顾问 +顾问团 +顾问性 +顾问业 +顾问组 +顾惜 +顾乡屯 +顾绣 +顾影自怜 +顾主 +崮山镇 +雇 +雇车 +雇工 +雇农 +雇请 +雇人 +雇佣 +雇佣观点 +雇佣军 +雇佣劳动 +雇用 +雇用率 +雇员 +雇主 +痼疾 +痼癖 +瓜 +瓜霸 +瓜达尔市 +瓜德罗普 +瓜分 +瓜分豆剖 +瓜葛 +瓜果 +瓜果皮 +瓜果皮核 +瓜廖尔市 +瓜蔓 +瓜苗 +瓜那雷斯 +瓜农 +瓜棚 +瓜皮 +瓜皮帽 +瓜片 +瓜剖豆分 +瓜仁 +瓜熟蒂落 +瓜田 +瓜田李下 +瓜乡 +瓜香 +瓜亚基尔 +瓜亚斯省 +瓜秧 +瓜园 +瓜州 +瓜子 +瓜子脸 +瓜子皮 +瓜子仁 +刮 +刮刀 +刮风 +刮垢磨光 +刮金板 +刮目 +刮目相待 +刮目相看 +刮片 +刮漆 +呱呱 +呱呱叫 +呱呱坠地 +剐 +寡 +寡不敌众 +寡弟媳 +寡妇 +寡廉鲜耻 +寡母 +寡人 +寡头 +寡头政治 +寡言 +寡言少语 +卦 +卦辞 +卦爻 +挂 +挂包 +挂表 +挂彩 +挂车 +挂车费 +挂橱 +挂档 +挂灯 +挂点户 +挂斗 +挂儿 +挂扶 +挂钩 +挂钩点 +挂钩梯 +挂挂 +挂冠 +挂果 +挂果率 +挂果期 +挂号 +挂号费 +挂号信 +挂花 +挂怀 +挂记 +挂架 +挂件 +挂靠 +挂空档 +挂历 +挂链 +挂零 +挂面 +挂名 +挂念 +挂拍 +挂牌 +挂牌车 +挂牌率 +挂盘 +挂屏 +挂牵 +挂任 +挂失 +挂帅 +挂锁 +挂毯 +挂图 +挂席 +挂线疗法 +挂心 +挂一漏万 +挂印 +挂载 +挂帐 +挂账 +挂职 +挂职支教 +挂钟 +挂轴 +褂 +褂衫 +褂子 +乖 +乖乖 +乖觉 +乖僻 +乖巧 +拐 +拐棒 +拐脖儿 +拐棍 +拐角 +拐角处 +拐卖 +拐骗 +拐弯 +拐弯抹角 +拐杖 +拐子 +怪 +怪不得 +怪才 +怪诞 +怪调 +怪怪的 +怪话 +怪杰 +怪里怪气 +怪论 +怪模怪样 +怪癖 +怪僻 +怪圈 +怪人 +怪声 +怪声怪气 +怪石 +怪事 +怪胎 +怪态 +怪味 +怪物 +怪象 +怪异 +怪招 +怪罪 +关 +关爱 +关隘 +关闭 +关长 +关城 +关窗 +关村 +关灯 +关帝矿 +关帝庙 +关掉 +关东 +关东军 +关东糖 +关防 +关公路 +关乎 +关怀 +关怀备至 +关机 +关键 +关键词 +关键点 +关键件 +关键球 +关键性 +关键字 +关节 +关节点 +关节炎 +关进 +关禁 +关禁闭 +关雎 +关卡 +关卡税 +关口 +关累镇 +关连 +关联 +关联度 +关联方 +关联性 +关令 +关麓村 +关铝 +关贸 +关门 +关门大吉 +关门主义 +关内 +关念 +关切 +关区 +关塞 +关山 +关山重重 +关上 +关上村 +关涉 +关税 +关税壁垒 +关税区 +关塔港 +关停 +关停并转 +关停令 +关停率 +关头 +关外 +关西 +关系 +关系案 +关系部 +关系法 +关系户 +关系人 +关系史 +关系式 +关系网 +关系型 +关系学 +关系者 +关心 +关押 +关于 +关员 +关闸 +关张 +关照 +关镇 +关中 +关注 +关注点 +关子 +观 +观测 +观测点 +观测期 +观测器 +观测室 +观测台 +观测网 +观测仪 +观测员 +观测站 +观测者 +观察 +观察点 +观察法 +观察国 +观察家 +观察镜 +观察力 +观察哨 +观察使 +观察所 +观察团 +观察员 +观潮 +观潮派 +观点 +观感 +观光 +观光客 +观光台 +观光型 +观光者 +观后感 +观驾山 +观景 +观景台 +观看 +观看席 +观澜湖 +观览 +观礼 +观礼台 +观庙乡 +观摩 +观摩会 +观摩课 +观摩者 +观念 +观念形态 +观念学 +观鸟亭 +观其行 +观棋 +观棋室 +观棋者 +观赛 +观赏 +观赏处 +观赏船 +观赏鸽 +观赏节 +观赏性 +观赏鱼 +观赏者 +观赏植物 +观世音 +观望 +观象台 +观星 +观雪 +观音 +观音阁 +观音土 +观音竹 +观樱会 +观瞻 +观展 +观战 +观照 +观者 +观者如堵 +观众 +观众群 +观众席 +官 +官办 +官报 +官报私仇 +官本位 +官逼民反 +官兵 +官差 +官场 +官倒 +官道 +官道沟 +官道李村 +官德 +官邸 +官店镇 +官渡 +官渡区 +官渡人声 +官儿 +官方 +官方类 +官房 +官房长 +官房长官 +官风 +官服 +官府 +官股 +官官相护 +官化 +官话 +官宦 +官家 +官价 +官架 +官架子 +官阶 +官爵 +官军 +官吏 +官僚 +官僚式 +官僚主义 +官僚资本 +官麓村 +官迷心窍 +官面儿 +官名 +官能 +官能团 +官派 +官气 +官腔 +官桥村 +官桥湖 +官人 +官纱 +官商 +官绅 +官事 +官室 +官室长 +官司 +官厅 +官亭乡 +官沱村 +官威 +官位 +官衔 +官样文章 +官瘾 +官印 +官员 +官运亨通 +官职 +官制 +官庄 +官庄村 +官庄镇 +官庄组 +官子 +官佐 +冠 +冠盖 +冠盖云集 +冠鸡 +冠家堡 +冠绝群伦 +冠军 +冠军杯 +冠军杯赛 +冠军队 +冠军级 +冠军赛 +冠脉 +冠冕堂皇 +冠名 +冠名权 +冠名者 +冠县 +冠心 +冠心病 +冠亚军 +冠以 +冠有 +冠状动脉 +冠子 +棺 +棺材 +棺材式 +棺椁 +棺木 +棺器 +鳏寡孤独 +馆 +馆藏 +馆长 +馆臣 +馆邸 +馆际 +馆里 +馆名 +馆内 +馆牌 +馆旗 +馆庆 +馆区 +馆舍 +馆所 +馆陶 +馆陶县 +馆员 +馆址 +馆中 +馆中馆 +馆子 +管 +管扳子 +管保 +管标 +管标治本 +管材 +管材业 +管城 +管道 +管道工 +管道局 +管道网 +管灯 +管电员 +管端 +管风琴 +管工 +管沟 +管管 +管灌 +管户 +管护 +管护节 +管家 +管家婆 +管家务乡 +管见 +管教 +管教所 +管界 +管井 +管径 +管控 +管窥 +管窥所及 +管乐 +管乐队 +管乐器 +管乐团 +管理 +管理部 +管理层 +管理处 +管理点 +管理法 +管理费 +管理股 +管理观 +管理官 +管理界 +管理局 +管理局长 +管理卡 +管理科 +管理科学 +管理课 +管理率 +管理篇 +管理区 +管理权 +管理人 +管理司 +管理所 +管理厅 +管理系 +管理型 +管理学 +管理学家 +管理业 +管理员 +管理站 +管理者 +管理制 +管林 +管路 +管内 +管片 +管钳子 +管区 +管身 +管事 +管束 +管树 +管帅 +管网 +管委 +管委会 +管辖 +管辖区 +管辖权 +管闲事 +管弦高奏 +管弦乐 +管弦乐队 +管弦乐器 +管弦乐曲 +管弦乐团 +管线 +管线处 +管线路 +管线式 +管用 +管制 +管制法 +管制区 +管制权 +管制署 +管治 +管中窥豹 +管柱 +管庄 +管庄站 +管状花 +管子 +贯 +贯彻 +贯彻始终 +贯穿 +贯穿辐射 +贯穿性 +贯串 +贯家堡 +贯家堡村 +贯流式 +贯前村 +贯通 +贯悉 +贯众 +贯注 +惯 +惯常 +惯盗 +惯犯 +惯匪 +惯技 +惯懒 +惯例 +惯量 +惯窃 +惯偷 +惯性 +惯性力 +惯用 +惯于 +惯贼 +惯子 +盥洗 +灌 +灌包 +灌包机 +灌草 +灌肠 +灌丛 +灌溉 +灌溉区 +灌溉渠 +灌溉站 +灌河 +灌河口 +灌浆 +灌木 +灌木丛 +灌排 +灌区 +灌渠 +灌输 +灌输式 +灌馅麻糖 +灌阳 +灌阳县 +灌云 +灌云县 +灌制 +灌注 +灌注桩 +灌装线 +鹳雀楼 +罐 +罐车 +罐顶 +罐罐 +罐里 +罐笼 +罐内 +罐瓶 +罐区 +罐式 +罐体 +罐头 +罐头盒 +罐头瓶 +罐中 +罐装 +罐子 +光 +光斑 +光板儿 +光笔 +光边 +光标 +光饼 +光波 +光彩 +光彩夺目 +光彩耀目 +光彩照人 +光灿灿 +光脆性 +光大 +光带 +光导管 +光导纤维 +光电 +光电池 +光电磁 +光电管 +光电效应 +光电钟 +光电子 +光电子学 +光碟 +光度 +光度计 +光风霁月 +光伏 +光辐射 +光复 +光复会 +光复路 +光杆儿 +光杆司令 +光顾 +光顾者 +光怪陆离 +光光 +光棍 +光棍村 +光棍儿 +光合 +光合作用 +光乎乎 +光华 +光华村 +光华路 +光华四射 +光滑 +光滑度 +光化学 +光化作用 +光环 +光辉 +光辉灿烂 +光火 +光机电 +光脚板子 +光洁 +光洁度 +光解作用 +光景 +光景儿 +光缆 +光亮 +光量子 +光临 +光溜 +光溜溜 +光卤石 +光芒 +光芒四射 +光芒万丈 +光密媒质 +光面 +光敏电阻 +光敏核 +光敏剂 +光明 +光明村 +光明港 +光明磊落 +光明正大 +光脑 +光能 +光年 +光盘 +光盘案 +光盘版 +光盘厂 +光盘机 +光盘数 +光谱 +光谱分析 +光谱线 +光谱仪 +光气 +光前裕后 +光圈 +光热 +光荣 +光荣榜 +光荣感 +光荣户 +光荣花 +光荣牌 +光荣史 +光荣席 +光荣院 +光润 +光山 +光山县 +光闪闪 +光身汉 +光声控 +光疏媒质 +光束 +光速 +光滩 +光天化日 +光通量 +光通信 +光头 +光头党 +光秃 +光秃秃 +光团 +光网 +光纤 +光纤通信 +光弦 +光线 +光绪 +光绪帝 +光学 +光学玻璃 +光学录音 +光压 +光焰 +光洋 +光耀 +光阴 +光阴荏苒 +光阴似箭 +光影 +光源 +光源感 +光晕 +光泽 +光泽度 +光栅 +光照 +光照度 +光柱 +光子 +光子学 +光宗耀祖 +咣 +咣当 +广 +广安 +广安门 +广安县 +广播 +广播操 +广播电台 +广播段 +广播稿 +广播局 +广播剧 +广播室 +广播台 +广播体操 +广播厅 +广播网 +广播线 +广播员 +广播站 +广博 +广布 +广采博纳 +广采博收 +广昌 +广昌县 +广场 +广船 +广大 +广岛 +广德 +广电 +广电部 +广电局 +广电厅 +广东 +广东队 +广东省 +广东团 +广东戏 +广东音乐 +广度 +广而告之 +广发 +广泛 +广泛性 +广丰县 +广柑 +广钢 +广告 +广告部 +广告词 +广告辞 +广告法 +广告费 +广告节 +广告界 +广告科 +广告栏 +广告牌 +广告片 +广告人 +广告色 +广告商 +广告学系 +广告业 +广告语 +广告战 +广告主 +广汉 +广汉市 +广汉县 +广河县 +广华堂 +广货 +广交 +广交会 +广交朋友 +广角 +广角镜 +广角镜头 +广开 +广开才路 +广开门路 +广开言路 +广空 +广阔 +广阔无垠 +广灵 +广陵 +广袤 +广袤无际 +广漠 +广谋从众 +广内 +广纳 +广纳博取 +广纳善策 +广南 +广宁省 +广谱 +广汽 +广渠门 +广饶路 +广饶县 +广水 +广水市 +广太乡 +广铁 +广听博纳 +广通 +广通站 +广土众民 +广旺 +广为 +广为传颂 +广为流传 +广为人知 +广西 +广西籍 +广西省 +广西团 +广厦 +广兴镇 +广绣 +广学博采 +广学博识 +广学会 +广义 +广育 +广域 +广域网 +广元 +广元市 +广远 +广院 +广招 +广征博采 +广种薄收 +广众益 +广州 +广州港 +广州省 +广州市 +广州湾 +广州站 +犷悍 +逛 +逛荡 +逛逛 +逛来逛去 +归 +归案 +归并 +归藏 +归程 +归除 +归档 +归队 +归帆 +归附 +归复 +归根到底 +归根结底 +归根结蒂 +归根究底 +归公 +归功 +归国 +归航 +归还 +归集 +归集部 +归集额 +归集率 +归降 +归结 +归结点 +归咎 +归口 +归来 +归类 +归谬法 +归纳 +归纳法 +归期 +归侨 +归侨界 +归去来兮 +归人 +归入 +归顺 +归宿 +归宿点 +归绥 +归天 +归途 +归位 +归西 +归心 +归心似箭 +归行率 +归因 +归隐 +归于 +归真村 +归真返璞 +归置 +归州 +归属 +归属感 +归属权 +归属性 +归总 +归罪 +圭 +圭臬 +圭亚那 +龟 +龟背 +龟巢 +龟鹤遐龄 +龟鹤延年 +龟甲 +龟鉴 +龟壳 +龟裂 +龟苗 +龟山 +龟头 +龟兔赛跑 +龟爪儿 +龟足 +规 +规避 +规程 +规定 +规定价 +规定性 +规定者 +规定值 +规范 +规范化 +规范性 +规费 +规格 +规格化 +规规矩矩 +规划 +规划办 +规划部 +规划法 +规划会 +规划局 +规划区 +规划师 +规划署 +规划数 +规划司 +规划委 +规划院 +规划者 +规矩 +规例 +规律 +规律性 +规模 +规模化 +规模型 +规模性 +规劝 +规土局 +规行矩步 +规约 +规约性 +规则 +规章 +规章制度 +规整 +规正 +闺房 +闺阁 +闺阁情 +闺女 +闺秀 +硅 +硅单晶 +硅二极管 +硅肺 +硅钢 +硅钢片 +硅谷 +硅光板 +硅胶 +硅片 +硅石 +硅酸 +硅酸盐 +硅微条 +硅橡胶 +硅氧烷 +硅藻 +硅藻土 +硅砖 +瑰宝 +瑰怪 +瑰丽 +鲑鱼 +轨 +轨道 +轨范 +轨迹 +轨辙 +轨枕 +匦 +诡 +诡辩 +诡辩式 +诡称 +诡怪 +诡计 +诡计多端 +诡谲 +诡秘 +诡奇 +诡异 +诡诈 +癸 +鬼 +鬼把戏 +鬼才 +鬼点子 +鬼斧神工 +鬼怪 +鬼鬼祟祟 +鬼画符 +鬼话 +鬼话连篇 +鬼魂 +鬼混 +鬼火 +鬼哭狼嚎 +鬼哭神嚎 +鬼脸 +鬼灵精 +鬼魅 +鬼门关 +鬼迷心窍 +鬼魔 +鬼亲 +鬼神 +鬼使神差 +鬼市 +鬼祟 +鬼胎 +鬼剃头 +鬼天气 +鬼头鬼脑 +鬼语神话 +鬼蜮 +鬼蜮伎俩 +鬼针草 +鬼子 +簋 +刽子手 +柜 +柜橱 +柜机 +柜角 +柜门 +柜面 +柜内 +柜式 +柜台 +柜体 +柜员 +柜员机 +柜员制 +柜中 +柜子 +柜组 +柜组长 +贵 +贵报 +贵宾 +贵宾车 +贵宾房 +贵宾楼 +贵宾室 +贵宾厅 +贵宾团 +贵池 +贵池市 +贵处 +贵党 +贵德县 +贵定 +贵耳贱目 +贵方 +贵妃 +贵峰村 +贵峰籍 +贵妇 +贵妇人 +贵港 +贵港市 +贵馆 +贵国 +贵乎 +贵会 +贵贱 +贵金属 +贵刊 +贵客 +贵南县 +贵平 +贵人 +贵省 +贵体 +贵溪 +贵溪市 +贵姓 +贵阳 +贵阳市 +贵恙 +贵冶 +贵义重利 +贵远贱近 +贵重 +贵州 +贵州籍 +贵州省 +贵州厅 +贵州团 +贵专栏 +贵子 +贵族 +贵族化 +桂 +桂北 +桂东 +桂东县 +桂宫 +桂冠 +桂花 +桂花村 +桂花姜 +桂魂 +桂江 +桂剧 +桂林 +桂林市 +桂庙 +桂南 +桂皮 +桂皮树 +桂平市 +桂山岛 +桂山镇 +桂树 +桂西 +桂霞 +桂香新村 +桂阳 +桂阳县 +桂元 +桂圆 +桂枝 +桂竹 +跪 +跪拜 +跪拜礼 +跪倒 +跪丐 +跪下 +鳜鱼 +衮衮诸公 +衮州 +绲边 +辊道 +滚 +滚边 +滚打 +滚蛋 +滚地皮 +滚动 +滚动摩擦 +滚动式 +滚动轴承 +滚翻 +滚沸 +滚杠 +滚瓜烂熟 +滚瓜溜圆 +滚瓜流油 +滚滚 +滚滚圆 +滚轮 +滚落 +滚木 +滚热 +滚水 +滚水坝 +滚烫 +滚烫滚烫 +滚烫烫 +滚筒 +滚筒机 +滚雪球 +滚圆 +滚针轴承 +滚珠 +滚珠轴承 +滚柱轴承 +磙子 +棍 +棍棒 +棍儿 +棍儿茶 +棍法 +棍术 +棍子 +郭 +郭家店镇 +郭家乡 +郭家庄 +郭沫若 +郭洼 +郭镇 +郭庄 +郭庄村 +郭庄镇 +崞县 +聒耳 +聒噪 +锅 +锅巴 +锅边 +锅边糊 +锅铲 +锅底状 +锅盖 +锅炉 +锅炉厂 +锅炉房 +锅炉界 +锅台 +锅贴 +锅贴儿 +锅碗瓢盆 +锅烟子 +锅灶 +锅子 +蝈蝈儿 +国 +国安队 +国奥队 +国办 +国宝 +国宝级 +国本 +国标 +国标舞 +国别 +国别性 +国宾 +国宾馆 +国策 +国产 +国产车 +国产化 +国产化率 +国产货 +国产机 +国产马 +国产棉 +国产品 +国耻 +国储棉 +国粹 +国粹主义 +国大党 +国道 +国典 +国电债 +国定 +国都 +国度 +国发 +国法 +国防 +国防报 +国防部 +国防部长 +国防法 +国防观 +国防军 +国防林 +国防绿 +国防日 +国防司 +国防系 +国防园 +国房 +国风 +国父 +国富民安 +国富民强 +国歌 +国歌声 +国格 +国共 +国故 +国管局 +国光村 +国航 +国号 +国合 +国后 +国花 +国画 +国画家 +国画室 +国画系 +国画展 +国槐 +国徽 +国会 +国会山 +国魂 +国货 +国籍 +国籍法 +国计民生 +国际 +国际部 +国际裁判 +国际场 +国际队 +国际法 +国际歌 +国际公法 +国际公制 +国际共运 +国际馆 +国际化 +国际会 +国际级 +国际奖 +国际局 +国际联盟 +国际篇 +国际私法 +国际台 +国际象棋 +国际型 +国际性 +国际音标 +国际制 +国际周 +国际主义 +国际纵队 +国家 +国家标准 +国家裁判 +国家栋梁 +国家队 +国家股 +国家机关 +国家机器 +国家级 +国家教委 +国家局 +国家室 +国家税 +国家所有 +国家制式 +国将不国 +国交 +国交昌运 +国脚 +国教 +国界 +国界线 +国境 +国境点 +国境线 +国酒 +国军 +国君 +国库 +国库部 +国库券 +国乐 +国礼 +国力 +国力队 +国力式微 +国立 +国立市 +国联 +国路 +国旅 +国骂 +国贸 +国贸局 +国贸科 +国门 +国棉 +国棉厂 +国民 +国民党 +国民党员 +国民宫 +国民经济 +国民军 +国民收入 +国民新党 +国民性 +国民政府 +国名 +国内 +国内部 +国内法 +国内化 +国内外 +国难 +国难当头 +国难日 +国鸟 +国破家亡 +国旗 +国旗班 +国企 +国企办 +国器 +国强民富 +国情 +国庆 +国庆节 +国庆日 +国球 +国权 +国人 +国色 +国色天香 +国殇 +国商 +国省道 +国史 +国士 +国事 +国事访问 +国势 +国是 +国手 +国书 +国术 +国术会 +国税 +国税局 +国台办 +国泰 +国泰民安 +国体 +国铁 +国统矿 +国统区 +国投 +国土 +国土报 +国土局 +国土厅 +国外 +国王 +国王队 +国威 +国文 +国无宁日 +国务 +国务部 +国务卿 +国务委员 +国务院 +国务院令 +国学 +国学家 +国宴 +国药 +国药城 +国医 +国仪 +国议会 +国音 +国营 +国营企业 +国优 +国有 +国有股 +国有化 +国有民助 +国有制 +国语 +国语课 +国运 +国葬 +国贼 +国宅 +国债 +国债率 +国债券 +国者 +国政 +国政系 +国转非 +国资 +国资局 +国资委 +国子监 +果 +果柄 +果不其然 +果材 +果菜 +果茶 +果场 +果川 +果蒂 +果冻 +果断 +果断性 +果儿 +果饵 +果粉 +果脯 +果腹 +果干 +果敢 +果敢性 +果果 +果海 +果酱 +果胶 +果酒 +果决 +果壳箱 +果篮 +果料 +果料儿 +果林 +果林场 +果林业 +果洛 +果洛州 +果苗 +果木 +果木林 +果木园 +果能如此 +果农 +果皮 +果皮筒 +果皮箱 +果片 +果品 +果品厂 +果铺 +果区 +果然 +果然如此 +果仁 +果仁儿 +果肉 +果商 +果实 +果蔬 +果蔬脆片 +果蔬室 +果树 +果树园 +果酸 +果穗 +果糖 +果条 +果味香型 +果系 +果匣子 +果乡 +果香 +果心儿 +果业 +果园 +果园场 +果园区 +果园乡 +果园镇 +果园主 +果珍杯 +果真 +果汁 +果汁厂 +果枝 +果质 +果庄乡 +果子 +果子酱 +果子酒 +果子露 +果子盐 +椁木 +裹 +裹脚布 +裹进 +裹尸马革 +裹腿 +裹挟 +裹足不前 +过 +过把瘾 +过半 +过磅 +过不过时 +过不去 +过场 +过程 +过程论 +过秤 +过从 +过从甚密 +过村镇 +过错 +过错制 +过道 +过得去 +过得硬 +过电 +过冬 +过冬作物 +过度 +过渡 +过渡带 +过渡房 +过渡内阁 +过渡年 +过渡期 +过渡性 +过多 +过法 +过分 +过腹 +过关 +过关斩将 +过河拆桥 +过后 +过户 +过户费 +过活 +过火 +过激 +过继 +过家家 +过江龙 +过江之鲫 +过奖 +过街老鼠 +过街柳 +过街桥 +过街天桥 +过街通道 +过节 +过节费 +过境 +过境费 +过境国 +过境站 +过客 +过来 +过来人 +过廊 +过梁 +过量 +过磷酸钙 +过滤 +过滤罐 +过滤器 +过滤网 +过滤嘴 +过路 +过路财神 +过路车 +过路费 +过路人 +过虑 +过门 +过门儿 +过密型 +过敏 +过敏性 +过敏症 +过目 +过目不忘 +过目成诵 +过目难忘 +过牧 +过年 +过年节 +过期 +过桥费 +过去 +过人 +过人之处 +过日子 +过剩 +过剩论 +过失 +过时 +过世 +过手 +过速 +过堂 +过堂风 +过厅 +过头 +过头话 +过头粮 +过往 +过往客 +过问 +过五关 +过西镇 +过细 +过眼 +过眼烟云 +过眼云烟 +过氧化氢 +过氧化物 +过夜 +过意不去 +过瘾 +过硬 +过犹不及 +过于 +过云雨 +过载 +过早 +过张乏弛 +过账 +过招 +过重 +哈 +哈巴狗 +哈博罗内 +哈达 +哈德逊 +哈尔滨 +哈尔滨队 +哈尔滨市 +哈尔盖 +哈尔霍马 +哈方 +哈丰角 +哈佛 +哈工大 +哈哈 +哈哈大笑 +哈哈哈 +哈哈镜 +哈军工 +哈拉雷 +哈拉伊卜 +哈拉兹 +哈雷彗星 +哈利斯科 +哈密 +哈密顿圈 +哈密瓜 +哈密市 +哈蜜瓜 +哈尼族 +哈洽会 +哈欠 +哈萨克 +哈萨克族 +哈桑区 +哈市 +哈思山 +哈斯科沃 +哈铁 +哈铁局 +哈瓦那 +哈医大 +哈乙亥村 +哈站 +嗨 +孩 +孩儿 +孩提 +孩童 +孩子 +孩子家 +孩子气 +孩子头 +孩子王 +骸骨 +海 +海安 +海安市 +海安县 +海岸 +海岸带 +海岸带区 +海岸线 +海拔 +海百合 +海报 +海豹 +海北 +海边 +海边防 +海滨 +海冰 +海波 +海勃湾区 +海菜 +海参 +海参崴 +海参崴队 +海沧 +海草 +海测之声 +海查 +海产 +海产品 +海潮 +海潮坝 +海城 +海城市 +海船 +海床 +海大 +海带 +海胆 +海挡 +海岛 +海岛岸线 +海岛县 +海盗 +海盗船 +海得拉巴 +海德拉巴 +海堤 +海堤坝 +海堤围 +海底 +海底捞月 +海底捞针 +海地 +海地图 +海淀 +海淀区 +海雕 +海钓 +海防 +海防林 +海防林带 +海防区 +海防线 +海丰 +海风 +海杆 +海港 +海港区 +海埂 +海沟 +海狗 +海关 +海关法 +海关厅 +海龟 +海涵 +海航 +海合会 +海和会 +海河 +海河湾 +海河湾村 +海红果 +海红蜜 +海红树 +海华 +海魂 +海魂衫 +海货 +海基导弹 +海基会 +海缉处 +海监 +海疆 +海椒市街 +海角天涯 +海禁 +海景 +海警 +海军 +海军蓝 +海军呢 +海军省 +海口 +海口市 +海寇 +海枯石烂 +海况 +海葵 +海阔天空 +海阔云舒 +海拉尔 +海拉法 +海兰 +海兰江 +海蓝 +海蓝色 +海缆 +海浪 +海狸 +海狸鼠 +海里 +海里凡 +海力 +海蛎 +海蛎子 +海连路 +海联会 +海粮 +海量 +海了去了 +海林市 +海林镇 +海岭 +海陵 +海流 +海流河乡 +海流图乡 +海龙 +海陆空 +海路 +海滦河 +海伦市 +海轮 +海螺 +海洛因 +海马 +海鳗 +海门 +海米 +海绵 +海绵垫 +海绵刷 +海绵体 +海绵田 +海面 +海内 +海内外 +海南 +海南岛 +海南省 +海南戏 +海难 +海鸟 +海宁 +海牛 +海牛队 +海鸥 +海派 +海泡石 +海盆 +海平面 +海平线 +海气 +海鞘 +海区 +海瑞墓 +海鳃 +海扇 +海商 +海商法 +海裳杯 +海上 +海神 +海神节 +海生 +海狮 +海狮队 +海蚀 +海市蜃楼 +海事 +海事处 +海事局 +海誓山盟 +海兽 +海鼠 +海水 +海水面 +海水浴 +海斯队 +海松 +海损 +海獭 +海滩 +海棠 +海棠花 +海棠树 +海塘 +海涛 +海桐花 +海图 +海涂 +海豚 +海豚泳 +海外 +海外版 +海弯 +海湾 +海碗 +海王星 +海味 +海温 +海虾 +海峡 +海鲜 +海鲜楼 +海相 +海相沉积 +海象 +海校 +海啸 +海协 +海协会 +海蟹 +海欣 +海兴县 +海星 +海熊 +海秀路 +海巡队 +海牙 +海盐 +海盐县 +海蜒 +海宴 +海晏县 +海燕 +海洋 +海洋法 +海洋观 +海洋馆 +海洋局 +海洋能 +海洋年 +海洋权 +海洋生物 +海洋所 +海洋戏 +海洋学 +海洋学家 +海鹞式 +海印队 +海鹰 +海鱼 +海域 +海员 +海原 +海原县 +海源 +海月水母 +海运 +海运界 +海运局 +海韵 +海葬 +海枣 +海藻 +海战 +海战史 +海蜇 +海蜇皮 +海蜇头 +海珍品 +海震 +海政 +海制品 +海州区 +海州湾 +海猪 +海庄 +海庄村 +海子 +亥 +骇怪 +骇人听闻 +骇异 +害 +害胺 +害病 +害虫 +害处 +害鸟 +害农 +害怕 +害群之马 +害人 +害人不浅 +害人虫 +害臊 +害兽 +害羞 +氦 +酣 +酣畅 +酣畅淋漓 +酣梦 +酣然 +酣睡 +酣甜 +酣战 +憨 +憨憨 +憨厚 +憨劲 +憨态 +憨态可掬 +憨外秀中 +憨笑 +憨直 +鼾声 +邗江 +邗江县 +含 +含苞 +含苞待放 +含苞欲放 +含嗔轻诉 +含尘量 +含垢忍辱 +含含糊糊 +含糊 +含糊其词 +含糊其辞 +含混 +含混不清 +含金量 +含咀 +含泪 +含量 +含磷量 +含硫分 +含硫量 +含泥量 +含片 +含片式 +含铅量 +含情脉脉 +含绒量 +含绒率 +含沙量 +含沙射影 +含山县 +含漱剂 +含水 +含水层 +含水量 +含水率 +含水云 +含炭量 +含碳量 +含糖度 +含糖量 +含笑 +含笑九泉 +含辛茹苦 +含羞 +含羞草 +含羞带笑 +含蓄 +含血喷人 +含盐量 +含氧量 +含饴弄孙 +含义 +含意 +含英咀华 +含油量 +含有 +含冤 +含蕴 +邯 +邯大西街 +邯郸 +邯郸市 +邯郸县 +邯郸学步 +邯峰 +邯钢 +邯农 +邯山区 +函 +函大 +函电 +函告 +函购 +函件 +函授 +函授班 +函授部 +函授大学 +函授课 +函授生 +函数 +函数线 +函询 +涵 +涵洞 +涵盖 +涵盖面 +涵管 +涵江 +涵养 +涵养林 +涵养区 +涵义 +涵蕴 +涵闸 +焓 +寒 +寒蝉 +寒颤 +寒潮 +寒碜 +寒窗 +寒带 +寒冬 +寒冬腊月 +寒风 +寒风料峭 +寒光 +寒号虫 +寒极 +寒假 +寒噤 +寒菊 +寒苦 +寒来暑往 +寒冷 +寒流 +寒露 +寒毛 +寒梅 +寒门 +寒凝 +寒疟 +寒气 +寒峭 +寒区 +寒趣 +寒热 +寒色 +寒山 +寒山寺 +寒舍 +寒湿 +寒士 +寒暑 +寒暑表 +寒暑假 +寒酸 +寒酸气 +寒酸状 +寒天 +寒微 +寒武纪 +寒心 +寒暄 +寒暄语 +寒鸦 +寒鸭 +寒夜 +寒衣 +寒意 +寒意料峭 +寒战 +寒症 +韩 +韩币 +韩城 +韩城市 +韩村河 +韩方 +韩岗 +韩岗镇 +韩国 +韩国队 +韩国籍 +韩军 +韩商 +韩食 +韩元 +韩庄 +罕 +罕见 +罕克拉 +罕闻 +罕有 +罕有所闻 +喊 +喊道 +喊话 +喊叫 +喊叫声 +喊声 +喊冤叫屈 +汉 +汉巴大桥 +汉白玉 +汉柏 +汉堡 +汉堡包 +汉堡市 +汉朝 +汉城 +汉城市 +汉川 +汉川市 +汉传 +汉代 +汉丹 +汉丰镇 +汉福德厂 +汉赋 +汉华 +汉皇 +汉奸 +汉简 +汉江 +汉晋 +汉剧 +汉剧团 +汉口 +汉口站 +汉陵 +汉民 +汉末 +汉墓 +汉诺威 +汉诺威市 +汉阙 +汉人 +汉诗 +汉寿 +汉寿县 +汉书 +汉水 +汉唐 +汉王 +汉魏 +汉文 +汉武 +汉武帝 +汉姓 +汉学 +汉学家 +汉学界 +汉学史 +汉学系 +汉学者 +汉阳 +汉阳区 +汉译 +汉阴 +汉印 +汉英 +汉语 +汉语拼音 +汉语系 +汉语言 +汉源县 +汉正街 +汉中 +汉中门 +汉中市 +汉子 +汉字 +汉字机 +汉字库 +汉族 +汉族人 +汗 +汗斑 +汗滴 +汗褂 +汗碱 +汗脚 +汗津津 +汗浸浸 +汗孔 +汗流浃背 +汗流满面 +汗马功劳 +汗毛 +汗牛充栋 +汗青 +汗如雨下 +汗衫 +汗湿 +汗水 +汗水淋漓 +汗腺 +汗颜 +汗液 +汗珠 +汗珠儿 +汗珠子 +汗渍 +旱 +旱魃为虐 +旱冰 +旱冰场 +旱冰鞋 +旱船 +旱床 +旱稻 +旱地 +旱改水 +旱害 +旱极 +旱季 +旱浇田 +旱井 +旱涝 +旱涝保收 +旱粮 +旱柳 +旱路 +旱魔 +旱农 +旱情 +旱区 +旱伞 +旱獭 +旱田 +旱象 +旱烟 +旱烟袋 +旱烟管 +旱秧田 +旱育稀植 +旱垣 +旱灾 +旱作区 +悍匪 +悍将 +悍然 +悍然不顾 +捍 +捍疆卫国 +捍卫 +捍卫者 +焊 +焊缝 +焊工 +焊管厂 +焊痕 +焊花 +焊接 +焊接件 +焊料 +焊钳 +焊枪 +焊丝 +焊条 +焊锡 +焊药 +颔 +颔首 +憾 +憾事 +撼 +撼动 +撼人心魄 +撼天动地 +翰林 +翰林院 +翰墨 +瀚海 +夯 +夯歌 +夯实 +夯土 +夯土层 +夯砣 +杭 +杭城 +杭大 +杭二棉 +杭纺 +杭嘉湖 +杭锦旗 +杭菊 +杭剧 +杭州 +杭州路 +杭州市 +杭州湾 +航 +航班 +航标 +航标灯 +航标区 +航材 +航测 +航程 +航船 +航次 +航道 +航道局 +航道区 +航渡 +航港 +航管 +航海 +航海灯 +航海法 +航海家 +航海图 +航海学家 +航海业 +航后 +航机 +航迹 +航空 +航空兵 +航空处 +航空队 +航空港 +航空界 +航空局 +航空母舰 +航空器 +航空史 +航空线 +航空信 +航空业 +航空业者 +航空员 +航空展 +航空站 +航路 +航民村 +航模 +航母 +航炮 +航速 +航天 +航天部 +航天城 +航天飞机 +航天界 +航天局 +航天器 +航天桥 +航天史 +航天员 +航天站 +航务 +航线 +航向 +航校 +航星队 +航行 +航行预试 +航油 +航运 +航运界 +航运局 +航运量 +航运业 +航运站 +航站 +航站楼 +航站区 +沆瀣一气 +蒿草 +蒿子 +蒿子秆 +薅 +蚝油 +毫 +毫安 +毫不 +毫不迟疑 +毫不动摇 +毫不费力 +毫不讳言 +毫不客气 +毫不利己 +毫不留情 +毫不相干 +毫不犹豫 +毫发 +毫克 +毫厘 +毫毛 +毫米 +毫米波 +毫米汞柱 +毫米数 +毫秒 +毫升 +毫瓦 +毫微米 +毫无 +毫无办法 +毫无道理 +毫无二致 +毫无顾忌 +毫无顾虑 +毫无来由 +毫无例外 +毫无疑问 +毫无疑义 +毫无用处 +毫针 +豪 +豪夺巧取 +豪放 +豪放不羁 +豪放派 +豪放者 +豪福 +豪富 +豪歌壮鼓 +豪横 +豪华 +豪华化 +豪华团 +豪华型 +豪华游 +豪杰 +豪举 +豪客 +豪迈 +豪门 +豪气 +豪强 +豪情 +豪情壮志 +豪商 +豪商巨贾 +豪绅 +豪爽 +豪侠 +豪兴 +豪言 +豪言壮语 +豪饮 +豪雨 +豪语 +豪宅 +豪猪 +豪壮 +嚎 +嚎啕 +壕 +壕沟 +壕坡 +濠江 +好 +好八连 +好榜样 +好报 +好比 +好不 +好不容易 +好吃 +好吃懒做 +好处 +好处费 +好大喜功 +好歹 +好懂 +好动 +好斗 +好端端 +好多 +好恶 +好法 +好感 +好高骛远 +好高鹜远 +好过 +好汉 +好好 +好好儿 +好好好 +好好坏坏 +好好先生 +好喝 +好话 +好坏 +好几 +好家伙 +好景不长 +好久 +好看 +好客 +好莱坞 +好赖 +好路率 +好片 +好评 +好奇 +好奇心 +好气儿 +好强 +好球 +好人 +好人好事 +好人家 +好人主义 +好日子 +好容易 +好色 +好生 +好生生 +好声好气 +好胜 +好胜心 +好使 +好事 +好事多磨 +好事者 +好手 +好受 +好书 +好书奖 +好耍 +好说 +好说歹说 +好似 +好天儿 +好听 +好听话 +好头 +好玩 +好望角 +好为人师 +好戏 +好戏连台 +好像 +好消息 +好笑 +好些 +好心 +好心人 +好性儿 +好学 +好言 +好言好语 +好言相劝 +好样 +好异 +好逸恶劳 +好意 +好意思 +好友 +好运 +好在 +好战 +好找 +好者 +好整以暇 +好转 +好转率 +好自为之 +好走 +郝 +号 +号兵 +号称 +号角 +号令 +号码 +号码机 +号脉 +号名 +号声 +号手 +号数 +号啕大哭 +号头 +号外 +号型 +号音 +号召 +号召力 +号召书 +号召者 +号志灯 +号子 +号子声 +浩 +浩白 +浩大 +浩荡 +浩繁 +浩瀚 +浩瀚无涯 +浩瀚无垠 +浩浩 +浩浩荡荡 +浩浩淼淼 +浩浩然 +浩浩汤汤 +浩劫 +浩茫 +浩淼 +浩淼无涯 +浩渺 +浩气 +浩气长存 +浩然 +浩然之气 +浩如烟海 +浩叹 +浩特 +浩子口 +耗 +耗材 +耗电 +耗电量 +耗费 +耗竭 +耗尽 +耗能 +耗时 +耗损 +耗用 +耗油 +耗油率 +耗资 +耗资量 +耗子 +耗子屎 +耗子药 +皓首穷经 +皓月 +皓月当空 +呵 +呵斥 +呵佛骂祖 +呵呵 +呵护 +呵叻府 +呵气成霜 +呵欠 +呵痒 +喝 +喝彩 +喝彩声 +喝茶 +喝斥 +喝道 +喝酒 +喝酒钱 +喝令 +喝六呼么 +喝声 +喝问 +嗬 +嗬哟 +禾 +禾本科 +禾草 +禾秆 +禾家村 +禾苗 +禾木旁儿 +禾山乡 +合 +合办 +合瓣花冠 +合抱 +合璧 +合编 +合并 +合并案 +合并症 +合不拢嘴 +合唱 +合唱队 +合唱团 +合称 +合成 +合成氨 +合成词 +合成类 +合成器 +合成染料 +合成石油 +合成树脂 +合成系 +合成纤维 +合成橡胶 +合订 +合订本 +合而为一 +合二而一 +合二为一 +合法 +合法化 +合法权 +合法性 +合肥 +合肥市 +合凤裙 +合格 +合格兵 +合格率 +合格品 +合格者 +合格证 +合格证费 +合共 +合股 +合规性 +合乎 +合欢 +合欢花 +合伙 +合伙人 +合计 +合计数 +合剂 +合家 +合家欢 +合家欢聚 +合建 +合江 +合江省 +合江县 +合脚 +合金 +合金钢 +合金质 +合久必分 +合开 +合刊 +合口味 +合理 +合理合法 +合理化 +合理率 +合理性 +合力 +合练 +合流 +合龙 +合拢 +合霉素 +合谋 +合拍 +合浦还珠 +合气道 +合情 +合情合理 +合群 +合容 +合身 +合声 +合十 +合适 +合署 +合数 +合算 +合体 +合同 +合同处 +合同额 +合同法 +合同费 +合同工 +合同号 +合同化 +合同款 +合同期 +合同商 +合同书 +合同制 +合围 +合宪性 +合写 +合兴乡 +合行 +合眼 +合演 +合阳 +合阳县 +合叶 +合页 +合一 +合宜 +合议 +合议厅 +合议庭 +合议制 +合译 +合意 +合营 +合影 +合咏 +合用 +合约 +合运动 +合葬 +合照 +合辙 +合众国 +合著 +合资 +合资厂 +合资方 +合资企业 +合纵连横 +合奏 +合作 +合作部 +合作处 +合作方 +合作化 +合作局 +合作期 +合作区 +合作社 +合作社部 +合作声 +合作史 +合作网 +合作者 +合作制 +何 +何案 +何必 +何必当初 +何不 +何尝 +何尝不可 +何处 +何等 +何地 +何方 +何坊村 +何妨 +何干 +何故 +何苦 +何况 +何来 +何乐不为 +何乐之有 +何年 +何其 +何去何从 +何人 +何日 +何如 +何时 +何事 +何首乌 +何台子村 +何谓 +何物 +何须 +何许人 +何许人也 +何以 +何用 +何月 +何在 +何曾 +何者 +何止 +何种 +何足挂齿 +和 +和蔼 +和蔼可亲 +和裁会 +和畅 +和而不同 +和风 +和风桥 +和风细雨 +和服 +和歌 +和歌山 +和光同尘 +和好 +和好如初 +和合 +和合学 +和合雅俗 +和和气气 +和缓 +和会 +和魂洋才 +和解 +和解派 +和局 +和刻本 +和乐 +和林格尔 +和龙 +和龙市 +和美 +和面 +和鸣 +和睦 +和睦相处 +和暖 +和盘托出 +和平 +和平北路 +和平村 +和平鸽 +和平宫 +和平共处 +和平奖 +和平街 +和平郡 +和平里 +和平路 +和平门 +和平棋 +和平区 +和平权 +和平谈判 +和平乡 +和平新党 +和棋 +和气 +和气生财 +和亲 +和善 +和尚 +和尚头 +和生行 +和声 +和式 +和事老 +和数 +和顺 +和顺县 +和谈 +和田 +和田河 +和田市 +和田县 +和婉 +和文 +和稀泥 +和弦 +和县 +和谐 +和谐感 +和兴 +和煦 +和颜悦色 +和衣而睡 +和议 +和易 +和约 +和悦 +和衷 +和衷共济 +河 +河岸 +河坝 +河蚌 +河北 +河北梆子 +河北村 +河北队 +河北区 +河北省 +河北团 +河北乡 +河北杨 +河北镇 +河边 +河滨 +河槽 +河汊 +河汊子 +河池 +河池市 +河川 +河床 +河唇 +河道 +河道化 +河堤 +河底 +河东 +河东村 +河东区 +河段 +河坊村 +河肥 +河港 +河工 +河沟 +河谷 +河贵乡 +河间 +河间市 +河街乡 +河津 +河津市 +河口 +河口县 +河口乡 +河狸 +河里 +河流 +河流乡 +河流镇 +河柳 +河卵石 +河马 +河面 +河内 +河南 +河南梆子 +河南店 +河南队 +河南畈村 +河南省 +河南团 +河南坠子 +河泥 +河畔 +河坡 +河清海晏 +河曲 +河曲县 +河渠 +河渠乡 +河沙 +河沙堆 +河沙路 +河山 +河山村 +河身 +河神 +河势 +河水 +河顺镇 +河滩 +河滩地 +河塘 +河套 +河田镇 +河豚 +河外星系 +河湾 +河湾里村 +河网 +河网化 +河务局 +河西 +河西村 +河西区 +河西乡 +河西镇 +河西走廊 +河系 +河下 +河蟹 +河心 +河沿 +河沿庄村 +河晏水清 +河阳镇 +河药 +河鱼 +河源 +河源市 +河源站 +河运 +河闸 +河州 +阂 +核 +核爆 +核爆炸 +核拨 +核裁军 +核查 +核查点 +核查队 +核查团 +核查员 +核查组 +核磁 +核磁共振 +核磁检查 +核呆 +核弹 +核弹头 +核蛋白 +核导弹 +核岛 +核电 +核电厂 +核电机组 +核电界 +核电站 +核订 +核定 +核动力 +核对 +核对者 +核讹诈 +核儿 +核二院 +核发 +核发证书 +核反应 +核反应堆 +核废料 +核符 +核辐射 +核苷酸 +核工程 +核工业 +核工业部 +核工业城 +核果 +核红 +核黄素 +核基地 +核计 +核计划 +核技术 +核减 +核禁试 +核竞赛 +核聚变能 +核军备 +核科学家 +核扩散 +核力 +核力量 +核裂变 +核垄断 +核能 +核能力 +核潜艇 +核清 +核燃料 +核仁 +核实 +核实率 +核实验 +核试 +核试区 +核试验 +核试验区 +核收 +核素 +核酸 +核算 +核算点 +核算价 +核算室 +核糖 +核桃 +核桃虫 +核桃壳 +核桃林 +核桃仁 +核桃肉 +核桃树 +核威慑 +核威胁 +核武 +核武库 +核武器 +核武器化 +核武器库 +核物理 +核物理所 +核销 +核心 +核心办 +核心层 +核心点 +核心区 +核心组 +核选择 +核验 +核阅 +核战争 +核政策 +核装置 +核准 +核准费 +核准权 +核资 +核子 +核子反应 +核子力 +核子能 +核子武器 +荷 +荷包 +荷包蛋 +荷池 +荷尔蒙 +荷方 +荷负 +荷花 +荷花淀派 +荷花坪 +荷花嘴乡 +荷兰 +荷兰病 +荷兰豆 +荷兰队 +荷兰盾 +荷兰籍 +荷兰王国 +荷兰猪 +荷藕 +荷枪实弹 +荷枪跃马 +荷塘 +荷叶 +荷衣面 +荷载 +荷阵 +荷重 +涸泽而渔 +涸辙之鲋 +盒 +盒带 +盒底 +盒饭 +盒盖 +盒式 +盒式带 +盒装 +盒装酒 +盒子 +盒子枪 +菏 +菏泽 +菏泽市 +颌下腺 +貉 +貉绒 +貉子 +阖家 +阖家欢乐 +阖家团聚 +阖家团圆 +阖家幸福 +阖上 +贺 +贺匾 +贺春 +贺词 +贺辞 +贺村 +贺电 +贺函 +贺家山 +贺金 +贺卡 +贺卡式 +贺兰 +贺兰山 +贺兰县 +贺礼 +贺联 +贺年 +贺年卡 +贺年片 +贺岁 +贺岁杯 +贺岁卡 +贺岁片 +贺岁喜剧 +贺喜 +贺信 +贺幛 +褐 +褐矮星 +褐斑病 +褐红色 +褐家鼠 +褐马鸡 +褐煤 +褐色 +褐炭 +褐铁矿 +褐藻 +褐棕色 +赫 +赫—伯法 +赫尔辛基 +赫赫 +赫赫功绩 +赫赫巍巍 +赫赫有名 +赫鸠 +赫拉特 +赫鲁晓夫 +赫伦文 +赫罗诺夫 +赫然 +赫然而怒 +赫泽普丁 +赫哲族 +赫兹 +鹤 +鹤壁市 +鹤发鸡皮 +鹤发童颜 +鹤峰 +鹤峰县 +鹤岗 +鹤岗市 +鹤立鸡群 +鹤庆 +鹤庆县 +鹤群 +鹤山 +鹤山市 +鹤望兰 +鹤溪 +鹤嘴镐 +壑 +黑 +黑暗 +黑白 +黑白分明 +黑白胶片 +黑白片 +黑斑 +黑斑病 +黑斑蚊 +黑板 +黑板报 +黑板刷 +黑帮 +黑豹 +黑不溜秋 +黑茶 +黑潮 +黑车 +黑沉沉 +黑绸 +黑瓷 +黑岛镇 +黑道 +黑地 +黑点 +黑店 +黑貂 +黑洞 +黑洞洞 +黑豆 +黑豆峪村 +黑发 +黑发人 +黑方 +黑非洲 +黑粉病 +黑钙土 +黑工 +黑沟 +黑狗 +黑咕隆冬 +黑咕隆咚 +黑箍 +黑管 +黑锅 +黑海 +黑河 +黑河市 +黑褐色 +黑黑 +黑黑苍苍 +黑黑的 +黑黑压压 +黑红 +黑乎乎 +黑胡椒 +黑糊糊 +黑户 +黑话 +黑桦 +黑货 +黑家鼠 +黑胶绸 +黑金 +黑晶 +黑颈鹤 +黑客 +黑口 +黑牢 +黑老九 +黑里寨 +黑里寨镇 +黑脸 +黑脸种 +黑亮 +黑龙队 +黑龙港 +黑龙江 +黑龙江队 +黑龙江街 +黑龙江省 +黑龙江团 +黑鲈 +黑路 +黑绿黑绿 +黑绿色 +黑马 +黑麦 +黑麦草 +黑霉 +黑米 +黑面 +黑名单 +黑墨水 +黑木 +黑木耳 +黑幕 +黑奴 +黑袍 +黑啤 +黑啤酒 +黑漂 +黑漆漆 +黑棋 +黑钱 +黑枪 +黑黢黢 +黑热病 +黑人 +黑人区 +黑色 +黑色化 +黑色火药 +黑色金属 +黑色素 +黑色素瘤 +黑森林 +黑森州 +黑纱 +黑山 +黑山县 +黑山羊 +黑社会 +黑石礁 +黑石礁湾 +黑石寨 +黑市 +黑手 +黑手党 +黑瘦 +黑水 +黑松 +黑松驿乡 +黑穗病 +黑索今 +黑台镇 +黑炭 +黑滔滔 +黑陶 +黑陶文化 +黑体 +黑帖 +黑头 +黑土 +黑土地 +黑窝 +黑窝点 +黑钨矿 +黑瞎子 +黑匣子 +黑下脸 +黑线 +黑心 +黑信 +黑猩猩 +黑熊 +黑压压 +黑鸦 +黑眼珠 +黑叶猴 +黑页岩 +黑夜 +黑液 +黑液碱 +黑衣 +黑衣人 +黑鹰队 +黑影 +黑幽幽 +黑油山 +黑油油 +黑黝黝 +黑鱼 +黑玉 +黑云母 +黑云山 +黑枣 +黑藻 +黑账 +黑阵 +黑芝麻 +黑芝麻糊 +黑种 +黑竹 +黑子 +黑字 +黑嘴鸥 +嘿 +嘿嘿 +嘿嘿嘿 +痕 +痕迹 +很 +很多 +很快 +很难说 +很早以前 +狠 +狠毒 +狠狠 +狠狠心 +狠劲 +狠命 +狠心 +狠心肠 +狠心狼 +狠抓 +恨 +恨不得 +恨入骨髓 +恨事 +恨死 +恨之入骨 +亨源纸 +哼 +哼唱 +哼哈二将 +哼哼 +哼唷 +恒 +恒产 +恒齿 +恒等式 +恒定 +恒发 +恒丰裕行 +恒河 +恒河沙数 +恒久 +恒量 +恒山 +恒泰银号 +恒温 +恒心 +恒星 +恒星级 +恒星系 +恒指 +桁架 +横 +横暴 +横匾 +横标 +横滨 +横波 +横财 +横冲直闯 +横冲直撞 +横穿 +横传 +横吹 +横丹乡 +横倒竖歪 +横道河子 +横笛 +横店 +横渡 +横断面 +横断山 +横断山脉 +横队 +横额 +横放 +横飞 +横峰 +横峰县 +横幅 +横杆 +横纲级 +横格纸 +横膈膜 +横亘 +横贡缎 +横贡呢 +横贯 +横滚 +横过 +横横竖竖 +横祸 +横加 +横加干涉 +横加干预 +横加指责 +横街镇 +横结肠 +横空 +横空出世 +横跨 +横栏 +横栏镇 +横梁 +横流 +横路山 +横路山镇 +横路乡 +横蛮 +横眉怒目 +横眉竖眼 +横逆 +横拍 +横排 +横批 +横剖面 +横七竖八 +横琴 +横肉 +横扫 +横扫千军 +横山 +横生枝节 +横尸 +横驶 +横事 +横竖 +横水乡 +横说竖说 +横躺竖卧 +横挑鼻子 +横纹肌 +横卧 +横县 +横线 +横向 +横斜 +横行 +横行霸道 +横行无忌 +横行作孽 +横须贺 +横溢 +横征暴敛 +横执 +横坐标 +衡宝 +衡估 +衡量 +衡南 +衡南县 +衡平法 +衡器 +衡山 +衡山路 +衡山县 +衡水 +衡水市 +衡阳 +衡阳市 +衡阳县 +轰 +轰动 +轰动性 +轰动一时 +轰轰 +轰轰烈烈 +轰轰隆隆 +轰击 +轰隆 +轰隆轰隆 +轰隆隆 +轰鸣 +轰鸣声 +轰然 +轰响 +轰炸 +轰炸机 +哄 +哄吵声 +哄传 +哄骗 +哄抢 +哄劝 +哄然大笑 +哄抬 +哄堂大笑 +哄吓 +哄笑 +訇然 +烘 +烘干 +烘烤 +烘篮 +烘笼 +烘炉 +烘漆厂 +烘托 +烘箱 +烘云托月 +烘制 +弘法 +弘光 +弘图 +弘扬 +弘愿 +红 +红10师 +红11师 +红11团 +红12师 +红1军团 +红27军 +红2师 +红3军团 +红4军 +红4师 +红安 +红安县 +红案 +红白事 +红白喜事 +红斑狼疮 +红榜 +红包 +红宝石 +红参 +红餐 +红灿灿 +红茶 +红场 +红潮 +红尘 +红澄澄 +红绸 +红筹 +红筹股 +红唇 +红蛋 +红党 +红道 +红道道 +红得发紫 +红灯 +红灯笼 +红灯区 +红靛 +红豆 +红豆杉 +红帆 +红矾 +红方 +红粉 +红格 +红汞 +红古堡 +红骨髓 +红光光 +红光满面 +红果 +红果儿 +红海 +红海村 +红海省 +红海州 +红河 +红河谷 +红河州 +红褐色 +红鹤 +红红的 +红红谷 +红红火火 +红红绿绿 +红狐 +红花 +红花草 +红花草头 +红花村 +红花岗区 +红花山 +红花油 +红黄牌 +红火 +红货 +红极一时 +红角 +红教 +红巾起义 +红金龙队 +红景天 +红净 +红九连 +红酒 +红军 +红军团 +红军院 +红口白舌 +红利 +红莲 +红脸 +红粱 +红亮 +红林 +红磷 +红灵酊 +红铃虫 +红领巾 +红领章 +红柳 +红楼 +红绿灯 +红萝卜 +红螺 +红螺山 +红麻 +红帽 +红帽子 +红梅 +红梅赞 +红煤 +红霉素 +红棉 +红庙 +红庙李村 +红庙岭 +红模子 +红陌 +红墨水 +红木 +红男绿女 +红娘 +红牌 +红盘 +红袍 +红砒 +红皮书 +红皮症 +红啤酒 +红票 +红萍 +红扑扑 +红葡萄酒 +红七师 +红其拉甫 +红旗 +红旗岗 +红旗街 +红旗区 +红旗渠 +红旗手 +红旗招展 +红契 +红墙 +红桥 +红桥区 +红壤 +红壤陶 +红人 +红日 +红润 +红三军 +红三军团 +红三连 +红三叶 +红伞 +红色 +红色素 +红沙岩 +红纱 +红砂岩 +红山 +红山区 +红杉 +红杉树 +红烧 +红烧肉 +红苕 +红生 +红绳系足 +红十一团 +红十字 +红十字会 +红十字日 +红石 +红石乡 +红史 +红薯 +红薯面 +红薯田 +红树 +红树林 +红树区 +红水河畔 +红四军 +红松 +红松林 +红松洼 +红塔队 +红糖 +红藤 +红通通 +红彤彤 +红铜 +红头 +红头文件 +红头蝇 +红土 +红土地 +红土坡矿 +红外 +红外灯 +红外光 +红外技术 +红外线 +红五军 +红五军团 +红五连 +红五星 +红兮兮 +红细胞 +红霞 +红线 +红香圃 +红小兵 +红小豆 +红小鬼 +红心 +红锌矿 +红新月会 +红星 +红星村 +红星队 +红星路 +红猩猩 +红袖 +红学 +红学家 +红学界 +红血球 +红岩 +红岩村 +红岩队 +红岩坡 +红岩嘴 +红颜 +红眼 +红眼病 +红宴 +红艳 +红艳艳 +红雁池 +红样 +红药 +红药水 +红叶 +红一师 +红一团 +红衣 +红衣主教 +红缨枪 +红莹莹 +红鱼 +红原 +红原县 +红运 +红晕 +红枣 +红枣林 +红藻 +红掌 +红蜘蛛 +红肿 +红种人 +红烛 +红柱 +红专 +红专村 +红砖 +红砖黛瓦 +红装 +红嘴鸥 +宏 +宏编 +宏病毒 +宏博 +宏昌里 +宏大 +宏道镇 +宏定位 +宏恩 +宏构 +宏观 +宏观世界 +宏观性 +宏阔 +宏亮 +宏论 +宏命令 +宏农村 +宏赡 +宏天伟地 +宏图 +宏伟 +宏文 +宏远队 +宏愿 +宏旨 +泓 +洪 +洪城 +洪大 +洪道 +洪洞 +洪洞县 +洪都拉斯 +洪恩 +洪峰 +洪福 +洪福齐天 +洪湖 +洪湖市 +洪荒 +洪家拳 +洪家嘴乡 +洪江 +洪江市 +洪涝 +洪亮 +洪量 +洪流 +洪流滚滚 +洪炉 +洪门 +洪魔 +洪汝河 +洪山 +洪山乡 +洪势 +洪水 +洪水猛兽 +洪水期 +洪水位 +洪水乡 +洪武 +洪熙官 +洪雅县 +洪音迭传 +洪灾 +洪泽 +洪泽湖 +洪泽县 +洪钟 +虹 +虹彩 +虹储 +虹口 +虹口区 +虹膜 +虹桥 +虹雯 +虹吸管 +虹吸现象 +虹鳟鱼 +鸿 +鸿福 +鸿沟 +鸿鹄 +鸿鹄之志 +鸿毛 +鸿门宴 +鸿蒙 +鸿篇 +鸿篇巨制 +鸿儒 +鸿图 +鸿雁 +鸿雁传书 +鸿运 +鸿爪 +蕻菜 +侯 +侯爵 +侯马 +侯马市 +侯门如海 +侯鸟 +侯爷 +侯月 +喉 +喉癌 +喉擦音 +喉风 +喉管 +喉结 +喉咙 +喉气管 +喉塞音 +喉舌 +喉头 +喉炎 +喉音 +猴 +猴儿 +猴年马月 +猴皮筋儿 +猴拳 +猴群 +猴声 +猴手猴脚 +猴头 +猴戏 +猴子 +吼 +吼叫 +吼叫声 +吼三喝四 +吼声 +后 +后八家村 +后八里庄 +后半辈子 +后半场 +后半段 +后半期 +后半生 +后半夜 +后帮跟 +后备 +后备金 +后备军 +后备箱 +后背 +后辈 +后边 +后步 +后部 +后舱 +后藏 +后场 +后车斗 +后车之鉴 +后撤 +后尘 +后陈庄村 +后程 +后窗 +后代 +后代人 +后爹 +后冬 +后盾 +后发优势 +后发制人 +后方 +后防 +后防线 +后福 +后富户 +后盖 +后盖板 +后跟 +后顾之忧 +后果 +后过渡期 +后汉 +后汉书 +后杭爱省 +后河 +后河乡 +后话 +后患 +后患无穷 +后悔 +后悔不迭 +后悔莫及 +后会有期 +后记 +后继乏人 +后继无人 +后继有人 +后继者 +后架 +后江村 +后脚 +后襟 +后劲 +后进 +后进村 +后进生 +后景 +后龛村 +后空翻 +后来 +后来居上 +后来人 +后来者 +后刘 +后刘乡 +后路 +后掠角 +后轮 +后妈 +后门 +后面 +后母 +后脑 +后脑勺 +后脑勺儿 +后脑勺子 +后年 +后娘 +后怕 +后排 +后蟠桃村 +后妻 +后期 +后起 +后起之秀 +后勤 +后勤部 +后勤处 +后勤局 +后勤组 +后人 +后人乘凉 +后任 +后山 +后晌 +后身 +后生 +后生可畏 +后生小子 +后世 +后市 +后事 +后事之师 +后视镜 +后视图 +后手 +后嗣 +后隋 +后隋村 +后台 +后台老板 +后唐 +后堂 +后天 +后天门 +后天性 +后头 +后土 +后腿 +后退 +后委 +后委会 +后卫 +后卫线 +后溪 +后现代 +后厢 +后续 +后学 +后延 +后腰 +后业 +后移 +后遗症 +后已 +后裔 +后引法 +后影 +后于 +后园 +后援 +后援团 +后缘 +后院 +后院起火 +后宰门 +后则腰村 +后宅镇 +后账 +后者 +后肢 +后缀 +后坐 +后坐力 +后座 +厚 +厚爱 +厚薄 +厚薄规 +厚此薄彼 +厚待 +厚道 +厚度 +厚墩墩 +厚古薄今 +厚厚 +厚厚的 +厚厚实实 +厚积 +厚积薄发 +厚茧 +厚今薄古 +厚礼 +厚朴 +厚生 +厚生省 +厚实 +厚实实 +厚势 +厚望 +厚颜无耻 +厚谊 +厚意 +厚重 +厚重感 +候 +候补 +候补委员 +候车 +候车室 +候车厅 +候车亭 +候车站 +候船室 +候工室 +候机 +候机楼 +候机室 +候机厅 +候机者 +候客室 +候鸟 +候鸟型 +候审 +候温 +候选 +候选国 +候选人 +候选者 +候诊 +候诊室 +候诊椅 +乎 +乎夫楼 +呼 +呼哧 +呼嗒 +呼风唤雨 +呼喊 +呼喊声 +呼号 +呼和浩特 +呼吼 +呼呼 +呼呼地 +呼唤 +呼饥号寒 +呼机 +呼家楼 +呼叫 +呼叫器 +呼救 +呼救器 +呼救声 +呼救者 +呼啦 +呼啦啦 +呼兰 +呼兰河域 +呼兰县 +呼噜 +呼伦贝尔 +呼玛 +呼盟 +呼朋唤友 +呼哨 +呼声 +呼市 +呼天抢地 +呼图壁 +呼图克图 +呼吸 +呼吸道 +呼吸器 +呼吸系统 +呼吸相通 +呼吸与共 +呼啸 +呼幺喝六 +呼应 +呼吁 +呼吁书 +呼之欲出 +呼之欲跃 +忽 +忽地 +忽而 +忽忽 +忽忽不乐 +忽喇喇 +忽冷忽热 +忽略 +忽米 +忽明忽暗 +忽然 +忽闪 +忽闪忽闪 +忽视 +忽微 +忽阴忽晴 +忽悠 +忽左忽右 +滹沱 +滹沱河 +滹沱河畔 +囫囵 +囫囵吞枣 +弧 +弧垂 +弧度 +弧光 +弧光灯 +弧圈 +弧圈球 +弧线 +弧线球 +弧形 +弧形槽 +狐 +狐步 +狐臭 +狐蝠 +狐火 +狐假虎威 +狐狸 +狐狸精 +狐狸皮 +狐狸尾巴 +狐狸崽 +狐朋狗友 +狐群狗党 +狐臊 +狐死首丘 +狐仙 +狐疑不决 +胡 +胡编 +胡编乱造 +胡茬 +胡扯 +胡吹 +胡蝶 +胡豆 +胡匪 +胡蜂 +胡瓜 +胡话 +胡家滩 +胡家圩村 +胡椒 +胡椒粉 +胡椒面 +胡搅 +胡搅蛮缠 +胡来 +胡兰 +胡兰村 +胡兰镇 +胡里胡涂 +胡力斯台 +胡乱 +胡萝卜 +胡萝卜素 +胡麻 +胡闹 +胡琴 +胡说 +胡说八道 +胡思乱想 +胡台镇 +胡桃 +胡桃肉 +胡天 +胡同 +胡同口 +胡涂 +胡涂乱抹 +胡须 +胡言 +胡言乱语 +胡杨 +胡杨林 +胡杨木 +胡杨树 +胡柚 +胡张乡 +胡枝子 +胡志明市 +胡诌 +胡子 +胡作非为 +壶 +壶盖 +壶关 +壶关县 +壶口 +壶流河 +壶内 +壶中 +壶嘴 +斛 +湖 +湖岸 +湖北 +湖北村 +湖北队 +湖北省 +湖北省籍 +湖北团 +湖笔 +湖边 +湖滨 +湖泊 +湖底 +湖东 +湖东乡 +湖光 +湖光山色 +湖光塔影 +湖光秀色 +湖剧 +湖口 +湖口县 +湖面 +湖南 +湖南队 +湖南路 +湖南省 +湖南团 +湖畔 +湖前河 +湖区 +湖群 +湖人队 +湖色 +湖水 +湖泗乡 +湖塘 +湖塘镇 +湖田镇 +湖湾 +湖西 +湖西村 +湖西河 +湖心 +湖心岛 +湖心亭 +湖盐 +湖羊 +湖阳市 +湖云塘 +湖泽 +湖沼 +湖中 +湖州 +湖州市 +湖绉 +猢狲 +葫 +葫瓜 +葫芦 +葫芦巴 +葫芦池 +葫芦岛 +葫芦岛市 +葫芦科 +葫芦蔓 +葫芦藓 +葫蔓藤 +煳 +槲鸫 +槲寄生 +槲栎 +糊 +糊糊 +糊糊饭 +糊精 +糊口 +糊里糊涂 +糊料 +糊弄 +糊泡 +糊墙纸 +糊涂 +糊涂虫 +糊涂蛋 +糊涂人 +糊涂一时 +糊涂账 +糊味 +糊状物 +蝴蝶 +蝴蝶斑 +蝴蝶谷 +蝴蝶花 +蝴蝶结 +蝴蝶扣 +蝴蝶树 +蝴蝶瓦 +蝴蝶装 +虎 +虎背 +虎背熊腰 +虎彪彪 +虎伥 +虎痴 +虎胆 +虎耳草 +虎坊桥 +虎符 +虎骨 +虎骨酒 +虎虎生风 +虎虎生气 +虎虎生威 +虎画 +虎将 +虎劲 +虎踞 +虎踞龙盘 +虎踞龙蟠 +虎口 +虎口拔牙 +虎口脱险 +虎口余生 +虎狼 +虎林 +虎林市 +虎林园 +虎门 +虎门港 +虎年 +虎皮 +虎气 +虎钳 +虎肉 +虎山 +虎视眈眈 +虎视鹰瞵 +虎岁 +虎头 +虎头虎脑 +虎头帽 +虎头蛇尾 +虎头鞋 +虎头崖 +虎图 +虎娃 +虎威 +虎尾 +虎尾春冰 +虎啸 +虎啸声 +虎穴 +虎牙 +虎疫 +虎园 +虎跃龙腾 +虎崽 +虎仔 +虎子 +虎字头儿 +浒山 +唬人 +琥珀 +琥珀酸 +琥珀型 +互 +互帮 +互帮互利 +互帮互学 +互帮互助 +互补 +互补性 +互不 +互不相让 +互斥 +互促共荣 +互促互动 +互动 +互动力 +互动式 +互动性 +互访 +互感器 +互感应 +互换 +互惠 +互惠待遇 +互济 +互济性 +互救 +互救式 +互利 +互利性 +互励 +互连 +互联 +互联网 +互联网络 +互联网页 +互联网站 +互谅互让 +互贸区 +互勉 +互派 +互聘 +互评 +互让 +互市 +互通 +互通式 +互通有无 +互为 +互为表里 +互为因果 +互相 +互信 +互忆 +互异性 +互质数 +互助 +互助点 +互助会 +互助社 +互助县 +互助性 +互助组 +户 +户办 +户部 +户长 +户户 +户籍 +户籍地 +户籍警 +户籍卡 +户籍科 +户籍室 +户均 +户口 +户口本 +户口簿 +户口册 +户口卡 +户口区 +户兰村 +户名 +户勤区 +户区 +户枢不蠹 +户数 +户头 +户外 +户县 +户型 +户养 +户拥有率 +户证科 +户政 +户政处 +户政处长 +户政科 +户主 +户主名 +护 +护岸 +护岸林 +护坝 +护壁桩 +护兵 +护城河 +护持 +护齿素 +护村队 +护堤 +护垫 +护短 +护耳 +护法 +护封 +护肤品 +护肤油 +护符 +护工 +护轨 +护国 +护航 +护航舰 +护航型 +护盒 +护假者 +护肩 +护脚 +护具 +护栏 +护理 +护理部 +护理队 +护理费 +护理员 +护理院 +护林 +护林员 +护林站 +护灵 +护路林 +护目镜 +护农 +护坡 +护坡墙 +护旗手 +护墙 +护嫂 +护身法 +护身符 +护士 +护士长 +护士节 +护树 +护税 +护送 +护田林 +护头 +护腿 +护围 +护卫 +护卫队 +护卫队长 +护卫舰 +护卫艇 +护卫员 +护膝 +护校 +护胸 +护沿 +护养 +护翼 +护园人 +护照 +护照费 +护照者 +护罩 +护肘 +沪 +沪东 +沪东厂 +沪港机 +沪剧 +沪宁线 +沪市 +沪西 +沪浙皖 +沪指 +扈家庄 +花 +花白 +花斑癣 +花瓣 +花瓣儿 +花苞 +花被 +花边 +花边饺 +花边新闻 +花柄 +花布 +花菜 +花草 +花插 +花茶 +花铲 +花场 +花场峪村 +花朝月夕 +花车 +花城 +花池 +花池村 +花池子 +花丛 +花簇 +花大姐 +花带 +花旦 +花岛 +花灯 +花灯戏 +花蒂 +花点子 +花店 +花雕 +花都 +花都市 +花朵 +花萼 +花儿 +花繁叶茂 +花贩 +花房 +花费 +花粉 +花岗石 +花岗石材 +花岗岩 +花糕 +花梗 +花工 +花菇 +花骨朵 +花鼓 +花鼓舞 +花鼓戏 +花冠 +花棍舞 +花果 +花果山 +花海 +花好月圆 +花盒 +花红 +花红柳绿 +花红树绿 +花红叶绿 +花花草草 +花花肠子 +花花点子 +花花公子 +花花绿绿 +花花哨哨 +花花世界 +花环 +花卉 +花卉业 +花卉园 +花会 +花季 +花甲 +花甲乡 +花甲之年 +花价 +花架子 +花笺 +花笺传 +花笺记 +花剑 +花箭 +花匠 +花椒 +花轿 +花街柳巷 +花茎 +花径踅 +花镜 +花酒 +花卷 +花魁 +花篮 +花廊 +花蕾 +花梨木 +花里胡梢 +花里胡哨 +花脸 +花链 +花柳病 +花露 +花露水 +花榈木 +花落花开 +花落谁家 +花蜜 +花面狸 +花苗 +花名册 +花明柳暗 +花明楼 +花明楼镇 +花木 +花呢 +花鸟 +花鸟画 +花鸟画家 +花农 +花盘 +花炮 +花盆 +花棚 +花瓶 +花圃 +花谱 +花期 +花畦 +花扦儿 +花前月下 +花钱 +花枪 +花腔 +花墙 +花青色 +花青素 +花球 +花圈 +花拳 +花容玉貌 +花蕊 +花色 +花色品种 +花纱布 +花衫 +花哨 +花舌 +花神 +花生 +花生饼 +花生地 +花生果 +花生酱 +花生棵 +花生米 +花生仁 +花生油 +花石 +花石村 +花石乡 +花市 +花式 +花饰 +花室 +花术 +花束 +花树 +花丝 +花台 +花摊 +花坛 +花体 +花天酒地 +花厅 +花筒 +花头 +花土沟 +花团 +花团锦簇 +花托 +花纹 +花溪 +花溪区 +花溪乡 +花席 +花媳妇儿 +花县 +花乡 +花香 +花香菇 +花香鸟语 +花消 +花销 +花鞋 +花心 +花型 +花须 +花墟街 +花序 +花絮 +花押 +花芽 +花言巧语 +花眼 +花样 +花样刀 +花样队 +花样翻新 +花样游泳 +花药 +花椰菜 +花业 +花叶 +花影 +花园 +花园口 +花园口镇 +花园里 +花园路 +花园式 +花原头 +花展 +花账 +花障 +花招 +花招儿 +花枕 +花枝 +花枝招展 +花纸 +花种 +花轴 +花烛 +花柱 +花砖 +花籽 +花子 +花子儿 +华 +华澳 +华北 +华北局 +华北路 +华表 +华埠 +华埠镇 +华彩 +华池村 +华辞 +华达呢 +华大 +华诞 +华灯 +华灯初上 +华东 +华东局 +华东师大 +华俄 +华而不媚 +华而不实 +华尔街 +华尔兹 +华府 +华盖 +华盖木 +华工 +华贵 +华航 +华籍 +华界 +华晋 +华居 +华乐 +华乐街 +华乐团 +华雷斯 +华里 +华丽 +华领 +华罗庚 +华美 +华南 +华南虎 +华年 +华坪县 +华侨 +华侨界 +华清池 +华人 +华容县 +华容镇 +华沙 +华山 +华山路 +华山论剑 +华商 +华舍 +华舍镇 +华盛顿 +华盛顿州 +华石镇 +华释 +华亭 +华铜海式 +华屋 +华屋豪宅 +华西 +华西村 +华夏 +华夏鳗 +华欣 +华新 +华阳 +华阳镇 +华药 +华冶 +华衣 +华裔 +华阴市 +华蓥 +华蓥山 +华语 +华员会 +华约 +华岳 +华章 +华章锦绣 +华中 +华滋 +华族 +哗 +哗变 +哗哗 +哗哗哗 +哗啦 +哗啦哗啦 +哗啦啦 +哗然 +哗众 +哗众取宠 +铧犁 +滑 +滑板 +滑冰 +滑冰场 +滑冰馆 +滑冰赛 +滑冰者 +滑车 +滑车神经 +滑道 +滑动 +滑动摩擦 +滑动轴承 +滑杆 +滑竿 +滑稽 +滑稽剧团 +滑稽戏 +滑稽相 +滑降 +滑联 +滑溜 +滑溜溜 +滑轮 +滑轮车 +滑轮组 +滑落 +滑腻 +滑跑 +滑坡 +滑坡体 +滑润 +滑润油 +滑石 +滑石粉 +滑石片 +滑梯 +滑铁卢 +滑头 +滑头滑脑 +滑县 +滑翔 +滑翔机 +滑行 +滑行道 +滑雪 +滑雪板 +滑雪场 +滑雪队 +滑雪服 +滑雪界 +滑雪赛 +滑雪衫 +滑音 +滑子蘑 +化 +化成 +化敌为友 +化冻 +化二 +化肥 +化肥厂 +化粪池 +化工 +化工部 +化工厂 +化工大 +化工界 +化工局 +化工系 +化公为私 +化害为利 +化合 +化合价 +化合物 +化机 +化减 +化建 +化解 +化境 +化控 +化疗 +化疗药 +化瘤 +化隆 +化隆县 +化名 +化脓 +化钱 +化入 +化身 +化石 +化石区 +化石群 +化痰 +化铁炉 +化为 +化为灰烬 +化为泡影 +化为乌有 +化武 +化物 +化纤 +化纤布 +化纤厂 +化纤品 +化险为夷 +化学 +化学变化 +化学部 +化学厂 +化学场 +化学当量 +化学地雷 +化学镀 +化学反应 +化学肥料 +化学工业 +化学化 +化学会 +化学家 +化学能 +化学品 +化学式 +化学所 +化学武器 +化学系 +化学纤维 +化学性 +化学性质 +化学药品 +化学元素 +化学战 +化验 +化验单 +化验室 +化验台 +化验员 +化医 +化用 +化油器 +化淤 +化淤通络 +化雨春风 +化缘 +化整为零 +化州 +化州市 +化妆 +化妆品 +化妆师 +化妆室 +化装 +化作 +化做 +划 +划拨 +划不来 +划锄 +划船 +划得来 +划定 +划法 +划分 +划归 +划痕 +划花 +划价 +划桨 +划界 +划界法 +划块 +划片 +划破 +划清 +划入 +划伤 +划时代 +划水 +划算 +划艇 +划线 +划一 +划一不二 +划转 +划子 +画 +画案 +画板 +画报 +画报社 +画本 +画笔 +画饼充饥 +画布 +画册 +画成 +画传 +画船 +画地为牢 +画店 +画栋雕梁 +画法 +画舫 +画风 +画幅 +画稿 +画工 +画虎类狗 +画画 +画魂 +画集 +画技 +画夹 +画家 +画价 +画架 +画匠 +画角 +画境 +画具 +画具费 +画卷 +画绢 +画刊 +画库 +画框 +画廊 +画廊业 +画龙点睛 +画路 +画论 +画眉 +画梅集 +画面 +画名 +画派 +画皮 +画片 +画片儿 +画品 +画屏 +画谱 +画墙 +画情 +画趣 +画商 +画蛇添足 +画师 +画室 +画手 +画说 +画坛 +画堂 +画帖 +画亭 +画童 +画图 +画外 +画乡 +画像 +画像石 +画像砖 +画押 +画页 +画意 +画影像 +画语 +画语录 +画院 +画院派 +画展 +画折 +画者 +画脂镂冰 +画纸 +画质 +画中画 +画中有诗 +画轴 +画作 +话 +话把儿 +话本 +话别 +话柄 +话不投机 +话簿 +话茬 +话茬儿 +话儿 +话费 +话费单 +话锋 +话话 +话机 +话家常 +话剧 +话剧界 +话剧迷 +话剧热 +话剧史 +话剧所 +话剧团 +话剧院 +话剧院团 +话里带刺 +话里有话 +话梅 +话数站 +话说 +话题 +话筒 +话头 +话外音 +话务 +话务班 +话务费 +话务量 +话务室 +话务员 +话匣子 +话线 +话音 +话语 +话闸子 +话中有话 +桦川 +桦甸 +桦甸市 +桦南 +桦南县 +桦树 +桦树街 +桦树皮 +怀 +怀安县 +怀抱 +怀表 +怀才不遇 +怀诚 +怀春 +怀德 +怀德县 +怀古 +怀恨 +怀洪 +怀化 +怀化市 +怀集 +怀旧 +怀旧感 +怀旧念故 +怀来 +怀来县 +怀里 +怀恋 +怀慕 +怀念 +怀宁县 +怀仁堂 +怀柔 +怀柔县 +怀胎 +怀铁 +怀乡思亲 +怀想 +怀药 +怀疑 +怀疑论 +怀疑派 +怀疑者 +怀有 +怀远县 +怀孕 +怀中 +怀涿 +怀着 +徊 +淮 +淮安 +淮安城 +淮安市 +淮北 +淮北区 +淮北市 +淮菜 +淮城镇 +淮海 +淮海路 +淮海区 +淮海戏 +淮海中路 +淮河 +淮河路 +淮剧 +淮南 +淮南调 +淮南市 +淮委会 +淮西 +淮扬 +淮阳 +淮阴 +淮阴城 +淮阴籍 +淮阴市 +槐 +槐蚕 +槐豆 +槐花 +槐花蜜 +槐黄 +槐角 +槐米 +槐蜜 +槐秋 +槐树 +槐乡 +槐叶 +槐荫 +槐荫耆宿 +槐荫区 +槐汁 +踝关节 +坏 +坏处 +坏蛋 +坏东西 +坏分子 +坏官 +坏话 +坏疽 +坏人 +坏人坏事 +坏绅 +坏事 +坏书 +坏死 +坏死症 +坏血病 +坏帐 +坏账 +坏主意 +欢 +欢蹦乱跳 +欢畅 +欢唱 +欢城镇 +欢度 +欢歌 +欢歌笑语 +欢呼 +欢呼雀跃 +欢呼声 +欢欢乐乐 +欢欢实实 +欢欢喜喜 +欢叫声 +欢聚 +欢聚一堂 +欢快 +欢乐 +欢乐开怀 +欢乐曲 +欢乐树 +欢乐与共 +欢眉喜眼 +欢闹 +欢情 +欢庆 +欢声 +欢声笑语 +欢送 +欢送会 +欢谈 +欢腾 +欢天喜地 +欢舞 +欢喜 +欢喜岭 +欢笑 +欢笑声 +欢心 +欢欣 +欢欣鼓舞 +欢颜 +欢宴 +欢迎 +欢迎词 +欢迎辞 +欢迎会 +欢娱 +欢愉 +欢悦 +欢跃 +还 +还本 +还草 +还贷 +还贷额 +还贷率 +还给 +还魂 +还击 +还价 +还口 +还款 +还款率 +还款期 +还款数 +还礼 +还林 +还牧 +还清 +还施彼身 +还是 +还手 +还我河山 +还乡 +还乡河 +还乡团 +还箱 +还要 +还有 +还原 +还原剂 +还原论 +还原染料 +还原铁 +还原焰 +还愿 +还债 +还账 +还政于民 +还嘴 +环 +环靶 +环保 +环保碑 +环保部 +环保法 +环保界 +环保局 +环保日 +环保署 +环保型 +环保业 +环保站 +环抱 +环城 +环城路 +环岛 +环发 +环顾 +环湖 +环环 +环环相扣 +环节 +环节动物 +环节税 +环颈鸫 +环境 +环境部 +环境灯 +环境法 +环境日 +环境署 +环境厅 +环科所 +环流 +环路 +环幕 +环球 +环球网 +环绕 +环绕速度 +环认委 +环食 +环视 +环跳 +环围 +环委会 +环卫 +环卫处 +环卫工 +环卫局 +环线 +环行 +环行路 +环行线 +环形 +环眼 +环氧树脂 +环音 +环游 +环志 +环注委 +环状 +环状软骨 +环资委 +环子 +郇封村 +桓仁 +桓仁县 +桓台县 +寰岛队 +寰球 +寰宇 +缓 +缓兵之计 +缓步 +缓冲 +缓冲期 +缓冲器 +缓冲区 +缓存 +缓付 +缓和 +缓缓 +缓急 +缓减 +缓建 +缓降器 +缓缴 +缓解 +缓流 +缓慢 +缓慢性 +缓坡 +缓期 +缓释 +缓收 +缓手 +缓刑 +缓刑期 +缓征 +缓滞 +缓酌 +幻 +幻灯 +幻灯机 +幻灯片 +幻化 +幻景 +幻境 +幻觉 +幻灭 +幻术 +幻听 +幻想 +幻想国 +幻想曲 +幻象 +幻像 +幻影 +奂 +宦官 +唤 +唤起 +唤取 +唤头 +唤醒 +换 +换班 +换车 +换乘 +换代 +换防 +换房 +换肤霜 +换岗 +换工 +换换 +换汇 +换机 +换季 +换届 +换届会 +换句话说 +换料 +换流站 +换脑筋 +换气 +换气扇 +换钱 +换亲 +换取 +换人 +换上 +换算 +换位 +换文 +换洗 +换向 +换写 +换心人 +换型 +换血 +换言之 +换药 +换阅点 +浣 +浣熊 +浣濯 +涣 +涣然冰释 +涣散 +患 +患病 +患病率 +患处 +患得患失 +患儿 +患难 +患难夫妻 +患难与共 +患难者 +患难之交 +患有 +患者 +焕 +焕彩 +焕发 +焕然一新 +逭 +豢 +豢养 +荒 +荒败 +荒草 +荒村 +荒诞 +荒诞不经 +荒诞剧 +荒岛 +荒地 +荒废 +荒沟 +荒古 +荒寒 +荒湖 +荒秽 +荒火 +荒碱地 +荒郊 +荒老 +荒凉 +荒林 +荒岭 +荒路 +荒乱 +荒蛮 +荒蔓 +荒谬 +荒谬绝伦 +荒漠 +荒漠化 +荒漠区 +荒漠学 +荒年 +荒僻 +荒坡 +荒丘 +荒沙 +荒山 +荒山坡 +荒山秃岭 +荒山野岭 +荒时暴月 +荒疏 +荒水 +荒水面 +荒滩 +荒滩地 +荒唐 +荒无人烟 +荒芜 +荒烟 +荒野 +荒淫 +荒淫无耻 +荒原 +荒灾 +荒冢 +荒洲 +慌 +慌慌忙忙 +慌慌张张 +慌里慌张 +慌乱 +慌忙 +慌神儿 +慌手慌脚 +慌张 +皇 +皇朝 +皇城 +皇城根 +皇储 +皇道吉日 +皇帝 +皇岗 +皇宫 +皇宫戏 +皇姑 +皇姑井村 +皇姑区 +皇姑屯 +皇冠 +皇后 +皇皇 +皇家 +皇家宫苑 +皇军 +皇历 +皇粮 +皇陵 +皇亲国戚 +皇权 +皇上 +皇室 +皇叔 +皇太后 +皇太子 +皇天 +皇天后土 +皇位 +皇爷 +皇子 +皇族 +凰 +黄 +黄埃 +黄白色 +黄斑 +黄包车 +黄陂 +黄陂县 +黄壁庄 +黄骠马 +黄表纸 +黄菠萝 +黄檗罗 +黄檗罗树 +黄巢起义 +黄尘 +黄澄澄 +黄刺玫 +黄村 +黄疸 +黄岛 +黄岛区 +黄道 +黄道吉日 +黄帝 +黄帝城 +黄帝陵 +黄帝庙 +黄洞乡 +黄豆 +黄豆粉 +黄豆角 +黄毒 +黄赌毒 +黄渡 +黄渡镇 +黄发 +黄蜂 +黄蜂队 +黄冈 +黄冈市 +黄杠 +黄葛树 +黄骨髓 +黄瓜 +黄瓜秧 +黄广 +黄果树 +黄海 +黄蒿 +黄蒿梁 +黄河 +黄河口 +黄河路 +黄褐斑 +黄褐色 +黄鹤楼 +黄红颜鸟 +黄花 +黄花菜 +黄花岗 +黄花闺女 +黄花晚节 +黄花鱼 +黄花鱼苗 +黄花园 +黄骅 +黄骅港 +黄骅市 +黄骅县 +黄淮 +黄淮海 +黄昏 +黄计工 +黄继光连 +黄姜 +黄酱 +黄教 +黄巾起义 +黄金 +黄金村 +黄金档 +黄金分割 +黄金葛 +黄金壳 +黄金山 +黄金时代 +黄金时间 +黄金树 +黄金水道 +黄金屋 +黄荆 +黄酒 +黄桷树 +黄葵 +黄腊石 +黄蜡 +黄梨 +黄鹂 +黄历 +黄栗 +黄栗树 +黄连 +黄连木 +黄连素 +黄梁美梦 +黄梁梦 +黄粱美梦 +黄粱梦 +黄粱梦村 +黄粱梦镇 +黄粱一梦 +黄磷 +黄苓 +黄陵 +黄陵县 +黄龙 +黄龙洞 +黄龙伞盖 +黄龙山 +黄龙溪 +黄楼 +黄栌 +黄绿色 +黄萝卜 +黄麻 +黄麻起义 +黄毛丫头 +黄帽 +黄梅 +黄梅歌 +黄梅戏 +黄梅县 +黄梅雨 +黄焖 +黄米 +黄棉 +黄明胶 +黄漠漠 +黄南 +黄泥 +黄泥巴 +黄泥冲 +黄泥岗镇 +黄泥河 +黄泥河镇 +黄泥洼镇 +黄鸟 +黄牛 +黄牛党 +黄牌 +黄牌警告 +黄袍加身 +黄皮寡瘦 +黄皮书 +黄啤酒 +黄片 +黄埔 +黄埔港 +黄浦 +黄浦江 +黄浦江畔 +黄浦区 +黄芪 +黄旗镇 +黄桥 +黄芩 +黄曲霉菌 +黄泉 +黄壤 +黄热病 +黄绒绒的 +黄色 +黄色工会 +黄色文学 +黄色炸药 +黄沙 +黄砂 +黄山 +黄山市 +黄山松 +黄山乡 +黄山新村 +黄山站 +黄山嘴 +黄衫 +黄鳝 +黄狮村 +黄石 +黄石市 +黄柿乡 +黄鼠 +黄鼠狼 +黄水疮 +黄寺 +黄松峪乡 +黄潭村 +黄檀 +黄田 +黄铁矿 +黄铜 +黄铜矿 +黄铜色 +黄土 +黄土层 +黄土地 +黄土路 +黄土坡 +黄土区 +黄土庄 +黄委会 +黄萎病 +黄县 +黄巷楼 +黄歇口镇 +黄兴路 +黄锈病 +黄血盐 +黄岩 +黄岩城 +黄岩村 +黄岩区 +黄岩市 +黄羊 +黄杨 +黄洋界 +黄叶 +黄页 +黄莺 +黄油 +黄鼬 +黄鱼 +黄鱼村 +黄榆树 +黄玉 +黄源 +黄晕 +黄钟大吕 +黄种 +黄州 +黄州区 +黄洲乡 +黄竹 +黄庄村 +黄庄乡 +惶惶 +惶惶然 +惶惑 +惶恐 +惶恐不安 +惶恐滩 +湟水 +湟水河 +湟源县 +湟中县 +遑 +煌 +煌煌 +潢川 +潢川县 +璜塘镇 +璜土镇 +蝗虫 +蝗害 +蝗蝻 +蝗情 +蝗区 +蝗莺 +蝗灾 +磺胺 +磺胺脒 +磺胺噻唑 +簧 +簧片 +鳇 +鳇鱼 +恍 +恍惚 +恍恍忽忽 +恍恍惚惚 +恍然 +恍然大悟 +恍如 +恍如隔世 +恍若 +晃 +晃荡 +晃荡酒 +晃动 +晃晃荡荡 +晃晃悠悠 +谎 +谎报 +谎称 +谎花 +谎话 +谎价 +谎说 +谎言 +幌子 +灰 +灰暗 +灰白 +灰白色 +灰不溜秋 +灰尘 +灰尘肺 +灰沉沉 +灰调 +灰顶 +灰鹅 +灰发 +灰飞烟灭 +灰姑娘 +灰褐色 +灰鹤 +灰黑色 +灰化土 +灰黄 +灰黄霉素 +灰黄色 +灰灰 +灰浆 +灰烬 +灰鲸 +灰鲸鱼 +灰口铁 +灰阑 +灰椋鸟 +灰林鹗 +灰领 +灰溜溜 +灰绿色 +灰眉土脸 +灰霉病 +灰蒙蒙 +灰锰氧 +灰棉 +灰青 +灰雀 +灰色 +灰沙 +灰山鹑 +灰市 +灰鼠 +灰鼠皮 +灰铁 +灰头土脸 +灰土 +灰颓 +灰瓦 +灰乌乌 +灰喜鹊 +灰心 +灰心丧气 +灰鸭 +灰叶猴 +灰渣 +灰指甲 +灰质 +灰质炎 +诙 +诙谐 +恢 +恢复 +恢复肥 +恢复费 +恢复器 +恢复系 +恢复性 +恢河 +恢弘 +恢宏 +恢宏博大 +恢宏率意 +恢宏壮观 +恢恢 +挥 +挥笔 +挥臂 +挥斥方遒 +挥动 +挥发 +挥发酚 +挥发油 +挥杆 +挥戈 +挥汗如雨 +挥毫 +挥挥 +挥霍 +挥金如土 +挥泪 +挥拍 +挥拳 +挥洒 +挥洒自如 +挥师 +挥手 +挥舞 +挥写 +挥之不去 +挥之即去 +晖映 +珲春 +珲春市 +辉 +辉长岩 +辉钴矿 +辉煌 +辉煌夺目 +辉绿岩 +辉钼矿 +辉石 +辉腾锡勒 +辉锑矿 +辉铜矿 +辉县市 +辉耀 +辉耀村 +辉耀乡 +辉银矿 +辉映 +麾下 +徽 +徽班 +徽标 +徽菜 +徽调 +徽菇 +徽号 +徽记 +徽剧 +徽墨 +徽派 +徽商 +徽饰 +徽县 +徽学 +徽章 +徽州 +徽州市 +回 +回报 +回报率 +回避 +回避制 +回采 +回肠荡气 +回潮 +回车 +回车键 +回嗔作喜 +回城 +回程 +回程票 +回传 +回春 +回答 +回单 +回弹性 +回荡 +回到 +回电 +回返 +回防 +回访 +回复 +回复率 +回购 +回顾 +回顾性 +回顾展 +回光镜 +回归 +回归率 +回归热 +回归线 +回国 +回国率 +回函 +回航 +回合 +回贺 +回话 +回话者 +回还 +回黄转绿 +回辉村 +回火 +回击 +回家 +回教 +回教徒 +回敬 +回绝 +回扣 +回扣费 +回扣风 +回扣率 +回款额 +回款率 +回馈 +回来 +回廊 +回廊式 +回老家 +回历 +回流 +回龙村 +回龙山畔 +回笼 +回笼率 +回炉 +回路 +回落 +回马枪 +回民 +回眸 +回目 +回暖 +回迁 +回请 +回去 +回身 +回升 +回生 +回声 +回师 +回事 +回视 +回收 +回收率 +回收期 +回收站 +回守 +回首 +回水沟 +回水区 +回溯 +回天乏术 +回天无力 +回天之力 +回填 +回条 +回帖 +回头 +回头见 +回头客 +回头路 +回头率 +回头是岸 +回吐 +回望 +回位 +回味 +回味无穷 +回乡 +回响 +回想 +回销粮 +回心转意 +回信 +回形针 +回旋 +回旋度 +回旋曲 +回漩 +回忆 +回忆录 +回忆人 +回音 +回音壁 +回应 +回游 +回援 +回赠 +回执 +回转 +回转仪 +回族 +回族史 +洄水 +洄水段 +洄游 +茴香 +茴香豆 +茴鱼 +蛔虫 +悔 +悔不当初 +悔改 +悔过 +悔过书 +悔过自新 +悔恨 +悔棋 +悔悟 +悔之晚矣 +悔罪 +卉 +汇 +汇报 +汇报会 +汇报展 +汇编 +汇编本 +汇编程序 +汇编语言 +汇拨款 +汇藏 +汇差 +汇成 +汇倒 +汇兑 +汇兑商 +汇费 +汇合 +汇合处 +汇合点 +汇集 +汇寄 +汇价 +汇缴 +汇聚 +汇聚一堂 +汇款 +汇款单 +汇流 +汇流处 +汇率 +汇率制 +汇票 +汇入 +汇市 +汇算 +汇演 +汇展 +汇珍楼 +汇制 +汇总 +汇总表 +会 +会标 +会餐 +会操 +会昌 +会昌县 +会长 +会场 +会城镇 +会党 +会道门 +会东县 +会儿 +会费 +会费额 +会风 +会馆 +会海 +会合 +会后 +会话 +会话式 +会荒 +会徽 +会会 +会集 +会集区 +会计 +会计处 +会计法 +会计师 +会计室 +会计系 +会计学 +会计学系 +会计证 +会见 +会见厅 +会聚 +会聚透镜 +会刊 +会考 +会客 +会客室 +会客厅 +会礼 +会理县 +会猎 +会面 +会派 +会期 +会旗 +会前 +会庆 +会商 +会上 +会审 +会师 +会试 +会试录 +会所 +会谈 +会堂 +会厅 +会同 +会文山房 +会务 +会务费 +会务组 +会晤 +会晤站 +会心 +会心处 +会演 +会厌 +会厌软骨 +会议 +会议费 +会议楼 +会议室 +会议所 +会议厅 +会议庭 +会议性 +会议员 +会议桌 +会意 +会阴 +会友 +会余 +会元 +会员 +会员费 +会员国 +会员卡 +会员录 +会员证 +会员制 +会泽 +会展 +会战 +会章 +会诊 +会诊队 +会诊会 +会址 +会做人 +讳 +讳病忌医 +讳疾 +讳疾忌医 +讳莫如深 +讳言 +哕 +浍南 +浍史村 +绘 +绘画 +绘画史 +绘画厅 +绘画展 +绘声绘色 +绘声绘影 +绘图 +绘图板 +绘图本 +绘图卡 +绘图仪 +绘绣 +绘业 +绘艺 +绘影绘色 +绘影绘声 +绘制 +荟萃 +荟要 +诲 +诲人不倦 +诲淫诲盗 +桧柏 +桧仓 +桧仓郡 +烩 +烩面 +贿 +贿金 +贿赂 +贿赂案 +贿赂公行 +贿赂罪 +贿情 +贿选 +贿选案 +彗星 +彗星队 +晦暗 +晦气 +晦涩 +秽迹 +秽乱 +秽土 +秽闻 +秽行 +秽语 +惠 +惠安 +惠安县 +惠川 +惠存 +惠东 +惠而不费 +惠风和畅 +惠顾 +惠及 +惠灵顿 +惠卖 +惠农县 +惠水县 +惠西 +惠阳 +惠阳市 +惠泽 +惠州 +惠州市 +毁 +毁版 +毁长城者 +毁掉 +毁坏 +毁家纾难 +毁林 +毁灭 +毁灭论 +毁灭性 +毁弃 +毁容 +毁伤 +毁损 +毁于一旦 +毁誉 +毁誉参半 +毁约 +毁约率 +毁真 +慧 +慧黠 +慧心 +慧眼 +慧眼独具 +慧眼识才 +慧眼识珠 +慧中北里 +蕙 +昏 +昏暗 +昏惨惨 +昏沉 +昏沉沉 +昏倒 +昏定晨省 +昏黑 +昏花 +昏黄 +昏昏 +昏昏沉沉 +昏昏然 +昏昏欲睡 +昏厥 +昏君 +昏聩 +昏乱 +昏迷 +昏迷不醒 +昏然 +昏睡 +昏死 +昏天黑地 +昏头昏脑 +昏头胀脑 +昏头转向 +昏眩 +昏庸 +昏庸辈 +昏招 +昏者 +荤 +荤菜 +荤腥 +荤油 +婚 +婚变 +婚后 +婚假 +婚嫁 +婚介 +婚介所 +婚介业 +婚礼 +婚恋 +婚龄 +婚侣 +婚配 +婚期 +婚前 +婚庆 +婚丧嫁娶 +婚丧事 +婚纱 +婚纱照 +婚生子 +婚事 +婚书 +婚俗 +婚外恋 +婚外情 +婚宴 +婚姻 +婚姻法 +婚姻观 +婚约 +婚债 +阍 +浑 +浑蛋 +浑沌 +浑沌一片 +浑河 +浑厚 +浑黄 +浑浑噩噩 +浑江 +浑金璞玉 +浑茫 +浑穆 +浑朴 +浑然 +浑然不觉 +浑然不知 +浑然天成 +浑然无垠 +浑然谐调 +浑然一色 +浑然一体 +浑洒自如 +浑身 +浑水摸鱼 +浑俗和光 +浑天仪 +浑头浑脑 +浑象 +浑仪 +浑圆 +浑源 +浑源县 +浑重 +浑浊 +馄饨 +魂 +魂不附体 +魂不守舍 +魂儿 +魂飞魄散 +魂飞西天 +魂灵 +魂魄 +魂牵梦绕 +魂牵梦系 +魂牵梦萦 +魂兮归来 +魂萦梦绕 +诨号 +诨名 +混 +混成旅 +混蛋 +混沌 +混饭 +混纺 +混合 +混合苯 +混合金 +混合式 +混合体 +混合物 +混合型 +混合泳 +混合制 +混混沌沌 +混迹 +混交林 +混进 +混居 +混流式 +混乱 +混莽 +混凝土 +混日子 +混入 +混声 +混世魔王 +混事 +混双 +混水摸鱼 +混同 +混为一谈 +混委会 +混淆 +混淆黑白 +混淆视听 +混淆是非 +混血儿 +混血人 +混养 +混用 +混杂 +混战 +混珠 +混装 +混浊 +劐 +豁 +豁出 +豁出去 +豁达 +豁达大度 +豁口 +豁朗 +豁亮 +豁免 +豁免权 +豁然 +豁然开朗 +豁子 +豁嘴 +活 +活宝 +活报剧 +活蹦乱跳 +活便 +活到老 +活地狱 +活动 +活动表 +活动场 +活动点 +活动费 +活动分子 +活动家 +活动课 +活动类 +活动力 +活动量 +活动期 +活动桥 +活动区 +活动日 +活动室 +活动月 +活动站 +活动者 +活动证 +活动周 +活儿 +活法 +活分 +活佛 +活该 +活化 +活化剂 +活化石 +活化资本 +活话 +活活 +活火 +活火山 +活鸡 +活计 +活祭 +活结 +活剧 +活口 +活扣 +活劳动 +活力 +活立木 +活灵活现 +活龙活现 +活路 +活络 +活门 +活命 +活命钱 +活命之恩 +活泼 +活泼泼 +活菩萨 +活期 +活气 +活契 +活人 +活塞 +活塞杆 +活塞环 +活生生 +活石灰 +活树 +活水 +活体 +活土层 +活脱 +活脱脱 +活物 +活鲜 +活现 +活像 +活性 +活性剂 +活性染料 +活性炭 +活性氧 +活血 +活血化淤 +活页 +活疫苗 +活源 +活跃 +活跃期 +活质 +活猪 +活捉 +活字 +活字版 +活字典 +活字合金 +活字印刷 +活罪 +火 +火把 +火把节 +火版 +火棒 +火暴 +火爆 +火并 +火柴 +火柴厂 +火柴盒 +火柴盒式 +火场 +火车 +火车票 +火车头 +火车头队 +火车站 +火成岩 +火炽 +火地岛 +火地岛省 +火点 +火电 +火电厂 +火电站 +火堆 +火儿 +火烽村 +火夫 +火工品 +火管枪 +火罐 +火光 +火光烛天 +火锅 +火海 +火海刀山 +火红 +火候 +火狐 +火狐狸 +火花 +火花队 +火花塞 +火化 +火化率 +火浣布 +火患 +火鸡 +火急 +火急火燎 +火剪 +火碱 +火箭 +火箭弹 +火箭队 +火箭炮 +火箭筒 +火箭乡 +火井 +火警 +火镜 +火居道士 +火具 +火炬 +火炬办 +火炬树 +火炬松 +火炕 +火坑 +火控 +火筷子 +火辣 +火辣辣 +火力 +火力点 +火力发电 +火力圈 +火力网 +火烈鸟 +火龙 +火笼 +火炉 +火炉城 +火炉坪乡 +火炉子 +火冒三丈 +火煤 +火苗 +火篾 +火魔 +火捻 +火奴鲁鲁 +火炮 +火盆 +火漆 +火漆印 +火气 +火器 +火钳 +火枪 +火墙 +火墙子 +火情 +火球 +火区 +火热 +火山 +火山岛 +火山地震 +火山灰 +火山口 +火山石 +火山岩 +火扇 +火伤 +火上加油 +火上浇油 +火烧 +火烧火燎 +火烧眉毛 +火烧山 +火烧云 +火舌 +火神 +火绳 +火石 +火石岗村 +火势 +火树金花 +火树银花 +火速 +火炭 +火塘 +火膛 +火头 +火头军 +火头上 +火土灰 +火腿 +火腿肠 +火腿肉 +火网 +火卫二 +火卫三 +火卫一 +火温 +火险 +火线 +火硝 +火星 +火星车 +火星儿 +火性 +火眼 +火眼金睛 +火焰 +火焰山 +火药 +火药库 +火药枪 +火药桶 +火药味 +火印 +火油炉 +火源 +火灾 +火灾区 +火葬 +火中取栗 +火种 +火种刀耕 +火洲 +火烛 +火柱 +火砖 +火灼灼 +火字旁儿 +伙 +伙伴 +伙伴儿 +伙伴国 +伙房 +伙夫 +伙计 +伙食 +伙食费 +伙同 +钬 +或 +或褒或贬 +或多或少 +或然率 +或然性 +或是 +或许 +或者 +货 +货比三家 +货币 +货币地租 +货币化 +货币局 +货币量 +货币率 +货币学 +货币主义 +货币资本 +货仓式 +货舱 +货场 +货畅其流 +货车 +货船 +货单 +货柜 +货柜车 +货机 +货价 +货架 +货架子 +货款 +货郎 +货郎担 +货郎鼓 +货郎图 +货流 +货轮 +货票 +货品 +货签 +货区楼 +货色 +货摊 +货梯 +货位 +货位费 +货物 +货箱 +货样 +货邮 +货源 +货运 +货运单 +货运界 +货运链 +货运量 +货运室 +货运业 +货运站 +货栈 +货站 +货真价实 +货值 +货种 +货主 +货主方 +获 +获得 +获得性 +获得者 +获奖 +获奖榜 +获奖率 +获奖数 +获奖项 +获奖者 +获救 +获利 +获鹿 +获赔 +获票率 +获评 +获取 +获胜 +获胜者 +获释 +获悉 +获益 +获益匪浅 +获知 +获准 +祸 +祸不单行 +祸从口出 +祸从天降 +祸端 +祸福 +祸福相倚 +祸根 +祸国殃民 +祸害 +祸患 +祸及 +祸乱 +祸起萧墙 +祸事 +祸首 +祸水 +祸祟 +祸胎 +祸心 +祸殃 +祸因 +惑 +惑人耳目 +霍 +霍巴特 +霍布逊湖 +霍地 +霍尔果斯 +霍尔木兹 +霍里霍川 +霍利节 +霍乱 +霍普镇 +霍邱县 +霍去病泉 +霍然 +霍山 +霍山县 +霍州 +讥 +讥薄 +讥讽 +讥诮 +讥笑 +击 +击败 +击毙 +击沉 +击穿 +击打 +击倒 +击鼓 +击鼓督阵 +击毁 +击剑 +击节 +击节而歌 +击垮 +击溃 +击落 +击破 +击球 +击伤 +击汰 +击退 +击弦机 +击响 +击掌 +击中 +击中要害 +叽叽唧唧 +叽叽喳喳 +叽里咕噜 +饥 +饥饱无时 +饥不择食 +饥肠辘辘 +饥饿 +饥饿感 +饥饿症 +饥寒 +饥寒交加 +饥寒交迫 +饥荒 +饥馑 +饥渴 +饥劳 +饥民 +机 +机播 +机不可失 +机舱 +机长 +机场 +机场路 +机车 +机车厂 +机车组 +机船 +机床 +机床厂 +机电 +机电部 +机电井 +机电票 +机电系 +机顶盒 +机动 +机动车 +机动船 +机动费 +机动科 +机动粮 +机动权 +机动性 +机队 +机帆船 +机防 +机房 +机耕 +机耕路 +机工 +机构 +机关 +机关报 +机关干部 +机关刊物 +机关枪 +机关委 +机管局 +机号 +机徽 +机会 +机会主义 +机机 +机架 +机检 +机件 +机降 +机焦 +机井 +机警 +机具 +机壳 +机坑 +机库 +机理 +机立窑 +机灵 +机灵鬼 +机炉岛 +机率 +机米 +机密 +机敏 +机鸣声 +机谋 +机内码 +机能 +机炮 +机炮舱 +机票 +机器 +机器厂 +机器翻译 +机器人 +机器人学 +机器声 +机器油 +机器字 +机枪 +机枪手 +机群 +机上 +机身 +机声 +机师 +机时 +机收 +机收队 +机手 +机枢 +机台 +机体 +机头 +机外 +机尾 +机位 +机务 +机务处 +机务段 +机务连 +机箱 +机械 +机械泵 +机械部 +机械厂 +机械车 +机械处 +机械化 +机械局 +机械论 +机械能 +机械人 +机械师 +机械式 +机械手 +机械厅 +机械系 +机械性 +机械性能 +机械业 +机械运动 +机心 +机芯 +机型 +机修 +机修厂 +机修工 +机绣 +机言巧语 +机要 +机要局 +机要员 +机宜 +机翼 +机油 +机遇 +机缘 +机运连 +机载 +机制 +机制板 +机制化 +机制论 +机制性 +机制纸 +机智 +机种 +机主 +机杼 +机砖厂 +机子 +机组 +肌 +肌病 +肌肤 +肌骨 +肌腱 +肌节 +肌理 +肌力 +肌瘤 +肌麻痹 +肌肉 +肌肉节 +肌体 +肌纤维 +芨芨草 +鸡 +鸡肠鼠肚 +鸡场 +鸡场主 +鸡翅 +鸡虫得失 +鸡雏 +鸡蛋 +鸡蛋黄 +鸡飞蛋打 +鸡粪 +鸡公车 +鸡公岭村 +鸡冠 +鸡冠菜 +鸡冠花 +鸡冠石 +鸡冠子 +鸡霍乱 +鸡口牛后 +鸡肋 +鸡零狗碎 +鸡笼 +鸡毛 +鸡毛掸子 +鸡毛蒜皮 +鸡毛信 +鸡苗 +鸡鸣 +鸡鸣狗盗 +鸡内金 +鸡皮 +鸡皮疙瘩 +鸡皮鹤发 +鸡婆 +鸡犬不留 +鸡犬不宁 +鸡犬升天 +鸡肉 +鸡舍 +鸡尸牛从 +鸡虱 +鸡首 +鸡丝 +鸡摊 +鸡汤 +鸡啼 +鸡头 +鸡头梗 +鸡头米 +鸡尾酒 +鸡瘟 +鸡窝 +鸡窝寒 +鸡西 +鸡西市 +鸡心 +鸡胸 +鸡血石 +鸡血藤 +鸡眼 +鸡杂 +鸡栅 +鸡爪疯 +鸡爪爪 +迹 +迹地 +迹象 +唧唧 +唧唧喳喳 +唧啾 +姬百合塔 +姬路市 +屐痕 +积 +积案 +积弊 +积冰 +积病 +积不相能 +积存 +积存数 +积淀 +积恶成习 +积犯 +积肥 +积分 +积分榜 +积分表 +积分赛 +积分学 +积灰 +积毁销骨 +积极 +积极分子 +积极向上 +积极性 +积金 +积聚 +积聚型 +积劳成疾 +积累 +积累工 +积累性 +积木 +积年 +积贫积弱 +积欠 +积弱 +积弱积贫 +积少成多 +积石 +积石山 +积食不化 +积数 +积水 +积水场 +积水潭 +积炭 +积温 +积温区 +积习 +积习难改 +积蓄 +积蓄量 +积雪 +积压 +积压货 +积压品 +积以时日 +积羽沉舟 +积雨云 +积雨云团 +积怨 +积云 +积蕴 +积攒 +积重难返 +积铢累寸 +积资 +基 +基本 +基本词 +基本词汇 +基本点 +基本电荷 +基本法 +基本工资 +基本功 +基本建设 +基本粒子 +基本矛盾 +基本面 +基本上 +基本系 +基本形 +基本型 +基本性 +基材 +基藏 +基藏本 +基藏库 +基藏书库 +基层 +基层队 +基层科 +基层司 +基层网 +基础 +基础层 +基础代谢 +基础教育 +基础科学 +基础课 +基础理论 +基础论 +基础网 +基础性 +基底 +基地 +基地带 +基地化 +基地式 +基点 +基调 +基督 +基督教 +基督徒 +基多 +基肥 +基辅 +基辅市 +基干 +基干民兵 +基极 +基加利 +基价 +基建 +基建办 +基建处 +基建队 +基建工 +基脚 +基金 +基金部 +基金额 +基金会 +基金委 +基酒 +基坑 +基里巴斯 +基联会 +基隆 +基律纳 +基民盟 +基片 +基期 +基色 +基石 +基数 +基特加 +基廷 +基团 +基西米市 +基希讷乌 +基线 +基线量 +基性岩 +基岩 +基业 +基因 +基因库 +基因羊 +基因组 +基音 +基于 +基扎 +基站 +基址 +基轴 +基准 +基准点 +基准价 +基准日 +基准线 +基座 +绩 +绩溪 +绩效 +绩效低者 +绩效高者 +绩优股 +嵇中散集 +犄角 +犄角之势 +缉捕 +缉查 +缉毒 +缉毒署 +缉获 +缉拿 +缉私 +缉私处 +缉私队 +缉私队员 +缉私科 +缉私艇 +缉私战 +畸 +畸变 +畸低 +畸轻畸重 +畸形 +畸形儿 +畸重畸轻 +跻入 +跻身 +稽查 +稽查处 +稽查队 +稽查队员 +稽查局 +稽查科 +稽查所 +稽查组 +稽核 +稽留热 +齑 +激 +激昂 +激昂慷慨 +激荡 +激动 +激动不已 +激动人心 +激发 +激发态 +激发源 +激奋 +激愤 +激光 +激光灯 +激光机 +激光器 +激光束 +激光头 +激化 +激活 +激将法 +激进 +激进党 +激进派别 +激进主义 +激浪 +激励 +激励力 +激励性 +激烈 +激烈性 +激灵 +激流 +激流汹涌 +激流勇进 +激酶 +激怒 +激起 +激切 +激情 +激赏 +激素 +激素类 +激扬 +激越 +激越奋进 +激增 +激战 +激浊扬清 +羁 +羁绊 +羁縻 +羁押 +羁押室 +及 +及第 +及锋而试 +及格 +及格率 +及格线 +及其 +及时 +及时性 +及时雨 +及早 +及至 +吉 +吉安 +吉安县 +吉泊村 +吉卜赛 +吉卜赛人 +吉布提 +吉达 +吉大港 +吉德万 +吉尔吉斯 +吉方 +吉岗村 +吉汗加 +吉化 +吉家坪村 +吉碱 +吉剧 +吉莱巴 +吉利 +吉林 +吉林队 +吉林街 +吉林省 +吉林市 +吉林团 +吉隆 +吉隆坡 +吉隆县 +吉伦特 +吉伦特省 +吉马良斯 +吉普 +吉普车 +吉普赛人 +吉庆 +吉人天相 +吉日 +吉萨 +吉萨省 +吉首 +吉首市 +吉水县 +吉四 +吉他 +吉他手 +吉铁 +吉祥 +吉祥村 +吉祥如意 +吉祥寺 +吉祥物 +吉星乡 +吉凶 +吉凶祸福 +吉兆 +岌 +岌岌 +岌岌可危 +汲汲 +汲纳 +汲取 +汲水 +汲冢镇 +级 +级别 +级差 +级次 +级距 +级数 +即 +即便 +即或 +即将 +即景 +即景生情 +即可 +即刻 +即令 +即墨 +即墨市 +即期 +即日 +即若 +即时 +即使 +即使如此 +即事 +即位 +即席 +即兴 +即兴诗 +即兴之作 +极 +极板 +极大 +极大化值 +极大值 +极地 +极点 +极度 +极端 +极端主义 +极而言之 +极负盛誉 +极富 +极冠 +极光 +极化 +极乐鸟 +极乐世界 +极力 +极量 +极了 +极目 +极目四顾 +极目眺望 +极目远眺 +极目远望 +极贫村 +极贫乡 +极品 +极其 +极圈 +极权主义 +极为 +极限 +极限值 +极刑 +极性 +极右 +极右派 +极右翼 +极值 +极至 +极致 +极左 +极坐标 +亟 +亟待 +亟待解决 +亟盼 +亟须 +亟需 +佶 +急 +急变 +急病 +急不可待 +急不可耐 +急步 +急茬 +急匆匆 +急促 +急电 +急飞 +急风暴雨 +急腹症 +急公好义 +急功近利 +急乎乎 +急火火 +急急 +急急火火 +急急忙忙 +急件 +急进 +急进派 +急救 +急救包 +急救车 +急救盒 +急救室 +急救险 +急救箱 +急救药 +急就章 +急剧 +急遽 +急流 +急流勇进 +急流勇退 +急脉缓灸 +急慢性 +急忙 +急难 +急迫 +急起直追 +急切 +急人所急 +急人之难 +急如星火 +急若流星 +急三火四 +急刹 +急刹车 +急驶 +急事 +急速 +急兔 +急湍 +急湍湍 +急弯 +急危难 +急务 +急袭 +急先锋 +急行军 +急性 +急性病 +急性子 +急需 +急需者 +急用 +急于 +急于求成 +急造 +急躁 +急诊 +急诊费 +急诊科 +急诊室 +急症 +急支糖浆 +急智 +急中生智 +急转弯 +急转直下 +疾 +疾病 +疾病谱 +疾步 +疾驰 +疾恶如仇 +疾风 +疾风暴雨 +疾风劲草 +疾呼 +疾患 +疾家 +疾苦 +疾驶 +疾首蹙额 +疾亡 +疾徐 +疾言厉色 +疾阻 +棘 +棘刺 +棘轮 +棘皮动物 +棘手 +棘爪 +集 +集安 +集安市 +集并 +集藏 +集成 +集成电路 +集成度 +集成块 +集萃 +集粹 +集大成者 +集电极 +集港 +集合 +集合论 +集合式 +集合体 +集会 +集火 +集结 +集结地 +集锦 +集聚 +集刊 +集流 +集流环 +集贸 +集贸市场 +集美 +集纳 +集宁 +集权 +集群式 +集热管 +集散 +集散地 +集散点 +集市 +集市贸易 +集疏运 +集数 +集水区 +集思广益 +集体 +集体工 +集体工业 +集体股 +集体户 +集体化 +集体经济 +集体拳 +集体所有 +集体舞 +集体性 +集体照 +集体主义 +集团 +集团案 +集团层 +集团公司 +集团化 +集团军 +集团式 +集团型 +集外 +集贤县 +集县 +集线器 +集训 +集训班 +集训场 +集训地 +集训队 +集训队员 +集训期 +集腋成裘 +集邮 +集邮家 +集邮界 +集邮联 +集邮品 +集邮圈 +集邮史 +集邮展 +集邮者 +集约 +集约化 +集约经营 +集约型 +集镇 +集中 +集中地 +集中度 +集中区 +集中营 +集中制 +集众思 +集主 +集装箱 +集装箱船 +集资 +集资房 +集资费 +集资款 +集资热 +集子 +嫉 +嫉妒 +嫉恶如仇 +嫉恨 +嫉贤妒能 +楫 +蒺藜 +蒺藜丛 +辑 +辑录 +辑入 +辑选 +瘠 +瘠薄 +籍 +籍贯 +几 +几比 +几朝几夕 +几多 +几何 +几何级数 +几何体 +几何图形 +几何学 +几乎 +几近 +几经 +几经周折 +几率 +几内亚 +几内亚湾 +几时 +几维鸟 +几易其稿 +己 +己队 +己方 +己见 +己内酰胺 +己任 +己巳 +己所不欲 +挤 +挤出 +挤掉 +挤兑 +挤而后工 +挤挤 +挤挤挨挨 +挤垮 +挤满 +挤眉弄眼 +挤奶 +挤奶房 +挤位 +挤压 +挤占 +脊 +脊背 +脊骨 +脊梁 +脊梁骨 +脊檩 +脊岭 +脊膜 +脊鳍 +脊神经 +脊髓 +脊索 +脊索动物 +脊柱 +脊柱炎 +脊椎 +脊椎动物 +脊椎骨 +脊椎炎 +戟 +戟立 +戟士 +计 +计办 +计拨 +计财司 +计策 +计程表 +计程车 +计程器 +计酬 +计出万全 +计次制 +计发 +计费 +计分 +计分牌 +计分器 +计付 +计工 +计划 +计划表 +计划部 +计划处 +计划单列 +计划法 +计划费 +计划价 +计划经济 +计划局 +计划科 +计划生育 +计划室 +计划书 +计划署 +计划司 +计划委 +计划型 +计划性 +计划员 +计划组 +计会科 +计计 +计价 +计价器 +计件 +计件工资 +计较 +计经委 +计量 +计量秤 +计量局 +计量器 +计量室 +计量行 +计量员 +计谋 +计票 +计票员 +计其所短 +计日程功 +计入 +计生 +计生办 +计生户 +计生联 +计生委 +计生星 +计时 +计时表 +计时工 +计时工资 +计时赛 +计时员 +计收 +计数 +计数器 +计算 +计算尺 +计算化 +计算机 +计算机房 +计算机化 +计算机界 +计算机所 +计算机网 +计算机系 +计算机业 +计算连 +计算器 +计算书 +计算所 +计算中心 +计提 +计委 +计息 +计议 +计征 +计征科 +记 +记不清 +记仇 +记大过 +记得 +记分 +记分册 +记分卡 +记分牌 +记分员 +记功 +记挂 +记过 +记号 +记恨 +记里鼓车 +记联 +记录 +记录本 +记录簿 +记录槽 +记录法 +记录稿 +记录卡 +记录片 +记录式 +记略 +记名 +记名式 +记取 +记事 +记事本 +记事簿 +记事儿 +记事牌 +记事体 +记述 +记数器 +记下 +记协 +记性 +记叙 +记叙文 +记要 +记忆 +记忆力 +记忆犹新 +记载 +记账 +记账式 +记者 +记者部 +记者堆 +记者会 +记者区 +记者厅 +记者团 +记者网 +记者席 +记者型 +记者站 +记者证 +记者组 +记住 +伎 +伎俩 +纪 +纪昌学射 +纪程 +纪传体 +纪纲 +纪工委 +纪检 +纪检处 +纪检委 +纪检员 +纪检组 +纪录 +纪录片 +纪录史 +纪录性 +纪录者 +纪律 +纪律性 +纪略 +纪年 +纪念 +纪念版 +纪念杯 +纪念碑 +纪念币 +纪念册 +纪念地 +纪念封 +纪念馆 +纪念会 +纪念辑 +纪念奖 +纪念卡 +纪念林 +纪念牌 +纪念品 +纪念日 +纪念室 +纪念树 +纪念塔 +纪念堂 +纪念厅 +纪念亭 +纪念物 +纪念型 +纪念性 +纪念邮票 +纪念园 +纪念展 +纪念张 +纪念章 +纪念柱 +纪实 +纪实片 +纪实性 +纪事 +纪寿 +纪特 +纪委 +纪行 +纪要 +纪游 +纪游诗 +纪元 +妓女 +妓院 +忌 +忌辰 +忌妒心 +忌恨 +忌讳 +忌嫉 +忌口 +忌日 +忌语 +技 +技不如人 +技不压身 +技法 +技法学 +技改 +技改局 +技改提高 +技高一筹 +技工 +技工贸 +技监 +技监局 +技能 +技能班 +技能型 +技巧 +技巧赛 +技巧性 +技巧运动 +技师 +技士 +技术 +技术班 +技术部 +技术部长 +技术处 +技术股 +技术馆 +技术化 +技术活 +技术奖 +技术界 +技术局 +技术科 +技术课 +技术库 +技术类 +技术链 +技术篇 +技术史 +技术室 +技术图 +技术型 +技术性 +技术学校 +技术员 +技术展 +技术装备 +技术作物 +技委 +技物政 +技校 +技校队 +技校生 +技协 +技压群芳 +技压群雄 +技研 +技艺 +技艺压群 +技战术 +技侦 +芰 +际 +际会 +际遇 +剂 +剂量 +剂型 +剂子 +季 +季报 +季度 +季风 +季风气候 +季风区 +季风性 +季父 +季季 +季节 +季节工 +季节洄游 +季节性 +季军 +季刊 +季朗村 +季马市 +季世 +季鹰 +既 +既成事实 +既得利益 +既定 +既来之 +既然 +既然如此 +既是 +既往 +既往不咎 +既有线 +济 +济柴 +济钢 +济钢队 +济济 +济济一堂 +济困 +济困扶危 +济困助学 +济南 +济南市 +济南站 +济宁 +济宁市 +济世之志 +济铁 +济阳 +济阳集 +济阳县 +济源 +济源市 +济州 +济州岛 +济州道 +济助星 +继 +继承 +继承国 +继承权 +继承人 +继承性 +继承者 +继从 +继电 +继电器 +继而 +继发性 +继父 +继母 +继配 +继任 +继任人 +继任者 +继嗣 +继往 +继往开来 +继位 +继续 +继站 +继之 +觊觎 +寂 +寂寂 +寂静 +寂寥 +寂灭 +寂寞 +寂寞者 +寂然 +寂无人声 +寂无一人 +寄 +寄存 +寄存包 +寄读费 +寄放 +寄放在 +寄费 +寄籍 +寄件人 +寄居 +寄居蟹 +寄卡人 +寄理于情 +寄卖 +寄人篱下 +寄生 +寄生虫 +寄生蜂 +寄生蟹 +寄食 +寄售库 +寄送 +寄宿 +寄宿生 +寄宿式 +寄宿制 +寄托 +寄托感 +寄物单 +寄信 +寄信人 +寄兴寓情 +寄养 +寄意 +寄予 +寄语 +寄寓 +寄赠 +寄主 +祭 +祭拜 +祭奠 +祭礼 +祭陵 +祭品 +祭器 +祭日 +祭扫 +祭扫者 +祭司 +祭祀 +祭祀坑 +祭台 +祭坛 +祭堂 +祭天 +祭天坛 +祭文 +祭灶 +祭幛 +祭祖 +蓟县 +蓟镇 +暨 +暨南 +暨阳 +霁 +稷山 +稷山县 +鲫鱼 +冀 +冀城县 +冀东 +冀东区 +冀晋 +冀晋区 +冀南 +冀南区 +冀望 +冀西 +冀中 +冀中南 +冀州 +冀州市 +骥 +加 +加把劲 +加班 +加班费 +加班加点 +加班率 +加倍 +加鞭 +加布罗沃 +加查县 +加长 +加大 +加德满都 +加的夫 +加的夫市 +加碘盐 +加尔各答 +加法 +加饭酒 +加方 +加盖 +加高 +加格达奇 +加格拉 +加工 +加工厂 +加工场 +加工点 +加工电 +加工费 +加工户 +加工机 +加工件 +加工类 +加工率 +加工品 +加工区 +加工型 +加工业 +加工者 +加固 +加固费 +加挂 +加官进爵 +加害 +加害者 +加号 +加厚 +加厚型 +加积镇 +加急 +加急电报 +加计 +加加林 +加佳队 +加价 +加减法 +加紧 +加进 +加剧 +加卡乡 +加快 +加宽 +加拉法德 +加拉加斯 +加勒比 +加勒比低 +加勒比海 +加里 +加里波第 +加里卜角 +加里曼丹 +加里萨 +加力 +加利 +加利利 +加料 +加仑 +加洛普 +加码 +加美 +加盟 +加盟店 +加盟费 +加盟者 +加密 +加密锁 +加冕 +加冕礼 +加拿大 +加拿大队 +加那利 +加纳 +加农炮 +加农炮弹 +加蓬 +加气水泥 +加气站 +加强 +加强班 +加强连 +加强型 +加区 +加权 +加热 +加热炉 +加人一等 +加入 +加入者 +加塞儿 +加赛 +加沙 +加上 +加深 +加时赛 +加试 +加收 +加数 +加速 +加速度 +加速器 +加速运动 +加通湖 +加温 +加温器 +加薪 +加信镇 +加压 +加压釜 +加演 +加以 +加意 +加印 +加油 +加油机 +加油量 +加油添醋 +加油站 +加油站长 +加元 +加扎省 +加之 +加枝添叶 +加重 +加州 +加注 +加筑 +加总 +加座 +夹 +夹袄 +夹板 +夹板气 +夹被 +夹壁墙 +夹藏 +夹层 +夹层玻璃 +夹层墙 +夹带 +夹道 +夹道村 +夹道欢迎 +夹缝 +夹攻 +夹棍 +夹河 +夹击 +夹剪 +夹江 +夹角 +夹金山 +夹具 +夹克 +夹克衫 +夹七夹八 +夹墙 +夹山寺 +夹生 +夹生饭 +夹丝玻璃 +夹馅 +夹心 +夹心糖 +夹叙夹议 +夹衣 +夹杂 +夹竹桃 +夹注 +夹子 +佳 +佳宾 +佳话 +佳绩 +佳季 +佳奖 +佳节 +佳境 +佳句 +佳丽 +佳利宝 +佳妙无双 +佳木斯 +佳木斯市 +佳酿 +佳偶 +佳品 +佳期 +佳趣 +佳人 +佳味 +佳婿 +佳肴 +佳肴珍馐 +佳音 +佳音频传 +佳纸 +佳作 +枷锁 +家 +家败人亡 +家宝 +家财 +家财卡 +家参 +家蚕 +家产 +家产制 +家长 +家长会 +家长里短 +家长味 +家长制 +家常 +家常便饭 +家常菜 +家常饭 +家常话 +家常事 +家趁万贯 +家仇 +家丑 +家祠 +家大业大 +家当 +家底 +家地乡 +家电 +家电部 +家电城 +家电业 +家电展 +家丁 +家法 +家访 +家访组 +家风 +家父 +家鸽 +家给人足 +家规 +家化 +家伙 +家鸡 +家计 +家家 +家家户户 +家教 +家境 +家酒 +家居 +家居服 +家具 +家具厂 +家具城 +家具商 +家具业 +家眷 +家累 +家里 +家里人 +家门 +家门口 +家母 +家奴 +家婆 +家破人亡 +家谱 +家荠菜 +家前屋后 +家禽 +家禽场 +家禽业 +家犬 +家人 +家生 +家什 +家什儿 +家史 +家世 +家事 +家室 +家书 +家塾 +家鼠 +家数 +家庭 +家庭妇女 +家庭副业 +家庭化 +家庭教育 +家庭剧 +家庭设备 +家庭史 +家庭式 +家庭型 +家庭者 +家童 +家徒四壁 +家兔 +家托 +家委会 +家蚊 +家无担石 +家务 +家务活 +家务事 +家弦户诵 +家乡 +家乡话 +家乡人 +家乡戏 +家小 +家信 +家兴业旺 +家畜 +家训 +家鸭 +家宴 +家燕 +家业 +家蝇 +家用 +家用电器 +家用机 +家喻户晓 +家园 +家贼 +家宅 +家政 +家政班 +家政学 +家中 +家竹箐 +家属 +家属楼 +家属区 +家属院 +家族 +家族化 +家族式 +痂 +袈裟 +葭 +跏趺 +嘉 +嘉宾 +嘉定 +嘉定区 +嘉定县 +嘉惠 +嘉奖 +嘉奖令 +嘉靖 +嘉黎县 +嘉陵 +嘉陵江 +嘉陵区 +嘉勉 +嘉木 +嘉年华 +嘉年华会 +嘉平镇 +嘉庆 +嘉山县 +嘉善 +嘉善县 +嘉手纳 +嘉兴 +嘉兴市 +嘉许 +嘉言 +嘉言懿行 +嘉义 +嘉义镇 +嘉荫县 +嘉永二年 +嘉峪关 +嘉峪关市 +嘉峪市 +岬角 +郏县 +荚果 +戛戛 +戛纳节 +戛然而止 +颊 +颊骨 +颊囊 +颊上添毫 +甲 +甲板 +甲苯 +甲厂 +甲虫 +甲醇 +甲等 +甲地 +甲方 +甲酚 +甲勾炎 +甲骨 +甲骨文 +甲骨学 +甲基 +甲级 +甲级队 +甲亢 +甲亢病 +甲亢丸 +甲壳 +甲壳动物 +甲类 +甲醚 +甲醛 +甲日乡 +甲酸 +甲天下 +甲烷 +甲烷量 +甲万那端 +甲吾拉 +甲午 +甲午战争 +甲信 +甲型 +甲癣 +甲乙级 +甲鱼 +甲者 +甲酯 +甲种粒子 +甲种射线 +甲状旁腺 +甲状软骨 +甲状腺 +甲状腺病 +甲状腺肿 +甲组 +胛骨 +贾夫纳 +贾拉瓦 +贾楼乡 +贾鲁河 +贾斯珀镇 +贾汪区 +贾维茨 +贾宪三角 +贾庄镇 +钾 +钾肥 +钾肥厂 +钾盐 +价 +价差 +价差费 +价电子 +价额 +价非字 +价费字 +价格 +价格表 +价格法 +价格关 +价格牌 +价格战 +价工 +价工发 +价函字 +价款 +价廉 +价廉物美 +价廉质优 +价码 +价目 +价目表 +价签 +价钱 +价轻字 +价外税 +价位 +价值 +价值观 +价值规律 +价值计 +价值连城 +价值量 +价值论 +价值千金 +价值形式 +价值者 +价重发 +价重字 +价字 +驾 +驾车 +驾车人 +驾车者 +驾到 +驾机 +驾临 +驾轻就熟 +驾驶 +驾驶舱 +驾驶镜 +驾驶室 +驾驶台 +驾驶员 +驾驶者 +驾驶证 +驾驶证者 +驾驶座 +驾校 +驾校业 +驾舆乘辇 +驾驭 +驾驭力 +驾照 +架 +架不住 +架次 +架豆 +架份 +架构 +架空 +架空层 +架棚 +架桥 +架上 +架设 +架式 +架势 +架通 +架线 +架子 +架子车 +架子工 +架子花 +架子猪 +假 +假案 +假扮 +假币 +假钞 +假充 +假丑恶 +假大空 +假道学 +假定 +假定性 +假恶丑 +假发 +假分数 +假根 +假公济私 +假果 +假话 +假货 +假借 +假酒案 +假劣 +假冒 +假冒伪劣 +假冒者 +假眉三道 +假门假事 +假面具 +假面舞 +假名 +假模假式 +假赔案 +假票 +假期 +假仁假义 +假日 +假如 +假若 +假嗓子 +假山 +假设 +假设敌 +假石林 +假使 +假释 +假释犯 +假手 +假说 +假条 +假托 +假戏真做 +假相 +假想 +假想敌 +假象 +假象牙 +假惺惺 +假性 +假牙 +假言 +假药 +假药案 +假以 +假以时日 +假意 +假造 +假帐 +假证 +假肢 +假种 +假装 +假座 +嫁 +嫁祸 +嫁祸于人 +嫁接 +嫁接法 +嫁接苗 +嫁接式 +嫁娶 +嫁人 +嫁衣 +嫁衣裳 +嫁妆 +稼禾 +稼穑 +奸 +奸臣 +奸党 +奸夫 +奸妇 +奸滑 +奸猾 +奸计 +奸佞 +奸情 +奸人 +奸杀 +奸商 +奸徒 +奸污 +奸细 +奸险 +奸邪 +奸雄 +奸淫 +奸贼 +奸诈 +尖 +尖碑 +尖兵 +尖草坪 +尖草坪区 +尖刀 +尖刀组 +尖顶 +尖东 +尖端 +尖端放电 +尖端科学 +尖儿 +尖峰 +尖轨 +尖尖角 +尖叫 +尖叫声 +尖刻 +尖厉 +尖利 +尖脐 +尖锐 +尖锐化 +尖沙咀 +尖石 +尖酸 +尖塔 +尖头 +尖头蝗 +尖团音 +尖音 +尖扎县 +尖子 +尖嘴薄舌 +坚 +坚壁清野 +坚冰 +坚不可摧 +坚称 +坚城 +坚持 +坚持不懈 +坚持不渝 +坚持者 +坚定 +坚定不移 +坚定性 +坚戈 +坚固 +坚果 +坚劲 +坚决 +坚苦 +坚苦卓绝 +坚牢 +坚美 +坚强 +坚强不屈 +坚忍 +坚忍不拔 +坚韧 +坚韧不拔 +坚如磐石 +坚实 +坚守 +坚挺 +坚挺度 +坚土流沙 +坚信 +坚信不疑 +坚毅 +坚毅不屈 +坚硬 +坚贞 +坚贞不屈 +坚贞不渝 +歼 +歼敌 +歼击 +歼击机 +歼灭 +歼灭战 +间 +间不容发 +间谍 +间谍案 +间断 +间断性 +间隔 +间隔期 +间谷 +间或 +间架 +间接 +间接肥料 +间接经验 +间接税 +间接推理 +间接选举 +间距 +间离 +间离法 +间苗 +间皮瘤 +间日 +间隙 +间歇 +间歇泉 +间歇热 +间歇性 +间养 +间杂 +间种 +间奏曲 +间作 +间作地 +肩 +肩膀 +肩臂 +肩部 +肩负 +肩胛 +肩胛骨 +肩扛手提 +肩摩毂击 +肩摩踵接 +肩上 +肩头 +肩窝 +肩章 +肩周炎 +艰 +艰巨 +艰巨性 +艰苦 +艰苦处 +艰苦创业 +艰苦奋斗 +艰苦朴素 +艰苦卓绝 +艰难 +艰难困苦 +艰难曲折 +艰难险阻 +艰难性 +艰涩 +艰深 +艰危 +艰险 +艰辛 +艰辛备尝 +兼 +兼办 +兼备 +兼并 +兼并案 +兼并潮 +兼并额 +兼并热 +兼并史 +兼并体 +兼并战 +兼并者 +兼程 +兼得 +兼而有之 +兼顾 +兼管 +兼毫 +兼及 +兼济 +兼具 +兼课 +兼权熟计 +兼任 +兼容 +兼容并包 +兼容并蓄 +兼容性 +兼融 +兼收 +兼收并蓄 +兼听博采 +兼听则明 +兼学 +兼议 +兼营 +兼有 +兼语 +兼职 +兼职团 +监 +监测 +监测船 +监测点 +监测房 +监测器 +监测网 +监测网站 +监测仪 +监测站 +监测制 +监察 +监察部 +监察部门 +监察处 +监察法 +监察界 +监察局 +监察室 +监察司 +监察厅 +监察委 +监察员 +监察院 +监察组 +监场 +监督 +监督表 +监督法 +监督岗 +监督关 +监督会 +监督镜 +监督局 +监督卡 +监督权 +监督权案 +监督人 +监督哨 +监督室 +监督司 +监督台 +监督厅 +监督网 +监督箱 +监督性 +监督员 +监督院 +监督站 +监督者 +监督制 +监督组 +监发 +监犯 +监工 +监管 +监管部门 +监管法 +监管区 +监管人 +监管司 +监管者 +监规 +监护 +监护费 +监护权 +监护人 +监护人员 +监护席 +监护员 +监纪 +监缴 +监禁 +监禁率 +监考 +监考员 +监控 +监控程序 +监控点 +监控户 +监控器 +监控室 +监控台 +监控站 +监牢 +监理 +监理办 +监理部 +监理岗 +监理站 +监理制 +监利 +监利县 +监票 +监票人 +监票员 +监评部 +监评会 +监舍 +监摄仪 +监示器 +监事 +监事会 +监视 +监视屏 +监视器 +监守 +监守自盗 +监税 +监听器 +监外 +监狱 +监狱长 +监狱法 +监院 +监造 +监造组 +监制 +监装 +笺 +笺谱 +笺校 +笺证稿 +笺纸 +笺注 +菅 +犍牛 +缄 +缄口结舌 +缄默 +煎 +煎熬 +煎饼 +煎药锅 +拣 +拣到 +拣佛烧香 +枧坝镇 +俭 +俭从何来 +俭开福源 +俭朴 +俭省 +俭汤 +俭汤乡 +俭约 +柬 +柬方 +柬埔寨 +柬帖 +柬王国 +茧 +茧绸 +茧花 +茧价 +茧丝 +茧丝绸 +茧子 +捡 +捡便宜 +捡漏 +捡破烂 +捡拾 +减 +减半 +减磅 +减编 +减裁 +减产 +减产量 +减低 +减掉 +减法 +减肥 +减肥茶 +减肥带 +减肥热 +减肥药 +减幅 +减负 +减负办 +减号 +减缓 +减价 +减亏 +减利 +减量 +减量化 +减慢 +减免 +减免税 +减摩 +减摩合金 +减排 +减轻 +减去 +减让 +减人 +减人增效 +减弱 +减色 +减少 +减势 +减收 +减收增支 +减数 +减税 +减税额 +减速 +减速板 +减速剂 +减速器 +减速运动 +减缩 +减头去尾 +减退 +减污 +减息 +减小 +减刑 +减压 +减员 +减员增效 +减灾 +减震 +减震器 +减征 +减资 +减租 +剪 +剪板工 +剪报 +剪裁 +剪彩 +剪草除根 +剪除 +剪床 +剪刀 +剪刀差 +剪辑 +剪辑台 +剪剪 +剪接 +剪毛棚 +剪切力 +剪秋萝 +剪贴 +剪贴本 +剪影 +剪枝 +剪纸 +剪纸厂 +剪纸儿 +剪纸片 +剪子 +检 +检波 +检波器 +检测 +检测车 +检测点 +检测法 +检测费 +检测期 +检测器 +检测仪 +检测员 +检查 +检查部 +检查单 +检查法 +检查费 +检查官 +检查科 +检查门 +检查权 +检查室 +检查团 +检查仪 +检查员 +检查院 +检查站 +检查者 +检查组 +检察 +检察部 +检察长 +检察官 +检察官法 +检察局 +检察权 +检察室 +检察署 +检察厅 +检察员 +检察院 +检场 +检出率 +检点 +检定 +检定所 +检方 +检举 +检举信 +检漏仪 +检录 +检票 +检票口 +检票员 +检视 +检索 +检索法 +检索室 +检讨 +检讨书 +检委会 +检箱 +检修 +检修费 +检修工 +检验 +检验单 +检验法 +检验费 +检验关 +检验局 +检验科 +检验史 +检验室 +检验所 +检验性 +检验员 +检验章 +检验者 +检疫 +检疫场 +检疫费 +检疫局 +检疫站 +检疫证 +检阅 +检阅台 +检字表 +检字法 +简 +简板 +简报 +简本 +简笔 +简编 +简便 +简便性 +简便易行 +简称 +简单 +简单化 +简单机械 +简单易行 +简牍 +简牍史 +简短 +简而言之 +简分数 +简赅 +简古 +简化 +简化汉字 +简化字 +简记 +简简单单 +简洁 +简洁明了 +简洁性 +简捷 +简介 +简况 +简括 +简历 +简练 +简陋 +简陋型 +简略 +简明 +简明版 +简明扼要 +简明性 +简评 +简朴 +简谱 +简史 +简述 +简缩 +简体 +简体字 +简帖 +简屋 +简谐运动 +简写 +简讯 +简言之 +简阳市 +简要 +简易 +简易房 +简易楼 +简易师范 +简约 +简约主义 +简则 +简章 +简政 +简政放权 +简支梁 +简直 +谫 +碱 +碱草 +碱厂 +碱地 +碱度 +碱法 +碱化 +碱荒 +碱集料 +碱金属 +碱卤 +碱石 +碱式盐 +碱水 +碱滩 +碱土 +碱土金属 +碱性 +碱性岩 +碱业 +碱渣 +碱渣堆场 +碱渣土 +蹇 +见 +见报 +见报稿 +见不得人 +见财起意 +见长 +见到 +见地 +见多识广 +见分晓 +见风使舵 +见风是雨 +见风转舵 +见缝插针 +见缝就钻 +见高低 +见怪 +见怪不怪 +见惯 +见惯不惊 +见好 +见机而行 +见机行事 +见见 +见见面 +见教 +见解 +见棱见角 +见利思义 +见利忘义 +见谅 +见猎心喜 +见面 +见面费 +见面会 +见面礼 +见钱眼开 +见仁见智 +见识 +见世面 +见示 +见势不妙 +见死不救 +见所未见 +见兔顾犬 +见外 +见危授命 +见微知著 +见闻 +见习 +见习期 +见习员 +见贤思齐 +见效 +见笑 +见义勇为 +见异思迁 +见于 +见者 +见证 +见证人 +见证物 +见证者 +见诸 +见诸行动 +见状 +件 +件次 +件件 +件数 +建 +建安处 +建安风骨 +建部 +建材 +建材厂 +建材城 +建材计 +建材局 +建材业 +建昌县 +建厂 +建成 +建城 +建祠尸祝 +建大 +建党 +建档 +建档立卡 +建德市 +建德县 +建堤 +建都 +建发 +建房 +建房款 +建房热 +建工 +建功 +建功立业 +建构 +建管局 +建管委 +建管用 +建国 +建国村 +建国会 +建国路 +建国门 +建湖 +建湖县 +建华 +建华路 +建交 +建教 +建教字 +建井处 +建井所 +建警 +建军 +建军节 +建卡 +建康 +建客 +建兰 +建立 +建莲 +建路 +建模 +建农 +建瓯市 +建棚 +建平 +建平县 +建漆 +建起 +建设 +建设部 +建设部长 +建设处 +建设村 +建设方 +建设费 +建设局 +建设科 +建设期 +建设权 +建设省 +建设史 +建设司 +建设厅 +建设乡 +建设性 +建设者 +建施 +建始 +建始县 +建树 +建寺 +建陶厂 +建外 +建网 +建纬所 +建委 +建委会 +建校 +建校费 +建协 +建行 +建言 +建言献策 +建言献计 +建研会 +建阳市 +建业 +建业队 +建议 +建议案 +建议价 +建议书 +建于 +建园 +建造 +建造界 +建造业 +建章 +建章立制 +建账 +建账率 +建制 +建制镇 +建筑 +建筑编 +建筑队 +建筑法 +建筑家 +建筑界 +建筑群 +建筑商 +建筑师 +建筑史 +建筑署 +建筑体 +建筑物 +建筑系 +建筑学 +建筑学家 +建筑学术 +建筑学系 +建筑业 +建筑用 +饯行 +剑 +剑拔弩张 +剑齿虎 +剑齿象 +剑川 +剑阁县 +剑戟 +剑客 +剑兰 +剑羚 +剑龙 +剑麻 +剑眉 +剑气 +剑桥 +剑桥市 +剑术 +剑侠 +荐 +荐骨 +荐举 +贱 +贱骨头 +贱民 +贱人 +贱义重利 +健 +健步 +健步如飞 +健步走 +健齿 +健儿 +健健康康 +健将 +健康 +健康报 +健康法 +健康房 +健康机 +健康器 +健康权 +健康史 +健朗 +健力宝队 +健美 +健美操 +健美素 +健脾灵 +健全 +健全度 +健全率 +健身 +健身操 +健身车 +健身法 +健身房 +健身器 +健身热 +健硕 +健谈 +健体 +健体强身 +健跳镇 +健忘 +健忘症 +健旺 +健胃 +健翔桥 +健心 +健在 +健在者 +健智牌 +健壮 +涧 +涧磁村 +舰 +舰长 +舰船 +舰队 +舰队团 +舰炮 +舰群 +舰体 +舰艇 +舰尾 +舰载 +舰只 +舰种 +渐 +渐变 +渐次 +渐渐 +渐近线 +渐进 +渐进式 +渐开线 +渐入佳境 +渐食 +谏 +谏壁口 +毽球 +毽子 +溅 +溅开 +溅落 +腱鞘 +腱子 +腱子肉 +践 +践诺 +践踏 +践行 +践约 +鉴 +鉴别 +鉴别力 +鉴别仪 +鉴定 +鉴定费 +鉴定会 +鉴定机 +鉴定界 +鉴定人 +鉴定书 +鉴定员 +鉴定者 +鉴定组 +鉴湖 +鉴戒 +鉴貌辨色 +鉴赏 +鉴赏家 +鉴赏力 +鉴赏者 +鉴于 +鉴证费 +鉴字 +键 +键板 +键槽 +键钮 +键盘 +键盘乐器 +键入 +键位 +僭 +箭 +箭靶子 +箭不虚发 +箭步 +箭窗 +箭簇 +箭垛 +箭垛子 +箭石 +箭头 +箭鱼 +箭在弦上 +箭猪 +箭竹 +踺子 +江 +江安 +江岸 +江岸区 +江北 +江北区 +江边 +江滨 +江城 +江川县 +江当乡 +江岛 +江道 +江堤 +江底 +江东 +江东村 +江东路 +江东门 +江东区 +江都 +江段 +江干 +江海 +江海堤防 +江海区 +江汉 +江汉关 +江河 +江河日下 +江河水 +江河行地 +江湖 +江湖骗子 +江湖义气 +江户 +江户湾 +江华 +江华县 +江华站 +江淮 +江淮戏 +江家场村 +江界市 +江津 +江津市 +江克村 +江口 +江郎才尽 +江蓠 +江陵 +江陵区 +江流 +江轮 +江门 +江门市 +江米 +江米酒 +江面 +江南 +江南乡 +江宁 +江畔 +江平镇 +江浦县 +江桥 +江山 +江山市 +江声 +江水 +江苏 +江苏队 +江苏省 +江苏厅 +江滩 +江涛 +江天 +江铜 +江涂 +江豚 +江湾镇 +江雾 +江西 +江西腊 +江西区 +江西省 +江西团 +江夏区 +江心 +江垭 +江洋大盗 +江珧柱 +江阴 +江阴籍 +江阴市 +江永 +江永县 +江油市 +江原道 +江源 +江浙 +江州 +江猪 +江孜 +姜 +姜冯营村 +姜格庄村 +姜国 +姜黄 +姜家泊 +姜李村 +姜末 +姜农 +姜片 +姜糖水 +姜湾村 +姜堰 +姜堰市 +姜芋 +姜庄 +将 +将才 +将才学 +将错就错 +将功赎罪 +将官 +将级 +将计就计 +将近 +将就 +将军 +将军碑村 +将军级 +将军林 +将军体 +将口镇 +将来 +将领 +将令 +将门 +将士 +将帅 +将帅论 +将头 +将息 +将校 +将心比心 +将信将疑 +将要 +浆 +浆果 +浆糊 +浆膜 +浆洗 +浆液 +浆汁 +豇豆 +僵 +僵蚕 +僵持 +僵化 +僵局 +僵冷 +僵尸 +僵死 +僵亡 +僵硬 +僵蛰 +僵直 +僵滞 +缰 +缰绳 +疆 +疆场 +疆界 +疆土 +疆域 +讲 +讲辞 +讲道 +讲法 +讲稿 +讲和 +讲话 +讲话稿 +讲话声 +讲话者 +讲价 +讲讲 +讲解 +讲解人 +讲解员 +讲经说法 +讲究 +讲课 +讲课稿 +讲课声 +讲理 +讲面子 +讲明 +讲排场 +讲评 +讲棋 +讲情 +讲情面 +讲求 +讲师 +讲师团 +讲授 +讲授团 +讲述 +讲台 +讲坛 +讲堂 +讲习 +讲习班 +讲席 +讲叙 +讲学 +讲演 +讲演稿 +讲演会 +讲演团 +讲义 +讲义夹 +讲用会 +讲桌 +讲座 +讲座式 +奖 +奖杯 +奖惩 +奖惩制 +奖次 +奖罚 +奖罚分明 +奖价 +奖金 +奖金额 +奖励 +奖励金 +奖励面 +奖励制 +奖牌 +奖牌榜 +奖牌数 +奖品 +奖旗 +奖勤罚懒 +奖券 +奖赏 +奖台 +奖项 +奖学金 +奖掖 +奖优罚劣 +奖章 +奖助学 +奖状 +桨 +蒋 +蒋坝镇 +蒋管区 +蒋家王朝 +蒋家堰 +蒋家堰镇 +蒋介石 +蒋李集镇 +蒋墅 +蒋墅镇 +蒋镇 +匠 +匠户 +匠气 +匠人 +匠师 +匠心 +匠心独具 +匠心独运 +降 +降B大调 +降半旗 +降冰量 +降尘量 +降尘器 +降低 +降调 +降伏 +降服 +降幅 +降格 +降耗 +降级 +降价 +降价风 +降价年 +降解 +降解剂 +降临 +降龙伏虎 +降落 +降落伞 +降幂 +降免职 +降旗 +降旗队 +降生 +降水 +降水量 +降水区 +降糖 +降温 +降息 +降香 +降雪 +降雪量 +降压 +降雨 +降雨带 +降雨量 +降雨区 +降职 +降渍 +绛 +绛县 +酱 +酱菜 +酱厂 +酱豆腐 +酱坊 +酱缸 +酱瓜 +酱肉 +酱色 +酱汤 +酱香 +酱油 +酱园 +酱紫 +酱紫色 +犟 +犟劲 +犟头犟脑 +糨糊 +交 +交班 +交办 +交办会 +交杯酒 +交变 +交变电场 +交并 +交财 +交财字 +交叉 +交叉步 +交叉处 +交叉点 +交叉口 +交叉性 +交叉有致 +交差 +交城 +交城县 +交出 +交存人 +交错 +交错带 +交大 +交代 +交待 +交道 +交道口 +交底 +交点 +交电 +交迭 +交叠 +交恶 +交法 +交方 +交费 +交费单 +交费卡 +交费率 +交费人 +交锋 +交付 +交感神经 +交割 +交割单 +交给 +交工 +交公 +交攻 +交媾 +交管 +交管局 +交光互影 +交好 +交互 +交互式 +交互性 +交还 +交换 +交换机 +交换价值 +交换量 +交换所 +交换台 +交换体 +交换网 +交汇 +交汇处 +交汇点 +交会 +交会处 +交会点 +交火 +交货 +交货期 +交货值 +交集 +交际 +交际处 +交际花 +交际舞 +交加 +交角 +交接 +交接班 +交接处 +交界 +交界处 +交界地 +交界线 +交井 +交警 +交警队 +交警岗 +交卷 +交口 +交口称誉 +交口称赞 +交口县 +交款 +交款日 +交款台 +交粮 +交流 +交流电 +交流馆 +交流会 +交流日 +交流史 +交流团 +交纳 +交配 +交朋友 +交情 +交融 +交糅 +交涉 +交手 +交售 +交税 +交谈 +交替 +交通 +交通部 +交通部长 +交通车 +交通处 +交通船 +交通岛 +交通法 +交通费 +交通岗 +交通工具 +交通壕 +交通警 +交通局 +交通科 +交通量 +交通税 +交通台 +交通厅 +交通艇 +交通图 +交通网 +交通线 +交通业 +交通员 +交通站 +交头接耳 +交投 +交往 +交往史 +交委 +交相 +交相辉映 +交相为用 +交响 +交响乐 +交响乐队 +交响乐团 +交响乐章 +交响曲 +交响诗 +交响团 +交响音乐 +交心 +交行 +交椅 +交易 +交易部 +交易场 +交易地 +交易点 +交易额 +交易法 +交易关 +交易会 +交易局 +交易量 +交易权 +交易人 +交易日 +交易商 +交易室 +交易税 +交易所 +交易厅 +交易网 +交易员 +交易者 +交易周 +交谊 +交谊舞 +交映 +交由 +交游 +交友 +交予 +交运 +交战 +交战国 +交战区 +交战团体 +交账 +交织 +交子 +交租 +郊 +郊区 +郊区县 +郊外 +郊县 +郊野 +郊游 +姣好 +姣妍 +娇 +娇痴 +娇滴滴 +娇惯 +娇贵 +娇憨 +娇好 +娇骄二气 +娇客 +娇丽 +娇美 +娇媚 +娇嫩 +娇嫩嫩 +娇妻 +娇气 +娇娆 +娇柔 +娇揉造作 +娇生惯养 +娇娃 +娇小 +娇小玲珑 +娇羞 +娇艳 +娇艳欲滴 +浇 +浇底乡 +浇地 +浇地费 +浇灌 +浇洒 +浇水 +浇注 +浇筑 +浇筑量 +浇铸 +茭 +茭白 +茭道乡 +骄 +骄傲 +骄傲自满 +骄兵必败 +骄横 +骄娇 +骄矜 +骄狂 +骄慢 +骄女 +骄气 +骄人 +骄奢祸程 +骄奢淫逸 +骄艳 +骄阳 +骄阳似火 +骄子 +骄纵 +骄纵放任 +胶 +胶板纸 +胶版 +胶版纸 +胶布 +胶层 +胶带 +胶底 +胶东 +胶东区 +胶工 +胶管 +胶合 +胶合板 +胶合剂 +胶卷 +胶卷盒 +胶粒面 +胶轮 +胶木 +胶木粉 +胶南 +胶南市 +胶南县 +胶囊 +胶泥 +胶拍 +胶皮 +胶片 +胶圈 +胶乳 +胶水 +胶体 +胶体溶液 +胶条 +胶丸 +胶鞋 +胶鞋厂 +胶靴 +胶印 +胶印机 +胶印纸 +胶元病 +胶粘剂 +胶纸 +胶州 +胶州市 +胶州湾 +胶着状态 +椒 +椒贩 +椒江 +椒江区 +椒商 +椒盐 +焦 +焦比 +焦点 +焦黑 +焦痕 +焦糊状 +焦化 +焦化厂 +焦黄 +焦急 +焦家湾村 +焦距 +焦渴 +焦枯 +焦拉 +焦雷 +焦炉 +焦虑 +焦虑不安 +焦煤 +焦墨 +焦人 +焦炭 +焦头烂额 +焦土 +焦油 +焦躁 +焦炙 +焦灼 +焦作 +焦作市 +蛟 +蛟河市 +蛟龙 +蛟龙得水 +跤 +鲛绡 +蕉 +蕉窗 +蕉岭县 +蕉麻 +蕉园 +蕉源村 +礁 +礁堡 +礁长 +礁林 +礁盘 +礁石 +角 +角部 +角尺 +角动量 +角斗 +角斗场 +角度 +角儿 +角钢 +角果 +角角 +角角落落 +角力 +角楼 +角落 +角落处 +角马 +角美镇 +角门 +角膜 +角膜炎 +角票 +角旗 +角球 +角色 +角闪石 +角黍 +角速度 +角套 +角铁 +角质 +角质率 +角雉 +角逐 +佼佼者 +侥幸 +狡辩 +狡猾 +狡计 +狡狯 +狡赖 +狡兔三窟 +狡黠 +狡诈 +绞 +绞包针 +绞肠痧 +绞车 +绞刀 +绞架 +绞尽 +绞尽脑汁 +绞盘 +绞杀 +绞杀战 +绞手 +绞丝儿 +绞丝旁儿 +绞索 +绞刑 +绞刑架 +绞转 +饺 +饺子 +饺子皮 +皎娇 +皎洁 +皎然 +矫 +矫健 +矫捷 +矫情 +矫揉造作 +矫饰 +矫枉过正 +矫形 +矫正 +矫治 +脚 +脚板 +脚背 +脚本 +脚脖 +脚脖子 +脚步 +脚步声 +脚部 +脚灯 +脚底 +脚钉 +脚儿 +脚法 +脚夫 +脚跟 +脚后跟 +脚踝 +脚踝部 +脚尖 +脚劲 +脚扣 +脚力 +脚镣 +脚铃 +脚炉 +脚门 +脚面 +脚盆 +脚蹼 +脚气 +脚钱 +脚圈 +脚射 +脚手架 +脚踏 +脚踏车 +脚踏实地 +脚踏式 +脚痛医脚 +脚头 +脚腕子 +脚下 +脚心 +脚行 +脚癣 +脚丫 +脚丫子 +脚印 +脚掌 +脚指头 +脚趾 +脚注 +脚爪 +铰 +铰链 +搅 +搅拌 +搅拌机 +搅拌器 +搅动 +搅和 +搅黄 +搅混 +搅乱 +剿 +剿除 +剿匪 +剿共 +剿灭 +剿杀 +敫 +缴 +缴存 +缴费 +缴费簿 +缴费率 +缴费人 +缴付 +缴获 +缴库单 +缴款单 +缴纳 +缴纳处 +缴枪 +缴税 +缴送 +缴送率 +缴械 +叫 +叫板 +叫菜 +叫法 +叫喊 +叫好 +叫好不绝 +叫好声 +叫号 +叫号机 +叫花子 +叫唤 +叫价 +叫绝 +叫苦 +叫苦不迭 +叫苦连天 +叫驴 +叫骂 +叫卖 +叫卖声 +叫屈 +叫嚷 +叫声 +叫响 +叫嚣 +叫醒 +叫真 +叫作 +叫座 +叫做 +轿 +轿车 +轿夫 +轿子 +轿子山镇 +较 +较技 +较劲 +较量 +较为 +较真 +较真儿 +较之 +较之于 +较重者 +教 +教8飞机 +教案 +教本 +教鞭 +教材 +教长 +教程 +教代会 +教导 +教导处 +教导队 +教导师 +教导团 +教导员 +教法 +教风 +教辅 +教改 +教给 +教工 +教工委 +教官 +教管班 +教管会 +教规 +教皇 +教会 +教诲 +教教 +教具 +教科省 +教科书 +教科所 +教科文 +教科文部 +教科文卫 +教科研 +教课 +教历 +教练 +教练场 +教练车 +教练机 +教练席 +教练员 +教练组 +教龄 +教民 +教女 +教派 +教七楼 +教区 +教三楼 +教师 +教师法 +教师节 +教师爷 +教师证 +教士 +教室 +教授 +教授级 +教书 +教书匠 +教书郎 +教书育人 +教唆 +教唆犯 +教唆者 +教坛 +教堂 +教体 +教体委 +教条 +教条化 +教条式 +教条主义 +教廷 +教头 +教徒 +教委 +教卫委 +教文体委 +教武 +教务 +教务长 +教务处 +教学 +教学班 +教学点 +教学法 +教学关 +教学课 +教学楼 +教学片 +教学区 +教学相长 +教学组 +教训 +教研 +教研部 +教研室 +教研组 +教养 +教养员 +教义 +教义式 +教益 +教友 +教育 +教育班 +教育部 +教育部长 +教育长 +教育处 +教育村 +教育法 +教育费 +教育股 +教育观 +教育馆 +教育会 +教育家 +教育奖 +教育界 +教育金 +教育局 +教育科 +教育课 +教育面 +教育权 +教育日 +教育社 +教育史 +教育司 +教育所 +教育台 +教育厅 +教育团 +教育网 +教育为本 +教育系 +教育型 +教育性 +教育学 +教育学家 +教育学系 +教育展 +教育者 +教员 +教职 +教职工 +教职员 +教职员工 +教主 +教子 +教子有方 +教字 +教宗 +窖 +窖藏 +酵母 +酵母菌 +酵母片 +噍 +阶 +阶层 +阶段 +阶段性 +阶级 +阶级斗争 +阶级性 +阶石 +阶梯 +阶梯式 +阶梯形 +阶下囚 +疖子 +皆 +皆大欢喜 +接 +接班 +接班人 +接办 +接报 +接报案 +接标 +接驳 +接驳端子 +接茬 +接茬儿 +接碴 +接唱 +接处警 +接触 +接触面 +接触网 +接触眼镜 +接待 +接待办 +接待部 +接待处 +接待地 +接待点 +接待费 +接待量 +接待日 +接待室 +接待厅 +接待员 +接待站 +接待组 +接到 +接地 +接点 +接二连三 +接方 +接访 +接访日 +接风 +接风洗尘 +接羔 +接管 +接管部 +接轨 +接轨点 +接合 +接合部 +接话人 +接货船 +接机者 +接济 +接见 +接见厅 +接近 +接警 +接口 +接口卡 +接力 +接力棒 +接力队 +接力区 +接力赛 +接力赛跑 +接力式 +接连 +接连不断 +接龙舞 +接纳 +接盘 +接气 +接洽 +接球 +接壤 +接壤处 +接壤区 +接任 +接入 +接入网 +接上头 +接哨 +接生 +接生率 +接生员 +接收 +接收机 +接收器 +接收站 +接收者 +接手 +接受 +接受方 +接受函 +接受者 +接送 +接送车 +接穗 +接替 +接听 +接通 +接通率 +接头 +接头处 +接头路 +接团表 +接吻 +接物镜 +接线 +接线牌 +接线员 +接线柱 +接修部 +接续 +接应 +接用 +接运 +接站车 +接诊 +接种 +接种率 +接踵 +接踵而来 +接踵而至 +接着 +秸 +秸秆 +秸秆量 +秸子 +嗟来之食 +嗟叹 +揭 +揭榜 +揭碑 +揭穿 +揭底 +揭东县 +揭短 +揭短会 +揭发 +揭发者 +揭竿而起 +揭开 +揭露 +揭秘 +揭幕 +揭幕式 +揭幕战 +揭牌 +揭批 +揭批查 +揭破 +揭示 +揭帖 +揭晓 +揭阳 +街 +街车 +街道 +街灯 +街坊 +街混儿 +街角 +街街巷巷 +街景 +街口 +街垒 +街垒战 +街貌 +街门 +街面 +街名 +街区 +街衢 +街容 +街上 +街市 +街谈 +街谈巷议 +街谈巷语 +街亭失守 +街头 +街头剧 +街头诗 +街头巷尾 +街委 +街巷 +街巷战 +街心 +街政 +街子乡 +孑孓 +孑遗 +节 +节哀 +节疤 +节本 +节本降耗 +节材 +节操 +节次 +节地率 +节点 +节电 +节电办 +节电费 +节度使 +节骨眼 +节骨眼儿 +节灌 +节耗 +节后 +节汇率 +节假 +节假日 +节俭 +节减 +节节 +节节胜利 +节理 +节粮型 +节烈 +节令 +节流 +节录 +节律 +节略 +节目 +节目单 +节目片 +节目组 +节能 +节能办 +节能灯 +节能剂 +节能器 +节能型 +节拍 +节期 +节气 +节前 +节钱 +节庆 +节庆日 +节日 +节日性 +节省 +节食 +节水 +节水型 +节外生枝 +节尾 +节选 +节衣缩食 +节油 +节余 +节育 +节育率 +节育器 +节约 +节约箱 +节约型 +节支 +节肢 +节肢动物 +节制 +节资率 +节子 +节奏 +节奏感 +讦 +劫 +劫波 +劫持 +劫持犯 +劫匪 +劫富济贫 +劫后 +劫机 +劫机犯 +劫机者 +劫款 +劫掠 +劫掠一空 +劫难 +劫杀案 +劫数 +杰 +杰出 +杰里科 +杰伊汉 +杰作 +诘问 +拮据 +拮抗剂 +洁 +洁白 +洁白丸 +洁净 +洁静 +洁具 +洁霉素 +洁身 +洁身自爱 +洁身自好 +洁身自律 +洁行 +洁牙剂 +结 +结案 +结案率 +结巴 +结办 +结伴 +结帮拉派 +结冰 +结草衔环 +结肠 +结肠癌 +结肠炎 +结成 +结仇 +结存 +结党营私 +结缔组织 +结点 +结队 +结对 +结对联手 +结对数 +结儿 +结发夫妻 +结构 +结构件 +结构力学 +结构美 +结构篇 +结构式 +结构性 +结果 +结合 +结合部 +结合处 +结合地 +结合点 +结合法 +结合力 +结合膜 +结合能 +结合体 +结核 +结核病 +结核杆菌 +结核菌 +结核菌素 +结喉 +结环 +结汇 +结婚 +结婚日 +结婚照 +结婚证 +结伙 +结集 +结荚 +结交 +结节 +结结巴巴 +结结实实 +结晶 +结晶硅 +结晶水 +结晶体 +结局 +结句 +结壳 +结论 +结论书 +结论性 +结脉 +结盟 +结膜 +结膜炎 +结幕 +结欠款 +结亲 +结莎 +结社 +结石 +结识 +结实 +结实率 +结售汇 +结束 +结束符 +结束语 +结素 +结算 +结算处 +结算关 +结算卡 +结算科 +结算量 +结算权 +结体 +结完婚 +结为 +结尾 +结尾处 +结息 +结业 +结业率 +结业式 +结业者 +结业证 +结余 +结语 +结缘 +结怨 +结扎 +结扎户 +结账 +结账会 +结症 +结转 +结子 +桀骜不驯 +捷 +捷报 +捷报频传 +捷径 +捷克 +捷克队 +捷通社 +捷足先登 +捷足者 +睫毛 +睫状体 +截 +截长补短 +截除 +截断 +截儿 +截稿 +截获 +截击 +截击机 +截流 +截留 +截煤机 +截门 +截面 +截取 +截然 +截然不同 +截收 +截瘫 +截瘫病 +截瘫康 +截瘫康丸 +截肢 +截止 +截止期 +截止日 +截至 +截住 +截子 +碣 +碣石 +竭 +竭诚 +竭尽 +竭尽全力 +竭尽所能 +竭力 +竭泽而渔 +羯羊 +她 +她家 +她俩 +她们 +姐 +姐弟 +姐夫 +姐告 +姐姐 +姐妹 +姐妹饭 +姐妹节 +姐妹篇 +解 +解饱 +解馋 +解嘲 +解愁 +解除 +解答 +解调 +解冻 +解毒 +解读 +解法 +解放 +解放报 +解放碑 +解放北路 +解放初 +解放党 +解放阁 +解放后 +解放军 +解放军报 +解放军队 +解放路 +解放前 +解放桥 +解放桥街 +解放区 +解放日 +解放社 +解放史 +解放思想 +解放滩镇 +解放鞋 +解放战争 +解放中路 +解雇 +解恨 +解惑 +解甲 +解甲沟村 +解甲归田 +解缴 +解解 +解禁 +解救 +解决 +解决率 +解开 +解渴 +解困 +解困办 +解困房 +解困扶贫 +解困金 +解困局 +解铃系铃 +解码 +解闷 +解密 +解难 +解囊 +解囊相助 +解聘 +解剖 +解剖麻雀 +解剖学 +解劝 +解热 +解散 +解诗者 +解释 +解释器 +解释权 +解释性 +解释学 +解暑 +解数 +解说 +解说词 +解说员 +解送 +解题 +解体 +解脱 +解危 +解危济困 +解围 +解析 +解析几何 +解析数论 +解颐 +解疑 +解疑释惑 +解忧 +解约 +解阵党 +解职 +解州 +介 +介词 +介乎 +介壳 +介面 +介入 +介绍 +介绍费 +介绍会 +介绍人 +介绍书 +介绍所 +介绍信 +介绍员 +介身 +介休 +介休市 +介休站 +介意 +介音 +介于 +介质 +介子 +戒 +戒备 +戒尺 +戒除 +戒刀 +戒毒 +戒毒所 +戒赌 +戒断率 +戒规 +戒急用忍 +戒骄戒躁 +戒绝 +戒律 +戒石铭 +戒坛 +戒坛院 +戒条 +戒心 +戒烟 +戒烟日 +戒严 +戒严法 +戒指 +芥 +芥菜 +芥蒂 +芥兰 +芥蓝菜 +芥末 +芥酸 +芥子 +芥子气 +届 +届届 +届满 +届末 +届期 +届时 +届中 +界 +界碑 +界标 +界别 +界尺 +界定 +界定量 +界河 +界块 +界岭 +界面 +界面学 +界内 +界牌 +界牌岭 +界牌镇 +界石 +界线 +界限 +界限量规 +界限路 +界域 +界桩 +疥疮 +诫勉 +借 +借出 +借词 +借此机会 +借贷 +借贷额 +借贷方 +借贷国 +借贷者 +借刀杀人 +借调 +借东风 +借读 +借读费 +借方 +借风使船 +借古讽今 +借古喻今 +借故 +借花献佛 +借还款 +借机 +借鸡生蛋 +借记卡 +借鉴 +借鉴性 +借酒消愁 +借据 +借口 +借款 +借款方 +借款国 +借款人 +借款者 +借钱者 +借欠款 +借入 +借入方 +借尸还魂 +借书车 +借书者 +借书证 +借水行舟 +借宿 +借题发挥 +借条 +借问 +借以 +借用 +借用还 +借阅 +借阅部 +借阅处 +借阅率 +借阅台 +借阅证 +借债 +借债人 +借债者 +借支 +借重 +借助 +借助于 +藉 +藉藉无名 +藉以窥知 +巾 +巾帼 +巾帼英雄 +巾帕 +巾身 +今 +今朝 +今晨 +今春 +今冬 +今儿 +今儿个 +今非昔比 +今古奇闻 +今归仁村 +今后 +今貌 +今年 +今年初 +今年底 +今秋 +今人 +今日 +今生 +今生今世 +今世 +今事 +今是昨非 +今岁 +今天 +今晚 +今晚报 +今文 +今文经 +今夕 +今昔 +今夏 +今宵 +今夜 +今译 +今音 +斤 +斤斗 +斤斤 +斤斤计较 +斤两 +斤头 +金 +金榜 +金榜题名 +金豹黄 +金杯 +金本位 +金笔 +金笔厂 +金币 +金碧 +金碧辉煌 +金碧路 +金边 +金表 +金箔 +金箔张 +金灿灿 +金茶花 +金蝉脱壳 +金昌 +金朝 +金城 +金城川 +金城汤池 +金川 +金川市 +金疮 +金达莱 +金代 +金带扣 +金典秘笈 +金殿 +金雕 +金顶 +金顶寺 +金东村 +金东里 +金洞 +金墩 +金墩乡 +金额 +金发 +金发者 +金凤 +金凤还巢 +金凤凰 +金佛 +金福村 +金刚 +金刚经 +金刚努目 +金刚砂 +金刚山 +金刚石 +金刚钻 +金钢 +金戈铁马 +金工 +金箍棒 +金谷 +金关 +金冠 +金管局 +金光 +金光灿灿 +金光闪闪 +金龟 +金龟子 +金柜山 +金贵 +金海湖 +金合欢 +金合欢花 +金衡 +金湖 +金湖县 +金花 +金花菜 +金华 +金华市 +金华戏 +金华县 +金华阳 +金桦果 +金环蛇 +金黄 +金黄色 +金晃晃的 +金婚 +金鸡 +金鸡独立 +金鸡湖 +金鸡路 +金鸡纳树 +金鸡纳霜 +金鸡沙村 +金鸡山 +金家村 +金家疃村 +金家巷 +金家寨 +金家庄区 +金价 +金奖 +金戒 +金睛火眼 +金桔 +金菊 +金橘 +金具 +金卡 +金科玉律 +金客 +金口河区 +金口路 +金库 +金块 +金矿 +金矿脉 +金匮要略 +金莲 +金铃果 +金铃子 +金陵 +金陵乡 +金领 +金刘寨村 +金龙 +金龙卡 +金龙山 +金缕玉衣 +金绿 +金銮宝座 +金銮殿 +金銮湾 +金马河 +金霉素 +金门 +金门岛 +金门县 +金蒙 +金迷纸醉 +金篾 +金牛岭 +金瓯 +金牌 +金牌榜 +金牌数 +金盆盆 +金平 +金瓶梅 +金浦 +金齐园 +金钱 +金钱案 +金钱豹 +金钱关 +金钱观 +金钱龟 +金钱松 +金枪鱼 +金蔷薇 +金桥 +金桥区 +金桥乡 +金秋 +金曲 +金衢 +金泉乡 +金融 +金融版 +金融城 +金融大街 +金融法 +金融股 +金融寡头 +金融家 +金融界 +金融流 +金融史 +金融税 +金融司 +金融性 +金融学 +金融业 +金融债 +金融资本 +金三角 +金色 +金沙 +金沙江 +金沙萨 +金沙县 +金沙镇 +金山 +金山岭 +金山区 +金闪闪 +金哨 +金蛇 +金胜村 +金石 +金石桥 +金石滩 +金石为开 +金市 +金饰品 +金水 +金水河 +金水桥 +金水区 +金税 +金丝 +金丝边 +金丝猴 +金丝鸟 +金丝雀 +金丝绒 +金丝席 +金丝小枣 +金丝燕 +金粟兰 +金台里 +金台路 +金台西路 +金坛 +金坛市 +金汤 +金堂县 +金淌 +金田 +金田村 +金条 +金童玉女 +金卫 +金文 +金文辞 +金吾村 +金犀牛 +金溪 +金溪县 +金乡 +金乡县 +金像 +金小丑 +金小蜂 +金星 +金行 +金秀 +金阳 +金杨 +金叶 +金银 +金银箔 +金银财宝 +金银花 +金银奖 +金银滩 +金银铜 +金银制 +金印 +金柚 +金鱼 +金鱼虫 +金鱼缸 +金鱼藻 +金玉 +金玉良言 +金玉满堂 +金玉其外 +金元 +金园区 +金圆区 +金圆券 +金寨县 +金盏花 +金盏乡 +金张掖 +金针 +金针菜 +金针虫 +金枝玉叶 +金栀 +金指 +金质 +金质奖 +金钟乡 +金州 +金州区 +金属 +金属带 +金属管 +金属罐 +金属矿 +金属框 +金属膜 +金属片 +金属漆 +金属探伤 +金属陶瓷 +金属元素 +金属制 +金柱村 +金庄村 +金子 +金子山 +金字塔 +金字塔式 +金字招牌 +津 +津巴布韦 +津百 +津城 +津沽 +津冀 +津津 +津津乐道 +津津有味 +津美 +津门 +津南区 +津浦 +津贴 +津贴费 +津液 +矜 +矜持 +矜夸 +筋 +筋斗 +筋骨 +筋腱 +筋节 +筋络 +筋脉 +筋疲力尽 +筋肉 +襟 +襟怀 +襟怀坦白 +襟江带湖 +襟泪 +襟前 +襟翼 +襟章 +仅 +仅此而已 +仅次于 +仅仅 +仅仅只 +仅只 +紧 +紧巴 +紧巴巴 +紧绷绷 +紧逼 +紧处 +紧凑 +紧凑型 +紧促 +紧跟 +紧箍咒 +紧固 +紧固件 +紧急 +紧急灯 +紧急令 +紧急状态 +紧接 +紧接着 +紧紧 +紧紧巴巴 +紧紧张张 +紧扣 +紧邻 +紧锣密鼓 +紧密 +紧密层 +紧密型 +紧迫 +紧迫感 +紧迫性 +紧俏 +紧缺 +紧缺性 +紧身 +紧身恤 +紧身衣 +紧缩 +紧缩法 +紧缩型 +紧缩性 +紧贴 +紧握 +紧压茶 +紧要 +紧要关头 +紧要期 +紧张 +紧张度 +紧张万状 +紧张症 +紧追不舍 +紧追权 +谨 +谨而慎之 +谨防 +谨忍 +谨慎 +谨慎者 +谨小慎微 +谨严 +谨言慎行 +锦 +锦标 +锦标赛 +锦城 +锦城苑 +锦缎 +锦功 +锦官城 +锦盒 +锦化 +锦鸡 +锦江 +锦江畔 +锦葵 +锦葵花 +锦鳞 +锦纶 +锦囊 +锦囊妙计 +锦屏 +锦旗 +锦上添花 +锦西 +锦溪 +锦心绣口 +锦绣 +锦绣谷 +锦绣河山 +锦绣江山 +锦绣前程 +锦宴 +锦衣玉食 +锦州 +锦州市 +锦州湾 +尽 +尽处 +尽瘁 +尽瘁鞠躬 +尽管 +尽管如此 +尽好 +尽可能 +尽快 +尽力 +尽力而为 +尽量 +尽期 +尽其所长 +尽其所有 +尽情 +尽人皆知 +尽日 +尽如人意 +尽善尽美 +尽收眼底 +尽数 +尽速 +尽头 +尽先 +尽享清福 +尽孝 +尽心 +尽心竭力 +尽心尽力 +尽心尽意 +尽心尽职 +尽兴 +尽义务 +尽意 +尽早 +尽责 +尽职 +尽职尽责 +尽忠 +劲 +劲敌 +劲儿 +劲风 +劲健 +劲节 +劲力 +劲旅 +劲射 +劲升 +劲松 +劲态 +劲头 +劲头儿 +劲舞 +劲扬 +近 +近岸 +近便 +近程 +近瞅 +近处 +近代 +近代化 +近代化史 +近代史 +近当代 +近道 +近地点 +近东 +近观 +近海 +近乎 +近湖镇 +近畿 +近郊 +近郊区 +近景 +近距 +近况 +近来 +近邻 +近路 +近墨者黑 +近年 +近年来 +近旁 +近期 +近前 +近亲 +近人 +近日 +近时 +近世 +近世以降 +近视 +近视眼 +近水楼台 +近似 +近似商 +近似值 +近体诗 +近卫军 +近悉 +近现代 +近现代馆 +近现代化 +近现代史 +近些年 +近洋 +近因 +近影 +近忧 +近在眉睫 +近在眼前 +近在咫尺 +近战 +近照 +近中期 +近作 +近作选 +进 +进逼 +进兵 +进不起 +进步 +进步党 +进步奖 +进步权 +进步性 +进步站 +进餐 +进场 +进城 +进程 +进程表 +进尺 +进出 +进出港 +进出关 +进出境 +进出口 +进出口额 +进出口权 +进出口司 +进出口业 +进出口者 +进村 +进村串户 +进寸退尺 +进度 +进度表 +进而 +进而言之 +进发 +进犯 +进攻 +进攻点 +进攻方 +进攻手 +进攻型 +进攻性 +进攻战 +进宫 +进贡 +进关 +进馆 +进化 +进化论 +进化史 +进化史观 +进货 +进货簿 +进货关 +进货员 +进击 +进价 +进进 +进进出出 +进境 +进军 +进军号 +进口 +进口案 +进口车 +进口额 +进口国 +进口货 +进口价 +进口量 +进口棉 +进口权 +进口商 +进口商品 +进口税 +进口药 +进口值 +进款 +进来 +进栏 +进料加工 +进门费 +进门票卡 +进气道 +进气口 +进球 +进球数 +进取 +进取篇 +进取心 +进去 +进人关 +进入 +进身 +进深 +进食 +进士 +进水口 +进水塔 +进水闸 +进退 +进退得失 +进退观 +进退两难 +进退留转 +进退守舍 +进退维谷 +进屋 +进袭 +进贤 +进贤县 +进香 +进项 +进校 +进行 +进行期 +进行曲 +进行性 +进修 +进修班 +进修部 +进修生 +进学街 +进言 +进一步 +进益 +进油 +进展 +进站 +进站口 +进账 +进驻 +晋 +晋安沟 +晋安河 +晋安区 +晋北 +晋材楚用 +晋察冀 +晋察冀区 +晋朝 +晋城 +晋城市 +晋代 +晋东南 +晋国 +晋侯墓 +晋级 +晋冀察 +晋冀鲁豫 +晋冀豫 +晋江 +晋江市 +晋江县 +晋剧 +晋剧团 +晋南 +晋宁县 +晋人 +晋升 +晋书 +晋绥 +晋西 +晋阳 +晋谒 +晋豫 +晋园队 +晋职 +晋中 +晋州 +晋州市 +浸 +浸沉 +浸膏 +浸剂 +浸漫 +浸泡 +浸染 +浸人心脾 +浸入 +浸润 +浸湿 +浸蚀 +浸透 +浸淫 +浸印 +浸种 +浸渍 +缙云山 +禁 +禁闭 +禁闭室 +禁捕期 +禁不住 +禁地 +禁毒 +禁毒办 +禁毒署 +禁毒委 +禁毒展 +禁赌 +禁而不止 +禁放 +禁放区 +禁放者 +禁飞区 +禁锢 +禁核 +禁核试 +禁忌 +禁忌症 +禁酒 +禁酒令 +禁绝 +禁军 +禁例 +禁猎 +禁令 +禁脔 +禁品 +禁期 +禁区 +禁赛 +禁赛期 +禁驶区 +禁售 +禁书 +禁吸 +禁吸戒毒 +禁行令 +禁行线 +禁烟 +禁烟牌 +禁药 +禁用 +禁用品 +禁用语 +禁渔期 +禁渔区 +禁欲 +禁约 +禁运 +禁止 +禁止性 +禁制品 +靳村乡 +靳三针 +噤口痢 +京 +京白 +京城 +京东 +京都 +京都府 +京都市 +京二胡 +京官 +京广 +京胡 +京华 +京郊 +京九 +京剧 +京剧界 +京剧迷 +京剧社 +京剧团 +京剧学 +京剧院 +京剧院团 +京昆剧院 +京昆室 +京门 +京棉 +京派 +京腔 +京阙 +京山 +京山县 +京师 +京味 +京西 +京戏 +京戏票 +京粤 +京韵 +京韵大鼓 +京政 +京族 +泾河 +泾河乡 +泾渭 +泾渭不分 +泾渭分明 +泾县 +泾阳 +泾阳县 +泾源 +经 +经办 +经办人 +经办人员 +经保处 +经编业 +经变 +经不起 +经不住 +经常 +经常化 +经常性 +经传 +经得起 +经得住 +经典 +经典性 +经典之作 +经度 +经幡 +经费 +经改 +经阁 +经管 +经管站 +经果林带 +经过 +经函 +经合 +经货联盟 +经籍 +经纪 +经纪人 +经纪行 +经纪业 +经济 +经济部 +经济部长 +经济舱 +经济带 +经济法 +经济法学 +经济法制 +经济核算 +经济机 +经济基础 +经济界 +经济局 +经济科 +经济昆虫 +经济林 +经济林片 +经济片 +经济篇 +经济区 +经济圈 +经济人 +经济社 +经济师 +经济史 +经济史学 +经济收益 +经济所 +经济特区 +经济体 +经济庭 +经济团 +经济危机 +经济系 +经济效益 +经济型 +经济性 +经济学 +经济学家 +经济学界 +经济学说 +经济院 +经济杂交 +经济战 +经济账 +经济主义 +经济作物 +经警 +经久 +经久不散 +经久不衰 +经久不息 +经卷 +经科委 +经理 +经理办 +经理部 +经理制 +经历 +经略 +经纶 +经纶天下 +经络 +经脉 +经贸 +经贸部 +经贸额 +经贸工委 +经贸界 +经贸团 +经贸委 +经年 +经年累月 +经七路 +经期 +经气 +经纱 +经商 +经商潮 +经商处 +经商者 +经社 +经社会 +经社文 +经师 +经史子集 +经世济民 +经世致用 +经手 +经受 +经售 +经书 +经述 +经堂 +经团联 +经纬 +经纬编 +经纬度 +经纬网 +经纬线 +经纬仪 +经委 +经委会 +经文 +经五路 +经线 +经销 +经销处 +经销家 +经销权 +经销商 +经销者 +经协办 +经心 +经学 +经学家 +经学院 +经血 +经验 +经验谈 +经验型 +经验性 +经验之谈 +经验主义 +经一路 +经意 +经营 +经营不善 +经营部 +经营点 +经营额 +经营方 +经营户 +经营化 +经营科 +经营区 +经营权 +经营商 +经营所 +经营型 +经营性 +经营学 +经营业 +经营者 +经由 +经援 +经院 +经院科学 +经院式 +经侦处 +经作 +经作站 +茎 +茎草 +茎秆 +荆 +荆笆 +荆棘 +荆棘丛 +荆棘载途 +荆江 +荆芥 +荆门 +荆门市 +荆沙市 +荆条 +荆州 +荆州市 +荆庄乡 +惊 +惊诧 +惊诧不已 +惊呆 +惊动 +惊愕 +惊弓之鸟 +惊骇 +惊呼 +惊慌 +惊慌失措 +惊惶 +惊惶失措 +惊魂 +惊魂未定 +惊叫 +惊惊慌慌 +惊惧 +惊恐 +惊恐不安 +惊恐万状 +惊雷 +惊雷破柱 +惊奇 +惊扰 +惊人 +惊人之举 +惊蛇入草 +惊世骇俗 +惊悚 +惊叹 +惊叹号 +惊叹声 +惊涛 +惊涛骇浪 +惊涛激越 +惊涛拍岸 +惊天地 +惊天动地 +惊为天人 +惊悉 +惊喜 +惊喜交集 +惊喜万分 +惊吓 +惊险 +惊险片 +惊险频出 +惊险万状 +惊羡 +惊心触目 +惊心掉胆 +惊心动魄 +惊醒 +惊讶 +惊异 +惊异感 +惊蛰 +旌德县 +旌旗 +旌旗招展 +菁华 +晶 +晶粒 +晶亮 +晶亮亮 +晶体 +晶体点阵 +晶体管 +晶莹 +晶莹碧透 +晶莹明彻 +晶莹剔透 +晶状体 +腈纶 +睛 +粳稻 +粳米 +兢兢业业 +精 +精辟 +精兵 +精兵简政 +精兵强将 +精彩 +精彩纷呈 +精彩绝伦 +精巢 +精诚所至 +精诚团结 +精赤 +精虫 +精萃 +精粹 +精打细算 +精当 +精到 +精道 +精典 +精雕细刻 +精雕细镂 +精雕细琢 +精读 +精度 +精短 +精纺 +精纺城 +精干 +精耕细作 +精工 +精工细作 +精怪 +精光 +精贵 +精悍 +精华 +精华游 +精化 +精魂 +精加工 +精减 +精简 +精进 +精精神神 +精警 +精矿 +精力 +精力充沛 +精练 +精炼 +精炼厂 +精炼铜 +精良 +精量 +精料 +精灵 +精馏 +精毛 +精毛纺厂 +精煤 +精美 +精美绝伦 +精米 +精密 +精密度 +精密化 +精密型 +精妙 +精明 +精明能干 +精明强干 +精囊 +精疲力竭 +精疲力尽 +精品 +精品店 +精品化 +精品课 +精品库 +精品屋 +精品展 +精气 +精气神 +精气神儿 +精巧 +精确 +精确度 +精确性 +精锐 +精深 +精神 +精神百倍 +精神病 +精神病科 +精神病院 +精神不振 +精神抖擞 +精神化 +精神焕发 +精神界 +精神衰弱 +精神损耗 +精神文明 +精神性 +精瘦 +精饲料 +精算 +精算师 +精算学 +精算业 +精髓 +精邃 +精通 +精透 +精微 +精卫填海 +精武建功 +精武门 +精武卫国 +精细 +精细化 +精详 +精心 +精选 +精血 +精雅细巧 +精研细磨 +精盐 +精养育肥 +精业 +精液 +精义 +精益求精 +精印 +精英 +精英赛 +精湛 +精湛不磨 +精制 +精制品 +精制油 +精致 +精致化 +精忠报国 +精装 +精装本 +精壮 +精子 +精子库 +鲸 +鲸鲨 +鲸塘镇 +鲸吞 +鲸须 +鲸鱼 +井 +井岸镇 +井壁 +井场 +井底 +井底蛙 +井底之蛙 +井点 +井店 +井队 +井盖 +井冈 +井冈山 +井冈山市 +井岗霉素 +井架 +井井有条 +井口 +井喷 +井区 +井然 +井然不紊 +井然有序 +井绳 +井史 +井水 +井台 +井田 +井田制 +井筒 +井湾子 +井位 +井下 +井巷 +井陉 +井陉矿区 +井陉县 +井盐 +井站 +井组 +阱 +刭 +颈 +颈部 +颈侧 +颈间 +颈淋巴 +颈内 +颈前 +颈项 +颈椎 +颈椎病 +颈椎炎 +景 +景别 +景从 +景德 +景德镇 +景德镇市 +景地 +景点 +景点费 +景观 +景洪 +景洪市 +景况 +景貌 +景宁 +景片 +景颇族 +景气 +景区 +景群 +景色 +景山 +景深 +景泰 +景泰蓝 +景天 +景物 +景象 +景行行止 +景阳冈 +景阳岗 +景仰 +景遇 +景芝镇 +景致 +憬悟 +警 +警报 +警报灯 +警报器 +警报声 +警备 +警备部 +警备区 +警标 +警策 +警察 +警察部 +警察局 +警察署 +警察厅 +警察证 +警长 +警长制 +警车 +警灯 +警笛 +警笛声 +警队 +警方 +警风 +警服 +警告 +警告声 +警告信 +警官 +警棍 +警号 +警徽 +警绩 +警纪 +警监 +警教 +警戒 +警戒具 +警戒线 +警界 +警诫 +警句 +警具 +警觉 +警觉性 +警力 +警铃 +警铃声 +警帽 +警貌 +警民 +警枪 +警情 +警区 +警区制 +警犬 +警容 +警嫂 +警声大作 +警士 +警世 +警世书 +警世之作 +警世钟 +警示 +警示录 +警示牌 +警视 +警视厅 +警署 +警司 +警探 +警探伪装 +警惕 +警惕心 +警惕性 +警通队 +警威 +警卫 +警卫车 +警卫处 +警卫队 +警卫局 +警卫团 +警卫员 +警务 +警务区 +警衔 +警校 +警械 +警醒 +警讯 +警营 +警用 +警语 +警员 +警钟 +警钟长鸣 +警钟常鸣 +警钟篇 +警种 +警组 +警组制 +净 +净菜 +净菜社 +净菜行 +净菜业 +净产值 +净度 +净额 +净高 +净化 +净化剂 +净化论 +净化器 +净化师 +净化水 +净价 +净角 +净尽 +净空 +净宽 +净利 +净利润 +净利润率 +净流量 +净胜球 +净收入 +净水 +净水剂 +净摊款国 +净土 +净现金 +净余 +净月潭 +净增 +净增额 +净增支 +净增值 +净值 +净重 +净重量 +净赚 +净资产 +径 +径流 +径流量 +径情直遂 +径取 +径赛 +径向 +径直 +径自 +胫 +胫骨 +痉挛 +竞 +竞标 +竞标路 +竞标者 +竞猜 +竞猜卡 +竞驰 +竞春 +竞渡 +竞放 +竞放斗妍 +竞绘 +竞技 +竞技场 +竞技队 +竞技体操 +竞骥图 +竞价 +竞开 +竞买 +竞买价 +竞买者 +竞卖 +竞拍 +竞拍声 +竞聘者 +竞赛 +竞赛场 +竞赛奖 +竞赛类 +竞赛区 +竞赛题 +竞赛组 +竞升 +竞试 +竞速赛 +竞投品 +竞投人 +竞相 +竞销 +竞选 +竞选人 +竞艳图 +竞折腰 +竞争 +竞争法 +竞争力 +竞争力部 +竞争线 +竞争型 +竞争性 +竞争者 +竞职者 +竞逐 +竞走 +竟 +竟敢 +竟会 +竟陵 +竟然 +竟是 +竟自 +敬 +敬爱 +敬茶 +敬称 +敬辞 +敬而远之 +敬告 +敬酒 +敬老 +敬老爱老 +敬老爱幼 +敬老车 +敬老篷 +敬老养老 +敬老院 +敬礼 +敬立 +敬民如父 +敬慕 +敬佩 +敬启 +敬请 +敬若神明 +敬畏 +敬献 +敬孝 +敬谢不敏 +敬仰 +敬业 +敬业爱岗 +敬业勤业 +敬意 +敬语 +敬赠 +敬重 +敬祝 +敬祖 +敬祖台 +靓丽 +靓女 +靖 +靖安 +靖边楼 +靖边县 +靖江 +靖江市 +靖西县 +靖宇县 +靖远 +靖远县 +境 +境地 +境界 +境况 +境内 +境内外 +境头 +境外 +境域 +境遇 +静 +静电 +静电感应 +静电计 +静冈县 +静观 +静海 +静海县 +静候 +静寂 +静净斋 +静静 +静乐 +静乐县 +静流 +静脉 +静脉曲张 +静脉注射 +静谧 +静摩擦力 +静默 +静穆 +静悄悄 +静若处子 +静水压 +静思 +静态 +静听 +静卧 +静物 +静晤室 +静心 +静心思过 +静压 +静养 +静园 +静者 +静止 +静坐 +镜 +镜报 +镜匾 +镜泊湖 +镜春园 +镜花岭 +镜花水月 +镜架 +镜鉴 +镜框 +镜框费 +镜面 +镜片 +镜平 +镜屏 +镜台 +镜头 +镜头感 +镜匣 +镜真楼 +镜子 +扃 +迥 +迥然 +迥然不同 +迥然相异 +迥然有异 +迥异 +炯炯 +炯炯有神 +窘促 +窘境 +窘况 +窘困 +窘迫 +窘态 +纠 +纠察 +纠察队 +纠察线 +纠缠 +纠错 +纠错者 +纠纷 +纠纷案 +纠风 +纠风办 +纠葛 +纠集 +纠建 +纠结 +纠偏 +纠误 +纠章 +纠正 +究 +究办 +究竟 +鸠江区 +赳赳雄姿 +阄 +啾啾 +揪 +揪扯 +揪斗 +揪人心肺 +揪心 +九 +九点 +九点钟 +九鼎 +九冬会 +九二零 +九二六 +九二年 +九宫 +九宫山 +九谷 +九归 +九合村 +九湖镇 +九华灯 +九华山 +九江 +九江市 +九江县 +九江镇 +九节鞭 +九届 +九九 +九九歌 +九九归一 +九九年 +九里 +九里山 +九里山乡 +九里乡 +九连环 +九流三教 +九六 +九龙 +九龙杯 +九龙壁 +九龙口 +九年制 +九牛一毛 +九七 +九七年 +九曲八拐 +九曲回肠 +九曲溪 +九泉 +九泉瞑目 +九泉之下 +九日 +九三年 +九三学社 +九狮苑 +九十七中 +九十月 +九十月份 +九时 +九死不悔 +九死一生 +九四年 +九所 +九台市 +九天 +九通一平 +九头鸟 +九王庄村 +九尾狐 +九屋 +九屋乡 +九五 +九五年 +九五之尊 +九霄云外 +九眼桥 +九一八 +九一年 +九一三 +九一四 +九月 +九月份 +九运 +九运会 +九寨沟 +九制 +九重霄 +九州 +九州岛 +九纵 +久 +久别 +久别重逢 +久病 +久长 +久而久之 +久负盛名 +久假不归 +久经 +久经考验 +久经沙场 +久久 +久久不绝 +久留 +久慕盛名 +久盛不衰 +久拖不决 +久拖未决 +久违 +久闻大名 +久闻其名 +久演不衰 +久仰 +久仰大名 +久已 +久远 +久治不愈 +灸 +玖 +韭菜 +韭菜岭 +韭黄 +韭芽 +酒 +酒吧 +酒吧间 +酒吧台 +酒霸 +酒杯 +酒埠江 +酒菜 +酒厂 +酒乘 +酒池肉林 +酒店 +酒店业 +酒毒 +酒儿 +酒饭 +酒坊 +酒逢知己 +酒缸 +酒钢 +酒馆 +酒罐 +酒鬼 +酒柜 +酒酣耳热 +酒后 +酒候 +酒壶 +酒会 +酒忌 +酒家 +酒窖 +酒经 +酒精 +酒精度 +酒具 +酒考 +酒类 +酒量 +酒令 +酒楼 +酒篓 +酒垆 +酒绿灯红 +酒囊饭袋 +酒酿 +酒瓶 +酒瓶子 +酒谱 +酒气 +酒器 +酒钱 +酒曲 +酒趣 +酒泉 +酒肉朋友 +酒色 +酒商 +酒梢 +酒石酸 +酒食 +酒食征逐 +酒史 +酒水 +酒嗉子 +酒台 +酒坛 +酒桶 +酒徒 +酒尾 +酒味 +酒窝 +酒窝儿 +酒西 +酒席 +酒乡 +酒香 +酒兴 +酒宴 +酒药 +酒业 +酒液 +酒意 +酒友 +酒缘 +酒糟 +酒渣鼻 +酒者 +酒智 +酒盅 +酒桌 +酒足饭饱 +旧 +旧案 +旧币 +旧病 +旧钞 +旧城 +旧城区 +旧村 +旧地 +旧地重游 +旧店镇 +旧调重弹 +旧都 +旧范 +旧房 +旧故 +旧关 +旧观 +旧国 +旧憾 +旧货 +旧货业 +旧迹 +旧交 +旧金山 +旧景 +旧居 +旧郡 +旧刊本 +旧框框 +旧历 +旧历年 +旧貌 +旧年 +旧派 +旧欠 +旧情 +旧人 +旧日 +旧社会 +旧诗 +旧石器 +旧时 +旧式 +旧事 +旧书 +旧说 +旧俗 +旧岁 +旧体 +旧体诗 +旧闻 +旧物 +旧习 +旧习惯 +旧县镇 +旧学 +旧业 +旧有 +旧雨 +旧雨重逢 +旧约 +旧杂式 +旧宅 +旧账 +旧址 +旧制 +旧州镇 +旧作 +臼 +臼齿 +咎谴 +咎由自取 +厩肥 +救 +救兵 +救国 +救国会 +救国救民 +救国图强 +救国团 +救护 +救护车 +救护车队 +救护队 +救护队员 +救护连 +救护神 +救护所 +救活 +救火 +救火车 +救火队 +救火队长 +救火队员 +救火扬沸 +救急 +救济 +救济费 +救济户 +救济化 +救济金 +救济款 +救济粮 +救济品 +救济式 +救济型 +救救 +救苦救难 +救民 +救命 +救命车 +救命卡 +救命水 +救命网 +救命之恩 +救难 +救难船 +救起 +救球手 +救人 +救人者 +救生 +救生舱 +救生袋 +救生垫 +救生圈 +救生伞 +救生艇 +救生网 +救生衣 +救世军 +救世主 +救死扶伤 +救亡 +救亡图存 +救亡运动 +救危 +救危排险 +救物 +救险 +救心丹 +救心丸 +救星 +救应 +救援 +救援车 +救援船 +救援机 +救援款 +救援艇 +救灾 +救灾办 +救灾柴 +救灾车 +救灾款 +救灾粮 +救治 +救治金 +救助 +救助点 +救助法 +救助金 +救助卡 +救助款 +救助性 +救助者 +就 +就便 +就餐 +就餐者 +就此 +就此而言 +就地 +就地取材 +就地正法 +就读 +就范 +就教 +就近 +就里 +就坡下驴 +就寝 +就任 +就事论事 +就势 +就是 +就是了 +就是说 +就手 +就算 +就位 +就绪 +就学 +就要 +就业 +就业办 +就业部 +就业处 +就业观 +就业局 +就业量 +就业路 +就业率 +就业者 +就业证 +就医 +就医点 +就义 +就诊 +就诊点 +就诊量 +就诊率 +就诊者 +就职 +就职辞 +就坐 +就座 +舅 +舅父 +舅舅 +舅妈 +舅母 +舅爷 +居 +居安思危 +居处 +居多 +居高不下 +居高临下 +居高难下 +居功 +居功不傲 +居功至伟 +居功自傲 +居功自恃 +居家 +居家湾村 +居间 +居里夫人 +居留 +居留权 +居留证 +居民 +居民点 +居民户 +居民楼 +居民区 +居民委 +居奇牟利 +居然 +居士 +居室 +居首 +居所 +居危思危 +居危治危 +居委 +居委会 +居先 +居心不良 +居心叵测 +居庸 +居庸关 +居于 +居者 +居中 +居住 +居住舱 +居住地 +居住户 +居住区 +居住权 +居住者 +居住证 +拘 +拘板 +拘捕 +拘传 +拘谨 +拘禁 +拘留 +拘留所 +拘泥 +拘票 +拘束 +拘押 +拘役 +拘于 +狙 +狙击 +狙击手 +狙击战 +苴麻 +驹 +驹子 +掬 +裾 +鞠 +鞠躬 +鞠躬尽瘁 +鞠躬礼 +局 +局部 +局部性 +局长 +局长级 +局促 +局促不安 +局地 +局方 +局管内 +局级 +局界 +局里 +局面 +局内 +局势 +局外 +局外人 +局委 +局务 +局限 +局限性 +局域网 +局域网络 +局属 +局子 +局座 +桔 +桔产区 +桔梗 +桔果 +桔红色 +桔黄 +桔黄色 +桔农 +桔树 +桔味 +桔园 +桔子 +菊 +菊花 +菊花脑 +菊苣 +菊科 +菊石 +菊芋 +菊展 +菊酯类 +橘柑 +橘红 +橘红色 +橘黄色 +橘子 +橘子园 +橘子洲 +咀 +咀嚼 +沮 +沮丧 +举 +举案齐眉 +举办 +举办地 +举办者 +举报 +举报点 +举报人 +举报箱 +举报信 +举报者 +举杯 +举不胜举 +举步 +举步维艰 +举出 +举锤 +举措 +举鼎绝膑 +举动 +举凡 +举国 +举国上下 +举国体制 +举家 +举架 +举荐 +举借 +举举手 +举例 +举例来说 +举目 +举目可见 +举目四望 +举目望去 +举目无亲 +举棋不定 +举起 +举轻若重 +举人 +举世 +举世闻名 +举世无双 +举世瞩目 +举手 +举手投足 +举手之劳 +举头 +举贤 +举行 +举业 +举一反三 +举债 +举证 +举止 +举止端庄 +举重 +举重队 +举重若轻 +举重赛 +举足轻重 +举组 +矩 +矩尺 +矩形 +矩型坯 +矩阵 +矩阵式 +莒南 +莒南县 +莒县 +龃龉 +句 +句法 +句号 +句句 +句容 +句容市 +句容县 +句式 +句型 +句子 +句子成分 +巨 +巨宝村 +巨臂 +巨匾 +巨变 +巨擘 +巨财 +巨翅 +巨大 +巨笛 +巨额 +巨蜂 +巨佛 +巨幅 +巨富 +巨画 +巨黄色 +巨祸 +巨贾 +巨舰 +巨舰形 +巨奖 +巨匠 +巨鲸 +巨款 +巨浪 +巨浪区 +巨灵 +巨流 +巨龙 +巨龙头 +巨轮 +巨蟒 +巨片 +巨人 +巨商 +巨狮 +巨石 +巨石阵 +巨手 +巨头 +巨细 +巨细胞 +巨厦 +巨响 +巨星 +巨型 +巨型机 +巨野县 +巨业 +巨婴 +巨涌 +巨增 +巨制 +巨帙 +巨钟 +巨著 +巨资 +巨子 +巨作 +拒 +拒报 +拒捕 +拒斥 +拒钓 +拒腐防变 +拒付 +拒还 +拒贿 +拒假者 +拒谏饰非 +拒绝 +拒绝率 +拒礼 +拒卖 +拒请 +拒人千里 +拒收 +拒销 +拒载 +拒之门外 +具 +具备 +具结 +具名 +具体 +具体地说 +具体而微 +具体化 +具体劳动 +具体说来 +具象 +具象化 +具有 +俱 +俱毁 +俱佳 +俱精 +俱乐部 +俱乐部队 +俱乐部制 +俱全 +俱在 +倨 +倨傲 +倨傲不恭 +剧 +剧本 +剧变 +剧场 +剧毒 +剧毒级 +剧减 +剧降 +剧联 +剧烈 +剧目 +剧情 +剧社 +剧坛 +剧痛 +剧团 +剧务 +剧校 +剧协 +剧艺社 +剧艺学 +剧院 +剧院团 +剧增 +剧照 +剧中 +剧中人 +剧终 +剧种 +剧装 +剧组 +剧作 +剧作家 +剧作者 +惧 +惧怕 +惧色 +据 +据称 +据传 +据此 +据点 +据理力争 +据实 +据守 +据说 +据为己有 +据悉 +据以 +距 +距谏者 +距离 +距离感 +距平 +飓风 +锯 +锯齿 +锯齿草 +锯床 +锯蛋白 +锯刀 +锯机 +锯口 +锯末 +锯片 +锯条 +锯子 +聚 +聚氨乙烯 +聚氨酯 +聚宝盆 +聚苯乙烯 +聚变 +聚丙烯 +聚餐 +聚餐会 +聚光灯 +聚光点 +聚光镜 +聚合 +聚合醇类 +聚合力 +聚合物 +聚合性 +聚化 +聚会 +聚会党 +聚积 +聚集 +聚集地 +聚集区 +聚集一堂 +聚焦 +聚焦点 +聚精会神 +聚居 +聚居地 +聚居区 +聚居县 +聚聚 +聚礼会 +聚敛 +聚拢 +聚氯乙烯 +聚氯乙稀 +聚落 +聚伞花序 +聚散无常 +聚沙成塔 +聚首 +聚四氟 +聚讼纷纭 +聚碳酸酯 +聚糖 +聚头 +聚蚊成雷 +聚烯烃 +聚酰亚胺 +聚心成业 +聚乙烯 +聚义 +聚义厅 +聚珍版 +聚酯 +聚酯薄膜 +聚众 +聚众斗殴 +聚众闹事 +踞 +遽然 +瞿 +瞿河乡 +瞿家村 +瞿家湾村 +瞿家湾镇 +娟好 +娟秀 +捐 +捐建 +捐建者 +捐款 +捐款额 +捐款人 +捐款箱 +捐款站 +捐款者 +捐立 +捐料 +捐弃前嫌 +捐钱 +捐钱者 +捐躯 +捐税 +捐物 +捐献 +捐献卡 +捐血者 +捐增 +捐赠 +捐赠款 +捐赠者 +捐助 +捐助点 +捐助费 +捐助国 +捐助款 +捐助人 +捐助式 +捐资 +捐资人 +捐资者 +捐资助学 +涓滴 +涓滴成溪 +涓涓 +涓水之滨 +镌 +镌刻 +卷 +卷尺 +卷次 +卷儿 +卷柜 +卷进 +卷帘 +卷帘门 +卷面 +卷末 +卷内 +卷起 +卷曲 +卷入 +卷舌音 +卷舌元音 +卷数 +卷筒 +卷筒式 +卷土重来 +卷吸作用 +卷心菜 +卷须 +卷烟 +卷烟厂 +卷扬机 +卷叶虫 +卷叶蛾 +卷帙 +卷帙浩繁 +卷轴 +卷轴装 +卷子 +卷宗 +倦 +倦怠 +倦鸟投林 +倦容 +倦态 +倦意 +绢 +绢本 +绢纺 +绢纺厂 +绢花 +绢画 +绢丝 +绢丝纺 +绢制 +隽秀 +隽永 +隽语 +眷顾 +眷眷之情 +眷恋 +眷念 +眷属 +鄄 +鄄城县 +噘 +噘嘴 +撅 +撅臀 +决 +决不 +决策 +决策层 +决策法 +决策论 +决策权 +决策人 +决策人员 +决策性 +决策者 +决策制 +决堤 +决定 +决定论 +决定权 +决定书 +决定性 +决斗 +决断 +决非 +决非偶然 +决计 +决绝 +决口 +决裂 +决然 +决赛 +决赛圈 +决赛权 +决赛史 +决胜 +决胜局 +决胜盘 +决死队 +决算 +决算期 +决心 +决心书 +决一雌雄 +决一高低 +决一胜负 +决一死战 +决议 +决议案 +决意 +决战 +诀 +诀别 +诀窍 +诀要 +抉 +抉剔爬梳 +抉择 +绝 +绝版 +绝笔 +绝壁 +绝不 +绝不为过 +绝产 +绝唱 +绝尘而去 +绝处逢生 +绝大部分 +绝倒 +绝地 +绝顶 +绝对 +绝对额 +绝对高度 +绝对观念 +绝对化 +绝对量 +绝对零度 +绝对湿度 +绝对数 +绝对温度 +绝对性 +绝对真理 +绝对值 +绝非 +绝甘分少 +绝活 +绝活儿 +绝迹 +绝技 +绝交 +绝境 +绝句 +绝口 +绝路 +绝伦 +绝密 +绝妙 +绝灭 +绝命书 +绝品 +绝然 +绝色 +绝杀 +绝少 +绝食 +绝世 +绝世无匹 +绝收 +绝望 +绝无 +绝无仅有 +绝响 +绝学 +绝艺 +绝育 +绝缘 +绝缘层 +绝缘体 +绝缘纸 +绝缘子 +绝招 +绝症 +绝种 +觉 +觉察 +觉得 +觉世 +觉悟 +觉悟社 +觉醒 +觉着 +倔 +倔犟 +倔犟汉 +倔强 +倔头倔脑 +崛起 +掘 +掘坟鞭尸 +掘进 +掘进点 +掘进机 +掘进史 +掘进头 +掘开 +掘土机 +厥 +厥词 +谲 +蕨类 +蕨类植物 +橛子 +爵士 +爵士队 +爵士乐 +爵士乐队 +爵位 +爵溪镇 +爵爷 +镢头 +嚼 +嚼舌 +矍铄 +爝火 +攫取 +攫鼠 +军 +军备 +军兵种 +军博 +军部 +军操 +军长 +军车 +军船 +军大衣 +军代表 +军代表室 +军代处 +军刀 +军地 +军调部 +军调处 +军队 +军阀 +军法 +军法系 +军方 +军费 +军分区 +军风 +军服 +军港 +军鸽 +军歌 +军歌声 +军工 +军工部 +军功 +军功章 +军官 +军官法 +军官证 +军管会 +军管组 +军规 +军国主义 +军号 +军徽 +军婚 +军魂 +军火 +军火案 +军火商 +军机 +军机处 +军级 +军籍 +军纪 +军舰 +军交运输 +军阶 +军界 +军警 +军警民 +军警宪特 +军警靴 +军眷 +军军 +军科院 +军垦 +军控 +军裤 +军挎 +军乐 +军乐队 +军乐管 +军乐团 +军礼 +军力 +军粮 +军列 +军烈属 +军龄 +军令 +军令如山 +军令状 +军路 +军旅 +军马 +军帽 +军民 +军民共建 +军民航 +军民品 +军命 +军内 +军品 +军棋 +军旗 +军器 +军情 +军区 +军区队 +军权 +军犬 +军人 +军人证 +军容 +军容镜 +军嫂 +军师 +军师职 +军史 +军史部 +军史馆 +军士 +军士长 +军事 +军事编 +军事部 +军事部长 +军事法庭 +军事观 +军事管制 +军事化 +军事基地 +军事家 +军事科学 +军事篇 +军事区 +军事史 +军事体育 +军事五项 +军事学 +军事志 +军售 +军体 +军体拳 +军统 +军团 +军团长 +军屯村 +军威 +军委 +军委会 +军务 +军衔 +军饷 +军校 +军械 +军心 +军休 +军需 +军需部 +军需厂 +军需处 +军需品 +军需所 +军需业 +军训 +军研 +军衣 +军医 +军医大 +军艺 +军营 +军营学 +军用 +军用机 +军用犬 +军邮 +军援 +军运股 +军战史 +军帐 +军阵 +军政 +军政府 +军政后 +军政权 +军职 +军制 +军中 +军种 +军属 +军转 +军转办 +军转民 +军装 +军姿 +军资 +军字号 +君 +君不见 +君臣 +君临 +君权 +君山 +君山区队 +君王 +君主 +君主国 +君主立宪 +君主制 +君主专制 +君子 +君子国 +君子兰 +君子协定 +均 +均安 +均安镇 +均等 +均等化 +均分 +均富 +均衡 +均衡化 +均衡解 +均衡论 +均衡性 +均量 +均势 +均速 +均一 +均匀 +均匀率 +均值 +钧 +钧瓷 +皲裂 +菌 +菌斑 +菌草 +菌草业 +菌蛋白 +菌肥 +菌核 +菌类 +菌料 +菌林 +菌落 +菌苗 +菌丝 +菌物 +菌业 +菌种 +菌种场 +筠山 +麇集 +俊才 +俊儿 +俊发飘逸 +俊杰 +俊迈 +俊美 +俊男靓女 +俊俏 +俊秀 +俊雅 +俊逸 +郡 +郡级 +郡吏 +郡守 +郡县 +郡县制 +郡主 +峻 +峻拔秀逸 +峻岭 +峻峭 +峻伟 +浚 +骏 +骏马 +竣 +竣工 +咔嚓 +咔叽 +咔唑 +咖啡 +咖啡吧 +咖啡茶 +咖啡店 +咖啡豆 +咖啡馆 +咖啡壶 +咖啡碱 +咖啡节 +咖啡楼 +咖啡色 +咖啡厅 +咖啡屋 +咖啡因 +咖啡园 +咖啡渍 +咖喱 +喀 +喀布尔 +喀嚓 +喀城 +喀拉和顺 +喀拉拉邦 +喀麦隆 +喀麦隆队 +喀若拉 +喀什 +喀什市 +喀斯特 +喀土穆 +喀左县 +卡 +卡奥沃斯 +卡巴纳 +卡巴胂 +卡贝略港 +卡宾枪 +卡脖子 +卡车 +卡尺 +卡丁车 +卡尔多夫 +卡尔加里 +卡尔梅克 +卡尔沃格 +卡规 +卡介苗 +卡具 +卡壳 +卡口 +卡库马 +卡拉OK +卡拉巴尔 +卡拉巴赫 +卡拉当格 +卡拉季 +卡拉克泰 +卡拉奇 +卡勒瓦 +卡路里 +卡面 +卡那霉素 +卡纳塔克 +卡尼 +卡诺 +卡诺州 +卡片 +卡片盒 +卡其 +卡其村 +卡钳 +卡萨芒斯 +卡萨内 +卡式炉 +卡塔尔 +卡塔尔国 +卡塔赫纳 +卡特尔 +卡通 +卡通城 +卡通画 +卡通片 +卡通人 +卡通式 +卡肖 +卡亚尼 +卡宴 +卡业 +卡张 +卡折 +卡住 +卡子 +卡子湾 +开 +开拔 +开班 +开班式 +开办 +开办费 +开磅 +开本 +开辟 +开标 +开播 +开不开张 +开采 +开采权 +开采业 +开肠破肚 +开场 +开场白 +开唱 +开车 +开诚布公 +开诚相见 +开初 +开除 +开船 +开窗 +开创 +开创性 +开创者 +开春 +开错 +开单 +开裆裤 +开刀 +开导 +开倒车 +开道 +开动 +开端 +开恩 +开发 +开发办 +开发部 +开发带 +开发法 +开发方 +开发费 +开发局 +开发区 +开发区热 +开发权 +开发热 +开发人 +开发商 +开发史 +开发式 +开发署 +开发行 +开发型 +开发性 +开发业 +开发者 +开饭 +开方 +开房率 +开放 +开放办 +开放电路 +开放度 +开放区 +开放日 +开放式 +开放型 +开放性 +开封 +开封市 +开封县 +开福区 +开赴 +开腹 +开杆 +开工 +开工量 +开工率 +开关 +开关厂 +开关柜 +开关站 +开馆 +开锅 +开国 +开国史 +开航 +开和 +开后门 +开户 +开户费 +开户行 +开户者 +开花 +开花结果 +开花期 +开化 +开化县 +开怀 +开怀大笑 +开荒 +开会 +开豁 +开火 +开机 +开价 +开架 +开架式 +开间 +开讲 +开交 +开解 +开金 +开进 +开禁 +开镜 +开局 +开具 +开卷 +开卷有益 +开掘 +开开 +开开心 +开考 +开课 +开垦 +开垦费 +开口 +开口杯 +开口销 +开口子 +开快车 +开矿 +开阔 +开阔地 +开来 +开栏 +开朗 +开立 +开镰 +开列 +开裂 +开溜 +开鲁县 +开路 +开路先锋 +开绿灯 +开滦 +开罗 +开罗市 +开锣 +开曼 +开门 +开门红 +开门见山 +开门见喜 +开门揖盗 +开明 +开幕 +开幕词 +开幕辞 +开幕会 +开幕式 +开拍 +开盘 +开盘价 +开炮 +开篇 +开票 +开平市 +开评 +开屏 +开枰 +开普敦 +开普顿 +开启 +开气 +开枪 +开腔 +开窍 +开窍宁心 +开球 +开渠 +开赛 +开山 +开山炮 +开山祖师 +开设 +开始 +开市 +开式 +开水 +开水壶 +开水桶 +开司米 +开膛 +开题 +开天辟地 +开天窗 +开庭 +开停机 +开通 +开头 +开脱 +开拓 +开拓进取 +开拓力 +开拓型 +开拓性 +开拓者 +开拓者队 +开挖 +开挖量 +开外 +开玩笑 +开味品 +开胃 +开县 +开箱 +开箱费 +开销 +开小差 +开小灶 +开歇业 +开心 +开行 +开学 +开眼 +开演 +开阳 +开业 +开夜车 +开元区 +开原 +开原市 +开源 +开源节流 +开云见日 +开凿 +开闸 +开斋 +开斋节 +开展 +开战 +开张 +开诊 +开征 +开支 +开宗明义 +开走 +开足马力 +开罪 +揩 +揩油 +凯 +凯巴布 +凯歌 +凯歌声 +凯雷什镇 +凯里 +凯里市 +凯隆堡 +凯鲁万市 +凯鲁旺 +凯鲁旺城 +凯姆拉港 +凯内马 +凯旋 +凯旋归来 +凯旋门 +凯旋声 +凯旋式 +剀切 +铠甲 +慨 +慨当以慷 +慨然 +慨叹 +楷 +楷范 +楷模 +楷式 +楷书 +楷体 +楷则 +刊 +刊版 +刊播 +刊布 +刊出 +刊大 +刊登 +刊发 +刊号 +刊名 +刊首 +刊首语 +刊授 +刊头 +刊文 +刊物 +刊误表 +刊行 +刊印 +刊载 +勘 +勘测 +勘测工 +勘测局 +勘测院 +勘查 +勘查车 +勘查业 +勘察 +勘察队 +勘察者 +勘定 +勘探 +勘探队 +勘探队员 +勘探井 +勘探局 +勘探史 +勘探系 +勘探者 +勘误 +勘误表 +勘验 +勘验系泊 +龛 +龛图 +龛影 +堪 +堪称 +堪称一绝 +堪培拉 +堪培拉市 +堪萨斯城 +堪萨斯州 +堪市 +堪为 +堪言 +堪忧 +堪予 +戡 +坎 +坎伯岚 +坎布斯 +坎大哈 +坎儿 +坎儿井 +坎肩 +坎坎坷坷 +坎坷 +坎坷不平 +坎坷多舛 +坎昆 +坎门镇 +坎帕拉 +坎上乡 +坎市 +坎子 +侃 +侃价 +侃侃 +侃侃而谈 +侃山 +砍 +砍饼 +砍刀 +砍掉 +砍伐 +砍伐一空 +砍价 +砍头 +砍头疮 +砍头痈 +看 +看板 +看报 +看病 +看病票 +看不惯 +看不起 +看不上眼 +看不顺眼 +看财奴 +看成 +看出 +看穿 +看大门 +看待 +看到 +看得过儿 +看得起 +看法 +看风使舵 +看管 +看管人 +看海者 +看好 +看护 +看护房 +看护者 +看货费 +看家 +看家本领 +看家狗 +看家戏 +看见 +看看 +看客 +看来 +看门 +看门人 +看破 +看破红尘 +看齐 +看青 +看轻 +看热闹 +看人眉睫 +看人下菜 +看上 +看守 +看守费 +看守内阁 +看守所 +看守型 +看似 +看台 +看摊 +看头 +看透 +看望 +看相 +看押 +看样子 +看涨 +看中 +看重 +看朱成碧 +看走眼 +看作 +看做 +康 +康安路 +康拜因 +康保县 +康采恩 +康定 +康定城 +康定东路 +康复 +康复会 +康复站 +康复者 +康家沟 +康健 +康乐 +康乐城 +康乐球 +康乃馨 +康宁 +康平 +康乾 +康山 +康斯坦察 +康铜 +康熙 +康熙岭 +康庄 +康庄大道 +康庄镇 +慷 +慷慨 +慷慨悲歌 +慷慨陈词 +慷慨陈辞 +慷慨大方 +慷慨激昂 +慷慨解囊 +慷慨就义 +慷然 +糠 +糠秕 +糠菜 +糠油 +扛 +扛鼎之作 +扛回 +亢 +亢奋 +亢进 +亢进症 +亢阳 +伉俪 +抗 +抗癌 +抗癌药 +抗暴 +抗辩 +抗病 +抗病力 +抗尘走俗 +抗虫棉 +抗大 +抗敌 +抗敌素 +抗毒素 +抗毒血清 +抗风力 +抗浮 +抗腐性 +抗干扰 +抗干扰性 +抗寒 +抗旱 +抗旱剂 +抗衡 +抗洪 +抗滑桩 +抗坏血酸 +抗毁 +抗击 +抗极压性 +抗救灾 +抗拒 +抗拒感 +抗菌素 +抗菌血清 +抗菌药 +抗拉力 +抗拉强度 +抗涝 +抗联 +抗美援朝 +抗磨 +抗逆性 +抗清 +抗热 +抗热合金 +抗日 +抗日救亡 +抗日史 +抗日战争 +抗生素 +抗税 +抗诉 +抗诉案 +抗诉量 +抗体 +抗倭 +抗性 +抗宣 +抗宣队 +抗雪 +抗雪救灾 +抗压强度 +抗药性 +抗议 +抗议声 +抗议书 +抗议信 +抗议者 +抗御 +抗原 +抗孕片 +抗灾 +抗灾歌 +抗灾力 +抗战 +抗张强度 +抗震 +抗震歌 +抗震救灾 +抗震棚 +抗震性 +抗争 +炕 +炕床 +炕单儿 +炕洞 +炕孵 +炕柜 +炕几 +炕梢 +炕头 +炕头儿 +炕席 +炕桌 +炕桌儿 +考 +考查 +考察 +考察船 +考察点 +考察队 +考察队员 +考察费 +考察官 +考察期 +考察团 +考察站 +考察组 +考场 +考茨基 +考点 +考定 +考分 +考风 +考古 +考古队 +考古界 +考古所 +考古系 +考古学 +考古学家 +考古学界 +考古学系 +考官 +考核 +考核表 +考核卡 +考核制 +考核组 +考绩 +考级 +考级制 +考纪 +考究 +考据 +考据学 +考卷 +考考 +考佬佬 +考量 +考虑 +考评 +考评科 +考评员 +考评制 +考期 +考前 +考勤 +考勤簿 +考勤机 +考勤钟 +考区 +考取 +考入 +考讪路 +考上 +考生 +考试 +考试场 +考试题 +考试员 +考题 +考学 +考研 +考研热 +考验 +考证 +考种 +拷 +拷贝 +拷扁榄 +拷绸 +拷打 +拷纱 +拷问 +栲胶 +烤 +烤麸 +烤红薯 +烤花窑 +烤火 +烤火炉 +烤烤 +烤炉 +烤面包片 +烤面包器 +烤肉 +烤箱 +烤鸭 +烤鸭店 +烤烟 +烤烟叶 +烤羊肉 +烤鱼 +烤者 +铐 +犒劳 +犒赏 +靠 +靠岸 +靠背 +靠背轮 +靠边 +靠边儿站 +靠边站 +靠泊 +靠不住 +靠得住 +靠垫 +靠海吃海 +靠近 +靠拢 +靠模 +靠旗 +靠山 +靠山吃山 +靠实 +靠手 +靠水吃水 +靠椅 +靠枕 +坷垃 +苛 +苛捐杂税 +苛刻 +苛例 +苛求 +苛细 +苛性钾 +苛性碱 +苛性钠 +苛杂 +苛责 +苛政 +柯 +柯西金街 +柯枝 +珂罗版 +科 +科巴 +科巴县 +科班 +科班出身 +科布多省 +科长 +科城 +科大 +科迪亚克 +科队 +科尔多凡 +科尔沁 +科尔特 +科方 +科干局 +科工贸 +科工委 +科管 +科海 +科幻 +科幻画 +科幻片 +科级 +科计 +科技 +科技版 +科技报 +科技编 +科技部 +科技潮 +科技处 +科技点 +科技观 +科技馆 +科技户 +科技化 +科技角 +科技节 +科技界 +科技局 +科技类 +科技力 +科技链 +科技史 +科技书 +科技司 +科技亭 +科技委 +科技兴农 +科技型 +科技园 +科技园区 +科技站 +科技组 +科佳 +科教 +科教处 +科教片 +科教企 +科教文 +科教文卫 +科教兴国 +科教兴林 +科教兴农 +科教兴市 +科局级 +科举 +科考 +科考队 +科雷姆 +科雷亚 +科利马 +科连特斯 +科隆 +科伦坡 +科罗拉多 +科盲 +科明区 +科摩罗 +科目 +科纳克里 +科普 +科普部 +科普界 +科普栏 +科普类 +科普特 +科普网 +科普性 +科普站 +科企 +科恰班巴 +科钦 +科任 +科森察 +科森察省 +科沙拉村 +科社 +科室 +科索沃 +科索沃省 +科坛 +科特迪瓦 +科头跣足 +科头乡 +科托尔湾 +科托努 +科威特 +科威特城 +科威特尔 +科威特国 +科威特市 +科威特塔 +科委 +科西嘉 +科协 +科协组 +科星 +科学 +科学报 +科学部 +科学城 +科学化 +科学会 +科学技术 +科学家 +科学奖 +科学界 +科学楼 +科学热 +科学史 +科学司 +科学系 +科学型 +科学性 +科学学 +科学学系 +科学园 +科学院 +科学主义 +科研 +科研部 +科研处 +科研费 +科研关 +科研楼 +科研所 +科研型 +科研院 +科研组 +科艺楼 +科员 +棵 +棵儿 +棵棵 +棵子 +颏 +稞麦 +窠 +窠臼 +颗 +颗颗 +颗粒 +颗粒肥料 +颗粒剂 +颗粒物 +瞌睡 +磕 +磕打 +磕磕巴巴 +磕磕绊绊 +磕磕碰碰 +磕碰 +磕头 +磕头虫 +磕头机 +磕头碰脑 +蝌蚪 +壳 +壳菜 +壳体 +壳舾 +壳舾装 +壳质 +壳状 +壳子 +咳 +咳声叹气 +咳嗽 +咳嗽病 +可 +可爱 +可卑 +可悲 +可比 +可比价 +可比价格 +可比性 +可鄙 +可变 +可变电容 +可变项 +可变性 +可变资本 +可辨 +可不 +可不可能 +可不可以 +可操左券 +可操作性 +可乘之机 +可乘之隙 +可持续化 +可持续性 +可耻 +可触摸性 +可传达性 +可的松 +可调节性 +可读性 +可锻铸铁 +可兑换性 +可恶 +可发展性 +可防性 +可否 +可复性 +可感 +可歌 +可歌可泣 +可耕地 +可供热率 +可观 +可观者 +可管理性 +可贵 +可汗 +可好 +可贺 +可恨 +可回收式 +可获性 +可即 +可嘉 +可见 +可见度 +可见光 +可见一斑 +可鉴赏性 +可交换性 +可接受性 +可解析性 +可敬 +可敬可佩 +可卡因 +可看性 +可靠 +可靠率 +可靠性 +可可 +可可茶 +可可西里 +可可油 +可控硅 +可控性 +可口 +可乐 +可离性 +可利用率 +可怜 +可怜巴巴 +可怜虫 +可怜兮兮 +可怜相 +可能 +可能性 +可逆 +可逆反应 +可逆性 +可怕 +可批性 +可欺 +可气 +可泣 +可巧 +可亲 +可亲可近 +可亲可敬 +可庆可贺 +可取 +可圈可点 +可燃 +可燃物 +可燃性 +可人 +可溶性 +可生物 +可食菌 +可视电话 +可视性 +可是 +可受性 +可数 +可说是 +可塑性 +可缩性 +可叹 +可体 +可望 +可维修性 +可谓 +可惜 +可喜 +可相容性 +可想而知 +可消化率 +可消化性 +可笑 +可心 +可欣赏性 +可信 +可信度 +可信性 +可行 +可行性 +可选择性 +可言 +可疑 +可疑人 +可以 +可用 +可用地 +可用资金 +可有可无 +可预防性 +可再生性 +可赞 +可憎 +可知 +可重构性 +岢岚 +渴 +渴慕 +渴念 +渴盼 +渴求 +渴汤 +渴望 +克 +克/听 +克比里省 +克边疆区 +克当量 +克敌 +克敌制胜 +克分子 +克服 +克格勃 +克己 +克己奉公 +克己为民 +克尽职守 +克军 +克扣 +克拉 +克拉别克 +克拉根福 +克拉科夫 +克拉玛依 +克拉苏 +克莱维 +克郎球 +克朗 +克里特岛 +克里雅河 +克利夫兰 +克隆 +克隆牛 +克隆人 +克隆型 +克隆羊 +克罗地亚 +克旗 +克勤克俭 +克山 +克山病 +克什米尔 +克什若瓦 +克丝钳子 +克通社 +克维特绥 +克星 +克雅氏症 +克音村 +克音河乡 +克原子 +克制 +克州 +克孜勒苏 +克子 +刻 +刻板 +刻本 +刻薄 +刻不容缓 +刻刀 +刻毒 +刻度 +刻度尺 +刻骨铭心 +刻花 +刻划 +刻画 +刻肌刻骨 +刻刻 +刻苦 +刻苦耐劳 +刻款 +刻入 +刻写 +刻意 +刻印 +刻印员 +刻有 +刻舟求剑 +刻字 +刻字机 +客 +客帮 +客舱 +客场 +客畅其行 +客车 +客车厂 +客车队 +客船 +客串 +客店 +客队 +客饭 +客房 +客房部 +客观 +客观性 +客观主义 +客官 +客户 +客户群 +客货 +客货车 +客货港 +客货轮 +客货轮船 +客货运 +客货运量 +客货运输 +客机 +客籍 +客家 +客家人 +客居 +客客气气 +客流 +客流量 +客轮 +客满 +客票 +客气 +客气话 +客人 +客容量 +客商 +客死他乡 +客堂 +客套 +客套话 +客体 +客体化 +客厅 +客土 +客位 +客务 +客星 +客姓 +客游 +客源 +客源国 +客运 +客运部 +客运处 +客运段 +客运港 +客运量 +客运业 +客运员 +客运站 +客栈 +客站 +客座 +客座教授 +客座率 +恪尽 +恪尽职守 +恪守 +恪信 +课 +课本 +课表 +课长 +课程 +课程表 +课后 +课间 +课间餐 +课课 +课目 +课期 +课时 +课税 +课堂 +课题 +课题费 +课题组 +课外 +课文 +课业 +课以 +课余 +课员 +课征 +课桌 +课桌椅 +骒马 +嗑 +溘然长逝 +溘然辞世 +溘然而逝 +肯 +肯定 +肯定论 +肯干 +肯基亚克 +肯尼迪 +肯尼亚 +肯尼亚队 +肯切 +肯塔基州 +肯特郡 +肯辛顿宫 +垦 +垦边 +垦丁 +垦荒 +垦利县 +垦区 +垦团 +垦拓 +垦殖 +垦殖场 +恳 +恳切 +恳请 +恳求 +恳谈 +恳谈会 +恳望 +恳挚 +啃 +啃书本 +吭 +吭气 +吭声 +坑 +坑道 +坑底 +坑洞 +坑害 +坑痕 +坑井 +坑坑塘塘 +坑坑洼洼 +坑口 +坑蒙拐骗 +坑木 +坑农 +坑骗 +坑人 +坑塘 +坑洼 +坑穴 +铿 +铿锵 +铿锵有力 +空 +空白 +空白处 +空白点 +空白符 +空白行 +空包弹 +空肠 +空车 +空车费 +空城计 +空乘 +空串 +空当 +空当儿 +空当子 +空挡 +空荡荡 +空档 +空地 +空地导弹 +空吊板 +空调 +空调车 +空调费 +空调机 +空调界 +空调器 +空洞 +空洞无物 +空对空 +空额 +空儿 +空乏 +空泛 +空防 +空防区 +空房 +空分 +空腹 +空岗 +空港 +空港区 +空哥 +空格 +空格符 +空谷 +空谷足音 +空管 +空管局 +空管史 +空喊 +空耗 +空盒 +空话 +空怀 +空幻 +空寂 +空架子 +空间 +空间波 +空间点阵 +空间感 +空间结构 +空间局 +空间科学 +空间图形 +空间站 +空降 +空降兵 +空姐 +空军 +空军队 +空壳 +空客 +空空 +空空荡荡 +空空导弹 +空空落落 +空空如也 +空口无凭 +空旷 +空阔 +空阔无垠 +空廓 +空灵 +空论 +空落落 +空门 +空明 +空目录 +空难 +空炮 +空气 +空气层 +空气锤 +空气型 +空气轴承 +空前 +空前绝后 +空前未有 +空峭 +空勤 +空勤团 +空情 +空缺 +空嫂 +空山坝 +空舍清野 +空手 +空手道 +空手棍 +空手枪 +空疏 +空谈 +空谈者 +空天飞机 +空桐树 +空头 +空头支票 +空投 +空位 +空文 +空无所有 +空无一人 +空吸 +空袭 +空袭案 +空袭日 +空隙 +空暇 +空闲 +空箱 +空想 +空想家 +空想论 +空心 +空心坝 +空心板梁 +空心棒 +空心菜 +空心化 +空心砖 +空芯 +空芯板 +空虚 +空穴 +空穴来风 +空页 +空邮 +空余 +空语句 +空域 +空运 +空载 +空战 +空政 +空置 +空置房 +空置量 +空中 +空中客车 +空中楼阁 +空中小姐 +空竹 +空转 +空子 +空字符 +空座位 +崆峒岛 +崆岭群 +箜篌 +孔 +孔菜 +孔道 +孔洞 +孔府 +孔教 +孔径 +孔林 +孔孟之道 +孔庙 +孔明灯 +孔雀 +孔雀店村 +孔雀绿 +孔雀石 +孔雀舞 +孔隙 +孔型 +孔穴 +孔子 +恐 +恐怖 +恐怖主义 +恐慌 +恐惧 +恐惧感 +恐龙 +恐龙蛋 +恐龙队 +恐龙馆 +恐龙节 +恐怕 +恐吓 +恐吓信 +恐爪龙 +控 +控辩式 +控告 +控购 +控股 +控股权 +控管 +控价 +控检 +控球技术 +控梢 +控申 +控释 +控诉 +控诉书 +控制 +控制板 +控制棒 +控制程序 +控制点 +控制额 +控制阀 +控制法 +控制符 +控制感 +控制力 +控制率 +控制论 +控制器 +控制区 +控制权 +控制室 +控制数 +控制数字 +控制台 +控制线 +控制性 +控制者 +抠 +抠抠搜搜 +抠门 +抠算 +芤 +芤脉 +口 +口岸 +口岸办 +口碑 +口碑载道 +口才 +口陈肝胆 +口吃 +口齿 +口崇仁路 +口臭 +口出狂言 +口出怨言 +口传 +口传心授 +口疮 +口袋 +口袋罪 +口风 +口服 +口服心服 +口服液 +口福 +口腹 +口盖 +口干舌燥 +口感 +口供 +口号 +口号声 +口红 +口惠 +口技 +口角 +口角炎 +口杰伊汉 +口紧 +口径 +口诀 +口渴 +口口 +口口声声 +口里 +口粮 +口粮田 +口令 +口令声 +口蜜腹剑 +口蘑 +口气 +口腔 +口腔科 +口琴 +口琴课 +口区 +口若悬河 +口哨 +口哨儿 +口哨声 +口舌 +口实 +口试 +口是心非 +口授 +口述 +口水 +口说 +口条 +口头 +口头禅 +口头文学 +口头语 +口味 +口吻 +口弦 +口香糖 +口信 +口信儿 +口形 +口型 +口炎 +口译 +口音 +口语 +口语体 +口罩 +口中 +口诛笔伐 +口子 +叩 +叩动 +叩关 +叩击 +叩开 +叩门 +叩门声 +叩头虫 +叩响 +扣 +扣除 +扣除率 +扣动 +扣儿 +扣发 +扣缴 +扣篮 +扣篮王 +扣留 +扣率 +扣帽子 +扣襻 +扣球 +扣球奖 +扣人心弦 +扣杀 +扣饰 +扣头 +扣压 +扣押 +扣押款 +扣眼 +扣子 +寇 +寇仇 +枯 +枯饼 +枯草 +枯草热 +枯槁 +枯骨 +枯黄 +枯季 +枯寂 +枯竭 +枯井 +枯立木 +枯墨 +枯木 +枯木逢春 +枯木朽株 +枯荣 +枯涩 +枯杉 +枯瘦 +枯树 +枯水 +枯水季 +枯水期 +枯水区 +枯死 +枯萎 +枯叶 +枯叶蛾 +枯燥 +枯枝 +枯枝败叶 +枯坐 +哭 +哭鼻子 +哭喊 +哭喊声 +哭喊者 +哭叫 +哭叫声 +哭哭咧咧 +哭闹 +哭泣 +哭腔 +哭丧 +哭丧着脸 +哭声 +哭诉 +哭天喊地 +哭天哭地 +哭天抹泪 +哭天抢地 +哭笑不得 +堀 +窟 +窟口 +窟窿 +窟窿眼儿 +窟内 +骷髅 +苦 +苦捱 +苦熬 +苦不堪言 +苦菜花 +苦参 +苦差 +苦楚 +苦处 +苦大仇深 +苦胆 +苦调 +苦丁茶 +苦斗 +苦豆 +苦读 +苦干 +苦工 +苦功 +苦功夫 +苦瓜 +苦瓜酒 +苦果 +苦海 +苦寒 +苦活 +苦尽甘来 +苦尽甜来 +苦境 +苦酒 +苦口良药 +苦口婆心 +苦苦 +苦辣酸甜 +苦辣辛酸 +苦劳 +苦乐 +苦乐观 +苦力 +苦练 +苦旅 +苦虑 +苦闷 +苦命 +苦木 +苦木树 +苦木素 +苦难 +苦难感 +苦恼 +苦其心志 +苦情 +苦求 +苦肉计 +苦涩 +苦事 +苦水 +苦思 +苦思冥想 +苦痛 +苦头 +苦味 +苦味酸 +苦相 +苦笑 +苦心 +苦心孤诣 +苦心经营 +苦行 +苦行僧 +苦学 +苦役 +苦英英 +苦于 +苦雨 +苦战 +苦仗 +苦衷 +苦槠 +苦竹 +苦主 +库 +库坝 +库布其 +库藏 +库车 +库车县 +库存 +库存量 +库存值 +库贷 +库底子 +库缎 +库尔德 +库尔勒 +库尔勒市 +库房 +库锦 +库克 +库克斯区 +库款 +库里村 +库仑计 +库马西 +库马西市 +库面 +库命令 +库内 +库纳 +库涅茨克 +库诺维采 +库区 +库容 +库斯科省 +库图佐夫 +库瓦斯 +库蚊 +库务局 +库亚巴 +库亚巴市 +库银 +库主 +喾 +裤 +裤衩 +裤带 +裤袋 +裤裆 +裤兜 +裤褂 +裤管 +裤脚 +裤腿 +裤腰 +裤腰带 +裤子 +酷 +酷爱 +酷烈 +酷虐 +酷热 +酷暑 +酷似 +酷刑 +夸 +夸大 +夸大其词 +夸大其辞 +夸大性 +夸诞 +夸父追日 +夸胡 +夸奖 +夸口 +夸夸 +夸夸其谈 +夸里 +夸—纳省 +夸饰 +夸耀 +夸赞 +夸张 +夸张式 +垮 +垮台 +挎 +挎包 +胯 +胯骨 +跨 +跨步 +跨步电压 +跨度 +跨国 +跨国公司 +跨过 +跨鹤西游 +跨径 +跨距 +跨栏 +跨年度 +跨平台 +跨区 +跨区机 +跨入 +跨上 +跨学科 +跨越 +跨越式 +跨越性 +块 +块儿 +块根 +块茎 +块块 +块垒 +块石 +块数 +块头 +块状 +快 +快班 +快班车 +快板 +快板儿 +快报 +快步 +快步流星 +快餐 +快餐店 +快餐馆 +快餐盒 +快餐具 +快餐业 +快车 +快车道 +快车化 +快单磁 +快当 +快刀 +快递 +快点 +快反 +快感 +快攻 +快攻手 +快攻型 +快活 +快检仪 +快件 +快捷 +快快 +快快乐乐 +快乐 +快论 +快马加鞭 +快慢 +快煤 +快门 +快门儿 +快棋 +快棋赛 +快热式 +快人快语 +快赛 +快事 +快手 +快书 +快速 +快速化 +快艇 +快慰 +快信 +快行道 +快讯 +快言快语 +快要 +快译通队 +快意 +快照 +快纸 +快中子 +快嘴 +郐 +脍 +脍炙人口 +筷 +筷子 +筷子巷 +宽 +宽帮镇 +宽敞 +宽畅 +宽城 +宽城街 +宽绰 +宽打窄用 +宽大 +宽大为怀 +宽带 +宽度 +宽泛 +宽幅 +宽广 +宽宏 +宽宏大量 +宽厚 +宽厚仁德 +宽街 +宽解 +宽宽 +宽宽敞敞 +宽宽的 +宽旷 +宽阔 +宽利队 +宽仁 +宽容 +宽容度 +宽容性 +宽舒 +宽恕 +宽松 +宽套 +宽体 +宽慰 +宽限 +宽限期 +宽心 +宽心丸儿 +宽严 +宽以待己 +宽以待人 +宽银幕 +宽于待人 +宽余 +宽裕 +宽窄 +宽窄行 +宽者 +髋骨 +髋关节 +款 +款待 +款冬 +款额 +款费 +款款 +款款而动 +款款深情 +款留 +款识 +款式 +款物 +款项 +款型 +款子 +匡扶 +匡匡 +匡庐奇秀 +匡世济民 +匡算 +匡正 +诓 +诓骗 +哐啷 +筐 +筐子 +狂 +狂傲 +狂暴 +狂奔 +狂飙 +狂飙运动 +狂草 +狂潮 +狂跌 +狂放不羁 +狂吠 +狂风 +狂风暴雪 +狂风暴雨 +狂风恶浪 +狂风怒号 +狂轰烂炸 +狂轰滥炸 +狂呼 +狂欢 +狂欢节 +狂欢夜 +狂澜 +狂乱 +狂气 +狂泉 +狂犬病 +狂热 +狂人 +狂升 +狂涛 +狂妄 +狂妄自大 +狂喜 +狂想曲 +狂笑 +狂言 +狂野 +狂吟 +狂饮 +狂躁 +诳话 +圹 +况 +况且 +况味 +旷 +旷工 +旷古 +旷课 +旷日持久 +旷世名作 +旷世之作 +旷野 +旷远 +矿 +矿部 +矿藏 +矿层 +矿产 +矿产部 +矿产地 +矿产品 +矿产学 +矿产业 +矿长 +矿场 +矿车 +矿尘 +矿床 +矿灯 +矿地 +矿点 +矿粉 +矿工 +矿工服 +矿工会 +矿工图 +矿管办 +矿化度 +矿化水 +矿浆 +矿井 +矿局 +矿坑 +矿脉 +矿棉 +矿区 +矿泉 +矿泉壶 +矿泉井 +矿泉水 +矿泉水瓶 +矿容 +矿溶水 +矿砂 +矿山 +矿上 +矿石 +矿体 +矿务 +矿务局 +矿物 +矿物纤维 +矿物油 +矿物质 +矿岩 +矿盐 +矿冶 +矿业 +矿业权 +矿用 +矿用车 +矿院 +矿渣 +矿渣厂 +矿脂 +矿种 +矿主 +矿柱 +框 +框架 +框框 +框图 +框子 +眶 +亏 +亏本 +亏本儿 +亏待 +亏得 +亏耗 +亏空 +亏困 +亏量 +亏欠 +亏损 +亏损额 +亏损饭 +亏损面 +亏损社 +亏损声 +亏心 +亏心事 +亏盈相抵 +亏月 +岿然不动 +盔甲 +窥 +窥豹一斑 +窥测 +窥到 +窥见 +窥破 +窥视 +窥伺 +窥探 +窥探者 +窥寻 +奎宁 +奎松 +奎苏乡 +奎塔 +奎文 +奎文区 +馗 +葵花 +葵花仁 +葵花籽 +葵花子 +葵扇 +葵涌 +暌 +暌违 +魁北克 +魁北克省 +魁首 +魁伟 +魁梧 +魁星 +魁夷 +夔门 +夔纹 +傀儡 +傀儡戏 +匮 +匮乏 +匮缺 +喟然 +喟叹 +愧 +愧不可当 +愧对 +愧悔 +愧疚 +愧色 +愧于 +溃 +溃败 +溃不成军 +溃决 +溃烂 +溃入 +溃散 +溃逃 +溃退 +溃疡 +溃疡病 +溃于蚁穴 +馈赠 +馈赠品 +坤 +坤表 +坤宁宫 +昆 +昆布 +昆虫 +昆虫学家 +昆河 +昆剧 +昆剧热 +昆剧团 +昆仑 +昆仑山 +昆明 +昆明湖 +昆明市 +昆腔 +昆区 +昆曲 +昆山 +昆山市 +昆士兰 +昆士兰州 +昆州 +鲲鹏 +捆 +捆绑 +捆绑式 +捆儿 +捆扎 +困 +困惫 +困处 +困顿 +困厄 +困乏 +困惑 +困境 +困窘 +困局 +困倦 +困苦 +困难 +困难户 +困难性 +困难重重 +困扰 +困人 +困守 +困兽犹斗 +困陷 +扩 +扩编 +扩产 +扩充 +扩大 +扩大化 +扩大会 +扩股 +扩及 +扩建 +扩浇 +扩军 +扩军备战 +扩刊 +扩宽 +扩能 +扩容 +扩散 +扩散式 +扩销 +扩胸器 +扩血管药 +扩音 +扩音机 +扩音器 +扩音声 +扩印 +扩增 +扩展 +扩张 +扩张力 +扩张式 +扩张型 +扩张性 +扩张主义 +扩种 +扩资 +括 +括号 +括弧 +括约肌 +阔 +阔别 +阔步 +阔绰 +阔大 +阔阔的 +阔老 +阔老板 +阔略 +阔气 +阔少 +阔叶 +阔叶林 +阔叶树 +廓 +廓落 +廓清 +垃圾 +垃圾包 +垃圾场 +垃圾车 +垃圾池 +垃圾带 +垃圾袋 +垃圾道 +垃圾点 +垃圾堆 +垃圾坑 +垃圾量 +垃圾桶 +垃圾筒 +垃圾箱 +垃圾羊 +垃圾站 +垃圾猪 +垃圾猪肉 +垃桶筒 +拉 +拉巴布 +拉巴斯 +拉巴特 +拉帮结伙 +拉帮结派 +拉卜楞寺 +拉长 +拉车 +拉扯 +拉床 +拉达乡 +拉倒 +拉德方斯 +拉吊型 +拉丁 +拉丁美州 +拉丁美洲 +拉丁派 +拉丁区 +拉丁文 +拉丁舞 +拉丁字母 +拉动 +拉动经济 +拉动力 +拉动式 +拉动型 +拉动性 +拉都路 +拉法耶特 +拉杆 +拉格斯 +拉各斯 +拉各斯港 +拉呱 +拉关系 +拉合尔 +拉合尔市 +拉后腿 +拉环 +拉簧 +拉家常 +拉家带口 +拉贾斯坦 +拉近 +拉近乎 +拉锯 +拉锯式 +拉锯战 +拉锯状 +拉开 +拉坎多纳 +拉康 +拉客 +拉拉 +拉拉扯扯 +拉拉队 +拉拉队员 +拉拉杂杂 +拉郎配 +拉郎配式 +拉犁山 +拉力 +拉力器 +拉力赛 +拉练 +拉链 +拉拢 +拉耧 +拉路村 +拉马拉 +拉玛古猿 +拉玛四路 +拉煤车 +拉美 +拉门 +拉面 +拉模 +拉炮 +拉平 +拉普拉斯 +拉齐奥队 +拉起呱来 +拉绒 +拉萨 +拉萨河 +拉萨河畔 +拉萨市 +拉三扯四 +拉伤 +拉伸形变 +拉屎 +拉手 +拉手连心 +拉斯曼 +拉锁 +拉锁儿 +拉塔基亚 +拉脱维亚 +拉网 +拉网式 +拉乌舍 +拉西乡 +拉稀 +拉下马 +拉下水 +拉纤 +拉线 +拉延 +拉依喀乡 +拉油点 +拉杂 +拉直 +拉制 +拉孜县 +啦 +啦啦队 +邋里邋蹋 +邋遢 +喇叭 +喇叭沟门 +喇叭花 +喇叭口 +喇叭裤 +喇叭声 +喇叭筒 +喇叭形 +喇嘛 +喇嘛教 +剌 +剌叶栎 +腊 +腊八 +腊八粥 +腊肠 +腊尔山 +腊黄 +腊酒 +腊玛古猿 +腊梅 +腊肉 +腊味 +腊味店 +腊鱼 +腊月 +腊月二十 +腊月廿九 +腊月廿一 +腊月三十 +腊月十六 +腊月十五 +腊质膜 +蜡 +蜡板 +蜡版 +蜡笔 +蜡虫 +蜡床 +蜡鼓 +蜡果 +蜡花 +蜡黄 +蜡疗 +蜡扦 +蜡染 +蜡人 +蜡台 +蜡丸 +蜡像馆 +蜡叶 +蜡渣子 +蜡纸 +蜡质 +蜡烛 +蜡嘴 +辣 +辣度 +辣酱 +辣椒 +辣椒堆 +辣椒酱 +辣椒水 +辣妹 +辣妹子 +辣手 +辣丝丝 +辣味 +辣油 +辣子 +来 +来安 +来安县 +来安乡 +来宾 +来宾席 +来不得 +来不及 +来船 +来到 +来得 +来得及 +来电 +来犯 +来访 +来访者 +来复枪 +来复线 +来稿 +来稿者 +来函 +来亨鸡 +来鸿 +来华 +来回 +来回来去 +来集镇 +来件 +来讲 +来劲 +来京 +来看 +来客 +来来回回 +来来去去 +来来往往 +来历 +来历不明 +来料加工 +来临 +来龙去脉 +来路 +来路不明 +来年 +来去 +来人 +来日 +来日方长 +来日无多 +来生 +来时 +来世 +来势 +来势汹汹 +来书 +来水 +来水量 +来说 +来头 +来万塞迪 +来往 +来文 +来校 +来信 +来信版 +来信人 +来信者 +来兴府 +来言 +来意 +来由 +来源 +来源地 +来源国 +来源于 +来者 +来者不拒 +来之不易 +来着 +来自 +来踪去迹 +涞源县 +莱 +莱比锡 +莱城区 +莱法州 +莱钢 +莱家村 +莱里达市 +莱芒湖 +莱姆病 +莱切队 +莱切市 +莱塞 +莱山 +莱斯特 +莱索托 +莱沃恰 +莱芜 +莱芜市 +莱西 +莱西市 +莱西县 +莱阳 +莱阳市 +莱茵 +莱茵河 +莱州 +莱州市 +赖 +赖氨酸 +赖皮 +赖以 +赖以生存 +赖账 +赖账者 +濑户 +濑户内海 +癞病 +癞蛤蟆 +癞皮狗 +癞癣 +籁 +籟传十 +兰 +兰报 +兰草 +兰摧玉折 +兰村 +兰村乡 +兰大 +兰后 +兰花 +兰花指 +兰家镇 +兰考 +兰考县 +兰炼 +兰陵镇 +兰坪 +兰谱 +兰桥 +兰山 +兰山区 +兰特 +兰田 +兰亭序 +兰西 +兰溪 +兰溪市 +兰香 +兰新 +兰因絮果 +兰州 +兰州市 +岚皋 +岚光氤氲 +岚山 +岚山头 +拦 +拦挡 +拦道木 +拦柜 +拦海大坝 +拦河坝 +拦河闸 +拦洪 +拦洪坝 +拦击 +拦截 +拦截者 +拦路 +拦路虎 +拦路人 +拦水坝 +拦网 +拦网奖 +拦污栅 +拦蓄 +拦腰 +拦住 +拦阻 +栏 +栏板 +栏杆 +栏柜 +栏目 +栏目类 +栏圈 +栏网 +栏栅 +阑 +阑干 +阑珊 +阑珊处 +阑尾 +阑尾炎 +蓝 +蓝白色 +蓝宝石 +蓝本 +蓝布 +蓝筹股 +蓝点鲅 +蓝点颏 +蓝靛 +蓝盾 +蓝矾 +蓝黑色 +蓝狐 +蓝花楹 +蓝剑队 +蓝鲸 +蓝盔 +蓝领 +蓝绿色 +蓝墨水 +蓝皮书 +蓝旗营 +蓝桥 +蓝色 +蓝山 +蓝湿革 +蓝湿皮 +蓝水 +蓝天 +蓝田 +蓝田生玉 +蓝田猿人 +蓝图 +蓝兮兮 +蓝幽幽 +蓝藻 +谰 +谰言 +澜沧江 +褴褛 +褴褛不堪 +篮 +篮板 +篮板球 +篮板王 +篮筐 +篮里 +篮联 +篮篓 +篮排球 +篮球 +篮球场 +篮球队 +篮球架 +篮球界 +篮球赛 +篮坛 +篮下 +篮协 +篮子 +览 +览胜 +揽 +揽存 +揽活 +揽客 +揽括 +揽胜 +缆 +缆车 +缆车道 +缆车线 +缆车厢 +缆道 +缆沟 +缆绳 +缆索 +榄球赛 +懒 +懒虫 +懒得 +懒惰 +懒惰症 +懒汉 +懒汉式 +懒觉 +懒懒 +懒散 +懒洋洋 +懒腰 +烂 +烂肠瘟 +烂根 +烂乎乎 +烂糊 +烂漫 +烂漫多姿 +烂泥 +烂泥塘 +烂石 +烂熟 +烂摊子 +烂兮兮 +烂秧 +烂账 +烂种 +烂仔巷 +烂醉如泥 +滥 +滥报 +滥编 +滥采乱伐 +滥发 +滥伐 +滥配 +滥杀 +滥觞 +滥肆 +滥套子 +滥印 +滥用 +滥竽充数 +郎 +郎才女貌 +郎当嫂 +郎酒 +郎酒厂 +郎舅 +郎五庄村 +郎溪县 +郎中 +狼 +狼狈 +狼狈不堪 +狼狈为奸 +狼奔豕突 +狼疮 +狼道 +狼毒 +狼狗 +狼毫 +狼嚎 +狼獾 +狼藉 +狼群 +狼山鸡 +狼头山 +狼吞虎咽 +狼尾草 +狼窝 +狼心狗肺 +狼牙山 +狼烟 +狼烟四起 +狼子野心 +莨菪 +廊 +廊坊 +廊坊籍 +廊坊市 +廊开府 +廊门 +廊桥遗梦 +廊首 +廊尾 +廊庑 +廊柱 +廊子 +琅玳 +琅环 +琅琅的 +琅琅上口 +琅琊乡 +榔头 +榔榆 +锒铛入狱 +朗 +朗布依埃 +朗德 +朗读 +朗读声 +朗海村 +朗朗 +朗朗上口 +朗然 +朗润园 +朗声 +朗爽 +朗斯 +朗诵 +朗诵会 +朗县 +朗照 +浪 +浪潮 +浪船 +浪荡 +浪费 +浪费性 +浪谷 +浪花 +浪迹 +浪迹天涯 +浪尖 +浪劲 +浪卡子县 +浪里白条 +浪里去 +浪漫 +浪漫派 +浪漫曲 +浪漫史 +浪漫主义 +浪木 +浪桥 +浪人 +浪水 +浪涛 +浪涛不再 +浪淘沙 +浪头 +浪头港 +浪游 +浪子 +捞 +捞刀河 +捞稻草 +捞钱 +捞取 +捞砂 +捞一把 +捞油水 +劳 +劳保 +劳不矜功 +劳动 +劳动保险 +劳动布 +劳动部 +劳动部门 +劳动党 +劳动对象 +劳动法 +劳动费 +劳动服 +劳动改造 +劳动节 +劳动局 +劳动局长 +劳动课 +劳动力 +劳动量 +劳动路 +劳动模范 +劳动强度 +劳动权 +劳动日 +劳动手段 +劳动所 +劳动厅 +劳动者 +劳动资料 +劳顿 +劳而无功 +劳而无获 +劳乏 +劳方 +劳防 +劳服 +劳改 +劳改犯 +劳工 +劳工部 +劳工法 +劳工科 +劳绩 +劳技 +劳驾 +劳教 +劳教所 +劳教营 +劳金 +劳苦 +劳苦功高 +劳累 +劳力 +劳联 +劳碌 +劳民伤财 +劳模 +劳其筋骨 +劳伤 +劳身焦思 +劳神 +劳师动众 +劳务 +劳务费 +劳务工 +劳务社 +劳务市场 +劳协 +劳心 +劳宣 +劳燕分飞 +劳役 +劳役地租 +劳逸结合 +劳有所得 +劳者 +劳庄 +劳资 +劳资处 +劳资政 +劳总 +劳作 +劳作室 +牢 +牢不可破 +牢房 +牢固 +牢记 +牢靠 +牢牢 +牢笼 +牢骚 +牢稳 +牢系 +牢狱 +唠 +唠叨 +唠嗑 +崂山 +崂山区 +痨病 +醪糟 +老 +老K +老媪 +老八龙桥 +老八路 +老把式 +老爸 +老百姓 +老板 +老板娘 +老板桌 +老办法 +老半日 +老伴 +老伴儿 +老帮 +老蚌生珠 +老鸨 +老辈 +老本 +老本行 +老边区 +老表 +老兵 +老伯 +老场 +老巢 +老成 +老成持重 +老城 +老城区 +老城镇 +老处女 +老粗 +老粗儿 +老醋 +老搭档 +老大 +老大不小 +老大夫 +老大哥 +老大姐 +老大劲儿 +老大妈 +老大难 +老大娘 +老大爷 +老旦 +老当益壮 +老党员 +老到 +老道 +老底 +老弟 +老典型 +老雕 +老调 +老调重弹 +老掉牙 +老爹 +老豆腐 +老儿 +老儿子 +老二 +老佛爷 +老夫 +老夫子 +老父 +老父亲 +老妇 +老干部 +老干部局 +老干局 +老港 +老工人 +老公公 +老姑娘 +老古董 +老鸹 +老关山 +老官堡乡 +老官地乡 +老广 +老规矩 +老汉 +老好人 +老河口市 +老红军 +老狐狸 +老糊涂 +老虎 +老虎凳 +老虎机 +老虎帽 +老虎皮 +老虎钳 +老虎滩 +老虎团 +老虎灶 +老花 +老花镜 +老花眼 +老化 +老话 +老槐 +老皇历 +老黄历 +老黄牛 +老记 +老骥伏枥 +老家 +老奸巨猾 +老尖沟 +老茧 +老江湖 +老将 +老将迟暮 +老将队 +老犟头 +老交情 +老窖 +老街 +老街旧邻 +老姐儿 +老境 +老九 +老酒 +老舅 +老君庙 +老君堂 +老勘 +老框框 +老辣 +老老少少 +老老实实 +老泪横流 +老泪纵横 +老例 +老脸 +老练 +老两口 +老龄 +老龄化 +老龄委 +老龙头 +老路 +老妈妈 +老妈子 +老马车社 +老马识途 +老迈 +老毛病 +老梅 +老面皮 +老面子 +老谋深算 +老母 +老奶奶 +老年 +老年斑 +老年病 +老年病学 +老年人 +老年型 +老年性 +老年学 +老年医学 +老年症 +老年组 +老娘 +老牛 +老牛破车 +老农 +老牌 +老牌子 +老派 +老朋友 +老脾气 +老婆 +老婆儿 +老婆婆 +老婆子 +老铺 +老气 +老气横秋 +老前辈 +老亲 +老区 +老区办 +老区人 +老拳 +老拳挥舞 +老人 +老人斑 +老人家 +老人节 +老人手 +老人星 +老人院 +老弱病残 +老弱残兵 +老三 +老三件 +老三届 +老三样 +老山 +老少 +老少边穷 +老少皆知 +老少无欺 +老少咸宜 +老生 +老生常谈 +老师 +老师傅 +老实 +老实巴交 +老实话 +老实人 +老实事 +老式 +老视眼 +老是 +老手 +老寿星 +老鼠 +老鼠洞 +老鼠过街 +老鼠会 +老帅 +老四 +老松 +老宋体 +老叟 +老塔村 +老太 +老太公 +老太婆 +老太太 +老太爷 +老态 +老态龙钟 +老汤 +老套子 +老天 +老天爷 +老铁山 +老同事 +老头 +老头儿 +老头子 +老土 +老屯 +老外 +老顽固 +老翁 +老挝 +老屋 +老吾老 +老五 +老先生 +老弦 +老乡 +老相 +老相识 +老巷 +老小 +老校 +老兄 +老羞成怒 +老朽 +老鸦 +老岩岗 +老眼光 +老爷 +老爷儿 +老爷式 +老爷爷 +老爷子 +老一辈 +老一套 +老鹰 +老鹰队 +老营 +老油子 +老友 +老有所乐 +老有所为 +老有所学 +老有所养 +老有所依 +老幼 +老玉米 +老妪 +老妪能解 +老远 +老早 +老宅 +老寨 +老寨村 +老毡筒 +老战士 +老丈人 +老账 +老者 +老枝 +老中青 +老中青年 +老中青少 +老住户 +老庄 +老资格 +老子 +老字号 +老总 +老祖公 +老祖宗 +佬 +姥姥 +姥爷 +潦草 +潦倒 +潦倒终身 +涝 +涝坝 +涝池 +涝害 +涝河桥 +涝河桥村 +涝洼地 +涝洼塘 +涝灾 +烙 +烙饼 +烙痕 +烙画 +烙画家 +烙刻 +烙铁 +烙印 +酪素 +酪酸 +乐 +乐安 +乐安县 +乐不可支 +乐不思蜀 +乐池 +乐此不疲 +乐道 +乐得 +乐东 +乐都县 +乐段 +乐队 +乐儿 +乐而忘返 +乐丰村 +乐府 +乐感 +乐歌 +乐观 +乐观其成 +乐观者 +乐观主义 +乐果 +乐呵呵 +乐魂 +乐极生悲 +乐句 +乐理 +乐陵 +乐陵市 +乐律 +乐迷 +乐平 +乐平籍 +乐平市 +乐评 +乐谱 +乐器 +乐器室 +乐清 +乐清市 +乐曲 +乐曲声 +乐趣 +乐融融 +乐山 +乐山川 +乐山市 +乐善好施 +乐声 +乐师 +乐施会 +乐施米 +乐事 +乐手 +乐思 +乐台 +乐坛 +乐天 +乐天派 +乐天知命 +乐亭 +乐亭县 +乐土 +乐团 +乐舞 +乐学 +乐业 +乐意 +乐音 +乐悠悠 +乐游乐心 +乐于 +乐于助人 +乐园 +乐韵 +乐章 +乐滋滋 +叻 +勒 +勒紧 +勒卡 +勒勒车 +勒令 +勒流 +勒马尔歇 +勒石记痛 +勒索 +雷 +雷暴 +雷暴雨 +雷暴云 +雷场 +雷池 +雷达 +雷达表 +雷达兵 +雷达站 +雷打不动 +雷电 +雷电交加 +雷丁 +雷动 +雷锋 +雷锋班 +雷锋式 +雷锋团 +雷根市 +雷公 +雷公山 +雷汞 +雷管 +雷害 +雷轰电闪 +雷击 +雷击火 +雷厉风行 +雷利赞 +雷利赞省 +雷龙 +雷米特杯 +雷鸣 +雷鸣电闪 +雷鸣谷 +雷鸟 +雷炮 +雷劈 +雷坪 +雷坪乡 +雷区 +雷山 +雷山村 +雷神 +雷神庙 +雷声 +雷霆 +雷霆万钧 +雷同 +雷同者 +雷亚尔 +雷雨 +雷雨云 +雷障 +雷阵雨 +雷州 +雷州市 +雷庄村 +檑石 +镭 +镭射气 +羸弱 +耒阳 +耒阳市 +诔 +垒 +垒砌 +垒球 +垒石弄 +磊磊落落 +磊落 +蕾 +蕾铃 +肋 +肋巴骨 +肋骨 +肋间肌 +肋膜 +肋膜炎 +肋木 +肋条 +泪 +泪滴 +泪光 +泪痕 +泪痕斑斑 +泪花 +泪流满面 +泪膜 +泪人儿 +泪如泉涌 +泪如雨下 +泪水 +泪汪汪 +泪腺 +泪眼 +泪液 +泪脂质 +泪珠 +类 +类比 +类编 +类别 +类地行星 +类毒素 +类风湿 +类风湿病 +类风湿性 +类固醇 +类芦 +类木行星 +类群 +类人猿 +类如 +类书 +类似 +类同 +类推 +类新星 +类星体 +类型 +类型化 +类型学 +类义词 +累 +累次 +累牍连篇 +累放 +累活 +累积 +累及 +累计 +累计额 +累计数 +累加 +累加器 +累见不鲜 +累教不改 +累进 +累垮 +累累 +累累的 +累年 +累人 +累死 +累死累活 +累西腓 +累西腓市 +累月经年 +累赘 +酹 +擂 +擂鼓 +擂鼓墩 +擂鼓筛锣 +擂台 +擂台赛 +擂主 +塄 +棱 +棱角 +棱镜 +棱台 +棱柱体 +棱锥 +棱锥台 +冷 +冷傲 +冷板 +冷板凳 +冷冰冰 +冷不丁 +冷不防 +冷布 +冷菜 +冷餐 +冷藏 +冷藏柜 +冷藏库 +冷藏室 +冷藏箱 +冷场 +冷嘲热讽 +冷处理 +冷床 +冷淡 +冷点 +冷冻 +冷冻厂 +冷冻车 +冷冻货 +冷冻鸡 +冷冻品 +冷冻室 +冷冻箱 +冷风 +冷风型 +冷锋 +冷干 +冷宫 +冷光 +冷柜 +冷害 +冷汗 +冷焊 +冷湖 +冷荤 +冷货 +冷极 +冷寂 +冷加工 +冷箭 +冷静 +冷峻 +冷空气 +冷库 +冷酷 +冷冷的 +冷冷清清 +冷链 +冷落 +冷眉冷眼 +冷门 +冷面 +冷漠 +冷凝 +冷暖 +冷暖不定 +冷暖空气 +冷暖型 +冷暖自知 +冷盘 +冷配点 +冷僻 +冷拼 +冷气 +冷气团 +冷枪 +冷峭 +冷清 +冷泉 +冷却 +冷却期 +冷却器 +冷却水 +冷却塔 +冷热 +冷热病 +冷热水 +冷热战 +冷若冰霜 +冷色 +冷杉 +冷射 +冷食 +冷食品 +冷霜 +冷水 +冷水江 +冷水江市 +冷水滩 +冷水滩区 +冷水性 +冷水域 +冷水澡 +冷肆 +冷溲溲 +冷飕飕 +冷缩 +冷烫 +冷天 +冷涡 +冷笑 +冷血动物 +冷言冷语 +冷眼 +冷眼旁观 +冷艳 +冷饮 +冷雨 +冷语 +冷遇 +冷砸 +冷轧 +冷轧板 +冷轧厂 +冷战 +冷战史 +冷者 +冷贮 +愣 +愣神 +愣神儿 +愣是 +愣住 +厘 +厘定 +厘米 +厘米/秒 +厘米波 +梨 +梨膏 +梨狗 +梨花 +梨花大鼓 +梨树 +梨树县 +梨园 +梨园戏 +梨园镇 +梨枣 +梨子 +梨子树 +狸猫 +狸藻 +狸子 +离 +离岸价 +离瓣花冠 +离别 +离场 +离愁别绪 +离到任 +离队 +离岗 +离合悲欢 +离合器 +离婚 +离婚率 +离家 +离家背井 +离间 +离间计 +离京 +离经叛道 +离境 +离开 +离柳 +离乱 +离谱 +离谱儿 +离奇 +离去 +离群索居 +离人 +离任 +离任者 +离散 +离骚 +离石 +离石市 +离索 +离退休 +离退休费 +离退休金 +离席 +离乡 +离乡背井 +离校 +离心 +离心泵 +离心法 +离心机 +离心离德 +离心力 +离心式 +离休 +离休金 +离业 +离业者 +离异 +离职 +离职金 +离子 +离子化 +离子流 +离子束 +离子水 +骊山 +犁 +犁地 +犁耕层 +犁铧 +犁镜 +犁牛 +犁市镇 +犁庭扫闾 +犁头 +漓 +漓江 +黎 +黎巴嫩 +黎胞 +黎城 +黎川县 +黎方 +黎黑 +黎民 +黎民百姓 +黎明 +黎明村 +黎母 +黎平 +黎平县 +黎塘 +黎寨 +黎族 +篱笆 +篱笆墙 +篱落 +篱墙 +篱园 +篱栅 +篱障 +罹难 +罹难日 +罹难者 +罹下 +黧黑 +蠡园乡 +礼 +礼拜 +礼拜堂 +礼拜天 +礼宾 +礼宾司 +礼部 +礼部郎 +礼袋 +礼法 +礼服 +礼服呢 +礼盒 +礼花 +礼花弹 +礼记 +礼纪镇 +礼教 +礼节 +礼节性 +礼金 +礼乐 +礼林镇 +礼帽 +礼貌 +礼貌性 +礼炮 +礼炮声 +礼品 +礼品盒 +礼器 +礼泉县 +礼让 +礼尚往来 +礼士路 +礼数 +礼俗 +礼堂 +礼帖 +礼物 +礼贤下士 +礼县 +礼仪 +礼仪馆 +礼仪卡 +礼仪之邦 +礼遇 +礼赞 +礼赞图 +礼制 +礼治 +李 +李白 +李卜村 +李沧区 +李大钊 +李店乡 +李岗村 +李圪塔乡 +李果园 +李家村 +李家渡 +李家沟 +李家峡 +李家巷 +李家庄 +李逵 +李埝乡 +李时珍 +李树 +李四光 +李遂 +李先念 +李营镇 +李灶村 +李庄村 +李庄乡 +李庄镇 +李子 +李子酒 +里 +里昂 +里边 +里表 +里程 +里程碑 +里程碑式 +里程表 +里带 +里道 +里丁屿 +里丁屿市 +里端 +里尔街 +里根 +里海 +里海虎 +里脊 +里加 +里贾纳市 +里间 +里脚手 +里拉 +里里外外 +里面 +里弄 +里氏 +里手 +里数 +里斯本 +里潭 +里挑外撅 +里通外国 +里头 +里外 +里外开花 +里屋 +里下河 +里弦 +里亚尔 +里应外合 +里约 +里约州 +里庄 +里庄村 +里庄镇 +里子 +俚歌 +俚俗 +俚语 +哩 +理 +理财 +理财机 +理财组 +理睬 +理当 +理儿 +理发 +理发刀 +理发店 +理发馆 +理发匠 +理发师 +理发室 +理发厅 +理发业 +理发员 +理工 +理工大 +理工大学 +理工科 +理工学院 +理合 +理化 +理会 +理解 +理解力 +理科 +理科生 +理亏 +理理 +理疗 +理路 +理论 +理论部 +理论化 +理论家 +理论界 +理论课 +理论史 +理论性 +理论值 +理念 +理念层 +理赔 +理清 +理屈词穷 +理屈辞穷 +理入 +理墒 +理事 +理事长 +理事国 +理事会 +理事会制 +理顺 +理所当然 +理所应当 +理塘 +理想 +理想化 +理想主义 +理性 +理性认识 +理性主义 +理学 +理学院 +理应 +理由 +理有固然 +理欲观 +理直气壮 +理智 +理智型 +锂 +锂业 +鲤 +鲤鱼 +鲤鱼打挺 +澧 +澧县 +醴陵 +力 +力保 +力避 +力避通常 +力臂 +力不从心 +力不胜任 +力陈 +力创 +力辞 +力促 +力挫 +力大无比 +力大无穷 +力点 +力度 +力夺 +力帆厂 +力工 +力护 +力矫 +力竭声嘶 +力戒 +力尽筋疲 +力举 +力矩 +力克 +力量 +力量感 +力量型 +力偶 +力排众议 +力拼 +力气 +力气活 +力求 +力劝 +力士 +力塑 +力所不及 +力所能及 +力透纸背 +力图 +力挽狂澜 +力挽颓势 +力行 +力学 +力学会 +力争 +力争上游 +力主 +力抓 +力阻 +力作 +历 +历辈 +历朝 +历朝历代 +历城 +历程 +历次 +历代 +历法 +历届 +历尽 +历尽沧桑 +历尽艰辛 +历经 +历经沧桑 +历久 +历久不衰 +历久弥坚 +历久弥新 +历来 +历览 +历历 +历历可数 +历历在目 +历练 +历年 +历年来 +历谱 +历任 +历时 +历史 +历史感 +历史观 +历史化 +历史剧 +历史科 +历史课 +历史所 +历史戏 +历史系 +历史性 +历史学 +历史学家 +历史者 +历史主义 +历史组 +历书 +历数 +历算论点 +历险 +历险地 +历险记 +历演不衰 +历音 +厉 +厉兵秣马 +厉鬼 +厉害 +厉声 +厉行 +厉行改革 +厉行节俭 +厉行节约 +厉庄镇 +立 +立案 +立案率 +立案庭 +立邦漆 +立碑为铭 +立簿 +立场 +立传 +立春 +立此存照 +立党 +立党为公 +立档 +立等 +立等可取 +立地 +立定 +立定脚跟 +立冬 +立法 +立法法 +立法会 +立法局 +立法权 +立法史 +立法委员 +立方 +立方根 +立方厘米 +立方米 +立方体 +立竿见影 +立功 +立功奖 +立功赎罪 +立柜 +立国 +立即 +立交 +立交化 +立交桥 +立脚点 +立井 +立卡 +立克次体 +立刻 +立领 +立论 +立马 +立眉瞪眼 +立面 +立模 +立目 +立牌者 +立屏 +立秋 +立身 +立身处世 +立身行事 +立审 +立时 +立式 +立誓 +立陶宛 +立陶宛队 +立体 +立体电影 +立体感 +立体化 +立体几何 +立体角 +立体派 +立体片 +立体声 +立体式 +立体图 +立筒式 +立委 +立翁终于 +立夏 +立宪派 +立项 +立项权 +立像 +立业 +立意 +立于 +立账 +立正 +立志 +立轴 +立柱 +立锥之地 +立足 +立足点 +立足未稳 +立足之地 +吏 +吏禄 +吏人 +吏员 +吏制 +吏治 +丽 +丽岛 +丽江 +丽江县 +丽人 +丽日 +丽水 +丽水市 +丽水庄 +丽音 +利 +利比里亚 +利比亚 +利弊 +利差 +利川 +利川市 +利刀 +利港镇 +利古里亚 +利国 +利国利民 +利国乡 +利哈乔夫 +利害 +利害得失 +利害攸关 +利好 +利己 +利己主义 +利剑 +利津县 +利空 +利利索索 +利令智昏 +利禄 +利率 +利率表 +利率差 +利落 +利马 +利马市 +利民 +利民村 +利民之举 +利名 +利纳雷斯 +利农村 +利器 +利钱 +利权 +利人 +利刃 +利润 +利润表 +利润额 +利润法 +利润率 +利润税 +利生队 +利湿 +利税 +利税额 +利索 +利通社 +利物浦 +利息 +利息差 +利息额 +利息流 +利息率 +利显性 +利辛 +利辛县 +利雅得 +利益 +利益观 +利益均沾 +利益者 +利用 +利用率 +利用者 +利诱 +利于 +利欲 +利欲熏心 +利在当代 +利在千秋 +利在子孙 +利泽千秋 +励 +励精图治 +励人 +励志 +坜 +沥 +沥沥 +沥青 +沥青厂 +沥青路 +沥水 +例 +例规 +例话 +例会 +例假 +例句 +例牌 +例如 +例数 +例题 +例外 +例外论 +例文 +例行 +例行公事 +例言 +例证 +例子 +隶 +隶圣 +隶书 +隶属 +隶字 +栎 +栎林 +荔树 +荔枝 +栗 +栗钙土 +栗色 +栗树 +栗于坪乡 +栗子 +栗子店村 +栗子园 +砺 +砾石 +砾岩 +莅 +莅临 +笠头村 +粒 +粒度 +粒肥 +粒界 +粒粒 +粒细胞 +粒状 +粒子 +粒子流 +粒子束 +蛎饼 +傈僳族 +痢疾 +溧城 +溧水 +溧水县 +溧阳 +溧阳市 +溧阳县 +俩 +连 +连鬓胡子 +连部 +连苍接翠 +连长 +连场 +连唱 +连成 +连成一片 +连成一气 +连城 +连城村 +连词 +连带 +连带关系 +连裆裤 +连动 +连队 +连番 +连丰 +连丰村 +连杆 +连根拔起 +连拱坝 +连拱式 +连贯 +连锅端 +连环 +连环保 +连环画 +连环记 +连环套 +连枷 +连降 +连脚裤 +连接 +连接处 +连接器 +连接线 +连接性 +连结 +连介 +连襟 +连累 +连里 +连理 +连理枝 +连连 +连忙 +连袂 +连绵 +连绵不断 +连绵不绝 +连年 +连年来 +连爬带滚 +连跑带跳 +连片 +连篇 +连篇累牍 +连平县 +连翘 +连任 +连日 +连日来 +连声 +连史 +连史室 +连史纸 +连锁 +连锁店 +连锁反应 +连锁式 +连锁业 +连台本戏 +连体 +连体儿 +连天 +连通 +连通器 +连同 +连推带拉 +连网 +连心路 +连心桥 +连心箱 +连续 +连续不断 +连续光谱 +连续剧 +连续流 +连续性 +连夜 +连衣裙 +连阴天 +连阴雨 +连音 +连营 +连用 +连云 +连云港 +连云港市 +连载 +连轧厂 +连战连捷 +连轴 +连轴转 +连珠 +连珠灯 +连珠炮 +连铸机 +连缀 +连着 +连作 +帘 +帘布 +帘内 +帘子 +怜 +怜爱 +怜怜 +怜悯 +怜贫惜老 +怜惜 +怜香惜玉 +怜恤 +涟涟 +涟水 +涟水县 +涟漪 +涟源市 +莲 +莲菜 +莲池 +莲峰乡 +莲荷乡 +莲湖 +莲花 +莲花白 +莲花落 +莲花县 +莲花乡 +莲华经 +莲芰生烟 +莲藕 +莲蓬 +莲蓬头 +莲蓬子儿 +莲盛镇 +莲下镇 +莲叶 +莲韵 +莲子 +莲子酱 +莲子居 +莲子粥 +联 +联办 +联邦 +联邦德国 +联邦化 +联邦区 +联邦式 +联邦院 +联邦制 +联帮 +联保 +联苯胺 +联播 +联材字 +联测 +联查 +联产 +联产承包 +联唱 +联成 +联成一气 +联程 +联程票 +联筹会 +联储 +联创 +联次 +联村 +联大 +联点 +联调 +联动 +联动机 +联动型 +联动性 +联队 +联防 +联防队 +联防队员 +联防费 +联格 +联共 +联贯 +联航队 +联合 +联合报 +联合村 +联合党 +联合公报 +联合国 +联合国城 +联合会 +联合机 +联合派 +联合社 +联合体 +联合王国 +联合型 +联合战线 +联合政府 +联户 +联户办 +联欢 +联欢会 +联欢节 +联磺 +联汇丰队 +联汇制 +联会 +联机 +联检 +联建 +联交所 +联接 +联结 +联结端 +联剧 +联军 +联控 +联立方程 +联络 +联络部 +联络处 +联络点 +联络官 +联络会 +联络线 +联络员 +联络组 +联袂 +联盟 +联盟杯赛 +联盟党 +联盟制 +联绵字 +联民党 +联名 +联名信 +联农 +联贫 +联勤 +联入 +联赛 +联赛史 +联社 +联手 +联书 +联署 +联体窑 +联通 +联同 +联退 +联网 +联网化 +联网站 +联危 +联委会 +联席会 +联席会议 +联系 +联系簿 +联系点 +联系国 +联系户 +联系汇率 +联系会 +联系卡 +联系面 +联系人 +联系线 +联系箱 +联线 +联想 +联想式 +联销 +联校 +联心 +联行 +联训 +联艺 +联谊 +联谊会 +联姻 +联营 +联营厂 +联营制 +联影业 +联用 +联优化劣 +联语 +联运 +联运站 +联责 +联展 +联阵 +联缀 +联组 +联组会 +廉 +廉耻 +廉耻感 +廉价 +廉江市 +廉洁 +廉洁风 +廉洁奉公 +廉洁关 +廉洁经 +廉洁率 +廉洁勤政 +廉洁者 +廉洁自律 +廉吏 +廉明 +廉颇老矣 +廉生威 +廉者 +廉正 +廉正风 +廉正无私 +廉正语 +廉政 +廉政办 +廉政关 +廉政节 +廉政卡 +廉政勤政 +廉政日 +廉政署 +廉政者 +廉租 +鲢鱼 +镰 +镰刀 +镰刀形 +敛 +敛财 +敛去 +敛息屏声 +脸 +脸部 +脸蛋 +脸蛋儿 +脸红 +脸颊 +脸孔 +脸面 +脸盘 +脸盘儿 +脸庞 +脸盆 +脸皮 +脸皮薄 +脸谱 +脸谱化 +脸容 +脸软 +脸色 +脸上 +脸上无光 +脸水 +脸膛 +脸膛儿 +脸相 +脸形 +脸型 +脸子 +练 +练笔 +练兵 +练兵场 +练出 +练达 +练法 +练歌厅 +练功 +练集镇 +练就 +练练 +练鹊 +练声 +练市 +练市镇 +练摊 +练武 +练习 +练习簿 +练习场 +练习器 +练习曲 +练习赛 +练习生 +练习题 +练者 +练字 +炼 +炼丹术 +炼钢 +炼钢厂 +炼钢炉 +炼化 +炼焦 +炼焦厂 +炼乳 +炼石补天 +炼铁 +炼铁厂 +炼铁热 +炼液 +炼油 +炼油厂 +炼狱 +炼渣 +炼制 +恋 +恋爱 +恋爱观 +恋春 +恋歌 +恋家 +恋旧 +恋恋 +恋恋不舍 +恋情 +恋曲 +恋人 +恋战 +殓 +链 +链轨 +链轨式 +链轮 +链霉素 +链钳子 +链球 +链球菌 +链式反应 +链索 +链条 +链条厂 +链条式 +链烃 +链状 +链子 +链子崖 +潋滟 +良 +良才 +良策 +良辰美景 +良多 +良法 +良方 +良好 +良好率 +良好者 +良机 +良计 +良将 +良径 +良苦用心 +良梨镇 +良料 +良民 +良朋 +良骑 +良善 +良师 +良师益友 +良史 +良田 +良宵 +良心 +良性 +良性肿瘤 +良言 +良药 +良医 +良友 +良有以此 +良莠不齐 +良缘 +良知 +良种 +良种场 +良种稻 +良种化 +良种棉 +良种兔 +良种鸭 +良渚 +凉 +凉白开 +凉拌 +凉菜 +凉茶铺 +凉城 +凉碟 +凉房 +凉粉 +凉风 +凉开水 +凉快 +凉面 +凉棚 +凉皮 +凉气 +凉山 +凉山籍 +凉山州 +凉爽 +凉爽呢 +凉水 +凉水河 +凉水澡 +凉丝丝 +凉溲溲 +凉苏苏 +凉台 +凉亭 +凉席 +凉鞋 +凉炎 +凉药 +凉意 +凉州 +梁 +梁沟 +梁沟村 +梁河县 +梁家坡 +梁峁 +梁峁沟壑 +梁平县 +梁平柚 +梁券 +梁山 +梁山县 +梁上君子 +梁四村 +梁洼镇 +梁王 +梁五铢 +梁园 +梁园镇 +梁庄村 +梁庄乡 +梁子湖 +梁子湖畔 +梁子湖区 +粮 +粮播 +粮仓 +粮草 +粮袋 +粮店 +粮囤 +粮囤子 +粮垛 +粮贩子 +粮改 +粮官 +粮倌 +粮管 +粮管所 +粮柜 +粮户 +粮划署 +粮荒 +粮价 +粮经型 +粮库 +粮棉 +粮棉型 +粮棉油 +粮秣 +粮农 +粮票 +粮区 +粮权 +粮商 +粮食 +粮食部 +粮食点 +粮食法 +粮食局 +粮食厅 +粮食作物 +粮税 +粮所 +粮田 +粮饷 +粮油 +粮源 +粮站 +粮种 +粮猪型 +粱 +粱洼镇 +墚 +踉踉跄跄 +踉跄 +两 +两岸 +两百 +两败俱伤 +两边 +两便 +两鬓 +两不适 +两步走 +两部一办 +两菜一油 +两侧 +两厨一厕 +两弹 +两弹一星 +两地 +两点 +两点论 +两调 +两度 +两端 +两法 +两高 +两高一优 +两工 +两关 +两国 +两汉 +两航 +两河口 +两河三湖 +两河镇 +两湖 +两户一企 +两回事 +两会 +两基 +两极 +两极管 +两极化 +两脚规 +两节 +两居室 +两课 +两控区 +两口儿 +两口子 +两劳 +两肋插刀 +两路口 +两路镇 +两码事 +两麦一薯 +两面 +两面派 +两面三刀 +两面性 +两难 +两年制 +两旁 +两栖 +两栖动物 +两栖舰 +两强 +两区 +两全 +两全其美 +两三点 +两三点钟 +两三时 +两审 +两世为人 +两手 +两手空空 +两手抓 +两税 +两通 +两头 +两头在外 +两为 +两委 +两系法 +两下子 +两相情愿 +两厢情愿 +两小无猜 +两新两高 +两性 +两性人 +两性生殖 +两袖清风 +两姨亲 +两翼 +两用 +两用车 +两用林 +两用品 +两用衫 +两用型 +两院 +两院一堂 +两院制 +两杂一薯 +两者 +两证一书 +两制 +两重性 +两专一基 +两专一区 +亮 +亮氨酸 +亮丑 +亮点 +亮度 +亮光 +亮光光 +亮化 +亮晃晃 +亮节高风 +亮晶晶 +亮开 +亮丽 +亮亮 +亮亮的 +亮亮堂堂 +亮色 +亮闪闪 +亮堂 +亮堂堂 +亮相 +亮眼人 +亮泽 +谅 +谅必 +谅解 +谅山省 +辆 +辆次 +辆数 +晾 +晾风 +晾干 +晾盘 +晾晒 +晾台 +晾衣篮 +量 +量杯 +量变 +量才录用 +量才适用 +量程 +量出为入 +量词 +量度 +量化 +量级 +量纪 +量角器 +量具 +量力 +量力而行 +量脑 +量器 +量入为出 +量体裁衣 +量筒 +量刑 +量值 +量子 +量子力学 +量子论 +量子位 +辽 +辽八厂 +辽朝 +辽大 +辽代 +辽东 +辽东湾 +辽河 +辽河畔 +辽阔 +辽阔无涯 +辽墓 +辽南 +辽宁 +辽宁队 +辽宁路 +辽宁省 +辽宁厅 +辽宁团 +辽西 +辽阳 +辽阳市 +辽阳县 +辽源市 +辽远 +辽中 +辽中县 +辽中镇 +疗 +疗程 +疗法 +疗济众生 +疗效 +疗养 +疗养地 +疗养团 +疗养员 +疗养院 +聊 +聊城 +聊城市 +聊城县 +聊复尔耳 +聊聊 +聊聊天 +聊胜于无 +聊天 +聊以 +聊以解嘲 +聊以自慰 +聊以卒岁 +僚 +僚机 +僚气 +寥廓 +寥寥 +寥寥可数 +寥寥无几 +寥若晨星 +嘹亮 +寮步镇 +撩 +撩拨 +撩开 +撩乱 +撩人心动 +獠牙 +缭乱 +缭绕 +燎 +燎泡 +燎原 +燎原之势 +燎灼 +镣铐 +鹩哥 +钌铞儿 +蓼蓝 +了 +了不得 +了不起 +了不相涉 +了得 +了断 +了结 +了解 +了井塘 +了井塘村 +了局 +了却 +了然 +了然于胸 +了如指掌 +了事 +了望 +了无 +了无惧色 +了无生趣 +了无踪迹 +料 +料到 +料斗 +料豆儿 +料儿 +料件 +料酒 +料理 +料理台 +料量 +料器 +料峭 +料石 +料事如神 +料想 +料钟 +料子 +撂 +撂荒 +撂挑子 +撂下 +咧 +列 +列编 +列表 +列兵 +列车 +列车表 +列车长 +列车段 +列车员 +列出 +列传 +列当 +列岛 +列队 +列弗 +列国 +列举 +列克星顿 +列名 +列宁 +列宁格勒 +列宁主义 +列强 +列确 +列入 +列述 +列为 +列席 +列项 +列销 +列伊 +列支 +列支法 +列植 +列祖列宗 +劣 +劣等 +劣等生 +劣等者 +劣根性 +劣弧 +劣货 +劣迹 +劣马 +劣绅 +劣势 +劣行 +劣性 +劣者 +劣质 +劣质品 +劣种 +劣株 +劣作 +冽冽 +烈 +烈度 +烈火 +烈酒 +烈军属 +烈烈 +烈马 +烈女 +烈日 +烈日当空 +烈士 +烈士碑 +烈士陵园 +烈士墓 +烈士园 +烈暑 +烈性 +烈性酒 +烈焰 +烈阳 +烈属 +猎 +猎豹 +猎捕 +猎场 +猎刀 +猎狗 +猎户 +猎户座 +猎具 +猎猎 +猎奇 +猎奇者 +猎潜机 +猎潜艇 +猎枪 +猎取 +猎犬 +猎人 +猎杀 +猎手 +猎物 +猎鹰 +猎苑 +猎装 +裂 +裂变 +裂帛 +裂缝 +裂谷 +裂痕 +裂化 +裂解 +裂开 +裂口 +裂宽 +裂片 +裂纹 +裂璺 +裂隙 +裂殖菌 +趔趄 +鬣 +鬣狗 +邻 +邻邦 +邻村 +邻鄂乡 +邻国 +邻家 +邻角 +邻接 +邻接权 +邻近 +邻居 +邻里 +邻舍 +邻省 +邻摊 +邻县 +邻乡 +邻座 +林 +林班 +林边 +林草 +林产 +林产品 +林产业 +林场 +林场村 +林丛 +林带 +林地 +林甸县 +林东 +林副产品 +林格尔县 +林工 +林冠 +林管局 +林果 +林果业 +林海 +林海镇 +林化 +林火 +林吉特 +林计 +林家屯乡 +林间 +林间地 +林科院 +林口县 +林况 +林立 +林林 +林林总总 +林龄 +林莽 +林茂粮丰 +林苗圃 +林木 +林牧局 +林牧业 +林内 +林农 +林农业 +林盘地 +林区 +林权 +林权证 +林涛 +林特 +林田村 +林蛙 +林蛙油 +林网 +林网化 +林旺 +林隙地 +林县 +林校 +林学院 +林业 +林业部 +林业部长 +林业局 +林业厅 +林业站 +林荫 +林荫处 +林荫道 +林芝 +林芝县 +林中 +林种 +林州 +林州市 +林庄乡 +林子 +临 +临安 +临安段 +临安市 +临别 +临别赠言 +临产 +临场 +临场发挥 +临场感 +临城县 +临川 +临川市 +临川县 +临床 +临到 +临汾 +临汾市 +临港型 +临高县 +临管线 +临柜 +临桂县 +临海 +临海市 +临河市 +临河乡 +临湖轩 +临机应变 +临建 +临建棚 +临江 +临江会 +临江楼 +临街 +临街面 +临界 +临界点 +临界角 +临近 +临渴掘井 +临客 +临快 +临澧 +临澧县 +临立会 +临了 +临门 +临摹 +临邛村 +临朐 +临朐县 +临朐镇 +临泉县 +临商 +临深履薄 +临时 +临时代办 +临时工 +临时性 +临沭 +临死 +临洮 +临洮县 +临帖 +临潼 +临头 +临危 +临危不惧 +临危授命 +临武 +临西 +临西县 +临夏 +临县 +临湘市 +临刑 +临行 +临猗 +临猗县 +临沂 +临沂市 +临渊羡鱼 +临泽 +临泽县 +临战 +临漳 +临漳县 +临阵 +临阵磨枪 +临阵脱逃 +临终 +临走 +淋 +淋巴 +淋巴癌 +淋巴管 +淋巴结 +淋巴瘤 +淋巴球 +淋巴细胞 +淋巴腺 +淋巴液 +淋病 +淋漓 +淋漓尽致 +淋淋 +淋洗 +淋浴 +琳 +琳琅 +琳琅满目 +粼粼 +嶙峋 +遴选 +霖雨 +瞵 +磷 +磷都 +磷肥 +磷光 +磷灰石 +磷火 +磷钾肥 +磷矿 +磷矿石 +磷酸 +磷酸铵 +磷酸钙 +磷酸钙盐 +磷酸盐 +磷虾 +磷协 +磷脂 +鳞 +鳞波 +鳞翅目 +鳞次栉比 +鳞甲 +鳞茎 +鳞片 +鳞屑 +鳞爪 +麟 +麟凤龟龙 +麟角凤觜 +凛冽 +凛凛 +凛然 +凛若冰霜 +檩 +檩子 +吝 +吝啬 +吝啬鬼 +吝惜 +蔺草 +膦 +拎 +伶仃 +伶仃孤苦 +伶仃洋 +伶俐 +伶牙俐齿 +灵 +灵璧 +灵璧县 +灵便 +灵草 +灵长类 +灵长目 +灵车 +灵川 +灵川县 +灵丹妙药 +灵动 +灵府 +灵感 +灵官 +灵光 +灵慧 +灵魂 +灵魂界 +灵活 +灵活化 +灵活性 +灵霍介 +灵机 +灵机一动 +灵驾 +灵柩 +灵鹿 +灵猫 +灵敏 +灵敏度 +灵牌 +灵气 +灵前 +灵巧 +灵寝 +灵丘 +灵丘县 +灵邱 +灵邱县 +灵渠 +灵山 +灵山岛 +灵山卫镇 +灵石 +灵石县 +灵寿 +灵寿绿 +灵寿县 +灵塔 +灵台 +灵堂 +灵通 +灵通卡 +灵童 +灵位 +灵武市 +灵犀 +灵性 +灵秀 +灵岩涧 +灵验 +灵药 +灵隐寺 +灵芝 +囹圄 +岭 +岭澳 +岭地 +岭叠岭 +岭峻石险 +岭南 +岭南派 +岭坡 +岭上 +泠泠 +玲珑 +玲珑剔透 +凌 +凌波 +凌波仙子 +凌晨 +凌古铄金 +凌海 +凌海市 +凌河 +凌驾 +凌空 +凌厉 +凌厉感 +凌乱 +凌桥 +凌辱 +凌水河 +凌源 +凌源市 +凌云之志 +铃 +铃铛 +铃虫 +铃儿 +铃声 +陵 +陵东乡 +陵墓 +陵前 +陵寝 +陵区 +陵水 +陵县 +陵园 +陵园路 +绫椤绸缎 +羚角 +羚牛 +羚羊 +羚羊角 +羚羊皮 +羚羊绒 +翎 +翎翅 +翎毛 +翎羽 +翎子 +聆 +聆听 +菱 +菱湖 +菱角 +菱镁矿 +菱香 +菱形 +菱形块 +零 +零2分 +零3分 +零备件 +零本 +零部件 +零钞 +零吃 +零存 +零打碎敲 +零担 +零蛋 +零点 +零度 +零儿 +零二分 +零工 +零花 +零花钱 +零活 +零活儿 +零基 +零基预算 +零件 +零零散散 +零零碎碎 +零零星星 +零乱 +零落 +零卖 +零配件 +零七八碎 +零钱 +零敲碎打 +零取 +零散 +零散者 +零上 +零声母 +零时 +零食 +零售 +零售点 +零售店 +零售额 +零售价 +零售票 +零售商 +零售业 +零售员 +零数 +零税率 +零碎 +零头 +零位 +零下 +零星 +零用 +零用费 +零用钱 +零整 +零枝碎叶 +零嘴 +龄 +酃 +领 +领班 +领班人 +领办 +领唱 +领唱者 +领带 +领带夹 +领带卡 +领导 +领导班子 +领导层 +领导力 +领导权 +领导人 +领导人员 +领导有方 +领导者 +领导组 +领到 +领地 +领队 +领工员 +领馆 +领海 +领航 +领航员 +领花 +领会 +领货单 +领夹 +领奖 +领奖台 +领教 +领结 +领巾 +领军 +领军人 +领空 +领口 +领款 +领路 +领路人 +领率课 +领略 +领情 +领区 +领取 +领事 +领事部 +领事馆 +领事局 +领事司 +领受 +领头 +领头人 +领头雁 +领头羊 +领土 +领悟 +领先 +领先权 +领衔 +领袖 +领袖群伦 +领袖像 +领养 +领养者 +领有 +领域 +领章 +领照 +领照费 +领证率 +领主 +领子 +令 +令爱 +令箭 +令箭荷花 +令郎 +令旗 +令人 +令人不安 +令人不解 +令人称奇 +令人担忧 +令人发指 +令人感动 +令人鼓舞 +令人寒心 +令人堪忧 +令人满意 +令人捧腹 +令人起敬 +令人钦佩 +令人神往 +令人生畏 +令人叹服 +令人羡慕 +令人心悸 +令人信服 +令人振奋 +令人瞩目 +令人注目 +令人作呕 +令堂 +令行禁止 +令尊 +另 +另辟蹊径 +另册 +另当别论 +另谋高就 +另起炉灶 +另外 +另悉 +另行 +另选 +另选人 +另眼看待 +另眼相待 +另眼相看 +另一方面 +另有所指 +溜 +溜冰 +溜冰场 +溜儿 +溜光 +溜号 +溜滑 +溜肩膀 +溜皮树 +溜坍 +溜须 +溜须拍马 +溜之大吉 +溜之乎也 +溜子 +溜走 +熘 +刘 +刘邦 +刘村镇 +刘公岛 +刘海 +刘海儿 +刘浩营村 +刘猴镇 +刘家 +刘家堡 +刘家村 +刘家圪瘩 +刘家桥村 +刘家山交 +刘家塔镇 +刘家峡 +刘楼村 +刘马家 +刘桥 +刘少奇 +刘乡 +刘一 +刘营村 +刘源坑 +刘源坑村 +刘砦镇 +刘庄 +刘庄村 +浏河镇 +浏览 +浏览器 +浏览者 +浏阳 +浏阳河 +浏阳籍 +浏阳市 +浏阳县 +流 +流弊 +流产 +流长 +流畅 +流程 +流程图 +流出 +流出地 +流出入 +流传 +流传千古 +流传日盛 +流传于世 +流窜 +流窜犯 +流存 +流弹 +流动 +流动车 +流动房 +流动岗 +流动量 +流动率 +流动摊 +流动形 +流动性 +流动站 +流动资金 +流毒 +流芳百世 +流芳千古 +流放 +流放地 +流放者 +流风余韵 +流感 +流光溢彩 +流过 +流汗 +流化床 +流金 +流金铄石 +流经 +流寇 +流浪 +流浪儿 +流浪汉 +流浪者 +流泪 +流离 +流离颠沛 +流离失所 +流里流气 +流丽 +流利 +流连 +流连忘返 +流量 +流量表 +流量计 +流露 +流落 +流落江湖 +流落他乡 +流氓 +流氓气 +流氓罪 +流民 +流脑 +流年 +流派 +流乞 +流气 +流泉 +流入 +流入地 +流入国 +流入量 +流散 +流沙 +流沙量 +流觞曲水 +流舍村 +流声 +流失 +流失量 +流失生 +流石滩 +流食 +流逝 +流水 +流水不腐 +流水处 +流水号 +流水席 +流水线 +流水账 +流水作业 +流俗 +流速 +流淌 +流体 +流体力学 +流涕者 +流通 +流通额 +流通量 +流通领域 +流通券 +流通税 +流通性 +流通业 +流亡 +流下 +流线 +流线型 +流向 +流泻 +流星 +流星赶月 +流星雨 +流行 +流行病 +流行歌曲 +流行乐 +流行色 +流行性 +流行语 +流行源 +流形 +流血 +流言 +流言蜚语 +流蛘 +流莺 +流萤 +流于形式 +流峪镇 +流域 +流域库坝 +流域性 +流云 +流质 +流注 +流转 +流转税 +留 +留办 +留成 +留传 +留春岛 +留存 +留待 +留党察看 +留底 +留给 +留观 +留级 +留居 +留客 +留兰香 +留连 +留连忘返 +留恋 +留落 +留名 +留尼汪 +留尼汪岛 +留尼旺 +留念 +留鸟 +留情 +留人 +留任 +留神 +留声机 +留史 +留守 +留守处 +留水 +留宿 +留下 +留校 +留心 +留学 +留学人员 +留学生 +留学生司 +留学者 +留言 +留言簿 +留言栏 +留言人 +留言台 +留言条 +留洋 +留一手 +留意 +留影 +留用 +留有 +留有余地 +留在 +留召村 +留者 +留职 +留置 +留置权 +留住 +留驻 +留足 +琉璃 +琉璃厂 +琉璃河 +琉璃球 +琉璃寺 +琉璃瓦 +琉球 +琉球王国 +硫 +硫胺素 +硫化 +硫化黑 +硫化钠 +硫化氢 +硫化物 +硫化物质 +硫黄岛 +硫磺 +硫磺泉 +硫磺石 +硫酸 +硫酸铵 +硫酸根 +硫酸钾 +硫酸钠 +硫酸铜 +硫酸锌 +硫酸盐 +旒 +遛 +遛遛弯儿 +遛弯儿 +馏 +榴弹 +榴弹炮 +榴花 +榴莲果 +榴霰弹 +瘤 +瘤子 +镏金 +柳 +柳暗花明 +柳堡 +柳编 +柳城 +柳城县 +柳格乡 +柳河 +柳河县 +柳花 +柳江 +柳筐 +柳林 +柳林村 +柳林县 +柳毛 +柳眉 +柳木 +柳琴 +柳泉村 +柳杉 +柳梢 +柳树 +柳丝 +柳桃 +柳体 +柳条 +柳条湖 +柳条帽 +柳铁 +柳铁局 +柳亭 +柳辛庄 +柳新乡 +柳行镇 +柳絮 +柳芽 +柳杨堡 +柳叶 +柳叶刀 +柳叶眉 +柳叶形 +柳荫 +柳荫街 +柳莺 +柳园村 +柳州 +柳州市 +柳子戏 +绺 +六 +六·一 +六安 +六安市 +六八年 +六百 +六边形 +六不六净 +六朝 +六大 +六道轮回 +六点 +六腑 +六国 +六合 +六合拳 +六合县 +六机部 +六级 +六甲 +六建 +六角形 +六经 +六经者 +六九年 +六里地屯 +六里坪 +六里桥 +六里屯 +六里镇 +六零六 +六龄童 +六六六 +六六年 +六鲁 +六年制 +六盘山 +六盘山区 +六盘水 +六盘水市 +六七点钟 +六七年 +六七月 +六亲不认 +六亲无靠 +六日 +六三年 +六神无主 +六时 +六书 +六汪镇 +六五年 +六仙桌 +六弦琴 +六畜 +六言诗 +六一 +六一年 +六月 +六月份 +六月六 +六镇 +六中全会 +咯 +咯咯 +咯咯吱吱 +咯吱吱 +龙 +龙宝区 +龙车 +龙城 +龙池山 +龙川 +龙川县 +龙船 +龙胆 +龙胆草 +龙胆科 +龙胆紫 +龙灯 +龙电 +龙洞 +龙洞村 +龙法 +龙飞凤舞 +龙凤 +龙凤呈祥 +龙凤丹 +龙凤鸟 +龙凤区 +龙凤乡 +龙肝凤髓 +龙岗 +龙岗区 +龙港 +龙港镇 +龙公岭子 +龙宫 +龙宫洞 +龙骨 +龙骨坡 +龙鼓 +龙固镇 +龙归 +龙果 +龙海市 +龙湖 +龙虎 +龙虎斗 +龙虎山 +龙虎滩 +龙虎潭 +龙江 +龙街子 +龙井 +龙井茶 +龙井村 +龙卷风 +龙卡 +龙口 +龙口夺食 +龙口市 +龙联 +龙马湖 +龙马潭区 +龙脉 +龙门 +龙门吊 +龙门刨 +龙门寺 +龙门汤 +龙门镇 +龙眠河 +龙母 +龙母镇 +龙南县 +龙年 +龙鸟 +龙盘虎踞 +龙蟠虎踞 +龙蟠里 +龙袍 +龙旗 +龙庆峡 +龙庆乡 +龙曲集 +龙泉 +龙泉区 +龙泉山 +龙泉乡 +龙泉窑 +龙泉驿 +龙泉驿区 +龙沙 +龙山 +龙山集 +龙山县 +龙蛇混杂 +龙身 +龙生九子 +龙胜 +龙狮 +龙狮团 +龙首 +龙水镇 +龙寺镇 +龙潭 +龙潭湖 +龙潭虎穴 +龙潭乡 +龙潭镇 +龙塘坝乡 +龙套 +龙腾虎跃 +龙亭区 +龙头 +龙头乡 +龙湾 +龙王 +龙王庙 +龙王潭 +龙王塘 +龙王塘村 +龙旺村 +龙尾 +龙尾山 +龙文村 +龙吻 +龙吴港 +龙舞 +龙虾 +龙骧虎步 +龙翔凤翥 +龙心 +龙形 +龙型 +龙须菜 +龙须草 +龙须沟 +龙须河 +龙须面 +龙岩 +龙岩坡 +龙岩市 +龙颜 +龙眼 +龙眼树 +龙羊峡 +龙窑 +龙吟虎啸 +龙游县 +龙争虎斗 +龙钟 +龙舟 +龙舟队 +龙舟节 +龙舟节赛 +龙舟界 +龙舟赛 +龙竹坪 +龙爪槐 +龙子 +笼 +笼而统之 +笼盖 +笼里 +笼络 +笼络人心 +笼屉 +笼统 +笼头 +笼外 +笼下 +笼罩 +笼子 +聋 +聋儿 +聋女 +聋人 +聋哑人 +聋哑学校 +聋哑症 +聋子 +隆 +隆安 +隆宝滩 +隆德 +隆冬 +隆丰镇 +隆福寺 +隆化县 +隆回 +隆回县 +隆隆 +隆隆声 +隆起 +隆起带 +隆庆二年 +隆升 +隆尧 +隆尧县 +隆誉 +隆中 +隆重 +陇 +陇川县 +陇东 +陇海 +陇剧 +陇南 +陇穷 +陇穷村 +陇西县 +陇中 +垄 +垄断 +垄断性 +垄断者 +垄断资本 +垄沟 +垄坎 +垄坪乡 +垄三 +垄作 +拢 +拢子 +娄 +娄底 +娄底市 +娄烦县 +娄山关 +偻 +喽 +喽罗 +楼 +楼板 +楼层 +楼长 +楼船 +楼道 +楼顶 +楼房 +楼盖 +楼阁 +楼股 +楼价 +楼脚 +楼兰 +楼兰王国 +楼兰学 +楼廊 +楼龄 +楼门 +楼面 +楼盘 +楼区 +楼群 +楼山乡 +楼上 +楼舍 +楼市 +楼台 +楼堂 +楼堂馆所 +楼梯 +楼梯口 +楼梯式 +楼头 +楼下 +楼厦 +楼厦村 +楼宇 +楼庄乡 +楼子营镇 +蝼蛄 +蝼蚁 +搂 +搂抱 +搂搂 +篓 +篓里 +篓子 +陋 +陋规 +陋舍 +陋室 +陋俗 +陋习 +陋巷 +漏 +漏报 +漏报率 +漏疮 +漏电 +漏掉 +漏洞 +漏洞百出 +漏斗 +漏犯 +漏风 +漏管户 +漏光 +漏壶 +漏气 +漏勺 +漏收 +漏水 +漏税 +漏税者 +漏网 +漏网之鱼 +漏误 +漏诊 +漏征漏管 +漏着 +漏子 +瘘管 +镂雕 +镂刻 +镂空 +镂嵌 +露 +露才扬己 +露采坑 +露出 +露底 +露地 +露点 +露骨 +露酒 +露脸 +露露 +露露脸 +露马脚 +露面 +露脐装 +露怯 +露水 +露宿 +露宿风餐 +露台 +露天 +露天矿 +露天浴 +露头 +露馅儿 +露一手 +露营 +露珠 +撸 +撸子 +卢 +卢比 +卢布 +卢方 +卢浮宫 +卢浮宫街 +卢沟桥 +卢沟桥乡 +卢克索 +卢克索市 +卢萨卡 +卢瑟福 +卢森堡 +卢森堡队 +卢森堡市 +卢湾 +卢湾区 +卢旺达 +庐 +庐峰 +庐江 +庐江县 +庐山 +庐山路 +芦 +芦草 +芦柴 +芦城乡 +芦丁 +芦丰 +芦柑 +芦根 +芦沟桥 +芦管 +芦蒿 +芦花 +芦山 +芦山县 +芦山乡 +芦笙 +芦笙场 +芦淞区 +芦笋 +芦苇 +芦苇丛 +芦苇荡 +芦席 +芦柞乡 +泸定桥 +泸沽 +泸沽湖 +泸山 +泸水县 +泸西 +泸西县 +泸溪县 +泸县 +泸州 +泸州市 +炉 +炉边 +炉顶 +炉灰 +炉火 +炉火纯青 +炉坑 +炉口 +炉况 +炉料 +炉龄 +炉排 +炉前工 +炉台 +炉膛 +炉体 +炉条 +炉瓦 +炉网 +炉温 +炉窑 +炉灶 +炉渣 +炉子 +胪岗镇 +胪溪 +鸬鹚 +鸬鹚鸟 +鸬鹚乡 +舻舳蔽水 +颅 +颅底 +颅骨 +颅内 +颅脑 +颅腔 +鲈鱼 +卤 +卤菜 +卤鸡 +卤莽 +卤水 +卤味 +卤虾 +卤鸭 +卤制品 +卤质 +卤族 +虏 +掳 +掳掠 +鲁 +鲁昂 +鲁班尺 +鲁版 +鲁北 +鲁布革 +鲁菜 +鲁村 +鲁殿灵光 +鲁谷 +鲁家峪村 +鲁夸省 +鲁莽 +鲁美 +鲁南 +鲁南区 +鲁桥 +鲁桥镇 +鲁山 +鲁山县 +鲁斯塔克 +鲁西 +鲁西南 +鲁迅 +鲁艺 +鲁鱼帝虎 +鲁鱼亥豕 +橹 +陆 +陆埠镇 +陆川 +陆川县 +陆岛 +陆地 +陆防区 +陆丰 +陆丰市 +陆丰县 +陆海 +陆海空 +陆海潘江 +陆航团 +陆河 +陆基 +陆家嘴 +陆架 +陆架区 +陆疆 +陆军 +陆军省 +陆空 +陆良 +陆梁 +陆陆续续 +陆路 +陆棚 +陆栖动物 +陆桥 +陆勤分队 +陆上 +陆生 +陆委会 +陆相 +陆相沉积 +陆续 +陆域 +陆源 +陆源性 +陆院 +陆运 +陆战 +陆战队 +录 +录播 +录放机 +录放像机 +录取 +录取率 +录取者 +录入 +录入卡 +录相 +录相机 +录像 +录像带 +录像馆 +录像机 +录像片 +录像厅 +录像仪 +录音 +录音带 +录音机 +录音棚 +录音室 +录用 +录用者 +录制 +录制成 +赂 +渌头江 +渌头江村 +鹿 +鹿厂镇 +鹿场 +鹿岛 +鹿儿岛 +鹿儿岛县 +鹿冈乡 +鹿回头 +鹿角 +鹿角菜 +鹿角队 +鹿鸣 +鹿泉 +鹿泉市 +鹿群 +鹿茸 +鹿死谁手 +鹿特丹 +鹿蹄草 +鹿娃 +鹿溪河 +鹿邑 +鹿邑县 +鹿寨 +禄 +禄丰 +禄丰县 +禄劝 +禄劝县 +禄位 +滤 +滤波 +滤波器 +滤斗 +滤器 +滤清器 +滤色镜 +滤色片 +滤液 +滤纸 +碌碌 +碌碌无为 +碌翁 +路 +路坝 +路霸 +路碑 +路北 +路边 +路标 +路不拾遗 +路程 +路道 +路灯 +路堤 +路堤式 +路端 +路段 +路队制 +路费 +路风 +路服 +路沟 +路规 +路轨 +路过 +路过者 +路徽 +路基 +路基导弹 +路检 +路经 +路警 +路径 +路径名 +路局 +路距 +路卡 +路口 +路口处 +路口镇 +路宽 +路况 +路矿 +路路 +路面 +路名 +路南 +路南区 +路牌 +路旁 +路桥 +路桥区 +路权 +路人 +路人皆知 +路上 +路数 +路摊 +路条 +路透社 +路途 +路网 +路线 +路线图 +路向 +路沿 +路伊盟 +路易港 +路由 +路由器 +路域 +路遇 +路障 +路政 +路政科 +路子 +漉 +戮力同心 +辘轳 +潞城 +潞城市 +潞河 +潞水 +潞西 +潞西市 +鹭 +鹭鹚 +鹭岛 +鹭江道 +鹭鸟 +鹭鸶 +麓 +驴 +驴打滚 +驴肝肺 +驴骡 +驴鸣狗吠 +驴年马月 +驴皮胶 +驴肉 +驴子 +吕 +吕贝克市 +吕城 +吕剧 +吕剧团 +吕勒奥 +吕梁 +吕梁山 +吕宋烟 +吕屯村 +吕望乡 +吕庄村 +吕祖庙 +侣 +侣伴 +旅 +旅伴 +旅部 +旅差费 +旅长 +旅程 +旅店 +旅费 +旅馆 +旅馆化 +旅馆区 +旅交会 +旅居 +旅客 +旅客量 +旅趣 +旅人 +旅社 +旅顺 +旅顺口 +旅顺口区 +旅途 +旅团长 +旅外 +旅协 +旅行 +旅行包 +旅行车 +旅行袋 +旅行家 +旅行社 +旅行团 +旅行者 +旅业 +旅游 +旅游部 +旅游车 +旅游城 +旅游船 +旅游地 +旅游点 +旅游法 +旅游节 +旅游界 +旅游局 +旅游年 +旅游品 +旅游区 +旅游圈 +旅游热 +旅游团 +旅游委 +旅游线 +旅游鞋 +旅游性 +旅游业 +旅游业界 +旅游月 +旅游展 +旅游者 +旅者 +铝 +铝材 +铝厂 +铝锭 +铝矾石 +铝矾土 +铝粉 +铝合金 +铝矿 +铝排 +铝片 +铝圈 +铝桶 +铝土 +铝土矿 +铝线 +铝型材 +铝型材厂 +铝业 +铝制 +铝制品 +屡 +屡败屡战 +屡次 +屡次三番 +屡见不鲜 +屡教不改 +屡禁不绝 +屡禁不止 +屡屡 +屡试不第 +屡试不爽 +屡战屡败 +屡战屡胜 +缕 +缕儿 +缕空 +缕缕 +膂力 +履 +履穿踵决 +履带 +履带式 +履痕 +履历 +履历表 +履任 +履坦镇 +履舄交错 +履险如夷 +履新 +履行 +履约 +律 +律动 +律管司 +律己 +律令 +律师 +律师法 +律师费 +律师团 +律师业 +律诗 +律他 +律韵 +律政 +律政司 +虑 +虑及 +率 +率尔 +率尔操觚 +率领 +率先 +率先垂范 +率由旧章 +率员 +率真 +率直 +率众 +绿 +绿苞儿 +绿宝石 +绿草如茵 +绿茶 +绿城 +绿池 +绿葱坡镇 +绿党 +绿灯 +绿地 +绿地率 +绿豆 +绿豆糕 +绿豆粥 +绿萼梅 +绿矾 +绿肥 +绿肥作物 +绿化 +绿化处 +绿化带 +绿化费 +绿化奖 +绿化率 +绿化委 +绿化线 +绿化志 +绿黄色 +绿卡 +绿孔雀 +绿篱 +绿林 +绿林好汉 +绿林起义 +绿绿葱葱 +绿绿的 +绿帽子 +绿泥石 +绿皮书 +绿茸茸 +绿色 +绿色化 +绿色植物 +绿山富民 +绿树 +绿树成荫 +绿水 +绿水长流 +绿水青山 +绿苔 +绿毯 +绿条 +绿头巾 +绿头鸭 +绿杨 +绿杨村 +绿杨乡 +绿野 +绿叶 +绿叶丛 +绿叶儿 +绿衣 +绿衣使者 +绿意 +绿茵 +绿茵场 +绿茵地 +绿茵茵 +绿荫 +绿荫蔽日 +绿荫丛 +绿莹莹 +绿影扶疏 +绿油油 +绿园区 +绿藻 +绿洲 +绿洲学 +绿装 +氯 +氯醇 +氯丹 +氯地孕酮 +氯丁橡胶 +氯氟烃 +氯化 +氯化铵 +氯化法 +氯化钙 +氯化钾 +氯化镁 +氯化钠 +氯化氢 +氯化物 +氯化锌 +氯化银 +氯碱 +氯碱厂 +氯喹 +氯纶 +氯霉素 +氯气 +孪 +孪井滩 +孪生 +孪生子 +挛 +挛缩 +栾城 +栾城县 +栾城镇 +栾老 +栾老寨 +鸾凤 +脔 +滦 +滦河 +滦南县 +滦平 +滦平县 +滦县 +卵 +卵白 +卵巢 +卵黄 +卵块 +卵泡 +卵石 +卵细胞 +卵细胞核 +卵用鸡 +卵子 +乱 +乱兵 +乱采 +乱成一团 +乱弹琴 +乱动 +乱发 +乱纷纷 +乱坟岗 +乱购 +乱哄哄 +乱叫 +乱砍滥伐 +乱来 +乱麻 +乱码 +乱跑 +乱蓬蓬 +乱七八糟 +乱石 +乱石丛 +乱石坡 +乱石山村 +乱石滩 +乱世 +乱送 +乱摊子 +乱套 +乱腾 +乱云飞渡 +乱杂 +乱葬岗 +乱糟糟 +乱占 +乱仗 +乱真 +乱子 +掠 +掠夺 +掠夺品 +掠夺式 +掠夺性 +掠过 +掠取 +掠影 +掠走 +略 +略表 +略带 +略读 +略迹原情 +略见一斑 +略略 +略论 +略论稿 +略去 +略胜一筹 +略识之无 +略图 +略微 +略为 +略逊一筹 +略阳 +略语 +略知一二 +略作 +抡 +抡斧伐桂 +仑吉 +伦 +伦巴 +伦次 +伦敦 +伦敦帝国 +伦理 +伦理观 +伦理学 +伦理学家 +伦理学界 +伦琴射线 +沦肌浃髓 +沦落 +沦丧 +沦亡 +沦为 +沦陷 +沦陷区 +轮 +轮班 +轮补 +轮采 +轮舱 +轮船 +轮次 +轮带 +轮渡 +轮番 +轮岗 +轮毂 +轮箍 +轮轨 +轮滑鞋 +轮换 +轮换工 +轮换制 +轮回 +轮机 +轮机兵 +轮机长 +轮机手 +轮奸 +轮奸案 +轮距 +轮抗六号 +轮空 +轮廓 +轮廓灯 +轮流 +轮牧 +轮南 +轮盘 +轮式 +轮胎 +轮胎厂 +轮台 +轮拖 +轮休 +轮训 +轮训班 +轮养 +轮椅 +轮椅车 +轮缘 +轮匝 +轮值 +轮种 +轮轴 +轮转 +轮转工 +轮转机 +轮子 +轮作 +轮作制 +论 +论辩 +论处 +论丛 +论道 +论点 +论调 +论断 +论对 +论功行赏 +论黄数黑 +论及 +论集 +论交 +论斤计两 +论据 +论理 +论理学 +论列 +论述 +论说体 +论说文 +论坛 +论坛会 +论题 +论文 +论文集 +论文赛 +论文选 +论析 +论学 +论战 +论者 +论争 +论证 +论证费 +论证关 +论证会 +论著 +论资排辈 +论罪 +捋 +捋抚 +罗 +罗安达 +罗案 +罗宾岛 +罗宾汉式 +罗伯特 +罗布 +罗布泊 +罗布泊湖 +罗布大淖 +罗布林卡 +罗布麻 +罗布淖尔 +罗柴冲 +罗彻斯特 +罗城 +罗得岛 +罗甸 +罗甸县 +罗定 +罗定山 +罗定市 +罗方 +罗坊镇 +罗非鱼 +罗浮宫 +罗锅 +罗锅儿 +罗锅子 +罗汉 +罗汉豆 +罗汉果 +罗汉松 +罗河镇 +罗洪乡 +罗湖 +罗湖桥 +罗湖区 +罗家湾 +罗家镇 +罗家组 +罗口 +罗赖马 +罗赖马州 +罗里罗唆 +罗里乡 +罗列 +罗马 +罗马帝国 +罗马尼亚 +罗马市 +罗马式 +罗马数字 +罗曼史 +罗南 +罗牛山 +罗盘 +罗盘报 +罗平县 +罗平站 +罗圈 +罗裙 +罗萨里奥 +罗纱 +罗山 +罗山县 +罗氏沼虾 +罗斯福 +罗斯滕 +罗斯托夫 +罗特尔队 +罗滕堡 +罗田 +罗田县 +罗湾村 +罗网 +罗纹 +罗新社 +罗营乡 +罗勇 +罗源 +罗源县 +罗镇乡 +罗织 +罗致 +罗庄乡 +罗庄镇 +啰唆 +啰嗦 +萝 +萝卜 +萝卜花 +萝芙木 +逻辑 +逻辑思维 +逻辑推理 +逻辑性 +逻辑学 +逻辑值 +锣 +锣鼓 +锣鼓队 +锣鼓声 +锣鼓喧天 +锣声 +箩 +箩筐 +骡 +骡马 +骡子 +螺 +螺钿 +螺钉 +螺杆式 +螺髻 +螺髻山 +螺距 +螺口 +螺帽 +螺母 +螺山 +螺栓 +螺丝 +螺丝刀 +螺丝垫 +螺丝钉 +螺丝攻 +螺丝扣 +螺丝帽 +螺丝母 +螺丝起子 +螺蛳 +螺纹 +螺线管 +螺旋 +螺旋桨 +螺旋式 +螺旋体 +螺旋藻 +裸 +裸地 +裸机 +裸露 +裸麦 +裸鼠 +裸体 +裸线 +裸岩 +裸子植物 +洛 +洛川 +洛河 +洛河畔 +洛河镇 +洛克比 +洛克比镇 +洛美 +洛美市 +洛南 +洛宁县 +洛桑 +洛山基 +洛杉矶 +洛杉矶市 +洛社镇 +洛市 +洛铜 +洛溪 +洛阳 +洛阳城 +洛阳村 +洛阳江 +洛阳桥 +洛阳市 +洛阳镇 +洛阳纸贵 +洛孜峰 +洛子峰 +洛渍岔 +络 +络腮胡 +络腮胡子 +络绎不绝 +络子 +荦荦 +骆 +骆马湖 +骆驼 +骆驼草 +骆驼绒 +骆驼肉 +骆驼镇 +珞巴族 +珞璜 +珞珈 +珞珈山 +落 +落败 +落榜 +落笔 +落差 +落潮 +落成 +落到实处 +落地 +落地窗 +落地煤 +落地式 +落地钟 +落点 +落耳坡村 +落归 +落果 +落后 +落后性 +落后者 +落户 +落花 +落花流水 +落花生 +落荒 +落荒而逃 +落辉 +落矶山 +落价 +落架 +落脚 +落脚点 +落脚湖 +落井投石 +落井下石 +落空 +落款 +落泪 +落落 +落落大方 +落落寡合 +落马 +落寞 +落幕 +落难 +落聘 +落日 +落入 +落入者 +落沙坡 +落实 +落实率 +落水 +落水狗 +落水管 +落水者 +落汤鸡 +落套 +落体 +落筒机 +落拓 +落拓不羁 +落网 +落伍 +落伍者 +落霞 +落选 +落选率 +落选者 +落雪 +落雁区 +落叶 +落叶归根 +落叶树 +落叶松 +落英缤纷 +落子 +落座 +摞 +漯河 +漯河市 +漯河站 +妈 +妈妈 +妈咪 +妈湾 +妈湾港 +妈祖 +麻 +麻包 +麻痹 +麻痹大意 +麻布 +麻城 +麻城市 +麻袋 +麻店村 +麻豆腐 +麻烦 +麻烦事 +麻纺 +麻风 +麻花 +麻黄 +麻黄碱 +麻黄素 +麻将 +麻将牌 +麻将桌 +麻酱 +麻经儿 +麻拉热 +麻辣 +麻辣烫 +麻利 +麻利儿 +麻栗坡县 +麻脸 +麻卵石 +麻木 +麻木不仁 +麻木树 +麻雀 +麻雀声 +麻雀虽小 +麻雀战 +麻纱 +麻山区 +麻绳 +麻省 +麻石 +麻酥酥 +麻糖 +麻田 +麻团 +麻旺区 +麻尾 +麻线 +麻阳 +麻洋镇 +麻药 +麻业 +麻油 +麻疹 +麻织 +麻织品 +麻竹坪 +麻子 +麻醉 +麻醉剂 +麻醉科 +麻醉品 +麻醉枪 +麻醉师 +麻醉术 +麻醉性 +麻醉学 +麻醉药 +马 +马鞍 +马鞍山 +马鞍山市 +马鞍山乡 +马鞍子 +马帮 +马背 +马鼻疽 +马边 +马表 +马鳖 +马不停蹄 +马槽 +马厂 +马场 +马场坪 +马车 +马齿苋 +马刺队 +马村区 +马达 +马达声 +马大哈 +马刀 +马刀舞 +马岛 +马到成功 +马德里 +马德里队 +马灯 +马登 +马镫 +马滴达乡 +马店镇 +马丁炉 +马肚 +马队 +马儿 +马儿山 +马尔代夫 +马尔凯 +马尔萨斯 +马耳他 +马方 +马放南山 +马粪纸 +马蜂 +马蜂窝 +马夫 +马钢 +马革裹尸 +马格里布 +马埂村 +马褂 +马关 +马关条约 +马关县 +马倌 +马哈林诺 +马航 +马赫主义 +马后炮 +马虎 +马会杯 +马迹 +马迹塘 +马集镇 +马稷 +马加丹州 +马夹 +马家坡村 +马家窑 +马甲 +马架 +马架子 +马鲛鱼 +马角坝 +马脚 +马颈坳镇 +马厩 +马驹 +马驹桥 +马驹桥镇 +马驹子 +马克 +马克思 +马口铁 +马裤 +马拉车 +马拉喀什 +马拉开波 +马拉凯 +马拉坎 +马拉尼昂 +马拉若岛 +马拉松 +马拉松赛 +马拉松式 +马拉维 +马来 +马来西亚 +马来熊 +马兰 +马兰草 +马兰草纸 +马兰花 +马蓝 +马里 +马里兰 +马里兰州 +马里亚纳 +马力 +马利布 +马连曲村 +马莲 +马列 +马列主义 +马铃薯 +马六甲 +马龙 +马龙县 +马楼 +马楼乡 +马路 +马路新闻 +马鸾 +马銮湾 +马锣 +马骡 +马马虎虎 +马毛 +马盟 +马庙 +马那瓜 +马奶酒 +马奶子 +马瑙斯 +马尼拉 +马尼拉麻 +马尼拉市 +马尼托巴 +马年 +马爬犁 +马棚 +马匹 +马坡岭 +马普托 +马其顿 +马奇诺 +马前卒 +马钱子 +马枪 +马桥镇 +马球 +马泉河 +马仁区 +马日事变 +马萨西县 +马萨诸塞 +马塞 +马塞马拉 +马赛 +马赛城 +马赛港 +马赛克 +马赛曲 +马赛市 +马桑树 +马山 +马山县 +马上 +马绍尔 +马身 +马失前蹄 +马首是瞻 +马术 +马斯河 +马斯喀特 +马斯克林 +马嘶 +马塘村 +马提尼克 +马蹄 +马蹄表 +马蹄金 +马蹄莲 +马蹄铁 +马蹄形 +马蹄银 +马体 +马童 +马桶 +马桶盖 +马头 +马头琴 +马头琴声 +马头山 +马头崖 +马图林 +马王堆 +马尾 +马尾区 +马尾松 +马尾藻 +马戏 +马戏节 +马戏厅 +马戏团 +马乡 +马歇尔 +马雄山 +马靴 +马仰人翻 +马缨花 +马蝇 +马约 +马贼 +马扎 +马战 +马掌 +马哲史 +马种 +马桩 +马仔 +马鬃 +马佐维茨 +玛达咪 +玛电 +玛多县 +玛湖 +玛卡鲁峰 +玛纳斯 +玛瑙 +玛瑙杏 +玛滩镇 +玛雅 +玛札塔格 +码 +码多分址 +码放 +码分多址 +码头 +码头区 +码洋 +码子 +蚂蜂 +蚂蟥 +蚂蟥钉 +蚂蚁 +蚂蚁社 +蚂蚱 +骂 +骂不还口 +骂不绝口 +骂架 +骂名 +骂娘 +骂声 +吗 +吗啡 +吗啡剂 +吗啡样 +嘛 +嘛呢堆 +嘛尼 +埋 +埋暗 +埋藏 +埋藏处 +埋藏量 +埋伏 +埋骨 +埋没 +埋入 +埋三怨四 +埋设 +埋首 +埋头 +埋头苦干 +埋怨 +埋怨声 +埋葬 +埋植 +埋植术 +买 +买办 +买椟还珠 +买断 +买断式 +买断性 +买方 +买房 +买官者 +买家 +买价 +买假 +买进 +买壳 +买客 +买空卖空 +买路钱 +买路者 +买卖 +买卖方 +买卖人 +买气 +买入 +买入价 +买通 +买账 +买者 +买主 +劢 +迈 +迈阿密 +迈步 +迈出 +迈皋桥 +迈进 +迈开 +迈纳吉勒 +迈入 +迈向 +麦 +麦播 +麦草 +麦茬 +麦茬儿 +麦得克 +麦迪霉素 +麦迪逊 +麦迪逊县 +麦迪亚 +麦迪亚省 +麦地 +麦地那 +麦顶 +麦冬 +麦冬草 +麦垛 +麦尔登呢 +麦饭石 +麦麸 +麦盖提乡 +麦秆 +麦秆虫 +麦海 +麦禾营镇 +麦鸡 +麦季 +麦加 +麦角 +麦角胺 +麦角酸 +麦角新碱 +麦秸 +麦秸灰 +麦金利峰 +麦金西 +麦精 +麦糠 +麦克风 +麦客 +麦口 +麦浪 +麦粒 +麦粒肿 +麦芒 +麦门冬 +麦苗 +麦苗儿 +麦纳麦 +麦农 +麦片 +麦秋 +麦区 +麦收 +麦收地 +麦收区 +麦穗 +麦穗儿 +麦穗鱼 +麦田 +麦芽 +麦芽糖 +麦蚜 +麦蚜虫 +麦雨 +麦哲伦 +麦种 +麦子 +麦子港 +卖 +卖报 +卖唱 +卖出价 +卖窗 +卖点 +卖掉 +卖锭 +卖方 +卖乖 +卖官鬻爵 +卖官者 +卖国 +卖国求荣 +卖国贼 +卖家 +卖价 +卖假 +卖劲 +卖力 +卖卖 +卖命 +卖弄 +卖弄聪明 +卖身 +卖身契 +卖身投靠 +卖羊人 +卖艺 +卖淫 +卖鱼处 +卖者 +卖粥嫂 +卖猪者 +卖主 +脉 +脉搏 +脉冲 +脉冲星 +脉动电流 +脉管炎 +脉诀 +脉率 +脉络 +脉络膜 +脉脉 +脉脉传情 +脉脉含情 +脉息 +脉象 +脉压 +蛮 +蛮不讲理 +蛮干 +蛮横 +蛮横无理 +蛮荒 +馒头 +馒头营乡 +瞒 +瞒案 +瞒报 +瞒哄 +瞒骗 +瞒上欺下 +瞒天过海 +瞒心昧己 +鳗 +鳗鱼 +满 +满不在乎 +满布 +满场 +满城 +满城风雨 +满城县 +满处 +满打满算 +满当 +满当当 +满地 +满都海 +满额 +满分 +满分者 +满负荷 +满腹 +满腹不快 +满腹经纶 +满腹牢骚 +满腹珠玑 +满贯 +满汉全席 +满怀 +满怀深情 +满怀信心 +满街 +满坑满谷 +满拉 +满脸 +满陇桂雨 +满满 +满满当当 +满满的 +满门 +满面春风 +满面红光 +满面笑容 +满目 +满目苍凉 +满目疮痍 +满目荒凉 +满目荆榛 +满目狼藉 +满目生辉 +满目生机 +满盘 +满盘皆活 +满盘皆输 +满篇 +满期 +满期者 +满腔 +满腔热忱 +满腔热情 +满清 +满人 +满山遍野 +满山红 +满身 +满堂 +满堂彩 +满堂喝彩 +满堂红 +满天 +满天飞 +满天星 +满头 +满头大汗 +满湾 +满文 +满心 +满眼 +满意 +满意车 +满意度 +满意房 +满意率 +满员 +满园 +满园春色 +满月 +满载 +满载而归 +满载率 +满招损 +满洲 +满洲国 +满洲里 +满洲里市 +满足 +满足感 +满族 +满族乡 +满族镇 +满嘴 +满座 +曼 +曼彻斯特 +曼德 +曼德拉 +曼俄 +曼俄村 +曼谷 +曼哈顿 +曼哈顿岛 +曼海姆 +曼海姆队 +曼曼地 +曼妙 +曼妙无比 +曼妙弦音 +曼切斯特 +曼然 +曼苏里 +曼荼罗 +曼陀罗花 +谩骂 +墁 +幔帐 +慢 +慢步 +慢藏诲盗 +慢车 +慢车道 +慢工 +慢件 +慢镜头 +慢慢 +慢慢来 +慢慢吞吞 +慢慢悠悠 +慢跑 +慢坡 +慢棋 +慢棋赛 +慢腾腾 +慢条斯理 +慢吞吞 +慢行 +慢性 +慢性病 +慢性期 +慢性子 +慢悠悠 +慢支炎 +慢走 +漫 +漫笔 +漫不经心 +漫步 +漫长 +漫道 +漫灌 +漫画 +漫画化 +漫画集 +漫画家 +漫画界 +漫画式 +漫画展 +漫话 +漫漶 +漫卷 +漫决 +漫漫 +漫人 +漫山遍野 +漫谈 +漫天 +漫天风雪 +漫天要价 +漫湾 +漫味儿 +漫无边际 +漫无际涯 +漫无止境 +漫游 +漫游费 +漫游生物 +缦帐 +蔓草 +蔓儿 +蔓萝 +蔓蔓 +蔓生植物 +蔓延 +蔓衍 +忙 +忙不迭 +忙而不乱 +忙乎 +忙乎劲儿 +忙活 +忙里忙外 +忙里偷闲 +忙碌 +忙碌不堪 +忙乱 +忙忙地 +忙忙活活 +忙忙碌碌 +忙前忙后 +忙音 +忙于 +芒 +芒刺在背 +芒果 +芒果树 +芒果园 +芒河 +芒萁 +芒市 +芒廷维尤 +芒崖 +芒种 +盲 +盲肠 +盲肠炎 +盲从 +盲从者 +盲点 +盲动 +盲动性 +盲干 +盲流 +盲率 +盲目 +盲目性 +盲女 +盲棋 +盲区 +盲人 +盲人摸象 +盲人瞎马 +盲童 +盲文 +盲文版 +盲校 +盲字 +茫 +茫茫 +茫茫大千 +茫茫然 +茫茫无际 +茫然 +茫然不解 +茫然无措 +茫无头绪 +莽 +莽草 +莽汉 +莽莽 +莽莽苍苍 +莽原 +莽撞 +蟒山 +蟒蛇 +猫 +猫洞 +猫儿腻 +猫儿山 +猫儿山巅 +猫儿州村 +猫耳洞 +猫科 +猫哭老鼠 +猫猫关 +猫腻 +猫肉 +猫神 +猫鼠同眠 +猫头鹰 +猫熊 +猫眼 +猫子哥 +毛 +毛坝乡 +毛白杨 +毛笔 +毛笔字 +毛边 +毛边纸 +毛病 +毛玻璃 +毛布 +毛糙 +毛茶 +毛虫 +毛刺 +毛刺儿 +毛岛 +毛豆 +毛额 +毛发 +毛方 +毛纺 +毛纺厂 +毛纺锭 +毛纺业 +毛纺织 +毛纺织厂 +毛峰茶 +毛估估 +毛菇坝村 +毛骨悚然 +毛孩子 +毛乎乎 +毛湖村 +毛混纺 +毛货 +毛集 +毛集镇 +毛家沟 +毛家湾 +毛将焉附 +毛巾 +毛巾被 +毛巾厂 +毛举细故 +毛俊 +毛孔 +毛裤 +毛里求斯 +毛利 +毛利率 +毛栗 +毛料 +毛驴 +毛驴车 +毛驴子 +毛毛草草 +毛毛虫 +毛毛雨 +毛难族 +毛囊 +毛坯 +毛皮 +毛票 +毛渠 +毛绒 +毛茸茸 +毛色 +毛瑟枪 +毛纱 +毛石 +毛收入 +毛手毛脚 +毛遂自荐 +毛笋 +毛毯 +毛桃 +毛头 +毛兔 +毛袜 +毛乌素 +毛细管 +毛细现象 +毛细血管 +毛虾 +毛线 +毛线针 +毛兴 +毛兴村 +毛选 +毛烟 +毛演堡村 +毛阳镇 +毛样 +毛衣 +毛用 +毛羽 +毛躁 +毛泽东 +毛毡 +毛织 +毛织品 +毛质 +毛重 +毛猪 +毛竹 +毛竹林 +毛装 +矛 +矛盾 +矛盾律 +矛盾论 +矛盾体 +矛头 +牦牛 +牦牛肉 +茅 +茅草 +茅草房 +茅草街 +茅草屋 +茅厕 +茅村 +茅盾 +茅房 +茅根 +茅家村 +茅坑 +茅寮 +茅庐 +茅棚 +茅坪 +茅塞顿开 +茅山 +茅舍 +茅台 +茅台酒 +茅屋 +锚 +锚泊点 +锚地 +锚定墩 +锚固 +锚拉式 +锚缆 +锚喷 +锚索 +锚张网 +蟊贼 +卯是卯 +卯榫 +卯眼 +茆 +铆 +铆钉 +铆钉枪 +铆劲 +茂 +茂敦 +茂兰 +茂密 +茂名 +茂名南路 +茂名市 +茂南 +茂南区 +茂盛 +茂物 +冒 +冒充 +冒顶 +冒犯 +冒汗 +冒号 +冒火 +冒尖 +冒尖户 +冒进 +冒领 +冒冒失失 +冒昧 +冒名 +冒名顶替 +冒牌 +冒牌货 +冒泡 +冒然 +冒失 +冒失鬼 +冒头 +冒险 +冒险家 +冒险者 +冒险主义 +冒烟 +冒用 +冒雨 +贸 +贸促会 +贸发 +贸发局 +贸工 +贸工部 +贸工部长 +贸工技 +贸工农 +贸洽会 +贸然 +贸委会 +贸易 +贸易部 +贸易额 +贸易法 +贸易风 +贸易国 +贸易界 +贸易局 +贸易量 +贸易区 +贸易厅 +贸易系 +贸易型 +贸易性 +贸易业 +贸易战 +贸易值 +耄耋 +耄耋高龄 +耄耋老人 +耄耋之年 +帽 +帽带 +帽顶 +帽徽 +帽盔 +帽盔儿 +帽舌 +帽檐 +帽章 +帽子 +瑁洲 +貌 +貌不惊人 +貌合神离 +貌似 +貌似公正 +懋功 +么 +没 +没白没黑 +没成想 +没齿不忘 +没齿难忘 +没出息 +没错 +没得说 +没得说的 +没顶 +没法 +没法儿 +没法子 +没关系 +没劲 +没精打采 +没空 +没脸 +没落 +没门 +没门儿 +没命 +没奈何 +没你好 +没皮没脸 +没谱 +没趣 +没日没夜 +没深没浅 +没什么 +没事 +没事儿 +没事找事 +没收 +没说的 +没头没脑 +没头没尾 +没完 +没完没了 +没戏 +没心拉肠 +没心没肺 +没羞 +没意思 +没用 +没有 +没有规矩 +没辙 +没治 +没准 +没准儿 +没着没落 +枚 +枚马 +玫瑰 +玫瑰红 +玫瑰花 +玫瑰色 +玫瑰园 +眉 +眉飞色舞 +眉峰 +眉高眼低 +眉骨 +眉欢眼笑 +眉睫 +眉开眼笑 +眉来眼去 +眉棱骨 +眉毛 +眉目 +眉目传情 +眉批 +眉清目朗 +眉清目秀 +眉山 +眉山县 +眉梢 +眉头 +眉纹 +眉纹石 +眉县 +眉心 +眉眼 +眉眼高低 +眉宇 +梅 +梅东村 +梅毒 +梅港 +梅格 +梅关 +梅河口市 +梅花 +梅花瓣型 +梅花节 +梅花鹿 +梅花山 +梅花山站 +梅花桩 +梅家坞 +梅江区 +梅开四喜 +梅雷茨党 +梅雷兹党 +梅李 +梅李镇 +梅里达 +梅里达市 +梅利达市 +梅林 +梅岭 +梅岭山 +梅陇 +梅陇站 +梅农盖 +梅派 +梅坡村 +梅谱 +梅山 +梅山镇 +梅汕 +梅树 +梅西村 +梅仙镇 +梅县 +梅雨 +梅园 +梅园新村 +梅枝 +梅州 +梅州市 +梅庄 +梅兹 +梅子 +梅子树 +媒 +媒介 +媒婆 +媒人 +媒妁 +媒体 +媒体化 +媒质 +湄公河 +湄洲湾 +楣上 +煤 +煤饼炉 +煤财字 +煤仓 +煤层 +煤层气 +煤厂 +煤场 +煤车 +煤尘 +煤成 +煤城 +煤都 +煤毒 +煤堆 +煤粉 +煤矸石 +煤管局 +煤管科 +煤管站 +煤海 +煤耗 +煤核儿 +煤黑 +煤化工 +煤灰 +煤灰堆 +煤火 +煤机 +煤机厂 +煤焦 +煤焦厂 +煤焦油 +煤井 +煤科院 +煤矿 +煤矿局 +煤矿业 +煤炉 +煤炉子 +煤末 +煤泥 +煤气 +煤气表 +煤气灯 +煤气费 +煤气罐 +煤气化 +煤气炉 +煤气灶 +煤气站 +煤球 +煤水电费 +煤炭 +煤炭部 +煤炭法 +煤炭局 +煤炭厅 +煤体 +煤田 +煤卫 +煤屑 +煤烟 +煤烟型 +煤窑 +煤业 +煤油 +煤油灯 +煤源 +煤运 +煤渣 +煤质 +煤种 +煤柱 +煤砖 +酶 +酶类 +霉 +霉变 +霉菌 +霉烂 +霉天 +霉头 +霉味 +霉雨 +每 +每场 +每次 +每当 +每份 +每逢 +每个 +每股 +每户 +每季 +每家 +每间 +每块 +每况愈下 +每每 +每亩 +每年 +每年度 +每篇 +每期 +每球 +每人 +每日 +每时每刻 +每天 +每桶 +每晚 +每位 +每月 +每张 +每周 +每周六 +每周日 +每周三 +每周五 +每周一 +美 +美编 +美不胜收 +美餐 +美差 +美钞 +美称 +美丑 +美大司 +美德 +美帝 +美发 +美发店 +美发师 +美发厅 +美方 +美分 +美感 +美工 +美工区 +美姑 +美姑县 +美观 +美国 +美国队 +美国籍 +美国式 +美国之音 +美航 +美好 +美化 +美籍 +美甲天下 +美金 +美景 +美酒 +美军 +美丽 +美丽岛 +美利坚 +美联储 +美联社 +美轮美奂 +美满 +美满村 +美满姻缘 +美盲 +美貌 +美美 +美梦 +美妙 +美妙绝伦 +美名 +美目盼兮 +美男子 +美女 +美其名曰 +美人 +美人儿 +美人凤 +美人河 +美人蕉 +美人鱼 +美人痣 +美容 +美容节 +美容器 +美容热 +美容师 +美容厅 +美容院 +美若天仙 +美色 +美色关 +美商 +美声 +美食 +美食城 +美食村 +美食佳肴 +美食家 +美食节 +美食展 +美式 +美事 +美饰 +美术 +美术班 +美术部 +美术处 +美术馆 +美术家 +美术界 +美术课 +美术年 +美术片 +美术师 +美术史 +美术室 +美术系 +美术院 +美术字 +美术组 +美丝丝 +美谈 +美蛙 +美味 +美味可口 +美文 +美协 +美学 +美学家 +美学史 +美言 +美颜 +美艳 +美艳者 +美肴 +美意 +美茵 +美茵河 +美英式 +美雨 +美玉 +美育 +美誉 +美誉度 +美元 +美院 +美院附中 +美展 +美中不足 +美洲 +美洲豹 +美洲虎 +美洲隼 +美专 +美滋滋 +镁 +镁光 +镁光灯 +镁砂 +镁砂厂 +镁砖 +妹 +妹夫 +妹妹 +妹婿 +妹子 +昧 +昧心 +昧心话 +袂 +媚 +媚骨 +媚俗 +媚俗阿世 +媚态 +媚颜 +寐 +魅力 +魅力四射 +门 +门巴 +门巴族 +门板 +门匾 +门齿 +门窗 +门当户对 +门道 +门第 +门点 +门店 +门洞 +门对 +门多萨 +门儿 +门阀 +门房 +门扉 +门风 +门封 +门缝 +门岗 +门号 +门户 +门户之见 +门环 +门环子 +门机 +门架式 +门槛 +门槛儿 +门将 +门警 +门径 +门静脉 +门坎 +门坎儿 +门坎精 +门可罗雀 +门口 +门框 +门廊 +门类 +门帘 +门联 +门脸 +门脸儿 +门脸房 +门梁 +门铃 +门楼 +门路 +门罗主义 +门楣 +门楣子 +门门 +门门道道 +门面 +门面房 +门面话 +门牌 +门牌号 +门旁 +门票 +门票费 +门前 +门墙 +门墙桃李 +门球 +门球场 +门区 +门人 +门扇 +门神 +门生 +门市 +门市部 +门首 +门闩 +门锁 +门体 +门厅 +门庭 +门庭冷落 +门庭若市 +门头沟 +门头沟区 +门徒 +门外 +门外汉 +门卫 +门下 +门牙 +门源 +门诊 +门诊部 +门诊费 +门诊量 +门诊日 +门诊室 +门阵列 +门柱 +门子 +扪心自省 +扪心自问 +闷 +闷儿 +闷罐车 +闷棍 +闷倦 +闷雷 +闷闷不乐 +闷闷地 +闷气 +闷热 +闷头 +闷响 +闷胀 +闷子车 +闷嘴葫芦 +焖 +懑 +们 +萌 +萌动 +萌发 +萌生 +萌芽 +盟 +盟邦 +盟长 +盟辞 +盟党 +盟国 +盟军 +盟旗 +盟誓 +盟书 +盟委 +盟兄弟 +盟友 +盟员 +盟约 +盟主 +朦胧 +朦胧诗 +朦朦 +朦朦胧胧 +艨艟 +勐腊 +勐腊县 +勐来村 +勐仑 +勐仑镇 +猛 +猛不防 +猛冲 +猛打 +猛地 +猛跌 +猛丁 +猛攻 +猛虎 +猛击 +猛将 +猛烈 +猛龙队 +猛犸 +猛犸象 +猛扑 +猛禽 +猛然 +猛然间 +猛士 +猛兽 +猛醒 +猛增 +猛涨 +蒙 +蒙巴萨 +蒙彼利埃 +蒙蔽 +蒙玻利埃 +蒙城 +蒙城县 +蒙达利亚 +蒙尔赞镇 +蒙方 +蒙古 +蒙古包 +蒙古国 +蒙古袍 +蒙古人种 +蒙古图村 +蒙古族 +蒙混 +蒙混过关 +蒙军 +蒙胧 +蒙罗维亚 +蒙马特 +蒙昧 +蒙昧主义 +蒙蒙 +蒙蒙亮 +蒙难 +蒙难者 +蒙浓 +蒙皮 +蒙骗 +蒙山 +蒙受 +蒙太奇 +蒙特卡罗 +蒙特卡洛 +蒙特勒 +蒙特雷市 +蒙特利尔 +蒙头 +蒙头转向 +蒙污 +蒙乡 +蒙学 +蒙药 +蒙语 +蒙冤 +蒙在鼓里 +蒙住 +蒙族 +锰 +锰钢 +锰矿 +锰矿砂 +懵 +懵懵懂懂 +孟 +孟店桥村 +孟菲斯市 +孟公岭 +孟加拉 +孟加拉队 +孟加拉国 +孟加拉虎 +孟家庄镇 +孟良崮 +孟买 +孟庙 +孟什维克 +孟县 +孟州市 +孟子 +梦 +梦笔生花 +梦湖 +梦华 +梦话 +梦幻 +梦幻泡影 +梦幻体 +梦魂萦绕 +梦见 +梦境 +梦寐 +梦寐以求 +梦牵魂绕 +梦乡 +梦想 +梦想成真 +梦魇 +梦遗 +梦游 +梦游症 +梦语 +咪表 +弥 +弥补 +弥补性 +弥渡县 +弥合 +弥河镇 +弥坚 +弥久益深 +弥勒 +弥勒佛 +弥勒县 +弥留 +弥留之际 +弥漫 +弥漫性 +弥撒 +弥塞亚 +弥散 +弥天大错 +弥天大谎 +弥天盖地 +弥足 +弥足珍贵 +迷 +迷彩 +迷彩服 +迷彩色 +迷笛 +迷宫 +迷宫式 +迷航 +迷糊 +迷幻 +迷魂汤 +迷魂阵 +迷惑 +迷惑不解 +迷津 +迷离 +迷离扑朔 +迷恋 +迷楼 +迷路 +迷漫 +迷茫 +迷蒙 +迷梦 +迷迷糊糊 +迷你 +迷你裙 +迷你型 +迷人 +迷失 +迷途 +迷途者 +迷途知返 +迷惘 +迷雾 +迷信 +迷信风 +迷阵 +迷住 +迷走神经 +迷醉 +猕猴 +猕猴桃 +谜 +谜底 +谜团 +谜语 +醚 +糜烂 +糜棱 +糜子 +麋鹿 +靡 +米 +米/秒 +米扁虫 +米厂 +米尺 +米村 +米袋 +米袋子 +米饭 +米饭粒 +米非司酮 +米粉 +米粉丝 +米缸 +米格 +米公 +米赫巴 +米花岭 +米皇 +米黄色 +米家沟 +米家沟村 +米价 +米酒 +米糠 +米兰 +米兰队 +米粒 +米粮川 +米林 +米洛斯岛 +米面 +米纳 +米奶 +米坪镇 +米铺 +米埔 +米泉市 +米色 +米山镇 +米市 +米寿 +米汤 +米桶 +米歇尔 +米行 +米行街 +米亚瓦 +米脂 +米脂县 +米制 +米珠薪桂 +米字旗 +米字形 +米粽 +洣江 +眯 +眯瞪 +眯缝 +眯细 +糸满市 +汨罗 +汨罗队 +汨罗江 +汨罗江畔 +汨罗市 +汨罗镇 +泌 +泌尿器 +泌乳期 +泌阳 +泌阳县 +觅 +觅食 +觅子店乡 +秘 +秘本 +秘不示人 +秘藏 +秘传 +秘而不宣 +秘方 +秘籍 +秘技 +秘诀 +秘鲁 +秘鲁队 +秘鲁海 +秘密 +秘谱 +秘史 +秘书 +秘书长 +秘书长库 +秘书处 +秘书官 +秘书级 +秘书局 +秘书科 +秘书组 +秘闻 +秘旨 +密 +密报 +密闭 +密闭式 +密闭性 +密不可分 +密不通风 +密不透风 +密布 +密电 +密度 +密封 +密封盖 +密封环 +密封面 +密封圈 +密告 +密集 +密集型 +密件 +密林 +密令 +密锣紧鼓 +密麻麻 +密码 +密码式 +密码锁 +密码箱 +密密 +密密层层 +密密的 +密密地 +密密麻麻 +密密匝匝 +密谋 +密切 +密山 +密山市 +密实 +密使 +密室 +密苏里 +密苏里州 +密谈 +密探 +密特朗 +密纹 +密西西比 +密歇根 +密歇根州 +密信 +密押 +密友 +密约 +密云 +密云不雨 +密云县 +密匝匝 +密执安 +密执安州 +密植 +密植园 +密致 +密宗法要 +幂 +谧 +谧静 +蜜 +蜜蜂 +蜜柑 +蜜瓜 +蜜罐 +蜜饯 +蜜饯厂 +蜜桔 +蜜李 +蜜里调油 +蜜糖 +蜜桃 +蜜丸子 +蜜腺 +蜜柚 +蜜柚苗 +蜜源 +蜜月 +蜜月团 +蜜枣 +眠 +眠山 +绵 +绵白糖 +绵薄 +绵长 +绵绸 +绵亘 +绵里藏针 +绵密 +绵绵 +绵绵不绝 +绵软 +绵邃 +绵土 +绵延 +绵延不断 +绵羊 +绵羊毛 +绵羊绒衫 +绵羊肉 +绵阳 +绵阳市 +绵纸 +绵竹县 +棉 +棉袄 +棉被 +棉被褥 +棉布 +棉大衣 +棉堆 +棉垛 +棉贩子 +棉纺 +棉纺厂 +棉纺锭 +棉纺业 +棉纺织 +棉纺织厂 +棉纺织业 +棉秆 +棉红铃虫 +棉红蜘蛛 +棉花 +棉花包 +棉花岛 +棉花点 +棉花所 +棉价 +棉裤 +棉兰老 +棉兰老岛 +棉铃 +棉铃虫 +棉铃虫蛹 +棉麻 +棉麻局 +棉毛裤 +棉毛衫 +棉帽 +棉农 +棉坯布 +棉球 +棉区 +棉绒 +棉褥 +棉纱 +棉纱锭 +棉丝 +棉梭织 +棉毯 +棉桃 +棉套 +棉田 +棉条 +棉纤维 +棉线 +棉鞋 +棉絮 +棉蚜 +棉研所 +棉衣 +棉衣被 +棉帐 +棉帐篷 +棉针织 +棉织 +棉织厂 +棉织品 +棉种 +棉株 +棉珠 +棉籽 +棉籽油 +免 +免不得 +免不了 +免除 +免戴 +免得 +免掉 +免费 +免费餐 +免费权 +免费日 +免冠 +免检 +免交 +免缴 +免考 +免票 +免签 +免去 +免却 +免烧砖 +免试 +免收 +免受 +免税 +免税店 +免税额 +免税品 +免税区 +免诉 +免烫剂 +免提键 +免刑 +免疫 +免疫费 +免疫力 +免疫率 +免疫性 +免疫学 +免疫针 +免于 +免于一死 +免予 +免遭 +免战牌 +免征 +免职 +免租 +沔阳县 +勉 +勉励 +勉勉强强 +勉强 +勉为其难 +眄 +娩 +冕 +缅 +缅甸 +缅方 +缅怀 +腼腆 +面 +面板 +面包 +面包车 +面包店 +面包房 +面包户 +面包块 +面包篮 +面包师 +面包业 +面不改色 +面部 +面陈 +面大量多 +面带微笑 +面的 +面点 +面点师 +面对 +面对面 +面额 +面肥 +面粉 +面粉厂 +面粉票 +面辅料 +面馆 +面红耳赤 +面乎乎 +面糊 +面黄肌瘦 +面积 +面颊 +面价 +面见 +面浆 +面交 +面结型 +面巾 +面巾纸 +面筋 +面筋质 +面具 +面具舞 +面孔 +面料 +面料商 +面临 +面露难色 +面貌 +面貌一新 +面面观 +面面俱到 +面面土 +面面相觑 +面馍 +面膜 +面目 +面目皆非 +面目可憎 +面目全非 +面目一新 +面庞 +面疱 +面盆 +面皮 +面片 +面票 +面洽 +面前 +面前坡 +面前坡村 +面人 +面人儿 +面容 +面如土色 +面色 +面纱 +面善 +面上 +面神经 +面生 +面食 +面世 +面市 +面试 +面授 +面授机宜 +面熟 +面述 +面塑 +面谈 +面汤 +面套 +面条 +面条机 +面团 +面碗 +面无人色 +面无血色 +面相 +面向 +面谢 +面议 +面谕 +面源 +面罩 +面值 +面纸 +面制品 +面子 +苗 +苗床 +苗鸡 +苗家 +苗家人 +苗家社 +苗家社人 +苗疆 +苗节 +苗锦 +苗岭 +苗苗 +苗民 +苗木 +苗木费 +苗女 +苗圃 +苗期 +苗情 +苗区 +苗条 +苗条素 +苗头 +苗头性 +苗乡 +苗寨 +苗种 +苗猪 +苗子 +苗族 +描 +描花扣 +描画 +描绘 +描眉画眼 +描摹 +描述 +描述性 +描写 +瞄 +瞄准 +秒 +秒表 +秒针 +秒钟 +渺 +渺茫 +渺渺茫茫 +渺无人迹 +渺无人烟 +渺无声息 +渺无音信 +渺小 +藐藐 +藐视 +藐小 +邈 +邈邈 +邈远 +妙 +妙笔 +妙笔生花 +妙不可言 +妙策 +妙常 +妙处 +妙法 +妙方 +妙高峰 +妙高台 +妙计 +妙境 +妙诀 +妙龄 +妙曼 +妙趣 +妙趣横生 +妙趣横溢 +妙入无声 +妙手 +妙手回春 +妙手空空 +妙算 +妙香山 +妙想迁得 +妙药 +妙语 +妙语解颐 +妙语连珠 +庙 +庙东营 +庙会 +庙街 +庙里 +庙门 +庙舍 +庙滩镇 +庙堂 +庙宇 +庙宇镇 +庙子乡 +乜 +灭 +灭草剂 +灭顶之灾 +灭荒县 +灭蝗 +灭火 +灭火队 +灭火机 +灭火剂 +灭火器 +灭火筒 +灭迹 +灭绝 +灭绝人性 +灭菌 +灭菌奶 +灭口 +灭鼠 +灭鼠药 +灭亡 +灭蚊片 +灭蟑药 +灭种 +蔑视 +篾刀 +篾匠 +篾片 +篾子 +民 +民办 +民办公助 +民办教师 +民办小学 +民爆 +民本 +民本观 +民兵 +民不聊生 +民财 +民仓 +民愁 +民初 +民初字 +民船 +民粹派 +民德 +民调 +民法 +民法典 +民法学 +民防 +民防部 +民防局 +民房 +民愤 +民丰 +民风 +民富国强 +民改联 +民歌 +民歌风 +民歌节 +民歌式 +民革 +民工 +民工潮 +民工队 +民管 +民管会 +民国 +民国初年 +民国元年 +民航 +民航处 +民航法 +民航机 +民航界 +民航局 +民航史 +民航业 +民和委 +民和县 +民会 +民机 +民家 +民间 +民间文学 +民间舞 +民间舞团 +民间性 +民间艺术 +民间语 +民建 +民进 +民警 +民居 +民乐 +民乐队 +民乐曲 +民乐县 +民乐乡 +民力 +民盟 +民命 +民瘼 +民女 +民品 +民气 +民勤县 +民青 +民情 +民权 +民权主义 +民商 +民社党 +民生 +民生主义 +民声 +民食 +民事 +民事案 +民事权利 +民俗 +民俗馆 +民俗学 +民俗学家 +民俗学史 +民庭 +民团 +民旺村 +民惟邦本 +民委 +民舞 +民先 +民心 +民心所向 +民心亭 +民心向背 +民行 +民选 +民谚 +民谣 +民益 +民意 +民意测验 +民营 +民营化 +民用 +民用机 +民忧 +民友联 +民怨 +民怨沸腾 +民运 +民运会 +民贼 +民宅 +民阵 +民政 +民政办 +民政部 +民政部门 +民政村 +民政党 +民政局 +民政局长 +民政科 +民政厅 +民脂民膏 +民质 +民智 +民众 +民众党 +民主 +民主村 +民主党 +民主党派 +民主德国 +民主改革 +民主刚果 +民主革命 +民主观 +民主国 +民主化 +民主联盟 +民主派 +民主人士 +民主乡 +民主型 +民主性 +民主主义 +民资 +民宗委 +民族 +民族村 +民族党 +民族观 +民族化 +民族魂 +民族节 +民族情 +民族情绪 +民族史 +民族式 +民族所 +民族舞 +民族乡 +民族形式 +民族性 +民族学 +民族英雄 +民族之林 +民族主义 +民族自决 +民族自治 +岷江 +岷山 +岷县 +冧 +缗 +闵行区 +抿 +泯 +泯没 +泯灭 +闽 +闽北 +闽东 +闽侯县 +闽江 +闽江口 +闽剧 +闽南 +闽宁 +闽清县 +闽西 +闽粤 +闽浙 +闽中 +敏 +敏感 +敏感点 +敏感度 +敏感区 +敏感性 +敏捷 +敏锐 +敏锐度 +敏锐性 +敏于 +敏竹寺 +名 +名报名刊 +名笔 +名编辑 +名不符实 +名不副实 +名不虚传 +名菜 +名菜馆 +名册 +名茶 +名产 +名车 +名车者 +名臣 +名称 +名称栏 +名城 +名吃 +名丑 +名厨 +名传千古 +名垂千古 +名垂青史 +名垂史册 +名词 +名词委 +名瓷 +名次 +名存实亡 +名单 +名旦 +名典 +名店 +名都 +名队 +名额 +名儿 +名分 +名符其实 +名副其实 +名功 +名古屋 +名贵 +名果 +名过其实 +名号 +名湖 +名护 +名护市 +名花 +名花异草 +名画 +名画家 +名记者 +名家 +名建筑 +名江 +名将 +名缰利锁 +名匠 +名角 +名角儿 +名叫 +名教练 +名教授 +名街 +名节 +名酒 +名句 +名剧 +名郡 +名款 +名来利往 +名利 +名利观 +名利双收 +名列 +名列榜首 +名列前茅 +名流 +名留青史 +名楼 +名录 +名落孙山 +名满天下 +名门 +名模 +名目 +名目繁多 +名难副实 +名鸟 +名牌 +名牌车 +名牌货 +名牌机 +名牌群 +名片 +名片簿 +名片册 +名片夹 +名篇 +名品 +名评论员 +名企 +名气 +名琴 +名曲 +名权位 +名拳 +名人 +名人脸 +名人腔 +名人赛 +名人式 +名人战 +名人组 +名刹 +名山 +名山大川 +名山事业 +名声 +名声大振 +名声鹊起 +名胜 +名胜地 +名胜古迹 +名胜区 +名师 +名师傅 +名诗 +名士 +名士者 +名仕 +名手 +名树 +名数 +名寺 +名宿 +名堂 +名特优 +名特优稀 +名特优新 +名团 +名亡 +名望 +名位 +名位观 +名闻遐迩 +名物 +名戏 +名下 +名下无虚 +名贤 +名校 +名心 +名信片 +名星 +名学 +名烟 +名言 +名演员 +名扬 +名扬四海 +名扬天下 +名窑 +名药 +名医 +名医药 +名义 +名义工资 +名义权 +名邑 +名优 +名优特 +名优特产 +名邮 +名誉 +名誉权 +名誉扫地 +名园 +名曰 +名噪一时 +名宅 +名章 +名震一时 +名震中外 +名正言顺 +名中药 +名著 +名专栏 +名子 +名字 +名作 +名作家 +明 +明白 +明白卡 +明白人 +明白纸 +明摆着 +明辨 +明辨是非 +明查暗访 +明察暗访 +明察秋毫 +明昌 +明畅 +明朝 +明澈 +明晨 +明出大卖 +明处 +明窗净几 +明达 +明代 +明道 +明灯 +明电 +明洞 +明断 +明儿 +明矾 +明公正道 +明沟 +明光透亮 +明湖 +明黄 +明晃晃 +明慧 +明火 +明火点 +明火区 +明火执仗 +明火执杖 +明胶 +明角灯 +明净 +明镜 +明镜儿 +明镜高悬 +明久乡 +明君 +明快 +明来暗往 +明朗 +明理 +明丽 +明丽朗润 +明亮 +明了 +明令 +明令禁止 +明码 +明媒正娶 +明媚 +明面儿 +明明 +明明白白 +明明灭灭 +明末 +明末清初 +明眸皓齿 +明目 +明目警心 +明目张胆 +明尼苏达 +明年 +明炮 +明枪暗箭 +明清 +明清式 +明渠 +明泉 +明确 +明确化 +明人 +明日 +明日黄花 +明山区 +明石海峡 +明石市 +明史 +明示 +明水 +明水镇 +明斯克 +明斯特 +明太鱼 +明太祖 +明特优新 +明天 +明贴袋 +明瓦 +明晚 +明王朝 +明文 +明文规定 +明晰 +明晰性 +明溪口乡 +明溪县 +明细 +明细表 +明细单 +明细账 +明虾 +明显 +明显化 +明线 +明线光谱 +明孝陵 +明信片 +明星 +明星队 +明星赛 +明星式 +明星团 +明言 +明眼人 +明艳 +明阳屯 +明月 +明月山村 +明早 +明哲保身 +明争暗斗 +明正典刑 +明证 +明知 +明知故犯 +明知故问 +明治神宫 +明治维新 +明智 +明智之举 +明州 +明珠 +明珠暗投 +明珠杯 +明珠弹雀 +明珠投暗 +明着说 +鸣 +鸣鞭 +鸣不平 +鸣唱 +鸣笛 +鸣放 +鸣凤镇 +鸣吼 +鸣叫 +鸣金 +鸣金收兵 +鸣锣登场 +鸣锣开道 +鸣门 +鸣炮 +鸣枪 +鸣禽 +鸣沙山 +鸣哨 +鸣声 +鸣响 +鸣谢 +鸣谢碑 +鸣冤叫屈 +鸣啭 +鸣奏 +茗 +冥 +冥诞 +冥河 +冥冥 +冥冥之中 +冥寿 +冥思 +冥思苦索 +冥思苦想 +冥顽不灵 +冥王星 +铭 +铭感 +铭记 +铭记碑 +铭记在心 +铭刻 +铭牌 +铭文 +铭心刻骨 +铭印 +铭志 +瞑目 +螟虫 +螟蛾 +螟害 +螟蛉 +酩酊大醉 +酩浆 +命 +命案 +命笔 +命赴黄泉 +命根 +命根儿 +命根子 +命乖运蹇 +命官 +命苦 +命令 +命令句 +命令名 +命令权 +命令式 +命令性 +命令主义 +命令状 +命令字 +命脉 +命名 +命名日 +命题 +命途 +命相 +命意 +命运 +命运感 +命运攸关 +命在旦夕 +命中 +命中率 +谬 +谬论 +谬说 +谬误 +谬以千里 +谬语 +谬之千里 +谬种 +谬种流传 +缪 +缪家村 +摸 +摸得着 +摸底 +摸底关 +摸黑 +摸黑儿 +摸奖 +摸门儿 +摸摸 +摸摸索索 +摸爬滚打 +摸清 +摸索 +摸透 +馍 +馍馍 +摹 +摹本 +摹仿 +摹刻 +摹山范水 +摹写 +摹印 +模 +模板 +模版 +模本 +模唱 +模范 +模范村 +模范团 +模范县 +模仿 +模分布论 +模糊 +模糊不清 +模具 +模块 +模棱两可 +模模糊糊 +模拟 +模拟法 +模拟化 +模拟机 +模拟器 +模拟式 +模拟网 +模拟制式 +模声拟态 +模式 +模式化 +模式论 +模式图 +模塑 +模特 +模特儿 +模型 +模压 +模压模 +模样 +模子 +膜 +膜拜 +膜片 +摩 +摩擦 +摩擦点 +摩擦剂 +摩擦力 +摩擦性 +摩擦学 +摩擦音 +摩登 +摩登舞 +摩电灯 +摩顶放踵 +摩尔多瓦 +摩加迪沙 +摩肩接踵 +摩拉维亚 +摩啰街 +摩洛哥 +摩洛哥队 +摩纳哥 +摩纳哥队 +摩配 +摩拳擦掌 +摩润 +摩松楼 +摩苏尔 +摩挲 +摩梭人 +摩天 +摩天大楼 +摩天大厦 +摩天楼 +摩通社 +摩托 +摩托车 +摩托车厂 +摩托车者 +摩托船 +摩托艇 +摩文仁 +摩崖 +摩泽尔河 +磨 +磨擦 +磨蹭 +磨杵成针 +磨床 +磨刀 +磨刀霍霍 +磨刀石 +磨坊 +磨歌 +磨工 +磨光 +磨光面 +磨耗 +磨合 +磨合期 +磨叽 +磨具 +磨砺 +磨练 +磨炼 +磨料 +磨米坊 +磨灭 +磨磨蹭蹭 +磨难 +磨盘 +磨破嘴 +磨漆画 +磨砂玻璃 +磨砂皮 +磨山镇 +磨石 +磨损 +磨窝 +磨眼 +磨洋工 +磨砖对缝 +磨嘴皮 +蘑菇 +蘑菇罐头 +蘑菇棚 +蘑菇云 +蘑菇战术 +魔 +魔法 +魔法师 +魔方 +魔高一丈 +魔怪 +魔鬼 +魔幻 +魔窟 +魔块 +魔力 +魔手 +魔术 +魔术队 +魔术师 +魔术团 +魔水 +魔头 +魔王 +魔鞋 +魔岩 +魔芋 +魔掌 +魔杖 +魔爪 +抹 +抹布 +抹掉 +抹黑 +抹灰 +抹杀 +抹煞 +抹香鲸 +末 +末班车 +末代 +末端 +末段 +末儿 +末后 +末节 +末了 +末流 +末路 +末年 +末期 +末日 +末梢 +末梢神经 +末世 +末尾 +末药 +末叶 +末子 +末座 +沫儿 +沫子 +茉莉 +茉莉花 +茉莉花茶 +陌路 +陌上 +陌生 +陌生化 +陌生人 +陌于 +秣马厉兵 +莫 +莫不 +莫不如 +莫不是 +莫测 +莫测高深 +莫愁湖 +莫此为甚 +莫大 +莫尔特克 +莫方 +莫非 +莫高窟 +莫过于 +莫可名状 +莫可指数 +莫里纳 +莫力达瓦 +莫隆 +莫罗市 +莫名 +莫名其妙 +莫名无言 +莫明其妙 +莫内塔 +莫逆之交 +莫旗 +莫如 +莫若 +莫桑比克 +莫沙夫 +莫斯科 +莫斯科城 +莫斯科市 +莫索罗 +莫索湾 +莫托拉镇 +莫先乎情 +莫须有 +莫伊 +莫云 +莫衷一是 +寞 +漠 +漠不关心 +漠不相关 +漠风 +漠河 +漠然 +漠然视之 +漠然置之 +漠视 +蓦地 +蓦然 +墨 +墨宝 +墨笔 +墨笔画 +墨彩画 +墨城 +墨池 +墨存 +墨锭 +墨斗鱼 +墨尔本 +墨尔本市 +墨法 +墨粉 +墨管 +墨旱莲 +墨荷 +墨盒 +墨黑 +墨华 +墨画 +墨迹 +墨迹未干 +墨家 +墨镜 +墨菊 +墨客 +墨绿 +墨绿色 +墨梅 +墨梅图 +墨囊 +墨如寺 +墨色 +墨市 +墨守陈规 +墨守成规 +墨水 +墨水池 +墨水瓶 +墨西哥 +墨西哥城 +墨西哥队 +墨西哥湾 +墨西哥州 +墨香 +墨鸦 +墨鱼 +墨玉 +墨玉县 +墨韵 +墨汁 +墨竹 +默 +默哀 +默不作声 +默祷 +默读 +默对 +默化潜移 +默克莱 +默克莱市 +默默 +默默不语 +默默无闻 +默默无言 +默默无语 +默念 +默片 +默契 +默然 +默认 +默诵 +默想 +默写 +默许 +默坐 +哞 +哞哞 +牟 +牟定县 +牟家村 +牟利 +牟罗兹 +牟平 +牟平城 +牟平区 +牟平县 +牟取 +牟取暴利 +眸神 +眸子 +谋 +谋财害命 +谋臣 +谋定 +谋反 +谋害 +谋划 +谋计 +谋利 +谋利者 +谋略 +谋略家 +谋略史 +谋面 +谋篇 +谋求 +谋取 +谋杀 +谋杀案 +谋生 +谋士 +谋事 +谋势篇 +谋私 +谋职 +谋职者 +某 +某部 +某地 +某个 +某某 +某人 +某日 +某省 +某师 +某市 +某事 +某团 +某县 +某些 +某种 +母 +母爱 +母板 +母本 +母草 +母大虫 +母丁香 +母法 +母蜂 +母公司 +母狗 +母龟 +母国 +母怀 +母机 +母鸡 +母舰 +母教 +母模 +母牛 +母女 +母亲 +母亲河 +母亲节 +母权制 +母乳 +母鼠 +母树林 +母体 +母土 +母系 +母线 +母线槽 +母校 +母性 +母畜 +母羊 +母夜叉 +母液 +母音 +母婴 +母语 +母钟 +母株 +母猪 +母子 +母子公司 +母子团 +母族国 +亩 +亩产 +亩产量 +亩均 +牡丹 +牡丹花 +牡丹江 +牡丹江市 +牡丹节 +牡丹卡 +牡丹山 +牡丹亭 +牡丹乡 +牡丹园 +牡技 +牡蛎 +牡牛 +牡石化 +姆贝基 +姆尼布区 +姆塞克瓦 +姆西拉 +拇指 +木 +木靶 +木板 +木板床 +木板房 +木板楼 +木版 +木版画 +木棒 +木背 +木背椅 +木本 +木本水源 +木本植物 +木笔 +木变石 +木菠萝 +木材 +木材厂 +木材林 +木槎 +木柴 +木车 +木船 +木窗 +木床 +木槌 +木凳 +木地板 +木雕 +木雕泥塑 +木豆 +木耳 +木筏 +木筏子 +木方 +木芙蓉 +木工 +木构 +木鼓 +木鼓舞 +木瓜 +木管乐器 +木柜 +木棍 +木椁 +木化石 +木屐 +木架 +木简 +木剑 +木江坪乡 +木浆 +木匠 +木匠活 +木匠师 +木焦油 +木结构 +木姐 +木槿花 +木锯厂 +木康 +木刻 +木刻水印 +木块 +木框 +木兰 +木兰拳 +木兰县 +木栏 +木廊 +木犁 +木莲 +木莲桥 +木料 +木轮 +木麻黄 +木麻黄树 +木马 +木马计 +木煤气 +木门 +木棉 +木棉花 +木棉树 +木木的 +木乃伊 +木讷 +木偶 +木偶剧 +木偶片 +木偶戏 +木排 +木牌 +木牌子 +木浦 +木器 +木器厂 +木墙裙 +木锹 +木桥 +木琴 +木球 +木然 +木人石心 +木勺 +木勺舞 +木生菌 +木梳 +木薯 +木栓 +木栓层 +木双镇 +木炭 +木炭画 +木梯 +木条 +木条桌 +木桶 +木头 +木头疙瘩 +木头人 +木头人儿 +木袜楦 +木纹 +木屋 +木樨地 +木香 +木箱 +木屑 +木星 +木业 +木叶 +木已成舟 +木椅 +木鱼 +木鱼石 +木栅 +木枕 +木制 +木制品 +木质 +木质部 +木质茎 +木质素 +木柱 +木桩 +木桌 +木字旁儿 +目 +目标 +目标化 +目标论 +目标区 +目标值 +目不见睫 +目不交睫 +目不窥园 +目不忍睹 +目不识丁 +目不暇接 +目不斜视 +目不转睛 +目测 +目次 +目的 +目的地 +目的论 +目的性 +目瞪口呆 +目地 +目睹 +目睹记 +目睹式 +目高于顶 +目光 +目光短浅 +目击 +目击人 +目击者 +目极千古 +目镜 +目空一切 +目力 +目力表 +目录 +目录名 +目录厅 +目录学 +目迷五色 +目脑 +目前 +目染 +目视 +目送 +目无 +目无表情 +目无法纪 +目无国法 +目无全牛 +目无余子 +目下 +目眩 +目鱼 +目指气使 +目中无人 +沐 +沐石河乡 +沐浴 +牧 +牧草 +牧场 +牧场主 +牧地 +牧歌 +牧歌式 +牧工 +牧工商 +牧归 +牧户 +牧奎村 +牧马 +牧马图 +牧民 +牧牛 +牧牛颂 +牧女 +牧区 +牧犬 +牧群 +牧人 +牧师 +牧童 +牧畜 +牧羊 +牧羊点 +牧羊犬 +牧羊人 +牧野 +牧业 +牧业税 +牧医系 +牧者 +牧主 +苜蓿 +苜蓿草 +钼 +钼矿 +募 +募兵制 +募集 +募捐 +募捐箱 +墓 +墓碑 +墓表 +墓场 +墓道 +墓地 +墓坑 +墓区 +墓石 +墓室 +墓穴 +墓茔 +墓园 +墓葬 +墓葬品 +墓志 +墓制 +墓中人 +墓主人 +墓子 +幕 +幕布 +幕府 +幕后 +幕后戏 +幕僚 +幕落 +幕墙 +幕天席地 +睦 +睦村 +睦邻 +睦邻友好 +慕 +慕光性 +慕名 +慕名而来 +慕名弃实 +慕尼黑 +慕田峪 +慕田峪村 +慕田峪关 +慕仪乡 +暮 +暮霭 +暮春 +暮鼓 +暮鼓晨钟 +暮年 +暮气 +暮气沉沉 +暮秋 +暮色 +暮色四合 +暮生儿 +暮云 +暮云春树 +穆 +穆迪拉 +穆尔拉 +穆棱市 +穆民 +穆斯林 +穆索马 +拿 +拿波里 +拿粗挟细 +拿获 +拿来主义 +拿摩温 +拿拿 +拿破仑 +拿腔拿调 +拿三搬四 +拿手 +拿手好戏 +拿手戏 +拿下 +拿药 +拿走 +哪 +哪般 +哪边 +哪儿 +哪个 +哪家 +哪里 +哪里话 +哪怕 +哪些 +哪样 +内 +内包装 +内保 +内壁 +内避套 +内宾 +内部 +内部化 +内参 +内藏式 +内侧 +内存 +内存储器 +内错角 +内胆 +内当家 +内道 +内地 +内弟 +内电路 +内定 +内毒素 +内耳 +内防军 +内分泌 +内服 +内服药 +内阁 +内阁制 +内阁总理 +内格夫 +内格罗河 +内公切线 +内功 +内骨骼 +内棺 +内果皮 +内海 +内含 +内涵 +内涵式 +内夯 +内耗 +内河 +内核 +内哄 +内讧 +内华达州 +内画 +内话 +内黄县 +内绘 +内绘壶 +内寄生 +内家 +内架 +内奸 +内江 +内江市 +内交 +内角 +内景 +内径 +内镜 +内疚 +内疚感 +内聚力 +内科 +内壳 +内裤 +内窥镜 +内窥镜式 +内涝 +内里 +内力 +内敛 +内敛性 +内伶仃岛 +内流河 +内陆 +内陆国 +内陆海 +内陆河 +内陆湖 +内乱 +内罗毕 +内贸 +内贸部 +内贸局 +内蒙 +内蒙古 +内蒙古团 +内膜 +内幕 +内难 +内能 +内皮 +内墙 +内切圆 +内亲 +内勤 +内情 +内丘县 +内驱动力 +内驱力 +内燃机 +内燃机车 +内瓤 +内容 +内容各异 +内容栏 +内伤 +内商 +内设 +内生 +内生肌肝 +内省 +内事 +内视反听 +内饰 +内饰件 +内室 +内水 +内司委 +内胎 +内坛 +内膛嫁接 +内庭 +内退 +内外 +内外部 +内外夹攻 +内外交困 +内外联 +内外贸 +内外勤 +内外线 +内外有别 +内外援 +内外资 +内卫 +内乌肯省 +内屋 +内务 +内务部 +内线 +内乡 +内乡县 +内向 +内向型 +内项 +内销 +内斜视 +内心 +内行 +内行人 +内兄 +内秀 +内需 +内蓄力 +内焰 +内衣 +内衣厂 +内因 +内阴型 +内引外联 +内应 +内营力 +内忧 +内忧外患 +内援 +内缘 +内源性 +内蕴 +内在 +内在化 +内在论 +内在于 +内脏 +内债 +内战 +内障 +内争 +内政 +内政部 +内政部长 +内侄 +内侄女 +内痔 +内置式 +内助 +内资 +内阻 +那 +那霸 +那霸港 +那霸市 +那般 +那边 +那波尔 +那波里 +那不勒斯 +那布 +那场 +那达慕 +那大 +那段 +那儿 +那幅 +那个 +那洪镇 +那化村 +那会儿 +那口子 +那里 +那么 +那么些 +那么样 +那末 +那莫乡 +那年 +那盆 +那曲 +那曲县 +那曲镇 +那色 +那时 +那双 +那天 +那位 +那务镇 +那些 +那样 +那扎村 +那阵子 +那种 +纳 +纳巴谷 +纳巴市 +纳巴提亚 +纳百川 +纳粹 +纳尔乡 +纳福 +纳谏 +纳卡 +纳—卡 +纳克法 +纳恐 +纳凉 +纳流 +纳闷 +纳米 +纳米比亚 +纳木错湖 +纳入 +纳税 +纳税额 +纳税户 +纳税率 +纳税钱 +纳税人 +纳税者 +纳斯尔队 +纳塔尔 +纳塔尔省 +纳塔尔市 +纳西族 +纳溪区 +纳雍 +纳章乡 +钠 +钠玻璃 +钠灯 +捺 +乃 +乃东县 +乃堆拉 +乃是 +乃至 +乃至于 +奶 +奶白 +奶白菜 +奶茶 +奶豆腐 +奶粉 +奶粉厂 +奶酒 +奶酪 +奶类 +奶妈 +奶毛 +奶名 +奶奶 +奶娘 +奶牛 +奶牛场 +奶皮 +奶品 +奶瓶 +奶山羊 +奶声奶气 +奶水 +奶糖 +奶糖饼 +奶头 +奶昔 +奶牙 +奶羊 +奶油 +奶油色 +奶罩 +奶制品 +奶嘴 +氖灯 +奈 +奈卜特山 +奈何 +奈良 +奈良市 +奈良县 +奈曼旗 +耐 +耐穿 +耐穿透性 +耐得 +耐读 +耐寒 +耐旱性 +耐火 +耐火材料 +耐火黏土 +耐火砖 +耐饥 +耐久 +耐久性 +耐劳 +耐力 +耐量 +耐磨 +耐热 +耐热合金 +耐人思索 +耐人玩味 +耐人寻味 +耐受 +耐受力 +耐酸 +耐温 +耐心 +耐性 +耐药性 +耐用 +耐用品 +囡囡 +男 +男伴 +男宾 +男兵 +男厕 +男单 +男盗女娼 +男低音 +男队 +男儿 +男方 +男高音 +男耕女织 +男工 +男孩 +男孩儿 +男孩梦 +男婚女嫁 +男家 +男客 +男篮 +男男女女 +男女 +男女老少 +男女老幼 +男女排 +男女平等 +男排 +男朋友 +男权 +男人 +男人味 +男生 +男声 +男士 +男式 +男双 +男童 +男团 +男娃 +男校 +男性 +男婴 +男友 +男中 +男中音 +男装 +男装展 +男子 +男子汉 +男子化 +男子组 +男足 +男尊女卑 +南 +南安 +南安普敦 +南安普顿 +南安市 +南岸 +南岸区 +南澳 +南澳岛 +南澳县 +南霸天 +南半球 +南邦府 +南梆子 +南北 +南北部 +南北朝 +南北对话 +南北方 +南北阁 +南北湖 +南北街村 +南北纬 +南北向 +南边 +南部 +南部斋 +南彩镇 +南蔡乡 +南侧 +南禅寺 +南昌 +南昌街 +南昌起义 +南昌市 +南昌县 +南长山镇 +南朝 +南朝鲜 +南潮村 +南城 +南城根 +南城县 +南池子 +南充 +南充市 +南川市 +南川县 +南传 +南村 +南村镇 +南达沟 +南大街 +南戴河 +南导堤 +南岛 +南甸镇 +南定镇 +南端 +南段 +南方 +南方局 +南方派 +南纺 +南非 +南非队 +南丰 +南丰祠 +南丰村 +南丰县 +南风 +南阜村 +南岗 +南岗区 +南钢 +南钢队 +南隔堤 +南宫 +南共 +南瓜 +南瓜糊 +南瓜籽 +南瓜子 +南关 +南关村 +南关区 +南关镇 +南郭村 +南国 +南海 +南海街 +南海市 +南海子 +南韩 +南航 +南号村 +南河村 +南河一村 +南后街 +南湖 +南湖渠 +南花小区 +南华队 +南化塘镇 +南回归线 +南汇 +南货 +南箕北斗 +南极 +南极光 +南极圈 +南极虾 +南极洲 +南加州 +南涧 +南涧县 +南江 +南江县 +南疆 +南郊 +南街 +南街村 +南界 +南京 +南京城 +南京东路 +南京籍 +南京路 +南京市 +南菁 +南靖县 +南开 +南开区 +南坎 +南柯梦 +南柯一梦 +南科西嘉 +南空 +南口 +南来北往 +南岚镇 +南涝北旱 +南乐 +南礼士路 +南李 +南里 +南联北开 +南联盟 +南林大 +南岭 +南岭村 +南陵县 +南龙崮村 +南娄乡 +南楼 +南麓 +南锣鼓巷 +南码头路 +南蛮 +南蛮子 +南美 +南美洲 +南门 +南门湾 +南盟 +南面 +南面王 +南明 +南明区 +南木村 +南木林 +南南合作 +南泥湾 +南宁 +南宁路 +南宁市 +南欧 +南盘江 +南皮 +南平 +南平市 +南平镇 +南坪 +南坪村 +南坪县 +南屏街 +南屏乡 +南蒲 +南浦 +南千岛 +南迁 +南腔北调 +南清园 +南区 +南拳 +南三环 +南伞镇 +南沙 +南沙沟 +南沙区 +南沙镇 +南山 +南山堡村 +南山村 +南山区 +南社村 +南沈灶镇 +南石冲 +南食店 +南市 +南市区 +南水北调 +南水关 +南水峪村 +南斯拉夫 +南四湖 +南宋 +南太 +南塘村 +南塘镇 +南特 +南特港 +南特市 +南天门 +南天竹 +南通 +南通社 +南通市 +南桐 +南头 +南头镇 +南团 +南退 +南沱镇 +南湾 +南湾里 +南旺 +南纬 +南纬线 +南溪 +南锡国家 +南下 +南县 +南线堤 +南厢 +南襄 +南向 +南新路 +南兴镇 +南行 +南雄 +南徐城村 +南巡 +南浔 +南浔区 +南浔镇 +南丫岛 +南亚 +南堰村 +南阳 +南阳村 +南阳市 +南阳镇 +南洋 +南洋虎 +南洋杉 +南移 +南翼 +南营门街 +南营镇 +南油 +南隅 +南缘 +南辕北辙 +南苑 +南苑乡 +南粤 +南站 +南张家 +南张家村 +南漳 +南漳县 +南召 +南召县 +南征北战 +南枝 +南中国海 +南中街 +南珠 +南竹 +南庄村 +南庄镇 +难 +难挨 +难案 +难办 +难胞 +难保 +难辨 +难测 +难缠 +难产 +难吃 +难处 +难辞其咎 +难当 +难倒 +难道 +难道说 +难得 +难得一见 +难点 +难懂 +难度 +难度表 +难分难解 +难分难舍 +难分仲伯 +难割难舍 +难怪 +难关 +难过 +难解难分 +难进 +难堪 +难看 +难觅 +难眠之夜 +难免 +难免论 +难民 +难民潮 +难民署 +难民营 +难能可贵 +难欺 +难侨 +难却 +难色 +难上加难 +难舍难分 +难舍难离 +难事 +难受 +难说 +难遂人意 +难题 +难听 +难褪 +难忘 +难为 +难为情 +难闻 +难兄难弟 +难言之处 +难言之隐 +难以 +难以成眠 +难以名状 +难以启齿 +难以忍受 +难以忘怀 +难以为继 +难以言表 +难以言状 +难以置信 +难友 +难于 +难于登天 +难预测性 +难愈 +难找 +难者 +喃喃 +喃语 +喃字 +楠 +楠杆镇 +楠木 +楠溪江 +楠竹 +囊 +囊虫 +囊空如洗 +囊括 +囊中 +囊中物 +囊中羞涩 +囊中之物 +囊肿 +挠 +挠度 +挠骨 +挠力河 +挠头 +蛲虫 +恼 +恼恨 +恼火 +恼怒 +恼羞成怒 +脑 +脑癌 +脑部 +脑充血 +脑垂体 +脑存 +脑袋 +脑袋瓜 +脑袋瓜儿 +脑袋瓜子 +脑电波 +脑电图 +脑瓜 +脑瓜儿 +脑瓜子 +脑海 +脑积水 +脑际 +脑浆 +脑筋 +脑科 +脑壳 +脑力 +脑力劳动 +脑量 +脑瘤 +脑颅 +脑满肠肥 +脑门 +脑门儿 +脑门穴 +脑门子 +脑膜 +脑膜炎 +脑贫血 +脑缺氧性 +脑上体 +脑勺 +脑神经 +脑室 +脑栓塞 +脑髓 +脑瘫 +脑体 +脑外科 +脑细胞 +脑下垂体 +脑心通 +脑血管 +脑血管病 +脑血栓 +脑炎 +脑溢血 +脑震荡 +脑汁 +脑子 +脑组织 +闹 +闹表 +闹病 +闹店乡 +闹肚子 +闹翻 +闹革命 +闹鬼 +闹哄哄 +闹饥荒 +闹剧 +闹剧式 +闹情绪 +闹情绪者 +闹市 +闹市口 +闹市区 +闹事 +闹事区 +闹腾 +闹戏 +闹笑话 +闹新房 +闹醒 +闹灾荒 +闹钟 +讷河市 +呐 +呐喊 +呐喊声 +呐喊助威 +呢 +呢帽 +呢喃 +呢喃细语 +呢绒 +呢制服 +呢子 +馁 +嫩 +嫩白 +嫩草 +嫩翠 +嫩黄 +嫩黄色 +嫩江 +嫩绿 +嫩苗 +嫩嫩的 +嫩嫩枯枯 +嫩蕊 +嫩芽 +嫩芽头 +嫩叶 +嫩竹 +能 +能出能进 +能大则大 +能动 +能动性 +能多能少 +能否 +能干 +能歌善舞 +能工巧匠 +能够 +能耗 +能级 +能见度 +能匠 +能进能出 +能侃善聊 +能矿部长 +能力 +能力型 +能量 +能耐 +能谱 +能掐会算 +能屈能伸 +能人 +能上能下 +能事 +能手 +能说会道 +能文能武 +能效 +能效比 +能言善辩 +能源 +能源部 +能源区 +能源所 +能源系 +能源业 +能者 +能者多劳 +能者为师 +能征惯战 +嗯 +妮儿 +尼 +尼安萨省 +尼泊尔 +尼泊尔籍 +尼尔基 +尼共 +尼姑 +尼姑庵 +尼古丁 +尼加拉瓜 +尼科西亚 +尼克斯队 +尼克松 +尼龙 +尼龙袋 +尼龙伞 +尼龙绳 +尼罗河 +尼玛县 +尼曼 +尼那 +尼日尔 +尼日尔河 +尼日尔州 +尼日利亚 +尼斯 +尼雅 +尼雅河 +尼洋 +尼洋河 +坭 +泥 +泥巴 +泥巴路 +泥层 +泥汊镇 +泥点 +泥饭碗 +泥范 +泥肥 +泥工 +泥垢 +泥河镇 +泥猴 +泥浆 +泥浆味 +泥浆状 +泥金 +泥坑 +泥块 +泥疗 +泥螺 +泥煤 +泥淖 +泥泞 +泥牛入海 +泥盆纪 +泥墙 +泥鳅 +泥人 +泥人儿 +泥沙 +泥沙俱下 +泥石 +泥石流 +泥水 +泥水匠 +泥水选种 +泥塑 +泥胎 +泥胎儿 +泥潭 +泥炭 +泥炭全肥 +泥炭土 +泥塘 +泥头 +泥土 +泥腿子 +泥瓦匠 +泥丸 +泥污 +泥雨 +泥沼 +泥沼化 +泥质灰岩 +泥足巨人 +倪 +铌 +猊糖 +霓灯 +霓虹 +霓虹灯 +霓裳 +霓裳王国 +你 +你报 +你好 +你家 +你来我往 +你咯 +你们 +你死我活 +你一言 +你争我夺 +你中有我 +你追我赶 +拟 +拟订 +拟定 +拟稿 +拟建 +拟就 +拟人 +拟人化 +拟任 +拟声词 +拟态 +拟压 +拟议 +拟于不伦 +拟制 +拟作 +昵 +逆 +逆差 +逆产 +逆定理 +逆耳 +逆耳忠言 +逆反心理 +逆风 +逆风球 +逆光 +逆函数 +逆境 +逆来顺受 +逆浪回冲 +逆料 +逆流 +逆旅跋涉 +逆命题 +逆时针 +逆水 +逆水行舟 +逆温层 +逆向 +逆行 +逆行者 +逆运算 +逆之者 +逆转 +逆子 +逆作法 +匿 +匿迹 +匿迹海外 +匿迹销声 +匿名 +匿名信 +匿影藏形 +溺 +溺爱 +溺水 +溺水者 +腻 +腻虫 +腻烦 +腻腻歪歪 +腻体 +拈 +拈花惹草 +拈轻怕重 +年 +年报 +年辈 +年表 +年菜 +年册 +年产 +年产量 +年产奶 +年产值 +年长 +年长者 +年成 +年成交额 +年初 +年初二 +年初九 +年初三 +年初四 +年初一 +年楚河 +年代 +年代久远 +年代学 +年底 +年度 +年发电量 +年饭 +年份 +年复利 +年复一年 +年富力强 +年高德劭 +年高体衰 +年糕 +年根儿 +年关 +年光 +年过半百 +年过花甲 +年号 +年后 +年华 +年画 +年会 +年货 +年级 +年集 +年纪 +年假 +年间 +年检 +年检费 +年鉴 +年节 +年届花甲 +年金 +年近古稀 +年近花甲 +年景 +年久失修 +年久月深 +年均 +年均值 +年刊 +年老 +年老多病 +年老体弱 +年老体衰 +年礼 +年历 +年历片 +年利 +年利率 +年利税 +年利息 +年龄 +年龄段 +年龄组 +年率 +年轮 +年迈 +年迈体弱 +年满 +年末 +年莫 +年内 +年年 +年年岁岁 +年年月月 +年票 +年谱 +年前 +年青 +年青人 +年轻 +年轻化 +年轻力壮 +年轻气盛 +年轻人 +年轻有为 +年赛 +年三十 +年少 +年深日久 +年深月久 +年审 +年事 +年事已高 +年收入 +年寿 +年岁 +年头 +年尾 +年息 +年下 +年限 +年宵 +年薪 +年薪制 +年兄 +年夜饭 +年幼 +年幼无知 +年逾古稀 +年逾花甲 +年月 +年月日 +年运量 +年增长率 +年中 +年中报 +年终 +年猪 +年资 +年租金 +鲇腹 +鲇鱼 +鲶鱼 +黏稠度 +黏度 +黏合剂 +黏胶纤维 +黏米 +黏膜 +黏土 +黏性 +黏液 +黏着力 +黏着语 +捻 +捻度 +捻军 +捻子 +撵 +碾 +碾坊 +碾坊乡 +碾米厂 +碾碎 +碾子 +碾子山区 +碾子乡 +廿 +念 +念白 +念叨 +念道 +念及 +念经 +念旧 +念念 +念念不忘 +念念有词 +念奴娇 +念青 +念书 +念头 +念意 +念珠 +念珠菌性 +念兹在兹 +埝 +娘 +娘儿们 +娘家 +娘家人 +娘舅 +娘娘 +娘娘巷 +娘亲 +娘胎 +娘子 +娘子关镇 +娘子军 +酿 +酿成 +酿房 +酿祸 +酿酒 +酿酒部 +酿酒业 +酿母菌 +酿造 +酿造业 +酿制 +鸟 +鸟巢 +鸟翅 +鸟铳 +鸟岛 +鸟儿 +鸟粪层 +鸟害 +鸟尽弓藏 +鸟瞰 +鸟瞰图 +鸟类 +鸟类学家 +鸟龙 +鸟笼 +鸟迷 +鸟鸣 +鸟枪 +鸟枪换炮 +鸟雀 +鸟群 +鸟声 +鸟市 +鸟兽 +鸟啼 +鸟窝 +鸟协 +鸟音 +鸟语花香 +鸟语林 +鸟浴 +鸟尊 +袅娜 +袅袅 +袅绕 +尿 +尿斑 +尿崩症 +尿布 +尿床 +尿道 +尿毒症 +尿肥 +尿检 +尿碱 +尿炕 +尿片 +尿素 +尿素厂 +尿素霜 +尿酸 +尿糖 +尿血 +尿样 +捏 +捏合 +捏腔拿调 +捏一把汗 +捏造 +涅 +涅而不缁 +涅槃 +涅瓦河 +涅像 +聂 +聂村 +聂桥镇 +聂荣 +聂荣县 +聂庄村 +啮 +啮合 +嗫嚅 +镊子 +镍 +镍币 +镍都 +镍钢 +镍价 +镍氢 +颞三针 +蹑 +孽 +孽生 +蘖 +蘖枝 +您 +您好 +您老 +宁 +宁安市 +宁安县 +宁安乡 +宁波 +宁波市 +宁城 +宁城县 +宁德 +宁都 +宁都县 +宁冈县 +宁官屯 +宁国 +宁国府 +宁国市 +宁海县 +宁海镇 +宁河 +宁河县 +宁河镇 +宁化县 +宁家坡 +宁津 +宁津县 +宁津镇 +宁晋县 +宁静 +宁静致远 +宁可 +宁肯 +宁蒗 +宁连路 +宁陵 +宁陵县 +宁南 +宁缺毋滥 +宁缺勿滥 +宁绍 +宁死不屈 +宁土勿腐 +宁为玉碎 +宁芜 +宁武县 +宁武镇 +宁夏 +宁夏区 +宁乡 +宁乡县 +宁心 +宁馨 +宁馨儿 +宁阳 +宁阳县 +宁愿 +宁折不弯 +宁镇 +拧 +狞笑 +柠檬 +柠檬桉 +柠檬黄 +柠檬素 +柠檬酸 +柠檬王 +柠条 +凝 +凝成 +凝冻 +凝固 +凝固点 +凝固化 +凝灰岩 +凝集 +凝胶体 +凝结 +凝聚 +凝聚剂 +凝聚力 +凝聚态 +凝练 +凝炼 +凝眸 +凝汽油剂 +凝入 +凝神 +凝神专注 +凝视 +凝思 +凝眺 +凝听者 +凝望 +凝心聚力 +凝血酶 +凝血因子 +凝脂 +凝止 +凝滞 +凝重 +凝重感 +凝注 +凝铸 +妞 +妞儿 +牛 +牛蒡 +牛鼻子 +牛槽 +牛场 +牛车 +牛城 +牛刀小试 +牛鼎烹鸡 +牛斗 +牛痘 +牛痘苗 +牛犊 +牛犊子 +牛顿 +牛儿 +牛耳 +牛粪 +牛肝菌 +牛耕图 +牛倌 +牛鬼蛇神 +牛黄 +牛磺酸 +牛角 +牛角尖 +牛角梳 +牛角梭 +牛角沱 +牛角湾 +牛角湾村 +牛街 +牛津 +牛筋 +牛劲 +牛郎 +牛郎乡 +牛郎星 +牛郎织女 +牛铃 +牛马 +牛马司镇 +牛虻 +牛奶 +牛奶业 +牛年 +牛年马月 +牛排 +牛派 +牛棚 +牛皮 +牛皮菜 +牛皮癣 +牛皮纸 +牛脾气 +牛气 +牛群 +牛肉 +牛肉饼 +牛肉面 +牛乳 +牛山 +牛市 +牛溲马勃 +牛头 +牛头马面 +牛头刨 +牛头山 +牛蛙 +牛尾巴 +牛瘟 +牛心白 +牛性 +牛羊奶 +牛羊肉 +牛业 +牛蝇 +牛庄 +牛仔 +牛仔服 +牛仔裤 +牛仔衫 +扭 +扭打 +扭动 +扭合 +扭获 +扭结 +扭结处 +扭矩 +扭亏 +扭亏解困 +扭亏为盈 +扭亏增盈 +扭亏转盈 +扭困 +扭力 +扭力天平 +扭扭捏捏 +扭扭曲曲 +扭曲 +扭曲仪 +扭伤 +扭身 +扭送 +扭头 +扭秧歌 +扭转 +扭转乾坤 +扭转形变 +纽 +纽带 +纽芬兰 +纽结 +纽扣 +纽瓦克 +纽约 +纽约城 +纽约港 +纽约市 +纽约州 +纽子 +钮祜禄 +钮扣 +农 +农安 +农安县 +农八师 +农办 +农茶场 +农产 +农产品 +农场 +农场主 +农村 +农村片 +农村司 +农村所 +农大 +农贷 +农地 +农电 +农电工 +农电站 +农调队 +农发所 +农发行 +农房 +农丰 +农丰里 +农夫 +农妇 +农负 +农副产品 +农副工 +农副食品 +农副业 +农改办 +农歌 +农耕 +农工 +农工部 +农工党 +农工贸 +农工商 +农工商贸 +农工商业 +农工委 +农工型 +农姑 +农管局 +农广校 +农函 +农函大 +农合工 +农户 +农户家 +农户区 +农话 +农会 +农活 +农机 +农机办 +农机厂 +农机户 +农机化 +农机界 +农机局 +农机具 +农机具馆 +农机棚 +农机手 +农机系 +农机员 +农机院 +农机站 +农技 +农技科 +农技协 +农技员 +农技站 +农家 +农家肥 +农家乐 +农家女 +农家人 +农家娃 +农金 +农经 +农经所 +农经系 +农经站 +农救 +农救会 +农具 +农科 +农科技术 +农科教 +农科所 +农科园 +农科院 +农垦 +农垦场 +农垦局 +农垦区 +农口 +农历 +农林 +农林部 +农林局 +农林牧 +农林牧业 +农林牧渔 +农林水 +农林水牧 +农林厅 +农林下路 +农林业 +农六师 +农忙 +农贸 +农贸市场 +农门 +农民 +农民党 +农民工 +农民画 +农民起义 +农民式 +农民协会 +农民战争 +农膜 +农牧 +农牧场 +农牧处 +农牧化 +农牧局 +农牧林 +农牧民 +农牧区 +农牧厅 +农牧业 +农牧业部 +农牧渔机 +农牧渔业 +农牧展 +农奴 +农奴制 +农奴主 +农七师 +农迁农 +农情 +农区 +农人 +农桑 +农舍 +农神节 +农时 +农事 +农事图 +农水 +农税 +农摊 +农田 +农田水利 +农投 +农推 +农网 +农委 +农委会 +农务 +农闲 +农校 +农协 +农械 +农信联社 +农行 +农行奖 +农畜 +农学 +农学会 +农学家 +农学系 +农学院 +农研 +农研所 +农谚 +农药 +农药厂 +农药味 +农业 +农业部 +农业党 +农业队 +农业法 +农业工人 +农业国 +农业户 +农业界 +农业局 +农业品 +农业区 +农业社 +农业税 +农业税费 +农业司 +农业厅 +农业园 +农一师 +农艺 +农艺师 +农艺园 +农用 +农用车 +农用地 +农用品 +农友 +农园 +农运 +农展馆 +农展会 +农专 +农转非 +农庄 +农资 +农资办 +农字号 +农总行 +农作 +农作物 +浓 +浓彩淡染 +浓茶 +浓淡 +浓度 +浓度值 +浓黑 +浓厚 +浓化 +浓枯 +浓烈 +浓绿 +浓眉 +浓眉大眼 +浓密 +浓墨重彩 +浓浓 +浓浓淡淡 +浓浓的 +浓缩 +浓缩法 +浓缩稿 +浓缩液 +浓缩铀 +浓雾 +浓香 +浓烟 +浓烟滚滚 +浓艳 +浓荫 +浓郁 +浓重 +浓妆艳抹 +脓 +脓包 +脓疮 +脓水 +脓血 +脓肿 +弄 +弄潮 +弄潮儿 +弄臣 +弄棍舞刀 +弄假 +弄假成真 +弄口 +弄弄坪 +弄巧成拙 +弄清 +弄权 +弄堂 +弄相村 +弄虚作假 +奴 +奴才 +奴隶 +奴隶社会 +奴隶式 +奴隶制 +奴隶制度 +奴隶主 +奴仆 +奴颜卑膝 +奴颜婢膝 +奴颜媚骨 +奴役 +努 +努力 +努美阿 +努努 +努嘴 +弩 +怒 +怒不可遏 +怒潮 +怒斥 +怒冲冲 +怒发冲冠 +怒放 +怒海 +怒吼 +怒火 +怒火中烧 +怒江 +怒江州 +怒马 +怒骂 +怒目 +怒目而视 +怒目横眉 +怒目圆睁 +怒气 +怒气冲冲 +怒气冲天 +怒气攻心 +怒容 +怒色 +怒射 +怒狮 +怒视 +怒耸 +怒涛 +怒涛澎湃 +怒涛震海 +怒形于色 +怒族 +女 +女板 +女伴 +女扮男装 +女兵 +女厕 +女大 +女单 +女低音 +女队 +女儿 +女儿岛 +女儿红 +女儿身 +女犯 +女方 +女高音 +女工 +女孩 +女孩儿 +女红 +女皇 +女家 +女监 +女将 +女杰 +女界 +女警 +女刊 +女篮 +女篮赛 +女郎 +女垒 +女流 +女排 +女朋友 +女仆 +女强人 +女权 +女人 +女人岛 +女色 +女色关 +女神 +女神像 +女生 +女声 +女尸 +女师 +女史 +女士 +女式 +女双 +女童 +女童班 +女团 +女娃 +女娲 +女王 +女网 +女网赛 +女巫 +女侠 +女校 +女星 +女性 +女婿 +女婴 +女佣 +女友 +女招待 +女贞 +女贞子 +女真 +女中 +女中音 +女主人 +女装 +女装展 +女子 +女子组 +女足 +女足赛 +女作家 +钕铁硼 +恧 +疟 +疟疾 +疟蚊 +疟原虫 +虐 +虐待 +虐杀 +虐政 +暖 +暖池区 +暖冬 +暖房 +暖风 +暖风机 +暖锋 +暖干 +暖和 +暖烘烘 +暖乎乎 +暖呼呼 +暖壶 +暖季 +暖空气 +暖流 +暖炉 +暖暖 +暖暖的 +暖暖地 +暖暖和和 +暖棚 +暖瓶 +暖气 +暖气片 +暖气团 +暖情 +暖泉 +暖融融 +暖色 +暖色调 +暖湿气流 +暖水瓶 +暖水域 +暖武里府 +暖洋洋 +暖意 +挪 +挪动 +挪方 +挪借 +挪挪 +挪威 +挪威队 +挪威海 +挪威式 +挪威王国 +挪窝 +挪用 +挪作 +傩戏 +诺 +诺贝尔 +诺迪奥队 +诺丁汉 +诺福克郡 +诺基亚 +诺曼底 +诺曼第 +诺诺 +诺萨斯 +诺瓦拉市 +诺言 +喏 +搦管恣肆 +懦 +懦夫 +懦弱 +懦者 +糯 +糯稻 +糯米 +糯米纸 +噢 +噢噢 +哦 +讴 +讴歌 +欧 +欧安 +欧安会 +欧安组织 +欧币 +欧登塞 +欧方 +欧风 +欧共体 +欧航局 +欧锦赛 +欧空局 +欧里 +欧里乡 +欧陆 +欧罗巴洲 +欧美 +欧盟 +欧盟史 +欧姆 +欧姆定律 +欧佩克 +欧乒赛 +欧山楂 +欧式 +欧体 +欧委会 +欧溪乡 +欧行 +欧阳 +欧裔 +欧元 +欧元国 +欧元区 +欧洲 +欧洲杯赛 +欧洲队 +欧洲区 +欧洲式 +殴 +殴打 +殴斗 +瓯海 +瓯海区 +鸥 +鸥鸟 +鸥种 +呕 +呕尽心血 +呕吐 +呕心 +呕心沥血 +呕血 +偶 +偶氮染料 +偶尔 +偶发 +偶发性 +偶函数 +偶合 +偶然 +偶然性 +偶人 +偶数 +偶蹄目 +偶像 +偶一为之 +偶遇 +耦耕乡 +耦合 +耦合度 +耦色 +藕 +藕断丝连 +藕粉 +藕节儿 +藕片 +藕色 +藕汁 +怄 +怄气 +沤 +沤肥 +沤粪 +趴 +趴下 +啪 +啪哒啪哒 +啪达 +啪啪 +葩 +爬 +爬虫 +爬高 +爬格子 +爬犁 +爬爬 +爬坡越岭 +爬墙虎 +爬山 +爬山虎 +爬山越岭 +爬升 +爬藤 +爬梯 +爬行 +爬行动物 +爬泳 +爬桌 +耙 +耙犁 +耙耱 +耙子 +琶音 +帕 +帕村 +帕尔马 +帕尔马市 +帕拉瓜纳 +帕里奥利 +帕米尔 +帕塔亚 +怕 +怕人 +怕羞 +拍 +拍案而起 +拍案叫好 +拍案叫绝 +拍巴掌 +拍板 +拍柄 +拍打 +拍凤裕庭 +拍杆 +拍合 +拍击 +拍就 +拍竣 +拍框 +拍马 +拍马屁 +拍卖 +拍卖场 +拍卖槌 +拍卖法 +拍卖会 +拍卖价 +拍卖金 +拍卖款 +拍卖品 +拍卖人 +拍卖商 +拍卖声 +拍卖师 +拍卖所 +拍卖台 +拍卖行 +拍卖业 +拍拍 +拍片 +拍片人 +拍片子 +拍品 +拍摄 +拍手 +拍手称快 +拍手叫好 +拍体 +拍戏 +拍弦 +拍照 +拍照费 +拍桌子 +拍子 +俳 +俳句 +俳人 +徘徊 +排 +排版 +排版费 +排爆 +排比 +排比段式 +排笔 +排便 +排查 +排长 +排场 +排成 +排斥 +排斥力 +排除 +排除法 +排除万难 +排档 +排定 +排队 +排队机 +排筏 +排放 +排放处 +排放口 +排放量 +排放者 +排风扇 +排骨 +排灌 +排灌站 +排洪道 +排灰 +排挤 +排碱渠 +排解 +排开 +排口 +排浪式 +排涝 +排雷 +排雷员 +排联 +排练 +排练场 +排练室 +排练厅 +排量 +排列 +排龙乡 +排龙乡到 +排律 +排名 +排名榜 +排名表 +排名分 +排名赛 +排名制 +排难解纷 +排尿 +排偶 +排排 +排排坐 +排炮 +排气 +排气管 +排气型 +排遣 +排枪 +排球 +排球场 +排球队 +排球界 +排球赛 +排入 +排沙洞 +排沙简金 +排沙量 +排山倒海 +排释 +排水 +排水费 +排水沟 +排水管 +排水量 +排水闸 +排他 +排他性 +排坛 +排头 +排头兵 +排土场 +排外 +排尾 +排位 +排污 +排污费 +排污沟 +排污口 +排污量 +排污站 +排污者 +排戏 +排险 +排箫 +排协 +排泄 +排泄物 +排行 +排行榜 +排行表 +排序 +排牙山 +排演 +排椅 +排异性 +排印 +排忧解难 +排犹 +排犹主义 +排中律 +排子车 +排字 +排字机 +排字盘 +牌 +牌匾 +牌坊 +牌坊村 +牌坊店 +牌坊店村 +牌坊群 +牌号 +牌技 +牌价 +牌楼 +牌迷 +牌名 +牌铭 +牌牌 +牌品 +牌上 +牌手 +牌位 +牌友 +牌照 +牌证 +牌子 +派 +派别 +派兵 +派出 +派出所 +派出所长 +派对 +派发 +派会 +派遣 +派遣军 +派生 +派生词 +派送 +派头 +派位 +派系 +派性 +派员 +派驻 +潘 +潘集区 +潘家埠 +潘家蕃 +潘家口 +潘家园 +潘杰维 +潘帕斯 +潘生丁 +潘塔诺 +潘圩村 +潘溪渡 +潘寨村 +攀 +攀比 +攀比风 +攀登 +攀附 +攀钢 +攀高 +攀高枝 +攀龙附凤 +攀亲 +攀禽 +攀绕 +攀升 +攀谈 +攀西 +攀岩 +攀援 +攀援者 +攀缘 +攀缘茎 +攀越 +攀折 +攀枝花 +攀枝花市 +攀枝花树 +爿 +盘 +盘剥 +盘查 +盘缠 +盘秤 +盘存 +盘大 +盘道 +盘点 +盘根错节 +盘根究底 +盘古 +盘鼓 +盘桓 +盘活 +盘货 +盘锦 +盘锦市 +盘据 +盘踞 +盘扣服 +盘库 +盘龙江 +盘面 +盘内 +盘尼西林 +盘曲 +盘绕 +盘山 +盘山道 +盘山路 +盘山县 +盘石 +盘式 +盘式机 +盘丝洞 +盘算 +盘梯 +盘腿 +盘外 +盘王节 +盘问 +盘西 +盘县 +盘香 +盘行 +盘旋 +盘账 +盘整 +盘中 +盘中餐 +盘子 +磐 +磐安 +磐安县 +磐石 +磐田 +磐田队 +蹒蹒跚跚 +蹒跚 +蟠 +蟠桃 +判 +判案 +判别 +判别力 +判别式 +判处 +判词 +判定 +判读 +判断 +判断句 +判断力 +判罚 +判分 +判官 +判决 +判决案 +判决书 +判例 +判明 +判认 +判若 +判若鸿沟 +判若两人 +判若两样 +判若天壤 +判若云泥 +判刑 +叛 +叛变 +叛兵 +叛臣 +叛党 +叛匪 +叛国 +叛国罪 +叛军 +叛离 +叛乱 +叛乱者 +叛卖 +叛逆 +叛逆者 +叛逃 +叛徒 +盼 +盼归 +盼头 +盼望 +畔 +袢子 +乓乓 +滂滂然 +滂沱 +滂沱大雨 +庞贝城 +庞大 +庞各庄 +庞各庄乡 +庞各庄镇 +庞然 +庞然大物 +庞伟 +庞杂 +庞庄 +旁 +旁边 +旁边儿 +旁岔儿 +旁观 +旁观者 +旁观者清 +旁及 +旁落 +旁门 +旁门左道 +旁敲侧击 +旁切圆 +旁人 +旁若无人 +旁听 +旁听人 +旁听生 +旁听席 +旁系亲属 +旁压力 +旁遮普 +旁遮普邦 +旁遮普省 +旁征博引 +旁证 +旁注 +螃蟹 +耪 +胖 +胖大海 +胖墩墩 +胖墩儿 +胖乎乎 +胖妞 +胖胖 +胖人 +胖瘦 +胖头鱼 +胖小子 +胖子 +抛 +抛光剂 +抛光片 +抛荒 +抛开 +抛锚 +抛妻别子 +抛弃 +抛弃物 +抛却 +抛洒 +抛石 +抛售 +抛头露面 +抛头颅 +抛物 +抛物面 +抛物线 +抛秧 +抛掷 +抛砖引玉 +刨 +刨冰 +刨除 +刨床 +刨刀 +刨根问底 +刨工 +刨花 +刨花板 +刨食 +刨土问食 +刨子 +咆 +咆哮 +庖 +庖丁解牛 +狍子 +炮 +炮班 +炮兵 +炮兵部 +炮兵群 +炮兵师 +炮兵团 +炮长 +炮车 +炮弹 +炮弹箱 +炮轰 +炮灰 +炮火 +炮击 +炮舰 +炮舰外交 +炮军 +炮楼 +炮旅 +炮区 +炮群 +炮声 +炮市 +炮手 +炮塔 +炮台 +炮台镇 +炮艇 +炮筒 +炮筒子 +炮团 +炮位 +炮响 +炮眼 +炮战 +炮仗 +炮制 +炮制者 +袍 +袍谷 +袍笏登场 +袍子 +跑 +跑遍 +跑表 +跑步 +跑步器 +跑操 +跑车 +跑程 +跑单帮 +跑道 +跑道儿 +跑动 +跑断腿 +跑鹅区 +跑方员 +跑官 +跑龙套 +跑马 +跑马场 +跑马地 +跑马梁 +跑马卖解 +跑马坡 +跑马山 +跑马水 +跑马厅 +跑冒滴漏 +跑门串门 +跑前跑后 +跑上跑下 +跑题 +跑腿 +跑外 +跑位 +跑鞋 +泡 +泡菜 +泡茶 +泡饭 +泡辣椒 +泡蘑菇 +泡沫 +泡沫化 +泡沫剂 +泡沫式 +泡沫塑料 +泡沫痰 +泡沫橡胶 +泡沫者 +泡泡 +泡泡纱 +泡泡糖 +泡器 +泡杉 +泡汤 +泡桐 +泡桐花 +泡桐树 +泡崖 +泡影 +疱疹 +呸 +胚盘 +胚胎 +胚胎学家 +陪 +陪伴 +陪餐 +陪衬 +陪都 +陪读 +陪房 +陪嫁 +陪酒 +陪客 +陪审 +陪审团 +陪审员 +陪审制 +陪同 +陪同团 +陪笑 +陪行 +陪葬 +培 +培道 +培土 +培训 +培训班 +培训部 +培训点 +培训费 +培训局 +培训量 +培训率 +培训期 +培训热 +培训司 +培训网 +培训者 +培养 +培养费 +培养基 +培养料 +培养液 +培育 +培育者 +培植 +培智 +赔 +赔案 +赔本 +赔不是 +赔偿 +赔偿案 +赔偿法 +赔偿费 +赔偿金 +赔偿权 +赔偿制 +赔付 +赔付率 +赔还 +赔金 +赔款 +赔礼 +赔礼道歉 +赔钱 +赔小心 +赔笑 +赔账 +赔罪 +裴刘乡 +沛 +沛沛然 +沛县 +佩 +佩带 +佩戴 +佩刀 +佩服 +佩环 +佩剑 +佩雷斯 +佩罗里纳 +佩纳斯科 +佩奇 +佩饰 +佩斯 +佩玉 +旆 +配 +配备 +配备率 +配比 +配餐部 +配搭 +配带 +配戴 +配电 +配电房 +配电间 +配电盘 +配电室 +配殿 +配对 +配额 +配额制 +配发 +配方 +配给 +配股 +配股权 +配号 +配合 +配合力 +配剂 +配件 +配件厂 +配角 +配角儿 +配景 +配乐 +配料 +配偶 +配器 +配器法 +配色 +配饰 +配售 +配送 +配送业 +配套 +配套厂 +配套费 +配套化 +配套件 +配图量 +配舞 +配戏 +配系 +配线架 +配药 +配音 +配用 +配有 +配制 +配置 +配置率 +配种 +配种站 +配重 +配属 +配装 +喷 +喷薄而出 +喷薄欲出 +喷灯 +喷发 +喷发物 +喷饭 +喷管 +喷灌 +喷灌机 +喷灌区 +喷红欲燃 +喷壶 +喷绘 +喷火器 +喷激 +喷溅 +喷锚网 +喷墨 +喷漆 +喷气 +喷气式 +喷泉 +喷洒 +喷洒剂 +喷射 +喷射船 +喷水 +喷水池 +喷塑 +喷嚏 +喷头 +喷涂 +喷吐 +喷雾器 +喷香 +喷药 +喷涌 +喷云吐雾 +喷珠泻玉 +喷嘴 +盆 +盆菜 +盆底 +盆地 +盆花 +盆景 +盆景型 +盆景园 +盆口 +盆腔 +盆汤 +盆塘 +盆栽 +盆周 +盆竹 +盆子 +怦怦 +怦然 +怦然心动 +抨 +抨击 +砰 +砰砰 +烹 +烹调 +烹调师 +烹饪 +烹制 +嘭 +嘭嘭 +朋 +朋比为奸 +朋友 +朋友家 +朋友式 +彭 +彭城 +彭城王 +彭德怀 +彭电 +彭畈乡 +彭家 +彭楼 +彭浦 +彭山 +彭山县 +彭水 +彭水县 +彭县 +彭阳 +彭阳县 +彭泽鲫 +彭泽县 +彭州 +彭州市 +棚 +棚菜 +棚车 +棚代客 +棚代客车 +棚顶 +棚房 +棚改 +棚户 +棚户区 +棚架 +棚里 +棚内 +棚圈 +棚舍 +棚室 +棚亭 +棚外 +棚屋 +棚子 +硼 +硼肥 +硼钢 +硼镁 +硼镁石 +硼砂 +硼酸 +蓬 +蓬荜生辉 +蓬荜增辉 +蓬勃 +蓬勃生机 +蓬勃向上 +蓬窗 +蓬户瓮牖 +蓬莱 +蓬莱阁 +蓬莱市 +蓬莱仙境 +蓬乱 +蓬门荜户 +蓬蓬 +蓬蓬勃勃 +蓬松 +蓬松度 +蓬头垢面 +蓬溪县 +鹏 +鹏城 +鹏程万里 +澎 +澎湖 +澎湃 +篷 +篷布 +篷车 +膨出 +膨松粉 +膨体纱 +膨胀 +膨胀系数 +膨胀性 +捧 +捧杯 +捧场 +捧场话 +捧腹大笑 +捧哏 +捧捧场 +碰 +碰杯 +碰壁 +碰到 +碰钉子 +碰簧锁 +碰见 +碰面 +碰碰 +碰碰车 +碰巧 +碰上 +碰锁 +碰头 +碰头会 +碰撞 +碰撞性 +批 +批办 +批办制 +批驳 +批捕 +批次 +批斗 +批斗会 +批斗者 +批发 +批发部 +批发点 +批发价 +批发商 +批发业 +批发站 +批复 +批改 +批号 +批核 +批件 +批量 +批量化 +批林批孔 +批零 +批零价 +批判 +批判文 +批判性 +批批 +批评 +批评稿 +批评话 +批评家 +批评界 +批评声 +批评学 +批设 +批示 +批条 +批条子 +批文 +批销 +批销费率 +批语 +批阅 +批注 +批转 +批转交办 +批准 +批准权 +批准书 +批准证 +纰漏 +纰缪 +邳苍 +邳州 +邳州市 +坯 +坯布 +坯料 +坯子 +披 +披垂感 +披读 +披发左衽 +披风 +披盖 +披肝沥胆 +披挂 +披红戴花 +披红挂彩 +披肩 +披金戴银 +披荆斩棘 +披露 +披麻带孝 +披麻戴孝 +披毛犀 +披散 +披沙拣金 +披头散发 +披星戴月 +披衣 +披阅 +披载 +砒霜 +劈 +劈叉 +劈柴 +劈刀 +劈风斩浪 +劈开 +劈脸 +劈裂 +劈山 +劈天盖地 +劈头 +劈头盖脸 +劈头盖脑 +噼啪 +噼噼叭叭 +噼噼啪啪 +霹雷 +霹雳 +皮 +皮袄 +皮奥伊 +皮瓣 +皮包 +皮包骨头 +皮鞭 +皮层 +皮长公里 +皮尺 +皮带 +皮带轮 +皮袋 +皮蛋 +皮岛 +皮短裤 +皮儿 +皮尔森型 +皮筏 +皮肤 +皮肤癌 +皮肤病 +皮肤科 +皮肤学 +皮革 +皮革厂 +皮革店 +皮股 +皮管 +皮辊棉 +皮猴 +皮猴儿 +皮花 +皮划艇 +皮货 +皮夹 +皮夹儿 +皮夹克 +皮夹子 +皮家营村 +皮件 +皮匠 +皮筋儿 +皮具 +皮开肉绽 +皮克鱼 +皮里抽肉 +皮里阳秋 +皮鲁兹队 +皮毛 +皮帽 +皮帽耳 +皮帽子 +皮棉 +皮面 +皮囊 +皮品 +皮茄克 +皮球 +皮肉 +皮褥子 +皮山 +皮山县 +皮实 +皮损 +皮糖 +皮条 +皮艇 +皮桶子 +皮乌拉省 +皮下 +皮下组织 +皮箱 +皮鞋 +皮靴 +皮衣 +皮影 +皮影戏 +皮掌 +皮疹 +皮之不存 +皮脂腺 +皮纸 +皮质 +皮装 +皮子 +枇杷 +枇杷膏 +枇杷花 +枇杷树 +毗河 +毗连 +毗连区 +毗邻 +疲 +疲惫 +疲惫不堪 +疲沓 +疲顿 +疲乏 +疲乏不堪 +疲倦 +疲劳 +疲劳度 +疲劳感 +疲疲沓沓 +疲软 +疲弱 +疲塌 +疲态 +疲于 +疲于奔命 +蚍蜉 +蚍蜉撼树 +郫 +郫县 +啤酒 +啤酒杯 +啤酒厂 +啤酒店 +啤酒馆 +啤酒花 +啤酒节 +啤酒卡 +啤酒客 +啤酒瓶 +啤酒箱 +啤酒业 +啤酒瘾 +埤城镇 +琵琶 +琵琶曲 +脾 +脾气 +脾胃 +脾性 +脾脏 +匹 +匹比 +匹俦 +匹敌 +匹夫 +匹夫有责 +匹夫之勇 +匹马单枪 +匹马当先 +匹配 +匹兹堡市 +圮 +痞 +痞气 +痞子 +癖 +癖好 +癖性 +屁 +屁股 +屁滚尿流 +媲美 +睥睨 +僻 +僻地 +僻静 +僻壤 +僻巷 +僻野 +僻远 +譬如 +譬如说 +譬喻 +片 +片酬 +片段 +片断 +片儿 +片儿警 +片花 +片剂 +片甲不存 +片甲不留 +片假名 +片警 +片刻 +片麻岩 +片马丫口 +片马镇 +片面 +片面性 +片名 +片片 +片区 +片式 +片瓦无存 +片尾 +片言 +片言只语 +片言只字 +片源 +片约 +片纸只字 +片中 +片状林 +片子 +偏 +偏爱 +偏安 +偏安一隅 +偏材 +偏差 +偏方 +偏废 +偏锋 +偏关 +偏关县 +偏光 +偏光镜 +偏硅酸 +偏好 +偏护 +偏激 +偏见 +偏襟 +偏居一隅 +偏口鱼 +偏离 +偏流 +偏南 +偏旁 +偏僻 +偏偏 +偏颇 +偏巧 +偏失 +偏食 +偏瘫 +偏瘫症 +偏袒 +偏题 +偏听偏信 +偏听则暗 +偏头痛 +偏误 +偏狭 +偏下 +偏向 +偏心 +偏心轮 +偏信 +偏压 +偏移 +偏右 +偏远 +偏振光 +偏正 +偏执 +偏重 +偏转 +篇 +篇幅 +篇眉 +篇名 +篇目 +篇篇 +篇什 +篇首 +篇页 +篇章 +篇制 +翩 +翩翩 +翩翩飞舞 +翩翩起舞 +翩翩少年 +翩然 +翩然而至 +翩跹 +翩跹起舞 +骈文 +胼手胝足 +蹁跹 +谝 +骗 +骗保案 +骗婚 +骗局 +骗客 +骗赔 +骗赔案 +骗取 +骗人 +骗术 +骗税 +骗子 +骗子手 +剽悍 +剽窃 +剽窃者 +剽取 +漂 +漂白 +漂白粉 +漂白剂 +漂泊 +漂到 +漂儿 +漂浮 +漂浮物 +漂离 +漂砾群 +漂亮 +漂亮话 +漂亮者 +漂流 +漂流记 +漂漂亮亮 +漂染厂 +漂洗 +漂洋过海 +漂移 +缥缈 +缥缥缈缈 +飘 +飘泊 +飘泊者 +飘尘 +飘带 +飘荡 +飘动 +飘飞 +飘飞回荡 +飘拂 +飘浮 +飘忽 +飘零 +飘流 +飘落 +飘渺 +飘缈 +飘飘 +飘飘忽忽 +飘飘然 +飘飘扬扬 +飘飘摇摇 +飘飘欲仙 +飘然 +飘然欲仙 +飘洒 +飘散 +飘逝 +飘舞 +飘香 +飘行 +飘扬 +飘洋过海 +飘摇 +飘曳 +飘移 +飘逸 +飘溢 +瓢 +瓢虫 +瓢泼 +瓢泼大雨 +瓢形 +瞟 +票 +票额 +票贩 +票贩子 +票房 +票房价值 +票幅 +票根 +票管员 +票号 +票价 +票价表 +票据 +票据法 +票款 +票面 +票钱 +票数 +票台 +票体 +票条 +票务 +票箱 +票友 +票友会 +票源 +票站 +票者 +票证 +票制 +票子 +嫖 +嫖娼 +嫖娼案 +嫖妓式 +撇 +撇开 +撇缆枪 +撇下 +撇嘴 +瞥 +瞥见 +姘妇 +姘居 +姘头 +拼 +拼板 +拼搏 +拼凑 +拼合 +拼画 +拼接 +拼劲 +拼力 +拼命 +拼命三郎 +拼盘 +拼盘式 +拼拼凑凑 +拼抢 +拼杀 +拼死 +拼死拼活 +拼死一搏 +拼贴 +拼图 +拼写 +拼音 +拼音文字 +拼音字母 +拼争 +拼制 +贫 +贫病交加 +贫病交迫 +贫乏 +贫富 +贫富悬殊 +贫雇农 +贫寒 +贫户 +贫瘠 +贫瘠化 +贫贱 +贫苦 +贫矿 +贫困 +贫困层 +贫困村 +贫困带 +贫困户 +贫困化 +贫困率 +贫困帽 +贫困帽子 +贫困面 +贫困片 +贫困区 +贫困生 +贫困县 +贫困线 +贫困乡 +贫困者 +贫煤区 +贫民 +贫民窟 +贫民区 +贫农 +贫穷 +贫穷帽 +贫穷线 +贫壤瘠土 +贫弱 +贫水国 +贫水区 +贫下中农 +贫血 +贫血病 +贫血率 +贫油 +贫嘴 +贫嘴薄舌 +嫔妃 +频 +频出 +频传 +频催 +频带 +频道 +频度 +频段 +频发 +频繁 +频律 +频率 +频率段 +频哪酮 +频频 +频谱 +频仍 +频遭 +品 +品茶 +品尝 +品德 +品德课 +品读 +品格 +品级 +品鉴 +品节 +品酒 +品酒室 +品酒员 +品蓝 +品类 +品貌 +品名 +品茗 +品茗杯 +品目 +品牌 +品牌战 +品评 +品赏 +品数 +品头 +品头论足 +品透 +品位 +品味 +品系 +品行 +品性 +品学 +品学兼优 +品艺录 +品饮 +品咂 +品质 +品种 +品种性 +牝牛 +聘 +聘金 +聘礼 +聘期 +聘请 +聘任 +聘任期 +聘任制 +聘书 +聘选 +聘用 +聘用期 +聘用制 +聘约 +乒 +乒联 +乒乓 +乒乓馆 +乒乓球 +乒乓球场 +乒乓球队 +乒乓球迷 +乒乓球拍 +乒乓球赛 +乒乓球台 +乒乓球桌 +乒乓赛 +乒乓台 +乒乒 +乒乒乓乓 +乒坛 +乒协 +乒协杯 +乒羽 +平 +平安 +平安队 +平安里 +平安南道 +平安庭 +平安无事 +平安无恙 +平坝村 +平坝县 +平白 +平白无故 +平板 +平板车 +平板仪 +平版 +平保 +平辈 +平步登天 +平步青云 +平柴车 +平产 +平昌 +平昌县 +平常 +平常人 +平常事 +平常态 +平常心 +平车 +平成十年 +平畴沃野 +平除 +平川 +平川市 +平喘药 +平措林寺 +平淡 +平淡淡 +平淡无奇 +平等 +平等党 +平等互利 +平等权 +平等性 +平底 +平底锅 +平底鞋 +平地 +平地处 +平地而起 +平地风波 +平地楼台 +平顶山 +平顶山市 +平定 +平定县 +平定镇 +平度 +平度市 +平凡 +平反 +平方 +平方差 +平方尺 +平方根 +平方公里 +平方海里 +平方毫米 +平方和 +平方厘米 +平方里 +平方米 +平方英尺 +平方英里 +平房 +平房院 +平放 +平分 +平分秋色 +平服 +平复 +平肝熄风 +平艮村 +平菇 +平谷 +平谷县 +平谷县镇 +平果 +平果县 +平汉 +平和 +平和县 +平河 +平衡 +平衡表 +平衡点 +平衡杆 +平衡木 +平衡圈 +平湖 +平湖一镜 +平滑 +平滑肌 +平缓 +平价 +平假名 +平江 +平江县 +平江县队 +平角 +平金 +平津 +平静 +平镜 +平局 +平均 +平均分 +平均价 +平均利润 +平均数 +平均值 +平均制 +平均主义 +平空 +平阔 +平拉 +平乐县 +平利县 +平凉 +平凉市 +平凉站 +平列 +平林镇 +平流层 +平炉 +平鲁区 +平陆 +平陆县 +平罗县 +平箩 +平米 +平面 +平面波 +平面化 +平面几何 +平面镜 +平面图 +平民 +平民化 +平民者 +平年 +平叛 +平平 +平平安安 +平平常常 +平平淡淡 +平平的 +平平凡凡 +平平静静 +平平齐齐 +平平稳稳 +平平展展 +平平整整 +平平直直 +平铺直叙 +平起平坐 +平泉县 +平壤 +平壤城 +平壤市 +平日 +平绒 +平山 +平山区 +平山县 +平山镇 +平射炮 +平生 +平声 +平时 +平实 +平视 +平手 +平顺 +平顺县 +平朔 +平素 +平绥路 +平台 +平台车 +平台式 +平摊 +平潭岛 +平潭县 +平坦 +平坦村 +平塘 +平躺 +平添 +平头 +平头楼村 +平头正脸 +平妥 +平尾 +平纹 +平稳 +平卧 +平芜 +平武县 +平西 +平西府 +平昔 +平息 +平弦 +平乡 +平乡县 +平乡镇 +平销 +平心而论 +平心静气 +平信 +平行 +平行班 +平行会 +平行面 +平行线 +平行作业 +平型关 +平阳 +平阳县 +平遥 +平遥城 +平遥县 +平移 +平抑 +平邑 +平邑县 +平易 +平易近人 +平阴 +平阴县 +平英团 +平庸 +平庸者 +平鱼 +平舆县 +平玉县 +平垣 +平原 +平原区 +平原县 +平原乡 +平仄 +平展 +平展展 +平战 +平战时 +平者 +平针 +平诊 +平整 +平正 +平直 +平庄 +平装 +平装本 +平足 +评 +评报稿 +评比 +评比会 +评比式 +评标 +评测 +评传 +评弹 +评点 +评点家 +评定 +评定者 +评定证 +评断 +评法批儒 +评分 +评功 +评功摆好 +评功论赏 +评估 +评估费 +评估关 +评估会 +评估价 +评估所 +评估组 +评话 +评级 +评价 +评价制 +评奖 +评奖费 +评奖会 +评奖者 +评介 +评剧 +评剧团 +评剧院 +评卷 +评理 +评论 +评论部 +评论家 +评论界 +评论性 +评论员 +评论者 +评判 +评判人 +评判者 +评聘 +评审 +评审费 +评审会 +评审团 +评书 +评述 +评税单 +评说 +评说者 +评头论足 +评头品足 +评为 +评委 +评委会 +评委席 +评析 +评析性 +评戏 +评先创优 +评先树优 +评选 +评选办 +评选者 +评议 +评议表 +评议面 +评议票 +评议权 +评议书 +评议员 +评议者 +评议组 +评优 +评语 +评注 +凭 +凭单 +凭吊 +凭吊者 +凭高望远 +凭坚 +凭借 +凭据 +凭卡价 +凭空 +凭空捏造 +凭栏 +凭条 +凭眺 +凭祥 +凭祥市 +凭照 +凭证 +凭证式 +凭着 +坪 +坪坝 +坪里 +坪上 +坪上村 +坪石乡 +坪台 +坪塘 +苹果 +苹果花 +苹果酱 +苹果树 +苹果园 +屏 +屏蔽 +屏除 +屏风 +屏锦镇 +屏幕 +屏气 +屏气凝神 +屏山 +屏山顶 +屏山镇 +屏条 +屏息 +屏障 +屏住 +枰 +瓶 +瓶胆 +瓶盖 +瓶罐 +瓶颈 +瓶口 +瓶啤 +瓶塞 +瓶体 +瓶贴 +瓶装 +瓶子 +萍 +萍聚 +萍水 +萍水相逢 +萍乡 +萍乡市 +萍踪浪迹 +钋 +坡 +坡岸 +坡道 +坡地 +坡度 +坡改梯 +坡岗地 +坡耕地 +坡坎 +坡梁地 +坡岭 +坡坡 +坡坡坎坎 +坡田 +坡头 +坡头镇 +泼 +泼陂河镇 +泼妇 +泼辣 +泼冷水 +泼墨 +泼皮 +泼洒 +泼水花 +泼水花儿 +泼水节 +颇 +颇感 +颇具 +颇具规模 +颇具匠心 +颇为 +婆 +婆家 +婆家人 +婆娘 +婆婆 +婆婆妈妈 +婆娑 +婆娑起舞 +婆媳 +婆姨 +鄱阳湖 +鄱阳湖畔 +叵 +叵测之心 +叵耐 +笸箩 +迫 +迫不得已 +迫不及待 +迫导向 +迫害 +迫击炮 +迫降 +迫近 +迫力 +迫令 +迫切 +迫切性 +迫使 +迫于 +迫在眉睫 +珀斯 +破 +破案 +破案率 +破败 +破壁飞去 +破冰船 +破财 +破产 +破产案 +破产法 +破产方 +破除 +破处 +破船 +破蛋 +破费 +破釜沉舟 +破格 +破罐破摔 +破坏 +破坏力 +破坏性 +破坏者 +破获 +破击战 +破解 +破戒 +破镜重圆 +破旧 +破旧立新 +破壳 +破空 +破口大骂 +破烂 +破烂不堪 +破烂儿 +破烂王 +破浪前进 +破例 +破裂 +破裂音 +破路战 +破落户 +破马张飞 +破门 +破门而入 +破灭 +破破烂烂 +破伤风 +破碎 +破碎机 +破损 +破涕为笑 +破天荒 +破铜烂铁 +破土 +破土动工 +破土而出 +破瓦寒窑 +破碗 +破袭战 +破相 +破晓 +破絮 +破堰 +破译 +破绽 +破绽百出 +破折号 +破竹之势 +魄 +魄力 +魄散魂飞 +剖 +剖腹 +剖腹藏珠 +剖腹产 +剖宫产 +剖宫产率 +剖开 +剖面 +剖面图 +剖示 +剖视图 +剖析 +剖析性 +仆 +仆从 +仆妇 +仆仆风尘 +仆人 +仆役 +扑 +扑鼻 +扑哧 +扑嗤 +扑打 +扑粉 +扑火 +扑火队 +扑火战 +扑将 +扑救 +扑克 +扑克机 +扑克迷 +扑克牌 +扑空 +扑面 +扑面而来 +扑灭 +扑票者 +扑热息痛 +扑食 +扑朔迷离 +扑簌簌 +扑腾 +扑通 +铺 +铺板 +铺陈 +铺床 +铺档 +铺底 +铺垫 +铺盖 +铺盖卷 +铺盖卷儿 +铺轨 +铺户 +铺集镇 +铺架 +铺建 +铺锦叠翠 +铺就 +铺开 +铺路 +铺路石 +铺面 +铺平 +铺砌 +铺设 +铺摊 +铺天盖地 +铺头 +铺位 +铺叙 +铺展 +铺张 +铺张矫饰 +铺张浪费 +铺子 +匍匐 +莆田 +莆田市 +莆田县 +菩萨 +菩萨顶 +菩萨心肠 +菩提树 +葡 +葡方 +葡萄 +葡萄串 +葡萄干 +葡萄沟 +葡萄沟乡 +葡萄核 +葡萄架 +葡萄酒 +葡萄酒厂 +葡萄酒业 +葡萄苗 +葡萄球菌 +葡萄胎 +葡萄糖 +葡萄藤 +葡萄形 +葡萄牙 +葡萄牙队 +葡萄秧 +葡萄园 +葡萄园主 +葡萄汁 +蒲 +蒲包 +蒲草 +蒲城县 +蒲公英 +蒲柳 +蒲圻 +蒲圻市 +蒲扇 +蒲石村 +蒲团 +蒲苇 +蒲苇片 +璞 +璞河镇 +濮家村 +濮县 +濮阳 +濮阳市 +濮阳县 +朴 +朴刀 +朴厚 +朴朴素素 +朴实 +朴实无华 +朴素 +朴素无华 +朴学 +朴直 +朴质 +朴拙 +圃 +浦 +浦北 +浦北县 +浦东 +浦东队 +浦东南路 +浦东区 +浦江 +浦口 +浦南 +浦南乡 +浦西 +浦项 +浦项队 +普 +普安乡 +普遍 +普遍性 +普查 +普创 +普度众生 +普渡众生 +普洱茶 +普法 +普法办 +普法教育 +普高 +普格县 +普化 +普惠制 +普及 +普及本 +普及部 +普及率 +普及面 +普及型 +普及性 +普吉 +普件 +普建 +普降 +普九 +普救寺 +普卡拉姆 +普拉多 +普拉卡区 +普兰店 +普兰店市 +普利茅斯 +普列茨克 +普林斯顿 +普鲁士 +普罗比登 +普罗迪 +普罗旺斯 +普宁 +普宁寺 +普普通通 +普区 +普扫 +普速 +普天 +普天间 +普天同庆 +普天下 +普天之下 +普通 +普通班 +普通店村 +普通法 +普通工 +普通股 +普通话 +普通机 +普通级 +普通人 +普通型 +普陀 +普陀区 +普沃茨克 +普选 +普训 +普药 +普耶普罗 +普章乡 +普照 +普照寺 +普者黑 +谱 +谱表 +谱儿 +谱号 +谱架 +谱例 +谱列 +谱曲 +谱系 +谱写 +谱子 +氆氇 +蹼泳 +瀑 +瀑布 +曝 +曝光 +曝光表 +曝光度 +曝光栏 +曝光台 +曝皮 +曝晒 +七 +七·七 +七八点 +七八点钟 +七八年 +七八月 +七八月份 +七百 +七百乡 +七伯 +七步之才 +七彩 +七彩帆 +七彩龟 +七彩虹 +七彩花 +七彩鸟 +七大 +七大姑 +七点 +七二年 +七坊镇 +七高八低 +七个泉 +七沟八梁 +七姑八姨 +七拐八弯 +七国集团 +七机部 +七级 +七甲路 +七建 +七九年 +七绝 +七老八十 +七里岗村 +七里河 +七里塔 +七里塔村 +七连冠 +七零八落 +七零八碎 +七六年 +七律 +七妈 +七扭八歪 +七拼八凑 +七七 +七七式 +七七事变 +七巧板 +七窍 +七窍生烟 +七擒七纵 +七人制 +七日 +七色板 +七上八下 +七十二行 +七时 +七手八脚 +七歪八扭 +七溪岭 +七弦琴 +七星 +七星草 +七星河 +七星街 +七星拳 +七星人 +七星鱼 +七星针 +七言诗 +七叶树 +七一 +七月 +七月份 +七运会 +七中 +七纵八横 +七嘴八舌 +沏 +沏茶 +妻 +妻儿 +妻儿老小 +妻姐 +妻舅 +妻离子散 +妻女 +妻妾 +妻小 +妻子 +凄 +凄惨 +凄楚 +凄怆 +凄风楚雨 +凄风苦雨 +凄风冷雨 +凄惶 +凄苦 +凄冷 +凄厉 +凄凉 +凄美 +凄凄 +凄凄惨惨 +凄切 +凄清 +凄然 +凄婉 +栖 +栖居 +栖身 +栖息 +栖息处 +栖息地 +栖霞山 +栖止 +桤木 +桤树林 +戚 +戚戚然 +戚戚者 +戚墅堰 +萋萋 +萋萋芳华 +期 +期初 +期待 +期待值 +期房 +期货 +期货价 +期货业 +期价 +期间 +期交所 +期刊 +期考 +期满 +期末 +期盼 +期票 +期期艾艾 +期权 +期市 +期数 +期望 +期望值 +期限 +期效 +期中 +期终 +欺 +欺负 +欺客 +欺凌 +欺瞒 +欺蒙 +欺骗 +欺骗性 +欺人太甚 +欺人之谈 +欺辱 +欺软怕硬 +欺上瞒下 +欺生 +欺世 +欺世盗名 +欺世惑众 +欺侮 +欺下瞒上 +欺行霸市 +欺压 +欺诈 +欺诈案 +欺诈性 +嘁嘁喳喳 +槭树 +漆 +漆包线 +漆布 +漆雕 +漆工 +漆黑 +漆黑一团 +漆画 +漆匠 +漆膜 +漆木 +漆皮 +漆片 +漆器 +漆器业 +漆树 +漆树籽 +蹊径 +蹊跷 +祁东 +祁东县 +祁剧 +祁连 +祁连山 +祁连县 +祁县 +祁阳 +祁阳县 +祁义 +齐 +齐白石 +齐备 +齐步 +齐步走 +齐唱 +齐东野语 +齐阁村 +齐国 +齐集 +齐家 +齐肩 +齐街乡 +齐街镇 +齐名 +齐鸣 +齐齐 +齐齐哈尔 +齐全 +齐山区 +齐声 +齐市 +齐刷刷 +齐天 +齐头并进 +齐心 +齐心合力 +齐心协力 +齐胸 +齐岳山 +齐整 +齐整整 +齐抓共管 +齐抓共建 +齐奏 +岐 +岐阜县 +岐山 +岐山县 +岐王 +芪 +其 +其败 +其成 +其次 +其端 +其二 +其父 +其干 +其稿 +其后 +其间 +其乐融融 +其乐无穷 +其貌不扬 +其内 +其妻 +其三 +其诗 +其时 +其实 +其实不然 +其实难副 +其四 +其他 +其他人 +其它 +其味无穷 +其五 +其下 +其一 +其意 +其因 +其余 +其源 +其责 +其枝 +其中 +奇 +奇兵 +奇才 +奇才队 +奇材 +奇耻大辱 +奇大 +奇点 +奇峰 +奇功 +奇功伟业 +奇怪 +奇观 +奇寒 +奇花异草 +奇花异卉 +奇幻 +奇货可居 +奇迹 +奇景 +奇绝 +奇崛 +奇崛壮阔 +奇里诺奇 +奇丽 +奇妙 +奇女子 +奇葩 +奇巧 +奇缺 +奇热 +奇人 +奇山异水 +奇石 +奇士谋臣 +奇事 +奇书 +奇数 +奇松岛 +奇谈 +奇谈怪论 +奇特 +奇蹄目 +奇伟 +奇文共赏 +奇闻 +奇袭 +奇险 +奇想 +奇效 +奇形怪状 +奇秀 +奇艳 +奇痒 +奇异 +奇遇 +奇冤 +奇缘 +奇珍异宝 +奇志 +奇装异服 +歧 +歧管 +歧化酶 +歧见 +歧口 +歧路 +歧路亡羊 +歧视 +歧视性 +歧途 +歧义 +歧异 +祈 +祈祷 +祈福 +祈谷 +祈求 +祈使句 +祈望 +祈愿 +祈愿诗 +祈祝 +耆 +耆宿 +脐 +脐部 +脐橙 +脐带 +脐儿 +颀长 +崎岖 +畦 +畦埂 +畦沟 +畦塄 +畦内 +畦田 +萁 +骑 +骑兵 +骑车 +骑车人 +骑缝 +骑虎难下 +骑警 +骑龙村 +骑马 +骑马人 +骑马声 +骑马找马 +骑骑 +骑墙 +骑士 +骑士队 +骑手 +棋 +棋错一着 +棋队 +棋逢对手 +棋后 +棋技 +棋界 +棋局 +棋类 +棋类室 +棋力 +棋联 +棋路 +棋迷 +棋牌 +棋牌室 +棋盘 +棋盘坨 +棋谱 +棋赛 +棋圣 +棋势 +棋手 +棋坛 +棋王 +棋王赛 +棋王战 +棋校 +棋协 +棋艺 +棋友 +棋缘 +棋院 +棋战 +棋子 +琦玉县 +旗 +旗杆 +旗鼓相当 +旗号 +旗舰 +旗开得胜 +旗袍 +旗袍裙 +旗人 +旗山 +旗绳 +旗手 +旗语 +旗帜 +旗帜鲜明 +旗忠村 +旗子 +綦江 +蕲春 +蕲春县 +麒麟 +麒麟盖 +麒麟山 +乞哀告怜 +乞丐 +乞怜 +乞求 +乞讨 +乞讨者 +乞援 +企 +企鹅 +企鹅岛 +企改 +企管 +企管站 +企划 +企划部 +企划局 +企划厅 +企获 +企及 +企口 +企盼 +企求 +企事业 +企图 +企望 +企协 +企业 +企业处 +企业法 +企业化 +企业级 +企业家 +企业界 +企业局 +企业群 +企业团 +企业型 +企业主 +企足而待 +岂 +岂不 +岂但 +岂敢 +岂料 +岂能 +岂有此理 +岂止 +芑 +启 +启程 +启齿 +启德 +启迪 +启东 +启动 +启动点 +启动金 +启动力 +启动器 +启动日 +启动型 +启发 +启发式 +启发性 +启封 +启航 +启口 +启蒙 +启蒙运动 +启明 +启明星 +启幕 +启示 +启示力 +启示录 +启示性 +启事 +启用 +启运 +杞人忧天 +杞人之忧 +杞县 +起 +起爆 +起笔 +起兵 +起病 +起步 +起草 +起草人 +起草组 +起承转合 +起程 +起初 +起床 +起床号 +起到 +起点 +起点处 +起点价 +起点站 +起电盘 +起吊机 +起动 +起动机 +起端 +起飞 +起飞线 +起伏 +起伏跌宕 +起根由头 +起拱 +起航 +起哄 +起火 +起家 +起价 +起见 +起降 +起脚 +起解 +起劲 +起敬 +起居 +起居室 +起居厅 +起来 +起立 +起落 +起落架 +起码 +起锚 +起名 +起名儿 +起拍 +起拍价 +起跑 +起跑地 +起跑点 +起跑线 +起泡 +起皮 +起起伏伏 +起起浮浮 +起起落落 +起色 +起身 +起始 +起事 +起手回春 +起死回生 +起诉 +起诉科 +起诉书 +起诉者 +起诉状 +起跳 +起跳台 +起头 +起舞 +起先 +起眼 +起义 +起义军 +起因 +起用 +起源 +起源于 +起运 +起早摸黑 +起早贪黑 +起止点 +起重 +起重船 +起重机 +起子 +绮丽 +绮筵 +气 +气昂昂 +气泵 +气步枪 +气藏 +气冲冲 +气冲牛斗 +气冲霄汉 +气喘 +气喘吁吁 +气窗 +气锤 +气道 +气垫 +气垫船 +气垫鞋 +气动 +气动力 +气度 +气度不凡 +气度美 +气儿 +气阀 +气肥 +气氛 +气愤 +气腹 +气概 +气概不凡 +气缸 +气缸盖 +气功 +气功班 +气功师 +气骨 +气鼓鼓 +气管 +气管炎 +气贯长虹 +气罐 +气柜 +气锅 +气锅鸡 +气酣 +气哼哼 +气候 +气候学家 +气乎乎 +气呼呼 +气化 +气化率 +气话 +气机 +气急败坏 +气节 +气井 +气绝身亡 +气慨 +气孔 +气浪 +气冷 +气力 +气量 +气流 +气轮机 +气脉贯畅 +气煤 +气门 +气门心 +气闷 +气密性 +气囊 +气恼 +气馁 +气派 +气泡 +气瓶 +气魄 +气枪 +气球 +气区 +气溶胶 +气色 +气盛 +气势 +气势磅礴 +气势恢宏 +气势如虹 +气势汹汹 +气数 +气死 +气态 +气体 +气体云 +气田 +气筒 +气团 +气吞山河 +气味 +气味相投 +气温 +气雾剂 +气息 +气息奄奄 +气象 +气象局 +气象所 +气象台 +气象台站 +气象厅 +气象万千 +气象卫星 +气象系 +气象学 +气象学家 +气象站 +气性 +气胸 +气虚 +气旋 +气血 +气压 +气压表 +气压计 +气眼 +气焰 +气宇 +气运 +气韵 +气躁 +气质 +气滞 +气壮如牛 +气壮山河 +迄 +迄今 +迄今为止 +弃 +弃暗投明 +弃儿 +弃耕 +弃甲曳兵 +弃旧图新 +弃农 +弃权 +弃权票 +弃世 +弃市 +弃文就武 +弃物 +弃瑕录用 +弃邪归正 +弃械投降 +弃婴 +弃渔 +弃糟取精 +弃之不用 +弃置 +汽车 +汽车兵 +汽车厂 +汽车城 +汽车队 +汽车界 +汽车连 +汽车票 +汽车区 +汽车团 +汽车系 +汽车业 +汽车业界 +汽车展 +汽车站 +汽船 +汽锤 +汽灯 +汽笛 +汽笛声 +汽渡 +汽浮法 +汽缸 +汽化 +汽化器 +汽化热 +汽机 +汽技改 +汽酒 +汽联 +汽轮 +汽轮机 +汽配 +汽水 +汽艇 +汽修 +汽修厂 +汽修点 +汽修业 +汽油 +汽油弹 +汽油费 +汽油机 +汽油券 +汽油桶 +汽油味 +汽运 +汽蒸 +泣 +泣不成声 +泣鬼神 +泣诉 +泣血 +契 +契丹 +契合 +契合点 +契机 +契据 +契税 +契文 +契友 +契约 +契约型 +砌 +砌缝 +砌起 +砌石 +砌有 +砌置 +荠 +荠菜 +葺 +器 +器背 +器材 +器材厂 +器底 +器官 +器件 +器具 +器乐 +器乐曲 +器量 +器皿 +器物 +器物部 +器械 +器械科 +器械体操 +器形 +器重 +憩 +憩息 +掐 +掐算 +掐头去尾 +恰 +恰当 +恰到好处 +恰逢 +恰哈尔村 +恰好 +恰卡奥市 +恰穆拉 +恰穆拉镇 +恰帕雷 +恰帕斯 +恰帕斯州 +恰恰 +恰恰相反 +恰巧 +恰切 +恰如 +恰如其当 +恰如其分 +恰似 +恰州 +洽 +洽办 +洽购 +洽商 +洽谈 +洽谈会 +髂骨 +千 +千百万 +千变万化 +千层饼 +千层底 +千差万别 +千疮百孔 +千锤百炼 +千次率 +千代田区 +千刀万剐 +千岛湖 +千叮咛 +千吨级 +千恩万谢 +千儿八百 +千帆竞发 +千方百计 +千分比 +千分表 +千分尺 +千分点 +千分号 +千分制 +千佛山 +千夫 +千夫所指 +千伏 +千伏安 +千伏级 +千古 +千古不变 +千古不灭 +千古不朽 +千古风范 +千古功臣 +千古佳话 +千古绝唱 +千古绝响 +千古留芳 +千古奇文 +千古兴亡 +千古一人 +千古遗恨 +千古罪人 +千赫 +千红万紫 +千呼万唤 +千花竞秀 +千回百转 +千家峒 +千家街 +千家万户 +千娇百媚 +千斤 +千斤顶 +千金 +千金一诺 +千金一掷 +千军台 +千军万马 +千钧一发 +千钧之重 +千钧重负 +千卡 +千克 +千里冰封 +千里鹅毛 +千里光 +千里驹 +千里马 +千里迢迢 +千里香 +千里眼 +千里之堤 +千里之行 +千粒重 +千了百当 +千伶百俐 +千虑一得 +千虑一失 +千枚岩 +千米 +千磨百折 +千难万劫 +千难万苦 +千难万难 +千难万险 +千年虫 +千年问题 +千年一遇 +千篇一律 +千奇百怪 +千秋 +千秋大业 +千秋万代 +千秋万载 +千秋业 +千人一面 +千日红 +千山万壑 +千山万水 +千升 +千手佛 +千手观音 +千手堂 +千丝万缕 +千岁 +千岁爷 +千穗谷 +千条万条 +千头万绪 +千瓦 +千瓦时 +千瓦小时 +千万 +千禧 +千禧龙 +千辛万苦 +千言万语 +千岩万壑 +千叶 +千依百顺 +千载难逢 +千载一时 +千张 +千折百回 +千真万确 +千姿百态 +阡陌 +芊芊 +迁 +迁安 +迁安市 +迁出 +迁都 +迁坟还耕 +迁回 +迁建 +迁进 +迁就 +迁居 +迁离 +迁怒 +迁入 +迁入地 +迁善改过 +迁西县 +迁徙 +迁徙期 +迁延 +迁移 +迁移性 +钎 +钎料 +钎子 +牵 +牵肠挂肚 +牵扯 +牵掣 +牵动 +牵动力 +牵动型 +牵挂 +牵就 +牵累 +牵连 +牵牛 +牵牛星 +牵强 +牵强附会 +牵涉 +牵涉面 +牵头 +牵头者 +牵系 +牵线 +牵线搭桥 +牵衣顿足 +牵引 +牵引车 +牵引机 +牵引力 +牵引性 +牵制 +牵制力 +牵住 +铅 +铅白 +铅版 +铅笔 +铅笔盒 +铅笔画 +铅玻璃 +铅垂线 +铅丹 +铅刀一割 +铅粉 +铅封 +铅化物 +铅灰色 +铅块 +铅矿 +铅球 +铅山 +铅山县 +铅丝 +铅酸 +铅条 +铅铁 +铅锌 +铅印 +铅制 +铅中毒 +铅字 +铅字合金 +谦 +谦卑 +谦称 +谦辞 +谦恭 +谦和 +谦谦 +谦谦君子 +谦让 +谦受益 +谦虚 +谦虚谨慎 +谦逊 +愆 +签 +签呈 +签到 +签到簿 +签到日 +签到室 +签订 +签定 +签发 +签名 +签名簿 +签名册 +签名者 +签收 +签署 +签筒 +签约 +签约关 +签约国 +签约人 +签章 +签证 +签证处 +签证费 +签注 +签子 +签字 +签字笔 +签字国 +签字权 +签字人 +前 +前半年 +前半叶 +前辈 +前臂 +前边 +前泊林村 +前不久 +前部 +前舱 +前场 +前朝 +前车牌 +前车之覆 +前车之鉴 +前尘 +前程 +前程锦绣 +前程似锦 +前次 +前村 +前大灯 +前大营 +前导 +前灯 +前敌 +前点 +前定 +前堵后追 +前端 +前段 +前额 +前方 +前锋 +前锋线 +前夫 +前俯后仰 +前赴后继 +前功尽弃 +前郭县 +前后 +前后道 +前后排 +前后台 +前后文 +前呼后应 +前呼后拥 +前话 +前黄寨村 +前机 +前脚 +前街后巷 +前襟 +前进 +前进不懈 +前景 +前臼齿 +前科 +前款罪 +前来 +前廊 +前例 +前列 +前列腺 +前列腺癌 +前列腺病 +前列腺素 +前轮 +前马家村 +前茅 +前门 +前面 +前南 +前南峪村 +前脑 +前年 +前排 +前仆后继 +前妻 +前期 +前旗 +前前后后 +前秦 +前驱 +前去 +前人 +前人栽树 +前人种树 +前任 +前三合村 +前三门 +前邵 +前邵村 +前哨 +前哨战 +前身 +前世 +前事不忘 +前述 +前思后想 +前宋村 +前苏联队 +前所未见 +前所未闻 +前所未有 +前台 +前堂 +前提 +前体 +前天 +前厅 +前童村 +前头 +前途 +前途无量 +前腿 +前瓦村 +前湾 +前往 +前往者 +前围 +前委 +前卫 +前卫队 +前卫型 +前卫镇 +前文 +前无古人 +前夕 +前贤 +前嫌 +前线 +前巷队 +前项 +前些年 +前些时 +前行 +前行者 +前胸袋 +前言 +前沿 +前沿科学 +前沿性 +前仰后合 +前夜 +前一天 +前移 +前因后果 +前营村 +前元庄 +前缘 +前院 +前月 +前瞻 +前瞻性 +前站 +前兆 +前者 +前肢 +前指 +前置 +前置性 +前中期 +前周 +前柱 +前缀 +前奏 +前奏曲 +荨麻 +钤印 +虔诚 +虔敬 +虔州 +钱 +钱坂村 +钱板 +钱包 +钱币 +钱财 +钱串子 +钱袋 +钱家峪 +钱江 +钱款 +钱粮 +钱内助 +钱排 +钱排镇 +钱塘江 +钱旺村乡 +钱物 +钱箱 +钱学 +钱学森 +钱庄 +钳 +钳工 +钳口结舌 +钳蝎 +钳修 +钳制 +钳子 +乾 +乾道 +乾嘉 +乾坤 +乾坤袋 +乾隆 +乾乾 +掮客 +潜 +潜藏 +潜存 +潜堤 +潜伏 +潜伏地 +潜伏期 +潜海 +潜绩 +潜江 +潜江市 +潜江县 +潜力 +潜流 +潜留 +潜能 +潜能值 +潜潜 +潜热 +潜入 +潜山 +潜势 +潜水 +潜水表 +潜水艇 +潜水衣 +潜水员 +潜台词 +潜逃 +潜艇 +潜望镜 +潜心 +潜心斋 +潜心者 +潜修 +潜血 +潜研 +潜研堂 +潜移默化 +潜意识 +潜隐 +潜泳 +潜油 +潜游 +潜在 +潜值 +潜质 +潜滋暗长 +黔 +黔北 +黔东南州 +黔江 +黔江县 +黔剧 +黔驴技穷 +黔驴之技 +黔南 +黔南州 +黔西南 +黔西南州 +黔阳县 +浅 +浅白 +浅表 +浅薄 +浅部 +浅尝辄止 +浅成岩 +浅海 +浅红 +浅黄 +浅黄色 +浅见 +浅近 +浅井村 +浅蓝 +浅亮 +浅令 +浅陋 +浅露 +浅绿 +浅绿色 +浅浅的 +浅色 +浅水 +浅水藕 +浅水区 +浅说 +浅滩 +浅析 +浅显 +浅笑声 +浅一脚 +浅易 +浅吟低唱 +浅酌醉吟 +浅棕 +遣 +遣词用句 +遣词造句 +遣电驱雷 +遣返 +遣怀 +遣散 +遣散费 +遣使 +遣送 +谴 +谴责 +缱绻 +欠 +欠产 +欠费 +欠佳 +欠款 +欠款额 +欠款人 +欠缺 +欠缺型 +欠税 +欠税款 +欠条 +欠妥 +欠息 +欠有 +欠员 +欠债 +欠债还钱 +欠账 +欠资 +欠揍 +芡粉 +芡实 +倩 +倩影 +堑沟 +堑壕 +堑壕战 +嵌 +嵌刻 +嵌入 +嵌入式 +嵌镶 +歉 +歉疚 +歉年 +歉收 +歉意 +呛 +呛鼻 +羌 +羌族 +戕害 +枪 +枪案 +枪毙 +枪弹 +枪法 +枪帆长 +枪杆 +枪杆子 +枪管 +枪击 +枪尖 +枪决 +枪口 +枪林弹雨 +枪榴弹 +枪炮 +枪枪 +枪杀 +枪杀案 +枪声 +枪手 +枪术 +枪栓 +枪膛 +枪托 +枪响 +枪响靶落 +枪械 +枪眼 +枪战 +枪支 +枪子儿 +腔 +腔肠动物 +腔调 +腔骨 +腔模 +镪水 +强 +强暴 +强辩 +强词夺理 +强辞 +强大 +强盗 +强盗窝 +强的松 +强敌 +强点 +强调 +强度 +强渡 +强对流 +强风 +强攻 +强固 +强光 +强国 +强悍 +强夯 +强横 +强横霸道 +强化 +强化班 +强化剂 +强化食品 +强货币 +强击 +强击机 +强基固本 +强记 +强加 +强加于人 +强家 +强奸 +强奸犯 +强奸罪 +强碱 +强健 +强将 +强劲 +强局 +强军 +强力 +强烈 +强邻 +强令 +强龙型 +强买强卖 +强卖强买 +强农 +强弩之末 +强迫 +强迫式 +强迫症 +强强 +强强改造 +强强联合 +强求 +强区 +强取豪夺 +强权 +强权政治 +强人 +强人所难 +强忍 +强弱 +强身 +强身健魄 +强身健体 +强盛 +强势 +强手 +强手如林 +强酸 +强台风 +强威 +强县 +强项 +强心剂 +强行 +强行军 +强行性 +强压 +强押 +强颜欢笑 +强抑 +强音 +强硬 +强硬派 +强有力 +强占 +强者 +强震 +强震群 +强直 +强直性 +强制 +强制力 +强制性 +强壮 +强壮剂 +强子 +强作解人 +墙 +墙板 +墙报 +墙报栏 +墙壁 +墙垛 +墙缝 +墙根 +墙灰 +墙基 +墙角 +墙脚 +墙面 +墙皮 +墙上 +墙体 +墙头 +墙头草 +墙头诗 +墙围子 +墙垣 +墙纸 +蔷薇 +樯桅 +抢 +抢白 +抢吃 +抢答 +抢道 +抢点 +抢断 +抢断王 +抢夺 +抢攻 +抢购 +抢购一空 +抢光 +抢护 +抢建 +抢劫 +抢劫案 +抢劫犯 +抢劫罪 +抢镜头 +抢救 +抢救室 +抢救性 +抢救者 +抢救组 +抢掠 +抢跑 +抢枪 +抢收 +抢手 +抢手货 +抢滩 +抢跳 +抢先 +抢险 +抢险车 +抢险队 +抢行 +抢修 +抢修班 +抢修车 +抢修队 +抢修员 +抢眼 +抢运 +抢占 +抢者 +抢种 +抢注 +抢走 +羟基 +襁褓 +炝 +悄悄 +悄悄的 +悄悄话 +悄悄然 +悄然 +悄然无声 +悄声 +悄无声息 +跷 +跷跷板 +敲 +敲边鼓 +敲打 +敲定 +敲锭 +敲骨吸髓 +敲击 +敲锣打鼓 +敲门 +敲门声 +敲门砖 +敲敲 +敲敲打打 +敲山震虎 +敲响 +敲诈 +敲诈勒索 +敲钟人 +敲竹杠 +锹 +锹镐柄 +乔 +乔克西 +乔木 +乔其纱 +乔迁 +乔迁之喜 +乔然山 +乔绒 +乔治 +乔治城 +乔治敦 +乔治王岛 +乔治亚岛 +乔庄 +乔庄村 +乔装 +乔装打扮 +侨 +侨办 +侨胞 +侨报 +侨汇 +侨界 +侨居 +侨眷 +侨联 +侨领 +侨民 +侨情 +侨商 +侨社 +侨声 +侨团 +侨务 +侨乡 +侨校 +侨属 +侨资 +荞麦 +荞麦蜜 +荞麦皮 +荞麦窝 +荞面圪 +桥 +桥板 +桥党 +桥殿飞虹 +桥洞 +桥段 +桥墩 +桥儿沟 +桥函 +桥涵 +桥基 +桥孔 +桥栏 +桥栏杆 +桥梁 +桥梁厂 +桥梁处 +桥梁史 +桥面 +桥名 +桥牌 +桥牌赛 +桥山 +桥身 +桥隧 +桥台 +桥梯 +桥头 +桥头堡 +桥位 +桥西 +桥下 +桥型 +桥岩山 +桥址 +桥桩 +谯 +憔悴 +樵采 +樵夫 +樵姑 +樵者 +瞧 +瞧不起 +瞧得起 +瞧见 +瞧瞧 +巧 +巧辩 +巧布新阵 +巧夺天工 +巧儿 +巧妇 +巧干 +巧合 +巧计 +巧匠 +巧劲 +巧劲儿 +巧克力 +巧立名目 +巧妙 +巧取豪夺 +巧舌如簧 +巧事 +巧手 +巧思 +巧笑倩兮 +巧言令色 +巧言如簧 +巧遇 +巧智 +俏 +俏货 +俏立 +俏丽 +俏皮 +俏皮话 +俏销 +诮 +峭 +峭拔 +峭拔冷峻 +峭壁 +峭立 +峭丽 +峭岐镇 +峭然 +峭岩 +窍 +窍门 +翘 +翘板 +翘鼻子 +翘角 +翘曲 +翘舌音 +翘首 +翘首以待 +翘尾 +翘尾巴 +翘足引领 +撬 +撬棒 +撬杠 +撬棍 +鞘翅目 +切 +切变 +切齿痛恨 +切除 +切磋 +切磋会 +切磋琢磨 +切当 +切点 +切断 +切尔米斯 +切尔西队 +切分 +切肤之感 +切肤之痛 +切割 +切割机 +切割器 +切骨之仇 +切合 +切花 +切换 +切汇 +切记 +切忌 +切近 +切开 +切口 +切块 +切面 +切莫 +切纳洛市 +切盼 +切片 +切乔维奇 +切切 +切切实实 +切入 +切入点 +切入口 +切身 +切身利益 +切实 +切实可行 +切实用 +切实有力 +切手机 +切碎机 +切题 +切线 +切削 +切诊 +切中 +切中肯綮 +茄干 +茄果类 +茄克衣 +茄鲞 +茄子 +茄子干 +且 +且不论 +且不说 +且慢 +且慢派 +且末 +且末城 +且末县 +怯 +怯场 +怯懦 +怯弱 +怯生生 +怯声怯气 +怯头怯脑 +怯阵 +窃 +窃案 +窃电线 +窃电者 +窃钩窃国 +窃密 +窃窃私语 +窃窃细语 +窃取 +窃听 +窃听器 +窃玉偷香 +窃贼 +窃走 +惬意 +锲而不舍 +亲 +亲爱 +亲爱的 +亲本 +亲笔 +亲笔信 +亲兵 +亲代 +亲儿 +亲耳 +亲骨肉 +亲合力 +亲合性 +亲和 +亲和力 +亲家 +亲家公 +亲家母 +亲见 +亲见亲闻 +亲姐妹 +亲近 +亲近感 +亲眷 +亲口 +亲历 +亲历性 +亲历者 +亲临 +亲临感 +亲临其境 +亲聆 +亲率 +亲密 +亲密无间 +亲昵 +亲娘 +亲朋 +亲朋好友 +亲戚 +亲戚家 +亲切 +亲切感 +亲亲 +亲亲的 +亲亲切切 +亲亲热热 +亲情 +亲热 +亲人 +亲日派 +亲如弟兄 +亲如手足 +亲如兄弟 +亲如一家 +亲上加亲 +亲身 +亲生 +亲事 +亲手 +亲疏 +亲疏好恶 +亲水性 +亲题 +亲痛仇快 +亲王 +亲闻 +亲吻 +亲信 +亲兄弟 +亲眼 +亲眼目睹 +亲英派 +亲友 +亲缘 +亲者 +亲征 +亲政 +亲侄 +亲炙 +亲属 +亲子 +亲自 +亲族 +侵 +侵夺 +侵犯 +侵害 +侵华 +侵略 +侵略国 +侵略军 +侵略性 +侵略者 +侵权 +侵权案 +侵权性 +侵权者 +侵染 +侵扰 +侵人 +侵入 +侵蚀 +侵蚀量 +侵食 +侵吞 +侵侮 +侵袭 +侵越 +侵占 +侵占者 +钦 +钦差 +钦差大臣 +钦敬 +钦慕 +钦南区 +钦佩 +钦羡 +钦州 +钦州港 +钦州南路 +钦州市 +芹 +芹菜 +秦 +秦巴 +秦巴山 +秦朝 +秦川 +秦川牛 +秦代 +秦堤 +秦地 +秦都 +秦都区 +秦坊村 +秦风 +秦风槐韵 +秦港 +秦宫 +秦国 +秦汉 +秦汉唐 +秦淮 +秦淮河 +秦皇 +秦皇岛 +秦皇岛港 +秦皇岛市 +秦家沟 +秦镜高悬 +秦栏 +秦岭 +秦陵 +秦陵编 +秦楼楚馆 +秦南镇 +秦齐郡 +秦腔 +秦腔戏 +秦山 +秦时 +秦始皇帝 +秦始皇陵 +秦树乡 +秦王 +秦王峡 +秦俑 +秦俑头 +秦俑学 +秦中 +秦州 +秦篆 +琴 +琴房 +琴弓 +琴技 +琴家 +琴键 +琴棋书画 +琴山村 +琴声 +琴师 +琴书 +琴弦 +琴音 +琴韵 +禽 +禽产品 +禽蛋 +禽类 +禽流感 +禽鸟 +禽肉 +禽兽 +禽畜 +禽畜产品 +禽鸭 +禽业 +勤 +勤奋 +勤工俭学 +勤工助学 +勤俭 +勤俭持家 +勤俭建国 +勤俭节约 +勤俭星 +勤谨 +勤恳 +勤苦 +勤快 +勤劳 +勤廉 +勤勉 +勤朴 +勤勤恳恳 +勤务 +勤务兵 +勤务员 +勤学苦练 +勤业 +勤于 +勤杂工 +勤杂人员 +勤杂员 +勤者 +勤政 +勤政殿 +勤政廉洁 +勤政廉政 +勤政为民 +勤政者 +噙 +擒 +擒敌 +擒获 +擒拿 +寝 +寝不安席 +寝床 +寝宫 +寝具 +寝食 +寝食不安 +寝食难安 +寝室 +沁 +沁出 +沁人肺腑 +沁人心脾 +沁入 +沁入心扉 +沁水 +沁县 +沁阳市 +沁园春 +沁源 +沁源县 +揿 +青 +青白 +青苞 +青菜 +青菜萝卜 +青菜头 +青沧 +青藏 +青草 +青草地 +青草娃 +青城 +青城镇 +青出于蓝 +青春 +青春年少 +青春片 +青春期 +青春颂 +青春型 +青瓷 +青葱 +青葱可人 +青翠 +青翠欲滴 +青大 +青岛 +青岛队 +青岛港 +青岛籍 +青岛路 +青岛市 +青灯 +青灯枝笔 +青豆 +青堆 +青肥 +青风寨 +青风寨乡 +青峰 +青冈林 +青冈树 +青冈县 +青工 +青光眼 +青果 +青果巷 +青果协 +青海 +青海湖 +青海省 +青蒿 +青红皂白 +青花 +青花瓷 +青花盘 +青黄不接 +青灰 +青灰色 +青基会 +青江 +青椒 +青筋 +青救 +青稞 +青稞酒 +青稞麦 +青空 +青口镇 +青枯病 +青睐 +青睐有加 +青岚 +青莲色 +青联 +青岭 +青龙 +青龙刀 +青龙山 +青龙乡 +青龙峪村 +青楼 +青绿 +青峦 +青麻 +青马 +青梅 +青梅市 +青梅竹马 +青霉素 +青霉素G +青面獠牙 +青苗 +青苗费 +青民盟 +青南 +青嫩 +青尼罗河 +青泥洼桥 +青年 +青年报 +青年队 +青年宫 +青年湖 +青年会 +青年节 +青年科 +青年人 +青年团 +青年系 +青年站 +青年装 +青鸟 +青农部 +青啤 +青浦 +青浦县 +青青 +青虬 +青色 +青森 +青森县 +青纱帐 +青鲨 +青山 +青山堡村 +青山常在 +青山冲 +青山绿水 +青山区 +青山乡 +青山秀水 +青衫 +青少年 +青少年宫 +青蛇 +青狮潭 +青石 +青石板 +青石桥 +青石狮子 +青史 +青史名垂 +青丝 +青丝帕 +青饲料 +青松 +青蒜 +青苔 +青苔村 +青滩 +青藤 +青藤花杯 +青天 +青天白日 +青天阁 +青田 +青铁 +青铜 +青铜器 +青铜峡路 +青铜峡市 +青头 +青蛙 +青瓦 +青瓦台 +青委会 +青虾 +青杏 +青烟 +青岩 +青阳 +青阳县 +青杨 +青伊湖 +青衣 +青艺 +青幽幽 +青鱼 +青玉 +青云 +青云桥 +青云堂 +青云直上 +青运史 +青枣 +青中年 +青冢 +青州 +青州市 +青洲 +青竹 +青贮 +青贮法 +青壮年 +青壮年人 +氢 +氢弹 +氢氟酸 +氢化油 +氢能 +氢镍 +氢气 +氢氰酸 +氢酸 +氢氧吹管 +氢氧根 +氢氧化铵 +氢氧化钙 +氢氧化钠 +氢氧化镍 +氢氧基 +氢原子 +轻 +轻便 +轻兵 +轻薄 +轻车 +轻车简从 +轻车熟路 +轻吃重玩 +轻荡 +轻敌 +轻度 +轻而易举 +轻纺 +轻纺化 +轻纺业 +轻风 +轻浮 +轻歌剧院 +轻歌曼舞 +轻工 +轻工部 +轻工局 +轻工厅 +轻工业 +轻工业部 +轻工业局 +轻工业品 +轻轨 +轻活 +轻机关枪 +轻机枪 +轻贱 +轻轿 +轻捷 +轻金属 +轻举妄动 +轻口薄舌 +轻快 +轻狂 +轻量级 +轻灵 +轻率 +轻曼 +轻描淡写 +轻蔑 +轻诺寡信 +轻判 +轻飘 +轻飘飘 +轻骑 +轻骑兵 +轻骑队 +轻汽 +轻巧 +轻轻 +轻轻松松 +轻裘肥马 +轻取 +轻柔 +轻伤 +轻伤者 +轻生 +轻声 +轻声细语 +轻世傲物 +轻视 +轻手轻脚 +轻水 +轻松 +轻松感 +轻体房 +轻佻 +轻微 +轻武器 +轻喜剧 +轻喜剧片 +轻闲 +轻信 +轻型 +轻型车 +轻型化 +轻言细语 +轻易 +轻音 +轻音乐 +轻印刷 +轻盈 +轻油 +轻于鸿毛 +轻元素 +轻债国 +轻者 +轻重 +轻重倒置 +轻重工业 +轻重缓急 +轻舟 +轻装 +轻装简从 +轻装简行 +轻嘴薄舌 +轻罪 +倾 +倾巢出动 +倾城倾国 +倾倒 +倾倒区 +倾覆 +倾国倾城 +倾家荡产 +倾角 +倾尽 +倾慕 +倾囊 +倾盆 +倾盆大雨 +倾视 +倾诉 +倾听 +倾吐 +倾羡 +倾箱倒箧 +倾向 +倾向性 +倾销 +倾销地 +倾斜 +倾斜度 +倾斜角 +倾斜性 +倾斜仪 +倾泻 +倾心 +倾心尽力 +倾心吐胆 +倾轧 +倾注 +卿 +卿卿我我 +清 +清白 +清波 +清波微澜 +清财 +清仓 +清册 +清查 +清茶 +清产 +清产核资 +清偿 +清偿力 +清唱剧 +清朝 +清澈 +清澈见底 +清晨 +清澄 +清初 +清除 +清除率 +清楚 +清川 +清川江 +清创 +清纯 +清醇 +清词丽句 +清脆 +清代 +清单 +清淡 +清道夫 +清点 +清调 +清炖 +清房办 +清肺利胆 +清费 +清费治乱 +清分 +清芬 +清丰 +清丰县 +清风 +清风店 +清风两袖 +清风明月 +清福 +清高 +清稿 +清供 +清宫 +清官 +清规 +清规戒律 +清锅冷灶 +清河 +清河村 +清河区 +清河县 +清湖 +清华 +清华大学 +清华园 +清话 +清话办 +清还 +清辉 +清江 +清江村 +清江浦 +清江水 +清剿 +清缴 +清教徒 +清洁 +清洁槽 +清洁度 +清洁费 +清洁工 +清洁剂 +清洁率 +清洁煤 +清洁器 +清洁日 +清洁员 +清津 +清净 +清净无为 +清静 +清静庵 +清军 +清君侧 +清苦 +清莱 +清莱府 +清朗 +清冷 +清理 +清理工 +清丽 +清廉 +清廉者 +清凉 +清凉剂 +清凉山 +清凉寺 +清凉油 +清亮 +清冽 +清洌 +清洌洌 +清粼粼 +清流 +清迈 +清迈府 +清蒙 +清名 +清明 +清明菜 +清明坊 +清明节 +清末 +清嫩 +清盘 +清贫 +清朴 +清凄寂冷 +清漆 +清欠 +清清 +清清白白 +清清楚楚 +清清的 +清清亮亮 +清清爽爽 +清秋 +清癯 +清泉 +清泉铺山 +清热解毒 +清热解暑 +清热利肺 +清热泻火 +清人 +清嗓润肺 +清扫 +清扫工 +清扫率 +清山秀水 +清收 +清瘦 +清爽 +清爽爽 +清爽型 +清水 +清水池 +清水河 +清水江 +清水沙 +清水笋 +清水县 +清水衙门 +清算 +清算组 +清泰 +清谈误国 +清汤 +清汤寡水 +清腾 +清廷 +清退 +清拖 +清污剂 +清晰 +清晰度 +清晰可见 +清溪 +清洗 +清洗费 +清洗业 +清暇 +清闲 +清闲自在 +清县 +清香 +清香味 +清响 +清心 +清心涤虑 +清心寡欲 +清新 +清馨 +清醒 +清醒剂 +清秀 +清虚观 +清徐 +清徐县 +清雅 +清妍 +清扬 +清阳 +清样 +清一色 +清议 +清音 +清幽 +清幽谷 +清淤 +清源 +清源西里 +清源乡 +清远 +清远市 +清越 +清运 +清运车 +清运量 +清运率 +清韵 +清早 +清账 +清障车 +清真 +清真餐 +清真东寺 +清真教 +清真寺 +清正 +清正廉洁 +清政府 +蜻蜓 +蜻蜓点水 +鲭江 +情 +情爱 +情报 +情报部 +情报界 +情报局 +情报社 +情报署 +情报所 +情报网 +情报系 +情报学 +情报员 +情报源 +情报站 +情变 +情不自禁 +情操 +情潮 +情仇 +情敌 +情调 +情窦初开 +情笃意深 +情分 +情夫 +情妇 +情感 +情感史 +情哥 +情哥哥 +情歌 +情话 +情怀 +情怀厅 +情急 +情急之下 +情节 +情节化 +情节链 +情节线 +情节性 +情结 +情景 +情景交融 +情景剧 +情境 +情恳意切 +情况 +情况表 +情理 +情理之中 +情侣 +情面 +情牵魂系 +情情 +情趣 +情人 +情人楼 +情殇 +情商 +情深意长 +情深意绵 +情深意浓 +情诗 +情史 +情事 +情势 +情书 +情丝 +情思 +情愫 +情随事迁 +情态 +情同手足 +情投意合 +情网 +情味 +情文并茂 +情形 +情绪 +情绪化 +情绪链 +情义 +情谊 +情意 +情由 +情由事显 +情有独钟 +情有可原 +情欲 +情缘 +情愿 +情韵 +情真词切 +情真意长 +情真意切 +情真意挚 +情之切切 +情志 +情质 +情致 +情状 +晴 +晴到多云 +晴到少云 +晴好 +晴和 +晴间多云 +晴空 +晴空万里 +晴朗 +晴纶 +晴日 +晴天 +晴天霹雳 +晴雨表 +晴雨计 +晴雨伞 +晴转多云 +氰化 +氰化钾 +氰化钠 +氰化物 +擎 +擎接 +擎旗人 +擎天 +擎天柱 +苘 +苘山镇 +顷 +顷刻 +顷刻间 +请 +请便 +请电 +请方 +请功 +请假 +请柬 +请教 +请君入瓮 +请客 +请来 +请求 +请求权 +请示 +请帖 +请问 +请勿 +请缨 +请愿 +请愿信 +请战 +请战书 +请罪 +请罪信 +庆 +庆安 +庆安县 +庆春 +庆大霉素 +庆典 +庆典型 +庆典性 +庆功 +庆功会 +庆功酒 +庆功曲 +庆功宴 +庆贺 +庆贺寺乡 +庆回归 +庆历 +庆岭 +庆龄码头 +庆太村 +庆幸 +庆阳 +庆应 +庆云 +庆云县 +庆州 +庆祝 +庆祝会 +庆祝性 +磬 +罄 +罄竹难书 +跫然 +跫音 +邛海 +邛崃 +邛崃市 +穷 +穷兵黩武 +穷当益坚 +穷抖阔 +穷而后工 +穷富 +穷根 +穷根究底 +穷骨头 +穷光蛋 +穷鬼 +穷国 +穷汉 +穷极无聊 +穷家富路 +穷竭心计 +穷尽 +穷经皓首 +穷寇 +穷苦 +穷困 +穷帽 +穷年累月 +穷期 +穷亲 +穷人 +穷山 +穷山恶山 +穷山恶水 +穷山僻壤 +穷奢极侈 +穷酸 +穷酸气 +穷途 +穷途潦倒 +穷途末路 +穷乡僻壤 +穷形尽相 +穷凶极恶 +穷原竟委 +穷源溯流 +穷则思变 +穷追 +穷追不舍 +穷追猛打 +穹隆式 +穹庐 +穹幕 +穹丘 +穹形 +琼 +琼岛 +琼海 +琼海市 +琼浆 +琼浆玉露 +琼琚 +琼剧 +琼剧院 +琼林 +琼楼玉宇 +琼山 +琼山市 +琼斯伯勒 +琼崖 +琼枝 +琼枝玉叶 +琼脂 +琼州 +琼子 +丘 +丘布特河 +丘布特省 +丘东 +丘岗 +丘岗地 +丘陵 +丘陵岗 +丘陵区 +丘墓 +丘脑 +丘乾村 +丘鹬 +丘疹 +邱北 +邱北县 +邱吉尔 +邱县 +秋 +秋波 +秋播 +秋初 +秋地 +秋冬季 +秋冬种 +秋分 +秋分点 +秋风 +秋风过耳 +秋高气爽 +秋耕 +秋海棠 +秋旱 +秋毫 +秋毫无犯 +秋毫之末 +秋后 +秋后算帐 +秋后算账 +秋吉台 +秋季 +秋景 +秋菊 +秋口 +秋老虎 +秋荔亭 +秋凉 +秋粮 +秋令 +秋末 +秋千 +秋日 +秋色 +秋收 +秋收起义 +秋水 +秋水长天 +秋天 +秋田县 +秋阳 +秋野 +秋叶 +秋叶原 +秋夜 +秋意 +秋雨 +秋雨庵 +秋月当空 +秋韵 +秋征 +秋种 +秋庄稼 +蚯蚓 +囚 +囚车 +囚犯 +囚歌 +囚禁 +囚款 +囚牢 +囚粮 +囚笼 +囚入 +囚室 +囚首垢面 +囚徒 +囚衣 +求 +求爱 +求本溯源 +求大同 +求得 +求法 +求富若渴 +求富者 +求告 +求购 +求购者 +求官者 +求和 +求婚 +求婚者 +求见 +求教 +求解 +求进 +求救 +求救信 +求谋问计 +求偶 +求亲告友 +求情 +求求 +求全 +求全责备 +求饶 +求人 +求生 +求生欲 +求胜心切 +求实 +求售 +求索 +求索集 +求田问舍 +求同 +求同存异 +求同克异 +求同求异 +求仙记 +求贤 +求贤若渴 +求新 +求学 +求学者 +求洋 +求药者 +求业 +求医 +求医问药 +求医者 +求异 +求雨 +求援 +求援信 +求援者 +求者 +求真 +求真务实 +求诊 +求证 +求之不得 +求知 +求知若渴 +求知欲 +求职 +求职人 +求职者 +求治 +求质 +求种者 +求助 +求助人 +求助信 +虬劲 +虬茎 +虬曲 +虬曲挺秀 +虬枝 +泅 +泅渡 +酋 +酋长 +酋长国 +球 +球部 +球场 +球虫药 +球胆 +球蛋白 +球道 +球队 +球儿 +球风 +球感 +球馆 +球罐 +球果 +球花 +球技 +球结点 +球茎 +球茎甘蓝 +球裤 +球类 +球类室 +球粒 +球龄 +球路 +球门 +球门区 +球迷 +球面 +球面镜 +球磨机 +球墨铸铁 +球拍 +球拍子 +球票 +球情 +球赛 +球衫 +球市 +球手 +球速 +球台 +球坛 +球体 +球王 +球网 +球鞋 +球心 +球星 +球形 +球衣 +球艺 +球瘾 +球员 +球轴承 +球状 +巯 +遒劲 +遒壮 +裘皮 +区 +区别 +区别词 +区别点 +区长 +区带 +区党委 +区段 +区分 +区分符 +区分值 +区公所 +区划 +区划办 +区划图 +区级 +区际 +区间 +区间车 +区界 +区块 +区里 +区民 +区内 +区内外 +区旗 +区情 +区庆 +区区 +区外 +区委 +区位 +区县 +区议会 +区域 +区域化 +区域网 +区域性 +区域游 +区政府 +区直 +区属 +曲 +曲阿 +曲别针 +曲柄 +曲池 +曲尺 +曲处 +曲辞 +曲调 +曲度 +曲阜 +曲阜市 +曲港勾连 +曲高和寡 +曲高和众 +曲沟乡 +曲棍球 +曲棍球队 +曲江 +曲江县 +曲解 +曲尽其妙 +曲径 +曲径通幽 +曲靖 +曲靖市 +曲酒 +曲剧 +曲里拐弯 +曲梁 +曲率 +曲麻莱县 +曲面 +曲目 +曲牌 +曲谱 +曲曲弯弯 +曲曲折折 +曲桑寺 +曲蟮 +曲射炮 +曲式 +曲水 +曲水流觞 +曲水县 +曲坛 +曲塘镇 +曲体 +曲突徙薪 +曲沃 +曲沃县 +曲线 +曲线美 +曲线图 +曲线形 +曲项 +曲阳 +曲阳县 +曲艺 +曲艺队 +曲艺家 +曲艺节 +曲艺团 +曲意逢迎 +曲意奉承 +曲折 +曲折性 +曲直 +曲终 +曲终人散 +曲终奏雅 +曲种 +曲周 +曲周县 +曲轴 +曲轴箱 +曲子 +曲作者 +诎 +驱 +驱车 +驱虫剂 +驱虫药 +驱除 +驱动 +驱动力 +驱动器 +驱动桥 +驱风油 +驱赶 +驱寒 +驱护舰 +驱驾 +驱鸟 +驱遣 +驱散 +驱使 +驱邪 +驱邪灭鬼 +驱逐 +驱逐机 +驱逐舰 +驱逐舰长 +驱逐令 +驱走 +屈 +屈才 +屈成 +屈从 +屈打成招 +屈服 +屈光度 +屈就 +屈居 +屈曲 +屈曲位 +屈辱 +屈辱史 +屈死 +屈吴山 +屈膝 +屈原 +屈原祠 +屈原村 +屈原滩 +屈原镇 +屈折语 +屈指 +屈指可数 +屈志 +屈子祠 +屈尊纡贵 +祛 +祛病 +祛病除灾 +祛除 +祛风 +祛暑 +祛痰活血 +祛痰剂 +蛆虫 +蛆枣儿 +躯 +躯干 +躯壳 +躯体 +蛐蛐 +蛐蛐儿 +趋 +趋长避短 +趋动 +趋附 +趋光性 +趋利避害 +趋利性 +趋名舍实 +趋势 +趋势性 +趋同 +趋同化 +趋向 +趋向性 +趋炎附势 +趋于 +趋之若鹜 +黢 +渠 +渠道 +渠江 +渠网 +渠系 +渠系化 +渠县 +蘧 +衢粮 +衢县 +衢州 +衢州市 +衢州站 +取 +取保 +取报 +取材 +取长补短 +取出 +取存款 +取代 +取道 +取得 +取缔 +取而代之 +取法 +取法乎上 +取法乎中 +取给 +取回 +取经 +取精用弘 +取景 +取景点 +取静集 +取决 +取决于 +取款 +取款机 +取乐 +取码 +取名 +取暖 +取暖费 +取暖器 +取暖油 +取齐 +取巧 +取舍 +取胜 +取食 +取食机 +取水 +取水口 +取土 +取息 +取向 +取消 +取笑 +取信 +取信于民 +取样 +取用 +取悦 +取阅 +取证 +取之不尽 +娶 +娶亲 +龋齿 +去 +去除 +去处 +去春 +去粗取精 +去掉 +去冬 +去冬今春 +去留 +去路 +去年 +去年初 +去年底 +去年度 +去年末 +去秋 +去声 +去世 +去暑 +去岁 +去往 +去伪存真 +去污粉 +去污剂 +去污力 +去夏 +去向 +去者 +去职 +阒寂无声 +觑 +趣 +趣事 +趣味 +趣味性 +趣闻 +圈 +圈层 +圈点 +圈定 +圈儿 +圈将 +圈梁 +圈圈 +圈速 +圈套 +圈形 +圈养 +圈椅 +圈阅 +圈子 +全 +全班 +全备 +全部 +全才 +全彩印 +全长 +全厂 +全场 +全称 +全城 +全程 +全处 +全传 +全村 +全村人 +全党 +全等形 +全都 +全段 +全队 +全额 +全额票 +全反射 +全方位 +全方向 +全封闭 +全封闭式 +全福 +全副 +全港 +全稿 +全攻全守 +全关 +全馆 +全国 +全国性 +全国性奖 +全过程 +全会 +全集 +全集观 +全家 +全家福 +全家人 +全价 +全歼 +全景 +全景式 +全境 +全局 +全局性 +全剧 +全军 +全军覆没 +全军覆灭 +全军性 +全矿 +全盔 +全劳动力 +全力 +全力以赴 +全力争冠 +全立交 +全连 +全楼 +全路 +全罗南道 +全麦草浆 +全貌 +全美 +全盟 +全面 +全面性 +全民 +全民公决 +全民性 +全民族 +全名 +全能 +全能化 +全能型 +全能性 +全能运动 +全年 +全年度 +全年候 +全盘 +全盘皆活 +全盘皆输 +全片 +全篇 +全票 +全勤 +全球 +全球化 +全球化史 +全球通 +全球星 +全球性 +全区 +全区性 +全权 +全权代表 +全然 +全人类 +全日 +全日制 +全色片 +全社 +全身 +全身像 +全身心 +全身性 +全神贯注 +全胜 +全省 +全省性 +全盛 +全尸 +全诗 +全食 +全始全终 +全世界 +全市 +全市性 +全书 +全数 +全速 +全所 +全唐诗 +全堂镇 +全套 +全体 +全天 +全天候 +全天然 +全团 +全托 +全托制 +全网 +全委 +全委会 +全文 +全文型 +全无氟 +全息 +全息照相 +全席 +全县 +全线 +全乡 +全校 +全心全意 +全新 +全兴队 +全行 +全训率 +全羊 +全译本 +全音 +全优 +全员 +全员性 +全园 +全院 +全院性 +全运会 +全寨 +全站 +全镇 +全知全能 +全织物 +全脂 +全州 +全州县 +全属 +全资 +全自动 +全总 +权 +权变 +权柄 +权臣 +权充 +权当 +权贵 +权衡 +权奸 +权力 +权力电 +权力关 +权力观 +权力型 +权利 +权利人 +权门 +权谋 +权能 +权且 +权势 +权势电 +权术 +权台 +权威 +权威性 +权位 +权限 +权宜 +权宜之计 +权益 +权益部 +权益日 +权欲狂 +权欲熏心 +权责 +权杖 +权重 +权属 +诠释 +诠释者 +泉 +泉城 +泉池 +泉沟镇 +泉林 +泉声 +泉水 +泉塘村 +泉眼 +泉勇 +泉勇街 +泉涌 +泉源 +泉州 +泉州籍 +泉州市 +拳 +拳棒 +拳打脚踢 +拳道 +拳会 +拳击 +拳击赛 +拳击手 +拳脚 +拳联 +拳谱 +拳拳 +拳拳情意 +拳拳之忱 +拳拳之心 +拳师 +拳手 +拳术 +拳台 +拳坛 +拳套 +拳头 +拳头产品 +拳王 +拳种 +痊愈 +蜷伏 +蜷曲 +蜷缩 +醛 +颧骨 +犬 +犬齿 +犬吠 +犬吠里 +犬科 +犬马 +犬马之劳 +犬儒主义 +犬牙 +犬牙交错 +犬子 +劝 +劝导 +劝告 +劝和 +劝架 +劝降 +劝解 +劝戒 +劝诫 +劝酒 +劝留 +劝勉 +劝募 +劝劝 +劝说 +劝退 +劝慰 +劝学 +劝学篇 +劝言 +劝业 +劝业场 +劝诱 +劝止 +劝阻 +券 +券别 +券面 +券桥乡 +券商 +券种 +炔雌醚 +炔诺酮 +缺 +缺残 +缺吃少穿 +缺档 +缺德 +缺德事 +缺点 +缺额 +缺乏 +缺乏症 +缺房户 +缺憾 +缺货 +缺斤短两 +缺斤少两 +缺课 +缺口 +缺口处 +缺劳户 +缺量 +缺漏 +缺门 +缺欠 +缺勤 +缺少 +缺失 +缺水 +缺水量 +缺水区 +缺损 +缺头 +缺位 +缺席 +缺陷 +缺陷率 +缺心少肺 +缺心眼儿 +缺血 +缺血性 +缺氧 +缺一不可 +缺衣少食 +缺医少药 +缺员 +缺阵 +缺株 +缺字 +瘸 +瘸腿 +瘸子 +却 +却步 +却说 +却之不恭 +悫 +雀 +雀斑 +雀巢咖啡 +雀麦 +雀形目 +雀鹰 +雀跃 +确 +确保 +确定 +确定无疑 +确定性 +确定者 +确非 +确乎 +确乎不拔 +确立 +确切 +确权 +确确实实 +确认 +确认函 +确山 +确实 +确信 +确凿 +确诊 +确证 +阕 +阙 +阙如 +阙文者 +鹊 +鹊巢鸠占 +鹊起 +鹊桥 +鹊桥相会 +鹊鹞 +逡巡 +裙 +裙带菜 +裙带风 +裙带关系 +裙裾 +裙裤 +裙褶 +裙装 +裙子 +群 +群策群力 +群臣 +群岛 +群雕 +群发 +群芳 +群芳争艳 +群防群治 +群峰 +群工 +群工部 +群虎 +群婚 +群集 +群居 +群聚 +群力 +群龙无首 +群落 +群氓 +群魔乱舞 +群鸟 +群起 +群轻折轴 +群情 +群情激奋 +群群 +群儒 +群山 +群山起伏 +群山万壑 +群蛇 +群死群伤 +群体 +群体部 +群体处 +群体性 +群体组 +群团 +群威群胆 +群文 +群舞 +群系 +群贤 +群贤毕集 +群贤毕至 +群像 +群星 +群星璀璨 +群星荟萃 +群雄 +群雄逐鹿 +群言 +群言堂 +群燕 +群蚁附膻 +群艺馆 +群英 +群英会 +群英荟萃 +群英谱 +群英图 +群英争雄 +群众 +群众关系 +群众观 +群众化 +群众性 +群众运动 +群众组织 +然 +然而 +然后 +然则 +髯 +燃 +燃爆 +燃点 +燃动局 +燃放 +燃放点 +燃耗 +燃化部 +燃化局 +燃机 +燃具 +燃亮 +燃料 +燃料部 +燃料费 +燃料箱 +燃料油 +燃眉之急 +燃煤 +燃起 +燃气 +燃气罐 +燃气化 +燃气具 +燃气轮机 +燃气体 +燃气灶 +燃器具 +燃烧 +燃烧弹 +燃烧点 +燃烧费 +燃烧器 +燃烧室 +燃烧物 +燃用 +燃油 +燃油泵 +燃油费 +燃油箱 +燃运部 +冉冉 +染 +染病 +染动 +染毒 +染发 +染发剂 +染坊 +染房 +染缸 +染杠 +染棍 +染化 +染化厂 +染化料 +染料 +染色 +染色体 +染桶 +染汁 +染指 +瓤 +瓤子 +嚷 +嚷嚷 +壤 +壤土 +攘 +攘攘 +让 +让步 +让出 +让道 +让度 +让渡 +让给 +让胡路区 +让开 +让利 +让利酬宾 +让利者 +让路 +让位 +让贤 +让行 +让座 +饶 +饶命 +饶平 +饶平县 +饶桥镇 +饶舌 +饶恕 +饶阳 +饶阳县 +饶有 +饶有风趣 +饶有兴趣 +饶有兴味 +饶有兴致 +桡动脉 +桡骨 +扰 +扰动 +扰流板 +扰乱 +扰民 +扰攘 +绕 +绕脖子 +绕道 +绕过 +绕开 +绕口令 +绕梁 +绕圈子 +绕弯子 +绕膝 +绕行 +绕阳河 +绕远儿 +绕组 +绕嘴 +惹 +惹不起 +惹火 +惹火烧身 +惹祸 +惹麻烦 +惹恼 +惹怒 +惹人注目 +惹事 +惹事生非 +惹是生非 +热 +热爱 +热泵 +热泵式 +热泵型 +热病 +热茶 +热肠 +热潮 +热炒 +热忱 +热诚 +热处理 +热带 +热带鱼 +热带雨林 +热地 +热点 +热电 +热电厂 +热电偶 +热电效应 +热电站 +热锭冷砸 +热度 +热镀锌 +热队 +热风 +热风炉 +热敷 +热感 +热工 +热功当量 +热狗 +热固性 +热滚滚 +热和 +热河 +热核反应 +热核武器 +热哄哄 +热乎 +热乎乎 +热呼 +热呼呼 +热火 +热火朝天 +热机 +热键 +热交换 +热炕 +热柯党乡 +热科院 +热辣辣 +热浪 +热泪 +热泪夺眶 +热泪盈眶 +热力 +热力学 +热连轧 +热恋 +热量 +热烈 +热流 +热流量 +热络 +热毛子马 +热门 +热门儿 +热敏电阻 +热敏性 +热那亚 +热闹 +热闹非凡 +热能 +热农大 +热气 +热气球 +热气腾腾 +热切 +热情 +热情劲 +热情洋溢 +热区 +热泉 +热热闹闹 +热热身 +热熔 +热身 +热身赛 +热市镇 +热水 +热水袋 +热水瓶 +热水器 +热水型 +热塑性 +热汤 +热汤面 +热腾腾 +热天 +热土 +热望 +热问题 +热线 +热线卡 +热销 +热销书 +热效率 +热效应 +热心 +热心肠 +热心人 +热心者 +热学 +热血 +热血沸腾 +热压 +热饮 +热源 +热轧 +热轧厂 +热战 +热涨 +热胀 +热胀冷缩 +热障 +热者 +热振寺 +热蒸现卖 +热症 +热值 +热中 +热衷 +热衷于 +热转印 +热转印机 +热作所 +人 +人保 +人本 +人本精神 +人才 +人才辈出 +人才城 +人才出众 +人才观 +人才济济 +人才库 +人才篇 +人才外流 +人材 +人财物 +人参 +人潮 +人称 +人次 +人丛 +人大 +人大代表 +人代会 +人道 +人道主义 +人地生疏 +人丁 +人定胜天 +人多势众 +人多嘴杂 +人儿 +人犯 +人贩子 +人防 +人防办 +人非草木 +人夫 +人浮于事 +人高马大 +人革党 +人格 +人格化 +人格权 +人工 +人工岛 +人工费 +人工呼吸 +人工湖 +人工湖区 +人工降雨 +人工林 +人工流产 +人工免疫 +人工气腹 +人工气胸 +人工授精 +人工智能 +人公里 +人骨 +人海 +人海战 +人和 +人和乡 +人化 +人欢马叫 +人寰 +人祸 +人机 +人机会话 +人迹 +人迹罕至 +人际 +人际关系 +人际网 +人家 +人间 +人间地狱 +人间相 +人教 +人杰 +人杰地灵 +人界 +人尽其才 +人尽其材 +人居 +人均 +人均收入 +人孔 +人口 +人口报 +人口论 +人口数 +人口所 +人口学家 +人口证 +人困马乏 +人来疯 +人来人往 +人浪 +人劳处长 +人老珠黄 +人类 +人类史 +人类学 +人类学家 +人类学系 +人类学者 +人力 +人力车 +人脸 +人流 +人流量 +人龙 +人伦 +人马 +人满为患 +人们 +人秘 +人面兽心 +人民 +人民报 +人民币 +人民代表 +人民党 +人民法院 +人民公社 +人民宫 +人民警察 +人民军 +人民路 +人民团体 +人民性 +人民院 +人民战争 +人民政府 +人名 +人名册 +人名录 +人命 +人命关天 +人莫予毒 +人母 +人脑 +人挪活 +人贫志坚 +人品 +人平 +人气 +人墙 +人琴俱亡 +人勤地沃 +人情 +人情案 +人情电 +人情费 +人情关 +人情化 +人情会 +人情美 +人情世故 +人情网 +人情味 +人情债 +人去楼空 +人权 +人权观 +人权会 +人权委 +人权学 +人群 +人人 +人人喊打 +人人皆知 +人人自危 +人如海 +人山人海 +人蛇 +人身 +人身权 +人身事故 +人身险 +人身自由 +人生 +人生感 +人生观 +人生路 +人生如梦 +人生在勤 +人生在世 +人声 +人声鼎沸 +人士 +人士界 +人氏 +人世 +人世间 +人事 +人事部 +人事部门 +人事处 +人事局 +人事权 +人事厅 +人事院 +人手 +人寿 +人寿保险 +人寿年丰 +人寿险 +人书 +人数 +人所共知 +人梯 +人体 +人头 +人头费 +人头马 +人头攒动 +人亡 +人亡物在 +人望 +人微言轻 +人为 +人为性 +人卫 +人文 +人文科学 +人文主义 +人武 +人武部 +人武部长 +人物 +人物画 +人物奖 +人物史 +人像 +人心 +人心不古 +人心房 +人心浮动 +人心果 +人心惶惶 +人心叵测 +人心如面 +人心思变 +人心思和 +人心所向 +人心惟危 +人心向背 +人行 +人行道 +人行横道 +人形 +人性 +人性爱 +人性化 +人性论 +人性美 +人选 +人学 +人烟 +人烟稀少 +人言可畏 +人眼 +人仰马翻 +人样 +人妖 +人艺 +人意 +人饮 +人影 +人影儿 +人俑 +人有千算 +人鱼 +人语 +人欲 +人员 +人缘 +人缘儿 +人源 +人猿 +人愿 +人云亦云 +人造 +人造板 +人造冰 +人造磁铁 +人造革 +人造花 +人造毛 +人造棉 +人造石油 +人造丝 +人造卫星 +人造纤维 +人造行星 +人阵 +人证 +人之常情 +人治 +人质 +人中 +人种 +人字形 +仁 +仁爱 +仁安村 +仁布 +仁川 +仁慈 +仁德 +仁弟 +仁果 +仁和区 +仁厚 +仁化县 +仁怀 +仁怀市 +仁人君子 +仁人志士 +仁寿 +仁寿县 +仁术 +仁兄 +仁学 +仁以恤民 +仁义 +仁义道德 +仁者见仁 +仁政 +仁至义尽 +仁忠 +壬酚 +忍 +忍不住 +忍冬 +忍饥挨饿 +忍饥受冻 +忍俊 +忍俊不禁 +忍耐 +忍耐力 +忍气吞声 +忍让 +忍辱负重 +忍辱求全 +忍受 +忍痛 +忍痛割爱 +忍无可忍 +忍心 +稔 +稔熟 +稔子 +刃 +刃儿 +刃具 +刃量具 +刃片 +认 +认出 +认错 +认得 +认定 +认定书 +认负 +认购 +认可 +认领 +认命 +认亲 +认清 +认认 +认认真真 +认识 +认识论 +认识史 +认识者 +认受性 +认输 +认同 +认同度 +认同感 +认同式 +认为 +认养 +认贼作父 +认账 +认真 +认证 +认证版 +认证书 +认知 +认知科学 +认知率 +认字 +认罪 +认作 +仞 +任 +任城区 +任何 +任何人 +任家村 +任教 +任课 +任劳任怨 +任满 +任免 +任命 +任命权 +任命书 +任内 +任凭 +任期 +任其自流 +任其自然 +任情 +任人摆布 +任人唯钱 +任人唯亲 +任人唯贤 +任人宰割 +任务 +任贤 +任县 +任性 +任选 +任一 +任意 +任意球 +任用 +任用关 +任用制 +任由 +任职 +任职期 +任重道远 +纫 +妊 +妊妇 +妊娠 +韧 +韧带 +韧劲 +韧劲儿 +韧皮部 +韧皮纤维 +韧性 +衽衩口 +葚 +扔 +扔掉 +扔下 +仍 +仍旧 +仍然 +日 +日K线图 +日班 +日斑 +日报 +日报社 +日本 +日本餐 +日本帝国 +日本队 +日本国 +日本海 +日本籍 +日本式 +日薄西山 +日不暇给 +日产 +日产量 +日常 +日常性 +日常用语 +日场 +日成交额 +日程 +日程表 +日炽 +日出 +日出而作 +日戳 +日短日稀 +日耳曼 +日珥 +日方 +日丰 +日复一日 +日感迫切 +日高峰 +日工 +日共 +日光 +日光灯 +日光能 +日光棚 +日光浴 +日晷 +日后 +日化 +日化厂 +日环食 +日辉 +日货 +日积月累 +日籍 +日记 +日记本 +日记簿 +日记体 +日记账 +日间 +日见 +日见明朗 +日见其大 +日见增多 +日渐 +日界线 +日进斗金 +日经 +日经指数 +日久天长 +日就月将 +日军 +日均 +日喀则 +日喀则市 +日刊 +日寇 +日理万机 +日历 +日历表 +日历牌 +日利率 +日隆 +日落 +日落而息 +日冕 +日暮途穷 +日内 +日内瓦 +日内瓦湖 +日期 +日前 +日切村 +日清 +日趋 +日全食 +日惹市 +日日 +日日夜夜 +日日月月 +日入而息 +日晒 +日晒雨淋 +日商 +日上三竿 +日射病 +日射角 +日神 +日食 +日数 +日衰 +日思夜想 +日坛 +日铁 +日头 +日托 +日伪 +日温月痕 +日文 +日文版 +日显 +日心说 +日新月异 +日需求量 +日夜 +日夜操劳 +日夜兼程 +日夜辛劳 +日以继夜 +日益 +日裔 +日银 +日影 +日用 +日用百货 +日用瓷 +日用品 +日语 +日语科 +日元 +日月 +日月经天 +日月如梭 +日月食 +日月星辰 +日晕 +日杂 +日增 +日榨量 +日照 +日照市 +日照县 +日臻成熟 +日臻完美 +日臻完善 +日值 +日志 +日资 +日子 +戎马倥偬 +戎马生涯 +戎马一生 +戎衣 +戎装 +绒 +绒布 +绒花 +绒裤 +绒毛 +绒毛皮 +绒毛状 +绒帽 +绒球 +绒绒的 +绒山羊 +绒毯 +绒头绳 +绒线 +绒线衫 +绒绣 +绒衣 +绒织 +茸毛 +荣 +荣成 +荣成市 +荣登 +荣光 +荣归故里 +荣国府 +荣华 +荣华富贵 +荣获 +荣记 +荣将 +荣将镇 +荣军 +荣军院 +荣枯变幻 +荣立 +荣立者 +荣列 +荣任 +荣辱 +荣辱感 +荣辱观 +荣辱与共 +荣升 +荣幸 +荣耀 +荣耀人 +荣膺 +荣誉 +荣誉感 +荣誉奖 +荣誉军人 +荣誉室 +荣誉章 +荣宗耀祖 +容 +容北村 +容城 +容城县 +容错 +容错性 +容电器 +容光焕发 +容积 +容量 +容留 +容貌 +容纳 +容纳量 +容奇 +容器 +容器厂 +容人之短 +容忍 +容身 +容态可掬 +容县 +容许 +容颜 +容易 +容止 +容装 +容姿 +溶 +溶点 +溶洞 +溶化 +溶剂 +溶胶 +溶解 +溶解度 +溶解氧 +溶解状 +溶菌素 +溶媒 +溶溶 +溶入 +溶雪剂 +溶岩 +溶液 +溶质 +蓉 +蓉城 +蓉城镇 +蓉花山 +蓉花山镇 +蓉园 +榕 +榕城 +榕江县 +榕树 +熔 +熔点 +熔断 +熔断器 +熔古铄今 +熔化 +熔剂 +熔解热 +熔炼 +熔炼炉 +熔炉 +熔融 +熔铁铄金 +熔岩 +熔冶 +熔于一炉 +熔铸 +蝾螈 +融 +融安县 +融合 +融和 +融化 +融汇 +融汇贯通 +融会 +融会贯通 +融解 +融洽 +融融 +融入 +融水 +融通 +融为一体 +融雪 +融智 +融注 +融铸 +融资 +融资部 +融资额 +融资方 +融资量 +融资券 +冗 +冗笔 +冗长 +冗词 +冗繁 +冗员 +冗杂 +冗赘 +柔 +柔板 +柔波 +柔肠 +柔脆 +柔道 +柔肤水 +柔和 +柔劲儿 +柔曼 +柔美 +柔媚 +柔绵 +柔嫩 +柔情 +柔情绰态 +柔情蜜意 +柔情似水 +柔韧 +柔韧性 +柔柔 +柔柔的 +柔柔地 +柔软 +柔软剂 +柔软体操 +柔润 +柔弱 +柔声细语 +柔术 +柔顺 +柔婉 +柔细 +柔性 +柔姿纱 +柔姿舞 +揉 +揉搓 +揉揉 +糅 +糅合 +糅和 +糅进 +糅入 +蹂躏 +鞣料 +鞣酸 +鞣制 +肉 +肉饼 +肉搏战 +肉袋 +肉弹 +肉店 +肉豆蔻 +肉墩墩 +肉垛垛 +肉干 +肉鸽 +肉冠 +肉桂 +肉果 +肉鸡 +肉鸡场 +肉酱 +肉库 +肉类 +肉联厂 +肉料 +肉瘤 +肉麻 +肉末 +肉牛 +肉排 +肉皮 +肉片 +肉票 +肉品 +肉铺 +肉鳍 +肉禽 +肉肉 +肉色 +肉身 +肉食 +肉食厂 +肉食鸡 +肉食品 +肉丝 +肉丝面 +肉松 +肉摊 +肉汤 +肉体 +肉丸 +肉馅 +肉刑 +肉畜 +肉鸭 +肉眼 +肉羊 +肉样 +肉用 +肉用鸡 +肉用型 +肉欲 +肉制品 +肉质 +肉中刺 +肉猪 +肉孜节 +如 +如臂使指 +如钗折股 +如常 +如痴如狂 +如痴如醉 +如出一辙 +如春 +如此 +如此而已 +如此一来 +如此这般 +如东 +如东县 +如法炮制 +如皋 +如皋市 +如故 +如鬼似魅 +如果 +如何 +如虎添翼 +如花似锦 +如花似玉 +如火如荼 +如获至宝 +如饥如渴 +如饥似渴 +如见其人 +如胶似漆 +如今 +如来佛 +如狼似虎 +如雷贯耳 +如雷轰顶 +如雷似火 +如林 +如临大敌 +如临深渊 +如履薄冰 +如履平地 +如梦初醒 +如梦方醒 +如梦如幻 +如沐春风 +如沐春雨 +如沐薰风 +如鸟兽散 +如期 +如期而至 +如其 +如泣如诉 +如前所述 +如日中天 +如若 +如丧考妣 +如上 +如上所述 +如诗如画 +如诗似画 +如实 +如实地 +如是说 +如是者 +如释重负 +如誓如约 +如数 +如数家珍 +如诉如泣 +如梭 +如同 +如闻其声 +如屋漏痕 +如下 +如蚁附膻 +如意 +如意算盘 +如影随形 +如鱼得水 +如愿 +如愿以偿 +如约 +如云 +如注 +如锥镗沙 +如醉如痴 +如醉如狂 +如醉如梦 +如坐春风 +如坐云雾 +如坐针毡 +茹苦含辛 +茹毛饮血 +铷钟 +儒 +儒法道墨 +儒艮 +儒家 +儒将 +儒教 +儒林 +儒林村 +儒门 +儒商 +儒生 +儒士 +儒释道兵 +儒术 +儒学 +儒雅 +儒医 +孺子可数 +孺子牛 +孺子亭路 +濡 +濡沫相对 +濡沐 +濡染 +濡养 +蠕虫 +蠕虫状 +蠕动 +蠕滑力 +蠕形动物 +汝 +汝城 +汝阳 +汝阳县 +乳 +乳白 +乳白色 +乳钵 +乳齿 +乳臭 +乳臭未干 +乳儿 +乳房 +乳粉 +乳鸽 +乳虎 +乳化 +乳化术 +乳剂 +乳浆 +乳胶 +乳胶厂 +乳酪 +乳酶生 +乳糜 +乳名 +乳母 +乳娘 +乳牛 +乳品 +乳品厂 +乳山 +乳山市 +乳酸 +乳酸菌 +乳糖 +乳头 +乳突 +乳腺 +乳腺癌 +乳腺炎 +乳香 +乳燕营巢 +乳业 +乳饮料 +乳罩 +乳汁 +乳制品 +乳制品界 +乳猪 +乳浊液 +辱 +辱骂 +辱没 +辱没门庭 +入 +入保 +入编 +入编费 +入不敷出 +入厕 +入场 +入场券 +入场式 +入场证 +入超 +入出境 +入出库 +入春 +入党 +入冬 +入队 +入耳 +入伏 +入阁 +入彀 +入股 +入骨 +入国问禁 +入海处 +入海口 +入海量 +入户 +入户率 +入户线 +入画 +入会 +入会费 +入会者 +入伙 +入伙人 +入籍 +入境 +入境案 +入境问俗 +入境游 +入境者 +入口 +入口处 +入库 +入库率 +入殓 +入炉 +入梅 +入门 +入门处 +入盟 +入盟期 +入梦 +入迷 +入眠 +入魔 +入木三分 +入侵 +入侵者 +入情入理 +入秋 +入球 +入射点 +入射角 +入射线 +入神 +入声 +入胜 +入时 +入世 +入仕 +入市 +入市者 +入室 +入室弟子 +入手 +入手处 +入睡 +入土 +入土为安 +入团 +入托 +入网 +入网地 +入网费 +入网证 +入网证号 +入微 +入围 +入围奖 +入伍 +入席 +入夏 +入乡随俗 +入校 +入选 +入选国 +入选率 +入选者 +入学 +入学量 +入学率 +入药 +入夜 +入狱 +入园率 +入院 +入账 +入主 +入主出奴 +入住 +入驻 +入赘 +入座 +溽热 +缛 +褥疮 +褥单 +褥垫 +褥套 +褥子 +软 +软尺 +软床 +软刀子 +软垫 +软度 +软缎 +软腭 +软膏 +软骨 +软骨病 +软骨素 +软骨头 +软骨鱼 +软骨质 +软管 +软和 +软乎乎 +软化 +软化剂 +软环境 +软坚 +软件 +软件商 +软件所 +软件业 +软件园 +软禁 +软科学 +软锰矿 +软绵 +软绵绵 +软磨硬泡 +软木 +软盘 +软皮条 +软片 +软软 +软软的 +软弱 +软弱无力 +软舌螺 +软食 +软式 +软水 +软塌塌 +软瘫 +软糖 +软梯 +软体动物 +软土区 +软网 +软卧 +软卧票 +软武器 +软席 +软厢 +软型 +软性 +软性化 +软饮料 +软饮料业 +软硬 +软硬兼施 +软硬件 +软硬木 +软玉 +软枣 +软脂 +软脂酸 +软着陆 +软组织 +软座 +蕊 +芮 +芮城县 +锐 +锐不可当 +锐减 +锐降 +锐角 +锐利 +锐敏 +锐气 +锐意 +锐意进取 +瑞 +瑞安 +瑞安市 +瑞典 +瑞典队 +瑞典化 +瑞方 +瑞金 +瑞金市 +瑞金县 +瑞郎 +瑞丽 +瑞丽市 +瑞气 +瑞气盈门 +瑞签 +瑞士 +瑞士队 +瑞士法郎 +瑞士制 +瑞兽 +瑞万多 +瑞香 +瑞雪 +睿智 +睿智者 +闰 +闰年 +闰日 +闰月 +润 +润笔 +润肤 +润肤霜 +润喉 +润滑 +润滑剂 +润滑性 +润滑油 +润化 +润南 +润润 +润色 +润湿 +润湿性 +润饰 +润物无声 +润泽 +润州 +润州区 +润资 +若 +若虫 +若尔盖 +若非 +若干 +若果 +若即若离 +若明若暗 +若羌 +若是 +若无其事 +若想 +若耶溪 +若隐若现 +若有所失 +若有所思 +偌大 +弱 +弱败 +弱币 +弱不禁风 +弱点 +弱国 +弱化 +弱碱 +弱冷空气 +弱肉强食 +弱势 +弱视者 +弱酸 +弱项 +弱小 +弱者 +弱质 +弱智 +箬竹 +撒 +撒播 +撒布 +撒旦 +撒刁 +撒放 +撒哈拉 +撒欢 +撒欢儿 +撒谎 +撒娇 +撒拉族 +撒落 +撒玛拉 +撒尿 +撒泼 +撒气 +撒切尔 +撒手 +撒手不管 +撒手锏 +撒手人寰 +撒网 +撒野 +撒种 +洒 +洒遍 +洒红节 +洒泪 +洒落 +洒满 +洒热血 +洒扫 +洒扫庭除 +洒水机 +洒脱 +卅 +飒然 +飒飒 +飒爽 +飒爽英姿 +萨 +萨阿都 +萨安州 +萨勃隆街 +萨尔诺 +萨尔诺市 +萨尔图区 +萨尔瓦多 +萨尔瓦区 +萨格勒布 +萨吉德 +萨吉诺镇 +萨迦派 +萨迦寺 +萨军 +萨克管 +萨克森州 +萨克斯 +萨克斯管 +萨拉热窝 +萨雷沙干 +萨罗夫市 +萨洛尼卡 +萨马拉 +萨马拉河 +萨满教 +萨摩亚 +萨摩亚队 +萨姆 +萨那 +萨其马 +萨瓦河 +萨瓦金 +萨伊德 +塞 +塞阿拉 +塞阿拉州 +塞北 +塞擦音 +塞车 +塞尺 +塞达 +塞岛 +塞尔维亚 +塞弗勒 +塞格曼说 +塞规 +塞国 +塞罕坝 +塞军 +塞克萨德 +塞拉利昂 +塞伦盖蒂 +塞内加尔 +塞纳 +塞纳河 +塞纳河畔 +塞尼 +塞浦路斯 +塞入 +塞上 +塞舌尔 +塞外 +塞维利亚 +塞翁失马 +塞音 +塞责 +塞子 +塞族 +塞族区 +腮 +腮帮子 +腮部 +腮颊 +腮壳 +腮片 +腮腺 +腮腺炎 +鳃裂 +赛 +赛罢 +赛场 +赛车 +赛车场 +赛车队 +赛车组 +赛程 +赛道 +赛地 +赛段 +赛风 +赛后 +赛会 +赛纪 +赛季 +赛况 +赛利浦乡 +赛璐玢 +赛璐珞 +赛马 +赛马场 +赛马会 +赛内外 +赛跑 +赛期 +赛前 +赛区 +赛时 +赛史 +赛事 +赛事化 +赛艇 +赛项 +赛羊会 +赛站 +赛制 +赛中 +三 +三·一八 +三·一五 +三K党 +三爱 +三案 +三八 +三八节 +三班倒 +三板 +三板斧 +三包 +三胞 +三胞胎 +三宝 +三保地 +三北 +三倍体 +三苯锡 +三边 +三边四荒 +三边形 +三变 +三并举 +三伯 +三不 +三不变 +三不管 +三不用 +三不主义 +三不准 +三不做 +三步一踏 +三部曲 +三彩 +三藏 +三叉 +三叉神经 +三插溪 +三查三找 +三岔口 +三岔路 +三岔路村 +三岔路口 +三产 +三产型 +三长两短 +三撑峡 +三城 +三春柳 +三从四德 +三从一大 +三大 +三大差别 +三带 +三带走 +三贷 +三单 +三道河子 +三德 +三德坊 +三等 +三等舱 +三等功 +三等奖 +三低 +三点水 +三点钟 +三电 +三电办 +三迭纪 +三叠纪 +三叠系 +三丁锡 +三定 +三懂 +三洞桥 +三都镇 +三段论 +三段论式 +三墩营村 +三二联防 +三法 +三番五次 +三翻四复 +三反 +三反五反 +三方 +三房巷 +三放一联 +三废 +三费一款 +三分球 +三分王 +三分制 +三风 +三峰驼 +三伏 +三伏天 +三副 +三改 +三盖沟村 +三纲五常 +三高 +三高队 +三个一 +三个之最 +三公 +三公开 +三姑六婆 +三顾茅庐 +三挂钩 +三观 +三官庙 +三官庙矿 +三光 +三国 +三旱 +三好 +三好生 +三合板 +三合堡村 +三合房 +三合会 +三合土 +三合一 +三合院儿 +三和土 +三河 +三河尖 +三河市 +三核一派 +三鹤村 +三鹤洞社 +三黑一塌 +三湖 +三花脸 +三化 +三化螟 +三环 +三环路 +三环桥 +三荒 +三皇 +三皇五帝 +三黄鸡 +三汇镇 +三机 +三机部 +三机局 +三基 +三级 +三级跳远 +三极管 +三集中 +三季稻 +三季度 +三加大 +三家村 +三甲 +三缄其口 +三建 +三剑客 +三江 +三江队 +三讲 +三焦 +三角 +三角板 +三角蚌 +三角尺 +三角村 +三角帆 +三角枫 +三角函数 +三角架 +三角裤 +三角恋 +三角区 +三角铁 +三角形 +三角学 +三角债 +三角镇 +三角洲 +三脚架 +三教 +三教九流 +三教堂 +三接头 +三节 +三结合 +三金奖 +三晋 +三禁 +三九 +三九天 +三居室 +三绝 +三军 +三军思奋 +三军团 +三军医大 +三开门 +三棵树 +三来一补 +三老四严 +三类 +三棱镜 +三里河 +三里屯 +三力 +三连败 +三连动 +三连冠 +三连胜 +三联单 +三令五申 +三流 +三六九等 +三滤 +三闾大夫 +三氯甲烷 +三乱 +三轮 +三轮车 +三轮儿 +三轮摩托 +三论 +三落实 +三马林达 +三盲 +三昧 +三门 +三门河乡 +三门峡 +三门峡市 +三门县 +三棉 +三面红旗 +三民主义 +三明 +三明路 +三明市 +三明治 +三拇指 +三难 +三能 +三年期 +三怕 +三跑田 +三陪 +三配套 +三品 +三评 +三评一考 +三破 +三七 +三七节 +三七开 +三期 +三崎町 +三强 +三桥 +三桥村 +三秦 +三青团 +三清殿 +三清山 +三秋 +三缺一 +三确保 +三热 +三热爱 +三日 +三三两两 +三三五五 +三三制 +三色版 +三色堇 +三色旗 +三审 +三审制 +三生有幸 +三声 +三牲 +三圣庙村 +三圣桥 +三尸神 +三十分 +三十七分 +三十日 +三十三分 +三十五分 +三十一日 +三时 +三视图 +三室一厅 +三手 +三水市 +三思 +三思而行 +三四点钟 +三四季度 +三四月 +三四月份 +三送 +三塔 +三塔集镇 +三台村 +三台山 +三台山乡 +三台县 +三滩乡 +三塘 +三塘村 +三塘湖 +三塘乡 +三提高 +三提五统 +三屉桌 +三天两头 +三天三夜 +三田 +三通 +三同 +三统一包 +三头六臂 +三吐 +三湾 +三网 +三网一榜 +三危 +三危山 +三为主 +三维空间 +三委 +三位一体 +三味 +三文鱼 +三无 +三五成群 +三五九旅 +三西 +三溪口镇 +三峡 +三峡游 +三夏 +三仙村 +三仙姑 +三仙湖镇 +三弦 +三贤祠 +三线 +三相 +三湘 +三湘四水 +三消 +三小 +三孝口 +三协精机 +三心二意 +三星 +三星村 +三星队 +三星级 +三性 +三学 +三亚 +三亚市 +三严 +三严四自 +三言两语 +三沿 +三阳 +三养 +三要 +三野 +三业 +三叶虫 +三叶人 +三叶形虫 +三一律 +三乙醇胺 +三义 +三义庙 +三义墓 +三隐潭 +三营 +三优 +三有 +三有三超 +三育人 +三元 +三元里 +三元桥 +三元杂交 +三元镇 +三元朱村 +三原 +三原县 +三愿 +三月 +三月份 +三灾八难 +三者 +三镇 +三证 +三证一单 +三趾马 +三志 +三制 +三制一体 +三中 +三中全会 +三重奏 +三庄乡 +三资 +三资企业 +三子 +三字 +三字经 +三字一话 +三自 +三自一包 +三总部 +三纵两横 +三走 +三足鼎立 +三足乌 +三座大山 +三座门 +伞 +伞包 +伞兵 +伞盖 +伞架 +伞降 +伞形 +伞罩 +伞状 +散 +散兵 +散兵线 +散兵游勇 +散播 +散布 +散布式 +散步 +散步者 +散场 +散打 +散堆 +散发 +散放 +散光 +散户 +散花坞 +散会 +散伙 +散货 +散货船 +散货轮 +散记 +散剂 +散架 +散见 +散件 +散结 +散酒 +散居 +散开 +散客 +散乱 +散落 +散漫 +散曲 +散热 +散热管 +散热量 +散热器 +散软瘫 +散散 +散射 +散失 +散手 +散水 +散体 +散文 +散文化 +散文集 +散文家 +散文热 +散文诗 +散文史 +散文式 +散文体 +散心 +散养 +散逸 +散装 +馓 +馓子 +桑 +桑巴舞 +桑白皮 +桑蚕 +桑地诺 +桑顿区 +桑干 +桑干河 +桑给巴尔 +桑果 +桑寄生 +桑兰西党 +桑麻 +桑拿 +桑拿浴 +桑皮俄沼 +桑皮纸 +桑葚 +桑葚儿 +桑椹 +桑树 +桑塔木 +桑塔纳 +桑腾 +桑田 +桑象虫 +桑芽儿 +桑耶寺 +桑叶 +桑榆景 +桑榆暮景 +桑园 +桑园乡 +桑枝 +桑梓 +嗓 +嗓门 +嗓门儿 +嗓音 +嗓子 +嗓子眼 +嗓子眼儿 +搡 +丧 +丧德败行 +丧服 +丧父 +丧魂落魄 +丧家之犬 +丧假 +丧尽天良 +丧礼 +丧命 +丧偶 +丧偶者 +丧气 +丧权辱国 +丧身 +丧生 +丧生者 +丧失 +丧事 +丧心病狂 +丧心语 +丧葬 +丧葬费 +丧志 +丧钟 +搔首弄姿 +骚 +骚动 +骚客 +骚乱 +骚乱者 +骚扰 +骚人 +骚体 +缫丝 +臊 +扫 +扫把 +扫除 +扫荡 +扫地 +扫地出门 +扫毒 +扫毒战 +扫黑 +扫黄 +扫黄办 +扫黄打非 +扫雷 +扫雷兵 +扫雷器 +扫雷艇 +扫盲 +扫盲率 +扫描 +扫描机 +扫描器 +扫描术 +扫描线 +扫描仪 +扫墓 +扫频 +扫平 +扫清 +扫入 +扫扫 +扫射 +扫视 +扫尾 +扫兴 +扫雪 +扫帚 +扫帚菜 +扫帚声 +扫帚星 +嫂 +嫂夫人 +嫂嫂 +嫂子 +埽 +瘙痒 +色 +色氨酸 +色斑 +色彩 +色彩斑斓 +色彩缤纷 +色彩纷呈 +色差 +色带 +色丹 +色调 +色度 +色粉 +色光 +色鬼 +色价 +色浆 +色酒 +色觉 +色块 +色拉 +色拉寺 +色拉油 +色盲 +色米拉 +色目人 +色谱仪 +色情 +色庆乡 +色散 +色丝 +色素 +色素性 +色系 +色相 +色香味 +色香味美 +色釉 +色韵 +色泽 +色织 +色织布 +色织厂 +色子 +涩 +涩谷 +涩进 +涩味 +瑟 +瑟瑟 +瑟缩 +穑稼 +森 +森工 +森警 +森林 +森林城 +森林带 +森林队 +森林法 +森林狼队 +森林式 +森木绿 +森尼维尔 +森森 +森严 +森严壁垒 +僧 +僧多粥少 +僧官 +僧侣 +僧侣主义 +僧面 +僧尼 +僧袍 +僧人 +僧舍 +僧俗 +僧徒 +杀 +杀场 +杀虫剂 +杀虫率 +杀虫药 +杀出重围 +杀敌 +杀掉 +杀跌 +杀风景 +杀富济贫 +杀光 +杀害 +杀回马枪 +杀机 +杀鸡取卵 +杀鸡吓猴 +杀价 +杀戒 +杀菌 +杀菌率 +杀戮 +杀灭 +杀气 +杀气腾腾 +杀青 +杀人 +杀人案 +杀人洞 +杀人犯 +杀人如麻 +杀人越货 +杀人罪 +杀入 +杀杀 +杀伤 +杀伤力 +杀伤性 +杀烧淫掠 +杀身 +杀身成仁 +杀身之祸 +杀声 +杀手 +杀手锏 +杀死 +杀头 +杀一儆百 +沙 +沙巴州 +沙包 +沙暴 +沙边子村 +沙埠镇 +沙参 +沙蚕科 +沙蚕属 +沙层 +沙场 +沙场路 +沙尘 +沙尘暴 +沙虫 +沙船 +沙村 +沙打旺 +沙袋 +沙地 +沙丁鱼 +沙俄 +沙发 +沙发椅子 +沙峰 +沙沟 +沙沟村 +沙拐枣 +沙锅 +沙果 +沙害 +沙河 +沙河口区 +沙河市 +沙河镇 +沙湖 +沙化 +沙獾 +沙荒 +沙荒地 +沙皇 +沙矶头村 +沙鸡 +沙棘 +沙棘丛 +沙家浜 +沙浆 +沙角 +沙金 +沙坑 +沙朗河 +沙捞越 +沙捞越州 +沙垒 +沙梨 +沙里淘金 +沙砾 +沙粒 +沙梁 +沙岭 +沙柳 +沙柳丛 +沙龙 +沙漏 +沙卵石 +沙门 +沙门氏菌 +沙弥 +沙漠 +沙漠地 +沙漠化 +沙漠王 +沙盘 +沙盆 +沙坪 +沙坪坝 +沙坪坝区 +沙坪镇 +沙埔村 +沙浦 +沙碛 +沙庆乡 +沙丘 +沙区 +沙瓤 +沙色乡 +沙沙 +沙沙沙 +沙山 +沙善 +沙石 +沙石灰 +沙市 +沙市区 +沙松 +沙滩 +沙滩装 +沙特 +沙特队 +沙特王国 +沙田 +沙田柚 +沙头角 +沙头角镇 +沙土 +沙土地 +沙土所 +沙土乡 +沙坨地 +沙湾村 +沙湾河 +沙湾镇 +沙文主义 +沙窝 +沙窝集镇 +沙溪 +沙溪口组 +沙溪桥 +沙县 +沙箱 +沙哑 +沙眼 +沙鱼 +沙源 +沙枣 +沙枣面 +沙质 +沙洲 +沙柱 +沙子 +沙钻鱼 +纱 +纱包线 +纱布 +纱厂 +纱橱 +纱窗 +纱灯 +纱垫 +纱锭 +纱帘 +纱笼 +纱帽 +纱门 +纱裙 +纱嫂 +纱筒 +纱线 +纱帐 +纱罩 +刹 +刹车 +刹车板 +刹车片 +刹风整纪 +刹那 +刹那间 +刹时 +刹时间 +刹住 +砂 +砂布 +砂布厂 +砂浆 +砂礓 +砂金 +砂矿 +砂梨 +砂砾 +砂粒 +砂轮 +砂轮厂 +砂轮机 +砂枪 +砂仁 +砂石 +砂石料 +砂石土 +砂糖 +砂土 +砂洗厂 +砂心 +砂型 +砂岩 +砂眼 +砂样 +砂纸 +砂子 +莎草 +莎车 +莎车县 +铩羽 +铩羽而归 +鲨鱼 +傻 +傻干 +傻高 +傻瓜 +傻瓜机 +傻瓜相机 +傻呵呵 +傻乎乎 +傻话 +傻劲 +傻劲儿 +傻乐 +傻帽 +傻帽儿 +傻跑一气 +傻气 +傻傻的 +傻事 +傻笑 +傻眼 +傻子 +啥 +啥子 +歃 +歃血结盟 +歃血为盟 +煞 +煞白 +煞车 +煞费苦心 +煞费心机 +煞风景 +煞气 +煞煞 +煞是 +煞尾 +煞有介事 +煞住 +霎时 +霎时间 +筛 +筛骨 +筛管 +筛拣 +筛糠 +筛网 +筛选 +筛选机 +筛子 +晒 +晒场 +晒谷场 +晒晒 +晒台 +晒太阳 +晒图纸 +晒烟 +山 +山凹 +山坳 +山岙 +山包 +山北村 +山崩 +山崩地裂 +山壁 +山参 +山苍籽 +山苍子 +山草 +山茶 +山茶花 +山茶树 +山场 +山城 +山城堡 +山川 +山村 +山带 +山丹 +山丹丹花 +山道 +山道口 +山道年 +山地 +山地茶 +山地车 +山地组 +山颠 +山巅 +山顶 +山顶洞 +山顶洞人 +山东 +山东梆子 +山东队 +山东快书 +山东省 +山东厅 +山东团 +山洞 +山陡石峭 +山豆根 +山耳东村 +山风 +山峰 +山旮旯 +山盖沟村 +山冈 +山冈子 +山岗 +山岗子 +山高水长 +山高水低 +山歌 +山沟 +山沟沟 +山谷 +山光水色 +山龟 +山国 +山海关 +山海关区 +山海经 +山航 +山禾队 +山和尚 +山河 +山河村 +山核桃 +山洪 +山洪暴发 +山后 +山花 +山魂 +山火 +山货 +山鸡 +山鸡椒 +山基土 +山脊 +山架 +山尖 +山间 +山涧 +山焦 +山脚 +山脚下 +山轿 +山居 +山菊 +山口 +山口县 +山口镇 +山莨菪碱 +山里 +山里红 +山里人 +山里娃 +山梁 +山林 +山林田土 +山岭 +山陵 +山路 +山麓 +山峦 +山脉 +山猫 +山毛榉 +山梅 +山妹 +山门 +山盟 +山盟海誓 +山绵羊 +山民 +山明水秀 +山姆大叔 +山木 +山南 +山南海北 +山南头 +山南镇 +山鸟 +山农 +山炮 +山坪 +山坡 +山坡地 +山坡坡 +山墙 +山青水绿 +山青水秀 +山清水秀 +山穷水尽 +山丘 +山丘区 +山区 +山泉 +山泉水 +山泉乡 +山雀 +山人 +山色 +山山 +山山岭岭 +山山水水 +山上 +山神灵物 +山石 +山势 +山水 +山水歌 +山水画 +山水经 +山水园 +山寺 +山潭 +山塘 +山桃 +山桃花 +山体 +山亭乡 +山桐子 +山头 +山娃 +山娃娃 +山娃子 +山洼 +山湾 +山窝 +山窝地 +山窝窝 +山坞 +山雾 +山西 +山西梆子 +山西队 +山西路 +山西省 +山西团 +山溪 +山系 +山峡 +山下 +山险 +山乡 +山响 +山魈 +山鞋 +山形 +山形县 +山杏 +山崖 +山沿 +山羊 +山羊胡 +山羊皮 +山羊肉 +山羊洼 +山阳区 +山腰 +山摇地动 +山药 +山药蛋 +山野 +山野菜 +山阴 +山樱桃 +山鹰 +山影 +山隅 +山雨 +山芋 +山岳 +山晕 +山韵 +山楂 +山楂果 +山寨 +山珍 +山珍海味 +山镇 +山之内町 +山重山 +山重水复 +山茱萸 +山庄 +山嘴 +删 +删除 +删繁就简 +删改 +删减 +删节 +删节号 +删去 +杉 +杉篙 +杉木 +杉皮 +杉树 +杉竹林片 +芟 +姗姗 +姗姗来迟 +衫 +珊瑚 +珊瑚虫 +珊瑚岛 +珊瑚礁 +珊瑚礁区 +珊瑚石 +珊瑚滩 +珊瑚丸 +珊瑚鱼 +珊树村 +珊溪 +舢 +舢板 +煽动 +煽动性 +煽风点火 +煽惑 +煽亮 +煽情 +煽情式 +潸然泪下 +膻气 +膻味 +闪 +闪爆 +闪点 +闪电 +闪电河乡 +闪电式 +闪电战 +闪动 +闪光 +闪光弹 +闪光灯 +闪光点 +闪光面 +闪击战 +闪开 +闪亮 +闪闪 +闪闪地 +闪闪烁烁 +闪失 +闪石 +闪烁 +闪烁其辞 +闪烁生辉 +闪速炉 +闪现 +闪耀 +闪灼 +陕 +陕北 +陕甘 +陕甘宁 +陕南 +陕西 +陕西梆子 +陕西省 +陕西团 +讪笑 +汕 +汕头 +汕头市 +汕尾 +疝气 +苫布 +苫盖 +剡溪 +扇 +扇贝 +扇贝丁 +扇贝笼 +扇车 +扇动 +扇骨子 +扇面 +扇面儿 +扇形 +扇状 +扇子 +扇子舞 +善 +善罢甘休 +善报 +善本 +善本库 +善本书 +善变 +善策 +善待 +善断 +善恶 +善歌者 +善后 +善教者 +善解 +善解人意 +善举 +善款 +善良 +善莫大焉 +善纳雅言 +善男信女 +善跑 +善气 +善人 +善善恶恶 +善始 +善始善终 +善事 +善为 +善委会 +善徙 +善心 +善行 +善选 +善言 +善意 +善用 +善于 +善与人同 +善诈 +善战 +善者 +善终 +善自为之 +骟驼 +鄯善 +鄯善国 +缮写 +嬗变 +擅 +擅长 +擅动 +擅改 +擅权 +擅入 +擅于 +擅自 +膳 +膳费 +膳食 +膳食科 +赡 +赡养 +赡养费 +鳝塘村 +鳝鱼 +伤 +伤疤 +伤悲 +伤兵 +伤病 +伤病率 +伤病员 +伤残 +伤残费 +伤残人 +伤残人员 +伤残证 +伤处 +伤风 +伤风败俗 +伤俘 +伤感 +伤害 +伤害案 +伤害费 +伤寒 +伤寒论 +伤号 +伤痕 +伤筋动骨 +伤口 +伤脑筋 +伤破 +伤情 +伤湿膏 +伤势 +伤天害理 +伤天害命 +伤痛 +伤亡 +伤亡率 +伤亡者 +伤胃毁身 +伤心 +伤心惨目 +伤心地 +伤心事 +伤心树 +伤愈 +伤员 +伤者 +殇 +商 +商奥会 +商报 +商标 +商标厂 +商标法 +商标局 +商标权 +商补 +商埠 +商场 +商朝 +商潮 +商城 +商城路 +商城县 +商船 +商代 +商德 +商店 +商定 +商都 +商队 +商法 +商法典 +商贩 +商服 +商港 +商工 +商工人 +商管委 +商海 +商号 +商户 +商会 +商贿官贪 +商机 +商计 +商家 +商家退避 +商贾 +商贾如云 +商检 +商检局 +商交所 +商街 +商界 +商客居 +商量 +商流 +商旅 +商洛 +商贸 +商贸部 +商贸城 +商贸点 +商贸会 +商贸区 +商贸司 +商贸厅 +商末 +商南县 +商品 +商品案 +商品部 +商品额 +商品房 +商品肥料 +商品化 +商品鸡 +商品经济 +商品粮 +商品粮棉 +商品量 +商品流通 +商品率 +商品麦 +商品棉 +商品生产 +商品性 +商品业 +商品猪 +商铺 +商企 +商洽 +商情 +商丘 +商丘市 +商丘县 +商丘站 +商榷 +商人 +商儒 +商嫂 +商山 +商社 +商市场 +商事 +商数 +商水 +商水县 +商态 +商谈 +商讨 +商亭 +商团 +商委 +商务 +商务部 +商务部长 +商务处 +商务局 +商务客 +商务区 +商厦 +商厦队 +商校 +商行 +商学院 +商训 +商演 +商业 +商业部 +商业部长 +商业城 +商业处 +商业点 +商业额 +商业化 +商业街 +商业界 +商业局 +商业楼 +商业区 +商业网 +商业性 +商业主义 +商议 +商用 +商用化 +商誉 +商约 +商载 +商战 +商州 +商州市 +商周 +商住 +商住楼 +商酌 +觞 +墒 +墒情 +墒情点 +裳 +垧 +晌午 +赏 +赏赐 +赏罚 +赏罚分明 +赏光 +赏鉴 +赏金 +赏梅节 +赏钱 +赏识 +赏玩 +赏析 +赏心 +赏心亭 +赏心性 +赏心悦目 +赏月 +上 +上岸 +上案制 +上班 +上班族 +上坂 +上半 +上半场 +上半年 +上半年度 +上半期 +上半时 +上半叶 +上半夜 +上半月 +上报 +上辈 +上辈人 +上臂 +上边 +上编 +上膘 +上宾 +上部 +上蔡县 +上苍 +上藏马村 +上册 +上策 +上层 +上层建筑 +上场 +上场门 +上车 +上乘 +上传下达 +上次 +上蹿下跳 +上达 +上代 +上代人 +上当 +上当者 +上党 +上党梆子 +上档次 +上等 +上等兵 +上等货 +上地 +上帝 +上帝观 +上吊 +上调 +上冻 +上端 +上段村 +上颚 +上方 +上方宝剑 +上方剑 +上方山 +上方岁贡 +上访 +上访办 +上访户 +上访量 +上访团 +上访者 +上坟 +上风 +上峰 +上浮 +上浮率 +上付村 +上甘岭 +上岗 +上岗费 +上岗率 +上岗者 +上岗证 +上岗制 +上纲 +上纲上线 +上钢 +上港村 +上高县 +上告 +上告人 +上告信 +上个月 +上工 +上供 +上钩 +上钩者 +上古 +上固乡 +上挂下联 +上光 +上规模 +上国村 +上海 +上海城 +上海队 +上海港 +上海交大 +上海街 +上海路 +上海市 +上海滩 +上海站 +上杭 +上杭县 +上航 +上好 +上河城 +上颌 +上呼吸道 +上湖村 +上晃 +上晃上晃 +上回 +上会 +上火 +上机 +上级 +上集乡 +上季 +上佳 +上家 +上架 +上将 +上浆 +上交 +上交款 +上交所 +上茭道村 +上焦 +上缴 +上街 +上街口 +上解 +上届 +上进 +上进心 +上镜率 +上卷 +上课 +上空 +上口 +上款 +上昆 +上来 +上栗县 +上联 +上列 +上林 +上流 +上流式 +上楼 +上路 +上马 +上梅洲 +上梅洲村 +上门 +上棉 +上面 +上年 +上年底 +上年纪 +上年末 +上排 +上牌 +上皮组织 +上品 +上坪 +上坡 +上坡路 +上铺 +上期 +上汽 +上前 +上秦镇 +上勤 +上情 +上穷碧落 +上去 +上确村 +上阕 +上饶 +上饶市 +上人 +上任 +上荣下辱 +上山 +上山下乡 +上上 +上上下下 +上身 +上升 +上升村 +上升调 +上升股 +上升流 +上升期 +上声 +上士 +上市 +上市户 +上市量 +上收 +上手 +上书 +上述 +上水 +上水道 +上水井 +上税 +上司 +上送 +上诉 +上诉费 +上诉书 +上诉状 +上溯 +上算 +上索恩省 +上台 +上摊 +上膛 +上套者 +上体 +上天 +上铁 +上头 +上图 +上吐下泻 +上湾乡 +上万 +上网 +上网费 +上网者 +上位 +上尉 +上文 +上无片瓦 +上午 +上下 +上下班 +上下半场 +上下车 +上下床 +上下级 +上下卷 +上下课 +上下联动 +上下齐心 +上下其手 +上下水 +上下水道 +上下位 +上下文 +上下学 +上下一心 +上下议院 +上下游 +上下肢 +上下左右 +上线 +上线人 +上限 +上相 +上庠 +上消 +上校 +上心 +上辛口乡 +上新世 +上星期 +上行 +上行下效 +上行线 +上选 +上学 +上旬 +上压力 +上岩洞 +上演 +上演税 +上扬 +上冶镇 +上野 +上一年 +上衣 +上移 +上议院 +上瘾 +上瘾者 +上影 +上影线 +上映 +上甬村 +上涌 +上犹县 +上游 +上有老 +上虞 +上虞市 +上谕 +上元节 +上院 +上月 +上月底 +上月份 +上涨 +上涨率 +上账 +上者 +上阵 +上证 +上证所 +上肢 +上中农 +上中下游 +上中旬 +上中游 +上周 +上周二 +上周末 +上周日 +上周三 +上周四 +上周五 +上周一 +上洲 +上装 +上桌 +上座 +上座部 +上座儿 +上座率 +尚 +尚巴涅 +尚地义 +尚方宝剑 +尚方剑 +尚沟村 +尚沟里 +尚集镇 +尚家大堰 +尚俭去奢 +尚且 +尚书 +尚书学 +尚书学史 +尚未 +尚无 +尚无先例 +尚武 +尚兴村 +尚义 +尚义县 +尚志 +尚志市 +捎 +捎带 +捎脚 +捎马子 +梢 +梢头 +烧 +烧杯 +烧饼 +烧掉 +烧缸 +烧光 +烧锅 +烧坏 +烧荒 +烧毁 +烧火 +烧火柴卖 +烧火棍 +烧鸡 +烧碱 +烧结 +烧结厂 +烧结砖 +烧酒 +烧烤 +烧料 +烧林 +烧卖 +烧瓶 +烧杀抢掠 +烧伤 +烧水 +烧死 +烧损 +烧塌 +烧炭 +烧香 +烧窑 +烧夷弹 +烧造 +烧纸 +烧制 +烧砖 +烧砖人 +烧着 +稍 +稍后 +稍候 +稍加 +稍顷 +稍稍 +稍胜一筹 +稍事 +稍事停留 +稍微 +稍为 +稍许 +稍逊风骚 +稍有不慎 +稍纵即逝 +艄板 +艄公 +蛸蜞 +勺 +勺海 +勺园 +勺状软骨 +勺子 +芍药 +苕子 +韶 +韶钢 +韶关 +韶关市 +韶光 +韶华 +韶山 +韶山路 +少 +少安毋躁 +少白头 +少不得 +少不更事 +少不了 +少长咸集 +少城 +少存少贷 +少待 +少东家 +少儿 +少儿部 +少儿馆 +少儿情 +少儿社 +少儿式 +少儿心 +少妇 +少工委 +少共 +少怀壮志 +少见 +少见多怪 +少将 +少量 +少林拳 +少林寺 +少奶奶 +少男 +少男少女 +少年 +少年报 +少年村 +少年队 +少年儿童 +少年犯 +少年宫 +少年老成 +少年心 +少年装 +少女 +少卿 +少顷 +少少 +少少许 +少生快富 +少时 +少数 +少数民族 +少数派 +少帅 +少体校 +少尉 +少侠 +少先队 +少先队员 +少小 +少小离家 +少校 +少许 +少言寡语 +少爷 +少有 +少于 +少掌柜 +少者 +少壮 +少壮派 +少子 +劭 +邵东县 +邵刚乡 +邵阳 +邵阳市 +邵阳县 +绍 +绍籍 +绍酒 +绍剧 +绍丝印 +绍兴 +绍兴酒 +绍兴市 +绍兴戏 +绍兴县 +哨 +哨棒 +哨兵 +哨长 +哨卡 +哨口 +哨楼 +哨声 +哨声波 +哨所 +哨所里 +哨塔 +哨位 +哨响 +哨音 +哨子 +奢 +奢侈 +奢侈关 +奢侈浪费 +奢侈品 +奢华 +奢糜 +奢靡 +奢靡之始 +奢起贫兆 +奢望 +猞猁 +赊 +赊购 +赊欠 +赊销 +赊账 +赊账单 +畲 +畲乡 +畲族乡 +舌 +舌敝唇焦 +舌根音 +舌尖 +舌尖音 +舌剑唇枪 +舌面后音 +舌面前音 +舌鳎 +舌苔 +舌头 +舌下神经 +舌下腺 +舌咽神经 +舌炎 +舌音 +舌蝇 +舌战 +舌状花 +佘家湾村 +蛇 +蛇岛 +蛇根草 +蛇酒 +蛇口 +蛇莓 +蛇皮 +蛇头 +蛇蜕 +蛇尾 +蛇纹石 +蛇蝎 +蛇形 +蛇足 +舍 +舍本求末 +舍本逐末 +舍不得 +舍车保帅 +舍得 +舍己救人 +舍己为公 +舍己为人 +舍近求远 +舍利 +舍利塔 +舍命 +舍弃 +舍亲 +舍去 +舍人 +舍身 +舍身取义 +舍身忘死 +舍身为国 +舍生取义 +舍生忘死 +舍死忘生 +舍我其谁 +舍已为公 +舍珠买椟 +设 +设备 +设备厂 +设备室 +设点 +设定 +设法 +设防 +设伏 +设计 +设计部 +设计方 +设计费 +设计家 +设计奖 +设计界 +设计局 +设计量 +设计师 +设计室 +设计所 +设计图 +设计系 +设计业 +设计员 +设计院 +设计者 +设计组 +设卡 +设立 +设若 +设色 +设身处地 +设施 +设施处 +设使 +设摊 +设问句 +设想 +设项 +设宴 +设有 +设在 +设置 +设置关 +社 +社办 +社保 +社保局 +社仓 +社长 +社队 +社发 +社会 +社会保险 +社会部 +社会存在 +社会党 +社会党人 +社会分工 +社会工作 +社会关系 +社会观 +社会化 +社会活动 +社会教育 +社会科学 +社会课 +社会名流 +社会青年 +社会史 +社会系 +社会效益 +社会形态 +社会性 +社会学 +社会学家 +社会学界 +社会学所 +社会学系 +社会意识 +社会制度 +社会主义 +社火 +社稷 +社交 +社交界 +社交圈 +社教 +社科 +社科界 +社科类 +社科联 +社科司 +社科系 +社科院 +社兰村 +社劳党 +社里 +社联 +社论 +社民 +社民党 +社木铺村 +社评 +社旗 +社旗县 +社企 +社情 +社情民意 +社庆 +社区 +社区型 +社区性 +社群 +社社 +社体 +社头 +社团 +社团办 +社文司 +社戏 +社学 +社员 +社院 +社址 +社主任 +射 +射程 +射灯 +射敌 +射电 +射干 +射洪 +射洪县 +射击 +射击场 +射击队 +射击区 +射击赛 +射戟台 +射箭 +射界 +射孔 +射流 +射流技术 +射门 +射弩 +射杀 +射手 +射手榜 +射线 +射阳 +射阳湖镇 +射阳县 +射影 +涉 +涉案 +涉案人 +涉案人员 +涉华 +涉及 +涉及面 +涉猎 +涉农 +涉禽 +涉史 +涉世 +涉水 +涉外 +涉温泉 +涉嫌 +涉嫌人 +涉险 +涉县 +涉足 +赦免 +慑 +摄 +摄成 +摄录 +摄录机 +摄录像 +摄美部 +摄谱仪 +摄取 +摄取量 +摄入 +摄入量 +摄食 +摄氏 +摄氏度 +摄像 +摄像管 +摄像机 +摄像室 +摄像头 +摄要 +摄影 +摄影部 +摄影机 +摄影集 +摄影家 +摄影奖 +摄影界 +摄影赛 +摄影师 +摄影展 +摄影者 +摄影组 +摄政官 +摄制 +摄制组 +麝牛 +麝鼠 +麝香 +申 +申办 +申办户 +申办人 +申报 +申报表 +申报单 +申报法 +申报方 +申报量 +申报率 +申辩 +申城 +申斥 +申根 +申购 +申购单 +申购款 +申购量 +申购者 +申花队 +申领 +申明 +申请 +申请表 +申请单 +申请方 +申请国 +申请量 +申请人 +申请书 +申请者 +申述 +申说 +申诉 +申诉案 +申诉人 +申诉信 +申诉状 +申冤 +申扎 +伸 +伸长 +伸长率 +伸畅 +伸出 +伸脚展腰 +伸进 +伸伸 +伸手 +伸手派 +伸缩 +伸缩式 +伸缩性 +伸头 +伸展 +伸张 +伸直 +身 +身败名裂 +身板 +身边 +身不由己 +身材 +身残 +身残志坚 +身长 +身处 +身处牢笼 +身单力薄 +身段 +身分 +身分证 +身份 +身份证 +身份证者 +身负 +身高 +身高马大 +身故 +身故金 +身后 +身后名 +身怀 +身怀绝技 +身患 +身患重症 +身家 +身价 +身价百倍 +身兼多职 +身教 +身经百战 +身居 +身宽体胖 +身历目睹 +身量 +身临其境 +身旁 +身披 +身前 +身强力壮 +身强体壮 +身驱 +身躯 +身上 +身世 +身手 +身手不凡 +身受 +身体 +身体力行 +身条 +身外 +身外之物 +身亡 +身为 +身无长物 +身无分文 +身下 +身先士卒 +身陷 +身陷囹圄 +身心 +身心健康 +身心交瘁 +身形 +身殉 +身腰 +身影 +身孕 +身着 +身姿 +身子 +呻吟 +绅士 +绅士式 +绅士协定 +砷 +砷黄铁矿 +深 +深谙 +深奥 +深闭固拒 +深碧 +深表 +深不可测 +深部 +深藏 +深槽 +深层 +深层次 +深层格 +深长 +深沉 +深成岩 +深成指 +深仇大恨 +深处 +深达 +深得民心 +深得人心 +深冬 +深度 +深恶痛绝 +深翻 +深孚众望 +深感 +深根固蒂 +深更半夜 +深耕 +深耕细作 +深沟墩台 +深沟高垒 +深购 +深谷 +深广 +深闺 +深过冷 +深海 +深河村 +深褐色 +深痕 +深红 +深泓 +深厚 +深厚感 +深呼吸 +深化 +深怀 +深怀不满 +深灰 +深灰色 +深加工 +深交 +深交所 +深井 +深井式 +深究 +深居简出 +深刻 +深刻性 +深蓝 +深蓝色 +深冷 +深绿 +深绵 +深明大义 +深谋远虑 +深南 +深南路 +深浅 +深切 +深情 +深情厚谊 +深情厚意 +深秋 +深入 +深入虎穴 +深入浅出 +深入人心 +深入性 +深色 +深色纹 +深山 +深山老林 +深山区 +深深 +深深浅浅 +深市 +深受 +深受其害 +深水 +深水港 +深水港区 +深水炸弹 +深思 +深思熟虑 +深邃 +深透 +深文周纳 +深县 +深陷 +深巷 +深心 +深信 +深信不疑 +深亚微米 +深夜 +深一脚 +深意 +深有感触 +深有所思 +深渊 +深远 +深蕴 +深葬法 +深造 +深泽县 +深宅 +深宅大院 +深圳 +深圳队 +深圳河 +深圳岭 +深圳市 +深证 +深证所 +深知 +深指 +深挚 +深致 +深中 +深重 +深州 +深棕色 +神 +神笔 +神兵天降 +神采 +神采飞扬 +神采奕奕 +神茶 +神差鬼使 +神出鬼没 +神创论 +神道碑 +神灯 +神殿 +神儿 +神风洞 +神甫 +神府 +神父 +神冈町 +神工鬼斧 +神功 +神怪 +神汉 +神河 +神乎其神 +神湖 +神户 +神户港 +神户市 +神化 +神话 +神魂 +神魂颠倒 +神机妙算 +神交 +神界 +神经 +神经病 +神经病学 +神经错乱 +神经过敏 +神经科 +神经科学 +神经类 +神经末梢 +神经衰弱 +神经痛 +神经网 +神经系统 +神经细胞 +神经纤维 +神经线 +神经性 +神经元 +神经原 +神经质 +神经中枢 +神龛 +神来之笔 +神理 +神力 +神聊 +神灵 +神龙 +神鹿 +神秘 +神秘感 +神秘化 +神秘兮兮 +神秘性 +神妙 +神妙莫测 +神庙 +神明 +神木 +神奈川 +神奈川县 +神脑 +神鸟 +神农 +神农架 +神农溪 +神女 +神女峰 +神炮手 +神品 +神魄 +神奇 +神奇莫测 +神祇 +神气 +神气活现 +神器 +神枪 +神枪手 +神清气爽 +神情 +神曲 +神权 +神人 +神色 +神山 +神伤 +神圣 +神圣感 +神圣化 +神圣同盟 +神树 +神思 +神似 +神速 +神算 +神台 +神态 +神态自若 +神坛 +神堂 +神田 +神田区 +神通 +神通广大 +神童 +神往 +神威 +神位 +神巫 +神武门 +神物 +神仙 +神仙下凡 +神像 +神效 +神学 +神学家 +神学系 +神学院 +神医 +神异 +神勇 +神游 +神与物游 +神宇 +神韵 +神针 +神职 +神职人员 +神志 +神智 +神州 +沈 +沈城 +沈大 +沈飞队 +沈河区 +沈后 +沈农 +沈丘 +沈丘县 +沈泉庄 +沈泉庄村 +沈铁 +沈厅 +沈微 +沈阳 +沈阳城 +沈阳队 +沈阳市 +沈音 +沈园 +沈灶 +沈灶镇 +审 +审案 +审编 +审查 +审查关 +审查会 +审查率 +审查室 +审查委 +审查员 +审查制 +审察 +审订 +审定 +审读 +审度 +审改 +审干 +审稿 +审核 +审核方 +审核费 +审核员 +审核组 +审计 +审计部 +审计长 +审计法 +审计费 +审计官 +审计局 +审计师 +审计署 +审计员 +审计制 +审价 +审结 +审看 +审理 +审美 +审美观 +审美化 +审美力 +审判 +审判长 +审判官 +审判区 +审判权 +审判厅 +审判庭 +审判席 +审判员 +审判者 +审判组 +审批 +审批卡 +审批权 +审批人 +审批制 +审批组 +审评 +审审改改 +审慎 +审时度势 +审视 +审委会 +审问 +审限 +审校 +审讯 +审讯表 +审讯室 +审验 +审验费 +审议 +审议官 +审议会 +审阅 +审证 +审执 +哂 +哂笑 +婶母 +婶娘 +婶婆 +婶婶 +婶子 +肾 +肾病 +肾结核 +肾结石 +肾囊 +肾气 +肾上腺 +肾上腺素 +肾衰竭 +肾透析器 +肾小球 +肾炎 +肾盂 +肾盂炎 +肾脏 +甚 +甚低频 +甚笃 +甚而 +甚高频 +甚广 +甚或 +甚佳 +甚么 +甚微 +甚为 +甚为可惜 +甚嚣尘上 +甚焉者 +甚者 +甚至 +甚至于 +渗 +渗出 +渗出性 +渗灌 +渗化 +渗漏 +渗入 +渗水 +渗透 +渗透法 +渗透量 +渗透性 +渗透压 +渗透战 +慎 +慎密 +慎始敬终 +慎行 +慎选 +慎言 +慎用 +慎证 +慎之又慎 +慎重 +蜃景 +升 +升班队 +升班马 +升船机 +升档 +升跌宝 +升发 +升幅 +升高 +升格 +升汞 +升官 +升官进爵 +升华 +升级 +升级换代 +升级型 +升降 +升降车 +升降舵 +升降机 +升降级 +升降器 +升结肠 +升空 +升力 +升幂 +升平 +升旗 +升旗日 +升旗手 +升旗台 +升起 +升迁 +升任 +升入 +升赏 +升升降降 +升势 +升堂 +升堂入室 +升腾 +升天 +升头 +升位 +升温 +升温法 +升限 +升序 +升学 +升学率 +升压 +升值 +生 +生搬硬套 +生保 +生病 +生不逢时 +生财 +生财有道 +生菜 +生产 +生产班 +生产部 +生产操 +生产厂 +生产场 +生产处 +生产大队 +生产地 +生产队 +生产队长 +生产方式 +生产工具 +生产关系 +生产观 +生产国 +生产过剩 +生产基金 +生产奖 +生产局 +生产力 +生产链 +生产量 +生产率 +生产能力 +生产区 +生产商 +生产师 +生产司 +生产物 +生产线 +生产型 +生产性 +生产业 +生产者 +生产值 +生产资料 +生产总值 +生产组 +生长 +生长点 +生长激素 +生长量 +生长率 +生长期 +生长区 +生长素 +生长型 +生辰 +生成 +生成点 +生成量 +生成器 +生成素 +生成物 +生出 +生词 +生存 +生存斗争 +生存链 +生存率 +生存权 +生存线 +生存型 +生存性 +生存者 +生地 +生地黄 +生动 +生动性 +生儿育女 +生而知之 +生发 +生发油 +生分 +生俘 +生父 +生父母 +生根 +生工 +生光 +生花之笔 +生化 +生还 +生还者 +生荒 +生辉 +生活 +生活版 +生活报 +生活舱 +生活费 +生活感 +生活观 +生活化 +生活会 +生活品 +生活区 +生活史 +生活照 +生活资料 +生火 +生机 +生机盎然 +生机勃勃 +生机勃发 +生机蓬勃 +生计 +生姜 +生角 +生津鲜美 +生津止渴 +生境 +生就 +生客 +生拉硬拽 +生来 +生老病死 +生冷 +生离死别 +生理 +生理学 +生理学家 +生理盐水 +生力军 +生料 +生灵 +生灵涂炭 +生龙活虎 +生路 +生闷气 +生猛海鲜 +生民 +生命 +生命不息 +生命力 +生命力者 +生命权 +生命史 +生命体 +生命线 +生命学 +生命攸关 +生命主义 +生母 +生怕 +生僻 +生平 +生平厅 +生平展 +生漆 +生气 +生气盎然 +生气勃勃 +生前 +生擒 +生趣 +生人 +生日 +生日卡 +生肉 +生涩 +生杀予夺 +生烧 +生身 +生生 +生生不息 +生生不已 +生生死死 +生生息息 +生石膏 +生石灰 +生事 +生势 +生手 +生疏 +生树 +生水 +生丝 +生死 +生死不渝 +生死存亡 +生死观 +生死立判 +生死荣辱 +生死线 +生死攸关 +生死与共 +生态 +生态村 +生态林 +生态所 +生态县 +生态乡 +生态箱 +生态型 +生态学 +生态学家 +生痰 +生疼 +生铁 +生土 +生吞活剥 +生吞活咽 +生威 +生畏 +生物 +生物电流 +生物防治 +生物碱 +生物界 +生物科 +生物课 +生物链 +生物量 +生物圈 +生物群 +生物体 +生物武器 +生物系 +生物性 +生物学 +生物学家 +生物制品 +生物质 +生物质能 +生物钟 +生息 +生鲜 +生橡胶 +生肖 +生肖物 +生肖印 +生效 +生性 +生锈 +生涯 +生厌 +生养 +生药 +生业 +生疑 +生意 +生意盎然 +生意场 +生意计 +生意经 +生意人 +生意网 +生意眼 +生硬 +生油 +生油层 +生于 +生育 +生育观 +生育率 +生育期 +生员 +生源 +生造字 +生者 +生殖 +生殖道 +生殖洄游 +生殖力 +生殖器 +生殖细胞 +生殖腺 +生猪 +生猪业 +生资 +生子 +生字 +声 +声波 +声部 +声场 +声称 +声带 +声道 +声调 +声东击西 +声儿 +声光 +声光电 +声光化电 +声级 +声价 +声浪 +声乐 +声乐家 +声乐系 +声泪俱下 +声门 +声名 +声名狼藉 +声名鹊立 +声名鹊起 +声名显赫 +声名远播 +声明 +声母 +声纳 +声旁 +声频 +声谱 +声气 +声腔 +声情并茂 +声全息 +声如洪钟 +声如银铃 +声色 +声色俱厉 +声色犬马 +声声 +声势 +声势浩大 +声嘶力竭 +声速 +声态 +声讨 +声望 +声望度 +声威 +声息 +声响 +声像 +声学 +声讯 +声讯台 +声言 +声音 +声誉 +声誉鹊起 +声援 +声援信 +声韵 +声韵学 +声张 +声障 +声震寰宇 +声震中外 +牲粉 +牲口 +牲口棚 +牲畜 +牲畜头数 +胜 +胜败 +胜出一筹 +胜地 +胜队 +胜芳镇 +胜负 +胜负手 +胜果 +胜过 +胜机 +胜迹 +胜绩 +胜进村 +胜景 +胜境 +胜局 +胜利 +胜利村 +胜利果实 +胜利街 +胜利路 +胜利品 +胜利日 +胜利者 +胜面 +胜券 +胜券在握 +胜人一筹 +胜任 +胜任感 +胜任者 +胜山 +胜势 +胜似 +胜诉 +胜诉率 +胜算 +胜仗 +胜者 +笙 +甥女 +渑池 +渑池县 +渑水燕 +绳 +绳断 +绳锯木断 +绳墨 +绳圈 +绳圈式 +绳上 +绳索 +绳梯 +绳之以法 +绳子 +省 +省宝 +省报 +省便 +省部级 +省察 +省柴灶 +省长 +省城 +省吃俭用 +省道 +省地级 +省掉 +省督 +省份 +省府 +省会 +省级 +省籍 +省纪委 +省际 +省价 +省建 +省界 +省境 +省局 +省军区 +省里 +省力 +省力化 +省立 +省略 +省略号 +省略句 +省内 +省农办 +省钱 +省亲 +省情 +省区 +省去 +省却 +省人大 +省时 +省时省力 +省市 +省市长 +省市级 +省市区 +省事 +省厅级 +省外 +省委 +省悟 +省辖 +省辖市 +省心 +省行 +省优 +省政府 +省政协 +省直 +省属 +眚 +圣 +圣埃蒂安 +圣保罗 +圣保罗市 +圣保罗州 +圣彼得堡 +圣餐 +圣城 +圣但尼 +圣但尼市 +圣诞 +圣诞节 +圣诞卡 +圣诞老人 +圣诞票 +圣诞树 +圣地 +圣地亚哥 +圣殿 +圣迭戈 +圣多明各 +圣冈丹 +圣歌 +圣何塞 +圣河 +圣胡安岛 +圣湖 +圣火 +圣洁 +圣洁感 +圣经 +圣科莫镇 +圣克鲁 +圣克鲁斯 +圣里斯特 +圣砾砚斋 +圣卢西亚 +圣路易斯 +圣马可 +圣马力诺 +圣玛丽亚 +圣庙 +圣母 +圣母院 +圣女 +圣人 +圣山 +圣上 +圣手 +圣水 +圣水湖 +圣太田 +圣坛 +圣特莱萨 +圣徒 +圣土 +圣维森 +圣物 +圣贤 +圣雪绒队 +圣药 +圣意 +圣婴 +圣谕 +圣园 +圣战 +圣战者 +圣哲 +圣职 +圣旨 +圣周 +圣周末 +圣子 +盛 +盛产 +盛产地 +盛产期 +盛传 +盛大 +盛典 +盛放 +盛服 +盛会 +盛极而衰 +盛极一时 +盛景 +盛举 +盛开 +盛况 +盛况空前 +盛名 +盛名难负 +盛名之下 +盛年 +盛怒 +盛气凌人 +盛器 +盛情 +盛情难却 +盛世 +盛事 +盛衰 +盛衰荣辱 +盛夏 +盛行 +盛宴 +盛意 +盛誉 +盛赞 +盛宅村 +盛装 +剩 +剩菜 +剩磁 +剩饭 +剩下 +剩余 +剩余产品 +剩余价值 +剩余劳动 +剩余物 +剩余油 +嵊泗 +嵊县 +嵊州 +嵊州籍 +嵊州市 +尸 +尸骨 +尸骨未寒 +尸骸 +尸蜡 +尸身 +尸首 +尸体 +尸体堆 +尸位素餐 +失 +失败 +失败率 +失败者 +失曹河 +失策 +失察 +失常 +失宠 +失传 +失聪 +失聪者 +失当 +失盗 +失道寡助 +失地 +失调 +失掉 +失而复得 +失分 +失和 +失衡 +失魂落魄 +失火 +失节 +失节事大 +失禁 +失控 +失礼 +失利 +失恋 +失灵 +失落 +失落感 +失密 +失眠 +失眠病 +失眠症 +失明 +失陪 +失窃 +失窃案 +失窃险 +失去 +失却 +失人者 +失散 +失色 +失闪 +失墒 +失身 +失神 +失声 +失实 +失事 +失势 +失手 +失守 +失算 +失态 +失望 +失物 +失误 +失误者 +失陷 +失效 +失效率 +失泄密 +失信 +失修 +失学 +失血 +失血性 +失言 +失业 +失业军 +失业率 +失业者 +失忆 +失忆症 +失意 +失音 +失迎 +失约 +失真 +失之交臂 +失之空洞 +失之偏颇 +失职 +失重 +失主 +失踪 +失踪者 +失足 +失足者 +师 +师辈 +师部 +师长 +师承 +师出无名 +师从 +师大 +师德 +师弟 +师法 +师范 +师范大学 +师范生 +师范学校 +师范学院 +师风 +师父 +师傅 +师哥 +师公 +师姑 +师级 +师姐 +师里 +师妹 +师母 +师娘 +师生 +师生比 +师生员工 +师事 +师徒 +师团 +师团职 +师心自用 +师兄 +师爷 +师爷气 +师友 +师院 +师者 +师职 +师专 +师资 +师宗县 +虱 +虱子 +诗 +诗碑 +诗碑廊 +诗壁 +诗抄 +诗词 +诗词集 +诗词史 +诗词选 +诗儿 +诗风 +诗赋 +诗稿 +诗歌 +诗歌节 +诗化 +诗话 +诗会 +诗集 +诗界 +诗经 +诗境 +诗句 +诗剧 +诗刊 +诗刊社 +诗朗诵 +诗礼之家 +诗录 +诗论 +诗论家 +诗牌 +诗篇 +诗评家 +诗情 +诗情画意 +诗趣 +诗人 +诗社 +诗圣 +诗史 +诗书 +诗书画 +诗书门第 +诗思 +诗坛 +诗体 +诗文 +诗文抄 +诗文集 +诗文论 +诗文体 +诗仙 +诗想 +诗兴 +诗行 +诗性 +诗选 +诗选集 +诗学 +诗言志 +诗艺 +诗意 +诗友 +诗语 +诗韵 +诗章 +诗作 +诗作品 +施 +施暴 +施暴者 +施秉 +施洞 +施放 +施肥 +施工 +施工处 +施工点 +施工队 +施工方 +施工量 +施工期 +施工区 +施工史 +施工图 +施工员 +施工者 +施官镇 +施加 +施家湖村 +施教 +施教者 +施救 +施舍 +施射 +施氏鲟 +施事 +施行 +施训 +施压 +施业区 +施用 +施用量 +施展 +施政 +施政权 +施治 +施主 +狮 +狮豹头 +狮豹头乡 +狮城 +狮梁 +狮泉 +狮泉河 +狮头鹅 +狮舞 +狮子 +狮子狗 +狮子会 +狮子山 +狮子王 +狮子舞 +狮子座 +湿 +湿地 +湿地松 +湿度 +湿寒 +湿乎乎 +湿货 +湿控 +湿淋淋 +湿渌渌 +湿漉漉 +湿气 +湿热型 +湿润 +湿湿 +湿邪 +湿疹 +湿渍 +酾 +十 +十八罗汉 +十八年 +十八日 +十八时 +十传百 +十滴水 +十点 +十点钟 +十冬腊月 +十渡 +十恶不赦 +十二大 +十二点 +十二分 +十二日 +十二生肖 +十二时 +十二圩镇 +十二月 +十二指肠 +十二属 +十二属相 +十番乐 +十方 +十分 +十佳 +十届二中 +十进对数 +十进制 +十九日 +十痨九死 +十里八乡 +十里堡 +十里堡镇 +十里铺村 +十六国 +十六铺 +十六日 +十六中 +十美 +十拿九稳 +十年寒窗 +十年浩劫 +十年九旱 +十年树木 +十年一剑 +十七孔桥 +十七路军 +十七日 +十全十美 +十人制 +十日 +十三 +十三大 +十三经 +十三陵 +十三日 +十三辙 +十时 +十室九空 +十四大 +十四日 +十四时 +十四行 +十四行诗 +十条 +十万 +十万大山 +十万火急 +十五大 +十五分 +十五日 +十五小 +十五中 +十星级 +十堰 +十堰市 +十样锦 +十一大 +十一二点 +十一届 +十一日 +十一时 +十一月 +十有八九 +十月 +十月份 +十月革命 +十之八九 +十指关 +十指连心 +十字 +十字步 +十字镐 +十字花科 +十字架 +十字架形 +十字街 +十字街村 +十字街头 +十字军 +十字路口 +十字坡 +十字线 +十字型 +十足 +什 +什邡市 +什邡县 +什么 +什么样 +什刹海 +什物 +石 +石坝 +石斑 +石斑鱼 +石板 +石板镇 +石版 +石碑 +石笔 +石壁 +石埠 +石埠乡 +石材 +石材厂 +石材业 +石槽 +石碴 +石铲 +石菖蒲 +石沉大海 +石城 +石床 +石担 +石刀 +石刀山 +石岛镇 +石道 +石凳 +石堤 +石刁柏 +石雕 +石洞 +石洞源村 +石堆 +石碓 +石方 +石舫 +石粉 +石峰 +石缝 +石膏 +石膏矿 +石膏像 +石工 +石宫 +石拱 +石拱桥 +石骨铁硬 +石鼓 +石鼓文 +石关村 +石棺 +石棺盖 +石龟 +石磙 +石壕 +石壕吏 +石河 +石河村 +石河子 +石河子市 +石荷州 +石湖 +石花菜 +石花洞 +石花胶 +石化 +石化安 +石化部 +石化城 +石化队 +石灰 +石灰道 +石灰石 +石灰水 +石灰岩 +石灰窑 +石灰质 +石魂 +石家庄 +石家庄市 +石匠 +石轿村 +石阶 +石阶道 +石经 +石经板 +石经寺 +石井乡 +石景山 +石景山区 +石径 +石臼 +石坎 +石刻 +石窟 +石库门 +石块 +石蜡 +石栏 +石栗 +石炼化 +石料 +石料厂 +石林 +石榴 +石榴石 +石榴树 +石榴庄 +石榴庄村 +石龙坑 +石龙头村 +石龙乡 +石龙子 +石绿 +石马 +石漫滩 +石煤 +石门 +石门村 +石门口 +石门县 +石门岩 +石门镇 +石门子 +石棉 +石棉瓦 +石面 +石铭 +石磨 +石磨盘 +石墨 +石南 +石楠 +石女 +石牌岭 +石片 +石屏 +石破天惊 +石浦 +石浦港 +石麒麟 +石砌 +石器 +石墙 +石桥 +石青 +石清沟村 +石磬 +石渠县 +石蕊 +石蕊试纸 +石色 +石砂 +石山 +石山区 +石山镇 +石狮 +石室 +石首 +石首市 +石首鱼 +石鼠 +石松 +石蒜 +石笋 +石锁 +石塔 +石炭 +石炭纪 +石炭酸 +石炭系 +石铁 +石铁院 +石头 +石头城 +石头块 +石头山 +石头寨 +石头寨村 +石头子儿 +石湾 +石围 +石纹 +石西 +石像 +石崖 +石涯 +石岩镇 +石砚 +石堰 +石羊 +石羊河 +石窑 +石药 +石椅 +石印 +石英 +石英沙 +石英钟 +石油 +石油部 +石油城 +石油大臣 +石油界 +石油局 +石油气 +石寨铺乡 +石章 +石阵 +石制 +石制品 +石质 +石钟乳 +石竹 +石柱 +石柱湾 +石柱县 +石子 +石子儿 +石子路 +石嘴村 +石嘴山 +石嘴山市 +时 +时报 +时报社 +时弊 +时不时 +时不我待 +时不再来 +时差 +时常 +时辰 +时称 +时代 +时代潮 +时代队 +时代感 +时代性 +时点 +时调 +时段 +时段性 +时断时续 +时而 +时分 +时风时雨 +时逢 +时隔 +时光 +时光荏苒 +时过境迁 +时好时坏 +时候 +时会 +时或 +时机 +时价 +时间 +时间表 +时间差 +时间词 +时间段 +时间廊 +时间篇 +时间性 +时艰 +时节 +时届 +时紧时松 +时久天长 +时局 +时刻 +时刻表 +时刻处 +时空 +时口 +时宽时窄 +时来运转 +时令 +时令病 +时令性 +时髦 +时年 +时评 +时期 +时起时落 +时气 +时区 +时缺时剩 +时人 +时任 +时日 +时尚 +时尚者 +时时 +时时处处 +时时刻刻 +时式 +时事 +时事性 +时势 +时数 +时速 +时态 +时文 +时务 +时下 +时鲜 +时贤 +时限 +时效 +时效处理 +时效性 +时新 +时新日异 +时兴 +时序 +时样 +时宜 +时已隔世 +时疫 +时隐时显 +时隐时现 +时有 +时有发生 +时有时停 +时有所闻 +时与 +时月 +时运 +时涨时落 +时针 +时政 +时值 +时至 +时至今日 +时滞 +时钟 +时装 +时装店 +时装化 +时装节 +时装界 +时装业 +时装展 +识 +识别 +识察 +识花者 +识货 +识货者 +识假 +识见 +识破 +识破天机 +识时务 +识文断字 +识相 +识者 +识字 +识字班 +识字率 +实 +实报实销 +实测 +实测值 +实策 +实沉 +实处 +实船 +实词 +实存 +实打实 +实弹 +实弹射击 +实地 +实地调查 +实而不华 +实干 +实干家 +实干者 +实感 +实话 +实话实说 +实惠 +实惠主义 +实绩 +实际 +实际工资 +实际上 +实寄封 +实价 +实践 +实践观 +实践家 +实践论 +实践篇 +实践史 +实践性 +实践者 +实劲 +实景 +实据 +实空 +实况 +实力 +实力派 +实力型 +实利 +实例 +实录 +实名制 +实乃 +实拍 +实情 +实权 +实生苗 +实施 +实施型 +实施者 +实时 +实实地 +实实在在 +实事 +实事求是 +实收率 +实数 +实体 +实体法 +实为 +实务 +实务性 +实物 +实物地租 +实物量 +实物券 +实物券式 +实物性 +实习 +实习期 +实习生 +实习室 +实习员 +实现 +实现者 +实现制 +实像 +实效 +实效性 +实心 +实心实意 +实心眼儿 +实行 +实验 +实验班 +实验舱 +实验厂 +实验地 +实验费 +实验林 +实验楼 +实验区 +实验室 +实验鼠 +实验田 +实验校 +实验性 +实验员 +实验院 +实验站 +实验组 +实业 +实业部 +实业化 +实业家 +实业界 +实业厅 +实益 +实用 +实用化 +实用菌 +实用类 +实用文 +实用型 +实用性 +实用主义 +实有 +实在 +实在论 +实则 +实战 +实招 +实证 +实证化 +实证主义 +实症 +实职 +实至名归 +实质 +实质性 +实中求新 +实属 +实装 +实字 +实足 +拾 +拾贝集 +拾掇 +拾级而上 +拾捡 +拾金不昧 +拾零 +拾取 +拾人牙慧 +拾闲 +拾遗 +拾遗补阙 +拾音器 +拾主 +蚀 +蚀斑 +蚀本 +蚀尽 +食 +食变星 +食不甘味 +食不果腹 +食槽 +食草动物 +食道 +食道癌 +食而不化 +食甘卧暖 +食狗 +食古不化 +食管 +食管癌 +食盒 +食火鸡 +食积 +食具 +食客 +食口性 +食利者 +食粮 +食量 +食疗 +食品 +食品包 +食品部 +食品厂 +食品城 +食品袋 +食品店 +食品盒 +食品级 +食品类 +食品摊 +食品学家 +食品业 +食品站 +食谱 +食少便溏 +食肆 +食宿 +食宿费 +食堂 +食糖 +食团问卜 +食文化 +食物 +食物链 +食物谱 +食物中毒 +食相 +食心虫 +食性 +食言 +食言而肥 +食盐 +食洋不化 +食肴 +食蚁兽 +食用 +食用菌 +食用量 +食用笋 +食用油 +食用者 +食油 +食欲 +食欲不振 +食杂店 +食者 +食指 +食茱萸 +埘 +莳花种草 +莳秧行 +史 +史菜园队 +史册 +史纲 +史稿 +史各庄镇 +史观 +史官 +史海 +史河 +史画 +史话 +史迹 +史绩 +史籍 +史家 +史料 +史料性 +史略 +史论 +史论家 +史评 +史前 +史诗 +史诗性 +史实 +史实性 +史事 +史书 +史无前例 +史学 +史学观 +史学观点 +史学家 +史学界 +史学系 +史训 +史苑 +史展 +史志 +史中 +史著 +矢 +矢车菊 +矢口 +矢口抵赖 +矢口否认 +矢量 +矢石 +矢志 +矢志不移 +矢志不渝 +使 +使绊 +使不得 +使得 +使馆 +使馆区 +使坏 +使唤 +使假 +使节 +使劲 +使劲儿 +使君子 +使领馆 +使命 +使命感 +使女 +使然 +使人昭昭 +使势 +使手机 +使徒 +使团 +使团长 +使性子 +使眼色 +使用 +使用表 +使用费 +使用户 +使用价值 +使用量 +使用率 +使用期 +使用权 +使用税 +使用性 +使用者 +使用证 +使者 +始 +始创 +始而 +始发 +始发地 +始发点 +始发站 +始建 +始料不及 +始料未及 +始末 +始起 +始先 +始兴 +始言 +始于 +始于足下 +始终 +始终不懈 +始终不渝 +始终如一 +始祖 +始祖马 +始祖鸟 +始作俑者 +驶 +驶抵 +驶过 +驶近 +驶离 +驶入 +驶往 +屎 +屎壳郎 +士 +士兵 +士兵证 +士大夫 +士多店 +士多啤梨 +士官 +士林 +士录 +士敏 +士敏土 +士女 +士气 +士人 +士绅 +士子 +士卒 +氏 +氏族 +世 +世伯 +世博会 +世博行 +世博园 +世称 +世仇 +世代 +世代相传 +世道 +世繁 +世风 +世风日下 +世妇会 +世故 +世纪 +世纪末 +世纪性 +世纪钟 +世家 +世间 +世交 +世界 +世界杯 +世界杯赛 +世界大战 +世界观 +世界广论 +世界化 +世界级 +世界史 +世界市场 +世界屋脊 +世界性 +世界一统 +世界语 +世界主义 +世锦赛 +世居 +世局 +世贸 +世面 +世乒赛 +世青赛 +世情 +世情书 +世人 +世上 +世世代代 +世事 +世叔 +世说 +世俗 +世俗化 +世俗主义 +世所少见 +世态 +世态百味 +世态相 +世态炎凉 +世外桃源 +世物 +世袭 +世系 +世相百态 +世象 +世行 +世兄 +世医 +世裔 +世族 +世祖 +仕 +仕和集 +仕进 +仕女 +仕女图 +仕途 +仕族 +市 +市百 +市百一店 +市办 +市报 +市北 +市北区 +市编委 +市布 +市廛 +市长 +市长级 +市场 +市场报 +市场部 +市场法 +市场饭 +市场观 +市场化 +市场价 +市场经济 +市场局 +市场科 +市场课 +市场司 +市场型 +市场性 +市场学 +市场准入 +市道 +市地 +市地级 +市地行 +市电 +市府 +市府大楼 +市花 +市话 +市话费 +市话局 +市话网 +市徽 +市级 +市集 +市价 +市郊 +市郊区 +市斤 +市井 +市井气 +市景 +市局 +市局级 +市侩 +市侩主义 +市况 +市里 +市立 +市楼 +市貌 +市面 +市民 +市民林 +市内 +市南区 +市情 +市区 +市扰 +市人大办 +市容 +市容委 +市商委 +市声鼎沸 +市蔬菜办 +市俗化 +市厅级 +市厅县级 +市委 +市委办 +市辖区 +市县 +市县级 +市盈率 +市用制 +市优 +市域 +市运会 +市招 +市镇 +市政 +市政处 +市政府 +市政府办 +市政局 +市政区 +市政厅 +市政协 +市直 +市值 +市志 +市制 +市中区 +市中心 +市属 +示 +示波器 +示导性 +示范 +示范场 +示范车 +示范村 +示范带 +示范带头 +示范地 +示范点 +示范店 +示范方 +示范岗 +示范户 +示范街 +示范课 +示范林 +示范棚 +示范片 +示范旗 +示范区 +示范田 +示范县 +示范乡 +示范校 +示范性 +示范员 +示范园 +示警 +示例 +示弱 +示威 +示威者 +示性类 +示意 +示意图 +示众 +示踪物 +示踪原子 +式 +式调 +式式 +式微 +式样 +式子 +事 +事半功倍 +事倍功半 +事必躬亲 +事变 +事不关己 +事不过三 +事不宜迟 +事出有因 +事典 +事端 +事儿 +事发 +事功 +事故 +事故科 +事故率 +事关 +事关全局 +事关重大 +事过境迁 +事后 +事后性 +事机 +事迹 +事迹展 +事假 +事件 +事理 +事例 +事略 +事前 +事情 +事权 +事实 +事实关 +事实上 +事实型 +事事 +事事处处 +事事躬亲 +事随时变 +事态 +事体 +事无大小 +事无巨细 +事务 +事务部 +事务部长 +事务长 +事务处 +事务局 +事务室 +事务署 +事务所 +事务型 +事务性 +事务员 +事务主义 +事物 +事先 +事项 +事业 +事业部 +事业部制 +事业费 +事业观 +事业心 +事业型 +事业性 +事业有成 +事宜 +事因 +事由 +事与愿违 +事在人为 +事中 +事主 +侍 +侍臣 +侍从 +侍奉 +侍候 +侍郎 +侍弄 +侍女 +侍卫 +侍应 +侍应生 +侍者 +势 +势必 +势不可当 +势不可挡 +势不两立 +势单力薄 +势单力孤 +势将 +势均力敌 +势力 +势利小人 +势利眼 +势能 +势派 +势如破竹 +势所必然 +势所必至 +势态 +势头 +势焰 +势在必进 +势在必然 +势在必行 +视 +视察 +视察团 +视差 +视唱 +视唱练耳 +视窗 +视导员 +视点 +视碟 +视而不见 +视黄醇 +视角 +视角篇 +视界 +视距 +视觉 +视觉美 +视力 +视力表 +视盘 +视盘机 +视频 +视频流 +视若无睹 +视若无人 +视神经 +视死如归 +视听 +视听产品 +视听室 +视听型 +视同 +视同儿戏 +视图 +视网膜 +视为 +视为畏途 +视线 +视像 +视讯 +视野 +视阈 +视紫质 +视作 +视做 +试 +试办 +试播 +试采 +试产 +试车 +试车场 +试穿 +试错性 +试点 +试点村 +试点区 +试点县 +试点校 +试点站 +试电笔 +试法 +试飞 +试飞员 +试飞组 +试岗制 +试工 +试管 +试管婴儿 +试航 +试剂 +试建 +试讲 +试金石 +试举 +试卷 +试刊 +试看 +试漂 +试射 +试生产 +试试 +试试看 +试探 +试探性 +试题 +试跳 +试听 +试图 +试问 +试析 +试想 +试想想 +试销 +试行 +试行法 +试行期 +试训 +试验 +试验班 +试验部 +试验厂 +试验场 +试验车 +试验地 +试验点 +试验段 +试验局 +试验期 +试验区 +试验室 +试验台 +试验田 +试验团 +试验性 +试验园 +试验站 +试验组 +试样 +试药 +试衣 +试衣间 +试营业 +试映 +试映会 +试映式 +试用 +试用本 +试用品 +试用期 +试用制 +试院 +试纸 +试制 +试制品 +试种 +饰 +饰词 +饰件 +饰品 +饰物 +饰演 +饰演者 +室 +室长 +室内 +室内机 +室内剧 +室内乐 +室内赛 +室内外 +室女 +室外 +室温 +室性 +室主任 +恃 +恃才 +恃才傲物 +恃强凌弱 +拭 +拭泪 +拭目以待 +是 +是的 +是非 +是非观 +是非黑白 +是非曲直 +是非题 +是否 +是个儿 +是可忍 +是日 +是时 +是是非非 +是味儿 +是样儿 +是夜 +是役 +是因为 +柿 +柿饼 +柿椒 +柿皮 +柿霜 +柿子 +柿子椒 +柿子皮 +适 +适才 +适当 +适得其反 +适度 +适度从紧 +适度性 +适逢 +适逢其会 +适逢其时 +适航司 +适合 +适可而止 +适口 +适量 +适龄 +适时 +适销 +适销对路 +适销品 +适宜 +适意 +适应 +适应房 +适应力 +适应性 +适应症 +适用 +适用性 +适于 +适者生存 +适值 +适中 +舐 +舐犊之情 +逝 +逝去 +逝世 +逝世者 +逝水 +逝者 +逝者如斯 +铈 +弑 +谥 +释 +释藏 +释愁 +释典 +释放 +释放者 +释怀 +释怀慰情 +释惑 +释迦牟尼 +释减 +释名 +释然 +释文 +释疑 +释义 +嗜 +嗜好 +嗜痂成癖 +嗜杀成性 +嗜食 +嗜书如渴 +嗜睡 +嗜砚者 +嗜欲 +誓 +誓词 +誓俭草 +誓师 +誓师大会 +誓死 +誓图 +誓言 +誓语 +誓愿 +誓约 +誓作 +噬 +噬菌体 +噬脐莫及 +噬人鲨 +收 +收案 +收编 +收兵 +收藏 +收藏版 +收藏家 +收藏界 +收藏品 +收藏史 +收藏业 +收藏者 +收场 +收尘率 +收成 +收储 +收储费 +收贷 +收贷率 +收贷员 +收到 +收订 +收兑 +收发 +收发报 +收发报机 +收发货 +收发人 +收发室 +收发员 +收发组 +收方 +收废 +收费 +收费表 +收费点 +收费法 +收费局 +收费卡 +收费量 +收费路 +收费权 +收费日 +收费厅 +收费仪 +收费员 +收费员证 +收费站 +收费站卡 +收付汇 +收复 +收杆 +收割 +收割机 +收割机厂 +收割机手 +收割期 +收工 +收购 +收购案 +收购点 +收购价 +收购量 +收购权 +收购人 +收购业 +收购员 +收购站 +收购制 +收官 +收官战 +收归 +收函字 +收烘站 +收回 +收回成命 +收回率 +收汇 +收货人 +收获 +收获期 +收集 +收集卡 +收集量 +收集箱 +收集员 +收集站 +收辑 +收监 +收件人 +收缴 +收缴处 +收缴率 +收教所 +收紧 +收据 +收聚 +收看 +收款 +收款处 +收款单 +收款机 +收款人 +收款台 +收款员 +收敛 +收敛式 +收殓 +收留 +收拢 +收录 +收录机 +收率 +收罗 +收买 +收麦 +收棉 +收棉款 +收纳 +收奶车 +收盘 +收盘价 +收起 +收讫 +收秋 +收取 +收容 +收容港 +收容所 +收入 +收入层 +收入额 +收入库 +收入量 +收入权 +收入数 +收入型 +收入者 +收审 +收生婆 +收拾 +收市 +收式 +收视 +收视率 +收受 +收束 +收税 +收税人 +收缩 +收缩率 +收摊 +收摊儿 +收条 +收听 +收听率 +收网 +收尾 +收文 +收文簿 +收息 +收息率 +收悉 +收效 +收效甚微 +收信连 +收信人 +收雪车 +收养 +收养证 +收益 +收益金 +收益率 +收益权 +收益数 +收益者 +收益值 +收音 +收音机 +收银台 +收油 +收载 +收支 +收支额 +收治 +手 +手把手 +手扳 +手板 +手板儿 +手包 +手背 +手本 +手笔 +手臂 +手边 +手表 +手表式 +手柄 +手不释卷 +手册 +手抄 +手抄本 +手车 +手持 +手持式 +手锤 +手戳 +手袋 +手到病除 +手到擒来 +手到擒拿 +手底下 +手电 +手电筒 +手动 +手段 +手儿 +手法 +手风琴 +手感 +手稿 +手工 +手工课 +手工钱 +手工业 +手工业者 +手工艺 +手工艺品 +手鼓 +手挥千军 +手活 +手机 +手机费 +手迹 +手急眼快 +手疾 +手疾眼快 +手记 +手检 +手饺 +手脚 +手巾 +手锯 +手卷 +手绢 +手铐 +手拉手 +手雷 +手里 +手力 +手链 +手榴弹 +手炉 +手锣 +手忙脚乱 +手面 +手模 +手帕 +手气 +手枪 +手枪钻 +手球 +手球馆 +手软 +手上 +手势 +手书 +手书字 +手术 +手术产 +手术刀 +手术费 +手术器 +手术钳 +手术室 +手术台 +手术学 +手术组 +手套 +手套厂 +手提 +手提包 +手提袋 +手提式 +手提箱 +手头 +手头紧 +手头字 +手推车 +手腕 +手腕子 +手握胜券 +手无寸铁 +手无分文 +手舞足蹈 +手下 +手下留情 +手下人 +手写板 +手写体 +手心 +手续 +手续费 +手癣 +手压井 +手眼 +手痒 +手摇 +手艺 +手艺人 +手淫 +手印 +手语 +手谕 +手札 +手掌 +手掌心 +手杖 +手纸 +手指 +手指画 +手指尖 +手指头 +手指字母 +手中 +手肘 +手镯 +手足 +手足无措 +手足之情 +守 +守备 +守备师 +守备团 +守财 +守财奴 +守车 +守城 +守敌 +守法 +守法性 +守恒 +守候 +守护 +守护林 +守护神 +守护者 +守节 +守静 +守旧 +守旧派 +守军 +守口如瓶 +守擂 +守擂者 +守礼门 +守林员 +守灵 +守令 +守门 +守门人 +守门员 +守诺 +守三村 +守山人 +守势 +守岁 +守土有责 +守望 +守望相助 +守望者 +守卫 +守信 +守信用 +守业 +守夜 +守夜人 +守约 +守则 +守株待兔 +首 +首播 +首长 +首倡 +首倡国 +首倡者 +首车 +首创 +首创性 +首创者 +首次 +首当其冲 +首都 +首都在线 +首度 +首恶 +首发 +首发式 +首发站 +首犯 +首访 +首府 +首付款 +首富 +首富乡 +首钢 +首钢队 +首功 +首规委 +首航 +首级 +首肯 +首里城 +首领 +首脑 +首脑会 +首脑级 +首批 +首评 +首汽 +首屈一指 +首群 +首任 +首日 +首日封 +首善 +首善之区 +首饰 +首饰厂 +首首 +首岁 +首尾 +首尾相应 +首位 +首席 +首先 +首相 +首相府 +首选 +首演 +首要 +首义路 +首迎式 +首映 +首映式 +首月 +首战 +首战告捷 +首字音 +寿 +寿斑 +寿比南山 +寿材 +寿辰 +寿诞 +寿棺 +寿光 +寿光鸡 +寿光市 +寿礼 +寿联 +寿面 +寿命 +寿木 +寿宁 +寿宁县 +寿山 +寿山石 +寿数 +寿司 +寿桃 +寿险 +寿险业 +寿县 +寿星 +寿星峰 +寿宴 +寿阳 +寿爷 +寿衣 +寿终 +寿终正寝 +受 +受不了 +受测人 +受潮 +受宠 +受宠若惊 +受处分者 +受挫 +受到 +受得了 +受敌 +受调查者 +受冻 +受罚 +受访者 +受过 +受害 +受害国 +受害人 +受害者 +受寒 +受旱 +受话器 +受贿 +受贿案 +受贿人 +受贿罪 +受惠 +受惠额 +受惠人 +受惠者 +受检 +受奖 +受降 +受教育率 +受教育者 +受戒 +受尽 +受惊 +受精 +受精法 +受精率 +受精卵 +受控 +受苦 +受款方 +受累 +受礼 +受礼者 +受理 +受理费 +受凉 +受领 +受命 +受纳 +受难 +受难日 +受难者 +受骗 +受骗者 +受聘 +受聘者 +受气 +受气包 +受屈 +受权 +受让方 +受让人 +受热 +受热面 +受人牵制 +受辱 +受伤 +受伤者 +受审 +受事 +受试者 +受术者 +受损 +受损失者 +受体 +受听 +受托 +受污染区 +受限 +受刑 +受训 +受训者 +受业 +受益 +受益匪浅 +受益国 +受益户 +受益面 +受益区 +受益券 +受益人 +受益者 +受用 +受用终身 +受冤 +受援地 +受援国 +受孕 +受孕率 +受灾 +受灾户 +受灾面 +受灾区 +受灾县 +受赠者 +受者 +受之有愧 +受制 +受制于人 +受众 +受重 +受助 +受助生 +受资国 +受阻 +受罪 +狩猎 +兽 +兽环 +兽类 +兽力车 +兽面 +兽皮 +兽群 +兽王 +兽行 +兽性 +兽药 +兽药厂 +兽医 +兽医局 +兽医师 +兽医院 +兽医站 +兽欲 +兽中之王 +兽足类 +售 +售报亭 +售菜 +售出 +售蛋亭 +售电量 +售饭机 +售房 +售房方 +售房款 +售后 +售后服务 +售货 +售货棚 +售货亭 +售货员 +售价 +售架 +售假 +售假者 +售粮 +售粮款 +售粮者 +售楼价 +售卖 +售奶亭 +售票 +售票处 +售票窗 +售票点 +售票额 +售票机 +售票口 +售票人 +售票台 +售票厅 +售票箱 +售票员 +售罄 +售书 +售书量 +售完 +售予 +授 +授粉 +授奖 +授戒 +授戒师 +授课 +授课费 +授课人 +授课证 +授命 +授牌 +授旗 +授权 +授权点 +授人以柄 +授受 +授徒 +授衔 +授勋 +授业 +授意 +授予 +授予权 +绶 +绶带 +绶带鸟 +瘦 +瘦长 +瘦干 +瘦骨棱棱 +瘦骨嶙峋 +瘦果 +瘦瘠 +瘦梅 +瘦煤 +瘦肉 +瘦肉率 +瘦肉型 +瘦肉猪 +瘦弱 +瘦瘦的 +瘦西湖 +瘦削 +瘦小 +瘦子 +书 +书案 +书吧 +书包 +书包带 +书报 +书报刊 +书报摊 +书背 +书本 +书本费 +书标 +书册 +书场 +书城 +书橱 +书呆子 +书道会 +书店 +书店业 +书钉 +书堆 +书法 +书法观 +书法集 +书法家 +书法界 +书法史 +书法展 +书贩 +书房 +书房村 +书费 +书稿 +书馆 +书柜 +书海 +书函 +书号 +书后 +书画 +书画会 +书画集 +书画家 +书画界 +书画热 +书画社 +书画厅 +书画院 +书画展 +书迹 +书籍 +书脊 +书记 +书记长 +书记处 +书记员 +书纪 +书价 +书架 +书简 +书界 +书局 +书卷 +书卷气 +书刊 +书刊社 +书口 +书库 +书款 +书立 +书吏 +书林 +书楼 +书录 +书论 +书眉 +书迷 +书面 +书面语 +书名 +书名号 +书目 +书目库 +书目型 +书皮 +书评 +书评版 +书评界 +书签 +书商 +书社 +书生 +书生气 +书生味 +书生之见 +书声 +书市 +书摊 +书摊儿 +书坛 +书坛史 +书套 +书体 +书田 +书亭 +书童 +书屋 +书物 +书系 +书香 +书香门第 +书香气 +书香人家 +书箱 +书协 +书写 +书写体 +书写纸 +书信 +书信集 +书形 +书讯 +书业 +书业界 +书页 +书艺 +书影 +书友 +书苑 +书院 +书杂费 +书札 +书斋 +书斋式 +书摘 +书展 +书账 +书者 +书种 +书桌 +殳 +抒 +抒发 +抒怀 +抒己见 +抒情 +抒情畅怀 +抒情化 +抒情曲 +抒情诗 +抒情性 +抒写 +纾解民困 +叔 +叔伯 +叔父 +叔公 +叔母 +叔婆 +叔叔 +叔侄 +叔祖 +叔祖母 +枢机 +枢机主教 +枢纽 +枢纽局 +枢要 +倏 +倏地 +倏忽 +倏然 +殊 +殊不知 +殊荣 +殊死 +殊死战 +殊途同归 +殊异于世 +梳 +梳篦 +梳理 +梳棉机 +梳头 +梳洗 +梳妆 +梳妆台 +梳子 +淑女 +菽 +菽栗 +疏 +疏布 +疏导 +疏导岗 +疏堵 +疏而不漏 +疏干 +疏肝 +疏港路 +疏忽 +疏忽大意 +疏解 +疏浚 +疏浚船 +疏开 +疏懒 +疏朗 +疏勒河 +疏离 +疏篱 +疏理 +疏漏 +疏密 +疏目 +疏散 +疏失 +疏爽 +疏松 +疏通 +疏泄 +疏淤 +疏于 +疏远 +疏瀹 +疏运 +疏者 +舒 +舒畅 +舒城县 +舒服 +舒缓 +舒筋活血 +舒卷 +舒兰市 +舒曼 +舒眉展眼 +舒前村 +舒柔 +舒声 +舒适 +舒适度 +舒适感 +舒适型 +舒适性 +舒舒服服 +舒坦 +舒同体 +舒婉 +舒心 +舒心畅怀 +舒心美气 +舒展 +舒张 +输 +输变电 +输变电站 +输出 +输出地 +输出方 +输出国 +输出入 +输导 +输电 +输电网 +输电线 +输机 +输家 +输精管 +输量 +输卵管 +输尿管 +输配电 +输气管 +输球 +输入 +输入地 +输入法 +输入国 +输水 +输水道 +输水管 +输水管线 +输水渠 +输水线 +输送 +输送车 +输送带 +输送机 +输送量 +输血 +输血器 +输血式 +输氧 +输氧管 +输液 +输液管 +输液瓶 +输液器 +输液厅 +输液型 +输赢 +输油 +输油管 +输油管道 +输油管线 +输者 +输注 +蔬 +蔬菜 +蔬菜局 +蔬菜区 +蔬菜史 +蔬菜业 +蔬菜站 +秫秸 +秫米 +孰 +孰不可忍 +孰料 +孰能无情 +孰轻孰重 +孰知 +赎 +赎回 +赎金 +赎救 +赎买 +赎罪 +熟 +熟谙 +熟菜 +熟道 +熟地 +熟地黄 +熟读 +熟话 +熟荒 +熟记 +熟客 +熟练 +熟练工 +熟料 +熟路 +熟门熟路 +熟能生巧 +熟年 +熟人 +熟稔 +熟石膏 +熟石灰 +熟识 +熟食 +熟食品 +熟视无睹 +熟手 +熟睡 +熟铁 +熟透 +熟土 +熟悉 +熟橡胶 +熟语 +熟知 +熟字 +暑 +暑季 +暑假 +暑期 +暑气 +暑热 +暑天 +暑瘟 +黍 +黍子 +署 +署长 +署理 +署名 +鼠 +鼠辈 +鼠标 +鼠标器 +鼠疮 +鼠胆 +鼠肚鸡肠 +鼠粪 +鼠腹 +鼠害 +鼠类 +鼠目寸光 +鼠脑 +鼠蹊 +鼠窃狗偷 +鼠曲草 +鼠穴 +鼠药 +鼠疫 +蜀 +蜀道之难 +蜀都 +蜀汉 +蜀江 +蜀锦 +蜀葵 +蜀籁 +蜀犬吠日 +蜀山 +蜀绣 +蜀中 +薯莨 +薯类 +薯条 +曙光 +曙光上村 +曙色 +术 +术后 +术科 +术箩 +术式 +术业 +术语 +戍 +戍边 +戍边人 +戍守 +束 +束缚 +束管 +束流 +束流线 +束米甸村 +束手待毙 +束手就擒 +束手束脚 +束手无策 +束水丁坝 +束运线 +束之高阁 +沭 +沭阳 +沭阳县 +述 +述古 +述评 +述说 +述要 +述职 +树 +树碑立传 +树病 +树杈 +树巢 +树丛 +树大根深 +树大招风 +树袋熊 +树敌 +树兜 +树墩 +树墩子 +树儿 +树蜂 +树干 +树根 +树挂 +树冠 +树花 +树尖 +树胶 +树蕨 +树坑 +树懒 +树立 +树凉儿 +树林 +树林子 +树龄 +树鹨 +树莓 +树苗 +树苗种 +树木 +树木影 +树木园 +树挪死 +树皮 +树群 +树上 +树梢 +树身 +树神 +树藤 +树蛙 +树王 +树窝 +树隙 +树行子 +树形 +树形图 +树丫 +树叶 +树荫 +树影 +树葬 +树障 +树枝 +树枝状 +树脂 +树种 +树桩 +竖 +竖吹 +竖井 +竖立 +竖排 +竖起 +竖琴 +竖体 +竖挑眼 +竖条 +竖线 +竖形 +竖有 +竖子 +恕 +恕其所短 +庶民 +庶母 +庶人 +庶务 +数 +数八法 +数百上千 +数不胜数 +数不着 +数传 +数词 +数得着 +数典忘祖 +数点 +数额 +数九 +数九寒冬 +数九寒天 +数据 +数据舱 +数据化 +数据库 +数据链 +数据网 +数据线 +数据项 +数据源 +数据站 +数据字 +数控 +数来宝 +数理 +数理化 +数理学 +数理学部 +数量 +数量词 +数量化 +数量级 +数量型 +数列 +数论 +数落 +数码 +数米而炊 +数目 +数目字 +数十亿计 +数术 +数术史 +数说 +数位 +数学 +数学会 +数学家 +数学科 +数学课 +数学迷 +数学所 +数学题 +数学系 +数一数二 +数以 +数以百计 +数以千计 +数以万计 +数以亿计 +数易其稿 +数值 +数轴 +数珠 +数字 +数字化 +数字机 +数字式 +数字网 +漱 +漱口 +刷 +刷白 +刷卡机 +刷拉拉 +刷刷 +刷洗 +刷写 +刷新 +刷牙 +刷印科 +刷子 +耍 +耍把戏 +耍笔杆 +耍花枪 +耍花腔 +耍花样 +耍花招 +耍滑 +耍赖 +耍赖皮 +耍流氓 +耍弄 +耍排场 +耍脾气 +耍贫嘴 +耍手段 +耍无赖 +耍心眼儿 +耍嘴皮子 +衰 +衰败 +衰变 +衰草 +衰耗值 +衰减 +衰竭 +衰竭性 +衰老 +衰老期 +衰落 +衰年 +衰弱 +衰势 +衰颓 +衰退 +衰亡 +衰微 +衰翁 +衰颜老态 +衰滞 +摔 +摔打 +摔倒 +摔跟头 +摔交 +摔跤 +摔跤队 +摔跤赛 +摔炮 +摔伤 +甩 +甩掉 +甩花手 +甩花者 +甩开 +甩卖 +甩亩 +甩手 +甩手掌柜 +甩头 +帅 +帅才 +帅哥儿 +帅劲儿 +帅气 +帅位 +帅印 +闩 +拴 +拴马桩 +拴心 +栓 +栓剂 +栓皮 +栓皮栎 +栓塞 +栓子 +涮 +涮洗 +涮羊肉 +双 +双百 +双柏县 +双班制 +双孢菇 +双胞胎 +双蹦灯 +双臂 +双边 +双宾语 +双层 +双层床 +双差生 +双承包制 +双城 +双城记 +双城市 +双城县 +双城镇 +双程 +双程证 +双池 +双垂尾 +双唇 +双唇音 +双打 +双呆 +双带 +双低型 +双顶山 +双多向 +双方 +双酚A +双峰驼 +双峰县 +双凤山 +双幅 +双港镇 +双杠 +双高型 +双勾 +双沟 +双钩 +双拐 +双关 +双关性 +双关语 +双管齐下 +双轨 +双轨制 +双河镇 +双湖 +双画面 +双黄 +双簧 +双簧管 +双基 +双季稻 +双髻山 +双加 +双肩 +双肩包 +双江 +双江村 +双江镇 +双桨 +双脚 +双杰 +双泾 +双泾村 +双井村 +双考 +双困 +双困户 +双立人 +双联 +双辽 +双料 +双林队 +双林寺 +双岭 +双岭村 +双流 +双流县 +双柳河 +双龙 +双龙营乡 +双龙镇 +双楼乡 +双滦区 +双轮架车 +双门 +双面 +双庙乡 +双眸 +双目 +双脑包村 +双女户 +双排座 +双千 +双千户 +双抢 +双桥 +双桥区 +双亲 +双球菌 +双曲拱桥 +双曲面 +双曲线 +双人 +双人床 +双人滑 +双人跳 +双人舞 +双刃 +双刃剑 +双日 +双赛 +双赛制 +双声 +双十 +双十二 +双十佳 +双手 +双数 +双双 +双索面 +双塔 +双台子 +双塘村 +双糖 +双特班 +双特生 +双体 +双停 +双吐 +双腿 +双腕 +双文明 +双溪 +双喜 +双喜临门 +双喜盈门 +双先 +双响 +双向 +双新村 +双星 +双星队 +双行线 +双姓 +双休日 +双旋 +双学 +双学双比 +双学双争 +双学位 +双循环 +双循环赛 +双鸭山 +双鸭山市 +双眼 +双眼皮 +双羊镇 +双阳 +双阳区 +双氧水 +双乙酰 +双翼 +双音 +双引擎 +双赢制 +双拥 +双拥办 +双优 +双语 +双月 +双月刊 +双增长 +双增双节 +双增双提 +双找工 +双争 +双职工 +双重 +双重人格 +双重性 +双周刊 +双子 +双组元 +双尊 +双座 +霜 +霜冻 +霜害 +霜寒 +霜花 +霜露 +霜霉病 +霜期 +霜天 +霜雪 +霜叶 +爽 +爽洁 +爽口 +爽快 +爽朗 +爽利 +爽洌 +爽目 +爽然 +爽身粉 +爽爽然 +爽性 +爽意 +爽直 +谁 +谁个 +谁家 +谁料 +谁是谁非 +谁知 +水 +水岸线 +水坝 +水霸 +水浜 +水保 +水保局 +水保所 +水杯 +水泵 +水泵头 +水笔 +水边 +水标 +水表 +水鳖子 +水兵 +水波 +水玻璃 +水泊 +水泊梁山 +水彩 +水彩画 +水槽 +水草 +水层 +水虿 +水产 +水产场 +水产局 +水产品 +水产业 +水厂 +水车 +水车前 +水成岩 +水城 +水程 +水池 +水尺 +水冲港 +水冲港乡 +水冲式 +水锤 +水葱 +水带 +水到渠成 +水道 +水稻 +水稻所 +水稻田 +水稻种 +水滴 +水滴石穿 +水底 +水地 +水电 +水电部 +水电厂 +水电费 +水电局 +水电路 +水电气 +水电站 +水淀 +水貂 +水调歌头 +水东江 +水东乡 +水洞 +水豆腐 +水痘 +水碓 +水儿 +水法 +水房 +水肥 +水费 +水分 +水粉 +水粉画 +水份 +水浮莲 +水富 +水富站 +水缸 +水钢 +水工 +水沟 +水垢 +水鸪鸪 +水臌 +水管 +水管员 +水罐 +水罐车 +水光 +水光山色 +水柜 +水果 +水果刀 +水果湖 +水果盘 +水果商 +水果摊 +水果糖 +水果业 +水害 +水害区 +水旱 +水旱灾 +水合物 +水河 +水河滩 +水鹤 +水红 +水壶 +水葫芦 +水花 +水花生 +水化 +水化物 +水患 +水荒 +水毁 +水火 +水火难容 +水火无情 +水货 +水机 +水迹 +水基 +水价 +水碱 +水江头村 +水江乡 +水浇地 +水饺 +水窖 +水解 +水解液 +水界 +水晶 +水晶城 +水晶宫 +水晶棺 +水晶壶 +水晶节 +水晶塔 +水晶体 +水井 +水景 +水警 +水警区 +水酒 +水军 +水勘院 +水坑 +水口 +水口镇 +水库 +水库区 +水牢 +水雷 +水力 +水力部 +水力发电 +水力学 +水利 +水利部 +水利处 +水利工程 +水利管 +水利化 +水利界 +水利局 +水利科 +水利史 +水利枢纽 +水利厅 +水利学 +水利业 +水利站 +水帘 +水量 +水疗 +水灵 +水灵灵 +水龄 +水流 +水流量 +水流声 +水龙 +水龙带 +水龙卷 +水龙头 +水龙吟 +水陆 +水陆空 +水陆坦克 +水鹿 +水路 +水轮 +水轮船 +水轮机 +水洛镇 +水落管 +水落石出 +水漫金山 +水煤气 +水门 +水米无交 +水蜜桃 +水绵 +水面 +水磨 +水磨坊 +水磨工夫 +水磨沟 +水磨石 +水墨 +水墨画 +水母 +水南关村 +水能 +水泥 +水泥板 +水泥厂 +水泥城 +水泥钉 +水泥化 +水泥块 +水泥路 +水泥墙 +水泥业 +水泥柱 +水泥砖 +水泥桩 +水碾 +水鸟 +水牛 +水牛儿 +水暖 +水暖组 +水排 +水牌 +水泡 +水泡状 +水疱 +水盆 +水漂 +水瓢 +水平 +水平沟 +水平井 +水平面 +水平如镜 +水平线 +水平型 +水平仪 +水萍 +水气 +水气热 +水汽 +水汽量 +水枪 +水橇 +水禽 +水情 +水球 +水球赛 +水区 +水曲柳 +水渠 +水圈 +水泉县 +水日 +水溶液 +水乳交融 +水色 +水杉 +水上 +水上飞机 +水上居民 +水蛇 +水蛇腰 +水深 +水深火热 +水神 +水生 +水声 +水师 +水虱 +水蚀 +水市乡 +水势 +水手 +水鼠皮 +水刷石 +水笋 +水塔 +水獭 +水獭皮 +水潭 +水塘 +水体 +水天一色 +水田 +水田区 +水田镇 +水桶 +水筒 +水头 +水头乡 +水土 +水土不服 +水洼地 +水汪汪 +水网 +水位 +水位站 +水温 +水文 +水文局 +水文学 +水文站 +水涡 +水污染 +水务局 +水西沟 +水螅 +水洗 +水系 +水下 +水仙 +水仙花 +水仙花头 +水仙簪 +水险 +水线 +水乡 +水乡村 +水箱 +水巷 +水泄不通 +水泻 +水榭 +水星 +水星队 +水杏 +水性 +水性杨花 +水秀园 +水袖 +水锈 +水靴 +水压 +水压机 +水烟 +水烟袋 +水烟斗 +水烟筒 +水淹七军 +水阳镇 +水杨 +水杨酸 +水样 +水舀子 +水翼船 +水银 +水银灯 +水银柱 +水印 +水俣病 +水域 +水源 +水源地 +水源林 +水月庵 +水月庵村 +水月寺镇 +水运 +水灾 +水蚤 +水藻 +水灶 +水泽 +水闸 +水寨 +水战 +水涨船高 +水针 +水针剂 +水圳 +水蒸气 +水蒸汽 +水政 +水质 +水蛭 +水中 +水中捞月 +水肿 +水肿病 +水周 +水珠 +水竹 +水柱 +水专 +水准 +水准器 +水准仪 +水资源 +水资源量 +水族 +水族馆 +水族箱 +税 +税案 +税单 +税额 +税法 +税费 +税费卡 +税风 +税服 +税负 +税赋 +税官 +税管 +税后 +税基 +税稽 +税金 +税警 +税捐 +税卡 +税款 +税利 +税率 +税盲 +税贸 +税名 +税目 +税票 +税企 +税契 +税前 +税容 +税收 +税收额 +税收率 +税收收入 +税务 +税务局 +税务所 +税务所长 +税务员 +税项 +税性 +税银 +税源 +税则 +税者 +税政 +税制 +税种 +睡 +睡床 +睡袋 +睡房 +睡觉 +睡裤 +睡莲 +睡帽 +睡梦 +睡眠 +睡眠疗法 +睡魔 +睡袍 +睡狮 +睡熟 +睡态 +睡乡 +睡相 +睡醒 +睡眼 +睡衣 +睡椅 +睡意 +睡着 +睡姿 +吮 +吮吸 +顺 +顺安 +顺便 +顺差 +顺差额 +顺产率 +顺畅 +顺车 +顺城区 +顺次 +顺从 +顺带 +顺当 +顺道 +顺道儿 +顺德 +顺德市 +顺德县 +顺店乡 +顺丁橡胶 +顺耳 +顺访 +顺风 +顺风吹火 +顺风耳 +顺风球 +顺风转舵 +顺服 +顺杆儿爬 +顺和 +顺乎 +顺乎潮流 +顺乎民心 +顺乎民意 +顺化乡 +顺价 +顺脚 +顺景 +顺境 +顺口 +顺口溜 +顺口溜儿 +顺理成章 +顺利 +顺流而下 +顺路 +顺民 +顺平 +顺平县 +顺其自然 +顺时 +顺势 +顺手 +顺手牵羊 +顺数 +顺水村 +顺水人情 +顺水推舟 +顺顺 +顺顺当当 +顺遂 +顺藤摸瓜 +顺天镇 +顺向 +顺心 +顺序 +顺延 +顺眼 +顺义 +顺义县 +顺义镇 +顺应 +顺之者 +顺治 +顺治二年 +顺治九年 +顺治元年 +顺着 +瞬 +瞬变码型 +瞬即 +瞬间 +瞬时 +瞬时速度 +瞬息 +瞬息万变 +说 +说白 +说白了 +说不定 +说不过去 +说不来 +说不清 +说不清楚 +说不上 +说不着 +说长道短 +说唱 +说唱剧 +说唱文学 +说穿 +说词 +说辞 +说大话 +说到底 +说到家 +说到做到 +说道 +说得来 +说得着 +说定 +说东道西 +说动 +说短论长 +说法 +说法不一 +说服 +说服力 +说服性 +说鬼话 +说合 +说和 +说胡话 +说话 +说话声 +说谎 +说及 +说教 +说尽 +说客 +说空话 +说来 +说来话长 +说老实话 +说理 +说了算 +说梦话 +说明 +说明符 +说明书 +说明文 +说明性 +说亲 +说情 +说情风 +说情人 +说情者 +说三道四 +说实话 +说是 +说书 +说说 +说说笑笑 +说贴 +说头儿 +说瞎话 +说闲话 +说笑 +说笑话 +说笑声 +说新 +说一不二 +说者 +说真的 +烁 +烁烁 +朔 +朔城区 +朔风 +朔望 +朔州 +朔州市 +硕 +硕大 +硕大无比 +硕大无朋 +硕果 +硕果累累 +硕儒 +硕士 +硕士点 +硕士生 +硕鼠 +硕学 +硕学耆老 +搠 +嗽叭声 +丝 +丝氨酸 +丝柏 +丝包线 +丝厂 +丝虫病 +丝绸 +丝绸版 +丝绸业 +丝绸展 +丝绸之路 +丝绸组 +丝带 +丝都 +丝糕 +丝瓜 +丝瓜藤 +丝挂子 +丝光 +丝光布 +丝光剂 +丝毫不少 +丝巾 +丝栗 +丝路 +丝纶 +丝米 +丝绵 +丝绵被 +丝绒 +丝丝 +丝丝缕缕 +丝丝入扣 +丝袜 +丝网 +丝纹 +丝弦 +丝线 +丝织 +丝织版 +丝织品 +丝织业 +丝质 +丝竹 +丝竹管弦 +丝锥 +司 +司长 +司长级 +司乘人员 +司处级 +司法 +司法部 +司法部长 +司法部门 +司法宫 +司法官 +司法界 +司法局 +司法权 +司法所 +司法厅 +司法员 +司号 +司号员 +司机 +司机制 +司级 +司局长 +司局级 +司空见惯 +司库 +司令 +司令部 +司令官 +司令员 +司炉 +司马台 +司门前镇 +司南 +司售人员 +司书 +司署 +司厅级 +司务长 +司线员 +司仪 +司寨村 +私 +私奔 +私弊 +私财 +私藏 +私产 +私娼 +私车 +私车族 +私仇 +私存 +私党 +私德 +私邸 +私定 +私法 +私房 +私房话 +私房钱 +私访 +私费 +私分 +私愤 +私改 +私盖 +私股 +私话 +私货 +私己 +私家 +私家车 +私见 +私交 +私开滥挖 +私刻 +私立 +私利 +私了 +私领 +私密性 +私拿 +私囊 +私念 +私企 +私枪 +私情 +私人 +私商 +私设 +私生活 +私生子 +私事 +私淑 +私塾 +私通 +私图 +私挖滥采 +私下 +私小 +私协 +私泄 +私心 +私心杂念 +私信 +私刑 +私蓄 +私盐 +私盐案 +私营 +私营化 +私营业者 +私营者 +私用 +私有 +私有化 +私有权 +私有者 +私有制 +私语 +私欲 +私摘 +私宅 +私章 +私住 +私自 +咝儿 +思 +思辨 +思辩 +思潮 +思潮澎湃 +思潮起伏 +思忖 +思古 +思考 +思考题 +思考性 +思考者 +思口 +思来想去 +思恋 +思量 +思路 +思虑 +思茅 +思蒙镇 +思谋 +思慕 +思南路 +思南县 +思念 +思前想后 +思亲 +思泉 +思索 +思危 +思维 +思维会 +思维力 +思贤若渴 +思乡 +思乡病 +思想 +思想家 +思想解放 +思想界 +思想库 +思想史 +思想体系 +思想性 +思新求变 +思绪 +思绪万千 +思翼 +思域 +斯 +斯大林 +斯尔比察 +斯方 +斯科普里 +斯拉夫 +斯里兰卡 +斯洛伐克 +斯姆哈纳 +斯宁根 +斯潘塞 +斯人 +斯人长逝 +斯塔万格 +斯坦福 +斯特鲁加 +斯图加特 +斯土 +斯托克顿 +斯托蒙特 +斯瓦诺 +斯威士兰 +斯温登 +斯文 +斯文扫地 +斯希波尔 +厮打 +厮杀 +厮守 +厮咬 +锶 +嘶 +嘶叫 +嘶鸣 +嘶嘶 +嘶哑 +撕 +撕扯 +撕毁 +撕开 +撕裂 +撕破 +撕碎 +撕下 +撕心裂肺 +死 +死板 +死不瞑目 +死不认账 +死沉 +死党 +死得其所 +死敌 +死地 +死对头 +死而复生 +死而后己 +死而后已 +死鬼 +死海 +死胡同 +死缓 +死灰 +死灰复燃 +死魂灵 +死活 +死火山 +死鸡率 +死记 +死记硬背 +死寂 +死角 +死结 +死劲儿 +死扣 +死扣儿 +死里逃生 +死理 +死理儿 +死力 +死路 +死路一条 +死面 +死苗率 +死灭 +死命 +死难 +死难者 +死脑筋 +死鸟 +死皮赖脸 +死棋 +死乞白赖 +死气沉沉 +死契 +死囚 +死区 +死去 +死去活来 +死人 +死伤 +死伤者 +死神 +死尸 +死守 +死水 +死水一潭 +死死 +死胎 +死顽固 +死亡 +死亡率 +死亡区 +死亡线 +死亡者 +死物 +死咸 +死心 +死心塌地 +死心眼 +死心眼儿 +死信 +死刑 +死刑犯 +死讯 +死也不放 +死因 +死硬 +死硬派 +死有余辜 +死于非命 +死战 +死仗 +死账 +死者 +死症 +死滞 +死罪 +巳 +四 +四安镇 +四壁 +四边 +四边地 +四边形 +四不 +四不象 +四步曲 +四部备要 +四部丛刊 +四部曲 +四残 +四处 +四处奔波 +四川 +四川队 +四川籍 +四川省 +四大 +四大发明 +四大皆空 +四大名著 +四到位 +四等 +四点 +四点半 +四点钟 +四叠体 +四定 +四定两审 +四朵金花 +四方 +四方八面 +四方步 +四方街 +四方脸 +四方面军 +四方区 +四分五裂 +四个一 +四顾无人 +四国 +四国岛 +四海 +四海为家 +四害 +四合房 +四合院 +四合院儿 +四合庄 +四呼 +四胡 +四化 +四化建设 +四环 +四环东路 +四环路 +四环素 +四荒 +四会 +四级 +四级品 +四级一户 +四季 +四季常青 +四季豆 +四季度 +四季海棠 +四季青 +四季青村 +四季如春 +四家屯村 +四假 +四角 +四脚八叉 +四脚蛇 +四节制 +四九 +四九年 +四旧 +四跨 +四快 +四郎探母 +四里八乡 +四连败 +四连版 +四联单 +四邻 +四邻八村 +四邻八乡 +四流 +四流中路 +四六文 +四氯化碳 +四轮 +四轮车 +四马台村 +四慢 +四免 +四面 +四面八方 +四面楚歌 +四面开花 +四面体 +四明 +四明山 +四难 +四旁 +四平 +四平八稳 +四平市 +四平乡 +四起 +四千 +四清 +四热 +四人帮 +四人制 +四日 +四散 +四色菊府 +四舍五入 +四射 +四声 +四十分 +四十三分 +四十四分 +四十五分 +四时 +四世同堂 +四书 +四书五经 +四蹄 +四体不勤 +四体书 +四通 +四通八达 +四通桥 +四突破 +四围 +四位一体 +四稳四进 +四无 +四五点 +四五点钟 +四五年 +四五时 +四五月份 +四下 +四仙桌 +四乡八村 +四小 +四小龙 +四心 +四星 +四星级 +四言诗 +四盐矿 +四眼井 +四仰八叉 +四药 +四爷 +四野 +四医大 +四优 +四有 +四月 +四月八 +四月份 +四运 +四则 +四则运算 +四增四减 +四战 +四站村 +四站镇 +四知 +四肢 +四中 +四中全会 +四重唱 +四重奏 +四周 +四周围 +四轴挠性 +四自 +四纵 +四座宾朋 +寺 +寺沟乡 +寺观 +寺里 +寺庙 +寺坡 +寺院 +伺奉 +伺候 +伺机 +伺弄 +似 +似的 +似地 +似懂非懂 +似乎 +似虎非虎 +似理非理 +似龙非龙 +似神非神 +似是而非 +似仙非仙 +似血 +似曾相识 +似真似假 +祀殿 +泗 +泗水 +泗水河 +泗水亭 +泗水县 +泗宿 +泗阳 +泗阳县 +泗州戏 +泗洲 +饲 +饲草 +饲草料 +饲料 +饲料厂 +饲料稻 +饲料块 +饲料款 +饲料粮 +饲料用 +饲料站 +饲养 +饲养场 +饲养场主 +饲养户 +饲养科 +饲养量 +饲养业 +饲养员 +俟 +嗣 +嗣后 +嗣母 +肆 +肆虐 +肆虐无忌 +肆扰 +肆无忌弹 +肆无忌惮 +肆行 +肆言 +肆意 +松 +松柏 +松柏乡 +松绑 +松不得手 +松弛 +松脆 +松动 +松岗 +松岗镇 +松果 +松果体 +松果体素 +松果腺 +松虎 +松花 +松花蛋 +松花湖 +松花湖畔 +松花江 +松鸡 +松江 +松江路 +松江省 +松江县 +松节油 +松紧 +松紧带 +松劲 +松开 +松柯 +松口 +松扣 +松快 +松蓝 +松辽 +松林 +松林区 +松萝 +松毛虫 +松明 +松明牌 +松明子 +松蘑 +松木 +松嫩 +松潘 +松坪村 +松气 +松墙子 +松球 +松泉牌 +松仁 +松日队 +松软 +松散 +松散层 +松散型 +松散状 +松山 +松山乡 +松杉 +松手 +松鼠 +松鼠猴 +松树 +松松 +松松垮垮 +松松散散 +松塔儿 +松涛 +松桃 +松桃县 +松溪县 +松香 +松香水 +松懈 +松蕈 +松烟 +松原 +松藻 +松针 +松枝 +松脂 +松洲 +松洲街 +松滋 +松滋市 +松子 +松子糖 +菘 +菘菜 +嵩明县 +嵩山 +嵩县 +怂 +怂恿 +悚然 +耸 +耸立 +耸然 +耸人听闻 +耸入 +耸耸 +耸峙 +讼 +讼案 +讼词 +讼法庭 +讼事 +讼诉 +讼争 +宋 +宋朝 +宋城 +宋初 +宋词 +宋代 +宋都 +宋干节 +宋古乡 +宋集村 +宋集区 +宋家庄村 +宋江起义 +宋坑 +宋庆龄 +宋人 +宋史 +宋双党 +宋体 +宋体字 +宋元 +宋杖子镇 +宋庄 +宋祖 +诵 +诵读 +诵经 +诵经台 +送 +送报 +送别 +送餐费 +送达 +送电 +送法 +送饭制 +送风机 +送稿 +送给 +送话器 +送还 +送货 +送货郎 +送货人 +送货上门 +送检 +送奖者 +送交 +送客 +送礼 +送礼者 +送粮 +送料机 +送料口 +送命 +送暖 +送气 +送气量 +送亲 +送人情 +送入 +送审 +送审稿 +送声 +送往迎来 +送信 +送信儿 +送行 +送行人 +送样 +送葬 +送者 +送终 +送子观音 +颂 +颂词 +颂德 +颂歌 +颂古非今 +颂诗 +颂扬 +颂语 +嗖 +嗖嗖 +搜 +搜捕 +搜查 +搜查部 +搜肠刮肚 +搜访 +搜刮 +搜集 +搜括有方 +搜罗 +搜求 +搜身 +搜索 +搜索枯肠 +搜索引擎 +搜寻 +搜寻队 +飕飕 +艘 +艘次 +擞 +苏 +苏阿佩港 +苏北 +苏常柴 +苏打 +苏丹 +苏丹港 +苏堤 +苏东 +苏俄 +苏方 +苏干湖 +苏格兰 +苏格兰队 +苏公 +苏公祠 +苏共 +苏古笃 +苏和区 +苏呼米市 +苏家屯 +苏剧 +苏军 +苏库尔 +苏拉威西 +苏黎世 +苏里南 +苏联 +苏联队 +苏鲁 +苏禄省 +苏梅岛 +苏门答腊 +苏木 +苏木里 +苏南 +苏欧司 +苏桥 +苏区 +苏式 +苏轼 +苏铁 +苏铁科 +苏铁类 +苏铁林 +苏铁园 +苏瓦 +苏皖 +苏皖区 +苏维埃 +苏醒 +苏绣 +苏伊玛 +苏伊士 +苏扎克区 +苏中 +苏中区 +苏州 +苏州府志 +苏州河 +苏州码子 +苏州市 +苏子 +酥 +酥脆 +酥梨 +酥裂 +酥麻 +酥软 +酥糖 +酥油 +酥油草 +酥油茶 +酥油灯 +酥油花 +俗 +俗称 +俗成于下 +俗赋 +俗话 +俗话说 +俗家 +俗见 +俗名 +俗气 +俗趣 +俗尚 +俗世 +俗态 +俗套 +俗体字 +俗言俚语 +俗语 +俗者 +俗字 +夙仇 +夙敌 +夙诺 +夙嫌 +夙兴夜寐 +夙愿 +诉 +诉苦 +诉请 +诉权 +诉说 +诉讼 +诉讼案 +诉讼法 +诉讼费 +诉冤 +诉至 +诉诸 +诉诸武力 +诉状 +肃 +肃反 +肃静 +肃立 +肃穆 +肃南 +肃宁 +肃清 +肃然 +肃然起敬 +肃杀 +肃杀逼人 +肃贪倡廉 +涑水 +涑水河 +素 +素不相识 +素材 +素菜 +素菜馆 +素餐 +素常 +素炒 +素称 +素淡 +素缎 +素服 +素鸡 +素笺 +素洁 +素净 +素酒 +素可泰 +素来 +素昧平生 +素描 +素描室 +素朴 +素日 +素色 +素什锦 +素食 +素数 +素席 +素馅 +素心 +素心梅 +素馨花 +素性 +素宣 +素雅 +素养 +素以 +素油 +素有 +素愿 +素志 +素质 +素质型 +素珠 +素族 +速 +速报 +速比 +速成 +速冻 +速冻室 +速度 +速腐剂 +速滑 +速滑队 +速滑馆 +速滑界 +速滑赛 +速记 +速寄 +速决 +速率 +速描 +速射 +速生 +速生林 +速生蝎 +速送 +速洗 +速效 +速效肥料 +速写 +速写式 +速战速决 +宿 +宿弊 +宿草 +宿仇 +宿处 +宿敌 +宿根 +宿怀 +宿疾 +宿将 +宿命 +宿命论 +宿墨 +宿鸟 +宿诺 +宿迁 +宿迁市 +宿舍 +宿舍楼 +宿舍区 +宿务 +宿县 +宿营 +宿营车 +宿豫县 +宿怨 +宿愿 +宿债 +宿州 +宿州市 +宿主 +粟 +粟城乡 +粟米 +粟子 +粟子房镇 +粟子树 +谡 +嗉子 +塑 +塑厂 +塑钢 +塑钢窗 +塑钢门 +塑管 +塑管厂 +塑化剂 +塑胶 +塑胶厂 +塑胶带 +塑胶粒 +塑就 +塑料 +塑料布 +塑料厂 +塑料袋 +塑料管 +塑料壶 +塑料件 +塑料筐 +塑料膜 +塑料盆 +塑料篷 +塑料瓶 +塑料绳 +塑料套 +塑料纸 +塑木 +塑瓶 +塑像 +塑性 +塑造 +溯 +溯根求源 +溯流 +溯源 +溯至 +簌簌 +酸 +酸扒菜 +酸菜 +酸槽 +酸厂 +酸臭 +酸楚 +酸度 +酸酐 +酸根 +酸管 +酸罐 +酸黄瓜 +酸碱 +酸碱度 +酸溜溜 +酸梅 +酸梅汤 +酸奶 +酸牛奶 +酸乳类 +酸软 +酸式盐 +酸酸 +酸酸的 +酸疼 +酸甜 +酸甜苦辣 +酸痛 +酸味 +酸文假醋 +酸雾 +酸辛 +酸性 +酸性岩 +酸雨 +酸雨区 +酸枣 +酸枣糕 +酸枣树 +酸枣汁 +酸枝木 +酸中毒 +蒜 +蒜瓣 +蒜瓣儿 +蒜黄 +蒜苗 +蒜泥 +蒜皮 +蒜薹 +蒜头 +算 +算草 +算尺 +算法 +算计 +算井子 +算命 +算命热 +算盘 +算盘子儿 +算清 +算式 +算是 +算术 +算术级数 +算术课 +算术题 +算数 +算算 +算学 +算账 +算账者 +算总账 +算作 +虽 +虽败犹荣 +虽然 +虽生弗生 +虽说 +虽则 +睢宁 +睢宁县 +睢县 +睢阳区 +濉溪县 +绥 +绥北 +绥滨县 +绥德 +绥东 +绥芬河 +绥芬河市 +绥化 +绥化市 +绥靖 +绥靖区 +绥靖主义 +绥棱 +绥棱县 +绥宁 +绥宁县 +绥阳 +绥阳县 +绥远 +绥中 +绥中县 +隋 +隋朝 +隋代 +隋末 +隋唐 +隋炀帝 +随 +随笔 +随笔集 +随便 +随波逐流 +随处 +随处可见 +随处可闻 +随从 +随大流 +随带 +随到随办 +随到随收 +随地 +随调 +随访 +随风倒 +随风而去 +随风而逝 +随风转舵 +随感 +随耕 +随国 +随和 +随后 +随呼随到 +随机 +随机数 +随机性 +随机应变 +随即 +随叫随到 +随军 +随口 +随来随办 +随请随到 +随群 +随身 +随声附和 +随时 +随时随地 +随手 +随随便便 +随同 +随物赋形 +随乡入乡 +随想 +随想录 +随想曲 +随想式 +随心所欲 +随行 +随行就市 +随形就势 +随意 +随意化 +随意肌 +随意型 +随意性 +随遇而安 +随遇平衡 +随员 +随葬 +随葬品 +随之 +随之而来 +随州 +随州市 +随着 +岁 +岁差 +岁初 +岁寒三友 +岁寒堂 +岁末 +岁暮 +岁首 +岁数 +岁岁 +岁岁枯荣 +岁岁年年 +岁尾 +岁星 +岁修 +岁序 +岁月 +岁月如流 +岁月悠悠 +岁秩 +遂 +遂昌县 +遂川 +遂宁市 +遂平 +遂平县 +遂溪 +遂心 +遂心如意 +遂行 +遂意 +遂愿 +碎 +碎冰机 +碎步 +碎步儿 +碎步子 +碎骨粉身 +碎块 +碎岭 +碎米 +碎末 +碎片 +碎石 +碎石机 +碎雪 +碎银 +碎影 +碎语 +碎砖 +隧 +隧道 +隧道工 +隧道局 +隧道口 +隧洞 +燧石 +穗 +穗儿 +穗建 +穗闻站 +穗选 +穗轴 +穗状 +穗状花序 +穗子 +邃 +邃远 +孙 +孙八案 +孙辈 +孙膑 +孙单驼 +孙儿 +孙甘店乡 +孙岗乡 +孙公司 +孙家庄乡 +孙陆村 +孙男嫡女 +孙女 +孙女婿 +孙桥 +孙桥镇 +孙媳妇 +孙镇村 +孙中山 +孙庄 +孙庄矿 +孙子 +飧 +损 +损兵折将 +损公肥私 +损害 +损耗 +损坏 +损毁 +损人利己 +损伤 +损失 +损失额 +损失费 +损失量 +损失率 +损失险 +损益 +损益表 +笋 +笋干 +笋岗路 +笋瓜 +笋鸡 +笋壳 +笋竹 +笋子 +榫接式 +榫卯 +榫头 +榫眼 +榫子 +唆使 +娑罗树 +娑罗双树 +桫椤 +桫椤树 +梭 +梭镖 +梭鲈 +梭罗树 +梭落坪村 +梭梭 +梭鱼 +梭织 +梭柱 +梭子 +梭子蟹 +梭子鱼 +嗦嗦 +蓑衣 +蓑衣草 +缩 +缩编 +缩尺 +缩短 +缩回 +缩减 +缩聚 +缩量 +缩略语 +缩砂密 +缩手缩脚 +缩水 +缩头 +缩头缩脑 +缩微金报 +缩小 +缩写 +缩写本 +缩衣节食 +缩印 +缩印本 +缩影 +所 +所办 +所部 +所长 +所筹 +所到之处 +所盗物 +所得 +所得税 +所得税款 +所得税率 +所得者 +所感 +所见所闻 +所见者 +所局级 +所里 +所区 +所剩无多 +所剩无几 +所失者 +所说 +所思 +所谓 +所悟 +所想 +所向披靡 +所向无敌 +所幸 +所以 +所以然 +所用 +所有 +所有权 +所有权证 +所有物 +所有者 +所有制 +所在 +所在地 +所在国 +所在区 +所在团 +所指 +所属 +所作所为 +唢呐 +唢呐曲 +索 +索本求源 +索道 +索饵场 +索非亚 +索菲亚 +索购 +索罟湾 +索还 +索贿 +索骥 +索款 +索马里 +索姆 +索赔 +索赔案 +索赔期 +索赔权 +索赔证 +索桥 +索取 +索取权 +索然 +索然无味 +索绕 +索讨 +索韦托 +索性 +索雄 +索要 +索引 +索誉 +索债 +琐 +琐事 +琐碎 +琐琐 +琐闻 +琐细 +琐屑 +琐言赘语 +锁 +锁闭 +锁边机 +锁定 +锁缝机 +锁骨 +锁具 +锁链 +锁链子 +锁麟囊 +锁门 +锁死 +锁头 +锁眼 +锁业 +锁钥 +他 +他处 +他方 +他国 +他家 +他俩 +他律 +他妈的 +他们 +他人 +他山 +他山石 +他山之石 +他物 +他物权 +他乡 +他乡人 +他向化 +他样 +他因 +他用 +它 +它们 +它山之石 +趿 +塌 +塌方 +塌棵菜 +塌落 +塌实 +塌陷 +塌陷地 +塌陷区 +塌腰 +塔 +塔城 +塔吊 +塔顶 +塔尔寺 +塔夫绸 +塔哈尔 +塔哈尔省 +塔河 +塔基 +塔吉克族 +塔架 +塔尖 +塔卡 +塔科马市 +塔兰托 +塔兰托市 +塔里木 +塔里木河 +塔林 +塔龙佳 +塔楼 +塔轮 +塔前村 +塔桥村 +塔山 +塔山堡 +塔山乡 +塔什干 +塔式 +塔斯社 +塔松 +塔塔尔族 +塔台 +塔位 +塔西河 +塔西南 +塔希主义 +塔形 +塔形罐 +塔秀寺 +塔伊兹 +塔院寺 +塔指 +塔中 +塔钟 +塔柱 +塔座 +獭兔 +挞伐 +榻 +榻榻米 +踏 +踏板 +踏板式 +踏遍 +踏步 +踏春 +踏歌 +踏花被 +踏勘 +踏看 +踏平 +踏破 +踏青 +踏青节 +踏入 +踏实 +踏踏实实 +踏头草 +踏雪 +踏雪寻梅 +踏足 +蹋腰 +胎 +胎动 +胎毒 +胎儿 +胎发 +胎记 +胎教 +胎具 +胎毛 +胎膜 +胎盘 +胎生 +胎死腹中 +胎死率 +胎位 +胎衣 +胎婴儿 +台 +台安县 +台板 +台板厂 +台办 +台胞 +台北 +台北队 +台北市 +台北县 +台本 +台笔 +台币 +台布 +台步 +台长 +台车 +台城 +台秤 +台词 +台次 +台岛 +台灯 +台地 +台东区 +台独 +台儿庄 +台方 +台份 +台风 +台风儿 +台港澳 +台港澳侨 +台海 +台怀镇 +台怀镇寺 +台基 +台籍 +台江 +台江区 +台角 +台阶 +台阶式 +台卡 +台历 +台联 +台联会 +台路沟乡 +台门 +台盟 +台面 +台南 +台企 +台前 +台前县 +台钳 +台侨 +台球 +台球城 +台球赛 +台球史 +台球厅 +台球桌 +台区 +台山 +台山市 +台扇 +台商 +台上 +台上村 +台生 +台式 +台式机 +台数 +台塑 +台坛 +台毯 +台套 +台特玛湖 +台湾 +台湾籍 +台湾区 +台湾省 +台湾厅 +台湾团 +台网 +台下 +台橡 +台榭 +台账 +台中 +台钟 +台州 +台州市 +台州湾畔 +台属 +台柱 +台柱子 +台桌 +台资 +台子 +台钻 +台座 +抬 +抬秤 +抬杠 +抬高 +抬价 +抬肩 +抬轿子 +抬举 +抬筐 +抬枪 +抬头 +抬头纹 +苔 +苔干 +苔藓 +苔藓植物 +苔衣 +苔原 +跆拳道 +薹 +太 +太白 +太白山 +太白星 +太保 +太仓 +太仓港 +太仓市 +太仓县 +太仓一粟 +太冲 +太夫人 +太钢 +太滆 +太公 +太古菜 +太古界 +太谷 +太谷县 +太和村 +太和殿 +太和区 +太和县 +太和庄 +太后 +太湖 +太湖石 +太湖县 +太化 +太极 +太极剑 +太极拳 +太极拳队 +太极图 +太监 +太君 +太开路 +太康 +太康县 +太空 +太空舱 +太空车 +太空船 +太空服 +太空局 +太空人 +太空日 +太空水 +太空梭 +太空衣 +太空站 +太煤 +太庙 +太庙乡 +太平 +太平村 +太平店村 +太平鼓 +太平花 +太平间 +太平角 +太平街镇 +太平军 +太平龙头 +太平门 +太平区 +太平山 +太平水缸 +太平梯 +太平天国 +太平无事 +太平县城 +太平洋 +太平洋区 +太平镇 +太婆 +太浦河 +太清宫 +太山庙 +太山庙村 +太上皇 +太上老君 +太师椅 +太师渊路 +太史 +太史公 +太守 +太守府 +太岁 +太太 +太太节 +太铁 +太翁 +太行 +太行红 +太行山 +太行山麓 +太行山区 +太学 +太阳 +太阳城 +太阳村 +太阳党 +太阳岛 +太阳灯 +太阳电池 +太阳渡 +太阳队 +太阳风 +太阳沟 +太阳光 +太阳黑子 +太阳节 +太阳镜 +太阳历 +太阳炉 +太阳膜 +太阳能 +太阳年 +太阳鸟 +太阳日 +太阳神队 +太阳时 +太阳系 +太阳穴 +太阳眼镜 +太阳翼 +太阳雨 +太药 +太爷 +太医 +太阴历 +太原 +太原省 +太原市 +太岳 +太岳区 +太岳山 +太子 +太子参 +太子湾 +太祖 +汰 +汰旧换新 +汰劣 +态 +态度 +态势 +肽 +钛 +钛白粉 +泰 +泰安 +泰安市 +泰币 +泰餐 +泰达队 +泰斗 +泰厄罗阿 +泰方 +泰国 +泰国队 +泰国铢 +泰航 +泰和 +泰和县 +泰姬陵 +泰剧 +泰米尔 +泰宁 +泰宁县 +泰拳 +泰然处之 +泰然自若 +泰山 +泰山北斗 +泰山队 +泰山鸿毛 +泰山区 +泰山市 +泰山压顶 +泰山压卵 +泰顺 +泰顺县 +泰王国 +泰晤士报 +泰晤士河 +泰西村 +泰兴 +泰兴市 +泰语 +泰州 +泰州市 +泰铢 +酞酸酯 +坍 +坍方 +坍缩星 +坍塌 +贪 +贪便宜 +贪财 +贪吃 +贪吃人 +贪大求全 +贪大求洋 +贪得无厌 +贪多 +贪根种心 +贪官 +贪官污吏 +贪贿风 +贪婪 +贪婪无厌 +贪婪性 +贪婪者 +贪利者 +贪恋 +贪青 +贪求 +贪色 +贪奢 +贪生怕死 +贪天之功 +贪图 +贪玩 +贪污 +贪污案 +贪污犯 +贪污腐化 +贪污罪 +贪小失大 +贪心 +贪心不足 +贪欲 +贪欲熏心 +贪赃 +贪赃卖法 +贪赃枉法 +贪者 +贪嘴 +摊 +摊床 +摊档 +摊点 +摊点儿 +摊儿 +摊贩 +摊牌 +摊派 +摊派款 +摊棚 +摊前 +摊摊 +摊头 +摊位 +摊位费 +摊主 +摊子 +滩 +滩边 +滩地 +滩堆 +滩堆乡 +滩海 +滩簧 +滩区 +滩头 +滩涂 +滩涂地 +滩涂式 +滩尾 +滩羊 +滩羊皮 +瘫 +瘫痪 +瘫痪病 +瘫软 +瘫子 +坛 +坛坛罐罐 +坛子 +坛子岭 +昙花 +昙花林 +昙花一现 +谈 +谈不上 +谈道 +谈店乡 +谈定 +谈锋 +谈古论今 +谈固 +谈何容易 +谈虎色变 +谈话 +谈话费 +谈话录 +谈话人 +谈及 +谈论 +谈判 +谈判会 +谈判人 +谈判室 +谈判台 +谈判桌 +谈情说爱 +谈谈 +谈天 +谈天说地 +谈吐 +谈仙岭 +谈笑 +谈笑风生 +谈笑自若 +谈心 +谈心会 +谈心站 +谈兴 +谈兴未尽 +谈资 +覃研精思 +痰 +痰喘 +痰迹 +痰厥 +痰迷心窍 +痰凝 +痰祛湿 +痰桶 +痰盂 +谭 +谭德下村 +谭概 +谭家乡 +谭派 +潭 +潭边 +潭水 +潭头镇 +潭影 +潭峪沟 +潭柘寺 +檀 +檀板 +檀郎 +檀栾 +檀木 +檀皮纸 +檀树 +檀香 +檀香木 +檀香山 +檀香扇 +忐忑 +忐忑不安 +坦 +坦白 +坦白从宽 +坦陈 +坦陈己见 +坦称 +坦承 +坦诚 +坦诚相待 +坦诚相见 +坦荡 +坦方 +坦缓 +坦克 +坦克兵 +坦克师 +坦克团 +坦露 +坦率 +坦帕 +坦佩雷 +坦佩雷市 +坦然 +坦桑 +坦桑尼亚 +坦坦荡荡 +坦途 +坦言 +坦直 +袒 +袒护 +袒露 +袒胸露臂 +钽 +毯子 +叹 +叹词 +叹服 +叹观止矣 +叹气 +叹叹气 +叹为观止 +叹息 +叹惜 +炭 +炭化 +炭画 +炭火 +炭精 +炭精棒 +炭疽 +炭坑 +炭盆 +炭山乡 +炭子冲 +探 +探病 +探测 +探测车 +探测船 +探测器 +探测室 +探测仪 +探测站 +探查 +探察 +探访 +探戈 +探戈曲 +探戈舞 +探家 +探井 +探究 +探究反射 +探空 +探空火箭 +探空仪 +探矿 +探矿权 +探雷 +探路 +探路者 +探秘 +探明 +探囊取物 +探亲 +探亲访友 +探亲假 +探求 +探区 +探伤 +探身 +探视 +探索 +探索期 +探索热 +探索室 +探索性 +探索者 +探讨 +探听 +探头 +探头探脑 +探望 +探望者 +探问 +探险 +探险队 +探险家 +探险片 +探险史 +探险者 +探寻 +探询 +探研 +探幽 +探由 +探鱼仪 +探源 +探赜索隐 +探照灯 +探针 +探子 +碳 +碳60 +碳铵 +碳酐 +碳钢 +碳黑 +碳化硅 +碳化铁 +碳化物 +碳氢 +碳氢化物 +碳素 +碳素钢 +碳塑 +碳塑纤维 +碳酸 +碳酸钡 +碳酸丙烯 +碳酸钙 +碳酸钠 +碳酸气 +碳酸氢铵 +碳酸盐 +碳纤维 +碳酰基 +汤 +汤杯 +汤杯赛 +汤池 +汤匙 +汤歌 +汤更浪队 +汤罐 +汤锅 +汤壶 +汤剂 +汤加 +汤加队 +汤面 +汤那屯 +汤泉 +汤勺 +汤汤 +汤田中 +汤头 +汤头镇 +汤团 +汤药 +汤阴 +汤阴县 +汤尤杯赛 +汤峪镇 +汤浴 +汤圆 +汤圆粉 +汤子 +铴锣 +镗床 +饧糖 +唐 +唐菖蒲 +唐朝 +唐初 +唐代 +唐钢 +唐沟村 +唐古拉山 +唐海 +唐海县 +唐海镇 +唐河县 +唐花 +唐家会村 +唐家庄 +唐卡 +唐末五代 +唐宁街 +唐人 +唐人街 +唐三彩 +唐山 +唐山市 +唐山站 +唐诗 +唐宋 +唐宋词 +唐突 +唐县 +唐庄 +唐庄乡 +唐庄镇 +唐宗 +堂 +堂奥 +堂伯 +堂弟 +堂而皇之 +堂房 +堂哥哥 +堂鼓 +堂号 +堂花 +堂皇 +堂皇正大 +堂姐 +堂姐妹 +堂妹 +堂庙 +堂名 +堂上 +堂叔 +堂堂 +堂堂皇皇 +堂堂正正 +堂屋 +堂兄 +堂兄弟 +堂主 +棠棣 +棠梨 +塘 +塘坝 +塘边 +塘肥 +塘公索 +塘沽 +塘沽港 +塘沽区 +塘荷 +塘马 +塘马村 +塘南 +塘泥 +塘桥 +塘桥镇 +塘市镇 +塘水 +塘厦镇 +塘堰 +搪瓷 +搪塞 +樘 +膛 +膛线 +糖 +糖茶 +糖厂 +糖醋鱼 +糖弹 +糖度 +糖房 +糖分 +糖份 +糖膏 +糖瓜 +糖锅 +糖果 +糖果厂 +糖葫芦 +糖浆 +糖精 +糖块 +糖类 +糖料 +糖萝卜 +糖蜜 +糖尿 +糖尿病 +糖尿病人 +糖人 +糖食 +糖史 +糖丸 +糖稀 +糖馅 +糖心 +糖业 +糖衣 +糖衣炮弹 +糖饴 +糖原 +糖纸 +螳臂当车 +螳螂 +螳螂山 +倘 +倘或 +倘然 +倘若 +倘使 +倘佯 +淌 +躺 +躺倒 +躺柜 +躺椅 +烫 +烫金 +烫面 +烫伤 +烫洗店 +趟 +趟马 +趟趟 +涛 +涛澜 +涛声 +绦虫 +绦子 +掏 +掏空 +掏钱 +掏心战 +掏腰包 +滔 +滔滔 +滔滔不绝 +滔天 +滔天大罪 +滔天罪恶 +滔天罪行 +韬光养晦 +韬略 +饕餮 +饕餮之徒 +洮北区 +逃 +逃奔 +逃避 +逃兵 +逃成 +逃窜 +逃遁 +逃犯 +逃废 +逃荒 +逃汇 +逃课 +逃离 +逃路 +逃命 +逃难 +逃匿 +逃跑 +逃散 +逃生 +逃税 +逃税者 +逃脱 +逃亡 +逃亡者 +逃往 +逃学 +逃逸 +逃之夭夭 +逃走 +桃 +桃城区 +桃符 +桃脯 +桃根 +桃果 +桃红 +桃花 +桃花丛 +桃花村 +桃花节 +桃花雪 +桃花汛 +桃花垠 +桃花鱼 +桃花源 +桃花运 +桃江 +桃江路 +桃胶 +桃李 +桃力庙 +桃林 +桃林口 +桃林镇 +桃仁 +桃色 +桃树 +桃体 +桃条 +桃溪镇 +桃仙 +桃汛 +桃园 +桃源 +桃源村 +桃源梦 +桃源县 +桃子 +陶 +陶仓 +陶瓷 +陶瓷厂 +陶瓷器 +陶瓷展 +陶瓷质 +陶范 +陶公府 +陶管 +陶罐 +陶锅 +陶壶 +陶朗加市 +陶利嘎查 +陶粒 +陶马 +陶庙 +陶庙乡 +陶泥家 +陶片 +陶器 +陶然亭 +陶陶然 +陶土 +陶养 +陶窑 +陶冶 +陶冶性情 +陶艺 +陶艺史 +陶俑 +陶灶 +陶制 +陶醉 +淘 +淘粪者 +淘金 +淘金热 +淘金者 +淘箩 +淘米箩 +淘气 +淘气包 +淘气鬼 +淘汰 +淘汰率 +淘汰品 +淘汰赛 +淘汰赛制 +淘汰式 +淘汰药 +淘汰制 +讨 +讨伐 +讨饭 +讨饭贼 +讨好 +讨还 +讨价 +讨价还价 +讨价声 +讨教 +讨论 +讨论稿 +讨论会 +讨论者 +讨巧 +讨饶 +讨人喜欢 +讨厌 +讨要 +套 +套版 +套包 +套菜 +套餐 +套餐制 +套房 +套房率 +套服 +套耕 +套购 +套管 +套红 +套话 +套话连篇 +套汇 +套间 +套交情 +套近乎 +套裤 +套牢 +套路 +套票 +套曲 +套取 +套裙 +套色 +套色版 +套衫 +套书 +套数 +套塑 +套索 +套套 +套筒 +套筒机 +套鞋 +套型 +套袖 +套印 +套印本 +套用 +套语 +套制 +套种 +套装 +套子 +忒 +特 +特奥会 +特变 +特别 +特别奖 +特别税 +特菜 +特藏部 +特产 +特产税 +特长 +特长班 +特长生 +特出 +特此 +特大 +特大号 +特大型 +特等 +特等功 +特等奖 +特地 +特点 +特定 +特多 +特二 +特二连 +特服号 +特钢 +特格尔 +特工 +特功 +特供品 +特供券 +特古米亚 +特护队 +特惠 +特惠关税 +特混舰队 +特级 +特急件 +特辑 +特技 +特价 +特教 +特教班 +特警 +特警队 +特刊 +特科 +特快 +特快专递 +特宽幅 +特困 +特困村 +特困户 +特困券 +特困生 +特困县 +特困乡 +特困证 +特拉华河 +特拉维夫 +特雷扑托 +特雷维索 +特里尔 +特里尔市 +特立独行 +特立尼达 +特例 +特伦托省 +特马 +特马港 +特马市 +特命 +特内哈帕 +特尼河 +特派 +特派员 +特批 +特贫村 +特聘 +特遣部队 +特遣队 +特勤 +特勤局 +特勤连 +特区 +特屈儿 +特权 +特燃处 +特茹 +特色 +特色菜 +特色牌 +特设 +特赦 +特赦令 +特使 +特事 +特首 +特殊 +特殊钢 +特殊化 +特殊教育 +特殊性 +特搜部 +特为 +特委 +特委会 +特务 +特务连 +特效 +特效药 +特写 +特写大书 +特兴镇 +特型 +特性 +特需品 +特许 +特许费 +特许权 +特许者 +特邀 +特邀函 +特药 +特业 +特一粉 +特一级 +特一连 +特异 +特异功能 +特异性 +特异质 +特意 +特用 +特用林 +特优卡 +特优生 +特有 +特有种 +特约 +特招 +特征 +特征值 +特支费 +特指 +特制 +特质 +特种 +特种兵 +特种部队 +特种工艺 +特重 +特重型 +疼 +疼爱 +疼痛 +腾 +腾鳌 +腾出 +腾达队 +腾飞 +腾飞型 +腾格里 +腾空 +腾空而起 +腾挪 +腾然 +腾腾 +腾骧 +腾跃 +腾越 +腾云驾雾 +腾云楼 +誊黄 +誊清 +誊写 +誊写版 +誊写钢版 +誊印 +滕王阁 +滕州市 +藤 +藤本植物 +藤壶 +藤黄 +藤筐 +藤萝 +藤蔓 +藤木 +藤牌 +藤球 +藤球队 +藤条 +藤箱 +藤椅 +藤制品 +藤子 +剔 +剔出 +剔除 +剔红 +剔庄货 +梯 +梯次 +梯次性 +梯道 +梯地 +梯度 +梯度差 +梯度性 +梯队 +梯恩梯 +梯河 +梯级 +梯坎 +梯田 +梯田化 +梯梧 +梯形 +梯云岭 +梯子 +锑 +锑华 +锑矿 +锑矿石 +踢 +踢打 +踢法 +踢毽 +踢皮球 +踢球 +踢踏舞 +踢踢 +踢腿 +踢腿舞 +啼 +啼饥号寒 +啼鹃 +啼哭 +啼呜 +啼笑皆非 +啼猿 +提 +提案 +提案牌 +提案人 +提案组 +提拔 +提包 +提笔 +提拨 +提倡 +提倡者 +提成 +提出 +提出者 +提纯 +提单 +提到 +提灯 +提兜 +提督 +提法 +提防 +提干 +提纲 +提纲挈领 +提高 +提高型 +提格雷州 +提个醒 +提供 +提供量 +提供者 +提灌 +提灌站 +提盒 +提花 +提货 +提货单 +提货期 +提货人 +提货员 +提及 +提级 +提价 +提交 +提克里特 +提款 +提款机 +提款权 +提篮 +提篮小卖 +提炼 +提炼厂 +提梁 +提留 +提留款 +提名 +提名奖 +提赔 +提起 +提前 +提前量 +提亲 +提琴 +提请 +提取 +提取物 +提神 +提审 +提升 +提示 +提示符 +提示牌 +提示型 +提手 +提手旁 +提水 +提水泵 +提水站 +提速 +提问 +提现 +提线木偶 +提箱 +提携 +提心吊胆 +提醒 +提蓄水 +提要 +提议 +提早 +提擢 +提子 +提租 +鹈鹕 +题 +题跋 +题匾 +题材 +题词 +题辞 +题海 +题海战术 +题花 +题画诗 +题记 +题解 +题款 +题联 +题量 +题录库 +题名 +题名录 +题目 +题诗 +题头 +题图 +题写 +题型 +题意 +题咏 +题旨 +题字 +蹄 +蹄灯 +蹄筋 +蹄窝 +蹄子 +醍醐灌顶 +体 +体表 +体裁 +体彩 +体操 +体操队 +体操房 +体操课 +体操赛 +体层 +体察 +体长 +体尝 +体词 +体罚 +体肤 +体改 +体改办 +体改司 +体改委 +体格 +体工 +体工大队 +体工队 +体会 +体积 +体己 +体检 +体检表 +体检组 +体力 +体力型 +体例 +体联 +体谅 +体量 +体疗 +体毛 +体貌 +体面 +体内 +体能 +体能型 +体膨胀 +体魄 +体腔 +体弱多病 +体弱者 +体虱 +体式 +体事 +体态 +体坛 +体体面面 +体贴 +体贴入微 +体统 +体外 +体委 +体位 +体味 +体温 +体温表 +体温计 +体无完肤 +体悟 +体系 +体系化 +体细胞 +体现 +体现者 +体校 +体协 +体形 +体型 +体性 +体恤 +体癣 +体循环 +体验 +体验型 +体液 +体育 +体育版 +体育部 +体育场 +体育场馆 +体育法 +体育馆 +体育化 +体育会 +体育节 +体育界 +体育局 +体育课 +体育史 +体育运动 +体育周 +体院 +体胀系数 +体制 +体制性 +体质 +体重 +体总 +屉子 +剃 +剃刀 +剃刀鲸 +剃度 +剃发易制 +剃头刀 +剃须刀 +涕 +替 +替班 +替补 +替补队员 +替补席 +替代 +替代品 +替代物 +替换 +替人 +替身 +替死鬼 +替续器 +替罪羊 +嚏喷 +天 +天安门 +天霸 +天崩地裂 +天边 +天兵 +天兵天将 +天禀 +天波 +天不作美 +天才 +天蚕蛾 +天差地别 +天长 +天长地久 +天长日久 +天长市 +天长水阔 +天朝 +天车 +天成 +天秤座 +天池 +天窗 +天赐良机 +天从人愿 +天大 +天道 +天道酬勤 +天灯 +天敌 +天地 +天地会 +天地良心 +天地人 +天地上 +天电 +天冬草 +天都峰 +天鹅 +天鹅湖 +天鹅径 +天鹅绒 +天鹅洲 +天鹅座 +天蛾 +天翻地覆 +天方夜谭 +天分 +天福山 +天府 +天府之国 +天父 +天赋 +天赋人权 +天干 +天罡 +天高地厚 +天高气爽 +天高云淡 +天各一方 +天工 +天公 +天公作美 +天宫 +天沟 +天狗 +天狗螺 +天光 +天锅 +天国 +天寒地冻 +天河 +天后楼 +天后庙 +天候 +天花 +天花板 +天花病 +天花粉 +天花乱坠 +天荒地老 +天荒坪 +天皇 +天昏地暗 +天火 +天机 +天极 +天际 +天价 +天骄 +天街 +天津 +天津队 +天津港 +天津市 +天津站 +天经地义 +天井 +天井式 +天空 +天籁 +天蓝色 +天狼星 +天朗气清 +天老儿 +天老爷 +天理 +天理不容 +天理教 +天亮 +天灵盖 +天岭 +天龙 +天漏 +天路 +天伦之乐 +天轮 +天罗地网 +天麻 +天马行空 +天门 +天门冬 +天门市 +天门县 +天明 +天命 +天母 +天目 +天目山 +天目溪 +天幕 +天南 +天南地北 +天南海北 +天南星 +天年 +天牛 +天怒人怨 +天女散花 +天疱疮 +天棚 +天篷 +天平 +天平秤 +天平集 +天菩萨 +天气 +天气图 +天汽 +天堑 +天桥 +天桥区 +天琴座 +天青 +天青石 +天穹 +天穹型 +天球 +天球瓶 +天球仪 +天趣 +天趣巧成 +天全 +天然 +天然磁铁 +天然村 +天然碱 +天然矿 +天然林 +天然免疫 +天然气 +天然性 +天燃气 +天壤 +天壤之别 +天人合一 +天日 +天色 +天山 +天山南北 +天上 +天神 +天生 +天生丽质 +天生桥 +天师 +天时 +天时地利 +天使 +天书 +天数 +天水 +天水市 +天水围 +天遂人愿 +天塌地陷 +天台里 +天台乌药 +天台县 +天坍地陷 +天坛 +天坛路 +天堂 +天梯 +天体 +天天 +天条 +天庭 +天外有天 +天王 +天王殿 +天王星 +天网恢恢 +天文 +天文馆 +天文历算 +天文社 +天文数字 +天文台 +天文学 +天文学部 +天文学家 +天文学史 +天文钟 +天问 +天下 +天下大乱 +天下大治 +天下第一 +天下客 +天下人 +天下太平 +天下为公 +天下无双 +天下兴亡 +天下者 +天仙 +天险 +天线 +天香国色 +天祥楼 +天象 +天象仪 +天晓得 +天蝎座 +天兴里 +天星村 +天星堰村 +天幸 +天性 +天旋地转 +天涯 +天涯地角 +天涯海角 +天阉 +天眼 +天演论 +天一 +天一池 +天一阁 +天衣无缝 +天义站 +天意 +天鹰座 +天游观 +天有一算 +天宇 +天元 +天元赛 +天元战 +天远 +天灾 +天灾人祸 +天葬 +天葬场 +天造地设 +天真 +天真烂漫 +天真无邪 +天之骄子 +天知道 +天职 +天轴 +天诛地灭 +天竹 +天竺 +天竺葵 +天竺鼠 +天主 +天主教 +天主教会 +天主教派 +天主教堂 +天主教徒 +天主堂 +天柱 +天柱山 +天祝 +天祝县 +天姿国色 +天资 +天子 +天纵不羁 +天作之合 +添 +添补 +添彩 +添丁 +添加 +添加剂 +添乱 +添麻烦 +添马舰 +添漫梁乡 +添设 +添油加醋 +添枝加叶 +添置 +添砖加瓦 +田 +田鳖 +田埠乡 +田产 +田塍 +田畴 +田村 +田地 +田东 +田东县 +田独 +田二河镇 +田夫野老 +田赋 +田埂 +田湖镇 +田黄 +田黄石 +田鸡 +田集乡 +田家会镇 +田家寨 +田间 +田间管理 +田径 +田径场 +田径馆 +田径界 +田径赛 +田径史 +田径运动 +田坎 +田口乡 +田块 +田里 +田联 +田林 +田林县 +田鹨 +田垄 +田螺 +田亩 +田纳西 +田纳西州 +田蓬镇 +田七 +田赛 +田舍 +田鼠 +田笋 +田坛 +田田 +田头 +田头乡 +田协 +田秀才 +田阳 +田阳县 +田野 +田野工作 +田园 +田园梦 +田园区 +田园诗 +田主 +田庄 +田庄乡 +田字草 +田字格 +恬不知耻 +恬淡 +恬静 +恬适 +甜 +甜饼 +甜菜 +甜岛 +甜点 +甜度 +甜瓜 +甜花 +甜椒 +甜角 +甜津津 +甜酒 +甜美 +甜蜜 +甜蜜蜜 +甜面酱 +甜糯 +甜品 +甜食 +甜柿 +甜水 +甜水村 +甜丝丝 +甜酸苦辣 +甜甜 +甜甜的 +甜甜地 +甜甜蜜蜜 +甜头 +甜味 +甜香 +甜言蜜语 +甜叶菊 +甜柚 +甜枣 +甜竹 +甜竹笋 +甜滋滋 +填 +填报 +填表 +填表权 +填补 +填充 +填词 +填垫地 +填方 +填方路基 +填房 +填海区 +填具 +填空 +填料 +填埋场 +填平 +填平补齐 +填喂 +填写 +填鸭 +填鸭法 +填鸭式 +填筑 +填筑量 +忝 +忝列 +腆 +舔 +舔砖 +挑 +挑棒 +挑拨 +挑拨离间 +挑错 +挑大梁 +挑担 +挑灯苦读 +挑灯夜战 +挑动 +挑逗 +挑肥拣瘦 +挑夫 +挑花 +挑拣 +挑毛病 +挑毛拣刺 +挑起 +挑三拣四 +挑三窝四 +挑射 +挑食 +挑水 +挑水者 +挑唆 +挑剔 +挑挑拣拣 +挑衅 +挑衅性 +挑选 +挑战 +挑战权 +挑战赛 +挑战书 +挑战性 +挑战者 +挑战者杯 +挑子 +条 +条/公里 +条案 +条斑 +条播 +条陈 +条次 +条凳 +条法部 +条法司 +条分缕析 +条幅 +条贯 +条规 +条几 +条件 +条件刺激 +条件反射 +条件者 +条据 +条块 +条块分割 +条块结合 +条块状 +条款 +条理 +条理化 +条理性 +条例 +条令 +条缕分明 +条码 +条目 +条绒 +条施 +条石 +条鳎 +条田 +条条 +条条框框 +条条缕缕 +条头 +条文 +条纹 +条形 +条形码 +条约 +条桌 +条子 +迢迢 +迢迢长路 +迢迢地 +迢迢渺渺 +迢迢万里 +迢遥 +笤帚 +笤帚头 +眺 +眺望 +跳 +跳板 +跳帮组 +跳槽 +跳虫 +跳出 +跳荡 +跳动 +跳动声 +跳方 +跳高 +跳级 +跳脚 +跳梁小丑 +跳羚 +跳楼 +跳马 +跳蝻 +跳皮筋儿 +跳棋 +跳伞 +跳伞塔 +跳丧鼓 +跳绳 +跳鼠 +跳水 +跳水池 +跳水队 +跳水赛 +跳台 +跳跳 +跳跳蹦蹦 +跳舞 +跳箱 +跳鞋 +跳远 +跳月 +跳跃 +跳跃式 +跳跃性 +跳越 +跳蚤 +跳蚤市场 +跳闸 +贴 +贴边 +贴饼子 +贴补 +贴补率 +贴兜 +贴费 +贴付 +贴膏 +贴膏剂 +贴花 +贴画 +贴剂 +贴金 +贴紧 +贴近 +贴面 +贴膜车 +贴片 +贴切 +贴身 +贴实 +贴水 +贴题 +贴慰 +贴息 +贴息贷款 +贴现 +贴现率 +贴心 +贴心话 +贴心人 +贴有 +铁 +铁案 +铁案如山 +铁八局 +铁白粉 +铁板 +铁板大鼓 +铁板钉钉 +铁板一块 +铁棒 +铁背鱼 +铁笔 +铁壁铜墙 +铁饼 +铁蚕豆 +铁铲 +铁厂 +铁厂沟镇 +铁冲乡 +铁杵成针 +铁窗 +铁床 +铁锤 +铁打江山 +铁丹 +铁道 +铁道兵 +铁道部 +铁道部长 +铁道线 +铁钉 +铁定 +铁东区 +铁二局 +铁二院 +铁法官 +铁法市 +铁矾土 +铁饭碗 +铁饭碗式 +铁杆儿 +铁镐 +铁工 +铁公鸡 +铁姑娘 +铁箍 +铁骨 +铁骨铮铮 +铁观音 +铁管 +铁规章 +铁轨 +铁柜 +铁棍 +铁锅 +铁汉 +铁汉子 +铁合金 +铁盒 +铁红色 +铁花 +铁画 +铁环 +铁活 +铁蒺藜 +铁纪 +铁甲 +铁甲车 +铁甲舰 +铁架 +铁架床 +铁架子 +铁匠 +铁匠铺 +铁交椅 +铁脚板 +铁筋 +铁军 +铁靠山 +铁科院 +铁矿 +铁矿石 +铁栏 +铁栏杆 +铁栏架 +铁老大 +铁犁 +铁力 +铁力木 +铁力市 +铁镰 +铁链 +铁岭 +铁岭市 +铁流 +铁笼 +铁路 +铁路法 +铁路局 +铁路桥 +铁路史 +铁路网 +铁路线 +铁马 +铁锚 +铁门 +铁门关 +铁面 +铁面无私 +铁幕 +铁鸟 +铁牛 +铁盆 +铁皮 +铁皮大鼓 +铁皮柜 +铁片 +铁片大鼓 +铁铺 +铁骑 +铁器 +铁钎 +铁锹 +铁桥 +铁桥镇 +铁撬棍 +铁青 +铁拳 +铁人 +铁三角 +铁纱 +铁砂 +铁砂弹 +铁山乡 +铁杉 +铁勺 +铁十八局 +铁十六局 +铁十一局 +铁石 +铁石心肠 +铁树 +铁树开花 +铁刷把 +铁水 +铁丝 +铁丝笼 +铁丝网 +铁四局 +铁算盘 +铁索 +铁索桥 +铁锁 +铁锁链 +铁塔 +铁蹄 +铁桶 +铁头 +铁腕 +铁腕人物 +铁委 +铁五局 +铁西 +铁西区 +铁锨 +铁线 +铁线蕨 +铁厢 +铁屑 +铁心 +铁心轮 +铁锈 +铁锈病 +铁血 +铁氧体 +铁一局 +铁翼 +铁闸 +铁栅栏 +铁账本 +铁砧 +铁证 +铁证如山 +铁质 +帖 +帖子 +厅 +厅长 +厅房 +厅级 +厅局长 +厅局级 +厅里 +厅棚 +厅堂 +厅直 +厅属 +厅子 +汀河乡 +汀江 +汀线 +汀洲 +听 +听罢 +听便 +听辨 +听从 +听到 +听而不闻 +听风是雨 +听骨 +听候 +听话 +听话者 +听见 +听讲 +听讲者 +听觉 +听课 +听课率 +听力 +听命 +听凭 +听其言 +听其自然 +听取 +听任 +听神经 +听说 +听天由命 +听听 +听筒 +听喜 +听写 +听信 +听忧 +听由 +听阈 +听者 +听诊器 +听证 +听证会 +听之任之 +听众 +町 +町长 +烃 +烃类 +烃原岩 +廷杖 +亭 +亭长 +亭前 +亭台 +亭台楼阁 +亭台楼榭 +亭亭 +亭亭玉立 +亭榭 +亭榭画廊 +亭子 +亭子间 +庭 +庭长 +庭审 +庭室 +庭外 +庭园 +庭院 +庭院式 +庭中 +停 +停办 +停表 +停泊 +停泊地 +停步 +停产 +停产令 +停车 +停车场 +停车费 +停车楼 +停车率 +停车率降 +停车牌 +停车棚 +停车位 +停车线 +停车站 +停当 +停电 +停电日 +停堆 +停顿 +停发 +停放 +停工 +停航 +停火 +停机 +停机场 +停机库 +停机坪 +停机位 +停建 +停刊 +停靠 +停靠点 +停课 +停留 +停赛 +停驶 +停手 +停水 +停停 +停息 +停下 +停歇 +停薪 +停薪留职 +停业 +停战 +停职 +停止 +停止不前 +停滞 +停滞不前 +停滞论 +挺 +挺拔 +挺拔高古 +挺杆 +挺进 +挺举 +挺括 +挺立 +挺起 +挺身 +挺身而出 +挺挺 +挺胸 +挺直 +梃子 +铤而走险 +艇 +艇长 +艇次 +艇员队 +通 +通报 +通报会 +通病 +通布岛 +通才 +通草 +通查 +通产 +通产省 +通产相 +通常 +通常国会 +通畅 +通车 +通车量 +通车率 +通称 +通城 +通城县 +通出 +通川 +通川郡 +通存通兑 +通达 +通达街 +通道 +通道式 +通敌 +通电 +通电话 +通电率 +通谍 +通牒 +通读 +通风 +通风报信 +通风管 +通风机 +通感 +通高 +通告 +通共 +通古斯 +通关 +通观 +通光率 +通国 +通过 +通过率 +通海 +通航 +通红 +通化 +通化市 +通话 +通话费 +通话量 +通婚 +通货 +通货膨胀 +通缉 +通缉犯 +通缉令 +通佳 +通家口村 +通假 +通间 +通鉴 +通江县 +通今博古 +通经 +通经活络 +通考 +通口 +通栏 +通览 +通力 +通力合作 +通例 +通亮 +通量 +通辽 +通辽市 +通灵 +通令 +通路 +通路率 +通论 +通论式 +通络 +通买 +通卖 +通明 +通盘 +通膨 +通篇 +通票 +通屏 +通铺 +通气 +通气会 +通勤车 +通情达理 +通衢 +通权达变 +通人 +通融 +通山 +通山县 +通商 +通商部 +通身 +通什 +通什市 +通史 +通史类 +通史展 +通式 +通书 +通水 +通顺 +通俗 +通俗化 +通俗类 +通俗性 +通体 +通天 +通天河 +通天尽人 +通条 +通通 +通统 +通透式 +通途 +通脱木 +通往 +通县 +通向 +通宵 +通宵达旦 +通晓 +通心粉 +通信 +通信班 +通信兵 +通信部 +通信法 +通信股 +通信局 +通信科 +通信连 +通信团 +通信网 +通信卫星 +通信线 +通信业 +通信员 +通信站 +通行 +通行费 +通行证 +通性 +通许县 +通讯 +通讯部 +通讯处 +通讯费 +通讯集 +通讯局 +通讯录 +通讯社 +通讯史 +通讯网 +通讯卫星 +通讯业 +通讯员 +通讯站 +通讯组 +通译 +通用 +通用性 +通用字 +通邮 +通榆 +通榆县 +通约 +通约性 +通则 +通胀 +通胀率 +通知 +通知单 +通知栏 +通知书 +通志 +通州 +通州区 +通纂 +嗵嗵 +同 +同安区 +同案 +同案犯 +同班 +同伴 +同胞 +同悲 +同辈 +同比 +同病相连 +同病相怜 +同步 +同步网 +同步卫星 +同步性 +同层 +同场 +同场竞技 +同车人 +同仇敌忾 +同船 +同窗 +同床共枕 +同床异梦 +同村 +同代人 +同党 +同道 +同道者 +同等 +同等学力 +同等学历 +同调 +同调者 +同队 +同方向 +同甘 +同甘共苦 +同甘苦 +同感 +同工同酬 +同工异曲 +同归于尽 +同好 +同贺 +同呼吸 +同化 +同化力 +同化政策 +同化作用 +同话异境 +同辉 +同会 +同伙 +同机 +同级 +同季 +同江 +同居 +同苦 +同苦共乐 +同乐日 +同类 +同类题材 +同类项 +同里 +同理 +同僚 +同龄 +同龄人 +同流合污 +同路 +同路人 +同盟 +同盟党 +同盟国 +同盟会 +同盟军 +同盟者 +同勉会 +同名 +同命相连 +同谋 +同谋犯 +同母兄弟 +同年 +同年底 +同蒲 +同期 +同期性 +同气相求 +同情 +同情话 +同情心 +同情者 +同庆 +同人 +同仁 +同日 +同日而语 +同上 +同声 +同声相应 +同时 +同时代 +同事 +同室 +同室操戈 +同树异枝 +同水平 +同岁 +同台 +同堂 +同土同根 +同位角 +同位素 +同位语 +同温层 +同屋 +同喜 +同喜同乐 +同系物 +同乡 +同乡会 +同乡籍 +同校 +同心 +同心同德 +同心同力 +同心县 +同心协力 +同心圆 +同行 +同行间 +同行业 +同行者 +同形词 +同型号 +同姓 +同性 +同性恋 +同性恋爱 +同性恋者 +同学 +同学会 +同学录 +同样 +同业 +同业公会 +同一 +同一个 +同一律 +同一年 +同一天 +同一性 +同义词 +同义语 +同异 +同意 +同音 +同音词 +同友会 +同于 +同源 +同月 +同在 +同帧 +同志 +同志会 +同志式 +同治 +同种 +同舟垂钓 +同舟共济 +同轴电缆 +同桌 +同族 +同组 +同座 +佟 +佟麟阁 +彤云 +茼蒿 +茼山 +茼山镇 +桐 +桐柏 +桐柏路 +桐柏山 +桐柏县 +桐城市 +桐城县 +桐庐县 +桐木 +桐树 +桐乡 +桐乡市 +桐乡县 +桐油 +桐油树 +桐竹 +桐子 +桐子花 +桐梓县 +砼 +砼薄壁 +砼面板 +铜 +铜氨丝 +铜案 +铜板 +铜板纸 +铜版 +铜版画 +铜版纸 +铜币 +铜匾 +铜钵村 +铜箔 +铜材 +铜车马 +铜城 +铜臭 +铜川 +铜川市 +铜锤 +铜殿 +铜雕 +铜鼎 +铜都 +铜骨 +铜鼓 +铜鼓乡 +铜冠 +铜管 +铜管乐 +铜管乐器 +铜锅 +铜壶 +铜活 +铜活字 +铜价 +铜奖 +铜匠 +铜金矿 +铜筋铁骨 +铜镜 +铜矿 +铜矿村 +铜矿砂 +铜梁县 +铜铃 +铜陵 +铜陵市 +铜绿 +铜锣 +铜锣湾 +铜门 +铜模 +铜铙 +铜排 +铜牌 +铜皮 +铜片 +铜器 +铜钱 +铜钱眼 +铜墙 +铜墙铁壁 +铜仁 +铜仁路 +铜仁市 +铜山 +铜山县 +铜丝 +铜锁 +铜线 +铜像 +铜锈 +铜业 +铜元 +铜韵 +铜制 +铜质 +铜钟 +铜子儿 +童 +童便 +童车 +童车厂 +童车轮 +童服 +童工 +童画 +童话 +童话国 +童话集 +童话库 +童眸 +童男 +童男童女 +童年 +童女 +童仆 +童琴 +童趣 +童山 +童声 +童叟无欺 +童心 +童心未泯 +童星 +童言无忌 +童颜鹤发 +童养媳 +童谣 +童音 +童友 +童贞 +童真 +童稚 +童装 +童装部 +童装厂 +童装展 +童装组 +童子 +童子鸡 +童子军 +童子痨 +酮症 +僮 +潼关 +潼南县 +曈曈 +瞳孔 +瞳人 +瞳仁 +统 +统包 +统编 +统舱 +统称 +统筹 +统筹部长 +统筹费 +统筹兼顾 +统筹金 +统筹款 +统筹学 +统供 +统供率 +统共 +统购 +统购统销 +统观 +统管 +统管共用 +统归 +统合 +统计 +统计表 +统计处 +统计法 +统计局 +统计局长 +统计师 +统计司 +统计厅 +统计学 +统计学家 +统计员 +统检 +统考 +统括 +统揽 +统揽全局 +统领 +统率 +统配 +统配电 +统裙 +统摄 +统收统支 +统帅 +统帅部 +统统 +统辖 +统销 +统一 +统一部 +统一党 +统一观 +统一路 +统一论 +统一体 +统一性 +统一院 +统一战线 +统一制 +统战 +统战部 +统战界 +统招生 +统制 +统治 +统治阶级 +统治区 +统治权 +统治者 +捅 +捅娄子 +捅捅 +桶 +桶装 +桶子 +筒 +筒壁 +筒车 +筒裤 +筒裙 +筒式 +筒瓦 +筒状花 +筒子 +筒子河 +筒子楼 +筒子院 +恸哭 +恸哭声 +痛 +痛痹 +痛不欲生 +痛彻 +痛斥 +痛楚 +痛处 +痛打 +痛悼 +痛点 +痛定思痛 +痛风 +痛改前非 +痛感 +痛恨 +痛悔 +痛击 +痛经 +痛经宁 +痛觉 +痛哭 +痛哭流涕 +痛哭声 +痛苦 +痛苦期 +痛苦状 +痛快 +痛快淋漓 +痛骂 +痛切 +痛失 +痛史 +痛痛快快 +痛惜 +痛下决心 +痛心 +痛心疾首 +痛痒 +痛痒相关 +痛饮 +痛责 +痛症 +偷 +偷车贼 +偷盗 +偷盗者 +偷电 +偷渡 +偷渡船 +偷渡客 +偷渡梦 +偷渡者 +偷工减料 +偷合苟容 +偷鸡摸狗 +偷奸取巧 +偷奸耍滑 +偷看 +偷抗税 +偷抗税案 +偷窥 +偷懒 +偷梁换柱 +偷猎 +偷猎者 +偷漏税 +偷拿者 +偷骗税 +偷窃 +偷窃者 +偷情 +偷人 +偷税 +偷税案 +偷税额 +偷税款 +偷私渡 +偷逃 +偷逃税 +偷天换日 +偷听 +偷偷 +偷偷摸摸 +偷袭 +偷闲 +偷香窃玉 +偷越 +偷运 +偷者 +偷走 +头 +头坝 +头班 +头班车 +头版 +头版头条 +头部 +头彩 +头筹 +头槌 +头寸 +头道场 +头等 +头等舱 +头等功 +头顶 +头顶部 +头额 +头儿 +头发 +头发菜 +头发丝 +头发屑 +头份厂 +头盖骨 +头高头低 +头功 +头攻 +头骨 +头关 +头号 +头花 +头昏 +头昏脑涨 +头昏脑胀 +头昏眼花 +头奖 +头角 +头角峥嵘 +头巾 +头颈 +头颈部 +头盔 +头盔厂 +头里 +头领 +头楼 +头颅 +头马 +头面人物 +头名 +头目 +头脑 +头年 +头帕 +头皮 +头破血流 +头钱 +头球 +头人 +头生 +头绳 +头虱 +头式 +头饰 +头数 +头套 +头疼 +头疼脑热 +头天 +头条 +头痛 +头痛医头 +头头 +头头脑脑 +头头是道 +头陀 +头尾 +头衔 +头像 +头胸部 +头绪 +头癣 +头雁 +头羊 +头油 +头晕 +头晕目眩 +头晕眼花 +头罩 +头重脚轻 +头状花序 +头子 +投 +投案 +投保 +投保额 +投保人 +投保者 +投奔 +投笔从戎 +投鞭断流 +投标 +投标法 +投标者 +投拆 +投产 +投诚 +投弹 +投敌 +投递 +投递处 +投递员 +投放 +投放量 +投稿 +投稿人 +投工 +投河 +投机 +投机倒把 +投机家 +投机取巧 +投机商 +投机性 +投机者 +投建 +投降 +投降主义 +投井 +投井下石 +投考 +投靠 +投篮 +投劳 +投劳折资 +投量 +投袂而起 +投拍 +投票 +投票点 +投票率 +投票权 +投票人 +投票箱 +投票站 +投票者 +投其所好 +投枪 +投亲靠友 +投球 +投融资 +投入 +投入比 +投入口 +投入量 +投入率 +投入品 +投入者 +投射 +投身 +投审会 +投师 +投石问路 +投食 +投手 +投书 +投书者 +投送 +投诉 +投诉案 +投诉部 +投诉车 +投诉点 +投诉量 +投诉率 +投诉人 +投诉书 +投诉台 +投诉厅 +投诉信 +投诉性 +投诉站 +投诉者 +投宿 +投桃报李 +投向 +投行 +投药 +投影 +投影城 +投影机 +投影片 +投影仪 +投缘 +投运 +投之以桃 +投掷 +投中 +投资 +投资部 +投资部长 +投资额 +投资法 +投资方 +投资国 +投资家 +投资局 +投资款 +投资类 +投资量 +投资率 +投资区 +投资热 +投资人 +投资商 +投资署 +投资司 +投资团 +投资性 +投资业 +投资者 +投子 +透 +透辟 +透不过气 +透彻 +透雕 +透顶 +透粉 +透风 +透风窗 +透光 +透光度 +透过 +透河井 +透镜 +透亮 +透亮度 +透亮性 +透漏 +透露 +透明 +透明度 +透明化 +透明胶 +透明人 +透明体 +透明性 +透平机 +透气 +透热疗法 +透射 +透湿 +透视 +透视片 +透视缩影 +透视图 +透视学 +透剔 +透透的 +透析机 +透支 +凸 +凸凹 +凸凹不平 +凸版 +凸出 +凸镜 +凸轮 +凸轮轴 +凸面镜 +凸起 +凸透镜 +凸凸凹凹 +凸纹 +凸显 +凸现 +凸字形 +秃 +秃鹫 +秃岭 +秃杉 +秃子 +突 +突变 +突变性 +突出 +突出者 +突地 +突发 +突发性 +突防 +突飞猛进 +突贯 +突击 +突击队 +突击队员 +突击手 +突击团 +突击性 +突击月 +突进 +突厥 +突马特 +突尼斯 +突尼斯队 +突尼斯市 +突破 +突破点 +突破口 +突破性 +突起 +突然 +突然性 +突如其来 +突入 +突突突 +突围 +突兀 +突袭 +突显 +突现 +突眼症 +图 +图案 +图案画 +图案色 +图板 +图版 +图本 +图标 +图表 +图册 +图带 +图典 +图钉 +图儿 +图尔 +图尔比勒 +图尔卡纳 +图尔库 +图尔库市 +图法赫 +图稿 +图格里克 +图画 +图画课 +图画书 +图画文字 +图集 +图籍 +图记 +图件 +图鉴 +图解 +图景 +图卡什 +图雷斯基 +图例 +图灵机 +图卢兹 +图鲁兹 +图录 +图曼斯基 +图们 +图面 +图名 +图谋 +图谋不轨 +图片 +图片集 +图片库 +图片社 +图片展 +图谱 +图强 +图示 +图式 +图书 +图书城 +图书馆 +图书馆学 +图书奖 +图书节 +图书界 +图书区 +图书日 +图书室 +图书业 +图书展 +图书站 +图说 +图索骥式 +图腾 +图腾式 +图腾物 +图文 +图文并茂 +图象诗 +图像 +图像型 +图形 +图样 +图章 +图阵 +图纸 +图志 +图制 +徒 +徒步 +徒步走 +徒弟 +徒工 +徒劳 +徒劳无功 +徒劳无益 +徒然 +徒手 +徒手操 +徒孙 +徒刑 +徒有虚名 +徒子徒孙 +涂 +涂布 +涂层 +涂改 +涂料 +涂膜剂 +涂抹 +涂片 +涂刷 +涂污 +涂鸦 +涂脂抹粉 +涂装 +途 +途程 +途经 +途径 +途中 +屠 +屠场 +屠刀 +屠夫 +屠户 +屠戮 +屠杀 +屠苏 +屠宰 +屠宰厂 +屠宰场 +屠宰点 +屠宰户 +屠宰税 +土 +土岸 +土坳村 +土邦 +土包 +土包子 +土堡 +土堡子村 +土豹 +土崩瓦解 +土鳖 +土拨鼠 +土布 +土蚕 +土层 +土产 +土城 +土城镇 +土池 +土村 +土党参 +土道 +土堤仓 +土地 +土地法 +土地改革 +土地奖 +土地局 +土地庙 +土地名 +土地权 +土地权属 +土地日 +土地爷 +土地证 +土豆 +土堆 +土堆儿 +土尔扈特 +土尔其 +土耳其 +土耳其队 +土法 +土方 +土房 +土肥所 +土肥站 +土匪 +土坟 +土蜂 +土茯苓 +土改 +土岗 +土疙瘩 +土工 +土公路 +土沟村 +土管 +土管员 +土棍 +土果 +土豪 +土豪劣绅 +土壶 +土话 +土皇帝 +土黄 +土黄色 +土蝗 +土货 +土机器 +土籍 +土家女 +土家人 +土家族 +土建 +土建工程 +土焦 +土坎 +土炕 +土坷垃 +土坑 +土窟洞 +土块 +土雷子 +土里土气 +土沥青 +土岭乡 +土鲮鱼 +土路 +土伦 +土霉素 +土门 +土模 +土默川 +土木 +土木工程 +土牛 +土暖气 +土偶 +土炮 +土坯 +土坯棚 +土坪 +土坡 +土气 +土枪 +土墙 +土丘 +土渠 +土壤 +土壤层 +土人 +土容重 +土山 +土山村 +土少石多 +土生土长 +土石 +土石堤 +土石方 +土司 +土台 +土特 +土特产 +土特产品 +土体 +土头土脑 +土豚 +土卫六 +土味 +土温 +土屋 +土物 +土戏 +土星 +土腥气 +土腥味 +土腥味儿 +土性 +土燕 +土窑 +土窑洞 +土音 +土油灯 +土语 +土葬 +土灶 +土政策 +土纸 +土制 +土质 +土种 +土著 +土著人 +土专家 +土砖 +土砖房 +土族 +吐 +吐翠 +吐儿齐 +吐尔尕特 +吐蕃 +吐根 +吐根素 +吐谷浑 +吐故纳新 +吐哈 +吐露 +吐露真情 +吐鲁番 +吐鲁番市 +吐绿 +吐沫 +吐纳 +吐气扬眉 +吐蕊 +吐沙拉乡 +吐绶鸡 +吐丝 +吐诉 +吐穗 +吐血 +吐艳 +吐字 +钍 +兔 +兔场 +兔唇 +兔儿爷 +兔毫 +兔毛 +兔皮 +兔肉 +兔死狗烹 +兔死狐悲 +兔饲料 +兔娃 +兔王 +兔业 +兔园 +兔种 +兔子 +菟丝子 +湍 +湍急 +湍流 +团 +团拜 +团拜会 +团部 +团长 +团场 +团城 +团代会 +团队 +团队票 +团费 +团粉 +团服 +团干 +团干部 +团歌 +团工委 +团徽 +团会后 +团伙 +团伙处 +团伙化 +团级 +团籍 +团结 +团结报 +团结村 +团结党 +团结湖 +团结乡 +团结星 +团结一心 +团结友爱 +团聚 +团课 +团里 +团粒 +团练 +团年饭 +团脐 +团旗 +团区委 +团日 +团扇 +团扇鳐 +团省委 +团十三大 +团史 +团市委 +团体 +团体操 +团体票 +团体赛 +团体性 +团体照 +团团 +团团伙伙 +团团圆圆 +团团转 +团委 +团县委 +团小组 +团校 +团音 +团鱼 +团员 +团员证 +团圆 +团圆饭 +团圆会 +团圆年 +团藻 +团章 +团政委 +团支部 +团职 +团中央 +团州委 +团子 +团总支 +团组织 +推 +推本溯源 +推波助澜 +推测 +推车 +推车人 +推陈出新 +推诚相见 +推迟 +推斥力 +推崇 +推出 +推辞 +推弹 +推导 +推倒 +推动 +推动力 +推动性 +推动者 +推断 +推而广之 +推翻 +推杆 +推广 +推广部 +推广车 +推广会 +推广奖 +推广率 +推广性 +推广员 +推广站 +推后 +推及 +推荐 +推荐分 +推荐奖 +推荐书 +推荐者 +推介 +推介会 +推进 +推进会 +推进剂 +推进器 +推进型 +推进组 +推旧出新 +推举 +推开 +推理 +推力 +推力器 +推论 +推磨 +推拿 +推前 +推敲 +推却 +推让 +推三托四 +推三阻四 +推搡 +推手 +推说 +推算 +推涛作浪 +推土机 +推土机手 +推推 +推托 +推脱 +推委会 +推诿 +推想 +推向 +推销 +推销部 +推销嫂 +推销商 +推销性 +推销员 +推卸 +推心置腹 +推行 +推行面 +推选 +推延 +推移 +推优 +推重 +推重比 +推注法 +推子 +推走 +颓 +颓败 +颓废 +颓风 +颓靡 +颓势 +颓唐 +颓萎 +颓垣断壁 +腿 +腿部 +腿带 +腿肚子 +腿骨 +腿脚 +腿腕子 +腿子 +退 +退办单 +退保 +退避 +退避三舍 +退兵 +退步 +退场 +退潮 +退出 +退党 +退掉 +退而不休 +退而结网 +退二进三 +退防 +退稿 +退稿费 +退格符 +退耕还田 +退管 +退管会 +退后 +退化 +退还 +退换 +退回 +退火 +退伙 +退货 +退机率 +退居 +退居二线 +退库 +退款 +退路 +退赔 +退票 +退票处 +退票费 +退亲 +退却 +退让 +退热药 +退色 +退烧 +退烧针 +退守 +退税 +退税款 +退税率 +退税制 +退缩 +退堂 +退堂鼓 +退位 +退伍 +退伍兵 +退伍费 +退伍军人 +退席 +退休 +退休返聘 +退休费 +退休金 +退休日 +退休者 +退休证 +退学 +退养 +退役 +退役证 +退意 +退职 +退职金 +退资 +蜕 +蜕变 +蜕化 +蜕化变质 +褪 +褪尽 +褪色 +吞 +吞并 +吞服 +吞没 +吞灭 +吞蚀 +吞食 +吞噬 +吞噬细胞 +吞吐 +吞吐量 +吞吞吐吐 +吞武里 +吞咽 +吞云吐雾 +屯 +屯兵 +屯昌 +屯昌县 +屯城 +屯河 +屯积 +屯垦 +屯口村 +屯留 +屯田 +屯头村 +屯溪 +屯扎 +屯子 +豚鼠 +臀 +臀部 +臀尖 +臀鳍 +臀痛穴 +臀疣 +氽 +托 +托出 +托词 +托辞 +托底 +托儿 +托儿所 +托福 +托付 +托故 +托管 +托管费 +托管人 +托呼秋山 +托举 +托举串 +托克托 +托克托县 +托克逊 +托克逊县 +托拉司 +托拉斯 +托莱多 +托莱多城 +托老 +托老所 +托老院 +托伦省 +托罗累斯 +托名 +托尼 +托偶 +托派 +托盘 +托漂 +托瓶 +托人 +托生 +托市 +托收 +托斯卡纳 +托塔尔 +托托拉镇 +托叶 +托幼 +托运 +托运处 +托运房 +托运人 +托子 +拖 +拖把 +拖靶 +拖驳 +拖不拖欠 +拖布 +拖车 +拖车队 +拖车费 +拖船 +拖床 +拖沓 +拖带 +拖地 +拖斗 +拖儿带女 +拖挂车 +拖后腿 +拖家带口 +拖垮 +拖拉 +拖拉机 +拖拉机厂 +拖累 +拖轮 +拖锚 +拖泥带水 +拖配 +拖期 +拖欠 +拖欠额 +拖三拉四 +拖拖拉拉 +拖网 +拖鞋 +拖鞋兰 +拖延 +拖曳 +拖曳阵 +拖油瓶 +拖运 +拖住 +脱 +脱保 +脱产 +脱出 +脱出症 +脱氮菌 +脱发 +脱肛 +脱稿 +脱钩 +脱光 +脱轨 +脱机 +脱缰 +脱缰之马 +脱胶 +脱节 +脱臼 +脱空 +脱口道出 +脱口而出 +脱困 +脱离 +脱离速度 +脱粒 +脱粒机 +脱硫 +脱落 +脱盲 +脱毛 +脱毛症 +脱帽 +脱模 +脱坯 +脱皮 +脱皮树 +脱贫 +脱贫村 +脱贫记 +脱贫率 +脱贫史 +脱贫致富 +脱身 +脱失 +脱收台 +脱手 +脱水 +脱俗 +脱胎 +脱胎换骨 +脱逃 +脱逃率 +脱位 +脱误 +脱险 +脱销 +脱卸式 +脱氧 +脱氧剂 +脱颖 +脱颖而出 +脱脂 +脱脂棉 +脱籽 +驮 +驮戥 +驮戥村 +驮轿 +驮篮山 +驮篓 +驮骡 +驮马 +驮子 +陀螺 +坨 +坨子 +沱茶 +沱江 +驼 +驼背 +驼队 +驼峰 +驼铃 +驼鹿 +驼马 +驼群 +驼绒 +驼色 +驼员 +驼子 +砣子 +鸵鸟 +鸵鸟场 +鸵鸟政策 +酡 +妥 +妥当 +妥甸镇 +妥善 +妥商 +妥实 +妥帖 +妥妥帖帖 +妥协 +妥协性 +椭圆 +椭圆体 +椭圆形 +拓 +拓本 +拓荒 +拓荒者 +拓垦 +拓宽 +拓蓝纸 +拓片 +拓扑图 +拓扑学 +拓展 +唾 +唾骂 +唾沫 +唾弃 +唾手可得 +唾液 +唾液腺 +哇 +哇哇 +娃 +娃儿 +娃娃 +娃娃脸 +娃娃生 +娃娃书 +娃娃鱼 +娃子 +挖 +挖补 +挖槽 +挖法 +挖方 +挖掘 +挖掘点 +挖掘机 +挖坑 +挖空心思 +挖苦 +挖泥船 +挖潜 +挖墙脚 +挖肉补疮 +挖沙 +挖沙者 +挖土 +洼 +洼地 +洼里乡 +洼田 +蛙 +蛙池 +蛙池子 +蛙苗 +蛙鸣 +蛙人 +蛙泳 +瓦 +瓦板房 +瓦池 +瓦刺 +瓦当 +瓦刀 +瓦店镇 +瓦尔德斯 +瓦尔登湖 +瓦尔米吉 +瓦房 +瓦房村 +瓦房店市 +瓦房化 +瓦釜雷鸣 +瓦岗集 +瓦岗军 +瓦戈庄村 +瓦戈庄镇 +瓦工 +瓦工活 +瓦哈卡 +瓦胡岛 +瓦灰 +瓦脊 +瓦加 +瓦加杜古 +瓦匠 +瓦解 +瓦解冰消 +瓦口 +瓦块 +瓦拉纳西 +瓦莱塔 +瓦蓝 +瓦楞 +瓦楞纸 +瓦楞子 +瓦砾 +瓦隆 +瓦隆人 +瓦垄 +瓦垄子 +瓦伦西亚 +瓦盆 +瓦片 +瓦片子 +瓦圈 +瓦舍 +瓦斯 +瓦斯灯 +瓦松 +瓦头 +瓦头村 +瓦屋 +瓦屋山 +瓦檐 +瓦窑堡 +佤 +佤族 +佤族人 +袜 +袜底儿 +袜套 +袜筒 +袜楦 +袜子 +腽肭脐 +腽肭兽 +歪 +歪打正着 +歪道 +歪风 +歪风邪气 +歪理 +歪路 +歪门邪道 +歪七扭八 +歪曲 +歪歪扭扭 +歪歪斜斜 +歪斜 +外 +外版书 +外办 +外包 +外包装 +外包装盒 +外币 +外边 +外表 +外宾 +外部 +外部性 +外埠 +外财 +外侧 +外层 +外差 +外长 +外长级 +外厂 +外场 +外钞 +外出 +外传 +外村人 +外存 +外错角 +外带 +外道 +外敌 +外地 +外地人 +外电 +外电路 +外调 +外毒素 +外耳 +外耳道 +外耳门 +外方 +外房 +外分泌 +外稃 +外敷 +外感 +外岗 +外高加索 +外高桥 +外公 +外公切线 +外功 +外骨骼 +外挂 +外观 +外国 +外国货 +外国籍 +外国人 +外国语 +外果皮 +外海 +外航 +外号 +外弧 +外化 +外环线 +外患 +外汇 +外汇额 +外汇法 +外汇局 +外汇率 +外汇券 +外货 +外祸 +外籍 +外加 +外嫁 +外江 +外交 +外交部 +外交部长 +外交辞令 +外交大臣 +外交官 +外交家 +外交界 +外交史 +外交特权 +外交团 +外交学 +外角 +外接圆 +外界 +外借 +外借库 +外经 +外经贸 +外经贸部 +外经贸厅 +外经贸委 +外经外贸 +外经委 +外景 +外景地 +外军 +外卡 +外刊 +外科 +外科性 +外科学 +外科学术 +外壳 +外客 +外空 +外寇 +外快 +外廓 +外来 +外来词 +外来工 +外来户 +外来货 +外来妹 +外来人 +外来语 +外劳 +外力 +外联 +外联处 +外联司 +外伶仃岛 +外流 +外露 +外路 +外轮 +外贸 +外贸局 +外貌 +外蒙 +外秘 +外秘级 +外面 +外面儿光 +外派 +外盘期货 +外胚层 +外皮 +外婆 +外婆桥 +外戚 +外企 +外迁 +外强 +外强中干 +外墙 +外侨 +外勤 +外圈 +外人 +外三环 +外伤 +外伤性 +外商 +外商会 +外设 +外肾 +外生 +外甥 +外甥女 +外省 +外省人 +外史 +外市 +外事 +外事部 +外事处 +外事局 +外事司 +外事组 +外势 +外水 +外孙 +外孙女 +外孙子 +外胎 +外滩 +外逃 +外套 +外听道 +外头 +外围 +外围层 +外围赛 +外围展 +外委会 +外文 +外文局 +外文课 +外文书 +外文系 +外屋 +外侮 +外侮内乱 +外务 +外务部 +外务省 +外弦 +外县 +外线 +外乡 +外乡人 +外相 +外向 +外向度 +外向型 +外项 +外销 +外销额 +外销量 +外协 +外邪 +外泄 +外心 +外星人 +外行 +外行话 +外行人 +外形 +外型 +外姓 +外宣 +外延 +外延性 +外研所 +外焰 +外业 +外衣 +外移 +外溢 +外翼 +外因 +外因论 +外引 +外引内联 +外营力 +外用 +外语 +外语课 +外语片 +外语系 +外域 +外遇 +外援 +外缘 +外源 +外源性 +外院 +外运 +外运量 +外在 +外在化 +外债 +外展神经 +外罩 +外痔 +外专局 +外资 +外资额 +外资股 +外资局 +外资司 +外资委 +外资型 +外族 +外族人 +外祖父 +外祖母 +弯 +弯道 +弯度 +弯弓 +弯矩 +弯路 +弯翘 +弯曲 +弯曲形变 +弯头 +弯弯 +弯弯处 +弯弯的 +弯弯曲曲 +弯腰 +弯月形 +弯子 +剜 +湾 +湾沟 +湾内 +湾畔 +湾中 +湾仔 +湾仔海 +湾仔修顿 +蜿蜒 +豌豆 +豌豆粉 +豌豆黄 +豌豆角 +丸 +丸剂 +丸药 +丸子 +纨绔子弟 +完 +完备 +完备化 +完毕 +完璧 +完璧归赵 +完成 +完成率 +完成者 +完蛋 +完稿 +完工 +完好 +完好无缺 +完好无损 +完好无恙 +完结 +完结率 +完了 +完满 +完美 +完美无缺 +完全 +完全式 +完全小学 +完全性 +完全叶 +完人 +完善 +完善化 +完事 +完熟 +完税 +完税率 +完完全全 +完小 +完整 +完整性 +完中 +完钻 +玩 +玩处 +玩儿 +玩儿命 +玩忽职守 +玩花招 +玩火 +玩火自焚 +玩家 +玩具 +玩具厂 +玩具店 +玩具柜 +玩具商 +玩具业 +玩乐 +玩命 +玩弄 +玩偶 +玩牌 +玩赏 +玩世不恭 +玩耍 +玩玩 +玩味 +玩物 +玩物丧志 +玩笑 +玩艺 +玩艺儿 +玩意 +玩意儿 +顽 +顽痹 +顽敌 +顽钝 +顽匪 +顽固 +顽固不化 +顽固派 +顽固性 +顽疾 +顽军 +顽抗 +顽民 +顽皮 +顽强 +顽石 +顽童 +顽痛 +顽癣 +顽者 +顽症 +烷基 +烷烃 +宛 +宛城 +宛城区 +宛平县 +宛如 +宛若 +宛似 +宛田 +宛西 +宛转 +挽 +挽词 +挽辞 +挽带 +挽额 +挽歌 +挽回 +挽救 +挽具 +挽力 +挽联 +挽留 +挽诗 +挽幛 +晚 +晚班 +晚报 +晚报社 +晚辈 +晚餐 +晚场 +晚车 +晚稻 +晚点 +晚饭 +晚风 +晚归 +晚会 +晚会风 +晚会局 +晚婚 +晚婚率 +晚间 +晚节 +晚景 +晚礼服 +晚练 +晚明 +晚年 +晚期 +晚清 +晚清四王 +晚晴 +晚秋 +晚秋作物 +晚上 +晚生 +晚生代 +晚市 +晚霜 +晚唐 +晚眺 +晚霞 +晚香玉 +晚宴 +晚疫病 +晚邮报 +晚育 +晚育率 +晚装 +晚自习 +莞 +莞籍 +婉 +婉而多讽 +婉告 +婉拒 +婉曲 +婉劝 +婉谢 +婉言 +婉言谢绝 +婉约 +婉转 +惋惜 +绾 +皖 +皖北 +皖东 +皖江 +皖南 +皖平 +皖维 +畹町 +畹町河 +畹町桥 +碗 +碗厂乡 +碗橱 +碗柜 +碗口 +碗筷 +万 +万安 +万安渡 +万安县 +万般 +万般无奈 +万宝山 +万宝镇 +万博 +万博省 +万不得已 +万埠镇 +万达队 +万灯耀园 +万吨级 +万恶 +万发林 +万分 +万佛塔 +万夫莫当 +万福 +万福街 +万古 +万古长存 +万古长青 +万古常青 +万古流芳 +万古留芳 +万古留辉 +万古千秋 +万鼓催春 +万贯家财 +万国 +万国宫 +万国邮联 +万和镇 +万鹤 +万户侯 +万户千家 +万花山 +万花筒 +万家灯火 +万家寨 +万架次率 +万箭穿心 +万劫不复 +万劫不渝 +万斤户 +万金 +万金油 +万锦滩 +万景台区 +万籁俱寂 +万里长城 +万里长征 +万里迢迢 +万里无云 +万历 +万岭 +万流景仰 +万隆 +万绿丛中 +万绿湖 +万绿园 +万马奔腾 +万马齐喑 +万民 +万木成林 +万木争翠 +万难 +万难不却 +万能 +万能夹 +万能胶 +万能论 +万年 +万年历 +万年青 +万年松 +万年县 +万念俱灰 +万宁 +万宁城 +万宁市 +万千 +万顷 +万全 +万全县 +万全之策 +万泉河 +万人空巷 +万三蹄 +万山 +万山岛 +万舍村 +万盛 +万盛区 +万世流芳 +万世永存 +万事 +万事大吉 +万事俱备 +万事如意 +万事通 +万寿路 +万寿寺 +万寿无疆 +万水千山 +万顺路 +万死不辞 +万死一生 +万岁 +万头攒动 +万万 +万万岁 +万维网 +万无一失 +万物 +万溪冲 +万仙楼 +万县 +万县市 +万向节 +万象 +万象纷呈 +万象更新 +万象新 +万欣 +万幸 +万一 +万应锭 +万应灵丹 +万有引力 +万语千言 +万元 +万元户 +万元郎 +万载县 +万丈深渊 +万众 +万众一心 +万众瞩目 +万洲 +万嘱咐 +万紫千红 +腕 +腕儿 +腕骨 +腕力 +腕上 +腕式 +腕子 +腕足 +汪 +汪甸乡 +汪家寨 +汪清 +汪清县 +汪塘 +汪汪 +汪伪政权 +汪洋 +汪洋大海 +汪洋恣肆 +亡 +亡党 +亡故 +亡国 +亡国奴 +亡魂 +亡魂丧胆 +亡灵 +亡命 +亡命之徒 +亡人 +亡身 +亡羊 +亡羊补牢 +亡佚 +王 +王八 +王堡村 +王朝 +王储 +王村 +王村乡 +王大湾 +王单驼 +王道 +王法 +王妃 +王府 +王府港 +王府井 +王府井站 +王鸽 +王公 +王宫 +王沟村 +王官 +王冠 +王国 +王侯 +王后 +王集乡 +王加乡 +王家 +王家坝 +王家坝村 +王家堡 +王家堡村 +王家村 +王家畈乡 +王家棚 +王家坪 +王家田 +王家沱 +王家营 +王家庄 +王坚固村 +王浆 +王老五 +王陵 +王码 +王母娘娘 +王年 +王牌 +王坡村 +王桥村 +王庆坨镇 +王权 +王舍人镇 +王石凹矿 +王室 +王水 +王孙 +王铜 +王位 +王屋山 +王爷 +王业 +王英 +王营 +王营子 +王者 +王者师 +王庄村 +王子 +王子型 +王族 +王座 +网 +网吧 +网袋 +网底 +网点 +网兜 +网队 +网纲 +网格 +网罟 +网海 +网号 +网际 +网架 +网巾 +网具 +网开三面 +网开一面 +网口 +网扣 +网篮 +网联 +网笼 +网路 +网罗 +网络 +网络版 +网络化 +网络结构 +网络卡 +网络迷 +网络式 +网络型 +网络状 +网膜 +网目 +网娘 +网屏 +网球 +网球场 +网球队 +网球馆 +网球迷 +网球拍 +网球赛 +网球手 +网上 +网市镇 +网坛 +网头 +网网 +网围栏 +网纹 +网窝 +网线 +网箱 +网校 +网协 +网眼 +网页 +网友 +网员 +网栅 +网站 +网址 +网中人 +网中之鱼 +网柱 +网状 +网状林 +网状脉 +网子 +往 +往常 +往返 +往返票 +往访 +往访国 +往复 +往后 +往回 +往届 +往来 +往年 +往日 +往圣 +往时 +往事 +往往 +往昔 +枉 +枉法 +枉费 +枉费心机 +枉然 +枉渚 +惘然 +惘然若失 +妄 +妄称 +妄动 +妄念 +妄图 +妄下雌黄 +妄想 +妄想型 +妄言 +妄语 +妄自菲薄 +妄自演绎 +妄自尊大 +忘 +忘本 +忘掉 +忘恩 +忘恩负义 +忘乎所以 +忘怀 +忘记 +忘年交 +忘年情 +忘年之交 +忘情 +忘却 +忘我 +忘我工作 +忘性 +忘义 +旺 +旺苍县 +旺季 +旺期 +旺起 +旺盛 +旺盛期 +旺旺 +旺销 +望 +望尘比步 +望尘莫及 +望城 +望城县 +望城乡 +望穿秋水 +望都 +望都县 +望而却步 +望而生畏 +望而止步 +望风捕影 +望风而逃 +望风披靡 +望果节 +望湖楼 +望花 +望花区 +望见 +望江路 +望孔 +望梅止渴 +望门寡 +望女成凰 +望平台 +望桥 +望塔 +望台 +望天树 +望天田 +望望 +望文生义 +望闻问切 +望仙坡 +望新 +望眼欲穿 +望洋兴叹 +望虞河 +望远镜 +望月 +望月村 +望月湖 +望诊 +望子成才 +望子成材 +望子成龙 +望族 +危 +危城 +危辞耸听 +危殆 +危地马拉 +危房 +危房棚 +危改 +危害 +危害面 +危害性 +危机 +危机感 +危机四伏 +危及 +危急 +危禁品 +危境 +危旧房 +危旧房屋 +危局 +危困 +危楼 +危陋 +危陋平房 +危难 +危若累卵 +危亡 +危亡之渐 +危险 +危险度 +危险率 +危险品 +危险期 +危险区 +危险物品 +危险性 +危险源 +危象 +危崖 +危崖之巅 +危言耸听 +危在旦夕 +危重 +威 +威逼 +威尔士 +威风 +威风凛凛 +威风扫地 +威海 +威海市 +威海卫 +威虎山 +威拉 +威力 +威立队 +威廉斯堡 +威猛 +威名 +威尼斯 +威宁 +威宁县 +威迫 +威权 +威舍 +威舍镇 +威慑 +威慑力 +威士忌 +威士忌酒 +威势 +威斯林 +威望 +威武 +威武不屈 +威吓 +威县 +威胁 +威胁利诱 +威胁论 +威胁性 +威信 +威信扫地 +威兴我荣 +威严 +威仪 +威震 +偎 +偎依 +偎倚 +逶迤 +隈 +葳蕤 +微 +微闭 +微波 +微波炉 +微波通信 +微波灶 +微薄 +微不足道 +微处理机 +微处理器 +微创 +微词 +微辞 +微笛 +微电机 +微电脑 +微电子 +微电子学 +微电子业 +微雕 +微调 +微冻室 +微毒 +微肥 +微分 +微分学 +微风 +微服 +微服私访 +微俯 +微格 +微观 +微观世界 +微观性 +微光 +微乎其微 +微黄 +微机 +微机化 +微机室 +微机网 +微积分 +微贱 +微降 +微结构 +微澜 +微利 +微利价 +微粒 +微亮 +微量 +微量元素 +微露 +微米 +微秒 +微妙 +微末 +微软 +微软科学 +微弱 +微山湖 +微山县 +微升 +微生物 +微生物学 +微缩 +微凸阵 +微瓦 +微微 +微微克 +微细 +微瑕 +微咸 +微小 +微笑 +微行 +微型 +微型车 +微型机 +微血管 +微醺 +微循环 +微言 +微音器 +微涨 +微重力 +微珠 +微醉 +煨 +巍峨 +巍然 +巍然屹立 +巍山县 +巍巍 +为 +为伴 +为此 +为非作歹 +为辅 +为副 +为富不仁 +为公 +为怪 +为官 +为官一任 +为官者 +为国分忧 +为国捐躯 +为过 +为害 +为何 +为虎傅翼 +为虎作伥 +为画者 +为了 +为邻 +为民除害 +为民请命 +为民造福 +为名 +为难 +为期 +为期不远 +为奇 +为人 +为人处事 +为人师表 +为人注意 +为人作嫁 +为啥 +为生 +为什么 +为时 +为时不晚 +为时过晚 +为时过早 +为时尚早 +为时已晚 +为首 +为数 +为数不多 +为数不少 +为数很少 +为数甚少 +为数众多 +为所欲为 +为我所用 +为伍 +为先 +为由 +为政 +为政不廉 +为政者 +为政之道 +为之动容 +为之一变 +为之一喜 +为之一新 +为之一振 +为止 +为重 +为主 +为准 +为着 +为尊者讳 +韦 +韦斯顿 +韦驮殿 +圩场 +圩日 +圩垸 +圩子 +围 +围脖 +围脖儿 +围捕 +围场 +围场路 +围衬 +围城 +围堤 +围堵 +围攻 +围观 +围观者 +围湖造田 +围护 +围歼 +围建 +围剿 +围界 +围巾 +围聚 +围垦 +围垦区 +围困 +围困战 +围栏 +围猎 +围拢 +围盘 +围屏 +围棋 +围棋队 +围棋界 +围棋赛 +围棋手 +围棋王 +围墙 +围裙 +围绕 +围三缺一 +围绳 +围塘机 +围网 +围魏救赵 +围屋 +围岩 +围堰 +围障 +围住 +围追 +围桌 +围着 +围子 +围嘴儿 +围坐 +帏幕 +违 +违背 +违法 +违法案 +违法必究 +违法不究 +违法乱纪 +违法性 +违法者 +违反 +违反者 +违犯 +违犯者 +违规 +违规者 +违纪 +违纪案 +违纪者 +违禁 +违禁机 +违禁品 +违禁物品 +违抗 +违控 +违例 +违诺 +违宪 +违心 +违心之论 +违约 +违约金 +违章 +违章户 +违章率 +违章人 +违章者 +违者 +违者必究 +桅 +桅灯 +桅顶 +桅杆 +桅樯 +涠西南 +唯 +唯才是举 +唯独 +唯金牌论 +唯恐 +唯理论 +唯利是图 +唯利唯金 +唯名论 +唯命是从 +唯模仿论 +唯其如此 +唯实 +唯条件论 +唯唯 +唯唯诺诺 +唯我独尊 +唯我主义 +唯物 +唯物论 +唯物论者 +唯物史观 +唯物主义 +唯心 +唯心论 +唯心史观 +唯心主义 +唯一 +唯一性 +唯有 +帷 +帷幔 +帷幕 +帷子 +惟 +惟独 +惟恐 +惟利是图 +惟妙惟肖 +惟命是从 +惟它独尊 +惟我独尊 +惟有 +维 +维持 +维持费 +维持会 +维持性 +维度 +维多利亚 +维尔京 +维尔纽斯 +维港 +维管束 +维和 +维和费 +维和旅 +维护 +维护费 +维护会 +维护税 +维护型 +维护者 +维继 +维加岛 +维拉猜 +维里 +维纶 +维棉布 +维妙维肖 +维尼龙 +维琴查队 +维琴察队 +维权 +维生素 +维生素A +维生素B +维生素C +维生素D +维生素E +维生素甲 +维斯瓦 +维他命 +维文 +维吾尔 +维吾尔族 +维系 +维新 +维新派 +维修 +维修班 +维修部 +维修厂 +维修点 +维修队 +维修费 +维修工 +维修性 +维修业 +维修站 +维修者 +维亚 +维也纳 +维也纳市 +维业 +维誉至诚 +维州 +维族 +维族舞 +潍坊 +潍坊市 +潍县 +伟 +伟岸 +伟大 +伟光乡 +伟绩 +伟晶岩 +伟力 +伟人 +伟业 +伟业队 +伪 +伪报 +伪币 +伪标 +伪钞 +伪称 +伪军 +伪君子 +伪科学 +伪劣 +伪麻黄碱 +伪满 +伪冒 +伪品 +伪气功 +伪善 +伪书 +伪随机码 +伪团长 +伪县长 +伪造 +伪造罪 +伪者 +伪证 +伪证罪 +伪政权 +伪中队长 +伪装 +伪装物 +伪足 +伪作 +尾 +尾巴 +尾部 +尾大不掉 +尾灯 +尾端 +尾断 +尾根 +尾骨 +尾花 +尾桨 +尾矿 +尾矿库 +尾翎 +尾流 +尾闾 +尾毛 +尾评 +尾鳍 +尾气 +尾欠 +尾砂 +尾砂尘 +尾砂滩 +尾身 +尾声 +尾市 +尾数 +尾水门机 +尾水平台 +尾水渠 +尾随 +尾翼 +尾音 +尾蚴 +尾羽 +尾闸乡 +尾追 +纬 +纬度 +纬纱 +纬书 +纬线 +苇 +苇箔 +苇草 +苇丛 +苇海 +苇河 +苇湖梁 +苇浆 +苇帘 +苇屏 +苇塘 +苇席 +苇芽 +苇叶 +苇锥子 +苇子 +委 +委办局 +委方 +委管 +委管局 +委会 +委靡 +委靡不振 +委内瑞拉 +委派 +委派制 +委培生 +委曲 +委曲求全 +委屈 +委任 +委任书 +委任制 +委任状 +委身 +委实 +委托 +委托单 +委托方 +委托费 +委托机 +委托人 +委托书 +委托性 +委婉 +委以 +委以重任 +委员 +委员长 +委员会 +委员会制 +委员证 +委中 +委罪 +炜 +洧川 +娓娓 +娓娓道来 +娓娓动听 +娓娓而谈 +诿 +诿过于人 +诿责 +萎 +萎靡 +萎靡不振 +萎缩 +萎陷疗法 +萎蔫 +猥辞 +猥亵 +卫 +卫兵 +卫城 +卫城山 +卫东区 +卫队 +卫队长 +卫国 +卫国干城 +卫护 +卫辉 +卫辉市 +卫家湾 +卫检 +卫理公会 +卫矛 +卫冕 +卫冕战 +卫冕者 +卫勤 +卫生 +卫生部 +卫生部长 +卫生城 +卫生带 +卫生队 +卫生法 +卫生防疫 +卫生费 +卫生化 +卫生间 +卫生界 +卫生巾 +卫生局 +卫生裤 +卫生球 +卫生日 +卫生山 +卫生设备 +卫生室 +卫生所 +卫生厅 +卫生丸 +卫生网 +卫生系 +卫生香 +卫生星 +卫生学 +卫生学会 +卫生衣 +卫生员 +卫生院 +卫生站 +卫生镇 +卫生纸 +卫士 +卫士长 +卫视 +卫戍 +卫戍区 +卫校 +卫星 +卫星舱 +卫星城 +卫星国 +卫星赛 +卫星站 +未 +未必 +未卜先知 +未尝 +未成年 +未成年人 +未定 +未果 +未婚 +未婚夫 +未婚妻 +未饥先食 +未经 +未竟 +未决 +未决犯 +未来 +未来馆 +未老先衰 +未了 +未了轩 +未眠 +未免 +未名湖 +未名湖畔 +未能 +未能免俗 +未始 +未遂 +未遂案 +未遂犯 +未央宫 +未央湖 +未央路 +未有 +未雨绸缪 +未愈 +未遭 +未曾 +未知 +未知量 +未知数 +位 +位处 +位次 +位点 +位高权重 +位居 +位列 +位列前茅 +位能 +位势 +位数 +位移 +位于 +位置 +位置图 +位庄乡 +位子 +位尊 +味 +味醇 +味道 +味道儿 +味儿 +味精 +味觉 +味蕾 +味素 +味同嚼蜡 +味腴书室 +畏 +畏惧 +畏惧感 +畏难 +畏强欺弱 +畏首畏尾 +畏缩 +畏缩不前 +畏途 +畏友 +畏罪 +胃 +胃癌 +胃病 +胃部 +胃肠 +胃穿孔 +胃蛋白酶 +胃窦 +胃镜 +胃口 +胃溃疡 +胃扩大症 +胃扩张 +胃酸 +胃脘 +胃下垂 +胃腺 +胃炎 +胃液 +尉官 +尉犁 +尉犁县 +尉氏县 +谓 +谓词 +谓语 +喂 +喂奶 +喂食 +喂养 +喂养量 +渭北 +渭河 +渭南 +渭南市 +渭水 +渭源 +渭源县 +蔚 +蔚成 +蔚成风气 +蔚成新风 +蔚蓝 +蔚蓝色 +蔚然成风 +蔚然兴起 +蔚山 +蔚为 +蔚为大观 +蔚为壮观 +蔚县 +蔚秀园 +慰 +慰藉 +慰劳 +慰缭子 +慰灵塔 +慰问 +慰问袋 +慰问电 +慰问金 +慰问款 +慰问品 +慰问团 +慰问信 +慰问者 +慰问组 +慰唁 +魏 +魏碑 +魏茨 +魏都区 +魏公村 +魏国 +魏晋 +魏善庄 +魏善庄乡 +魏塘镇 +魏屯乡 +魏武帝 +魏县 +温 +温蔼 +温爱 +温饱 +温饱线 +温饱型 +温病学 +温补 +温差 +温床 +温存 +温带 +温得和克 +温度 +温度表 +温度差 +温度计 +温哥华 +温恭谦和 +温故求新 +温故知新 +温和 +温和派 +温厚 +温火 +温江 +温江县 +温觉 +温课 +温控 +温控型 +温冷线 +温岭 +温岭市 +温尼伯 +温尼伯市 +温暖 +温暖车 +温暖如春 +温棚 +温情 +温情脉脉 +温泉 +温泉市 +温泉水 +温泉乡 +温泉浴 +温泉镇 +温热 +温柔 +温柔乡 +温软 +温润 +温莎宫 +温升 +温湿 +温湿度 +温室 +温室群 +温书 +温水 +温水村 +温顺 +温台 +温汤浸种 +温甜幽远 +温吞 +温吞水 +温婉 +温温 +温文尔雅 +温习 +温馨 +温馨感 +温血动物 +温驯 +温州 +温州市 +瘟病 +瘟神 +瘟疫 +瘟疹 +瘟猪疫 +文 +文安 +文安县 +文案 +文宝 +文保 +文陂乡 +文本 +文本化 +文笔 +文博 +文博院 +文不对题 +文部大臣 +文部省 +文才 +文采 +文昌 +文昌阁 +文昌市 +文昌鱼 +文场 +文成 +文城镇 +文池楼 +文丑 +文传 +文辞 +文从字顺 +文丛 +文萃 +文粹 +文存 +文代会 +文纛 +文登 +文登市 +文电 +文牍 +文牍主义 +文法 +文法学 +文房四宝 +文风 +文风不动 +文峰区 +文赋 +文稿 +文告 +文革 +文格 +文蛤 +文工团 +文工团员 +文官 +文冠果 +文管 +文过饰非 +文海 +文豪 +文号 +文核 +文化 +文化班 +文化部 +文化部长 +文化财 +文化层 +文化潮 +文化城 +文化处 +文化法 +文化饭 +文化宫 +文化观 +文化馆 +文化户 +文化角 +文化教育 +文化街 +文化节 +文化界 +文化局 +文化课 +文化力 +文化路 +文化买办 +文化区 +文化圈 +文化权 +文化人 +文化日 +文化衫 +文化史 +文化室 +文化厅 +文化性 +文化学 +文化学术 +文化园 +文化展 +文化站 +文化周 +文化组 +文汇 +文火 +文集 +文家 +文件 +文件库 +文件名 +文教 +文教部 +文教界 +文教局 +文教类 +文教卫生 +文教星 +文节 +文锦 +文锦渡 +文京区 +文景 +文静 +文句 +文具 +文具厂 +文具盒 +文卷 +文科 +文科生 +文库 +文侩 +文莱 +文莱队 +文理 +文理工 +文理工科 +文理科 +文联 +文录 +文论 +文论集 +文脉 +文盲 +文盲率 +文秘 +文庙 +文明 +文明办 +文明车 +文明村 +文明岗 +文明号 +文明户 +文明化 +文明礼貌 +文明牌 +文明人 +文明山 +文明史 +文明委 +文明戏 +文明线 +文明园 +文明展 +文墨 +文鸟 +文派 +文痞 +文凭 +文凭者 +文契 +文钱 +文曲星 +文人 +文人佳士 +文人相轻 +文人学士 +文如其人 +文弱书生 +文山 +文山会海 +文山里 +文山路 +文山州 +文身 +文史 +文史馆 +文史界 +文史系 +文史哲 +文士 +文饰 +文书 +文水 +文水县 +文说 +文思 +文坛 +文韬武略 +文体 +文体部 +文体局 +文体室 +文体西村 +文童 +文玩 +文委 +文卫 +文文静静 +文文雅雅 +文武 +文武百官 +文武场 +文武全才 +文武双全 +文物 +文物处 +文物点 +文物法 +文物界 +文物局 +文物库 +文物量 +文物商 +文物性 +文物展 +文物者 +文戏 +文县 +文献 +文献集 +文献片 +文献性 +文献学 +文协 +文兴 +文秀 +文选 +文学 +文学部 +文学革命 +文学馆 +文学家 +文学奖 +文学界 +文学类 +文学梦 +文学社 +文学史 +文学所 +文学系 +文学性 +文学语言 +文学院 +文雅 +文言 +文言文 +文艺 +文艺报 +文艺兵 +文艺部 +文艺处 +文艺队 +文艺法 +文艺复兴 +文艺家 +文艺界 +文艺局 +文艺类 +文艺路 +文艺批评 +文艺社 +文艺史 +文艺学 +文艺语言 +文印部 +文友 +文娱 +文渊阁 +文苑 +文责 +文责自负 +文摘 +文章 +文昭关 +文正公 +文职 +文治 +文质彬彬 +文中 +文种 +文绉绉 +文竹 +文字 +文字改革 +文字窍 +文字学 +文字狱 +文宗 +纹 +纹枯病 +纹理 +纹路 +纹络 +纹饰 +纹丝不动 +纹样 +纹银 +闻 +闻风而动 +闻风丧胆 +闻过则喜 +闻鸡起舞 +闻名 +闻名遐尔 +闻名遐迩 +闻名于世 +闻名中外 +闻人 +闻所未闻 +闻喜 +闻喜县 +闻香 +闻香杯 +闻讯 +闻讯而来 +闻者 +闻者足戒 +蚊 +蚊虫 +蚊塘镇 +蚊香 +蚊蝇 +蚊帐 +蚊子 +刎 +吻 +吻别 +吻合 +吻合器 +紊 +紊乱 +稳 +稳便 +稳步 +稳步前进 +稳操胜券 +稳操左券 +稳产 +稳产田 +稳当 +稳定 +稳定感 +稳定率 +稳定平衡 +稳定器 +稳定性 +稳固 +稳健 +稳健派 +稳进快出 +稳练 +稳拿把攥 +稳如泰山 +稳慎 +稳妥 +稳妥感 +稳稳 +稳稳当当 +稳压器 +稳油期 +稳扎稳打 +稳中求进 +稳中有降 +稳中有进 +稳中有升 +稳中有增 +稳中转好 +稳重 +稳住 +问 +问长问短 +问答 +问答题 +问道 +问鼎 +问寒问暖 +问好 +问号 +问候 +问候声 +问候信 +问话 +问及 +问津 +问津者 +问荆 +问句 +问卷 +问卷调查 +问柳寻花 +问路 +问明 +问清 +问世 +问市 +问题 +问题性 +问问 +问问答答 +问项 +问效 +问心无愧 +问心有愧 +问询 +问讯处 +问诊 +问罪 +汶阳镇 +翁 +翁布里亚 +翁当村 +翁牛特旗 +翁婿 +翁源村 +嗡嗡 +嗡嗡嘤嘤 +蓊蓊郁郁 +蓊郁 +蓊郁郁 +瓮 +瓮安 +瓮安县 +瓮城 +瓮福 +瓮声瓮气 +瓮中之鳖 +瓮中捉鳖 +倭 +倭瓜 +倭寇 +涡 +涡虫 +涡流 +涡轮 +涡轮机 +涡扇 +涡旋 +莴苣 +莴笋 +喔 +窝 +窝藏 +窝巢 +窝点 +窝工 +窝火 +窝家 +窝里斗 +窝囊 +窝囊废 +窝棚 +窝头 +窝窝 +窝窝头 +窝赃 +窝主 +蜗居 +蜗壳状 +蜗牛 +蜗行牛步 +我 +我辈 +我厂 +我党 +我等 +我队 +我方 +我国 +我会 +我家 +我见 +我军 +我矿 +我们 +我盟 +我区 +我社 +我省 +我市 +我县 +我向 +我校 +我心 +我行 +我行我素 +我一语 +我院 +我镇 +我中有你 +沃 +沃尔 +沃尔特 +沃尔特河 +沃尔特湖 +沃卡 +沃里克郡 +沃壤 +沃田 +沃土 +沃野 +沃野千里 +卧 +卧病 +卧蚕眉 +卧舱 +卧车 +卧床 +卧床不起 +卧倒 +卧地磐石 +卧尔滋 +卧房 +卧伏 +卧柜 +卧虎山 +卧虎形 +卧具 +卧龙 +卧铺 +卧铺车 +卧铺票 +卧室 +卧榻 +卧薪尝胆 +握 +握别 +握竿 +握紧 +握力 +握手 +握手言和 +握手言欢 +握有 +握住 +渥京 +渥太华 +渥太华市 +斡旋 +龌龊 +乌 +乌邦寺 +乌布苏 +乌达 +乌丹 +乌当区 +乌迪内 +乌迪内市 +乌尔禾 +乌发 +乌饭树 +乌方 +乌干达 +乌钢 +乌共 +乌骨鸡 +乌光 +乌龟 +乌海 +乌海市 +乌合之众 +乌黑 +乌鸡 +乌江 +乌礁湾 +乌金 +乌桕 +乌桕树 +乌咀乡 +乌克兰 +乌克兰队 +乌拉 +乌拉草 +乌拉尔 +乌拉尔州 +乌拉圭 +乌拉圭队 +乌拉山 +乌兰巴托 +乌兰察布 +乌兰浩特 +乌兰牧旗 +乌兰诺娃 +乌蓝 +乌龙 +乌龙茶 +乌龙驹 +乌龙球 +乌龙入珠 +乌鲁木齐 +乌鲁瓦提 +乌梅 +乌盟 +乌蒙 +乌蒙山 +乌木 +乌篷船 +乌七八糟 +乌漆 +乌恰乡 +乌洽会 +乌青 +乌沙村 +乌沙镇 +乌纱 +乌纱帽 +乌审 +乌审旗 +乌石 +乌石乡 +乌市 +乌斯怀亚 +乌斯塔夏 +乌苏里虎 +乌塌菜 +乌台诗 +乌头 +乌土沟 +乌托邦 +乌鸦 +乌烟瘴气 +乌药 +乌鱼 +乌鱼蛋 +乌玉村 +乌云 +乌云山村 +乌枣 +乌贼 +乌贼鱼 +乌镇 +乌珠石 +乌孜别克 +乌兹别克 +圬 +污 +污尘 +污点 +污毒 +污垢 +污黑 +污痕 +污秽 +污迹 +污蔑 +污泥 +污泥浊水 +污七八糟 +污染 +污染度 +污染费 +污染量 +污染区 +污染物 +污染型 +污染源 +污染者 +污辱 +污水 +污水口 +污水塘 +污水源 +污物 +污血 +污言秽语 +污浊 +污渍 +邬庙 +邬庙村 +呜 +呜乎哀哉 +呜呼 +呜呼哀哉 +呜呜 +呜咽 +巫 +巫婆 +巫山 +巫山县 +巫神 +巫师 +巫术 +巫头村 +巫峡 +巫峡镇 +屋 +屋场 +屋椽 +屋顶 +屋后 +屋脊 +屋架 +屋角 +屋里 +屋梁 +屋门 +屋面 +屋内 +屋前 +屋外 +屋檐 +屋宇 +屋子 +诬 +诬谄 +诬称 +诬告 +诬赖 +诬蔑 +诬为 +诬陷 +诬陷罪 +钨 +钨钢 +钨砂 +钨丝 +钨丝灯 +无 +无碍 +无把握 +无保证 +无本万利 +无本之木 +无比 +无边 +无边无际 +无边无涯 +无标准 +无柄叶 +无病害 +无病呻吟 +无不 +无差别 +无产阶级 +无产者 +无偿 +无常 +无耻 +无耻之徒 +无赤字 +无处 +无处不在 +无触点 +无从 +无从谈起 +无从下手 +无存 +无贷款 +无党派 +无的放失 +无的放矢 +无敌 +无敌号 +无敌手 +无敌意 +无底洞 +无抵押 +无地自容 +无棣 +无棣县 +无电户 +无店铺 +无定形碳 +无冬论夏 +无冬眠 +无动于衷 +无毒 +无毒害 +无毒品 +无毒性 +无独有偶 +无度 +无端 +无恶不作 +无儿无女 +无法 +无法可循 +无法无天 +无方 +无妨 +无房户 +无房者 +无纺布 +无纺织物 +无放射性 +无非 +无坟堆 +无缝 +无缝钢管 +无缝门 +无氟 +无公害 +无功而返 +无功受禄 +无辜 +无辜者 +无骨架 +无故 +无故障 +无怪 +无怪乎 +无关 +无关大局 +无关宏旨 +无关紧要 +无关痛痒 +无归 +无规律 +无轨 +无轨电车 +无鬼论 +无国界 +无果 +无过 +无害 +无害化 +无憾 +无核 +无核白 +无核国 +无核国家 +无核化 +无核区 +无核试验 +无核武器 +无核武区 +无花果 +无华 +无话不说 +无话可说 +无悔 +无悔无怨 +无会旬 +无会月 +无会周 +无火焰 +无机 +无机肥料 +无机化学 +无机可乘 +无机酸 +无机物 +无机盐 +无绩效者 +无稽之谈 +无羁无束 +无极县 +无脊椎 +无计可施 +无计名 +无记名 +无际 +无济于事 +无家可归 +无甲醛 +无价 +无价宝 +无价之宝 +无假货 +无假冒 +无坚不摧 +无间 +无降雨期 +无尽 +无尽无休 +无精打采 +无境界 +无酒精 +无拘无束 +无据 +无军籍 +无可 +无可比拟 +无可辩驳 +无可非议 +无可奉告 +无可否认 +无可厚非 +无可讳言 +无可奈何 +无可取代 +无可替代 +无可挑剔 +无可挽回 +无可争辩 +无可争议 +无可指责 +无可置疑 +无孔不入 +无愧 +无愧于 +无愧于心 +无赖 +无礼 +无理 +无理方程 +无理根 +无理函数 +无理取闹 +无理式 +无理数 +无理性 +无力 +无力回天 +无利可图 +无例外 +无粮户 +无量 +无量数 +无聊 +无聊者 +无林地 +无论 +无论如何 +无论是 +无米之炊 +无密码 +无名 +无名火 +无名氏 +无名帖 +无名小卒 +无名英雄 +无名之辈 +无名指 +无名肿毒 +无明火 +无奈 +无奈何 +无男孩 +无脑儿 +无能 +无能为力 +无能者 +无宁 +无牌照 +无配料表 +无票据 +无凭无据 +无期 +无期徒刑 +无期限 +无欺 +无奇不有 +无起色 +无牵 +无铅化 +无强力 +无亲无故 +无情 +无情无义 +无穷 +无穷大 +无穷的 +无穷期 +无穷无尽 +无穷小 +无权 +无权无势 +无燃煤区 +无人 +无人不晓 +无人不知 +无人过问 +无人机 +无人区 +无人问津 +无仁无义 +无日 +无日无夜 +无色 +无伤大体 +无伤大雅 +无上光荣 +无尚 +无神论 +无神论者 +无生命 +无声 +无声片 +无声手枪 +无声无臭 +无声无息 +无绳 +无绳话机 +无绳机 +无师自通 +无时 +无时无刻 +无实据 +无实物 +无事生非 +无视 +无是非观 +无数 +无霜期 +无水草场 +无水害 +无水硝 +无私 +无私奉献 +无私无畏 +无私有弊 +无损 +无梭 +无所不包 +无所不能 +无所不容 +无所不为 +无所不有 +无所不在 +无所不知 +无所不至 +无所顾忌 +无所事事 +无所适从 +无所畏惧 +无所谓 +无所用心 +无所作为 +无题 +无条件 +无条者 +无痛 +无头 +无头案 +无头表 +无头告示 +无土栽培 +无外乎 +无外贸 +无往不利 +无往不胜 +无妄之灾 +无望 +无微不至 +无为 +无为而治 +无委 +无味 +无畏 +无谓 +无污染 +无误 +无息 +无息贷款 +无锡 +无锡市 +无锡县 +无隙可乘 +无暇 +无瑕 +无先例 +无闲人 +无线 +无线电 +无线电报 +无线电波 +无线电话 +无线电台 +无线局 +无限 +无限大 +无限度 +无限公司 +无限花序 +无限量 +无限期 +无限小 +无限性 +无限制 +无效 +无懈可击 +无心 +无心恋战 +无星级 +无行李 +无形 +无形化 +无形损耗 +无形性 +无形之中 +无形中 +无性 +无性生殖 +无性系 +无性杂交 +无须 +无需 +无序 +无烟 +无烟火药 +无烟煤 +无烟日 +无言 +无言以答 +无言以对 +无沿 +无恙 +无业 +无业游民 +无业者 +无一例外 +无依无靠 +无遗 +无疑 +无已 +无以 +无以复加 +无以替代 +无以为继 +无以言状 +无异 +无异者 +无益 +无意 +无意间 +无意义 +无翼鸟 +无因性 +无垠 +无影灯 +无影无踪 +无庸 +无庸讳言 +无庸置疑 +无庸赘述 +无用 +无忧无虑 +无由 +无油迹 +无余量 +无虞 +无与伦比 +无原则 +无援 +无缘 +无缘无故 +无源之水 +无怨无悔 +无怨言 +无则加勉 +无债务 +无障碍 +无遮无挡 +无证无照 +无政府 +无支柱 +无知 +无知者 +无职 +无止无休 +无纸化 +无中继 +无中生有 +无助 +无着 +无着落 +无资格 +无籽 +无籽西瓜 +无字句 +无足轻重 +无罪 +无坐力炮 +无座力炮 +毋 +毋宁 +毋庸 +毋庸讳言 +毋庸置言 +毋庸置疑 +吴 +吴榜 +吴钩 +吴官屯 +吴国 +吴家包村 +吴家窑乡 +吴家营乡 +吴江 +吴江市 +吴令 +吴旗 +吴旗县 +吴起镇 +吴桥 +吴桥县 +吴淞口 +吴王 +吴圩 +吴县市 +吴兴 +吴营 +吴语 +吴岳村 +吴越 +吴中 +吴忠市 +吴茱萸 +吾 +吾国 +芜湖 +芜湖市 +芜湖县 +芜菁 +芜杂 +唔 +梧桐 +梧桐花镇 +梧桐树 +梧州 +梧州港 +梧州市 +蜈蚣 +蜈蚣草 +蜈蚣式 +鼯鼠 +五 +五·一 +五·一七 +五爱星 +五保 +五保户 +五倍子 +五倍子虫 +五笔字 +五边形 +五不准 +五步蛇 +五彩 +五彩斑斓 +五彩缤纷 +五彩池 +五彩纷呈 +五彩棉 +五彩石 +五彩湾 +五岔沟 +五常 +五常市 +五常镇 +五大 +五大连池 +五大三粗 +五代 +五代同堂 +五带 +五道岗 +五道沟村 +五道林 +五帝 +五点 +五斗柜 +五毒 +五毒俱全 +五短身材 +五反 +五方 +五分制 +五丰镇 +五峰 +五福涧村 +五个好 +五公祠 +五谷 +五谷不分 +五谷丰登 +五官 +五官科 +五光十色 +五规范 +五海村 +五好 +五合板 +五湖四海 +五虎岭 +五花八门 +五花大绑 +五花肉 +五华县 +五环 +五环队 +五环旗 +五荒 +五黄六月 +五荤 +五级 +五加 +五假 +五间坊 +五间坊村 +五建 +五讲 +五讲四美 +五交 +五交化 +五角场 +五角大楼 +五角星 +五角形 +五角状 +五节芒 +五金 +五金厂 +五金件 +五经 +五九年 +五绝 +五棵树村 +五棵松 +五孔桥 +五口 +五矿 +五雷轰顶 +五里河 +五里桥乡 +五里亭 +五里雾 +五力 +五连版 +五连冠 +五莲县 +五联 +五敛子 +五粮液 +五磷 +五岭 +五陵 +五陵原 +五柳街 +五六点 +五六年 +五六时 +五六月 +五六月份 +五龙潭 +五律 +五伦 +五马分尸 +五门堰 +五内俱裂 +五年计划 +五年期 +五年制 +五牛队 +五女峰 +五盼 +五七年 +五清 +五人制 +五日 +五卅 +五卅运动 +五三年 +五三乡 +五嫂 +五色缤纷 +五色塔 +五山镇 +五神河 +五十分 +五十九中 +五时 +五世同堂 +五四 +五四路 +五四年 +五四式 +五四运动 +五台 +五台山 +五台县 +五塘镇 +五体投地 +五委 +五位一体 +五味 +五味俱全 +五味瓶 +五味子 +五五年 +五显岗 +五显镇 +五线谱 +五香 +五小 +五星 +五星村 +五星红旗 +五星级 +五刑 +五行 +五行镇 +五严禁 +五言诗 +五颜六色 +五冶 +五业 +五一 +五一节 +五一路 +五音 +五音不全 +五音阶 +五优先 +五原 +五月 +五月份 +五岳 +五脏 +五脏六腑 +五掌握 +五证 +五指 +五指峰 +五指耙 +五指山 +五指山区 +五中 +五中全会 +五重奏 +五洲 +五洲四海 +五子歌 +五子棋 +五自 +午 +午餐 +午餐费 +午餐会 +午饭 +午后 +午间 +午觉 +午门 +午前 +午时 +午托 +午托部 +午休 +午宴 +午夜 +伍 +伍家 +伍伦贡 +伍伦贡市 +伍珀塔尔 +伍员山 +坞 +坞墩 +坞墙 +坞乡集 +坞修 +妩媚 +庑 +忤 +忤逆不孝 +武 +武安 +武安区 +武安市 +武安县 +武备 +武昌 +武昌起义 +武昌区 +武昌鱼 +武昌站 +武场 +武城县 +武丑 +武川 +武打 +武打片 +武大 +武旦 +武当山 +武德 +武帝 +武定侯 +武斗 +武断 +武二花 +武夫 +武钢 +武工 +武工队 +武功 +武官 +武官处 +武馆 +武汉 +武汉段 +武汉关 +武汉市 +武侯墓 +武侯区 +武魂 +武火 +武家坡 +武建 +武江 +武将 +武进 +武进市 +武进县 +武警 +武举制 +武剧 +武科 +武口 +武库 +武力 +武联 +武林 +武岭 +武陵 +武陵区 +武陵源 +武隆县 +武庙 +武鸣 +武鸣县 +武南 +武宁县 +武平 +武平坪坑 +武器 +武器库 +武器展 +武强 +武清 +武清县 +武人 +武僧 +武山 +武生 +武师 +武士 +武士道 +武术 +武术队 +武术馆 +武术馆校 +武术节 +武术界 +武术赛 +武术系 +武术院 +武说 +武松 +武坛 +武威 +武委 +武戏 +武侠 +武侠迷 +武侠片 +武侠小说 +武乡 +武乡县 +武校 +武协 +武行 +武秀才 +武穴 +武穴市 +武阳镇 +武夷 +武夷宫 +武夷山 +武夷山市 +武义 +武义县 +武艺 +武邑黄口 +武邑县 +武英殿 +武者 +武职 +武陟县 +武周山 +武庄村 +武装 +武装部 +武装部长 +武装部队 +武装带 +武装力量 +武状元 +武姿 +侮 +侮辱 +侮辱性 +捂 +捂住 +牾 +舞 +舞伴 +舞弊 +舞弊案 +舞弊者 +舞步 +舞场 +舞池 +舞刀 +舞蹈 +舞蹈班 +舞蹈病 +舞蹈队 +舞蹈家 +舞蹈节 +舞蹈界 +舞蹈诗 +舞蹈诗式 +舞蹈团 +舞蹈系 +舞蹈鞋 +舞动 +舞钢 +舞钢市 +舞后 +舞会 +舞技 +舞剑 +舞剧 +舞剧团 +舞剧院 +舞客 +舞龙 +舞龙队 +舞美 +舞美师 +舞迷 +舞女 +舞谱 +舞曲 +舞人 +舞狮 +舞狮队 +舞台 +舞台化 +舞台剧 +舞坛 +舞厅 +舞文弄墨 +舞鞋 +舞星 +舞阳 +舞艺 +舞影 +舞员 +舞者 +舞姿 +兀 +兀鹫 +兀立 +兀现 +兀自 +勿 +勿施于人 +勿忘草 +勿庸置疑 +务 +务必 +务川 +务工 +务工地 +务工卡 +务工青年 +务工人员 +务工者 +务工证 +务牧 +务农 +务期 +务求 +务实 +务实求真 +务实性 +务使 +务须 +务虚 +务虚会 +务在 +务真 +戊 +戊辰 +戊戌 +戊戌变法 +戊戌政变 +戊寅 +戊寅年 +芴 +物 +物本观 +物产 +物构所 +物归原主 +物耗 +物候 +物华天宝 +物化 +物化劳动 +物化室 +物换星移 +物极必反 +物极而反 +物价 +物价局 +物价指数 +物件 +物尽其用 +物竞天择 +物镜 +物类 +物理 +物理变化 +物理化学 +物理奖 +物理科 +物理量 +物理疗法 +物理所 +物理系 +物理性质 +物理学 +物理学家 +物理诊断 +物理组 +物力 +物料 +物流 +物茂粮丰 +物贸 +物美 +物美价廉 +物品 +物品表 +物权 +物权法 +物色 +物是人非 +物态 +物探 +物探队 +物探局 +物体 +物外 +物象 +物像 +物性 +物业 +物以类聚 +物有所值 +物欲 +物欲横流 +物欲化 +物证 +物质 +物质化 +物质损耗 +物质文明 +物质性 +物种 +物种数 +物资 +物资部 +物资局 +误 +误餐费 +误差 +误场 +误车 +误传 +误导 +误导性 +误点 +误工 +误工费 +误国 +误会 +误己 +误解 +误码 +误判 +误区 +误人子弟 +误认 +误认为 +误入歧途 +误伤 +误识 +误食 +误事 +误用 +误诊 +误诊记 +误字 +悟 +悟析 +悟偕 +悟性 +晤 +晤对 +晤面 +晤谈 +焐 +婺城区 +婺剧 +婺绿 +婺源 +婺源县 +雾 +雾霭 +雾滴 +雾都 +雾渡河 +雾化 +雾岚 +雾里观花 +雾里看花 +雾蒙蒙 +雾气 +雾气腾腾 +雾水 +雾凇 +寤寐思之 +鹜 +鹜窝村 +夕 +夕烟 +夕阳 +夕阳西下 +夕照 +兮 +汐 +西 +西安 +西安城 +西安区 +西安市 +西岸 +西澳 +西八道街 +西八间房 +西八里乡 +西柏林 +西柏坡 +西柏坡村 +西柏坡乡 +西班牙 +西班牙队 +西半球 +西堡村 +西北 +西北部 +西北侧 +西北风 +西北郊 +西北角 +西北街 +西北局 +西北军 +西北麓 +西北欧 +西北缘 +西贝卡 +西壁 +西边 +西便门 +西滨村 +西伯利亚 +西部 +西餐 +西餐厅 +西藏 +西藏路 +西藏区 +西藏厅 +西藏团 +西侧 +西昌 +西昌市 +西城 +西城区 +西充县 +西楚 +西垂 +西陲 +西村 +西大山 +西单 +西单站 +西德 +西德队 +西狄 +西点 +西店刘村 +西东 +西陡岭村 +西端 +西段 +西段屯村 +西段乡 +西二环路 +西二里 +西二乡 +西番莲 +西方 +西方化 +西方人 +西飞 +西非 +西丰 +西丰县 +西风 +西风带 +西风东渐 +西峰山 +西凤酒 +西服 +西服厂 +西服革履 +西服呢 +西服裙 +西岗 +西岗区 +西岗镇 +西葛 +西工 +西工区 +西宫 +西共体 +西贡 +西沟 +西沟村 +西固区 +西瓜 +西瓜刀 +西瓜节 +西瓜界 +西瓜霜 +西瓜籽 +西关 +西关村 +西海 +西海镇 +西汉 +西航道 +西河 +西河北 +西河北村 +西红门镇 +西红柿 +西胡同村 +西湖 +西湖调 +西湖洞村 +西湖区 +西葫芦 +西花厅 +西华 +西华县 +西华营镇 +西滑封村 +西化 +西画 +西画系 +西吉 +西吉县 +西家 +西江 +西交民巷 +西郊 +西进 +西晋 +西经 +西纠 +西开普省 +西坎里克 +西康 +西康路 +西客厅 +西客站 +西坑 +西坑村 +西口 +西裤 +西跨湖村 +西兰花 +西乐 +西里村 +西里西亚 +西梁 +西邻 +西泠 +西陵 +西刘 +西六乡 +西龙门村 +西楼 +西路军 +西麓 +西罗马 +西罗园 +西马家 +西门 +西门豹 +西门口 +西盟 +西面 +西敏 +西敏司寺 +西敏寺 +西奈 +西奈山 +西南 +西南部 +西南方 +西南非 +西南风 +西南航 +西南极 +西南郊 +西南角 +西南局 +西南路 +西南营村 +西宁 +西宁市 +西欧 +西皮 +西平 +西平乐乡 +西坡柏乡 +西器 +西樵 +西芹 +西青 +西青区 +西区 +西去 +西人 +西戎村 +西撒哈拉 +西萨摩亚 +西沙 +西沙里村 +西山 +西山街 +西山区 +西山腰 +西师 +西施 +西十四村 +西市 +西市区 +西式 +西双版纳 +西双坦村 +西四 +西太 +西天 +西甜瓜 +西头 +西王母 +西魏 +西文 +西五路 +西西里 +西西里岛 +西西里路 +西峡 +西峡县 +西夏 +西夏区 +西线 +西厢 +西辛庄 +西辛庄村 +西新 +西行路 +西邢村 +西学 +西学东渐 +西丫口 +西雅图 +西雅图市 +西亚 +西亚区 +西扬庄村 +西阳城 +西阳城乡 +西洋 +西洋参 +西洋画 +西洋景 +西洋楼 +西药 +西药店 +西医 +西医大 +西医学界 +西移 +西邑乡 +西营镇 +西游记宫 +西语系 +西域 +西园乡 +西苑 +西约克郡 +西岳 +西崽 +西站 +西张镇 +西枝 +西直门 +西周 +西庄 +西庄村 +西装 +西装革履 +西子 +西子湖畔 +吸 +吸尘机 +吸尘器 +吸储 +吸储揽存 +吸存量 +吸毒 +吸毒癖 +吸毒人 +吸毒史 +吸毒者 +吸贩毒 +吸服 +吸附 +吸附状 +吸隔音 +吸浆虫 +吸力 +吸墨纸 +吸纳 +吸呐 +吸盘 +吸气 +吸取 +吸热 +吸入 +吸食 +吸收 +吸收光谱 +吸收国 +吸收量 +吸收率 +吸收式 +吸水性 +吸水纸 +吸吮 +吸铁石 +吸血鬼 +吸烟 +吸烟客 +吸烟者 +吸引 +吸引力 +希 +希阿岛 +希伯来人 +希伯莱 +希伯伦 +希伯伦城 +希罕 +希冀 +希拉勒队 +希拉里 +希腊 +希腊队 +希腊式 +希腊字母 +希奇 +希少 +希思罗 +希斯罗 +希特勒 +希图 +希望 +希望村 +希望赛 +昔 +昔日 +昔时 +昔阳县 +昔者 +析 +析出 +析理 +矽肺 +矽肺病 +矽钢 +唏嗒唏嗒 +唏嘘 +唏嘘落泪 +奚谷山 +奚落 +息 +息风 +息烽 +息烽县 +息鼓 +息怒 +息肉 +息事宁人 +息讼 +息息相关 +息息相通 +息影 +浠水 +浠水县 +浠政 +牺牲 +牺牲地 +牺牲品 +牺牲者 +牺牲主义 +悉 +悉尼 +悉尼城 +悉尼港 +悉尼市 +悉尼湾 +悉尼型 +悉数 +悉心 +惜 +惜败 +惜别 +惜贷 +惜乎 +惜力 +惜墨如金 +惜售 +淅川县 +淅沥 +淅淅 +淅淅沥沥 +烯 +烯烃厂 +硒 +犀 +犀角 +犀利 +犀鸟 +犀牛 +犀浦镇 +犀照 +稀 +稀巴烂 +稀薄 +稀饭 +稀罕 +稀罕物 +稀客 +稀烂 +稀里糊涂 +稀落 +稀泥 +稀奇 +稀奇古怪 +稀缺 +稀缺性 +稀少 +稀世 +稀释 +稀释型 +稀释液 +稀疏 +稀树 +稀松 +稀土 +稀土元素 +稀稀拉拉 +稀稀落落 +稀有 +稀有金属 +稀有元素 +翕动 +翕张 +舾装 +溪 +溪沟 +溪谷 +溪河 +溪湖 +溪涧 +溪口 +溪口镇 +溪流 +溪畔 +溪乾 +溪乾村 +溪泉 +溪水 +溪头 +锡 +锡伯族 +锡箔 +锡城 +锡匠 +锡金 +锡剧 +锡矿 +锡矿山 +锡拉特市 +锡兰 +锡林郭勒 +锡盟 +锡山 +锡山市 +锡铁山 +锡乌 +锡养堂 +锡耶那一 +锡耶纳 +锡业 +锡永 +锡杖 +锡纸 +锡朱德 +僖 +熄 +熄灯 +熄灯号 +熄火 +熄灭 +熙和恬静 +熙来攘往 +熙宁 +熙暖 +熙攘 +熙熙 +熙熙攘攘 +蜥脚类 +蜥蜴 +嘻嘻哈哈 +嬉 +嬉闹 +嬉皮士 +嬉皮笑脸 +嬉水 +嬉戏 +嬉笑 +嬉笑怒骂 +膝 +膝盖 +膝盖骨 +膝关节 +膝旁 +膝伤 +膝头 +膝下 +歙县 +歙砚 +歙砚师 +熹光 +熹微 +蟋蟀 +蟋蟀草 +鼷鼠 +习 +习非成是 +习惯 +习惯法 +习惯线 +习惯性 +习好 +习见 +习军 +习气 +习尚 +习书 +习俗 +习题 +习题册 +习题集 +习武 +习武者 +习舞 +习习 +习性 +习焉不察 +习已为常 +习以为常 +习艺 +习用 +习用语 +习字 +习字帖 +习作 +席 +席草 +席次 +席地 +席地而坐 +席间 +席卷 +席卷而来 +席卷而逃 +席卷一空 +席梦思 +席面 +席篾 +席棚 +席位 +席位数 +席子 +袭 +袭击 +袭击者 +袭扰 +袭用 +媳 +媳妇 +媳妇儿 +檄书 +檄文 +洗 +洗被 +洗菜池 +洗菜盆 +洗茶 +洗肠 +洗车点 +洗车店 +洗车费 +洗车业 +洗尘 +洗池台 +洗涤 +洗涤剂 +洗涤品 +洗耳恭听 +洗发膏 +洗发水 +洗劫 +洗劫一空 +洗洁 +洗精煤 +洗净度 +洗礼 +洗礼地 +洗理费 +洗脸 +洗脸池 +洗练 +洗炼 +洗煤 +洗煤厂 +洗钱 +洗染 +洗染店 +洗手 +洗手不干 +洗手袋 +洗手间 +洗手盆 +洗漱池 +洗漱间 +洗刷 +洗头 +洗脱 +洗碗池 +洗洗 +洗洗涮涮 +洗消 +洗心革面 +洗雪 +洗牙器 +洗砚池头 +洗液 +洗衣 +洗衣店 +洗衣粉 +洗衣粉厂 +洗衣机 +洗衣机厂 +洗衣社 +洗印 +洗浴 +洗浴液 +洗熨 +洗澡 +洗澡费 +玺 +徙 +铣 +铣床 +铣刀 +铣工 +喜 +喜爱 +喜报 +喜不自禁 +喜不自胜 +喜唱乐听 +喜车 +喜冲冲 +喜出望外 +喜从天降 +喜读者 +喜逢 +喜光植物 +喜果 +喜好 +喜贺 +喜欢 +喜获 +喜极而泣 +喜极而涕 +喜结连理 +喜结良缘 +喜酒 +喜剧 +喜剧片 +喜剧式 +喜泪 +喜联 +喜马拉雅 +喜眉笑眼 +喜娘 +喜怒 +喜怒哀乐 +喜怒无常 +喜怒相通 +喜捧 +喜气 +喜气洋洋 +喜迁 +喜钱 +喜庆 +喜鹊 +喜人 +喜融融的 +喜色 +喜上加喜 +喜上眉梢 +喜事 +喜嗜 +喜糖 +喜文嗜乐 +喜闻乐见 +喜笑颜开 +喜新厌旧 +喜形于色 +喜性 +喜讯 +喜烟 +喜筵 +喜宴 +喜洋洋 +喜意 +喜吟吟 +喜迎 +喜迎春 +喜盈盈 +喜忧参半 +喜雨 +喜悦 +喜悦队 +喜悦感 +喜幛 +喜滋滋 +喜字 +戏 +戏班 +戏班子 +戏本 +戏车 +戏称 +戏词 +戏德 +戏而不谑 +戏法 +戏馆 +戏剧 +戏剧场 +戏剧化 +戏剧家 +戏剧节 +戏剧界 +戏剧史 +戏剧系 +戏剧性 +戏剧者 +戏路 +戏马台 +戏码 +戏迷 +戏迷角 +戏目 +戏弄 +戏票 +戏曲 +戏曲队 +戏曲化 +戏曲家 +戏曲界 +戏曲学 +戏耍 +戏水 +戏水区 +戏说 +戏台 +戏文 +戏校 +戏行 +戏谑 +戏言 +戏衣 +戏友 +戏园子 +戏院 +戏照 +戏装 +戏子 +系 +系词 +系际 +系里 +系列 +系列化 +系列机 +系列剧 +系列片 +系列赛 +系列谈 +系列型 +系列展 +系念 +系数 +系统 +系统部 +系统工程 +系统化 +系统论 +系统性 +系主任 +细 +细白 +细胞 +细胞壁 +细胞核 +细胞膜 +细胞系 +细胞学 +细胞质 +细胞株 +细别 +细布 +细部 +细菜 +细察 +细长 +细长细长 +细处 +细瓷 +细读 +细发 +细纺 +细分 +细高 +细工 +细故 +细化 +细环饼 +细活 +细节 +细究 +细菌 +细菌肥料 +细菌武器 +细菌性 +细菌战 +细看 +细粮 +细流 +细柳 +细毛 +细毛羊 +细密 +细密画 +细木工板 +细目 +细嫩 +细腻 +细片 +细棋 +细瞧 +细巧 +细软 +细润 +细弱 +细沙 +细纱 +细纱机 +细砂 +细石器 +细水长流 +细说 +细丝 +细碎 +细琐 +细条条 +细微 +细微处 +细问 +细细 +细小 +细心 +细辛 +细伢崽 +细雨 +细语 +细则 +细账 +细者 +细枝末节 +细致 +细致入微 +细珠 +细作 +隙 +呷 +虾 +虾兵蟹将 +虾场 +虾池 +虾洞村 +虾酱 +虾米 +虾皮 +虾仁 +虾塘 +虾丸 +虾子 +虾子镇 +瞎 +瞎扯 +瞎闯 +瞎话 +瞎奶 +瞎炮 +瞎婆子 +瞎说 +瞎信 +瞎眼 +瞎眼树 +瞎诌 +瞎抓 +瞎子 +瞎子摸象 +匣 +匣体 +匣子 +侠 +侠盗 +侠骨 +侠客 +侠辣 +侠女 +侠气 +侠义 +峡 +峡谷 +峡江 +峡江县 +峡山 +峡山镇 +峡湾 +峡中 +狭 +狭隘 +狭长 +狭谷 +狭路相逢 +狭路相遇 +狭小 +狭心症 +狭鳕 +狭义 +狭窄 +遐 +遐迩闻名 +遐思 +遐想 +瑕不掩瑜 +瑕疵 +瑕玷 +瑕线 +瑕瑜互见 +辖 +辖段 +辖内 +辖区 +辖下 +辖属 +霞 +霞彩 +霞光 +霞晖 +霞美镇 +霞浦 +霞浦县 +霞石 +霞云岭乡 +下 +下庵 +下奥州 +下巴 +下巴颏儿 +下摆 +下班 +下板城 +下半 +下半场 +下半年 +下半旗 +下半身 +下半生 +下半时 +下半叶 +下半夜 +下绊 +下北 +下辈 +下辈子 +下笔 +下笔成章 +下边 +下编 +下拨 +下不来 +下不了台 +下不为例 +下部 +下册 +下策 +下层 +下场 +下车 +下车伊始 +下臣 +下沉 +下城区 +下厨 +下船 +下垂 +下次 +下挫 +下达 +下达河乡 +下大力 +下单 +下蛋 +下等 +下低 +下地 +下淀乡 +下调 +下跌 +下跌股 +下定 +下定决心 +下毒手 +下肚 +下颚 +下发 +下法 +下凡 +下方 +下访 +下访团 +下放 +下费桥 +下风 +下浮 +下腹 +下疳 +下岗 +下岗者 +下岗证 +下岗族 +下港乡 +下工 +下工夫 +下功夫 +下关 +下关区 +下海 +下海者 +下和村 +下颌 +下颌部 +下颌骨 +下狠心 +下湖村 +下花桥镇 +下花园 +下滑 +下滑调 +下划 +下怀 +下回 +下机 +下基层 +下级 +下集 +下家 +下贱 +下降 +下降调 +下降股 +下脚 +下脚货 +下脚料 +下结论 +下届 +下襟 +下九路 +下酒 +下酒菜 +下卷 +下决心 +下考乡 +下课 +下课铃 +下苦功 +下苦功夫 +下款 +下来 +下莱茵省 +下礼拜 +下里巴人 +下联 +下列 +下令 +下流 +下龙湾 +下陆区 +下落 +下落不明 +下马 +下马村 +下马威 +下门 +下面 +下南 +下年 +下排 +下派 +下片 +下篇 +下坪村 +下坡 +下坡处 +下坡路 +下坡赛 +下铺 +下期 +下棋 +下迄 +下欠 +下腔 +下情 +下丘脑 +下去 +下阕 +下人 +下任 +下三交镇 +下山 +下设 +下身 +下食堂村 +下士 +下世纪 +下手 +下叔村 +下述 +下水 +下水道 +下水工 +下水管 +下榻 +下榻地 +下台 +下探 +下汤镇 +下塘村 +下体 +下天 +下帖 +下同 +下头 +下图 +下屯乡 +下痿 +下位 +下文 +下吴村 +下午 +下辖 +下弦月 +下线 +下限 +下陷 +下乡 +下消 +下小河 +下小河村 +下泄 +下泻 +下星期 +下行 +下行线 +下学 +下雪 +下雪天 +下旬 +下压 +下压力 +下阳乡 +下野 +下一场 +下一代 +下移 +下议院 +下意识 +下影线 +下游 +下有小 +下雨 +下雨天 +下狱 +下元 +下元皂村 +下院 +下月 +下月初 +下载 +下葬 +下寨村 +下者 +下肢 +下中农 +下种 +下周 +下周三 +下周一 +下属 +下注 +下装 +下子 +下诹访市 +吓 +吓倒 +吓唬 +吓坏 +吓人 +夏 +夏布 +夏常服 +夏朝 +夏锄 +夏代 +夏都 +夏格庄镇 +夏各庄乡 +夏管 +夏旱 +夏河 +夏候鸟 +夏荒 +夏季 +夏津 +夏津县 +夏枯草 +夏盔 +夏乐宫 +夏历 +夏练三伏 +夏粮 +夏令 +夏令时 +夏令营 +夏鲁派 +夏鲁寺 +夏洛特 +夏眠 +夏末 +夏秋季 +夏日 +夏塞 +夏商周 +夏时制 +夏收 +夏收期 +夏熟作物 +夏天 +夏湾 +夏湾村 +夏威夷 +夏威夷果 +夏威夷州 +夏县 +夏训 +夏阳乡 +夏夜 +夏衣 +夏邑县 +夏吟 +夏耘 +夏征 +夏至 +夏至草 +夏至点 +夏至线 +夏种 +夏庄镇 +夏装 +厦 +厦航 +厦门 +厦门岛 +厦门队 +厦门市 +厦南 +罅漏 +罅隙 +仙 +仙丹 +仙供 +仙姑 +仙国 +仙果神木 +仙鹤 +仙鹤草 +仙后座 +仙湖 +仙境 +仙居县 +仙客 +仙客来 +仙乐 +仙女 +仙女型 +仙气 +仙人 +仙人鞭 +仙人洞 +仙人渡 +仙人球 +仙人掌 +仙山琼阁 +仙逝 +仙桃 +仙桃市 +仙乡 +仙游县 +仙苑奇蔬 +仙真岩 +仙子 +先 +先拔头筹 +先辈 +先代 +先导 +先导论 +先导型 +先导性 +先睹为快 +先端 +先发制人 +先锋 +先锋报 +先锋队 +先锋岗 +先锋号 +先锋街 +先锋路 +先锋派 +先锋艇 +先锋性 +先夫 +先富 +先富户 +先富者 +先赋 +先公后私 +先归 +先河 +先后 +先机 +先见之明 +先进 +先进村 +先进岗 +先进团 +先进县 +先进校 +先进性 +先进者 +先决 +先决条件 +先决性 +先君 +先来后到 +先礼后兵 +先例 +先烈 +先令 +先民 +先墓 +先农坛 +先期 +先起 +先前 +先遣 +先遣队 +先遣组 +先秦 +先驱 +先驱新党 +先驱者 +先人 +先人后己 +先入为主 +先入者 +先生 +先声 +先声夺人 +先师 +先世 +先是 +先手 +先售后股 +先天 +先天不足 +先天性 +先头 +先贤 +先贤祠 +先行 +先行点 +先行官 +先行者 +先修班 +先验 +先验论 +先于 +先斩后奏 +先兆 +先哲 +先知 +先知先觉 +先租后股 +先祖 +纤 +纤尘 +纤度 +纤夫 +纤公里 +纤毫 +纤检所 +纤毛 +纤毛虫 +纤巧 +纤弱 +纤手 +纤维 +纤维板 +纤维蛋白 +纤维管 +纤维管网 +纤维素 +纤维植物 +纤细 +纤纤 +纤小 +氙气 +籼稻 +籼米 +掀 +掀动 +掀翻 +掀风鼓浪 +掀开 +掀起 +掀腾 +锨 +锨把 +鲜 +鲜卑 +鲜菜 +鲜草 +鲜蛋 +鲜迭 +鲜菇 +鲜果 +鲜红 +鲜红色 +鲜花 +鲜花丛 +鲜花锦簇 +鲜花业 +鲜活 +鲜活欲滴 +鲜货 +鲜见 +鲜亮 +鲜亮亮 +鲜美 +鲜明 +鲜明性 +鲜奶 +鲜奶费 +鲜嫩 +鲜嫩嫩 +鲜能 +鲜牛奶 +鲜品 +鲜肉 +鲜水河 +鲜为人知 +鲜味 +鲜鲜亮亮 +鲜鲜艳艳 +鲜血 +鲜妍 +鲜艳 +鲜艳度 +鲜艳夺目 +鲜艳艳 +鲜有 +鲜鱼 +暹粒 +暹罗湾 +闲 +闲不住 +闲扯 +闲荡 +闲饭 +闲赋 +闲逛 +闲话 +闲机 +闲居 +闲嗑儿 +闲来无事 +闲来之笔 +闲聊 +闲聊天 +闲评 +闲气 +闲弃 +闲钱 +闲情逸致 +闲人 +闲散 +闲事 +闲事儿 +闲书 +闲说 +闲谈 +闲庭信步 +闲文 +闲暇 +闲心 +闲雅 +闲言碎语 +闲言闲语 +闲远 +闲云 +闲杂人员 +闲章 +闲职 +闲置 +闲置费 +闲坐 +弦 +弦乐 +弦乐队 +弦乐器 +弦切角 +弦声 +弦外之音 +弦子 +贤 +贤才 +贤达 +贤德 +贤惠 +贤良 +贤明 +贤内助 +贤能 +贤妻 +贤人 +贤淑 +贤台 +贤愚 +贤哲 +贤者 +咸 +咸菜 +咸丰 +咸乎乎 +咸镜南道 +咸宁 +咸宁市 +咸肉 +咸涩 +咸水歌 +咸水湖 +咸水鸭 +咸味 +咸咸的 +咸兴 +咸兴市 +咸鸭蛋 +咸阳 +咸阳市 +咸鱼 +涎皮赖脸 +涎水 +娴静 +娴熟 +娴雅 +舷 +舷窗 +舷梯 +舷外 +衔 +衔接 +衔接期 +衔命持节 +衔铁 +嫌 +嫌多者 +嫌犯 +嫌贫爱富 +嫌弃 +嫌少者 +嫌隙 +嫌疑 +嫌疑犯 +嫌疑人 +嫌疑者 +嫌怨 +显 +显摆 +显出 +显得 +显而易见 +显功 +显贵 +显赫 +显赫一时 +显花植物 +显绩 +显见 +显露 +显明 +显目 +显然 +显山露水 +显示 +显示度 +显示钮 +显示牌 +显示屏 +显示器 +显示图 +显通寺 +显威 +显微 +显微镜 +显现 +显像管 +显像仪 +显形 +显性 +显学 +显眼 +显要 +显影 +显影液 +显著 +险 +险隘 +险案 +险弹 +险段 +险恶 +险峰 +险工 +险乎 +险患 +险金 +险景 +险境 +险峻 +险情 +险球 +险区 +险胜 +险滩 +险象 +险象环生 +险些 +险崖老林 +险要 +险遭 +险诈 +险仗 +险症 +险种 +险重 +险阻 +蚬子 +藓苔 +燹 +县 +县宝 +县长 +县城 +县处级 +县道 +县份 +县歌 +县官 +县徽 +县级 +县郊 +县界 +县境 +县局级 +县里 +县立 +县联社 +县令 +县情 +县区 +县人委 +县上 +县市 +县市长 +县市级 +县试 +县团级 +县委 +县委会 +县县 +县乡镇 +县行 +县衙 +县衙署 +县域 +县政 +县政府 +县政协 +县直 +县志 +县属 +岘港 +苋菜 +现 +现场 +现场感 +现场会 +现钞 +现成 +现成饭 +现成话 +现出 +现存 +现存量 +现代 +现代感 +现代化 +现代派 +现代人 +现代史 +现代式 +现代舞 +现代舞团 +现代戏 +现代型 +现代性 +现代主义 +现当代 +现地 +现房 +现汇 +现货 +现价 +现浇板 +现浇塔机 +现阶段 +现今 +现金 +现金账 +现局 +现款 +现况 +现名 +现年 +现期 +现钱 +现券 +现任 +现如今 +现身 +现身说法 +现时 +现时代 +现实 +现实感 +现实性 +现实主义 +现世 +现势 +现下 +现象 +现象学 +现行 +现行犯 +现形 +现眼 +现洋 +现洋钱 +现已 +现役 +现有 +现在 +现在时 +现政府 +现政权 +现症 +现值 +现职 +现状 +线 +线板 +线材 +线材厂 +线长面广 +线春 +线电压 +线雕 +线段 +线桄子 +线规 +线卷 +线缆 +线粒体 +线列 +线路 +线路板 +线路工 +线络 +线麻 +线描 +线呢 +线膨胀 +线坯子 +线桥 +线切割 +线圈 +线绳 +线手套 +线束 +线束用 +线速度 +线损 +线索 +线毯 +线条 +线条形 +线头 +线袜 +线袜子 +线务员 +线线 +线香 +线形 +线形动物 +线型 +线性 +线性方程 +线性规划 +线衣 +线胀系数 +线轴儿 +线装 +线装本 +线装书 +线组 +限 +限产 +限产保价 +限产压锭 +限产压库 +限电器 +限定 +限定词 +限定性 +限度 +限额 +限额制 +限价 +限界 +限量 +限令 +限流阀 +限期 +限时 +限收 +限速 +限于 +限值 +限制 +限制法 +限制口 +限制性 +限制值 +限作 +宪 +宪兵 +宪兵队 +宪队 +宪法 +宪法学 +宪章 +宪章派 +宪政 +宪制 +宪制性 +陷 +陷害 +陷阱 +陷坑 +陷落 +陷落地震 +陷没 +陷入 +陷于 +馅 +馅饼 +馅儿饼 +馅子 +羡 +羡慕 +羡慕者 +献 +献策 +献词 +献辞 +献给 +献花 +献花者 +献计 +献计献策 +献技 +献礼 +献瑞 +献身 +献物 +献县 +献血 +献血法 +献血量 +献血站 +献血者 +献艺 +献殷勤 +腺 +腺体 +腺细胞 +乡 +乡巴佬 +乡霸 +乡长 +乡愁 +乡村 +乡村级 +乡村式 +乡党委 +乡道 +乡风 +乡关 +乡规 +乡规民约 +乡徽 +乡级 +乡间 +乡局级 +乡科级 +乡老 +乡里 +乡邻 +乡闾 +乡民 +乡宁县 +乡旗 +乡企 +乡亲 +乡情 +乡人 +乡上 +乡绅 +乡试 +乡试录 +乡思 +乡俗 +乡谈 +乡统筹费 +乡土 +乡土气息 +乡土味 +乡土文学 +乡下 +乡下人 +乡贤 +乡乡 +乡乡村村 +乡乡镇镇 +乡野 +乡议局 +乡谊 +乡音 +乡友 +乡韵 +乡寨 +乡镇 +乡镇长 +乡镇场 +乡镇级 +乡镇企业 +乡政府 +芗城 +芗剧 +相 +相爱 +相安无事 +相伴 +相悖 +相比 +相比之下 +相变式 +相簿 +相册 +相差 +相差无几 +相称 +相乘 +相持 +相持不下 +相处 +相传 +相待 +相当 +相得益彰 +相等 +相抵 +相电压 +相对 +相对而言 +相对高度 +相对论 +相对论性 +相对湿度 +相对性 +相对真理 +相对主义 +相反 +相仿 +相逢 +相符 +相辅而行 +相辅相成 +相干 +相隔 +相公 +相关 +相关度 +相关性 +相关者 +相国寺 +相好 +相合 +相和 +相互 +相互之间 +相互作用 +相会 +相机 +相机行事 +相继 +相加 +相间 +相见 +相见恨晚 +相交 +相交处 +相接 +相接处 +相近 +相敬如宾 +相救 +相距 +相聚 +相聚一堂 +相控阵 +相连 +相联 +相邻 +相率 +相貌 +相命摊 +相碰 +相片 +相片儿 +相扑 +相切 +相亲 +相亲相爱 +相去甚远 +相劝 +相让 +相容 +相容性 +相溶性 +相濡以沫 +相商 +相生相克 +相声 +相识 +相视 +相思 +相思歌 +相思鸟 +相思树 +相思子 +相似 +相似形 +相似性 +相随 +相谈 +相提并论 +相通 +相同 +相同点 +相投 +相望 +相位 +相位差 +相握 +相向 +相像 +相信 +相形 +相形见绌 +相形失色 +相形之下 +相沿成习 +相依 +相依为命 +相依相克 +相依相偎 +相宜 +相应 +相应物 +相映 +相映成辉 +相映成趣 +相映生辉 +相与 +相遇 +相约 +相赠 +相知 +相知恨晚 +相纸 +相中 +相重 +相助 +相撞 +相左 +香 +香案 +香槟 +香槟酒 +香菜 +香草 +香草醛 +香肠 +香车宝马 +香橙 +香椿 +香椿林 +香椿树 +香椿头 +香椿芽 +香醇 +香葱 +香道 +香稻 +香豆素 +香饵 +香榧 +香榧子 +香粉 +香辅料 +香附子 +香干 +香港 +香港岛 +香港队 +香港厅 +香港团 +香港湾区 +香港游 +香港站 +香港中路 +香港仔 +香功 +香菇 +香瓜 +香蒿 +香河 +香河县 +香河园 +香花 +香花镇 +香化 +香灰 +香会 +香火 +香江 +香蕉 +香蕉林 +香蕉苹果 +香蕉水 +香蕉叶 +香蕉园 +香粳 +香精 +香菊片 +香菌 +香客 +香料 +香料厂 +香炉 +香茅 +香米 +香茗 +香嫩 +香喷的 +香喷喷 +香片 +香扑扑 +香蒲 +香气 +香气扑鼻 +香日德镇 +香薷 +香山 +香水 +香水梨 +香甜 +香味 +香溪 +香香的 +香榭 +香榭丽舍 +香雪斋 +香蕈 +香烟 +香烟盒 +香烟盒纸 +香艳 +香油 +香柚 +香芋丝 +香橼 +香远 +香云纱 +香韵 +香皂 +香泽 +香獐子 +香樟 +香赵庄乡 +香纸 +香烛 +厢 +厢房 +厢式 +湘 +湘北 +湘春路 +湘东 +湘东乡 +湘鄂 +湘鄂川黔 +湘鄂赣 +湘妃竹 +湘赣 +湘桂 +湘华 +湘江 +湘剧 +湘剧团 +湘剧院 +湘军 +湘昆 +湘帘 +湘莲 +湘南 +湘黔 +湘泉酒 +湘潭 +湘潭市 +湘潭县 +湘西 +湘乡 +湘乡市 +湘绣 +湘阴 +湘阴县 +湘阴县队 +湘云 +湘竹 +葙 +箱 +箱包 +箱橱 +箱底 +箱根 +箱管 +箱管费 +箱号 +箱笼 +箱内 +箱式 +箱体 +箱位 +箱子 +襄 +襄北 +襄城县 +襄樊 +襄樊市 +襄樊站 +襄汾 +襄棉 +襄曲 +襄阳 +襄阳棉 +襄阳南路 +襄阳县 +襄垣 +骧 +镶 +镶嵌 +镶嵌画 +详 +详备 +详见 +详尽 +详考 +详密 +详明 +详情 +详审 +详实 +详述 +详谈 +详文 +详细 +详详细细 +祥 +祥和 +祥虎送福 +祥禽瑞兽 +祥瑞 +祥云 +翔 +翔飞 +翔山 +翔实 +享 +享福 +享乐 +享乐者 +享乐主义 +享年 +享清福 +享受 +享受期 +享受型 +享受性 +享享 +享用 +享有 +享有盛誉 +享誉 +响 +响鼻 +响彻 +响彻云霄 +响当当 +响动 +响箭 +响亮 +响铃 +响起 +响器 +响晴 +响声 +响水 +响头 +响尾蛇 +响杨 +响音 +响应 +响应者 +飨 +想 +想必 +想不到 +想不开 +想当初 +想当年 +想当然 +想到 +想得到 +想得开 +想法 +想方设法 +想见 +想尽 +想开 +想来 +想念 +想起 +想入非非 +想头 +想想 +想象 +想象力 +想象性 +想像 +想像力 +想着 +向 +向背 +向壁虚构 +向导 +向导员 +向海 +向好 +向军北里 +向来 +向例 +向量 +向前 +向前乡 +向钱看 +向日葵 +向荣里 +向上 +向声背实 +向往 +向斜层 +向心 +向心力 +向阳 +向阳处 +向阳村 +向阳花 +向阳坡 +向阳镇 +向隅而泣 +向着 +巷 +巷池村 +巷道 +巷战 +巷中 +巷子 +项 +项背 +项城市 +项次 +项类 +项链 +项链坠 +项目 +项目部 +项目点 +项目卡 +项目库 +项目区 +项目省 +项目数 +项目组 +项桥 +项圈 +项群 +项项 +项羽 +项庄舞剑 +象 +象鼻虫 +象草 +象湖 +象话 +象角 +象角村 +象脚鼓 +象棋 +象棋界 +象山 +象山县 +象声词 +象是 +象素 +象溪乡 +象限 +象星村 +象形 +象形文字 +象形字 +象牙 +象牙白 +象牙板 +象牙片 +象牙塔 +象牙者 +象牙之塔 +象牙质 +象征 +象征体 +象征性 +像 +像册 +像模像样 +像片 +像头 +像样 +像章 +橡胶 +橡胶板 +橡胶草 +橡胶厂 +橡胶管 +橡胶林 +橡胶树 +橡木 +橡皮 +橡皮饼 +橡皮船 +橡皮筏子 +橡皮膏 +橡皮管 +橡皮筋 +橡皮泥 +橡皮圈 +橡皮绳 +橡皮树 +橡皮糖 +橡皮艇 +橡皮图章 +橡皮线 +橡实 +橡树 +橡树叶 +橡塑 +橡塑厂 +枭雄 +削 +削壁 +削发 +削果器 +削价 +削减 +削面 +削平 +削球 +削球手 +削弱 +削铁如泥 +削足适履 +哓哓 +哓哓不休 +骁将 +骁勇 +宵 +宵禁 +消 +消摆 +消长 +消沉 +消除 +消磁界 +消癜丸 +消毒 +消毒包 +消毒剂 +消毒器 +消毒学 +消乏 +消法 +消防 +消防车 +消防处 +消防船 +消防队 +消防法 +消防费 +消防局 +消防人 +消防日 +消防栓 +消防厅 +消防艇 +消防员 +消防站 +消费 +消费报 +消费不起 +消费层 +消费点 +消费额 +消费观 +消费国 +消费类 +消费力 +消费量 +消费品 +消费权 +消费群 +消费热 +消费税 +消费型 +消费性 +消费者 +消费资料 +消耗 +消耗量 +消耗品 +消耗热 +消耗型 +消化 +消化道 +消化力 +消化酶 +消化系统 +消火栓 +消基会 +消极 +消极怠工 +消极面 +消极性 +消解 +消解性 +消渴 +消渴病 +消力池 +消力塘 +消弭 +消灭 +消磨 +消遣 +消融 +消散 +消声器 +消失 +消石灰 +消逝 +消释 +消受 +消瘦 +消暑 +消铄精明 +消损 +消停 +消痛贴 +消退 +消亡 +消委会 +消息 +消息报 +消夏 +消夏厅 +消闲 +消协 +消心痛 +消炎片 +消炎药 +消遥 +消遥自在 +消夜 +消音器 +消油剂 +消肿 +逍林 +逍遥 +逍遥法外 +逍遥自得 +逍遥自在 +萧规曹随 +萧瑟 +萧山 +萧山市 +萧条 +萧县 +萧萧 +硝 +硝化 +硝化甘油 +硝化细菌 +硝锵水 +硝镪水 +硝石 +硝酸 +硝酸铵 +硝酸甘油 +硝酸钾 +硝酸钠 +硝酸盐 +硝酸银 +硝烟 +硝烟滚滚 +硝烟弥漫 +硝盐 +销 +销地 +销钉 +销方 +销毁 +销货 +销货车 +销货额 +销货款 +销价 +销量 +销路 +销区 +销声匿迹 +销蚀 +销势 +销售 +销售部 +销售场 +销售处 +销售点 +销售店 +销售额 +销售法 +销售方 +销售价 +销售奖 +销售科 +销售量 +销售率 +销售权 +销售商 +销售税 +销售网 +销售业 +销售一空 +销售员 +销售站 +销售者 +销烟 +销赃 +销账 +销子 +潇 +潇洒 +潇洒不羁 +潇水 +潇湘 +潇潇 +潇潇洒洒 +箫 +霄壤 +霄壤之别 +嚣 +嚣闹 +嚣张 +嚣张气焰 +淆杂 +小 +小巴 +小白菜 +小百货 +小班 +小版 +小宝宝 +小报 +小报告 +小北山 +小辈 +小本经营 +小本生意 +小本微利 +小臂 +小便 +小便宜 +小辫 +小辫儿 +小辫子 +小兵 +小卜冒 +小卜少 +小不点 +小不点儿 +小步 +小菜 +小仓 +小曹娥镇 +小册子 +小差 +小铲 +小铲岛 +小肠 +小肠串气 +小抄儿 +小炒 +小车 +小车费 +小吃 +小吃部 +小吃店 +小吃摊 +小吃摊儿 +小丑 +小处 +小处着手 +小川町 +小传 +小船 +小船浜 +小春 +小词 +小葱 +小聪明 +小村 +小村子 +小打小闹 +小袋装 +小旦 +小刀 +小岛 +小到中雪 +小到中雨 +小道 +小道儿 +小道理 +小道消息 +小弟 +小店村 +小店乡 +小调 +小调儿 +小碟 +小东 +小动作 +小洞不补 +小洞式 +小豆 +小肚子 +小队 +小额 +小恩小惠 +小儿 +小儿调 +小儿科 +小儿子 +小贩 +小方帽 +小纺 +小飞虎牌 +小费 +小分 +小分队 +小粉 +小丰营村 +小幅 +小负 +小富村 +小富即安 +小腹 +小岗 +小岗村 +小钢炮 +小港 +小港村 +小高陵村 +小个 +小个儿 +小个子 +小工 +小弓棚 +小公 +小姑 +小姑娘 +小姑子 +小古庄 +小褂 +小褂儿 +小关路口 +小管流 +小广播 +小规模 +小鬼 +小郭庄村 +小锅饭 +小国 +小孩 +小孩儿 +小孩子 +小寒 +小号 +小合唱 +小河 +小河坝村 +小河口镇 +小河镇 +小河子村 +小胡桃 +小虎队 +小户 +小户人家 +小花袄 +小花棘豆 +小花脸 +小黄鱼 +小潢河 +小伙 +小伙伴 +小伙儿 +小伙子 +小鸡 +小集团 +小记 +小蓟 +小家碧玉 +小家电 +小家伙 +小家鼠 +小家庭 +小家子气 +小间式 +小件 +小将 +小蒋庄村 +小矫情 +小脚 +小脚印 +小轿车 +小街 +小街乡 +小节 +小结 +小姐 +小解 +小界岭 +小金洞乡 +小金库 +小金人 +小进即满 +小井庄 +小径 +小九九 +小舅 +小舅子 +小局 +小剧场 +小聚 +小楷 +小看 +小康 +小康村 +小康户 +小康县 +小康小平 +小康型 +小考 +小可怜儿 +小孔 +小口径 +小窥 +小榄镇 +小浪底 +小老婆 +小礼拜 +小莲庄 +小梁乡 +小两口 +小岭 +小令 +小龙坎 +小龙潭村 +小炉儿匠 +小路 +小萝卜 +小萝卜头 +小锣 +小马村 +小马陵村 +小马青村 +小买卖 +小麦 +小麦秆 +小麦量 +小麦面 +小麦线虫 +小卖 +小卖部 +小卖店 +小满 +小猫熊 +小毛 +小毛头 +小帽 +小妹 +小米 +小米辣 +小米面 +小米粥 +小苗 +小名 +小名儿 +小名头 +小命 +小磨 +小拇指 +小木车 +小木凳 +小楠树 +小囊 +小脑 +小鲵 +小年 +小年夜 +小娘子 +小鸟 +小鸟儿 +小妞 +小牛犊 +小农 +小农经济 +小女 +小跑 +小朋友 +小棚 +小票 +小品 +小品剧 +小品式 +小品文 +小平车 +小瓶装 +小企 +小气 +小气鬼 +小气候 +小汽车 +小器作 +小憩 +小前提 +小钱 +小钱柜 +小强村 +小桥 +小桥流水 +小瞧 +小巧 +小巧玲珑 +小青年 +小青瓦 +小丘 +小秋收 +小球 +小球藻 +小区 +小区划 +小曲 +小曲儿 +小觑 +小圈子 +小人 +小人儿 +小人儿书 +小人书 +小人物 +小日子 +小三轮 +小三马 +小三峡 +小嗓 +小嗓儿 +小山 +小山子 +小山子镇 +小商 +小商贩 +小商品 +小哨 +小舌 +小生 +小生产 +小生产者 +小声 +小胜 +小石城 +小石潭 +小时 +小时/元 +小时候 +小史店 +小史店镇 +小市民 +小事 +小视 +小试 +小试锋芒 +小试牛刀 +小是小非 +小手指 +小手指头 +小书贩 +小叔子 +小暑 +小鼠 +小树 +小数 +小数点 +小水村 +小说 +小说集 +小说家 +小说界 +小说史 +小说史家 +小说书 +小说性 +小说学 +小四轮 +小苏打 +小算盘 +小算盘儿 +小孙孙 +小摊 +小汤山 +小汤山镇 +小淘气 +小提琴 +小提琴家 +小提琴手 +小题大做 +小天鹅 +小艇 +小偷 +小偷小摸 +小推车 +小腿 +小腿肚子 +小娃 +小弯 +小尾寒羊 +小我 +小屋 +小五金 +小五金店 +小溪 +小媳妇 +小戏 +小先生 +小县 +小巷 +小项 +小小 +小小的 +小小说 +小小子 +小鞋 +小写 +小心 +小心谨慎 +小心眼 +小心眼儿 +小心翼翼 +小星星 +小行星 +小型 +小型化 +小型机 +小型张 +小兄弟 +小熊猫 +小熊座 +小修 +小学 +小学部 +小学生 +小学校 +小学组 +小雪 +小循环 +小丫 +小盐 +小宴 +小燕子 +小杨屯村 +小洋岙村 +小样 +小咬 +小业主 +小叶 +小叶儿茶 +小叶杨 +小夜曲 +小衣裳 +小姨子 +小议 +小意思 +小引 +小营 +小影 +小有名气 +小于 +小雨 +小雨夹雪 +小雨雪 +小院 +小院儿 +小崽子 +小枣 +小灶 +小寨沟 +小站 +小站稻 +小张庄 +小账 +小照 +小者 +小镇 +小指 +小趾 +小至中雨 +小中见大 +小舟 +小朱 +小住 +小注 +小篆 +小庄 +小桌 +小子 +小字 +小字辈 +小卒 +小组 +小组长 +小组会 +小组赛 +小坐 +晓 +晓畅 +晓得 +晓风 +晓君 +晓市 +晓悟 +晓以利害 +晓谕 +晓园路 +晓月 +晓之以理 +晓之以利 +晓庄 +孝 +孝昌 +孝昌三年 +孝昌县 +孝道 +孝服 +孝感 +孝感市 +孝敬 +孝敬日 +孝敬乡 +孝里镇 +孝廉 +孝幔 +孝女 +孝亲 +孝情 +孝顺 +孝顺镇 +孝肃亭 +孝文帝 +孝媳 +孝心 +孝行 +孝学 +孝衣 +孝义 +孝直村 +孝直镇 +孝子 +孝子贤孙 +肖 +肖成林 +肖厝 +肖店 +肖家洼 +肖像 +肖像画 +肖形 +肖形虎 +肖形石 +肖形印 +肖子 +哮喘 +效 +效法 +效仿 +效国 +效果 +效果图 +效劳 +效力 +效率 +效率卡 +效命 +效能 +效能型 +效死 +效验 +效益 +效益带 +效益观 +效益化 +效益水 +效益型 +效益性 +效应 +效应期 +效应器 +效用 +效尤 +效忠 +校 +校办 +校报 +校部 +校长 +校长学 +校场口 +校车 +校党委 +校点 +校订 +校董会 +校董事会 +校对 +校方 +校风 +校服 +校服者 +校歌 +校格 +校官 +校规 +校徽 +校魂 +校级 +校纪录 +校际 +校经楼 +校景 +校均 +校刊 +校勘 +校勘学 +校勘者 +校领导 +校貌 +校门 +校门口 +校名 +校内 +校内外 +校牌 +校旗 +校企 +校庆 +校区 +校舍 +校射 +校时钟 +校史 +校史展 +校外 +校委 +校委会 +校尉营 +校务 +校校 +校训 +校样 +校医 +校椅镇 +校译本 +校友 +校友会 +校园 +校园网 +校院 +校运会 +校正 +校址 +校注 +校注者 +校准 +校准器 +笑 +笑柄 +笑掉大牙 +笑哈哈 +笑呵呵 +笑话 +笑话百出 +笑剧 +笑口 +笑里藏刀 +笑脸 +笑脸相迎 +笑料 +笑罗汉 +笑貌 +笑眯眯 +笑面虎 +笑纳 +笑凝 +笑容 +笑容可掬 +笑容满面 +笑声 +笑谈 +笑纹 +笑窝 +笑嘻嘻 +笑笑 +笑星 +笑颜 +笑靥 +笑意 +笑吟吟 +笑盈盈 +笑影 +笑语 +笑语声喧 +笑逐颜开 +啸 +啸傲 +啸声 +些 +些微 +楔 +楔形 +楔形带 +楔形文字 +楔子 +歇 +歇后语 +歇脚 +歇绝 +歇凉 +歇斯底里 +歇息 +歇歇 +歇业 +蝎 +蝎毒 +蝎虎 +蝎子 +蝎子草 +协 +协办 +协办员 +协调 +协调费 +协调国 +协调化 +协调会 +协调局 +协调人 +协调性 +协调学 +协调员 +协调组 +协定 +协定国 +协防 +协会 +协会化 +协会性 +协进会 +协理 +协理员 +协力 +协力会 +协力集 +协派 +协商 +协商会 +协商团 +协税 +协税护费 +协税护税 +协同 +协兴镇 +协议 +协议会 +协议价 +协议区 +协议书 +协约 +协约国 +协助 +协奏 +协奏曲 +协奏团 +协作 +协作办 +协作会 +协作区 +协作网 +协作组 +邪 +邪不压正 +邪财 +邪道 +邪恶 +邪风 +邪沟村 +邪乎 +邪教 +邪路 +邪门儿 +邪门歪道 +邪魔 +邪念 +邪气 +邪说 +邪祟 +邪心 +邪行 +胁 +胁持 +胁从 +胁迫 +挟 +挟持 +挟带 +挟荔宫 +挟洋自重 +偕 +偕同 +斜 +斜边 +斜长石 +斜对面 +斜风细雨 +斜高 +斜晖 +斜架 +斜角 +斜襟 +斜井 +斜拉桥 +斜拉式 +斜拉索桥 +斜路 +斜率 +斜面 +斜坡 +斜坡形 +斜切 +斜射 +斜视 +斜塔 +斜纹 +斜纹布 +斜线 +斜心墙 +斜眼 +斜阳 +谐 +谐波 +谐调 +谐调性 +谐和 +谐美 +谐趣 +谐趣感 +谐声 +谐戏 +谐谑 +谐音 +谐音字 +谐振 +携 +携带 +携带品 +携儿 +携儿带女 +携机 +携家带口 +携妻 +携起手来 +携手 +携手并肩 +撷 +撷取 +撷拾 +撷要 +鞋 +鞋拔子 +鞋帮 +鞋材 +鞋厂 +鞋城 +鞋带 +鞋底 +鞋店 +鞋垫 +鞋粉 +鞋跟 +鞋匠 +鞋类 +鞋脸 +鞋帽 +鞋帽部 +鞋饰 +鞋刷 +鞋套 +鞋袜 +鞋行 +鞋楦 +鞋样 +鞋业 +鞋油 +鞋子 +写 +写本 +写道 +写法 +写稿 +写稿人 +写家 +写经 +写景 +写就 +写卷 +写明 +写票处 +写入 +写生 +写诗人 +写实 +写实化 +写实派 +写实主义 +写写 +写信 +写信人 +写信者 +写意 +写意画 +写照 +写真 +写真帖 +写真照 +写字 +写字楼 +写字楼区 +写字台 +写作 +写作者 +写作组 +泄 +泄底 +泄愤 +泄恨 +泄洪 +泄洪洞 +泄洪闸 +泄劲 +泄漏 +泄露 +泄密 +泄气 +泄入 +泄水渠 +泄水闸 +泄私愤 +泄殖腔 +泻 +泻湖 +泻盐 +泻药 +泻珠溅玉 +卸 +卸车 +卸掉 +卸货 +卸甲坪乡 +卸甲庄 +卸甲庄村 +卸磨杀驴 +卸去 +卸任 +卸下 +卸妆 +卸装 +屑 +屑微 +械 +械斗 +亵渎 +揳入 +谢 +谢忱 +谢词 +谢电 +谢顶 +谢东村 +谢恩 +谢湖村 +谢集 +谢绝 +谢克尔 +谢拉罗 +谢礼 +谢里夫派 +谢落 +谢幕 +谢却 +谢世 +谢天谢地 +谢帖 +谢谢 +谢意 +谢庄 +谢罪 +懈 +懈怠 +懈怠成习 +邂逅 +邂逅相逢 +蟹 +蟹黄 +蟹肉 +蟹状 +心 +心爱 +心安 +心安理得 +心包 +心病 +心不在焉 +心裁 +心肠 +心潮 +心潮翻腾 +心潮难平 +心潮澎湃 +心潮起伏 +心诚 +心诚之至 +心驰 +心驰神往 +心怵 +心慈面软 +心慈手软 +心胆 +心胆俱裂 +心得 +心底 +心地 +心电 +心电图 +心电图室 +心电图仪 +心动 +心儿 +心烦 +心烦意乱 +心烦意躁 +心房 +心扉 +心服 +心服口服 +心浮 +心浮气动 +心浮气躁 +心浮意躁 +心腹 +心腹大患 +心腹之患 +心甘情愿 +心肝 +心肝宝贝 +心肝儿 +心高气傲 +心梗 +心功能 +心广体胖 +心海 +心寒 +心河 +心黑手辣 +心狠 +心狠手辣 +心花 +心花怒放 +心画 +心怀 +心怀叵测 +心慌 +心慌意乱 +心灰 +心灰意懒 +心灰意冷 +心魂 +心魂俱醉 +心火 +心机 +心肌 +心肌梗塞 +心肌炎 +心迹 +心急 +心急火燎 +心急情切 +心急如焚 +心急如火 +心急者 +心计 +心悸 +心尖 +心尖儿 +心焦 +心绞痛 +心结 +心劲 +心劲儿 +心惊 +心惊胆颤 +心惊胆战 +心惊肉跳 +心旌 +心境 +心静 +心静如水 +心坎 +心口 +心口不一 +心口如一 +心宽体胖 +心旷神怡 +心篱 +心里 +心里话 +心里有数 +心理 +心理线 +心理学 +心理学家 +心力 +心力交瘁 +心力衰竭 +心连心 +心灵 +心灵史 +心灵手巧 +心领神会 +心路 +心律 +心率 +心乱如麻 +心满意足 +心明如镜 +心明眼亮 +心目 +心幕 +心内外科 +心脑 +心脑病 +心脑血管 +心脾 +心平气和 +心平气顺 +心魄 +心气 +心气儿 +心气平和 +心窍 +心切 +心情 +心曲 +心如刀割 +心如死灰 +心软 +心上 +心上人 +心身 +心神 +心神不安 +心神不定 +心神不宁 +心声 +心事 +心事重重 +心室 +心术 +心树 +心数 +心思 +心酸 +心算 +心髓 +心碎 +心态 +心疼 +心田 +心跳 +心跳声 +心痛 +心痛病 +心头 +心头病 +心头肉 +心土 +心窝 +心窝儿 +心窝窝 +心窝子 +心无二用 +心细 +心弦 +心想 +心想事成 +心向往之 +心心 +心心相连 +心心相印 +心性 +心胸 +心虚 +心绪 +心绪难平 +心血 +心血管 +心血来潮 +心眼 +心眼儿 +心仪 +心仪已久 +心意 +心音 +心影 +心有余悸 +心猿意马 +心愿 +心悦诚服 +心脏 +心脏病 +心脏病学 +心照不宣 +心知肚明 +心直口快 +心志 +心智 +心中 +心中无数 +心中有鬼 +心中有数 +心子 +心醉 +心醉神迷 +忻口 +忻州 +忻州市 +芯 +芯级 +芯块 +芯片 +芯片业 +芯片组 +芯线 +芯子 +辛 +辛丑 +辛德勒 +辛迪加 +辛店村 +辛店镇 +辛亥 +辛亥革命 +辛集 +辛集市 +辛家庄 +辛苦 +辛辣 +辛劳 +辛勤 +辛酸 +辛酸处 +辛酸苦辣 +辛烷值 +辛未 +辛辛苦苦 +辛辛那提 +辛夷 +欣 +欣逢 +欣见 +欣然 +欣然命笔 +欣赏 +欣赏课 +欣赏热 +欣赏者 +欣慰 +欣闻 +欣喜 +欣喜若狂 +欣欣然 +欣欣向荣 +欣幸 +欣悦 +莘 +莘塍镇 +莘县 +莘莘学子 +莘庄 +锌 +锌版 +锌钡白 +锌基 +新 +新安 +新安江 +新安郡 +新安镇 +新坝镇 +新板 +新版 +新堡市 +新堡子乡 +新北乡 +新币 +新编 +新宾 +新兵 +新兵连 +新步 +新蔡 +新蔡县 +新曹 +新茶 +新昌 +新钞 +新潮 +新车 +新陈代谢 +新城 +新城区 +新城市 +新城镇 +新城子 +新城子区 +新程 +新宠 +新仇旧恨 +新出办 +新传 +新春 +新春伊始 +新词 +新村 +新村港 +新大陆 +新党 +新德里 +新德里市 +新低 +新店 +新丁 +新都 +新都县 +新饿乡 +新法 +新房 +新芬党 +新芬党外 +新丰 +新风 +新风星 +新福村 +新妇 +新干县 +新干线 +新港 +新高 +新沟北村 +新股 +新馆 +新光报 +新贵 +新海 +新航 +新合村 +新河 +新河县 +新河乡 +新菏 +新华 +新华村 +新华街 +新华路 +新华门 +新华社 +新华书店 +新化 +新化县 +新欢 +新篁 +新会 +新会市 +新婚 +新婚户 +新婚者 +新机 +新机场 +新机制 +新绩 +新集 +新集镇 +新纪元 +新加坡 +新加坡队 +新加坡元 +新建 +新建户 +新建路 +新建县 +新建乡 +新舰 +新江路 +新疆 +新疆班 +新疆村 +新疆棉 +新疆省 +新疆厅 +新疆团 +新绛 +新绛县 +新交 +新教 +新教派 +新教徒 +新街村 +新街口 +新解 +新界 +新界埠乡 +新界乡 +新津县 +新近 +新近性 +新进党 +新泾乡 +新景 +新景点 +新景观 +新旧交替 +新旧杂陈 +新居 +新剧 +新军 +新军屯镇 +新喀 +新开河 +新开河街 +新开岭 +新刊 +新科学 +新款 +新莱昂 +新莱昂州 +新郎 +新郎官 +新老交替 +新老朋友 +新乐 +新乐市 +新蕾 +新历 +新立村 +新良庄 +新寮镇 +新龙华 +新楼 +新绿 +新论 +新罗区 +新貌 +新霉素 +新米节 +新密市 +新棉 +新面型 +新苗 +新民 +新民党 +新民日报 +新民市 +新民县 +新名词 +新名优 +新墨西哥 +新年 +新年伊始 +新娘 +新娘节 +新娘子 +新宁 +新宁县 +新农村乡 +新派 +新片 +新篇 +新篇章 +新品 +新平 +新平县 +新平镇 +新浦 +新浦区 +新奇 +新奇劲儿 +新桥村 +新桥镇 +新巧 +新区 +新区带 +新趣 +新人 +新人奖 +新人口论 +新人王 +新人王赛 +新人新事 +新任 +新日铁 +新锐 +新沙 +新沙乡镇 +新山 +新邵 +新邵县 +新生 +新生代 +新生党 +新生儿 +新生界 +新生力量 +新生面 +新生事物 +新声 +新声路 +新诗 +新诗史 +新石器 +新实在论 +新市村 +新市区 +新市乡 +新式 +新手 +新手机 +新书 +新书区 +新说 +新四军 +新松 +新岁 +新岁伊始 +新泰 +新泰市 +新滩 +新塘 +新田村 +新威路 +新圩镇 +新文化 +新文学 +新闻 +新闻办 +新闻杯 +新闻部 +新闻部长 +新闻处 +新闻点 +新闻稿 +新闻公报 +新闻官 +新闻记者 +新闻奖 +新闻界 +新闻局 +新闻论 +新闻片 +新闻社 +新闻史 +新闻署 +新闻司 +新闻台 +新闻团 +新闻网 +新闻系 +新闻性 +新闻学 +新闻业 +新闻纸 +新闻组 +新西兰 +新西兰队 +新希望 +新希望党 +新媳妇儿 +新喜 +新厦 +新鲜 +新鲜菜 +新鲜度 +新鲜感 +新鲜期 +新鲜肉 +新鲜事 +新鲜事儿 +新县 +新线 +新乡 +新乡市 +新新旧旧 +新兴 +新兴北里 +新兴村 +新兴县 +新星 +新型 +新秀 +新秀队 +新秀战 +新穴 +新训 +新亚型 +新颜 +新堰 +新药 +新野 +新野县 +新业 +新叶村 +新衣 +新沂 +新沂河 +新沂市 +新沂站 +新义州 +新异 +新意 +新翼 +新英格兰 +新颖 +新颖性 +新影 +新邮 +新余 +新余市 +新元 +新约 +新月 +新月村 +新运处 +新韵 +新泽西 +新泽西州 +新增 +新增额 +新宅 +新宅村 +新宅乡 +新翟村 +新章 +新召苏木 +新针疗法 +新镇 +新郑 +新郑市 +新郑县 +新政 +新政协 +新枝 +新知 +新址 +新中行 +新州 +新洲县 +新竹 +新著 +新筑镇 +新妆 +新庄村 +新装 +新姿 +新作 +薪 +薪酬 +薪俸 +薪给 +薪火 +薪级 +薪金 +薪尽火传 +薪水 +薪炭林 +薪饷 +薪资 +馨 +馨香 +馨著 +鑫光 +囟 +囟门 +信 +信报箱 +信报箱群 +信标 +信不过 +信步 +信差 +信达所 +信贷 +信贷部 +信贷处 +信贷额 +信贷科 +信贷员 +信贷资金 +信袋 +信道 +信得过 +信德省 +信儿 +信访 +信访办 +信访件 +信访局 +信访量 +信访人 +信访室 +信丰 +信丰县 +信丰乡 +信风 +信封 +信奉 +信奉者 +信服 +信稿 +信鸽 +信函 +信号 +信号弹 +信号灯 +信号工 +信号枪 +信汇 +信笺 +信件 +信江 +信教 +信教者 +信据 +信口 +信口雌黄 +信口开河 +信赖 +信赖感 +信马由缰 +信念 +信浓町 +信女 +信皮儿 +信任 +信任带 +信任度 +信任感 +信任率 +信任票 +信任投票 +信石 +信史 +信使 +信士 +信誓旦旦 +信手 +信手拈来 +信守 +信天翁 +信天游 +信条 +信筒 +信徒 +信托 +信托法 +信托局 +信托业 +信望 +信尾 +信物 +信息 +信息茶 +信息处 +信息窗 +信息点 +信息费 +信息港 +信息化 +信息机 +信息卡 +信息库 +信息廊 +信息量 +信息流 +信息论 +信息司 +信息台 +信息网 +信息箱 +信息型 +信息性 +信息业 +信息员 +信息源 +信息战 +信息组 +信箱 +信心 +信心百倍 +信阳 +信阳市 +信阳县 +信仰 +信仰者 +信仰主义 +信宜 +信宜市 +信宜县 +信以为真 +信义 +信用 +信用化 +信用卡 +信用联社 +信用社 +信用所 +信用证 +信誉 +信誉度 +信誉卡 +信誉者 +信誉制 +信札 +信诊 +信纸 +信众 +兴 +兴安 +兴安岭 +兴安路街 +兴安盟 +兴安省 +兴安县 +兴办 +兴邦 +兴宝 +兴城 +兴城市 +兴冲冲 +兴辞 +兴地 +兴奋 +兴奋点 +兴奋剂 +兴奋劲 +兴奋状 +兴风作浪 +兴高采烈 +兴高彩烈 +兴工 +兴国 +兴国县 +兴化 +兴化市 +兴化州 +兴会 +兴建 +兴教 +兴凯湖 +兴利 +兴利除弊 +兴林 +兴隆 +兴隆村 +兴隆片林 +兴隆乡 +兴牧富民 +兴宁市 +兴农 +兴平市 +兴平乡 +兴企 +兴起 +兴庆宫 +兴趣 +兴趣班 +兴仁县 +兴山 +兴山区 +兴山县 +兴盛 +兴师动众 +兴师问罪 +兴衰 +兴衰成败 +兴衰存亡 +兴衰史 +兴衰与共 +兴叹 +兴头 +兴亡 +兴旺 +兴旺发达 +兴旺庄村 +兴味 +兴县 +兴修 +兴许 +兴学 +兴妖作怪 +兴业 +兴业县 +兴义 +兴义市 +兴渔 +兴源镇 +兴致 +兴致勃勃 +兴中会 +星 +星辰 +星城村 +星城镇 +星虫 +星等 +星点 +星斗 +星工场 +星光 +星汉 +星号 +星河 +星火 +星火村 +星火带 +星火计划 +星级 +星际 +星空 +星空图 +星罗棋布 +星毛虫 +星期 +星期二 +星期六 +星期日 +星期三 +星期四 +星期天 +星期五 +星期一 +星球 +星宿 +星体 +星条旗 +星图 +星团 +星系 +星系级 +星系团 +星细胞 +星相 +星象 +星象学 +星小目 +星星 +星星点点 +星星峡 +星星之火 +星形 +星夜 +星移斗换 +星移斗转 +星云 +星状灯 +星子 +星座 +惺忪 +猩红热 +猩猩 +猩猩草 +腥 +腥臭 +腥风血雨 +腥黑穗病 +腥气 +腥味 +腥味儿 +刑 +刑场 +刑二庭 +刑罚 +刑法 +刑法典 +刑法学家 +刑房 +刑警 +刑警队 +刑警局 +刑具 +刑律 +刑律者 +刑满释放 +刑名 +刑期 +刑事 +刑事犯 +刑事犯罪 +刑事罪 +刑释解教 +刑诉法 +刑讯 +刑讯室 +刑侦 +刑侦队 +刑侦局 +刑侦组 +行 +行板 +行帮 +行包 +行辈 +行笔 +行不通 +行草 +行长 +行车 +行车道 +行车者 +行车证 +行车执照 +行程 +行船 +行刺 +行当 +行道树 +行得通 +行东 +行动 +行贩 +行风 +行负 +行宫 +行规 +行洪道 +行洪区 +行话 +行会 +行贿 +行贿人 +行贿式 +行贿型 +行贿者 +行货 +行迹 +行家 +行家里手 +行间 +行将 +行进 +行径 +行距 +行军 +行军床 +行楷 +行款 +行礼 +行李 +行李车 +行李袋 +行李房 +行李架 +行李卷儿 +行李牌 +行李箱 +行里 +行列 +行列式 +行路 +行路人 +行旅如织 +行囊 +行年 +行骗 +行频 +行评 +行期 +行乞 +行乞业 +行前 +行腔 +行窃 +行情 +行情期 +行人 +行若无事 +行色 +行色匆匆 +行善 +行善积德 +行商 +行赏 +行省 +行尸走肉 +行使 +行驶 +行驶证 +行世 +行市 +行事 +行书 +行书体 +行署 +行述 +行唐 +行唐县 +行头 +行为 +行为法 +行为权 +行为人 +行文 +行伍 +行侠仗义 +行销 +行星 +行行 +行凶 +行蓄洪区 +行业 +行业界 +行业性 +行业语 +行医 +行吟者 +行营 +行语 +行员 +行辕门 +行约 +行云 +行云流水 +行栈 +行者 +行政 +行政部 +行政部门 +行政处 +行政处分 +行政村 +行政公署 +行政官 +行政化 +行政局 +行政科 +行政区 +行政区队 +行政区划 +行政区域 +行政权 +行政诉讼 +行政性 +行政院 +行之有效 +行止 +行址 +行装 +行状 +行踪 +行走 +行走不便 +邢 +邢家梁村 +邢台 +邢台市 +邢台县 +邢台制 +形 +形黯魂销 +形变 +形成 +形成层 +形成期 +形单影只 +形而上 +形而上学 +形而下 +形骸 +形迹 +形貌 +形旁 +形容 +形容词 +形神各异 +形神妙肖 +形声 +形式 +形式参数 +形式各异 +形式化 +形式逻辑 +形式美 +形式学 +形式主义 +形势 +形似 +形态 +形态各异 +形态学 +形体 +形体美 +形同 +形同虚设 +形相 +形象 +形象办 +形象化 +形象镜 +形象群 +形象思维 +形象战 +形形色色 +形意 +形意拳 +形影 +形影不离 +形影相吊 +形影相对 +形制 +形诸 +形状 +陉 +陉阳驿 +型 +型钢 +型号 +型焦 +型录展 +型砂 +型式 +型心 +醒 +醒儿 +醒豁 +醒酒 +醒来 +醒木 +醒目 +醒脑提神 +醒狮 +醒狮贺岁 +醒悟 +醒眼 +醒者 +擤 +杏 +杏城乡 +杏干 +杏河乡 +杏核眼 +杏红 +杏花 +杏花村 +杏花村镇 +杏花岭区 +杏花雨 +杏黄 +杏黄色 +杏林 +杏林区 +杏林镇 +杏梅 +杏仁 +杏仁露 +杏树 +杏五区 +杏元屯 +杏元屯村 +杏子 +姓 +姓名 +姓名论 +姓名牌 +姓氏 +幸 +幸存 +幸存者 +幸得 +幸而 +幸福 +幸福村 +幸福感 +幸福观 +幸福林 +幸福三村 +幸福线 +幸福乡 +幸福一村 +幸好 +幸亏 +幸免 +幸免于难 +幸甚 +幸事 +幸喜 +幸运 +幸运儿 +幸运感 +幸运卡 +幸运者 +幸灾乐祸 +性 +性别 +性别比 +性病 +性感 +性格 +性关系 +性激素 +性急 +性价比 +性健康 +性解放 +性滥交 +性灵 +性命 +性命交关 +性能 +性能奖 +性气 +性器官 +性情 +性骚扰 +性社会学 +性生活 +性腺 +性行 +性欲 +性者 +性质 +性状 +性子 +荇草 +悻然 +悻悻 +凶 +凶暴 +凶残 +凶多吉少 +凶恶 +凶犯 +凶悍 +凶狠 +凶横 +凶吉难卜 +凶狂 +凶猛 +凶气 +凶器 +凶杀 +凶杀案 +凶杀片 +凶神恶煞 +凶手 +凶险 +凶相 +凶相毕露 +凶信 +凶焰 +凶兆 +兄 +兄长 +兄弟 +兄弟团 +兄妹 +兄嫂 +匈 +匈奴 +匈牙利 +匈牙利队 +汹涌 +汹涌澎湃 +胸 +胸部 +胸脯 +胸腹 +胸腹腔 +胸膈 +胸骨 +胸怀 +胸怀大局 +胸怀大志 +胸怀坦荡 +胸怀祖国 +胸徽 +胸襟 +胸径 +胸卡 +胸口 +胸膜 +胸膜炎 +胸内外科 +胸牌 +胸佩 +胸鳍 +胸前 +胸腔 +胸墙 +胸膛 +胸痛 +胸围 +胸无城府 +胸无大志 +胸像 +胸臆 +胸有成竹 +胸章 +胸中 +胸中无数 +胸中有数 +胸椎 +雄 +雄辩 +雄兵 +雄才 +雄才大略 +雄才伟略 +雄沉 +雄风 +雄蜂 +雄关 +雄厚 +雄花 +雄黄酒 +雄浑 +雄魂 +雄鸡 +雄鸡头者 +雄健 +雄劲 +雄纠纠 +雄赳赳 +雄居 +雄踞 +雄峻 +雄峻挺拔 +雄阔 +雄立 +雄丽 +雄鸟 +雄牌 +雄奇 +雄强 +雄蕊 +雄师 +雄狮 +雄视 +雄图 +雄图大略 +雄威 +雄伟 +雄文 +雄险 +雄县 +雄心 +雄心勃勃 +雄心壮志 +雄性 +雄鹰 +雄峙 +雄壮 +雄姿 +雄姿英发 +熊 +熊蜂 +熊河 +熊河村 +熊集镇 +熊猫 +熊猫馆 +熊牛 +熊派 +熊皮帽 +熊市 +熊熊 +熊岳镇 +熊掌 +休 +休风 +休耕地 +休工 +休工期 +休馆 +休会 +休火山 +休假 +休克 +休伦湖 +休眠 +休眠期 +休眠芽 +休宁县 +休戚相关 +休戚与共 +休憩 +休斯敦 +休斯顿 +休庭 +休息 +休息廊 +休息日 +休息室 +休息天 +休息厅 +休息亭 +休息椅 +休闲 +休闲服 +休闲化 +休闲式 +休闲型 +休闲椅 +休闲游 +休闲者 +休闲装 +休想 +休学 +休养 +休养生息 +休养所 +休养院 +休业 +休渔 +休渔期 +休战 +休整 +休止 +休止符 +修 +修补 +修长 +修车 +修车点 +修车店 +修车房 +修车款 +修车铺 +修车摊 +修成 +修船 +修辞 +修辞格 +修辞学 +修道院 +修订 +修订案 +修订版 +修订本 +修订稿 +修订会 +修定 +修复 +修复师 +修改 +修改案 +修改稿 +修改建 +修好 +修机班 +修剪 +修建 +修脚 +修脚师 +修旧利废 +修理 +修理班 +修理部 +修理厂 +修理点 +修理店 +修理费 +修理工 +修理铺 +修理商 +修理业 +修理组 +修炼 +修路 +修律 +修女 +修配 +修配厂 +修葺 +修葺一新 +修桥补路 +修润 +修缮 +修缮处 +修身 +修身砺德 +修身齐家 +修身养性 +修史 +修士 +修饰 +修武 +修武县 +修箱 +修鞋店 +修鞋匠 +修鞋摊 +修械所 +修行 +修修 +修修补补 +修修改改 +修养 +修养论 +修造 +修造厂 +修造船 +修整 +修整费 +修正 +修正案 +修正主义 +修枝 +修筑 +咻 +羞 +羞惭 +羞耻 +羞耻感 +羞耻心 +羞答答 +羞愧 +羞明 +羞赧 +羞怯 +羞辱 +羞涩 +羞羞答答 +羞意 +羞于启齿 +羞于示人 +羞与为伍 +朽 +朽烂 +朽木 +秀 +秀才 +秀才人情 +秀城区 +秀发 +秀丽 +秀美 +秀媚 +秀女 +秀朴 +秀气 +秀色 +秀山 +秀水 +秀水村 +秀水河子 +秀水街 +秀水坪村 +秀挺 +秀雅 +秀屿镇 +岫山村 +岫岩 +岫岩县 +绣 +绣墩草 +绣房 +绣花 +绣花厂 +绣花鞋 +绣花针 +绣花枕头 +绣口 +绣帕 +绣品 +绣球 +绣球风 +绣像 +绣鞋 +绣制 +袖 +袖标 +袖管 +袖箭 +袖口 +袖手旁观 +袖筒 +袖头 +袖章 +袖珍 +袖珍版 +袖珍本 +袖子 +锈 +锈病 +锈钉 +锈迹 +锈蚀 +锈损 +溴 +溴化锂 +溴化银 +溴氰菊 +盱江镇 +盱眙 +盱眙县 +胥浦 +须 +须疮 +须德海 +须发 +须根 +须眉 +须生 +须水镇 +须要 +须臾 +须知 +须子 +虚 +虚报 +虚词 +虚诞 +虚度 +虚度年华 +虚浮 +虚构 +虚构论 +虚构性 +虚构者 +虚汗 +虚化 +虚怀若谷 +虚幻 +虚晃一枪 +虚火 +虚假 +虚假性 +虚惊 +虚开 +虚空 +虚夸 +虚礼 +虚靡 +虚名 +虚拟 +虚拟化 +虚胖 +虚情假意 +虚荣 +虚荣心 +虚弱 +虚弱不堪 +虚设 +虚实 +虚饰 +虚数 +虚岁 +虚套 +虚套子 +虚脱 +虚妄 +虚伪 +虚伪性 +虚位以待 +虚文 +虚无 +虚无缥缈 +虚无飘渺 +虚无主义 +虚线 +虚像 +虚心 +虚虚实实 +虚玄 +虚掩 +虚应 +虚有其表 +虚张声势 +虚症 +虚职 +虚字 +嘘 +嘘寒问暖 +嘘气 +嘘声 +需 +需求 +需求方 +需求量 +需水量 +需氧量 +需要 +需要量 +需要者 +需者 +墟 +墟里 +徐 +徐悲鸿 +徐村 +徐都 +徐福镇 +徐公祠 +徐谷店村 +徐官屯村 +徐海 +徐缓 +徐汇 +徐汇区 +徐家汇 +徐家桥 +徐家乡 +徐龙区 +徐娘半老 +徐水 +徐水县 +徐乡 +徐行 +徐徐 +徐鹰牌 +徐州 +徐州市 +徐庄村 +许 +许昌 +许昌市 +许昌县 +许村乡 +许都 +许多 +许家坝 +许家坝区 +许家庙 +许可 +许可法 +许可费 +许可证 +许可证费 +许诺 +许身 +许屯镇 +许西 +许许多多 +许以 +许愿 +诩 +栩栩然 +栩栩如生 +旭日 +旭日东升 +旭日椅 +序 +序跋 +序而不变 +序号 +序列 +序论 +序目 +序幕 +序盘 +序曲 +序时账 +序数 +序文 +序言 +叙 +叙别 +叙及 +叙家常 +叙旧 +叙利亚 +叙事 +叙事诗 +叙事文 +叙事性 +叙事学 +叙述 +叙述体 +叙述者 +叙说 +叙谈 +叙谈会 +叙文 +叙写 +叙言 +叙永县 +恤金 +畜 +畜产 +畜产品 +畜肥 +畜科所 +畜力 +畜力车 +畜牧 +畜牧病 +畜牧场 +畜牧局 +畜牧厅 +畜牧系 +畜牧业 +畜棚 +畜皮 +畜禽 +畜禽业 +畜圈 +畜群 +畜舍 +畜生 +畜疫 +畜用 +畜种 +勖 +绪 +绪论 +绪言 +续 +续保 +续本 +续编 +续辨 +续订 +续断 +续稿 +续航 +续航力 +续集 +续建 +续借 +续盘 +续篇 +续聘费 +续期 +续签 +续完 +续弦 +续续 +续展 +酗酒 +婿 +婿水 +婿乡 +溆河 +溆浦 +溆浦县 +溆水 +絮 +絮叨 +絮棉 +絮语 +絮状 +嗅 +嗅到 +嗅觉 +嗅神经 +煦煦 +蓄 +蓄电池 +蓄芳 +蓄洪 +蓄积 +蓄积量 +蓄积性 +蓄谋 +蓄谋已久 +蓄能器 +蓄念 +蓄势 +蓄势待发 +蓄势期 +蓄水 +蓄水池 +蓄水量 +蓄须 +蓄意 +蓄滞洪区 +轩 +轩昂 +轩敞 +轩车 +轩岗乡 +轩然大波 +轩辕 +轩辕庙 +轩轾 +宣布 +宣称 +宣城 +宣传 +宣传办 +宣传部 +宣传部长 +宣传册 +宣传车 +宣传处 +宣传词 +宣传单 +宣传弹 +宣传点 +宣传队 +宣传费 +宣传股 +宣传画 +宣传科 +宣传栏 +宣传牌 +宣传品 +宣传期 +宣传日 +宣传司 +宣传台 +宣传员 +宣传月 +宣传战 +宣传站 +宣传者 +宣传周 +宣传组 +宣东 +宣读 +宣发 +宣告 +宣汉 +宣汉县 +宣和镇 +宣化 +宣化区 +宣讲 +宣讲会 +宣教 +宣教部 +宣教局 +宣教科 +宣教室 +宣礼塔 +宣炉 +宣明会 +宣内 +宣判 +宣判声 +宣示 +宣誓 +宣誓书 +宣誓者 +宣腿 +宣武 +宣武籍 +宣武门 +宣武区 +宣泄 +宣叙调 +宣言 +宣言书 +宣扬 +宣战 +宣纸 +宣州市 +喧 +喧宾夺主 +喧哗 +喧闹 +喧闹声 +喧嚷 +喧扰 +喧声 +喧声四起 +喧腾 +喧嚣 +揎拳捋袖 +萱 +萱草 +煊赫 +儇 +玄 +玄奥 +玄参 +玄乎 +玄狐 +玄机 +玄妙 +玄庙镇 +玄明粉 +玄思 +玄孙 +玄武 +玄武湖 +玄武区 +玄武岩 +玄武岩流 +玄想 +玄学 +玄之又玄 +悬 +悬案 +悬壁 +悬臂 +悬垂 +悬而未决 +悬浮 +悬浮剂 +悬挂 +悬灌梁 +悬壶于市 +悬空 +悬空寺 +悬梁 +悬梁刺股 +悬铃木 +悬念 +悬赏 +悬石 +悬殊 +悬梯 +悬停 +悬腕 +悬心吊胆 +悬悬的 +悬崖 +悬崖勒马 +悬崖峭壁 +悬雍垂 +悬置 +悬浊液 +旋 +旋床 +旋动 +旋儿 +旋风 +旋风装 +旋耕机 +旋光性 +旋即 +旋律 +旋毛虫 +旋木雀 +旋纽 +旋钮 +旋梯 +旋涡 +旋涡星云 +旋窑 +旋转 +旋转门 +旋转乾坤 +旋转式 +旋转体 +旋转翼 +旋子 +漩流 +漩起 +漩涡 +选 +选案 +选拔 +选拔关 +选拔赛 +选本 +选编 +选材 +选场 +选出 +选萃 +选登 +选点 +选调 +选调生 +选定 +选读 +选段 +选稿 +选购 +选购节 +选管会 +选集 +选举 +选举法 +选举会 +选举年 +选举票 +选举权 +选举人 +选举日 +选举署 +选举者 +选举制 +选刊 +选课 +选矿 +选矿厂 +选例 +选例板 +选料 +选录 +选煤厂 +选美 +选民 +选民册 +选民证 +选派 +选配 +选票 +选聘 +选聘制 +选情 +选区 +选曲 +选取 +选人 +选任 +选赛 +选色 +选士学 +选手 +选书者 +选送 +选题 +选委会 +选系 +选贤任能 +选项 +选型 +选修 +选修课 +选学 +选用 +选优淘劣 +选育 +选择 +选择点 +选择会 +选择面 +选择权 +选择题 +选择型 +选择性 +选择者 +选址 +选中 +选种 +选装型 +癣 +炫 +炫技式 +炫目 +炫人眼眸 +炫示 +炫耀 +绚烂 +绚丽 +绚丽多彩 +绚丽多姿 +绚丽夺目 +眩 +眩目 +眩晕 +渲 +渲染 +渲染性 +楦 +楦板 +楦子 +靴 +靴子 +薛 +薛埠镇 +薛村乡 +薛套村 +薛庄村 +穴 +穴道 +穴施 +穴位 +学 +学报 +学兵 +学步 +学部 +学部委员 +学长 +学潮 +学到老 +学额 +学而不厌 +学阀 +学法 +学费 +学分 +学分制 +学风 +学府 +学府路 +学富五车 +学岗 +学岗制 +学贯中西 +学棍 +学海 +学海无涯 +学好 +学号 +学画 +学会 +学会市场 +学籍 +学技 +学家 +学监 +学界 +学经 +学究 +学究气 +学具 +学刊 +学科 +学科点 +学科群 +学科史 +学理 +学力 +学历 +学历者 +学联 +学龄 +学龄儿童 +学名 +学年 +学农 +学派 +学期 +学前 +学前班 +学前教育 +学区 +学人 +学僧 +学舌 +学社 +学生 +学生版 +学生部 +学生处 +学生会 +学生林 +学生司 +学生娃 +学生证 +学生装 +学时 +学识 +学士 +学塾 +学术 +学术部 +学术奖 +学术界 +学术类 +学术史 +学术团 +学术团体 +学术性 +学说 +学堂 +学童 +学徒 +学徒工 +学委 +学委会 +学位 +学位办 +学位法 +学位制 +学问 +学问家 +学无止境 +学武 +学习 +学习班 +学习会 +学习类 +学习率 +学习热 +学习日 +学习者 +学衔 +学校 +学校部长 +学校门 +学学 +学养 +学业 +学业有成 +学以致用 +学艺 +学友 +学友会 +学有所长 +学有所成 +学有所得 +学有所用 +学有专长 +学有专攻 +学员 +学员队 +学园 +学院 +学院奖 +学院派 +学运 +学杂费 +学者 +学者卷 +学者型 +学制 +学子 +踅 +踅子 +雪 +雪白 +雪板 +雪豹 +雪被 +雪崩 +雪菜 +雪层 +雪车 +雪耻 +雪弹 +雪道 +雪地 +雪地车 +雪地鞋 +雪豆 +雪窦山 +雪窦寺 +雪堆 +雪顿节 +雪纺 +雪粉 +雪峰 +雪糕 +雪谷 +雪挂 +雪柜 +雪海 +雪后 +雪花 +雪花膏 +雪花呢 +雪景 +雪具 +雪梨 +雪里红 +雪里送炭 +雪粒 +雪连纸 +雪莲 +雪亮 +雪柳 +雪龙 +雪龙船 +雪盲 +雪帽山 +雪面 +雪泥鸿爪 +雪鸟 +雪片 +雪坡 +雪魄 +雪橇 +雪茄 +雪茄烟 +雪情 +雪球 +雪人 +雪绒花 +雪山 +雪上 +雪上加霜 +雪神 +雪水 +雪松 +雪天 +雪团 +雪窝 +雪污 +雪溪图 +雪洗 +雪线 +雪杨柳 +雪野 +雪夜 +雪衣 +雪影 +雪域 +雪原 +雪韵 +雪灾 +雪灾区 +雪杖 +雪障 +雪中送炭 +雪竹 +鳕鱼 +血 +血癌 +血案 +血斑 +血本 +血本无归 +血崩 +血泊 +血沉 +血仇 +血袋 +血毒症 +血防 +血防办 +血粉 +血管 +血管瘤 +血管钳 +血管性 +血光 +血海深仇 +血汗 +血汗钱 +血痕 +血红 +血红蛋白 +血迹 +血痂 +血钾 +血浆 +血口 +血口喷人 +血枯病 +血库 +血块 +血亏 +血泪 +血泪史 +血淋淋 +血流 +血流变 +血流成河 +血流如注 +血脉 +血脉相通 +血泡 +血气 +血气方刚 +血气胸 +血亲 +血青素 +血清 +血清病 +血球 +血泉 +血热型 +血肉 +血肉横飞 +血肉相连 +血肉相联 +血肉之躯 +血色 +血色素 +血书 +血栓 +血水 +血丝 +血丝虫病 +血丝乎拉 +血糖 +血统 +血统工人 +血污 +血吸虫 +血洗 +血细胞 +血象 +血小板 +血腥 +血型 +血性 +血性汉子 +血循环 +血压 +血压计 +血样 +血液 +血液病 +血液病学 +血衣 +血印 +血印儿 +血友病 +血淤 +血淤型 +血雨腥风 +血缘 +血缘型 +血晕 +血燥型 +血债 +血战 +血站 +血账 +血脂 +血制品 +血肿 +血渍 +勋 +勋绩 +勋爵 +勋劳 +勋努达美 +勋位 +勋业 +勋章 +埙 +熏 +熏染 +熏陶 +窨水井 +薰 +寻 +寻常 +寻扯 +寻刺 +寻的 +寻甸 +寻甸县 +寻短见 +寻法 +寻访 +寻根 +寻根究底 +寻呼 +寻呼机 +寻呼台 +寻呼网 +寻花问柳 +寻欢作乐 +寻机 +寻见 +寻旧 +寻救 +寻梦者 +寻觅 +寻亲 +寻亲访友 +寻亲者 +寻求 +寻人 +寻食 +寻思 +寻死 +寻死觅活 +寻问条 +寻衅 +寻衅滋事 +寻寻觅觅 +寻医 +寻阅 +寻章摘句 +寻找 +寻枝摘叶 +寻踪 +寻踪游 +寻踪者 +巡 +巡捕 +巡捕房 +巡查 +巡查制 +巡道 +巡防 +巡访团 +巡抚 +巡航 +巡航导弹 +巡护 +巡回 +巡回赛 +巡回演出 +巡回展 +巡回制 +巡警 +巡警班 +巡警队 +巡礼 +巡逻 +巡逻车 +巡逻队 +巡逻舰 +巡逻哨 +巡逻艇 +巡山 +巡视 +巡视员 +巡特警 +巡行 +巡演 +巡洋舰 +巡夜 +巡游 +巡展 +巡诊 +巡诊队 +旬 +旬刊 +旬末 +旬阳县 +旬中 +驯 +驯服 +驯化 +驯马 +驯兽 +驯熟 +驯顺 +驯养 +驯致 +询 +询价 +询问 +询问者 +浔江 +浔南村 +浔尾 +浔阳城 +荀 +循 +循规蹈矩 +循规守旧 +循化 +循环 +循环不断 +循环论 +循环圈 +循环圈赛 +循环赛 +循环赛制 +循环体 +循环往复 +循环系统 +循环小数 +循环制 +循经 +循名责实 +循声 +循序渐进 +循循善诱 +循循诱人 +循章摘句 +训 +训保 +训斥 +训词 +训导 +训导员 +训话 +训诫 +训练 +训练班 +训练部 +训练舱 +训练场 +训练场地 +训练车 +训练队 +训练费 +训练馆 +训练舰 +训练局 +训练课 +训练伤 +训练台 +训练团 +训练营 +训练有素 +训练员 +训练组 +训令 +讯 +讯号 +讯问 +讯问室 +讯息 +汛 +汛期 +汛前 +汛情 +汛限 +迅 +迅即 +迅疾 +迅捷 +迅猛 +迅敏 +迅速 +徇 +徇情 +徇情枉法 +徇私 +徇私枉法 +徇私舞弊 +逊 +逊而不俗 +逊克县 +逊色 +殉 +殉国 +殉难 +殉情 +殉葬 +殉葬品 +殉职 +巽 +丫 +丫杈 +丫鬟 +丫头 +丫形 +压 +压案 +压宝 +压舱石 +压产 +压倒 +压倒性 +压低 +压电效应 +压锭 +压分 +压服 +压根 +压根儿 +压价 +压惊 +压境 +压卷之作 +压库 +压垮 +压力 +压力表 +压力感 +压力锅 +压力化 +压力机 +压力壳 +压路机 +压面机 +压迫 +压强 +压塑 +压岁钱 +压缩 +压缩饼干 +压缩机 +压缩空气 +压缩疗法 +压缩性 +压痛 +压腿 +压弯 +压延 +压抑 +压抑感 +压韵 +压榨 +压展 +压砧 +压阵 +压制 +压制型 +压轴 +压轴戏 +压轴子 +呀 +呀儿哟 +呀呀 +押 +押车 +押汇 +押加 +押解 +押金 +押款 +押款箱 +押送 +押运 +押运费 +押韵 +鸦胆子 +鸦岭乡 +鸦片 +鸦片战争 +鸦雀无声 +桠杈 +桠枫 +鸭 +鸭场 +鸭蛋 +鸭蛋青 +鸭儿梨 +鸭广梨 +鸭河口 +鸭黄 +鸭廊 +鸭梨 +鸭绿江 +鸭绿江口 +鸭群 +鸭绒 +鸭绒被 +鸭肉 +鸭舌帽 +鸭行鹅步 +鸭种 +鸭子 +鸭子坝 +鸭嘴笔 +鸭嘴龙 +鸭嘴兽 +牙 +牙白口清 +牙病 +牙碜 +牙齿 +牙床 +牙雕 +牙防 +牙粉 +牙粉袋 +牙缝 +牙疳 +牙膏 +牙膏袋式 +牙根 +牙垢 +牙关 +牙具 +牙科 +牙克石 +牙克西 +牙口 +牙轮 +牙买加 +牙买加队 +牙牌 +牙鲆 +牙签 +牙色 +牙石 +牙刷 +牙牙学语 +牙医 +牙音 +牙龈 +牙质 +牙周 +牙周病 +牙周带 +牙渍 +牙组织 +伢儿 +伢仔 +芽 +芽白 +芽包 +芽孢 +芽苞 +芽茶 +芽豆 +芽接 +芽苗菜 +芽球 +芽体 +芽眼 +芽秧 +蚜 +蚜虫 +崖 +崖壁 +崖壁画 +崖城 +崖顶 +崖沟 +崖谷 +崖刻 +崖面 +崖墓 +崖石 +崖下 +崖葬 +涯 +睚眦必报 +衙门 +衙内 +衙署 +衙役 +哑 +哑巴 +哑巴亏 +哑弹 +哑剧 +哑口无言 +哑铃 +哑铃型 +哑门 +哑门穴 +哑谜 +哑女 +哑炮 +哑然失笑 +哑然无声 +哑嗓 +哑童 +哑语 +雅 +雅安 +雅宝路 +雅称 +雅丹 +雅典 +雅尔塔 +雅盖隆 +雅各宾派 +雅观 +雅号 +雅化 +雅加达 +雅加达市 +雅间 +雅静 +雅克 +雅乐 +雅量 +雅砻江 +雅名 +雅琪队 +雅曲 +雅趣 +雅人 +雅士 +雅事 +雅室净几 +雅司病 +雅俗 +雅俗共赏 +雅温得 +雅兴 +雅性 +雅训 +雅瑶乡 +雅意 +雅雨堂 +雅韵 +雅者 +雅正 +雅致 +雅重 +雅奏 +雅座 +亚 +亚癌 +亚布力 +亚布力镇 +亚大 +亚大地区 +亚当 +亚东 +亚尔乡 +亚二局 +亚方 +亚非 +亚非拉 +亚戈迪纳 +亚鹤类 +亚候鸟 +亚记联 +亚锦赛 +亚俱杯 +亚军 +亚历山大 +亚利桑那 +亚硫酐 +亚硫酸 +亚龙湾 +亚麻 +亚麻布 +亚麻油 +亚马孙 +亚马孙河 +亚美 +亚美尼亚 +亚欧 +亚欧大陆 +亚排联 +亚佩克 +亚平宁 +亚热带 +亚热区 +亚松森 +亚太 +亚太地区 +亚太经济 +亚太区 +亚特兰大 +亚文化 +亚细亚 +亚硝胺 +亚硝化螺 +亚硝酸盐 +亚行 +亚型 +亚裔 +亚音速 +亚于 +亚原子 +亚运 +亚运村 +亚运会 +亚运史 +亚种 +亚洲 +亚洲队 +亚洲区 +亚洲司 +亚洲象 +亚洲型 +亚足联 +亚族人 +讶然于 +讶异 +垭子口 +氩 +氩气 +咽 +咽喉 +咽喉片 +咽喉炎 +咽头 +咽峡炎 +咽下 +烟 +烟霭霞影 +烟波 +烟波浩淼 +烟波浩渺 +烟草 +烟草局 +烟草商 +烟草味 +烟草业 +烟厂 +烟尘 +烟囱 +烟袋 +烟袋锅 +烟道 +烟道式 +烟蒂 +烟斗 +烟斗丝 +烟墩乡 +烟墩镇 +烟贩 +烟费 +烟感 +烟缸 +烟鬼 +烟海 +烟盒 +烟壶 +烟花 +烟花弹 +烟灰 +烟灰缸 +烟火 +烟火食 +烟碱 +烟酒 +烟具 +烟卷 +烟卷店 +烟卷儿 +烟客 +烟龄 +烟柳 +烟煤 +烟民 +烟幕 +烟幕弹 +烟农 +烟泡 +烟气 +烟枪 +烟圈 +烟色 +烟水 +烟丝 +烟酸 +烟台 +烟台港 +烟台山 +烟台市 +烟摊 +烟摊儿 +烟田 +烟筒 +烟头 +烟土 +烟退云敛 +烟雾 +烟雾弥漫 +烟霞 +烟消云散 +烟硝 +烟熏火燎 +烟蚜 +烟叶 +烟夜蛾 +烟瘾 +烟雨 +烟云 +烟云过眼 +烟柱 +烟子 +烟渍 +烟嘴 +烟嘴儿 +胭脂 +胭脂红 +淹 +淹城 +淹没 +淹没区 +淹死 +焉 +焉耆 +阉割 +阉人 +湮埋 +湮没 +湮灭 +腌 +腌菜 +腌法 +腌腊 +腌鸭 +腌制 +鄢 +鄢家河 +鄢家河村 +鄢陵县 +嫣然一笑 +蔫 +蔫头耷脑 +蔫头蔫脑 +延 +延安 +延安城 +延安东路 +延安路 +延安市 +延边 +延边队 +延长 +延长县 +延长线 +延承 +延迟 +延川县 +延付 +延河 +延河水 +延胡索 +延缓 +延吉 +延吉路 +延吉市 +延解 +延津县 +延揽 +延陵 +延米 +延绵 +延绵不断 +延南 +延年益寿 +延聘 +延期 +延请 +延庆 +延庆县 +延伸 +延伸性 +延时赛 +延寿 +延寿桃 +延寿县 +延水 +延巫 +延误 +延性 +延续 +延续性 +延展 +延展性 +严 +严办 +严查 +严惩 +严惩不贷 +严词 +严辞 +严打 +严冬 +严防 +严父 +严父慈母 +严格 +严管 +严寒 +严加 +严家岗 +严家岗村 +严紧 +严谨 +严禁 +严峻 +严峻性 +严苛 +严酷 +严酷性 +严厉 +严令 +严令禁止 +严密 +严密性 +严明 +严母 +严气正色 +严师 +严实 +严守 +严霜 +严丝合缝 +严肃 +严肃性 +严细 +严刑 +严严实实 +严要求 +严以律己 +严以律人 +严以自律 +严于律己 +严阵以待 +严整 +严正 +严治 +严重 +严重度 +严重性 +严重者 +芫花 +芫荽 +言 +言败 +言必有中 +言不及义 +言不由衷 +言差语错 +言传 +言传身教 +言词 +言辞 +言多必失 +言多语失 +言而无信 +言而有信 +言归于好 +言归正传 +言过其实 +言和 +言悔 +言及 +言简意赅 +言简语拙 +言教 +言路 +言论 +言论集 +言情 +言情片 +言情式 +言情戏 +言情小说 +言说 +言谈 +言谈举止 +言听计从 +言外之意 +言无不尽 +言无二价 +言下之意 +言行 +言行不一 +言行录 +言行一致 +言言 +言犹未尽 +言犹在耳 +言语 +言喻 +言责 +言者 +言者无罪 +言之成理 +言之无物 +言之有理 +言之有物 +言之凿凿 +言之谆谆 +言志 +言中 +岩 +岩爆 +岩层 +岩场 +岩丛 +岩洞 +岩峰 +岩画 +岩画区 +岩浆 +岩浆岩 +岩块 +岩溶 +岩蕊柱 +岩石 +岩石圈 +岩石体 +岩寺 +岩松 +岩土 +岩下山 +岩心 +岩性 +岩盐 +岩羊 +岩鹰 +沿 +沿岸 +沿边 +沿边儿 +沿儿 +沿革 +沿海 +沿河 +沿湖 +沿江 +沿江路 +沿阶草 +沿路 +沿南乡 +沿台 +沿条儿 +沿途 +沿袭 +沿线 +沿循 +沿用 +沿着 +炎 +炎帝 +炎黄 +炎黄子孙 +炎凉 +炎陵 +炎陵县 +炎热 +炎日 +炎夏 +炎性 +炎炎 +炎症 +研 +研读 +研发 +研究 +研究班 +研究部 +研究法 +研究馆员 +研究会 +研究界 +研究科 +研究生 +研究生班 +研究生部 +研究生会 +研究生院 +研究史 +研究室 +研究所 +研究型 +研究性 +研究员 +研究员级 +研究院 +研究院所 +研究者 +研究组 +研论会 +研磨 +研讨 +研讨班 +研讨会 +研讨性 +研习 +研习班 +研修 +研修班 +研修生 +研制 +研制厂 +研制者 +研制组 +盐 +盐巴 +盐厂 +盐场 +盐城 +盐城市 +盐池 +盐池县 +盐都 +盐都县 +盐度 +盐分 +盐肤木 +盐阜 +盐湖 +盐湖城 +盐花 +盐化 +盐化工业 +盐环定 +盐碱 +盐碱地 +盐碱滩 +盐碱土 +盐井 +盐类 +盐粒 +盐卤 +盐铺 +盐汽水 +盐泉 +盐山 +盐舍 +盐霜 +盐水 +盐水选种 +盐酸 +盐酸盐 +盐滩 +盐田 +盐田港 +盐田港区 +盐铁论 +盐土 +盐坨子 +盐务局 +盐业 +盐渍 +盐渍化 +阎 +阎家庄 +阎良区 +阎罗 +阎罗王 +阎三囤 +阎王 +阎王爷 +阎王账 +筵席 +筵席税 +筵宴 +颜 +颜家屯村 +颜料 +颜料碟 +颜面 +颜色 +颜体 +檐 +檐沟 +檐口 +檐水 +檐子 +兖矿 +兖石 +兖州 +兖州市 +奄奄待毙 +奄奄一息 +俨 +俨然 +俨如 +衍 +衍化 +衍生 +衍生物 +衍文 +偃虹堤 +偃旗息鼓 +偃师 +偃师市 +偃松 +厣 +掩 +掩蔽 +掩蔽部 +掩蔽体 +掩藏 +掩耳盗铃 +掩盖 +掩盖剂 +掩盖体 +掩护 +掩卷 +掩埋 +掩面而泣 +掩目捕雀 +掩却 +掩人耳目 +掩饰 +掩饰剂 +掩体 +掩眼法 +掩映 +眼 +眼巴巴 +眼病 +眼波 +眼馋 +眼眵 +眼底 +眼底病 +眼儿 +眼防所 +眼福 +眼高手低 +眼观六路 +眼光 +眼红 +眼花 +眼花缭乱 +眼疾 +眼疾手快 +眼际 +眼尖 +眼睑 +眼睑炎 +眼见 +眼见得 +眼见为实 +眼角 +眼角膜 +眼捷手快 +眼睫毛 +眼界 +眼睛 +眼镜 +眼镜店 +眼镜架 +眼镜片 +眼镜蛇 +眼看 +眼科 +眼科界 +眼科史 +眼眶 +眼泪 +眼里 +眼力 +眼帘 +眼裂 +眼冒金星 +眼眉 +眼明手快 +眼眸 +眼目 +眼泡 +眼皮 +眼皮子 +眼前 +眼球 +眼圈 +眼热 +眼色 +眼神 +眼生 +眼熟 +眼跳 +眼外伤 +眼窝 +眼下 +眼线 +眼压 +眼药 +眼药水 +眼用 +眼罩 +眼睁睁 +眼中 +眼中钉 +眼珠 +眼珠儿 +眼珠子 +郾城县 +演 +演变 +演播 +演播稿 +演播室 +演播厅 +演唱 +演唱队 +演唱会 +演唱家 +演唱者 +演出 +演出队 +演出费 +演出服 +演出季 +演出票 +演出厅 +演出团 +演出者 +演出证 +演词 +演丰 +演丰镇 +演化 +演化史 +演化说 +演技 +演讲 +演讲稿 +演讲会 +演讲赛 +演讲台 +演讲者 +演进 +演剧 +演剧队 +演练 +演示 +演示会 +演示厅 +演事 +演释 +演说 +演算 +演替 +演习 +演习班 +演习场 +演戏 +演义 +演艺 +演艺会 +演艺界 +演艺圈 +演绎 +演绎法 +演绎者 +演员 +演职人员 +演职员 +演职员工 +演奏 +演奏法 +演奏会 +演奏家 +演奏台 +演奏厅 +演奏员 +演奏者 +厌 +厌恶 +厌烦 +厌烦感 +厌倦 +厌弃 +厌食者 +厌食症 +厌世 +厌学症 +厌氧池 +厌战 +砚 +砚池 +砚池河 +砚池街 +砚雕 +砚山 +砚山县 +砚师 +砚石 +砚台 +砚田 +砚斋 +唁电 +唁函 +宴 +宴会 +宴会厅 +宴会席 +宴会桌 +宴请 +宴席 +宴饮 +晏 +晏家镇 +晏下村 +艳 +艳服 +艳红 +艳丽 +艳情 +艳诗 +艳史 +艳羡 +艳阳 +艳阳天 +艳妆 +艳装 +验 +验钞器 +验电笔 +验电器 +验方 +验放 +验管 +验光 +验货 +验卡点 +验明 +验明正身 +验票 +验讫章 +验尸 +验收 +验收关 +验算 +验伪机 +验箱 +验血 +验印 +验证 +验证台 +验证员 +谚语 +堰 +堰顶 +堰岭 +堰内 +堰塞湖 +堰塘 +堰体 +焰火 +焰口 +焰心 +雁 +雁北 +雁城 +雁翅 +雁翅镇 +雁荡 +雁荡路 +雁荡山 +雁过拔毛 +雁过留声 +雁来红 +雁翎队 +雁门关 +雁栖湖 +雁群 +雁塔 +雁同东路 +雁头 +雁窝岛 +雁行 +雁阵 +酽 +酽酽 +燕 +燕川 +燕东园 +燕峒乡 +燕儿 +燕尔 +燕化 +燕郊 +燕京 +燕居 +燕玲 +燕麦 +燕麦草 +燕麦地组 +燕南园 +燕雀 +燕塞湖 +燕莎桥 +燕山 +燕山街 +燕头 +燕头镇 +燕王 +燕尾服 +燕尾鱼 +燕窝 +燕窝镇 +燕鱼 +燕语莺声 +燕园 +燕赵 +燕子 +燕子垭 +赝 +赝本 +赝币 +赝鼎 +赝品 +央 +央告 +央求 +央视 +央托 +央行 +泱泱 +泱泱大国 +殃 +殃及 +秧 +秧歌 +秧歌队 +秧歌剧 +秧歌赛 +秧鸡 +秧脚 +秧苗 +秧盘 +秧田 +秧子 +扬 +扬鞭 +扬菜 +扬长避短 +扬长补短 +扬长而去 +扬场 +扬场机 +扬尘 +扬程 +扬店乡 +扬都 +扬杜抑李 +扬帆 +扬花 +扬黄 +扬基债 +扬剧 +扬李抑杜 +扬眉捋须 +扬眉吐气 +扬眉万里 +扬名 +扬名天下 +扬其所长 +扬弃 +扬琴 +扬沙 +扬声器 +扬水站 +扬汤止沸 +扬头 +扬威 +扬言 +扬扬 +扬扬自得 +扬抑取舍 +扬中 +扬中市 +扬州 +扬州市 +扬子鳄 +扬子江 +羊 +羊八井 +羊布病 +羊草 +羊册镇 +羊肠 +羊肠道儿 +羊肠线 +羊肠小道 +羊城 +羊齿 +羊齿植物 +羊道 +羊痘 +羊肚蕈 +羊坊店 +羊粪 +羊羔 +羊羹 +羊工 +羊倌 +羊毫 +羊胡子草 +羊湖 +羊价 +羊角 +羊角辫 +羊角风 +羊口 +羊栏镇 +羊毛 +羊毛疔 +羊毛里 +羊毛绒 +羊毛衫 +羊毛衫裤 +羊膜 +羊奶 +羊年 +羊爬式 +羊棚 +羊皮 +羊皮袄 +羊皮感 +羊皮鼓 +羊皮褥 +羊皮纸 +羊圈 +羊群 +羊绒 +羊绒衫 +羊肉 +羊肉串 +羊三木 +羊市 +羊水 +羊饲养业 +羊窝 +羊痫风 +羊腥汤 +羊油 +羊崽 +羊脂 +羊踯躅 +羊庄 +羊庄镇 +羊卓雍湖 +阳 +阳安 +阳安乡 +阳朝乡 +阳城 +阳城县 +阳澄 +阳春 +阳春白雪 +阳春面 +阳春砂 +阳春市 +阳电 +阳电子 +阳奉阴违 +阳刚 +阳刚雄强 +阳刚之美 +阳刚之气 +阳高县 +阳沟 +阳谷 +阳谷县 +阳关 +阳关村 +阳关大道 +阳关道 +阳光 +阳光厅 +阳湖 +阳极 +阳间 +阳江 +阳江市 +阳离子 +阳历 +阳陵泉 +阳面 +阳平 +阳平关 +阳坪 +阳浦 +阳畦 +阳起石 +阳气 +阳曲 +阳泉 +阳泉市 +阳雀 +阳伞 +阳石隘 +阳朔 +阳朔县 +阳台 +阳痿 +阳文 +阳武 +阳羡 +阳新 +阳新县 +阳信 +阳信县 +阳性 +阳性率 +阳性植物 +阳原 +阳韵 +阳宗海 +杨 +杨柏乡 +杨村 +杨村浦路 +杨芳乡 +杨公庙乡 +杨花 +杨花台村 +杨伙盘 +杨家村 +杨家沟 +杨家湖 +杨家将 +杨家岭 +杨家门 +杨家乡 +杨凌 +杨陵 +杨柳 +杨柳岸 +杨柳池 +杨柳池镇 +杨柳风 +杨柳镇 +杨柳枝 +杨楼 +杨楼乡 +杨楼镇 +杨楼庄 +杨梅 +杨庙 +杨木 +杨浦 +杨浦区 +杨舍河 +杨舍镇 +杨士岗镇 +杨士乡 +杨树 +杨树街 +杨树林 +杨树浦 +杨水湖 +杨宋镇 +杨桃 +杨屯镇 +杨振宁 +杨枝鱼 +杨庄村 +佯称 +佯动 +佯攻 +佯降 +佯装 +佯作 +洋 +洋白菜 +洋补品 +洋布 +洋财 +洋菜 +洋参 +洋场 +洋场气 +洋车 +洋车夫 +洋瓷 +洋葱 +洋底 +洋地黄 +洋弟子 +洋缎 +洋房 +洋粉 +洋服 +洋橄榄 +洋镐 +洋鬼子 +洋毫 +洋河村 +洋河弄 +洋华堂 +洋话 +洋槐 +洋灰 +洋荤 +洋火 +洋货 +洋技术 +洋碱 +洋姜 +洋将 +洋教 +洋教头 +洋井 +洋酒 +洋快餐 +洋兰 +洋里洋气 +洋流 +洋楼 +洋面 +洋模特 +洋奴 +洋女婿 +洋牌 +洋片 +洋坪 +洋浦 +洋浦港 +洋气 +洋钱 +洋枪 +洋枪队 +洋腔 +洋琴 +洋球 +洋人 +洋嗓子 +洋纱 +洋铁 +洋娃娃 +洋为中用 +洋务 +洋媳妇 +洋县 +洋相 +洋香瓜 +洋行 +洋绣球 +洋洋 +洋洋大观 +洋洋得意 +洋洋洒洒 +洋洋万言 +洋洋自得 +洋溢 +洋饮料 +洋油 +洋芋 +洋洲村 +洋洲镇 +洋装 +仰 +仰八叉 +仰观 +仰光 +仰角 +仰赖 +仰面 +仰慕 +仰人鼻息 +仰山村 +仰韶文化 +仰首 +仰天 +仰天长叹 +仰天大笑 +仰头 +仰望 +仰卧 +仰卧起坐 +仰泳 +仰仗 +仰珍 +养 +养兵 +养兵千日 +养病 +养蚕业 +养车户 +养成 +养儿防老 +养法 +养分 +养蜂 +养蜂人 +养蜂业 +养父 +养父母 +养狐 +养狐场 +养狐栏 +养壶笔 +养虎遗患 +养护 +养护费 +养活 +养机户 +养鸡 +养鸡场 +养鸡房 +养鸡户 +养鸡业 +养家 +养家活口 +养精蓄锐 +养老 +养老金 +养老送终 +养老院 +养老者 +养料 +养鹿场 +养鹿业 +养路 +养路费 +养路工 +养鳗 +养鳗业 +养母 +养目镜 +养牛 +养牛厂 +养牛场 +养牛户 +养牛人 +养牛业 +养女 +养气 +养伤 +养身 +养神 +养生 +养生功 +养生学 +养生之道 +养兔场 +养兔业 +养虾场 +养虾户 +养蝎 +养蝎场 +养蝎业 +养蟹 +养心 +养畜 +养畜热 +养鸭户 +养颜 +养羊业 +养痈成患 +养痈遗患 +养鱼 +养鱼场 +养鱼池 +养鱼区 +养育 +养育之恩 +养植 +养殖 +养殖场 +养殖池 +养殖地 +养殖户 +养殖链 +养殖区 +养殖学 +养殖业 +养殖鱼 +养猪 +养猪场 +养猪村 +养猪户 +养猪业 +养子 +养尊处优 +氧 +氧分 +氧分压 +氧分子 +氧化 +氧化剂 +氧化硫 +氧化铝 +氧化铁 +氧化铁皮 +氧化铜 +氧化物 +氧化焰 +氧气 +氧气包 +氧气厂 +氧气管 +氧气瓶 +氧炔吹管 +氧原子 +痒 +痒痒 +怏然 +怏怏 +怏怏不乐 +恙 +恙虫 +样 +样板 +样板房 +样板戏 +样报 +样本 +样本股 +样本量 +样册 +样车 +样儿 +样稿 +样管 +样机 +样刊 +样款 +样片 +样品 +样式 +样书 +样相 +样样 +样张 +样装 +样子 +样子沟 +漾 +漾濞 +夭 +夭亡 +夭折 +吆 +吆喝 +吆喝声 +吆五喝六 +妖道 +妖风 +妖怪 +妖猴 +妖精 +妖里妖气 +妖媚 +妖魔 +妖魔鬼怪 +妖孽 +妖气 +妖娆 +妖术 +妖物 +妖雾 +妖言 +妖言惑众 +妖艳 +妖冶 +妖蜮 +腰 +腰板 +腰板儿 +腰包 +腰堡乡 +腰部 +腰缠万贯 +腰带 +腰刀 +腰杆 +腰杆子 +腰岗山 +腰鼓 +腰鼓舞 +腰锅 +腰果 +腰果仁 +腰果汁 +腰花 +腰伤 +腰身 +腰酸背疼 +腰酸背痛 +腰酸腿痛 +腰痛穴 +腰围 +腰眼 +腰肢 +腰椎 +腰椎骨 +腰椎间盘 +腰子 +邀 +邀兑 +邀功 +邀功请赏 +邀集 +邀请 +邀请方 +邀请函 +邀请人 +邀请赛 +邀请书 +邀请信 +邀请展 +爻 +尧舜 +尧天舜日 +尧治河 +尧治河村 +尧子营村 +肴馔 +姚 +姚伏 +姚家村 +姚坪 +姚坪乡 +姚山乡 +轺车 +窑 +窑壁 +窑厂 +窑池 +窑洞 +窑洞式 +窑儿洼 +窑罐 +窑河乡 +窑火 +窑具 +窑坑 +窑炉 +窑门 +窑内 +窑坡 +窑尾 +窑业 +窑址 +窑主 +谣 +谣传 +谣风 +谣言 +谣言惑众 +谣谚 +谣诼 +徭役 +徭役地租 +摇 +摇把子 +摇摆 +摇摆不定 +摇摆法 +摇摆器 +摇摆舞 +摇摆性 +摇臂 +摇船 +摇窗 +摇唇鼓舌 +摇荡 +摇动 +摇鹅毛扇 +摇滚 +摇滚乐 +摇撼 +摇晃 +摇篮 +摇篮曲 +摇旗呐喊 +摇钱树 +摇身一变 +摇头 +摇头摆尾 +摇头晃脑 +摇尾乞怜 +摇蚊 +摇摇 +摇摇摆摆 +摇摇晃晃 +摇摇曳曳 +摇摇欲坠 +摇曳 +摇曳多姿 +摇椅 +遥 +遥不可及 +遥测 +遥岑 +遥感 +遥感图 +遥感学家 +遥控 +遥控器 +遥望 +遥无期 +遥相呼应 +遥想 +遥遥 +遥遥地 +遥遥领先 +遥遥茫茫 +遥遥无期 +遥遥相对 +遥远 +遥指 +遥祝 +瑶 +瑶池 +瑶沟 +瑶家 +瑶民 +瑶山 +瑶山乡 +瑶乡 +瑶绣 +瑶学 +瑶学会 +瑶寨 +瑶族 +瑶族乡 +杳 +杳渺 +杳无人烟 +杳无音信 +杳无音讯 +咬 +咬定 +咬紧牙关 +咬文嚼字 +咬牙 +咬牙切齿 +咬咬 +咬字 +窈窕 +舀 +舀子 +药 +药补 +药材 +药材店 +药草 +药草园 +药叉 +药厂 +药城 +药单 +药到病除 +药典 +药店 +药都 +药饵 +药贩 +药方 +药房 +药费 +药粉 +药膏 +药歌 +药工 +药谷 +药罐子 +药柜 +药害 +药衡 +药剂 +药剂拌种 +药剂科 +药剂师 +药剂学 +药价 +药检 +药检所 +药酒 +药具 +药科 +药款 +药理 +药理系 +药理学 +药力 +药量 +药疗 +药料 +药棉 +药面 +药名 +药膜 +药囊 +药捻子 +药碾 +药农 +药片 +药品 +药品费 +药品量 +药瓶 +药铺 +药膳 +药商 +药绳 +药师 +药石 +药市 +药书 +药栓 +药水 +药贴 +药筒 +药丸 +药王 +药王庙 +药味 +药物 +药物部 +药香 +药箱 +药效 +药械 +药性 +药性气 +药学 +药学会 +药学系 +药学院 +药业 +药业界 +药液 +药引子 +药用 +药用菌 +药浴 +药源 +药皂 +药渣 +药疹 +药政局 +药政科 +要 +要案 +要不 +要不得 +要不然 +要不是 +要冲 +要道 +要得 +要地 +要点 +要端 +要犯 +要饭 +要官 +要害 +要好 +要价 +要件 +要津 +要紧 +要诀 +要览 +要量 +要领 +要路 +要略 +要论 +要么 +要命 +要目 +要强 +要求 +要求者 +要衢 +要人 +要塞 +要塞区 +要事 +要是 +要说 +要死不活 +要素 +要图 +要闻 +要务 +要挟 +要言不烦 +要义 +要因 +要员 +要约 +要则 +要者 +要职 +要旨 +要子 +鹞 +鹞雀 +鹞式 +鹞鹰 +鹞子 +耀 +耀斑 +耀华力路 +耀目 +耀武扬威 +耀县 +耀眼 +椰 +椰城 +椰岛 +椰胡 +椰林 +椰林湾 +椰蓉 +椰树 +椰树林 +椰影 +椰油 +椰枣 +椰子 +椰子肉糖 +椰子树 +椰子油 +椰子汁 +噎 +噎嗝 +爷 +爷儿 +爷儿俩 +爷儿们 +爷们 +爷们儿 +爷爷 +耶 +耶城 +耶和华 +耶里镇 +耶鲁 +耶路撒冷 +耶市 +耶稣 +耶稣教 +耶稣教徒 +揶揄 +也 +也罢 +也好 +也就是说 +也门 +也许 +冶 +冶钢 +冶核 +冶金 +冶金部 +冶金焦 +冶炼 +冶炼厂 +野 +野病毒 +野菜 +野餐 +野蚕 +野草 +野炊 +野葱 +野地 +野渡 +野鸽 +野鸽子 +野葛 +野狗 +野枸杞头 +野果 +野鹤闲云 +野狐禅 +野葫芦引 +野花 +野火 +野鸡 +野角马 +野景 +野狼 +野老 +野鹿 +野驴 +野麻 +野马 +野蛮 +野猫 +野鸟 +野牛 +野牛草 +野葡萄 +野芪 +野荠菜 +野蔷薇 +野禽 +野青煤 +野青煤层 +野趣 +野雀儿 +野人 +野三关镇 +野桑 +野山歌 +野山菊 +野生 +野生虎 +野食儿 +野史 +野兽 +野蔬 +野鼠 +野兔 +野外 +野外队 +野外工作 +野豌豆 +野味 +野物 +野心 +野心勃勃 +野心家 +野性 +野鸭 +野营 +野营地 +野营拉练 +野战 +野战军 +野种 +野猪 +业 +业大 +业户 +业绩 +业界 +业经 +业精于勤 +业内 +业内人士 +业师 +业态 +业务 +业务部 +业务处 +业务费 +业务科 +业务量 +业务司 +业务厅 +业务庭 +业务网 +业务性 +业务员 +业务者 +业务组 +业已 +业余 +业余队 +业余教育 +业余组 +业障 +业者 +业主 +业主制 +叶 +叶斑病 +叶柄 +叶窗 +叶翠欲滴 +叶蛋白 +叶尔羌河 +叶蜂 +叶公好龙 +叶冠 +叶红素 +叶猴 +叶画 +叶黄素 +叶尖 +叶筋 +叶茎 +叶块繁殖 +叶类 +叶绿素 +叶绿体 +叶轮 +叶落归根 +叶脉 +叶面 +叶面施肥 +叶喷 +叶片 +叶片锁 +叶鞘 +叶球 +叶肉 +叶舌 +叶盛 +叶酸 +叶甜菜 +叶纹 +叶县 +叶榭镇 +叶锈病 +叶序 +叶芽 +叶芽儿 +叶叶 +叶腋 +叶枝 +叶子 +叶子烟 +曳动 +曳光弹 +页 +页理 +页码 +页面 +页心 +页岩 +页岩石 +页岩砖 +夜 +夜班 +夜班车 +夜半 +夜半更深 +夜报 +夜泊 +夜不闭户 +夜不成寐 +夜不出户 +夜不能寐 +夜餐 +夜叉 +夜长梦多 +夜场 +夜车 +夜大 +夜大学 +夜蛾 +夜饭 +夜丰颂 +夜丰颂府 +夜风 +夜工 +夜光表 +夜光虫 +夜航 +夜壶 +夜话 +夜间 +夜景 +夜景灯 +夜静更深 +夜空 +夜来香 +夜阑人静 +夜郎自大 +夜里 +夜鹭鸟 +夜盲 +夜盲症 +夜猫子 +夜明星 +夜明珠 +夜幕 +夜幕低垂 +夜鸟 +夜尿症 +夜曲 +夜色 +夜深 +夜深人静 +夜市 +夜市街 +夜视 +夜宿 +夜晚 +夜袭 +夜宵 +夜校 +夜夜 +夜以继日 +夜莺 +夜鹰 +夜游 +夜游神 +夜运 +夜战 +夜帐 +夜中学 +夜总会 +夜总会式 +掖 +掖县 +液 +液氮 +液肥 +液果 +液化 +液化气 +液化气船 +液化气所 +液晶 +液泡 +液氢 +液态 +液态水 +液体 +液相 +液压 +液压机 +液氧 +液氧箱 +液汁 +液状 +谒 +谒陵 +谒祖 +腋 +腋臭 +腋毛 +腋窝 +腋下 +腋芽 +靥 +一 +一·二八 +一·二一 +一把 +一把手 +一把子 +一百 +一败如水 +一败涂地 +一班人 +一般 +一般地说 +一般而论 +一般而言 +一般化 +一般见识 +一般来说 +一般说来 +一般无二 +一般性 +一斑 +一斑窥豹 +一板一眼 +一版再版 +一半 +一瓣心香 +一榜 +一饱口福 +一饱眼福 +一辈子 +一本初衷 +一本万利 +一本正经 +一鼻子灰 +一笔带过 +一笔勾销 +一笔抹杀 +一笔抹煞 +一碧如洗 +一臂之力 +一边 +一边倒 +一表人才 +一表人材 +一并 +一并了之 +一病不起 +一波三折 +一波又起 +一不怕苦 +一不为名 +一不小心 +一不做 +一步到位 +一步登天 +一步舞 +一部 +一部分 +一草一木 +一侧 +一差二错 +一产 +一场春梦 +一场空 +一唱三叹 +一唱一和 +一超 +一朝 +一朝一夕 +一尘不染 +一成不变 +一筹 +一筹莫展 +一储到底 +一触即发 +一传 +一传奖 +一传十 +一传手 +一串红 +一槌定音 +一锤定音 +一次方程 +一次函数 +一次性 +一蹴而就 +一大 +一大二公 +一大家子 +一大溜 +一大早 +一代 +一代风流 +一代楷模 +一代人 +一带 +一带而过 +一旦 +一党制 +一档 +一刀两断 +一刀切 +一道 +一得之功 +一得之见 +一得之愚 +一等 +一等舱 +一等功 +一等奖 +一低 +一低一高 +一点 +一点儿 +一点一滴 +一点钟 +一丁点儿 +一定 +一定会计 +一定量 +一定之规 +一动 +一动不动 +一睹 +一睹芳容 +一睹为快 +一度 +一端 +一对 +一对一 +一而再 +一二 +一二·九 +一二点 +一二级 +一二年期 +一二月 +一二月份 +一发 +一发千钧 +一帆风顺 +一帆顺风 +一番 +一番话 +一反常态 +一方 +一方面 +一方平安 +一方有难 +一放了之 +一飞冲天 +一分高下 +一分为八 +一分为二 +一分为四 +一分之差 +一府两院 +一改了之 +一概 +一概而论 +一干 +一干打手 +一干二净 +一岗双责 +一高 +一高一低 +一个 +一个半个 +一个劲 +一个劲儿 +一个样 +一个样儿 +一共 +一古脑儿 +一股就灵 +一股了之 +一股脑儿 +一骨碌 +一鼓足气 +一鼓作气 +一官半职 +一贯 +一贯性 +一贯制 +一锅端 +一锅粥 +一锅煮 +一国两制 +一孩户 +一号机 +一哄而起 +一哄而散 +一哄而上 +一呼百诺 +一呼百应 +一忽儿 +一虎势单 +一户侯 +一花独放 +一话 +一怀愁绪 +一晃 +一晃儿 +一挥而就 +一会儿 +一机部 +一机连 +一级 +一级品 +一己官欲 +一技之长 +一季度 +一家 +一家村 +一家多机 +一家人 +一家一户 +一家之言 +一家子 +一减一增 +一见倾心 +一见如故 +一见钟情 +一建 +一箭双雕 +一箭之地 +一江之隔 +一角 +一介书生 +一经 +一九九八 +一九九九 +一九九六 +一九九七 +一局制 +一举 +一举成名 +一举多得 +一举两得 +一举三得 +一举数得 +一举四得 +一举一动 +一句话 +一决雌雄 +一绝 +一蹶不振 +一卡通 +一勘局 +一刻 +一刻千金 +一刻钟 +一孔之见 +一口气 +一口咬定 +一口一声 +一块 +一块儿 +一匡天下 +一窥全豹 +一来 +一来二去 +一览 +一览表 +一览无遗 +一览无余 +一揽子 +一劳永逸 +一老一少 +一类 +一力 +一连 +一连串 +一两点 +一两点钟 +一了百了 +一鳞半爪 +一溜儿 +一溜烟 +一流 +一路 +一路风尘 +一路货 +一路平安 +一路上 +一路顺风 +一律 +一落千丈 +一马当先 +一马平川 +一码事 +一脉相承 +一脉相传 +一脉相通 +一满意 +一毛不拔 +一门心思 +一米板 +一秘 +一棉 +一棉厂 +一面 +一面儿理 +一面之词 +一面之交 +一鸣惊人 +一命呜呼 +一模一样 +一亩泉 +一木难支 +一目了然 +一目十行 +一年半载 +一年到头 +一年期 +一年生 +一年四季 +一年一度 +一年制 +一念之差 +一怒而去 +一怒之下 +一诺千金 +一拍即合 +一派 +一盘散沙 +一旁 +一炮打响 +一喷三防 +一批 +一片冰心 +一片哗然 +一片狼藉 +一片生机 +一片汪洋 +一瞥 +一贫如洗 +一颦一笑 +一品 +一品锅 +一品红 +一破了之 +一期 +一齐 +一企两制 +一起 +一气 +一气呵成 +一气之下 +一汽 +一汽人 +一钱不值 +一腔热血 +一墙之隔 +一抢而光 +一抢而空 +一窍不通 +一切 +一轻 +一轻局 +一清二白 +一清二楚 +一清早 +一穷二白 +一丘之貉 +一去不返 +一人班 +一人得道 +一日 +一日千里 +一日三餐 +一日游 +一日之功 +一荣俱荣 +一如 +一如既往 +一如继往 +一扫而光 +一扫而过 +一扫而空 +一刹那 +一霎 +一霎时 +一山之隔 +一闪而过 +一上午 +一身 +一身清白 +一身是胆 +一身正气 +一神教 +一审 +一生 +一生一世 +一声不吭 +一声不响 +一声令下 +一省两地 +一石多鸟 +一时 +一时间 +一时一刻 +一时之困 +一世 +一市 +一事当前 +一事无成 +一视同仁 +一试身手 +一是一 +一手 +一手包办 +一手点 +一手一足 +一手遮天 +一树百获 +一树了之 +一衰俱衰 +一水 +一水之隔 +一顺儿 +一瞬 +一瞬间 +一丝不苟 +一丝不挂 +一丝一毫 +一四月 +一俟 +一损俱损 +一塌糊涂 +一潭死水 +一体 +一体化 +一体机 +一体式 +一体性 +一天到晚 +一条龙 +一条心 +一通百通 +一同 +一统 +一统天 +一统天下 +一统志 +一头 +一吐为快 +一团和气 +一团乱麻 +一团漆黑 +一团糟 +一推了之 +一推双考 +一拖 +一拖再拖 +一网打尽 +一往情深 +一往无前 +一往直前 +一望无边 +一望无际 +一望无涯 +一望无垠 +一味 +一文不名 +一文不值 +一窝蜂 +一无 +一无是处 +一无所长 +一无所画 +一无所获 +一无所有 +一无所知 +一五一十 +一误再误 +一息尚存 +一席话 +一席之地 +一系列 +一下 +一显身手 +一线 +一线生机 +一相情愿 +一厢情愿 +一向 +一小 +一小撮 +一小二私 +一笑置之 +一些 +一泻而下 +一泻千里 +一心 +一心一德 +一心一意 +一新 +一星半点 +一行 +一型 +一言不发 +一言九鼎 +一言难尽 +一言堂 +一言为定 +一言一行 +一眼 +一氧化碳 +一样 +一药 +一业 +一业化 +一业为主 +一叶障目 +一夜间 +一一 +一一道来 +一一列举 +一衣带水 +一医大 +一以贯之 +一意孤行 +一应 +一应俱全 +一拥而起 +一拥而入 +一拥而上 +一有 +一隅 +一语道破 +一语惊人 +一语破的 +一语双关 +一语中的 +一元 +一元方程 +一元复始 +一元化 +一元论 +一元酸 +一元性 +一院制 +一月 +一月份 +一跃而起 +一再 +一早 +一则 +一展 +一展才华 +一展风采 +一展歌喉 +一展身手 +一展无垠 +一展雄姿 +一站式 +一招一式 +一针 +一针见血 +一针一线 +一枕黄粱 +一阵 +一阵风 +一阵子 +一整两反 +一整套 +一整天 +一枝独秀 +一知半解 +一直 +一纸空谈 +一纸空文 +一致 +一致性 +一掷千金 +一中 +一中全会 +一中一台 +一助一 +一抓到底 +一专多能 +一转眼 +一准 +一准儿 +一着不慎 +一字不差 +一字排开 +一字千金 +一字师 +一字一顿 +一字一句 +一字之差 +一总 +一走了之 +一醉方休 +伊 +伊埃纳宫 +伊拜尔 +伊比利亚 +伊川 +伊川县 +伊春 +伊春市 +伊达尔戈 +伊甸园 +伊东市 +伊豆 +伊尔 +伊方 +伊夫岛 +伊瓜苏 +伊瓜苏市 +伊河路 +伊基克 +伊加特 +伊克昭盟 +伊拉克 +伊朗 +伊朗队 +伊犁 +伊丽莎白 +伊利湖 +伊盟 +伊敏 +伊莫河 +伊宁 +伊宁市 +伊萨尔 +伊塞克湖 +伊始 +伊士曼 +伊斯兰 +伊斯兰堡 +伊斯兰教 +伊斯兰人 +伊斯兰式 +伊通社 +伊图里河 +伊万科夫 +伊万诺夫 +伊蚊 +伊武部 +伊循 +衣 +衣胞 +衣被 +衣钵 +衣钵相传 +衣不蔽体 +衣橱 +衣袋 +衣兜 +衣蛾 +衣分 +衣服 +衣勾 +衣钩 +衣冠 +衣冠不整 +衣冠楚楚 +衣冠禽兽 +衣冠冢 +衣柜 +衣架 +衣角 +衣襟 +衣锦还乡 +衣扣 +衣裤 +衣来伸手 +衣料 +衣领 +衣帽 +衣袍 +衣片 +衣裙 +衣衫 +衣裳 +衣裳襟 +衣食 +衣食父母 +衣食行 +衣食住行 +衣食住医 +衣饰 +衣纹 +衣物 +衣箱 +衣袖 +衣衣不舍 +衣鱼 +衣褶 +衣装 +衣着 +医 +医案 +医大 +医道 +医德 +医典 +医方 +医风 +医改 +医工 +医管局 +医护 +医患 +医魂 +医技 +医家 +医教研 +医界 +医科 +医科院 +医理 +医疗 +医疗点 +医疗队 +医疗费 +医疗界 +医疗卡 +医疗期 +医疗史 +医疗所 +医疗网 +医疗系 +医疗箱 +医疗型 +医疗站 +医疗证 +医疗组 +医龄 +医马论典 +医派 +医生 +医圣 +医师 +医师法 +医史 +医史学者 +医士 +医书 +医术 +医坛 +医托 +医卫界 +医卫体 +医卫组 +医务 +医务处 +医务界 +医务科 +医务室 +医务所 +医械 +医学 +医学会 +医学家 +医学奖 +医学界 +医学类 +医学史 +医学系 +医学院 +医药 +医药费 +医药界 +医药局 +医药品 +医药学 +医药学家 +医药学界 +医药业 +医药站 +医用 +医院 +医院法 +医政路 +医治 +医嘱 +医专 +依 +依安 +依安县 +依傍 +依波沃村 +依此类推 +依次 +依从 +依存 +依存度 +依存权 +依存性 +依达乡 +依东县 +依法 +依附 +依附性 +依归 +依纪 +依旧 +依据 +依靠 +依赖 +依赖度 +依赖感 +依赖型 +依赖性 +依兰 +依兰县 +依恋 +依率 +依然 +依然故我 +依然如故 +依山傍水 +依山临海 +依恃 +依顺 +依托 +依偎 +依我看 +依稀 +依稀可见 +依依 +依依不舍 +依依恋恋 +依依难舍 +依依惜别 +依仗 +依照 +咿呀 +咿唷 +铱 +铱金笔 +铱星 +揖 +欹 +欹曲 +漪汾苑 +黟山 +黟县 +仪 +仪表 +仪表厂 +仪表美 +仪表盘 +仪表堂堂 +仪观 +仪轨 +仪化 +仪节 +仪陇 +仪器 +仪器厂 +仪容 +仪式 +仪式性 +仪态 +仪态万方 +仪刑 +仪型 +仪张村 +仪仗 +仪仗兵 +仪仗队 +仪征 +仪征人 +仪征市 +圯 +圯桥 +夷 +夷贝 +夷为平地 +沂 +沂河 +沂蒙 +沂蒙山 +沂南 +沂水 +沂源 +沂源县 +宜 +宜宾 +宜宾市 +宜宾县 +宜昌 +宜昌港 +宜昌市 +宜昌县 +宜城 +宜城市 +宜川 +宜春 +宜春市 +宜当 +宜都 +宜丰 +宜丰县 +宜果则果 +宜化 +宜黄 +宜林 +宜林地 +宜林则林 +宜路镇 +宜牧 +宜牧则牧 +宜人 +宜沙 +宜山 +宜小则小 +宜兴 +宜兴埠镇 +宜兴市 +宜阳 +宜阳县 +宜于 +宜渔则渔 +宜章 +宜章县 +怡 +怡红院 +怡情 +怡情养性 +怡然 +怡然自得 +怡然自乐 +怡人 +怡神 +怡香院 +怡养 +怡怡然 +怡悦 +饴糖 +姨 +姨表 +姨儿 +姨夫 +姨父 +姨妈 +姨母 +姨娘 +姨婆 +姨太太 +姨丈 +贻 +贻贝 +贻害 +贻害无穷 +贻患无穷 +贻祸无穷 +贻误 +贻笑大方 +胰 +胰蛋白酶 +胰岛 +胰岛素 +胰淀粉酶 +胰腺 +胰液 +胰脂酶 +胰子 +移 +移泊 +移步 +移锭 +移动 +移动靶 +移动局 +移动式 +移动网 +移风易俗 +移花接木 +移机 +移交 +移居 +移民 +移民局 +移民局长 +移民区 +移民署 +移山倒海 +移山填海 +移师 +移送 +移位 +移栽 +移植 +遗 +遗产 +遗产部 +遗产地 +遗产税 +遗臭万年 +遗传 +遗传病 +遗传工程 +遗传所 +遗传物质 +遗传性 +遗传学 +遗传学家 +遗祠 +遗存 +遗毒 +遗风 +遗腹子 +遗稿 +遗孤 +遗骨 +遗骸 +遗害 +遗憾 +遗恨 +遗患 +遗祸 +遗迹 +遗集 +遗教 +遗老 +遗留 +遗留物 +遗漏 +遗落 +遗民 +遗墨 +遗尿病 +遗鸥 +遗弃 +遗弃案 +遗弃物 +遗弃者 +遗缺 +遗容 +遗少 +遗尸 +遗失 +遗失物 +遗事 +遗书 +遗孀 +遗俗 +遗体 +遗忘 +遗文 +遗闻 +遗物 +遗像 +遗训 +遗言 +遗业 +遗影 +遗愿 +遗韵 +遗泽 +遗赠 +遗诏 +遗照 +遗证 +遗址 +遗址性 +遗志 +遗属 +遗嘱 +遗著 +遗族 +遗罪 +遗作 +遗作展 +颐 +颐和园 +颐老院 +颐年堂 +颐养 +颐养天年 +颐指气使 +疑 +疑案 +疑兵 +疑点 +疑窦 +疑犯 +疑惑 +疑虑 +疑难 +疑难案 +疑难病 +疑难症 +疑难重症 +疑念 +疑神疑鬼 +疑团 +疑为 +疑问 +疑问词 +疑问句 +疑心 +疑心病 +疑信 +疑凶 +疑义 +疑云 +疑者 +疑阵 +彝 +彝海结盟 +彝家 +彝剧 +彝良 +彝女 +彝山 +彝乡 +彝族 +彝族人 +彝族乡 +乙 +乙丙橡胶 +乙厂 +乙丑 +乙醇 +乙地 +乙方 +乙肝 +乙基 +乙级 +乙类 +乙醚 +乙脑 +乙醛 +乙炔 +乙双吗啉 +乙酸 +乙烷 +乙烯 +乙烯厂 +乙酰胆碱 +乙亚胺 +乙种粒子 +乙种射线 +乙状结肠 +已 +已故 +已婚 +已经 +已决犯 +已然 +已逝者 +已往 +已知数 +以 +以北 +以备不测 +以彼之道 +以便 +以诚相待 +以诚相见 +以此 +以此类推 +以此为戒 +以次 +以次充好 +以党代政 +以德报怨 +以点概全 +以东 +以毒攻毒 +以讹传讹 +以法 +以法治赛 +以方 +以防 +以防不测 +以防万一 +以丰补歉 +以刚济柔 +以歌当哭 +以歌会友 +以工代干 +以工代赈 +以攻为守 +以观后效 +以后 +以幻写真 +以火救火 +以及 +以己度人 +以假充真 +以假当真 +以假乱真 +以儆效尤 +以旧翻新 +以军 +以苦为乐 +以苦为荣 +以快制胜 +以来 +以泪洗面 +以礼相待 +以理服人 +以利 +以邻为壑 +以卵投石 +以貌取人 +以免 +以民为本 +以谬袭谬 +以内 +以南 +以农为本 +以偏概全 +以期 +以其昏昏 +以迄于今 +以前 +以强凌弱 +以情动人 +以情感人 +以权谋私 +以人为本 +以柔克刚 +以柔制刚 +以弱胜强 +以色列 +以色列队 +以色列国 +以色列籍 +以上 +以身试法 +以身殉职 +以身作则 +以史为鉴 +以势压人 +以水救水 +以太网 +以图 +以退为进 +以外 +以往 +以为 +以文会友 +以我为主 +以物抵债 +以西 +以下 +以销定产 +以小见大 +以信为本 +以牙还牙 +以一当十 +以一警百 +以逸待劳 +以远 +以怨报德 +以战养战 +以至 +以至于 +以质取胜 +以致 +以资村 +以资代劳 +矣 +蚁 +蚁蚕 +蚁后 +蚁啃 +蚁社 +蚁穴 +蚁战 +倚 +倚官仗势 +倚靠 +倚赖 +倚老卖老 +倚晴楼 +倚山傍势 +倚天仗剑 +倚仗 +倚重 +倚坐 +椅 +椅背 +椅垫 +椅披 +椅子 +旖旎 +义 +义安 +义不容辞 +义齿 +义愤 +义愤填膺 +义父 +义工 +义合堡 +义合镇 +义和团 +义和庄 +义教 +义举 +义捐 +义理 +义利 +义利观 +义马 +义卖 +义卖会 +义母 +义女 +义旗 +义气 +义赛 +义师 +义士 +义塾 +义望 +义乌 +义乌市 +义无反顾 +义无返顾 +义务 +义务兵 +义务服务 +义务工 +义务教育 +义务劳动 +义务人 +义务性 +义侠记 +义县 +义项 +义行 +义形于色 +义学 +义演 +义勇军 +义责 +义展 +义战 +义诊 +义正词严 +义正辞严 +义肢 +义冢 +义子 +亿 +亿吨级 +亿万 +亿万斯年 +弋 +弋取 +弋阳 +刈 +忆 +忆及 +忆旧 +忆苦思甜 +忆述 +忆昔抚今 +艺 +艺不压身 +艺丛 +艺道 +艺德 +艺风 +艺海 +艺界 +艺诀 +艺林 +艺龄 +艺名 +艺能 +艺品 +艺人 +艺术 +艺术编 +艺术部 +艺术宫 +艺术观 +艺术馆 +艺术化 +艺术季 +艺术家 +艺术家卷 +艺术节 +艺术界 +艺术局 +艺术科 +艺术课 +艺术类 +艺术楼 +艺术论 +艺术美 +艺术片 +艺术品 +艺术品部 +艺术师 +艺术史 +艺术团 +艺术系 +艺术性 +艺术学 +艺术学系 +艺术院 +艺术院团 +艺术展 +艺术照 +艺术周 +艺坛 +艺体 +艺徒 +艺途 +艺外 +艺委会 +艺文 +艺无止境 +艺校 +艺研所 +艺员 +艺苑 +艺展 +艺专 +艺专人 +议 +议案 +议案组 +议标 +议长 +议程 +议定 +议定书 +议而不决 +议购粮 +议官 +议和 +议会 +议会宫 +议会上院 +议会制 +议价 +议价粮 +议局 +议决 +议军会 +议联 +议论 +议论纷纷 +议论声 +议论文 +议论性 +议商 +议事 +议事会 +议事权 +议事日程 +议事堂 +议事厅 +议事组 +议题 +议席 +议议 +议员 +议员日 +议员团 +议院 +议政 +议政日 +议政者 +亦 +亦步亦趋 +亦可 +亦然 +亦喜亦忧 +屹 +屹立 +屹然 +异 +异邦 +异步 +异才 +异彩 +异彩纷呈 +异常 +异词 +异党 +异地 +异读 +异端 +异端邪说 +异轨 +异国 +异国他乡 +异乎寻常 +异花传粉 +异化 +异化期 +异化作用 +异己 +异见 +异教 +异教徒 +异军突起 +异客 +异口同声 +异类 +异亮氨酸 +异能 +异曲同工 +异趣 +异兽 +异体 +异体字 +异同 +异图 +异位症 +异味 +异文 +异戊橡胶 +异物 +异物感 +异乡 +异乡人 +异相 +异香 +异想天开 +异心 +异形字 +异型 +异型坯 +异姓 +异性 +异烟肼 +异言 +异样 +异义 +异议 +异域 +异志 +异质 +异质性 +异种 +异状 +异族 +佚 +佚名 +佚事 +佚文 +呓 +呓语 +役 +役龄 +役使 +役畜 +抑 +抑低 +抑或 +抑菌作用 +抑强扶弱 +抑扬顿挫 +抑郁 +抑郁寡欢 +抑郁症 +抑蒸减耗 +抑止 +抑制 +译 +译版 +译本 +译笔 +译编 +译丛 +译电员 +译稿 +译介 +译码 +译名 +译审员 +译释 +译文 +译意风 +译音 +译员 +译者 +译制 +译制片 +译注 +译著 +译作 +邑 +邑馆 +易 +易爆 +易爆物 +易地 +易地做官 +易懂 +易发区 +易腐 +易货 +易记 +易拉罐 +易涝区 +易门 +易名 +易怒 +易燃 +易燃点 +易燃物 +易燃物品 +易燃易爆 +易熔合金 +易如反掌 +易事 +易手 +易帅 +易水 +易碎性 +易太乡 +易太镇 +易位 +易县 +易行 +易学 +易于 +易者 +易帜 +驿道 +驿动 +驿站 +奕阳 +弈 +弈和 +弈棋 +弈友 +疫 +疫病 +疫疠 +疫苗 +疫情 +疫区 +轶事 +益 +益虫 +益处 +益都 +益发 +益菌 +益粮 +益母草 +益鸟 +益气活血 +益气养血 +益气养阴 +益事 +益寿 +益寿延年 +益田村 +益阳 +益阳市 +益友 +益智 +益智楼 +益智性 +谊 +翌年 +翌日 +逸 +逸彩 +逸话 +逸乐 +逸民 +逸气 +逸史 +逸士 +逸事 +逸闻 +逸秀 +逸豫 +逸韵 +意 +意大利 +意大利队 +意大利籍 +意大利式 +意方 +意粉 +意会 +意见 +意见本 +意见簿 +意见卡 +意见书 +意见箱 +意见者 +意匠 +意境 +意具神足 +意料 +意料之中 +意乱情迷 +意面 +意念 +意气 +意气风发 +意气用事 +意趣 +意识 +意识流 +意识形态 +意思 +意图 +意外 +意味 +意味隽永 +意味深长 +意味着 +意谓 +意想不到 +意向 +意向表 +意向书 +意向性 +意象 +意象篇 +意兴 +意绪 +意义 +意译 +意犹未尽 +意欲 +意愿 +意蕴 +意在 +意在言外 +意旨 +意志 +意志力 +意志篇 +意中人 +溢 +溢彩 +溢出 +溢发 +溢洪道 +溢价 +溢流坝 +溢流坝段 +溢流式 +溢美 +溢美之词 +溢美之辞 +溢于言表 +肄业 +肄业生 +毅锋 +毅力 +毅然 +毅然决然 +熠熠 +熠熠流彩 +熠熠闪闪 +熠熠生辉 +薏米 +翳翳 +翼 +翼侧 +翼城 +翼城县 +翼根 +翼盒 +翼上 +翼手龙 +翼手目 +翼王 +翼翼 +翼展 +翼状 +臆 +臆测 +臆断 +臆见 +臆说 +臆想 +臆造 +癔病 +因 +因巴巴区 +因变量 +因变数 +因材施教 +因此 +因村制宜 +因地制宜 +因而 +因公殉职 +因故 +因果 +因祸得福 +因了 +因陋就简 +因明 +因企制宜 +因情制宜 +因人成事 +因人而异 +因人施教 +因人制宜 +因时制宜 +因式 +因势利导 +因数 +因素 +因特网 +因特网节 +因特网络 +因特网日 +因特网址 +因为 +因袭 +因袭性 +因小见大 +因小失大 +因循 +因循守旧 +因噎废食 +因由 +因缘 +因着 +因子 +阴 +阴暗 +阴暗处 +阴暗面 +阴部 +阴曹 +阴差阳错 +阴沉 +阴沉沉 +阴错阳差 +阴丹士林 +阴到多云 +阴道 +阴道炎 +阴德 +阴电 +阴毒 +阴风 +阴干 +阴功 +阴沟 +阴乎乎 +阴户 +阴魂 +阴极 +阴极射线 +阴间 +阴间多云 +阴茎 +阴冷 +阴离子 +阴历 +阴历年 +阴凉 +阴凉处 +阴霾 +阴门 +阴谋 +阴谋诡计 +阴谋家 +阴囊 +阴平 +阴气 +阴晴寒暑 +阴柔 +阴柔气 +阴柔之美 +阴森 +阴森可怖 +阴森森 +阴山 +阴山背后 +阴虱 +阴湿 +阴私 +阴天 +阴文 +阴险 +阴险毒辣 +阴性 +阴性植物 +阴阳 +阴阳步 +阴阳怪气 +阴阳历 +阴阳生 +阴阳水 +阴影 +阴有小雨 +阴雨 +阴雨寡照 +阴雨连绵 +阴雨雪 +阴郁 +阴云 +阴韵 +阴宅 +阴鸷 +阴骘 +阴转多云 +阴着儿 +姻亲 +姻缘 +洇 +茵 +茵陈蒿 +茵茵 +荫 +荫蔽 +荫凉 +荫翳 +音 +音板 +音变 +音标 +音波 +音叉 +音长 +音尘 +音程 +音带 +音调 +音读 +音儿 +音符 +音高 +音阶 +音节 +音节文字 +音乐 +音乐版 +音乐部 +音乐感 +音乐宫 +音乐会 +音乐季 +音乐家 +音乐奖 +音乐节 +音乐界 +音乐剧 +音乐课 +音乐迷 +音乐人 +音乐声 +音乐师 +音乐史 +音乐史家 +音乐室 +音乐厅 +音乐团 +音乐系 +音乐性 +音乐指导 +音乐周 +音量 +音流 +音律 +音美 +音名 +音频 +音品 +音强 +音区 +音容 +音容宛在 +音容笑貌 +音色 +音势 +音素 +音素文字 +音速 +音位 +音问 +音息 +音箱 +音响 +音响版 +音响奖 +音响库 +音响效果 +音响展 +音像 +音像版 +音像店 +音像法 +音像司 +音像业 +音效 +音校 +音协 +音信 +音信全无 +音型 +音序 +音序器 +音讯 +音义 +音译 +音译词 +音域 +音源 +音源器 +音韵 +音韵学 +音障 +音值 +音质 +音专 +音缀 +音准 +殷 +殷钢 +殷红 +殷家山 +殷鉴 +殷切 +殷勤 +殷商 +殷实 +殷墟 +殷殷 +殷殷然 +殷忧 +殷周 +殷纣王 +氤氲 +铟 +喑哑 +吟 +吟唱 +吟风弄月 +吟就 +吟哦 +吟诗 +吟诵 +吟颂 +吟啸 +吟咏 +垠 +寅 +寅吃卯粮 +寅虎 +寅著 +淫 +淫荡 +淫秽 +淫乱 +淫糜 +淫靡 +淫威 +淫邪 +淫心 +淫逸 +淫雨 +银 +银白 +银白色 +银白杨 +银杯 +银杯赛 +银本位 +银币 +银边席 +银箔 +银箔衬 +银鲳 +银川 +银川市 +银贷 +银弹 +银钓 +银碟 +银碟赛 +银蝶 +银锭 +银耳 +银发 +银粉 +银丰 +银根 +银根菜 +银冠 +银光 +银海 +银号 +银河 +银河系 +银狐 +银湖 +银花 +银花霓影 +银环蛇 +银灰 +银灰色 +银婚 +银奖 +银匠 +银卡 +银坑 +银款 +银矿 +银两 +银亮 +银贸 +银苗 +银幕 +银牌 +银票 +银屏 +银企 +银钱 +银球 +银泉市 +银色 +银沙湾 +银山 +银杉 +银闪闪 +银蛇 +银鼠 +银滩 +银条菜 +银铜牌 +银团 +银碗 +银碗赛 +银武威 +银线 +银小丑 +银屑病 +银信 +银行 +银行部 +银行法 +银行方 +银行家 +银行街 +银行界 +银行局 +银行卡 +银行学 +银行业 +银行制 +银杏 +银杏果 +银杏树 +银杏酮 +银杏王 +银杏园 +银须 +银盐 +银洋 +银鹰 +银鱼 +银元 +银圆 +银针 +银制 +银质 +银质奖 +银朱 +银妆素裹 +银装 +银装素裹 +银子 +银鬃 +银座 +鄞 +鄞县 +尹 +尹堡寨村 +尹稼坞村 +尹湾 +引 +引爆 +引柴 +引出 +引导 +引导灯 +引导牌 +引导性 +引导员 +引得 +引敌他顾 +引动 +引逗 +引渡 +引而不发 +引发 +引风机 +引航 +引航道 +引航人 +引号 +引河 +引河桥 +引洪 +引黄 +引黄灌区 +引黄入晋 +引火烧身 +引见 +引荐 +引介 +引进 +引进者 +引经据典 +引咎 +引咎辞职 +引咎自责 +引吭高歌 +引来 +引狼入室 +引力 +引力波 +引力场 +引力能 +引领 +引路 +引路人 +引滦入津 +引论 +引聘 +引起 +引潜 +引桥 +引擎 +引擎盖 +引燃 +引人关注 +引人入胜 +引人深思 +引人瞩目 +引人注目 +引人注意 +引入 +引蛇出洞 +引申 +引伸义 +引述 +引水 +引水道 +引水量 +引水渠 +引水人 +引水员 +引退 +引为鉴戒 +引文 +引线 +引线人 +引信 +引言 +引以 +引以为鉴 +引以为戒 +引以为荣 +引以自豪 +引用 +引诱 +引语 +引证 +引致 +引种 +引资 +引资国 +引子 +饮 +饮茶 +饮茶观 +饮弹 +饮酒 +饮酒者 +饮料 +饮料厂 +饮料罐 +饮料机 +饮料业 +饮马锦江 +饮片 +饮品 +饮泣 +饮泣吞声 +饮食 +饮食部 +饮食店 +饮食疗法 +饮食起居 +饮食摊 +饮食业 +饮水 +饮水管 +饮水思源 +饮用 +饮用水 +饮誉 +饮誉中外 +饮鸩止渴 +饮子 +隐 +隐蔽 +隐蔽处 +隐蔽所 +隐蔽型 +隐蔽性 +隐藏 +隐藏所 +隐处 +隐遁 +隐恶扬善 +隐伏 +隐睾症 +隐含 +隐花植物 +隐患 +隐患区 +隐讳 +隐晦 +隐火 +隐疾 +隐居 +隐君子 +隐瞒 +隐没 +隐门 +隐秘 +隐秘处 +隐秘性 +隐匿 +隐情 +隐忍 +隐身 +隐身草 +隐身术 +隐士 +隐私 +隐痛 +隐头花序 +隐退 +隐显墨水 +隐现 +隐形 +隐形眼镜 +隐姓埋名 +隐性 +隐血 +隐逸 +隐隐 +隐隐约约 +隐隐作痛 +隐忧 +隐语 +隐喻 +隐约 +隐约可见 +隐者 +隐衷 +瘾 +瘾头 +印 +印把子 +印报 +印本 +印藏者 +印厂 +印钞厂 +印床 +印次 +印第安纳 +印第安人 +印度 +印度半岛 +印度河 +印度教 +印度洋 +印度支那 +印儿 +印发 +印方 +印稿 +印共 +印痕 +印花 +印花布 +印花法 +印花税 +印迹 +印记 +印鉴 +印界 +印经院 +印军 +印刻 +印量 +印尼 +印尼队 +印尼盾 +印泥 +印欧语 +印品 +印谱 +印染 +印染布 +印染厂 +印人 +印色 +印史 +印绶 +印书馆 +印数 +印刷 +印刷版 +印刷厂 +印刷点 +印刷费 +印刷机 +印刷局 +印刷品 +印刷史 +印刷术 +印刷体 +印刷业 +印台 +印堂 +印纹 +印纹陶 +印相纸 +印象 +印象分 +印象派 +印象至深 +印象主义 +印信 +印行 +印油 +印有 +印张 +印章 +印章费 +印辙 +印证 +印制 +印制法 +印子 +印子钱 +印字店 +胤 +应 +应变 +应变成 +应变力 +应承 +应承担 +应城 +应城市 +应酬 +应酬话 +应酬性 +应答 +应当 +应得 +应对 +应付 +应付款 +应该 +应和 +应河 +应激反应 +应急 +应急灯 +应急款 +应价 +应价者 +应缴款 +应接不暇 +应届 +应景 +应考 +应力 +应力场 +应纳税额 +应诺 +应聘 +应聘卡 +应聘人 +应聘者 +应声 +应声虫 +应时 +应时而变 +应市 +应试 +应试者 +应收款 +应税面 +应诉 +应县 +应选 +应选人 +应验 +应邀 +应用 +应用科学 +应用量 +应用率 +应用面 +应用题 +应用文 +应用型 +应用性 +应有 +应有尽有 +应予 +应约 +应允 +应运 +应运而起 +应运而生 +应战 +应战书 +应召 +应者 +应者如云 +应诊 +应征 +英 +英镑 +英才 +英尺 +英寸 +英方 +英格兰 +英格兰队 +英国 +英国队 +英国籍 +英国式 +英航 +英豪 +英花 +英华 +英魂 +英吉利 +英吉沙县 +英籍 +英杰 +英军 +英俊 +英里 +英烈 +英灵 +英伦 +英伦三岛 +英名 +英名盖世 +英明 +英模 +英年早逝 +英气 +英气逼人 +英气耿介 +英山 +英山县 +英石 +英式 +英王 +英文 +英文版 +英武 +英系 +英雄 +英雄城 +英雄传 +英雄汉 +英雄豪杰 +英雄好汉 +英雄气短 +英雄山 +英雄团 +英雄主义 +英勇 +英语 +英语角 +英语系 +英主 +英姿 +英姿勃勃 +英姿勃发 +英姿焕发 +英姿飒爽 +英资 +莺 +莺歌燕舞 +莺啼燕唱 +婴 +婴儿 +婴儿车 +婴儿期 +婴孩 +婴戏纹 +婴幼 +婴幼儿 +嘤鸣 +嘤嘤 +缨 +缨帽 +缨子 +罂粟 +樱 +樱草 +樱花 +樱花瓣 +樱花树 +樱井 +樱桃 +樱桃花 +樱桃园乡 +璎珞 +鹦哥 +鹦哥绿 +鹦鹉 +鹦鹉螺 +鹦鹉热 +鹦鹉山 +鹦鹉学舌 +膺 +鹰 +鹰队 +鹰窠顶 +鹰派 +鹰犬 +鹰式 +鹰首瓶 +鹰潭市 +鹰洋 +鹰鹞 +鹰爪 +鹰爪毛儿 +鹰子咀 +鹰嘴 +迎 +迎宾 +迎宾处 +迎宾馆 +迎宾曲 +迎宾松 +迎春 +迎春花 +迎春会 +迎春路 +迎风 +迎风破浪 +迎合 +迎候 +迎击 +迎检 +迎接 +迎客 +迎客松 +迎来 +迎来送往 +迎面 +迎面而来 +迎难而上 +迎娶 +迎刃而解 +迎生曲 +迎声 +迎送 +迎头 +迎头赶上 +迎头痛击 +迎新 +迎新面 +迎薰亭 +迎迓 +迎泽 +迎战 +茔 +茔地 +盈 +盈鼻 +盈尺 +盈怀 +盈怀充栋 +盈江 +盈眶 +盈亏 +盈利 +盈利额 +盈利性 +盈满 +盈门 +盈盈 +盈余 +盈余额 +荥阳市 +荧光 +荧光灯 +荧光粉 +荧光屏 +荧幕 +荧屏 +莹明 +萤火 +萤火虫 +萤火虫儿 +萤石 +营 +营部 +营长 +营地 +营队 +营房 +营房部 +营构 +营火 +营火会 +营建 +营救 +营救者 +营具 +营口 +营口市 +营垒 +营里 +营利 +营利性 +营林 +营盘 +营盘镇 +营区 +营山县 +营生 +营市 +营私 +营私舞弊 +营溪乡 +营销 +营销部 +营销点 +营销额 +营销商 +营销体 +营销学 +营销员 +营销者 +营养 +营养钵 +营养餐 +营养片 +营养品 +营养日 +营养师 +营养素 +营养物 +营养型 +营养性 +营养学 +营养学家 +营养盐 +营养液 +营养元素 +营养源 +营养组 +营业 +营业部 +营业场 +营业额 +营业房 +营业局 +营业楼 +营业区 +营业日 +营业室 +营业税 +营业所 +营业厅 +营业线 +营业性 +营业员 +营业站 +营业执照 +营营 +营院 +营运 +营运潮 +营运处 +营运官 +营运科 +营造 +营造尺 +营造林 +营帐 +萦 +萦绕 +萦思 +萦系 +萦心触怀 +楹联 +楹联厅 +潆洄 +蝇 +蝇粪点玉 +蝇虎 +蝇拍 +蝇头小利 +蝇营狗苟 +赢 +赢得 +赢家 +赢利 +赢利性 +赢面 +赢余 +赢洲 +瀛台 +瀛州 +瀛州镇 +颍泉区 +颖 +颖果 +颖慧 +颖悟 +影 +影壁 +影壁山村 +影壁山乡 +影城 +影帝 +影雕 +影调 +影调剧 +影碟 +影碟机 +影都 +影格儿 +影后 +影集 +影剧 +影剧院 +影库 +影落波摇 +影迷 +影片 +影片儿 +影片奖 +影片展 +影评 +影赛 +影射 +影视 +影视部 +影视城 +影视界 +影视局 +影视剧 +影视片 +影视史 +影视厅 +影视业 +影坛 +影厅 +影戏 +影戏院 +影响 +影响力 +影响面 +影像 +影星 +影业 +影音 +影印 +影印本 +影印件 +影影绰绰 +影院 +影展 +影子 +影子内阁 +影踪 +映 +映衬 +映出 +映荡 +映管 +映入 +映入眼帘 +映山红 +映射 +映现 +映象 +映照 +硬 +硬板 +硬板板的 +硬邦邦 +硬梆梆 +硬棒 +硬笔 +硬笔字 +硬币 +硬茬地 +硬撑 +硬凑 +硬度 +硬腭 +硬弓 +硬功 +硬功夫 +硬骨头 +硬骨鱼 +硬灌式 +硬汉 +硬汉子 +硬化 +硬环境 +硬货 +硬货币 +硬件 +硬结 +硬科学 +硬壳 +硬朗 +硬木 +硬盘 +硬碰硬 +硬皮病 +硬拼 +硬气 +硬设备 +硬实 +硬是 +硬手 +硬水 +硬挺 +硬通货 +硬通货币 +硬头 +硬网 +硬卧 +硬物 +硬席 +硬性 +硬硬 +硬玉 +硬仗 +硬账 +硬脂 +硬脂酸 +硬纸板 +硬纸壳 +硬指标 +硬质 +硬质合金 +硬着陆 +硬着头皮 +硬座 +硬座票 +哟 +佣 +佣工 +佣金 +佣钱 +佣人 +拥 +拥抱 +拥簇 +拥戴 +拥戴者 +拥堵 +拥护 +拥护者 +拥挤 +拥挤不堪 +拥军 +拥军路 +拥军田 +拥军优属 +拥塞 +拥有 +拥有国 +拥有量 +拥有率 +拥有权 +拥有者 +拥政爱民 +痈疽 +邕 +邕城 +邕江 +邕宁 +邕宁县 +庸 +庸才 +庸劣 +庸碌 +庸人 +庸人自扰 +庸俗 +庸俗化 +庸医 +庸庸碌碌 +庸者 +雍 +雍和宫 +雍容 +雍容大度 +雍容华贵 +雍正 +墉 +慵懒 +壅塞 +壅水 +臃 +臃肿 +永 +永安 +永安村 +永安河 +永安里 +永安路 +永安镇 +永葆 +永葆青春 +永别 +永不 +永常村 +永川市 +永垂不朽 +永垂青史 +永磁 +永德 +永登 +永登县 +永电 +永定河 +永定路 +永发村 +永丰 +永丰村 +永丰县 +永和县 +永河区 +永恒 +永恒不变 +永恒性 +永吉 +永吉街 +永吉县 +永济 +永济厂 +永济市 +永嘉 +永嘉县 +永久 +永久磁铁 +永久化 +永久性 +永诀 +永康路 +永康市 +永乐 +永乐二年 +永乐乡 +永乐镇 +永隆 +永隆乡 +永年 +永年县 +永平镇 +永清 +永清县 +永庆 +永曲 +永曲乡 +永生 +永生永世 +永胜 +永胜村 +永胜县 +永世 +永世长存 +永暑礁 +永顺 +永顺县 +永外 +永往直前 +永无宁日 +永无止境 +永夏 +永新县 +永兴岛 +永兴县 +永兴镇 +永续 +永远 +永志不忘 +永州 +永州市 +甬 +甬道 +甬江 +甬剧 +甬路 +咏 +咏春 +咏叹 +咏叹调 +泳 +泳池 +泳道 +泳技 +泳联 +泳区 +泳坛 +泳协 +泳衣 +泳装 +泳姿 +俑 +俑坑 +勇 +勇闯 +勇创 +勇斗 +勇夺 +勇飞 +勇夫 +勇敢 +勇敢者 +勇进桥 +勇救 +勇决 +勇克 +勇猛 +勇攀 +勇攀高峰 +勇气 +勇擒 +勇涉 +勇士 +勇挑 +勇挑重担 +勇往直前 +勇为 +勇武 +勇于 +勇者 +勇争 +勇做 +涌 +涌出 +涌动 +涌浪 +涌流 +涌入 +涌水量 +涌现 +涌溢 +涌涌 +蛹 +蛹期 +踊跃 +用 +用报 +用兵 +用兵如神 +用兵一时 +用布 +用材 +用材林 +用餐 +用餐费 +用餐室 +用长避短 +用场 +用车 +用车者 +用处 +用地 +用地观 +用地量 +用典 +用电 +用电处 +用电户 +用电量 +用电权 +用度 +用法 +用房 +用费 +用稿 +用稿量 +用工 +用工方 +用工权 +用工者 +用功 +用户 +用户卡 +用户量 +用户名 +用户数 +用户证 +用汇 +用活 +用尽 +用劲 +用具 +用款国 +用力 +用粮 +用量 +用料 +用率 +用米 +用棉量 +用墨 +用脑 +用品 +用品部 +用汽量 +用钱 +用球 +用权 +用人 +用人不疑 +用人费率 +用人关 +用人观 +用人权 +用人之长 +用色 +用膳 +用时 +用事 +用书 +用水 +用水量 +用途 +用途林 +用土 +用武 +用武之地 +用线 +用箱 +用项 +用心 +用心良苦 +用心险恶 +用血 +用血量 +用血者 +用药 +用药量 +用药者 +用以 +用意 +用用 +用油 +用于 +用语 +用者 +用之不竭 +用纸 +用种量 +用助剂 +用砖 +用字 +用作 +优 +优待 +优待金 +优待证 +优等 +优等品 +优等生 +优点 +优抚 +优抚对象 +优抚金 +优厚 +优弧 +优化 +优化制 +优惠 +优惠酬宾 +优惠待遇 +优惠价 +优惠卡 +优惠票 +优惠券 +优惠性 +优惠证 +优教 +优礼有加 +优良 +优良率 +优良品率 +优劣 +优伶 +优美 +优免证 +优亲厚友 +优缺点 +优柔 +优柔寡断 +优生 +优生学 +优生优育 +优胜 +优胜处 +优胜队 +优胜奖 +优胜劣败 +优胜劣汰 +优胜赛 +优胜者 +优胜者杯 +优势 +优势仗 +优树 +优先 +优先级 +优先权 +优秀 +优秀奖 +优秀率 +优秀生 +优秀者 +优选 +优选法 +优雅 +优异 +优异者 +优于 +优育 +优裕 +优越 +优越感 +优越论 +优越性 +优哉游哉 +优者 +优质 +优质稻 +优质段 +优质化 +优质棉 +优质品 +优质品率 +优质优价 +优中择优 +优种 +忧 +忧愁 +忧愁树 +忧愤 +忧愤交加 +忧国忧民 +忧患 +忧患与共 +忧虑 +忧虑线 +忧闷 +忧难 +忧念 +忧容 +忧色 +忧伤 +忧思 +忧思录 +忧心 +忧心忡忡 +忧心如焚 +忧郁 +忧怨 +攸关 +攸县 +攸县籍 +呦鹿 +幽 +幽暗 +幽草 +幽愤 +幽媾 +幽谷 +幽篁 +幽魂 +幽寂 +幽禁 +幽径 +幽境 +幽静 +幽兰 +幽丽 +幽林 +幽灵 +幽美 +幽门 +幽渺 +幽默 +幽默感 +幽默画 +幽默剧 +幽默者 +幽僻 +幽期 +幽情 +幽趣 +幽然 +幽森 +幽深 +幽邃 +幽婉 +幽微 +幽闲 +幽香 +幽雅 +幽幽 +幽幽浓浓 +幽幽森森 +幽远 +幽怨 +悠 +悠长 +悠荡 +悠久 +悠然 +悠然自得 +悠闲 +悠闲自得 +悠闲自在 +悠扬 +悠悠 +悠悠荡荡 +悠悠的 +悠悠然 +悠悠扬扬 +悠游 +悠远 +悠哉游哉 +尤 +尤杯 +尤杯赛 +尤尔科夫 +尤卡坦 +尤其 +尤他 +尤为 +尤物 +由 +由表及里 +由不得 +由此 +由此而言 +由此观之 +由此及彼 +由此看来 +由此可见 +由此可知 +由点到面 +由来 +由来已久 +由明转暗 +由浅入深 +由弱到强 +由上至下 +由始至终 +由是 +由头 +由小到大 +由于 +由衷 +由衷之言 +犹 +犹存 +犹大 +犹然 +犹如 +犹他 +犹太化 +犹太教 +犹太区 +犹太人 +犹为未晚 +犹疑 +犹犹豫豫 +犹豫 +犹豫不定 +犹豫不决 +犹豫不前 +邮 +邮包 +邮报 +邮币 +邮币卡 +邮编 +邮册 +邮差 +邮车 +邮程 +邮船 +邮戳 +邮袋 +邮递 +邮递员 +邮电 +邮电部 +邮电局 +邮电史 +邮电所 +邮电网 +邮电业 +邮兜 +邮发 +邮费 +邮购 +邮花 +邮寄 +邮寄费 +邮件 +邮局 +邮联 +邮路 +邮轮 +邮迷 +邮民 +邮票 +邮票史 +邮票展 +邮品 +邮人 +邮商 +邮市 +邮坛 +邮亭 +邮通 +邮筒 +邮务 +邮箱 +邮友 +邮员 +邮运网 +邮展 +邮折 +邮政 +邮政编码 +邮政局 +邮政省 +邮政署 +邮政司 +邮政所 +邮政网 +邮资 +邮资片 +油 +油板栗 +油泵 +油笔 +油表 +油饼 +油布 +油彩 +油菜 +油菜地 +油菜花 +油菜王 +油菜籽 +油菜子 +油藏 +油层 +油茶 +油茶面儿 +油茶树 +油茶籽 +油厂 +油车 +油城 +油船 +油当量 +油灯 +油灯壶 +油点 +油趸船 +油坊 +油柑 +油橄榄 +油港 +油公司 +油垢 +油瓜 +油管 +油罐 +油罐车 +油光 +油光光 +油郭乡 +油耗 +油黑 +油乎乎 +油葫芦 +油花 +油花花 +油滑 +油画 +油画笔 +油画家 +油画像 +油画展 +油灰 +油机 +油鸡 +油基 +油剂 +油价 +油煎火燎 +油建 +油匠 +油井 +油井架 +油客轮 +油枯 +油库 +油矿 +油葵 +油魁 +油辣 +油类 +油亮 +油料 +油料部 +油料处 +油料作物 +油流 +油路 +油路化 +油轮 +油麦 +油毛毡 +油门 +油门线 +油苗 +油墨 +油母页岩 +油泥 +油腻 +油腻腻 +油盘 +油品 +油品店 +油漆 +油漆厂 +油漆工 +油漆匠 +油气 +油气藏 +油气罐 +油气井 +油气库 +油气流 +油气区 +油气田 +油气业 +油汽炉 +油腔滑调 +油区 +油泉子 +油裙 +油然 +油然而生 +油砂 +油杉 +油杉木 +油石 +油市 +油柿 +油刷 +油水 +油松 +油酸 +油桃 +油田 +油条 +油桐 +油桐花 +油桶 +油头粉面 +油头滑脑 +油污 +油溪镇 +油香 +油箱 +油箱盖 +油鞋 +油星子 +油性 +油压 +油压机 +油烟 +油盐 +油盐酱醋 +油样 +油椰子 +油页岩 +油印机 +油油的 +油油亮亮 +油渣 +油渣果 +油炸 +油炸鬼 +油炸摊 +油毡 +油樟 +油脂 +油脂厂 +油纸 +油纸伞 +油质 +油籽 +油子 +油渍 +油棕 +油棕榈 +油嘴 +油嘴滑舌 +柚 +柚苗 +柚木 +柚树 +柚子 +疣鼻天鹅 +莜 +莜麦 +莸 +铀 +铀矿 +铀矿床 +蚰蜒 +蚰蜒草 +游 +游伴 +游遍 +游标 +游标卡尺 +游程 +游船 +游荡 +游动 +游法 +游府西街 +游逛 +游湖 +游击 +游击队 +游击队员 +游击区 +游击式 +游击战 +游击战争 +游迹 +游记 +游客 +游客量 +游览 +游览区 +游览图 +游览者 +游廊 +游乐 +游乐场 +游乐城 +游乐区 +游乐业 +游乐园 +游离 +游离电子 +游离钙 +游离态 +游离状 +游历 +游联 +游猎 +游路 +游轮 +游民 +游牧 +游牧民 +游牧人 +游禽 +游人 +游人如织 +游刃 +游刃有余 +游入 +游山玩水 +游商 +游赏 +游蛇 +游士 +游手好闲 +游说 +游丝 +游速 +游艇 +游途 +游玩 +游息 +游戏 +游戏池 +游戏机 +游戏厅 +游侠 +游仙 +游仙诗 +游兴 +游行 +游行者 +游学 +游医 +游移 +游弋 +游艺 +游艺场 +游艺会 +游艺机 +游艺卡 +游艺室 +游艺厅 +游泳 +游泳池 +游泳队 +游泳馆 +游泳界 +游泳区 +游泳赛 +游泳史 +游游 +游鱼 +游园 +游园会 +游者 +游资 +游子 +游踪 +游走不定 +鱿鱼 +友 +友爱 +友爱新党 +友邦 +友党 +友好 +友好街 +友好路 +友好史 +友机 +友舰 +友军 +友邻 +友朋 +友情 +友人 +友善 +友协 +友谊 +友谊宫 +友谊馆 +友谊花 +友谊林 +友谊路 +友谊曲 +友谊赛 +友谊史 +友谊座 +有 +有碍 +有案可查 +有把握 +有板有眼 +有褒有贬 +有备而来 +有备而战 +有备无患 +有悖 +有悖于 +有变 +有别 +有产者 +有长有短 +有偿 +有偿性 +有偿转让 +有朝一日 +有翅蚜 +有错必究 +有待 +有胆有识 +有道是 +有得有失 +有的 +有的放矢 +有的是 +有底 +有点 +有点儿 +有毒 +有度 +有恩 +有法必依 +有法不依 +有法可循 +有法可依 +有方 +有分寸 +有否 +有感 +有感而发 +有感于 +有感于此 +有高有低 +有根有据 +有功 +有功者 +有关 +有光纸 +有轨 +有鬼 +有害 +有害物 +有旱 +有何不可 +有洪 +有惠 +有机 +有机玻璃 +有机肥 +有机肥场 +有机肥料 +有机化学 +有机可乘 +有机磷 +有机磷类 +有机染料 +有机酸 +有机体 +有机物 +有机质 +有计划 +有加 +有加利 +有价证券 +有假 +有鉴 +有鉴于此 +有奖 +有奖销售 +有教无类 +有借有还 +有劲 +有禁不止 +有惊无险 +有警必出 +有警必接 +有救 +有据可查 +有据可依 +有空 +有孔虫 +有口皆碑 +有口难分 +有口难言 +有口无心 +有哭有闹 +有苦难言 +有愧 +有来有往 +有赖于 +有劳 +有棱有角 +有理 +有理分式 +有理函数 +有理式 +有理数 +有理无情 +有理有节 +有理有据 +有力 +有利 +有利可图 +有利于 +有良心者 +有两下子 +有林地 +有令不行 +有眉目 +有门道 +有门儿 +有名 +有名儿 +有名无实 +有名有利 +有名有实 +有名有姓 +有目共睹 +有目共赏 +有难必帮 +有凭有据 +有破有立 +有期 +有期徒刑 +有起色 +有气无力 +有钱 +有情人 +有情者 +有请 +有穷国 +有求必应 +有求于 +有去无归 +有去无回 +有趣 +有趣儿 +有权有势 +有权者 +有染 +有人 +有日子 +有如 +有色 +有色金属 +有色人种 +有伤风化 +有神 +有神论 +有生 +有生力量 +有生以来 +有生之年 +有声 +有声片 +有声有色 +有失 +有失公允 +有失远迎 +有时 +有时候 +有识之士 +有史可鉴 +有史以来 +有始无终 +有始有终 +有事 +有恃无恐 +有售 +有术 +有数 +有说有笑 +有司 +有损 +有所 +有所不同 +有所不为 +有所得 +有所失 +有所为 +有所作为 +有蹄类 +有天没日 +有条不紊 +有条有理 +有头无尾 +有头有脑 +有头有尾 +有望 +有为 +有违 +有味 +有问题者 +有误 +有误者 +有息 +有喜 +有喜有忧 +有隙可乘 +有险必抢 +有线 +有线电 +有线电报 +有线电话 +有线电连 +有线电视 +有线广播 +有限 +有限公司 +有限花序 +有限性 +有限元 +有效 +有效分蘖 +有效率 +有效期 +有效性 +有些 +有心 +有心人 +有心无力 +有信仰者 +有形 +有形损耗 +有幸 +有性 +有性生殖 +有性杂交 +有虚有实 +有序 +有序化 +有序性 +有血有肉 +有言 +有言在先 +有眼无珠 +有扬有弃 +有氧 +有益 +有益无害 +有益于 +有意 +有意识 +有意思 +有意无意 +有意者 +有勇无谋 +有勇有谋 +有用 +有用之才 +有优有劣 +有忧 +有余 +有缘 +有源之水 +有怨 +有约 +有约在先 +有灾必救 +有则改之 +有责 +有增无减 +有增无已 +有张有弛 +有章可循 +有章可依 +有志 +有志者 +有志之士 +有种 +有助 +有助于 +有着 +有滋有味 +有嘴无心 +酉阳 +酉阳县 +莠 +铕 +黝黑 +黝红 +又 +又红又专 +又惊又喜 +又哭又闹 +又是 +右 +右安门 +右半 +右臂 +右边 +右侧 +右耳 +右方 +右肺 +右锋 +右江 +右脚 +右路 +右面 +右脑 +右派 +右倾 +右衽 +右上 +右上方 +右上角 +右身 +右手 +右腿 +右腕 +右卫 +右下 +右下方 +右舷 +右眼 +右翼 +右肘 +幼 +幼虫 +幼雏 +幼儿 +幼儿部 +幼儿教育 +幼儿所 +幼儿园 +幼功 +幼龟 +幼虎 +幼教 +幼驹 +幼林 +幼林地 +幼龄 +幼龄林 +幼苗 +幼嫩 +幼年 +幼女 +幼雀 +幼师 +幼时 +幼鼠 +幼树 +幼穗 +幼桃 +幼体 +幼童 +幼兔 +幼托 +幼小 +幼蝎 +幼畜 +幼芽 +幼稚 +幼稚病 +幼稚园 +幼株 +幼仔 +幼子 +佑 +佑助 +侑 +囿 +囿养 +囿养地 +囿于 +诱 +诱变 +诱虫灯 +诱导 +诱导法 +诱导性 +诱饵 +诱发 +诱拐 +诱惑 +诱惑力 +诱惑性 +诱奸 +诱降 +诱骗 +诱人 +诱杀 +诱使 +诱因 +釉 +釉里 +釉料 +釉面 +釉色 +釉陶 +釉制 +釉质 +釉子 +迂 +迂夫子 +迂腐 +迂缓 +迂回 +迂阔 +迂曲 +迂者 +迂拙 +淤 +淤斑 +淤地坝 +淤堵 +淤积 +淤积量 +淤积物 +淤泥 +淤塞 +淤土 +淤土地 +淤血 +淤渣 +淤浊 +渝 +渝北 +渝长 +渝南 +渝水 +渝水区 +渝中区 +渝州 +于 +于都 +于都县 +于洪区 +于今 +于林庄村 +于事无补 +于是 +于是乎 +于田 +于田城 +于无声处 +于心不忍 +于心何忍 +于焉 +于营村 +予 +予取予夺 +予以 +余 +余波 +余波未停 +余部 +余党 +余地 +余毒 +余额 +余风 +余干 +余干县 +余割 +余光 +余寒 +余杭 +余杭市 +余恨 +余晖 +余辉 +余火 +余货 +余悸 +余家 +余家村 +余家湖 +余江县 +余角 +余烬 +余款 +余力 +余利 +余粮 +余量 +余脉 +余年 +余孽 +余怒 +余派 +余钱 +余切 +余庆县 +余缺 +余热 +余生 +余数 +余头 +余威 +余味 +余温 +余物 +余暇 +余下 +余弦 +余香 +余兴 +余兴未尽 +余绪 +余蓄 +余烟 +余姚 +余姚市 +余音 +余音绕梁 +余韵 +余韵缭绕 +余者 +余震 +余值法 +欤 +盂县 +鱼 +鱼白 +鱼鳔 +鱼舱 +鱼叉 +鱼池 +鱼翅 +鱼虫 +鱼唇 +鱼冻 +鱼肚 +鱼肚白 +鱼儿 +鱼儿沟 +鱼饵 +鱼粉 +鱼腹 +鱼杆 +鱼肝油 +鱼缸 +鱼缸型 +鱼钩 +鱼狗 +鱼骨 +鱼鼓 +鱼贯 +鱼贯而入 +鱼花 +鱼价 +鱼胶 +鱼具 +鱼卷 +鱼口 +鱼款 +鱼雷 +鱼雷艇 +鱼类 +鱼梁 +鱼鳞 +鱼鳞坑 +鱼鳞松 +鱼龙 +鱼龙混杂 +鱼米之乡 +鱼苗 +鱼苗场 +鱼目 +鱼目混珠 +鱼片 +鱼漂 +鱼鳍 +鱼禽肉蛋 +鱼群 +鱼肉 +鱼腮 +鱼尸 +鱼石脂 +鱼市 +鱼水 +鱼水情 +鱼水情浓 +鱼水情深 +鱼水深情 +鱼死网破 +鱼松 +鱼台 +鱼摊 +鱼汤 +鱼塘 +鱼塘乡 +鱼藤 +鱼头 +鱼网 +鱼网阵 +鱼尾 +鱼尾纹 +鱼味 +鱼虾 +鱼虾蟹贝 +鱼鲜 +鱼腥草 +鱼讯 +鱼汛 +鱼眼 +鱼秧 +鱼秧子 +鱼鹰 +鱼油 +鱼游釜中 +鱼跃龙门 +鱼种 +鱼子 +俞 +娱 +娱乐 +娱乐场 +娱乐城 +娱乐片 +娱乐品 +娱乐区 +娱乐室 +娱乐厅 +娱乐性 +娱乐业 +娱乐园 +娱心 +渔 +渔岙 +渔霸 +渔叉 +渔产 +渔产品 +渔产业 +渔场 +渔池村 +渔船 +渔村 +渔灯 +渔灯谣 +渔洞 +渔都 +渔法 +渔夫 +渔港 +渔港村 +渔歌 +渔歌唱晚 +渔钩 +渔姑 +渔鼓 +渔鼓词 +渔户 +渔户主 +渔火 +渔家 +渔具 +渔捞 +渔利 +渔猎 +渔轮 +渔码头 +渔民 +渔娘 +渔农 +渔农处 +渔农业 +渔樵 +渔区 +渔人 +渔人得利 +渔人之利 +渔事 +渔网 +渔翁 +渔翁得利 +渔乡 +渔汛 +渔养 +渔养业 +渔业 +渔业部 +渔业大臣 +渔业法 +渔政 +渔政处 +渔舟 +隅 +愉快 +愉愉快快 +愉悦 +腴 +逾 +逾期 +逾期率 +逾越 +愚 +愚笨 +愚不可及 +愚蠢 +愚钝 +愚公移山 +愚见 +愚陋 +愚鲁 +愚昧 +愚昧无知 +愚氓 +愚蒙 +愚民 +愚民政策 +愚弄 +愚懦 +愚人 +愚顽 +愚妄 +愚味 +愚者 +愚拙 +榆 +榆次 +榆次市 +榆荚 +榆林 +榆林角 +榆林桥 +榆钱 +榆树 +榆树市 +榆树叶 +榆叶梅 +榆中县 +虞 +虞城 +虞城县 +虞美人 +虞者 +窬 +舆地书 +舆地学社 +舆论 +舆论界 +舆情 +与 +与此同时 +与否 +与共 +与虎谋皮 +与会 +与会国 +与会者 +与力甚焉 +与民争利 +与年俱增 +与其 +与其说 +与人为善 +与人无争 +与日俱长 +与日俱增 +与生俱来 +与生俱有 +与时俯仰 +与时俱进 +与世长辞 +与世沉浮 +与世浮沉 +与世隔绝 +与世隔膜 +与世无争 +与之俱来 +与众不同 +伛偻病 +宇 +宇称 +宇航 +宇航界 +宇航局 +宇航员 +宇田 +宇拓路 +宇宙 +宇宙尘 +宇宙船 +宇宙地镇 +宇宙飞船 +宇宙服 +宇宙观 +宇宙火箭 +宇宙空间 +宇宙论 +宇宙射线 +宇宙速度 +屿 +羽 +羽翅 +羽缎 +羽冠 +羽化 +羽联 +羽毛 +羽毛厂 +羽毛缎 +羽毛丰满 +羽毛球 +羽毛球队 +羽毛球界 +羽毛球拍 +羽毛球赛 +羽毛未丰 +羽人 +羽绒 +羽绒被 +羽绒布 +羽绒厂 +羽绒服 +羽绒衫 +羽绒衣 +羽纱 +羽扇 +羽坛 +羽协 +羽叶 +羽翼 +羽翼渐丰 +羽总 +雨 +雨布 +雨敞坪镇 +雨搭 +雨带 +雨滴 +雨点 +雨点子 +雨过天晴 +雨后春笋 +雨湖 +雨花区 +雨花石 +雨花台 +雨花台区 +雨季 +雨夹雪 +雨脚 +雨景 +雨具 +雨涝 +雨量 +雨量站 +雨林 +雨露 +雨帽 +雨幕 +雨棚 +雨披 +雨情 +雨区 +雨伞 +雨声 +雨势 +雨水 +雨水管 +雨丝 +雨天 +雨蛙 +雨雾 +雨鞋 +雨靴 +雨雪 +雨衣 +雨意 +雨中曲 +雨珠 +禹门口 +禹日 +禹州 +禹州市 +语 +语病 +语词 +语次 +语调 +语法 +语法学 +语感 +语话 +语汇 +语惊四座 +语境 +语句 +语料 +语录 +语录牌 +语论 +语气 +语气词 +语气助词 +语声 +语素 +语速 +语态 +语体文 +语委 +语文 +语文科 +语文课 +语文系 +语无伦次 +语系 +语序 +语焉不详 +语言 +语言部 +语言所 +语言性 +语言学 +语言学家 +语言学界 +语言者 +语义 +语义学 +语义哲学 +语意 +语音 +语音室 +语音学 +语源学 +语种 +语重心长 +语助词 +语族 +庾家河乡 +玉 +玉版宣 +玉版纸 +玉帛 +玉材 +玉蟾 +玉池乡 +玉带 +玉带海雕 +玉带桥 +玉雕 +玉覆面 +玉戈 +玉工 +玉桂 +玉壶 +玉环 +玉环岛 +玉环市 +玉环县 +玉皇大帝 +玉皇顶 +玉皇庙 +玉茭 +玉茭皮 +玉洁冰清 +玉兰 +玉兰花 +玉兰片 +玉垒 +玉林 +玉林井 +玉林井村 +玉林市 +玉龙 +玉门 +玉门关 +玉门镇 +玉米 +玉米棒 +玉米棒子 +玉米饼 +玉米地 +玉米粉 +玉米秆 +玉米花 +玉米花儿 +玉米秸 +玉米糠 +玉米粒 +玉米面 +玉米螟 +玉米塘村 +玉米芯 +玉米须 +玉米油 +玉米粥 +玉米子 +玉女 +玉盘 +玉佩 +玉屏 +玉器 +玉泉村 +玉泉路 +玉泉区 +玉泉营 +玉汝于成 +玉色 +玉山 +玉山县 +玉山闸 +玉石 +玉石俱焚 +玉石片 +玉蜀黍 +玉树 +玉树州 +玉田县 +玉兔 +玉溪 +玉溪市 +玉玺 +玉虚洞 +玉叶金枝 +玉音 +玉宇 +玉渊潭 +玉簪 +玉簪记 +玉照 +玉质 +玉镯 +驭手 +吁 +吁请 +芋艿 +芋头 +育 +育才 +育草 +育成 +育雏 +育儿 +育儿袋 +育肥 +育肥场 +育空 +育林 +育林费 +育龄 +育苗 +育苗场 +育人 +育人者 +育新街 +育秧 +育婴堂 +育有 +育种 +育壮 +郁 +郁积 +郁江 +郁结 +郁金 +郁金香 +郁闷 +郁南 +郁热 +郁山镇 +郁夏 +郁悒 +郁郁 +郁郁不乐 +郁郁苍苍 +郁郁葱葱 +郁郁而终 +郁郁寡欢 +郁滞 +狱 +狱警 +狱吏 +狱政 +狱中 +狱卒 +峪口 +浴 +浴场 +浴池 +浴佛礼 +浴缸 +浴巾 +浴具 +浴盆 +浴室 +浴血 +浴血奋战 +浴衣 +预 +预案 +预报 +预报表 +预报处 +预报网 +预报员 +预备 +预备部 +预备队 +预备费 +预备会 +预备金 +预备期 +预备生 +预备性 +预备役 +预备役团 +预编 +预测 +预测处 +预测局 +预测卡 +预产期 +预调 +预订 +预订款 +预订量 +预定 +预定金 +预断 +预发 +预防 +预防费 +预防性 +预防针 +预防注射 +预付 +预付款 +预感 +预告 +预购 +预后 +预计 +预见 +预见性 +预交 +预警 +预警机 +预决算 +预科 +预科系 +预可行性 +预冷肉 +预料 +预留 +预留户 +预埋件 +预谋 +预配 +预期 +预热 +预赛 +预设 +预审 +预审处 +预审股 +预示 +预收费 +预售 +预售处 +预售方 +预算 +预算案 +预算表 +预算处 +预算额 +预算法 +预算内 +预算内外 +预算权 +预算司 +预算外 +预提 +预委会 +预习 +预先 +预想 +预选 +预选赛 +预言 +预言家 +预研性 +预演 +预应力 +预约 +预约卡 +预展 +预兆 +预支 +预制 +预制板 +预制厂 +预制构件 +预制件 +预置 +预祝 +预装 +域 +域名 +域外 +欲 +欲罢不能 +欲盖弥彰 +欲壑难平 +欲哭无泪 +欲念 +欲擒故纵 +欲速不达 +欲望 +欲望化 +欲先取之 +欲晓 +欲笑无声 +谕 +谕旨 +喻 +喻家湾村 +喻特曼科 +寓 +寓存 +寓邸 +寓刚于柔 +寓公 +寓教于乐 +寓理于情 +寓理于事 +寓情于物 +寓舍 +寓示 +寓所 +寓言 +寓意 +寓于 +御 +御笔 +御菜 +御厨 +御代表 +御寒 +御寒衣 +御花园 +御览 +御林军 +御史中丞 +御手 +御侮 +御医 +御用 +御园 +御制 +裕 +裕后村 +裕中西里 +遇 +遇刺 +遇到 +遇害 +遇害者 +遇见 +遇救 +遇剌 +遇难 +遇难者 +遇险 +遇险者 +遇阻 +愈 +愈发 +愈合 +愈加 +愈来愈 +愈演愈烈 +愈益 +誉 +誉称 +誉满全球 +誉为 +豫 +豫北 +豫东 +豫港队 +豫剧 +豫剧团 +豫南 +豫皖 +豫西 +豫西南 +豫园 +豫州 +燠 +鹬蚌相争 +鸢 +鸢尾 +鸢尾花 +冤 +冤案 +冤沉海底 +冤仇 +冤错案 +冤大头 +冤魂 +冤家 +冤家对头 +冤家路窄 +冤假错案 +冤孽 +冤孽账 +冤气 +冤情 +冤屈 +冤头 +冤枉 +冤枉路 +冤枉钱 +冤枉事 +冤狱 +鸳 +鸳鸯 +鸳鸯桥 +鸳鸯树 +鸳鸯松 +鸳鸯戏水 +渊 +渊博 +渊海 +渊厚 +渊流 +渊深 +渊薮 +渊源 +渊远流长 +箢箕 +元 +元/车 +元/吨 +元/公斤 +元/户 +元/亩 +元白 +元宝 +元宝枫 +元朝 +元大 +元大都 +元代 +元旦 +元坊村 +元丰 +元凤四年 +元古界 +元件 +元江 +元老 +元麻布 +元煤 +元明清 +元谋猿人 +元年 +元配 +元气 +元器件 +元曲 +元曲选 +元人 +元戎 +元山市 +元氏 +元首 +元首会 +元书纸 +元帅 +元素 +元宵 +元宵节 +元凶 +元勋 +元延三年 +元音 +元鱼 +元元本本 +元月 +元月份 +元珠笔 +元字符 +员 +员额 +员工 +员司 +员外 +员外郎 +园 +园边 +园长 +园地 +园丁 +园后 +园居 +园里 +园林 +园林化 +园林节 +园林局 +园林师 +园林式 +园林学家 +园内 +园旁 +园圃 +园区 +园区型 +园容 +园田 +园田地 +园艺 +园艺场 +园艺点 +园艺节 +园艺区 +园艺系 +园艺型 +园艺学 +园囿 +园中 +园中园 +园洲镇 +园子 +沅 +沅江 +沅江市 +沅陵 +沅水 +垣 +垣曲县 +原 +原班人马 +原版 +原被告 +原本 +原材料 +原产 +原产地 +原产机 +原虫 +原初 +原处 +原创 +原创性 +原地 +原点 +原定 +原动力 +原发癌 +原发性 +原封不动 +原峰村 +原稿 +原稿纸 +原告 +原告方 +原告席 +原鸽 +原故 +原核 +原话 +原籍 +原价 +原件 +原浆 +原胶 +原酒 +原来 +原理 +原粮 +原谅 +原料 +原料处 +原料库 +原料类 +原料粮 +原料林 +原料药 +原貌 +原煤 +原棉 +原名 +原模原样 +原木 +原判 +原配 +原配机 +原平 +原平市 +原平县 +原人 +原色 +原审 +原生 +原生地 +原生动物 +原生矿物 +原生态 +原生油 +原生质 +原始 +原始公社 +原始股 +原始积累 +原始林 +原始群 +原始人 +原始社会 +原始性 +原诉 +原素 +原索动物 +原糖 +原委 +原位 +原文 +原武 +原物 +原先 +原线圈 +原形 +原形毕露 +原型 +原型机 +原盐 +原眼 +原阳 +原阳县 +原样 +原野 +原液 +原议 +原意 +原因 +原由 +原油 +原油价 +原有 +原原本本 +原则 +原则层 +原则性 +原汁 +原汁原味 +原值 +原址 +原种 +原主 +原著 +原庄村 +原装 +原装货 +原状 +原子 +原子尘 +原子弹 +原子核 +原子级 +原子价 +原子量 +原子能 +原子能部 +原子能局 +原子能系 +原子球宫 +原子团 +原子武器 +原子序数 +原子炸弹 +原子钟 +原罪 +原作 +原作者 +圆 +圆白菜 +圆场 +圆窗 +圆凳 +圆点 +圆雕 +圆顶 +圆法 +圆盖 +圆钢 +圆鼓鼓 +圆规 +圆轨 +圆滚滚 +圆盒 +圆乎乎 +圆弧 +圆滑 +圆浑 +圆寂 +圆角 +圆括号 +圆领儿 +圆领衫 +圆溜溜 +圆笼 +圆满 +圆梦 +圆明园 +圆明园者 +圆木 +圆盘耙 +圆球 +圆圈 +圆融 +圆润 +圆山 +圆熟 +圆顺 +圆台 +圆通 +圆通山 +圆筒 +圆舞曲 +圆心 +圆心角 +圆形 +圆形动物 +圆圆 +圆圆的 +圆圆满满 +圆整 +圆周 +圆周角 +圆周率 +圆珠 +圆珠笔 +圆珠笔芯 +圆柱 +圆柱体 +圆柱形 +圆状 +圆锥 +圆锥花序 +圆锥台 +圆锥体 +圆锥形 +圆桌 +圆桌会议 +圆桌面 +圆子 +袁 +袁家岗 +袁家岭 +袁派 +袁头 +袁巷乡 +袁州 +袁庄 +援 +援兵 +援藏 +援敌 +援建 +援救 +援军 +援款 +援例 +援粮 +援手 +援外 +援引 +援助 +援助处 +援助国 +援助款 +援助者 +缘 +缘簿 +缘分 +缘份 +缘故 +缘何 +缘木求鱼 +缘起 +缘由 +缘于 +鼋鱼 +塬 +塬谷 +塬面 +塬上 +源 +源程序 +源代码 +源地 +源东乡 +源口 +源流 +源流同清 +源流有自 +源目录 +源泉 +源头 +源头者 +源文件 +源于 +源源 +源源不断 +源源不绝 +源源而来 +源远流长 +源自 +猿 +猿猴 +猿人 +猿声 +猿岩龙岫 +猿叶虫 +辕马 +辕门 +圜丘 +远 +远别 +远程 +远处 +远大 +远道 +远道而来 +远地点 +远东 +远东队 +远东局 +远东司 +远东所 +远渡重洋 +远遁千年 +远方 +远房 +远房亲戚 +远非 +远古 +远光灯 +远海 +远航 +远华队 +远嫁 +远见 +远见卓识 +远交近攻 +远郊 +远郊区 +远近 +远近闻名 +远近纵横 +远景 +远客 +远离 +远邻 +远路 +远虑 +远门 +远谋 +远南 +远念 +远期 +远亲 +远去 +远射 +远涉 +远涉重洋 +远生 +远视 +远逝 +远眺 +远投 +远途 +远望 +远销 +远行 +远洋 +远洋船 +远因 +远游 +远远 +远在 +远在天边 +远镇 +远征 +远征军 +远志 +远走 +远走高飞 +远走他乡 +远足 +远祖 +苑 +苑家屯 +怨 +怨艾 +怨不得 +怨鬼 +怨恨 +怨气 +怨曲 +怨声 +怨声载道 +怨天尤人 +怨天怨地 +怨言 +怨尤 +院 +院坝 +院本 +院长 +院方 +院规 +院纪 +院里 +院落 +院貌 +院门 +院名 +院内 +院墙 +院庆 +院区 +院容 +院舍 +院史 +院士 +院所 +院土 +院务 +院务处 +院务会 +院校 +院校长 +院友 +院友会 +院中 +院子 +垸 +愿 +愿望 +愿谢 +愿心 +愿意 +愿者上钩 +曰 +约 +约堡 +约贝州 +约旦 +约旦河 +约旦河谷 +约定 +约定期 +约定俗成 +约敦 +约法 +约法三章 +约分 +约稿 +约稿信 +约会 +约会室 +约计 +约见 +约据 +约克 +约略 +约摸 +约莫 +约请 +约束 +约束力 +约数 +约通社 +约言 +约制 +月 +月报 +月饼 +月城 +月城镇 +月初 +月底 +月殿 +月度 +月度奖 +月儿 +月费 +月份 +月份牌 +月工 +月工资 +月宫 +月光 +月光花 +月光如水 +月桂树 +月黑风高 +月虹 +月华 +月环食 +月季 +月季花 +月界 +月经 +月经带 +月镜 +月刊 +月亏 +月老 +月历 +月利 +月利率 +月亮 +月亮门儿 +月令 +月轮 +月明风清 +月明如镜 +月末 +月票 +月浦 +月钱 +月琴 +月球 +月球车 +月球仪 +月全食 +月泉 +月色 +月山 +月石 +月食 +月事 +月柿 +月台 +月台票 +月坛 +月塘村 +月弯残雪 +月弯街 +月息 +月下老人 +月相 +月薪 +月牙 +月牙湖 +月牙泉 +月牙形 +月岩 +月夜 +月盈 +月影 +月余 +月月 +月月红 +月晕 +月中 +月终 +月子 +月子病 +月租费 +月租金 +岳 +岳北 +岳父 +岳家 +岳麓 +岳麓区 +岳麓山 +岳庙 +岳母 +岳南 +岳南区 +岳王路 +岳西县 +岳阳 +岳阳道 +岳阳楼 +岳阳楼区 +岳阳市 +岳阳县 +岳阳县队 +岳丈 +岳州 +钥 +钥匙 +钥匙环 +钥匙孔 +钥匙扣 +钥匙牌 +钥匙圈 +钥匙锁 +悦 +悦耳 +悦目 +悦目性 +悦人耳目 +钺 +阅 +阅报 +阅报栏 +阅报室 +阅兵 +阅兵式 +阅处 +阅读 +阅读者 +阅卷 +阅看 +阅览 +阅览区 +阅览室 +阅览厅 +阅览证 +阅历 +阅书报室 +跃 +跃变层 +跃动 +跃动感 +跃过 +跃脚板 +跃进 +跃进路 +跃居 +跃马 +跃然 +跃然而起 +跃然纸上 +跃入 +跃身而起 +跃升 +跃兔 +跃跃一试 +跃跃欲试 +跃至 +粤 +粤北 +粤菜 +粤菜馆 +粤东 +粤东北 +粤汉 +粤籍 +粤剧 +粤剧团 +粤南 +粤曲 +粤西 +粤绣 +粤语 +越 +越城岭 +越挫越奋 +越东 +越冬 +越冬场 +越冬作物 +越盾 +越发 +越方 +越共 +越谷市 +越瓜 +越规者 +越轨 +越过 +越级 +越加 +越界 +越境 +越橘 +越剧 +越剧界 +越剧团 +越剧院 +越来越 +越岭 +越棉寮 +越南 +越南式 +越权 +越是 +越通社 +越位 +越野 +越野车 +越野跑 +越野赛 +越野赛跑 +越狱 +越战 +越战越勇 +越俎代庖 +龠 +云 +云霭 +云豹 +云鬓 +云彩 +云层 +云大 +云巅 +云顶岩 +云豆 +云端 +云朵 +云儿 +云帆 +云峰 +云浮市 +云干乡 +云冈 +云冈矿 +云岗 +云贵川 +云海 +云航 +云和 +云和县 +云鹤乡 +云集 +云锦 +云居寺 +云谲波诡 +云开日出 +云块 +云量 +云林 +云岭 +云岭乡 +云龙风虎 +云龙湖 +云龙区 +云龙纹 +云龙乡 +云锣 +云梦 +云母 +云南 +云南府 +云南马 +云南省 +云南团 +云片糕 +云气 +云雀 +云纱 +云山雾罩 +云杉 +云梢 +云石 +云水洞 +云丝 +云台山 +云梯 +云梯车 +云天 +云头 +云头儿 +云图 +云团 +云湾村 +云雾 +云雾飘渺 +云西 +云西新村 +云溪区 +云系 +云霞 +云县 +云消雾散 +云霄 +云霄县 +云岫庵 +云崖 +云烟 +云岩区 +云阳镇 +云翳 +云莺 +云影 +云游 +云月湖 +云云 +云遮雾障 +云蒸霞蔚 +匀 +匀播耧 +匀称 +匀净 +匀齐 +匀实 +匀速 +匀速运动 +匀细 +匀整 +芸豆 +芸香 +芸芸 +芸芸众生 +郧西县 +郧县 +郧阳 +耘 +耘锄 +允 +允当 +允当寨 +允诺 +允许 +允许量 +允许值 +陨 +陨落 +陨石 +陨石坑 +陨石雨 +陨铁 +陨星 +孕 +孕产妇 +孕产期 +孕妇 +孕期 +孕前 +孕情 +孕穗 +孕穗期 +孕畜 +孕育 +运 +运兵车 +运钞 +运钞车 +运城 +运城市 +运筹 +运筹帷幄 +运筹学 +运抵 +运动 +运动表 +运动场 +运动队 +运动服 +运动感 +运动会 +运动健将 +运动界 +运动量 +运动论 +运动迷 +运动衫 +运动神经 +运动史 +运动鞋 +运动鞋者 +运动型 +运动学 +运动衣 +运动员 +运动战 +运动装 +运费 +运管 +运管所 +运管员 +运河 +运河畔 +运河区 +运货舱 +运价 +运斤成风 +运距 +运力 +运量 +运煤车 +运命 +运能 +运气 +运球 +运输 +运输班 +运输部 +运输车 +运输处 +运输船 +运输队 +运输费 +运输户 +运输机 +运输舰 +运输科 +运输量 +运输日 +运输省 +运输诗 +运输网 +运输险 +运输线 +运输业 +运思精妙 +运送 +运送者 +运算 +运算符 +运算量 +运算器 +运土车 +运往 +运箱费 +运销 +运销处 +运销户 +运销商 +运销业 +运行 +运行部 +运行费 +运行率 +运行面 +运行图 +运营 +运营权 +运用 +运用裕如 +运用自如 +运杂费 +运载 +运载车 +运载火箭 +运转 +运转率 +运走 +运作 +郓城县 +恽城 +晕 +晕菜 +晕倒 +晕乎乎 +晕染 +晕色 +晕头晕脑 +晕头转向 +晕眩 +晕晕的 +酝酿 +酝酿期 +韵 +韵白 +韵部 +韵腹 +韵脚 +韵律 +韵母 +韵式 +韵事 +韵头 +韵尾 +韵味 +韵味儿 +韵文 +韵语 +韵致 +熨 +熨斗 +熨帖 +熨衣板 +蕴 +蕴藏 +蕴藏量 +蕴含 +蕴涵 +蕴藉 +蕴意 +匝 +咂 +咂摸 +咂咂 +杂 +杂八 +杂稗壳 +杂拌 +杂拌儿 +杂草 +杂草丛生 +杂差 +杂抄 +杂陈 +杂醇油 +杂沓 +杂豆 +杂多 +杂肥 +杂费 +杂感 +杂和菜 +杂和面儿 +杂花生树 +杂话 +杂烩 +杂活儿 +杂货 +杂货店 +杂货铺 +杂记 +杂技 +杂技场 +杂技节 +杂技界 +杂技团 +杂家 +杂交 +杂交稻 +杂交率 +杂交米 +杂交棉 +杂交种 +杂居 +杂剧 +杂粮 +杂乱 +杂乱不堪 +杂乱无章 +杂面 +杂木片 +杂念 +杂牌 +杂牌军 +杂品 +杂七杂八 +杂然 +杂声 +杂食店 +杂史 +杂事 +杂树杆 +杂耍 +杂税 +杂说 +杂碎 +杂谈 +杂文 +杂文集 +杂文选 +杂务 +杂务事 +杂物 +杂物堆 +杂物间 +杂物箱 +杂项 +杂音 +杂用 +杂院 +杂症 +杂志 +杂志费 +杂志社 +杂质 +杂种 +砸 +砸饭碗 +砸锅卖铁 +砸烂 +砸门声 +砸碎 +灾 +灾害 +灾害点 +灾害性 +灾害学 +灾害源 +灾患 +灾荒 +灾荒史 +灾祸 +灾民 +灾难 +灾难日 +灾难史 +灾难性 +灾年 +灾情 +灾区 +灾危 +灾星 +灾殃 +灾种 +哉 +栽 +栽倒 +栽跟头 +栽花养草 +栽斤头 +栽培 +栽培法 +栽培植物 +栽绒 +栽赃 +栽植 +栽种 +栽种期 +栽子 +宰 +宰风 +宰辅 +宰割 +宰狗刀 +宰客 +宰客风 +宰杀 +宰牲节 +宰汶村 +宰相 +载 +载波 +载驳船 +载弹量 +载歌行 +载歌载舞 +载荷 +载货 +载货车 +载客 +载客率 +载力 +载量 +载流子 +载明 +载入 +载体 +载文 +载畜量 +载有 +载运 +载重 +载重车 +载重量 +崽 +崽子 +再 +再版 +再版率 +再版书 +再不 +再创 +再次 +再贷款 +再度 +再而三 +再会 +再婚 +再婚者 +再加之 +再见 +再接再厉 +再进一步 +再就是 +再就业率 +再就业者 +再宽限期 +再其次 +再三 +再山 +再审 +再生 +再生产 +再生稻 +再生父母 +再生力 +再生棉 +再生之恩 +再衰三竭 +再说 +再贴现率 +再现 +再行 +再也 +再有 +再造 +再造术 +再则 +再障 +再者 +再者说 +再终字 +在 +在案 +在编 +在册 +在场 +在场者 +在朝党 +在此一举 +在岗 +在岗者 +在乎 +在即 +在家 +在建 +在教 +在劫难逃 +在理 +在理儿 +在理会 +在内 +在任 +在商明政 +在商言商 +在身 +在世 +在手 +在所不辞 +在所不计 +在所不惜 +在所难免 +在逃 +在逃犯 +在天有灵 +在天之灵 +在途资金 +在望 +在位 +在握 +在下 +在先 +在线 +在校 +在校生 +在心 +在行 +在押 +在押犯 +在野 +在野党 +在野党派 +在野派 +在业 +在意 +在用车 +在于 +在职 +在职员 +在制品 +在座 +糌巴 +糌粑 +簪缨 +簪子 +咱 +咱村 +咱俩 +咱们 +攒 +攒动 +暂 +暂存处 +暂定 +暂定名 +暂缓 +暂名 +暂且 +暂缺 +暂时 +暂时性 +暂停 +暂委 +暂星 +暂行 +暂用 +暂住 +暂住地 +暂住证 +赞 +赞比亚 +赞不绝口 +赞成 +赞成度 +赞成键 +赞成票 +赞成者 +赞词 +赞辞 +赞道 +赞方 +赞歌 +赞皇 +赞皇县 +赞美 +赞美歌 +赞美声 +赞美诗 +赞佩 +赞赏 +赞赏不已 +赞颂 +赞颂声 +赞叹 +赞叹不已 +赞叹声 +赞同 +赞许 +赞许者 +赞扬 +赞扬声 +赞语 +赞誉 +赞誉声 +赞曰 +赞助 +赞助费 +赞助人 +赞助商 +赞助者 +錾 +錾刀 +錾子 +赃 +赃官 +赃款 +赃物 +赃证 +臧否 +脏 +脏腑 +脏乎乎 +脏话 +脏活 +脏乱 +脏乱差 +脏器 +脏土 +脏污 +脏物 +脏兮兮 +脏言 +脏源 +脏躁症 +脏字 +葬 +葬法 +葬礼 +葬入 +葬身 +葬送 +遭 +遭到 +遭逢 +遭荒 +遭际 +遭劫 +遭难 +遭受 +遭殃 +遭遇 +遭遇战 +遭灾 +遭罪 +糟 +糟糕 +糟践 +糟糠 +糟粕 +糟损 +糟踏 +糟蹋 +糟行 +糟油 +凿 +凿空 +凿岩机 +凿子 +早 +早安 +早班 +早班车 +早报 +早餐 +早餐点 +早餐会 +早操 +早茶 +早产 +早产儿 +早车 +早晨 +早出晚归 +早春 +早稻 +早点 +早点摊儿 +早饭 +早慧 +早婚 +早间 +早就 +早梅 +早米苋 +早年 +早年间 +早期 +早期白话 +早起 +早日 +早上 +早市 +早逝 +早熟 +早衰 +早霜 +早霜冻 +早岁 +早退 +早晚 +早晚市 +早晚市儿 +早先 +早籼 +早籼稻 +早些 +早泄 +早已 +早育 +早早 +早早儿 +早造 +枣 +枣儿 +枣糕 +枣红 +枣林 +枣岭乡 +枣泥 +枣农 +枣皮 +枣强县 +枣强镇 +枣树 +枣藤 +枣研 +枣阳 +枣阳市 +枣椰 +枣椰林 +枣椰树 +枣业 +枣园 +枣园镇 +枣庄 +枣庄市 +枣庄乡 +枣子 +澡 +澡盆 +澡堂 +澡塘 +藻 +藻潮 +藻多糖 +藻井 +藻类 +藻类植物 +藻思 +藻种 +灶 +灶房 +灶火 +灶间 +灶具 +灶君 +灶口 +灶马 +灶神 +灶台 +灶膛 +灶头 +灶王爷 +皂白 +皂荚 +皂素 +造 +造币机 +造表 +造册 +造成 +造船 +造船厂 +造船场 +造船量 +造船系 +造船业 +造反 +造反派 +造访 +造肥 +造福 +造福一方 +造化 +造化物 +造价 +造价款 +造假 +造假者 +造景 +造就 +造句 +造粒 +造粒机 +造林 +造陆运动 +造孽 +造山运动 +造势 +造田 +造物 +造物主 +造响 +造像 +造形 +造型 +造型各异 +造型观 +造型光 +造型艺术 +造血 +造血式 +造血型 +造谣 +造谣惑众 +造谣生事 +造谣中伤 +造诣 +造影 +造影剂 +造造 +造纸 +造纸厂 +造纸局 +造纸术 +造纸业 +造作 +噪 +噪声 +噪声源 +噪音 +噪音区 +噪音源 +噪杂 +燥 +燥热 +躁 +躁动 +躁动不安 +躁热 +则 +则救之 +则已 +择 +择菜 +择伐 +择机 +择偶 +择偶者 +择期 +择取 +择日 +择善而从 +择善而用 +择校生 +择要 +择业 +择业观 +择医 +择优 +择优录用 +择优汰劣 +择友 +择址 +择捉 +泽 +泽被子孙 +泽城乡 +泽村 +泽当 +泽国 +泽国镇 +泽惠 +泽及 +泽及后人 +泽及千秋 +泽库县 +泽兰 +泽宁根 +泽土 +泽泻 +泽州 +泽州县 +责 +责备 +责编 +责成 +责罚 +责怪 +责令 +责骂 +责难 +责权 +责权利 +责人者 +责任 +责任车 +责任段 +责任方 +责任感 +责任街 +责任令 +责任牌 +责任区 +责任区制 +责任人 +责任人员 +责任事故 +责任书 +责任田 +责任险 +责任心 +责任型 +责任性 +责任者 +责任制 +责任状 +责问 +责无旁贷 +啧 +啧有烦言 +啧啧 +啧啧称奇 +啧啧称赞 +啧啧声 +舴艋 +赜 +仄 +仄声 +贼 +贼船 +贼喊捉贼 +贼寇 +贼亮 +贼溜溜 +贼眉鼠眼 +贼头贼脑 +贼窝 +贼心 +贼星 +贼眼 +贼赃 +怎 +怎地 +怎么 +怎么办 +怎么得了 +怎么样 +怎生 +怎样 +曾 +曾厝 +曾父 +曾几何时 +曾家岩 +曾经 +曾经沧海 +曾随 +曾孙 +曾孙女 +曾孙女儿 +曾用名 +曾祖 +曾祖父 +曾祖母 +增 +增白剂 +增编 +增兵 +增补 +增产 +增产菌 +增长 +增长带 +增长点 +增长额 +增长极 +增长量 +增长率 +增长年 +增长期 +增长区 +增长图 +增长型 +增长源 +增城 +增储 +增储上产 +增创 +增大 +增调 +增订 +增订本 +增多 +增发 +增幅 +增高 +增供 +增购 +增光 +增光添彩 +增辉 +增辉添色 +增加 +增加额 +增加量 +增加值 +增减 +增减额 +增建 +增进 +增开 +增刊 +增量 +增派 +增强 +增强型 +增容 +增容费 +增色 +增色添彩 +增删 +增上寺 +增设 +增生 +增势 +增收 +增收节支 +增速 +增添 +增田町 +增温 +增污 +增效 +增选 +增压 +增压泵 +增压器 +增养 +增养殖业 +增氧机 +增益 +增盈 +增盈减亏 +增援 +增支 +增支减利 +增值 +增值额 +增值链 +增值率 +增值税 +增值税率 +增殖 +增殖堆 +增殖率 +增殖腺 +增殖性 +增殖症 +增至 +增质 +增转化 +增资 +憎 +憎称 +憎恶 +憎恨 +锃亮 +甑子 +赠 +赠订 +赠给 +赠机 +赠款 +赠礼 +赠品 +赠券 +赠书 +赠送 +赠物 +赠言 +赠予 +赠与 +赠与税 +赠阅 +赠者 +吒 +咋 +咋舌 +咋样 +喳喳 +渣 +渣儿 +渣土 +渣土地 +渣油 +渣子 +渣滓 +渣滓洞 +扎 +扎达县 +扎得 +扎堆 +扎堆儿 +扎耳朵 +扎根 +扎根绳 +扎根树 +扎糊 +扎花 +扎花女 +扎加洛 +扎科帕内 +扎兰屯市 +扎龙 +扎纳若尔 +扎曲 +扎染 +扎沙村 +扎什伦布 +扎实 +扎手 +扎眼 +扎耶尼 +扎伊尔 +扎扎实实 +扎针 +扎制 +札 +札幌 +札幌市 +札记 +轧 +轧道机 +轧钢 +轧钢厂 +轧钢机 +轧钢线 +轧辊 +轧花 +轧花厂 +轧花机 +轧机 +轧路机 +轧制 +闸 +闸北 +闸北区 +闸刀 +闸盒 +闸口 +闸口乡 +闸门 +闸皮 +闸室 +闸蟹 +铡 +铡刀 +眨 +眨眼 +砟子 +乍 +乍得 +乍暖还寒 +乍浦 +乍浦港 +诈 +诈唬 +诈降 +诈农案 +诈骗 +诈骗案 +诈骗犯 +诈骗者 +诈骗罪 +诈取 +诈语 +栅 +栅格 +栅极 +栅栏 +栅栏门 +栅网 +炸 +炸弹 +炸掉 +炸豆腐 +炸糕 +炸毁 +炸火腿肠 +炸鸡 +炸雷 +炸肉 +炸伤 +炸药 +炸药包 +炸药桶 +炸鱼 +炸子儿 +痄腮 +蚱蜢 +蚱蜢舟 +榨 +榨菜 +榨菜量 +榨菜头 +榨豆浆机 +榨季 +榨取 +榨汁 +斋 +斋饭 +斋宫 +斋戒 +斋棚 +斋品 +斋期 +斋日 +斋堂川 +斋月 +斋月灯 +摘 +摘编 +摘采 +摘抄 +摘除 +摘登 +摘掉 +摘发 +摘记 +摘金 +摘录 +摘葡萄 +摘取 +摘梢 +摘示 +摘要 +摘译 +摘引 +摘自 +宅 +宅邸 +宅第 +宅基地 +宅急送 +宅门 +宅舍 +宅院 +宅子 +翟 +翟坡村 +窄 +窄带 +窄幅 +窄小 +窄窄 +窄窄的 +债 +债额 +债户 +债款 +债利 +债权 +债权额 +债权国 +债权人 +债权者 +债券 +债市 +债台高筑 +债务 +债务缠身 +债务国 +债务率 +债务人 +债务者 +债主 +寨 +寨边 +寨顶 +寨东 +寨根乡 +寨里 +寨头 +寨主 +寨子 +寨子口 +沾 +沾边 +沾边儿 +沾恩 +沾溉 +沾光 +沾花惹草 +沾化 +沾化县 +沾连 +沾满 +沾亲带故 +沾染 +沾沾 +沾沾自喜 +毡 +毡包 +毡房 +毡笠 +毡帽 +毡幕 +毡袍 +毡棚 +毡靴 +毡帐 +毡子 +粘 +粘稠 +粘堵 +粘合 +粘合剂 +粘乎乎 +粘滑 +粘胶 +粘接剂 +粘结 +粘结力 +粘菌 +粘力 +粘连 +粘膜 +粘贴 +粘土 +粘土矿 +粘土砖 +粘性 +粘液 +粘液层 +粘粘糊糊 +粘着剂 +谵 +谵妄 +瞻 +瞻前顾后 +瞻望 +瞻仰 +瞻仰厅 +瞻仰者 +瞻榆乡 +瞻瞩 +斩 +斩草除根 +斩钉截铁 +斩断 +斩假石 +斩尽杀绝 +斩六将 +斩头去尾 +展 +展板 +展播 +展场 +展陈 +展翅 +展出 +展窗 +展读 +展馆 +展柜 +展徽 +展会 +展卷 +展开 +展开式 +展看 +展宽 +展览 +展览部 +展览城 +展览馆 +展览会 +展览局 +展览品 +展览厅 +展览证 +展廊 +展露 +展卖 +展品 +展评 +展期 +展区 +展容 +展示 +展示板 +展示窗 +展示会 +展示室 +展示台 +展室 +展诵 +展台 +展厅 +展团 +展望 +展望台 +展位 +展现 +展线 +展项 +展销 +展销场 +展销会 +展销价 +展销品 +展销厅 +展性 +展演 +展演团 +展映 +展园 +展主 +盏 +盏盏 +崭 +崭亮 +崭露头角 +崭新 +崭崭 +搌布 +辗转 +辗转反侧 +辗转难眠 +占 +占便宜 +占卜 +占道费 +占地 +占居 +占据 +占款 +占领 +占领军 +占领区 +占上风 +占位 +占先 +占线 +占用 +占优 +占优势 +占有 +占有额 +占有量 +占有率 +占有权 +占有物 +占有者 +战 +战罢 +战败 +战败国 +战败者 +战报 +战备 +战表 +战场 +战场坪村 +战车 +战成 +战船 +战创伤 +战刀 +战地 +战斗 +战斗班 +战斗不止 +战斗部 +战斗化 +战斗机 +战斗舰 +战斗力 +战斗曲 +战斗性 +战斗员 +战抖 +战法 +战犯 +战俘 +战俘营 +战歌 +战功 +战鼓 +战国 +战果 +战壕 +战和 +战后 +战火 +战火纷飞 +战祸 +战机 +战绩 +战技术 +战舰 +战将 +战局 +战具 +战况 +战利品 +战例 +战列舰 +战乱 +战略 +战略办 +战略家 +战略区 +战略物资 +战略性 +战略学 +战马 +战幔 +战幕 +战炮 +战袍 +战平 +战旗 +战旗展 +战前 +战勤 +战情 +战区 +战伤 +战神 +战胜 +战胜国 +战胜者 +战时 +战史 +战士 +战事 +战书 +战术 +战术学 +战死 +战天斗地 +战威 +战无不胜 +战线 +战役 +战役式 +战鹰 +战营 +战友 +战友情 +战云 +战战兢兢 +战阵 +战争 +战争贩子 +战争史 +栈 +栈道 +栈房 +栈桥 +站 +站办所 +站长 +站场 +站点 +站段 +站队 +站岗 +站规 +站柜 +站柜台 +站级 +站卡 +站口 +站里 +站立 +站立者 +站貌 +站名 +站牛 +站牌 +站牌点 +站票 +站前 +站区 +站容 +站上 +站台 +站台票 +站位 +站稳 +站务 +站务员 +站站 +站址 +站住 +站住脚 +绽 +绽白 +绽放 +绽开 +绽裂 +绽破 +湛 +湛河 +湛河区 +湛江 +湛江港 +湛江舰 +湛江市 +湛蓝 +湛蓝湛蓝 +蘸 +张 +张榜 +张榜镇 +张北 +张北县 +张北镇 +张本 +张弛 +张祠乡 +张村 +张村乡 +张大 +张大庄 +张单驼 +张灯结彩 +张店 +张店区 +张高 +张格庄镇 +张弓 +张弓镇 +张古 +张挂 +张冠李戴 +张皇失措 +张黄镇 +张集 +张集矿 +张集乡 +张集镇 +张家浜 +张家堡乡 +张家川村 +张家村 +张家港 +张家港市 +张家沟 +张家集镇 +张家界 +张家界市 +张家口 +张家口市 +张江 +张截港 +张金镇 +张开 +张口 +张口即来 +张口结舌 +张狂 +张力 +张裂 +张罗 +张罗声 +张马乡 +张目 +张桥村 +张茹集村 +张茹集乡 +张三李四 +张三营镇 +张贴 +张贴物 +张贴者 +张铁锤村 +张厅 +张湾镇 +张望 +张午 +张午乡 +张夏镇 +张先村 +张新矿 +张牙舞爪 +张扬 +张掖 +张掖市 +张宅乡 +张张 +张庄 +张庄村 +张庄乡 +张嘴 +章 +章草 +章程 +章法 +章凤镇 +章化 +章回体 +章节 +章句 +章目 +章丘 +章丘市 +章鱼 +章则 +章庄铺镇 +彰 +彰化 +彰山 +彰武县 +彰显 +彰扬 +漳 +漳河 +漳淮乡 +漳平 +漳平市 +漳浦县 +漳县 +漳州 +漳州市 +獐狮荡乡 +獐子 +樟蚕 +樟村 +樟家乡 +樟柳碱 +樟木 +樟木板 +樟脑 +樟脑丸 +樟树 +樟树市 +蟑螂 +涨 +涨潮 +涨跌 +涨跌幅 +涨风 +涨幅 +涨价 +涨价率 +涨落 +涨落不一 +涨势 +掌 +掌班 +掌鞭 +掌舵 +掌舵人 +掌骨 +掌故 +掌管 +掌柜 +掌权 +掌权者 +掌上明珠 +掌上舞 +掌勺儿 +掌声 +掌声雷动 +掌握 +掌握者 +掌心 +掌中宝 +丈 +丈夫 +丈量 +丈母 +丈母娘 +丈人 +仗 +仗势欺人 +仗义 +仗义疏财 +仗义执言 +帐 +帐房 +帐房村 +帐幕 +帐篷 +帐篷顶 +帐篷街 +帐外帐 +帐子 +杖 +杖头木偶 +胀 +胀大 +胀鼓鼓 +账 +账本 +账簿 +账册 +账单 +账单子 +账房 +账号 +账户 +账户卡 +账据 +账款 +账面 +账目 +账目单 +账务 +账页 +账页纸 +障 +障碍 +障碍壁 +障碍赛跑 +障碍物 +障碍性 +障人眼目 +障眼法 +障子 +幛子 +瘴疠 +瘴气 +招 +招安 +招标 +招标办 +招标会 +招标制 +招兵 +招兵买马 +招财进宝 +招待 +招待饭 +招待费 +招待会 +招待券 +招待所 +招待员 +招儿 +招法 +招飞 +招风惹草 +招蜂引蝶 +招干 +招工 +招工桌 +招供 +招股 +招呼 +招魂 +招集 +招架 +招架不住 +招降纳叛 +招考 +招考办 +招徕 +招徕声 +招揽 +招领 +招领箱 +招录 +招募 +招牌 +招聘 +招聘处 +招聘会 +招聘人 +招聘制 +招惹 +招认 +招商 +招商会 +招商局 +招商团 +招商引资 +招商月 +招生 +招生办 +招生数 +招示牌 +招事 +招收 +招手 +招术 +招数 +招贴 +招贴画 +招贴牌 +招投标 +招投标率 +招投标制 +招贤 +招贤纳士 +招贤引才 +招摇过市 +招摇撞骗 +招议标 +招引 +招用 +招远 +招远市 +招远县 +招展 +招展团 +招招 +招致 +招子 +招租 +昭 +昭和 +昭和四年 +昭金 +昭觉寺 +昭觉县 +昭陵 +昭然若揭 +昭示 +昭通 +昭通市 +昭雪 +昭彰 +昭昭 +啁啾 +找 +找茬儿 +找出路 +找到 +找还 +找回 +找乐 +找齐 +找钱 +找上门 +找事 +找水 +找头 +找寻 +找油人 +找找 +沼 +沼地 +沼气 +沼气池 +沼气式 +沼液 +沼液叶喷 +沼泽 +沼泽地 +沼渣 +召 +召唤 +召回 +召集 +召集人 +召见 +召开 +兆 +兆比/秒 +兆赫 +兆示 +兆头 +兆瓦 +兆位 +诏 +诏示 +诏书 +赵 +赵北村 +赵村 +赵村乡 +赵畈村 +赵公元帅 +赵光镇 +赵集乡 +赵家井村 +赵家岭村 +赵家条 +赵李桥镇 +赵全营村 +赵体 +赵湾乡 +赵县 +赵巷镇 +赵杏村 +赵元任 +赵州 +赵州桥 +赵庄镇 +笊篱 +照 +照搬 +照办 +照本宣科 +照壁 +照常 +照抄 +照彻 +照度 +照发 +照拂 +照顾 +照顾性 +照管 +照护 +照会 +照见 +照镜子 +照旧 +照看 +照理 +照例 +照亮 +照料 +照录 +照猫画虎 +照面 +照明 +照明弹 +照明灯 +照排机 +照片 +照片儿 +照片集 +照墙 +照射 +照射法 +照射率 +照实 +照水梅 +照说 +照相 +照相版 +照相点 +照相馆 +照相机 +照相术 +照相仪 +照相纸 +照像 +照样 +照妖镜 +照耀 +照叶林 +照应 +照章办事 +照照 +照直 +照主 +照转 +照准 +照着 +照做不误 +罩 +罩袍 +罩棚 +罩衫 +罩袖 +罩衣 +罩子 +肇 +肇东市 +肇祸 +肇庆 +肇庆市 +肇始 +肇事 +肇事车 +肇事人 +肇事者 +肇事罪 +蜇 +蜇伤 +遮 +遮蔽 +遮丑 +遮挡 +遮放 +遮风避雨 +遮风挡雨 +遮盖 +遮光 +遮拦 +遮天蔽日 +遮天盖地 +遮羞 +遮羞布 +遮掩 +遮眼法 +遮阳 +遮阳板 +遮阳帽 +遮阳棚 +遮阳篷 +遮阳伞 +遮阳网 +遮荫 +遮荫蔽日 +遮障 +遮遮掩掩 +遮住 +折 +折半 +折尺 +折冲 +折床 +折纯 +折刀 +折叠 +折叠伞 +折叠椅 +折断 +折反跑 +折返 +折返点 +折返跑 +折服 +折光 +折桂 +折桂人 +折合 +折回 +折戟沉沙 +折价 +折旧 +折旧费 +折扣 +折扣方 +折扣价 +折扣率 +折扣票 +折款 +折磨 +折伞 +折扇 +折射 +折射角 +折射率 +折射线 +折身 +折寿 +折算 +折腾 +折头 +折纹 +折线 +折腰 +折椅 +折褶 +折中 +折衷 +折衷主义 +折子 +折子戏 +哲 +哲蚌寺 +哲布拉山 +哲理 +哲理性 +哲盟 +哲人 +哲思 +哲学 +哲学部 +哲学家 +哲学界 +哲学史 +哲学系 +哲言 +辄 +蛰 +蛰居 +谪 +谪守 +辙 +辙叉 +辙口 +者 +锗 +赭红 +赭黄色 +赭色 +赭石 +褶 +褶缝 +褶痕 +褶皱 +褶子 +这 +这般 +这笔 +这边 +这不 +这部 +这次 +这栋 +这儿 +这方 +这个 +这话 +这会儿 +这家 +这就是说 +这块 +这里 +这么 +这么点儿 +这么些 +这么样 +这年 +这时 +这时候 +这天 +这项 +这些 +这样 +这样一来 +这一来 +这一下 +这种 +柘城 +柘城县 +柘林 +柘树 +柘塘镇 +浙 +浙大 +浙电 +浙东 +浙赣 +浙沪 +浙江 +浙江村 +浙江队 +浙江省 +浙江省乡 +浙江团 +浙昆 +浙南 +浙西区 +浙中 +蔗 +蔗林 +蔗农 +蔗糖 +蔗渣 +鹧鸪 +鹧鸪菜 +贞操 +贞观 +贞节 +贞洁 +贞烈 +针 +针鼻 +针鼻儿 +针砭 +针砭时弊 +针刺 +针刺麻醉 +针打式 +针对 +针对性 +针法 +针纺 +针纺织品 +针锋相对 +针剂 +针尖 +针脚 +针灸 +针灸师 +针灸术 +针灸学 +针灸学会 +针孔 +针芒 +针棉织品 +针松 +针头 +针头线脑 +针线 +针线包 +针线活 +针线活儿 +针眼 +针鼹 +针叶 +针叶树 +针油剂 +针针 +针织 +针织布 +针织厂 +针织裤 +针织品 +针织物 +针状焦 +侦 +侦查 +侦查处 +侦查队 +侦查局 +侦查员 +侦查员制 +侦察 +侦察兵 +侦察机 +侦察连 +侦察排 +侦察员 +侦缉 +侦破 +侦破率 +侦破组 +侦探 +侦探片 +侦探小说 +珍 +珍爱 +珍宝 +珍宝岛 +珍宝馆 +珍本 +珍藏 +珍藏版 +珍藏卡 +珍藏品 +珍贵 +珍贵性 +珍罕 +珍品 +珍品展 +珍奇 +珍禽 +珍禽异兽 +珍摄 +珍视 +珍玩 +珍闻 +珍物 +珍惜 +珍稀 +珍异 +珍之惜之 +珍重 +珍珠 +珍珠贝 +珍珠城 +珍珠港 +珍珠鸡 +珍珠梅 +珍珠米 +珍珠球 +珍珠熊 +珍珠业 +珍珠圆 +珍珠镇 +桢楠树 +真 +真才实学 +真诚 +真诚以待 +真传 +真的 +真谛 +真鲷 +真儿 +真分式 +真分数 +真峰村 +真格 +真格的 +真个 +真功 +真果 +真话 +真货 +真迹 +真假 +真假难辨 +真经 +真菌 +真菌学 +真空 +真空泵 +真空管 +真理 +真理道 +真理观 +真理性 +真龙 +真率 +真面目 +真名 +真名实姓 +真皮 +真贫 +真品 +真凭实据 +真切 +真切感 +真情 +真情难觅 +真情实感 +真情实意 +真确 +真人 +真人真事 +真容 +真溶液 +真善美 +真身 +真实 +真实感 +真实化 +真实性 +真是 +真释 +真书 +真丝 +真丝绸 +真伪 +真味 +真相 +真相大白 +真相者 +真象 +真心 +真心诚意 +真心话 +真心实意 +真性 +真凶 +真言 +真意 +真影 +真真 +真真假假 +真真切切 +真真实实 +真正 +真知 +真知灼见 +真挚 +真珠 +真主 +真主党 +真抓实干 +砧 +砧板 +砧骨 +砧木 +砧子 +斟 +斟茶 +斟酒 +斟酌 +甄拔 +甄别 +榛鸡 +榛子 +箴言 +臻 +臻乎 +臻于 +诊 +诊病 +诊察 +诊察费 +诊断 +诊断法 +诊断费 +诊断室 +诊断书 +诊断仪 +诊法 +诊疗 +诊疗费 +诊疗所 +诊区 +诊室 +诊所 +诊治 +枕 +枕边 +枕边风 +枕戈待旦 +枕骨 +枕巾 +枕木 +枕畔 +枕上 +枕套 +枕头 +枕头顶 +枕头箱 +枕席 +枕心 +畛域 +疹子 +缜密 +阵 +阵地 +阵地化 +阵地战 +阵发性 +阵法 +阵风 +阵管营 +阵脚 +阵列 +阵前 +阵容 +阵式 +阵势 +阵痛 +阵痛期 +阵亡 +阵位 +阵线 +阵形 +阵型 +阵性 +阵营 +阵雨 +阵阵 +阵子 +鸩 +振 +振拔 +振臂一呼 +振荡 +振荡器 +振动 +振耳欲聋 +振奋 +振奋感 +振奋人心 +振幅 +振聋发聩 +振起 +振兴 +振兴路 +振兴期 +振兴史 +振兴图强 +振兴中华 +振业堂 +振振有词 +振振有辞 +振作 +赈济 +赈济金 +赈济款 +赈款 +赈灾 +赈灾款 +镇 +镇安县 +镇巴县 +镇北堡 +镇长 +镇尺 +镇定 +镇定剂 +镇定自若 +镇反 +镇公所 +镇宫 +镇国寺 +镇海 +镇海村 +镇海港 +镇海寺 +镇江 +镇江籍 +镇江市 +镇静 +镇静剂 +镇静药 +镇康县 +镇赉县 +镇里 +镇流器 +镇隆村 +镇宁 +镇平 +镇平县 +镇企 +镇区 +镇日 +镇容 +镇上 +镇守 +镇痛 +镇痛剂 +镇委 +镇委会 +镇星 +镇压 +镇原 +镇原县 +镇远县 +镇镇 +镇政府 +镇直 +镇纸 +镇住 +镇子 +镇子梁乡 +震 +震波 +震颤 +震旦纪 +震旦系 +震荡 +震动 +震动力 +震耳欲聋 +震感 +震害 +震撼 +震撼力 +震撼人心 +震后 +震毁 +震级 +震惊 +震怒 +震情 +震情室 +震区 +震慑 +震慑力 +震叹 +震天 +震天动地 +震天雷 +震源 +震灾 +震中 +震中区 +争 +争霸 +争霸赛 +争霸战 +争辩 +争长论短 +争吵 +争持 +争创 +争当 +争得 +争斗 +争端 +争夺 +争夺圈 +争夺战 +争夺者 +争芳斗妍 +争芳斗艳 +争分夺秒 +争风吃醋 +争功诿过 +争购 +争冠 +争光 +争辉 +争斤论两 +争金夺银 +争论 +争论不休 +争名夺利 +争名谋位 +争鸣 +争奇斗妍 +争奇斗艳 +争气 +争气机 +争强斗胜 +争抢 +争取 +争权 +争权夺利 +争胜 +争食 +争先 +争先创优 +争先恐后 +争鲜斗艳 +争相 +争雄 +争学 +争妍 +争妍斗丽 +争艳 +争议 +争战 +争执 +争执点 +争嘴 +争做 +征 +征鞍 +征兵 +征兵制 +征尘 +征程 +征答 +征得 +征地 +征地费 +征地款 +征调 +征丁 +征订 +征订期 +征伐 +征服 +征服力 +征服者 +征稿 +征购 +征购粮 +征管 +征管法 +征鸿 +征候 +征婚 +征婚者 +征稽 +征稽所 +征集 +征集表 +征集箱 +征集组 +征缴 +征缴率 +征粮 +征马 +征纳 +征南战北 +征聘 +征求 +征收 +征收局 +征收率 +征收月 +征税 +征税期 +征税人 +征讨 +征途 +征文 +征文稿 +征文栏 +征文组 +征象 +征询 +征询卡 +征议期 +征用 +征战 +征战史 +征召 +征兆 +怔 +怔忡 +怔住 +峥嵘 +峥嵘岁月 +挣 +挣断 +挣开 +挣脸 +挣钱 +挣脱 +挣扎 +挣扎状 +狰狞 +睁 +睁眼瞎子 +铮黑 +铮亮 +铮铮 +铮铮可闻 +铮铮如铁 +铮铮誓言 +铮铮铁骨 +筝 +蒸 +蒸饼 +蒸吨 +蒸发 +蒸发量 +蒸发器 +蒸锅 +蒸化 +蒸化机 +蒸饺 +蒸馏 +蒸馏水 +蒸笼 +蒸气 +蒸气机 +蒸气浴 +蒸汽 +蒸汽锤 +蒸汽费 +蒸汽化 +蒸汽机 +蒸汽轮机 +蒸汽型 +蒸食 +蒸腾 +蒸霞 +蒸蒸日上 +拯 +拯救 +整 +整鞍备马 +整版 +整备 +整备所 +整编 +整财 +整场 +整车 +整饬 +整饬一新 +整除 +整存 +整存整取 +整党 +整地 +整点 +整冻 +整队 +整顿 +整顿村 +整风 +整改 +整改率 +整个 +整个儿 +整合 +整合率 +整合式 +整合型 +整机 +整纪 +整建 +整洁 +整旧如新 +整军 +整理 +整理者 +整料 +整流 +整流器 +整年 +整年累月 +整齐 +整齐划一 +整取 +整人 +整日 +整容 +整容镜 +整饰 +整薯坑 +整数 +整数型 +整肃 +整套 +整体 +整体而言 +整体性 +整天 +整天价 +整险 +整形 +整修 +整训 +整夜 +整月 +整章 +整整 +整整齐齐 +整枝 +整纸 +整治 +整妆 +整装 +整装待发 +整组 +正 +正安 +正安县 +正班 +正版 +正版率 +正北 +正北街 +正本 +正本清源 +正本求源 +正比 +正比例 +正编 +正步 +正餐 +正册 +正茬 +正长石 +正常 +正常化 +正常率 +正常人 +正常性 +正常者 +正常值 +正处级 +正传 +正词法 +正大光明 +正旦 +正当 +正当防卫 +正当年 +正当时 +正道 +正点 +正点率 +正电 +正电荷 +正电子 +正殿 +正定 +正定县 +正定镇 +正多边形 +正多角形 +正儿八经 +正法 +正反 +正反方 +正反面 +正方 +正方体 +正方形 +正房 +正逢 +正负 +正副 +正副教授 +正副职 +正高 +正告 +正割 +正攻 +正规 +正规化 +正规军 +正规战 +正轨 +正果 +正酣 +正好 +正号 +正话 +正黄旗 +正极 +正己率下 +正价 +正间房 +正角儿 +正教 +正襟危坐 +正经 +正经八百 +正经事儿 +正剧 +正楷 +正科级 +正课 +正离子 +正理 +正梁 +正路 +正论 +正门 +正面 +正面人物 +正面图 +正名 +正牌 +正派 +正片 +正品 +正气 +正气歌 +正气凛然 +正前方 +正墙 +正桥 +正巧 +正切 +正确 +正确率 +正确性 +正人君子 +正如 +正三角形 +正色 +正色片 +正身 +正时 +正史 +正式 +正式工 +正式化 +正事 +正视 +正视图 +正是 +正手 +正手球 +正书 +正数 +正太 +正题 +正体 +正厅 +正厅级 +正统 +正统派 +正投影 +正途 +正文 +正屋 +正无限 +正午 +正误 +正误表 +正弦 +正线 +正向 +正邪 +正凶 +正秀 +正选 +正选赛 +正言厉色 +正盐 +正阳 +正阳县 +正要 +正业 +正仪镇 +正乙祠 +正义 +正义感 +正义路 +正义性 +正义者 +正义之举 +正音 +正月 +正月初二 +正月初七 +正月初十 +正月初五 +正月初一 +正月十七 +正月十三 +正月十四 +正月十五 +正在 +正正反反 +正直 +正直者 +正值 +正职 +正中 +正中下怀 +正中要害 +正字 +正字法 +正宗 +正座 +证 +证词 +证法 +证管 +证管办 +证婚 +证婚人 +证监 +证监会 +证监委 +证件 +证件费 +证件牌 +证交所 +证今 +证据 +证据法 +证据关 +证据力 +证明 +证明书 +证明信 +证券 +证券班 +证券部 +证券法 +证券化 +证券界 +证券局 +证券课 +证券类 +证券商 +证券委 +证券行 +证券业 +证人 +证人席 +证实 +证书 +证书费 +证物 +证言 +证章 +证照 +证照牌 +证者 +诤臣 +诤言 +诤友 +郑 +郑店街 +郑家坊 +郑家庄村 +郑南 +郑铁 +郑铁局 +郑油坊村 +郑重 +郑重其事 +郑州 +郑州省 +郑州市 +帧 +政 +政办 +政变 +政变案 +政柄 +政策 +政策部 +政策局 +政策史 +政策性 +政出多口 +政出多门 +政党 +政党法 +政德 +政敌 +政调会 +政调会长 +政发 +政法 +政法委 +政法系 +政风 +政府 +政府部门 +政府法 +政府奖 +政府军 +政府性 +政府学 +政复 +政纲 +政工 +政工部 +政工处 +政工师 +政工组 +政绩 +政绩表 +政绩观 +政纪 +政见 +政见者 +政教 +政教处 +政界 +政经 +政经分离 +政警 +政局 +政客 +政令 +政略 +政论 +政论家 +政派 +政企 +政企不分 +政情 +政区 +政权 +政权党 +政权机关 +政群 +政商 +政社 +政审 +政史系 +政事 +政书 +政坛 +政体 +政通 +政通人和 +政团 +政委 +政务 +政务官 +政务司 +政务院 +政协 +政协办 +政协会 +政研处 +政研室 +政要 +政苑 +政院 +政者 +政指 +政制 +政治 +政治部 +政治处 +政治犯 +政治化 +政治家 +政治界 +政治局 +政治科 +政治课 +政治篇 +政治权利 +政治史 +政治司 +政治委员 +政治系 +政治性 +政治学 +政治学家 +政治学所 +政治账 +政资 +症 +症候 +症瘕 +症结 +症状 +之 +之和 +之后 +之乎者也 +之际 +之间 +之江 +之类 +之内 +之前 +之上 +之所以 +之外 +之下 +之一 +之中 +支 +支边 +支部 +支槽 +支撑 +支撑点 +支撑力 +支撑轮 +支撑网 +支撑物 +支持 +支持率 +支持票 +支持人 +支持者 +支出 +支出单 +支词 +支点 +支店 +支队 +支队长 +支付 +支付方 +支付卡 +支付款 +支付日 +支付者 +支公司 +支护 +支会 +支技者 +支架 +支教 +支局 +支局长 +支离 +支离破碎 +支链 +支链反应 +支流 +支炉儿 +支路 +支脉 +支脉河 +支那 +支农 +支农办 +支派 +支配 +支配权 +支票 +支气管 +支气管炎 +支前 +支渠 +支取 +支取额 +支使 +支书 +支塘 +支团 +支委 +支委会 +支吾 +支吾其词 +支溪岙村 +支系 +支线 +支行 +支援 +支援法 +支援性 +支支吾吾 +支柱 +支柱性 +支子 +支座 +支座负筋 +卮 +汁 +汁液 +芝川镇 +芝罘区 +芝罘湾 +芝加哥 +芝兰 +芝麻 +芝麻秆 +芝麻官 +芝麻官儿 +芝麻酱 +芝麻糖 +芝麻油 +吱 +吱声 +吱呀 +吱吱 +吱吱悠悠 +吱吱喳喳 +枝 +枝杈 +枝城市 +枝繁果盛 +枝繁花多 +枝繁花茂 +枝繁叶茂 +枝干 +枝江市 +枝节 +枝柯 +枝蔓 +枝条 +枝头 +枝万段 +枝形 +枝丫 +枝桠 +枝叶 +枝枝 +枝枝节节 +枝枝蔓蔓 +枝枝叶叶 +枝子 +知 +知彼知己 +知不知道 +知春路 +知错 +知道 +知底 +知恩图报 +知法 +知法犯法 +知府 +知根知底 +知更鸟 +知工科 +知过必改 +知己 +知己者 +知己知彼 +知交 +知觉 +知冷知热 +知了 +知名 +知名度 +知名人士 +知名演员 +知母 +知难而进 +知难而上 +知难而退 +知青 +知情 +知情不举 +知情达理 +知情权 +知情人 +知情者 +知趣 +知人 +知人论世 +知人善任 +知人者 +知人之明 +知识 +知识点 +知识分子 +知识化 +知识界 +知识卷 +知识库 +知识类 +知识量 +知识面 +知识青年 +知识型 +知识性 +知识源 +知识者 +知事 +知天命 +知味馆 +知无不言 +知悉 +知县 +知详者 +知晓 +知心 +知心话 +知心人 +知音 +知音者 +知遇之恩 +知者 +知之甚少 +知州 +知足 +知足常乐 +织 +织补 +织补工 +织补业 +织布 +织布厂 +织布机 +织布鸟 +织成 +织带 +织机 +织金县 +织锦 +织锦缎 +织就 +织女 +织女星 +织品 +织梭 +织物 +织绣 +织造 +织造厂 +织制 +肢 +肢残人 +肢骨 +肢解 +肢势 +肢体 +栀 +栀角 +栀子 +脂 +脂肪 +脂肪醇 +脂肪酸 +脂肪型 +脂粉 +脂粉气 +脂粉味 +脂膏 +脂油 +蜘蛛 +蜘蛛抱蛋 +蜘蛛网 +执 +执拗 +执白 +执棒 +执笔 +执笔人 +执笔者 +执导 +执罚 +执罚队 +执法 +执法办 +执法必严 +执法不严 +执法车 +执法队 +执法犯法 +执法关 +执法权 +执法如山 +执法室 +执法者 +执飞 +执黑 +执红 +执壶 +执纪 +执教 +执结 +执警 +执迷 +执迷不悟 +执勤 +执勤点 +执勤者 +执收 +执委 +执委会 +执行 +执行部 +执行长 +执行官 +执行局 +执行率 +执行期 +执行人 +执行数 +执行庭 +执行者 +执行主席 +执业 +执业资格 +执意 +执掌 +执照 +执针者 +执政 +执政党 +执政府 +执政官 +执政权 +执政者 +执著 +侄 +侄儿 +侄儿女 +侄女 +侄女婿 +侄孙 +侄孙女 +侄孙女儿 +侄孙子 +侄外孙 +侄媳 +侄媳妇 +侄子 +直 +直白 +直板 +直板高手 +直奔 +直臂 +直拨 +直播 +直播室 +直布罗陀 +直颤 +直肠 +直肠癌 +直肠科 +直肠子 +直尺 +直翅目 +直传 +直传球 +直达 +直到 +直瞪瞪 +直盯盯 +直裰 +直方图 +直感 +直岗拉卡 +直根 +直供直销 +直贡呢 +直贡派 +直贡帖寺 +直勾勾 +直观 +直观性 +直管 +直管型 +直贯而下 +直航 +直话 +直角 +直角坐标 +直接 +直接肥料 +直接经验 +直接税 +直接推理 +直接选举 +直捷 +直截 +直截了当 +直井 +直径 +直觉 +直快 +直拉 +直来直去 +直愣愣 +直理 +直立 +直立茎 +直立人 +直隶 +直隶省 +直链 +直溜 +直溜溜 +直流 +直流电 +直露 +直露无余 +直路 +直率 +直略河 +直罗镇 +直落 +直面 +直面性 +直拍 +直排式 +直喷式 +直前 +直情径行 +直燃型 +直上云霄 +直射 +直升 +直升飞机 +直升机 +直升机场 +直驶 +直视 +直抒己见 +直抒胸臆 +直爽 +直说 +直体 +直挺挺 +直通 +直通车 +直通率 +直通式 +直统统 +直系 +直系亲属 +直辖 +直辖市 +直线 +直线式 +直线型 +直销 +直销点 +直销式 +直销员 +直行 +直性子 +直选 +直言 +直言不讳 +直言进谏 +直译 +直音 +直音法 +直镇 +直直 +直指 +直至 +直属 +直属处 +直属机关 +值 +值班 +值班长 +值班室 +值班员 +值不值得 +值长 +值得 +值得一提 +值机 +值机台 +值机员 +值钱 +值勤 +值勤点 +值勤警 +值日 +值日表 +值日牌 +值日生 +值守 +值域 +职 +职便 +职别 +职称 +职大 +职代会 +职分 +职高 +职工 +职工部 +职工股 +职官 +职级 +职教 +职教社 +职教组 +职介 +职介所 +职介网 +职名 +职能 +职能性 +职权 +职权责 +职守 +职数 +职位 +职务 +职务工资 +职系 +职衔 +职校 +职业 +职业病 +职业部 +职业道德 +职业队 +职业高中 +职业化 +职业者 +职业制 +职业中学 +职业装 +职员 +职员会 +职责 +职掌 +职中 +职专 +植 +植保 +植保站 +植被 +植根 +植检证 +植胶 +植胶国 +植绿护绿 +植棉 +植皮术 +植入 +植入数 +植树 +植树节 +植树权 +植树日 +植树造林 +植物 +植物群落 +植物人 +植物所 +植物纤维 +植物学 +植物油 +植物园 +植株 +殖 +殖民 +殖民地 +殖民地化 +殖民权 +殖民者 +殖民主义 +摭闻 +踯躅 +止 +止步 +止步不前 +止跌 +止降 +止境 +止渴 +止蚀 +止疼除痹 +止痛 +止痛片 +止痛药 +止痛针 +止推阀 +止息 +止血 +止血带 +止痒 +止住 +只 +只不过 +只得 +只读 +只顾 +只管 +只好 +只见 +只乐乡 +只鳞片爪 +只能 +只怕 +只求 +只身 +只身一人 +只是 +只说不做 +只限 +只言片语 +只要 +只用 +只有 +只争朝夕 +只知其然 +只只 +只字 +只字不提 +只字未提 +旨 +旨趣 +旨意 +旨在 +址 +纸 +纸板 +纸板箱 +纸版 +纸包 +纸杯 +纸本 +纸币 +纸箔 +纸厂 +纸船 +纸带 +纸袋 +纸房乡 +纸工 +纸盒 +纸鹤 +纸花 +纸笺 +纸浆 +纸卡 +纸壳箱 +纸口袋 +纸老虎 +纸龙舞 +纸篓 +纸马 +纸马轿 +纸煤儿 +纸面 +纸捻 +纸尿裤 +纸牌 +纸片 +纸票 +纸品 +纸钱 +纸人 +纸伞 +纸上谈兵 +纸条 +纸筒 +纸箱 +纸箱厂 +纸屑 +纸型 +纸烟 +纸业 +纸页 +纸鸢 +纸张 +纸制 +纸制品 +纸质 +纸醉金迷 +芷江 +祉 +咫步之遥 +咫尺 +咫尺之遥 +指 +指标 +指标性 +指不定 +指出 +指代 +指导 +指导价 +指导奖 +指导科 +指导权 +指导线 +指导性 +指导员 +指导制 +指导组 +指点 +指点迷津 +指定 +指定权 +指东说西 +指端 +指法 +指缝 +指腹为婚 +指骨 +指关节 +指环 +指挥 +指挥棒 +指挥部 +指挥舱 +指挥长 +指挥车 +指挥船 +指挥刀 +指挥官 +指挥家 +指挥科 +指挥连 +指挥权 +指挥若定 +指挥室 +指挥所 +指挥塔 +指挥台 +指挥系 +指挥仪 +指挥员 +指挥者 +指挥组 +指鸡骂狗 +指甲 +指甲盖 +指甲盖儿 +指甲花 +指甲钳 +指甲心儿 +指尖 +指教 +指靠 +指控 +指令 +指令长 +指令性 +指鹿为马 +指路 +指路标 +指路卡 +指名 +指名道姓 +指明 +指南 +指南车 +指南针 +指派 +指认 +指日可待 +指桑骂槐 +指使 +指示 +指示灯 +指示剂 +指示牌 +指示器 +指示信 +指示植物 +指事 +指手画脚 +指数 +指数表 +指数函数 +指数性 +指数值 +指数制 +指头 +指望 +指纹 +指纹图 +指向 +指引 +指印 +指责 +指摘 +指战员 +指针 +指正 +指指 +指指戳戳 +指指点点 +枳机草 +枳壳 +枳实 +趾 +趾高气扬 +趾骨 +趾甲 +趾头 +酯 +至 +至宝 +至诚 +至诚至爱 +至此 +至多 +至高无上 +至关紧要 +至关重要 +至好 +至极 +至交 +至今 +至境 +至乐 +至理名言 +至理明言 +至亲 +至亲好友 +至亲至爱 +至情至性 +至善至真 +至上 +至少 +至死不悟 +至死不渝 +至为 +至矣尚矣 +至友 +至于 +至尊 +志 +志哀 +志存高远 +志大才疏 +志丹 +志丹县 +志得意满 +志峰队 +志怪书 +志贺 +志节 +志利 +志留纪 +志留系 +志气 +志庆 +志趣 +志如磐石 +志士 +志士仁人 +志书 +志同道合 +志向 +志愿 +志愿兵 +志愿兵制 +志愿队 +志愿军 +志愿书 +志愿团 +志愿者 +志在 +志在必得 +志在千里 +制 +制版 +制备 +制表 +制表符 +制冰机 +制裁 +制裁法 +制茶 +制成 +制成品 +制导 +制订 +制定 +制定者 +制动 +制动器 +制毒 +制度 +制度法 +制度化 +制度性 +制发 +制法 +制贩 +制伏 +制服 +制服呢 +制高点 +制诰 +制革 +制革厂 +制海权 +制衡 +制衡性 +制黄 +制剂 +制假 +制假术 +制假者 +制件 +制酒厂 +制空权 +制冷 +制冷档 +制冷机 +制冷剂 +制冷量 +制帽 +制霉菌素 +制呢厂 +制皮厂 +制片 +制片厂 +制片人 +制片商 +制片业 +制品 +制品厂 +制取 +制胜 +制胜之道 +制式 +制售 +制售者 +制锁业 +制糖术 +制糖业 +制图 +制鞋厂 +制鞋业 +制盐 +制盐厂 +制盐业 +制药 +制药厂 +制药队 +制药业 +制衣 +制衣厂 +制宜 +制艺 +制约 +制约力 +制约型 +制约性 +制皂厂 +制造 +制造部 +制造厂 +制造地 +制造费 +制造家 +制造商 +制造业 +制造业界 +制造者 +制止 +制种 +制作 +制作厂 +制作费 +制作人 +制作商 +制作业 +制作者 +制做 +帜 +治 +治安 +治安费 +治安股 +治安警 +治安科 +治安室 +治安员 +治保 +治保会 +治本 +治标 +治病 +治病救人 +治党 +治法 +治国 +治国安邦 +治国安民 +治国篇 +治国者 +治荒 +治蝗 +治家 +治监 +治检 +治教 +治警 +治军 +治理 +治理面 +治理区 +治吏 +治疗 +治疗法 +治疗费 +治疗室 +治疗学 +治疗仪 +治劣 +治林 +治乱 +治乱减负 +治盲 +治贫 +治穷 +治权 +治散治滥 +治丧 +治沙 +治沙办 +治沙站 +治奢兴俭 +治水 +治水改土 +治税 +治瘫 +治体 +治外法权 +治危策 +治污 +治校 +治学 +治印 +治愚 +治愈 +治愈率 +治则 +治政 +治治 +治装 +治罪 +炙手可热 +质 +质保 +质保书 +质变 +质材 +质次价高 +质地 +质点 +质感 +质感性 +质高量足 +质管 +质管员 +质监 +质监站 +质检 +质检权 +质检站 +质控 +质量 +质量法 +质量关 +质量奖 +质量卡 +质量课 +质量日 +质量上乘 +质量数 +质量型 +质量学 +质量战 +质料 +质劣 +质能 +质朴 +质朴无华 +质轻 +质权 +质数 +质问 +质问声 +质协 +质询 +质押 +质押人 +质言之 +质疑 +质因数 +质优价廉 +质优量足 +质证 +质子 +质子—M +峙 +栉比鳞次 +栉风沐雨 +栉孔 +挚 +挚爱 +挚诚 +挚情 +挚友 +挚挚 +桎梏 +秩 +秩序 +秩序井然 +秩序性 +致 +致哀 +致癌 +致癌物 +致病 +致病菌 +致残 +致残性 +致词 +致辞 +致电 +致富 +致富机 +致富路 +致富梦 +致富线 +致富星 +致富型 +致公党 +致函 +致贺 +致幻剂 +致畸 +致敬 +致冷器 +致力 +致密 +致命 +致命伤 +致贫 +致歉 +致使 +致死 +致死率 +致谢 +致谢函 +致信 +致以 +致意 +致引起 +掷 +掷杯 +掷弹筒 +掷地有声 +痔 +痔疮 +痔漏 +痔瘘 +窒息 +鸷鸟 +智 +智残 +智残人 +智残者 +智齿 +智斗 +智多星 +智慧 +智慧型 +智力 +智力库 +智力型 +智利 +智利队 +智利硝石 +智略 +智敏 +智谋 +智谋超人 +智囊 +智囊团 +智能 +智能化 +智能机 +智能卡 +智能型 +智取 +智人 +智三针 +智商 +智胜 +智术 +智牙 +智业 +智勇 +智勇双全 +智育 +智圆行方 +智者 +智者见智 +滞 +滞拨 +滞弹性 +滞洪办 +滞后 +滞后期 +滞后性 +滞缓 +滞留 +滞纳 +滞纳金 +滞期 +滞期费 +滞销 +滞销房 +滞销品 +滞胀 +滞重 +痣 +痣点 +稚嫩 +稚气 +稚气可掬 +稚气未脱 +稚童 +稚拙 +稚拙性 +稚子 +置 +置办 +置备 +置地 +置放 +置换 +置评 +置若罔闻 +置身 +置身世外 +置身事外 +置信 +置信度 +置业 +置疑 +置于 +置于脑后 +置之不顾 +置之不理 +置之度外 +置之脑后 +置诸高阁 +置装费 +雉 +雉鸠 +踬 +中 +中凹型 +中巴 +中巴车 +中班 +中办 +中饱私囊 +中保 +中堡村 +中堡岛 +中报 +中北部 +中北路 +中北区 +中北镇 +中编办 +中标 +中标方 +中标率 +中标人 +中标者 +中表 +中波 +中部 +中部委 +中埠 +中餐 +中餐馆 +中残联 +中草药 +中草药材 +中草药剂 +中册 +中策 +中层 +中产 +中产阶层 +中产阶级 +中长 +中长传 +中长距离 +中长跑 +中长篇 +中长期 +中长途 +中长线 +中常会 +中常委 +中厂乡 +中场 +中唱 +中车 +中成药 +中承拱 +中程 +中厨 +中川乡 +中词 +中村梁子 +中大 +中弹 +中档 +中导 +中到大雪 +中到大雨 +中道 +中稻 +中等 +中等级 +中等教育 +中低 +中低产 +中低产田 +中低档 +中低收入 +中点 +中点值 +中甸县 +中东 +中东部 +中东非 +中东欧 +中东社 +中毒 +中毒案 +中毒者 +中度 +中短 +中短波 +中短传 +中短篇 +中短期 +中短线 +中段 +中段水 +中断 +中断点 +中队 +中队部 +中队长 +中吨位 +中耳 +中耳炎 +中发 +中幡 +中饭 +中方 +中纺 +中放 +中非 +中风 +中峰 +中锋 +中缝 +中伏 +中服 +中腹 +中腹之战 +中高 +中高档 +中高级 +中高考 +中革军委 +中隔墩 +中耕 +中工 +中共 +中共中央 +中古 +中古史 +中顾委 +中关村 +中关工委 +中关园 +中观 +中国 +中国部 +中国队 +中国馆 +中国海 +中国化 +中国画 +中国画界 +中国画理 +中国画系 +中国话 +中国货 +中国籍 +中国科 +中国流 +中国情 +中国区 +中国热 +中国人 +中国史 +中国式 +中国娃 +中国银行 +中国字 +中果皮 +中寒武世 +中韩镇 +中航 +中航技 +中号 +中和 +中和西乡 +中和乡 +中河 +中核 +中核总 +中后场 +中后期 +中户 +中花脸 +中华 +中华草龟 +中华龟 +中华街 +中华路 +中华门 +中华民国 +中华民族 +中环 +中环线 +中黄 +中级 +中纪委 +中技 +中技校 +中际 +中继 +中继线 +中继站 +中继者 +中坚 +中坚层 +中间 +中间派 +中间人 +中间商 +中间体 +中间轴 +中监委 +中检 +中建 +中建协 +中江村 +中江县 +中将 +中奖 +中奖人 +中焦 +中教 +中街 +中介 +中介费 +中介人 +中介商 +中界点 +中界岭 +中金 +中经网 +中经信 +中景 +中举 +中军 +中卡 +中看 +中考 +中科 +中科健A +中科研 +中科院 +中客 +中肯 +中空 +中空化 +中控室 +中栏 +中郎将 +中老年 +中老年人 +中立 +中立党 +中立国 +中立性 +中立主义 +中莲花村 +中联部 +中辽 +中龄林 +中流 +中流砥柱 +中路 +中路梆子 +中旅 +中铝 +中论 +中幔 +中煤 +中美洲 +中密 +中免 +中牟县 +中拇指 +中南 +中南部 +中南海 +中南局 +中南美 +中南欧 +中南区 +中脑 +中年 +中年级 +中年人 +中宁县 +中农 +中农信 +中欧 +中排 +中盘 +中篇 +中篇卷 +中篇小说 +中频 +中铺 +中期 +中旗 +中气 +中汽 +中签号 +中签率 +中签者 +中前 +中前场 +中腔 +中侨 +中侨委 +中青 +中青班 +中青旅 +中青年 +中秋 +中秋节 +中人 +中三家镇 +中散 +中色 +中沙镇 +中山 +中山大学 +中山东路 +中山服 +中山郎 +中山狼 +中山陵 +中山陵园 +中山路 +中山门 +中山区 +中山市 +中山堂 +中山亭 +中山王 +中山站 +中山装 +中伤 +中伤式 +中上 +中上层 +中上游 +中少社 +中生代 +中省直 +中师 +中师生 +中石 +中石化 +中食协 +中士 +中世纪 +中式 +中式盐 +中试 +中试部 +中试厂 +中兽医 +中书令 +中书舍人 +中枢 +中枢神经 +中暑 +中泗河村 +中速 +中台办 +中碳钢 +中堂 +中塘镇 +中提琴 +中体西用 +中条山 +中铁建 +中听 +中童 +中童装 +中统 +中途 +中外 +中外比 +中外船 +中外代 +中外方 +中外古今 +中外航 +中外合资 +中外文 +中外运 +中晚 +中晚餐 +中晚唐 +中微子 +中纬度 +中委 +中卫 +中卫县 +中尉 +中文 +中文版 +中文机 +中文名 +中文台 +中文系 +中午 +中西 +中西北部 +中西部 +中西餐 +中西方 +中西亚 +中西药 +中西药业 +中西医 +中西医界 +中戏 +中下 +中下层 +中下等 +中下旬 +中下游 +中线 +中消 +中小 +中小城 +中小城市 +中小企业 +中小型 +中小学 +中小学生 +中小学校 +中小银行 +中小幼 +中小站 +中校 +中心 +中心词 +中心村 +中心段 +中心会 +中心角 +中心局 +中心论 +中心区 +中心社 +中心思想 +中心县 +中心线 +中心校 +中心语 +中心站 +中心庄村 +中心组 +中欣队 +中信 +中信队 +中兴 +中行 +中型 +中型机 +中性 +中性点 +中性盐 +中休 +中宣 +中宣部 +中选 +中学 +中学部 +中学生 +中学组 +中雪 +中旬 +中压 +中亚 +中研部 +中研院 +中央 +中央邦 +中央级 +中央集权 +中央局 +中央军委 +中央门 +中央区 +中央税 +中央台 +中央厅 +中央委员 +中央文件 +中央政府 +中阳 +中阳县 +中药 +中药材 +中药店 +中药房 +中药费 +中药界 +中药师 +中药味 +中药学 +中叶 +中医 +中医大 +中医界 +中医科 +中医师 +中医系 +中医学 +中医药 +中医药界 +中医药局 +中医药学 +中医院 +中译本 +中意 +中音 +中银 +中英街 +中英文 +中营 +中影 +中庸 +中庸之道 +中用 +中油 +中游 +中右 +中雨 +中原 +中原区 +中猿乐町 +中远 +中远景 +中远期 +中远途 +中院 +中岳 +中云 +中灶 +中政委 +中直 +中直机关 +中止 +中止点 +中指 +中趾 +中至大雨 +中质 +中质协 +中质油 +中置同轴 +中重型 +中州 +中州韵 +中轴线 +中猪 +中渚 +中专 +中专班 +中专处 +中专生 +中转 +中转地 +中转港 +中转库 +中转站 +中庄乡 +中装 +中缀 +中准价 +中咨 +中资 +中资企业 +中子 +中子弹 +中子流 +中子谱 +中子态 +中子星 +中组部 +中左 +伀法 +忠 +忠臣 +忠诚 +忠诚度 +忠诚感 +忠告 +忠骨 +忠厚 +忠厚老实 +忠魂 +忠奸分明 +忠良 +忠清南道 +忠实 +忠实笃行 +忠顺 +忠县 +忠心 +忠心耿耿 +忠言 +忠言逆耳 +忠义 +忠于 +忠贞 +忠贞不二 +忠贞不屈 +忠贞不渝 +忠贞感 +终 +终场 +终吹点 +终点 +终点站 +终端 +终端点 +终端机 +终端区 +终端台 +终古不息 +终归 +终极 +终将 +终结 +终结点 +终结符 +终结者 +终竟 +终究 +终久 +终局 +终决权 +终了 +终末 +终南 +终南山 +终年 +终盘 +终评 +终日 +终身 +终身伴侣 +终身大事 +终身性 +终身制 +终审 +终审权 +终审制 +终生 +终生不愈 +终市 +终霜 +终天 +终线 +终于 +终止 +盅 +盅子 +钟 +钟爱 +钟摆 +钟表 +钟厂 +钟锤 +钟点 +钟点儿 +钟点工 +钟鼎 +钟鼎文 +钟鼓 +钟鼓楼 +钟佳桥 +钟馗 +钟灵毓秀 +钟楼 +钟楼杯 +钟面 +钟鸣鼎食 +钟琴 +钟情 +钟磬 +钟乳石 +钟山 +钟声 +钟塔 +钟体 +钟亭 +钟头 +钟祥 +钟祥市 +钟秀 +钟意 +衷爱 +衷肠 +衷情 +衷曲 +衷心 +肿 +肿大 +肿骨鹿 +肿块 +肿瘤 +肿瘤科 +肿瘤性 +肿瘤学 +肿瘤学家 +肿物 +肿胀 +种 +种别 +种菜 +种草 +种闯田 +种蛋 +种地 +种地人 +种豆得豆 +种法 +种鸽 +种鸽场 +种瓜得瓜 +种龟 +种果 +种花 +种鸡 +种鸡场 +种类 +种粮 +种粮区 +种粮食 +种麻 +种棉 +种棉节 +种苗 +种鸟 +种牛 +种牛场 +种禽 +种禽站 +种群 +种仁 +种树 +种数 +种田 +种兔 +种兔场 +种蝎 +种蝎场 +种姓 +种畜 +种畜场 +种羊 +种羊场 +种养 +种养加 +种养业 +种养殖 +种养殖业 +种业 +种衣剂 +种源 +种崽 +种站 +种植 +种植户 +种植圃 +种植区 +种植热 +种植史 +种植业 +种植业史 +种植园 +种植园主 +种质 +种质型 +种种 +种猪 +种猪场 +种子 +种子袋 +种子地 +种子队 +种子公司 +种子核 +种子粮 +种子赛 +种子田 +种子选手 +种子站 +种族 +种族歧视 +种族主义 +冢 +踵至 +仲 +仲裁 +仲裁案 +仲裁法 +仲裁费 +仲裁权 +仲裁庭 +仲裁委 +仲裁业 +仲裁员 +仲春 +仲冬 +仲家 +仲秋 +仲夏 +众 +众参 +众长凝一 +众朝官 +众多 +众寡悬殊 +众将 +众口 +众口交赞 +众口难调 +众口一词 +众口一辞 +众口一声 +众目睽睽 +众目昭著 +众鸟蔽日 +众怒 +众怒难犯 +众叛亲离 +众鹊登枝 +众人 +众生 +众生百态 +众生相 +众声 +众矢之的 +众说不一 +众说纷纭 +众所共识 +众所周知 +众望 +众望所归 +众乡亲 +众星拱月 +众星捧月 +众学生 +众议长 +众议员 +众议院 +众院 +众志成城 +重 +重安江 +重百 +重版 +重版本 +重版率 +重办 +重瓣胃 +重磅 +重笔 +重臂 +重兵 +重病 +重病缠身 +重病号 +重播 +重彩 +重残人 +重操旧业 +重茬 +重唱 +重臣 +重创 +重槌 +重大 +重担 +重蹈 +重蹈覆辙 +重地 +重点 +重点村 +重点定位 +重点户 +重点课 +重点论 +重点校 +重点性 +重叠 +重读 +重度 +重罚 +重返 +重犯 +重犯者 +重访 +重逢 +重负 +重复 +重复话 +重复性 +重富欺贫 +重钙 +重感冒 +重钢 +重工 +重工业 +重工业部 +重构 +重归于好 +重旱 +重合 +重荷 +重化工 +重焕生机 +重回 +重婚 +重婚案 +重婚罪 +重活 +重机 +重机关枪 +重机枪 +重价 +重见天日 +重建 +重建论 +重剑 +重奖 +重教 +重金 +重金属 +重晶石 +重开 +重离子 +重力 +重力坝 +重力场 +重力仪 +重利 +重量 +重量级 +重峦叠嶂 +重码率 +重棉 +重男轻女 +重排 +重炮 +重起炉灶 +重氢 +重庆 +重庆城 +重庆路 +重庆市 +重庆团 +重丘区 +重拳 +重任 +重任在肩 +重如泰山 +重伤 +重伤员 +重伤者 +重赏 +重申 +重生父母 +重石 +重视 +重手 +重述 +重水 +重水堆型 +重税 +重塑 +重孙 +重孙女 +重特大 +重特大案 +重提 +重听 +重头 +重头戏 +重头之作 +重托 +重外孙女 +重围 +重温 +重温旧梦 +重武器 +重物 +重现 +重箱 +重霄 +重孝 +重写 +重心 +重新 +重刑犯 +重型 +重修 +重续 +重压 +重言 +重檐 +重演 +重阳 +重阳节 +重洋 +重样 +重要 +重要性 +重义轻利 +重音 +重印 +重印率 +重用 +重油 +重于泰山 +重元素 +重灾 +重灾户 +重灾区 +重灾县 +重载 +重载化 +重在 +重债国 +重者 +重振 +重振旗鼓 +重镇 +重整 +重整旗鼓 +重症 +重中之重 +重重 +重重的 +重重地 +重重叠叠 +重字 +重足而立 +重组 +重组型 +重祖父 +重罪 +州 +州长 +州城 +州督 +州府 +州界 +州里 +州立 +州民 +州牧 +州区 +州人 +州试 +州委 +州选 +州政府 +州直 +舟 +舟车 +舟楫 +舟楫如梭 +舟桥 +舟桥团 +舟曲县 +舟山 +舟山市 +舟子 +诌 +周 +周报 +周报制 +周边 +周波 +周长 +周朝 +周城 +周城镇 +周初 +周村区 +周村镇 +周代 +周到 +周恩来 +周而复始 +周二 +周官 +周记 +周际 +周济 +周家沟 +周刊 +周刊社 +周口 +周口店 +周口市 +周礼 +周邻 +周六 +周率 +周密 +周末 +周末版 +周末游 +周年 +周期 +周期表 +周期律 +周期性 +周秦汉唐 +周全 +周日 +周三 +周身 +周水子 +周四 +周岁 +周天 +周围 +周围神经 +周五 +周武王 +周详 +周薪 +周旋 +周一 +周游 +周缘 +周遭 +周折 +周正 +周至 +周致 +周转 +周转额 +周转房 +周转金 +周转粮 +周转量 +周转率 +周转期 +周转性 +周庄 +周庄镇 +洲 +洲堤 +洲际 +洲际导弹 +洲际性 +洲界 +洲镇 +粥 +粥样 +妯娌 +轴 +轴衬 +轴承 +轴承厂 +轴对称 +轴径 +轴套 +轴瓦 +轴线 +轴箱 +轴心 +轴重 +轴子 +肘 +肘部 +肘关节 +肘窝 +肘子 +帚 +纣棍 +咒 +咒骂 +咒语 +绉布 +绉纱 +昼 +昼长夜短 +昼间 +昼夜 +荮 +皱 +皱巴巴 +皱痕 +皱眉 +皱纹 +皱缬 +皱褶 +皱皱巴巴 +骤 +骤变 +骤减 +骤降 +骤起 +骤然 +骤雨 +骤增 +朱 +朱比洛队 +朱笔 +朱膘色 +朱德 +朱顶 +朱顶雀 +朱墩村 +朱古力 +朱红 +朱鹮 +朱槿 +朱坑乡 +朱刘镇 +朱门 +朱明 +朱墨 +朱鸟 +朱批 +朱漆 +朱桥村 +朱桥镇 +朱雀 +朱色 +朱砂 +朱砂梅 +朱书 +朱文 +朱仙庄 +朱印 +朱寨村 +朱寨镇 +朱张桥 +朱中镇 +朱柱 +朱庄 +朱庄乡 +侏罗纪 +侏罗世 +侏罗系 +侏儒 +茱萸 +株 +株距 +株连 +株连九族 +株式会社 +株数 +株系 +株州 +株洲 +株洲市 +株洲县 +株株 +珠 +珠宝 +珠宝商 +珠贝 +珠唇 +珠翠 +珠岛 +珠东乡 +珠儿 +珠峰 +珠光宝气 +珠光灯 +珠海 +珠海市 +珠环 +珠玑 +珠江 +珠江口 +珠兰 +珠泪盈眶 +珠帘 +珠联璧合 +珠穆朗玛 +珠琴 +珠三角 +珠算 +珠圆玉润 +珠子 +诸 +诸城 +诸城市 +诸端 +诸多不便 +诸葛村 +诸葛亮 +诸葛亮会 +诸宫调 +诸国 +诸侯 +诸侯国 +诸侯王 +诸暨 +诸暨市 +诸君 +诸旅 +诸强 +诸亲好友 +诸如 +诸如此类 +诸事 +诸事缠身 +诸体 +诸位 +诸子 +猪 +猪草 +猪草机 +猪场 +猪儿 +猪粪 +猪粪肥 +猪肝 +猪肝脏 +猪革 +猪倌 +猪栏 +猪苓 +猪笼草 +猪猡 +猪苗 +猪年 +猪牛羊肉 +猪排 +猪皮 +猪婆龙 +猪圈 +猪肉 +猪舍 +猪食 +猪手 +猪蹄 +猪体 +猪头肉 +猪娃 +猪瘟 +猪羊肉 +猪油 +猪油果 +猪崽 +猪爪 +猪仔 +猪鬃 +猪鬃草 +铢 +蛛丝马迹 +蛛网 +蛛蛛 +竹 +竹板书 +竹报平安 +竹编 +竹帛 +竹布 +竹材 +竹岛 +竹凳 +竹笛 +竹雕 +竹筏 +竹竿 +竹根 +竹管 +竹黄 +竹簧 +竹鸡 +竹简 +竹浆 +竹节 +竹节虫 +竹节石 +竹刻 +竹筐 +竹篮 +竹笠 +竹帘 +竹帘画 +竹凉席 +竹林 +竹林镇 +竹笼 +竹楼 +竹篓 +竹轮 +竹马 +竹帽 +竹篾 +竹木 +竹排 +竹片 +竹岐 +竹歧 +竹器 +竹签 +竹桥 +竹茹 +竹山县 +竹事 +竹书纪年 +竹丝 +竹笋 +竹筒 +竹瓦镇 +竹屋 +竹溪 +竹溪县 +竹席 +竹乡 +竹箱 +竹箫 +竹阳村 +竹业 +竹叶 +竹叶青 +竹椅 +竹艺 +竹芋 +竹园 +竹园村 +竹园镇 +竹韵 +竹枝 +竹枝词 +竹纸 +竹制 +竹制品 +竹种园 +竹子 +烛 +烛光 +烛花 +烛火 +烛泪 +烛台 +烛形灯 +烛影 +烛照 +逐 +逐案 +逐笔 +逐步 +逐层 +逐厂 +逐出 +逐次 +逐村 +逐村逐户 +逐个 +逐户 +逐级 +逐渐 +逐句 +逐客令 +逐块 +逐辆 +逐鹿 +逐年 +逐人 +逐人逐户 +逐日 +逐日者 +逐条 +逐项 +逐一 +逐月 +逐字 +逐字逐句 +主 +主坝 +主板 +主办 +主办方 +主办国 +主办权 +主办人 +主办员 +主办者 +主报 +主碑 +主笔 +主编 +主表 +主材 +主裁 +主裁判 +主菜 +主槽 +主产 +主产区 +主产省 +主产县 +主场 +主场地 +主潮 +主城区 +主程序 +主持 +主持国 +主持人 +主持台 +主持者 +主厨 +主创 +主创者 +主词 +主次 +主从 +主存 +主存储器 +主打 +主单位 +主刀 +主导 +主导论 +主导权 +主导型 +主导性 +主道 +主典 +主殿 +主调 +主动 +主动脉 +主动脉弓 +主动权 +主动型 +主动性 +主队 +主儿 +主发射机 +主罚 +主犯 +主峰 +主辅修制 +主妇 +主副食 +主副食品 +主副业 +主干 +主干道 +主干路 +主干渠 +主干网 +主干线 +主干性 +主钢缆 +主格 +主格调 +主根 +主公 +主攻 +主攻点 +主攻手 +主供台 +主顾 +主观 +主观性 +主观臆断 +主观主义 +主官 +主棺 +主管 +主管道 +主管局 +主光轴 +主航道 +主河道 +主会场 +主婚 +主婚人 +主火场 +主机 +主机厂 +主机房 +主见 +主江堤 +主将 +主讲 +主讲人 +主讲者 +主焦点 +主焦煤 +主角 +主角奖 +主叫 +主叫方 +主教 +主教练 +主教堂 +主教团 +主景 +主句 +主刊 +主考 +主考官 +主科 +主客场 +主客场制 +主客观 +主课 +主控 +主跨 +主理 +主力 +主力舰 +主力军 +主粮 +主流 +主流程 +主流派 +主楼 +主麻日 +主谋 +主谋者 +主脑 +主跑道 +主频 +主仆 +主桥 +主桥墩 +主渠道 +主权 +主权国 +主权者 +主人 +主人公 +主人家 +主人翁 +主任 +主任室 +主任委员 +主任医师 +主赛场 +主设备 +主设计者 +主食 +主食品 +主使 +主视图 +主枢纽 +主帅 +主隧 +主台 +主谈手 +主题 +主题词 +主题歌 +主题曲 +主题团会 +主题性 +主体 +主体观 +主体化 +主体论 +主体性 +主厅 +主通道 +主委 +主文 +主席 +主席国 +主席会 +主席令 +主席台 +主席团 +主线 +主项 +主销区 +主心 +主心骨 +主心骨儿 +主星 +主刑 +主凶 +主修 +主旋律 +主汛期 +主研人 +主演 +主要 +主要方 +主要矛盾 +主业 +主页 +主义 +主义者 +主意 +主因 +主音 +主饮 +主营 +主营业务 +主语 +主园区 +主宰 +主宰者 +主战场 +主张 +主张者 +主震 +主政 +主枝 +主旨 +主旨性 +主治 +主治医生 +主治医师 +主轴 +主著 +主抓 +主子 +主罪 +拄 +拄杖 +拄杖者 +属 +属地 +属国 +属吏 +属区 +属实 +属下 +属相 +属性 +属于 +属员 +煮 +煮豆燃萁 +煮饭 +煮沸 +煮鹤焚琴 +嘱 +嘱咐 +嘱事 +嘱托 +瞩目 +瞩望 +伫 +伫立 +伫望 +住 +住持 +住处 +住地 +住店 +住读 +住读生 +住房 +住房部 +住房款 +住房率 +住房梦 +住房性 +住户 +住家 +住居 +住满 +住区 +住舍 +住室 +住手 +住宿 +住宿部 +住宿费 +住宿楼 +住所 +住校 +住校生 +住院 +住院部 +住院处 +住院费 +住院楼 +住院日 +住宅 +住宅点 +住宅房 +住宅局 +住宅楼 +住宅区 +住宅业 +住址 +助 +助残 +助残日 +助残椅 +助产 +助产师 +助产士 +助长 +助词 +助动词 +助耕 +助耕队 +助工 +助攻 +助攻王 +助攻型 +助剂 +助建 +助教 +助困 +助困生 +助老 +助理 +助理级 +助理员 +助力 +助力泵 +助力车 +助民 +助跑 +助跑道 +助贫 +助燃 +助人 +助人为乐 +助审员 +助视器 +助手 +助跳道 +助听器 +助推器 +助威 +助威声 +助消化 +助兴 +助学 +助学班 +助学岗 +助学金 +助学情 +助养金 +助益 +助战 +助阵 +助正 +助纣为虐 +苎麻 +注 +注册 +注册处 +注册地 +注册费 +注册名 +注册人 +注册税 +注册厅 +注册证 +注定 +注脚 +注解 +注明 +注目 +注目礼 +注入 +注入式 +注射 +注射法 +注射费 +注射器 +注射液 +注视 +注释 +注疏 +注水 +注塑 +注塑机 +注塑模 +注文 +注销 +注药管 +注意 +注意力 +注意者 +注音 +注音字母 +注重 +注资 +贮 +贮备 +贮藏 +贮藏库 +贮藏室 +贮存 +贮点红 +贮水式 +贮药瓶 +贮运 +驻 +驻场式 +驻地 +驻点 +驻防 +驻华 +驻京办 +驻军 +驻军法 +驻留 +驻马店 +驻马店市 +驻守 +驻有 +驻扎 +驻足 +驻足不前 +柱 +柱础石 +柱洞 +柱花草 +柱基 +柱廊 +柱身 +柱石 +柱头 +柱网 +柱子 +炷 +祝 +祝词 +祝辞 +祝福 +祝福词 +祝福歌 +祝福声 +祝嘏 +祝贺 +祝贺团 +祝贺信 +祝家山村 +祝家庄镇 +祝酒 +祝酒词 +祝酒辞 +祝酒歌 +祝楼乡 +祝寿 +祝语 +祝愿 +疰夏 +著 +著称 +著录 +著名 +著名者 +著书 +著书立说 +著述 +著文 +著译 +著者 +著作 +著作等身 +著作权 +著作权法 +著作史 +著作者 +蛀 +蛀齿 +蛀虫 +蛀心虫 +筑 +筑坝 +筑巢 +筑巢引凤 +筑巢者 +筑成 +筑就 +筑路 +筑渠 +筑造 +铸 +铸币 +铸币厂 +铸币局 +铸补 +铸成 +铸成大错 +铸锭 +铸工 +铸管 +铸锅 +铸锅厂 +铸件 +铸就 +铸模 +铸石 +铸铁 +铸造 +铸造厂 +铸造焦 +铸字机 +抓 +抓捕 +抓差 +抓大放小 +抓斗 +抓耳挠腮 +抓饭 +抓好 +抓获 +抓紧 +抓阄 +抓阄儿 +抓举 +抓拍 +抓起 +抓手 +抓瞎 +抓痒式 +抓药 +抓住 +抓走 +爪 +爪部 +爪儿 +爪钩 +爪尖儿 +爪哇 +爪哇虎 +爪牙 +爪子 +拽 +专 +专案 +专案组 +专版 +专病 +专才 +专差 +专长 +专场 +专车 +专诚 +专程 +专储 +专储库 +专储粮 +专递 +专递费 +专电 +专段 +专断 +专访 +专干 +专稿 +专攻 +专馆 +专管员 +专管组 +专柜 +专函 +专号 +专横 +专横跋扈 +专户 +专机 +专机组 +专集 +专辑 +专己者 +专家 +专家队 +专家号 +专家级 +专家局 +专家组 +专兼 +专兼职 +专节 +专刊 +专科 +专科率 +专科生 +专科学校 +专款 +专栏 +专力 +专利 +专利法 +专利费 +专利局 +专利品 +专利权 +专列 +专论 +专卖 +专卖店 +专卖法 +专卖柜 +专卖局 +专门 +专门法 +专门化 +专门家 +专门利人 +专名 +专名号 +专品 +专区 +专权 +专群 +专人 +专任 +专擅 +专使 +专守 +专署 +专司 +专题 +专题会 +专题片 +专题式 +专题讨论 +专题性 +专题组 +专委会 +专文 +专武 +专务 +专线 +专向 +专项 +专销点 +专心 +专心一志 +专心致志 +专修 +专修班 +专修点 +专修科 +专业 +专业班 +专业部 +专业厂 +专业村 +专业点 +专业店 +专业队 +专业对口 +专业法 +专业户 +专业化 +专业界 +专业科 +专业课 +专业面 +专业团 +专业乡 +专业性 +专业展 +专业者 +专业组 +专页 +专一 +专一性 +专营 +专营店 +专营权 +专营性 +专用 +专用车 +专用道 +专用路 +专用票 +专用区 +专用权 +专用线 +专用性 +专用章 +专用纸 +专有 +专有名称 +专有物 +专员 +专员公署 +专员署 +专责 +专章 +专政 +专职 +专制 +专制主义 +专属 +专注 +专著 +专座 +砖 +砖坝 +砖壁 +砖茶 +砖厂 +砖雕 +砖房 +砖混 +砖块 +砖砾 +砖门 +砖木 +砖坯 +砖皮 +砖墙 +砖石 +砖石塔 +砖头 +砖瓦 +砖瓦厂 +砖瓦房 +砖瓦窑 +砖窑 +转 +转氨基酶 +转氨酶 +转包 +转报 +转悲为喜 +转变 +转波台 +转播 +转播权 +转播台 +转产 +转车 +转达 +转贷 +转道 +转动 +转而 +转发 +转发器 +转赴 +转干 +转岗 +转告 +转给 +转关 +转轨 +转过 +转化 +转化法 +转化率 +转换 +转换率 +转会 +转会制 +转祸为福 +转机 +转机建制 +转基因 +转寄 +转嫁 +转交 +转角 +转角处 +转接 +转接点 +转借 +转经筒 +转口 +转来额 +转来转去 +转隶 +转捩点 +转炉 +转轮 +转轮手枪 +转马 +转卖 +转年 +转念 +转盘 +转迁 +转圈 +转让 +转让费 +转让金 +转让人 +转任 +转入 +转身 +转世 +转世灵童 +转手 +转术 +转述 +转瞬 +转瞬即逝 +转瞬间 +转送 +转速 +转速比 +转台 +转体 +转头 +转弯 +转弯处 +转弯抹角 +转弯子 +转危为安 +转为 +转向 +转向灯 +转向架 +转向器 +转校生 +转行 +转型 +转型期 +转学 +转眼 +转眼间 +转业 +转业军人 +转业退伍 +转移 +转椅 +转义 +转益多师 +转意 +转阴 +转营 +转用 +转悠 +转育 +转院 +转运 +转运费 +转运站 +转载 +转载者 +转增 +转赠 +转赠给 +转战 +转账 +转折 +转折点 +转折性 +转诊 +转正 +转制 +转制率 +转轴 +转注 +转转 +转子 +转租 +啭 +啭鸣 +赚 +赚钱 +赚取 +赚头 +撰 +撰稿 +撰稿人 +撰稿者 +撰述 +撰文 +撰写 +撰著 +篆 +篆刻 +篆刻家 +篆书 +篆体 +篆文 +篆字 +妆 +妆奁 +妆饰 +庄 +庄禾集村 +庄河 +庄河市 +庄户 +庄户人 +庄家 +庄家沟村 +庄稼 +庄稼地 +庄稼汉 +庄稼活儿 +庄稼人 +庄稼院 +庄浪 +庄浪籍 +庄浪县 +庄里 +庄山 +庄严 +庄员 +庄园 +庄园主 +庄重 +庄重感 +庄重性 +庄子 +桩 +桩板墙 +桩桩 +桩子 +装 +装扮 +装扮一新 +装备 +装裱 +装车 +装船 +装袋 +装点 +装订 +装法 +装疯卖傻 +装焊 +装糊涂 +装潢 +装潢费 +装潢门面 +装潢业 +装璜 +装货 +装机 +装机费 +装机量 +装机容量 +装甲 +装甲兵 +装甲车 +装甲艇 +装假 +装检团 +装具 +装殓 +装聋作哑 +装满 +装门面 +装模作样 +装配 +装配厂 +装配工 +装配式 +装配图 +装配线 +装腔作势 +装入 +装傻 +装设 +装神弄鬼 +装饰 +装饰布 +装饰橱 +装饰灯 +装饰柜 +装饰画 +装饰帽 +装饰品 +装饰物 +装饰性 +装饰一新 +装束 +装坛 +装填 +装箱 +装箱单 +装箱人 +装卸 +装卸队 +装卸费 +装卸工 +装卸量 +装卸业 +装修 +装修队 +装修费 +装修间 +装修物 +装修业 +装移机 +装有 +装运 +装运量 +装载 +装载机 +装帧 +装置 +装装 +装装样子 +装作 +装做 +壮 +壮大 +壮胆 +壮丁 +壮夫 +壮歌 +壮工 +壮观 +壮汉 +壮怀激烈 +壮健 +壮锦 +壮举 +壮阔 +壮劳力 +壮丽 +壮烈 +壮美 +壮苗 +壮年 +壮年人 +壮实 +壮士 +壮硕 +壮凸 +壮威 +壮伟 +壮戏 +壮乡 +壮心 +壮行会 +壮志 +壮志凌云 +壮志未酬 +壮族 +状 +状告 +状况 +状貌 +状态 +状态词 +状态者 +状态值 +状物 +状语 +状元 +状元村 +状元楼 +状纸 +状子 +幢 +幢幢 +撞 +撞车 +撞倒 +撞过 +撞击 +撞击力 +撞击声 +撞见 +撞伤 +撞死 +撞锁 +撞针 +撞钟 +追 +追逼 +追捕 +追查 +追车族 +追悼 +追悼会 +追肥 +追风 +追风逐电 +追赶 +追根究底 +追根求源 +追根溯源 +追根问底 +追光 +追怀 +追回 +追回记 +追悔 +追悔莫及 +追击 +追击战 +追缉 +追缉战 +追记 +追加 +追歼 +追交 +追缴 +追截 +追究 +追究制 +追觅 +追名逐利 +追求 +追认 +追杀 +追授 +追述 +追思 +追思会 +追诉 +追溯 +追随 +追随型 +追随者 +追索 +追索权 +追讨 +追尾 +追问 +追昔抚今 +追星族 +追叙 +追寻 +追询 +追忆 +追印 +追源溯流 +追赃 +追赠 +追涨 +追逐 +追逐赛 +追踪 +椎骨 +椎间盘 +锥 +锥齿轮 +锥度 +锥栗 +锥面 +锥体 +锥形 +锥形帽 +锥子 +坠 +坠儿 +坠毁 +坠机 +坠落 +坠入 +坠子 +缀 +缀连 +缀染 +缀文 +惴惴 +惴惴不安 +赘 +赘述 +赘物 +赘婿 +赘言 +赘疣 +谆谆 +谆谆告诫 +谆谆教导 +谆谆教诲 +准 +准保 +准备 +准备会 +准备金 +准备金率 +准备期 +准宾语 +准产证 +准钓证 +准东 +准儿 +准噶尔 +准格尔 +准格尔旗 +准集约型 +准将 +准将城 +准军事 +准考证 +准谱 +准谱儿 +准迁证 +准确 +准确度 +准确率 +准确无误 +准确性 +准入 +准入关 +准绳 +准时 +准头 +准尉 +准线 +准销证 +准星 +准许 +准许证 +准印证 +准予 +准则 +准重 +准字号 +准自传体 +卓 +卓奥友峰 +卓刀泉 +卓尔不傲 +卓尔不群 +卓见 +卓立 +卓荦不凡 +卓然 +卓然而立 +卓识 +卓有 +卓有成就 +卓有成效 +卓有建树 +卓有远见 +卓越 +卓著 +拙 +拙笨 +拙笔 +拙词 +拙稿 +拙见 +拙劣 +拙朴 +拙译 +拙作 +倬 +捉 +捉刀 +捉襟见肘 +捉迷藏 +捉迷藏式 +捉摸 +捉摸不定 +捉拿 +捉拿归案 +捉弄 +捉住 +桌 +桌案 +桌边 +桌布 +桌菜 +桌灯 +桌号 +桌几 +桌面 +桌旁 +桌前 +桌上 +桌下 +桌椅 +桌椅板凳 +桌子 +涿河 +涿鹿 +涿鹿县 +涿县 +涿州 +涿州市 +灼 +灼见 +灼亮 +灼面 +灼圃 +灼圃乡 +灼热 +灼人心扉 +灼伤 +灼灼 +茁长 +茁实 +茁壮 +斫 +浊 +浊流 +浊水 +浊水溪 +浊音 +诼 +酌 +酌处 +酌定 +酌量 +酌情 +啄 +啄木鸟 +啄食 +着 +着笔 +着儿 +着慌 +着火 +着火点 +着急 +着力 +着力处 +着力点 +着凉 +着陆 +着陆点 +着陆器 +着落 +着迷 +着魔 +着墨 +着哪 +着呢 +着色 +着色剂 +着色率 +着实 +着手 +着数 +着想 +着眼 +着眼点 +着意 +着重 +着重点 +着重号 +着桩机 +着装 +琢 +琢磨 +琢磨不透 +擢升 +濯 +濯锦 +濯田镇 +镯子 +仔 +仔岛 +仔后 +仔细 +仔虾 +仔猪 +仔仔细细 +孜本 +孜孜 +孜孜不倦 +孜孜耕耘 +孜孜以求 +孜孜追求 +兹 +兹罗提 +咨 +咨文 +咨询 +咨询表 +咨询部 +咨询处 +咨询点 +咨询队 +咨询费 +咨询会 +咨询日 +咨询台 +咨询摊 +咨询团 +咨询性 +咨询业 +咨询员 +咨询站 +咨询组 +姿 +姿控 +姿容 +姿色 +姿势 +姿态 +姿影 +资 +资本 +资本额 +资本家 +资本金 +资本论 +资本性 +资本主义 +资不抵债 +资材 +资财 +资产 +资产额 +资产阶级 +资产率 +资产者 +资方 +资费 +资费处 +资格 +资格赛 +资格证 +资环局 +资江 +资江轮 +资金 +资金额 +资金户 +资金卡 +资金量 +资金流 +资力 +资历 +资料 +资料费 +资料馆 +资料柜 +资料架 +资料库 +资料片 +资料篇 +资料室 +资料箱 +资料性 +资料员 +资山 +资山镇 +资深 +资水 +资望 +资溪 +资溪县 +资信 +资信度 +资兴 +资讯 +资源 +资源部 +资源地 +资源法 +资源化 +资源库 +资源量 +资源税 +资源厅 +资源委 +资源型 +资源性 +资政 +资治通鉴 +资质 +资中 +资助 +资助金 +资助款 +资助面 +资助者 +淄 +淄博 +淄博市 +淄川 +淄川区 +孳生 +滋 +滋补 +滋补品 +滋长 +滋扰 +滋润 +滋生 +滋事 +滋味 +滋味儿 +滋阳湖 +滋养 +滋养品 +滋阴壮阳 +辎车 +辎重 +锱铢必较 +龇牙咧嘴 +籽 +籽儿 +籽粒 +籽棉 +籽屑 +子 +子坝 +子承父业 +子程序 +子丑寅卯 +子代 +子弹 +子堤 +子弟 +子弟兵 +子弟书 +子房 +子房山 +子公司 +子宫 +子宫颈 +子龟 +子规 +子规划 +子鸡 +子集 +子结构 +子金 +子句 +子刊 +子课题 +子口 +子力 +子粒 +子棉 +子民 +子母弹 +子母机 +子母扣儿 +子母钟 +子目 +子目录 +子囊 +子埝 +子女 +子实 +子书 +子帅 +子孙 +子孙饭 +子孙后代 +子孙万代 +子题目 +子午 +子午莲 +子午卯酉 +子午胎 +子午线 +子午仪 +子系统 +子弦 +子痫 +子项 +子项目 +子星 +子虚乌有 +子畜 +子学 +子牙 +子叶 +子夜 +子音 +子侄 +子子孙孙 +姊 +姊夫 +姊妹 +姊妹饭 +姊妹花 +姊妹节 +姊妹篇 +秭归 +秭归城 +秭归县 +梓山 +梓潼县 +梓行 +紫 +紫菜 +紫菜苔 +紫草 +紫草茸 +紫癜 +紫貂 +紫貂皮 +紫丁香 +紫橄榄菜 +紫绀型 +紫光阁 +紫毫 +紫河车 +紫黑色 +紫红 +紫红色 +紫花地丁 +紫花苜蓿 +紫胶 +紫胶虫 +紫金锭 +紫金牛 +紫金山 +紫金县 +紫金鱼袋 +紫堇 +紫禁城 +紫荆 +紫荆村 +紫荆堤 +紫荆花 +紫荆山 +紫蓝蓝 +紫罗兰 +紫茉莉 +紫泥泉 +紫萍 +紫色 +紫砂 +紫砂壶 +紫砂陶 +紫杉 +紫石英 +紫苏 +紫苏叶 +紫穗槐 +紫台山 +紫檀 +紫檀木 +紫藤 +紫藤花 +紫铜 +紫铜色 +紫外 +紫外光 +紫外线 +紫菀 +紫葳 +紫微八卦 +紫薇 +紫乌 +紫雪 +紫燕 +紫阳 +紫药水 +紫玉米 +紫云村 +紫云英 +紫芝 +紫竹 +紫竹园 +紫竹院 +滓 +字 +字标 +字典 +字调 +字儿 +字符 +字符串 +字符集 +字幅 +字根 +字号 +字画 +字画区 +字汇 +字迹 +字集 +字节 +字句 +字据 +字卷 +字库 +字库量 +字里行间 +字链 +字码儿 +字谜 +字面 +字模 +字母 +字幕 +字牌 +字频 +字书 +字数 +字体 +字条 +字贴儿 +字帖 +字帖儿 +字头 +字形 +字眼 +字眼儿 +字样 +字音 +字斟句酌 +字正腔圆 +字纸 +字纸篓 +字字 +字字句句 +字字珠玑 +自 +自爱 +自傲 +自拔 +自白 +自办 +自办厂 +自保 +自暴自弃 +自卑 +自卑感 +自卑心 +自备 +自便 +自变量 +自变数 +自不必说 +自不待言 +自不量力 +自惭形秽 +自策 +自查 +自查自纠 +自查自省 +自产自销 +自嘲 +自称 +自成 +自成一家 +自成一体 +自持 +自筹 +自传 +自传式 +自传体 +自吹自擂 +自此 +自从 +自忖 +自打 +自大 +自当 +自得其乐 +自动 +自动步枪 +自动化 +自动化所 +自动化系 +自动机 +自动铅笔 +自动枪 +自动伞 +自动线 +自动性 +自发 +自发性 +自放电率 +自费 +自费生 +自焚 +自封 +自负 +自负盈亏 +自甘落后 +自感 +自感应 +自高自大 +自告奋勇 +自个 +自个儿 +自各儿 +自给 +自给率 +自给性 +自给有余 +自给自足 +自耕农 +自攻丝刀 +自供 +自贡 +自贡市 +自古 +自古以来 +自顾不暇 +自顾自 +自豪 +自豪感 +自豪者 +自花传粉 +自画像 +自己 +自己人 +自家 +自家人 +自检 +自荐 +自交系 +自尽 +自禁 +自警 +自警自省 +自纠 +自纠自查 +自咎 +自救 +自救费 +自居 +自决 +自决权 +自绝 +自觉 +自觉性 +自觉自醒 +自觉自愿 +自掘坟墓 +自开生面 +自考 +自考办 +自控 +自夸 +自况体 +自愧不如 +自来水 +自来水笔 +自来水管 +自乐 +自理 +自力 +自力更生 +自力霉素 +自力图强 +自立 +自立军 +自立者 +自励 +自怜 +自料 +自流灌溉 +自流井 +自留地 +自留山 +自律 +自律性 +自卖自夸 +自满 +自贸区 +自觅 +自勉 +自民 +自民党 +自民联 +自鸣得意 +自命 +自命不凡 +自谋 +自谋生路 +自馁 +自虐 +自虐史观 +自欺 +自欺欺人 +自弃 +自谦 +自强 +自强不息 +自强心 +自取灭亡 +自然 +自然村 +自然而然 +自然观 +自然光 +自然规律 +自然环境 +自然界 +自然经济 +自然科学 +自然课 +自然力 +自然美 +自然免疫 +自然人 +自然数 +自然天成 +自然铜 +自然型 +自然性 +自然选择 +自然灾害 +自然寨 +自然主义 +自然庄 +自然资源 +自燃 +自认倒霉 +自如 +自若 +自杀 +自杀性 +自杀者 +自上而下 +自身 +自审 +自生堰村 +自生自灭 +自省 +自识 +自食其果 +自食其力 +自食其言 +自始至终 +自视甚高 +自恃 +自收自支 +自首 +自述 +自私 +自私自利 +自诉 +自诉人 +自叹弗如 +自讨苦吃 +自讨没趣 +自体 +自投罗网 +自为 +自为阶级 +自卫 +自卫队 +自卫军 +自卫权 +自卫性 +自慰 +自问 +自我 +自我标榜 +自我批评 +自我陶醉 +自我牺牲 +自物权 +自吸型 +自惜 +自习 +自习课 +自习率 +自习室 +自下而上 +自限性 +自相残害 +自相残杀 +自相惊扰 +自相矛盾 +自相鱼肉 +自销 +自销权 +自小 +自写像 +自卸车 +自卸船 +自卸式 +自新 +自信 +自信度 +自信心 +自行 +自行车 +自行车厂 +自行车队 +自行车界 +自行车赛 +自行火炮 +自行其事 +自行其是 +自修 +自诩 +自序 +自叙 +自选 +自选集 +自选区 +自选商场 +自选市场 +自学 +自学成才 +自寻短见 +自寻烦恼 +自言自语 +自养 +自已 +自以为是 +自益权 +自营 +自营率 +自营性 +自用 +自由 +自由邦 +自由词 +自由党 +自由电子 +自由度 +自由放任 +自由峰 +自由港 +自由化 +自由民 +自由区 +自由权 +自由日 +自由诗 +自由市场 +自由式 +自由体 +自由体操 +自由王国 +自由泳 +自由职业 +自由主义 +自由自在 +自有 +自有率 +自幼 +自娱 +自语 +自育 +自圆其说 +自缘 +自源性 +自愿 +自愿性 +自愿者 +自在 +自在阶级 +自在性 +自责 +自找 +自找苦吃 +自找麻烦 +自侦 +自珍 +自知 +自知者 +自知之明 +自制 +自制力 +自制率 +自治 +自治法 +自治机关 +自治领 +自治旗 +自治区 +自治权 +自治日 +自治省 +自治体 +自治县 +自治县委 +自治相 +自治州 +自治州委 +自致性 +自重 +自主 +自主化 +自主经营 +自主权 +自主神经 +自主性 +自助 +自助餐 +自助式 +自注式 +自转 +自足村 +自足感 +自尊 +自尊心 +自作聪明 +自作主张 +自作自受 +自做主张 +恣肆 +恣肆汪洋 +恣意 +恣意妄为 +渍 +渍害 +眦决嘴裂 +宗 +宗祠 +宗法 +宗匠 +宗教 +宗教党 +宗教改革 +宗教观 +宗教画 +宗教界 +宗教局 +宗教史 +宗教徒 +宗教性 +宗教学 +宗谅 +宗路区 +宗庙 +宗派 +宗派主义 +宗谱 +宗亲 +宗山 +宗师 +宗室 +宗祧 +宗旨 +宗州 +宗主国 +宗主权 +宗族 +综 +综采 +综采队 +综放 +综观 +综合 +综合厂 +综合处 +综合大学 +综合店 +综合队 +综合国力 +综合化 +综合奖 +综合局 +综合科 +综合课 +综合楼 +综合派 +综合篇 +综合司 +综合险 +综合型 +综合性 +综合语 +综合园 +综合征 +综合症 +综合治理 +综机 +综览 +综论 +综论编 +综上所述 +综述 +综艺 +综治 +综治办 +综治委 +棕 +棕绷 +棕编 +棕红 +棕黄 +棕榈 +棕榈科 +棕榈林 +棕榈树 +棕榈油 +棕绿色 +棕毛 +棕色 +棕色棉 +棕绳 +棕树 +棕箱 +棕熊 +棕熊队 +棕油 +踪 +踪迹 +踪影 +鬃 +鬃毛 +鬃刷 +总 +总罢工 +总包人 +总编 +总编辑 +总编室 +总兵 +总部 +总裁 +总裁室 +总参 +总参谋部 +总参谋长 +总产 +总产量 +总产值 +总长 +总厂 +总场 +总称 +总成 +总成绩 +总程 +总代理 +总得 +总的 +总的讲 +总的看 +总的看来 +总的来讲 +总的来看 +总的来说 +总的说 +总的说来 +总堤 +总店 +总调 +总动员 +总督 +总督府 +总队 +总队长 +总吨位 +总额 +总额度 +总而言之 +总方针 +总分 +总府 +总府路 +总负责人 +总纲 +总工 +总工程师 +总工会 +总公司 +总攻 +总共 +总管 +总归 +总和 +总后 +总后勤部 +总户数 +总汇 +总会 +总会屋 +总机 +总集 +总计 +总加 +总价 +总价值 +总监 +总监督室 +总结 +总结会 +总结性 +总经理 +总经理部 +总局 +总局长 +总决赛 +总卡量 +总控室 +总括 +总览 +总揽 +总理 +总理府 +总理级 +总理室 +总量 +总量性 +总领馆 +总领事 +总领事馆 +总流量 +总路线 +总论 +总煤师 +总面积 +总目 +总评 +总鳍鱼 +总起来讲 +总人口 +总任务 +总商会 +总社 +总师 +总是 +总收入 +总书记 +总枢百端 +总署 +总数 +总司令 +总司令部 +总算 +总台 +总体 +总体部 +总体性 +总体战 +总体组 +总统 +总统府 +总统令 +总危机 +总务 +总务长 +总务处 +总务科 +总务司 +总务厅 +总线 +总校 +总协定 +总星系 +总行 +总序 +总医院 +总院 +总则 +总责 +总站 +总账 +总政 +总政治部 +总之 +总支 +总支部 +总支出 +总值 +总指挥 +总指挥部 +总指挥员 +总装 +总装备部 +总装厂 +总装机 +总装线 +总状花序 +纵 +纵波 +纵步 +纵长 +纵穿 +纵断面 +纵队 +纵隔 +纵观 +纵贯 +纵横 +纵横捭阖 +纵横驰骋 +纵横交错 +纵横谈 +纵横有序 +纵虎归山 +纵火 +纵火案 +纵火犯 +纵览 +纵令 +纵论 +纵目 +纵目四顾 +纵剖面 +纵切面 +纵情 +纵情山水 +纵然 +纵容 +纵身 +纵深 +纵深处 +纵深行 +纵使 +纵贪张奢 +纵谈 +纵线 +纵向 +纵坐标 +粽粑 +粽子 +邹 +邹城 +邹城市 +邹平县 +邹县 +邹庄村 +邹庄镇 +诹 +陬 +走 +走边 +走遍 +走村串户 +走村串寨 +走村入户 +走道 +走低 +走调儿 +走动 +走读 +走读生 +走法 +走访 +走钢丝 +走狗 +走过 +走过场 +走红 +走后门 +走回头路 +走婚制 +走火 +走火入魔 +走极端 +走家串户 +走江湖 +走街串户 +走街串巷 +走捷径 +走近 +走进 +走开 +走廊 +走老路 +走漏风声 +走路 +走马 +走马灯 +走马赴任 +走马疳 +走马观花 +走马看花 +走马上任 +走麦城 +走门串户 +走门子 +走南闯北 +走牛 +走俏 +走亲访友 +走禽 +走人 +走入 +走神 +走失 +走时 +走势 +走兽 +走私 +走私案 +走私船 +走私犯 +走私贩私 +走私货 +走私轮 +走私品 +走私者 +走私罪 +走头无路 +走投无路 +走脱 +走弯路 +走味儿 +走下坡路 +走向 +走形 +走形式 +走熊 +走穴 +走檐飞翘 +走样 +走样儿 +走运 +走者 +走着瞧 +走资派 +走走 +走走看看 +走卒 +走嘴 +奏 +奏乐 +奏鸣曲 +奏疏 +奏响 +奏效 +奏章 +奏折 +奏者 +揍 +租 +租车费 +租佃制 +租房 +租费 +租户 +租价 +租建 +租界 +租借 +租借地 +租金 +租赁 +租赁本 +租赁处 +租赁方 +租赁费 +租赁金 +租赁期 +租赁权 +租赁业 +租赁站 +租赁者 +租赁制 +租卖亭 +租期 +租售比价 +租售房 +租售率 +租税 +租下 +租用 +租用者 +租约 +租者 +租种 +租子 +足 +足不出户 +足底 +足额 +足够 +足迹 +足金 +足联 +足临泣穴 +足球 +足球报 +足球场 +足球城 +足球队 +足球界 +足球狂 +足球迷 +足球赛 +足球史 +足坛 +足贴 +足下 +足下生辉 +足校 +足协 +足协杯赛 +足癣 +足以 +足音 +足银 +足印 +足掌 +足智多谋 +足足 +卒 +卒底炮 +卒业 +卒子 +族 +族别 +族长 +族长式 +族规 +族际 +族类 +族民 +族谱 +族权 +族群 +族人 +族裔 +镞 +诅咒 +阻 +阻碍 +阻挡 +阻断 +阻断性 +阻遏 +阻隔 +阻寒 +阻击 +阻击战 +阻截 +阻抗 +阻拦 +阻力 +阻挠 +阻尼 +阻劝 +阻燃 +阻燃网 +阻塞 +阻行杆 +阻值 +阻止 +阻滞 +组 +组氨酸 +组胺 +组办 +组编 +组别 +组长 +组成 +组成部分 +组雕 +组队 +组方 +组分 +组稿 +组歌 +组阁 +组阁权 +组工 +组构 +组合 +组合港 +组合柜 +组合式 +组合音响 +组画 +组件 +组建 +组建期 +组教 +组接 +组派 +组佩玉饰 +组配 +组拼 +组曲 +组诗 +组团 +组团社 +组团式 +组网 +组委会 +组训 +组员 +组展 +组展会 +组照 +组织 +组织胺 +组织部 +组织部长 +组织法 +组织股 +组织关系 +组织化 +组织家 +组织奖 +组织局 +组织科 +组织科长 +组织科学 +组织疗法 +组织生活 +组织性 +组织液 +组织员 +组织者 +组织罪 +组诛 +组装 +组装车 +组装式 +组组 +俎 +祖 +祖辈 +祖本 +祖产 +祖传秘方 +祖坟 +祖父 +祖父母 +祖公 +祖国 +祖籍 +祖居 +祖居地 +祖陵 +祖鲁 +祖鲁王国 +祖率 +祖庙 +祖母 +祖母绿 +祖上 +祖师 +祖述 +祖树 +祖孙 +祖先 +祖业 +祖荫 +祖茔 +祖宗 +祖祖辈辈 +纂喜庐 +钻 +钻尺 +钻床 +钻工 +钻机 +钻戒 +钻劲 +钻进 +钻井 +钻井队 +钻井工 +钻井机 +钻井液 +钻具 +钻空子 +钻孔 +钻木取火 +钻牛角尖 +钻石 +钻石婚 +钻塔 +钻台 +钻探 +钻探队 +钻探机 +钻天猴 +钻天柳 +钻天杨 +钻头 +钻心 +钻心虫 +钻研 +钻营 +攥 +嘴 +嘴巴 +嘴把式 +嘴边 +嘴唇 +嘴儿 +嘴角 +嘴啃泥 +嘴里 +嘴脸 +嘴皮 +嘴皮子 +最 +最初 +最次品 +最大化 +最大者 +最低 +最低点 +最低价 +最低位 +最低限 +最低值 +最底层 +最高 +最高潮 +最高处 +最高点 +最高分 +最高峰 +最高价 +最高院 +最好 +最后 +最后通牒 +最惠国 +最佳 +最佳奖 +最佳期 +最佳者 +最近 +最末 +最前线 +最前沿 +最强音 +最轻量级 +最少 +最甚者 +最为 +最先 +最新 +最新型 +最优化 +最终 +最最 +罪 +罪案 +罪案率 +罪不容赦 +罪不容诛 +罪大恶极 +罪恶 +罪恶滔天 +罪犯 +罪过 +罪魁 +罪魁祸首 +罪名 +罪孽 +罪孽深重 +罪人 +罪行 +罪因 +罪有应得 +罪责 +罪证 +罪状 +醉 +醉鬼 +醉汉 +醉马草 +醉拳 +醉生梦死 +醉态 +醉翁亭 +醉乡 +醉心 +醉醺醺 +醉眼 +醉意 +尊 +尊卑 +尊长 +尊称 +尊崇 +尊奉 +尊干 +尊贵 +尊敬 +尊老 +尊老爱老 +尊老爱幼 +尊老敬老 +尊亲 +尊容 +尊神 +尊师 +尊师重教 +尊姓 +尊严 +尊严感 +尊者 +尊重 +遵 +遵从 +遵奉 +遵化 +遵化市 +遵纪爱民 +遵纪守法 +遵命 +遵守 +遵行 +遵循 +遵义 +遵义城 +遵义市 +遵义县 +遵章率 +遵章守纪 +遵照 +樽 +樽俎 +鳟鱼 +昨 +昨儿 +昨儿个 +昨日 +昨天 +昨晚 +昨夜 +左 +左安门 +左岸 +左摆舵 +左半 +左膀 +左膀右臂 +左臂 +左臂右膀 +左边 +左不过 +左侧 +左传 +左耳 +左方 +左锋 +左顾右盼 +左海 +左海平湖 +左家塘 +左家庄 +左脚 +左近 +左联 +左邻右舍 +左路 +左轮 +左轮手枪 +左满舵 +左面 +左民党 +左派 +左撇子 +左倾 +左权 +左权籍 +左权县 +左券 +左嗓子 +左上 +左上臂 +左上方 +左上角 +左手 +左图 +左徒 +左腿 +左膝 +左下 +左下方 +左下角 +左眼 +左翼 +左右 +左右岸 +左右逢源 +左右开弓 +左右手 +左右为难 +左右翼 +左右中 +左云 +左云县 +左证 +左中方 +左左右右 +佐 +佐餐 +佐读 +佐剂 +佐料 +佐证 +佐治亚 +佐治亚州 +作 +作案 +作案人 +作案者 +作罢 +作伴 +作保 +作比 +作弊 +作巢生卵 +作成 +作出 +作词 +作答 +作代会 +作到 +作登乡 +作东 +作对 +作恶 +作恶多端 +作法 +作坊 +作坊式 +作坊业 +作废 +作废票 +作风 +作梗 +作工 +作古 +作怪 +作鬼 +作画 +作家 +作家班 +作家卷 +作家群 +作价 +作价员 +作假 +作假者 +作奸犯科 +作茧自缚 +作件 +作贱 +作践 +作教科 +作客 +作客思想 +作浪 +作乐 +作料 +作乱 +作美 +作难 +作鸟兽散 +作孽 +作弄 +作呕 +作派 +作陪 +作品 +作品集 +作品选 +作品展 +作曲 +作曲法 +作曲家 +作曲系 +作手脚 +作祟 +作痛 +作图 +作威作福 +作为 +作伪 +作伪者 +作文 +作文本 +作文簿 +作文课 +作文赛 +作物 +作物区 +作息 +作息时间 +作响 +作协 +作兴 +作秀 +作业 +作业本 +作业点 +作业队 +作业费 +作业会 +作业机 +作业区 +作业题 +作业组 +作用 +作用力 +作战 +作战部 +作战处 +作战股 +作战科 +作战区 +作战者 +作者 +作者群 +作证 +作主 +坐 +坐班 +坐班制 +坐北朝南 +坐标 +坐标系 +坐标轴 +坐舱 +坐车 +坐吃山空 +坐船 +坐次 +坐待 +坐等 +坐等式 +坐地分赃 +坐地客 +坐垫 +坐定 +坐蔸 +坐而论道 +坐枋 +坐功 +坐骨 +坐骨神经 +坐观成败 +坐井观天 +坐具 +坐困愁城 +坐牢 +坐冷板凳 +坐力 +坐立不安 +坐立不稳 +坐落 +坐南朝北 +坐骑 +坐山雕 +坐商 +坐失 +坐失良机 +坐视 +坐视不管 +坐视不救 +坐收渔利 +坐台 +坐探 +坐堂 +坐堂义诊 +坐位 +坐位表 +坐卧不安 +坐卧不宁 +坐席 +坐下 +坐享其成 +坐像 +坐药 +坐以待毙 +坐椅 +坐诊 +坐镇 +坐庄 +坐姿 +坐坐 +柞蚕 +柞蚕丝 +柞绸 +柞绢 +柞林 +柞树 +柞丝绸 +座 +座背 +座标 +座舱 +座车 +座船 +座次 +座垫 +座儿 +座号 +座机 +座架 +座楼 +座落 +座盘秤 +座区 +座上宾 +座上客 +座谈 +座谈会 +座套 +座位 +座位表 +座位号 +座位图 +座无虚席 +座席 +座向 +座像 +座椅 +座右铭 +座钟 +座子 +座座 +做 +做伴 +做菜 +做操 +做成 +做出 +做到 +做东 +做法 +做饭 +做工 +做功 +做贡献期 +做官 +做官者 +做好 +做活 +做活儿 +做客 +做媒 +做媒者 +做梦 +做人 +做生日 +做事 +做手脚 +做通 +做文章 +做月子 +做贼心虚 +做主 +做作 diff --git a/coreseek/mmseg-3.2.14/data/build_unigram.py b/coreseek/mmseg-3.2.14/data/build_unigram.py new file mode 100755 index 0000000..1a19618 --- /dev/null +++ b/coreseek/mmseg-3.2.14/data/build_unigram.py @@ -0,0 +1,36 @@ +#/usr/bin/python +# -*- coding: utf-8 -*- +import sys +import unicodedata +import re +import codecs +import os + +def main(): + fh = codecs.open(sys.argv[1],"r", "UTF-8") + lines = fh.readlines() + fh.close() + uni_char = {} + for l in lines: + l = l.strip() + toks = l.split('\t') + k = toks[0] + cnt = int(toks[1]) + if k not in uni_char: + uni_char[k] = cnt + fh = codecs.open(sys.argv[2],"r", "UTF-8") + lines = fh.readlines() + fh.close() + for l in lines: + l = l.strip() + if l not in uni_char: + uni_char[l] = 1 + pass + for k in uni_char: + cnt = uni_char[k] + print (k+'\t'+str(cnt)).encode('UTF-8') + print ('x:'+str(cnt)).encode('UTF-8') + pass + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/data/char.stat.txt b/coreseek/mmseg-3.2.14/data/char.stat.txt new file mode 100755 index 0000000..8cb23fc --- /dev/null +++ b/coreseek/mmseg-3.2.14/data/char.stat.txt @@ -0,0 +1,4097 @@ +怀 97 +浚 1 +挂 409 +耀 30 +涉 78 +谈 1395 +伊 534 +随 381 +茂 13 +徕 1 +抗 169 +脖 1 +料 59 +鞅 2 +绊 4 +亟 16 +洞 62 +造 198 +咣 1 +瞥 12 +瘤 3 +骧 1 +悫 1 +缪 62 +般 368 +作 2621 +河 187 +欲 130 +侵 3 +临 111 +然 73 +吸 57 +场 1903 +宽 284 +线 488 +捂 13 +反 1205 +牌 191 +盏 63 +科 140 +弹 63 +噢 14 +苗 126 +庸 15 +摘 98 +窗 61 +话 1351 +赞 62 +凡 282 +瓣 16 +卢 423 +知 338 +除 828 +巩 23 +胫 1 +彪 75 +揭 55 +扬 181 +撸 2 +衰 20 +泳 15 +其 5219 +闹 103 +呸 2 +驼 2 +绿 322 +渔 26 +愁 83 +萃 5 +掂 6 +芗 1 +覆 12 +沈 313 +》 13013 +湃 1 +颐 1 +5 2486 +应 3692 +赅 1 +枚 347 +滤 4 +假 557 +崩 6 +循 38 +抬 140 +是 66090 +蝉 3 +讲 2000 +麟 10 +刷 25 +冶 7 +锹 14 +咸 12 +贞 1 +鸿 60 +胀 4 +视 170 +俊 156 +契 2 +磐 1 +寒 37 +录 46 +黔 39 +典 9 +教 295 +柚 2 +璎 1 +也 18777 +酡 1 +囤 4 +秦 269 +嵩 5 +括 2 +景 86 +轼 3 +熠 1 +懒 23 +滴 72 +凶 10 +铸 69 +须 292 +基 24 +孽 4 +广 403 +巾 4 +漪 1 +殇 2 +沉 59 +醋 12 +上 23705 +后 9533 +碑 116 +餐 45 +底 897 +4 2166 +默 8 +蒙 111 +攘 2 +榛 3 +键 8 +辟 85 +厄 66 +砰 5 +岩 96 +茬 34 +枯 17 +惜 30 +椰 2 +足 209 +伴 83 +痒 3 +离 576 +鬼 23 +羿 1 +尾 46 +胁 2 +灿 9 +框 15 +泉 34 +凋 5 +勍 1 +罩 21 +壑 3 +薹 1 +绕 85 +晚 607 +迟 376 +汞 7 +郡 11 +嗣 2 +牢 32 +坤 36 +犟 5 +拭 1 +柯 54 +裱 1 +跳 229 +唤 18 +号 1227 +偶 21 +啸 11 +移 148 +派 603 +老 1637 +膀 1 +节 164 +★ 14 +构 8 +謇 1 +消 36 +厌 14 +钎 4 +媒 10 +帕 2 +羔 2 +茗 1 +肖 319 +缗 1 +濮 8 +伟 208 +倡 7 +冠 56 +锣 7 +丝 73 +纪 53 +掬 7 +术 16 +辜 47 +曙 1 +吹 203 +稽 2 +吏 2 +精 153 +翅 7 +臀 1 +拂 34 +柄 13 +歇 23 +汉 159 +珍 12 +克 168 +今 334 +前 5107 +双 456 +坏 214 +哎 10 +塑 22 +姐 13 +综 6 +幕 117 +翔 31 +胖 29 +湍 1 +佟 35 +几 5204 +G 8 +巨 39 +绪 2 +扭 36 +杯 200 +筒 4 +e##e 825857 +卷 296 +闸 34 +固 42 +导 19 +齿 7 +舀 6 +薅 1 +辉 127 +丈 17 +再 5272 +侃 13 +咏 24 +库 86 +砂 24 +尔 6 +挖 222 +蔚 36 +沟 66 +伞 41 +删 12 +嚣 1 +鄢 16 +琤 1 +碧 14 +符 146 +披 61 +爆 21 +蒯 5 +亲 138 +涵 11 +水 1300 +炷 2 +霈 1 +瘸 4 +禽 23 +砼 4 +殴 1 +菁 13 +所 5816 +旅 185 +摄 1932 +么 34 +勋 5 +赊 8 +重 981 +灌 28 +哏 1 +坎 8 +煳 1 +结 246 +× 50 +贻 3 +潞 1 +奈 1 +兢 22 +学 1242 +翩 1 +帽 9 +臭 33 +诱 4 +递 48 +钞 3 +培 14 +癸 1 +硼 1 +溴 2 +持 329 +技 22 +罪 148 +标 60 +钽 3 +伉 13 +予 85 +越 1025 +雾 58 +瞎 22 +笑 373 +盯 86 +耗 22 +弘 26 +翌 2 +袜 6 +氟 9 +辞 42 +匡 8 +加 580 +冢 2 +锥 4 +钤 1 +砧 1 +宦 3 +缩 19 +舫 20 +悬 53 +贵 174 +圹 1 +稻 19 +尿 21 +晃 20 +臂 29 +故 106 +蓄 23 +识 81 +噍 1 +酶 16 +免 155 +城 584 +筑 81 +痹 8 +秒 391 +揖 3 +江 4006 +连 1090 +卡 131 +狠 47 +癣 2 +略 199 +瓤 1 +芥 1 +彩 30 +扫 87 +乳 4 +赵 1495 +仿 27 +偷 138 +叶 618 +睹 27 +相 1422 +驻 1545 +好 8876 +箫 5 +屿 1 +怂 1 +撅 2 +争 417 +梭 6 +王 6084 +谊 6 +傍 9 +球 608 +疏 37 +阎 159 +骑 118 +崔 272 +或 4326 +趟 100 +踞 35 +务 15 +花 978 +垣 3 +逢 94 +钥 1 +锤 20 +缨 3 +莫 197 +妆 3 +斯 83 +澳 290 +贴 185 +冷 148 +制 169 +霸 18 +礼 67 +鸾 1 +牧 67 +聂 84 +擅 12 +庹 1 +舷 2 +仉 1 +友 73 +酌 6 +噎 1 +竑 1 +子 125 +硒 1 +糕 2 +缸 33 +蛙 6 +毛 1173 +玻 7 +跟 413 +占 2663 +矣 50 +哥 26 +秧 13 +绩 10 +惭 2 +普 14 +衩 1 +俳 5 +泵 3 +赴 607 +雹 1 +引 243 +寻 108 +饼 8 +掀 25 +搅 23 +薄 133 +三 6829 +辈 34 +倍 758 +册 298 +甏 1 +嚎 1 +父 59 +3 3213 +墒 8 +抖 18 +榜 26 +负 488 +玠 5 +圣 14 +邢 70 +琥 1 +疤 4 +大 14538 +窦 28 +鸩 1 +挫 11 +粪 26 +支 1140 +暮 10 +樱 11 +记 470 +漳 1 +趴 15 +状 47 +垸 1 +鬻 2 +钺 3 +庾 3 +扁 3 +权 359 +悠 1 +义 104 +迈 111 +瓶 97 +遍 238 +里 4580 +畏 11 +寐 1 +当 2786 +厢 6 +展 131 +拖 134 +赟 2 +仞 3 +珠 28 +督 3 +嗤 1 +荐 10 +荫 11 +恭 5 +蛮 17 +橱 2 +佳 181 +具 333 +铺 151 +顽 3 +绾 5 +搀 5 +肃 19 +蜂 7 +莅 3 +阀 2 +栈 1 +咋 44 +芒 8 +芬 11 +墓 83 +2 1688 +稔 1 +暗 64 +佘 18 +耘 2 +沛 4 +挚 1 +依 114 +东 511 +吠 1 +那 2963 +厥 1 +判 92 +座 1115 +笪 14 +芯 8 +煜 3 +铁 150 +梳 3 +段 1341 +嚷 11 +锶 4 +熹 2 +逸 17 +区 857 +羽 28 +社 114 +旁 164 +匮 1 +胃 21 +杂 39 +菅 1 +爷 3 +滇 19 +浆 11 +觉 82 +案 243 +癌 23 +煎 16 +归 264 +敖 2 +聘 61 +泛 29 +挎 13 +保 391 +面 504 +句 895 +继 272 +秩 2 +锵 3 +腮 6 +深 910 +汰 3 +裳 2 +轲 6 +诵 9 +雷 923 +镶 25 +凹 4 +系 401 +忽 49 +幼 21 +竿 4 +考 80 +茅 20 +抄 57 +万 2473 +殊 10 +霍 76 +鞍 2 +睛 4 +岐 4 +徒 26 +肘 2 +溜 24 +赋 21 +钠 17 +愚 11 +帧 13 +綦 1 +天 3634 +墨 173 +宪 17 +札 5 +音 76 +贱 11 +墟 1 +炸 67 +玺 1 +] 8 +恋 18 +稿 94 +蕴 1 +擀 12 +恃 1 +捅 20 +拄 20 +蹇 2 +驶 80 +坍 7 +雌 11 +野 61 +忒 4 +孕 6 +虏 1 +晗 4 +汛 3 +觞 1 +铠 1 +遣 8 +矢 5 +勤 89 +左 385 +磨 65 +葫 3 +弦 22 +杭 30 +良 53 +泰 146 +陷 26 +≠ 1 +兹 7 +罕 2 +类 790 +珺 33 +匠 7 +穿 503 +仔 8 +攀 47 +昂 11 +彗 1 +樊 59 +『 4064 +岑 6 +蕙 1 +馓 2 +笔 516 +林 909 +烘 3 +涛 340 +戚 53 +菽 2 +唠 2 +墩 4 +诲 1 +斫 1 +雏 2 +本 2116 +串 91 +点 1792 +㧟 1 +刺 62 +纽 2 +宿 25 +砾 2 +臃 1 +担 107 +过 5095 +豆 21 +棉 55 +雍 4 +④ 16 +珏 3 +偎 4 +姓 166 +孔 287 +券 11 +仝 3 +潜 15 +铡 1 +院 390 +卤 1 +忧 113 +票 433 +走 3712 +蹲 70 +瑶 17 +烹 6 +酸 21 +绽 8 +彼 14 +寿 20 +顾 363 +搁 22 +℃ 62 +暂 63 +舅 4 +锋 751 +骖 1 +阍 1 +炎 10 +少 1709 +朗 16 +耙 7 +膘 1 +洛 2 +抚 5 +渝 49 +遵 13 +弧 3 +馨 18 +蔫 5 +昭 55 +振 30 +谱 42 +躲 70 +锟 1 +魔 8 +鸽 13 +碾 4 +摁 11 +潇 1 +览 7 +畋 1 +降 465 +协 11 +郎 105 +屑 2 +绒 5 +婕 4 +赛 199 +九 1576 +远 626 +俑 2 +酣 7 +团 441 +剥 24 +古 474 +姨 5 +柬 132 +药 299 +惮 1 +驿 1 +煦 13 +仲 34 +说 17649 +银 121 +凸 9 +勺 5 +幽 9 +翼 15 +桔 3 +极 661 +昀 2 +怄 2 +漆 17 +殉 2 +隋 24 +褊 1 +同 4312 +猎 13 +帐 3 +研 33 +艘 190 +战 440 +些 651 +脚 260 +涝 12 +谜 43 +眄 1 +瘠 2 +劣 40 +酚 4 +冥 1 +F 34 +箩 2 +太 1254 +断 312 +搬 209 +肯 121 +辱 9 +丰 94 +洲 45 +眶 1 +爸 22 +麻 25 +尼 32 +渊 12 +但 8150 +诉 39 +像 1992 +华 592 +丹 48 +塔 95 +杖 3 +托 116 +距 197 +汜 1 +频 17 +燥 1 +彦 34 +旭 49 +葬 7 +惯 58 +据 5989 +俱 36 +买 1325 +瓷 10 +靶 16 +叹 51 +缕 23 +鱼 251 +签 112 +蚀 8 +辆 680 +怖 2 +和 72601 +』 4051 +1 3455 +庐 3 +夕 16 +颔 2 +折 112 +丛 39 +贝 21 +尧 14 +骨 33 +撬 22 +怯 4 +漱 1 +液 3 +匹 43 +崽 3 +宾 4 +蛀 5 +胄 18 +汇 98 +歉 6 +陋 5 +镍 7 +铌 3 +偏 473 +网 191 +珹 1 +舢 1 +徊 1 +麦 46 +著 80 +拘 2 +湛 4 +赝 1 +【 2 +睡 141 +因 2274 +入 942 +烤 21 +翦 10 +孩 5 +虫 40 +蓬 7 +息 36 +豪 4 +仰 17 +裴 44 +呷 4 +韶 1 +幻 11 +出 7495 +顿 155 +蚁 1 +最 6681 +搂 16 +誉 19 +鞋 123 +嫖 2 +钍 2 +锌 17 +熏 14 +庑 1 +鼐 1 +宓 34 +夔 1 +斗 67 +翘 12 +湘 54 +供 351 +吮 1 +錾 1 +眠 13 +琢 8 +带 1460 +笨 14 +枫 21 +堪 29 +播 51 +蔬 2 +估 7 +讳 1 +喷 32 +阶 2 +犹 56 +庵 2 +债 81 +缓 106 +T 2 +杀 128 +情 576 +掷 14 +淇 4 +埋 109 +响 216 +界 48 +减 348 +黑 275 +齐 315 +篓 5 +磕 4 +奔 197 +旗 89 +晖 48 +拙 4 +进 2134 +聚 79 +妻 53 +淤 26 +靠 1482 +口 490 +呢 1068 +煤 171 +巧 62 +嫩 13 +拦 44 +敬 56 +笼 12 +轰 14 +棵 238 +闷 12 +陶 249 +呛 10 +卸 45 +翻 258 +姿 17 +驾 34 +烁 2 +范 298 +撂 17 +者 347 +洇 3 +了 76178 +看 3781 +名 6818 +徐 1061 +鬓 2 +粒 63 +堕 2 +蔗 2 +暖 118 +掘 16 +肚 14 +阡 3 +鞠 35 +钢 99 +冤 11 +紧 312 +度 293 +娩 1 +末 422 +搭 197 +芮 14 +踱 3 +辰 2 +男 327 +隶 4 +刹 30 +⑵ 6 +鼻 17 +尽 506 +痴 14 +晁 4 +荃 7 +擂 6 +浇 84 +仆 1 +诈 6 +硕 5 +委 64 +佛 32 +汝 16 +捻 4 +透 118 +陡 34 +炬 2 +铢 55 +健 252 +凤 20 +寨 19 +葭 1 +旬 15 +甡 1 +乱 538 +述 26 +零 163 +特 176 +司 87 +彻 5 +图 1202 +籽 4 +饿 69 +要 20607 +栀 3 +沃 8 +辅 35 +脆 13 +甭 13 +箍 3 +序 62 +绢 4 +逐 57 +钓 32 +异 45 +阔 19 +会 6134 +舜 1 +虚 100 +焦 69 +吨 1304 +被 7146 +训 54 +躯 10 +贮 9 +冉 43 +鹜 1 +尸 6 +傻 34 +强 1735 +弓 13 +唾 1 +见 1168 +血 186 +迅 5 +蹄 10 +苇 5 +腆 1 +藉 3 +澍 11 +痣 4 +经 1506 +金 1144 +遐 1 +遏 2 +卒 11 +筝 1 +笞 1 +佚 1 +悲 18 +蛟 1 +敞 4 +婆 1 +翥 17 +鹤 13 +琐 1 +闩 1 +周 4623 +坪 7 +语 101 +浮 41 +恰 65 +艇 26 +晴 46 +奶 60 +僻 3 +囿 18 +调 294 +E 29 +验 30 +妙 58 +吓 39 +玒 3 +隔 144 +洙 1 +芜 1 +星 159 +颠 16 +客 82 +弥 13 +纤 1 +甩 48 +钨 4 +瞪 17 +淳 4 +港 450 +涮 1 +脱 119 +° 4 +莲 13 +朵 93 +暴 12 +犀 1 +岸 45 +阿 256 +轴 5 +检 64 +郜 15 +扇 39 +臆 1 +蕉 1 +灶 27 +嫌 72 +鹏 1679 +兑 134 +灏 2 +畸 1 +浙 23 +拜 59 +晟 6 +剧 85 +哨 19 +衫 2 +甦 1 +淮 41 +胰 1 +葳 1 +菲 143 +杵 1 +更 7014 +穷 283 +狼 34 +梁 525 +、 134293 +匪 7 +溅 18 +耆 2 +馋 14 +昊 114 +窍 4 +邑 2 +焐 5 +划 118 +氨 8 +栖 11 +沙 128 +膛 2 +业 140 +芝 1 +茜 5 +搞 1644 +D 131 +倦 9 +钩 18 +用 5303 +瘪 8 +邳 2 +侯 229 +氮 31 +± 16 +△ 50 +朴 38 +粹 2 +硌 3 +冻 67 +寞 1 +瞿 19 +吾 22 +裁 16 +坡 54 +跃 102 +仅 1825 +纷 4 +菇 6 +聆 3 +蓉 4 +效 26 +始 103 +屎 13 +郑 719 +禹 8 +嗓 4 +雕 29 +诗 377 +酥 5 +咎 1 +摞 25 +祠 3 +绥 6 +彤 33 +哩 40 +陪 99 +贲 2 +俯 12 +腰 80 +色 107 +篷 3 +顶 261 +击 34 +幺 1 +矿 137 +瑾 15 +清 465 +澄 3 +指 591 +肆 1 +蚊 5 +稍 165 +完 681 +式 123 +瀑 5 +阕 1 +袖 5 +亚 405 +期 516 +撞 121 +堡 1 +鸥 1 +群 278 +邦 28 +溯 7 +伯 2 +釉 1 +昵 1 +尹 163 +锉 1 +纺 14 +爽 17 +钾 8 +赃 1 +久 278 +俄 1446 +胆 14 +奋 14 +富 319 +遑 3 +勒 19 +陕 46 +淘 36 +滚 55 +菜 347 +束 57 +忤 1 +卧 45 +烦 16 +门 578 +楫 2 +雪 401 +诬 3 +软 71 +眺 3 +柴 101 +筷 2 +壶 15 +屹 2 +养 400 +建 1281 +叼 3 +睿 2 +链 7 +言 231 +溃 3 +褂 1 +超 218 +肇 2 +蜀 12 +枉 13 +骋 2 +妍 66 +砌 27 +禅 5 +. 6 +皓 7 +儒 14 +梗 7 +辙 6 +丘 26 +抛 97 +撮 1 +膝 12 +怜 4 +管 715 +稠 6 +孚 2 +尤 74 +垄 5 +莱 4 +舰 14 +苟 21 +羹 2 +常 683 +值 137 +毁 165 +仃 8 +镌 3 +荆 14 +立 430 +蕊 3 +种 5155 +塌 32 +n 4 +发 1095 +剐 1 +酒 441 +痕 3 +这 23299 +乘 262 +招 164 +赚 168 +杞 1 +寡 10 +绣 17 +奢 14 +工 137 +烧 155 +0 70 +韩 832 +器 3 +番 221 +衬 8 +泯 8 +轮 830 +菱 7 +扰 5 +磷 22 +幸 16 +函 73 +灼 4 +铿 7 +檀 3 +七 637 +概 7 +有 30901 +俭 12 +程 369 +蘖 2 +复 68 +小 3834 +美 3385 +冒 253 +髯 5 +栗 8 +伙 44 +踪 7 +戛 1 +辛 63 +窠 2 +鸣 86 +倚 14 +粤 63 +厦 8 +眩 1 +氯 4 +侮 1 +嘶 2 +佤 1 +砷 2 +家 4768 +Y 4 +纸 145 +刻 102 +炼 12 +乃 88 +观 119 +浅 50 +泄 9 +杉 4 +屏 3 +翎 4 +卑 4 +狐 7 +街 304 +余 2289 +付 178 +扛 58 +铎 30 +胜 531 +琬 5 +章 360 +另 1134 +革 19 +雨 297 +闪 35 +赓 7 +修 343 +捱 1 +顷 13 +役 22 +绸 3 +兽 6 +较 2957 +沅 2 +葩 1 +月 1902 +宋 767 +碍 15 +倒 358 +唔 1 +优 166 +肝 20 +斟 10 +窄 52 +骡 1 +笠 1 +粥 7 +冧 1 +在 78485 +琪 10 +袭 51 +涯 10 +踮 1 +抱 245 +′ 6 +撵 9 +娶 31 +纹 11 +X 9 +去 4092 +尺 62 +炽 2 +酹 1 +瘾 25 +促 168 +桂 71 +泅 1 +资 121 +燠 1 +杈 2 +摊 57 +芹 17 +铕 1 +畔 61 +仙 5 +潘 390 +虞 24 +峥 3 +坨 1 +毫 3 +路 1426 +洼 4 +英 561 +柳 161 +垒 24 +整 140 +究 46 +烽 3 +兼 867 +百 918 +倏 2 +袂 1 +谅 4 +址 7 +昉 1 +笋 3 +舐 1 +砍 118 +刑 33 +霓 1 +炒 115 +吕 396 +喔 1 +碘 42 +丙 3 +瓮 1 +思 132 +膜 30 +琛 8 +宠 8 +C 93 +颢 1 +倔 1 +亮 283 +舱 34 +掰 15 +育 84 +戟 1 +夷 5 +医 65 +冼 8 +难 1493 +酋 1 +诀 3 +裂 28 +捷 71 +拆 106 +筋 6 +黎 269 +剑 73 +呕 1 +量 116 +乙 42 +还 10551 +绑 22 +履 5 +照 202 +罐 13 +险 78 +哪 343 +寓 28 +婿 1 +杳 1 +葵 5 +轿 4 +祷 2 +棕 2 +祥 14 +长 1764 +盾 39 +趁 55 +漂 15 +M 5 +希 24 +骏 23 +躬 11 +疑 11 +吐 75 +邓 2186 +厕 12 +枝 69 +由 7542 +碣 1 +B 222 +隧 1 +锦 19 +倨 1 +猪 185 +踬 1 +珩 8 +戴 485 +康 141 +妹 32 +砸 102 +钻 123 +笺 4 +势 112 +汀 1 +紊 1 +毅 110 +蛇 31 +坠 16 +忍 55 +奎 47 +嗑 1 +呐 10 +青 272 +仗 42 +赖 74 +拟 129 +巡 7 +屠 17 +罢 68 +啦 115 +蹦 18 +迭 19 +蹬 19 +旱 52 +想 2414 +杲 5 +绷 17 +嗲 1 +憾 4 +矫 2 +勿 46 +酾 1 +洁 52 +辂 3 +昇 3 +脉 8 +铭 21 +簋 1 +- 15 +锑 5 +璐 10 +倓 1 +瞒 17 +渗 11 +扮 11 +朝 265 +舟 44 +锚 4 +骤 20 +储 27 +京 1335 +樯 1 +睨 1 +撰 5 +耳 63 +缘 55 +茵 8 +帷 1 +夹 60 +渺 2 +吻 11 +嚼 24 +爿 6 +流 249 +桃 18 +珊 3 +屋 123 +菊 111 +镑 7 +铐 2 +道 871 +单 269 +裘 14 +葛 132 +诚 57 +曜 2 +糠 3 +殓 1 +酩 6 +都 12202 +豫 40 +只 3901 +潭 15 +们 4891 +拴 30 +她 5131 +寺 11 +弑 1 +盼 121 +剿 3 +苔 2 +沁 2 +瘁 1 +覃 24 +洪 198 +肉 162 +愈 105 +戊 1 +宏 46 +貉 1 +唐 629 +侗 5 +棘 2 +薛 255 +蜜 10 +素 35 +鸢 1 +骥 13 +瞧 52 +琦 29 +爪 1 +亭 11 +眨 6 +讯 4046 +膳 2 +抵 207 +邮 13 +德 370 +守 145 +夸 35 +喻 42 +隽 1 +眼 335 +县 1638 +逾 145 +捣 7 +摆 459 +慈 3 +黍 1 +档 25 +哑 6 +镐 9 +脏 83 +俗 19 +裙 5 +曝 3 +杜 508 +峡 16 +兀 1 +幢 119 +童 152 +孤 23 +韧 2 +烩 2 +若 349 +淫 5 +剪 47 +转 549 +误 110 +格 48 +数 575 +至 4088 +部 1366 +祸 14 +闻 163 +空 156 +国 5511 +逼 115 +灾 112 +谁 1262 +祭 31 +蜇 1 +把 10301 +羌 1 +碎 50 +向 8369 +盅 3 +众 92 +莘 1 +嗅 11 +昝 5 +果 150 +挟 8 +红 434 +室 84 +钦 38 +倩 10 +熨 5 +贫 53 +努 1 +中 26074 +萱 8 +新 14101 +舵 4 +W 9 +蹈 9 +鳖 9 +画 599 +猿 9 +煨 3 +豁 12 +浊 10 +评 234 +蝇 6 +垠 1 +懈 1 +忌 41 +魏 273 +风 468 +弊 19 +盒 54 +叔 17 +敛 4 +蝎 4 +柜 8 +损 38 +屡 81 +诺 9 +瓦 48 +赫 5 +约 1311 +蹭 9 +森 36 +葱 9 +曲 252 +援 54 +项 3595 +莉 44 +竺 3 +白 668 +卿 12 +一 47278 +撇 6 +掉 521 +戈 18 +蹿 10 +拯 7 +颏 1 +阐 1 +冕 7 +途 13 +怒 5 +樘 2 +褚 91 +搜 18 +悟 23 +御 4 +索 31 +妥 18 +堤 48 +咧 4 +玩 144 +刨 29 +享 32 +吆 1 +谬 1 +梯 12 +悉 9 +芳 182 +V 4 +容 50 +示 38 +喽 4 +吼 17 +匾 16 +迁 151 +赂 1 +觅 35 +杆 45 +揉 16 +扈 13 +腊 2 +巍 30 +飏 1 +限 83 +Ⅲ 9 +燕 49 +泗 1 +毙 4 +楚 47 +[ 8 +惟 14 +捞 70 +嫣 3 +睦 3 +叩 11 +警 110 +柱 20 +晰 1 +拳 30 +敲 99 +懵 6 +对 27688 +饺 1 +闽 49 +呼 53 +企 30 +晞 14 +涂 59 +椅 7 +按 1765 +颙 3 +铂 4 +焕 3 +谗 2 +辖 45 +哦 21 +斛 2 +凄 3 +A 433 +纠 19 +颤 10 +吧 435 +垦 15 +动 317 +丫 2 +购 181 +议 55 +朱 2093 +戳 13 +▲ 114 +践 6 +阻 7 +禺 8 +钼 2 +摇 59 +草 240 +拈 7 +臊 1 +鳌 2 +弛 6 +坑 69 +盐 30 +踢 170 +汗 79 +窥 5 +觚 1 +霉 3 +巢 23 +奥 63 +垧 1 +韦 114 +否 12 +殆 1 +曰 79 +艳 57 +筹 46 +登 342 +哼 19 +偿 8 +躁 14 +殃 1 +截 37 +梅 180 +文 523 +昆 179 +抉 1 +律 15 +鲍 70 +福 75 +税 313 +炕 19 +世 180 +舞 109 +张 7355 +宣 39 +喧 4 +瘦 47 +助 118 +辫 1 +倪 85 +沭 1 +贬 16 +漉 1 +掳 1 +嘲 2 +襟 3 +羡 1 +瞻 12 +砺 2 +咽 11 +仁 14 +颓 3 +求 508 +装 263 +襄 15 +埠 2 +拉 565 +聊 64 +嵌 18 +肌 6 +监 7 +坐 690 +瓢 11 +兔 29 +湖 118 +遥 24 +蓝 143 +啜 3 +迫 19 +杰 230 +腴 1 +巷 19 +并 10496 +竹 51 +倾 71 +啼 6 +凿 30 +岔 2 +丁 606 +沂 6 +栅 1 +授 24 ++ 19 +掖 5 +夏 374 +阑 2 +钒 9 +〕 35 +熔 12 +洗 183 +望 295 +斜 28 +感 232 +鸡 160 +鬣 1 +砥 1 +利 270 +厨 7 +伫 1 +葆 27 +谭 227 +昱 2 +枰 2 +蒲 43 +怵 5 +庶 2 +宸 7 +疼 39 +儿 15 +激 18 +桅 4 +规 18 +馁 1 +】 2 +绍 1 +惊 72 +籍 37 +奏 56 +卓 23 +瓒 1 +偕 8 +诏 1 +他 19823 +橙 5 +棚 22 +苞 6 +幡 1 +忠 85 +季 183 +秤 37 +啧 1 +剩 63 +仨 5 +淬 2 +缚 6 +弩 4 +致 287 +延 22 +驹 1 +寸 46 +命 100 +酿 16 +勾 27 +退 254 +璃 1 +瞅 22 +阄 1 +肋 3 +* 180 +舌 4 +邬 11 +沓 19 +畦 5 +且 405 +焖 3 +喙 1 +眚 1 +宝 86 +娜 10 +废 58 +怠 2 +涩 6 +谨 41 +炫 1 +伪 13 +爬 137 +售 190 +堰 1 +岳 66 +鬲 1 +陌 1 +方 746 +机 108 +讽 2 +亿 334 +贾 444 +铃 8 +附 1689 +屈 37 +揍 6 +觑 3 +桐 4 +泓 18 +乔 390 +狗 67 +员 77 +坚 27 +寝 2 +统 36 +换 548 +查 297 +晤 4 +楦 3 +椽 4 +烫 22 +班 283 +雯 72 +啮 1 +念 99 +年 15535 +拷 4 +全 2007 +睇 1 +摸 99 +材 11 +鲸 6 +邀 58 +吃 1447 +厂 1035 +的 358151 +鲁 186 +馆 101 +羊 224 +忻 2 +昏 24 +佬 2 +谓 30 +懂 292 +五 2471 +列 326 +错 193 +窜 25 +鸟 142 +肠 15 +探 59 +贩 36 +篆 2 +犬 5 +失 183 +碰 56 +户 1338 +贯 8 +改 676 +蒸 20 +绶 1 +螺 1 +允 6 +参 51 +雄 39 +秆 2 +配 324 +聋 13 +I 2 +拌 21 +晏 8 +毒 105 +何 1061 +滔 2 +猝 1 +凖 1 +留 420 +孝 7 +藻 4 +州 148 +Ⅱ 8 +惠 21 +董 715 +来 10292 +蛤 1 +触 25 +浩 54 +注 75 +火 302 +迪 2 +独 98 +谏 3 +问 1092 +饱 47 +声 400 +米 1779 +谴 1 +酉 1 +维 25 +琨 12 +湿 67 +隅 3 +霄 38 +宇 70 +堆 136 +粉 17 +憋 28 +萎 2 +褐 2 +涓 3 +井 165 +演 173 +钙 25 +甘 80 +阚 7 +窝 36 +龟 54 +股 538 +祎 1 +邰 2 +‰ 1 +质 120 +个 17171 +咳 4 +琮 8 +碱 27 +〉 65 +纵 30 +缴 105 +获 902 +耶 10 +榻 1 +俞 184 +便 1697 +嘴 91 +郁 49 +捡 60 +剂 14 +雅 31 +篇 754 +渍 4 +懋 1 +鹊 2 +拍 253 +柏 21 +滕 38 +受 1739 +啥 135 +邻 13 +翟 76 +属 441 +胡 1587 +Ⅰ 3 +缺 206 +桦 34 +狭 2 +饰 23 +巳 1 +绵 3 +恶 48 +婴 7 +智 60 +歼 2 +送 1799 +冀 65 +阅 26 +瞄 5 +领 190 +尉 304 +床 130 +舍 46 +掌 19 +树 672 +丕 1 +北 340 +炖 9 +喘 18 +铨 1 +宜 67 +弟 17 +怡 47 +抢 197 +春 323 +欧 624 +梦 281 +氩 1 +涨 48 +祉 1 +溪 15 +眯 7 +钮 24 +眭 1 +摈 1 +樽 1 +讼 1 +沾 46 +遁 3 +净 157 +啃 56 +狂 50 +际 7 +词 115 +腋 1 +廊 10 +才 3648 +菌 19 +杏 3 +擎 17 +桑 30 +槐 6 +浓 134 +亢 13 +脊 3 +返 73 +南 873 +僖 1 +祛 7 +囚 4 +鳞 6 +凑 76 +散 129 +拢 23 +歧 2 +跨 1049 +八 1394 +仪 165 +召 9 +坯 5 +铮 12 +称 857 +② 42 +荷 84 +胶 17 +摹 2 +旸 2 +使 8224 +虔 2 +刀 154 +鄂 52 +各 4288 +颇 451 +师 199 +祖 19 +而 9891 +亓 2 +椒 2 +涕 2 +气 283 +化 108 +嘘 3 +媛 6 +甚 175 +粟 13 +> 4 +峙 21 +吱 1 +斥 14 +薰 3 +辩 11 +劫 17 +贪 41 +箱 78 +溉 1 +纳 30 +· 238 +茶 139 +蘸 13 +蔺 4 +压 238 +沿 211 +漾 5 +病 465 +职 205 +李 8285 +译 51 +仓 16 +喏 2 +郗 4 +卖 857 +埙 2 +噘 3 +嘎 3 +锻 1 +糟 12 +握 75 +窑 26 +慢 127 +日 1839 +⑤ 10 +武 195 +俩 184 +型 71 +浪 102 +凭 227 +驰 17 +绳 40 +饲 2 +匿 2 +捶 3 +蟹 5 +槽 3 +汁 2 +锅 82 +) 23886 +脍 3 +悌 2 +搏 22 +檐 4 +专 189 +滂 1 +逗 16 +玖 1 +隘 1 +颜 86 +羞 14 +挡 45 +抠 14 +攥 15 +撤 59 +亨 2 +别 304 +催 68 +启 27 +垮 52 +妲 1 +喆 8 +补 224 +达 3535 +十 1417 +畅 77 +哄 23 +密 32 +终 145 +手 937 +饶 33 +背 219 +荀 9 +角 121 +隆 8 +筏 1 +遗 10 +取 270 +静 101 +盘 292 +祝 241 +龄 12 +荡 20 +桧 1 +详 7 +佩 10 +滨 30 +跪 44 +六 995 +矮 26 +筱 1 +平 579 +雒 1 +H 11 +旺 81 +俾 2 +犁 52 +匀 5 +适 32 +甄 6 +妇 7 +( 23888 +赎 4 +尊 70 +明 429 +输 186 +冗 1 +隙 5 +缅 21 +宛 5 +琚 1 +额 64 +夜 313 +抡 17 +挠 3 +枣 28 +亩 1369 +玫 2 +谪 2 +炭 12 +疯 19 +阮 81 +叭 5 +烨 45 +崴 49 +∶ 17 +携 51 +趿 1 +举 176 +污 24 +埃 128 +遂 79 +铅 45 +啄 5 +穆 45 +廉 67 +届 4824 +─ 1 +慌 21 +● 306 +虎 405 +黢 1 +法 889 +赔 52 +剖 3 +橹 1 +鹞 1 +恢 1 +蕤 1 +珂 6 +滩 11 +轨 18 +叫 862 +汪 316 +郭 631 +公 151 +闯 275 +孰 27 +珲 2 +涿 1 +扶 139 +曹 468 +读 822 +藩 1 +楼 433 +擒 7 +乾 14 +刁 25 +圃 2 +琅 7 +善 108 +备 89 +骆 32 +很 6590 +耍 16 +漓 2 +袒 1 +谕 2 +阙 10 +笛 3 +钚 3 +庞 77 +戡 2 +掠 11 +羚 2 +营 84 +斤 116 +闰 1 +温 373 +侨 33 +猫 49 +沪 186 +逭 1 +冬 160 +锯 13 +皮 101 +娱 8 +宰 33 +S 3 +嘟 1 +栽 119 +贿 5 +剁 10 +烂 47 +奇 87 +俐 3 +捋 5 +糊 10 +恍 3 +娇 13 +敏 95 +腌 12 +体 51 +棒 28 +汕 4 +藏 296 +噙 10 +埘 1 +筛 5 +硝 3 +姜 464 +绞 7 +⑥ 6 +藤 14 +筐 18 +蹩 1 +卫 43 +泪 92 +遭 202 +目 64 +驱 7 +巴 926 +慷 5 +虹 50 +死 549 +浔 3 +弗 1 +羁 2 +邃 3 +厅 113 +庇 2 +蒋 607 +融 105 +昌 14 +谐 5 +隗 6 +熙 7 +倘 25 +岛 180 +莞 4 +帜 2 +窟 2 +□ 3 +搠 1 +患 276 +澧 1 +接 420 +产 280 +账 173 +霆 1 +鞭 5 +犯 161 +厉 45 +碳 10 +R 1 +宵 2 +娴 7 +收 771 +耸 9 +治 503 +挺 110 +辽 39 +哒 1 +呀 198 +烃 1 +坂 1 +织 45 +秉 2 +晌 1 +苏 438 +慎 30 +跑 575 +汐 1 +试 154 +盗 41 +啖 3 +博 38 +忝 1 +耻 9 +竟 471 +神 157 +① 44 +浦 5 +仕 1 +表 147 +歪 25 +短 326 +噬 6 +煮 49 +己 96 +壳 18 +署 27 +嘿 8 +泻 17 +疾 7 +追 172 +怔 6 +锁 68 +逃 120 +垂 30 +包 384 +粗 58 +热 329 +6 1471 +服 67 +暌 1 +戏 335 +酬 11 +沐 14 +栓 1 +寂 2 +嗯 4 +鄙 1 +厚 105 +缝 45 +府 28 +娟 22 +组 600 +蔡 375 +挥 57 +护 85 +丧 15 +润 25 +梨 17 +含 323 +霭 1 +冮 5 +铈 1 +莺 11 +赘 1 +浴 10 +镁 4 +铀 9 +埂 1 +寇 29 +狄 6 +繇 1 +奉 53 +浑 10 +盹 1 +桓 6 +濒 2 +嗖 2 +馥 1 +彝 3 +络 6 +钧 25 +鑫 19 +副 6967 +燮 4 +峰 75 +孵 5 +时 8182 +腹 18 +胸 46 +湾 5 +载 239 +身 428 +销 174 +阂 1 +徇 1 +将 15137 +墉 6 +斋 9 +钬 1 +酽 1 +掏 108 +怎 106 +赙 1 +焘 8 +刚 810 +报 858 +挤 198 +侧 33 +谦 75 +疫 1 +横 93 +环 178 +逮 11 +岱 4 +锲 9 +侈 1 +脸 223 +似 260 +殿 5 +栾 11 +品 82 +镀 14 +燃 28 +祈 5 +旋 18 +描 9 +赐 13 +乒 2 +烙 10 +绝 109 +察 25 +塞 122 +臣 9 +夺 216 +拥 38 +荤 6 +姑 5 +闫 3 +园 66 +鼓 71 +可 4369 +遮 32 +干 1499 +⑶ 5 +惹 40 +添 153 +艺 48 +份 1234 +硫 12 +诿 3 +吁 2 +喀 7 +玄 3 +妈 43 +民 429 +互 110 +候 6 +靡 2 +帝 11 +增 499 +搡 5 +酱 9 +愣 25 +∥ 2 +惰 3 +榨 4 +甫 26 +嘭 4 +炮 35 +就 16877 +叉 4 +纲 32 +宴 13 +活 580 +丽 51 +介 4 +围 208 +瑁 1 +元 9608 +奸 2 +婷 9 +莠 1 +捏 34 +胎 22 +圭 3 +比 3265 +块 762 +孟 290 +飞 446 +葡 127 +无 2035 +Ⅳ 4 +轧 21 +虐 1 +桩 66 +韬 17 +僮 1 +山 569 +踩 83 +女 2352 +辨 31 +茫 2 +裾 1 +袁 356 +锂 13 +内 3375 +逄 12 +缆 13 +安 366 +倭 1 +萌 12 +熬 53 +辑 33 +渐 89 +誓 10 +洒 84 +榕 7 +唯 57 +钗 1 +霖 2 +刘 3775 +焚 12 +四 2873 +碟 15 +缄 1 +映 45 +伦 7 +让 3499 +褪 12 +听 899 +炯 52 +献 318 +媳 1 +破 263 +撷 1 +莹 20 +舸 42 +廷 4 +款 273 +濡 1 +勃 8 +孜 1 +鳇 1 +蛋 97 +竣 2 +捎 34 +近 3515 +乐 231 +钋 2 +浒 1 +衔 6 +哗 2 +靖 17 +叙 99 +黛 1 +党 5204 +川 93 +食 88 +锐 45 +拣 36 +敢 444 +车 1087 +坦 40 +闭 54 +棺 3 +忱 2 +鹰 26 +舒 159 +蝶 13 +任 1934 +省 1890 +拱 11 +刃 8 +喂 75 +算 509 +簇 11 +嬉 4 +骈 1 +莎 18 +休 41 +源 112 +吗 720 +匙 2 +帛 2 +渭 3 +鲜 67 +实 361 +蜡 6 +肤 6 +氧 32 +侦 10 +瘫 10 +锭 63 +咬 52 +逯 1 +玮 5 +弱 182 +稳 196 +架 357 +茹 6 +芸 5 +主 139 +膺 1 +洽 12 +沼 1 +设 481 +睁 34 +雀 8 +剃 6 +泊 8 +充 30 +郄 5 +忆 38 +等 17314 +晋 79 +姊 1 +廿 1 +瀚 2 +凌 64 +佑 1 +裔 2 +呗 6 +勘 4 +糜 2 +缤 1 +条 3372 +扣 161 +既 2128 +腥 1 +癫 1 +镭 2 +铬 7 +灯 117 +叮 5 +影 52 +驳 7 +已 10060 +饵 3 +锨 7 +泼 26 +课 200 +需 635 +阪 1 +傅 356 +帆 47 +膏 5 +戎 7 +云 275 +伐 22 +态 17 +谒 7 +疗 15 +龛 3 +通 370 +胯 1 +悱 1 +掣 7 +肥 69 +愤 8 +涧 9 +檩 2 +垫 22 +株 181 +棱 4 +甬 7 +冯 448 +刮 85 +纱 17 +缰 3 +害 114 +洱 1 +头 906 +抹 63 +茸 1 +滞 10 +沽 1 +贼 27 +訾 3 +雁 86 +着 10092 +郅 18 +兄 12 +叠 28 +嫉 1 +操 94 +敌 80 +侍 2 +扎 129 +滑 90 +佐 6 +诓 2 +裕 9 +癖 3 +做 4513 +毓 1 +租 133 +杠 9 +揣 35 +③ 40 +胥 15 +Ⅴ 8 +书 1372 +芽 14 +韫 12 +哭 106 +啬 1 +凯 41 +彰 6 +奴 4 +旷 4 +晶 32 +苹 1 +恺 2 +泽 14 +阁 13 +磁 13 +咂 4 +熄 9 +崇 13 +庆 115 +灭 65 +朋 8 +颊 1 +萍 43 +斌 156 +意 335 +丑 33 +辐 1 +锗 2 +皖 32 +则 2228 +厘 4 +; 16336 +尝 122 +够 310 +骞 9 +挣 143 +急 236 +货 187 +亦 270 +讨 47 +吭 2 +鄯 1 +蒜 16 +鲲 6 +堵 102 +速 44 +船 297 +掸 3 +肺 31 +氽 1 +秋 152 +千 776 +哂 2 +酷 2 +嵇 6 +细 201 +婉 4 +磊 270 +拎 32 +蹑 1 +运 268 +俘 6 +盖 262 +牙 39 +变 1115 +竞 66 +蟠 1 +荣 226 +哺 5 +桀 1 +滦 1 +辄 6 +嗬 32 +酯 3 +狮 12 +翰 3 +页 199 +敷 6 +批 2513 +轻 190 +胺 1 +淼 5 +西 424 +禁 85 +待 258 +喉 9 +合 282 +袋 77 +亏 78 +膑 2 +耐 65 +枕 5 +昔 8 +骗 79 +外 1765 +尘 13 +渴 18 +席 149 +沣 1 +欢 24 +两 13710 +斩 15 +萨 7 +未 1411 +箭 29 +纯 96 +钳 2 +瞵 1 +阴 47 +褶 2 +永 187 +莽 10 +璋 3 +放 738 +私 80 +础 2 +魂 71 +必 248 +鹄 1 +勇 216 +兆 3 +呈 283 +棋 121 +坊 3 +母 93 +济 29 +恐 23 +蓓 5 +荒 27 +晔 8 +奖 464 +滥 83 +烛 1 +罚 176 +绛 5 +剜 1 +盟 31 +镞 1 +泣 11 +止 114 +迥 2 +拧 27 +早 1098 +士 32 +马 1168 +絮 4 +灰 33 +铳 1 +韵 35 +淹 36 +佺 1 +揽 33 +扼 4 +替 115 +蕾 21 +礁 2 +噪 6 +% 145 +庄 128 +切 135 +唉 9 +针 86 +栋 85 +踏 220 +脑 83 +写 1717 +搓 21 +排 427 +蜕 1 +濯 4 +稗 1 +首 2500 +粘 18 +逛 72 +龚 310 +匝 2 +琼 40 +队 777 +簿 4 +谣 3 +订 127 +交 740 +慰 10 +枪 91 +焱 6 +捉 31 +琳 87 +玲 150 +皴 1 +费 242 +沸 1 +总 1962 +挽 36 +押 13 +祁 26 +虾 39 +黄 1310 +片 920 +准 359 +镉 4 +哈 221 +腠 1 +傣 4 +乏 11 +慑 3 +插 108 +穗 24 +玥 2 +遛 2 +诎 1 +棠 1 +询 2 +锜 1 +级 679 +执 39 +懦 1 +填 107 +差 508 +共 2278 +味 109 +史 299 +直 253 +腕 16 +恻 1 +俺 60 +拼 75 +颁 13 +弄 171 +率 192 +逆 13 +钉 31 +锈 5 +辏 1 +谎 1 +脐 1 +戒 58 +蚕 6 +朔 6 +宗 94 +砖 86 +踅 1 +军 525 +帚 1 +劝 111 +猜 19 +瞟 2 +吞 22 +趣 34 +溥 4 +伤 215 +控 39 +撩 9 +第 9 +瓜 49 +邱 202 +焰 7 +殷 76 +油 212 +贸 18 +为 28856 +抽 78 +壁 17 +罄 2 +哉 31 +畈 2 +歌 341 +俏 13 +惑 10 +腐 20 +扒 18 +伏 36 +糙 1 +嵘 6 +卜 51 +域 3 +瑞 68 +楠 46 +牾 2 +以 14931 +⑧ 1 +徽 5 +竭 2 +兰 111 +割 70 +靴 2 +请 1199 +桶 176 +苍 2 +浸 20 +臻 19 +拽 20 +柿 2 +码 10 +骂 78 +帅 164 +径 4 +吉 214 +漏 84 +抒 11 +昕 9 +颖 35 +庚 9 +初 1103 +真 978 +璞 17 +校 203 +责 52 +严 325 +仇 15 +茧 6 +悦 31 +夫 23 +弈 4 +扳 33 +弯 46 +粮 255 +冰 162 +申 95 +劲 94 +阵 51 +土 277 +趸 5 +人 16955 +央 1 +秀 21 +嫂 5 +幅 502 +升 263 +诙 1 +益 27 +诌 1 +住 1276 +噌 4 +拒 106 +晕 8 +柔 16 +字 823 +绚 1 +坟 18 +哞 2 +衡 18 +赣 32 +翠 16 +捧 147 +惦 4 +摩 16 +旨 5 +凰 2 +陵 4 +避 43 +豹 7 +毕 111 +腻 8 +板 53 +宁 225 +稀 28 +射 86 +缀 14 +镖 1 +沏 2 +伎 1 +成 3033 +O 1 +颗 297 +龙 265 +帘 4 +力 239 +钟 281 +霞 35 +计 236 +薇 22 +违 20 +N 1 +逞 5 +到 18289 +吴 1929 +边 636 +游 216 +抻 5 +贺 180 +蒿 1 +练 137 +逊 12 +巅 14 +迂 29 +陈 3235 +啊 398 +行 878 +低 1404 +藕 10 +馏 1 +策 64 +忙 390 +凝 9 +停 360 +哟 40 +非 793 +毡 2 +代 1006 +躺 108 +汤 196 +惧 11 +晨 82 +硬 256 +糯 2 +置 81 +煲 2 +闵 106 +桨 8 +迹 11 +邕 2 +恼 3 +松 142 +布 72 +如 2684 +历 33 +眉 12 +喊 156 +植 97 +氏 7 +澎 11 +挑 123 +易 273 +→ 2 +苯 4 +※ 6 +9 626 +鹅 10 +创 583 +兮 24 +淋 13 +炜 24 +吟 26 +迄 8 +次 9654 +渣 16 +败 142 +沤 2 +性 26 +暨 150 +薪 25 +夭 3 +微 29 +錱 1 +阳 83 +冲 278 +电 7381 +钴 6 +样 73 +悼 6 +穴 13 +魁 2 +酊 1 +囊 2 +鳄 1 +遇 213 +鼠 26 +盈 20 +迎 236 +拐 23 +晓 25 +氢 16 +敕 2 +绘 54 +牛 311 +榆 2 +峻 18 +瑟 2 +捺 4 +饭 227 +磬 3 +屯 2 +危 29 +勰 12 +苒 1 +/ 397 +跺 3 +突 44 +堂 63 +醇 1 +分 2058 +圈 151 +残 60 +吊 32 +袍 2 +与 19851 +抑 5 +耒 1 +撕 20 +庙 22 +8 1097 +玛 1 +尚 641 +邝 3 +焜 1 +欠 192 +辣 10 +蠢 6 +沥 1 +贤 39 +煌 13 +蚩 1 +木 73 +宫 42 +帮 402 +励 15 +麓 6 +钵 3 +锴 2 +颈 14 +伸 72 +肽 1 +显 159 +嫁 44 +心 869 +糅 2 +采 108 +雉 5 +毋 3 +告 126 +棍 5 +浣 4 +乎 39 +苑 13 +捐 227 +染 84 +恒 19 +姗 6 +给 5485 +憎 3 +郝 102 +兜 17 +驴 9 +泥 49 +赤 11 +臧 17 +杨 1834 +狱 4 +印 651 +石 666 +屁 1 +骁 1 +嗨 6 +能 9038 +晾 11 +威 33 +简 48 +弃 41 +颂 44 +肢 2 +彀 1 +嘉 34 +钊 13 +于 8381 +我 13411 +掐 12 +窖 3 +猛 99 +岚 10 +逝 19 +农 195 +生 559 +模 5 +梢 1 +谥 1 +涤 3 +愧 7 +芦 2 += 6 +砭 1 +累 170 +爱 960 +现 540 +傲 19 +吵 28 +踹 4 +妞 3 +政 123 +锡 14 +居 461 +璠 1 +衍 21 +槌 3 +赏 47 +从 12825 +扑 119 +提 405 +垢 6 +套 881 +竖 29 +忘 346 +回 1040 +诠 1 +佣 1 +绺 2 +跤 12 +慧 19 +苦 285 +〔 35 +姬 18 +绮 2 +台 1276 +靳 53 +呵 46 +间 1611 +楷 6 +迸 3 +荻 17 +恽 2 +臼 1 +曾 2845 +境 35 +形 103 +宅 6 +娄 23 +皇 2 +醉 49 +〈 64 +乖 3 +辍 5 +渌 1 +斑 5 +舔 3 +店 330 +崖 19 +香 143 +涅 3 +钛 13 +功 133 +谠 1 +讥 3 +憩 1 +怨 19 +岫 2 +挪 30 +煸 2 +镜 24 +炳 1 +露 74 +核 250 +欺 9 +昼 5 +抿 3 +脾 12 +局 717 +寅 3 +雇 34 +商 142 +凉 23 +馍 2 +半 993 +乌 122 +扔 91 +邸 3 +塘 28 +鼎 11 +缠 23 +募 4 +煞 26 +淡 63 +池 41 +棣 4 +掺 21 +该 2485 +褒 2 +敦 2 +恨 37 +端 149 +饮 61 +鉴 42 +价 162 +赶 228 +茎 10 +禾 3 +拿 1240 +腾 45 +堃 1 +恪 1 +碗 110 +疆 20 +焉 48 +邈 1 +谋 145 +伍 197 +二 2793 +徙 1 +穹 4 +澜 4 +题 278 +君 67 +定 504 +障 8 +贡 5 +昧 10 +您 586 +措 2 +弭 6 +纬 6 +妮 1 +唱 396 +钰 22 +霁 6 +论 249 +朽 5 +房 286 +兴 354 +审 76 +诊 8 +跷 7 +陇 12 +光 454 +烈 19 +及 4596 +位 5797 +槎 3 +救 182 +柒 2 +捕 20 +拔 41 +鹗 1 +飘 110 +瑛 21 +燎 2 +坝 19 +牟 25 +赡 1 +泠 6 +衣 67 +顺 79 +步 744 +旦 10 +惨 12 +揪 23 +彭 672 +驯 4 +卵 6 +昨 4 +楹 4 +裸 1 +戍 1 +找 994 +曼 2 +承 12 +岁 2433 +市 2154 +骅 3 +理 134 +炉 21 +趋 145 +刊 38 +笃 7 +栎 1 +撑 68 +投 317 +茔 1 +得 5482 +尖 19 +墙 155 +奠 1 +霜 20 +原 1363 +禄 5 +没 1716 +丢 142 +欤 2 +萦 1 +肩 68 +锄 10 +航 22 +庭 22 +L 6 +钱 2985 +田 729 +决 64 +防 203 +猴 7 +弋 1 +琴 74 +秃 4 +鹂 3 +魄 1 +呆 74 +先 990 +跋 6 +削 30 +仍 2054 +每 2015 +晒 48 +志 196 +丸 11 +痛 85 +婚 13 +坜 1 +泡 61 +赠 76 +解 175 +舶 1 +此 3031 +⑦ 3 +惩 11 +慨 7 +巫 13 +续 50 +彬 31 +确 186 +铱 6 +镰 4 +凳 14 +咒 4 +却 3158 +迷 44 +飨 22 +裹 44 +耕 33 +旻 3 +揿 1 +封 398 +证 140 +震 110 +选 493 +冈 1 +洋 100 +犊 3 +不 30314 +斐 24 +脓 1 +扯 37 +7 1025 +媚 6 +谡 1 +溢 35 +认 97 +憨 7 +紫 18 +捆 47 +鸭 42 +蹙 2 +爵 2 +根 301 +攻 126 +溺 1 +肾 25 +籁 4 +悖 8 +寄 336 +均 1387 +铆 3 +测 23 +乍 34 +欣 42 +桌 49 +鹿 71 +罗 1139 +糖 69 +秘 14 +镛 2 +矜 4 +象 16 +珑 3 +楣 1 +滢 1 +诤 1 +擦 79 +恩 35 +鹭 1 +壮 55 +痰 21 +关 464 +盲 4 +牵 78 +莪 1 +虽 682 +漫 33 +摔 72 +征 100 +窃 42 +邪 25 +馅 11 +璇 12 +圆 109 +玉 65 +刈 2 +事 1823 +焊 15 +谌 3 +抓 1518 +攒 27 +— 1865 +岗 147 +编 143 +骚 1 +娘 54 +多 18209 +喝 290 +俎 1 +澡 4 +渠 40 +铣 2 +财 97 +掩 24 +隐 18 +颉 1 +劳 50 +甲 47 +况 5 +铟 1 +伶 2 +坞 1 +施 216 +肿 15 +哀 7 +翁 38 +诡 1 +哇 17 +珉 6 +版 268 +滋 2 +煊 1 +柑 6 +族 25 +拓 25 +祢 8 +联 141 +鳗 1 +篙 2 +盛 167 +奚 20 +瑜 35 +烟 130 +卞 33 +信 531 +习 21 +赢 155 +僧 2 +揩 4 +卦 2 +矩 2 +畲 2 +陨 4 +骄 8 +娃 19 +啪 5 +预 26 +琇 1 +劈 20 +下 8658 +熊 154 +貌 10 +栏 50 +塬 1 +悔 16 +笙 1 +窘 1 +嘛 70 +潮 111 +璜 5 +借 395 +萧 90 +艰 2 +盆 81 +崭 1 +疲 11 +谷 130 +珈 1 +欹 2 +锰 9 +蔽 6 +撼 11 +耿 43 +珮 1 +轩 34 +卉 2 +之 7366 +释 19 +淌 22 +村 1258 +打 1617 +慕 21 +饥 10 +孙 1183 +高 6253 +姚 222 +铜 85 +珞 1 +裤 9 +摧 5 +拨 169 +自 1988 +篮 8 +困 43 +闲 44 +兵 246 +郴 2 +歹 1 +聿 10 +开 1885 +它 4146 +颅 2 +处 1268 +喇 1 +匈 23 +例 289 +《 13013 +暑 5 +帖 7 +缎 2 +垛 4 +砚 14 +钝 3 +甜 66 +熟 78 +亡 46 +传 283 +谢 544 +斧 10 +挨 56 +怪 81 +岭 16 +皱 8 +地 15342 +渲 1 +邵 157 +氦 5 +层 427 +磅 6 +症 24 +陆 244 +勉 7 +午 1 +赌 27 +觏 1 +邹 370 +摒 1 +腔 39 +站 1071 +存 255 +矛 7 +铝 18 +畜 93 +满 725 +你 2817 +豢 1 +旧 673 +择 28 +快 1205 +聪 18 +峭 2 +嵬 3 +积 127 +驮 12 +物 200 +右 240 +醒 48 +僵 7 +访 617 +混 43 +艾 95 +币 29 +往 678 +鬃 2 +岂 103 +妄 7 +唇 3 +皆 185 +炊 1 +涌 139 +咱 148 +析 15 +撒 71 +怕 347 +痂 1 +庖 1 +官 353 +碚 3 +吝 1 +喜 190 +办 2183 +渡 49 +侠 15 +b##b 825857 +令 1329 +推 253 +K 3 +夯 5 +嘱 5 +哲 11 +逵 9 +贷 79 +溶 9 +许 656 +落 434 +○ 34 +愿 789 +繁 20 +硅 6 +海 431 +镇 395 +集 361 +又 8529 +郊 7 +跌 230 +虑 8 +某 665 +爹 5 +恕 18 +菏 1 +廖 203 +津 105 +坛 8 +飚 6 +嗜 7 +鲤 1 +乡 757 +正 2464 +波 206 +桥 192 +曦 25 +扩 142 +祯 1 +圩 2 +即 1657 +铲 36 +灵 70 +起 5812 +件 1894 +詹 38 +诸 135 +拾 48 +腿 151 +答 299 diff --git a/coreseek/mmseg-3.2.14/data/mmseg.ini b/coreseek/mmseg-3.2.14/data/mmseg.ini new file mode 100755 index 0000000..a7c88ee --- /dev/null +++ b/coreseek/mmseg-3.2.14/data/mmseg.ini @@ -0,0 +1,5 @@ +[mmseg] +merge_number_and_ascii=0; ;合并英文和数字 abc123/x +number_and_ascii_joint=; ;定义可以连接英文和数字的字符 +compress_space=1; ;暂不支持 +seperate_number_ascii=0; ;就是将字母和数字打散 diff --git a/coreseek/mmseg-3.2.14/data/thesaurus.txt b/coreseek/mmseg-3.2.14/data/thesaurus.txt new file mode 100755 index 0000000..e69de29 diff --git a/coreseek/mmseg-3.2.14/data/uni.lib b/coreseek/mmseg-3.2.14/data/uni.lib new file mode 100755 index 0000000..adc821a Binary files /dev/null and b/coreseek/mmseg-3.2.14/data/uni.lib differ diff --git a/coreseek/mmseg-3.2.14/data/unigram.txt b/coreseek/mmseg-3.2.14/data/unigram.txt new file mode 100755 index 0000000..af1d6a8 --- /dev/null +++ b/coreseek/mmseg-3.2.14/data/unigram.txt @@ -0,0 +1,218456 @@ +真功 1 +x:1 +铅锌 1 +x:1 +不学无术 1 +x:1 +奸险 1 +x:1 +楼兰 1 +x:1 +踏步 1 +x:1 +考察队员 1 +x:1 +岗上 1 +x:1 +洪武 1 +x:1 +小腿 1 +x:1 +编译 1 +x:1 +蝶泳 1 +x:1 +空竹 1 +x:1 +小腹 1 +x:1 +营造林 1 +x:1 +流光溢彩 1 +x:1 +让座 1 +x:1 +让度 1 +x:1 +绞刑架 1 +x:1 +蕉麻 1 +x:1 +踏歌 1 +x:1 +供应部 1 +x:1 +专门法 1 +x:1 +黄鸟 1 +x:1 +苏库尔 1 +x:1 +河 187 +x:187 +造假者 1 +x:1 +台北队 1 +x:1 +湖边 1 +x:1 +追随 1 +x:1 +编读 1 +x:1 +否定者 1 +x:1 +看作 1 +x:1 +信仰主义 1 +x:1 +巾帼 1 +x:1 +好色 1 +x:1 +芦根 1 +x:1 +凳子 1 +x:1 +反 1205 +x:1205 +作战股 1 +x:1 +先人后己 1 +x:1 +传媒者 1 +x:1 +畅叙 1 +x:1 +福利会 1 +x:1 +须知 1 +x:1 +用心 1 +x:1 +枯木朽株 1 +x:1 +发射场 1 +x:1 +看似 1 +x:1 +阴宅 1 +x:1 +非正义 1 +x:1 +编订 1 +x:1 +悲号 1 +x:1 +鹿角队 1 +x:1 +二郎 1 +x:1 +集粹 1 +x:1 +悲叹 1 +x:1 +有理有据 1 +x:1 +赊购 1 +x:1 +麻省 1 +x:1 +外姓 1 +x:1 +小脚 1 +x:1 +防化兵 1 +x:1 +悚然 1 +x:1 +凹底镇 1 +x:1 +麻石 1 +x:1 +安盛 1 +x:1 +毛瑟枪 1 +x:1 +查哨 1 +x:1 +安盟 1 +x:1 +牧牛颂 1 +x:1 +五彩湾 1 +x:1 +书款 1 +x:1 +百忙之中 1 +x:1 +苏丹港 1 +x:1 +知法犯法 1 +x:1 +应 3692 +x:3692 +空空 1 +x:1 +古刹 1 +x:1 +空穴 1 +x:1 +视觉美 1 +x:1 +羊爬式 1 +x:1 +站貌 1 +x:1 +装配工 1 +x:1 +坦途 1 +x:1 +份餐 1 +x:1 +岗亭 1 +x:1 +新疆班 1 +x:1 +小臂 1 +x:1 +奸雄 1 +x:1 +以远 1 +x:1 +捉摸不定 1 +x:1 +市价 1 +x:1 +须眉 1 +x:1 +管闲事 1 +x:1 +九二六 1 +x:1 +直拨 1 +x:1 +亚型 1 +x:1 +身残 1 +x:1 +身殉 1 +x:1 +套鞋 1 +x:1 +战表 1 +x:1 +富家区 1 +x:1 +贺函 1 +x:1 +骇异 1 +x:1 +份饭 1 +x:1 +无可奉告 1 +x:1 +手术学 1 +x:1 +锯齿草 1 +x:1 +标准级 1 +x:1 +没法儿 1 +x:1 +后手 1 +x:1 +势力 1 +x:1 +中国科 1 +x:1 +本周末 1 +x:1 +遂溪 1 +x:1 +保级 1 +x:1 +外头 1 +x:1 +安的列斯 1 +x:1 +身段 1 +x:1 +纵横 1 +x:1 +潮阳 1 +x:1 +含金量 1 +x:1 +战壕 1 +x:1 +鹿 71 +x:71 +供应量 1 +x:1 +伶俐 1 +x:1 +时至今日 1 +x:1 +上 23705 +x:23705 +古县 1 +x:1 +眠山 1 +x:1 +用之不竭 1 +x:1 +蹦蹦车 1 +x:1 +职能 1 +x:1 +欢闹 1 +x:1 +县团级 1 +x:1 +份额 1 +x:1 +服用者 1 +x:1 +工具书 1 +x:1 +枯 17 +x:17 +达标赛 1 +x:1 +外壳 1 +x:1 +情真词切 1 +x:1 +小聚 1 +x:1 +安睡 1 +x:1 +独行客 1 +x:1 +后排 1 +x:1 +文化法 1 +x:1 +落脚点 1 +x:1 +多会儿 1 +x:1 +地动仪 1 +x:1 +国有 1 +x:1 +电信业者 1 +x:1 +音像版 1 +x:1 +岗位 1 +x:1 +九泉瞑目 1 +x:1 +气色 1 +x:1 +空管 1 +x:1 +看中 1 +x:1 +壑 3 +x:3 +虎口脱险 1 +x:1 +蜜蜂 1 +x:1 +福利业 1 +x:1 +平滑肌 1 +x:1 +外墙 1 +x:1 +古史 1 +x:1 +多疑 1 +x:1 +武昌站 1 +x:1 +郁郁葱葱 1 +x:1 +孤行 1 +x:1 +诉讼法 1 +x:1 +奥运会 1 +x:1 +血气方刚 1 +x:1 +吴家窑乡 1 +x:1 +看上 1 +x:1 +票子 1 +x:1 +小考 1 +x:1 +胜任 1 +x:1 +裱 1 +x:1 +次子 1 +x:1 +两头在外 1 +x:1 +计委 1 +x:1 +安眠 1 +x:1 +封建残余 1 +x:1 +人微言轻 1 +x:1 +开路先锋 1 +x:1 +贫血 1 +x:1 +清偿力 1 +x:1 +他向化 1 +x:1 +增减 1 +x:1 +水落石出 1 +x:1 +太公 1 +x:1 +猛丁 1 +x:1 +暴发户 1 +x:1 +唐家庄 1 +x:1 +壶流河 1 +x:1 +寒潮 1 +x:1 +旱船 1 +x:1 +慢条斯理 1 +x:1 +埋三怨四 1 +x:1 +错讹 1 +x:1 +高低杠 1 +x:1 +小胜 1 +x:1 +哲思 1 +x:1 +纵步 1 +x:1 +次官 1 +x:1 +陵园路 1 +x:1 +气节 1 +x:1 +治军 1 +x:1 +新老交替 1 +x:1 +其次 1 +x:1 +缕儿 1 +x:1 +八角楼 1 +x:1 +铅铁 1 +x:1 +小肠 1 +x:1 +独占资本 1 +x:1 +错话 1 +x:1 +至情至性 1 +x:1 +警卫队 1 +x:1 +人类学 1 +x:1 +铃虫 1 +x:1 +训练班 1 +x:1 +不育症 1 +x:1 +冰壶 1 +x:1 +错误 1 +x:1 +今年底 1 +x:1 +千次率 1 +x:1 +意识 1 +x:1 +街名 1 +x:1 +房舍 1 +x:1 +悲剧 1 +x:1 +e##e 825857 +x:825857 +缅甸 1 +x:1 +拨改贷 1 +x:1 +遮阳 1 +x:1 +总商会 1 +x:1 +邹庄镇 1 +x:1 +短撅撅 1 +x:1 +集结 1 +x:1 +枯木逢春 1 +x:1 +溜滑 1 +x:1 +依依 1 +x:1 +后患 1 +x:1 +祛痰活血 1 +x:1 +左膝 1 +x:1 +升赏 1 +x:1 +贺匾 1 +x:1 +缓坡 1 +x:1 +花生饼 1 +x:1 +传播点 1 +x:1 +货运界 1 +x:1 +辩论声 1 +x:1 +连跑带跳 1 +x:1 +仔细 1 +x:1 +炊帚 1 +x:1 +赏月 1 +x:1 +贺兰 1 +x:1 +披 61 +x:61 +好者 1 +x:1 +承德 1 +x:1 +法治论 1 +x:1 +祝家庄镇 1 +x:1 +好耍 1 +x:1 +轻歌曼舞 1 +x:1 +后悔 1 +x:1 +无异者 1 +x:1 +麻田 1 +x:1 +风中之烛 1 +x:1 +气腹 1 +x:1 +摸索 1 +x:1 +谈道 1 +x:1 +浩气长存 1 +x:1 +婚介所 1 +x:1 +贺卡 1 +x:1 +九三学社 1 +x:1 +拖住 1 +x:1 +肩摩毂击 1 +x:1 +配音 1 +x:1 +诘问 1 +x:1 +悲凉 1 +x:1 +校长 1 +x:1 +银灰 1 +x:1 +外客 1 +x:1 +兢 22 +x:22 +供货商 1 +x:1 +棋友 1 +x:1 +城关乡 1 +x:1 +修养论 1 +x:1 +自愿性 1 +x:1 +陬 1 +x:1 +石壕吏 1 +x:1 +践 6 +x:6 +集约 1 +x:1 +演示厅 1 +x:1 +外宾 1 +x:1 +咱村 1 +x:1 +轻骑兵 1 +x:1 +楼台 1 +x:1 +可怜相 1 +x:1 +千难万劫 1 +x:1 +麻痹 1 +x:1 +巾帕 1 +x:1 +藏医科 1 +x:1 +单干户 1 +x:1 +运动感 1 +x:1 +豫港队 1 +x:1 +风情万种 1 +x:1 +外存 1 +x:1 +外孙 1 +x:1 +单人滑 1 +x:1 +拆迁房 1 +x:1 +江河行地 1 +x:1 +圣路易斯 1 +x:1 +晴到少云 1 +x:1 +须生 1 +x:1 +羊册镇 1 +x:1 +套间 1 +x:1 +概 7 +x:7 +后怕 1 +x:1 +赏析 1 +x:1 +视而不见 1 +x:1 +切齿痛恨 1 +x:1 +嘉奖 1 +x:1 +婚恋 1 +x:1 +校门 1 +x:1 +麻疹 1 +x:1 +配 324 +x:324 +燕窝镇 1 +x:1 +演剧队 1 +x:1 +楼厦 1 +x:1 +真假 1 +x:1 +指事 1 +x:1 +赊账 1 +x:1 +婿乡 1 +x:1 +锐角 1 +x:1 +风风光光 1 +x:1 +维族舞 1 +x:1 +拨乱反正 1 +x:1 +好胜 1 +x:1 +棋协 1 +x:1 +岸站 1 +x:1 +折款 1 +x:1 +小脑 1 +x:1 +信奉者 1 +x:1 +绝对数 1 +x:1 +鸡冠花 1 +x:1 +可燃物 1 +x:1 +撅 2 +x:2 +石化部 1 +x:1 +揣摩 1 +x:1 +太史 1 +x:1 +至死不渝 1 +x:1 +方方正正 1 +x:1 +烩面 1 +x:1 +棋势 1 +x:1 +豆乳 1 +x:1 +钥 1 +x:1 +小艇 1 +x:1 +眼镜店 1 +x:1 +镇尺 1 +x:1 +吹风会 1 +x:1 +阴谋诡计 1 +x:1 +棋力 1 +x:1 +活字版 1 +x:1 +近程 1 +x:1 +大前提 1 +x:1 +伊川县 1 +x:1 +鄢家河 1 +x:1 +将近 1 +x:1 +打擂台 1 +x:1 +安生 1 +x:1 +我家 1 +x:1 +仉 1 +x:1 +萝卜 1 +x:1 +轰动一时 1 +x:1 +刁羊 1 +x:1 +无水硝 1 +x:1 +足球狂 1 +x:1 +次女 1 +x:1 +小船 1 +x:1 +特殊教育 1 +x:1 +不景气 1 +x:1 +次好 1 +x:1 +集美 1 +x:1 +太原 1 +x:1 +绩 10 +x:10 +真凶 1 +x:1 +小舅 1 +x:1 +另谋高就 1 +x:1 +小井庄 1 +x:1 +小舟 1 +x:1 +潭影 1 +x:1 +强弩之末 1 +x:1 +油灯壶 1 +x:1 +寻 108 +x:108 +咽喉 1 +x:1 +古刻 1 +x:1 +杏核眼 1 +x:1 +陷落地震 1 +x:1 +外婆 1 +x:1 +侈 1 +x:1 +外套 1 +x:1 +甏 1 +x:1 +短时期 1 +x:1 +真切 1 +x:1 +扫黄办 1 +x:1 +公平交易 1 +x:1 +鸡冠菜 1 +x:1 +刑警 1 +x:1 +点播 1 +x:1 +清凄寂冷 1 +x:1 +决非偶然 1 +x:1 +军事志 1 +x:1 +莲子酱 1 +x:1 +立体声 1 +x:1 +卢布 1 +x:1 +包罗万象 1 +x:1 +以一警百 1 +x:1 +拥有权 1 +x:1 +耕种人 1 +x:1 +胸怀祖国 1 +x:1 +书标 1 +x:1 +小苗 1 +x:1 +贴紧 1 +x:1 +终南山 1 +x:1 +阳离子 1 +x:1 +错觉 1 +x:1 +夜壶 1 +x:1 +坐舱 1 +x:1 +泡沫塑料 1 +x:1 +太医 1 +x:1 +珍藏卡 1 +x:1 +坐船 1 +x:1 +当 2786 +x:2786 +古典 1 +x:1 +截瘫 1 +x:1 +户主 1 +x:1 +古共 1 +x:1 +幸事 1 +x:1 +幸亏 1 +x:1 +玉戈 1 +x:1 +绞丝儿 1 +x:1 +太化 1 +x:1 +小节 1 +x:1 +外地人 1 +x:1 +情窦初开 1 +x:1 +明码 1 +x:1 +书案 1 +x:1 +握力 1 +x:1 +将军级 1 +x:1 +书桌 1 +x:1 +胜似 1 +x:1 +春花作物 1 +x:1 +自主 1 +x:1 +八节 1 +x:1 +零散 1 +x:1 +交易点 1 +x:1 +国台办 1 +x:1 +次席 1 +x:1 +库银 1 +x:1 +零数 1 +x:1 +上海滩 1 +x:1 +用药者 1 +x:1 +砝码 1 +x:1 +狮子 1 +x:1 +可控性 1 +x:1 +傣 4 +x:4 +次帅 1 +x:1 +总纲 1 +x:1 +卫生部 1 +x:1 +百科 1 +x:1 +外差 1 +x:1 +锶 4 +x:4 +护旗手 1 +x:1 +刀削面 1 +x:1 +新疆省 1 +x:1 +胃 21 +x:21 +中书令 1 +x:1 +瞻仰厅 1 +x:1 +海胆 1 +x:1 +类型学 1 +x:1 +编辑 1 +x:1 +鲅鱼圈 1 +x:1 +古国 1 +x:1 +次年 1 +x:1 +峥 3 +x:3 +立体式 1 +x:1 +保税 1 +x:1 +汉字机 1 +x:1 +电表费 1 +x:1 +多伦多市 1 +x:1 +嫡堂 1 +x:1 +配重 1 +x:1 +孪 1 +x:1 +端正 1 +x:1 +聂桥镇 1 +x:1 +其源 1 +x:1 +银元 1 +x:1 +中关园 1 +x:1 +铅酸 1 +x:1 +票幅 1 +x:1 +摘掉 1 +x:1 +压力表 1 +x:1 +运动服 1 +x:1 +雁过拔毛 1 +x:1 +不顾流俗 1 +x:1 +乳胶 1 +x:1 +干椰枣 1 +x:1 +昆布 1 +x:1 +特色菜 1 +x:1 +绢花 1 +x:1 +发射台 1 +x:1 +象形文字 1 +x:1 +十渡 1 +x:1 +风情园 1 +x:1 +燕头镇 1 +x:1 +小伙伴 1 +x:1 +竟陵 1 +x:1 +战袍 1 +x:1 +次序 1 +x:1 +贺喜 1 +x:1 +缓减 1 +x:1 +正常率 1 +x:1 +六盘山区 1 +x:1 +满湾 1 +x:1 +镇宫 1 +x:1 +脑科 1 +x:1 +廉洁勤政 1 +x:1 +后景 1 +x:1 +康定东路 1 +x:1 +缓冲 1 +x:1 +格日寺 1 +x:1 +一语双关 1 +x:1 +冰川 1 +x:1 +用途林 1 +x:1 +噬人鲨 1 +x:1 +载客 1 +x:1 +鼻化元音 1 +x:1 +上海港 1 +x:1 +昏昏欲睡 1 +x:1 +折椅 1 +x:1 +赤塔 1 +x:1 +开门见山 1 +x:1 +觞 1 +x:1 +后晌 1 +x:1 +欢送 1 +x:1 +太君 1 +x:1 +摩加迪沙 1 +x:1 +良 53 +x:53 +格陵兰 1 +x:1 +贫贱 1 +x:1 +访 617 +x:617 +阿拉斯加 1 +x:1 +虾洞村 1 +x:1 +耍花腔 1 +x:1 +东道国 1 +x:1 +历经沧桑 1 +x:1 +姑爷 1 +x:1 +姑父 1 +x:1 +承诺额 1 +x:1 +人生如梦 1 +x:1 +心高气傲 1 +x:1 +秀水河子 1 +x:1 +卫辉市 1 +x:1 +戚 53 +x:53 +后架 1 +x:1 +包装厂 1 +x:1 +查克 1 +x:1 +医术 1 +x:1 +顽者 1 +x:1 +最高点 1 +x:1 +电抗器 1 +x:1 +后果 1 +x:1 +房产处 1 +x:1 +为民除害 1 +x:1 +逗人 1 +x:1 +辞书 1 +x:1 +寒冬腊月 1 +x:1 +麻醉枪 1 +x:1 +读书节 1 +x:1 +只字不提 1 +x:1 +长远性 1 +x:1 +现钞 1 +x:1 +小营 1 +x:1 +流水处 1 +x:1 +辞世 1 +x:1 +冰层 1 +x:1 +乌拉尔州 1 +x:1 +外岗 1 +x:1 +次役 1 +x:1 +变幻莫测 1 +x:1 +劲风 1 +x:1 +空架子 1 +x:1 +建安风骨 1 +x:1 +古城 1 +x:1 +冰山 1 +x:1 +气虚 1 +x:1 +押金 1 +x:1 +错车 1 +x:1 +怨声载道 1 +x:1 +党总支 1 +x:1 +萨勃隆街 1 +x:1 +目不窥园 1 +x:1 +采莲歌 1 +x:1 +唏嗒唏嗒 1 +x:1 +战败者 1 +x:1 +交响乐队 1 +x:1 +鱼龙混杂 1 +x:1 +浑然 1 +x:1 +冰岛 1 +x:1 +香料厂 1 +x:1 +外屋 1 +x:1 +古圣 1 +x:1 +摘抄 1 +x:1 +神灵 1 +x:1 +根系 1 +x:1 +婚期 1 +x:1 +西路军 1 +x:1 +查出 1 +x:1 +放像厅 1 +x:1 +在逃犯 1 +x:1 +石寨铺乡 1 +x:1 +配送 1 +x:1 +中饱私囊 1 +x:1 +医托 1 +x:1 +传道授业 1 +x:1 +尼科西亚 1 +x:1 +小蓟 1 +x:1 +后期 1 +x:1 +内政部 1 +x:1 +辞令 1 +x:1 +举目望去 1 +x:1 +二道 1 +x:1 +舰体 1 +x:1 +绩效高者 1 +x:1 +麻醉术 1 +x:1 +中草药 1 +x:1 +一站式 1 +x:1 +燕山 1 +x:1 +标准箱 1 +x:1 +后来 1 +x:1 +错过 1 +x:1 +一走了之 1 +x:1 +戒除 1 +x:1 +现钱 1 +x:1 +空缺 1 +x:1 +逗乐 1 +x:1 +欢喜岭 1 +x:1 +灌包机 1 +x:1 +喊道 1 +x:1 +减色 1 +x:1 +乌恰乡 1 +x:1 +寄读费 1 +x:1 +内在化 1 +x:1 +冰峰 1 +x:1 +十五日 1 +x:1 +搞鬼 1 +x:1 +和顺县 1 +x:1 +刺目 1 +x:1 +石化队 1 +x:1 +保管 1 +x:1 +技艺 1 +x:1 +个位数 1 +x:1 +诉讼案 1 +x:1 +正比例 1 +x:1 +极 661 +x:661 +闸门 1 +x:1 +外心 1 +x:1 +悲喜 1 +x:1 +靖 17 +x:17 +后撤 1 +x:1 +死难 1 +x:1 +水洛镇 1 +x:1 +以西 1 +x:1 +开封 1 +x:1 +劫富济贫 1 +x:1 +清醒剂 1 +x:1 +自投罗网 1 +x:1 +二难 1 +x:1 +些 651 +x:651 +厩肥 1 +x:1 +电管员 1 +x:1 +八股 1 +x:1 +幻灯机 1 +x:1 +治蝗 1 +x:1 +错谬 1 +x:1 +外快 1 +x:1 +牛耕图 1 +x:1 +反面人物 1 +x:1 +野豌豆 1 +x:1 +天命 1 +x:1 +纵波 1 +x:1 +宜林 1 +x:1 +心绪 1 +x:1 +铁二院 1 +x:1 +猜谜 1 +x:1 +当代人 1 +x:1 +零本 1 +x:1 +戊寅 1 +x:1 +真品 1 +x:1 +另起炉灶 1 +x:1 +艺术学系 1 +x:1 +燥 1 +x:1 +不可理喻 1 +x:1 +宗祠 1 +x:1 +鼎篆 1 +x:1 +情面 1 +x:1 +阜康市 1 +x:1 +风油量 1 +x:1 +周记 1 +x:1 +进退守舍 1 +x:1 +不安全感 1 +x:1 +棋圣 1 +x:1 +月轮 1 +x:1 +溴化银 1 +x:1 +永兴镇 1 +x:1 +升官进爵 1 +x:1 +布兰卡 1 +x:1 +内藏式 1 +x:1 +和 72601 +x:72601 +真名 1 +x:1 +凯姆拉港 1 +x:1 +岸线 1 +x:1 +诊病 1 +x:1 +菠萝园 1 +x:1 +弥勒佛 1 +x:1 +南泥湾 1 +x:1 +茅塞顿开 1 +x:1 +外形 1 +x:1 +会晤站 1 +x:1 +追逐 1 +x:1 +水路 1 +x:1 +庚臣 1 +x:1 +风信子 1 +x:1 +查勘 1 +x:1 +如法炮制 1 +x:1 +循环圈 1 +x:1 +坛坛罐罐 1 +x:1 +奸邪 1 +x:1 +镇委 1 +x:1 +书海 1 +x:1 +入选国 1 +x:1 +阁下 1 +x:1 +蠢笨 1 +x:1 +预报表 1 +x:1 +陆川县 1 +x:1 +供品 1 +x:1 +花原头 1 +x:1 +外引 1 +x:1 +亚军 1 +x:1 +批复 1 +x:1 +昆山 1 +x:1 +犬吠 1 +x:1 +外弦 1 +x:1 +外弧 1 +x:1 +遭逢 1 +x:1 +真味 1 +x:1 +耳边风 1 +x:1 +鹤岗市 1 +x:1 +气藏 1 +x:1 +孤远 1 +x:1 +查办 1 +x:1 +棋坛 1 +x:1 +外强 1 +x:1 +誓言 1 +x:1 +湖西 1 +x:1 +大连市 1 +x:1 +账目单 1 +x:1 +柠檬素 1 +x:1 +村务公开 1 +x:1 +既是 1 +x:1 +刑法学家 1 +x:1 +鼐 1 +x:1 +血循环 1 +x:1 +外廓 1 +x:1 +搔首弄姿 1 +x:1 +誓语 1 +x:1 +春运办 1 +x:1 +琢 8 +x:8 +三十七分 1 +x:1 +凋残 1 +x:1 +鞭长莫及 1 +x:1 +蜜腺 1 +x:1 +我心 1 +x:1 +蘑菇 1 +x:1 +嫡孙 1 +x:1 +保票 1 +x:1 +如沐春风 1 +x:1 +切磋会 1 +x:1 +指甲钳 1 +x:1 +自下而上 1 +x:1 +昆州 1 +x:1 +打转转 1 +x:1 +悲哀 1 +x:1 +拙 4 +x:4 +愿望 1 +x:1 +带头羊 1 +x:1 +整妆 1 +x:1 +一番话 1 +x:1 +鼎立 1 +x:1 +书法 1 +x:1 +大清白日 1 +x:1 +缓刑 1 +x:1 +安然 1 +x:1 +再生父母 1 +x:1 +具体化 1 +x:1 +技能 1 +x:1 +坦露 1 +x:1 +孤身 1 +x:1 +江陵区 1 +x:1 +足金 1 +x:1 +非线性 1 +x:1 +遭遇 1 +x:1 +领路人 1 +x:1 +藏书量 1 +x:1 +汇率 1 +x:1 +校院 1 +x:1 +电热水壶 1 +x:1 +麻烦 1 +x:1 +响当当 1 +x:1 +冰床 1 +x:1 +掘 16 +x:16 +金子山 1 +x:1 +内罗毕 1 +x:1 +陕西团 1 +x:1 +引狼入室 1 +x:1 +学海无涯 1 +x:1 +标准科 1 +x:1 +绝对性 1 +x:1 +政法委 1 +x:1 +日积月累 1 +x:1 +根绝 1 +x:1 +两户一企 1 +x:1 +忧难 1 +x:1 +涿州 1 +x:1 +壮志未酬 1 +x:1 +山药蛋 1 +x:1 +夜夜 1 +x:1 +鳖精 1 +x:1 +有用之才 1 +x:1 +看守费 1 +x:1 +外市 1 +x:1 +读书者 1 +x:1 +校部 1 +x:1 +营销点 1 +x:1 +有益无害 1 +x:1 +表面层 1 +x:1 +撞击声 1 +x:1 +死面 1 +x:1 +演唱家 1 +x:1 +号音 1 +x:1 +太冲 1 +x:1 +甘心情愿 1 +x:1 +雷阵雨 1 +x:1 +外带 1 +x:1 +规划数 1 +x:1 +永往直前 1 +x:1 +文安县 1 +x:1 +遮障 1 +x:1 +煞车 1 +x:1 +归侨界 1 +x:1 +十一届 1 +x:1 +摄政官 1 +x:1 +唐宁街 1 +x:1 +二踢脚 1 +x:1 +票制 1 +x:1 +艾滋病毒 1 +x:1 +好气儿 1 +x:1 +履任 1 +x:1 +多糖 1 +x:1 +咸水歌 1 +x:1 +攻关战 1 +x:1 +亚当 1 +x:1 +驻守 1 +x:1 +焦 69 +x:69 +后援 1 +x:1 +不寒而栗 1 +x:1 +举世瞩目 1 +x:1 +不欢而散 1 +x:1 +空箱 1 +x:1 +腼腆 1 +x:1 +筛选机 1 +x:1 +酒池肉林 1 +x:1 +坐视 1 +x:1 +好言 1 +x:1 +垂直面 1 +x:1 +外出 1 +x:1 +优化 1 +x:1 +达特茅思 1 +x:1 +桀 1 +x:1 +楼头 1 +x:1 +防弹服 1 +x:1 +幼龄林 1 +x:1 +啤酒花 1 +x:1 +老虎皮 1 +x:1 +饶平县 1 +x:1 +做活儿 1 +x:1 +烈军属 1 +x:1 +双庙乡 1 +x:1 +近照 1 +x:1 +校际 1 +x:1 +佚 1 +x:1 +果子盐 1 +x:1 +猕猴桃 1 +x:1 +共和国 1 +x:1 +宛城区 1 +x:1 +争先 1 +x:1 +无可挽回 1 +x:1 +配送业 1 +x:1 +语 101 +x:101 +离间计 1 +x:1 +介词 1 +x:1 +运输诗 1 +x:1 +竞驰 1 +x:1 +意大利 1 +x:1 +程途 1 +x:1 +一泻而下 1 +x:1 +还贷率 1 +x:1 +份量 1 +x:1 +啤酒节 1 +x:1 +小者 1 +x:1 +岸炮 1 +x:1 +狮城 1 +x:1 +新景点 1 +x:1 +依存度 1 +x:1 +保盟 1 +x:1 +滏临庄 1 +x:1 +这时候 1 +x:1 +中断 1 +x:1 +石材厂 1 +x:1 +表面化 1 +x:1 +冰冰 1 +x:1 +经科委 1 +x:1 +弥 13 +x:13 +冰冷 1 +x:1 +夜大 1 +x:1 +冰冻 1 +x:1 +醒悟 1 +x:1 +外公 1 +x:1 +架子工 1 +x:1 +受教育者 1 +x:1 +鱼贯而入 1 +x:1 +法卢斯村 1 +x:1 +小觑 1 +x:1 +印色 1 +x:1 +自选市场 1 +x:1 +浮价款 1 +x:1 +日夜操劳 1 +x:1 +阑尾 1 +x:1 +辐射量 1 +x:1 +减轻 1 +x:1 +冰凉 1 +x:1 +晟 6 +x:6 +科幻画 1 +x:1 +气话 1 +x:1 +渔业部 1 +x:1 +哨 19 +x:19 +门诊费 1 +x:1 +骚客 1 +x:1 +积雨云 1 +x:1 +其成 1 +x:1 +效用 1 +x:1 +隐者 1 +x:1 +仪表盘 1 +x:1 +昆剧 1 +x:1 +时不时 1 +x:1 +西甜瓜 1 +x:1 +黎寨 1 +x:1 +真实 1 +x:1 +棒球队 1 +x:1 +身手 1 +x:1 +电热水器 1 +x:1 +西兰花 1 +x:1 +张金镇 1 +x:1 +净摊款国 1 +x:1 +横纹肌 1 +x:1 +芝 1 +x:1 +院方 1 +x:1 +雌老虎 1 +x:1 +真容 1 +x:1 +巴西节 1 +x:1 +假公济私 1 +x:1 +瘪 8 +x:8 +清华园 1 +x:1 +碧空 1 +x:1 +孤老 1 +x:1 +折桂 1 +x:1 +在朝党 1 +x:1 +安置 1 +x:1 +小街 1 +x:1 +风平浪静 1 +x:1 +家务事 1 +x:1 +保真 1 +x:1 +填筑量 1 +x:1 +人类史 1 +x:1 +机务 1 +x:1 +美联储 1 +x:1 +一石多鸟 1 +x:1 +八运 1 +x:1 +古寺 1 +x:1 +万古常青 1 +x:1 +错荐 1 +x:1 +八连 1 +x:1 +护理院 1 +x:1 +后母 1 +x:1 +用电权 1 +x:1 +我军 1 +x:1 +购票款 1 +x:1 +当权者 1 +x:1 +悲切 1 +x:1 +具结 1 +x:1 +刑诉法 1 +x:1 +打打停停 1 +x:1 +瑾 15 +x:15 +麻绳 1 +x:1 +指 591 +x:591 +障人眼目 1 +x:1 +忏悔书 1 +x:1 +书房 1 +x:1 +导购员 1 +x:1 +破门而入 1 +x:1 +不分伯仲 1 +x:1 +劳役 1 +x:1 +挂一漏万 1 +x:1 +再生之恩 1 +x:1 +平湖一镜 1 +x:1 +分界线 1 +x:1 +野狐禅 1 +x:1 +侄儿女 1 +x:1 +昆区 1 +x:1 +我党 1 +x:1 +柠檬王 1 +x:1 +极目四顾 1 +x:1 +为时已晚 1 +x:1 +无辜者 1 +x:1 +建设部长 1 +x:1 +麻织 1 +x:1 +治装 1 +x:1 +奉献日 1 +x:1 +注销 1 +x:1 +华夏鳗 1 +x:1 +试验车 1 +x:1 +好说 1 +x:1 +麻纱 1 +x:1 +计入 1 +x:1 +麻纺 1 +x:1 +票台 1 +x:1 +白癜风 1 +x:1 +后步 1 +x:1 +演播稿 1 +x:1 +矿物纤维 1 +x:1 +竹茹 1 +x:1 +询价 1 +x:1 +秦川牛 1 +x:1 +太太 1 +x:1 +将口镇 1 +x:1 +淹 36 +x:36 +有所不同 1 +x:1 +中试部 1 +x:1 +集热管 1 +x:1 +忤 1 +x:1 +枪膛 1 +x:1 +孤胆 1 +x:1 +办案权 1 +x:1 +干堤 1 +x:1 +正月初七 1 +x:1 +好评 1 +x:1 +世锦赛 1 +x:1 +化学会 1 +x:1 +蒋家堰 1 +x:1 +古字 1 +x:1 +外债 1 +x:1 +溜皮树 1 +x:1 +凋敝 1 +x:1 +责人者 1 +x:1 +抠门 1 +x:1 +走者 1 +x:1 +评介 1 +x:1 +治警 1 +x:1 +花生酱 1 +x:1 +纵情 1 +x:1 +承租人 1 +x:1 +黧黑 1 +x:1 +冰区 1 +x:1 +读书路 1 +x:1 +后引法 1 +x:1 +速记 1 +x:1 +外史 1 +x:1 +一技之长 1 +x:1 +大道理 1 +x:1 +坐诊 1 +x:1 +常 683 +x:683 +古墓 1 +x:1 +计办 1 +x:1 +空炮 1 +x:1 +不可企及 1 +x:1 +深情厚谊 1 +x:1 +申请表 1 +x:1 +塞纳河畔 1 +x:1 +吨/年 1 +x:1 +纯收入 1 +x:1 +滚瓜流油 1 +x:1 +证明 1 +x:1 +冰协 1 +x:1 +引水人 1 +x:1 +奢 14 +x:14 +防化学 1 +x:1 +多级 1 +x:1 +父老乡亲 1 +x:1 +贵耳贱目 1 +x:1 +新泽西 1 +x:1 +改扩建 1 +x:1 +彩墨画 1 +x:1 +阑干 1 +x:1 +大公无私 1 +x:1 +走调儿 1 +x:1 +书橱 1 +x:1 +多口相声 1 +x:1 +古堡 1 +x:1 +炮战 1 +x:1 +惊心掉胆 1 +x:1 +消力塘 1 +x:1 +吃得开 1 +x:1 +缴费人 1 +x:1 +液化气 1 +x:1 +空灵 1 +x:1 +越级 1 +x:1 +小说 1 +x:1 +龛 3 +x:3 +外卡 1 +x:1 +鸣 86 +x:86 +裁撤 1 +x:1 +民主国 1 +x:1 +计分 1 +x:1 +采茶调 1 +x:1 +漆画 1 +x:1 +自由泳 1 +x:1 +减负 1 +x:1 +没法子 1 +x:1 +计划 1 +x:1 +白头鹰 1 +x:1 +费加罗 1 +x:1 +小议 1 +x:1 +炮手 1 +x:1 +外包 1 +x:1 +邀兑 1 +x:1 +一举三得 1 +x:1 +医派 1 +x:1 +布达佩斯 1 +x:1 +吉祥物 1 +x:1 +外化 1 +x:1 +穿天杨 1 +x:1 +方正县 1 +x:1 +干部团 1 +x:1 +小记 1 +x:1 +冰台 1 +x:1 +方解石 1 +x:1 +减资 1 +x:1 +致引起 1 +x:1 +楼宇 1 +x:1 +领航员 1 +x:1 +日资 1 +x:1 +缓征 1 +x:1 +钢骨水泥 1 +x:1 +汇编 1 +x:1 +退票费 1 +x:1 +沅 2 +x:2 +奶茶 1 +x:1 +保畜 1 +x:1 +揉搓 1 +x:1 +邮票史 1 +x:1 +保留 1 +x:1 +效益 1 +x:1 +援藏 1 +x:1 +冰刀 1 +x:1 +倒 358 +x:358 +修车 1 +x:1 +生辰 1 +x:1 +兑付期 1 +x:1 +灌装线 1 +x:1 +纱 17 +x:17 +汇缴 1 +x:1 +外勤 1 +x:1 +贫苦 1 +x:1 +年深日久 1 +x:1 +钻孔 1 +x:1 +调节税 1 +x:1 +拾遗 1 +x:1 +孤舟 1 +x:1 +湖北省籍 1 +x:1 +放水沟 1 +x:1 +基希讷乌 1 +x:1 +捐资助学 1 +x:1 +小道理 1 +x:1 +身怀 1 +x:1 +沙埠镇 1 +x:1 +三四月份 1 +x:1 +医治 1 +x:1 +海事局 1 +x:1 +呼吸与共 1 +x:1 +电算化 1 +x:1 +我县 1 +x:1 +委派 1 +x:1 +多用 1 +x:1 +供奉 1 +x:1 +外力 1 +x:1 +外办 1 +x:1 +外功 1 +x:1 +外加 1 +x:1 +外务 1 +x:1 +轻声细语 1 +x:1 +保甲 1 +x:1 +八路 1 +x:1 +自虐史观 1 +x:1 +计发 1 +x:1 +不列颠 1 +x:1 +太守 1 +x:1 +究 46 +x:46 +包装工 1 +x:1 +悲壮 1 +x:1 +真丝绸 1 +x:1 +成教处 1 +x:1 +气血 1 +x:1 +外势 1 +x:1 +否定论 1 +x:1 +养鸡户 1 +x:1 +院本 1 +x:1 +年深月久 1 +x:1 +养鸡房 1 +x:1 +折扇 1 +x:1 +死鬼 1 +x:1 +歼灭战 1 +x:1 +三点水 1 +x:1 +租税 1 +x:1 +有法必依 1 +x:1 +房补 1 +x:1 +许西 1 +x:1 +逻辑学 1 +x:1 +麻糖 1 +x:1 +折扣 1 +x:1 +绥化市 1 +x:1 +金顶 1 +x:1 +裁断 1 +x:1 +正北街 1 +x:1 +印子钱 1 +x:1 +够本 1 +x:1 +东阳市 1 +x:1 +家庭设备 1 +x:1 +抱头大哭 1 +x:1 +趋势性 1 +x:1 +大杂院 1 +x:1 +编者 1 +x:1 +招待券 1 +x:1 +孤苦 1 +x:1 +外刊 1 +x:1 +古奥 1 +x:1 +翩翩飞舞 1 +x:1 +民主型 1 +x:1 +新堡市 1 +x:1 +文教部 1 +x:1 +地球村 1 +x:1 +身患 1 +x:1 +宣武籍 1 +x:1 +琼枝玉叶 1 +x:1 +统计局长 1 +x:1 +护林站 1 +x:1 +疑难案 1 +x:1 +交易网 1 +x:1 +消防法 1 +x:1 +泥水匠 1 +x:1 +河阳镇 1 +x:1 +四合院儿 1 +x:1 +忧闷 1 +x:1 +后溪 1 +x:1 +公布于世 1 +x:1 +排洪道 1 +x:1 +减让 1 +x:1 +电弧焊接 1 +x:1 +民心向背 1 +x:1 +大人 1 +x:1 +踏板 1 +x:1 +身材 1 +x:1 +灭火筒 1 +x:1 +调查队 1 +x:1 +无缘无故 1 +x:1 +镜框费 1 +x:1 +庞各庄 1 +x:1 +巡捕房 1 +x:1 +大亨 1 +x:1 +祠堂 1 +x:1 +新疆棉 1 +x:1 +身条 1 +x:1 +B 222 +x:222 +进价 1 +x:1 +油葫芦 1 +x:1 +书林 1 +x:1 +非僧非俗 1 +x:1 +山鸡椒 1 +x:1 +折旧 1 +x:1 +新化县 1 +x:1 +披金戴银 1 +x:1 +古庙 1 +x:1 +江海堤防 1 +x:1 +大于 1 +x:1 +西藏路 1 +x:1 +类型化 1 +x:1 +大事 1 +x:1 +空盒 1 +x:1 +恭贺 1 +x:1 +大件 1 +x:1 +撒手不管 1 +x:1 +导购册 1 +x:1 +小贩 1 +x:1 +动力 1 +x:1 +补交 1 +x:1 +晨练者 1 +x:1 +大任 1 +x:1 +揣 35 +x:35 +近畿 1 +x:1 +太岳 1 +x:1 +盗窃者 1 +x:1 +小费 1 +x:1 +查堵 1 +x:1 +自然主义 1 +x:1 +火炬办 1 +x:1 +零活 1 +x:1 +周期表 1 +x:1 +堤坝 1 +x:1 +补亏 1 +x:1 +校魂 1 +x:1 +运气 1 +x:1 +白体 1 +x:1 +通川 1 +x:1 +安稳 1 +x:1 +答卷者 1 +x:1 +书柜 1 +x:1 +苕子 1 +x:1 +重残人 1 +x:1 +大仇 1 +x:1 +假惺惺 1 +x:1 +廷 4 +x:4 +欢颜 1 +x:1 +太岁 1 +x:1 +小路 1 +x:1 +外商 1 +x:1 +供应 1 +x:1 +镇原 1 +x:1 +大举 1 +x:1 +补习 1 +x:1 +让利 1 +x:1 +空白 1 +x:1 +养鸡 1 +x:1 +稍事 1 +x:1 +橙子 1 +x:1 +大中 1 +x:1 +黎平 1 +x:1 +书本 1 +x:1 +大个 1 +x:1 +南京东路 1 +x:1 +霍普镇 1 +x:1 +龙舟队 1 +x:1 +劈脸 1 +x:1 +大专 1 +x:1 +总工会 1 +x:1 +共和制 1 +x:1 +大东 1 +x:1 +大业 1 +x:1 +古币 1 +x:1 +祠墓 1 +x:1 +大一 1 +x:1 +集火 1 +x:1 +可再生性 1 +x:1 +兴衰史 1 +x:1 +作手脚 1 +x:1 +职责 1 +x:1 +劳而无功 1 +x:1 +治荒 1 +x:1 +砾石 1 +x:1 +草马湖村 1 +x:1 +登科录 1 +x:1 +标定 1 +x:1 +揉揉 1 +x:1 +小趾 1 +x:1 +贤人 1 +x:1 +配饰 1 +x:1 +刘马家 1 +x:1 +镇反 1 +x:1 +经常性 1 +x:1 +我向 1 +x:1 +赶到 1 +x:1 +补丁 1 +x:1 +气运 1 +x:1 +青龙乡 1 +x:1 +白俄 1 +x:1 +新闻网 1 +x:1 +名菜馆 1 +x:1 +居危治危 1 +x:1 +马铃薯 1 +x:1 +大义 1 +x:1 +谦称 1 +x:1 +多种 1 +x:1 +公布于众 1 +x:1 +区公所 1 +x:1 +大便 1 +x:1 +暗地里 1 +x:1 +招投标制 1 +x:1 +简化字 1 +x:1 +大侠 1 +x:1 +江山市 1 +x:1 +共和县 1 +x:1 +创汇率 1 +x:1 +白专 1 +x:1 +小豆 1 +x:1 +锅边糊 1 +x:1 +古往 1 +x:1 +拙见 1 +x:1 +肺活量 1 +x:1 +白丁 1 +x:1 +配额 1 +x:1 +周一 1 +x:1 +赤忱 1 +x:1 +允许值 1 +x:1 +进修 1 +x:1 +用人费率 1 +x:1 +加挂 1 +x:1 +兴头 1 +x:1 +灶马 1 +x:1 +踏春 1 +x:1 +雨滴 1 +x:1 +炮旅 1 +x:1 +自诉人 1 +x:1 +财政部长 1 +x:1 +耍贫嘴 1 +x:1 +双孢菇 1 +x:1 +相对性 1 +x:1 +大修 1 +x:1 +角斗场 1 +x:1 +真心 1 +x:1 +今年初 1 +x:1 +蜂巢 1 +x:1 +查处 1 +x:1 +小调 1 +x:1 +十一大 1 +x:1 +瞬变码型 1 +x:1 +校长学 1 +x:1 +闯祸 1 +x:1 +货币主义 1 +x:1 +古志 1 +x:1 +汤尤杯赛 1 +x:1 +其枝 1 +x:1 +汇票 1 +x:1 +福荫 1 +x:1 +征询卡 1 +x:1 +十月 1 +x:1 +百灵 1 +x:1 +刘砦镇 1 +x:1 +白人 1 +x:1 +荤油 1 +x:1 +大伯 1 +x:1 +起解 1 +x:1 +借阅 1 +x:1 +大众 1 +x:1 +古式 1 +x:1 +白云 1 +x:1 +摩洛哥 1 +x:1 +招待员 1 +x:1 +立体图 1 +x:1 +大会 1 +x:1 +大伙 1 +x:1 +副科级 1 +x:1 +范文 1 +x:1 +货运站 1 +x:1 +周二 1 +x:1 +辰溪 1 +x:1 +势必 1 +x:1 +溴化锂 1 +x:1 +医方 1 +x:1 +白事 1 +x:1 +气躁 1 +x:1 +滂 1 +x:1 +煎熬 1 +x:1 +大使 1 +x:1 +楼区 1 +x:1 +白令 1 +x:1 +岩石圈 1 +x:1 +漆片 1 +x:1 +周代 1 +x:1 +燃料部 1 +x:1 +越城岭 1 +x:1 +创收奖 1 +x:1 +农历 1 +x:1 +棋局 1 +x:1 +大体 1 +x:1 +好运 1 +x:1 +大佐 1 +x:1 +赫 5 +x:5 +大作 1 +x:1 +大佛 1 +x:1 +大余 1 +x:1 +多礼 1 +x:1 +好过 1 +x:1 +援 54 +x:54 +玻璃钢 1 +x:1 +红星村 1 +x:1 +瘦瘦的 1 +x:1 +瓦拉纳西 1 +x:1 +修整费 1 +x:1 +身故 1 +x:1 +小车 1 +x:1 +中下旬 1 +x:1 +风云人物 1 +x:1 +海事处 1 +x:1 +凸出 1 +x:1 +徇情 1 +x:1 +凸凹 1 +x:1 +读书角 1 +x:1 +气质 1 +x:1 +身教 1 +x:1 +后河 1 +x:1 +迄今为止 1 +x:1 +外域 1 +x:1 +外埠 1 +x:1 +缓存 1 +x:1 +格陵兰岛 1 +x:1 +嫩江 1 +x:1 +草木 1 +x:1 +冰场 1 +x:1 +理财机 1 +x:1 +什物 1 +x:1 +多年生 1 +x:1 +候车站 1 +x:1 +穹丘 1 +x:1 +错落 1 +x:1 +激光灯 1 +x:1 +导购台 1 +x:1 +电管局 1 +x:1 +拉下马 1 +x:1 +假仁假义 1 +x:1 +通布岛 1 +x:1 +武侠迷 1 +x:1 +博览 1 +x:1 +冰块 1 +x:1 +猪肝 1 +x:1 +扈 13 +x:13 +太康 1 +x:1 +规划法 1 +x:1 +飞人赛 1 +x:1 +集纳 1 +x:1 +导航连 1 +x:1 +套餐 1 +x:1 +趣味 1 +x:1 +效率 1 +x:1 +自由区 1 +x:1 +固阳 1 +x:1 +盈尺 1 +x:1 +二黄 1 +x:1 +苦事 1 +x:1 +养鳗 1 +x:1 +太庙 1 +x:1 +舌剑唇枪 1 +x:1 +景泰蓝 1 +x:1 +亚大 1 +x:1 +猴拳 1 +x:1 +抽取量 1 +x:1 +邮票展 1 +x:1 +抒情曲 1 +x:1 +敲 99 +x:99 +天花乱坠 1 +x:1 +势将 1 +x:1 +冰坨 1 +x:1 +拾遗补阙 1 +x:1 +泄露 1 +x:1 +辐射面 1 +x:1 +旱路 1 +x:1 +责难 1 +x:1 +干瘪 1 +x:1 +身旁 1 +x:1 +高花乡 1 +x:1 +拾闲 1 +x:1 +介质 1 +x:1 +宁绍 1 +x:1 +岌 1 +x:1 +太平 1 +x:1 +十里铺村 1 +x:1 +猴戏 1 +x:1 +老虎灶 1 +x:1 +坐车 1 +x:1 +总局 1 +x:1 +古尸 1 +x:1 +缺阵 1 +x:1 +憬悟 1 +x:1 +以至 1 +x:1 +业余队 1 +x:1 +皮家营村 1 +x:1 +欲先取之 1 +x:1 +死鸟 1 +x:1 +压低 1 +x:1 +银白 1 +x:1 +交易税 1 +x:1 +同心协力 1 +x:1 +近瞅 1 +x:1 +晋州市 1 +x:1 +猪肉 1 +x:1 +克尽职守 1 +x:1 +房费 1 +x:1 +折服 1 +x:1 +外圈 1 +x:1 +养鱼 1 +x:1 +输送机 1 +x:1 +汗 79 +x:79 +冰城 1 +x:1 +古山 1 +x:1 +次品 1 +x:1 +后汉 1 +x:1 +服理 1 +x:1 +霍尔果斯 1 +x:1 +古屋 1 +x:1 +小辈 1 +x:1 +外在 1 +x:1 +阳谷 1 +x:1 +预断 1 +x:1 +外地 1 +x:1 +曰 79 +x:79 +增压 1 +x:1 +执法必严 1 +x:1 +浑穆 1 +x:1 +外场 1 +x:1 +主持人 1 +x:1 +八要 1 +x:1 +并立 1 +x:1 +共和军 1 +x:1 +安神 1 +x:1 +基础 1 +x:1 +迎宾曲 1 +x:1 +碰撞性 1 +x:1 +炕 19 +x:19 +其时 1 +x:1 +此价 1 +x:1 +深受其害 1 +x:1 +利润税 1 +x:1 +醒木 1 +x:1 +标准煤 1 +x:1 +外因 1 +x:1 +管扳子 1 +x:1 +写字楼区 1 +x:1 +喧 4 +x:4 +弥漫性 1 +x:1 +乒坛 1 +x:1 +发射塔 1 +x:1 +外围 1 +x:1 +翻天覆地 1 +x:1 +纰缪 1 +x:1 +外国 1 +x:1 +普件 1 +x:1 +途程 1 +x:1 +让出 1 +x:1 +压产 1 +x:1 +好走 1 +x:1 +裹足不前 1 +x:1 +矿泉水瓶 1 +x:1 +遂意 1 +x:1 +根瘤 1 +x:1 +八角 1 +x:1 +滑溜溜 1 +x:1 +贺年 1 +x:1 +防总办 1 +x:1 +新闻纸 1 +x:1 +气象 1 +x:1 +人所共知 1 +x:1 +好赖 1 +x:1 +十日 1 +x:1 +满陇桂雨 1 +x:1 +坐等式 1 +x:1 +归根结底 1 +x:1 +冷食品 1 +x:1 +凑趣 1 +x:1 +减裁 1 +x:1 +楼市 1 +x:1 +非遗传性 1 +x:1 +贺幛 1 +x:1 +钢铁量 1 +x:1 +遂愿 1 +x:1 +反函数 1 +x:1 +汇算 1 +x:1 +嗜好 1 +x:1 +芦柴 1 +x:1 +布木格村 1 +x:1 +蠢物 1 +x:1 +来者不拒 1 +x:1 +查对 1 +x:1 +差距 1 +x:1 +查寻 1 +x:1 +编著 1 +x:1 +白天鹅 1 +x:1 +各洲 1 +x:1 +辰河 1 +x:1 +少不更事 1 +x:1 +九二年 1 +x:1 +半成品 1 +x:1 +圆桌会议 1 +x:1 +曼妙 1 +x:1 +坐药 1 +x:1 +昱 2 +x:2 +主任委员 1 +x:1 +医案 1 +x:1 +楼廊 1 +x:1 +刷牙 1 +x:1 +干部司 1 +x:1 +分列式 1 +x:1 +共和党 1 +x:1 +惊 72 +x:72 +服用 1 +x:1 +摇摇摆摆 1 +x:1 +护理部 1 +x:1 +安福 1 +x:1 +岸石 1 +x:1 +销烟 1 +x:1 +卸掉 1 +x:1 +贫水国 1 +x:1 +山樱桃 1 +x:1 +处置权 1 +x:1 +书摘 1 +x:1 +消委会 1 +x:1 +旱象 1 +x:1 +查实 1 +x:1 +驸马巷 1 +x:1 +书摊 1 +x:1 +自由民 1 +x:1 +书箱 1 +x:1 +新密市 1 +x:1 +沪宁线 1 +x:1 +大势 1 +x:1 +燃料费 1 +x:1 +殖 1 +x:1 +舌 4 +x:4 +白区 1 +x:1 +非正常 1 +x:1 +既然 1 +x:1 +溧水 1 +x:1 +神父 1 +x:1 +镇企 1 +x:1 +大加 1 +x:1 +稽 2 +x:2 +白匪 1 +x:1 +上海站 1 +x:1 +白化 1 +x:1 +生态学家 1 +x:1 +朔州市 1 +x:1 +大功 1 +x:1 +大办 1 +x:1 +大力 1 +x:1 +岸标 1 +x:1 +设若 1 +x:1 +西山街 1 +x:1 +小菜 1 +x:1 +迎春会 1 +x:1 +斯宁根 1 +x:1 +合 282 +x:282 +指代 1 +x:1 +牛倌 1 +x:1 +潮州市 1 +x:1 +倾倒区 1 +x:1 +白卷 1 +x:1 +补助 1 +x:1 +二胡 1 +x:1 +人字形 1 +x:1 +缉毒署 1 +x:1 +籼稻 1 +x:1 +截断 1 +x:1 +镇住 1 +x:1 +坚 27 +x:27 +知己者 1 +x:1 +二重性 1 +x:1 +冷柜 1 +x:1 +根植 1 +x:1 +检字表 1 +x:1 +混混沌沌 1 +x:1 +竿子 1 +x:1 +糨糊 1 +x:1 +补办 1 +x:1 +南川县 1 +x:1 +文史界 1 +x:1 +金钱松 1 +x:1 +保温 1 +x:1 +灭火机 1 +x:1 +轻音乐 1 +x:1 +出人意料 1 +x:1 +腰椎间盘 1 +x:1 +杂文选 1 +x:1 +广听博纳 1 +x:1 +圣马力诺 1 +x:1 +青龙刀 1 +x:1 +后爹 1 +x:1 +五 2471 +x:2471 +大别 1 +x:1 +萤石 1 +x:1 +纵穿 1 +x:1 +二者 1 +x:1 +安曼 1 +x:1 +大刑 1 +x:1 +二老 1 +x:1 +减震 1 +x:1 +守株待兔 1 +x:1 +定计 1 +x:1 +具有 1 +x:1 +白厅 1 +x:1 +最新 1 +x:1 +经营部 1 +x:1 +曾孙女儿 1 +x:1 +死者 1 +x:1 +大刀 1 +x:1 +待援 1 +x:1 +瘦削 1 +x:1 +琐碎 1 +x:1 +古龙乡 1 +x:1 +台湾籍 1 +x:1 +供应者 1 +x:1 +截收 1 +x:1 +书签 1 +x:1 +刁民 1 +x:1 +教育型 1 +x:1 +火箭筒 1 +x:1 +白口 1 +x:1 +大副 1 +x:1 +周口 1 +x:1 +其稿 1 +x:1 +服用量 1 +x:1 +热电偶 1 +x:1 +白发 1 +x:1 +物理科 1 +x:1 +看待 1 +x:1 +标准源 1 +x:1 +米行街 1 +x:1 +侵权性 1 +x:1 +廉政办 1 +x:1 +加查县 1 +x:1 +情致 1 +x:1 +长寿县 1 +x:1 +蹿 10 +x:10 +进发 1 +x:1 +调节性 1 +x:1 +精通 1 +x:1 +蛛蛛 1 +x:1 +中石化 1 +x:1 +周到 1 +x:1 +分布图 1 +x:1 +后八里庄 1 +x:1 +大厦 1 +x:1 +废寝忘食 1 +x:1 +小说性 1 +x:1 +裁缝 1 +x:1 +补台 1 +x:1 +天都峰 1 +x:1 +折磨 1 +x:1 +非正式 1 +x:1 +多日 1 +x:1 +一次性 1 +x:1 +号脉 1 +x:1 +小百货 1 +x:1 +幻境 1 +x:1 +百泉 1 +x:1 +大厅 1 +x:1 +弃文就武 1 +x:1 +大厂 1 +x:1 +服毒 1 +x:1 +剧协 1 +x:1 +能动性 1 +x:1 +多时 1 +x:1 +爪哇 1 +x:1 +补发 1 +x:1 +大号 1 +x:1 +计算连 1 +x:1 +专业乡 1 +x:1 +弹性模量 1 +x:1 +蛟龙 1 +x:1 +指甲花 1 +x:1 +博雅 1 +x:1 +墨梅图 1 +x:1 +急需者 1 +x:1 +太行山麓 1 +x:1 +步骑炮兵 1 +x:1 +根根 1 +x:1 +白剧 1 +x:1 +戟立 1 +x:1 +待战 1 +x:1 +长短枪 1 +x:1 +交易日 1 +x:1 +碍于情面 1 +x:1 +属 441 +x:441 +大叔 1 +x:1 +刃量具 1 +x:1 +进去 1 +x:1 +韵致 1 +x:1 +间断 1 +x:1 +霓虹灯 1 +x:1 +促进会 1 +x:1 +摘登 1 +x:1 +筒子院 1 +x:1 +缅方 1 +x:1 +多方 1 +x:1 +舞蹈界 1 +x:1 +书立 1 +x:1 +宁愿 1 +x:1 +外来户 1 +x:1 +韵脚 1 +x:1 +大区 1 +x:1 +书稿 1 +x:1 +好奇心 1 +x:1 +并蒂莲 1 +x:1 +雁同东路 1 +x:1 +棉红铃虫 1 +x:1 +对比度 1 +x:1 +亮堂堂 1 +x:1 +大年夜 1 +x:1 +速送 1 +x:1 +猿人 1 +x:1 +大化 1 +x:1 +弹道式 1 +x:1 +顽钝 1 +x:1 +原酒 1 +x:1 +剧变 1 +x:1 +标准粉 1 +x:1 +阴雨雪 1 +x:1 +丙种射线 1 +x:1 +多数 1 +x:1 +回心转意 1 +x:1 +一字之差 1 +x:1 +八里庄 1 +x:1 +荣耀人 1 +x:1 +撞车 1 +x:1 +进化 1 +x:1 +大印 1 +x:1 +农牧民 1 +x:1 +野战军 1 +x:1 +防盗网 1 +x:1 +化学场 1 +x:1 +大卡 1 +x:1 +需氧量 1 +x:1 +零点 1 +x:1 +祛 7 +x:7 +北洞山 1 +x:1 +韵腹 1 +x:1 +长短期 1 +x:1 +舞蹈病 1 +x:1 +压倒 1 +x:1 +让位 1 +x:1 +大半 1 +x:1 +兴山区 1 +x:1 +养育 1 +x:1 +普及 1 +x:1 +护理费 1 +x:1 +外嫁 1 +x:1 +城建费 1 +x:1 +公益性 1 +x:1 +刁滑 1 +x:1 +孤鬼 1 +x:1 +当政 1 +x:1 +集训队 1 +x:1 +科教兴国 1 +x:1 +最末 1 +x:1 +差遣 1 +x:1 +化学品 1 +x:1 +西扬庄村 1 +x:1 +马斯河 1 +x:1 +小球藻 1 +x:1 +绿条 1 +x:1 +宗派 1 +x:1 +民主乡 1 +x:1 +镞 1 +x:1 +梅花山站 1 +x:1 +虹膜 1 +x:1 +众志成城 1 +x:1 +勤勤恳恳 1 +x:1 +白关 1 +x:1 +发生量 1 +x:1 +红五星 1 +x:1 +周全 1 +x:1 +周六 1 +x:1 +气酣 1 +x:1 +茁实 1 +x:1 +白兔 1 +x:1 +天兴里 1 +x:1 +蓖麻 1 +x:1 +医疗 1 +x:1 +百般无奈 1 +x:1 +蒲柳 1 +x:1 +孤魂 1 +x:1 +柠檬桉 1 +x:1 +调查表 1 +x:1 +语言部 1 +x:1 +锣鼓喧天 1 +x:1 +南村镇 1 +x:1 +甚至于 1 +x:1 +书种 1 +x:1 +笑影 1 +x:1 +铜模 1 +x:1 +端午节 1 +x:1 +空档 1 +x:1 +挂果 1 +x:1 +补偿 1 +x:1 +满坑满谷 1 +x:1 +老大爷 1 +x:1 +东陵区 1 +x:1 +验证台 1 +x:1 +沙河口区 1 +x:1 +筵席税 1 +x:1 +浅陋 1 +x:1 +贴水 1 +x:1 +天王殿 1 +x:1 +党小组长 1 +x:1 +石门县 1 +x:1 +根毛 1 +x:1 +油棕榈 1 +x:1 +新界埠乡 1 +x:1 +无遮无挡 1 +x:1 +空置房 1 +x:1 +如是者 1 +x:1 +辐射计 1 +x:1 +医界 1 +x:1 +慢慢 1 +x:1 +篆 2 +x:2 +先锋号 1 +x:1 +空格 1 +x:1 +油料处 1 +x:1 +港人制港 1 +x:1 +嫡亲 1 +x:1 +栋梁之材 1 +x:1 +臭乎乎 1 +x:1 +医用 1 +x:1 +普化 1 +x:1 +桧 1 +x:1 +详 7 +x:7 +医生 1 +x:1 +内忧外患 1 +x:1 +扼 4 +x:4 +气量 1 +x:1 +普区 1 +x:1 +石门口 1 +x:1 +白净 1 +x:1 +抓耳挠腮 1 +x:1 +购票点 1 +x:1 +米山镇 1 +x:1 +幸得 1 +x:1 +集港 1 +x:1 +大冶 1 +x:1 +拖布 1 +x:1 +老外 1 +x:1 +冗 1 +x:1 +热电厂 1 +x:1 +廉政关 1 +x:1 +净水剂 1 +x:1 +床头柜 1 +x:1 +干部会 1 +x:1 +蝶翅 1 +x:1 +拖带 1 +x:1 +哨所里 1 +x:1 +进击 1 +x:1 +进出 1 +x:1 +浮价烟 1 +x:1 +大军 1 +x:1 +编导演 1 +x:1 +大写 1 +x:1 +幅宽 1 +x:1 +大内 1 +x:1 +竟自 1 +x:1 +猴群 1 +x:1 +嫡传 1 +x:1 +指引 1 +x:1 +克拉别克 1 +x:1 +廉 67 +x:67 +乱石滩 1 +x:1 +多极 1 +x:1 +泽泻 1 +x:1 +响尾蛇 1 +x:1 +铃铛 1 +x:1 +保洁 1 +x:1 +大凡 1 +x:1 +剖 3 +x:3 +踏破 1 +x:1 +直接选举 1 +x:1 +幻灯片 1 +x:1 +蕤 1 +x:1 +力不胜任 1 +x:1 +滩 11 +x:11 +芦笙 1 +x:1 +气道 1 +x:1 +导购人 1 +x:1 +定位点 1 +x:1 +雄才伟略 1 +x:1 +扶 139 +x:139 +压力 1 +x:1 +氮化合物 1 +x:1 +化工界 1 +x:1 +芦笋 1 +x:1 +八闽 1 +x:1 +啤酒馆 1 +x:1 +金睛火眼 1 +x:1 +慢性 1 +x:1 +浑朴 1 +x:1 +很 6590 +x:6590 +拖床 1 +x:1 +存储器 1 +x:1 +依仗 1 +x:1 +情节 1 +x:1 +猛将 1 +x:1 +补养 1 +x:1 +相关者 1 +x:1 +和平共处 1 +x:1 +进关 1 +x:1 +半梦半醒 1 +x:1 +统计法 1 +x:1 +免税额 1 +x:1 +进兵 1 +x:1 +补充 1 +x:1 +身手不凡 1 +x:1 +姊妹花 1 +x:1 +人才篇 1 +x:1 +四十分 1 +x:1 +进入 1 +x:1 +剧减 1 +x:1 +左不过 1 +x:1 +握别 1 +x:1 +肺循环 1 +x:1 +大兵 1 +x:1 +大兴 1 +x:1 +大关 1 +x:1 +蝙蝠侠 1 +x:1 +四突破 1 +x:1 +二药 1 +x:1 +大典 1 +x:1 +芦管 1 +x:1 +体 51 +x:51 +普创 1 +x:1 +压制 1 +x:1 +胜局 1 +x:1 +炮筒 1 +x:1 +大公 1 +x:1 +浪卡子县 1 +x:1 +大全 1 +x:1 +涡流 1 +x:1 +⑥ 6 +x:6 +压分 1 +x:1 +胜山 1 +x:1 +鹞鹰 1 +x:1 +有所不为 1 +x:1 +闭目养神 1 +x:1 +科西嘉 1 +x:1 +征服力 1 +x:1 +望穿秋水 1 +x:1 +醋栗 1 +x:1 +医理 1 +x:1 +孤高 1 +x:1 +交易权 1 +x:1 +鼎湖 1 +x:1 +嫌隙 1 +x:1 +加的夫 1 +x:1 +白地 1 +x:1 +多情 1 +x:1 +入户率 1 +x:1 +贵州厅 1 +x:1 +新疆村 1 +x:1 +南石冲 1 +x:1 +将领 1 +x:1 +幸好 1 +x:1 +工艺学 1 +x:1 +鼠腹 1 +x:1 +变法维新 1 +x:1 +独行人 1 +x:1 +言而有信 1 +x:1 +诗言志 1 +x:1 +豆奶 1 +x:1 +一唱一和 1 +x:1 +小镇 1 +x:1 +找寻 1 +x:1 +汇总 1 +x:1 +刑讯 1 +x:1 +加拿大 1 +x:1 +近洋 1 +x:1 +算术级数 1 +x:1 +昆仑 1 +x:1 +偏硅酸 1 +x:1 +舶来 1 +x:1 +近海 1 +x:1 +眼捷手快 1 +x:1 +零用 1 +x:1 +江道 1 +x:1 +大国 1 +x:1 +小锣 1 +x:1 +当涂县 1 +x:1 +介音 1 +x:1 +汐 1 +x:1 +小舌 1 +x:1 +后盾 1 +x:1 +泸沽 1 +x:1 +救球手 1 +x:1 +科社 1 +x:1 +六经者 1 +x:1 +并称 1 +x:1 +纵线 1 +x:1 +维护税 1 +x:1 +纯属 1 +x:1 +次之 1 +x:1 +大四 1 +x:1 +供养 1 +x:1 +鼠脑 1 +x:1 +欺诈案 1 +x:1 +惊涛拍岸 1 +x:1 +追 172 +x:172 +出弦度 1 +x:1 +后盖 1 +x:1 +文人佳士 1 +x:1 +栽植 1 +x:1 +供气量 1 +x:1 +降雨带 1 +x:1 +时间廊 1 +x:1 +显性 1 +x:1 +皮夹克 1 +x:1 +账册 1 +x:1 +巴甫洛夫 1 +x:1 +发芽势 1 +x:1 +马拉若岛 1 +x:1 +套菜 1 +x:1 +存在主义 1 +x:1 +谦恭 1 +x:1 +盗窃风 1 +x:1 +趣事 1 +x:1 +累累的 1 +x:1 +遮荫 1 +x:1 +热毛子马 1 +x:1 +护 85 +x:85 +行骗 1 +x:1 +待查 1 +x:1 +快感 1 +x:1 +犬马之劳 1 +x:1 +得意之笔 1 +x:1 +群工部 1 +x:1 +火狐狸 1 +x:1 +坐镇 1 +x:1 +姊妹节 1 +x:1 +欢聚 1 +x:1 +看客 1 +x:1 +安抚 1 +x:1 +充电器 1 +x:1 +评报稿 1 +x:1 +策马飞驰 1 +x:1 +哀嚎 1 +x:1 +分布区 1 +x:1 +气韵 1 +x:1 +大歌大哭 1 +x:1 +大邑县 1 +x:1 +户头 1 +x:1 +养生之道 1 +x:1 +看家 1 +x:1 +以诚相待 1 +x:1 +工艺室 1 +x:1 +嘲风咏月 1 +x:1 +大器 1 +x:1 +注意者 1 +x:1 +堆存费 1 +x:1 +皮夹儿 1 +x:1 +看守 1 +x:1 +安抵 1 +x:1 +户外 1 +x:1 +潘寨村 1 +x:1 +镇海村 1 +x:1 +军民航 1 +x:1 +无为而治 1 +x:1 +白城 1 +x:1 +意乱情迷 1 +x:1 +笑声 1 +x:1 +石材业 1 +x:1 +配股 1 +x:1 +甜丝丝 1 +x:1 +是非黑白 1 +x:1 +纳章乡 1 +x:1 +妄自尊大 1 +x:1 +十美 1 +x:1 +巴中市 1 +x:1 +天造地设 1 +x:1 +书纪 1 +x:1 +进城 1 +x:1 +推诚相见 1 +x:1 +循环制 1 +x:1 +蟋蟀草 1 +x:1 +槲寄生 1 +x:1 +剧坛 1 +x:1 +圬 1 +x:1 +协调性 1 +x:1 +库藏 1 +x:1 +套色 1 +x:1 +血汗钱 1 +x:1 +硬汉 1 +x:1 +独行侠 1 +x:1 +大型 1 +x:1 +门诊部 1 +x:1 +殿 5 +x:5 +品 82 +x:82 +县市长 1 +x:1 +监理办 1 +x:1 +大惑不解 1 +x:1 +科教兴农 1 +x:1 +体弱多病 1 +x:1 +缴纳处 1 +x:1 +中技校 1 +x:1 +剧场 1 +x:1 +节约箱 1 +x:1 +裹脚布 1 +x:1 +岗子 1 +x:1 +大埯 1 +x:1 +注解 1 +x:1 +行驶 1 +x:1 +大埔 1 +x:1 +政策 1 +x:1 +平平安安 1 +x:1 +票体 1 +x:1 +履历 1 +x:1 +经济效益 1 +x:1 +痛痛快快 1 +x:1 +非传统 1 +x:1 +大城 1 +x:1 +注视 1 +x:1 +填 107 +x:107 +喀 7 +x:7 +摇摆不定 1 +x:1 +质疑 1 +x:1 +大地 1 +x:1 +岩石体 1 +x:1 +安插 1 +x:1 +五行镇 1 +x:1 +目不斜视 1 +x:1 +候 6 +x:6 +欢腾 1 +x:1 +记名式 1 +x:1 +大圪 1 +x:1 +镇海港 1 +x:1 +责问 1 +x:1 +羽联 1 +x:1 +气肥 1 +x:1 +鼠胆 1 +x:1 +危机感 1 +x:1 +龙山集 1 +x:1 +走麦城 1 +x:1 +养蜂 1 +x:1 +桂林市 1 +x:1 +非亲非故 1 +x:1 +陶公府 1 +x:1 +用心良苦 1 +x:1 +阳面 1 +x:1 +曾祖母 1 +x:1 +公益林 1 +x:1 +启示 1 +x:1 +普吉 1 +x:1 +扶贫济困 1 +x:1 +促膝交谈 1 +x:1 +搬走 1 +x:1 +作祟 1 +x:1 +安排 1 +x:1 +弹道学 1 +x:1 +周围 1 +x:1 +物理系 1 +x:1 +使劲儿 1 +x:1 +根治 1 +x:1 +信仰者 1 +x:1 +接报案 1 +x:1 +夏鲁派 1 +x:1 +古稀之年 1 +x:1 +小钱 1 +x:1 +零担 1 +x:1 +大块 1 +x:1 +镇康县 1 +x:1 +双重人格 1 +x:1 +大坑 1 +x:1 +背日性 1 +x:1 +进场 1 +x:1 +大坝 1 +x:1 +比绍市 1 +x:1 +资讯 1 +x:1 +迷离扑朔 1 +x:1 +心灵 1 +x:1 +化学化 1 +x:1 +养蝎 1 +x:1 +豆子 1 +x:1 +移机 1 +x:1 +逄 12 +x:12 +汇成 1 +x:1 +房间 1 +x:1 +鼠药 1 +x:1 +中山王 1 +x:1 +追肥 1 +x:1 +自治县 1 +x:1 +光机电 1 +x:1 +房门 1 +x:1 +气锤 1 +x:1 +开庭 1 +x:1 +依安 1 +x:1 +我们 1 +x:1 +看好 1 +x:1 +三合房 1 +x:1 +方括号 1 +x:1 +鸣鞭 1 +x:1 +乒乒 1 +x:1 +唱经声 1 +x:1 +模模糊糊 1 +x:1 +幅度 1 +x:1 +补品 1 +x:1 +服法 1 +x:1 +襄樊站 1 +x:1 +狼头山 1 +x:1 +坐观成败 1 +x:1 +安恬 1 +x:1 +安息 1 +x:1 +空泛 1 +x:1 +气锅 1 +x:1 +红宝石 1 +x:1 +杂文集 1 +x:1 +笑容 1 +x:1 +汨罗市 1 +x:1 +博采 1 +x:1 +桔农 1 +x:1 +陆相沉积 1 +x:1 +大哥 1 +x:1 +计价 1 +x:1 +看头 1 +x:1 +此致 1 +x:1 +大哭 1 +x:1 +多抗 1 +x:1 +减量 1 +x:1 +楣上 1 +x:1 +疑难症 1 +x:1 +外侧 1 +x:1 +外侨 1 +x:1 +多报 1 +x:1 +软性化 1 +x:1 +外侮 1 +x:1 +梭梭 1 +x:1 +计付 1 +x:1 +办税厅 1 +x:1 +失主 1 +x:1 +沧州市 1 +x:1 +荨麻 1 +x:1 +赏玩 1 +x:1 +造船量 1 +x:1 +从业员 1 +x:1 +新生面 1 +x:1 +油盐酱醋 1 +x:1 +本固枝荣 1 +x:1 +大国家党 1 +x:1 +埠头 1 +x:1 +长青林 1 +x:1 +净产值 1 +x:1 +贤哲 1 +x:1 +卑怯 1 +x:1 +大言不惭 1 +x:1 +效死 1 +x:1 +气胸 1 +x:1 +凶相毕露 1 +x:1 +加积镇 1 +x:1 +流通量 1 +x:1 +舰尾 1 +x:1 +钬 1 +x:1 +特快专递 1 +x:1 +一言为定 1 +x:1 +汇报 1 +x:1 +年近花甲 1 +x:1 +补员 1 +x:1 +大吏 1 +x:1 +大名 1 +x:1 +大同 1 +x:1 +洽 12 +x:12 +大吉 1 +x:1 +酬对 1 +x:1 +外企 1 +x:1 +幻影 1 +x:1 +岸滩 1 +x:1 +运动界 1 +x:1 +阔叶 1 +x:1 +气闷 1 +x:1 +配药 1 +x:1 +趣 34 +x:34 +知味馆 1 +x:1 +气门 1 +x:1 +着陆器 1 +x:1 +警视厅 1 +x:1 +外传 1 +x:1 +夏县 1 +x:1 +圆心角 1 +x:1 +外伤 1 +x:1 +价码 1 +x:1 +商品经济 1 +x:1 +丽岛 1 +x:1 +教职 1 +x:1 +服气 1 +x:1 +壳舾装 1 +x:1 +琐细 1 +x:1 +酬宾 1 +x:1 +欢舞 1 +x:1 +交易所 1 +x:1 +肉色 1 +x:1 +串联式 1 +x:1 +外甥女 1 +x:1 +指使 1 +x:1 +猛增 1 +x:1 +丽水庄 1 +x:1 +端砚 1 +x:1 +徇私 1 +x:1 +蜜丸子 1 +x:1 +冰上 1 +x:1 +库车县 1 +x:1 +快人快语 1 +x:1 +安慰 1 +x:1 +大喜 1 +x:1 +炮群 1 +x:1 +阳间 1 +x:1 +岗头 1 +x:1 +头 906 +x:906 +白吃 1 +x:1 +广征博采 1 +x:1 +大喊 1 +x:1 +贡缎布 1 +x:1 +直选 1 +x:1 +书系 1 +x:1 +差错 1 +x:1 +套耕 1 +x:1 +裕中西里 1 +x:1 +楔 1 +x:1 +狙 1 +x:1 +姑息 1 +x:1 +外交 1 +x:1 +折纯 1 +x:1 +书 1372 +x:1372 +法老 1 +x:1 +劳心 1 +x:1 +褶皱 1 +x:1 +恭陪 1 +x:1 +小队 1 +x:1 +折纹 1 +x:1 +折线 1 +x:1 +坍塌 1 +x:1 +苹 1 +x:1 +外人 1 +x:1 +沾亲带故 1 +x:1 +持枪者 1 +x:1 +种羊场 1 +x:1 +漳平市 1 +x:1 +漆树 1 +x:1 +海秀路 1 +x:1 +旌德县 1 +x:1 +雌性 1 +x:1 +丽水市 1 +x:1 +奸臣 1 +x:1 +辖 45 +x:45 +眼科史 1 +x:1 +招兵买马 1 +x:1 +通权达变 1 +x:1 +现任 1 +x:1 +奉献篇 1 +x:1 +外乡 1 +x:1 +季节性 1 +x:1 +勇武 1 +x:1 +指导 1 +x:1 +减退 1 +x:1 +减速 1 +x:1 +线长面广 1 +x:1 +付家寨镇 1 +x:1 +亚洲区 1 +x:1 +后生 1 +x:1 +莸 1 +x:1 +配舞 1 +x:1 +千 776 +x:776 +看海者 1 +x:1 +定位球 1 +x:1 +磊 270 +x:270 +摇旗呐喊 1 +x:1 +指定 1 +x:1 +洞井乡 1 +x:1 +蹑 1 +x:1 +烟台山 1 +x:1 +达姆弹 1 +x:1 +膏粱子弟 1 +x:1 +舞蹈班 1 +x:1 +辞岁 1 +x:1 +外业 1 +x:1 +荣枯变幻 1 +x:1 +捣 7 +x:7 +龙舟赛 1 +x:1 +聚氯乙稀 1 +x:1 +拉力器 1 +x:1 +百衲衣 1 +x:1 +物理组 1 +x:1 +空洞 1 +x:1 +不亦乐乎 1 +x:1 +伊斯兰教 1 +x:1 +萨马拉 1 +x:1 +纸质 1 +x:1 +根源 1 +x:1 +萨克管 1 +x:1 +淼 5 +x:5 +督查员 1 +x:1 +浑河 1 +x:1 +彩釉砖 1 +x:1 +迟滞不前 1 +x:1 +诊法 1 +x:1 +极端 1 +x:1 +嵘 6 +x:6 +阁僚 1 +x:1 +摘编 1 +x:1 +百日 1 +x:1 +闪光弹 1 +x:1 +衙役 1 +x:1 +辞却 1 +x:1 +带路人 1 +x:1 +滴水瓦 1 +x:1 +遗址 1 +x:1 +达布逊湖 1 +x:1 +开发区热 1 +x:1 +毯子 1 +x:1 +浑沌 1 +x:1 +监造组 1 +x:1 +后窗 1 +x:1 +础 2 +x:2 +琴技 1 +x:1 +指向 1 +x:1 +校车 1 +x:1 +普鲁士 1 +x:1 +南蔡乡 1 +x:1 +冬闲田 1 +x:1 +蓓 5 +x:5 +刷新 1 +x:1 +豪华型 1 +x:1 +指名 1 +x:1 +一气呵成 1 +x:1 +过户费 1 +x:1 +直岗拉卡 1 +x:1 +梅花桩 1 +x:1 +白字 1 +x:1 +白子 1 +x:1 +诊治 1 +x:1 +施家湖村 1 +x:1 +交易法 1 +x:1 +逗号 1 +x:1 +大嫂 1 +x:1 +内在于 1 +x:1 +零整 1 +x:1 +气魄 1 +x:1 +嫩竹 1 +x:1 +口香糖 1 +x:1 +团藻 1 +x:1 +栋 85 +x:85 +四节制 1 +x:1 +固能 1 +x:1 +获胜 1 +x:1 +无房者 1 +x:1 +白宫 1 +x:1 +跑单帮 1 +x:1 +吕勒奥 1 +x:1 +周官 1 +x:1 +后程 1 +x:1 +保温房 1 +x:1 +破烂儿 1 +x:1 +空手 1 +x:1 +警卫车 1 +x:1 +大娘 1 +x:1 +金沙镇 1 +x:1 +楚布寺 1 +x:1 +漆木 1 +x:1 +贪婪者 1 +x:1 +团市委 1 +x:1 +辞句 1 +x:1 +高寿 1 +x:1 +引路人 1 +x:1 +大婶 1 +x:1 +保暖 1 +x:1 +福利型 1 +x:1 +旱魔 1 +x:1 +安源 1 +x:1 +履带 1 +x:1 +主楼 1 +x:1 +舞蹈系 1 +x:1 +土皇帝 1 +x:1 +弈友 1 +x:1 +空房 1 +x:1 +重操旧业 1 +x:1 +其父 1 +x:1 +人民性 1 +x:1 +普天 1 +x:1 +湖面 1 +x:1 +辞去 1 +x:1 +延解 1 +x:1 +捉弄 1 +x:1 +目击人 1 +x:1 +欢谈 1 +x:1 +浑江 1 +x:1 +安溪 1 +x:1 +空战 1 +x:1 +珙县 1 +x:1 +炮灰 1 +x:1 +周密 1 +x:1 +咽下 1 +x:1 +分布式 1 +x:1 +爵士队 1 +x:1 +大家 1 +x:1 +可想而知 1 +x:1 +婉劝 1 +x:1 +激光束 1 +x:1 +栏杆 1 +x:1 +锈 5 +x:5 +擀杖 1 +x:1 +大客 1 +x:1 +小项 1 +x:1 +西山腰 1 +x:1 +大宫 1 +x:1 +从一而终 1 +x:1 +搜括有方 1 +x:1 +大宗 1 +x:1 +横加指责 1 +x:1 +山旮旯 1 +x:1 +欢跃 1 +x:1 +天下 1 +x:1 +阔少 1 +x:1 +穷奢极侈 1 +x:1 +豪华团 1 +x:1 +入户线 1 +x:1 +静冈县 1 +x:1 +大宁 1 +x:1 +本末倒置 1 +x:1 +军需 1 +x:1 +扬汤止沸 1 +x:1 +标准杆 1 +x:1 +大安 1 +x:1 +午餐会 1 +x:1 +斗门镇 1 +x:1 +打圆场 1 +x:1 +追述 1 +x:1 +大寿 1 +x:1 +保期 1 +x:1 +如是说 1 +x:1 +忘情 1 +x:1 +亚东 1 +x:1 +滚水 1 +x:1 +汇流 1 +x:1 +遵章率 1 +x:1 +保有 1 +x:1 +大寨 1 +x:1 +压境 1 +x:1 +死角 1 +x:1 +激光机 1 +x:1 +大寒 1 +x:1 +急如星火 1 +x:1 +贼溜溜 1 +x:1 +氨化 1 +x:1 +蟹黄 1 +x:1 +鹤发童颜 1 +x:1 +褶子 1 +x:1 +绒毛状 1 +x:1 +辞别 1 +x:1 +固脚 1 +x:1 +多晶体 1 +x:1 +别来无恙 1 +x:1 +幻像 1 +x:1 +恭顺 1 +x:1 +活到老 1 +x:1 +后患无穷 1 +x:1 +花甲之年 1 +x:1 +忘怀 1 +x:1 +练武 1 +x:1 +降雨区 1 +x:1 +气骨 1 +x:1 +贴有 1 +x:1 +贮药瓶 1 +x:1 +所有者 1 +x:1 +满腹珠玑 1 +x:1 +集数 1 +x:1 +足迹 1 +x:1 +角闪石 1 +x:1 +茧 6 +x:6 +仁果 1 +x:1 +镇子 1 +x:1 +味同嚼蜡 1 +x:1 +忘性 1 +x:1 +耸人听闻 1 +x:1 +压塑 1 +x:1 +劲 94 +x:94 +够用 1 +x:1 +近悉 1 +x:1 +组装车 1 +x:1 +利润法 1 +x:1 +亚于 1 +x:1 +耐火砖 1 +x:1 +安澜 1 +x:1 +百感丛生 1 +x:1 +喜悦感 1 +x:1 +工装架 1 +x:1 +空挡 1 +x:1 +大学 1 +x:1 +拒 106 +x:106 +大季 1 +x:1 +收支额 1 +x:1 +好好先生 1 +x:1 +概言之 1 +x:1 +白嫩 1 +x:1 +逼真感 1 +x:1 +差额选举 1 +x:1 +本专科生 1 +x:1 +大字 1 +x:1 +辐射能 1 +x:1 +忘恩 1 +x:1 +大子 1 +x:1 +压力锅 1 +x:1 +户名 1 +x:1 +零碎 1 +x:1 +哼 19 +x:19 +石河 1 +x:1 +小额 1 +x:1 +号角 1 +x:1 +花土沟 1 +x:1 +谨而慎之 1 +x:1 +腻 8 +x:8 +浑浊 1 +x:1 +中低产 1 +x:1 +白头 1 +x:1 +忘掉 1 +x:1 +编采 1 +x:1 +格罗兹尼 1 +x:1 +北水南调 1 +x:1 +鞍马劳顿 1 +x:1 +周天 1 +x:1 +质量课 1 +x:1 +原生动物 1 +x:1 +白天 1 +x:1 +采访团 1 +x:1 +丞相 1 +x:1 +浑源 1 +x:1 +反贪局 1 +x:1 +大增 1 +x:1 +府发 1 +x:1 +然而 1 +x:1 +申 95 +x:95 +大墙 1 +x:1 +拖地 1 +x:1 +亮点 1 +x:1 +东北方 1 +x:1 +盗窃险 1 +x:1 +丸 11 +x:11 +继承性 1 +x:1 +递送 1 +x:1 +石门子 1 +x:1 +超党派 1 +x:1 +金质奖 1 +x:1 +香客 1 +x:1 +效果 1 +x:1 +测试题 1 +x:1 +安民 1 +x:1 +普宁 1 +x:1 +督造 1 +x:1 +农牧林 1 +x:1 +结算处 1 +x:1 +进境 1 +x:1 +小鬼 1 +x:1 +语焉不详 1 +x:1 +两用林 1 +x:1 +人民报 1 +x:1 +沿线 1 +x:1 +宗教 1 +x:1 +侗家人 1 +x:1 +加佳队 1 +x:1 +温湿度 1 +x:1 +套购 1 +x:1 +铮铮铁骨 1 +x:1 +户型 1 +x:1 +脑癌 1 +x:1 +戒规 1 +x:1 +闵 106 +x:106 +赏罚 1 +x:1 +压宝 1 +x:1 +受用终身 1 +x:1 +使不得 1 +x:1 +私生活 1 +x:1 +纸箱厂 1 +x:1 +编配 1 +x:1 +编印者 1 +x:1 +杀富济贫 1 +x:1 +大堤 1 +x:1 +仲裁 1 +x:1 +硬科学 1 +x:1 +吨/人 1 +x:1 +炜 24 +x:24 +大谬不然 1 +x:1 +幻化 1 +x:1 +栽绒 1 +x:1 +套路 1 +x:1 +卓奥友峰 1 +x:1 +糊涂人 1 +x:1 +拖垮 1 +x:1 +坦言 1 +x:1 +大堆 1 +x:1 +蠢材 1 +x:1 +大堂 1 +x:1 +纵火 1 +x:1 +销方 1 +x:1 +攻关点 1 +x:1 +气馁 1 +x:1 +假 557 +x:557 +宗族 1 +x:1 +竞争力部 1 +x:1 +物美 1 +x:1 +化工系 1 +x:1 +卑污 1 +x:1 +差额 1 +x:1 +通宵 1 +x:1 +科教兴市 1 +x:1 +情诗 1 +x:1 +标准电阻 1 +x:1 +箔条 1 +x:1 +最高潮 1 +x:1 +带头户 1 +x:1 +万无一失 1 +x:1 +剧增 1 +x:1 +鼠辈 1 +x:1 +醋意 1 +x:1 +中厂乡 1 +x:1 +大塘 1 +x:1 +危 29 +x:29 +禾草 1 +x:1 +片甲不留 1 +x:1 +报考者 1 +x:1 +死记 1 +x:1 +供应证 1 +x:1 +大妹 1 +x:1 +辰砂 1 +x:1 +摸摸 1 +x:1 +勇气 1 +x:1 +民间文学 1 +x:1 +安济 1 +x:1 +安流 1 +x:1 +永续 1 +x:1 +四家屯村 1 +x:1 +死讯 1 +x:1 +苔衣 1 +x:1 +院校 1 +x:1 +司长级 1 +x:1 +后福 1 +x:1 +鼠蹊 1 +x:1 +近战 1 +x:1 +欢迎 1 +x:1 +铲运机 1 +x:1 +以小见大 1 +x:1 +静乐县 1 +x:1 +防空兵 1 +x:1 +家庭剧 1 +x:1 +麻醉科 1 +x:1 +左路 1 +x:1 +查体 1 +x:1 +大妈 1 +x:1 +车马坑 1 +x:1 +监理岗 1 +x:1 +国是 1 +x:1 +寻亲者 1 +x:1 +祝酒辞 1 +x:1 +后移 1 +x:1 +奸贼 1 +x:1 +鹞雀 1 +x:1 +坐骨 1 +x:1 +大姨 1 +x:1 +白钨矿 1 +x:1 +坐骑 1 +x:1 +大姓 1 +x:1 +安洼 1 +x:1 +大姑 1 +x:1 +大姐 1 +x:1 +重重的 1 +x:1 +坦诚 1 +x:1 +禾苗 1 +x:1 +韵语 1 +x:1 +滞重 1 +x:1 +鸡瘟 1 +x:1 +二话 1 +x:1 +存款人 1 +x:1 +年三十 1 +x:1 +空间科学 1 +x:1 +大头 1 +x:1 +穷形尽相 1 +x:1 +零时 1 +x:1 +台湾省 1 +x:1 +房顶 1 +x:1 +香功 1 +x:1 +民不聊生 1 +x:1 +标准时 1 +x:1 +争创 1 +x:1 +大大 1 +x:1 +集权 1 +x:1 +刘家峡 1 +x:1 +十二指肠 1 +x:1 +忘我 1 +x:1 +大夫 1 +x:1 +保时 1 +x:1 +拂扬 1 +x:1 +评点家 1 +x:1 +大多 1 +x:1 +婚礼 1 +x:1 +复色光 1 +x:1 +运算量 1 +x:1 +镇守 1 +x:1 +工艺品 1 +x:1 +潮起 1 +x:1 +智能机 1 +x:1 +追赶 1 +x:1 +半自给 1 +x:1 +试用品 1 +x:1 +挖墙脚 1 +x:1 +编选 1 +x:1 +大好 1 +x:1 +宝汤村 1 +x:1 +走嘴 1 +x:1 +推斥力 1 +x:1 +够格 1 +x:1 +净胜球 1 +x:1 +贤妻 1 +x:1 +错金 1 +x:1 +编造 1 +x:1 +大奖 1 +x:1 +鹰爪毛儿 1 +x:1 +交口县 1 +x:1 +足足 1 +x:1 +自足村 1 +x:1 +保方 1 +x:1 +汰劣 1 +x:1 +靳 53 +x:53 +追赃 1 +x:1 +装修物 1 +x:1 +龙宝区 1 +x:1 +拒假者 1 +x:1 +大康 1 +x:1 +身着 1 +x:1 +感情式 1 +x:1 +天井 1 +x:1 +第一夫人 1 +x:1 +大度 1 +x:1 +邓小平 1 +x:1 +古人 1 +x:1 +镇容 1 +x:1 +欺诈性 1 +x:1 +养身 1 +x:1 +阔大 1 +x:1 +骚体 1 +x:1 +琐琐 1 +x:1 +情质 1 +x:1 +幸免 1 +x:1 +婚约 1 +x:1 +笑凝 1 +x:1 +大庆 1 +x:1 +纵目 1 +x:1 +间苗 1 +x:1 +斯瓦诺 1 +x:1 +慧心 1 +x:1 +涿鹿县 1 +x:1 +古井 1 +x:1 +婚纱 1 +x:1 +硬梆梆 1 +x:1 +享有盛誉 1 +x:1 +后续 1 +x:1 +岗前 1 +x:1 +刁悍 1 +x:1 +古代 1 +x:1 +款物 1 +x:1 +沉潜 1 +x:1 +督阵 1 +x:1 +保户 1 +x:1 +走时 1 +x:1 +古今 1 +x:1 +铁汉 1 +x:1 +古体诗 1 +x:1 +空暇 1 +x:1 +代培 1 +x:1 +平弦 1 +x:1 +亮相 1 +x:1 +进度 1 +x:1 +价 162 +x:162 +配角 1 +x:1 +鸡霍乱 1 +x:1 +基地带 1 +x:1 +乡巴佬 1 +x:1 +雍容大度 1 +x:1 +瘦干 1 +x:1 +难以成眠 1 +x:1 +嫩绿 1 +x:1 +神经错乱 1 +x:1 +烙铁 1 +x:1 +校训 1 +x:1 +看台 1 +x:1 +阁员 1 +x:1 +套话 1 +x:1 +户养 1 +x:1 +黑斑病 1 +x:1 +宁波 1 +x:1 +真主 1 +x:1 +紫泥泉 1 +x:1 +双刃剑 1 +x:1 +青杨 1 +x:1 +大帝 1 +x:1 +情趣 1 +x:1 +悲伤 1 +x:1 +珐琅质 1 +x:1 +大市 1 +x:1 +袍笏登场 1 +x:1 +持枪证 1 +x:1 +宅急送 1 +x:1 +截然 1 +x:1 +大师 1 +x:1 +后蟠桃村 1 +x:1 +大年 1 +x:1 +大干 1 +x:1 +近时 1 +x:1 +古书 1 +x:1 +工具厂 1 +x:1 +大幸 1 +x:1 +近日 1 +x:1 +幅员 1 +x:1 +丽人 1 +x:1 +戒石铭 1 +x:1 +大幕 1 +x:1 +依兰 1 +x:1 +涡扇 1 +x:1 +百感 1 +x:1 +协税护税 1 +x:1 +驯 4 +x:4 +近旁 1 +x:1 +保护 1 +x:1 +大幅 1 +x:1 +这样 1 +x:1 +高坑田 1 +x:1 +真书 1 +x:1 +多样 1 +x:1 +姑母 1 +x:1 +箪食壶浆 1 +x:1 +古乐 1 +x:1 +学前 1 +x:1 +大德 1 +x:1 +盈余 1 +x:1 +聚氯乙烯 1 +x:1 +编集 1 +x:1 +情谊 1 +x:1 +白帽 1 +x:1 +情调 1 +x:1 +自主权 1 +x:1 +腻虫 1 +x:1 +白带 1 +x:1 +枪法 1 +x:1 +依傍 1 +x:1 +追讨 1 +x:1 +安歇 1 +x:1 +惩一儆百 1 +x:1 +高庙村 1 +x:1 +学院奖 1 +x:1 +八不要 1 +x:1 +白帝 1 +x:1 +没成想 1 +x:1 +八运会 1 +x:1 +塞维利亚 1 +x:1 +试用制 1 +x:1 +以牙还牙 1 +x:1 +白布 1 +x:1 +岗区 1 +x:1 +供体 1 +x:1 +宜兴埠镇 1 +x:1 +白干 1 +x:1 +周年 1 +x:1 +岗南 1 +x:1 +门头沟 1 +x:1 +看到 1 +x:1 +保持 1 +x:1 +追询 1 +x:1 +化学家 1 +x:1 +死路 1 +x:1 +扭亏增盈 1 +x:1 +基律纳 1 +x:1 +泡 61 +x:61 +宁津 1 +x:1 +思想 1 +x:1 +消费资料 1 +x:1 +绒毛皮 1 +x:1 +补征 1 +x:1 +黏合剂 1 +x:1 +确 186 +x:186 +凳 14 +x:14 +守护 1 +x:1 +福利制 1 +x:1 +赐予 1 +x:1 +大忌 1 +x:1 +追诉 1 +x:1 +熔 12 +x:12 +氨基 1 +x:1 +八角田 1 +x:1 +捧捧场 1 +x:1 +死账 1 +x:1 +漫无际涯 1 +x:1 +嫩翠 1 +x:1 +紫光阁 1 +x:1 +幻听 1 +x:1 +注脚 1 +x:1 +奸诈 1 +x:1 +后缀 1 +x:1 +新线 1 +x:1 +搬迁 1 +x:1 +太后 1 +x:1 +胜券 1 +x:1 +闭口不谈 1 +x:1 +后缘 1 +x:1 +白庄 1 +x:1 +巴西队 1 +x:1 +捐赠者 1 +x:1 +根 301 +x:301 +石门岩 1 +x:1 +山绵羊 1 +x:1 +周庄 1 +x:1 +胜利 1 +x:1 +瘦弱 1 +x:1 +南川市 1 +x:1 +奸计 1 +x:1 +长久性 1 +x:1 +盈门 1 +x:1 +遗留 1 +x:1 +主材 1 +x:1 +劝学篇 1 +x:1 +贤德 1 +x:1 +小鲵 1 +x:1 +依偎 1 +x:1 +光化作用 1 +x:1 +编队 1 +x:1 +识破 1 +x:1 +陈吴乡 1 +x:1 +中低收入 1 +x:1 +文陂乡 1 +x:1 +躁动 1 +x:1 +规划署 1 +x:1 +骚人 1 +x:1 +岗台 1 +x:1 +赐与 1 +x:1 +古体 1 +x:1 +惨白色 1 +x:1 +胡琴 1 +x:1 +羁 2 +x:2 +知识 1 +x:1 +户口 1 +x:1 +搬运 1 +x:1 +非计算机 1 +x:1 +艾基莱镇 1 +x:1 +行路人 1 +x:1 +谈谈 1 +x:1 +沫子 1 +x:1 +根杰 1 +x:1 +大岭 1 +x:1 +大岗 1 +x:1 +猛冲 1 +x:1 +医科 1 +x:1 +款款 1 +x:1 +握住 1 +x:1 +太仓 1 +x:1 +摘示 1 +x:1 +喜上眉梢 1 +x:1 +一块儿 1 +x:1 +向量 1 +x:1 +根本 1 +x:1 +苏皖区 1 +x:1 +版 268 +x:268 +小鼠 1 +x:1 +近来 1 +x:1 +豆包 1 +x:1 +数学题 1 +x:1 +户县 1 +x:1 +成塑机 1 +x:1 +将要 1 +x:1 +猛击 1 +x:1 +乌尔禾 1 +x:1 +畲 2 +x:2 +卷帙 1 +x:1 +深泽县 1 +x:1 +复印费 1 +x:1 +穹幕 1 +x:1 +动眼神经 1 +x:1 +书田 1 +x:1 +鱼游釜中 1 +x:1 +心狠 1 +x:1 +进展 1 +x:1 +大尾 1 +x:1 +皮夹子 1 +x:1 +书画 1 +x:1 +实业界 1 +x:1 +忽左忽右 1 +x:1 +秉公执法 1 +x:1 +进屋 1 +x:1 +安检 1 +x:1 +送审稿 1 +x:1 +截止 1 +x:1 +新威路 1 +x:1 +来得及 1 +x:1 +隐蔽所 1 +x:1 +连轴转 1 +x:1 +忘本 1 +x:1 +修船 1 +x:1 +背斜层 1 +x:1 +保龄球热 1 +x:1 +爪子 1 +x:1 +男人味 1 +x:1 +书生 1 +x:1 +大将 1 +x:1 +小葱 1 +x:1 +乌饭树 1 +x:1 +大小 1 +x:1 +奥伦堡 1 +x:1 +大尉 1 +x:1 +集成 1 +x:1 +海葬 1 +x:1 +大山 1 +x:1 +战略物资 1 +x:1 +热辣辣 1 +x:1 +贺信 1 +x:1 +太师渊路 1 +x:1 +喜剧式 1 +x:1 +红军团 1 +x:1 +压强 1 +x:1 +四邻八乡 1 +x:1 +户区 1 +x:1 +倾城倾国 1 +x:1 +百炼成钢 1 +x:1 +被统治者 1 +x:1 +循环体 1 +x:1 +吉林市 1 +x:1 +补射 1 +x:1 +博格腾 1 +x:1 +鸿儒 1 +x:1 +猛兽 1 +x:1 +贴息 1 +x:1 +实物地租 1 +x:1 +易者 1 +x:1 +大局 1 +x:1 +戒赌 1 +x:1 +书界 1 +x:1 +外交界 1 +x:1 +青龙山 1 +x:1 +指南 1 +x:1 +祝酒词 1 +x:1 +补差 1 +x:1 +东不拉 1 +x:1 +醒眼 1 +x:1 +打得火热 1 +x:1 +拜拜 1 +x:1 +小萝卜 1 +x:1 +辞呈 1 +x:1 +压延 1 +x:1 +冰洲石 1 +x:1 +扎纳若尔 1 +x:1 +空旷 1 +x:1 +雕虫小技 1 +x:1 +太保 1 +x:1 +氢 16 +x:16 +指印 1 +x:1 +汇款 1 +x:1 +保国村 1 +x:1 +门面房 1 +x:1 +赤峰 1 +x:1 +狐死首丘 1 +x:1 +大巴 1 +x:1 +白山 1 +x:1 +可读性 1 +x:1 +公理式 1 +x:1 +穹形 1 +x:1 +金钱案 1 +x:1 +小鸡 1 +x:1 +识相 1 +x:1 +素质型 1 +x:1 +锡铁山 1 +x:1 +泽惠 1 +x:1 +四书五经 1 +x:1 +养路 1 +x:1 +近景 1 +x:1 +编钟 1 +x:1 +快 1205 +x:1205 +空文 1 +x:1 +干部处 1 +x:1 +辽阔无涯 1 +x:1 +重 981 +x:981 +非人化 1 +x:1 +二连 1 +x:1 +户办 1 +x:1 +楼上 1 +x:1 +陕南 1 +x:1 +楼价 1 +x:1 +套装 1 +x:1 +隆 8 +x:8 +劲舞 1 +x:1 +鱼苗场 1 +x:1 +防治法 1 +x:1 +瘫子 1 +x:1 +赣鄂皖 1 +x:1 +笑剧 1 +x:1 +拂晓 1 +x:1 +计工 1 +x:1 +白岩 1 +x:1 +库车 1 +x:1 +套裙 1 +x:1 +分寸感 1 +x:1 +套裤 1 +x:1 +天使 1 +x:1 +纸卡 1 +x:1 +管材 1 +x:1 +选拔关 1 +x:1 +查无实据 1 +x:1 +炮眼 1 +x:1 +端点 1 +x:1 +许 656 +x:656 +周岁 1 +x:1 +丽江县 1 +x:1 +必读 1 +x:1 +五常镇 1 +x:1 +小麦 1 +x:1 +袖筒 1 +x:1 +热胀冷缩 1 +x:1 +狗熊 1 +x:1 +虑 8 +x:8 +套袖 1 +x:1 +落脚湖 1 +x:1 +婉告 1 +x:1 +三角蚌 1 +x:1 +二门 1 +x:1 +马兰草 1 +x:1 +专业对口 1 +x:1 +岸柳 1 +x:1 +悍匪 1 +x:1 +邮运网 1 +x:1 +嗜 7 +x:7 +体操房 1 +x:1 +正 2464 +x:2464 +额数 1 +x:1 +绅士 1 +x:1 +吉祥村 1 +x:1 +浮思翩翩 1 +x:1 +青尼罗河 1 +x:1 +土石堤 1 +x:1 +贴慰 1 +x:1 +倒计时 1 +x:1 +酬劳 1 +x:1 +嘿嘿嘿 1 +x:1 +站办所 1 +x:1 +曲意奉承 1 +x:1 +大抵 1 +x:1 +多哈 1 +x:1 +风情片 1 +x:1 +护胸 1 +x:1 +不问 1 +x:1 +岸堤 1 +x:1 +主流 1 +x:1 +劈裂 1 +x:1 +大报 1 +x:1 +冤家对头 1 +x:1 +豆浆 1 +x:1 +外秘 1 +x:1 +共命运 1 +x:1 +汇合 1 +x:1 +仙女型 1 +x:1 +贤才 1 +x:1 +藏医学 1 +x:1 +九冬会 1 +x:1 +多哥 1 +x:1 +皮包骨头 1 +x:1 +空嫂 1 +x:1 +大亚湾 1 +x:1 +批斗者 1 +x:1 +透镜 1 +x:1 +得意忘形 1 +x:1 +近处 1 +x:1 +众怒 1 +x:1 +外移 1 +x:1 +荞麦 1 +x:1 +消暑 1 +x:1 +登记者 1 +x:1 +补报 1 +x:1 +触须 1 +x:1 +珍 12 +x:12 +包装盒 1 +x:1 +责编 1 +x:1 +拉齐奥队 1 +x:1 +自然人 1 +x:1 +单门独户 1 +x:1 +安溪县 1 +x:1 +刷 25 +x:25 +让给 1 +x:1 +十月革命 1 +x:1 +三等奖 1 +x:1 +车水马龙 1 +x:1 +枣强镇 1 +x:1 +演播厅 1 +x:1 +谦和 1 +x:1 +多咱 1 +x:1 +大户 1 +x:1 +指法 1 +x:1 +大戳 1 +x:1 +重钢 1 +x:1 +婿水 1 +x:1 +高新区 1 +x:1 +充电房 1 +x:1 +图书馆学 1 +x:1 +厦门 1 +x:1 +嫡系 1 +x:1 +建祠尸祝 1 +x:1 +格鲁吉亚 1 +x:1 +前半年 1 +x:1 +安国 1 +x:1 +供状 1 +x:1 +大我 1 +x:1 +安图 1 +x:1 +管理学家 1 +x:1 +马塞马拉 1 +x:1 +大战 1 +x:1 +医技 1 +x:1 +遮眼法 1 +x:1 +宠爱者 1 +x:1 +挖掘机 1 +x:1 +大戏 1 +x:1 +圣餐 1 +x:1 +霜雪 1 +x:1 +麻城 1 +x:1 +阁栅 1 +x:1 +古物 1 +x:1 +大批 1 +x:1 +黔 39 +x:39 +伙食 1 +x:1 +老虎帽 1 +x:1 +多向 1 +x:1 +也 18777 +x:18777 +起根由头 1 +x:1 +铭记在心 1 +x:1 +保康 1 +x:1 +票站 1 +x:1 +靥 1 +x:1 +交易员 1 +x:1 +引逗 1 +x:1 +岸壁 1 +x:1 +高塘 1 +x:1 +管庄站 1 +x:1 +抚孤 1 +x:1 +冲浪者 1 +x:1 +缆车 1 +x:1 +无怨无悔 1 +x:1 +音像司 1 +x:1 +白描 1 +x:1 +盐舍 1 +x:1 +不错 1 +x:1 +引退 1 +x:1 +亚癌 1 +x:1 +冰砖 1 +x:1 +玉山闸 1 +x:1 +古玩 1 +x:1 +安坐 1 +x:1 +渊 12 +x:12 +最后 1 +x:1 +次第 1 +x:1 +额定 1 +x:1 +豆汁 1 +x:1 +翻译家 1 +x:1 +真率 1 +x:1 +先锋性 1 +x:1 +好好好 1 +x:1 +经贸工委 1 +x:1 +活扣 1 +x:1 +对验 1 +x:1 +愁苦 1 +x:1 +压惊 1 +x:1 +遥遥地 1 +x:1 +空寂 1 +x:1 +灭火器 1 +x:1 +马拉喀什 1 +x:1 +穿越 1 +x:1 +博湖县 1 +x:1 +玄庙镇 1 +x:1 +笼 12 +x:12 +直快 1 +x:1 +依法 1 +x:1 +神学家 1 +x:1 +秘书长库 1 +x:1 +叙言 1 +x:1 +香精 1 +x:1 +空客 1 +x:1 +默不作声 1 +x:1 +协调员 1 +x:1 +凸纹 1 +x:1 +传播台 1 +x:1 +无林地 1 +x:1 +暖暖和和 1 +x:1 +裂隙 1 +x:1 +汞 7 +x:7 +计分牌 1 +x:1 +普及面 1 +x:1 +重镇 1 +x:1 +霜露 1 +x:1 +高塬 1 +x:1 +点到为止 1 +x:1 +次等 1 +x:1 +指派 1 +x:1 +引蛇出洞 1 +x:1 +蹉跎村 1 +x:1 +维护会 1 +x:1 +待制 1 +x:1 +重病缠身 1 +x:1 +统计师 1 +x:1 +通婚 1 +x:1 +票箱 1 +x:1 +鉴定者 1 +x:1 +农牧展 1 +x:1 +古猿 1 +x:1 +漆布 1 +x:1 +粮囤子 1 +x:1 +大振 1 +x:1 +官店镇 1 +x:1 +农牧局 1 +x:1 +如鱼得水 1 +x:1 +宗庙 1 +x:1 +周报 1 +x:1 +安培 1 +x:1 +周折 1 +x:1 +冰碴 1 +x:1 +于营村 1 +x:1 +番木瓜 1 +x:1 +一片汪洋 1 +x:1 +滴虫 1 +x:1 +空子 1 +x:1 +爬行动物 1 +x:1 +百褶裙 1 +x:1 +大捷 1 +x:1 +公债券 1 +x:1 +钕铁硼 1 +x:1 +刁庄村 1 +x:1 +豆沙 1 +x:1 +钢芯 1 +x:1 +联防 1 +x:1 +我社 1 +x:1 +待办 1 +x:1 +钢花 1 +x:1 +门岗 1 +x:1 +音信 1 +x:1 +联队 1 +x:1 +保德 1 +x:1 +哑巴 1 +x:1 +豆油 1 +x:1 +豪华游 1 +x:1 +通心粉 1 +x:1 +时间段 1 +x:1 +交易商 1 +x:1 +傲睨一世 1 +x:1 +舾装 1 +x:1 +地尽其利 1 +x:1 +摸底 1 +x:1 +超前 1 +x:1 +隐花植物 1 +x:1 +鄂州市 1 +x:1 +棋后 1 +x:1 +古巴队 1 +x:1 +踢腿舞 1 +x:1 +港监局 1 +x:1 +冰笋 1 +x:1 +标价签 1 +x:1 +直径 1 +x:1 +伞 41 +x:41 +百忙 1 +x:1 +保山 1 +x:1 +磕头碰脑 1 +x:1 +大悟 1 +x:1 +顾不得 1 +x:1 +浪头港 1 +x:1 +神甫 1 +x:1 +银款 1 +x:1 +瘸 4 +x:4 +标准局 1 +x:1 +猛涨 1 +x:1 +夏鲁寺 1 +x:1 +谈话费 1 +x:1 +星星点点 1 +x:1 +辉绿岩 1 +x:1 +益寿 1 +x:1 +俯首帖耳 1 +x:1 +擎旗人 1 +x:1 +或多或少 1 +x:1 +安吉 1 +x:1 +心肠 1 +x:1 +阅览厅 1 +x:1 +透露 1 +x:1 +万洲 1 +x:1 +表面积 1 +x:1 +衷情 1 +x:1 +刑警局 1 +x:1 +泽州 1 +x:1 +镜花水月 1 +x:1 +粗豪 1 +x:1 +倒不如 1 +x:1 +剩余劳动 1 +x:1 +漆工 1 +x:1 +终身性 1 +x:1 +足球史 1 +x:1 +政法系 1 +x:1 +借钱者 1 +x:1 +颠荡 1 +x:1 +拉动经济 1 +x:1 +勾笔 1 +x:1 +法航 1 +x:1 +贤惠 1 +x:1 +叩门 1 +x:1 +特困证 1 +x:1 +合而为一 1 +x:1 +遒壮 1 +x:1 +党史部 1 +x:1 +叙文 1 +x:1 +超新星 1 +x:1 +冰箱 1 +x:1 +集并 1 +x:1 +I 2 +x:2 +慢藏诲盗 1 +x:1 +步兵团 1 +x:1 +剧情 1 +x:1 +对劲儿 1 +x:1 +悲观失望 1 +x:1 +查盖 1 +x:1 +陈曹乡 1 +x:1 +对饮 1 +x:1 +怒气冲冲 1 +x:1 +看涨 1 +x:1 +三座大山 1 +x:1 +即墨市 1 +x:1 +宗州 1 +x:1 +调节司 1 +x:1 +坐落 1 +x:1 +奇崛壮阔 1 +x:1 +大恩 1 +x:1 +昌乐县 1 +x:1 +狠 47 +x:47 +肝功能 1 +x:1 +阅览区 1 +x:1 +标准岗 1 +x:1 +权能 1 +x:1 +多嘴 1 +x:1 +神界 1 +x:1 +供热 1 +x:1 +赴会 1 +x:1 +宴会桌 1 +x:1 +审美观 1 +x:1 +蛊惑 1 +x:1 +蜂王 1 +x:1 +宁南 1 +x:1 +珙桐 1 +x:1 +四部曲 1 +x:1 +帮 402 +x:402 +候车室 1 +x:1 +重霄 1 +x:1 +搌布 1 +x:1 +宜都 1 +x:1 +库锦 1 +x:1 +由衷之言 1 +x:1 +科技部 1 +x:1 +布尔卡 1 +x:1 +冷 148 +x:148 +统计局 1 +x:1 +中下游 1 +x:1 +空姐 1 +x:1 +吊白块 1 +x:1 +微凸阵 1 +x:1 +溃不成军 1 +x:1 +摊点儿 1 +x:1 +三分制 1 +x:1 +效应 1 +x:1 +势焰 1 +x:1 +直板高手 1 +x:1 +经理部 1 +x:1 +人民宫 1 +x:1 +插种 1 +x:1 +位能 1 +x:1 +若尔盖 1 +x:1 +熊猫馆 1 +x:1 +不难 1 +x:1 +履新 1 +x:1 +闯关东 1 +x:1 +调节剂 1 +x:1 +渴盼 1 +x:1 +查看 1 +x:1 +日短日稀 1 +x:1 +压抑 1 +x:1 +弹子锁 1 +x:1 +浅一脚 1 +x:1 +证券界 1 +x:1 +宗山 1 +x:1 +穿过 1 +x:1 +八里罕镇 1 +x:1 +额外 1 +x:1 +冰窖 1 +x:1 +古黄河 1 +x:1 +百年 1 +x:1 +冰窟 1 +x:1 +交易地 1 +x:1 +稻草人 1 +x:1 +聊城 1 +x:1 +鸣门 1 +x:1 +降尘器 1 +x:1 +福利法 1 +x:1 +平年 1 +x:1 +先锋报 1 +x:1 +额头 1 +x:1 +空中客车 1 +x:1 +汗珠 1 +x:1 +身故金 1 +x:1 +具名 1 +x:1 +宁可 1 +x:1 +里脚手 1 +x:1 +重组型 1 +x:1 +包装用 1 +x:1 +看法 1 +x:1 +浑圆 1 +x:1 +大意 1 +x:1 +透雕 1 +x:1 +一显身手 1 +x:1 +外稃 1 +x:1 +狂言 1 +x:1 +秸秆量 1 +x:1 +这一来 1 +x:1 +迈 111 +x:111 +东北局 1 +x:1 +苋菜 1 +x:1 +潜心斋 1 +x:1 +社科界 1 +x:1 +课程表 1 +x:1 +线络 1 +x:1 +改频点 1 +x:1 +岸导 1 +x:1 +三分球 1 +x:1 +空头 1 +x:1 +瓜亚基尔 1 +x:1 +枯草热 1 +x:1 +法纪星 1 +x:1 +俯仰自如 1 +x:1 +权臣 1 +x:1 +延安东路 1 +x:1 +棋牌 1 +x:1 +象草 1 +x:1 +协调国 1 +x:1 +计策 1 +x:1 +装配线 1 +x:1 +铺 151 +x:151 +蓄芳 1 +x:1 +行得通 1 +x:1 +以假当真 1 +x:1 +汇倒 1 +x:1 +截击 1 +x:1 +狂跌 1 +x:1 +军事部长 1 +x:1 +收起 1 +x:1 +歇脚 1 +x:1 +惨淡经营 1 +x:1 +身体 1 +x:1 +统计学 1 +x:1 +卑劣 1 +x:1 +混日子 1 +x:1 +皮下组织 1 +x:1 +巩义市 1 +x:1 +回程票 1 +x:1 +贺电 1 +x:1 +真的 1 +x:1 +失 183 +x:183 +白朗 1 +x:1 +鸿毛 1 +x:1 +周期 1 +x:1 +大暑 1 +x:1 +周朝 1 +x:1 +百姓 1 +x:1 +监测站 1 +x:1 +准格尔 1 +x:1 +白河县 1 +x:1 +真皮 1 +x:1 +额度 1 +x:1 +其他 1 +x:1 +东山岛 1 +x:1 +转瞬即逝 1 +x:1 +货运单 1 +x:1 +红骨髓 1 +x:1 +空廓 1 +x:1 +穷苦 1 +x:1 +迎刃而解 1 +x:1 +大曲 1 +x:1 +神学系 1 +x:1 +最先 1 +x:1 +九一三 1 +x:1 +指标 1 +x:1 +书信 1 +x:1 +销子 1 +x:1 +白条 1 +x:1 +宿命论 1 +x:1 +保 391 +x:391 +白杨 1 +x:1 +安分 1 +x:1 +穗闻站 1 +x:1 +须发 1 +x:1 +线组 1 +x:1 +真相 1 +x:1 +挑挑拣拣 1 +x:1 +虎头虎脑 1 +x:1 +其二 1 +x:1 +霸州 1 +x:1 +白杆 1 +x:1 +其五 1 +x:1 +麻包 1 +x:1 +涨幅 1 +x:1 +搽脂抹粉 1 +x:1 +线线 1 +x:1 +抄 57 +x:57 +次级 1 +x:1 +十三 1 +x:1 +索赔期 1 +x:1 +洒扫庭除 1 +x:1 +予取予夺 1 +x:1 +盈盈 1 +x:1 +华山论剑 1 +x:1 +烂兮兮 1 +x:1 +空幻 1 +x:1 +亮丑 1 +x:1 +泸山 1 +x:1 +印史 1 +x:1 +檀香 1 +x:1 +政通人和 1 +x:1 +不配 1 +x:1 +白果 1 +x:1 +感光纸 1 +x:1 +化学所 1 +x:1 +金丝边 1 +x:1 +防城港市 1 +x:1 +水利部 1 +x:1 +亮丽 1 +x:1 +可亲可敬 1 +x:1 +大明 1 +x:1 +并未 1 +x:1 +禾 3 +x:3 +截儿 1 +x:1 +慢坡 1 +x:1 +无限公司 1 +x:1 +其中 1 +x:1 +众口难调 1 +x:1 +查点 1 +x:1 +索赔权 1 +x:1 +鹏程万里 1 +x:1 +吊民伐罪 1 +x:1 +穿衣 1 +x:1 +农牧处 1 +x:1 +百大 1 +x:1 +其一 1 +x:1 +发射率 1 +x:1 +书体 1 +x:1 +其三 1 +x:1 +其下 1 +x:1 +训练团 1 +x:1 +棋界 1 +x:1 +穿行 1 +x:1 +包装物 1 +x:1 +阀门界 1 +x:1 +座背 1 +x:1 +冬候鸟 1 +x:1 +贴实 1 +x:1 +灭火剂 1 +x:1 +潘生丁 1 +x:1 +白昼 1 +x:1 +西边 1 +x:1 +保存 1 +x:1 +二二八 1 +x:1 +大枣 1 +x:1 +长短句 1 +x:1 +大枪 1 +x:1 +严肃性 1 +x:1 +旦夕 1 +x:1 +垂柳 1 +x:1 +安危 1 +x:1 +新绿 1 +x:1 +本 2116 +x:2116 +空心 1 +x:1 +城池 1 +x:1 +正长石 1 +x:1 +呵叻府 1 +x:1 +泸州 1 +x:1 +训练场 1 +x:1 +东安 1 +x:1 +利泽千秋 1 +x:1 +单项赛 1 +x:1 +安卧 1 +x:1 +乌漆 1 +x:1 +汇兑 1 +x:1 +书价 1 +x:1 +身下 1 +x:1 +二重唱 1 +x:1 +怀乡思亲 1 +x:1 +坌 1 +x:1 +安化 1 +x:1 +大动干戈 1 +x:1 +身世 1 +x:1 +麻利 1 +x:1 +剧本 1 +x:1 +诟 1 +x:1 +闯入 1 +x:1 +高密市 1 +x:1 +瘦果 1 +x:1 +补助款 1 +x:1 +自治区 1 +x:1 +汇入 1 +x:1 +粉煤灰砖 1 +x:1 +械斗 1 +x:1 +身为 1 +x:1 +真知 1 +x:1 +企管站 1 +x:1 +腹心 1 +x:1 +冰粒 1 +x:1 +进村 1 +x:1 +舅 4 +x:4 +虚无飘渺 1 +x:1 +近岸 1 +x:1 +相投 1 +x:1 +怒火中烧 1 +x:1 +多元 1 +x:1 +一呼百诺 1 +x:1 +肃静 1 +x:1 +保密 1 +x:1 +服役 1 +x:1 +令人不安 1 +x:1 +纵使 1 +x:1 +县令 1 +x:1 +卫生队 1 +x:1 +老儿子 1 +x:1 +延胡索 1 +x:1 +书业 1 +x:1 +摄美部 1 +x:1 +觥筹交错 1 +x:1 +深有所思 1 +x:1 +铁山乡 1 +x:1 +折射角 1 +x:1 +进来 1 +x:1 +五磷 1 +x:1 +噼噼啪啪 1 +x:1 +其余 1 +x:1 +矩型坯 1 +x:1 +身份 1 +x:1 +空当 1 +x:1 +冰糖 1 +x:1 +邵阳市 1 +x:1 +集外 1 +x:1 +冰糕 1 +x:1 +辞源 1 +x:1 +红旗招展 1 +x:1 +畋 1 +x:1 +交易关 1 +x:1 +红五军 1 +x:1 +保定 1 +x:1 +发射状 1 +x:1 +第一国际 1 +x:1 +家电展 1 +x:1 +笤帚头 1 +x:1 +指挥仪 1 +x:1 +粗话 1 +x:1 +保安 1 +x:1 +保守 1 +x:1 +隐蔽处 1 +x:1 +放气门 1 +x:1 +身亡 1 +x:1 +体育馆 1 +x:1 +机修工 1 +x:1 +火箭乡 1 +x:1 +不适 1 +x:1 +干部科 1 +x:1 +专业化 1 +x:1 +重量 1 +x:1 +襄阳 1 +x:1 +兵戈相见 1 +x:1 +大权 1 +x:1 +夜市 1 +x:1 +木质茎 1 +x:1 +不通 1 +x:1 +飞速 1 +x:1 +空峭 1 +x:1 +毫不客气 1 +x:1 +座舱 1 +x:1 +氟化物 1 +x:1 +卡口 1 +x:1 +座船 1 +x:1 +猎 13 +x:13 +木变石 1 +x:1 +橡皮饼 1 +x:1 +杂拌 1 +x:1 +八角亭 1 +x:1 +桃林镇 1 +x:1 +协调化 1 +x:1 +拖欠 1 +x:1 +汇制 1 +x:1 +涑水河 1 +x:1 +乒乓台 1 +x:1 +截取 1 +x:1 +正间房 1 +x:1 +太监 1 +x:1 +辞海 1 +x:1 +龟鹤遐龄 1 +x:1 +福利楼 1 +x:1 +摸奖 1 +x:1 +近影 1 +x:1 +丽水 1 +x:1 +陕西省 1 +x:1 +足球城 1 +x:1 +七姑八姨 1 +x:1 +意见书 1 +x:1 +此职 1 +x:1 +氨水 1 +x:1 +悲痛 1 +x:1 +强加于人 1 +x:1 +污言秽语 1 +x:1 +训练员 1 +x:1 +升学率 1 +x:1 +开学 1 +x:1 +流行色 1 +x:1 +炎陵 1 +x:1 +饮泣吞声 1 +x:1 +炮仗 1 +x:1 +一本万利 1 +x:1 +根式 1 +x:1 +慎言 1 +x:1 +氨气 1 +x:1 +芦丁 1 +x:1 +统计处 1 +x:1 +金钱关 1 +x:1 +拖欠额 1 +x:1 +空岗 1 +x:1 +架子猪 1 +x:1 +太白 1 +x:1 +上确村 1 +x:1 +娇揉造作 1 +x:1 +吊脚 1 +x:1 +群芳争艳 1 +x:1 +褒贬不一 1 +x:1 +防空法 1 +x:1 +脏腑 1 +x:1 +先农坛 1 +x:1 +立筒式 1 +x:1 +真理 1 +x:1 +古琴 1 +x:1 +凭着 1 +x:1 +白斑 1 +x:1 +队日 1 +x:1 +三十日 1 +x:1 +外罩 1 +x:1 +白文 1 +x:1 +厌食症 1 +x:1 +依次 1 +x:1 +非接触型 1 +x:1 +刷子 1 +x:1 +乐呵呵 1 +x:1 +崽 3 +x:3 +闯劲 1 +x:1 +亮泽 1 +x:1 +愕然 1 +x:1 +出售者 1 +x:1 +保墒 1 +x:1 +化学性 1 +x:1 +沧海一粟 1 +x:1 +临界点 1 +x:1 +铌 3 +x:3 +白日 1 +x:1 +清教徒 1 +x:1 +折伞 1 +x:1 +查当乡 1 +x:1 +外缘 1 +x:1 +鸡栅 1 +x:1 +柬埔寨 1 +x:1 +赝 1 +x:1 +不倒翁 1 +x:1 +周日 1 +x:1 +下基层 1 +x:1 +白旗 1 +x:1 +在理会 1 +x:1 +多利 1 +x:1 +普及部 1 +x:1 +压服 1 +x:1 +仰 17 +x:17 +质押人 1 +x:1 +韶 1 +x:1 +白族 1 +x:1 +人民币 1 +x:1 +搂 16 +x:16 +乡闾 1 +x:1 +不严肃性 1 +x:1 +四射 1 +x:1 +正常值 1 +x:1 +大方 1 +x:1 +外经 1 +x:1 +硝烟弥漫 1 +x:1 +大鹏湾 1 +x:1 +多变 1 +x:1 +活性染料 1 +x:1 +白搭 1 +x:1 +补时 1 +x:1 +多发 1 +x:1 +最初 1 +x:1 +科技链 1 +x:1 +供电 1 +x:1 +江轮 1 +x:1 +明晰性 1 +x:1 +浑厚 1 +x:1 +大料 1 +x:1 +待命 1 +x:1 +安全 1 +x:1 +换岗 1 +x:1 +指正 1 +x:1 +追逼 1 +x:1 +发电机组 1 +x:1 +茶文化 1 +x:1 +交易厅 1 +x:1 +五三乡 1 +x:1 +财阀式 1 +x:1 +白石灰 1 +x:1 +叙谈 1 +x:1 +保外 1 +x:1 +吃大锅饭 1 +x:1 +近年 1 +x:1 +大旱 1 +x:1 +木棉花 1 +x:1 +调节器 1 +x:1 +半流体 1 +x:1 +大城县 1 +x:1 +轩辕庙 1 +x:1 +集宁 1 +x:1 +哈工大 1 +x:1 +奔 197 +x:197 +联邦 1 +x:1 +防空洞 1 +x:1 +杨士乡 1 +x:1 +大早 1 +x:1 +大旨 1 +x:1 +大旗 1 +x:1 +中庄乡 1 +x:1 +激光头 1 +x:1 +驻场式 1 +x:1 +利润率 1 +x:1 +风情画 1 +x:1 +大族 1 +x:1 +岗楼 1 +x:1 +拒人千里 1 +x:1 +外线 1 +x:1 +集子 1 +x:1 +罗彻斯特 1 +x:1 +多半 1 +x:1 +大政 1 +x:1 +廉政日 1 +x:1 +最高分 1 +x:1 +编导家 1 +x:1 +砾岩 1 +x:1 +保姆 1 +x:1 +古画 1 +x:1 +砍饼 1 +x:1 +供货点 1 +x:1 +古田 1 +x:1 +楼盖 1 +x:1 +谦卑 1 +x:1 +冲昏 1 +x:1 +泽库县 1 +x:1 +麦 46 +x:46 +慎证 1 +x:1 +躬身 1 +x:1 +楼盘 1 +x:1 +蒙古国 1 +x:1 +西沙里村 1 +x:1 +显山露水 1 +x:1 +刁孽 1 +x:1 +御史中丞 1 +x:1 +冰结 1 +x:1 +炮位 1 +x:1 +大数 1 +x:1 +乒羽 1 +x:1 +灌阳 1 +x:1 +施救 1 +x:1 +发射点 1 +x:1 +沙文主义 1 +x:1 +联通 1 +x:1 +范市镇 1 +x:1 +诊区 1 +x:1 +折中 1 +x:1 +进攻 1 +x:1 +自相残害 1 +x:1 +披肩 1 +x:1 +收割期 1 +x:1 +卧床 1 +x:1 +枣园镇 1 +x:1 +竹布 1 +x:1 +大敌 1 +x:1 +根底 1 +x:1 +联退 1 +x:1 +蒜苗 1 +x:1 +重婚 1 +x:1 +弗吉尼亚 1 +x:1 +看来 1 +x:1 +长途费 1 +x:1 +空勤 1 +x:1 +闯将 1 +x:1 +铿锵 1 +x:1 +漏洞百出 1 +x:1 +指摘 1 +x:1 +贺礼 1 +x:1 +试用期 1 +x:1 +箜篌 1 +x:1 +看板 1 +x:1 +材积 1 +x:1 +花招儿 1 +x:1 +包装纸 1 +x:1 +登记表 1 +x:1 +安平 1 +x:1 +供稿 1 +x:1 +墨玉县 1 +x:1 +激光器 1 +x:1 +销地 1 +x:1 +见义勇为 1 +x:1 +富春江 1 +x:1 +披载 1 +x:1 +古窑 1 +x:1 +汇展 1 +x:1 +自鸣得意 1 +x:1 +服务 1 +x:1 +关铝 1 +x:1 +腆 1 +x:1 +磁强计 1 +x:1 +压榨 1 +x:1 +请罪信 1 +x:1 +农经所 1 +x:1 +开源节流 1 +x:1 +演播室 1 +x:1 +根儿 1 +x:1 +另悉 1 +x:1 +樵者 1 +x:1 +周正 1 +x:1 +碾子乡 1 +x:1 +镇海寺 1 +x:1 +大喜大悲 1 +x:1 +颠覆 1 +x:1 +笑料 1 +x:1 +主仆 1 +x:1 +黑松驿乡 1 +x:1 +茸毛 1 +x:1 +依旧 1 +x:1 +看望 1 +x:1 +引领 1 +x:1 +词尾 1 +x:1 +邋遢 1 +x:1 +武昌区 1 +x:1 +近况 1 +x:1 +岳父 1 +x:1 +押韵 1 +x:1 +微电机 1 +x:1 +户数 1 +x:1 +标准团 1 +x:1 +沥水 1 +x:1 +抗旱剂 1 +x:1 +电管站 1 +x:1 +空前 1 +x:1 +保国 1 +x:1 +扎耶尼 1 +x:1 +城雕委 1 +x:1 +胜机 1 +x:1 +炒冷饭 1 +x:1 +古稀 1 +x:1 +涮 1 +x:1 +收生婆 1 +x:1 +胳肢 1 +x:1 +勇争 1 +x:1 +烟草 1 +x:1 +硫磺石 1 +x:1 +柳河县 1 +x:1 +施放 1 +x:1 +遒劲 1 +x:1 +根冠 1 +x:1 +解放鞋 1 +x:1 +念道 1 +x:1 +辞掉 1 +x:1 +历年来 1 +x:1 +待定 1 +x:1 +集合 1 +x:1 +多少 1 +x:1 +安庆 1 +x:1 +驯致 1 +x:1 +真空 1 +x:1 +历朝历代 1 +x:1 +粗蛮 1 +x:1 +空分 1 +x:1 +安康 1 +x:1 +待客 1 +x:1 +外焰 1 +x:1 +阎家庄 1 +x:1 +服刑 1 +x:1 +汗碱 1 +x:1 +生物质 1 +x:1 +干爷娘 1 +x:1 +深浅 1 +x:1 +吊车 1 +x:1 +交易局 1 +x:1 +安度 1 +x:1 +绽破 1 +x:1 +大殿 1 +x:1 +昊 114 +x:114 +两用品 1 +x:1 +泰山北斗 1 +x:1 +立体片 1 +x:1 +躬耕 1 +x:1 +美工区 1 +x:1 +卑微 1 +x:1 +血燥型 1 +x:1 +锨 7 +x:7 +阔气 1 +x:1 +侯 229 +x:229 +奥运村 1 +x:1 +± 16 +x:16 +半生不熟 1 +x:1 +二重奏 1 +x:1 +幻想 1 +x:1 +瓜苗 1 +x:1 +在岗者 1 +x:1 +解放阁 1 +x:1 +泽国 1 +x:1 +协调局 1 +x:1 +保土 1 +x:1 +婉拒 1 +x:1 +学院派 1 +x:1 +宁夏 1 +x:1 +皮包 1 +x:1 +翻译史 1 +x:1 +三思而行 1 +x:1 +产方 1 +x:1 +穷追 1 +x:1 +摞 25 +x:25 +好好儿 1 +x:1 +关闸 1 +x:1 +人民军 1 +x:1 +劣行 1 +x:1 +润州区 1 +x:1 +麻布 1 +x:1 +关门 1 +x:1 +关闭 1 +x:1 +朝城县 1 +x:1 +最高峰 1 +x:1 +冰灯 1 +x:1 +线衣 1 +x:1 +虎尾春冰 1 +x:1 +大款 1 +x:1 +保育院 1 +x:1 +胳膊 1 +x:1 +引证 1 +x:1 +留言条 1 +x:1 +阕 1 +x:1 +医书 1 +x:1 +钻牛角尖 1 +x:1 +阎王爷 1 +x:1 +安心 1 +x:1 +断口 1 +x:1 +余暇 1 +x:1 +犀鸟 1 +x:1 +人民党 1 +x:1 +剧毒 1 +x:1 +效命 1 +x:1 +太祖 1 +x:1 +冰点 1 +x:1 +宜 67 +x:67 +我市 1 +x:1 +白檀 1 +x:1 +河南队 1 +x:1 +口出怨言 1 +x:1 +实收率 1 +x:1 +传播学 1 +x:1 +随处可闻 1 +x:1 +本周一 1 +x:1 +破袭战 1 +x:1 +缉私处 1 +x:1 +牛肉饼 1 +x:1 +包装罐 1 +x:1 +泥河镇 1 +x:1 +坦陈 1 +x:1 +大步 1 +x:1 +勒 19 +x:19 +大正 1 +x:1 +扶上马 1 +x:1 +胳臂 1 +x:1 +压根 1 +x:1 +关镇 1 +x:1 +医专 1 +x:1 +镇直 1 +x:1 +安徽 1 +x:1 +进款 1 +x:1 +机言巧语 1 +x:1 +受让人 1 +x:1 +百合 1 +x:1 +标准型 1 +x:1 +瓷雕 1 +x:1 +古筝 1 +x:1 +漆器 1 +x:1 +汇差 1 +x:1 +嗅神经 1 +x:1 +硝酸甘油 1 +x:1 +关隘 1 +x:1 +肇 2 +x:2 +可逆 1 +x:1 +胆识过人 1 +x:1 +守擂 1 +x:1 +独此一家 1 +x:1 +推销部 1 +x:1 +汇市 1 +x:1 +低价位 1 +x:1 +蜂窝 1 +x:1 +安居 1 +x:1 +拖期 1 +x:1 +洋洋得意 1 +x:1 +证件费 1 +x:1 +偏关县 1 +x:1 +安山 1 +x:1 +请愿信 1 +x:1 +毛遂自荐 1 +x:1 +夏令时 1 +x:1 +莱 4 +x:4 +产油井 1 +x:1 +慧眼识珠 1 +x:1 +笑柄 1 +x:1 +大梁 1 +x:1 +咱俩 1 +x:1 +减肥 1 +x:1 +持有额 1 +x:1 +两用型 1 +x:1 +步兵师 1 +x:1 +奥地利队 1 +x:1 +葵花仁 1 +x:1 +青面獠牙 1 +x:1 +缓缴 1 +x:1 +怒气冲天 1 +x:1 +痕 3 +x:3 +关雎 1 +x:1 +剧校 1 +x:1 +指明 1 +x:1 +对外司 1 +x:1 +科技馆 1 +x:1 +门阀 1 +x:1 +祢 8 +x:8 +大棒 1 +x:1 +鼎城 1 +x:1 +榧子 1 +x:1 +缓缓 1 +x:1 +权衡 1 +x:1 +爷们儿 1 +x:1 +大棚 1 +x:1 +泯 8 +x:8 +遇险者 1 +x:1 +瘦梅 1 +x:1 +姑娘儿 1 +x:1 +从严治政 1 +x:1 +赐福 1 +x:1 +信号枪 1 +x:1 +大样 1 +x:1 +玉龙 1 +x:1 +七 637 +x:637 +向军北里 1 +x:1 +太空 1 +x:1 +缕空 1 +x:1 +伊斯兰堡 1 +x:1 +狂草 1 +x:1 +鱼目混珠 1 +x:1 +农用车 1 +x:1 +欢叫声 1 +x:1 +大校 1 +x:1 +日光 1 +x:1 +多幕 1 +x:1 +不齿 1 +x:1 +包钢 1 +x:1 +根号 1 +x:1 +用户数 1 +x:1 +宾馆化 1 +x:1 +大树 1 +x:1 +猛攻 1 +x:1 +关防 1 +x:1 +咸镜南道 1 +x:1 +多年 1 +x:1 +查结 1 +x:1 +计征 1 +x:1 +乱石坡 1 +x:1 +冬虫夏草 1 +x:1 +宜阳县 1 +x:1 +镇痛 1 +x:1 +公示制 1 +x:1 +大桥 1 +x:1 +奋笔直书 1 +x:1 +进栏 1 +x:1 +树墩子 1 +x:1 +地勘处 1 +x:1 +农牧场 1 +x:1 +倡议者 1 +x:1 +豆架 1 +x:1 +安岳 1 +x:1 +吊起 1 +x:1 +劫款 1 +x:1 +捱 1 +x:1 +家务活 1 +x:1 +进校 1 +x:1 +结对联手 1 +x:1 +社科类 1 +x:1 +忘却 1 +x:1 +大案 1 +x:1 +家弦户诵 1 +x:1 +候车厅 1 +x:1 +纵深 1 +x:1 +多心 1 +x:1 +岸区 1 +x:1 +山丘区 1 +x:1 +坏分子 1 +x:1 +东山县 1 +x:1 +脸皮薄 1 +x:1 +吹风机 1 +x:1 +不足以 1 +x:1 +野鹤闲云 1 +x:1 +蔚然成风 1 +x:1 +效国 1 +x:1 +标价牌 1 +x:1 +过敏性 1 +x:1 +空气层 1 +x:1 +大概 1 +x:1 +栾老 1 +x:1 +咱们 1 +x:1 +三网一榜 1 +x:1 +凯歌 1 +x:1 +外延 1 +x:1 +仰头 1 +x:1 +指望 1 +x:1 +麻尾 1 +x:1 +城步 1 +x:1 +座车 1 +x:1 +白桦 1 +x:1 +冰片 1 +x:1 +积蓄量 1 +x:1 +城关村 1 +x:1 +雷鸣电闪 1 +x:1 +大雪纷飞 1 +x:1 +隐蔽型 1 +x:1 +智能型 1 +x:1 +偷漏税 1 +x:1 +麻将 1 +x:1 +空军 1 +x:1 +铸币厂 1 +x:1 +近前 1 +x:1 +白案 1 +x:1 +李子酒 1 +x:1 +登记证 1 +x:1 +推力器 1 +x:1 +拉郎配 1 +x:1 +正科级 1 +x:1 +丝绵被 1 +x:1 +东山区 1 +x:1 +眼中钉 1 +x:1 +药理系 1 +x:1 +苏和区 1 +x:1 +白梨 1 +x:1 +握竿 1 +x:1 +遮遮掩掩 1 +x:1 +辛辛那提 1 +x:1 +多彩 1 +x:1 +三等功 1 +x:1 +贯 8 +x:8 +策划者 1 +x:1 +酒窝儿 1 +x:1 +大楷 1 +x:1 +多式 1 +x:1 +致富机 1 +x:1 +岗旁 1 +x:1 +一储到底 1 +x:1 +大楼 1 +x:1 +裁谈会 1 +x:1 +来鸿 1 +x:1 +空儿 1 +x:1 +思绪万千 1 +x:1 +敲山震虎 1 +x:1 +索赔案 1 +x:1 +供种 1 +x:1 +医患 1 +x:1 +靠山吃山 1 +x:1 +萨瓦河 1 +x:1 +篓子 1 +x:1 +笑星 1 +x:1 +采访服 1 +x:1 +拖曳 1 +x:1 +犹犹豫豫 1 +x:1 +梦牵魂绕 1 +x:1 +公共性 1 +x:1 +白棉 1 +x:1 +里庄镇 1 +x:1 +白棋 1 +x:1 +薛套村 1 +x:1 +硬座票 1 +x:1 +劣质 1 +x:1 +先锋派 1 +x:1 +婚事 1 +x:1 +出人意外 1 +x:1 +劣货 1 +x:1 +骏 23 +x:23 +大概其 1 +x:1 +无悔无怨 1 +x:1 +后人 1 +x:1 +片纸只字 1 +x:1 +单层次 1 +x:1 +霍布逊湖 1 +x:1 +凌驾 1 +x:1 +管窥 1 +x:1 +排龙乡 1 +x:1 +大溪 1 +x:1 +碣 1 +x:1 +巴拉那河 1 +x:1 +后于 1 +x:1 +宗匠 1 +x:1 +大溜 1 +x:1 +石河村 1 +x:1 +常务委员 1 +x:1 +前世 1 +x:1 +销区 1 +x:1 +辞条 1 +x:1 +西大山 1 +x:1 +上皮组织 1 +x:1 +出口成章 1 +x:1 +握紧 1 +x:1 +婚介 1 +x:1 +标注值 1 +x:1 +栈道 1 +x:1 +后代 1 +x:1 +不拘小节 1 +x:1 +呐 10 +x:10 +后任 1 +x:1 +成事 1 +x:1 +兰摧玉折 1 +x:1 +查破 1 +x:1 +分兵把口 1 +x:1 +姑子 1 +x:1 +撒手锏 1 +x:1 +艺能 1 +x:1 +树隙 1 +x:1 +树障 1 +x:1 +断垣残壁 1 +x:1 +臭皮囊 1 +x:1 +毛收入 1 +x:1 +擀制 1 +x:1 +精神焕发 1 +x:1 +绷 17 +x:17 +泳衣 1 +x:1 +玉门关 1 +x:1 +标准分 1 +x:1 +刷写 1 +x:1 +泽及 1 +x:1 +百兽 1 +x:1 +体育部 1 +x:1 +外界 1 +x:1 +统计司 1 +x:1 +室长 1 +x:1 +鲤鱼 1 +x:1 +戒断率 1 +x:1 +膘肥体壮 1 +x:1 +大港 1 +x:1 +贴切 1 +x:1 +制皮厂 1 +x:1 +招投标率 1 +x:1 +朋友 1 +x:1 +罪人 1 +x:1 +精子库 1 +x:1 +华达呢 1 +x:1 +漆匠 1 +x:1 +保安科 1 +x:1 +后业 1 +x:1 +披读 1 +x:1 +劳燕分飞 1 +x:1 +后世 1 +x:1 +浮来山 1 +x:1 +退化 1 +x:1 +货运室 1 +x:1 +供给 1 +x:1 +对面 1 +x:1 +埃因霍温 1 +x:1 +看样子 1 +x:1 +职工部 1 +x:1 +棘 2 +x:2 +成份 1 +x:1 +高能所 1 +x:1 +红11团 1 +x:1 +泳装 1 +x:1 +外生 1 +x:1 +继承国 1 +x:1 +大湖 1 +x:1 +须子 1 +x:1 +外甥 1 +x:1 +外用 1 +x:1 +婚书 1 +x:1 +短巴巴 1 +x:1 +连丰 1 +x:1 +统计厅 1 +x:1 +石库门 1 +x:1 +呼叫器 1 +x:1 +零星 1 +x:1 +原子球宫 1 +x:1 +笑意 1 +x:1 +保单 1 +x:1 +周游 1 +x:1 +白面儿 1 +x:1 +大澳 1 +x:1 +崇山峻岭 1 +x:1 +芭蕾舞界 1 +x:1 +冰球 1 +x:1 +宜黄 1 +x:1 +充耳不闻 1 +x:1 +透顶 1 +x:1 +保协 1 +x:1 +普法 1 +x:1 +定位仪 1 +x:1 +迟误 1 +x:1 +打家劫舍 1 +x:1 +软骨 1 +x:1 +洪家拳 1 +x:1 +姑娘 1 +x:1 +包装箱 1 +x:1 +婚侣 1 +x:1 +小不点儿 1 +x:1 +多姿 1 +x:1 +多彩多姿 1 +x:1 +寒风料峭 1 +x:1 +保卫 1 +x:1 +保北 1 +x:1 +蓄谋 1 +x:1 +理论界 1 +x:1 +流言蜚语 1 +x:1 +伊拜尔 1 +x:1 +核技术 1 +x:1 +雪片 1 +x:1 +婚俗 1 +x:1 +政研室 1 +x:1 +峡 16 +x:16 +调解队 1 +x:1 +歧途 1 +x:1 +登记账 1 +x:1 +有隙可乘 1 +x:1 +婉曲 1 +x:1 +标准化 1 +x:1 +转 549 +x:549 +可靠 1 +x:1 +看成 1 +x:1 +聊天 1 +x:1 +姑婆 1 +x:1 +登记费 1 +x:1 +制海权 1 +x:1 +规划会 1 +x:1 +新义州 1 +x:1 +粮经型 1 +x:1 +标准台 1 +x:1 +窍门 1 +x:1 +神经衰弱 1 +x:1 +日成交额 1 +x:1 +江原道 1 +x:1 +大漠 1 +x:1 +板房沟 1 +x:1 +不顾 1 +x:1 +对阵 1 +x:1 +透风 1 +x:1 +凸版 1 +x:1 +月弯残雪 1 +x:1 +查私 1 +x:1 +肉食鸡 1 +x:1 +大漆 1 +x:1 +成仁 1 +x:1 +付款部 1 +x:1 +擦屁股 1 +x:1 +新式 1 +x:1 +销势 1 +x:1 +计生 1 +x:1 +猛打 1 +x:1 +猛扑 1 +x:1 +安定 1 +x:1 +深信不疑 1 +x:1 +看报 1 +x:1 +多多许 1 +x:1 +浅见 1 +x:1 +反中子 1 +x:1 +行色匆匆 1 +x:1 +投放量 1 +x:1 +评估费 1 +x:1 +多多 1 +x:1 +安宁 1 +x:1 +大潮 1 +x:1 +空地 1 +x:1 +依恋 1 +x:1 +八一队 1 +x:1 +补漏 1 +x:1 +冰瓶 1 +x:1 +查禁 1 +x:1 +跌破 1 +x:1 +安家 1 +x:1 +姑嫂 1 +x:1 +多头 1 +x:1 +勇涉 1 +x:1 +权谋 1 +x:1 +卫星赛 1 +x:1 +月钱 1 +x:1 +大河 1 +x:1 +小道儿 1 +x:1 +安塞 1 +x:1 +空哥 1 +x:1 +畸轻畸重 1 +x:1 +大油 1 +x:1 +东北军 1 +x:1 +装疯卖傻 1 +x:1 +婚介业 1 +x:1 +维文 1 +x:1 +姑夫 1 +x:1 +查究 1 +x:1 +泪人儿 1 +x:1 +灭鼠 1 +x:1 +硬板板的 1 +x:1 +十五中 1 +x:1 +民办公助 1 +x:1 +零位 1 +x:1 +我盟 1 +x:1 +保健 1 +x:1 +仿制 1 +x:1 +引黄 1 +x:1 +至极 1 +x:1 +回肠荡气 1 +x:1 +俚歌 1 +x:1 +慢工 1 +x:1 +昼间 1 +x:1 +稀有金属 1 +x:1 +标准值 1 +x:1 +家电城 1 +x:1 +变温动物 1 +x:1 +大泽 1 +x:1 +钢质 1 +x:1 +西药店 1 +x:1 +训练局 1 +x:1 +混淆黑白 1 +x:1 +逢场作戏 1 +x:1 +屈光度 1 +x:1 +金龟子 1 +x:1 +阔步 1 +x:1 +光密媒质 1 +x:1 +白浪 1 +x:1 +佛山市 1 +x:1 +大法 1 +x:1 +遭难 1 +x:1 +现名 1 +x:1 +相见恨晚 1 +x:1 +沉香亭 1 +x:1 +保值 1 +x:1 +进油 1 +x:1 +多晶硅 1 +x:1 +协调学 1 +x:1 +蚌雕 1 +x:1 +周济 1 +x:1 +魔芋 1 +x:1 +专递 1 +x:1 +紫橄榄菜 1 +x:1 +蒙特卡洛 1 +x:1 +大泊 1 +x:1 +亚种 1 +x:1 +大水 1 +x:1 +周转金 1 +x:1 +瓜蔓 1 +x:1 +大幅让利 1 +x:1 +八一镇 1 +x:1 +腱鞘 1 +x:1 +根基 1 +x:1 +流行歌曲 1 +x:1 +幻术 1 +x:1 +具备 1 +x:1 +大气 1 +x:1 +待工 1 +x:1 +联络员 1 +x:1 +鼻咽癌 1 +x:1 +截子 1 +x:1 +借款者 1 +x:1 +对错 1 +x:1 +大氅 1 +x:1 +倾心吐胆 1 +x:1 +标准像 1 +x:1 +姑妈 1 +x:1 +土堤仓 1 +x:1 +作代会 1 +x:1 +抽象劳动 1 +x:1 +外省 1 +x:1 +托斯卡纳 1 +x:1 +积劳成疾 1 +x:1 +泽兰 1 +x:1 +触雷 1 +x:1 +盛况空前 1 +x:1 +农牧化 1 +x:1 +鳌 2 +x:2 +劣迹 1 +x:1 +空吸 1 +x:1 +比格尔 1 +x:1 +戈梅里 1 +x:1 +合议厅 1 +x:1 +集刊 1 +x:1 +探路者 1 +x:1 +包门 1 +x:1 +姑姑 1 +x:1 +古籍 1 +x:1 +大江 1 +x:1 +股金款 1 +x:1 +大汛 1 +x:1 +追查 1 +x:1 +水涨船高 1 +x:1 +监管部门 1 +x:1 +浩然之气 1 +x:1 +依据 1 +x:1 +大汉 1 +x:1 +多味斋 1 +x:1 +白水 1 +x:1 +诊察 1 +x:1 +小辫子 1 +x:1 +拦阻 1 +x:1 +我矿 1 +x:1 +五步蛇 1 +x:1 +大涧 1 +x:1 +零乱 1 +x:1 +老虎凳 1 +x:1 +对比性 1 +x:1 +交易室 1 +x:1 +逆定理 1 +x:1 +蜂群 1 +x:1 +进深 1 +x:1 +安好 1 +x:1 +角色 1 +x:1 +彻头彻尾 1 +x:1 +权责 1 +x:1 +大涝 1 +x:1 +意见本 1 +x:1 +多寡 1 +x:1 +保养 1 +x:1 +鼎力 1 +x:1 +自传体 1 +x:1 +外相 1 +x:1 +大醇小疵 1 +x:1 +上星期 1 +x:1 +保全 1 +x:1 +次生 1 +x:1 +瞪眼 1 +x:1 +效力 1 +x:1 +安多 1 +x:1 +检漏仪 1 +x:1 +淤积量 1 +x:1 +学术团体 1 +x:1 +岸坡 1 +x:1 +蠢动 1 +x:1 +庙滩镇 1 +x:1 +船舶业 1 +x:1 +安外 1 +x:1 +软食 1 +x:1 +白汤 1 +x:1 +兔 29 +x:29 +吊装 1 +x:1 +石榴庄村 1 +x:1 +柳堡 1 +x:1 +腊月十六 1 +x:1 +流程图 1 +x:1 +空喊 1 +x:1 +福利性 1 +x:1 +效劳 1 +x:1 +零上 1 +x:1 +取巧 1 +x:1 +板房沟乡 1 +x:1 +集县 1 +x:1 +碾子 1 +x:1 +亭子间 1 +x:1 +腴 1 +x:1 +诊室 1 +x:1 +肄业 1 +x:1 +宁心 1 +x:1 +打前站 1 +x:1 +拖把 1 +x:1 +白油 1 +x:1 +丽日 1 +x:1 +技术奖 1 +x:1 +低收入者 1 +x:1 +保准 1 +x:1 +零件 1 +x:1 +多孔 1 +x:1 +难辞其咎 1 +x:1 +地勘局 1 +x:1 +多子 1 +x:1 +大洪 1 +x:1 +白沫 1 +x:1 +经典性 1 +x:1 +保函 1 +x:1 +大洞 1 +x:1 +白沟 1 +x:1 +松子糖 1 +x:1 +白沙 1 +x:1 +泄洪洞 1 +x:1 +割晒机 1 +x:1 +砭石 1 +x:1 +巧取豪夺 1 +x:1 +旁岔儿 1 +x:1 +农神节 1 +x:1 +大洋 1 +x:1 +大义灭亲 1 +x:1 +贤淑 1 +x:1 +大海 1 +x:1 +歃 1 +x:1 +流行语 1 +x:1 +冰盖 1 +x:1 +拖拉 1 +x:1 +瓜葛 1 +x:1 +念青 1 +x:1 +岸基 1 +x:1 +近因 1 +x:1 +汇寄 1 +x:1 +心病 1 +x:1 +煦煦 1 +x:1 +周波 1 +x:1 +待岗 1 +x:1 +幻景 1 +x:1 +大浪 1 +x:1 +三边四荒 1 +x:1 +季 183 +x:183 +酬报 1 +x:1 +粉末状 1 +x:1 +缕缕 1 +x:1 +智能化 1 +x:1 +我省 1 +x:1 +滇池 1 +x:1 +宁德 1 +x:1 +眼镜片 1 +x:1 +百分 1 +x:1 +遥感 1 +x:1 +作文本 1 +x:1 +挣断 1 +x:1 +规划办 1 +x:1 +梅花山 1 +x:1 +引论 1 +x:1 +主动权 1 +x:1 +农委 1 +x:1 +港西港池 1 +x:1 +远华队 1 +x:1 +身子 1 +x:1 +鹅毛雪 1 +x:1 +身孕 1 +x:1 +平原 1 +x:1 +后劲 1 +x:1 +对讲 1 +x:1 +永康市 1 +x:1 +白猫 1 +x:1 +悖晦 1 +x:1 +非线型 1 +x:1 +外交官 1 +x:1 +东北侧 1 +x:1 +秘鲁海 1 +x:1 +潭水 1 +x:1 +岳 66 +x:66 +突击队 1 +x:1 +遂平 1 +x:1 +薹 1 +x:1 +驻京办 1 +x:1 +供货期 1 +x:1 +罪不容赦 1 +x:1 +大狱 1 +x:1 +小曹娥镇 1 +x:1 +后勤 1 +x:1 +缓收 1 +x:1 +合霉素 1 +x:1 +阔略 1 +x:1 +发射机 1 +x:1 +零儿 1 +x:1 +纠察队 1 +x:1 +物理奖 1 +x:1 +对证 1 +x:1 +保举 1 +x:1 +生吞活咽 1 +x:1 +披露 1 +x:1 +对话 1 +x:1 +实业家 1 +x:1 +古拙 1 +x:1 +风烛残年 1 +x:1 +运动史 1 +x:1 +蝶岛 1 +x:1 +风吹雨淋 1 +x:1 +菠菜 1 +x:1 +大爷 1 +x:1 +良辰美景 1 +x:1 +升班马 1 +x:1 +标准件 1 +x:1 +标准价 1 +x:1 +寸步不让 1 +x:1 +柚树 1 +x:1 +逗笑 1 +x:1 +让渡 1 +x:1 +腊月十五 1 +x:1 +信誉度 1 +x:1 +无会周 1 +x:1 +保价 1 +x:1 +引聘 1 +x:1 +医坛 1 +x:1 +麻醉剂 1 +x:1 +狂饮 1 +x:1 +日本籍 1 +x:1 +天晓得 1 +x:1 +成也萧何 1 +x:1 +后刘 1 +x:1 +聊城市 1 +x:1 +月票 1 +x:1 +石湾 1 +x:1 +传真电报 1 +x:1 +白玉 1 +x:1 +玩味 1 +x:1 +婚前 1 +x:1 +岗组 1 +x:1 +通天河 1 +x:1 +因循守旧 1 +x:1 +值长 1 +x:1 +农经站 1 +x:1 +分离主义 1 +x:1 +无足轻重 1 +x:1 +发射架 1 +x:1 +制高点 1 +x:1 +大牢 1 +x:1 +外交学 1 +x:1 +白班 1 +x:1 +炮塔 1 +x:1 +闻讯而来 1 +x:1 +发射极 1 +x:1 +注 75 +x:75 +滴露 1 +x:1 +大牙 1 +x:1 +保人 1 +x:1 +大片 1 +x:1 +踏实 1 +x:1 +身家 1 +x:1 +韵味儿 1 +x:1 +演出者 1 +x:1 +大牌 1 +x:1 +三居室 1 +x:1 +折头 1 +x:1 +次次 1 +x:1 +保佑 1 +x:1 +形骸 1 +x:1 +值钱 1 +x:1 +引致 1 +x:1 +后厢 1 +x:1 +收订 1 +x:1 +东北亚 1 +x:1 +滋养 1 +x:1 +马鼻疽 1 +x:1 +不容乐观 1 +x:1 +保住 1 +x:1 +不明不白 1 +x:1 +狂飙 1 +x:1 +生物链 1 +x:1 +冰样 1 +x:1 +放像机 1 +x:1 +行李牌 1 +x:1 +落沙坡 1 +x:1 +标准体 1 +x:1 +个 17171 +x:17171 +购票卡 1 +x:1 +据理力争 1 +x:1 +效果图 1 +x:1 +土政策 1 +x:1 +诺瓦拉市 1 +x:1 +款式 1 +x:1 +堵车 1 +x:1 +大王 1 +x:1 +漫人 1 +x:1 +生物钟 1 +x:1 +狐假虎威 1 +x:1 +贵阳市 1 +x:1 +灌肠 1 +x:1 +瓷花瓶 1 +x:1 +鹊 2 +x:2 +的话 1 +x:1 +婚变 1 +x:1 +后台 1 +x:1 +大班 1 +x:1 +查收 1 +x:1 +嫡派 1 +x:1 +规划司 1 +x:1 +南社村 1 +x:1 +纵容 1 +x:1 +民主派 1 +x:1 +图腾物 1 +x:1 +号子声 1 +x:1 +依存权 1 +x:1 +苦功夫 1 +x:1 +土堡子村 1 +x:1 +端平 1 +x:1 +古提 1 +x:1 +胜绩 1 +x:1 +以假乱真 1 +x:1 +真挚 1 +x:1 +时间篇 1 +x:1 +遂心 1 +x:1 +原汁原味 1 +x:1 +端庄 1 +x:1 +悲戚 1 +x:1 +登记量 1 +x:1 +和衷共济 1 +x:1 +立体化 1 +x:1 +钡核 1 +x:1 +关贸 1 +x:1 +左中方 1 +x:1 +氩 1 +x:1 +吞云吐雾 1 +x:1 +户籍 1 +x:1 +遥遥相对 1 +x:1 +低气压区 1 +x:1 +帮助者 1 +x:1 +宗亲 1 +x:1 +辞章 1 +x:1 +且末县 1 +x:1 +保修 1 +x:1 +十一时 1 +x:1 +款待 1 +x:1 +沙场路 1 +x:1 +冰棒 1 +x:1 +医嘱 1 +x:1 +吨/日 1 +x:1 +文史哲 1 +x:1 +豆粕 1 +x:1 +妻妾 1 +x:1 +南塘镇 1 +x:1 +十字 1 +x:1 +豆粉 1 +x:1 +查新 1 +x:1 +冰棍 1 +x:1 +触角 1 +x:1 +冰棱 1 +x:1 +白狐 1 +x:1 +农妇 1 +x:1 +主创 1 +x:1 +杏林镇 1 +x:1 +喊叫声 1 +x:1 +北空 1 +x:1 +销价 1 +x:1 +农八师 1 +x:1 +官渡人声 1 +x:1 +营盘镇 1 +x:1 +触觉 1 +x:1 +油渣果 1 +x:1 +八国联军 1 +x:1 +十五分 1 +x:1 +票根 1 +x:1 +颇 451 +x:451 +私生子 1 +x:1 +什么 1 +x:1 +瓷质 1 +x:1 +风雷 1 +x:1 +大炮 1 +x:1 +义利 1 +x:1 +院庆 1 +x:1 +外军 1 +x:1 +剑齿象 1 +x:1 +心惊胆战 1 +x:1 +劫 17 +x:17 +主义者 1 +x:1 +多糖类 1 +x:1 +雷雨云 1 +x:1 +零卖 1 +x:1 +采访组 1 +x:1 +膨胀 1 +x:1 +电讯部 1 +x:1 +饿死事小 1 +x:1 +可行 1 +x:1 +窥探者 1 +x:1 +探矿权 1 +x:1 +黄狮村 1 +x:1 +他乡人 1 +x:1 +拖网 1 +x:1 +物理学 1 +x:1 +身外 1 +x:1 +养痈成患 1 +x:1 +产油国 1 +x:1 +明 429 +x:429 +外因论 1 +x:1 +镇海 1 +x:1 +蜂拥 1 +x:1 +查明 1 +x:1 +缓期 1 +x:1 +贴膜车 1 +x:1 +胎婴儿 1 +x:1 +大烟 1 +x:1 +产后风 1 +x:1 +对视 1 +x:1 +潮州籍 1 +x:1 +色织布 1 +x:1 +圣诞 1 +x:1 +对角 1 +x:1 +势态 1 +x:1 +维棉布 1 +x:1 +平台 1 +x:1 +古怪 1 +x:1 +渴望 1 +x:1 +粗鲁 1 +x:1 +仅次于 1 +x:1 +查封 1 +x:1 +亮堂 1 +x:1 +一塌糊涂 1 +x:1 +小褂 1 +x:1 +撑紧轮 1 +x:1 +磁山镇 1 +x:1 +万众一心 1 +x:1 +供货方 1 +x:1 +云霄县 1 +x:1 +折子 1 +x:1 +人工费 1 +x:1 +吊销 1 +x:1 +大炮仗 1 +x:1 +虚晃一枪 1 +x:1 +解放路 1 +x:1 +渲染性 1 +x:1 +妆饰 1 +x:1 +灌草 1 +x:1 +悲愤 1 +x:1 +十堰 1 +x:1 +办学者 1 +x:1 +婚债 1 +x:1 +真性 1 +x:1 +蜂房 1 +x:1 +身姿 1 +x:1 +白熊 1 +x:1 +冰毒 1 +x:1 +大灶 1 +x:1 +单人床 1 +x:1 +密 32 +x:32 +灭菌 1 +x:1 +婚假 1 +x:1 +枣 28 +x:28 +包销 1 +x:1 +掌声 1 +x:1 +保育费 1 +x:1 +舞蹈团 1 +x:1 +持有者 1 +x:1 +崆岭群 1 +x:1 +园艺系 1 +x:1 +大火 1 +x:1 +赋青镇 1 +x:1 +厚墩墩 1 +x:1 +书套 1 +x:1 +长远型 1 +x:1 +指纹 1 +x:1 +筱 1 +x:1 +地铁口 1 +x:1 +亚方 1 +x:1 +对襟 1 +x:1 +绝对观念 1 +x:1 +无凭无据 1 +x:1 +集中 1 +x:1 +现如今 1 +x:1 +指数函数 1 +x:1 +后冬 1 +x:1 +惊蛰 1 +x:1 +神经中枢 1 +x:1 +输 186 +x:186 +吊针 1 +x:1 +巴里巴里 1 +x:1 +余晖 1 +x:1 +顾不了 1 +x:1 +产品链 1 +x:1 +妻子 1 +x:1 +效仿 1 +x:1 +悲悼 1 +x:1 +握手 1 +x:1 +吊钩 1 +x:1 +∶ 17 +x:17 +履痕 1 +x:1 +非住宅 1 +x:1 +悲悯 1 +x:1 +依纪 1 +x:1 +关进 1 +x:1 +十一月 1 +x:1 +白灰 1 +x:1 +石棺 1 +x:1 +笑纹 1 +x:1 +楼房 1 +x:1 +指缝 1 +x:1 +促进派 1 +x:1 +非技术 1 +x:1 +金牌数 1 +x:1 +冰橇 1 +x:1 +失明 1 +x:1 +其妻 1 +x:1 +姜李村 1 +x:1 +蠢人 1 +x:1 +内阁制 1 +x:1 +吊链 1 +x:1 +曹市镇 1 +x:1 +吊铺 1 +x:1 +公垂线 1 +x:1 +蠢事 1 +x:1 +救苦救难 1 +x:1 +哈尔霍马 1 +x:1 +戟士 1 +x:1 +辅助 1 +x:1 +皂白 1 +x:1 +悲惨 1 +x:1 +畅想 1 +x:1 +行道树 1 +x:1 +狮泉 1 +x:1 +蝶形 1 +x:1 +集体 1 +x:1 +深指 1 +x:1 +工艺系 1 +x:1 +查查 1 +x:1 +白点 1 +x:1 +后进生 1 +x:1 +真意 1 +x:1 +蝶影 1 +x:1 +悲怆 1 +x:1 +瘦煤 1 +x:1 +迎宾松 1 +x:1 +钢都 1 +x:1 +不白之冤 1 +x:1 +喜剧片 1 +x:1 +浪迹天涯 1 +x:1 +戡 2 +x:2 +古意 1 +x:1 +票务 1 +x:1 +耍排场 1 +x:1 +伙计 1 +x:1 +侨 33 +x:33 +引荐 1 +x:1 +锯 13 +x:13 +豆绿 1 +x:1 +书堆 1 +x:1 +融资额 1 +x:1 +乱石丛 1 +x:1 +手风琴 1 +x:1 +棋战 1 +x:1 +了无生趣 1 +x:1 +毫微米 1 +x:1 +农牧业 1 +x:1 +冻结室 1 +x:1 +导表演 1 +x:1 +对衬 1 +x:1 +权重 1 +x:1 +同心县 1 +x:1 +集会 1 +x:1 +科技史 1 +x:1 +可观 1 +x:1 +可见 1 +x:1 +白热 1 +x:1 +告别游 1 +x:1 +卢湾 1 +x:1 +联营 1 +x:1 +报盘 1 +x:1 +中外运 1 +x:1 +百业 1 +x:1 +潞西 1 +x:1 +棋手 1 +x:1 +悲恸 1 +x:1 +野人 1 +x:1 +白烛 1 +x:1 +楚门镇 1 +x:1 +小视 1 +x:1 +聚变 1 +x:1 +硫磺泉 1 +x:1 +赦免 1 +x:1 +对街 1 +x:1 +百万 1 +x:1 +运动型 1 +x:1 +芦山 1 +x:1 +操作系统 1 +x:1 +来自 1 +x:1 +白眼 1 +x:1 +弓腰 1 +x:1 +冰洞 1 +x:1 +生物量 1 +x:1 +不致 1 +x:1 +蒜黄 1 +x:1 +不至 1 +x:1 +无精打采 1 +x:1 +缓慢 1 +x:1 +篮联 1 +x:1 +迁安市 1 +x:1 +重者 1 +x:1 +身形 1 +x:1 +凼仔 1 +x:1 +在校 1 +x:1 +狗急跳墙 1 +x:1 +冻裂 1 +x:1 +暗箭伤人 1 +x:1 +服从 1 +x:1 +陡然生凉 1 +x:1 +大华府 1 +x:1 +三番五次 1 +x:1 +坦佩雷 1 +x:1 +身影 1 +x:1 +巍山县 1 +x:1 +鸿篇 1 +x:1 +大同道 1 +x:1 +谈锋 1 +x:1 +院墙 1 +x:1 +玉汝于成 1 +x:1 +守山人 1 +x:1 +自由日 1 +x:1 +流于形式 1 +x:1 +后园 1 +x:1 +泳道 1 +x:1 +泛非大 1 +x:1 +老大哥 1 +x:1 +零售 1 +x:1 +院士 1 +x:1 +堪培拉市 1 +x:1 +恢 1 +x:1 +小进即满 1 +x:1 +树身 1 +x:1 +权限 1 +x:1 +忝 1 +x:1 +端子 1 +x:1 +隆尧县 1 +x:1 +冰海 1 +x:1 +蒙在鼓里 1 +x:1 +大盐 1 +x:1 +测评票 1 +x:1 +歪 25 +x:25 +不一会 1 +x:1 +猴声 1 +x:1 +大盘 1 +x:1 +对进 1 +x:1 +字体 1 +x:1 +妻小 1 +x:1 +志留纪 1 +x:1 +司马台 1 +x:1 +锁 68 +x:68 +豆科 1 +x:1 +供暖 1 +x:1 +铸锅厂 1 +x:1 +战俘 1 +x:1 +喇叭沟门 1 +x:1 +宣传月 1 +x:1 +圣贤 1 +x:1 +补白 1 +x:1 +单科 1 +x:1 +其干 1 +x:1 +方寸已乱 1 +x:1 +蛰居 1 +x:1 +弧光灯 1 +x:1 +剧目 1 +x:1 +潭峪沟 1 +x:1 +豆种 1 +x:1 +绝对化 1 +x:1 +氏族 1 +x:1 +空乏 1 +x:1 +修脚师 1 +x:1 +继承人 1 +x:1 +布底鞋 1 +x:1 +票源 1 +x:1 +新莱昂州 1 +x:1 +晌午 1 +x:1 +真是 1 +x:1 +歧视 1 +x:1 +空乘 1 +x:1 +邵东县 1 +x:1 +歧见 1 +x:1 +外海 1 +x:1 +洋河弄 1 +x:1 +火箭弹 1 +x:1 +书影 1 +x:1 +看管 1 +x:1 +查当山 1 +x:1 +白矾 1 +x:1 +氨纶 1 +x:1 +瘦瘠 1 +x:1 +跃至 1 +x:1 +书形 1 +x:1 +胚盘 1 +x:1 +十堰市 1 +x:1 +烘 3 +x:3 +摘发 1 +x:1 +摘取 1 +x:1 +空串 1 +x:1 +拦路 1 +x:1 +沙巴州 1 +x:1 +书录 1 +x:1 +工人党 1 +x:1 +霜花 1 +x:1 +正职 1 +x:1 +皇道吉日 1 +x:1 +贴饼子 1 +x:1 +片甲不存 1 +x:1 +光明正大 1 +x:1 +贪者 1 +x:1 +上海市 1 +x:1 +外派 1 +x:1 +真果 1 +x:1 +外泄 1 +x:1 +储能技术 1 +x:1 +只知其然 1 +x:1 +指南针 1 +x:1 +风狂雨骤 1 +x:1 +防空网 1 +x:1 +熟识 1 +x:1 +刚 810 +x:810 +看穿 1 +x:1 +双湖 1 +x:1 +弱不禁风 1 +x:1 +优良 1 +x:1 +冰水 1 +x:1 +书店 1 +x:1 +冰凌 1 +x:1 +舰群 1 +x:1 +不胜 1 +x:1 +博大精深 1 +x:1 +砧板 1 +x:1 +婉约 1 +x:1 +古柯 1 +x:1 +亲水性 1 +x:1 +大石 1 +x:1 +白白 1 +x:1 +扶危救困 1 +x:1 +医务 1 +x:1 +白癣 1 +x:1 +存储点 1 +x:1 +缓急 1 +x:1 +古柏 1 +x:1 +空调车 1 +x:1 +零吃 1 +x:1 +疵点 1 +x:1 +服侍 1 +x:1 +面目一新 1 +x:1 +指示 1 +x:1 +革新里 1 +x:1 +挖槽 1 +x:1 +商务部 1 +x:1 +不肖 1 +x:1 +渔养 1 +x:1 +长沙路 1 +x:1 +古本 1 +x:1 +百米赛 1 +x:1 +联艺 1 +x:1 +耳旁风 1 +x:1 +古木 1 +x:1 +外汇 1 +x:1 +亮开 1 +x:1 +分局长 1 +x:1 +卡其 1 +x:1 +鸭行鹅步 1 +x:1 +后场 1 +x:1 +动容 1 +x:1 +新庄村 1 +x:1 +识假 1 +x:1 +古朴 1 +x:1 +裁定 1 +x:1 +外江 1 +x:1 +冰河 1 +x:1 +约制 1 +x:1 +可辨 1 +x:1 +直升机 1 +x:1 +猴头 1 +x:1 +白皙 1 +x:1 +熟语 1 +x:1 +发芽率 1 +x:1 +吉普赛人 1 +x:1 +化工厂 1 +x:1 +空余 1 +x:1 +后土 1 +x:1 +项群 1 +x:1 +超纪录 1 +x:1 +加拉加斯 1 +x:1 +愈来愈 1 +x:1 +作曲法 1 +x:1 +圣谕 1 +x:1 +重臣 1 +x:1 +且末城 1 +x:1 +军功章 1 +x:1 +陆勤分队 1 +x:1 +多领化 1 +x:1 +折射 1 +x:1 +古松 1 +x:1 +古板 1 +x:1 +月台票 1 +x:1 +汗斑 1 +x:1 +法国队 1 +x:1 +让步 1 +x:1 +宁夏区 1 +x:1 +白盔 1 +x:1 +驾驶镜 1 +x:1 +关西 1 +x:1 +锃亮 1 +x:1 +大石头村 1 +x:1 +来者 1 +x:1 +折尺 1 +x:1 +外水 1 +x:1 +后坐 1 +x:1 +随处可见 1 +x:1 +软膏 1 +x:1 +潜水衣 1 +x:1 +田径场 1 +x:1 +主枢纽 1 +x:1 +楼板 1 +x:1 +近似 1 +x:1 +查扣 1 +x:1 +挎 13 +x:13 +酬答 1 +x:1 +查找 1 +x:1 +不菲 1 +x:1 +有令不行 1 +x:1 +木质部 1 +x:1 +保国乡 1 +x:1 +腾格里 1 +x:1 +岸上 1 +x:1 +岸下 1 +x:1 +柳泉村 1 +x:1 +昆河 1 +x:1 +负笈归来 1 +x:1 +候车亭 1 +x:1 +麻醉品 1 +x:1 +志留系 1 +x:1 +猛禽 1 +x:1 +与世隔绝 1 +x:1 +端头 1 +x:1 +绥靖主义 1 +x:1 +形而上学 1 +x:1 +渔事 1 +x:1 +灰林鹗 1 +x:1 +椿芽 1 +x:1 +潜水表 1 +x:1 +休闲者 1 +x:1 +对路 1 +x:1 +钢锭 1 +x:1 +钢锯 1 +x:1 +以质取胜 1 +x:1 +查房 1 +x:1 +黛 1 +x:1 +芦席 1 +x:1 +心目 1 +x:1 +握有 1 +x:1 +带头人 1 +x:1 +近作 1 +x:1 +霸王别姬 1 +x:1 +假大空 1 +x:1 +卢比 1 +x:1 +攻城略地 1 +x:1 +贺村 1 +x:1 +书报 1 +x:1 +包衣率 1 +x:1 +对质 1 +x:1 +婚后 1 +x:1 +充装站 1 +x:1 +炮市 1 +x:1 +医典 1 +x:1 +钢门 1 +x:1 +软脂 1 +x:1 +近便 1 +x:1 +嗲声嗲气 1 +x:1 +如沐春雨 1 +x:1 +零基 1 +x:1 +堪萨斯州 1 +x:1 +身怀绝技 1 +x:1 +跳皮筋儿 1 +x:1 +直销员 1 +x:1 +餐饮部 1 +x:1 +缉私科 1 +x:1 +圯桥 1 +x:1 +赐教 1 +x:1 +工艺科 1 +x:1 +虎口拔牙 1 +x:1 +灰褐色 1 +x:1 +穷途 1 +x:1 +架 357 +x:357 +指端 1 +x:1 +白痴 1 +x:1 +焦家湾村 1 +x:1 +监督厅 1 +x:1 +瑞气盈门 1 +x:1 +阴文 1 +x:1 +护理队 1 +x:1 +凶残 1 +x:1 +进球 1 +x:1 +新闻记者 1 +x:1 +火炬树 1 +x:1 +呗 6 +x:6 +白痢 1 +x:1 +高峰 1 +x:1 +笑笑 1 +x:1 +如若 1 +x:1 +软腭 1 +x:1 +青灰色 1 +x:1 +陇川县 1 +x:1 +对赌 1 +x:1 +查抄 1 +x:1 +人才库 1 +x:1 +罪不容诛 1 +x:1 +存单联 1 +x:1 +故地重游 1 +x:1 +身居 1 +x:1 +满满的 1 +x:1 +贺春 1 +x:1 +打杂儿 1 +x:1 +开启 1 +x:1 +硬灌式 1 +x:1 +古方 1 +x:1 +甘草店乡 1 +x:1 +早年间 1 +x:1 +甲亢病 1 +x:1 +配置率 1 +x:1 +一心一意 1 +x:1 +多棱镜 1 +x:1 +涧 9 +x:9 +近世 1 +x:1 +五三年 1 +x:1 +古文 1 +x:1 +大连港 1 +x:1 +缓手 1 +x:1 +赤眼蜂 1 +x:1 +挖掘点 1 +x:1 +可贺 1 +x:1 +产品部 1 +x:1 +可贵 1 +x:1 +裁夺 1 +x:1 +空调费 1 +x:1 +折床 1 +x:1 +冰湖 1 +x:1 +专门家 1 +x:1 +分布点 1 +x:1 +担纲挑梁 1 +x:1 +优者 1 +x:1 +外源 1 +x:1 +科连特斯 1 +x:1 +重荷 1 +x:1 +零嘴 1 +x:1 +看破 1 +x:1 +古时 1 +x:1 +高加索 1 +x:1 +厦航 1 +x:1 +低靡 1 +x:1 +外溢 1 +x:1 +不劳而获 1 +x:1 +犯愁 1 +x:1 +矫 2 +x:2 +笑窝 1 +x:1 +电脑系 1 +x:1 +表面波 1 +x:1 +同心圆 1 +x:1 +炸药包 1 +x:1 +漆皮 1 +x:1 +大连湾 1 +x:1 +太极 1 +x:1 +近乎 1 +x:1 +逍遥 1 +x:1 +近亲 1 +x:1 +八面玲珑 1 +x:1 +溜子 1 +x:1 +大田 1 +x:1 +不良 1 +x:1 +近人 1 +x:1 +萍 43 +x:43 +冰溜 1 +x:1 +预算司 1 +x:1 +计程器 1 +x:1 +依稀 1 +x:1 +优胜 1 +x:1 +厘 4 +x:4 +体育课 1 +x:1 +闪光点 1 +x:1 +棍法 1 +x:1 +匹夫之勇 1 +x:1 +钢铁 1 +x:1 +核苷酸 1 +x:1 +对调 1 +x:1 +缴费率 1 +x:1 +剧痛 1 +x:1 +宾馆业 1 +x:1 +瓜那雷斯 1 +x:1 +炮弹 1 +x:1 +安曼市 1 +x:1 +传导 1 +x:1 +半自动 1 +x:1 +后唐 1 +x:1 +刀茅巷 1 +x:1 +铺天盖地 1 +x:1 +菠萝 1 +x:1 +白瓷 1 +x:1 +城里人 1 +x:1 +对象 1 +x:1 +狮梁 1 +x:1 +查控 1 +x:1 +帕拉瓜纳 1 +x:1 +猴子 1 +x:1 +失落 1 +x:1 +大略 1 +x:1 +运动员 1 +x:1 +来船 1 +x:1 +钢钳 1 +x:1 +八角形 1 +x:1 +纯形码 1 +x:1 +照叶林 1 +x:1 +穷酸 1 +x:1 +权门 1 +x:1 +书展 1 +x:1 +吉林省 1 +x:1 +穿云破雾 1 +x:1 +钢针 1 +x:1 +习题集 1 +x:1 +绘影绘色 1 +x:1 +书局 1 +x:1 +院子 1 +x:1 +褶痕 1 +x:1 +优育 1 +x:1 +雪灾区 1 +x:1 +书屋 1 +x:1 +产加销 1 +x:1 +洗牙器 1 +x:1 +来路 1 +x:1 +通讯卫星 1 +x:1 +机械式 1 +x:1 +埋藏量 1 +x:1 +安乐 1 +x:1 +进站 1 +x:1 +校服者 1 +x:1 +演奏 1 +x:1 +安义 1 +x:1 +狙击手 1 +x:1 +缴费簿 1 +x:1 +卢方 1 +x:1 +摘引 1 +x:1 +恶性肿瘤 1 +x:1 +令人满意 1 +x:1 +主任医师 1 +x:1 +皂素 1 +x:1 +树苗 1 +x:1 +匈牙利 1 +x:1 +缨子 1 +x:1 +联运 1 +x:1 +正要 1 +x:1 +咳 4 +x:4 +盖家峪村 1 +x:1 +大跃进 1 +x:1 +氟化氢 1 +x:1 +安丘 1 +x:1 +外交史 1 +x:1 +医德 1 +x:1 +实业厅 1 +x:1 +书号 1 +x:1 +三板斧 1 +x:1 +干旱区 1 +x:1 +履约 1 +x:1 +母 93 +x:93 +婚嫁 1 +x:1 +大竹 1 +x:1 +顺天镇 1 +x:1 +维里 1 +x:1 +安上 1 +x:1 +零头 1 +x:1 +不足 1 +x:1 +大端 1 +x:1 +主刀 1 +x:1 +罚 176 +x:176 +奇功伟业 1 +x:1 +端坐 1 +x:1 +看看 1 +x:1 +采油井 1 +x:1 +大站 1 +x:1 +顺乎潮流 1 +x:1 +幸甚 1 +x:1 +伍珀塔尔 1 +x:1 +折冲 1 +x:1 +佺 1 +x:1 +页面 1 +x:1 +荡然无存 1 +x:1 +折光 1 +x:1 +田垄 1 +x:1 +急若流星 1 +x:1 +十分 1 +x:1 +征文组 1 +x:1 +水解液 1 +x:1 +脑 83 +x:83 +过错制 1 +x:1 +身强力壮 1 +x:1 +安仁 1 +x:1 +外展神经 1 +x:1 +龚 310 +x:310 +智多星 1 +x:1 +打假治劣 1 +x:1 +大暴雨 1 +x:1 +院名 1 +x:1 +发横财 1 +x:1 +鞭毛藻 1 +x:1 +左臂右膀 1 +x:1 +泗州戏 1 +x:1 +后娘 1 +x:1 +古樟 1 +x:1 +不赖 1 +x:1 +警备部 1 +x:1 +投石问路 1 +x:1 +半私用 1 +x:1 +多极化 1 +x:1 +楼堂 1 +x:1 +卑下 1 +x:1 +不贤 1 +x:1 +够呛 1 +x:1 +水土不服 1 +x:1 +在理儿 1 +x:1 +书卷 1 +x:1 +查没 1 +x:1 +非线形 1 +x:1 +宜城市 1 +x:1 +吐根素 1 +x:1 +语文科 1 +x:1 +实业化 1 +x:1 +疑心病 1 +x:1 +安于 1 +x:1 +悲歌 1 +x:1 +脉动电流 1 +x:1 +高居 1 +x:1 +外感 1 +x:1 +软软 1 +x:1 +补税 1 +x:1 +校史展 1 +x:1 +防盗器 1 +x:1 +日耳曼 1 +x:1 +细毛羊 1 +x:1 +安享 1 +x:1 +具体 1 +x:1 +纳斯尔队 1 +x:1 +不负 1 +x:1 +脂油 1 +x:1 +中堡岛 1 +x:1 +细菌性 1 +x:1 +书协 1 +x:1 +补篮 1 +x:1 +镇星 1 +x:1 +鞭 5 +x:5 +醒儿 1 +x:1 +矗立 1 +x:1 +身前 1 +x:1 +中北部 1 +x:1 +炮军 1 +x:1 +音容宛在 1 +x:1 +十五大 1 +x:1 +躬逢 1 +x:1 +姑且 1 +x:1 +老大妈 1 +x:1 +狂轰滥炸 1 +x:1 +阻行杆 1 +x:1 +宜春 1 +x:1 +蓄须 1 +x:1 +婚宴 1 +x:1 +姑丈 1 +x:1 +重负 1 +x:1 +芽 14 +x:14 +避风港 1 +x:1 +泥水选种 1 +x:1 +伤心惨目 1 +x:1 +高家湾 1 +x:1 +清迈府 1 +x:1 +祛除 1 +x:1 +妻儿 1 +x:1 +惑 10 +x:10 +缠绕茎 1 +x:1 +票据 1 +x:1 +不伦不类 1 +x:1 +安企 1 +x:1 +活疫苗 1 +x:1 +定然 1 +x:1 +瑞 68 +x:68 +黯淡 1 +x:1 +树莓 1 +x:1 +外患 1 +x:1 +统战部 1 +x:1 +汝阳 1 +x:1 +历尽艰辛 1 +x:1 +麻业 1 +x:1 +重赏 1 +x:1 +后天性 1 +x:1 +大篆 1 +x:1 +核桃树 1 +x:1 +货运业 1 +x:1 +赛车队 1 +x:1 +光闪闪 1 +x:1 +袖箭 1 +x:1 +老大姐 1 +x:1 +安莎社 1 +x:1 +安保 1 +x:1 +车海 1 +x:1 +正常人 1 +x:1 +麻醉学 1 +x:1 +拆封 1 +x:1 +樵采 1 +x:1 +看相 1 +x:1 +眼皮子 1 +x:1 +亮化 1 +x:1 +钞 3 +x:3 +大笔 1 +x:1 +大笑 1 +x:1 +梳妆台 1 +x:1 +款型 1 +x:1 +踏勘 1 +x:1 +运箱费 1 +x:1 +火炬松 1 +x:1 +贪赃 1 +x:1 +谬种 1 +x:1 +压砧 1 +x:1 +人寿年丰 1 +x:1 +钢骨 1 +x:1 +后学 1 +x:1 +羊痫风 1 +x:1 +流里流气 1 +x:1 +阎三囤 1 +x:1 +冰情 1 +x:1 +楼梯 1 +x:1 +休养所 1 +x:1 +幻灯 1 +x:1 +贪财 1 +x:1 +缦帐 1 +x:1 +试衣间 1 +x:1 +圣职 1 +x:1 +葩 1 +x:1 +五华县 1 +x:1 +维管束 1 +x:1 +洇 3 +x:3 +脖根 1 +x:1 +渴汤 1 +x:1 +传出神经 1 +x:1 +不谙 1 +x:1 +炮兵 1 +x:1 +甜酸苦辣 1 +x:1 +帝国主义 1 +x:1 +尧舜 1 +x:1 +交易人 1 +x:1 +会做人 1 +x:1 +周礼 1 +x:1 +树胶 1 +x:1 +科技角 1 +x:1 +踏入 1 +x:1 +眼镜架 1 +x:1 +冰挂 1 +x:1 +破烂王 1 +x:1 +协调会 1 +x:1 +化学系 1 +x:1 +武侯区 1 +x:1 +医工 1 +x:1 +大雅之堂 1 +x:1 +科技观 1 +x:1 +夫妻间 1 +x:1 +茶余饭后 1 +x:1 +大碗 1 +x:1 +不过 1 +x:1 +影赛 1 +x:1 +大碟 1 +x:1 +书写 1 +x:1 +折叠 1 +x:1 +古梅 1 +x:1 +职衔 1 +x:1 +老玉米 1 +x:1 +主粮 1 +x:1 +游离电子 1 +x:1 +延绵不断 1 +x:1 +现代舞团 1 +x:1 +可耻 1 +x:1 +武英殿 1 +x:1 +军事法庭 1 +x:1 +游 216 +x:216 +多价 1 +x:1 +舰炮 1 +x:1 +多于 1 +x:1 +多亏 1 +x:1 +连根拔起 1 +x:1 +多事 1 +x:1 +计拨 1 +x:1 +立体感 1 +x:1 +热电站 1 +x:1 +书函 1 +x:1 +裁员 1 +x:1 +浑仪 1 +x:1 +沟壑区 1 +x:1 +供桌 1 +x:1 +深一脚 1 +x:1 +涞源县 1 +x:1 +下者 1 +x:1 +不辍 1 +x:1 +在所不辞 1 +x:1 +浦 5 +x:5 +瞥见 1 +x:1 +难胞 1 +x:1 +糯 2 +x:2 +最佳 1 +x:1 +化工局 1 +x:1 +同安区 1 +x:1 +冰排 1 +x:1 +布 72 +x:72 +多么 1 +x:1 +走村入户 1 +x:1 +霉 3 +x:3 +多久 1 +x:1 +亮节高风 1 +x:1 +官话 1 +x:1 +不轨 1 +x:1 +二房东 1 +x:1 +琴音 1 +x:1 +古格 1 +x:1 +幸存 1 +x:1 +恩平市 1 +x:1 +烘漆厂 1 +x:1 +奴颜媚骨 1 +x:1 +真格 1 +x:1 +联赛 1 +x:1 +看病 1 +x:1 +透过 1 +x:1 +后堂 1 +x:1 +夭 3 +x:3 +并排 1 +x:1 +甜 66 +x:66 +截住 1 +x:1 +老大娘 1 +x:1 +聊以 1 +x:1 +光阴似箭 1 +x:1 +善莫大焉 1 +x:1 +粉妆玉琢 1 +x:1 +既定 1 +x:1 +古树 1 +x:1 +食利者 1 +x:1 +细菌战 1 +x:1 +外挂 1 +x:1 +草垫子 1 +x:1 +圣药 1 +x:1 +兵火 1 +x:1 +一股就灵 1 +x:1 +芋艿 1 +x:1 +麻线 1 +x:1 +贸工部 1 +x:1 +票号 1 +x:1 +联贯 1 +x:1 +大棚菜 1 +x:1 +鸡犬升天 1 +x:1 +待价而沽 1 +x:1 +多业 1 +x:1 +哈斯科沃 1 +x:1 +联责 1 +x:1 +汇价 1 +x:1 +经济杂交 1 +x:1 +融资量 1 +x:1 +千呼万唤 1 +x:1 +婺源 1 +x:1 +矢量 1 +x:1 +赏心 1 +x:1 +透辟 1 +x:1 +可能 1 +x:1 +四九年 1 +x:1 +翰林院 1 +x:1 +引言 1 +x:1 +起色 1 +x:1 +赵村乡 1 +x:1 +大禾 1 +x:1 +民主村 1 +x:1 +三危山 1 +x:1 +腰板 1 +x:1 +引语 1 +x:1 +怒 5 +x:5 +精确度 1 +x:1 +开门揖盗 1 +x:1 +尾矿库 1 +x:1 +补种 1 +x:1 +徐水县 1 +x:1 +赢利性 1 +x:1 +药捻子 1 +x:1 +比比划划 1 +x:1 +九一八 1 +x:1 +懂行 1 +x:1 +氩气 1 +x:1 +斥力 1 +x:1 +大福 1 +x:1 +外借 1 +x:1 +鞭毛虫 1 +x:1 +东渐史 1 +x:1 +逗点 1 +x:1 +援军 1 +x:1 +水鸪鸪 1 +x:1 +本本主义 1 +x:1 +摆阔气 1 +x:1 +家庭式 1 +x:1 +分外夺目 1 +x:1 +剧社 1 +x:1 +酞酸酯 1 +x:1 +规划委 1 +x:1 +重载 1 +x:1 +策划部 1 +x:1 +再加之 1 +x:1 +其内 1 +x:1 +孝直镇 1 +x:1 +好话 1 +x:1 +座上客 1 +x:1 +魔鞋 1 +x:1 +婚姻 1 +x:1 +调解者 1 +x:1 +征收月 1 +x:1 +后委 1 +x:1 +古槐 1 +x:1 +后天 1 +x:1 +补票 1 +x:1 +大礼 1 +x:1 +多余 1 +x:1 +骖 1 +x:1 +根本性 1 +x:1 +审慎 1 +x:1 +汗毛 1 +x:1 +慧眼识才 1 +x:1 +商贸司 1 +x:1 +模 5 +x:5 +交易会 1 +x:1 +缓滞 1 +x:1 +心肝儿 1 +x:1 +票友 1 +x:1 +抗诉量 1 +x:1 +信天翁 1 +x:1 +表面性 1 +x:1 +技巧赛 1 +x:1 +后备 1 +x:1 +炮区 1 +x:1 +协调人 1 +x:1 +弃甲曳兵 1 +x:1 +剧种 1 +x:1 +院土 1 +x:1 +凄风冷雨 1 +x:1 +亮光 1 +x:1 +融资部 1 +x:1 +竖挑眼 1 +x:1 +折刀 1 +x:1 +数术史 1 +x:1 +河蟹 1 +x:1 +阔绰 1 +x:1 +大祸 1 +x:1 +重述 1 +x:1 +居里夫人 1 +x:1 +外戚 1 +x:1 +传帮带 1 +x:1 +加洛普 1 +x:1 +占便宜 1 +x:1 +姬 18 +x:18 +重返 1 +x:1 +裂谷 1 +x:1 +联谊 1 +x:1 +款款深情 1 +x:1 +院坝 1 +x:1 +绥中县 1 +x:1 +对联 1 +x:1 +忧心如焚 1 +x:1 +杭嘉湖 1 +x:1 +其因 1 +x:1 +大纲 1 +x:1 +不解 1 +x:1 +冉 43 +x:43 +十五小 1 +x:1 +婚庆 1 +x:1 +信誉制 1 +x:1 +语族 1 +x:1 +官亭乡 1 +x:1 +查档 1 +x:1 +后座 1 +x:1 +大约 1 +x:1 +多多马 1 +x:1 +被控人 1 +x:1 +大红 1 +x:1 +包金 1 +x:1 +崖 19 +x:19 +人造卫星 1 +x:1 +穷 283 +x:283 +周缘 1 +x:1 +不见 1 +x:1 +裁判 1 +x:1 +安工办 1 +x:1 +尸骨未寒 1 +x:1 +不觉 1 +x:1 +天下第一 1 +x:1 +违纪者 1 +x:1 +补给 1 +x:1 +蒙特卡罗 1 +x:1 +清锅冷灶 1 +x:1 +等闲视之 1 +x:1 +星毛虫 1 +x:1 +其四 1 +x:1 +肾透析器 1 +x:1 +炮响 1 +x:1 +端午 1 +x:1 +警标 1 +x:1 +热哄哄 1 +x:1 +批判 1 +x:1 +联训 1 +x:1 +查核 1 +x:1 +正反方 1 +x:1 +宣传车 1 +x:1 +埝 1 +x:1 +发电量 1 +x:1 +甘石桥站 1 +x:1 +昆曲 1 +x:1 +不要 1 +x:1 +绘声绘影 1 +x:1 +宋史 1 +x:1 +商城县 1 +x:1 +玉石片 1 +x:1 +断头台 1 +x:1 +裁剪 1 +x:1 +临场感 1 +x:1 +研发 1 +x:1 +征文稿 1 +x:1 +汗水 1 +x:1 +博厚镇 1 +x:1 +外方 1 +x:1 +民主性 1 +x:1 +书城 1 +x:1 +沉湎 1 +x:1 +奋斗以成 1 +x:1 +前人栽树 1 +x:1 +拉家带口 1 +x:1 +窄 52 +x:52 +素宣 1 +x:1 +白羽 1 +x:1 +到头来 1 +x:1 +外敌 1 +x:1 +堪萨斯城 1 +x:1 +规划师 1 +x:1 +医学 1 +x:1 +机械局 1 +x:1 +法制观 1 +x:1 +遣电驱雷 1 +x:1 +九一四 1 +x:1 +昆明 1 +x:1 +依然 1 +x:1 +进退维谷 1 +x:1 +谬以千里 1 +x:1 +透视 1 +x:1 +后市 1 +x:1 +莪 1 +x:1 +查检 1 +x:1 +落荒而逃 1 +x:1 +穿透 1 +x:1 +名中药 1 +x:1 +剧组 1 +x:1 +书店业 1 +x:1 +车马炮 1 +x:1 +西岗镇 1 +x:1 +盈满 1 +x:1 +豆角儿 1 +x:1 +传播业 1 +x:1 +憾 4 +x:4 +护假者 1 +x:1 +线型 1 +x:1 +包衣种 1 +x:1 +形意拳 1 +x:1 +关联 1 +x:1 +无强力 1 +x:1 +后年 1 +x:1 +冬奥会 1 +x:1 +你中有我 1 +x:1 +麻醉师 1 +x:1 +贫水区 1 +x:1 +书坛 1 +x:1 +水平面 1 +x:1 +指点 1 +x:1 +永年县 1 +x:1 +依照 1 +x:1 +升班队 1 +x:1 +月球仪 1 +x:1 +重重叠叠 1 +x:1 +抛弃物 1 +x:1 +监理站 1 +x:1 +极而言之 1 +x:1 +趋 145 +x:145 +聊城县 1 +x:1 +草籽儿 1 +x:1 +引路 1 +x:1 +团干部 1 +x:1 +养颜 1 +x:1 +廉政署 1 +x:1 +买账 1 +x:1 +院内 1 +x:1 +更生霉素 1 +x:1 +红黄牌 1 +x:1 +渺渺茫茫 1 +x:1 +猛犸 1 +x:1 +受礼者 1 +x:1 +胆破心惊 1 +x:1 +斜长石 1 +x:1 +上海城 1 +x:1 +印尼队 1 +x:1 +维持 1 +x:1 +沦肌浃髓 1 +x:1 +褶缝 1 +x:1 +债权人 1 +x:1 +业余组 1 +x:1 +冰态水 1 +x:1 +街头诗 1 +x:1 +我方 1 +x:1 +外号 1 +x:1 +慢件 1 +x:1 +外交团 1 +x:1 +海滦河 1 +x:1 +信号工 1 +x:1 +票条 1 +x:1 +信誉卡 1 +x:1 +瓷艺 1 +x:1 +言之凿凿 1 +x:1 +督查组 1 +x:1 +人浮于事 1 +x:1 +溜冰 1 +x:1 +战斗舰 1 +x:1 +黔驴之技 1 +x:1 +亚美尼亚 1 +x:1 +人称 1 +x:1 +引起 1 +x:1 +白纸 1 +x:1 +灵台 1 +x:1 +便民利民 1 +x:1 +强手如林 1 +x:1 +不衰 1 +x:1 +掉话率 1 +x:1 +计收 1 +x:1 +格拉茨市 1 +x:1 +成绩单 1 +x:1 +溜光 1 +x:1 +消释 1 +x:1 +猴儿 1 +x:1 +银行法 1 +x:1 +手纸 1 +x:1 +底格里斯 1 +x:1 +慎重 1 +x:1 +终身 1 +x:1 +不行 1 +x:1 +转业退伍 1 +x:1 +亲骨肉 1 +x:1 +畅游 1 +x:1 +辞目 1 +x:1 +权宜之计 1 +x:1 +次果 1 +x:1 +折合 1 +x:1 +金丝雀 1 +x:1 +测 23 +x:23 +白绸 1 +x:1 +计数 1 +x:1 +鸿爪 1 +x:1 +补缺 1 +x:1 +价廉质优 1 +x:1 +补缴 1 +x:1 +蝶儿 1 +x:1 +百读不厌 1 +x:1 +重视 1 +x:1 +大网 1 +x:1 +奴隶 1 +x:1 +溜儿 1 +x:1 +待产 1 +x:1 +冀东区 1 +x:1 +迸射 1 +x:1 +树蜂 1 +x:1 +汉字库 1 +x:1 +汗液 1 +x:1 +待人 1 +x:1 +语文系 1 +x:1 +斑豹一窥 1 +x:1 +征 100 +x:100 +不详 1 +x:1 +盈江 1 +x:1 +供气 1 +x:1 +中外船 1 +x:1 +戎马生涯 1 +x:1 +冰期 1 +x:1 +识察 1 +x:1 +不说 1 +x:1 +大咧咧 1 +x:1 +芳菲苑 1 +x:1 +摇曳 1 +x:1 +关节 1 +x:1 +中外航 1 +x:1 +苏州码子 1 +x:1 +大粪 1 +x:1 +缓步 1 +x:1 +宁乡 1 +x:1 +百叶窗 1 +x:1 +县衙署 1 +x:1 +重言 1 +x:1 +供水 1 +x:1 +右上角 1 +x:1 +心气儿 1 +x:1 +拖车队 1 +x:1 +墉 6 +x:6 +汗湿 1 +x:1 +太滆 1 +x:1 +滚打 1 +x:1 +穷而后工 1 +x:1 +农家 1 +x:1 +道经圣 1 +x:1 +吟诗 1 +x:1 +汗渍 1 +x:1 +黄骅港 1 +x:1 +大系 1 +x:1 +犀角 1 +x:1 +供求 1 +x:1 +来访 1 +x:1 +节电费 1 +x:1 +击落 1 +x:1 +不讳 1 +x:1 +鹊巢鸠占 1 +x:1 +自选区 1 +x:1 +不许 1 +x:1 +不论 1 +x:1 +端公 1 +x:1 +钾盐 1 +x:1 +炮团 1 +x:1 +恒等式 1 +x:1 +灌输 1 +x:1 +安曼城 1 +x:1 +兔死狐悲 1 +x:1 +芾 1 +x:1 +自在阶级 1 +x:1 +显像管 1 +x:1 +渴念 1 +x:1 +休闲装 1 +x:1 +识字 1 +x:1 +养鸡场 1 +x:1 +银川市 1 +x:1 +瓜德罗普 1 +x:1 +否极泰来 1 +x:1 +长林乡 1 +x:1 +树葬 1 +x:1 +李沧区 1 +x:1 +大前年 1 +x:1 +疙瘩 1 +x:1 +既往 1 +x:1 +猛然 1 +x:1 +法制课 1 +x:1 +供油 1 +x:1 +后尘 1 +x:1 +汗滴 1 +x:1 +岗点 1 +x:1 +大米 1 +x:1 +过敏症 1 +x:1 +畅流 1 +x:1 +冰柜 1 +x:1 +大肠杆菌 1 +x:1 +医大 1 +x:1 +腰果 1 +x:1 +规划局 1 +x:1 +平凡 1 +x:1 +逗留 1 +x:1 +体育节 1 +x:1 +冰柱 1 +x:1 +其后 1 +x:1 +秆儿 1 +x:1 +困 43 +x:43 +拉锁儿 1 +x:1 +副神经 1 +x:1 +书商 1 +x:1 +羞于启齿 1 +x:1 +黎民 1 +x:1 +外县 1 +x:1 +灭迹 1 +x:1 +夜以继日 1 +x:1 +中直机关 1 +x:1 +日月经天 1 +x:1 +沙边子村 1 +x:1 +到达 1 +x:1 +台湾厅 1 +x:1 +引述 1 +x:1 +化工大 1 +x:1 +看得过儿 1 +x:1 +树藤 1 +x:1 +炯炯有神 1 +x:1 +村支书 1 +x:1 +深蓝色 1 +x:1 +劳动改造 1 +x:1 +粗鄙 1 +x:1 +蚊香 1 +x:1 +溜号 1 +x:1 +端倪 1 +x:1 +斧 10 +x:10 +临猗县 1 +x:1 +邵 157 +x:157 +蔓衍 1 +x:1 +中低档 1 +x:1 +黑发 1 +x:1 +白米 1 +x:1 +票数 1 +x:1 +身后 1 +x:1 +坂下 1 +x:1 +岩溶 1 +x:1 +阿斯塔纳 1 +x:1 +虎踞龙盘 1 +x:1 +院史 1 +x:1 +后已 1 +x:1 +外协 1 +x:1 +户政处长 1 +x:1 +脖子 1 +x:1 +冰晶 1 +x:1 +铁算盘 1 +x:1 +当务之急 1 +x:1 +冷加工 1 +x:1 +大武村 1 +x:1 +神妙 1 +x:1 +大张旗鼓 1 +x:1 +悲泣 1 +x:1 +宗祧 1 +x:1 +联袂 1 +x:1 +圆明园者 1 +x:1 +悲泪 1 +x:1 +大义凛然 1 +x:1 +月光花 1 +x:1 +译注 1 +x:1 +阶级性 1 +x:1 +浏览器 1 +x:1 +条件反射 1 +x:1 +统配电 1 +x:1 +玲珑剔透 1 +x:1 +主动性 1 +x:1 +阔老板 1 +x:1 +披风 1 +x:1 +五中全会 1 +x:1 +戊戌 1 +x:1 +助学岗 1 +x:1 +款冬 1 +x:1 +书吧 1 +x:1 +次方 1 +x:1 +官 353 +x:353 +裁军 1 +x:1 +大紫 1 +x:1 +校委会 1 +x:1 +行善积德 1 +x:1 +处置场 1 +x:1 +金牌榜 1 +x:1 +人才城 1 +x:1 +冰暴 1 +x:1 +左证 1 +x:1 +躁热 1 +x:1 +定中结构 1 +x:1 +外景 1 +x:1 +嘱 5 +x:5 +联行 1 +x:1 +台湾区 1 +x:1 +反贪科 1 +x:1 +公主岭市 1 +x:1 +晋侯墓 1 +x:1 +白粉 1 +x:1 +书名 1 +x:1 +书后 1 +x:1 +书吏 1 +x:1 +鹤庆县 1 +x:1 +缆道 1 +x:1 +次日 1 +x:1 +冠军杯赛 1 +x:1 +零度 1 +x:1 +粗野 1 +x:1 +粗重 1 +x:1 +小词 1 +x:1 +裁减 1 +x:1 +调节价 1 +x:1 +掷地有声 1 +x:1 +葵花子 1 +x:1 +食少便溏 1 +x:1 +重读 1 +x:1 +巧笑倩兮 1 +x:1 +犹豫不决 1 +x:1 +白糖 1 +x:1 +风吹雨打 1 +x:1 +独树一帜 1 +x:1 +专门化 1 +x:1 +连脚裤 1 +x:1 +瓷胎 1 +x:1 +武昌起义 1 +x:1 +妖术 1 +x:1 +来言 1 +x:1 +色织厂 1 +x:1 +灵 70 +x:70 +这一下 1 +x:1 +痛快淋漓 1 +x:1 +小木凳 1 +x:1 +骇怪 1 +x:1 +等深线 1 +x:1 +马兰草纸 1 +x:1 +垂青 1 +x:1 +题词 1 +x:1 +经济院 1 +x:1 +村务 1 +x:1 +岛礁 1 +x:1 +确保 1 +x:1 +朝服 1 +x:1 +毛囊 1 +x:1 +解困 1 +x:1 +立法权 1 +x:1 +题诗 1 +x:1 +交货值 1 +x:1 +发售 1 +x:1 +购入 1 +x:1 +解囊 1 +x:1 +张村乡 1 +x:1 +确信 1 +x:1 +输入国 1 +x:1 +般 368 +x:368 +村办 1 +x:1 +彭水 1 +x:1 +计算机所 1 +x:1 +涪陵 1 +x:1 +加进 1 +x:1 +场 1903 +x:1903 +襄曲 1 +x:1 +汗流满面 1 +x:1 +计算机房 1 +x:1 +聚光镜 1 +x:1 +门柱 1 +x:1 +臣 9 +x:9 +中下 1 +x:1 +今译 1 +x:1 +爆米花 1 +x:1 +海林镇 1 +x:1 +中专 1 +x:1 +时样 1 +x:1 +永曲 1 +x:1 +中东 1 +x:1 +太婆 1 +x:1 +实用型 1 +x:1 +眼睑炎 1 +x:1 +固定点 1 +x:1 +合金钢 1 +x:1 +一触即发 1 +x:1 +译介 1 +x:1 +等级观 1 +x:1 +甘蓝型 1 +x:1 +慰问品 1 +x:1 +题记 1 +x:1 +中举 1 +x:1 +门机 1 +x:1 +耳塞 1 +x:1 +产钳 1 +x:1 +走法 1 +x:1 +》 13013 +x:13013 +廊子 1 +x:1 +中介 1 +x:1 +伸伸 1 +x:1 +执勤 1 +x:1 +沉着 1 +x:1 +洪泽湖 1 +x:1 +绉布 1 +x:1 +毒辣辣 1 +x:1 +期房 1 +x:1 +编订馆 1 +x:1 +撤案 1 +x:1 +消防 1 +x:1 +同贺 1 +x:1 +三环路 1 +x:1 +乌拉山 1 +x:1 +印刷局 1 +x:1 +烟摊儿 1 +x:1 +争议 1 +x:1 +类毒素 1 +x:1 +并非 1 +x:1 +南彩镇 1 +x:1 +改良种 1 +x:1 +门板 1 +x:1 +野角马 1 +x:1 +心旷神怡 1 +x:1 +铸造 1 +x:1 +京山 1 +x:1 +乌拉尔 1 +x:1 +大真大实 1 +x:1 +中云 1 +x:1 +财务局 1 +x:1 +下脚 1 +x:1 +教 295 +x:295 +瞥 12 +x:12 +廉正 1 +x:1 +多道程序 1 +x:1 +宰汶村 1 +x:1 +复兴门外 1 +x:1 +中产 1 +x:1 +劳工科 1 +x:1 +简洁性 1 +x:1 +桂皮 1 +x:1 +先头 1 +x:1 +烂漫 1 +x:1 +先夫 1 +x:1 +先天 1 +x:1 +装修业 1 +x:1 +发明型 1 +x:1 +冬季圈 1 +x:1 +中人 1 +x:1 +瑶池 1 +x:1 +腾出 1 +x:1 +训练队 1 +x:1 +暂名 1 +x:1 +中低 1 +x:1 +故技 1 +x:1 +焦距 1 +x:1 +物资部 1 +x:1 +脑门儿 1 +x:1 +吸毒史 1 +x:1 +俚俗 1 +x:1 +帽子 1 +x:1 +表演家 1 +x:1 +前车之鉴 1 +x:1 +先声 1 +x:1 +带工头 1 +x:1 +科队 1 +x:1 +梁山 1 +x:1 +露营 1 +x:1 +欲 130 +x:130 +大桥镇 1 +x:1 +产销 1 +x:1 +流离 1 +x:1 +该奖 1 +x:1 +私事 1 +x:1 +尾 46 +x:46 +留守 1 +x:1 +导流洞 1 +x:1 +村史 1 +x:1 +园林节 1 +x:1 +崇明岛 1 +x:1 +中伏 1 +x:1 +分级 1 +x:1 +村口 1 +x:1 +中休 1 +x:1 +荷花坪 1 +x:1 +佩斯 1 +x:1 +双停 1 +x:1 +中伤 1 +x:1 +痣 4 +x:4 +彭浦 1 +x:1 +川田 1 +x:1 +长辛店 1 +x:1 +该处 1 +x:1 +榜山镇 1 +x:1 +艰难性 1 +x:1 +妖孽 1 +x:1 +亚布力镇 1 +x:1 +开窍宁心 1 +x:1 +留宿 1 +x:1 +博罗县 1 +x:1 +大做文章 1 +x:1 +晋江 1 +x:1 +梁峁 1 +x:1 +劳有所得 1 +x:1 +建造界 1 +x:1 +后继乏人 1 +x:1 +大干一场 1 +x:1 +印度 1 +x:1 +村医 1 +x:1 +细瞧 1 +x:1 +集中地 1 +x:1 +都柳江 1 +x:1 +留存 1 +x:1 +媒 10 +x:10 +侧目而视 1 +x:1 +不合格品 1 +x:1 +中保 1 +x:1 +封存 1 +x:1 +蹦蹦跳跳 1 +x:1 +仰光 1 +x:1 +下痿 1 +x:1 +着呢 1 +x:1 +齿舞 1 +x:1 +片段 1 +x:1 +中信 1 +x:1 +白兰地 1 +x:1 +商号 1 +x:1 +溃散 1 +x:1 +丛林区 1 +x:1 +留学 1 +x:1 +申请方 1 +x:1 +故房 1 +x:1 +棋子 1 +x:1 +科隆 1 +x:1 +昙花 1 +x:1 +毛坯 1 +x:1 +竞买价 1 +x:1 +活石灰 1 +x:1 +干涧村 1 +x:1 +柄 13 +x:13 +汉学史 1 +x:1 +七星草 1 +x:1 +改恶从善 1 +x:1 +发运人 1 +x:1 +大明村 1 +x:1 +岳西县 1 +x:1 +洞察力 1 +x:1 +盈余额 1 +x:1 +产门 1 +x:1 +爪哇虎 1 +x:1 +输入地 1 +x:1 +原告席 1 +x:1 +工商联 1 +x:1 +电离层 1 +x:1 +撑门面 1 +x:1 +忍受 1 +x:1 +八拜之交 1 +x:1 +商厦 1 +x:1 +军火案 1 +x:1 +减速器 1 +x:1 +号召书 1 +x:1 +椰子汁 1 +x:1 +见仁见智 1 +x:1 +北三环路 1 +x:1 +拜见 1 +x:1 +军官法 1 +x:1 +极限 1 +x:1 +远东司 1 +x:1 +绝缘纸 1 +x:1 +孰轻孰重 1 +x:1 +红旗手 1 +x:1 +恼羞成怒 1 +x:1 +呐喊声 1 +x:1 +嬉闹 1 +x:1 +癌症 1 +x:1 +完善 1 +x:1 +癌病 1 +x:1 +蜘蛛网 1 +x:1 +银坑 1 +x:1 +先导 1 +x:1 +概况 1 +x:1 +妙法 1 +x:1 +朝政 1 +x:1 +竞逐 1 +x:1 +辉耀乡 1 +x:1 +涵 11 +x:11 +谴 1 +x:1 +农工部 1 +x:1 +白绒绒 1 +x:1 +乔迁 1 +x:1 +悦耳 1 +x:1 +牛头刨 1 +x:1 +懈怠成习 1 +x:1 +检定所 1 +x:1 +哏 1 +x:1 +微山县 1 +x:1 +针对 1 +x:1 +产院 1 +x:1 +临时工 1 +x:1 +见面费 1 +x:1 +慰问团 1 +x:1 +产险 1 +x:1 +泱泱 1 +x:1 +罗汉豆 1 +x:1 +私人 1 +x:1 +非常态 1 +x:1 +客 82 +x:82 +北流 1 +x:1 +泳联 1 +x:1 +斜边 1 +x:1 +事业观 1 +x:1 +汗孔 1 +x:1 +波尔卡 1 +x:1 +投标法 1 +x:1 +等级证 1 +x:1 +培 14 +x:14 +门旁 1 +x:1 +硼 1 +x:1 +湘竹 1 +x:1 +故意 1 +x:1 +建纬所 1 +x:1 +诱使 1 +x:1 +使然 1 +x:1 +流程 1 +x:1 +领悟 1 +x:1 +豪横 1 +x:1 +朝令夕改 1 +x:1 +侦察连 1 +x:1 +池边 1 +x:1 +波纹 1 +x:1 +一氧化碳 1 +x:1 +竞争线 1 +x:1 +申请量 1 +x:1 +朝方 1 +x:1 +篮球架 1 +x:1 +字贴儿 1 +x:1 +先公后私 1 +x:1 +印泥 1 +x:1 +妄自演绎 1 +x:1 +加赛 1 +x:1 +发型 1 +x:1 +邓东村 1 +x:1 +操纵台 1 +x:1 +曲终人散 1 +x:1 +包公祠 1 +x:1 +主线 1 +x:1 +猪鬃草 1 +x:1 +稻地村 1 +x:1 +嘉峪市 1 +x:1 +领情 1 +x:1 +常绿树 1 +x:1 +聘金 1 +x:1 +雪豆 1 +x:1 +点贷 1 +x:1 +创意人 1 +x:1 +赶潮流 1 +x:1 +逆流 1 +x:1 +齿腔 1 +x:1 +风雨与共 1 +x:1 +朝日 1 +x:1 +封堵 1 +x:1 +傲慢 1 +x:1 +军营学 1 +x:1 +椰子油 1 +x:1 +聘选 1 +x:1 +嬉戏 1 +x:1 +储蓄箱 1 +x:1 +海鹰 1 +x:1 +阎 159 +x:159 +巡山 1 +x:1 +贯家堡 1 +x:1 +着重号 1 +x:1 +滩涂地 1 +x:1 +付诸实践 1 +x:1 +万宝镇 1 +x:1 +便道砖 1 +x:1 +宜章县 1 +x:1 +烂泥 1 +x:1 +农产品 1 +x:1 +野战 1 +x:1 +步炮 1 +x:1 +航路 1 +x:1 +村农 1 +x:1 +南清园 1 +x:1 +一元论 1 +x:1 +村内 1 +x:1 +制 169 +x:169 +一网打尽 1 +x:1 +身单力薄 1 +x:1 +不可忘者 1 +x:1 +商儒 1 +x:1 +版权法 1 +x:1 +运销处 1 +x:1 +早间 1 +x:1 +消声器 1 +x:1 +毛 1173 +x:1173 +老城区 1 +x:1 +力行 1 +x:1 +再者 1 +x:1 +乒协 1 +x:1 +脉冲星 1 +x:1 +消闲 1 +x:1 +忍辱求全 1 +x:1 +设法 1 +x:1 +求助信 1 +x:1 +务工青年 1 +x:1 +购到 1 +x:1 +晶莹碧透 1 +x:1 +硫磺 1 +x:1 +衔铁 1 +x:1 +凡事 1 +x:1 +中甸县 1 +x:1 +胸佩 1 +x:1 +字迹 1 +x:1 +薄 133 +x:133 +咸鸭蛋 1 +x:1 +忍冬 1 +x:1 +肤阴洁 1 +x:1 +故态 1 +x:1 +单色光 1 +x:1 +协定 1 +x:1 +一笔抹煞 1 +x:1 +封套 1 +x:1 +该寺 1 +x:1 +繁荣区 1 +x:1 +吕剧 1 +x:1 +圆法 1 +x:1 +轮番 1 +x:1 +一家子 1 +x:1 +夏湾村 1 +x:1 +背井离乡 1 +x:1 +名落孙山 1 +x:1 +漳 1 +x:1 +都柏林 1 +x:1 +注音 1 +x:1 +分析会 1 +x:1 +雷同者 1 +x:1 +代销商 1 +x:1 +势头 1 +x:1 +驾到 1 +x:1 +条理性 1 +x:1 +脑体 1 +x:1 +蜷缩 1 +x:1 +有机肥料 1 +x:1 +琼剧 1 +x:1 +历练 1 +x:1 +时段 1 +x:1 +龙寺镇 1 +x:1 +料子 1 +x:1 +二级化 1 +x:1 +仞 3 +x:3 +出口处 1 +x:1 +招风惹草 1 +x:1 +每时每刻 1 +x:1 +静电 1 +x:1 +涝灾 1 +x:1 +当家作主 1 +x:1 +党乡 1 +x:1 +平坦村 1 +x:1 +城址 1 +x:1 +佩服 1 +x:1 +具 333 +x:333 +深情 1 +x:1 +绾 5 +x:5 +亲亲切切 1 +x:1 +蜂 7 +x:7 +白水城 1 +x:1 +三伏天 1 +x:1 +病歪歪 1 +x:1 +重版率 1 +x:1 +作废票 1 +x:1 +二级品 1 +x:1 +谣传 1 +x:1 +委员长 1 +x:1 +义务兵 1 +x:1 +三溪口镇 1 +x:1 +恐怖主义 1 +x:1 +瓦板房 1 +x:1 +依 114 +x:114 +徒刑 1 +x:1 +扈家庄 1 +x:1 +郁郁苍苍 1 +x:1 +四增四减 1 +x:1 +铸铁 1 +x:1 +露脸 1 +x:1 +点评 1 +x:1 +缴款单 1 +x:1 +昌都寺 1 +x:1 +塔位 1 +x:1 +横加干涉 1 +x:1 +加试 1 +x:1 +过渡带 1 +x:1 +封建 1 +x:1 +羽 28 +x:28 +参观者 1 +x:1 +制造者 1 +x:1 +加计 1 +x:1 +村围 1 +x:1 +觉 82 +x:82 +魏都区 1 +x:1 +菩萨心肠 1 +x:1 +审查会 1 +x:1 +铁道线 1 +x:1 +问清 1 +x:1 +脂粉 1 +x:1 +锹 14 +x:14 +帽带 1 +x:1 +封底 1 +x:1 +冲毁 1 +x:1 +以至于 1 +x:1 +留底 1 +x:1 +酣畅淋漓 1 +x:1 +产道 1 +x:1 +胆石病 1 +x:1 +羊坊店 1 +x:1 +瞬息 1 +x:1 +主干渠 1 +x:1 +过渡年 1 +x:1 +老面子 1 +x:1 +独联体队 1 +x:1 +时气 1 +x:1 +解劝 1 +x:1 +发光 1 +x:1 +舞钢 1 +x:1 +亳州 1 +x:1 +发冷 1 +x:1 +徒劳 1 +x:1 +集中制 1 +x:1 +斜襟 1 +x:1 +店貌 1 +x:1 +茶艺馆 1 +x:1 +茄鲞 1 +x:1 +成活关 1 +x:1 +曈曈 1 +x:1 +危殆 1 +x:1 +痢疾 1 +x:1 +事务员 1 +x:1 +该峰 1 +x:1 +锡 14 +x:14 +爱尔兰岛 1 +x:1 +斯拉夫 1 +x:1 +勾连 1 +x:1 +豪气 1 +x:1 +劳资政 1 +x:1 +轮牧 1 +x:1 +略作 1 +x:1 +商团 1 +x:1 +鼎盛 1 +x:1 +条法部 1 +x:1 +物理所 1 +x:1 +迁离 1 +x:1 +界牌镇 1 +x:1 +欢呼声 1 +x:1 +腋窝 1 +x:1 +隐患区 1 +x:1 +怦然心动 1 +x:1 +祛暑 1 +x:1 +实用化 1 +x:1 +北约 1 +x:1 +走私船 1 +x:1 +追问 1 +x:1 +发出 1 +x:1 +发函 1 +x:1 +不愧于 1 +x:1 +碉堡 1 +x:1 +针孔 1 +x:1 +有序性 1 +x:1 +光身汉 1 +x:1 +运送 1 +x:1 +叻 1 +x:1 +思潮 1 +x:1 +兔业 1 +x:1 +受伤者 1 +x:1 +改革面 1 +x:1 +毛刺 1 +x:1 +受益者 1 +x:1 +等级赛 1 +x:1 +大学法 1 +x:1 +埃博拉 1 +x:1 +该岛 1 +x:1 +角球 1 +x:1 +家政班 1 +x:1 +毛利 1 +x:1 +预冷肉 1 +x:1 +着儿 1 +x:1 +避难就易 1 +x:1 +磨砖对缝 1 +x:1 +毛发 1 +x:1 +贼窝 1 +x:1 +燕南园 1 +x:1 +铲吸量 1 +x:1 +缓建 1 +x:1 +留心 1 +x:1 +发债 1 +x:1 +淡泊明志 1 +x:1 +冬笋 1 +x:1 +有偿转让 1 +x:1 +吹牛话 1 +x:1 +搜求 1 +x:1 +德和园 1 +x:1 +封志 1 +x:1 +高打 1 +x:1 +领有 1 +x:1 +救助金 1 +x:1 +四有 1 +x:1 +以防 1 +x:1 +锻炼者 1 +x:1 +徐徐 1 +x:1 +轮班 1 +x:1 +巡查制 1 +x:1 +蝇头小利 1 +x:1 +击球 1 +x:1 +岗南镇 1 +x:1 +总裁室 1 +x:1 +乔装 1 +x:1 +吉日 1 +x:1 +真真切切 1 +x:1 +园田 1 +x:1 +卵细胞核 1 +x:1 +肉制品 1 +x:1 +二轻企字 1 +x:1 +神笔 1 +x:1 +雍 4 +x:4 +廊庑 1 +x:1 +守望者 1 +x:1 +姓 166 +x:166 +此种 1 +x:1 +玩忽职守 1 +x:1 +四仙桌 1 +x:1 +暂停 1 +x:1 +人寿险 1 +x:1 +遗像 1 +x:1 +一口一声 1 +x:1 +村埭 1 +x:1 +龙口夺食 1 +x:1 +吉方 1 +x:1 +巡逻舰 1 +x:1 +奉承 1 +x:1 +撤消 1 +x:1 +塑造 1 +x:1 +北方话 1 +x:1 +操纵员 1 +x:1 +遵章守纪 1 +x:1 +溢价 1 +x:1 +裁决书 1 +x:1 +梁庄乡 1 +x:1 +彭楼 1 +x:1 +异党 1 +x:1 +寻刺 1 +x:1 +环环相扣 1 +x:1 +久已 1 +x:1 +养壶笔 1 +x:1 +期望 1 +x:1 +濒危 1 +x:1 +春耕大忙 1 +x:1 +发傻 1 +x:1 +佃农 1 +x:1 +方略 1 +x:1 +门户 1 +x:1 +极量 1 +x:1 +财务处 1 +x:1 +烟蚜 1 +x:1 +勋位 1 +x:1 +中枢神经 1 +x:1 +解危 1 +x:1 +台怀镇寺 1 +x:1 +天台县 1 +x:1 +商城 1 +x:1 +义愤 1 +x:1 +如期而至 1 +x:1 +讨教 1 +x:1 +相对真理 1 +x:1 +糖度 1 +x:1 +众星拱月 1 +x:1 +池袋 1 +x:1 +污染费 1 +x:1 +烂肠瘟 1 +x:1 +大谱儿 1 +x:1 +贫困乡 1 +x:1 +楼庄乡 1 +x:1 +该州 1 +x:1 +期末 1 +x:1 +留影 1 +x:1 +密密匝匝 1 +x:1 +席篾 1 +x:1 +复印机 1 +x:1 +猊糖 1 +x:1 +北沙滩 1 +x:1 +无拘无束 1 +x:1 +海基会 1 +x:1 +组织生活 1 +x:1 +铸锭 1 +x:1 +帽徽 1 +x:1 +朝拜 1 +x:1 +占有量 1 +x:1 +噍 1 +x:1 +便民店 1 +x:1 +电信号 1 +x:1 +略为 1 +x:1 +饮水管 1 +x:1 +期权 1 +x:1 +贴画 1 +x:1 +埤城镇 1 +x:1 +找找 1 +x:1 +铸锅 1 +x:1 +门扉 1 +x:1 +瓶 97 +x:97 +产量 1 +x:1 +非驴非马 1 +x:1 +门扇 1 +x:1 +火烧火燎 1 +x:1 +离乱 1 +x:1 +茧花 1 +x:1 +饲草料 1 +x:1 +太子 1 +x:1 +涝河桥 1 +x:1 +褊 1 +x:1 +沈阳城 1 +x:1 +增光添彩 1 +x:1 +硝锵水 1 +x:1 +离乡 1 +x:1 +炒货 1 +x:1 +爱康工程 1 +x:1 +屋椽 1 +x:1 +使用价值 1 +x:1 +冥 1 +x:1 +诺基亚 1 +x:1 +意义 1 +x:1 +春上 1 +x:1 +溪畔 1 +x:1 +见面礼 1 +x:1 +并重 1 +x:1 +吐丝 1 +x:1 +杜尔伯特 1 +x:1 +鹦鹉螺 1 +x:1 +吕城 1 +x:1 +发包 1 +x:1 +浮水印 1 +x:1 +商周 1 +x:1 +方盒 1 +x:1 +藏而不露 1 +x:1 +流线 1 +x:1 +张挂 1 +x:1 +政治权利 1 +x:1 +客运部 1 +x:1 +流经 1 +x:1 +地保 1 +x:1 +发卡 1 +x:1 +上索恩省 1 +x:1 +咖啡色 1 +x:1 +印制法 1 +x:1 +苍松 1 +x:1 +天鹅座 1 +x:1 +迈皋桥 1 +x:1 +增效 1 +x:1 +装配图 1 +x:1 +发单 1 +x:1 +终结者 1 +x:1 +离业 1 +x:1 +故旧 1 +x:1 +谬语 1 +x:1 +危楼 1 +x:1 +该市 1 +x:1 +谬说 1 +x:1 +洋灰 1 +x:1 +购地 1 +x:1 +穿山越谷 1 +x:1 +巡夜 1 +x:1 +叶蛋白 1 +x:1 +经济部 1 +x:1 +改良羊 1 +x:1 +消逝 1 +x:1 +离任 1 +x:1 +事业费 1 +x:1 +留居 1 +x:1 +陆川 1 +x:1 +信任度 1 +x:1 +商品 1 +x:1 +下狱 1 +x:1 +乍浦 1 +x:1 +颈椎 1 +x:1 +使用 1 +x:1 +消退 1 +x:1 +松岗 1 +x:1 +净菜 1 +x:1 +冲击伤 1 +x:1 +沿边 1 +x:1 +春事 1 +x:1 +中小幼 1 +x:1 +咖啡节 1 +x:1 +驱邪灭鬼 1 +x:1 +有机体 1 +x:1 +保龄球馆 1 +x:1 +封山 1 +x:1 +吉普 1 +x:1 +望仙坡 1 +x:1 +最终 1 +x:1 +贸易界 1 +x:1 +扶老助孤 1 +x:1 +冷配点 1 +x:1 +我区 1 +x:1 +帆张网 1 +x:1 +蓓蕾 1 +x:1 +练市镇 1 +x:1 +成本额 1 +x:1 +团拜会 1 +x:1 +佩戴 1 +x:1 +完全 1 +x:1 +协调组 1 +x:1 +学府路 1 +x:1 +地位 1 +x:1 +睡 141 +x:141 +俱乐部 1 +x:1 +监督法 1 +x:1 +框架 1 +x:1 +舞阳 1 +x:1 +贝叶树 1 +x:1 +射击 1 +x:1 +脱产 1 +x:1 +永恒 1 +x:1 +消遣 1 +x:1 +该店 1 +x:1 +万家灯火 1 +x:1 +消遥 1 +x:1 +纪录片 1 +x:1 +招摇撞骗 1 +x:1 +旁切圆 1 +x:1 +制衡性 1 +x:1 +表面张力 1 +x:1 +迅猛 1 +x:1 +水翼船 1 +x:1 +历程 1 +x:1 +脱位 1 +x:1 +专题讨论 1 +x:1 +这里 1 +x:1 +食品袋 1 +x:1 +俄勒冈州 1 +x:1 +东河塘 1 +x:1 +新村港 1 +x:1 +财务室 1 +x:1 +穗轴 1 +x:1 +地产 1 +x:1 +扼杀 1 +x:1 +犹 56 +x:56 +风湿病 1 +x:1 +降香 1 +x:1 +非行政 1 +x:1 +糖尿 1 +x:1 +小黄鱼 1 +x:1 +巩固率 1 +x:1 +事务型 1 +x:1 +领教 1 +x:1 +埋 109 +x:109 +压抑感 1 +x:1 +吉林 1 +x:1 +解冻 1 +x:1 +舞鞋 1 +x:1 +慢支炎 1 +x:1 +解决 1 +x:1 +着力 1 +x:1 +新召苏木 1 +x:1 +导演铃 1 +x:1 +超度 1 +x:1 +离休 1 +x:1 +俏立 1 +x:1 +地价 1 +x:1 +仓储业 1 +x:1 +至高无上 1 +x:1 +黑名单 1 +x:1 +问津 1 +x:1 +客运量 1 +x:1 +性情 1 +x:1 +打饱嗝儿 1 +x:1 +意会 1 +x:1 +代代红 1 +x:1 +万丈深渊 1 +x:1 +天鹅径 1 +x:1 +载歌行 1 +x:1 +归结点 1 +x:1 +磨漆画 1 +x:1 +能矿部长 1 +x:1 +脱俗 1 +x:1 +毛兔 1 +x:1 +哪里话 1 +x:1 +细片 1 +x:1 +青浦县 1 +x:1 +下班 1 +x:1 +信访件 1 +x:1 +集成块 1 +x:1 +地上 1 +x:1 +地下 1 +x:1 +其意 1 +x:1 +关节炎 1 +x:1 +不复存在 1 +x:1 +匣 1 +x:1 +妖娆 1 +x:1 +毛兴 1 +x:1 +地主 1 +x:1 +关节点 1 +x:1 +营私舞弊 1 +x:1 +主办人 1 +x:1 +春供 1 +x:1 +耗尽 1 +x:1 +还原染料 1 +x:1 +合成染料 1 +x:1 +春修 1 +x:1 +核心组 1 +x:1 +蛋汤 1 +x:1 +冬种 1 +x:1 +第一流 1 +x:1 +形态学 1 +x:1 +唐海镇 1 +x:1 +陶然亭 1 +x:1 +驱护舰 1 +x:1 +期效 1 +x:1 +珙泉镇 1 +x:1 +菘 1 +x:1 +富裕型 1 +x:1 +廊尾 1 +x:1 +手指尖 1 +x:1 +持外汇者 1 +x:1 +认清 1 +x:1 +纵横交错 1 +x:1 +期数 1 +x:1 +一喷三防 1 +x:1 +宋初 1 +x:1 +交费 1 +x:1 +大张挞伐 1 +x:1 +地价税 1 +x:1 +一命呜呼 1 +x:1 +烂根 1 +x:1 +红花油 1 +x:1 +领率课 1 +x:1 +贷学金 1 +x:1 +道贺 1 +x:1 +借东风 1 +x:1 +波尔多 1 +x:1 +能上能下 1 +x:1 +论点 1 +x:1 +川籍 1 +x:1 +药理学 1 +x:1 +刊文 1 +x:1 +钢丝锯 1 +x:1 +书架 1 +x:1 +便民卡 1 +x:1 +射弩 1 +x:1 +危机 1 +x:1 +整整齐齐 1 +x:1 +滥杀 1 +x:1 +敬老养老 1 +x:1 +印刷品 1 +x:1 +荡秋千 1 +x:1 +强 1735 +x:1735 +五代同堂 1 +x:1 +中组部 1 +x:1 +沙色乡 1 +x:1 +北仑河口 1 +x:1 +碧螺春 1 +x:1 +参知政事 1 +x:1 +台港澳 1 +x:1 +便民化 1 +x:1 +孝肃亭 1 +x:1 +留办 1 +x:1 +塔桥村 1 +x:1 +高教法 1 +x:1 +五洲四海 1 +x:1 +时态 1 +x:1 +拉贾斯坦 1 +x:1 +置身 1 +x:1 +椒盐 1 +x:1 +去世 1 +x:1 +村干部 1 +x:1 +先决 1 +x:1 +咖啡豆 1 +x:1 +营房 1 +x:1 +代销店 1 +x:1 +用电户 1 +x:1 +孩子家 1 +x:1 +晴 46 +x:46 +豪情 1 +x:1 +制度化 1 +x:1 +射影 1 +x:1 +表扬稿 1 +x:1 +糖厂 1 +x:1 +长岭县 1 +x:1 +诚如 1 +x:1 +锡耶那一 1 +x:1 +再说 1 +x:1 +商嫂 1 +x:1 +屋架 1 +x:1 +污染者 1 +x:1 +竹阳村 1 +x:1 +旦角儿 1 +x:1 +锂业 1 +x:1 +糖原 1 +x:1 +开拓力 1 +x:1 +换季 1 +x:1 +白炽灯 1 +x:1 +渊远流长 1 +x:1 +永清 1 +x:1 +设有 1 +x:1 +既往不咎 1 +x:1 +知法 1 +x:1 +三角镇 1 +x:1 +点名册 1 +x:1 +西餐厅 1 +x:1 +一码事 1 +x:1 +第一手 1 +x:1 +医史学者 1 +x:1 +毛布 1 +x:1 +理发员 1 +x:1 +当头一棒 1 +x:1 +豪情壮志 1 +x:1 +啸 11 +x:11 +浙 23 +x:23 +向导员 1 +x:1 +顺顺当当 1 +x:1 +炒菜 1 +x:1 +故此 1 +x:1 +威风凛凛 1 +x:1 +贻贝 1 +x:1 +趁亮 1 +x:1 +视听型 1 +x:1 +不折不扣 1 +x:1 +猿猴 1 +x:1 +水葫芦 1 +x:1 +托管费 1 +x:1 +原作者 1 +x:1 +糖分 1 +x:1 +介绍所 1 +x:1 +村容 1 +x:1 +马来西亚 1 +x:1 +基准价 1 +x:1 +选赛 1 +x:1 +镇区 1 +x:1 +封发 1 +x:1 +右肘 1 +x:1 +框框 1 +x:1 +会议费 1 +x:1 +低高型 1 +x:1 +藏族人 1 +x:1 +封口 1 +x:1 +川芎 1 +x:1 +果敢性 1 +x:1 +冬眠 1 +x:1 +国光村 1 +x:1 +村官 1 +x:1 +门源 1 +x:1 +徒弟 1 +x:1 +申办人 1 +x:1 +短池赛 1 +x:1 +领款 1 +x:1 +铤而走险 1 +x:1 +悱 1 +x:1 +刊播 1 +x:1 +董塘 1 +x:1 +村宅 1 +x:1 +发射 1 +x:1 +封号 1 +x:1 +该党 1 +x:1 +留史 1 +x:1 +口口声声 1 +x:1 +吾 22 +x:22 +南侧 1 +x:1 +小卖 1 +x:1 +策勒县 1 +x:1 +迫降 1 +x:1 +山沟沟 1 +x:1 +学前班 1 +x:1 +村寨 1 +x:1 +针刺麻醉 1 +x:1 +毒死 1 +x:1 +蜡板 1 +x:1 +发展 1 +x:1 +鹰嘴 1 +x:1 +身板 1 +x:1 +陪 99 +x:99 +缸盆 1 +x:1 +市话局 1 +x:1 +慰 10 +x:10 +随波逐流 1 +x:1 +当局者迷 1 +x:1 +大象者 1 +x:1 +题花 1 +x:1 +射干 1 +x:1 +任免 1 +x:1 +印染 1 +x:1 +苍梧 1 +x:1 +诱虫灯 1 +x:1 +借读费 1 +x:1 +间歇泉 1 +x:1 +执导 1 +x:1 +信任带 1 +x:1 +事半功倍 1 +x:1 +磐安县 1 +x:1 +酉阳县 1 +x:1 +乡统筹费 1 +x:1 +准儿 1 +x:1 +角票 1 +x:1 +死皮赖脸 1 +x:1 +走私轮 1 +x:1 +香化 1 +x:1 +胡萝卜 1 +x:1 +乘其不备 1 +x:1 +至关重要 1 +x:1 +元首 1 +x:1 +虐杀 1 +x:1 +内宾 1 +x:1 +不折不挠 1 +x:1 +料儿 1 +x:1 +龙塘坝乡 1 +x:1 +勤工助学 1 +x:1 +核心点 1 +x:1 +蜡果 1 +x:1 +钾 8 +x:8 +徭役地租 1 +x:1 +事务处 1 +x:1 +积存数 1 +x:1 +商定 1 +x:1 +背水一战 1 +x:1 +浓度值 1 +x:1 +豁然开朗 1 +x:1 +形式主义 1 +x:1 +轮缘 1 +x:1 +明瓦 1 +x:1 +村学 1 +x:1 +北科大 1 +x:1 +勾芡 1 +x:1 +任凭 1 +x:1 +赴任 1 +x:1 +村子 1 +x:1 +草儿 1 +x:1 +灯红酒绿 1 +x:1 +解开 1 +x:1 +原配 1 +x:1 +交换价值 1 +x:1 +假释犯 1 +x:1 +蜡染 1 +x:1 +工商行 1 +x:1 +古建 1 +x:1 +仰天 1 +x:1 +风筝会 1 +x:1 +趁便 1 +x:1 +阜宁县 1 +x:1 +修葺一新 1 +x:1 +设施 1 +x:1 +该剧 1 +x:1 +针线活 1 +x:1 +根由 1 +x:1 +两控区 1 +x:1 +洞见 1 +x:1 +红红火火 1 +x:1 +旧俗 1 +x:1 +危改 1 +x:1 +日思夜想 1 +x:1 +森警 1 +x:1 +五福涧村 1 +x:1 +钢城 1 +x:1 +碗厂乡 1 +x:1 +上方岁贡 1 +x:1 +发式 1 +x:1 +淑女 1 +x:1 +完工 1 +x:1 +日程表 1 +x:1 +加薪 1 +x:1 +残墙断壁 1 +x:1 +清河区 1 +x:1 +遵义城 1 +x:1 +呼啸 1 +x:1 +难于登天 1 +x:1 +卸下 1 +x:1 +畅快 1 +x:1 +该刊 1 +x:1 +折断 1 +x:1 +长方形 1 +x:1 +后则腰村 1 +x:1 +稀奇古怪 1 +x:1 +时或 1 +x:1 +版权日 1 +x:1 +单雄蕊 1 +x:1 +灼 4 +x:4 +执壶 1 +x:1 +北赵村 1 +x:1 +加强型 1 +x:1 +新秀队 1 +x:1 +热市镇 1 +x:1 +列伊 1 +x:1 +支取额 1 +x:1 +碎步儿 1 +x:1 +诚实 1 +x:1 +灵璧县 1 +x:1 +鉴定 1 +x:1 +助建 1 +x:1 +蓬莱市 1 +x:1 +发微 1 +x:1 +小负 1 +x:1 +旧体 1 +x:1 +久别 1 +x:1 +列传 1 +x:1 +第一性 1 +x:1 +下绊 1 +x:1 +旧作 1 +x:1 +羽绒布 1 +x:1 +西柏坡村 1 +x:1 +色素性 1 +x:1 +料到 1 +x:1 +室内剧 1 +x:1 +科教企 1 +x:1 +刨土问食 1 +x:1 +加工费 1 +x:1 +江西 1 +x:1 +下级 1 +x:1 +冰啤 1 +x:1 +桑葚儿 1 +x:1 +清河县 1 +x:1 +永庆 1 +x:1 +陆军 1 +x:1 +夹克 1 +x:1 +村塾 1 +x:1 +卑 4 +x:4 +力臂 1 +x:1 +新加坡元 1 +x:1 +昆明市 1 +x:1 +七星街 1 +x:1 +出口值 1 +x:1 +冬瓜 1 +x:1 +下线 1 +x:1 +胜 531 +x:531 +方程 1 +x:1 +亳县 1 +x:1 +琼子 1 +x:1 +邱北县 1 +x:1 +唁电 1 +x:1 +孩子头 1 +x:1 +川红 1 +x:1 +喀拉和顺 1 +x:1 +大曲虫 1 +x:1 +掖县 1 +x:1 +朝气 1 +x:1 +脂膏 1 +x:1 +该卡 1 +x:1 +加蓬 1 +x:1 +檐沟 1 +x:1 +湘东 1 +x:1 +有加利 1 +x:1 +火钳 1 +x:1 +印数 1 +x:1 +发帖 1 +x:1 +文化财 1 +x:1 +再行 1 +x:1 +毛巾 1 +x:1 +宜丰县 1 +x:1 +左权县 1 +x:1 +储蓄率 1 +x:1 +发布 1 +x:1 +解州 1 +x:1 +村妇 1 +x:1 +娶 31 +x:31 +托举 1 +x:1 +流通领域 1 +x:1 +运煤车 1 +x:1 +搀杂 1 +x:1 +延展性 1 +x:1 +峭壁 1 +x:1 +倦容 1 +x:1 +石家庄 1 +x:1 +四化建设 1 +x:1 +击穿 1 +x:1 +旧人 1 +x:1 +大为 1 +x:1 +高墩台 1 +x:1 +旧交 1 +x:1 +笋岗路 1 +x:1 +危若累卵 1 +x:1 +该区 1 +x:1 +村姑 1 +x:1 +源文件 1 +x:1 +长话局 1 +x:1 +村委 1 +x:1 +撤掉 1 +x:1 +过目不忘 1 +x:1 +坨 1 +x:1 +湘乡 1 +x:1 +封冰 1 +x:1 +鏖兵 1 +x:1 +封冻 1 +x:1 +试飞员 1 +x:1 +旧事 1 +x:1 +风花雪月 1 +x:1 +一时间 1 +x:1 +柔情蜜意 1 +x:1 +商委 1 +x:1 +村头 1 +x:1 +址 7 +x:7 +消耗量 1 +x:1 +立法法 1 +x:1 +撤换 1 +x:1 +旧书 1 +x:1 +辅导性 1 +x:1 +炒股 1 +x:1 +泥石流 1 +x:1 +旧习 1 +x:1 +村夫 1 +x:1 +湘云 1 +x:1 +该台 1 +x:1 +题联 1 +x:1 +罗湖桥 1 +x:1 +性气 1 +x:1 +急人之难 1 +x:1 +国王队 1 +x:1 +完小 1 +x:1 +梁园 1 +x:1 +书札 1 +x:1 +封关 1 +x:1 +岁岁 1 +x:1 +教三楼 1 +x:1 +并非易事 1 +x:1 +一年半载 1 +x:1 +绕梁 1 +x:1 +列为 1 +x:1 +方策 1 +x:1 +少数民族 1 +x:1 +缩衣节食 1 +x:1 +回头见 1 +x:1 +虐政 1 +x:1 +溴氰菊 1 +x:1 +徒工 1 +x:1 +该县 1 +x:1 +著书立说 1 +x:1 +走私货 1 +x:1 +雅宝路 1 +x:1 +出口儿 1 +x:1 +大营子镇 1 +x:1 +永济 1 +x:1 +文化路 1 +x:1 +讲演团 1 +x:1 +乌拉圭 1 +x:1 +舒缓 1 +x:1 +旧业 1 +x:1 +该厂 1 +x:1 +不堪入耳 1 +x:1 +设摊 1 +x:1 +发廊 1 +x:1 +盾 39 +x:39 +疥疮 1 +x:1 +发夹 1 +x:1 +徐鹰牌 1 +x:1 +申购量 1 +x:1 +传奇性 1 +x:1 +健壮 1 +x:1 +红花村 1 +x:1 +出口国 1 +x:1 +封四 1 +x:1 +牛头山 1 +x:1 +熟能生巧 1 +x:1 +友邦 1 +x:1 +光碟 1 +x:1 +拮据 1 +x:1 +扇贝笼 1 +x:1 +李庄乡 1 +x:1 +推广车 1 +x:1 +四郎探母 1 +x:1 +村庄 1 +x:1 +煊赫 1 +x:1 +藏语系 1 +x:1 +失窃案 1 +x:1 +施业区 1 +x:1 +成组技术 1 +x:1 +白菜心 1 +x:1 +问明 1 +x:1 +蜡扦 1 +x:1 +榆荚 1 +x:1 +妮儿 1 +x:1 +任命 1 +x:1 +杂草 1 +x:1 +意向性 1 +x:1 +连续不断 1 +x:1 +联网化 1 +x:1 +乌梅 1 +x:1 +赖 74 +x:74 +吃苦头 1 +x:1 +射孔 1 +x:1 +吃苦耐劳 1 +x:1 +惩恶扬善 1 +x:1 +优待证 1 +x:1 +发套 1 +x:1 +发奖 1 +x:1 +琼州 1 +x:1 +库 86 +x:86 +评为 1 +x:1 +普照寺 1 +x:1 +昌都县 1 +x:1 +发奋 1 +x:1 +方粒 1 +x:1 +期满 1 +x:1 +工商费 1 +x:1 +事务局 1 +x:1 +石刁柏 1 +x:1 +祸端 1 +x:1 +桦甸 1 +x:1 +捕头 1 +x:1 +发妻 1 +x:1 +陆域 1 +x:1 +划伤 1 +x:1 +三棵树 1 +x:1 +变化无常 1 +x:1 +廊坊 1 +x:1 +柱 20 +x:20 +阿拉善旗 1 +x:1 +辖内 1 +x:1 +琼崖 1 +x:1 +缝补 1 +x:1 +新城市 1 +x:1 +优先级 1 +x:1 +沐浴 1 +x:1 +陆基 1 +x:1 +排风扇 1 +x:1 +樯 1 +x:1 +轮空 1 +x:1 +大安市 1 +x:1 +政务司 1 +x:1 +产草量 1 +x:1 +评价 1 +x:1 +桂竹 1 +x:1 +种子 1 +x:1 +村平 1 +x:1 +村干 1 +x:1 +不平衡性 1 +x:1 +商店 1 +x:1 +运动神经 1 +x:1 +安吉县 1 +x:1 +航速 1 +x:1 +暂委 1 +x:1 +齿轮 1 +x:1 +监控 1 +x:1 +爷儿 1 +x:1 +游迹 1 +x:1 +蛋松 1 +x:1 +智牙 1 +x:1 +南南合作 1 +x:1 +奥卢市 1 +x:1 +席位数 1 +x:1 +八面来风 1 +x:1 +退居二线 1 +x:1 +后人乘凉 1 +x:1 +碑文 1 +x:1 +印报 1 +x:1 +非常设 1 +x:1 +吃喝玩乐 1 +x:1 +村徽 1 +x:1 +时数 1 +x:1 +愈合 1 +x:1 +壮年人 1 +x:1 +蒯 5 +x:5 +贴片 1 +x:1 +站里 1 +x:1 +古铜色 1 +x:1 +时效 1 +x:1 +圪塔村 1 +x:1 +解密 1 +x:1 +处理不当 1 +x:1 +林场村 1 +x:1 +哲言 1 +x:1 +魂灵 1 +x:1 +柳木 1 +x:1 +流传日盛 1 +x:1 +土建工程 1 +x:1 +全彩印 1 +x:1 +划价 1 +x:1 +轮箍 1 +x:1 +引诱 1 +x:1 +平陆县 1 +x:1 +黍 1 +x:1 +圆舞曲 1 +x:1 +评优 1 +x:1 +托莱多城 1 +x:1 +幡然醒悟 1 +x:1 +时政 1 +x:1 +千秋万代 1 +x:1 +月亮门儿 1 +x:1 +大郑镇 1 +x:1 +苜蓿 1 +x:1 +着墨 1 +x:1 +稀有元素 1 +x:1 +徒孙 1 +x:1 +评传 1 +x:1 +出口型 1 +x:1 +宅门 1 +x:1 +满招损 1 +x:1 +使绊 1 +x:1 +党校 1 +x:1 +调处员 1 +x:1 +评估 1 +x:1 +豪放 1 +x:1 +痱子粉 1 +x:1 +时日 1 +x:1 +今文经 1 +x:1 +怒吼 1 +x:1 +花媳妇儿 1 +x:1 +骤然 1 +x:1 +时时 1 +x:1 +下移 1 +x:1 +封坛 1 +x:1 +存在 1 +x:1 +组织部长 1 +x:1 +岁寒三友 1 +x:1 +红 434 +x:434 +速滑界 1 +x:1 +白菜帮 1 +x:1 +下种 1 +x:1 +开拓型 1 +x:1 +划一 1 +x:1 +三里河 1 +x:1 +W 9 +x:9 +用心险恶 1 +x:1 +先君 1 +x:1 +九州岛 1 +x:1 +讲解员 1 +x:1 +琼山 1 +x:1 +滥报 1 +x:1 +武状元 1 +x:1 +心劲儿 1 +x:1 +日射角 1 +x:1 +出口地 1 +x:1 +启动点 1 +x:1 +到位数 1 +x:1 +留在 1 +x:1 +忍心 1 +x:1 +时文 1 +x:1 +李营镇 1 +x:1 +孝昌县 1 +x:1 +平坦 1 +x:1 +封地 1 +x:1 +文化课 1 +x:1 +纪事 1 +x:1 +项 3595 +x:3595 +村级 1 +x:1 +站段 1 +x:1 +卿 12 +x:12 +犹为未晚 1 +x:1 +云和县 1 +x:1 +爆裂声 1 +x:1 +数以亿计 1 +x:1 +民主党 1 +x:1 +竹椅 1 +x:1 +脊 3 +x:3 +老有所乐 1 +x:1 +野菜 1 +x:1 +临渊羡鱼 1 +x:1 +反作用力 1 +x:1 +言多语失 1 +x:1 +驮篓 1 +x:1 +贻误 1 +x:1 +商山 1 +x:1 +妥 18 +x:18 +出口品 1 +x:1 +言 231 +x:231 +众将 1 +x:1 +傀儡戏 1 +x:1 +驴年马月 1 +x:1 +介身 1 +x:1 +鸥鸟 1 +x:1 +窗玻璃 1 +x:1 +哥德堡市 1 +x:1 +无记名 1 +x:1 +索饵场 1 +x:1 +冬灌 1 +x:1 +圣母院 1 +x:1 +法新社 1 +x:1 +舆情 1 +x:1 +着实 1 +x:1 +文化街 1 +x:1 +惟 14 +x:14 +双刃 1 +x:1 +门槛 1 +x:1 +集成度 1 +x:1 +老有所为 1 +x:1 +崇明县 1 +x:1 +红旗渠 1 +x:1 +峻拔秀逸 1 +x:1 +搀扶 1 +x:1 +德安县 1 +x:1 +碑柱 1 +x:1 +繁荣带 1 +x:1 +风湿类 1 +x:1 +波兹南 1 +x:1 +理发刀 1 +x:1 +归档 1 +x:1 +非焦油 1 +x:1 +该团 1 +x:1 +该国 1 +x:1 +黑黝黝 1 +x:1 +格威特杯 1 +x:1 +鲭江 1 +x:1 +一般而言 1 +x:1 +暂定 1 +x:1 +完备 1 +x:1 +农场主 1 +x:1 +自卸船 1 +x:1 +桶子 1 +x:1 +总星系 1 +x:1 +国语课 1 +x:1 +西敏司寺 1 +x:1 +调三斡四 1 +x:1 +松林区 1 +x:1 +医疗组 1 +x:1 +象素 1 +x:1 +空山坝 1 +x:1 +留名 1 +x:1 +单身汉 1 +x:1 +门楼 1 +x:1 +自家人 1 +x:1 +顶坪村 1 +x:1 +诚心 1 +x:1 +盐 30 +x:30 +购得 1 +x:1 +一事无成 1 +x:1 +即便 1 +x:1 +完好 1 +x:1 +羁縻 1 +x:1 +冬烘 1 +x:1 +料器 1 +x:1 +一展才华 1 +x:1 +碑林 1 +x:1 +小院儿 1 +x:1 +测距标 1 +x:1 +银河 1 +x:1 +多幕剧 1 +x:1 +乙种射线 1 +x:1 +热核反应 1 +x:1 +生橡胶 1 +x:1 +固镇 1 +x:1 +统计学家 1 +x:1 +轮种 1 +x:1 +文 523 +x:523 +正直 1 +x:1 +贸易系 1 +x:1 +直贡派 1 +x:1 +直挺挺 1 +x:1 +新针疗法 1 +x:1 +沉痛 1 +x:1 +冬训制 1 +x:1 +理发厅 1 +x:1 +吹号者 1 +x:1 +贴现 1 +x:1 +哺养 1 +x:1 +纸包 1 +x:1 +百科辞典 1 +x:1 +海岛县 1 +x:1 +一般而论 1 +x:1 +毫无来由 1 +x:1 +软件业 1 +x:1 +出国梦 1 +x:1 +下等 1 +x:1 +峭岩 1 +x:1 +点破 1 +x:1 +北京猿人 1 +x:1 +购并 1 +x:1 +危急 1 +x:1 +祸祟 1 +x:1 +陕甘宁 1 +x:1 +楼层 1 +x:1 +门梁 1 +x:1 +舞龙 1 +x:1 +负债国 1 +x:1 +五岭 1 +x:1 +加码 1 +x:1 +平遥城 1 +x:1 +萍踪浪迹 1 +x:1 +良言 1 +x:1 +该地 1 +x:1 +秧苗 1 +x:1 +时段性 1 +x:1 +接驳端子 1 +x:1 +温血动物 1 +x:1 +领海 1 +x:1 +时月 1 +x:1 +开箱费 1 +x:1 +娇丽 1 +x:1 +临建棚 1 +x:1 +重头 1 +x:1 +财务司 1 +x:1 +汤圆粉 1 +x:1 +绥滨县 1 +x:1 +保龄球道 1 +x:1 +时期 1 +x:1 +傲气 1 +x:1 +专心 1 +x:1 +性格 1 +x:1 +商州 1 +x:1 +苍溪 1 +x:1 +双勾 1 +x:1 +过人之处 1 +x:1 +妓院 1 +x:1 +汾阳市 1 +x:1 +男女老少 1 +x:1 +知母 1 +x:1 +无线电话 1 +x:1 +出口商 1 +x:1 +该城 1 +x:1 +下篇 1 +x:1 +理发匠 1 +x:1 +检察官法 1 +x:1 +朽烂 1 +x:1 +苍溟 1 +x:1 +沈阳市 1 +x:1 +取水口 1 +x:1 +老有所依 1 +x:1 +文化观 1 +x:1 +搭桥术 1 +x:1 +豪杰 1 +x:1 +全省性 1 +x:1 +偕 8 +x:8 +文化角 1 +x:1 +锉刀 1 +x:1 +祸福 1 +x:1 +回头路 1 +x:1 +毛头 1 +x:1 +义愤填膺 1 +x:1 +闭门谢客 1 +x:1 +自限性 1 +x:1 +虱 1 +x:1 +山西路 1 +x:1 +天秤座 1 +x:1 +拉吊型 1 +x:1 +门框 1 +x:1 +东南 1 +x:1 +滑动摩擦 1 +x:1 +通力 1 +x:1 +潮田乡 1 +x:1 +渤西 1 +x:1 +沓 19 +x:19 +苍然 1 +x:1 +忽喇喇 1 +x:1 +针头 1 +x:1 +好转 1 +x:1 +架式 1 +x:1 +麟 10 +x:10 +哺乳 1 +x:1 +怠 2 +x:2 +高保真 1 +x:1 +中幡 1 +x:1 +下摆 1 +x:1 +越岭 1 +x:1 +评剧 1 +x:1 +铜氨丝 1 +x:1 +赖皮 1 +x:1 +贝叶经 1 +x:1 +滚烫滚烫 1 +x:1 +中年 1 +x:1 +专利品 1 +x:1 +公园式 1 +x:1 +袁庄 1 +x:1 +棍术 1 +x:1 +旭日 1 +x:1 +存放点 1 +x:1 +深恶痛绝 1 +x:1 +地委 1 +x:1 +评分 1 +x:1 +虬曲挺秀 1 +x:1 +名酒 1 +x:1 +中师 1 +x:1 +鞠躬 1 +x:1 +徐官屯村 1 +x:1 +篮球界 1 +x:1 +朝着 1 +x:1 +遴选 1 +x:1 +翘角 1 +x:1 +称誉 1 +x:1 +梅树 1 +x:1 +浓烟滚滚 1 +x:1 +评判 1 +x:1 +脂肪酸 1 +x:1 +德化 1 +x:1 +竞折腰 1 +x:1 +咣当 1 +x:1 +营业室 1 +x:1 +滥编 1 +x:1 +滴溜溜转 1 +x:1 +利益者 1 +x:1 +药草 1 +x:1 +邀 58 +x:58 +钢笔套 1 +x:1 +松散型 1 +x:1 +伸张 1 +x:1 +财综 1 +x:1 +挡住 1 +x:1 +地处 1 +x:1 +屈才 1 +x:1 +蜡纸 1 +x:1 +唱响 1 +x:1 +木头人儿 1 +x:1 +振拔 1 +x:1 +印绶 1 +x:1 +地头 1 +x:1 +缺残 1 +x:1 +诤言 1 +x:1 +堡垒 1 +x:1 +老中青少 1 +x:1 +油子 1 +x:1 +螺 1 +x:1 +烟霭霞影 1 +x:1 +鄱阳湖 1 +x:1 +地契 1 +x:1 +岭澳 1 +x:1 +减收增支 1 +x:1 +奢侈品 1 +x:1 +店风 1 +x:1 +聋 13 +x:13 +注重 1 +x:1 +莫衷一是 1 +x:1 +评功 1 +x:1 +迫近 1 +x:1 +兵器史 1 +x:1 +设置 1 +x:1 +焊工 1 +x:1 +留 420 +x:420 +残采 1 +x:1 +名片簿 1 +x:1 +唱和 1 +x:1 +上岗率 1 +x:1 +中度 1 +x:1 +内营力 1 +x:1 +印纹 1 +x:1 +意境 1 +x:1 +离境 1 +x:1 +汪家寨 1 +x:1 +苯基 1 +x:1 +固定性 1 +x:1 +北部湾 1 +x:1 +体魄 1 +x:1 +生猪业 1 +x:1 +颗粒肥料 1 +x:1 +来集镇 1 +x:1 +春天 1 +x:1 +朗读声 1 +x:1 +歌唱家 1 +x:1 +抄报 1 +x:1 +病死率 1 +x:1 +自各儿 1 +x:1 +咸涩 1 +x:1 +消融 1 +x:1 +倚仗 1 +x:1 +问答 1 +x:1 +旧金山 1 +x:1 +牧奎村 1 +x:1 +老有所养 1 +x:1 +米黄色 1 +x:1 +矿泉壶 1 +x:1 +碱 27 +x:27 +春夜 1 +x:1 +豪福 1 +x:1 +离奇 1 +x:1 +胶州市 1 +x:1 +评卷 1 +x:1 +救灾办 1 +x:1 +岚山 1 +x:1 +马约 1 +x:1 +马集镇 1 +x:1 +老顽固 1 +x:1 +掘坟鞭尸 1 +x:1 +空白行 1 +x:1 +中式 1 +x:1 +波浪 1 +x:1 +工商部 1 +x:1 +波海 1 +x:1 +拾零 1 +x:1 +下放 1 +x:1 +林业局 1 +x:1 +笔耕墨耘 1 +x:1 +脱失 1 +x:1 +地壳 1 +x:1 +象话 1 +x:1 +极贫村 1 +x:1 +步履艰难 1 +x:1 +翳翳 1 +x:1 +贡酒 1 +x:1 +意外 1 +x:1 +包容力 1 +x:1 +中弹 1 +x:1 +民族情绪 1 +x:1 +中心 1 +x:1 +斜纹布 1 +x:1 +列名 1 +x:1 +下旬 1 +x:1 +时称 1 +x:1 +电源线 1 +x:1 +三角铁 1 +x:1 +人为性 1 +x:1 +安乃近 1 +x:1 +稳操胜券 1 +x:1 +桦树 1 +x:1 +镇静剂 1 +x:1 +切乔维奇 1 +x:1 +上规模 1 +x:1 +兔子 1 +x:1 +明电 1 +x:1 +划分 1 +x:1 +地堡 1 +x:1 +南方局 1 +x:1 +茵陈蒿 1 +x:1 +淡水鱼 1 +x:1 +余杭 1 +x:1 +波涛 1 +x:1 +待续 1 +x:1 +历法 1 +x:1 +烟嘴儿 1 +x:1 +衣食父母 1 +x:1 +碑碣 1 +x:1 +桂林 1 +x:1 +言多必失 1 +x:1 +智胜 1 +x:1 +横倒竖歪 1 +x:1 +桂枝 1 +x:1 +下方 1 +x:1 +感同身受 1 +x:1 +屈指 1 +x:1 +个头儿 1 +x:1 +辅导费 1 +x:1 +故物 1 +x:1 +飘飘摇摇 1 +x:1 +鬼子 1 +x:1 +贸易战 1 +x:1 +原子量 1 +x:1 +坯 5 +x:5 +峨嵋 1 +x:1 +轮机 1 +x:1 +老婆儿 1 +x:1 +癌星 1 +x:1 +领班 1 +x:1 +海地图 1 +x:1 +中层 1 +x:1 +抬高 1 +x:1 +外语片 1 +x:1 +死有余辜 1 +x:1 +贺岁 1 +x:1 +德兴 1 +x:1 +周五 1 +x:1 +肥田粉 1 +x:1 +雷暴雨 1 +x:1 +名郡 1 +x:1 +时空 1 +x:1 +海魂衫 1 +x:1 +党徒 1 +x:1 +讲演会 1 +x:1 +算账 1 +x:1 +缥缈 1 +x:1 +露露 1 +x:1 +离婚 1 +x:1 +铬铁 1 +x:1 +牟平 1 +x:1 +合凤裙 1 +x:1 +党徽 1 +x:1 +中山 1 +x:1 +地宫 1 +x:1 +相仿 1 +x:1 +纪元 1 +x:1 +下调 1 +x:1 +中将 1 +x:1 +中小 1 +x:1 +中尉 1 +x:1 +党心 1 +x:1 +译 51 +x:51 +艳阳天 1 +x:1 +竖井 1 +x:1 +冬汛 1 +x:1 +三从四德 1 +x:1 +收集量 1 +x:1 +镇政府 1 +x:1 +去向 1 +x:1 +撞击力 1 +x:1 +伺奉 1 +x:1 +彩泉 1 +x:1 +囚牢 1 +x:1 +保龄球赛 1 +x:1 +性病 1 +x:1 +露面 1 +x:1 +大轧厂 1 +x:1 +面面土 1 +x:1 +钢笔字 1 +x:1 +审查委 1 +x:1 +手掌心 1 +x:1 +) 23886 +x:23886 +挨斗者 1 +x:1 +筒子楼 1 +x:1 +补税额 1 +x:1 +理发业 1 +x:1 +创例 1 +x:1 +新陈代谢 1 +x:1 +禀帖 1 +x:1 +字眼儿 1 +x:1 +中华门 1 +x:1 +傲然 1 +x:1 +囚犯 1 +x:1 +方才 1 +x:1 +门生 1 +x:1 +降调 1 +x:1 +梁子湖 1 +x:1 +衢州站 1 +x:1 +桥头堡 1 +x:1 +波源 1 +x:1 +中峰 1 +x:1 +旧址 1 +x:1 +击掌 1 +x:1 +拉丁字母 1 +x:1 +连珠炮 1 +x:1 +旧地 1 +x:1 +煤化工 1 +x:1 +呕尽心血 1 +x:1 +划入 1 +x:1 +留春岛 1 +x:1 +风雨飘摇 1 +x:1 +渠系化 1 +x:1 +面黄肌瘦 1 +x:1 +倾巢出动 1 +x:1 +老爷儿 1 +x:1 +勘查车 1 +x:1 +神仙下凡 1 +x:1 +外向 1 +x:1 +加官进爵 1 +x:1 +椒江 1 +x:1 +印刷业 1 +x:1 +走红 1 +x:1 +地学 1 +x:1 +冬泳 1 +x:1 +中岳 1 +x:1 +孩提 1 +x:1 +德军 1 +x:1 +合作化 1 +x:1 +摇臂 1 +x:1 +同校 1 +x:1 +铝线 1 +x:1 +云山雾罩 1 +x:1 +下来 1 +x:1 +湘阴县 1 +x:1 +右舷 1 +x:1 +旧国 1 +x:1 +宋元 1 +x:1 +和田河 1 +x:1 +民脂民膏 1 +x:1 +烂糊 1 +x:1 +盗车人 1 +x:1 +良计 1 +x:1 +营养元素 1 +x:1 +发行人 1 +x:1 +木勺舞 1 +x:1 +华澳 1 +x:1 +执法不严 1 +x:1 +交租 1 +x:1 +亩 1369 +x:1369 +宿舍楼 1 +x:1 +间养 1 +x:1 +高山仰止 1 +x:1 +兴妖作怪 1 +x:1 +垛音 1 +x:1 +铅 45 +x:45 +再造 1 +x:1 +春季 1 +x:1 +缺档 1 +x:1 +黢 1 +x:1 +应酬性 1 +x:1 +认受性 1 +x:1 +滴翠峡 1 +x:1 +胸徽 1 +x:1 +挖补 1 +x:1 +击打 1 +x:1 +并蒂 1 +x:1 +吐字 1 +x:1 +下月 1 +x:1 +僭 1 +x:1 +成本费 1 +x:1 +三原县 1 +x:1 +益智楼 1 +x:1 +党建 1 +x:1 +领照 1 +x:1 +公园局 1 +x:1 +蜕 1 +x:1 +桂花姜 1 +x:1 +下期 1 +x:1 +元大都 1 +x:1 +改革者 1 +x:1 +感冒药 1 +x:1 +小吃摊 1 +x:1 +晋级 1 +x:1 +春宫 1 +x:1 +洞道 1 +x:1 +受益面 1 +x:1 +明畅 1 +x:1 +巩固村 1 +x:1 +罗锅子 1 +x:1 +有问题者 1 +x:1 +真影 1 +x:1 +港下镇 1 +x:1 +春宴 1 +x:1 +博闻强记 1 +x:1 +梅毒 1 +x:1 +中工 1 +x:1 +特勤连 1 +x:1 +扫毒战 1 +x:1 +在握 1 +x:1 +茶碗 1 +x:1 +印刷体 1 +x:1 +小兄弟 1 +x:1 +冬 160 +x:160 +违反者 1 +x:1 +永生 1 +x:1 +波澜 1 +x:1 +门球 1 +x:1 +会员国 1 +x:1 +推广部 1 +x:1 +勇敢 1 +x:1 +抢救室 1 +x:1 +汾河 1 +x:1 +离家 1 +x:1 +晋绥 1 +x:1 +俄文 1 +x:1 +马楼乡 1 +x:1 +知识面 1 +x:1 +党政军民 1 +x:1 +独女户 1 +x:1 +贸易性 1 +x:1 +伪足 1 +x:1 +定货会 1 +x:1 +公司部 1 +x:1 +核查组 1 +x:1 +优质品 1 +x:1 +东台 1 +x:1 +汉福德厂 1 +x:1 +博闻强识 1 +x:1 +苍狗 1 +x:1 +旋子 1 +x:1 +兽足类 1 +x:1 +钥匙孔 1 +x:1 +俄方 1 +x:1 +夷贝 1 +x:1 +伸展 1 +x:1 +为什么 1 +x:1 +站牌 1 +x:1 +工笔画 1 +x:1 +站牛 1 +x:1 +一大二公 1 +x:1 +门环 1 +x:1 +一窝蜂 1 +x:1 +流沙 1 +x:1 +蛋羹 1 +x:1 +百女节 1 +x:1 +轮拖 1 +x:1 +缺漏 1 +x:1 +伺弄 1 +x:1 +背信弃义 1 +x:1 +第一线 1 +x:1 +改良派 1 +x:1 +定林寺 1 +x:1 +若非 1 +x:1 +优质化 1 +x:1 +苍生 1 +x:1 +卡片盒 1 +x:1 +略微 1 +x:1 +露酒 1 +x:1 +流泉 1 +x:1 +同义词 1 +x:1 +雨过天晴 1 +x:1 +秘书处 1 +x:1 +确定 1 +x:1 +买气 1 +x:1 +盗 41 +x:41 +镖 1 +x:1 +细菌武器 1 +x:1 +倡导者 1 +x:1 +出口人 1 +x:1 +驶往 1 +x:1 +下怀 1 +x:1 +留召村 1 +x:1 +故知 1 +x:1 +流注 1 +x:1 +凹凸不平 1 +x:1 +满足感 1 +x:1 +印稿 1 +x:1 +边缘性 1 +x:1 +己 96 +x:96 +留人 1 +x:1 +软件商 1 +x:1 +铆钉枪 1 +x:1 +流泻 1 +x:1 +列出 1 +x:1 +油彩 1 +x:1 +牺牲主义 1 +x:1 +靶档 1 +x:1 +旧关 1 +x:1 +相国寺 1 +x:1 +垫支 1 +x:1 +怡然 1 +x:1 +净重 1 +x:1 +惊慌 1 +x:1 +竞销 1 +x:1 +流氓 1 +x:1 +登临意 1 +x:1 +流气 1 +x:1 +金鱼缸 1 +x:1 +党外 1 +x:1 +储备金 1 +x:1 +贪婪无厌 1 +x:1 +饲草 1 +x:1 +安居镇 1 +x:1 +蔡 375 +x:375 +下情 1 +x:1 +储备量 1 +x:1 +德城 1 +x:1 +嘘寒问暖 1 +x:1 +剪纸儿 1 +x:1 +片约 1 +x:1 +印章 1 +x:1 +医管局 1 +x:1 +鬼市 1 +x:1 +流水 1 +x:1 +发行价 1 +x:1 +嘘声 1 +x:1 +原子钟 1 +x:1 +监评会 1 +x:1 +封一 1 +x:1 +留下 1 +x:1 +碳化物 1 +x:1 +封三 1 +x:1 +惊愕 1 +x:1 +产能 1 +x:1 +创可贴 1 +x:1 +综合性 1 +x:1 +徐乡 1 +x:1 +管灯 1 +x:1 +流汗 1 +x:1 +三五成群 1 +x:1 +还是 1 +x:1 +港口法 1 +x:1 +概率论 1 +x:1 +树袋熊 1 +x:1 +列入 1 +x:1 +划块 1 +x:1 +离岗 1 +x:1 +点心店 1 +x:1 +起草人 1 +x:1 +支炉儿 1 +x:1 +一如既往 1 +x:1 +列兵 1 +x:1 +季节洄游 1 +x:1 +断钻 1 +x:1 +东周村 1 +x:1 +夜光表 1 +x:1 +出口业 1 +x:1 +性状 1 +x:1 +般的 1 +x:1 +数学迷 1 +x:1 +小气候 1 +x:1 +走神 1 +x:1 +殷鉴 1 +x:1 +经贸部 1 +x:1 +白尼罗河 1 +x:1 +糖业 1 +x:1 +主干网 1 +x:1 +问罪 1 +x:1 +楚河大街 1 +x:1 +浑金璞玉 1 +x:1 +绣花枕头 1 +x:1 +惊惶 1 +x:1 +农科院 1 +x:1 +地貌学 1 +x:1 +高技术 1 +x:1 +撒刁 1 +x:1 +糖丸 1 +x:1 +脸 223 +x:223 +加高 1 +x:1 +惊惧 1 +x:1 +局域网络 1 +x:1 +优先权 1 +x:1 +虱子 1 +x:1 +辛苦 1 +x:1 +惊悚 1 +x:1 +缸瓦 1 +x:1 +流淌 1 +x:1 +坪上村 1 +x:1 +方方 1 +x:1 +惊悉 1 +x:1 +陆上 1 +x:1 +陆丰 1 +x:1 +角斗 1 +x:1 +席次 1 +x:1 +纪录性 1 +x:1 +扶绥县 1 +x:1 +鼓 71 +x:71 +梅派 1 +x:1 +囊中羞涩 1 +x:1 +拱门 1 +x:1 +奢侈关 1 +x:1 +菊苣 1 +x:1 +诿 3 +x:3 +高感 1 +x:1 +中密 1 +x:1 +地震烈度 1 +x:1 +留住 1 +x:1 +一笔抹杀 1 +x:1 +风光带 1 +x:1 +走私 1 +x:1 +小辫儿 1 +x:1 +左家庄 1 +x:1 +液晶 1 +x:1 +德国 1 +x:1 +打瞌睡 1 +x:1 +奶油色 1 +x:1 +白龟池 1 +x:1 +琉璃寺 1 +x:1 +轮换 1 +x:1 +邮 13 +x:13 +极至 1 +x:1 +党政工 1 +x:1 +冰坛 1 +x:1 +中导 1 +x:1 +糖人 1 +x:1 +流派 1 +x:1 +钢笔尖 1 +x:1 +自留地 1 +x:1 +略带 1 +x:1 +未名湖 1 +x:1 +三严四自 1 +x:1 +象是 1 +x:1 +苛性碱 1 +x:1 +脚痛医脚 1 +x:1 +加的夫市 1 +x:1 +比 3265 +x:3265 +屈服 1 +x:1 +下水工 1 +x:1 +劳工法 1 +x:1 +门牙 1 +x:1 +中宣 1 +x:1 +中客 1 +x:1 +新手机 1 +x:1 +留传 1 +x:1 +渐变 1 +x:1 +流浪 1 +x:1 +贫困帽 1 +x:1 +走禽 1 +x:1 +举止端庄 1 +x:1 +门牌 1 +x:1 +朴实无华 1 +x:1 +再障 1 +x:1 +连接处 1 +x:1 +糖份 1 +x:1 +搜罗 1 +x:1 +渍害 1 +x:1 +烂种 1 +x:1 +该书 1 +x:1 +该乡 1 +x:1 +成熟 1 +x:1 +剪纸厂 1 +x:1 +钗 1 +x:1 +版本学家 1 +x:1 +湘北 1 +x:1 +比什凯克 1 +x:1 +玉蜀黍 1 +x:1 +会员卡 1 +x:1 +烂秧 1 +x:1 +消肿 1 +x:1 +走穴 1 +x:1 +下手 1 +x:1 +旋床 1 +x:1 +搭班子 1 +x:1 +历次 1 +x:1 +任一 1 +x:1 +骨瘦如柴 1 +x:1 +合成石油 1 +x:1 +调处会 1 +x:1 +支付款 1 +x:1 +湘华 1 +x:1 +地志 1 +x:1 +中堂 1 +x:1 +三闾大夫 1 +x:1 +先例 1 +x:1 +浒 1 +x:1 +平等性 1 +x:1 +见兔顾犬 1 +x:1 +川戏 1 +x:1 +湘南 1 +x:1 +盲动性 1 +x:1 +梅港 1 +x:1 +亚太 1 +x:1 +脱帽 1 +x:1 +班房 1 +x:1 +旧历 1 +x:1 +优待金 1 +x:1 +豪绅 1 +x:1 +农负 1 +x:1 +久仰 1 +x:1 +大堰河 1 +x:1 +认罪 1 +x:1 +骈 1 +x:1 +下拨 1 +x:1 +消耗 1 +x:1 +自作聪明 1 +x:1 +吗 720 +x:720 +类同 1 +x:1 +兑现奖 1 +x:1 +伸头 1 +x:1 +席棚 1 +x:1 +中士 1 +x:1 +心明如镜 1 +x:1 +成矿作用 1 +x:1 +蒸气浴 1 +x:1 +地价款 1 +x:1 +平流层 1 +x:1 +平行作业 1 +x:1 +膨胀系数 1 +x:1 +服刑犯 1 +x:1 +禄劝县 1 +x:1 +秘书官 1 +x:1 +保密性 1 +x:1 +瓦屋山 1 +x:1 +撕心裂肺 1 +x:1 +条 3372 +x:3372 +职工股 1 +x:1 +文化部 1 +x:1 +追风 1 +x:1 +常设性 1 +x:1 +政协会 1 +x:1 +姜堰市 1 +x:1 +地形 1 +x:1 +再见 1 +x:1 +又是 1 +x:1 +地库 1 +x:1 +门点 1 +x:1 +地底 1 +x:1 +缺氧 1 +x:1 +负债人 1 +x:1 +斜高 1 +x:1 +平安无恙 1 +x:1 +中奖 1 +x:1 +方柱 1 +x:1 +农委会 1 +x:1 +一时 1 +x:1 +提个醒 1 +x:1 +痹痛平 1 +x:1 +邱 202 +x:202 +讲解人 1 +x:1 +神农架 1 +x:1 +旋律 1 +x:1 +蛋粉 1 +x:1 +电导率 1 +x:1 +记账式 1 +x:1 +科考 1 +x:1 +抹 63 +x:63 +先代 1 +x:1 +虾子镇 1 +x:1 +北界城村 1 +x:1 +先令 1 +x:1 +战勤 1 +x:1 +医疗网 1 +x:1 +筒子河 1 +x:1 +降解 1 +x:1 +下挫 1 +x:1 +并肩 1 +x:1 +性能奖 1 +x:1 +中外 1 +x:1 +先于 1 +x:1 +佩环 1 +x:1 +达喀尔 1 +x:1 +苍白 1 +x:1 +百货商店 1 +x:1 +中大 1 +x:1 +灰头土脸 1 +x:1 +任何 1 +x:1 +角果 1 +x:1 +彩霞 1 +x:1 +阡陌 1 +x:1 +佩玉 1 +x:1 +离异 1 +x:1 +离开 1 +x:1 +领略 1 +x:1 +蛋糕 1 +x:1 +会员制 1 +x:1 +迅捷 1 +x:1 +方枕 1 +x:1 +车辚马啸 1 +x:1 +迁善改过 1 +x:1 +乳品厂 1 +x:1 +地市 1 +x:1 +波段 1 +x:1 +贫困层 1 +x:1 +善解人意 1 +x:1 +祛病 1 +x:1 +以致 1 +x:1 +波伦亚 1 +x:1 +意念 1 +x:1 +蛏田 1 +x:1 +薛村乡 1 +x:1 +卢瑟福 1 +x:1 +油层 1 +x:1 +惊扰 1 +x:1 +摩擦学 1 +x:1 +开原 1 +x:1 +离心 1 +x:1 +并联 1 +x:1 +著述 1 +x:1 +意志 1 +x:1 +辘轳 1 +x:1 +粗饲料 1 +x:1 +旧制 1 +x:1 +女神像 1 +x:1 +核弹头 1 +x:1 +方术 1 +x:1 +先世 1 +x:1 +卸去 1 +x:1 +始言 1 +x:1 +进一步 1 +x:1 +蛋类 1 +x:1 +类星体 1 +x:1 +软件园 1 +x:1 +哈尼族 1 +x:1 +血淤型 1 +x:1 +检阅台 1 +x:1 +驮戥 1 +x:1 +春心 1 +x:1 +狮 12 +x:12 +下排 1 +x:1 +春忙 1 +x:1 +各行其道 1 +x:1 +耳刮子 1 +x:1 +选管会 1 +x:1 +撤编 1 +x:1 +芪 1 +x:1 +堀 1 +x:1 +去年 1 +x:1 +川江 1 +x:1 +常青乡 1 +x:1 +围湖造田 1 +x:1 +榴花 1 +x:1 +公租户 1 +x:1 +冬春 1 +x:1 +刹住 1 +x:1 +灌输式 1 +x:1 +口琴课 1 +x:1 +箭 29 +x:29 +划定 1 +x:1 +翠绿 1 +x:1 +貌合神离 1 +x:1 +三角债 1 +x:1 +烂石 1 +x:1 +并进 1 +x:1 +著者 1 +x:1 +梳子 1 +x:1 +勇 216 +x:216 +惊涛 1 +x:1 +图尔库市 1 +x:1 +篆刻家 1 +x:1 +加鞭 1 +x:1 +片片 1 +x:1 +略去 1 +x:1 +下水 1 +x:1 +变化莫测 1 +x:1 +朽木 1 +x:1 +站务员 1 +x:1 +历数 1 +x:1 +油压 1 +x:1 +拧 27 +x:27 +垂钓园 1 +x:1 +吉碱 1 +x:1 +领空 1 +x:1 +油厂 1 +x:1 +贫困县 1 +x:1 +滚水坝 1 +x:1 +升结肠 1 +x:1 +铳 1 +x:1 +缺损 1 +x:1 +濒于 1 +x:1 +战火纷飞 1 +x:1 +十八罗汉 1 +x:1 +纪寿 1 +x:1 +缅 21 +x:21 +奥斯陆 1 +x:1 +并轨 1 +x:1 +启动日 1 +x:1 +下注 1 +x:1 +方桥 1 +x:1 +苦心孤诣 1 +x:1 +发行体 1 +x:1 +储蓄性 1 +x:1 +城台 1 +x:1 +往昔 1 +x:1 +下泻 1 +x:1 +小辫 1 +x:1 +虎背熊腰 1 +x:1 +嘟 1 +x:1 +德寇 1 +x:1 +方案 1 +x:1 +方桌 1 +x:1 +断指裂肤 1 +x:1 +门缝 1 +x:1 +装配厂 1 +x:1 +地儿 1 +x:1 +方框 1 +x:1 +专利局 1 +x:1 +礼贤下士 1 +x:1 +下法 1 +x:1 +奠基人 1 +x:1 +中国 1 +x:1 +代际人 1 +x:1 +濒临 1 +x:1 +生物武器 1 +x:1 +支付方 1 +x:1 +贫困化 1 +x:1 +第一版 1 +x:1 +油匠 1 +x:1 +方根 1 +x:1 +骨髓库 1 +x:1 +油区 1 +x:1 +方格 1 +x:1 +总会 1 +x:1 +时点 1 +x:1 +地光 1 +x:1 +纪实 1 +x:1 +划子 1 +x:1 +历时 1 +x:1 +拱顶 1 +x:1 +狂风暴雨 1 +x:1 +轮渡 1 +x:1 +狂风暴雪 1 +x:1 +娇妻 1 +x:1 +站级 1 +x:1 +领章 1 +x:1 +他用 1 +x:1 +味 109 +x:109 +开发 1 +x:1 +出租地 1 +x:1 +聘请 1 +x:1 +手抄本 1 +x:1 +植棉 1 +x:1 +下浮 1 +x:1 +野心家 1 +x:1 +不假思索 1 +x:1 +聂荣县 1 +x:1 +下海 1 +x:1 +聂村 1 +x:1 +脱光 1 +x:1 +毛俊 1 +x:1 +醛 1 +x:1 +意兴 1 +x:1 +列岛 1 +x:1 +猜 19 +x:19 +中坚 1 +x:1 +完了 1 +x:1 +超凡脱俗 1 +x:1 +没出息 1 +x:1 +陵水 1 +x:1 +完事 1 +x:1 +单口相声 1 +x:1 +江阴籍 1 +x:1 +撒布 1 +x:1 +海泡石 1 +x:1 +镜春园 1 +x:1 +无边无际 1 +x:1 +五言诗 1 +x:1 +投手 1 +x:1 +杞人之忧 1 +x:1 +衣兜 1 +x:1 +张口即来 1 +x:1 +淡水钓 1 +x:1 +院所 1 +x:1 +海勃湾区 1 +x:1 +污染量 1 +x:1 +下派 1 +x:1 +弃耕 1 +x:1 +傲立 1 +x:1 +火把节 1 +x:1 +日用瓷 1 +x:1 +春光 1 +x:1 +审查制 1 +x:1 +区际 1 +x:1 +盐井 1 +x:1 +齿髓 1 +x:1 +送人情 1 +x:1 +投标者 1 +x:1 +字里行间 1 +x:1 +旧岁 1 +x:1 +一字不差 1 +x:1 +中场 1 +x:1 +临邛村 1 +x:1 +角楼 1 +x:1 +波斯 1 +x:1 +囚禁 1 +x:1 +不拘一格 1 +x:1 +养心 1 +x:1 +势不两立 1 +x:1 +中华民族 1 +x:1 +侦查队 1 +x:1 +大桥路 1 +x:1 +波方 1 +x:1 +流感 1 +x:1 +屈死 1 +x:1 +乘人之危 1 +x:1 +平庸者 1 +x:1 +主潮 1 +x:1 +脱出 1 +x:1 +田 729 +x:729 +旧居 1 +x:1 +渣滓洞 1 +x:1 +唱工 1 +x:1 +解体 1 +x:1 +吉祥 1 +x:1 +城厢 1 +x:1 +生命攸关 1 +x:1 +自治省 1 +x:1 +拥有国 1 +x:1 +党政军 1 +x:1 +中型 1 +x:1 +开绿灯 1 +x:1 +评定 1 +x:1 +点阵 1 +x:1 +春凳 1 +x:1 +二职教 1 +x:1 +往来 1 +x:1 +绕脖子 1 +x:1 +墨旱莲 1 +x:1 +下消 1 +x:1 +报废品 1 +x:1 +评审 1 +x:1 +一元酸 1 +x:1 +去往 1 +x:1 +增产菌 1 +x:1 +罗锅儿 1 +x:1 +玉音 1 +x:1 +称体裁衣 1 +x:1 +塑料布 1 +x:1 +题量 1 +x:1 +荆棘丛 1 +x:1 +唯物主义 1 +x:1 +食杂店 1 +x:1 +有名有姓 1 +x:1 +不以为耻 1 +x:1 +历朝 1 +x:1 +拣佛烧香 1 +x:1 +灿若云霞 1 +x:1 +农研所 1 +x:1 +亲历性 1 +x:1 +蜷曲 1 +x:1 +旱涝保收 1 +x:1 +相亲 1 +x:1 +地压 1 +x:1 +桂江 1 +x:1 +游轮 1 +x:1 +胸围 1 +x:1 +沃野 1 +x:1 +细胞核 1 +x:1 +欧锦赛 1 +x:1 +审查关 1 +x:1 +反腐者 1 +x:1 +经史子集 1 +x:1 +囿于 1 +x:1 +笔耕不辍 1 +x:1 +最高处 1 +x:1 +地县 1 +x:1 +交纳 1 +x:1 +疵 1 +x:1 +孝衣 1 +x:1 +榔榆 1 +x:1 +紫花苜蓿 1 +x:1 +塌陷区 1 +x:1 +滥用 1 +x:1 +改革观 1 +x:1 +川渝 1 +x:1 +波普 1 +x:1 +暂住 1 +x:1 +闪闪地 1 +x:1 +聚头 1 +x:1 +真真实实 1 +x:1 +区长 1 +x:1 +方家见笑 1 +x:1 +离别 1 +x:1 +下游 1 +x:1 +韩国籍 1 +x:1 +停 360 +x:360 +祸水 1 +x:1 +非 793 +x:793 +地史 1 +x:1 +屠杀 1 +x:1 +孕育 1 +x:1 +中听 1 +x:1 +不卑不亢 1 +x:1 +发作 1 +x:1 +按察使 1 +x:1 +话剧团 1 +x:1 +吒 1 +x:1 +历来 1 +x:1 +龙马潭区 1 +x:1 +压价 1 +x:1 +恼 3 +x:3 +豪爽 1 +x:1 +驶入 1 +x:1 +历 33 +x:33 +老婆婆 1 +x:1 +自由自在 1 +x:1 +植 97 +x:97 +围棋王 1 +x:1 +列弗 1 +x:1 +缺憾 1 +x:1 +雅正 1 +x:1 +连接器 1 +x:1 +降落 1 +x:1 +欹曲 1 +x:1 +宣汉县 1 +x:1 +加长 1 +x:1 +油光 1 +x:1 +纪委 1 +x:1 +经不住 1 +x:1 +烦杂 1 +x:1 +委员证 1 +x:1 +下滑 1 +x:1 +耍赖 1 +x:1 +论战 1 +x:1 +平平凡凡 1 +x:1 +列强 1 +x:1 +直臂 1 +x:1 +迎来送往 1 +x:1 +西客站 1 +x:1 +省建 1 +x:1 +双向 1 +x:1 +并购 1 +x:1 +空头支票 1 +x:1 +发信 1 +x:1 +列当 1 +x:1 +声名鹊立 1 +x:1 +滚木 1 +x:1 +前车之覆 1 +x:1 +力量 1 +x:1 +郜 15 +x:15 +植树节 1 +x:1 +击毙 1 +x:1 +重奖 1 +x:1 +饭 227 +x:227 +中咨 1 +x:1 +二田村 1 +x:1 +反问句 1 +x:1 +击毁 1 +x:1 +彩电业 1 +x:1 +娇客 1 +x:1 +储蓄所 1 +x:1 +旧式 1 +x:1 +上游 1 +x:1 +夜光虫 1 +x:1 +无核试验 1 +x:1 +地力 1 +x:1 +对/日 1 +x:1 +撒尿 1 +x:1 +东外环路 1 +x:1 +区直 1 +x:1 +湘帘 1 +x:1 +腰痛穴 1 +x:1 +会厌软骨 1 +x:1 +评奖 1 +x:1 +主赛场 1 +x:1 +增殖腺 1 +x:1 +印界 1 +x:1 +冲击力 1 +x:1 +橡皮 1 +x:1 +池阁 1 +x:1 +飒飒 1 +x:1 +扑灭 1 +x:1 +象棋 1 +x:1 +发丝 1 +x:1 +地势 1 +x:1 +囚笼 1 +x:1 +赞成键 1 +x:1 +经久不息 1 +x:1 +伺候 1 +x:1 +老有所学 1 +x:1 +碑版 1 +x:1 +发上 1 +x:1 +病从口入 1 +x:1 +发乳 1 +x:1 +两工 1 +x:1 +马奶子 1 +x:1 +地勘 1 +x:1 +染化厂 1 +x:1 +何坊村 1 +x:1 +意匠 1 +x:1 +十方 1 +x:1 +娇娃 1 +x:1 +伏尔加河 1 +x:1 +慰问信 1 +x:1 +连绵不绝 1 +x:1 +春卷 1 +x:1 +附属物 1 +x:1 +钢骨架 1 +x:1 +令郎 1 +x:1 +可乘之机 1 +x:1 +春华 1 +x:1 +往日 1 +x:1 +所在国 1 +x:1 +力避 1 +x:1 +党团 1 +x:1 +影剧院 1 +x:1 +往时 1 +x:1 +地勤 1 +x:1 +波束 1 +x:1 +发乎 1 +x:1 +脱发 1 +x:1 +旧年 1 +x:1 +过磷酸钙 1 +x:1 +耙犁 1 +x:1 +轮流 1 +x:1 +方正 1 +x:1 +喉风 1 +x:1 +方步 1 +x:1 +麟角凤觜 1 +x:1 +少不得 1 +x:1 +豪猪 1 +x:1 +湛江舰 1 +x:1 +评委 1 +x:1 +逝 19 +x:19 +发亮 1 +x:1 +榆钱 1 +x:1 +消费 1 +x:1 +挑三窝四 1 +x:1 +维港 1 +x:1 +列席 1 +x:1 +凝心聚力 1 +x:1 +电影剧本 1 +x:1 +蜡疗 1 +x:1 +高等教育 1 +x:1 +疹子 1 +x:1 +地利 1 +x:1 +唐人街 1 +x:1 +娇嫩 1 +x:1 +大处着眼 1 +x:1 +论据 1 +x:1 +居 461 +x:461 +如胶似漆 1 +x:1 +离去 1 +x:1 +娇媚 1 +x:1 +赏 47 +x:47 +民主化 1 +x:1 +旋即 1 +x:1 +信用社 1 +x:1 +香河 1 +x:1 +发语词 1 +x:1 +发令 1 +x:1 +竹材 1 +x:1 +靶机 1 +x:1 +回 1040 +x:1040 +狮豹头乡 1 +x:1 +冬日 1 +x:1 +斜阳 1 +x:1 +刊登 1 +x:1 +创办者 1 +x:1 +光华村 1 +x:1 +玩儿命 1 +x:1 +旧币 1 +x:1 +期票 1 +x:1 +言行不一 1 +x:1 +有益于 1 +x:1 +曾 2845 +x:2845 +优胜者杯 1 +x:1 +双响 1 +x:1 +烤花窑 1 +x:1 +摩肩接踵 1 +x:1 +党内 1 +x:1 +晨练点 1 +x:1 +集合式 1 +x:1 +超时空 1 +x:1 +兔园 1 +x:1 +泡沫橡胶 1 +x:1 +吸存量 1 +x:1 +古巴 1 +x:1 +名士者 1 +x:1 +胸像 1 +x:1 +油城 1 +x:1 +纪录 1 +x:1 +甲烷量 1 +x:1 +某市 1 +x:1 +沙捞越 1 +x:1 +齿龈 1 +x:1 +走火 1 +x:1 +群英荟萃 1 +x:1 +方法 1 +x:1 +复印纸 1 +x:1 +患病率 1 +x:1 +语源学 1 +x:1 +釉 1 +x:1 +围棋界 1 +x:1 +油垢 1 +x:1 +汛期 1 +x:1 +波恩 1 +x:1 +算草 1 +x:1 +美姑县 1 +x:1 +红嘴鸥 1 +x:1 +空疏 1 +x:1 +专页 1 +x:1 +炒面 1 +x:1 +吸毒人 1 +x:1 +脏乎乎 1 +x:1 +增容费 1 +x:1 +春味 1 +x:1 +供水量 1 +x:1 +高山 1 +x:1 +蜡版 1 +x:1 +执业 1 +x:1 +珠圆玉润 1 +x:1 +站稳 1 +x:1 +意向 1 +x:1 +刹风整纪 1 +x:1 +站立 1 +x:1 +挂毯 1 +x:1 +内坛 1 +x:1 +重离子 1 +x:1 +纪念 1 +x:1 +风度翩翩 1 +x:1 +捡便宜 1 +x:1 +说老实话 1 +x:1 +科计 1 +x:1 +机鸣声 1 +x:1 +门第 1 +x:1 +董塘镇 1 +x:1 +斜路 1 +x:1 +特一连 1 +x:1 +贡 5 +x:5 +囚粮 1 +x:1 +任劳任怨 1 +x:1 +下棋 1 +x:1 +巧劲儿 1 +x:1 +联席会 1 +x:1 +村东 1 +x:1 +四个一 1 +x:1 +商代 1 +x:1 +办事者 1 +x:1 +科教处 1 +x:1 +村上 1 +x:1 +股份化 1 +x:1 +领结 1 +x:1 +特遣队 1 +x:1 +摇荡 1 +x:1 +光 454 +x:454 +有功者 1 +x:1 +国力式微 1 +x:1 +热呼呼 1 +x:1 +老爷式 1 +x:1 +贯前村 1 +x:1 +大安乡 1 +x:1 +商事 1 +x:1 +神工鬼斧 1 +x:1 +部党组 1 +x:1 +南街村 1 +x:1 +用作 1 +x:1 +划归 1 +x:1 +舞谱 1 +x:1 +商人 1 +x:1 +城区 1 +x:1 +层递式 1 +x:1 +纪律 1 +x:1 +吐哈 1 +x:1 +急先锋 1 +x:1 +好戏连台 1 +x:1 +保本 1 +x:1 +气概不凡 1 +x:1 +长坪镇 1 +x:1 +号召力 1 +x:1 +稍逊风骚 1 +x:1 +纪年 1 +x:1 +相处 1 +x:1 +轮毂 1 +x:1 +中华 1 +x:1 +中午 1 +x:1 +汪伪政权 1 +x:1 +燕语莺声 1 +x:1 +市民林 1 +x:1 +美满姻缘 1 +x:1 +迁怒 1 +x:1 +应酬话 1 +x:1 +贡税 1 +x:1 +勾除 1 +x:1 +商住 1 +x:1 +中卡 1 +x:1 +大学生 1 +x:1 +巴不得 1 +x:1 +力阻 1 +x:1 +溪湖 1 +x:1 +论文 1 +x:1 +门窗 1 +x:1 +中卫 1 +x:1 +撒娇 1 +x:1 +故纸 1 +x:1 +地质队 1 +x:1 +牢不可破 1 +x:1 +夷为平地 1 +x:1 +击汰 1 +x:1 +彭阳 1 +x:1 +住院部 1 +x:1 +西营镇 1 +x:1 +商会 1 +x:1 +死刑犯 1 +x:1 +商企 1 +x:1 +干熄焦 1 +x:1 +主办员 1 +x:1 +娇小 1 +x:1 +力陈 1 +x:1 +经贸额 1 +x:1 +暗娼 1 +x:1 +唱头 1 +x:1 +无标准 1 +x:1 +评弹 1 +x:1 +店长 1 +x:1 +发奋图强 1 +x:1 +寿光鸡 1 +x:1 +普九 1 +x:1 +盆腔 1 +x:1 +营业场 1 +x:1 +湖光山色 1 +x:1 +年轻有为 1 +x:1 +稻瘟病 1 +x:1 +价值千金 1 +x:1 +吃败仗 1 +x:1 +多球制 1 +x:1 +屡教不改 1 +x:1 +缸房 1 +x:1 +核查点 1 +x:1 +地名 1 +x:1 +中古 1 +x:1 +处女膜 1 +x:1 +溢 35 +x:35 +科幻片 1 +x:1 +紫 18 +x:18 +咖啡馆 1 +x:1 +尊老 1 +x:1 +称孤道寡 1 +x:1 +中号 1 +x:1 +中叶 1 +x:1 +花落花开 1 +x:1 +中右 1 +x:1 +象湖 1 +x:1 +峭丽 1 +x:1 +击沉 1 +x:1 +性激素 1 +x:1 +流放 1 +x:1 +破罐破摔 1 +x:1 +兔场 1 +x:1 +芦柑 1 +x:1 +截止期 1 +x:1 +八带鱼 1 +x:1 +时疫 1 +x:1 +乍 34 +x:34 +中压 1 +x:1 +确切 1 +x:1 +清凉剂 1 +x:1 +下榻 1 +x:1 +申购者 1 +x:1 +消法 1 +x:1 +饮弹 1 +x:1 +类 790 +x:790 +围场路 1 +x:1 +净额 1 +x:1 +流散 1 +x:1 +速腐剂 1 +x:1 +祸殃 1 +x:1 +卸妆 1 +x:1 +中厨 1 +x:1 +忍俊 1 +x:1 +摘梢 1 +x:1 +诸城市 1 +x:1 +绕组 1 +x:1 +灯罩子 1 +x:1 +唱片儿 1 +x:1 +防灾费 1 +x:1 +无纺织物 1 +x:1 +钵盘 1 +x:1 +列宁 1 +x:1 +刈 2 +x:2 +认知 1 +x:1 +长一智 1 +x:1 +北方邦 1 +x:1 +风景如画 1 +x:1 +海蓝色 1 +x:1 +廉者 1 +x:1 +大呼隆 1 +x:1 +钵盂 1 +x:1 +摩松楼 1 +x:1 +宁波市 1 +x:1 +莫须有 1 +x:1 +分割肉 1 +x:1 +体贴入微 1 +x:1 +加里 1 +x:1 +加重 1 +x:1 +青黄不接 1 +x:1 +炒锅 1 +x:1 +烘云托月 1 +x:1 +确凿 1 +x:1 +经久不散 1 +x:1 +神农溪 1 +x:1 +仙果神木 1 +x:1 +区界 1 +x:1 +翱翔 1 +x:1 +大喊大叫 1 +x:1 +珠宝 1 +x:1 +塌陷地 1 +x:1 +地域 1 +x:1 +党参 1 +x:1 +暖暖地 1 +x:1 +地埂 1 +x:1 +祸根 1 +x:1 +爱丁堡 1 +x:1 +桂树 1 +x:1 +地埋 1 +x:1 +下一场 1 +x:1 +烂熟 1 +x:1 +泡沫者 1 +x:1 +行李卷儿 1 +x:1 +盆花 1 +x:1 +茶褐色 1 +x:1 +地基 1 +x:1 +历史组 1 +x:1 +曲沃 1 +x:1 +旧宅 1 +x:1 +百万富翁 1 +x:1 +牟利 1 +x:1 +勾销 1 +x:1 +细纺 1 +x:1 +党史 1 +x:1 +沼渣 1 +x:1 +碑石 1 +x:1 +去声 1 +x:1 +走狗 1 +x:1 +龙旺村 1 +x:1 +计算机系 1 +x:1 +袖子 1 +x:1 +舞蹈 1 +x:1 +旧学 1 +x:1 +截稿 1 +x:1 +迷彩色 1 +x:1 +折子戏 1 +x:1 +林业厅 1 +x:1 +互补性 1 +x:1 +流星 1 +x:1 +郾城县 1 +x:1 +脱困 1 +x:1 +小梁乡 1 +x:1 +胸前 1 +x:1 +跨步电压 1 +x:1 +养鳗业 1 +x:1 +华尔街 1 +x:1 +降耗 1 +x:1 +毽球 1 +x:1 +德州 1 +x:1 +波折 1 +x:1 +齿科 1 +x:1 +槐荫耆宿 1 +x:1 +冬情 1 +x:1 +地块 1 +x:1 +铝型材 1 +x:1 +地坛 1 +x:1 +广开言路 1 +x:1 +淘气包 1 +x:1 +溪涧 1 +x:1 +区里 1 +x:1 +五·一七 1 +x:1 +降职 1 +x:1 +钮扣 1 +x:1 +诚信 1 +x:1 +认真 1 +x:1 +淫靡 1 +x:1 +蜡烛 1 +x:1 +石经寺 1 +x:1 +七星鱼 1 +x:1 +望而止步 1 +x:1 +设点 1 +x:1 +陇西县 1 +x:1 +梅李 1 +x:1 +积习难改 1 +x:1 +齿鲸 1 +x:1 +中免 1 +x:1 +审查员 1 +x:1 +德人联 1 +x:1 +盆菜 1 +x:1 +镀镀 1 +x:1 +党办 1 +x:1 +屠户 1 +x:1 +近世以降 1 +x:1 +小姐 1 +x:1 +站票 1 +x:1 +购书 1 +x:1 +姆尼布区 1 +x:1 +贸易法 1 +x:1 +油品 1 +x:1 +减头去尾 1 +x:1 +党务 1 +x:1 +舞迷 1 +x:1 +大奖赛 1 +x:1 +截止日 1 +x:1 +交费率 1 +x:1 +中共 1 +x:1 +购买 1 +x:1 +苑 13 +x:13 +少东家 1 +x:1 +文代会 1 +x:1 +论析 1 +x:1 +脱坯 1 +x:1 +碘仿 1 +x:1 +封官许愿 1 +x:1 +下次 1 +x:1 +下欠 1 +x:1 +复姓 1 +x:1 +意在 1 +x:1 +溪水 1 +x:1 +离场 1 +x:1 +行货 1 +x:1 +寒心 1 +x:1 +雅名 1 +x:1 +一大家子 1 +x:1 +存 255 +x:255 +土坯棚 1 +x:1 +下款 1 +x:1 +空空如也 1 +x:1 +豢 1 +x:1 +店面 1 +x:1 +文化饭 1 +x:1 +一二年期 1 +x:1 +地图 1 +x:1 +黯然神伤 1 +x:1 +塑化剂 1 +x:1 +汊涧镇 1 +x:1 +酱厂 1 +x:1 +原发性 1 +x:1 +去处 1 +x:1 +必由之路 1 +x:1 +消解 1 +x:1 +动情 1 +x:1 +岛景 1 +x:1 +共通性 1 +x:1 +大关村 1 +x:1 +嵊州市 1 +x:1 +昌黎县 1 +x:1 +孳生 1 +x:1 +党刊 1 +x:1 +兆比/秒 1 +x:1 +牟取 1 +x:1 +胸卡 1 +x:1 +文化馆 1 +x:1 +阿拉善盟 1 +x:1 +大智若愚 1 +x:1 +孤军奋战 1 +x:1 +净高 1 +x:1 +甲万那端 1 +x:1 +卢浮宫 1 +x:1 +黑云母 1 +x:1 +钥匙圈 1 +x:1 +莫名其妙 1 +x:1 +并行 1 +x:1 +老姑娘 1 +x:1 +击溃 1 +x:1 +助词 1 +x:1 +购价 1 +x:1 +溪泉 1 +x:1 +盈利性 1 +x:1 +露骨 1 +x:1 +草木皆兵 1 +x:1 +激进党 1 +x:1 +中册 1 +x:1 +驾临 1 +x:1 +轮椅 1 +x:1 +溪河 1 +x:1 +梅枝 1 +x:1 +螺线管 1 +x:1 +刊版 1 +x:1 +郸城县 1 +x:1 +电焊工 1 +x:1 +梅林 1 +x:1 +装饰橱 1 +x:1 +紧急灯 1 +x:1 +中军 1 +x:1 +董事 1 +x:1 +春城 1 +x:1 +通信法 1 +x:1 +汲汲 1 +x:1 +农工贸 1 +x:1 +光洁度 1 +x:1 +总计 1 +x:1 +勾针 1 +x:1 +白垩纪 1 +x:1 +涝池 1 +x:1 +马缨花 1 +x:1 +耀华力路 1 +x:1 +饲料块 1 +x:1 +加速 1 +x:1 +旧时 1 +x:1 +发电 1 +x:1 +岛外 1 +x:1 +油毡 1 +x:1 +内资 1 +x:1 +吐根 1 +x:1 +旋梯 1 +x:1 +抓走 1 +x:1 +浮想联翩 1 +x:1 +旧日 1 +x:1 +社团办 1 +x:1 +轮回 1 +x:1 +蜡丸 1 +x:1 +盐坨子 1 +x:1 +科伦坡 1 +x:1 +旁征博引 1 +x:1 +跃动 1 +x:1 +反毒局 1 +x:1 +暂用 1 +x:1 +卢森堡市 1 +x:1 +发生 1 +x:1 +劈风斩浪 1 +x:1 +技术课 1 +x:1 +诚然 1 +x:1 +眺 3 +x:3 +先秦 1 +x:1 +颈侧 1 +x:1 +惊喜 1 +x:1 +评戏 1 +x:1 +年久失修 1 +x:1 +恬不知耻 1 +x:1 +马连曲村 1 +x:1 +孩子王 1 +x:1 +驮轿 1 +x:1 +老虎滩 1 +x:1 +紫荆村 1 +x:1 +离校 1 +x:1 +传记性 1 +x:1 +去春 1 +x:1 +侄儿 1 +x:1 +喷射船 1 +x:1 +其端 1 +x:1 +新良庄 1 +x:1 +嘘气 1 +x:1 +中渚 1 +x:1 +图曼斯基 1 +x:1 +金堂县 1 +x:1 +流声 1 +x:1 +五掌握 1 +x:1 +内贸 1 +x:1 +监听器 1 +x:1 +贸易厅 1 +x:1 +赏梅节 1 +x:1 +戚戚者 1 +x:1 +经济法 1 +x:1 +毛皮 1 +x:1 +眼观六路 1 +x:1 +风洞 1 +x:1 +祸因 1 +x:1 +春梦 1 +x:1 +先祖 1 +x:1 +虚应 1 +x:1 +帽章 1 +x:1 +解剖学 1 +x:1 +蜡人 1 +x:1 +发疯 1 +x:1 +驾照 1 +x:1 +风烟 1 +x:1 +列支 1 +x:1 +常秘 1 +x:1 +进学街 1 +x:1 +党派 1 +x:1 +俄国 1 +x:1 +缩手缩脚 1 +x:1 +设伏 1 +x:1 +排字盘 1 +x:1 +战技术 1 +x:1 +往常 1 +x:1 +见分晓 1 +x:1 +千古兴亡 1 +x:1 +尾大不掉 1 +x:1 +苞菜 1 +x:1 +无可争议 1 +x:1 +设使 1 +x:1 +贸易区 1 +x:1 +南方派 1 +x:1 +次生矿物 1 +x:1 +出省证 1 +x:1 +波峰 1 +x:1 +聚聚 1 +x:1 +长舌妇 1 +x:1 +去暑 1 +x:1 +发痒 1 +x:1 +眼珠 1 +x:1 +印人 1 +x:1 +打井热 1 +x:1 +绝缘层 1 +x:1 +失聪者 1 +x:1 +管理观 1 +x:1 +发病 1 +x:1 +干薪 1 +x:1 +便民箱 1 +x:1 +虚度 1 +x:1 +娇憨 1 +x:1 +糖稀 1 +x:1 +往往 1 +x:1 +敌忾同仇 1 +x:1 +灵岩涧 1 +x:1 +召见 1 +x:1 +貉 1 +x:1 +使劲 1 +x:1 +战斗不止 1 +x:1 +石河子 1 +x:1 +资江轮 1 +x:1 +兔毫 1 +x:1 +黄梁美梦 1 +x:1 +方凳 1 +x:1 +社会制度 1 +x:1 +击倒 1 +x:1 +赝鼎 1 +x:1 +兔毛 1 +x:1 +陆空 1 +x:1 +历尽 1 +x:1 +迁就 1 +x:1 +发球 1 +x:1 +地梨 1 +x:1 +编导演职 1 +x:1 +迁居 1 +x:1 +屈原 1 +x:1 +一饱眼福 1 +x:1 +背搭子 1 +x:1 +胶州湾 1 +x:1 +需水量 1 +x:1 +鸟尽弓藏 1 +x:1 +红一团 1 +x:1 +入木三分 1 +x:1 +紧急令 1 +x:1 +党法 1 +x:1 +历届 1 +x:1 +划拨 1 +x:1 +少 1709 +x:1709 +嗣 2 +x:2 +耗竭 1 +x:1 +产成品 1 +x:1 +弯曲 1 +x:1 +佳味 1 +x:1 +统筹部长 1 +x:1 +敦煌市 1 +x:1 +俄城 1 +x:1 +若明若暗 1 +x:1 +管乐队 1 +x:1 +指尖 1 +x:1 +后空翻 1 +x:1 +祭 31 +x:31 +自身 1 +x:1 +慰问电 1 +x:1 +概预算 1 +x:1 +少年装 1 +x:1 +地标 1 +x:1 +数理化 1 +x:1 +惊呆 1 +x:1 +静坐 1 +x:1 +观光台 1 +x:1 +惊呼 1 +x:1 +运管所 1 +x:1 +名权位 1 +x:1 +圣诞节 1 +x:1 +水河滩 1 +x:1 +论处 1 +x:1 +地核 1 +x:1 +通例 1 +x:1 +莱城区 1 +x:1 +危亡 1 +x:1 +印信 1 +x:1 +密集型 1 +x:1 +庆功酒 1 +x:1 +踢打 1 +x:1 +娇惯 1 +x:1 +传动轴 1 +x:1 +光缆 1 +x:1 +不打自招 1 +x:1 +冬忆 1 +x:1 +非农产业 1 +x:1 +倔犟 1 +x:1 +金门岛 1 +x:1 +角儿 1 +x:1 +跃升 1 +x:1 +腾然 1 +x:1 +惊吓 1 +x:1 +乖乖 1 +x:1 +婢女 1 +x:1 +大出风头 1 +x:1 +灵巧 1 +x:1 +与其 1 +x:1 +冬忙 1 +x:1 +鄂托克旗 1 +x:1 +食物链 1 +x:1 +个案 1 +x:1 +那波里 1 +x:1 +自觉自醒 1 +x:1 +油樟 1 +x:1 +假恶丑 1 +x:1 +奠基石 1 +x:1 +中小站 1 +x:1 +巩乃斯 1 +x:1 +撒放 1 +x:1 +会诊队 1 +x:1 +意向书 1 +x:1 +跨国公司 1 +x:1 +热热身 1 +x:1 +缺头 1 +x:1 +行贿 1 +x:1 +蔚 36 +x:36 +诺福克郡 1 +x:1 +基准日 1 +x:1 +麻木 1 +x:1 +临泉县 1 +x:1 +地段 1 +x:1 +凸透镜 1 +x:1 +续辨 1 +x:1 +万金油 1 +x:1 +不可胜数 1 +x:1 +射电 1 +x:1 +射界 1 +x:1 +岛子 1 +x:1 +天女散花 1 +x:1 +周家沟 1 +x:1 +不等量 1 +x:1 +素质 1 +x:1 +身兼多职 1 +x:1 +中气 1 +x:1 +月光如水 1 +x:1 +斗争史 1 +x:1 +苯教 1 +x:1 +水圳 1 +x:1 +波幅 1 +x:1 +传世之作 1 +x:1 +装聋作哑 1 +x:1 +茫无头绪 1 +x:1 +菜籽粕 1 +x:1 +角力 1 +x:1 +脱模 1 +x:1 +偎 4 +x:4 +大堡礁 1 +x:1 +卡肖 1 +x:1 +棚顶 1 +x:1 +地毯 1 +x:1 +石经板 1 +x:1 +卡拉当格 1 +x:1 +济宁市 1 +x:1 +电汽车 1 +x:1 +独到之处 1 +x:1 +殆 1 +x:1 +双困户 1 +x:1 +西开普省 1 +x:1 +自不待言 1 +x:1 +漫天要价 1 +x:1 +隐隐约约 1 +x:1 +中监委 1 +x:1 +诺诺 1 +x:1 +咽头 1 +x:1 +迁徙 1 +x:1 +下图 1 +x:1 +唱曲 1 +x:1 +销售站 1 +x:1 +光荣席 1 +x:1 +砧 1 +x:1 +桫椤 1 +x:1 +保密员 1 +x:1 +方剂 1 +x:1 +施工者 1 +x:1 +峭然 1 +x:1 +该站 1 +x:1 +下回 1 +x:1 +换车 1 +x:1 +臂 29 +x:29 +要领 1 +x:1 +古藤蔓 1 +x:1 +目瞪口呆 1 +x:1 +阔叶树 1 +x:1 +筑 81 +x:81 +撒旦 1 +x:1 +弃旧图新 1 +x:1 +扫 87 +x:87 +天安门 1 +x:1 +言不由衷 1 +x:1 +敲锣打鼓 1 +x:1 +大好河山 1 +x:1 +大雅大俗 1 +x:1 +地步 1 +x:1 +名牌机 1 +x:1 +锅碗瓢盆 1 +x:1 +旧有 1 +x:1 +完璧 1 +x:1 +下坡 1 +x:1 +渔钩 1 +x:1 +方可 1 +x:1 +抓阄儿 1 +x:1 +湘昆 1 +x:1 +晋中 1 +x:1 +前仰后合 1 +x:1 +执照 1 +x:1 +保护层 1 +x:1 +万水千山 1 +x:1 +毛病 1 +x:1 +走低 1 +x:1 +梅子 1 +x:1 +仰珍 1 +x:1 +唤 18 +x:18 +坐席 1 +x:1 +清凉油 1 +x:1 +金泉乡 1 +x:1 +购物 1 +x:1 +复兴门站 1 +x:1 +先端 1 +x:1 +盲人瞎马 1 +x:1 +父 59 +x:59 +佳趣 1 +x:1 +经济林片 1 +x:1 +衣冠冢 1 +x:1 +心力衰竭 1 +x:1 +油棕 1 +x:1 +德性 1 +x:1 +荀 9 +x:9 +封禅 1 +x:1 +晋书 1 +x:1 +流寇 1 +x:1 +嗜书如渴 1 +x:1 +祖祖辈辈 1 +x:1 +下地 1 +x:1 +论对 1 +x:1 +恩尽义绝 1 +x:1 +激浊扬清 1 +x:1 +方向舵 1 +x:1 +下场 1 +x:1 +火地岛省 1 +x:1 +行业性 1 +x:1 +宿鸟 1 +x:1 +春歌 1 +x:1 +击剑 1 +x:1 +桐城市 1 +x:1 +历年 1 +x:1 +唱机 1 +x:1 +惭 2 +x:2 +软件所 1 +x:1 +解疑 1 +x:1 +唱本 1 +x:1 +草草收场 1 +x:1 +西柏坡乡 1 +x:1 +私领 1 +x:1 +汕头 1 +x:1 +脱毛 1 +x:1 +饲料款 1 +x:1 +余货 1 +x:1 +牛黄 1 +x:1 +旧景 1 +x:1 +晋人 1 +x:1 +中高考 1 +x:1 +油桶 1 +x:1 +终霜 1 +x:1 +趁早 1 +x:1 +油桃 1 +x:1 +专利权 1 +x:1 +复国主义 1 +x:1 +请求权 1 +x:1 +黑土地 1 +x:1 +油桐 1 +x:1 +瓜亚斯省 1 +x:1 +晋代 1 +x:1 +野鸭 1 +x:1 +包容性 1 +x:1 +野鸡 1 +x:1 +论学 1 +x:1 +剩余价值 1 +x:1 +凌 64 +x:64 +贸易值 1 +x:1 +野鸽 1 +x:1 +液压 1 +x:1 +流存 1 +x:1 +名队 1 +x:1 +油样 1 +x:1 +滞 10 +x:10 +下垂 1 +x:1 +孺子牛 1 +x:1 +海兰江 1 +x:1 +吃饭型 1 +x:1 +志怪书 1 +x:1 +公园法 1 +x:1 +跃入 1 +x:1 +来不及 1 +x:1 +陵园 1 +x:1 +阻力 1 +x:1 +迁延 1 +x:1 +宋干节 1 +x:1 +迁建 1 +x:1 +卖国贼 1 +x:1 +老掉牙 1 +x:1 +屠夫 1 +x:1 +代顿 1 +x:1 +埋骨 1 +x:1 +公安局长 1 +x:1 +留给 1 +x:1 +管理费 1 +x:1 +该类 1 +x:1 +明光透亮 1 +x:1 +春水 1 +x:1 +语无伦次 1 +x:1 +科森察省 1 +x:1 +漫话 1 +x:1 +敦煌学 1 +x:1 +衙门 1 +x:1 +红红绿绿 1 +x:1 +桂剧 1 +x:1 +合纵连横 1 +x:1 +养牛场 1 +x:1 +芯 8 +x:8 +水产品 1 +x:1 +多病在身 1 +x:1 +城运会 1 +x:1 +春气 1 +x:1 +片中 1 +x:1 +入射点 1 +x:1 +梅山 1 +x:1 +世界主义 1 +x:1 +朱鹮 1 +x:1 +重重地 1 +x:1 +正多角形 1 +x:1 +旧憾 1 +x:1 +众星捧月 1 +x:1 +承保 1 +x:1 +朱鸟 1 +x:1 +救灾柴 1 +x:1 +光照度 1 +x:1 +如诗似画 1 +x:1 +汉川市 1 +x:1 +灵草 1 +x:1 +发照 1 +x:1 +介绍会 1 +x:1 +问世 1 +x:1 +下岗者 1 +x:1 +脱水 1 +x:1 +伥鬼 1 +x:1 +特二连 1 +x:1 +轻飘 1 +x:1 +桦川 1 +x:1 +留级 1 +x:1 +深 910 +x:910 +写信 1 +x:1 +灵药 1 +x:1 +脱氧 1 +x:1 +镶 25 +x:25 +贸易型 1 +x:1 +意气 1 +x:1 +德望 1 +x:1 +轻风 1 +x:1 +瞿家湾村 1 +x:1 +地洞 1 +x:1 +与否 1 +x:1 +等号 1 +x:1 +该系 1 +x:1 +寒峭 1 +x:1 +求知欲 1 +x:1 +吐沫 1 +x:1 +缺德 1 +x:1 +绝尘而去 1 +x:1 +内角 1 +x:1 +可发展性 1 +x:1 +节肢动物 1 +x:1 +自选集 1 +x:1 +购车者 1 +x:1 +介绍信 1 +x:1 +全唐诗 1 +x:1 +嘛尼 1 +x:1 +聚落 1 +x:1 +文昌鱼 1 +x:1 +水玻璃 1 +x:1 +德育课 1 +x:1 +炸 67 +x:67 +吸毒癖 1 +x:1 +无可争辩 1 +x:1 +玩艺 1 +x:1 +保密制 1 +x:1 +涝坝 1 +x:1 +诊 8 +x:8 +古隆中 1 +x:1 +定海区 1 +x:1 +优选法 1 +x:1 +左权籍 1 +x:1 +过往客 1 +x:1 +袁头 1 +x:1 +梅岭 1 +x:1 +信号灯 1 +x:1 +片酬 1 +x:1 +春泉 1 +x:1 +腹评 1 +x:1 +哑然失笑 1 +x:1 +套印本 1 +x:1 +边裁 1 +x:1 +员司 1 +x:1 +散剂 1 +x:1 +方向 1 +x:1 +缸子 1 +x:1 +别有洞天 1 +x:1 +婉言谢绝 1 +x:1 +内行 1 +x:1 +旋涡 1 +x:1 +剧务 1 +x:1 +电焊机 1 +x:1 +依赖性 1 +x:1 +拥戴者 1 +x:1 +地沟 1 +x:1 +贸易国 1 +x:1 +下关 1 +x:1 +桂南 1 +x:1 +席子 1 +x:1 +率尔 1 +x:1 +李庄村 1 +x:1 +单兵作战 1 +x:1 +老中青 1 +x:1 +紫藤花 1 +x:1 +洪势 1 +x:1 +下元 1 +x:1 +介绍书 1 +x:1 +深棕色 1 +x:1 +一日三餐 1 +x:1 +中止 1 +x:1 +地油 1 +x:1 +台州湾畔 1 +x:1 +总裁 1 +x:1 +内衣 1 +x:1 +民运会 1 +x:1 +旧情 1 +x:1 +骤变 1 +x:1 +轮台 1 +x:1 +月环食 1 +x:1 +藏剧团 1 +x:1 +核心层 1 +x:1 +外研所 1 +x:1 +郁滞 1 +x:1 +总装 1 +x:1 +佳话 1 +x:1 +箭垛子 1 +x:1 +负隅顽抗 1 +x:1 +所剩无多 1 +x:1 +西罗马 1 +x:1 +桂北 1 +x:1 +蛋价 1 +x:1 +渎职 1 +x:1 +发火 1 +x:1 +纳税额 1 +x:1 +羊皮鼓 1 +x:1 +电焊条 1 +x:1 +叹叹气 1 +x:1 +中欧 1 +x:1 +不失为 1 +x:1 +冬季 1 +x:1 +冲击波 1 +x:1 +岛屿 1 +x:1 +大手笔 1 +x:1 +用途 1 +x:1 +地波 1 +x:1 +增支减利 1 +x:1 +夜宿 1 +x:1 +金石为开 1 +x:1 +撒手 1 +x:1 +灵芝 1 +x:1 +下凡 1 +x:1 +暂 63 +x:63 +地气 1 +x:1 +饮誉 1 +x:1 +陶马 1 +x:1 +奕阳 1 +x:1 +用电量 1 +x:1 +人丛 1 +x:1 +梅州 1 +x:1 +中毒 1 +x:1 +公事公办 1 +x:1 +联网站 1 +x:1 +轮南 1 +x:1 +祸及 1 +x:1 +申办户 1 +x:1 +药草园 1 +x:1 +留置 1 +x:1 +内裤 1 +x:1 +切实 1 +x:1 +琼琚 1 +x:1 +冬宫 1 +x:1 +访问量 1 +x:1 +糖纸 1 +x:1 +重构 1 +x:1 +陆续 1 +x:1 +发炎 1 +x:1 +谋计 1 +x:1 +油港 1 +x:1 +油渣 1 +x:1 +大烩菜 1 +x:1 +川军 1 +x:1 +郎 105 +x:105 +冬寒 1 +x:1 +轮匝 1 +x:1 +发烧 1 +x:1 +发货部 1 +x:1 +天花病 1 +x:1 +发热 1 +x:1 +评析 1 +x:1 +平柴车 1 +x:1 +换血 1 +x:1 +观光型 1 +x:1 +纣棍 1 +x:1 +矿泉水 1 +x:1 +下册 1 +x:1 +中段 1 +x:1 +复音词 1 +x:1 +发烂 1 +x:1 +单幅 1 +x:1 +毛猪 1 +x:1 +去掉 1 +x:1 +耳朵眼 1 +x:1 +介绍人 1 +x:1 +击响 1 +x:1 +乌鱼蛋 1 +x:1 +心连心 1 +x:1 +解热 1 +x:1 +毛烟 1 +x:1 +源自 1 +x:1 +回话者 1 +x:1 +春游 1 +x:1 +明线光谱 1 +x:1 +脱贫致富 1 +x:1 +进取 1 +x:1 +轻骑 1 +x:1 +惊叹 1 +x:1 +中档 1 +x:1 +陵区 1 +x:1 +串门子 1 +x:1 +地峡 1 +x:1 +有限元 1 +x:1 +川剧 1 +x:1 +洲 45 +x:45 +岛弧 1 +x:1 +惊叫 1 +x:1 +完熟 1 +x:1 +给惠国 1 +x:1 +代销点 1 +x:1 +久经 1 +x:1 +专员署 1 +x:1 +囫囵吞枣 1 +x:1 +通什 1 +x:1 +中栏 1 +x:1 +赃物 1 +x:1 +计时工资 1 +x:1 +登程 1 +x:1 +革委会 1 +x:1 +廉政卡 1 +x:1 +德政 1 +x:1 +双文明 1 +x:1 +效法 1 +x:1 +硬纸壳 1 +x:1 +巡礼 1 +x:1 +唱戏 1 +x:1 +中校 1 +x:1 +成活率 1 +x:1 +苞蕾 1 +x:1 +重武器 1 +x:1 +时下 1 +x:1 +骑龙村 1 +x:1 +淮北区 1 +x:1 +舞步 1 +x:1 +下划 1 +x:1 +下列 1 +x:1 +正气凛然 1 +x:1 +由上至下 1 +x:1 +中核 1 +x:1 +发现 1 +x:1 +豪举 1 +x:1 +时代 1 +x:1 +时令 1 +x:1 +中检 1 +x:1 +迁安 1 +x:1 +透 118 +x:118 +不咎既往 1 +x:1 +内话 1 +x:1 +隔雾看花 1 +x:1 +债台高筑 1 +x:1 +栅栏门 1 +x:1 +时价 1 +x:1 +时任 1 +x:1 +击垮 1 +x:1 +陵县 1 +x:1 +直勾勾 1 +x:1 +行政处分 1 +x:1 +澳大利亚 1 +x:1 +油流 1 +x:1 +殚思竭虑 1 +x:1 +镇上 1 +x:1 +纪录史 1 +x:1 +悲欢离合 1 +x:1 +认作 1 +x:1 +捕猎 1 +x:1 +玩耍 1 +x:1 +宣教部 1 +x:1 +亟需 1 +x:1 +电机界 1 +x:1 +燕玲 1 +x:1 +卷面 1 +x:1 +梅庄 1 +x:1 +乙亚胺 1 +x:1 +痰厥 1 +x:1 +红帽 1 +x:1 +不合格率 1 +x:1 +佛节 1 +x:1 +发行部 1 +x:1 +家禽场 1 +x:1 +时人 1 +x:1 +德方 1 +x:1 +德文 1 +x:1 +字眼 1 +x:1 +求救信 1 +x:1 +昌里 1 +x:1 +时事 1 +x:1 +蓬 7 +x:7 +通令 1 +x:1 +内设 1 +x:1 +老铁山 1 +x:1 +流年 1 +x:1 +合江县 1 +x:1 +出 7495 +x:7495 +本职工作 1 +x:1 +川南 1 +x:1 +原始 1 +x:1 +妇运 1 +x:1 +松桃县 1 +x:1 +油泥 1 +x:1 +工作母机 1 +x:1 +大堰川 1 +x:1 +下卷 1 +x:1 +织女星 1 +x:1 +翘 12 +x:12 +冬夜 1 +x:1 +茁壮 1 +x:1 +豪侠 1 +x:1 +进口 1 +x:1 +套交情 1 +x:1 +三品 1 +x:1 +方城 1 +x:1 +剥削者 1 +x:1 +下午 1 +x:1 +五十分 1 +x:1 +冬天 1 +x:1 +下南 1 +x:1 +埋首 1 +x:1 +下单 1 +x:1 +安宁区 1 +x:1 +讲演稿 1 +x:1 +播音室 1 +x:1 +花架子 1 +x:1 +缺少 1 +x:1 +俄共 1 +x:1 +散热量 1 +x:1 +鬼混 1 +x:1 +川北 1 +x:1 +春潮 1 +x:1 +卷叶蛾 1 +x:1 +本级 1 +x:1 +陵前 1 +x:1 +齐 315 +x:315 +荆笆 1 +x:1 +发物 1 +x:1 +夭亡 1 +x:1 +认亲 1 +x:1 +织布鸟 1 +x:1 +射灯 1 +x:1 +冬奥 1 +x:1 +注册税 1 +x:1 +全球通 1 +x:1 +小道 1 +x:1 +省政府 1 +x:1 +蔚成风气 1 +x:1 +芮城县 1 +x:1 +惊动 1 +x:1 +苹果树 1 +x:1 +汉学界 1 +x:1 +卸 45 +x:45 +时会 1 +x:1 +糖类 1 +x:1 +迷彩服 1 +x:1 +迅即 1 +x:1 +电吹风 1 +x:1 +野马 1 +x:1 +高高在上 1 +x:1 +油污 1 +x:1 +同土同根 1 +x:1 +流弊 1 +x:1 +嬉水 1 +x:1 +下台 1 +x:1 +不要紧 1 +x:1 +百转千回 1 +x:1 +野驴 1 +x:1 +雇车 1 +x:1 +明明灭灭 1 +x:1 +合家欢 1 +x:1 +池盐 1 +x:1 +靶子 1 +x:1 +下发 1 +x:1 +轮养 1 +x:1 +谜团 1 +x:1 +昌邑 1 +x:1 +流弹 1 +x:1 +三开门 1 +x:1 +地温 1 +x:1 +型录展 1 +x:1 +糖精 1 +x:1 +阳春市 1 +x:1 +使命 1 +x:1 +三十分 1 +x:1 +核导弹 1 +x:1 +旧房 1 +x:1 +造型各异 1 +x:1 +辈子 1 +x:1 +下厨 1 +x:1 +风云突变 1 +x:1 +中立主义 1 +x:1 +发狠 1 +x:1 +认为 1 +x:1 +俄军 1 +x:1 +下去 1 +x:1 +昌都 1 +x:1 +油水 1 +x:1 +襟 3 +x:3 +借鉴性 1 +x:1 +波密 1 +x:1 +流形 1 +x:1 +桂冠 1 +x:1 +杨柏乡 1 +x:1 +下压 1 +x:1 +方圆 1 +x:1 +臆造 1 +x:1 +发行量 1 +x:1 +发狂 1 +x:1 +召集 1 +x:1 +举重赛 1 +x:1 +绝缘子 1 +x:1 +书童 1 +x:1 +栀 3 +x:3 +辅 35 +x:35 +智利队 1 +x:1 +高钒铁 1 +x:1 +必要性 1 +x:1 +赤身裸体 1 +x:1 +下山 1 +x:1 +黑云山 1 +x:1 +踢毽 1 +x:1 +取悦 1 +x:1 +轮廓 1 +x:1 +野营地 1 +x:1 +方壶 1 +x:1 +下层 1 +x:1 +渐渐 1 +x:1 +在位 1 +x:1 +曲线图 1 +x:1 +赶集 1 +x:1 +完美 1 +x:1 +风流人物 1 +x:1 +中景 1 +x:1 +工程浩大 1 +x:1 +购票 1 +x:1 +艺徒 1 +x:1 +图谋不轨 1 +x:1 +户政处 1 +x:1 +内蕴 1 +x:1 +缺 206 +x:206 +下属 1 +x:1 +比翼双飞 1 +x:1 +侍者 1 +x:1 +站上 1 +x:1 +立法会 1 +x:1 +老工人 1 +x:1 +解约 1 +x:1 +花扦儿 1 +x:1 +改良党 1 +x:1 +党旗 1 +x:1 +往回 1 +x:1 +溜之乎也 1 +x:1 +赖以 1 +x:1 +春恋 1 +x:1 +毛纺 1 +x:1 +毛线 1 +x:1 +吸水纸 1 +x:1 +道道 1 +x:1 +意思 1 +x:1 +孤家寡人 1 +x:1 +青稞酒 1 +x:1 +灵车 1 +x:1 +非对抗 1 +x:1 +妇联 1 +x:1 +唱法 1 +x:1 +泛旅 1 +x:1 +禁而不止 1 +x:1 +概貌 1 +x:1 +确权 1 +x:1 +超时令 1 +x:1 +凸凹不平 1 +x:1 +高才生 1 +x:1 +硫化 1 +x:1 +岛内 1 +x:1 +背影 1 +x:1 +轻于鸿毛 1 +x:1 +救灾款 1 +x:1 +摸清 1 +x:1 +大专班 1 +x:1 +星 159 +x:159 +光疏媒质 1 +x:1 +原子炸弹 1 +x:1 +颠 16 +x:16 +党支 1 +x:1 +过眼云烟 1 +x:1 +山清水秀 1 +x:1 +永不 1 +x:1 +常青组 1 +x:1 +戏水区 1 +x:1 +脱 119 +x:119 +方塘 1 +x:1 +党政 1 +x:1 +欧里乡 1 +x:1 +笑眯眯 1 +x:1 +工艺师 1 +x:1 +永世 1 +x:1 +嘿 8 +x:8 +瓦头村 1 +x:1 +黄铜色 1 +x:1 +恪尽职守 1 +x:1 +通人 1 +x:1 +播音员 1 +x:1 +旧派 1 +x:1 +拒贿 1 +x:1 +川岛 1 +x:1 +缺口 1 +x:1 +光阴荏苒 1 +x:1 +清运车 1 +x:1 +中暑 1 +x:1 +展览部 1 +x:1 +桂庙 1 +x:1 +兴山县 1 +x:1 +印鉴 1 +x:1 +茫茫 1 +x:1 +门体 1 +x:1 +雷亚尔 1 +x:1 +采花节 1 +x:1 +轮带 1 +x:1 +永久 1 +x:1 +靶向 1 +x:1 +马克思 1 +x:1 +下岗 1 +x:1 +银杉 1 +x:1 +夏阳乡 1 +x:1 +永乐 1 +x:1 +鬼才 1 +x:1 +门人 1 +x:1 +站位 1 +x:1 +站住 1 +x:1 +学业 1 +x:1 +勒勒车 1 +x:1 +便民牌 1 +x:1 +总动员 1 +x:1 +过路车 1 +x:1 +习非成是 1 +x:1 +救亡图存 1 +x:1 +发簪 1 +x:1 +改弦更张 1 +x:1 +汛前 1 +x:1 +华蓥山 1 +x:1 +橡胶 1 +x:1 +春意 1 +x:1 +鹅湖 1 +x:1 +管理者 1 +x:1 +地中海港 1 +x:1 +梅兹 1 +x:1 +兵站部 1 +x:1 +工学院 1 +x:1 +梅关 1 +x:1 +骨量 1 +x:1 +俄式 1 +x:1 +骨里 1 +x:1 +中服 1 +x:1 +虚开 1 +x:1 +洋香瓜 1 +x:1 +峭立 1 +x:1 +意愿 1 +x:1 +主教练 1 +x:1 +驶抵 1 +x:1 +税务所长 1 +x:1 +甘耐 1 +x:1 +症状 1 +x:1 +小吃店 1 +x:1 +治沙站 1 +x:1 +执笔 1 +x:1 +挡水面 1 +x:1 +集流 1 +x:1 +宿舍区 1 +x:1 +毛羽 1 +x:1 +昼 5 +x:5 +原貌 1 +x:1 +完结 1 +x:1 +纳税钱 1 +x:1 +繁枝茂叶 1 +x:1 +流出 1 +x:1 +肋膜 1 +x:1 +聊以解嘲 1 +x:1 +寓示 1 +x:1 +下工 1 +x:1 +戊戌政变 1 +x:1 +管理股 1 +x:1 +老面皮 1 +x:1 +牛铃 1 +x:1 +下巴 1 +x:1 +酱肉 1 +x:1 +购车费 1 +x:1 +评比 1 +x:1 +真确 1 +x:1 +长话线 1 +x:1 +莜 1 +x:1 +攀升 1 +x:1 +往圣 1 +x:1 +冲击性 1 +x:1 +发粘 1 +x:1 +章回体 1 +x:1 +门下 1 +x:1 +行军床 1 +x:1 +日日夜夜 1 +x:1 +红一师 1 +x:1 +盐田港 1 +x:1 +禄丰 1 +x:1 +裴 44 +x:44 +优生学 1 +x:1 +乃东县 1 +x:1 +俄 1446 +x:1446 +轮式 1 +x:1 +缺勤 1 +x:1 +甘肃 1 +x:1 +观光客 1 +x:1 +图灵机 1 +x:1 +卷须 1 +x:1 +解缴 1 +x:1 +用血者 1 +x:1 +流入 1 +x:1 +忧虑 1 +x:1 +烦 16 +x:16 +昌黎 1 +x:1 +纤维管 1 +x:1 +工缴费 1 +x:1 +香烛 1 +x:1 +安立路 1 +x:1 +绳之以法 1 +x:1 +外交部长 1 +x:1 +朝代 1 +x:1 +行行 1 +x:1 +英气 1 +x:1 +脑细胞 1 +x:1 +甘草 1 +x:1 +打浆机 1 +x:1 +渔霸 1 +x:1 +虎耳草 1 +x:1 +毛糙 1 +x:1 +馍 2 +x:2 +诚笃 1 +x:1 +啄食 1 +x:1 +要道 1 +x:1 +临危授命 1 +x:1 +卵细胞 1 +x:1 +下年 1 +x:1 +屠场 1 +x:1 +丘 26 +x:26 +脱手 1 +x:1 +奖状 1 +x:1 +古田四路 1 +x:1 +危旧房屋 1 +x:1 +早班车 1 +x:1 +岛区 1 +x:1 +该片 1 +x:1 +拒还 1 +x:1 +这笔 1 +x:1 +水刷石 1 +x:1 +暖色 1 +x:1 +会客 1 +x:1 +猪圈 1 +x:1 +核心区 1 +x:1 +入射线 1 +x:1 +暂缺 1 +x:1 +稀落 1 +x:1 +溪头 1 +x:1 +评标 1 +x:1 +油茶面儿 1 +x:1 +自相残杀 1 +x:1 +政府学 1 +x:1 +轮岗 1 +x:1 +发网 1 +x:1 +内涵式 1 +x:1 +湘潭 1 +x:1 +三角裤 1 +x:1 +满汉全席 1 +x:1 +江湾镇 1 +x:1 +申请书 1 +x:1 +字正腔圆 1 +x:1 +西康路 1 +x:1 +下帖 1 +x:1 +扎堆儿 1 +x:1 +恣肆汪洋 1 +x:1 +上街口 1 +x:1 +慰问组 1 +x:1 +试题 1 +x:1 +腾空 1 +x:1 +操纵箱 1 +x:1 +创始者 1 +x:1 +本科段 1 +x:1 +榔头 1 +x:1 +复 68 +x:68 +东南角 1 +x:1 +歌唱性 1 +x:1 +鬼怪 1 +x:1 +自谦 1 +x:1 +保优汰劣 1 +x:1 +以色列国 1 +x:1 +厦 8 +x:8 +流利 1 +x:1 +保密局 1 +x:1 +莫不是 1 +x:1 +申请人 1 +x:1 +自由峰 1 +x:1 +党课日 1 +x:1 +省政协 1 +x:1 +呼市 1 +x:1 +论列 1 +x:1 +鉴 42 +x:42 +观棋室 1 +x:1 +钥匙扣 1 +x:1 +观 119 +x:119 +中侨委 1 +x:1 +必须 1 +x:1 +促销队 1 +x:1 +五大连池 1 +x:1 +使女 1 +x:1 +不畏难辛 1 +x:1 +道德村 1 +x:1 +下庵 1 +x:1 +知人 1 +x:1 +存在论 1 +x:1 +壮丽 1 +x:1 +惊异 1 +x:1 +象鼻虫 1 +x:1 +消油剂 1 +x:1 +陶锅 1 +x:1 +知事 1 +x:1 +桦南 1 +x:1 +劳作室 1 +x:1 +参与性 1 +x:1 +选课 1 +x:1 +种蛋 1 +x:1 +员工 1 +x:1 +车辙 1 +x:1 +姑妄听之 1 +x:1 +扭送 1 +x:1 +望江路 1 +x:1 +以歌当哭 1 +x:1 +不连沟村 1 +x:1 +宠爱有加 1 +x:1 +科森察 1 +x:1 +策鞭 1 +x:1 +大汗淋漓 1 +x:1 +方寸 1 +x:1 +居功至伟 1 +x:1 +白菜碑 1 +x:1 +私通 1 +x:1 +中教 1 +x:1 +撒气 1 +x:1 +卡规 1 +x:1 +中散 1 +x:1 +时来运转 1 +x:1 +罪大恶极 1 +x:1 +左右手 1 +x:1 +港口区 1 +x:1 +玉宇 1 +x:1 +昧心话 1 +x:1 +平成十年 1 +x:1 +轻音 1 +x:1 +河运 1 +x:1 +结发夫妻 1 +x:1 +圆柱 1 +x:1 +住址 1 +x:1 +临河市 1 +x:1 +抓痒式 1 +x:1 +承租商 1 +x:1 +淮北市 1 +x:1 +行贿者 1 +x:1 +怒狮 1 +x:1 +化淤通络 1 +x:1 +布条条 1 +x:1 +酱色 1 +x:1 +论及 1 +x:1 +睨 1 +x:1 +深究 1 +x:1 +轩辕 1 +x:1 +商社 1 +x:1 +技术股 1 +x:1 +胎死率 1 +x:1 +苦味酸 1 +x:1 +争风吃醋 1 +x:1 +份餐制 1 +x:1 +症瘕 1 +x:1 +稀薄 1 +x:1 +分科 1 +x:1 +保管部 1 +x:1 +高陵县 1 +x:1 +要量 1 +x:1 +应当 1 +x:1 +东城 1 +x:1 +中旗 1 +x:1 +发红 1 +x:1 +核心办 1 +x:1 +轩车 1 +x:1 +波谲云诡 1 +x:1 +毒液 1 +x:1 +中旬 1 +x:1 +甘苦 1 +x:1 +马关条约 1 +x:1 +行政区队 1 +x:1 +无恶不作 1 +x:1 +方子 1 +x:1 +官僚式 1 +x:1 +上国村 1 +x:1 +纪检 1 +x:1 +包销商 1 +x:1 +方字 1 +x:1 +泪如泉涌 1 +x:1 +棚里 1 +x:1 +海震 1 +x:1 +中文 1 +x:1 +泾阳 1 +x:1 +间隔期 1 +x:1 +窦段 1 +x:1 +滋补 1 +x:1 +撒泼 1 +x:1 +此伏彼起 1 +x:1 +车轮赛 1 +x:1 +油性 1 +x:1 +急三火四 1 +x:1 +摆谱儿 1 +x:1 +储蓄卡 1 +x:1 +大明湖 1 +x:1 +靶场 1 +x:1 +划桨 1 +x:1 +中少社 1 +x:1 +迁回 1 +x:1 +干粮袋 1 +x:1 +兵强马壮 1 +x:1 +履 5 +x:5 +啜 3 +x:3 +靶圈 1 +x:1 +赭红 1 +x:1 +预研性 1 +x:1 +篓 5 +x:5 +扭秧歌 1 +x:1 +椒商 1 +x:1 +概述 1 +x:1 +注资 1 +x:1 +祷 2 +x:2 +油管 1 +x:1 +中方 1 +x:1 +街混儿 1 +x:1 +抚育 1 +x:1 +图 1202 +x:1202 +和田县 1 +x:1 +居住权 1 +x:1 +甘蕉 1 +x:1 +栗于坪乡 1 +x:1 +最最 1 +x:1 +琐 1 +x:1 +彼此 1 +x:1 +伺机 1 +x:1 +封盘 1 +x:1 +冬初 1 +x:1 +枝 69 +x:69 +模棱两可 1 +x:1 +畅通无阻 1 +x:1 +综合大学 1 +x:1 +且不说 1 +x:1 +使得 1 +x:1 +毛竹 1 +x:1 +地方 1 +x:1 +使徒 1 +x:1 +一个半个 1 +x:1 +油柑 1 +x:1 +重感冒 1 +x:1 +云台山 1 +x:1 +冲击方 1 +x:1 +流星雨 1 +x:1 +内脏 1 +x:1 +理想主义 1 +x:1 +串门儿 1 +x:1 +梁庄村 1 +x:1 +固定岗 1 +x:1 +缸口 1 +x:1 +中戏 1 +x:1 +温润 1 +x:1 +口 490 +x:490 +死去活来 1 +x:1 +印刷点 1 +x:1 +发祥 1 +x:1 +院纪 1 +x:1 +仗 42 +x:42 +发票 1 +x:1 +天下大治 1 +x:1 +甘蔗 1 +x:1 +象征 1 +x:1 +金环蛇 1 +x:1 +迁入 1 +x:1 +斐济队 1 +x:1 +期价 1 +x:1 +且不论 1 +x:1 +计算机业 1 +x:1 +府邸 1 +x:1 +封皮 1 +x:1 +旱 52 +x:52 +家政学 1 +x:1 +村组 1 +x:1 +蹁跹 1 +x:1 +魂儿 1 +x:1 +春播 1 +x:1 +贫困村 1 +x:1 +故伎 1 +x:1 +徽饰 1 +x:1 +下士 1 +x:1 +推土机手 1 +x:1 +列植 1 +x:1 +料理 1 +x:1 +流向 1 +x:1 +朱雀 1 +x:1 +口诛笔伐 1 +x:1 +天花粉 1 +x:1 +偏口鱼 1 +x:1 +优质段 1 +x:1 +油松 1 +x:1 +方山 1 +x:1 +惊奇 1 +x:1 +找水 1 +x:1 +非常任 1 +x:1 +油杉 1 +x:1 +帽盔 1 +x:1 +糠油 1 +x:1 +执结 1 +x:1 +禀性 1 +x:1 +卡萨内 1 +x:1 +东五路 1 +x:1 +地政 1 +x:1 +期中 1 +x:1 +方言土语 1 +x:1 +龙生九子 1 +x:1 +管线路 1 +x:1 +地支 1 +x:1 +发福 1 +x:1 +集水区 1 +x:1 +先生 1 +x:1 +姜格庄村 1 +x:1 +菊 111 +x:111 +角尺 1 +x:1 +内膜 1 +x:1 +油机 1 +x:1 +执红 1 +x:1 +一鸣惊人 1 +x:1 +连接性 1 +x:1 +葛 132 +x:132 +执纪 1 +x:1 +中报 1 +x:1 +持之以恒 1 +x:1 +游戏厅 1 +x:1 +甘薯 1 +x:1 +胸怀 1 +x:1 +求职人 1 +x:1 +细砂 1 +x:1 +储蓄员 1 +x:1 +文化站 1 +x:1 +商约 1 +x:1 +迁出 1 +x:1 +任由 1 +x:1 +用项 1 +x:1 +种族主义 1 +x:1 +射程 1 +x:1 +故事 1 +x:1 +领会 1 +x:1 +尼泊尔 1 +x:1 +屈志 1 +x:1 +支农办 1 +x:1 +纷起 1 +x:1 +渐次 1 +x:1 +可庆可贺 1 +x:1 +方巾 1 +x:1 +任用 1 +x:1 +绿荫蔽日 1 +x:1 +单晶河乡 1 +x:1 +储备头寸 1 +x:1 +故交 1 +x:1 +执罚 1 +x:1 +装焊 1 +x:1 +支离破碎 1 +x:1 +席卷 1 +x:1 +搋子 1 +x:1 +故人 1 +x:1 +果心儿 1 +x:1 +固定工 1 +x:1 +忏悔 1 +x:1 +招徕声 1 +x:1 +中指 1 +x:1 +娇气 1 +x:1 +纪游 1 +x:1 +坟丘 1 +x:1 +久病 1 +x:1 +稳拿把攥 1 +x:1 +阔叶林 1 +x:1 +河边 1 +x:1 +波兰 1 +x:1 +染化料 1 +x:1 +内耗 1 +x:1 +廉正无私 1 +x:1 +辈出 1 +x:1 +行话 1 +x:1 +足球 1 +x:1 +波光 1 +x:1 +普罗比登 1 +x:1 +呐喊 1 +x:1 +安检门 1 +x:1 +轻重 1 +x:1 +傲世 1 +x:1 +楚雄州 1 +x:1 +概要 1 +x:1 +卡车 1 +x:1 +促销 1 +x:1 +陵墓 1 +x:1 +讲面子 1 +x:1 +汩汩 1 +x:1 +广交会 1 +x:1 +甘蓝 1 +x:1 +轮子 1 +x:1 +完稿 1 +x:1 +方便面 1 +x:1 +渡人 1 +x:1 +辈儿 1 +x:1 +陆相 1 +x:1 +原始社会 1 +x:1 +党性 1 +x:1 +内能 1 +x:1 +吃官司 1 +x:1 +全过程 1 +x:1 +新兴北里 1 +x:1 +遵义县 1 +x:1 +野芪 1 +x:1 +旧案 1 +x:1 +无济于事 1 +x:1 +概观 1 +x:1 +毛笔 1 +x:1 +春日 1 +x:1 +概览 1 +x:1 +橱柜 1 +x:1 +风 468 +x:468 +新民日报 1 +x:1 +久留 1 +x:1 +叔 17 +x:17 +意方 1 +x:1 +中排 1 +x:1 +地摊 1 +x:1 +祸害 1 +x:1 +春旱 1 +x:1 +力矩 1 +x:1 +雁群 1 +x:1 +发审委 1 +x:1 +又惊又喜 1 +x:1 +党恩 1 +x:1 +政党 1 +x:1 +故乡 1 +x:1 +桂宫 1 +x:1 +冬叶 1 +x:1 +意料 1 +x:1 +桂花村 1 +x:1 +鹰犬 1 +x:1 +氟橡胶 1 +x:1 +痉挛 1 +x:1 +拒请 1 +x:1 +西马家 1 +x:1 +戈 18 +x:18 +讨价 1 +x:1 +吉他 1 +x:1 +炒黄豆 1 +x:1 +鞋脸 1 +x:1 +滹沱 1 +x:1 +担惊受怕 1 +x:1 +员外 1 +x:1 +低人一等 1 +x:1 +发笑 1 +x:1 +鄂钢 1 +x:1 +禀报 1 +x:1 +刨 29 +x:29 +购置 1 +x:1 +砂石土 1 +x:1 +佳肴 1 +x:1 +逆料 1 +x:1 +吊脚状 1 +x:1 +干活儿 1 +x:1 +唁函 1 +x:1 +先知 1 +x:1 +问答题 1 +x:1 +春景 1 +x:1 +保水 1 +x:1 +拍案叫好 1 +x:1 +步谈机 1 +x:1 +动物学家 1 +x:1 +爱屋及乌 1 +x:1 +陆生 1 +x:1 +角度 1 +x:1 +心上 1 +x:1 +阻抗 1 +x:1 +翻沉 1 +x:1 +楚雄市 1 +x:1 +中性 1 +x:1 +华而不实 1 +x:1 +陶醉 1 +x:1 +方庄 1 +x:1 +大专生 1 +x:1 +油料 1 +x:1 +木木的 1 +x:1 +春晖 1 +x:1 +腹腔 1 +x:1 +霍去病泉 1 +x:1 +液化气船 1 +x:1 +鼎湖山 1 +x:1 +著作等身 1 +x:1 +雪里送炭 1 +x:1 +波动 1 +x:1 +赤条条 1 +x:1 +种花 1 +x:1 +历历 1 +x:1 +驮子 1 +x:1 +断送 1 +x:1 +华阴市 1 +x:1 +辈分 1 +x:1 +五彩斑斓 1 +x:1 +屈居 1 +x:1 +梅园 1 +x:1 +通风管 1 +x:1 +发行额 1 +x:1 +评注 1 +x:1 +嘉荫县 1 +x:1 +冬储 1 +x:1 +耗用 1 +x:1 +天纵不羁 1 +x:1 +忍饥挨饿 1 +x:1 +耗电 1 +x:1 +腹膜 1 +x:1 +集合论 1 +x:1 +粉底 1 +x:1 +滚筒机 1 +x:1 +印刷版 1 +x:1 +陵寝 1 +x:1 +万恶 1 +x:1 +文昌阁 1 +x:1 +梁王 1 +x:1 +换药 1 +x:1 +结合膜 1 +x:1 +跃居 1 +x:1 +汉学系 1 +x:1 +地权 1 +x:1 +话剧所 1 +x:1 +陆疆 1 +x:1 +旧欠 1 +x:1 +紫丁香 1 +x:1 +第三产业 1 +x:1 +加强班 1 +x:1 +历史 1 +x:1 +受害者 1 +x:1 +破镜重圆 1 +x:1 +解码 1 +x:1 +屈就 1 +x:1 +金门县 1 +x:1 +北回归线 1 +x:1 +专管员 1 +x:1 +松花湖畔 1 +x:1 +来访者 1 +x:1 +登 342 +x:342 +禀承 1 +x:1 +委 64 +x:64 +字条 1 +x:1 +并肩作战 1 +x:1 +下学 1 +x:1 +党务案 1 +x:1 +银盐 1 +x:1 +发稿 1 +x:1 +差不离 1 +x:1 +外面儿光 1 +x:1 +夜游神 1 +x:1 +唱歌 1 +x:1 +舞 109 +x:109 +流域性 1 +x:1 +屠刀 1 +x:1 +负心人 1 +x:1 +共享税 1 +x:1 +巨细胞 1 +x:1 +党报 1 +x:1 +被转载率 1 +x:1 +苞谷 1 +x:1 +奠基礼 1 +x:1 +明珠杯 1 +x:1 +下子 1 +x:1 +童车轮 1 +x:1 +德江 1 +x:1 +扼住 1 +x:1 +储蓄型 1 +x:1 +方志 1 +x:1 +坎上乡 1 +x:1 +白衣战士 1 +x:1 +中意 1 +x:1 +书社 1 +x:1 +怒目 1 +x:1 +莫斯科城 1 +x:1 +得道多助 1 +x:1 +流域 1 +x:1 +划法 1 +x:1 +教教 1 +x:1 +华而不媚 1 +x:1 +艺术片 1 +x:1 +多来咪 1 +x:1 +解禁 1 +x:1 +脱机 1 +x:1 +该省 1 +x:1 +防空壕 1 +x:1 +播音台 1 +x:1 +艺术周 1 +x:1 +缺员 1 +x:1 +料石 1 +x:1 +肯特郡 1 +x:1 +谋臣 1 +x:1 +不耐烦 1 +x:1 +港口型 1 +x:1 +望而却步 1 +x:1 +达产期 1 +x:1 +谶纬 1 +x:1 +复合量词 1 +x:1 +象山 1 +x:1 +该矿 1 +x:1 +终结符 1 +x:1 +如雷轰顶 1 +x:1 +下岗证 1 +x:1 +棋类室 1 +x:1 +自高自大 1 +x:1 +谭 227 +x:227 +结合能 1 +x:1 +续航 1 +x:1 +轮奸 1 +x:1 +事务署 1 +x:1 +来不得 1 +x:1 +草坪 1 +x:1 +百鸟朝凤 1 +x:1 +朱门 1 +x:1 +要闻 1 +x:1 +毛票 1 +x:1 +疼 39 +x:39 +概论 1 +x:1 +门外汉 1 +x:1 +谜底 1 +x:1 +代省长 1 +x:1 +永生永世 1 +x:1 +欧姆定律 1 +x:1 +云龙区 1 +x:1 +眉清目朗 1 +x:1 +固定式 1 +x:1 +草坡 1 +x:1 +德河 1 +x:1 +下家 1 +x:1 +田螺 1 +x:1 +由此可见 1 +x:1 +德治 1 +x:1 +发端 1 +x:1 +留用 1 +x:1 +唱段 1 +x:1 +方式 1 +x:1 +腹胀 1 +x:1 +讨伐 1 +x:1 +岛国 1 +x:1 +概说 1 +x:1 +神经细胞 1 +x:1 +怨鬼 1 +x:1 +论坛 1 +x:1 +下定 1 +x:1 +高增值 1 +x:1 +岛园 1 +x:1 +破路战 1 +x:1 +诚意 1 +x:1 +鞅 2 +x:2 +蠢蠢欲动 1 +x:1 +礼节性 1 +x:1 +该桥 1 +x:1 +往事 1 +x:1 +金合欢花 1 +x:1 +发放 1 +x:1 +广河县 1 +x:1 +激战 1 +x:1 +领到 1 +x:1 +档案系 1 +x:1 +该案 1 +x:1 +机动船 1 +x:1 +养老 1 +x:1 +观摩课 1 +x:1 +中外合资 1 +x:1 +旧病 1 +x:1 +朝圣 1 +x:1 +助动词 1 +x:1 +大学堂 1 +x:1 +脱硫 1 +x:1 +机 108 +x:108 +天长地久 1 +x:1 +小是小非 1 +x:1 +夏练三伏 1 +x:1 +碑头 1 +x:1 +故友 1 +x:1 +商战 1 +x:1 +野趣 1 +x:1 +该校 1 +x:1 +地租 1 +x:1 +射杀 1 +x:1 +整体 1 +x:1 +发散 1 +x:1 +油箱 1 +x:1 +杂和面儿 1 +x:1 +新奇 1 +x:1 +海边防 1 +x:1 +知名 1 +x:1 +沙朗河 1 +x:1 +骨髓瘤 1 +x:1 +商户 1 +x:1 +运土车 1 +x:1 +不无遗憾 1 +x:1 +岁月如流 1 +x:1 +野花 1 +x:1 +离心离德 1 +x:1 +年 15535 +x:15535 +地秤 1 +x:1 +工人阶级 1 +x:1 +有害物 1 +x:1 +解暑 1 +x:1 +喜不自胜 1 +x:1 +黄岛区 1 +x:1 +地积 1 +x:1 +合订本 1 +x:1 +期初 1 +x:1 +伸缩 1 +x:1 +大石镇 1 +x:1 +村户 1 +x:1 +酱香 1 +x:1 +德班 1 +x:1 +领办 1 +x:1 +曲棍球 1 +x:1 +期刊 1 +x:1 +溶点 1 +x:1 +中统 1 +x:1 +解放北路 1 +x:1 +心绪难平 1 +x:1 +执拗 1 +x:1 +肠 15 +x:15 +中继 1 +x:1 +永嘉 1 +x:1 +拜年法儿 1 +x:1 +镰 4 +x:4 +蜡床 1 +x:1 +海雕 1 +x:1 +脊梁 1 +x:1 +辛酸苦辣 1 +x:1 +着数 1 +x:1 +幕后 1 +x:1 +电子游戏 1 +x:1 +发文 1 +x:1 +别无分店 1 +x:1 +私访 1 +x:1 +私设 1 +x:1 +罗湖区 1 +x:1 +播出 1 +x:1 +地祗 1 +x:1 +积恶成习 1 +x:1 +核选择 1 +x:1 +维和费 1 +x:1 +内债 1 +x:1 +小飞虎牌 1 +x:1 +非战斗性 1 +x:1 +发旧 1 +x:1 +印床 1 +x:1 +私话 1 +x:1 +师心自用 1 +x:1 +流传千古 1 +x:1 +涵闸 1 +x:1 +冬令 1 +x:1 +事务性 1 +x:1 +帽檐 1 +x:1 +减速板 1 +x:1 +苍凉 1 +x:1 +碍事 1 +x:1 +倦态 1 +x:1 +米 1779 +x:1779 +拒销 1 +x:1 +揿 1 +x:1 +缸体 1 +x:1 +条理化 1 +x:1 +向荣里 1 +x:1 +晋州 1 +x:1 +缉私战 1 +x:1 +趁着 1 +x:1 +纪特 1 +x:1 +讹误 1 +x:1 +席位 1 +x:1 +站址 1 +x:1 +高尔基市 1 +x:1 +低寒带 1 +x:1 +走走看看 1 +x:1 +乡里 1 +x:1 +该楼 1 +x:1 +倒戈 1 +x:1 +高潮期 1 +x:1 +眉清目秀 1 +x:1 +植树日 1 +x:1 +惹火烧身 1 +x:1 +王营子 1 +x:1 +讹诈 1 +x:1 +出入证 1 +x:1 +领区 1 +x:1 +艺研所 1 +x:1 +米粉丝 1 +x:1 +吉凶 1 +x:1 +高性能 1 +x:1 +艳红 1 +x:1 +潇潇洒洒 1 +x:1 +素鸡 1 +x:1 +中缀 1 +x:1 +片子 1 +x:1 +妨害 1 +x:1 +南浔区 1 +x:1 +峭拔 1 +x:1 +地磁 1 +x:1 +地磅 1 +x:1 +中缝 1 +x:1 +同龄人 1 +x:1 +排字机 1 +x:1 +防霉剂 1 +x:1 +计算机化 1 +x:1 +建档立卡 1 +x:1 +罪案率 1 +x:1 +拒钓 1 +x:1 +昌虎 1 +x:1 +囚入 1 +x:1 +有机肥场 1 +x:1 +襄垣 1 +x:1 +上岗制 1 +x:1 +安哥拉 1 +x:1 +印张 1 +x:1 +站场 1 +x:1 +虐待 1 +x:1 +或许 1 +x:1 +脚手架 1 +x:1 +解析 1 +x:1 +瓦工活 1 +x:1 +印染布 1 +x:1 +诚恳 1 +x:1 +要诀 1 +x:1 +轻贱 1 +x:1 +地砖 1 +x:1 +赶车 1 +x:1 +仰慕 1 +x:1 +尉 304 +x:304 +熔炼炉 1 +x:1 +果庄乡 1 +x:1 +乙级 1 +x:1 +嘛呢堆 1 +x:1 +中介费 1 +x:1 +吉兆 1 +x:1 +卫星 1 +x:1 +耀武扬威 1 +x:1 +单季稻 1 +x:1 +无人过问 1 +x:1 +寓意 1 +x:1 +要说 1 +x:1 +佛门 1 +x:1 +供应船 1 +x:1 +党籍 1 +x:1 +杯盘狼藉 1 +x:1 +领取 1 +x:1 +领受 1 +x:1 +紫竹院 1 +x:1 +图鲁兹 1 +x:1 +骡马 1 +x:1 +咨询部 1 +x:1 +美若天仙 1 +x:1 +湿乎乎 1 +x:1 +彭州 1 +x:1 +天菩萨 1 +x:1 +梁沟 1 +x:1 +春种 1 +x:1 +聚酯 1 +x:1 +毽子 1 +x:1 +春秋 1 +x:1 +老爷爷 1 +x:1 +钵头 1 +x:1 +脱离 1 +x:1 +休息厅 1 +x:1 +划片 1 +x:1 +华北局 1 +x:1 +要论 1 +x:1 +倦意 1 +x:1 +四朵金花 1 +x:1 +种鸡 1 +x:1 +吉汗加 1 +x:1 +盖棺论定 1 +x:1 +一匡天下 1 +x:1 +佛陀 1 +x:1 +妒忌心 1 +x:1 +诚挚 1 +x:1 +碑学 1 +x:1 +种鸽 1 +x:1 +嘘 3 +x:3 +锚 4 +x:4 +妈湾港 1 +x:1 +筋疲力尽 1 +x:1 +篮球场 1 +x:1 +要衢 1 +x:1 +见利思义 1 +x:1 +总控室 1 +x:1 +党群 1 +x:1 +自给自足 1 +x:1 +脱空 1 +x:1 +腊尔山 1 +x:1 +针状焦 1 +x:1 +冷水滩区 1 +x:1 +党羽 1 +x:1 +旋窑 1 +x:1 +传记片 1 +x:1 +牛车 1 +x:1 +蓖麻子 1 +x:1 +通风机 1 +x:1 +种鸟 1 +x:1 +红杉树 1 +x:1 +扼制 1 +x:1 +菜籽油 1 +x:1 +射敌 1 +x:1 +站名 1 +x:1 +技术馆 1 +x:1 +肋骨 1 +x:1 +发条 1 +x:1 +商态 1 +x:1 +实用文 1 +x:1 +铲刀 1 +x:1 +止住 1 +x:1 +装卸费 1 +x:1 +耙子 1 +x:1 +驶离 1 +x:1 +香草醛 1 +x:1 +天天 1 +x:1 +Ⅲ 9 +x:9 +吐穗 1 +x:1 +辈份 1 +x:1 +鹰派 1 +x:1 +脱稿 1 +x:1 +苍南 1 +x:1 +没劲 1 +x:1 +认定 1 +x:1 +非本土 1 +x:1 +饲料站 1 +x:1 +象溪乡 1 +x:1 +秋夜 1 +x:1 +浠水县 1 +x:1 +事务所 1 +x:1 +售楼价 1 +x:1 +冬菇 1 +x:1 +唱盘 1 +x:1 +虽败犹荣 1 +x:1 +开发署 1 +x:1 +常委会 1 +x:1 +制造地 1 +x:1 +商情 1 +x:1 +走廊 1 +x:1 +庞各庄镇 1 +x:1 +学历者 1 +x:1 +种麻 1 +x:1 +刹时 1 +x:1 +飞流直下 1 +x:1 +俄罗斯队 1 +x:1 +永吉 1 +x:1 +潭柘寺 1 +x:1 +灯草 1 +x:1 +神气活现 1 +x:1 +搜寻 1 +x:1 +洛阳纸贵 1 +x:1 +认字 1 +x:1 +苍原 1 +x:1 +本科率 1 +x:1 +莽草 1 +x:1 +吉剧 1 +x:1 +排排坐 1 +x:1 +逡巡 1 +x:1 +苍古 1 +x:1 +外资委 1 +x:1 +托词 1 +x:1 +战旗展 1 +x:1 +麝牛 1 +x:1 +别连科 1 +x:1 +本科班 1 +x:1 +笃笃定定 1 +x:1 +砚池街 1 +x:1 +溆浦县 1 +x:1 +对局室 1 +x:1 +超导电性 1 +x:1 +留校 1 +x:1 +组团社 1 +x:1 +投之以桃 1 +x:1 +奥肯淖尔 1 +x:1 +吉利 1 +x:1 +保险业界 1 +x:1 +冶金部 1 +x:1 +申请国 1 +x:1 +车胎 1 +x:1 +催化剂 1 +x:1 +卡通 1 +x:1 +易如反掌 1 +x:1 +捕杀 1 +x:1 +拘束 1 +x:1 +专业部 1 +x:1 +朝向 1 +x:1 +甄 6 +x:6 +租赁金 1 +x:1 +逻辑思维 1 +x:1 +佳肴珍馐 1 +x:1 +果味香型 1 +x:1 +哭丧着脸 1 +x:1 +地窟 1 +x:1 +赶路 1 +x:1 +该死 1 +x:1 +暂星 1 +x:1 +豪客 1 +x:1 +国民党员 1 +x:1 +坝体 1 +x:1 +春笋 1 +x:1 +提款权 1 +x:1 +阴谋家 1 +x:1 +佛面 1 +x:1 +兔种 1 +x:1 +陆桥 1 +x:1 +抚顺 1 +x:1 +传奇式 1 +x:1 +党纲 1 +x:1 +发明 1 +x:1 +党组 1 +x:1 +毛料 1 +x:1 +蛋壳 1 +x:1 +危局 1 +x:1 +走开 1 +x:1 +该款 1 +x:1 +历久 1 +x:1 +领先 1 +x:1 +北太平庄 1 +x:1 +秉性难移 1 +x:1 +哈桑区 1 +x:1 +信以为真 1 +x:1 +发晕 1 +x:1 +赶超 1 +x:1 +红旗区 1 +x:1 +领养 1 +x:1 +热 329 +x:329 +娱乐区 1 +x:1 +豪富 1 +x:1 +历书 1 +x:1 +工龄 1 +x:1 +执意 1 +x:1 +购房 1 +x:1 +促请 1 +x:1 +营救者 1 +x:1 +赶趟 1 +x:1 +刁 25 +x:25 +协办员 1 +x:1 +司局长 1 +x:1 +双声 1 +x:1 +入侵者 1 +x:1 +累西腓市 1 +x:1 +陆棚 1 +x:1 +领军 1 +x:1 +春管 1 +x:1 +秘书组 1 +x:1 +赶走 1 +x:1 +俏丽 1 +x:1 +赶赴 1 +x:1 +直到 1 +x:1 +赶赶 1 +x:1 +超纯水 1 +x:1 +一反常态 1 +x:1 +由来已久 1 +x:1 +粗制品 1 +x:1 +地税 1 +x:1 +下水管 1 +x:1 +鹭岛 1 +x:1 +刊布 1 +x:1 +羽绒服 1 +x:1 +韩食 1 +x:1 +越棉寮 1 +x:1 +苦熬 1 +x:1 +前后排 1 +x:1 +熬 53 +x:53 +医院法 1 +x:1 +进军 1 +x:1 +用人不疑 1 +x:1 +解救 1 +x:1 +斯人 1 +x:1 +扶危救难 1 +x:1 +有两下子 1 +x:1 +轻轻 1 +x:1 +雾水 1 +x:1 +性命 1 +x:1 +轻轿 1 +x:1 +吉化 1 +x:1 +陆梁 1 +x:1 +腾挪 1 +x:1 +兴安路街 1 +x:1 +解放 1 +x:1 +非营利 1 +x:1 +该段 1 +x:1 +段位差 1 +x:1 +绞 7 +x:7 +军乐团 1 +x:1 +腹鳍 1 +x:1 +地穴 1 +x:1 +鬼神 1 +x:1 +鬼祟 1 +x:1 +历任 1 +x:1 +秘书级 1 +x:1 +发掘地 1 +x:1 +历代 1 +x:1 +公证费 1 +x:1 +慷 5 +x:5 +钨 4 +x:4 +小叶杨 1 +x:1 +鄂西 1 +x:1 +时宜 1 +x:1 +绝缘体 1 +x:1 +饲料粮 1 +x:1 +小到中雨 1 +x:1 +站前 1 +x:1 +理解力 1 +x:1 +设宴 1 +x:1 +党禁 1 +x:1 +发愿 1 +x:1 +血管瘤 1 +x:1 +发愣 1 +x:1 +叉脚 1 +x:1 +发愤 1 +x:1 +谍报员 1 +x:1 +故垒 1 +x:1 +时局 1 +x:1 +设定 1 +x:1 +本科生 1 +x:1 +天姿国色 1 +x:1 +重如泰山 1 +x:1 +时届 1 +x:1 +脱籽 1 +x:1 +怒涛 1 +x:1 +发愁 1 +x:1 +针线包 1 +x:1 +中长期 1 +x:1 +内饰 1 +x:1 +门厅 1 +x:1 +故城 1 +x:1 +玉山 1 +x:1 +问市 1 +x:1 +门号 1 +x:1 +中程 1 +x:1 +依从 1 +x:1 +门口 1 +x:1 +种质型 1 +x:1 +茂名市 1 +x:1 +缺位 1 +x:1 +坟场 1 +x:1 +幕僚 1 +x:1 +扭转 1 +x:1 +时时刻刻 1 +x:1 +安放 1 +x:1 +诗词选 1 +x:1 +坟地 1 +x:1 +皮岛 1 +x:1 +轻装 1 +x:1 +平壤城 1 +x:1 +发慌 1 +x:1 +地覆天翻 1 +x:1 +访问者 1 +x:1 +门区 1 +x:1 +牛角 1 +x:1 +春粮 1 +x:1 +门匾 1 +x:1 +发憷 1 +x:1 +荆棘 1 +x:1 +雕刻件 1 +x:1 +中立 1 +x:1 +五间坊 1 +x:1 +故土 1 +x:1 +俯瞰 1 +x:1 +省略句 1 +x:1 +素养 1 +x:1 +秘书科 1 +x:1 +六亲无靠 1 +x:1 +追随者 1 +x:1 +妞 3 +x:3 +默坐 1 +x:1 +危害 1 +x:1 +娇痴 1 +x:1 +屋宇 1 +x:1 +非卖品 1 +x:1 +刊头 1 +x:1 +施工队 1 +x:1 +立法史 1 +x:1 +旋风 1 +x:1 +素菜馆 1 +x:1 +该法 1 +x:1 +油罐 1 +x:1 +刊大 1 +x:1 +故地 1 +x:1 +封湾 1 +x:1 +蛋形 1 +x:1 +点心纸 1 +x:1 +发懵 1 +x:1 +祉 1 +x:1 +两专一区 1 +x:1 +故址 1 +x:1 +门卫 1 +x:1 +防晒霜 1 +x:1 +情哥哥 1 +x:1 +檀香扇 1 +x:1 +新津县 1 +x:1 +党票 1 +x:1 +磋商 1 +x:1 +布谷鸟 1 +x:1 +站务 1 +x:1 +饱和色 1 +x:1 +打吊针 1 +x:1 +装载机 1 +x:1 +勒紧 1 +x:1 +演唱会 1 +x:1 +血脉相通 1 +x:1 +余韵缭绕 1 +x:1 +点燃 1 +x:1 +印子 1 +x:1 +确立 1 +x:1 +发怵 1 +x:1 +总领事馆 1 +x:1 +绕嘴 1 +x:1 +再而三 1 +x:1 +共享性 1 +x:1 +领土 1 +x:1 +纸币 1 +x:1 +辫子 1 +x:1 +发急 1 +x:1 +片式 1 +x:1 +敲门砖 1 +x:1 +埋设 1 +x:1 +浏河镇 1 +x:1 +领地 1 +x:1 +泰铢 1 +x:1 +发怒 1 +x:1 +谦 75 +x:75 +站卡 1 +x:1 +不为所动 1 +x:1 +南腔北调 1 +x:1 +代收 1 +x:1 +着想 1 +x:1 +吐沙拉乡 1 +x:1 +内项 1 +x:1 +划不来 1 +x:1 +差强人意 1 +x:1 +大法院 1 +x:1 +护身法 1 +x:1 +果能如此 1 +x:1 +正史 1 +x:1 +射手 1 +x:1 +中医系 1 +x:1 +商朝 1 +x:1 +跑冒滴漏 1 +x:1 +书画展 1 +x:1 +自掘坟墓 1 +x:1 +离索 1 +x:1 +有性生殖 1 +x:1 +主厨 1 +x:1 +政调会长 1 +x:1 +耳软心活 1 +x:1 +商服 1 +x:1 +故园 1 +x:1 +皮茄克 1 +x:1 +缺乏 1 +x:1 +负债累累 1 +x:1 +先河 1 +x:1 +棚车 1 +x:1 +贫困线 1 +x:1 +故国 1 +x:1 +呈奉 1 +x:1 +见猎心喜 1 +x:1 +成武县 1 +x:1 +凶多吉少 1 +x:1 +溃决 1 +x:1 +有意者 1 +x:1 +艺 48 +x:48 +辛烷值 1 +x:1 +表里山河 1 +x:1 +用者 1 +x:1 +红帽子 1 +x:1 +胶鞋 1 +x:1 +正义路 1 +x:1 +时差 1 +x:1 +正襟危坐 1 +x:1 +心如刀割 1 +x:1 +陆军省 1 +x:1 +佛释 1 +x:1 +日环食 1 +x:1 +钵池乡 1 +x:1 +怒气 1 +x:1 +夏格庄镇 1 +x:1 +收敛式 1 +x:1 +站口 1 +x:1 +溃入 1 +x:1 +帕米尔 1 +x:1 +完成 1 +x:1 +站台 1 +x:1 +松散状 1 +x:1 +前后文 1 +x:1 +陆源 1 +x:1 +四小龙 1 +x:1 +天鹅洲 1 +x:1 +旖旎 1 +x:1 +领域 1 +x:1 +自由化 1 +x:1 +小崽子 1 +x:1 +成立 1 +x:1 +襄北 1 +x:1 +名片夹 1 +x:1 +偷奸耍滑 1 +x:1 +村村 1 +x:1 +品德课 1 +x:1 +下星期 1 +x:1 +着急 1 +x:1 +怒江 1 +x:1 +导护 1 +x:1 +吊脚楼 1 +x:1 +发情 1 +x:1 +专业队 1 +x:1 +门前 1 +x:1 +追悼会 1 +x:1 +从免 1 +x:1 +闭门不出 1 +x:1 +吉四 1 +x:1 +愤恨 1 +x:1 +供养人 1 +x:1 +论交 1 +x:1 +小学部 1 +x:1 +腕足 1 +x:1 +链轨 1 +x:1 +发挥 1 +x:1 +更新换代 1 +x:1 +唱片 1 +x:1 +纪略 1 +x:1 +旋纽 1 +x:1 +流亡 1 +x:1 +琼林 1 +x:1 +私财 1 +x:1 +封泥 1 +x:1 +论争 1 +x:1 +流产 1 +x:1 +陆海 1 +x:1 +徽菜 1 +x:1 +奠基性 1 +x:1 +褪 12 +x:12 +徽菇 1 +x:1 +涨风 1 +x:1 +屋外 1 +x:1 +兴旺庄村 1 +x:1 +诚朴 1 +x:1 +解惑 1 +x:1 +发行者 1 +x:1 +敷料 1 +x:1 +该港 1 +x:1 +驻马店 1 +x:1 +糖浆 1 +x:1 +莱索托 1 +x:1 +聚集 1 +x:1 +震动力 1 +x:1 +地心说 1 +x:1 +印堂 1 +x:1 +卡钳 1 +x:1 +直贡呢 1 +x:1 +瓢泼大雨 1 +x:1 +保管费 1 +x:1 +快照 1 +x:1 +抱拳礼 1 +x:1 +划痕 1 +x:1 +痛不欲生 1 +x:1 +精品展 1 +x:1 +城建 1 +x:1 +素餐 1 +x:1 +操纵杆 1 +x:1 +孙岗乡 1 +x:1 +失常 1 +x:1 +足联 1 +x:1 +认得 1 +x:1 +食品部 1 +x:1 +愤怒 1 +x:1 +惊讶 1 +x:1 +购机 1 +x:1 +吐纳 1 +x:1 +强行性 1 +x:1 +解恨 1 +x:1 +门儿 1 +x:1 +徐水 1 +x:1 +鲁布革 1 +x:1 +地缘 1 +x:1 +无燃煤区 1 +x:1 +地缆 1 +x:1 +撤并 1 +x:1 +船坚炮利 1 +x:1 +燃耗 1 +x:1 +马达声 1 +x:1 +山丹丹花 1 +x:1 +抢救组 1 +x:1 +发排 1 +x:1 +碑志 1 +x:1 +黑液碱 1 +x:1 +佩剑 1 +x:1 +发掘 1 +x:1 +发牢骚 1 +x:1 +平声 1 +x:1 +天鹅湖 1 +x:1 +迹象 1 +x:1 +一针一线 1 +x:1 +论丛 1 +x:1 +茹 6 +x:6 +流丽 1 +x:1 +设备 1 +x:1 +睁 34 +x:34 +驾机 1 +x:1 +杭城 1 +x:1 +讹谬 1 +x:1 +骨髓炎 1 +x:1 +吐绿 1 +x:1 +代称 1 +x:1 +任满 1 +x:1 +爆裂性 1 +x:1 +春绸 1 +x:1 +衡山路 1 +x:1 +滋长 1 +x:1 +复印员 1 +x:1 +流乞 1 +x:1 +销售部 1 +x:1 +种粮区 1 +x:1 +捕捞 1 +x:1 +西双版纳 1 +x:1 +素馅 1 +x:1 +累加器 1 +x:1 +铬 7 +x:7 +时序 1 +x:1 +吸水性 1 +x:1 +捕捉 1 +x:1 +徐汇 1 +x:1 +横须贺 1 +x:1 +划界 1 +x:1 +佩刀 1 +x:1 +党政纪 1 +x:1 +留水 1 +x:1 +下探 1 +x:1 +富裕村 1 +x:1 +愤慨 1 +x:1 +灵通 1 +x:1 +用色 1 +x:1 +民俗学 1 +x:1 +荸荠 1 +x:1 +横眉怒目 1 +x:1 +神枪手 1 +x:1 +泽及千秋 1 +x:1 +岛上 1 +x:1 +商数 1 +x:1 +胡搅蛮缠 1 +x:1 +樟家乡 1 +x:1 +南联北开 1 +x:1 +闪速炉 1 +x:1 +地线 1 +x:1 +可见光 1 +x:1 +地级 1 +x:1 +红花山 1 +x:1 +核实 1 +x:1 +交货期 1 +x:1 +耗油 1 +x:1 +执收 1 +x:1 +基准点 1 +x:1 +压倒性 1 +x:1 +穿衣镜 1 +x:1 +执政 1 +x:1 +愤愤 1 +x:1 +胴体 1 +x:1 +促进 1 +x:1 +外资局 1 +x:1 +一介书生 1 +x:1 +流俗 1 +x:1 +无米之炊 1 +x:1 +内参 1 +x:1 +申请单 1 +x:1 +发扬 1 +x:1 +脱缰 1 +x:1 +萨伊德 1 +x:1 +雅司病 1 +x:1 +贴心人 1 +x:1 +村旗 1 +x:1 +碑帖 1 +x:1 +饶有兴味 1 +x:1 +夫子庙 1 +x:1 +时弊 1 +x:1 +惟命是从 1 +x:1 +党章 1 +x:1 +时式 1 +x:1 +瞬即 1 +x:1 +因陋就简 1 +x:1 +有求必应 1 +x:1 +泽 14 +x:14 +勃长期 1 +x:1 +粗言秽语 1 +x:1 +豪强 1 +x:1 +大人物 1 +x:1 +着手 1 +x:1 +中秋 1 +x:1 +丑 33 +x:33 +危境 1 +x:1 +发报 1 +x:1 +商旅 1 +x:1 +寸白虫 1 +x:1 +封浜 1 +x:1 +旧物 1 +x:1 +严家岗 1 +x:1 +流传 1 +x:1 +挣 143 +x:143 +发抖 1 +x:1 +子规划 1 +x:1 +灵邱 1 +x:1 +局地 1 +x:1 +框图 1 +x:1 +线性规划 1 +x:1 +彭家 1 +x:1 +高溪村 1 +x:1 +碑廊 1 +x:1 +繁荣期 1 +x:1 +甜甜 1 +x:1 +开价 1 +x:1 +榛子 1 +x:1 +留洋 1 +x:1 +烟波浩淼 1 +x:1 +拖延 1 +x:1 +销售量 1 +x:1 +腾云驾雾 1 +x:1 +仰望 1 +x:1 +马萨西县 1 +x:1 +走私贩私 1 +x:1 +壶中 1 +x:1 +吐翠 1 +x:1 +碑座 1 +x:1 +能源部 1 +x:1 +陆河 1 +x:1 +上机 1 +x:1 +踢球 1 +x:1 +罗斯滕 1 +x:1 +有序化 1 +x:1 +品头论足 1 +x:1 +一九九八 1 +x:1 +赡养费 1 +x:1 +党政群 1 +x:1 +捕手 1 +x:1 +一九九六 1 +x:1 +回龙山畔 1 +x:1 +科教片 1 +x:1 +擎天柱 1 +x:1 +歌行 1 +x:1 +砀 1 +x:1 +闹市区 1 +x:1 +大姨子 1 +x:1 +超人眼 1 +x:1 +故宅 1 +x:1 +危陋平房 1 +x:1 +苍天 1 +x:1 +花边饺 1 +x:1 +不速之客 1 +x:1 +内镜 1 +x:1 +双增长 1 +x:1 +洗脸池 1 +x:1 +故官 1 +x:1 +法官 1 +x:1 +鏖战 1 +x:1 +屋场 1 +x:1 +尧治河 1 +x:1 +祸乱 1 +x:1 +茯苓 1 +x:1 +西北欧 1 +x:1 +步行者队 1 +x:1 +过渡房 1 +x:1 +划算 1 +x:1 +万景台区 1 +x:1 +故宫 1 +x:1 +门徒 1 +x:1 +片刻 1 +x:1 +高比 1 +x:1 +刘庄村 1 +x:1 +环球网 1 +x:1 +三乙醇胺 1 +x:1 +返还金 1 +x:1 +抛荒 1 +x:1 +用费 1 +x:1 +四通桥 1 +x:1 +成功率 1 +x:1 +腹面 1 +x:1 +内销 1 +x:1 +对不对头 1 +x:1 +营业线 1 +x:1 +片剂 1 +x:1 +没头没尾 1 +x:1 +贫困率 1 +x:1 +桂东 1 +x:1 +极贫乡 1 +x:1 +红外技术 1 +x:1 +时值 1 +x:1 +春灌 1 +x:1 +荷枪跃马 1 +x:1 +撒网 1 +x:1 +正义者 1 +x:1 +手艺人 1 +x:1 +狱中 1 +x:1 +救心丹 1 +x:1 +救心丸 1 +x:1 +上会 1 +x:1 +弃瑕录用 1 +x:1 +闸蟹 1 +x:1 +时候 1 +x:1 +料想 1 +x:1 +呀呀 1 +x:1 +妇道 1 +x:1 +士多店 1 +x:1 +庆云 1 +x:1 +磋商会 1 +x:1 +搀和 1 +x:1 +设在 1 +x:1 +凛冽 1 +x:1 +锡永 1 +x:1 +发涨 1 +x:1 +歧化酶 1 +x:1 +门诊量 1 +x:1 +嫌弃 1 +x:1 +阳雀 1 +x:1 +锑矿石 1 +x:1 +负债感 1 +x:1 +立传 1 +x:1 +中直 1 +x:1 +扭获 1 +x:1 +色 107 +x:107 +吉岗村 1 +x:1 +纷飞 1 +x:1 +疑神疑鬼 1 +x:1 +可见度 1 +x:1 +军民品 1 +x:1 +野蔬 1 +x:1 +同行业 1 +x:1 +浅水区 1 +x:1 +哈 221 +x:221 +哮喘 1 +x:1 +助兴 1 +x:1 +应聘卡 1 +x:1 +审查率 1 +x:1 +耗损 1 +x:1 +留成 1 +x:1 +闹市口 1 +x:1 +永年 1 +x:1 +解渴 1 +x:1 +祸事 1 +x:1 +个人主义 1 +x:1 +外资司 1 +x:1 +受人牵制 1 +x:1 +抵赖 1 +x:1 +毛渠 1 +x:1 +任情 1 +x:1 +崇敬感 1 +x:1 +影调剧 1 +x:1 +彬县 1 +x:1 +联影业 1 +x:1 +谋面 1 +x:1 +朗海村 1 +x:1 +发水 1 +x:1 +地炕 1 +x:1 +钉 31 +x:31 +托老 1 +x:1 +踩踩 1 +x:1 +冤枉路 1 +x:1 +撤出 1 +x:1 +换钱 1 +x:1 +促膝 1 +x:1 +门庭 1 +x:1 +聚首 1 +x:1 +地炉 1 +x:1 +永德 1 +x:1 +天师 1 +x:1 +时光 1 +x:1 +地点 1 +x:1 +门店 1 +x:1 +食物谱 1 +x:1 +相形之下 1 +x:1 +胸痛 1 +x:1 +多瑙河 1 +x:1 +轻薄 1 +x:1 +任意 1 +x:1 +糖房 1 +x:1 +领子 1 +x:1 +背心 1 +x:1 +种蝎场 1 +x:1 +鲜亮亮 1 +x:1 +基准线 1 +x:1 +完满 1 +x:1 +陆战 1 +x:1 +签证费 1 +x:1 +房产证 1 +x:1 +精炼铜 1 +x:1 +中看 1 +x:1 +精雅细巧 1 +x:1 +日用品 1 +x:1 +宿营 1 +x:1 +伸直 1 +x:1 +灵鹿 1 +x:1 +咎由自取 1 +x:1 +汗流浃背 1 +x:1 +发汗 1 +x:1 +事随时变 1 +x:1 +门廊 1 +x:1 +兰 111 +x:111 +撤军 1 +x:1 +纪程 1 +x:1 +豆腐脑 1 +x:1 +珍藏品 1 +x:1 +核查员 1 +x:1 +含绒率 1 +x:1 +香附子 1 +x:1 +地热 1 +x:1 +师范大学 1 +x:1 +问及 1 +x:1 +约旦 1 +x:1 +讨好 1 +x:1 +吉 214 +x:214 +有为 1 +x:1 +刊名 1 +x:1 +抒 11 +x:11 +轮作 1 +x:1 +贫困片 1 +x:1 +野葱 1 +x:1 +撤兵 1 +x:1 +聚餐 1 +x:1 +决一胜负 1 +x:1 +门帘 1 +x:1 +等差 1 +x:1 +铮铮 1 +x:1 +素雅 1 +x:1 +中短 1 +x:1 +人机会话 1 +x:1 +问句 1 +x:1 +愤激 1 +x:1 +准军事 1 +x:1 +野葛 1 +x:1 +阵 51 +x:51 +短笛 1 +x:1 +中石 1 +x:1 +门市 1 +x:1 +校经楼 1 +x:1 +问号 1 +x:1 +针刺 1 +x:1 +天干 1 +x:1 +立法委员 1 +x:1 +记大过 1 +x:1 +豪兴 1 +x:1 +野营 1 +x:1 +有何不可 1 +x:1 +发泡 1 +x:1 +上来 1 +x:1 +驾校 1 +x:1 +沿循 1 +x:1 +话剧界 1 +x:1 +危困 1 +x:1 +朝廷 1 +x:1 +惦 4 +x:4 +领导 1 +x:1 +风光片 1 +x:1 +医教研 1 +x:1 +柳河 1 +x:1 +牛蒡 1 +x:1 +发泄 1 +x:1 +徽调 1 +x:1 +春燕 1 +x:1 +地火 1 +x:1 +高氧水 1 +x:1 +专署 1 +x:1 +蛏子 1 +x:1 +框子 1 +x:1 +认可 1 +x:1 +人劳处长 1 +x:1 +王石凹矿 1 +x:1 +兜圈子 1 +x:1 +留情 1 +x:1 +要职 1 +x:1 +啧啧称奇 1 +x:1 +小巧玲珑 1 +x:1 +牛蝇 1 +x:1 +帘 4 +x:4 +用车 1 +x:1 +开拓性 1 +x:1 +章节 1 +x:1 +幕府 1 +x:1 +蚊蝇 1 +x:1 +射洪 1 +x:1 +蒙特雷市 1 +x:1 +该所 1 +x:1 +客货港 1 +x:1 +百老汇街 1 +x:1 +虎字头儿 1 +x:1 +过渡性 1 +x:1 +解法 1 +x:1 +舒柔 1 +x:1 +奂 1 +x:1 +会城镇 1 +x:1 +石景山区 1 +x:1 +川东 1 +x:1 +慎之又慎 1 +x:1 +反季节 1 +x:1 +立眉瞪眼 1 +x:1 +射流 1 +x:1 +问候 1 +x:1 +该房 1 +x:1 +商标 1 +x:1 +该户 1 +x:1 +时刻 1 +x:1 +发潮 1 +x:1 +蒙蒙 1 +x:1 +名牌群 1 +x:1 +坟头 1 +x:1 +姜湾村 1 +x:1 +商校 1 +x:1 +陪同团 1 +x:1 +川中 1 +x:1 +计票员 1 +x:1 +乡宁县 1 +x:1 +昆明湖 1 +x:1 +留恋 1 +x:1 +宁化县 1 +x:1 +灞桥区 1 +x:1 +下令 1 +x:1 +没关系 1 +x:1 +琼山市 1 +x:1 +村校 1 +x:1 +列编 1 +x:1 +印品 1 +x:1 +长中短篇 1 +x:1 +监督权案 1 +x:1 +购毒 1 +x:1 +下任 1 +x:1 +应用量 1 +x:1 +造谣惑众 1 +x:1 +安邦富民 1 +x:1 +伯南布哥 1 +x:1 +性 26 +x:26 +纸口袋 1 +x:1 +全面性 1 +x:1 +入土为安 1 +x:1 +眷眷之情 1 +x:1 +面面相觑 1 +x:1 +漫长 1 +x:1 +幕布 1 +x:1 +老粗儿 1 +x:1 +时务 1 +x:1 +碳塑纤维 1 +x:1 +或者 1 +x:1 +该报 1 +x:1 +族谱 1 +x:1 +纸板箱 1 +x:1 +埋葬 1 +x:1 +内蒙古团 1 +x:1 +惆怅 1 +x:1 +下人 1 +x:1 +蛐蛐儿 1 +x:1 +鬼火 1 +x:1 +站岗 1 +x:1 +佩带 1 +x:1 +沫儿 1 +x:1 +私自 1 +x:1 +晋城 1 +x:1 +喧宾夺主 1 +x:1 +伸畅 1 +x:1 +横空出世 1 +x:1 +知府 1 +x:1 +唱红 1 +x:1 +知底 1 +x:1 +按兵不动 1 +x:1 +落实率 1 +x:1 +乌珠石 1 +x:1 +骁 1 +x:1 +铲子 1 +x:1 +野蛮 1 +x:1 +发行费 1 +x:1 +内陆 1 +x:1 +钥匙环 1 +x:1 +中华草龟 1 +x:1 +工商业户 1 +x:1 +泰晤士河 1 +x:1 +信宜 1 +x:1 +全托制 1 +x:1 +似仙非仙 1 +x:1 +立法局 1 +x:1 +领头 1 +x:1 +技术部 1 +x:1 +牛虻 1 +x:1 +领夹 1 +x:1 +下低 1 +x:1 +下位 1 +x:1 +临河乡 1 +x:1 +下体 1 +x:1 +刀把 1 +x:1 +油烟 1 +x:1 +磷钾肥 1 +x:1 +凯旋门 1 +x:1 +擞 1 +x:1 +火星车 1 +x:1 +紫黑色 1 +x:1 +方面军 1 +x:1 +现阶段 1 +x:1 +蒿草 1 +x:1 +领奖 1 +x:1 +灯海火市 1 +x:1 +碑刻 1 +x:1 +七九年 1 +x:1 +内阁 1 +x:1 +积聚型 1 +x:1 +吉安 1 +x:1 +旧约 1 +x:1 +棉织品 1 +x:1 +铁厂沟镇 1 +x:1 +彗星 1 +x:1 +坟堆 1 +x:1 +叛 1 +x:1 +言归正传 1 +x:1 +不约而同 1 +x:1 +地狱 1 +x:1 +惊人 1 +x:1 +杨 1834 +x:1834 +霍利节 1 +x:1 +埋藏 1 +x:1 +中用 1 +x:1 +褒义词 1 +x:1 +永州 1 +x:1 +内阻 1 +x:1 +木乃伊 1 +x:1 +川贝母 1 +x:1 +江阴市 1 +x:1 +大正六年 1 +x:1 +吊脚柱 1 +x:1 +剧团 1 +x:1 +威 33 +x:33 +濒海 1 +x:1 +油灯 1 +x:1 +叽叽唧唧 1 +x:1 +牛蛙 1 +x:1 +义务人 1 +x:1 +含饴弄孙 1 +x:1 +先手 1 +x:1 +换防 1 +x:1 +磅 6 +x:6 +岚 10 +x:10 +毒瓦斯 1 +x:1 +农行奖 1 +x:1 +私股 1 +x:1 +发源 1 +x:1 +囚室 1 +x:1 +合欢花 1 +x:1 +知心 1 +x:1 +项目组 1 +x:1 +峨眉 1 +x:1 +溢出 1 +x:1 +传呼电话 1 +x:1 +门封 1 +x:1 +耽 1 +x:1 +核查团 1 +x:1 +岚皋 1 +x:1 +佛龛 1 +x:1 +观摩者 1 +x:1 +坟墓 1 +x:1 +工矿企业 1 +x:1 +内障 1 +x:1 +舒兰市 1 +x:1 +印刷术 1 +x:1 +垂线足 1 +x:1 +晋国 1 +x:1 +天府 1 +x:1 +点点 1 +x:1 +舅父 1 +x:1 +商榷 1 +x:1 +湘绣 1 +x:1 +章草 1 +x:1 +医疗界 1 +x:1 +地牢 1 +x:1 +豪华 1 +x:1 +内难 1 +x:1 +无息贷款 1 +x:1 +楷 6 +x:6 +行赏 1 +x:1 +技工贸 1 +x:1 +地物 1 +x:1 +燃起 1 +x:1 +扼守 1 +x:1 +体育运动 1 +x:1 +境 35 +x:35 +段位制 1 +x:1 +传记类 1 +x:1 +裤褂 1 +x:1 +怒斥 1 +x:1 +屈从 1 +x:1 +棉织厂 1 +x:1 +油矿 1 +x:1 +油石 1 +x:1 +次于 1 +x:1 +滥印 1 +x:1 +仰泳 1 +x:1 +草裙舞 1 +x:1 +幕墙 1 +x:1 +信用联社 1 +x:1 +治疗法 1 +x:1 +廊柱 1 +x:1 +产品化 1 +x:1 +巡捕 1 +x:1 +领带 1 +x:1 +胆壮山河 1 +x:1 +绕开 1 +x:1 +制皂厂 1 +x:1 +门对 1 +x:1 +连苍接翠 1 +x:1 +搀假 1 +x:1 +狠心 1 +x:1 +侠骨 1 +x:1 +半 993 +x:993 +地痞 1 +x:1 +兑现率 1 +x:1 +大歌剧 1 +x:1 +兔皮 1 +x:1 +舒服 1 +x:1 +坦陈己见 1 +x:1 +弹簧门 1 +x:1 +粗略 1 +x:1 +灵魂 1 +x:1 +夜不出户 1 +x:1 +蓬门荜户 1 +x:1 +印制 1 +x:1 +印刷 1 +x:1 +刊出 1 +x:1 +独一性 1 +x:1 +亲如弟兄 1 +x:1 +版权司 1 +x:1 +小妞 1 +x:1 +发楞 1 +x:1 +孚日山 1 +x:1 +赶 228 +x:228 +怒族 1 +x:1 +话剧热 1 +x:1 +商港 1 +x:1 +内里 1 +x:1 +攻关组 1 +x:1 +反光 1 +x:1 +怒放 1 +x:1 +凉丝丝 1 +x:1 +政府部门 1 +x:1 +作奸犯科 1 +x:1 +空港 1 +x:1 +团脐 1 +x:1 +外资型 1 +x:1 +糖果 1 +x:1 +期市 1 +x:1 +课题费 1 +x:1 +发榜 1 +x:1 +判若天壤 1 +x:1 +举重队 1 +x:1 +滥发 1 +x:1 +琼海 1 +x:1 +下海者 1 +x:1 +暗影 1 +x:1 +红旗岗 1 +x:1 +亲英派 1 +x:1 +黄粱美梦 1 +x:1 +缅怀 1 +x:1 +卷起 1 +x:1 +尽享清福 1 +x:1 +耗材 1 +x:1 +轿车 1 +x:1 +危及 1 +x:1 +蛏干 1 +x:1 +地界 1 +x:1 +葫芦蔓 1 +x:1 +陶范 1 +x:1 +陆架 1 +x:1 +性子 1 +x:1 +众学生 1 +x:1 +评级 1 +x:1 +门子 1 +x:1 +长白山区 1 +x:1 +万博省 1 +x:1 +琼浆 1 +x:1 +金湖县 1 +x:1 +辽远 1 +x:1 +间谍案 1 +x:1 +怎么得了 1 +x:1 +宪制性 1 +x:1 +药剂拌种 1 +x:1 +慧中北里 1 +x:1 +过渡期 1 +x:1 +购汇 1 +x:1 +拖油瓶 1 +x:1 +国学家 1 +x:1 +抛物面 1 +x:1 +划线 1 +x:1 +结核菌 1 +x:1 +点火 1 +x:1 +枢纽 1 +x:1 +优质稻 1 +x:1 +期待 1 +x:1 +讨巧 1 +x:1 +料斗 1 +x:1 +没 1716 +x:1716 +永安 1 +x:1 +酸式盐 1 +x:1 +萦 1 +x:1 +走兽 1 +x:1 +拱北石 1 +x:1 +毛毡 1 +x:1 +入选者 1 +x:1 +灵邱县 1 +x:1 +走入 1 +x:1 +唱票 1 +x:1 +用血 1 +x:1 +鞍前马后 1 +x:1 +军代表 1 +x:1 +商潮 1 +x:1 +在所难免 1 +x:1 +商演 1 +x:1 +防撬门 1 +x:1 +批转交办 1 +x:1 +暖锋 1 +x:1 +内退 1 +x:1 +地瓜 1 +x:1 +想法 1 +x:1 +前堵后追 1 +x:1 +苍山 1 +x:1 +公约数 1 +x:1 +月下老人 1 +x:1 +牛耳 1 +x:1 +灵驾 1 +x:1 +歪打正着 1 +x:1 +三里屯 1 +x:1 +任教 1 +x:1 +屋前 1 +x:1 +名片册 1 +x:1 +组织科学 1 +x:1 +洪泽县 1 +x:1 +机动车 1 +x:1 +主客观 1 +x:1 +发案 1 +x:1 +上辈人 1 +x:1 +碑名 1 +x:1 +失效率 1 +x:1 +封杀 1 +x:1 +多性 1 +x:1 +饲料用 1 +x:1 +苍岭 1 +x:1 +削平 1 +x:1 +社会部 1 +x:1 +苍岩 1 +x:1 +濒死 1 +x:1 +地球 1 +x:1 +发梢 1 +x:1 +地理 1 +x:1 +享乐主义 1 +x:1 +7 1025 +x:1025 +无耻之徒 1 +x:1 +陶艺 1 +x:1 +袒胸露臂 1 +x:1 +宁冈县 1 +x:1 +履坦镇 1 +x:1 +封条 1 +x:1 +印台 1 +x:1 +亢 13 +x:13 +坚苦 1 +x:1 +内部 1 +x:1 +出口权 1 +x:1 +中班 1 +x:1 +贪赃枉法 1 +x:1 +香槟酒 1 +x:1 +车公庄 1 +x:1 +铲工 1 +x:1 +辽中县 1 +x:1 +宽于待人 1 +x:1 +平壤市 1 +x:1 +厂籍 1 +x:1 +造册 1 +x:1 +海平线 1 +x:1 +留有 1 +x:1 +纳税者 1 +x:1 +巡护 1 +x:1 +湍 1 +x:1 +桐子 1 +x:1 +内贸部 1 +x:1 +原则层 1 +x:1 +印厂 1 +x:1 +蜡台 1 +x:1 +蜡叶 1 +x:1 +呆账率 1 +x:1 +牛肉 1 +x:1 +认同 1 +x:1 +徐村 1 +x:1 +倒闭年 1 +x:1 +贸易业 1 +x:1 +列确 1 +x:1 +圆周率 1 +x:1 +五指耙 1 +x:1 +气势汹汹 1 +x:1 +百股胜和 1 +x:1 +站容 1 +x:1 +不合时宜 1 +x:1 +稠油田 1 +x:1 +粉笔字 1 +x:1 +豪商 1 +x:1 +巡抚 1 +x:1 +朝夕 1 +x:1 +罄竹难书 1 +x:1 +朝外 1 +x:1 +小河子村 1 +x:1 +薪金 1 +x:1 +相似性 1 +x:1 +击伤 1 +x:1 +枣阳 1 +x:1 +片名 1 +x:1 +功在千秋 1 +x:1 +山茶花 1 +x:1 +颈内 1 +x:1 +大洞尺五 1 +x:1 +清河村 1 +x:1 +撤回 1 +x:1 +春瘟 1 +x:1 +甲 47 +x:47 +晋北 1 +x:1 +硫化物质 1 +x:1 +宿草 1 +x:1 +蠕虫状 1 +x:1 +未能免俗 1 +x:1 +恒齿 1 +x:1 +徽记 1 +x:1 +刊发 1 +x:1 +可利用率 1 +x:1 +掌骨 1 +x:1 +甘霖 1 +x:1 +该当何论 1 +x:1 +吉庆 1 +x:1 +有去无归 1 +x:1 +晋升 1 +x:1 +针线活儿 1 +x:1 +方位词 1 +x:1 +刊号 1 +x:1 +地矿 1 +x:1 +孤雌生殖 1 +x:1 +成熟度 1 +x:1 +哈拉伊卜 1 +x:1 +晋南 1 +x:1 +甘露 1 +x:1 +内丘县 1 +x:1 +常青树 1 +x:1 +奴颜婢膝 1 +x:1 +五四年 1 +x:1 +商法 1 +x:1 +略略 1 +x:1 +碑基 1 +x:1 +戍守 1 +x:1 +毛桃 1 +x:1 +销售额 1 +x:1 +用语 1 +x:1 +糖料 1 +x:1 +想像力 1 +x:1 +膂力 1 +x:1 +村民 1 +x:1 +野草 1 +x:1 +执法 1 +x:1 +脱盲 1 +x:1 +生产能力 1 +x:1 +门外 1 +x:1 +瑁洲 1 +x:1 +有意识 1 +x:1 +斗争会 1 +x:1 +妙曼 1 +x:1 +街上 1 +x:1 +脚腕子 1 +x:1 +毛栗 1 +x:1 +先期 1 +x:1 +娇羞 1 +x:1 +三足乌 1 +x:1 +私藏 1 +x:1 +贫困生 1 +x:1 +油画 1 +x:1 +卷轴 1 +x:1 +娇美 1 +x:1 +发放点 1 +x:1 +先机 1 +x:1 +方丈 1 +x:1 +赶考 1 +x:1 +毛样 1 +x:1 +负债村 1 +x:1 +发毛 1 +x:1 +鸣金收兵 1 +x:1 +刊印 1 +x:1 +埃德蒙顿 1 +x:1 +二道贩子 1 +x:1 +邓选 1 +x:1 +撒种 1 +x:1 +走动 1 +x:1 +沉淀物 1 +x:1 +中点 1 +x:1 +枝繁花茂 1 +x:1 +脱皮 1 +x:1 +拉脱维亚 1 +x:1 +喇 1 +x:1 +渔船 1 +x:1 +校舍 1 +x:1 +救灾粮 1 +x:1 +逐字逐句 1 +x:1 +双周刊 1 +x:1 +商流 1 +x:1 +玉溪市 1 +x:1 +阳韵 1 +x:1 +击中 1 +x:1 +介绍员 1 +x:1 +渔舟 1 +x:1 +门墙 1 +x:1 +私营 1 +x:1 +商海 1 +x:1 +机动费 1 +x:1 +顺之者 1 +x:1 +德籍 1 +x:1 +傲岸 1 +x:1 +坟山 1 +x:1 +技术链 1 +x:1 +两杂一薯 1 +x:1 +验证员 1 +x:1 +地皮 1 +x:1 +风云际会 1 +x:1 +晋剧 1 +x:1 +不容置疑 1 +x:1 +地盘 1 +x:1 +商洛 1 +x:1 +春睡 1 +x:1 +方便 1 +x:1 +该机 1 +x:1 +大茴香 1 +x:1 +荐骨 1 +x:1 +物价指数 1 +x:1 +盛名难负 1 +x:1 +蛋品 1 +x:1 +中焦 1 +x:1 +发病率 1 +x:1 +地直 1 +x:1 +五五年 1 +x:1 +佳音频传 1 +x:1 +着魔 1 +x:1 +因企制宜 1 +x:1 +地盾 1 +x:1 +商洽 1 +x:1 +动检站 1 +x:1 +马场坪 1 +x:1 +气阀 1 +x:1 +交响诗 1 +x:1 +乖僻 1 +x:1 +工农联盟 1 +x:1 +音美 1 +x:1 +离石 1 +x:1 +千古功臣 1 +x:1 +结完婚 1 +x:1 +慰问款 1 +x:1 +了无踪迹 1 +x:1 +炊 1 +x:1 +身体力行 1 +x:1 +漫道 1 +x:1 +工业型 1 +x:1 +白水江 1 +x:1 +东胜市 1 +x:1 +流放地 1 +x:1 +临时性 1 +x:1 +印花法 1 +x:1 +宁陵县 1 +x:1 +陈官乡 1 +x:1 +世纪钟 1 +x:1 +永夏 1 +x:1 +醇厚 1 +x:1 +局内 1 +x:1 +影碟机 1 +x:1 +成龙配套 1 +x:1 +与会 1 +x:1 +鲷科 1 +x:1 +结合部 1 +x:1 +煽动性 1 +x:1 +彭县 1 +x:1 +永外 1 +x:1 +养蟹 1 +x:1 +交相为用 1 +x:1 +腹部 1 +x:1 +私蓄 1 +x:1 +集 361 +x:361 +故居 1 +x:1 +印军 1 +x:1 +访问记 1 +x:1 +傲居 1 +x:1 +轻荡 1 +x:1 +恕 18 +x:18 +溯根求源 1 +x:1 +孩子气 1 +x:1 +课征 1 +x:1 +黄洋界 1 +x:1 +耿耿于怀 1 +x:1 +长管状 1 +x:1 +拾金不昧 1 +x:1 +佳酿 1 +x:1 +造血型 1 +x:1 +领巾 1 +x:1 +化疗药 1 +x:1 +先是 1 +x:1 +诸 135 +x:135 +暖暖的 1 +x:1 +领工员 1 +x:1 +略语 1 +x:1 +耀 30 +x:30 +寓邸 1 +x:1 +购配 1 +x:1 +卸甲庄 1 +x:1 +眉来眼去 1 +x:1 +该项 1 +x:1 +毛集 1 +x:1 +略读 1 +x:1 +农林牧渔 1 +x:1 +亟 16 +x:16 +劈山 1 +x:1 +青伊湖 1 +x:1 +荣国府 1 +x:1 +灵机 1 +x:1 +钦州港 1 +x:1 +文曲星 1 +x:1 +英俊 1 +x:1 +事务部 1 +x:1 +解雇 1 +x:1 +兴衰存亡 1 +x:1 +鞋材 1 +x:1 +产后 1 +x:1 +内海 1 +x:1 +户籍室 1 +x:1 +线 488 +x:488 +地角 1 +x:1 +鱼肝油 1 +x:1 +愧不可当 1 +x:1 +凄怆 1 +x:1 +牌 191 +x:191 +辎车 1 +x:1 +用电 1 +x:1 +拒斥 1 +x:1 +用用 1 +x:1 +月虹 1 +x:1 +横断山脉 1 +x:1 +略论 1 +x:1 +区位 1 +x:1 +群防群治 1 +x:1 +一连串 1 +x:1 +科坛 1 +x:1 +前后道 1 +x:1 +伸进 1 +x:1 +吐血 1 +x:1 +改革史 1 +x:1 +卡折 1 +x:1 +见面会 1 +x:1 +筏子 1 +x:1 +极品 1 +x:1 +呆若木鸡 1 +x:1 +托福 1 +x:1 +妓女 1 +x:1 +五毒 1 +x:1 +感应电流 1 +x:1 +看轻 1 +x:1 +丙璜舒 1 +x:1 +活报剧 1 +x:1 +暖棚 1 +x:1 +褐棕色 1 +x:1 +点位 1 +x:1 +三不主义 1 +x:1 +擦鞋嫂 1 +x:1 +岗位数 1 +x:1 +试点县 1 +x:1 +陶罐 1 +x:1 +留驻 1 +x:1 +换洗 1 +x:1 +党费 1 +x:1 +国籍法 1 +x:1 +虚假性 1 +x:1 +拒收 1 +x:1 +长岭岗乡 1 +x:1 +长春站 1 +x:1 +制成品 1 +x:1 +攸关 1 +x:1 +发问 1 +x:1 +降幅 1 +x:1 +无轨电车 1 +x:1 +降幂 1 +x:1 +漫漫 1 +x:1 +涌水量 1 +x:1 +种法 1 +x:1 +风机厂 1 +x:1 +毒性 1 +x:1 +灵柩 1 +x:1 +滴 72 +x:72 +产品 1 +x:1 +内涵 1 +x:1 +惶恐滩 1 +x:1 +科城 1 +x:1 +掠夺式 1 +x:1 +秦南镇 1 +x:1 +划花 1 +x:1 +加以 1 +x:1 +沉 59 +x:59 +佛教 1 +x:1 +鹰鹞 1 +x:1 +调委会 1 +x:1 +并日而食 1 +x:1 +余 2289 +x:2289 +内江 1 +x:1 +加价 1 +x:1 +怖 2 +x:2 +枣椰 1 +x:1 +誊写版 1 +x:1 +中车 1 +x:1 +唐海县 1 +x:1 +奏者 1 +x:1 +负债额 1 +x:1 +加仑 1 +x:1 +本科者 1 +x:1 +离 576 +x:576 +射阳 1 +x:1 +朱笔 1 +x:1 +方向性 1 +x:1 +银河系 1 +x:1 +精湛不磨 1 +x:1 +泡沫式 1 +x:1 +稀罕物 1 +x:1 +皲裂 1 +x:1 +吉布提 1 +x:1 +树立 1 +x:1 +经济圈 1 +x:1 +鬼话 1 +x:1 +口腹 1 +x:1 +俄罗斯族 1 +x:1 +概数 1 +x:1 +即景生情 1 +x:1 +卷烟 1 +x:1 +内水 1 +x:1 +阳起石 1 +x:1 +旅团长 1 +x:1 +灌木丛 1 +x:1 +狰狞 1 +x:1 +诚邀 1 +x:1 +划船 1 +x:1 +戎马一生 1 +x:1 +涨潮 1 +x:1 +蓟镇 1 +x:1 +中远 1 +x:1 +超一流 1 +x:1 +节度使 1 +x:1 +自相矛盾 1 +x:1 +无会月 1 +x:1 +轩敞 1 +x:1 +加之 1 +x:1 +一怀愁绪 1 +x:1 +下岗族 1 +x:1 +房院 1 +x:1 +腹足类 1 +x:1 +中心区 1 +x:1 +丝虫病 1 +x:1 +漫湾 1 +x:1 +拉起呱来 1 +x:1 +安平县 1 +x:1 +小肚子 1 +x:1 +禀赋 1 +x:1 +私立 1 +x:1 +视频流 1 +x:1 +健全率 1 +x:1 +预制板 1 +x:1 +滋扰 1 +x:1 +清风店 1 +x:1 +玉树 1 +x:1 +北方佬 1 +x:1 +专业户 1 +x:1 +命令句 1 +x:1 +私章 1 +x:1 +柳州 1 +x:1 +换汇 1 +x:1 +雅各宾派 1 +x:1 +加上 1 +x:1 +该馆 1 +x:1 +主导型 1 +x:1 +地衣 1 +x:1 +划艇 1 +x:1 +中辽 1 +x:1 +牛粪 1 +x:1 +地表 1 +x:1 +漫游 1 +x:1 +昌盛 1 +x:1 +内河 1 +x:1 +寡头 1 +x:1 +安居乐业 1 +x:1 +帽顶 1 +x:1 +瑶寨 1 +x:1 +轻纺 1 +x:1 +纷扬 1 +x:1 +见风转舵 1 +x:1 +自卑感 1 +x:1 +偃师 1 +x:1 +二道河 1 +x:1 +评聘 1 +x:1 +纷扰 1 +x:1 +沙矶头村 1 +x:1 +谋求 1 +x:1 +氧气包 1 +x:1 +素昧平生 1 +x:1 +得名 1 +x:1 +木菠萝 1 +x:1 +府绸 1 +x:1 +治愈率 1 +x:1 +发霉 1 +x:1 +范式 1 +x:1 +盆底 1 +x:1 +党政机关 1 +x:1 +廊首 1 +x:1 +安检站 1 +x:1 +领军人 1 +x:1 +灵敏 1 +x:1 +发面 1 +x:1 +魄力 1 +x:1 +瑶家 1 +x:1 +承债式 1 +x:1 +弛懈 1 +x:1 +慎始敬终 1 +x:1 +素洁 1 +x:1 +聚拢 1 +x:1 +渔网 1 +x:1 +舞动 1 +x:1 +推动力 1 +x:1 +糖饴 1 +x:1 +农林水 1 +x:1 +夙兴夜寐 1 +x:1 +出口额 1 +x:1 +晓庄 1 +x:1 +纷拥 1 +x:1 +素淡 1 +x:1 +三花脸 1 +x:1 +瑶学 1 +x:1 +舞剑 1 +x:1 +逆来顺受 1 +x:1 +敌对者 1 +x:1 +荣辱感 1 +x:1 +捉刀 1 +x:1 +踢腿 1 +x:1 +蓬莱阁 1 +x:1 +双组元 1 +x:1 +氧气厂 1 +x:1 +倡导国 1 +x:1 +江家场村 1 +x:1 +春潮秋闹 1 +x:1 +说白了 1 +x:1 +高才高学 1 +x:1 +弩 4 +x:4 +章程 1 +x:1 +托管 1 +x:1 +商都 1 +x:1 +应和 1 +x:1 +种源 1 +x:1 +封顶 1 +x:1 +歙砚师 1 +x:1 +加碘盐 1 +x:1 +自办厂 1 +x:1 +舞剧 1 +x:1 +发音 1 +x:1 +懂 292 +x:292 +纷披 1 +x:1 +返还款 1 +x:1 +可溶性 1 +x:1 +舞刀 1 +x:1 +珠江口 1 +x:1 +协商团 1 +x:1 +曲径 1 +x:1 +癣 2 +x:2 +射门 1 +x:1 +稀泥 1 +x:1 +城墙史 1 +x:1 +商标法 1 +x:1 +返老还童 1 +x:1 +鹿角菜 1 +x:1 +打照面 1 +x:1 +下雨天 1 +x:1 +点将台 1 +x:1 +心慌意乱 1 +x:1 +牛群 1 +x:1 +客运员 1 +x:1 +轩昂 1 +x:1 +内径 1 +x:1 +中资 1 +x:1 +烈火 1 +x:1 +产地 1 +x:1 +撒落 1 +x:1 +休止符 1 +x:1 +嘎 3 +x:3 +解闷 1 +x:1 +完钻 1 +x:1 +娇艳 1 +x:1 +池上 1 +x:1 +围观者 1 +x:1 +常青镇 1 +x:1 +油裙 1 +x:1 +澳 290 +x:290 +怒骂 1 +x:1 +算尺 1 +x:1 +弃婴 1 +x:1 +无会旬 1 +x:1 +斜井 1 +x:1 +评功摆好 1 +x:1 +坏死症 1 +x:1 +取信 1 +x:1 +极圈 1 +x:1 +维和 1 +x:1 +淡水井 1 +x:1 +先验 1 +x:1 +泾渭不分 1 +x:1 +热带鱼 1 +x:1 +舞厅 1 +x:1 +茄子 1 +x:1 +笑嘻嘻 1 +x:1 +内窥镜 1 +x:1 +话剧迷 1 +x:1 +恶狠狠 1 +x:1 +科员 1 +x:1 +夏都 1 +x:1 +极地 1 +x:1 +陶粒 1 +x:1 +殿下 1 +x:1 +出海口 1 +x:1 +一鼓作气 1 +x:1 +廉耻感 1 +x:1 +监理制 1 +x:1 +村野 1 +x:1 +油表 1 +x:1 +大一统 1 +x:1 +着陆 1 +x:1 +结合法 1 +x:1 +农工党 1 +x:1 +成品率 1 +x:1 +发难 1 +x:1 +夜风 1 +x:1 +航线 1 +x:1 +纵览 1 +x:1 +准确无误 1 +x:1 +愤闷 1 +x:1 +商量 1 +x:1 +燃用 1 +x:1 +米洛斯岛 1 +x:1 +疤 4 +x:4 +康庄镇 1 +x:1 +压腿 1 +x:1 +中路 1 +x:1 +此物 1 +x:1 +户兰村 1 +x:1 +气象系 1 +x:1 +销售方 1 +x:1 +腹沟 1 +x:1 +钢丝床 1 +x:1 +无放射性 1 +x:1 +脱误 1 +x:1 +好人好事 1 +x:1 +赶紧 1 +x:1 +代代相承 1 +x:1 +故事集 1 +x:1 +专业性 1 +x:1 +腹泻 1 +x:1 +创见性 1 +x:1 +德育 1 +x:1 +怒马 1 +x:1 +轻罪 1 +x:1 +素油 1 +x:1 +糖食 1 +x:1 +丢卒保车 1 +x:1 +知恩图报 1 +x:1 +制糖术 1 +x:1 +酷 2 +x:2 +春试 1 +x:1 +奋起 1 +x:1 +吐诉 1 +x:1 +谬种流传 1 +x:1 +并吞 1 +x:1 +抨击 1 +x:1 +确诊 1 +x:1 +蒸汽轮机 1 +x:1 +可视性 1 +x:1 +确证 1 +x:1 +产值 1 +x:1 +意象 1 +x:1 +着重 1 +x:1 +瓜皮帽 1 +x:1 +寒冬 1 +x:1 +相生相克 1 +x:1 +草木犀 1 +x:1 +终审制 1 +x:1 +吉林团 1 +x:1 +筏式 1 +x:1 +累见不鲜 1 +x:1 +屯溪 1 +x:1 +驶过 1 +x:1 +归真村 1 +x:1 +并发 1 +x:1 +晶体 1 +x:1 +种树 1 +x:1 +前移 1 +x:1 +养分 1 +x:1 +陶管 1 +x:1 +离谱 1 +x:1 +发酵 1 +x:1 +购销 1 +x:1 +甘洌 1 +x:1 +党规 1 +x:1 +仓储费 1 +x:1 +谷家峪村 1 +x:1 +艳诗 1 +x:1 +力作 1 +x:1 +甘洛 1 +x:1 +暖气 1 +x:1 +野禽 1 +x:1 +真情实感 1 +x:1 +链索 1 +x:1 +第三世界 1 +x:1 +脸上无光 1 +x:1 +算学 1 +x:1 +风筝节 1 +x:1 +秩 2 +x:2 +确认 1 +x:1 +虎头蛇尾 1 +x:1 +韧皮纤维 1 +x:1 +产假 1 +x:1 +宝塔形 1 +x:1 +习焉不察 1 +x:1 +发配 1 +x:1 +电务处 1 +x:1 +科协 1 +x:1 +舞员 1 +x:1 +三确保 1 +x:1 +透视片 1 +x:1 +珞巴族 1 +x:1 +油轮 1 +x:1 +盆塘 1 +x:1 +暖泉 1 +x:1 +羚牛 1 +x:1 +顺流而下 1 +x:1 +燃爆 1 +x:1 +车轮战 1 +x:1 +岐 4 +x:4 +屯口村 1 +x:1 +炎热 1 +x:1 +漫步 1 +x:1 +诤臣 1 +x:1 +连平县 1 +x:1 +迫害 1 +x:1 +袭扰 1 +x:1 +邸 3 +x:3 +地质 1 +x:1 +目迷五色 1 +x:1 +火种刀耕 1 +x:1 +盼头 1 +x:1 +卓有远见 1 +x:1 +贡唐金塔 1 +x:1 +包工头 1 +x:1 +中国籍 1 +x:1 +力保 1 +x:1 +力促 1 +x:1 +集资费 1 +x:1 +孝子贤孙 1 +x:1 +留鸟 1 +x:1 +汛 3 +x:3 +清山秀水 1 +x:1 +言言 1 +x:1 +剽取 1 +x:1 +勤 89 +x:89 +古色古香 1 +x:1 +百舸争流 1 +x:1 +乒乓 1 +x:1 +种棉 1 +x:1 +行头 1 +x:1 +腹毛 1 +x:1 +朱红 1 +x:1 +泸溪县 1 +x:1 +雨量站 1 +x:1 +暖流 1 +x:1 +唱腔 1 +x:1 +产儿 1 +x:1 +理发馆 1 +x:1 +离心力 1 +x:1 +来电 1 +x:1 +甘汞 1 +x:1 +华屋豪宅 1 +x:1 +地貌 1 +x:1 +钡 1 +x:1 +老城镇 1 +x:1 +弘扬 1 +x:1 +力主 1 +x:1 +来由 1 +x:1 +斫 1 +x:1 +纠错者 1 +x:1 +发送 1 +x:1 +倒淌河乡 1 +x:1 +极其 1 +x:1 +竞选人 1 +x:1 +社科院 1 +x:1 +药政科 1 +x:1 +末班车 1 +x:1 +走钢丝 1 +x:1 +消受 1 +x:1 +巴拉哈斯 1 +x:1 +经济区 1 +x:1 +农工型 1 +x:1 +崇州市 1 +x:1 +平方英里 1 +x:1 +拖挂车 1 +x:1 +宝顶山 1 +x:1 +慰问金 1 +x:1 +舞钢市 1 +x:1 +霓 1 +x:1 +行进 1 +x:1 +陶窑 1 +x:1 +酱汤 1 +x:1 +能源所 1 +x:1 +萨尔瓦多 1 +x:1 +脱贫 1 +x:1 +并力 1 +x:1 +汗珠子 1 +x:1 +寿 20 +x:20 +展卷 1 +x:1 +甘泉 1 +x:1 +中词 1 +x:1 +村霸 1 +x:1 +消化 1 +x:1 +气象站 1 +x:1 +廉政节 1 +x:1 +中试 1 +x:1 +瑶山 1 +x:1 +零七八碎 1 +x:1 +竞赛 1 +x:1 +租赁权 1 +x:1 +黄梅戏 1 +x:1 +经济史 1 +x:1 +中南海 1 +x:1 +力争 1 +x:1 +无店铺 1 +x:1 +浮筒 1 +x:1 +草鞋岭 1 +x:1 +遮放 1 +x:1 +国音 1 +x:1 +酱油 1 +x:1 +施工期 1 +x:1 +办事处 1 +x:1 +讴 1 +x:1 +自行其是 1 +x:1 +内棺 1 +x:1 +事务长 1 +x:1 +崔庄乡 1 +x:1 +官运亨通 1 +x:1 +石榴庄 1 +x:1 +饮食 1 +x:1 +炊烟 1 +x:1 +洋嗓子 1 +x:1 +租赁期 1 +x:1 +水冲港乡 1 +x:1 +降 465 +x:465 +产出 1 +x:1 +价轻字 1 +x:1 +压垮 1 +x:1 +锋芒毕露 1 +x:1 +消协 1 +x:1 +除害兴利 1 +x:1 +聚敛 1 +x:1 +重复性 1 +x:1 +水花生 1 +x:1 +山岗子 1 +x:1 +极冠 1 +x:1 +人心不古 1 +x:1 +三合院儿 1 +x:1 +翻悔 1 +x:1 +不甘 1 +x:1 +氢气 1 +x:1 +甘油 1 +x:1 +并列 1 +x:1 +印刷机 1 +x:1 +管理法 1 +x:1 +艾尔河 1 +x:1 +直截了当 1 +x:1 +凉水河 1 +x:1 +罪有应得 1 +x:1 +中论 1 +x:1 +抗虫棉 1 +x:1 +灵感 1 +x:1 +油路 1 +x:1 +过村镇 1 +x:1 +骗税 1 +x:1 +计件 1 +x:1 +建房款 1 +x:1 +中街 1 +x:1 +稀树 1 +x:1 +佛手 1 +x:1 +宛平县 1 +x:1 +枚马 1 +x:1 +成功路 1 +x:1 +招远市 1 +x:1 +以怨报德 1 +x:1 +分散化 1 +x:1 +饱和点 1 +x:1 +虎视眈眈 1 +x:1 +上网者 1 +x:1 +中表 1 +x:1 +燃点 1 +x:1 +贲 2 +x:2 +命令名 1 +x:1 +太白山 1 +x:1 +店主 1 +x:1 +转来额 1 +x:1 +去职 1 +x:1 +非标准件 1 +x:1 +浮签 1 +x:1 +疑难病 1 +x:1 +互促互动 1 +x:1 +党证 1 +x:1 +功夫服 1 +x:1 +极刑 1 +x:1 +局务 1 +x:1 +优质品率 1 +x:1 +子目录 1 +x:1 +敛息屏声 1 +x:1 +燃烧 1 +x:1 +堑沟 1 +x:1 +据 5989 +x:5989 +困人 1 +x:1 +党课 1 +x:1 +弘愿 1 +x:1 +去者 1 +x:1 +产前 1 +x:1 +茄干 1 +x:1 +助养金 1 +x:1 +择偶 1 +x:1 +中装 1 +x:1 +忧念 1 +x:1 +并入 1 +x:1 +发行点 1 +x:1 +不解之缘 1 +x:1 +白水镇 1 +x:1 +打击乐 1 +x:1 +一扫而空 1 +x:1 +体联 1 +x:1 +拒捕 1 +x:1 +库蚊 1 +x:1 +商铺 1 +x:1 +周秦汉唐 1 +x:1 +千了百当 1 +x:1 +茶艺室 1 +x:1 +狡辩 1 +x:1 +辟 85 +x:85 +湘莲 1 +x:1 +饺子 1 +x:1 +油质 1 +x:1 +消停 1 +x:1 +燃油箱 1 +x:1 +牙粉袋 1 +x:1 +磷灰石 1 +x:1 +极力 1 +x:1 +瘙痒 1 +x:1 +地轴 1 +x:1 +原子序数 1 +x:1 +概括 1 +x:1 +死硬派 1 +x:1 +积水场 1 +x:1 +凉水澡 1 +x:1 +旧范 1 +x:1 +技术活 1 +x:1 +脱身 1 +x:1 +赵巷镇 1 +x:1 +用率 1 +x:1 +征订期 1 +x:1 +粤剧团 1 +x:1 +原发癌 1 +x:1 +消费品 1 +x:1 +草鸡 1 +x:1 +施工方 1 +x:1 +产区 1 +x:1 +蚕子 1 +x:1 +县级 1 +x:1 +著录 1 +x:1 +毛重 1 +x:1 +解释 1 +x:1 +厣 1 +x:1 +晴好 1 +x:1 +日月食 1 +x:1 +见贤思齐 1 +x:1 +香烟盒 1 +x:1 +两劳 1 +x:1 +估 7 +x:7 +脱轨 1 +x:1 +灵性 1 +x:1 +产卵 1 +x:1 +哲盟 1 +x:1 +喀麦隆队 1 +x:1 +子堤 1 +x:1 +弃市 1 +x:1 +浮法 1 +x:1 +计件工资 1 +x:1 +罐 13 +x:13 +壕 1 +x:1 +撂挑子 1 +x:1 +极化 1 +x:1 +艳装 1 +x:1 +小中见大 1 +x:1 +要素 1 +x:1 +呢 1068 +x:1068 +要紧 1 +x:1 +宽舒 1 +x:1 +麦秸灰 1 +x:1 +租赁方 1 +x:1 +进退观 1 +x:1 +晴天 1 +x:1 +绕阳河 1 +x:1 +华尔兹 1 +x:1 +舞坛 1 +x:1 +远见卓识 1 +x:1 +中观 1 +x:1 +误解 1 +x:1 +大材小用 1 +x:1 +三重奏 1 +x:1 +打工仔 1 +x:1 +本票 1 +x:1 +农工商 1 +x:1 +战略学 1 +x:1 +楼厦村 1 +x:1 +晶体管 1 +x:1 +诊所 1 +x:1 +白色 1 +x:1 +搭 197 +x:197 +第二国际 1 +x:1 +干巴 1 +x:1 +仰面 1 +x:1 +极右 1 +x:1 +濯田镇 1 +x:1 +玩意 1 +x:1 +酸酸的 1 +x:1 +体肤 1 +x:1 +即兴之作 1 +x:1 +司令官 1 +x:1 +伸长率 1 +x:1 +金鸡山 1 +x:1 +泽城乡 1 +x:1 +刹那 1 +x:1 +柳铁局 1 +x:1 +村长 1 +x:1 +旋转 1 +x:1 +登高望远 1 +x:1 +言之有理 1 +x:1 +沈阳队 1 +x:1 +尧治河村 1 +x:1 +舞场 1 +x:1 +股东会 1 +x:1 +中医科 1 +x:1 +天台里 1 +x:1 +燃煤 1 +x:1 +大安镇 1 +x:1 +苯胺 1 +x:1 +村镇 1 +x:1 +府第 1 +x:1 +博闻强志 1 +x:1 +春运 1 +x:1 +抚河 1 +x:1 +素来 1 +x:1 +五内俱裂 1 +x:1 +法律案 1 +x:1 +粮管所 1 +x:1 +地膜 1 +x:1 +苔藓 1 +x:1 +交款日 1 +x:1 +古代人 1 +x:1 +内敛 1 +x:1 +连锁反应 1 +x:1 +月薪 1 +x:1 +换文 1 +x:1 +腾飞 1 +x:1 +甲亢丸 1 +x:1 +续断 1 +x:1 +状态者 1 +x:1 +卓然而立 1 +x:1 +素材 1 +x:1 +大桥局 1 +x:1 +油菜 1 +x:1 +蛮不讲理 1 +x:1 +春耕 1 +x:1 +出尔反尔 1 +x:1 +任选 1 +x:1 +中建协 1 +x:1 +换料 1 +x:1 +乐施会 1 +x:1 +岐山县 1 +x:1 +用料 1 +x:1 +界限 1 +x:1 +苇 5 +x:5 +如丧考妣 1 +x:1 +八八年 1 +x:1 +经济带 1 +x:1 +素朴 1 +x:1 +行迹 1 +x:1 +强货币 1 +x:1 +老一套 1 +x:1 +沙龙 1 +x:1 +经济师 1 +x:1 +抢救者 1 +x:1 +斗心眼 1 +x:1 +杨庄村 1 +x:1 +睹物伤情 1 +x:1 +白喉 1 +x:1 +摄像管 1 +x:1 +氯霉素 1 +x:1 +内政 1 +x:1 +弃儿 1 +x:1 +甘愿 1 +x:1 +冠亚军 1 +x:1 +会员费 1 +x:1 +春联 1 +x:1 +水针剂 1 +x:1 +司令员 1 +x:1 +辅导员 1 +x:1 +缺德事 1 +x:1 +该部 1 +x:1 +佛法 1 +x:1 +金玉良言 1 +x:1 +春肥 1 +x:1 +征服者 1 +x:1 +德语 1 +x:1 +牛痘 1 +x:1 +行业语 1 +x:1 +离心式 1 +x:1 +地脉 1 +x:1 +鞋帽 1 +x:1 +脱胎 1 +x:1 +工业性 1 +x:1 +脱胶 1 +x:1 +尚巴涅 1 +x:1 +遗传病 1 +x:1 +倚靠 1 +x:1 +文化人 1 +x:1 +方便牌 1 +x:1 +驻地 1 +x:1 +自流灌溉 1 +x:1 +旬中 1 +x:1 +盆周 1 +x:1 +大难不死 1 +x:1 +游手好闲 1 +x:1 +宿疾 1 +x:1 +经济庭 1 +x:1 +脱肛 1 +x:1 +该邦 1 +x:1 +株连 1 +x:1 +老式 1 +x:1 +旧货 1 +x:1 +旧账 1 +x:1 +置业 1 +x:1 +弃农 1 +x:1 +新书区 1 +x:1 +三合土 1 +x:1 +耍弄 1 +x:1 +名牌货 1 +x:1 +办事员 1 +x:1 +火工品 1 +x:1 +笑貌 1 +x:1 +葳 1 +x:1 +更 7014 +x:7014 +倨 1 +x:1 +灌阳县 1 +x:1 +袖 5 +x:5 +彻悟 1 +x:1 +鸡毛信 1 +x:1 +稀有 1 +x:1 +八哥儿 1 +x:1 +假以时日 1 +x:1 +凄楚 1 +x:1 +属于 1 +x:1 +栖 11 +x:11 +积雨云团 1 +x:1 +孤家子 1 +x:1 +二轻局 1 +x:1 +姨太太 1 +x:1 +谋杀 1 +x:1 +深交所 1 +x:1 +安塔拉 1 +x:1 +置信 1 +x:1 +临洮县 1 +x:1 +跪丐 1 +x:1 +各行其事 1 +x:1 +高个子 1 +x:1 +跪下 1 +x:1 +灵渠 1 +x:1 +油苗 1 +x:1 +庆回归 1 +x:1 +跃 102 +x:102 +仰首 1 +x:1 +料量 1 +x:1 +感恩图报 1 +x:1 +效 26 +x:26 +阿瑟港 1 +x:1 +卸货 1 +x:1 +暖意 1 +x:1 +长岗岭 1 +x:1 +脱脂 1 +x:1 +种数 1 +x:1 +抗干扰 1 +x:1 +相对而言 1 +x:1 +油花 1 +x:1 +小鞋 1 +x:1 +安全线 1 +x:1 +阶下囚 1 +x:1 +诤友 1 +x:1 +渔人之利 1 +x:1 +男耕女织 1 +x:1 +噪 6 +x:6 +命令字 1 +x:1 +俯 12 +x:12 +发行网 1 +x:1 +维度 1 +x:1 +三并举 1 +x:1 +旧貌 1 +x:1 +稀松 1 +x:1 +商标权 1 +x:1 +严以律人 1 +x:1 +佳期 1 +x:1 +依依不舍 1 +x:1 +卓荦不凡 1 +x:1 +白发人 1 +x:1 +评话 1 +x:1 +炭坑 1 +x:1 +肥头 1 +x:1 +联汇丰队 1 +x:1 +画片儿 1 +x:1 +喷气式 1 +x:1 +弦乐 1 +x:1 +竞猜卡 1 +x:1 +评语 1 +x:1 +极左 1 +x:1 +舞女 1 +x:1 +轻生 1 +x:1 +脱臼 1 +x:1 +埃雷迪亚 1 +x:1 +蝼蛄 1 +x:1 +昵 1 +x:1 +消弭 1 +x:1 +荆门 1 +x:1 +先遣 1 +x:1 +评说 1 +x:1 +链烃 1 +x:1 +争斤论两 1 +x:1 +早茶 1 +x:1 +捕鱼 1 +x:1 +购领 1 +x:1 +宗主国 1 +x:1 +博通古今 1 +x:1 +妇科病 1 +x:1 +为尊者讳 1 +x:1 +试岗制 1 +x:1 +工商业部 1 +x:1 +油船 1 +x:1 +空气 1 +x:1 +满目疮痍 1 +x:1 +信任感 1 +x:1 +料酒 1 +x:1 +蒸汽锤 1 +x:1 +评议 1 +x:1 +喜结连理 1 +x:1 +渐进 1 +x:1 +岫岩 1 +x:1 +软 71 +x:71 +一家村 1 +x:1 +评论 1 +x:1 +舒同体 1 +x:1 +蝼蚁 1 +x:1 +扰动 1 +x:1 +宗教改革 1 +x:1 +维州 1 +x:1 +胃蛋白酶 1 +x:1 +臭烘烘 1 +x:1 +需 635 +x:635 +表决器 1 +x:1 +阿维西奥 1 +x:1 +旧迹 1 +x:1 +湖中 1 +x:1 +四残 1 +x:1 +素数 1 +x:1 +循环系统 1 +x:1 +产业革命 1 +x:1 +廉吏 1 +x:1 +离任者 1 +x:1 +文武全才 1 +x:1 +净余 1 +x:1 +萤火 1 +x:1 +迪斯科 1 +x:1 +灵活 1 +x:1 +经济局 1 +x:1 +佛湾 1 +x:1 +虚妄 1 +x:1 +肉丝面 1 +x:1 +三字一话 1 +x:1 +西青区 1 +x:1 +趔趄 1 +x:1 +抚慰 1 +x:1 +茧价 1 +x:1 +吐艳 1 +x:1 +国难 1 +x:1 +善歌者 1 +x:1 +破口大骂 1 +x:1 +超支 1 +x:1 +小院 1 +x:1 +发 1095 +x:1095 +白芍 1 +x:1 +受益人 1 +x:1 +永乐二年 1 +x:1 +春色 1 +x:1 +中营 1 +x:1 +雷暴云 1 +x:1 +元曲选 1 +x:1 +好生生 1 +x:1 +轩然大波 1 +x:1 +经济作物 1 +x:1 +石女 1 +x:1 +实习员 1 +x:1 +列述 1 +x:1 +鬼胎 1 +x:1 +轻盈 1 +x:1 +通货膨胀 1 +x:1 +村风 1 +x:1 +夫权 1 +x:1 +托管人 1 +x:1 +兴化州 1 +x:1 +无本万利 1 +x:1 +素日 1 +x:1 +利哈乔夫 1 +x:1 +杂质 1 +x:1 +尚志市 1 +x:1 +靠不住 1 +x:1 +惊世骇俗 1 +x:1 +春芽 1 +x:1 +油腻 1 +x:1 +退避三舍 1 +x:1 +海里凡 1 +x:1 +瞳仁 1 +x:1 +北河沿 1 +x:1 +献词 1 +x:1 +通共 1 +x:1 +肠胃炎 1 +x:1 +叙永县 1 +x:1 +圩 2 +x:2 +续本 1 +x:1 +茧丝 1 +x:1 +素族 1 +x:1 +春节 1 +x:1 +青菜萝卜 1 +x:1 +产床 1 +x:1 +乃 88 +x:88 +胆囊炎 1 +x:1 +玻璃墙 1 +x:1 +掠夺品 1 +x:1 +现浇塔机 1 +x:1 +极值 1 +x:1 +晴和 1 +x:1 +脱节 1 +x:1 +扫地出门 1 +x:1 +拗口 1 +x:1 +销售法 1 +x:1 +列车 1 +x:1 +越剧 1 +x:1 +极度 1 +x:1 +闪 35 +x:35 +女孩儿 1 +x:1 +总堤 1 +x:1 +阿维亚诺 1 +x:1 +饼肥 1 +x:1 +输油管线 1 +x:1 +导演奖 1 +x:1 +侠气 1 +x:1 +欠税款 1 +x:1 +要点 1 +x:1 +春苗 1 +x:1 +内架 1 +x:1 +纪要 1 +x:1 +涨落不一 1 +x:1 +农工委 1 +x:1 +结核病 1 +x:1 +选聘 1 +x:1 +灵气 1 +x:1 +卸车 1 +x:1 +封里 1 +x:1 +处女地 1 +x:1 +试映式 1 +x:1 +二产 1 +x:1 +海林市 1 +x:1 +春茶 1 +x:1 +世纪性 1 +x:1 +因材施教 1 +x:1 +内景 1 +x:1 +断章取义 1 +x:1 +瞒上欺下 1 +x:1 +抚恤 1 +x:1 +出口量 1 +x:1 +公驴 1 +x:1 +纪行 1 +x:1 +错别字 1 +x:1 +圣诞树 1 +x:1 +治吏 1 +x:1 +春茗 1 +x:1 +永磁 1 +x:1 +菩萨 1 +x:1 +河道化 1 +x:1 +趋长避短 1 +x:1 +走马看花 1 +x:1 +牛瘟 1 +x:1 +一把子 1 +x:1 +监评部 1 +x:1 +双拥办 1 +x:1 +千夫所指 1 +x:1 +春草 1 +x:1 +艰苦朴素 1 +x:1 +管理所 1 +x:1 +算命 1 +x:1 +歪风邪气 1 +x:1 +春荒 1 +x:1 +致电 1 +x:1 +渗 11 +x:11 +心慈面软 1 +x:1 +笋 3 +x:3 +鬼脸 1 +x:1 +补天浴日 1 +x:1 +驾驭 1 +x:1 +鳌峰 1 +x:1 +置诸高阁 1 +x:1 +去路 1 +x:1 +弘法 1 +x:1 +物化室 1 +x:1 +彬彬有礼 1 +x:1 +沃尔特 1 +x:1 +盐场 1 +x:1 +净价 1 +x:1 +防弹车 1 +x:1 +爱尔兰队 1 +x:1 +小吃摊儿 1 +x:1 +范围 1 +x:1 +机动科 1 +x:1 +用纸 1 +x:1 +外事 1 +x:1 +用线 1 +x:1 +全运会 1 +x:1 +俄新社 1 +x:1 +成功者 1 +x:1 +链状 1 +x:1 +贫困者 1 +x:1 +状元楼 1 +x:1 +温和派 1 +x:1 +云贵川 1 +x:1 +沧桑史 1 +x:1 +假酒案 1 +x:1 +发黑 1 +x:1 +乡镇 1 +x:1 +春菊 1 +x:1 +商务部长 1 +x:1 +技术性 1 +x:1 +春菇 1 +x:1 +示踪原子 1 +x:1 +父辈 1 +x:1 +少年报 1 +x:1 +发黄 1 +x:1 +翁布里亚 1 +x:1 +牛皮 1 +x:1 +油耗 1 +x:1 +手头紧 1 +x:1 +自贸区 1 +x:1 +台港澳侨 1 +x:1 +托克托县 1 +x:1 +清漆 1 +x:1 +重力场 1 +x:1 +刘少奇 1 +x:1 +世纪末 1 +x:1 +托生 1 +x:1 +料钟 1 +x:1 +宋人 1 +x:1 +泡沫剂 1 +x:1 +北固碾村 1 +x:1 +雏鸟 1 +x:1 +机械车 1 +x:1 +腾鳌 1 +x:1 +旧观 1 +x:1 +中色 1 +x:1 +深褐色 1 +x:1 +挨整 1 +x:1 +七星人 1 +x:1 +油菜花 1 +x:1 +科长 1 +x:1 +发饰 1 +x:1 +背运 1 +x:1 +玛卡鲁峰 1 +x:1 +风雪交加 1 +x:1 +著名 1 +x:1 +强迫症 1 +x:1 +推广会 1 +x:1 +华石镇 1 +x:1 +阳光厅 1 +x:1 +发货票 1 +x:1 +创意者 1 +x:1 +凭证式 1 +x:1 +救亡 1 +x:1 +宝林乡 1 +x:1 +盐城市 1 +x:1 +炼油厂 1 +x:1 +重力坝 1 +x:1 +脱落 1 +x:1 +中航 1 +x:1 +湘西 1 +x:1 +非公司制 1 +x:1 +财务部 1 +x:1 +再会 1 +x:1 +吵闹声 1 +x:1 +屯昌 1 +x:1 +昇 3 +x:3 +白庄村 1 +x:1 +杉竹林片 1 +x:1 +名记者 1 +x:1 +决一雌雄 1 +x:1 +基藏书库 1 +x:1 +张北县 1 +x:1 +凿子 1 +x:1 +封妻荫子 1 +x:1 +围困战 1 +x:1 +筏型 1 +x:1 +执黑 1 +x:1 +毛驴 1 +x:1 +烟草业 1 +x:1 +沼地 1 +x:1 +原由 1 +x:1 +素描 1 +x:1 +卸装 1 +x:1 +超大型 1 +x:1 +低洼地 1 +x:1 +疲劳感 1 +x:1 +义捐 1 +x:1 +并存 1 +x:1 +契合 1 +x:1 +吸墨纸 1 +x:1 +有哭有闹 1 +x:1 +救灾车 1 +x:1 +轻灵 1 +x:1 +娄山关 1 +x:1 +主食品 1 +x:1 +更戛乡 1 +x:1 +新福村 1 +x:1 +猛士 1 +x:1 +剧联 1 +x:1 +黄梅歌 1 +x:1 +筏基 1 +x:1 +划转 1 +x:1 +为时尚早 1 +x:1 +欲哭无泪 1 +x:1 +月儿 1 +x:1 +抛石 1 +x:1 +发行站 1 +x:1 +运管员 1 +x:1 +油气井 1 +x:1 +扭矩 1 +x:1 +草屋 1 +x:1 +谐调性 1 +x:1 +理所应当 1 +x:1 +千秋万载 1 +x:1 +迫切 1 +x:1 +念念不忘 1 +x:1 +单耳刀儿 1 +x:1 +经济学 1 +x:1 +铸工 1 +x:1 +盖世太保 1 +x:1 +隐秘性 1 +x:1 +小雪 1 +x:1 +不动声色 1 +x:1 +成绩 1 +x:1 +水流声 1 +x:1 +序号 1 +x:1 +琦 29 +x:29 +乌斯怀亚 1 +x:1 +该镇 1 +x:1 +小雨 1 +x:1 +胸臆 1 +x:1 +降压 1 +x:1 +动脉硬化 1 +x:1 +陆院 1 +x:1 +命令式 1 +x:1 +教卫委 1 +x:1 +子孙后代 1 +x:1 +夸 35 +x:35 +再也 1 +x:1 +透风窗 1 +x:1 +爆炸案 1 +x:1 +社会性 1 +x:1 +临管线 1 +x:1 +泡沫化 1 +x:1 +无隙可乘 1 +x:1 +渔灯 1 +x:1 +春蕾 1 +x:1 +意 335 +x:335 +界牌岭 1 +x:1 +照明灯 1 +x:1 +扶摇直上 1 +x:1 +捕食 1 +x:1 +放飞 1 +x:1 +极大 1 +x:1 +再不 1 +x:1 +西学东渐 1 +x:1 +用砖 1 +x:1 +新蔡县 1 +x:1 +吐蕃 1 +x:1 +竹帘画 1 +x:1 +大肉 1 +x:1 +胸膜 1 +x:1 +此症 1 +x:1 +吐蕊 1 +x:1 +空 156 +x:156 +人情费 1 +x:1 +此病 1 +x:1 +内情 1 +x:1 +胸腹 1 +x:1 +不瞒您说 1 +x:1 +鬼蜮 1 +x:1 +常规战争 1 +x:1 +相待 1 +x:1 +浪涛不再 1 +x:1 +封面 1 +x:1 +陶片 1 +x:1 +产妇 1 +x:1 +献血 1 +x:1 +无价之宝 1 +x:1 +锚泊点 1 +x:1 +撰稿人 1 +x:1 +副厅级 1 +x:1 +评述 1 +x:1 +义正辞严 1 +x:1 +评比式 1 +x:1 +胸脯 1 +x:1 +踢踢 1 +x:1 +快门儿 1 +x:1 +绑架者 1 +x:1 +私盐 1 +x:1 +炭化 1 +x:1 +苹果花 1 +x:1 +中猪 1 +x:1 +星工场 1 +x:1 +联络处 1 +x:1 +天水市 1 +x:1 +少先队 1 +x:1 +列表 1 +x:1 +久长 1 +x:1 +维也纳 1 +x:1 +全神贯注 1 +x:1 +托瓶 1 +x:1 +优生 1 +x:1 +倚重 1 +x:1 +旧说 1 +x:1 +糖锅 1 +x:1 +少年村 1 +x:1 +副高 1 +x:1 +该院 1 +x:1 +劳动模范 1 +x:1 +自治 1 +x:1 +科大 1 +x:1 +点火率 1 +x:1 +时间差 1 +x:1 +批驳 1 +x:1 +加油添醋 1 +x:1 +旧诗 1 +x:1 +神木 1 +x:1 +馥 1 +x:1 +油藏 1 +x:1 +驻军法 1 +x:1 +私用 1 +x:1 +真知灼见 1 +x:1 +久久 1 +x:1 +词谱 1 +x:1 +阿维尼翁 1 +x:1 +邗江县 1 +x:1 +廊门 1 +x:1 +热农大 1 +x:1 +龙凤丹 1 +x:1 +觅子店乡 1 +x:1 +德赛 1 +x:1 +纳税率 1 +x:1 +中考 1 +x:1 +凄清 1 +x:1 +北南方 1 +x:1 +毛额 1 +x:1 +中耕 1 +x:1 +鳌头 1 +x:1 +海事 1 +x:1 +有幸 1 +x:1 +战略办 1 +x:1 +料事如神 1 +x:1 +素愿 1 +x:1 +低龄化 1 +x:1 +出栏数 1 +x:1 +港森牌 1 +x:1 +隐隐作痛 1 +x:1 +管理权 1 +x:1 +产婆 1 +x:1 +该队 1 +x:1 +解题 1 +x:1 +中耳 1 +x:1 +井冈山市 1 +x:1 +解颐 1 +x:1 +花天酒地 1 +x:1 +贤者 1 +x:1 +排他性 1 +x:1 +申购单 1 +x:1 +巴尔扎克 1 +x:1 +勘察者 1 +x:1 +浑源县 1 +x:1 +谗 2 +x:2 +神乎其神 1 +x:1 +岩浆岩 1 +x:1 +引人注目 1 +x:1 +工商会 1 +x:1 +闲来之笔 1 +x:1 +相去甚远 1 +x:1 +返还权 1 +x:1 +入选率 1 +x:1 +春蚕 1 +x:1 +内援 1 +x:1 +衙署 1 +x:1 +火眼金睛 1 +x:1 +嫂夫人 1 +x:1 +机动粮 1 +x:1 +韩方 1 +x:1 +野猪 1 +x:1 +小学校 1 +x:1 +换换 1 +x:1 +悲天悯人 1 +x:1 +用箱 1 +x:1 +纵情山水 1 +x:1 +编撰者 1 +x:1 +痒 3 +x:3 +暖暖 1 +x:1 +癸 1 +x:1 +觚 1 +x:1 +耍笔杆 1 +x:1 +秕糠 1 +x:1 +个性化 1 +x:1 +建议书 1 +x:1 +神清气爽 1 +x:1 +木椁 1 +x:1 +并处 1 +x:1 +科委 1 +x:1 +酩酊大醉 1 +x:1 +内陆海 1 +x:1 +中肯 1 +x:1 +铸币 1 +x:1 +线装书 1 +x:1 +此理 1 +x:1 +暗送秋波 1 +x:1 +范县 1 +x:1 +液化气所 1 +x:1 +明眼人 1 +x:1 +善意 1 +x:1 +天文社 1 +x:1 +理财组 1 +x:1 +中腔 1 +x:1 +汗珠儿 1 +x:1 +野狼 1 +x:1 +数不胜数 1 +x:1 +如梦如幻 1 +x:1 +月子病 1 +x:1 +尊师重教 1 +x:1 +姬百合塔 1 +x:1 +大篷车 1 +x:1 +情随事迁 1 +x:1 +封门 1 +x:1 +封闭 1 +x:1 +缩砂密 1 +x:1 +泄密 1 +x:1 +巡道 1 +x:1 +盆口 1 +x:1 +抚摸 1 +x:1 +绿油油 1 +x:1 +中腹 1 +x:1 +喝酒钱 1 +x:1 +野狗 1 +x:1 +奉贤县 1 +x:1 +素性 1 +x:1 +值机 1 +x:1 +黄冈市 1 +x:1 +中脑 1 +x:1 +内战 1 +x:1 +一波又起 1 +x:1 +萨尔瓦区 1 +x:1 +新名词 1 +x:1 +更衣室 1 +x:1 +拆穿 1 +x:1 +解馋 1 +x:1 +老关山 1 +x:1 +产子 1 +x:1 +森严 1 +x:1 +锦囊妙计 1 +x:1 +行云 1 +x:1 +擂台赛 1 +x:1 +野物 1 +x:1 +肋条 1 +x:1 +我会 1 +x:1 +取暖费 1 +x:1 +极富 1 +x:1 +课堂 1 +x:1 +动量矩 1 +x:1 +消夏 1 +x:1 +陶灶 1 +x:1 +解饱 1 +x:1 +换房 1 +x:1 +唱词 1 +x:1 +封镜 1 +x:1 +工商业 1 +x:1 +吊袜带 1 +x:1 +客运处 1 +x:1 +直接税 1 +x:1 +极目眺望 1 +x:1 +舞影 1 +x:1 +消失 1 +x:1 +画中画 1 +x:1 +火箭炮 1 +x:1 +佝偻 1 +x:1 +野牛 1 +x:1 +枣林 1 +x:1 +封锁 1 +x:1 +拱体 1 +x:1 +矽肺病 1 +x:1 +发髻 1 +x:1 +肋木 1 +x:1 +吊放 1 +x:1 +另有所指 1 +x:1 +托盘 1 +x:1 +从容就义 1 +x:1 +结算科 1 +x:1 +牛犊 1 +x:1 +票额 1 +x:1 +佛殿 1 +x:1 +肠胃病 1 +x:1 +马后炮 1 +x:1 +战略区 1 +x:1 +闻风而动 1 +x:1 +退 254 +x:254 +老八龙桥 1 +x:1 +瞅 22 +x:22 +店堂 1 +x:1 +专业班 1 +x:1 +加快 1 +x:1 +轻油 1 +x:1 +旧闻 1 +x:1 +咖啡吧 1 +x:1 +推销商 1 +x:1 +未饥先食 1 +x:1 +督查室 1 +x:1 +去除 1 +x:1 +制度法 1 +x:1 +废 58 +x:58 +渔洞 1 +x:1 +该行 1 +x:1 +邕江 1 +x:1 +佳纸 1 +x:1 +胸鳍 1 +x:1 +点心 1 +x:1 +山林田土 1 +x:1 +私欲 1 +x:1 +侠盗 1 +x:1 +音响版 1 +x:1 +亚龙湾 1 +x:1 +洞口 1 +x:1 +枣研 1 +x:1 +贱民 1 +x:1 +摩文仁 1 +x:1 +使馆区 1 +x:1 +刘家塔镇 1 +x:1 +词调 1 +x:1 +显示屏 1 +x:1 +两口儿 1 +x:1 +降价 1 +x:1 +佛理 1 +x:1 +金缕玉衣 1 +x:1 +柳新乡 1 +x:1 +算作 1 +x:1 +幸运卡 1 +x:1 +种类 1 +x:1 +克里特岛 1 +x:1 +指示剂 1 +x:1 +校内外 1 +x:1 +商船 1 +x:1 +催化剂液 1 +x:1 +素缎 1 +x:1 +府治 1 +x:1 +处警 1 +x:1 +怒视 1 +x:1 +力学 1 +x:1 +牛津 1 +x:1 +误车 1 +x:1 +会议员 1 +x:1 +迫使 1 +x:1 +中黄 1 +x:1 +炒家 1 +x:1 +列销 1 +x:1 +种粮 1 +x:1 +用时 1 +x:1 +精彩绝伦 1 +x:1 +降临 1 +x:1 +盐花 1 +x:1 +混水摸鱼 1 +x:1 +考勤钟 1 +x:1 +题字 1 +x:1 +鸟 142 +x:142 +成本价 1 +x:1 +悠 1 +x:1 +卡片 1 +x:1 +经纶天下 1 +x:1 +油魁 1 +x:1 +抗灾力 1 +x:1 +聚氨乙烯 1 +x:1 +毛虾 1 +x:1 +琼脂 1 +x:1 +周至 1 +x:1 +毛虫 1 +x:1 +村舍 1 +x:1 +港人 1 +x:1 +扎加洛 1 +x:1 +脱颖 1 +x:1 +敷药 1 +x:1 +留言 1 +x:1 +轻汽 1 +x:1 +舟子 1 +x:1 +正前方 1 +x:1 +奸 2 +x:2 +加强 1 +x:1 +唱针 1 +x:1 +临沂市 1 +x:1 +砖房 1 +x:1 +春风 1 +x:1 +阿城县 1 +x:1 +马刺队 1 +x:1 +文化园 1 +x:1 +复写 1 +x:1 +廉价 1 +x:1 +浑沌一片 1 +x:1 +维 25 +x:25 +阿劳龟 1 +x:1 +幽幽森森 1 +x:1 +基层司 1 +x:1 +池州 1 +x:1 +歧视性 1 +x:1 +南水峪村 1 +x:1 +公司制 1 +x:1 +文化圈 1 +x:1 +从业者 1 +x:1 +妇科 1 +x:1 +粉 17 +x:17 +区带 1 +x:1 +发落 1 +x:1 +趁热打铁 1 +x:1 +主河道 1 +x:1 +年轻气盛 1 +x:1 +发行期 1 +x:1 +啧有烦言 1 +x:1 +耷拉 1 +x:1 +渔民 1 +x:1 +操纵者 1 +x:1 +封诰 1 +x:1 +稀缺 1 +x:1 +榻 1 +x:1 +沃尔 1 +x:1 +宿将 1 +x:1 +加座 1 +x:1 +牛气 1 +x:1 +戚戚然 1 +x:1 +结算权 1 +x:1 +金口河区 1 +x:1 +骨质增生 1 +x:1 +诚聘 1 +x:1 +白菜苔 1 +x:1 +穿甲弹 1 +x:1 +蕴藏量 1 +x:1 +牙石 1 +x:1 +概略 1 +x:1 +诋毁 1 +x:1 +狂欢 1 +x:1 +大洼县 1 +x:1 +旧钞 1 +x:1 +全球星 1 +x:1 +龙舟节 1 +x:1 +核弹 1 +x:1 +青铜峡路 1 +x:1 +凄然 1 +x:1 +再则 1 +x:1 +再创 1 +x:1 +卡尔多夫 1 +x:1 +尼日尔河 1 +x:1 +合法性 1 +x:1 +揭发者 1 +x:1 +打气筒 1 +x:1 +腾腾 1 +x:1 +轻活 1 +x:1 +迫于 1 +x:1 +少存少贷 1 +x:1 +先行 1 +x:1 +社会系 1 +x:1 +行辈 1 +x:1 +极负盛誉 1 +x:1 +信任票 1 +x:1 +缝制者 1 +x:1 +聚焦 1 +x:1 +金銮殿 1 +x:1 +五笔字 1 +x:1 +空心板梁 1 +x:1 +臭名远扬 1 +x:1 +燃机 1 +x:1 +伊塞克湖 1 +x:1 +利欲熏心 1 +x:1 +首钢队 1 +x:1 +檀香木 1 +x:1 +面 504 +x:504 +文化城 1 +x:1 +印刷费 1 +x:1 +斜射 1 +x:1 +专机组 1 +x:1 +大苏打 1 +x:1 +羊道 1 +x:1 +轻浮 1 +x:1 +恶作剧 1 +x:1 +租售房 1 +x:1 +三缺一 1 +x:1 +鬼魔 1 +x:1 +歧 2 +x:2 +迫令 1 +x:1 +降低 1 +x:1 +过目成诵 1 +x:1 +称 857 +x:857 +鬼魅 1 +x:1 +鬼魂 1 +x:1 +置地 1 +x:1 +风吹草动 1 +x:1 +一班人 1 +x:1 +埋没 1 +x:1 +云鹤乡 1 +x:1 +封装 1 +x:1 +聚碳酸酯 1 +x:1 +加工 1 +x:1 +党龄 1 +x:1 +要案 1 +x:1 +办事人 1 +x:1 +施工点 1 +x:1 +发蜡 1 +x:1 +厢房 1 +x:1 +受益国 1 +x:1 +甚 175 +x:175 +专储粮 1 +x:1 +技术科 1 +x:1 +殷商 1 +x:1 +高温作业 1 +x:1 +非工业 1 +x:1 +赊销 1 +x:1 +用材 1 +x:1 +卸磨杀驴 1 +x:1 +汉学者 1 +x:1 +忍耐 1 +x:1 +机动性 1 +x:1 +用权 1 +x:1 +加州 1 +x:1 +工商司 1 +x:1 +和平新党 1 +x:1 +评选 1 +x:1 +保险费率 1 +x:1 +创史人 1 +x:1 +邦政府 1 +x:1 +交响曲 1 +x:1 +内缘 1 +x:1 +稍纵即逝 1 +x:1 +梅坡村 1 +x:1 +缆沟 1 +x:1 +欺行霸市 1 +x:1 +净土 1 +x:1 +无关紧要 1 +x:1 +文化周 1 +x:1 +小米面 1 +x:1 +无利可图 1 +x:1 +清扫率 1 +x:1 +巾帼英雄 1 +x:1 +利显性 1 +x:1 +油香 1 +x:1 +左邻右舍 1 +x:1 +刺儿 1 +x:1 +克拉苏 1 +x:1 +蟹 5 +x:5 +发货权 1 +x:1 +臆断 1 +x:1 +择善而用 1 +x:1 +生死荣辱 1 +x:1 +北导堤 1 +x:1 +续编 1 +x:1 +油饼 1 +x:1 +伦敦 1 +x:1 +倚赖 1 +x:1 +集中营 1 +x:1 +秘不示人 1 +x:1 +应运而起 1 +x:1 +显示度 1 +x:1 +德量 1 +x:1 +拱券 1 +x:1 +德里 1 +x:1 +珠海 1 +x:1 +规章制度 1 +x:1 +作品选 1 +x:1 +寓舍 1 +x:1 +辅导书 1 +x:1 +范例 1 +x:1 +桅杆 1 +x:1 +咖啡园 1 +x:1 +咖啡因 1 +x:1 +凄苦 1 +x:1 +双程证 1 +x:1 +加强连 1 +x:1 +肠绒毛 1 +x:1 +瓦房店市 1 +x:1 +空投 1 +x:1 +悬置 1 +x:1 +刘家圪瘩 1 +x:1 +大涧村 1 +x:1 +吸毒者 1 +x:1 +离骚 1 +x:1 +跪 44 +x:44 +六 995 +x:995 +抄写 1 +x:1 +北方局 1 +x:1 +题头 1 +x:1 +刘营村 1 +x:1 +犁 52 +x:52 +圆滚滚 1 +x:1 +锄 10 +x:10 +校名 1 +x:1 +存在物 1 +x:1 +留观 1 +x:1 +苯 4 +x:4 +殷周 1 +x:1 +渔港 1 +x:1 +燃料 1 +x:1 +前思后想 1 +x:1 +踉跄 1 +x:1 +经贸团 1 +x:1 +旧雨 1 +x:1 +非工会 1 +x:1 +勿忘草 1 +x:1 +绩效 1 +x:1 +糯稻 1 +x:1 +荒秽 1 +x:1 +至理名言 1 +x:1 +冶金焦 1 +x:1 +下榻地 1 +x:1 +湘阴 1 +x:1 +遭到 1 +x:1 +力塑 1 +x:1 +氟哌酸 1 +x:1 +无穷小 1 +x:1 +血块 1 +x:1 +神差鬼使 1 +x:1 +专业点 1 +x:1 +甜滋滋 1 +x:1 +关东军 1 +x:1 +偶然性 1 +x:1 +高潮 1 +x:1 +伤风败俗 1 +x:1 +钻心 1 +x:1 +屯积 1 +x:1 +处女作 1 +x:1 +糖衣 1 +x:1 +续续 1 +x:1 +轨 18 +x:18 +点心餐 1 +x:1 +郭 631 +x:631 +德选 1 +x:1 +醋酸纤维 1 +x:1 +协会化 1 +x:1 +酸厂 1 +x:1 +区属 1 +x:1 +冰天雪地 1 +x:1 +乔庄 1 +x:1 +种群 1 +x:1 +政工部 1 +x:1 +善 108 +x:108 +拱北 1 +x:1 +苦瓜 1 +x:1 +防洪渠 1 +x:1 +钢性 1 +x:1 +茶几 1 +x:1 +内绘 1 +x:1 +赶海 1 +x:1 +列队 1 +x:1 +嫌少者 1 +x:1 +勘查业 1 +x:1 +泰西村 1 +x:1 +姊妹饭 1 +x:1 +斤 116 +x:116 +水洼地 1 +x:1 +令堂 1 +x:1 +红海州 1 +x:1 +种羊 1 +x:1 +店家 1 +x:1 +燃放 1 +x:1 +轻印刷 1 +x:1 +灵璧 1 +x:1 +金家庄区 1 +x:1 +栽 119 +x:119 +小榄镇 1 +x:1 +属员 1 +x:1 +入网证号 1 +x:1 +运筹学 1 +x:1 +鹊桥相会 1 +x:1 +侦查局 1 +x:1 +五星 1 +x:1 +野渡 1 +x:1 +任课 1 +x:1 +巨浪区 1 +x:1 +德城区 1 +x:1 +猛地 1 +x:1 +发行日 1 +x:1 +名鸟 1 +x:1 +御用 1 +x:1 +胜地 1 +x:1 +俨 1 +x:1 +点射 1 +x:1 +依归 1 +x:1 +点将 1 +x:1 +足不出户 1 +x:1 +内线 1 +x:1 +棒棒军 1 +x:1 +管理站 1 +x:1 +力士 1 +x:1 +小学生 1 +x:1 +巡警 1 +x:1 +湘鄂 1 +x:1 +雅意 1 +x:1 +来兴府 1 +x:1 +谐 5 +x:5 +实用菌 1 +x:1 +党首 1 +x:1 +西敏寺 1 +x:1 +齿垢 1 +x:1 +加密 1 +x:1 +白兰花 1 +x:1 +应诺 1 +x:1 +勾当 1 +x:1 +犯 161 +x:161 +华盛顿 1 +x:1 +维吾尔 1 +x:1 +舌下神经 1 +x:1 +托派 1 +x:1 +源源不绝 1 +x:1 +灵猫 1 +x:1 +长方脸 1 +x:1 +超强度 1 +x:1 +不易之论 1 +x:1 +做梦 1 +x:1 +发腻 1 +x:1 +滑翔机 1 +x:1 +来日方长 1 +x:1 +枣泥 1 +x:1 +加害 1 +x:1 +科技点 1 +x:1 +五彩纷呈 1 +x:1 +绕远儿 1 +x:1 +置办 1 +x:1 +啖 3 +x:3 +素笺 1 +x:1 +加宽 1 +x:1 +微型 1 +x:1 +海平面 1 +x:1 +渔火 1 +x:1 +批号 1 +x:1 +金銮湾 1 +x:1 +勾引 1 +x:1 +忏悔录 1 +x:1 +事业心 1 +x:1 +擦鞋业 1 +x:1 +用意 1 +x:1 +边疆史 1 +x:1 +木栓 1 +x:1 +行辕门 1 +x:1 +作品集 1 +x:1 +褥子 1 +x:1 +点燃者 1 +x:1 +陆运 1 +x:1 +连续性 1 +x:1 +笔录 1 +x:1 +慢步 1 +x:1 +竹凉席 1 +x:1 +内秀 1 +x:1 +沟沟卡卡 1 +x:1 +文化力 1 +x:1 +对口相声 1 +x:1 +私开滥挖 1 +x:1 +高天行云 1 +x:1 +自然力 1 +x:1 +内科 1 +x:1 +中高 1 +x:1 +毛色 1 +x:1 +淡青色 1 +x:1 +特产税 1 +x:1 +住院处 1 +x:1 +巡诊 1 +x:1 +先起 1 +x:1 +牛槽 1 +x:1 +安琪儿 1 +x:1 +城建局 1 +x:1 +九屋乡 1 +x:1 +小至中雨 1 +x:1 +点子 1 +x:1 +慰问者 1 +x:1 +山茶树 1 +x:1 +边疆区 1 +x:1 +后半夜 1 +x:1 +泊宅编 1 +x:1 +原料粮 1 +x:1 +画像石 1 +x:1 +新桥村 1 +x:1 +玩物 1 +x:1 +双幅 1 +x:1 +抛物线 1 +x:1 +卷数 1 +x:1 +新增 1 +x:1 +发自 1 +x:1 +发臭 1 +x:1 +教工委 1 +x:1 +贡品 1 +x:1 +大自在图 1 +x:1 +环绕速度 1 +x:1 +工农红军 1 +x:1 +摄像机 1 +x:1 +孵 5 +x:5 +玩牌 1 +x:1 +先贤 1 +x:1 +押解 1 +x:1 +临川市 1 +x:1 +周转房 1 +x:1 +将 15137 +x:15137 +一·二八 1 +x:1 +混委会 1 +x:1 +玩玩 1 +x:1 +掏腰包 1 +x:1 +旧郡 1 +x:1 +留连 1 +x:1 +冬至线 1 +x:1 +大鼓子 1 +x:1 +扰乱 1 +x:1 +常青草 1 +x:1 +氦 5 +x:5 +一传手 1 +x:1 +相辅而行 1 +x:1 +疫 1 +x:1 +糊墙纸 1 +x:1 +逮 11 +x:11 +文化区 1 +x:1 +睫状体 1 +x:1 +死区 1 +x:1 +油黑 1 +x:1 +络腮胡子 1 +x:1 +故态复萌 1 +x:1 +党风 1 +x:1 +宿根 1 +x:1 +神风洞 1 +x:1 +铀矿 1 +x:1 +生气盎然 1 +x:1 +油麦 1 +x:1 +灵牌 1 +x:1 +不合格者 1 +x:1 +炮火 1 +x:1 +创办人 1 +x:1 +新闻办 1 +x:1 +朱漆 1 +x:1 +头盔厂 1 +x:1 +古代史 1 +x:1 +五交化 1 +x:1 +你来我往 1 +x:1 +殷切 1 +x:1 +叙谈会 1 +x:1 +有意思 1 +x:1 +示 38 +x:38 +资格赛 1 +x:1 +莽撞 1 +x:1 +重点课 1 +x:1 +池塘 1 +x:1 +首长 1 +x:1 +糯米 1 +x:1 +殿堂 1 +x:1 +净值 1 +x:1 +中标者 1 +x:1 +该路 1 +x:1 +发育 1 +x:1 +绿林好汉 1 +x:1 +牛棚 1 +x:1 +畅通 1 +x:1 +销售率 1 +x:1 +文化厅 1 +x:1 +催花量 1 +x:1 +音译词 1 +x:1 +三十三分 1 +x:1 +种禽 1 +x:1 +西海镇 1 +x:1 +灵犀 1 +x:1 +农科园 1 +x:1 +谋篇 1 +x:1 +农民起义 1 +x:1 +座位号 1 +x:1 +趣味性 1 +x:1 +翻整 1 +x:1 +狱政 1 +x:1 +光电磁 1 +x:1 +力度 1 +x:1 +勿庸置疑 1 +x:1 +钻机 1 +x:1 +排练室 1 +x:1 +葵花籽 1 +x:1 +云岭乡 1 +x:1 +幸喜 1 +x:1 +捍疆卫国 1 +x:1 +油鸡 1 +x:1 +镗床 1 +x:1 +独奏家 1 +x:1 +管理系 1 +x:1 +岷县 1 +x:1 +重力仪 1 +x:1 +五女峰 1 +x:1 +满怀信心 1 +x:1 +安得拉邦 1 +x:1 +发胖 1 +x:1 +种种 1 +x:1 +桔红色 1 +x:1 +风疹块 1 +x:1 +水肿病 1 +x:1 +红薯田 1 +x:1 +穗状花序 1 +x:1 +坎帕拉 1 +x:1 +文化史 1 +x:1 +抛洒 1 +x:1 +要求 1 +x:1 +垂 30 +x:30 +沙捞越州 1 +x:1 +鸿图 1 +x:1 +奠基者 1 +x:1 +捕获 1 +x:1 +蒂罗尔 1 +x:1 +生老病死 1 +x:1 +相敬如宾 1 +x:1 +庆功曲 1 +x:1 +墨如寺 1 +x:1 +园艺型 1 +x:1 +单句 1 +x:1 +战和 1 +x:1 +著书 1 +x:1 +方顺桥乡 1 +x:1 +酱缸 1 +x:1 +贡嘎 1 +x:1 +工商型 1 +x:1 +污染度 1 +x:1 +下决心 1 +x:1 +官室长 1 +x:1 +潮田街 1 +x:1 +哀思 1 +x:1 +胸骨 1 +x:1 +致富梦 1 +x:1 +木棍 1 +x:1 +先辈 1 +x:1 +净化 1 +x:1 +苯酚 1 +x:1 +笑呵呵 1 +x:1 +开阔地 1 +x:1 +巴尔各扎 1 +x:1 +无穷大 1 +x:1 +钺 3 +x:3 +佛爷 1 +x:1 +年运量 1 +x:1 +江津市 1 +x:1 +咕咚咕咚 1 +x:1 +山穷水尽 1 +x:1 +池子 1 +x:1 +任 1934 +x:1934 +卷柜 1 +x:1 +株洲县 1 +x:1 +成井 1 +x:1 +坐卧不安 1 +x:1 +侦查处 1 +x:1 +愁怀 1 +x:1 +契丹 1 +x:1 +长盛不衰 1 +x:1 +缪家村 1 +x:1 +春麦 1 +x:1 +卷末 1 +x:1 +两菜一油 1 +x:1 +洋缎 1 +x:1 +素称 1 +x:1 +实务性 1 +x:1 +厚此薄彼 1 +x:1 +匙 2 +x:2 +引潜 1 +x:1 +瞿家湾镇 1 +x:1 +骨膜炎 1 +x:1 +专业界 1 +x:1 +解职 1 +x:1 +福音 1 +x:1 +坐卧不宁 1 +x:1 +划锄 1 +x:1 +形象群 1 +x:1 +解聘 1 +x:1 +绽开 1 +x:1 +杜菜园 1 +x:1 +奥克兰港 1 +x:1 +引以为荣 1 +x:1 +滋生 1 +x:1 +耗费 1 +x:1 +陆路 1 +x:1 +哼唷 1 +x:1 +耗资 1 +x:1 +甘美 1 +x:1 +加大 1 +x:1 +原子团 1 +x:1 +多才多艺 1 +x:1 +罗马尼亚 1 +x:1 +报案人 1 +x:1 +党魁 1 +x:1 +党魂 1 +x:1 +一板一眼 1 +x:1 +私淑 1 +x:1 +玩火 1 +x:1 +中频 1 +x:1 +受益券 1 +x:1 +强台风 1 +x:1 +大鼓墩 1 +x:1 +点头 1 +x:1 +最强音 1 +x:1 +穿山越岭 1 +x:1 +露台 1 +x:1 +双港镇 1 +x:1 +惩办 1 +x:1 +淘气鬼 1 +x:1 +发菜 1 +x:1 +乌兰察布 1 +x:1 +恋爱观 1 +x:1 +力工 1 +x:1 +殿宇 1 +x:1 +暗蓝色 1 +x:1 +撒野 1 +x:1 +续签 1 +x:1 +种站 1 +x:1 +代销者 1 +x:1 +哼哼 1 +x:1 +出口路 1 +x:1 +李庄镇 1 +x:1 +吸贩毒 1 +x:1 +脑缺氧性 1 +x:1 +甘井子 1 +x:1 +著作 1 +x:1 +双泾村 1 +x:1 +无极县 1 +x:1 +臆想 1 +x:1 +中饭 1 +x:1 +二不休 1 +x:1 +陈屋村 1 +x:1 +巡行 1 +x:1 +封路 1 +x:1 +铁冲乡 1 +x:1 +总队长 1 +x:1 +咸咸的 1 +x:1 +代社长 1 +x:1 +残疾率 1 +x:1 +用房 1 +x:1 +大二环 1 +x:1 +鼻窦炎 1 +x:1 +洞庭湖畔 1 +x:1 +论证费 1 +x:1 +用户 1 +x:1 +久违 1 +x:1 +久远 1 +x:1 +体育场馆 1 +x:1 +卷曲 1 +x:1 +地黄 1 +x:1 +在校生 1 +x:1 +高丽纸 1 +x:1 +弃世 1 +x:1 +挤压 1 +x:1 +要津 1 +x:1 +净利 1 +x:1 +杖头木偶 1 +x:1 +帮倒忙 1 +x:1 +爽利 1 +x:1 +自愧不如 1 +x:1 +留足 1 +x:1 +发花 1 +x:1 +瑶乡 1 +x:1 +概率 1 +x:1 +万死一生 1 +x:1 +升任 1 +x:1 +颊 1 +x:1 +发芽 1 +x:1 +小金人 1 +x:1 +重孝 1 +x:1 +赵庄镇 1 +x:1 +张宅乡 1 +x:1 +黄兴路 1 +x:1 +蜜里调油 1 +x:1 +谋私 1 +x:1 +令尊 1 +x:1 +会议厅 1 +x:1 +统治权 1 +x:1 +埋植 1 +x:1 +咖啡厅 1 +x:1 +着色 1 +x:1 +该连 1 +x:1 +技术类 1 +x:1 +抗日救亡 1 +x:1 +人防办 1 +x:1 +驻留 1 +x:1 +续稿 1 +x:1 +土坷垃 1 +x:1 +大团圆 1 +x:1 +德钦 1 +x:1 +椒江区 1 +x:1 +私泄 1 +x:1 +细 201 +x:201 +拱坝 1 +x:1 +多汗症 1 +x:1 +择要 1 +x:1 +受益区 1 +x:1 +变 1115 +x:1115 +风媒花 1 +x:1 +专家号 1 +x:1 +用报 1 +x:1 +睦村 1 +x:1 +程控机 1 +x:1 +舟山 1 +x:1 +留学生司 1 +x:1 +伯利兹籍 1 +x:1 +收集员 1 +x:1 +电唱头 1 +x:1 +沙溪口组 1 +x:1 +渔政 1 +x:1 +分文不取 1 +x:1 +洞察 1 +x:1 +重孙 1 +x:1 +租赁站 1 +x:1 +刹车 1 +x:1 +发财 1 +x:1 +发货 1 +x:1 +敷设 1 +x:1 +兽药 1 +x:1 +技术班 1 +x:1 +疑团 1 +x:1 +小学组 1 +x:1 +中院 1 +x:1 +朱批 1 +x:1 +变化多端 1 +x:1 +星状灯 1 +x:1 +年长者 1 +x:1 +科企 1 +x:1 +大昭寺 1 +x:1 +棚房 1 +x:1 +埋暗 1 +x:1 +秘书长 1 +x:1 +流行性 1 +x:1 +实事求是 1 +x:1 +棚户 1 +x:1 +咿呀 1 +x:1 +夏候鸟 1 +x:1 +粳稻 1 +x:1 +红锌矿 1 +x:1 +正义性 1 +x:1 +发起 1 +x:1 +情急之下 1 +x:1 +毛躁 1 +x:1 +环流 1 +x:1 +中队 1 +x:1 +司局级 1 +x:1 +松墙子 1 +x:1 +倒手 1 +x:1 +咖啡屋 1 +x:1 +炒卖 1 +x:1 +心有余悸 1 +x:1 +目不交睫 1 +x:1 +胭脂红 1 +x:1 +下水道 1 +x:1 +全能运动 1 +x:1 +内画 1 +x:1 +宣明会 1 +x:1 +帽舌 1 +x:1 +峨铁 1 +x:1 +德雷克 1 +x:1 +任职 1 +x:1 +殷忧 1 +x:1 +墀 1 +x:1 +养老者 1 +x:1 +褥垫 1 +x:1 +工号牌 1 +x:1 +洞子 1 +x:1 +上半时 1 +x:1 +妙手 1 +x:1 +缓冲区 1 +x:1 +经不起 1 +x:1 +相形见绌 1 +x:1 +确非 1 +x:1 +内痔 1 +x:1 +军代表室 1 +x:1 +队 777 +x:777 +毋庸 1 +x:1 +阿特拉斯 1 +x:1 +溶解度 1 +x:1 +中雨 1 +x:1 +党锢 1 +x:1 +中雪 1 +x:1 +焱 6 +x:6 +客运业 1 +x:1 +并作 1 +x:1 +石膏矿 1 +x:1 +临川县 1 +x:1 +功莫大焉 1 +x:1 +臊 1 +x:1 +牛斗 1 +x:1 +丝瓜藤 1 +x:1 +大石桥 1 +x:1 +暖炉 1 +x:1 +徽派 1 +x:1 +经济人 1 +x:1 +舰只 1 +x:1 +绩溪 1 +x:1 +消乏 1 +x:1 +教导队 1 +x:1 +累死累活 1 +x:1 +商誉 1 +x:1 +赣县 1 +x:1 +内格罗河 1 +x:1 +进不起 1 +x:1 +含血喷人 1 +x:1 +询 2 +x:2 +副伤寒 1 +x:1 +滴滴涕 1 +x:1 +红血球 1 +x:1 +俄罗斯籍 1 +x:1 +题匾 1 +x:1 +直 253 +x:253 +顺口溜 1 +x:1 +物权法 1 +x:1 +装修队 1 +x:1 +狠狠心 1 +x:1 +兼并者 1 +x:1 +薪尽火传 1 +x:1 +八五年 1 +x:1 +麝香 1 +x:1 +科举 1 +x:1 +仰观 1 +x:1 +执警 1 +x:1 +极大值 1 +x:1 +种田 1 +x:1 +砖 86 +x:86 +加固 1 +x:1 +军 525 +x:525 +中非 1 +x:1 +村训 1 +x:1 +凿岩机 1 +x:1 +玉米饼 1 +x:1 +工商业者 1 +x:1 +排练场 1 +x:1 +恒久 1 +x:1 +地邻 1 +x:1 +重灾县 1 +x:1 +征粮 1 +x:1 +经济体 1 +x:1 +用汇 1 +x:1 +私房 1 +x:1 +陆良 1 +x:1 +盐山 1 +x:1 +维亚 1 +x:1 +咿唷 1 +x:1 +畈 2 +x:2 +缓酌 1 +x:1 +同树异枝 1 +x:1 +选民册 1 +x:1 +喜融融的 1 +x:1 +扭打 1 +x:1 +销售网 1 +x:1 +补充性 1 +x:1 +要挟 1 +x:1 +昂首挺胸 1 +x:1 +聚积 1 +x:1 +转接 1 +x:1 +毛边 1 +x:1 +美满村 1 +x:1 +喀麦隆 1 +x:1 +种畜 1 +x:1 +连战连捷 1 +x:1 +贵池市 1 +x:1 +抚爱 1 +x:1 +引人注意 1 +x:1 +净尽 1 +x:1 +率 192 +x:192 +赶来 1 +x:1 +八次全会 1 +x:1 +盘锦 1 +x:1 +环资委 1 +x:1 +力劝 1 +x:1 +限速 1 +x:1 +不来梅州 1 +x:1 +三维空间 1 +x:1 +旷世名作 1 +x:1 +纸马 1 +x:1 +艳阳 1 +x:1 +内瓤 1 +x:1 +勾勒 1 +x:1 +给付金 1 +x:1 +红九连 1 +x:1 +前臼齿 1 +x:1 +用法 1 +x:1 +负债者 1 +x:1 +中音 1 +x:1 +西吉县 1 +x:1 +北师大 1 +x:1 +维业 1 +x:1 +升 263 +x:263 +群艺馆 1 +x:1 +下屯乡 1 +x:1 +分党支部 1 +x:1 +科任 1 +x:1 +炒勺 1 +x:1 +护目镜 1 +x:1 +着重点 1 +x:1 +并举 1 +x:1 +立足未稳 1 +x:1 +捧 147 +x:147 +连续流 1 +x:1 +并不 1 +x:1 +总参谋部 1 +x:1 +簧片 1 +x:1 +商计 1 +x:1 +中东欧 1 +x:1 +并且 1 +x:1 +城外 1 +x:1 +商讨 1 +x:1 +准噶尔 1 +x:1 +商训 1 +x:1 +击鼓督阵 1 +x:1 +轻敌 1 +x:1 +推广奖 1 +x:1 +商街 1 +x:1 +捂住 1 +x:1 +调戏 1 +x:1 +腐蚀剂 1 +x:1 +炒买炒卖 1 +x:1 +手底下 1 +x:1 +岷山 1 +x:1 +炽热 1 +x:1 +李时珍 1 +x:1 +商行 1 +x:1 +矮寨镇 1 +x:1 +重灾 1 +x:1 +私愤 1 +x:1 +勾兑 1 +x:1 +见棱见角 1 +x:1 +棒垒球 1 +x:1 +产业 1 +x:1 +燃油 1 +x:1 +集散 1 +x:1 +吴 1929 +x:1929 +破碗 1 +x:1 +狂涛 1 +x:1 +炽烈 1 +x:1 +两口子 1 +x:1 +开拓者 1 +x:1 +随呼随到 1 +x:1 +千古不变 1 +x:1 +文化层 1 +x:1 +文化局 1 +x:1 +献县 1 +x:1 +内省 1 +x:1 +出乱子 1 +x:1 +轻曼 1 +x:1 +题写 1 +x:1 +有难必帮 1 +x:1 +摔 72 +x:72 +发车 1 +x:1 +力克 1 +x:1 +发轫 1 +x:1 +诏示 1 +x:1 +坞 1 +x:1 +上半期 1 +x:1 +营口市 1 +x:1 +现已 1 +x:1 +显示器 1 +x:1 +详详细细 1 +x:1 +山盟海誓 1 +x:1 +渔村 1 +x:1 +助跑 1 +x:1 +一发千钧 1 +x:1 +野果 1 +x:1 +上半月 1 +x:1 +迹 11 +x:11 +极为 1 +x:1 +电化学 1 +x:1 +松 142 +x:142 +张铁锤村 1 +x:1 +柳辛庄 1 +x:1 +七高八低 1 +x:1 +古雅 1 +x:1 +振振有词 1 +x:1 +留职 1 +x:1 +卷次 1 +x:1 +小时候 1 +x:1 +佛统 1 +x:1 +歼击 1 +x:1 +会议庭 1 +x:1 +发达 1 +x:1 +油酸 1 +x:1 +高鼻深目 1 +x:1 +毛豆 1 +x:1 +装饰性 1 +x:1 +中铝 1 +x:1 +后半场 1 +x:1 +促成 1 +x:1 +佛经 1 +x:1 +燃气 1 +x:1 +轻易 1 +x:1 +报界 1 +x:1 +汰 3 +x:3 +谈话 1 +x:1 +偕同 1 +x:1 +中银 1 +x:1 +原阳县 1 +x:1 +斜坡 1 +x:1 +架势 1 +x:1 +咖啡店 1 +x:1 +中铺 1 +x:1 +炕单儿 1 +x:1 +拈花惹草 1 +x:1 +资产阶级 1 +x:1 +极了 1 +x:1 +腐蚀力 1 +x:1 +掺假使杂 1 +x:1 +喋喋不休 1 +x:1 +谶语 1 +x:1 +文史系 1 +x:1 +久拖未决 1 +x:1 +伸长 1 +x:1 +杜仲树 1 +x:1 +出口者 1 +x:1 +参众两院 1 +x:1 +抚熨 1 +x:1 +解调 1 +x:1 +发还 1 +x:1 +地拉那 1 +x:1 +话剧院 1 +x:1 +腹痛 1 +x:1 +茫然 1 +x:1 +杜康酒 1 +x:1 +主教堂 1 +x:1 +辫 1 +x:1 +突 44 +x:44 +麻雀虽小 1 +x:1 +该药 1 +x:1 +试映会 1 +x:1 +谋略 1 +x:1 +邮展 1 +x:1 +赶早 1 +x:1 +搪瓷 1 +x:1 +错事 1 +x:1 +与 19851 +x:19851 +石首鱼 1 +x:1 +装修间 1 +x:1 +书物 1 +x:1 +协商会 1 +x:1 +油气业 1 +x:1 +冬至点 1 +x:1 +骗术 1 +x:1 +拒绝 1 +x:1 +夜工 1 +x:1 +画像砖 1 +x:1 +黑窝点 1 +x:1 +含绒量 1 +x:1 +浮翼 1 +x:1 +中长 1 +x:1 +寨子口 1 +x:1 +化学式 1 +x:1 +量力而行 1 +x:1 +信任率 1 +x:1 +中锋 1 +x:1 +做事 1 +x:1 +蜡渣子 1 +x:1 +悬灌梁 1 +x:1 +酋长 1 +x:1 +续盘 1 +x:1 +泥 49 +x:49 +力偶 1 +x:1 +客货车 1 +x:1 +上栗县 1 +x:1 +巴士式 1 +x:1 +单孔目 1 +x:1 +客货轮 1 +x:1 +微冻室 1 +x:1 +昌江 1 +x:1 +耗能 1 +x:1 +谋生 1 +x:1 +露底 1 +x:1 +点点头 1 +x:1 +寿宁县 1 +x:1 +党阀 1 +x:1 +扛回 1 +x:1 +一元化 1 +x:1 +一推双考 1 +x:1 +涤 3 +x:3 +污染区 1 +x:1 +产供 1 +x:1 +红巾起义 1 +x:1 +包庇罪 1 +x:1 +龙蛇混杂 1 +x:1 +承租者 1 +x:1 +私情 1 +x:1 +怒色 1 +x:1 +党际 1 +x:1 +有目共睹 1 +x:1 +能源系 1 +x:1 +池园 1 +x:1 +客货运 1 +x:1 +增订 1 +x:1 +献身 1 +x:1 +保险装置 1 +x:1 +核武器库 1 +x:1 +谵妄 1 +x:1 +湘黔 1 +x:1 +禁令 1 +x:1 +干干净净 1 +x:1 +大好人 1 +x:1 +内皮 1 +x:1 +点名 1 +x:1 +来历不明 1 +x:1 +外婆桥 1 +x:1 +订立 1 +x:1 +灰不溜秋 1 +x:1 +煤仓 1 +x:1 +日感迫切 1 +x:1 +毛货 1 +x:1 +店史 1 +x:1 +正气歌 1 +x:1 +少年犯 1 +x:1 +毛质 1 +x:1 +校园 1 +x:1 +胸部 1 +x:1 +异 45 +x:45 +属实 1 +x:1 +销售税 1 +x:1 +私有 1 +x:1 +店名 1 +x:1 +旋钮 1 +x:1 +加号 1 +x:1 +区区 1 +x:1 +糖蜜 1 +x:1 +露头 1 +x:1 +郭家乡 1 +x:1 +经贸委 1 +x:1 +蓝 143 +x:143 +根据 1 +x:1 +侦察兵 1 +x:1 +慰问袋 1 +x:1 +死鸡率 1 +x:1 +事业型 1 +x:1 +托收 1 +x:1 +露天 1 +x:1 +违章 1 +x:1 +宿愿 1 +x:1 +题型 1 +x:1 +偏安一隅 1 +x:1 +凉 23 +x:23 +跃身而起 1 +x:1 +桑给巴尔 1 +x:1 +托故 1 +x:1 +贡山 1 +x:1 +港上镇 1 +x:1 +石岩镇 1 +x:1 +甘甜 1 +x:1 +打哆嗦 1 +x:1 +聚糖 1 +x:1 +救难 1 +x:1 +茭道乡 1 +x:1 +店员 1 +x:1 +管理界 1 +x:1 +购货 1 +x:1 +愁眉锁眼 1 +x:1 +氛围 1 +x:1 +加压 1 +x:1 +虚套 1 +x:1 +懒汉 1 +x:1 +向着 1 +x:1 +汾阳路 1 +x:1 +加厚 1 +x:1 +地门 1 +x:1 +皮开肉绽 1 +x:1 +内焰 1 +x:1 +弛缓 1 +x:1 +素珠 1 +x:1 +点卯 1 +x:1 +地锚 1 +x:1 +判若两样 1 +x:1 +越共 1 +x:1 +赞成者 1 +x:1 +加印 1 +x:1 +区县 1 +x:1 +峨冠博带 1 +x:1 +轻轻松松 1 +x:1 +归置 1 +x:1 +舟山市 1 +x:1 +弦子 1 +x:1 +明察暗访 1 +x:1 +紫玉米 1 +x:1 +岔河镇 1 +x:1 +圣周末 1 +x:1 +森工 1 +x:1 +啄木鸟 1 +x:1 +贫困面 1 +x:1 +亢进症 1 +x:1 +视为畏途 1 +x:1 +太阳黑子 1 +x:1 +鸟市 1 +x:1 +空想 1 +x:1 +三苯锡 1 +x:1 +养老送终 1 +x:1 +天候 1 +x:1 +老气横秋 1 +x:1 +原委 1 +x:1 +难能可贵 1 +x:1 +火焰山 1 +x:1 +拒礼 1 +x:1 +珊 3 +x:3 +羽绒衣 1 +x:1 +初来者 1 +x:1 +伦次 1 +x:1 +钢枪 1 +x:1 +加区 1 +x:1 +自变量 1 +x:1 +瑛 21 +x:21 +户政科 1 +x:1 +彩扩部 1 +x:1 +顺 79 +x:79 +殿军 1 +x:1 +距平 1 +x:1 +就坡下驴 1 +x:1 +或是 1 +x:1 +恒产 1 +x:1 +卵 6 +x:6 +空情 1 +x:1 +发觉 1 +x:1 +殷实 1 +x:1 +殿内 1 +x:1 +吃偏饭 1 +x:1 +点化 1 +x:1 +发行款 1 +x:1 +真主党 1 +x:1 +佛祖 1 +x:1 +吆 1 +x:1 +村边 1 +x:1 +政策局 1 +x:1 +解读 1 +x:1 +气象所 1 +x:1 +雪连纸 1 +x:1 +解说 1 +x:1 +小人书 1 +x:1 +竹簧 1 +x:1 +制售者 1 +x:1 +桶装 1 +x:1 +吵醒 1 +x:1 +效能型 1 +x:1 +区分 1 +x:1 +南召县 1 +x:1 +商载 1 +x:1 +专业组 1 +x:1 +耳熟能详 1 +x:1 +瑞典化 1 +x:1 +题图 1 +x:1 +中高级 1 +x:1 +腾跃 1 +x:1 +崩决 1 +x:1 +区划 1 +x:1 +冲击钻 1 +x:1 +犯规 1 +x:1 +暂行 1 +x:1 +妇道人家 1 +x:1 +洞库 1 +x:1 +仍 2054 +x:2054 +农七师 1 +x:1 +入射角 1 +x:1 +脱销 1 +x:1 +地铁 1 +x:1 +雪莲 1 +x:1 +毒杂草 1 +x:1 +宿怨 1 +x:1 +阿城市 1 +x:1 +发表 1 +x:1 +婚 13 +x:13 +寿光市 1 +x:1 +万应灵丹 1 +x:1 +赠 76 +x:76 +党部 1 +x:1 +地铺 1 +x:1 +四十三分 1 +x:1 +峨金 1 +x:1 +文化学 1 +x:1 +赶排 1 +x:1 +按劳分配 1 +x:1 +牛性 1 +x:1 +洞庭 1 +x:1 +加力 1 +x:1 +惩处 1 +x:1 +宿怀 1 +x:1 +执迷 1 +x:1 +仰赖 1 +x:1 +加剧 1 +x:1 +离间 1 +x:1 +差不多 1 +x:1 +册亨县 1 +x:1 +老将队 1 +x:1 +临阵磨枪 1 +x:1 +不哼不哈 1 +x:1 +排练厅 1 +x:1 +同行 1 +x:1 +钥匙锁 1 +x:1 +文化宫 1 +x:1 +奥斯卡 1 +x:1 +可靠性 1 +x:1 +创巨痛深 1 +x:1 +玩笑 1 +x:1 +大声 1 +x:1 +文化室 1 +x:1 +盗车者 1 +x:1 +雷州市 1 +x:1 +鼓足干劲 1 +x:1 +棚架 1 +x:1 +红绳系足 1 +x:1 +莽汉 1 +x:1 +心海 1 +x:1 +恐慌 1 +x:1 +奶豆腐 1 +x:1 +再度 1 +x:1 +加利 1 +x:1 +酱瓜 1 +x:1 +野性 1 +x:1 +评比会 1 +x:1 +由明转暗 1 +x:1 +罗 1139 +x:1139 +鳖 9 +x:9 +血热型 1 +x:1 +净增 1 +x:1 +建房热 1 +x:1 +略阳 1 +x:1 +结构式 1 +x:1 +喘喘气 1 +x:1 +贻笑大方 1 +x:1 +遗传学家 1 +x:1 +假戏真做 1 +x:1 +与会国 1 +x:1 +聘任 1 +x:1 +徽标 1 +x:1 +雇用率 1 +x:1 +阳春砂 1 +x:1 +林业部 1 +x:1 +扭曲 1 +x:1 +工商局 1 +x:1 +总卡量 1 +x:1 +列项 1 +x:1 +堆龙德庆 1 +x:1 +油门 1 +x:1 +南林大 1 +x:1 +信访量 1 +x:1 +泡蘑菇 1 +x:1 +截瘫病 1 +x:1 +拜谒者 1 +x:1 +岗 147 +x:147 +苹果酱 1 +x:1 +链条 1 +x:1 +拉丁美州 1 +x:1 +用武 1 +x:1 +绿叶儿 1 +x:1 +春阳 1 +x:1 +春防 1 +x:1 +购车 1 +x:1 +跟 413 +x:413 +纷繁 1 +x:1 +河流乡 1 +x:1 +锲 9 +x:9 +毛裤 1 +x:1 +脱险 1 +x:1 +宅邸 1 +x:1 +喜从天降 1 +x:1 +村貌 1 +x:1 +人代会 1 +x:1 +贻害 1 +x:1 +防渗渠 1 +x:1 +金科玉律 1 +x:1 +亲临 1 +x:1 +比目鱼 1 +x:1 +草芙蓉 1 +x:1 +毛袜 1 +x:1 +一树了之 1 +x:1 +中途 1 +x:1 +商谈 1 +x:1 +中速 1 +x:1 +拱廊 1 +x:1 +常宁市 1 +x:1 +濡 1 +x:1 +舞人 1 +x:1 +砖坝 1 +x:1 +大开大合 1 +x:1 +离队 1 +x:1 +原子能部 1 +x:1 +委员会 1 +x:1 +加冕 1 +x:1 +消基会 1 +x:1 +黄金水道 1 +x:1 +同苦 1 +x:1 +三塔集镇 1 +x:1 +自主性 1 +x:1 +枣皮 1 +x:1 +加入 1 +x:1 +劈 20 +x:20 +埋怨 1 +x:1 +高血糖 1 +x:1 +栏 50 +x:50 +丹佛市 1 +x:1 +地震 1 +x:1 +溶雪剂 1 +x:1 +购进 1 +x:1 +滑雪服 1 +x:1 +加元 1 +x:1 +封闭疗法 1 +x:1 +星象学 1 +x:1 +抨 1 +x:1 +地霸 1 +x:1 +露宿 1 +x:1 +中部 1 +x:1 +满面红光 1 +x:1 +毛衣 1 +x:1 +瘪嘴 1 +x:1 +老相识 1 +x:1 +心灵手巧 1 +x:1 +欹 2 +x:2 +边缘科学 1 +x:1 +易地做官 1 +x:1 +白花蛇 1 +x:1 +牛排 1 +x:1 +垂头丧气 1 +x:1 +春雨 1 +x:1 +春雪 1 +x:1 +敲门声 1 +x:1 +纷纭 1 +x:1 +佛窟 1 +x:1 +轧花厂 1 +x:1 +纷纷 1 +x:1 +旒 1 +x:1 +运销 1 +x:1 +点儿 1 +x:1 +振振有辞 1 +x:1 +权术 1 +x:1 +春雷 1 +x:1 +灵秀 1 +x:1 +哺育 1 +x:1 +如日中天 1 +x:1 +辎重 1 +x:1 +经侦处 1 +x:1 +发话 1 +x:1 +渐食 1 +x:1 +取食机 1 +x:1 +地面 1 +x:1 +留落 1 +x:1 +荆芥 1 +x:1 +放大器 1 +x:1 +净宽 1 +x:1 +吐露 1 +x:1 +汤那屯 1 +x:1 +足印 1 +x:1 +高抬贵手 1 +x:1 +皇亲国戚 1 +x:1 +虚名 1 +x:1 +解解 1 +x:1 +渔户 1 +x:1 +包产户 1 +x:1 +意面 1 +x:1 +文化处 1 +x:1 +瞳孔 1 +x:1 +暑 5 +x:5 +超范围 1 +x:1 +再山 1 +x:1 +脔 1 +x:1 +污染型 1 +x:1 +滇剧 1 +x:1 +总决赛 1 +x:1 +遗传所 1 +x:1 +制锁业 1 +x:1 +地 15342 +x:15342 +棚改 1 +x:1 +安新县 1 +x:1 +水仙花头 1 +x:1 +关停并转 1 +x:1 +题咏 1 +x:1 +店址 1 +x:1 +阴阳历 1 +x:1 +亚利桑那 1 +x:1 +材 11 +x:11 +桂香新村 1 +x:1 +云遮雾障 1 +x:1 +卸任 1 +x:1 +私摘 1 +x:1 +颗颗 1 +x:1 +黑钙土 1 +x:1 +消毒学 1 +x:1 +地雷 1 +x:1 +商贸 1 +x:1 +苞米 1 +x:1 +郁山镇 1 +x:1 +商贾 1 +x:1 +并条机 1 +x:1 +活脱脱 1 +x:1 +芝麻油 1 +x:1 +商贩 1 +x:1 +调整 1 +x:1 +横膈膜 1 +x:1 +干饭 1 +x:1 +买空卖空 1 +x:1 +夹层玻璃 1 +x:1 +乌拉草 1 +x:1 +漫灌 1 +x:1 +概算 1 +x:1 +中金 1 +x:1 +以谬袭谬 1 +x:1 +梁四村 1 +x:1 +b##b 825857 +x:825857 +艰苦处 1 +x:1 +要旨 1 +x:1 +无声 1 +x:1 +麝鼠 1 +x:1 +见风使舵 1 +x:1 +宁馨儿 1 +x:1 +屯田 1 +x:1 +安福县 1 +x:1 +户均 1 +x:1 +舞会 1 +x:1 +轻捷 1 +x:1 +锡林郭勒 1 +x:1 +盆 81 +x:81 +航程 1 +x:1 +殿中房 1 +x:1 +应承担 1 +x:1 +挡雨棚 1 +x:1 +残次林 1 +x:1 +屯留 1 +x:1 +都市型 1 +x:1 +春韵 1 +x:1 +取齐 1 +x:1 +茧子 1 +x:1 +结合点 1 +x:1 +舞伴 1 +x:1 +加倍 1 +x:1 +素炒 1 +x:1 +纳税户 1 +x:1 +拱形 1 +x:1 +冠心病 1 +x:1 +殷墟 1 +x:1 +错作 1 +x:1 +道班长 1 +x:1 +驻足 1 +x:1 +降级 1 +x:1 +结合体 1 +x:1 +骤雨 1 +x:1 +涨价 1 +x:1 +稀世 1 +x:1 +回旋度 1 +x:1 +片言 1 +x:1 +行草 1 +x:1 +角部 1 +x:1 +食团问卜 1 +x:1 +卷内 1 +x:1 +追根溯源 1 +x:1 +市俗化 1 +x:1 +储蓄额 1 +x:1 +余风 1 +x:1 +溧阳县 1 +x:1 +古音 1 +x:1 +直立茎 1 +x:1 +论题 1 +x:1 +号志灯 1 +x:1 +争论不休 1 +x:1 +池洞 1 +x:1 +白闪闪 1 +x:1 +非均衡 1 +x:1 +协会性 1 +x:1 +机降 1 +x:1 +好自为之 1 +x:1 +坟茔 1 +x:1 +漂泊 1 +x:1 +剌 1 +x:1 +马哲史 1 +x:1 +私存 1 +x:1 +华北路 1 +x:1 +流食 1 +x:1 +工控机 1 +x:1 +深沟高垒 1 +x:1 +汾河湾 1 +x:1 +泳 15 +x:15 +桂阳 1 +x:1 +不等号 1 +x:1 +原审 1 +x:1 +幕落 1 +x:1 +服务区 1 +x:1 +私宅 1 +x:1 +罪恶滔天 1 +x:1 +因地制宜 1 +x:1 +夸大其辞 1 +x:1 +命令状 1 +x:1 +着笔 1 +x:1 +播放点 1 +x:1 +鱿鱼 1 +x:1 +检票口 1 +x:1 +下铺 1 +x:1 +私定 1 +x:1 +研修班 1 +x:1 +本世纪 1 +x:1 +冬麦 1 +x:1 +宿州 1 +x:1 +骤降 1 +x:1 +时装 1 +x:1 +佳丽 1 +x:1 +茱萸 1 +x:1 +涿州市 1 +x:1 +手儿 1 +x:1 +温暖如春 1 +x:1 +个顶个 1 +x:1 +小解 1 +x:1 +徽商 1 +x:1 +私家 1 +x:1 +青森县 1 +x:1 +消瘦 1 +x:1 +鸿 60 +x:60 +卷入 1 +x:1 +保管室 1 +x:1 +近水楼台 1 +x:1 +药政局 1 +x:1 +白矮星 1 +x:1 +蕙 1 +x:1 +中线 1 +x:1 +扬中市 1 +x:1 +乡规 1 +x:1 +白皑皑 1 +x:1 +情话 1 +x:1 +角逐 1 +x:1 +散热器 1 +x:1 +谋事 1 +x:1 +赠者 1 +x:1 +腕子 1 +x:1 +府尹 1 +x:1 +题款 1 +x:1 +加演 1 +x:1 +阴阳水 1 +x:1 +低幼儿 1 +x:1 +临海市 1 +x:1 +五指峰 1 +x:1 +腹中 1 +x:1 +庄家沟村 1 +x:1 +赶快 1 +x:1 +农科所 1 +x:1 +牌坊村 1 +x:1 +超短裙 1 +x:1 +俯拾即是 1 +x:1 +苍耳 1 +x:1 +元首会 1 +x:1 +榛 3 +x:3 +皎娇 1 +x:1 +点滴 1 +x:1 +牛山 1 +x:1 +扼腕 1 +x:1 +苍老 1 +x:1 +迷宫式 1 +x:1 +德育乡 1 +x:1 +产生 1 +x:1 +霍尔木兹 1 +x:1 +小人物 1 +x:1 +晋谒 1 +x:1 +击退 1 +x:1 +团员证 1 +x:1 +赶忙 1 +x:1 +妻 53 +x:53 +得人心 1 +x:1 +植绿护绿 1 +x:1 +乔治 1 +x:1 +晋豫 1 +x:1 +文化权 1 +x:1 +尊长 1 +x:1 +轻巧 1 +x:1 +圣战者 1 +x:1 +轻工 1 +x:1 +克格勃 1 +x:1 +桂霞 1 +x:1 +棚子 1 +x:1 +以太网 1 +x:1 +赶往 1 +x:1 +速滑馆 1 +x:1 +小夜曲 1 +x:1 +浮想 1 +x:1 +恧 1 +x:1 +座右铭 1 +x:1 +超大穗 1 +x:1 +柯 54 +x:54 +中纺 1 +x:1 +片警 1 +x:1 +二期 1 +x:1 +管乐团 1 +x:1 +陶庙 1 +x:1 +丹江口 1 +x:1 +问诊 1 +x:1 +洪流滚滚 1 +x:1 +素以 1 +x:1 +安丘市 1 +x:1 +各行其是 1 +x:1 +五七年 1 +x:1 +下门 1 +x:1 +窖藏 1 +x:1 +池河 1 +x:1 +问话 1 +x:1 +岗哨 1 +x:1 +同业公会 1 +x:1 +及格线 1 +x:1 +池沼 1 +x:1 +特异性 1 +x:1 +安身之地 1 +x:1 +渔岙 1 +x:1 +棚室 1 +x:1 +般般 1 +x:1 +印迹 1 +x:1 +户籍警 1 +x:1 +老奸巨猾 1 +x:1 +动脑筋 1 +x:1 +傩戏 1 +x:1 +盗用 1 +x:1 +储水柜 1 +x:1 +糟粕 1 +x:1 +精 153 +x:153 +贷存比 1 +x:1 +科盲 1 +x:1 +保释金 1 +x:1 +歇 23 +x:23 +佳作 1 +x:1 +凯雷什镇 1 +x:1 +加温 1 +x:1 +勒马尔歇 1 +x:1 +球墨铸铁 1 +x:1 +要官 1 +x:1 +立宪派 1 +x:1 +科目 1 +x:1 +慈云寺 1 +x:1 +洞房 1 +x:1 +米泉市 1 +x:1 +管乐器 1 +x:1 +政权机关 1 +x:1 +思绪 1 +x:1 +共治 1 +x:1 +下院 1 +x:1 +五六月份 1 +x:1 +照明弹 1 +x:1 +再 5272 +x:5272 +苍茫 1 +x:1 +圣砾砚斋 1 +x:1 +汇演 1 +x:1 +下陷 1 +x:1 +轻度 1 +x:1 +蜥蜴 1 +x:1 +遮天蔽日 1 +x:1 +要塞 1 +x:1 +发话器 1 +x:1 +安民济世 1 +x:1 +生产资料 1 +x:1 +碧 14 +x:14 +文盲率 1 +x:1 +认识 1 +x:1 +野心 1 +x:1 +下降 1 +x:1 +认证 1 +x:1 +扭头 1 +x:1 +下限 1 +x:1 +植物纤维 1 +x:1 +水 1300 +x:1300 +舞狮 1 +x:1 +不容忽视 1 +x:1 +贸易量 1 +x:1 +种业 1 +x:1 +用场 1 +x:1 +交响团 1 +x:1 +认认 1 +x:1 +私奔 1 +x:1 +续保 1 +x:1 +整场 1 +x:1 +托子 1 +x:1 +体贴 1 +x:1 +潞 1 +x:1 +出入境 1 +x:1 +印谱 1 +x:1 +用土 1 +x:1 +发行员 1 +x:1 +乌石乡 1 +x:1 +变本加厉 1 +x:1 +莽原 1 +x:1 +羊卓雍湖 1 +x:1 +西奈山 1 +x:1 +分流率 1 +x:1 +洋媳妇 1 +x:1 +降糖 1 +x:1 +办事组 1 +x:1 +宿弊 1 +x:1 +下阕 1 +x:1 +屏气凝神 1 +x:1 +炭精 1 +x:1 +荷重 1 +x:1 +欧溪乡 1 +x:1 +下雪 1 +x:1 +下雨 1 +x:1 +内保 1 +x:1 +本垒打 1 +x:1 +凉爽呢 1 +x:1 +整地 1 +x:1 +访问团 1 +x:1 +加时赛 1 +x:1 +期考 1 +x:1 +潘杰维 1 +x:1 +绕膝 1 +x:1 +剃发易制 1 +x:1 +下集 1 +x:1 +法立特 1 +x:1 +新近性 1 +x:1 +缩 19 +x:19 +感冒片 1 +x:1 +无边无涯 1 +x:1 +自力更生 1 +x:1 +杀鸡取卵 1 +x:1 +极目 1 +x:1 +艄板 1 +x:1 +合法化 1 +x:1 +达拉斯 1 +x:1 +鳗鱼 1 +x:1 +豪言 1 +x:1 +曲辞 1 +x:1 +契税 1 +x:1 +碑记 1 +x:1 +晃 20 +x:20 +愤愤不平 1 +x:1 +内侄 1 +x:1 +和风细雨 1 +x:1 +千锤百炼 1 +x:1 +警组制 1 +x:1 +荡人心魄 1 +x:1 +拱手 1 +x:1 +刊载 1 +x:1 +烂账 1 +x:1 +心声 1 +x:1 +短剑 1 +x:1 +饱食终日 1 +x:1 +超大规模 1 +x:1 +珍闻 1 +x:1 +换位 1 +x:1 +内侧 1 +x:1 +各有千秋 1 +x:1 +永葆 1 +x:1 +在野党派 1 +x:1 +饶有兴致 1 +x:1 +外房 1 +x:1 +配偶 1 +x:1 +舟楫 1 +x:1 +波黑 1 +x:1 +和龙市 1 +x:1 +拂拭 1 +x:1 +带伤 1 +x:1 +书道会 1 +x:1 +止痛 1 +x:1 +妥当 1 +x:1 +下面 1 +x:1 +老年病学 1 +x:1 +菊酯类 1 +x:1 +口服心服 1 +x:1 +赶工 1 +x:1 +赶巧 1 +x:1 +蜡质 1 +x:1 +加注 1 +x:1 +上半年 1 +x:1 +气象局 1 +x:1 +三加大 1 +x:1 +换亲 1 +x:1 +俯首称臣 1 +x:1 +贸易部 1 +x:1 +炉灶 1 +x:1 +轻微 1 +x:1 +换人 1 +x:1 +钩沉 1 +x:1 +锤 20 +x:20 +经济界 1 +x:1 +撤诉 1 +x:1 +继电器 1 +x:1 +内乡 1 +x:1 +炉火 1 +x:1 +豆瓣儿酱 1 +x:1 +长山村 1 +x:1 +加法 1 +x:1 +有司 1 +x:1 +内乱 1 +x:1 +区民 1 +x:1 +沙发椅子 1 +x:1 +擅 12 +x:12 +掌中宝 1 +x:1 +换代 1 +x:1 +停车楼 1 +x:1 +国骂 1 +x:1 +豪语 1 +x:1 +轻快 1 +x:1 +加油 1 +x:1 +死而后已 1 +x:1 +死而后己 1 +x:1 +国政系 1 +x:1 +潮涨潮落 1 +x:1 +哥 26 +x:26 +危象 1 +x:1 +推广性 1 +x:1 +友舰 1 +x:1 +巡视员 1 +x:1 +职高 1 +x:1 +化学厂 1 +x:1 +修身砺德 1 +x:1 +夫人 1 +x:1 +加沙 1 +x:1 +购种卡 1 +x:1 +私塾 1 +x:1 +主客场 1 +x:1 +故而 1 +x:1 +走运 1 +x:1 +走近 1 +x:1 +密云 1 +x:1 +走进 1 +x:1 +窑洞式 1 +x:1 +工商户 1 +x:1 +淡水湖 1 +x:1 +晚礼服 1 +x:1 +走过 1 +x:1 +中美洲 1 +x:1 +泪如雨下 1 +x:1 +若想 1 +x:1 +军歌声 1 +x:1 +韦驮殿 1 +x:1 +塑胶 1 +x:1 +换上 1 +x:1 +缺额 1 +x:1 +惊险 1 +x:1 +状 47 +x:47 +防腐败法 1 +x:1 +妥帖 1 +x:1 +钢丝绳 1 +x:1 +狱卒 1 +x:1 +内争 1 +x:1 +内事 1 +x:1 +程控化 1 +x:1 +透光度 1 +x:1 +里 4580 +x:4580 +畏 11 +x:11 +等效电路 1 +x:1 +爱莫能助 1 +x:1 +牛庄 1 +x:1 +反复性 1 +x:1 +分道扬镳 1 +x:1 +热问题 1 +x:1 +渣子 1 +x:1 +驰援 1 +x:1 +安居房 1 +x:1 +苍苍 1 +x:1 +内交 1 +x:1 +中铁建 1 +x:1 +米歇尔 1 +x:1 +席地而坐 1 +x:1 +方铅矿 1 +x:1 +工商所 1 +x:1 +舟桥 1 +x:1 +换乘 1 +x:1 +内亲 1 +x:1 +闵行区 1 +x:1 +肃 19 +x:19 +会议性 1 +x:1 +切实用 1 +x:1 +私弊 1 +x:1 +盲目性 1 +x:1 +用具 1 +x:1 +用兵 1 +x:1 +抛弃 1 +x:1 +迅速 1 +x:1 +婺绿 1 +x:1 +肥乎乎 1 +x:1 +本州岛 1 +x:1 +包谷壳 1 +x:1 +设计 1 +x:1 +意向表 1 +x:1 +一传十 1 +x:1 +晴空 1 +x:1 +丰衣足食 1 +x:1 +碰 56 +x:56 +经济片 1 +x:1 +铸成大错 1 +x:1 +榆次 1 +x:1 +气象学 1 +x:1 +角铁 1 +x:1 +创始人 1 +x:1 +坎坷不平 1 +x:1 +吉普车 1 +x:1 +文化户 1 +x:1 +凯隆堡 1 +x:1 +牌子 1 +x:1 +白塔 1 +x:1 +比赛场 1 +x:1 +惊醒 1 +x:1 +小汽车 1 +x:1 +角钢 1 +x:1 +敖 2 +x:2 +玻璃舱 1 +x:1 +晋西 1 +x:1 +围棋赛 1 +x:1 +赤 11 +x:11 +方针 1 +x:1 +孵化场 1 +x:1 +上半夜 1 +x:1 +全球化 1 +x:1 +意见卡 1 +x:1 +苇叶 1 +x:1 +牛头 1 +x:1 +娓娓 1 +x:1 +炊具 1 +x:1 +再有 1 +x:1 +掌上明珠 1 +x:1 +血毒症 1 +x:1 +辞赋 1 +x:1 +救助点 1 +x:1 +宿处 1 +x:1 +丹麦王国 1 +x:1 +万 2473 +x:2473 +氧化硫 1 +x:1 +希阿岛 1 +x:1 +下部 1 +x:1 +接线柱 1 +x:1 +算算 1 +x:1 +电性能 1 +x:1 +恃才傲物 1 +x:1 +为官一任 1 +x:1 +慢棋 1 +x:1 +狱吏 1 +x:1 +甡 1 +x:1 +点歌 1 +x:1 +天时地利 1 +x:1 +护士长 1 +x:1 +桂皮树 1 +x:1 +三义庙 1 +x:1 +转机 1 +x:1 +腕式 1 +x:1 +铁交椅 1 +x:1 +私德 1 +x:1 +前锋线 1 +x:1 +金桥区 1 +x:1 +鹿冈乡 1 +x:1 +私心 1 +x:1 +认购 1 +x:1 +认账 1 +x:1 +龙蟠里 1 +x:1 +增生 1 +x:1 +方头鞋 1 +x:1 +夸大其词 1 +x:1 +火腿肠 1 +x:1 +科班 1 +x:1 +苦槠 1 +x:1 +结果 1 +x:1 +渔姑 1 +x:1 +火腿肉 1 +x:1 +认负 1 +x:1 +私念 1 +x:1 +极点 1 +x:1 +织锦缎 1 +x:1 +野外 1 +x:1 +专用道 1 +x:1 +转速比 1 +x:1 +夹克衫 1 +x:1 +之间 1 +x:1 +约旦河 1 +x:1 +达卡 1 +x:1 +内敛性 1 +x:1 +军官证 1 +x:1 +全色片 1 +x:1 +角门 1 +x:1 +东躲西藏 1 +x:1 +诊疗费 1 +x:1 +刀把儿 1 +x:1 +沙荒 1 +x:1 +矢志不移 1 +x:1 +财价字 1 +x:1 +舆论 1 +x:1 +诗会 1 +x:1 +孵化器 1 +x:1 +吕梁山 1 +x:1 +地摊儿 1 +x:1 +刃儿 1 +x:1 +托尼 1 +x:1 +帏幕 1 +x:1 +露怯 1 +x:1 +若是 1 +x:1 +时贤 1 +x:1 +锚固 1 +x:1 +勇猛 1 +x:1 +集安市 1 +x:1 +小山子镇 1 +x:1 +演出队 1 +x:1 +盐环定 1 +x:1 +珊瑚礁 1 +x:1 +川鄂 1 +x:1 +匹俦 1 +x:1 +战乱 1 +x:1 +信天游 1 +x:1 +火星儿 1 +x:1 +救危排险 1 +x:1 +公证室 1 +x:1 +元山市 1 +x:1 +提高型 1 +x:1 +消石灰 1 +x:1 +人行横道 1 +x:1 +聚光灯 1 +x:1 +结构 1 +x:1 +火 302 +x:302 +硬邦邦 1 +x:1 +兵役制 1 +x:1 +夯砣 1 +x:1 +自力图强 1 +x:1 +信封 1 +x:1 +印证 1 +x:1 +焕彩 1 +x:1 +蜘蛛抱蛋 1 +x:1 +仓储式 1 +x:1 +撤走 1 +x:1 +犯难 1 +x:1 +蔫 5 +x:5 +圣胡安岛 1 +x:1 +下野 1 +x:1 +聚光点 1 +x:1 +象限 1 +x:1 +博望镇 1 +x:1 +泣不成声 1 +x:1 +天文台 1 +x:1 +隐身草 1 +x:1 +发行史 1 +x:1 +赴汤蹈火 1 +x:1 +刊行 1 +x:1 +缓付 1 +x:1 +氧气瓶 1 +x:1 +宿墨 1 +x:1 +原子 1 +x:1 +空降兵 1 +x:1 +跪拜 1 +x:1 +印记 1 +x:1 +林盘地 1 +x:1 +扼腕叹息 1 +x:1 +朱德 1 +x:1 +行贿人 1 +x:1 +念经 1 +x:1 +线绳 1 +x:1 +银 121 +x:121 +磺胺脒 1 +x:1 +走卒 1 +x:1 +魂魄 1 +x:1 +徽号 1 +x:1 +辅导站 1 +x:1 +自始至终 1 +x:1 +遗传学 1 +x:1 +信道 1 +x:1 +引水渠 1 +x:1 +阜新市 1 +x:1 +炊烟袅袅 1 +x:1 +农科教 1 +x:1 +后半段 1 +x:1 +契约 1 +x:1 +炸子儿 1 +x:1 +印行 1 +x:1 +聘用 1 +x:1 +弃置 1 +x:1 +靖远县 1 +x:1 +跌跌撞撞 1 +x:1 +盆竹 1 +x:1 +沟王寨村 1 +x:1 +文化性 1 +x:1 +齿斑 1 +x:1 +枣业 1 +x:1 +妥实 1 +x:1 +非工程 1 +x:1 +输精管 1 +x:1 +回嗔作喜 1 +x:1 +占优 1 +x:1 +角雉 1 +x:1 +求谋问计 1 +x:1 +市政府办 1 +x:1 +棚屋 1 +x:1 +两高一优 1 +x:1 +乖觉 1 +x:1 +徽县 1 +x:1 +行径 1 +x:1 +孝里镇 1 +x:1 +冻猪肉 1 +x:1 +骗婚 1 +x:1 +产物 1 +x:1 +燃放点 1 +x:1 +苍蝇 1 +x:1 +卧床不起 1 +x:1 +白剧团 1 +x:1 +惩戒 1 +x:1 +葬 7 +x:7 +永胜 1 +x:1 +蔚为大观 1 +x:1 +议价粮 1 +x:1 +认输 1 +x:1 +介绍费 1 +x:1 +熟食 1 +x:1 +门脸 1 +x:1 +强迫式 1 +x:1 +渔家 1 +x:1 +软锰矿 1 +x:1 +夺目 1 +x:1 +倏 2 +x:2 +重版 1 +x:1 +暖色调 1 +x:1 +多宝港 1 +x:1 +李四光 1 +x:1 +妃子 1 +x:1 +仙客来 1 +x:1 +笆篓 1 +x:1 +大朴大拙 1 +x:1 +巴士拉 1 +x:1 +液 3 +x:3 +匹 43 +x:43 +麻油 1 +x:1 +连续剧 1 +x:1 +形神各异 1 +x:1 +马兰 1 +x:1 +航海学家 1 +x:1 +贼头贼脑 1 +x:1 +叶块繁殖 1 +x:1 +文昌市 1 +x:1 +西平乐乡 1 +x:1 +性腺 1 +x:1 +董家山村 1 +x:1 +钉子户 1 +x:1 +武术馆校 1 +x:1 +问 1092 +x:1092 +无线电报 1 +x:1 +方阵 1 +x:1 +刑事 1 +x:1 +森林 1 +x:1 +靡 2 +x:2 +布尔奇科 1 +x:1 +遗赠 1 +x:1 +注意力 1 +x:1 +私己 1 +x:1 +屋角 1 +x:1 +方队 1 +x:1 +消灭 1 +x:1 +追赠 1 +x:1 +榆树 1 +x:1 +瑶绣 1 +x:1 +出站口 1 +x:1 +红光光 1 +x:1 +托市 1 +x:1 +妇保 1 +x:1 +盈利额 1 +x:1 +私小 1 +x:1 +轮采 1 +x:1 +庑 1 +x:1 +宽银幕 1 +x:1 +陶壶 1 +x:1 +插秧 1 +x:1 +铸石 1 +x:1 +方音 1 +x:1 +陈屋坡 1 +x:1 +小吃部 1 +x:1 +检票员 1 +x:1 +找事 1 +x:1 +渔娘 1 +x:1 +监事会 1 +x:1 +宋古乡 1 +x:1 +积不相能 1 +x:1 +昏庸辈 1 +x:1 +悲伤欲绝 1 +x:1 +管理业 1 +x:1 +独联体 1 +x:1 +海产品 1 +x:1 +章则 1 +x:1 +性能 1 +x:1 +耗资量 1 +x:1 +力求 1 +x:1 +磕 4 +x:4 +骗子 1 +x:1 +鄂州 1 +x:1 +非盈利 1 +x:1 +点电荷 1 +x:1 +炒汇 1 +x:1 +豪迈 1 +x:1 +托幼 1 +x:1 +结算关 1 +x:1 +奖学金 1 +x:1 +村民会 1 +x:1 +库马西 1 +x:1 +方面 1 +x:1 +化学变化 1 +x:1 +一定之规 1 +x:1 +徽剧 1 +x:1 +管理人 1 +x:1 +埋头 1 +x:1 +相控阵 1 +x:1 +崂山区 1 +x:1 +托底 1 +x:1 +西丫口 1 +x:1 +急火火 1 +x:1 +骗客 1 +x:1 +问路 1 +x:1 +贝 21 +x:21 +阴阳步 1 +x:1 +对手戏 1 +x:1 +外文课 1 +x:1 +话剧院团 1 +x:1 +性者 1 +x:1 +唯利是图 1 +x:1 +赶奔 1 +x:1 +大北窑 1 +x:1 +章 360 +x:360 +原子能局 1 +x:1 +属性 1 +x:1 +甘于 1 +x:1 +廉租 1 +x:1 +仆 1 +x:1 +点校 1 +x:1 +房产商 1 +x:1 +时辰 1 +x:1 +物态 1 +x:1 +转战 1 +x:1 +四环东路 1 +x:1 +碑身 1 +x:1 +大运河 1 +x:1 +用力 1 +x:1 +待就业 1 +x:1 +用功 1 +x:1 +越位 1 +x:1 +卖身契 1 +x:1 +走访 1 +x:1 +门联 1 +x:1 +吨公里 1 +x:1 +司 87 +x:87 +燃具 1 +x:1 +搜身 1 +x:1 +接班人 1 +x:1 +图腾式 1 +x:1 +炭盆 1 +x:1 +防寒屋 1 +x:1 +北齐人 1 +x:1 +红旗街 1 +x:1 +垂花门 1 +x:1 +红花草 1 +x:1 +核磁检查 1 +x:1 +钓 32 +x:32 +萍乡市 1 +x:1 +原子核 1 +x:1 +妥善 1 +x:1 +徽州 1 +x:1 +训 54 +x:54 +大瓦窑村 1 +x:1 +公证团 1 +x:1 +卢森堡队 1 +x:1 +走回头路 1 +x:1 +冬防 1 +x:1 +托儿 1 +x:1 +饱和度 1 +x:1 +短短的 1 +x:1 +点染 1 +x:1 +圆圆的 1 +x:1 +赶回 1 +x:1 +奥斯曼 1 +x:1 +北河乡 1 +x:1 +篮球赛 1 +x:1 +再次 1 +x:1 +棱台 1 +x:1 +团结友爱 1 +x:1 +蜡虫 1 +x:1 +拱棚 1 +x:1 +私协 1 +x:1 +灵位 1 +x:1 +景洪 1 +x:1 +毛纺织厂 1 +x:1 +要则 1 +x:1 +无穷期 1 +x:1 +陆陆续续 1 +x:1 +预制件 1 +x:1 +风电场 1 +x:1 +此案 1 +x:1 +煦 13 +x:13 +名节 1 +x:1 +时而 1 +x:1 +摄像室 1 +x:1 +囚衣 1 +x:1 +范画 1 +x:1 +腐蚀性 1 +x:1 +扩浇 1 +x:1 +婚外恋 1 +x:1 +榆林 1 +x:1 +衡山县 1 +x:1 +印纹陶 1 +x:1 +独奏曲 1 +x:1 +产粮 1 +x:1 +流通 1 +x:1 +流逝 1 +x:1 +流速 1 +x:1 +用工 1 +x:1 +加权 1 +x:1 +撤职 1 +x:1 +有所失 1 +x:1 +E 29 +x:29 +大葱 1 +x:1 +片花 1 +x:1 +侠义 1 +x:1 +一元性 1 +x:1 +俏销 1 +x:1 +临渴掘井 1 +x:1 +蒋家王朝 1 +x:1 +条块分割 1 +x:1 +碳化硅 1 +x:1 +才子佳人 1 +x:1 +阿 256 +x:256 +拉关系 1 +x:1 +惩治 1 +x:1 +闷闷地 1 +x:1 +赙 1 +x:1 +精算业 1 +x:1 +真人 1 +x:1 +要务 1 +x:1 +恐吓 1 +x:1 +白藤 1 +x:1 +玩乐 1 +x:1 +妥商 1 +x:1 +冬雪 1 +x:1 +冬雨 1 +x:1 +轿子 1 +x:1 +人如海 1 +x:1 +出粉率 1 +x:1 +梅州市 1 +x:1 +拱桥 1 +x:1 +月镜 1 +x:1 +小道消息 1 +x:1 +销售价 1 +x:1 +论道 1 +x:1 +出入口 1 +x:1 +宿命 1 +x:1 +神河 1 +x:1 +顺治元年 1 +x:1 +灵丘 1 +x:1 +私分 1 +x:1 +断壁残垣 1 +x:1 +问荆 1 +x:1 +光纤通信 1 +x:1 +茜 5 +x:5 +露水 1 +x:1 +红海村 1 +x:1 +叶纹 1 +x:1 +腕力 1 +x:1 +西工区 1 +x:1 +私利 1 +x:1 +测电笔 1 +x:1 +焕发 1 +x:1 +水乳交融 1 +x:1 +衰老期 1 +x:1 +疙瘩腔 1 +x:1 +祖先 1 +x:1 +耙耱 1 +x:1 +日新月异 1 +x:1 +冻 67 +x:67 +携带品 1 +x:1 +后悔莫及 1 +x:1 +伊朗 1 +x:1 +用尽 1 +x:1 +想方设法 1 +x:1 +流量 1 +x:1 +流金 1 +x:1 +自给性 1 +x:1 +起点处 1 +x:1 +冬青 1 +x:1 +昌平 1 +x:1 +罗汉松 1 +x:1 +波长 1 +x:1 +并线 1 +x:1 +无依无靠 1 +x:1 +文化潮 1 +x:1 +株洲市 1 +x:1 +维纶 1 +x:1 +捉迷藏式 1 +x:1 +谷斑皮蠹 1 +x:1 +不够意思 1 +x:1 +秕子 1 +x:1 +濯 4 +x:4 +腰 80 +x:80 +林芝县 1 +x:1 +净水 1 +x:1 +特伦托省 1 +x:1 +讨要 1 +x:1 +麻黄素 1 +x:1 +抗灾歌 1 +x:1 +安居梦 1 +x:1 +力抓 1 +x:1 +腹股沟 1 +x:1 +嵌入 1 +x:1 +陶器 1 +x:1 +千磨百折 1 +x:1 +类别 1 +x:1 +眉开眼笑 1 +x:1 +鄂北 1 +x:1 +客畅其行 1 +x:1 +科级 1 +x:1 +拖拉机厂 1 +x:1 +择善而从 1 +x:1 +野味 1 +x:1 +野病毒 1 +x:1 +推委会 1 +x:1 +方便卡 1 +x:1 +上层建筑 1 +x:1 +卖羊人 1 +x:1 +自怜 1 +x:1 +照镜子 1 +x:1 +千年一遇 1 +x:1 +乱葬岗 1 +x:1 +扭动 1 +x:1 +花花绿绿 1 +x:1 +力护 1 +x:1 +制鞋厂 1 +x:1 +罗汉果 1 +x:1 +狠心肠 1 +x:1 +庞各庄乡 1 +x:1 +骗保案 1 +x:1 +迄 8 +x:8 +园子 1 +x:1 +理由 1 +x:1 +试点站 1 +x:1 +多云间晴 1 +x:1 +知趣 1 +x:1 +西罗园 1 +x:1 +缎子 1 +x:1 +鄂南 1 +x:1 +赶场 1 +x:1 +地带 1 +x:1 +知足 1 +x:1 +算盘 1 +x:1 +鸥种 1 +x:1 +中介商 1 +x:1 +音序器 1 +x:1 +卧 45 +x:45 +点明 1 +x:1 +方便化 1 +x:1 +溃败 1 +x:1 +力拼 1 +x:1 +锻炼法 1 +x:1 +电唱机 1 +x:1 +扼要 1 +x:1 +脏源 1 +x:1 +伦巴 1 +x:1 +一整套 1 +x:1 +骋 2 +x:2 +妍 66 +x:66 +分业制 1 +x:1 +时艰 1 +x:1 +郁郁寡欢 1 +x:1 +发展党 1 +x:1 +胶东 1 +x:1 +温暖 1 +x:1 +倒好儿 1 +x:1 +王道 1 +x:1 +早餐 1 +x:1 +溶解氧 1 +x:1 +雨夹雪 1 +x:1 +卷宗 1 +x:1 +参加方 1 +x:1 +钗头凤 1 +x:1 +聘礼 1 +x:1 +岷江 1 +x:1 +使馆 1 +x:1 +德里市 1 +x:1 +横纲级 1 +x:1 +医药费 1 +x:1 +领衔 1 +x:1 +上半场 1 +x:1 +鹌鹑 1 +x:1 +贪根种心 1 +x:1 +珑 3 +x:3 +傲视 1 +x:1 +高新技术 1 +x:1 +李店乡 1 +x:1 +踏看 1 +x:1 +私党 1 +x:1 +间接选举 1 +x:1 +集合体 1 +x:1 +杞 1 +x:1 +斜架 1 +x:1 +百白破 1 +x:1 +好端端 1 +x:1 +彰显 1 +x:1 +牛场 1 +x:1 +池杉 1 +x:1 +释藏 1 +x:1 +甲天下 1 +x:1 +独个儿 1 +x:1 +气息奄奄 1 +x:1 +加料 1 +x:1 +侦察机 1 +x:1 +汗青 1 +x:1 +生地黄 1 +x:1 +氧气管 1 +x:1 +德新社 1 +x:1 +领袖 1 +x:1 +暴跌 1 +x:1 +色香味美 1 +x:1 +经济系 1 +x:1 +加数 1 +x:1 +瑶沟 1 +x:1 +公证员 1 +x:1 +角马 1 +x:1 +点数 1 +x:1 +牛城 1 +x:1 +性质 1 +x:1 +语音 1 +x:1 +眩 1 +x:1 +黑非洲 1 +x:1 +发展性 1 +x:1 +深知 1 +x:1 +闹饥荒 1 +x:1 +后半期 1 +x:1 +可乘之隙 1 +x:1 +湃 1 +x:1 +织布厂 1 +x:1 +题意 1 +x:1 +九时 1 +x:1 +加收 1 +x:1 +乔木 1 +x:1 +佛事 1 +x:1 +惜 30 +x:30 +圣玛丽亚 1 +x:1 +时节 1 +x:1 +缺量 1 +x:1 +城郊型 1 +x:1 +质量奖 1 +x:1 +打退堂鼓 1 +x:1 +寄兴寓情 1 +x:1 +酒瓶子 1 +x:1 +鼻洼子 1 +x:1 +卷子 1 +x:1 +硫酸 1 +x:1 +托叶 1 +x:1 +摄像头 1 +x:1 +气冲牛斗 1 +x:1 +前中期 1 +x:1 +吃里扒外 1 +x:1 +不以为然 1 +x:1 +壮行会 1 +x:1 +真丝 1 +x:1 +鼓囊囊 1 +x:1 +校订 1 +x:1 +侄外孙 1 +x:1 +白鹿泉乡 1 +x:1 +府城 1 +x:1 +一字师 1 +x:1 +中欣队 1 +x:1 +弃物 1 +x:1 +维系 1 +x:1 +冲扩点 1 +x:1 +拒付 1 +x:1 +实习生 1 +x:1 +′ 6 +x:6 +轻型 1 +x:1 +楚王陵 1 +x:1 +质优量足 1 +x:1 +贸易风 1 +x:1 +公里 1 +x:1 +讨论 1 +x:1 +泅 1 +x:1 +军规 1 +x:1 +章句 1 +x:1 +铸管 1 +x:1 +庆功宴 1 +x:1 +付诸实施 1 +x:1 +文城镇 1 +x:1 +门环子 1 +x:1 +里挑外撅 1 +x:1 +阿西西城 1 +x:1 +红七师 1 +x:1 +姑表亲 1 +x:1 +贸易额 1 +x:1 +绕行 1 +x:1 +炭疽 1 +x:1 +历险 1 +x:1 +埃及王国 1 +x:1 +斜晖 1 +x:1 +优抚对象 1 +x:1 +棚内 1 +x:1 +成瘾性 1 +x:1 +封丘县 1 +x:1 +事业性 1 +x:1 +无愧于心 1 +x:1 +意中人 1 +x:1 +自言自语 1 +x:1 +思 132 +x:132 +非常规 1 +x:1 +无性杂交 1 +x:1 +赖账 1 +x:1 +安检区 1 +x:1 +泡沫痰 1 +x:1 +事事处处 1 +x:1 +欣然 1 +x:1 +外语课 1 +x:1 +席间 1 +x:1 +邕城 1 +x:1 +章化 1 +x:1 +装作 1 +x:1 +尖头 1 +x:1 +降生 1 +x:1 +总罢工 1 +x:1 +考佬佬 1 +x:1 +赵李桥镇 1 +x:1 +快餐馆 1 +x:1 +荐举 1 +x:1 +接气 1 +x:1 +波音 1 +x:1 +用度 1 +x:1 +偷香窃玉 1 +x:1 +装装样子 1 +x:1 +粗细有致 1 +x:1 +冬间 1 +x:1 +要冲 1 +x:1 +冬闲 1 +x:1 +好榜样 1 +x:1 +七二年 1 +x:1 +性别 1 +x:1 +套语 1 +x:1 +炭画 1 +x:1 +雾 58 +x:58 +漂 15 +x:15 +促和 1 +x:1 +霞光 1 +x:1 +诺贝尔 1 +x:1 +消火栓 1 +x:1 +厕 12 +x:12 +坐山雕 1 +x:1 +防盗打器 1 +x:1 +前途无量 1 +x:1 +耕翻 1 +x:1 +冷热病 1 +x:1 +那波尔 1 +x:1 +议事日程 1 +x:1 +裤脚 1 +x:1 +大鼓手 1 +x:1 +医疗所 1 +x:1 +苗木费 1 +x:1 +真个 1 +x:1 +不进则退 1 +x:1 +拜天地 1 +x:1 +即席 1 +x:1 +东线组 1 +x:1 +渔具 1 +x:1 +喜读者 1 +x:1 +管弦高奏 1 +x:1 +军代处 1 +x:1 +书眉 1 +x:1 +拐角处 1 +x:1 +武夷山市 1 +x:1 +牛儿 1 +x:1 +亓 2 +x:2 +会议桌 1 +x:1 +门诊 1 +x:1 +有警必出 1 +x:1 +故迹 1 +x:1 +口出狂言 1 +x:1 +客运站 1 +x:1 +发轫期 1 +x:1 +用处 1 +x:1 +残次品 1 +x:1 +同日而语 1 +x:1 +不等式 1 +x:1 +登记本 1 +x:1 +其味无穷 1 +x:1 +言传 1 +x:1 +三水市 1 +x:1 +圆筒 1 +x:1 +科管 1 +x:1 +排浪式 1 +x:1 +隐蔽性 1 +x:1 +狼尾草 1 +x:1 +野兽 1 +x:1 +赣中南 1 +x:1 +题材 1 +x:1 +豪华化 1 +x:1 +要因 1 +x:1 +渔农 1 +x:1 +梅里达市 1 +x:1 +气象台 1 +x:1 +沼泽地 1 +x:1 +下风 1 +x:1 +豆酥糖 1 +x:1 +癌魔 1 +x:1 +蒲城县 1 +x:1 +湖北团 1 +x:1 +石榴石 1 +x:1 +造价款 1 +x:1 +最佳者 1 +x:1 +野兔 1 +x:1 +启动金 1 +x:1 +要图 1 +x:1 +车骑 1 +x:1 +嬉笑 1 +x:1 +安检员 1 +x:1 +蝶形花冠 1 +x:1 +复仇 1 +x:1 +沟沟峁峁 1 +x:1 +气象厅 1 +x:1 +改邪归正 1 +x:1 +赶制 1 +x:1 +奖助学 1 +x:1 +阴柔气 1 +x:1 +门警 1 +x:1 +武邑黄口 1 +x:1 +印花 1 +x:1 +神汉 1 +x:1 +酩 6 +x:6 +世外桃源 1 +x:1 +麻黄碱 1 +x:1 +双班制 1 +x:1 +下颌 1 +x:1 +健全度 1 +x:1 +威县 1 +x:1 +含泪 1 +x:1 +下颚 1 +x:1 +绕过 1 +x:1 +卡业 1 +x:1 +入乡随俗 1 +x:1 +盈亏 1 +x:1 +点拨 1 +x:1 +德西尔吉 1 +x:1 +棚圈 1 +x:1 +桂魂 1 +x:1 +托名 1 +x:1 +雄赳赳 1 +x:1 +过渡内阁 1 +x:1 +五四路 1 +x:1 +否 12 +x:12 +滋事 1 +x:1 +就地取材 1 +x:1 +府函 1 +x:1 +屋檐 1 +x:1 +太阳神队 1 +x:1 +固沙林 1 +x:1 +高点 1 +x:1 +裤腰 1 +x:1 +聚宝盆 1 +x:1 +井然有序 1 +x:1 +宿债 1 +x:1 +鄂城 1 +x:1 +绍 1 +x:1 +空明 1 +x:1 +港口镇 1 +x:1 +天文学 1 +x:1 +计其所短 1 +x:1 +咖啡楼 1 +x:1 +营业日 1 +x:1 +缺陷 1 +x:1 +徽墨 1 +x:1 +会议楼 1 +x:1 +走脱 1 +x:1 +声名鹊起 1 +x:1 +心静如水 1 +x:1 +导演组 1 +x:1 +蛋蛋 1 +x:1 +永诀 1 +x:1 +无鬼论 1 +x:1 +晋职 1 +x:1 +要地 1 +x:1 +鼓子词 1 +x:1 +签证处 1 +x:1 +一统天 1 +x:1 +梅山镇 1 +x:1 +暖 118 +x:118 +汗浸浸 1 +x:1 +羌 1 +x:1 +交际处 1 +x:1 +溧阳市 1 +x:1 +人心叵测 1 +x:1 +斑纹 1 +x:1 +卡塔赫纳 1 +x:1 +安慰话 1 +x:1 +旭日椅 1 +x:1 +马尼拉 1 +x:1 +透视学 1 +x:1 +煮饭 1 +x:1 +贫 53 +x:53 +聘约 1 +x:1 +经济篇 1 +x:1 +卡住 1 +x:1 +四色菊府 1 +x:1 +液态水 1 +x:1 +锹镐柄 1 +x:1 +掩人耳目 1 +x:1 +送礼者 1 +x:1 +店方 1 +x:1 +碎骨粉身 1 +x:1 +金鱼虫 1 +x:1 +轻兵 1 +x:1 +苛捐杂税 1 +x:1 +设色 1 +x:1 +私囊 1 +x:1 +相得益彰 1 +x:1 +用墨 1 +x:1 +陶制 1 +x:1 +肥田草 1 +x:1 +燕化 1 +x:1 +孤零零 1 +x:1 +特一级 1 +x:1 +产科 1 +x:1 +秉笔直书 1 +x:1 +鹳雀楼 1 +x:1 +铣刀 1 +x:1 +纷纭斑驳 1 +x:1 +军国主义 1 +x:1 +三孝口 1 +x:1 +扭困 1 +x:1 +一目十行 1 +x:1 +拍照费 1 +x:1 +量子 1 +x:1 +迁都 1 +x:1 +流长 1 +x:1 +私图 1 +x:1 +渔区 1 +x:1 +有所得 1 +x:1 +肠套叠 1 +x:1 +啧啧称赞 1 +x:1 +晋冀鲁豫 1 +x:1 +梅陇 1 +x:1 +下马 1 +x:1 +李先念 1 +x:1 +纷乱 1 +x:1 +要员 1 +x:1 +野史 1 +x:1 +追记 1 +x:1 +击鼓 1 +x:1 +题旨 1 +x:1 +浅水藕 1 +x:1 +屋脊 1 +x:1 +圆窗 1 +x:1 +汉语拼音 1 +x:1 +大象村 1 +x:1 +琼楼玉宇 1 +x:1 +七星河 1 +x:1 +一传奖 1 +x:1 +卡贝略港 1 +x:1 +天地 1 +x:1 +俄顷 1 +x:1 +歼敌 1 +x:1 +懋功 1 +x:1 +抛售 1 +x:1 +抗震救灾 1 +x:1 +刊 38 +x:38 +巴里坤县 1 +x:1 +府办 1 +x:1 +哇哇 1 +x:1 +出谋献策 1 +x:1 +金鱼藻 1 +x:1 +陶冶 1 +x:1 +吡啶 1 +x:1 +音板 1 +x:1 +残协委 1 +x:1 +上岗费 1 +x:1 +追认 1 +x:1 +水位站 1 +x:1 +论集 1 +x:1 +录入卡 1 +x:1 +勤学苦练 1 +x:1 +消磨 1 +x:1 +创建 1 +x:1 +令旗 1 +x:1 +玄乎 1 +x:1 +租建 1 +x:1 +盛怒 1 +x:1 +上半叶 1 +x:1 +建筑物 1 +x:1 +徽学 1 +x:1 +代代相传 1 +x:1 +轻判 1 +x:1 +陶养 1 +x:1 +凛若冰霜 1 +x:1 +惊魂 1 +x:1 +苏门答腊 1 +x:1 +控制论 1 +x:1 +梯田化 1 +x:1 +梅雨 1 +x:1 +千古不朽 1 +x:1 +动 317 +x:317 +金蝉脱壳 1 +x:1 +土尔其 1 +x:1 +风韵犹存 1 +x:1 +异军突起 1 +x:1 +作曲系 1 +x:1 +原 1363 +x:1363 +饶有兴趣 1 +x:1 +皮筋儿 1 +x:1 +宿县 1 +x:1 +缺门 1 +x:1 +朝觐 1 +x:1 +节本降耗 1 +x:1 +房产局 1 +x:1 +朝见 1 +x:1 +侦察排 1 +x:1 +成安县 1 +x:1 +妥协 1 +x:1 +芒果园 1 +x:1 +加意 1 +x:1 +纷争 1 +x:1 +唆使 1 +x:1 +煤都 1 +x:1 +拉丁美洲 1 +x:1 +胜势 1 +x:1 +速滑队 1 +x:1 +蒋管区 1 +x:1 +跑龙套 1 +x:1 +贪污案 1 +x:1 +薇 22 +x:22 +客座率 1 +x:1 +解放碑 1 +x:1 +扭合 1 +x:1 +女强人 1 +x:1 +命意 1 +x:1 +顶风 1 +x:1 +渔利 1 +x:1 +明文 1 +x:1 +复习 1 +x:1 +讨还 1 +x:1 +科研 1 +x:1 +铲车 1 +x:1 +辅导班 1 +x:1 +保管员 1 +x:1 +殿房 1 +x:1 +诚心实意 1 +x:1 +左近 1 +x:1 +新生事物 1 +x:1 +刀把子 1 +x:1 +坐 690 +x:690 +经济社 1 +x:1 +勾搭 1 +x:1 +舞美 1 +x:1 +择址 1 +x:1 +导演系 1 +x:1 +备足 1 +x:1 +惊骇 1 +x:1 +增盈 1 +x:1 +轻取 1 +x:1 +吉达 1 +x:1 +驮骡 1 +x:1 +囚车 1 +x:1 +平鱼 1 +x:1 +娇骄二气 1 +x:1 +仓仓囤囤 1 +x:1 +骚乱 1 +x:1 +深水港区 1 +x:1 +府南 1 +x:1 +灿若明霞 1 +x:1 +非正规 1 +x:1 +杂活儿 1 +x:1 +站规 1 +x:1 +可鉴赏性 1 +x:1 +阑 2 +x:2 +鸡尸牛从 1 +x:1 +逢年过节 1 +x:1 +聚会 1 +x:1 +员额 1 +x:1 +滋阴壮阳 1 +x:1 +聚众 1 +x:1 +增殖症 1 +x:1 +黄白色 1 +x:1 +驮马 1 +x:1 +释放者 1 +x:1 +邪 25 +x:25 +流露 1 +x:1 +期货 1 +x:1 +经济科 1 +x:1 +力挽颓势 1 +x:1 +卷帘 1 +x:1 +苦不堪言 1 +x:1 +糙米饭 1 +x:1 +加急 1 +x:1 +追悔莫及 1 +x:1 +特一粉 1 +x:1 +同龄 1 +x:1 +骗取 1 +x:1 +雄威 1 +x:1 +北冰洋 1 +x:1 +加总 1 +x:1 +薄利多销 1 +x:1 +宿务 1 +x:1 +牛劲 1 +x:1 +公司法 1 +x:1 +挣脸 1 +x:1 +区情 1 +x:1 +滥肆 1 +x:1 +龙腾虎跃 1 +x:1 +习用语 1 +x:1 +寸 46 +x:46 +性行 1 +x:1 +祸首 1 +x:1 +蓖麻蚕 1 +x:1 +领路 1 +x:1 +嘉山县 1 +x:1 +令箭 1 +x:1 +钦州市 1 +x:1 +朝霞 1 +x:1 +联盟杯赛 1 +x:1 +韩国队 1 +x:1 +下葬 1 +x:1 +波谷 1 +x:1 +出国潮 1 +x:1 +波谱 1 +x:1 +瞎婆子 1 +x:1 +合计数 1 +x:1 +专储库 1 +x:1 +朝露 1 +x:1 +管理处 1 +x:1 +真心实意 1 +x:1 +永隆 1 +x:1 +爬 137 +x:137 +水汽量 1 +x:1 +陶俑 1 +x:1 +继承权 1 +x:1 +古已有之 1 +x:1 +亿 334 +x:334 +换工 1 +x:1 +黄皮书 1 +x:1 +转角处 1 +x:1 +邢家梁村 1 +x:1 +圣诞卡 1 +x:1 +驱逐舰长 1 +x:1 +独特性 1 +x:1 +站队 1 +x:1 +濮县 1 +x:1 +改扮 1 +x:1 +椅子 1 +x:1 +癞病 1 +x:1 +下落 1 +x:1 +行凶 1 +x:1 +欢乐开怀 1 +x:1 +册封 1 +x:1 +楦 3 +x:3 +专业厂 1 +x:1 +技术室 1 +x:1 +加美 1 +x:1 +说说笑笑 1 +x:1 +自馁 1 +x:1 +范派 1 +x:1 +公证人 1 +x:1 +急刹 1 +x:1 +疑难重症 1 +x:1 +叉车 1 +x:1 +漠然视之 1 +x:1 +百川归海 1 +x:1 +俏货 1 +x:1 +降温 1 +x:1 +大忙 1 +x:1 +唯理论 1 +x:1 +维权 1 +x:1 +英气逼人 1 +x:1 +素心 1 +x:1 +尽其所长 1 +x:1 +航机 1 +x:1 +降渍 1 +x:1 +公证书 1 +x:1 +说空话 1 +x:1 +离心机 1 +x:1 +经贸界 1 +x:1 +盆汤 1 +x:1 +素志 1 +x:1 +暖壶 1 +x:1 +长春市 1 +x:1 +酒食征逐 1 +x:1 +缘何 1 +x:1 +狮头鹅 1 +x:1 +偷合苟容 1 +x:1 +流血 1 +x:1 +非国有制 1 +x:1 +恋 18 +x:18 +流行 1 +x:1 +推广率 1 +x:1 +缺课 1 +x:1 +再现 1 +x:1 +门面 1 +x:1 +技侦 1 +x:1 +众怒难犯 1 +x:1 +宣言书 1 +x:1 +租赁制 1 +x:1 +从江县 1 +x:1 +蜡黄 1 +x:1 +飞翔式 1 +x:1 +点缀 1 +x:1 +赶上 1 +x:1 +骡子 1 +x:1 +锐降 1 +x:1 +嫌多者 1 +x:1 +急切 1 +x:1 +死胡同 1 +x:1 +大相径庭 1 +x:1 +算清 1 +x:1 +妇委 1 +x:1 +内屋 1 +x:1 +橡皮圈 1 +x:1 +健跳镇 1 +x:1 +议论文 1 +x:1 +小品 1 +x:1 +种崽 1 +x:1 +鹭鸟 1 +x:1 +消极 1 +x:1 +元/公斤 1 +x:1 +盖茨堡镇 1 +x:1 +牙牌 1 +x:1 +历谱 1 +x:1 +朝阳 1 +x:1 +洞庭湖区 1 +x:1 +驱虫剂 1 +x:1 +一是一 1 +x:1 +再版 1 +x:1 +科星 1 +x:1 +蜡鼓 1 +x:1 +鹭鸶 1 +x:1 +睢宁县 1 +x:1 +横加干预 1 +x:1 +忧心 1 +x:1 +转关 1 +x:1 +使节 1 +x:1 +消毒器 1 +x:1 +紫竹园 1 +x:1 +施工史 1 +x:1 +拦道木 1 +x:1 +怒耸 1 +x:1 +素席 1 +x:1 +经济机 1 +x:1 +加纳 1 +x:1 +愁肠百结 1 +x:1 +光华路 1 +x:1 +往返 1 +x:1 +绢丝 1 +x:1 +素常 1 +x:1 +处之泰然 1 +x:1 +友爱新党 1 +x:1 +科普 1 +x:1 +属相 1 +x:1 +观棋者 1 +x:1 +经世致用 1 +x:1 +内贸局 1 +x:1 +改朝换代 1 +x:1 +角膜 1 +x:1 +终审权 1 +x:1 +饰 23 +x:23 +这就是说 1 +x:1 +行为权 1 +x:1 +层次感 1 +x:1 +何如 1 +x:1 +学杂费 1 +x:1 +蓄势待发 1 +x:1 +凄凉 1 +x:1 +凄凄 1 +x:1 +区级 1 +x:1 +伊拉克 1 +x:1 +回头率 1 +x:1 +施工区 1 +x:1 +在用车 1 +x:1 +改革战 1 +x:1 +啼笑皆非 1 +x:1 +阅兵式 1 +x:1 +妇女 1 +x:1 +飞雷炮 1 +x:1 +埋伏 1 +x:1 +笨鸟先飞 1 +x:1 +半吊子 1 +x:1 +科沙拉村 1 +x:1 +碾坊乡 1 +x:1 +弘图 1 +x:1 +肃然起敬 1 +x:1 +铁板钉钉 1 +x:1 +月子 1 +x:1 +沾 46 +x:46 +拥军 1 +x:1 +日射病 1 +x:1 +飒爽 1 +x:1 +土容重 1 +x:1 +高血压 1 +x:1 +如虎添翼 1 +x:1 +豪饮 1 +x:1 +湘潭县 1 +x:1 +镇静 1 +x:1 +冬运 1 +x:1 +返销粮 1 +x:1 +遭遇战 1 +x:1 +凯旋式 1 +x:1 +屯子 1 +x:1 +苍郁 1 +x:1 +非国有化 1 +x:1 +商住楼 1 +x:1 +碑额 1 +x:1 +选矿厂 1 +x:1 +换届 1 +x:1 +后车斗 1 +x:1 +瞬间 1 +x:1 +口岸 1 +x:1 +凄冷 1 +x:1 +饭铺 1 +x:1 +经济林 1 +x:1 +贴心话 1 +x:1 +仓琼玛 1 +x:1 +钟灵毓秀 1 +x:1 +先锋岗 1 +x:1 +维族 1 +x:1 +稀少 1 +x:1 +口岸办 1 +x:1 +甘孜 1 +x:1 +执行主席 1 +x:1 +失窃险 1 +x:1 +命令性 1 +x:1 +定襄县 1 +x:1 +妩媚 1 +x:1 +堑壕 1 +x:1 +指名道姓 1 +x:1 +金石桥 1 +x:1 +问项 1 +x:1 +府令 1 +x:1 +遥测 1 +x:1 +喜吟吟 1 +x:1 +真伪 1 +x:1 +故里 1 +x:1 +老龄委 1 +x:1 +复修 1 +x:1 +压展 1 +x:1 +凄切 1 +x:1 +管理学 1 +x:1 +饲料 1 +x:1 +销售员 1 +x:1 +门门 1 +x:1 +门闩 1 +x:1 +一把手 1 +x:1 +五指 1 +x:1 +舞技 1 +x:1 +可防性 1 +x:1 +林吉特 1 +x:1 +桥函 1 +x:1 +捉拿 1 +x:1 +科教 1 +x:1 +观光者 1 +x:1 +维新 1 +x:1 +碳化铁 1 +x:1 +质检权 1 +x:1 +真传 1 +x:1 +商标局 1 +x:1 +龙宫洞 1 +x:1 +流言 1 +x:1 +协奏团 1 +x:1 +变戏法 1 +x:1 +批办 1 +x:1 +时髦 1 +x:1 +科方 1 +x:1 +小三马 1 +x:1 +脍 3 +x:3 +内心 1 +x:1 +降水 1 +x:1 +见缝插针 1 +x:1 +无降雨期 1 +x:1 +环科所 1 +x:1 +历辈 1 +x:1 +铁靠山 1 +x:1 +兵谏亭 1 +x:1 +妇婴 1 +x:1 +单纯林 1 +x:1 +讦 1 +x:1 +下蛋 1 +x:1 +内忧 1 +x:1 +开镰 1 +x:1 +佛国 1 +x:1 +心绞痛 1 +x:1 +管理官 1 +x:1 +猫儿州村 1 +x:1 +门锁 1 +x:1 +骗人 1 +x:1 +丧权辱国 1 +x:1 +飒然 1 +x:1 +矢志不渝 1 +x:1 +玩命 1 +x:1 +加紧 1 +x:1 +库贷 1 +x:1 +技术处 1 +x:1 +般配 1 +x:1 +问题 1 +x:1 +终身大事 1 +x:1 +月季 1 +x:1 +方舱 1 +x:1 +迁进 1 +x:1 +观澜湖 1 +x:1 +府上 1 +x:1 +夫妻林 1 +x:1 +伊方 1 +x:1 +时不再来 1 +x:1 +可回收式 1 +x:1 +贱人 1 +x:1 +项城市 1 +x:1 +方舟 1 +x:1 +郴县 1 +x:1 +疯杈 1 +x:1 +铸成 1 +x:1 +少年宫 1 +x:1 +城郊乡 1 +x:1 +设施处 1 +x:1 +篮球队 1 +x:1 +疲劳度 1 +x:1 +轻便 1 +x:1 +贡献 1 +x:1 +乞讨者 1 +x:1 +忘我工作 1 +x:1 +鼎城区 1 +x:1 +廉洁 1 +x:1 +曲麻莱县 1 +x:1 +心室 1 +x:1 +军乐队 1 +x:1 +牛乳 1 +x:1 +暖季 1 +x:1 +渔业 1 +x:1 +邓州 1 +x:1 +产期 1 +x:1 +开玩笑 1 +x:1 +经久不衰 1 +x:1 +乔绒 1 +x:1 +扁锉 1 +x:1 +站长 1 +x:1 +可控硅 1 +x:1 +含混 1 +x:1 +份儿 1 +x:1 +极板 1 +x:1 +知青 1 +x:1 +宿主 1 +x:1 +分配器 1 +x:1 +文化界 1 +x:1 +屈膝 1 +x:1 +牛业 1 +x:1 +志得意满 1 +x:1 +销售商 1 +x:1 +轻信 1 +x:1 +护士节 1 +x:1 +石榴树 1 +x:1 +置疑 1 +x:1 +水豆腐 1 +x:1 +嬗变 1 +x:1 +地广人稀 1 +x:1 +转危为安 1 +x:1 +酋长国 1 +x:1 +同母兄弟 1 +x:1 +终结点 1 +x:1 +加油站 1 +x:1 +斜线 1 +x:1 +组织科长 1 +x:1 +故郡 1 +x:1 +论证 1 +x:1 +绕道 1 +x:1 +斜纹 1 +x:1 +故都 1 +x:1 +产权 1 +x:1 +广开门路 1 +x:1 +护养 1 +x:1 +门铃 1 +x:1 +枣子 1 +x:1 +纳税人 1 +x:1 +纺织染厂 1 +x:1 +续建 1 +x:1 +渔人 1 +x:1 +方药 1 +x:1 +牛仔 1 +x:1 +仪张村 1 +x:1 +日月星辰 1 +x:1 +飒爽英姿 1 +x:1 +外资额 1 +x:1 +三插溪 1 +x:1 +格恩济岛 1 +x:1 +卡具 1 +x:1 +轻伤 1 +x:1 +渔产 1 +x:1 +聚化 1 +x:1 +钚 3 +x:3 +椒贩 1 +x:1 +知音 1 +x:1 +发掘面 1 +x:1 +冬趣 1 +x:1 +早产儿 1 +x:1 +筚路蓝缕 1 +x:1 +水火难容 1 +x:1 +妇孺 1 +x:1 +航天飞机 1 +x:1 +击节 1 +x:1 +溢洪道 1 +x:1 +布里特 1 +x:1 +宿仇 1 +x:1 +使者 1 +x:1 +让开 1 +x:1 +仗势欺人 1 +x:1 +基础层 1 +x:1 +郑铁局 1 +x:1 +名建筑 1 +x:1 +凄厉 1 +x:1 +搜肠刮肚 1 +x:1 +盐酸盐 1 +x:1 +积炭 1 +x:1 +敏 95 +x:95 +算法 1 +x:1 +东挪西借 1 +x:1 +螳螂 1 +x:1 +童车厂 1 +x:1 +故道 1 +x:1 +集体主义 1 +x:1 +内庭 1 +x:1 +产中 1 +x:1 +池组 1 +x:1 +野外队 1 +x:1 +全额 1 +x:1 +姊夫 1 +x:1 +消散 1 +x:1 +癞癣 1 +x:1 +一医大 1 +x:1 +私企 1 +x:1 +医科院 1 +x:1 +邃 3 +x:3 +要义 1 +x:1 +要么 1 +x:1 +刊首 1 +x:1 +截瘫康 1 +x:1 +能源区 1 +x:1 +领队 1 +x:1 +聘期 1 +x:1 +软脂酸 1 +x:1 +心寒 1 +x:1 +吉铁 1 +x:1 +渤海 1 +x:1 +吉林街 1 +x:1 +制鞋业 1 +x:1 +资金量 1 +x:1 +西华县 1 +x:1 +黄梅县 1 +x:1 +经济所 1 +x:1 +新宅 1 +x:1 +纷呈 1 +x:1 +并提 1 +x:1 +内奸 1 +x:1 +改良费 1 +x:1 +下联 1 +x:1 +对答如流 1 +x:1 +辽 39 +x:39 +知道 1 +x:1 +隐秘处 1 +x:1 +试点村 1 +x:1 +夫妇 1 +x:1 +秉 2 +x:2 +施工图 1 +x:1 +要不 1 +x:1 +私住 1 +x:1 +夸—纳省 1 +x:1 +苦难感 1 +x:1 +付家坪 1 +x:1 +牵衣顿足 1 +x:1 +献花 1 +x:1 +乱纷纷 1 +x:1 +转接点 1 +x:1 +内外 1 +x:1 +团团圆圆 1 +x:1 +行贿式 1 +x:1 +走私犯 1 +x:1 +过日子 1 +x:1 +高瞻远瞩 1 +x:1 +极性 1 +x:1 +北伐军 1 +x:1 +州长 1 +x:1 +笑口 1 +x:1 +经济战 1 +x:1 +青丝 1 +x:1 +夫妻 1 +x:1 +聋哑症 1 +x:1 +梅谱 1 +x:1 +白日升天 1 +x:1 +武进 1 +x:1 +聚合 1 +x:1 +力大无比 1 +x:1 +宝清县 1 +x:1 +动态平衡 1 +x:1 +沐 14 +x:14 +公主岭 1 +x:1 +鄂东 1 +x:1 +挑 123 +x:123 +佛像 1 +x:1 +劫机犯 1 +x:1 +悦目 1 +x:1 +棚亭 1 +x:1 +杨浦区 1 +x:1 +德岛县 1 +x:1 +孰 27 +x:27 +金石滩 1 +x:1 +要塞区 1 +x:1 +论调 1 +x:1 +包头市 1 +x:1 +灭种 1 +x:1 +加筑 1 +x:1 +议论性 1 +x:1 +后脑勺子 1 +x:1 +溶解状 1 +x:1 +要件 1 +x:1 +神山 1 +x:1 +老爹 1 +x:1 +下肢 1 +x:1 +木条桌 1 +x:1 +综合征 1 +x:1 +溃逃 1 +x:1 +角落 1 +x:1 +要事 1 +x:1 +溃退 1 +x:1 +塘厦镇 1 +x:1 +期限 1 +x:1 +机场路 1 +x:1 +观摩会 1 +x:1 +足底 1 +x:1 +疫区 1 +x:1 +历览 1 +x:1 +镭射气 1 +x:1 +毁伤 1 +x:1 +私信 1 +x:1 +捉摸 1 +x:1 +德育室 1 +x:1 +制表符 1 +x:1 +佳婿 1 +x:1 +稃皮 1 +x:1 +救助性 1 +x:1 +盆栽 1 +x:1 +总体战 1 +x:1 +轮船 1 +x:1 +工商界 1 +x:1 +桂花 1 +x:1 +轮舱 1 +x:1 +要人 1 +x:1 +时鲜 1 +x:1 +养畜热 1 +x:1 +并拢 1 +x:1 +专业团 1 +x:1 +私下 1 +x:1 +柠檬 1 +x:1 +故障 1 +x:1 +十滴水 1 +x:1 +单纯性 1 +x:1 +马兰花 1 +x:1 +捐血者 1 +x:1 +磁盘 1 +x:1 +云龙纹 1 +x:1 +下腹 1 +x:1 +冷暖不定 1 +x:1 +闹情绪 1 +x:1 +佳宾 1 +x:1 +文化学术 1 +x:1 +周详 1 +x:1 +数字网 1 +x:1 +预制厂 1 +x:1 +敞亮亮 1 +x:1 +中央邦 1 +x:1 +炭子冲 1 +x:1 +垂直型 1 +x:1 +下腔 1 +x:1 +住校生 1 +x:1 +玉洁冰清 1 +x:1 +往访 1 +x:1 +抚平 1 +x:1 +万宝山 1 +x:1 +问鼎 1 +x:1 +纪录者 1 +x:1 +灵前 1 +x:1 +大头鱼 1 +x:1 +彩蝶 1 +x:1 +技术库 1 +x:1 +铺架 1 +x:1 +没着没落 1 +x:1 +达拉特 1 +x:1 +蛋黄 1 +x:1 +管理局 1 +x:1 +管理层 1 +x:1 +白话 1 +x:1 +尘嚣 1 +x:1 +韩币 1 +x:1 +命令权 1 +x:1 +维护 1 +x:1 +新翟村 1 +x:1 +下臣 1 +x:1 +蛋鸡 1 +x:1 +兼容性 1 +x:1 +梅花瓣型 1 +x:1 +私了 1 +x:1 +扭亏 1 +x:1 +内壁 1 +x:1 +蛋鸭 1 +x:1 +淅淅沥沥 1 +x:1 +虚像 1 +x:1 +要言不烦 1 +x:1 +深水 1 +x:1 +电脑凳 1 +x:1 +稀客 1 +x:1 +油炸摊 1 +x:1 +布拉格宫 1 +x:1 +波及面 1 +x:1 +私产 1 +x:1 +崖壁画 1 +x:1 +低中放 1 +x:1 +流质 1 +x:1 +勾结 1 +x:1 +露点 1 +x:1 +炮 35 +x:35 +科技 1 +x:1 +灵动 1 +x:1 +腕上 1 +x:1 +查阅者 1 +x:1 +局外人 1 +x:1 +速滑赛 1 +x:1 +内壳 1 +x:1 +消损 1 +x:1 +私仇 1 +x:1 +中共中央 1 +x:1 +讹传 1 +x:1 +中国式 1 +x:1 +谋害 1 +x:1 +内墙 1 +x:1 +诔 1 +x:1 +块 762 +x:762 +保管人 1 +x:1 +色香味 1 +x:1 +雪龙 1 +x:1 +无 2035 +x:2035 +陆源性 1 +x:1 +金鸡湖 1 +x:1 +文化班 1 +x:1 +民俗馆 1 +x:1 +枫树 1 +x:1 +瑶民 1 +x:1 +种姓 1 +x:1 +佳季 1 +x:1 +谋定 1 +x:1 +韩庄 1 +x:1 +补语 1 +x:1 +弘光 1 +x:1 +社会学 1 +x:1 +轮胎 1 +x:1 +产房 1 +x:1 +盘账 1 +x:1 +缺货 1 +x:1 +供水管 1 +x:1 +豺狼 1 +x:1 +内存 1 +x:1 +发扬踔厉 1 +x:1 +佳境 1 +x:1 +甘当 1 +x:1 +凯旋声 1 +x:1 +安凹镇 1 +x:1 +点种 1 +x:1 +舞曲 1 +x:1 +放大纸 1 +x:1 +铲除 1 +x:1 +一拥而入 1 +x:1 +暖干 1 +x:1 +苍松翠柏 1 +x:1 +走马 1 +x:1 +主导性 1 +x:1 +穿心莲 1 +x:1 +经济性 1 +x:1 +如意算盘 1 +x:1 +结合处 1 +x:1 +牧野 1 +x:1 +下船 1 +x:1 +顺水村 1 +x:1 +食 88 +x:88 +吉隆 1 +x:1 +格但斯克 1 +x:1 +冬衣 1 +x:1 +上方剑 1 +x:1 +核禁试 1 +x:1 +卮 1 +x:1 +急急火火 1 +x:1 +号头 1 +x:1 +碱性岩 1 +x:1 +苍青 1 +x:1 +再生 1 +x:1 +栩栩然 1 +x:1 +桐城县 1 +x:1 +谋士 1 +x:1 +甘心 1 +x:1 +马六甲 1 +x:1 +抚州 1 +x:1 +夫子 1 +x:1 +少年心 1 +x:1 +降格 1 +x:1 +罗布泊湖 1 +x:1 +南张家村 1 +x:1 +卷舌元音 1 +x:1 +含泥量 1 +x:1 +意粉 1 +x:1 +拒卖 1 +x:1 +祸胎 1 +x:1 +视盘机 1 +x:1 +尼洋河 1 +x:1 +妇幼 1 +x:1 +报春花 1 +x:1 +纤维管网 1 +x:1 +枣庄 1 +x:1 +宋都 1 +x:1 +抗菌素 1 +x:1 +章丘 1 +x:1 +冬装 1 +x:1 +冷笑 1 +x:1 +舞星 1 +x:1 +恍 3 +x:3 +妄下雌黄 1 +x:1 +电务段 1 +x:1 +玩偶 1 +x:1 +普拉多 1 +x:1 +优势 1 +x:1 +内定 1 +x:1 +喀土穆 1 +x:1 +朝野 1 +x:1 +氢弹 1 +x:1 +申购款 1 +x:1 +中生代 1 +x:1 +内室 1 +x:1 +漫天 1 +x:1 +施工员 1 +x:1 +死魂灵 1 +x:1 +自惭形秽 1 +x:1 +曲港勾连 1 +x:1 +内容 1 +x:1 +不得而知 1 +x:1 +桑榆暮景 1 +x:1 +润肤 1 +x:1 +轮转机 1 +x:1 +内家 1 +x:1 +辞色 1 +x:1 +亚硝胺 1 +x:1 +独立师 1 +x:1 +论辩 1 +x:1 +少言寡语 1 +x:1 +观察团 1 +x:1 +云 275 +x:275 +播放机 1 +x:1 +掣 7 +x:7 +尼日尔 1 +x:1 +核垄断 1 +x:1 +蓼蓝 1 +x:1 +鄂尔多斯 1 +x:1 +缰 3 +x:3 +独生子女 1 +x:1 +影像 1 +x:1 +南浔镇 1 +x:1 +芹 17 +x:17 +互利性 1 +x:1 +农作 1 +x:1 +袭击 1 +x:1 +扰民 1 +x:1 +稀奇 1 +x:1 +流过 1 +x:1 +炒米 1 +x:1 +攀龙附凤 1 +x:1 +佐 6 +x:6 +陶庙乡 1 +x:1 +棕 2 +x:2 +屋顶 1 +x:1 +癌肿 1 +x:1 +论述 1 +x:1 +流连 1 +x:1 +怀古 1 +x:1 +葡萄秧 1 +x:1 +期间 1 +x:1 +等级组 1 +x:1 +供水站 1 +x:1 +灵川县 1 +x:1 +销售业 1 +x:1 +搭架子 1 +x:1 +窃听器 1 +x:1 +明显 1 +x:1 +玩儿 1 +x:1 +联线 1 +x:1 +川菜 1 +x:1 +技术局 1 +x:1 +风雨剥蚀 1 +x:1 +撰文 1 +x:1 +看出 1 +x:1 +说实话 1 +x:1 +技术展 1 +x:1 +腰刀 1 +x:1 +搪塞 1 +x:1 +佛台 1 +x:1 +中体西用 1 +x:1 +吭 2 +x:2 +青稞麦 1 +x:1 +托人 1 +x:1 +剽悍 1 +x:1 +无懈可击 1 +x:1 +夫婿 1 +x:1 +贾宪三角 1 +x:1 +嗤笑 1 +x:1 +神游 1 +x:1 +语助词 1 +x:1 +波诡 1 +x:1 +召开 1 +x:1 +妇弟 1 +x:1 +雕塑系 1 +x:1 +佳奖 1 +x:1 +玩具 1 +x:1 +滋味 1 +x:1 +搜寻队 1 +x:1 +托付 1 +x:1 +无私奉献 1 +x:1 +佛历 1 +x:1 +形同虚设 1 +x:1 +房租费 1 +x:1 +狗屁不通 1 +x:1 +苍雄 1 +x:1 +颈项 1 +x:1 +版权页 1 +x:1 +腹壁 1 +x:1 +门道 1 +x:1 +雅室净几 1 +x:1 +岗位制 1 +x:1 +韩岗 1 +x:1 +促使 1 +x:1 +玄武区 1 +x:1 +雄纠纠 1 +x:1 +消遥自在 1 +x:1 +元元本本 1 +x:1 +军事科学 1 +x:1 +潜心 1 +x:1 +待 258 +x:258 +太平店村 1 +x:1 +内商 1 +x:1 +礼拜天 1 +x:1 +廉明 1 +x:1 +救助法 1 +x:1 +腹地 1 +x:1 +受害国 1 +x:1 +收集箱 1 +x:1 +莆田 1 +x:1 +佛山 1 +x:1 +发型师 1 +x:1 +发行业 1 +x:1 +燃亮 1 +x:1 +算术 1 +x:1 +于是 1 +x:1 +小户人家 1 +x:1 +尖头蝗 1 +x:1 +湍急 1 +x:1 +技术史 1 +x:1 +插图 1 +x:1 +屋面 1 +x:1 +时逢 1 +x:1 +苦活 1 +x:1 +表侄女 1 +x:1 +天遂人愿 1 +x:1 +挥之即去 1 +x:1 +到课率 1 +x:1 +轻世傲物 1 +x:1 +选装型 1 +x:1 +管线处 1 +x:1 +穹庐 1 +x:1 +使手机 1 +x:1 +结合地 1 +x:1 +讣告 1 +x:1 +译审员 1 +x:1 +洞箫 1 +x:1 +宗主权 1 +x:1 +由弱到强 1 +x:1 +大话 1 +x:1 +时速 1 +x:1 +老龄化 1 +x:1 +迄今 1 +x:1 +气盛 1 +x:1 +客运港 1 +x:1 +笊篱 1 +x:1 +小生产者 1 +x:1 +水光山色 1 +x:1 +目无全牛 1 +x:1 +销售店 1 +x:1 +锅盖 1 +x:1 +方尖碑 1 +x:1 +论者 1 +x:1 +消渴 1 +x:1 +总装厂 1 +x:1 +追忆 1 +x:1 +二传 1 +x:1 +输氧管 1 +x:1 +大法官 1 +x:1 +后半生 1 +x:1 +冷箭 1 +x:1 +女招待 1 +x:1 +社会学家 1 +x:1 +柠条 1 +x:1 +门齿 1 +x:1 +主焦点 1 +x:1 +澳抗 1 +x:1 +精算师 1 +x:1 +定军山 1 +x:1 +文化组 1 +x:1 +大学部 1 +x:1 +惩前毖后 1 +x:1 +技术化 1 +x:1 +增色添彩 1 +x:1 +诗词集 1 +x:1 +收费员证 1 +x:1 +滕州市 1 +x:1 +孝直村 1 +x:1 +首车 1 +x:1 +读书人 1 +x:1 +撤退 1 +x:1 +围 208 +x:208 +掩蔽部 1 +x:1 +爵士乐队 1 +x:1 +贴现率 1 +x:1 +板房 1 +x:1 +佛得角 1 +x:1 +辏 1 +x:1 +川资 1 +x:1 +营销员 1 +x:1 +枣儿 1 +x:1 +阳关大道 1 +x:1 +稀土 1 +x:1 +耕种 1 +x:1 +角角 1 +x:1 +釉质 1 +x:1 +算是 1 +x:1 +默克莱市 1 +x:1 +米坪镇 1 +x:1 +沧桑感 1 +x:1 +核爆炸 1 +x:1 +实习期 1 +x:1 +耍滑 1 +x:1 +炼焦厂 1 +x:1 +礼拜堂 1 +x:1 +打斋醮 1 +x:1 +傲骨 1 +x:1 +加盟 1 +x:1 +同水平 1 +x:1 +窝里斗 1 +x:1 +肌肉节 1 +x:1 +洞窟 1 +x:1 +川贝 1 +x:1 +晴朗 1 +x:1 +泔水 1 +x:1 +记数器 1 +x:1 +大展 1 +x:1 +吉首 1 +x:1 +下贱 1 +x:1 +卡宴 1 +x:1 +药单 1 +x:1 +危陋 1 +x:1 +内向 1 +x:1 +微 29 +x:29 +校规 1 +x:1 +手指字母 1 +x:1 +内含 1 +x:1 +另辟蹊径 1 +x:1 +金马河 1 +x:1 +红海省 1 +x:1 +非经济 1 +x:1 +收集站 1 +x:1 +进尺 1 +x:1 +危险 1 +x:1 +背静 1 +x:1 +纪念馆 1 +x:1 +愉悦 1 +x:1 +心急情切 1 +x:1 +灵府 1 +x:1 +选题 1 +x:1 +内哄 1 +x:1 +设防 1 +x:1 +讨饶 1 +x:1 +浮光掠影 1 +x:1 +推广站 1 +x:1 +流脑 1 +x:1 +泥盆纪 1 +x:1 +讨饭 1 +x:1 +走私罪 1 +x:1 +参差不一 1 +x:1 +镇委会 1 +x:1 +令爱 1 +x:1 +轮轨 1 +x:1 +轮转 1 +x:1 +洞穿 1 +x:1 +降服 1 +x:1 +洞穴 1 +x:1 +明晚 1 +x:1 +危难 1 +x:1 +卡子 1 +x:1 +换向 1 +x:1 +枣农 1 +x:1 +求全责备 1 +x:1 +毫米数 1 +x:1 +轮轴 1 +x:1 +玩弄 1 +x:1 +苛性钠 1 +x:1 +无穷的 1 +x:1 +无庸赘述 1 +x:1 +殷红 1 +x:1 +蜂乳 1 +x:1 +阴阳生 1 +x:1 +半身像 1 +x:1 +土沟村 1 +x:1 +夫君 1 +x:1 +苛性钾 1 +x:1 +金桥乡 1 +x:1 +证管办 1 +x:1 +雪泥鸿爪 1 +x:1 +妇儿 1 +x:1 +明白人 1 +x:1 +暖冬 1 +x:1 +打铁者 1 +x:1 +十四时 1 +x:1 +凰 2 +x:2 +千古不灭 1 +x:1 +外耳门 1 +x:1 +命根子 1 +x:1 +瘦小 1 +x:1 +阻劝 1 +x:1 +藏垢纳污 1 +x:1 +形象化 1 +x:1 +投袂而起 1 +x:1 +判若两人 1 +x:1 +左云 1 +x:1 +凄婉 1 +x:1 +助耕 1 +x:1 +首义路 1 +x:1 +卡壳 1 +x:1 +消沉 1 +x:1 +管理区 1 +x:1 +主干道 1 +x:1 +问道 1 +x:1 +他山之石 1 +x:1 +茶艺术 1 +x:1 +药膳 1 +x:1 +彝族乡 1 +x:1 +用药 1 +x:1 +簿籍 1 +x:1 +商法典 1 +x:1 +换型 1 +x:1 +象角 1 +x:1 +琴 74 +x:74 +亲历者 1 +x:1 +抚养 1 +x:1 +韩元 1 +x:1 +妻儿老小 1 +x:1 +增殖性 1 +x:1 +科海 1 +x:1 +天王星 1 +x:1 +天南海北 1 +x:1 +管理卡 1 +x:1 +茧绸 1 +x:1 +圣冈丹 1 +x:1 +资溪 1 +x:1 +佳品 1 +x:1 +甘化 1 +x:1 +接合部 1 +x:1 +埃特纳 1 +x:1 +内在 1 +x:1 +范本 1 +x:1 +颈间 1 +x:1 +障碍性 1 +x:1 +算数 1 +x:1 +内地 1 +x:1 +闹肚子 1 +x:1 +褥疮 1 +x:1 +遣词造句 1 +x:1 +噬 6 +x:6 +理屈辞穷 1 +x:1 +一共 1 +x:1 +福绥境 1 +x:1 +祛风 1 +x:1 +亚大地区 1 +x:1 +物质损耗 1 +x:1 +管理厅 1 +x:1 +缩微金报 1 +x:1 +德农厅 1 +x:1 +纰漏 1 +x:1 +喇嘛教 1 +x:1 +锄强扶弱 1 +x:1 +起床号 1 +x:1 +谜语 1 +x:1 +张本 1 +x:1 +盆景 1 +x:1 +灵川 1 +x:1 +下身 1 +x:1 +屋门 1 +x:1 +点画 1 +x:1 +管理司 1 +x:1 +闹店乡 1 +x:1 +杨桃 1 +x:1 +狼奔豕突 1 +x:1 +天子 1 +x:1 +波澜壮阔 1 +x:1 +韩军 1 +x:1 +混世魔王 1 +x:1 +方言 1 +x:1 +斜眼 1 +x:1 +发票款 1 +x:1 +盼望 1 +x:1 +猪栏 1 +x:1 +交响乐 1 +x:1 +彝族人 1 +x:1 +网球场 1 +x:1 +隐晦 1 +x:1 +污染物 1 +x:1 +恽城 1 +x:1 +梅花 1 +x:1 +下车 1 +x:1 +大钟寺 1 +x:1 +套衫 1 +x:1 +晋阳 1 +x:1 +排放量 1 +x:1 +轮距 1 +x:1 +管理制 1 +x:1 +歼灭 1 +x:1 +用书 1 +x:1 +专才 1 +x:1 +下载 1 +x:1 +译制片 1 +x:1 +表决权 1 +x:1 +佛影 1 +x:1 +惩罚 1 +x:1 +周末 1 +x:1 +贤 39 +x:39 +廉政 1 +x:1 +音响奖 1 +x:1 +普建 1 +x:1 +自行火炮 1 +x:1 +试点校 1 +x:1 +一句话 1 +x:1 +十一二点 1 +x:1 +准销证 1 +x:1 +纽瓦克 1 +x:1 +联合王国 1 +x:1 +攻关田 1 +x:1 +离心法 1 +x:1 +亮光光 1 +x:1 +糅 2 +x:2 +胶版纸 1 +x:1 +点炮手 1 +x:1 +辽中镇 1 +x:1 +朝发夕至 1 +x:1 +百日维新 1 +x:1 +佛开 1 +x:1 +乐施米 1 +x:1 +保健食品 1 +x:1 +半决赛 1 +x:1 +离心泵 1 +x:1 +肖形石 1 +x:1 +灵山 1 +x:1 +站牌点 1 +x:1 +降旗 1 +x:1 +歃血为盟 1 +x:1 +低级趣味 1 +x:1 +恩公 1 +x:1 +流转税 1 +x:1 +客座教授 1 +x:1 +知己知彼 1 +x:1 +洼地 1 +x:1 +形象办 1 +x:1 +朝鲜 1 +x:1 +赵畈村 1 +x:1 +下述 1 +x:1 +领馆 1 +x:1 +炊事 1 +x:1 +妇协 1 +x:1 +骤起 1 +x:1 +奖优罚劣 1 +x:1 +园区 1 +x:1 +用以 1 +x:1 +垛口 1 +x:1 +枳机草 1 +x:1 +下迄 1 +x:1 +力点 1 +x:1 +内因 1 +x:1 +表演会 1 +x:1 +护身符 1 +x:1 +顶骨 1 +x:1 +工商税 1 +x:1 +晴日 1 +x:1 +莫索罗 1 +x:1 +急变 1 +x:1 +用人 1 +x:1 +国家所有 1 +x:1 +邻角 1 +x:1 +兴平市 1 +x:1 +畜科所 1 +x:1 +名义工资 1 +x:1 +枝枝节节 1 +x:1 +租赁处 1 +x:1 +总编室 1 +x:1 +蛤蜊 1 +x:1 +下边 1 +x:1 +下达 1 +x:1 +契据 1 +x:1 +鹏城 1 +x:1 +武宁县 1 +x:1 +竹歧 1 +x:1 +点球 1 +x:1 +下辈 1 +x:1 +维加岛 1 +x:1 +国富民安 1 +x:1 +咳嗽 1 +x:1 +概念 1 +x:1 +呆呆板板 1 +x:1 +靖宇县 1 +x:1 +用于 1 +x:1 +下辖 1 +x:1 +复合性 1 +x:1 +屯兵 1 +x:1 +煤黑 1 +x:1 +食洋不化 1 +x:1 +走道 1 +x:1 +互通有无 1 +x:1 +佛塔 1 +x:1 +内兄 1 +x:1 +清扫工 1 +x:1 +加班 1 +x:1 +站 1071 +x:1071 +击败 1 +x:1 +小规模 1 +x:1 +税费卡 1 +x:1 +走遍 1 +x:1 +南戴河 1 +x:1 +焕然一新 1 +x:1 +纷纷扬扬 1 +x:1 +永无止境 1 +x:1 +下行 1 +x:1 +谈资 1 +x:1 +贝鲁特 1 +x:1 +社会党 1 +x:1 +阳宗海 1 +x:1 +换写 1 +x:1 +眼外伤 1 +x:1 +外耳道 1 +x:1 +技术型 1 +x:1 +谋利 1 +x:1 +言之谆谆 1 +x:1 +佛堂 1 +x:1 +贡米 1 +x:1 +太白星 1 +x:1 +农六师 1 +x:1 +最高 1 +x:1 +政治系 1 +x:1 +湘潭市 1 +x:1 +游客量 1 +x:1 +创始国 1 +x:1 +谋划 1 +x:1 +紧接着 1 +x:1 +小便宜 1 +x:1 +幽谷 1 +x:1 +游弋 1 +x:1 +匹兹堡市 1 +x:1 +口传心授 1 +x:1 +灵官 1 +x:1 +丑态百出 1 +x:1 +哀 7 +x:7 +畜舍 1 +x:1 +咖啡碱 1 +x:1 +腋芽 1 +x:1 +小鸟 1 +x:1 +流萤 1 +x:1 +下装 1 +x:1 +艺术家卷 1 +x:1 +萎靡不振 1 +x:1 +翻翻 1 +x:1 +油椰子 1 +x:1 +漫卷 1 +x:1 +贫穷线 1 +x:1 +房产主 1 +x:1 +韩城 1 +x:1 +舞池 1 +x:1 +流落 1 +x:1 +寰岛队 1 +x:1 +灵寝 1 +x:1 +荞面圪 1 +x:1 +少体校 1 +x:1 +作巢生卵 1 +x:1 +聚居 1 +x:1 +及 4596 +x:4596 +暖和 1 +x:1 +自卑心 1 +x:1 +密西西比 1 +x:1 +泡泡糖 1 +x:1 +作者群 1 +x:1 +动迁房 1 +x:1 +行贿型 1 +x:1 +呛 10 +x:10 +好听话 1 +x:1 +动迁户 1 +x:1 +若羌 1 +x:1 +灵寿 1 +x:1 +战略性 1 +x:1 +不变价格 1 +x:1 +时针 1 +x:1 +有鉴于此 1 +x:1 +音响库 1 +x:1 +楼下 1 +x:1 +巴别塔 1 +x:1 +认错 1 +x:1 +力矫 1 +x:1 +闷子车 1 +x:1 +论著 1 +x:1 +颀长 1 +x:1 +时钟 1 +x:1 +发热量 1 +x:1 +理 134 +x:134 +席草 1 +x:1 +玩家 1 +x:1 +敲骨吸髓 1 +x:1 +空军队 1 +x:1 +客运段 1 +x:1 +洞经 1 +x:1 +仪容 1 +x:1 +相机行事 1 +x:1 +题目 1 +x:1 +聂荣 1 +x:1 +屯垦 1 +x:1 +川西 1 +x:1 +不堪入目 1 +x:1 +L 6 +x:6 +技术图 1 +x:1 +契文 1 +x:1 +死理儿 1 +x:1 +下襟 1 +x:1 +须根 1 +x:1 +侠客 1 +x:1 +屯城 1 +x:1 +邓县 1 +x:1 +消毒 1 +x:1 +跃过 1 +x:1 +跃进 1 +x:1 +通间 1 +x:1 +糊糊饭 1 +x:1 +豪门 1 +x:1 +种养 1 +x:1 +点状 1 +x:1 +汕头市 1 +x:1 +洞纺 1 +x:1 +轮训 1 +x:1 +屈辱 1 +x:1 +范性 1 +x:1 +种兔 1 +x:1 +管理员 1 +x:1 +共振 1 +x:1 +期待值 1 +x:1 +声乐系 1 +x:1 +支付者 1 +x:1 +专业店 1 +x:1 +佳句 1 +x:1 +韩国 1 +x:1 +弈和 1 +x:1 +佩饰 1 +x:1 +夜静更深 1 +x:1 +不无关系 1 +x:1 +公司级 1 +x:1 +时间 1 +x:1 +表叔 1 +x:1 +续借 1 +x:1 +碑铭 1 +x:1 +一个样儿 1 +x:1 +辨别力 1 +x:1 +精算学 1 +x:1 +俄语 1 +x:1 +中资企业 1 +x:1 +谋反 1 +x:1 +忍不住 1 +x:1 +谋取 1 +x:1 +商标厂 1 +x:1 +俗话说 1 +x:1 +著文 1 +x:1 +卡张 1 +x:1 +结合力 1 +x:1 +大牧场 1 +x:1 +彗 1 +x:1 +代主席 1 +x:1 +姨夫 1 +x:1 +冬菜 1 +x:1 +角质 1 +x:1 +巡回展 1 +x:1 +召唤 1 +x:1 +云西新村 1 +x:1 +云海 1 +x:1 +小礼拜 1 +x:1 +撤销 1 +x:1 +备考 1 +x:1 +比重计 1 +x:1 +灰鼠皮 1 +x:1 +人工流产 1 +x:1 +燧石 1 +x:1 +交款台 1 +x:1 +浪漫主义 1 +x:1 +弃权 1 +x:1 +承购人 1 +x:1 +焊 15 +x:15 +种别 1 +x:1 +林农业 1 +x:1 +碑面 1 +x:1 +大团结 1 +x:1 +粗 58 +x:58 +召回 1 +x:1 +铝制品 1 +x:1 +关东糖 1 +x:1 +不弃前诺 1 +x:1 +黄金分割 1 +x:1 +滥配 1 +x:1 +勾留 1 +x:1 +澳大利队 1 +x:1 +自卫队 1 +x:1 +内卫 1 +x:1 +保外就医 1 +x:1 +掠夺性 1 +x:1 +茅台酒 1 +x:1 +盟辞 1 +x:1 +慕名而来 1 +x:1 +时限 1 +x:1 +榛鸡 1 +x:1 +惊诧 1 +x:1 +胡柚 1 +x:1 +肝素 1 +x:1 +翁 38 +x:38 +勾画 1 +x:1 +飘然欲仙 1 +x:1 +扰攘 1 +x:1 +择优汰劣 1 +x:1 +欢庆 1 +x:1 +显示牌 1 +x:1 +斜率 1 +x:1 +豪雨 1 +x:1 +小锅饭 1 +x:1 +春风得意 1 +x:1 +管线式 1 +x:1 +流蛘 1 +x:1 +酱坊 1 +x:1 +信 531 +x:531 +谦受益 1 +x:1 +无原则 1 +x:1 +叉腰 1 +x:1 +频率段 1 +x:1 +作恶多端 1 +x:1 +漫决 1 +x:1 +沙打旺 1 +x:1 +换取 1 +x:1 +社会化 1 +x:1 +明朗 1 +x:1 +香云纱 1 +x:1 +草帽缏 1 +x:1 +原子级 1 +x:1 +甘城 1 +x:1 +李埝乡 1 +x:1 +撤除 1 +x:1 +脆弱性 1 +x:1 +迭部 1 +x:1 +社会史 1 +x:1 +所得者 1 +x:1 +笙 1 +x:1 +任人宰割 1 +x:1 +起点价 1 +x:1 +素净 1 +x:1 +察微知晓 1 +x:1 +沁人肺腑 1 +x:1 +管理型 1 +x:1 +腹内 1 +x:1 +轮补 1 +x:1 +非鞅 1 +x:1 +八里庄桥 1 +x:1 +疲 11 +x:11 +泡泡纱 1 +x:1 +谷 130 +x:130 +改革派 1 +x:1 +苍龙 1 +x:1 +系统工程 1 +x:1 +旨趣 1 +x:1 +枣园 1 +x:1 +降息 1 +x:1 +龙亭区 1 +x:1 +永顺 1 +x:1 +愈发 1 +x:1 +打 1617 +x:1617 +呓语 1 +x:1 +犬齿 1 +x:1 +后脑勺儿 1 +x:1 +卡尺 1 +x:1 +危重 1 +x:1 +卡尼 1 +x:1 +点焊 1 +x:1 +腾飞型 1 +x:1 +昂扬斗志 1 +x:1 +佳偶 1 +x:1 +冲积扇 1 +x:1 +盲文 1 +x:1 +时隔 1 +x:1 +翘板 1 +x:1 +音像法 1 +x:1 +九泉之下 1 +x:1 +熟地黄 1 +x:1 +贵德县 1 +x:1 +全封闭 1 +x:1 +书名号 1 +x:1 +销售处 1 +x:1 +加热 1 +x:1 +周武王 1 +x:1 +围棋队 1 +x:1 +灵堂 1 +x:1 +大建福 1 +x:1 +植树权 1 +x:1 +人心如面 1 +x:1 +敏感性 1 +x:1 +贡缎 1 +x:1 +补补 1 +x:1 +前往者 1 +x:1 +佛学 1 +x:1 +汪洋恣肆 1 +x:1 +净空 1 +x:1 +桂西 1 +x:1 +碑阴 1 +x:1 +陆 244 +x:244 +苍鹭 1 +x:1 +灵塔 1 +x:1 +溪谷 1 +x:1 +人勤地沃 1 +x:1 +改革法 1 +x:1 +缔造者 1 +x:1 +中队部 1 +x:1 +苍鹰 1 +x:1 +怡情 1 +x:1 +伯诺尼 1 +x:1 +马楼 1 +x:1 +国富民强 1 +x:1 +销售奖 1 +x:1 +吸附状 1 +x:1 +颈部 1 +x:1 +冒 253 +x:253 +门风 1 +x:1 +基本工资 1 +x:1 +翘曲 1 +x:1 +条件者 1 +x:1 +姑奶奶 1 +x:1 +蓝幽幽 1 +x:1 +不眠之夜 1 +x:1 +点灯 1 +x:1 +短柄 1 +x:1 +契机 1 +x:1 +石膏像 1 +x:1 +搜集 1 +x:1 +侠女 1 +x:1 +技术员 1 +x:1 +甜椒 1 +x:1 +管弦乐 1 +x:1 +下课 1 +x:1 +杨楼 1 +x:1 +问问 1 +x:1 +有所为 1 +x:1 +佛寺 1 +x:1 +热机 1 +x:1 +粗墩墩 1 +x:1 +并发症 1 +x:1 +甜津津 1 +x:1 +川语 1 +x:1 +触犯 1 +x:1 +分割感 1 +x:1 +玩处 1 +x:1 +专业展 1 +x:1 +新乐市 1 +x:1 +松果体素 1 +x:1 +绽白 1 +x:1 +趋之若鹜 1 +x:1 +腋臭 1 +x:1 +内功 1 +x:1 +内力 1 +x:1 +加尔各答 1 +x:1 +下访 1 +x:1 +下设 1 +x:1 +严密性 1 +x:1 +内助 1 +x:1 +佛家 1 +x:1 +内务 1 +x:1 +屠苏 1 +x:1 +吐绶鸡 1 +x:1 +实质性 1 +x:1 +救助款 1 +x:1 +苍黑 1 +x:1 +冬至 1 +x:1 +酱园 1 +x:1 +庆功会 1 +x:1 +贤良 1 +x:1 +肥分 1 +x:1 +反腐纠风 1 +x:1 +闸口 1 +x:1 +洋橄榄 1 +x:1 +亚非 1 +x:1 +以资村 1 +x:1 +奥地利籍 1 +x:1 +能大则大 1 +x:1 +造物 1 +x:1 +收信人 1 +x:1 +公共课 1 +x:1 +城下之盟 1 +x:1 +镀铬钢 1 +x:1 +迭部县 1 +x:1 +现形 1 +x:1 +吊架 1 +x:1 +魔法 1 +x:1 +闭月羞花 1 +x:1 +工具车 1 +x:1 +鸿运 1 +x:1 +寤寐思之 1 +x:1 +大节 1 +x:1 +活字典 1 +x:1 +补苗 1 +x:1 +拉犁山 1 +x:1 +千山万水 1 +x:1 +谈判 1 +x:1 +吊柜 1 +x:1 +蓄意 1 +x:1 +商报 1 +x:1 +碍手碍脚 1 +x:1 +动物油 1 +x:1 +篮球 1 +x:1 +兵临城下 1 +x:1 +胜过 1 +x:1 +值日 1 +x:1 +福人 1 +x:1 +身分证 1 +x:1 +白药 1 +x:1 +汽油桶 1 +x:1 +关系 1 +x:1 +校址 1 +x:1 +蛆虫 1 +x:1 +校均 1 +x:1 +外科 1 +x:1 +穿法 1 +x:1 +追回 1 +x:1 +树窝 1 +x:1 +黄色炸药 1 +x:1 +金刘寨村 1 +x:1 +胜迹 1 +x:1 +思维会 1 +x:1 +逍林 1 +x:1 +二娘 1 +x:1 +电讯报 1 +x:1 +有日子 1 +x:1 +幻觉 1 +x:1 +付店乡 1 +x:1 +独脚戏 1 +x:1 +白莲 1 +x:1 +圆柱形 1 +x:1 +配售 1 +x:1 +大船 1 +x:1 +招待饭 1 +x:1 +质量关 1 +x:1 +胪溪 1 +x:1 +查铺 1 +x:1 +欢呼 1 +x:1 +长寿菜 1 +x:1 +木头疙瘩 1 +x:1 +枚 347 +x:347 +产品权 1 +x:1 +著作者 1 +x:1 +补色 1 +x:1 +贵族化 1 +x:1 +炎炎 1 +x:1 +不畏 1 +x:1 +硝化细菌 1 +x:1 +半地穴式 1 +x:1 +大舅 1 +x:1 +辞语 1 +x:1 +桃源县 1 +x:1 +情况 1 +x:1 +冬常服 1 +x:1 +不顾死活 1 +x:1 +云消雾散 1 +x:1 +注射 1 +x:1 +泉州籍 1 +x:1 +并非如此 1 +x:1 +依赖 1 +x:1 +斗山 1 +x:1 +魔水 1 +x:1 +套型 1 +x:1 +不用 1 +x:1 +日日月月 1 +x:1 +怡香院 1 +x:1 +大轴子 1 +x:1 +偏南 1 +x:1 +以便 1 +x:1 +不由 1 +x:1 +大良 1 +x:1 +吊杆 1 +x:1 +生命主义 1 +x:1 +不远千里 1 +x:1 +对等 1 +x:1 +苔原 1 +x:1 +辞讼 1 +x:1 +轮廓灯 1 +x:1 +白菜 1 +x:1 +土雷子 1 +x:1 +曲塘镇 1 +x:1 +刘家村 1 +x:1 +来生 1 +x:1 +租借地 1 +x:1 +骑士队 1 +x:1 +贺金 1 +x:1 +广 403 +x:403 +对策 1 +x:1 +足坛 1 +x:1 +棉兰老 1 +x:1 +玻璃厂 1 +x:1 +劣性 1 +x:1 +重用 1 +x:1 +莱斯特 1 +x:1 +财委会 1 +x:1 +水利界 1 +x:1 +豆豆 1 +x:1 +豆豉 1 +x:1 +挣钱 1 +x:1 +顶梁柱 1 +x:1 +可笑 1 +x:1 +作业本 1 +x:1 +车马费 1 +x:1 +联盟 1 +x:1 +毋宁 1 +x:1 +突击月 1 +x:1 +楼道 1 +x:1 +七连冠 1 +x:1 +警卫团 1 +x:1 +美滋滋 1 +x:1 +行医 1 +x:1 +办学率 1 +x:1 +触礁 1 +x:1 +鲁夸省 1 +x:1 +大秧歌 1 +x:1 +鬼 23 +x:23 +引燃 1 +x:1 +挤兑 1 +x:1 +大街 1 +x:1 +残困户 1 +x:1 +营业 1 +x:1 +爵士乐 1 +x:1 +号兵 1 +x:1 +音乐系 1 +x:1 +尤为 1 +x:1 +援例 1 +x:1 +软盘 1 +x:1 +化油器 1 +x:1 +酣然 1 +x:1 +行旅如织 1 +x:1 +对立 1 +x:1 +酬谢 1 +x:1 +以下 1 +x:1 +以上 1 +x:1 +租赁费 1 +x:1 +大菜 1 +x:1 +乌克兰队 1 +x:1 +灭火 1 +x:1 +阿司匹林 1 +x:1 +垂直带 1 +x:1 +指责 1 +x:1 +欢喜 1 +x:1 +后援团 1 +x:1 +连带关系 1 +x:1 +库内 1 +x:1 +补药 1 +x:1 +查问 1 +x:1 +白花 1 +x:1 +联合党 1 +x:1 +职业道德 1 +x:1 +因势利导 1 +x:1 +低毒级 1 +x:1 +劲射 1 +x:1 +科技版 1 +x:1 +律政司 1 +x:1 +挤出 1 +x:1 +新政协 1 +x:1 +立碑为铭 1 +x:1 +婉言 1 +x:1 +湖东 1 +x:1 +短期 1 +x:1 +调查官 1 +x:1 +轻飘飘 1 +x:1 +软瘫 1 +x:1 +心烦意乱 1 +x:1 +噌噌 1 +x:1 +配合 1 +x:1 +库克 1 +x:1 +宜牧 1 +x:1 +戒刀 1 +x:1 +穷期 1 +x:1 +外项 1 +x:1 +组合式 1 +x:1 +熬心 1 +x:1 +综合奖 1 +x:1 +按键 1 +x:1 +初装费 1 +x:1 +谈及 1 +x:1 +纷至沓来 1 +x:1 +关怀备至 1 +x:1 +欢唱 1 +x:1 +被开方数 1 +x:1 +成林 1 +x:1 +重病 1 +x:1 +指挥棒 1 +x:1 +重症 1 +x:1 +不理 1 +x:1 +二元 1 +x:1 +死党 1 +x:1 +闸刀 1 +x:1 +语文课 1 +x:1 +有章可循 1 +x:1 +哲布拉山 1 +x:1 +笑谈 1 +x:1 +坦克 1 +x:1 +本本 1 +x:1 +穿流 1 +x:1 +不知 1 +x:1 +斩假石 1 +x:1 +寻短见 1 +x:1 +墨水池 1 +x:1 +自找 1 +x:1 +办学点 1 +x:1 +前月 1 +x:1 +吹沙居 1 +x:1 +裂痕 1 +x:1 +大肥 1 +x:1 +粗气 1 +x:1 +伪证罪 1 +x:1 +尔 6 +x:6 +大肠 1 +x:1 +油头粉面 1 +x:1 +灰口铁 1 +x:1 +邮政所 1 +x:1 +披散 1 +x:1 +补胎 1 +x:1 +渔业法 1 +x:1 +死力 1 +x:1 +时间表 1 +x:1 +合宪性 1 +x:1 +抗诉案 1 +x:1 +大肆 1 +x:1 +三角学 1 +x:1 +一体式 1 +x:1 +群雄逐鹿 1 +x:1 +无源之水 1 +x:1 +假赔案 1 +x:1 +勋 5 +x:5 +尘封 1 +x:1 +控球技术 1 +x:1 +冰魂 1 +x:1 +巴拉圭 1 +x:1 +古都 1 +x:1 +广播剧 1 +x:1 +厚重感 1 +x:1 +石渠县 1 +x:1 +对称 1 +x:1 +铅块 1 +x:1 +重百 1 +x:1 +明末 1 +x:1 +猛跌 1 +x:1 +雨点子 1 +x:1 +粗衣淡食 1 +x:1 +自寻短见 1 +x:1 +拖车 1 +x:1 +查阅 1 +x:1 +廉政者 1 +x:1 +大胜 1 +x:1 +拖轮 1 +x:1 +大胆 1 +x:1 +递 48 +x:48 +将令 1 +x:1 +篾刀 1 +x:1 +瘦肉 1 +x:1 +寸步不离 1 +x:1 +大农场 1 +x:1 +质量卡 1 +x:1 +漉 1 +x:1 +胜负 1 +x:1 +赤霉素 1 +x:1 +如皋 1 +x:1 +贤能 1 +x:1 +核力量 1 +x:1 +外国人 1 +x:1 +粗沙 1 +x:1 +二分 1 +x:1 +低牌子 1 +x:1 +死刑 1 +x:1 +克音村 1 +x:1 +计算尺 1 +x:1 +不像话 1 +x:1 +普药 1 +x:1 +倒春寒 1 +x:1 +来着 1 +x:1 +羽坛 1 +x:1 +低声波 1 +x:1 +西湖洞村 1 +x:1 +大者 1 +x:1 +胜败 1 +x:1 +大考 1 +x:1 +烛形灯 1 +x:1 +大老 1 +x:1 +幸运 1 +x:1 +门脸儿 1 +x:1 +二则 1 +x:1 +胚胎 1 +x:1 +二副 1 +x:1 +免 155 +x:155 +周致 1 +x:1 +再贷款 1 +x:1 +拖运 1 +x:1 +丁点儿 1 +x:1 +情变 1 +x:1 +联用 1 +x:1 +七甲路 1 +x:1 +进而 1 +x:1 +的确 1 +x:1 +弃渔 1 +x:1 +份子 1 +x:1 +来看 1 +x:1 +走弯路 1 +x:1 +补考 1 +x:1 +无男孩 1 +x:1 +余香 1 +x:1 +供应券 1 +x:1 +引爆 1 +x:1 +古道 1 +x:1 +情史 1 +x:1 +调查处 1 +x:1 +陈笪村 1 +x:1 +六亲不认 1 +x:1 +死去 1 +x:1 +情分 1 +x:1 +座机 1 +x:1 +挤占 1 +x:1 +集电极 1 +x:1 +辞行 1 +x:1 +兖州市 1 +x:1 +顺理成章 1 +x:1 +灿若群星 1 +x:1 +奸商 1 +x:1 +供应司 1 +x:1 +守夜人 1 +x:1 +磁电 1 +x:1 +长坂坡 1 +x:1 +粗活 1 +x:1 +性骚扰 1 +x:1 +粗浅 1 +x:1 +大致 1 +x:1 +肥厚 1 +x:1 +瓜棚 1 +x:1 +烟灰 1 +x:1 +硒 1 +x:1 +大臣 1 +x:1 +真释 1 +x:1 +篾匠 1 +x:1 +张弓镇 1 +x:1 +滤色片 1 +x:1 +绕弯子 1 +x:1 +深得人心 1 +x:1 +不为人知 1 +x:1 +补助费 1 +x:1 +二双 1 +x:1 +本条 1 +x:1 +可疑人 1 +x:1 +谈兴 1 +x:1 +大丰县 1 +x:1 +惨境 1 +x:1 +折旧费 1 +x:1 +出售方 1 +x:1 +裂殖菌 1 +x:1 +先锋艇 1 +x:1 +裂璺 1 +x:1 +座架 1 +x:1 +赢家 1 +x:1 +超负荷 1 +x:1 +仪表堂堂 1 +x:1 +辈 34 +x:34 +警卫员 1 +x:1 +获益匪浅 1 +x:1 +桂 71 +x:71 +粒子束 1 +x:1 +抖 18 +x:18 +冷冷清清 1 +x:1 +拉格斯 1 +x:1 +勘误表 1 +x:1 +俳人 1 +x:1 +听天由命 1 +x:1 +大脑 1 +x:1 +誓作 1 +x:1 +秘鲁队 1 +x:1 +大脚 1 +x:1 +支 1140 +x:1140 +树神 1 +x:1 +自谋 1 +x:1 +情势 1 +x:1 +中农信 1 +x:1 +妄想型 1 +x:1 +广播厅 1 +x:1 +贴补率 1 +x:1 +全集观 1 +x:1 +上月份 1 +x:1 +库区 1 +x:1 +广播台 1 +x:1 +南塘村 1 +x:1 +养兵 1 +x:1 +大腿 1 +x:1 +码洋 1 +x:1 +号召 1 +x:1 +配器 1 +x:1 +南山村 1 +x:1 +证书费 1 +x:1 +库克斯区 1 +x:1 +重石 1 +x:1 +孟店桥村 1 +x:1 +愁思 1 +x:1 +大腕 1 +x:1 +回形针 1 +x:1 +固守 1 +x:1 +固安 1 +x:1 +大成 1 +x:1 +不即不离 1 +x:1 +龇牙咧嘴 1 +x:1 +幔帐 1 +x:1 +佳 181 +x:181 +二单 1 +x:1 +灰指甲 1 +x:1 +固定 1 +x:1 +仲冬 1 +x:1 +仪轨 1 +x:1 +孤伶伶 1 +x:1 +肃然 1 +x:1 +夜半更深 1 +x:1 +老好人 1 +x:1 +钢条 1 +x:1 +软玉 1 +x:1 +李家沟 1 +x:1 +楼长 1 +x:1 +死咸 1 +x:1 +穿梭 1 +x:1 +诸君 1 +x:1 +白蜡 1 +x:1 +追加 1 +x:1 +软糖 1 +x:1 +东南风 1 +x:1 +校医 1 +x:1 +钢板 1 +x:1 +石化城 1 +x:1 +那 2963 +x:2963 +仲夏 1 +x:1 +科教兴林 1 +x:1 +龟鹤延年 1 +x:1 +号名 1 +x:1 +刚巧 1 +x:1 +竹山县 1 +x:1 +当事人 1 +x:1 +谰 1 +x:1 +钢材 1 +x:1 +套印 1 +x:1 +维尼龙 1 +x:1 +附着力 1 +x:1 +太铁 1 +x:1 +披挂 1 +x:1 +套包 1 +x:1 +二哥 1 +x:1 +独具只眼 1 +x:1 +航站区 1 +x:1 +情商 1 +x:1 +钢木 1 +x:1 +轻工业局 1 +x:1 +恶语 1 +x:1 +外祸 1 +x:1 +羽冠 1 +x:1 +背道而驰 1 +x:1 +苏伊士 1 +x:1 +太钢 1 +x:1 +胜诉 1 +x:1 +突击手 1 +x:1 +修车店 1 +x:1 +丹麦队 1 +x:1 +牛刀小试 1 +x:1 +颁奖会 1 +x:1 +州选 1 +x:1 +重钙 1 +x:1 +广播员 1 +x:1 +叙说 1 +x:1 +研论会 1 +x:1 +普遍性 1 +x:1 +雷 923 +x:923 +节育器 1 +x:1 +错乱 1 +x:1 +观众群 1 +x:1 +猜中 1 +x:1 +忽 49 +x:49 +豆角 1 +x:1 +总府路 1 +x:1 +中幔 1 +x:1 +收杆 1 +x:1 +青城镇 1 +x:1 +重炮 1 +x:1 +早期 1 +x:1 +滑行道 1 +x:1 +套取 1 +x:1 +倚坐 1 +x:1 +舒卷 1 +x:1 +电介质 1 +x:1 +白螭 1 +x:1 +编余 1 +x:1 +铜业 1 +x:1 +重点 1 +x:1 +楼门 1 +x:1 +颧骨 1 +x:1 +劲头 1 +x:1 +施工处 1 +x:1 +核能力 1 +x:1 +美联社 1 +x:1 +鱼贯 1 +x:1 +潮剧 1 +x:1 +缓释 1 +x:1 +心底 1 +x:1 +鹅毛扇 1 +x:1 +拄 20 +x:20 +高感光度 1 +x:1 +大虾 1 +x:1 +死命 1 +x:1 +更鼓 1 +x:1 +捐献卡 1 +x:1 +钢架 1 +x:1 +不然 1 +x:1 +孕 6 +x:6 +故步自封 1 +x:1 +大虫 1 +x:1 +小朋友 1 +x:1 +谈固 1 +x:1 +啤酒业 1 +x:1 +杂面 1 +x:1 +牧歌式 1 +x:1 +医学界 1 +x:1 +共有性 1 +x:1 +注塑 1 +x:1 +东台市 1 +x:1 +韵味 1 +x:1 +戒坛 1 +x:1 +出线权 1 +x:1 +老妪能解 1 +x:1 +哲蚌寺 1 +x:1 +五爱星 1 +x:1 +弦乐器 1 +x:1 +中转地 1 +x:1 +害人虫 1 +x:1 +劳役地租 1 +x:1 +交易周 1 +x:1 +山野菜 1 +x:1 +枪击 1 +x:1 +不胫而走 1 +x:1 +狂泉 1 +x:1 +供需 1 +x:1 +足协 1 +x:1 +关禁 1 +x:1 +众声 1 +x:1 +生物学家 1 +x:1 +发证 1 +x:1 +昏惨惨 1 +x:1 +校刊 1 +x:1 +信访人 1 +x:1 +酣畅 1 +x:1 +登记数 1 +x:1 +娇嫩嫩 1 +x:1 +改制面 1 +x:1 +逐块 1 +x:1 +刺 62 +x:62 +阔老 1 +x:1 +一年期 1 +x:1 +错位 1 +x:1 +平平直直 1 +x:1 +羊毛衫裤 1 +x:1 +非全国性 1 +x:1 +感应圈 1 +x:1 +严明 1 +x:1 +指标性 1 +x:1 +树群 1 +x:1 +古韵 1 +x:1 +权杖 1 +x:1 +以攻为守 1 +x:1 +岗警 1 +x:1 +三角尺 1 +x:1 +编审科 1 +x:1 +空气型 1 +x:1 +对练 1 +x:1 +追叙 1 +x:1 +空置 1 +x:1 +套制 1 +x:1 +雪峰 1 +x:1 +序列 1 +x:1 +酣甜 1 +x:1 +歇息 1 +x:1 +软舌螺 1 +x:1 +白虎 1 +x:1 +情味 1 +x:1 +交响乐团 1 +x:1 +校务 1 +x:1 +℃ 62 +x:62 +裂片 1 +x:1 +普及率 1 +x:1 +哥白尼 1 +x:1 +供应商 1 +x:1 +不灵 1 +x:1 +函件 1 +x:1 +扑火队 1 +x:1 +耙 7 +x:7 +泪脂质 1 +x:1 +客房部 1 +x:1 +督促 1 +x:1 +针灸师 1 +x:1 +彩花 1 +x:1 +白蚁 1 +x:1 +敬谢不敏 1 +x:1 +尘寰 1 +x:1 +对局费 1 +x:1 +校办 1 +x:1 +告特叶 1 +x:1 +追印 1 +x:1 +快板儿 1 +x:1 +软片 1 +x:1 +引申 1 +x:1 +权柄 1 +x:1 +狂气 1 +x:1 +幻象 1 +x:1 +古典文学 1 +x:1 +引用 1 +x:1 +公务机 1 +x:1 +恙 1 +x:1 +犀牛 1 +x:1 +吊扇 1 +x:1 +团 441 +x:441 +情哥 1 +x:1 +电渣炉 1 +x:1 +舰载 1 +x:1 +白蛇 1 +x:1 +生物性 1 +x:1 +校勘 1 +x:1 +杀人如麻 1 +x:1 +晾晒 1 +x:1 +吊扣 1 +x:1 +拉合尔市 1 +x:1 +羽叶 1 +x:1 +约通社 1 +x:1 +奴隶主 1 +x:1 +谈吐 1 +x:1 +关窗 1 +x:1 +潮头 1 +x:1 +辐射式 1 +x:1 +化学能 1 +x:1 +通经 1 +x:1 +楼面 1 +x:1 +翔实 1 +x:1 +笑语 1 +x:1 +哥儿们 1 +x:1 +佐剂 1 +x:1 +联合国 1 +x:1 +逗趣 1 +x:1 +腰果汁 1 +x:1 +大蒜 1 +x:1 +笑话 1 +x:1 +口若悬河 1 +x:1 +中南局 1 +x:1 +蒜泥 1 +x:1 +佐治亚 1 +x:1 +三角形 1 +x:1 +事业有成 1 +x:1 +潜心者 1 +x:1 +游说 1 +x:1 +调查局 1 +x:1 +阳性植物 1 +x:1 +沂源 1 +x:1 +千难万险 1 +x:1 +重物 1 +x:1 +稽核 1 +x:1 +妆奁 1 +x:1 +配号 1 +x:1 +死因 1 +x:1 +狂澜 1 +x:1 +宗师 1 +x:1 +皂荚 1 +x:1 +清莱府 1 +x:1 +拦网 1 +x:1 +死囚 1 +x:1 +质量型 1 +x:1 +草场村 1 +x:1 +古铜 1 +x:1 +批示 1 +x:1 +配发 1 +x:1 +赶集会 1 +x:1 +解放社 1 +x:1 +防雨布 1 +x:1 +铅印 1 +x:1 +遮光 1 +x:1 +大农区 1 +x:1 +爪尖儿 1 +x:1 +重犯 1 +x:1 +畅销 1 +x:1 +』 4051 +x:4051 +学者型 1 +x:1 +周薪 1 +x:1 +大营 1 +x:1 +关税 1 +x:1 +科技界 1 +x:1 +白薯 1 +x:1 +泳技 1 +x:1 +千难万难 1 +x:1 +快班车 1 +x:1 +看见 1 +x:1 +开立 1 +x:1 +狂潮 1 +x:1 +鸿鹄之志 1 +x:1 +项链坠 1 +x:1 +李家渡 1 +x:1 +羽协 1 +x:1 +忙不迭 1 +x:1 +程度 1 +x:1 +红模子 1 +x:1 +太阳 1 +x:1 +砍头 1 +x:1 +位数 1 +x:1 +歧管 1 +x:1 +剩余油 1 +x:1 +寻求 1 +x:1 +大著 1 +x:1 +羽化 1 +x:1 +太行山 1 +x:1 +犀照 1 +x:1 +魔术 1 +x:1 +瓷种 1 +x:1 +程序 1 +x:1 +保和殿 1 +x:1 +供货量 1 +x:1 +马店镇 1 +x:1 +检字法 1 +x:1 +呷 4 +x:4 +药剂科 1 +x:1 +不独 1 +x:1 +酣睡 1 +x:1 +水平沟 1 +x:1 +供销 1 +x:1 +劣者 1 +x:1 +主流程 1 +x:1 +熬夜 1 +x:1 +白头发 1 +x:1 +注定 1 +x:1 +九二零 1 +x:1 +狒狒 1 +x:1 +行刺 1 +x:1 +万绿湖 1 +x:1 +奸党 1 +x:1 +瓷砖 1 +x:1 +秀山 1 +x:1 +表决 1 +x:1 +铅制 1 +x:1 +活火山 1 +x:1 +隐身术 1 +x:1 +功成身退 1 +x:1 +山高水低 1 +x:1 +霞云岭乡 1 +x:1 +来犯 1 +x:1 +僵化 1 +x:1 +双眸 1 +x:1 +联点 1 +x:1 +义勇军 1 +x:1 +不犯 1 +x:1 +采访记 1 +x:1 +追击 1 +x:1 +鞭辟入里 1 +x:1 +运用裕如 1 +x:1 +初时 1 +x:1 +联合型 1 +x:1 +薄弱校 1 +x:1 +刑侦 1 +x:1 +改天换地 1 +x:1 +古间 1 +x:1 +千家万户 1 +x:1 +三角帆 1 +x:1 +圣经 1 +x:1 +教学法 1 +x:1 +刚度 1 +x:1 +程式 1 +x:1 +默化潜移 1 +x:1 +楼阁 1 +x:1 +大藏 1 +x:1 +死地 1 +x:1 +教育社 1 +x:1 +证据法 1 +x:1 +了 76178 +x:76178 +贫乏 1 +x:1 +协理 1 +x:1 +配制 1 +x:1 +泪腺 1 +x:1 +重现 1 +x:1 +小不点 1 +x:1 +拟定 1 +x:1 +视同儿戏 1 +x:1 +搞好 1 +x:1 +库坝 1 +x:1 +约 1311 +x:1311 +保安厅 1 +x:1 +号型 1 +x:1 +棉研所 1 +x:1 +叙利亚 1 +x:1 +瓷碗 1 +x:1 +汉口站 1 +x:1 +哑口无言 1 +x:1 +马爬犁 1 +x:1 +婉谢 1 +x:1 +棋队 1 +x:1 +挤垮 1 +x:1 +棋院 1 +x:1 +荃 7 +x:7 +违禁物品 1 +x:1 +醪糟 1 +x:1 +煞住 1 +x:1 +泄底 1 +x:1 +猪草机 1 +x:1 +大合唱 1 +x:1 +关卡税 1 +x:1 +配剂 1 +x:1 +古镇 1 +x:1 +搞头 1 +x:1 +闹灾荒 1 +x:1 +壅塞 1 +x:1 +环抱 1 +x:1 +供应地 1 +x:1 +肃立 1 +x:1 +铜管乐器 1 +x:1 +队委会 1 +x:1 +走牛 1 +x:1 +脆 13 +x:13 +放热反应 1 +x:1 +狞笑 1 +x:1 +扭亏转盈 1 +x:1 +能者多劳 1 +x:1 +预备役团 1 +x:1 +中寒武世 1 +x:1 +钾肥 1 +x:1 +平均分 1 +x:1 +长大成人 1 +x:1 +基西米市 1 +x:1 +情夫 1 +x:1 +分校 1 +x:1 +槐荫区 1 +x:1 +泄入 1 +x:1 +车户 1 +x:1 +平均制 1 +x:1 +副科 1 +x:1 +大同江 1 +x:1 +然则 1 +x:1 +扶手椅 1 +x:1 +可爱 1 +x:1 +总经理 1 +x:1 +用人关 1 +x:1 +豆庄镇 1 +x:1 +闸室 1 +x:1 +初战 1 +x:1 +索赔证 1 +x:1 +花边新闻 1 +x:1 +医务室 1 +x:1 +建筑业 1 +x:1 +八仙 1 +x:1 +特里尔市 1 +x:1 +石化安 1 +x:1 +午托部 1 +x:1 +乡霸 1 +x:1 +天不作美 1 +x:1 +卫星舱 1 +x:1 +百里洲镇 1 +x:1 +蕉园 1 +x:1 +胸中无数 1 +x:1 +包围圈 1 +x:1 +泳池 1 +x:1 +牛郎星 1 +x:1 +八一 1 +x:1 +位次 1 +x:1 +眼睫毛 1 +x:1 +脸子 1 +x:1 +情妇 1 +x:1 +联署 1 +x:1 +肃穆 1 +x:1 +执笔者 1 +x:1 +打字员 1 +x:1 +米/秒 1 +x:1 +隔 144 +x:144 +黑白胶片 1 +x:1 +校徽 1 +x:1 +整军 1 +x:1 +路途 1 +x:1 +贸工技 1 +x:1 +检委会 1 +x:1 +河南省 1 +x:1 +木鼓舞 1 +x:1 +舰船 1 +x:1 +拾取 1 +x:1 +联网 1 +x:1 +红灵酊 1 +x:1 +黑竹 1 +x:1 +粗暴 1 +x:1 +洋枪 1 +x:1 +呼家楼 1 +x:1 +消毒剂 1 +x:1 +优美 1 +x:1 +塞翁失马 1 +x:1 +鸭场 1 +x:1 +落花生 1 +x:1 +滴漏 1 +x:1 +进言 1 +x:1 +舰艇 1 +x:1 +号声 1 +x:1 +冰释 1 +x:1 +裂缝 1 +x:1 +生意盎然 1 +x:1 +汗颜 1 +x:1 +读书会 1 +x:1 +软网 1 +x:1 +减低 1 +x:1 +欢欢喜喜 1 +x:1 +铨 1 +x:1 +内华达州 1 +x:1 +淮 41 +x:41 +冷水澡 1 +x:1 +膏剂 1 +x:1 +计算器 1 +x:1 +调解率 1 +x:1 +真珠 1 +x:1 +木材 1 +x:1 +联缀 1 +x:1 +豆薯 1 +x:1 +楼顶 1 +x:1 +劣株 1 +x:1 +科技站 1 +x:1 +养家 1 +x:1 +减产 1 +x:1 +大正八年 1 +x:1 +铅封 1 +x:1 +橙黄 1 +x:1 +纸笺 1 +x:1 +奴才 1 +x:1 +装移机 1 +x:1 +减人 1 +x:1 +大计 1 +x:1 +挤奶 1 +x:1 +交接处 1 +x:1 +几何图形 1 +x:1 +减亏 1 +x:1 +军运股 1 +x:1 +联络 1 +x:1 +橘柑 1 +x:1 +道里区 1 +x:1 +太谷县 1 +x:1 +外部 1 +x:1 +用 5303 +x:5303 +滴滴 1 +x:1 +联结 1 +x:1 +体育界 1 +x:1 +引种 1 +x:1 +号外 1 +x:1 +庆典型 1 +x:1 +联组 1 +x:1 +调查区 1 +x:1 +针砭时弊 1 +x:1 +粗杆 1 +x:1 +药材店 1 +x:1 +编印发 1 +x:1 +魔方 1 +x:1 +脖颈 1 +x:1 +大课 1 +x:1 +冰锥 1 +x:1 +郑 719 +x:719 +冷寂 1 +x:1 +造船业 1 +x:1 +清水衙门 1 +x:1 +尘土 1 +x:1 +白寺口沟 1 +x:1 +减价 1 +x:1 +优雅 1 +x:1 +泯灭 1 +x:1 +精彩纷呈 1 +x:1 +镂雕 1 +x:1 +外邪 1 +x:1 +先锋街 1 +x:1 +计量 1 +x:1 +拖沓 1 +x:1 +搞垮 1 +x:1 +超群 1 +x:1 +与世隔膜 1 +x:1 +树王 1 +x:1 +戒律 1 +x:1 +铅山 1 +x:1 +裂纹 1 +x:1 +谈定 1 +x:1 +二大 1 +x:1 +外遇 1 +x:1 +造化物 1 +x:1 +尘埃 1 +x:1 +貉绒 1 +x:1 +铜管乐 1 +x:1 +娱乐片 1 +x:1 +情境 1 +x:1 +稽查 1 +x:1 +太煤 1 +x:1 +外道 1 +x:1 +书卷气 1 +x:1 +豆蓉 1 +x:1 +中世纪 1 +x:1 +革新派 1 +x:1 +季季 1 +x:1 +撞 121 +x:121 +土包子 1 +x:1 +抗尘走俗 1 +x:1 +校庆 1 +x:1 +刚健 1 +x:1 +钟鸣鼎食 1 +x:1 +路遇 1 +x:1 +纪念碑 1 +x:1 +渣土 1 +x:1 +缘份 1 +x:1 +有林地 1 +x:1 +圣火 1 +x:1 +六汪镇 1 +x:1 +缘于 1 +x:1 +供应处 1 +x:1 +铁力市 1 +x:1 +自卖自夸 1 +x:1 +计酬 1 +x:1 +二奶 1 +x:1 +江永县 1 +x:1 +丢人现眼 1 +x:1 +构词法 1 +x:1 +置评 1 +x:1 +组装式 1 +x:1 +油井架 1 +x:1 +猛虎 1 +x:1 +死契 1 +x:1 +养子 1 +x:1 +局管内 1 +x:1 +透粉 1 +x:1 +尘垢 1 +x:1 +苦木素 1 +x:1 +工业气压 1 +x:1 +瓷盒 1 +x:1 +贴心 1 +x:1 +亚麻 1 +x:1 +奸徒 1 +x:1 +仪表 1 +x:1 +养 400 +x:400 +配属 1 +x:1 +沉默寡言 1 +x:1 +瓷盘 1 +x:1 +智谋超人 1 +x:1 +各尽其责 1 +x:1 +针锋相对 1 +x:1 +误认为 1 +x:1 +敌酋 1 +x:1 +厘米波 1 +x:1 +人贫志坚 1 +x:1 +通知单 1 +x:1 +触爪 1 +x:1 +镇纸 1 +x:1 +拦海大坝 1 +x:1 +辐射区 1 +x:1 +放卫星 1 +x:1 +念珠菌性 1 +x:1 +公切线 1 +x:1 +俘获 1 +x:1 +停产令 1 +x:1 +欢度 1 +x:1 +屠 17 +x:17 +异乎寻常 1 +x:1 +张夏镇 1 +x:1 +似是而非 1 +x:1 +镇镇 1 +x:1 +烛台 1 +x:1 +板柜 1 +x:1 +乘 262 +x:262 +两码事 1 +x:1 +古风 1 +x:1 +三角区 1 +x:1 +不羁 1 +x:1 +普训 1 +x:1 +镇长 1 +x:1 +赤霉病 1 +x:1 +适销对路 1 +x:1 +放空炮 1 +x:1 +阁楼 1 +x:1 +雁荡山 1 +x:1 +宝贝疙瘩 1 +x:1 +演唱队 1 +x:1 +进袭 1 +x:1 +质量学 1 +x:1 +月影 1 +x:1 +后进村 1 +x:1 +有 30901 +x:30901 +追尾 1 +x:1 +英姿勃勃 1 +x:1 +义务教育 1 +x:1 +翻然悔悟 1 +x:1 +通勤车 1 +x:1 +房山区 1 +x:1 +进行 1 +x:1 +如约 1 +x:1 +扑克迷 1 +x:1 +发电机 1 +x:1 +补血 1 +x:1 +改道 1 +x:1 +东阳镇 1 +x:1 +剧装 1 +x:1 +戒备 1 +x:1 +荡魂摄魄 1 +x:1 +凸镜 1 +x:1 +计票 1 +x:1 +邮友 1 +x:1 +记叙文 1 +x:1 +流行源 1 +x:1 +保护人 1 +x:1 +联阵 1 +x:1 +重续 1 +x:1 +再就业者 1 +x:1 +出线楼 1 +x:1 +非业务 1 +x:1 +对照 1 +x:1 +说明性 1 +x:1 +有借有还 1 +x:1 +大衣 1 +x:1 +能工巧匠 1 +x:1 +传声器 1 +x:1 +重富欺贫 1 +x:1 +慢棋赛 1 +x:1 +光景儿 1 +x:1 +重组 1 +x:1 +永常村 1 +x:1 +畅饮 1 +x:1 +子午胎 1 +x:1 +另 1134 +x:1134 +埽 1 +x:1 +穷汉 1 +x:1 +无关痛痒 1 +x:1 +保育生 1 +x:1 +医务处 1 +x:1 +妒嫉 1 +x:1 +不祥 1 +x:1 +鹊起 1 +x:1 +联系 1 +x:1 +二审 1 +x:1 +西西里 1 +x:1 +小汤山 1 +x:1 +五彩 1 +x:1 +欢快 1 +x:1 +葙 1 +x:1 +借款方 1 +x:1 +辞职 1 +x:1 +潮州 1 +x:1 +动荡期 1 +x:1 +一贫如洗 1 +x:1 +鲜嫩嫩 1 +x:1 +笠 1 +x:1 +腊月三十 1 +x:1 +校射 1 +x:1 +欢心 1 +x:1 +篾子 1 +x:1 +逍遥法外 1 +x:1 +暖湿气流 1 +x:1 +新泾乡 1 +x:1 +北古村 1 +x:1 +谈天 1 +x:1 +大要 1 +x:1 +粗放 1 +x:1 +死守 1 +x:1 +灾难史 1 +x:1 +补角 1 +x:1 +库容 1 +x:1 +书生之见 1 +x:1 +前奏曲 1 +x:1 +重罪 1 +x:1 +砖瓦房 1 +x:1 +大解 1 +x:1 +天主教会 1 +x:1 +白衣 1 +x:1 +弄虚作假 1 +x:1 +令人堪忧 1 +x:1 +兴隆村 1 +x:1 +被纪念者 1 +x:1 +钢栅 1 +x:1 +叶红素 1 +x:1 +护理员 1 +x:1 +鸿蒙 1 +x:1 +供应室 1 +x:1 +精神病 1 +x:1 +夏威夷 1 +x:1 +死寂 1 +x:1 +大观 1 +x:1 +号子 1 +x:1 +尾水门机 1 +x:1 +固化 1 +x:1 +资深 1 +x:1 +念珠 1 +x:1 +刚劲 1 +x:1 +重罚 1 +x:1 +英姿勃发 1 +x:1 +以礼相待 1 +x:1 +配带 1 +x:1 +辐射力 1 +x:1 +警卫局 1 +x:1 +亲近感 1 +x:1 +胶印机 1 +x:1 +广播室 1 +x:1 +库存 1 +x:1 +梁五铢 1 +x:1 +蛋清 1 +x:1 +魔杖 1 +x:1 +超凡入圣 1 +x:1 +欲晓 1 +x:1 +瘫软 1 +x:1 +岗薪 1 +x:1 +所有制 1 +x:1 +超额利润 1 +x:1 +莽莽苍苍 1 +x:1 +大褂 1 +x:1 +白袍 1 +x:1 +跃动感 1 +x:1 +养女 1 +x:1 +圣物 1 +x:1 +变动不居 1 +x:1 +大西 1 +x:1 +可燃 1 +x:1 +后天门 1 +x:1 +瓷瓶 1 +x:1 +千枚岩 1 +x:1 +刚刚 1 +x:1 +共和镇 1 +x:1 +蝇拍 1 +x:1 +决计 1 +x:1 +禁捕期 1 +x:1 +急进派 1 +x:1 +精神界 1 +x:1 +钢梁 1 +x:1 +大襟 1 +x:1 +蒙达利亚 1 +x:1 +滴水 1 +x:1 +泥汊镇 1 +x:1 +固原 1 +x:1 +效尤 1 +x:1 +畅顺 1 +x:1 +遁世者 1 +x:1 +训练台 1 +x:1 +泄劲 1 +x:1 +夏令营 1 +x:1 +码放 1 +x:1 +豆腐 1 +x:1 +海州区 1 +x:1 +优等 1 +x:1 +稠油 1 +x:1 +武汉段 1 +x:1 +瓜果 1 +x:1 +太上皇 1 +x:1 +神力 1 +x:1 +欢声 1 +x:1 +套子 1 +x:1 +胰淀粉酶 1 +x:1 +凌空 1 +x:1 +茶厂 1 +x:1 +浑然天成 1 +x:1 +有根有据 1 +x:1 +斧凿声 1 +x:1 +软管 1 +x:1 +南河村 1 +x:1 +船夫曲 1 +x:1 +战斗班 1 +x:1 +测试仪 1 +x:1 +寄售库 1 +x:1 +骨子里 1 +x:1 +好不 1 +x:1 +黎黑 1 +x:1 +无障碍 1 +x:1 +流峪镇 1 +x:1 +冰镐 1 +x:1 +杠 9 +x:9 +外文局 1 +x:1 +释惑 1 +x:1 +好书 1 +x:1 +周转 1 +x:1 +花生地 1 +x:1 +热效应 1 +x:1 +树皮 1 +x:1 +不禁 1 +x:1 +位置图 1 +x:1 +开门见喜 1 +x:1 +承诺函 1 +x:1 +橡皮筏子 1 +x:1 +气体 1 +x:1 +农学系 1 +x:1 +好久 1 +x:1 +甲鱼 1 +x:1 +广播局 1 +x:1 +鸭绿江 1 +x:1 +好事 1 +x:1 +呢绒 1 +x:1 +戒心 1 +x:1 +进身 1 +x:1 +合二而一 1 +x:1 +中经信 1 +x:1 +冰镩 1 +x:1 +串通一气 1 +x:1 +洗涤品 1 +x:1 +洁 52 +x:52 +周边 1 +x:1 +重阳 1 +x:1 +法制科 1 +x:1 +死尸 1 +x:1 +类木行星 1 +x:1 +好人 1 +x:1 +差事 1 +x:1 +登记法 1 +x:1 +口服 1 +x:1 +士兵证 1 +x:1 +她家 1 +x:1 +木板 1 +x:1 +配备 1 +x:1 +韵尾 1 +x:1 +彰 6 +x:6 +枳壳 1 +x:1 +二小 1 +x:1 +劲儿 1 +x:1 +杂然 1 +x:1 +好些 1 +x:1 +介休 1 +x:1 +凹透镜 1 +x:1 +校官 1 +x:1 +空壳 1 +x:1 +脑震荡 1 +x:1 +差价 1 +x:1 +外销 1 +x:1 +傻瓜相机 1 +x:1 +淮城镇 1 +x:1 +笑脸 1 +x:1 +城建司 1 +x:1 +科技编 1 +x:1 +干部部 1 +x:1 +勤俭建国 1 +x:1 +单 269 +x:269 +先锋路 1 +x:1 +动物性 1 +x:1 +拉力赛 1 +x:1 +裘 14 +x:14 +蚯蚓 1 +x:1 +循规蹈矩 1 +x:1 +重磅 1 +x:1 +国际共运 1 +x:1 +淤积物 1 +x:1 +调查团 1 +x:1 +走投无路 1 +x:1 +吊死 1 +x:1 +洞井镇 1 +x:1 +文理科 1 +x:1 +棋王 1 +x:1 +配套 1 +x:1 +关灯 1 +x:1 +采访者 1 +x:1 +魔怪 1 +x:1 +空洞无物 1 +x:1 +温甜幽远 1 +x:1 +黄绿色 1 +x:1 +旱井 1 +x:1 +触电 1 +x:1 +真龙 1 +x:1 +进进 1 +x:1 +好似 1 +x:1 +苔干 1 +x:1 +稳定率 1 +x:1 +阁藏 1 +x:1 +校对 1 +x:1 +乡镇企业 1 +x:1 +科技组 1 +x:1 +补过 1 +x:1 +介于 1 +x:1 +持续性 1 +x:1 +遗诏 1 +x:1 +座椅 1 +x:1 +白帝城 1 +x:1 +钢铁厂 1 +x:1 +注册 1 +x:1 +差使 1 +x:1 +阳信 1 +x:1 +扶残解困 1 +x:1 +镂空 1 +x:1 +讲求 1 +x:1 +小浪底 1 +x:1 +钢渣 1 +x:1 +好使 1 +x:1 +座楼 1 +x:1 +对比色 1 +x:1 +追寻 1 +x:1 +同甘苦 1 +x:1 +根子 1 +x:1 +帕塔亚 1 +x:1 +效忠 1 +x:1 +外钞 1 +x:1 +成就感 1 +x:1 +瓷片 1 +x:1 +一叶障目 1 +x:1 +幸而 1 +x:1 +大运 1 +x:1 +大连 1 +x:1 +大远 1 +x:1 +声光电 1 +x:1 +大过 1 +x:1 +至 4088 +x:4088 +房事 1 +x:1 +一贯制 1 +x:1 +颠沛 1 +x:1 +蓄水 1 +x:1 +龙岩坡 1 +x:1 +因祸得福 1 +x:1 +伎俩 1 +x:1 +偷拿者 1 +x:1 +计算化 1 +x:1 +水利科 1 +x:1 +周身 1 +x:1 +玻璃品 1 +x:1 +众 92 +x:92 +不置一词 1 +x:1 +木枕 1 +x:1 +冰钎 1 +x:1 +考茨基 1 +x:1 +小曲儿 1 +x:1 +配角儿 1 +x:1 +脱口而出 1 +x:1 +气井 1 +x:1 +怪象 1 +x:1 +我镇 1 +x:1 +煨 3 +x:3 +房主 1 +x:1 +阳伞 1 +x:1 +冰铜 1 +x:1 +大轧 1 +x:1 +大车 1 +x:1 +对白 1 +x:1 +五峰 1 +x:1 +受贿人 1 +x:1 +福特车 1 +x:1 +注入 1 +x:1 +盘丝洞 1 +x:1 +房东 1 +x:1 +砍刀 1 +x:1 +以人为本 1 +x:1 +可知 1 +x:1 +触痛 1 +x:1 +蹭 9 +x:9 +介乎 1 +x:1 +半身不遂 1 +x:1 +奖台 1 +x:1 +闲情逸致 1 +x:1 +联程 1 +x:1 +休养院 1 +x:1 +劈天盖地 1 +x:1 +关照 1 +x:1 +特困村 1 +x:1 +返销 1 +x:1 +压迫 1 +x:1 +豆荚 1 +x:1 +白费 1 +x:1 +软禁 1 +x:1 +套套 1 +x:1 +白货 1 +x:1 +孝顺镇 1 +x:1 +持锨者 1 +x:1 +库布其 1 +x:1 +白质 1 +x:1 +御 4 +x:4 +聚四氟 1 +x:1 +呼兰河域 1 +x:1 +探鱼仪 1 +x:1 +真鲷 1 +x:1 +体育版 1 +x:1 +训导 1 +x:1 +坚定不移 1 +x:1 +大新乡 1 +x:1 +然后 1 +x:1 +眼睁睁 1 +x:1 +房价 1 +x:1 +校外 1 +x:1 +高峰村 1 +x:1 +成文 1 +x:1 +黑板报 1 +x:1 +过江龙 1 +x:1 +规格化 1 +x:1 +蚊帐 1 +x:1 +小传 1 +x:1 +歇歇 1 +x:1 +由不得 1 +x:1 +职便 1 +x:1 +铅字 1 +x:1 +配对 1 +x:1 +调查员 1 +x:1 +锄草 1 +x:1 +虎踞龙蟠 1 +x:1 +现成饭 1 +x:1 +花鸟画家 1 +x:1 +冰面 1 +x:1 +史论家 1 +x:1 +高峰期 1 +x:1 +小伙 1 +x:1 +正选赛 1 +x:1 +判若云泥 1 +x:1 +粗枝大叶 1 +x:1 +当务之重 1 +x:1 +小修 1 +x:1 +履险如夷 1 +x:1 +水利站 1 +x:1 +打酒 1 +x:1 +惊异感 1 +x:1 +优秀 1 +x:1 +穿戴 1 +x:1 +正反面 1 +x:1 +奇里诺奇 1 +x:1 +新乡市 1 +x:1 +处心积虑 1 +x:1 +辐射型 1 +x:1 +义无返顾 1 +x:1 +军烈属 1 +x:1 +压轴 1 +x:1 +冰鞋 1 +x:1 +字幕 1 +x:1 +蜂鸟 1 +x:1 +穷根 1 +x:1 +凄 3 +x:3 +履行 1 +x:1 +外面 1 +x:1 +辞藻 1 +x:1 +坦帕 1 +x:1 +长寿路 1 +x:1 +职位 1 +x:1 +不等 1 +x:1 +酒嗉子 1 +x:1 +矗起 1 +x:1 +戳 13 +x:13 +魔手 1 +x:1 +月底 1 +x:1 +辞退制 1 +x:1 +记事本 1 +x:1 +坐位 1 +x:1 +联社 1 +x:1 +不符 1 +x:1 +子午仪 1 +x:1 +警卫处 1 +x:1 +大丰市 1 +x:1 +口袋罪 1 +x:1 +小便 1 +x:1 +南庄村 1 +x:1 +色彩斑斓 1 +x:1 +欢娱 1 +x:1 +大象 1 +x:1 +千年问题 1 +x:1 +情志 1 +x:1 +镇里 1 +x:1 +满目狼藉 1 +x:1 +触目 1 +x:1 +钻探队 1 +x:1 +念白 1 +x:1 +俚语 1 +x:1 +让道 1 +x:1 +我队 1 +x:1 +大豆 1 +x:1 +楼龄 1 +x:1 +辩护士 1 +x:1 +批销 1 +x:1 +十恶不赦 1 +x:1 +趾高气扬 1 +x:1 +盆景型 1 +x:1 +殃 1 +x:1 +联磺 1 +x:1 +万语千言 1 +x:1 +不竭 1 +x:1 +不端 1 +x:1 +一鼻子灰 1 +x:1 +新生代 1 +x:1 +劲力 1 +x:1 +汽油机 1 +x:1 +芦山乡 1 +x:1 +套塑 1 +x:1 +篮筐 1 +x:1 +果木园 1 +x:1 +大连队 1 +x:1 +红色素 1 +x:1 +可用 1 +x:1 +夫妻情 1 +x:1 +职介 1 +x:1 +死胎 1 +x:1 +重笔 1 +x:1 +满目苍凉 1 +x:1 +树病 1 +x:1 +应急款 1 +x:1 +院中 1 +x:1 +拖船 1 +x:1 +奸夫 1 +x:1 +求 508 +x:508 +小丫 1 +x:1 +小个 1 +x:1 +空调界 1 +x:1 +麒麟山 1 +x:1 +太行山区 1 +x:1 +职业高中 1 +x:1 +钢水 1 +x:1 +野食儿 1 +x:1 +治丧 1 +x:1 +大路 1 +x:1 +补足 1 +x:1 +西八道街 1 +x:1 +二心 1 +x:1 +商补 1 +x:1 +迫 19 +x:19 +滦 1 +x:1 +穿插 1 +x:1 +除此而外 1 +x:1 +死心 1 +x:1 +叫好不绝 1 +x:1 +塞罕坝 1 +x:1 +三滩乡 1 +x:1 +小丘 1 +x:1 +大跌 1 +x:1 +遗训 1 +x:1 +小丑 1 +x:1 +打小算盘 1 +x:1 +保值率 1 +x:1 +豆苗 1 +x:1 +大贾 1 +x:1 +打蔫儿 1 +x:1 +小令 1 +x:1 +平玉县 1 +x:1 +戒尺 1 +x:1 +大败 1 +x:1 +胜者 1 +x:1 +渣儿 1 +x:1 +盆景园 1 +x:1 +篮篓 1 +x:1 +可疑 1 +x:1 +承诺制 1 +x:1 +科技类 1 +x:1 +外院 1 +x:1 +缺乏症 1 +x:1 +已知数 1 +x:1 +物化劳动 1 +x:1 +补赛 1 +x:1 +首日封 1 +x:1 +宸 7 +x:7 +小仓 1 +x:1 +传达室 1 +x:1 +俘虏 1 +x:1 +李家村 1 +x:1 +冰雕 1 +x:1 +平空 1 +x:1 +商市场 1 +x:1 +职中 1 +x:1 +同行间 1 +x:1 +趣闻 1 +x:1 +大赦 1 +x:1 +来稿 1 +x:1 +马不停蹄 1 +x:1 +左家塘 1 +x:1 +灭绝 1 +x:1 +补贴 1 +x:1 +心影 1 +x:1 +豆花 1 +x:1 +软硬 1 +x:1 +小事 1 +x:1 +吊桶 1 +x:1 +冰雹 1 +x:1 +大赛 1 +x:1 +豆芽 1 +x:1 +果洛州 1 +x:1 +进贡 1 +x:1 +进货 1 +x:1 +进账 1 +x:1 +进贤 1 +x:1 +冰雪 1 +x:1 +吊桥 1 +x:1 +冰雨 1 +x:1 +大赋 1 +x:1 +水利管 1 +x:1 +含氧量 1 +x:1 +不日 1 +x:1 +外观 1 +x:1 +小公 1 +x:1 +气区 1 +x:1 +不无 1 +x:1 +速写 1 +x:1 +房号 1 +x:1 +感恩戴德 1 +x:1 +潇洒不羁 1 +x:1 +凌晨 1 +x:1 +炎性 1 +x:1 +房产 1 +x:1 +外角 1 +x:1 +不时 1 +x:1 +倒汇者 1 +x:1 +喙 1 +x:1 +小兵 1 +x:1 +联查 1 +x:1 +纱布 1 +x:1 +捡拾 1 +x:1 +瓷漆 1 +x:1 +驾 34 +x:34 +速冻 1 +x:1 +气化 1 +x:1 +治党 1 +x:1 +奥科辛弋 1 +x:1 +主流派 1 +x:1 +看齐 1 +x:1 +包身契 1 +x:1 +试验园 1 +x:1 +方 746 +x:746 +编导 1 +x:1 +要求者 1 +x:1 +透支 1 +x:1 +上蔡县 1 +x:1 +博城 1 +x:1 +湖心 1 +x:1 +闪光面 1 +x:1 +外借库 1 +x:1 +不断 1 +x:1 +小儿 1 +x:1 +志愿者 1 +x:1 +尘世 1 +x:1 +编审 1 +x:1 +本色调 1 +x:1 +差别 1 +x:1 +后妻 1 +x:1 +撬杠 1 +x:1 +此愿 1 +x:1 +嘀里嘟噜 1 +x:1 +来文 1 +x:1 +书籍 1 +x:1 +叭 5 +x:5 +战国 1 +x:1 +造船场 1 +x:1 +关注 1 +x:1 +奖牌榜 1 +x:1 +不料 1 +x:1 +对比 1 +x:1 +纲要 1 +x:1 +唐三彩 1 +x:1 +冷热战 1 +x:1 +凸轮 1 +x:1 +副标题 1 +x:1 +丧魂落魄 1 +x:1 +枪声 1 +x:1 +亚俱杯 1 +x:1 +分布面 1 +x:1 +生物界 1 +x:1 +氆氇 1 +x:1 +叶子烟 1 +x:1 +好动 1 +x:1 +优柔 1 +x:1 +将就 1 +x:1 +软木 1 +x:1 +旱区 1 +x:1 +钢铁业 1 +x:1 +韶关市 1 +x:1 +联村 1 +x:1 +争霸赛 1 +x:1 +新生党 1 +x:1 +气压 1 +x:1 +粗纱 1 +x:1 +调节 1 +x:1 +圆柱体 1 +x:1 +认同感 1 +x:1 +我行 1 +x:1 +浑浑噩噩 1 +x:1 +粗细 1 +x:1 +太爷 1 +x:1 +联机 1 +x:1 +烟台市 1 +x:1 +余部 1 +x:1 +喜极而涕 1 +x:1 +堵源 1 +x:1 +新生儿 1 +x:1 +龙山县 1 +x:1 +巾身 1 +x:1 +滔 2 +x:2 +洋为中用 1 +x:1 +噢 14 +x:14 +表弟 1 +x:1 +安卡拉 1 +x:1 +对歌 1 +x:1 +富塘村 1 +x:1 +散兵线 1 +x:1 +两用衫 1 +x:1 +芒刺在背 1 +x:1 +集市 1 +x:1 +小农 1 +x:1 +砍伐 1 +x:1 +小写 1 +x:1 +计算书 1 +x:1 +差劲 1 +x:1 +编年史式 1 +x:1 +陆海潘江 1 +x:1 +特服号 1 +x:1 +纯血马 1 +x:1 +督学 1 +x:1 +砍价 1 +x:1 +兴旺发达 1 +x:1 +湖底 1 +x:1 +轻机关枪 1 +x:1 +独轮车 1 +x:1 +恭候 1 +x:1 +影壁山乡 1 +x:1 +三为主 1 +x:1 +短线产品 1 +x:1 +借酒消愁 1 +x:1 +特供券 1 +x:1 +成品房 1 +x:1 +我见 1 +x:1 +物理疗法 1 +x:1 +秀雅 1 +x:1 +可欺 1 +x:1 +军分区 1 +x:1 +汗腺 1 +x:1 +垃圾猪肉 1 +x:1 +可歌 1 +x:1 +适度性 1 +x:1 +弱肉强食 1 +x:1 +霜期 1 +x:1 +东杜村 1 +x:1 +情韵 1 +x:1 +铱金笔 1 +x:1 +堵漏 1 +x:1 +真菌 1 +x:1 +爪钩 1 +x:1 +依安县 1 +x:1 +啤酒客 1 +x:1 +孜 1 +x:1 +错字 1 +x:1 +织补业 1 +x:1 +千儿八百 1 +x:1 +缆绳 1 +x:1 +丹凤朝阳 1 +x:1 +手持式 1 +x:1 +承担者 1 +x:1 +悲苦 1 +x:1 +如数 1 +x:1 +贺联 1 +x:1 +重教 1 +x:1 +歼 2 +x:2 +科技报 1 +x:1 +气势 1 +x:1 +普遍 1 +x:1 +咋舌 1 +x:1 +懒散 1 +x:1 +外行 1 +x:1 +珍贵性 1 +x:1 +披盖 1 +x:1 +气动 1 +x:1 +督导 1 +x:1 +冰袋 1 +x:1 +尘俗 1 +x:1 +气功 1 +x:1 +赛车组 1 +x:1 +外衣 1 +x:1 +疯颠颠 1 +x:1 +气力 1 +x:1 +险金 1 +x:1 +外表 1 +x:1 +固原县 1 +x:1 +发祥地 1 +x:1 +房前 1 +x:1 +督察 1 +x:1 +壁垒森严 1 +x:1 +狗东西 1 +x:1 +南京籍 1 +x:1 +鸿鹄 1 +x:1 +喜极而泣 1 +x:1 +普选 1 +x:1 +凯里 1 +x:1 +一改了之 1 +x:1 +建制镇 1 +x:1 +援引 1 +x:1 +扎扎实实 1 +x:1 +夜间 1 +x:1 +嘴把式 1 +x:1 +槐 6 +x:6 +普通 1 +x:1 +敏锐性 1 +x:1 +重旱 1 +x:1 +楼股 1 +x:1 +可比 1 +x:1 +谷氨酸 1 +x:1 +谋势篇 1 +x:1 +熟人 1 +x:1 +试验场 1 +x:1 +宜兴市 1 +x:1 +好受 1 +x:1 +租下 1 +x:1 +心田 1 +x:1 +联手 1 +x:1 +试验地 1 +x:1 +牛仔衫 1 +x:1 +跌伤 1 +x:1 +科技户 1 +x:1 +养殖区 1 +x:1 +人工湖 1 +x:1 +联销 1 +x:1 +棋联 1 +x:1 +泰厄罗阿 1 +x:1 +票证 1 +x:1 +寄放在 1 +x:1 +荠菜 1 +x:1 +上港村 1 +x:1 +坐台 1 +x:1 +辗转难眠 1 +x:1 +传真机 1 +x:1 +大邱 1 +x:1 +盐肤木 1 +x:1 +登记牌 1 +x:1 +旱农 1 +x:1 +塄 1 +x:1 +贫富 1 +x:1 +贫寒 1 +x:1 +优教 1 +x:1 +编委 1 +x:1 +猪体 1 +x:1 +旱冰 1 +x:1 +金园区 1 +x:1 +大邑 1 +x:1 +戊辰 1 +x:1 +外语 1 +x:1 +削足适履 1 +x:1 +开天窗 1 +x:1 +箱 78 +x:78 +酸枝木 1 +x:1 +囟 1 +x:1 +黎胞 1 +x:1 +侧面图 1 +x:1 +蘸 13 +x:13 +保加利亚 1 +x:1 +小卒 1 +x:1 +栖息处 1 +x:1 +右上方 1 +x:1 +大都 1 +x:1 +西藏厅 1 +x:1 +树梢 1 +x:1 +小区 1 +x:1 +噘 3 +x:3 +无价宝 1 +x:1 +湖州 1 +x:1 +供职 1 +x:1 +八哥 1 +x:1 +白酒 1 +x:1 +瓜秧 1 +x:1 +酣战 1 +x:1 +灌排 1 +x:1 +行员 1 +x:1 +高屋建瓴 1 +x:1 +糊涂虫 1 +x:1 +外设 1 +x:1 +西贝卡 1 +x:1 +挑衅性 1 +x:1 +立体角 1 +x:1 +气冷 1 +x:1 +虚有其表 1 +x:1 +粗粗 1 +x:1 +伪 13 +x:13 +将帅 1 +x:1 +鹞式 1 +x:1 +树桩 1 +x:1 +小叶 1 +x:1 +劈开 1 +x:1 +凸起 1 +x:1 +账务 1 +x:1 +粗粮 1 +x:1 +随 381 +x:381 +大通 1 +x:1 +古老 1 +x:1 +缆索 1 +x:1 +七八月份 1 +x:1 +鹿溪河 1 +x:1 +辣椒堆 1 +x:1 +补遗 1 +x:1 +积病 1 +x:1 +大选 1 +x:1 +行情期 1 +x:1 +迎春路 1 +x:1 +乌兰浩特 1 +x:1 +千难万苦 1 +x:1 +介入 1 +x:1 +树根 1 +x:1 +询问 1 +x:1 +孤寡 1 +x:1 +小县 1 +x:1 +冗长 1 +x:1 +护肤品 1 +x:1 +进退 1 +x:1 +狂笑 1 +x:1 +编外 1 +x:1 +不朽 1 +x:1 +鳏寡孤独 1 +x:1 +八员 1 +x:1 +糊涂蛋 1 +x:1 +粗糙 1 +x:1 +贤达 1 +x:1 +超然 1 +x:1 +补选 1 +x:1 +画脂镂冰 1 +x:1 +圣歌 1 +x:1 +不服 1 +x:1 +福将 1 +x:1 +孤寂 1 +x:1 +供能 1 +x:1 +进逼 1 +x:1 +退而结网 1 +x:1 +誓师 1 +x:1 +市中区 1 +x:1 +精英赛 1 +x:1 +半制品 1 +x:1 +白釉 1 +x:1 +嫔妃 1 +x:1 +计计 1 +x:1 +匀 5 +x:5 +集训场 1 +x:1 +错处 1 +x:1 +集训地 1 +x:1 +计议 1 +x:1 +亲疏好恶 1 +x:1 +还政于民 1 +x:1 +做生日 1 +x:1 +谈心 1 +x:1 +婚纱照 1 +x:1 +不曾 1 +x:1 +位点 1 +x:1 +与人为善 1 +x:1 +南坪村 1 +x:1 +金发者 1 +x:1 +挠 3 +x:3 +气候 1 +x:1 +参联会 1 +x:1 +吐故纳新 1 +x:1 +福州 1 +x:1 +杀伤力 1 +x:1 +篮板 1 +x:1 +错失 1 +x:1 +贾斯珀镇 1 +x:1 +航海 1 +x:1 +计算 1 +x:1 +缺房户 1 +x:1 +有史可鉴 1 +x:1 +刻字机 1 +x:1 +疤瘌 1 +x:1 +楼船 1 +x:1 +氢氟酸 1 +x:1 +太和庄 1 +x:1 +联播 1 +x:1 +动物群 1 +x:1 +化州市 1 +x:1 +让路 1 +x:1 +周遭 1 +x:1 +砷黄铁矿 1 +x:1 +优等生 1 +x:1 +透明 1 +x:1 +自卫权 1 +x:1 +邮包 1 +x:1 +小分 1 +x:1 +吊瓶 1 +x:1 +逼近 1 +x:1 +哈哈 1 +x:1 +小刀 1 +x:1 +浩淼无涯 1 +x:1 +大量 1 +x:1 +大野 1 +x:1 +读 822 +x:822 +楼舍 1 +x:1 +爆发星 1 +x:1 +周邻 1 +x:1 +水资源量 1 +x:1 +去夏 1 +x:1 +苇湖梁 1 +x:1 +媚俗阿世 1 +x:1 +把儿 1 +x:1 +兄弟 1 +x:1 +太药 1 +x:1 +绿豆粥 1 +x:1 +如果 1 +x:1 +让贤 1 +x:1 +次要 1 +x:1 +歪七扭八 1 +x:1 +大模大样 1 +x:1 +边陲 1 +x:1 +交响音乐 1 +x:1 +被收购方 1 +x:1 +劲健 1 +x:1 +阳关 1 +x:1 +咬咬 1 +x:1 +化学镀 1 +x:1 +栀角 1 +x:1 +S 3 +x:3 +潭边 1 +x:1 +工作餐 1 +x:1 +剁 10 +x:10 +登记率 1 +x:1 +职别 1 +x:1 +顽固 1 +x:1 +治劣 1 +x:1 +深有感触 1 +x:1 +洪江 1 +x:1 +上月底 1 +x:1 +好几 1 +x:1 +徒劳无功 1 +x:1 +棋艺 1 +x:1 +横逆 1 +x:1 +剃刀鲸 1 +x:1 +面前坡 1 +x:1 +绿豆糕 1 +x:1 +白龙乡 1 +x:1 +雌雄同株 1 +x:1 +不明 1 +x:1 +承诺书 1 +x:1 +力所不及 1 +x:1 +选士学 1 +x:1 +不易 1 +x:1 +减员 1 +x:1 +埋头苦干 1 +x:1 +名满天下 1 +x:1 +沥青 1 +x:1 +庚午 1 +x:1 +房基 1 +x:1 +大有人在 1 +x:1 +白露 1 +x:1 +彰山 1 +x:1 +绢制 1 +x:1 +程度者 1 +x:1 +柳州市 1 +x:1 +剧院 1 +x:1 +野鸽子 1 +x:1 +拦洪 1 +x:1 +调查业 1 +x:1 +压力壳 1 +x:1 +开工量 1 +x:1 +减压 1 +x:1 +长寿面 1 +x:1 +白霜 1 +x:1 +补集 1 +x:1 +豆饼 1 +x:1 +不懈 1 +x:1 +外路 1 +x:1 +旱垣 1 +x:1 +吊环 1 +x:1 +情操 1 +x:1 +泼墨 1 +x:1 +眼巴巴 1 +x:1 +剧降 1 +x:1 +擅权 1 +x:1 +重伤员 1 +x:1 +代代木 1 +x:1 +鸿沟 1 +x:1 +大雾 1 +x:1 +颐年堂 1 +x:1 +东耿村 1 +x:1 +郭家庄 1 +x:1 +冰霜 1 +x:1 +白面 1 +x:1 +减号 1 +x:1 +联控 1 +x:1 +博取 1 +x:1 +联接 1 +x:1 +友好街 1 +x:1 +大雪 1 +x:1 +大雨 1 +x:1 +代数方程 1 +x:1 +汝阳县 1 +x:1 +沁出 1 +x:1 +应急灯 1 +x:1 +枪尖 1 +x:1 +查考 1 +x:1 +大集 1 +x:1 +大雅 1 +x:1 +颁奖式 1 +x:1 +房型 1 +x:1 +大雁 1 +x:1 +将士 1 +x:1 +违纪案 1 +x:1 +瞒天过海 1 +x:1 +外资 1 +x:1 +贫煤区 1 +x:1 +闭目塞听 1 +x:1 +五常市 1 +x:1 +共有 1 +x:1 +分晓 1 +x:1 +气垫 1 +x:1 +守备师 1 +x:1 +恭喜 1 +x:1 +挣脱 1 +x:1 +大阪 1 +x:1 +旱地 1 +x:1 +旅游业界 1 +x:1 +煞尾 1 +x:1 +沧源 1 +x:1 +大队 1 +x:1 +九泉 1 +x:1 +计谋 1 +x:1 +不慎 1 +x:1 +城市化 1 +x:1 +劈头 1 +x:1 +歌咏队 1 +x:1 +豆渣 1 +x:1 +坐商 1 +x:1 +发生地 1 +x:1 +汤加队 1 +x:1 +贤愚 1 +x:1 +小嗓 1 +x:1 +发生场 1 +x:1 +权益 1 +x:1 +不愧 1 +x:1 +征收 1 +x:1 +狄 6 +x:6 +难舍难分 1 +x:1 +造船厂 1 +x:1 +丢丢的 1 +x:1 +技协 1 +x:1 +压锭 1 +x:1 +房地 1 +x:1 +杞人忧天 1 +x:1 +大院 1 +x:1 +补阵 1 +x:1 +松香水 1 +x:1 +来意 1 +x:1 +减半 1 +x:1 +外货 1 +x:1 +崇义县 1 +x:1 +不意 1 +x:1 +元珠笔 1 +x:1 +博卡 1 +x:1 +副 6967 +x:6967 +中下等 1 +x:1 +猜度 1 +x:1 +大陆 1 +x:1 +刺客 1 +x:1 +外贸 1 +x:1 +昆剧团 1 +x:1 +结构件 1 +x:1 +重税 1 +x:1 +淹没 1 +x:1 +笔划 1 +x:1 +斋 9 +x:9 +如意 1 +x:1 +福寿 1 +x:1 +冰调 1 +x:1 +树凉儿 1 +x:1 +爪部 1 +x:1 +阳城 1 +x:1 +圣河 1 +x:1 +焘 8 +x:8 +调查会 1 +x:1 +取报 1 +x:1 +温暖车 1 +x:1 +参谋长 1 +x:1 +试验台 1 +x:1 +粗笨 1 +x:1 +水平线 1 +x:1 +不惑 1 +x:1 +不惜 1 +x:1 +不惟 1 +x:1 +如愿 1 +x:1 +铁 150 +x:150 +自变数 1 +x:1 +不悦 1 +x:1 +化学药品 1 +x:1 +外貌 1 +x:1 +拼拼凑凑 1 +x:1 +证件牌 1 +x:1 +古文化 1 +x:1 +寸草不留 1 +x:1 +试验厂 1 +x:1 +懒得 1 +x:1 +大韩 1 +x:1 +孤山 1 +x:1 +小名 1 +x:1 +福安 1 +x:1 +讲义夹 1 +x:1 +一丝一毫 1 +x:1 +小吃 1 +x:1 +笑颜 1 +x:1 +一国两制 1 +x:1 +爱国至诚 1 +x:1 +消癜丸 1 +x:1 +好坏 1 +x:1 +归根结蒂 1 +x:1 +烟花弹 1 +x:1 +周际 1 +x:1 +减利 1 +x:1 +小哨 1 +x:1 +富强 1 +x:1 +收养证 1 +x:1 +不息 1 +x:1 +肃杀 1 +x:1 +引线 1 +x:1 +番石榴 1 +x:1 +计费 1 +x:1 +帕里奥利 1 +x:1 +猜忌 1 +x:1 +小北山 1 +x:1 +牛鬼蛇神 1 +x:1 +零散者 1 +x:1 +勇敢者 1 +x:1 +炊事员 1 +x:1 +花生仁 1 +x:1 +增殖 1 +x:1 +记事簿 1 +x:1 +泯没 1 +x:1 +免税店 1 +x:1 +钢盔 1 +x:1 +阳坪 1 +x:1 +编年 1 +x:1 +孤岛 1 +x:1 +眼下 1 +x:1 +残损币 1 +x:1 +橙色 1 +x:1 +减刑 1 +x:1 +恢宏博大 1 +x:1 +持有期 1 +x:1 +外调 1 +x:1 +节电办 1 +x:1 +种植园主 1 +x:1 +联户 1 +x:1 +炎日 1 +x:1 +优抚 1 +x:1 +普扫 1 +x:1 +大面 1 +x:1 +宜昌 1 +x:1 +金丝绒 1 +x:1 +气团 1 +x:1 +恻 1 +x:1 +白雪 1 +x:1 +试验区 1 +x:1 +霸权主义 1 +x:1 +八卦 1 +x:1 +职名 1 +x:1 +联成 1 +x:1 +发生器 1 +x:1 +不怕 1 +x:1 +宇航界 1 +x:1 +白集 1 +x:1 +气囊 1 +x:1 +油郭乡 1 +x:1 +一衰俱衰 1 +x:1 +提心吊胆 1 +x:1 +外迁 1 +x:1 +胡里胡涂 1 +x:1 +大钱 1 +x:1 +芜湖市 1 +x:1 +立足点 1 +x:1 +茎 10 +x:10 +外运 1 +x:1 +五花大绑 1 +x:1 +压韵 1 +x:1 +好听 1 +x:1 +可气 1 +x:1 +中立国 1 +x:1 +孤弱 1 +x:1 +普及性 1 +x:1 +余量 1 +x:1 +农牧 1 +x:1 +二建 1 +x:1 +吹喇叭 1 +x:1 +潞河 1 +x:1 +铁心轮 1 +x:1 +收听率 1 +x:1 +匮 1 +x:1 +一毛不拔 1 +x:1 +好吃 1 +x:1 +居高难下 1 +x:1 +小坐 1 +x:1 +杨柳池镇 1 +x:1 +舒筋活血 1 +x:1 +济济一堂 1 +x:1 +元书纸 1 +x:1 +制造厂 1 +x:1 +果壳箱 1 +x:1 +大而言之 1 +x:1 +捎 34 +x:34 +我等 1 +x:1 +衬衫业 1 +x:1 +目击者 1 +x:1 +可汗 1 +x:1 +登月舱 1 +x:1 +绛 5 +x:5 +值班 1 +x:1 +外空 1 +x:1 +魔窟 1 +x:1 +教导处 1 +x:1 +燃油泵 1 +x:1 +大江南北 1 +x:1 +重手 1 +x:1 +抢者 1 +x:1 +内绘壶 1 +x:1 +一五一十 1 +x:1 +外边 1 +x:1 +以外 1 +x:1 +冰轮 1 +x:1 +重托 1 +x:1 +橡实 1 +x:1 +阎王账 1 +x:1 +萨瓦金 1 +x:1 +困难 1 +x:1 +漠然置之 1 +x:1 +双喜盈门 1 +x:1 +义无反顾 1 +x:1 +刮目相待 1 +x:1 +三江队 1 +x:1 +东邻西舍 1 +x:1 +主办国 1 +x:1 +当政者 1 +x:1 +垦殖场 1 +x:1 +情形 1 +x:1 +塔哈尔省 1 +x:1 +刚体 1 +x:1 +运用自如 1 +x:1 +坐坐 1 +x:1 +放责 1 +x:1 +发射臂 1 +x:1 +气喘 1 +x:1 +潞水 1 +x:1 +咬 52 +x:52 +外轮 1 +x:1 +健智牌 1 +x:1 +稳 196 +x:196 +铃儿 1 +x:1 +间断性 1 +x:1 +初观者 1 +x:1 +菜青虫 1 +x:1 +格雷罗州 1 +x:1 +车贩子 1 +x:1 +鹞子 1 +x:1 +恭城 1 +x:1 +古董 1 +x:1 +灌木 1 +x:1 +技巧性 1 +x:1 +根堆群培 1 +x:1 +社科联 1 +x:1 +放空气 1 +x:1 +群众运动 1 +x:1 +花果山 1 +x:1 +重担 1 +x:1 +地市委 1 +x:1 +减免 1 +x:1 +开快车 1 +x:1 +麦地那 1 +x:1 +弈棋 1 +x:1 +对流 1 +x:1 +萨摩亚 1 +x:1 +可泣 1 +x:1 +总统令 1 +x:1 +贫弱 1 +x:1 +让行 1 +x:1 +吉林队 1 +x:1 +磷矿石 1 +x:1 +誉满全球 1 +x:1 +志在千里 1 +x:1 +重音 1 +x:1 +次货 1 +x:1 +洁白丸 1 +x:1 +将官 1 +x:1 +引柴 1 +x:1 +次贫 1 +x:1 +联想 1 +x:1 +伐 22 +x:22 +票贩 1 +x:1 +都庞岭 1 +x:1 +谐音字 1 +x:1 +东寨港 1 +x:1 +犹豫不定 1 +x:1 +红树区 1 +x:1 +计较 1 +x:1 +解放桥 1 +x:1 +通知书 1 +x:1 +先锋队 1 +x:1 +优种 1 +x:1 +子公司 1 +x:1 +奴隶式 1 +x:1 +好景不长 1 +x:1 +西藏团 1 +x:1 +鸢尾花 1 +x:1 +不拘 1 +x:1 +固体 1 +x:1 +沧海 1 +x:1 +高能耗 1 +x:1 +枪弹 1 +x:1 +油溪镇 1 +x:1 +玻璃丝 1 +x:1 +夸大性 1 +x:1 +禹州 1 +x:1 +赵村 1 +x:1 +气味 1 +x:1 +钢琴 1 +x:1 +邮政省 1 +x:1 +大门 1 +x:1 +蹦 18 +x:18 +菠萝蜜 1 +x:1 +韫 12 +x:12 +战鼓 1 +x:1 +照本宣科 1 +x:1 +杂项 1 +x:1 +拖驳 1 +x:1 +袖头 1 +x:1 +冠冕堂皇 1 +x:1 +刑律 1 +x:1 +微乎其微 1 +x:1 +普降 1 +x:1 +庆 115 +x:115 +普陀 1 +x:1 +领货单 1 +x:1 +生而知之 1 +x:1 +索贿 1 +x:1 +瘦长 1 +x:1 +植物油 1 +x:1 +滴灌 1 +x:1 +明丽朗润 1 +x:1 +蜂蜜 1 +x:1 +监控程序 1 +x:1 +够 310 +x:310 +自命不凡 1 +x:1 +婚生子 1 +x:1 +协奏曲 1 +x:1 +安化县 1 +x:1 +蜂蜡 1 +x:1 +好喝 1 +x:1 +高村乡 1 +x:1 +优惠 1 +x:1 +罗斯托夫 1 +x:1 +桑地诺 1 +x:1 +库瓦斯 1 +x:1 +大锅 1 +x:1 +斗志昂扬 1 +x:1 +重排 1 +x:1 +反串 1 +x:1 +一马平川 1 +x:1 +不能不 1 +x:1 +洪水期 1 +x:1 +白银 1 +x:1 +瞻仰者 1 +x:1 +室温 1 +x:1 +援外 1 +x:1 +知过必改 1 +x:1 +通史类 1 +x:1 +小九九 1 +x:1 +特供品 1 +x:1 +执法如山 1 +x:1 +压阵 1 +x:1 +信访局 1 +x:1 +湖塘 1 +x:1 +铸造厂 1 +x:1 +查获 1 +x:1 +南城县 1 +x:1 +困陷 1 +x:1 +架子花 1 +x:1 +拓蓝纸 1 +x:1 +白铜 1 +x:1 +吊灰 1 +x:1 +花点子 1 +x:1 +门罗主义 1 +x:1 +迭起 1 +x:1 +吊灯 1 +x:1 +白铁 1 +x:1 +辐射仪 1 +x:1 +玻璃亭 1 +x:1 +难分仲伯 1 +x:1 +屈子祠 1 +x:1 +关爱 1 +x:1 +十之八九 1 +x:1 +免税区 1 +x:1 +海缉处 1 +x:1 +长舒广袖 1 +x:1 +隐讳 1 +x:1 +对接 1 +x:1 +坐姿 1 +x:1 +返祖现象 1 +x:1 +编发 1 +x:1 +无穷无尽 1 +x:1 +叙旧 1 +x:1 +浮动汇率 1 +x:1 +拖锚 1 +x:1 +错划 1 +x:1 +小女 1 +x:1 +茫然不解 1 +x:1 +乒联 1 +x:1 +触怒 1 +x:1 +八度 1 +x:1 +重逢 1 +x:1 +汗衫 1 +x:1 +错判 1 +x:1 +减征 1 +x:1 +钢筋 1 +x:1 +巴克夏猪 1 +x:1 +看青 1 +x:1 +人工林 1 +x:1 +钢筒 1 +x:1 +编号 1 +x:1 +跑马梁 1 +x:1 +金丝猴 1 +x:1 +滴翠 1 +x:1 +三黄鸡 1 +x:1 +宜于 1 +x:1 +官面儿 1 +x:1 +胥浦 1 +x:1 +瓷杯 1 +x:1 +岚山头 1 +x:1 +词 115 +x:115 +中古史 1 +x:1 +足下 1 +x:1 +西安城 1 +x:1 +房室 1 +x:1 +房客 1 +x:1 +贫农 1 +x:1 +耐久性 1 +x:1 +战斗机 1 +x:1 +粗大动脉 1 +x:1 +气孔 1 +x:1 +小处 1 +x:1 +欢欢实实 1 +x:1 +不消 1 +x:1 +应考 1 +x:1 +钢笔 1 +x:1 +查谟 1 +x:1 +消铄精明 1 +x:1 +休闲游 1 +x:1 +中波 1 +x:1 +二十四日 1 +x:1 +毛茸茸 1 +x:1 +% 145 +x:145 +亘古未有 1 +x:1 +贬幅 1 +x:1 +与力甚焉 1 +x:1 +户长 1 +x:1 +老伴儿 1 +x:1 +羚 2 +x:2 +亚运 1 +x:1 +贪污 1 +x:1 +减弱 1 +x:1 +真言 1 +x:1 +蓄积 1 +x:1 +辩护人 1 +x:1 +进驻 1 +x:1 +不济 1 +x:1 +不测 1 +x:1 +房子 1 +x:1 +编印 1 +x:1 +孤军 1 +x:1 +编卷 1 +x:1 +气宇 1 +x:1 +贪求 1 +x:1 +暖空气 1 +x:1 +她俩 1 +x:1 +纠察线 1 +x:1 +梅西村 1 +x:1 +坐失 1 +x:1 +钢管 1 +x:1 +实打实 1 +x:1 +酣梦 1 +x:1 +奸人 1 +x:1 +清华大学 1 +x:1 +小妹 1 +x:1 +慎行 1 +x:1 +大马 1 +x:1 +住区 1 +x:1 +媒体化 1 +x:1 +反日会 1 +x:1 +农迁农 1 +x:1 +翻版 1 +x:1 +亮亮 1 +x:1 +劣种 1 +x:1 +港戊己 1 +x:1 +诊断书 1 +x:1 +如注 1 +x:1 +极右翼 1 +x:1 +神出鬼没 1 +x:1 +旱季 1 +x:1 +耳朵眼儿 1 +x:1 +胜面 1 +x:1 +督办 1 +x:1 +凌源 1 +x:1 +冰峰雪岭 1 +x:1 +瓦楞纸 1 +x:1 +顺手牵羊 1 +x:1 +迟到者 1 +x:1 +打转儿 1 +x:1 +被执行人 1 +x:1 +弓箭 1 +x:1 +混淆是非 1 +x:1 +信访办 1 +x:1 +囤积 1 +x:1 +外胎 1 +x:1 +劫掠一空 1 +x:1 +锐利 1 +x:1 +劝 111 +x:111 +重活 1 +x:1 +出冷门 1 +x:1 +套书 1 +x:1 +赞佩 1 +x:1 +生物系 1 +x:1 +狂热 1 +x:1 +摧枯拉朽 1 +x:1 +福利院 1 +x:1 +重洋 1 +x:1 +卡尔梅克 1 +x:1 +不法 1 +x:1 +糊涂账 1 +x:1 +奸佞 1 +x:1 +抽 78 +x:78 +对抗 1 +x:1 +慎用 1 +x:1 +吊楼 1 +x:1 +真话 1 +x:1 +古语 1 +x:1 +汗褂 1 +x:1 +查验 1 +x:1 +查账 1 +x:1 +中老年人 1 +x:1 +俏 13 +x:13 +城关镇 1 +x:1 +阳安 1 +x:1 +好学 1 +x:1 +忠心 1 +x:1 +白马 1 +x:1 +分期 1 +x:1 +卜 51 +x:51 +飞砂走石 1 +x:1 +龙舟节赛 1 +x:1 +塞内加尔 1 +x:1 +植物所 1 +x:1 +兰溪市 1 +x:1 +集成电路 1 +x:1 +古话 1 +x:1 +硅酸盐 1 +x:1 +古诗 1 +x:1 +啤酒厂 1 +x:1 +免不得 1 +x:1 +外肾 1 +x:1 +卫星站 1 +x:1 +救国图强 1 +x:1 +教导团 1 +x:1 +潮位 1 +x:1 +刑具 1 +x:1 +时宽时窄 1 +x:1 +胜队 1 +x:1 +技师 1 +x:1 +络腮胡 1 +x:1 +全军性 1 +x:1 +江克村 1 +x:1 +蜘蛛 1 +x:1 +念意 1 +x:1 +以图 1 +x:1 +外联 1 +x:1 +好客 1 +x:1 +啤酒卡 1 +x:1 +孤傲 1 +x:1 +白骨 1 +x:1 +滤色镜 1 +x:1 +庚 9 +x:9 +直接经验 1 +x:1 +编剧 1 +x:1 +个别化 1 +x:1 +兴仁县 1 +x:1 +战斗曲 1 +x:1 +外露 1 +x:1 +冰 162 +x:162 +供认 1 +x:1 +惊恐不安 1 +x:1 +资质 1 +x:1 +负荷率 1 +x:1 +观赛 1 +x:1 +动物界 1 +x:1 +皓月当空 1 +x:1 +校委 1 +x:1 +她们 1 +x:1 +室性 1 +x:1 +承诺卡 1 +x:1 +敌分我袭 1 +x:1 +颁 13 +x:13 +老太爷 1 +x:1 +瓜片 1 +x:1 +招架不住 1 +x:1 +孤僻 1 +x:1 +来水 1 +x:1 +白髯 1 +x:1 +编创 1 +x:1 +颖果 1 +x:1 +供词 1 +x:1 +福地 1 +x:1 +对手 1 +x:1 +摩 16 +x:16 +减幅 1 +x:1 +地下铁道 1 +x:1 +坐堂 1 +x:1 +钢窗 1 +x:1 +编制 1 +x:1 +蚍蜉撼树 1 +x:1 +对打 1 +x:1 +月工 1 +x:1 +队阵 1 +x:1 +民主联盟 1 +x:1 +誓图 1 +x:1 +小孩 1 +x:1 +中控室 1 +x:1 +小学 1 +x:1 +循环论 1 +x:1 +奴隶制 1 +x:1 +进食 1 +x:1 +治乱 1 +x:1 +顽强 1 +x:1 +拦挡 1 +x:1 +衣裳襟 1 +x:1 +可怜 1 +x:1 +密云县 1 +x:1 +大足 1 +x:1 +可怕 1 +x:1 +译者 1 +x:1 +大额 1 +x:1 +豆面 1 +x:1 +架子车 1 +x:1 +小康小平 1 +x:1 +伙房 1 +x:1 +小字 1 +x:1 +驴肝肺 1 +x:1 +三分王 1 +x:1 +唇干舌燥 1 +x:1 +同行者 1 +x:1 +票者 1 +x:1 +贤明 1 +x:1 +编内 1 +x:1 +特藏部 1 +x:1 +马山县 1 +x:1 +藕 10 +x:10 +悲观 1 +x:1 +房管所 1 +x:1 +白饭 1 +x:1 +编写 1 +x:1 +技法学 1 +x:1 +速寄 1 +x:1 +邯郸 1 +x:1 +位移 1 +x:1 +透漏 1 +x:1 +红光满面 1 +x:1 +技巧 1 +x:1 +技工 1 +x:1 +坐定 1 +x:1 +古装 1 +x:1 +职守 1 +x:1 +伊莫河 1 +x:1 +蒽环类 1 +x:1 +烙刻 1 +x:1 +断层地震 1 +x:1 +拖靶 1 +x:1 +大风 1 +x:1 +生物群 1 +x:1 +摁 11 +x:11 +如 2684 +x:2684 +凌波 1 +x:1 +韵律 1 +x:1 +眉 12 +x:12 +山口县 1 +x:1 +拖鞋 1 +x:1 +美利坚 1 +x:1 +墨水瓶 1 +x:1 +笑靥 1 +x:1 +法治化 1 +x:1 +试验局 1 +x:1 +人缘儿 1 +x:1 +健脾灵 1 +x:1 +动人肺腑 1 +x:1 +解放日 1 +x:1 +编入 1 +x:1 +披荆斩棘 1 +x:1 +钢种 1 +x:1 +进项 1 +x:1 +款款而动 1 +x:1 +换脑筋 1 +x:1 +房契 1 +x:1 +洛河畔 1 +x:1 +欢乐 1 +x:1 +联测 1 +x:1 +可悲 1 +x:1 +吊索 1 +x:1 +治家 1 +x:1 +遇 213 +x:213 +洋女婿 1 +x:1 +电极法 1 +x:1 +大顺 1 +x:1 +大项 1 +x:1 +一高一低 1 +x:1 +可惜 1 +x:1 +洗碗池 1 +x:1 +小宴 1 +x:1 +金丝燕 1 +x:1 +预报员 1 +x:1 +贺词 1 +x:1 +栲胶 1 +x:1 +白营村 1 +x:1 +轻车熟路 1 +x:1 +点收款 1 +x:1 +榜上有名 1 +x:1 +国税局 1 +x:1 +浍南 1 +x:1 +大碗茶 1 +x:1 +依靠 1 +x:1 +古街 1 +x:1 +治安 1 +x:1 +初愿 1 +x:1 +转让金 1 +x:1 +好头 1 +x:1 +不满 1 +x:1 +映入眼帘 1 +x:1 +港务局 1 +x:1 +行囊 1 +x:1 +雀形目 1 +x:1 +冰舞 1 +x:1 +普高 1 +x:1 +凌海 1 +x:1 +耒 1 +x:1 +馗 1 +x:1 +鸡冠子 1 +x:1 +页理 1 +x:1 +保值期 1 +x:1 +冰舌 1 +x:1 +煤焦厂 1 +x:1 +晾盘 1 +x:1 +欠 192 +x:192 +树懒 1 +x:1 +十万 1 +x:1 +种子选手 1 +x:1 +好多 1 +x:1 +突尼斯市 1 +x:1 +好处 1 +x:1 +吊梯 1 +x:1 +铅丹 1 +x:1 +返贫率 1 +x:1 +指靠 1 +x:1 +烙印 1 +x:1 +油料部 1 +x:1 +教导员 1 +x:1 +岗镇 1 +x:1 +拜把兄弟 1 +x:1 +掷弹筒 1 +x:1 +雉 5 +x:5 +进香 1 +x:1 +羽人 1 +x:1 +介壳 1 +x:1 +配件 1 +x:1 +转向器 1 +x:1 +计财司 1 +x:1 +辞退 1 +x:1 +冰川所 1 +x:1 +来复枪 1 +x:1 +满载率 1 +x:1 +降雨量 1 +x:1 +午餐费 1 +x:1 +以后 1 +x:1 +消摆 1 +x:1 +钢砂 1 +x:1 +造纸业 1 +x:1 +食蚁兽 1 +x:1 +小娃 1 +x:1 +钢研 1 +x:1 +周旋 1 +x:1 +好奇 1 +x:1 +乖巧 1 +x:1 +电子元件 1 +x:1 +宣武区 1 +x:1 +眼镜蛇 1 +x:1 +来源 1 +x:1 +可憎 1 +x:1 +大修费 1 +x:1 +早霜 1 +x:1 +粗疏 1 +x:1 +安家堡乡 1 +x:1 +敌群 1 +x:1 +代理 1 +x:1 +逗逗 1 +x:1 +不久以后 1 +x:1 +浓妆艳抹 1 +x:1 +因特网 1 +x:1 +枪口 1 +x:1 +减小 1 +x:1 +关机 1 +x:1 +冰花 1 +x:1 +大餐 1 +x:1 +科尔多凡 1 +x:1 +带路费 1 +x:1 +累 170 +x:170 +白领 1 +x:1 +古为今用 1 +x:1 +我院 1 +x:1 +城东 1 +x:1 +芜湖县 1 +x:1 +软水 1 +x:1 +冰芯 1 +x:1 +减少 1 +x:1 +初等教育 1 +x:1 +畅行 1 +x:1 +进餐 1 +x:1 +昆腔 1 +x:1 +月牙泉 1 +x:1 +关村 1 +x:1 +大饼 1 +x:1 +心惊肉跳 1 +x:1 +宗教党 1 +x:1 +靠得住 1 +x:1 +木质素 1 +x:1 +舴艋 1 +x:1 +永清县 1 +x:1 +肉中刺 1 +x:1 +天主教徒 1 +x:1 +记事牌 1 +x:1 +圣手 1 +x:1 +欢宴 1 +x:1 +兵贵神速 1 +x:1 +工具钢 1 +x:1 +外航 1 +x:1 +电讯社 1 +x:1 +易燃易爆 1 +x:1 +督军 1 +x:1 +用水 1 +x:1 +配乐 1 +x:1 +穿着 1 +x:1 +不经济性 1 +x:1 +职工 1 +x:1 +查补 1 +x:1 +水月庵 1 +x:1 +大麻 1 +x:1 +生物科 1 +x:1 +南四湖 1 +x:1 +谁料 1 +x:1 +辛迪加 1 +x:1 +采访部 1 +x:1 +冤大头 1 +x:1 +浊水溪 1 +x:1 +寻呼网 1 +x:1 +法学界 1 +x:1 +有线电 1 +x:1 +庚子 1 +x:1 +运算器 1 +x:1 +可是 1 +x:1 +豆酱 1 +x:1 +赠券 1 +x:1 +受话器 1 +x:1 +自不必说 1 +x:1 +畅达 1 +x:1 +真身 1 +x:1 +次长 1 +x:1 +俨如 1 +x:1 +统治者 1 +x:1 +以南 1 +x:1 +国仪 1 +x:1 +小区划 1 +x:1 +丁二烯 1 +x:1 +圣旨 1 +x:1 +触摸 1 +x:1 +棋路 1 +x:1 +天主教堂 1 +x:1 +斗批改 1 +x:1 +楚鲁松杰 1 +x:1 +咬字 1 +x:1 +攘攘 1 +x:1 +叙述 1 +x:1 +箭不虚发 1 +x:1 +眼底病 1 +x:1 +演唱者 1 +x:1 +钢缆 1 +x:1 +湖口 1 +x:1 +当事国 1 +x:1 +绛县 1 +x:1 +监禁率 1 +x:1 +罗得岛 1 +x:1 +痔瘘 1 +x:1 +博导 1 +x:1 +栖息地 1 +x:1 +堵截 1 +x:1 +蒜皮 1 +x:1 +谦逊 1 +x:1 +以北 1 +x:1 +守备团 1 +x:1 +空芯板 1 +x:1 +就职辞 1 +x:1 +小差 1 +x:1 +排土场 1 +x:1 +对本 1 +x:1 +小巧 1 +x:1 +泊南村 1 +x:1 +小工 1 +x:1 +舰队 1 +x:1 +献殷勤 1 +x:1 +撑住 1 +x:1 +酬金 1 +x:1 +缓解 1 +x:1 +奖牌数 1 +x:1 +君 67 +x:67 +关怀 1 +x:1 +咬定 1 +x:1 +综合园 1 +x:1 +大鸨 1 +x:1 +灌浆 1 +x:1 +狂暴 1 +x:1 +毛将焉附 1 +x:1 +西安区 1 +x:1 +以及 1 +x:1 +阳平 1 +x:1 +如梭 1 +x:1 +白龟 1 +x:1 +措 2 +x:2 +道义 1 +x:1 +粗犷 1 +x:1 +枪响 1 +x:1 +小东 1 +x:1 +科技潮 1 +x:1 +属地 1 +x:1 +闹革命 1 +x:1 +中远景 1 +x:1 +湖区 1 +x:1 +早车 1 +x:1 +党总支部 1 +x:1 +茁长 1 +x:1 +统战界 1 +x:1 +福利 1 +x:1 +引水 1 +x:1 +等效声 1 +x:1 +位置 1 +x:1 +肃清 1 +x:1 +成树 1 +x:1 +文牍主义 1 +x:1 +高分低能 1 +x:1 +矢石 1 +x:1 +飘 110 +x:110 +材质 1 +x:1 +取经 1 +x:1 +联欢 1 +x:1 +现成话 1 +x:1 +联次 1 +x:1 +真诚 1 +x:1 +对杀 1 +x:1 +博学 1 +x:1 +循环赛 1 +x:1 +重棉 1 +x:1 +椿树 1 +x:1 +六盘水市 1 +x:1 +尼古丁 1 +x:1 +大鹏 1 +x:1 +昆虫 1 +x:1 +焊管厂 1 +x:1 +行云流水 1 +x:1 +龙潭虎穴 1 +x:1 +房建 1 +x:1 +白鸽 1 +x:1 +吊窗 1 +x:1 +灌注 1 +x:1 +户部 1 +x:1 +雁来红 1 +x:1 +可望 1 +x:1 +古文字 1 +x:1 +君不见 1 +x:1 +取给 1 +x:1 +谆谆教诲 1 +x:1 +旱床 1 +x:1 +小山 1 +x:1 +以前 1 +x:1 +马尔萨斯 1 +x:1 +谁知 1 +x:1 +文武百官 1 +x:1 +亲亲热热 1 +x:1 +愁绪 1 +x:1 +欧乒赛 1 +x:1 +大龙 1 +x:1 +黄毛丫头 1 +x:1 +差役 1 +x:1 +大龄 1 +x:1 +好异 1 +x:1 +瓜皮 1 +x:1 +悬心吊胆 1 +x:1 +八宿 1 +x:1 +空调机 1 +x:1 +博爱县 1 +x:1 +繁荣党 1 +x:1 +以利 1 +x:1 +白鹳 1 +x:1 +碱式盐 1 +x:1 +差异 1 +x:1 +沉浮 1 +x:1 +内在论 1 +x:1 +白鹤 1 +x:1 +司寨村 1 +x:1 +农电 1 +x:1 +灌河 1 +x:1 +狮舞 1 +x:1 +古迹 1 +x:1 +白鹭 1 +x:1 +进退得失 1 +x:1 +曼切斯特 1 +x:1 +小小 1 +x:1 +添马舰 1 +x:1 +树林 1 +x:1 +本影 1 +x:1 +虎彪彪 1 +x:1 +烂漫多姿 1 +x:1 +狗尾续貂 1 +x:1 +生物碱 1 +x:1 +敕勒 1 +x:1 +凝血酶 1 +x:1 +白鹇 1 +x:1 +看守型 1 +x:1 +厂长室 1 +x:1 +保护牌 1 +x:1 +重箱 1 +x:1 +念旧 1 +x:1 +试验室 1 +x:1 +隐性 1 +x:1 +粗率 1 +x:1 +丽音 1 +x:1 +戒严 1 +x:1 +棋谱 1 +x:1 +弗 1 +x:1 +小件 1 +x:1 +穿凿附会 1 +x:1 +速射 1 +x:1 +水头乡 1 +x:1 +迎春花 1 +x:1 +袖口 1 +x:1 +大鼓 1 +x:1 +揭短会 1 +x:1 +群 278 +x:278 +观礼台 1 +x:1 +华舍镇 1 +x:1 +服帖 1 +x:1 +新镇 1 +x:1 +美食佳肴 1 +x:1 +富贵浮云 1 +x:1 +竟会 1 +x:1 +对景 1 +x:1 +爱国同胞 1 +x:1 +赋 21 +x:21 +化学战 1 +x:1 +来校 1 +x:1 +灰黄色 1 +x:1 +八字 1 +x:1 +散花坞 1 +x:1 +引洪 1 +x:1 +树木 1 +x:1 +颠簸 1 +x:1 +黄泥河镇 1 +x:1 +钢纸 1 +x:1 +贷款项 1 +x:1 +回味无穷 1 +x:1 +解放报 1 +x:1 +表现主义 1 +x:1 +湖剧 1 +x:1 +房帖 1 +x:1 +筷子巷 1 +x:1 +鹭 1 +x:1 +劳而无获 1 +x:1 +孤品 1 +x:1 +探亲访友 1 +x:1 +思维力 1 +x:1 +蜂起 1 +x:1 +清静庵 1 +x:1 +死劲儿 1 +x:1 +好心 1 +x:1 +小岗 1 +x:1 +光滑度 1 +x:1 +房市 1 +x:1 +转弯抹角 1 +x:1 +市中心 1 +x:1 +凌桥 1 +x:1 +穷乡僻壤 1 +x:1 +征文 1 +x:1 +死人 1 +x:1 +二京 1 +x:1 +对方 1 +x:1 +死亡 1 +x:1 +包装袋 1 +x:1 +尤其 1 +x:1 +山娃子 1 +x:1 +小影 1 +x:1 +以免 1 +x:1 +小弓棚 1 +x:1 +关押 1 +x:1 +乌迪内 1 +x:1 +不比 1 +x:1 +月岩 1 +x:1 +蒜瓣 1 +x:1 +小弯 1 +x:1 +争执 1 +x:1 +济钢队 1 +x:1 +钢索 1 +x:1 +千钧之重 1 +x:1 +劈叉 1 +x:1 +棋迷 1 +x:1 +乙炔 1 +x:1 +红军院 1 +x:1 +掉落 1 +x:1 +盛 167 +x:167 +粤菜馆 1 +x:1 +奇形怪状 1 +x:1 +汽油费 1 +x:1 +死仗 1 +x:1 +猩猩草 1 +x:1 +太和县 1 +x:1 +特勤局 1 +x:1 +天怒人怨 1 +x:1 +小弟 1 +x:1 +孤坟 1 +x:1 +建造业 1 +x:1 +车膜 1 +x:1 +小引 1 +x:1 +耳挖子 1 +x:1 +真谛 1 +x:1 +拖车费 1 +x:1 +不止 1 +x:1 +共勉共励 1 +x:1 +老框框 1 +x:1 +二中 1 +x:1 +貌 10 +x:10 +对攻 1 +x:1 +康保县 1 +x:1 +初学者 1 +x:1 +尹稼坞村 1 +x:1 +二为 1 +x:1 +阿韦龙省 1 +x:1 +塔山堡 1 +x:1 +二七 1 +x:1 +瓜田 1 +x:1 +封育区 1 +x:1 +博大 1 +x:1 +小心 1 +x:1 +稳定性 1 +x:1 +看重 1 +x:1 +书亭 1 +x:1 +贺辞 1 +x:1 +古谚 1 +x:1 +重檐 1 +x:1 +传入神经 1 +x:1 +团会后 1 +x:1 +线切割 1 +x:1 +城市处 1 +x:1 +库主 1 +x:1 +读书处 1 +x:1 +号令 1 +x:1 +决赛权 1 +x:1 +湖光 1 +x:1 +闹哄哄 1 +x:1 +大鱼 1 +x:1 +塔希主义 1 +x:1 +泌 1 +x:1 +无形之中 1 +x:1 +合理化 1 +x:1 +赫尔辛基 1 +x:1 +魔爪 1 +x:1 +存史 1 +x:1 +中介人 1 +x:1 +对数 1 +x:1 +鲶鱼 1 +x:1 +跟趟儿 1 +x:1 +耐用品 1 +x:1 +程式化 1 +x:1 +烤红薯 1 +x:1 +对敌 1 +x:1 +口蜜腹剑 1 +x:1 +以内 1 +x:1 +小径 1 +x:1 +拦柜 1 +x:1 +太和区 1 +x:1 +以军 1 +x:1 +零声母 1 +x:1 +俳句 1 +x:1 +小人 1 +x:1 +博览群书 1 +x:1 +盒装酒 1 +x:1 +邮政网 1 +x:1 +以身作则 1 +x:1 +情丝 1 +x:1 +逆反心理 1 +x:1 +关掉 1 +x:1 +一棉厂 1 +x:1 +小年 1 +x:1 +主席团 1 +x:1 +神武门 1 +x:1 +软梯 1 +x:1 +挤位 1 +x:1 +直露无余 1 +x:1 +颖慧 1 +x:1 +小幅 1 +x:1 +包圆儿 1 +x:1 +邮政署 1 +x:1 +耗油率 1 +x:1 +贫困 1 +x:1 +供货 1 +x:1 +读书声 1 +x:1 +对撞 1 +x:1 +速度 1 +x:1 +套筒机 1 +x:1 +不容小视 1 +x:1 +联检 1 +x:1 +退票处 1 +x:1 +聚餐会 1 +x:1 +情义 1 +x:1 +必不可缺 1 +x:1 +小于 1 +x:1 +让利酬宾 1 +x:1 +心切 1 +x:1 +清房办 1 +x:1 +宜沙 1 +x:1 +死信 1 +x:1 +刑警队 1 +x:1 +走边 1 +x:1 +澎 11 +x:11 +村农民 1 +x:1 +如此 1 +x:1 +可敬 1 +x:1 +旧 673 +x:673 +福冈 1 +x:1 +技士 1 +x:1 +情书 1 +x:1 +看透 1 +x:1 +灌溉 1 +x:1 +管道局 1 +x:1 +宿 25 +x:25 +坐庄 1 +x:1 +人才外流 1 +x:1 +战斗性 1 +x:1 +炭精棒 1 +x:1 +铃声 1 +x:1 +可数 1 +x:1 +补助金 1 +x:1 +此时此刻 1 +x:1 +畅谈 1 +x:1 +情事 1 +x:1 +法国籍 1 +x:1 +倒针法 1 +x:1 +联合体 1 +x:1 +栉孔 1 +x:1 +房山 1 +x:1 +查询 1 +x:1 +交恶 1 +x:1 +稳定感 1 +x:1 +死伤 1 +x:1 +授课人 1 +x:1 +劈刀 1 +x:1 +郑州 1 +x:1 +种豆得豆 1 +x:1 +棉兰老岛 1 +x:1 +临界角 1 +x:1 +八大 1 +x:1 +视黄醇 1 +x:1 +育新街 1 +x:1 +福利部 1 +x:1 +成品油 1 +x:1 +援兵 1 +x:1 +查证 1 +x:1 +无甲醛 1 +x:1 +柏柏尔 1 +x:1 +房屋 1 +x:1 +身上 1 +x:1 +登龙有术 1 +x:1 +起吊机 1 +x:1 +斗门县 1 +x:1 +树敌 1 +x:1 +愿 789 +x:789 +职专 1 +x:1 +联格 1 +x:1 +至乐 1 +x:1 +联合会 1 +x:1 +查讫 1 +x:1 +情仇 1 +x:1 +撬棍 1 +x:1 +安肃镇 1 +x:1 +薄弱点 1 +x:1 +编后 1 +x:1 +妒忌 1 +x:1 +查访 1 +x:1 +撬棒 1 +x:1 +坐下 1 +x:1 +小康 1 +x:1 +冰蛋 1 +x:1 +钢精 1 +x:1 +毛笔字 1 +x:1 +联校 1 +x:1 +折射率 1 +x:1 +白鳗 1 +x:1 +白鳝 1 +x:1 +巴东县 1 +x:1 +小庄 1 +x:1 +舰长 1 +x:1 +劣绅 1 +x:1 +幅面 1 +x:1 +遵 13 +x:13 +贫嘴 1 +x:1 +免税品 1 +x:1 +压力化 1 +x:1 +油柿 1 +x:1 +喜洋洋 1 +x:1 +书记 1 +x:1 +塔前村 1 +x:1 +软型 1 +x:1 +铁十六局 1 +x:1 +守礼门 1 +x:1 +二炮 1 +x:1 +重听 1 +x:1 +书论 1 +x:1 +肉食厂 1 +x:1 +借款人 1 +x:1 +截门 1 +x:1 +茄子干 1 +x:1 +料 59 +x:59 +通川郡 1 +x:1 +言简语拙 1 +x:1 +安陆 1 +x:1 +錱 1 +x:1 +科技司 1 +x:1 +软垫 1 +x:1 +交际舞 1 +x:1 +防火罩费 1 +x:1 +大云镇 1 +x:1 +有法不依 1 +x:1 +好战 1 +x:1 +张家港 1 +x:1 +通存通兑 1 +x:1 +门诊日 1 +x:1 +来日 1 +x:1 +桂东县 1 +x:1 +结构篇 1 +x:1 +枪案 1 +x:1 +干打垒 1 +x:1 +测量学家 1 +x:1 +足癣 1 +x:1 +垂杨柳 1 +x:1 +妊娠 1 +x:1 +一草一木 1 +x:1 +裂 28 +x:28 +不结盟 1 +x:1 +四部备要 1 +x:1 +通过 1 +x:1 +携儿带女 1 +x:1 +好找 1 +x:1 +刻舟求剑 1 +x:1 +植物学 1 +x:1 +蚌壳 1 +x:1 +铮铮如铁 1 +x:1 +铁石心肠 1 +x:1 +低磁钢 1 +x:1 +不善 1 +x:1 +综合 1 +x:1 +养狐 1 +x:1 +谣风 1 +x:1 +治愚 1 +x:1 +安阳 1 +x:1 +揭 55 +x:55 +娱乐室 1 +x:1 +枪栓 1 +x:1 +英气耿介 1 +x:1 +暮鼓晨钟 1 +x:1 +上段村 1 +x:1 +书评 1 +x:1 +供应点 1 +x:1 +顽敌 1 +x:1 +上行下效 1 +x:1 +护林员 1 +x:1 +好手 1 +x:1 +福建 1 +x:1 +凋谢 1 +x:1 +养父 1 +x:1 +交际花 1 +x:1 +玄妙 1 +x:1 +配用 1 +x:1 +悬壶于市 1 +x:1 +诉讼费 1 +x:1 +配电 1 +x:1 +融为一体 1 +x:1 +氧化物 1 +x:1 +反光镜 1 +x:1 +博望 1 +x:1 +后舱 1 +x:1 +鱼舱 1 +x:1 +亿吨级 1 +x:1 +狂轰烂炸 1 +x:1 +室女 1 +x:1 +不啻 1 +x:1 +来时 1 +x:1 +对话性 1 +x:1 +辉县市 1 +x:1 +阖家欢乐 1 +x:1 +溴 2 +x:2 +珂罗版 1 +x:1 +阳城县 1 +x:1 +桃林口 1 +x:1 +宁都 1 +x:1 +树龄 1 +x:1 +宜化 1 +x:1 +死灰 1 +x:1 +嫩芽 1 +x:1 +世家 1 +x:1 +小憩 1 +x:1 +国家机器 1 +x:1 +鼠疫 1 +x:1 +四中全会 1 +x:1 +账房 1 +x:1 +科技化 1 +x:1 +软坚 1 +x:1 +债权国 1 +x:1 +圣女 1 +x:1 +援建 1 +x:1 +调查站 1 +x:1 +云莺 1 +x:1 +吟啸 1 +x:1 +养牛 1 +x:1 +党史办 1 +x:1 +福清 1 +x:1 +立党 1 +x:1 +虎视鹰瞵 1 +x:1 +螺丝垫 1 +x:1 +调节金 1 +x:1 +盖帽王 1 +x:1 +室外 1 +x:1 +对子 1 +x:1 +折褶 1 +x:1 +牛郎乡 1 +x:1 +安静 1 +x:1 +真真 1 +x:1 +肃反 1 +x:1 +经五路 1 +x:1 +绢本 1 +x:1 +前因后果 1 +x:1 +罗甸县 1 +x:1 +铅球 1 +x:1 +吟咏 1 +x:1 +根须 1 +x:1 +斩断 1 +x:1 +左摆舵 1 +x:1 +蜜李 1 +x:1 +篮里 1 +x:1 +遮盖 1 +x:1 +伙夫 1 +x:1 +多门 1 +x:1 +药剂师 1 +x:1 +大气圈 1 +x:1 +嫩草 1 +x:1 +进行性 1 +x:1 +冻豆腐 1 +x:1 +其诗 1 +x:1 +受术者 1 +x:1 +大作品 1 +x:1 +河南店 1 +x:1 +穆索马 1 +x:1 +麻阳 1 +x:1 +科技力 1 +x:1 +玻璃砖 1 +x:1 +妙高峰 1 +x:1 +空置量 1 +x:1 +蝇营狗苟 1 +x:1 +外籍 1 +x:1 +校区 1 +x:1 +试验团 1 +x:1 +灭火队 1 +x:1 +比赛灯 1 +x:1 +粗作 1 +x:1 +自我批评 1 +x:1 +气鼓鼓 1 +x:1 +蜜月 1 +x:1 +绘声绘色 1 +x:1 +看人眉睫 1 +x:1 +吵吵闹闹 1 +x:1 +不和 1 +x:1 +这么点儿 1 +x:1 +发委会 1 +x:1 +棱 4 +x:4 +分步法 1 +x:1 +篓里 1 +x:1 +惊险万状 1 +x:1 +参与人员 1 +x:1 +嫁接 1 +x:1 +跋涉者 1 +x:1 +房县 1 +x:1 +壮胆 1 +x:1 +麻醉药 1 +x:1 +謇 1 +x:1 +蜜柑 1 +x:1 +普及型 1 +x:1 +八月 1 +x:1 +蜜柚 1 +x:1 +不周 1 +x:1 +其乐无穷 1 +x:1 +限产压锭 1 +x:1 +帕 2 +x:2 +强权政治 1 +x:1 +节育率 1 +x:1 +养猪 1 +x:1 +前列腺素 1 +x:1 +肃南 1 +x:1 +刚硬 1 +x:1 +踌躇 1 +x:1 +心气平和 1 +x:1 +溜走 1 +x:1 +人才观 1 +x:1 +内驱动力 1 +x:1 +横躺竖卧 1 +x:1 +麻雀 1 +x:1 +摸黑 1 +x:1 +农膜 1 +x:1 +挨家挨户 1 +x:1 +安海镇 1 +x:1 +优胜队 1 +x:1 +试验期 1 +x:1 +各显神通 1 +x:1 +汉 159 +x:159 +休闲型 1 +x:1 +长大成材 1 +x:1 +粗俗 1 +x:1 +保龄 1 +x:1 +新疆团 1 +x:1 +蝴蝶 1 +x:1 +清障车 1 +x:1 +初记 1 +x:1 +闯闯 1 +x:1 +玻璃碴 1 +x:1 +村村组组 1 +x:1 +江湖义气 1 +x:1 +不同 1 +x:1 +垂直线 1 +x:1 +且慢派 1 +x:1 +溪乾村 1 +x:1 +蜜枣 1 +x:1 +至亲 1 +x:1 +不吝 1 +x:1 +状态值 1 +x:1 +湖湾 1 +x:1 +邮差 1 +x:1 +表尺 1 +x:1 +贪图 1 +x:1 +西瓜界 1 +x:1 +和稀泥 1 +x:1 +打字组 1 +x:1 +缘故 1 +x:1 +气愤 1 +x:1 +领袖群伦 1 +x:1 +福泉 1 +x:1 +小试 1 +x:1 +涪城区 1 +x:1 +寂无人声 1 +x:1 +愈加 1 +x:1 +采莲调 1 +x:1 +商城路 1 +x:1 +身价 1 +x:1 +篾片 1 +x:1 +错案 1 +x:1 +好恶 1 +x:1 +宣武门 1 +x:1 +空气锤 1 +x:1 +购票者 1 +x:1 +两不适 1 +x:1 +抗毒血清 1 +x:1 +喷水池 1 +x:1 +修旧利废 1 +x:1 +骨伤病 1 +x:1 +引动 1 +x:1 +气慨 1 +x:1 +尧天舜日 1 +x:1 +树墩 1 +x:1 +后背 1 +x:1 +的士 1 +x:1 +引力 1 +x:1 +小指 1 +x:1 +风平乡 1 +x:1 +职掌 1 +x:1 +兴隆乡 1 +x:1 +套用 1 +x:1 +空额 1 +x:1 +多难 1 +x:1 +歧异 1 +x:1 +小声 1 +x:1 +奥林匹克 1 +x:1 +同归于尽 1 +x:1 +吉家坪村 1 +x:1 +中断点 1 +x:1 +伉 13 +x:13 +楼脚 1 +x:1 +你咯 1 +x:1 +泉州市 1 +x:1 +二爷 1 +x:1 +山口镇 1 +x:1 +凯旋 1 +x:1 +规划者 1 +x:1 +袜 6 +x:6 +截面 1 +x:1 +触媒 1 +x:1 +冢 2 +x:2 +孤残 1 +x:1 +通辽 1 +x:1 +圭臬 1 +x:1 +昼夜 1 +x:1 +介意 1 +x:1 +低收入 1 +x:1 +武平坪坑 1 +x:1 +上海街 1 +x:1 +大韩民国 1 +x:1 +技改 1 +x:1 +农林局 1 +x:1 +对外 1 +x:1 +得不偿失 1 +x:1 +井架 1 +x:1 +识 81 +x:81 +贪嘴 1 +x:1 +保鲜 1 +x:1 +联唱 1 +x:1 +汇集 1 +x:1 +桂阳县 1 +x:1 +有条不紊 1 +x:1 +补偿金 1 +x:1 +死物 1 +x:1 +鞠躬礼 1 +x:1 +鸫鸟 1 +x:1 +减数 1 +x:1 +灌包 1 +x:1 +灭口 1 +x:1 +训练部 1 +x:1 +紫草茸 1 +x:1 +公里数 1 +x:1 +草豆蔻 1 +x:1 +曙光上村 1 +x:1 +荤菜 1 +x:1 +沾边儿 1 +x:1 +圣子 1 +x:1 +阳性 1 +x:1 +大华行 1 +x:1 +精神百倍 1 +x:1 +膨出 1 +x:1 +款费 1 +x:1 +大逆不道 1 +x:1 +挚挚 1 +x:1 +莫名无言 1 +x:1 +二环 1 +x:1 +楠木 1 +x:1 +重在 1 +x:1 +鬼蜮伎俩 1 +x:1 +瞧得起 1 +x:1 +篮坛 1 +x:1 +国贸局 1 +x:1 +钢珠 1 +x:1 +不图 1 +x:1 +安仁村 1 +x:1 +添砖加瓦 1 +x:1 +纵观 1 +x:1 +集训期 1 +x:1 +荷枪实弹 1 +x:1 +伏狮形 1 +x:1 +被除数 1 +x:1 +好感 1 +x:1 +引发 1 +x:1 +发酵站 1 +x:1 +来回 1 +x:1 +船埠 1 +x:1 +人工岛 1 +x:1 +速报 1 +x:1 +情爱 1 +x:1 +霍邱县 1 +x:1 +气态 1 +x:1 +一人班 1 +x:1 +气恼 1 +x:1 +模拟化 1 +x:1 +湖泊 1 +x:1 +淮西 1 +x:1 +气息 1 +x:1 +维护费 1 +x:1 +八旗 1 +x:1 +眉纹石 1 +x:1 +链条厂 1 +x:1 +名过其实 1 +x:1 +耍花招 1 +x:1 +张家浜 1 +x:1 +的姐 1 +x:1 +宜阳 1 +x:1 +保鲜剂 1 +x:1 +来踪去迹 1 +x:1 +还贷额 1 +x:1 +八日 1 +x:1 +筑渠 1 +x:1 +保存率 1 +x:1 +戒烟 1 +x:1 +山西梆子 1 +x:1 +关念 1 +x:1 +铅白 1 +x:1 +重重 1 +x:1 +可好 1 +x:1 +八时 1 +x:1 +湖泽 1 +x:1 +小我 1 +x:1 +麟凤龟龙 1 +x:1 +赌钱 1 +x:1 +加塞儿 1 +x:1 +脏物 1 +x:1 +不合理性 1 +x:1 +速成 1 +x:1 +货运链 1 +x:1 +服饰 1 +x:1 +截除 1 +x:1 +直前 1 +x:1 +妊妇 1 +x:1 +无本之木 1 +x:1 +费尽周折 1 +x:1 +枪毙 1 +x:1 +安闲 1 +x:1 +十佳 1 +x:1 +重型 1 +x:1 +玉门镇 1 +x:1 +红树林 1 +x:1 +后脚 1 +x:1 +湖水 1 +x:1 +以法 1 +x:1 +后脑 1 +x:1 +关张 1 +x:1 +猫肉 1 +x:1 +扁 3 +x:3 +玻璃窗 1 +x:1 +疯人院 1 +x:1 +减摩 1 +x:1 +说得来 1 +x:1 +绢丝纺 1 +x:1 +香案 1 +x:1 +灌制 1 +x:1 +零花 1 +x:1 +影视局 1 +x:1 +调查科 1 +x:1 +后腿 1 +x:1 +后腰 1 +x:1 +工团主义 1 +x:1 +圣婴 1 +x:1 +编校 1 +x:1 +爱子教子 1 +x:1 +竟然 1 +x:1 +高升村 1 +x:1 +大出血 1 +x:1 +石麒麟 1 +x:1 +永康路 1 +x:1 +联同 1 +x:1 +联名 1 +x:1 +交接班 1 +x:1 +联合 1 +x:1 +好懂 1 +x:1 +公益金 1 +x:1 +哺 5 +x:5 +分分 1 +x:1 +圆括号 1 +x:1 +农林下路 1 +x:1 +气机 1 +x:1 +空目录 1 +x:1 +以此 1 +x:1 +蕉窗 1 +x:1 +加把劲 1 +x:1 +旱极 1 +x:1 +胎记 1 +x:1 +本乡本土 1 +x:1 +蹲坐者 1 +x:1 +宜城 1 +x:1 +盗窃案 1 +x:1 +好高骛远 1 +x:1 +体谅 1 +x:1 +大栅栏 1 +x:1 +东 511 +x:511 +库亚巴 1 +x:1 +小数 1 +x:1 +不准 1 +x:1 +煤焦油 1 +x:1 +马加丹州 1 +x:1 +减掉 1 +x:1 +创纪录 1 +x:1 +哭哭咧咧 1 +x:1 +大舌头 1 +x:1 +治教 1 +x:1 +臭骂 1 +x:1 +对待 1 +x:1 +软厢 1 +x:1 +阳朝乡 1 +x:1 +降尘量 1 +x:1 +雪面 1 +x:1 +太行红 1 +x:1 +四五点钟 1 +x:1 +孜本 1 +x:1 +情由 1 +x:1 +十进制 1 +x:1 +元宵节 1 +x:1 +根形 1 +x:1 +虎啸声 1 +x:1 +书迷 1 +x:1 +药剂学 1 +x:1 +书迹 1 +x:1 +体育法 1 +x:1 +以次 1 +x:1 +豆角角 1 +x:1 +八拐 1 +x:1 +交易部 1 +x:1 +房管局 1 +x:1 +量入为出 1 +x:1 +膘情 1 +x:1 +违 20 +x:20 +准确性 1 +x:1 +旱柳 1 +x:1 +莉 44 +x:44 +鄞县 1 +x:1 +不再 1 +x:1 +恭敬 1 +x:1 +玉田县 1 +x:1 +引咎 1 +x:1 +抠算 1 +x:1 +纵身 1 +x:1 +单身只影 1 +x:1 +结构美 1 +x:1 +趾 1 +x:1 +社科司 1 +x:1 +政史系 1 +x:1 +明知故犯 1 +x:1 +大孙各庄 1 +x:1 +倡议书 1 +x:1 +树干 1 +x:1 +尘事 1 +x:1 +商品粮棉 1 +x:1 +不公 1 +x:1 +妙入无声 1 +x:1 +殊 10 +x:10 +互谅互让 1 +x:1 +斥责 1 +x:1 +联危 1 +x:1 +说明书 1 +x:1 +气枪 1 +x:1 +夜猫子 1 +x:1 +职数 1 +x:1 +勇于 1 +x:1 +长距离 1 +x:1 +洗涤 1 +x:1 +出勤率 1 +x:1 +医药 1 +x:1 +对弈 1 +x:1 +抄袭者 1 +x:1 +腰果仁 1 +x:1 +散会 1 +x:1 +不免 1 +x:1 +对开 1 +x:1 +宪 17 +x:17 +不光 1 +x:1 +正副教授 1 +x:1 +将校 1 +x:1 +死理 1 +x:1 +福橘 1 +x:1 +瓷实 1 +x:1 +刁顽 1 +x:1 +职教 1 +x:1 +调查组 1 +x:1 +关塞 1 +x:1 +樱花瓣 1 +x:1 +敬爱 1 +x:1 +附着物 1 +x:1 +国典 1 +x:1 +优厚 1 +x:1 +裂化 1 +x:1 +编演 1 +x:1 +原原本本 1 +x:1 +速效 1 +x:1 +婀娜 1 +x:1 +蜻蜓 1 +x:1 +孰不可忍 1 +x:1 +气柜 1 +x:1 +柠檬黄 1 +x:1 +墨存 1 +x:1 +软卧 1 +x:1 +斥资 1 +x:1 +谁个 1 +x:1 +膏药旗 1 +x:1 +扯 37 +x:37 +永垂青史 1 +x:1 +街头剧 1 +x:1 +确定性 1 +x:1 +身边 1 +x:1 +丽江 1 +x:1 +阳春 1 +x:1 +多重 1 +x:1 +待会儿 1 +x:1 +倡议信 1 +x:1 +宁镇 1 +x:1 +策划人 1 +x:1 +情理 1 +x:1 +蜚声于世 1 +x:1 +普查 1 +x:1 +煎饼 1 +x:1 +弃邪归正 1 +x:1 +联勤 1 +x:1 +北岳区 1 +x:1 +指甲盖 1 +x:1 +套牢 1 +x:1 +姑子营村 1 +x:1 +制造家 1 +x:1 +科技园 1 +x:1 +闸盒 1 +x:1 +通情达理 1 +x:1 +对应 1 +x:1 +青光眼 1 +x:1 +闸皮 1 +x:1 +博拉 1 +x:1 +补血剂 1 +x:1 +鄯善 1 +x:1 +嫌怨 1 +x:1 +转瞬间 1 +x:1 +重兵 1 +x:1 +奸猾 1 +x:1 +心包 1 +x:1 +调查网 1 +x:1 +瓜仁 1 +x:1 +来 10292 +x:10292 +阳极 1 +x:1 +零落 1 +x:1 +黄热病 1 +x:1 +联办 1 +x:1 +读书报 1 +x:1 +水平仪 1 +x:1 +面人儿 1 +x:1 +通称 1 +x:1 +产莲区 1 +x:1 +校牌 1 +x:1 +交易量 1 +x:1 +如其 1 +x:1 +死症 1 +x:1 +贫油 1 +x:1 +考勤簿 1 +x:1 +浑重 1 +x:1 +镂刻 1 +x:1 +树影 1 +x:1 +芦丰 1 +x:1 +玄奥 1 +x:1 +廉正语 1 +x:1 +石门村 1 +x:1 +有失远迎 1 +x:1 +关外 1 +x:1 +炎 10 +x:10 +大宴宾客 1 +x:1 +树形 1 +x:1 +二甲 1 +x:1 +朗 16 +x:16 +哀痛 1 +x:1 +奴仆 1 +x:1 +联剧 1 +x:1 +处置费 1 +x:1 +真情 1 +x:1 +霜叶 1 +x:1 +正己率下 1 +x:1 +亡命之徒 1 +x:1 +资源型 1 +x:1 +犀利 1 +x:1 +剃度 1 +x:1 +关头 1 +x:1 +心痛病 1 +x:1 +魂不守舍 1 +x:1 +八一年 1 +x:1 +不停 1 +x:1 +三证一单 1 +x:1 +重写 1 +x:1 +眼珠儿 1 +x:1 +叙事 1 +x:1 +背靠背 1 +x:1 +联汇制 1 +x:1 +搞笑 1 +x:1 +寿终 1 +x:1 +可心 1 +x:1 +百尺竿头 1 +x:1 +阳朔 1 +x:1 +叩动 1 +x:1 +贫民 1 +x:1 +识者 1 +x:1 +圣山 1 +x:1 +玻璃粉 1 +x:1 +援款 1 +x:1 +洗涤剂 1 +x:1 +多多的 1 +x:1 +联创 1 +x:1 +优劣 1 +x:1 +敫 1 +x:1 +身躯 1 +x:1 +木质 1 +x:1 +麒麟盖 1 +x:1 +凌厉 1 +x:1 +橡树 1 +x:1 +保山市 1 +x:1 +说 17649 +x:17649 +身无长物 1 +x:1 +瓜乡 1 +x:1 +不足者 1 +x:1 +指手画脚 1 +x:1 +款识 1 +x:1 +核废料 1 +x:1 +大棚式 1 +x:1 +麻酱 1 +x:1 +堵塞 1 +x:1 +怄 2 +x:2 +数以百计 1 +x:1 +遂行 1 +x:1 +叩关 1 +x:1 +复杂性 1 +x:1 +重利 1 +x:1 +不只 1 +x:1 +通报会 1 +x:1 +折返 1 +x:1 +洋纱 1 +x:1 +战场 1 +x:1 +潮热 1 +x:1 +厦南 1 +x:1 +耍花枪 1 +x:1 +二氧化硫 1 +x:1 +不及 1 +x:1 +治权 1 +x:1 +夹生饭 1 +x:1 +宁陵 1 +x:1 +回音壁 1 +x:1 +麻 25 +x:25 +不平等性 1 +x:1 +盐酸 1 +x:1 +小村 1 +x:1 +坏血病 1 +x:1 +猛然间 1 +x:1 +蔓儿 1 +x:1 +袖标 1 +x:1 +尘砂 1 +x:1 +不成人子 1 +x:1 +法制化 1 +x:1 +华 592 +x:592 +出汤量 1 +x:1 +来去 1 +x:1 +集约经营 1 +x:1 +气壮山河 1 +x:1 +身负 1 +x:1 +小朱 1 +x:1 +治本 1 +x:1 +安逸 1 +x:1 +联农 1 +x:1 +联军 1 +x:1 +纸房乡 1 +x:1 +捐助人 1 +x:1 +太和殿 1 +x:1 +来历 1 +x:1 +关涉 1 +x:1 +高峰会 1 +x:1 +宁阳 1 +x:1 +重剑 1 +x:1 +征稿 1 +x:1 +隐约 1 +x:1 +赊欠 1 +x:1 +机船 1 +x:1 +燃料箱 1 +x:1 +尾水渠 1 +x:1 +长宁区 1 +x:1 +联共 1 +x:1 +诸国 1 +x:1 +小偷 1 +x:1 +黄梅雨 1 +x:1 +职权责 1 +x:1 +书账 1 +x:1 +书贩 1 +x:1 +联入 1 +x:1 +无抵押 1 +x:1 +来华 1 +x:1 +职权 1 +x:1 +中影 1 +x:1 +法制史 1 +x:1 +撬 22 +x:22 +陪审 1 +x:1 +不单 1 +x:1 +陪客 1 +x:1 +舞蹈节 1 +x:1 +重办 1 +x:1 +收棉款 1 +x:1 +重力 1 +x:1 +医务界 1 +x:1 +记事体 1 +x:1 +房改 1 +x:1 +小抄儿 1 +x:1 +保额 1 +x:1 +战威 1 +x:1 +相对论 1 +x:1 +出水量 1 +x:1 +减慢 1 +x:1 +软饮料业 1 +x:1 +缉私队 1 +x:1 +纵谈 1 +x:1 +著 80 +x:80 +居住区 1 +x:1 +写真照 1 +x:1 +踏足 1 +x:1 +韵白 1 +x:1 +沉沉 1 +x:1 +绿地率 1 +x:1 +治林 1 +x:1 +长短途 1 +x:1 +枝节 1 +x:1 +爆竹声 1 +x:1 +气旋 1 +x:1 +麻醉 1 +x:1 +试验性 1 +x:1 +救火队长 1 +x:1 +安邦 1 +x:1 +生机盎然 1 +x:1 +五角星 1 +x:1 +冻结令 1 +x:1 +高峰乡 1 +x:1 +竞买者 1 +x:1 +偷私渡 1 +x:1 +防雨罩 1 +x:1 +对岸 1 +x:1 +树巢 1 +x:1 +花生米 1 +x:1 +上海路 1 +x:1 +宁静 1 +x:1 +岳王路 1 +x:1 +普及本 1 +x:1 +猜测 1 +x:1 +锐气 1 +x:1 +呢喃 1 +x:1 +棉毛衫 1 +x:1 +毫无例外 1 +x:1 +防弹衣 1 +x:1 +分析员 1 +x:1 +自况体 1 +x:1 +十足 1 +x:1 +嫩蕊 1 +x:1 +织补工 1 +x:1 +差数 1 +x:1 +透剔 1 +x:1 +带菌者 1 +x:1 +天河 1 +x:1 +屋梁 1 +x:1 +玉山县 1 +x:1 +深情厚意 1 +x:1 +东北风 1 +x:1 +南靖县 1 +x:1 +淇 4 +x:4 +红星路 1 +x:1 +水利化 1 +x:1 +永志不忘 1 +x:1 +真分数 1 +x:1 +肉食品 1 +x:1 +意绪 1 +x:1 +金迷纸醉 1 +x:1 +来势 1 +x:1 +重印 1 +x:1 +联储 1 +x:1 +硬度 1 +x:1 +新洲县 1 +x:1 +伴生树 1 +x:1 +阳文 1 +x:1 +来劲 1 +x:1 +折身 1 +x:1 +巧 62 +x:62 +后藏 1 +x:1 +念念 1 +x:1 +堵头 1 +x:1 +快检仪 1 +x:1 +阳新 1 +x:1 +坐像 1 +x:1 +对峙 1 +x:1 +余姚市 1 +x:1 +双立人 1 +x:1 +兴利除弊 1 +x:1 +养病 1 +x:1 +坚强不屈 1 +x:1 +不力 1 +x:1 +誓死 1 +x:1 +阿是穴 1 +x:1 +独立国家 1 +x:1 +如故 1 +x:1 +涓滴成溪 1 +x:1 +名 6818 +x:6818 +差旅 1 +x:1 +直线型 1 +x:1 +足球队 1 +x:1 +校点 1 +x:1 +莘 1 +x:1 +小曲 1 +x:1 +温文尔雅 1 +x:1 +好斗 1 +x:1 +捧哏 1 +x:1 +余干 1 +x:1 +度 293 +x:293 +卑鄙 1 +x:1 +卫生学会 1 +x:1 +零蛋 1 +x:1 +养生 1 +x:1 +水利史 1 +x:1 +无所谓 1 +x:1 +分散 1 +x:1 +躬亲 1 +x:1 +狂乱 1 +x:1 +甲状腺肿 1 +x:1 +减息 1 +x:1 +科研型 1 +x:1 +编写组 1 +x:1 +其责 1 +x:1 +其败 1 +x:1 +法制办 1 +x:1 +接团表 1 +x:1 +关子 1 +x:1 +不利 1 +x:1 +大动大静 1 +x:1 +瓷壶 1 +x:1 +为虎傅翼 1 +x:1 +水利厅 1 +x:1 +国家机关 1 +x:1 +来到 1 +x:1 +传声筒 1 +x:1 +进行曲 1 +x:1 +重整 1 +x:1 +可巧 1 +x:1 +沧州 1 +x:1 +霜冻 1 +x:1 +炮车 1 +x:1 +养畜 1 +x:1 +南坪县 1 +x:1 +纵贯 1 +x:1 +秩序 1 +x:1 +调节型 1 +x:1 +炮轰 1 +x:1 +晋冀察 1 +x:1 +小暑 1 +x:1 +自来水笔 1 +x:1 +尤杯 1 +x:1 +不巧 1 +x:1 +交费人 1 +x:1 +车钱 1 +x:1 +以来 1 +x:1 +体育周 1 +x:1 +命笔 1 +x:1 +勇为 1 +x:1 +内向型 1 +x:1 +穷亲 1 +x:1 +不已 1 +x:1 +小楷 1 +x:1 +水利局 1 +x:1 +穷人 1 +x:1 +仙气 1 +x:1 +洋浦 1 +x:1 +整存 1 +x:1 +号码 1 +x:1 +十届二中 1 +x:1 +大道队 1 +x:1 +汗脚 1 +x:1 +醒者 1 +x:1 +小有名气 1 +x:1 +筹融资 1 +x:1 +资助者 1 +x:1 +瓷土 1 +x:1 +保险 1 +x:1 +联心 1 +x:1 +三叶形虫 1 +x:1 +血 186 +x:186 +八一厂 1 +x:1 +气死 1 +x:1 +优异 1 +x:1 +挂点户 1 +x:1 +对口 1 +x:1 +足球场 1 +x:1 +工头 1 +x:1 +娱乐厅 1 +x:1 +编排 1 +x:1 +插建 1 +x:1 +遮羞 1 +x:1 +琐事 1 +x:1 +明确化 1 +x:1 +对号 1 +x:1 +慢慢悠悠 1 +x:1 +平素 1 +x:1 +仰卧起坐 1 +x:1 +小河口镇 1 +x:1 +宁国 1 +x:1 +室内 1 +x:1 +优弧 1 +x:1 +恭楷 1 +x:1 +督战 1 +x:1 +可操作性 1 +x:1 +指点迷津 1 +x:1 +叩开 1 +x:1 +刁钻 1 +x:1 +一览无遗 1 +x:1 +赏赐 1 +x:1 +软式 1 +x:1 +蛛网 1 +x:1 +自物权 1 +x:1 +跷跷板 1 +x:1 +滋补品 1 +x:1 +全力以赴 1 +x:1 +教导师 1 +x:1 +院落 1 +x:1 +金钱龟 1 +x:1 +秒表 1 +x:1 +凋落 1 +x:1 +八渡 1 +x:1 +猜拳 1 +x:1 +根量 1 +x:1 +读书潮 1 +x:1 +胫骨 1 +x:1 +奸细 1 +x:1 +鼎锅 1 +x:1 +索誉 1 +x:1 +折腾 1 +x:1 +暴 12 +x:12 +看守所 1 +x:1 +折腰 1 +x:1 +东边沿 1 +x:1 +西服革履 1 +x:1 +软弱 1 +x:1 +房款 1 +x:1 +关员 1 +x:1 +裂开 1 +x:1 +蜜源 1 +x:1 +板上钉钉 1 +x:1 +拦击 1 +x:1 +优待 1 +x:1 +同情心 1 +x:1 +东北非 1 +x:1 +天高地厚 1 +x:1 +柔劲儿 1 +x:1 +自豪者 1 +x:1 +死硬 1 +x:1 +稳定器 1 +x:1 +烟头 1 +x:1 +福星 1 +x:1 +督抚 1 +x:1 +识货 1 +x:1 +清热泻火 1 +x:1 +亮色 1 +x:1 +保靖 1 +x:1 +刚烈 1 +x:1 +近忧 1 +x:1 +树叶 1 +x:1 +小桥 1 +x:1 +剃刀 1 +x:1 +商品生产 1 +x:1 +法制局 1 +x:1 +鼠类 1 +x:1 +对劲 1 +x:1 +供应科 1 +x:1 +争当 1 +x:1 +小桌 1 +x:1 +漓江 1 +x:1 +炎夏 1 +x:1 +迸裂 1 +x:1 +软度 1 +x:1 +阪 1 +x:1 +厚生省 1 +x:1 +注疏 1 +x:1 +栽赃 1 +x:1 +铜板纸 1 +x:1 +瓦戈庄镇 1 +x:1 +快单磁 1 +x:1 +调解剂 1 +x:1 +坦称 1 +x:1 +干河坝村 1 +x:1 +抱恨终身 1 +x:1 +漆雕 1 +x:1 +甜言蜜语 1 +x:1 +肃宁 1 +x:1 +河南团 1 +x:1 +含糊其词 1 +x:1 +冒冒失失 1 +x:1 +沈飞队 1 +x:1 +瓷器 1 +x:1 +张家村 1 +x:1 +治校 1 +x:1 +保需 1 +x:1 +小样 1 +x:1 +剧院团 1 +x:1 +固然 1 +x:1 +配系 1 +x:1 +书苑 1 +x:1 +近道 1 +x:1 +正当防卫 1 +x:1 +侧视图 1 +x:1 +编报 1 +x:1 +传神 1 +x:1 +冶炼厂 1 +x:1 +成其为 1 +x:1 +叶翠欲滴 1 +x:1 +来路不明 1 +x:1 +家电部 1 +x:1 +房檐 1 +x:1 +天主教派 1 +x:1 +恭桶 1 +x:1 +治标 1 +x:1 +后话 1 +x:1 +糙甸乡 1 +x:1 +可即 1 +x:1 +交响乐章 1 +x:1 +二秘 1 +x:1 +前列腺病 1 +x:1 +根部 1 +x:1 +柞丝绸 1 +x:1 +铅粉 1 +x:1 +被录用者 1 +x:1 +校级 1 +x:1 +沧县 1 +x:1 +标准音 1 +x:1 +近邻 1 +x:1 +蔓延 1 +x:1 +缩印本 1 +x:1 +撒手人寰 1 +x:1 +战列舰 1 +x:1 +集镇 1 +x:1 +凋蔽 1 +x:1 +音乐部 1 +x:1 +软席 1 +x:1 +专卖法 1 +x:1 +遗老 1 +x:1 +辐射点 1 +x:1 +永安村 1 +x:1 +不屈 1 +x:1 +吟就 1 +x:1 +西安市 1 +x:1 +两肋插刀 1 +x:1 +治检 1 +x:1 +不屑 1 +x:1 +小棚 1 +x:1 +耍花样 1 +x:1 +麻黄 1 +x:1 +追缉 1 +x:1 +果子露 1 +x:1 +货仓式 1 +x:1 +重工 1 +x:1 +拂逆 1 +x:1 +水獭皮 1 +x:1 +鼠粪 1 +x:1 +书艺 1 +x:1 +农学院 1 +x:1 +编成 1 +x:1 +四大皆空 1 +x:1 +号称 1 +x:1 +可取 1 +x:1 +博湖 1 +x:1 +分检机 1 +x:1 +小国 1 +x:1 +裂帛 1 +x:1 +可可 1 +x:1 +联合社 1 +x:1 +扬子鳄 1 +x:1 +套红 1 +x:1 +滴丸 1 +x:1 +宁馨 1 +x:1 +可口 1 +x:1 +死神 1 +x:1 +的卡 1 +x:1 +实际工资 1 +x:1 +性社会学 1 +x:1 +呢子 1 +x:1 +这年 1 +x:1 +集锦 1 +x:1 +青石狮子 1 +x:1 +进站口 1 +x:1 +近郊 1 +x:1 +美容热 1 +x:1 +载歌载舞 1 +x:1 +分担 1 +x:1 +好样 1 +x:1 +镂嵌 1 +x:1 +羽翼 1 +x:1 +含笑九泉 1 +x:1 +广播稿 1 +x:1 +倾向 1 +x:1 +科技委 1 +x:1 +油画像 1 +x:1 +透彻 1 +x:1 +供应站 1 +x:1 +芯片组 1 +x:1 +弓形 1 +x:1 +对冲 1 +x:1 +不必 1 +x:1 +行尸走肉 1 +x:1 +医务科 1 +x:1 +伯延村 1 +x:1 +枪托 1 +x:1 +老大不小 1 +x:1 +对内 1 +x:1 +致敬 1 +x:1 +羽翅 1 +x:1 +身腰 1 +x:1 +宜路镇 1 +x:1 +男装展 1 +x:1 +枪手 1 +x:1 +作呕 1 +x:1 +悬悬的 1 +x:1 +如常 1 +x:1 +锐意 1 +x:1 +空邮 1 +x:1 +刚玉 1 +x:1 +立 430 +x:430 +速比 1 +x:1 +余庆县 1 +x:1 +大儿子 1 +x:1 +弓弩 1 +x:1 +注目 1 +x:1 +夜总会式 1 +x:1 +准星 1 +x:1 +老虎钳 1 +x:1 +湘 54 +x:54 +晶体点阵 1 +x:1 +弓弦 1 +x:1 +大气层 1 +x:1 +枪战 1 +x:1 +套索 1 +x:1 +来往 1 +x:1 +劈柴 1 +x:1 +对准 1 +x:1 +不得 1 +x:1 +出品人 1 +x:1 +防抗灾 1 +x:1 +妻舅 1 +x:1 +决赛史 1 +x:1 +幸 16 +x:16 +来得 1 +x:1 +后裔 1 +x:1 +流行乐 1 +x:1 +刁难 1 +x:1 +阿谀奉承 1 +x:1 +核仁 1 +x:1 +太和村 1 +x:1 +潮籍 1 +x:1 +转向架 1 +x:1 +生物体 1 +x:1 +征婚者 1 +x:1 +鲢鱼 1 +x:1 +一统 1 +x:1 +农耕 1 +x:1 +单单 1 +x:1 +触动 1 +x:1 +常情 1 +x:1 +残编断简 1 +x:1 +照顾性 1 +x:1 +重庆 1 +x:1 +瓦尔德斯 1 +x:1 +猜想 1 +x:1 +肉丝 1 +x:1 +车铃 1 +x:1 +小毛 1 +x:1 +不当 1 +x:1 +贯彻始终 1 +x:1 +炮舰 1 +x:1 +书脊 1 +x:1 +气概 1 +x:1 +炼 12 +x:12 +调查点 1 +x:1 +芦花 1 +x:1 +橡木 1 +x:1 +配置 1 +x:1 +杀身之祸 1 +x:1 +刑房 1 +x:1 +炮艇 1 +x:1 +牢牢 1 +x:1 +怀来县 1 +x:1 +以方 1 +x:1 +工况法 1 +x:1 +云丝 1 +x:1 +点石成金 1 +x:1 +科技处 1 +x:1 +重建 1 +x:1 +对光 1 +x:1 +广播站 1 +x:1 +樱桃花 1 +x:1 +乱成一团 1 +x:1 +说明符 1 +x:1 +鲜花锦簇 1 +x:1 +羽缎 1 +x:1 +横竖 1 +x:1 +引导 1 +x:1 +保镖 1 +x:1 +风油精 1 +x:1 +逾期率 1 +x:1 +战斗员 1 +x:1 +白头翁 1 +x:1 +歇业 1 +x:1 +评先创优 1 +x:1 +朝乾夕惕 1 +x:1 +党支部 1 +x:1 +金陵乡 1 +x:1 +半停产 1 +x:1 +农学家 1 +x:1 +粥 7 +x:7 +受贿案 1 +x:1 +羽绒 1 +x:1 +节钱 1 +x:1 +乒乒乓乓 1 +x:1 +不廉 1 +x:1 +芦草 1 +x:1 +崎岖 1 +x:1 +贪心 1 +x:1 +尧子营村 1 +x:1 +羽纱 1 +x:1 +资 121 +x:121 +解放后 1 +x:1 +伍 197 +x:197 +重彩 1 +x:1 +运动装 1 +x:1 +树冠 1 +x:1 +关城 1 +x:1 +技法 1 +x:1 +体育场 1 +x:1 +高要市 1 +x:1 +柠檬酸 1 +x:1 +联委会 1 +x:1 +阑珊 1 +x:1 +齐齐哈尔 1 +x:1 +试电笔 1 +x:1 +海岸带区 1 +x:1 +民政党 1 +x:1 +月工资 1 +x:1 +念叨 1 +x:1 +驶 80 +x:80 +减法 1 +x:1 +出麦口 1 +x:1 +博泰 1 +x:1 +梁家坡 1 +x:1 +房梁 1 +x:1 +流行病 1 +x:1 +训练馆 1 +x:1 +销钉 1 +x:1 +标准间 1 +x:1 +五花肉 1 +x:1 +援敌 1 +x:1 +皇家宫苑 1 +x:1 +恒定 1 +x:1 +不平 1 +x:1 +题 278 +x:278 +来年 1 +x:1 +不幸 1 +x:1 +狂躁 1 +x:1 +丛谈 1 +x:1 +土茯苓 1 +x:1 +沉毅 1 +x:1 +因果 1 +x:1 +联展 1 +x:1 +树兜 1 +x:1 +南回归线 1 +x:1 +工本费 1 +x:1 +保育员 1 +x:1 +软尺 1 +x:1 +樟脑丸 1 +x:1 +湖塘镇 1 +x:1 +肝肠寸断 1 +x:1 +体操队 1 +x:1 +粤东北 1 +x:1 +纤检所 1 +x:1 +打群架 1 +x:1 +树儿 1 +x:1 +长沙县 1 +x:1 +曲阳县 1 +x:1 +赫哲族 1 +x:1 +压力机 1 +x:1 +协税护费 1 +x:1 +高都镇 1 +x:1 +非主导 1 +x:1 +分镜头 1 +x:1 +对偶 1 +x:1 +运动衫 1 +x:1 +触发 1 +x:1 +运动表 1 +x:1 +重心 1 +x:1 +征议期 1 +x:1 +运动衣 1 +x:1 +养神 1 +x:1 +二等 1 +x:1 +西直门 1 +x:1 +所有物 1 +x:1 +杳 1 +x:1 +贫户 1 +x:1 +好友 1 +x:1 +后襟 1 +x:1 +歌以咏志 1 +x:1 +触及 1 +x:1 +市蔬菜办 1 +x:1 +醒来 1 +x:1 +后身 1 +x:1 +全劳动力 1 +x:1 +伙同 1 +x:1 +可嘉 1 +x:1 +气儿 1 +x:1 +貉子 1 +x:1 +采莲船 1 +x:1 +识见 1 +x:1 +治印 1 +x:1 +紫铜 1 +x:1 +套筒 1 +x:1 +集安 1 +x:1 +投机倒把 1 +x:1 +权且 1 +x:1 +交易额 1 +x:1 +逆旅跋涉 1 +x:1 +资溪县 1 +x:1 +百里 1 +x:1 +手续费 1 +x:1 +清源 1 +x:1 +对垒 1 +x:1 +蛲虫 1 +x:1 +不妥 1 +x:1 +情有独钟 1 +x:1 +战斗化 1 +x:1 +椰子肉糖 1 +x:1 +不妨 1 +x:1 +漕河 1 +x:1 +胶印纸 1 +x:1 +空难 1 +x:1 +南城根 1 +x:1 +供应粮 1 +x:1 +田径赛 1 +x:1 +不如 1 +x:1 +配种 1 +x:1 +空调器 1 +x:1 +唢呐 1 +x:1 +重塑 1 +x:1 +空隙 1 +x:1 +垮台 1 +x:1 +裂宽 1 +x:1 +不妙 1 +x:1 +集邮 1 +x:1 +二簧 1 +x:1 +巴西木 1 +x:1 +怅怅 1 +x:1 +宜当 1 +x:1 +阶梯形 1 +x:1 +速洗 1 +x:1 +赶集日 1 +x:1 +肾结石 1 +x:1 +十拿九稳 1 +x:1 +阳湖 1 +x:1 +堵源截流 1 +x:1 +神学院 1 +x:1 +不好 1 +x:1 +呢帽 1 +x:1 +稍事停留 1 +x:1 +空降 1 +x:1 +瓷厂 1 +x:1 +三缄其口 1 +x:1 +千穗谷 1 +x:1 +送话器 1 +x:1 +鸡场主 1 +x:1 +茵 8 +x:8 +自给率 1 +x:1 +吻 11 +x:11 +膳食科 1 +x:1 +不大 1 +x:1 +直接推理 1 +x:1 +情况表 1 +x:1 +出类拔萃 1 +x:1 +关停 1 +x:1 +电讯业 1 +x:1 +逆之者 1 +x:1 +联程票 1 +x:1 +芦蒿 1 +x:1 +廊桥遗梦 1 +x:1 +忽明忽暗 1 +x:1 +来头 1 +x:1 +摘译 1 +x:1 +声震寰宇 1 +x:1 +二类 1 +x:1 +空防 1 +x:1 +广兴镇 1 +x:1 +本格拉 1 +x:1 +棋盘 1 +x:1 +巫峡镇 1 +x:1 +套管 1 +x:1 +米兰队 1 +x:1 +不复 1 +x:1 +孤旅 1 +x:1 +拉伸形变 1 +x:1 +娱乐场 1 +x:1 +不外 1 +x:1 +后刘乡 1 +x:1 +外文系 1 +x:1 +空阔 1 +x:1 +对坐 1 +x:1 +不够 1 +x:1 +狐朋狗友 1 +x:1 +将息 1 +x:1 +重大 1 +x:1 +地中海 1 +x:1 +山山水水 1 +x:1 +解放前 1 +x:1 +众寡悬殊 1 +x:1 +曲项 1 +x:1 +巴格达城 1 +x:1 +后边 1 +x:1 +治污 1 +x:1 +横穿 1 +x:1 +黄陂县 1 +x:1 +气温 1 +x:1 +坚定性 1 +x:1 +安魂 1 +x:1 +语义学 1 +x:1 +关内 1 +x:1 +含糊其辞 1 +x:1 +后辈 1 +x:1 +博古通今 1 +x:1 +藏医院 1 +x:1 +横空 1 +x:1 +娱乐园 1 +x:1 +重复 1 +x:1 +位于 1 +x:1 +亭 11 +x:11 +甲状旁腺 1 +x:1 +售书量 1 +x:1 +沿革 1 +x:1 +家竹箐 1 +x:1 +权位 1 +x:1 +帐外帐 1 +x:1 +愁事 1 +x:1 +大杂烩 1 +x:1 +愁云 1 +x:1 +枪支 1 +x:1 +乌兰诺娃 1 +x:1 +玻璃球 1 +x:1 +农电站 1 +x:1 +水利处 1 +x:1 +圣哲 1 +x:1 +解放初 1 +x:1 +半文盲 1 +x:1 +阳澄 1 +x:1 +清溪 1 +x:1 +戒绝 1 +x:1 +绘影绘声 1 +x:1 +试验段 1 +x:1 +后进 1 +x:1 +型心 1 +x:1 +钢丝 1 +x:1 +小气 1 +x:1 +调解国 1 +x:1 +霜寒 1 +x:1 +小注 1 +x:1 +利润额 1 +x:1 +督查 1 +x:1 +碎 50 +x:50 +捐建者 1 +x:1 +你家 1 +x:1 +啤酒杯 1 +x:1 +新店 1 +x:1 +拗不过 1 +x:1 +贪奢 1 +x:1 +树坑 1 +x:1 +玻璃瓶 1 +x:1 +亦然 1 +x:1 +治法 1 +x:1 +看风使舵 1 +x:1 +巴蓬式 1 +x:1 +气象卫星 1 +x:1 +铸币局 1 +x:1 +血肉相连 1 +x:1 +德班港 1 +x:1 +若无其事 1 +x:1 +平角 1 +x:1 +精神化 1 +x:1 +质因数 1 +x:1 +前置性 1 +x:1 +圣周 1 +x:1 +誓愿 1 +x:1 +战斗力 1 +x:1 +后轮 1 +x:1 +治治 1 +x:1 +当金山 1 +x:1 +不堪 1 +x:1 +自学 1 +x:1 +固疾 1 +x:1 +教育为本 1 +x:1 +愁丝 1 +x:1 +瓷勺 1 +x:1 +传讯台 1 +x:1 +气滞 1 +x:1 +打砸抢 1 +x:1 +绢 4 +x:4 +霜害 1 +x:1 +贪多 1 +x:1 +治沙 1 +x:1 +东山镇 1 +x:1 +绲边 1 +x:1 +托呼秋山 1 +x:1 +压力感 1 +x:1 +养鸡业 1 +x:1 +享有 1 +x:1 +宁连路 1 +x:1 +解难 1 +x:1 +大同世界 1 +x:1 +垂垂老矣 1 +x:1 +二级 1 +x:1 +蜜桔 1 +x:1 +联姻 1 +x:1 +歌乐舞 1 +x:1 +宜川 1 +x:1 +旱涝 1 +x:1 +带头雁 1 +x:1 +阳泉 1 +x:1 +情缘 1 +x:1 +狠心狼 1 +x:1 +曾孙女 1 +x:1 +岸防 1 +x:1 +二线 1 +x:1 +解放党 1 +x:1 +万里迢迢 1 +x:1 +羡 1 +x:1 +安顺 1 +x:1 +堤 48 +x:48 +登记书 1 +x:1 +可否 1 +x:1 +弓子 1 +x:1 +期望值 1 +x:1 +高密镇 1 +x:1 +套票 1 +x:1 +对喝 1 +x:1 +炎帝 1 +x:1 +港北区 1 +x:1 +信誉者 1 +x:1 +拉玛四路 1 +x:1 +寒酸气 1 +x:1 +刚石 1 +x:1 +数理学部 1 +x:1 +喀什 1 +x:1 +达标户 1 +x:1 +阳沟 1 +x:1 +库纳 1 +x:1 +影帝 1 +x:1 +妙高台 1 +x:1 +大作家 1 +x:1 +来客 1 +x:1 +单人舞 1 +x:1 +来宾 1 +x:1 +保送 1 +x:1 +恰到好处 1 +x:1 +开车 1 +x:1 +不容 1 +x:1 +小本生意 1 +x:1 +死结 1 +x:1 +来安 1 +x:1 +标准速 1 +x:1 +白台山 1 +x:1 +补救 1 +x:1 +二十四史 1 +x:1 +的哥 1 +x:1 +不安 1 +x:1 +维护者 1 +x:1 +供应线 1 +x:1 +莲子粥 1 +x:1 +劣作 1 +x:1 +不宜 1 +x:1 +煤饼炉 1 +x:1 +好汉 1 +x:1 +锐敏 1 +x:1 +不定 1 +x:1 +阳江 1 +x:1 +竞艳图 1 +x:1 +起始 1 +x:1 +套种 1 +x:1 +不省人事 1 +x:1 +广播线 1 +x:1 +决赛圈 1 +x:1 +腓骨 1 +x:1 +歧口 1 +x:1 +尘烟 1 +x:1 +贪婪 1 +x:1 +对唱 1 +x:1 +希伯伦 1 +x:1 +圣地 1 +x:1 +关切 1 +x:1 +计程车 1 +x:1 +春卷皮 1 +x:1 +拂面 1 +x:1 +养老院 1 +x:1 +音标 1 +x:1 +认同式 1 +x:1 +不情之请 1 +x:1 +不孕 1 +x:1 +简言之 1 +x:1 +▲ 114 +x:114 +圣土 1 +x:1 +煞是 1 +x:1 +达瓦纳吉 1 +x:1 +黄山新村 1 +x:1 +喜悦队 1 +x:1 +销量 1 +x:1 +阳气 1 +x:1 +化害为利 1 +x:1 +冗繁 1 +x:1 +排子车 1 +x:1 +联大 1 +x:1 +大起大落 1 +x:1 +将才 1 +x:1 +金胜村 1 +x:1 +好法 1 +x:1 +仪陇 1 +x:1 +浮雕像 1 +x:1 +白庙乡 1 +x:1 +赏识 1 +x:1 +竹枝词 1 +x:1 +忧思录 1 +x:1 +圣坛 1 +x:1 +蛰 1 +x:1 +囊中物 1 +x:1 +梅花节 1 +x:1 +头顶部 1 +x:1 +千里鹅毛 1 +x:1 +岁 2433 +x:2433 +空门 1 +x:1 +认同度 1 +x:1 +娱乐品 1 +x:1 +预制构件 1 +x:1 +势能 1 +x:1 +固氮菌 1 +x:1 +邕 2 +x:2 +鼠穴 1 +x:1 +救火队员 1 +x:1 +篮子 1 +x:1 +空闲 1 +x:1 +气氛 1 +x:1 +连体儿 1 +x:1 +年复一年 1 +x:1 +苏伊玛 1 +x:1 +督教 1 +x:1 +奋发进取 1 +x:1 +刚直 1 +x:1 +枪杆 1 +x:1 +乐游乐心 1 +x:1 +枪杀 1 +x:1 +小港 1 +x:1 +货真价实 1 +x:1 +有血有肉 1 +x:1 +蚌埠 1 +x:1 +后路 1 +x:1 +熬煎 1 +x:1 +速滑 1 +x:1 +贴金 1 +x:1 +栗子园 1 +x:1 +敏锐度 1 +x:1 +枪术 1 +x:1 +督政 1 +x:1 +樟脑 1 +x:1 +岳阳县队 1 +x:1 +破碎机 1 +x:1 +你好 1 +x:1 +东北部 1 +x:1 +贪官 1 +x:1 +摸透 1 +x:1 +引得 1 +x:1 +专修班 1 +x:1 +编撰 1 +x:1 +平米 1 +x:1 +重字 1 +x:1 +有棱有角 1 +x:1 +体育化 1 +x:1 +下不为例 1 +x:1 +浮游生物 1 +x:1 +后跟 1 +x:1 +竹 51 +x:51 +不堪设想 1 +x:1 +霜天 1 +x:1 +扣押款 1 +x:1 +分内事 1 +x:1 +后账 1 +x:1 +体育史 1 +x:1 +小号 1 +x:1 +可喜 1 +x:1 +保重 1 +x:1 +如实 1 +x:1 +冒进 1 +x:1 +粗粝 1 +x:1 +感 232 +x:232 +保释 1 +x:1 +死缓 1 +x:1 +对合 1 +x:1 +技校 1 +x:1 +堵击 1 +x:1 +宜山 1 +x:1 +全国性奖 1 +x:1 +眼珠子 1 +x:1 +北戴河 1 +x:1 +核竞赛 1 +x:1 +根雕 1 +x:1 +怜怜 1 +x:1 +儿 15 +x:15 +一潭死水 1 +x:1 +外侮内乱 1 +x:1 +皮辊棉 1 +x:1 +生猛海鲜 1 +x:1 +咚 1 +x:1 +谐戏 1 +x:1 +枪枪 1 +x:1 +内蓄力 1 +x:1 +死罪 1 +x:1 +对味 1 +x:1 +反垄断法 1 +x:1 +情结 1 +x:1 +后起 1 +x:1 +舞蹈诗 1 +x:1 +情绪 1 +x:1 +刑期 1 +x:1 +黑斑蚊 1 +x:1 +名特优新 1 +x:1 +龙舟界 1 +x:1 +愚民政策 1 +x:1 +欢笑 1 +x:1 +关卡 1 +x:1 +福居 1 +x:1 +果子酱 1 +x:1 +故土难移 1 +x:1 +发生率 1 +x:1 +阿鲁沙省 1 +x:1 +粗布 1 +x:1 +比绍 1 +x:1 +中央文件 1 +x:1 +小照 1 +x:1 +天下兴亡 1 +x:1 +湖羊 1 +x:1 +催 68 +x:68 +某个 1 +x:1 +情感 1 +x:1 +钢印 1 +x:1 +成就展 1 +x:1 +策划室 1 +x:1 +鼎足 1 +x:1 +配方 1 +x:1 +共管 1 +x:1 +权利 1 +x:1 +湖群 1 +x:1 +老虎团 1 +x:1 +情愫 1 +x:1 +愆 1 +x:1 +校服 1 +x:1 +整党 1 +x:1 +沥沥 1 +x:1 +情愿 1 +x:1 +贴身 1 +x:1 +法国史 1 +x:1 +配料 1 +x:1 +胜果 1 +x:1 +训练舱 1 +x:1 +训练舰 1 +x:1 +狂妄 1 +x:1 +巡逻哨 1 +x:1 +糖萝卜 1 +x:1 +坪石乡 1 +x:1 +锦标赛 1 +x:1 +套服 1 +x:1 +叶落归根 1 +x:1 +振兴期 1 +x:1 +泓 18 +x:18 +魔岩 1 +x:1 +证券化 1 +x:1 +穷国 1 +x:1 +粟城乡 1 +x:1 +冬运会 1 +x:1 +钢包 1 +x:1 +垭子口 1 +x:1 +受聘者 1 +x:1 +一年制 1 +x:1 +风土民情 1 +x:1 +班 283 +x:283 +交朋友 1 +x:1 +半信半疑 1 +x:1 +好片 1 +x:1 +细微处 1 +x:1 +白醋 1 +x:1 +渣滓 1 +x:1 +迎宾馆 1 +x:1 +国营企业 1 +x:1 +税制 1 +x:1 +体操赛 1 +x:1 +贱骨头 1 +x:1 +正无限 1 +x:1 +边塞诗 1 +x:1 +注水 1 +x:1 +心怵 1 +x:1 +奥什州 1 +x:1 +白蜘蛛 1 +x:1 +柳暗花明 1 +x:1 +专己者 1 +x:1 +寒酸状 1 +x:1 +养成 1 +x:1 +合家欢聚 1 +x:1 +习题册 1 +x:1 +自谋生路 1 +x:1 +戒指 1 +x:1 +权势 1 +x:1 +资江 1 +x:1 +穿射 1 +x:1 +年久月深 1 +x:1 +小楠树 1 +x:1 +蠢货 1 +x:1 +瓜子 1 +x:1 +突击团 1 +x:1 +顽痹 1 +x:1 +埋藏处 1 +x:1 +绶带鸟 1 +x:1 +侵权者 1 +x:1 +仔 8 +x:8 +颠儿 1 +x:1 +页心 1 +x:1 +百货 1 +x:1 +组合港 1 +x:1 +铁力木 1 +x:1 +钢厂 1 +x:1 +一窥全豹 1 +x:1 +淹死 1 +x:1 +顽痛 1 +x:1 +假想敌 1 +x:1 +顽症 1 +x:1 +近观 1 +x:1 +保育会 1 +x:1 +通知 1 +x:1 +条分缕析 1 +x:1 +旱獭 1 +x:1 +试用本 1 +x:1 +湿 67 +x:67 +朱古力 1 +x:1 +血压计 1 +x:1 +中核总 1 +x:1 +书记处 1 +x:1 +忘乎所以 1 +x:1 +情态 1 +x:1 +情怀 1 +x:1 +声势浩大 1 +x:1 +情思 1 +x:1 +三叠纪 1 +x:1 +堵住 1 +x:1 +半截子 1 +x:1 +小灶 1 +x:1 +位势 1 +x:1 +主办者 1 +x:1 +窝 36 +x:36 +敖包 1 +x:1 +贴边 1 +x:1 +情急 1 +x:1 +科恰班巴 1 +x:1 +白城市 1 +x:1 +踪 7 +x:7 +空话 1 +x:1 +身驱 1 +x:1 +略识之无 1 +x:1 +命根儿 1 +x:1 +钟乳石 1 +x:1 +涉嫌人 1 +x:1 +瓷业 1 +x:1 +马斯喀特 1 +x:1 +常务会 1 +x:1 +功在当代 1 +x:1 +抖威风 1 +x:1 +啤酒箱 1 +x:1 +湖绉 1 +x:1 +公用电话 1 +x:1 +美发厅 1 +x:1 +通知栏 1 +x:1 +柏 21 +x:21 +贴近 1 +x:1 +运算符 1 +x:1 +钢制 1 +x:1 +技监 1 +x:1 +空论 1 +x:1 +大道 1 +x:1 +辩护权 1 +x:1 +穿巡 1 +x:1 +消耗型 1 +x:1 +钢刀 1 +x:1 +写票处 1 +x:1 +玄学 1 +x:1 +盛衰荣辱 1 +x:1 +钉齿耙 1 +x:1 +谁家 1 +x:1 +选配 1 +x:1 +夫妻店 1 +x:1 +座谈 1 +x:1 +财富表 1 +x:1 +古仙洞 1 +x:1 +以苦为荣 1 +x:1 +配搭 1 +x:1 +错简 1 +x:1 +燃料油 1 +x:1 +独流镇 1 +x:1 +樵姑 1 +x:1 +医院 1 +x:1 +地市级 1 +x:1 +丕 1 +x:1 +降龙伏虎 1 +x:1 +雷厉风行 1 +x:1 +嚣张气焰 1 +x:1 +西藏区 1 +x:1 +好玩 1 +x:1 +瓷人 1 +x:1 +赏钱 1 +x:1 +可怜巴巴 1 +x:1 +欧 624 +x:624 +公德 1 +x:1 +垂暮之年 1 +x:1 +黄巾起义 1 +x:1 +位列 1 +x:1 +医务所 1 +x:1 +套曲 1 +x:1 +门脸房 1 +x:1 +被访问者 1 +x:1 +施工量 1 +x:1 +落拓 1 +x:1 +栅栏 1 +x:1 +立脚点 1 +x:1 +粗心 1 +x:1 +阳新县 1 +x:1 +情情 1 +x:1 +编程 1 +x:1 +登记册 1 +x:1 +差率 1 +x:1 +权变 1 +x:1 +白龙江 1 +x:1 +汇藏 1 +x:1 +好像 1 +x:1 +交感神经 1 +x:1 +我行我素 1 +x:1 +草食性 1 +x:1 +孤寒 1 +x:1 +经果林带 1 +x:1 +东岳庙 1 +x:1 +颠倒 1 +x:1 +栅格 1 +x:1 +春风化雨 1 +x:1 +追杀 1 +x:1 +露马脚 1 +x:1 +权台 1 +x:1 +新景观 1 +x:1 +顾乡屯 1 +x:1 +英吉沙县 1 +x:1 +展演团 1 +x:1 +瑟瑟 1 +x:1 +南码头路 1 +x:1 +绵阳市 1 +x:1 +蚂蜂 1 +x:1 +错码 1 +x:1 +刚毅 1 +x:1 +伊万科夫 1 +x:1 +搞法 1 +x:1 +气焰 1 +x:1 +炊事班 1 +x:1 +渣油 1 +x:1 +书刊社 1 +x:1 +断崖 1 +x:1 +崭露头角 1 +x:1 +速率 1 +x:1 +可怜虫 1 +x:1 +物理性质 1 +x:1 +坐班 1 +x:1 +服装 1 +x:1 +销账 1 +x:1 +销货 1 +x:1 +书香 1 +x:1 +舞蹈队 1 +x:1 +慈母村 1 +x:1 +双引擎 1 +x:1 +书馆 1 +x:1 +将级 1 +x:1 +忘记 1 +x:1 +神奇莫测 1 +x:1 +开山炮 1 +x:1 +漾 5 +x:5 +后部 1 +x:1 +空袭 1 +x:1 +运动量 1 +x:1 +碳酸丙烯 1 +x:1 +观象台 1 +x:1 +香菊片 1 +x:1 +酾 1 +x:1 +江汉关 1 +x:1 +马斯克林 1 +x:1 +会诊会 1 +x:1 +治穷 1 +x:1 +联营制 1 +x:1 +气煤 1 +x:1 +鲜奶费 1 +x:1 +誓约 1 +x:1 +值域 1 +x:1 +号手 1 +x:1 +近年来 1 +x:1 +规划部 1 +x:1 +登记制 1 +x:1 +金晃晃的 1 +x:1 +浑蛋 1 +x:1 +以为 1 +x:1 +炼石补天 1 +x:1 +庚申 1 +x:1 +水落管 1 +x:1 +小班 1 +x:1 +睥睨 1 +x:1 +关东 1 +x:1 +下笔成章 1 +x:1 +缉私艇 1 +x:1 +长三火箭 1 +x:1 +有生力量 1 +x:1 +功德无量 1 +x:1 +团代会 1 +x:1 +校方 1 +x:1 +安危祸福 1 +x:1 +吊唁 1 +x:1 +传播者 1 +x:1 +如期 1 +x:1 +交汇处 1 +x:1 +后退 1 +x:1 +两用车 1 +x:1 +谦虚 1 +x:1 +死战 1 +x:1 +配有 1 +x:1 +警区制 1 +x:1 +刚正 1 +x:1 +教职工 1 +x:1 +压根儿 1 +x:1 +关中 1 +x:1 +治贫 1 +x:1 +天才 1 +x:1 +重机 1 +x:1 +二战 1 +x:1 +敌营房 1 +x:1 +颠狂 1 +x:1 +库房 1 +x:1 +顽石 1 +x:1 +农用地 1 +x:1 +坦承 1 +x:1 +死扣 1 +x:1 +邵阳县 1 +x:1 +老太太 1 +x:1 +尘沙 1 +x:1 +关乎 1 +x:1 +生物圈 1 +x:1 +原主 1 +x:1 +宁芜 1 +x:1 +蚂蟥 1 +x:1 +二手 1 +x:1 +昆剧热 1 +x:1 +果园主 1 +x:1 +校旗 1 +x:1 +宗谅 1 +x:1 +知名度 1 +x:1 +得大自在 1 +x:1 +下莱茵省 1 +x:1 +断鸿声 1 +x:1 +绢画 1 +x:1 +登记卡 1 +x:1 +坦荡 1 +x:1 +玻璃橱 1 +x:1 +祖居地 1 +x:1 +通路率 1 +x:1 +编磬 1 +x:1 +斥骂 1 +x:1 +献技 1 +x:1 +宗谱 1 +x:1 +白送 1 +x:1 +三点钟 1 +x:1 +盗窃罪 1 +x:1 +歧义 1 +x:1 +进口商品 1 +x:1 +肾结核 1 +x:1 +夜不闭户 1 +x:1 +纂喜庐 1 +x:1 +母族国 1 +x:1 +额角 1 +x:1 +挤挤 1 +x:1 +待考 1 +x:1 +湖岸 1 +x:1 +顽癣 1 +x:1 +谣诼 1 +x:1 +微软科学 1 +x:1 +奏乐 1 +x:1 +保费 1 +x:1 +自由职业 1 +x:1 +铲运车 1 +x:1 +体育会 1 +x:1 +唯其如此 1 +x:1 +保质 1 +x:1 +债权者 1 +x:1 +异体字 1 +x:1 +蚂蚁 1 +x:1 +览胜 1 +x:1 +晾干 1 +x:1 +拖斗 1 +x:1 +坐牢 1 +x:1 +花生棵 1 +x:1 +碾子山区 1 +x:1 +劣势 1 +x:1 +夏洛特 1 +x:1 +顽皮 1 +x:1 +座垫 1 +x:1 +转祸为福 1 +x:1 +敌顽 1 +x:1 +邮政司 1 +x:1 +滑稽戏 1 +x:1 +贴费 1 +x:1 +情报 1 +x:1 +辨 31 +x:31 +职务 1 +x:1 +雪野 1 +x:1 +唯 57 +x:57 +正话 1 +x:1 +贫穷 1 +x:1 +蚂蚱 1 +x:1 +助困生 1 +x:1 +舞蹈鞋 1 +x:1 +堰塞湖 1 +x:1 +编码 1 +x:1 +书页 1 +x:1 +医改 1 +x:1 +配景 1 +x:1 +孤童 1 +x:1 +粗线条 1 +x:1 +名声大振 1 +x:1 +精毛纺厂 1 +x:1 +表嫂 1 +x:1 +产品名 1 +x:1 +松仁 1 +x:1 +怜悯 1 +x:1 +转悠 1 +x:1 +枪管 1 +x:1 +说得着 1 +x:1 +搞活 1 +x:1 +孤立 1 +x:1 +挤掉 1 +x:1 +试验田 1 +x:1 +招贤纳士 1 +x:1 +总公司 1 +x:1 +外营力 1 +x:1 +旱灾 1 +x:1 +蓄势 1 +x:1 +武侠片 1 +x:1 +泽土 1 +x:1 +质量战 1 +x:1 +升幂 1 +x:1 +运动鞋 1 +x:1 +气眼 1 +x:1 +质量日 1 +x:1 +邮电业 1 +x:1 +钢坯 1 +x:1 +测试盒 1 +x:1 +截至 1 +x:1 +严峻性 1 +x:1 +聊聊 1 +x:1 +麻药 1 +x:1 +帜 2 +x:2 +中国娃 1 +x:1 +欢情 1 +x:1 +后隋 1 +x:1 +奴役 1 +x:1 +喜怒无常 1 +x:1 +读书班 1 +x:1 +多能 1 +x:1 +收 771 +x:771 +保龄球 1 +x:1 +副产品 1 +x:1 +人士界 1 +x:1 +情敌 1 +x:1 +固氮 1 +x:1 +剩余产品 1 +x:1 +巴东栎 1 +x:1 +精耕细作 1 +x:1 +桃源村 1 +x:1 +专员公署 1 +x:1 +劳动部门 1 +x:1 +可乐 1 +x:1 +宇宙射线 1 +x:1 +遮掩 1 +x:1 +泄洪 1 +x:1 +亚马孙 1 +x:1 +三角洲 1 +x:1 +秒钟 1 +x:1 +乳制品界 1 +x:1 +喷锚网 1 +x:1 +小生 1 +x:1 +多肽 1 +x:1 +新加坡 1 +x:1 +偿还期 1 +x:1 +李家峡 1 +x:1 +坐力 1 +x:1 +海河湾 1 +x:1 +秒针 1 +x:1 +治则 1 +x:1 +速生 1 +x:1 +一神教 1 +x:1 +提督 1 +x:1 +睡眠疗法 1 +x:1 +俨然 1 +x:1 +亚美 1 +x:1 +坐功 1 +x:1 +倒打一耙 1 +x:1 +斗殴案 1 +x:1 +嫌疑 1 +x:1 +雌雄同体 1 +x:1 +湖笔 1 +x:1 +质量数 1 +x:1 +卫星城 1 +x:1 +党政不分 1 +x:1 +后防 1 +x:1 +磁浮 1 +x:1 +废奴令 1 +x:1 +利比里亚 1 +x:1 +凝灰岩 1 +x:1 +袖章 1 +x:1 +新生界 1 +x:1 +言者无罪 1 +x:1 +芤 1 +x:1 +麻洋镇 1 +x:1 +溜须 1 +x:1 +谣谚 1 +x:1 +可人 1 +x:1 +治病 1 +x:1 +鳖边 1 +x:1 +交易者 1 +x:1 +可亲 1 +x:1 +穷酸气 1 +x:1 +出油率 1 +x:1 +多者 1 +x:1 +后院 1 +x:1 +解除 1 +x:1 +帝都史 1 +x:1 +财 97 +x:97 +戒条 1 +x:1 +宁蒗 1 +x:1 +战败国 1 +x:1 +千山万壑 1 +x:1 +树丫 1 +x:1 +姚家村 1 +x:1 +近路 1 +x:1 +销售一空 1 +x:1 +强硬派 1 +x:1 +治疗 1 +x:1 +朱刘镇 1 +x:1 +宇航员 1 +x:1 +脑下垂体 1 +x:1 +树丛 1 +x:1 +近距 1 +x:1 +片马镇 1 +x:1 +竟是 1 +x:1 +矢志 1 +x:1 +固沙 1 +x:1 +座像 1 +x:1 +轻重缓急 1 +x:1 +完税率 1 +x:1 +规划院 1 +x:1 +广播操 1 +x:1 +煮鹤焚琴 1 +x:1 +特色牌 1 +x:1 +农电工 1 +x:1 +编织 1 +x:1 +座儿 1 +x:1 +坦方 1 +x:1 +户政 1 +x:1 +黄淮海 1 +x:1 +成就奖 1 +x:1 +编绘 1 +x:1 +传媒界 1 +x:1 +韵文 1 +x:1 +调解书 1 +x:1 +蟹状 1 +x:1 +辰阳 1 +x:1 +老犟头 1 +x:1 +金丝席 1 +x:1 +对于 1 +x:1 +房盖 1 +x:1 +遮拦 1 +x:1 +病案室 1 +x:1 +姑舅 1 +x:1 +试验班 1 +x:1 +圆明园 1 +x:1 +空运 1 +x:1 +追授 1 +x:1 +村规民约 1 +x:1 +质协 1 +x:1 +编纂 1 +x:1 +二日 1 +x:1 +芝兰 1 +x:1 +双管齐下 1 +x:1 +火上浇油 1 +x:1 +二时 1 +x:1 +号数 1 +x:1 +泄气 1 +x:1 +可体 1 +x:1 +程派 1 +x:1 +察 25 +x:25 +咬牙 1 +x:1 +篦子 1 +x:1 +生死不渝 1 +x:1 +产油量 1 +x:1 +古文献 1 +x:1 +掩埋 1 +x:1 +遮 32 +x:32 +对付 1 +x:1 +试车场 1 +x:1 +如林 1 +x:1 +肿 15 +x:15 +服输 1 +x:1 +套房 1 +x:1 +铸造焦 1 +x:1 +对仗 1 +x:1 +空转 1 +x:1 +消耗热 1 +x:1 +校报 1 +x:1 +杜拉村 1 +x:1 +不由自主 1 +x:1 +空车 1 +x:1 +批设 1 +x:1 +花容玉貌 1 +x:1 +怪声怪气 1 +x:1 +空载 1 +x:1 +植物人 1 +x:1 +保证 1 +x:1 +彩轿 1 +x:1 +标准语 1 +x:1 +甲状腺 1 +x:1 +滴剂 1 +x:1 +直面性 1 +x:1 +卫星国 1 +x:1 +不足道 1 +x:1 +山窝窝 1 +x:1 +眼见为实 1 +x:1 +有始无终 1 +x:1 +博爱 1 +x:1 +标准论 1 +x:1 +麻花 1 +x:1 +酒吧间 1 +x:1 +蠢蠢 1 +x:1 +调解人 1 +x:1 +魔头 1 +x:1 +羽总 1 +x:1 +娱乐业 1 +x:1 +零钱 1 +x:1 +肉鸡场 1 +x:1 +交费卡 1 +x:1 +原人 1 +x:1 +追捕 1 +x:1 +袖管 1 +x:1 +旦角 1 +x:1 +在野党 1 +x:1 +博物 1 +x:1 +精武建功 1 +x:1 +交费单 1 +x:1 +欢愉 1 +x:1 +可信 1 +x:1 +岁寒堂 1 +x:1 +队里 1 +x:1 +西番莲 1 +x:1 +耍赖皮 1 +x:1 +黄石市 1 +x:1 +姑苏 1 +x:1 +死敌 1 +x:1 +运载车 1 +x:1 +趋名舍实 1 +x:1 +追悼 1 +x:1 +短讯 1 +x:1 +吃光 1 +x:1 +气田 1 +x:1 +老大难 1 +x:1 +期期艾艾 1 +x:1 +李家庄 1 +x:1 +整备 1 +x:1 +体操课 1 +x:1 +宰客风 1 +x:1 +光敏电阻 1 +x:1 +贮备 1 +x:1 +比赛期 1 +x:1 +训练营 1 +x:1 +二十三日 1 +x:1 +献 318 +x:318 +锦衣玉食 1 +x:1 +好球 1 +x:1 +八点 1 +x:1 +比赛服 1 +x:1 +天球仪 1 +x:1 +一并了之 1 +x:1 +绝对量 1 +x:1 +读后感 1 +x:1 +蝶骨 1 +x:1 +截获 1 +x:1 +须臾 1 +x:1 +只只 1 +x:1 +羊布病 1 +x:1 +指教 1 +x:1 +安克雷奇 1 +x:1 +水警区 1 +x:1 +东北角 1 +x:1 +试验点 1 +x:1 +小看 1 +x:1 +惟妙惟肖 1 +x:1 +最少 1 +x:1 +重播 1 +x:1 +拦住 1 +x:1 +扬杜抑李 1 +x:1 +堰体 1 +x:1 +捐赠款 1 +x:1 +带头 1 +x:1 +规 18 +x:18 +安之若素 1 +x:1 +遗民 1 +x:1 +乐善好施 1 +x:1 +全民性 1 +x:1 +商务区 1 +x:1 +旱田 1 +x:1 +宝鸡市 1 +x:1 +款额 1 +x:1 +追思 1 +x:1 +奸情 1 +x:1 +以水救水 1 +x:1 +燕麦地组 1 +x:1 +公务员 1 +x:1 +追怀 1 +x:1 +塔夫绸 1 +x:1 +武汉关 1 +x:1 +成化五年 1 +x:1 +小瞧 1 +x:1 +高背椅 1 +x:1 +摘采 1 +x:1 +门面话 1 +x:1 +滴滴答答 1 +x:1 +唯物史观 1 +x:1 +全村人 1 +x:1 +军医大 1 +x:1 +空谷 1 +x:1 +不冷不热 1 +x:1 +空谈 1 +x:1 +校史 1 +x:1 +吊养 1 +x:1 +粗壮 1 +x:1 +指数 1 +x:1 +吊兰 1 +x:1 +抗雪救灾 1 +x:1 +空调 1 +x:1 +循环 1 +x:1 +水貂 1 +x:1 +念书 1 +x:1 +煤财字 1 +x:1 +寡言少语 1 +x:1 +评功论赏 1 +x:1 +忠于 1 +x:1 +怨不得 1 +x:1 +座区 1 +x:1 +汽油弹 1 +x:1 +目力表 1 +x:1 +表妹 1 +x:1 +责权利 1 +x:1 +复合元音 1 +x:1 +统计表 1 +x:1 +粗大 1 +x:1 +幸福三村 1 +x:1 +踵至 1 +x:1 +阳痿 1 +x:1 +好生 1 +x:1 +读书热 1 +x:1 +俯视式 1 +x:1 +正常者 1 +x:1 +倒金字塔 1 +x:1 +丧尽天良 1 +x:1 +双球菌 1 +x:1 +气球 1 +x:1 +宇宙地镇 1 +x:1 +后门 1 +x:1 +职分 1 +x:1 +搭拉 1 +x:1 +逝者如斯 1 +x:1 +喀城 1 +x:1 +清洁煤 1 +x:1 +庄家 1 +x:1 +值勤 1 +x:1 +泳协 1 +x:1 +差生 1 +x:1 +治瘫 1 +x:1 +赏鉴 1 +x:1 +无机物 1 +x:1 +一席之地 1 +x:1 +情景 1 +x:1 +③ 40 +x:40 +征购粮 1 +x:1 +致冷器 1 +x:1 +西便门 1 +x:1 +闯荡 1 +x:1 +拉延 1 +x:1 +信筒 1 +x:1 +奴 4 +x:4 +集训 1 +x:1 +治盲 1 +x:1 +艰辛备尝 1 +x:1 +券种 1 +x:1 +耍把戏 1 +x:1 +联合村 1 +x:1 +批评 1 +x:1 +配戴 1 +x:1 +装修费 1 +x:1 +岸边 1 +x:1 +动物学 1 +x:1 +福祸 1 +x:1 +谆谆告诫 1 +x:1 +浑茫 1 +x:1 +二机 1 +x:1 +医道 1 +x:1 +圣上 1 +x:1 +治监 1 +x:1 +南山区 1 +x:1 +福祉 1 +x:1 +亦 270 +x:270 +配戏 1 +x:1 +刑罚 1 +x:1 +慎密 1 +x:1 +出售关 1 +x:1 +羽扇 1 +x:1 +路堤式 1 +x:1 +掸 3 +x:3 +竟敢 1 +x:1 +标准规 1 +x:1 +小盐 1 +x:1 +座号 1 +x:1 +保存本 1 +x:1 +二来 1 +x:1 +身份证 1 +x:1 +一企两制 1 +x:1 +气瓶 1 +x:1 +贾汪区 1 +x:1 +令人不解 1 +x:1 +宣教室 1 +x:1 +死板 1 +x:1 +驾轻就熟 1 +x:1 +纺线线 1 +x:1 +减灾 1 +x:1 +集训班 1 +x:1 +善自为之 1 +x:1 +花生油 1 +x:1 +荣 226 +x:226 +联合机 1 +x:1 +巴西籍 1 +x:1 +支农 1 +x:1 +穿孔 1 +x:1 +用材林 1 +x:1 +下功夫 1 +x:1 +阳电 1 +x:1 +保存期 1 +x:1 +码头 1 +x:1 +僧侣 1 +x:1 +村山场 1 +x:1 +感悟 1 +x:1 +言过其实 1 +x:1 +科托尔湾 1 +x:1 +路桥区 1 +x:1 +官道李村 1 +x:1 +饥寒 1 +x:1 +套餐制 1 +x:1 +话茬儿 1 +x:1 +事迹展 1 +x:1 +职称 1 +x:1 +名誉扫地 1 +x:1 +咨询 1 +x:1 +拾捡 1 +x:1 +追溯 1 +x:1 +自主化 1 +x:1 +试验组 1 +x:1 +城市群 1 +x:1 +谋职者 1 +x:1 +联保 1 +x:1 +输送量 1 +x:1 +人寿保险 1 +x:1 +干线网 1 +x:1 +输配电 1 +x:1 +相比之下 1 +x:1 +藏医药 1 +x:1 +当机立断 1 +x:1 +协调费 1 +x:1 +赣榆县 1 +x:1 +蝶形花 1 +x:1 +樱花树 1 +x:1 +错爱 1 +x:1 +空芯 1 +x:1 +鲜鲜艳艳 1 +x:1 +兆 3 +x:3 +物力 1 +x:1 +劲旅 1 +x:1 +何月 1 +x:1 +借款国 1 +x:1 +恭祝 1 +x:1 +外来语 1 +x:1 +赛车场 1 +x:1 +心灰意懒 1 +x:1 +房管 1 +x:1 +审美力 1 +x:1 +戒毒 1 +x:1 +不修边幅 1 +x:1 +单干风 1 +x:1 +新秀战 1 +x:1 +气筒 1 +x:1 +端面 1 +x:1 +二棉 1 +x:1 +明净 1 +x:1 +自攻丝刀 1 +x:1 +根脚 1 +x:1 +医龄 1 +x:1 +愁容 1 +x:1 +减去 1 +x:1 +违法必究 1 +x:1 +优伶 1 +x:1 +想想 1 +x:1 +叙及 1 +x:1 +减缩 1 +x:1 +计出万全 1 +x:1 +轮胎厂 1 +x:1 +暴殄天物 1 +x:1 +被加数 1 +x:1 +甩花者 1 +x:1 +盲区 1 +x:1 +贪婪性 1 +x:1 +穷帽 1 +x:1 +绢纺 1 +x:1 +气管 1 +x:1 +闹笑话 1 +x:1 +销毁 1 +x:1 +记事儿 1 +x:1 +张榜镇 1 +x:1 +损益表 1 +x:1 +皴 1 +x:1 +潮湿 1 +x:1 +龙水镇 1 +x:1 +比比皆是 1 +x:1 +奸滑 1 +x:1 +减缓 1 +x:1 +刚愎 1 +x:1 +释 19 +x:19 +二档 1 +x:1 +矢口 1 +x:1 +涡虫 1 +x:1 +大胡笳 1 +x:1 +骚动 1 +x:1 +你们 1 +x:1 +红专村 1 +x:1 +浑象 1 +x:1 +枪炮 1 +x:1 +集萃 1 +x:1 +地平线 1 +x:1 +谦谦 1 +x:1 +劲敌 1 +x:1 +来万塞迪 1 +x:1 +尊容 1 +x:1 +麦加 1 +x:1 +联会 1 +x:1 +灾难性 1 +x:1 +政教处 1 +x:1 +多谢 1 +x:1 +差 508 +x:508 +招商引资 1 +x:1 +安身 1 +x:1 +位子 1 +x:1 +小商 1 +x:1 +物理量 1 +x:1 +初稿 1 +x:1 +尘暴 1 +x:1 +拾掇 1 +x:1 +除暴安良 1 +x:1 +钢化玻璃 1 +x:1 +黑色素瘤 1 +x:1 +渔夫 1 +x:1 +按说 1 +x:1 +冷暖型 1 +x:1 +融资券 1 +x:1 +三角恋 1 +x:1 +吊床 1 +x:1 +车险 1 +x:1 +懒腰 1 +x:1 +捧场 1 +x:1 +集藏 1 +x:1 +好笑 1 +x:1 +养殖 1 +x:1 +泄恨 1 +x:1 +双人 1 +x:1 +横行无忌 1 +x:1 +应验 1 +x:1 +汇费 1 +x:1 +照做不误 1 +x:1 +引擎 1 +x:1 +单弦儿 1 +x:1 +辐射性 1 +x:1 +按语 1 +x:1 +端阳 1 +x:1 +热血沸腾 1 +x:1 +孤灯 1 +x:1 +登记处 1 +x:1 +猜猜 1 +x:1 +院门 1 +x:1 +湖盐 1 +x:1 +花花世界 1 +x:1 +海军蓝 1 +x:1 +叙别 1 +x:1 +破壁飞去 1 +x:1 +醒酒 1 +x:1 +突尼斯 1 +x:1 +行者 1 +x:1 +瑟缩 1 +x:1 +策马急驰 1 +x:1 +州试 1 +x:1 +物华天宝 1 +x:1 +养母 1 +x:1 +销蚀 1 +x:1 +成建制 1 +x:1 +小磨 1 +x:1 +叩击 1 +x:1 +服药 1 +x:1 +遁世 1 +x:1 +瓜分 1 +x:1 +镰刀形 1 +x:1 +请战书 1 +x:1 +权宜 1 +x:1 +联书 1 +x:1 +校友 1 +x:1 +水江头村 1 +x:1 +计算机 1 +x:1 +原盐 1 +x:1 +横行作孽 1 +x:1 +气窗 1 +x:1 +旱稻 1 +x:1 +特大型 1 +x:1 +武汉市 1 +x:1 +天朗气清 1 +x:1 +蟑螂 1 +x:1 +没门 1 +x:1 +吊带 1 +x:1 +零食 1 +x:1 +东北虎 1 +x:1 +煞煞 1 +x:1 +审美化 1 +x:1 +苒 1 +x:1 +大熊座 1 +x:1 +商务局 1 +x:1 +诱导法 1 +x:1 +全委会 1 +x:1 +安边 1 +x:1 +安达 1 +x:1 +刚性 1 +x:1 +羁押 1 +x:1 +小碟 1 +x:1 +铁门关 1 +x:1 +除尘器 1 +x:1 +大熊猫 1 +x:1 +瓜分豆剖 1 +x:1 +压案 1 +x:1 +瓜农 1 +x:1 +固执 1 +x:1 +来信 1 +x:1 +众目睽睽 1 +x:1 +如上 1 +x:1 +如下 1 +x:1 +汽油券 1 +x:1 +且末 1 +x:1 +网开三面 1 +x:1 +砥砺 1 +x:1 +如东 1 +x:1 +西方化 1 +x:1 +荣华富贵 1 +x:1 +群龙无首 1 +x:1 +动物园 1 +x:1 +五好 1 +x:1 +霞 35 +x:35 +房租 1 +x:1 +值得 1 +x:1 +盈怀充栋 1 +x:1 +疲于奔命 1 +x:1 +姊妹篇 1 +x:1 +不俗 1 +x:1 +水市乡 1 +x:1 +关键 1 +x:1 +情歌 1 +x:1 +梦幻体 1 +x:1 +进步 1 +x:1 +水利业 1 +x:1 +人欢马叫 1 +x:1 +空肠 1 +x:1 +氢氧化钙 1 +x:1 +凋零 1 +x:1 +不便 1 +x:1 +又红又专 1 +x:1 +特意 1 +x:1 +根茎 1 +x:1 +大同市 1 +x:1 +中央军委 1 +x:1 +泥沙俱下 1 +x:1 +不依 1 +x:1 +染发剂 1 +x:1 +潮河 1 +x:1 +颢 1 +x:1 +安谧 1 +x:1 +蜜糖 1 +x:1 +狂升 1 +x:1 +耳濡目染 1 +x:1 +情殇 1 +x:1 +和而不同 1 +x:1 +身量 1 +x:1 +蠕形动物 1 +x:1 +一厢情愿 1 +x:1 +试验部 1 +x:1 +老太公 1 +x:1 +啤酒店 1 +x:1 +潮汐 1 +x:1 +穷尽 1 +x:1 +淋 13 +x:13 +潮汕 1 +x:1 +位处 1 +x:1 +渣 16 +x:16 +不但 1 +x:1 +翻译者 1 +x:1 +干儿子 1 +x:1 +生闷气 1 +x:1 +不住 1 +x:1 +发电场 1 +x:1 +代售点 1 +x:1 +法律处 1 +x:1 +九五之尊 1 +x:1 +麦迪亚省 1 +x:1 +注明 1 +x:1 +大饱耳福 1 +x:1 +无贷款 1 +x:1 +不佞 1 +x:1 +悼 6 +x:6 +弯曲形变 1 +x:1 +和气生财 1 +x:1 +甲午战争 1 +x:1 +搞搞 1 +x:1 +西岗区 1 +x:1 +非同小可 1 +x:1 +如今 1 +x:1 +赐稿 1 +x:1 +叙写 1 +x:1 +自选商场 1 +x:1 +重价 1 +x:1 +特雷扑托 1 +x:1 +湖畔 1 +x:1 +穷山 1 +x:1 +下肚 1 +x:1 +潮气 1 +x:1 +重任 1 +x:1 +蝶阀 1 +x:1 +三天两头 1 +x:1 +不知所措 1 +x:1 +劲松 1 +x:1 +牌品 1 +x:1 +特困县 1 +x:1 +不休 1 +x:1 +金顶寺 1 +x:1 +追求 1 +x:1 +自信度 1 +x:1 +瘪瘪的 1 +x:1 +潮水 1 +x:1 +套汇 1 +x:1 +重伤 1 +x:1 +三等舱 1 +x:1 +长乐市 1 +x:1 +教职员 1 +x:1 +船只 1 +x:1 +来件 1 +x:1 +追涨 1 +x:1 +宝鸡县 1 +x:1 +不仅 1 +x:1 +踏遍 1 +x:1 +毫不迟疑 1 +x:1 +摇唇鼓舌 1 +x:1 +实业部 1 +x:1 +钢塔 1 +x:1 +受教育率 1 +x:1 +直播室 1 +x:1 +庄子 1 +x:1 +金榜题名 1 +x:1 +以幻写真 1 +x:1 +电子器件 1 +x:1 +妇女部长 1 +x:1 +弯弯 1 +x:1 +潮涌 1 +x:1 +安贞 1 +x:1 +独立王国 1 +x:1 +张家界 1 +x:1 +深入人心 1 +x:1 +韵母 1 +x:1 +如何 1 +x:1 +太平街镇 1 +x:1 +姗 6 +x:6 +松鼠猴 1 +x:1 +外交部 1 +x:1 +蔬菜 1 +x:1 +大元帅 1 +x:1 +警备区 1 +x:1 +防盗门 1 +x:1 +总量 1 +x:1 +特困券 1 +x:1 +赫赫有名 1 +x:1 +不予 1 +x:1 +潮润 1 +x:1 +权奸 1 +x:1 +织就 1 +x:1 +多边 1 +x:1 +借刀杀人 1 +x:1 +金钱豹 1 +x:1 +治税 1 +x:1 +三元朱村 1 +x:1 +编录 1 +x:1 +卑贱 1 +x:1 +奸淫 1 +x:1 +忠义 1 +x:1 +广播段 1 +x:1 +潮流 1 +x:1 +红五连 1 +x:1 +卢沟桥 1 +x:1 +性价比 1 +x:1 +空腹 1 +x:1 +倭瓜 1 +x:1 +保藏 1 +x:1 +自信心 1 +x:1 +事倍功半 1 +x:1 +不久 1 +x:1 +魔块 1 +x:1 +不乏 1 +x:1 +糊里糊涂 1 +x:1 +布尔诺 1 +x:1 +珍禽异兽 1 +x:1 +造船系 1 +x:1 +小站 1 +x:1 +公检法司 1 +x:1 +贸工农 1 +x:1 +莱姆病 1 +x:1 +根苗 1 +x:1 +玄武岩流 1 +x:1 +透亮 1 +x:1 +孤独 1 +x:1 +程控 1 +x:1 +公而忘私 1 +x:1 +具象 1 +x:1 +索然无味 1 +x:1 +死死 1 +x:1 +校注 1 +x:1 +小窥 1 +x:1 +呕心沥血 1 +x:1 +结构性 1 +x:1 +闯进 1 +x:1 +胜景 1 +x:1 +来临 1 +x:1 +不丹 1 +x:1 +国宾馆 1 +x:1 +度日如年 1 +x:1 +市人大办 1 +x:1 +不一 1 +x:1 +慢行 1 +x:1 +担风险 1 +x:1 +折射线 1 +x:1 +维修部 1 +x:1 +连锅端 1 +x:1 +打字机 1 +x:1 +执政党 1 +x:1 +藏龙卧虎 1 +x:1 +圣洁 1 +x:1 +白驳风 1 +x:1 +试验站 1 +x:1 +水平型 1 +x:1 +气缸 1 +x:1 +核电机组 1 +x:1 +醉 49 +x:49 +资料 1 +x:1 +壁球 1 +x:1 +蓬荜增辉 1 +x:1 +镇江籍 1 +x:1 +寄生蜂 1 +x:1 +顽军 1 +x:1 +走村串寨 1 +x:1 +调节费 1 +x:1 +邮政局 1 +x:1 +聒噪 1 +x:1 +违法性 1 +x:1 +憩 1 +x:1 +龙吟虎啸 1 +x:1 +悠然自得 1 +x:1 +贴花 1 +x:1 +倚老卖老 1 +x:1 +香花镇 1 +x:1 +死沉 1 +x:1 +中国史 1 +x:1 +从始至终 1 +x:1 +踏青 1 +x:1 +吊客 1 +x:1 +动物像 1 +x:1 +忝列 1 +x:1 +词汇学 1 +x:1 +纵隔 1 +x:1 +淅川县 1 +x:1 +贪恋 1 +x:1 +卡式炉 1 +x:1 +扶犁人 1 +x:1 +没错 1 +x:1 +漕粮 1 +x:1 +东北菜 1 +x:1 +狂喜 1 +x:1 +汽油味 1 +x:1 +外来妹 1 +x:1 +且慢 1 +x:1 +剧作 1 +x:1 +从来不 1 +x:1 +标准舞 1 +x:1 +百无禁忌 1 +x:1 +持有人 1 +x:1 +微积分 1 +x:1 +砍掉 1 +x:1 +突发性 1 +x:1 +必不可少 1 +x:1 +紧要关头 1 +x:1 +绿茸茸 1 +x:1 +刚方 1 +x:1 +弧圈球 1 +x:1 +老典型 1 +x:1 +浑然一体 1 +x:1 +保苗 1 +x:1 +学徒工 1 +x:1 +死水 1 +x:1 +集聚 1 +x:1 +针灸术 1 +x:1 +行署 1 +x:1 +象形字 1 +x:1 +琛 8 +x:8 +商务处 1 +x:1 +古虫 1 +x:1 +垃圾箱 1 +x:1 +创口 1 +x:1 +粗劣 1 +x:1 +招待费 1 +x:1 +莫测高深 1 +x:1 +感生电流 1 +x:1 +互促共荣 1 +x:1 +文史馆 1 +x:1 +医魂 1 +x:1 +空虚 1 +x:1 +红星队 1 +x:1 +嫩黄 1 +x:1 +调虎离山 1 +x:1 +供认不讳 1 +x:1 +慢车 1 +x:1 +普拉卡区 1 +x:1 +啤酒瘾 1 +x:1 +尿素霜 1 +x:1 +法国式 1 +x:1 +资方 1 +x:1 +歌舞升平 1 +x:1 +书面 1 +x:1 +捕 20 +x:20 +尹堡寨村 1 +x:1 +足球赛 1 +x:1 +特派员 1 +x:1 +逸豫 1 +x:1 +二汽 1 +x:1 +计算所 1 +x:1 +影厅 1 +x:1 +上海队 1 +x:1 +石关村 1 +x:1 +候机厅 1 +x:1 +示范点 1 +x:1 +积分榜 1 +x:1 +栾城 1 +x:1 +裸 1 +x:1 +花生果 1 +x:1 +辩证论者 1 +x:1 +宇航局 1 +x:1 +惊羡 1 +x:1 +保质保量 1 +x:1 +保荐 1 +x:1 +尤物 1 +x:1 +婚龄 1 +x:1 +销售 1 +x:1 +娄底市 1 +x:1 +水汪汪 1 +x:1 +值得一提 1 +x:1 +咸兴市 1 +x:1 +瓦楞子 1 +x:1 +体质 1 +x:1 +小米 1 +x:1 +职系 1 +x:1 +暗中摸索 1 +x:1 +效能 1 +x:1 +国难当头 1 +x:1 +灾难日 1 +x:1 +庭 22 +x:22 +集团 1 +x:1 +编目 1 +x:1 +倒车镜 1 +x:1 +质量法 1 +x:1 +身陷 1 +x:1 +高邑县 1 +x:1 +山泉水 1 +x:1 +判若 1 +x:1 +调查权 1 +x:1 +恨死 1 +x:1 +外财 1 +x:1 +汩汩淙淙 1 +x:1 +转向灯 1 +x:1 +调查村 1 +x:1 +样本股 1 +x:1 +权当 1 +x:1 +供电系统 1 +x:1 +穷寇 1 +x:1 +鼠标 1 +x:1 +院里 1 +x:1 +训练车 1 +x:1 +穷富 1 +x:1 +宜人 1 +x:1 +彬 31 +x:31 +介绍 1 +x:1 +利生队 1 +x:1 +烙画 1 +x:1 +嗲味儿 1 +x:1 +月球车 1 +x:1 +出人意表 1 +x:1 +科技亭 1 +x:1 +咸水鸭 1 +x:1 +瓜园 1 +x:1 +利润表 1 +x:1 +迁入地 1 +x:1 +踏雪 1 +x:1 +死活 1 +x:1 +袖珍 1 +x:1 +摸摸索索 1 +x:1 +网页 1 +x:1 +劲态 1 +x:1 +缗 1 +x:1 +火箭队 1 +x:1 +机票 1 +x:1 +燮 4 +x:4 +烙痕 1 +x:1 +粗厚 1 +x:1 +夜帐 1 +x:1 +囊中 1 +x:1 +大兵团 1 +x:1 +稠密 1 +x:1 +锡剧 1 +x:1 +彩礼钱 1 +x:1 +压缩 1 +x:1 +聒耳 1 +x:1 +平底鞋 1 +x:1 +毁长城者 1 +x:1 +扶贫县 1 +x:1 +固氮酶 1 +x:1 +狂呼 1 +x:1 +科技书 1 +x:1 +张目 1 +x:1 +安详 1 +x:1 +死海 1 +x:1 +琐闻 1 +x:1 +天坛路 1 +x:1 +凶杀片 1 +x:1 +特大号 1 +x:1 +书院 1 +x:1 +检查院 1 +x:1 +卷尺 1 +x:1 +狂吟 1 +x:1 +联合派 1 +x:1 +滢 1 +x:1 +狂吠 1 +x:1 +耕牛 1 +x:1 +小粉 1 +x:1 +二流 1 +x:1 +十指关 1 +x:1 +舷外 1 +x:1 +赵元任 1 +x:1 +表墒 1 +x:1 +惊天动地 1 +x:1 +炮长 1 +x:1 +功不可没 1 +x:1 +市场经济 1 +x:1 +民友联 1 +x:1 +旋转乾坤 1 +x:1 +北界城 1 +x:1 +晾台 1 +x:1 +三角村 1 +x:1 +劣弧 1 +x:1 +啤酒瓶 1 +x:1 +归谬法 1 +x:1 +发电厂 1 +x:1 +吃现成饭 1 +x:1 +治罪 1 +x:1 +配殿 1 +x:1 +澡 4 +x:4 +预置 1 +x:1 +角落处 1 +x:1 +三角板 1 +x:1 +玻璃板 1 +x:1 +备齐 1 +x:1 +可欣赏性 1 +x:1 +羽毛 1 +x:1 +北务乡 1 +x:1 +引介 1 +x:1 +错开 1 +x:1 +商务客 1 +x:1 +春合厂 1 +x:1 +玻璃杯 1 +x:1 +贫矿 1 +x:1 +樟蚕 1 +x:1 +值守 1 +x:1 +航空业者 1 +x:1 +教长 1 +x:1 +刚构 1 +x:1 +土质 1 +x:1 +栅极 1 +x:1 +二滩 1 +x:1 +刚果 1 +x:1 +红十字会 1 +x:1 +权属 1 +x:1 +菘菜 1 +x:1 +雕刻家 1 +x:1 +大嗓门 1 +x:1 +四 2873 +x:2873 +照片儿 1 +x:1 +合理率 1 +x:1 +姚山乡 1 +x:1 +果木林 1 +x:1 +减势 1 +x:1 +情潮 1 +x:1 +时间性 1 +x:1 +跳虫 1 +x:1 +寸草不生 1 +x:1 +季节工 1 +x:1 +死滞 1 +x:1 +减租 1 +x:1 +配比 1 +x:1 +肯基亚克 1 +x:1 +慢跑 1 +x:1 +足球迷 1 +x:1 +考勤机 1 +x:1 +穿刺 1 +x:1 +马利布 1 +x:1 +玻璃柜 1 +x:1 +挤满 1 +x:1 +外来货 1 +x:1 +各谋其政 1 +x:1 +电讯局 1 +x:1 +颗粒 1 +x:1 +心甘情愿 1 +x:1 +县市级 1 +x:1 +庆典性 1 +x:1 +安装 1 +x:1 +扬扬自得 1 +x:1 +改名换姓 1 +x:1 +所剩无几 1 +x:1 +阅览室 1 +x:1 +好在 1 +x:1 +百草 1 +x:1 +生物学 1 +x:1 +蓄念 1 +x:1 +气门心 1 +x:1 +金钱观 1 +x:1 +石磨盘 1 +x:1 +黑板刷 1 +x:1 +摇头 1 +x:1 +慢走 1 +x:1 +大要案 1 +x:1 +好为人师 1 +x:1 +闯关夺隘 1 +x:1 +孤石 1 +x:1 +东北腔 1 +x:1 +软组织 1 +x:1 +安文镇 1 +x:1 +县政协 1 +x:1 +大丰港 1 +x:1 +牟罗兹 1 +x:1 +煞白 1 +x:1 +保育 1 +x:1 +简单化 1 +x:1 +三角架 1 +x:1 +人心惟危 1 +x:1 +三角枫 1 +x:1 +读书社 1 +x:1 +洋菜 1 +x:1 +盗窃犯 1 +x:1 +校校 1 +x:1 +色氨酸 1 +x:1 +它 4146 +x:4146 +急慢性 1 +x:1 +出风头 1 +x:1 +凉水 1 +x:1 +贴膏 1 +x:1 +其间 1 +x:1 +校样 1 +x:1 +解析几何 1 +x:1 +引信 1 +x:1 +校格 1 +x:1 +障碍物 1 +x:1 +平底锅 1 +x:1 +谢 544 +x:544 +安西 1 +x:1 +滴壶 1 +x:1 +蒙特利尔 1 +x:1 +航模 1 +x:1 +王鸽 1 +x:1 +训练费 1 +x:1 +通畅 1 +x:1 +堂姐妹 1 +x:1 +书钉 1 +x:1 +重工业 1 +x:1 +医风 1 +x:1 +旱粮 1 +x:1 +枪眼 1 +x:1 +职级 1 +x:1 +层 427 +x:427 +核基地 1 +x:1 +症 24 +x:24 +综合化 1 +x:1 +百花 1 +x:1 +力避通常 1 +x:1 +赵体 1 +x:1 +旦荣 1 +x:1 +西充县 1 +x:1 +腔 39 +x:39 +马德里 1 +x:1 +谦让 1 +x:1 +复杂化 1 +x:1 +钢尺 1 +x:1 +探险者 1 +x:1 +潜水员 1 +x:1 +固有 1 +x:1 +座子 1 +x:1 +平均数 1 +x:1 +减磅 1 +x:1 +肌麻痹 1 +x:1 +官逼民反 1 +x:1 +扬抑取舍 1 +x:1 +兴 354 +x:354 +灌云 1 +x:1 +夜尿症 1 +x:1 +弗罗拉市 1 +x:1 +祝酒歌 1 +x:1 +骏马 1 +x:1 +为富不仁 1 +x:1 +操心费 1 +x:1 +皆 185 +x:185 +养活 1 +x:1 +百色 1 +x:1 +残历碑 1 +x:1 +可有可无 1 +x:1 +农学会 1 +x:1 +洪水位 1 +x:1 +马銮湾 1 +x:1 +祯 1 +x:1 +非道德化 1 +x:1 +内引外联 1 +x:1 +空中楼阁 1 +x:1 +粒子流 1 +x:1 +纵长 1 +x:1 +个别生 1 +x:1 +灭亡 1 +x:1 +欢歌 1 +x:1 +小组 1 +x:1 +位尊 1 +x:1 +阱 1 +x:1 +镶嵌画 1 +x:1 +小结 1 +x:1 +欢欣 1 +x:1 +缘分 1 +x:1 +动物区 1 +x:1 +郊 7 +x:7 +裁量 1 +x:1 +顽童 1 +x:1 +招工桌 1 +x:1 +百般 1 +x:1 +小纺 1 +x:1 +中毒者 1 +x:1 +库仑计 1 +x:1 +位居 1 +x:1 +贫瘠 1 +x:1 +峒中 1 +x:1 +恭维 1 +x:1 +达标率 1 +x:1 +小可怜儿 1 +x:1 +山崩地裂 1 +x:1 +劲扬 1 +x:1 +灌丛 1 +x:1 +阴险毒辣 1 +x:1 +打场 1 +x:1 +达喀尔港 1 +x:1 +出来 1 +x:1 +缉毒 1 +x:1 +星期三 1 +x:1 +仙人洞 1 +x:1 +摒除 1 +x:1 +只用 1 +x:1 +佛光山寺 1 +x:1 +吸纳 1 +x:1 +画路 1 +x:1 +电热型 1 +x:1 +编者按 1 +x:1 +脚注 1 +x:1 +轻诺寡信 1 +x:1 +案例库 1 +x:1 +葡萄球菌 1 +x:1 +随想曲 1 +x:1 +昭陵 1 +x:1 +堆肥 1 +x:1 +丁烷 1 +x:1 +谈 1395 +x:1395 +吸 57 +x:57 +自然性 1 +x:1 +奥运 1 +x:1 +作物区 1 +x:1 +一推了之 1 +x:1 +人物奖 1 +x:1 +五六时 1 +x:1 +善男信女 1 +x:1 +睹奥 1 +x:1 +第三纪 1 +x:1 +儿童文学 1 +x:1 +方针论 1 +x:1 +肥乡县 1 +x:1 +花鼓舞 1 +x:1 +知 338 +x:338 +挣开 1 +x:1 +崞县 1 +x:1 +打坐 1 +x:1 +牡丹乡 1 +x:1 +爆绽 1 +x:1 +文粹 1 +x:1 +瞻望 1 +x:1 +有勇无谋 1 +x:1 +柳林村 1 +x:1 +接触面 1 +x:1 +野种 1 +x:1 +廿 1 +x:1 +海潮坝 1 +x:1 +肚量 1 +x:1 +洋鬼子 1 +x:1 +算命热 1 +x:1 +星期二 1 +x:1 +保不定 1 +x:1 +星期五 1 +x:1 +打垮 1 +x:1 +招商会 1 +x:1 +牡丹亭 1 +x:1 +辩论赛 1 +x:1 +轮机兵 1 +x:1 +在商明政 1 +x:1 +一字千金 1 +x:1 +芬 11 +x:11 +昭雪 1 +x:1 +评析性 1 +x:1 +挥写 1 +x:1 +万年县 1 +x:1 +代跋 1 +x:1 +酒囊饭袋 1 +x:1 +碧绿 1 +x:1 +所指 1 +x:1 +语义 1 +x:1 +遗臭万年 1 +x:1 +乙酰胆碱 1 +x:1 +嚣闹 1 +x:1 +窜逃 1 +x:1 +脚气 1 +x:1 +涨跌幅 1 +x:1 +画质 1 +x:1 +律政 1 +x:1 +引文 1 +x:1 +菌草业 1 +x:1 +领导班子 1 +x:1 +浓烟 1 +x:1 +打埝 1 +x:1 +飞针走线 1 +x:1 +雪粒 1 +x:1 +似懂非懂 1 +x:1 +浓烈 1 +x:1 +说胡话 1 +x:1 +星形 1 +x:1 +淫秽 1 +x:1 +师父 1 +x:1 +粘合剂 1 +x:1 +缪 62 +x:62 +目前 1 +x:1 +大题小做 1 +x:1 +爬犁 1 +x:1 +喷灯 1 +x:1 +闲居 1 +x:1 +租售率 1 +x:1 +蛔虫 1 +x:1 +极大化值 1 +x:1 +黄红颜鸟 1 +x:1 +茶商 1 +x:1 +自甘落后 1 +x:1 +大理石 1 +x:1 +种瓜得瓜 1 +x:1 +喷灌 1 +x:1 +壮健 1 +x:1 +外科性 1 +x:1 +丈夫 1 +x:1 +伴 83 +x:83 +障碍壁 1 +x:1 +星座 1 +x:1 +猝不及防 1 +x:1 +特警队 1 +x:1 +据说 1 +x:1 +信托局 1 +x:1 +临 111 +x:111 +蛟龙得水 1 +x:1 +嗓音 1 +x:1 +一等奖 1 +x:1 +禁忌 1 +x:1 +亲情 1 +x:1 +暗中斗黑 1 +x:1 +索韦托 1 +x:1 +变法 1 +x:1 +尖团音 1 +x:1 +感遇之恩 1 +x:1 +鞋跟 1 +x:1 +非分之想 1 +x:1 +会见厅 1 +x:1 +草坪坡 1 +x:1 +自得其乐 1 +x:1 +灶 27 +x:27 +受难 1 +x:1 +抵御 1 +x:1 +银沙湾 1 +x:1 +装袋 1 +x:1 +厂际 1 +x:1 +兽药厂 1 +x:1 +受降 1 +x:1 +外商会 1 +x:1 +馆庆 1 +x:1 +柴草 1 +x:1 +倡 7 +x:7 +如钗折股 1 +x:1 +通讯集 1 +x:1 +除掉 1 +x:1 +塑料套 1 +x:1 +台资 1 +x:1 +大中学校 1 +x:1 +说话声 1 +x:1 +众生相 1 +x:1 +车管所 1 +x:1 +圣水 1 +x:1 +学生司 1 +x:1 +国粹主义 1 +x:1 +画谱 1 +x:1 +人大代表 1 +x:1 +装装 1 +x:1 +江堤 1 +x:1 +上进心 1 +x:1 +目力 1 +x:1 +母音 1 +x:1 +头等 1 +x:1 +路过者 1 +x:1 +将头 1 +x:1 +南湖渠 1 +x:1 +年表 1 +x:1 +姑 5 +x:5 +右安门 1 +x:1 +大气候 1 +x:1 +头筹 1 +x:1 +机器油 1 +x:1 +低龄 1 +x:1 +二等奖 1 +x:1 +正常 1 +x:1 +异烟肼 1 +x:1 +杂货店 1 +x:1 +嗔怪 1 +x:1 +受阻 1 +x:1 +电热器 1 +x:1 +中科研 1 +x:1 +目光 1 +x:1 +那天 1 +x:1 +赋性 1 +x:1 +黑森州 1 +x:1 +在岗 1 +x:1 +那大 1 +x:1 +攫取 1 +x:1 +卖窗 1 +x:1 +扩能 1 +x:1 +洛美市 1 +x:1 +牵挂 1 +x:1 +橡塑 1 +x:1 +嚣 1 +x:1 +节次 1 +x:1 +全身性 1 +x:1 +线描 1 +x:1 +敞亮 1 +x:1 +候鸟型 1 +x:1 +见死不救 1 +x:1 +早早儿 1 +x:1 +柴胡 1 +x:1 +诈骗罪 1 +x:1 +霄壤之别 1 +x:1 +欧洲队 1 +x:1 +借欠款 1 +x:1 +文纛 1 +x:1 +供销社 1 +x:1 +项项 1 +x:1 +恕其所短 1 +x:1 +铁道 1 +x:1 +闲弃 1 +x:1 +除恶 1 +x:1 +田亩 1 +x:1 +急救室 1 +x:1 +舍去 1 +x:1 +改选 1 +x:1 +延庆县 1 +x:1 +玩具柜 1 +x:1 +篱笆墙 1 +x:1 +好书奖 1 +x:1 +种子粮 1 +x:1 +栖身 1 +x:1 +臭 33 +x:33 +举国上下 1 +x:1 +怨气 1 +x:1 +国合 1 +x:1 +胜利者 1 +x:1 +宝珠 1 +x:1 +诊察费 1 +x:1 +坚称 1 +x:1 +车棚 1 +x:1 +塘马村 1 +x:1 +只身一人 1 +x:1 +封闭型 1 +x:1 +可鄙 1 +x:1 +画轴 1 +x:1 +民法典 1 +x:1 +曼俄村 1 +x:1 +劝业 1 +x:1 +小咬 1 +x:1 +岔 2 +x:2 +中重型 1 +x:1 +闲心 1 +x:1 +抚养权 1 +x:1 +南阳镇 1 +x:1 +幼兔 1 +x:1 +录相机 1 +x:1 +装订 1 +x:1 +虚伪性 1 +x:1 +目击 1 +x:1 +奥赛 1 +x:1 +五六月 1 +x:1 +三氯甲烷 1 +x:1 +母钟 1 +x:1 +群体 1 +x:1 +牵掣 1 +x:1 +赵州 1 +x:1 +立项权 1 +x:1 +黑豆 1 +x:1 +短缺点 1 +x:1 +明火区 1 +x:1 +坦白从宽 1 +x:1 +加农炮 1 +x:1 +出新 1 +x:1 +中山狼 1 +x:1 +江 4006 +x:4006 +连 1090 +x:1090 +势所必至 1 +x:1 +松果体 1 +x:1 +建施 1 +x:1 +认领 1 +x:1 +货郎担 1 +x:1 +群众 1 +x:1 +挥发 1 +x:1 +旗忠村 1 +x:1 +亩均 1 +x:1 +公墓 1 +x:1 +慕田峪村 1 +x:1 +梯坎 1 +x:1 +寸步难行 1 +x:1 +致命伤 1 +x:1 +摇尾乞怜 1 +x:1 +股级 1 +x:1 +中空 1 +x:1 +膜拜 1 +x:1 +团十三大 1 +x:1 +结婚照 1 +x:1 +顾村镇 1 +x:1 +漂洋过海 1 +x:1 +打听 1 +x:1 +漕河泾 1 +x:1 +统计员 1 +x:1 +焦糊状 1 +x:1 +贵溪市 1 +x:1 +记名 1 +x:1 +宛田 1 +x:1 +三统一包 1 +x:1 +出摊 1 +x:1 +单晶河 1 +x:1 +斯 83 +x:83 +真名实姓 1 +x:1 +仙人渡 1 +x:1 +塘堰 1 +x:1 +蜂箱 1 +x:1 +硬脂 1 +x:1 +纳尔乡 1 +x:1 +打的费 1 +x:1 +广种薄收 1 +x:1 +华章锦绣 1 +x:1 +喜庆 1 +x:1 +嗓门 1 +x:1 +同期性 1 +x:1 +进口权 1 +x:1 +自知者 1 +x:1 +唐庄镇 1 +x:1 +涤荡 1 +x:1 +无头告示 1 +x:1 +支柱性 1 +x:1 +凉山州 1 +x:1 +地震波 1 +x:1 +飞白 1 +x:1 +友爱 1 +x:1 +普 14 +x:14 +老鼠会 1 +x:1 +牵扯 1 +x:1 +碳氢 1 +x:1 +两性人 1 +x:1 +高官贵爵 1 +x:1 +梯地 1 +x:1 +澄明 1 +x:1 +凶信 1 +x:1 +飘缈 1 +x:1 +售完 1 +x:1 +挥动 1 +x:1 +勤谨 1 +x:1 +莲花县 1 +x:1 +属下 1 +x:1 +喜幛 1 +x:1 +留守处 1 +x:1 +实物量 1 +x:1 +险象 1 +x:1 +依顺 1 +x:1 +乐器 1 +x:1 +过街桥 1 +x:1 +玠 5 +x:5 +小算盘 1 +x:1 +桃红 1 +x:1 +荣成市 1 +x:1 +应时 1 +x:1 +对答 1 +x:1 +乐滋滋 1 +x:1 +处暑 1 +x:1 +切中肯綮 1 +x:1 +亮闪闪 1 +x:1 +市场课 1 +x:1 +丫头 1 +x:1 +舍利 1 +x:1 +领先权 1 +x:1 +红三连 1 +x:1 +青年湖 1 +x:1 +惠西 1 +x:1 +何乐之有 1 +x:1 +坚硬 1 +x:1 +欧体 1 +x:1 +嗤 1 +x:1 +荫 11 +x:11 +轻重工业 1 +x:1 +窄带 1 +x:1 +打响 1 +x:1 +击节而歌 1 +x:1 +岂能 1 +x:1 +宝物 1 +x:1 +泸县 1 +x:1 +隋代 1 +x:1 +坚美 1 +x:1 +熊岳镇 1 +x:1 +祥禽瑞兽 1 +x:1 +胡扯 1 +x:1 +银箔衬 1 +x:1 +蘑菇云 1 +x:1 +名人赛 1 +x:1 +扩股 1 +x:1 +南潮村 1 +x:1 +薏米 1 +x:1 +查缴 1 +x:1 +仙乐 1 +x:1 +恒山 1 +x:1 +星宿 1 +x:1 +画角 1 +x:1 +多如牛毛 1 +x:1 +玻璃体 1 +x:1 +啭鸣 1 +x:1 +仙乡 1 +x:1 +装货 1 +x:1 +化学部 1 +x:1 +险诈 1 +x:1 +催缴 1 +x:1 +抉剔爬梳 1 +x:1 +四月份 1 +x:1 +忆旧 1 +x:1 +卫冕者 1 +x:1 +与世长辞 1 +x:1 +打包 1 +x:1 +赛马 1 +x:1 +抵抗力 1 +x:1 +节流 1 +x:1 +固习 1 +x:1 +打印 1 +x:1 +妻离子散 1 +x:1 +雄伟 1 +x:1 +倏然 1 +x:1 +亲族 1 +x:1 +记协 1 +x:1 +氟嗪酸 1 +x:1 +阴私 1 +x:1 +年轻力壮 1 +x:1 +主人翁 1 +x:1 +实物券式 1 +x:1 +爆竹 1 +x:1 +炫耀 1 +x:1 +头绳 1 +x:1 +非同一般 1 +x:1 +仙丹 1 +x:1 +急行军 1 +x:1 +头绪 1 +x:1 +娑罗双树 1 +x:1 +陪都 1 +x:1 +目地 1 +x:1 +虹吸现象 1 +x:1 +公子 1 +x:1 +排球赛 1 +x:1 +百家饭 1 +x:1 +抒情畅怀 1 +x:1 +饰品 1 +x:1 +尽义务 1 +x:1 +溜 24 +x:24 +官吏 1 +x:1 +亲政 1 +x:1 +札 5 +x:5 +番椒 1 +x:1 +战幔 1 +x:1 +大门口 1 +x:1 +遍尝 1 +x:1 +顽匪 1 +x:1 +举目可见 1 +x:1 +邮电所 1 +x:1 +矿工图 1 +x:1 +畜牧场 1 +x:1 +黄钟大吕 1 +x:1 +记取 1 +x:1 +煜 3 +x:3 +奶品 1 +x:1 +简陋 1 +x:1 +桥殿飞虹 1 +x:1 +飞燕 1 +x:1 +星子 1 +x:1 +从而 1 +x:1 +大西洋 1 +x:1 +边防队 1 +x:1 +沃尔特湖 1 +x:1 +莲蓬头 1 +x:1 +防污 1 +x:1 +出掌 1 +x:1 +记号 1 +x:1 +纲举目张 1 +x:1 +擅自 1 +x:1 +打发 1 +x:1 +平乐县 1 +x:1 +统舱 1 +x:1 +药歌 1 +x:1 +泰 146 +x:146 +仙人 1 +x:1 +办刊者 1 +x:1 +排放口 1 +x:1 +紫砂壶 1 +x:1 +改革 1 +x:1 +八大关 1 +x:1 +省情 1 +x:1 +文科 1 +x:1 +飞瀑 1 +x:1 +文秘 1 +x:1 +哺乳动物 1 +x:1 +宣示 1 +x:1 +头羊 1 +x:1 +莴笋 1 +x:1 +伤害案 1 +x:1 +文秀 1 +x:1 +惊惊慌慌 1 +x:1 +文种 1 +x:1 +新鲜期 1 +x:1 +居高临下 1 +x:1 +推销员 1 +x:1 +寂寥 1 +x:1 +纠集 1 +x:1 +烤炉 1 +x:1 +那布 1 +x:1 +助审员 1 +x:1 +赋有 1 +x:1 +节水 1 +x:1 +渭南市 1 +x:1 +白沙县 1 +x:1 +女犯 1 +x:1 +假门假事 1 +x:1 +西风带 1 +x:1 +打分 1 +x:1 +瞎扯 1 +x:1 +舷梯 1 +x:1 +烤烤 1 +x:1 +因公殉职 1 +x:1 +湖阳市 1 +x:1 +铁青 1 +x:1 +战平 1 +x:1 +悔之晚矣 1 +x:1 +省悟 1 +x:1 +那年 1 +x:1 +祸国殃民 1 +x:1 +宝瓶 1 +x:1 +南营镇 1 +x:1 +肥东县 1 +x:1 +自然数 1 +x:1 +经纪人 1 +x:1 +那幅 1 +x:1 +卷烟厂 1 +x:1 +烤烟 1 +x:1 +厅房 1 +x:1 +雄丽 1 +x:1 +出战 1 +x:1 +脱氮菌 1 +x:1 +和平区 1 +x:1 +鱼片 1 +x:1 +主动脉 1 +x:1 +注意 1 +x:1 +记功 1 +x:1 +机要局 1 +x:1 +打劫 1 +x:1 +襁褓 1 +x:1 +打动 1 +x:1 +舍命 1 +x:1 +和平北路 1 +x:1 +周长 1 +x:1 +不了了之 1 +x:1 +犬吠里 1 +x:1 +引子 1 +x:1 +只不过 1 +x:1 +出血点 1 +x:1 +丹阳县 1 +x:1 +快快乐乐 1 +x:1 +埃斯特角 1 +x:1 +瞎抓 1 +x:1 +节油 1 +x:1 +西陡岭村 1 +x:1 +烤火 1 +x:1 +星移斗转 1 +x:1 +家庭妇女 1 +x:1 +经纪业 1 +x:1 +百年树人 1 +x:1 +仙供 1 +x:1 +简约主义 1 +x:1 +宣称 1 +x:1 +案例学 1 +x:1 +须 292 +x:292 +发育期 1 +x:1 +云云 1 +x:1 +出血热 1 +x:1 +饮水 1 +x:1 +柬 132 +x:132 +宏道镇 1 +x:1 +诗评家 1 +x:1 +头罩 1 +x:1 +躲躲闪闪 1 +x:1 +显赫一时 1 +x:1 +血仇 1 +x:1 +私房钱 1 +x:1 +画说 1 +x:1 +受重 1 +x:1 +踌躇满志 1 +x:1 +马拉维 1 +x:1 +浆汁 1 +x:1 +杂技节 1 +x:1 +熊河村 1 +x:1 +坐垫 1 +x:1 +画语 1 +x:1 +深耕细作 1 +x:1 +检察官 1 +x:1 +赛项 1 +x:1 +遇阻 1 +x:1 +桃符 1 +x:1 +文竹 1 +x:1 +丁目 1 +x:1 +说梦话 1 +x:1 +地区行 1 +x:1 +文童 1 +x:1 +玉镯 1 +x:1 +西共体 1 +x:1 +传动轮 1 +x:1 +文章 1 +x:1 +熟石灰 1 +x:1 +沃尔特河 1 +x:1 +中吨位 1 +x:1 +山晕 1 +x:1 +木背 1 +x:1 +省掉 1 +x:1 +画论 1 +x:1 +了不相涉 1 +x:1 +粘土砖 1 +x:1 +残兵败将 1 +x:1 +迷惑不解 1 +x:1 +更高一筹 1 +x:1 +常家庄 1 +x:1 +打入 1 +x:1 +昭通 1 +x:1 +喜宴 1 +x:1 +夜班 1 +x:1 +宝石 1 +x:1 +水中捞月 1 +x:1 +宅基地 1 +x:1 +学风 1 +x:1 +血亲 1 +x:1 +沧江 1 +x:1 +重灾区 1 +x:1 +大众化 1 +x:1 +险要 1 +x:1 +沉降 1 +x:1 +隐秘 1 +x:1 +遇险 1 +x:1 +释怀慰情 1 +x:1 +囡囡 1 +x:1 +喜字 1 +x:1 +多余者 1 +x:1 +中拇指 1 +x:1 +批发部 1 +x:1 +铁钉 1 +x:1 +观看席 1 +x:1 +河北团 1 +x:1 +铁钎 1 +x:1 +诽谤 1 +x:1 +庙会 1 +x:1 +无所畏惧 1 +x:1 +用地观 1 +x:1 +东弗兰德 1 +x:1 +赛风 1 +x:1 +下弦月 1 +x:1 +亲朋 1 +x:1 +大半生 1 +x:1 +粲然 1 +x:1 +爆破 1 +x:1 +遍布 1 +x:1 +撑篙 1 +x:1 +遇难 1 +x:1 +敌舰 1 +x:1 +警笛声 1 +x:1 +午饭 1 +x:1 +亲本 1 +x:1 +巴儿狗 1 +x:1 +打击 1 +x:1 +午餐 1 +x:1 +操切 1 +x:1 +偏 473 +x:473 +铁匠铺 1 +x:1 +夏管 1 +x:1 +因小失大 1 +x:1 +各有所爱 1 +x:1 +统考 1 +x:1 +装运 1 +x:1 +血丝 1 +x:1 +中晚唐 1 +x:1 +钝顶 1 +x:1 +文稿 1 +x:1 +放生 1 +x:1 +村委会 1 +x:1 +松节油 1 +x:1 +苛责 1 +x:1 +铁铲 1 +x:1 +因特网节 1 +x:1 +万古留芳 1 +x:1 +低频 1 +x:1 +纠错 1 +x:1 +糟践 1 +x:1 +无法可循 1 +x:1 +铁链 1 +x:1 +铁锁 1 +x:1 +白眼珠 1 +x:1 +出息 1 +x:1 +铁锅 1 +x:1 +铁锈 1 +x:1 +灯塔工 1 +x:1 +摄食 1 +x:1 +磕磕绊绊 1 +x:1 +腿骨 1 +x:1 +铁锚 1 +x:1 +少小离家 1 +x:1 +铁锤 1 +x:1 +吉首市 1 +x:1 +沉陨 1 +x:1 +打倒 1 +x:1 +抵押品 1 +x:1 +肤皮潦草 1 +x:1 +浓眉 1 +x:1 +断层 1 +x:1 +铁锹 1 +x:1 +山木 1 +x:1 +主产县 1 +x:1 +披衣 1 +x:1 +山村 1 +x:1 +轻车简从 1 +x:1 +绶带 1 +x:1 +浆洗 1 +x:1 +自然村 1 +x:1 +改锥 1 +x:1 +界 48 +x:48 +拦截者 1 +x:1 +铁镐 1 +x:1 +宝盆 1 +x:1 +蒜瓣儿 1 +x:1 +工作法 1 +x:1 +兵城 1 +x:1 +年幼无知 1 +x:1 +七七事变 1 +x:1 +省报 1 +x:1 +非骨干 1 +x:1 +木槌 1 +x:1 +改错 1 +x:1 +铁镰 1 +x:1 +洲镇 1 +x:1 +膨体纱 1 +x:1 +柴薪 1 +x:1 +文管 1 +x:1 +人事部门 1 +x:1 +劳模 1 +x:1 +打假 1 +x:1 +山林 1 +x:1 +通讯部 1 +x:1 +缮写 1 +x:1 +师辈 1 +x:1 +昭金 1 +x:1 +被分解数 1 +x:1 +晕头晕脑 1 +x:1 +亲昵 1 +x:1 +山架 1 +x:1 +催粮 1 +x:1 +脚步 1 +x:1 +方程式 1 +x:1 +左右中 1 +x:1 +榻榻米 1 +x:1 +辰 2 +x:2 +主产区 1 +x:1 +双氧水 1 +x:1 +功惠 1 +x:1 +擂 6 +x:6 +有法可循 1 +x:1 +飞狐 1 +x:1 +猕猴 1 +x:1 +司书 1 +x:1 +喜娘 1 +x:1 +理性主义 1 +x:1 +营造尺 1 +x:1 +财产法 1 +x:1 +淀底 1 +x:1 +形黯魂销 1 +x:1 +段落 1 +x:1 +审计法 1 +x:1 +浆液 1 +x:1 +铢 55 +x:55 +伴游 1 +x:1 +铁门 1 +x:1 +产业群 1 +x:1 +延长线 1 +x:1 +燃烧费 1 +x:1 +挑大梁 1 +x:1 +亏损面 1 +x:1 +男生 1 +x:1 +铁闸 1 +x:1 +茶制品 1 +x:1 +名人腔 1 +x:1 +男童 1 +x:1 +母鸡 1 +x:1 +跳伞 1 +x:1 +攻击力 1 +x:1 +符号 1 +x:1 +亏损额 1 +x:1 +丹阳市 1 +x:1 +喜嗜 1 +x:1 +此项 1 +x:1 +变文 1 +x:1 +预算内外 1 +x:1 +龙井 1 +x:1 +链条式 1 +x:1 +师者 1 +x:1 +无籽西瓜 1 +x:1 +行文 1 +x:1 +伞罩 1 +x:1 +浸剂 1 +x:1 +可受性 1 +x:1 +凤仙花 1 +x:1 +电教室 1 +x:1 +回传 1 +x:1 +卖点 1 +x:1 +变新 1 +x:1 +搬迁户 1 +x:1 +经学院 1 +x:1 +代用品 1 +x:1 +女装展 1 +x:1 +举举手 1 +x:1 +记录 1 +x:1 +钢轨 1 +x:1 +售假 1 +x:1 +馆址 1 +x:1 +始创 1 +x:1 +山桃 1 +x:1 +回位 1 +x:1 +偏瘫症 1 +x:1 +自行车界 1 +x:1 +讲台 1 +x:1 +深水炸弹 1 +x:1 +交界线 1 +x:1 +塘南 1 +x:1 +劳改 1 +x:1 +壮夫 1 +x:1 +翥 17 +x:17 +四海为家 1 +x:1 +名人脸 1 +x:1 +铁马 1 +x:1 +攻守同盟 1 +x:1 +壮大 1 +x:1 +银闪闪 1 +x:1 +吸盘 1 +x:1 +发展观 1 +x:1 +出演 1 +x:1 +外痔 1 +x:1 +梅开四喜 1 +x:1 +疗养 1 +x:1 +嗽叭声 1 +x:1 +开化县 1 +x:1 +烁烁 1 +x:1 +记得 1 +x:1 +宏恩 1 +x:1 +怨曲 1 +x:1 +一炮打响 1 +x:1 +缉捕 1 +x:1 +山梁 1 +x:1 +唾沫 1 +x:1 +山梅 1 +x:1 +拦路人 1 +x:1 +民法学 1 +x:1 +电热式 1 +x:1 +牛市 1 +x:1 +鱼苗 1 +x:1 +平面化 1 +x:1 +铁骨 1 +x:1 +一而再 1 +x:1 +阴电 1 +x:1 +养尊处优 1 +x:1 +五加 1 +x:1 +译文 1 +x:1 +同盟者 1 +x:1 +平射炮 1 +x:1 +步调一致 1 +x:1 +何乐不为 1 +x:1 +里约 1 +x:1 +双峰驼 1 +x:1 +号 1227 +x:1227 +技物政 1 +x:1 +变故 1 +x:1 +排沙洞 1 +x:1 +文理 1 +x:1 +后事 1 +x:1 +记忆 1 +x:1 +头版 1 +x:1 +均量 1 +x:1 +前话 1 +x:1 +渗入 1 +x:1 +限电器 1 +x:1 +那双 1 +x:1 +落伍者 1 +x:1 +枣岭乡 1 +x:1 +石油大臣 1 +x:1 +垃圾 1 +x:1 +晚婚率 1 +x:1 +回信 1 +x:1 +变数 1 +x:1 +中风 1 +x:1 +母鼠 1 +x:1 +上场门 1 +x:1 +均速 1 +x:1 +男篮 1 +x:1 +沿江路 1 +x:1 +碧眼 1 +x:1 +零售价 1 +x:1 +家前屋后 1 +x:1 +建设乡 1 +x:1 +拟声词 1 +x:1 +婆家人 1 +x:1 +果仁 1 +x:1 +浸印 1 +x:1 +可复性 1 +x:1 +缉拿 1 +x:1 +干事长 1 +x:1 +弄巧成拙 1 +x:1 +引咎辞职 1 +x:1 +文莱队 1 +x:1 +颐老院 1 +x:1 +士多啤梨 1 +x:1 +颐养 1 +x:1 +陈列室 1 +x:1 +协会 1 +x:1 +科学主义 1 +x:1 +出港 1 +x:1 +粉丝 1 +x:1 +菇 6 +x:6 +打平 1 +x:1 +统辖 1 +x:1 +忠诚度 1 +x:1 +无论是 1 +x:1 +感染性 1 +x:1 +元/亩 1 +x:1 +山楂 1 +x:1 +出游 1 +x:1 +血流成河 1 +x:1 +小型 1 +x:1 +七里岗村 1 +x:1 +调皮 1 +x:1 +星图 1 +x:1 +好处费 1 +x:1 +公审 1 +x:1 +安国市 1 +x:1 +回乡 1 +x:1 +击 34 +x:34 +星团 1 +x:1 +家庭者 1 +x:1 +唾液 1 +x:1 +选择点 1 +x:1 +抓起 1 +x:1 +监管人 1 +x:1 +回事 1 +x:1 +册谱 1 +x:1 +撞见 1 +x:1 +低音 1 +x:1 +承德市 1 +x:1 +堡 1 +x:1 +所得税率 1 +x:1 +壮士 1 +x:1 +肆无忌惮 1 +x:1 +终盘 1 +x:1 +坐以待毙 1 +x:1 +吃吃 1 +x:1 +果乡 1 +x:1 +九霄云外 1 +x:1 +母龟 1 +x:1 +三撑峡 1 +x:1 +海鹞式 1 +x:1 +弹药箱 1 +x:1 +三育人 1 +x:1 +一季度 1 +x:1 +图片社 1 +x:1 +摄录机 1 +x:1 +果业 1 +x:1 +盗版商 1 +x:1 +宏愿 1 +x:1 +澄江 1 +x:1 +信箱 1 +x:1 +纹样 1 +x:1 +辩学 1 +x:1 +真经 1 +x:1 +文电 1 +x:1 +非进口 1 +x:1 +生火 1 +x:1 +蜂糕 1 +x:1 +不可开交 1 +x:1 +扯平 1 +x:1 +雪 401 +x:401 +坚牢 1 +x:1 +小五金店 1 +x:1 +售出 1 +x:1 +业内人士 1 +x:1 +各级 1 +x:1 +亏损饭 1 +x:1 +指骨 1 +x:1 +零售业 1 +x:1 +闲坐 1 +x:1 +封闭式 1 +x:1 +枉 13 +x:13 +发展论 1 +x:1 +群贤毕至 1 +x:1 +那儿 1 +x:1 +勇挑 1 +x:1 +除根 1 +x:1 +出浴 1 +x:1 +回黄转绿 1 +x:1 +出海 1 +x:1 +凸现 1 +x:1 +聚氨酯 1 +x:1 +赋格 1 +x:1 +胜利街 1 +x:1 +文盲 1 +x:1 +鼎足之势 1 +x:1 +午间 1 +x:1 +午门 1 +x:1 +女装 1 +x:1 +樊尧村 1 +x:1 +重振 1 +x:1 +三色堇 1 +x:1 +师范学院 1 +x:1 +饮水思源 1 +x:1 +崇尚 1 +x:1 +辩士 1 +x:1 +仪态万方 1 +x:1 +劳服 1 +x:1 +出活 1 +x:1 +形诸 1 +x:1 +区分符 1 +x:1 +亚足联 1 +x:1 +女王 1 +x:1 +九里山 1 +x:1 +珍品展 1 +x:1 +出洋 1 +x:1 +概莫能外 1 +x:1 +邈邈 1 +x:1 +绵里藏针 1 +x:1 +宇宙速度 1 +x:1 +高高的 1 +x:1 +淀区 1 +x:1 +小洞式 1 +x:1 +鱼胶 1 +x:1 +钮祜禄 1 +x:1 +风天 1 +x:1 +彩画 1 +x:1 +渗化 1 +x:1 +低产田 1 +x:1 +堂鼓 1 +x:1 +东大梁村 1 +x:1 +周口店 1 +x:1 +幼仔 1 +x:1 +页码 1 +x:1 +学委会 1 +x:1 +文登 1 +x:1 +掩目捕雀 1 +x:1 +代理费 1 +x:1 +监事 1 +x:1 +调研部 1 +x:1 +各组 1 +x:1 +硅橡胶 1 +x:1 +顿顿 1 +x:1 +渔乡 1 +x:1 +广而告之 1 +x:1 +正月初十 1 +x:1 +喷管 1 +x:1 +遗作 1 +x:1 +舒心 1 +x:1 +河口乡 1 +x:1 +海沟 1 +x:1 +制表 1 +x:1 +碧瓦 1 +x:1 +赤瓜礁 1 +x:1 +校貌 1 +x:1 +壮实 1 +x:1 +折算 1 +x:1 +付 178 +x:178 +打工 1 +x:1 +人物史 1 +x:1 +梯度 1 +x:1 +鱼肚 1 +x:1 +山地组 1 +x:1 +发情期 1 +x:1 +在所不惜 1 +x:1 +改频 1 +x:1 +绸 3 +x:3 +最好 1 +x:1 +急救包 1 +x:1 +鱼肉 1 +x:1 +廉洁风 1 +x:1 +逼上梁山 1 +x:1 +外销量 1 +x:1 +严于律己 1 +x:1 +半道 1 +x:1 +交换机 1 +x:1 +翻两番 1 +x:1 +马家坡村 1 +x:1 +鱼腮 1 +x:1 +师范 1 +x:1 +肝 20 +x:20 +馆名 1 +x:1 +制品 1 +x:1 +繁体字 1 +x:1 +幼体 1 +x:1 +鱼尾 1 +x:1 +顿首 1 +x:1 +琪 10 +x:10 +面条机 1 +x:1 +梯形 1 +x:1 +涯 10 +x:10 +墨法 1 +x:1 +乡下 1 +x:1 +车票款 1 +x:1 +谨慎 1 +x:1 +生产业 1 +x:1 +监理部 1 +x:1 +收雪车 1 +x:1 +帮扶户 1 +x:1 +庐峰 1 +x:1 +突突突 1 +x:1 +致残性 1 +x:1 +馆员 1 +x:1 +壮威 1 +x:1 +科尔特 1 +x:1 +选矿 1 +x:1 +常备军 1 +x:1 +煤耗 1 +x:1 +椰蓉 1 +x:1 +山歌 1 +x:1 +编者案 1 +x:1 +运动会 1 +x:1 +近现代化 1 +x:1 +遍及 1 +x:1 +肛门 1 +x:1 +出气 1 +x:1 +铁饼 1 +x:1 +变更 1 +x:1 +塑料厂 1 +x:1 +一年生 1 +x:1 +光合作用 1 +x:1 +近现代史 1 +x:1 +雪被 1 +x:1 +留党察看 1 +x:1 +办案费 1 +x:1 +忽忽不乐 1 +x:1 +变星 1 +x:1 +丙 3 +x:3 +小算盘儿 1 +x:1 +墨池 1 +x:1 +阴功 1 +x:1 +河沙堆 1 +x:1 +泗水河 1 +x:1 +四连版 1 +x:1 +等额选举 1 +x:1 +付账 1 +x:1 +防治 1 +x:1 +打岔 1 +x:1 +别有情趣 1 +x:1 +发电站 1 +x:1 +脚板 1 +x:1 +半部 1 +x:1 +敷衍了事 1 +x:1 +泄洪闸 1 +x:1 +墨汁 1 +x:1 +庐山 1 +x:1 +灰鲸鱼 1 +x:1 +节拍 1 +x:1 +格尔木 1 +x:1 +出没 1 +x:1 +德惠市 1 +x:1 +浦西 1 +x:1 +金银财宝 1 +x:1 +暖池区 1 +x:1 +脚本 1 +x:1 +阿雅克肖 1 +x:1 +关累镇 1 +x:1 +统购 1 +x:1 +领导人 1 +x:1 +腥气 1 +x:1 +山民 1 +x:1 +呆坐 1 +x:1 +大理站 1 +x:1 +开口杯 1 +x:1 +售后 1 +x:1 +鱼虾 1 +x:1 +乘兴而来 1 +x:1 +应时而变 1 +x:1 +有机染料 1 +x:1 +那场 1 +x:1 +塞军 1 +x:1 +相濡以沫 1 +x:1 +田东 1 +x:1 +建昌县 1 +x:1 +目录 1 +x:1 +铁鸟 1 +x:1 +研究员 1 +x:1 +从今 1 +x:1 +山水 1 +x:1 +昏沉沉 1 +x:1 +复隆镇 1 +x:1 +带工者 1 +x:1 +馆区 1 +x:1 +节支 1 +x:1 +怯头怯脑 1 +x:1 +头皮 1 +x:1 +名教授 1 +x:1 +多彩的 1 +x:1 +追光 1 +x:1 +诗碑廊 1 +x:1 +过街柳 1 +x:1 +抽风 1 +x:1 +缉查 1 +x:1 +竹园 1 +x:1 +圣水湖 1 +x:1 +卡丁车 1 +x:1 +党政工团 1 +x:1 +头盔 1 +x:1 +别针 1 +x:1 +除湿 1 +x:1 +经济法学 1 +x:1 +塘坝 1 +x:1 +超音速队 1 +x:1 +肚脐装 1 +x:1 +进口案 1 +x:1 +业余 1 +x:1 +集散地 1 +x:1 +芦沟桥 1 +x:1 +从事 1 +x:1 +己内酰胺 1 +x:1 +萨阿都 1 +x:1 +打字 1 +x:1 +里程 1 +x:1 +打孔 1 +x:1 +头目 1 +x:1 +做功 1 +x:1 +坂下村 1 +x:1 +户勤区 1 +x:1 +坨子 1 +x:1 +中条山 1 +x:1 +辂 3 +x:3 +多媒体化 1 +x:1 +绿洲学 1 +x:1 +里端 1 +x:1 +度假村 1 +x:1 +山沟 1 +x:1 +牵涉 1 +x:1 +盐霜 1 +x:1 +辙口 1 +x:1 +酿母菌 1 +x:1 +山河 1 +x:1 +飞禽 1 +x:1 +色拉油 1 +x:1 +榆林桥 1 +x:1 +壮工 1 +x:1 +山沿 1 +x:1 +国有化 1 +x:1 +公式化 1 +x:1 +用兵如神 1 +x:1 +马齿苋 1 +x:1 +文火 1 +x:1 +冒牌货 1 +x:1 +正屋 1 +x:1 +依存 1 +x:1 +翻译器 1 +x:1 +含沙量 1 +x:1 +从中 1 +x:1 +戎衣 1 +x:1 +从严 1 +x:1 +长驱直入 1 +x:1 +集流环 1 +x:1 +我辈 1 +x:1 +山泉 1 +x:1 +阻尼 1 +x:1 +进口棉 1 +x:1 +节日 1 +x:1 +感慨系之 1 +x:1 +从不 1 +x:1 +浏览 1 +x:1 +抵制 1 +x:1 +带兵人 1 +x:1 +空心砖 1 +x:1 +单科性 1 +x:1 +一则 1 +x:1 +平凉市 1 +x:1 +从业 1 +x:1 +分洪闸 1 +x:1 +枪响靶落 1 +x:1 +头癣 1 +x:1 +大特写 1 +x:1 +自个儿 1 +x:1 +行书 1 +x:1 +产业界 1 +x:1 +宏旨 1 +x:1 +赶下台 1 +x:1 +博茨瓦纳 1 +x:1 +山洞 1 +x:1 +锐 45 +x:45 +替身 1 +x:1 +侗 5 +x:5 +防渗墙 1 +x:1 +付讫 1 +x:1 +骥 13 +x:13 +油漆厂 1 +x:1 +小褂儿 1 +x:1 +形貌 1 +x:1 +贴剂 1 +x:1 +山洼 1 +x:1 +刻不容缓 1 +x:1 +强强联合 1 +x:1 +山洪 1 +x:1 +勤苦 1 +x:1 +毫米波 1 +x:1 +平面图 1 +x:1 +关系部 1 +x:1 +受骗 1 +x:1 +尖沙咀 1 +x:1 +委曲求全 1 +x:1 +遥不可及 1 +x:1 +腿部 1 +x:1 +劳总 1 +x:1 +李岗村 1 +x:1 +十进对数 1 +x:1 +宏文 1 +x:1 +商品化 1 +x:1 +钢瓶 1 +x:1 +蕻菜 1 +x:1 +照射率 1 +x:1 +子弟书 1 +x:1 +付诸 1 +x:1 +八大处 1 +x:1 +钩子 1 +x:1 +沈河区 1 +x:1 +例题 1 +x:1 +统计 1 +x:1 +唯名论 1 +x:1 +飞碟 1 +x:1 +变态 1 +x:1 +搦管恣肆 1 +x:1 +国有制 1 +x:1 +封闭墙 1 +x:1 +引来 1 +x:1 +各式各样 1 +x:1 +机要员 1 +x:1 +八大姨 1 +x:1 +钾肥厂 1 +x:1 +达科他州 1 +x:1 +无规律 1 +x:1 +倦鸟投林 1 +x:1 +激动不已 1 +x:1 +囹圄 1 +x:1 +搁置 1 +x:1 +叔母 1 +x:1 +山涧 1 +x:1 +盗走 1 +x:1 +组件 1 +x:1 +孜孜耕耘 1 +x:1 +飘然 1 +x:1 +碧玉 1 +x:1 +外电 1 +x:1 +形象 1 +x:1 +节操 1 +x:1 +圣雪绒队 1 +x:1 +浆果 1 +x:1 +雕饰 1 +x:1 +清心涤虑 1 +x:1 +乌审旗 1 +x:1 +编译程序 1 +x:1 +私有权 1 +x:1 +讲座式 1 +x:1 +油当量 1 +x:1 +漾濞 1 +x:1 +飕飕 1 +x:1 +和平宫 1 +x:1 +从优 1 +x:1 +不才 1 +x:1 +布朗运动 1 +x:1 +深入虎穴 1 +x:1 +画者 1 +x:1 +扎眼 1 +x:1 +盗贼 1 +x:1 +赛道 1 +x:1 +爆炒 1 +x:1 +别集 1 +x:1 +统裙 1 +x:1 +打头 1 +x:1 +怨恨 1 +x:1 +打夯 1 +x:1 +跏趺 1 +x:1 +关帝庙 1 +x:1 +泽宁根 1 +x:1 +康乾 1 +x:1 +节期 1 +x:1 +爱知县 1 +x:1 +排放处 1 +x:1 +木焦油 1 +x:1 +节本 1 +x:1 +退税率 1 +x:1 +操典 1 +x:1 +中心县 1 +x:1 +忘年情 1 +x:1 +羔羊 1 +x:1 +康乐 1 +x:1 +千分比 1 +x:1 +雨棚 1 +x:1 +潘溪渡 1 +x:1 +吸热 1 +x:1 +节材 1 +x:1 +见惯不惊 1 +x:1 +形迹 1 +x:1 +渔汛 1 +x:1 +交换所 1 +x:1 +学 1242 +x:1242 +山湾 1 +x:1 +栽培植物 1 +x:1 +翩 1 +x:1 +舍得 1 +x:1 +金枪鱼 1 +x:1 +吸烟 1 +x:1 +拍体 1 +x:1 +低速 1 +x:1 +抽验 1 +x:1 +堆积 1 +x:1 +闽 49 +x:49 +左云县 1 +x:1 +广为 1 +x:1 +生灵涂炭 1 +x:1 +壮心 1 +x:1 +运输日 1 +x:1 +含水云 1 +x:1 +斋饭 1 +x:1 +落英缤纷 1 +x:1 +志书 1 +x:1 +馆内 1 +x:1 +掌上舞 1 +x:1 +文牍 1 +x:1 +仙人掌 1 +x:1 +头球 1 +x:1 +壮志 1 +x:1 +抵偿 1 +x:1 +广东 1 +x:1 +陌生化 1 +x:1 +进村串户 1 +x:1 +脚扣 1 +x:1 +飞箭 1 +x:1 +益友 1 +x:1 +清心寡欲 1 +x:1 +山溪 1 +x:1 +文物 1 +x:1 +莫罗市 1 +x:1 +浓绿 1 +x:1 +单细胞 1 +x:1 +五原 1 +x:1 +软硬木 1 +x:1 +再版率 1 +x:1 +分崩离析 1 +x:1 +报关员 1 +x:1 +线路工 1 +x:1 +超然物外 1 +x:1 +望女成凰 1 +x:1 +项链 1 +x:1 +地质学家 1 +x:1 +绣像 1 +x:1 +赞歌 1 +x:1 +中长跑 1 +x:1 +堆放站 1 +x:1 +虚掩 1 +x:1 +落到实处 1 +x:1 +祁剧 1 +x:1 +抵债 1 +x:1 +变换 1 +x:1 +鸡毛 1 +x:1 +座谈会 1 +x:1 +志气 1 +x:1 +广义 1 +x:1 +冲翼艇 1 +x:1 +除法 1 +x:1 +邦交国 1 +x:1 +淡淡 1 +x:1 +煤城 1 +x:1 +后龛村 1 +x:1 +和平奖 1 +x:1 +清君侧 1 +x:1 +浓缩 1 +x:1 +指甲心儿 1 +x:1 +容态可掬 1 +x:1 +氮气 1 +x:1 +统观 1 +x:1 +梯子 1 +x:1 +青年报 1 +x:1 +头疼 1 +x:1 +僚 1 +x:1 +挥师 1 +x:1 +属国 1 +x:1 +行为 1 +x:1 +前无古人 1 +x:1 +俗尚 1 +x:1 +空域 1 +x:1 +产权法 1 +x:1 +贮水式 1 +x:1 +交流 1 +x:1 +科工贸 1 +x:1 +壮年 1 +x:1 +祁县 1 +x:1 +脚掌 1 +x:1 +受领 1 +x:1 +东丽区 1 +x:1 +筹借 1 +x:1 +党组会 1 +x:1 +灵活性 1 +x:1 +排水量 1 +x:1 +运动战 1 +x:1 +罗布大淖 1 +x:1 +出格 1 +x:1 +豺狼成性 1 +x:1 +隧 1 +x:1 +影视部 1 +x:1 +中外比 1 +x:1 +抗张强度 1 +x:1 +支系 1 +x:1 +硬账 1 +x:1 +硬货 1 +x:1 +符咒 1 +x:1 +出栏 1 +x:1 +殊死 1 +x:1 +宏构 1 +x:1 +猴皮筋儿 1 +x:1 +庞然 1 +x:1 +西坎里克 1 +x:1 +尼雅 1 +x:1 +人间相 1 +x:1 +环境日 1 +x:1 +赭黄色 1 +x:1 +走着瞧 1 +x:1 +惊慌失措 1 +x:1 +山潭 1 +x:1 +梨子树 1 +x:1 +文玩 1 +x:1 +墨梅 1 +x:1 +酿房 1 +x:1 +头生 1 +x:1 +油趸船 1 +x:1 +障子 1 +x:1 +产供销 1 +x:1 +衍生物 1 +x:1 +垂涎欲滴 1 +x:1 +鱼藤 1 +x:1 +遍地 1 +x:1 +厅棚 1 +x:1 +古义陵 1 +x:1 +变成 1 +x:1 +胜利路 1 +x:1 +撞过 1 +x:1 +破坏力 1 +x:1 +利国利民 1 +x:1 +穷追不舍 1 +x:1 +麦得克 1 +x:1 +利 270 +x:270 +勤者 1 +x:1 +巴马县 1 +x:1 +酿成 1 +x:1 +喜剧 1 +x:1 +乡科级 1 +x:1 +御笔 1 +x:1 +页 199 +x:199 +朗诵会 1 +x:1 +不成 1 +x:1 +叨登 1 +x:1 +代理行 1 +x:1 +严丝合缝 1 +x:1 +画船 1 +x:1 +武穴市 1 +x:1 +电老虎 1 +x:1 +画舫 1 +x:1 +劳技 1 +x:1 +喜忧参半 1 +x:1 +新诗史 1 +x:1 +田间管理 1 +x:1 +北孝义乡 1 +x:1 +行业 1 +x:1 +床榻 1 +x:1 +圣湖 1 +x:1 +户枢不蠹 1 +x:1 +符合 1 +x:1 +文献 1 +x:1 +除险 1 +x:1 +文法 1 +x:1 +四方脸 1 +x:1 +阄 1 +x:1 +改良 1 +x:1 +抵仗 1 +x:1 +群工 1 +x:1 +右下方 1 +x:1 +光通量 1 +x:1 +瞎眼 1 +x:1 +沉闷 1 +x:1 +方方面面 1 +x:1 +众议院 1 +x:1 +川马 1 +x:1 +香车宝马 1 +x:1 +敬请 1 +x:1 +炫 1 +x:1 +产业桥 1 +x:1 +阿科松博 1 +x:1 +催款 1 +x:1 +总汇 1 +x:1 +呵欠 1 +x:1 +贾 444 +x:444 +飘泊 1 +x:1 +新江路 1 +x:1 +兴奋剂 1 +x:1 +坚毅 1 +x:1 +小街乡 1 +x:1 +游泳界 1 +x:1 +社交圈 1 +x:1 +桐梓县 1 +x:1 +伊东市 1 +x:1 +肚脐 1 +x:1 +义责 1 +x:1 +商品业 1 +x:1 +羊倌 1 +x:1 +神秘性 1 +x:1 +查 297 +x:297 +心平气和 1 +x:1 +妞儿 1 +x:1 +生产商 1 +x:1 +文治 1 +x:1 +越挫越奋 1 +x:1 +抵京 1 +x:1 +擅长 1 +x:1 +劳累 1 +x:1 +邀功请赏 1 +x:1 +共产主义 1 +x:1 +山火 1 +x:1 +装饰 1 +x:1 +仿 27 +x:27 +球 608 +x:608 +绣花针 1 +x:1 +经商者 1 +x:1 +茂名 1 +x:1 +省界 1 +x:1 +接触眼镜 1 +x:1 +文汇 1 +x:1 +山窝地 1 +x:1 +摆阔 1 +x:1 +最低价 1 +x:1 +博得 1 +x:1 +省略 1 +x:1 +从前 1 +x:1 +支撑点 1 +x:1 +倘若 1 +x:1 +铁花 1 +x:1 +神巫 1 +x:1 +兴奋劲 1 +x:1 +山炮 1 +x:1 +校企 1 +x:1 +秆 2 +x:2 +十年浩劫 1 +x:1 +星体 1 +x:1 +旱害 1 +x:1 +大个子 1 +x:1 +叠印 1 +x:1 +飞旋 1 +x:1 +师风 1 +x:1 +回城 1 +x:1 +巴陵郡 1 +x:1 +拍击 1 +x:1 +清洁费 1 +x:1 +文水 1 +x:1 +汪塘 1 +x:1 +热火朝天 1 +x:1 +薯莨 1 +x:1 +反馈性 1 +x:1 +轰鸣声 1 +x:1 +积怨 1 +x:1 +果场 1 +x:1 +贝伦市 1 +x:1 +指针 1 +x:1 +毛兴村 1 +x:1 +获得 1 +x:1 +报告期 1 +x:1 +小账 1 +x:1 +从刑 1 +x:1 +于都 1 +x:1 +低轨 1 +x:1 +阴沟 1 +x:1 +叠加 1 +x:1 +压电效应 1 +x:1 +亲炙 1 +x:1 +财产税 1 +x:1 +预委会 1 +x:1 +挺举 1 +x:1 +换阅点 1 +x:1 +源源不断 1 +x:1 +贤台 1 +x:1 +妇女学 1 +x:1 +仙子 1 +x:1 +所得税款 1 +x:1 +亮氨酸 1 +x:1 +群峰 1 +x:1 +小集团 1 +x:1 +最低位 1 +x:1 +母蜂 1 +x:1 +墨盒 1 +x:1 +明水镇 1 +x:1 +影院 1 +x:1 +人类学系 1 +x:1 +赛车 1 +x:1 +山焦 1 +x:1 +广内 1 +x:1 +果园 1 +x:1 +馆中 1 +x:1 +究竟 1 +x:1 +敬而远之 1 +x:1 +龙城 1 +x:1 +组分 1 +x:1 +包间费 1 +x:1 +反切法 1 +x:1 +桃汛 1 +x:1 +竞放斗妍 1 +x:1 +拉网式 1 +x:1 +接济 1 +x:1 +桃江 1 +x:1 +光电效应 1 +x:1 +发展部 1 +x:1 +神秘感 1 +x:1 +学究气 1 +x:1 +梯次性 1 +x:1 +盖浇饭 1 +x:1 +组别 1 +x:1 +只说不做 1 +x:1 +世俗化 1 +x:1 +光顾 1 +x:1 +一路顺风 1 +x:1 +欧洲杯赛 1 +x:1 +群岛 1 +x:1 +均衡 1 +x:1 +恶 48 +x:48 +亲热 1 +x:1 +名教练 1 +x:1 +瓦斯灯 1 +x:1 +青年系 1 +x:1 +、 134293 +x:134293 +剪秋萝 1 +x:1 +慕田峪 1 +x:1 +音像店 1 +x:1 +写字 1 +x:1 +阿巴伊达 1 +x:1 +阴气 1 +x:1 +庙堂 1 +x:1 +悠悠 1 +x:1 +干丹省 1 +x:1 +累赘 1 +x:1 +飘洒 1 +x:1 +群山 1 +x:1 +文海 1 +x:1 +分组会 1 +x:1 +涨 48 +x:48 +群居 1 +x:1 +股民 1 +x:1 +女人岛 1 +x:1 +碧澄 1 +x:1 +飞播 1 +x:1 +厅直 1 +x:1 +孜孜 1 +x:1 +遁 3 +x:3 +小苏打 1 +x:1 +短视症 1 +x:1 +甩手掌柜 1 +x:1 +兵马俑 1 +x:1 +不象话 1 +x:1 +伊斯兰式 1 +x:1 +建校 1 +x:1 +语录 1 +x:1 +从医 1 +x:1 +可说是 1 +x:1 +知识卷 1 +x:1 +飘浮 1 +x:1 +回国 1 +x:1 +与众不同 1 +x:1 +上水井 1 +x:1 +文派 1 +x:1 +冒火 1 +x:1 +仙客 1 +x:1 +二十一年 1 +x:1 +银行部 1 +x:1 +威宁县 1 +x:1 +食茱萸 1 +x:1 +广元 1 +x:1 +从化 1 +x:1 +输出 1 +x:1 +着桩机 1 +x:1 +辽宁团 1 +x:1 +月牙湖 1 +x:1 +还施彼身 1 +x:1 +华俄 1 +x:1 +而 9891 +x:9891 +庙宇 1 +x:1 +段里 1 +x:1 +亲率 1 +x:1 +生产场 1 +x:1 +缉私 1 +x:1 +生产地 1 +x:1 +流觞曲水 1 +x:1 +出界 1 +x:1 +飞机 1 +x:1 +樟木板 1 +x:1 +译编 1 +x:1 +飘溢 1 +x:1 +迪化 1 +x:1 +弹片 1 +x:1 +只有 1 +x:1 +茶 139 +x:139 +麻山区 1 +x:1 +付钱 1 +x:1 +五年计划 1 +x:1 +高级中学 1 +x:1 +传染科 1 +x:1 +云头 1 +x:1 +参观记 1 +x:1 +云大 1 +x:1 +碧池 1 +x:1 +木桩 1 +x:1 +金鸡纳树 1 +x:1 +低谷 1 +x:1 +正电荷 1 +x:1 +低调 1 +x:1 +拍卖 1 +x:1 +西段乡 1 +x:1 +碳素 1 +x:1 +牡丹山 1 +x:1 +飞来 1 +x:1 +支撑物 1 +x:1 +满天飞 1 +x:1 +万马奔腾 1 +x:1 +中耳炎 1 +x:1 +打掩护 1 +x:1 +碧油 1 +x:1 +炫技式 1 +x:1 +果商 1 +x:1 +黄松峪乡 1 +x:1 +东营市 1 +x:1 +东里坟 1 +x:1 +中心会 1 +x:1 +接受函 1 +x:1 +音读 1 +x:1 +祁东 1 +x:1 +输入 1 +x:1 +编舞师 1 +x:1 +零售商 1 +x:1 +省督 1 +x:1 +生产型 1 +x:1 +灰 33 +x:33 +安然无恙 1 +x:1 +看护 1 +x:1 +飞架 1 +x:1 +飘渺 1 +x:1 +雄姿 1 +x:1 +濡染 1 +x:1 +名山大川 1 +x:1 +不胜枚举 1 +x:1 +吸气 1 +x:1 +男性 1 +x:1 +墨画 1 +x:1 +孤陋寡闻 1 +x:1 +在职员 1 +x:1 +祁义 1 +x:1 +仙境 1 +x:1 +碧波 1 +x:1 +电梯处 1 +x:1 +机绣 1 +x:1 +惠顾 1 +x:1 +范家梁村 1 +x:1 +岗底村 1 +x:1 +短小精悍 1 +x:1 +弟妹 1 +x:1 +随乡入乡 1 +x:1 +密码 1 +x:1 +麦饭石 1 +x:1 +二是二 1 +x:1 +既然如此 1 +x:1 +保卫局 1 +x:1 +麦尔登呢 1 +x:1 +钻心虫 1 +x:1 +肇事车 1 +x:1 +帅位 1 +x:1 +鱼饵 1 +x:1 +碧洲 1 +x:1 +达斡尔 1 +x:1 +福建省 1 +x:1 +陌生人 1 +x:1 +质询 1 +x:1 +监场 1 +x:1 +飙升 1 +x:1 +音阶 1 +x:1 +纪昌学射 1 +x:1 +棋类 1 +x:1 +只是 1 +x:1 +累进 1 +x:1 +莞籍 1 +x:1 +里数 1 +x:1 +果品 1 +x:1 +羊毛疔 1 +x:1 +广厦 1 +x:1 +里约州 1 +x:1 +浏阳 1 +x:1 +缀文 1 +x:1 +正言厉色 1 +x:1 +吸尘机 1 +x:1 +遮住 1 +x:1 +武陵区 1 +x:1 +疯 19 +x:19 +闲书 1 +x:1 +省直 1 +x:1 +结欠款 1 +x:1 +别说 1 +x:1 +山猫 1 +x:1 +看押 1 +x:1 +年发电量 1 +x:1 +低质 1 +x:1 +巫婆 1 +x:1 +山陡石峭 1 +x:1 +松溪县 1 +x:1 +藏 296 +x:296 +谢克尔 1 +x:1 +头槌 1 +x:1 +铁腕 1 +x:1 +眉高眼低 1 +x:1 +睫毛 1 +x:1 +低贱 1 +x:1 +勉勉强强 1 +x:1 +光复会 1 +x:1 +旅游区 1 +x:1 +碧浪 1 +x:1 +甘居中游 1 +x:1 +音节文字 1 +x:1 +回味 1 +x:1 +狗牯脑 1 +x:1 +上下联动 1 +x:1 +广发 1 +x:1 +诱因 1 +x:1 +精养育肥 1 +x:1 +从军 1 +x:1 +蕴含 1 +x:1 +快行道 1 +x:1 +交换网 1 +x:1 +铳伤 1 +x:1 +绣花鞋 1 +x:1 +赛跑 1 +x:1 +闸北区 1 +x:1 +大厦将倾 1 +x:1 +卷土重来 1 +x:1 +分离舱 1 +x:1 +柜组长 1 +x:1 +膜片 1 +x:1 +引导员 1 +x:1 +高桥镇 1 +x:1 +仙姑 1 +x:1 +桃源 1 +x:1 +雄壮 1 +x:1 +科利马 1 +x:1 +快译通队 1 +x:1 +重油 1 +x:1 +连丰村 1 +x:1 +秋老虎 1 +x:1 +新圩镇 1 +x:1 +擦眼而过 1 +x:1 +劳绩 1 +x:1 +医疗系 1 +x:1 +母树林 1 +x:1 +欧式 1 +x:1 +排水费 1 +x:1 +笑面虎 1 +x:1 +零售员 1 +x:1 +闲云 1 +x:1 +招商局 1 +x:1 +廉洁者 1 +x:1 +吸收光谱 1 +x:1 +英年早逝 1 +x:1 +生产国 1 +x:1 +恰帕斯 1 +x:1 +回响 1 +x:1 +洋浦港 1 +x:1 +知晓 1 +x:1 +怪里怪气 1 +x:1 +山珍 1 +x:1 +闲事 1 +x:1 +凯旋归来 1 +x:1 +头楼 1 +x:1 +五卅 1 +x:1 +广博 1 +x:1 +广南 1 +x:1 +闲人 1 +x:1 +首迎式 1 +x:1 +受让方 1 +x:1 +快餐盒 1 +x:1 +要不得 1 +x:1 +云影 1 +x:1 +劳神 1 +x:1 +番禺 1 +x:1 +散货轮 1 +x:1 +黑车 1 +x:1 +监管区 1 +x:1 +气壮如牛 1 +x:1 +彩旗猎猎 1 +x:1 +母舰 1 +x:1 +旋木雀 1 +x:1 +岛 180 +x:180 +亲疏 1 +x:1 +三塘湖 1 +x:1 +太行 1 +x:1 +空想家 1 +x:1 +申花队 1 +x:1 +扁率 1 +x:1 +写信人 1 +x:1 +里手 1 +x:1 +等价物 1 +x:1 +洑家村 1 +x:1 +胰蛋白酶 1 +x:1 +感人肺腑 1 +x:1 +治 503 +x:503 +专营 1 +x:1 +青史名垂 1 +x:1 +变种 1 +x:1 +叔父 1 +x:1 +回单 1 +x:1 +向钱看 1 +x:1 +青年科 1 +x:1 +农信联社 1 +x:1 +弹琴 1 +x:1 +回升 1 +x:1 +高能物理 1 +x:1 +出猎 1 +x:1 +遂平县 1 +x:1 +林业部长 1 +x:1 +那位 1 +x:1 +操之过急 1 +x:1 +表 147 +x:147 +乳虎 1 +x:1 +辗转 1 +x:1 +世界屋脊 1 +x:1 +墨玉 1 +x:1 +雄强 1 +x:1 +小姑 1 +x:1 +中三家镇 1 +x:1 +水电局 1 +x:1 +喂养量 1 +x:1 +钦差大臣 1 +x:1 +爱国人士 1 +x:1 +吕宋烟 1 +x:1 +建设史 1 +x:1 +离柳 1 +x:1 +被上诉人 1 +x:1 +职大 1 +x:1 +名护市 1 +x:1 +建设司 1 +x:1 +消渴病 1 +x:1 +栓 1 +x:1 +副职 1 +x:1 +何必当初 1 +x:1 +心悸 1 +x:1 +回历 1 +x:1 +文案 1 +x:1 +玉门 1 +x:1 +中路梆子 1 +x:1 +回去 1 +x:1 +小孙孙 1 +x:1 +景点费 1 +x:1 +旅游品 1 +x:1 +牟定县 1 +x:1 +亭亭玉立 1 +x:1 +眭 1 +x:1 +里拉 1 +x:1 +贯穿性 1 +x:1 +这会儿 1 +x:1 +药性气 1 +x:1 +涿县 1 +x:1 +酿祸 1 +x:1 +安华西里 1 +x:1 +如蚁附膻 1 +x:1 +监管司 1 +x:1 +撞针 1 +x:1 +名不符实 1 +x:1 +住读 1 +x:1 +股骨头 1 +x:1 +臂徽 1 +x:1 +盐湖 1 +x:1 +出现 1 +x:1 +成铁局 1 +x:1 +厂长 1 +x:1 +情深意长 1 +x:1 +半边 1 +x:1 +新安郡 1 +x:1 +跳台 1 +x:1 +果区 1 +x:1 +文核 1 +x:1 +忧伤 1 +x:1 +广告 1 +x:1 +建设厅 1 +x:1 +不甚起眼 1 +x:1 +学术部 1 +x:1 +棒儿香 1 +x:1 +上摊 1 +x:1 +防护堤 1 +x:1 +万户侯 1 +x:1 +生产值 1 +x:1 +桃树 1 +x:1 +粉剂 1 +x:1 +受苦 1 +x:1 +吸浆虫 1 +x:1 +出版 1 +x:1 +回到 1 +x:1 +只怕 1 +x:1 +鹿茸 1 +x:1 +拍合 1 +x:1 +译码 1 +x:1 +红安县 1 +x:1 +桃根 1 +x:1 +抒怀 1 +x:1 +左右岸 1 +x:1 +全始全终 1 +x:1 +画风 1 +x:1 +村支部 1 +x:1 +电影厂 1 +x:1 +雄师 1 +x:1 +电影厅 1 +x:1 +韵式 1 +x:1 +治学 1 +x:1 +发展链 1 +x:1 +球胆 1 +x:1 +千分点 1 +x:1 +习已为常 1 +x:1 +撞锁 1 +x:1 +借据 1 +x:1 +云顶岩 1 +x:1 +始发地 1 +x:1 +荤 6 +x:6 +另当别论 1 +x:1 +龙口 1 +x:1 +卖淫 1 +x:1 +母草 1 +x:1 +粉刷 1 +x:1 +阴森 1 +x:1 +欧姆 1 +x:1 +巫山 1 +x:1 +军事五项 1 +x:1 +咽喉炎 1 +x:1 +吸毒 1 +x:1 +吝啬 1 +x:1 +哀牢山系 1 +x:1 +征文栏 1 +x:1 +百家衣 1 +x:1 +低语 1 +x:1 +画页 1 +x:1 +虎背 1 +x:1 +二十八分 1 +x:1 +熘 1 +x:1 +出狱 1 +x:1 +男权 1 +x:1 +繁殖区 1 +x:1 +平行会 1 +x:1 +套近乎 1 +x:1 +组团 1 +x:1 +检修费 1 +x:1 +酵母片 1 +x:1 +介子 1 +x:1 +轻狂 1 +x:1 +洋教头 1 +x:1 +弹痕 1 +x:1 +黄刺玫 1 +x:1 +科研关 1 +x:1 +布拉格 1 +x:1 +元 9608 +x:9608 +引黄灌区 1 +x:1 +旅馆化 1 +x:1 +奶娘 1 +x:1 +湖田镇 1 +x:1 +劳碌 1 +x:1 +售奶亭 1 +x:1 +夹金山 1 +x:1 +说明文 1 +x:1 +巫峡 1 +x:1 +拍品 1 +x:1 +与民争利 1 +x:1 +手工艺品 1 +x:1 +龙卡 1 +x:1 +血崩 1 +x:1 +社情 1 +x:1 +抒情 1 +x:1 +外来工 1 +x:1 +茂兰 1 +x:1 +轱辘 1 +x:1 +猪娃 1 +x:1 +活该 1 +x:1 +丧家之犬 1 +x:1 +语境 1 +x:1 +监制 1 +x:1 +重新 1 +x:1 +大洋河 1 +x:1 +塑料件 1 +x:1 +宋集区 1 +x:1 +七色板 1 +x:1 +沈灶镇 1 +x:1 +午觉 1 +x:1 +侦察员 1 +x:1 +超高频 1 +x:1 +监利 1 +x:1 +怡养 1 +x:1 +译笔 1 +x:1 +头油 1 +x:1 +邦邦硬 1 +x:1 +一会儿 1 +x:1 +金齐园 1 +x:1 +获奖 1 +x:1 +电梯工 1 +x:1 +农牧厅 1 +x:1 +珠联璧合 1 +x:1 +电度表 1 +x:1 +代理量 1 +x:1 +痛改前非 1 +x:1 +阿通社 1 +x:1 +诱变 1 +x:1 +果农 1 +x:1 +济州道 1 +x:1 +摄要 1 +x:1 +超轻量 1 +x:1 +血库 1 +x:1 +滔天 1 +x:1 +莫不如 1 +x:1 +果决 1 +x:1 +云崖 1 +x:1 +果冻 1 +x:1 +售书 1 +x:1 +坪里 1 +x:1 +单线铁路 1 +x:1 +暖洋洋 1 +x:1 +碧桃 1 +x:1 +股比 1 +x:1 +过西镇 1 +x:1 +小行星 1 +x:1 +售予 1 +x:1 +旅游团 1 +x:1 +补课 1 +x:1 +野鼠 1 +x:1 +弥河镇 1 +x:1 +从命 1 +x:1 +退税款 1 +x:1 +焦渴 1 +x:1 +浆糊 1 +x:1 +丈人 1 +x:1 +段长 1 +x:1 +亲眷 1 +x:1 +唯有 1 +x:1 +亲眼 1 +x:1 +产权界 1 +x:1 +生产厂 1 +x:1 +画魂 1 +x:1 +半路 1 +x:1 +云巅 1 +x:1 +旨意 1 +x:1 +炮班 1 +x:1 +暗渡陈仓 1 +x:1 +见证者 1 +x:1 +体会 1 +x:1 +核查队 1 +x:1 +山盟 1 +x:1 +报摊儿 1 +x:1 +生产司 1 +x:1 +一去不返 1 +x:1 +每况愈下 1 +x:1 +人世间 1 +x:1 +跳出 1 +x:1 +座席 1 +x:1 +回击 1 +x:1 +回函 1 +x:1 +阿拉木图 1 +x:1 +果儿 1 +x:1 +鱼鲜 1 +x:1 +淘汰赛制 1 +x:1 +外高加索 1 +x:1 +修定 1 +x:1 +色粉 1 +x:1 +描眉画眼 1 +x:1 +托克逊县 1 +x:1 +预发 1 +x:1 +支脉河 1 +x:1 +售价 1 +x:1 +车斗 1 +x:1 +巫师 1 +x:1 +博士院 1 +x:1 +河口县 1 +x:1 +占优势 1 +x:1 +作 2621 +x:2621 +岳阳楼区 1 +x:1 +瀚 2 +x:2 +潭头镇 1 +x:1 +经院式 1 +x:1 +司乘人员 1 +x:1 +预备会 1 +x:1 +弹着 1 +x:1 +农网 1 +x:1 +星期天 1 +x:1 +木版 1 +x:1 +新鲜肉 1 +x:1 +云层 1 +x:1 +堂花 1 +x:1 +柴门 1 +x:1 +博尔西路 1 +x:1 +招议标 1 +x:1 +木化石 1 +x:1 +马龙 1 +x:1 +如狼似虎 1 +x:1 +欧安 1 +x:1 +矩尺 1 +x:1 +木牌 1 +x:1 +组合 1 +x:1 +摆列 1 +x:1 +涡旋 1 +x:1 +九九歌 1 +x:1 +黑龙港 1 +x:1 +旅游地 1 +x:1 +闽江口 1 +x:1 +捐助 1 +x:1 +青年站 1 +x:1 +男方 1 +x:1 +广域 1 +x:1 +增长量 1 +x:1 +辽宁厅 1 +x:1 +蓄滞洪区 1 +x:1 +摆制 1 +x:1 +劝导 1 +x:1 +龙凤 1 +x:1 +累计 1 +x:1 +反射线 1 +x:1 +切入口 1 +x:1 +秀发 1 +x:1 +飞扬 1 +x:1 +鸿雁 1 +x:1 +六七年 1 +x:1 +云峰 1 +x:1 +焚烧场 1 +x:1 +广场 1 +x:1 +瞎炮 1 +x:1 +犒劳 1 +x:1 +垒石弄 1 +x:1 +大洋洲 1 +x:1 +外汇局 1 +x:1 +匠心独运 1 +x:1 +结婚日 1 +x:1 +有利可图 1 +x:1 +统配 1 +x:1 +浓枯 1 +x:1 +锗 2 +x:2 +雄峙 1 +x:1 +骑士 1 +x:1 +节水型 1 +x:1 +受聘 1 +x:1 +供电量 1 +x:1 +节约 1 +x:1 +萨迦寺 1 +x:1 +鼓乐齐鸣 1 +x:1 +惊恐万状 1 +x:1 +说瞎话 1 +x:1 +堆积如山 1 +x:1 +商贾如云 1 +x:1 +飞抵 1 +x:1 +从商 1 +x:1 +纵火犯 1 +x:1 +文武 1 +x:1 +夏熟作物 1 +x:1 +群婚 1 +x:1 +雄峻 1 +x:1 +生产力 1 +x:1 +男男女女 1 +x:1 +纠葛 1 +x:1 +懒虫 1 +x:1 +五指山区 1 +x:1 +爱护 1 +x:1 +洋布 1 +x:1 +分秒必争 1 +x:1 +卦辞 1 +x:1 +受限 1 +x:1 +话务室 1 +x:1 +用武之地 1 +x:1 +择校生 1 +x:1 +越野跑 1 +x:1 +海豚泳 1 +x:1 +异形字 1 +x:1 +领导力 1 +x:1 +瞠目结舌 1 +x:1 +云岭 1 +x:1 +牛皮癣 1 +x:1 +加压釜 1 +x:1 +自花传粉 1 +x:1 +监发 1 +x:1 +格鲁派 1 +x:1 +足贴 1 +x:1 +眼馋 1 +x:1 +付酬 1 +x:1 +宇田 1 +x:1 +骑墙 1 +x:1 +孕穗 1 +x:1 +年检费 1 +x:1 +哗然 1 +x:1 +七机部 1 +x:1 +劝学 1 +x:1 +遍体 1 +x:1 +两证一书 1 +x:1 +坎坷多舛 1 +x:1 +宏编 1 +x:1 +轻 190 +x:190 +黔东南州 1 +x:1 +价费字 1 +x:1 +整饬一新 1 +x:1 +输导 1 +x:1 +飞洒 1 +x:1 +纠误 1 +x:1 +不得其详 1 +x:1 +农林水牧 1 +x:1 +逆命题 1 +x:1 +麦角胺 1 +x:1 +尖端放电 1 +x:1 +少白头 1 +x:1 +打伤 1 +x:1 +逝水 1 +x:1 +直来直去 1 +x:1 +打伞 1 +x:1 +赔付 1 +x:1 +和平乡 1 +x:1 +离业者 1 +x:1 +赋税 1 +x:1 +讶然于 1 +x:1 +话务员 1 +x:1 +泰山队 1 +x:1 +装配 1 +x:1 +必 248 +x:248 +调兵遣将 1 +x:1 +孟州市 1 +x:1 +回归 1 +x:1 +福建籍 1 +x:1 +输家 1 +x:1 +电梯厂 1 +x:1 +小家子气 1 +x:1 +验讫章 1 +x:1 +淫糜 1 +x:1 +一息尚存 1 +x:1 +奇缘 1 +x:1 +牛角尖 1 +x:1 +记住 1 +x:1 +十八日 1 +x:1 +定语 1 +x:1 +棋缘 1 +x:1 +金钟乡 1 +x:1 +乱砍滥伐 1 +x:1 +耿北村 1 +x:1 +中联部 1 +x:1 +旧历年 1 +x:1 +滑冰场 1 +x:1 +九里乡 1 +x:1 +打住 1 +x:1 +受辱 1 +x:1 +丹心 1 +x:1 +幼小 1 +x:1 +和盘托出 1 +x:1 +生活资料 1 +x:1 +迢迢地 1 +x:1 +改变 1 +x:1 +钢琴曲 1 +x:1 +老花镜 1 +x:1 +耦耕乡 1 +x:1 +坚持 1 +x:1 +文摘 1 +x:1 +人莫予毒 1 +x:1 +抽象 1 +x:1 +同位语 1 +x:1 +崇仁 1 +x:1 +匝 2 +x:2 +平民者 1 +x:1 +谣 3 +x:3 +崇仰 1 +x:1 +各有所求 1 +x:1 +响晴 1 +x:1 +强弱 1 +x:1 +飞涨 1 +x:1 +基性岩 1 +x:1 +多度津 1 +x:1 +坚挺 1 +x:1 +鸳鸯戏水 1 +x:1 +七扭八歪 1 +x:1 +挽 36 +x:36 +现代性 1 +x:1 +评价制 1 +x:1 +源目录 1 +x:1 +洪雅县 1 +x:1 +云县 1 +x:1 +股数 1 +x:1 +知情不举 1 +x:1 +雄厚 1 +x:1 +穗 24 +x:24 +拉耧 1 +x:1 +报纸 1 +x:1 +子坝 1 +x:1 +回忆 1 +x:1 +劝告 1 +x:1 +牡丹园 1 +x:1 +孕畜 1 +x:1 +透气 1 +x:1 +敬赠 1 +x:1 +哈丰角 1 +x:1 +楼群 1 +x:1 +代厂长 1 +x:1 +共 2278 +x:2278 +雄县 1 +x:1 +师部 1 +x:1 +工艺论典 1 +x:1 +抽调 1 +x:1 +血债 1 +x:1 +分站赛 1 +x:1 +龙年 1 +x:1 +叛逆 1 +x:1 +余波 1 +x:1 +墨绿 1 +x:1 +惊蛇入草 1 +x:1 +里潭 1 +x:1 +红小兵 1 +x:1 +回帖 1 +x:1 +血泪史 1 +x:1 +回师 1 +x:1 +仙人球 1 +x:1 +打中 1 +x:1 +少年老成 1 +x:1 +记下 1 +x:1 +庞杂 1 +x:1 +港胞 1 +x:1 +十年九旱 1 +x:1 +塔山乡 1 +x:1 +公正化 1 +x:1 +摘自 1 +x:1 +扶残济困 1 +x:1 +聊以卒岁 1 +x:1 +简讯 1 +x:1 +打下 1 +x:1 +鲜为人知 1 +x:1 +简记 1 +x:1 +别致 1 +x:1 +不尽然 1 +x:1 +农牧区 1 +x:1 +衡水市 1 +x:1 +简评 1 +x:1 +节灌 1 +x:1 +龙心 1 +x:1 +全局性 1 +x:1 +散货船 1 +x:1 +从容 1 +x:1 +兴趣班 1 +x:1 +打油诗 1 +x:1 +从宽 1 +x:1 +倾斜性 1 +x:1 +增上寺 1 +x:1 +党政军警 1 +x:1 +督察组 1 +x:1 +险隘 1 +x:1 +蝎子草 1 +x:1 +砚台 1 +x:1 +康复 1 +x:1 +四方街 1 +x:1 +生产局 1 +x:1 +零售店 1 +x:1 +宣教 1 +x:1 +输出方 1 +x:1 +桶 176 +x:176 +令人叹服 1 +x:1 +昕 9 +x:9 +双桥区 1 +x:1 +吃里爬外 1 +x:1 +由此 1 +x:1 +只求 1 +x:1 +偷逃税 1 +x:1 +坚戈 1 +x:1 +现代感 1 +x:1 +震撼力 1 +x:1 +炎黄 1 +x:1 +血光 1 +x:1 +省籍 1 +x:1 +文教 1 +x:1 +虎头崖 1 +x:1 +摸爬滚打 1 +x:1 +自助餐 1 +x:1 +广大 1 +x:1 +记事 1 +x:1 +亟待 1 +x:1 +红桥区 1 +x:1 +青中年 1 +x:1 +尤他 1 +x:1 +果干 1 +x:1 +吸服 1 +x:1 +数以万计 1 +x:1 +打井 1 +x:1 +邮电网 1 +x:1 +诬陷罪 1 +x:1 +旅游委 1 +x:1 +岔流 1 +x:1 +呵护 1 +x:1 +操神 1 +x:1 +璞 17 +x:17 +页岩石 1 +x:1 +节点 1 +x:1 +出菇率 1 +x:1 +铁证 1 +x:1 +险阻 1 +x:1 +素什锦 1 +x:1 +改订 1 +x:1 +节烈 1 +x:1 +再生棉 1 +x:1 +帮扶点 1 +x:1 +飞泉 1 +x:1 +回廊 1 +x:1 +出线 1 +x:1 +监工 1 +x:1 +记仇 1 +x:1 +师里 1 +x:1 +龙归 1 +x:1 +出纳 1 +x:1 +台风儿 1 +x:1 +飘散 1 +x:1 +厅级 1 +x:1 +大娄山脉 1 +x:1 +打仗 1 +x:1 +黑衣 1 +x:1 +濡沐 1 +x:1 +放火 1 +x:1 +外汇券 1 +x:1 +曾随 1 +x:1 +禁吸戒毒 1 +x:1 +雄劲 1 +x:1 +溧水县 1 +x:1 +幼年 1 +x:1 +杨芳乡 1 +x:1 +凶器 1 +x:1 +脚盆 1 +x:1 +果川 1 +x:1 +古今合璧 1 +x:1 +樱草 1 +x:1 +良法 1 +x:1 +同勉会 1 +x:1 +阴极 1 +x:1 +龙岩 1 +x:1 +蓄洪 1 +x:1 +证照牌 1 +x:1 +卖报 1 +x:1 +车管科 1 +x:1 +防火墙 1 +x:1 +扮演者 1 +x:1 +犯戒 1 +x:1 +飞漩 1 +x:1 +信儿 1 +x:1 +公元前 1 +x:1 +雄兵 1 +x:1 +雄关 1 +x:1 +铁血 1 +x:1 +圆盘耙 1 +x:1 +桃李 1 +x:1 +堆高 1 +x:1 +阴柔 1 +x:1 +雷达站 1 +x:1 +云儿 1 +x:1 +发现者 1 +x:1 +摆开 1 +x:1 +莲下镇 1 +x:1 +摆弄 1 +x:1 +低落 1 +x:1 +红2师 1 +x:1 +通讯费 1 +x:1 +书画院 1 +x:1 +抽身 1 +x:1 +摆式 1 +x:1 +正经事儿 1 +x:1 +印量 1 +x:1 +批判文 1 +x:1 +桃条 1 +x:1 +种闯田 1 +x:1 +皮短裤 1 +x:1 +不经意 1 +x:1 +拍子 1 +x:1 +士敏土 1 +x:1 +彪炳史册 1 +x:1 +飘曳 1 +x:1 +春雷声 1 +x:1 +幼师 1 +x:1 +诡计多端 1 +x:1 +亲笔 1 +x:1 +袖手旁观 1 +x:1 +山窝 1 +x:1 +股本 1 +x:1 +画面 1 +x:1 +献策 1 +x:1 +现代戏 1 +x:1 +桃果 1 +x:1 +高视阔步 1 +x:1 +桃林 1 +x:1 +自有 1 +x:1 +大个儿 1 +x:1 +虎头帽 1 +x:1 +村容村貌 1 +x:1 +同位角 1 +x:1 +改装 1 +x:1 +航天部 1 +x:1 +脚癣 1 +x:1 +二机部 1 +x:1 +信用化 1 +x:1 +钴 6 +x:6 +龙尾 1 +x:1 +文景 1 +x:1 +铀矿床 1 +x:1 +发卡量 1 +x:1 +华雷斯 1 +x:1 +气急败坏 1 +x:1 +塘桥镇 1 +x:1 +男校 1 +x:1 +浦项 1 +x:1 +灵长目 1 +x:1 +八宝菜 1 +x:1 +多闻者 1 +x:1 +文昌 1 +x:1 +敬业勤业 1 +x:1 +瑟 2 +x:2 +道士 1 +x:1 +股权 1 +x:1 +探亲假 1 +x:1 +项背 1 +x:1 +不同凡响 1 +x:1 +竹器 1 +x:1 +感染率 1 +x:1 +保卫员 1 +x:1 +改良主义 1 +x:1 +乘势而上 1 +x:1 +招蜂引蝶 1 +x:1 +受贿 1 +x:1 +云冈 1 +x:1 +科幻 1 +x:1 +不分彼此 1 +x:1 +卡宾枪 1 +x:1 +香椿林 1 +x:1 +简要 1 +x:1 +四荒 1 +x:1 +捐建 1 +x:1 +卖掉 1 +x:1 +吊 32 +x:32 +群团 1 +x:1 +番禺市 1 +x:1 +秉烛夜读 1 +x:1 +夏至草 1 +x:1 +里海 1 +x:1 +唯心论 1 +x:1 +中等 1 +x:1 +别出机杼 1 +x:1 +可以 1 +x:1 +邝 3 +x:3 +亩产 1 +x:1 +血口 1 +x:1 +摆平 1 +x:1 +希望赛 1 +x:1 +省市级 1 +x:1 +爬梯 1 +x:1 +雄健 1 +x:1 +仰天大笑 1 +x:1 +承销商 1 +x:1 +建设局 1 +x:1 +画集 1 +x:1 +广安 1 +x:1 +飞渡 1 +x:1 +地利人和 1 +x:1 +应变成 1 +x:1 +嫁 44 +x:44 +粉尘 1 +x:1 +点击数 1 +x:1 +血压 1 +x:1 +物品 1 +x:1 +摆布 1 +x:1 +龙川 1 +x:1 +绢纺厂 1 +x:1 +旋转翼 1 +x:1 +第三方 1 +x:1 +株式会社 1 +x:1 +省级 1 +x:1 +阴曹 1 +x:1 +退热药 1 +x:1 +力透纸背 1 +x:1 +太翁 1 +x:1 +变相 1 +x:1 +墨粉 1 +x:1 +权贵 1 +x:1 +顿觉 1 +x:1 +雪梨 1 +x:1 +雏形 1 +x:1 +学员队 1 +x:1 +铁西 1 +x:1 +阶级斗争 1 +x:1 +盗魁 1 +x:1 +防城市 1 +x:1 +辉煌夺目 1 +x:1 +空间局 1 +x:1 +不求甚解 1 +x:1 +季风性 1 +x:1 +老老实实 1 +x:1 +无时无刻 1 +x:1 +吸收 1 +x:1 +飞溅 1 +x:1 +杂食店 1 +x:1 +精疲力竭 1 +x:1 +四月八 1 +x:1 +罗里罗唆 1 +x:1 +鼓乐队 1 +x:1 +信函 1 +x:1 +戴戴 1 +x:1 +改观 1 +x:1 +致意 1 +x:1 +寄理于情 1 +x:1 +血印 1 +x:1 +火炉坪乡 1 +x:1 +水电厂 1 +x:1 +张家港市 1 +x:1 +示威者 1 +x:1 +大峡谷 1 +x:1 +挠骨 1 +x:1 +拦水坝 1 +x:1 +小品式 1 +x:1 +壶关县 1 +x:1 +霍然 1 +x:1 +编写者 1 +x:1 +血细胞 1 +x:1 +从头 1 +x:1 +樱花 1 +x:1 +指指 1 +x:1 +超常规 1 +x:1 +凶险 1 +x:1 +四脚蛇 1 +x:1 +康宁 1 +x:1 +团体操 1 +x:1 +中策 1 +x:1 +引为鉴戒 1 +x:1 +子孙万代 1 +x:1 +坐立不安 1 +x:1 +文本 1 +x:1 +康定 1 +x:1 +鹦哥 1 +x:1 +绿林起义 1 +x:1 +庶务 1 +x:1 +强颜欢笑 1 +x:1 +赞誉声 1 +x:1 +坚果 1 +x:1 +五颜六色 1 +x:1 +赛艇 1 +x:1 +舔 3 +x:3 +康山 1 +x:1 +蝇虎 1 +x:1 +申报单 1 +x:1 +广岛 1 +x:1 +优惠酬宾 1 +x:1 +旅游局 1 +x:1 +例规 1 +x:1 +生产处 1 +x:1 +战前 1 +x:1 +矛盾 1 +x:1 +节电 1 +x:1 +牵累 1 +x:1 +旅游展 1 +x:1 +珍重 1 +x:1 +二十八宿 1 +x:1 +毅然决然 1 +x:1 +银杯赛 1 +x:1 +扭力天平 1 +x:1 +废气 1 +x:1 +脚炉 1 +x:1 +西服呢 1 +x:1 +果实 1 +x:1 +重温 1 +x:1 +云片糕 1 +x:1 +弹簧 1 +x:1 +出笼 1 +x:1 +墨管 1 +x:1 +含水层 1 +x:1 +节略 1 +x:1 +黑袍 1 +x:1 +受训 1 +x:1 +喷洒 1 +x:1 +软骨病 1 +x:1 +进水闸 1 +x:1 +生产奖 1 +x:1 +雅座 1 +x:1 +专营店 1 +x:1 +鱼雷 1 +x:1 +零下 1 +x:1 +廊开府 1 +x:1 +果子 1 +x:1 +面结型 1 +x:1 +购房置业 1 +x:1 +简体字 1 +x:1 +回守 1 +x:1 +惠阳 1 +x:1 +岳南区 1 +x:1 +外皮 1 +x:1 +寡廉鲜耻 1 +x:1 +指数制 1 +x:1 +蒜薹 1 +x:1 +美大司 1 +x:1 +侧柏 1 +x:1 +失业率 1 +x:1 +节疤 1 +x:1 +脚灯 1 +x:1 +腿脚 1 +x:1 +薄弱者 1 +x:1 +毕肖 1 +x:1 +指挥 1 +x:1 +回家 1 +x:1 +获取 1 +x:1 +仙国 1 +x:1 +抽血 1 +x:1 +一病不起 1 +x:1 +维和旅 1 +x:1 +钓鱼税 1 +x:1 +制裁 1 +x:1 +瞌睡 1 +x:1 +脏器 1 +x:1 +文思 1 +x:1 +头晕 1 +x:1 +心惊 1 +x:1 +福井县 1 +x:1 +达西村 1 +x:1 +从师 1 +x:1 +喷涂 1 +x:1 +诱奸 1 +x:1 +山系 1 +x:1 +喷涌 1 +x:1 +墨笔 1 +x:1 +文学史 1 +x:1 +群儒 1 +x:1 +柴鸡 1 +x:1 +分清 1 +x:1 +节理 1 +x:1 +从快 1 +x:1 +幼女 1 +x:1 +小心谨慎 1 +x:1 +异型坯 1 +x:1 +婊子 1 +x:1 +拍就 1 +x:1 +进取心 1 +x:1 +边防连 1 +x:1 +三塘村 1 +x:1 +碧青碧青 1 +x:1 +群像 1 +x:1 +龙宫 1 +x:1 +催春 1 +x:1 +群贤毕集 1 +x:1 +凶兆 1 +x:1 +监外 1 +x:1 +澄碧 1 +x:1 +周刊社 1 +x:1 +弊害 1 +x:1 +防 203 +x:203 +蝎子 1 +x:1 +卖方 1 +x:1 +中庸 1 +x:1 +经销处 1 +x:1 +目下 1 +x:1 +学有所成 1 +x:1 +会东县 1 +x:1 +名存实亡 1 +x:1 +获利 1 +x:1 +一怒之下 1 +x:1 +喷水 1 +x:1 +揽活 1 +x:1 +学生会 1 +x:1 +语句 1 +x:1 +广州 1 +x:1 +小孔 1 +x:1 +师长 1 +x:1 +浓浓 1 +x:1 +从征 1 +x:1 +巫 13 +x:13 +只字未提 1 +x:1 +捐增 1 +x:1 +工段长 1 +x:1 +喷气 1 +x:1 +大处方 1 +x:1 +裹 44 +x:44 +说笑话 1 +x:1 +简单机械 1 +x:1 +飞桥 1 +x:1 +新郑市 1 +x:1 +修身养性 1 +x:1 +久别重逢 1 +x:1 +欠缺 1 +x:1 +汇兑商 1 +x:1 +云图 1 +x:1 +云团 1 +x:1 +群众性 1 +x:1 +芊芊 1 +x:1 +小说史家 1 +x:1 +穆尔拉 1 +x:1 +从影 1 +x:1 +肇事者 1 +x:1 +孜孜不倦 1 +x:1 +秘藏 1 +x:1 +关系者 1 +x:1 +截长补短 1 +x:1 +平白无故 1 +x:1 +陆航团 1 +x:1 +绯红 1 +x:1 +改过 1 +x:1 +例行 1 +x:1 +粉嫩 1 +x:1 +改进 1 +x:1 +组建 1 +x:1 +飞梭 1 +x:1 +一动 1 +x:1 +阴性 1 +x:1 +十月份 1 +x:1 +擎天 1 +x:1 +母语 1 +x:1 +木然 1 +x:1 +水彩 1 +x:1 +州督 1 +x:1 +股息 1 +x:1 +册页 1 +x:1 +清泉 1 +x:1 +不识抬举 1 +x:1 +龙子 1 +x:1 +浓淡 1 +x:1 +楣 1 +x:1 +愈益 1 +x:1 +牵系 1 +x:1 +推三阻四 1 +x:1 +羞于示人 1 +x:1 +凝固化 1 +x:1 +良种鸭 1 +x:1 +罢教 1 +x:1 +修正案 1 +x:1 +欧元 1 +x:1 +柔情似水 1 +x:1 +环注委 1 +x:1 +干涉性 1 +x:1 +尚沟里 1 +x:1 +冀西 1 +x:1 +头条 1 +x:1 +各税 1 +x:1 +社交 1 +x:1 +拍弦 1 +x:1 +骑兵 1 +x:1 +节省 1 +x:1 +圆 109 +x:109 +河北乡 1 +x:1 +剧烈 1 +x:1 +旅游年 1 +x:1 +断路器 1 +x:1 +康平 1 +x:1 +回复 1 +x:1 +广度 1 +x:1 +进口税 1 +x:1 +东弭河村 1 +x:1 +叠嶂 1 +x:1 +例证 1 +x:1 +脱皮树 1 +x:1 +萨吉德 1 +x:1 +氮素 1 +x:1 +蛙池 1 +x:1 +清话办 1 +x:1 +回头 1 +x:1 +催收 1 +x:1 +倔头倔脑 1 +x:1 +出神 1 +x:1 +宣战 1 +x:1 +险重 1 +x:1 +变现 1 +x:1 +违禁机 1 +x:1 +例话 1 +x:1 +群发 1 +x:1 +战斗部 1 +x:1 +宣扬 1 +x:1 +飘拂 1 +x:1 +圪台 1 +x:1 +劝募 1 +x:1 +分量感 1 +x:1 +比较文学 1 +x:1 +劣等 1 +x:1 +专利 1 +x:1 +飞歌 1 +x:1 +光度计 1 +x:1 +出示 1 +x:1 +通灵 1 +x:1 +统领 1 +x:1 +啼饥号寒 1 +x:1 +劝勉 1 +x:1 +绊 4 +x:4 +描述 1 +x:1 +喷漆 1 +x:1 +鸣凤镇 1 +x:1 +可恨 1 +x:1 +低者 1 +x:1 +奖勤罚懒 1 +x:1 +撑持 1 +x:1 +姑息养奸 1 +x:1 +高明市 1 +x:1 +天文 1 +x:1 +建设处 1 +x:1 +师院 1 +x:1 +低耗 1 +x:1 +终古不息 1 +x:1 +反咬一口 1 +x:1 +变速 1 +x:1 +亲缘 1 +x:1 +贴兜 1 +x:1 +住宿楼 1 +x:1 +指数值 1 +x:1 +转发器 1 +x:1 +地区部 1 +x:1 +大专学校 1 +x:1 +超高速 1 +x:1 +文才 1 +x:1 +公款吃喝 1 +x:1 +幼嫩 1 +x:1 +中科 1 +x:1 +获准 1 +x:1 +黑滔滔 1 +x:1 +饰件 1 +x:1 +股指 1 +x:1 +喷激 1 +x:1 +神经 1 +x:1 +组工 1 +x:1 +强有力 1 +x:1 +小跑 1 +x:1 +简谱 1 +x:1 +青霉素G 1 +x:1 +从属 1 +x:1 +人去楼空 1 +x:1 +呵斥 1 +x:1 +蛙泳 1 +x:1 +广布 1 +x:1 +毕节 1 +x:1 +飞毛 1 +x:1 +文成 1 +x:1 +中草药剂 1 +x:1 +依托 1 +x:1 +腕 16 +x:16 +可恶 1 +x:1 +文戏 1 +x:1 +栽跟头 1 +x:1 +缸缸坛坛 1 +x:1 +能源 1 +x:1 +户户 1 +x:1 +孤单 1 +x:1 +卡通城 1 +x:1 +从小 1 +x:1 +丸剂 1 +x:1 +轧钢 1 +x:1 +排名榜 1 +x:1 +舍生忘死 1 +x:1 +职官 1 +x:1 +坑坑洼洼 1 +x:1 +飞毯 1 +x:1 +官沱村 1 +x:1 +商品额 1 +x:1 +军人证 1 +x:1 +牛皮纸 1 +x:1 +广德 1 +x:1 +省立 1 +x:1 +发起组 1 +x:1 +顿足 1 +x:1 +永胜村 1 +x:1 +一望无垠 1 +x:1 +名列前茅 1 +x:1 +砚 14 +x:14 +理所当然 1 +x:1 +生物质能 1 +x:1 +幼子 1 +x:1 +叔祖 1 +x:1 +铁质 1 +x:1 +颠倒黑白 1 +x:1 +绣制 1 +x:1 +堕胎 1 +x:1 +纹络 1 +x:1 +如火如荼 1 +x:1 +茂密 1 +x:1 +看门 1 +x:1 +支撑网 1 +x:1 +涣散 1 +x:1 +血型 1 +x:1 +淘金者 1 +x:1 +下和村 1 +x:1 +舍亲 1 +x:1 +国土报 1 +x:1 +舍人 1 +x:1 +蔗渣 1 +x:1 +仗义疏财 1 +x:1 +星期六 1 +x:1 +花岗石 1 +x:1 +组展会 1 +x:1 +回填 1 +x:1 +爬泳 1 +x:1 +壮举 1 +x:1 +译版 1 +x:1 +找 994 +x:994 +东拼西凑 1 +x:1 +黑河市 1 +x:1 +德阳市 1 +x:1 +搁浅 1 +x:1 +飞檐 1 +x:1 +同音词 1 +x:1 +石景山 1 +x:1 +前呼后拥 1 +x:1 +险遭 1 +x:1 +雾里观花 1 +x:1 +奇松岛 1 +x:1 +磁性瓷 1 +x:1 +马拉松 1 +x:1 +山羊 1 +x:1 +独立宫 1 +x:1 +指控 1 +x:1 +牵线 1 +x:1 +头攻 1 +x:1 +象星村 1 +x:1 +阴户 1 +x:1 +东营区 1 +x:1 +十字路口 1 +x:1 +因人成事 1 +x:1 +监守 1 +x:1 +迪庆 1 +x:1 +龙头 1 +x:1 +广开 1 +x:1 +粉墙 1 +x:1 +排球队 1 +x:1 +能歌善舞 1 +x:1 +简赅 1 +x:1 +批判性 1 +x:1 +冰鞋跟 1 +x:1 +功成引退 1 +x:1 +睛 4 +x:4 +龙套 1 +x:1 +卫城山 1 +x:1 +喷溅 1 +x:1 +深成岩 1 +x:1 +假石林 1 +x:1 +瘠薄 1 +x:1 +回声 1 +x:1 +克原子 1 +x:1 +节目 1 +x:1 +越俎代庖 1 +x:1 +中药店 1 +x:1 +铁路 1 +x:1 +经销家 1 +x:1 +隋唐 1 +x:1 +家兔 1 +x:1 +三产型 1 +x:1 +云和 1 +x:1 +大脑皮层 1 +x:1 +晴雨伞 1 +x:1 +回望 1 +x:1 +坚守 1 +x:1 +沦陷 1 +x:1 +少见多怪 1 +x:1 +学生版 1 +x:1 +腊酒 1 +x:1 +服饰店 1 +x:1 +坚实 1 +x:1 +跳月 1 +x:1 +主人家 1 +x:1 +霉菌 1 +x:1 +坚定 1 +x:1 +鬓角 1 +x:1 +青霉素 1 +x:1 +建设村 1 +x:1 +青风寨乡 1 +x:1 +外交家 1 +x:1 +建设权 1 +x:1 +惯贼 1 +x:1 +连轧厂 1 +x:1 +哎哟 1 +x:1 +粉条 1 +x:1 +高利贷者 1 +x:1 +果林 1 +x:1 +校椅镇 1 +x:1 +低音提琴 1 +x:1 +果果 1 +x:1 +果枝 1 +x:1 +酒霸 1 +x:1 +深成指 1 +x:1 +林草 1 +x:1 +斗兽场 1 +x:1 +忘年交 1 +x:1 +寒夜 1 +x:1 +粒状 1 +x:1 +洽购 1 +x:1 +石洞源村 1 +x:1 +可言 1 +x:1 +团政委 1 +x:1 +礼部 1 +x:1 +儿孙满堂 1 +x:1 +跳板 1 +x:1 +面见 1 +x:1 +创业者 1 +x:1 +于事无补 1 +x:1 +捐料 1 +x:1 +林荫 1 +x:1 +猝死 1 +x:1 +小寒 1 +x:1 +三色版 1 +x:1 +粉末 1 +x:1 +凶气 1 +x:1 +回条 1 +x:1 +退避 1 +x:1 +绿 322 +x:322 +中晚餐 1 +x:1 +果材 1 +x:1 +行省 1 +x:1 +武二花 1 +x:1 +血案 1 +x:1 +渑池 1 +x:1 +飘尘 1 +x:1 +纺嫂 1 +x:1 +一泻千里 1 +x:1 +布吕肯街 1 +x:1 +口中 1 +x:1 +文山 1 +x:1 +哎呀 1 +x:1 +大老爷们 1 +x:1 +钓协 1 +x:1 +嵌镶 1 +x:1 +果条 1 +x:1 +法兰克福 1 +x:1 +林莽 1 +x:1 +营生 1 +x:1 +云母 1 +x:1 +罗萨里奥 1 +x:1 +爬升 1 +x:1 +创业股 1 +x:1 +笑掉大牙 1 +x:1 +吝惜 1 +x:1 +泽国镇 1 +x:1 +单晶体 1 +x:1 +主考官 1 +x:1 +刘村镇 1 +x:1 +血栓 1 +x:1 +劳务费 1 +x:1 +坎布斯 1 +x:1 +庞庄 1 +x:1 +开斋节 1 +x:1 +从戎 1 +x:1 +恍然大悟 1 +x:1 +拾人牙慧 1 +x:1 +组接 1 +x:1 +古庄店 1 +x:1 +礼遇 1 +x:1 +先租后股 1 +x:1 +血样 1 +x:1 +灰溜溜 1 +x:1 +忍耐力 1 +x:1 +果木 1 +x:1 +凌河 1 +x:1 +喜糖 1 +x:1 +议论声 1 +x:1 +粒细胞 1 +x:1 +报告团 1 +x:1 +双垂尾 1 +x:1 +绒裤 1 +x:1 +才高八斗 1 +x:1 +底 897 +x:897 +龙果 1 +x:1 +摆摆 1 +x:1 +提取物 1 +x:1 +裨益 1 +x:1 +摆摊 1 +x:1 +拖累 1 +x:1 +虞美人 1 +x:1 +兰村乡 1 +x:1 +飞吻 1 +x:1 +阿城 1 +x:1 +鹿群 1 +x:1 +转马 1 +x:1 +男双 1 +x:1 +男友 1 +x:1 +幼教 1 +x:1 +虚线 1 +x:1 +合阳 1 +x:1 +云岩区 1 +x:1 +星级 1 +x:1 +回春 1 +x:1 +竹马 1 +x:1 +游路 1 +x:1 +区分值 1 +x:1 +泉 34 +x:34 +产业处 1 +x:1 +剔庄货 1 +x:1 +处罚法 1 +x:1 +偷闲 1 +x:1 +正义感 1 +x:1 +组成 1 +x:1 +售票 1 +x:1 +头寸 1 +x:1 +萨迦派 1 +x:1 +金箍棒 1 +x:1 +宁河县 1 +x:1 +丁冬 1 +x:1 +敬老院 1 +x:1 +营帐 1 +x:1 +男厕 1 +x:1 +南北阁 1 +x:1 +轴 5 +x:5 +刻薄 1 +x:1 +移 148 +x:148 +理发店 1 +x:1 +洽谈 1 +x:1 +梯田 1 +x:1 +幼时 1 +x:1 +写实主义 1 +x:1 +抵押物 1 +x:1 +成像机 1 +x:1 +欧洲 1 +x:1 +骁勇 1 +x:1 +大老粗 1 +x:1 +消 36 +x:36 +战胜国 1 +x:1 +回暖 1 +x:1 +四里八乡 1 +x:1 +拖拖拉拉 1 +x:1 +天空 1 +x:1 +绒衣 1 +x:1 +纸鸢 1 +x:1 +赡养 1 +x:1 +起先 1 +x:1 +弹无虚发 1 +x:1 +贴付 1 +x:1 +滔滔 1 +x:1 +鹿儿岛县 1 +x:1 +大业乡 1 +x:1 +生殖道 1 +x:1 +男单 1 +x:1 +彩照 1 +x:1 +营利性 1 +x:1 +抵罪 1 +x:1 +国土局 1 +x:1 +吸引 1 +x:1 +打盹 1 +x:1 +众说纷纭 1 +x:1 +二中全会 1 +x:1 +揍 6 +x:6 +今 334 +x:334 +坐班制 1 +x:1 +头子 1 +x:1 +左右为难 1 +x:1 +交界地 1 +x:1 +电教片 1 +x:1 +惜乎 1 +x:1 +未知量 1 +x:1 +生产操 1 +x:1 +清江村 1 +x:1 +技战术 1 +x:1 +游赏 1 +x:1 +颤微微 1 +x:1 +寻花问柳 1 +x:1 +游资 1 +x:1 +男婚女嫁 1 +x:1 +龙爪槐 1 +x:1 +正确性 1 +x:1 +群氓 1 +x:1 +适龄 1 +x:1 +变例 1 +x:1 +劳作 1 +x:1 +西语系 1 +x:1 +昭 55 +x:55 +仙桃 1 +x:1 +汉水 1 +x:1 +输水线 1 +x:1 +街子乡 1 +x:1 +农茶场 1 +x:1 +停薪留职 1 +x:1 +郑州市 1 +x:1 +飞地 1 +x:1 +新英格兰 1 +x:1 +拥挤不堪 1 +x:1 +回收 1 +x:1 +专营性 1 +x:1 +衣冠不整 1 +x:1 +归属权 1 +x:1 +闲置 1 +x:1 +饰物 1 +x:1 +口信 1 +x:1 +首战告捷 1 +x:1 +回教 1 +x:1 +法定性 1 +x:1 +文库 1 +x:1 +蘑菇棚 1 +x:1 +急救箱 1 +x:1 +釜底游鱼 1 +x:1 +御园 1 +x:1 +逐鹿 1 +x:1 +文庙 1 +x:1 +果料 1 +x:1 +语法 1 +x:1 +煳 1 +x:1 +牡丹江 1 +x:1 +才能 1 +x:1 +奔腾激越 1 +x:1 +倏地 1 +x:1 +麻织品 1 +x:1 +铅丝 1 +x:1 +宝号 1 +x:1 +广招 1 +x:1 +宋集村 1 +x:1 +九九年 1 +x:1 +二十八日 1 +x:1 +白沙瓦 1 +x:1 +溅落 1 +x:1 +画廊业 1 +x:1 +回敬 1 +x:1 +记略 1 +x:1 +太浦河 1 +x:1 +果断 1 +x:1 +劳伤 1 +x:1 +游踪 1 +x:1 +早点 1 +x:1 +作坊业 1 +x:1 +膳食 1 +x:1 +工部局 1 +x:1 +劳保 1 +x:1 +作家群 1 +x:1 +密宗法要 1 +x:1 +语气 1 +x:1 +挨门 1 +x:1 +高材生 1 +x:1 +加里波第 1 +x:1 +拦截 1 +x:1 +青年会 1 +x:1 +跳方 1 +x:1 +食品学家 1 +x:1 +群英谱 1 +x:1 +撺弄 1 +x:1 +摄制组 1 +x:1 +二十五史 1 +x:1 +飘带 1 +x:1 +游客 1 +x:1 +政见者 1 +x:1 +果敢 1 +x:1 +猜先 1 +x:1 +喷发 1 +x:1 +慌里慌张 1 +x:1 +语汇 1 +x:1 +变位 1 +x:1 +运动鞋者 1 +x:1 +建设方 1 +x:1 +如愿以偿 1 +x:1 +回旋 1 +x:1 +商品粮 1 +x:1 +协 11 +x:11 +回族 1 +x:1 +讲坛 1 +x:1 +薄酒 1 +x:1 +油条 1 +x:1 +茎草 1 +x:1 +作到 1 +x:1 +那种 1 +x:1 +脚丫 1 +x:1 +进犯 1 +x:1 +尽心尽职 1 +x:1 +经血 1 +x:1 +凉山籍 1 +x:1 +自找麻烦 1 +x:1 +报道 1 +x:1 +晃荡 1 +x:1 +淫威 1 +x:1 +送子观音 1 +x:1 +经销权 1 +x:1 +数据舱 1 +x:1 +塑料篷 1 +x:1 +疗程 1 +x:1 +达尔文 1 +x:1 +改过迁善 1 +x:1 +尊干 1 +x:1 +劳乏 1 +x:1 +竹园镇 1 +x:1 +中山区 1 +x:1 +埃镑 1 +x:1 +隔阻 1 +x:1 +特赦令 1 +x:1 +重演 1 +x:1 +拍戏 1 +x:1 +牌价 1 +x:1 +浓化 1 +x:1 +中心线 1 +x:1 +外经贸部 1 +x:1 +排灌站 1 +x:1 +卖家 1 +x:1 +堆放地 1 +x:1 +打球 1 +x:1 +插件机 1 +x:1 +幼儿园 1 +x:1 +学有所用 1 +x:1 +堆放场 1 +x:1 +掌声雷动 1 +x:1 +青年人 1 +x:1 +中药房 1 +x:1 +税收额 1 +x:1 +中心组 1 +x:1 +肩部 1 +x:1 +神秘化 1 +x:1 +欢笑声 1 +x:1 +塑料管 1 +x:1 +摆明 1 +x:1 +合情合理 1 +x:1 +青葱可人 1 +x:1 +祛痰剂 1 +x:1 +心血来潮 1 +x:1 +价非字 1 +x:1 +打假办 1 +x:1 +拍手 1 +x:1 +活动费 1 +x:1 +龙文村 1 +x:1 +飘忽 1 +x:1 +交换体 1 +x:1 +变价 1 +x:1 +唇亡齿寒 1 +x:1 +主产省 1 +x:1 +掀 25 +x:25 +文录 1 +x:1 +浣濯 1 +x:1 +东南欧 1 +x:1 +歧路 1 +x:1 +男兵 1 +x:1 +宝刀 1 +x:1 +浓厚 1 +x:1 +申报法 1 +x:1 +股市 1 +x:1 +浸种 1 +x:1 +有备而来 1 +x:1 +头头 1 +x:1 +塑料筐 1 +x:1 +丁卯 1 +x:1 +出让方 1 +x:1 +变为 1 +x:1 +好好 1 +x:1 +含硫量 1 +x:1 +报告员 1 +x:1 +头天 1 +x:1 +地下道 1 +x:1 +宝剑 1 +x:1 +酒钱 1 +x:1 +敌 80 +x:80 +噬菌体 1 +x:1 +头套 1 +x:1 +入梦 1 +x:1 +胎生 1 +x:1 +怡红院 1 +x:1 +乡规民约 1 +x:1 +缺陷率 1 +x:1 +木棒 1 +x:1 +酒钢 1 +x:1 +罹难者 1 +x:1 +男儿 1 +x:1 +有说有笑 1 +x:1 +云梯 1 +x:1 +迪拜 1 +x:1 +幼林 1 +x:1 +透平机 1 +x:1 +打瓜 1 +x:1 +瓶颈 1 +x:1 +药补 1 +x:1 +机器人 1 +x:1 +悲喜交集 1 +x:1 +阴平 1 +x:1 +读秒声 1 +x:1 +漂白剂 1 +x:1 +座钟 1 +x:1 +恒 19 +x:19 +潘家蕃 1 +x:1 +变乱 1 +x:1 +皮糖 1 +x:1 +进馆 1 +x:1 +跳梁小丑 1 +x:1 +平行线 1 +x:1 +男团 1 +x:1 +血泊 1 +x:1 +会集 1 +x:1 +血泉 1 +x:1 +履历表 1 +x:1 +广播 1 +x:1 +朱书 1 +x:1 +濡养 1 +x:1 +普照 1 +x:1 +仙湖 1 +x:1 +实验鼠 1 +x:1 +中后场 1 +x:1 +血泡 1 +x:1 +血泪 1 +x:1 +长歌当哭 1 +x:1 +电荷 1 +x:1 +水电气 1 +x:1 +能说会道 1 +x:1 +目睹 1 +x:1 +餐餐 1 +x:1 +打猎 1 +x:1 +种子队 1 +x:1 +文士 1 +x:1 +坚忍 1 +x:1 +气冲霄汉 1 +x:1 +差价款 1 +x:1 +血沉 1 +x:1 +瘟猪疫 1 +x:1 +就诊者 1 +x:1 +西张镇 1 +x:1 +客舱 1 +x:1 +苍岩山 1 +x:1 +收入量 1 +x:1 +客船 1 +x:1 +谨严 1 +x:1 +总的说来 1 +x:1 +目眩 1 +x:1 +归属感 1 +x:1 +两弹一星 1 +x:1 +报告厅 1 +x:1 +跳跳蹦蹦 1 +x:1 +野营拉练 1 +x:1 +拯 7 +x:7 +荒凉 1 +x:1 +干梆梆 1 +x:1 +人行道 1 +x:1 +飞入 1 +x:1 +文墨 1 +x:1 +玉树州 1 +x:1 +半衰期 1 +x:1 +义安 1 +x:1 +头帕 1 +x:1 +叮当作响 1 +x:1 +邯山区 1 +x:1 +记者部 1 +x:1 +血汗 1 +x:1 +制定 1 +x:1 +鱼网阵 1 +x:1 +差价比 1 +x:1 +多伦多 1 +x:1 +血污 1 +x:1 +偷逃 1 +x:1 +游击队 1 +x:1 +售粮 1 +x:1 +咕哩寨 1 +x:1 +抒写 1 +x:1 +中心社 1 +x:1 +坚强 1 +x:1 +阴天 1 +x:1 +报告单 1 +x:1 +座座 1 +x:1 +薄露 1 +x:1 +乌克兰 1 +x:1 +输机 1 +x:1 +辩白 1 +x:1 +乌骨鸡 1 +x:1 +组构 1 +x:1 +还款数 1 +x:1 +宝商 1 +x:1 +轰隆 1 +x:1 +邓庄乡 1 +x:1 +统筹费 1 +x:1 +费转税 1 +x:1 +总的看来 1 +x:1 +字面 1 +x:1 +我校 1 +x:1 +色价 1 +x:1 +公伯峡 1 +x:1 +火漆印 1 +x:1 +游行 1 +x:1 +头年 1 +x:1 +伏案 1 +x:1 +回援 1 +x:1 +淀粉酶 1 +x:1 +信任投票 1 +x:1 +龙海市 1 +x:1 +血水 1 +x:1 +会阴 1 +x:1 +增色 1 +x:1 +护田林 1 +x:1 +文委 1 +x:1 +粉扑 1 +x:1 +生产性 1 +x:1 +营建 1 +x:1 +林 909 +x:909 +过不过时 1 +x:1 +超载 1 +x:1 +丑角 1 +x:1 +血淤 1 +x:1 +镇远县 1 +x:1 +面貌 1 +x:1 +剪贴 1 +x:1 +理儿 1 +x:1 +由表及里 1 +x:1 +非例行 1 +x:1 +诱惑 1 +x:1 +排名制 1 +x:1 +广旺 1 +x:1 +云游 1 +x:1 +不仅如此 1 +x:1 +种牛场 1 +x:1 +不择手段 1 +x:1 +降落伞 1 +x:1 +专营权 1 +x:1 +海淀区 1 +x:1 +归属性 1 +x:1 +经述 1 +x:1 +怏怏 1 +x:1 +拍摄 1 +x:1 +游览 1 +x:1 +电船 1 +x:1 +经过 1 +x:1 +刚果队 1 +x:1 +尼 32 +x:32 +薄雾 1 +x:1 +排名分 1 +x:1 +小儿调 1 +x:1 +喷吐 1 +x:1 +水稻种 1 +x:1 +腾云楼 1 +x:1 +回执 1 +x:1 +手工业者 1 +x:1 +血浆 1 +x:1 +文契 1 +x:1 +上升流 1 +x:1 +窖 3 +x:3 +从来 1 +x:1 +缜密 1 +x:1 +头式 1 +x:1 +上无片瓦 1 +x:1 +喧闹声 1 +x:1 +顽固派 1 +x:1 +如临大敌 1 +x:1 +如沐薰风 1 +x:1 +井陉县 1 +x:1 +掰 15 +x:15 +语次 1 +x:1 +十番乐 1 +x:1 +防火期 1 +x:1 +面谈 1 +x:1 +会面 1 +x:1 +内公切线 1 +x:1 +活动课 1 +x:1 +铜墙铁壁 1 +x:1 +补饲 1 +x:1 +长歌当啸 1 +x:1 +勘探局 1 +x:1 +董监事 1 +x:1 +从未 1 +x:1 +钢琴家 1 +x:1 +富岭村 1 +x:1 +防火板 1 +x:1 +目的 1 +x:1 +不声不响 1 +x:1 +出气儿 1 +x:1 +血洗 1 +x:1 +报告制 1 +x:1 +报靶 1 +x:1 +林蛙 1 +x:1 +庖丁解牛 1 +x:1 +迎宾处 1 +x:1 +残留量 1 +x:1 +遍体鳞伤 1 +x:1 +满腹不快 1 +x:1 +挺立 1 +x:1 +井陉矿区 1 +x:1 +普天同庆 1 +x:1 +红四军 1 +x:1 +世态相 1 +x:1 +头彩 1 +x:1 +官办 1 +x:1 +永定路 1 +x:1 +电话会议 1 +x:1 +土腥气 1 +x:1 +妻女 1 +x:1 +情真意长 1 +x:1 +漆 17 +x:17 +酒酿 1 +x:1 +塑料绳 1 +x:1 +光杆司令 1 +x:1 +刻苦 1 +x:1 +组教 1 +x:1 +票款 1 +x:1 +大凌河 1 +x:1 +谜 43 +x:43 +雄浑 1 +x:1 +活动表 1 +x:1 +先行点 1 +x:1 +弦 22 +x:22 +中药材 1 +x:1 +自成一家 1 +x:1 +幼托 1 +x:1 +维多利亚 1 +x:1 +退防 1 +x:1 +中山堂 1 +x:1 +圣战 1 +x:1 +鬼把戏 1 +x:1 +狂风 1 +x:1 +劳其筋骨 1 +x:1 +宏亮 1 +x:1 +刻花 1 +x:1 +两小无猜 1 +x:1 +塑料纸 1 +x:1 +悬赏 1 +x:1 +凶横 1 +x:1 +莲花白 1 +x:1 +电脑 1 +x:1 +东亚马孙 1 +x:1 +蕴意 1 +x:1 +面述 1 +x:1 +折回 1 +x:1 +拍板 1 +x:1 +桃子 1 +x:1 +现场感 1 +x:1 +打点费 1 +x:1 +飞升 1 +x:1 +绦子 1 +x:1 +拍杆 1 +x:1 +方程组 1 +x:1 +产业带 1 +x:1 +雍和宫 1 +x:1 +转会制 1 +x:1 +内容栏 1 +x:1 +周期律 1 +x:1 +美容师 1 +x:1 +农情 1 +x:1 +蛇纹石 1 +x:1 +尺有所短 1 +x:1 +苇屏 1 +x:1 +家鼠 1 +x:1 +代码费 1 +x:1 +木马 1 +x:1 +教学相长 1 +x:1 +沉溺 1 +x:1 +祖宗 1 +x:1 +账面 1 +x:1 +监护 1 +x:1 +太开路 1 +x:1 +御制 1 +x:1 +哗啦哗啦 1 +x:1 +叠放 1 +x:1 +秦风槐韵 1 +x:1 +头尾 1 +x:1 +约言 1 +x:1 +暖融融 1 +x:1 +宝地 1 +x:1 +药贩 1 +x:1 +广昌 1 +x:1 +横波 1 +x:1 +药费 1 +x:1 +汪清 1 +x:1 +酒量 1 +x:1 +香火 1 +x:1 +还款期 1 +x:1 +淫心 1 +x:1 +胄 18 +x:18 +北台 1 +x:1 +血清 1 +x:1 +鸿门宴 1 +x:1 +国际主义 1 +x:1 +灏 2 +x:2 +平方英尺 1 +x:1 +接受方 1 +x:1 +有备而战 1 +x:1 +科学技术 1 +x:1 +朝阳花 1 +x:1 +拍柄 1 +x:1 +高聚物 1 +x:1 +抒发 1 +x:1 +文娱 1 +x:1 +依附 1 +x:1 +戏馆 1 +x:1 +铝矾土 1 +x:1 +价函字 1 +x:1 +宝坻 1 +x:1 +股子 1 +x:1 +从小到大 1 +x:1 +瘫痪 1 +x:1 +奶头 1 +x:1 +湾中 1 +x:1 +豆类 1 +x:1 +输水管 1 +x:1 +电联 1 +x:1 +跟风 1 +x:1 +软硬件 1 +x:1 +外汇法 1 +x:1 +游记 1 +x:1 +摆手 1 +x:1 +秦镜高悬 1 +x:1 +价值规律 1 +x:1 +迎风 1 +x:1 +树种 1 +x:1 +用水量 1 +x:1 +排戏 1 +x:1 +丑话 1 +x:1 +十字镐 1 +x:1 +羊草 1 +x:1 +老君堂 1 +x:1 +扶风县 1 +x:1 +丑诋 1 +x:1 +栈房 1 +x:1 +感觉器官 1 +x:1 +文宗 1 +x:1 +诱拐 1 +x:1 +大计方针 1 +x:1 +砖壁 1 +x:1 +棉贩子 1 +x:1 +文宝 1 +x:1 +售罄 1 +x:1 +道路口 1 +x:1 +文官 1 +x:1 +打火 1 +x:1 +景颇族 1 +x:1 +喷嘴 1 +x:1 +建设性 1 +x:1 +仗义 1 +x:1 +中心站 1 +x:1 +从新 1 +x:1 +成才路 1 +x:1 +文安 1 +x:1 +头巾 1 +x:1 +文家 1 +x:1 +升级换代 1 +x:1 +欢悦 1 +x:1 +云气 1 +x:1 +无境界 1 +x:1 +庐 3 +x:3 +河北省 1 +x:1 +松花蛋 1 +x:1 +胖墩墩 1 +x:1 +旅游月 1 +x:1 +关帝矿 1 +x:1 +螟虫 1 +x:1 +取款 1 +x:1 +从学 1 +x:1 +偶氮染料 1 +x:1 +一纸空谈 1 +x:1 +寻问条 1 +x:1 +白食 1 +x:1 +庞大 1 +x:1 +文字 1 +x:1 +家鸡 1 +x:1 +打点 1 +x:1 +抚今追昔 1 +x:1 +卖弄 1 +x:1 +夜莺 1 +x:1 +衣冠禽兽 1 +x:1 +家鸭 1 +x:1 +文存 1 +x:1 +园中园 1 +x:1 +打炮 1 +x:1 +经费 1 +x:1 +经贸 1 +x:1 +百合种 1 +x:1 +御医 1 +x:1 +金口路 1 +x:1 +南北部 1 +x:1 +电能 1 +x:1 +后代人 1 +x:1 +落雁区 1 +x:1 +披阅 1 +x:1 +一蹶不振 1 +x:1 +嘶哑 1 +x:1 +医学会 1 +x:1 +报销 1 +x:1 +逝去 1 +x:1 +飞动 1 +x:1 +文学 1 +x:1 +薄膜 1 +x:1 +会长 1 +x:1 +闲章 1 +x:1 +总产 1 +x:1 +马失前蹄 1 +x:1 +欧登塞 1 +x:1 +药谷 1 +x:1 +热连轧 1 +x:1 +鸟儿 1 +x:1 +雄沉 1 +x:1 +不可告人 1 +x:1 +舍身忘死 1 +x:1 +绫椤绸缎 1 +x:1 +硬头 1 +x:1 +上班族 1 +x:1 +螟蛉 1 +x:1 +倾斜度 1 +x:1 +佛 32 +x:32 +一饱口福 1 +x:1 +瞎 22 +x:22 +换届会 1 +x:1 +东奔西窜 1 +x:1 +节令 1 +x:1 +螟蛾 1 +x:1 +主干线 1 +x:1 +喷嚏 1 +x:1 +朝晖 1 +x:1 +回想 1 +x:1 +引导性 1 +x:1 +宏伟 1 +x:1 +打烊 1 +x:1 +柞树 1 +x:1 +劝止 1 +x:1 +始终不渝 1 +x:1 +宝器 1 +x:1 +指桑骂槐 1 +x:1 +头功 1 +x:1 +组歌 1 +x:1 +台儿庄 1 +x:1 +符山镇 1 +x:1 +一以贯之 1 +x:1 +催化 1 +x:1 +科技节 1 +x:1 +出使 1 +x:1 +邮联 1 +x:1 +图面 1 +x:1 +高低型 1 +x:1 +职介网 1 +x:1 +浑然一色 1 +x:1 +虚拟化 1 +x:1 +情同手足 1 +x:1 +平凉站 1 +x:1 +始终不懈 1 +x:1 +素心梅 1 +x:1 +回漩 1 +x:1 +咸兴 1 +x:1 +演化说 1 +x:1 +面膜 1 +x:1 +电车 1 +x:1 +里带 1 +x:1 +法律 1 +x:1 +腥黑穗病 1 +x:1 +洋华堂 1 +x:1 +鸟类学家 1 +x:1 +喷头 1 +x:1 +高品位 1 +x:1 +沙田 1 +x:1 +晋安沟 1 +x:1 +同类题材 1 +x:1 +宣告 1 +x:1 +蜈蚣草 1 +x:1 +大麦 1 +x:1 +群文 1 +x:1 +家里 1 +x:1 +重样 1 +x:1 +转校生 1 +x:1 +市用制 1 +x:1 +回潮 1 +x:1 +出众 1 +x:1 +如醉如痴 1 +x:1 +储金 1 +x:1 +顽固性 1 +x:1 +塞尔维亚 1 +x:1 +一扫而过 1 +x:1 +迎面 1 +x:1 +专用性 1 +x:1 +季风区 1 +x:1 +招商月 1 +x:1 +分党委 1 +x:1 +置之不顾 1 +x:1 +男婴 1 +x:1 +订机 1 +x:1 +不幸者 1 +x:1 +文告 1 +x:1 +盗墓 1 +x:1 +鳟鱼 1 +x:1 +龙港 1 +x:1 +一面之交 1 +x:1 +署长 1 +x:1 +闻喜 1 +x:1 +阎良区 1 +x:1 +束水丁坝 1 +x:1 +泌尿器 1 +x:1 +本分人 1 +x:1 +打翻 1 +x:1 +毛线针 1 +x:1 +卖假 1 +x:1 +瞎信 1 +x:1 +草牧场 1 +x:1 +运转率 1 +x:1 +杨家村 1 +x:1 +立轴 1 +x:1 +大理市 1 +x:1 +应用面 1 +x:1 +龙湖 1 +x:1 +兴风作浪 1 +x:1 +里庄 1 +x:1 +男娃 1 +x:1 +非请莫入 1 +x:1 +辛亥革命 1 +x:1 +首里城 1 +x:1 +家酒 1 +x:1 +其实 1 +x:1 +龙湾 1 +x:1 +牛角沱 1 +x:1 +巨宝村 1 +x:1 +诗文论 1 +x:1 +仔虾 1 +x:1 +面肥 1 +x:1 +客车 1 +x:1 +雄才 1 +x:1 +立身 1 +x:1 +打假声 1 +x:1 +齐胸 1 +x:1 +马拉凯 1 +x:1 +戏院 1 +x:1 +欧方 1 +x:1 +说一不二 1 +x:1 +懦夫 1 +x:1 +壮硕 1 +x:1 +回游 1 +x:1 +天阉 1 +x:1 +出乎 1 +x:1 +存贮 1 +x:1 +馅饼 1 +x:1 +砖门 1 +x:1 +角美镇 1 +x:1 +存货 1 +x:1 +重整旗鼓 1 +x:1 +长葛市 1 +x:1 +朴 38 +x:38 +喷塑 1 +x:1 +欠债还钱 1 +x:1 +各科 1 +x:1 +存贷 1 +x:1 +闻名 1 +x:1 +里弦 1 +x:1 +焦作市 1 +x:1 +男客 1 +x:1 +复合材料 1 +x:1 +图阵 1 +x:1 +迈纳吉勒 1 +x:1 +头发 1 +x:1 +跟随 1 +x:1 +叔伯 1 +x:1 +抗拒感 1 +x:1 +齐肩 1 +x:1 +八仙过海 1 +x:1 +里弄 1 +x:1 +拍框 1 +x:1 +爱尔兰 1 +x:1 +长阁村 1 +x:1 +星相 1 +x:1 +哩 40 +x:40 +头号 1 +x:1 +投资部长 1 +x:1 +走后门 1 +x:1 +三大差别 1 +x:1 +分项 1 +x:1 +监测 1 +x:1 +出丑 1 +x:1 +心服口服 1 +x:1 +朝阳路 1 +x:1 +账页 1 +x:1 +水稻田 1 +x:1 +厂部 1 +x:1 +布拉吉 1 +x:1 +宾阳 1 +x:1 +从此 1 +x:1 +男孩 1 +x:1 +喷壶 1 +x:1 +月余 1 +x:1 +赔罪 1 +x:1 +出任 1 +x:1 +催办 1 +x:1 +战后 1 +x:1 +出价 1 +x:1 +豌豆 1 +x:1 +葡萄园 1 +x:1 +迎客松 1 +x:1 +桡动脉 1 +x:1 +催动 1 +x:1 +明日黄花 1 +x:1 +电流表 1 +x:1 +葡萄酒厂 1 +x:1 +客运 1 +x:1 +男子 1 +x:1 +图案色 1 +x:1 +泗水亭 1 +x:1 +图集 1 +x:1 +宝塔 1 +x:1 +世界语 1 +x:1 +浑俗和光 1 +x:1 +出产 1 +x:1 +特困生 1 +x:1 +哗众 1 +x:1 +长江天堑 1 +x:1 +规划区 1 +x:1 +产业军 1 +x:1 +叶面施肥 1 +x:1 +挺直 1 +x:1 +止痛药 1 +x:1 +报忧者 1 +x:1 +天险 1 +x:1 +出于 1 +x:1 +违章者 1 +x:1 +龙潭 1 +x:1 +叫苦 1 +x:1 +机载 1 +x:1 +官制 1 +x:1 +三六九等 1 +x:1 +聪敏 1 +x:1 +时尚 1 +x:1 +功亏一篑 1 +x:1 +股员 1 +x:1 +叔侄 1 +x:1 +叼 3 +x:3 +药膏 1 +x:1 +会风 1 +x:1 +热腾腾 1 +x:1 +三角函数 1 +x:1 +寿星 1 +x:1 +宝宝 1 +x:1 +男士 1 +x:1 +勘探史 1 +x:1 +立足 1 +x:1 +公正性 1 +x:1 +药膜 1 +x:1 +前童村 1 +x:1 +砖雕 1 +x:1 +男声 1 +x:1 +十一日 1 +x:1 +宝安 1 +x:1 +飞弹 1 +x:1 +攻击点 1 +x:1 +协办 1 +x:1 +牙组织 1 +x:1 +报领 1 +x:1 +南陵县 1 +x:1 +里屋 1 +x:1 +卖劲 1 +x:1 +牛角湾 1 +x:1 +获救 1 +x:1 +输出国 1 +x:1 +挥笔 1 +x:1 +抵押科 1 +x:1 +坚冰 1 +x:1 +坚决 1 +x:1 +龙泉 1 +x:1 +胆色素 1 +x:1 +夏邑县 1 +x:1 +陈词滥调 1 +x:1 +顺道儿 1 +x:1 +种 5155 +x:5155 +拟稿 1 +x:1 +和事老 1 +x:1 +冲天炮 1 +x:1 +头像 1 +x:1 +诵经 1 +x:1 +食变星 1 +x:1 +梗塞 1 +x:1 +浚 1 +x:1 +龙法 1 +x:1 +包保 1 +x:1 +狗屎堆 1 +x:1 +电贺 1 +x:1 +曲阳 1 +x:1 +游蛇 1 +x:1 +艰 2 +x:2 +电流计 1 +x:1 +养虾场 1 +x:1 +省便 1 +x:1 +毫不讳言 1 +x:1 +空间感 1 +x:1 +粉白色 1 +x:1 +吸吮 1 +x:1 +立账 1 +x:1 +清江水 1 +x:1 +倏忽 1 +x:1 +后卫 1 +x:1 +跃跃欲试 1 +x:1 +惟我独尊 1 +x:1 +飞往 1 +x:1 +列祖列宗 1 +x:1 +零零碎碎 1 +x:1 +存身 1 +x:1 +大半夜 1 +x:1 +咨询表 1 +x:1 +非当地 1 +x:1 +只得 1 +x:1 +聪明 1 +x:1 +浴血 1 +x:1 +外延性 1 +x:1 +冷嘲热讽 1 +x:1 +处罚权 1 +x:1 +悬臂 1 +x:1 +摈逐 1 +x:1 +援助 1 +x:1 +果洛 1 +x:1 +申报方 1 +x:1 +细纱机 1 +x:1 +防腐厂 1 +x:1 +凶暴 1 +x:1 +龙江 1 +x:1 +乙脑 1 +x:1 +省优 1 +x:1 +血战 1 +x:1 +省会 1 +x:1 +野山歌 1 +x:1 +双增双节 1 +x:1 +提名奖 1 +x:1 +梯级 1 +x:1 +旁门 1 +x:1 +雨涝 1 +x:1 +羔子 1 +x:1 +蔡甸区 1 +x:1 +薄饼 1 +x:1 +飞快 1 +x:1 +证件 1 +x:1 +吸呐 1 +x:1 +登记簿 1 +x:1 +枫 21 +x:21 +腮帮子 1 +x:1 +传统课 1 +x:1 +宠臣 1 +x:1 +一见如故 1 +x:1 +大理州 1 +x:1 +有把握 1 +x:1 +律令 1 +x:1 +可触摸性 1 +x:1 +回民 1 +x:1 +泡饭 1 +x:1 +自民 1 +x:1 +蛾眉月 1 +x:1 +防腐剂 1 +x:1 +转道 1 +x:1 +武工队 1 +x:1 +语料 1 +x:1 +骄 8 +x:8 +凶杀 1 +x:1 +劝架 1 +x:1 +马德里队 1 +x:1 +报馆 1 +x:1 +敞架 1 +x:1 +空间波 1 +x:1 +乏善可陈 1 +x:1 +猪年 1 +x:1 +庙子乡 1 +x:1 +律他 1 +x:1 +省价 1 +x:1 +强取豪夺 1 +x:1 +X 9 +x:9 +心肝宝贝 1 +x:1 +舞弊案 1 +x:1 +省份 1 +x:1 +法师 1 +x:1 +复查组 1 +x:1 +增养殖业 1 +x:1 +客货 1 +x:1 +绒花 1 +x:1 +转送 1 +x:1 +枞树 1 +x:1 +省事 1 +x:1 +教养员 1 +x:1 +乙肝 1 +x:1 +产业化 1 +x:1 +转速 1 +x:1 +谢拉罗 1 +x:1 +左下角 1 +x:1 +分斤掰两 1 +x:1 +葫瓜 1 +x:1 +涓滴 1 +x:1 +坐视不管 1 +x:1 +现代史 1 +x:1 +雄性 1 +x:1 +芦淞区 1 +x:1 +摆渡 1 +x:1 +柳 161 +x:161 +省亲 1 +x:1 +敌杀死 1 +x:1 +攻陷 1 +x:1 +杀人罪 1 +x:1 +湖北 1 +x:1 +文坛 1 +x:1 +汉寿县 1 +x:1 +求职者 1 +x:1 +男女 1 +x:1 +参保率 1 +x:1 +龙洞 1 +x:1 +星球 1 +x:1 +收入 1 +x:1 +头儿 1 +x:1 +小巴 1 +x:1 +防城港 1 +x:1 +乡级 1 +x:1 +经脉 1 +x:1 +接二连三 1 +x:1 +苞谷饭 1 +x:1 +首映式 1 +x:1 +一望无边 1 +x:1 +燕赵 1 +x:1 +清洗费 1 +x:1 +悲 18 +x:18 +应变力 1 +x:1 +咂咂 1 +x:1 +干枝 1 +x:1 +仄声 1 +x:1 +粉沙 1 +x:1 +诀 3 +x:3 +高高地 1 +x:1 +悬而未决 1 +x:1 +筋 6 +x:6 +脯子 1 +x:1 +涿河 1 +x:1 +绿叶丛 1 +x:1 +清江浦 1 +x:1 +面色 1 +x:1 +蹙 2 +x:2 +特委会 1 +x:1 +断炊 1 +x:1 +会餐 1 +x:1 +黄道吉日 1 +x:1 +监管法 1 +x:1 +信用所 1 +x:1 +宣城 1 +x:1 +桃园 1 +x:1 +集散点 1 +x:1 +世界观 1 +x:1 +文场 1 +x:1 +打糕 1 +x:1 +图钉 1 +x:1 +南河一村 1 +x:1 +硬弓 1 +x:1 +东倒西歪 1 +x:1 +输出地 1 +x:1 +浓密 1 +x:1 +美容厅 1 +x:1 +技巧运动 1 +x:1 +玉兰片 1 +x:1 +至多 1 +x:1 +塑料瓶 1 +x:1 +忙忙活活 1 +x:1 +五四运动 1 +x:1 +凶恶 1 +x:1 +七大姑 1 +x:1 +立论 1 +x:1 +延长 1 +x:1 +飞夺 1 +x:1 +阴冷 1 +x:1 +提蓄水 1 +x:1 +人物画 1 +x:1 +飞天 1 +x:1 +幼桃 1 +x:1 +货畅其流 1 +x:1 +云杉 1 +x:1 +咻 1 +x:1 +梳头 1 +x:1 +只好 1 +x:1 +坚城 1 +x:1 +云朵 1 +x:1 +酒鬼 1 +x:1 +厅局级 1 +x:1 +适量 1 +x:1 +飞奔 1 +x:1 +营业房 1 +x:1 +阴凉 1 +x:1 +瓜香 1 +x:1 +幼株 1 +x:1 +罢 68 +x:68 +广泛 1 +x:1 +迎风破浪 1 +x:1 +幼树 1 +x:1 +更换 1 +x:1 +轰鸣 1 +x:1 +谪守 1 +x:1 +大幅度 1 +x:1 +我一语 1 +x:1 +高空作业 1 +x:1 +日落而息 1 +x:1 +选段 1 +x:1 +广水 1 +x:1 +聚酯薄膜 1 +x:1 +倓 1 +x:1 +两三时 1 +x:1 +弹药库 1 +x:1 +图片展 1 +x:1 +圆周角 1 +x:1 +起跳台 1 +x:1 +除了 1 +x:1 +赋予 1 +x:1 +打算 1 +x:1 +保卫战 1 +x:1 +耳 63 +x:63 +旅游法 1 +x:1 +絮语 1 +x:1 +单行道 1 +x:1 +脏乱差 1 +x:1 +清闲自在 1 +x:1 +林边 1 +x:1 +高压线 1 +x:1 +广汽 1 +x:1 +嘶叫 1 +x:1 +红花岗区 1 +x:1 +除以 1 +x:1 +吊睛白额 1 +x:1 +狼嚎 1 +x:1 +嘉言 1 +x:1 +毁誉参半 1 +x:1 +等差级数 1 +x:1 +左半 1 +x:1 +圈儿 1 +x:1 +装饰品 1 +x:1 +五岔沟 1 +x:1 +云林 1 +x:1 +牛角梭 1 +x:1 +定地 1 +x:1 +无则加勉 1 +x:1 +凶悍 1 +x:1 +濉溪县 1 +x:1 +电讯 1 +x:1 +可能性 1 +x:1 +广汉 1 +x:1 +缺水区 1 +x:1 +牛角梳 1 +x:1 +七彩龟 1 +x:1 +卖命 1 +x:1 +游联 1 +x:1 +覃 24 +x:24 +艘次 1 +x:1 +喜烟 1 +x:1 +湖南 1 +x:1 +下陆区 1 +x:1 +冬练三九 1 +x:1 +宝岛 1 +x:1 +挑水者 1 +x:1 +水源地 1 +x:1 +心扉 1 +x:1 +因数 1 +x:1 +恣意妄为 1 +x:1 +腊鱼 1 +x:1 +瑞签 1 +x:1 +金闪闪 1 +x:1 +出口不凡 1 +x:1 +转院 1 +x:1 +购货者 1 +x:1 +苦木树 1 +x:1 +群情 1 +x:1 +念念有词 1 +x:1 +叨咕 1 +x:1 +立誓 1 +x:1 +演讲会 1 +x:1 +盾牌 1 +x:1 +德 370 +x:370 +文凭 1 +x:1 +折寿 1 +x:1 +助威声 1 +x:1 +爆发 1 +x:1 +龙母 1 +x:1 +双循环 1 +x:1 +农贷 1 +x:1 +打穴 1 +x:1 +商品猪 1 +x:1 +血斑 1 +x:1 +金沙萨 1 +x:1 +干休所 1 +x:1 +母公司 1 +x:1 +产权人 1 +x:1 +清一色 1 +x:1 +俄文楼 1 +x:1 +嘉许 1 +x:1 +实验院 1 +x:1 +龙潭湖 1 +x:1 +缙云山 1 +x:1 +淫 5 +x:5 +馥郁 1 +x:1 +中宁县 1 +x:1 +石头寨村 1 +x:1 +转阴 1 +x:1 +校内 1 +x:1 +坞乡集 1 +x:1 +坚固 1 +x:1 +福分 1 +x:1 +七彩鸟 1 +x:1 +大通河 1 +x:1 +符号串 1 +x:1 +一声令下 1 +x:1 +各有所好 1 +x:1 +农贸 1 +x:1 +曲艺队 1 +x:1 +股值 1 +x:1 +文具 1 +x:1 +文兴 1 +x:1 +适逢 1 +x:1 +钦 38 +x:38 +家鸽 1 +x:1 +身处 1 +x:1 +打窖 1 +x:1 +宣内 1 +x:1 +输出入 1 +x:1 +卖唱 1 +x:1 +荷衣面 1 +x:1 +蝎毒 1 +x:1 +朱中镇 1 +x:1 +违禁品 1 +x:1 +含嗔轻诉 1 +x:1 +头坝 1 +x:1 +隋末 1 +x:1 +大半年 1 +x:1 +赠品 1 +x:1 +会计证 1 +x:1 +棋赛 1 +x:1 +奎苏乡 1 +x:1 +许都 1 +x:1 +宁晋县 1 +x:1 +自查 1 +x:1 +蝎 4 +x:4 +大洋坝 1 +x:1 +劝慰 1 +x:1 +男式 1 +x:1 +刑名 1 +x:1 +堪称一绝 1 +x:1 +祈谷 1 +x:1 +机灵鬼 1 +x:1 +赔笑 1 +x:1 +转隶 1 +x:1 +八面威风 1 +x:1 +开拓进取 1 +x:1 +钢琴厂 1 +x:1 +沙荒地 1 +x:1 +赘述 1 +x:1 +接标 1 +x:1 +隋朝 1 +x:1 +吸储 1 +x:1 +挨饿 1 +x:1 +以东 1 +x:1 +公假 1 +x:1 +白条肉 1 +x:1 +山丘 1 +x:1 +缤纷 1 +x:1 +山东 1 +x:1 +颏 1 +x:1 +宣判 1 +x:1 +亲侄 1 +x:1 +美容器 1 +x:1 +哈蜜瓜 1 +x:1 +自民党 1 +x:1 +酗酒 1 +x:1 +阴历 1 +x:1 +酒饭 1 +x:1 +山下 1 +x:1 +山上 1 +x:1 +盈怀 1 +x:1 +飘动 1 +x:1 +中山市 1 +x:1 +天星堰村 1 +x:1 +山丹 1 +x:1 +才貌 1 +x:1 +诗书门第 1 +x:1 +巫术 1 +x:1 +游移 1 +x:1 +中山大学 1 +x:1 +浅成岩 1 +x:1 +塑料盆 1 +x:1 +评审费 1 +x:1 +将军 1 +x:1 +南娄乡 1 +x:1 +鲜鲜亮亮 1 +x:1 +从没 1 +x:1 +对立物 1 +x:1 +活动者 1 +x:1 +鳕鱼 1 +x:1 +猎物 1 +x:1 +双循环赛 1 +x:1 +弹丸 1 +x:1 +牵住 1 +x:1 +慢 127 +x:127 +小麦秆 1 +x:1 +促膝谈心 1 +x:1 +非税 1 +x:1 +知县 1 +x:1 +阴差阳错 1 +x:1 +莱州市 1 +x:1 +跳楼 1 +x:1 +默然 1 +x:1 +翼手龙 1 +x:1 +山乡 1 +x:1 +蔓蔓 1 +x:1 +土肥站 1 +x:1 +主叫方 1 +x:1 +亲信 1 +x:1 +铜筋铁骨 1 +x:1 +卖国 1 +x:1 +国土厅 1 +x:1 +爽爽然 1 +x:1 +语态 1 +x:1 +重温旧梦 1 +x:1 +武陵源 1 +x:1 +本镇 1 +x:1 +聚讼纷纭 1 +x:1 +指数性 1 +x:1 +有光纸 1 +x:1 +一专多能 1 +x:1 +头名 1 +x:1 +自行车厂 1 +x:1 +血晕 1 +x:1 +电视 1 +x:1 +浓度 1 +x:1 +下花园 1 +x:1 +八九月 1 +x:1 +黑压压 1 +x:1 +挪威队 1 +x:1 +群众化 1 +x:1 +寂灭 1 +x:1 +山人 1 +x:1 +用款国 1 +x:1 +肛管 1 +x:1 +钟点工 1 +x:1 +干支沟 1 +x:1 +团总支 1 +x:1 +村社党 1 +x:1 +珠贝 1 +x:1 +甲状软骨 1 +x:1 +壮美 1 +x:1 +雄文 1 +x:1 +边缘化 1 +x:1 +捐款 1 +x:1 +乐儿 1 +x:1 +游艺 1 +x:1 +野鹿 1 +x:1 +麦金西 1 +x:1 +全罗南道 1 +x:1 +跳槽 1 +x:1 +酒香 1 +x:1 +安达市 1 +x:1 +诮 1 +x:1 +酒馆 1 +x:1 +蓝领 1 +x:1 +筹 46 +x:46 +打私 1 +x:1 +维斯瓦 1 +x:1 +胖墩儿 1 +x:1 +懦弱 1 +x:1 +男工 1 +x:1 +宝库 1 +x:1 +修修改改 1 +x:1 +打破 1 +x:1 +拆迁 1 +x:1 +输注 1 +x:1 +延陵 1 +x:1 +小局 1 +x:1 +文友 1 +x:1 +亲事 1 +x:1 +文号 1 +x:1 +文史 1 +x:1 +亲亲 1 +x:1 +初试锋芒 1 +x:1 +供销员 1 +x:1 +急救盒 1 +x:1 +亲人 1 +x:1 +阻断性 1 +x:1 +嵩山 1 +x:1 +宝座 1 +x:1 +电表 1 +x:1 +随请随到 1 +x:1 +崇祯 1 +x:1 +拿下 1 +x:1 +黄澄澄 1 +x:1 +宣化 1 +x:1 +山体 1 +x:1 +渥太华市 1 +x:1 +埠 2 +x:2 +盘王节 1 +x:1 +才路 1 +x:1 +如醉如狂 1 +x:1 +嵌 18 +x:18 +深夜 1 +x:1 +监 7 +x:7 +里头 1 +x:1 +房屋基 1 +x:1 +最惠国 1 +x:1 +休渔 1 +x:1 +荒古 1 +x:1 +新华书店 1 +x:1 +文县 1 +x:1 +爆出 1 +x:1 +马龙县 1 +x:1 +车损险 1 +x:1 +律师 1 +x:1 +里外 1 +x:1 +监利县 1 +x:1 +御寒 1 +x:1 +除恶务尽 1 +x:1 +发起人 1 +x:1 +亲代 1 +x:1 +催命 1 +x:1 +翕动 1 +x:1 +黝黑 1 +x:1 +乌桕树 1 +x:1 +含炭量 1 +x:1 +语意 1 +x:1 +文博 1 +x:1 +宛如 1 +x:1 +丁当 1 +x:1 +招待会 1 +x:1 +喷墨 1 +x:1 +文协 1 +x:1 +上升村 1 +x:1 +菁华 1 +x:1 +手提袋 1 +x:1 +常青不衰 1 +x:1 +广漠 1 +x:1 +文卷 1 +x:1 +低级者 1 +x:1 +客观 1 +x:1 +股分 1 +x:1 +马拉坎 1 +x:1 +酒食 1 +x:1 +明珠投暗 1 +x:1 +打碎 1 +x:1 +水泊梁山 1 +x:1 +中左 1 +x:1 +文化 1 +x:1 +手到病除 1 +x:1 +殷殷然 1 +x:1 +果树 1 +x:1 +游荡 1 +x:1 +无从下手 1 +x:1 +输水 1 +x:1 +跳棋 1 +x:1 +打磨 1 +x:1 +上升期 1 +x:1 +西龙门村 1 +x:1 +准尉 1 +x:1 +输氧 1 +x:1 +大通港 1 +x:1 +过程论 1 +x:1 +摇把子 1 +x:1 +喜爱 1 +x:1 +如花似锦 1 +x:1 +宣誓者 1 +x:1 +大路坡 1 +x:1 +获悉 1 +x:1 +寂然 1 +x:1 +星火 1 +x:1 +爬山 1 +x:1 +宣发 1 +x:1 +为虎作伥 1 +x:1 +行驶证 1 +x:1 +猎奇者 1 +x:1 +跟进 1 +x:1 +戏车 1 +x:1 +* 180 +x:180 +忙里偷闲 1 +x:1 +军士长 1 +x:1 +爱理不理 1 +x:1 +举目四望 1 +x:1 +外蒙 1 +x:1 +营口 1 +x:1 +诟病 1 +x:1 +攒动 1 +x:1 +辩护 1 +x:1 +取长补短 1 +x:1 +龙马湖 1 +x:1 +归宿点 1 +x:1 +面馆 1 +x:1 +经验 1 +x:1 +后宰门 1 +x:1 +面馍 1 +x:1 +焚烧炉 1 +x:1 +墨城 1 +x:1 +监理 1 +x:1 +开口子 1 +x:1 +迎迓 1 +x:1 +气势磅礴 1 +x:1 +地区差价 1 +x:1 +零取 1 +x:1 +上周一 1 +x:1 +独立团 1 +x:1 +节奏 1 +x:1 +退职 1 +x:1 +蓝靛 1 +x:1 +出场 1 +x:1 +西五路 1 +x:1 +崇明 1 +x:1 +巫神 1 +x:1 +话剧史 1 +x:1 +通海 1 +x:1 +家规 1 +x:1 +发高烧 1 +x:1 +双画面 1 +x:1 +骑缝 1 +x:1 +颤巍巍 1 +x:1 +庄稼院 1 +x:1 +建设省 1 +x:1 +出土 1 +x:1 +小将 1 +x:1 +打杂 1 +x:1 +客队 1 +x:1 +扶优汰劣 1 +x:1 +吃 1447 +x:1447 +天青 1 +x:1 +树枝 1 +x:1 +旅游热 1 +x:1 +转诊 1 +x:1 +打架 1 +x:1 +步行区 1 +x:1 +打枪 1 +x:1 +伪政权 1 +x:1 +莫高窟 1 +x:1 +戏迷 1 +x:1 +逶迤 1 +x:1 +骨坏死病 1 +x:1 +书目型 1 +x:1 +那段 1 +x:1 +百折不回 1 +x:1 +场里 1 +x:1 +绵羊毛 1 +x:1 +誉称 1 +x:1 +亲儿 1 +x:1 +白条鸭 1 +x:1 +兴奋状 1 +x:1 +旁边 1 +x:1 +存钱 1 +x:1 +劳工 1 +x:1 +违约金 1 +x:1 +穷原竟委 1 +x:1 +杀风景 1 +x:1 +脚射 1 +x:1 +果真 1 +x:1 +广灵 1 +x:1 +苌 1 +x:1 +田径史 1 +x:1 +剥落 1 +x:1 +宜小则小 1 +x:1 +游鱼 1 +x:1 +脚尖 1 +x:1 +爱鸟护鸟 1 +x:1 +电压计 1 +x:1 +旅游点 1 +x:1 +惠 21 +x:21 +互助点 1 +x:1 +信札 1 +x:1 +转让 1 +x:1 +辩才 1 +x:1 +纸老虎 1 +x:1 +薄荷 1 +x:1 +金山区 1 +x:1 +录取率 1 +x:1 +和平权 1 +x:1 +伸手派 1 +x:1 +引航 1 +x:1 +弹入 1 +x:1 +素酒 1 +x:1 +井 165 +x:165 +群系 1 +x:1 +和平村 1 +x:1 +羞羞答答 1 +x:1 +阿莱曼 1 +x:1 +灌 28 +x:28 +味儿 1 +x:1 +粉白 1 +x:1 +洱海 1 +x:1 +朝阳镇 1 +x:1 +缀连 1 +x:1 +幼畜 1 +x:1 +生油层 1 +x:1 +面颊 1 +x:1 +墨囊 1 +x:1 +清汤 1 +x:1 +隔靴搔痒 1 +x:1 +缴 105 +x:105 +面额 1 +x:1 +孔明灯 1 +x:1 +喜泪 1 +x:1 +大有文章 1 +x:1 +刹车板 1 +x:1 +无神论者 1 +x:1 +庞伟 1 +x:1 +热交换 1 +x:1 +自然光 1 +x:1 +进口商 1 +x:1 +泡茶 1 +x:1 +除却 1 +x:1 +油炸鬼 1 +x:1 +强化 1 +x:1 +中巴 1 +x:1 +功夫片 1 +x:1 +月事 1 +x:1 +有灾必救 1 +x:1 +叫驴 1 +x:1 +果皮 1 +x:1 +雷利赞 1 +x:1 +面食 1 +x:1 +亚佩克 1 +x:1 +叫骂 1 +x:1 +得 5482 +x:5482 +集主 1 +x:1 +雄立 1 +x:1 +朝阳门 1 +x:1 +粉盒 1 +x:1 +舍 46 +x:46 +山农 1 +x:1 +嘉靖 1 +x:1 +出国 1 +x:1 +聂庄村 1 +x:1 +除去 1 +x:1 +山冈 1 +x:1 +成分论 1 +x:1 +会荒 1 +x:1 +法典 1 +x:1 +地震带 1 +x:1 +分会场 1 +x:1 +曾经沧海 1 +x:1 +走味儿 1 +x:1 +龙眼 1 +x:1 +团体票 1 +x:1 +泡菜 1 +x:1 +信马由缰 1 +x:1 +喜气 1 +x:1 +一颦一笑 1 +x:1 +宏大 1 +x:1 +法共 1 +x:1 +变局 1 +x:1 +廊 10 +x:10 +打更 1 +x:1 +为国捐躯 1 +x:1 +赔本 1 +x:1 +外长级 1 +x:1 +腊肉 1 +x:1 +泰达队 1 +x:1 +图像型 1 +x:1 +除号 1 +x:1 +用车者 1 +x:1 +雷达兵 1 +x:1 +山凹 1 +x:1 +舌面前音 1 +x:1 +宁武镇 1 +x:1 +医师法 1 +x:1 +跟踪 1 +x:1 +回目 1 +x:1 +粉皮 1 +x:1 +腊肠 1 +x:1 +康熙 1 +x:1 +家计 1 +x:1 +真善美 1 +x:1 +礼花 1 +x:1 +挥挥 1 +x:1 +余光 1 +x:1 +表象 1 +x:1 +混交林 1 +x:1 +家训 1 +x:1 +省城 1 +x:1 +哗哗 1 +x:1 +亲历 1 +x:1 +肃贪倡廉 1 +x:1 +药香 1 +x:1 +化 108 +x:108 +忆及 1 +x:1 +歉收 1 +x:1 +电镀 1 +x:1 +麻辣烫 1 +x:1 +家访 1 +x:1 +文件 1 +x:1 +如雷似火 1 +x:1 +漫不经心 1 +x:1 +还款率 1 +x:1 +连铸机 1 +x:1 +组照 1 +x:1 +静悄悄 1 +x:1 +遮风挡雨 1 +x:1 +回电 1 +x:1 +大杂院儿 1 +x:1 +特写大书 1 +x:1 +礼节 1 +x:1 +恶疾 1 +x:1 +救生舱 1 +x:1 +宣东 1 +x:1 +裆部 1 +x:1 +肩膀 1 +x:1 +力学会 1 +x:1 +篝火 1 +x:1 +救生艇 1 +x:1 +出售 1 +x:1 +变心 1 +x:1 +群群 1 +x:1 +沦落 1 +x:1 +正确率 1 +x:1 +一望无际 1 +x:1 +节子 1 +x:1 +树杈 1 +x:1 +桃体 1 +x:1 +润笔 1 +x:1 +高尔夫球 1 +x:1 +轻装简从 1 +x:1 +亲友 1 +x:1 +剧照 1 +x:1 +骆驼 1 +x:1 +鹅观草 1 +x:1 +退色 1 +x:1 +驰 17 +x:17 +电锯 1 +x:1 +电键 1 +x:1 +亲口 1 +x:1 +杂草丛生 1 +x:1 +肩臂 1 +x:1 +语系 1 +x:1 +痨病 1 +x:1 +戏路 1 +x:1 +输水渠 1 +x:1 +正投影 1 +x:1 +变异 1 +x:1 +粘结力 1 +x:1 +支撑力 1 +x:1 +小岭 1 +x:1 +延误 1 +x:1 +学习班 1 +x:1 +金属片 1 +x:1 +转角 1 +x:1 +会聚 1 +x:1 +螺旋藻 1 +x:1 +武秀才 1 +x:1 +颗粒剂 1 +x:1 +女神 1 +x:1 +积累性 1 +x:1 +躺柜 1 +x:1 +攥 15 +x:15 +电闸 1 +x:1 +打斜 1 +x:1 +打斗 1 +x:1 +山势 1 +x:1 +文书 1 +x:1 +电门 1 +x:1 +地图板 1 +x:1 +电闪 1 +x:1 +兴奋点 1 +x:1 +山道口 1 +x:1 +司机制 1 +x:1 +文丑 1 +x:1 +可敬可佩 1 +x:1 +可锻铸铁 1 +x:1 +文丛 1 +x:1 +会考 1 +x:1 +浊音 1 +x:1 +倒映成趣 1 +x:1 +棋技 1 +x:1 +大讲堂 1 +x:1 +弹劾 1 +x:1 +盘 292 +x:292 +南柯梦 1 +x:1 +僻 3 +x:3 +水电站 1 +x:1 +福建团 1 +x:1 +总编辑 1 +x:1 +变形 1 +x:1 +始发点 1 +x:1 +老夫子 1 +x:1 +亚戈迪纳 1 +x:1 +鸵鸟政策 1 +x:1 +打旋 1 +x:1 +弹力 1 +x:1 +琥珀酸 1 +x:1 +文中 1 +x:1 +筛骨 1 +x:1 +打砸抢烧 1 +x:1 +谬之千里 1 +x:1 +后盖板 1 +x:1 +文保 1 +x:1 +宣传 1 +x:1 +商水县 1 +x:1 +脚心 1 +x:1 +贵峰籍 1 +x:1 +山包 1 +x:1 +越南式 1 +x:1 +万发林 1 +x:1 +话不投机 1 +x:1 +那样 1 +x:1 +窃窃细语 1 +x:1 +塞克萨德 1 +x:1 +挥戈 1 +x:1 +再版书 1 +x:1 +山区 1 +x:1 +星河 1 +x:1 +左岸 1 +x:1 +干涉仪 1 +x:1 +社保局 1 +x:1 +欧美 1 +x:1 +崇敬 1 +x:1 +打搅 1 +x:1 +受援地 1 +x:1 +青瓦台 1 +x:1 +山南 1 +x:1 +壮戏 1 +x:1 +图谱 1 +x:1 +身不由己 1 +x:1 +得之不易 1 +x:1 +立地 1 +x:1 +监督 1 +x:1 +巴哈马 1 +x:1 +大兴寨村 1 +x:1 +抵消 1 +x:1 +股价 1 +x:1 +恢复系 1 +x:1 +弊病 1 +x:1 +信差 1 +x:1 +股份 1 +x:1 +出名 1 +x:1 +肩胛 1 +x:1 +血管 1 +x:1 +孝顺 1 +x:1 +挥手 1 +x:1 +塘桥 1 +x:1 +图谋 1 +x:1 +大港区 1 +x:1 +译意风 1 +x:1 +可耕地 1 +x:1 +戏谑 1 +x:1 +马到成功 1 +x:1 +书声 1 +x:1 +乌兰巴托 1 +x:1 +会文山房 1 +x:1 +备 89 +x:89 +闻人 1 +x:1 +笑纳 1 +x:1 +上周二 1 +x:1 +唧唧 1 +x:1 +农投 1 +x:1 +谕 2 +x:2 +捡漏 1 +x:1 +作坊式 1 +x:1 +南兴镇 1 +x:1 +轮机手 1 +x:1 +一事当前 1 +x:1 +含水率 1 +x:1 +电铃 1 +x:1 +关连 1 +x:1 +哗啦 1 +x:1 +自控 1 +x:1 +电铸 1 +x:1 +一丝不挂 1 +x:1 +出品 1 +x:1 +电铲 1 +x:1 +镇江 1 +x:1 +铜金矿 1 +x:1 +逐辆 1 +x:1 +降水量 1 +x:1 +小岛 1 +x:1 +行政部 1 +x:1 +龙电 1 +x:1 +漠不相关 1 +x:1 +彤云 1 +x:1 +画报社 1 +x:1 +电钟 1 +x:1 +面善 1 +x:1 +僻巷 1 +x:1 +地震局 1 +x:1 +扇状 1 +x:1 +唧啾 1 +x:1 +捋 5 +x:5 +围三缺一 1 +x:1 +揭碑 1 +x:1 +变幅 1 +x:1 +崇文 1 +x:1 +桃仙 1 +x:1 +山参 1 +x:1 +电针 1 +x:1 +星汉 1 +x:1 +丈母 1 +x:1 +挥拳 1 +x:1 +劳庄 1 +x:1 +挥拍 1 +x:1 +电钻 1 +x:1 +矛头 1 +x:1 +尚义县 1 +x:1 +强压 1 +x:1 +电钳 1 +x:1 +苦辣酸甜 1 +x:1 +变幻 1 +x:1 +山口 1 +x:1 +电钮 1 +x:1 +文传 1 +x:1 +打擂 1 +x:1 +养生功 1 +x:1 +总结会 1 +x:1 +没深没浅 1 +x:1 +专用车 1 +x:1 +冻干 1 +x:1 +接站车 1 +x:1 +操守 1 +x:1 +记挂 1 +x:1 +血糖 1 +x:1 +浸湿 1 +x:1 +平步青云 1 +x:1 +遏制 1 +x:1 +酒药 1 +x:1 +大粪球 1 +x:1 +戴月披星 1 +x:1 +山后 1 +x:1 +鱼腹 1 +x:1 +头人 1 +x:1 +农运 1 +x:1 +化学纤维 1 +x:1 +进口值 1 +x:1 +切入点 1 +x:1 +三塘乡 1 +x:1 +五环旗 1 +x:1 +转轨 1 +x:1 +心猿意马 1 +x:1 +转轴 1 +x:1 +一不为名 1 +x:1 +中药界 1 +x:1 +龙口市 1 +x:1 +出卖 1 +x:1 +悲惋 1 +x:1 +萨克森州 1 +x:1 +峭岐镇 1 +x:1 +省内 1 +x:1 +虚位以待 1 +x:1 +婴儿 1 +x:1 +网球队 1 +x:1 +线路板 1 +x:1 +血粉 1 +x:1 +刚柔并济 1 +x:1 +不可动摇 1 +x:1 +毕 111 +x:111 +宾语 1 +x:1 +天祝 1 +x:1 +推心置腹 1 +x:1 +包子铺 1 +x:1 +打捞 1 +x:1 +浸渍 1 +x:1 +坚信 1 +x:1 +老街旧邻 1 +x:1 +背毛 1 +x:1 +铁白粉 1 +x:1 +胆红素 1 +x:1 +宾词 1 +x:1 +禽畜产品 1 +x:1 +打捆 1 +x:1 +转过 1 +x:1 +家财 1 +x:1 +韵事 1 +x:1 +转迁 1 +x:1 +包教包会 1 +x:1 +图说 1 +x:1 +出口 1 +x:1 +僚气 1 +x:1 +危在旦夕 1 +x:1 +应河 1 +x:1 +黄泥洼镇 1 +x:1 +打探 1 +x:1 +目染 1 +x:1 +家贼 1 +x:1 +府 28 +x:28 +别无出路 1 +x:1 +织金县 1 +x:1 +偷者 1 +x:1 +变天 1 +x:1 +酒菜 1 +x:1 +抵押权 1 +x:1 +种鸡场 1 +x:1 +圭 3 +x:3 +泗水县 1 +x:1 +墨华 1 +x:1 +转述 1 +x:1 +辩明 1 +x:1 +过得硬 1 +x:1 +联络线 1 +x:1 +出发 1 +x:1 +旁证 1 +x:1 +备案单 1 +x:1 +党同伐异 1 +x:1 +催促 1 +x:1 +繇 1 +x:1 +图记 1 +x:1 +名副其实 1 +x:1 +咨询队 1 +x:1 +东湖村 1 +x:1 +出去 1 +x:1 +夜郎自大 1 +x:1 +山响 1 +x:1 +地震学 1 +x:1 +主通道 1 +x:1 +电视电话 1 +x:1 +中东社 1 +x:1 +引力能 1 +x:1 +出厂 1 +x:1 +艺术化 1 +x:1 +峰 75 +x:75 +转达 1 +x:1 +石山区 1 +x:1 +龙王 1 +x:1 +酒色 1 +x:1 +伫立 1 +x:1 +预示 1 +x:1 +邮电史 1 +x:1 +职介所 1 +x:1 +钟楼杯 1 +x:1 +可可西里 1 +x:1 +粉牌 1 +x:1 +管理科学 1 +x:1 +七彩虹 1 +x:1 +诸侯王 1 +x:1 +马放南山 1 +x:1 +哗变 1 +x:1 +毫无用处 1 +x:1 +慕田峪关 1 +x:1 +错误率 1 +x:1 +总是 1 +x:1 +无证无照 1 +x:1 +封闭性 1 +x:1 +如醉如梦 1 +x:1 +行政院 1 +x:1 +霉雨 1 +x:1 +瓦尔登湖 1 +x:1 +节尾 1 +x:1 +不虞之誉 1 +x:1 +钓鱼台 1 +x:1 +浸漫 1 +x:1 +大众性 1 +x:1 +纵深行 1 +x:1 +有增无减 1 +x:1 +总额度 1 +x:1 +栽培 1 +x:1 +挨个儿 1 +x:1 +打扰 1 +x:1 +籼米 1 +x:1 +校准 1 +x:1 +打扫 1 +x:1 +洲际 1 +x:1 +灵山岛 1 +x:1 +根治性 1 +x:1 +打扮 1 +x:1 +弹唱 1 +x:1 +捣蛋鬼 1 +x:1 +小古庄 1 +x:1 +不法分子 1 +x:1 +打打 1 +x:1 +洒热血 1 +x:1 +戏言 1 +x:1 +打手 1 +x:1 +横丹乡 1 +x:1 +出列 1 +x:1 +太守府 1 +x:1 +特许者 1 +x:1 +诗文集 1 +x:1 +引导牌 1 +x:1 +拓荒者 1 +x:1 +出勤 1 +x:1 +广电 1 +x:1 +同轴电缆 1 +x:1 +尊严感 1 +x:1 +滑轮组 1 +x:1 +果片 1 +x:1 +收入者 1 +x:1 +文人学士 1 +x:1 +遂川 1 +x:1 +兰山区 1 +x:1 +乡村式 1 +x:1 +机器声 1 +x:1 +超前性 1 +x:1 +打折 1 +x:1 +拖三拉四 1 +x:1 +叔叔 1 +x:1 +大西山 1 +x:1 +中心校 1 +x:1 +亲吻 1 +x:1 +就 16877 +x:16877 +渗水 1 +x:1 +温度计 1 +x:1 +百衲本 1 +x:1 +粉妆女子 1 +x:1 +信汇 1 +x:1 +云纱 1 +x:1 +共和派 1 +x:1 +出动 1 +x:1 +存量 1 +x:1 +数据链 1 +x:1 +打拳 1 +x:1 +疗法 1 +x:1 +羞耻心 1 +x:1 +噪声源 1 +x:1 +煤层气 1 +x:1 +书斋式 1 +x:1 +杂交种 1 +x:1 +找出路 1 +x:1 +转身 1 +x:1 +粉状 1 +x:1 +出力 1 +x:1 +脚头 1 +x:1 +旧石器 1 +x:1 +余江县 1 +x:1 +技委 1 +x:1 +机器字 1 +x:1 +缆 13 +x:13 +攻读 1 +x:1 +出入 1 +x:1 +薄薄 1 +x:1 +出典 1 +x:1 +升华 1 +x:1 +出兵 1 +x:1 +不好意思 1 +x:1 +出具 1 +x:1 +血统 1 +x:1 +杂交稻 1 +x:1 +水力 1 +x:1 +现代人 1 +x:1 +除名 1 +x:1 +山嘴 1 +x:1 +转赠 1 +x:1 +伦 7 +x:7 +青年宫 1 +x:1 +船头 1 +x:1 +不得要领 1 +x:1 +商品案 1 +x:1 +莹 20 +x:20 +中心段 1 +x:1 +镇江市 1 +x:1 +出兑 1 +x:1 +过节费 1 +x:1 +意见箱 1 +x:1 +淋巴腺 1 +x:1 +夸口 1 +x:1 +节录 1 +x:1 +监牢 1 +x:1 +瓶贴 1 +x:1 +攻讦 1 +x:1 +观驾山 1 +x:1 +川 93 +x:93 +普通班 1 +x:1 +血红 1 +x:1 +同等学历 1 +x:1 +应付款 1 +x:1 +克罗地亚 1 +x:1 +线性方程 1 +x:1 +挥杆 1 +x:1 +狂风怒号 1 +x:1 +匈奴 1 +x:1 +转贷 1 +x:1 +肆无忌弹 1 +x:1 +组画 1 +x:1 +卖价 1 +x:1 +主婚人 1 +x:1 +人类学家 1 +x:1 +省去 1 +x:1 +温度表 1 +x:1 +外文书 1 +x:1 +酒吧台 1 +x:1 +一品红 1 +x:1 +少生快富 1 +x:1 +吐谷浑 1 +x:1 +渗漏 1 +x:1 +怨声 1 +x:1 +浸泡 1 +x:1 +节律 1 +x:1 +集众思 1 +x:1 +电量 1 +x:1 +霍山 1 +x:1 +颇具匠心 1 +x:1 +出出 1 +x:1 +出击 1 +x:1 +发源地 1 +x:1 +图解 1 +x:1 +班门弄斧 1 +x:1 +监犯 1 +x:1 +资产额 1 +x:1 +齐齐 1 +x:1 +喜光植物 1 +x:1 +门诊室 1 +x:1 +目无 1 +x:1 +生产率 1 +x:1 +长袍儿 1 +x:1 +玮 5 +x:5 +商品棉 1 +x:1 +软刀子 1 +x:1 +省却 1 +x:1 +吃不起 1 +x:1 +省市区 1 +x:1 +房屋业 1 +x:1 +淳佑九年 1 +x:1 +监狱 1 +x:1 +手书字 1 +x:1 +泰姬陵 1 +x:1 +旁观 1 +x:1 +事不过三 1 +x:1 +郄 5 +x:5 +唱对台戏 1 +x:1 +坐待 1 +x:1 +货郎图 1 +x:1 +输电 1 +x:1 +许诺 1 +x:1 +皮鲁兹队 1 +x:1 +卖乖 1 +x:1 +僻壤 1 +x:1 +不出所料 1 +x:1 +博学院 1 +x:1 +变子 1 +x:1 +捐献 1 +x:1 +观音阁 1 +x:1 +圃 2 +x:2 +果然 1 +x:1 +浸沉 1 +x:1 +龙灯 1 +x:1 +土肥所 1 +x:1 +山国 1 +x:1 +茂物 1 +x:1 +地霉素 1 +x:1 +忠诚感 1 +x:1 +林间 1 +x:1 +喜欢 1 +x:1 +劳宣 1 +x:1 +语素 1 +x:1 +省区 1 +x:1 +河北杨 1 +x:1 +碳塑 1 +x:1 +戏衣 1 +x:1 +毒气弹头 1 +x:1 +图表 1 +x:1 +通气 1 +x:1 +叔公 1 +x:1 +祖母 1 +x:1 +天诛地灭 1 +x:1 +倚 14 +x:14 +永登县 1 +x:1 +大是大非 1 +x:1 +戏行 1 +x:1 +妖里妖气 1 +x:1 +小潢河 1 +x:1 +涓水之滨 1 +x:1 +粉灰 1 +x:1 +山场 1 +x:1 +甬 7 +x:7 +景阳岗 1 +x:1 +横渡 1 +x:1 +精神性 1 +x:1 +记性 1 +x:1 +龙沙 1 +x:1 +突马特 1 +x:1 +弹坑 1 +x:1 +谱表 1 +x:1 +自费生 1 +x:1 +霍州 1 +x:1 +淤地坝 1 +x:1 +塘水 1 +x:1 +导游员 1 +x:1 +生产物 1 +x:1 +宣炉 1 +x:1 +语种 1 +x:1 +执勤点 1 +x:1 +律动 1 +x:1 +古谣 1 +x:1 +滑 90 +x:90 +帮扶带 1 +x:1 +南梆子 1 +x:1 +拉塔基亚 1 +x:1 +最优化 1 +x:1 +零售点 1 +x:1 +司处级 1 +x:1 +山坳 1 +x:1 +保卫科 1 +x:1 +勘探井 1 +x:1 +敞篷 1 +x:1 +山坡 1 +x:1 +酒者 1 +x:1 +淫乱 1 +x:1 +回火 1 +x:1 +酒考 1 +x:1 +稳进快出 1 +x:1 +记恨 1 +x:1 +山坪 1 +x:1 +同等学力 1 +x:1 +重灾户 1 +x:1 +浸淫 1 +x:1 +节庆 1 +x:1 +福建厅 1 +x:1 +舌状花 1 +x:1 +柴米油盐 1 +x:1 +云系 1 +x:1 +肺结核 1 +x:1 +从略 1 +x:1 +溯源 1 +x:1 +克隆牛 1 +x:1 +自然型 1 +x:1 +回炉 1 +x:1 +磁路 1 +x:1 +捐物 1 +x:1 +旋光性 1 +x:1 +沂蒙 1 +x:1 +骞 9 +x:9 +美洲 1 +x:1 +币面 1 +x:1 +引导灯 1 +x:1 +暮气 1 +x:1 +戏装 1 +x:1 +精神病科 1 +x:1 +打成一片 1 +x:1 +国务委员 1 +x:1 +塘沽 1 +x:1 +谅山省 1 +x:1 +谨言慎行 1 +x:1 +大众报 1 +x:1 +不法之徒 1 +x:1 +哂 2 +x:2 +白色棉 1 +x:1 +健忘症 1 +x:1 +火管枪 1 +x:1 +浸润 1 +x:1 +马提尼克 1 +x:1 +运 268 +x:268 +千分制 1 +x:1 +血缘 1 +x:1 +大仁大智 1 +x:1 +天真烂漫 1 +x:1 +子弟兵 1 +x:1 +旧体诗 1 +x:1 +莼菜 1 +x:1 +西王母 1 +x:1 +三色旗 1 +x:1 +阴着儿 1 +x:1 +中英街 1 +x:1 +名不副实 1 +x:1 +输球 1 +x:1 +田家会镇 1 +x:1 +叭儿狗 1 +x:1 +俯伏 1 +x:1 +出彩 1 +x:1 +论坛会 1 +x:1 +胜算 1 +x:1 +知足常乐 1 +x:1 +律己 1 +x:1 +情侣 1 +x:1 +古交市 1 +x:1 +冷热水 1 +x:1 +来回来去 1 +x:1 +葡萄园主 1 +x:1 +陪同 1 +x:1 +敲打 1 +x:1 +杭州路 1 +x:1 +牵头 1 +x:1 +强买强卖 1 +x:1 +中沙镇 1 +x:1 +闲散 1 +x:1 +永 187 +x:187 +信尾 1 +x:1 +礼袋 1 +x:1 +统筹金 1 +x:1 +乡乡镇镇 1 +x:1 +测雨站 1 +x:1 +特许费 1 +x:1 +翅 7 +x:7 +山塘 1 +x:1 +外汇率 1 +x:1 +眉眼高低 1 +x:1 +标兵船 1 +x:1 +干云蔽日 1 +x:1 +血雨腥风 1 +x:1 +生出 1 +x:1 +体细胞 1 +x:1 +百感交集 1 +x:1 +救生衣 1 +x:1 +经七路 1 +x:1 +狗皮 1 +x:1 +目次 1 +x:1 +挺杆 1 +x:1 +库命令 1 +x:1 +礼治 1 +x:1 +无绳话机 1 +x:1 +桃江路 1 +x:1 +活地狱 1 +x:1 +漂染厂 1 +x:1 +三屉桌 1 +x:1 +替 115 +x:115 +星期 1 +x:1 +分公司 1 +x:1 +获知 1 +x:1 +锉 1 +x:1 +定向招生 1 +x:1 +始发站 1 +x:1 +变现性 1 +x:1 +建筑学 1 +x:1 +信赖感 1 +x:1 +柔情绰态 1 +x:1 +工资本 1 +x:1 +草底儿 1 +x:1 +剪报 1 +x:1 +弹壳 1 +x:1 +自打 1 +x:1 +黔南州 1 +x:1 +当阳市 1 +x:1 +挨近 1 +x:1 +闭关自守 1 +x:1 +控制点 1 +x:1 +扬眉吐气 1 +x:1 +挨边 1 +x:1 +追交 1 +x:1 +准 359 +x:359 +节减 1 +x:1 +患 276 +x:276 +山壁 1 +x:1 +闲文 1 +x:1 +地脚棉 1 +x:1 +攻击手 1 +x:1 +乐律 1 +x:1 +沥青路 1 +x:1 +理屈词穷 1 +x:1 +拖曳阵 1 +x:1 +铅化物 1 +x:1 +卒业 1 +x:1 +度假区 1 +x:1 +执法犯法 1 +x:1 +补益 1 +x:1 +声嘶力竭 1 +x:1 +孝文帝 1 +x:1 +哈哈镜 1 +x:1 +征管法 1 +x:1 +窃电者 1 +x:1 +鸣谢碑 1 +x:1 +南后街 1 +x:1 +报告会 1 +x:1 +忙音 1 +x:1 +红豆杉 1 +x:1 +出徒 1 +x:1 +雄牌 1 +x:1 +四面八方 1 +x:1 +问柳寻花 1 +x:1 +会诊 1 +x:1 +丑闻 1 +x:1 +选送 1 +x:1 +专制主义 1 +x:1 +进取篇 1 +x:1 +亮度 1 +x:1 +胸怀大局 1 +x:1 +会试 1 +x:1 +作曲家 1 +x:1 +车辆厂 1 +x:1 +车旅费 1 +x:1 +山头 1 +x:1 +控 39 +x:39 +引渡 1 +x:1 +反坦克雷 1 +x:1 +偷越 1 +x:1 +宛似 1 +x:1 +实验舱 1 +x:1 +红岩队 1 +x:1 +低迷 1 +x:1 +延聘 1 +x:1 +颖悟 1 +x:1 +译名 1 +x:1 +数据项 1 +x:1 +出席 1 +x:1 +节假 1 +x:1 +杂话 1 +x:1 +面部 1 +x:1 +商管委 1 +x:1 +压痛 1 +x:1 +报告人 1 +x:1 +败家子 1 +x:1 +报请 1 +x:1 +弹头 1 +x:1 +会议 1 +x:1 +出师 1 +x:1 +从简 1 +x:1 +现当代 1 +x:1 +会计 1 +x:1 +组稿 1 +x:1 +大白天 1 +x:1 +靴 2 +x:2 +非贤不肖 1 +x:1 +漩流 1 +x:1 +赋存 1 +x:1 +不教而诛 1 +x:1 +究办 1 +x:1 +星星 1 +x:1 +省局 1 +x:1 +书目库 1 +x:1 +报告书 1 +x:1 +私有化 1 +x:1 +尽心竭力 1 +x:1 +风兰 1 +x:1 +打铁趁热 1 +x:1 +颖 35 +x:35 +漩涡 1 +x:1 +窑业 1 +x:1 +除害 1 +x:1 +省属 1 +x:1 +校 203 +x:203 +忠实笃行 1 +x:1 +山妹 1 +x:1 +造纸术 1 +x:1 +获益 1 +x:1 +阿族人 1 +x:1 +桑象虫 1 +x:1 +封资修 1 +x:1 +跳级 1 +x:1 +收发货 1 +x:1 +出庭 1 +x:1 +券桥乡 1 +x:1 +人权观 1 +x:1 +交流日 1 +x:1 +吉安县 1 +x:1 +囊 2 +x:2 +劝留 1 +x:1 +瓮声瓮气 1 +x:1 +道心 1 +x:1 +千分尺 1 +x:1 +两三点 1 +x:1 +随想式 1 +x:1 +偷走 1 +x:1 +普卡拉姆 1 +x:1 +急转弯 1 +x:1 +衡 18 +x:18 +打滚 1 +x:1 +乃至于 1 +x:1 +绥棱县 1 +x:1 +跳绳 1 +x:1 +打滑 1 +x:1 +氯化铵 1 +x:1 +杀人洞 1 +x:1 +真象 1 +x:1 +墨市 1 +x:1 +变味 1 +x:1 +粉红 1 +x:1 +女郎 1 +x:1 +变型 1 +x:1 +省心 1 +x:1 +逝世 1 +x:1 +壮歌 1 +x:1 +天文历算 1 +x:1 +霓裳王国 1 +x:1 +星斗 1 +x:1 +电子层 1 +x:1 +山娃 1 +x:1 +送货人 1 +x:1 +显而易见 1 +x:1 +轻体房 1 +x:1 +亲家 1 +x:1 +猝然 1 +x:1 +裘皮 1 +x:1 +十字街 1 +x:1 +古曲 1 +x:1 +立方厘米 1 +x:1 +敲竹杠 1 +x:1 +景阳冈 1 +x:1 +售房 1 +x:1 +小子 1 +x:1 +自相惊扰 1 +x:1 +水力部 1 +x:1 +药量 1 +x:1 +坎门镇 1 +x:1 +坐立不稳 1 +x:1 +振业堂 1 +x:1 +老皇历 1 +x:1 +喜果 1 +x:1 +水利 1 +x:1 +德智体 1 +x:1 +乙醇 1 +x:1 +亲密 1 +x:1 +琐屑 1 +x:1 +已婚 1 +x:1 +矿溶水 1 +x:1 +钓鱼岛 1 +x:1 +小器作 1 +x:1 +宪队 1 +x:1 +赏光 1 +x:1 +欧盟 1 +x:1 +栽倒 1 +x:1 +里亚尔 1 +x:1 +青泥洼桥 1 +x:1 +河南畈村 1 +x:1 +木鼓 1 +x:1 +羊圈 1 +x:1 +也就是说 1 +x:1 +天狗螺 1 +x:1 +成分股 1 +x:1 +翡翠 1 +x:1 +出差 1 +x:1 +西伯利亚 1 +x:1 +出工 1 +x:1 +大西南 1 +x:1 +出巡 1 +x:1 +叫醒 1 +x:1 +一步到位 1 +x:1 +原产机 1 +x:1 +凶相 1 +x:1 +砚师 1 +x:1 +监纪 1 +x:1 +洲际性 1 +x:1 +钱坂村 1 +x:1 +初印 1 +x:1 +津 105 +x:105 +平乡镇 1 +x:1 +种子袋 1 +x:1 +笺证稿 1 +x:1 +打消 1 +x:1 +惜售 1 +x:1 +丑陋 1 +x:1 +海红蜜 1 +x:1 +大流乡 1 +x:1 +一刻千金 1 +x:1 +亲子 1 +x:1 +报表 1 +x:1 +挥毫 1 +x:1 +馆旗 1 +x:1 +大西北 1 +x:1 +驾车者 1 +x:1 +嘴啃泥 1 +x:1 +微分 1 +x:1 +酒趣 1 +x:1 +绘 54 +x:54 +诀窍 1 +x:1 +龙公岭子 1 +x:1 +药酒 1 +x:1 +中心村 1 +x:1 +拉斯曼 1 +x:1 +荣列 1 +x:1 +梅东村 1 +x:1 +应纳税额 1 +x:1 +开航 1 +x:1 +果糖 1 +x:1 +身心 1 +x:1 +监缴 1 +x:1 +陡陡仄仄 1 +x:1 +外流 1 +x:1 +狮子会 1 +x:1 +会见 1 +x:1 +御侮 1 +x:1 +厅属 1 +x:1 +仗义执言 1 +x:1 +出山 1 +x:1 +礼让 1 +x:1 +天线 1 +x:1 +欣欣然 1 +x:1 +出局 1 +x:1 +果系 1 +x:1 +打气 1 +x:1 +节制 1 +x:1 +节外生枝 1 +x:1 +啼鹃 1 +x:1 +除外 1 +x:1 +巴黎公社 1 +x:1 +唾弃 1 +x:1 +旁落 1 +x:1 +弹孔 1 +x:1 +放任自流 1 +x:1 +吻合器 1 +x:1 +居功不傲 1 +x:1 +酒谱 1 +x:1 +常胜不衰 1 +x:1 +鬼画符 1 +x:1 +节前 1 +x:1 +转而 1 +x:1 +目标 1 +x:1 +萨满教 1 +x:1 +混血儿 1 +x:1 +崇洋 1 +x:1 +省府 1 +x:1 +果粉 1 +x:1 +青年团 1 +x:1 +卡通片 1 +x:1 +姜糖水 1 +x:1 +石 666 +x:666 +偷运 1 +x:1 +子午线 1 +x:1 +进人关 1 +x:1 +闪灼 1 +x:1 +超限额 1 +x:1 +漏征漏管 1 +x:1 +儇 1 +x:1 +社科系 1 +x:1 +飞云 1 +x:1 +电鳗 1 +x:1 +亲娘 1 +x:1 +领导组 1 +x:1 +到会者 1 +x:1 +生产线 1 +x:1 +浦北县 1 +x:1 +日月 1 +x:1 +雕制品 1 +x:1 +盲从 1 +x:1 +风气之先 1 +x:1 +完结率 1 +x:1 +飞人 1 +x:1 +天长 1 +x:1 +瓶胆 1 +x:1 +做好 1 +x:1 +倒果为因 1 +x:1 +储藏量 1 +x:1 +磁卡式 1 +x:1 +退让 1 +x:1 +氯化钠 1 +x:1 +前段 1 +x:1 +新宅乡 1 +x:1 +锯齿 1 +x:1 +工作员 1 +x:1 +融资方 1 +x:1 +宏博 1 +x:1 +音乐节 1 +x:1 +丹 48 +x:48 +匹夫有责 1 +x:1 +有口难分 1 +x:1 +省市 1 +x:1 +五六年 1 +x:1 +拍竣 1 +x:1 +人民公社 1 +x:1 +闲暇 1 +x:1 +一鼓足气 1 +x:1 +放在眼里 1 +x:1 +棒材 1 +x:1 +亲笔信 1 +x:1 +淤 26 +x:26 +自私自利 1 +x:1 +生产组 1 +x:1 +山寺 1 +x:1 +坛子岭 1 +x:1 +打法 1 +x:1 +机构 1 +x:1 +感染力 1 +x:1 +自然寨 1 +x:1 +转育 1 +x:1 +此情此景 1 +x:1 +山寨 1 +x:1 +滥套子 1 +x:1 +恽 2 +x:2 +那末 1 +x:1 +卧薪尝胆 1 +x:1 +井盖 1 +x:1 +山尖 1 +x:1 +〈 64 +x:64 +偷袭 1 +x:1 +四到位 1 +x:1 +卡通画 1 +x:1 +省委 1 +x:1 +挺挺 1 +x:1 +龙窑 1 +x:1 +显花植物 1 +x:1 +土专家 1 +x:1 +厅子 1 +x:1 +组网 1 +x:1 +优树 1 +x:1 +回笼 1 +x:1 +运动场 1 +x:1 +尔虞我诈 1 +x:1 +铁矾土 1 +x:1 +马迹塘 1 +x:1 +从细 1 +x:1 +果篮 1 +x:1 +礼貌 1 +x:1 +群燕 1 +x:1 +曹甸镇 1 +x:1 +挥洒 1 +x:1 +双井村 1 +x:1 +叠翠 1 +x:1 +商品房 1 +x:1 +务工地 1 +x:1 +抵抗 1 +x:1 +墨家 1 +x:1 +粉笔 1 +x:1 +疗效 1 +x:1 +半劳动力 1 +x:1 +町长 1 +x:1 +山居 1 +x:1 +墨客 1 +x:1 +葡萄沟乡 1 +x:1 +男人 1 +x:1 +山山 1 +x:1 +抵押 1 +x:1 +墨宝 1 +x:1 +博士 1 +x:1 +仿生学 1 +x:1 +弹射 1 +x:1 +端 149 +x:149 +弊端 1 +x:1 +地震台 1 +x:1 +瞎子 1 +x:1 +灵活化 1 +x:1 +耄耋之年 1 +x:1 +应试者 1 +x:1 +喉癌 1 +x:1 +云石 1 +x:1 +林龄 1 +x:1 +大冶市 1 +x:1 +山岗 1 +x:1 +空中 1 +x:1 +山岙 1 +x:1 +山泉乡 1 +x:1 +亲家公 1 +x:1 +夸大 1 +x:1 +借鸡生蛋 1 +x:1 +居心不良 1 +x:1 +夸夸 1 +x:1 +鸭儿梨 1 +x:1 +拥政爱民 1 +x:1 +存额 1 +x:1 +骨朵儿 1 +x:1 +填写 1 +x:1 +夜游 1 +x:1 +箱管 1 +x:1 +山岳 1 +x:1 +杀人案 1 +x:1 +膝 12 +x:12 +跳箱 1 +x:1 +长啸 1 +x:1 +弭 6 +x:6 +夜丰颂 1 +x:1 +经阁 1 +x:1 +欣然命笔 1 +x:1 +游逛 1 +x:1 +本题 1 +x:1 +学位法 1 +x:1 +山岭 1 +x:1 +抵扣 1 +x:1 +魔王 1 +x:1 +惯量 1 +x:1 +生势 1 +x:1 +渴慕 1 +x:1 +正告 1 +x:1 +聪灵 1 +x:1 +男中 1 +x:1 +经院 1 +x:1 +顺其自然 1 +x:1 +樟村 1 +x:1 +调拨价 1 +x:1 +喜意 1 +x:1 +出家 1 +x:1 +残工委 1 +x:1 +禹州市 1 +x:1 +山峰 1 +x:1 +压弯 1 +x:1 +队方 1 +x:1 +游遍 1 +x:1 +梯梧 1 +x:1 +度假地 1 +x:1 +药面 1 +x:1 +山峡 1 +x:1 +叩头虫 1 +x:1 +差价率 1 +x:1 +凯内马 1 +x:1 +夸奖 1 +x:1 +西北街 1 +x:1 +实实在在 1 +x:1 +候选者 1 +x:1 +老虎机 1 +x:1 +山崖 1 +x:1 +北三环 1 +x:1 +节后 1 +x:1 +与之俱来 1 +x:1 +惜力 1 +x:1 +姨娘 1 +x:1 +威尼斯 1 +x:1 +回程 1 +x:1 +空间站 1 +x:1 +韶山路 1 +x:1 +血痕 1 +x:1 +破坏性 1 +x:1 +老脾气 1 +x:1 +监护人员 1 +x:1 +轰轰 1 +x:1 +兜风 1 +x:1 +白鲳 1 +x:1 +作业题 1 +x:1 +白炽电灯 1 +x:1 +饼 8 +x:8 +除开 1 +x:1 +守擂者 1 +x:1 +山崩 1 +x:1 +病理学 1 +x:1 +省境 1 +x:1 +声全息 1 +x:1 +退资 1 +x:1 +升力 1 +x:1 +赋彩 1 +x:1 +馆所 1 +x:1 +前额 1 +x:1 +添补 1 +x:1 +语音学 1 +x:1 +监票 1 +x:1 +赋役 1 +x:1 +古晋 1 +x:1 +会心处 1 +x:1 +黎明 1 +x:1 +城陵矶 1 +x:1 +迢迢万里 1 +x:1 +喜悦 1 +x:1 +至境 1 +x:1 +城北镇 1 +x:1 +防患化险 1 +x:1 +厕上 1 +x:1 +震天雷 1 +x:1 +果穗 1 +x:1 +霍巴特 1 +x:1 +彩纸 1 +x:1 +组织 1 +x:1 +组组 1 +x:1 +白鲢 1 +x:1 +汉代 1 +x:1 +产枣量 1 +x:1 +亚裔 1 +x:1 +志愿队 1 +x:1 +此岸性 1 +x:1 +翠微中里 1 +x:1 +灰叶猴 1 +x:1 +车辆场 1 +x:1 +攻击机 1 +x:1 +打孔术 1 +x:1 +出嫁 1 +x:1 +结业者 1 +x:1 +监禁 1 +x:1 +队旗 1 +x:1 +胰岛 1 +x:1 +浸染 1 +x:1 +惜别 1 +x:1 +赔款 1 +x:1 +绩优股 1 +x:1 +节哀 1 +x:1 +压缩空气 1 +x:1 +挥泪 1 +x:1 +鸦片战争 1 +x:1 +除忧 1 +x:1 +亲属 1 +x:1 +山川 1 +x:1 +立马 1 +x:1 +男伴 1 +x:1 +山巅 1 +x:1 +霍地 1 +x:1 +那曲 1 +x:1 +杨陵 1 +x:1 +防火罩 1 +x:1 +浣熊 1 +x:1 +礼赞 1 +x:1 +高中收入 1 +x:1 +商业楼 1 +x:1 +退路 1 +x:1 +喜性 1 +x:1 +脚儿 1 +x:1 +载驳船 1 +x:1 +二伏 1 +x:1 +挺拔 1 +x:1 +平阴县 1 +x:1 +抵挡 1 +x:1 +目测 1 +x:1 +图腾 1 +x:1 +牵引 1 +x:1 +史料性 1 +x:1 +酒西 1 +x:1 +报出地 1 +x:1 +填平补齐 1 +x:1 +宏图 1 +x:1 +劳协 1 +x:1 +亲征 1 +x:1 +主旨性 1 +x:1 +省察 1 +x:1 +开标 1 +x:1 +幼穗 1 +x:1 +牵强 1 +x:1 +出奇 1 +x:1 +机炉岛 1 +x:1 +双学 1 +x:1 +劳 50 +x:50 +三尸神 1 +x:1 +除尘 1 +x:1 +山带 1 +x:1 +出奔 1 +x:1 +真贫 1 +x:1 +止痛针 1 +x:1 +监税 1 +x:1 +畏强欺弱 1 +x:1 +番号 1 +x:1 +老老少少 1 +x:1 +真货 1 +x:1 +鬼斧神工 1 +x:1 +脚力 1 +x:1 +出头 1 +x:1 +广绣 1 +x:1 +商品性 1 +x:1 +喀布尔 1 +x:1 +喜出望外 1 +x:1 +讲师团 1 +x:1 +出处 1 +x:1 +导向型 1 +x:1 +幼稚 1 +x:1 +骨组织 1 +x:1 +惠阳市 1 +x:1 +出外 1 +x:1 +回廊式 1 +x:1 +脚劲 1 +x:1 +凶狠 1 +x:1 +救危 1 +x:1 +一定量 1 +x:1 +失业军 1 +x:1 +供货户 1 +x:1 +戛戛 1 +x:1 +下 8658 +x:8658 +中山亭 1 +x:1 +和平棋 1 +x:1 +血癌 1 +x:1 +零售票 1 +x:1 +幼童 1 +x:1 +夸张式 1 +x:1 +山庄 1 +x:1 +金牛岭 1 +x:1 +剪接 1 +x:1 +周口市 1 +x:1 +党组织 1 +x:1 +变化 1 +x:1 +自然庄 1 +x:1 +菱 7 +x:7 +建设科 1 +x:1 +茶话会 1 +x:1 +灌渠 1 +x:1 +肩负 1 +x:1 +踏平 1 +x:1 +养料 1 +x:1 +喜捧 1 +x:1 +食心虫 1 +x:1 +赔案 1 +x:1 +丁丁 1 +x:1 +刑场 1 +x:1 +会谈 1 +x:1 +跟脚 1 +x:1 +睢阳区 1 +x:1 +茄果类 1 +x:1 +同村 1 +x:1 +凶犯 1 +x:1 +丁丑 1 +x:1 +实话实说 1 +x:1 +书库 1 +x:1 +贪欲 1 +x:1 +旅游线 1 +x:1 +变卖 1 +x:1 +那时 1 +x:1 +省部级 1 +x:1 +沱茶 1 +x:1 +拨 169 +x:169 +变卦 1 +x:1 +应酬 1 +x:1 +组办 1 +x:1 +串亲戚 1 +x:1 +省厅级 1 +x:1 +歹 1 +x:1 +弹库 1 +x:1 +雨情 1 +x:1 +前事不忘 1 +x:1 +香港湾区 1 +x:1 +客饭 1 +x:1 +乐山 1 +x:1 +街头巷尾 1 +x:1 +疑问 1 +x:1 +熟 78 +x:78 +变动 1 +x:1 +立领 1 +x:1 +茨 1 +x:1 +家蚊 1 +x:1 +放线 1 +x:1 +熟视无睹 1 +x:1 +齐集 1 +x:1 +家蚕 1 +x:1 +上犹县 1 +x:1 +埃舍德 1 +x:1 +捐立 1 +x:1 +闲扯 1 +x:1 +妇女界 1 +x:1 +晾风 1 +x:1 +旱烟管 1 +x:1 +厅堂 1 +x:1 +反反复复 1 +x:1 +打桩 1 +x:1 +未婚妻 1 +x:1 +扑票者 1 +x:1 +山影 1 +x:1 +戏耍 1 +x:1 +转营 1 +x:1 +太师椅 1 +x:1 +镇安县 1 +x:1 +公务 1 +x:1 +梯次 1 +x:1 +喜报 1 +x:1 +力举 1 +x:1 +鸬鹚乡 1 +x:1 +信念 1 +x:1 +纾解民困 1 +x:1 +协进会 1 +x:1 +种子赛 1 +x:1 +商家退避 1 +x:1 +被上诉方 1 +x:1 +活动量 1 +x:1 +表达题 1 +x:1 +报账 1 +x:1 +话务班 1 +x:1 +哄然大笑 1 +x:1 +北郎中 1 +x:1 +监管 1 +x:1 +粒肥 1 +x:1 +宣判声 1 +x:1 +帮扶团 1 +x:1 +金刚努目 1 +x:1 +产权局 1 +x:1 +杂交率 1 +x:1 +宝丰 1 +x:1 +祁阳县 1 +x:1 +即 1657 +x:1657 +经销 1 +x:1 +半年前 1 +x:1 +受得了 1 +x:1 +妇女病 1 +x:1 +蹄子 1 +x:1 +贷 79 +x:79 +脚印 1 +x:1 +记者证 1 +x:1 +售架 1 +x:1 +劳力 1 +x:1 +积资 1 +x:1 +未婚夫 1 +x:1 +窠 2 +x:2 +信心 1 +x:1 +从紧 1 +x:1 +粉碎 1 +x:1 +反戈一击 1 +x:1 +交换台 1 +x:1 +退还 1 +x:1 +免不了 1 +x:1 +近在眼前 1 +x:1 +言之成理 1 +x:1 +事务主义 1 +x:1 +气溶胶 1 +x:1 +面陈 1 +x:1 +出境 1 +x:1 +孕前 1 +x:1 +劳动 1 +x:1 +会费 1 +x:1 +砖茶 1 +x:1 +温尼伯 1 +x:1 +万事大吉 1 +x:1 +捐税 1 +x:1 +成灾 1 +x:1 +分库 1 +x:1 +苦头 1 +x:1 +分店 1 +x:1 +包装 1 +x:1 +运筹 1 +x:1 +哀乐 1 +x:1 +洋兰 1 +x:1 +湿邪 1 +x:1 +提水站 1 +x:1 +夏收 1 +x:1 +心梗 1 +x:1 +高低压 1 +x:1 +太空梭 1 +x:1 +戍边人 1 +x:1 +蜀锦 1 +x:1 +此处 1 +x:1 +双簧管 1 +x:1 +分配数 1 +x:1 +如同 1 +x:1 +千斤顶 1 +x:1 +苦处 1 +x:1 +涟漪 1 +x:1 +此外 1 +x:1 +昙花林 1 +x:1 +重特大案 1 +x:1 +手感 1 +x:1 +市容 1 +x:1 +彰扬 1 +x:1 +研究院 1 +x:1 +安居乐教 1 +x:1 +恩施 1 +x:1 +怀恋 1 +x:1 +泄水渠 1 +x:1 +乒乓球桌 1 +x:1 +变态反应 1 +x:1 +衰竭性 1 +x:1 +中央政府 1 +x:1 +廉颇老矣 1 +x:1 +邪财 1 +x:1 +赞 62 +x:62 +塑管 1 +x:1 +医护 1 +x:1 +仿作 1 +x:1 +仿佛 1 +x:1 +证照 1 +x:1 +沅陵 1 +x:1 +胫 1 +x:1 +定造 1 +x:1 +扬 181 +x:181 +方家区 1 +x:1 +交道 1 +x:1 +款子 1 +x:1 +大无畏 1 +x:1 +丧生者 1 +x:1 +沅水 1 +x:1 +愚民 1 +x:1 +包袱 1 +x:1 +龙泉区 1 +x:1 +心浮意躁 1 +x:1 +初七 1 +x:1 +疫情 1 +x:1 +金边 1 +x:1 +游泳赛 1 +x:1 +黄土地 1 +x:1 +红河谷 1 +x:1 +温江县 1 +x:1 +分币 1 +x:1 +践踏 1 +x:1 +分布 1 +x:1 +做通 1 +x:1 +湘赣 1 +x:1 +有头有脑 1 +x:1 +心树 1 +x:1 +耳顺 1 +x:1 +吉祥如意 1 +x:1 +总装机 1 +x:1 +毗连区 1 +x:1 +丧生 1 +x:1 +专题性 1 +x:1 +横横竖竖 1 +x:1 +贪赃卖法 1 +x:1 +包衣 1 +x:1 +和婉 1 +x:1 +定都 1 +x:1 +前列 1 +x:1 +讲 2000 +x:2000 +爷 3 +x:3 +书讯 1 +x:1 +冰川学 1 +x:1 +淮河路 1 +x:1 +千钧一发 1 +x:1 +体育局 1 +x:1 +纪念亭 1 +x:1 +契 2 +x:2 +俄勒冈 1 +x:1 +象牙板 1 +x:1 +运管 1 +x:1 +武定侯 1 +x:1 +乘晕宁 1 +x:1 +雅俗 1 +x:1 +常山 1 +x:1 +渡槽 1 +x:1 +内黄县 1 +x:1 +三贤祠 1 +x:1 +签到簿 1 +x:1 +中亚 1 +x:1 +珍珠球 1 +x:1 +运算 1 +x:1 +驰去 1 +x:1 +烤烟叶 1 +x:1 +锤炼 1 +x:1 +横梁 1 +x:1 +朔风 1 +x:1 +潘圩村 1 +x:1 +碎石机 1 +x:1 +惊涛骇浪 1 +x:1 +观赏性 1 +x:1 +脑膜炎 1 +x:1 +殇 2 +x:2 +分得 1 +x:1 +诗经 1 +x:1 +中山陵园 1 +x:1 +安德里 1 +x:1 +禹日 1 +x:1 +孤立无援 1 +x:1 +难辨 1 +x:1 +固定汇率 1 +x:1 +音名 1 +x:1 +干酪素 1 +x:1 +催促式 1 +x:1 +保通社 1 +x:1 +盛举 1 +x:1 +兵种部 1 +x:1 +前去 1 +x:1 +前厅 1 +x:1 +赛璐玢 1 +x:1 +宁国府 1 +x:1 +岩 96 +x:96 +传达 1 +x:1 +许可费 1 +x:1 +食积 1 +x:1 +华埠 1 +x:1 +雅丹 1 +x:1 +拥有率 1 +x:1 +修饰 1 +x:1 +左锋 1 +x:1 +火上加油 1 +x:1 +屡次三番 1 +x:1 +证人席 1 +x:1 +驭手 1 +x:1 +扫帚星 1 +x:1 +海安县 1 +x:1 +分心 1 +x:1 +票据法 1 +x:1 +前台 1 +x:1 +怀慕 1 +x:1 +榆次市 1 +x:1 +拥戴 1 +x:1 +猎潜机 1 +x:1 +好戏 1 +x:1 +赛璐珞 1 +x:1 +短句 1 +x:1 +莒南 1 +x:1 +哀伤 1 +x:1 +能效比 1 +x:1 +墙上 1 +x:1 +电子钟 1 +x:1 +复活日 1 +x:1 +常州 1 +x:1 +常川 1 +x:1 +下半场 1 +x:1 +审判席 1 +x:1 +步频 1 +x:1 +教练车 1 +x:1 +难过 1 +x:1 +北固碾 1 +x:1 +欲速不达 1 +x:1 +定量 1 +x:1 +商丘站 1 +x:1 +雅事 1 +x:1 +星等 1 +x:1 +合江省 1 +x:1 +以党代政 1 +x:1 +分开 1 +x:1 +作业区 1 +x:1 +试想想 1 +x:1 +千古遗恨 1 +x:1 +定金 1 +x:1 +司线员 1 +x:1 +分式 1 +x:1 +处理费 1 +x:1 +狼道 1 +x:1 +义举 1 +x:1 +达成 1 +x:1 +农摊 1 +x:1 +纪 53 +x:53 +苦境 1 +x:1 +彝乡 1 +x:1 +夏旱 1 +x:1 +揭露 1 +x:1 +交通 1 +x:1 +宁国市 1 +x:1 +矮墩墩 1 +x:1 +空位 1 +x:1 +生育率 1 +x:1 +兼权熟计 1 +x:1 +前卫 1 +x:1 +递补 1 +x:1 +给定 1 +x:1 +幕 117 +x:117 +言志 1 +x:1 +音响 1 +x:1 +众目昭著 1 +x:1 +想见 1 +x:1 +枪子儿 1 +x:1 +农户家 1 +x:1 +采采 1 +x:1 +代售 1 +x:1 +征集组 1 +x:1 +落榜 1 +x:1 +为过 1 +x:1 +中国流 1 +x:1 +禽业 1 +x:1 +外专局 1 +x:1 +前南 1 +x:1 +啜泣 1 +x:1 +弥天盖地 1 +x:1 +余兴 1 +x:1 +审判庭 1 +x:1 +草煤 1 +x:1 +由此看来 1 +x:1 +金贵 1 +x:1 +映衬 1 +x:1 +海陆空 1 +x:1 +水蒸汽 1 +x:1 +先礼后兵 1 +x:1 +晃晃荡荡 1 +x:1 +金质 1 +x:1 +分配权 1 +x:1 +彩翼 1 +x:1 +本质性 1 +x:1 +手持 1 +x:1 +手指 1 +x:1 +肉饼 1 +x:1 +夺走 1 +x:1 +碌碌 1 +x:1 +衣着 1 +x:1 +书市 1 +x:1 +昌江县 1 +x:1 +曼俄 1 +x:1 +烈马 1 +x:1 +网袋 1 +x:1 +振奋人心 1 +x:1 +风骨 1 +x:1 +风口 1 +x:1 +舅妈 1 +x:1 +草狐 1 +x:1 +马拉尼昂 1 +x:1 +沙窝集镇 1 +x:1 +市委 1 +x:1 +自警自省 1 +x:1 +说和 1 +x:1 +笪公祠 1 +x:1 +苦学 1 +x:1 +泄殖腔 1 +x:1 +辩论会 1 +x:1 +跑马厅 1 +x:1 +日夜兼程 1 +x:1 +预审股 1 +x:1 +寒碜 1 +x:1 +被迫 1 +x:1 +台海 1 +x:1 +风骚 1 +x:1 +青云桥 1 +x:1 +吞没 1 +x:1 +水蒸气 1 +x:1 +清理工 1 +x:1 +亲和 1 +x:1 +涟涟 1 +x:1 +市话网 1 +x:1 +钱家峪 1 +x:1 +鸣谢 1 +x:1 +黑人 1 +x:1 +东丰县 1 +x:1 +分封 1 +x:1 +常常 1 +x:1 +青翠 1 +x:1 +牌楼 1 +x:1 +云冈矿 1 +x:1 +黑亮 1 +x:1 +耕作 1 +x:1 +字句 1 +x:1 +杨庙 1 +x:1 +木版画 1 +x:1 +广告栏 1 +x:1 +和谈 1 +x:1 +手掌 1 +x:1 +字号 1 +x:1 +怀抱 1 +x:1 +和谐 1 +x:1 +达意 1 +x:1 +健硕 1 +x:1 +风风火火 1 +x:1 +资金 1 +x:1 +舍利塔 1 +x:1 +簿 4 +x:4 +搭建 1 +x:1 +射阳县 1 +x:1 +抢掠 1 +x:1 +探索者 1 +x:1 +核电站 1 +x:1 +分属 1 +x:1 +分局 1 +x:1 +分层 1 +x:1 +分居 1 +x:1 +说合 1 +x:1 +政治学所 1 +x:1 +常平 1 +x:1 +跑鹅区 1 +x:1 +肉馅 1 +x:1 +常年 1 +x:1 +知了 1 +x:1 +苦寒 1 +x:1 +治愈 1 +x:1 +罩 21 +x:21 +女中音 1 +x:1 +开幕词 1 +x:1 +手提 1 +x:1 +禾秆 1 +x:1 +收藏史 1 +x:1 +老眼光 1 +x:1 +山水经 1 +x:1 +官阶 1 +x:1 +冷傲 1 +x:1 +襄阳县 1 +x:1 +玉米子 1 +x:1 +金谷 1 +x:1 +五粮液 1 +x:1 +小史店 1 +x:1 +三个之最 1 +x:1 +复合驱油 1 +x:1 +加急电报 1 +x:1 +格言式 1 +x:1 +当口 1 +x:1 +形式化 1 +x:1 +丁丁冬冬 1 +x:1 +有着 1 +x:1 +人和乡 1 +x:1 +巡回赛 1 +x:1 +米皇 1 +x:1 +常德 1 +x:1 +草率 1 +x:1 +财政部 1 +x:1 +益都 1 +x:1 +巧克力 1 +x:1 +文山里 1 +x:1 +败者 1 +x:1 +清真教 1 +x:1 +涟水 1 +x:1 +列车员 1 +x:1 +吉星乡 1 +x:1 +抢手 1 +x:1 +洪城 1 +x:1 +霸 18 +x:18 +磁铁矿 1 +x:1 +勃发生机 1 +x:1 +论黄数黑 1 +x:1 +机帆船 1 +x:1 +沉吟 1 +x:1 +卵用鸡 1 +x:1 +步骤 1 +x:1 +落款 1 +x:1 +深得民心 1 +x:1 +信阳 1 +x:1 +激素类 1 +x:1 +云龙乡 1 +x:1 +两税 1 +x:1 +好报 1 +x:1 +黑体 1 +x:1 +证物 1 +x:1 +木槿花 1 +x:1 +雕塑 1 +x:1 +龙胆草 1 +x:1 +四点半 1 +x:1 +自由体 1 +x:1 +秦始皇陵 1 +x:1 +东城区 1 +x:1 +鱼禽肉蛋 1 +x:1 +径直 1 +x:1 +篱园 1 +x:1 +数术 1 +x:1 +食管 1 +x:1 +两端 1 +x:1 +候诊椅 1 +x:1 +肉食 1 +x:1 +创演 1 +x:1 +青绿 1 +x:1 +雪松 1 +x:1 +拉路村 1 +x:1 +墒 8 +x:8 +壁毯 1 +x:1 +熏陶 1 +x:1 +杨柳岸 1 +x:1 +手抄 1 +x:1 +陈列馆 1 +x:1 +嘲讽 1 +x:1 +挫 11 +x:11 +写诗人 1 +x:1 +不怎么 1 +x:1 +关键字 1 +x:1 +铬铁矿 1 +x:1 +杈 2 +x:2 +氯丁橡胶 1 +x:1 +深加工 1 +x:1 +抢护 1 +x:1 +洋务 1 +x:1 +客家人 1 +x:1 +掐算 1 +x:1 +黑信 1 +x:1 +显绩 1 +x:1 +致命 1 +x:1 +向前乡 1 +x:1 +市郊 1 +x:1 +元坊村 1 +x:1 +前兆 1 +x:1 +前街后巷 1 +x:1 +无奈何 1 +x:1 +说唱 1 +x:1 +学部委员 1 +x:1 +冷藏 1 +x:1 +胡椒面 1 +x:1 +缔约方 1 +x:1 +后备箱 1 +x:1 +理事长 1 +x:1 +鞋业 1 +x:1 +疲软 1 +x:1 +诗篇 1 +x:1 +显示 1 +x:1 +棺器 1 +x:1 +水罐车 1 +x:1 +食糖 1 +x:1 +技术 1 +x:1 +有线广播 1 +x:1 +彭城王 1 +x:1 +奇才队 1 +x:1 +嫩苗 1 +x:1 +戴维营 1 +x:1 +安置国 1 +x:1 +信口雌黄 1 +x:1 +独自 1 +x:1 +磁电式 1 +x:1 +轻松感 1 +x:1 +段 1341 +x:1341 +抢救 1 +x:1 +依存性 1 +x:1 +心河 1 +x:1 +市徽 1 +x:1 +特等功 1 +x:1 +落水 1 +x:1 +杂 39 +x:39 +举锤 1 +x:1 +好性儿 1 +x:1 +总台 1 +x:1 +高锰酸钾 1 +x:1 +城南区 1 +x:1 +前围 1 +x:1 +抢收 1 +x:1 +市志 1 +x:1 +乜 1 +x:1 +抢攻 1 +x:1 +拥有 1 +x:1 +榜上无名 1 +x:1 +迷恋 1 +x:1 +货站 1 +x:1 +陇剧 1 +x:1 +食粮 1 +x:1 +官邸 1 +x:1 +某省 1 +x:1 +破涕为笑 1 +x:1 +泌阳县 1 +x:1 +想象 1 +x:1 +令人感动 1 +x:1 +神圣化 1 +x:1 +黄土区 1 +x:1 +花甲乡 1 +x:1 +肌瘤 1 +x:1 +断粮 1 +x:1 +黄檗罗树 1 +x:1 +凭栏 1 +x:1 +联产承包 1 +x:1 +诬告 1 +x:1 +起落 1 +x:1 +哉 31 +x:31 +夺路 1 +x:1 +少长咸集 1 +x:1 +官道 1 +x:1 +落泪 1 +x:1 +茫然无措 1 +x:1 +香椿芽 1 +x:1 +戳穿 1 +x:1 +帧 13 +x:13 +可谓 1 +x:1 +长春桥 1 +x:1 +似曾相识 1 +x:1 +藐视 1 +x:1 +真情实意 1 +x:1 +分娩 1 +x:1 +维誉至诚 1 +x:1 +太空水 1 +x:1 +防水层 1 +x:1 +沉厚 1 +x:1 +枪械 1 +x:1 +计分器 1 +x:1 +毒丸 1 +x:1 +优秀奖 1 +x:1 +审判官 1 +x:1 +补贴额 1 +x:1 +担保 1 +x:1 +狮子舞 1 +x:1 +始料未及 1 +x:1 +苦工 1 +x:1 +上座儿 1 +x:1 +隔离栏 1 +x:1 +儒艮 1 +x:1 +保不齐 1 +x:1 +苦差 1 +x:1 +孟县 1 +x:1 +源泉 1 +x:1 +米袋子 1 +x:1 +幽远 1 +x:1 +岔道 1 +x:1 +大清国 1 +x:1 +年代久远 1 +x:1 +万年青 1 +x:1 +沭阳 1 +x:1 +片瓦无存 1 +x:1 +包谷 1 +x:1 +自恃 1 +x:1 +落选者 1 +x:1 +定钱 1 +x:1 +看财奴 1 +x:1 +迷惘 1 +x:1 +急性 1 +x:1 +联欢会 1 +x:1 +电子部 1 +x:1 +和议 1 +x:1 +台生 1 +x:1 +牙渍 1 +x:1 +愚见 1 +x:1 +影星 1 +x:1 +积羽沉舟 1 +x:1 +增进 1 +x:1 +说及 1 +x:1 +市府 1 +x:1 +恩惠 1 +x:1 +处方权 1 +x:1 +北碚区 1 +x:1 +分家 1 +x:1 +诗章 1 +x:1 +提供者 1 +x:1 +梨狗 1 +x:1 +邪行 1 +x:1 +道林纸 1 +x:1 +了井塘村 1 +x:1 +死灭 1 +x:1 +生化 1 +x:1 +点 1792 +x:1792 +希伯伦城 1 +x:1 +恩情 1 +x:1 +坐而论道 1 +x:1 +举不胜举 1 +x:1 +陇南 1 +x:1 +除数 1 +x:1 +溺水者 1 +x:1 +难说 1 +x:1 +慷慨陈词 1 +x:1 +安置型 1 +x:1 +紧张万状 1 +x:1 +市廛 1 +x:1 +分销 1 +x:1 +健美 1 +x:1 +手摇 1 +x:1 +变动者 1 +x:1 +践诺 1 +x:1 +分寸 1 +x:1 +返回式 1 +x:1 +想起 1 +x:1 +海水面 1 +x:1 +莜麦 1 +x:1 +搭头 1 +x:1 +突防 1 +x:1 +肉鸭 1 +x:1 +肉鸡 1 +x:1 +煸 2 +x:2 +渡汛 1 +x:1 +关山 1 +x:1 +常委 1 +x:1 +安德镇 1 +x:1 +烟台港 1 +x:1 +下降调 1 +x:1 +市布 1 +x:1 +偃旗息鼓 1 +x:1 +矜持 1 +x:1 +倒转 1 +x:1 +湛蓝 1 +x:1 +初任 1 +x:1 +酷爱 1 +x:1 +市商委 1 +x:1 +荒地 1 +x:1 +抚 5 +x:5 +羚羊角 1 +x:1 +涡轮机 1 +x:1 +前场 1 +x:1 +草甸 1 +x:1 +认证书 1 +x:1 +产粮区 1 +x:1 +杆菌 1 +x:1 +望梅止渴 1 +x:1 +常备 1 +x:1 +诉状 1 +x:1 +本意 1 +x:1 +语录牌 1 +x:1 +下半叶 1 +x:1 +杂乱 1 +x:1 +客货轮船 1 +x:1 +武陟县 1 +x:1 +分子 1 +x:1 +企事业 1 +x:1 +晶莹剔透 1 +x:1 +收藏品 1 +x:1 +舍本求末 1 +x:1 +嘹亮 1 +x:1 +货签 1 +x:1 +弗罗阿 1 +x:1 +掩却 1 +x:1 +掩卷 1 +x:1 +清算组 1 +x:1 +恩怨 1 +x:1 +斗法 1 +x:1 +法办 1 +x:1 +音像 1 +x:1 +青农部 1 +x:1 +誉为 1 +x:1 +园长 1 +x:1 +混迹 1 +x:1 +民会 1 +x:1 +烟色 1 +x:1 +肉麻 1 +x:1 +霎时间 1 +x:1 +怀旧 1 +x:1 +好天儿 1 +x:1 +烧结砖 1 +x:1 +敛去 1 +x:1 +不由分说 1 +x:1 +出境部 1 +x:1 +灭蝗 1 +x:1 +市井气 1 +x:1 +惮 1 +x:1 +不分上下 1 +x:1 +担任 1 +x:1 +诗稿 1 +x:1 +贪吃 1 +x:1 +混进 1 +x:1 +蜀都 1 +x:1 +映象 1 +x:1 +普陀区 1 +x:1 +手术 1 +x:1 +此张 1 +x:1 +手本 1 +x:1 +千奇百怪 1 +x:1 +双百 1 +x:1 +手机 1 +x:1 +滤液 1 +x:1 +摇滚乐 1 +x:1 +瘠 2 +x:2 +油油亮亮 1 +x:1 +浮冀汾 1 +x:1 +怀春 1 +x:1 +人工降雨 1 +x:1 +引出 1 +x:1 +挽留 1 +x:1 +热转印机 1 +x:1 +敬佩 1 +x:1 +皖平 1 +x:1 +草皮 1 +x:1 +定陵 1 +x:1 +守约 1 +x:1 +青筋 1 +x:1 +办复率 1 +x:1 +钱排 1 +x:1 +苦役 1 +x:1 +以己度人 1 +x:1 +稍微 1 +x:1 +反毒网 1 +x:1 +蓑衣 1 +x:1 +机敏 1 +x:1 +音协 1 +x:1 +张掖 1 +x:1 +此役 1 +x:1 +洋场 1 +x:1 +都城史 1 +x:1 +手板 1 +x:1 +海河湾村 1 +x:1 +利息额 1 +x:1 +朴直 1 +x:1 +电影院 1 +x:1 +递进 1 +x:1 +广告法 1 +x:1 +如春 1 +x:1 +重唱 1 +x:1 +蝗区 1 +x:1 +商业城 1 +x:1 +民和县 1 +x:1 +开工率 1 +x:1 +沉凝 1 +x:1 +一生一世 1 +x:1 +达官贵人 1 +x:1 +双目 1 +x:1 +手枪 1 +x:1 +上下卷 1 +x:1 +1 3455 +x:3455 +两翼 1 +x:1 +转转 1 +x:1 +勒卡 1 +x:1 +幽趣 1 +x:1 +停车牌 1 +x:1 +千恩万谢 1 +x:1 +肠伤寒 1 +x:1 +肌理 1 +x:1 +鸿福 1 +x:1 +开幕辞 1 +x:1 +前大营 1 +x:1 +信托法 1 +x:1 +砒霜 1 +x:1 +哥德堡 1 +x:1 +前后 1 +x:1 +手足无措 1 +x:1 +短吨 1 +x:1 +怯 4 +x:4 +打牙祭 1 +x:1 +研究部 1 +x:1 +税务员 1 +x:1 +内外援 1 +x:1 +跑马坡 1 +x:1 +合口味 1 +x:1 +音变 1 +x:1 +嘉陵江 1 +x:1 +陋 5 +x:5 +前周 1 +x:1 +抢枪 1 +x:1 +践行 1 +x:1 +天翻地覆 1 +x:1 +禁止 1 +x:1 +雕工 1 +x:1 +俺家 1 +x:1 +跑马场 1 +x:1 +手柄 1 +x:1 +公墓区 1 +x:1 +追逐赛 1 +x:1 +跑马地 1 +x:1 +一亩泉 1 +x:1 +苦心 1 +x:1 +移位 1 +x:1 +三不用 1 +x:1 +耳鸣 1 +x:1 +此志 1 +x:1 +沉冤 1 +x:1 +牛犊子 1 +x:1 +株株 1 +x:1 +常客 1 +x:1 +怀有 1 +x:1 +青空 1 +x:1 +防守奖 1 +x:1 +败落 1 +x:1 +阿尔法星 1 +x:1 +外毒素 1 +x:1 +哄骗 1 +x:1 +起起落落 1 +x:1 +玉米面 1 +x:1 +无缝钢管 1 +x:1 +落潮 1 +x:1 +火柴厂 1 +x:1 +常安 1 +x:1 +黑瞎子 1 +x:1 +宕入 1 +x:1 +斗渠 1 +x:1 +两步走 1 +x:1 +农村 1 +x:1 +衣片 1 +x:1 +本位货币 1 +x:1 +抗议声 1 +x:1 +无票据 1 +x:1 +治安科 1 +x:1 +数据 1 +x:1 +自惜 1 +x:1 +苦干 1 +x:1 +分委 1 +x:1 +和解 1 +x:1 +酷热 1 +x:1 +滤波 1 +x:1 +贪贿风 1 +x:1 +金衡 1 +x:1 +停车率 1 +x:1 +金衢 1 +x:1 +贪色 1 +x:1 +诗碑 1 +x:1 +金表 1 +x:1 +双眼 1 +x:1 +聚 79 +x:79 +敬业 1 +x:1 +网路 1 +x:1 +驰名 1 +x:1 +专修科 1 +x:1 +肌病 1 +x:1 +大北直街 1 +x:1 +矫健 1 +x:1 +怀来 1 +x:1 +气象台站 1 +x:1 +青稞 1 +x:1 +酷烈 1 +x:1 +监视器 1 +x:1 +货种 1 +x:1 +正餐 1 +x:1 +金行 1 +x:1 +丧父 1 +x:1 +主观主义 1 +x:1 +分外 1 +x:1 +漆黑 1 +x:1 +三七开 1 +x:1 +青竹 1 +x:1 +鼎盛期 1 +x:1 +难褪 1 +x:1 +月牙 1 +x:1 +分处 1 +x:1 +灯谜队 1 +x:1 +评剧团 1 +x:1 +分头 1 +x:1 +烟幕 1 +x:1 +长风破浪 1 +x:1 +包车 1 +x:1 +伊利湖 1 +x:1 +敬仰 1 +x:1 +吴营 1 +x:1 +大展经纶 1 +x:1 +警务区 1 +x:1 +启明 1 +x:1 +市局 1 +x:1 +耳鼓 1 +x:1 +用药量 1 +x:1 +马绍尔 1 +x:1 +蒺藜丛 1 +x:1 +证监 1 +x:1 +怀柔 1 +x:1 +许可证 1 +x:1 +独舞 1 +x:1 +市属 1 +x:1 +鄢家河村 1 +x:1 +货票 1 +x:1 +他因 1 +x:1 +农广校 1 +x:1 +心潮 1 +x:1 +钻井 1 +x:1 +水泄不通 1 +x:1 +深圳队 1 +x:1 +数控 1 +x:1 +王家田 1 +x:1 +盲文版 1 +x:1 +长胫 1 +x:1 +他国 1 +x:1 +产蛋率 1 +x:1 +玉米须 1 +x:1 +御代表 1 +x:1 +倔强 1 +x:1 +鹦鹉学舌 1 +x:1 +质数 1 +x:1 +鲤鱼打挺 1 +x:1 +洪峰 1 +x:1 +缩水 1 +x:1 +洋奴 1 +x:1 +正副 1 +x:1 +天平集 1 +x:1 +二三流 1 +x:1 +精美绝伦 1 +x:1 +铺陈 1 +x:1 +大理 1 +x:1 +状貌 1 +x:1 +交谊舞 1 +x:1 +日以继夜 1 +x:1 +耳郭 1 +x:1 +铁皮大鼓 1 +x:1 +市县 1 +x:1 +责任感 1 +x:1 +郡 11 +x:11 +此公 1 +x:1 +独超 1 +x:1 +青田 1 +x:1 +开课 1 +x:1 +正剧 1 +x:1 +生吞活剥 1 +x:1 +心情 1 +x:1 +金 1144 +x:1144 +苍蝇拍子 1 +x:1 +愚蒙 1 +x:1 +元/吨 1 +x:1 +二苯基 1 +x:1 +栾城县 1 +x:1 +矫形 1 +x:1 +夹叙夹议 1 +x:1 +明山区 1 +x:1 +前嫌 1 +x:1 +纵论 1 +x:1 +湖滨 1 +x:1 +分团 1 +x:1 +吴语 1 +x:1 +妖猴 1 +x:1 +返程 1 +x:1 +心想 1 +x:1 +土头土脑 1 +x:1 +幽草 1 +x:1 +恍惚 1 +x:1 +独资 1 +x:1 +拉锯战 1 +x:1 +心态 1 +x:1 +旅业 1 +x:1 +煤矸石 1 +x:1 +洪山 1 +x:1 +一般化 1 +x:1 +注册名 1 +x:1 +市北 1 +x:1 +荥阳市 1 +x:1 +心思 1 +x:1 +草码 1 +x:1 +沉心 1 +x:1 +场记 1 +x:1 +秫米 1 +x:1 +藐藐 1 +x:1 +矿产部 1 +x:1 +银杏酮 1 +x:1 +心性 1 +x:1 +心急 1 +x:1 +因特网日 1 +x:1 +自民联 1 +x:1 +莲 13 +x:13 +阿摩尼亚 1 +x:1 +凝血因子 1 +x:1 +金融 1 +x:1 +广告战 1 +x:1 +洋姜 1 +x:1 +偌大 1 +x:1 +造纸局 1 +x:1 +董家河乡 1 +x:1 +门球场 1 +x:1 +东山乡 1 +x:1 +兑 134 +x:134 +定额 1 +x:1 +草质茎 1 +x:1 +吟哦 1 +x:1 +窑儿洼 1 +x:1 +总长 1 +x:1 +麦播 1 +x:1 +糖葫芦 1 +x:1 +苏公祠 1 +x:1 +岩蕊柱 1 +x:1 +质料 1 +x:1 +败诉 1 +x:1 +祝愿 1 +x:1 +点火器 1 +x:1 +颓垣断壁 1 +x:1 +开普敦 1 +x:1 +守灵 1 +x:1 +回天无力 1 +x:1 +顶撞 1 +x:1 +风速 1 +x:1 +瑞安市 1 +x:1 +蜂皇精 1 +x:1 +联苯胺 1 +x:1 +迷津 1 +x:1 +猪 185 +x:185 +恩泽 1 +x:1 +修配 1 +x:1 +雕刻 1 +x:1 +不言不语 1 +x:1 +烈酒 1 +x:1 +米粒 1 +x:1 +神经病学 1 +x:1 +山水画 1 +x:1 +铺面 1 +x:1 +轴箱 1 +x:1 +米粉 1 +x:1 +浑头浑脑 1 +x:1 +市办 1 +x:1 +亲见亲闻 1 +x:1 +创新 1 +x:1 +坦然 1 +x:1 +下降股 1 +x:1 +风量 1 +x:1 +妖物 1 +x:1 +打光棍儿 1 +x:1 +风采 1 +x:1 +杀伤性 1 +x:1 +甘蔗园 1 +x:1 +卜官庄村 1 +x:1 +伊循 1 +x:1 +区域性 1 +x:1 +监护人 1 +x:1 +雕刀 1 +x:1 +黄土庄 1 +x:1 +前定 1 +x:1 +争得 1 +x:1 +八沟路 1 +x:1 +麦收 1 +x:1 +牵头者 1 +x:1 +资历 1 +x:1 +储木场 1 +x:1 +农户区 1 +x:1 +包膜 1 +x:1 +草种 1 +x:1 +杜鹃 1 +x:1 +上元节 1 +x:1 +美人凤 1 +x:1 +挑战书 1 +x:1 +娇小玲珑 1 +x:1 +张扬 1 +x:1 +大曹庄 1 +x:1 +牌技 1 +x:1 +洁身 1 +x:1 +增补 1 +x:1 +这种 1 +x:1 +禁毒 1 +x:1 +农经系 1 +x:1 +米糠 1 +x:1 +教学区 1 +x:1 +对角线 1 +x:1 +青瓷 1 +x:1 +心意 1 +x:1 +排行表 1 +x:1 +抢险车 1 +x:1 +胡涂乱抹 1 +x:1 +美人儿 1 +x:1 +上呼吸道 1 +x:1 +钱江 1 +x:1 +电影馆 1 +x:1 +霸主 1 +x:1 +青瓦 1 +x:1 +购物额 1 +x:1 +正音 1 +x:1 +混莽 1 +x:1 +回老家 1 +x:1 +创收 1 +x:1 +棋王赛 1 +x:1 +有理有节 1 +x:1 +分场 1 +x:1 +桃力庙 1 +x:1 +看做 1 +x:1 +洮北区 1 +x:1 +霸业 1 +x:1 +氧分 1 +x:1 +市制 1 +x:1 +心愿 1 +x:1 +专用路 1 +x:1 +阖家团圆 1 +x:1 +赎金 1 +x:1 +步道 1 +x:1 +军事管制 1 +x:1 +孟庙 1 +x:1 +欢畅 1 +x:1 +卡尔沃格 1 +x:1 +沉底 1 +x:1 +黄龙山 1 +x:1 +鞠躬尽瘁 1 +x:1 +奋发上进 1 +x:1 +防守型 1 +x:1 +把盏 1 +x:1 +录像馆 1 +x:1 +两点 1 +x:1 +甘洛乡 1 +x:1 +蹦床 1 +x:1 +送葬 1 +x:1 +手检 1 +x:1 +稽留热 1 +x:1 +凛然 1 +x:1 +门 578 +x:578 +坚持不懈 1 +x:1 +城南庄 1 +x:1 +较为 1 +x:1 +估衡 1 +x:1 +金蛇 1 +x:1 +念头 1 +x:1 +稍候 1 +x:1 +不自由 1 +x:1 +出资国 1 +x:1 +市内 1 +x:1 +溃 3 +x:3 +草窝 1 +x:1 +食狗 1 +x:1 +塔形罐 1 +x:1 +挂历 1 +x:1 +字字 1 +x:1 +插曲奖 1 +x:1 +当儿 1 +x:1 +担保法 1 +x:1 +音强 1 +x:1 +北大派 1 +x:1 +青睐 1 +x:1 +承保者 1 +x:1 +原粮 1 +x:1 +肉酱 1 +x:1 +捞钱 1 +x:1 +质材 1 +x:1 +津贴费 1 +x:1 +市况 1 +x:1 +估计 1 +x:1 +重茬 1 +x:1 +残废证 1 +x:1 +质权 1 +x:1 +偏重 1 +x:1 +落户 1 +x:1 +川流不息 1 +x:1 +暖房 1 +x:1 +左侧 1 +x:1 +质朴 1 +x:1 +此卡 1 +x:1 +床板 1 +x:1 +冠军杯 1 +x:1 +助产师 1 +x:1 +落成 1 +x:1 +烧 155 +x:155 +至尊 1 +x:1 +停车线 1 +x:1 +独辫 1 +x:1 +折衷 1 +x:1 +狍子 1 +x:1 +重码率 1 +x:1 +麻栗坡县 1 +x:1 +飞蛾投火 1 +x:1 +青石 1 +x:1 +伊尔 1 +x:1 +喜怒哀乐 1 +x:1 +弥勒县 1 +x:1 +言和 1 +x:1 +英雄汉 1 +x:1 +音律 1 +x:1 +闲庭信步 1 +x:1 +把兄弟 1 +x:1 +涌浪 1 +x:1 +特异功能 1 +x:1 +手段 1 +x:1 +利害攸关 1 +x:1 +平绥路 1 +x:1 +造型艺术 1 +x:1 +表里如一 1 +x:1 +证管 1 +x:1 +盱眙县 1 +x:1 +米缸 1 +x:1 +分蓄洪区 1 +x:1 +草稿 1 +x:1 +碘化钾 1 +x:1 +西陲 1 +x:1 +财农事 1 +x:1 +院容 1 +x:1 +天气图 1 +x:1 +初保 1 +x:1 +收藏家 1 +x:1 +心房 1 +x:1 +他家 1 +x:1 +半掘浦 1 +x:1 +庸 15 +x:15 +战舰 1 +x:1 +某种 1 +x:1 +用电处 1 +x:1 +雕凿 1 +x:1 +味腴书室 1 +x:1 +纵横捭阖 1 +x:1 +陈列部 1 +x:1 +南丰村 1 +x:1 +迷途者 1 +x:1 +披麻戴孝 1 +x:1 +熠熠生辉 1 +x:1 +说尽 1 +x:1 +网联 1 +x:1 +姐 13 +x:13 +女儿岛 1 +x:1 +黎族 1 +x:1 +碘化银 1 +x:1 +食言而肥 1 +x:1 +苦参 1 +x:1 +外滩 1 +x:1 +户籍科 1 +x:1 +旁遮普省 1 +x:1 +抄家 1 +x:1 +手模 1 +x:1 +运输险 1 +x:1 +全员性 1 +x:1 +青白 1 +x:1 +建议案 1 +x:1 +迷漫 1 +x:1 +审判员 1 +x:1 +近东 1 +x:1 +联邦德国 1 +x:1 +此刻 1 +x:1 +皖南 1 +x:1 +裙子 1 +x:1 +材料科学 1 +x:1 +前妻 1 +x:1 +屁股 1 +x:1 +地热井 1 +x:1 +高压界 1 +x:1 +米纳 1 +x:1 +网膜 1 +x:1 +给养 1 +x:1 +编码夹 1 +x:1 +教学关 1 +x:1 +此列 1 +x:1 +医疗型 1 +x:1 +酥糖 1 +x:1 +音带 1 +x:1 +威胁论 1 +x:1 +动人 1 +x:1 +伊川 1 +x:1 +稍加 1 +x:1 +炎凉 1 +x:1 +酽酽 1 +x:1 +此剧 1 +x:1 +大行星 1 +x:1 +水泵头 1 +x:1 +叫好 1 +x:1 +阴转多云 1 +x:1 +皖北 1 +x:1 +信鸽 1 +x:1 +动产 1 +x:1 +海合会 1 +x:1 +玩具厂 1 +x:1 +冰温 1 +x:1 +田野工作 1 +x:1 +独身 1 +x:1 +路 1426 +x:1426 +前委 1 +x:1 +运输队 1 +x:1 +上下床 1 +x:1 +蚕箔 1 +x:1 +声震中外 1 +x:1 +取暖 1 +x:1 +短处 1 +x:1 +苦劳 1 +x:1 +青冈树 1 +x:1 +动乱 1 +x:1 +前天 1 +x:1 +前夫 1 +x:1 +不合 1 +x:1 +百花洲 1 +x:1 +前头 1 +x:1 +音序 1 +x:1 +长春村 1 +x:1 +动真格的 1 +x:1 +金融业 1 +x:1 +金蒙 1 +x:1 +敲敲打打 1 +x:1 +苦力 1 +x:1 +报道员 1 +x:1 +前夕 1 +x:1 +九宫山 1 +x:1 +古旧 1 +x:1 +市值 1 +x:1 +前夜 1 +x:1 +资兴 1 +x:1 +头版头条 1 +x:1 +达标 1 +x:1 +后嗣 1 +x:1 +淄 1 +x:1 +无忧无虑 1 +x:1 +释疑 1 +x:1 +衣纹 1 +x:1 +黑木耳 1 +x:1 +显目 1 +x:1 +攀援者 1 +x:1 +开味品 1 +x:1 +严词 1 +x:1 +证章 1 +x:1 +凭条 1 +x:1 +信望 1 +x:1 +黎方 1 +x:1 +前奏 1 +x:1 +场裁 1 +x:1 +雕像 1 +x:1 +工作室 1 +x:1 +斗拱 1 +x:1 +全能型 1 +x:1 +滩涂 1 +x:1 +讲课稿 1 +x:1 +严谨 1 +x:1 +掉头 1 +x:1 +心理学 1 +x:1 +天狼星 1 +x:1 +分力 1 +x:1 +显然 1 +x:1 +孟子 1 +x:1 +大千世界 1 +x:1 +短库 1 +x:1 +手活 1 +x:1 +风铲 1 +x:1 +投诉人 1 +x:1 +原料库 1 +x:1 +主权 1 +x:1 +菜子坝村 1 +x:1 +风铃 1 +x:1 +教授级 1 +x:1 +资源性 1 +x:1 +后肢 1 +x:1 +技校生 1 +x:1 +双簧 1 +x:1 +两用 1 +x:1 +城管 1 +x:1 +蝌蚪 1 +x:1 +摄影机 1 +x:1 +凹凸 1 +x:1 +售报亭 1 +x:1 +黑里寨 1 +x:1 +蜗壳状 1 +x:1 +市域 1 +x:1 +插科打诨 1 +x:1 +潜台词 1 +x:1 +质感 1 +x:1 +中国情 1 +x:1 +审判区 1 +x:1 +离岸价 1 +x:1 +青果协 1 +x:1 +金戈铁马 1 +x:1 +灶膛 1 +x:1 +移动靶 1 +x:1 +冲撞力 1 +x:1 +迷梦 1 +x:1 +分划 1 +x:1 +金莲 1 +x:1 +分列 1 +x:1 +密押 1 +x:1 +丧礼 1 +x:1 +步长 1 +x:1 +裁定书 1 +x:1 +常值 1 +x:1 +沉寂 1 +x:1 +弧线球 1 +x:1 +双肩包 1 +x:1 +忌妒心 1 +x:1 +炸肉 1 +x:1 +运输量 1 +x:1 +筋肉 1 +x:1 +双糖 1 +x:1 +圆圆满满 1 +x:1 +减量化 1 +x:1 +市地 1 +x:1 +把玩 1 +x:1 +征稽所 1 +x:1 +分别 1 +x:1 +助产士 1 +x:1 +斗方 1 +x:1 +一览无余 1 +x:1 +尽其所有 1 +x:1 +沉实 1 +x:1 +手淫 1 +x:1 +愚者 1 +x:1 +难色 1 +x:1 +将军林 1 +x:1 +前年 1 +x:1 +道 871 +x:871 +审判厅 1 +x:1 +贪心不足 1 +x:1 +惨象 1 +x:1 +货物 1 +x:1 +雪花膏 1 +x:1 +分割 1 +x:1 +草籽 1 +x:1 +贷款人 1 +x:1 +民和委 1 +x:1 +只 3901 +x:3901 +混蛋 1 +x:1 +伊克昭盟 1 +x:1 +日常用语 1 +x:1 +凯歌声 1 +x:1 +迂阔 1 +x:1 +金菊 1 +x:1 +烧夷弹 1 +x:1 +时有时停 1 +x:1 +名垂青史 1 +x:1 +青灰 1 +x:1 +独裁 1 +x:1 +篱墙 1 +x:1 +变动表 1 +x:1 +产奶率 1 +x:1 +风闸 1 +x:1 +分厂 1 +x:1 +风闻 1 +x:1 +龟兔赛跑 1 +x:1 +枪决 1 +x:1 +大打出手 1 +x:1 +致谢函 1 +x:1 +青灯 1 +x:1 +此间 1 +x:1 +此后 1 +x:1 +诚 57 +x:57 +高高挂起 1 +x:1 +吃后悔药 1 +x:1 +痴痴 1 +x:1 +都城墙 1 +x:1 +手气 1 +x:1 +投诉信 1 +x:1 +分发 1 +x:1 +苦味 1 +x:1 +说定 1 +x:1 +摆 459 +x:459 +食疗 1 +x:1 +米家沟 1 +x:1 +苦命 1 +x:1 +养兔场 1 +x:1 +有权有势 1 +x:1 +筋腱 1 +x:1 +监视屏 1 +x:1 +洛孜峰 1 +x:1 +血肉相联 1 +x:1 +核电界 1 +x:1 +分叉 1 +x:1 +迷楼 1 +x:1 +茶客 1 +x:1 +洋将 1 +x:1 +分号 1 +x:1 +左上臂 1 +x:1 +军需业 1 +x:1 +匕首 1 +x:1 +口盖 1 +x:1 +他山 1 +x:1 +分句 1 +x:1 +祸 14 +x:14 +说客 1 +x:1 +接头路 1 +x:1 +直燃型 1 +x:1 +函电 1 +x:1 +运输部 1 +x:1 +补贴金 1 +x:1 +斐然 1 +x:1 +分化 1 +x:1 +腱子 1 +x:1 +短式 1 +x:1 +诗牌 1 +x:1 +抢注 1 +x:1 +落日 1 +x:1 +分包 1 +x:1 +创意 1 +x:1 +惨败 1 +x:1 +家电业 1 +x:1 +分区 1 +x:1 +青烟 1 +x:1 +继任者 1 +x:1 +跑马山 1 +x:1 +索非亚 1 +x:1 +风镜 1 +x:1 +风镐 1 +x:1 +包蕴 1 +x:1 +怀涿 1 +x:1 +朴素 1 +x:1 +无可否认 1 +x:1 +嘎昌河 1 +x:1 +魂萦梦绕 1 +x:1 +避震器 1 +x:1 +对谈 1 +x:1 +言及 1 +x:1 +风锤 1 +x:1 +翌 2 +x:2 +魏 273 +x:273 +抽泣声 1 +x:1 +雪情 1 +x:1 +洪大 1 +x:1 +车摊 1 +x:1 +中下层 1 +x:1 +速描 1 +x:1 +设卡 1 +x:1 +张家口市 1 +x:1 +分卷 1 +x:1 +稍后 1 +x:1 +一次函数 1 +x:1 +森 36 +x:36 +葱 9 +x:9 +初版本 1 +x:1 +手法 1 +x:1 +食用 1 +x:1 +心数 1 +x:1 +燃油费 1 +x:1 +风雨 1 +x:1 +一 47278 +x:47278 +风雪 1 +x:1 +朦胧诗 1 +x:1 +狼狈为奸 1 +x:1 +水族箱 1 +x:1 +停车站 1 +x:1 +食盒 1 +x:1 +食盐 1 +x:1 +风雹 1 +x:1 +吴越 1 +x:1 +孔子 1 +x:1 +立等可取 1 +x:1 +板蓝根 1 +x:1 +责任险 1 +x:1 +此地 1 +x:1 +汗水淋漓 1 +x:1 +草纸 1 +x:1 +墒情点 1 +x:1 +约会室 1 +x:1 +字形 1 +x:1 +食相 1 +x:1 +风雅 1 +x:1 +搭配 1 +x:1 +无地自容 1 +x:1 +鱼肚白 1 +x:1 +札幌 1 +x:1 +正道 1 +x:1 +滤斗 1 +x:1 +三联单 1 +x:1 +惊心动魄 1 +x:1 +草约 1 +x:1 +滑稽剧团 1 +x:1 +山桃花 1 +x:1 +制作人 1 +x:1 +聚散无常 1 +x:1 +切骨之仇 1 +x:1 +泗 1 +x:1 +舆论界 1 +x:1 +运用 1 +x:1 +牡牛 1 +x:1 +广交朋友 1 +x:1 +草绿 1 +x:1 +烈阳 1 +x:1 +草绳 1 +x:1 +奏疏 1 +x:1 +猫头鹰 1 +x:1 +风障 1 +x:1 +黍子 1 +x:1 +穷兵黩武 1 +x:1 +心曲 1 +x:1 +正途 1 +x:1 +风险 1 +x:1 +肢解 1 +x:1 +显现 1 +x:1 +短小 1 +x:1 +全美 1 +x:1 +老本行 1 +x:1 +忘义 1 +x:1 +焕 3 +x:3 +下考乡 1 +x:1 +大康队 1 +x:1 +羽毛球拍 1 +x:1 +耳际 1 +x:1 +寨东 1 +x:1 +民主观 1 +x:1 +筋节 1 +x:1 +税务局 1 +x:1 +宿州市 1 +x:1 +分值 1 +x:1 +魄散魂飞 1 +x:1 +明晃晃 1 +x:1 +前尘 1 +x:1 +水泥砖 1 +x:1 +断头路 1 +x:1 +哭天哭地 1 +x:1 +意气用事 1 +x:1 +区旗 1 +x:1 +拈 7 +x:7 +输送带 1 +x:1 +能出能进 1 +x:1 +泽及后人 1 +x:1 +水口镇 1 +x:1 +衣箱 1 +x:1 +多发病 1 +x:1 +质控 1 +x:1 +佛拉明戈 1 +x:1 +笑话百出 1 +x:1 +制作业 1 +x:1 +双顶山 1 +x:1 +场上 1 +x:1 +栉比鳞次 1 +x:1 +场下 1 +x:1 +近代 1 +x:1 +钱款 1 +x:1 +心智 1 +x:1 +蝗害 1 +x:1 +壮观 1 +x:1 +青玉 1 +x:1 +苦口良药 1 +x:1 +字幅 1 +x:1 +目无表情 1 +x:1 +哐啷 1 +x:1 +暴风骤雨 1 +x:1 +正酣 1 +x:1 +冷空气 1 +x:1 +垂青史 1 +x:1 +两百 1 +x:1 +主机 1 +x:1 +分内 1 +x:1 +芥酸 1 +x:1 +分册 1 +x:1 +风韵 1 +x:1 +演奏者 1 +x:1 +常压 1 +x:1 +成竹在胸 1 +x:1 +哈尔盖 1 +x:1 +总政治部 1 +x:1 +八都镇 1 +x:1 +寒症 1 +x:1 +龙泉山 1 +x:1 +吱吱悠悠 1 +x:1 +熟字 1 +x:1 +借阅台 1 +x:1 +倒挂金钟 1 +x:1 +察察为明 1 +x:1 +深山 1 +x:1 +肝胆照人 1 +x:1 +医疗史 1 +x:1 +良方 1 +x:1 +介面 1 +x:1 +败象 1 +x:1 +状语 1 +x:1 +绿灯 1 +x:1 +群魔乱舞 1 +x:1 +进货员 1 +x:1 +饥饱无时 1 +x:1 +木头人 1 +x:1 +下半夜 1 +x:1 +演技 1 +x:1 +短工 1 +x:1 +金属罐 1 +x:1 +一月份 1 +x:1 +艇长 1 +x:1 +寒疟 1 +x:1 +大豆胶 1 +x:1 +沟沟坎坎 1 +x:1 +杰 230 +x:230 +高唐县 1 +x:1 +扳子 1 +x:1 +辅助货币 1 +x:1 +斗智 1 +x:1 +高脚屋 1 +x:1 +太空服 1 +x:1 +心服 1 +x:1 +风靡 1 +x:1 +痛心疾首 1 +x:1 +洁行 1 +x:1 +草编 1 +x:1 +过关斩将 1 +x:1 +大中城市 1 +x:1 +减收 1 +x:1 +双翼 1 +x:1 +电镀厂 1 +x:1 +喋血 1 +x:1 +石嘴山市 1 +x:1 +采矿业 1 +x:1 +扑面而来 1 +x:1 +对头 1 +x:1 +心机 1 +x:1 +严辞 1 +x:1 +搭台 1 +x:1 +圣维森 1 +x:1 +落架 1 +x:1 +万元户 1 +x:1 +质押 1 +x:1 +三边形 1 +x:1 +乙烯 1 +x:1 +馒头营乡 1 +x:1 +不均 1 +x:1 +医疗卡 1 +x:1 +字库 1 +x:1 +燔 1 +x:1 +游戏池 1 +x:1 +胼手胝足 1 +x:1 +分光 1 +x:1 +南通市 1 +x:1 +海连路 1 +x:1 +识别 1 +x:1 +预测处 1 +x:1 +达江 1 +x:1 +落果 1 +x:1 +凭据 1 +x:1 +大黄鱼 1 +x:1 +特等奖 1 +x:1 +风霜 1 +x:1 +洋底 1 +x:1 +一团糟 1 +x:1 +城砖 1 +x:1 +六言诗 1 +x:1 +青海 1 +x:1 +奉劝 1 +x:1 +高远 1 +x:1 +脚底 1 +x:1 +精雕细琢 1 +x:1 +走资派 1 +x:1 +鲅鱼圈区 1 +x:1 +水勘院 1 +x:1 +麻团 1 +x:1 +有勇有谋 1 +x:1 +青浦 1 +x:1 +自动化系 1 +x:1 +铁骑 1 +x:1 +聊聊天 1 +x:1 +潍县 1 +x:1 +冠盖云集 1 +x:1 +两居室 1 +x:1 +票房 1 +x:1 +白桦树 1 +x:1 +责任街 1 +x:1 +抗议信 1 +x:1 +货源 1 +x:1 +修补 1 +x:1 +独门 1 +x:1 +言中 1 +x:1 +气吞山河 1 +x:1 +分交 1 +x:1 +出差者 1 +x:1 +热闹非凡 1 +x:1 +分享 1 +x:1 +原生油 1 +x:1 +狂野 1 +x:1 +千头万绪 1 +x:1 +黑山 1 +x:1 +还原剂 1 +x:1 +青洲 1 +x:1 +钻头 1 +x:1 +望门寡 1 +x:1 +汽化热 1 +x:1 +国资委 1 +x:1 +觑 3 +x:3 +尖碑 1 +x:1 +干电池 1 +x:1 +运输费 1 +x:1 +数理 1 +x:1 +茌平 1 +x:1 +炸鱼 1 +x:1 +本专科 1 +x:1 +梨枣 1 +x:1 +诉权 1 +x:1 +担子 1 +x:1 +统 36 +x:36 +发言者 1 +x:1 +纪念币 1 +x:1 +八字步 1 +x:1 +争夺圈 1 +x:1 +郫 1 +x:1 +祭器 1 +x:1 +累教不改 1 +x:1 +儒雅 1 +x:1 +民族情 1 +x:1 +塘沽港 1 +x:1 +麦秆虫 1 +x:1 +秉公 1 +x:1 +幽魂 1 +x:1 +华容县 1 +x:1 +劫机 1 +x:1 +傻呵呵 1 +x:1 +钳口结舌 1 +x:1 +纪检组 1 +x:1 +概览表 1 +x:1 +誓师大会 1 +x:1 +和鸣 1 +x:1 +西堡村 1 +x:1 +办校 1 +x:1 +分业 1 +x:1 +风衣 1 +x:1 +民族性 1 +x:1 +列 326 +x:326 +洁静 1 +x:1 +科学院 1 +x:1 +风行 1 +x:1 +来料加工 1 +x:1 +贩 36 +x:36 +分为 1 +x:1 +金龟 1 +x:1 +家乡人 1 +x:1 +匆匆忙忙 1 +x:1 +干涧 1 +x:1 +萨罗夫市 1 +x:1 +交往史 1 +x:1 +户 1338 +x:1338 +扣发 1 +x:1 +正身 1 +x:1 +店主任 1 +x:1 +六七点钟 1 +x:1 +分乘 1 +x:1 +猜拳行令 1 +x:1 +麦精 1 +x:1 +拿三搬四 1 +x:1 +无所顾忌 1 +x:1 +摇头摆尾 1 +x:1 +惨遭 1 +x:1 +苗家社 1 +x:1 +分之 1 +x:1 +扣压 1 +x:1 +麦粒 1 +x:1 +正义之举 1 +x:1 +重围 1 +x:1 +孙媳妇 1 +x:1 +分析化学 1 +x:1 +抢险队 1 +x:1 +军需厂 1 +x:1 +送往迎来 1 +x:1 +拂尘 1 +x:1 +喜笑颜开 1 +x:1 +当轴处中 1 +x:1 +山核桃 1 +x:1 +净现金 1 +x:1 +喜新厌旧 1 +x:1 +铺轨 1 +x:1 +秉借 1 +x:1 +电力城 1 +x:1 +兼管 1 +x:1 +购物者 1 +x:1 +萎 2 +x:2 +金鸡 1 +x:1 +提前 1 +x:1 +圣地亚哥 1 +x:1 +恒星系 1 +x:1 +赖氨酸 1 +x:1 +深县 1 +x:1 +看得起 1 +x:1 +蜚声中外 1 +x:1 +寻甸 1 +x:1 +追根究底 1 +x:1 +食槽 1 +x:1 +投诉厅 1 +x:1 +钻塔 1 +x:1 +灌区 1 +x:1 +青江 1 +x:1 +无关宏旨 1 +x:1 +寒毛 1 +x:1 +变电所 1 +x:1 +芒萁 1 +x:1 +酷暑 1 +x:1 +车改 1 +x:1 +口头语 1 +x:1 +尾市 1 +x:1 +老半日 1 +x:1 +和龙 1 +x:1 +纪念张 1 +x:1 +丁步头 1 +x:1 +毒害 1 +x:1 +败亡 1 +x:1 +苗头性 1 +x:1 +分保 1 +x:1 +救命之恩 1 +x:1 +清洁度 1 +x:1 +投诉台 1 +x:1 +求同求异 1 +x:1 +示范店 1 +x:1 +影片 1 +x:1 +水泥柱 1 +x:1 +严酷 1 +x:1 +分子论 1 +x:1 +高收入者 1 +x:1 +缓流 1 +x:1 +祭坛 1 +x:1 +章目 1 +x:1 +报靶员 1 +x:1 +坎坎坷坷 1 +x:1 +画趣 1 +x:1 +开放 1 +x:1 +学校门 1 +x:1 +蜀葵 1 +x:1 +两栖 1 +x:1 +同悲 1 +x:1 +因时制宜 1 +x:1 +死火山 1 +x:1 +活龙活现 1 +x:1 +反客为主 1 +x:1 +荡荡 1 +x:1 +树花 1 +x:1 +搜索枯肠 1 +x:1 +似地 1 +x:1 +健步 1 +x:1 +安第斯 1 +x:1 +分会 1 +x:1 +床 130 +x:130 +风雨无阻 1 +x:1 +奉化 1 +x:1 +义师 1 +x:1 +教材 1 +x:1 +知识类 1 +x:1 +总的来说 1 +x:1 +包饭 1 +x:1 +步行 1 +x:1 +动员 1 +x:1 +感慨万端 1 +x:1 +抗议书 1 +x:1 +手炉 1 +x:1 +溪 15 +x:15 +铅矿 1 +x:1 +舟曲县 1 +x:1 +持之有故 1 +x:1 +壶盖 1 +x:1 +昨日 1 +x:1 +裙带风 1 +x:1 +耕层 1 +x:1 +排版费 1 +x:1 +分体 1 +x:1 +生成素 1 +x:1 +粗陋 1 +x:1 +因袭 1 +x:1 +象牙白 1 +x:1 +重病号 1 +x:1 +青沧 1 +x:1 +黑工 1 +x:1 +心神 1 +x:1 +动听 1 +x:1 +水泥板 1 +x:1 +总的来讲 1 +x:1 +抢点 1 +x:1 +缫丝 1 +x:1 +喧哗 1 +x:1 +示范带 1 +x:1 +福气 1 +x:1 +跨 1049 +x:1049 +动向 1 +x:1 +东门码头 1 +x:1 +茶花王 1 +x:1 +书口 1 +x:1 +栗色 1 +x:1 +孕产期 1 +x:1 +树大根深 1 +x:1 +自足感 1 +x:1 +斐济 1 +x:1 +成龙 1 +x:1 +尿素厂 1 +x:1 +心窍 1 +x:1 +渭 3 +x:3 +修车点 1 +x:1 +清洁工 1 +x:1 +绿洲 1 +x:1 +落空 1 +x:1 +常人 1 +x:1 +褒 2 +x:2 +黄色文学 1 +x:1 +心窝 1 +x:1 +满盘皆活 1 +x:1 +阿布迪斯 1 +x:1 +搭乘 1 +x:1 +上新世 1 +x:1 +常事 1 +x:1 +计时 1 +x:1 +高朋满座 1 +x:1 +战歌 1 +x:1 +斗笠 1 +x:1 +新生力量 1 +x:1 +双手 1 +x:1 +尖端 1 +x:1 +黑市 1 +x:1 +双打 1 +x:1 +纪念展 1 +x:1 +今晨 1 +x:1 +外文 1 +x:1 +雕塑史 1 +x:1 +待遇 1 +x:1 +无可厚非 1 +x:1 +曼德 1 +x:1 +保包制 1 +x:1 +草拟 1 +x:1 +朴拙 1 +x:1 +梳洗 1 +x:1 +讼法庭 1 +x:1 +常任 1 +x:1 +扣儿 1 +x:1 +审讯 1 +x:1 +太空站 1 +x:1 +创组 1 +x:1 +田纳西州 1 +x:1 +瘤 3 +x:3 +虹口区 1 +x:1 +纪念封 1 +x:1 +黑幕 1 +x:1 +衣服 1 +x:1 +楼兰学 1 +x:1 +着力点 1 +x:1 +贷款值 1 +x:1 +证据 1 +x:1 +寒梅 1 +x:1 +上交款 1 +x:1 +金融城 1 +x:1 +义工 1 +x:1 +重地 1 +x:1 +双拥 1 +x:1 +采矿区 1 +x:1 +分市场 1 +x:1 +紫蓝蓝 1 +x:1 +电影节 1 +x:1 +礼貌性 1 +x:1 +干洗 1 +x:1 +屡见不鲜 1 +x:1 +客源国 1 +x:1 +羞 14 +x:14 +仿造 1 +x:1 +草房 1 +x:1 +银两 1 +x:1 +赵集乡 1 +x:1 +北美 1 +x:1 +荷池 1 +x:1 +幽香 1 +x:1 +起止点 1 +x:1 +妙常 1 +x:1 +莱钢 1 +x:1 +双拐 1 +x:1 +衣柜 1 +x:1 +衷肠 1 +x:1 +丧服 1 +x:1 +数目 1 +x:1 +双抢 1 +x:1 +诳话 1 +x:1 +匠 7 +x:7 +米村 1 +x:1 +蹂躏 1 +x:1 +尾巴 1 +x:1 +森尼维尔 1 +x:1 +建协 1 +x:1 +大吉大利 1 +x:1 +衣架 1 +x:1 +城镇群 1 +x:1 +书友 1 +x:1 +动土 1 +x:1 +声东击西 1 +x:1 +电镀件 1 +x:1 +石花菜 1 +x:1 +顾虑重重 1 +x:1 +斗篷 1 +x:1 +国民军 1 +x:1 +民族所 1 +x:1 +名医药 1 +x:1 +独霸 1 +x:1 +杆子 1 +x:1 +西华营镇 1 +x:1 +起草组 1 +x:1 +明公正道 1 +x:1 +养牛户 1 +x:1 +绿水 1 +x:1 +刀锯 1 +x:1 +动因 1 +x:1 +协定国 1 +x:1 +心算 1 +x:1 +撰著 1 +x:1 +起起伏伏 1 +x:1 +常例 1 +x:1 +战死 1 +x:1 +贝壳馆 1 +x:1 +斩草除根 1 +x:1 +败退 1 +x:1 +荒无人烟 1 +x:1 +耳语 1 +x:1 +直肠癌 1 +x:1 +全立交 1 +x:1 +黑影 1 +x:1 +定窑 1 +x:1 +售票口 1 +x:1 +混饭 1 +x:1 +坦率 1 +x:1 +金鱼 1 +x:1 +奶声奶气 1 +x:1 +夯实 1 +x:1 +修改案 1 +x:1 +示范岗 1 +x:1 +售票台 1 +x:1 +玉覆面 1 +x:1 +搭伙 1 +x:1 +好意 1 +x:1 +单立人 1 +x:1 +落笔 1 +x:1 +求学者 1 +x:1 +磨杵成针 1 +x:1 +豪 4 +x:4 +闯 275 +x:275 +迥异 1 +x:1 +搭伴 1 +x:1 +鞋店 1 +x:1 +鞋底 1 +x:1 +广告科 1 +x:1 +身受 1 +x:1 +心篱 1 +x:1 +制作厂 1 +x:1 +场道 1 +x:1 +俺们 1 +x:1 +成问题 1 +x:1 +铺路 1 +x:1 +正路 1 +x:1 +长天 1 +x:1 +五严禁 1 +x:1 +白龟山 1 +x:1 +承发包 1 +x:1 +冠军级 1 +x:1 +因特网络 1 +x:1 +枣椰树 1 +x:1 +家什儿 1 +x:1 +笑容满面 1 +x:1 +绿荫丛 1 +x:1 +张单驼 1 +x:1 +彝山 1 +x:1 +下周 1 +x:1 +猫 49 +x:49 +终身制 1 +x:1 +常会 1 +x:1 +外向型 1 +x:1 +抗孕片 1 +x:1 +像模像样 1 +x:1 +遗传性 1 +x:1 +钙化 1 +x:1 +海岛岸线 1 +x:1 +场部 1 +x:1 +鞋带 1 +x:1 +鸡汤 1 +x:1 +雕塑刀 1 +x:1 +义展 1 +x:1 +鞋帮 1 +x:1 +易燃物品 1 +x:1 +烫金 1 +x:1 +缩短 1 +x:1 +勖 1 +x:1 +数字式 1 +x:1 +创造型 1 +x:1 +硝 3 +x:3 +监护员 1 +x:1 +仿真机 1 +x:1 +奉养 1 +x:1 +秘本 1 +x:1 +阖家幸福 1 +x:1 +花香鸟语 1 +x:1 +箱管费 1 +x:1 +食欲 1 +x:1 +老寿星 1 +x:1 +光乎乎 1 +x:1 +货流 1 +x:1 +虹 50 +x:50 +旱情 1 +x:1 +江南乡 1 +x:1 +积肥 1 +x:1 +左耳 1 +x:1 +填喂 1 +x:1 +青楼 1 +x:1 +妙境 1 +x:1 +哀婉 1 +x:1 +瘾头 1 +x:1 +画语录 1 +x:1 +争执点 1 +x:1 +选择会 1 +x:1 +粗制滥造 1 +x:1 +大雄宝殿 1 +x:1 +手电 1 +x:1 +靛水 1 +x:1 +垫片 1 +x:1 +败露 1 +x:1 +名评论员 1 +x:1 +邪沟村 1 +x:1 +法场 1 +x:1 +市侩 1 +x:1 +积极分子 1 +x:1 +伴生气 1 +x:1 +官能 1 +x:1 +书包 1 +x:1 +殊途同归 1 +x:1 +劫持 1 +x:1 +悲欢 1 +x:1 +给与 1 +x:1 +服兵役 1 +x:1 +场面 1 +x:1 +守法 1 +x:1 +无冬论夏 1 +x:1 +游泳馆 1 +x:1 +闲言闲语 1 +x:1 +哈密市 1 +x:1 +炉口 1 +x:1 +担当 1 +x:1 +行窃 1 +x:1 +开方 1 +x:1 +风貌 1 +x:1 +节庆日 1 +x:1 +食油 1 +x:1 +仿字 1 +x:1 +资产 1 +x:1 +官股 1 +x:1 +国际部 1 +x:1 +紫荆 1 +x:1 +交汇点 1 +x:1 +双柏县 1 +x:1 +屯昌县 1 +x:1 +补习班 1 +x:1 +雅安 1 +x:1 +碰碰车 1 +x:1 +官职 1 +x:1 +担待 1 +x:1 +颈 14 +x:14 +企鹅岛 1 +x:1 +诗歌 1 +x:1 +服 67 +x:67 +给付 1 +x:1 +归集率 1 +x:1 +游山玩水 1 +x:1 +堕入 1 +x:1 +色谱仪 1 +x:1 +手疾 1 +x:1 +自然选择 1 +x:1 +批准证 1 +x:1 +某某 1 +x:1 +政令 1 +x:1 +深南 1 +x:1 +丧 15 +x:15 +给以 1 +x:1 +出家为尼 1 +x:1 +贷款国 1 +x:1 +疙疙瘩瘩 1 +x:1 +愚顽 1 +x:1 +仿宋 1 +x:1 +小心眼 1 +x:1 +是役 1 +x:1 +气象万千 1 +x:1 +基因库 1 +x:1 +鞋帽部 1 +x:1 +灰眉土脸 1 +x:1 +给予 1 +x:1 +雷霆 1 +x:1 +义子 1 +x:1 +霸占 1 +x:1 +风谣 1 +x:1 +担心 1 +x:1 +绿毯 1 +x:1 +饶阳 1 +x:1 +肋巴骨 1 +x:1 +计息 1 +x:1 +身高马大 1 +x:1 +旅差费 1 +x:1 +盗版者 1 +x:1 +军兵种 1 +x:1 +劫掠 1 +x:1 +余家村 1 +x:1 +启用 1 +x:1 +合格率 1 +x:1 +担忧 1 +x:1 +数点 1 +x:1 +潍坊 1 +x:1 +手痒 1 +x:1 +浴室 1 +x:1 +南丰祠 1 +x:1 +售票员 1 +x:1 +法学家 1 +x:1 +典雅无华 1 +x:1 +输血器 1 +x:1 +黑头 1 +x:1 +雕塑品 1 +x:1 +进程 1 +x:1 +梯 12 +x:12 +滤纸 1 +x:1 +败阵 1 +x:1 +罪魁祸首 1 +x:1 +手球 1 +x:1 +导火线 1 +x:1 +马日事变 1 +x:1 +挤 198 +x:198 +滑坡体 1 +x:1 +两汉 1 +x:1 +古训 1 +x:1 +左脚 1 +x:1 +黑夜 1 +x:1 +除草剂 1 +x:1 +资信 1 +x:1 +栏目类 1 +x:1 +确认函 1 +x:1 +橡胶草 1 +x:1 +国房 1 +x:1 +大穗 1 +x:1 +黑奴 1 +x:1 +斑斑痕痕 1 +x:1 +钻尺 1 +x:1 +风趣 1 +x:1 +非蛋白 1 +x:1 +场院 1 +x:1 +左腿 1 +x:1 +生育期 1 +x:1 +烫面 1 +x:1 +含漱剂 1 +x:1 +棵棵 1 +x:1 +退役证 1 +x:1 +园 66 +x:66 +同甘共苦 1 +x:1 +国际纵队 1 +x:1 +建始县 1 +x:1 +享乐者 1 +x:1 +较劲 1 +x:1 +正副职 1 +x:1 +磨洋工 1 +x:1 +诞生地 1 +x:1 +青委会 1 +x:1 +用工权 1 +x:1 +金融债 1 +x:1 +正误 1 +x:1 +策源地 1 +x:1 +疫病 1 +x:1 +麦秸 1 +x:1 +货款 1 +x:1 +妙处 1 +x:1 +运动学 1 +x:1 +民 429 +x:429 +无可替代 1 +x:1 +怀疑 1 +x:1 +正课 1 +x:1 +王家村 1 +x:1 +拙译 1 +x:1 +青森 1 +x:1 +事在人为 1 +x:1 +官腔 1 +x:1 +组织者 1 +x:1 +修路 1 +x:1 +双旋 1 +x:1 +北七家镇 1 +x:1 +摄影组 1 +x:1 +邪风 1 +x:1 +麦秆 1 +x:1 +益虫 1 +x:1 +冷血动物 1 +x:1 +麦秋 1 +x:1 +麦种 1 +x:1 +制作商 1 +x:1 +自由港 1 +x:1 +捷足者 1 +x:1 +纪念室 1 +x:1 +殡葬工 1 +x:1 +赵县 1 +x:1 +调批权 1 +x:1 +正论 1 +x:1 +铺设 1 +x:1 +迷你裙 1 +x:1 +心中有鬼 1 +x:1 +桐柏路 1 +x:1 +国资局 1 +x:1 +双方 1 +x:1 +凭祥 1 +x:1 +尖尖角 1 +x:1 +Ⅳ 4 +x:4 +疫疠 1 +x:1 +长毛兔 1 +x:1 +致谢 1 +x:1 +象牙片 1 +x:1 +幽默 1 +x:1 +步调 1 +x:1 +青梅 1 +x:1 +肉身 1 +x:1 +祭台 1 +x:1 +亲爱 1 +x:1 +对话会 1 +x:1 +祭司 1 +x:1 +双料 1 +x:1 +解放军队 1 +x:1 +锂 13 +x:13 +含辛茹苦 1 +x:1 +收函字 1 +x:1 +正值 1 +x:1 +关键件 1 +x:1 +大冲黄 1 +x:1 +放心房 1 +x:1 +货梯 1 +x:1 +资源税 1 +x:1 +级别 1 +x:1 +手眼 1 +x:1 +难题 1 +x:1 +映 45 +x:45 +挽救 1 +x:1 +麦穗 1 +x:1 +邪魔 1 +x:1 +延长县 1 +x:1 +六百 1 +x:1 +纪念塔 1 +x:1 +造纸厂 1 +x:1 +人挪活 1 +x:1 +提水泵 1 +x:1 +找上门 1 +x:1 +曹杨新村 1 +x:1 +讨论者 1 +x:1 +金融司 1 +x:1 +雅奏 1 +x:1 +哲学史 1 +x:1 +金融史 1 +x:1 +爱委会 1 +x:1 +心细 1 +x:1 +树尖 1 +x:1 +抗菌血清 1 +x:1 +场长 1 +x:1 +抢眼 1 +x:1 +皖东 1 +x:1 +工资性 1 +x:1 +纪念堂 1 +x:1 +尺牍 1 +x:1 +情状 1 +x:1 +大浪区 1 +x:1 +惠而不费 1 +x:1 +车 1087 +x:1087 +和风 1 +x:1 +正月初五 1 +x:1 +坦 40 +x:40 +马萨诸塞 1 +x:1 +建发 1 +x:1 +技监局 1 +x:1 +肉质 1 +x:1 +正月初二 1 +x:1 +消息 1 +x:1 +消力池 1 +x:1 +双星 1 +x:1 +货样 1 +x:1 +物理学家 1 +x:1 +鄂温克 1 +x:1 +有目共赏 1 +x:1 +正巧 1 +x:1 +筋骨 1 +x:1 +救命车 1 +x:1 +浔南村 1 +x:1 +驱动桥 1 +x:1 +肤色 1 +x:1 +长青树 1 +x:1 +小张庄 1 +x:1 +瓦胡岛 1 +x:1 +变压器 1 +x:1 +此例 1 +x:1 +彝女 1 +x:1 +人情关 1 +x:1 +分配量 1 +x:1 +陈年旧规 1 +x:1 +网开一面 1 +x:1 +绽放 1 +x:1 +联组会 1 +x:1 +鞋子 1 +x:1 +临湖轩 1 +x:1 +齿鸟类 1 +x:1 +芗城 1 +x:1 +合作社部 1 +x:1 +导火索 1 +x:1 +三资企业 1 +x:1 +货栈 1 +x:1 +怀旧念故 1 +x:1 +杰伊汉 1 +x:1 +元白 1 +x:1 +康复会 1 +x:1 +创造力 1 +x:1 +自留山 1 +x:1 +此信 1 +x:1 +冰窟窿 1 +x:1 +奉告 1 +x:1 +自杀性 1 +x:1 +质管 1 +x:1 +和顺 1 +x:1 +慌手慌脚 1 +x:1 +黎母 1 +x:1 +寒气 1 +x:1 +修身 1 +x:1 +奉命 1 +x:1 +胤 1 +x:1 +人生在勤 1 +x:1 +颓败 1 +x:1 +通信卫星 1 +x:1 +义女 1 +x:1 +兴业县 1 +x:1 +饵 3 +x:3 +惰性 1 +x:1 +瞧见 1 +x:1 +檀香山 1 +x:1 +馈赠品 1 +x:1 +正月初一 1 +x:1 +凭空 1 +x:1 +丰乐镇 1 +x:1 +草果 1 +x:1 +双杠 1 +x:1 +衣扣 1 +x:1 +感兴趣者 1 +x:1 +苦主 1 +x:1 +沟河庄 1 +x:1 +黄州区 1 +x:1 +此举 1 +x:1 +寓理于情 1 +x:1 +一诺千金 1 +x:1 +责任车 1 +x:1 +悬崖峭壁 1 +x:1 +双杰 1 +x:1 +抢白 1 +x:1 +怄气 1 +x:1 +雕 29 +x:29 +威仪 1 +x:1 +撮箕 1 +x:1 +具体说来 1 +x:1 +落网 1 +x:1 +唐末五代 1 +x:1 +乍得 1 +x:1 +绿树 1 +x:1 +锰钢 1 +x:1 +严霜 1 +x:1 +纪念奖 1 +x:1 +傻劲儿 1 +x:1 +吴钩 1 +x:1 +两湖 1 +x:1 +国企办 1 +x:1 +手癣 1 +x:1 +怀着 1 +x:1 +中和乡 1 +x:1 +动势 1 +x:1 +悠悠荡荡 1 +x:1 +名闻遐迩 1 +x:1 +此书 1 +x:1 +反动性 1 +x:1 +镜泊湖 1 +x:1 +有气无力 1 +x:1 +动动 1 +x:1 +妖气 1 +x:1 +贸工部长 1 +x:1 +首屈一指 1 +x:1 +玉虚洞 1 +x:1 +苦乐 1 +x:1 +黑子 1 +x:1 +耳边 1 +x:1 +不违农时 1 +x:1 +温馨感 1 +x:1 +黑字 1 +x:1 +无家可归 1 +x:1 +引见 1 +x:1 +香港站 1 +x:1 +支座负筋 1 +x:1 +升降车 1 +x:1 +双月 1 +x:1 +义士 1 +x:1 +最高院 1 +x:1 +山水歌 1 +x:1 +节目组 1 +x:1 +引河桥 1 +x:1 +咂 4 +x:4 +风轮 1 +x:1 +损失量 1 +x:1 +评头品足 1 +x:1 +风车 1 +x:1 +层出不穷 1 +x:1 +船闸门 1 +x:1 +黑客 1 +x:1 +此人 1 +x:1 +振耳欲聋 1 +x:1 +弛 6 +x:6 +耿庄镇 1 +x:1 +抓紧 1 +x:1 +观众席 1 +x:1 +身分 1 +x:1 +此事 1 +x:1 +两路口 1 +x:1 +市容委 1 +x:1 +州区 1 +x:1 +金额 1 +x:1 +正视 1 +x:1 +正规 1 +x:1 +常年性 1 +x:1 +军需品 1 +x:1 +数珠 1 +x:1 +大冈镇 1 +x:1 +耳轮 1 +x:1 +杀身成仁 1 +x:1 +金领 1 +x:1 +钱物 1 +x:1 +为首 1 +x:1 +此井 1 +x:1 +苦于 1 +x:1 +运河 1 +x:1 +胶合板 1 +x:1 +再就业率 1 +x:1 +总工程师 1 +x:1 +尾声 1 +x:1 +滋养品 1 +x:1 +赤磷 1 +x:1 +一水之隔 1 +x:1 +夔门 1 +x:1 +禁渔期 1 +x:1 +大饱眼福 1 +x:1 +专横跋扈 1 +x:1 +稍为 1 +x:1 +秋海棠 1 +x:1 +玉米螟 1 +x:1 +民族村 1 +x:1 +苦仗 1 +x:1 +急湍湍 1 +x:1 +战胜 1 +x:1 +降雪量 1 +x:1 +卡塔尔 1 +x:1 +辽源市 1 +x:1 +钻床 1 +x:1 +阎罗 1 +x:1 +专兼职 1 +x:1 +双桥 1 +x:1 +钻具 1 +x:1 +一方面 1 +x:1 +陇东 1 +x:1 +退办单 1 +x:1 +双桨 1 +x:1 +承审员 1 +x:1 +多管齐下 1 +x:1 +灶间 1 +x:1 +风能 1 +x:1 +骗 79 +x:79 +耳背 1 +x:1 +不凡 1 +x:1 +痴情 1 +x:1 +动工 1 +x:1 +青救 1 +x:1 +拉锯状 1 +x:1 +巷池村 1 +x:1 +找油人 1 +x:1 +轰轰烈烈 1 +x:1 +信赖 1 +x:1 +挽歌 1 +x:1 +陇中 1 +x:1 +扣子 1 +x:1 +拼命三郎 1 +x:1 +出境费 1 +x:1 +巷战 1 +x:1 +草棚 1 +x:1 +误人子弟 1 +x:1 +畅销货 1 +x:1 +鉴戒 1 +x:1 +司空见惯 1 +x:1 +草棉 1 +x:1 +愚钝 1 +x:1 +更型换代 1 +x:1 +信贷 1 +x:1 +绿杨 1 +x:1 +劳动资料 1 +x:1 +祭幛 1 +x:1 +僧徒 1 +x:1 +来函 1 +x:1 +浴场 1 +x:1 +矩阵式 1 +x:1 +梦乡 1 +x:1 +闲嗑儿 1 +x:1 +说亲 1 +x:1 +心烦 1 +x:1 +俸禄 1 +x:1 +责任者 1 +x:1 +节约型 1 +x:1 +呆账 1 +x:1 +辑选 1 +x:1 +非应试 1 +x:1 +抖落 1 +x:1 +所在地 1 +x:1 +纪念园 1 +x:1 +耳聋 1 +x:1 +为难 1 +x:1 +缴送率 1 +x:1 +郎中 1 +x:1 +草根 1 +x:1 +协议价 1 +x:1 +克隆 1 +x:1 +肥囊囊 1 +x:1 +绿林 1 +x:1 +抢种 1 +x:1 +防疫站 1 +x:1 +莱里达市 1 +x:1 +耳聪 1 +x:1 +观测者 1 +x:1 +短篇卷 1 +x:1 +捐助国 1 +x:1 +毒剂 1 +x:1 +根腐病 1 +x:1 +说书 1 +x:1 +督察队 1 +x:1 +守恒 1 +x:1 +落点 1 +x:1 +包退 1 +x:1 +径流 1 +x:1 +草案 1 +x:1 +俭约 1 +x:1 +孵卵器 1 +x:1 +啪啪 1 +x:1 +莅临 1 +x:1 +把柄 1 +x:1 +刑法 1 +x:1 +心火 1 +x:1 +广告片 1 +x:1 +廉洁自律 1 +x:1 +毒刑 1 +x:1 +广告牌 1 +x:1 +裂口 1 +x:1 +寒战 1 +x:1 +迷糊 1 +x:1 +黟县 1 +x:1 +示范地 1 +x:1 +器量 1 +x:1 +器重 1 +x:1 +食性 1 +x:1 +心灰 1 +x:1 +光谱分析 1 +x:1 +示范场 1 +x:1 +明太鱼 1 +x:1 +怠慢 1 +x:1 +货架 1 +x:1 +金阳 1 +x:1 +保驾 1 +x:1 +蜂皇浆 1 +x:1 +定襄 1 +x:1 +顶风冒雪 1 +x:1 +棋校 1 +x:1 +谎 1 +x:1 +参赌者 1 +x:1 +老大夫 1 +x:1 +风致 1 +x:1 +羽毛球界 1 +x:1 +总装线 1 +x:1 +斐斐 1 +x:1 +示范园 1 +x:1 +建国村 1 +x:1 +孟买 1 +x:1 +定西 1 +x:1 +将才学 1 +x:1 +药学会 1 +x:1 +杏花雨 1 +x:1 +麦田 1 +x:1 +金陵 1 +x:1 +创痕 1 +x:1 +耳膜 1 +x:1 +创痛 1 +x:1 +两性 1 +x:1 +自治领 1 +x:1 +附本 1 +x:1 +季马市 1 +x:1 +岔路 1 +x:1 +纪念地 1 +x:1 +大呼小叫 1 +x:1 +黑啤 1 +x:1 +质言之 1 +x:1 +影片展 1 +x:1 +所在团 1 +x:1 +浴巾 1 +x:1 +羟基 1 +x:1 +习以为常 1 +x:1 +灵丘县 1 +x:1 +货柜 1 +x:1 +减排 1 +x:1 +独眼龙 1 +x:1 +皇天后土 1 +x:1 +奠立 1 +x:1 +显摆 1 +x:1 +钱粮 1 +x:1 +码 10 +x:10 +清洁器 1 +x:1 +保持者 1 +x:1 +绸面 1 +x:1 +碘片 1 +x:1 +恍然 1 +x:1 +钢管厂 1 +x:1 +石棉瓦 1 +x:1 +中国画 1 +x:1 +铜锣湾 1 +x:1 +水西沟 1 +x:1 +自益权 1 +x:1 +树荫 1 +x:1 +情节性 1 +x:1 +售票处 1 +x:1 +丧气 1 +x:1 +趋附 1 +x:1 +牌牌 1 +x:1 +监护席 1 +x:1 +心焦 1 +x:1 +蓬头垢面 1 +x:1 +空空荡荡 1 +x:1 +长明灯 1 +x:1 +瞬时速度 1 +x:1 +通晓 1 +x:1 +痴愚世延 1 +x:1 +共青团员 1 +x:1 +和面 1 +x:1 +覆盖 1 +x:1 +运抵 1 +x:1 +治政 1 +x:1 +沉井 1 +x:1 +恰穆拉镇 1 +x:1 +冉冉 1 +x:1 +苑家屯 1 +x:1 +级差 1 +x:1 +哞 2 +x:2 +奥里萨邦 1 +x:1 +毒化 1 +x:1 +金雕 1 +x:1 +藁城市 1 +x:1 +科技型 1 +x:1 +纪念型 1 +x:1 +掩体 1 +x:1 +铭志 1 +x:1 +能效 1 +x:1 +排沙简金 1 +x:1 +滩羊 1 +x:1 +幅员辽阔 1 +x:1 +沾沾自喜 1 +x:1 +米汤 1 +x:1 +春分点 1 +x:1 +圣卢西亚 1 +x:1 +游刃有余 1 +x:1 +清洌洌 1 +x:1 +半边山 1 +x:1 +哀告 1 +x:1 +青松 1 +x:1 +蓬松度 1 +x:1 +有的 1 +x:1 +脊椎骨 1 +x:1 +王家棚 1 +x:1 +造福一方 1 +x:1 +钟 281 +x:281 +家趁万贯 1 +x:1 +泰晤士报 1 +x:1 +鼎鼎大名 1 +x:1 +并网发电 1 +x:1 +等温线 1 +x:1 +鞋城 1 +x:1 +审判组 1 +x:1 +铁公鸡 1 +x:1 +抢答 1 +x:1 +雅者 1 +x:1 +担儿 1 +x:1 +豆瓣 1 +x:1 +描花扣 1 +x:1 +手笔 1 +x:1 +前不久 1 +x:1 +动心 1 +x:1 +青杏 1 +x:1 +升降舵 1 +x:1 +诗文 1 +x:1 +荆庄乡 1 +x:1 +同喜同乐 1 +x:1 +鞋垫 1 +x:1 +虎仔 1 +x:1 +国旗 1 +x:1 +反动派 1 +x:1 +洪亮 1 +x:1 +家地乡 1 +x:1 +塞舌尔 1 +x:1 +音位 1 +x:1 +创益 1 +x:1 +奏鸣曲 1 +x:1 +恩同再造 1 +x:1 +书刊 1 +x:1 +滩簧 1 +x:1 +扣头 1 +x:1 +翟坡村 1 +x:1 +惧 11 +x:11 +三清山 1 +x:1 +荒蔓 1 +x:1 +下费桥 1 +x:1 +原材料 1 +x:1 +工联会 1 +x:1 +纳 30 +x:30 +军需处 1 +x:1 +反革命 1 +x:1 +亲临感 1 +x:1 +营垒 1 +x:1 +风气者 1 +x:1 +雕塑家 1 +x:1 +牌照 1 +x:1 +哀哀 1 +x:1 +钻台 1 +x:1 +愚陋 1 +x:1 +遗留物 1 +x:1 +热风炉 1 +x:1 +刑事犯罪 1 +x:1 +摇摇晃晃 1 +x:1 +风色 1 +x:1 +橡皮筋 1 +x:1 +外向度 1 +x:1 +吟 26 +x:26 +纪念品 1 +x:1 +帕村 1 +x:1 +平平静静 1 +x:1 +场馆 1 +x:1 +上下位 1 +x:1 +有道是 1 +x:1 +纹理 1 +x:1 +心爱 1 +x:1 +传染病 1 +x:1 +户证科 1 +x:1 +醒豁 1 +x:1 +动弹 1 +x:1 +白暨豚 1 +x:1 +卢浮宫街 1 +x:1 +耕地 1 +x:1 +调馅 1 +x:1 +青枣 1 +x:1 +金门 1 +x:1 +羞与为伍 1 +x:1 +炸雷 1 +x:1 +阴丹士林 1 +x:1 +青果 1 +x:1 +坤宁宫 1 +x:1 +楠杆镇 1 +x:1 +银杏园 1 +x:1 +凸显 1 +x:1 +君子协定 1 +x:1 +货摊 1 +x:1 +批注 1 +x:1 +黑地 1 +x:1 +缓和 1 +x:1 +音专 1 +x:1 +凌辱 1 +x:1 +心率 1 +x:1 +鲜活欲滴 1 +x:1 +勒令 1 +x:1 +哀兵必胜 1 +x:1 +粘着剂 1 +x:1 +8 1097 +x:1097 +手稿 1 +x:1 +焜 1 +x:1 +半军事化 1 +x:1 +橡皮管 1 +x:1 +纷纭复杂 1 +x:1 +阎王 1 +x:1 +两手 1 +x:1 +渴求 1 +x:1 +炕洞 1 +x:1 +黑土 1 +x:1 +缩编 1 +x:1 +幻灭 1 +x:1 +显明 1 +x:1 +小旦 1 +x:1 +多发性 1 +x:1 +中顾委 1 +x:1 +函授 1 +x:1 +维护型 1 +x:1 +难闻 1 +x:1 +煞气 1 +x:1 +音乐 1 +x:1 +捉襟见肘 1 +x:1 +贮存 1 +x:1 +青春 1 +x:1 +音义 1 +x:1 +酥油 1 +x:1 +友谊林 1 +x:1 +噶尔丹 1 +x:1 +致贺 1 +x:1 +放射形 1 +x:1 +斗牛 1 +x:1 +瞻 12 +x:12 +左轮 1 +x:1 +育肥场 1 +x:1 +组织胺 1 +x:1 +长崎县 1 +x:1 +电气化率 1 +x:1 +重外孙女 1 +x:1 +妖怪 1 +x:1 +即使如此 1 +x:1 +商贸城 1 +x:1 +先进县 1 +x:1 +金钱 1 +x:1 +横征暴敛 1 +x:1 +阻击战 1 +x:1 +是味儿 1 +x:1 +下礼拜 1 +x:1 +左边 1 +x:1 +分销点 1 +x:1 +早稻 1 +x:1 +量子论 1 +x:1 +金钢 1 +x:1 +饮食部 1 +x:1 +软化 1 +x:1 +示范员 1 +x:1 +风荷 1 +x:1 +劫波 1 +x:1 +接货船 1 +x:1 +小马村 1 +x:1 +杂沓 1 +x:1 +质监 1 +x:1 +奉天 1 +x:1 +清洁员 1 +x:1 +镁光灯 1 +x:1 +祥瑞 1 +x:1 +幽邃 1 +x:1 +金针 1 +x:1 +科局级 1 +x:1 +凭眺 1 +x:1 +钻劲 1 +x:1 +尽职尽责 1 +x:1 +启程 1 +x:1 +绿萼梅 1 +x:1 +金银 1 +x:1 +农校 1 +x:1 +游泳队 1 +x:1 +法文学 1 +x:1 +肉肉 1 +x:1 +嫖 2 +x:2 +食指 1 +x:1 +采茶戏 1 +x:1 +诠 1 +x:1 +医师 1 +x:1 +真正 1 +x:1 +风范 1 +x:1 +突袭 1 +x:1 +不随意肌 1 +x:1 +定论 1 +x:1 +内外线 1 +x:1 +鹅卵 1 +x:1 +讳疾忌医 1 +x:1 +寒意 1 +x:1 +节目片 1 +x:1 +分色镜 1 +x:1 +多发期 1 +x:1 +双池 1 +x:1 +雄居 1 +x:1 +酸甜苦辣 1 +x:1 +等外路 1 +x:1 +一呼百应 1 +x:1 +停车棚 1 +x:1 +幢幢 1 +x:1 +音准 1 +x:1 +文武双全 1 +x:1 +正色 1 +x:1 +雅化 1 +x:1 +把持 1 +x:1 +奴隶社会 1 +x:1 +前人 1 +x:1 +集邮联 1 +x:1 +义县 1 +x:1 +怨 19 +x:19 +尺码 1 +x:1 +脊岭 1 +x:1 +修葺 1 +x:1 +双江 1 +x:1 +中国热 1 +x:1 +耳鼓膜 1 +x:1 +二把手 1 +x:1 +生拉硬拽 1 +x:1 +放心桥 1 +x:1 +闪光灯 1 +x:1 +旱浇田 1 +x:1 +作客思想 1 +x:1 +数码 1 +x:1 +空前绝后 1 +x:1 +梅园新村 1 +x:1 +黑褐色 1 +x:1 +局长级 1 +x:1 +姥爷 1 +x:1 +四站镇 1 +x:1 +生成点 1 +x:1 +前任 1 +x:1 +持卡者 1 +x:1 +单列 1 +x:1 +兰因絮果 1 +x:1 +草泽 1 +x:1 +寒暑 1 +x:1 +输血式 1 +x:1 +仿单 1 +x:1 +留学人员 1 +x:1 +幽静 1 +x:1 +方桥镇 1 +x:1 +耳聪目明 1 +x:1 +寒暄 1 +x:1 +集邮者 1 +x:1 +匀整 1 +x:1 +残缺不全 1 +x:1 +多付 1 +x:1 +示范县 1 +x:1 +孟公岭 1 +x:1 +人来人往 1 +x:1 +所在区 1 +x:1 +此际 1 +x:1 +原生态 1 +x:1 +肠结核 1 +x:1 +草民 1 +x:1 +邈 1 +x:1 +耕具 1 +x:1 +福全镇 1 +x:1 +叵耐 1 +x:1 +谷坊坝 1 +x:1 +以歌会友 1 +x:1 +双泾 1 +x:1 +突进 1 +x:1 +举报者 1 +x:1 +古北新村 1 +x:1 +中篇小说 1 +x:1 +官衔 1 +x:1 +顺产率 1 +x:1 +共产国际 1 +x:1 +直肠科 1 +x:1 +引水道 1 +x:1 +自由权 1 +x:1 +网队 1 +x:1 +两旁 1 +x:1 +状元村 1 +x:1 +沙田柚 1 +x:1 +写意画 1 +x:1 +怀才不遇 1 +x:1 +杜诗 1 +x:1 +不厌其烦 1 +x:1 +中学 1 +x:1 +义卖 1 +x:1 +开不开张 1 +x:1 +一日游 1 +x:1 +强劲 1 +x:1 +仿古 1 +x:1 +于今 1 +x:1 +禽肉 1 +x:1 +消极面 1 +x:1 +梦遗 1 +x:1 +原种 1 +x:1 +孺子亭路 1 +x:1 +冈陵 1 +x:1 +网际 1 +x:1 +凿 30 +x:30 +双沟 1 +x:1 +雅号 1 +x:1 +微观性 1 +x:1 +把握 1 +x:1 +示范区 1 +x:1 +三亚市 1 +x:1 +纪念卡 1 +x:1 +外胚层 1 +x:1 +整建 1 +x:1 +敬告 1 +x:1 +返潮 1 +x:1 +把戏 1 +x:1 +装束 1 +x:1 +墙 155 +x:155 +碘盐 1 +x:1 +坐位表 1 +x:1 +汊流 1 +x:1 +丛编 1 +x:1 +龙泉乡 1 +x:1 +欤 2 +x:2 +双流 1 +x:1 +本家儿 1 +x:1 +持机者 1 +x:1 +前例 1 +x:1 +邪道 1 +x:1 +牛角湾村 1 +x:1 +锰 9 +x:9 +上等兵 1 +x:1 +心疼 1 +x:1 +义务 1 +x:1 +外援 1 +x:1 +走南闯北 1 +x:1 +诗抄 1 +x:1 +臂膀 1 +x:1 +特优生 1 +x:1 +短促 1 +x:1 +正茬 1 +x:1 +头份厂 1 +x:1 +臂膊 1 +x:1 +心痛 1 +x:1 +建筑商 1 +x:1 +处理量 1 +x:1 +白金 1 +x:1 +传感器 1 +x:1 +把手 1 +x:1 +地老天荒 1 +x:1 +警戒线 1 +x:1 +轻量级 1 +x:1 +定购 1 +x:1 +人民战争 1 +x:1 +仰八叉 1 +x:1 +书册 1 +x:1 +基本电荷 1 +x:1 +定货 1 +x:1 +高黎贡山 1 +x:1 +定责 1 +x:1 +寒极 1 +x:1 +迷 44 +x:44 +端详 1 +x:1 +千手观音 1 +x:1 +守旧 1 +x:1 +采掘业 1 +x:1 +硅钢片 1 +x:1 +电子表 1 +x:1 +繁育 1 +x:1 +于是乎 1 +x:1 +堂妹 1 +x:1 +地地道道 1 +x:1 +臂腕 1 +x:1 +橄榄绿色 1 +x:1 +把把 1 +x:1 +腐殖质 1 +x:1 +湿货 1 +x:1 +迷离 1 +x:1 +美食节 1 +x:1 +黏着力 1 +x:1 +孟菲斯市 1 +x:1 +维修工 1 +x:1 +早晚市 1 +x:1 +短传 1 +x:1 +米格 1 +x:1 +哀叫 1 +x:1 +清洁剂 1 +x:1 +貌不惊人 1 +x:1 +斜 28 +x:28 +心画 1 +x:1 +同苦共乐 1 +x:1 +彝剧 1 +x:1 +作业会 1 +x:1 +十六国 1 +x:1 +哀号 1 +x:1 +鲁桥镇 1 +x:1 +哀叹 1 +x:1 +白沟镇 1 +x:1 +心电 1 +x:1 +挣扎状 1 +x:1 +打印纸 1 +x:1 +质点 1 +x:1 +收割 1 +x:1 +函数 1 +x:1 +牵线搭桥 1 +x:1 +喧声 1 +x:1 +最低 1 +x:1 +陈埠乡 1 +x:1 +肢骨 1 +x:1 +精纺城 1 +x:1 +坏主意 1 +x:1 +揣度 1 +x:1 +拜金主义 1 +x:1 +蒲扇 1 +x:1 +证法 1 +x:1 +夜战 1 +x:1 +守敌 1 +x:1 +抗宣 1 +x:1 +连鬓胡子 1 +x:1 +草浆 1 +x:1 +凭照 1 +x:1 +不战自败 1 +x:1 +讳疾 1 +x:1 +纪念厅 1 +x:1 +信袋 1 +x:1 +米桶 1 +x:1 +草海 1 +x:1 +褐铁矿 1 +x:1 +幽雅 1 +x:1 +前体 1 +x:1 +健朗 1 +x:1 +杏梅 1 +x:1 +民社党 1 +x:1 +点金成铁 1 +x:1 +争名夺利 1 +x:1 +松日队 1 +x:1 +非银行 1 +x:1 +金融家 1 +x:1 +抓 1518 +x:1518 +四十四分 1 +x:1 +反毒月 1 +x:1 +生长激素 1 +x:1 +剽窃者 1 +x:1 +贫富悬殊 1 +x:1 +喝 290 +x:290 +隐门 1 +x:1 +渠 40 +x:40 +意译 1 +x:1 +特雷维索 1 +x:1 +舌敝唇焦 1 +x:1 +连心路 1 +x:1 +先进团 1 +x:1 +括约肌 1 +x:1 +现代主义 1 +x:1 +摩托车者 1 +x:1 +拉郎配式 1 +x:1 +绿意 1 +x:1 +毒品 1 +x:1 +突起 1 +x:1 +麦片 1 +x:1 +摄影界 1 +x:1 +怵 5 +x:5 +斗眼 1 +x:1 +施 216 +x:216 +边角余料 1 +x:1 +动宾 1 +x:1 +玉石俱焚 1 +x:1 +雅克 1 +x:1 +督察部 1 +x:1 +碘缺乏病 1 +x:1 +煊 1 +x:1 +优质 1 +x:1 +电子论 1 +x:1 +公案 1 +x:1 +重申 1 +x:1 +央托 1 +x:1 +套版 1 +x:1 +长途车 1 +x:1 +钱箱 1 +x:1 +鞋厂 1 +x:1 +难以言表 1 +x:1 +飞驶 1 +x:1 +直翅目 1 +x:1 +风蚀 1 +x:1 +龙岗区 1 +x:1 +突贯 1 +x:1 +购物车 1 +x:1 +草滩 1 +x:1 +查清 1 +x:1 +汊港 1 +x:1 +雅典 1 +x:1 +王家沱 1 +x:1 +雅兴 1 +x:1 +台湾团 1 +x:1 +大笑不止 1 +x:1 +禽兽 1 +x:1 +不可知论 1 +x:1 +生成物 1 +x:1 +重蹈 1 +x:1 +承建者 1 +x:1 +城楼 1 +x:1 +为邻 1 +x:1 +核燃料 1 +x:1 +克当量 1 +x:1 +阙文者 1 +x:1 +水平井 1 +x:1 +煤管局 1 +x:1 +木构 1 +x:1 +信诊 1 +x:1 +仿冒 1 +x:1 +菇床 1 +x:1 +幽禁 1 +x:1 +吞灭 1 +x:1 +北京大学 1 +x:1 +郑店街 1 +x:1 +水泥桩 1 +x:1 +鞋匠 1 +x:1 +一手包办 1 +x:1 +幽闲 1 +x:1 +诗意 1 +x:1 +双溪 1 +x:1 +地热学 1 +x:1 +责任区制 1 +x:1 +侄孙 1 +x:1 +百科全书 1 +x:1 +损失额 1 +x:1 +下辈子 1 +x:1 +幽门 1 +x:1 +信访 1 +x:1 +金融学 1 +x:1 +蓬勃生机 1 +x:1 +裤 9 +x:9 +栖霞山 1 +x:1 +他俩 1 +x:1 +难道 1 +x:1 +汉晋 1 +x:1 +篙头 1 +x:1 +天星村 1 +x:1 +亚洲 1 +x:1 +如鬼似魅 1 +x:1 +诬为 1 +x:1 +资金流 1 +x:1 +文山路 1 +x:1 +通敌 1 +x:1 +诗情 1 +x:1 +二愣子 1 +x:1 +求购者 1 +x:1 +回顾性 1 +x:1 +耿直 1 +x:1 +贮运 1 +x:1 +引力场 1 +x:1 +健旺 1 +x:1 +衣橱 1 +x:1 +收藏业 1 +x:1 +图卡什 1 +x:1 +字书 1 +x:1 +约莫 1 +x:1 +随随便便 1 +x:1 +投机性 1 +x:1 +祭天 1 +x:1 +办理费 1 +x:1 +阿米巴 1 +x:1 +皱 8 +x:8 +头角峥嵘 1 +x:1 +尖石 1 +x:1 +诗想 1 +x:1 +惶惶然 1 +x:1 +商贸厅 1 +x:1 +三河市 1 +x:1 +迷笛 1 +x:1 +侄媳 1 +x:1 +酥梨 1 +x:1 +火辣辣 1 +x:1 +兼职团 1 +x:1 +人民团体 1 +x:1 +和尚头 1 +x:1 +运输船 1 +x:1 +共益权 1 +x:1 +优异者 1 +x:1 +诙谐 1 +x:1 +运输舰 1 +x:1 +长途跋涉 1 +x:1 +半边天 1 +x:1 +他乡 1 +x:1 +兆头 1 +x:1 +祭奠 1 +x:1 +阿克拉 1 +x:1 +拥簇 1 +x:1 +褚褐色 1 +x:1 +鹬蚌相争 1 +x:1 +长生不老 1 +x:1 +摇摆法 1 +x:1 +僵 7 +x:7 +杜衡 1 +x:1 +书画界 1 +x:1 +鸣金 1 +x:1 +覆灭 1 +x:1 +磨磨蹭蹭 1 +x:1 +比利时队 1 +x:1 +守望 1 +x:1 +岂 103 +x:103 +商贸区 1 +x:1 +板栗园 1 +x:1 +言归于好 1 +x:1 +萌芽 1 +x:1 +预约卡 1 +x:1 +警备 1 +x:1 +白桦林 1 +x:1 +随意肌 1 +x:1 +一唱三叹 1 +x:1 +窟窿眼儿 1 +x:1 +心眼 1 +x:1 +铁打江山 1 +x:1 +知人者 1 +x:1 +他人 1 +x:1 +颜料碟 1 +x:1 +清源乡 1 +x:1 +数字化 1 +x:1 +手绢 1 +x:1 +蓬乱 1 +x:1 +暨阳 1 +x:1 +方东村 1 +x:1 +洛河镇 1 +x:1 +手续 1 +x:1 +夯土 1 +x:1 +城根 1 +x:1 +黑口 1 +x:1 +鞋刷 1 +x:1 +洋人 1 +x:1 +诗思 1 +x:1 +市郊区 1 +x:1 +诗性 1 +x:1 +为重 1 +x:1 +抗坏血酸 1 +x:1 +信誉 1 +x:1 +是否 1 +x:1 +广告界 1 +x:1 +梨树 1 +x:1 +他们 1 +x:1 +纪念册 1 +x:1 +开枪 1 +x:1 +滑雪场 1 +x:1 +责任型 1 +x:1 +洋井 1 +x:1 +再宽限期 1 +x:1 +愚不可及 1 +x:1 +输者 1 +x:1 +长鼻目 1 +x:1 +右脚 1 +x:1 +联动 1 +x:1 +猫儿山 1 +x:1 +沛县 1 +x:1 +右脑 1 +x:1 +雪谷 1 +x:1 +丑婆子 1 +x:1 +橄榄球赛 1 +x:1 +中流砥柱 1 +x:1 +把式 1 +x:1 +常平镇 1 +x:1 +宽解 1 +x:1 +罹难日 1 +x:1 +学前教育 1 +x:1 +资不抵债 1 +x:1 +文池楼 1 +x:1 +主焦煤 1 +x:1 +截瘫康丸 1 +x:1 +粗纱机 1 +x:1 +不管怎样 1 +x:1 +开枰 1 +x:1 +政策史 1 +x:1 +分红 1 +x:1 +老交情 1 +x:1 +超爽型 1 +x:1 +门户之见 1 +x:1 +沉睡 1 +x:1 +双城镇 1 +x:1 +曲阜市 1 +x:1 +勤务员 1 +x:1 +肌力 1 +x:1 +省辖市 1 +x:1 +一一列举 1 +x:1 +铡 1 +x:1 +伊盟 1 +x:1 +雪豹 1 +x:1 +伯克兰 1 +x:1 +分给 1 +x:1 +排忧解难 1 +x:1 +城垣 1 +x:1 +喷薄欲出 1 +x:1 +右腕 1 +x:1 +敌进我伏 1 +x:1 +黄河路 1 +x:1 +分组 1 +x:1 +返利 1 +x:1 +班加西市 1 +x:1 +两头 1 +x:1 +完完全全 1 +x:1 +垄断资本 1 +x:1 +冗赘 1 +x:1 +完全小学 1 +x:1 +右腿 1 +x:1 +糟油 1 +x:1 +电话 1 +x:1 +掩盖 1 +x:1 +城垛 1 +x:1 +炮制 1 +x:1 +痹 8 +x:8 +不愧为 1 +x:1 +杏元屯村 1 +x:1 +非伙伴 1 +x:1 +仪节 1 +x:1 +行政公署 1 +x:1 +黑河 1 +x:1 +伊蚊 1 +x:1 +榆 2 +x:2 +忻州市 1 +x:1 +义演 1 +x:1 +青工 1 +x:1 +诗录 1 +x:1 +刨根问底 1 +x:1 +汉巴大桥 1 +x:1 +非船 1 +x:1 +普度众生 1 +x:1 +说白 1 +x:1 +羊齿植物 1 +x:1 +断面 1 +x:1 +谎言 1 +x:1 +青州 1 +x:1 +一步舞 1 +x:1 +黑沟 1 +x:1 +最甚者 1 +x:1 +采宝者 1 +x:1 +货币 1 +x:1 +粤西 1 +x:1 +平心而论 1 +x:1 +两委 1 +x:1 +激烈性 1 +x:1 +短片 1 +x:1 +监护权 1 +x:1 +锤骨 1 +x:1 +剽窃 1 +x:1 +满洲国 1 +x:1 +电烙铁 1 +x:1 +自语 1 +x:1 +晨晚练点 1 +x:1 +自诩 1 +x:1 +雕塑感 1 +x:1 +右臂 1 +x:1 +柚 2 +x:2 +食堂 1 +x:1 +休眠期 1 +x:1 +罗宾汉式 1 +x:1 +面粉票 1 +x:1 +年老多病 1 +x:1 +霸权 1 +x:1 +先进校 1 +x:1 +支气管炎 1 +x:1 +自诉 1 +x:1 +南北街村 1 +x:1 +自识 1 +x:1 +基 24 +x:24 +痴心妄想 1 +x:1 +联贫 1 +x:1 +遨游 1 +x:1 +闭馆 1 +x:1 +青山 1 +x:1 +洋火 1 +x:1 +鉴字 1 +x:1 +开诚布公 1 +x:1 +城固 1 +x:1 +如雷贯耳 1 +x:1 +小萝卜头 1 +x:1 +双关 1 +x:1 +梨园 1 +x:1 +沸反盈天 1 +x:1 +枝繁叶茂 1 +x:1 +昨夜 1 +x:1 +宽裕 1 +x:1 +志愿兵制 1 +x:1 +周期性 1 +x:1 +右耳 1 +x:1 +克利夫兰 1 +x:1 +双先 1 +x:1 +黑洞 1 +x:1 +军需所 1 +x:1 +足 209 +x:209 +报道组 1 +x:1 +边远 1 +x:1 +半导体 1 +x:1 +辨症 1 +x:1 +秉性 1 +x:1 +明斯特 1 +x:1 +掂量掂量 1 +x:1 +教练席 1 +x:1 +黑海 1 +x:1 +级数 1 +x:1 +易县 1 +x:1 +莱阳 1 +x:1 +市立 1 +x:1 +控制额 1 +x:1 +鞋油 1 +x:1 +安置率 1 +x:1 +谎说 1 +x:1 +科威特塔 1 +x:1 +汽联 1 +x:1 +蕾铃 1 +x:1 +水泥城 1 +x:1 +小马陵村 1 +x:1 +板栗树 1 +x:1 +大回转 1 +x:1 +山顶洞 1 +x:1 +引黄入晋 1 +x:1 +谎话 1 +x:1 +巷子 1 +x:1 +象声词 1 +x:1 +祥云 1 +x:1 +溢美 1 +x:1 +胸腔 1 +x:1 +说东道西 1 +x:1 +黑液 1 +x:1 +青峰 1 +x:1 +沁源县 1 +x:1 +守夜 1 +x:1 +野地 1 +x:1 +补码 1 +x:1 +组织部 1 +x:1 +拿腔拿调 1 +x:1 +绘画展 1 +x:1 +青峦 1 +x:1 +印花税 1 +x:1 +固体潮 1 +x:1 +守备 1 +x:1 +富阳 1 +x:1 +径向 1 +x:1 +右肺 1 +x:1 +宽街 1 +x:1 +正中 1 +x:1 +附表 1 +x:1 +深呼吸 1 +x:1 +镇日 1 +x:1 +重婚罪 1 +x:1 +人力车 1 +x:1 +动摇 1 +x:1 +殖民 1 +x:1 +此碑 1 +x:1 +接力赛 1 +x:1 +丧命 1 +x:1 +斑点 1 +x:1 +砖头 1 +x:1 +毛乎乎 1 +x:1 +扣押 1 +x:1 +青岭 1 +x:1 +妖媚 1 +x:1 +莱法州 1 +x:1 +青岩 1 +x:1 +大面儿上 1 +x:1 +玉皇顶 1 +x:1 +分署 1 +x:1 +望子成龙 1 +x:1 +城设通 1 +x:1 +单极 1 +x:1 +稽查队员 1 +x:1 +青山区 1 +x:1 +民族党 1 +x:1 +青岚 1 +x:1 +青岛 1 +x:1 +哨兵 1 +x:1 +整装待发 1 +x:1 +水泥块 1 +x:1 +哀求 1 +x:1 +挽具 1 +x:1 +大气压 1 +x:1 +薅 1 +x:1 +边线 1 +x:1 +附识 1 +x:1 +借债人 1 +x:1 +路服 1 +x:1 +边关 1 +x:1 +显影液 1 +x:1 +三位一体 1 +x:1 +中国人 1 +x:1 +秉持 1 +x:1 +两河镇 1 +x:1 +招标会 1 +x:1 +前点 1 +x:1 +贪生怕死 1 +x:1 +寒士 1 +x:1 +苦笑 1 +x:1 +拜访 1 +x:1 +铜版纸 1 +x:1 +首饰 1 +x:1 +房贷部 1 +x:1 +北大荒 1 +x:1 +警策 1 +x:1 +此笔 1 +x:1 +町 1 +x:1 +汤更浪队 1 +x:1 +丘陵 1 +x:1 +存贷款 1 +x:1 +有破有立 1 +x:1 +哀鸣 1 +x:1 +显影 1 +x:1 +传销 1 +x:1 +火柴盒 1 +x:1 +米埔 1 +x:1 +归纳法 1 +x:1 +显形 1 +x:1 +借出 1 +x:1 +沉甸 1 +x:1 +遗鸥 1 +x:1 +安置点 1 +x:1 +失败率 1 +x:1 +此等 1 +x:1 +满分者 1 +x:1 +服服帖帖 1 +x:1 +釉色 1 +x:1 +在商言商 1 +x:1 +拜读 1 +x:1 +消费额 1 +x:1 +附设 1 +x:1 +张截港 1 +x:1 +锦官城 1 +x:1 +贷款性 1 +x:1 +此策 1 +x:1 +尾流 1 +x:1 +冤枉钱 1 +x:1 +自策 1 +x:1 +附记 1 +x:1 +乱发 1 +x:1 +草创 1 +x:1 +胃扩张 1 +x:1 +纪实性 1 +x:1 +创世 1 +x:1 +投诉性 1 +x:1 +创业 1 +x:1 +代代不已 1 +x:1 +三评一考 1 +x:1 +大显身手 1 +x:1 +煤气费 1 +x:1 +显微 1 +x:1 +创下 1 +x:1 +匀实 1 +x:1 +朴刀 1 +x:1 +属区 1 +x:1 +质保 1 +x:1 +高空槽 1 +x:1 +理想 1 +x:1 +新西兰队 1 +x:1 +创举 1 +x:1 +显得 1 +x:1 +轿夫 1 +x:1 +毁灭论 1 +x:1 +肩周炎 1 +x:1 +名来利往 1 +x:1 +展销会 1 +x:1 +尿 21 +x:21 +养牛厂 1 +x:1 +动机 1 +x:1 +后妈 1 +x:1 +鸭绿江口 1 +x:1 +扬场机 1 +x:1 +双加 1 +x:1 +前灯 1 +x:1 +修订本 1 +x:1 +两审 1 +x:1 +首首 1 +x:1 +说理 1 +x:1 +雨衣 1 +x:1 +不出意外 1 +x:1 +华罗庚 1 +x:1 +王桥村 1 +x:1 +分米 1 +x:1 +彩 30 +x:30 +分类 1 +x:1 +紊乱 1 +x:1 +奔逐 1 +x:1 +温柔乡 1 +x:1 +救援车 1 +x:1 +废塑料 1 +x:1 +联防队 1 +x:1 +自觅 1 +x:1 +搭线 1 +x:1 +生物制品 1 +x:1 +行市 1 +x:1 +钓者 1 +x:1 +胶合剂 1 +x:1 +青年 1 +x:1 +抱薪救火 1 +x:1 +立足之地 1 +x:1 +朴厚 1 +x:1 +边路 1 +x:1 +字牌 1 +x:1 +汽船 1 +x:1 +喏 2 +x:2 +秦楼楚馆 1 +x:1 +荷花 1 +x:1 +分流口 1 +x:1 +名都 1 +x:1 +不可御遏 1 +x:1 +于焉 1 +x:1 +样装 1 +x:1 +洋片 1 +x:1 +双千 1 +x:1 +双十 1 +x:1 +回天之力 1 +x:1 +莫 197 +x:197 +后来者 1 +x:1 +尾气 1 +x:1 +蓝宝石 1 +x:1 +洋牌 1 +x:1 +话务 1 +x:1 +黑漂 1 +x:1 +证券 1 +x:1 +嘎秧舞 1 +x:1 +浴池 1 +x:1 +豪歌壮鼓 1 +x:1 +非集体 1 +x:1 +民族史 1 +x:1 +商业区 1 +x:1 +名邮 1 +x:1 +收藏版 1 +x:1 +劫后 1 +x:1 +噎 1 +x:1 +最为 1 +x:1 +肩扛手提 1 +x:1 +鹅毛 1 +x:1 +唤头 1 +x:1 +松明子 1 +x:1 +下半生 1 +x:1 +黑潮 1 +x:1 +食宿 1 +x:1 +早早 1 +x:1 +青山冲 1 +x:1 +秉承 1 +x:1 +他物 1 +x:1 +云龙湖 1 +x:1 +支委会 1 +x:1 +小说学 1 +x:1 +草叶 1 +x:1 +自行 1 +x:1 +焦躁 1 +x:1 +汽艇 1 +x:1 +名邑 1 +x:1 +鹿死谁手 1 +x:1 +回顾展 1 +x:1 +食客 1 +x:1 +高山湖 1 +x:1 +远近纵横 1 +x:1 +祭文 1 +x:1 +夯歌 1 +x:1 +创优 1 +x:1 +义气 1 +x:1 +痴子 1 +x:1 +听讲 1 +x:1 +自责 1 +x:1 +中猿乐町 1 +x:1 +慕尼黑 1 +x:1 +草包 1 +x:1 +名利观 1 +x:1 +深井式 1 +x:1 +民族化 1 +x:1 +自动化 1 +x:1 +腰酸背疼 1 +x:1 +建党 1 +x:1 +双双 1 +x:1 +劣马 1 +x:1 +星星之火 1 +x:1 +拍桌子 1 +x:1 +仲 34 +x:34 +谵 1 +x:1 +啄 5 +x:5 +创伤 1 +x:1 +无纺布 1 +x:1 +千军万马 1 +x:1 +小说家 1 +x:1 +蜜月团 1 +x:1 +弹道导弹 1 +x:1 +腰酸背痛 1 +x:1 +首领 1 +x:1 +新机场 1 +x:1 +苦竹 1 +x:1 +诈骗 1 +x:1 +附言 1 +x:1 +创作 1 +x:1 +边贸 1 +x:1 +拖 134 +x:134 +人文科学 1 +x:1 +寒天 1 +x:1 +拉都路 1 +x:1 +祭日 1 +x:1 +围脖儿 1 +x:1 +算井子 1 +x:1 +稍稍 1 +x:1 +鄜县 1 +x:1 +循序渐进 1 +x:1 +酥油灯 1 +x:1 +停车场 1 +x:1 +邮寄费 1 +x:1 +苏阿佩港 1 +x:1 +溧城 1 +x:1 +干眼症 1 +x:1 +禁渔区 1 +x:1 +意在言外 1 +x:1 +心烦意躁 1 +x:1 +栈 1 +x:1 +将军体 1 +x:1 +鞍 2 +x:2 +优先 1 +x:1 +小洋岙村 1 +x:1 +哈密顿圈 1 +x:1 +尾欠 1 +x:1 +守岁 1 +x:1 +广告人 1 +x:1 +伊犁 1 +x:1 +沸水 1 +x:1 +乌烟瘴气 1 +x:1 +双呆 1 +x:1 +贴题 1 +x:1 +放逐 1 +x:1 +扣杀 1 +x:1 +赤铜矿 1 +x:1 +减肥茶 1 +x:1 +长宁县 1 +x:1 +皇姑区 1 +x:1 +大兴安岭 1 +x:1 +秀屿镇 1 +x:1 +不可 1 +x:1 +青头 1 +x:1 +锋刃 1 +x:1 +某地 1 +x:1 +感召力 1 +x:1 +铅山县 1 +x:1 +收藏界 1 +x:1 +分站 1 +x:1 +绞肠痧 1 +x:1 +把子 1 +x:1 +自转 1 +x:1 +刚愎自用 1 +x:1 +青大 1 +x:1 +义母 1 +x:1 +砂金 1 +x:1 +劳动手段 1 +x:1 +健康 1 +x:1 +裤管 1 +x:1 +青天 1 +x:1 +雪衣 1 +x:1 +心无二用 1 +x:1 +毒源 1 +x:1 +信托业 1 +x:1 +劫匪 1 +x:1 +外秘级 1 +x:1 +祭扫 1 +x:1 +腮 6 +x:6 +荷藕 1 +x:1 +道木 1 +x:1 +减肥药 1 +x:1 +洪炉 1 +x:1 +双吐 1 +x:1 +创造性 1 +x:1 +花前月下 1 +x:1 +字画 1 +x:1 +幼 21 +x:21 +征地费 1 +x:1 +教学组 1 +x:1 +样车 1 +x:1 +洪灾 1 +x:1 +返国 1 +x:1 +鞋楦 1 +x:1 +单人独马 1 +x:1 +鹅冠草 1 +x:1 +遗风 1 +x:1 +京韵大鼓 1 +x:1 +倡议 1 +x:1 +把守 1 +x:1 +矿务局 1 +x:1 +广告主 1 +x:1 +云航 1 +x:1 +分工合作 1 +x:1 +返回 1 +x:1 +诗学 1 +x:1 +求真务实 1 +x:1 +计提 1 +x:1 +竹书纪年 1 +x:1 +自贡市 1 +x:1 +牌位 1 +x:1 +南沙 1 +x:1 +投机家 1 +x:1 +广告业 1 +x:1 +高山榕 1 +x:1 +城南 1 +x:1 +音值 1 +x:1 +布告栏 1 +x:1 +独生女 1 +x:1 +总指挥员 1 +x:1 +衣冠 1 +x:1 +自述 1 +x:1 +引力波 1 +x:1 +炮台 1 +x:1 +寒带 1 +x:1 +敌强我弱 1 +x:1 +喧闹 1 +x:1 +祭拜 1 +x:1 +直布罗陀 1 +x:1 +把门人 1 +x:1 +怨天怨地 1 +x:1 +自由式 1 +x:1 +沸泉 1 +x:1 +动感 1 +x:1 +逍遥自在 1 +x:1 +最高价 1 +x:1 +米兰 1 +x:1 +维琴察队 1 +x:1 +运往 1 +x:1 +滚动摩擦 1 +x:1 +米公 1 +x:1 +看家本领 1 +x:1 +护园人 1 +x:1 +城北 1 +x:1 +昂热市 1 +x:1 +雨季 1 +x:1 +中坚层 1 +x:1 +亮晶晶 1 +x:1 +哀歌 1 +x:1 +勤务兵 1 +x:1 +斋堂川 1 +x:1 +群体部 1 +x:1 +园丁 1 +x:1 +武士道 1 +x:1 +变电器 1 +x:1 +科威特尔 1 +x:1 +前瞻 1 +x:1 +倡言 1 +x:1 +市级 1 +x:1 +邮戳 1 +x:1 +水泥厂 1 +x:1 +健心 1 +x:1 +分销业 1 +x:1 +分管 1 +x:1 +健忘 1 +x:1 +监测网站 1 +x:1 +航空母舰 1 +x:1 +蝗灾 1 +x:1 +徒子徒孙 1 +x:1 +波尔多队 1 +x:1 +北大营 1 +x:1 +起因 1 +x:1 +工艺瓷 1 +x:1 +西南营村 1 +x:1 +攀缘茎 1 +x:1 +自由度 1 +x:1 +枫丹白露 1 +x:1 +较技 1 +x:1 +治安室 1 +x:1 +此类 1 +x:1 +圣徒 1 +x:1 +寒微 1 +x:1 +库涅茨克 1 +x:1 +联成一气 1 +x:1 +铁丝 1 +x:1 +商丘市 1 +x:1 +洋球 1 +x:1 +双唇 1 +x:1 +大石桥市 1 +x:1 +偿还 1 +x:1 +短短 1 +x:1 +锁骨 1 +x:1 +罗洪乡 1 +x:1 +药石 1 +x:1 +青堆 1 +x:1 +蹲 70 +x:70 +重创 1 +x:1 +捐助款 1 +x:1 +尚方剑 1 +x:1 +争夺战 1 +x:1 +典 9 +x:9 +秧田 1 +x:1 +接线牌 1 +x:1 +常温层 1 +x:1 +长途电话 1 +x:1 +拜谒 1 +x:1 +应用 1 +x:1 +怠工 1 +x:1 +车费 1 +x:1 +卷筒式 1 +x:1 +汽蒸 1 +x:1 +物欲化 1 +x:1 +独 98 +x:98 +某团 1 +x:1 +洋瓷 1 +x:1 +惊天地 1 +x:1 +预选赛 1 +x:1 +曲作者 1 +x:1 +坦直 1 +x:1 +毒潮 1 +x:1 +王家坝 1 +x:1 +病虫害 1 +x:1 +金融性 1 +x:1 +水利工程 1 +x:1 +溜坍 1 +x:1 +浮尘子 1 +x:1 +上涨率 1 +x:1 +建莲 1 +x:1 +后头 1 +x:1 +茬茬 1 +x:1 +挽回 1 +x:1 +王家坪 1 +x:1 +泔水桶 1 +x:1 +人口学家 1 +x:1 +酷刑 1 +x:1 +消音器 1 +x:1 +鸽 13 +x:13 +水泥化 1 +x:1 +丧偶 1 +x:1 +牙周 1 +x:1 +七零八碎 1 +x:1 +电灶 1 +x:1 +听证 1 +x:1 +幽寂 1 +x:1 +标准单位 1 +x:1 +一波三折 1 +x:1 +摇摆器 1 +x:1 +鞋样 1 +x:1 +气数 1 +x:1 +两岸 1 +x:1 +分等 1 +x:1 +黑洞洞 1 +x:1 +修改建 1 +x:1 +梢头 1 +x:1 +剥 24 +x:24 +一小二私 1 +x:1 +丙烯腈 1 +x:1 +动怒 1 +x:1 +牌上 1 +x:1 +丧假 1 +x:1 +安全史 1 +x:1 +淡红色 1 +x:1 +正乙祠 1 +x:1 +如闻其声 1 +x:1 +凌海市 1 +x:1 +双喜 1 +x:1 +动态 1 +x:1 +心事 1 +x:1 +昀 2 +x:2 +咸宁 1 +x:1 +自费 1 +x:1 +干血浆 1 +x:1 +苏干湖 1 +x:1 +无知者 1 +x:1 +名门 1 +x:1 +痴呆呆 1 +x:1 +上下班 1 +x:1 +哀悼日 1 +x:1 +清洁槽 1 +x:1 +康乃馨 1 +x:1 +米厂 1 +x:1 +弼时镇 1 +x:1 +车身 1 +x:1 +涝 12 +x:12 +自贡 1 +x:1 +附近 1 +x:1 +人满为患 1 +x:1 +自负 1 +x:1 +把头 1 +x:1 +聚众斗殴 1 +x:1 +冷轧厂 1 +x:1 +肯 121 +x:121 +材料 1 +x:1 +太空人 1 +x:1 +择捉 1 +x:1 +伪装 1 +x:1 +无意间 1 +x:1 +芗剧 1 +x:1 +木结构 1 +x:1 +旁若无人 1 +x:1 +杨楼庄 1 +x:1 +两强 1 +x:1 +丛集 1 +x:1 +两弹 1 +x:1 +径取 1 +x:1 +队规 1 +x:1 +显学 1 +x:1 +心仪 1 +x:1 +草图 1 +x:1 +医疗站 1 +x:1 +麻将桌 1 +x:1 +城内 1 +x:1 +上座率 1 +x:1 +左民党 1 +x:1 +纪念树 1 +x:1 +秧歌队 1 +x:1 +料理台 1 +x:1 +草团 1 +x:1 +茅山 1 +x:1 +落价 1 +x:1 +寒山 1 +x:1 +明黄 1 +x:1 +将军碑村 1 +x:1 +白磷 1 +x:1 +长沙市 1 +x:1 +旗开得胜 1 +x:1 +钙 25 +x:25 +思忖 1 +x:1 +夕 16 +x:16 +双困 1 +x:1 +城关 1 +x:1 +瞑目 1 +x:1 +结账会 1 +x:1 +加那利 1 +x:1 +双排座 1 +x:1 +心中 1 +x:1 +少壮派 1 +x:1 +膛线 1 +x:1 +天理教 1 +x:1 +投靠 1 +x:1 +汁液 1 +x:1 +恶魔 1 +x:1 +毒汁 1 +x:1 +党团员 1 +x:1 +诉冤 1 +x:1 +来源国 1 +x:1 +年产奶 1 +x:1 +车板 1 +x:1 +海红树 1 +x:1 +工资袋 1 +x:1 +冗词 1 +x:1 +新机制 1 +x:1 +棵子 1 +x:1 +赫赫功绩 1 +x:1 +慷慨 1 +x:1 +中台办 1 +x:1 +放映队 1 +x:1 +临西县 1 +x:1 +坐枋 1 +x:1 +叶公好龙 1 +x:1 +贵馆 1 +x:1 +尖东 1 +x:1 +梳妆 1 +x:1 +毒气 1 +x:1 +凭吊者 1 +x:1 +风雨衣 1 +x:1 +健将 1 +x:1 +遗骨 1 +x:1 +火居道士 1 +x:1 +冷暖自知 1 +x:1 +自致性 1 +x:1 +潋滟 1 +x:1 +转业军人 1 +x:1 +采矿权 1 +x:1 +遗骸 1 +x:1 +医疗箱 1 +x:1 +尾根 1 +x:1 +草垛 1 +x:1 +诗壁 1 +x:1 +哈拉雷 1 +x:1 +誉 19 +x:19 +科威特市 1 +x:1 +怀仁堂 1 +x:1 +来源地 1 +x:1 +覆盖面 1 +x:1 +舞剧院 1 +x:1 +蘖 2 +x:2 +于田 1 +x:1 +华欣 1 +x:1 +想头 1 +x:1 +痴心 1 +x:1 +示范棚 1 +x:1 +益气养阴 1 +x:1 +金币 1 +x:1 +落体 1 +x:1 +奉新 1 +x:1 +分离 1 +x:1 +政复 1 +x:1 +草垫 1 +x:1 +不规则 1 +x:1 +耿介 1 +x:1 +车辆 1 +x:1 +书费 1 +x:1 +显威 1 +x:1 +边角 1 +x:1 +中国银行 1 +x:1 +思念 1 +x:1 +分秒 1 +x:1 +诗境 1 +x:1 +河间市 1 +x:1 +喧扰 1 +x:1 +车迹 1 +x:1 +永恒性 1 +x:1 +摩苏尔 1 +x:1 +输送车 1 +x:1 +尾桨 1 +x:1 +正体 1 +x:1 +自豪 1 +x:1 +旅行包 1 +x:1 +绍丝印 1 +x:1 +工间操 1 +x:1 +恶骂 1 +x:1 +南关镇 1 +x:1 +四眼井 1 +x:1 +友谊宫 1 +x:1 +瞻前顾后 1 +x:1 +脊柱 1 +x:1 +新春伊始 1 +x:1 +棵 238 +x:238 +各项 1 +x:1 +落伍 1 +x:1 +签到室 1 +x:1 +得胜河 1 +x:1 +潇洒 1 +x:1 +撂 17 +x:17 +祖公 1 +x:1 +良种 1 +x:1 +斗争 1 +x:1 +挂彩 1 +x:1 +鬓 2 +x:2 +衣勾 1 +x:1 +贫嘴薄舌 1 +x:1 +基础理论 1 +x:1 +思考者 1 +x:1 +双基 1 +x:1 +青嫩 1 +x:1 +售票机 1 +x:1 +草场 1 +x:1 +双城 1 +x:1 +草地 1 +x:1 +宜兴 1 +x:1 +米制 1 +x:1 +分社 1 +x:1 +禁放者 1 +x:1 +树脂 1 +x:1 +联系面 1 +x:1 +净月潭 1 +x:1 +平息 1 +x:1 +草圣 1 +x:1 +准钓证 1 +x:1 +煤气表 1 +x:1 +车轴 1 +x:1 +伍伦贡 1 +x:1 +两度 1 +x:1 +耐读 1 +x:1 +车载 1 +x:1 +分神 1 +x:1 +重庆路 1 +x:1 +评委会 1 +x:1 +收容所 1 +x:1 +货运量 1 +x:1 +种养业 1 +x:1 +多面角 1 +x:1 +有益 1 +x:1 +车轮 1 +x:1 +示范校 1 +x:1 +九里山乡 1 +x:1 +色鬼 1 +x:1 +零敲碎打 1 +x:1 +联调 1 +x:1 +述 26 +x:26 +苦练 1 +x:1 +优惠待遇 1 +x:1 +开曼 1 +x:1 +发聋振聩 1 +x:1 +败走麦城 1 +x:1 +实施型 1 +x:1 +附中队 1 +x:1 +教学片 1 +x:1 +两全 1 +x:1 +因小见大 1 +x:1 +实证化 1 +x:1 +急起直追 1 +x:1 +绿地 1 +x:1 +青啤 1 +x:1 +敬慕 1 +x:1 +谎花 1 +x:1 +琅 7 +x:7 +姜芋 1 +x:1 +普通店村 1 +x:1 +主导权 1 +x:1 +听话 1 +x:1 +队组 1 +x:1 +多发区 1 +x:1 +莲花 1 +x:1 +西跨湖村 1 +x:1 +成药 1 +x:1 +双塔 1 +x:1 +自救费 1 +x:1 +音素 1 +x:1 +搭理 1 +x:1 +蹄 10 +x:10 +掉队 1 +x:1 +地面水 1 +x:1 +敬意 1 +x:1 +前端 1 +x:1 +此行 1 +x:1 +担保人 1 +x:1 +卒 11 +x:11 +城徽 1 +x:1 +干瘪瘪 1 +x:1 +外族 1 +x:1 +情欲 1 +x:1 +胖头鱼 1 +x:1 +关键点 1 +x:1 +举国体制 1 +x:1 +帮孤助残 1 +x:1 +大红人 1 +x:1 +自荐 1 +x:1 +复利率 1 +x:1 +联语 1 +x:1 +横路山 1 +x:1 +鉴别 1 +x:1 +哈洽会 1 +x:1 +背风处 1 +x:1 +前站 1 +x:1 +班克斯塘 1 +x:1 +附加费 1 +x:1 +大字报 1 +x:1 +义望 1 +x:1 +守候 1 +x:1 +优秀生 1 +x:1 +博斯腾湖 1 +x:1 +奔驶 1 +x:1 +救国团 1 +x:1 +可比价格 1 +x:1 +短程 1 +x:1 +黑钨矿 1 +x:1 +奔马 1 +x:1 +担保书 1 +x:1 +示范村 1 +x:1 +胃扩大症 1 +x:1 +仅此而已 1 +x:1 +驱动器 1 +x:1 +草堂 1 +x:1 +诗坛 1 +x:1 +一刀两断 1 +x:1 +株洲 1 +x:1 +处身 1 +x:1 +毒打 1 +x:1 +草堰 1 +x:1 +广采博纳 1 +x:1 +常理 1 +x:1 +前程 1 +x:1 +蒲圻 1 +x:1 +追回记 1 +x:1 +碳酸气 1 +x:1 +百花丛 1 +x:1 +短稿 1 +x:1 +大撒把 1 +x:1 +毒手 1 +x:1 +匀净 1 +x:1 +澳人治澳 1 +x:1 +小枣 1 +x:1 +草字头儿 1 +x:1 +夹丝玻璃 1 +x:1 +坦白 1 +x:1 +衡估 1 +x:1 +簇射波 1 +x:1 +女儿红 1 +x:1 +泛神论 1 +x:1 +釉里 1 +x:1 +勒索 1 +x:1 +忆苦思甜 1 +x:1 +马贼 1 +x:1 +查案 1 +x:1 +南通社 1 +x:1 +商丘县 1 +x:1 +以工代赈 1 +x:1 +诗圣 1 +x:1 +淮海中路 1 +x:1 +高山族 1 +x:1 +装饰帽 1 +x:1 +幽婉 1 +x:1 +先进性 1 +x:1 +树蛙 1 +x:1 +宁津镇 1 +x:1 +九连环 1 +x:1 +金融流 1 +x:1 +袁 356 +x:356 +守军 1 +x:1 +伤寒论 1 +x:1 +凛凛 1 +x:1 +铭心刻骨 1 +x:1 +造访 1 +x:1 +纪念杯 1 +x:1 +阶梯式 1 +x:1 +各队 1 +x:1 +纲领 1 +x:1 +翌日 1 +x:1 +仲裁案 1 +x:1 +谆谆教导 1 +x:1 +热轧厂 1 +x:1 +专业课 1 +x:1 +脸膛 1 +x:1 +斤斤计较 1 +x:1 +妙方 1 +x:1 +沉吟不决 1 +x:1 +诬称 1 +x:1 +狡赖 1 +x:1 +紧箍咒 1 +x:1 +闻名于世 1 +x:1 +小处着手 1 +x:1 +受难者 1 +x:1 +短篇 1 +x:1 +元配 1 +x:1 +莲菜 1 +x:1 +年初二 1 +x:1 +海红果 1 +x:1 +草委 1 +x:1 +卧铺 1 +x:1 +票管员 1 +x:1 +非诉 1 +x:1 +蒸汽机 1 +x:1 +车臣 1 +x:1 +生物课 1 +x:1 +传经授道 1 +x:1 +口语体 1 +x:1 +罗家组 1 +x:1 +邹庄村 1 +x:1 +特里尔 1 +x:1 +蟋蟀 1 +x:1 +右衽 1 +x:1 +翦 10 +x:10 +金融法 1 +x:1 +巴拉圭队 1 +x:1 +贵阳 1 +x:1 +过不去 1 +x:1 +晚会风 1 +x:1 +城府 1 +x:1 +雕版 1 +x:1 +蒲团 1 +x:1 +难言之隐 1 +x:1 +尊老爱幼 1 +x:1 +常用 1 +x:1 +镇国寺 1 +x:1 +黑方 1 +x:1 +兴中会 1 +x:1 +货场 1 +x:1 +发报量 1 +x:1 +脊椎 1 +x:1 +纪念柱 1 +x:1 +附聚 1 +x:1 +人口论 1 +x:1 +医家 1 +x:1 +黑斑 1 +x:1 +米尺 1 +x:1 +天桥区 1 +x:1 +亚麻油 1 +x:1 +食具 1 +x:1 +教学班 1 +x:1 +误认 1 +x:1 +铜版画 1 +x:1 +草头 1 +x:1 +双姓 1 +x:1 +唤取 1 +x:1 +南禅寺 1 +x:1 +遗闻 1 +x:1 +代外长 1 +x:1 +误诊 1 +x:1 +返家 1 +x:1 +误识 1 +x:1 +左嗓子 1 +x:1 +寒区 1 +x:1 +心理线 1 +x:1 +洋碱 1 +x:1 +龙泉窑 1 +x:1 +晤对 1 +x:1 +话家常 1 +x:1 +自若 1 +x:1 +运动 1 +x:1 +民办小学 1 +x:1 +后备军 1 +x:1 +半月形 1 +x:1 +人口证 1 +x:1 +英雄传 1 +x:1 +惘然若失 1 +x:1 +运力 1 +x:1 +城市 1 +x:1 +动气 1 +x:1 +宽者 1 +x:1 +愤而辞职 1 +x:1 +纪念林 1 +x:1 +前功尽弃 1 +x:1 +舅爷 1 +x:1 +劳不矜功 1 +x:1 +附耳 1 +x:1 +功率因数 1 +x:1 +雅曲 1 +x:1 +理论课 1 +x:1 +尺中 1 +x:1 +超 218 +x:218 +马革裹尸 1 +x:1 +反科学 1 +x:1 +清洁日 1 +x:1 +数九 1 +x:1 +惴惴不安 1 +x:1 +示范旗 1 +x:1 +图格里克 1 +x:1 +彝族 1 +x:1 +音缀 1 +x:1 +麦粒肿 1 +x:1 +罢论 1 +x:1 +洛阳镇 1 +x:1 +守势 1 +x:1 +丘鹬 1 +x:1 +纺丝 1 +x:1 +锁门 1 +x:1 +分化腺癌 1 +x:1 +篮协 1 +x:1 +锁闭 1 +x:1 +场办 1 +x:1 +递减率 1 +x:1 +毒情 1 +x:1 +基础科学 1 +x:1 +空谈者 1 +x:1 +脊檩 1 +x:1 +旗鼓相当 1 +x:1 +仿真度 1 +x:1 +黑晶 1 +x:1 +尾数 1 +x:1 +投机商 1 +x:1 +非机动 1 +x:1 +义旗 1 +x:1 +娘娘 1 +x:1 +两区 1 +x:1 +心脑病 1 +x:1 +梭落坪村 1 +x:1 +罢课 1 +x:1 +梅雷茨党 1 +x:1 +竭诚 1 +x:1 +丧志 1 +x:1 +字符 1 +x:1 +毛阳镇 1 +x:1 +僧 2 +x:2 +小姑子 1 +x:1 +韩 832 +x:832 +樽 1 +x:1 +宓 34 +x:34 +讼 1 +x:1 +书皮 1 +x:1 +发号机 1 +x:1 +货品 1 +x:1 +圭亚那 1 +x:1 +外围赛 1 +x:1 +示范方 1 +x:1 +言无不尽 1 +x:1 +三峡游 1 +x:1 +遗集 1 +x:1 +守则 1 +x:1 +杨振宁 1 +x:1 +遥遥 1 +x:1 +车船 1 +x:1 +弄相村 1 +x:1 +磨破嘴 1 +x:1 +尾断 1 +x:1 +分理 1 +x:1 +闻名中外 1 +x:1 +演出 1 +x:1 +迷人 1 +x:1 +证实 1 +x:1 +黑暗 1 +x:1 +中间轴 1 +x:1 +大轰大嗡 1 +x:1 +寒假 1 +x:1 +沈泉庄 1 +x:1 +之下 1 +x:1 +数以 1 +x:1 +纸 145 +x:145 +青城 1 +x:1 +放心店 1 +x:1 +义教 1 +x:1 +太阳灯 1 +x:1 +西葫芦 1 +x:1 +杉 4 +x:4 +世界 1 +x:1 +默默无闻 1 +x:1 +哈巴狗 1 +x:1 +组委会 1 +x:1 +肥美 1 +x:1 +非行 1 +x:1 +百里洲 1 +x:1 +洛克比 1 +x:1 +山水园 1 +x:1 +吃亏上当 1 +x:1 +葫芦藓 1 +x:1 +弹簧锁 1 +x:1 +王家堡 1 +x:1 +投诉案 1 +x:1 +超稳定 1 +x:1 +盲肠炎 1 +x:1 +思乡 1 +x:1 +大佛殿 1 +x:1 +欺下瞒上 1 +x:1 +教学点 1 +x:1 +二胡曲 1 +x:1 +朴实 1 +x:1 +浓缩稿 1 +x:1 +挖泥船 1 +x:1 +输电线 1 +x:1 +月琴 1 +x:1 +黑木 1 +x:1 +娘子 1 +x:1 +被服 1 +x:1 +一边 1 +x:1 +数位 1 +x:1 +色韵 1 +x:1 +涤棉 1 +x:1 +寒凝 1 +x:1 +圣庙 1 +x:1 +小姑娘 1 +x:1 +特困乡 1 +x:1 +云湾村 1 +x:1 +双子 1 +x:1 +苏联队 1 +x:1 +过眼烟云 1 +x:1 +书场 1 +x:1 +恩仇 1 +x:1 +锁链 1 +x:1 +恩人 1 +x:1 +弹簧钢 1 +x:1 +迷你 1 +x:1 +首选 1 +x:1 +黑板 1 +x:1 +黑松 1 +x:1 +左下方 1 +x:1 +学习类 1 +x:1 +衣帽 1 +x:1 +两制 1 +x:1 +上下级 1 +x:1 +六不六净 1 +x:1 +草寇 1 +x:1 +甜甜的 1 +x:1 +皇姑屯 1 +x:1 +钻戒 1 +x:1 +锁钥 1 +x:1 +地方话 1 +x:1 +迷住 1 +x:1 +此片 1 +x:1 +数传 1 +x:1 +前科 1 +x:1 +蟾蜍 1 +x:1 +名额 1 +x:1 +禽鸟 1 +x:1 +驻防 1 +x:1 +圆心 1 +x:1 +健全 1 +x:1 +纪念日 1 +x:1 +干涉现象 1 +x:1 +举起 1 +x:1 +等压线 1 +x:1 +自育 1 +x:1 +验电器 1 +x:1 +黑枣 1 +x:1 +炒 115 +x:115 +核电厂 1 +x:1 +米市 1 +x:1 +黑枪 1 +x:1 +膜 30 +x:30 +铅版 1 +x:1 +雨脚 1 +x:1 +焦虑 1 +x:1 +青狮潭 1 +x:1 +边缘 1 +x:1 +喉音 1 +x:1 +千岁爷 1 +x:1 +恩义 1 +x:1 +调入量 1 +x:1 +遗韵 1 +x:1 +原生地 1 +x:1 +路南区 1 +x:1 +习题 1 +x:1 +收容港 1 +x:1 +迷信 1 +x:1 +汉赋 1 +x:1 +肠穿孔 1 +x:1 +自立 1 +x:1 +炊事班长 1 +x:1 +草字 1 +x:1 +黎 269 +x:269 +民族学 1 +x:1 +健儿 1 +x:1 +空格符 1 +x:1 +盐化工业 1 +x:1 +分界 1 +x:1 +深明大义 1 +x:1 +团工委 1 +x:1 +响应者 1 +x:1 +新闻公报 1 +x:1 +反复无常 1 +x:1 +滑稽相 1 +x:1 +普安乡 1 +x:1 +数字机 1 +x:1 +守卫 1 +x:1 +塔兰托市 1 +x:1 +南甸镇 1 +x:1 +小袋装 1 +x:1 +朴学 1 +x:1 +小说史 1 +x:1 +娘家 1 +x:1 +庄严 1 +x:1 +效验 1 +x:1 +雪耻 1 +x:1 +医疗点 1 +x:1 +二把刀 1 +x:1 +诗友 1 +x:1 +春饼 1 +x:1 +瓜霸 1 +x:1 +前线 1 +x:1 +食品 1 +x:1 +诗句 1 +x:1 +双层 1 +x:1 +芸芸 1 +x:1 +绿化 1 +x:1 +洋荤 1 +x:1 +黑白片 1 +x:1 +此生 1 +x:1 +鲸吞 1 +x:1 +诗史 1 +x:1 +大智大趣 1 +x:1 +短线 1 +x:1 +三有三超 1 +x:1 +王家庄 1 +x:1 +走马上任 1 +x:1 +人保 1 +x:1 +车箱厂 1 +x:1 +外敷 1 +x:1 +光卤石 1 +x:1 +逍遥自得 1 +x:1 +哀戚 1 +x:1 +绿卡 1 +x:1 +陇穷 1 +x:1 +雾渡河 1 +x:1 +雨蛙 1 +x:1 +隧道 1 +x:1 +随心所欲 1 +x:1 +驱动力 1 +x:1 +双尊 1 +x:1 +作业组 1 +x:1 +世界大战 1 +x:1 +团小组 1 +x:1 +拈轻怕重 1 +x:1 +丧失 1 +x:1 +辽西 1 +x:1 +字字珠玑 1 +x:1 +匙尾子 1 +x:1 +神韵 1 +x:1 +寒噤 1 +x:1 +蒲包 1 +x:1 +西坑村 1 +x:1 +痴呆 1 +x:1 +得胜村 1 +x:1 +葛洪岩 1 +x:1 +用人之长 1 +x:1 +说穿 1 +x:1 +棵儿 1 +x:1 +东风村 1 +x:1 +梨子 1 +x:1 +南庄镇 1 +x:1 +撰 5 +x:5 +抑强扶弱 1 +x:1 +卯眼 1 +x:1 +荷负 1 +x:1 +灯火辉煌 1 +x:1 +越谷市 1 +x:1 +担架 1 +x:1 +运城 1 +x:1 +诊断室 1 +x:1 +邻里 1 +x:1 +流 249 +x:249 +货币资本 1 +x:1 +显出 1 +x:1 +迂 29 +x:29 +奢靡 1 +x:1 +草屑 1 +x:1 +绿叶 1 +x:1 +双岭 1 +x:1 +高压锅 1 +x:1 +诗化 1 +x:1 +水银灯 1 +x:1 +青冢 1 +x:1 +分片 1 +x:1 +分电器 1 +x:1 +公报私仇 1 +x:1 +五月份 1 +x:1 +关键球 1 +x:1 +推注法 1 +x:1 +沉箱 1 +x:1 +后河乡 1 +x:1 +大脖子病 1 +x:1 +苦痛 1 +x:1 +米奶 1 +x:1 +利差 1 +x:1 +双台子 1 +x:1 +公路站 1 +x:1 +整天价 1 +x:1 +右路 1 +x:1 +狂人 1 +x:1 +放风 1 +x:1 +闻喜县 1 +x:1 +函告 1 +x:1 +被骗者 1 +x:1 +法学所 1 +x:1 +影业 1 +x:1 +钓迷 1 +x:1 +大滚刀 1 +x:1 +日臻完善 1 +x:1 +斋期 1 +x:1 +花里胡哨 1 +x:1 +色釉 1 +x:1 +达产 1 +x:1 +医学家 1 +x:1 +罗赖马州 1 +x:1 +双找工 1 +x:1 +致富路 1 +x:1 +可观者 1 +x:1 +讨价还价 1 +x:1 +挽幛 1 +x:1 +密植 1 +x:1 +深谙 1 +x:1 +宿豫县 1 +x:1 +常熟 1 +x:1 +班车站 1 +x:1 +动检 1 +x:1 +千年虫 1 +x:1 +诗朗诵 1 +x:1 +国歌声 1 +x:1 +流量计 1 +x:1 +美人痣 1 +x:1 +镐 9 +x:9 +大惊失色 1 +x:1 +挽带 1 +x:1 +献血者 1 +x:1 +毒枭 1 +x:1 +总得 1 +x:1 +有色金属 1 +x:1 +南安市 1 +x:1 +塘沽区 1 +x:1 +闭闭 1 +x:1 +劣等生 1 +x:1 +沉稳 1 +x:1 +自虐 1 +x:1 +咨询员 1 +x:1 +市直 1 +x:1 +洪福 1 +x:1 +回报率 1 +x:1 +某师 1 +x:1 +义战 1 +x:1 +闭锁 1 +x:1 +色酒 1 +x:1 +梳棉机 1 +x:1 +纵横谈 1 +x:1 +生气勃勃 1 +x:1 +向 8369 +x:8369 +鸡鸣狗盗 1 +x:1 +琅琅上口 1 +x:1 +沿南乡 1 +x:1 +荒蛮 1 +x:1 +诗剧 1 +x:1 +把势 1 +x:1 +前缀 1 +x:1 +三清殿 1 +x:1 +仙山琼阁 1 +x:1 +建议价 1 +x:1 +梁平柚 1 +x:1 +边荒 1 +x:1 +赃官 1 +x:1 +前缘 1 +x:1 +短缺 1 +x:1 +导师制 1 +x:1 +健在 1 +x:1 +非站牌 1 +x:1 +民主人士 1 +x:1 +前置 1 +x:1 +顽抗 1 +x:1 +宣传员 1 +x:1 +说笑 1 +x:1 +众鸟蔽日 1 +x:1 +短网 1 +x:1 +邻邦 1 +x:1 +距离感 1 +x:1 +货单 1 +x:1 +藏污纳垢 1 +x:1 +洋粉 1 +x:1 +附营 1 +x:1 +体彩 1 +x:1 +体力型 1 +x:1 +比比看 1 +x:1 +满腹经纶 1 +x:1 +示范户 1 +x:1 +直传球 1 +x:1 +药到病除 1 +x:1 +猫鼠同眠 1 +x:1 +死伤者 1 +x:1 +市百 1 +x:1 +打针 1 +x:1 +黑户 1 +x:1 +旅行袋 1 +x:1 +开怀 1 +x:1 +短粗 1 +x:1 +芝罘区 1 +x:1 +重压 1 +x:1 +败兴 1 +x:1 +优秀率 1 +x:1 +决非 1 +x:1 +踱 3 +x:3 +青南 1 +x:1 +征地款 1 +x:1 +绘画史 1 +x:1 +是日 1 +x:1 +俯仰由人 1 +x:1 +怀中 1 +x:1 +水泥墙 1 +x:1 +噪音 1 +x:1 +政务 1 +x:1 +是时 1 +x:1 +喽 4 +x:4 +音符 1 +x:1 +白雪皑皑 1 +x:1 +西方人 1 +x:1 +双带 1 +x:1 +纪念性 1 +x:1 +政办 1 +x:1 +急急忙忙 1 +x:1 +外来人 1 +x:1 +哀怒 1 +x:1 +汽车 1 +x:1 +用人观 1 +x:1 +峡谷 1 +x:1 +诙 1 +x:1 +汽轮 1 +x:1 +初涉者 1 +x:1 +两地 1 +x:1 +绘画厅 1 +x:1 +俑坑 1 +x:1 +轻手轻脚 1 +x:1 +米寿 1 +x:1 +绿党 1 +x:1 +晃荡酒 1 +x:1 +哀怨 1 +x:1 +近郊区 1 +x:1 +把关 1 +x:1 +塬谷 1 +x:1 +烧结厂 1 +x:1 +化肥厂 1 +x:1 +莲蓬 1 +x:1 +下元皂村 1 +x:1 +黑手 1 +x:1 +釉面 1 +x:1 +哭闹 1 +x:1 +草帘 1 +x:1 +青史 1 +x:1 +抢修 1 +x:1 +货值 1 +x:1 +爱国者 1 +x:1 +雪花 1 +x:1 +田头乡 1 +x:1 +流量表 1 +x:1 +贵重 1 +x:1 +两基 1 +x:1 +篱笆 1 +x:1 +动武 1 +x:1 +上证所 1 +x:1 +武昌鱼 1 +x:1 +右边 1 +x:1 +音像业 1 +x:1 +草帽 1 +x:1 +匾额 1 +x:1 +雷鸣谷 1 +x:1 +音箱 1 +x:1 +十六日 1 +x:1 +幼蝎 1 +x:1 +市电 1 +x:1 +诗兴 1 +x:1 +草席 1 +x:1 +沉积 1 +x:1 +梓行 1 +x:1 +如痴如狂 1 +x:1 +曲径通幽 1 +x:1 +体形 1 +x:1 +双座 1 +x:1 +难以名状 1 +x:1 +科威特城 1 +x:1 +讲课声 1 +x:1 +荷载 1 +x:1 +排犹主义 1 +x:1 +城头 1 +x:1 +观音土 1 +x:1 +摩通社 1 +x:1 +棉铃虫 1 +x:1 +汽运 1 +x:1 +借口 1 +x:1 +梅农盖 1 +x:1 +腊月二十 1 +x:1 +扳 33 +x:33 +原料类 1 +x:1 +诗儿 1 +x:1 +伪者 1 +x:1 +一连 1 +x:1 +哀悼 1 +x:1 +执法车 1 +x:1 +差转台 1 +x:1 +强卖强买 1 +x:1 +训练伤 1 +x:1 +手中 1 +x:1 +运命 1 +x:1 +音程 1 +x:1 +毒日 1 +x:1 +平地而起 1 +x:1 +诈降 1 +x:1 +倚官仗势 1 +x:1 +捐资者 1 +x:1 +得心应手 1 +x:1 +雕琢 1 +x:1 +年假 1 +x:1 +手下 1 +x:1 +手上 1 +x:1 +雅性 1 +x:1 +幽默者 1 +x:1 +膝关节 1 +x:1 +友谊史 1 +x:1 +纵然 1 +x:1 +死苗率 1 +x:1 +大佛湾 1 +x:1 +雪茄 1 +x:1 +氯化物 1 +x:1 +城壕 1 +x:1 +莲藕 1 +x:1 +哀愁 1 +x:1 +启事 1 +x:1 +手书 1 +x:1 +无以替代 1 +x:1 +借阅率 1 +x:1 +守城 1 +x:1 +密封面 1 +x:1 +创造欲 1 +x:1 +怜爱 1 +x:1 +诸多不便 1 +x:1 +大事录 1 +x:1 +釉陶 1 +x:1 +城墙 1 +x:1 +鸡冠石 1 +x:1 +超文本 1 +x:1 +广元市 1 +x:1 +高速 1 +x:1 +糟损 1 +x:1 +震天动地 1 +x:1 +沂 6 +x:6 +耒阳 1 +x:1 +范公堤 1 +x:1 +锈钉 1 +x:1 +年产值 1 +x:1 +玻璃纸 1 +x:1 +野枸杞头 1 +x:1 +坐探 1 +x:1 +两国 1 +x:1 +轮滑鞋 1 +x:1 +猥亵 1 +x:1 +望 295 +x:295 +返工 1 +x:1 +总体组 1 +x:1 +接处警 1 +x:1 +显功 1 +x:1 +狡诈 1 +x:1 +缨帽 1 +x:1 +救援船 1 +x:1 +右身 1 +x:1 +墨西哥 1 +x:1 +装饰布 1 +x:1 +滑雪板 1 +x:1 +民族式 1 +x:1 +断顿 1 +x:1 +夏津 1 +x:1 +浙江省 1 +x:1 +狡计 1 +x:1 +被提名人 1 +x:1 +铁腕人物 1 +x:1 +抠 14 +x:14 +苦相 1 +x:1 +城堡 1 +x:1 +控制阀 1 +x:1 +籍 37 +x:37 +救援艇 1 +x:1 +荤腥 1 +x:1 +启东 1 +x:1 +江淮戏 1 +x:1 +悬浊液 1 +x:1 +绒山羊 1 +x:1 +雪菜 1 +x:1 +首钢 1 +x:1 +示范性 1 +x:1 +戳儿 1 +x:1 +烙画家 1 +x:1 +各部 1 +x:1 +纸捻 1 +x:1 +意想不到 1 +x:1 +科威特国 1 +x:1 +二氧化氯 1 +x:1 +元音 1 +x:1 +不得人心 1 +x:1 +饮茶 1 +x:1 +字纸 1 +x:1 +舅母 1 +x:1 +达县 1 +x:1 +心境 1 +x:1 +糟糕 1 +x:1 +待业 1 +x:1 +逆耳忠言 1 +x:1 +挎包 1 +x:1 +敬祖 1 +x:1 +埃拉特湾 1 +x:1 +渡头 1 +x:1 +嬉皮笑脸 1 +x:1 +轻工部 1 +x:1 +敬祝 1 +x:1 +售票点 1 +x:1 +英雄团 1 +x:1 +假象牙 1 +x:1 +抢先 1 +x:1 +抢光 1 +x:1 +沉积层 1 +x:1 +担笼 1 +x:1 +似的 1 +x:1 +严办 1 +x:1 +塞弗勒 1 +x:1 +名菜 1 +x:1 +糟糠 1 +x:1 +货价 1 +x:1 +艺术馆 1 +x:1 +黑米 1 +x:1 +附 1689 +x:1689 +仆仆风尘 1 +x:1 +哭诉 1 +x:1 +百花园 1 +x:1 +新中行 1 +x:1 +此楼 1 +x:1 +音效 1 +x:1 +治奢兴俭 1 +x:1 +消费群 1 +x:1 +检验费 1 +x:1 +影印 1 +x:1 +扎染 1 +x:1 +浴缸 1 +x:1 +汽酒 1 +x:1 +苦楚 1 +x:1 +理学院 1 +x:1 +德宏傣乡 1 +x:1 +汽配 1 +x:1 +敬礼 1 +x:1 +上下文 1 +x:1 +墓主人 1 +x:1 +导尿管 1 +x:1 +首评 1 +x:1 +尾羽 1 +x:1 +快棋赛 1 +x:1 +物是人非 1 +x:1 +名药 1 +x:1 +如前所述 1 +x:1 +货主 1 +x:1 +灯市口 1 +x:1 +被占领区 1 +x:1 +侈谈 1 +x:1 +优惠券 1 +x:1 +尖塔 1 +x:1 +司长 1 +x:1 +温吞水 1 +x:1 +掩映 1 +x:1 +诗作 1 +x:1 +税务所 1 +x:1 +麦茬儿 1 +x:1 +不管不顾 1 +x:1 +厘米/秒 1 +x:1 +超二级 1 +x:1 +吞并 1 +x:1 +手册 1 +x:1 +缔约国 1 +x:1 +思谋 1 +x:1 +敬称 1 +x:1 +政制 1 +x:1 +赚头 1 +x:1 +伊春 1 +x:1 +二里庄 1 +x:1 +动画 1 +x:1 +摄影家 1 +x:1 +尾翼 1 +x:1 +车顶 1 +x:1 +想象性 1 +x:1 +火地岛 1 +x:1 +说明 1 +x:1 +动用 1 +x:1 +名茶 1 +x:1 +较真 1 +x:1 +短打 1 +x:1 +色调 1 +x:1 +穷年累月 1 +x:1 +罗安达 1 +x:1 +文献学 1 +x:1 +书记员 1 +x:1 +董 715 +x:715 +纪实片 1 +x:1 +嗷嗷待哺 1 +x:1 +卡塔尔国 1 +x:1 +扣率 1 +x:1 +独出心裁 1 +x:1 +反刍动物 1 +x:1 +说是 1 +x:1 +金融界 1 +x:1 +尾翎 1 +x:1 +党政军群 1 +x:1 +黎民百姓 1 +x:1 +首访 1 +x:1 +寡妇 1 +x:1 +采矿点 1 +x:1 +宇 70 +x:70 +英雄城 1 +x:1 +处方单 1 +x:1 +帝王将相 1 +x:1 +冯湾村 1 +x:1 +中长线 1 +x:1 +演 173 +x:173 +休闲椅 1 +x:1 +把下 1 +x:1 +运钞车 1 +x:1 +此说 1 +x:1 +诗仙 1 +x:1 +横眉竖眼 1 +x:1 +落套 1 +x:1 +候诊室 1 +x:1 +投诉率 1 +x:1 +恍如 1 +x:1 +窟 2 +x:2 +平易 1 +x:1 +掉转 1 +x:1 +前排 1 +x:1 +阿达纳 1 +x:1 +应约 1 +x:1 +习舞 1 +x:1 +总体性 1 +x:1 +彰化 1 +x:1 +挂钩梯 1 +x:1 +滩地 1 +x:1 +高阳县 1 +x:1 +核试验区 1 +x:1 +倨傲不恭 1 +x:1 +宝安区 1 +x:1 +名花 1 +x:1 +升跌宝 1 +x:1 +习艺 1 +x:1 +毒箭 1 +x:1 +辣酱 1 +x:1 +平昔 1 +x:1 +杨浦 1 +x:1 +引伸义 1 +x:1 +建国会 1 +x:1 +精细化 1 +x:1 +棉梭织 1 +x:1 +上纲上线 1 +x:1 +鞋粉 1 +x:1 +强制性 1 +x:1 +新闻史 1 +x:1 +氯化氢 1 +x:1 +救国会 1 +x:1 +前提 1 +x:1 +影剧 1 +x:1 +诗人 1 +x:1 +人地生疏 1 +x:1 +皮猴儿 1 +x:1 +氯化法 1 +x:1 +论资排辈 1 +x:1 +衡器 1 +x:1 +平昌 1 +x:1 +高潮线 1 +x:1 +减员增效 1 +x:1 +桧仓郡 1 +x:1 +煤油灯 1 +x:1 +智利硝石 1 +x:1 +鞋类 1 +x:1 +此证 1 +x:1 +来复线 1 +x:1 +撼动 1 +x:1 +中点值 1 +x:1 +好说歹说 1 +x:1 +诗书 1 +x:1 +前指 1 +x:1 +穷鬼 1 +x:1 +叶绿体 1 +x:1 +蒸吨 1 +x:1 +罢选 1 +x:1 +此话 1 +x:1 +杆秤 1 +x:1 +开普顿 1 +x:1 +奉献 1 +x:1 +说来 1 +x:1 +心头 1 +x:1 +组织股 1 +x:1 +私车 1 +x:1 +调停人 1 +x:1 +药业界 1 +x:1 +萨安州 1 +x:1 +逐客令 1 +x:1 +说服 1 +x:1 +小矫情 1 +x:1 +见报稿 1 +x:1 +此诗 1 +x:1 +重要 1 +x:1 +庾家河乡 1 +x:1 +茶余酒后 1 +x:1 +吴家包村 1 +x:1 +摇摆 1 +x:1 +出难题 1 +x:1 +斗士 1 +x:1 +起源于 1 +x:1 +逊色 1 +x:1 +书目 1 +x:1 +为数很少 1 +x:1 +果匣子 1 +x:1 +货位 1 +x:1 +放射病 1 +x:1 +脏躁症 1 +x:1 +工作队 1 +x:1 +抢占 1 +x:1 +名臣 1 +x:1 +车箱 1 +x:1 +艰巨性 1 +x:1 +园艺区 1 +x:1 +此次 1 +x:1 +巴塞尔 1 +x:1 +专案组 1 +x:1 +中止点 1 +x:1 +投诉点 1 +x:1 +南岚镇 1 +x:1 +没事找事 1 +x:1 +启发 1 +x:1 +夜不成寐 1 +x:1 +对酒当歌 1 +x:1 +公用事业 1 +x:1 +摄影奖 1 +x:1 +雪鸟 1 +x:1 +卯榫 1 +x:1 +手包 1 +x:1 +字据 1 +x:1 +祝寿 1 +x:1 +分治 1 +x:1 +启口 1 +x:1 +恶运 1 +x:1 +大志 1 +x:1 +相映成趣 1 +x:1 +小虎队 1 +x:1 +子项目 1 +x:1 +酒石酸 1 +x:1 +分包人 1 +x:1 +天真无邪 1 +x:1 +电潜泵 1 +x:1 +督查队 1 +x:1 +职 205 +x:205 +瓢虫 1 +x:1 +手印 1 +x:1 +手卷 1 +x:1 +抗风力 1 +x:1 +小衣裳 1 +x:1 +分泌 1 +x:1 +利在千秋 1 +x:1 +动荡 1 +x:1 +吱呀 1 +x:1 +颐养天年 1 +x:1 +放虑 1 +x:1 +贵贱 1 +x:1 +纸制品 1 +x:1 +碳酸盐 1 +x:1 +宜宾 1 +x:1 +炸弹 1 +x:1 +助理 1 +x:1 +黑纱 1 +x:1 +弯矩 1 +x:1 +资源库 1 +x:1 +大版纸 1 +x:1 +连拱式 1 +x:1 +黑线 1 +x:1 +黑红 1 +x:1 +警戒具 1 +x:1 +规约性 1 +x:1 +斜心墙 1 +x:1 +邻近 1 +x:1 +斗室 1 +x:1 +激流汹涌 1 +x:1 +世情书 1 +x:1 +自首 1 +x:1 +淬火 1 +x:1 +胆大妄为 1 +x:1 +兆瓦 1 +x:1 +诈语 1 +x:1 +棉针织 1 +x:1 +首要 1 +x:1 +一方平安 1 +x:1 +黑绸 1 +x:1 +国交昌运 1 +x:1 +派会 1 +x:1 +车驾 1 +x:1 +警示录 1 +x:1 +定安里 1 +x:1 +车马 1 +x:1 +镌刻 1 +x:1 +奇文共赏 1 +x:1 +各路 1 +x:1 +泔水缸 1 +x:1 +缩回 1 +x:1 +佩 10 +x:10 +隔离带 1 +x:1 +演化 1 +x:1 +资格 1 +x:1 +毒砂 1 +x:1 +市楼 1 +x:1 +烟草商 1 +x:1 +布热津卡 1 +x:1 +心安 1 +x:1 +一片生机 1 +x:1 +名师傅 1 +x:1 +怀化 1 +x:1 +天下为公 1 +x:1 +后影 1 +x:1 +夜 313 +x:313 +夕阳西下 1 +x:1 +抡 17 +x:17 +焦黑 1 +x:1 +落子 1 +x:1 +玉米棒子 1 +x:1 +广采博收 1 +x:1 +回扣率 1 +x:1 +雕栏 1 +x:1 +失误者 1 +x:1 +焦黄 1 +x:1 +谐振 1 +x:1 +还原焰 1 +x:1 +教学楼 1 +x:1 +名胜 1 +x:1 +见机行事 1 +x:1 +意大利队 1 +x:1 +支吾其词 1 +x:1 +有感于 1 +x:1 +保留剧目 1 +x:1 +复苏术 1 +x:1 +王集乡 1 +x:1 +水暖组 1 +x:1 +战情 1 +x:1 +洋房 1 +x:1 +巴约纳 1 +x:1 +之际 1 +x:1 +启动 1 +x:1 +三连败 1 +x:1 +辨析 1 +x:1 +盘式机 1 +x:1 +卷心菜 1 +x:1 +说新 1 +x:1 +草库伦 1 +x:1 +处长 1 +x:1 +娃儿 1 +x:1 +肱骨 1 +x:1 +编译馆 1 +x:1 +缘起 1 +x:1 +奔腾 1 +x:1 +物本观 1 +x:1 +长生塔 1 +x:1 +说教 1 +x:1 +手动 1 +x:1 +敬立 1 +x:1 +禽类 1 +x:1 +蚩 1 +x:1 +尖子 1 +x:1 +风靡一时 1 +x:1 +炼钢 1 +x:1 +下半旗 1 +x:1 +赣西南 1 +x:1 +荒岛 1 +x:1 +手势 1 +x:1 +工农贸 1 +x:1 +加减法 1 +x:1 +敖东队 1 +x:1 +落寞 1 +x:1 +合格品 1 +x:1 +牛头马面 1 +x:1 +法学系 1 +x:1 +下半时 1 +x:1 +剪毛棚 1 +x:1 +粗毛皮 1 +x:1 +手力 1 +x:1 +拦蓄 1 +x:1 +分洪 1 +x:1 +遗迹 1 +x:1 +你争我夺 1 +x:1 +豁口 1 +x:1 +辽阳 1 +x:1 +布面鞋 1 +x:1 +烟草味 1 +x:1 +十九日 1 +x:1 +有权者 1 +x:1 +抢劫 1 +x:1 +分流 1 +x:1 +伊敏 1 +x:1 +时不我待 1 +x:1 +抒己见 1 +x:1 +心子 1 +x:1 +深宅 1 +x:1 +日喀则市 1 +x:1 +辽阔 1 +x:1 +法王洞 1 +x:1 +青云 1 +x:1 +对撞机 1 +x:1 +肇庆 1 +x:1 +落实 1 +x:1 +出台 1 +x:1 +炼铁 1 +x:1 +州界 1 +x:1 +臭腺 1 +x:1 +准谱儿 1 +x:1 +美人河 1 +x:1 +短暂 1 +x:1 +巷中 1 +x:1 +购销额 1 +x:1 +融 105 +x:105 +右锋 1 +x:1 +汽锤 1 +x:1 +拉玛古猿 1 +x:1 +租用者 1 +x:1 +氖灯 1 +x:1 +掩护 1 +x:1 +皖江 1 +x:1 +搭桥 1 +x:1 +霸王 1 +x:1 +下诹访市 1 +x:1 +护卫队长 1 +x:1 +非难 1 +x:1 +绿水长流 1 +x:1 +杨树 1 +x:1 +大中华区 1 +x:1 +运作 1 +x:1 +尖峰 1 +x:1 +怒发冲冠 1 +x:1 +夺眶而出 1 +x:1 +过五关 1 +x:1 +宵 2 +x:2 +字数 1 +x:1 +洋教 1 +x:1 +雕漆 1 +x:1 +恩准 1 +x:1 +弓形体 1 +x:1 +起诉者 1 +x:1 +坂 1 +x:1 +苦海 1 +x:1 +影坛 1 +x:1 +母亲河 1 +x:1 +学会市场 1 +x:1 +姜黄 1 +x:1 +农业工人 1 +x:1 +瓦房村 1 +x:1 +扣眼 1 +x:1 +照常 1 +x:1 +高脚杯 1 +x:1 +资源 1 +x:1 +问寒问暖 1 +x:1 +西单站 1 +x:1 +高不可攀 1 +x:1 +育儿袋 1 +x:1 +久盛不衰 1 +x:1 +蛤蟆 1 +x:1 +流星赶月 1 +x:1 +区间车 1 +x:1 +中长篇 1 +x:1 +依率 1 +x:1 +数值 1 +x:1 +气贯长虹 1 +x:1 +扁桃体炎 1 +x:1 +矫捷 1 +x:1 +布伦特 1 +x:1 +珊瑚岛 1 +x:1 +恩典 1 +x:1 +纪念章 1 +x:1 +壶口 1 +x:1 +雕塑界 1 +x:1 +痱子 1 +x:1 +满怀深情 1 +x:1 +积以时日 1 +x:1 +徇私枉法 1 +x:1 +脑垂体 1 +x:1 +洪恩 1 +x:1 +来说 1 +x:1 +虚套子 1 +x:1 +眷顾 1 +x:1 +湘妃竹 1 +x:1 +心尖 1 +x:1 +搭棚 1 +x:1 +惊险片 1 +x:1 +溜之大吉 1 +x:1 +含油量 1 +x:1 +嫌疑人 1 +x:1 +坍方 1 +x:1 +崩龙族 1 +x:1 +成不了 1 +x:1 +贴息贷款 1 +x:1 +地花鼓 1 +x:1 +被占领土 1 +x:1 +轻喜剧 1 +x:1 +衡南 1 +x:1 +保障 1 +x:1 +他方 1 +x:1 +流连忘返 1 +x:1 +放肆 1 +x:1 +杨梅 1 +x:1 +二元杂交 1 +x:1 +防总 1 +x:1 +前景 1 +x:1 +斯坦福 1 +x:1 +太空局 1 +x:1 +鉴于 1 +x:1 +圣诞老人 1 +x:1 +斗转星移 1 +x:1 +小聪明 1 +x:1 +默默无语 1 +x:1 +晃晃悠悠 1 +x:1 +影城 1 +x:1 +放权 1 +x:1 +舞台化 1 +x:1 +基因组 1 +x:1 +离瓣花冠 1 +x:1 +平山镇 1 +x:1 +放胆 1 +x:1 +丛葬 1 +x:1 +礼品 1 +x:1 +苦水 1 +x:1 +少数 1 +x:1 +蛤蚧 1 +x:1 +孵化 1 +x:1 +攻心战 1 +x:1 +支溪岙村 1 +x:1 +骑虎难下 1 +x:1 +四环路 1 +x:1 +原料林 1 +x:1 +楚剧团 1 +x:1 +色觉 1 +x:1 +勤俭星 1 +x:1 +塬面 1 +x:1 +分段 1 +x:1 +接踵而来 1 +x:1 +剥削阶级 1 +x:1 +历久不衰 1 +x:1 +短枪 1 +x:1 +遥远 1 +x:1 +默默无言 1 +x:1 +顾全大局 1 +x:1 +文理工 1 +x:1 +棺材 1 +x:1 +特征值 1 +x:1 +滩区 1 +x:1 +爆冷门 1 +x:1 +邬庙村 1 +x:1 +调剂室 1 +x:1 +旋 18 +x:18 +黑人区 1 +x:1 +技艺压群 1 +x:1 +赐 13 +x:13 +羞耻感 1 +x:1 +前柱 1 +x:1 +洗澡费 1 +x:1 +耐饥 1 +x:1 +创始 1 +x:1 +体统 1 +x:1 +丘脑 1 +x:1 +盖世无双 1 +x:1 +分母 1 +x:1 +掌权 1 +x:1 +圣马可 1 +x:1 +若 349 +x:349 +线条形 1 +x:1 +抢吃 1 +x:1 +孵卵 1 +x:1 +神交 1 +x:1 +印尼盾 1 +x:1 +发脾气 1 +x:1 +苦求 1 +x:1 +音息 1 +x:1 +三灾八难 1 +x:1 +小米辣 1 +x:1 +天理 1 +x:1 +摄影师 1 +x:1 +能进能出 1 +x:1 +蝗情 1 +x:1 +亲亲的 1 +x:1 +掉话 1 +x:1 +运价 1 +x:1 +神仙 1 +x:1 +洛宁县 1 +x:1 +就诊率 1 +x:1 +拉锯式 1 +x:1 +动火 1 +x:1 +木锹 1 +x:1 +警嫂 1 +x:1 +舞台剧 1 +x:1 +落差 1 +x:1 +前机 1 +x:1 +缩写 1 +x:1 +一哄而散 1 +x:1 +愣 25 +x:25 +彪炳千秋 1 +x:1 +岿然不动 1 +x:1 +扶贫帮困 1 +x:1 +恶行 1 +x:1 +瞬 1 +x:1 +包子 1 +x:1 +潮起潮落 1 +x:1 +前朝 1 +x:1 +看大门 1 +x:1 +前期 1 +x:1 +不可避免 1 +x:1 +步履维艰 1 +x:1 +健体 1 +x:1 +担纲 1 +x:1 +前来 1 +x:1 +交流馆 1 +x:1 +资源委 1 +x:1 +车桥厂 1 +x:1 +座无虚席 1 +x:1 +山摇地动 1 +x:1 +内骨骼 1 +x:1 +坐椅 1 +x:1 +平川市 1 +x:1 +订货量 1 +x:1 +润滑 1 +x:1 +火海刀山 1 +x:1 +绝对零度 1 +x:1 +丙烯酸 1 +x:1 +育雏 1 +x:1 +坐失良机 1 +x:1 +仿章 1 +x:1 +兔死狗烹 1 +x:1 +挑战者杯 1 +x:1 +郁积 1 +x:1 +僮 1 +x:1 +社会分工 1 +x:1 +前村 1 +x:1 +分步 1 +x:1 +缩减 1 +x:1 +附庸风雅 1 +x:1 +乌兹别克 1 +x:1 +黑种 1 +x:1 +服务网 1 +x:1 +巢鼠 1 +x:1 +断臂 1 +x:1 +紫药水 1 +x:1 +检波器 1 +x:1 +园艺场 1 +x:1 +三热爱 1 +x:1 +壶关 1 +x:1 +寿山石 1 +x:1 +联建 1 +x:1 +合格兵 1 +x:1 +说情 1 +x:1 +精雕细刻 1 +x:1 +软床 1 +x:1 +落幕 1 +x:1 +承受力 1 +x:1 +硬脂酸 1 +x:1 +质子 1 +x:1 +沛沛然 1 +x:1 +防疫员 1 +x:1 +邯 1 +x:1 +一荣俱荣 1 +x:1 +扣留 1 +x:1 +主题歌 1 +x:1 +苗岭 1 +x:1 +桑耶寺 1 +x:1 +创造物 1 +x:1 +来讲 1 +x:1 +恶计 1 +x:1 +谈笑 1 +x:1 +数列 1 +x:1 +遗言 1 +x:1 +钓钩 1 +x:1 +西子湖畔 1 +x:1 +哗 2 +x:2 +场租 1 +x:1 +菜料 1 +x:1 +鹅绒 1 +x:1 +二里塘 1 +x:1 +刚正不阿 1 +x:1 +氧化剂 1 +x:1 +小说书 1 +x:1 +祭灶 1 +x:1 +两会 1 +x:1 +一本正经 1 +x:1 +神圣感 1 +x:1 +右面 1 +x:1 +给水 1 +x:1 +守令 1 +x:1 +守业 1 +x:1 +选聘制 1 +x:1 +补偿费 1 +x:1 +北新街 1 +x:1 +角速度 1 +x:1 +收银台 1 +x:1 +镢头 1 +x:1 +慷然 1 +x:1 +判读 1 +x:1 +分标 1 +x:1 +郓城县 1 +x:1 +科学 1 +x:1 +少少许 1 +x:1 +政区 1 +x:1 +判词 1 +x:1 +奇 87 +x:87 +地方队 1 +x:1 +黑窝 1 +x:1 +龙门吊 1 +x:1 +杨楼乡 1 +x:1 +就诊点 1 +x:1 +葛藤 1 +x:1 +断腿 1 +x:1 +正面人物 1 +x:1 +礼花弹 1 +x:1 +零税率 1 +x:1 +宁缺毋滥 1 +x:1 +武隆县 1 +x:1 +汽化器 1 +x:1 +两侧 1 +x:1 +判认 1 +x:1 +赞美声 1 +x:1 +斗志 1 +x:1 +两便 1 +x:1 +落座 1 +x:1 +钱包 1 +x:1 +斯图加特 1 +x:1 +顽民 1 +x:1 +西昌市 1 +x:1 +心幕 1 +x:1 +工资额 1 +x:1 +中空化 1 +x:1 +奶糖饼 1 +x:1 +壶内 1 +x:1 +评委席 1 +x:1 +火树银花 1 +x:1 +软座 1 +x:1 +分档 1 +x:1 +晓畅 1 +x:1 +资水 1 +x:1 +削铁如泥 1 +x:1 +雅称 1 +x:1 +直升机场 1 +x:1 +心律 1 +x:1 +短文 1 +x:1 +伊武部 1 +x:1 +新房 1 +x:1 +担保函 1 +x:1 +二里头 1 +x:1 +麦季 1 +x:1 +轻佻 1 +x:1 +良策 1 +x:1 +创安 1 +x:1 +前方 1 +x:1 +损失 1 +x:1 +妙算 1 +x:1 +果酸 1 +x:1 +麦子 1 +x:1 +摄影展 1 +x:1 +前文 1 +x:1 +落归 1 +x:1 +移送 1 +x:1 +始终如一 1 +x:1 +中郎将 1 +x:1 +尾砂 1 +x:1 +永恒不变 1 +x:1 +各行 1 +x:1 +沉思 1 +x:1 +军机处 1 +x:1 +心心 1 +x:1 +缩印 1 +x:1 +灰化土 1 +x:1 +茶壶 1 +x:1 +队风 1 +x:1 +两为 1 +x:1 +放荡 1 +x:1 +心志 1 +x:1 +磁场 1 +x:1 +断肢 1 +x:1 +扣球 1 +x:1 +诱人 1 +x:1 +纪检委 1 +x:1 +创导 1 +x:1 +衡阳市 1 +x:1 +前旗 1 +x:1 +短时 1 +x:1 +葛营 1 +x:1 +二十九日 1 +x:1 +此湖 1 +x:1 +守信 1 +x:1 +利用率 1 +x:1 +遗证 1 +x:1 +姥姥 1 +x:1 +黑管 1 +x:1 +荷阵 1 +x:1 +动物 1 +x:1 +海防林带 1 +x:1 +市民 1 +x:1 +心怀叵测 1 +x:1 +违背 1 +x:1 +边饰 1 +x:1 +缛 1 +x:1 +妙笔 1 +x:1 +积贫积弱 1 +x:1 +氧气 1 +x:1 +家大业大 1 +x:1 +芥子气 1 +x:1 +内外勤 1 +x:1 +心弦 1 +x:1 +啥子 1 +x:1 +名著 1 +x:1 +短收 1 +x:1 +牙膏袋式 1 +x:1 +乘风扬帆 1 +x:1 +两院制 1 +x:1 +黑箍 1 +x:1 +纪检处 1 +x:1 +尾鳍 1 +x:1 +分配办 1 +x:1 +你追我赶 1 +x:1 +处里 1 +x:1 +矫情 1 +x:1 +好歹 1 +x:1 +常武 1 +x:1 +短效 1 +x:1 +所有权证 1 +x:1 +大名鼎鼎 1 +x:1 +麦客 1 +x:1 +男女排 1 +x:1 +毒素 1 +x:1 +出水孔 1 +x:1 +休闲式 1 +x:1 +影响 1 +x:1 +妙策 1 +x:1 +恶言 1 +x:1 +莫桑比克 1 +x:1 +褐斑病 1 +x:1 +禁核试 1 +x:1 +前敌 1 +x:1 +举办者 1 +x:1 +非文盲率 1 +x:1 +金融版 1 +x:1 +瘪三 1 +x:1 +大清早 1 +x:1 +马边 1 +x:1 +太湖 1 +x:1 +洪泽 1 +x:1 +缩尺 1 +x:1 +互动式 1 +x:1 +城信 1 +x:1 +元老 1 +x:1 +嘎那 1 +x:1 +恩巴 1 +x:1 +感慨万千 1 +x:1 +遗著 1 +x:1 +牌号 1 +x:1 +寿星峰 1 +x:1 +手头 1 +x:1 +尘 13 +x:13 +洋楼 1 +x:1 +达官 1 +x:1 +匿迹海外 1 +x:1 +流窜犯 1 +x:1 +名词 1 +x:1 +大烟泡 1 +x:1 +辩解性 1 +x:1 +牌友 1 +x:1 +此愁 1 +x:1 +放谈 1 +x:1 +名诗 1 +x:1 +四季度 1 +x:1 +可卑 1 +x:1 +缩小 1 +x:1 +煤管站 1 +x:1 +影子 1 +x:1 +鹄 1 +x:1 +梨树县 1 +x:1 +娃娃 1 +x:1 +豆腐粉 1 +x:1 +月牙形 1 +x:1 +音流 1 +x:1 +俄二战 1 +x:1 +翠亨镇 1 +x:1 +牙关 1 +x:1 +抢夺 1 +x:1 +复元膏 1 +x:1 +玉泉营 1 +x:1 +落拓不羁 1 +x:1 +协力集 1 +x:1 +五牛队 1 +x:1 +边隅 1 +x:1 +手套 1 +x:1 +襄阳棉 1 +x:1 +投诉站 1 +x:1 +遗落 1 +x:1 +蕾 21 +x:21 +撮合 1 +x:1 +满当当 1 +x:1 +透射 1 +x:1 +声望度 1 +x:1 +扣篮 1 +x:1 +勋章 1 +x:1 +踏 220 +x:220 +凭吊 1 +x:1 +沸点 1 +x:1 +自己人 1 +x:1 +稗 1 +x:1 +酷似 1 +x:1 +社会主义 1 +x:1 +红石乡 1 +x:1 +分明 1 +x:1 +有口皆碑 1 +x:1 +耕畜 1 +x:1 +黄龙洞 1 +x:1 +惊涛激越 1 +x:1 +涵蕴 1 +x:1 +边际 1 +x:1 +车速 1 +x:1 +水泥业 1 +x:1 +洋槐 1 +x:1 +吞噬 1 +x:1 +勒流 1 +x:1 +弄假 1 +x:1 +三协精机 1 +x:1 +大板车 1 +x:1 +布伦纳 1 +x:1 +高压脊 1 +x:1 +关键性 1 +x:1 +归宿 1 +x:1 +黑瓷 1 +x:1 +尾矿 1 +x:1 +洪水 1 +x:1 +纵向 1 +x:1 +汽笛声 1 +x:1 +耕田 1 +x:1 +实干家 1 +x:1 +慑 3 +x:3 +器物部 1 +x:1 +专题组 1 +x:1 +边防 1 +x:1 +车道 1 +x:1 +达孜 1 +x:1 +想尽 1 +x:1 +多标准论 1 +x:1 +硫 12 +x:12 +奖金额 1 +x:1 +高山病 1 +x:1 +内寄生 1 +x:1 +小树 1 +x:1 +邑馆 1 +x:1 +审计长 1 +x:1 +俺 60 +x:60 +总站 1 +x:1 +分析 1 +x:1 +浮雕感 1 +x:1 +追缴 1 +x:1 +放贷 1 +x:1 +落入 1 +x:1 +小报告 1 +x:1 +搭救 1 +x:1 +朔 6 +x:6 +后山 1 +x:1 +传记 1 +x:1 +边音 1 +x:1 +娃子 1 +x:1 +市报 1 +x:1 +照照 1 +x:1 +春华镇 1 +x:1 +撩 9 +x:9 +笔录体 1 +x:1 +有恃无恐 1 +x:1 +苦思 1 +x:1 +伊瓜苏市 1 +x:1 +剖视图 1 +x:1 +彩花灯 1 +x:1 +峻峭 1 +x:1 +他样 1 +x:1 +蹬腿 1 +x:1 +动量 1 +x:1 +字标 1 +x:1 +酸溜溜 1 +x:1 +出资方 1 +x:1 +柴汽车 1 +x:1 +放走 1 +x:1 +感慨万分 1 +x:1 +嘟囔 1 +x:1 +苦恼 1 +x:1 +亲痛仇快 1 +x:1 +山脚下 1 +x:1 +山西队 1 +x:1 +常时 1 +x:1 +市招 1 +x:1 +洪涝 1 +x:1 +车载斗量 1 +x:1 +首航 1 +x:1 +益气养血 1 +x:1 +名誉 1 +x:1 +梅雷兹党 1 +x:1 +黏胶纤维 1 +x:1 +字样 1 +x:1 +计程表 1 +x:1 +满面春风 1 +x:1 +沉渣 1 +x:1 +拽 20 +x:20 +字根 1 +x:1 +损益 1 +x:1 +嘟嘟 1 +x:1 +前次 1 +x:1 +炉况 1 +x:1 +提留款 1 +x:1 +绸纹纸 1 +x:1 +城乡 1 +x:1 +认证版 1 +x:1 +漫无边际 1 +x:1 +精明能干 1 +x:1 +浴盆 1 +x:1 +氧化焰 1 +x:1 +加卡乡 1 +x:1 +磨刀霍霍 1 +x:1 +分机 1 +x:1 +增速 1 +x:1 +心儿 1 +x:1 +阿谀逢迎 1 +x:1 +晕晕的 1 +x:1 +洪流 1 +x:1 +银泉市 1 +x:1 +反腐倡廉 1 +x:1 +城中 1 +x:1 +上下水 1 +x:1 +整体性 1 +x:1 +历历可数 1 +x:1 +控制者 1 +x:1 +联防费 1 +x:1 +分权 1 +x:1 +晕 8 +x:8 +分杈 1 +x:1 +常数 1 +x:1 +万死不辞 1 +x:1 +观赏处 1 +x:1 +雅韵 1 +x:1 +洪洞 1 +x:1 +城下 1 +x:1 +罗家湾 1 +x:1 +名言 1 +x:1 +侄 1 +x:1 +冒失鬼 1 +x:1 +此情 1 +x:1 +诊断仪 1 +x:1 +椰林湾 1 +x:1 +核查 1 +x:1 +市扰 1 +x:1 +苦情 1 +x:1 +太山庙 1 +x:1 +音波 1 +x:1 +尖儿 1 +x:1 +蚰蜒 1 +x:1 +仿画 1 +x:1 +装饰画 1 +x:1 +区域化 1 +x:1 +分派 1 +x:1 +流民 1 +x:1 +因特网址 1 +x:1 +说法 1 +x:1 +秉笔 1 +x:1 +开挖量 1 +x:1 +心力 1 +x:1 +成 3033 +x:3033 +王堡村 1 +x:1 +黑瘦 1 +x:1 +仿生 1 +x:1 +沉浸 1 +x:1 +心动 1 +x:1 +长春园 1 +x:1 +毒花花 1 +x:1 +花岗石材 1 +x:1 +断路 1 +x:1 +函大 1 +x:1 +储气瓶 1 +x:1 +售票窗 1 +x:1 +名角 1 +x:1 +哨声波 1 +x:1 +俺村 1 +x:1 +蒿 1 +x:1 +无论如何 1 +x:1 +苦捱 1 +x:1 +劳教所 1 +x:1 +呼朋唤友 1 +x:1 +滩尾 1 +x:1 +高脚楼 1 +x:1 +质地 1 +x:1 +黑白 1 +x:1 +行 878 +x:878 +恩德 1 +x:1 +志哀 1 +x:1 +首脑 1 +x:1 +园艺学 1 +x:1 +奔袭 1 +x:1 +赚取 1 +x:1 +迷幻 1 +x:1 +动群 1 +x:1 +伪钞 1 +x:1 +长毛绒 1 +x:1 +救国救民 1 +x:1 +吞咽 1 +x:1 +敬献 1 +x:1 +尺幅 1 +x:1 +阳武 1 +x:1 +铭刻 1 +x:1 +唏嘘 1 +x:1 +遂宁市 1 +x:1 +习惯性 1 +x:1 +机立窑 1 +x:1 +接力队 1 +x:1 +狡黠 1 +x:1 +社会形态 1 +x:1 +借用还 1 +x:1 +放射线 1 +x:1 +洋毫 1 +x:1 +尺度 1 +x:1 +生成器 1 +x:1 +医士 1 +x:1 +救生网 1 +x:1 +熙熙攘攘 1 +x:1 +含羞草 1 +x:1 +沉淀 1 +x:1 +鼓风炉 1 +x:1 +雪障 1 +x:1 +谦谦君子 1 +x:1 +禽畜 1 +x:1 +洪湖 1 +x:1 +职校 1 +x:1 +那霸市 1 +x:1 +翕张 1 +x:1 +不见天日 1 +x:1 +螺杆式 1 +x:1 +英雄山 1 +x:1 +洗理费 1 +x:1 +尖刀 1 +x:1 +渡口 1 +x:1 +诀要 1 +x:1 +军师职 1 +x:1 +噢噢 1 +x:1 +吞吐 1 +x:1 +惬意 1 +x:1 +拉乌舍 1 +x:1 +衡阳县 1 +x:1 +正角儿 1 +x:1 +工工整整 1 +x:1 +误食 1 +x:1 +哭腔 1 +x:1 +百花山 1 +x:1 +黎川县 1 +x:1 +分摊 1 +x:1 +吃住行 1 +x:1 +连拱坝 1 +x:1 +队长 1 +x:1 +纪检员 1 +x:1 +习见 1 +x:1 +天生 1 +x:1 +尾端 1 +x:1 +尖利 1 +x:1 +砂轮 1 +x:1 +自由体操 1 +x:1 +节目单 1 +x:1 +外事部 1 +x:1 +自重 1 +x:1 +示范田 1 +x:1 +仿真丝 1 +x:1 +尖刻 1 +x:1 +洋洲镇 1 +x:1 +虚弱不堪 1 +x:1 +边门 1 +x:1 +焦雷 1 +x:1 +茶花女 1 +x:1 +静脉注射 1 +x:1 +可变 1 +x:1 +桑葚 1 +x:1 +杨木 1 +x:1 +杂症 1 +x:1 +售票箱 1 +x:1 +黄龙溪 1 +x:1 +分文 1 +x:1 +仁爱 1 +x:1 +仿制品 1 +x:1 +资源地 1 +x:1 +苦战 1 +x:1 +尖叫 1 +x:1 +闹新房 1 +x:1 +政治学家 1 +x:1 +选择性 1 +x:1 +同性恋爱 1 +x:1 +煤管科 1 +x:1 +此战 1 +x:1 +报以 1 +x:1 +泸西县 1 +x:1 +说唱剧 1 +x:1 +丧事 1 +x:1 +书画热 1 +x:1 +麦地 1 +x:1 +市情 1 +x:1 +嘟哝 1 +x:1 +治理面 1 +x:1 +好比 1 +x:1 +缩影 1 +x:1 +尖厉 1 +x:1 +橄榄球队 1 +x:1 +水银柱 1 +x:1 +迷彩 1 +x:1 +乎 39 +x:39 +侯鸟 1 +x:1 +染 84 +x:84 +钱庄 1 +x:1 +怀孕 1 +x:1 +拥堵 1 +x:1 +言教 1 +x:1 +郝 102 +x:102 +美国之音 1 +x:1 +常柴 1 +x:1 +陇海 1 +x:1 +祥和 1 +x:1 +字模 1 +x:1 +心口 1 +x:1 +二氧化碳 1 +x:1 +杨村 1 +x:1 +米价 1 +x:1 +棺椁 1 +x:1 +出头之日 1 +x:1 +传经授艺 1 +x:1 +鞋饰 1 +x:1 +雨量 1 +x:1 +浏览者 1 +x:1 +解嘲 1 +x:1 +课后 1 +x:1 +四肢 1 +x:1 +落叶 1 +x:1 +放达 1 +x:1 +势派 1 +x:1 +杏黄色 1 +x:1 +音源 1 +x:1 +钓饵 1 +x:1 +十里堡 1 +x:1 +衡山 1 +x:1 +停车位 1 +x:1 +金融大街 1 +x:1 +二氧化硅 1 +x:1 +义理 1 +x:1 +一般性 1 +x:1 +锡金 1 +x:1 +证明书 1 +x:1 +燕麦 1 +x:1 +三部曲 1 +x:1 +作案人 1 +x:1 +医疗期 1 +x:1 +名街 1 +x:1 +鲁班尺 1 +x:1 +矫治 1 +x:1 +不少 1 +x:1 +分支 1 +x:1 +斗勇 1 +x:1 +搭构 1 +x:1 +上下游 1 +x:1 +铁规章 1 +x:1 +雪韵 1 +x:1 +艺术节 1 +x:1 +松江 1 +x:1 +钱币 1 +x:1 +兴义 1 +x:1 +着力处 1 +x:1 +竖 29 +x:29 +过滤嘴 1 +x:1 +榆林角 1 +x:1 +反犬旁儿 1 +x:1 +凭坚 1 +x:1 +分数 1 +x:1 +边锋 1 +x:1 +红螺山 1 +x:1 +出栏率 1 +x:1 +贴面 1 +x:1 +麦垛 1 +x:1 +首肯 1 +x:1 +乒乓球台 1 +x:1 +恩师 1 +x:1 +日文版 1 +x:1 +续展 1 +x:1 +限制法 1 +x:1 +储气田 1 +x:1 +沉没 1 +x:1 +看守内阁 1 +x:1 +郴州 1 +x:1 +费恩梅 1 +x:1 +商贸点 1 +x:1 +家乡戏 1 +x:1 +敬畏 1 +x:1 +杜菜园村 1 +x:1 +纪念物 1 +x:1 +辍 5 +x:5 +恶臭 1 +x:1 +护卫员 1 +x:1 +艾菲尔 1 +x:1 +无法无天 1 +x:1 +汉剧团 1 +x:1 +具象化 1 +x:1 +车钩 1 +x:1 +磁电机 1 +x:1 +洗池台 1 +x:1 +返乡 1 +x:1 +洋流 1 +x:1 +猛烈 1 +x:1 +幽径 1 +x:1 +断语 1 +x:1 +纪念版 1 +x:1 +掉色 1 +x:1 +纪念牌 1 +x:1 +正是 1 +x:1 +尚地义 1 +x:1 +营营 1 +x:1 +积分 1 +x:1 +明火点 1 +x:1 +文水县 1 +x:1 +朱墩村 1 +x:1 +小步 1 +x:1 +防守战 1 +x:1 +华衣 1 +x:1 +雨雾 1 +x:1 +冷战史 1 +x:1 +遗腹子 1 +x:1 +车铺 1 +x:1 +南盘江 1 +x:1 +青山秀水 1 +x:1 +雨雪 1 +x:1 +分支性 1 +x:1 +不快 1 +x:1 +选择权 1 +x:1 +分配处 1 +x:1 +扣缴 1 +x:1 +矫正 1 +x:1 +洋洋 1 +x:1 +转注 1 +x:1 +麻将牌 1 +x:1 +本草经 1 +x:1 +小铲岛 1 +x:1 +清洁率 1 +x:1 +饮 61 +x:61 +随想录 1 +x:1 +分拣 1 +x:1 +放行 1 +x:1 +零活儿 1 +x:1 +放血 1 +x:1 +落后 1 +x:1 +衡宝 1 +x:1 +下食堂村 1 +x:1 +分成 1 +x:1 +浓缩液 1 +x:1 +名车 1 +x:1 +住宅区 1 +x:1 +黑点 1 +x:1 +收音机 1 +x:1 +落霞 1 +x:1 +天工 1 +x:1 +面面观 1 +x:1 +下车伊始 1 +x:1 +直通率 1 +x:1 +凭借 1 +x:1 +可变性 1 +x:1 +黑炭 1 +x:1 +浮萍 1 +x:1 +高山反应 1 +x:1 +长颈鹿 1 +x:1 +法学班 1 +x:1 +昧 10 +x:10 +苦斗 1 +x:1 +糖尿病人 1 +x:1 +此文 1 +x:1 +常态 1 +x:1 +牌坊 1 +x:1 +分房 1 +x:1 +土豪 1 +x:1 +青山乡 1 +x:1 +冰川期 1 +x:1 +曼然 1 +x:1 +再衰三竭 1 +x:1 +百战不殆 1 +x:1 +手工 1 +x:1 +女人 1 +x:1 +毒瘾 1 +x:1 +传输网 1 +x:1 +毒瘤 1 +x:1 +错怪 1 +x:1 +此时 1 +x:1 +分手 1 +x:1 +手巾 1 +x:1 +进宫 1 +x:1 +分批 1 +x:1 +揪 23 +x:23 +宁阳县 1 +x:1 +头头脑脑 1 +x:1 +不忍 1 +x:1 +濒 2 +x:2 +桥台 1 +x:1 +苦旅 1 +x:1 +沿湖 1 +x:1 +界限量规 1 +x:1 +一扫而光 1 +x:1 +字汇 1 +x:1 +擂鼓 1 +x:1 +天塌地陷 1 +x:1 +缩头 1 +x:1 +九合村 1 +x:1 +扇子舞 1 +x:1 +唯物论者 1 +x:1 +迷失 1 +x:1 +公交线 1 +x:1 +蟾酥 1 +x:1 +逞 5 +x:5 +传输线 1 +x:1 +所向披靡 1 +x:1 +结症 1 +x:1 +怜恤 1 +x:1 +秧歌赛 1 +x:1 +轩轾 1 +x:1 +音校 1 +x:1 +小圈子 1 +x:1 +隐逸 1 +x:1 +主副业 1 +x:1 +车间 1 +x:1 +呆 74 +x:74 +耐酸 1 +x:1 +是的 1 +x:1 +参谋部 1 +x:1 +丈母娘 1 +x:1 +装饰物 1 +x:1 +涤纶 1 +x:1 +迥然 1 +x:1 +热衷于 1 +x:1 +主题性 1 +x:1 +莲韵 1 +x:1 +检验者 1 +x:1 +⑦ 3 +x:3 +创出 1 +x:1 +疏港路 1 +x:1 +续 50 +x:50 +审计部 1 +x:1 +杨舍河 1 +x:1 +因人制宜 1 +x:1 +优柔寡断 1 +x:1 +洋气 1 +x:1 +配套费 1 +x:1 +大功率 1 +x:1 +各色 1 +x:1 +异戊橡胶 1 +x:1 +伞降 1 +x:1 +分挑 1 +x:1 +影库 1 +x:1 +示范片 1 +x:1 +滑雪界 1 +x:1 +土地证 1 +x:1 +硬性 1 +x:1 +清真寺 1 +x:1 +怜惜 1 +x:1 +中外古今 1 +x:1 +接入网 1 +x:1 +返修 1 +x:1 +篱栅 1 +x:1 +多阵性 1 +x:1 +树蕨 1 +x:1 +特种兵 1 +x:1 +饮酒 1 +x:1 +媚 6 +x:6 +比例尺 1 +x:1 +重访 1 +x:1 +资材 1 +x:1 +认 97 +x:97 +助理级 1 +x:1 +胀鼓鼓 1 +x:1 +牛马司镇 1 +x:1 +义父 1 +x:1 +恃强凌弱 1 +x:1 +车锁 1 +x:1 +里海虎 1 +x:1 +院区 1 +x:1 +黑熊 1 +x:1 +一人得道 1 +x:1 +俄罗斯 1 +x:1 +脊索 1 +x:1 +宏观性 1 +x:1 +施展 1 +x:1 +断言 1 +x:1 +滤器 1 +x:1 +铆 3 +x:3 +某人 1 +x:1 +恙虫 1 +x:1 +启封 1 +x:1 +车长 1 +x:1 +寸有所长 1 +x:1 +襄樊市 1 +x:1 +资望 1 +x:1 +快中子 1 +x:1 +变电亭 1 +x:1 +洋油 1 +x:1 +创先 1 +x:1 +麦冬 1 +x:1 +爱国华侨 1 +x:1 +发计委 1 +x:1 +资本 1 +x:1 +蛀虫 1 +x:1 +浓缩法 1 +x:1 +放射科 1 +x:1 +某些 1 +x:1 +跑马水 1 +x:1 +市景 1 +x:1 +麦农 1 +x:1 +孙甘店乡 1 +x:1 +佳木斯市 1 +x:1 +肌体 1 +x:1 +某事 1 +x:1 +报到卡 1 +x:1 +耐量 1 +x:1 +柞蚕丝 1 +x:1 +豆奶机 1 +x:1 +踪迹 1 +x:1 +政治化 1 +x:1 +教唆犯 1 +x:1 +创办 1 +x:1 +交迭 1 +x:1 +苦木 1 +x:1 +前沿 1 +x:1 +羸弱 1 +x:1 +战成 1 +x:1 +添枝加叶 1 +x:1 +市斤 1 +x:1 +南丰县 1 +x:1 +直肠子 1 +x:1 +负效应 1 +x:1 +隘口 1 +x:1 +裁决 1 +x:1 +庸者 1 +x:1 +实心眼儿 1 +x:1 +有门道 1 +x:1 +耐磨 1 +x:1 +自销 1 +x:1 +塔尔寺 1 +x:1 +转寄 1 +x:1 +哗哗哗 1 +x:1 +穗选 1 +x:1 +此条 1 +x:1 +城镇化 1 +x:1 +黑牢 1 +x:1 +喉舌 1 +x:1 +明文规定 1 +x:1 +仿照 1 +x:1 +扣除 1 +x:1 +擦边球 1 +x:1 +达川 1 +x:1 +短波 1 +x:1 +变化万端 1 +x:1 +官桥湖 1 +x:1 +书背 1 +x:1 +降免职 1 +x:1 +启德 1 +x:1 +滦平县 1 +x:1 +滩堆 1 +x:1 +钻石 1 +x:1 +草丛 1 +x:1 +草业 1 +x:1 +哈密瓜 1 +x:1 +敢为人先 1 +x:1 +钓鱼 1 +x:1 +复线率 1 +x:1 +蜀犬吠日 1 +x:1 +上交所 1 +x:1 +三连胜 1 +x:1 +客容量 1 +x:1 +言悔 1 +x:1 +创刊 1 +x:1 +霭霭白云 1 +x:1 +蔡家坡 1 +x:1 +大清河 1 +x:1 +质变 1 +x:1 +瑶山乡 1 +x:1 +创制 1 +x:1 +友谊 1 +x:1 +苦果 1 +x:1 +道歉 1 +x:1 +车队 1 +x:1 +来源于 1 +x:1 +教研部 1 +x:1 +钱学 1 +x:1 +道格拉斯 1 +x:1 +创利 1 +x:1 +市政 1 +x:1 +浑黄 1 +x:1 +名贤 1 +x:1 +卒底炮 1 +x:1 +言情 1 +x:1 +九死不悔 1 +x:1 +双城记 1 +x:1 +名贵 1 +x:1 +自问 1 +x:1 +行洪区 1 +x:1 +双亲 1 +x:1 +铅字合金 1 +x:1 +民族乡 1 +x:1 +高分子 1 +x:1 +孙 1183 +x:1183 +蒙难者 1 +x:1 +伪造 1 +x:1 +推走 1 +x:1 +苟且偷生 1 +x:1 +手心 1 +x:1 +胜人一筹 1 +x:1 +非洲队 1 +x:1 +短池 1 +x:1 +黑狗 1 +x:1 +平摊 1 +x:1 +岗头镇 1 +x:1 +动笔 1 +x:1 +双争 1 +x:1 +捐助点 1 +x:1 +毒理 1 +x:1 +嗲 1 +x:1 +娘亲 1 +x:1 +东高埝村 1 +x:1 +草书 1 +x:1 +资源化 1 +x:1 +万事通 1 +x:1 +数字 1 +x:1 +断裂 1 +x:1 +矢车菊 1 +x:1 +网中之鱼 1 +x:1 +床位费 1 +x:1 +影射 1 +x:1 +仕女图 1 +x:1 +防风林 1 +x:1 +时刻表 1 +x:1 +侯马 1 +x:1 +传道 1 +x:1 +子句 1 +x:1 +日化厂 1 +x:1 +是是非非 1 +x:1 +奔跑 1 +x:1 +心魂 1 +x:1 +斗嘴 1 +x:1 +数学 1 +x:1 +双体 1 +x:1 +手帕 1 +x:1 +高气压区 1 +x:1 +祭礼 1 +x:1 +乒乓球场 1 +x:1 +定性处理 1 +x:1 +此景 1 +x:1 +影展 1 +x:1 +省军区 1 +x:1 +创叔 1 +x:1 +《 13013 +x:13013 +麦区 1 +x:1 +伊丽莎白 1 +x:1 +滩头 1 +x:1 +助消化 1 +x:1 +装饰灯 1 +x:1 +钦州南路 1 +x:1 +网中人 1 +x:1 +田园区 1 +x:1 +尾灯 1 +x:1 +耶稣教徒 1 +x:1 +不刊之论 1 +x:1 +晚香玉 1 +x:1 +桥栏杆 1 +x:1 +玩物丧志 1 +x:1 +居家 1 +x:1 +火光烛天 1 +x:1 +大巴车 1 +x:1 +证书 1 +x:1 +兆示 1 +x:1 +子母钟 1 +x:1 +沙暴 1 +x:1 +高黎贡 1 +x:1 +交运 1 +x:1 +队部 1 +x:1 +尺子 1 +x:1 +吊顶 1 +x:1 +邻舍 1 +x:1 +奶粉厂 1 +x:1 +世界广论 1 +x:1 +调整期 1 +x:1 +养牛人 1 +x:1 +奔赴 1 +x:1 +克敌制胜 1 +x:1 +迷宫 1 +x:1 +奔走 1 +x:1 +资源厅 1 +x:1 +麦口 1 +x:1 +心土 1 +x:1 +安陆市 1 +x:1 +中国区 1 +x:1 +多媒体 1 +x:1 +启幕 1 +x:1 +藕断丝连 1 +x:1 +双关性 1 +x:1 +抢建 1 +x:1 +招标办 1 +x:1 +绅士式 1 +x:1 +醋酸 1 +x:1 +宽限 1 +x:1 +得天独厚 1 +x:1 +比翼齐飞 1 +x:1 +日伪 1 +x:1 +附院 1 +x:1 +争霸战 1 +x:1 +愚妄 1 +x:1 +怀德 1 +x:1 +金融税 1 +x:1 +黑玉 1 +x:1 +可见一斑 1 +x:1 +开放度 1 +x:1 +沙坪坝 1 +x:1 +短浅 1 +x:1 +洋溢 1 +x:1 +听神经 1 +x:1 +心坎 1 +x:1 +民间舞团 1 +x:1 +草体 1 +x:1 +证今 1 +x:1 +押款 1 +x:1 +凭单 1 +x:1 +指环 1 +x:1 +大小腿 1 +x:1 +电子学家 1 +x:1 +尺寸 1 +x:1 +缝衣针 1 +x:1 +万寿无疆 1 +x:1 +质劣 1 +x:1 +祝嘏 1 +x:1 +广告商 1 +x:1 +宽阔 1 +x:1 +社办 1 +x:1 +放诞 1 +x:1 +明令禁止 1 +x:1 +牌名 1 +x:1 +隔离区 1 +x:1 +浙江村 1 +x:1 +土城镇 1 +x:1 +干戈四起 1 +x:1 +资政 1 +x:1 +农作物 1 +x:1 +和衷 1 +x:1 +怀念 1 +x:1 +象牙塔 1 +x:1 +馈赠 1 +x:1 +柔姿纱 1 +x:1 +沉静 1 +x:1 +民国元年 1 +x:1 +自欺 1 +x:1 +雪水 1 +x:1 +伊 534 +x:534 +益发 1 +x:1 +茂 13 +x:13 +和亲 1 +x:1 +授戒师 1 +x:1 +定做 1 +x:1 +为主 1 +x:1 +风声 1 +x:1 +奉节 1 +x:1 +伪满 1 +x:1 +难产 1 +x:1 +办理制 1 +x:1 +集邮展 1 +x:1 +惹是生非 1 +x:1 +万年历 1 +x:1 +口号声 1 +x:1 +炉火纯青 1 +x:1 +弟媳 1 +x:1 +色系 1 +x:1 +财政司 1 +x:1 +洋酒 1 +x:1 +难事 1 +x:1 +难于 1 +x:1 +圣保罗州 1 +x:1 +孙家庄乡 1 +x:1 +蟒蛇 1 +x:1 +女中 1 +x:1 +黑豹 1 +x:1 +看家戏 1 +x:1 +芦苇 1 +x:1 +财政厅 1 +x:1 +局域网 1 +x:1 +脊背 1 +x:1 +司炉 1 +x:1 +七星 1 +x:1 +粘堵 1 +x:1 +自此 1 +x:1 +理顺 1 +x:1 +让胡路区 1 +x:1 +莎草 1 +x:1 +洪钟 1 +x:1 +人口所 1 +x:1 +忠贞 1 +x:1 +金佛 1 +x:1 +抓大放小 1 +x:1 +联系点 1 +x:1 +大主教 1 +x:1 +放映点 1 +x:1 +理事国 1 +x:1 +渔场 1 +x:1 +老年斑 1 +x:1 +闹 103 +x:103 +红新月会 1 +x:1 +人口报 1 +x:1 +难为 1 +x:1 +餐饮业 1 +x:1 +墓园 1 +x:1 +地带性 1 +x:1 +覆 12 +x:12 +郭家店镇 1 +x:1 +突发 1 +x:1 +官员 1 +x:1 +为人 1 +x:1 +突变 1 +x:1 +地方性 1 +x:1 +示范车 1 +x:1 +滑雪衫 1 +x:1 +日照县 1 +x:1 +铁骨铮铮 1 +x:1 +崩 6 +x:6 +如屋漏痕 1 +x:1 +为了 1 +x:1 +钓手 1 +x:1 +烈士 1 +x:1 +黑貂 1 +x:1 +紧追不舍 1 +x:1 +元月份 1 +x:1 +小巷 1 +x:1 +解围 1 +x:1 +亡 46 +x:46 +尾追 1 +x:1 +龙街子 1 +x:1 +固安县 1 +x:1 +窄幅 1 +x:1 +正座 1 +x:1 +平行班 1 +x:1 +别别扭扭 1 +x:1 +车桥 1 +x:1 +扫描线 1 +x:1 +褒词 1 +x:1 +样款 1 +x:1 +供用电 1 +x:1 +财政化 1 +x:1 +自律性 1 +x:1 +突厥 1 +x:1 +铺床 1 +x:1 +拉法耶特 1 +x:1 +括 2 +x:2 +坐次 1 +x:1 +音问 1 +x:1 +空间图形 1 +x:1 +连绵不断 1 +x:1 +铺底 1 +x:1 +水旱灾 1 +x:1 +孽 4 +x:4 +大智大慧 1 +x:1 +脊膜 1 +x:1 +简易楼 1 +x:1 +原装货 1 +x:1 +放电 1 +x:1 +后 9533 +x:9533 +难侨 1 +x:1 +言情戏 1 +x:1 +洪门 1 +x:1 +上年末 1 +x:1 +黑账 1 +x:1 +为伴 1 +x:1 +甜角 1 +x:1 +偷骗税 1 +x:1 +求官者 1 +x:1 +双重性 1 +x:1 +为伍 1 +x:1 +囤积居奇 1 +x:1 +与世浮沉 1 +x:1 +烈女 1 +x:1 +妙趣 1 +x:1 +雪洗 1 +x:1 +金丝 1 +x:1 +主裁 1 +x:1 +沉陷 1 +x:1 +建材城 1 +x:1 +推涛作浪 1 +x:1 +棉织 1 +x:1 +恭贺新禧 1 +x:1 +正当 1 +x:1 +储备率 1 +x:1 +修女 1 +x:1 +狭小 1 +x:1 +七月 1 +x:1 +修复 1 +x:1 +焦油 1 +x:1 +雪海 1 +x:1 +铺张 1 +x:1 +正弦 1 +x:1 +附梁 1 +x:1 +金乡 1 +x:1 +鹿邑县 1 +x:1 +邳州市 1 +x:1 +毒计 1 +x:1 +强调 1 +x:1 +党外人士 1 +x:1 +船级社 1 +x:1 +志愿团 1 +x:1 +忘年之交 1 +x:1 +辽阳市 1 +x:1 +上等货 1 +x:1 +订户 1 +x:1 +正式 1 +x:1 +难保 1 +x:1 +小木车 1 +x:1 +铺开 1 +x:1 +趋于 1 +x:1 +算盘子儿 1 +x:1 +做出 1 +x:1 +哥德兰岛 1 +x:1 +为何 1 +x:1 +一边倒 1 +x:1 +产官学 1 +x:1 +华中 1 +x:1 +献血法 1 +x:1 +定准 1 +x:1 +名物 1 +x:1 +总体部 1 +x:1 +强击 1 +x:1 +近在咫尺 1 +x:1 +稍顷 1 +x:1 +尾身 1 +x:1 +利雅得 1 +x:1 +指日可待 1 +x:1 +寻觅 1 +x:1 +沉雄 1 +x:1 +唯一 1 +x:1 +互助社 1 +x:1 +名片 1 +x:1 +奄奄一息 1 +x:1 +准印证 1 +x:1 +名牌 1 +x:1 +沉雷 1 +x:1 +放疗 1 +x:1 +学友会 1 +x:1 +并行机 1 +x:1 +农民画 1 +x:1 +采矿者 1 +x:1 +和会 1 +x:1 +贷存 1 +x:1 +堕落 1 +x:1 +曼谷 1 +x:1 +前列腺癌 1 +x:1 +金价 1 +x:1 +死得其所 1 +x:1 +专户 1 +x:1 +诫勉 1 +x:1 +林荫处 1 +x:1 +中韩镇 1 +x:1 +弟子 1 +x:1 +金代 1 +x:1 +研究型 1 +x:1 +中上 1 +x:1 +风头 1 +x:1 +六三年 1 +x:1 +黑路 1 +x:1 +此风 1 +x:1 +依山临海 1 +x:1 +蒙学 1 +x:1 +巨 39 +x:39 +工房 1 +x:1 +鲁 186 +x:186 +烹调师 1 +x:1 +色素 1 +x:1 +三环桥 1 +x:1 +姨婆 1 +x:1 +头晕眼花 1 +x:1 +突兀 1 +x:1 +啪达 1 +x:1 +打马虎眼 1 +x:1 +温泉 1 +x:1 +八音盒 1 +x:1 +谋财害命 1 +x:1 +欧山楂 1 +x:1 +前邵 1 +x:1 +色织 1 +x:1 +永平镇 1 +x:1 +鹤望兰 1 +x:1 +橡塑厂 1 +x:1 +疲于 1 +x:1 +耐温 1 +x:1 +地方报 1 +x:1 +连史室 1 +x:1 +电子城 1 +x:1 +梅利达市 1 +x:1 +突入 1 +x:1 +选票 1 +x:1 +胡枝子 1 +x:1 +制服呢 1 +x:1 +鹰式 1 +x:1 +州政府 1 +x:1 +姨妈 1 +x:1 +甲级 1 +x:1 +判罚 1 +x:1 +铺展 1 +x:1 +令人生畏 1 +x:1 +件次 1 +x:1 +人情世故 1 +x:1 +招待所 1 +x:1 +侯月 1 +x:1 +前部 1 +x:1 +银鬃 1 +x:1 +募捐箱 1 +x:1 +非商品 1 +x:1 +贷款者 1 +x:1 +大营门 1 +x:1 +铺就 1 +x:1 +清供 1 +x:1 +辣手 1 +x:1 +初级类 1 +x:1 +处理价 1 +x:1 +冤枉 1 +x:1 +裂变 1 +x:1 +诱 4 +x:4 +大田县 1 +x:1 +愚人 1 +x:1 +砂石 1 +x:1 +定制 1 +x:1 +砂矿 1 +x:1 +缺失 1 +x:1 +果汁厂 1 +x:1 +夏威夷果 1 +x:1 +哥俩 1 +x:1 +青山堡村 1 +x:1 +喉结 1 +x:1 +蹬立 1 +x:1 +短途 1 +x:1 +糟蹋 1 +x:1 +债权额 1 +x:1 +雄心壮志 1 +x:1 +利通社 1 +x:1 +旱育稀植 1 +x:1 +蒙蒙亮 1 +x:1 +投诉者 1 +x:1 +小农经济 1 +x:1 +敬语 1 +x:1 +面具舞 1 +x:1 +侦察 1 +x:1 +前途 1 +x:1 +莫索湾 1 +x:1 +地方戏 1 +x:1 +砂眼 1 +x:1 +窃窃私语 1 +x:1 +突击 1 +x:1 +突出 1 +x:1 +做到 1 +x:1 +步子 1 +x:1 +义赛 1 +x:1 +嗓子眼 1 +x:1 +曲曲弯弯 1 +x:1 +左图 1 +x:1 +司机 1 +x:1 +密植园 1 +x:1 +短道 1 +x:1 +定力 1 +x:1 +娥眉 1 +x:1 +疲乏 1 +x:1 +罗家镇 1 +x:1 +重开 1 +x:1 +丢三忘四 1 +x:1 +辽朝 1 +x:1 +药饵 1 +x:1 +控制符 1 +x:1 +音韵 1 +x:1 +没心没肺 1 +x:1 +断电 1 +x:1 +定势 1 +x:1 +活质 1 +x:1 +边民 1 +x:1 +襄汾 1 +x:1 +保长 1 +x:1 +驰道 1 +x:1 +隐约可见 1 +x:1 +放眼 1 +x:1 +驸马 1 +x:1 +铁蚕豆 1 +x:1 +刺激剂 1 +x:1 +篱障 1 +x:1 +炸伤 1 +x:1 +利息差 1 +x:1 +继任人 1 +x:1 +明特优新 1 +x:1 +加速度 1 +x:1 +定单 1 +x:1 +空天飞机 1 +x:1 +妆 3 +x:3 +公使衔 1 +x:1 +水彩画 1 +x:1 +闽清县 1 +x:1 +矿产学 1 +x:1 +遗罪 1 +x:1 +木棉树 1 +x:1 +购物券 1 +x:1 +邪乎 1 +x:1 +小叔子 1 +x:1 +风寒 1 +x:1 +京戏票 1 +x:1 +巴拉圭籍 1 +x:1 +无功而返 1 +x:1 +随笔 1 +x:1 +美食展 1 +x:1 +草窝棚 1 +x:1 +动感画 1 +x:1 +一视同仁 1 +x:1 +右手 1 +x:1 +柔姿舞 1 +x:1 +葫芦池 1 +x:1 +篮板王 1 +x:1 +风害 1 +x:1 +肇事 1 +x:1 +台东区 1 +x:1 +自给 1 +x:1 +点头之交 1 +x:1 +大风村 1 +x:1 +伤残人员 1 +x:1 +各类 1 +x:1 +珐琅 1 +x:1 +假丑恶 1 +x:1 +遗缺 1 +x:1 +驱虫药 1 +x:1 +哥们 1 +x:1 +民航界 1 +x:1 +至矣尚矣 1 +x:1 +音障 1 +x:1 +进料加工 1 +x:1 +耳子 1 +x:1 +劳改犯 1 +x:1 +选择题 1 +x:1 +耳孔 1 +x:1 +两相情愿 1 +x:1 +车次 1 +x:1 +转赴 1 +x:1 +甄拔 1 +x:1 +醇香 1 +x:1 +榜 26 +x:26 +山 569 +x:569 +菏泽市 1 +x:1 +发言台 1 +x:1 +谨小慎微 1 +x:1 +七日 1 +x:1 +遥祝 1 +x:1 +代总理 1 +x:1 +处方 1 +x:1 +清水笋 1 +x:1 +七时 1 +x:1 +草莓棚 1 +x:1 +万载县 1 +x:1 +言说 1 +x:1 +宣武 1 +x:1 +音韵学 1 +x:1 +顺德县 1 +x:1 +样样 1 +x:1 +断面图 1 +x:1 +录像厅 1 +x:1 +整顿 1 +x:1 +叠 28 +x:28 +圣保罗市 1 +x:1 +诡诈 1 +x:1 +臂弯 1 +x:1 +崔嵬 1 +x:1 +罢手 1 +x:1 +官场 1 +x:1 +定县 1 +x:1 +牛尾巴 1 +x:1 +电影史 1 +x:1 +自检 1 +x:1 +自寻烦恼 1 +x:1 +烈属 1 +x:1 +如鸟兽散 1 +x:1 +阀 2 +x:2 +念及 1 +x:1 +左倾 1 +x:1 +官僚 1 +x:1 +抻面 1 +x:1 +定员 1 +x:1 +二甲苯 1 +x:1 +佛拉芒 1 +x:1 +挚 1 +x:1 +荷方 1 +x:1 +必要产品 1 +x:1 +张掖市 1 +x:1 +听讲者 1 +x:1 +座 1115 +x:1115 +辩证逻辑 1 +x:1 +蚝油 1 +x:1 +退二进三 1 +x:1 +洋镐 1 +x:1 +分骨 1 +x:1 +示范课 1 +x:1 +极权主义 1 +x:1 +茴香豆 1 +x:1 +就职 1 +x:1 +定名 1 +x:1 +制冷机 1 +x:1 +喧腾 1 +x:1 +奸妇 1 +x:1 +接力棒 1 +x:1 +处所 1 +x:1 +循环往复 1 +x:1 +首日 1 +x:1 +声泪俱下 1 +x:1 +速效肥料 1 +x:1 +创造者 1 +x:1 +混乱 1 +x:1 +次区域 1 +x:1 +需要量 1 +x:1 +优越 1 +x:1 +定向 1 +x:1 +桑塔木 1 +x:1 +出资额 1 +x:1 +电影周 1 +x:1 +公映 1 +x:1 +肺腑之言 1 +x:1 +弧度 1 +x:1 +黑油山 1 +x:1 +拆息 1 +x:1 +运输处 1 +x:1 +儋州 1 +x:1 +突地 1 +x:1 +土地爷 1 +x:1 +匾牌 1 +x:1 +峻 18 +x:18 +集资房 1 +x:1 +风岗 1 +x:1 +超短波 1 +x:1 +绿山富民 1 +x:1 +冈上 1 +x:1 +赎买 1 +x:1 +空白点 1 +x:1 +耳屏 1 +x:1 +微生物 1 +x:1 +放炮 1 +x:1 +紧急状态 1 +x:1 +涝洼塘 1 +x:1 +杨舍镇 1 +x:1 +称得上 1 +x:1 +雅训 1 +x:1 +右方 1 +x:1 +四点钟 1 +x:1 +西半球 1 +x:1 +军字号 1 +x:1 +美食家 1 +x:1 +混事 1 +x:1 +洪道 1 +x:1 +千篇一律 1 +x:1 +主治医生 1 +x:1 +噪音区 1 +x:1 +社会效益 1 +x:1 +宜林地 1 +x:1 +网上 1 +x:1 +飘飘扬扬 1 +x:1 +跨鹤西游 1 +x:1 +应者 1 +x:1 +莲湖 1 +x:1 +害兽 1 +x:1 +可变项 1 +x:1 +前院 1 +x:1 +自卑 1 +x:1 +美人鱼 1 +x:1 +余绪 1 +x:1 +音量 1 +x:1 +放热 1 +x:1 +锁边机 1 +x:1 +官倒 1 +x:1 +座位 1 +x:1 +篮板球 1 +x:1 +摩天 1 +x:1 +首群 1 +x:1 +砧子 1 +x:1 +思潮澎湃 1 +x:1 +黏着语 1 +x:1 +动脑 1 +x:1 +雨湖 1 +x:1 +风尘 1 +x:1 +风尚 1 +x:1 +动脉 1 +x:1 +闽侯县 1 +x:1 +自找苦吃 1 +x:1 +三翻四复 1 +x:1 +尾评 1 +x:1 +综 6 +x:6 +利用者 1 +x:1 +上座部 1 +x:1 +音速 1 +x:1 +动能 1 +x:1 +幽丽 1 +x:1 +名目 1 +x:1 +口罩 1 +x:1 +擂鼓墩 1 +x:1 +库底子 1 +x:1 +金融股 1 +x:1 +深耕 1 +x:1 +伪装物 1 +x:1 +死记硬背 1 +x:1 +顺风吹火 1 +x:1 +等外品 1 +x:1 +附注 1 +x:1 +遗祠 1 +x:1 +霖雨 1 +x:1 +跆拳道 1 +x:1 +肉干 1 +x:1 +草棚席 1 +x:1 +宽泛 1 +x:1 +本月底 1 +x:1 +洪量 1 +x:1 +蔫头蔫脑 1 +x:1 +买断式 1 +x:1 +铺子 1 +x:1 +遗祸 1 +x:1 +乔装打扮 1 +x:1 +丫杈 1 +x:1 +地热能 1 +x:1 +节日性 1 +x:1 +地方时 1 +x:1 +官军 1 +x:1 +揭发 1 +x:1 +毒辣 1 +x:1 +扫尾 1 +x:1 +援救 1 +x:1 +饮食业 1 +x:1 +核黄素 1 +x:1 +渔灯谣 1 +x:1 +紫藤 1 +x:1 +工资款 1 +x:1 +笼而统之 1 +x:1 +旅顺口 1 +x:1 +弟弟 1 +x:1 +帮办 1 +x:1 +燕鱼 1 +x:1 +步履 1 +x:1 +超导体 1 +x:1 +追索 1 +x:1 +丛生 1 +x:1 +滑雪赛 1 +x:1 +相对主义 1 +x:1 +丝 73 +x:73 +飘飘忽忽 1 +x:1 +臭氧层 1 +x:1 +洋铁 1 +x:1 +粽子 1 +x:1 +低音炮 1 +x:1 +商务 1 +x:1 +箱位 1 +x:1 +来水量 1 +x:1 +报国情 1 +x:1 +木已成舟 1 +x:1 +突围 1 +x:1 +嗜食 1 +x:1 +字链 1 +x:1 +牵强附会 1 +x:1 +总司令 1 +x:1 +金銮宝座 1 +x:1 +官兵 1 +x:1 +梯恩梯 1 +x:1 +老年性 1 +x:1 +有扬有弃 1 +x:1 +前面 1 +x:1 +顺店乡 1 +x:1 +肉库 1 +x:1 +言情片 1 +x:1 +肉店 1 +x:1 +磨砂玻璃 1 +x:1 +洋钱 1 +x:1 +小船浜 1 +x:1 +边款 1 +x:1 +四环素 1 +x:1 +自满 1 +x:1 +一系列 1 +x:1 +朔州 1 +x:1 +正安 1 +x:1 +月黑风高 1 +x:1 +朱坑乡 1 +x:1 +堆石坝 1 +x:1 +首级 1 +x:1 +点多面广 1 +x:1 +呆傻 1 +x:1 +车流 1 +x:1 +浓缩铀 1 +x:1 +官儿 1 +x:1 +笔名 1 +x:1 +本末 1 +x:1 +正宗 1 +x:1 +横冲直撞 1 +x:1 +橡胶厂 1 +x:1 +洋面 1 +x:1 +弹簧秤 1 +x:1 +左券 1 +x:1 +习用 1 +x:1 +稀里糊涂 1 +x:1 +官道沟 1 +x:1 +汽机 1 +x:1 +北流江 1 +x:1 +担负 1 +x:1 +开具 1 +x:1 +焦比 1 +x:1 +崽子 1 +x:1 +开幕会 1 +x:1 +F 34 +x:34 +边检 1 +x:1 +走样儿 1 +x:1 +新新旧旧 1 +x:1 +三九天 1 +x:1 +颠来倒去 1 +x:1 +鹦鹉热 1 +x:1 +论说文 1 +x:1 +书者 1 +x:1 +痴迷者 1 +x:1 +声名远播 1 +x:1 +记录片 1 +x:1 +二三月 1 +x:1 +纵目四顾 1 +x:1 +风度 1 +x:1 +紫胶虫 1 +x:1 +筠山 1 +x:1 +桓仁县 1 +x:1 +区域网 1 +x:1 +互助组 1 +x:1 +欺人太甚 1 +x:1 +放牧 1 +x:1 +驯熟 1 +x:1 +放牛 1 +x:1 +老处女 1 +x:1 +彦 34 +x:34 +氤氲 1 +x:1 +包产 1 +x:1 +电子厂 1 +x:1 +津津乐道 1 +x:1 +瞿家村 1 +x:1 +禾家村 1 +x:1 +遗稿 1 +x:1 +雪橇 1 +x:1 +涵管 1 +x:1 +揩油 1 +x:1 +信口 1 +x:1 +株数 1 +x:1 +说道 1 +x:1 +雨水 1 +x:1 +末代 1 +x:1 +指指点点 1 +x:1 +信史 1 +x:1 +沉重 1 +x:1 +信号 1 +x:1 +别有用心 1 +x:1 +广华堂 1 +x:1 +风干 1 +x:1 +同等 1 +x:1 +惶恐不安 1 +x:1 +硝酸钾 1 +x:1 +园林化 1 +x:1 +庸碌 1 +x:1 +救援款 1 +x:1 +躺椅 1 +x:1 +放射性 1 +x:1 +核桃林 1 +x:1 +减免税 1 +x:1 +边框 1 +x:1 +漱 1 +x:1 +诬陷 1 +x:1 +修建 1 +x:1 +字音 1 +x:1 +广电厅 1 +x:1 +多隆乡 1 +x:1 +早餐点 1 +x:1 +枝枝叶叶 1 +x:1 +元字符 1 +x:1 +各种 1 +x:1 +收费站卡 1 +x:1 +好八连 1 +x:1 +生产总值 1 +x:1 +风带 1 +x:1 +雅观 1 +x:1 +沉醉 1 +x:1 +常驻 1 +x:1 +尘埃传染 1 +x:1 +减污 1 +x:1 +敬辞 1 +x:1 +日内瓦 1 +x:1 +机电票 1 +x:1 +名画 1 +x:1 +唱片业 1 +x:1 +佛教史 1 +x:1 +管材业 1 +x:1 +风帆 1 +x:1 +起诉状 1 +x:1 +正墙 1 +x:1 +焚稿 1 +x:1 +莲池 1 +x:1 +同义语 1 +x:1 +电子化 1 +x:1 +草丰林长 1 +x:1 +伪标 1 +x:1 +烈度 1 +x:1 +步弓 1 +x:1 +毒谋 1 +x:1 +协约 1 +x:1 +警告信 1 +x:1 +锌 17 +x:17 +焚书坑儒 1 +x:1 +递交 1 +x:1 +三五九旅 1 +x:1 +名瓷 1 +x:1 +分馆 1 +x:1 +恶竹 1 +x:1 +供 351 +x:351 +神魂 1 +x:1 +拉帮结派 1 +x:1 +评剧院 1 +x:1 +包修 1 +x:1 +簇 11 +x:11 +广西团 1 +x:1 +妙计 1 +x:1 +欧佩克 1 +x:1 +窗明几净 1 +x:1 +初级社 1 +x:1 +官司 1 +x:1 +非斯 1 +x:1 +泱泱大国 1 +x:1 +漆黑一团 1 +x:1 +儿童片 1 +x:1 +正太 1 +x:1 +游兴 1 +x:1 +插队落户 1 +x:1 +移动局 1 +x:1 +妙诀 1 +x:1 +乌黑 1 +x:1 +响 216 +x:216 +前门 1 +x:1 +低级 1 +x:1 +官厅 1 +x:1 +人口数 1 +x:1 +好转率 1 +x:1 +铺头 1 +x:1 +匙子 1 +x:1 +岔口 1 +x:1 +妙语 1 +x:1 +争夺者 1 +x:1 +器乐 1 +x:1 +熨斗 1 +x:1 +张家口 1 +x:1 +巢湖 1 +x:1 +控制线 1 +x:1 +拨号盘 1 +x:1 +社发 1 +x:1 +奢糜 1 +x:1 +纲目 1 +x:1 +直管型 1 +x:1 +断点 1 +x:1 +姿 17 +x:17 +字集 1 +x:1 +蒂 1 +x:1 +检验章 1 +x:1 +地面站 1 +x:1 +圆点 1 +x:1 +湿地 1 +x:1 +示范街 1 +x:1 +康庄 1 +x:1 +沉郁 1 +x:1 +有所作为 1 +x:1 +公家人 1 +x:1 +落落寡合 1 +x:1 +步幅 1 +x:1 +三心二意 1 +x:1 +前锋 1 +x:1 +毒资 1 +x:1 +责任心 1 +x:1 +先墓 1 +x:1 +官印 1 +x:1 +三剑客 1 +x:1 +集邮家 1 +x:1 +修律 1 +x:1 +定型 1 +x:1 +寒酸 1 +x:1 +河沿庄村 1 +x:1 +器件 1 +x:1 +名琴 1 +x:1 +包伙 1 +x:1 +义行 1 +x:1 +多经林 1 +x:1 +舍车保帅 1 +x:1 +官化 1 +x:1 +毒贩 1 +x:1 +化入 1 +x:1 +沃田 1 +x:1 +两下子 1 +x:1 +正如 1 +x:1 +无酒精 1 +x:1 +黑话 1 +x:1 +上风 1 +x:1 +辽阳县 1 +x:1 +光谱 1 +x:1 +干白 1 +x:1 +喉管 1 +x:1 +喜唱乐听 1 +x:1 +饿 69 +x:69 +北角 1 +x:1 +分隔 1 +x:1 +针鼻 1 +x:1 +洼里乡 1 +x:1 +万溪冲 1 +x:1 +谎报 1 +x:1 +各省 1 +x:1 +揭底 1 +x:1 +雨披 1 +x:1 +进货关 1 +x:1 +氯化镁 1 +x:1 +鲸塘镇 1 +x:1 +娱乐城 1 +x:1 +非生产性 1 +x:1 +穿缝透窗 1 +x:1 +面带微笑 1 +x:1 +芒崖 1 +x:1 +风景林 1 +x:1 +湖沼 1 +x:1 +东团堡乡 1 +x:1 +短骨 1 +x:1 +微雕 1 +x:1 +头痛 1 +x:1 +记录簿 1 +x:1 +专销点 1 +x:1 +肢体 1 +x:1 +丝织版 1 +x:1 +自持 1 +x:1 +盐湖城 1 +x:1 +憨厚 1 +x:1 +归西 1 +x:1 +圣多明各 1 +x:1 +栓皮栎 1 +x:1 +林副产品 1 +x:1 +凑 76 +x:76 +下跌 1 +x:1 +广谋从众 1 +x:1 +二军大 1 +x:1 +贵省 1 +x:1 +护路林 1 +x:1 +氯化锌 1 +x:1 +苦酒 1 +x:1 +远光灯 1 +x:1 +代常委 1 +x:1 +狗叫屯 1 +x:1 +风雨如晦 1 +x:1 +故技重演 1 +x:1 +总装备部 1 +x:1 +奔突 1 +x:1 +留客 1 +x:1 +宽慰 1 +x:1 +步入 1 +x:1 +非议 1 +x:1 +分队 1 +x:1 +中医药 1 +x:1 +队服 1 +x:1 +揭帖 1 +x:1 +报道面 1 +x:1 +步兵 1 +x:1 +联欢节 1 +x:1 +一蹴而就 1 +x:1 +内疚感 1 +x:1 +分阴 1 +x:1 +盆地 1 +x:1 +风偏 1 +x:1 +羊角风 1 +x:1 +八·一三 1 +x:1 +谈判会 1 +x:1 +财政学 1 +x:1 +组织科 1 +x:1 +移锭 1 +x:1 +集邮品 1 +x:1 +有口无心 1 +x:1 +美颜 1 +x:1 +史学观点 1 +x:1 +先进者 1 +x:1 +揭幕 1 +x:1 +美食城 1 +x:1 +前驱 1 +x:1 +摹仿 1 +x:1 +栗子 1 +x:1 +碱金属 1 +x:1 +向例 1 +x:1 +紫薇 1 +x:1 +槐花蜜 1 +x:1 +祝家山村 1 +x:1 +中间派 1 +x:1 +中轴线 1 +x:1 +心里有数 1 +x:1 +县行 1 +x:1 +衫 2 +x:2 +前哨 1 +x:1 +非胰岛素 1 +x:1 +名笔 1 +x:1 +分院 1 +x:1 +凹镜 1 +x:1 +苦英英 1 +x:1 +沸沸扬扬 1 +x:1 +锁眼 1 +x:1 +金柜山 1 +x:1 +梁 525 +x:525 +曲靖市 1 +x:1 +名章 1 +x:1 +谈判人 1 +x:1 +山顶洞人 1 +x:1 +石浦港 1 +x:1 +炼渣 1 +x:1 +砂粒 1 +x:1 +盘桓 1 +x:1 +断绝 1 +x:1 +偷抗税 1 +x:1 +胡说八道 1 +x:1 +固县 1 +x:1 +风凉 1 +x:1 +源源 1 +x:1 +氧化铁皮 1 +x:1 +官差 1 +x:1 +矿容 1 +x:1 +断续 1 +x:1 +自成 1 +x:1 +自我 1 +x:1 +单性 1 +x:1 +财神老爷 1 +x:1 +修养 1 +x:1 +正字 1 +x:1 +毒菌 1 +x:1 +辣椒 1 +x:1 +龙泉驿 1 +x:1 +禽蛋 1 +x:1 +司法 1 +x:1 +样报 1 +x:1 +正在 1 +x:1 +辽河 1 +x:1 +敬老 1 +x:1 +肉刑 1 +x:1 +集体经济 1 +x:1 +扬州市 1 +x:1 +饮料 1 +x:1 +砂糖 1 +x:1 +沸腾 1 +x:1 +荆州 1 +x:1 +浓墨重彩 1 +x:1 +彭山县 1 +x:1 +风冷 1 +x:1 +蓝田猿人 1 +x:1 +以刚济柔 1 +x:1 +选稿 1 +x:1 +主权国 1 +x:1 +拉萨河畔 1 +x:1 +元煤 1 +x:1 +蜀山 1 +x:1 +名窑 1 +x:1 +定夺 1 +x:1 +忌 41 +x:41 +小金库 1 +x:1 +之江 1 +x:1 +审议会 1 +x:1 +站柜 1 +x:1 +沉默 1 +x:1 +揭开 1 +x:1 +韭黄 1 +x:1 +作家班 1 +x:1 +无可非议 1 +x:1 +蚊 5 +x:5 +尾蚴 1 +x:1 +耳光 1 +x:1 +不世之功 1 +x:1 +重任在肩 1 +x:1 +三庄乡 1 +x:1 +毒药 1 +x:1 +女童班 1 +x:1 +宽恕 1 +x:1 +附息 1 +x:1 +氯化银 1 +x:1 +泾阳县 1 +x:1 +圮 1 +x:1 +阿拉德市 1 +x:1 +惑人耳目 1 +x:1 +仕族 1 +x:1 +竞拍声 1 +x:1 +扎根绳 1 +x:1 +还原论 1 +x:1 +毒草 1 +x:1 +起名儿 1 +x:1 +黄水疮 1 +x:1 +铺垫 1 +x:1 +驰骛 1 +x:1 +黑藻 1 +x:1 +氯化钙 1 +x:1 +雌激素 1 +x:1 +韬略 1 +x:1 +陕 46 +x:46 +字频 1 +x:1 +三电办 1 +x:1 +驰骋 1 +x:1 +年初四 1 +x:1 +束 57 +x:57 +焉耆 1 +x:1 +得法 1 +x:1 +住宅业 1 +x:1 +艳丽 1 +x:1 +自拔 1 +x:1 +嗨 6 +x:6 +级距 1 +x:1 +氯化钾 1 +x:1 +讲话声 1 +x:1 +首犯 1 +x:1 +油印机 1 +x:1 +梦笔生花 1 +x:1 +广阔无垠 1 +x:1 +大堡镇 1 +x:1 +演习班 1 +x:1 +添麻烦 1 +x:1 +墓坑 1 +x:1 +辍学 1 +x:1 +涅 3 +x:3 +人山人海 1 +x:1 +酩浆 1 +x:1 +分钟 1 +x:1 +扣襻 1 +x:1 +儒 14 +x:14 +名称 1 +x:1 +定婚 1 +x:1 +矽钢 1 +x:1 +无国界 1 +x:1 +颐和园 1 +x:1 +贷款行 1 +x:1 +分钱 1 +x:1 +修剪 1 +x:1 +自感 1 +x:1 +色盲 1 +x:1 +审判长 1 +x:1 +色相 1 +x:1 +车技 1 +x:1 +犄角之势 1 +x:1 +迅疾 1 +x:1 +翡翠鱼 1 +x:1 +记里鼓车 1 +x:1 +随风倒 1 +x:1 +车把 1 +x:1 +动迁 1 +x:1 +家具厂 1 +x:1 +实习室 1 +x:1 +重印率 1 +x:1 +各界 1 +x:1 +责任制 1 +x:1 +简易房 1 +x:1 +市里 1 +x:1 +日上三竿 1 +x:1 +间不容发 1 +x:1 +自慰 1 +x:1 +控制率 1 +x:1 +官庄 1 +x:1 +焚毁 1 +x:1 +象牙 1 +x:1 +雪景 1 +x:1 +喻家湾村 1 +x:1 +官府 1 +x:1 +风势 1 +x:1 +精打细算 1 +x:1 +黑里寨镇 1 +x:1 +左右逢源 1 +x:1 +焦枯 1 +x:1 +简分数 1 +x:1 +油乎乎 1 +x:1 +正名 1 +x:1 +宪章派 1 +x:1 +矩 2 +x:2 +救助卡 1 +x:1 +机床厂 1 +x:1 +敬茶 1 +x:1 +邻省 1 +x:1 +风力 1 +x:1 +常设 1 +x:1 +盥洗 1 +x:1 +漯河 1 +x:1 +动辄 1 +x:1 +考级制 1 +x:1 +静脉 1 +x:1 +铁轨 1 +x:1 +炼液 1 +x:1 +姨儿 1 +x:1 +阿的里海 1 +x:1 +迷你型 1 +x:1 +救命卡 1 +x:1 +反映论 1 +x:1 +放纵 1 +x:1 +劐 1 +x:1 +动轮 1 +x:1 +放红 1 +x:1 +财政奖 1 +x:1 +安顺市 1 +x:1 +痛痒相关 1 +x:1 +扑克牌 1 +x:1 +车战 1 +x:1 +正品 1 +x:1 +乌鸡 1 +x:1 +救援机 1 +x:1 +医疗队 1 +x:1 +三叶虫 1 +x:1 +处治 1 +x:1 +纵剖面 1 +x:1 +监护费 1 +x:1 +真心诚意 1 +x:1 +蝉 3 +x:3 +凹面 1 +x:1 +莳花种草 1 +x:1 +占道费 1 +x:1 +互为因果 1 +x:1 +奉行 1 +x:1 +益处 1 +x:1 +场合 1 +x:1 +扛 58 +x:58 +前项 1 +x:1 +下疳 1 +x:1 +务工人员 1 +x:1 +解放区 1 +x:1 +云溪区 1 +x:1 +信徒 1 +x:1 +会话式 1 +x:1 +挂钩点 1 +x:1 +肉冠 1 +x:1 +车手 1 +x:1 +脸蛋儿 1 +x:1 +惠农县 1 +x:1 +涵盖 1 +x:1 +做官 1 +x:1 +定子 1 +x:1 +秦始皇帝 1 +x:1 +念奴娇 1 +x:1 +骡 1 +x:1 +打印稿 1 +x:1 +放缓 1 +x:1 +做客 1 +x:1 +踮 1 +x:1 +九九 1 +x:1 +内弟 1 +x:1 +芒市 1 +x:1 +群体组 1 +x:1 +兆赫 1 +x:1 +砂纸 1 +x:1 +咀嚼 1 +x:1 +丘布特河 1 +x:1 +呆帐 1 +x:1 +摔跤 1 +x:1 +雪板 1 +x:1 +走街串户 1 +x:1 +高田乡 1 +x:1 +孙公司 1 +x:1 +毒物 1 +x:1 +老党员 1 +x:1 +动身 1 +x:1 +放置 1 +x:1 +虫吃牙 1 +x:1 +风压 1 +x:1 +荡妇 1 +x:1 +联系箱 1 +x:1 +雪杖 1 +x:1 +唾手可得 1 +x:1 +湿寒 1 +x:1 +首汽 1 +x:1 +人情味 1 +x:1 +訾 3 +x:3 +官德 1 +x:1 +集邮圈 1 +x:1 +偿愿 1 +x:1 +氰化 1 +x:1 +波光潋滟 1 +x:1 +火车头 1 +x:1 +毒腺 1 +x:1 +炼油 1 +x:1 +煞风景 1 +x:1 +引人瞩目 1 +x:1 +密封环 1 +x:1 +见诸行动 1 +x:1 +老豆腐 1 +x:1 +瞬时 1 +x:1 +左徒 1 +x:1 +荒路 1 +x:1 +骑马人 1 +x:1 +风华 1 +x:1 +相容性 1 +x:1 +摁扣儿 1 +x:1 +生俘 1 +x:1 +电影室 1 +x:1 +亮 283 +x:283 +病故 1 +x:1 +放羊 1 +x:1 +东跑西颠 1 +x:1 +雨意 1 +x:1 +修史 1 +x:1 +砚山 1 +x:1 +岔开 1 +x:1 +电影家 1 +x:1 +铁桥镇 1 +x:1 +整年累月 1 +x:1 +卫生系 1 +x:1 +拜托 1 +x:1 +雪柳 1 +x:1 +承建商 1 +x:1 +冬暖夏凉 1 +x:1 +加速器 1 +x:1 +市道 1 +x:1 +恩情郡 1 +x:1 +弟兄 1 +x:1 +凹陷 1 +x:1 +骤 20 +x:20 +雪柜 1 +x:1 +小两口 1 +x:1 +光辐射 1 +x:1 +过氧化物 1 +x:1 +车损 1 +x:1 +涝洼地 1 +x:1 +常青 1 +x:1 +否认 1 +x:1 +成千上万 1 +x:1 +风化 1 +x:1 +宽旷 1 +x:1 +排山倒海 1 +x:1 +牛年马月 1 +x:1 +人贩子 1 +x:1 +总理级 1 +x:1 +非源 1 +x:1 +定居 1 +x:1 +毒蛾 1 +x:1 +定局 1 +x:1 +件数 1 +x:1 +四方面军 1 +x:1 +信女 1 +x:1 +万古留辉 1 +x:1 +人情化 1 +x:1 +耐性 1 +x:1 +宝玉 1 +x:1 +粉墨登场 1 +x:1 +正割 1 +x:1 +峡湾 1 +x:1 +借阅部 1 +x:1 +右派 1 +x:1 +国安队 1 +x:1 +信奉 1 +x:1 +剑阁县 1 +x:1 +焚烧 1 +x:1 +曲棍球队 1 +x:1 +随意化 1 +x:1 +㧟 1 +x:1 +拍手叫好 1 +x:1 +断简 1 +x:1 +验收关 1 +x:1 +电影局 1 +x:1 +多面手 1 +x:1 +莎车 1 +x:1 +怒容 1 +x:1 +工作团 1 +x:1 +秉赋 1 +x:1 +附料 1 +x:1 +里里外外 1 +x:1 +伪报 1 +x:1 +舍身取义 1 +x:1 +摘记 1 +x:1 +一揽子 1 +x:1 +此镇 1 +x:1 +今非昔比 1 +x:1 +庇护国 1 +x:1 +乐器室 1 +x:1 +咬紧牙关 1 +x:1 +描述性 1 +x:1 +地主家 1 +x:1 +选择面 1 +x:1 +老前辈 1 +x:1 +自杀 1 +x:1 +遗产地 1 +x:1 +信访室 1 +x:1 +先富 1 +x:1 +接口卡 1 +x:1 +将信将疑 1 +x:1 +互帮互学 1 +x:1 +协作会 1 +x:1 +矿产品 1 +x:1 +七坊镇 1 +x:1 +辣油 1 +x:1 +追究 1 +x:1 +小年夜 1 +x:1 +砂礓 1 +x:1 +样板 1 +x:1 +街谈巷语 1 +x:1 +风味 1 +x:1 +分支部 1 +x:1 +毒虫 1 +x:1 +教唆者 1 +x:1 +湟源县 1 +x:1 +豹头 1 +x:1 +领照费 1 +x:1 +宽敞 1 +x:1 +眷恋 1 +x:1 +毛集镇 1 +x:1 +市侩主义 1 +x:1 +闸北 1 +x:1 +和平鸽 1 +x:1 +华坪县 1 +x:1 +轻元素 1 +x:1 +公交车 1 +x:1 +苦闷 1 +x:1 +瞅瞅 1 +x:1 +样本 1 +x:1 +子母机 1 +x:1 +营运潮 1 +x:1 +雨景 1 +x:1 +喉炎 1 +x:1 +池水 1 +x:1 +哈萨克族 1 +x:1 +定岗 1 +x:1 +样机 1 +x:1 +妇唱夫随 1 +x:1 +市面 1 +x:1 +质感性 1 +x:1 +联系簿 1 +x:1 +当家的 1 +x:1 +磨蹭 1 +x:1 +漫游生物 1 +x:1 +办事 1 +x:1 +题解 1 +x:1 +功利主义 1 +x:1 +风向 1 +x:1 +雇佣军 1 +x:1 +占有权 1 +x:1 +盼 121 +x:121 +高压电 1 +x:1 +汽水 1 +x:1 +算术课 1 +x:1 +步哨 1 +x:1 +老生常谈 1 +x:1 +黑脸 1 +x:1 +驻点 1 +x:1 +志愿书 1 +x:1 +非一流 1 +x:1 +轻重倒置 1 +x:1 +色彩纷呈 1 +x:1 +芝麻 1 +x:1 +场主 1 +x:1 +日照市 1 +x:1 +遗照 1 +x:1 +哀荣 1 +x:1 +正午 1 +x:1 +泰国铢 1 +x:1 +烫伤 1 +x:1 +雨林 1 +x:1 +热力学 1 +x:1 +避雷器 1 +x:1 +一招一式 1 +x:1 +求助人 1 +x:1 +队报 1 +x:1 +跨区机 1 +x:1 +奉还 1 +x:1 +市集 1 +x:1 +右江 1 +x:1 +棚代客车 1 +x:1 +捞取 1 +x:1 +历历在目 1 +x:1 +奉迎 1 +x:1 +工头制 1 +x:1 +丢人 1 +x:1 +童 152 +x:152 +常量 1 +x:1 +做工 1 +x:1 +鸡窝寒 1 +x:1 +务农 1 +x:1 +五金件 1 +x:1 +雅雨堂 1 +x:1 +处死 1 +x:1 +风里来 1 +x:1 +吴令 1 +x:1 +正北 1 +x:1 +围垦区 1 +x:1 +集资款 1 +x:1 +六月六 1 +x:1 +枝繁果盛 1 +x:1 +尾花 1 +x:1 +信士 1 +x:1 +居多 1 +x:1 +汽油 1 +x:1 +地球仪 1 +x:1 +回扣费 1 +x:1 +定州 1 +x:1 +非法所得 1 +x:1 +起诉科 1 +x:1 +利在当代 1 +x:1 +典藏本 1 +x:1 +志在 1 +x:1 +正号 1 +x:1 +三座门 1 +x:1 +预警机 1 +x:1 +晃动 1 +x:1 +正反 1 +x:1 +摩托车厂 1 +x:1 +吴中 1 +x:1 +铺叙 1 +x:1 +首相 1 +x:1 +超极限 1 +x:1 +砂砾 1 +x:1 +姜末 1 +x:1 +交财字 1 +x:1 +制作费 1 +x:1 +畅行无阻 1 +x:1 +投诉车 1 +x:1 +常流水 1 +x:1 +焦急 1 +x:1 +污水源 1 +x:1 +政坛 1 +x:1 +仿若 1 +x:1 +督察处 1 +x:1 +山海关区 1 +x:1 +耕耘 1 +x:1 +说不清楚 1 +x:1 +亲上加亲 1 +x:1 +正厅 1 +x:1 +花色品种 1 +x:1 +如痴如醉 1 +x:1 +轻纺化 1 +x:1 +丢丑 1 +x:1 +耕者 1 +x:1 +秸 1 +x:1 +败仗 1 +x:1 +万佛塔 1 +x:1 +呆子 1 +x:1 +分米波 1 +x:1 +羽毛厂 1 +x:1 +组织罪 1 +x:1 +优惠价 1 +x:1 +储备粮 1 +x:1 +吹吹打打 1 +x:1 +电子对 1 +x:1 +湿度 1 +x:1 +编制数 1 +x:1 +挥之不去 1 +x:1 +非油 1 +x:1 +索 31 +x:31 +如来佛 1 +x:1 +勤政殿 1 +x:1 +四位一体 1 +x:1 +反犹主义 1 +x:1 +记录稿 1 +x:1 +红场 1 +x:1 +动词 1 +x:1 +局限性 1 +x:1 +幕后戏 1 +x:1 +流线型 1 +x:1 +吼 17 +x:17 +峡江 1 +x:1 +放空 1 +x:1 +黑色 1 +x:1 +法事 1 +x:1 +试制品 1 +x:1 +平时 1 +x:1 +非法 1 +x:1 +动议 1 +x:1 +三集中 1 +x:1 +毙 4 +x:4 +臂力 1 +x:1 +升降器 1 +x:1 +前泊林村 1 +x:1 +源东乡 1 +x:1 +哭鼻子 1 +x:1 +联系线 1 +x:1 +自救 1 +x:1 +届中 1 +x:1 +家具城 1 +x:1 +矫饰 1 +x:1 +录像带 1 +x:1 +彻里彻外 1 +x:1 +分部 1 +x:1 +保护膜 1 +x:1 +如临深渊 1 +x:1 +雕镂 1 +x:1 +管弦乐曲 1 +x:1 +电子学 1 +x:1 +宽松 1 +x:1 +自新 1 +x:1 +拜望 1 +x:1 +分送 1 +x:1 +资本额 1 +x:1 +腰鼓舞 1 +x:1 +雨搭 1 +x:1 +栾城镇 1 +x:1 +分选 1 +x:1 +奉调 1 +x:1 +自治体 1 +x:1 +浙江队 1 +x:1 +纠 19 +x:19 +估估 1 +x:1 +自料 1 +x:1 +朗布依埃 1 +x:1 +朱 2093 +x:2093 +赎回 1 +x:1 +交货 1 +x:1 +文锦渡 1 +x:1 +市镇 1 +x:1 +轧钢厂 1 +x:1 +附有 1 +x:1 +五花八门 1 +x:1 +严令 1 +x:1 +官威 1 +x:1 +黄榆树 1 +x:1 +饮酒者 1 +x:1 +总社 1 +x:1 +内分泌 1 +x:1 +苫盖 1 +x:1 +密执安州 1 +x:1 +土少石多 1 +x:1 +尽管如此 1 +x:1 +内当家 1 +x:1 +鸣沙山 1 +x:1 +壤 1 +x:1 +民间艺术 1 +x:1 +抖动 1 +x:1 +信守 1 +x:1 +密封盖 1 +x:1 +珀斯 1 +x:1 +陈列品 1 +x:1 +淋巴细胞 1 +x:1 +艳 57 +x:57 +阴沉沉 1 +x:1 +似血 1 +x:1 +萌发 1 +x:1 +雅致 1 +x:1 +市长 1 +x:1 +跋涉 1 +x:1 +土耳其 1 +x:1 +邂逅 1 +x:1 +摄取量 1 +x:1 +车架 1 +x:1 +黑茶 1 +x:1 +抉 1 +x:1 +塞纳河 1 +x:1 +理发师 1 +x:1 +戈阳县 1 +x:1 +汽渡 1 +x:1 +措大 1 +x:1 +通道式 1 +x:1 +定当 1 +x:1 +云干乡 1 +x:1 +研究员级 1 +x:1 +延津县 1 +x:1 +有时候 1 +x:1 +文山州 1 +x:1 +彩陶文化 1 +x:1 +亚硝化螺 1 +x:1 +估产 1 +x:1 +粤剧 1 +x:1 +人情债 1 +x:1 +焦拉 1 +x:1 +嚼舌 1 +x:1 +义肢 1 +x:1 +管委会 1 +x:1 +纲纪 1 +x:1 +厌烦 1 +x:1 +井底之蛙 1 +x:1 +定式 1 +x:1 +府厅发 1 +x:1 +广学会 1 +x:1 +溃于蚁穴 1 +x:1 +嘎查 1 +x:1 +控制数字 1 +x:1 +前营村 1 +x:1 +双学双比 1 +x:1 +舍己为人 1 +x:1 +元月 1 +x:1 +耳垂 1 +x:1 +日入而息 1 +x:1 +分野 1 +x:1 +分量 1 +x:1 +估价 1 +x:1 +反唇相讥 1 +x:1 +定弦 1 +x:1 +时有发生 1 +x:1 +毛利率 1 +x:1 +官室 1 +x:1 +切尔西队 1 +x:1 +红兮兮 1 +x:1 +耳垢 1 +x:1 +铬镍钢 1 +x:1 +官家 1 +x:1 +矿产地 1 +x:1 +殡仪馆 1 +x:1 +集邮史 1 +x:1 +海枯石烂 1 +x:1 +财政局 1 +x:1 +常备不懈 1 +x:1 +苦难 1 +x:1 +结案率 1 +x:1 +肉品 1 +x:1 +官子 1 +x:1 +视网膜 1 +x:1 +正凶 1 +x:1 +厚古薄今 1 +x:1 +鹁鸠 1 +x:1 +青铜峡市 1 +x:1 +写稿人 1 +x:1 +千花竞秀 1 +x:1 +洪魔 1 +x:1 +非洲 1 +x:1 +鹁鸪 1 +x:1 +不知不觉 1 +x:1 +寻亲访友 1 +x:1 +风成于上 1 +x:1 +耍手段 1 +x:1 +凑份子 1 +x:1 +耳坠 1 +x:1 +鹁鸽 1 +x:1 +核计划 1 +x:1 +正月十三 1 +x:1 +音高 1 +x:1 +独到 1 +x:1 +定律 1 +x:1 +掩饰 1 +x:1 +资费 1 +x:1 +箭在弦上 1 +x:1 +车条 1 +x:1 +成交额 1 +x:1 +苦雨 1 +x:1 +模压模 1 +x:1 +泰国队 1 +x:1 +分配 1 +x:1 +恒星级 1 +x:1 +风圈 1 +x:1 +大黄山 1 +x:1 +妙药 1 +x:1 +正册 1 +x:1 +真抓实干 1 +x:1 +坎大哈 1 +x:1 +半途而废 1 +x:1 +岔子 1 +x:1 +民众党 1 +x:1 +行政区域 1 +x:1 +风土 1 +x:1 +奉赠 1 +x:1 +胆固醇 1 +x:1 +酿 16 +x:16 +碳酸钠 1 +x:1 +碳酸钡 1 +x:1 +剔出 1 +x:1 +潞城 1 +x:1 +五金厂 1 +x:1 +弊 19 +x:19 +正书 1 +x:1 +餐饮店 1 +x:1 +下滑调 1 +x:1 +级次 1 +x:1 +动问 1 +x:1 +芸芸众生 1 +x:1 +场区 1 +x:1 +人情会 1 +x:1 +警告声 1 +x:1 +难度 1 +x:1 +老年症 1 +x:1 +正义 1 +x:1 +老年病 1 +x:1 +孙单驼 1 +x:1 +万木成林 1 +x:1 +等候席 1 +x:1 +色泽 1 +x:1 +漪 1 +x:1 +杜 508 +x:508 +叔祖母 1 +x:1 +定点店 1 +x:1 +产生量 1 +x:1 +驰荡 1 +x:1 +七百 1 +x:1 +输电网 1 +x:1 +洋腔 1 +x:1 +碳酸钙 1 +x:1 +败北 1 +x:1 +分身 1 +x:1 +纳西族 1 +x:1 +中餐馆 1 +x:1 +国法 1 +x:1 +光芒 1 +x:1 +自筹 1 +x:1 +样管 1 +x:1 +联交所 1 +x:1 +推土机 1 +x:1 +黑鱼 1 +x:1 +政调会 1 +x:1 +懒惰症 1 +x:1 +篆文 1 +x:1 +断枝 1 +x:1 +市话 1 +x:1 +毒贩子 1 +x:1 +边纵 1 +x:1 +耐火材料 1 +x:1 +无以言状 1 +x:1 +首次 1 +x:1 +正方形 1 +x:1 +三视图 1 +x:1 +祭陵 1 +x:1 +正业 1 +x:1 +第纳尔 1 +x:1 +三叉神经 1 +x:1 +防毒面具 1 +x:1 +有机化学 1 +x:1 +舍己为公 1 +x:1 +馆 101 +x:101 +恶浪 1 +x:1 +大板村 1 +x:1 +丘布特省 1 +x:1 +昏 24 +x:24 +佬 2 +x:2 +看家狗 1 +x:1 +前舱 1 +x:1 +橄榄球界 1 +x:1 +商议 1 +x:1 +教研组 1 +x:1 +房源 1 +x:1 +正价 1 +x:1 +有色 1 +x:1 +手指头 1 +x:1 +与年俱增 1 +x:1 +别有天地 1 +x:1 +网娘 1 +x:1 +协作区 1 +x:1 +胸中 1 +x:1 +产学研 1 +x:1 +婶子 1 +x:1 +狂欢夜 1 +x:1 +短舱 1 +x:1 +雪粉 1 +x:1 +酥油茶 1 +x:1 +弓弩手 1 +x:1 +黑鲈 1 +x:1 +遗泽 1 +x:1 +钡盐 1 +x:1 +呃 1 +x:1 +涵洞 1 +x:1 +更动 1 +x:1 +新街村 1 +x:1 +酥油草 1 +x:1 +小星星 1 +x:1 +绸带 1 +x:1 +受处分者 1 +x:1 +毒 105 +x:105 +和平 1 +x:1 +幽默感 1 +x:1 +败叶 1 +x:1 +正事 1 +x:1 +义齿 1 +x:1 +防风衣 1 +x:1 +绸布 1 +x:1 +状告 1 +x:1 +儿女情 1 +x:1 +断木 1 +x:1 +此见 1 +x:1 +摩拳擦掌 1 +x:1 +魁北克 1 +x:1 +莳秧行 1 +x:1 +独唱 1 +x:1 +轻纺业 1 +x:1 +煤气罐 1 +x:1 +尔诈我虞 1 +x:1 +年初一 1 +x:1 +收藏者 1 +x:1 +大酱汤 1 +x:1 +放放 1 +x:1 +土地权 1 +x:1 +年初三 1 +x:1 +两路镇 1 +x:1 +民主改革 1 +x:1 +嗓门儿 1 +x:1 +托举串 1 +x:1 +雌雄异体 1 +x:1 +拙作 1 +x:1 +名拳 1 +x:1 +控制棒 1 +x:1 +外听道 1 +x:1 +叛卖 1 +x:1 +铺位 1 +x:1 +信丰乡 1 +x:1 +聪明伶俐 1 +x:1 +小屋 1 +x:1 +隧洞 1 +x:1 +递增 1 +x:1 +移风易俗 1 +x:1 +难得 1 +x:1 +酥油花 1 +x:1 +纸型 1 +x:1 +嗟来之食 1 +x:1 +金市 1 +x:1 +耶 10 +x:10 +分辨 1 +x:1 +分辩 1 +x:1 +荫蔽 1 +x:1 +接风洗尘 1 +x:1 +名护 1 +x:1 +金平 1 +x:1 +组织性 1 +x:1 +苦衷 1 +x:1 +矿管办 1 +x:1 +名难副实 1 +x:1 +打头阵 1 +x:1 +后委会 1 +x:1 +仕 1 +x:1 +先发制人 1 +x:1 +汽灯 1 +x:1 +放散 1 +x:1 +年初九 1 +x:1 +综合派 1 +x:1 +镇巴县 1 +x:1 +难忘 1 +x:1 +上辛口乡 1 +x:1 +红河州 1 +x:1 +矮矮的 1 +x:1 +新饿乡 1 +x:1 +贵港 1 +x:1 +逐一 1 +x:1 +棉花包 1 +x:1 +占有率 1 +x:1 +苦行 1 +x:1 +藐小 1 +x:1 +带来 1 +x:1 +和弦 1 +x:1 +严冬 1 +x:1 +涵江 1 +x:1 +氧炔吹管 1 +x:1 +休眠芽 1 +x:1 +医疗费 1 +x:1 +名扬 1 +x:1 +幽媾 1 +x:1 +社文司 1 +x:1 +色浆 1 +x:1 +时间词 1 +x:1 +婶婶 1 +x:1 +言辞 1 +x:1 +匡庐奇秀 1 +x:1 +枇杷 1 +x:1 +赤铜色 1 +x:1 +金库 1 +x:1 +婶婆 1 +x:1 +和式 1 +x:1 +篱落 1 +x:1 +名手 1 +x:1 +战旗 1 +x:1 +检验法 1 +x:1 +益母草 1 +x:1 +打道回府 1 +x:1 +教学课 1 +x:1 +路透社 1 +x:1 +南面王 1 +x:1 +碳纤维 1 +x:1 +上湾乡 1 +x:1 +车祸 1 +x:1 +稳产田 1 +x:1 +黄岩区 1 +x:1 +禽鸭 1 +x:1 +海市蜃楼 1 +x:1 +分水岭 1 +x:1 +鳞 6 +x:6 +原料药 1 +x:1 +网子 1 +x:1 +失败者 1 +x:1 +誊写钢版 1 +x:1 +名戏 1 +x:1 +难当 1 +x:1 +三足鼎立 1 +x:1 +广昌县 1 +x:1 +里贾纳市 1 +x:1 +民航机 1 +x:1 +恶气 1 +x:1 +贵溪 1 +x:1 +婶娘 1 +x:1 +包头 1 +x:1 +溶胶 1 +x:1 +前肢 1 +x:1 +处理 1 +x:1 +言谈 1 +x:1 +坐标 1 +x:1 +六月份 1 +x:1 +黑鸦 1 +x:1 +扶优治劣 1 +x:1 +沙湾河 1 +x:1 +贮藏库 1 +x:1 +举报人 1 +x:1 +亲如一家 1 +x:1 +车窗 1 +x:1 +民庭 1 +x:1 +改日 1 +x:1 +倬 1 +x:1 +砂枪 1 +x:1 +春字头儿 1 +x:1 +各派 1 +x:1 +名不虚传 1 +x:1 +上航 1 +x:1 +蔺 4 +x:4 +蝗蝻 1 +x:1 +墓葬品 1 +x:1 +沿 211 +x:211 +第比利斯 1 +x:1 +巡洋舰 1 +x:1 +妇工委 1 +x:1 +投诉部 1 +x:1 +放晴 1 +x:1 +莘庄 1 +x:1 +伏牛山 1 +x:1 +克山 1 +x:1 +卖 857 +x:857 +无星级 1 +x:1 +五大三粗 1 +x:1 +稍许 1 +x:1 +回扣风 1 +x:1 +友情 1 +x:1 +国画家 1 +x:1 +车站 1 +x:1 +凹进 1 +x:1 +铁观音 1 +x:1 +磁县 1 +x:1 +孤行己见 1 +x:1 +捶 3 +x:3 +士 32 +x:32 +此议 1 +x:1 +此讯 1 +x:1 +雪线 1 +x:1 +蟒山 1 +x:1 +雪纺 1 +x:1 +邪念 1 +x:1 +破坏 1 +x:1 +零花钱 1 +x:1 +严加 1 +x:1 +此访 1 +x:1 +全家人 1 +x:1 +舞龙队 1 +x:1 +滑润油 1 +x:1 +黑麦 1 +x:1 +奉送 1 +x:1 +植物园 1 +x:1 +得票数 1 +x:1 +前者 1 +x:1 +旱冰鞋 1 +x:1 +器官 1 +x:1 +动静 1 +x:1 +一般无二 1 +x:1 +场内 1 +x:1 +邮资片 1 +x:1 +邀功 1 +x:1 +实战 1 +x:1 +掉泪 1 +x:1 +后事之师 1 +x:1 +误点 1 +x:1 +遇害者 1 +x:1 +塞浦路斯 1 +x:1 +车程 1 +x:1 +和尚 1 +x:1 +切纳洛市 1 +x:1 +邪心 1 +x:1 +少男少女 1 +x:1 +此语 1 +x:1 +做官者 1 +x:1 +惊叹声 1 +x:1 +苦读 1 +x:1 +自称 1 +x:1 +老尖沟 1 +x:1 +金工 1 +x:1 +齐街乡 1 +x:1 +附笔 1 +x:1 +惨剧 1 +x:1 +持卡人 1 +x:1 +黑黑 1 +x:1 +联系户 1 +x:1 +和局 1 +x:1 +乐于 1 +x:1 +吴兴 1 +x:1 +金川 1 +x:1 +金州 1 +x:1 +雒 1 +x:1 +志愿军 1 +x:1 +审计署 1 +x:1 +感奋 1 +x:1 +臣民 1 +x:1 +自私 1 +x:1 +滤波器 1 +x:1 +习性 1 +x:1 +解决率 1 +x:1 +妙龄 1 +x:1 +盒式带 1 +x:1 +车管 1 +x:1 +比附 1 +x:1 +储运部 1 +x:1 +图案画 1 +x:1 +智力型 1 +x:1 +记录本 1 +x:1 +言责 1 +x:1 +藏青果 1 +x:1 +搭车 1 +x:1 +言败 1 +x:1 +小河 1 +x:1 +玫 2 +x:2 +关键词 1 +x:1 +蝗虫 1 +x:1 +此言 1 +x:1 +阮 81 +x:81 +钢人 1 +x:1 +搭载 1 +x:1 +巡展 1 +x:1 +洛阳江 1 +x:1 +贵池 1 +x:1 +金山 1 +x:1 +竞相 1 +x:1 +身患重症 1 +x:1 +放松 1 +x:1 +车篷 1 +x:1 +遗漏 1 +x:1 +巢穴 1 +x:1 +惨叫 1 +x:1 +株距 1 +x:1 +谎称 1 +x:1 +人民政府 1 +x:1 +创刊词 1 +x:1 +吱吱 1 +x:1 +荠 1 +x:1 +惨变 1 +x:1 +进士 1 +x:1 +嗯 4 +x:4 +金属 1 +x:1 +运输业 1 +x:1 +宽窄 1 +x:1 +呆小症 1 +x:1 +包容 1 +x:1 +气性 1 +x:1 +掩藏 1 +x:1 +见财起意 1 +x:1 +进退两难 1 +x:1 +支持者 1 +x:1 +举报信 1 +x:1 +熟橡胶 1 +x:1 +吸尘器 1 +x:1 +掩蔽 1 +x:1 +网头 1 +x:1 +靠边儿站 1 +x:1 +分贝 1 +x:1 +印尼 1 +x:1 +持机人 1 +x:1 +袒 1 +x:1 +道法 1 +x:1 +军需部 1 +x:1 +优惠卡 1 +x:1 +贷款量 1 +x:1 +贵峰村 1 +x:1 +锐意进取 1 +x:1 +土地日 1 +x:1 +严厉 1 +x:1 +闭路电视 1 +x:1 +闻过则喜 1 +x:1 +有声有色 1 +x:1 +接踵而至 1 +x:1 +前脑 1 +x:1 +幽境 1 +x:1 +踏板式 1 +x:1 +友 73 +x:73 +前脚 1 +x:1 +常轨 1 +x:1 +字节 1 +x:1 +高枕无忧 1 +x:1 +愚弄 1 +x:1 +陨石雨 1 +x:1 +微循环 1 +x:1 +习惯 1 +x:1 +克己 1 +x:1 +分赃 1 +x:1 +胶木粉 1 +x:1 +叛匪 1 +x:1 +前腿 1 +x:1 +前言 1 +x:1 +切手机 1 +x:1 +分赴 1 +x:1 +洋芋 1 +x:1 +小剧场 1 +x:1 +言路 1 +x:1 +分赠 1 +x:1 +儒商 1 +x:1 +中篇卷 1 +x:1 +合理性 1 +x:1 +慰灵塔 1 +x:1 +克州 1 +x:1 +香远 1 +x:1 +清水河 1 +x:1 +葛村 1 +x:1 +半饥半饱 1 +x:1 +不平家 1 +x:1 +肉体 1 +x:1 +特别税 1 +x:1 +德才兼备 1 +x:1 +疖子 1 +x:1 +摹刻 1 +x:1 +青红皂白 1 +x:1 +拗口令 1 +x:1 +场场 1 +x:1 +无止无休 1 +x:1 +场地 1 +x:1 +拴心 1 +x:1 +元气 1 +x:1 +切切实实 1 +x:1 +网底 1 +x:1 +产 280 +x:280 +清水沙 1 +x:1 +场圃 1 +x:1 +理有固然 1 +x:1 +娴 7 +x:7 +分支行 1 +x:1 +谈判台 1 +x:1 +传染源 1 +x:1 +短粗的 1 +x:1 +断掉 1 +x:1 +苏 438 +x:438 +贸工 1 +x:1 +毒麦 1 +x:1 +首演 1 +x:1 +特马港 1 +x:1 +无可指责 1 +x:1 +护航型 1 +x:1 +鹜 1 +x:1 +踊跃 1 +x:1 +金子 1 +x:1 +败坏 1 +x:1 +场址 1 +x:1 +煮 49 +x:49 +耳朵垂 1 +x:1 +老蚌生珠 1 +x:1 +胡杨林 1 +x:1 +百年不遇 1 +x:1 +名果 1 +x:1 +鄙 1 +x:1 +愚味 1 +x:1 +突如其来 1 +x:1 +蜜桃 1 +x:1 +阿鲁巴 1 +x:1 +近卫军 1 +x:1 +金客 1 +x:1 +壮怀激烈 1 +x:1 +铅笔 1 +x:1 +活泼泼 1 +x:1 +无怨言 1 +x:1 +以销定产 1 +x:1 +合江 1 +x:1 +准备会 1 +x:1 +蔡公堂乡 1 +x:1 +不对 1 +x:1 +演奏家 1 +x:1 +无密码 1 +x:1 +独具 1 +x:1 +束手无策 1 +x:1 +续弦 1 +x:1 +吴圩 1 +x:1 +锁死 1 +x:1 +羞愧 1 +x:1 +截流 1 +x:1 +阖上 1 +x:1 +草料场 1 +x:1 +镁 4 +x:4 +此路 1 +x:1 +穿孔机 1 +x:1 +劝戒 1 +x:1 +胡杨木 1 +x:1 +老年医学 1 +x:1 +清水池 1 +x:1 +灶头 1 +x:1 +疲塌 1 +x:1 +日内瓦湖 1 +x:1 +外事组 1 +x:1 +泛滥成灾 1 +x:1 +公办侨助 1 +x:1 +丰田市 1 +x:1 +安顿 1 +x:1 +寥寥无几 1 +x:1 +坭 1 +x:1 +清水江 1 +x:1 +识花者 1 +x:1 +女色关 1 +x:1 +奉陪 1 +x:1 +舌咽神经 1 +x:1 +过滤器 1 +x:1 +总而言之 1 +x:1 +名望 1 +x:1 +最佳期 1 +x:1 +盘梯 1 +x:1 +哈尔滨 1 +x:1 +悲惨惨 1 +x:1 +洋葱 1 +x:1 +遵义市 1 +x:1 +易燃点 1 +x:1 +名曰 1 +x:1 +名曲 1 +x:1 +白热化 1 +x:1 +普耶普罗 1 +x:1 +巧干 1 +x:1 +短线型 1 +x:1 +黄岩城 1 +x:1 +像册 1 +x:1 +海校 1 +x:1 +判案 1 +x:1 +包工 1 +x:1 +偏居一隅 1 +x:1 +恶棍 1 +x:1 +分设 1 +x:1 +匮缺 1 +x:1 +苦调 1 +x:1 +督察官 1 +x:1 +碟 15 +x:15 +外来词 1 +x:1 +迥然有异 1 +x:1 +分装厂 1 +x:1 +恶梦 1 +x:1 +幽幽 1 +x:1 +日记账 1 +x:1 +古丈县 1 +x:1 +澳门币 1 +x:1 +克山病 1 +x:1 +摹印 1 +x:1 +分诊 1 +x:1 +扬店乡 1 +x:1 +香扑扑 1 +x:1 +上下肢 1 +x:1 +沉船 1 +x:1 +肉丸 1 +x:1 +雪神 1 +x:1 +吴国 1 +x:1 +拥 38 +x:38 +四处奔波 1 +x:1 +常见 1 +x:1 +常规 1 +x:1 +南关村 1 +x:1 +煤气站 1 +x:1 +克子 1 +x:1 +苦豆 1 +x:1 +暴虎冯河 1 +x:1 +地方病 1 +x:1 +队章 1 +x:1 +爱眼日 1 +x:1 +厄 66 +x:66 +鲜艳夺目 1 +x:1 +涤除 1 +x:1 +科钦 1 +x:1 +异亮氨酸 1 +x:1 +儒医 1 +x:1 +尾骨 1 +x:1 +乐东 1 +x:1 +友机 1 +x:1 +帝 11 +x:11 +乌鱼 1 +x:1 +为害 1 +x:1 +雅尔塔 1 +x:1 +过氧化氢 1 +x:1 +妙语解颐 1 +x:1 +友朋 1 +x:1 +游仙诗 1 +x:1 +胸无大志 1 +x:1 +姨丈 1 +x:1 +为官 1 +x:1 +朱砂梅 1 +x:1 +言论 1 +x:1 +绸子 1 +x:1 +牢固 1 +x:1 +多巴哥岛 1 +x:1 +微量元素 1 +x:1 +无神论 1 +x:1 +炼狱 1 +x:1 +败因 1 +x:1 +能言善辩 1 +x:1 +言词 1 +x:1 +被乘数 1 +x:1 +诬蔑 1 +x:1 +群体性 1 +x:1 +肢势 1 +x:1 +利索 1 +x:1 +自绝 1 +x:1 +状元 1 +x:1 +拥有量 1 +x:1 +鳄鱼眼泪 1 +x:1 +饮食店 1 +x:1 +健体强身 1 +x:1 +高压氧 1 +x:1 +言语 1 +x:1 +二·二八 1 +x:1 +科托努 1 +x:1 +不适感 1 +x:1 +义马 1 +x:1 +奔月 1 +x:1 +高蛋白 1 +x:1 +气浪 1 +x:1 +名星 1 +x:1 +油气流 1 +x:1 +洁净 1 +x:1 +风仪 1 +x:1 +名旦 1 +x:1 +较量 1 +x:1 +平罗县 1 +x:1 +脱缰之马 1 +x:1 +张家集镇 1 +x:1 +炼焦 1 +x:1 +冗笔 1 +x:1 +榕 7 +x:7 +祭祀 1 +x:1 +国破家亡 1 +x:1 +打印机 1 +x:1 +试飞组 1 +x:1 +右眼 1 +x:1 +情网 1 +x:1 +炯 52 +x:52 +恶毒 1 +x:1 +开幕式 1 +x:1 +独台 1 +x:1 +工艺美术 1 +x:1 +姿势 1 +x:1 +见诸 1 +x:1 +仰卧 1 +x:1 +行蓄洪区 1 +x:1 +疾苦 1 +x:1 +鹅黄 1 +x:1 +包庇 1 +x:1 +耐穿 1 +x:1 +言行 1 +x:1 +分裂 1 +x:1 +分装 1 +x:1 +和声 1 +x:1 +矿产业 1 +x:1 +器形 1 +x:1 +零用费 1 +x:1 +醉醺醺 1 +x:1 +鸣声 1 +x:1 +黑马 1 +x:1 +圣城 1 +x:1 +混居 1 +x:1 +精制品 1 +x:1 +金奖 1 +x:1 +朵朵 1 +x:1 +群威群胆 1 +x:1 +烈性酒 1 +x:1 +跃然 1 +x:1 +放手 1 +x:1 +车组 1 +x:1 +哈利斯科 1 +x:1 +风云 1 +x:1 +冈峦 1 +x:1 +慌慌忙忙 1 +x:1 +意见者 1 +x:1 +紧迫感 1 +x:1 +风习 1 +x:1 +风乡 1 +x:1 +预留户 1 +x:1 +狡狯 1 +x:1 +莎 18 +x:18 +责任令 1 +x:1 +难堪 1 +x:1 +名数 1 +x:1 +饶命 1 +x:1 +忍辱负重 1 +x:1 +正统派 1 +x:1 +雪窝 1 +x:1 +队礼 1 +x:1 +独占 1 +x:1 +常言 1 +x:1 +集资热 1 +x:1 +呕吐 1 +x:1 +前后台 1 +x:1 +动感情 1 +x:1 +主题词 1 +x:1 +洁具 1 +x:1 +北新桥 1 +x:1 +纯文学 1 +x:1 +包干 1 +x:1 +亲合力 1 +x:1 +雪竹 1 +x:1 +还原铁 1 +x:1 +责任人 1 +x:1 +风雨如磐 1 +x:1 +说者 1 +x:1 +分行 1 +x:1 +诱惑力 1 +x:1 +弥合 1 +x:1 +舞姿 1 +x:1 +包帮 1 +x:1 +葫芦科 1 +x:1 +舞蹈诗式 1 +x:1 +冈山 1 +x:1 +二拇指 1 +x:1 +得意洋洋 1 +x:1 +时报社 1 +x:1 +七点 1 +x:1 +营销额 1 +x:1 +混凝土 1 +x:1 +淮阴市 1 +x:1 +飞秒级 1 +x:1 +蝗莺 1 +x:1 +网屏 1 +x:1 +洛阳桥 1 +x:1 +立牌者 1 +x:1 +丛林 1 +x:1 +宽绰 1 +x:1 +市貌 1 +x:1 +借阅证 1 +x:1 +伪称 1 +x:1 +格老村 1 +x:1 +步代 1 +x:1 +嘲弄 1 +x:1 +丰南市 1 +x:1 +依然如故 1 +x:1 +想开 1 +x:1 +辑录 1 +x:1 +误用 1 +x:1 +贮藏室 1 +x:1 +明争暗斗 1 +x:1 +华西村 1 +x:1 +各校 1 +x:1 +马赛港 1 +x:1 +官迷心窍 1 +x:1 +摇摇曳曳 1 +x:1 +各样 1 +x:1 +球拍子 1 +x:1 +出资证 1 +x:1 +冷语 1 +x:1 +风俗 1 +x:1 +自古以来 1 +x:1 +大悟县 1 +x:1 +摘要 1 +x:1 +地方矿 1 +x:1 +荡荡乎 1 +x:1 +网巾 1 +x:1 +分规 1 +x:1 +邻摊 1 +x:1 +做 4513 +x:4513 +独力 1 +x:1 +聚酰亚胺 1 +x:1 +狡猾 1 +x:1 +后者 1 +x:1 +坠儿 1 +x:1 +哭泣 1 +x:1 +状态词 1 +x:1 +音色 1 +x:1 +为奇 1 +x:1 +常识 1 +x:1 +医疗证 1 +x:1 +分解 1 +x:1 +场员 1 +x:1 +国立市 1 +x:1 +侯爷 1 +x:1 +惊心触目 1 +x:1 +侯爵 1 +x:1 +恺 2 +x:2 +气绝身亡 1 +x:1 +珊树村 1 +x:1 +谍报 1 +x:1 +市府大楼 1 +x:1 +献血站 1 +x:1 +瓦窑堡 1 +x:1 +放映权 1 +x:1 +冈崎 1 +x:1 +不避艰险 1 +x:1 +追昔抚今 1 +x:1 +金墩 1 +x:1 +音节 1 +x:1 +网号 1 +x:1 +家具业 1 +x:1 +人民院 1 +x:1 +放排 1 +x:1 +研究会 1 +x:1 +洪荒 1 +x:1 +器底 1 +x:1 +摹写 1 +x:1 +中毒案 1 +x:1 +互异性 1 +x:1 +硕果累累 1 +x:1 +祭祖 1 +x:1 +难处 1 +x:1 +紧迫性 1 +x:1 +奔放 1 +x:1 +犯人照 1 +x:1 +易燃物 1 +x:1 +就诊量 1 +x:1 +风传 1 +x:1 +丛杂 1 +x:1 +凤翔县 1 +x:1 +襄阳南路 1 +x:1 +义塾 1 +x:1 +对话费 1 +x:1 +和好 1 +x:1 +繁忙 1 +x:1 +独创 1 +x:1 +想必 1 +x:1 +物镜 1 +x:1 +义项 1 +x:1 +鸣奏 1 +x:1 +姑娘群 1 +x:1 +资财 1 +x:1 +放浪 1 +x:1 +想念 1 +x:1 +搭讪 1 +x:1 +翰 3 +x:3 +减肥热 1 +x:1 +放映机 1 +x:1 +霸道 1 +x:1 +陈工 1 +x:1 +搭设 1 +x:1 +历久弥坚 1 +x:1 +长此下去 1 +x:1 +女网赛 1 +x:1 +黄梁梦 1 +x:1 +钓竿 1 +x:1 +放水 1 +x:1 +馨著 1 +x:1 +伏案疾书 1 +x:1 +棒子面 1 +x:1 +敬酒 1 +x:1 +鬼亲 1 +x:1 +调令 1 +x:1 +非科技 1 +x:1 +焦痕 1 +x:1 +罪因 1 +x:1 +未 1411 +x:1411 +独岛 1 +x:1 +转机建制 1 +x:1 +音质 1 +x:1 +洛阳村 1 +x:1 +光风霁月 1 +x:1 +扶扶 1 +x:1 +售票额 1 +x:1 +放眼看去 1 +x:1 +悬铃木 1 +x:1 +雪球 1 +x:1 +缸管 1 +x:1 +习武 1 +x:1 +山西省 1 +x:1 +令人振奋 1 +x:1 +电传 1 +x:1 +林甸县 1 +x:1 +器具 1 +x:1 +累牍连篇 1 +x:1 +不孝 1 +x:1 +本该 1 +x:1 +雅静 1 +x:1 +处理品 1 +x:1 +各村 1 +x:1 +斜视 1 +x:1 +骟驼 1 +x:1 +乡议局 1 +x:1 +油鞋 1 +x:1 +金块 1 +x:1 +金坛 1 +x:1 +交战团体 1 +x:1 +各条 1 +x:1 +狮子座 1 +x:1 +切身利益 1 +x:1 +无铅化 1 +x:1 +递减 1 +x:1 +场子 1 +x:1 +工社党 1 +x:1 +美学史 1 +x:1 +黑钱 1 +x:1 +乱哄哄 1 +x:1 +探索室 1 +x:1 +分蘖 1 +x:1 +意大利籍 1 +x:1 +敬重 1 +x:1 +裙装 1 +x:1 +非商业 1 +x:1 +七绝 1 +x:1 +上年纪 1 +x:1 +粘 18 +x:18 +盘查 1 +x:1 +水流量 1 +x:1 +可管理性 1 +x:1 +交流电 1 +x:1 +映荡 1 +x:1 +处级 1 +x:1 +捞一把 1 +x:1 +裙裤 1 +x:1 +沉迷 1 +x:1 +花墟街 1 +x:1 +裙裾 1 +x:1 +互助性 1 +x:1 +超逸 1 +x:1 +砂浆 1 +x:1 +万事如意 1 +x:1 +名次 1 +x:1 +刺刺不休 1 +x:1 +巧言令色 1 +x:1 +尾音 1 +x:1 +脑力劳动 1 +x:1 +姜片 1 +x:1 +插 108 +x:108 +想像 1 +x:1 +控制感 1 +x:1 +铳响 1 +x:1 +瓢泼 1 +x:1 +记录法 1 +x:1 +女儿身 1 +x:1 +名款 1 +x:1 +处结 1 +x:1 +纸上谈兵 1 +x:1 +车灯 1 +x:1 +红斑狼疮 1 +x:1 +彩涂 1 +x:1 +下半身 1 +x:1 +多见者 1 +x:1 +七级 1 +x:1 +入室弟子 1 +x:1 +转世灵童 1 +x:1 +实弹射击 1 +x:1 +金城 1 +x:1 +办公会议 1 +x:1 +放活 1 +x:1 +密锣紧鼓 1 +x:1 +雪花呢 1 +x:1 +自爱 1 +x:1 +单晶河村 1 +x:1 +电石气 1 +x:1 +辑入 1 +x:1 +隔热性 1 +x:1 +音调 1 +x:1 +耐用 1 +x:1 +遗教 1 +x:1 +教练场 1 +x:1 +新沂河 1 +x:1 +法学院 1 +x:1 +望子成材 1 +x:1 +解放军 1 +x:1 +遗族 1 +x:1 +黑锅 1 +x:1 +市花 1 +x:1 +子子孙孙 1 +x:1 +首批 1 +x:1 +短论 1 +x:1 +说辞 1 +x:1 +短评 1 +x:1 +相聚一堂 1 +x:1 +色斑 1 +x:1 +扫描术 1 +x:1 +雕艺 1 +x:1 +仁寿县 1 +x:1 +遥控 1 +x:1 +跃跃一试 1 +x:1 +君山 1 +x:1 +杏红 1 +x:1 +外来 1 +x:1 +网口 1 +x:1 +扫描机 1 +x:1 +处罚 1 +x:1 +糖弹 1 +x:1 +首战 1 +x:1 +雨珠 1 +x:1 +还我河山 1 +x:1 +讨论会 1 +x:1 +处置 1 +x:1 +七窍生烟 1 +x:1 +营养组 1 +x:1 +家徒四壁 1 +x:1 +短语 1 +x:1 +肥瘦儿 1 +x:1 +欢送会 1 +x:1 +一团和气 1 +x:1 +大自然 1 +x:1 +基酒 1 +x:1 +水到渠成 1 +x:1 +放流 1 +x:1 +网友 1 +x:1 +七零八落 1 +x:1 +裙褶 1 +x:1 +独居 1 +x:1 +变异型 1 +x:1 +哥哥 1 +x:1 +妥妥帖帖 1 +x:1 +单相思 1 +x:1 +雕花 1 +x:1 +雄峻挺拔 1 +x:1 +理事会 1 +x:1 +一元复始 1 +x:1 +獐狮荡乡 1 +x:1 +杏花岭区 1 +x:1 +接头处 1 +x:1 +再终字 1 +x:1 +下板城 1 +x:1 +样片 1 +x:1 +包公 1 +x:1 +侯马市 1 +x:1 +仇 15 +x:15 +洋装 1 +x:1 +片面 1 +x:1 +成议 1 +x:1 +故道区 1 +x:1 +楔子 1 +x:1 +孜孜以求 1 +x:1 +青春年少 1 +x:1 +吊丝竹 1 +x:1 +包养 1 +x:1 +色散 1 +x:1 +遗文 1 +x:1 +惊叹号 1 +x:1 +名模 1 +x:1 +总负责人 1 +x:1 +丁是丁 1 +x:1 +舅舅 1 +x:1 +虹桥 1 +x:1 +汾阳 1 +x:1 +开小差 1 +x:1 +农副食品 1 +x:1 +缝缝补补 1 +x:1 +占有物 1 +x:1 +高山铺 1 +x:1 +车照 1 +x:1 +年收入 1 +x:1 +天下太平 1 +x:1 +驰誉 1 +x:1 +饮用 1 +x:1 +课题组 1 +x:1 +杜仲 1 +x:1 +成群连片 1 +x:1 +镇公所 1 +x:1 +遥指 1 +x:1 +混双 1 +x:1 +控制性 1 +x:1 +疾恶如仇 1 +x:1 +苦胆 1 +x:1 +五味俱全 1 +x:1 +题辞 1 +x:1 +灶君 1 +x:1 +压缩疗法 1 +x:1 +网协 1 +x:1 +软卧票 1 +x:1 +稷山县 1 +x:1 +佛教会 1 +x:1 +雨点 1 +x:1 +黑阵 1 +x:1 +元戎 1 +x:1 +红衣主教 1 +x:1 +传奇 1 +x:1 +自然 1 +x:1 +品性 1 +x:1 +误码 1 +x:1 +智力库 1 +x:1 +白蒙蒙 1 +x:1 +舐 1 +x:1 +神龛 1 +x:1 +非洲狮 1 +x:1 +扣饰 1 +x:1 +正安县 1 +x:1 +民航法 1 +x:1 +信使 1 +x:1 +为名 1 +x:1 +邻村 1 +x:1 +涪江 1 +x:1 +为之一振 1 +x:1 +领头雁 1 +x:1 +所办 1 +x:1 +呼天抢地 1 +x:1 +诓骗 1 +x:1 +汽笛 1 +x:1 +半殖民地 1 +x:1 +无敌号 1 +x:1 +红头蝇 1 +x:1 +繁华似锦 1 +x:1 +脊骨 1 +x:1 +九曲回肠 1 +x:1 +场外 1 +x:1 +贺 180 +x:180 +官价 1 +x:1 +短装 1 +x:1 +此药 1 +x:1 +教练员 1 +x:1 +瓦解冰消 1 +x:1 +黑陶 1 +x:1 +尾随 1 +x:1 +桌 49 +x:49 +根除 1 +x:1 +包办 1 +x:1 +黄土路 1 +x:1 +衔接期 1 +x:1 +料峭 1 +x:1 +短裙 1 +x:1 +走样 1 +x:1 +短裤 1 +x:1 +剪板工 1 +x:1 +鸣响 1 +x:1 +营运科 1 +x:1 +官人 1 +x:1 +影格儿 1 +x:1 +似真似假 1 +x:1 +路基导弹 1 +x:1 +储备棉 1 +x:1 +买椟还珠 1 +x:1 +恶果 1 +x:1 +母亲节 1 +x:1 +断流 1 +x:1 +被罚者 1 +x:1 +空间 1 +x:1 +贵族 1 +x:1 +难听 1 +x:1 +元麻布 1 +x:1 +鸣吼 1 +x:1 +司署 1 +x:1 +名楼 1 +x:1 +上下车 1 +x:1 +矢口否认 1 +x:1 +三老四严 1 +x:1 +巧妇 1 +x:1 +菜市口 1 +x:1 +为官者 1 +x:1 +丰南县 1 +x:1 +艺术品部 1 +x:1 +延寿县 1 +x:1 +登峰造极 1 +x:1 +裳 2 +x:2 +和合 1 +x:1 +儒将 1 +x:1 +尸体堆 1 +x:1 +地方税 1 +x:1 +各方 1 +x:1 +驻有 1 +x:1 +细条条 1 +x:1 +狮子山 1 +x:1 +淄川区 1 +x:1 +洋话 1 +x:1 +无事生非 1 +x:1 +各族 1 +x:1 +花径踅 1 +x:1 +独异 1 +x:1 +蹬技 1 +x:1 +三金奖 1 +x:1 +花街柳巷 1 +x:1 +贷款额 1 +x:1 +说谎 1 +x:1 +丢失 1 +x:1 +必先予之 1 +x:1 +牛 311 +x:311 +忽冷忽热 1 +x:1 +九九归一 1 +x:1 +贵方 1 +x:1 +紧紧张张 1 +x:1 +袋装率 1 +x:1 +前行 1 +x:1 +连爬带滚 1 +x:1 +死对头 1 +x:1 +就便 1 +x:1 +喜不自禁 1 +x:1 +递升 1 +x:1 +处理器 1 +x:1 +督察员 1 +x:1 +东濑户 1 +x:1 +车牌 1 +x:1 +传染性 1 +x:1 +自燃 1 +x:1 +皮里抽肉 1 +x:1 +牛筋 1 +x:1 +分 2058 +x:2058 +畅销书 1 +x:1 +借古讽今 1 +x:1 +批斗会 1 +x:1 +选择者 1 +x:1 +罕有所闻 1 +x:1 +不懈努力 1 +x:1 +平常态 1 +x:1 +和善 1 +x:1 +移民局 1 +x:1 +信义 1 +x:1 +箫 5 +x:5 +片源 1 +x:1 +脑电图 1 +x:1 +文化节 1 +x:1 +首恶 1 +x:1 +终结 1 +x:1 +黑霉 1 +x:1 +伸 72 +x:72 +成语 1 +x:1 +磷酸钙盐 1 +x:1 +混入 1 +x:1 +短视 1 +x:1 +短见 1 +x:1 +湘江 1 +x:1 +为啥 1 +x:1 +司级 1 +x:1 +化合价 1 +x:1 +滤清器 1 +x:1 +信丰 1 +x:1 +黑面 1 +x:1 +为非作歹 1 +x:1 +焚林 1 +x:1 +混养 1 +x:1 +水利学 1 +x:1 +判明 1 +x:1 +鬓毛 1 +x:1 +审委会 1 +x:1 +推波助澜 1 +x:1 +巯 1 +x:1 +包厢 1 +x:1 +敛财 1 +x:1 +电子云 1 +x:1 +官位 1 +x:1 +电子书 1 +x:1 +信仰 1 +x:1 +独幕 1 +x:1 +纠风办 1 +x:1 +映出 1 +x:1 +鸣唱 1 +x:1 +突击性 1 +x:1 +救援 1 +x:1 +河清海晏 1 +x:1 +非礼 1 +x:1 +边界 1 +x:1 +毒酒 1 +x:1 +处理场 1 +x:1 +坎儿井 1 +x:1 +失踪者 1 +x:1 +严实 1 +x:1 +余味 1 +x:1 +众所共识 1 +x:1 +奈卜特山 1 +x:1 +住宅局 1 +x:1 +预审处 1 +x:1 +扶老携幼 1 +x:1 +主战场 1 +x:1 +名校 1 +x:1 +竞争法 1 +x:1 +网具 1 +x:1 +包包 1 +x:1 +深蓝 1 +x:1 +别的 1 +x:1 +幽僻 1 +x:1 +抒情诗 1 +x:1 +裁军会 1 +x:1 +苦苦 1 +x:1 +金哨 1 +x:1 +汗马功劳 1 +x:1 +适者生存 1 +x:1 +家乡话 1 +x:1 +说贴 1 +x:1 +严密 1 +x:1 +网兜 1 +x:1 +趋同 1 +x:1 +知情 1 +x:1 +天网恢恢 1 +x:1 +胡杨树 1 +x:1 +电子业 1 +x:1 +白鳍豚 1 +x:1 +前襟 1 +x:1 +一举四得 1 +x:1 +歇后语 1 +x:1 +快讯 1 +x:1 +二化螟 1 +x:1 +原版 1 +x:1 +澍 11 +x:11 +前身 1 +x:1 +色情 1 +x:1 +自治州 1 +x:1 +谈判室 1 +x:1 +田阳县 1 +x:1 +届届 1 +x:1 +草长莺飞 1 +x:1 +毒雨 1 +x:1 +发大财 1 +x:1 +劳教营 1 +x:1 +处变不惊 1 +x:1 +望子成才 1 +x:1 +三七节 1 +x:1 +一岗双责 1 +x:1 +自省 1 +x:1 +震波 1 +x:1 +下定决心 1 +x:1 +雪灾 1 +x:1 +冻干粉 1 +x:1 +备不住 1 +x:1 +五谷不分 1 +x:1 +长袖者 1 +x:1 +首月 1 +x:1 +命中率 1 +x:1 +广播网 1 +x:1 +金卡 1 +x:1 +脊鳍 1 +x:1 +哥儿 1 +x:1 +十万火急 1 +x:1 +扔 91 +x:91 +环保 1 +x:1 +耐火 1 +x:1 +金卫 1 +x:1 +淡 63 +x:63 +短训班 1 +x:1 +石钟乳 1 +x:1 +城庆 1 +x:1 +衡平法 1 +x:1 +膻气 1 +x:1 +氧化铁 1 +x:1 +娘家人 1 +x:1 +基金 1 +x:1 +澳门元 1 +x:1 +常胜 1 +x:1 +氧化铝 1 +x:1 +毛孩子 1 +x:1 +哈思山 1 +x:1 +敷衍塞责 1 +x:1 +釉料 1 +x:1 +独奏 1 +x:1 +丫鬟 1 +x:1 +是非 1 +x:1 +糖心 1 +x:1 +地应力 1 +x:1 +无牵 1 +x:1 +灶具 1 +x:1 +换肤霜 1 +x:1 +五金 1 +x:1 +天寒地冻 1 +x:1 +演奏厅 1 +x:1 +高频 1 +x:1 +蘧 1 +x:1 +您 586 +x:586 +M 5 +x:5 +契友 1 +x:1 +心跳声 1 +x:1 +宽畅 1 +x:1 +钰 22 +x:22 +疲倦 1 +x:1 +借书证 1 +x:1 +遥想 1 +x:1 +蹉跎岁月 1 +x:1 +为之一新 1 +x:1 +控制数 1 +x:1 +石灰 1 +x:1 +奢望 1 +x:1 +诬谄 1 +x:1 +原物 1 +x:1 +七窍 1 +x:1 +好整以暇 1 +x:1 +轧路机 1 +x:1 +迁移性 1 +x:1 +墓制 1 +x:1 +组织液 1 +x:1 +关口 1 +x:1 +严峻 1 +x:1 +检查单 1 +x:1 +自知 1 +x:1 +耐热 1 +x:1 +金发 1 +x:1 +挥斥方遒 1 +x:1 +丢开 1 +x:1 +自焚 1 +x:1 +包含 1 +x:1 +丢弃 1 +x:1 +鬣狗 1 +x:1 +演奏台 1 +x:1 +琼斯伯勒 1 +x:1 +独夫 1 +x:1 +黄岩市 1 +x:1 +恶意 1 +x:1 +穗状 1 +x:1 +一中全会 1 +x:1 +扳道夫 1 +x:1 +出资者 1 +x:1 +大屠杀 1 +x:1 +曼 2 +x:2 +恶感 1 +x:1 +儒家 1 +x:1 +说话 1 +x:1 +有孔虫 1 +x:1 +航运 1 +x:1 +撑 68 +x:68 +成人装 1 +x:1 +公担 1 +x:1 +非试点 1 +x:1 +颙 3 +x:3 +和县 1 +x:1 +前边 1 +x:1 +摔伤 1 +x:1 +大家庭制 1 +x:1 +样相 1 +x:1 +铝土矿 1 +x:1 +分获 1 +x:1 +说说 1 +x:1 +金刚 1 +x:1 +砂梨 1 +x:1 +前辈 1 +x:1 +视听室 1 +x:1 +锦绣前程 1 +x:1 +病根 1 +x:1 +掉换 1 +x:1 +纯利润 1 +x:1 +唐宋词 1 +x:1 +检验性 1 +x:1 +自白 1 +x:1 +排气管 1 +x:1 +盐水选种 1 +x:1 +深厚感 1 +x:1 +煎药锅 1 +x:1 +跋 6 +x:6 +趋动 1 +x:1 +江平镇 1 +x:1 +检疫 1 +x:1 +别具风采 1 +x:1 +前述 1 +x:1 +益事 1 +x:1 +知悉 1 +x:1 +字谜 1 +x:1 +趋势 1 +x:1 +焦炭 1 +x:1 +冬麦区 1 +x:1 +首映 1 +x:1 +盗车 1 +x:1 +左下 1 +x:1 +车痕 1 +x:1 +着色剂 1 +x:1 +焦炙 1 +x:1 +难受 1 +x:1 +朱比洛队 1 +x:1 +高风亮节 1 +x:1 +难友 1 +x:1 +船闸式 1 +x:1 +非贸易 1 +x:1 +遗愿 1 +x:1 +焦炉 1 +x:1 +穷途末路 1 +x:1 +单杜科村 1 +x:1 +呕心 1 +x:1 +大势所趋 1 +x:1 +噪声 1 +x:1 +复新剂 1 +x:1 +官事 1 +x:1 +可持续化 1 +x:1 +焦灼 1 +x:1 +诬赖 1 +x:1 +鸣哨 1 +x:1 +心花怒放 1 +x:1 +车用 1 +x:1 +纸袋 1 +x:1 +摩崖 1 +x:1 +楔形 1 +x:1 +保量 1 +x:1 +优秀者 1 +x:1 +病案 1 +x:1 +重载化 1 +x:1 +弥久益深 1 +x:1 +砂样 1 +x:1 +有头有尾 1 +x:1 +贪大求全 1 +x:1 +小意思 1 +x:1 +请来 1 +x:1 +厌战 1 +x:1 +结售汇 1 +x:1 +桑塔纳 1 +x:1 +长沙城 1 +x:1 +泾河 1 +x:1 +难却 1 +x:1 +非国大 1 +x:1 +儒学 1 +x:1 +坦缓 1 +x:1 +舟车 1 +x:1 +韵头 1 +x:1 +脊髓 1 +x:1 +迁移 1 +x:1 +老少边穷 1 +x:1 +认知率 1 +x:1 +黑金 1 +x:1 +皮脂腺 1 +x:1 +黄埔港 1 +x:1 +寸心 1 +x:1 +同步网 1 +x:1 +石铁院 1 +x:1 +网坛 1 +x:1 +元旦 1 +x:1 +骑马声 1 +x:1 +网址 1 +x:1 +老妈子 1 +x:1 +柴汽比 1 +x:1 +遥望 1 +x:1 +贵报 1 +x:1 +遗憾 1 +x:1 +美人蕉 1 +x:1 +审议官 1 +x:1 +上下课 1 +x:1 +灶口 1 +x:1 +莫托拉镇 1 +x:1 +宁都县 1 +x:1 +洗砚池头 1 +x:1 +编制法 1 +x:1 +汽缸 1 +x:1 +矽肺 1 +x:1 +灶台 1 +x:1 +电影业 1 +x:1 +自用 1 +x:1 +高压柜 1 +x:1 +奔波 1 +x:1 +色拉 1 +x:1 +捆扎 1 +x:1 +地方级 1 +x:1 +游泳史 1 +x:1 +若虫 1 +x:1 +疲劳 1 +x:1 +混同 1 +x:1 +安眠药 1 +x:1 +间奏曲 1 +x:1 +非粮 1 +x:1 +包围 1 +x:1 +金关 1 +x:1 +金具 1 +x:1 +定下 1 +x:1 +河流镇 1 +x:1 +插班生 1 +x:1 +不经之谈 1 +x:1 +篙 2 +x:2 +犁庭扫闾 1 +x:1 +儒士 1 +x:1 +银鹰 1 +x:1 +匀播耧 1 +x:1 +炕桌儿 1 +x:1 +车盖 1 +x:1 +呼伦贝尔 1 +x:1 +热热闹闹 1 +x:1 +麻风 1 +x:1 +独家 1 +x:1 +金元 1 +x:1 +正定 1 +x:1 +金光 1 +x:1 +菜市场 1 +x:1 +同胞 1 +x:1 +琇 1 +x:1 +控制权 1 +x:1 +杨花 1 +x:1 +附着 1 +x:1 +饮片 1 +x:1 +三无 1 +x:1 +金冠 1 +x:1 +车江窑 1 +x:1 +独子 1 +x:1 +小溪 1 +x:1 +程海乡 1 +x:1 +膀胱 1 +x:1 +名流 1 +x:1 +郎五庄村 1 +x:1 +汾酒 1 +x:1 +树挪死 1 +x:1 +音讯 1 +x:1 +控制板 1 +x:1 +盗案 1 +x:1 +三案 1 +x:1 +录像仪 1 +x:1 +定价 1 +x:1 +伴君 1 +x:1 +锚缆 1 +x:1 +饕餮之徒 1 +x:1 +脂粉气 1 +x:1 +光怪陆离 1 +x:1 +万顷 1 +x:1 +定于 1 +x:1 +气泵 1 +x:1 +信众 1 +x:1 +高压服 1 +x:1 +穷途潦倒 1 +x:1 +之 7366 +x:7366 +嘎登 1 +x:1 +金凤 1 +x:1 +邻接 1 +x:1 +滑雪队 1 +x:1 +招考办 1 +x:1 +磁峰镇 1 +x:1 +处理剂 1 +x:1 +发言人 1 +x:1 +吼三喝四 1 +x:1 +非导体 1 +x:1 +贸发 1 +x:1 +阖家团聚 1 +x:1 +棉花岛 1 +x:1 +右翼 1 +x:1 +游泳区 1 +x:1 +网员 1 +x:1 +风雨灯 1 +x:1 +东花市 1 +x:1 +永兴县 1 +x:1 +兵 246 +x:246 +定人 1 +x:1 +透热疗法 1 +x:1 +品艺录 1 +x:1 +定亲 1 +x:1 +斜对面 1 +x:1 +定位 1 +x:1 +打鼓儿的 1 +x:1 +贵恙 1 +x:1 +志向 1 +x:1 +放款 1 +x:1 +株系 1 +x:1 +结算卡 1 +x:1 +距谏者 1 +x:1 +文字改革 1 +x:1 +旁观者清 1 +x:1 +元朝 1 +x:1 +垛 4 +x:4 +汝城 1 +x:1 +物质性 1 +x:1 +圣克鲁斯 1 +x:1 +处理厂 1 +x:1 +泼陂河镇 1 +x:1 +贵州团 1 +x:1 +瓮城 1 +x:1 +检验所 1 +x:1 +老妈妈 1 +x:1 +败将 1 +x:1 +果子酒 1 +x:1 +溜肩膀 1 +x:1 +引资 1 +x:1 +习气 1 +x:1 +淮阴城 1 +x:1 +零零散散 1 +x:1 +气泡 1 +x:1 +辨识 1 +x:1 +布道台 1 +x:1 +阿德莱德 1 +x:1 +为公 1 +x:1 +闹钟 1 +x:1 +附加税 1 +x:1 +百步穿杨 1 +x:1 +火暴 1 +x:1 +地面战 1 +x:1 +撇嘴 1 +x:1 +短跑 1 +x:1 +泾渭 1 +x:1 +量角器 1 +x:1 +提手 1 +x:1 +腔肠动物 1 +x:1 +乘风破浪 1 +x:1 +辨认 1 +x:1 +苦虑 1 +x:1 +为先 1 +x:1 +承保商 1 +x:1 +土地法 1 +x:1 +留念 1 +x:1 +短路 1 +x:1 +桎梏 1 +x:1 +非国定 1 +x:1 +败局 1 +x:1 +化隆县 1 +x:1 +急病 1 +x:1 +奔涌 1 +x:1 +放歌 1 +x:1 +莘县 1 +x:1 +量子位 1 +x:1 +前贤 1 +x:1 +狐狸尾巴 1 +x:1 +三崎町 1 +x:1 +专机 1 +x:1 +天经地义 1 +x:1 +望尘比步 1 +x:1 +三级跳远 1 +x:1 +作业费 1 +x:1 +控诉书 1 +x:1 +弄潮儿 1 +x:1 +中药味 1 +x:1 +随来随办 1 +x:1 +断桥 1 +x:1 +吱声 1 +x:1 +刺激仪 1 +x:1 +断档 1 +x:1 +蒸馏 1 +x:1 +打头风 1 +x:1 +油亮 1 +x:1 +大田乡 1 +x:1 +内置式 1 +x:1 +十六铺 1 +x:1 +克军 1 +x:1 +名江 1 +x:1 +库缎 1 +x:1 +余物 1 +x:1 +煤气灯 1 +x:1 +抗议者 1 +x:1 +留待 1 +x:1 +难关 1 +x:1 +羊角辫 1 +x:1 +尾部 1 +x:1 +扑克机 1 +x:1 +和兴 1 +x:1 +形容词 1 +x:1 +心脏病 1 +x:1 +海滩 1 +x:1 +反常规 1 +x:1 +人间地狱 1 +x:1 +金城汤池 1 +x:1 +草袋 1 +x:1 +安置费 1 +x:1 +稻 19 +x:19 +泾源 1 +x:1 +大马哈鱼 1 +x:1 +为准 1 +x:1 +马赛曲 1 +x:1 +首播 1 +x:1 +波多黎各 1 +x:1 +状子 1 +x:1 +名气 1 +x:1 +栋梁材 1 +x:1 +难免 1 +x:1 +包场 1 +x:1 +恶战 1 +x:1 +约定俗成 1 +x:1 +驻扎 1 +x:1 +金像 1 +x:1 +风磨 1 +x:1 +各式 1 +x:1 +拉后腿 1 +x:1 +疲沓 1 +x:1 +各异 1 +x:1 +情意 1 +x:1 +名叫 1 +x:1 +暨南 1 +x:1 +名号 1 +x:1 +妖魔 1 +x:1 +抗 169 +x:169 +简便性 1 +x:1 +遗属 1 +x:1 +驴鸣狗吠 1 +x:1 +善策 1 +x:1 +专家级 1 +x:1 +隘路 1 +x:1 +牌证 1 +x:1 +婶母 1 +x:1 +缘簿 1 +x:1 +西北风 1 +x:1 +无起色 1 +x:1 +创刊号 1 +x:1 +手脚 1 +x:1 +棉花所 1 +x:1 +砚石 1 +x:1 +断垄 1 +x:1 +祭扫者 1 +x:1 +萦系 1 +x:1 +高兴劲 1 +x:1 +信用 1 +x:1 +心裁 1 +x:1 +有条有理 1 +x:1 +提成 1 +x:1 +蓝皮书 1 +x:1 +科 140 +x:140 +鲸须 1 +x:1 +人情网 1 +x:1 +山东梆子 1 +x:1 +遗少 1 +x:1 +佛教界 1 +x:1 +交城县 1 +x:1 +声望 1 +x:1 +这般 1 +x:1 +南美洲 1 +x:1 +朵儿 1 +x:1 +难吃 1 +x:1 +高温假 1 +x:1 +破财 1 +x:1 +惫 1 +x:1 +独断 1 +x:1 +丢掉 1 +x:1 +数落 1 +x:1 +近地点 1 +x:1 +第四纪 1 +x:1 +手腕 1 +x:1 +总指挥部 1 +x:1 +商场 1 +x:1 +八连冠 1 +x:1 +遗尸 1 +x:1 +队会 1 +x:1 +覆辙 1 +x:1 +养护 1 +x:1 +首富 1 +x:1 +歌王 1 +x:1 +分配型 1 +x:1 +意味着 1 +x:1 +善跑 1 +x:1 +肇东市 1 +x:1 +模塑 1 +x:1 +威胁性 1 +x:1 +挂钟 1 +x:1 +正经 1 +x:1 +尾闾 1 +x:1 +岁岁枯荣 1 +x:1 +浅绿 1 +x:1 +名单 1 +x:1 +发报声 1 +x:1 +擀面杖 1 +x:1 +正统 1 +x:1 +私营业者 1 +x:1 +禽流感 1 +x:1 +曲曲折折 1 +x:1 +胀 4 +x:4 +游园会 1 +x:1 +许可法 1 +x:1 +严惩 1 +x:1 +名匠 1 +x:1 +虚荣心 1 +x:1 +心血 1 +x:1 +怀胎 1 +x:1 +放哨 1 +x:1 +岳阳县 1 +x:1 +寒 37 +x:37 +正线 1 +x:1 +雪盲 1 +x:1 +鸡皮疙瘩 1 +x:1 +各显其能 1 +x:1 +闭塞 1 +x:1 +优惠性 1 +x:1 +观赏者 1 +x:1 +名医 1 +x:1 +举办地 1 +x:1 +手臂 1 +x:1 +中童 1 +x:1 +边上 1 +x:1 +单名数 1 +x:1 +油井 1 +x:1 +太空衣 1 +x:1 +抗生素 1 +x:1 +入库率 1 +x:1 +突现 1 +x:1 +定点 1 +x:1 +荆棘载途 1 +x:1 +民宗委 1 +x:1 +担心桥 1 +x:1 +摹本 1 +x:1 +青鱼 1 +x:1 +耳科 1 +x:1 +教育长 1 +x:1 +各市 1 +x:1 +读完 1 +x:1 +熠熠闪闪 1 +x:1 +场房 1 +x:1 +一超 1 +x:1 +青睐有加 1 +x:1 +集中区 1 +x:1 +南关区 1 +x:1 +伊豆 1 +x:1 +门房 1 +x:1 +一窍不通 1 +x:1 +儒林 1 +x:1 +炙手可热 1 +x:1 +永远 1 +x:1 +对虾 1 +x:1 +检验局 1 +x:1 +丧钟 1 +x:1 +狼烟 1 +x:1 +元大 1 +x:1 +贵平 1 +x:1 +鳔胶 1 +x:1 +脑电波 1 +x:1 +邻居 1 +x:1 +色差 1 +x:1 +锤子 1 +x:1 +粘粘糊糊 1 +x:1 +侦破 1 +x:1 +改好率 1 +x:1 +退稿费 1 +x:1 +广告语 1 +x:1 +人人皆知 1 +x:1 +物证 1 +x:1 +绕 85 +x:85 +练者 1 +x:1 +复辅音 1 +x:1 +草野 1 +x:1 +自力霉素 1 +x:1 +米铺 1 +x:1 +牢 32 +x:32 +短衣 1 +x:1 +东关村 1 +x:1 +揭短 1 +x:1 +诀别 1 +x:1 +广告词 1 +x:1 +场所 1 +x:1 +伤湿膏 1 +x:1 +排碱渠 1 +x:1 +煤矿局 1 +x:1 +流窜 1 +x:1 +正编 1 +x:1 +老 1637 +x:1637 +虞城县 1 +x:1 +名剧 1 +x:1 +知识者 1 +x:1 +前行者 1 +x:1 +毛家湾 1 +x:1 +儋 1 +x:1 +名特优稀 1 +x:1 +爱国会 1 +x:1 +细枝末节 1 +x:1 +羔 2 +x:2 +儒术 1 +x:1 +提拨 1 +x:1 +伪作 1 +x:1 +上当者 1 +x:1 +捐资人 1 +x:1 +军容镜 1 +x:1 +双重 1 +x:1 +毋庸讳言 1 +x:1 +城际 1 +x:1 +液压机 1 +x:1 +丢手 1 +x:1 +购物点 1 +x:1 +涪城 1 +x:1 +兼听博采 1 +x:1 +风神 1 +x:1 +手肘 1 +x:1 +总理 1 +x:1 +衣钩 1 +x:1 +蓄电池 1 +x:1 +名利 1 +x:1 +核政策 1 +x:1 +逆运算 1 +x:1 +米家沟村 1 +x:1 +贪大求洋 1 +x:1 +阿尔卑斯 1 +x:1 +咚咚 1 +x:1 +雅间 1 +x:1 +城防 1 +x:1 +名刹 1 +x:1 +厨刀 1 +x:1 +佟 35 +x:35 +铁甲舰 1 +x:1 +草酸 1 +x:1 +名分 1 +x:1 +提拔 1 +x:1 +早产 1 +x:1 +友协 1 +x:1 +中庸之道 1 +x:1 +潞城市 1 +x:1 +恶少 1 +x:1 +名列 1 +x:1 +败招 1 +x:1 +催人泪下 1 +x:1 +劫难 1 +x:1 +城门 1 +x:1 +质轻 1 +x:1 +溧阳 1 +x:1 +代扣代缴 1 +x:1 +船山乡 1 +x:1 +穷困 1 +x:1 +一汽人 1 +x:1 +乳制品 1 +x:1 +录像片 1 +x:1 +祝词 1 +x:1 +技术装备 1 +x:1 +沟 66 +x:66 +怒射 1 +x:1 +恶心 1 +x:1 +第四系 1 +x:1 +庆大霉素 1 +x:1 +伊通社 1 +x:1 +维生素 1 +x:1 +耕地者 1 +x:1 +金洞 1 +x:1 +肉票 1 +x:1 +泡桐花 1 +x:1 +竭尽所能 1 +x:1 +雪上 1 +x:1 +祝语 1 +x:1 +徐福镇 1 +x:1 +寒风 1 +x:1 +运输网 1 +x:1 +礼炮声 1 +x:1 +西二里 1 +x:1 +灵机一动 1 +x:1 +土地名 1 +x:1 +撰稿者 1 +x:1 +电影片 1 +x:1 +寒颤 1 +x:1 +海蛎子 1 +x:1 +蛙人 1 +x:1 +金浦 1 +x:1 +观赏节 1 +x:1 +讳言 1 +x:1 +足临泣穴 1 +x:1 +左传 1 +x:1 +粽粑 1 +x:1 +阴阳怪气 1 +x:1 +飧 1 +x:1 +名册 1 +x:1 +醴陵 1 +x:1 +内幕 1 +x:1 +天然气 1 +x:1 +色度 1 +x:1 +组织化 1 +x:1 +世世代代 1 +x:1 +突然 1 +x:1 +家产制 1 +x:1 +两鬓 1 +x:1 +严打 1 +x:1 +由此而言 1 +x:1 +君主国 1 +x:1 +贵州 1 +x:1 +雪人 1 +x:1 +狼獾 1 +x:1 +水箱 1 +x:1 +集贸市场 1 +x:1 +网格 1 +x:1 +菜系 1 +x:1 +网校 1 +x:1 +先入为主 1 +x:1 +信石 1 +x:1 +疫苗 1 +x:1 +丛刊 1 +x:1 +砂土 1 +x:1 +名典 1 +x:1 +锤声 1 +x:1 +辞 42 +x:42 +烟幕弹 1 +x:1 +东风湖 1 +x:1 +丛刻 1 +x:1 +难民 1 +x:1 +违者必究 1 +x:1 +焦作 1 +x:1 +城镇 1 +x:1 +戏马台 1 +x:1 +和气 1 +x:1 +网栅 1 +x:1 +饶恕 1 +x:1 +木袜楦 1 +x:1 +习军 1 +x:1 +解放军报 1 +x:1 +蚜虫 1 +x:1 +希思罗 1 +x:1 +人云亦云 1 +x:1 +泾县 1 +x:1 +大红大紫 1 +x:1 +宫廷政变 1 +x:1 +老年组 1 +x:1 +面貌一新 1 +x:1 +七言诗 1 +x:1 +各州 1 +x:1 +饮鸩止渴 1 +x:1 +电子眼 1 +x:1 +深闭固拒 1 +x:1 +洁身自律 1 +x:1 +名儿 1 +x:1 +兑汇处 1 +x:1 +核发证书 1 +x:1 +观赏船 1 +x:1 +时起时落 1 +x:1 +沉疴 1 +x:1 +肉禽 1 +x:1 +玛电 1 +x:1 +打印台 1 +x:1 +青龙 1 +x:1 +独木 1 +x:1 +笨家伙 1 +x:1 +色带 1 +x:1 +官瘾 1 +x:1 +囫囵 1 +x:1 +全兴队 1 +x:1 +米面 1 +x:1 +得寸进尺 1 +x:1 +隐忍 1 +x:1 +砚田 1 +x:1 +金淌 1 +x:1 +追击战 1 +x:1 +金水 1 +x:1 +油煎火燎 1 +x:1 +采药人 1 +x:1 +左眼 1 +x:1 +秤盘子 1 +x:1 +放在 1 +x:1 +研究界 1 +x:1 +伯塞达市 1 +x:1 +词作者 1 +x:1 +恳求 1 +x:1 +修筑 1 +x:1 +高温区 1 +x:1 +蜀中 1 +x:1 +金龙卡 1 +x:1 +狼狗 1 +x:1 +硬质合金 1 +x:1 +心计 1 +x:1 +水舀子 1 +x:1 +遗影 1 +x:1 +友军 1 +x:1 +解诗者 1 +x:1 +狼狈 1 +x:1 +研究生 1 +x:1 +顽疾 1 +x:1 +遗弃 1 +x:1 +俄国化 1 +x:1 +放映厅 1 +x:1 +视唱练耳 1 +x:1 +焦人 1 +x:1 +铁三角 1 +x:1 +口头禅 1 +x:1 +渔产品 1 +x:1 +金汤 1 +x:1 +风箱 1 +x:1 +冷门 1 +x:1 +见多识广 1 +x:1 +交流会 1 +x:1 +风沙区 1 +x:1 +权力 1 +x:1 +赞同 1 +x:1 +摩梭人 1 +x:1 +毛家沟 1 +x:1 +青鸟 1 +x:1 +怀药 1 +x:1 +绒绣 1 +x:1 +哭声 1 +x:1 +针油剂 1 +x:1 +群情激奋 1 +x:1 +鞭笞 1 +x:1 +静海县 1 +x:1 +永曲乡 1 +x:1 +笨手笨脚 1 +x:1 +妖风 1 +x:1 +遗志 1 +x:1 +坡坡坎坎 1 +x:1 +元宝 1 +x:1 +某部 1 +x:1 +装裱 1 +x:1 +遗忘 1 +x:1 +中间 1 +x:1 +中户 1 +x:1 +金沙 1 +x:1 +茫 2 +x:2 +友谊曲 1 +x:1 +暮 10 +x:10 +杉木 1 +x:1 +一动不动 1 +x:1 +风筝 1 +x:1 +两高 1 +x:1 +联系卡 1 +x:1 +自主经营 1 +x:1 +色彩 1 +x:1 +元宵 1 +x:1 +电解 1 +x:1 +心领神会 1 +x:1 +故智 1 +x:1 +叛乱 1 +x:1 +姘居 1 +x:1 +桑园乡 1 +x:1 +邻座 1 +x:1 +运输线 1 +x:1 +勺状软骨 1 +x:1 +幽森 1 +x:1 +强化食品 1 +x:1 +晋察冀区 1 +x:1 +甘休 1 +x:1 +抢手货 1 +x:1 +车票 1 +x:1 +同情者 1 +x:1 +应有尽有 1 +x:1 +独具匠心 1 +x:1 +儒教 1 +x:1 +柘城县 1 +x:1 +难测 1 +x:1 +倾盆 1 +x:1 +赞道 1 +x:1 +修箱 1 +x:1 +高尔夫 1 +x:1 +膻味 1 +x:1 +放债 1 +x:1 +题跋 1 +x:1 +艺术美 1 +x:1 +肠阻塞 1 +x:1 +贵子 1 +x:1 +牌迷 1 +x:1 +哈萨克 1 +x:1 +副本费 1 +x:1 +自治旗 1 +x:1 +自传 1 +x:1 +马鲛鱼 1 +x:1 +猎潜艇 1 +x:1 +自治日 1 +x:1 +名城 1 +x:1 +起笔 1 +x:1 +天门市 1 +x:1 +乙醛 1 +x:1 +旁 164 +x:164 +激动人心 1 +x:1 +二花脸 1 +x:1 +牙齿 1 +x:1 +匮乏 1 +x:1 +定理 1 +x:1 +侧蚀力 1 +x:1 +沁阳市 1 +x:1 +蹋腰 1 +x:1 +鲸鱼 1 +x:1 +槐秋 1 +x:1 +狼疮 1 +x:1 +移动网 1 +x:1 +锁定 1 +x:1 +荒野 1 +x:1 +谎价 1 +x:1 +辆数 1 +x:1 +诱惑性 1 +x:1 +缩聚 1 +x:1 +寂寞 1 +x:1 +偿付 1 +x:1 +主钢缆 1 +x:1 +判处 1 +x:1 +海涵 1 +x:1 +自体 1 +x:1 +百花苑 1 +x:1 +新街口 1 +x:1 +拙稿 1 +x:1 +系 401 +x:401 +亲合性 1 +x:1 +放假 1 +x:1 +升堂入室 1 +x:1 +鲸鲨 1 +x:1 +自便 1 +x:1 +霍 76 +x:76 +金殿 1 +x:1 +事关重大 1 +x:1 +姑息疗法 1 +x:1 +自侦 1 +x:1 +边疆 1 +x:1 +面不改色 1 +x:1 +单式编制 1 +x:1 +状态 1 +x:1 +灰山鹑 1 +x:1 +九十月份 1 +x:1 +墨 173 +x:173 +发酸 1 +x:1 +承受者 1 +x:1 +特重型 1 +x:1 +运输科 1 +x:1 +非同儿戏 1 +x:1 +两河口 1 +x:1 +为期不远 1 +x:1 +机枪手 1 +x:1 +贵定 1 +x:1 +米酒 1 +x:1 +瓦片子 1 +x:1 +除此外 1 +x:1 +坯子 1 +x:1 +双钩 1 +x:1 +王坡村 1 +x:1 +肉羊 1 +x:1 +化公为私 1 +x:1 +家给人足 1 +x:1 +下片 1 +x:1 +自信 1 +x:1 +艳服 1 +x:1 +自保 1 +x:1 +贵宾 1 +x:1 +猪肝脏 1 +x:1 +霄壤 1 +x:1 +杭 30 +x:30 +波尔多城 1 +x:1 +遗墨 1 +x:1 +挪威 1 +x:1 +元明清 1 +x:1 +贵客 1 +x:1 +均等化 1 +x:1 +狭路相遇 1 +x:1 +猪爪 1 +x:1 +湿疹 1 +x:1 +三明治 1 +x:1 +名园 1 +x:1 +义和庄 1 +x:1 +幽渺 1 +x:1 +岑 6 +x:6 +历久弥新 1 +x:1 +自个 1 +x:1 +内外联 1 +x:1 +张桥村 1 +x:1 +正视图 1 +x:1 +立此存照 1 +x:1 +赞助 1 +x:1 +坚如磐石 1 +x:1 +返青 1 +x:1 +搞清 1 +x:1 +广告辞 1 +x:1 +拉帮结伙 1 +x:1 +民航史 1 +x:1 +军大衣 1 +x:1 +场景 1 +x:1 +担 107 +x:107 +电影界 1 +x:1 +豆 21 +x:21 +为此 1 +x:1 +肯塔基州 1 +x:1 +劫机者 1 +x:1 +晤面 1 +x:1 +为止 1 +x:1 +北岚村 1 +x:1 +落败 1 +x:1 +创见 1 +x:1 +调储 1 +x:1 +启蒙 1 +x:1 +严整 1 +x:1 +乒乓球赛 1 +x:1 +自习 1 +x:1 +赵家井村 1 +x:1 +进货簿 1 +x:1 +拙笨 1 +x:1 +心路 1 +x:1 +千载一时 1 +x:1 +狭路相逢 1 +x:1 +谬论 1 +x:1 +自乐 1 +x:1 +喉头 1 +x:1 +王庄村 1 +x:1 +草门 1 +x:1 +遗失 1 +x:1 +滞纳金 1 +x:1 +包涵 1 +x:1 +酸 21 +x:21 +一团乱麻 1 +x:1 +巴结 1 +x:1 +递水 1 +x:1 +会聚透镜 1 +x:1 +难欺 1 +x:1 +粗茶淡饭 1 +x:1 +信件 1 +x:1 +风痛停 1 +x:1 +双门 1 +x:1 +落后性 1 +x:1 +脐部 1 +x:1 +健齿 1 +x:1 +宁肯 1 +x:1 +利利索索 1 +x:1 +渝 49 +x:49 +官佐 1 +x:1 +麦角 1 +x:1 +雨伞 1 +x:1 +挂线疗法 1 +x:1 +全家福 1 +x:1 +滑车神经 1 +x:1 +届时 1 +x:1 +微量 1 +x:1 +祸不单行 1 +x:1 +研究班 1 +x:1 +剧中人 1 +x:1 +自食其力 1 +x:1 +臣子 1 +x:1 +帽 9 +x:9 +黄岩村 1 +x:1 +放出 1 +x:1 +火急火燎 1 +x:1 +近视 1 +x:1 +探索期 1 +x:1 +矿山 1 +x:1 +农民党 1 +x:1 +首府 1 +x:1 +严守 1 +x:1 +避雷线 1 +x:1 +首度 1 +x:1 +赞美诗 1 +x:1 +饶有 1 +x:1 +和歌 1 +x:1 +热锭冷砸 1 +x:1 +椰子树 1 +x:1 +阿鲁沙 1 +x:1 +自从 1 +x:1 +来之不易 1 +x:1 +刊首语 1 +x:1 +凸 9 +x:9 +非竞赛类 1 +x:1 +双阳区 1 +x:1 +啁啾 1 +x:1 +苫布 1 +x:1 +南充市 1 +x:1 +正确 1 +x:1 +放到 1 +x:1 +高射炮 1 +x:1 +各处 1 +x:1 +露露脸 1 +x:1 +好路率 1 +x:1 +迷航 1 +x:1 +元帅 1 +x:1 +拳拳之心 1 +x:1 +代际 1 +x:1 +仙桃市 1 +x:1 +心身 1 +x:1 +司厅级 1 +x:1 +高锰酸盐 1 +x:1 +卫队长 1 +x:1 +联系国 1 +x:1 +桑皮纸 1 +x:1 +无理方程 1 +x:1 +摄影赛 1 +x:1 +作鸟兽散 1 +x:1 +臃肿 1 +x:1 +敬老车 1 +x:1 +后来居上 1 +x:1 +博采众长 1 +x:1 +风纪 1 +x:1 +屈吴山 1 +x:1 +车价 1 +x:1 +吴旗 1 +x:1 +君主制 1 +x:1 +全员 1 +x:1 +干红酒 1 +x:1 +匀齐 1 +x:1 +双阳 1 +x:1 +中侨 1 +x:1 +贵处 1 +x:1 +铺砌 1 +x:1 +斗车 1 +x:1 +输油管 1 +x:1 +法文版 1 +x:1 +成年累月 1 +x:1 +南辕北辙 1 +x:1 +桠杈 1 +x:1 +和棋 1 +x:1 +图尔卡纳 1 +x:1 +红12师 1 +x:1 +侦缉 1 +x:1 +搏动声 1 +x:1 +拳拳之忱 1 +x:1 +元年 1 +x:1 +议案 1 +x:1 +奔命 1 +x:1 +严令禁止 1 +x:1 +编制员 1 +x:1 +桠枫 1 +x:1 +车主 1 +x:1 +拜会 1 +x:1 +贵姓 1 +x:1 +自治权 1 +x:1 +总统 1 +x:1 +开司米 1 +x:1 +捞砂 1 +x:1 +话费单 1 +x:1 +附体 1 +x:1 +洗衣机厂 1 +x:1 +地球日 1 +x:1 +坡改梯 1 +x:1 +杜门谢客 1 +x:1 +鸣啭 1 +x:1 +宽体 1 +x:1 +车业 1 +x:1 +混沌 1 +x:1 +升降级 1 +x:1 +金榜 1 +x:1 +口服液 1 +x:1 +救命网 1 +x:1 +考研热 1 +x:1 +车上 1 +x:1 +质证 1 +x:1 +剪辑台 1 +x:1 +双城县 1 +x:1 +检验室 1 +x:1 +广西省 1 +x:1 +邻家 1 +x:1 +拜佛 1 +x:1 +子力 1 +x:1 +闭幕 1 +x:1 +前卫队 1 +x:1 +万国邮联 1 +x:1 +附会 1 +x:1 +贵妇 1 +x:1 +贵妃 1 +x:1 +折扣方 1 +x:1 +棋王战 1 +x:1 +渡过 1 +x:1 +断气 1 +x:1 +难言之处 1 +x:1 +难案 1 +x:1 +判定 1 +x:1 +三台山乡 1 +x:1 +判官 1 +x:1 +王家堡村 1 +x:1 +伯明翰 1 +x:1 +奸杀 1 +x:1 +霍山县 1 +x:1 +官爵 1 +x:1 +各奔前程 1 +x:1 +赎罪 1 +x:1 +连史纸 1 +x:1 +双面 1 +x:1 +城郭 1 +x:1 +遗孀 1 +x:1 +信物 1 +x:1 +诗风 1 +x:1 +迷茫 1 +x:1 +费用率 1 +x:1 +阿亚古兹 1 +x:1 +草鞋 1 +x:1 +数不着 1 +x:1 +定睛 1 +x:1 +青马 1 +x:1 +母权制 1 +x:1 +马赛市 1 +x:1 +遗存 1 +x:1 +肉类 1 +x:1 +遗孤 1 +x:1 +名品 1 +x:1 +友善 1 +x:1 +创设 1 +x:1 +举报箱 1 +x:1 +金栀 1 +x:1 +宽仁 1 +x:1 +附件 1 +x:1 +天平秤 1 +x:1 +届期 1 +x:1 +凭证 1 +x:1 +农用品 1 +x:1 +油然而生 1 +x:1 +五谷丰登 1 +x:1 +有所 1 +x:1 +玉茭皮 1 +x:1 +金桥 1 +x:1 +创评 1 +x:1 +反证法 1 +x:1 +做作 1 +x:1 +慧 19 +x:19 +修缮 1 +x:1 +合格者 1 +x:1 +苦 285 +x:285 +记录卡 1 +x:1 +中国话 1 +x:1 +轰 14 +x:14 +心迹 1 +x:1 +为政者 1 +x:1 +届末 1 +x:1 +城邑 1 +x:1 +楹联 1 +x:1 +首尾 1 +x:1 +所作所为 1 +x:1 +色子 1 +x:1 +矿岩 1 +x:1 +科考队 1 +x:1 +恫吓 1 +x:1 +基隆 1 +x:1 +失和 1 +x:1 +双音 1 +x:1 +舞剧团 1 +x:1 +隆誉 1 +x:1 +广告费 1 +x:1 +贺卡式 1 +x:1 +钢 99 +x:99 +电子版 1 +x:1 +尖轨 1 +x:1 +函数线 1 +x:1 +梁山县 1 +x:1 +正秀 1 +x:1 +趋向 1 +x:1 +起端 1 +x:1 +成见 1 +x:1 +彰武县 1 +x:1 +名树 1 +x:1 +鼻 17 +x:17 +相依相偎 1 +x:1 +首岁 1 +x:1 +附上 1 +x:1 +网海 1 +x:1 +不厌其详 1 +x:1 +蓬荜生辉 1 +x:1 +幸福一村 1 +x:1 +无处不在 1 +x:1 +宽严 1 +x:1 +精密度 1 +x:1 +单峰驼 1 +x:1 +校景 1 +x:1 +不绝于耳 1 +x:1 +节节胜利 1 +x:1 +混淆 1 +x:1 +附中 1 +x:1 +心软 1 +x:1 +尧 14 +x:14 +名吃 1 +x:1 +吵吵嚷嚷 1 +x:1 +太空车 1 +x:1 +伶仃洋 1 +x:1 +怪态 1 +x:1 +性感 1 +x:1 +不可抗力 1 +x:1 +附丽 1 +x:1 +遗害 1 +x:1 +乒乓球迷 1 +x:1 +惨杀 1 +x:1 +环行线 1 +x:1 +满洲里 1 +x:1 +车位 1 +x:1 +岢岚 1 +x:1 +素不相识 1 +x:1 +扫描器 1 +x:1 +真菌学 1 +x:1 +心肌 1 +x:1 +内外资 1 +x:1 +场次 1 +x:1 +肌骨 1 +x:1 +严格 1 +x:1 +卡亚尼 1 +x:1 +心肝 1 +x:1 +韭菜 1 +x:1 +处世 1 +x:1 +胡椒粉 1 +x:1 +宋杖子镇 1 +x:1 +名寺 1 +x:1 +广告节 1 +x:1 +邪教 1 +x:1 +鼓楼 1 +x:1 +金朝 1 +x:1 +落聘 1 +x:1 +制定者 1 +x:1 +七歪八扭 1 +x:1 +和暖 1 +x:1 +久负盛名 1 +x:1 +诗韵 1 +x:1 +资山镇 1 +x:1 +组织奖 1 +x:1 +体无完肤 1 +x:1 +所见所闻 1 +x:1 +高精尖 1 +x:1 +萌生 1 +x:1 +放射 1 +x:1 +同情话 1 +x:1 +各地 1 +x:1 +混战 1 +x:1 +龃龉 1 +x:1 +日本帝国 1 +x:1 +草食 1 +x:1 +七七 1 +x:1 +明石市 1 +x:1 +七一 1 +x:1 +心胆 1 +x:1 +垄坪乡 1 +x:1 +名家 1 +x:1 +马赛克 1 +x:1 +和田市 1 +x:1 +吞蚀 1 +x:1 +金杨 1 +x:1 +名宿 1 +x:1 +蛟 1 +x:1 +敞 4 +x:4 +名宅 1 +x:1 +比例规 1 +x:1 +七中 1 +x:1 +怀表 1 +x:1 +哭叫 1 +x:1 +内外贸 1 +x:1 +排行榜 1 +x:1 +肉猪 1 +x:1 +时滞 1 +x:1 +连心箱 1 +x:1 +官桥村 1 +x:1 +处于 1 +x:1 +檑石 1 +x:1 +名学 1 +x:1 +格罗宁根 1 +x:1 +杏花村 1 +x:1 +风灯 1 +x:1 +食道 1 +x:1 +咫尺之遥 1 +x:1 +瞧瞧 1 +x:1 +首发 1 +x:1 +烈烈 1 +x:1 +摘除 1 +x:1 +风灾 1 +x:1 +红白事 1 +x:1 +轻债国 1 +x:1 +吕祖庙 1 +x:1 +购票单 1 +x:1 +拟议 1 +x:1 +甩 48 +x:48 +恩赐 1 +x:1 +洛阳城 1 +x:1 +异质性 1 +x:1 +含苞 1 +x:1 +名字 1 +x:1 +处人 1 +x:1 +和易 1 +x:1 +离人 1 +x:1 +巴伐利亚 1 +x:1 +铺盖 1 +x:1 +正盐 1 +x:1 +伪君子 1 +x:1 +抱成一团 1 +x:1 +喉咙 1 +x:1 +吴起镇 1 +x:1 +无敌意 1 +x:1 +惊诧不已 1 +x:1 +网扣 1 +x:1 +广告色 1 +x:1 +影评 1 +x:1 +土地庙 1 +x:1 +难办 1 +x:1 +唯条件论 1 +x:1 +奢华 1 +x:1 +处以 1 +x:1 +以点概全 1 +x:1 +惨案 1 +x:1 +钱财 1 +x:1 +修炼 1 +x:1 +左右 1 +x:1 +客流量 1 +x:1 +诗集 1 +x:1 +肉牛 1 +x:1 +线速度 1 +x:1 +宣教科 1 +x:1 +食量 1 +x:1 +定神 1 +x:1 +趸船 1 +x:1 +电子系 1 +x:1 +听证会 1 +x:1 +衣鱼 1 +x:1 +遗恨 1 +x:1 +殊异于世 1 +x:1 +匀速 1 +x:1 +肉片 1 +x:1 +忽地 1 +x:1 +雷打不动 1 +x:1 +抢行 1 +x:1 +砂岩 1 +x:1 +金星 1 +x:1 +巴毛 1 +x:1 +克朗 1 +x:1 +天然村 1 +x:1 +神脑 1 +x:1 +离京 1 +x:1 +源于 1 +x:1 +金昌 1 +x:1 +检验员 1 +x:1 +发发 1 +x:1 +蜀籁 1 +x:1 +耳熟 1 +x:1 +炼乳 1 +x:1 +处刑 1 +x:1 +杏花村镇 1 +x:1 +手表 1 +x:1 +扪心自省 1 +x:1 +酥麻 1 +x:1 +痴醉 1 +x:1 +货机 1 +x:1 +首创 1 +x:1 +电影票 1 +x:1 +七伯 1 +x:1 +农民工 1 +x:1 +烈焰 1 +x:1 +滥竽充数 1 +x:1 +落脚 1 +x:1 +两通 1 +x:1 +集资 1 +x:1 +泸西 1 +x:1 +玉米秸 1 +x:1 +心脏 1 +x:1 +统一战线 1 +x:1 +金印 1 +x:1 +姨父 1 +x:1 +为副 1 +x:1 +后备金 1 +x:1 +冷链 1 +x:1 +洋货 1 +x:1 +心脑 1 +x:1 +贵国 1 +x:1 +粗放经营 1 +x:1 +青铜 1 +x:1 +非统 1 +x:1 +筋斗 1 +x:1 +青铁 1 +x:1 +贺家山 1 +x:1 +本质论 1 +x:1 +性解放 1 +x:1 +耿耿 1 +x:1 +斗胆 1 +x:1 +金曲 1 +x:1 +迷路 1 +x:1 +军令 1 +x:1 +金属带 1 +x:1 +比例表 1 +x:1 +蔡锷路 1 +x:1 +藏头露尾 1 +x:1 +颈淋巴 1 +x:1 +木地板 1 +x:1 +幻 11 +x:11 +首功 1 +x:1 +督察权 1 +x:1 +原油 1 +x:1 +城调队 1 +x:1 +恶名 1 +x:1 +一虎势单 1 +x:1 +心腹 1 +x:1 +天然林 1 +x:1 +闭关 1 +x:1 +元凶 1 +x:1 +油然 1 +x:1 +等而下之 1 +x:1 +吴榜 1 +x:1 +土地局 1 +x:1 +捷克队 1 +x:1 +首先 1 +x:1 +起程 1 +x:1 +显露 1 +x:1 +淳安县 1 +x:1 +军休 1 +x:1 +靴子 1 +x:1 +官绅 1 +x:1 +护卫艇 1 +x:1 +翌年 1 +x:1 +度量衡 1 +x:1 +蚊塘镇 1 +x:1 +满山红 1 +x:1 +财政科 1 +x:1 +包括 1 +x:1 +妙想迁得 1 +x:1 +青青 1 +x:1 +令箭荷花 1 +x:1 +瘦西湖 1 +x:1 +洋补品 1 +x:1 +辆次 1 +x:1 +铁杆儿 1 +x:1 +令人担忧 1 +x:1 +人情电 1 +x:1 +黑帮 1 +x:1 +责任牌 1 +x:1 +控制台 1 +x:1 +毛玻璃 1 +x:1 +恍若 1 +x:1 +背山起楼 1 +x:1 +砂心 1 +x:1 +包抄 1 +x:1 +黑道 1 +x:1 +银杏王 1 +x:1 +北川江 1 +x:1 +鸭嘴笔 1 +x:1 +产蛋鸡 1 +x:1 +习好 1 +x:1 +延安城 1 +x:1 +精密化 1 +x:1 +旁敲侧击 1 +x:1 +车江乡 1 +x:1 +护卫舰 1 +x:1 +掏心战 1 +x:1 +郫县 1 +x:1 +庸才 1 +x:1 +科威特 1 +x:1 +正理 1 +x:1 +洛子峰 1 +x:1 +辍笔 1 +x:1 +定稿 1 +x:1 +巷道 1 +x:1 +老太婆 1 +x:1 +遗嘱 1 +x:1 +吵嘴 1 +x:1 +实职 1 +x:1 +达观 1 +x:1 +官纱 1 +x:1 +夜空 1 +x:1 +夔 1 +x:1 +风物 1 +x:1 +包扎 1 +x:1 +象牙质 1 +x:1 +决定 1 +x:1 +民航局 1 +x:1 +中间体 1 +x:1 +个旧市 1 +x:1 +破落户 1 +x:1 +富含氢 1 +x:1 +说真的 1 +x:1 +西八里乡 1 +x:1 +手记 1 +x:1 +民国初年 1 +x:1 +饱经风霜 1 +x:1 +苏打 1 +x:1 +病字旁儿 1 +x:1 +学富五车 1 +x:1 +细菌 1 +x:1 +卡拉克泰 1 +x:1 +扩编 1 +x:1 +力辞 1 +x:1 +犯嘀咕 1 +x:1 +不可估量 1 +x:1 +太空船 1 +x:1 +搜查部 1 +x:1 +订货人 1 +x:1 +包扶 1 +x:1 +新河县 1 +x:1 +运量 1 +x:1 +逃亡者 1 +x:1 +元勋 1 +x:1 +责任状 1 +x:1 +落花 1 +x:1 +氧化铜 1 +x:1 +卓有成效 1 +x:1 +手语 1 +x:1 +高压包 1 +x:1 +电影站 1 +x:1 +为之一变 1 +x:1 +收割机 1 +x:1 +四季豆 1 +x:1 +组织家 1 +x:1 +影视 1 +x:1 +涡轮 1 +x:1 +干粮 1 +x:1 +离愁别绪 1 +x:1 +独断独行 1 +x:1 +板板整整 1 +x:1 +逃之夭夭 1 +x:1 +愚昧 1 +x:1 +麦蚜 1 +x:1 +草驴 1 +x:1 +高压区 1 +x:1 +包房 1 +x:1 +把门 1 +x:1 +贫瘠化 1 +x:1 +包户 1 +x:1 +金华 1 +x:1 +初访者 1 +x:1 +司仪 1 +x:1 +记录式 1 +x:1 +戆 1 +x:1 +渡航 1 +x:1 +清水县 1 +x:1 +司令 1 +x:1 +秋分点 1 +x:1 +为政 1 +x:1 +猛醒 1 +x:1 +名声 1 +x:1 +辽代 1 +x:1 +渡船 1 +x:1 +订货会 1 +x:1 +幽怨 1 +x:1 +互助县 1 +x:1 +之一 1 +x:1 +数轴 1 +x:1 +落荒 1 +x:1 +康安路 1 +x:1 +鳝鱼 1 +x:1 +阿拉善湾 1 +x:1 +釉制 1 +x:1 +碘胺 1 +x:1 +立等 1 +x:1 +奉节县 1 +x:1 +放开 1 +x:1 +缸 33 +x:33 +放弃 1 +x:1 +棱角 1 +x:1 +新光报 1 +x:1 +瓢形 1 +x:1 +青阳 1 +x:1 +自由邦 1 +x:1 +管辖 1 +x:1 +最佳奖 1 +x:1 +百花路 1 +x:1 +严正 1 +x:1 +棉纱锭 1 +x:1 +控制力 1 +x:1 +为数 1 +x:1 +正电 1 +x:1 +具体而微 1 +x:1 +首倡 1 +x:1 +惨毒 1 +x:1 +放映室 1 +x:1 +狼窝 1 +x:1 +步犁 1 +x:1 +克敌 1 +x:1 +关心 1 +x:1 +摄影者 1 +x:1 +饶平 1 +x:1 +耳环 1 +x:1 +突破 1 +x:1 +预报网 1 +x:1 +焦煤 1 +x:1 +梭子蟹 1 +x:1 +总起来讲 1 +x:1 +清产核资 1 +x:1 +色块 1 +x:1 +主副食 1 +x:1 +砂布 1 +x:1 +无敌手 1 +x:1 +邻国 1 +x:1 +建国门 1 +x:1 +桑拿浴 1 +x:1 +鸣放 1 +x:1 +天门冬 1 +x:1 +心中有数 1 +x:1 +高尔克 1 +x:1 +圣克鲁 1 +x:1 +处理机 1 +x:1 +外高桥 1 +x:1 +彩桥 1 +x:1 +富裕户 1 +x:1 +病源 1 +x:1 +氢氧根 1 +x:1 +种地人 1 +x:1 +领证率 1 +x:1 +贼船 1 +x:1 +惨死 1 +x:1 +一知半解 1 +x:1 +奔头 1 +x:1 +三令五申 1 +x:1 +吕望乡 1 +x:1 +延边队 1 +x:1 +绥靖区 1 +x:1 +和数 1 +x:1 +辽中 1 +x:1 +信纸 1 +x:1 +为时 1 +x:1 +鸿雁传书 1 +x:1 +严母 1 +x:1 +蜀绣 1 +x:1 +丢标 1 +x:1 +可视电话 1 +x:1 +名堂 1 +x:1 +挽额 1 +x:1 +辽东 1 +x:1 +小炒 1 +x:1 +幽情 1 +x:1 +闭卷 1 +x:1 +高兴处 1 +x:1 +克旗 1 +x:1 +民族魂 1 +x:1 +放心 1 +x:1 +唤醒 1 +x:1 +白湖乡 1 +x:1 +山豆根 1 +x:1 +分庭抗礼 1 +x:1 +电子秤 1 +x:1 +嘉年华会 1 +x:1 +金龙山 1 +x:1 +遥感学家 1 +x:1 +渔业大臣 1 +x:1 +消息报 1 +x:1 +抢走 1 +x:1 +衣饰 1 +x:1 +含片式 1 +x:1 +郑州省 1 +x:1 +宰客 1 +x:1 +泣诉 1 +x:1 +阴道炎 1 +x:1 +梅花鹿 1 +x:1 +名心 1 +x:1 +举报点 1 +x:1 +驻军 1 +x:1 +幽期 1 +x:1 +物质化 1 +x:1 +和刻本 1 +x:1 +隐睾症 1 +x:1 +住房率 1 +x:1 +加农炮弹 1 +x:1 +各区 1 +x:1 +戴 485 +x:485 +金指 1 +x:1 +调剂 1 +x:1 +尺蠖 1 +x:1 +水族馆 1 +x:1 +倔犟汉 1 +x:1 +克扣 1 +x:1 +蓟县 1 +x:1 +吹箫者 1 +x:1 +赞叹 1 +x:1 +落落 1 +x:1 +抢购 1 +x:1 +量才适用 1 +x:1 +晋冀豫 1 +x:1 +峡中 1 +x:1 +修理 1 +x:1 +看不上眼 1 +x:1 +剔 1 +x:1 +瞩目 1 +x:1 +赞叹不已 1 +x:1 +断定 1 +x:1 +巡 7 +x:7 +活菩萨 1 +x:1 +肉眼 1 +x:1 +刺激素 1 +x:1 +罚没款 1 +x:1 +矿棉 1 +x:1 +叫花子 1 +x:1 +白发苍苍 1 +x:1 +诈唬 1 +x:1 +各卷 1 +x:1 +讨论稿 1 +x:1 +政局 1 +x:1 +氨基酸 1 +x:1 +疲惫 1 +x:1 +误事 1 +x:1 +杉树 1 +x:1 +徐州 1 +x:1 +公网 1 +x:1 +独处 1 +x:1 +手足 1 +x:1 +为之一喜 1 +x:1 +难以为继 1 +x:1 +抢跳 1 +x:1 +像样 1 +x:1 +玉米糠 1 +x:1 +分配观 1 +x:1 +洋服 1 +x:1 +幽林 1 +x:1 +立竿见影 1 +x:1 +涵养 1 +x:1 +花团锦簇 1 +x:1 +金叶 1 +x:1 +合格证 1 +x:1 +名录 1 +x:1 +各县 1 +x:1 +副县级 1 +x:1 +借债者 1 +x:1 +抢跑 1 +x:1 +铁甲车 1 +x:1 +夹 60 +x:60 +芝麻官 1 +x:1 +蒙罗维亚 1 +x:1 +专利法 1 +x:1 +难找 1 +x:1 +放声 1 +x:1 +短平快 1 +x:1 +铐 2 +x:2 +长梁乡 1 +x:1 +黄表纸 1 +x:1 +利害得失 1 +x:1 +丘墓 1 +x:1 +风琴 1 +x:1 +判决 1 +x:1 +玉米粥 1 +x:1 +三连动 1 +x:1 +草鱼 1 +x:1 +影迷 1 +x:1 +玉米粒 1 +x:1 +克拉 1 +x:1 +阑珊处 1 +x:1 +枝枝蔓蔓 1 +x:1 +广空 1 +x:1 +平果县 1 +x:1 +梅里达 1 +x:1 +米饭 1 +x:1 +芒种 1 +x:1 +揭穿 1 +x:1 +火炉城 1 +x:1 +网架 1 +x:1 +邪恶 1 +x:1 +一路 1 +x:1 +湛江 1 +x:1 +空荡荡 1 +x:1 +外引内联 1 +x:1 +风痹 1 +x:1 +下一代 1 +x:1 +误会 1 +x:1 +自治法 1 +x:1 +阳朔县 1 +x:1 +放大 1 +x:1 +波尔多市 1 +x:1 +金戒 1 +x:1 +各别 1 +x:1 +奔忙 1 +x:1 +问题性 1 +x:1 +青民盟 1 +x:1 +愚懦 1 +x:1 +误伤 1 +x:1 +蒙古人种 1 +x:1 +演习场 1 +x:1 +误传 1 +x:1 +球心 1 +x:1 +潮安县 1 +x:1 +手谕 1 +x:1 +影踪 1 +x:1 +谢东村 1 +x:1 +拟于不伦 1 +x:1 +安葬 1 +x:1 +网柱 1 +x:1 +责任田 1 +x:1 +单义性 1 +x:1 +解放滩镇 1 +x:1 +脱保 1 +x:1 +分散性 1 +x:1 +脱卸式 1 +x:1 +果蔬室 1 +x:1 +葛布 1 +x:1 +风疹 1 +x:1 +领事馆 1 +x:1 +大吃大喝 1 +x:1 +贵刊 1 +x:1 +扶志 1 +x:1 +钱袋 1 +x:1 +惨淡 1 +x:1 +婴幼儿 1 +x:1 +种猪场 1 +x:1 +总的来看 1 +x:1 +高耗能 1 +x:1 +好事多磨 1 +x:1 +性急 1 +x:1 +沙沟村 1 +x:1 +捆儿 1 +x:1 +节粮型 1 +x:1 +注册人 1 +x:1 +守门 1 +x:1 +冷静 1 +x:1 +他山石 1 +x:1 +利息率 1 +x:1 +肉瘤 1 +x:1 +雪顿节 1 +x:1 +沿阶草 1 +x:1 +正班 1 +x:1 +船用 1 +x:1 +广西籍 1 +x:1 +彭 672 +x:672 +耳畔 1 +x:1 +难挨 1 +x:1 +乳臭未干 1 +x:1 +前湾 1 +x:1 +发动 1 +x:1 +左左右右 1 +x:1 +昝 5 +x:5 +色光 1 +x:1 +铁证如山 1 +x:1 +幽暗 1 +x:1 +讲用会 1 +x:1 +室 84 +x:84 +河滩地 1 +x:1 +衣食 1 +x:1 +集思广益 1 +x:1 +做菜 1 +x:1 +妖雾 1 +x:1 +葛店 1 +x:1 +寒露 1 +x:1 +乱弹琴 1 +x:1 +江浦县 1 +x:1 +筏 1 +x:1 +灾害点 1 +x:1 +寿山 1 +x:1 +白种人 1 +x:1 +风电 1 +x:1 +非但 1 +x:1 +奥新社 1 +x:1 +信贷处 1 +x:1 +名师 1 +x:1 +蕲春 1 +x:1 +横挑鼻子 1 +x:1 +风生 1 +x:1 +晚会局 1 +x:1 +和悦 1 +x:1 +肉畜 1 +x:1 +为怪 1 +x:1 +贵党 1 +x:1 +狭心症 1 +x:1 +两面 1 +x:1 +宁津县 1 +x:1 +哭喊 1 +x:1 +二面角 1 +x:1 +冕 7 +x:7 +愚拙 1 +x:1 +土坳村 1 +x:1 +货邮 1 +x:1 +精制油 1 +x:1 +启运 1 +x:1 +启迪 1 +x:1 +行侠仗义 1 +x:1 +一气之下 1 +x:1 +扎科帕内 1 +x:1 +臣僚 1 +x:1 +检验单 1 +x:1 +海气 1 +x:1 +耳目 1 +x:1 +变异性 1 +x:1 +莱家村 1 +x:1 +凌水河 1 +x:1 +天然性 1 +x:1 +手车 1 +x:1 +断井颓垣 1 +x:1 +四站村 1 +x:1 +腊 2 +x:2 +时刻处 1 +x:1 +把酒 1 +x:1 +电子管 1 +x:1 +麦冬草 1 +x:1 +狼群 1 +x:1 +藉以窥知 1 +x:1 +各党 1 +x:1 +高龄 1 +x:1 +关山重重 1 +x:1 +信笺 1 +x:1 +剔除 1 +x:1 +草黄 1 +x:1 +线规 1 +x:1 +花岗岩 1 +x:1 +搭腔 1 +x:1 +静净斋 1 +x:1 +器材 1 +x:1 +肉用 1 +x:1 +拳 30 +x:30 +说词 1 +x:1 +呆笨 1 +x:1 +货郎 1 +x:1 +年产量 1 +x:1 +摇曳多姿 1 +x:1 +行政部门 1 +x:1 +瞿河乡 1 +x:1 +铅条 1 +x:1 +覆膜 1 +x:1 +踪影 1 +x:1 +难怪 1 +x:1 +检验史 1 +x:1 +阅报室 1 +x:1 +手边 1 +x:1 +电击穴 1 +x:1 +政工 1 +x:1 +发言组 1 +x:1 +援粮 1 +x:1 +双黄 1 +x:1 +马普托 1 +x:1 +麦苗 1 +x:1 +大块文章 1 +x:1 +揭破 1 +x:1 +添加剂 1 +x:1 +断奶 1 +x:1 +抢运 1 +x:1 +罢休 1 +x:1 +锁具 1 +x:1 +中国画界 1 +x:1 +可持续性 1 +x:1 +英雄豪杰 1 +x:1 +右侧 1 +x:1 +届满 1 +x:1 +风瘫 1 +x:1 +首善 1 +x:1 +邻县 1 +x:1 +麦芽 1 +x:1 +小说集 1 +x:1 +三隐潭 1 +x:1 +马赛城 1 +x:1 +心虚 1 +x:1 +先决条件 1 +x:1 +沙溪 1 +x:1 +砂子 1 +x:1 +法律学 1 +x:1 +重起炉灶 1 +x:1 +手迹 1 +x:1 +汽修 1 +x:1 +联合报 1 +x:1 +麦芒 1 +x:1 +冷霜 1 +x:1 +轻工业 1 +x:1 +切实有力 1 +x:1 +定级 1 +x:1 +黑家鼠 1 +x:1 +先师 1 +x:1 +达赖 1 +x:1 +肝部 1 +x:1 +绿野 1 +x:1 +恶化 1 +x:1 +关令 1 +x:1 +精密型 1 +x:1 +荞麦窝 1 +x:1 +门门道道 1 +x:1 +万古流芳 1 +x:1 +断壁 1 +x:1 +萤火虫儿 1 +x:1 +蛀齿 1 +x:1 +运动队 1 +x:1 +八辛庄村 1 +x:1 +两院 1 +x:1 +右下 1 +x:1 +右上 1 +x:1 +土地奖 1 +x:1 +推迟 1 +x:1 +世 180 +x:180 +尼尔基 1 +x:1 +淘米箩 1 +x:1 +寒门 1 +x:1 +矿工 1 +x:1 +魔幻 1 +x:1 +环节税 1 +x:1 +罢了 1 +x:1 +平放 1 +x:1 +儿女式 1 +x:1 +中西亚 1 +x:1 +目光短浅 1 +x:1 +密封圈 1 +x:1 +财政系 1 +x:1 +火卫三 1 +x:1 +饮食摊 1 +x:1 +波通社 1 +x:1 +习尚 1 +x:1 +麦草 1 +x:1 +投保人 1 +x:1 +观念学 1 +x:1 +圣里斯特 1 +x:1 +搭腰 1 +x:1 +恶劣 1 +x:1 +判别 1 +x:1 +防疫费 1 +x:1 +各户 1 +x:1 +定编 1 +x:1 +麦茬 1 +x:1 +揭秘 1 +x:1 +放学 1 +x:1 +小提琴家 1 +x:1 +顾名思义 1 +x:1 +关上 1 +x:1 +判分 1 +x:1 +甘丹寺 1 +x:1 +益粮 1 +x:1 +难懂 1 +x:1 +辛酸处 1 +x:1 +想来 1 +x:1 +判刑 1 +x:1 +厌倦 1 +x:1 +鸣叫 1 +x:1 +就医点 1 +x:1 +放宽 1 +x:1 +多党制 1 +x:1 +研究科 1 +x:1 +迪恩街 1 +x:1 +好不容易 1 +x:1 +名山 1 +x:1 +二房 1 +x:1 +文昭关 1 +x:1 +字调 1 +x:1 +随之而来 1 +x:1 +包村 1 +x:1 +顺差额 1 +x:1 +数词 1 +x:1 +控制器 1 +x:1 +炸掉 1 +x:1 +砥 1 +x:1 +数说 1 +x:1 +耐旱性 1 +x:1 +白沟村 1 +x:1 +泣血 1 +x:1 +垃桶筒 1 +x:1 +颜 86 +x:86 +难愈 1 +x:1 +火卫二 1 +x:1 +延缓 1 +x:1 +北大仓 1 +x:1 +焦点 1 +x:1 +波流固村 1 +x:1 +贸易 1 +x:1 +白毛风 1 +x:1 +揭示 1 +x:1 +工农党 1 +x:1 +吴江 1 +x:1 +太平县城 1 +x:1 +守静 1 +x:1 +茉莉花 1 +x:1 +鹰潭市 1 +x:1 +采茶 1 +x:1 +祭堂 1 +x:1 +金乡县 1 +x:1 +民航处 1 +x:1 +诗选 1 +x:1 +两难 1 +x:1 +语体文 1 +x:1 +茶社 1 +x:1 +焚化 1 +x:1 +灶房 1 +x:1 +断堤 1 +x:1 +名将 1 +x:1 +仿制者 1 +x:1 +数论 1 +x:1 +偷税款 1 +x:1 +三连冠 1 +x:1 +工农兵 1 +x:1 +实名制 1 +x:1 +一睹芳容 1 +x:1 +包机 1 +x:1 +砣子 1 +x:1 +木姐 1 +x:1 +双龙 1 +x:1 +和约 1 +x:1 +谣言 1 +x:1 +清丰县 1 +x:1 +寡母 1 +x:1 +肋 3 +x:3 +语惊四座 1 +x:1 +泛金 1 +x:1 +贵体 1 +x:1 +吴王 1 +x:1 +脱逃率 1 +x:1 +苦瓜酒 1 +x:1 +痰祛湿 1 +x:1 +谚语 1 +x:1 +定息 1 +x:1 +肌节 1 +x:1 +大小事 1 +x:1 +误判 1 +x:1 +网窝 1 +x:1 +双联 1 +x:1 +旧社会 1 +x:1 +悬浮剂 1 +x:1 +践约 1 +x:1 +摆样子 1 +x:1 +脊椎炎 1 +x:1 +团州委 1 +x:1 +沙滩 1 +x:1 +各位 1 +x:1 +韬光养晦 1 +x:1 +钱排镇 1 +x:1 +锦上添花 1 +x:1 +雪山 1 +x:1 +显赫 1 +x:1 +返航 1 +x:1 +特性 1 +x:1 +测报站 1 +x:1 +青贮 1 +x:1 +进程表 1 +x:1 +模唱 1 +x:1 +双考 1 +x:1 +网站 1 +x:1 +烫 22 +x:22 +肉欲 1 +x:1 +自营 1 +x:1 +惨烈 1 +x:1 +实施者 1 +x:1 +命运感 1 +x:1 +雪层 1 +x:1 +工农业 1 +x:1 +光山县 1 +x:1 +扫描仪 1 +x:1 +娘胎 1 +x:1 +托运 1 +x:1 +鹜窝村 1 +x:1 +自家 1 +x:1 +业已 1 +x:1 +特搜部 1 +x:1 +庸人 1 +x:1 +集中度 1 +x:1 +彪形大汉 1 +x:1 +油路化 1 +x:1 +有去无回 1 +x:1 +中间商 1 +x:1 +自审 1 +x:1 +非分 1 +x:1 +白花花 1 +x:1 +宽套 1 +x:1 +自卫性 1 +x:1 +污水口 1 +x:1 +领带夹 1 +x:1 +定安县 1 +x:1 +掉价 1 +x:1 +坏东西 1 +x:1 +满盘皆输 1 +x:1 +全身像 1 +x:1 +尖顶 1 +x:1 +脑袋瓜 1 +x:1 +眷属 1 +x:1 +穗建 1 +x:1 +安邦定国 1 +x:1 +如释重负 1 +x:1 +寡弟媳 1 +x:1 +赵光镇 1 +x:1 +轰动性 1 +x:1 +双肩 1 +x:1 +危地马拉 1 +x:1 +钌铞儿 1 +x:1 +风格 1 +x:1 +作件 1 +x:1 +揭晓 1 +x:1 +此著 1 +x:1 +独生 1 +x:1 +兢兢业业 1 +x:1 +三审制 1 +x:1 +莲芰生烟 1 +x:1 +疏浚船 1 +x:1 +臣下 1 +x:1 +耳根 1 +x:1 +袖珍版 1 +x:1 +罢免 1 +x:1 +鱼冻 1 +x:1 +市话费 1 +x:1 +手里 1 +x:1 +不稳平衡 1 +x:1 +中外代 1 +x:1 +幽篁 1 +x:1 +前进 1 +x:1 +难分难解 1 +x:1 +梭子鱼 1 +x:1 +伪币 1 +x:1 +炸糕 1 +x:1 +网箱 1 +x:1 +心广体胖 1 +x:1 +大东区 1 +x:1 +辣椒酱 1 +x:1 +证者 1 +x:1 +遗 10 +x:10 +九曲溪 1 +x:1 +自娱 1 +x:1 +包租 1 +x:1 +贵乎 1 +x:1 +各业 1 +x:1 +雪崩 1 +x:1 +横峰县 1 +x:1 +爱民如子 1 +x:1 +双腿 1 +x:1 +木背椅 1 +x:1 +地方军 1 +x:1 +各个 1 +x:1 +右倾 1 +x:1 +处在 1 +x:1 +和美 1 +x:1 +友谊路 1 +x:1 +热销书 1 +x:1 +青豆 1 +x:1 +双腕 1 +x:1 +T 2 +x:2 +艇次 1 +x:1 +抢道 1 +x:1 +弗罗拉 1 +x:1 +妖言 1 +x:1 +兀 1 +x:1 +爱国心 1 +x:1 +蜗行牛步 1 +x:1 +征兵制 1 +x:1 +滕 38 +x:38 +微利价 1 +x:1 +网篮 1 +x:1 +黄壁庄 1 +x:1 +喜文嗜乐 1 +x:1 +英雄好汉 1 +x:1 +精雕细镂 1 +x:1 +墙围子 1 +x:1 +官方 1 +x:1 +心想事成 1 +x:1 +双脚 1 +x:1 +神色 1 +x:1 +票价 1 +x:1 +辣丝丝 1 +x:1 +风云变幻 1 +x:1 +财政所 1 +x:1 +左方 1 +x:1 +远走他乡 1 +x:1 +网笼 1 +x:1 +抗逆性 1 +x:1 +惊雷破柱 1 +x:1 +难缠 1 +x:1 +友谊赛 1 +x:1 +市运会 1 +x:1 +蜡花 1 +x:1 +无是非观 1 +x:1 +像头 1 +x:1 +双臂 1 +x:1 +包票 1 +x:1 +白日做梦 1 +x:1 +差点 1 +x:1 +刭 1 +x:1 +原生质 1 +x:1 +之和 1 +x:1 +厌世 1 +x:1 +各人 1 +x:1 +和缓 1 +x:1 +马钱子 1 +x:1 +洁白 1 +x:1 +无儿无女 1 +x:1 +映管 1 +x:1 +莲子 1 +x:1 +审计局 1 +x:1 +四季青 1 +x:1 +步校 1 +x:1 +怀里 1 +x:1 +惊人之举 1 +x:1 +货车 1 +x:1 +衡阳 1 +x:1 +羞怯 1 +x:1 +银杏树 1 +x:1 +承载力 1 +x:1 +货轮 1 +x:1 +丧葬 1 +x:1 +牛街 1 +x:1 +穷骨头 1 +x:1 +绸缎 1 +x:1 +鸡肠鼠肚 1 +x:1 +贵人 1 +x:1 +同案犯 1 +x:1 +橡胶林 1 +x:1 +再生产 1 +x:1 +上野 1 +x:1 +部署 1 +x:1 +酷虐 1 +x:1 +书记长 1 +x:1 +庸俗 1 +x:1 +鼻烟壶 1 +x:1 +信条 1 +x:1 +肌肤 1 +x:1 +蒸化机 1 +x:1 +平山县 1 +x:1 +街街巷巷 1 +x:1 +惨状 1 +x:1 +管中窥豹 1 +x:1 +交通船 1 +x:1 +迷阵 1 +x:1 +椒 2 +x:2 +分裂生殖 1 +x:1 +落马 1 +x:1 +严父 1 +x:1 +粟 13 +x:13 +遗书 1 +x:1 +探索热 1 +x:1 +汽化 1 +x:1 +返聘 1 +x:1 +谢顶 1 +x:1 +肌肉 1 +x:1 +电子柜 1 +x:1 +名湖 1 +x:1 +民族节 1 +x:1 +杉皮 1 +x:1 +散酒 1 +x:1 +草芥 1 +x:1 +刮 85 +x:85 +电子枪 1 +x:1 +砚斋 1 +x:1 +宽宽 1 +x:1 +以偏概全 1 +x:1 +组织法 1 +x:1 +宽容 1 +x:1 +短出出 1 +x:1 +娘舅 1 +x:1 +麦鸡 1 +x:1 +心髓 1 +x:1 +伏击战 1 +x:1 +遗业 1 +x:1 +诗趣 1 +x:1 +宫娥 1 +x:1 +毫无办法 1 +x:1 +续聘费 1 +x:1 +俩 184 +x:184 +拜寿 1 +x:1 +信服 1 +x:1 +老年型 1 +x:1 +盖州 1 +x:1 +右卫 1 +x:1 +草苫 1 +x:1 +钟祥市 1 +x:1 +宽宏 1 +x:1 +台球厅 1 +x:1 +正气 1 +x:1 +平山区 1 +x:1 +霍乱 1 +x:1 +锅 82 +x:82 +吠形吠声 1 +x:1 +步步 1 +x:1 +志大才疏 1 +x:1 +诗赋 1 +x:1 +两课 1 +x:1 +农业税费 1 +x:1 +风格各异 1 +x:1 +寒衣 1 +x:1 +做成 1 +x:1 +羚羊绒 1 +x:1 +厂证 1 +x:1 +挡 45 +x:45 +荷包 1 +x:1 +姜堰 1 +x:1 +芒果 1 +x:1 +民族舞 1 +x:1 +恶性 1 +x:1 +电子束 1 +x:1 +言行录 1 +x:1 +拥有者 1 +x:1 +黑棋 1 +x:1 +学无止境 1 +x:1 +正法 1 +x:1 +节资率 1 +x:1 +前轮 1 +x:1 +棉花点 1 +x:1 +卡拉巴尔 1 +x:1 +麦麸 1 +x:1 +色丝 1 +x:1 +遗事 1 +x:1 +打照面儿 1 +x:1 +迷雾 1 +x:1 +相差无几 1 +x:1 +食言 1 +x:1 +机播 1 +x:1 +罗镇乡 1 +x:1 +判例 1 +x:1 +边封 1 +x:1 +竹雕 1 +x:1 +小版 1 +x:1 +前大灯 1 +x:1 +色丹 1 +x:1 +边将 1 +x:1 +扑簌簌 1 +x:1 +挥金如土 1 +x:1 +产卵场 1 +x:1 +翻江倒海 1 +x:1 +筋络 1 +x:1 +非农 1 +x:1 +嘲笑 1 +x:1 +离退休 1 +x:1 +市辖区 1 +x:1 +草莓 1 +x:1 +正高 1 +x:1 +安徽省籍 1 +x:1 +眷念 1 +x:1 +定损 1 +x:1 +遗体 1 +x:1 +湿控 1 +x:1 +合办 1 +x:1 +肉桂 1 +x:1 +外事处 1 +x:1 +玉泉路 1 +x:1 +竭力 1 +x:1 +煤矿业 1 +x:1 +挽联 1 +x:1 +草莽 1 +x:1 +修正 1 +x:1 +修武 1 +x:1 +恶仗 1 +x:1 +办班费 1 +x:1 +运行 1 +x:1 +非单向 1 +x:1 +中阳县 1 +x:1 +多粒子 1 +x:1 +地方台 1 +x:1 +避税 1 +x:1 +雪影 1 +x:1 +● 306 +x:306 +通江县 1 +x:1 +正派 1 +x:1 +莱芒湖 1 +x:1 +函询 1 +x:1 +恶人 1 +x:1 +大智大勇 1 +x:1 +草菇 1 +x:1 +守诺 1 +x:1 +杯弓蛇影 1 +x:1 +风残 1 +x:1 +应有 1 +x:1 +遗传 1 +x:1 +汪 316 +x:316 +包管 1 +x:1 +肉样 1 +x:1 +观测站 1 +x:1 +被管理者 1 +x:1 +一碧如洗 1 +x:1 +绿豆 1 +x:1 +轻工厅 1 +x:1 +白手起家 1 +x:1 +官架 1 +x:1 +杂粮 1 +x:1 +黑社会 1 +x:1 +恶习 1 +x:1 +泳坛 1 +x:1 +道道儿 1 +x:1 +成千上百 1 +x:1 +肝脑涂地 1 +x:1 +黑陶文化 1 +x:1 +钓具 1 +x:1 +审计师 1 +x:1 +接力式 1 +x:1 +雨天 1 +x:1 +涵义 1 +x:1 +建国路 1 +x:1 +钓公 1 +x:1 +旧框框 1 +x:1 +队尾 1 +x:1 +环节动物 1 +x:1 +耐得 1 +x:1 +杜撰 1 +x:1 +记录槽 1 +x:1 +先兆 1 +x:1 +毛细血管 1 +x:1 +儒生 1 +x:1 +葫芦岛 1 +x:1 +皮 101 +x:101 +傻跑一气 1 +x:1 +巡航 1 +x:1 +独白 1 +x:1 +鼓声 1 +x:1 +利息流 1 +x:1 +责任段 1 +x:1 +终决权 1 +x:1 +非党 1 +x:1 +洋场气 1 +x:1 +官服 1 +x:1 +费用权 1 +x:1 +草荒 1 +x:1 +心魄 1 +x:1 +二十五日 1 +x:1 +治安费 1 +x:1 +权充 1 +x:1 +肌腱 1 +x:1 +车子 1 +x:1 +耕地量 1 +x:1 +政权党 1 +x:1 +赖账者 1 +x:1 +影都 1 +x:1 +财政性 1 +x:1 +耐心 1 +x:1 +南新路 1 +x:1 +姑娘家 1 +x:1 +茄克衣 1 +x:1 +草药 1 +x:1 +互救式 1 +x:1 +手锣 1 +x:1 +网纲 1 +x:1 +岫岩县 1 +x:1 +麦顶 1 +x:1 +手锤 1 +x:1 +网纹 1 +x:1 +边界线 1 +x:1 +风波 1 +x:1 +手锯 1 +x:1 +画地为牢 1 +x:1 +网线 1 +x:1 +运载 1 +x:1 +姜庄 1 +x:1 +如此一来 1 +x:1 +凌古铄金 1 +x:1 +狮子狗 1 +x:1 +红枣林 1 +x:1 +风泵 1 +x:1 +运转 1 +x:1 +奔泻 1 +x:1 +炼化 1 +x:1 +重庆市 1 +x:1 +邪祟 1 +x:1 +金笔 1 +x:1 +装卸 1 +x:1 +诗语 1 +x:1 +言者 1 +x:1 +奢侈 1 +x:1 +迷途 1 +x:1 +长吁短叹 1 +x:1 +雪堆 1 +x:1 +苦其心志 1 +x:1 +直盯盯 1 +x:1 +做操 1 +x:1 +宴请 1 +x:1 +健身 1 +x:1 +阿尔法镇 1 +x:1 +手镯 1 +x:1 +北流市 1 +x:1 +椎骨 1 +x:1 +自由 1 +x:1 +营养片 1 +x:1 +无污染 1 +x:1 +辣味 1 +x:1 +寅著 1 +x:1 +弗罗林 1 +x:1 +安企部法 1 +x:1 +径自 1 +x:1 +下月初 1 +x:1 +丝织业 1 +x:1 +教条化 1 +x:1 +网络 1 +x:1 +兮 24 +x:24 +风沙 1 +x:1 +汽轮机 1 +x:1 +兰家镇 1 +x:1 +一日之功 1 +x:1 +芝麻官儿 1 +x:1 +泻 17 +x:17 +贡嘎县 1 +x:1 +诗论 1 +x:1 +走街串巷 1 +x:1 +武阳镇 1 +x:1 +干练 1 +x:1 +禁放区 1 +x:1 +紧密型 1 +x:1 +米脂 1 +x:1 +雨带 1 +x:1 +没门儿 1 +x:1 +参谋处 1 +x:1 +怏怏不乐 1 +x:1 +黑油油 1 +x:1 +金箔 1 +x:1 +之内 1 +x:1 +春光明媚 1 +x:1 +肇祸 1 +x:1 +淮阴籍 1 +x:1 +车皮 1 +x:1 +自律 1 +x:1 +安安稳稳 1 +x:1 +候机室 1 +x:1 +幽美 1 +x:1 +包米 1 +x:1 +月息 1 +x:1 +怀铁 1 +x:1 +样张 1 +x:1 +增养 1 +x:1 +全民族 1 +x:1 +子母弹 1 +x:1 +举步维艰 1 +x:1 +曹 468 +x:468 +膘肥筋劲 1 +x:1 +当家人 1 +x:1 +把诊 1 +x:1 +非对抗性 1 +x:1 +风水 1 +x:1 +倡导 1 +x:1 +万年松 1 +x:1 +严师 1 +x:1 +运输 1 +x:1 +影音 1 +x:1 +会客室 1 +x:1 +车展 1 +x:1 +县试 1 +x:1 +样式 1 +x:1 +自忖 1 +x:1 +食谱 1 +x:1 +雨幕 1 +x:1 +误国 1 +x:1 +铭记碑 1 +x:1 +显见 1 +x:1 +揭批 1 +x:1 +甘蔗渣 1 +x:1 +翼根 1 +x:1 +炼制 1 +x:1 +边寨 1 +x:1 +四季海棠 1 +x:1 +伏尔加 1 +x:1 +信息 1 +x:1 +作案者 1 +x:1 +花落谁家 1 +x:1 +雪天 1 +x:1 +净赚 1 +x:1 +穗子 1 +x:1 +包团 1 +x:1 +面红耳赤 1 +x:1 +爽身粉 1 +x:1 +青衫 1 +x:1 +雪夜 1 +x:1 +谨忍 1 +x:1 +长期以来 1 +x:1 +决心书 1 +x:1 +氢氧基 1 +x:1 +通家口村 1 +x:1 +误场 1 +x:1 +步法 1 +x:1 +口条 1 +x:1 +金税 1 +x:1 +贪玩 1 +x:1 +做人 1 +x:1 +狮子王 1 +x:1 +日利率 1 +x:1 +精神衰弱 1 +x:1 +太史公 1 +x:1 +零二分 1 +x:1 +保持法 1 +x:1 +车工 1 +x:1 +经保处 1 +x:1 +焦墨 1 +x:1 +清清的 1 +x:1 +赵公元帅 1 +x:1 +凯鲁旺 1 +x:1 +罢哺 1 +x:1 +惨痛 1 +x:1 +德累斯顿 1 +x:1 +戳记 1 +x:1 +以弱胜强 1 +x:1 +两调 1 +x:1 +应聘 1 +x:1 +干 1499 +x:1499 +三方 1 +x:1 +附加值 1 +x:1 +突显 1 +x:1 +轰炸机 1 +x:1 +风浪 1 +x:1 +玄 3 +x:3 +站立者 1 +x:1 +谗言 1 +x:1 +贵州籍 1 +x:1 +痛哭流涕 1 +x:1 +附属 1 +x:1 +购销处 1 +x:1 +加班加点 1 +x:1 +函购 1 +x:1 +平常人 1 +x:1 +宇拓路 1 +x:1 +数量 1 +x:1 +内外部 1 +x:1 +主考 1 +x:1 +哭丧 1 +x:1 +藏药学 1 +x:1 +益智 1 +x:1 +好强 1 +x:1 +风流 1 +x:1 +平常事 1 +x:1 +糖史 1 +x:1 +迷醉 1 +x:1 +鸣笛 1 +x:1 +叉 4 +x:4 +自序 1 +x:1 +衣胞 1 +x:1 +守财 1 +x:1 +定时 1 +x:1 +首任 1 +x:1 +丽 51 +x:51 +造陆运动 1 +x:1 +曼哈顿岛 1 +x:1 +呆惯 1 +x:1 +损失率 1 +x:1 +附小 1 +x:1 +影雕 1 +x:1 +统筹兼顾 1 +x:1 +抗菌药 1 +x:1 +捏 34 +x:34 +宏远队 1 +x:1 +香葱 1 +x:1 +正殿 1 +x:1 +处变 1 +x:1 +影集 1 +x:1 +嫌犯 1 +x:1 +卫生纸 1 +x:1 +救命水 1 +x:1 +测报网 1 +x:1 +杜拉 1 +x:1 +网网 1 +x:1 +现金账 1 +x:1 +网罗 1 +x:1 +吐鲁番市 1 +x:1 +网罟 1 +x:1 +岌岌可危 1 +x:1 +手铐 1 +x:1 +羡慕 1 +x:1 +缩量 1 +x:1 +科巴县 1 +x:1 +侧道 1 +x:1 +教研室 1 +x:1 +生动性 1 +x:1 +招租 1 +x:1 +诉苦 1 +x:1 +保价信 1 +x:1 +小脚印 1 +x:1 +吞食 1 +x:1 +正桥 1 +x:1 +铺档 1 +x:1 +誓 10 +x:10 +车座 1 +x:1 +以信为本 1 +x:1 +厚薄规 1 +x:1 +司号 1 +x:1 +必修课 1 +x:1 +车库 1 +x:1 +车底 1 +x:1 +火烽村 1 +x:1 +独立型 1 +x:1 +击破 1 +x:1 +衡量 1 +x:1 +演出季 1 +x:1 +克维特绥 1 +x:1 +侯门如海 1 +x:1 +宽心 1 +x:1 +玉材 1 +x:1 +页岩 1 +x:1 +车床 1 +x:1 +奇效 1 +x:1 +责无旁贷 1 +x:1 +相关性 1 +x:1 +手面 1 +x:1 +寅虎 1 +x:1 +处理站 1 +x:1 +明面儿 1 +x:1 +解忧 1 +x:1 +队委 1 +x:1 +凭空捏造 1 +x:1 +文具厂 1 +x:1 +九六 1 +x:1 +歌舞伎 1 +x:1 +二星级 1 +x:1 +外事局 1 +x:1 +闹事区 1 +x:1 +算术题 1 +x:1 +吃请 1 +x:1 +边境 1 +x:1 +官报 1 +x:1 +不落窠臼 1 +x:1 +梨膏 1 +x:1 +牧马图 1 +x:1 +风源 1 +x:1 +研究性 1 +x:1 +左手 1 +x:1 +留兰香 1 +x:1 +婚配 1 +x:1 +浦南乡 1 +x:1 +冲动型 1 +x:1 +诗书画 1 +x:1 +花名册 1 +x:1 +风湿 1 +x:1 +瑞士法郎 1 +x:1 +附录 1 +x:1 +歌仔戏 1 +x:1 +膛 2 +x:2 +矮 26 +x:26 +欠债 1 +x:1 +辽南 1 +x:1 +约定期 1 +x:1 +拉拉队员 1 +x:1 +淅沥 1 +x:1 +功成名遂 1 +x:1 +逯 1 +x:1 +运距 1 +x:1 +弱 182 +x:182 +元人 1 +x:1 +车市 1 +x:1 +贵金属 1 +x:1 +该关 1 +x:1 +边塞 1 +x:1 +编译局 1 +x:1 +司南 1 +x:1 +使人昭昭 1 +x:1 +径赛 1 +x:1 +魂飞魄散 1 +x:1 +怀集 1 +x:1 +惨白 1 +x:1 +状物 1 +x:1 +力挽狂澜 1 +x:1 +姊 1 +x:1 +自己 1 +x:1 +自已 1 +x:1 +委员会制 1 +x:1 +天然碱 1 +x:1 +吐尔尕特 1 +x:1 +两边 1 +x:1 +彭畈乡 1 +x:1 +王家营 1 +x:1 +健谈 1 +x:1 +呱呱坠地 1 +x:1 +像片 1 +x:1 +预决算 1 +x:1 +诉至 1 +x:1 +酥脆 1 +x:1 +咯咯 1 +x:1 +梧桐树 1 +x:1 +高栏 1 +x:1 +金秀 1 +x:1 +经济史学 1 +x:1 +官房 1 +x:1 +金秋 1 +x:1 +活化资本 1 +x:1 +九流三教 1 +x:1 +元件 1 +x:1 +自尽 1 +x:1 +无私无畏 1 +x:1 +渡鸦 1 +x:1 +积石山 1 +x:1 +卤制品 1 +x:1 +抢险 1 +x:1 +鉴赏 1 +x:1 +住房梦 1 +x:1 +鸣禽 1 +x:1 +悉尼港 1 +x:1 +唤起 1 +x:1 +人身自由 1 +x:1 +正楷 1 +x:1 +澳门籍 1 +x:1 +使君子 1 +x:1 +蜃景 1 +x:1 +斗鸡 1 +x:1 +痴迷 1 +x:1 +独独 1 +x:1 +电影机 1 +x:1 +自治相 1 +x:1 +希斯罗 1 +x:1 +东张西望 1 +x:1 +信托 1 +x:1 +耳濡 1 +x:1 +古往今来 1 +x:1 +油点 1 +x:1 +单宁酸 1 +x:1 +住宅点 1 +x:1 +液氧箱 1 +x:1 +人情案 1 +x:1 +操 94 +x:94 +蒜头 1 +x:1 +宽度 1 +x:1 +特别奖 1 +x:1 +附加刑 1 +x:1 +寒趣 1 +x:1 +狗血喷头 1 +x:1 +归隐 1 +x:1 +绿衣 1 +x:1 +油炸 1 +x:1 +定本 1 +x:1 +做东 1 +x:1 +港九 1 +x:1 +兵小子 1 +x:1 +育苗场 1 +x:1 +禺 8 +x:8 +录像机 1 +x:1 +唯唯诺诺 1 +x:1 +补贴款 1 +x:1 +递给 1 +x:1 +之前 1 +x:1 +工作者 1 +x:1 +蜇伤 1 +x:1 +附庸 1 +x:1 +曹州 1 +x:1 +权势电 1 +x:1 +健健康康 1 +x:1 +落选率 1 +x:1 +黄花鱼 1 +x:1 +独具慧眼 1 +x:1 +死难者 1 +x:1 +互助会 1 +x:1 +网吧 1 +x:1 +风潮 1 +x:1 +宽广 1 +x:1 +诗行 1 +x:1 +港城镇 1 +x:1 +声援信 1 +x:1 +会计系 1 +x:1 +金碧 1 +x:1 +饮子 1 +x:1 +鱼缸型 1 +x:1 +包罗 1 +x:1 +拜师 1 +x:1 +好大喜功 1 +x:1 +急 236 +x:236 +禁忌症 1 +x:1 +全院性 1 +x:1 +贪青 1 +x:1 +宽幅 1 +x:1 +棱锥 1 +x:1 +精神抖擞 1 +x:1 +黑索今 1 +x:1 +报建率 1 +x:1 +处决 1 +x:1 +加害者 1 +x:1 +车影 1 +x:1 +罗伯特 1 +x:1 +背水阵 1 +x:1 +淅淅 1 +x:1 +松松垮垮 1 +x:1 +五毒俱全 1 +x:1 +棱镜 1 +x:1 +定果 1 +x:1 +宽带 1 +x:1 +手雷 1 +x:1 +洋洲村 1 +x:1 +聚众闹事 1 +x:1 +通过率 1 +x:1 +耐寒 1 +x:1 +拜年 1 +x:1 +愚笨 1 +x:1 +荒漠学 1 +x:1 +附带 1 +x:1 +米色 1 +x:1 +正字法 1 +x:1 +放心菜 1 +x:1 +电子战 1 +x:1 +绿装 1 +x:1 +归集部 1 +x:1 +守车 1 +x:1 +难倒 1 +x:1 +定案 1 +x:1 +简古 1 +x:1 +网状 1 +x:1 +渔樵 1 +x:1 +饮品 1 +x:1 +袋 77 +x:77 +茫茫然 1 +x:1 +发愤忘食 1 +x:1 +可不 1 +x:1 +移民署 1 +x:1 +工厂化 1 +x:1 +长篇小说 1 +x:1 +队型 1 +x:1 +橘黄色 1 +x:1 +窗 61 +x:61 +碍眼 1 +x:1 +锚张网 1 +x:1 +何方 1 +x:1 +食物中毒 1 +x:1 +南山堡村 1 +x:1 +共同市场 1 +x:1 +营运官 1 +x:1 +邹城 1 +x:1 +依达乡 1 +x:1 +掌管 1 +x:1 +风情 1 +x:1 +雪后 1 +x:1 +直理 1 +x:1 +肤泛 1 +x:1 +收兵 1 +x:1 +英雄主义 1 +x:1 +败笔 1 +x:1 +电击法 1 +x:1 +展销品 1 +x:1 +抖搂 1 +x:1 +口惠 1 +x:1 +履带式 1 +x:1 +新集镇 1 +x:1 +定标 1 +x:1 +美食村 1 +x:1 +可操左券 1 +x:1 +懑 1 +x:1 +责任性 1 +x:1 +荒 27 +x:27 +北朝鲜 1 +x:1 +梁沟村 1 +x:1 +手饺 1 +x:1 +太平无事 1 +x:1 +蓝筹股 1 +x:1 +泊车 1 +x:1 +散文史 1 +x:1 +职业病 1 +x:1 +食肴 1 +x:1 +马 1168 +x:1168 +定格 1 +x:1 +教条式 1 +x:1 +包点 1 +x:1 +转头 1 +x:1 +落选 1 +x:1 +烈性 1 +x:1 +煤炭法 1 +x:1 +雅重 1 +x:1 +酥软 1 +x:1 +好高鹜远 1 +x:1 +疑问词 1 +x:1 +寒色 1 +x:1 +祝酒 1 +x:1 +定检 1 +x:1 +雅量 1 +x:1 +抹香鲸 1 +x:1 +青藤 1 +x:1 +直属机关 1 +x:1 +滑动轴承 1 +x:1 +乔克西 1 +x:1 +贸然 1 +x:1 +抖擞 1 +x:1 +砧木 1 +x:1 +旁遮普 1 +x:1 +挽诗 1 +x:1 +鸡毛掸子 1 +x:1 +膦 1 +x:1 +上年底 1 +x:1 +玉米棒 1 +x:1 +伊朗队 1 +x:1 +电子流 1 +x:1 +抑郁寡欢 1 +x:1 +七建 1 +x:1 +玲 150 +x:150 +群力 1 +x:1 +更上层楼 1 +x:1 +上部 1 +x:1 +青藏 1 +x:1 +音译 1 +x:1 +天琴座 1 +x:1 +金石 1 +x:1 +夏威夷州 1 +x:1 +黄歇口镇 1 +x:1 +一花独放 1 +x:1 +油汽炉 1 +x:1 +涸泽而渔 1 +x:1 +肉排 1 +x:1 +大同江畔 1 +x:1 +透视缩影 1 +x:1 +金矿 1 +x:1 +贷户 1 +x:1 +民航业 1 +x:1 +潘集区 1 +x:1 +糊涂一时 1 +x:1 +气压表 1 +x:1 +自古 1 +x:1 +酱紫色 1 +x:1 +食者 1 +x:1 +痴者 1 +x:1 +繁花似锦 1 +x:1 +官气 1 +x:1 +自叙 1 +x:1 +缸盖 1 +x:1 +自发 1 +x:1 +蛾子 1 +x:1 +主火场 1 +x:1 +印本 1 +x:1 +恢宏壮观 1 +x:1 +纺锤形 1 +x:1 +耳性 1 +x:1 +墁 1 +x:1 +沟鼠 1 +x:1 +心醉 1 +x:1 +公祭 1 +x:1 +无仁无义 1 +x:1 +青葱 1 +x:1 +自制 1 +x:1 +忙乎劲儿 1 +x:1 +汉学家 1 +x:1 +栽斤头 1 +x:1 +内应 1 +x:1 +双流县 1 +x:1 +曹县 1 +x:1 +早餐会 1 +x:1 +代州长 1 +x:1 +纸花 1 +x:1 +十四行诗 1 +x:1 +七彩 1 +x:1 +断代 1 +x:1 +边城 1 +x:1 +多管闲事 1 +x:1 +妖艳 1 +x:1 +减肥带 1 +x:1 +寒菊 1 +x:1 +下淀乡 1 +x:1 +心里 1 +x:1 +蜀汉 1 +x:1 +调味 1 +x:1 +误字 1 +x:1 +蜀江 1 +x:1 +冗员 1 +x:1 +断交 1 +x:1 +莲叶 1 +x:1 +正月 1 +x:1 +楚才杯 1 +x:1 +景德镇 1 +x:1 +两者 1 +x:1 +为着 1 +x:1 +陵 4 +x:4 +三好生 1 +x:1 +随机应变 1 +x:1 +民族观 1 +x:1 +六弦琴 1 +x:1 +君子国 1 +x:1 +雨区 1 +x:1 +金犀牛 1 +x:1 +莱茵河 1 +x:1 +拜倒 1 +x:1 +芒河 1 +x:1 +渔产业 1 +x:1 +阿克萨 1 +x:1 +珥陵镇 1 +x:1 +烃 1 +x:1 +辣妹 1 +x:1 +松明牌 1 +x:1 +自动 1 +x:1 +自助 1 +x:1 +天然矿 1 +x:1 +快步流星 1 +x:1 +壮 55 +x:55 +理发室 1 +x:1 +山西团 1 +x:1 +保持性 1 +x:1 +自力 1 +x:1 +肤浅 1 +x:1 +严禁 1 +x:1 +难看 1 +x:1 +尖酸 1 +x:1 +天文数字 1 +x:1 +纤纤 1 +x:1 +七律 1 +x:1 +惨祸 1 +x:1 +龙骨坡 1 +x:1 +伽马射线 1 +x:1 +混珠 1 +x:1 +青蒿 1 +x:1 +违法案 1 +x:1 +映现 1 +x:1 +奶皮 1 +x:1 +元曲 1 +x:1 +家门 1 +x:1 +乳房 1 +x:1 +枢纽局 1 +x:1 +百年史 1 +x:1 +审计员 1 +x:1 +石拱桥 1 +x:1 +焚膏继晷 1 +x:1 +外事司 1 +x:1 +导水管 1 +x:1 +淮河 1 +x:1 +留言栏 1 +x:1 +民心所向 1 +x:1 +青蒜 1 +x:1 +旨 5 +x:5 +正极 1 +x:1 +停车费 1 +x:1 +样刊 1 +x:1 +北流县 1 +x:1 +误导 1 +x:1 +官派 1 +x:1 +龙胆科 1 +x:1 +正果 1 +x:1 +建言献策 1 +x:1 +荷塘 1 +x:1 +绵绵不绝 1 +x:1 +金田 1 +x:1 +幽然 1 +x:1 +估算 1 +x:1 +网点 1 +x:1 +陆委会 1 +x:1 +费工夫 1 +x:1 +联邦制 1 +x:1 +车务 1 +x:1 +趋同化 1 +x:1 +买断性 1 +x:1 +守节 1 +x:1 +嫌疑者 1 +x:1 +狼毫 1 +x:1 +起诉书 1 +x:1 +诊断费 1 +x:1 +狼毒 1 +x:1 +铺摊 1 +x:1 +曝晒 1 +x:1 +零零星星 1 +x:1 +健胃 1 +x:1 +详审 1 +x:1 +放下 1 +x:1 +抗拉强度 1 +x:1 +罢官 1 +x:1 +伪品 1 +x:1 +草生菌 1 +x:1 +任内 1 +x:1 +小秋收 1 +x:1 +黑黑苍苍 1 +x:1 +广告部 1 +x:1 +高深莫测 1 +x:1 +运输机 1 +x:1 +一分高下 1 +x:1 +直排式 1 +x:1 +丘东 1 +x:1 +策 64 +x:64 +修成 1 +x:1 +资信度 1 +x:1 +你一言 1 +x:1 +棣 4 +x:4 +胜任感 1 +x:1 +老资格 1 +x:1 +样册 1 +x:1 +宽厚 1 +x:1 +说到家 1 +x:1 +恶拳 1 +x:1 +金管局 1 +x:1 +三室一厅 1 +x:1 +真分式 1 +x:1 +加拉法德 1 +x:1 +海战 1 +x:1 +轧钢机 1 +x:1 +许家庙 1 +x:1 +篆体 1 +x:1 +偿债 1 +x:1 +相对湿度 1 +x:1 +研究法 1 +x:1 +梓山 1 +x:1 +自决 1 +x:1 +为数不少 1 +x:1 +平易近人 1 +x:1 +放亮 1 +x:1 +麦雨 1 +x:1 +巢县 1 +x:1 +金疮 1 +x:1 +次 9654 +x:9654 +报国志 1 +x:1 +神经过敏 1 +x:1 +定点球 1 +x:1 +交流团 1 +x:1 +仲春 1 +x:1 +呻吟 1 +x:1 +风扇 1 +x:1 +车刀 1 +x:1 +碘酸 1 +x:1 +科学学系 1 +x:1 +高迢险峻 1 +x:1 +亏困 1 +x:1 +指示植物 1 +x:1 +附印 1 +x:1 +放任 1 +x:1 +绿藻 1 +x:1 +面粉厂 1 +x:1 +煤气炉 1 +x:1 +工会界 1 +x:1 +侦探 1 +x:1 +说闲话 1 +x:1 +专段 1 +x:1 +烧火柴卖 1 +x:1 +雪团 1 +x:1 +羚羊皮 1 +x:1 +有神论 1 +x:1 +官渡 1 +x:1 +垣曲县 1 +x:1 +焦土 1 +x:1 +绵白糖 1 +x:1 +脱脂棉 1 +x:1 +领带卡 1 +x:1 +证言 1 +x:1 +香椿头 1 +x:1 +天鹰座 1 +x:1 +桤木 1 +x:1 +爆 21 +x:21 +天游观 1 +x:1 +青虾 1 +x:1 +不会儿 1 +x:1 +凡士林 1 +x:1 +洋快餐 1 +x:1 +逃学 1 +x:1 +工段 1 +x:1 +车厢 1 +x:1 +难分难舍 1 +x:1 +青虬 1 +x:1 +药罐子 1 +x:1 +正数 1 +x:1 +丧身 1 +x:1 +为由 1 +x:1 +污水塘 1 +x:1 +地方官 1 +x:1 +宫 42 +x:42 +冠军队 1 +x:1 +承建方 1 +x:1 +文化买办 1 +x:1 +正教 1 +x:1 +为生 1 +x:1 +牯牛 1 +x:1 +股肌 1 +x:1 +舍死忘生 1 +x:1 +幽灵 1 +x:1 +穆民 1 +x:1 +两航 1 +x:1 +砂仁 1 +x:1 +水泥路 1 +x:1 +店 330 +x:330 +放心车 1 +x:1 +正攻 1 +x:1 +单生花 1 +x:1 +器物 1 +x:1 +雨布 1 +x:1 +走头无路 1 +x:1 +盗牛者 1 +x:1 +沙河 1 +x:1 +外围层 1 +x:1 +链球菌 1 +x:1 +商家 1 +x:1 +冷处理 1 +x:1 +附加 1 +x:1 +外围展 1 +x:1 +幽默剧 1 +x:1 +伪善 1 +x:1 +司库 1 +x:1 +辣子 1 +x:1 +趋利性 1 +x:1 +北叉口村 1 +x:1 +非国家 1 +x:1 +弃 41 +x:41 +拍案叫绝 1 +x:1 +延河水 1 +x:1 +隔岸观火 1 +x:1 +大事记 1 +x:1 +双语 1 +x:1 +生育观 1 +x:1 +正旦 1 +x:1 +呆滞 1 +x:1 +运能 1 +x:1 +队名 1 +x:1 +化境 1 +x:1 +易涝区 1 +x:1 +栗树 1 +x:1 +清谈误国 1 +x:1 +车匪 1 +x:1 +双河镇 1 +x:1 +农 195 +x:195 +恶报 1 +x:1 +天衣无缝 1 +x:1 +聚烯烃 1 +x:1 +砚池 1 +x:1 +青蛙 1 +x:1 +钱学森 1 +x:1 +青蛇 1 +x:1 +吵 28 +x:28 +篆书 1 +x:1 +追截 1 +x:1 +返观 1 +x:1 +那么 1 +x:1 +车印 1 +x:1 +展销场 1 +x:1 +细账 1 +x:1 +丹青妙笔 1 +x:1 +队员 1 +x:1 +风挡 1 +x:1 +雨具 1 +x:1 +从 12825 +x:12825 +正方 1 +x:1 +附则 1 +x:1 +好人主义 1 +x:1 +金瓯 1 +x:1 +袜底儿 1 +x:1 +旧店镇 1 +x:1 +和畅 1 +x:1 +两节 1 +x:1 +创面 1 +x:1 +审判者 1 +x:1 +场磙 1 +x:1 +历史化 1 +x:1 +巧合 1 +x:1 +宰辅 1 +x:1 +酒精度 1 +x:1 +独秀 1 +x:1 +祖传秘方 1 +x:1 +绿茶 1 +x:1 +绿茵 1 +x:1 +侍 2 +x:2 +福坑口村 1 +x:1 +俄籍 1 +x:1 +反之亦然 1 +x:1 +势均力敌 1 +x:1 +友人 1 +x:1 +债利 1 +x:1 +正手 1 +x:1 +发达县 1 +x:1 +风操 1 +x:1 +肉松 1 +x:1 +温补 1 +x:1 +处所词 1 +x:1 +近湖镇 1 +x:1 +白百破 1 +x:1 +红霉素 1 +x:1 +熔解热 1 +x:1 +衣襟 1 +x:1 +南漳县 1 +x:1 +过意不去 1 +x:1 +语速 1 +x:1 +龙狮团 1 +x:1 +委以 1 +x:1 +罢工 1 +x:1 +思想体系 1 +x:1 +工资分 1 +x:1 +羊粪 1 +x:1 +绿荫 1 +x:1 +租金 1 +x:1 +邹县 1 +x:1 +做法 1 +x:1 +铺户 1 +x:1 +衣褶 1 +x:1 +网目 1 +x:1 +新都县 1 +x:1 +姜国 1 +x:1 +刷白 1 +x:1 +肉末 1 +x:1 +工资制 1 +x:1 +习作 1 +x:1 +基加利 1 +x:1 +隔离道 1 +x:1 +货舱 1 +x:1 +夔纹 1 +x:1 +货船 1 +x:1 +一无是处 1 +x:1 +编译器 1 +x:1 +略迹原情 1 +x:1 +长春道 1 +x:1 +创汇额 1 +x:1 +茶缸子 1 +x:1 +非常 1 +x:1 +干群 1 +x:1 +准备期 1 +x:1 +观赏鱼 1 +x:1 +诉讼 1 +x:1 +御寒衣 1 +x:1 +名位 1 +x:1 +摆龙门阵 1 +x:1 +湿气 1 +x:1 +盗版案 1 +x:1 +创造 1 +x:1 +质量 1 +x:1 +灰白色 1 +x:1 +编缉 1 +x:1 +金玉 1 +x:1 +名作 1 +x:1 +大东庄 1 +x:1 +煤气化 1 +x:1 +轻工局 1 +x:1 +从头至尾 1 +x:1 +会客厅 1 +x:1 +肉果 1 +x:1 +数额 1 +x:1 +辽大 1 +x:1 +奔丧 1 +x:1 +钢垫 1 +x:1 +蒲草 1 +x:1 +赡 1 +x:1 +诉诸 1 +x:1 +名企 1 +x:1 +摘录 1 +x:1 +毋庸置言 1 +x:1 +熨帖 1 +x:1 +桃溪镇 1 +x:1 +诉请 1 +x:1 +斗门 1 +x:1 +剪切力 1 +x:1 +习俗 1 +x:1 +名优 1 +x:1 +资源部 1 +x:1 +衣衫 1 +x:1 +猫儿腻 1 +x:1 +歧路亡羊 1 +x:1 +那阵子 1 +x:1 +非徒 1 +x:1 +笃 7 +x:7 +自嘲 1 +x:1 +非得 1 +x:1 +米袋 1 +x:1 +冲积平原 1 +x:1 +居庸关 1 +x:1 +铁道兵 1 +x:1 +开花结果 1 +x:1 +湿润 1 +x:1 +抽水马桶 1 +x:1 +青联 1 +x:1 +结草衔环 1 +x:1 +生成量 1 +x:1 +名仕 1 +x:1 +赫伦文 1 +x:1 +专案 1 +x:1 +歇凉 1 +x:1 +特支费 1 +x:1 +藏药史 1 +x:1 +大伙儿 1 +x:1 +赎救 1 +x:1 +当事者 1 +x:1 +落井投石 1 +x:1 +修整 1 +x:1 +双赛 1 +x:1 +灿烂夺目 1 +x:1 +附和 1 +x:1 +名亡 1 +x:1 +甘蔗林 1 +x:1 +雪具 1 +x:1 +绿色 1 +x:1 +断案 1 +x:1 +金合欢 1 +x:1 +真切感 1 +x:1 +蒲苇 1 +x:1 +协作组 1 +x:1 +幼林地 1 +x:1 +女子组 1 +x:1 +处子 1 +x:1 +名人 1 +x:1 +维拉猜 1 +x:1 +辽墓 1 +x:1 +遛遛弯儿 1 +x:1 +修改 1 +x:1 +晋朝 1 +x:1 +讳病忌医 1 +x:1 +金牌 1 +x:1 +风斗 1 +x:1 +回复率 1 +x:1 +群死群伤 1 +x:1 +无意义 1 +x:1 +队列 1 +x:1 +获奖项 1 +x:1 +灶火 1 +x:1 +网眼 1 +x:1 +衣裤 1 +x:1 +张望 1 +x:1 +衣裳 1 +x:1 +骚 1 +x:1 +揭批查 1 +x:1 +青翠欲滴 1 +x:1 +瞩望 1 +x:1 +引入 1 +x:1 +竹报平安 1 +x:1 +返还 1 +x:1 +沙坪镇 1 +x:1 +处室 1 +x:1 +名义 1 +x:1 +衣装 1 +x:1 +毛岛 1 +x:1 +摄影集 1 +x:1 +朴质 1 +x:1 +做活 1 +x:1 +竭尽 1 +x:1 +行洪道 1 +x:1 +直立人 1 +x:1 +诗艺 1 +x:1 +错综 1 +x:1 +过滤罐 1 +x:1 +过滤网 1 +x:1 +相位差 1 +x:1 +败绩 1 +x:1 +骨架 1 +x:1 +责任方 1 +x:1 +响彻云霄 1 +x:1 +尖锐 1 +x:1 +青肥 1 +x:1 +边区 1 +x:1 +明太祖 1 +x:1 +米行 1 +x:1 +资源量 1 +x:1 +秘 14 +x:14 +朝天门港 1 +x:1 +百无聊赖 1 +x:1 +荡漾 1 +x:1 +身经百战 1 +x:1 +树上 1 +x:1 +百折不挠 1 +x:1 +衣袍 1 +x:1 +绿苔 1 +x:1 +名下 1 +x:1 +队副 1 +x:1 +陈列柜 1 +x:1 +剃头刀 1 +x:1 +赏金 1 +x:1 +吹打乐 1 +x:1 +衣袖 1 +x:1 +难点 1 +x:1 +失之交臂 1 +x:1 +信步 1 +x:1 +鸣炮 1 +x:1 +大渡河 1 +x:1 +鱼雷艇 1 +x:1 +峡山 1 +x:1 +启发式 1 +x:1 +边僻 1 +x:1 +明察秋毫 1 +x:1 +本质 1 +x:1 +育种 1 +x:1 +编组 1 +x:1 +新沙 1 +x:1 +乒乓球队 1 +x:1 +株州 1 +x:1 +退税制 1 +x:1 +晤谈 1 +x:1 +举足轻重 1 +x:1 +手鼓 1 +x:1 +超群绝伦 1 +x:1 +板轧机 1 +x:1 +城角 1 +x:1 +宽城 1 +x:1 +青草 1 +x:1 +类风湿 1 +x:1 +古运河畔 1 +x:1 +步枪 1 +x:1 +玉米花 1 +x:1 +护卫队 1 +x:1 +治安股 1 +x:1 +酊 1 +x:1 +确确实实 1 +x:1 +洛克比镇 1 +x:1 +像章 1 +x:1 +做伴 1 +x:1 +服装业界 1 +x:1 +鳗 1 +x:1 +牛顿 1 +x:1 +银杏果 1 +x:1 +风暴 1 +x:1 +黄河口 1 +x:1 +掌握 1 +x:1 +单株独枝 1 +x:1 +包皮 1 +x:1 +人民路 1 +x:1 +联系人 1 +x:1 +橡胶树 1 +x:1 +正正反反 1 +x:1 +友谊花 1 +x:1 +辽宁 1 +x:1 +重工业部 1 +x:1 +毛混纺 1 +x:1 +奔流 1 +x:1 +老年学 1 +x:1 +耐劳 1 +x:1 +尺骨 1 +x:1 +源头 1 +x:1 +风景 1 +x:1 +丛丛 1 +x:1 +辣度 1 +x:1 +主干性 1 +x:1 +侦查 1 +x:1 +落雪 1 +x:1 +富国强兵 1 +x:1 +行李车 1 +x:1 +嘎嘎 1 +x:1 +分歧 1 +x:1 +青菜 1 +x:1 +耐力 1 +x:1 +开单 1 +x:1 +定例 1 +x:1 +协防 1 +x:1 +启齿 1 +x:1 +网球 1 +x:1 +一片狼藉 1 +x:1 +丛中 1 +x:1 +肉料 1 +x:1 +贵州省 1 +x:1 +偿命 1 +x:1 +包圆 1 +x:1 +模块 1 +x:1 +长梁山 1 +x:1 +冬奥运会 1 +x:1 +落难 1 +x:1 +电学 1 +x:1 +吆五喝六 1 +x:1 +放映业 1 +x:1 +厌恶 1 +x:1 +引进 1 +x:1 +观赏鸽 1 +x:1 +焦化 1 +x:1 +价外税 1 +x:1 +生命 1 +x:1 +过桥费 1 +x:1 +马格里布 1 +x:1 +老先生 1 +x:1 +君子兰 1 +x:1 +联合政府 1 +x:1 +疑为 1 +x:1 +闲 44 +x:44 +丛书 1 +x:1 +诱导性 1 +x:1 +随意性 1 +x:1 +青色 1 +x:1 +投机者 1 +x:1 +处处 1 +x:1 +牌铭 1 +x:1 +独立 1 +x:1 +双轨 1 +x:1 +混用 1 +x:1 +助残日 1 +x:1 +肉摊 1 +x:1 +哥特 1 +x:1 +帖 7 +x:7 +揭榜 1 +x:1 +处理率 1 +x:1 +治理区 1 +x:1 +朔望 1 +x:1 +样品 1 +x:1 +夜场 1 +x:1 +一整天 1 +x:1 +酥裂 1 +x:1 +附图 1 +x:1 +升降机 1 +x:1 +草辫 1 +x:1 +尖音 1 +x:1 +红梅赞 1 +x:1 +舆地学社 1 +x:1 +地表水 1 +x:1 +受训者 1 +x:1 +主会场 1 +x:1 +杉篙 1 +x:1 +自命 1 +x:1 +风枪 1 +x:1 +荡涤 1 +x:1 +定线员 1 +x:1 +午 1 +x:1 +说到底 1 +x:1 +返贫 1 +x:1 +败类 1 +x:1 +竞渡 1 +x:1 +紧密层 1 +x:1 +期货价 1 +x:1 +江米酒 1 +x:1 +剔红 1 +x:1 +黄庄乡 1 +x:1 +贷方 1 +x:1 +西交民巷 1 +x:1 +清真餐 1 +x:1 +大处落墨 1 +x:1 +伪军 1 +x:1 +非生产 1 +x:1 +七大 1 +x:1 +任务 1 +x:1 +阿克苏 1 +x:1 +地方志 1 +x:1 +亲姐妹 1 +x:1 +玉米芯 1 +x:1 +好看 1 +x:1 +穗儿 1 +x:1 +订金 1 +x:1 +展销厅 1 +x:1 +放毒 1 +x:1 +车城 1 +x:1 +闹鬼 1 +x:1 +器皿 1 +x:1 +艺不压身 1 +x:1 +车场 1 +x:1 +用长避短 1 +x:1 +涌 139 +x:139 +布褂 1 +x:1 +来来去去 1 +x:1 +住房性 1 +x:1 +计经委 1 +x:1 +餐饮具 1 +x:1 +荒漠化 1 +x:1 +绿肥 1 +x:1 +为数不多 1 +x:1 +事项 1 +x:1 +青苔 1 +x:1 +南来北往 1 +x:1 +青苗 1 +x:1 +接力区 1 +x:1 +罢市 1 +x:1 +旮旯 1 +x:1 +青苞 1 +x:1 +炉灰 1 +x:1 +并联式 1 +x:1 +不虚此行 1 +x:1 +自咎 1 +x:1 +审计制 1 +x:1 +交流史 1 +x:1 +期货业 1 +x:1 +马莲 1 +x:1 +秋色 1 +x:1 +荒漠区 1 +x:1 +躺倒 1 +x:1 +和煦 1 +x:1 +七妈 1 +x:1 +公开栏 1 +x:1 +青花 1 +x:1 +追缉战 1 +x:1 +原配机 1 +x:1 +徒步走 1 +x:1 +联系会 1 +x:1 +风机 1 +x:1 +修枝 1 +x:1 +边儿 1 +x:1 +门洞 1 +x:1 +双辽 1 +x:1 +双边 1 +x:1 +风月 1 +x:1 +误差 1 +x:1 +八股文 1 +x:1 +耐受 1 +x:1 +鲈鱼 1 +x:1 +石斑鱼 1 +x:1 +误工 1 +x:1 +内伶仃岛 1 +x:1 +耳朵 1 +x:1 +腿 151 +x:151 +特技 1 +x:1 +模型 1 +x:1 +误己 1 +x:1 +名句 1 +x:1 +佐治亚州 1 +x:1 +殃及 1 +x:1 +差旅费 1 +x:1 +半子 1 +x:1 +广育 1 +x:1 +功高权重 1 +x:1 +肚兜 1 +x:1 +低幼 1 +x:1 +年底 1 +x:1 +奈良县 1 +x:1 +礼炮 1 +x:1 +球门区 1 +x:1 +电杆 1 +x:1 +家禽 1 +x:1 +漯河站 1 +x:1 +超高产 1 +x:1 +电板 1 +x:1 +碧绿如茵 1 +x:1 +蝎虎 1 +x:1 +拔乎其萃 1 +x:1 +洗菜池 1 +x:1 +起义军 1 +x:1 +镇隆村 1 +x:1 +低幅 1 +x:1 +粉蝶 1 +x:1 +被特许者 1 +x:1 +截肢 1 +x:1 +描写 1 +x:1 +在野 1 +x:1 +挨着 1 +x:1 +贪污腐化 1 +x:1 +感慨不已 1 +x:1 +李家巷 1 +x:1 +勤俭 1 +x:1 +别墅 1 +x:1 +六里桥 1 +x:1 +血袋 1 +x:1 +改判 1 +x:1 +吭气 1 +x:1 +立柱 1 +x:1 +偏头痛 1 +x:1 +全境 1 +x:1 +游泳 1 +x:1 +商品鸡 1 +x:1 +只言片语 1 +x:1 +改制 1 +x:1 +跳蝻 1 +x:1 +实物券 1 +x:1 +惟利是图 1 +x:1 +打非 1 +x:1 +五棵松 1 +x:1 +尼姑 1 +x:1 +退火 1 +x:1 +烟道式 1 +x:1 +改则 1 +x:1 +三字经 1 +x:1 +数九寒天 1 +x:1 +氨氮化菌 1 +x:1 +电木 1 +x:1 +客星 1 +x:1 +苏家屯 1 +x:1 +一口气 1 +x:1 +立柜 1 +x:1 +脊柱炎 1 +x:1 +小球 1 +x:1 +悬殊 1 +x:1 +四季常青 1 +x:1 +霜霉病 1 +x:1 +毫不利己 1 +x:1 +盘库 1 +x:1 +红土地 1 +x:1 +群起 1 +x:1 +铁力 1 +x:1 +摄录 1 +x:1 +禾木旁儿 1 +x:1 +时报 1 +x:1 +低廉 1 +x:1 +简陋型 1 +x:1 +武岭 1 +x:1 +新河 1 +x:1 +喷薄而出 1 +x:1 +空气轴承 1 +x:1 +矿泉井 1 +x:1 +离子 1 +x:1 +笑盈盈 1 +x:1 +游民 1 +x:1 +奥体 1 +x:1 +摄影 1 +x:1 +家祠 1 +x:1 +理事会制 1 +x:1 +物换星移 1 +x:1 +出场费 1 +x:1 +龙虎 1 +x:1 +打音 1 +x:1 +群贤 1 +x:1 +蛟河市 1 +x:1 +临澧县 1 +x:1 +低度 1 +x:1 +正好 1 +x:1 +母国 1 +x:1 +传统性 1 +x:1 +商品麦 1 +x:1 +用字 1 +x:1 +企业化 1 +x:1 +退烧 1 +x:1 +经世济民 1 +x:1 +潞西市 1 +x:1 +规规矩矩 1 +x:1 +龙虾 1 +x:1 +寄物单 1 +x:1 +铁勺 1 +x:1 +经纬线 1 +x:1 +双峰县 1 +x:1 +打圈子 1 +x:1 +简历 1 +x:1 +电晕 1 +x:1 +打防 1 +x:1 +经纬网 1 +x:1 +自画像 1 +x:1 +淋巴瘤 1 +x:1 +淮剧 1 +x:1 +勤于 1 +x:1 +铁匠 1 +x:1 +遂心如意 1 +x:1 +工贸部 1 +x:1 +存放 1 +x:1 +母土 1 +x:1 +服软 1 +x:1 +废钢铁 1 +x:1 +名作家 1 +x:1 +难为情 1 +x:1 +顿号 1 +x:1 +肚脐眼儿 1 +x:1 +艾尔索普 1 +x:1 +经纬编 1 +x:1 +话务费 1 +x:1 +专一性 1 +x:1 +怒涛澎湃 1 +x:1 +客机 1 +x:1 +影后 1 +x:1 +威慑 1 +x:1 +险些 1 +x:1 +蔡塘村 1 +x:1 +塘马 1 +x:1 +码子 1 +x:1 +常温动物 1 +x:1 +淋巴癌 1 +x:1 +采茶戏团 1 +x:1 +着火点 1 +x:1 +机关委 1 +x:1 +滦河 1 +x:1 +立春 1 +x:1 +堂名 1 +x:1 +改口 1 +x:1 +危险物品 1 +x:1 +偷电 1 +x:1 +简化 1 +x:1 +粗实 1 +x:1 +小白菜 1 +x:1 +汽浮法 1 +x:1 +伟 208 +x:208 +构造地震 1 +x:1 +老公公 1 +x:1 +铁厢 1 +x:1 +秋水长天 1 +x:1 +随形就势 1 +x:1 +酒盅 1 +x:1 +勤业 1 +x:1 +险乎 1 +x:1 +住店 1 +x:1 +深怀不满 1 +x:1 +冲锋 1 +x:1 +跳蚤 1 +x:1 +图纸 1 +x:1 +诗文抄 1 +x:1 +会猎 1 +x:1 +沙参 1 +x:1 +鸡尾酒 1 +x:1 +别处 1 +x:1 +薄片 1 +x:1 +打雷 1 +x:1 +名厨 1 +x:1 +钦羡 1 +x:1 +清清楚楚 1 +x:1 +研究馆员 1 +x:1 +简单 1 +x:1 +实验站 1 +x:1 +∥ 2 +x:2 +受不了 1 +x:1 +庙街 1 +x:1 +阿昌族 1 +x:1 +大大咧咧 1 +x:1 +委内瑞拉 1 +x:1 +游走不定 1 +x:1 +开发行 1 +x:1 +宰杀 1 +x:1 +调研室 1 +x:1 +嘉木 1 +x:1 +无党派 1 +x:1 +多智善谋 1 +x:1 +写本 1 +x:1 +晋江市 1 +x:1 +近现代馆 1 +x:1 +过河拆桥 1 +x:1 +四方区 1 +x:1 +洪水乡 1 +x:1 +电教 1 +x:1 +俏皮 1 +x:1 +新华街 1 +x:1 +世界性 1 +x:1 +啧啧 1 +x:1 +滑冰赛 1 +x:1 +洋洋洒洒 1 +x:1 +望诊 1 +x:1 +撑竿跳高 1 +x:1 +立方 1 +x:1 +绒毯 1 +x:1 +幼虫 1 +x:1 +桦甸市 1 +x:1 +床单厂 1 +x:1 +木廊 1 +x:1 +因了 1 +x:1 +遇到 1 +x:1 +嘁嘁喳喳 1 +x:1 +手机费 1 +x:1 +互为表里 1 +x:1 +遇刺 1 +x:1 +绒毛 1 +x:1 +木匠活 1 +x:1 +无动于衷 1 +x:1 +获赔 1 +x:1 +鲁斯塔克 1 +x:1 +幼虎 1 +x:1 +抵押金 1 +x:1 +半夜 1 +x:1 +凡 282 +x:282 +江畔 1 +x:1 +纳木错湖 1 +x:1 +赔钱 1 +x:1 +梯队 1 +x:1 +计数器 1 +x:1 +立时 1 +x:1 +野山菊 1 +x:1 +遇剌 1 +x:1 +藻潮 1 +x:1 +甥女 1 +x:1 +旅游船 1 +x:1 +荣立者 1 +x:1 +信用证 1 +x:1 +股票商 1 +x:1 +日程 1 +x:1 +退伍兵 1 +x:1 +维也纳市 1 +x:1 +一如继往 1 +x:1 +低射 1 +x:1 +毛白杨 1 +x:1 +偷盗 1 +x:1 +注释 1 +x:1 +长啸贯林 1 +x:1 +半天 1 +x:1 +冠军赛 1 +x:1 +天赋人权 1 +x:1 +核武库 1 +x:1 +半大 1 +x:1 +后车之鉴 1 +x:1 +唔 1 +x:1 +持 329 +x:329 +赏罚分明 1 +x:1 +光化学 1 +x:1 +有事 1 +x:1 +与会者 1 +x:1 +广船 1 +x:1 +雄视 1 +x:1 +椴树 1 +x:1 +蕴藏 1 +x:1 +游游 1 +x:1 +逐级 1 +x:1 +齐步 1 +x:1 +低峰 1 +x:1 +落地式 1 +x:1 +推荐书 1 +x:1 +均安 1 +x:1 +忧愤交加 1 +x:1 +锥 4 +x:4 +铁五局 1 +x:1 +关系式 1 +x:1 +黑色金属 1 +x:1 +画作 1 +x:1 +延川县 1 +x:1 +但求无过 1 +x:1 +才思 1 +x:1 +浮动感 1 +x:1 +累年 1 +x:1 +后面 1 +x:1 +廉洁关 1 +x:1 +打闹 1 +x:1 +磁感应 1 +x:1 +电料 1 +x:1 +昭和 1 +x:1 +电缆厂 1 +x:1 +闺阁情 1 +x:1 +统筹款 1 +x:1 +画传 1 +x:1 +五脏六腑 1 +x:1 +打问 1 +x:1 +火树金花 1 +x:1 +电文 1 +x:1 +均富 1 +x:1 +礼物 1 +x:1 +无力回天 1 +x:1 +典论 1 +x:1 +旅游节 1 +x:1 +轰炸 1 +x:1 +滩涂式 1 +x:1 +从者 1 +x:1 +传统戏 1 +x:1 +果蔬 1 +x:1 +游湖 1 +x:1 +样子 1 +x:1 +屿 1 +x:1 +水煤气 1 +x:1 +平武县 1 +x:1 +仿真 1 +x:1 +存有 1 +x:1 +画价 1 +x:1 +内膛嫁接 1 +x:1 +绞丝旁儿 1 +x:1 +王 6084 +x:6084 +谊 6 +x:6 +交友 1 +x:1 +疾病谱 1 +x:1 +窑池 1 +x:1 +某县 1 +x:1 +无毒品 1 +x:1 +兴衰 1 +x:1 +概括性 1 +x:1 +简写 1 +x:1 +追风逐电 1 +x:1 +嘴皮 1 +x:1 +斋品 1 +x:1 +回落 1 +x:1 +存本 1 +x:1 +批发商 1 +x:1 +囚款 1 +x:1 +准产证 1 +x:1 +指令长 1 +x:1 +礼士路 1 +x:1 +电视机 1 +x:1 +图籍 1 +x:1 +绕圈子 1 +x:1 +简况 1 +x:1 +通讯员 1 +x:1 +可食菌 1 +x:1 +摩纳哥 1 +x:1 +淋巴球 1 +x:1 +绿莹莹 1 +x:1 +家童 1 +x:1 +药棉 1 +x:1 +冈山县 1 +x:1 +人情美 1 +x:1 +小提琴 1 +x:1 +厌食者 1 +x:1 +风湿病学 1 +x:1 +黑台镇 1 +x:1 +悬案 1 +x:1 +药检 1 +x:1 +边防军 1 +x:1 +果蒂 1 +x:1 +画亭 1 +x:1 +无中生有 1 +x:1 +轰然 1 +x:1 +亚太地区 1 +x:1 +队伍 1 +x:1 +接受者 1 +x:1 +必也正名 1 +x:1 +全文型 1 +x:1 +舞弊者 1 +x:1 +湿热型 1 +x:1 +录取者 1 +x:1 +打钻 1 +x:1 +囚歌 1 +x:1 +酒瓶 1 +x:1 +悬梁 1 +x:1 +游离钙 1 +x:1 +刻板 1 +x:1 +接物镜 1 +x:1 +天高气爽 1 +x:1 +敌视 1 +x:1 +窜升 1 +x:1 +画乡 1 +x:1 +别字 1 +x:1 +乌钢 1 +x:1 +经纪行 1 +x:1 +喜鹊 1 +x:1 +伪书 1 +x:1 +黑黑的 1 +x:1 +逊而不俗 1 +x:1 +新闻组 1 +x:1 +粒粒 1 +x:1 +藏家人 1 +x:1 +圣何塞 1 +x:1 +谱系 1 +x:1 +偷看 1 +x:1 +纠偏 1 +x:1 +锯条 1 +x:1 +畜产 1 +x:1 +财神庙 1 +x:1 +妇女观 1 +x:1 +组胺 1 +x:1 +北航 1 +x:1 +调合油 1 +x:1 +受命 1 +x:1 +允许量 1 +x:1 +勇攀高峰 1 +x:1 +次发展极 1 +x:1 +白沙镇 1 +x:1 +围棋手 1 +x:1 +加气水泥 1 +x:1 +连推带拉 1 +x:1 +刻本 1 +x:1 +毫不相干 1 +x:1 +烷烃 1 +x:1 +切分 1 +x:1 +贸发局 1 +x:1 +执法队 1 +x:1 +受听 1 +x:1 +存查 1 +x:1 +改写 1 +x:1 +黑嘴鸥 1 +x:1 +零钞 1 +x:1 +刻有 1 +x:1 +顽 3 +x:3 +敞车 1 +x:1 +地皮费 1 +x:1 +大红帆 1 +x:1 +外资股 1 +x:1 +煽情式 1 +x:1 +睚眦必报 1 +x:1 +果菜 1 +x:1 +无性系 1 +x:1 +预防注射 1 +x:1 +行政权 1 +x:1 +名震一时 1 +x:1 +烟夜蛾 1 +x:1 +骑警 1 +x:1 +科学性 1 +x:1 +梯道 1 +x:1 +千伶百俐 1 +x:1 +成长期 1 +x:1 +执飞 1 +x:1 +边防团 1 +x:1 +画饼充饥 1 +x:1 +据以 1 +x:1 +空想论 1 +x:1 +林木 1 +x:1 +瓶罐 1 +x:1 +监考 1 +x:1 +心慈手软 1 +x:1 +百家姓 1 +x:1 +掉价儿 1 +x:1 +闲饭 1 +x:1 +红小豆 1 +x:1 +举手之劳 1 +x:1 +经销者 1 +x:1 +天差地别 1 +x:1 +荣誉章 1 +x:1 +林权 1 +x:1 +愚公移山 1 +x:1 +顶班 1 +x:1 +总之 1 +x:1 +客户 1 +x:1 +档儿 1 +x:1 +数得着 1 +x:1 +苛例 1 +x:1 +原庄村 1 +x:1 +泛 29 +x:29 +客房 1 +x:1 +改嘴 1 +x:1 +辑 33 +x:33 +欧裔 1 +x:1 +灰喜鹊 1 +x:1 +喀嚓 1 +x:1 +铁器 1 +x:1 +事务室 1 +x:1 +帮会 1 +x:1 +午宴 1 +x:1 +雪杨柳 1 +x:1 +六·一 1 +x:1 +迷蒙 1 +x:1 +贫壤瘠土 1 +x:1 +本本分分 1 +x:1 +回荡 1 +x:1 +跳荡 1 +x:1 +捻度 1 +x:1 +鱼价 1 +x:1 +语言 1 +x:1 +住室 1 +x:1 +挑拨离间 1 +x:1 +家累 1 +x:1 +林林 1 +x:1 +通讯史 1 +x:1 +化雨春风 1 +x:1 +龙舟 1 +x:1 +龙舞 1 +x:1 +置于脑后 1 +x:1 +面洽 1 +x:1 +林果 1 +x:1 +神通广大 1 +x:1 +含糖度 1 +x:1 +付诸东流 1 +x:1 +获评 1 +x:1 +永定河 1 +x:1 +体性 1 +x:1 +住宅 1 +x:1 +轮机长 1 +x:1 +游标 1 +x:1 +退而不休 1 +x:1 +龙船 1 +x:1 +将心比心 1 +x:1 +惠东 1 +x:1 +下编 1 +x:1 +堂兄 1 +x:1 +蹇 2 +x:2 +追悔 1 +x:1 +上升调 1 +x:1 +坍 7 +x:7 +在逃 1 +x:1 +半径 1 +x:1 +油剂 1 +x:1 +守旧派 1 +x:1 +才智 1 +x:1 +果茶 1 +x:1 +腾达队 1 +x:1 +面浆 1 +x:1 +德宏州 1 +x:1 +雄辩 1 +x:1 +置之不理 1 +x:1 +填筑 1 +x:1 +恍恍忽忽 1 +x:1 +马粪纸 1 +x:1 +唯才是举 1 +x:1 +竞争者 1 +x:1 +电孕乡 1 +x:1 +砖砾 1 +x:1 +水电费 1 +x:1 +铁撬棍 1 +x:1 +跳舞 1 +x:1 +变天账 1 +x:1 +菱镁矿 1 +x:1 +抽击 1 +x:1 +抽出 1 +x:1 +浮皮儿 1 +x:1 +延米 1 +x:1 +礼部郎 1 +x:1 +山姆大叔 1 +x:1 +电扇 1 +x:1 +登山运动 1 +x:1 +药源 1 +x:1 +金沙江 1 +x:1 +泉塘村 1 +x:1 +新法 1 +x:1 +长兴县 1 +x:1 +生产者 1 +x:1 +企业团 1 +x:1 +粉色 1 +x:1 +河北镇 1 +x:1 +白居寺 1 +x:1 +赛季 1 +x:1 +回航 1 +x:1 +串 91 +x:91 +剪贴本 1 +x:1 +四面体 1 +x:1 +愚氓 1 +x:1 +语论 1 +x:1 +肛道 1 +x:1 +世界杯 1 +x:1 +图稿 1 +x:1 +报知 1 +x:1 +任县 1 +x:1 +白白胖胖 1 +x:1 +领导者 1 +x:1 +含水量 1 +x:1 +烟筒 1 +x:1 +雄踞 1 +x:1 +眉棱骨 1 +x:1 +语话 1 +x:1 +谈笑风生 1 +x:1 +告状信 1 +x:1 +方块字 1 +x:1 +流金铄石 1 +x:1 +代名词 1 +x:1 +卤 1 +x:1 +总务处 1 +x:1 +脐橙 1 +x:1 +检修工 1 +x:1 +中译本 1 +x:1 +受助 1 +x:1 +连裆裤 1 +x:1 +劝解 1 +x:1 +收益 1 +x:1 +航道区 1 +x:1 +缺点 1 +x:1 +毒源地 1 +x:1 +款项 1 +x:1 +先前 1 +x:1 +瓜子仁 1 +x:1 +经学家 1 +x:1 +图章 1 +x:1 +独龙族 1 +x:1 +转给 1 +x:1 +罚不当罪 1 +x:1 +节能剂 1 +x:1 +例假 1 +x:1 +最后通牒 1 +x:1 +秋冬种 1 +x:1 +药渣 1 +x:1 +振 30 +x:30 +团支部 1 +x:1 +探望者 1 +x:1 +生硬 1 +x:1 +微机室 1 +x:1 +雪窦山 1 +x:1 +才望 1 +x:1 +面汤 1 +x:1 +空袭案 1 +x:1 +麻脸 1 +x:1 +俯视图 1 +x:1 +捕鱼量 1 +x:1 +攻破 1 +x:1 +昭和四年 1 +x:1 +电抗 1 +x:1 +屑 2 +x:2 +马瑙斯 1 +x:1 +执委 1 +x:1 +捕获量 1 +x:1 +才杰 1 +x:1 +受刑 1 +x:1 +水电路 1 +x:1 +花笺传 1 +x:1 +题名录 1 +x:1 +碗柜 1 +x:1 +改型 1 +x:1 +血账 1 +x:1 +角黍 1 +x:1 +据传 1 +x:1 +有价证券 1 +x:1 +大夹街 1 +x:1 +受制 1 +x:1 +庆云县 1 +x:1 +受到 1 +x:1 +粉芡 1 +x:1 +刻意 1 +x:1 +大忙人 1 +x:1 +跳脚 1 +x:1 +例句 1 +x:1 +戏票 1 +x:1 +伊斯兰人 1 +x:1 +师专 1 +x:1 +档卡 1 +x:1 +受凉 1 +x:1 +警钟长鸣 1 +x:1 +丰收乡 1 +x:1 +受助生 1 +x:1 +目镜 1 +x:1 +黄菠萝 1 +x:1 +一点钟 1 +x:1 +挥霍 1 +x:1 +破瓦寒窑 1 +x:1 +孤寡病残 1 +x:1 +住处 1 +x:1 +硝化甘油 1 +x:1 +活动桥 1 +x:1 +黑脸种 1 +x:1 +括号 1 +x:1 +嘉惠 1 +x:1 +监舍 1 +x:1 +存户 1 +x:1 +残留物 1 +x:1 +七拐八弯 1 +x:1 +窃电线 1 +x:1 +保满路 1 +x:1 +龙胆 1 +x:1 +堂叔 1 +x:1 +砖窑 1 +x:1 +微醉 1 +x:1 +龙胜 1 +x:1 +列举 1 +x:1 +布木格 1 +x:1 +抽动 1 +x:1 +两法 1 +x:1 +受冤 1 +x:1 +礼盒 1 +x:1 +梧桐 1 +x:1 +悬浮 1 +x:1 +平平的 1 +x:1 +城市贫民 1 +x:1 +存执 1 +x:1 +纺线 1 +x:1 +置若罔闻 1 +x:1 +河北队 1 +x:1 +修造 1 +x:1 +受冻 1 +x:1 +全人类 1 +x:1 +追车族 1 +x:1 +助纣为虐 1 +x:1 +扬基债 1 +x:1 +围嘴儿 1 +x:1 +咨询摊 1 +x:1 +世袭 1 +x:1 +师事 1 +x:1 +碧湛湛 1 +x:1 +劝言 1 +x:1 +低声 1 +x:1 +决策人员 1 +x:1 +战创伤 1 +x:1 +戏称 1 +x:1 +箭步 1 +x:1 +幼苗 1 +x:1 +和平郡 1 +x:1 +错误者 1 +x:1 +忙前忙后 1 +x:1 +下颌骨 1 +x:1 +电视报 1 +x:1 +报国无门 1 +x:1 +果腹 1 +x:1 +痛下决心 1 +x:1 +颌下腺 1 +x:1 +摇头晃脑 1 +x:1 +生态乡 1 +x:1 +创建人 1 +x:1 +经气 1 +x:1 +铺集镇 1 +x:1 +薄田 1 +x:1 +祈望 1 +x:1 +关系学 1 +x:1 +指数表 1 +x:1 +夹竹桃 1 +x:1 +午夜 1 +x:1 +三月份 1 +x:1 +幼芽 1 +x:1 +二元论 1 +x:1 +木麻黄 1 +x:1 +国术会 1 +x:1 +师从 1 +x:1 +置装费 1 +x:1 +大都市 1 +x:1 +龙联 1 +x:1 +事关全局 1 +x:1 +盘山 1 +x:1 +装修 1 +x:1 +水浮莲 1 +x:1 +百慕大 1 +x:1 +直井 1 +x:1 +函授大学 1 +x:1 +腿子 1 +x:1 +税企 1 +x:1 +打量 1 +x:1 +果脯 1 +x:1 +药浴 1 +x:1 +翼上 1 +x:1 +林旺 1 +x:1 +弦声 1 +x:1 +标志处 1 +x:1 +洋绣球 1 +x:1 +云豹 1 +x:1 +幼稚病 1 +x:1 +彭德怀 1 +x:1 +功力者 1 +x:1 +种子田 1 +x:1 +教科研 1 +x:1 +风范犹存 1 +x:1 +打造 1 +x:1 +账目 1 +x:1 +申报表 1 +x:1 +果胶 1 +x:1 +打通 1 +x:1 +抽取 1 +x:1 +逐笔 1 +x:1 +浮渡河 1 +x:1 +咨询日 1 +x:1 +笨 14 +x:14 +播 51 +x:51 +蔬 2 +x:2 +赔金 1 +x:1 +监管者 1 +x:1 +横道河子 1 +x:1 +面源 1 +x:1 +黄皮寡瘦 1 +x:1 +选举法 1 +x:1 +债 81 +x:81 +山苍子 1 +x:1 +男子化 1 +x:1 +龙川县 1 +x:1 +优免证 1 +x:1 +黑 275 +x:275 +翼侧 1 +x:1 +寓存 1 +x:1 +淫荡 1 +x:1 +远地点 1 +x:1 +渎职罪 1 +x:1 +低头 1 +x:1 +阿图什市 1 +x:1 +果肉 1 +x:1 +劝说 1 +x:1 +劝诱 1 +x:1 +扫平 1 +x:1 +南钢队 1 +x:1 +欧洲区 1 +x:1 +敬 56 +x:56 +戏码 1 +x:1 +烽火连天 1 +x:1 +补牙法 1 +x:1 +建设者 1 +x:1 +劝诫 1 +x:1 +怀宁县 1 +x:1 +龙脉 1 +x:1 +印方 1 +x:1 +和平里 1 +x:1 +黄泥河 1 +x:1 +延续 1 +x:1 +防化学兵 1 +x:1 +婆婆妈妈 1 +x:1 +厅局长 1 +x:1 +枯水区 1 +x:1 +马儿山 1 +x:1 +延绵 1 +x:1 +工装裤 1 +x:1 +叠落 1 +x:1 +蒲圻市 1 +x:1 +同盟会 1 +x:1 +偷猎 1 +x:1 +扇子 1 +x:1 +桑果 1 +x:1 +糍粑 1 +x:1 +男 327 +x:327 +[ 8 +x:8 +木工 1 +x:1 +饱经忧患 1 +x:1 +主要方 1 +x:1 +自我标榜 1 +x:1 +半岛 1 +x:1 +意味隽永 1 +x:1 +英武 1 +x:1 +偷盗者 1 +x:1 +战绩 1 +x:1 +常用字 1 +x:1 +冀南 1 +x:1 +叫法 1 +x:1 +文艺批评 1 +x:1 +廉正风 1 +x:1 +经济 1 +x:1 +五环队 1 +x:1 +葭 1 +x:1 +改善 1 +x:1 +群言 1 +x:1 +红庙 1 +x:1 +白发翁 1 +x:1 +祛病除灾 1 +x:1 +执勤者 1 +x:1 +交互式 1 +x:1 +粉肠 1 +x:1 +彻 5 +x:5 +销货额 1 +x:1 +悬挂 1 +x:1 +打鼾 1 +x:1 +孙男嫡女 1 +x:1 +被盗案 1 +x:1 +延寿桃 1 +x:1 +办案人 1 +x:1 +纸屑 1 +x:1 +监察组 1 +x:1 +非财政 1 +x:1 +高城镇 1 +x:1 +枝江市 1 +x:1 +佑助 1 +x:1 +海枣 1 +x:1 +广袤 1 +x:1 +咎谴 1 +x:1 +住地 1 +x:1 +龙身 1 +x:1 +酒罐 1 +x:1 +砖瓦 1 +x:1 +养植 1 +x:1 +打鼓 1 +x:1 +会章 1 +x:1 +通讯录 1 +x:1 +抵雪 1 +x:1 +最低限 1 +x:1 +纠察 1 +x:1 +观测网 1 +x:1 +小伙儿 1 +x:1 +报端 1 +x:1 +迅 5 +x:5 +税收收入 1 +x:1 +报童 1 +x:1 +报名者 1 +x:1 +动真格 1 +x:1 +血肉 1 +x:1 +酒缸 1 +x:1 +报章 1 +x:1 +税收率 1 +x:1 +出头露面 1 +x:1 +轰隆轰隆 1 +x:1 +客游 1 +x:1 +城隍 1 +x:1 +非同凡响 1 +x:1 +风雨兼程 1 +x:1 +告示 1 +x:1 +吐 75 +x:75 +王营 1 +x:1 +上升股 1 +x:1 +洛阳市 1 +x:1 +酒缘 1 +x:1 +沼 1 +x:1 +邪气 1 +x:1 +影视城 1 +x:1 +回转 1 +x:1 +家燕 1 +x:1 +碗橱 1 +x:1 +抗癌药 1 +x:1 +求同克异 1 +x:1 +犒赏 1 +x:1 +血肿 1 +x:1 +企业家 1 +x:1 +红岩村 1 +x:1 +付与 1 +x:1 +客满 1 +x:1 +验 30 +x:30 +俊男靓女 1 +x:1 +东旧寨镇 1 +x:1 +捐赠 1 +x:1 +潼南县 1 +x:1 +土司 1 +x:1 +组诗 1 +x:1 +单间儿 1 +x:1 +跟着 1 +x:1 +堪忧 1 +x:1 +真人真事 1 +x:1 +改嫁 1 +x:1 +近现代 1 +x:1 +适用 1 +x:1 +三鹤村 1 +x:1 +军体拳 1 +x:1 +沼液叶喷 1 +x:1 +抽屉 1 +x:1 +回还 1 +x:1 +尼共 1 +x:1 +辩驳 1 +x:1 +摩天大楼 1 +x:1 +回返 1 +x:1 +衣裙 1 +x:1 +西航道 1 +x:1 +大得人心 1 +x:1 +国旗班 1 +x:1 +回迁 1 +x:1 +名功 1 +x:1 +统一 1 +x:1 +招引 1 +x:1 +佤族 1 +x:1 +组训 1 +x:1 +经手 1 +x:1 +选择 1 +x:1 +实验班 1 +x:1 +丹霞山 1 +x:1 +评书 1 +x:1 +妇女节 1 +x:1 +客源 1 +x:1 +婷 9 +x:9 +数九寒冬 1 +x:1 +东影村 1 +x:1 +种子站 1 +x:1 +新鲜度 1 +x:1 +炒豆子 1 +x:1 +巨黄色 1 +x:1 +授人以柄 1 +x:1 +辽宁路 1 +x:1 +巴勒斯坦 1 +x:1 +不计其数 1 +x:1 +报箱 1 +x:1 +盘式 1 +x:1 +摘金 1 +x:1 +铁东区 1 +x:1 +内夯 1 +x:1 +均值 1 +x:1 +渐开线 1 +x:1 +有售 1 +x:1 +存活 1 +x:1 +△ 50 +x:50 +代理人 1 +x:1 +化工部 1 +x:1 +综观 1 +x:1 +器械 1 +x:1 +点菜 1 +x:1 +活动月 1 +x:1 +宪政 1 +x:1 +统供 1 +x:1 +如花似玉 1 +x:1 +蓉 4 +x:4 +运销业 1 +x:1 +橄榄型 1 +x:1 +全市 1 +x:1 +馆际 1 +x:1 +足智多谋 1 +x:1 +活动期 1 +x:1 +低地 1 +x:1 +肩章 1 +x:1 +经援 1 +x:1 +冀州 1 +x:1 +格登山 1 +x:1 +耍流氓 1 +x:1 +赛地 1 +x:1 +乐迷 1 +x:1 +养路费 1 +x:1 +馆陶 1 +x:1 +喜钱 1 +x:1 +赛场 1 +x:1 +退票 1 +x:1 +起电盘 1 +x:1 +广角 1 +x:1 +庇护 1 +x:1 +出生证 1 +x:1 +摒弃 1 +x:1 +遮阳网 1 +x:1 +方糖 1 +x:1 +水程 1 +x:1 +戏目 1 +x:1 +树鹨 1 +x:1 +社仓 1 +x:1 +跑马卖解 1 +x:1 +渗透 1 +x:1 +销售场 1 +x:1 +彩布条 1 +x:1 +稍 165 +x:165 +标志型 1 +x:1 +忻州 1 +x:1 +代理业 1 +x:1 +七里塔 1 +x:1 +铁定 1 +x:1 +寂静 1 +x:1 +排除法 1 +x:1 +金溪 1 +x:1 +宜昌港 1 +x:1 +血腥 1 +x:1 +保修包换 1 +x:1 +踝关节 1 +x:1 +药房 1 +x:1 +声如银铃 1 +x:1 +回身 1 +x:1 +坪上 1 +x:1 +一望无涯 1 +x:1 +胎具 1 +x:1 +发现号 1 +x:1 +西河北 1 +x:1 +广西 1 +x:1 +一应俱全 1 +x:1 +忧愁 1 +x:1 +被保险人 1 +x:1 +血脉 1 +x:1 +电源 1 +x:1 +颜家屯村 1 +x:1 +堂屋 1 +x:1 +署理 1 +x:1 +群落 1 +x:1 +全年 1 +x:1 +南北纬 1 +x:1 +星际 1 +x:1 +菜 347 +x:347 +飞来峡 1 +x:1 +红头 1 +x:1 +贴补 1 +x:1 +警通队 1 +x:1 +闲钱 1 +x:1 +美学家 1 +x:1 +求索集 1 +x:1 +鄂伦春乡 1 +x:1 +带兵论 1 +x:1 +龙车 1 +x:1 +攻球 1 +x:1 +报答 1 +x:1 +水库区 1 +x:1 +这么样 1 +x:1 +雄花 1 +x:1 +航道局 1 +x:1 +自学成才 1 +x:1 +套数 1 +x:1 +寻衅滋事 1 +x:1 +糖块 1 +x:1 +退税 1 +x:1 +购货本 1 +x:1 +忆昔抚今 1 +x:1 +均匀 1 +x:1 +一席话 1 +x:1 +肚子 1 +x:1 +百依百顺 1 +x:1 +碧海 1 +x:1 +辩题 1 +x:1 +回贺 1 +x:1 +矿渣厂 1 +x:1 +全军覆灭 1 +x:1 +北安市 1 +x:1 +杂乱无章 1 +x:1 +面授 1 +x:1 +游泳池 1 +x:1 +关系型 1 +x:1 +舰 14 +x:14 +名下无虚 1 +x:1 +脱胎换骨 1 +x:1 +感受器 1 +x:1 +卡勒瓦 1 +x:1 +退稿 1 +x:1 +陆地 1 +x:1 +仃 8 +x:8 +图画 1 +x:1 +正电子 1 +x:1 +建设费 1 +x:1 +溢美之词 1 +x:1 +核装置 1 +x:1 +铁塔 1 +x:1 +钝响 1 +x:1 +庄稼汉 1 +x:1 +赚 168 +x:168 +添置 1 +x:1 +收发组 1 +x:1 +绣 17 +x:17 +协力会 1 +x:1 +浸透 1 +x:1 +圣人 1 +x:1 +监票人 1 +x:1 +罂粟 1 +x:1 +砖皮 1 +x:1 +馆长 1 +x:1 +客气 1 +x:1 +扰 5 +x:5 +粒界 1 +x:1 +踩鼓堂 1 +x:1 +繁荣富强 1 +x:1 +载客率 1 +x:1 +紫砂陶 1 +x:1 +汀线 1 +x:1 +不知者 1 +x:1 +核武器 1 +x:1 +明达 1 +x:1 +黄袍加身 1 +x:1 +才思敏捷 1 +x:1 +跳越 1 +x:1 +花场峪村 1 +x:1 +堂弟 1 +x:1 +环幕 1 +x:1 +南化塘镇 1 +x:1 +开县 1 +x:1 +水杨酸 1 +x:1 +政群 1 +x:1 +西固区 1 +x:1 +带分数 1 +x:1 +筛拣 1 +x:1 +祁阳 1 +x:1 +各自 1 +x:1 +一年一度 1 +x:1 +记者组 1 +x:1 +低哑 1 +x:1 +徽州市 1 +x:1 +通信站 1 +x:1 +势利眼 1 +x:1 +羯羊 1 +x:1 +祭祀坑 1 +x:1 +成因 1 +x:1 +企业处 1 +x:1 +三接头 1 +x:1 +茶叶花 1 +x:1 +曹娥江畔 1 +x:1 +逐户 1 +x:1 +硼钢 1 +x:1 +统供率 1 +x:1 +跳跃 1 +x:1 +会计法 1 +x:1 +支付卡 1 +x:1 +赤胆忠心 1 +x:1 +血性汉子 1 +x:1 +括弧 1 +x:1 +穆迪拉 1 +x:1 +灰黄霉素 1 +x:1 +血口喷人 1 +x:1 +地皮菜 1 +x:1 +那里 1 +x:1 +跳跳 1 +x:1 +提货人 1 +x:1 +非经营性 1 +x:1 +回路 1 +x:1 +砚雕 1 +x:1 +茶叶节 1 +x:1 +果质 1 +x:1 +中小企业 1 +x:1 +真实感 1 +x:1 +填鸭式 1 +x:1 +檄文 1 +x:1 +家犬 1 +x:1 +缝纫机 1 +x:1 +酒类 1 +x:1 +均分 1 +x:1 +原油价 1 +x:1 +专修 1 +x:1 +电汇 1 +x:1 +堂庙 1 +x:1 +三从一大 1 +x:1 +实话 1 +x:1 +通讯局 1 +x:1 +民族自治 1 +x:1 +林校 1 +x:1 +北大营村 1 +x:1 +字符集 1 +x:1 +记者网 1 +x:1 +别史 1 +x:1 +砖石 1 +x:1 +别号 1 +x:1 +铁头 1 +x:1 +销赃 1 +x:1 +硼镁 1 +x:1 +易地 1 +x:1 +炽 2 +x:2 +电池 1 +x:1 +喜雨 1 +x:1 +老规矩 1 +x:1 +改天 1 +x:1 +接管部 1 +x:1 +皮损 1 +x:1 +打鱼 1 +x:1 +电气 1 +x:1 +摊 57 +x:57 +哥伦布市 1 +x:1 +祖母绿 1 +x:1 +形单影只 1 +x:1 +欧洲式 1 +x:1 +城乡游 1 +x:1 +二宫乡 1 +x:1 +捐躯 1 +x:1 +故纸堆 1 +x:1 +净角 1 +x:1 +赖以生存 1 +x:1 +客死他乡 1 +x:1 +标新立异 1 +x:1 +烯烃厂 1 +x:1 +二话没说 1 +x:1 +坡岗地 1 +x:1 +展览城 1 +x:1 +超重者 1 +x:1 +石铲 1 +x:1 +论罪 1 +x:1 +擅于 1 +x:1 +庙舍 1 +x:1 +组装 1 +x:1 +铁厂 1 +x:1 +水利枢纽 1 +x:1 +受屈 1 +x:1 +闲雅 1 +x:1 +涉及面 1 +x:1 +报社 1 +x:1 +零3分 1 +x:1 +实证 1 +x:1 +义乌市 1 +x:1 +杂货铺 1 +x:1 +手背 1 +x:1 +盐碱土 1 +x:1 +群虎 1 +x:1 +退管 1 +x:1 +遇害 1 +x:1 +均势 1 +x:1 +酒糟 1 +x:1 +活动日 1 +x:1 +电泳 1 +x:1 +盐碱地 1 +x:1 +先导性 1 +x:1 +双增双提 1 +x:1 +育 84 +x:84 +抓住 1 +x:1 +输血 1 +x:1 +南锡国家 1 +x:1 +电波 1 +x:1 +北普陀 1 +x:1 +景行行止 1 +x:1 +十二生肖 1 +x:1 +二郎庙 1 +x:1 +酒精 1 +x:1 +松毛虫 1 +x:1 +波茨坦 1 +x:1 +裁 16 +x:16 +违章户 1 +x:1 +午后 1 +x:1 +铁委 1 +x:1 +相关度 1 +x:1 +大娄山区 1 +x:1 +金台西路 1 +x:1 +女友 1 +x:1 +嬉笑怒骂 1 +x:1 +岁月悠悠 1 +x:1 +光顾者 1 +x:1 +年轻人 1 +x:1 +会礼 1 +x:1 +闭幕式 1 +x:1 +春秋笔法 1 +x:1 +受尽 1 +x:1 +论理 1 +x:1 +斧头 1 +x:1 +存栏 1 +x:1 +引经据典 1 +x:1 +毫不费力 1 +x:1 +摄氏度 1 +x:1 +风和日暖 1 +x:1 +二环路 1 +x:1 +陆岛 1 +x:1 +那霸 1 +x:1 +受寒 1 +x:1 +隐士 1 +x:1 +摄取 1 +x:1 +花梨木 1 +x:1 +赛前 1 +x:1 +海盐县 1 +x:1 +鱼水情 1 +x:1 +钱内助 1 +x:1 +彩图 1 +x:1 +过世 1 +x:1 +跟班 1 +x:1 +存根 1 +x:1 +才源 1 +x:1 +展销价 1 +x:1 +应用率 1 +x:1 +南北对话 1 +x:1 +度德量力 1 +x:1 +里通外国 1 +x:1 +台阶式 1 +x:1 +岂但 1 +x:1 +晋江县 1 +x:1 +斋宫 1 +x:1 +雄蜂 1 +x:1 +影视史 1 +x:1 +祎 1 +x:1 +母婴 1 +x:1 +感人心者 1 +x:1 +铁幕 1 +x:1 +半圆 1 +x:1 +砂型 1 +x:1 +薄父母 1 +x:1 +例如 1 +x:1 +报经 1 +x:1 +赛制 1 +x:1 +无毒害 1 +x:1 +受宠 1 +x:1 +存档 1 +x:1 +六盘水 1 +x:1 +旱烟袋 1 +x:1 +麓 6 +x:6 +由始至终 1 +x:1 +白发皤然 1 +x:1 +下跌股 1 +x:1 +受害 1 +x:1 +乐曲声 1 +x:1 +转眼 1 +x:1 +叫板 1 +x:1 +兴辞 1 +x:1 +戏班 1 +x:1 +喜酒 1 +x:1 +齐整 1 +x:1 +丑恶 1 +x:1 +家用 1 +x:1 +铁床 1 +x:1 +- 15 +x:15 +不定根 1 +x:1 +广谱 1 +x:1 +牡丹节 1 +x:1 +段位 1 +x:1 +硬仗 1 +x:1 +受孕 1 +x:1 +改建 1 +x:1 +简帖 1 +x:1 +家电 1 +x:1 +识货者 1 +x:1 +襄樊 1 +x:1 +制造业界 1 +x:1 +淋巴管 1 +x:1 +峥嵘岁月 1 +x:1 +彩团 1 +x:1 +非意愿 1 +x:1 +酒篓 1 +x:1 +金玉满堂 1 +x:1 +浦东 1 +x:1 +不含糊 1 +x:1 +选举权 1 +x:1 +硬件 1 +x:1 +相应物 1 +x:1 +天作之合 1 +x:1 +主麻日 1 +x:1 +恩格斯 1 +x:1 +病倒 1 +x:1 +牡丹花 1 +x:1 +嚼 24 +x:24 +家生 1 +x:1 +十字线 1 +x:1 +社会名流 1 +x:1 +气度美 1 +x:1 +回话 1 +x:1 +水泥钉 1 +x:1 +静若处子 1 +x:1 +松果腺 1 +x:1 +解说员 1 +x:1 +海德拉巴 1 +x:1 +别名 1 +x:1 +与世无争 1 +x:1 +水禽 1 +x:1 +司令部 1 +x:1 +惯懒 1 +x:1 +柴一 1 +x:1 +药材 1 +x:1 +堂奥 1 +x:1 +千娇百媚 1 +x:1 +转瞬 1 +x:1 +香雪斋 1 +x:1 +下颌部 1 +x:1 +回请 1 +x:1 +丑态 1 +x:1 +监装 1 +x:1 +例外 1 +x:1 +输水道 1 +x:1 +敬老篷 1 +x:1 +家畜 1 +x:1 +木管乐器 1 +x:1 +起早摸黑 1 +x:1 +装箱人 1 +x:1 +微机化 1 +x:1 +石龙头村 1 +x:1 +土特产 1 +x:1 +岂不 1 +x:1 +东大街 1 +x:1 +青枯病 1 +x:1 +唐 629 +x:629 +笔墨纸砚 1 +x:1 +徒劳无益 1 +x:1 +瓦伦西亚 1 +x:1 +纠建 1 +x:1 +见高低 1 +x:1 +拉练 1 +x:1 +项圈 1 +x:1 +工时费 1 +x:1 +惯性 1 +x:1 +非体育 1 +x:1 +藻思 1 +x:1 +图版 1 +x:1 +薄纸 1 +x:1 +圆通 1 +x:1 +丝毫不少 1 +x:1 +图片 1 +x:1 +科学楼 1 +x:1 +统治区 1 +x:1 +近代化史 1 +x:1 +闲逛 1 +x:1 +中研部 1 +x:1 +张集矿 1 +x:1 +剥离 1 +x:1 +供应权 1 +x:1 +捣固焦 1 +x:1 +换言之 1 +x:1 +伤病员 1 +x:1 +委办局 1 +x:1 +赛区 1 +x:1 +杜甫 1 +x:1 +沿边儿 1 +x:1 +珲春 1 +x:1 +母子 1 +x:1 +发现地 1 +x:1 +铁锁链 1 +x:1 +次数 1 +x:1 +同性恋 1 +x:1 +立模 1 +x:1 +堂堂 1 +x:1 +多数派 1 +x:1 +杏林区 1 +x:1 +从轻 1 +x:1 +灵隐寺 1 +x:1 +合围 1 +x:1 +午前 1 +x:1 +祈求 1 +x:1 +转盘 1 +x:1 +赛史 1 +x:1 +抽奖 1 +x:1 +浓彩淡染 1 +x:1 +籽粒 1 +x:1 +新罗区 1 +x:1 +经期 1 +x:1 +群聚 1 +x:1 +瓶盖 1 +x:1 +釉子 1 +x:1 +羽绒被 1 +x:1 +打骂 1 +x:1 +监狱长 1 +x:1 +左面 1 +x:1 +病假 1 +x:1 +待字闺中 1 +x:1 +铁心 1 +x:1 +抗癌 1 +x:1 +道岔厂 1 +x:1 +拆洗 1 +x:1 +账簿 1 +x:1 +叙述体 1 +x:1 +红10师 1 +x:1 +触景伤情 1 +x:1 +称赞声 1 +x:1 +不露声色 1 +x:1 +平行面 1 +x:1 +遮阳篷 1 +x:1 +莫此为甚 1 +x:1 +酒窖 1 +x:1 +低压 1 +x:1 +劝劝 1 +x:1 +酒窝 1 +x:1 +嗓子 1 +x:1 +策勒 1 +x:1 +赞不绝口 1 +x:1 +喜逢 1 +x:1 +匍匐 1 +x:1 +讨 47 +x:47 +摄制 1 +x:1 +乐不思蜀 1 +x:1 +竺 3 +x:3 +松花江 1 +x:1 +偷窥 1 +x:1 +发呆 1 +x:1 +龙袍 1 +x:1 +恶霸地主 1 +x:1 +起伏跌宕 1 +x:1 +戏照 1 +x:1 +选举日 1 +x:1 +马泉河 1 +x:1 +调研员 1 +x:1 +文明礼貌 1 +x:1 +车把势 1 +x:1 +二月 1 +x:1 +去粗取精 1 +x:1 +汲冢镇 1 +x:1 +使性子 1 +x:1 +光通信 1 +x:1 +偷窃 1 +x:1 +拼音文字 1 +x:1 +人非草木 1 +x:1 +画具费 1 +x:1 +血印儿 1 +x:1 +结业率 1 +x:1 +意味 1 +x:1 +实验田 1 +x:1 +低做 1 +x:1 +衣袋 1 +x:1 +药方 1 +x:1 +身高 1 +x:1 +档子 1 +x:1 +别国 1 +x:1 +仪征人 1 +x:1 +涑水 1 +x:1 +杆 45 +x:45 +播撒地 1 +x:1 +铁屑 1 +x:1 +说笑声 1 +x:1 +关系史 1 +x:1 +电椅 1 +x:1 +麻酥酥 1 +x:1 +抑菌作用 1 +x:1 +草绿色 1 +x:1 +通讯处 1 +x:1 +斧子 1 +x:1 +水稻 1 +x:1 +引滦入津 1 +x:1 +客栈 1 +x:1 +转用 1 +x:1 +累加 1 +x:1 +林海 1 +x:1 +穴位 1 +x:1 +边防局 1 +x:1 +核物理所 1 +x:1 +嘉言懿行 1 +x:1 +受奖 1 +x:1 +商品部 1 +x:1 +信息员 1 +x:1 +控制室 1 +x:1 +衷爱 1 +x:1 +家眷 1 +x:1 +形似 1 +x:1 +输赢 1 +x:1 +分数线 1 +x:1 +林涛 1 +x:1 +征税人 1 +x:1 +早点摊儿 1 +x:1 +笃志好学 1 +x:1 +攻坚乡 1 +x:1 +桧仓 1 +x:1 +记者站 1 +x:1 +忍无可忍 1 +x:1 +偷税 1 +x:1 +摄入 1 +x:1 +铁岭 1 +x:1 +议 55 +x:55 +才气 1 +x:1 +保卫者 1 +x:1 +例子 1 +x:1 +茶叶蛋 1 +x:1 +分离式 1 +x:1 +打馅 1 +x:1 +制裁法 1 +x:1 +面条 1 +x:1 +感受力 1 +x:1 +药效 1 +x:1 +倨傲 1 +x:1 +简屋 1 +x:1 +耐久 1 +x:1 +警醒 1 +x:1 +仲家 1 +x:1 +独角戏 1 +x:1 +杂烩 1 +x:1 +估测 1 +x:1 +面板 1 +x:1 +馆里 1 +x:1 +已逝者 1 +x:1 +回视 1 +x:1 +攫鼠 1 +x:1 +平面镜 1 +x:1 +迎新面 1 +x:1 +先哲 1 +x:1 +贝加尔 1 +x:1 +一纸空文 1 +x:1 +温莎宫 1 +x:1 +箱包 1 +x:1 +旅游车 1 +x:1 +摄像 1 +x:1 +累及 1 +x:1 +昭然若揭 1 +x:1 +创业潮 1 +x:1 +硼酸 1 +x:1 +琼岛 1 +x:1 +心知肚明 1 +x:1 +危房 1 +x:1 +群英 1 +x:1 +刻毒 1 +x:1 +凝聚剂 1 +x:1 +经文 1 +x:1 +退缩 1 +x:1 +沭 1 +x:1 +贬 16 +x:16 +上水道 1 +x:1 +存款 1 +x:1 +羽毛缎 1 +x:1 +电桥 1 +x:1 +金枝玉叶 1 +x:1 +雷暴 1 +x:1 +全州 1 +x:1 +蚁穴 1 +x:1 +做月子 1 +x:1 +乔治王岛 1 +x:1 +通史展 1 +x:1 +滑冰者 1 +x:1 +是样儿 1 +x:1 +管护节 1 +x:1 +母女 1 +x:1 +群芳 1 +x:1 +广远 1 +x:1 +台式机 1 +x:1 +食道癌 1 +x:1 +前列腺 1 +x:1 +光电子学 1 +x:1 +旧刊本 1 +x:1 +起跑地 1 +x:1 +崮山镇 1 +x:1 +电话机 1 +x:1 +言传身教 1 +x:1 +就此而言 1 +x:1 +叶片锁 1 +x:1 +栅 1 +x:1 +爪儿 1 +x:1 +企业局 1 +x:1 +前巷队 1 +x:1 +注册厅 1 +x:1 +惯技 1 +x:1 +急救险 1 +x:1 +低凹 1 +x:1 +无名指 1 +x:1 +针打式 1 +x:1 +经改 1 +x:1 +三河尖 1 +x:1 +快艇 1 +x:1 +建军节 1 +x:1 +血液病学 1 +x:1 +馆邸 1 +x:1 +数据源 1 +x:1 +河务局 1 +x:1 +拾音器 1 +x:1 +商品量 1 +x:1 +走江湖 1 +x:1 +青口镇 1 +x:1 +立档 1 +x:1 +丸药 1 +x:1 +非结盟 1 +x:1 +种植户 1 +x:1 +枯水季 1 +x:1 +班主任 1 +x:1 +刻款 1 +x:1 +盗伐 1 +x:1 +农奴主 1 +x:1 +铁工 1 +x:1 +赛况 1 +x:1 +传宗接代 1 +x:1 +物 200 +x:200 +书杂费 1 +x:1 +立案 1 +x:1 +群舞 1 +x:1 +电梯 1 +x:1 +松花湖 1 +x:1 +面乎乎 1 +x:1 +扭曲仪 1 +x:1 +黝红 1 +x:1 +合伙人 1 +x:1 +拍卖场 1 +x:1 +凝聚力 1 +x:1 +萝芙木 1 +x:1 +进退留转 1 +x:1 +藤球队 1 +x:1 +精兵强将 1 +x:1 +装备 1 +x:1 +雄魂 1 +x:1 +珠环 1 +x:1 +于田城 1 +x:1 +画工 1 +x:1 +田东县 1 +x:1 +打蜡 1 +x:1 +酒杯 1 +x:1 +骈文 1 +x:1 +闲赋 1 +x:1 +窑罐 1 +x:1 +泰山市 1 +x:1 +人言可畏 1 +x:1 +转正 1 +x:1 +种草 1 +x:1 +竹种园 1 +x:1 +小票 1 +x:1 +星辰 1 +x:1 +密歇根州 1 +x:1 +珠玑 1 +x:1 +遗毒 1 +x:1 +切合 1 +x:1 +权威 1 +x:1 +过路财神 1 +x:1 +文理工科 1 +x:1 +收市 1 +x:1 +勤快 1 +x:1 +特效 1 +x:1 +撞倒 1 +x:1 +面积 1 +x:1 +上挂下联 1 +x:1 +增长图 1 +x:1 +祈使句 1 +x:1 +喜筵 1 +x:1 +匡扶 1 +x:1 +员 77 +x:77 +导磁率 1 +x:1 +演丰镇 1 +x:1 +电眼 1 +x:1 +云鬓 1 +x:1 +情真意挚 1 +x:1 +量子力学 1 +x:1 +视神经 1 +x:1 +省吃俭用 1 +x:1 +边角料 1 +x:1 +三官庙 1 +x:1 +艰苦创业 1 +x:1 +塑料袋 1 +x:1 +上山下乡 1 +x:1 +渎职案 1 +x:1 +四盐矿 1 +x:1 +三轮摩托 1 +x:1 +浩茫 1 +x:1 +焊接件 1 +x:1 +栖居 1 +x:1 +监票员 1 +x:1 +福相 1 +x:1 +会所 1 +x:1 +投书者 1 +x:1 +旅游部 1 +x:1 +跳鞋 1 +x:1 +矿坑 1 +x:1 +万里长城 1 +x:1 +满腹牢骚 1 +x:1 +多渠道 1 +x:1 +炼铁厂 1 +x:1 +点铁成金 1 +x:1 +紫台山 1 +x:1 +游击战 1 +x:1 +赌博业 1 +x:1 +小儿科 1 +x:1 +广通 1 +x:1 +甫入 1 +x:1 +老谋深算 1 +x:1 +电石 1 +x:1 +穷山僻壤 1 +x:1 +理念 1 +x:1 +松柏乡 1 +x:1 +树木园 1 +x:1 +险弹 1 +x:1 +自告奋勇 1 +x:1 +黄页 1 +x:1 +午休 1 +x:1 +红庙李村 1 +x:1 +拌 21 +x:21 +低产 1 +x:1 +会战 1 +x:1 +良种化 1 +x:1 +阿肯色州 1 +x:1 +赛事 1 +x:1 +硬功 1 +x:1 +独有 1 +x:1 +筝 1 +x:1 +药筒 1 +x:1 +柴刀 1 +x:1 +西红柿 1 +x:1 +④ 16 +x:16 +椰影 1 +x:1 +收入数 1 +x:1 +钢支柱 1 +x:1 +林班 1 +x:1 +回音 1 +x:1 +喜贺 1 +x:1 +早籼稻 1 +x:1 +挥臂 1 +x:1 +饱 47 +x:47 +一抢而光 1 +x:1 +志存高远 1 +x:1 +挺进 1 +x:1 +低云 1 +x:1 +配线架 1 +x:1 +知识点 1 +x:1 +抵近 1 +x:1 +退意 1 +x:1 +酒智 1 +x:1 +卧虎形 1 +x:1 +涓 3 +x:3 +下阳乡 1 +x:1 +济助星 1 +x:1 +普沃茨克 1 +x:1 +获鹿 1 +x:1 +解囊相助 1 +x:1 +硬卧 1 +x:1 +鞭挞 1 +x:1 +低位 1 +x:1 +鱼子 1 +x:1 +增长型 1 +x:1 +回防 1 +x:1 +毛孔 1 +x:1 +钳 2 +x:2 +面碗 1 +x:1 +纵 30 +x:30 +砖混 1 +x:1 +师大 1 +x:1 +据守 1 +x:1 +全年度 1 +x:1 +捐钱 1 +x:1 +电视界 1 +x:1 +寇 29 +x:29 +富拉尔基 1 +x:1 +努嘴 1 +x:1 +赛会 1 +x:1 +库务局 1 +x:1 +立目 1 +x:1 +硬化 1 +x:1 +浦口 1 +x:1 +露脐装 1 +x:1 +症候 1 +x:1 +据实 1 +x:1 +遮阳板 1 +x:1 +开天辟地 1 +x:1 +蝾螈 1 +x:1 +闲谈 1 +x:1 +牙音 1 +x:1 +电线杆 1 +x:1 +抵达 1 +x:1 +醉意 1 +x:1 +初中版 1 +x:1 +脑门穴 1 +x:1 +勤廉 1 +x:1 +折半 1 +x:1 +展览品 1 +x:1 +燃烧室 1 +x:1 +科学界 1 +x:1 +密闭式 1 +x:1 +雨花台 1 +x:1 +悬空 1 +x:1 +林特 1 +x:1 +虚无缥缈 1 +x:1 +酒曲 1 +x:1 +挺身 1 +x:1 +铁科院 1 +x:1 +戍 1 +x:1 +报酬率 1 +x:1 +沱江 1 +x:1 +勐腊县 1 +x:1 +炖 9 +x:9 +存疑 1 +x:1 +大通道 1 +x:1 +弟 17 +x:17 +中医 1 +x:1 +师妹 1 +x:1 +卡子湾 1 +x:1 +画展 1 +x:1 +浦北 1 +x:1 +孝义 1 +x:1 +不时之需 1 +x:1 +光复路 1 +x:1 +蛆枣儿 1 +x:1 +双曲拱桥 1 +x:1 +选中 1 +x:1 +矫枉过正 1 +x:1 +画屏 1 +x:1 +承贷承还 1 +x:1 +箭簇 1 +x:1 +伊士曼 1 +x:1 +刻画 1 +x:1 +私商 1 +x:1 +师姑 1 +x:1 +摆钟 1 +x:1 +赓 7 +x:7 +嘉峪关 1 +x:1 +报捷 1 +x:1 +部委级 1 +x:1 +黑页岩 1 +x:1 +拳头产品 1 +x:1 +停靠点 1 +x:1 +浦南 1 +x:1 +仪 165 +x:165 +展开式 1 +x:1 +齐山区 1 +x:1 +陶朗加市 1 +x:1 +柔柔 1 +x:1 +动手 1 +x:1 +师娘 1 +x:1 +卧虎山 1 +x:1 +巴雾峡 1 +x:1 +越规者 1 +x:1 +古尔邦节 1 +x:1 +双羊镇 1 +x:1 +色目人 1 +x:1 +非法人 1 +x:1 +运销商 1 +x:1 +龙钟 1 +x:1 +喜迁 1 +x:1 +喜迎 1 +x:1 +众议员 1 +x:1 +险工 1 +x:1 +北京团 1 +x:1 +成份股 1 +x:1 +逐渐 1 +x:1 +毕业 1 +x:1 +被盗物 1 +x:1 +前元庄 1 +x:1 +亚记联 1 +x:1 +鱼塘 1 +x:1 +纤维蛋白 1 +x:1 +僵蚕 1 +x:1 +双索面 1 +x:1 +输量 1 +x:1 +淋洗 1 +x:1 +夏乐宫 1 +x:1 +封建主义 1 +x:1 +国电债 1 +x:1 +生儿育女 1 +x:1 +发展司 1 +x:1 +龙飞凤舞 1 +x:1 +猪粪肥 1 +x:1 +传递力 1 +x:1 +痣点 1 +x:1 +监院 1 +x:1 +凡尔赛宫 1 +x:1 +稀释型 1 +x:1 +目脑 1 +x:1 +挺起 1 +x:1 +药科 1 +x:1 +安装费 1 +x:1 +明哲保身 1 +x:1 +掘进 1 +x:1 +礼拜 1 +x:1 +凭 227 +x:227 +家母 1 +x:1 +奋斗与共 1 +x:1 +咨询点 1 +x:1 +累人 1 +x:1 +原平县 1 +x:1 +保修期 1 +x:1 +徒手操 1 +x:1 +形变 1 +x:1 +实验楼 1 +x:1 +选举票 1 +x:1 +化学肥料 1 +x:1 +发声 1 +x:1 +闲远 1 +x:1 +固态 1 +x:1 +松岗镇 1 +x:1 +警报器 1 +x:1 +良种兔 1 +x:1 +流畅 1 +x:1 +造粒机 1 +x:1 +小帽 1 +x:1 +账据 1 +x:1 +金桦果 1 +x:1 +哨楼 1 +x:1 +堆制 1 +x:1 +树形图 1 +x:1 +自当 1 +x:1 +上方宝剑 1 +x:1 +喜车 1 +x:1 +左轮手枪 1 +x:1 +分外活 1 +x:1 +盗割 1 +x:1 +相命摊 1 +x:1 +依兰县 1 +x:1 +幼雏 1 +x:1 +威兴我荣 1 +x:1 +达 3535 +x:3535 +花花草草 1 +x:1 +超高层 1 +x:1 +代理商 1 +x:1 +电疗 1 +x:1 +南北方 1 +x:1 +死棋 1 +x:1 +收入权 1 +x:1 +统合 1 +x:1 +中前场 1 +x:1 +报关行 1 +x:1 +大到暴雨 1 +x:1 +北极圈 1 +x:1 +时新 1 +x:1 +跳闸 1 +x:1 +存目 1 +x:1 +烟灰缸 1 +x:1 +挨斗 1 +x:1 +面筋 1 +x:1 +卡拉巴赫 1 +x:1 +责令 1 +x:1 +剧中 1 +x:1 +小题大做 1 +x:1 +从速 1 +x:1 +先后 1 +x:1 +政策部 1 +x:1 +辽宁队 1 +x:1 +惠水县 1 +x:1 +险峻 1 +x:1 +打落 1 +x:1 +乐于助人 1 +x:1 +因循 1 +x:1 +险峰 1 +x:1 +棉纤维 1 +x:1 +威风扫地 1 +x:1 +盗取 1 +x:1 +虎头鞋 1 +x:1 +三岔路村 1 +x:1 +迎泽 1 +x:1 +遍访 1 +x:1 +生死存亡 1 +x:1 +白晃晃 1 +x:1 +都柏灵 1 +x:1 +关系人 1 +x:1 +实验校 1 +x:1 +肇事人 1 +x:1 +从重 1 +x:1 +果铺 1 +x:1 +少不了 1 +x:1 +盗号 1 +x:1 +化验员 1 +x:1 +生产队 1 +x:1 +挥舞 1 +x:1 +扩印 1 +x:1 +滂滂然 1 +x:1 +鸟瞰图 1 +x:1 +活字合金 1 +x:1 +宗法 1 +x:1 +鱼头 1 +x:1 +堂而皇之 1 +x:1 +黄计工 1 +x:1 +循声 1 +x:1 +薄情 1 +x:1 +干事会 1 +x:1 +一见钟情 1 +x:1 +外汇额 1 +x:1 +绝世无匹 1 +x:1 +匠户 1 +x:1 +戏水 1 +x:1 +五神河 1 +x:1 +祁连 1 +x:1 +退换 1 +x:1 +龙门 1 +x:1 +画店 1 +x:1 +推而广之 1 +x:1 +商德 1 +x:1 +林火 1 +x:1 +广通站 1 +x:1 +堆叠 1 +x:1 +值机员 1 +x:1 +白朗朗 1 +x:1 +楼 433 +x:433 +光荣院 1 +x:1 +鼓鼓 1 +x:1 +三迭纪 1 +x:1 +标识号 1 +x:1 +经社 1 +x:1 +形制 1 +x:1 +硬凑 1 +x:1 +阙 10 +x:10 +中性点 1 +x:1 +联邦化 1 +x:1 +壮苗 1 +x:1 +木兰县 1 +x:1 +男女老幼 1 +x:1 +包身工制 1 +x:1 +电瓶 1 +x:1 +驿站 1 +x:1 +生态学 1 +x:1 +画幅 1 +x:1 +联邦区 1 +x:1 +鳞次栉比 1 +x:1 +戏法 1 +x:1 +耀县 1 +x:1 +生物电流 1 +x:1 +会意 1 +x:1 +账户 1 +x:1 +无闲人 1 +x:1 +粉针 1 +x:1 +农奴制 1 +x:1 +诱降 1 +x:1 +五孔桥 1 +x:1 +快车道 1 +x:1 +自豪感 1 +x:1 +画帖 1 +x:1 +伸缩性 1 +x:1 +旁注 1 +x:1 +卫 43 +x:43 +聚集地 1 +x:1 +盗匪 1 +x:1 +画布 1 +x:1 +群鸟 1 +x:1 +筛管 1 +x:1 +输送 1 +x:1 +画师 1 +x:1 +星象 1 +x:1 +张三李四 1 +x:1 +嘀嘀 1 +x:1 +经纬 1 +x:1 +艺术局 1 +x:1 +经纪 1 +x:1 +练歌厅 1 +x:1 +莲花落 1 +x:1 +残留性 1 +x:1 +全尸 1 +x:1 +竣工 1 +x:1 +经线 1 +x:1 +监造 1 +x:1 +手艺 1 +x:1 +经纶 1 +x:1 +四医大 1 +x:1 +莫内塔 1 +x:1 +广钢 1 +x:1 +瓦莱塔 1 +x:1 +曾孙 1 +x:1 +畜禽业 1 +x:1 +癌细胞 1 +x:1 +聪颖 1 +x:1 +襄棉 1 +x:1 +仙鹤 1 +x:1 +耳闻 1 +x:1 +伉俪 1 +x:1 +影戏院 1 +x:1 +优良品率 1 +x:1 +化验单 1 +x:1 +平昌县 1 +x:1 +难舍难离 1 +x:1 +购物卡 1 +x:1 +团结湖 1 +x:1 +坪台 1 +x:1 +慎 30 +x:30 +叠音 1 +x:1 +打药 1 +x:1 +从难 1 +x:1 +减编 1 +x:1 +嚏喷 1 +x:1 +中心角 1 +x:1 +偷情 1 +x:1 +奔头儿 1 +x:1 +党风室 1 +x:1 +擅入 1 +x:1 +作物 1 +x:1 +刑律者 1 +x:1 +知心人 1 +x:1 +乔治亚岛 1 +x:1 +经络 1 +x:1 +鱼市 1 +x:1 +伟绩 1 +x:1 +刊授 1 +x:1 +逐案 1 +x:1 +暴饮暴食 1 +x:1 +广铁 1 +x:1 +路队制 1 +x:1 +佩雷斯 1 +x:1 +见怪不怪 1 +x:1 +僵蛰 1 +x:1 +活动站 1 +x:1 +那边 1 +x:1 +暖烘烘 1 +x:1 +珠光灯 1 +x:1 +特兴镇 1 +x:1 +软绵绵 1 +x:1 +赈济 1 +x:1 +翼展 1 +x:1 +发动机 1 +x:1 +老鼠洞 1 +x:1 +塘边 1 +x:1 +挨揍 1 +x:1 +大鱼大肉 1 +x:1 +肆虐无忌 1 +x:1 +康铜 1 +x:1 +电珠 1 +x:1 +制冷剂 1 +x:1 +会昌 1 +x:1 +椰子 1 +x:1 +大致说来 1 +x:1 +酚醛树脂 1 +x:1 +画夹 1 +x:1 +中签者 1 +x:1 +雕梁画栋 1 +x:1 +科学热 1 +x:1 +劳务社 1 +x:1 +嗖 2 +x:2 +值机台 1 +x:1 +麻辣 1 +x:1 +生产量 1 +x:1 +画外 1 +x:1 +耄耋高龄 1 +x:1 +格局 1 +x:1 +薄板 1 +x:1 +盛开 1 +x:1 +印象主义 1 +x:1 +发展商 1 +x:1 +良种场 1 +x:1 +半侧 1 +x:1 +改过自新 1 +x:1 +向声背实 1 +x:1 +挨批 1 +x:1 +东瓦窑 1 +x:1 +忙忙地 1 +x:1 +小型张 1 +x:1 +翠柏丛 1 +x:1 +游禽 1 +x:1 +太仓一粟 1 +x:1 +示范 1 +x:1 +骑马 1 +x:1 +联航队 1 +x:1 +雅加达市 1 +x:1 +广安县 1 +x:1 +识字班 1 +x:1 +综合科 1 +x:1 +内阁总理 1 +x:1 +泡杉 1 +x:1 +人困马乏 1 +x:1 +面粉 1 +x:1 +售货 1 +x:1 +胖小子 1 +x:1 +板卡 1 +x:1 +安阳市 1 +x:1 +痞 1 +x:1 +雄鹰 1 +x:1 +临街面 1 +x:1 +光子学 1 +x:1 +坦桑 1 +x:1 +鼓乐声 1 +x:1 +识字率 1 +x:1 +挨户 1 +x:1 +柴达木 1 +x:1 +香花 1 +x:1 +无定形碳 1 +x:1 +延水 1 +x:1 +战炮 1 +x:1 +探测站 1 +x:1 +衣钵相传 1 +x:1 +未知数 1 +x:1 +画墙 1 +x:1 +存照 1 +x:1 +面糊 1 +x:1 +皮肤学 1 +x:1 +画境 1 +x:1 +家法 1 +x:1 +硬着头皮 1 +x:1 +重提 1 +x:1 +药绳 1 +x:1 +控制区 1 +x:1 +迁 151 +x:151 +寄宿生 1 +x:1 +异同 1 +x:1 +娶亲 1 +x:1 +电影城 1 +x:1 +睾丸 1 +x:1 +音容笑貌 1 +x:1 +发扬光大 1 +x:1 +对照组 1 +x:1 +密山市 1 +x:1 +半价 1 +x:1 +智能卡 1 +x:1 +推荐奖 1 +x:1 +甩掉 1 +x:1 +孤苦伶丁 1 +x:1 +里外开花 1 +x:1 +代理制 1 +x:1 +链轨式 1 +x:1 +长子县 1 +x:1 +组建期 1 +x:1 +酃 1 +x:1 +贪小失大 1 +x:1 +礼数 1 +x:1 +十字架 1 +x:1 +猪牛羊肉 1 +x:1 +邢 70 +x:70 +努努 1 +x:1 +监控器 1 +x:1 +统包 1 +x:1 +叫绝 1 +x:1 +骑骑 1 +x:1 +一瓣心香 1 +x:1 +努力 1 +x:1 +丁基橡胶 1 +x:1 +丁家山 1 +x:1 +礼教 1 +x:1 +燃烧弹 1 +x:1 +画堂 1 +x:1 +中性盐 1 +x:1 +黎明村 1 +x:1 +多姿多彩 1 +x:1 +六九年 1 +x:1 +付印 1 +x:1 +逛来逛去 1 +x:1 +磅湛省 1 +x:1 +会操 1 +x:1 +内电路 1 +x:1 +丰收年 1 +x:1 +航天局 1 +x:1 +预见性 1 +x:1 +古人类学 1 +x:1 +生死立判 1 +x:1 +遍身 1 +x:1 +伤心 1 +x:1 +西十四村 1 +x:1 +纳塔尔市 1 +x:1 +虚伪 1 +x:1 +蜜罐 1 +x:1 +有禁不止 1 +x:1 +组长 1 +x:1 +初中生 1 +x:1 +中心论 1 +x:1 +发展型 1 +x:1 +云开日出 1 +x:1 +收发报 1 +x:1 +中心词 1 +x:1 +画家 1 +x:1 +倒班 1 +x:1 +文化衫 1 +x:1 +取精用弘 1 +x:1 +啼猿 1 +x:1 +海州湾 1 +x:1 +鱼尸 1 +x:1 +电视片 1 +x:1 +黄桷树 1 +x:1 +腊月 1 +x:1 +画室 1 +x:1 +洲界 1 +x:1 +火成岩 1 +x:1 +道破 1 +x:1 +鬻 2 +x:2 +中心语 1 +x:1 +组合柜 1 +x:1 +奥妙 1 +x:1 +龙潭镇 1 +x:1 +喜讯 1 +x:1 +酒意 1 +x:1 +孤身一人 1 +x:1 +比例制 1 +x:1 +持枪 1 +x:1 +果酒 1 +x:1 +久假不归 1 +x:1 +社区型 1 +x:1 +闲话 1 +x:1 +自视甚高 1 +x:1 +妊 1 +x:1 +攻歼 1 +x:1 +闲评 1 +x:1 +月塘村 1 +x:1 +嘀咕 1 +x:1 +分印点 1 +x:1 +分理处 1 +x:1 +急救车 1 +x:1 +闲说 1 +x:1 +游程 1 +x:1 +果酱 1 +x:1 +牙雕 1 +x:1 +瘫 10 +x:10 +广阔 1 +x:1 +盛宅村 1 +x:1 +胜利品 1 +x:1 +抵补 1 +x:1 +从政者 1 +x:1 +烘制 1 +x:1 +句容县 1 +x:1 +断后 1 +x:1 +秋高气爽 1 +x:1 +海洋学家 1 +x:1 +链钳子 1 +x:1 +广陵 1 +x:1 +滑冰馆 1 +x:1 +面罩 1 +x:1 +对 27688 +x:27688 +映山红 1 +x:1 +幽微 1 +x:1 +石雕 1 +x:1 +青麻 1 +x:1 +儿康宁 1 +x:1 +广院 1 +x:1 +回采 1 +x:1 +经籍 1 +x:1 +勤奋 1 +x:1 +报摊 1 +x:1 +葛仙米 1 +x:1 +线膨胀 1 +x:1 +秧子 1 +x:1 +珮 1 +x:1 +捻军 1 +x:1 +筛网 1 +x:1 +舆地书 1 +x:1 +师弟 1 +x:1 +药粉 1 +x:1 +摇摆性 1 +x:1 +蚱蜢舟 1 +x:1 +逐次 1 +x:1 +面纱 1 +x:1 +均一 1 +x:1 +跪拜礼 1 +x:1 +会旗 1 +x:1 +面纸 1 +x:1 +排放者 1 +x:1 +迎检 1 +x:1 +报文 1 +x:1 +发家 1 +x:1 +毅力 1 +x:1 +图案 1 +x:1 +电灯 1 +x:1 +绒织 1 +x:1 +抵触 1 +x:1 +箭竹 1 +x:1 +铺张浪费 1 +x:1 +工薪族 1 +x:1 +记联 1 +x:1 +珠 28 +x:28 +绒线 1 +x:1 +戏校 1 +x:1 +图样 1 +x:1 +开场白 1 +x:1 +箭窗 1 +x:1 +查验簿 1 +x:1 +忠心耿耿 1 +x:1 +完美无缺 1 +x:1 +报时 1 +x:1 +气势如虹 1 +x:1 +租 133 +x:133 +启航 1 +x:1 +天下大乱 1 +x:1 +匿影藏形 1 +x:1 +后过渡期 1 +x:1 +同仁 1 +x:1 +事业部 1 +x:1 +注文 1 +x:1 +付出 1 +x:1 +专注 1 +x:1 +梦华 1 +x:1 +场强 1 +x:1 +惠州 1 +x:1 +传动带 1 +x:1 +翁婿 1 +x:1 +图标 1 +x:1 +铁账本 1 +x:1 +长臂虾 1 +x:1 +拼命 1 +x:1 +旺旺 1 +x:1 +组团式 1 +x:1 +木刻 1 +x:1 +师徒 1 +x:1 +绣花厂 1 +x:1 +惯窃 1 +x:1 +埃默鲁市 1 +x:1 +辐 1 +x:1 +珠琴 1 +x:1 +招生数 1 +x:1 +重氢 1 +x:1 +对立论 1 +x:1 +建设部 1 +x:1 +白金汉宫 1 +x:1 +煮豆燃萁 1 +x:1 +擅动 1 +x:1 +赘疣 1 +x:1 +堆场 1 +x:1 +不可分割 1 +x:1 +师德 1 +x:1 +统共 1 +x:1 +电热 1 +x:1 +结壳 1 +x:1 +乙类 1 +x:1 +风笛 1 +x:1 +赵家岭村 1 +x:1 +雅士 1 +x:1 +礼服 1 +x:1 +非公务 1 +x:1 +大都会 1 +x:1 +雁窝岛 1 +x:1 +樱井 1 +x:1 +出让金 1 +x:1 +婉 4 +x:4 +渔政处 1 +x:1 +电炉 1 +x:1 +陈年老辞 1 +x:1 +友党 1 +x:1 +禁猎 1 +x:1 +奔走相告 1 +x:1 +报数 1 +x:1 +聚集区 1 +x:1 +报效 1 +x:1 +学术史 1 +x:1 +主台 1 +x:1 +旅游鞋 1 +x:1 +因子 1 +x:1 +洋地黄 1 +x:1 +璎珞 1 +x:1 +养育之恩 1 +x:1 +深文周纳 1 +x:1 +镁砖 1 +x:1 +药王 1 +x:1 +图板 1 +x:1 +电网 1 +x:1 +事不关己 1 +x:1 +咨询站 1 +x:1 +院校长 1 +x:1 +联产 1 +x:1 +监控室 1 +x:1 +精神病院 1 +x:1 +四六文 1 +x:1 +转换 1 +x:1 +新教派 1 +x:1 +惯用 1 +x:1 +海岸线 1 +x:1 +甘拜下风 1 +x:1 +筵席 1 +x:1 +踏踏实实 1 +x:1 +搜查 1 +x:1 +珠算 1 +x:1 +甘紫菜 1 +x:1 +炎症 1 +x:1 +投桃报李 1 +x:1 +博士奖 1 +x:1 +跳鼠 1 +x:1 +窄窄 1 +x:1 +戏本 1 +x:1 +庙里 1 +x:1 +细胞学 1 +x:1 +剑眉 1 +x:1 +海口市 1 +x:1 +图本 1 +x:1 +祈福 1 +x:1 +母乳 1 +x:1 +打转 1 +x:1 +电缆 1 +x:1 +椰城 1 +x:1 +社会教育 1 +x:1 +笆篱 1 +x:1 +覆盖物 1 +x:1 +倒卵形 1 +x:1 +茎秆 1 +x:1 +记载 1 +x:1 +适时 1 +x:1 +村小 1 +x:1 +批发业 1 +x:1 +装具 1 +x:1 +塘荷 1 +x:1 +唐庄乡 1 +x:1 +实实地 1 +x:1 +肥得鲁儿 1 +x:1 +固城乡 1 +x:1 +安阳县 1 +x:1 +祈祝 1 +x:1 +金张掖 1 +x:1 +对照班 1 +x:1 +宠物 1 +x:1 +段子 1 +x:1 +首字音 1 +x:1 +四脚八叉 1 +x:1 +受体 1 +x:1 +龙鸟 1 +x:1 +母亲 1 +x:1 +批发价 1 +x:1 +紧锣密鼓 1 +x:1 +千古风范 1 +x:1 +汀江 1 +x:1 +师傅 1 +x:1 +女巫 1 +x:1 +梭罗树 1 +x:1 +存粮 1 +x:1 +洗衣店 1 +x:1 +冒充 1 +x:1 +音尘 1 +x:1 +波恩市 1 +x:1 +祈祷 1 +x:1 +胃癌 1 +x:1 +宾朋 1 +x:1 +画商 1 +x:1 +团结报 1 +x:1 +三三制 1 +x:1 +重水 1 +x:1 +狂傲 1 +x:1 +科学系 1 +x:1 +阿里特纳 1 +x:1 +太平龙头 1 +x:1 +整除 1 +x:1 +水电部 1 +x:1 +铁壁铜墙 1 +x:1 +宠爱 1 +x:1 +记过 1 +x:1 +软件 1 +x:1 +雄鸡头者 1 +x:1 +万里长征 1 +x:1 +统帅 1 +x:1 +师出无名 1 +x:1 +报橱 1 +x:1 +红宴 1 +x:1 +记述 1 +x:1 +受伤 1 +x:1 +久拖不决 1 +x:1 +双塘村 1 +x:1 +发展奖 1 +x:1 +工委会 1 +x:1 +酱 9 +x:9 +止痛片 1 +x:1 +女工 1 +x:1 +无人机 1 +x:1 +用品 1 +x:1 +通式 1 +x:1 +涿鹿 1 +x:1 +恰恰相反 1 +x:1 +之中 1 +x:1 +辩论 1 +x:1 +那般 1 +x:1 +寅吃卯粮 1 +x:1 +币种 1 +x:1 +转手 1 +x:1 +窥豹一斑 1 +x:1 +凡堡村 1 +x:1 +抓差 1 +x:1 +擦身而过 1 +x:1 +门楣 1 +x:1 +十字步 1 +x:1 +例外论 1 +x:1 +面点 1 +x:1 +开怀大笑 1 +x:1 +树木影 1 +x:1 +风行一时 1 +x:1 +赔还 1 +x:1 +小型化 1 +x:1 +同盟军 1 +x:1 +不尚空谈 1 +x:1 +新鲜事 1 +x:1 +急乎乎 1 +x:1 +板刷 1 +x:1 +画品 1 +x:1 +村屯 1 +x:1 +坐困愁城 1 +x:1 +蓝墨水 1 +x:1 +匡正 1 +x:1 +文登市 1 +x:1 +血象 1 +x:1 +新运处 1 +x:1 +患难之交 1 +x:1 +受事 1 +x:1 +漩起 1 +x:1 +铜山县 1 +x:1 +形声 1 +x:1 +装做 1 +x:1 +大庆市 1 +x:1 +那色 1 +x:1 +师兄 1 +x:1 +塑料膜 1 +x:1 +柴胡店镇 1 +x:1 +三八节 1 +x:1 +惠及 1 +x:1 +碗筷 1 +x:1 +锦纶 1 +x:1 +师公 1 +x:1 +辩证 1 +x:1 +通讯业 1 +x:1 +庄浪籍 1 +x:1 +学生证 1 +x:1 +鱼台 1 +x:1 +看病票 1 +x:1 +统归 1 +x:1 +泰宁县 1 +x:1 +同友会 1 +x:1 +鱼口 1 +x:1 +龙鼓 1 +x:1 +戏曲 1 +x:1 +土 277 +x:277 +香港队 1 +x:1 +心窝窝 1 +x:1 +谱曲 1 +x:1 +回国率 1 +x:1 +重点论 1 +x:1 +航天史 1 +x:1 +印书馆 1 +x:1 +装傻 1 +x:1 +鱼叉 1 +x:1 +作茧自缚 1 +x:1 +药片 1 +x:1 +通缉令 1 +x:1 +林立 1 +x:1 +迎春 1 +x:1 +多数票 1 +x:1 +墟里 1 +x:1 +逐日 1 +x:1 +硬实 1 +x:1 +腊梅 1 +x:1 +大中学生 1 +x:1 +受业 1 +x:1 +转折 1 +x:1 +电线 1 +x:1 +转报 1 +x:1 +药物 1 +x:1 +加盖 1 +x:1 +同盟党 1 +x:1 +水上飞机 1 +x:1 +木材林 1 +x:1 +管标治本 1 +x:1 +兴趣 1 +x:1 +汀洲 1 +x:1 +散逸 1 +x:1 +惠卖 1 +x:1 +堆积层 1 +x:1 +核反应 1 +x:1 +疲弱 1 +x:1 +决死队 1 +x:1 +籽棉 1 +x:1 +画名 1 +x:1 +阳高县 1 +x:1 +问效 1 +x:1 +大众车 1 +x:1 +错判案 1 +x:1 +锡养堂 1 +x:1 +长话短说 1 +x:1 +口杰伊汉 1 +x:1 +印刷史 1 +x:1 +交口称誉 1 +x:1 +形容 1 +x:1 +打败 1 +x:1 +泥胎儿 1 +x:1 +观音竹 1 +x:1 +中英文 1 +x:1 +客籍 1 +x:1 +内防军 1 +x:1 +泡桐 1 +x:1 +受孕率 1 +x:1 +箭石 1 +x:1 +应用文 1 +x:1 +汪汪 1 +x:1 +跟斗 1 +x:1 +转意 1 +x:1 +新闻论 1 +x:1 +绍兴市 1 +x:1 +草铺 1 +x:1 +仙逝 1 +x:1 +衷曲 1 +x:1 +碟片 1 +x:1 +湘鄂川黔 1 +x:1 +违章率 1 +x:1 +平面几何 1 +x:1 +有空 1 +x:1 +青鲨 1 +x:1 +神职人员 1 +x:1 +软性 1 +x:1 +打赌 1 +x:1 +癫痫病 1 +x:1 +英姿飒爽 1 +x:1 +中小城 1 +x:1 +学生装 1 +x:1 +行政科 1 +x:1 +欧阳 1 +x:1 +偷渡 1 +x:1 +中东非 1 +x:1 +洗菜盆 1 +x:1 +阿斯旺 1 +x:1 +急救药 1 +x:1 +打趣 1 +x:1 +妇女部 1 +x:1 +创 583 +x:583 +胳肢窝 1 +x:1 +延揽 1 +x:1 +冀东 1 +x:1 +报栏 1 +x:1 +败 142 +x:142 +税源 1 +x:1 +画坛 1 +x:1 +置身事外 1 +x:1 +堂伯 1 +x:1 +劝阻 1 +x:1 +北农大 1 +x:1 +见习员 1 +x:1 +硬壳 1 +x:1 +原创性 1 +x:1 +缺斤短两 1 +x:1 +滩羊皮 1 +x:1 +下达河乡 1 +x:1 +人心思和 1 +x:1 +花溪乡 1 +x:1 +林种 1 +x:1 +会标 1 +x:1 +松江省 1 +x:1 +水火无情 1 +x:1 +即兴诗 1 +x:1 +发展学 1 +x:1 +劝降 1 +x:1 +默 8 +x:8 +馆藏 1 +x:1 +报案 1 +x:1 +运输户 1 +x:1 +戏文 1 +x:1 +欧陆 1 +x:1 +包河 1 +x:1 +烘干 1 +x:1 +例会 1 +x:1 +如诉如泣 1 +x:1 +图文 1 +x:1 +盗寇 1 +x:1 +鱼具 1 +x:1 +合唱 1 +x:1 +前茅 1 +x:1 +诈农案 1 +x:1 +残 60 +x:60 +画图 1 +x:1 +方城县 1 +x:1 +缘 55 +x:55 +钦敬 1 +x:1 +割让 1 +x:1 +延承 1 +x:1 +过把瘾 1 +x:1 +月殿 1 +x:1 +院长 1 +x:1 +达坂城 1 +x:1 +实验性 1 +x:1 +群集 1 +x:1 +停泊地 1 +x:1 +群雄 1 +x:1 +中川乡 1 +x:1 +脚步声 1 +x:1 +黑墨水 1 +x:1 +吨粮田 1 +x:1 +源远流长 1 +x:1 +百废具兴 1 +x:1 +锄头 1 +x:1 +群雕 1 +x:1 +退款 1 +x:1 +柳条湖 1 +x:1 +乙烷 1 +x:1 +下策 1 +x:1 +酒水 1 +x:1 +各奔东西 1 +x:1 +拍马 1 +x:1 +急性子 1 +x:1 +逐条 1 +x:1 +好望角 1 +x:1 +幼鼠 1 +x:1 +电视网 1 +x:1 +辩解 1 +x:1 +兜 17 +x:17 +酒气 1 +x:1 +风水宝地 1 +x:1 +逐村 1 +x:1 +艺术院团 1 +x:1 +退步 1 +x:1 +保不住 1 +x:1 +求仙记 1 +x:1 +正式化 1 +x:1 +损耗 1 +x:1 +朋友式 1 +x:1 +演播 1 +x:1 +堂上 1 +x:1 +于 8381 +x:8381 +苏铁科 1 +x:1 +两三点钟 1 +x:1 +收盘价 1 +x:1 +解析数论 1 +x:1 +立簿 1 +x:1 +望尘莫及 1 +x:1 +泰斗 1 +x:1 +逸话 1 +x:1 +谈古论今 1 +x:1 +训练课 1 +x:1 +和平路 1 +x:1 +敞露 1 +x:1 +名产 1 +x:1 +塘肥 1 +x:1 +弗里敦市 1 +x:1 +杭州湾 1 +x:1 +酒泉 1 +x:1 +堂主 1 +x:1 +置身世外 1 +x:1 +设想 1 +x:1 +黄浦区 1 +x:1 +堆存 1 +x:1 +褒誉 1 +x:1 +师友 1 +x:1 +棚户区 1 +x:1 +针鼹 1 +x:1 +售菜 1 +x:1 +科工委 1 +x:1 +赔账 1 +x:1 +对照点 1 +x:1 +数据站 1 +x:1 +簇簇 1 +x:1 +面片 1 +x:1 +浸膏 1 +x:1 +出出进进 1 +x:1 +砖木 1 +x:1 +幼龟 1 +x:1 +雨丝 1 +x:1 +白嘴鸦 1 +x:1 +冰道 1 +x:1 +有据可查 1 +x:1 +幼龄 1 +x:1 +康斯坦察 1 +x:1 +绵羊肉 1 +x:1 +风籁 1 +x:1 +家托 1 +x:1 +冲抵法 1 +x:1 +团结星 1 +x:1 +皇 2 +x:2 +咨询组 1 +x:1 +该场 1 +x:1 +安波汤 1 +x:1 +手握胜券 1 +x:1 +二元酸 1 +x:1 +电筒 1 +x:1 +含含糊糊 1 +x:1 +面疱 1 +x:1 +生生不已 1 +x:1 +钛 13 +x:13 +教书 1 +x:1 +叫真 1 +x:1 +时机 1 +x:1 +龙骨 1 +x:1 +天灾人祸 1 +x:1 +一语道破 1 +x:1 +世界一统 1 +x:1 +综机 1 +x:1 +梁园镇 1 +x:1 +主张者 1 +x:1 +绿草如茵 1 +x:1 +周水子 1 +x:1 +之上 1 +x:1 +航天器 1 +x:1 +央 1 +x:1 +改乘 1 +x:1 +基础论 1 +x:1 +座套 1 +x:1 +隐喻 1 +x:1 +铁丹 1 +x:1 +冰箱业 1 +x:1 +生力军 1 +x:1 +珠翠 1 +x:1 +奸污 1 +x:1 +脊梁骨 1 +x:1 +硬币 1 +x:1 +简介 1 +x:1 +训练有素 1 +x:1 +迎接 1 +x:1 +返程票 1 +x:1 +各家 1 +x:1 +引人深思 1 +x:1 +仔猪 1 +x:1 +林网 1 +x:1 +轻举妄动 1 +x:1 +赔小心 1 +x:1 +挨次 1 +x:1 +云霭 1 +x:1 +庙门 1 +x:1 +通今博古 1 +x:1 +礼法 1 +x:1 +转术 1 +x:1 +纨绔子弟 1 +x:1 +髯 5 +x:5 +家族 1 +x:1 +乐天知命 1 +x:1 +叵 1 +x:1 +动植物 1 +x:1 +时有 1 +x:1 +下小河 1 +x:1 +不可逾越 1 +x:1 +人权 1 +x:1 +画册 1 +x:1 +奇志 1 +x:1 +地下室 1 +x:1 +画具 1 +x:1 +适意 1 +x:1 +汨罗队 1 +x:1 +江河日下 1 +x:1 +世界级 1 +x:1 +心平气顺 1 +x:1 +继承者 1 +x:1 +改任 1 +x:1 +劝退 1 +x:1 +实验林 1 +x:1 +浑身 1 +x:1 +家政 1 +x:1 +手提箱 1 +x:1 +旁门左道 1 +x:1 +环靶 1 +x:1 +酒毒 1 +x:1 +太康县 1 +x:1 +旧雨重逢 1 +x:1 +吃不来 1 +x:1 +舞客 1 +x:1 +小试牛刀 1 +x:1 +耿介拔俗 1 +x:1 +揭牌 1 +x:1 +硕鼠 1 +x:1 +印刷厂 1 +x:1 +铁人 1 +x:1 +客站 1 +x:1 +啮合 1 +x:1 +吃不服 1 +x:1 +五棵树村 1 +x:1 +首规委 1 +x:1 +陇 12 +x:12 +朗润园 1 +x:1 +增删 1 +x:1 +电算 1 +x:1 +下笔 1 +x:1 +哗啦啦 1 +x:1 +化验室 1 +x:1 +家数 1 +x:1 +段式 1 +x:1 +民房 1 +x:1 +梁券 1 +x:1 +厮杀 1 +x:1 +太空日 1 +x:1 +椽子 1 +x:1 +意象篇 1 +x:1 +将门 1 +x:1 +百合花 1 +x:1 +曾厝 1 +x:1 +提炼 1 +x:1 +酌定 1 +x:1 +浸蚀 1 +x:1 +双关语 1 +x:1 +寒鸦 1 +x:1 +吸引力 1 +x:1 +面露难色 1 +x:1 +辅读班 1 +x:1 +玉兰花 1 +x:1 +悬石 1 +x:1 +家教 1 +x:1 +布头 1 +x:1 +石炭纪 1 +x:1 +师哥 1 +x:1 +阴湿 1 +x:1 +花好月圆 1 +x:1 +白话文学 1 +x:1 +稳定平衡 1 +x:1 +超高压 1 +x:1 +勤务 1 +x:1 +种植热 1 +x:1 +选任 1 +x:1 +油腻腻 1 +x:1 +寒鸭 1 +x:1 +闲职 1 +x:1 +自立者 1 +x:1 +泰山区 1 +x:1 +勤劳 1 +x:1 +闲聊 1 +x:1 +倘佯 1 +x:1 +雄险 1 +x:1 +情有可原 1 +x:1 +群蛇 1 +x:1 +养猪业 1 +x:1 +嘲 2 +x:2 +农村司 1 +x:1 +倘使 1 +x:1 +北四环 1 +x:1 +上阕 1 +x:1 +正词法 1 +x:1 +画像 1 +x:1 +简便 1 +x:1 +金州区 1 +x:1 +破坏者 1 +x:1 +新人王赛 1 +x:1 +学术奖 1 +x:1 +文化教育 1 +x:1 +赛羊会 1 +x:1 +玄明粉 1 +x:1 +矩阵 1 +x:1 +团结村 1 +x:1 +妹妹 1 +x:1 +平常心 1 +x:1 +亚文化 1 +x:1 +雄阔 1 +x:1 +万架次率 1 +x:1 +勤勉 1 +x:1 +永葆青春 1 +x:1 +想当然 1 +x:1 +搜索引擎 1 +x:1 +小富村 1 +x:1 +墨斗鱼 1 +x:1 +完善化 1 +x:1 +匠气 1 +x:1 +跳马 1 +x:1 +撞死 1 +x:1 +欧里 1 +x:1 +喜联 1 +x:1 +电站 1 +x:1 +地区司 1 +x:1 +抓好 1 +x:1 +咆 1 +x:1 +航天城 1 +x:1 +息烽县 1 +x:1 +煤水电费 1 +x:1 +寿命 1 +x:1 +云雾 1 +x:1 +版画史 1 +x:1 +人心思变 1 +x:1 +篮下 1 +x:1 +跟手 1 +x:1 +红三军 1 +x:1 +箱底 1 +x:1 +栾老寨 1 +x:1 +祝贺 1 +x:1 +罐头盒 1 +x:1 +折衷主义 1 +x:1 +完中 1 +x:1 +筵宴 1 +x:1 +白条猪 1 +x:1 +话务量 1 +x:1 +实装 1 +x:1 +拉各斯 1 +x:1 +面巾纸 1 +x:1 +呼吸道 1 +x:1 +香茗 1 +x:1 +云集 1 +x:1 +摩拉维亚 1 +x:1 +膏腴之地 1 +x:1 +长命百岁 1 +x:1 +妹夫 1 +x:1 +跳高 1 +x:1 +突破口 1 +x:1 +劝酒 1 +x:1 +几易其稿 1 +x:1 +基础课 1 +x:1 +交口称赞 1 +x:1 +简体 1 +x:1 +会演 1 +x:1 +炭火 1 +x:1 +初中组 1 +x:1 +迎战 1 +x:1 +发展局 1 +x:1 +企业主 1 +x:1 +绒球 1 +x:1 +扬其所长 1 +x:1 +一家之言 1 +x:1 +边境区 1 +x:1 +立体电影 1 +x:1 +泡汤 1 +x:1 +霆 1 +x:1 +酒楼 1 +x:1 +武义县 1 +x:1 +幼驹 1 +x:1 +大忙时节 1 +x:1 +和平街 1 +x:1 +龙颜 1 +x:1 +药疗 1 +x:1 +伟光乡 1 +x:1 +淋漓 1 +x:1 +肝风 1 +x:1 +面神经 1 +x:1 +自为 1 +x:1 +电梯间 1 +x:1 +粉饰 1 +x:1 +果树园 1 +x:1 +采风团 1 +x:1 +会泽 1 +x:1 +闲荡 1 +x:1 +药疹 1 +x:1 +苏铁类 1 +x:1 +商工 1 +x:1 +骄纵放任 1 +x:1 +热处理 1 +x:1 +斑马鱼 1 +x:1 +同盟国 1 +x:1 +云锣 1 +x:1 +装坛 1 +x:1 +云锦 1 +x:1 +片断 1 +x:1 +保卫部 1 +x:1 +习 21 +x:21 +千岛湖 1 +x:1 +挡箭牌 1 +x:1 +抗毒素 1 +x:1 +电示 1 +x:1 +数据网 1 +x:1 +凄凄惨惨 1 +x:1 +加人一等 1 +x:1 +阿房宫 1 +x:1 +拆线 1 +x:1 +晨 82 +x:82 +家居服 1 +x:1 +延期 1 +x:1 +泡泡 1 +x:1 +边境县 1 +x:1 +预 26 +x:26 +代理处 1 +x:1 +回首 1 +x:1 +回馈 1 +x:1 +仓盈粮丰 1 +x:1 +妹婿 1 +x:1 +积铢累寸 1 +x:1 +顷刻 1 +x:1 +奥兰 1 +x:1 +果饵 1 +x:1 +输气管 1 +x:1 +药用 1 +x:1 +经理 1 +x:1 +丑牛 1 +x:1 +形式 1 +x:1 +获释 1 +x:1 +安民乐业 1 +x:1 +申报量 1 +x:1 +烟客 1 +x:1 +居留证 1 +x:1 +捎马子 1 +x:1 +气度 1 +x:1 +泡沫 1 +x:1 +游牧 1 +x:1 +戏班子 1 +x:1 +专车 1 +x:1 +形影 1 +x:1 +浩然 1 +x:1 +分税制 1 +x:1 +元凤四年 1 +x:1 +排球场 1 +x:1 +箭猪 1 +x:1 +血防 1 +x:1 +活动点 1 +x:1 +非歧视 1 +x:1 +馆臣 1 +x:1 +推三托四 1 +x:1 +册子 1 +x:1 +平艮村 1 +x:1 +师团 1 +x:1 +仪征市 1 +x:1 +推荐分 1 +x:1 +血海深仇 1 +x:1 +酒桶 1 +x:1 +游玩 1 +x:1 +螺旋桨 1 +x:1 +诱骗 1 +x:1 +匈 23 +x:23 +面皮 1 +x:1 +客票 1 +x:1 +双承包制 1 +x:1 +亚太区 1 +x:1 +顺乎民意 1 +x:1 +窑火 1 +x:1 +非党员 1 +x:1 +省时 1 +x:1 +苦行僧 1 +x:1 +龙首 1 +x:1 +面的 1 +x:1 +钦慕 1 +x:1 +手指画 1 +x:1 +挨 56 +x:56 +金属元素 1 +x:1 +酒桌 1 +x:1 +宽帮镇 1 +x:1 +塔哈尔 1 +x:1 +卢萨卡 1 +x:1 +面目 1 +x:1 +整齐 1 +x:1 +舍身 1 +x:1 +邹 370 +x:370 +鱼松 1 +x:1 +同仇敌忾 1 +x:1 +节能型 1 +x:1 +窗口 1 +x:1 +生态型 1 +x:1 +诟骂 1 +x:1 +签到日 1 +x:1 +限定 1 +x:1 +面盆 1 +x:1 +销路 1 +x:1 +肉垛垛 1 +x:1 +诵读 1 +x:1 +退潮 1 +x:1 +福冈市 1 +x:1 +与日俱长 1 +x:1 +鱼唇 1 +x:1 +人本精神 1 +x:1 +潮汛 1 +x:1 +黑胶绸 1 +x:1 +能事 1 +x:1 +鹿特丹 1 +x:1 +剐 1 +x:1 +零售额 1 +x:1 +白粉病 1 +x:1 +如云 1 +x:1 +联邦式 1 +x:1 +崭亮 1 +x:1 +数据线 1 +x:1 +药理 1 +x:1 +不战而胜 1 +x:1 +畜力 1 +x:1 +放养 1 +x:1 +发展带 1 +x:1 +应用性 1 +x:1 +变动性 1 +x:1 +电磁 1 +x:1 +万达队 1 +x:1 +经由 1 +x:1 +惯犯 1 +x:1 +愚昧无知 1 +x:1 +切实可行 1 +x:1 +喜色 1 +x:1 +地下水 1 +x:1 +鲜货 1 +x:1 +银杯 1 +x:1 +岛内外 1 +x:1 +银钓 1 +x:1 +海了去了 1 +x:1 +环发 1 +x:1 +沂河 1 +x:1 +妹子 1 +x:1 +会海 1 +x:1 +荣誉感 1 +x:1 +乐山市 1 +x:1 +挠度 1 +x:1 +主供台 1 +x:1 +昏倒 1 +x:1 +适才 1 +x:1 +经略 1 +x:1 +朋友家 1 +x:1 +保险证 1 +x:1 +治国安民 1 +x:1 +旋转式 1 +x:1 +挺胸 1 +x:1 +草本植物 1 +x:1 +酒梢 1 +x:1 +土沥青 1 +x:1 +电缆井 1 +x:1 +粉领 1 +x:1 +自不量力 1 +x:1 +坪塘 1 +x:1 +公营事业 1 +x:1 +涟源市 1 +x:1 +土城 1 +x:1 +扩 142 +x:142 +转播 1 +x:1 +步履声 1 +x:1 +电碳 1 +x:1 +人工智能 1 +x:1 +会派 1 +x:1 +扔下 1 +x:1 +无房户 1 +x:1 +红三叶 1 +x:1 +画刊 1 +x:1 +全年候 1 +x:1 +先人 1 +x:1 +籽儿 1 +x:1 +今事 1 +x:1 +报务 1 +x:1 +被动免疫 1 +x:1 +薄厚 1 +x:1 +圆锥台 1 +x:1 +图形 1 +x:1 +格里芬湖 1 +x:1 +劳资 1 +x:1 +转学 1 +x:1 +改版 1 +x:1 +榨菜头 1 +x:1 +橄榄绿 1 +x:1 +民俗学家 1 +x:1 +图录 1 +x:1 +酒坛 1 +x:1 +瓶子 1 +x:1 +曲艺家 1 +x:1 +擅改 1 +x:1 +飞锭 1 +x:1 +头骨 1 +x:1 +腊八 1 +x:1 +浦东南路 1 +x:1 +新年伊始 1 +x:1 +酒坊 1 +x:1 +挡火墙 1 +x:1 +冬小麦 1 +x:1 +铁片 1 +x:1 +大头针 1 +x:1 +缺欠 1 +x:1 +廉洁率 1 +x:1 +花鼓戏 1 +x:1 +春寒料峭 1 +x:1 +差速器 1 +x:1 +义利观 1 +x:1 +摘 98 +x:98 +铁牛 1 +x:1 +外经贸厅 1 +x:1 +坐等 1 +x:1 +山苍籽 1 +x:1 +伤害费 1 +x:1 +总监督室 1 +x:1 +戏弄 1 +x:1 +会务 1 +x:1 +逐层 1 +x:1 +亲朋好友 1 +x:1 +蓬溪县 1 +x:1 +图式 1 +x:1 +呸 2 +x:2 +含硫分 1 +x:1 +鼠曲草 1 +x:1 +亲自 1 +x:1 +铁犁 1 +x:1 +会前 1 +x:1 +萃 5 +x:5 +政权 1 +x:1 +粘乎乎 1 +x:1 +偷听 1 +x:1 +蝈蝈儿 1 +x:1 +首席 1 +x:1 +细棋 1 +x:1 +聚义 1 +x:1 +古时候 1 +x:1 +柴扉 1 +x:1 +显通寺 1 +x:1 +报到 1 +x:1 +偷奸取巧 1 +x:1 +变质 1 +x:1 +实验室 1 +x:1 +报刊 1 +x:1 +上下左右 1 +x:1 +形意 1 +x:1 +抬 140 +x:140 +安波汤镇 1 +x:1 +图志 1 +x:1 +果林场 1 +x:1 +硬拼 1 +x:1 +大米饭 1 +x:1 +扇形 1 +x:1 +收发员 1 +x:1 +单个儿 1 +x:1 +漏网之鱼 1 +x:1 +会刊 1 +x:1 +狼子野心 1 +x:1 +注册地 1 +x:1 +画派 1 +x:1 +简牍 1 +x:1 +心跳 1 +x:1 +巨龙 1 +x:1 +家奴 1 +x:1 +册数 1 +x:1 +戏德 1 +x:1 +夫子自道 1 +x:1 +奇蹄目 1 +x:1 +航民村 1 +x:1 +报前 1 +x:1 +玉皇庙 1 +x:1 +经纬度 1 +x:1 +秦 269 +x:269 +檄书 1 +x:1 +侄孙子 1 +x:1 +中山郎 1 +x:1 +头马 1 +x:1 +碧黄 1 +x:1 +赛纪 1 +x:1 +浓郁 1 +x:1 +宇航 1 +x:1 +匡匡 1 +x:1 +里面 1 +x:1 +会友 1 +x:1 +职员 1 +x:1 +山脚 1 +x:1 +受益 1 +x:1 +险滩 1 +x:1 +脚跟 1 +x:1 +4 2166 +x:2166 +互惠待遇 1 +x:1 +山脉 1 +x:1 +山脊 1 +x:1 +酒器 1 +x:1 +生杀予夺 1 +x:1 +矫揉造作 1 +x:1 +西河北村 1 +x:1 +家境 1 +x:1 +社区性 1 +x:1 +画法 1 +x:1 +宏观 1 +x:1 +赛罢 1 +x:1 +别称 1 +x:1 +壁画库 1 +x:1 +口渴 1 +x:1 +弹腔 1 +x:1 +乳饮料 1 +x:1 +会厌 1 +x:1 +微机网 1 +x:1 +纪工委 1 +x:1 +百宝箱 1 +x:1 +鱼款 1 +x:1 +会厅 1 +x:1 +窑主 1 +x:1 +狱 4 +x:4 +结存 1 +x:1 +啰唆 1 +x:1 +电子光学 1 +x:1 +半程 1 +x:1 +退党 1 +x:1 +图带 1 +x:1 +山腰 1 +x:1 +一米板 1 +x:1 +报友 1 +x:1 +除草 1 +x:1 +一片冰心 1 +x:1 +雷公山 1 +x:1 +莘莘学子 1 +x:1 +深葬法 1 +x:1 +节 164 +x:164 +湾仔海 1 +x:1 +软科学 1 +x:1 +脚趾 1 +x:1 +佴 1 +x:1 +蚩尤寨 1 +x:1 +退兵 1 +x:1 +别离 1 +x:1 +退养 1 +x:1 +低缓 1 +x:1 +硬挺 1 +x:1 +绯色 1 +x:1 +情真意切 1 +x:1 +游击区 1 +x:1 +歃血结盟 1 +x:1 +老泪纵横 1 +x:1 +转嫁 1 +x:1 +监控户 1 +x:1 +变调 1 +x:1 +生生不息 1 +x:1 +童养媳 1 +x:1 +奋发向上 1 +x:1 +群英会 1 +x:1 +胡同口 1 +x:1 +亲者 1 +x:1 +粒度 1 +x:1 +各有所长 1 +x:1 +折扣率 1 +x:1 +冷眉冷眼 1 +x:1 +武夫 1 +x:1 +后生小子 1 +x:1 +详尽 1 +x:1 +亲耳 1 +x:1 +小牛犊 1 +x:1 +据此 1 +x:1 +滞销房 1 +x:1 +铁环 1 +x:1 +埃里斯特 1 +x:1 +增长期 1 +x:1 +啰嗦 1 +x:1 +水果摊 1 +x:1 +贵远贱近 1 +x:1 +五卅运动 1 +x:1 +无底洞 1 +x:1 +骑车人 1 +x:1 +延南 1 +x:1 +发起者 1 +x:1 +千古留芳 1 +x:1 +忧愁树 1 +x:1 +亲聆 1 +x:1 +展览厅 1 +x:1 +顺乎民心 1 +x:1 +新岁伊始 1 +x:1 +家塾 1 +x:1 +累累 1 +x:1 +报协 1 +x:1 +空耗 1 +x:1 +报升 1 +x:1 +墨尔本 1 +x:1 +邵刚乡 1 +x:1 +僻远 1 +x:1 +不怕牺牲 1 +x:1 +浓重 1 +x:1 +退出 1 +x:1 +苏黎世 1 +x:1 +枕木 1 +x:1 +盗拆 1 +x:1 +头额 1 +x:1 +家室 1 +x:1 +狗 67 +x:67 +账号 1 +x:1 +辉 127 +x:127 +皮山县 1 +x:1 +游人 1 +x:1 +家宴 1 +x:1 +头颈 1 +x:1 +英烈 1 +x:1 +头领 1 +x:1 +山高水长 1 +x:1 +头颅 1 +x:1 +收入型 1 +x:1 +航天桥 1 +x:1 +家宅 1 +x:1 +非生命 1 +x:1 +蒋家堰镇 1 +x:1 +演讲者 1 +x:1 +浮面 1 +x:1 +攻心 1 +x:1 +酒商 1 +x:1 +政敌 1 +x:1 +半票 1 +x:1 +大年初八 1 +x:1 +山航 1 +x:1 +家宝 1 +x:1 +薄冰 1 +x:1 +照理 1 +x:1 +得分王 1 +x:1 +样板戏 1 +x:1 +立体派 1 +x:1 +洞房花烛 1 +x:1 +逐年 1 +x:1 +息事宁人 1 +x:1 +变迁 1 +x:1 +报道社 1 +x:1 +得分率 1 +x:1 +刷拉拉 1 +x:1 +西邢村 1 +x:1 +前瓦村 1 +x:1 +以往 1 +x:1 +爬山越岭 1 +x:1 +危房棚 1 +x:1 +均等 1 +x:1 +藏红花 1 +x:1 +王加乡 1 +x:1 +牛皮菜 1 +x:1 +山色 1 +x:1 +盗抢 1 +x:1 +反比例 1 +x:1 +非公有 1 +x:1 +通城县 1 +x:1 +梁河县 1 +x:1 +宋庆龄 1 +x:1 +根艺 1 +x:1 +水仙花 1 +x:1 +冲锋枪 1 +x:1 +跺脚 1 +x:1 +窜犯 1 +x:1 +丑事 1 +x:1 +树林子 1 +x:1 +礼制 1 +x:1 +严家岗村 1 +x:1 +社劳党 1 +x:1 +主题 1 +x:1 +惯例 1 +x:1 +泛泛而论 1 +x:1 +叶舌 1 +x:1 +猪笼草 1 +x:1 +传动比 1 +x:1 +招干 1 +x:1 +耳提面命 1 +x:1 +盗打 1 +x:1 +张罗声 1 +x:1 +路政科 1 +x:1 +山芋 1 +x:1 +统摄 1 +x:1 +记者团 1 +x:1 +延寿 1 +x:1 +山花 1 +x:1 +惜贷 1 +x:1 +结业式 1 +x:1 +梅格 1 +x:1 +光辉 1 +x:1 +堆房 1 +x:1 +脚蹼 1 +x:1 +惜败 1 +x:1 +游丝 1 +x:1 +开发区 1 +x:1 +弯路 1 +x:1 +脚踏 1 +x:1 +故 106 +x:106 +文鸟 1 +x:1 +喀什市 1 +x:1 +辖段 1 +x:1 +侄孙女 1 +x:1 +相貌 1 +x:1 +脚踝 1 +x:1 +报偿 1 +x:1 +朝鲜队 1 +x:1 +装配式 1 +x:1 +适当 1 +x:1 +边角地 1 +x:1 +沥 1 +x:1 +攻坚战 1 +x:1 +右半 1 +x:1 +方块糖 1 +x:1 +变轨 1 +x:1 +走门子 1 +x:1 +夹壁墙 1 +x:1 +木兰拳 1 +x:1 +粉笔盒 1 +x:1 +盘存 1 +x:1 +受用 1 +x:1 +报停 1 +x:1 +代管权 1 +x:1 +肇事罪 1 +x:1 +关系网 1 +x:1 +鱼梁 1 +x:1 +吉祥寺 1 +x:1 +取之不尽 1 +x:1 +盛产期 1 +x:1 +放不放开 1 +x:1 +比阔气 1 +x:1 +捷报 1 +x:1 +堂皇 1 +x:1 +兴宁市 1 +x:1 +弹药 1 +x:1 +酒味 1 +x:1 +礼县 1 +x:1 +压 238 +x:238 +疏忽大意 1 +x:1 +适应 1 +x:1 +夜丰颂府 1 +x:1 +金凤还巢 1 +x:1 +嫁衣裳 1 +x:1 +讲叙 1 +x:1 +摊派款 1 +x:1 +水车前 1 +x:1 +适度 1 +x:1 +校时钟 1 +x:1 +郑家坊 1 +x:1 +山茶 1 +x:1 +台江区 1 +x:1 +定心丸 1 +x:1 +椰油 1 +x:1 +刷印科 1 +x:1 +付方 1 +x:1 +红皮书 1 +x:1 +瓶塞 1 +x:1 +质能 1 +x:1 +主顾 1 +x:1 +共利 1 +x:1 +酒吧 1 +x:1 +净利润率 1 +x:1 +宏论 1 +x:1 +报出 1 +x:1 +山草 1 +x:1 +大迈阿密 1 +x:1 +官名 1 +x:1 +盗掘 1 +x:1 +呀儿哟 1 +x:1 +南北向 1 +x:1 +银杏 1 +x:1 +图尔 1 +x:1 +放油区 1 +x:1 +退却 1 +x:1 +母畜 1 +x:1 +酒后 1 +x:1 +致信 1 +x:1 +倘然 1 +x:1 +估摸 1 +x:1 +山药 1 +x:1 +惯于 1 +x:1 +俯仰之间 1 +x:1 +调研科 1 +x:1 +来京 1 +x:1 +顿然 1 +x:1 +外三环 1 +x:1 +三圣桥 1 +x:1 +会元 1 +x:1 +里间 1 +x:1 +会党 1 +x:1 +肝气 1 +x:1 +钦差 1 +x:1 +神话 1 +x:1 +妙语连珠 1 +x:1 +藻井 1 +x:1 +獐子 1 +x:1 +轰击 1 +x:1 +氮肥 1 +x:1 +钦州 1 +x:1 +步行者 1 +x:1 +试纸 1 +x:1 +杂物堆 1 +x:1 +库尔德 1 +x:1 +形成 1 +x:1 +总任务 1 +x:1 +蒸汽型 1 +x:1 +形成期 1 +x:1 +太山庙村 1 +x:1 +受理 1 +x:1 +有口难言 1 +x:1 +师母 1 +x:1 +屋后 1 +x:1 +飞雁 1 +x:1 +山菊 1 +x:1 +冷轧板 1 +x:1 +报关 1 +x:1 +柱头 1 +x:1 +十字军 1 +x:1 +家婆 1 +x:1 +种植业 1 +x:1 +头饰 1 +x:1 +飞雨 1 +x:1 +飞雪 1 +x:1 +会儿 1 +x:1 +记者型 1 +x:1 +屋里 1 +x:1 +温度差 1 +x:1 +麦收地 1 +x:1 +谱子 1 +x:1 +下脚料 1 +x:1 +风雨同舟 1 +x:1 +地面孔 1 +x:1 +泡器 1 +x:1 +来人 1 +x:1 +退后 1 +x:1 +纵深处 1 +x:1 +低空 1 +x:1 +母爱 1 +x:1 +稔 1 +x:1 +文风 1 +x:1 +宾客 1 +x:1 +未来馆 1 +x:1 +姑老爷 1 +x:1 +幼稚园 1 +x:1 +伟人 1 +x:1 +抽烟 1 +x:1 +吼叫声 1 +x:1 +供电所 1 +x:1 +墨菊 1 +x:1 +统括 1 +x:1 +对照体 1 +x:1 +玄狐 1 +x:1 +磁效应 1 +x:1 +好好坏坏 1 +x:1 +酵母菌 1 +x:1 +梗阻 1 +x:1 +天生桥 1 +x:1 +珍爱 1 +x:1 +戏子 1 +x:1 +挑灯夜战 1 +x:1 +迎客 1 +x:1 +抽点 1 +x:1 +姘妇 1 +x:1 +报国 1 +x:1 +转车 1 +x:1 +飘飘 1 +x:1 +飘飞 1 +x:1 +吃得住 1 +x:1 +赛程 1 +x:1 +砖墙 1 +x:1 +北关区 1 +x:1 +湿渌渌 1 +x:1 +有起色 1 +x:1 +叫作 1 +x:1 +送货郎 1 +x:1 +唱诗班 1 +x:1 +粒子 1 +x:1 +形旁 1 +x:1 +硬是 1 +x:1 +自食其果 1 +x:1 +三马林达 1 +x:1 +爆破洞 1 +x:1 +简直 1 +x:1 +建德县 1 +x:1 +大选日 1 +x:1 +怨言 1 +x:1 +中建 1 +x:1 +镀膜 1 +x:1 +青滩 1 +x:1 +母牛 1 +x:1 +复活节 1 +x:1 +脚行 1 +x:1 +酒台 1 +x:1 +伟业 1 +x:1 +酒史 1 +x:1 +蚍蜉 1 +x:1 +赛站 1 +x:1 +延巫 1 +x:1 +墨荷 1 +x:1 +调研组 1 +x:1 +本味 1 +x:1 +拿波里 1 +x:1 +描画 1 +x:1 +谦辞 1 +x:1 +田家寨 1 +x:1 +线麻 1 +x:1 +多数百姓 1 +x:1 +黄浦江 1 +x:1 +垢 6 +x:6 +闻香 1 +x:1 +见证物 1 +x:1 +铁皮 1 +x:1 +印染厂 1 +x:1 +转念 1 +x:1 +别类 1 +x:1 +默哀 1 +x:1 +晴雨计 1 +x:1 +酒友 1 +x:1 +离婚率 1 +x:1 +出血量 1 +x:1 +铁盆 1 +x:1 +经书 1 +x:1 +师法 1 +x:1 +偷偷 1 +x:1 +一臂之力 1 +x:1 +挂果期 1 +x:1 +铁盒 1 +x:1 +天公 1 +x:1 +碣石 1 +x:1 +臂章 1 +x:1 +烷基 1 +x:1 +拉拉 1 +x:1 +永登 1 +x:1 +经久 1 +x:1 +标兵库 1 +x:1 +母狗 1 +x:1 +段木 1 +x:1 +酒厂 1 +x:1 +男队 1 +x:1 +漯河市 1 +x:1 +殖民者 1 +x:1 +示范林 1 +x:1 +宠信 1 +x:1 +通达街 1 +x:1 +刚才 1 +x:1 +宝丰县 1 +x:1 +母猪 1 +x:1 +飘香 1 +x:1 +拦洪坝 1 +x:1 +附信 1 +x:1 +十字坡 1 +x:1 +农事图 1 +x:1 +低等 1 +x:1 +统揽 1 +x:1 +排水管 1 +x:1 +胜利村 1 +x:1 +舞者 1 +x:1 +转年 1 +x:1 +渲 1 +x:1 +转干 1 +x:1 +延展 1 +x:1 +生机勃发 1 +x:1 +硬板 1 +x:1 +泛泛而谈 1 +x:1 +股额 1 +x:1 +较真儿 1 +x:1 +万县市 1 +x:1 +青年装 1 +x:1 +来书 1 +x:1 +出航 1 +x:1 +公益 1 +x:1 +月全食 1 +x:1 +夸胡 1 +x:1 +史家 1 +x:1 +穑稼 1 +x:1 +阴风 1 +x:1 +硬朗 1 +x:1 +悔过书 1 +x:1 +便民 1 +x:1 +选举人 1 +x:1 +实寄封 1 +x:1 +英灵 1 +x:1 +毛方 1 +x:1 +楚楚静立 1 +x:1 +晓园路 1 +x:1 +独揽 1 +x:1 +运销户 1 +x:1 +平方尺 1 +x:1 +庸庸碌碌 1 +x:1 +股票版 1 +x:1 +硬木 1 +x:1 +甩卖 1 +x:1 +鱼漂 1 +x:1 +烹 6 +x:6 +女式 1 +x:1 +吟风弄月 1 +x:1 +戆直 1 +x:1 +轻歌剧院 1 +x:1 +摩电灯 1 +x:1 +墨色 1 +x:1 +下寨村 1 +x:1 +会址 1 +x:1 +钠灯 1 +x:1 +宏赡 1 +x:1 +沙埔村 1 +x:1 +五音阶 1 +x:1 +旁边儿 1 +x:1 +耀斑 1 +x:1 +项羽 1 +x:1 +药业 1 +x:1 +膘 1 +x:1 +气管炎 1 +x:1 +戏迷角 1 +x:1 +翠青 1 +x:1 +已经 1 +x:1 +爆破法 1 +x:1 +文饰 1 +x:1 +夸耀 1 +x:1 +普罗旺斯 1 +x:1 +秋雨庵 1 +x:1 +堆放 1 +x:1 +家小 1 +x:1 +谱 42 +x:42 +取存款 1 +x:1 +深透 1 +x:1 +药丸 1 +x:1 +时风时雨 1 +x:1 +画案 1 +x:1 +探空仪 1 +x:1 +审查室 1 +x:1 +步行虫 1 +x:1 +祝辞 1 +x:1 +致使 1 +x:1 +碘钨灯 1 +x:1 +无知 1 +x:1 +畜棚 1 +x:1 +南征北战 1 +x:1 +出芽 1 +x:1 +乙丑 1 +x:1 +摈弃 1 +x:1 +渡轮 1 +x:1 +闷罐车 1 +x:1 +迎娶 1 +x:1 +国际台 1 +x:1 +酣 7 +x:7 +家居 1 +x:1 +锡伯族 1 +x:1 +药书 1 +x:1 +干结核量 1 +x:1 +兔娃 1 +x:1 +杰出 1 +x:1 +铁石 1 +x:1 +经作 1 +x:1 +十字型 1 +x:1 +前俯后仰 1 +x:1 +勺 5 +x:5 +铁矿 1 +x:1 +一代楷模 1 +x:1 +酒兴 1 +x:1 +夜阑人静 1 +x:1 +酒具 1 +x:1 +保修卡 1 +x:1 +自注式 1 +x:1 +饮用水 1 +x:1 +地道战 1 +x:1 +桃源梦 1 +x:1 +鱼池 1 +x:1 +适宜 1 +x:1 +淀粉厂 1 +x:1 +山神灵物 1 +x:1 +二修所 1 +x:1 +福塔莱萨 1 +x:1 +自主神经 1 +x:1 +卫冕战 1 +x:1 +南礼士路 1 +x:1 +鱼汛 1 +x:1 +发展极 1 +x:1 +图片集 1 +x:1 +清白 1 +x:1 +里道 1 +x:1 +抓拍 1 +x:1 +秘书局 1 +x:1 +文言文 1 +x:1 +保修单 1 +x:1 +博弈 1 +x:1 +但 8150 +x:8150 +酒儿 1 +x:1 +世界杯赛 1 +x:1 +项类 1 +x:1 +中山陵 1 +x:1 +城北乡 1 +x:1 +非警务 1 +x:1 +距 197 +x:197 +惠泽 1 +x:1 +国税 1 +x:1 +岂敢 1 +x:1 +心潮翻腾 1 +x:1 +西滨村 1 +x:1 +装潢 1 +x:1 +吸食 1 +x:1 +一省两地 1 +x:1 +攻守 1 +x:1 +快餐业 1 +x:1 +排难解纷 1 +x:1 +意识流 1 +x:1 +企业界 1 +x:1 +出自 1 +x:1 +隆宝滩 1 +x:1 +法网 1 +x:1 +仲裁庭 1 +x:1 +茔地 1 +x:1 +弑 1 +x:1 +救护队员 1 +x:1 +会员 1 +x:1 +气冲冲 1 +x:1 +岂料 1 +x:1 +库款 1 +x:1 +报名 1 +x:1 +剥削 1 +x:1 +志愿兵 1 +x:1 +发展期 1 +x:1 +皆大欢喜 1 +x:1 +抓手 1 +x:1 +传真件 1 +x:1 +沥青厂 1 +x:1 +会同 1 +x:1 +挨冻 1 +x:1 +会后 1 +x:1 +重修 1 +x:1 +会合 1 +x:1 +浓雾 1 +x:1 +虚汗 1 +x:1 +钓鱼者 1 +x:1 +束之高阁 1 +x:1 +云翳 1 +x:1 +鱼油 1 +x:1 +烘托 1 +x:1 +批发点 1 +x:1 +长驱 1 +x:1 +硬撑 1 +x:1 +税则 1 +x:1 +退回 1 +x:1 +礼器 1 +x:1 +龙肝凤髓 1 +x:1 +起跑线 1 +x:1 +单元化 1 +x:1 +毕竟 1 +x:1 +付息 1 +x:1 +夏至线 1 +x:1 +报告 1 +x:1 +遥岑 1 +x:1 +跟头 1 +x:1 +息 36 +x:36 +发展权 1 +x:1 +家当 1 +x:1 +根芽 1 +x:1 +专科学校 1 +x:1 +僧多粥少 1 +x:1 +面交 1 +x:1 +落地窗 1 +x:1 +浒山 1 +x:1 +阴骘 1 +x:1 +秋冬季 1 +x:1 +股骨 1 +x:1 +钍 2 +x:2 +家庭 1 +x:1 +救生圈 1 +x:1 +苏扎克区 1 +x:1 +冷藏室 1 +x:1 +迎声 1 +x:1 +爪牙 1 +x:1 +苏古笃 1 +x:1 +面人 1 +x:1 +平等权 1 +x:1 +褡包 1 +x:1 +小雨雪 1 +x:1 +不骄不躁 1 +x:1 +受热 1 +x:1 +郴州市 1 +x:1 +报喜 1 +x:1 +铁甲 1 +x:1 +家底 1 +x:1 +三三五五 1 +x:1 +退场 1 +x:1 +日就月将 1 +x:1 +铁画 1 +x:1 +福田 1 +x:1 +霍里霍川 1 +x:1 +名特优 1 +x:1 +记者区 1 +x:1 +直线式 1 +x:1 +镌 3 +x:3 +面价 1 +x:1 +改由 1 +x:1 +违章人 1 +x:1 +力气活 1 +x:1 +逐字 1 +x:1 +银朱 1 +x:1 +探头探脑 1 +x:1 +酒候 1 +x:1 +丘岗地 1 +x:1 +沙拐枣 1 +x:1 +油毛毡 1 +x:1 +细问 1 +x:1 +夜不能寐 1 +x:1 +晴雨表 1 +x:1 +进口药 1 +x:1 +殊荣 1 +x:1 +制衣厂 1 +x:1 +椰树 1 +x:1 +水阳镇 1 +x:1 +会商 1 +x:1 +迅敏 1 +x:1 +面临 1 +x:1 +西服厂 1 +x:1 +载货车 1 +x:1 +添加 1 +x:1 +宁河镇 1 +x:1 +家常 1 +x:1 +超长穗型 1 +x:1 +顿生 1 +x:1 +三岔路口 1 +x:1 +栖止 1 +x:1 +龙 265 +x:265 +花明楼 1 +x:1 +林牧业 1 +x:1 +救生垫 1 +x:1 +面上 1 +x:1 +例牌 1 +x:1 +挪威式 1 +x:1 +面世 1 +x:1 +桧柏 1 +x:1 +受灾 1 +x:1 +毕恭毕敬 1 +x:1 +舞弊 1 +x:1 +因此 1 +x:1 +名义权 1 +x:1 +转岗 1 +x:1 +伯仲之间 1 +x:1 +磨山镇 1 +x:1 +肚皮 1 +x:1 +来世 1 +x:1 +顶头上司 1 +x:1 +延庆 1 +x:1 +简略 1 +x:1 +九天 1 +x:1 +冰醋酸 1 +x:1 +报商 1 +x:1 +装满 1 +x:1 +黑色火药 1 +x:1 +物美价廉 1 +x:1 +记者厅 1 +x:1 +撤离 1 +x:1 +退堂 1 +x:1 +墨迹 1 +x:1 +出轨 1 +x:1 +亳州城 1 +x:1 +字母 1 +x:1 +宽余 1 +x:1 +喷饭 1 +x:1 +鲜水河 1 +x:1 +边防站 1 +x:1 +特格尔 1 +x:1 +番薯 1 +x:1 +遮阳帽 1 +x:1 +上装 1 +x:1 +林管局 1 +x:1 +乌云山村 1 +x:1 +产权证 1 +x:1 +创建性 1 +x:1 +罗盘报 1 +x:1 +被 7146 +x:7146 +受贿罪 1 +x:1 +结实 1 +x:1 +通讯网 1 +x:1 +看护房 1 +x:1 +应用型 1 +x:1 +西医大 1 +x:1 +实验区 1 +x:1 +增长源 1 +x:1 +供大于求 1 +x:1 +转包 1 +x:1 +旧城区 1 +x:1 +接触网 1 +x:1 +睁眼瞎子 1 +x:1 +转化 1 +x:1 +苎麻 1 +x:1 +亲见 1 +x:1 +客串 1 +x:1 +新安江 1 +x:1 +文格 1 +x:1 +相依相克 1 +x:1 +铁线蕨 1 +x:1 +简章 1 +x:1 +螺旋式 1 +x:1 +邛海 1 +x:1 +岂止 1 +x:1 +民俗学史 1 +x:1 +恨入骨髓 1 +x:1 +头头是道 1 +x:1 +缉获 1 +x:1 +稀释液 1 +x:1 +汪甸乡 1 +x:1 +院规 1 +x:1 +姘头 1 +x:1 +阴门 1 +x:1 +全训率 1 +x:1 +冀南区 1 +x:1 +溃疡 1 +x:1 +滹沱河 1 +x:1 +耍无赖 1 +x:1 +调 294 +x:294 +实验厂 1 +x:1 +说头儿 1 +x:1 +分毛沟 1 +x:1 +越战越勇 1 +x:1 +靛蓝 1 +x:1 +乘虚而入 1 +x:1 +嘉义 1 +x:1 +清洗业 1 +x:1 +玒 3 +x:3 +叶茎 1 +x:1 +铁窗 1 +x:1 +转发 1 +x:1 +堆栈 1 +x:1 +幽深 1 +x:1 +勤朴 1 +x:1 +受罚 1 +x:1 +转变 1 +x:1 +病包儿 1 +x:1 +转口 1 +x:1 +导游证 1 +x:1 +向往 1 +x:1 +庄稼人 1 +x:1 +受罪 1 +x:1 +汇聚 1 +x:1 +礼堂 1 +x:1 +叹为观止 1 +x:1 +转台 1 +x:1 +酒忌 1 +x:1 +多胚生殖 1 +x:1 +出运 1 +x:1 +台座 1 +x:1 +牵动力 1 +x:1 +臆 1 +x:1 +嫌 72 +x:72 +通光率 1 +x:1 +家具 1 +x:1 +住院费 1 +x:1 +客人 1 +x:1 +夏至点 1 +x:1 +抚养费 1 +x:1 +起跑点 1 +x:1 +匣子 1 +x:1 +刹那间 1 +x:1 +吸附 1 +x:1 +废纸屑 1 +x:1 +立体 1 +x:1 +夸赞 1 +x:1 +孙镇村 1 +x:1 +衣食住医 1 +x:1 +天长水阔 1 +x:1 +棉大衣 1 +x:1 +雷达表 1 +x:1 +喷香 1 +x:1 +夜盲症 1 +x:1 +纠章 1 +x:1 +明目张胆 1 +x:1 +立交 1 +x:1 +治疗费 1 +x:1 +沙漠化 1 +x:1 +巴伊亚州 1 +x:1 +节耗 1 +x:1 +铁笔 1 +x:1 +曦 25 +x:25 +毕生 1 +x:1 +橄榄石 1 +x:1 +客位 1 +x:1 +楚河州 1 +x:1 +昌平园 1 +x:1 +立于 1 +x:1 +进口货 1 +x:1 +棉株 1 +x:1 +立井 1 +x:1 +客体 1 +x:1 +中卫县 1 +x:1 +甩开 1 +x:1 +钓鱼迷 1 +x:1 +义正词严 1 +x:1 +铁笼 1 +x:1 +综上所述 1 +x:1 +电业 1 +x:1 +铁筋 1 +x:1 +穷抖阔 1 +x:1 +报导 1 +x:1 +丁香 1 +x:1 +酒席 1 +x:1 +爬高 1 +x:1 +烤 21 +x:21 +脉管炎 1 +x:1 +飞鱼 1 +x:1 +碧青 1 +x:1 +译著 1 +x:1 +编导者 1 +x:1 +感染者 1 +x:1 +会审 1 +x:1 +山西 1 +x:1 +国际周 1 +x:1 +转制 1 +x:1 +受纳 1 +x:1 +无独有偶 1 +x:1 +顶 261 +x:261 +熟年 1 +x:1 +写作组 1 +x:1 +低矮 1 +x:1 +贫病交迫 1 +x:1 +铁箍 1 +x:1 +校正 1 +x:1 +简笔 1 +x:1 +西服裙 1 +x:1 +临危 1 +x:1 +炕头儿 1 +x:1 +期 516 +x:516 +铁管 1 +x:1 +奇巧 1 +x:1 +浓香 1 +x:1 +通讯组 1 +x:1 +节肢 1 +x:1 +淫邪 1 +x:1 +电价 1 +x:1 +亏损社 1 +x:1 +母羊 1 +x:1 +节育 1 +x:1 +电仪 1 +x:1 +立业 1 +x:1 +锁头 1 +x:1 +题海战术 1 +x:1 +出身 1 +x:1 +星移斗换 1 +x:1 +建德市 1 +x:1 +人权委 1 +x:1 +烤鱼 1 +x:1 +收入层 1 +x:1 +署名 1 +x:1 +鸬鹚 1 +x:1 +艺无止境 1 +x:1 +茉莉 1 +x:1 +酒店 1 +x:1 +行善 1 +x:1 +因故 1 +x:1 +远道而来 1 +x:1 +闪烁生辉 1 +x:1 +转动 1 +x:1 +土生土长 1 +x:1 +文锦 1 +x:1 +赋诗 1 +x:1 +见习期 1 +x:1 +节能 1 +x:1 +时势 1 +x:1 +作文赛 1 +x:1 +掂斤播两 1 +x:1 +铁砂 1 +x:1 +豆浆机 1 +x:1 +急智 1 +x:1 +殷勤 1 +x:1 +外经贸委 1 +x:1 +文集 1 +x:1 +文雅 1 +x:1 +畦内 1 +x:1 +议和 1 +x:1 +细长 1 +x:1 +存世 1 +x:1 +重版本 1 +x:1 +转入 1 +x:1 +铁砧 1 +x:1 +出资 1 +x:1 +新建乡 1 +x:1 +单音词 1 +x:1 +签字 1 +x:1 +出赛 1 +x:1 +飞鼠 1 +x:1 +好容易 1 +x:1 +相形失色 1 +x:1 +红细胞 1 +x:1 +据悉 1 +x:1 +异端邪说 1 +x:1 +画架 1 +x:1 +张口结舌 1 +x:1 +池 41 +x:41 +心惊胆颤 1 +x:1 +记者席 1 +x:1 +家史 1 +x:1 +奥方 1 +x:1 +彩号 1 +x:1 +省辖 1 +x:1 +木双镇 1 +x:1 +添彩 1 +x:1 +制冰机 1 +x:1 +无奇不有 1 +x:1 +指示灯 1 +x:1 +家参 1 +x:1 +统治 1 +x:1 +师承 1 +x:1 +彩儿 1 +x:1 +吃亏论 1 +x:1 +吞吐量 1 +x:1 +默写 1 +x:1 +头部 1 +x:1 +一本初衷 1 +x:1 +飘零 1 +x:1 +勤政廉洁 1 +x:1 +飞龙 1 +x:1 +出路 1 +x:1 +新教徒 1 +x:1 +画板 1 +x:1 +肩头 1 +x:1 +校歌 1 +x:1 +勤政 1 +x:1 +硬棒 1 +x:1 +气罐 1 +x:1 +生态所 1 +x:1 +私有者 1 +x:1 +兵役 1 +x:1 +交易场 1 +x:1 +多姿多态 1 +x:1 +阴霾 1 +x:1 +女士 1 +x:1 +大巧若拙 1 +x:1 +小篆 1 +x:1 +攻坚 1 +x:1 +运行部 1 +x:1 +存亡 1 +x:1 +因明 1 +x:1 +安得拉 1 +x:1 +电视人 1 +x:1 +家化 1 +x:1 +讶异 1 +x:1 +刻 102 +x:102 +社主任 1 +x:1 +茹毛饮血 1 +x:1 +伤病率 1 +x:1 +上街 1 +x:1 +浅 50 +x:50 +以快制胜 1 +x:1 +多巴哥 1 +x:1 +芍药 1 +x:1 +城郊 1 +x:1 +会堂 1 +x:1 +柴树 1 +x:1 +汉人 1 +x:1 +橄榄球 1 +x:1 +母系 1 +x:1 +画本 1 +x:1 +源源而来 1 +x:1 +受累 1 +x:1 +出超 1 +x:1 +滨州市 1 +x:1 +影视界 1 +x:1 +图景 1 +x:1 +单元式 1 +x:1 +剑桥 1 +x:1 +地大物博 1 +x:1 +家务 1 +x:1 +阴晴寒暑 1 +x:1 +收入库 1 +x:1 +飞鸟 1 +x:1 +礼宾 1 +x:1 +良种棉 1 +x:1 +僖 1 +x:1 +投融资 1 +x:1 +烤麸 1 +x:1 +育才 1 +x:1 +优 166 +x:166 +潮卷浪涌 1 +x:1 +蜂王浆 1 +x:1 +伢儿 1 +x:1 +科学会 1 +x:1 +飞鸿 1 +x:1 +脂粉味 1 +x:1 +主销区 1 +x:1 +净重量 1 +x:1 +旁听 1 +x:1 +外逃 1 +x:1 +自幼 1 +x:1 +爆破手 1 +x:1 +遥相呼应 1 +x:1 +飞鸥 1 +x:1 +噘嘴 1 +x:1 +忤逆不孝 1 +x:1 +变蛋 1 +x:1 +龙盘虎踞 1 +x:1 +婺源县 1 +x:1 +酒尾 1 +x:1 +名人战 1 +x:1 +事实关 1 +x:1 +薄壁 1 +x:1 +头里 1 +x:1 +柳条帽 1 +x:1 +下文 1 +x:1 +有机玻璃 1 +x:1 +尚沟村 1 +x:1 +人权学 1 +x:1 +装扮 1 +x:1 +退学 1 +x:1 +慕名弃实 1 +x:1 +放映 1 +x:1 +飞鹰 1 +x:1 +时尚者 1 +x:1 +简称 1 +x:1 +进口车 1 +x:1 +图名 1 +x:1 +阴雨 1 +x:1 +受精 1 +x:1 +兼 867 +x:867 +烤鸭 1 +x:1 +泽村 1 +x:1 +节节 1 +x:1 +退守 1 +x:1 +文静 1 +x:1 +棕箱 1 +x:1 +吕 396 +x:396 +砖块 1 +x:1 +改称 1 +x:1 +报失 1 +x:1 +暖风机 1 +x:1 +麻雀声 1 +x:1 +定 504 +x:504 +改种 1 +x:1 +独来独往 1 +x:1 +阴阳 1 +x:1 +取乐 1 +x:1 +速决 1 +x:1 +文革 1 +x:1 +专攻 1 +x:1 +工读生 1 +x:1 +鄢陵县 1 +x:1 +杭州市 1 +x:1 +浆膜 1 +x:1 +方针性 1 +x:1 +吃穿住行 1 +x:1 +特科 1 +x:1 +松花 1 +x:1 +相亲相爱 1 +x:1 +乙 42 +x:42 +度假者 1 +x:1 +真实性 1 +x:1 +波兴浪涌 1 +x:1 +迎合 1 +x:1 +宜宾县 1 +x:1 +坏账 1 +x:1 +包换 1 +x:1 +逗逗乐乐 1 +x:1 +破产法 1 +x:1 +剥弃 1 +x:1 +雁门关 1 +x:1 +息影 1 +x:1 +阴险 1 +x:1 +宝马 1 +x:1 +上衣 1 +x:1 +步行街 1 +x:1 +巴库 1 +x:1 +脚背 1 +x:1 +大型机 1 +x:1 +各抒己见 1 +x:1 +纹路 1 +x:1 +宾县 1 +x:1 +攻击 1 +x:1 +出警 1 +x:1 +冷冰冰 1 +x:1 +连珠灯 1 +x:1 +天祝县 1 +x:1 +孔道 1 +x:1 +诗文体 1 +x:1 +转基因 1 +x:1 +只鳞片爪 1 +x:1 +评审会 1 +x:1 +心口如一 1 +x:1 +非儿戏 1 +x:1 +简约 1 +x:1 +能侃善聊 1 +x:1 +山谷 1 +x:1 +巡诊队 1 +x:1 +机砖厂 1 +x:1 +活猪 1 +x:1 +实验地 1 +x:1 +报废 1 +x:1 +洗衣粉厂 1 +x:1 +报应 1 +x:1 +钻 123 +x:123 +简练 1 +x:1 +满天星 1 +x:1 +尤尔科夫 1 +x:1 +退居 1 +x:1 +留声机 1 +x:1 +微薄 1 +x:1 +会庆 1 +x:1 +沐石河乡 1 +x:1 +转圈 1 +x:1 +窗上 1 +x:1 +灿烂辉煌 1 +x:1 +报建 1 +x:1 +劳动对象 1 +x:1 +头雁 1 +x:1 +长踞 1 +x:1 +报廊 1 +x:1 +休斯顿 1 +x:1 +蛙鸣 1 +x:1 +坚韧 1 +x:1 +企业群 1 +x:1 +股金 1 +x:1 +九头鸟 1 +x:1 +边防线 1 +x:1 +昌平县 1 +x:1 +记者堆 1 +x:1 +二青洞 1 +x:1 +攻关 1 +x:1 +情怀厅 1 +x:1 +圆锥形 1 +x:1 +魔掌 1 +x:1 +干鲜果 1 +x:1 +农村所 1 +x:1 +纵队 1 +x:1 +混浊 1 +x:1 +苛杂 1 +x:1 +政府 1 +x:1 +飘逝 1 +x:1 +年代学 1 +x:1 +牌手 1 +x:1 +芗 1 +x:1 +蚜 1 +x:1 +戏台 1 +x:1 +戏友 1 +x:1 +十有八九 1 +x:1 +谱号 1 +x:1 +铁纪 1 +x:1 +改组 1 +x:1 +氟利昂 1 +x:1 +铁纱 1 +x:1 +三长两短 1 +x:1 +飘逸 1 +x:1 +批发站 1 +x:1 +醒脑提神 1 +x:1 +攻克 1 +x:1 +中经网 1 +x:1 +铁线 1 +x:1 +薄弱 1 +x:1 +酒宴 1 +x:1 +酒家 1 +x:1 +会师 1 +x:1 +出让 1 +x:1 +项目 1 +x:1 +情深意浓 1 +x:1 +村班子 1 +x:1 +旁及 1 +x:1 +侦探小说 1 +x:1 +余兴未尽 1 +x:1 +伸缩式 1 +x:1 +言外之意 1 +x:1 +连续 1 +x:1 +荒废 1 +x:1 +咨询业 1 +x:1 +如上所述 1 +x:1 +伦敦帝国 1 +x:1 +瞎说 1 +x:1 +凤翔 1 +x:1 +文选 1 +x:1 +大盘股 1 +x:1 +刹时间 1 +x:1 +调换费 1 +x:1 +瞎诌 1 +x:1 +轩岗乡 1 +x:1 +谧静 1 +x:1 +妄想 1 +x:1 +落地煤 1 +x:1 +永新县 1 +x:1 +瞎话 1 +x:1 +口干舌燥 1 +x:1 +无人区 1 +x:1 +报幕 1 +x:1 +邦交 1 +x:1 +画意 1 +x:1 +捞刀河 1 +x:1 +延安市 1 +x:1 +廉洁经 1 +x:1 +五陵原 1 +x:1 +戏剧 1 +x:1 +小型机 1 +x:1 +秦俑学 1 +x:1 +会心 1 +x:1 +文采 1 +x:1 +腰岗山 1 +x:1 +连成一片 1 +x:1 +林东 1 +x:1 +林丛 1 +x:1 +林业 1 +x:1 +弹起 1 +x:1 +高坪区 1 +x:1 +打牌 1 +x:1 +窥 5 +x:5 +黄啤酒 1 +x:1 +林中 1 +x:1 +讲经说法 1 +x:1 +鱼杆 1 +x:1 +纠结 1 +x:1 +车票费 1 +x:1 +山货 1 +x:1 +成长性 1 +x:1 +金坛市 1 +x:1 +同工异曲 1 +x:1 +代言人 1 +x:1 +木锯厂 1 +x:1 +谱列 1 +x:1 +杨凌 1 +x:1 +实用主义 1 +x:1 +图制 1 +x:1 +细雨 1 +x:1 +没谱 1 +x:1 +冬去春来 1 +x:1 +纠纷 1 +x:1 +俗 19 +x:19 +旧城 1 +x:1 +裙 5 +x:5 +劳者 1 +x:1 +少年儿童 1 +x:1 +老成持重 1 +x:1 +籽屑 1 +x:1 +七彩帆 1 +x:1 +针纺织品 1 +x:1 +整队 1 +x:1 +延吉 1 +x:1 +出言 1 +x:1 +企业级 1 +x:1 +会徽 1 +x:1 +阴部 1 +x:1 +空对空 1 +x:1 +改编 1 +x:1 +手扳 1 +x:1 +拔尖儿 1 +x:1 +唯一性 1 +x:1 +件件 1 +x:1 +千分表 1 +x:1 +半盔 1 +x:1 +省行 1 +x:1 +甩手 1 +x:1 +跟前 1 +x:1 +简编 1 +x:1 +年少 1 +x:1 +林产 1 +x:1 +柏尼加队 1 +x:1 +应诊 1 +x:1 +丁苯吡 1 +x:1 +盘外 1 +x:1 +弹跃 1 +x:1 +简缩 1 +x:1 +卖锭 1 +x:1 +外经外贸 1 +x:1 +萱 8 +x:8 +蚱蜢 1 +x:1 +付款 1 +x:1 +事实型 1 +x:1 +黎平县 1 +x:1 +适值 1 +x:1 +通讯站 1 +x:1 +格登碑 1 +x:1 +局促不安 1 +x:1 +试生产 1 +x:1 +飞飞 1 +x:1 +逐出 1 +x:1 +人类学者 1 +x:1 +阴道 1 +x:1 +一面之词 1 +x:1 +财神 1 +x:1 +剥夺 1 +x:1 +脚脖 1 +x:1 +圆形 1 +x:1 +象牙者 1 +x:1 +吃老本 1 +x:1 +木材厂 1 +x:1 +朝夕相处 1 +x:1 +影视片 1 +x:1 +铁翼 1 +x:1 +山路 1 +x:1 +图典 1 +x:1 +突破性 1 +x:1 +缺水量 1 +x:1 +瓶啤 1 +x:1 +盘大 1 +x:1 +无中继 1 +x:1 +彩南 1 +x:1 +美容院 1 +x:1 +付梓 1 +x:1 +统检 1 +x:1 +忆述 1 +x:1 +攻取 1 +x:1 +邪说 1 +x:1 +曲桑寺 1 +x:1 +退席 1 +x:1 +芳 182 +x:182 +边防系 1 +x:1 +律诗 1 +x:1 +装机 1 +x:1 +容 50 +x:50 +颊骨 1 +x:1 +叉路口 1 +x:1 +百口泉 1 +x:1 +九七年 1 +x:1 +亲近 1 +x:1 +图儿 1 +x:1 +韩村河 1 +x:1 +酸文假醋 1 +x:1 +硬气 1 +x:1 +同位素 1 +x:1 +密闭性 1 +x:1 +地区性 1 +x:1 +通讯社 1 +x:1 +郭沫若 1 +x:1 +河晏水清 1 +x:1 +处理关 1 +x:1 +柴油 1 +x:1 +图书界 1 +x:1 +前沿科学 1 +x:1 +浮想翩翩 1 +x:1 +酱豆腐 1 +x:1 +柴河 1 +x:1 +谱儿 1 +x:1 +堆满 1 +x:1 +王村乡 1 +x:1 +红庙岭 1 +x:1 +夸诞 1 +x:1 +水陆空 1 +x:1 +濮阳 1 +x:1 +泸沽湖 1 +x:1 +低热 1 +x:1 +册次 1 +x:1 +霞浦县 1 +x:1 +顺口溜儿 1 +x:1 +礼帽 1 +x:1 +沧桑 1 +x:1 +倾慕 1 +x:1 +段家寨 1 +x:1 +退库 1 +x:1 +攻占 1 +x:1 +不可或缺 1 +x:1 +会展 1 +x:1 +制冷档 1 +x:1 +礼帖 1 +x:1 +匠心 1 +x:1 +骷髅 1 +x:1 +彻夜未眠 1 +x:1 +浇 84 +x:84 +爱才如命 1 +x:1 +丫 2 +x:2 +观景台 1 +x:1 +县 1638 +x:1638 +多彩重绘 1 +x:1 +金溪县 1 +x:1 +番茄 1 +x:1 +标志点 1 +x:1 +权欲熏心 1 +x:1 +摇蚊 1 +x:1 +二郎腿 1 +x:1 +牵连 1 +x:1 +许可 1 +x:1 +谱写 1 +x:1 +当阳街 1 +x:1 +妨碍 1 +x:1 +年近古稀 1 +x:1 +工薪层 1 +x:1 +爱好者 1 +x:1 +低点 1 +x:1 +库尔勒 1 +x:1 +创业人 1 +x:1 +新区带 1 +x:1 +高碳钢 1 +x:1 +家财卡 1 +x:1 +赣州市 1 +x:1 +羊毛衫 1 +x:1 +浓黑 1 +x:1 +苛政 1 +x:1 +浦江 1 +x:1 +万万岁 1 +x:1 +特混舰队 1 +x:1 +水俣病 1 +x:1 +分厘卡 1 +x:1 +军转办 1 +x:1 +二十二时 1 +x:1 +政府性 1 +x:1 +手袋 1 +x:1 +鸬鹚鸟 1 +x:1 +青年节 1 +x:1 +变节 1 +x:1 +言不及义 1 +x:1 +鲍 70 +x:70 +甩头 1 +x:1 +嘻嘻哈哈 1 +x:1 +三道河子 1 +x:1 +财神爷 1 +x:1 +失业者 1 +x:1 +出行 1 +x:1 +铁索 1 +x:1 +出血 1 +x:1 +山形县 1 +x:1 +海神节 1 +x:1 +大喜事 1 +x:1 +薯类 1 +x:1 +订书机 1 +x:1 +砺 2 +x:2 +险情 1 +x:1 +收发室 1 +x:1 +亲身 1 +x:1 +生态林 1 +x:1 +砖厂 1 +x:1 +班后 1 +x:1 +骨腾肉飞 1 +x:1 +攻势 1 +x:1 +家园 1 +x:1 +画押 1 +x:1 +妙手空空 1 +x:1 +这么些 1 +x:1 +车体 1 +x:1 +画报 1 +x:1 +薛埠镇 1 +x:1 +实验员 1 +x:1 +险患 1 +x:1 +秦俑头 1 +x:1 +半球 1 +x:1 +寻章摘句 1 +x:1 +简明版 1 +x:1 +黑龙队 1 +x:1 +包揽 1 +x:1 +飞驰 1 +x:1 +聚丙烯 1 +x:1 +匠师 1 +x:1 +画折 1 +x:1 +山轿 1 +x:1 +充充电 1 +x:1 +演讲赛 1 +x:1 +画技 1 +x:1 +泡崖 1 +x:1 +支撑轮 1 +x:1 +退役 1 +x:1 +昭示 1 +x:1 +酒壶 1 +x:1 +倚山傍势 1 +x:1 +生态村 1 +x:1 +散文诗 1 +x:1 +秦王峡 1 +x:1 +抽签 1 +x:1 +毕现 1 +x:1 +通宵达旦 1 +x:1 +大天鹅 1 +x:1 +刑二庭 1 +x:1 +洗 183 +x:183 +年尾 1 +x:1 +前前后后 1 +x:1 +拉马拉 1 +x:1 +释迦牟尼 1 +x:1 +叵测之心 1 +x:1 +镇原县 1 +x:1 +淘金热 1 +x:1 +铺平 1 +x:1 +低能儿 1 +x:1 +璀璨夺目 1 +x:1 +工会法 1 +x:1 +逐厂 1 +x:1 +枰 2 +x:2 +宝鸡 1 +x:1 +英名盖世 1 +x:1 +图像 1 +x:1 +画手 1 +x:1 +非机动车 1 +x:1 +劳苦 1 +x:1 +唯心主义 1 +x:1 +削 30 +x:30 +伤筋动骨 1 +x:1 +血防办 1 +x:1 +微观世界 1 +x:1 +地下层 1 +x:1 +逐句 1 +x:1 +中关村 1 +x:1 +审问 1 +x:1 +勤恳 1 +x:1 +库图佐夫 1 +x:1 +坐地客 1 +x:1 +童颜鹤发 1 +x:1 +画成 1 +x:1 +总经理部 1 +x:1 +奉化市 1 +x:1 +剩 63 +x:63 +落辉 1 +x:1 +奴颜卑膝 1 +x:1 +淫雨 1 +x:1 +和光同尘 1 +x:1 +马耳他 1 +x:1 +迎候 1 +x:1 +甘巴拉 1 +x:1 +电缆线 1 +x:1 +变色 1 +x:1 +改扩 1 +x:1 +霉变 1 +x:1 +电传机 1 +x:1 +闫 3 +x:3 +下港乡 1 +x:1 +餐风宿露 1 +x:1 +银质奖 1 +x:1 +劳务工 1 +x:1 +墨韵 1 +x:1 +棉毛裤 1 +x:1 +菟丝子 1 +x:1 +烤箱 1 +x:1 +忠言逆耳 1 +x:1 +票贩子 1 +x:1 +笔头儿 1 +x:1 +唉声叹气 1 +x:1 +简报 1 +x:1 +告老还乡 1 +x:1 +危机四伏 1 +x:1 +支链反应 1 +x:1 +硬物 1 +x:1 +火焰 1 +x:1 +懦者 1 +x:1 +弹道 1 +x:1 +尽心尽力 1 +x:1 +林区 1 +x:1 +才力 1 +x:1 +派 603 +x:603 +低温 1 +x:1 +山道 1 +x:1 +天蓝色 1 +x:1 +行政化 1 +x:1 +逝世者 1 +x:1 +开采业 1 +x:1 +沙特队 1 +x:1 +自行车赛 1 +x:1 +解剖 1 +x:1 +望而生畏 1 +x:1 +潘家园 1 +x:1 +垂帘听政 1 +x:1 +西滑封村 1 +x:1 +倘或 1 +x:1 +伯祖母 1 +x:1 +蓝黑色 1 +x:1 +例文 1 +x:1 +电场 1 +x:1 +涓涓 1 +x:1 +韦斯顿 1 +x:1 +简括 1 +x:1 +排比段式 1 +x:1 +使用证 1 +x:1 +私心杂念 1 +x:1 +同时代 1 +x:1 +拦污栅 1 +x:1 +祀殿 1 +x:1 +二话不说 1 +x:1 +开山祖师 1 +x:1 +受权 1 +x:1 +柱子 1 +x:1 +放浪形骸 1 +x:1 +宿营车 1 +x:1 +例数 1 +x:1 +立场 1 +x:1 +油盐 1 +x:1 +蛙苗 1 +x:1 +航天站 1 +x:1 +寨根乡 1 +x:1 +倾斜角 1 +x:1 +镇北堡 1 +x:1 +经纬仪 1 +x:1 +舍己救人 1 +x:1 +犬 5 +x:5 +催讨 1 +x:1 +南阳村 1 +x:1 +新泽西州 1 +x:1 +林县 1 +x:1 +苏拉威西 1 +x:1 +文豪 1 +x:1 +省长 1 +x:1 +激昂慷慨 1 +x:1 +坦克师 1 +x:1 +杂树杆 1 +x:1 +异教徒 1 +x:1 +拆借 1 +x:1 +科雷亚 1 +x:1 +谱例 1 +x:1 +实生苗 1 +x:1 +孝 7 +x:7 +阳羡 1 +x:1 +遐迩闻名 1 +x:1 +擂台 1 +x:1 +苏梅岛 1 +x:1 +哥伦布斯 1 +x:1 +抽搐 1 +x:1 +药学 1 +x:1 +斋月 1 +x:1 +一般地说 1 +x:1 +铁拳 1 +x:1 +图例 1 +x:1 +别样 1 +x:1 +齐备 1 +x:1 +组成部分 1 +x:1 +举轻若重 1 +x:1 +熟练工 1 +x:1 +币值 1 +x:1 +瓦工 1 +x:1 +凤响乡 1 +x:1 +齐声 1 +x:1 +木匠师 1 +x:1 +分外事 1 +x:1 +出险 1 +x:1 +塞族区 1 +x:1 +发展点 1 +x:1 +母本 1 +x:1 +受之有愧 1 +x:1 +改换 1 +x:1 +出院 1 +x:1 +樱桃 1 +x:1 +练兵场 1 +x:1 +脐带 1 +x:1 +钦佩 1 +x:1 +浑洒自如 1 +x:1 +图书 1 +x:1 +饱和溶液 1 +x:1 +本上有名 1 +x:1 +舢 1 +x:1 +埃里温 1 +x:1 +痒痒 1 +x:1 +脍炙人口 1 +x:1 +啼呜 1 +x:1 +希望村 1 +x:1 +出乎预料 1 +x:1 +庵 2 +x:2 +电器 1 +x:1 +欣逢 1 +x:1 +代购点 1 +x:1 +倡和 1 +x:1 +咨询台 1 +x:1 +世界化 1 +x:1 +降水区 1 +x:1 +蒙太奇 1 +x:1 +剂 14 +x:14 +三带走 1 +x:1 +伤员 1 +x:1 +篇 754 +x:754 +农副产品 1 +x:1 +滑铁卢 1 +x:1 +旋转门 1 +x:1 +人浪 1 +x:1 +穷经皓首 1 +x:1 +雉鸠 1 +x:1 +学术界 1 +x:1 +潘家埠 1 +x:1 +母板 1 +x:1 +东亚学系 1 +x:1 +沙害 1 +x:1 +立国 1 +x:1 +恒泰银号 1 +x:1 +抽斗 1 +x:1 +克星 1 +x:1 +火煤 1 +x:1 +解送 1 +x:1 +省钱 1 +x:1 +喂奶 1 +x:1 +滂沱 1 +x:1 +玄参 1 +x:1 +星罗棋布 1 +x:1 +闪动 1 +x:1 +客土 1 +x:1 +违规者 1 +x:1 +因素 1 +x:1 +宾主 1 +x:1 +换班 1 +x:1 +流离颠沛 1 +x:1 +碳黑 1 +x:1 +一夜间 1 +x:1 +图件 1 +x:1 +欢呼雀跃 1 +x:1 +浮动制 1 +x:1 +图们 1 +x:1 +阴谋 1 +x:1 +其实不然 1 +x:1 +堆焊 1 +x:1 +梃子 1 +x:1 +文赋 1 +x:1 +杂技界 1 +x:1 +水力学 1 +x:1 +曾经 1 +x:1 +污泥浊水 1 +x:1 +旁人 1 +x:1 +嘿嘿 1 +x:1 +建瓯市 1 +x:1 +减税 1 +x:1 +经学 1 +x:1 +住满 1 +x:1 +硬玉 1 +x:1 +中纪委 1 +x:1 +缝纫工 1 +x:1 +博士点 1 +x:1 +世界史 1 +x:1 +山里 1 +x:1 +山野 1 +x:1 +改掉 1 +x:1 +长途票 1 +x:1 +老红军 1 +x:1 +碗口 1 +x:1 +电流值 1 +x:1 +才华 1 +x:1 +文责 1 +x:1 +面塑 1 +x:1 +冷风 1 +x:1 +打假者 1 +x:1 +诼 1 +x:1 +心窝儿 1 +x:1 +浩浩然 1 +x:1 +斋日 1 +x:1 +喷药 1 +x:1 +摩天大厦 1 +x:1 +标识物 1 +x:1 +律韵 1 +x:1 +逐个 1 +x:1 +排水沟 1 +x:1 +面容 1 +x:1 +顿悟 1 +x:1 +爆破筒 1 +x:1 +燃器具 1 +x:1 +缺株 1 +x:1 +想当年 1 +x:1 +数据化 1 +x:1 +转经筒 1 +x:1 +厅长 1 +x:1 +金杯 1 +x:1 +受旱 1 +x:1 +海防线 1 +x:1 +上河城 1 +x:1 +无庸讳言 1 +x:1 +科干局 1 +x:1 +鸵鸟 1 +x:1 +爷们 1 +x:1 +齐家 1 +x:1 +浓艳 1 +x:1 +独裁者 1 +x:1 +必答题 1 +x:1 +丰功传绩 1 +x:1 +改性 1 +x:1 +飞蝗 1 +x:1 +铁红色 1 +x:1 +琴山村 1 +x:1 +金笔厂 1 +x:1 +面对 1 +x:1 +游廊 1 +x:1 +橄榄油 1 +x:1 +草浆碱 1 +x:1 +盗犯 1 +x:1 +盐碱滩 1 +x:1 +荒山秃岭 1 +x:1 +抗宣队 1 +x:1 +抽暇 1 +x:1 +出错 1 +x:1 +互不相让 1 +x:1 +扔掉 1 +x:1 +江西省 1 +x:1 +聊胜于无 1 +x:1 +实物性 1 +x:1 +创立 1 +x:1 +林内 1 +x:1 +祷告日 1 +x:1 +出门 1 +x:1 +金童玉女 1 +x:1 +催要 1 +x:1 +逐人 1 +x:1 +统筹学 1 +x:1 +循环赛制 1 +x:1 +受敌 1 +x:1 +注塑机 1 +x:1 +多数制 1 +x:1 +购房者 1 +x:1 +人工湖区 1 +x:1 +珠儿 1 +x:1 +缝纫店 1 +x:1 +纹丝不动 1 +x:1 +神兵天降 1 +x:1 +墨镜 1 +x:1 +林冠 1 +x:1 +寄宿制 1 +x:1 +经堂 1 +x:1 +林况 1 +x:1 +心胸 1 +x:1 +柴火 1 +x:1 +追歼 1 +x:1 +装箱 1 +x:1 +比邻 1 +x:1 +习字 1 +x:1 +畅 77 +x:77 +瞎闯 1 +x:1 +冀晋 1 +x:1 +头衔 1 +x:1 +天穹型 1 +x:1 +科学园 1 +x:1 +珠兰 1 +x:1 +批零价 1 +x:1 +拆分 1 +x:1 +墨锭 1 +x:1 +同路 1 +x:1 +啪哒啪哒 1 +x:1 +站点 1 +x:1 +高陵深谷 1 +x:1 +纸尿裤 1 +x:1 +电喷 1 +x:1 +临机应变 1 +x:1 +面孔 1 +x:1 +依山傍水 1 +x:1 +面子 1 +x:1 +币制 1 +x:1 +改悔 1 +x:1 +俾 2 +x:2 +依波沃村 1 +x:1 +筛子 1 +x:1 +沾花惹草 1 +x:1 +监控点 1 +x:1 +部委局 1 +x:1 +适于 1 +x:1 +招贤引才 1 +x:1 +浓茶 1 +x:1 +大小写 1 +x:1 +后起之秀 1 +x:1 +画绢 1 +x:1 +围墙 1 +x:1 +弄棍舞刀 1 +x:1 +电告 1 +x:1 +矿用车 1 +x:1 +生龙活虎 1 +x:1 +五荤 1 +x:1 +讨价声 1 +x:1 +处事 1 +x:1 +拆台 1 +x:1 +海碗 1 +x:1 +寝具 1 +x:1 +绰绰有余 1 +x:1 +谪 2 +x:2 +善纳雅言 1 +x:1 +九牛一毛 1 +x:1 +惯常 1 +x:1 +据称 1 +x:1 +挤眉弄眼 1 +x:1 +术科 1 +x:1 +滦平 1 +x:1 +文辞 1 +x:1 +上行线 1 +x:1 +画纸 1 +x:1 +头角 1 +x:1 +族 25 +x:25 +车务段 1 +x:1 +浓荫 1 +x:1 +舒前村 1 +x:1 +低洼 1 +x:1 +创业区 1 +x:1 +泳姿 1 +x:1 +叫号机 1 +x:1 +爆跌 1 +x:1 +嘉善 1 +x:1 +宜丰 1 +x:1 +生态箱 1 +x:1 +朝思暮想 1 +x:1 +蚂蚁社 1 +x:1 +夜长梦多 1 +x:1 +乡关 1 +x:1 +协议区 1 +x:1 +窄小 1 +x:1 +捧场话 1 +x:1 +民主德国 1 +x:1 +抓瞎 1 +x:1 +转弯 1 +x:1 +烤羊肉 1 +x:1 +特马市 1 +x:1 +经委 1 +x:1 +母教 1 +x:1 +逆函数 1 +x:1 +得分手 1 +x:1 +省际 1 +x:1 +彩屯 1 +x:1 +汤药 1 +x:1 +寥寥 1 +x:1 +五荒 1 +x:1 +自为阶级 1 +x:1 +分离户 1 +x:1 +创业史 1 +x:1 +基层队 1 +x:1 +研究组 1 +x:1 +陆海空 1 +x:1 +冀望 1 +x:1 +沙钻鱼 1 +x:1 +无可置疑 1 +x:1 +飞腾 1 +x:1 +莠 1 +x:1 +肚脐眼 1 +x:1 +拆卸 1 +x:1 +适中 1 +x:1 +极目远眺 1 +x:1 +对账单 1 +x:1 +穷竭心计 1 +x:1 +风向标 1 +x:1 +枯水期 1 +x:1 +伟大 1 +x:1 +因缘 1 +x:1 +鱼种 1 +x:1 +红香圃 1 +x:1 +落叶松 1 +x:1 +摄氏 1 +x:1 +心急火燎 1 +x:1 +许以 1 +x:1 +河南梆子 1 +x:1 +初轧厂 1 +x:1 +噙 10 +x:10 +出钱 1 +x:1 +无病害 1 +x:1 +仔岛 1 +x:1 +飞蛾 1 +x:1 +梧州 1 +x:1 +炼铁热 1 +x:1 +科学城 1 +x:1 +流毒 1 +x:1 +蓉城镇 1 +x:1 +师范学校 1 +x:1 +排沙量 1 +x:1 +泾渭分明 1 +x:1 +琥珀型 1 +x:1 +庇 2 +x:2 +经度 1 +x:1 +招工 1 +x:1 +省里 1 +x:1 +一不怕苦 1 +x:1 +逝者 1 +x:1 +浅棕 1 +x:1 +背景台 1 +x:1 +手提包 1 +x:1 +下机 1 +x:1 +洪汝河 1 +x:1 +购进价 1 +x:1 +转载 1 +x:1 +科尔沁 1 +x:1 +麦纳麦 1 +x:1 +伪科学 1 +x:1 +体格 1 +x:1 +薯条 1 +x:1 +咨询团 1 +x:1 +妖冶 1 +x:1 +瓶体 1 +x:1 +事实上 1 +x:1 +棺材式 1 +x:1 +林地 1 +x:1 +众矢之的 1 +x:1 +林场 1 +x:1 +尉官 1 +x:1 +名子 1 +x:1 +时涨时落 1 +x:1 +忍气吞声 1 +x:1 +漆膜 1 +x:1 +噌噌噌 1 +x:1 +六里屯 1 +x:1 +美术史 1 +x:1 +舒心美气 1 +x:1 +师爷气 1 +x:1 +转会 1 +x:1 +河东村 1 +x:1 +约束力 1 +x:1 +受控 1 +x:1 +焦虑不安 1 +x:1 +张皇失措 1 +x:1 +夸里 1 +x:1 +黔阳县 1 +x:1 +桨 8 +x:8 +驾车人 1 +x:1 +烘烤 1 +x:1 +亲闻 1 +x:1 +群众观 1 +x:1 +博士生 1 +x:1 +虎威 1 +x:1 +综治委 1 +x:1 +一拖再拖 1 +x:1 +团结乡 1 +x:1 +毡靴 1 +x:1 +吃不住 1 +x:1 +自觉性 1 +x:1 +捡破烂 1 +x:1 +正多边形 1 +x:1 +简明 1 +x:1 +拼力 1 +x:1 +老朋友 1 +x:1 +简易 1 +x:1 +胸径 1 +x:1 +经常 1 +x:1 +受损 1 +x:1 +宠幸 1 +x:1 +员外郎 1 +x:1 +硬盘 1 +x:1 +断开 1 +x:1 +销声匿迹 1 +x:1 +存储 1 +x:1 +纸醉金迷 1 +x:1 +经师 1 +x:1 +苏铁园 1 +x:1 +畜禽 1 +x:1 +霭 1 +x:1 +电台 1 +x:1 +一言不发 1 +x:1 +吭声 1 +x:1 +油泵 1 +x:1 +蜉蝣 1 +x:1 +尼洋 1 +x:1 +表面文章 1 +x:1 +立卡 1 +x:1 +暮生儿 1 +x:1 +客务 1 +x:1 +飘行 1 +x:1 +自然铜 1 +x:1 +保护油 1 +x:1 +四连败 1 +x:1 +黄鼠 1 +x:1 +经幡 1 +x:1 +立即 1 +x:1 +钻木取火 1 +x:1 +电压 1 +x:1 +笑吟吟 1 +x:1 +经年 1 +x:1 +轻装简行 1 +x:1 +列国 1 +x:1 +史无前例 1 +x:1 +电厂 1 +x:1 +固步自封 1 +x:1 +长龙 1 +x:1 +巧事 1 +x:1 +隔墙 1 +x:1 +受挫 1 +x:1 +上高县 1 +x:1 +塑料 1 +x:1 +悬念 1 +x:1 +宛若 1 +x:1 +鼠疮 1 +x:1 +毅锋 1 +x:1 +传为美谈 1 +x:1 +转义 1 +x:1 +苛细 1 +x:1 +奉公守法 1 +x:1 +药店 1 +x:1 +年月日 1 +x:1 +变频 1 +x:1 +考讪路 1 +x:1 +痄腮 1 +x:1 +窑河乡 1 +x:1 +劳顿 1 +x:1 +僧侣主义 1 +x:1 +烤肉 1 +x:1 +有凭有据 1 +x:1 +须要 1 +x:1 +丘岗 1 +x:1 +哲学界 1 +x:1 +立功 1 +x:1 +明溪口乡 1 +x:1 +遇救 1 +x:1 +润州 1 +x:1 +铁杉 1 +x:1 +恨不得 1 +x:1 +电刑 1 +x:1 +鱼缸 1 +x:1 +日全食 1 +x:1 +转世 1 +x:1 +乒 2 +x:2 +直抒己见 1 +x:1 +听其言 1 +x:1 +山镇 1 +x:1 +止息 1 +x:1 +统率 1 +x:1 +吹冷风 1 +x:1 +潘家口 1 +x:1 +转业 1 +x:1 +非主业 1 +x:1 +婆娑起舞 1 +x:1 +苴麻 1 +x:1 +白净净 1 +x:1 +皱纹 1 +x:1 +身长 1 +x:1 +刻写 1 +x:1 +熟门熟路 1 +x:1 +经心 1 +x:1 +随时随地 1 +x:1 +存入 1 +x:1 +临高县 1 +x:1 +孑遗 1 +x:1 +阜南县 1 +x:1 +改期 1 +x:1 +惹 40 +x:40 +转为 1 +x:1 +铁板 1 +x:1 +无机可乘 1 +x:1 +共轭点 1 +x:1 +金柚 1 +x:1 +著译 1 +x:1 +药师 1 +x:1 +诸宫调 1 +x:1 +药市 1 +x:1 +油星子 1 +x:1 +邮程 1 +x:1 +省道 1 +x:1 +出征 1 +x:1 +刻入 1 +x:1 +立刻 1 +x:1 +受托 1 +x:1 +中州 1 +x:1 +叫座 1 +x:1 +大路货 1 +x:1 +烤者 1 +x:1 +简本 1 +x:1 +鱼翅 1 +x:1 +简朴 1 +x:1 +铁架 1 +x:1 +少帅 1 +x:1 +低毒 1 +x:1 +永电 1 +x:1 +奋勇争先 1 +x:1 +同一个 1 +x:1 +银铜牌 1 +x:1 +只能 1 +x:1 +柏枝村 1 +x:1 +电力 1 +x:1 +太阳眼镜 1 +x:1 +痔疮 1 +x:1 +白条子 1 +x:1 +鱼群 1 +x:1 +八达岭 1 +x:1 +受戒 1 +x:1 +描摹 1 +x:1 +进口量 1 +x:1 +铁柜 1 +x:1 +急性病 1 +x:1 +银装 1 +x:1 +客厅 1 +x:1 +转交 1 +x:1 +人流 1 +x:1 +山间 1 +x:1 +赛段 1 +x:1 +活动室 1 +x:1 +关系案 1 +x:1 +土耳其队 1 +x:1 +依依恋恋 1 +x:1 +斋戒 1 +x:1 +否决权制 1 +x:1 +电动 1 +x:1 +山门 1 +x:1 +电务 1 +x:1 +简板 1 +x:1 +活动家 1 +x:1 +同车人 1 +x:1 +母性 1 +x:1 +全能性 1 +x:1 +鸣枪 1 +x:1 +卯是卯 1 +x:1 +低档 1 +x:1 +鱼类 1 +x:1 +立冬 1 +x:1 +悬崖 1 +x:1 +电光 1 +x:1 +增长点 1 +x:1 +落地 1 +x:1 +界线 1 +x:1 +砸饭碗 1 +x:1 +安家落户 1 +x:1 +长滩峡 1 +x:1 +方嘴鱼 1 +x:1 +梓潼县 1 +x:1 +山阴 1 +x:1 +伟岸 1 +x:1 +卖身 1 +x:1 +民族自决 1 +x:1 +曾祖 1 +x:1 +齐心 1 +x:1 +险种 1 +x:1 +奥秘 1 +x:1 +收缩 1 +x:1 +家信 1 +x:1 +蓝花楹 1 +x:1 +万向节 1 +x:1 +爆裂 1 +x:1 +拖不拖欠 1 +x:1 +跑表 1 +x:1 +确山 1 +x:1 +延伸 1 +x:1 +静压 1 +x:1 +魔力 1 +x:1 +爬藤 1 +x:1 +装置 1 +x:1 +山陵 1 +x:1 +股评 1 +x:1 +比较价格 1 +x:1 +低栏 1 +x:1 +药工 1 +x:1 +左上方 1 +x:1 +顺化乡 1 +x:1 +电视剧 1 +x:1 +碧血 1 +x:1 +山险 1 +x:1 +飞荡 1 +x:1 +主宰 1 +x:1 +单浴盆式 1 +x:1 +清名 1 +x:1 +分离机 1 +x:1 +七擒七纵 1 +x:1 +逛逛 1 +x:1 +希腊 1 +x:1 +卦爻 1 +x:1 +假设敌 1 +x:1 +创业园 1 +x:1 +休 41 +x:41 +坚贞 1 +x:1 +山隅 1 +x:1 +主帅 1 +x:1 +轻车 1 +x:1 +闻讯 1 +x:1 +殷钢 1 +x:1 +肤 6 +x:6 +抽打 1 +x:1 +奥利亚山 1 +x:1 +正常化 1 +x:1 +新鲜感 1 +x:1 +家伙 1 +x:1 +师级 1 +x:1 +寥廓 1 +x:1 +闪光 1 +x:1 +钧瓷 1 +x:1 +瘟神 1 +x:1 +北温带 1 +x:1 +刻刻 1 +x:1 +黄泥巴 1 +x:1 +锯刀 1 +x:1 +名专栏 1 +x:1 +山雀 1 +x:1 +福费庭 1 +x:1 +文言 1 +x:1 +风吹浪打 1 +x:1 +大天白日 1 +x:1 +唯模仿论 1 +x:1 +足校 1 +x:1 +戏而不谑 1 +x:1 +刻划 1 +x:1 +说唱文学 1 +x:1 +画笔 1 +x:1 +电冶 1 +x:1 +集体工业 1 +x:1 +灯 117 +x:117 +山雾 1 +x:1 +雾蒙蒙 1 +x:1 +绯闻 1 +x:1 +山雨 1 +x:1 +兼有 1 +x:1 +巅峰 1 +x:1 +鱼粉 1 +x:1 +盗用者 1 +x:1 +飞舞 1 +x:1 +家产 1 +x:1 +摸 99 +x:99 +翼翼 1 +x:1 +受惊 1 +x:1 +住校 1 +x:1 +象角村 1 +x:1 +宁武县 1 +x:1 +克服 1 +x:1 +画童 1 +x:1 +家人 1 +x:1 +通 370 +x:370 +山地茶 1 +x:1 +钞票 1 +x:1 +文说 1 +x:1 +劳驾 1 +x:1 +受惠 1 +x:1 +科学化 1 +x:1 +家事 1 +x:1 +锯口 1 +x:1 +劳联 1 +x:1 +为期 1 +x:1 +代理点 1 +x:1 +面庞 1 +x:1 +业主制 1 +x:1 +耀眼 1 +x:1 +出道 1 +x:1 +羊毛里 1 +x:1 +清凉山 1 +x:1 +顿时 1 +x:1 +叫屈 1 +x:1 +轻轨 1 +x:1 +甚高频 1 +x:1 +再其次 1 +x:1 +朝阳区 1 +x:1 +起用 1 +x:1 +形相 1 +x:1 +飞艇 1 +x:1 +家什 1 +x:1 +嗤之以鼻 1 +x:1 +集邮界 1 +x:1 +北娄村 1 +x:1 +立像 1 +x:1 +文论 1 +x:1 +出逃 1 +x:1 +古典式 1 +x:1 +传统型 1 +x:1 +大庭广众 1 +x:1 +天生丽质 1 +x:1 +御菜 1 +x:1 +秀水 1 +x:1 +马拉车 1 +x:1 +刻印 1 +x:1 +玉兔 1 +x:1 +屈辱史 1 +x:1 +静心思过 1 +x:1 +家中 1 +x:1 +改旧 1 +x:1 +横额 1 +x:1 +名人组 1 +x:1 +唉声叹息 1 +x:1 +治病救人 1 +x:1 +宣讲 1 +x:1 +山鞋 1 +x:1 +家丁 1 +x:1 +直音法 1 +x:1 +面市 1 +x:1 +蹭痒 1 +x:1 +霉味 1 +x:1 +嘉兴 1 +x:1 +焰 7 +x:7 +家丑 1 +x:1 +累死 1 +x:1 +家世 1 +x:1 +延付 1 +x:1 +叭儿 1 +x:1 +堂房 1 +x:1 +简政 1 +x:1 +家乡 1 +x:1 +惨不忍睹 1 +x:1 +科学司 1 +x:1 +熟石膏 1 +x:1 +绒帽 1 +x:1 +画稿 1 +x:1 +科学史 1 +x:1 +重伤者 1 +x:1 +宣读 1 +x:1 +赋闲 1 +x:1 +分子量 1 +x:1 +皮肤科 1 +x:1 +存取 1 +x:1 +堆积物 1 +x:1 +骨纤维 1 +x:1 +山韵 1 +x:1 +罗斯福 1 +x:1 +报告者 1 +x:1 +养气 1 +x:1 +累次 1 +x:1 +枕畔 1 +x:1 +齐市 1 +x:1 +无毒性 1 +x:1 +绒布 1 +x:1 +电视台 1 +x:1 +桓仁 1 +x:1 +春寒 1 +x:1 +统统 1 +x:1 +经一路 1 +x:1 +伟力 1 +x:1 +会计师 1 +x:1 +休耕地 1 +x:1 +畜生 1 +x:1 +常驻地 1 +x:1 +普通型 1 +x:1 +脚铃 1 +x:1 +积少成多 1 +x:1 +男子汉 1 +x:1 +抽泣 1 +x:1 +矿主 1 +x:1 +康庄大道 1 +x:1 +表达式 1 +x:1 +手提式 1 +x:1 +窑坑 1 +x:1 +飞贼 1 +x:1 +两 13710 +x:13710 +跳丧鼓 1 +x:1 +电影 1 +x:1 +头花 1 +x:1 +经办 1 +x:1 +洽商 1 +x:1 +舌下腺 1 +x:1 +溃烂 1 +x:1 +纸品 1 +x:1 +畜用 1 +x:1 +螺旋体 1 +x:1 +皮肤癌 1 +x:1 +药叉 1 +x:1 +鲁家峪村 1 +x:1 +沦为 1 +x:1 +一刹那 1 +x:1 +苦思冥想 1 +x:1 +皮袄 1 +x:1 +付给 1 +x:1 +叫卖 1 +x:1 +沦丧 1 +x:1 +秦腔 1 +x:1 +油箱盖 1 +x:1 +嘉庆 1 +x:1 +广汉县 1 +x:1 +原始人 1 +x:1 +迥 2 +x:2 +以丰补歉 1 +x:1 +山顶 1 +x:1 +蔽 6 +x:6 +群英图 1 +x:1 +十痨九死 1 +x:1 +时区 1 +x:1 +酒会 1 +x:1 +心窝子 1 +x:1 +办案组 1 +x:1 +立志 1 +x:1 +赘婿 1 +x:1 +草原学 1 +x:1 +黄源 1 +x:1 +电弧 1 +x:1 +六零六 1 +x:1 +允当 1 +x:1 +纠正 1 +x:1 +普洱茶 1 +x:1 +卖者 1 +x:1 +唉 9 +x:9 +甩亩 1 +x:1 +梅汕 1 +x:1 +飞越 1 +x:1 +排 427 +x:427 +企足而待 1 +x:1 +纹饰 1 +x:1 +齐全 1 +x:1 +堆砌 1 +x:1 +巴拿马城 1 +x:1 +燃烧物 1 +x:1 +鱼狗 1 +x:1 +萍水相逢 1 +x:1 +受潮 1 +x:1 +立式 1 +x:1 +窬 1 +x:1 +山颠 1 +x:1 +海岸带 1 +x:1 +水务局 1 +x:1 +飘落 1 +x:1 +曼彻斯特 1 +x:1 +畜疫 1 +x:1 +抽水 1 +x:1 +客座 1 +x:1 +粘接剂 1 +x:1 +仁怀市 1 +x:1 +飞跑 1 +x:1 +行政官 1 +x:1 +沦亡 1 +x:1 +填鸭法 1 +x:1 +面具 1 +x:1 +文萃 1 +x:1 +暂住证 1 +x:1 +代码卡 1 +x:1 +飞跃 1 +x:1 +交互性 1 +x:1 +山风 1 +x:1 +四不象 1 +x:1 +中山装 1 +x:1 +十里堡镇 1 +x:1 +屈曲 1 +x:1 +珠子 1 +x:1 +客店 1 +x:1 +叫号 1 +x:1 +得意门生 1 +x:1 +改正 1 +x:1 +亲题 1 +x:1 +节选 1 +x:1 +蚕 6 +x:6 +酒乡 1 +x:1 +答非所问 1 +x:1 +羽毛球 1 +x:1 +红岩嘴 1 +x:1 +天门县 1 +x:1 +所有权 1 +x:1 +脚门 1 +x:1 +掌 19 +x:19 +综采 1 +x:1 +经历 1 +x:1 +墨黑 1 +x:1 +酒乘 1 +x:1 +留任 1 +x:1 +电平 1 +x:1 +日珥 1 +x:1 +夏各庄乡 1 +x:1 +缓慢性 1 +x:1 +遮阳伞 1 +x:1 +课间餐 1 +x:1 +提前量 1 +x:1 +供电网 1 +x:1 +龙岩市 1 +x:1 +橄榄枝 1 +x:1 +隐显墨水 1 +x:1 +赛期 1 +x:1 +溅开 1 +x:1 +挨个 1 +x:1 +硬笔 1 +x:1 +巨头 1 +x:1 +壬酚 1 +x:1 +防护林带 1 +x:1 +竹瓦镇 1 +x:1 +信不过 1 +x:1 +监控站 1 +x:1 +僻静 1 +x:1 +安太堡矿 1 +x:1 +酒业 1 +x:1 +活动场 1 +x:1 +半截 1 +x:1 +经变 1 +x:1 +经受 1 +x:1 +哈哈哈 1 +x:1 +弗里敦 1 +x:1 +喂养 1 +x:1 +莲荷乡 1 +x:1 +达到 1 +x:1 +赌博机 1 +x:1 +宜昌市 1 +x:1 +李果园 1 +x:1 +同化力 1 +x:1 +就餐者 1 +x:1 +酒令 1 +x:1 +怎地 1 +x:1 +因由 1 +x:1 +深长 1 +x:1 +小强村 1 +x:1 +打斗片 1 +x:1 +特邀 1 +x:1 +戴者 1 +x:1 +法网恢恢 1 +x:1 +定远店 1 +x:1 +二道河乡 1 +x:1 +结婚证 1 +x:1 +脚镣 1 +x:1 +蓝田生玉 1 +x:1 +装点 1 +x:1 +纵断面 1 +x:1 +球结点 1 +x:1 +抢断 1 +x:1 +催芽 1 +x:1 +注目礼 1 +x:1 +才学 1 +x:1 +统编 1 +x:1 +药剂 1 +x:1 +阿灵顿县 1 +x:1 +封二 1 +x:1 +羊庄 1 +x:1 +颤颤 1 +x:1 +回族史 1 +x:1 +囚首垢面 1 +x:1 +胶体溶液 1 +x:1 +选举制 1 +x:1 +墨鸦 1 +x:1 +里边 1 +x:1 +体检 1 +x:1 +游商 1 +x:1 +决议案 1 +x:1 +双髻山 1 +x:1 +寝室 1 +x:1 +才子 1 +x:1 +影片奖 1 +x:1 +勘探者 1 +x:1 +寝宫 1 +x:1 +锲而不舍 1 +x:1 +点金术 1 +x:1 +全国性 1 +x:1 +确实 1 +x:1 +吐鲁番 1 +x:1 +南花小区 1 +x:1 +免提键 1 +x:1 +削果器 1 +x:1 +铁栏 1 +x:1 +铁树 1 +x:1 +党委 1 +x:1 +药农 1 +x:1 +铁饭碗 1 +x:1 +八家村 1 +x:1 +偷人 1 +x:1 +佼佼者 1 +x:1 +收发人 1 +x:1 +客居 1 +x:1 +男装 1 +x:1 +经济舱 1 +x:1 +势如破竹 1 +x:1 +排名赛 1 +x:1 +硬硬 1 +x:1 +午时 1 +x:1 +师爷 1 +x:1 +文蛤 1 +x:1 +瘟疫 1 +x:1 +浓浓淡淡 1 +x:1 +险症 1 +x:1 +心脾 1 +x:1 +翼状 1 +x:1 +练 137 +x:137 +盗窃 1 +x:1 +锯床 1 +x:1 +碧葱 1 +x:1 +游园 1 +x:1 +铁案 1 +x:1 +弃之不用 1 +x:1 +期盼 1 +x:1 +刻度 1 +x:1 +行政处 1 +x:1 +瘟病 1 +x:1 +会晤 1 +x:1 +四方步 1 +x:1 +代 1006 +x:1006 +铁桥 1 +x:1 +骄兵必败 1 +x:1 +朝阳市 1 +x:1 +数据字 1 +x:1 +斗智斗勇 1 +x:1 +燃烧点 1 +x:1 +卫士 1 +x:1 +飞轮 1 +x:1 +情由事显 1 +x:1 +绝对额 1 +x:1 +官商 1 +x:1 +冰激凌 1 +x:1 +精悍 1 +x:1 +忡忡 1 +x:1 +滩边 1 +x:1 +大约摸 1 +x:1 +清凉寺 1 +x:1 +现代舞 1 +x:1 +旋毛虫 1 +x:1 +涮羊肉 1 +x:1 +撰稿 1 +x:1 +田园 1 +x:1 +营养源 1 +x:1 +辣椒水 1 +x:1 +水牛 1 +x:1 +面包 1 +x:1 +螟害 1 +x:1 +别扭 1 +x:1 +胸墙 1 +x:1 +帷子 1 +x:1 +洗衣粉 1 +x:1 +搜索 1 +x:1 +仙人鞭 1 +x:1 +金沙县 1 +x:1 +杜绝 1 +x:1 +续完 1 +x:1 +系际 1 +x:1 +传 283 +x:283 +铁棍 1 +x:1 +块儿 1 +x:1 +铁棒 1 +x:1 +绝甘分少 1 +x:1 +蜂王精 1 +x:1 +飞过 1 +x:1 +尖脐 1 +x:1 +变革 1 +x:1 +九眼桥 1 +x:1 +老花眼 1 +x:1 +碧蓝 1 +x:1 +霉头 1 +x:1 +母法 1 +x:1 +机关报 1 +x:1 +何首乌 1 +x:1 +药典 1 +x:1 +美容节 1 +x:1 +卖艺 1 +x:1 +奚谷山 1 +x:1 +千佛山 1 +x:1 +煤核儿 1 +x:1 +乌七八糟 1 +x:1 +派出所 1 +x:1 +濑户 1 +x:1 +存异 1 +x:1 +贫雇农 1 +x:1 +城北区 1 +x:1 +女家 1 +x:1 +种植园 1 +x:1 +清华 1 +x:1 +湿漉漉 1 +x:1 +弘 26 +x:26 +探照灯 1 +x:1 +炝 1 +x:1 +低效 1 +x:1 +七个泉 1 +x:1 +课桌椅 1 +x:1 +传中球 1 +x:1 +评说者 1 +x:1 +放工 1 +x:1 +洲堤 1 +x:1 +添丁 1 +x:1 +中国货 1 +x:1 +带病 1 +x:1 +添乱 1 +x:1 +柔绵 1 +x:1 +珍宝岛 1 +x:1 +白琳镇 1 +x:1 +告 126 +x:126 +山地车 1 +x:1 +三自一包 1 +x:1 +经函 1 +x:1 +山魂 1 +x:1 +赵全营村 1 +x:1 +或然率 1 +x:1 +山魈 1 +x:1 +悬停 1 +x:1 +绦虫 1 +x:1 +标识符 1 +x:1 +画皮 1 +x:1 +柴禾 1 +x:1 +邓家庄村 1 +x:1 +堂堂皇皇 1 +x:1 +大显神通 1 +x:1 +钓大鱼 1 +x:1 +记者会 1 +x:1 +湘军 1 +x:1 +劳防 1 +x:1 +髂骨 1 +x:1 +色庆乡 1 +x:1 +仔后 1 +x:1 +却之不恭 1 +x:1 +升官 1 +x:1 +翼王 1 +x:1 +驾车 1 +x:1 +堆笑 1 +x:1 +墨鱼 1 +x:1 +拆字 1 +x:1 +小钱柜 1 +x:1 +盐池县 1 +x:1 +头脑 1 +x:1 +清单 1 +x:1 +杏仁 1 +x:1 +母液 1 +x:1 +青年队 1 +x:1 +强行军 1 +x:1 +催肥 1 +x:1 +赛时 1 +x:1 +愧 7 +x:7 +公共场所 1 +x:1 +意料之中 1 +x:1 +碳铵 1 +x:1 +各国 1 +x:1 +外电路 1 +x:1 +划界法 1 +x:1 +一抢而空 1 +x:1 +鹰首瓶 1 +x:1 +存心 1 +x:1 +爬行 1 +x:1 +皮肤病 1 +x:1 +早岁 1 +x:1 +标志旗 1 +x:1 +受气 1 +x:1 +才女 1 +x:1 +经典 1 +x:1 +伤心事 1 +x:1 +宠儿 1 +x:1 +因着 1 +x:1 +刷刷 1 +x:1 +算计 1 +x:1 +面前 1 +x:1 +立屏 1 +x:1 +阴虱 1 +x:1 +河柳 1 +x:1 +碳钢 1 +x:1 +险球 1 +x:1 +链 7 +x:7 +守望相助 1 +x:1 +报亭 1 +x:1 +撑腰 1 +x:1 +立审 1 +x:1 +母模 1 +x:1 +诸亲好友 1 +x:1 +鱼白 1 +x:1 +电子 1 +x:1 +姑表 1 +x:1 +尼斯 1 +x:1 +涡 1 +x:1 +三查三找 1 +x:1 +桃脯 1 +x:1 +土墙 1 +x:1 +光华四射 1 +x:1 +楼山乡 1 +x:1 +缺一不可 1 +x:1 +六盘山 1 +x:1 +拾贝集 1 +x:1 +乙基 1 +x:1 +抽检 1 +x:1 +挑三拣四 1 +x:1 +立定 1 +x:1 +争先创优 1 +x:1 +加通湖 1 +x:1 +装甲 1 +x:1 +药城 1 +x:1 +变量 1 +x:1 +谨防 1 +x:1 +清汤寡水 1 +x:1 +砼薄壁 1 +x:1 +平乡县 1 +x:1 +简牍史 1 +x:1 +报价 1 +x:1 +电视塔 1 +x:1 +电话线 1 +x:1 +嗜杀成性 1 +x:1 +恨 37 +x:37 +报仇 1 +x:1 +搜访 1 +x:1 +一贯性 1 +x:1 +担担面 1 +x:1 +白茫茫 1 +x:1 +扫盲率 1 +x:1 +文联 1 +x:1 +悬垂 1 +x:1 +烧制 1 +x:1 +进口额 1 +x:1 +劳金 1 +x:1 +农村片 1 +x:1 +嫉恶如仇 1 +x:1 +灵便 1 +x:1 +动人心魄 1 +x:1 +排球界 1 +x:1 +硬结 1 +x:1 +怯声怯气 1 +x:1 +文职 1 +x:1 +障 8 +x:8 +院友会 1 +x:1 +宝贵 1 +x:1 +邀请信 1 +x:1 +奉 53 +x:53 +公爵 1 +x:1 +圆锥体 1 +x:1 +供电站 1 +x:1 +报业 1 +x:1 +三盖沟村 1 +x:1 +抽样 1 +x:1 +齐唱 1 +x:1 +双行线 1 +x:1 +会上 1 +x:1 +电定 1 +x:1 +两袖清风 1 +x:1 +柳格乡 1 +x:1 +落叶树 1 +x:1 +示导性 1 +x:1 +活动力 1 +x:1 +才干 1 +x:1 +皱眉 1 +x:1 +软硬兼施 1 +x:1 +夸饰 1 +x:1 +乐都县 1 +x:1 +瞧不起 1 +x:1 +寝床 1 +x:1 +存瑞乡 1 +x:1 +低价 1 +x:1 +若耶溪 1 +x:1 +电容 1 +x:1 +哑门穴 1 +x:1 +饭庄 1 +x:1 +出人头地 1 +x:1 +酿酒 1 +x:1 +头虱 1 +x:1 +铰 1 +x:1 +窑厂 1 +x:1 +车辆险 1 +x:1 +路不拾遗 1 +x:1 +秩序性 1 +x:1 +乙地 1 +x:1 +沙门氏菌 1 +x:1 +译释 1 +x:1 +莴苣 1 +x:1 +一闪而过 1 +x:1 +出马 1 +x:1 +黄萎病 1 +x:1 +大阪府 1 +x:1 +腱子肉 1 +x:1 +骅 3 +x:3 +师生 1 +x:1 +托伦省 1 +x:1 +宪兵 1 +x:1 +取暖器 1 +x:1 +开考 1 +x:1 +简明性 1 +x:1 +臭名昭彰 1 +x:1 +半晌 1 +x:1 +硬网 1 +x:1 +无能为力 1 +x:1 +烟袋锅 1 +x:1 +林带 1 +x:1 +档案 1 +x:1 +思乡病 1 +x:1 +诈骗者 1 +x:1 +技改提高 1 +x:1 +诸侯 1 +x:1 +闻者 1 +x:1 +寒冷 1 +x:1 +青天阁 1 +x:1 +定惊 1 +x:1 +嘉定 1 +x:1 +魄 1 +x:1 +鱼眼 1 +x:1 +报信 1 +x:1 +曾父 1 +x:1 +游击 1 +x:1 +飞行 1 +x:1 +志 196 +x:196 +同型号 1 +x:1 +打棍子 1 +x:1 +心花 1 +x:1 +大年初一 1 +x:1 +安于现状 1 +x:1 +万绿园 1 +x:1 +住手 1 +x:1 +凝聚态 1 +x:1 +江北区 1 +x:1 +会计学 1 +x:1 +财产险 1 +x:1 +科学奖 1 +x:1 +邓家湾村 1 +x:1 +分离法 1 +x:1 +住所 1 +x:1 +沉沉的 1 +x:1 +活动区 1 +x:1 +下坡赛 1 +x:1 +圣太田 1 +x:1 +统管 1 +x:1 +七里河 1 +x:1 +午托 1 +x:1 +技研 1 +x:1 +翘鼻子 1 +x:1 +滚地皮 1 +x:1 +金婚 1 +x:1 +变通 1 +x:1 +装璜 1 +x:1 +庄浪 1 +x:1 +谄媚 1 +x:1 +会余 1 +x:1 +恬适 1 +x:1 +随大流 1 +x:1 +铺建 1 +x:1 +酿造 1 +x:1 +叫嚣 1 +x:1 +造粒 1 +x:1 +统筹 1 +x:1 +再婚者 1 +x:1 +浅笑声 1 +x:1 +会计室 1 +x:1 +水管员 1 +x:1 +乳罩 1 +x:1 +慷慨激昂 1 +x:1 +叫嚷 1 +x:1 +面向 1 +x:1 +珠帘 1 +x:1 +吨粮县 1 +x:1 +举重 1 +x:1 +大年初五 1 +x:1 +中山路 1 +x:1 +塌 32 +x:32 +客家 1 +x:1 +会会 1 +x:1 +电缆沟 1 +x:1 +部委办 1 +x:1 +文脉 1 +x:1 +外孙女 1 +x:1 +远去 1 +x:1 +交换量 1 +x:1 +行业界 1 +x:1 +趁势 1 +x:1 +客官 1 +x:1 +桃胶 1 +x:1 +齐名 1 +x:1 +游动 1 +x:1 +母校 1 +x:1 +文苑 1 +x:1 +低息 1 +x:1 +碳酐 1 +x:1 +顿河 1 +x:1 +人身事故 1 +x:1 +山鸟 1 +x:1 +母株 1 +x:1 +同命相连 1 +x:1 +股份制 1 +x:1 +戎装 1 +x:1 +一孔之见 1 +x:1 +无以复加 1 +x:1 +碳酸 1 +x:1 +翼盒 1 +x:1 +惯匪 1 +x:1 +叫唤 1 +x:1 +半数 1 +x:1 +美妙绝伦 1 +x:1 +倡言者 1 +x:1 +山鸡 1 +x:1 +马里亚纳 1 +x:1 +铁水 1 +x:1 +塔吉克族 1 +x:1 +胛骨 1 +x:1 +想当初 1 +x:1 +骨骼肌 1 +x:1 +桓 6 +x:6 +市场价 1 +x:1 +档次 1 +x:1 +连云港 1 +x:1 +空字符 1 +x:1 +电复 1 +x:1 +拓 25 +x:25 +三鹤洞社 1 +x:1 +文节 1 +x:1 +礼仪 1 +x:1 +发言稿 1 +x:1 +山鹰 1 +x:1 +墨香 1 +x:1 +展览局 1 +x:1 +唯我独尊 1 +x:1 +榜眼 1 +x:1 +开口销 1 +x:1 +有心无力 1 +x:1 +劫持犯 1 +x:1 +李卜村 1 +x:1 +油建 1 +x:1 +立委 1 +x:1 +偷懒 1 +x:1 +电大 1 +x:1 +中子 1 +x:1 +繁 20 +x:20 +山麓 1 +x:1 +运输省 1 +x:1 +任城区 1 +x:1 +忽阴忽晴 1 +x:1 +熊 154 +x:154 +抠抠搜搜 1 +x:1 +滦县 1 +x:1 +阴茎 1 +x:1 +高堂邃宇 1 +x:1 +丑剧 1 +x:1 +突破点 1 +x:1 +棉红蜘蛛 1 +x:1 +经合 1 +x:1 +游刃 1 +x:1 +猜疑 1 +x:1 +立夏 1 +x:1 +文艺 1 +x:1 +退亲 1 +x:1 +恩怨史 1 +x:1 +马肚 1 +x:1 +突变性 1 +x:1 +脱颖而出 1 +x:1 +半日 1 +x:1 +唾骂 1 +x:1 +半旧 1 +x:1 +畏惧感 1 +x:1 +发展署 1 +x:1 +只读 1 +x:1 +拉拉扯扯 1 +x:1 +劈头盖脸 1 +x:1 +诎 1 +x:1 +索还 1 +x:1 +角旗 1 +x:1 +慕 21 +x:21 +盘根错节 1 +x:1 +林州 1 +x:1 +种植 1 +x:1 +第三者 1 +x:1 +林工 1 +x:1 +劈头盖脑 1 +x:1 +惊魂未定 1 +x:1 +礼乐 1 +x:1 +胆小鬼 1 +x:1 +别是 1 +x:1 +牟家村 1 +x:1 +窑内 1 +x:1 +飞语 1 +x:1 +宏阔 1 +x:1 +大吃八喝 1 +x:1 +受检 1 +x:1 +会计处 1 +x:1 +批条子 1 +x:1 +洗衣社 1 +x:1 +行政局 1 +x:1 +退休 1 +x:1 +神效 1 +x:1 +出项 1 +x:1 +凤爪 1 +x:1 +排名表 1 +x:1 +退伙 1 +x:1 +纳塔尔省 1 +x:1 +企业法 1 +x:1 +人权会 1 +x:1 +天坍地陷 1 +x:1 +理欲观 1 +x:1 +条缕分明 1 +x:1 +首相府 1 +x:1 +立秋 1 +x:1 +岭 16 +x:16 +统称 1 +x:1 +出厂价 1 +x:1 +客套 1 +x:1 +高利贷式 1 +x:1 +斋棚 1 +x:1 +铁活 1 +x:1 +烘箱 1 +x:1 +中国画系 1 +x:1 +蜡笔 1 +x:1 +铁流 1 +x:1 +亿万斯年 1 +x:1 +面团 1 +x:1 +六里坪 1 +x:1 +诈取 1 +x:1 +尼曼 1 +x:1 +赌 27 +x:27 +药品 1 +x:1 +退位 1 +x:1 +珠峰 1 +x:1 +男足 1 +x:1 +住院 1 +x:1 +难眠之夜 1 +x:1 +科学学 1 +x:1 +阵管营 1 +x:1 +弹尽粮绝 1 +x:1 +礼俗 1 +x:1 +烘篮 1 +x:1 +文莱 1 +x:1 +主观臆断 1 +x:1 +宛西 1 +x:1 +嵬 3 +x:3 +情深意绵 1 +x:1 +德黑兰 1 +x:1 +畜牧 1 +x:1 +发展组 1 +x:1 +桃色 1 +x:1 +产枣区 1 +x:1 +艾 95 +x:95 +经售 1 +x:1 +药名 1 +x:1 +简洁 1 +x:1 +科学家 1 +x:1 +魏屯乡 1 +x:1 +山龟 1 +x:1 +书呆子 1 +x:1 +乳酶生 1 +x:1 +关系户 1 +x:1 +机器翻译 1 +x:1 +生津鲜美 1 +x:1 +锯子 1 +x:1 +刻字 1 +x:1 +数据库 1 +x:1 +先进村 1 +x:1 +电声 1 +x:1 +统收统支 1 +x:1 +帷幕 1 +x:1 +帷幔 1 +x:1 +画片 1 +x:1 +烘笼 1 +x:1 +客姓 1 +x:1 +直罗镇 1 +x:1 +桃花 1 +x:1 +公共积累 1 +x:1 +自上而下 1 +x:1 +柏梁镇 1 +x:1 +外孙子 1 +x:1 +无亲无故 1 +x:1 +缺医少药 1 +x:1 +复试 1 +x:1 +叫响 1 +x:1 +油杉木 1 +x:1 +拆开 1 +x:1 +麻袋 1 +x:1 +相加 1 +x:1 +屏条 1 +x:1 +匠人 1 +x:1 +人造纤维 1 +x:1 +退保 1 +x:1 +同谋犯 1 +x:1 +波 206 +x:206 +丑化 1 +x:1 +经商 1 +x:1 +研修生 1 +x:1 +洽办 1 +x:1 +经商潮 1 +x:1 +传统式 1 +x:1 +离休金 1 +x:1 +出题 1 +x:1 +外强中干 1 +x:1 +药味 1 +x:1 +僻野 1 +x:1 +机关枪 1 +x:1 +平定 1 +x:1 +平实 1 +x:1 +游乐园 1 +x:1 +涉 78 +x:78 +非专科 1 +x:1 +第二 1 +x:1 +纸带 1 +x:1 +独善其身 1 +x:1 +粉煤灰 1 +x:1 +平安 1 +x:1 +煤场 1 +x:1 +捉住 1 +x:1 +五级 1 +x:1 +俗话 1 +x:1 +通志 1 +x:1 +阿塞拜疆 1 +x:1 +脾性 1 +x:1 +咣 1 +x:1 +野青煤层 1 +x:1 +南营门街 1 +x:1 +俗语 1 +x:1 +农函 1 +x:1 +晨夕 1 +x:1 +倒海翻江 1 +x:1 +应予 1 +x:1 +间接肥料 1 +x:1 +一分为二 1 +x:1 +分中心 1 +x:1 +上税 1 +x:1 +转移 1 +x:1 +塑料壶 1 +x:1 +警察证 1 +x:1 +数学所 1 +x:1 +应价 1 +x:1 +新媳妇儿 1 +x:1 +通往 1 +x:1 +熟荒 1 +x:1 +服务队 1 +x:1 +路局 1 +x:1 +困境 1 +x:1 +瀛台 1 +x:1 +大竹县 1 +x:1 +体院 1 +x:1 +急驶 1 +x:1 +霎时 1 +x:1 +升起 1 +x:1 +当晚 1 +x:1 +五绝 1 +x:1 +公财 1 +x:1 +应付 1 +x:1 +太古菜 1 +x:1 +世纪 1 +x:1 +彪 75 +x:75 +作弄 1 +x:1 +起诉 1 +x:1 +五经 1 +x:1 +希罕 1 +x:1 +太空舱 1 +x:1 +公贿 1 +x:1 +迷迷糊糊 1 +x:1 +合成橡胶 1 +x:1 +公费 1 +x:1 +沟沟 1 +x:1 +世繁 1 +x:1 +百业兴旺 1 +x:1 +照水梅 1 +x:1 +第一 1 +x:1 +蝴蝶斑 1 +x:1 +二七区 1 +x:1 +蔽日 1 +x:1 +揣摸 1 +x:1 +小毛头 1 +x:1 +脚法 1 +x:1 +审核 1 +x:1 +犯颜直谏 1 +x:1 +槐角 1 +x:1 +农具 1 +x:1 +门架式 1 +x:1 +菜谱 1 +x:1 +庸俗化 1 +x:1 +公路 1 +x:1 +出票机 1 +x:1 +草料 1 +x:1 +国脚 1 +x:1 +盲童 1 +x:1 +融汇贯通 1 +x:1 +人民法院 1 +x:1 +圆木 1 +x:1 +洞 62 +x:62 +福音书 1 +x:1 +葡萄架 1 +x:1 +书画会 1 +x:1 +熟菜 1 +x:1 +中小城市 1 +x:1 +明确 1 +x:1 +吉尔吉斯 1 +x:1 +清明坊 1 +x:1 +菜豆 1 +x:1 +定性分析 1 +x:1 +说来话长 1 +x:1 +棉铃 1 +x:1 +机号 1 +x:1 +机台 1 +x:1 +油库 1 +x:1 +凑近 1 +x:1 +不知去向 1 +x:1 +开工 1 +x:1 +挑错 1 +x:1 +审案 1 +x:1 +普兰店市 1 +x:1 +挫裂伤 1 +x:1 +数以千计 1 +x:1 +采煤 1 +x:1 +神灯 1 +x:1 +悫 1 +x:1 +困难户 1 +x:1 +事事躬亲 1 +x:1 +阿曼 1 +x:1 +兼顾 1 +x:1 +丙稀 1 +x:1 +纸张 1 +x:1 +横峰 1 +x:1 +正大光明 1 +x:1 +咸阳市 1 +x:1 +挂斗 1 +x:1 +黄葛树 1 +x:1 +兼并额 1 +x:1 +机制 1 +x:1 +步话机 1 +x:1 +辖属 1 +x:1 +当期 1 +x:1 +游乐城 1 +x:1 +当朝 1 +x:1 +幸福村 1 +x:1 +行风 1 +x:1 +虽则 1 +x:1 +那化村 1 +x:1 +阻燃 1 +x:1 +繁峙县 1 +x:1 +当月 1 +x:1 +押送 1 +x:1 +羿 1 +x:1 +为时过早 1 +x:1 +开局 1 +x:1 +黄色工会 1 +x:1 +陪读 1 +x:1 +加工者 1 +x:1 +打基础 1 +x:1 +绳子 1 +x:1 +公谊 1 +x:1 +开屏 1 +x:1 +南丫岛 1 +x:1 +开展 1 +x:1 +体面 1 +x:1 +消费类 1 +x:1 +有效性 1 +x:1 +家庭型 1 +x:1 +黑粉病 1 +x:1 +重峦叠嶂 1 +x:1 +风险区 1 +x:1 +革 19 +x:19 +开山 1 +x:1 +行频 1 +x:1 +当权 1 +x:1 +北欧队 1 +x:1 +博野县 1 +x:1 +机动 1 +x:1 +圆梦 1 +x:1 +题录库 1 +x:1 +泰山压卵 1 +x:1 +需求量 1 +x:1 +副处 1 +x:1 +横山 1 +x:1 +国耻 1 +x:1 +钎 4 +x:4 +明示 1 +x:1 +茗 1 +x:1 +密告 1 +x:1 +辽河畔 1 +x:1 +普章乡 1 +x:1 +熠 1 +x:1 +治国者 1 +x:1 +失足者 1 +x:1 +侍郎 1 +x:1 +适用性 1 +x:1 +船蛆 1 +x:1 +国者 1 +x:1 +猪草 1 +x:1 +出版商 1 +x:1 +毡棚 1 +x:1 +怡人 1 +x:1 +菜贩 1 +x:1 +千岩万壑 1 +x:1 +拂 34 +x:34 +横尸 1 +x:1 +林苗圃 1 +x:1 +救起 1 +x:1 +克 168 +x:168 +酸枣糕 1 +x:1 +行李箱 1 +x:1 +专文 1 +x:1 +羊角 1 +x:1 +心不在焉 1 +x:1 +游乐场 1 +x:1 +豪夺巧取 1 +x:1 +弹性 1 +x:1 +困处 1 +x:1 +勘察队 1 +x:1 +制药 1 +x:1 +相互之间 1 +x:1 +孔洞 1 +x:1 +国联 1 +x:1 +穷山恶山 1 +x:1 +柳叶形 1 +x:1 +蛸蜞 1 +x:1 +扎得 1 +x:1 +甫 26 +x:26 +侧面 1 +x:1 +白云山 1 +x:1 +开开 1 +x:1 +舱单 1 +x:1 +俗见 1 +x:1 +开式 1 +x:1 +归来 1 +x:1 +通州 1 +x:1 +舵手 1 +x:1 +冷板 1 +x:1 +农友 1 +x:1 +公车 1 +x:1 +开张 1 +x:1 +国产化 1 +x:1 +典籍 1 +x:1 +公转 1 +x:1 +收紧 1 +x:1 +牌坊群 1 +x:1 +冷杉 1 +x:1 +大营盘乡 1 +x:1 +阿族 1 +x:1 +中科院 1 +x:1 +物种 1 +x:1 +农口 1 +x:1 +执委会 1 +x:1 +世系 1 +x:1 +美美 1 +x:1 +平妥 1 +x:1 +沟渠 1 +x:1 +犹他 1 +x:1 +棒冰 1 +x:1 +阿方 1 +x:1 +绿园区 1 +x:1 +早年 1 +x:1 +炕席 1 +x:1 +名士 1 +x:1 +侄子 1 +x:1 +机具 1 +x:1 +壕坡 1 +x:1 +机关 1 +x:1 +屏山顶 1 +x:1 +何台子村 1 +x:1 +防骄破满 1 +x:1 +起见 1 +x:1 +冲拳 1 +x:1 +阿斗 1 +x:1 +版纳 1 +x:1 +自勉 1 +x:1 +归期 1 +x:1 +深槽 1 +x:1 +毕业证 1 +x:1 +妖道 1 +x:1 +钟爱 1 +x:1 +罗滕堡 1 +x:1 +旱作区 1 +x:1 +汀河乡 1 +x:1 +毛驴子 1 +x:1 +血吸虫 1 +x:1 +凑足 1 +x:1 +开征 1 +x:1 +博山区 1 +x:1 +克郎球 1 +x:1 +原线圈 1 +x:1 +祖树 1 +x:1 +爸爸 1 +x:1 +辱没门庭 1 +x:1 +公开赛 1 +x:1 +平复 1 +x:1 +农协 1 +x:1 +细菌肥料 1 +x:1 +红澄澄 1 +x:1 +蚕食 1 +x:1 +公告栏 1 +x:1 +尊贵 1 +x:1 +河沙路 1 +x:1 +梧州港 1 +x:1 +普通话 1 +x:1 +平头 1 +x:1 +舱口 1 +x:1 +绳墨 1 +x:1 +班加罗尔 1 +x:1 +建材厂 1 +x:1 +北南向 1 +x:1 +降B大调 1 +x:1 +开心 1 +x:1 +教务长 1 +x:1 +采样管 1 +x:1 +和文 1 +x:1 +热线卡 1 +x:1 +秀美 1 +x:1 +冷枪 1 +x:1 +陪衬 1 +x:1 +蔬菜站 1 +x:1 +升迁 1 +x:1 +国药 1 +x:1 +涤浊扬清 1 +x:1 +蔚成 1 +x:1 +犯规者 1 +x:1 +地层 1 +x:1 +圆整 1 +x:1 +冷极 1 +x:1 +林网化 1 +x:1 +农区 1 +x:1 +五连版 1 +x:1 +困难性 1 +x:1 +陪行 1 +x:1 +神物 1 +x:1 +汴京 1 +x:1 +急飞 1 +x:1 +炕床 1 +x:1 +戈壁石 1 +x:1 +利税 1 +x:1 +麻卵石 1 +x:1 +开市 1 +x:1 +业界 1 +x:1 +云南马 1 +x:1 +国花 1 +x:1 +成年组 1 +x:1 +田黄石 1 +x:1 +标引词 1 +x:1 +布景钱 1 +x:1 +平假名 1 +x:1 +大婶儿 1 +x:1 +副官 1 +x:1 +口音 1 +x:1 +望天田 1 +x:1 +冲掉 1 +x:1 +花 978 +x:978 +原鸽 1 +x:1 +茅寮 1 +x:1 +潜水艇 1 +x:1 +明白卡 1 +x:1 +回辉村 1 +x:1 +挂架 1 +x:1 +暗无天日 1 +x:1 +红扑扑 1 +x:1 +风险关 1 +x:1 +棕熊队 1 +x:1 +体长 1 +x:1 +冲砂闸 1 +x:1 +农办 1 +x:1 +板场乡 1 +x:1 +长拳 1 +x:1 +奏响 1 +x:1 +开幕 1 +x:1 +曙 1 +x:1 +困守 1 +x:1 +古尔达拉 1 +x:1 +第一产业 1 +x:1 +嗵嗵 1 +x:1 +斡旋 1 +x:1 +横店 1 +x:1 +应者如云 1 +x:1 +楚国 1 +x:1 +中西医 1 +x:1 +知情权 1 +x:1 +犀浦镇 1 +x:1 +农务 1 +x:1 +雹 1 +x:1 +油布 1 +x:1 +平壤 1 +x:1 +守信用 1 +x:1 +富有者 1 +x:1 +通屏 1 +x:1 +渗透压 1 +x:1 +水烟 1 +x:1 +路径 1 +x:1 +地对空 1 +x:1 +务工证 1 +x:1 +棉鞋 1 +x:1 +一院制 1 +x:1 +软骨头 1 +x:1 +空心坝 1 +x:1 +支局长 1 +x:1 +宝刀不老 1 +x:1 +负 488 +x:488 +国航 1 +x:1 +遥遥茫茫 1 +x:1 +黄花岗 1 +x:1 +纽子 1 +x:1 +刀疤 1 +x:1 +萨马拉河 1 +x:1 +建筑法 1 +x:1 +光彩夺目 1 +x:1 +长成 1 +x:1 +樱 11 +x:11 +路徽 1 +x:1 +锡箔 1 +x:1 +横幅 1 +x:1 +通山 1 +x:1 +餐风宿雪 1 +x:1 +平塘 1 +x:1 +贫困带 1 +x:1 +威震 1 +x:1 +国色 1 +x:1 +泊 8 +x:8 +当时 1 +x:1 +纸工 1 +x:1 +动力机 1 +x:1 +腋毛 1 +x:1 +一来二去 1 +x:1 +刀痕 1 +x:1 +当日 1 +x:1 +排斥力 1 +x:1 +督 3 +x:3 +夜宵 1 +x:1 +无处 1 +x:1 +无烟火药 1 +x:1 +打硬仗 1 +x:1 +筹组 1 +x:1 +和衣而睡 1 +x:1 +冷暖 1 +x:1 +扁平 1 +x:1 +郑重 1 +x:1 +剿杀 1 +x:1 +天主 1 +x:1 +微秒 1 +x:1 +惊喜万分 1 +x:1 +冲撞 1 +x:1 +演化史 1 +x:1 +老干局 1 +x:1 +循规守旧 1 +x:1 +纱笼 1 +x:1 +开外 1 +x:1 +机场 1 +x:1 +揣想 1 +x:1 +清凉 1 +x:1 +财工发 1 +x:1 +洗手间 1 +x:1 +暴跳如雷 1 +x:1 +微生物学 1 +x:1 +壮凸 1 +x:1 +华晋 1 +x:1 +老年人 1 +x:1 +当成 1 +x:1 +刮金板 1 +x:1 +慈善性 1 +x:1 +梳 3 +x:3 +天上 1 +x:1 +长斋 1 +x:1 +动物纤维 1 +x:1 +开头 1 +x:1 +七星针 1 +x:1 +长文 1 +x:1 +天一 1 +x:1 +两姨亲 1 +x:1 +中间人 1 +x:1 +中小银行 1 +x:1 +总的讲 1 +x:1 +笔顺 1 +x:1 +刀片 1 +x:1 +择偶者 1 +x:1 +秘密 1 +x:1 +童话集 1 +x:1 +大圪村 1 +x:1 +无业游民 1 +x:1 +阿穆尔河 1 +x:1 +一四月 1 +x:1 +城东区 1 +x:1 +八九点钟 1 +x:1 +思恋 1 +x:1 +天书 1 +x:1 +择业 1 +x:1 +苦乐观 1 +x:1 +痹症 1 +x:1 +藓苔 1 +x:1 +夏吟 1 +x:1 +母大虫 1 +x:1 +起运 1 +x:1 +北麓 1 +x:1 +荣成 1 +x:1 +机坑 1 +x:1 +呈交 1 +x:1 +解放史 1 +x:1 +挂怀 1 +x:1 +茅屋 1 +x:1 +副将 1 +x:1 +典章 1 +x:1 +泰山鸿毛 1 +x:1 +广东团 1 +x:1 +安全法 1 +x:1 +困局 1 +x:1 +白叟黄童 1 +x:1 +叠床架屋 1 +x:1 +包探 1 +x:1 +高比例 1 +x:1 +城西乡 1 +x:1 +沟梁 1 +x:1 +执法权 1 +x:1 +备件 1 +x:1 +机型 1 +x:1 +生产基金 1 +x:1 +备份 1 +x:1 +渔港村 1 +x:1 +煤厂 1 +x:1 +大展身手 1 +x:1 +始而 1 +x:1 +嫩嫩的 1 +x:1 +绸料 1 +x:1 +滚沸 1 +x:1 +重犯者 1 +x:1 +剪刀 1 +x:1 +抒情性 1 +x:1 +采用 1 +x:1 +新华路 1 +x:1 +开始 1 +x:1 +感叹句 1 +x:1 +动力性 1 +x:1 +天价 1 +x:1 +燎 2 +x:2 +剪剪 1 +x:1 +感叹号 1 +x:1 +天仙 1 +x:1 +堰顶 1 +x:1 +闷闷不乐 1 +x:1 +拨浪鼓 1 +x:1 +乐此不疲 1 +x:1 +加密锁 1 +x:1 +硬骨头 1 +x:1 +道藏 1 +x:1 +长效 1 +x:1 +兹 7 +x:7 +安静村 1 +x:1 +双城市 1 +x:1 +威逼 1 +x:1 +驿 1 +x:1 +翅脉 1 +x:1 +造山运动 1 +x:1 +曲体 1 +x:1 +销货款 1 +x:1 +马尾区 1 +x:1 +起身 1 +x:1 +平底 1 +x:1 +录播 1 +x:1 +调整工 1 +x:1 +农民式 1 +x:1 +站住脚 1 +x:1 +版种 1 +x:1 +热镀锌 1 +x:1 +相劝 1 +x:1 +家庭史 1 +x:1 +卫生镇 1 +x:1 +平庄 1 +x:1 +鼓励类 1 +x:1 +平庸 1 +x:1 +口里 1 +x:1 +筹码 1 +x:1 +夺标 1 +x:1 +屈成 1 +x:1 +船艇 1 +x:1 +解放桥街 1 +x:1 +槐豆 1 +x:1 +阿拉 1 +x:1 +平度 1 +x:1 +思慕 1 +x:1 +施暴 1 +x:1 +机器 1 +x:1 +罚款单 1 +x:1 +痞子 1 +x:1 +炕头 1 +x:1 +肺泡 1 +x:1 +归总 1 +x:1 +船舸 1 +x:1 +洗车费 1 +x:1 +零2分 1 +x:1 +船舱 1 +x:1 +自尊心 1 +x:1 +江桥 1 +x:1 +船舷 1 +x:1 +船舶 1 +x:1 +择优 1 +x:1 +屡试不第 1 +x:1 +尽善尽美 1 +x:1 +颐指气使 1 +x:1 +择伐 1 +x:1 +天体 1 +x:1 +吃素 1 +x:1 +吃紧 1 +x:1 +战败 1 +x:1 +炉温 1 +x:1 +炉渣 1 +x:1 +宣传单 1 +x:1 +止境 1 +x:1 +如出一辙 1 +x:1 +翅膀 1 +x:1 +国营 1 +x:1 +禁运 1 +x:1 +基地式 1 +x:1 +取得 1 +x:1 +深渊 1 +x:1 +安排者 1 +x:1 +卡拉季 1 +x:1 +冬桃 1 +x:1 +永垂不朽 1 +x:1 +巅峰期 1 +x:1 +平常 1 +x:1 +壁室 1 +x:1 +支吾 1 +x:1 +神田 1 +x:1 +卫生间 1 +x:1 +胶卷盒 1 +x:1 +亲 138 +x:138 +电镜 1 +x:1 +超预算 1 +x:1 +从艺者 1 +x:1 +教科文 1 +x:1 +彩灯 1 +x:1 +丙纶 1 +x:1 +易发区 1 +x:1 +七溪岭 1 +x:1 +游乐区 1 +x:1 +绒 5 +x:5 +吏治 1 +x:1 +国葬 1 +x:1 +机械厂 1 +x:1 +机械厅 1 +x:1 +力争上游 1 +x:1 +沟槽 1 +x:1 +坠毁 1 +x:1 +古 474 +x:474 +挑逗 1 +x:1 +地心 1 +x:1 +平平 1 +x:1 +冷水域 1 +x:1 +国产品 1 +x:1 +溪口镇 1 +x:1 +肝条 1 +x:1 +冲散 1 +x:1 +家庭化 1 +x:1 +鳞波 1 +x:1 +幽 9 +x:9 +积累工 1 +x:1 +辗转反侧 1 +x:1 +夜幕 1 +x:1 +肥麦 1 +x:1 +订购粮 1 +x:1 +冻虾 1 +x:1 +入编费 1 +x:1 +长枪 1 +x:1 +明线 1 +x:1 +密友 1 +x:1 +金鸡路 1 +x:1 +窠臼 1 +x:1 +一分之差 1 +x:1 +秣马厉兵 1 +x:1 +荒村 1 +x:1 +遗尿病 1 +x:1 +巴尔干 1 +x:1 +检出率 1 +x:1 +大众呢 1 +x:1 +哑弹 1 +x:1 +离席 1 +x:1 +琢磨 1 +x:1 +券 11 +x:11 +卫生院 1 +x:1 +好胜心 1 +x:1 +平川 1 +x:1 +挂拍 1 +x:1 +克己为民 1 +x:1 +毁坏 1 +x:1 +易燃 1 +x:1 +毒品者 1 +x:1 +起跳 1 +x:1 +丹剧 1 +x:1 +邗江 1 +x:1 +艘 190 +x:190 +贫病交加 1 +x:1 +茅庐 1 +x:1 +深深 1 +x:1 +水浇地 1 +x:1 +采石 1 +x:1 +非实物 1 +x:1 +线轴儿 1 +x:1 +采矿 1 +x:1 +变脸 1 +x:1 +明细 1 +x:1 +农垦 1 +x:1 +起跑 1 +x:1 +丁字规 1 +x:1 +寄卡人 1 +x:1 +怡神 1 +x:1 +长机 1 +x:1 +公证 1 +x:1 +铁一局 1 +x:1 +俗赋 1 +x:1 +公诉 1 +x:1 +复兴门 1 +x:1 +年均 1 +x:1 +反文旁儿 1 +x:1 +锡纸 1 +x:1 +梦游症 1 +x:1 +长泰县 1 +x:1 +上套者 1 +x:1 +长期 1 +x:1 +刺针 1 +x:1 +核实率 1 +x:1 +淹没区 1 +x:1 +施教 1 +x:1 +草石蚕 1 +x:1 +服务部 1 +x:1 +筹算 1 +x:1 +归根究底 1 +x:1 +黄栗树 1 +x:1 +担保费 1 +x:1 +施政 1 +x:1 +强横霸道 1 +x:1 +镍 7 +x:7 +纽带 1 +x:1 +版税 1 +x:1 +滚滚 1 +x:1 +吨钢 1 +x:1 +火冒三丈 1 +x:1 +减人增效 1 +x:1 +长条 1 +x:1 +因 2274 +x:2274 +公认 1 +x:1 +荒林 1 +x:1 +通天 1 +x:1 +农地 1 +x:1 +公议 1 +x:1 +港墟沟 1 +x:1 +农场 1 +x:1 +郑铁 1 +x:1 +舒畅 1 +x:1 +挂扶 1 +x:1 +评奖费 1 +x:1 +改编权 1 +x:1 +公设 1 +x:1 +亚非拉 1 +x:1 +怪怪的 1 +x:1 +公论 1 +x:1 +商学院 1 +x:1 +开导 1 +x:1 +蜀 12 +x:12 +出版史 1 +x:1 +活立木 1 +x:1 +炕孵 1 +x:1 +计量行 1 +x:1 +禁赌 1 +x:1 +大陡山 1 +x:1 +怀诚 1 +x:1 +朝中社 1 +x:1 +深沉 1 +x:1 +禁赛 1 +x:1 +电镐 1 +x:1 +风动工具 1 +x:1 +助产 1 +x:1 +带路 1 +x:1 +贺兰县 1 +x:1 +远路 1 +x:1 +战车 1 +x:1 +消费税 1 +x:1 +世称 1 +x:1 +大写家 1 +x:1 +立功赎罪 1 +x:1 +谲 1 +x:1 +幸运感 1 +x:1 +处理权 1 +x:1 +忧郁 1 +x:1 +引以为鉴 1 +x:1 +农园 1 +x:1 +过得去 1 +x:1 +遭际 1 +x:1 +深泓 1 +x:1 +斗必十倍 1 +x:1 +下议院 1 +x:1 +代劳 1 +x:1 +求婚者 1 +x:1 +典礼 1 +x:1 +鸟类 1 +x:1 +成形术 1 +x:1 +有的放矢 1 +x:1 +顶芽 1 +x:1 +烦琐哲学 1 +x:1 +路子 1 +x:1 +模糊不清 1 +x:1 +宋庄 1 +x:1 +幸福感 1 +x:1 +不甘寂寞 1 +x:1 +晨幕 1 +x:1 +清嗓润肺 1 +x:1 +茶市 1 +x:1 +稽查所 1 +x:1 +糠秕 1 +x:1 +名编辑 1 +x:1 +忻 2 +x:2 +吃水量 1 +x:1 +这时 1 +x:1 +冷战 1 +x:1 +带走 1 +x:1 +物类 1 +x:1 +水灵 1 +x:1 +忌口 1 +x:1 +挂挂 1 +x:1 +左右翼 1 +x:1 +一丝不苟 1 +x:1 +世祖 1 +x:1 +巨石阵 1 +x:1 +冲服 1 +x:1 +长春 1 +x:1 +冷拼 1 +x:1 +湖前河 1 +x:1 +服务量 1 +x:1 +浩浩荡荡 1 +x:1 +平尾 1 +x:1 +华族 1 +x:1 +大吃一惊 1 +x:1 +麒麟 1 +x:1 +手足之情 1 +x:1 +决定论 1 +x:1 +花笺记 1 +x:1 +路宽 1 +x:1 +带资 1 +x:1 +典租 1 +x:1 +初显式微 1 +x:1 +西湖区 1 +x:1 +狗獾 1 +x:1 +卡拉奇 1 +x:1 +四言诗 1 +x:1 +薄型 1 +x:1 +杀烧淫掠 1 +x:1 +硅酸 1 +x:1 +长智 1 +x:1 +义务工 1 +x:1 +流水席 1 +x:1 +平展 1 +x:1 +空心化 1 +x:1 +冲杀 1 +x:1 +热乎乎 1 +x:1 +故作姿态 1 +x:1 +华新 1 +x:1 +平局 1 +x:1 +为民造福 1 +x:1 +第一把手 1 +x:1 +代书记 1 +x:1 +从轻发落 1 +x:1 +献计 1 +x:1 +开肠破肚 1 +x:1 +吴桥 1 +x:1 +三门县 1 +x:1 +机不可失 1 +x:1 +丁字街 1 +x:1 +纵切面 1 +x:1 +平山 1 +x:1 +楚剧 1 +x:1 +旬 15 +x:15 +牙根 1 +x:1 +鲛绡 1 +x:1 +机制纸 1 +x:1 +体量 1 +x:1 +体重 1 +x:1 +着陆点 1 +x:1 +中西北部 1 +x:1 +托罗累斯 1 +x:1 +冻融 1 +x:1 +章庄铺镇 1 +x:1 +路名 1 +x:1 +家禽业 1 +x:1 +很难说 1 +x:1 +明炮 1 +x:1 +农姑 1 +x:1 +配电房 1 +x:1 +五色缤纷 1 +x:1 +制艺 1 +x:1 +路向 1 +x:1 +不确定性 1 +x:1 +藏蓝色 1 +x:1 +煤炭部 1 +x:1 +大珠山镇 1 +x:1 +行里 1 +x:1 +新人奖 1 +x:1 +撑杆跳 1 +x:1 +山娃娃 1 +x:1 +夏塞 1 +x:1 +开唱 1 +x:1 +剪床 1 +x:1 +杏河乡 1 +x:1 +环境法 1 +x:1 +伯仲 1 +x:1 +忠清南道 1 +x:1 +平叛 1 +x:1 +五盼 1 +x:1 +活土层 1 +x:1 +香河园 1 +x:1 +军政权 1 +x:1 +位庄乡 1 +x:1 +卡脖子 1 +x:1 +晨兴 1 +x:1 +机械师 1 +x:1 +博大胸襟 1 +x:1 +中文系 1 +x:1 +务工者 1 +x:1 +平反 1 +x:1 +采种 1 +x:1 +重元素 1 +x:1 +爱厂如家 1 +x:1 +赞助费 1 +x:1 +自习课 1 +x:1 +叶面 1 +x:1 +坪 7 +x:7 +乐章 1 +x:1 +晨光 1 +x:1 +鸡头米 1 +x:1 +曼陀罗花 1 +x:1 +团伙处 1 +x:1 +申诉案 1 +x:1 +机子 1 +x:1 +安全性 1 +x:1 +阻碍 1 +x:1 +立案率 1 +x:1 +农药味 1 +x:1 +刺骨 1 +x:1 +冷淡 1 +x:1 +比合法 1 +x:1 +深挚 1 +x:1 +扩大会 1 +x:1 +削弱 1 +x:1 +真溶液 1 +x:1 +防护堆 1 +x:1 +黄山乡 1 +x:1 +拮抗剂 1 +x:1 +卫生防疫 1 +x:1 +伯乐 1 +x:1 +磁悬浮 1 +x:1 +农奴 1 +x:1 +棒子 1 +x:1 +纤 1 +x:1 +卧尔滋 1 +x:1 +熟记 1 +x:1 +机宜 1 +x:1 +出版局 1 +x:1 +庄稼 1 +x:1 +朵 93 +x:93 +祸患 1 +x:1 +船运 1 +x:1 +长椅 1 +x:1 +三门峡 1 +x:1 +羊肠 1 +x:1 +喾 1 +x:1 +峪口 1 +x:1 +熟话 1 +x:1 +明火 1 +x:1 +冷涡 1 +x:1 +明灯 1 +x:1 +炉排 1 +x:1 +非人 1 +x:1 +正版 1 +x:1 +一一道来 1 +x:1 +大不列颠 1 +x:1 +思泉 1 +x:1 +自缘 1 +x:1 +疑阵 1 +x:1 +预应力 1 +x:1 +花溪 1 +x:1 +熟读 1 +x:1 +贺兰山 1 +x:1 +牛肉面 1 +x:1 +机密 1 +x:1 +正牌 1 +x:1 +起草 1 +x:1 +农大 1 +x:1 +前半叶 1 +x:1 +困倦 1 +x:1 +待业青年 1 +x:1 +道观 1 +x:1 +笔铅 1 +x:1 +平卧 1 +x:1 +农夫 1 +x:1 +馒头 1 +x:1 +石灰道 1 +x:1 +正片 1 +x:1 +狙击战 1 +x:1 +窍 4 +x:4 +储备库 1 +x:1 +苟全性命 1 +x:1 +搏冰斗雪 1 +x:1 +弯翘 1 +x:1 +坠机 1 +x:1 +因变数 1 +x:1 +保康县 1 +x:1 +造纸 1 +x:1 +羊脂 1 +x:1 +热塑性 1 +x:1 +殆尽 1 +x:1 +禁药 1 +x:1 +冷汗 1 +x:1 +通国 1 +x:1 +笔锋 1 +x:1 +信口开河 1 +x:1 +强基固本 1 +x:1 +预备部 1 +x:1 +瞿 19 +x:19 +神秘 1 +x:1 +五矿 1 +x:1 +因袭性 1 +x:1 +安全感 1 +x:1 +夏天 1 +x:1 +平遥县 1 +x:1 +不测风云 1 +x:1 +打火机 1 +x:1 +策进会 1 +x:1 +冷水 1 +x:1 +臀尖 1 +x:1 +柴油机 1 +x:1 +东坝头村 1 +x:1 +玉米粉 1 +x:1 +情节线 1 +x:1 +心如死灰 1 +x:1 +教代会 1 +x:1 +公营 1 +x:1 +簇新 1 +x:1 +无脑儿 1 +x:1 +圆满 1 +x:1 +夏夜 1 +x:1 +候选国 1 +x:1 +中置同轴 1 +x:1 +羊膜 1 +x:1 +竹业 1 +x:1 +文韬武略 1 +x:1 +彩色电视 1 +x:1 +搬弄是非 1 +x:1 +平列 1 +x:1 +起航 1 +x:1 +开和 1 +x:1 +基地化 1 +x:1 +沿路 1 +x:1 +中青班 1 +x:1 +壁垒 1 +x:1 +埂子 1 +x:1 +政治 1 +x:1 +以彼之道 1 +x:1 +级 679 +x:679 +平分 1 +x:1 +揣测 1 +x:1 +密山 1 +x:1 +沟施 1 +x:1 +九月份 1 +x:1 +图法赫 1 +x:1 +模拟网 1 +x:1 +孔教 1 +x:1 +被调查者 1 +x:1 +营构 1 +x:1 +尼克斯队 1 +x:1 +冷泉 1 +x:1 +王大湾 1 +x:1 +模特儿 1 +x:1 +道袍 1 +x:1 +起舞 1 +x:1 +菜蔬 1 +x:1 +惨叫声 1 +x:1 +卫生香 1 +x:1 +狂犬病 1 +x:1 +船身 1 +x:1 +高中部 1 +x:1 +横吹 1 +x:1 +何须 1 +x:1 +大开眼界 1 +x:1 +撩乱 1 +x:1 +塬上 1 +x:1 +奋 14 +x:14 +无性生殖 1 +x:1 +剪影 1 +x:1 +密封 1 +x:1 +普通股 1 +x:1 +盲率 1 +x:1 +始起 1 +x:1 +剪彩 1 +x:1 +黄花园 1 +x:1 +浅海 1 +x:1 +神祇 1 +x:1 +伯伯 1 +x:1 +版画 1 +x:1 +勇进桥 1 +x:1 +欢蹦乱跳 1 +x:1 +绣球 1 +x:1 +堑壕战 1 +x:1 +横向 1 +x:1 +批准 1 +x:1 +制约性 1 +x:1 +长桌 1 +x:1 +柴 101 +x:101 +爬爬 1 +x:1 +跃进路 1 +x:1 +一家一户 1 +x:1 +幛子 1 +x:1 +史展 1 +x:1 +丹东港 1 +x:1 +菜蚜 1 +x:1 +温哥华 1 +x:1 +急造 1 +x:1 +流水号 1 +x:1 +反腐败 1 +x:1 +不可不 1 +x:1 +机头 1 +x:1 +槐荫 1 +x:1 +全攻全守 1 +x:1 +圈椅 1 +x:1 +纸厂 1 +x:1 +加信镇 1 +x:1 +禁飞区 1 +x:1 +杨家将 1 +x:1 +拼图 1 +x:1 +急速 1 +x:1 +别有风味 1 +x:1 +圆润 1 +x:1 +开场 1 +x:1 +拜年会 1 +x:1 +机外 1 +x:1 +次氯酸 1 +x:1 +南千岛 1 +x:1 +夺杯 1 +x:1 +热泪夺眶 1 +x:1 +冷漠 1 +x:1 +衬砌 1 +x:1 +方言词 1 +x:1 +急遽 1 +x:1 +粮田 1 +x:1 +平凉 1 +x:1 +大雨如注 1 +x:1 +国语 1 +x:1 +印把子 1 +x:1 +农安 1 +x:1 +保守派 1 +x:1 +悍将 1 +x:1 +长毛 1 +x:1 +月饼 1 +x:1 +攀枝花树 1 +x:1 +水产业 1 +x:1 +陨 4 +x:4 +夺权 1 +x:1 +战船 1 +x:1 +永吉街 1 +x:1 +动力源 1 +x:1 +贞 1 +x:1 +神童 1 +x:1 +人才济济 1 +x:1 +印钞厂 1 +x:1 +杨家岭 1 +x:1 +副刊 1 +x:1 +裂解 1 +x:1 +通商 1 +x:1 +深感 1 +x:1 +蹬 19 +x:19 +缺水 1 +x:1 +醒 48 +x:48 +流通额 1 +x:1 +金箔张 1 +x:1 +国力队 1 +x:1 +拔秧 1 +x:1 +花香菇 1 +x:1 +稚子 1 +x:1 +完好无损 1 +x:1 +深意 1 +x:1 +葱花 1 +x:1 +棉麻 1 +x:1 +导语 1 +x:1 +开垦 1 +x:1 +忠贞感 1 +x:1 +大巴山 1 +x:1 +侵略者 1 +x:1 +政治界 1 +x:1 +农学 1 +x:1 +冲模 1 +x:1 +家 4768 +x:4768 +Y 4 +x:4 +起脚 1 +x:1 +柔肤水 1 +x:1 +圆浑 1 +x:1 +老鹰队 1 +x:1 +审执 1 +x:1 +缎面 1 +x:1 +只争朝夕 1 +x:1 +园田地 1 +x:1 +审批 1 +x:1 +中心局 1 +x:1 +锦葵花 1 +x:1 +闷棍 1 +x:1 +仪仗 1 +x:1 +盲点 1 +x:1 +敝帚自珍 1 +x:1 +公子哥儿 1 +x:1 +双龙营乡 1 +x:1 +舱室 1 +x:1 +顷 13 +x:13 +观察使 1 +x:1 +率先垂范 1 +x:1 +食甘卧暖 1 +x:1 +线卷 1 +x:1 +局促 1 +x:1 +中产阶层 1 +x:1 +薄壳核桃 1 +x:1 +烟柳 1 +x:1 +有高有低 1 +x:1 +夏季 1 +x:1 +国标舞 1 +x:1 +神算 1 +x:1 +竞选 1 +x:1 +均匀率 1 +x:1 +牢记 1 +x:1 +空间结构 1 +x:1 +夜半 1 +x:1 +葱茏 1 +x:1 +江华站 1 +x:1 +稚嫩 1 +x:1 +冧 1 +x:1 +紫檀木 1 +x:1 +凤庄村 1 +x:1 +原阳 1 +x:1 +冷湖 1 +x:1 +坚壁清野 1 +x:1 +讲排场 1 +x:1 +煤尘 1 +x:1 +葡萄汁 1 +x:1 +招财进宝 1 +x:1 +茅台 1 +x:1 +红27军 1 +x:1 +财金 1 +x:1 +夙敌 1 +x:1 +马颈坳镇 1 +x:1 +明珠 1 +x:1 +伟业队 1 +x:1 +汪清县 1 +x:1 +闭合 1 +x:1 +窃钩窃国 1 +x:1 +路坝 1 +x:1 +疾风暴雨 1 +x:1 +畔 61 +x:61 +困厄 1 +x:1 +茅厕 1 +x:1 +身心健康 1 +x:1 +计算机界 1 +x:1 +毡房 1 +x:1 +预订量 1 +x:1 +冷清 1 +x:1 +尽力而为 1 +x:1 +孔林 1 +x:1 +煤层 1 +x:1 +不可救药 1 +x:1 +密度 1 +x:1 +慈善潮 1 +x:1 +不足为训 1 +x:1 +营救 1 +x:1 +煤屑 1 +x:1 +黔西南州 1 +x:1 +引风机 1 +x:1 +激将法 1 +x:1 +严治 1 +x:1 +通告 1 +x:1 +寒光 1 +x:1 +深思 1 +x:1 +深怀 1 +x:1 +普林斯顿 1 +x:1 +口齿 1 +x:1 +折返点 1 +x:1 +缠绵 1 +x:1 +肾上腺素 1 +x:1 +圈梁 1 +x:1 +夜叉 1 +x:1 +从五开始 1 +x:1 +塔院寺 1 +x:1 +成材率 1 +x:1 +后隋村 1 +x:1 +锦绣谷 1 +x:1 +心头病 1 +x:1 +取决 1 +x:1 +博卡区 1 +x:1 +缠绕 1 +x:1 +铷钟 1 +x:1 +当涂 1 +x:1 +荣宗耀祖 1 +x:1 +着装 1 +x:1 +一二·九 1 +x:1 +俗者 1 +x:1 +槐花 1 +x:1 +月食 1 +x:1 +新会 1 +x:1 +评奖者 1 +x:1 +夏收期 1 +x:1 +营养液 1 +x:1 +路域 1 +x:1 +雪魄 1 +x:1 +密布 1 +x:1 +收信连 1 +x:1 +牡丹 1 +x:1 +机声 1 +x:1 +通向 1 +x:1 +产褥热 1 +x:1 +机壳 1 +x:1 +国家室 1 +x:1 +祝贺信 1 +x:1 +葡萄沟 1 +x:1 +远洋船 1 +x:1 +扉页 1 +x:1 +农林牧 1 +x:1 +卓识 1 +x:1 +彩塑 1 +x:1 +碾坊 1 +x:1 +路基 1 +x:1 +储 27 +x:27 +批发 1 +x:1 +裕 9 +x:9 +取出 1 +x:1 +竹溪县 1 +x:1 +测绘法 1 +x:1 +丙烷 1 +x:1 +开国 1 +x:1 +国家局 1 +x:1 +长臂猿 1 +x:1 +运筹帷幄 1 +x:1 +粟子房镇 1 +x:1 +金属陶瓷 1 +x:1 +威风 1 +x:1 +即事 1 +x:1 +行间 1 +x:1 +长涪 1 +x:1 +纸制 1 +x:1 +中签号 1 +x:1 +条块结合 1 +x:1 +菜肴 1 +x:1 +柱廊 1 +x:1 +口风 1 +x:1 +甦 1 +x:1 +漳淮乡 1 +x:1 +脾气 1 +x:1 +通口 1 +x:1 +体膨胀 1 +x:1 +顶角 1 +x:1 +农工 1 +x:1 +平垣 1 +x:1 +通史 1 +x:1 +归心似箭 1 +x:1 +汀 1 +x:1 +勇擒 1 +x:1 +荒洲 1 +x:1 +投入率 1 +x:1 +忍 55 +x:55 +英石 1 +x:1 +副品 1 +x:1 +审讯表 1 +x:1 +长淮 1 +x:1 +按压 1 +x:1 +呼之欲出 1 +x:1 +晶莹 1 +x:1 +国路 1 +x:1 +帝豪 1 +x:1 +葱葱 1 +x:1 +珊瑚滩 1 +x:1 +升腾 1 +x:1 +彩虹灯 1 +x:1 +犹如 1 +x:1 +迭 19 +x:19 +笔道 1 +x:1 +战营 1 +x:1 +开关 1 +x:1 +通县 1 +x:1 +屡试不爽 1 +x:1 +冲泡 1 +x:1 +井下 1 +x:1 +秘史 1 +x:1 +即令 1 +x:1 +公平秤 1 +x:1 +中央 1 +x:1 +长活 1 +x:1 +国贼 1 +x:1 +簋 1 +x:1 +挖 222 +x:222 +降解剂 1 +x:1 +柳叶刀 1 +x:1 +湘剧 1 +x:1 +机徽 1 +x:1 +国货 1 +x:1 +急难 1 +x:1 +言谈举止 1 +x:1 +释义 1 +x:1 +光谱仪 1 +x:1 +行长 1 +x:1 +通卖 1 +x:1 +财工字 1 +x:1 +购书款 1 +x:1 +荒淫 1 +x:1 +尖端科学 1 +x:1 +华滋 1 +x:1 +言情式 1 +x:1 +楚天 1 +x:1 +点题 1 +x:1 +世物 1 +x:1 +平地 1 +x:1 +单摆浮搁 1 +x:1 +明理 1 +x:1 +鳞翅目 1 +x:1 +录制成 1 +x:1 +婚丧事 1 +x:1 +芴 1 +x:1 +体验 1 +x:1 +猪蹄 1 +x:1 +诲人不倦 1 +x:1 +盲目 1 +x:1 +第三系 1 +x:1 +明王朝 1 +x:1 +烟枪 1 +x:1 +东山后村 1 +x:1 +稻粱谋 1 +x:1 +市北区 1 +x:1 +该会 1 +x:1 +犹大 1 +x:1 +牧人 1 +x:1 +原野 1 +x:1 +沿袭 1 +x:1 +精力 1 +x:1 +道路 1 +x:1 +拿摩温 1 +x:1 +通化 1 +x:1 +欣慰 1 +x:1 +平均 1 +x:1 +取回 1 +x:1 +蕨类植物 1 +x:1 +康复站 1 +x:1 +行销 1 +x:1 +挂档 1 +x:1 +杨村浦路 1 +x:1 +符 146 +x:146 +机心 1 +x:1 +国资 1 +x:1 +她 5131 +x:5131 +开凿 1 +x:1 +长流 1 +x:1 +勇斗 1 +x:1 +火球 1 +x:1 +长治 1 +x:1 +死心眼儿 1 +x:1 +物探局 1 +x:1 +公职 1 +x:1 +长河 1 +x:1 +欣悦 1 +x:1 +五环 1 +x:1 +绳圈 1 +x:1 +香河县 1 +x:1 +刀笔 1 +x:1 +刺鼻 1 +x:1 +道谢 1 +x:1 +冲消 1 +x:1 +海棠树 1 +x:1 +取土 1 +x:1 +机师 1 +x:1 +长沙 1 +x:1 +列宁主义 1 +x:1 +厌氧池 1 +x:1 +爪 1 +x:1 +养殖业 1 +x:1 +急需 1 +x:1 +挑食 1 +x:1 +曜 2 +x:2 +井位 1 +x:1 +颞三针 1 +x:1 +香蕉叶 1 +x:1 +瓜达尔市 1 +x:1 +大山顶 1 +x:1 +战役式 1 +x:1 +归案 1 +x:1 +荒水 1 +x:1 +匹夫 1 +x:1 +白云区 1 +x:1 +乌咀乡 1 +x:1 +长泰 1 +x:1 +哑 6 +x:6 +阀体 1 +x:1 +数量词 1 +x:1 +兽面 1 +x:1 +泼皮 1 +x:1 +长波 1 +x:1 +枢机 1 +x:1 +日需求量 1 +x:1 +中委 1 +x:1 +长法 1 +x:1 +达观者 1 +x:1 +孪生子 1 +x:1 +按动 1 +x:1 +新邵县 1 +x:1 +冲淡 1 +x:1 +编织机 1 +x:1 +审验费 1 +x:1 +建材局 1 +x:1 +大槐树 1 +x:1 +原平市 1 +x:1 +灾 112 +x:112 +骆驼草 1 +x:1 +冲洗 1 +x:1 +禁止性 1 +x:1 +潭 15 +x:15 +长水 1 +x:1 +巧立名目 1 +x:1 +姿控 1 +x:1 +掌舵 1 +x:1 +古钱币 1 +x:1 +勇攀 1 +x:1 +审改 1 +x:1 +消费点 1 +x:1 +抗磨 1 +x:1 +炕几 1 +x:1 +现身说法 1 +x:1 +兵戎相见 1 +x:1 +机床 1 +x:1 +出版奖 1 +x:1 +倩 10 +x:10 +顾虑 1 +x:1 +一家多机 1 +x:1 +祖本 1 +x:1 +湖心亭 1 +x:1 +马赫主义 1 +x:1 +一见倾心 1 +x:1 +薰 3 +x:3 +伊萨尔 1 +x:1 +转赠给 1 +x:1 +改造 1 +x:1 +路况 1 +x:1 +先见之明 1 +x:1 +剪草除根 1 +x:1 +机库 1 +x:1 +亚排联 1 +x:1 +勇救 1 +x:1 +这部 1 +x:1 +消费热 1 +x:1 +盒 54 +x:54 +通则 1 +x:1 +即位 1 +x:1 +鲁鱼亥豕 1 +x:1 +敛 4 +x:4 +骨肉相连 1 +x:1 +群体处 1 +x:1 +长池 1 +x:1 +长江 1 +x:1 +应接不暇 1 +x:1 +即使 1 +x:1 +石花洞 1 +x:1 +荒沟 1 +x:1 +剪子 1 +x:1 +荒沙 1 +x:1 +国色天香 1 +x:1 +紫荆花 1 +x:1 +道不拾遗 1 +x:1 +冲浪 1 +x:1 +长汀 1 +x:1 +背书 1 +x:1 +毁弃 1 +x:1 +湮埋 1 +x:1 +五点 1 +x:1 +活跃期 1 +x:1 +取名 1 +x:1 +农忙 1 +x:1 +渔鼓 1 +x:1 +取向 1 +x:1 +中专班 1 +x:1 +开化 1 +x:1 +途 13 +x:13 +密密 1 +x:1 +高堡乡 1 +x:1 +交杯酒 1 +x:1 +矸石 1 +x:1 +伐木 1 +x:1 +唉叹 1 +x:1 +牙科 1 +x:1 +菜花 1 +x:1 +宋城 1 +x:1 +摇船 1 +x:1 +顾藉 1 +x:1 +闷气 1 +x:1 +通出 1 +x:1 +截然不同 1 +x:1 +艰难曲折 1 +x:1 +錾 1 +x:1 +骆驼肉 1 +x:1 +菜苗 1 +x:1 +横县 1 +x:1 +明目 1 +x:1 +优生优育 1 +x:1 +黑衣人 1 +x:1 +密实 1 +x:1 +道轨 1 +x:1 +荒漠 1 +x:1 +犬子 1 +x:1 +菊芋 1 +x:1 +碳氢化物 1 +x:1 +经理办 1 +x:1 +自然环境 1 +x:1 +庆贺寺乡 1 +x:1 +国运 1 +x:1 +庸医 1 +x:1 +察哈尔 1 +x:1 +夏布 1 +x:1 +菊花 1 +x:1 +槐蜜 1 +x:1 +表蒙子 1 +x:1 +临到 1 +x:1 +密室 1 +x:1 +开卷 1 +x:1 +燎原 1 +x:1 +辖区 1 +x:1 +评议员 1 +x:1 +采编 1 +x:1 +方木 1 +x:1 +性灵 1 +x:1 +浮沉荣枯 1 +x:1 +铩羽 1 +x:1 +横卧 1 +x:1 +版片 1 +x:1 +相对论性 1 +x:1 +守三村 1 +x:1 +孪生 1 +x:1 +希拉勒队 1 +x:1 +地幔 1 +x:1 +卡其村 1 +x:1 +忌嫉 1 +x:1 +钻井队 1 +x:1 +犹存 1 +x:1 +宋坑 1 +x:1 +掌权者 1 +x:1 +摸门儿 1 +x:1 +钼 2 +x:2 +通关 1 +x:1 +炉料 1 +x:1 +晋安区 1 +x:1 +横匾 1 +x:1 +缠管 1 +x:1 +茼山 1 +x:1 +机工 1 +x:1 +组织局 1 +x:1 +杜集区 1 +x:1 +陪葬 1 +x:1 +安非拉酮 1 +x:1 +单循环 1 +x:1 +明白 1 +x:1 +白纸坊 1 +x:1 +不识大体 1 +x:1 +单航次 1 +x:1 +织造厂 1 +x:1 +镯子 1 +x:1 +文武场 1 +x:1 +开口 1 +x:1 +菜色 1 +x:1 +韦 114 +x:114 +施洞 1 +x:1 +熟路 1 +x:1 +华沙 1 +x:1 +经理制 1 +x:1 +挂橱 1 +x:1 +繁殖率 1 +x:1 +锡盟 1 +x:1 +野三关镇 1 +x:1 +开刀 1 +x:1 +梅 180 +x:180 +碱土金属 1 +x:1 +熟谙 1 +x:1 +排污量 1 +x:1 +克隆人 1 +x:1 +耦色 1 +x:1 +机尾 1 +x:1 +塑钢 1 +x:1 +开列 1 +x:1 +平和 1 +x:1 +路北 1 +x:1 +开创 1 +x:1 +夜景灯 1 +x:1 +它山之石 1 +x:1 +开初 1 +x:1 +流落他乡 1 +x:1 +荒湖 1 +x:1 +采纳 1 +x:1 +煤堆 1 +x:1 +没事 1 +x:1 +兴平乡 1 +x:1 +碳酸氢铵 1 +x:1 +六八年 1 +x:1 +夙愿 1 +x:1 +去冬 1 +x:1 +久久不绝 1 +x:1 +报复性 1 +x:1 +化铁炉 1 +x:1 +审查 1 +x:1 +出版家 1 +x:1 +还乡河 1 +x:1 +檀郎 1 +x:1 +明知 1 +x:1 +葡萄核 1 +x:1 +屏山镇 1 +x:1 +邪不压正 1 +x:1 +农庄 1 +x:1 +年根儿 1 +x:1 +六腑 1 +x:1 +长滩 1 +x:1 +乖 3 +x:3 +路南 1 +x:1 +鱼尾纹 1 +x:1 +至诚至爱 1 +x:1 +横加 1 +x:1 +机械处 1 +x:1 +广纳 1 +x:1 +色米拉 1 +x:1 +菲律宾队 1 +x:1 +法理 1 +x:1 +各种各样 1 +x:1 +大家庭 1 +x:1 +多方位 1 +x:1 +滚杠 1 +x:1 +路卡 1 +x:1 +农药厂 1 +x:1 +政团 1 +x:1 +绕口令 1 +x:1 +马佐维茨 1 +x:1 +喷发物 1 +x:1 +争气机 1 +x:1 +华乐街 1 +x:1 +怅然之余 1 +x:1 +披星戴月 1 +x:1 +长游 1 +x:1 ++ 19 +x:19 +通假 1 +x:1 +透河井 1 +x:1 +红11师 1 +x:1 +打工者 1 +x:1 +出版学 1 +x:1 +尊者 1 +x:1 +补助货币 1 +x:1 +开办 1 +x:1 +荒滩 1 +x:1 +苗家人 1 +x:1 +箱体 1 +x:1 +糖醋鱼 1 +x:1 +茅坪 1 +x:1 +开动 1 +x:1 +葆 27 +x:27 +黄粱梦镇 1 +x:1 +力大无穷 1 +x:1 +民政科 1 +x:1 +公英 1 +x:1 +乌布苏 1 +x:1 +斯里兰卡 1 +x:1 +长湾 1 +x:1 +两世为人 1 +x:1 +稳健派 1 +x:1 +阿萨伊果 1 +x:1 +先修班 1 +x:1 +胡茬 1 +x:1 +韧性 1 +x:1 +清运量 1 +x:1 +卓 23 +x:23 +柚苗 1 +x:1 +圆桌 1 +x:1 +锡矿 1 +x:1 +唾液腺 1 +x:1 +槐蚕 1 +x:1 +长湖 1 +x:1 +阳光 1 +x:1 +路口 1 +x:1 +淬 2 +x:2 +夏征 1 +x:1 +学习会 1 +x:1 +长恨歌 1 +x:1 +桔梗 1 +x:1 +鉴貌辨色 1 +x:1 +物理 1 +x:1 +店面间 1 +x:1 +格斗术 1 +x:1 +正方体 1 +x:1 +精研细磨 1 +x:1 +壁上 1 +x:1 +建筑署 1 +x:1 +烟退云敛 1 +x:1 +国家标准 1 +x:1 +花大姐 1 +x:1 +荣登 1 +x:1 +碧头村 1 +x:1 +下乡 1 +x:1 +竹轮 1 +x:1 +中南欧 1 +x:1 +焖 3 +x:3 +尺动脉 1 +x:1 +通俗 1 +x:1 +生病 1 +x:1 +衬托 1 +x:1 +恩图曼 1 +x:1 +行规 1 +x:1 +天眼 1 +x:1 +测控船 1 +x:1 +鼻息 1 +x:1 +通信 1 +x:1 +纸业 1 +x:1 +堰 1 +x:1 +装设 1 +x:1 +鬼点子 1 +x:1 +笔谈 1 +x:1 +殷家山 1 +x:1 +笔调 1 +x:1 +移植 1 +x:1 +用球 1 +x:1 +刺绣组 1 +x:1 +铃 8 +x:8 +园旁 1 +x:1 +上方山 1 +x:1 +方庄镇 1 +x:1 +体虱 1 +x:1 +拿药 1 +x:1 +桐 4 +x:4 +煤科院 1 +x:1 +欧元区 1 +x:1 +文学馆 1 +x:1 +神情 1 +x:1 +混杂 1 +x:1 +班底 1 +x:1 +没准 1 +x:1 +建筑编 1 +x:1 +开水壶 1 +x:1 +水江乡 1 +x:1 +质次价高 1 +x:1 +肺科 1 +x:1 +贬者 1 +x:1 +神思 1 +x:1 +侍臣 1 +x:1 +雷动 1 +x:1 +拿获 1 +x:1 +纸人 1 +x:1 +放飞场 1 +x:1 +按住 1 +x:1 +神态 1 +x:1 +天文学部 1 +x:1 +牺牲 1 +x:1 +通体 1 +x:1 +即刻 1 +x:1 +现有 1 +x:1 +厝 1 +x:1 +秘传 1 +x:1 +名店 1 +x:1 +智圆行方 1 +x:1 +神怪 1 +x:1 +金水桥 1 +x:1 +安徽厅 1 +x:1 +庄户 1 +x:1 +五清 1 +x:1 +应市 1 +x:1 +莫先乎情 1 +x:1 +通佳 1 +x:1 +黄山嘴 1 +x:1 +子弹 1 +x:1 +综合国力 1 +x:1 +累西腓 1 +x:1 +贬职 1 +x:1 +物欲 1 +x:1 +竞试 1 +x:1 +军用机 1 +x:1 +牙缝 1 +x:1 +稳如泰山 1 +x:1 +警示牌 1 +x:1 +建筑群 1 +x:1 +炫人眼眸 1 +x:1 +矿上 1 +x:1 +腔模 1 +x:1 +闭合电路 1 +x:1 +国酒 1 +x:1 +吏禄 1 +x:1 +发令枪 1 +x:1 +老头子 1 +x:1 +拔掉 1 +x:1 +医药学界 1 +x:1 +娇好 1 +x:1 +谁 1262 +x:1262 +嘶鸣 1 +x:1 +曲子 1 +x:1 +入画 1 +x:1 +先富户 1 +x:1 +荒灾 1 +x:1 +美誉度 1 +x:1 +大马士革 1 +x:1 +移栽 1 +x:1 +核科学家 1 +x:1 +高利贷 1 +x:1 +原谅 1 +x:1 +自供 1 +x:1 +演艺界 1 +x:1 +荒火 1 +x:1 +阿盟 1 +x:1 +绿茵场 1 +x:1 +行装 1 +x:1 +当真 1 +x:1 +泼水花儿 1 +x:1 +应得 1 +x:1 +绿茵地 1 +x:1 +刀术 1 +x:1 +按价 1 +x:1 +道途 1 +x:1 +杨楼镇 1 +x:1 +纸伞 1 +x:1 +民政村 1 +x:1 +千层底 1 +x:1 +熏染 1 +x:1 +候选人 1 +x:1 +圆盒 1 +x:1 +铁岭市 1 +x:1 +东弓营村 1 +x:1 +圆盖 1 +x:1 +井区 1 +x:1 +国都 1 +x:1 +修行 1 +x:1 +仓惶 1 +x:1 +虚心 1 +x:1 +教管班 1 +x:1 +拉模 1 +x:1 +秀气 1 +x:1 +亡故 1 +x:1 +观察哨 1 +x:1 +通亮 1 +x:1 +万马齐喑 1 +x:1 +顶针 1 +x:1 +澳洲 1 +x:1 +通产 1 +x:1 +父亲 1 +x:1 +柿子 1 +x:1 +巳 1 +x:1 +即可 1 +x:1 +欺上瞒下 1 +x:1 +船队 1 +x:1 +涵养林 1 +x:1 +后来人 1 +x:1 +当着 1 +x:1 +壮族 1 +x:1 +高质 1 +x:1 +汴州 1 +x:1 +冀 65 +x:65 +纵横驰骋 1 +x:1 +阿登 1 +x:1 +林学院 1 +x:1 +呈子 1 +x:1 +雾滴 1 +x:1 +井台 1 +x:1 +井史 1 +x:1 +天宫 1 +x:1 +贪利者 1 +x:1 +拿手好戏 1 +x:1 +阅读者 1 +x:1 +斜拉式 1 +x:1 +外科学 1 +x:1 +井口 1 +x:1 +晖映 1 +x:1 +诱饵 1 +x:1 +打喷嚏 1 +x:1 +同类项 1 +x:1 +刀枪 1 +x:1 +宽限期 1 +x:1 +通书 1 +x:1 +菲律宾裔 1 +x:1 +十二属 1 +x:1 +作工 1 +x:1 +保洁队 1 +x:1 +环状软骨 1 +x:1 +何者 1 +x:1 +家具商 1 +x:1 +自吹自擂 1 +x:1 +通买 1 +x:1 +虚弱 1 +x:1 +天宇 1 +x:1 +狂 50 +x:50 +生存斗争 1 +x:1 +刀柄 1 +x:1 +量器 1 +x:1 +炉窑 1 +x:1 +许村乡 1 +x:1 +铝矾石 1 +x:1 +模拟机 1 +x:1 +楦板 1 +x:1 +观察员 1 +x:1 +笔路 1 +x:1 +枫林 1 +x:1 +相 1422 +x:1422 +枫果 1 +x:1 +湘桂 1 +x:1 +验电笔 1 +x:1 +岘港 1 +x:1 +国道 1 +x:1 +急诊 1 +x:1 +太仓港 1 +x:1 +秘书 1 +x:1 +旭日东升 1 +x:1 +人事权 1 +x:1 +腰堡乡 1 +x:1 +圯 1 +x:1 +消长 1 +x:1 +汇流处 1 +x:1 +计生户 1 +x:1 +路上 1 +x:1 +华灯 1 +x:1 +佐读 1 +x:1 +行语 1 +x:1 +虚岁 1 +x:1 +湖口县 1 +x:1 +采掘 1 +x:1 +园林 1 +x:1 +阻拦 1 +x:1 +船长 1 +x:1 +赵家条 1 +x:1 +开会 1 +x:1 +布琼布拉 1 +x:1 +媛 6 +x:6 +肝炎 1 +x:1 +刺耳 1 +x:1 +行评 1 +x:1 +二义性 1 +x:1 +办水热 1 +x:1 +战马 1 +x:1 +天堑 1 +x:1 +礼记 1 +x:1 +乡村级 1 +x:1 +佐证 1 +x:1 +上臂 1 +x:1 +模声拟态 1 +x:1 +天堂 1 +x:1 +安义县 1 +x:1 +原核 1 +x:1 +煤机厂 1 +x:1 +嗅 11 +x:11 +克莱维 1 +x:1 +懊悔 1 +x:1 +撼天动地 1 +x:1 +临湘市 1 +x:1 +曹峪村 1 +x:1 +樊城 1 +x:1 +仪器 1 +x:1 +移步 1 +x:1 +遭荒 1 +x:1 +大本子 1 +x:1 +深秋 1 +x:1 +冷眼 1 +x:1 +挂盘 1 +x:1 +综合篇 1 +x:1 +日 1839 +x:1839 +政治篇 1 +x:1 +连通器 1 +x:1 +包袱井 1 +x:1 +建安处 1 +x:1 +盐分 1 +x:1 +盲校 1 +x:1 +带领 1 +x:1 +奥地利 1 +x:1 +兽行 1 +x:1 +春假 1 +x:1 +雪域 1 +x:1 +急袭 1 +x:1 +六鲁 1 +x:1 +棉蚜 1 +x:1 +兼课 1 +x:1 +入网地 1 +x:1 +居民委 1 +x:1 +船闸 1 +x:1 +膨松粉 1 +x:1 +耳生 1 +x:1 +兼语 1 +x:1 +审稿 1 +x:1 +黑发人 1 +x:1 +懊恼 1 +x:1 +煮沸 1 +x:1 +菜鸽 1 +x:1 +邬 11 +x:11 +神户 1 +x:1 +路人 1 +x:1 +痛悼 1 +x:1 +举案齐眉 1 +x:1 +椽 4 +x:4 +无土栽培 1 +x:1 +可感 1 +x:1 +典法 1 +x:1 +太极图 1 +x:1 +执政府 1 +x:1 +印痕 1 +x:1 +成型机 1 +x:1 +闷热 1 +x:1 +罐内 1 +x:1 +傈僳族 1 +x:1 +可燃性 1 +x:1 +大戏院 1 +x:1 +菜鹅 1 +x:1 +阳陵泉 1 +x:1 +动滑轮 1 +x:1 +兼议 1 +x:1 +阻截 1 +x:1 +横传 1 +x:1 +天壤 1 +x:1 +助学 1 +x:1 +肖成林 1 +x:1 +锈迹 1 +x:1 +异客 1 +x:1 +祝贺团 1 +x:1 +严查 1 +x:1 +白马寺 1 +x:1 +应届 1 +x:1 +推动者 1 +x:1 +居奇牟利 1 +x:1 +口蘑 1 +x:1 +肝火 1 +x:1 +置之度外 1 +x:1 +硬腭 1 +x:1 +玷污 1 +x:1 +都政府 1 +x:1 +熟透 1 +x:1 +发球手 1 +x:1 +释减 1 +x:1 +定式化 1 +x:1 +开业 1 +x:1 +月老 1 +x:1 +嫌贫爱富 1 +x:1 +天大 1 +x:1 +孝子 1 +x:1 +肘部 1 +x:1 +各自为政 1 +x:1 +口碑载道 1 +x:1 +橡胶管 1 +x:1 +商贿官贪 1 +x:1 +崴 49 +x:49 +深碧 1 +x:1 +王老五 1 +x:1 +厨师班 1 +x:1 +牙粉 1 +x:1 +湛河 1 +x:1 +复读 1 +x:1 +政工师 1 +x:1 +岱庙 1 +x:1 +辖下 1 +x:1 +熟道 1 +x:1 +曲处 1 +x:1 +浔 3 +x:3 +新旧杂陈 1 +x:1 +何苦 1 +x:1 +滚筒 1 +x:1 +寡言 1 +x:1 +横亘 1 +x:1 +防暑降温 1 +x:1 +公鸡 1 +x:1 +卓尔不傲 1 +x:1 +叫 862 +x:862 +神户港 1 +x:1 +雾气 1 +x:1 +外景地 1 +x:1 +观察国 1 +x:1 +横事 1 +x:1 +蛹 1 +x:1 +起飞 1 +x:1 +庄稼活儿 1 +x:1 +日本队 1 +x:1 +一言难尽 1 +x:1 +仓房 1 +x:1 +建筑系 1 +x:1 +骆 32 +x:32 +奶酪 1 +x:1 +倾国倾城 1 +x:1 +五洲 1 +x:1 +白报纸 1 +x:1 +衣领 1 +x:1 +筹资额 1 +x:1 +翅鞘 1 +x:1 +支付日 1 +x:1 +忧患 1 +x:1 +抱屈 1 +x:1 +扩血管药 1 +x:1 +独木桥 1 +x:1 +圈点 1 +x:1 +释典 1 +x:1 +开交 1 +x:1 +桥牌赛 1 +x:1 +陪餐 1 +x:1 +平方里 1 +x:1 +奶酒 1 +x:1 +妙笔生花 1 +x:1 +仪型 1 +x:1 +助威 1 +x:1 +冷盘 1 +x:1 +窟窿 1 +x:1 +辍学率 1 +x:1 +魂飞西天 1 +x:1 +糊 10 +x:10 +爱乐者 1 +x:1 +海阔云舒 1 +x:1 +阻挡 1 +x:1 +阻挠 1 +x:1 +竹制品 1 +x:1 +长物 1 +x:1 +船钱 1 +x:1 +姜 464 +x:464 +挑灯苦读 1 +x:1 +下泄 1 +x:1 +即兴 1 +x:1 +盐厂 1 +x:1 +建井所 1 +x:1 +河北区 1 +x:1 +正点率 1 +x:1 +井冈 1 +x:1 +郁闷 1 +x:1 +权力观 1 +x:1 +排污费 1 +x:1 +威胁 1 +x:1 +跳跃式 1 +x:1 +悬空寺 1 +x:1 +各自为战 1 +x:1 +偷偷摸摸 1 +x:1 +养殖地 1 +x:1 +炉网 1 +x:1 +行路 1 +x:1 +养殖场 1 +x:1 +高谈阔论 1 +x:1 +显示钮 1 +x:1 +绳上 1 +x:1 +投入比 1 +x:1 +西凤酒 1 +x:1 +刀戟 1 +x:1 +周报制 1 +x:1 +逢山开路 1 +x:1 +高温带 1 +x:1 +嗟叹 1 +x:1 +电针疗法 1 +x:1 +虎门港 1 +x:1 +音源器 1 +x:1 +雷达 1 +x:1 +贵妇人 1 +x:1 +碳 10 +x:10 +孝学 1 +x:1 +乐观其成 1 +x:1 +毡笠 1 +x:1 +明沟 1 +x:1 +行距 1 +x:1 +芬兰队 1 +x:1 +天幸 1 +x:1 +没说的 1 +x:1 +评议书 1 +x:1 +自动铅笔 1 +x:1 +平保 1 +x:1 +血管性 1 +x:1 +天平 1 +x:1 +抱定 1 +x:1 +天年 1 +x:1 +政工处 1 +x:1 +卿卿我我 1 +x:1 +哲理 1 +x:1 +紧凑 1 +x:1 +事过境迁 1 +x:1 +绿黄色 1 +x:1 +博 38 +x:38 +助工 1 +x:1 +国门 1 +x:1 +服务舱 1 +x:1 +明泉 1 +x:1 +农艺园 1 +x:1 +金水河 1 +x:1 +深翻 1 +x:1 +沿途 1 +x:1 +天幕 1 +x:1 +冷焊 1 +x:1 +书画家 1 +x:1 +圆珠 1 +x:1 +产业资本 1 +x:1 +量变 1 +x:1 +公平感 1 +x:1 +平信 1 +x:1 +捺 4 +x:4 +吃水 1 +x:1 +扩大化 1 +x:1 +环境灯 1 +x:1 +卜辞 1 +x:1 +备感荣幸 1 +x:1 +天庭 1 +x:1 +录用 1 +x:1 +行走 1 +x:1 +安步当车 1 +x:1 +铁皮柜 1 +x:1 +一模一样 1 +x:1 +版框 1 +x:1 +吃法 1 +x:1 +在野派 1 +x:1 +长生 1 +x:1 +采收 1 +x:1 +瞒骗 1 +x:1 +闭门造车 1 +x:1 +保障型 1 +x:1 +急躁 1 +x:1 +俳 5 +x:5 +蚀本 1 +x:1 +冮 5 +x:5 +迫切性 1 +x:1 +牙签 1 +x:1 +量化 1 +x:1 +钩挂 1 +x:1 +华盖 1 +x:1 +优点 1 +x:1 +公馆 1 +x:1 +时过境迁 1 +x:1 +劳动局长 1 +x:1 +小五金 1 +x:1 +十二大 1 +x:1 +新楼 1 +x:1 +行贩 1 +x:1 +剿灭 1 +x:1 +肝癌 1 +x:1 +二项式 1 +x:1 +路由器 1 +x:1 +卤族 1 +x:1 +敞篷车 1 +x:1 +取代 1 +x:1 +慰缭子 1 +x:1 +沃里克郡 1 +x:1 +目睹记 1 +x:1 +挂灯 1 +x:1 +后延 1 +x:1 +种粮食 1 +x:1 +有心人 1 +x:1 +曲度 1 +x:1 +参政议政 1 +x:1 +姆塞克瓦 1 +x:1 +行负 1 +x:1 +荒疏 1 +x:1 +拉动性 1 +x:1 +藻类 1 +x:1 +武力 1 +x:1 +桦树皮 1 +x:1 +口臭 1 +x:1 +挚友 1 +x:1 +顶部 1 +x:1 +东直门 1 +x:1 +非公经济 1 +x:1 +共振点 1 +x:1 +菜馆 1 +x:1 +虚实 1 +x:1 +诸侯国 1 +x:1 +脉脉含情 1 +x:1 +到手 1 +x:1 +曝光度 1 +x:1 +一拥而起 1 +x:1 +武功 1 +x:1 +督导团 1 +x:1 +晴天霹雳 1 +x:1 +采撷 1 +x:1 +移民 1 +x:1 +裤袋 1 +x:1 +圆状 1 +x:1 +军事基地 1 +x:1 +横 93 +x:93 +环 178 +x:178 +葡萄牙 1 +x:1 +公顷 1 +x:1 +深红 1 +x:1 +量力 1 +x:1 +张集镇 1 +x:1 +晓市 1 +x:1 +平产 1 +x:1 +似 260 +x:260 +公平性 1 +x:1 +不失时宜 1 +x:1 +井场 1 +x:1 +舒曼 1 +x:1 +质保书 1 +x:1 +菏 1 +x:1 +贤内助 1 +x:1 +捐款人 1 +x:1 +亲戚 1 +x:1 +立交化 1 +x:1 +曲式 1 +x:1 +雇佣观点 1 +x:1 +阻断 1 +x:1 +塞 122 +x:122 +电磁场 1 +x:1 +深绵 1 +x:1 +厉鬼 1 +x:1 +裤裆 1 +x:1 +平价 1 +x:1 +深绿 1 +x:1 +琼 40 +x:40 +德宏 1 +x:1 +国铁 1 +x:1 +蚊虫 1 +x:1 +珊瑚石 1 +x:1 +贫困区 1 +x:1 +兰陵镇 1 +x:1 +净增额 1 +x:1 +忧色 1 +x:1 +冷热 1 +x:1 +冷烫 1 +x:1 +纯数学 1 +x:1 +只见 1 +x:1 +闪击战 1 +x:1 +猪革 1 +x:1 +报仇雪恨 1 +x:1 +冠名 1 +x:1 +欧元国 1 +x:1 +张家沟 1 +x:1 +停电日 1 +x:1 +鹰窠顶 1 +x:1 +主旋律 1 +x:1 +油油的 1 +x:1 +孤儿村 1 +x:1 +管道 1 +x:1 +影壁 1 +x:1 +王坚固村 1 +x:1 +有假 1 +x:1 +明洞 1 +x:1 +瑞金 1 +x:1 +北窖镇 1 +x:1 +量刑 1 +x:1 +口腔 1 +x:1 +急迫 1 +x:1 +阿爸 1 +x:1 +阿爷 1 +x:1 +手软 1 +x:1 +古语词 1 +x:1 +钛白粉 1 +x:1 +采摘 1 +x:1 +摧崖拍岸 1 +x:1 +安徽团 1 +x:1 +工人贵族 1 +x:1 +当班 1 +x:1 +鬼使神差 1 +x:1 +笔触 1 +x:1 +各尽所长 1 +x:1 +虚字 1 +x:1 +没命 1 +x:1 +取保 1 +x:1 +冷点 1 +x:1 +九寨沟 1 +x:1 +有偿 1 +x:1 +菜饼 1 +x:1 +野炊 1 +x:1 +急进 1 +x:1 +移泊 1 +x:1 +平乡 1 +x:1 +菜饭 1 +x:1 +再进一步 1 +x:1 +直观性 1 +x:1 +太平水缸 1 +x:1 +男高音 1 +x:1 +训词 1 +x:1 +地上权 1 +x:1 +圆熟 1 +x:1 +民乐曲 1 +x:1 +蚀斑 1 +x:1 +行述 1 +x:1 +筹款 1 +x:1 +训话 1 +x:1 +搬运工 1 +x:1 +肠梗阻 1 +x:1 +笞 1 +x:1 +花池 1 +x:1 +计生星 1 +x:1 +仪刑 1 +x:1 +训诫 1 +x:1 +肾衰竭 1 +x:1 +决一高低 1 +x:1 +赤手空拳 1 +x:1 +战鹰 1 +x:1 +蚕豆 1 +x:1 +克隆型 1 +x:1 +建业队 1 +x:1 +喊冤叫屈 1 +x:1 +没事儿 1 +x:1 +岱宗 1 +x:1 +天山 1 +x:1 +蛋 97 +x:97 +长石 1 +x:1 +花费 1 +x:1 +应声 1 +x:1 +长短 1 +x:1 +小寨沟 1 +x:1 +服务者 1 +x:1 +庄园 1 +x:1 +基础教育 1 +x:1 +小品剧 1 +x:1 +肥城市 1 +x:1 +大衣呢 1 +x:1 +长矛 1 +x:1 +驾驶证 1 +x:1 +竞走 1 +x:1 +神曲 1 +x:1 +睦 3 +x:3 +湘剧院 1 +x:1 +头破血流 1 +x:1 +曲尺 1 +x:1 +太极剑 1 +x:1 +十字街头 1 +x:1 +审结 1 +x:1 +罚单 1 +x:1 +局势 1 +x:1 +行车 1 +x:1 +露才扬己 1 +x:1 +下届 1 +x:1 +明渠 1 +x:1 +体育 1 +x:1 +孔穴 1 +x:1 +等不及 1 +x:1 +带鱼 1 +x:1 +天岭 1 +x:1 +副业 1 +x:1 +神明 1 +x:1 +冻雪 1 +x:1 +冻雨 1 +x:1 +困乏 1 +x:1 +长眠 1 +x:1 +好言好语 1 +x:1 +方寸之地 1 +x:1 +优裕 1 +x:1 +坑坑塘塘 1 +x:1 +棉花 1 +x:1 +完人 1 +x:1 +甭 13 +x:13 +明清 1 +x:1 +开架式 1 +x:1 +宋体 1 +x:1 +原议 1 +x:1 +半壁江山 1 +x:1 +庆祝会 1 +x:1 +溢发 1 +x:1 +河西镇 1 +x:1 +物流 1 +x:1 +别无二致 1 +x:1 +衙内 1 +x:1 +恢宏率意 1 +x:1 +郁郁 1 +x:1 +原话 1 +x:1 +体能 1 +x:1 +挂牌 1 +x:1 +专修点 1 +x:1 +威舍 1 +x:1 +亲眼目睹 1 +x:1 +腌制 1 +x:1 +释名 1 +x:1 +海关法 1 +x:1 +识时务 1 +x:1 +原诉 1 +x:1 +量具 1 +x:1 +放飞关 1 +x:1 +施用 1 +x:1 +批件 1 +x:1 +神智 1 +x:1 +泼洒 1 +x:1 +抱头 1 +x:1 +口舌 1 +x:1 +七国集团 1 +x:1 +精兵简政 1 +x:1 +难以 1 +x:1 +影 52 +x:52 +挂牵 1 +x:1 +新希望党 1 +x:1 +易位 1 +x:1 +招标 1 +x:1 +有穷国 1 +x:1 +自食其言 1 +x:1 +明湖 1 +x:1 +宋代 1 +x:1 +采暖 1 +x:1 +圣保罗 1 +x:1 +安全网 1 +x:1 +当然 1 +x:1 +观察力 1 +x:1 +盲流 1 +x:1 +最轻量级 1 +x:1 +购书点 1 +x:1 +回龙村 1 +x:1 +插花型 1 +x:1 +明澈 1 +x:1 +彭电 1 +x:1 +多云转晴 1 +x:1 +肥 69 +x:69 +被征服者 1 +x:1 +游历 1 +x:1 +缠手 1 +x:1 +仪化 1 +x:1 +运输班 1 +x:1 +审美 1 +x:1 +东却村 1 +x:1 +学潮 1 +x:1 +革命性 1 +x:1 +亲手 1 +x:1 +纸板 1 +x:1 +挑花 1 +x:1 +苏维埃 1 +x:1 +录相 1 +x:1 +长相 1 +x:1 +嫉 1 +x:1 +鳃裂 1 +x:1 +曾几何时 1 +x:1 +肝病 1 +x:1 +孙庄矿 1 +x:1 +重于泰山 1 +x:1 +牙碜 1 +x:1 +贸 18 +x:18 +道院 1 +x:1 +假模假式 1 +x:1 +半夜三更 1 +x:1 +羊齿 1 +x:1 +徒有虚名 1 +x:1 +盐土 1 +x:1 +体腔 1 +x:1 +居住户 1 +x:1 +船速 1 +x:1 +晶 32 +x:32 +借题发挥 1 +x:1 +隋炀帝 1 +x:1 +准入关 1 +x:1 +疝气 1 +x:1 +界面 1 +x:1 +国防 1 +x:1 +饴糖 1 +x:1 +守 145 +x:145 +包乘组 1 +x:1 +笔记 1 +x:1 +文明线 1 +x:1 +量值 1 +x:1 +皮褥子 1 +x:1 +督导员 1 +x:1 +卑躬屈膝 1 +x:1 +蝙蝠 1 +x:1 +阿比让市 1 +x:1 +中师生 1 +x:1 +虚夸 1 +x:1 +槐黄 1 +x:1 +裁判长 1 +x:1 +进水塔 1 +x:1 +盐城 1 +x:1 +万嘱咐 1 +x:1 +长白 1 +x:1 +惠灵顿 1 +x:1 +牢靠 1 +x:1 +执政官 1 +x:1 +分身术 1 +x:1 +井喷 1 +x:1 +子帅 1 +x:1 +行踪 1 +x:1 +临时代办 1 +x:1 +升高 1 +x:1 +郁金 1 +x:1 +笔误 1 +x:1 +革命情 1 +x:1 +宗教观 1 +x:1 +神权 1 +x:1 +锋线 1 +x:1 +卓见 1 +x:1 +熟铁 1 +x:1 +朱色 1 +x:1 +东欧司 1 +x:1 +小胡桃 1 +x:1 +敌骑兵 1 +x:1 +笔试 1 +x:1 +营私 1 +x:1 +养法 1 +x:1 +笔译 1 +x:1 +国际 1 +x:1 +牧工商 1 +x:1 +滚翻 1 +x:1 +采景 1 +x:1 +版次 1 +x:1 +消心痛 1 +x:1 +血红蛋白 1 +x:1 +座位表 1 +x:1 +用兵一时 1 +x:1 +吴江市 1 +x:1 +掌鞭 1 +x:1 +肥肠 1 +x:1 +安道尔 1 +x:1 +动力系 1 +x:1 +王位 1 +x:1 +肥育 1 +x:1 +肥肉 1 +x:1 +丝织品 1 +x:1 +春兰 1 +x:1 +水产局 1 +x:1 +曲剧 1 +x:1 +莺歌燕舞 1 +x:1 +安全灯 1 +x:1 +褶 2 +x:2 +卫生衣 1 +x:1 +新风 1 +x:1 +希望 1 +x:1 +奎文区 1 +x:1 +天分 1 +x:1 +行李房 1 +x:1 +机械业 1 +x:1 +春去秋来 1 +x:1 +杨家乡 1 +x:1 +肺燥 1 +x:1 +相思树 1 +x:1 +养殖学 1 +x:1 +恐 23 +x:23 +鸭绒被 1 +x:1 +督导室 1 +x:1 +物探 1 +x:1 +山海关 1 +x:1 +独门独院 1 +x:1 +居民区 1 +x:1 +新米节 1 +x:1 +不求有功 1 +x:1 +平鲁区 1 +x:1 +竖起 1 +x:1 +肥胖 1 +x:1 +菽 2 +x:2 +煤体 1 +x:1 +振臂一呼 1 +x:1 +亚麻布 1 +x:1 +吃惊 1 +x:1 +庄 128 +x:128 +挑起 1 +x:1 +华章 1 +x:1 +神树 1 +x:1 +复议 1 +x:1 +夏枯草 1 +x:1 +准确度 1 +x:1 +电机系 1 +x:1 +长石岭 1 +x:1 +逛 72 +x:72 +局属 1 +x:1 +冲破 1 +x:1 +斑马线 1 +x:1 +挑战性 1 +x:1 +绥阳县 1 +x:1 +情报部 1 +x:1 +行腔 1 +x:1 +备勤 1 +x:1 +祖父 1 +x:1 +撩开 1 +x:1 +卫生裤 1 +x:1 +空无一人 1 +x:1 +幸福线 1 +x:1 +呈列 1 +x:1 +乏 11 +x:11 +胁从 1 +x:1 +葱郁 1 +x:1 +限值 1 +x:1 +滚热 1 +x:1 +机械人 1 +x:1 +滚烫 1 +x:1 +阿布哈兹 1 +x:1 +船龄 1 +x:1 +侠辣 1 +x:1 +血流如注 1 +x:1 +游乐业 1 +x:1 +危禁品 1 +x:1 +营盘 1 +x:1 +黄山市 1 +x:1 +备加 1 +x:1 +古脊椎 1 +x:1 +狗腿子 1 +x:1 +城东乡 1 +x:1 +急茬 1 +x:1 +帮接工 1 +x:1 +有长有短 1 +x:1 +祖率 1 +x:1 +农民战争 1 +x:1 +量度 1 +x:1 +探戈舞 1 +x:1 +归类 1 +x:1 +经济收益 1 +x:1 +揽客 1 +x:1 +协税 1 +x:1 +肺炎 1 +x:1 +罗湾村 1 +x:1 +成型法 1 +x:1 +典权 1 +x:1 +簌簌 1 +x:1 +拆散 1 +x:1 +军军 1 +x:1 +文学部 1 +x:1 +抱团 1 +x:1 +煤业 1 +x:1 +北师店乡 1 +x:1 +服务车 1 +x:1 +海港区 1 +x:1 +兼职 1 +x:1 +电磁学 1 +x:1 +壁 17 +x:17 +择医 1 +x:1 +苹果园 1 +x:1 +原著 1 +x:1 +花花点子 1 +x:1 +歌 341 +x:341 +天南星 1 +x:1 +阿约 1 +x:1 +蚕茧 1 +x:1 +战友情 1 +x:1 +大头小尾 1 +x:1 +东平湖 1 +x:1 +洗手袋 1 +x:1 +前仆后继 1 +x:1 +机制性 1 +x:1 +天南 1 +x:1 +应城 1 +x:1 +冲积 1 +x:1 +明正典刑 1 +x:1 +备受 1 +x:1 +馆子 1 +x:1 +刺议 1 +x:1 +贵冶 1 +x:1 +进球数 1 +x:1 +火花队 1 +x:1 +贬褒 1 +x:1 +土山 1 +x:1 +亚历山大 1 +x:1 +貌似 1 +x:1 +地图册 1 +x:1 +采样 1 +x:1 +断头 1 +x:1 +不道德 1 +x:1 +旋儿 1 +x:1 +恢复器 1 +x:1 +平平常常 1 +x:1 +择取 1 +x:1 +被打者 1 +x:1 +择友 1 +x:1 +政府法 1 +x:1 +五月 1 +x:1 +案 243 +x:243 +煤井 1 +x:1 +代乳粉 1 +x:1 +户籍地 1 +x:1 +野火 1 +x:1 +明慧 1 +x:1 +多劳多得 1 +x:1 +宁土勿腐 1 +x:1 +杭州 1 +x:1 +浔尾 1 +x:1 +中埠 1 +x:1 +费丹 1 +x:1 +澳方 1 +x:1 +苏联 1 +x:1 +博克兰 1 +x:1 +罗布麻 1 +x:1 +揽存 1 +x:1 +驻华 1 +x:1 +革故鼎新 1 +x:1 +储备局 1 +x:1 +凑集 1 +x:1 +罗平站 1 +x:1 +差异性 1 +x:1 +代市长 1 +x:1 +乌干达 1 +x:1 +双滦区 1 +x:1 +扑通 1 +x:1 +喘嘘嘘 1 +x:1 +牙病 1 +x:1 +溢彩 1 +x:1 +伎 1 +x:1 +一不做 1 +x:1 +冲突 1 +x:1 +聘 61 +x:61 +提出者 1 +x:1 +开门红 1 +x:1 +力 239 +x:239 +苦尽甜来 1 +x:1 +归罪 1 +x:1 +计 236 +x:236 +模拟法 1 +x:1 +猪食 1 +x:1 +座向 1 +x:1 +饼子 1 +x:1 +先行官 1 +x:1 +住宅房 1 +x:1 +没完 1 +x:1 +革命派 1 +x:1 +长途汽车 1 +x:1 +密信 1 +x:1 +建筑界 1 +x:1 +即墨 1 +x:1 +抻 5 +x:5 +中医界 1 +x:1 +施秉 1 +x:1 +牢骚 1 +x:1 +孙中山 1 +x:1 +东月湖 1 +x:1 +百业俱兴 1 +x:1 +巅 14 +x:14 +出版人 1 +x:1 +冷缩 1 +x:1 +主动型 1 +x:1 +建筑用 1 +x:1 +业师 1 +x:1 +防洪法 1 +x:1 +消费权 1 +x:1 +局座 1 +x:1 +起重 1 +x:1 +影调 1 +x:1 +翠鸟 1 +x:1 +煲 2 +x:2 +中队长 1 +x:1 +秀朴 1 +x:1 +平台式 1 +x:1 +长篇 1 +x:1 +牙疳 1 +x:1 +酒逢知己 1 +x:1 +乳牛 1 +x:1 +矿工服 1 +x:1 +物极必反 1 +x:1 +激励力 1 +x:1 +易 273 +x:273 +老头儿 1 +x:1 +金玉其外 1 +x:1 +富莱堡 1 +x:1 +城巴 1 +x:1 +冲程 1 +x:1 +粗粗拉拉 1 +x:1 +汪洋大海 1 +x:1 +长笛 1 +x:1 +顶呱呱 1 +x:1 +马那瓜 1 +x:1 +炮楼 1 +x:1 +密使 1 +x:1 +体貌 1 +x:1 +挡墙 1 +x:1 +诵 9 +x:9 +井壁 1 +x:1 +穿堂儿 1 +x:1 +店里 1 +x:1 +安培计 1 +x:1 +火力圈 1 +x:1 +花棍舞 1 +x:1 +靖江市 1 +x:1 +鸽市 1 +x:1 +肥西县 1 +x:1 +刀法 1 +x:1 +救险 1 +x:1 +横冲直闯 1 +x:1 +农管局 1 +x:1 +拟态 1 +x:1 +作梗 1 +x:1 +思维 1 +x:1 +主渠道 1 +x:1 +定罪 1 +x:1 +如皋市 1 +x:1 +出版业 1 +x:1 +丁字镐 1 +x:1 +实心实意 1 +x:1 +产棉省 1 +x:1 +国魂 1 +x:1 +党员 1 +x:1 +张新矿 1 +x:1 +黄牌警告 1 +x:1 +柔 16 +x:16 +地瓜秧 1 +x:1 +堂 63 +x:63 +耄耋 1 +x:1 +五方 1 +x:1 +击中要害 1 +x:1 +怪不得 1 +x:1 +世族 1 +x:1 +正直者 1 +x:1 +禁酒 1 +x:1 +撕 20 +x:20 +隽语 1 +x:1 +口述 1 +x:1 +救亡运动 1 +x:1 +助力 1 +x:1 +密件 1 +x:1 +神殿 1 +x:1 +急人所急 1 +x:1 +威迫 1 +x:1 +五保 1 +x:1 +典故 1 +x:1 +掸帚 1 +x:1 +鳞爪 1 +x:1 +仪式 1 +x:1 +密令 1 +x:1 +备付金 1 +x:1 +楚人 1 +x:1 +电控柜 1 +x:1 +抹黑 1 +x:1 +合久必分 1 +x:1 +捐助费 1 +x:1 +敬老爱老 1 +x:1 +超水平 1 +x:1 +六镇 1 +x:1 +单一论 1 +x:1 +采 108 +x:108 +升限 1 +x:1 +五时 1 +x:1 +贬词 1 +x:1 +天兵 1 +x:1 +天全 1 +x:1 +拐脖儿 1 +x:1 +主研人 1 +x:1 +给 5485 +x:5485 +升降 1 +x:1 +五日 1 +x:1 +鳞片 1 +x:1 +步行机 1 +x:1 +服务费 1 +x:1 +捞稻草 1 +x:1 +现场会 1 +x:1 +警察部 1 +x:1 +火卫一 1 +x:1 +天光 1 +x:1 +旋涡星云 1 +x:1 +原虫 1 +x:1 +唧唧喳喳 1 +x:1 +天元 1 +x:1 +技校队 1 +x:1 +辈数 1 +x:1 +世故 1 +x:1 +惩罚性 1 +x:1 +深宅大院 1 +x:1 +施教者 1 +x:1 +骆驼镇 1 +x:1 +公雉 1 +x:1 +晋宁县 1 +x:1 +归绥 1 +x:1 +行色 1 +x:1 +版权 1 +x:1 +锈蚀 1 +x:1 +环境署 1 +x:1 +锟 1 +x:1 +日用 1 +x:1 +葡萄糖 1 +x:1 +拿粗挟细 1 +x:1 +执行人 1 +x:1 +归结 1 +x:1 +菜霸 1 +x:1 +爱 960 +x:960 +裤腰带 1 +x:1 +雪溪图 1 +x:1 +昭昭 1 +x:1 +恒量 1 +x:1 +仪征 1 +x:1 +服务路 1 +x:1 +多此一举 1 +x:1 +吃掉 1 +x:1 +长空 1 +x:1 +羚羊 1 +x:1 +归纳 1 +x:1 +一户侯 1 +x:1 +木牌子 1 +x:1 +互联网页 1 +x:1 +半拉子 1 +x:1 +拥塞 1 +x:1 +那务镇 1 +x:1 +物性 1 +x:1 +行船 1 +x:1 +深灰 1 +x:1 +思翼 1 +x:1 +滚珠 1 +x:1 +陪酒 1 +x:1 +哪 343 +x:343 +稽查组 1 +x:1 +夜泊 1 +x:1 +武口 1 +x:1 +呵 46 +x:46 +版本 1 +x:1 +无话可说 1 +x:1 +助剂 1 +x:1 +限产压库 1 +x:1 +喜好 1 +x:1 +一溜烟 1 +x:1 +宝山区 1 +x:1 +功能钮 1 +x:1 +进水口 1 +x:1 +西六乡 1 +x:1 +决胜盘 1 +x:1 +香 143 +x:143 +朝鲜式 1 +x:1 +高歌猛进 1 +x:1 +爱上 1 +x:1 +应力 1 +x:1 +编选者 1 +x:1 +鳞甲 1 +x:1 +笔耕 1 +x:1 +产褥期 1 +x:1 +炳 1 +x:1 +最大者 1 +x:1 +信稿 1 +x:1 +机会 1 +x:1 +特困户 1 +x:1 +笔者 1 +x:1 +当空 1 +x:1 +旋动 1 +x:1 +肺痨 1 +x:1 +阿巴鸟 1 +x:1 +典型性 1 +x:1 +沟灌 1 +x:1 +纺织品 1 +x:1 +迥然不同 1 +x:1 +孚 2 +x:2 +尚集镇 1 +x:1 +书画厅 1 +x:1 +口袋 1 +x:1 +机位 1 +x:1 +水乡村 1 +x:1 +肺病 1 +x:1 +苗头 1 +x:1 +军刀 1 +x:1 +麦金利峰 1 +x:1 +蒲苇片 1 +x:1 +会员录 1 +x:1 +棉衣 1 +x:1 +隔膜感 1 +x:1 +机体 1 +x:1 +农艺师 1 +x:1 +蚕蛹 1 +x:1 +颗 297 +x:297 +洋财 1 +x:1 +各执一词 1 +x:1 +吸铁石 1 +x:1 +神气 1 +x:1 +鸡头梗 1 +x:1 +哀牢山 1 +x:1 +撷拾 1 +x:1 +棉袄 1 +x:1 +魂牵梦萦 1 +x:1 +荣立 1 +x:1 +阀座 1 +x:1 +审理 1 +x:1 +大面积 1 +x:1 +圆笼 1 +x:1 +妮 1 +x:1 +落矶山 1 +x:1 +棉被 1 +x:1 +自由市场 1 +x:1 +大林村 1 +x:1 +苦心经营 1 +x:1 +购置税 1 +x:1 +股票 1 +x:1 +排异性 1 +x:1 +物权 1 +x:1 +黄麻起义 1 +x:1 +讥笑 1 +x:1 +芬花芳蕾 1 +x:1 +西里村 1 +x:1 +机修 1 +x:1 +记叙 1 +x:1 +天国 1 +x:1 +拔地而起 1 +x:1 +华约 1 +x:1 +槎 3 +x:3 +裤腿 1 +x:1 +先导论 1 +x:1 +牟 25 +x:25 +保密法 1 +x:1 +稽查科 1 +x:1 +井底 1 +x:1 +井店 1 +x:1 +配电盘 1 +x:1 +带队 1 +x:1 +蚕蚁 1 +x:1 +棉裤 1 +x:1 +非交易所 1 +x:1 +应县 1 +x:1 +春分 1 +x:1 +明断 1 +x:1 +消费性 1 +x:1 +国际音标 1 +x:1 +美国籍 1 +x:1 +曲坛 1 +x:1 +乐丰村 1 +x:1 +公道 1 +x:1 +局委 1 +x:1 +机主 1 +x:1 +卤水 1 +x:1 +橡皮船 1 +x:1 +杭大 1 +x:1 +机上 1 +x:1 +精加工 1 +x:1 +新野 1 +x:1 +截 37 +x:37 +采油 1 +x:1 +多头管理 1 +x:1 +监示器 1 +x:1 +腰椎骨 1 +x:1 +输油管道 1 +x:1 +南开区 1 +x:1 +隔音墙 1 +x:1 +口角 1 +x:1 +蛮干 1 +x:1 +棉褥 1 +x:1 +明早 1 +x:1 +偃师市 1 +x:1 +溢于言表 1 +x:1 +晕色 1 +x:1 +明日 1 +x:1 +诏 1 +x:1 +公选 1 +x:1 +应召 1 +x:1 +兼营 1 +x:1 +电磁式 1 +x:1 +人心浮动 1 +x:1 +怨尤 1 +x:1 +填海区 1 +x:1 +街垒战 1 +x:1 +冷砸 1 +x:1 +卫生费 1 +x:1 +天坛 1 +x:1 +橡皮艇 1 +x:1 +应变 1 +x:1 +嗝儿 1 +x:1 +会期 1 +x:1 +铱 6 +x:6 +农合工 1 +x:1 +被盗 1 +x:1 +华容镇 1 +x:1 +经验主义 1 +x:1 +盐巴 1 +x:1 +〉 65 +x:65 +避难权 1 +x:1 +服务证 1 +x:1 +为数甚少 1 +x:1 +顶顶 1 +x:1 +户籍卡 1 +x:1 +枯饼 1 +x:1 +驾驶者 1 +x:1 +饮食疗法 1 +x:1 +小姨子 1 +x:1 +镇痛剂 1 +x:1 +油嘴滑舌 1 +x:1 +何谓 1 +x:1 +物质文明 1 +x:1 +梗直 1 +x:1 +挑衅 1 +x:1 +机井 1 +x:1 +永嘉县 1 +x:1 +要命 1 +x:1 +带露 1 +x:1 +行营 1 +x:1 +睿智 1 +x:1 +笔致 1 +x:1 +间接推理 1 +x:1 +菜园子 1 +x:1 +局外 1 +x:1 +机件 1 +x:1 +独立主义 1 +x:1 +春风满面 1 +x:1 +插箭节 1 +x:1 +阐发 1 +x:1 +华美 1 +x:1 +种子公司 1 +x:1 +三星级 1 +x:1 +原胶 1 +x:1 +起降 1 +x:1 +广域网 1 +x:1 +体词 1 +x:1 +一条龙 1 +x:1 +乘务组 1 +x:1 +热核武器 1 +x:1 +水果湖 1 +x:1 +舱体 1 +x:1 +世情 1 +x:1 +寓理于事 1 +x:1 +纲常 1 +x:1 +秀水村 1 +x:1 +憋闷 1 +x:1 +顾问 1 +x:1 +管电员 1 +x:1 +舱位 1 +x:1 +服务行 1 +x:1 +枕边风 1 +x:1 +月费 1 +x:1 +华籍 1 +x:1 +枫桥 1 +x:1 +启蒙运动 1 +x:1 +长方体 1 +x:1 +纫 1 +x:1 +冲线 1 +x:1 +阻滞 1 +x:1 +登机牌 1 +x:1 +机制板 1 +x:1 +寒暄语 1 +x:1 +望天树 1 +x:1 +纪律性 1 +x:1 +曲周 1 +x:1 +庄河 1 +x:1 +观察家 1 +x:1 +长翼 1 +x:1 +深痕 1 +x:1 +营火 1 +x:1 +拿走 1 +x:1 +押车 1 +x:1 +尊重 1 +x:1 +冻鸡 1 +x:1 +体表 1 +x:1 +速冻室 1 +x:1 +雨势 1 +x:1 +打下手 1 +x:1 +物料 1 +x:1 +防倒轮 1 +x:1 +步伐 1 +x:1 +亟须 1 +x:1 +利民之举 1 +x:1 +冲绳 1 +x:1 +电饭煲 1 +x:1 +长翎 1 +x:1 +原子能 1 +x:1 +白皮松 1 +x:1 +秀挺 1 +x:1 +记分 1 +x:1 +掸子 1 +x:1 +超临界 1 +x:1 +战阵 1 +x:1 +焊丝 1 +x:1 +筹措 1 +x:1 +名山事业 1 +x:1 +数易其稿 1 +x:1 +明摆着 1 +x:1 +节衣缩食 1 +x:1 +后八家村 1 +x:1 +夏令 1 +x:1 +夏代 1 +x:1 +笔芯 1 +x:1 +复兴路 1 +x:1 +备品 1 +x:1 +长缨 1 +x:1 +霹雳 1 +x:1 +璜 5 +x:5 +霹雷 1 +x:1 +富国兴邦 1 +x:1 +鸡内金 1 +x:1 +明昌 1 +x:1 +明明 1 +x:1 +长编 1 +x:1 +抱养 1 +x:1 +橡皮膏 1 +x:1 +刀梯 1 +x:1 +断简残编 1 +x:1 +席卷而来 1 +x:1 +明星 1 +x:1 +起锚 1 +x:1 +明晨 1 +x:1 +世态 1 +x:1 +排污者 1 +x:1 +艰苦卓绝 1 +x:1 +虚假 1 +x:1 +农会 1 +x:1 +募兵制 1 +x:1 +神湖 1 +x:1 +菲薄 1 +x:1 +明智 1 +x:1 +大家伙 1 +x:1 +盐度 1 +x:1 +明晰 1 +x:1 +杂事 1 +x:1 +苻 1 +x:1 +战例 1 +x:1 +印花布 1 +x:1 +爷儿俩 1 +x:1 +摧 5 +x:5 +釜山 1 +x:1 +出手 1 +x:1 +长武县 1 +x:1 +十四日 1 +x:1 +城阳区 1 +x:1 +体裁 1 +x:1 +兼融 1 +x:1 +浮山后 1 +x:1 +千红万紫 1 +x:1 +长线 1 +x:1 +饼干 1 +x:1 +口语 1 +x:1 +等值线 1 +x:1 +呼幺喝六 1 +x:1 +秀才 1 +x:1 +锦鳞 1 +x:1 +贬辞 1 +x:1 +歪歪扭扭 1 +x:1 +非金融 1 +x:1 +来宾席 1 +x:1 +酒埠江 1 +x:1 +口说 1 +x:1 +晓君 1 +x:1 +逆水行舟 1 +x:1 +建材业 1 +x:1 +归根到底 1 +x:1 +粳米 1 +x:1 +多方式 1 +x:1 +口诀 1 +x:1 +采收率 1 +x:1 +断裂面 1 +x:1 +极端主义 1 +x:1 +隈 1 +x:1 +口译 1 +x:1 +心功能 1 +x:1 +口试 1 +x:1 +八卦阵 1 +x:1 +勉 7 +x:7 +助困 1 +x:1 +长绳 1 +x:1 +早霜冻 1 +x:1 +红学界 1 +x:1 +饮料厂 1 +x:1 +当票 1 +x:1 +合唱团 1 +x:1 +外经贸 1 +x:1 +农事 1 +x:1 +阵痛期 1 +x:1 +蚕蔟 1 +x:1 +禁锢 1 +x:1 +择 28 +x:28 +怵头 1 +x:1 +机务处 1 +x:1 +农人 1 +x:1 +原色 1 +x:1 +农产 1 +x:1 +锡杖 1 +x:1 +千瓦时 1 +x:1 +不怕累 1 +x:1 +归程 1 +x:1 +屡屡 1 +x:1 +收秋 1 +x:1 +一路上 1 +x:1 +消费报 1 +x:1 +怡悦 1 +x:1 +运钞 1 +x:1 +井巷 1 +x:1 +收割机手 1 +x:1 +局子 1 +x:1 +服务观 1 +x:1 +驾驶舱 1 +x:1 +播种者 1 +x:1 +湖心岛 1 +x:1 +温故求新 1 +x:1 +明月 1 +x:1 +头高头低 1 +x:1 +推 253 +x:253 +国鸟 1 +x:1 +阵脚 1 +x:1 +禁闭 1 +x:1 +成材林 1 +x:1 +明朝 1 +x:1 +文学院 1 +x:1 +中青旅 1 +x:1 +炉瓦 1 +x:1 +挑战权 1 +x:1 +速生蝎 1 +x:1 +农专 1 +x:1 +农业 1 +x:1 +拔河 1 +x:1 +穹 4 +x:4 +大权独揽 1 +x:1 +绣房 1 +x:1 +纵令 1 +x:1 +飚 6 +x:6 +肺癌 1 +x:1 +爷儿们 1 +x:1 +谈判桌 1 +x:1 +筹拍 1 +x:1 +孝女 1 +x:1 +农丰 1 +x:1 +幽愤 1 +x:1 +十二分 1 +x:1 +房地产部 1 +x:1 +中国画理 1 +x:1 +地区 1 +x:1 +贝尔蒙 1 +x:1 +折扣票 1 +x:1 +应允 1 +x:1 +强的松 1 +x:1 +调职 1 +x:1 +鸽子笼 1 +x:1 +鼓励奖 1 +x:1 +采写 1 +x:1 +一箭之地 1 +x:1 +弹拨乐 1 +x:1 +治保会 1 +x:1 +资料费 1 +x:1 +增长 1 +x:1 +孟什维克 1 +x:1 +结膜 1 +x:1 +建筑体 1 +x:1 +平箩 1 +x:1 +师资 1 +x:1 +仅仅只 1 +x:1 +斜面 1 +x:1 +癔病 1 +x:1 +信报箱 1 +x:1 +常太镇 1 +x:1 +五建 1 +x:1 +巡航导弹 1 +x:1 +建造 1 +x:1 +显贵 1 +x:1 +视导员 1 +x:1 +铁面 1 +x:1 +曲轴箱 1 +x:1 +峭拔冷峻 1 +x:1 +烫洗店 1 +x:1 +神像 1 +x:1 +捐款箱 1 +x:1 +揽括 1 +x:1 +大屯村 1 +x:1 +厌弃 1 +x:1 +铣 2 +x:2 +频哪酮 1 +x:1 +汴水 1 +x:1 +罪 148 +x:148 +衰 20 +x:20 +聋子 1 +x:1 +雪白 1 +x:1 +犹疑 1 +x:1 +汤田中 1 +x:1 +废除 1 +x:1 +建部 1 +x:1 +五常 1 +x:1 +环视 1 +x:1 +貌似公正 1 +x:1 +即或 1 +x:1 +建都 1 +x:1 +五带 1 +x:1 +骨坏死 1 +x:1 +丰润县 1 +x:1 +模拟器 1 +x:1 +五帝 1 +x:1 +飘移 1 +x:1 +机率 1 +x:1 +平西府 1 +x:1 +结脉 1 +x:1 +宋祖 1 +x:1 +中和 1 +x:1 +经济部长 1 +x:1 +壁纸 1 +x:1 +量杯 1 +x:1 +岫山村 1 +x:1 +保健品厂 1 +x:1 +通缉 1 +x:1 +吹毛求疵 1 +x:1 +磁县都 1 +x:1 +瑶 17 +x:17 +丙寅 1 +x:1 +木讷 1 +x:1 +夙仇 1 +x:1 +阻值 1 +x:1 +煤矿 1 +x:1 +平等 1 +x:1 +自由词 1 +x:1 +摹山范水 1 +x:1 +采光 1 +x:1 +臀疣 1 +x:1 +密电 1 +x:1 +狗吠 1 +x:1 +不孕籽 1 +x:1 +镜头感 1 +x:1 +湖光塔影 1 +x:1 +汴河 1 +x:1 +鹤峰县 1 +x:1 +穷根究底 1 +x:1 +养殖户 1 +x:1 +环行 1 +x:1 +神农 1 +x:1 +五连冠 1 +x:1 +阻击 1 +x:1 +生还者 1 +x:1 +醋 12 +x:12 +攻其不备 1 +x:1 +通络 1 +x:1 +取笑 1 +x:1 +磁鼓 1 +x:1 +仓储 1 +x:1 +民盟 1 +x:1 +特拉维夫 1 +x:1 +隐身 1 +x:1 +结肠 1 +x:1 +吃零食 1 +x:1 +由此可知 1 +x:1 +兰西 1 +x:1 +拔剑 1 +x:1 +捐款站 1 +x:1 +高级神经 1 +x:1 +铁道部长 1 +x:1 +五律 1 +x:1 +风行草偃 1 +x:1 +典当 1 +x:1 +懒觉 1 +x:1 +棒状 1 +x:1 +木煤气 1 +x:1 +划一不二 1 +x:1 +次生林 1 +x:1 +通纂 1 +x:1 +信教 1 +x:1 +柬王国 1 +x:1 +变形虫 1 +x:1 +自由诗 1 +x:1 +迟 376 +x:376 +在天有灵 1 +x:1 +消费层 1 +x:1 +新坝镇 1 +x:1 +感闻 1 +x:1 +勘误 1 +x:1 +野葡萄 1 +x:1 +通约 1 +x:1 +毁灭 1 +x:1 +通红 1 +x:1 +淳 4 +x:4 +痛哭 1 +x:1 +永世长存 1 +x:1 +一级品 1 +x:1 +软和 1 +x:1 +局方 1 +x:1 +电排站 1 +x:1 +小品文 1 +x:1 +明天 1 +x:1 +澳州 1 +x:1 +黄山松 1 +x:1 +园后 1 +x:1 +寿辰 1 +x:1 +寿诞 1 +x:1 +昭通市 1 +x:1 +梦语 1 +x:1 +张湾镇 1 +x:1 +冠 56 +x:56 +载重量 1 +x:1 +神儿 1 +x:1 +平稳 1 +x:1 +贵会 1 +x:1 +明处 1 +x:1 +梦话 1 +x:1 +年年岁岁 1 +x:1 +乒乓球 1 +x:1 +调入地 1 +x:1 +吹 203 +x:203 +探寻 1 +x:1 +出版界 1 +x:1 +不置可否 1 +x:1 +臀 1 +x:1 +太仓市 1 +x:1 +怀想 1 +x:1 +承包权 1 +x:1 +装检团 1 +x:1 +不见经传 1 +x:1 +场内外 1 +x:1 +凉风 1 +x:1 +户拥有率 1 +x:1 +新浦区 1 +x:1 +万木争翠 1 +x:1 +十六中 1 +x:1 +善良 1 +x:1 +大世界 1 +x:1 +贩运 1 +x:1 +扭 36 +x:36 +铁姑娘 1 +x:1 +天母 1 +x:1 +决议 1 +x:1 +红薯面 1 +x:1 +学以致用 1 +x:1 +限产 1 +x:1 +取码 1 +x:1 +虽然 1 +x:1 +神功 1 +x:1 +机焦 1 +x:1 +五岳 1 +x:1 +表面 1 +x:1 +明媒正娶 1 +x:1 +掌握者 1 +x:1 +衮州 1 +x:1 +倾销地 1 +x:1 +煤田 1 +x:1 +备案 1 +x:1 +日见增多 1 +x:1 +居民楼 1 +x:1 +浑然不知 1 +x:1 +十四大 1 +x:1 +明媚 1 +x:1 +白干儿 1 +x:1 +奖惩制 1 +x:1 +结莎 1 +x:1 +不成文法 1 +x:1 +小关路口 1 +x:1 +调色 1 +x:1 +涵盖面 1 +x:1 +模式论 1 +x:1 +主页 1 +x:1 +采取 1 +x:1 +旅 185 +x:185 +江华县 1 +x:1 +么 34 +x:34 +困窘 1 +x:1 +指头 1 +x:1 +可供热率 1 +x:1 +聋女 1 +x:1 +开罗 1 +x:1 +虞城 1 +x:1 +天桥 1 +x:1 +神勇 1 +x:1 +平移 1 +x:1 +暂且 1 +x:1 +开罪 1 +x:1 +板角 1 +x:1 +酸碱度 1 +x:1 +变样 1 +x:1 +泼妇 1 +x:1 +小家鼠 1 +x:1 +居住地 1 +x:1 +水化物 1 +x:1 +世局 1 +x:1 +花明楼镇 1 +x:1 +定性 1 +x:1 +世居 1 +x:1 +园圃 1 +x:1 +世风日下 1 +x:1 +蓝剑队 1 +x:1 +新郑 1 +x:1 +天梯 1 +x:1 +紧追权 1 +x:1 +决裂 1 +x:1 +总府 1 +x:1 +峰顶 1 +x:1 +英国式 1 +x:1 +扬眉万里 1 +x:1 +计生办 1 +x:1 +采区 1 +x:1 +共计 1 +x:1 +五小 1 +x:1 +参加者 1 +x:1 +园地 1 +x:1 +一府两院 1 +x:1 +废钢 1 +x:1 +路经 1 +x:1 +牛仔服 1 +x:1 +废铜 1 +x:1 +母子团 1 +x:1 +冰糖葫芦 1 +x:1 +共诛 1 +x:1 +姨母 1 +x:1 +共话 1 +x:1 +隔音板 1 +x:1 +养鹿场 1 +x:1 +曲梁 1 +x:1 +共识 1 +x:1 +助正 1 +x:1 +盒子枪 1 +x:1 +释怀 1 +x:1 +立陶宛 1 +x:1 +废铁 1 +x:1 +结荚 1 +x:1 +天棚 1 +x:1 +仓卒 1 +x:1 +诡辩式 1 +x:1 +仓单 1 +x:1 +物外 1 +x:1 +新人王 1 +x:1 +一文不名 1 +x:1 +怂 1 +x:1 +保障性 1 +x:1 +采办 1 +x:1 +操控 1 +x:1 +耿饼 1 +x:1 +个人化 1 +x:1 +版心 1 +x:1 +村公所 1 +x:1 +八宿县 1 +x:1 +整齐划一 1 +x:1 +盲女 1 +x:1 +自强不息 1 +x:1 +嗜砚者 1 +x:1 +煤球 1 +x:1 +希少 1 +x:1 +结节 1 +x:1 +豪商巨贾 1 +x:1 +肖像画 1 +x:1 +风卷残云 1 +x:1 +聂 84 +x:84 +神户市 1 +x:1 +毁版 1 +x:1 +肠骨 1 +x:1 +孺子可数 1 +x:1 +调控者 1 +x:1 +评议票 1 +x:1 +初赛 1 +x:1 +别有见地 1 +x:1 +拉动型 1 +x:1 +铱星 1 +x:1 +北京路 1 +x:1 +裙带菜 1 +x:1 +机灵 1 +x:1 +王公 1 +x:1 +恪信 1 +x:1 +路网 1 +x:1 +咨文 1 +x:1 +神台 1 +x:1 +耐人玩味 1 +x:1 +赴 607 +x:607 +园囿 1 +x:1 +藤 14 +x:14 +元/户 1 +x:1 +光芒四射 1 +x:1 +机炮 1 +x:1 +腕骨 1 +x:1 +加油量 1 +x:1 +依此类推 1 +x:1 +善者 1 +x:1 +脊神经 1 +x:1 +神化 1 +x:1 +高架道路 1 +x:1 +顶视图 1 +x:1 +缄口结舌 1 +x:1 +雄图 1 +x:1 +巨龙头 1 +x:1 +拷纱 1 +x:1 +丝光布 1 +x:1 +神医 1 +x:1 +筹委会 1 +x:1 +饭店业 1 +x:1 +没戏 1 +x:1 +梦见 1 +x:1 +脏话 1 +x:1 +松散层 1 +x:1 +曼苏里 1 +x:1 +权 359 +x:359 +秘籍 1 +x:1 +经济账 1 +x:1 +救治金 1 +x:1 +肺脓肿 1 +x:1 +微结构 1 +x:1 +损兵折将 1 +x:1 +肝炎病 1 +x:1 +约贝州 1 +x:1 +筹建 1 +x:1 +佃租 1 +x:1 +版式 1 +x:1 +释愁 1 +x:1 +直通式 1 +x:1 +拷绸 1 +x:1 +尚俭去奢 1 +x:1 +雾岚 1 +x:1 +样稿 1 +x:1 +轮盘 1 +x:1 +娇娆 1 +x:1 +接修部 1 +x:1 +翼 15 +x:15 +有的是 1 +x:1 +银耳 1 +x:1 +棱柱体 1 +x:1 +渔农业 1 +x:1 +绣帕 1 +x:1 +园内 1 +x:1 +刀刃 1 +x:1 +革命化 1 +x:1 +中青年 1 +x:1 +炉体 1 +x:1 +通篇 1 +x:1 +标准公顷 1 +x:1 +摇鹅毛扇 1 +x:1 +在编 1 +x:1 +2 1688 +x:1688 +木轮 1 +x:1 +跋山涉水 1 +x:1 +木车 1 +x:1 +驾驭力 1 +x:1 +香芋丝 1 +x:1 +捐钱者 1 +x:1 +昏头转向 1 +x:1 +拟建 1 +x:1 +盲干 1 +x:1 +祖产 1 +x:1 +苍穹 1 +x:1 +筹备 1 +x:1 +秀女 1 +x:1 +碾碎 1 +x:1 +丝绸之路 1 +x:1 +督考团 1 +x:1 +仪态 1 +x:1 +荧光 1 +x:1 +存包处 1 +x:1 +佚文 1 +x:1 +舷 2 +x:2 +阿布贾 1 +x:1 +蔬菜局 1 +x:1 +勾通 1 +x:1 +五星级 1 +x:1 +锡山 1 +x:1 +白日梦 1 +x:1 +刀山剑林 1 +x:1 +编织业 1 +x:1 +神品 1 +x:1 +蹦迪 1 +x:1 +隐语 1 +x:1 +麻店村 1 +x:1 +兰谱 1 +x:1 +智能 1 +x:1 +事故率 1 +x:1 +开票 1 +x:1 +涤瑕荡秽 1 +x:1 +面如土色 1 +x:1 +深信 1 +x:1 +报晓 1 +x:1 +派出所长 1 +x:1 +五嫂 1 +x:1 +迸发 1 +x:1 +开禁 1 +x:1 +横祸 1 +x:1 +喉擦音 1 +x:1 +平缓 1 +x:1 +东平县 1 +x:1 +农畜 1 +x:1 +调蓄 1 +x:1 +南蛮子 1 +x:1 +参 51 +x:51 +长幼有序 1 +x:1 +没收 1 +x:1 +抱歉 1 +x:1 +祖业 1 +x:1 +酪素 1 +x:1 +路碑 1 +x:1 +环路 1 +x:1 +半遮半掩 1 +x:1 +俄亥俄州 1 +x:1 +抢断王 1 +x:1 +些微 1 +x:1 +中唱 1 +x:1 +环跳 1 +x:1 +首发式 1 +x:1 +评定证 1 +x:1 +滔滔不绝 1 +x:1 +钼矿 1 +x:1 +壁立 1 +x:1 +公告书 1 +x:1 +舒坦 1 +x:1 +港湾式 1 +x:1 +中文机 1 +x:1 +板车 1 +x:1 +边带 1 +x:1 +汴梁 1 +x:1 +评议组 1 +x:1 +革命史 1 +x:1 +针头线脑 1 +x:1 +农田 1 +x:1 +磨 65 +x:65 +素馨花 1 +x:1 +杨柳风 1 +x:1 +警世之作 1 +x:1 +感情用事 1 +x:1 +漂离 1 +x:1 +情节化 1 +x:1 +即景 1 +x:1 +雪里红 1 +x:1 +油母页岩 1 +x:1 +民政办 1 +x:1 +政府军 1 +x:1 +筹委 1 +x:1 +农用 1 +x:1 +深井 1 +x:1 +樊 59 +x:59 +学习日 1 +x:1 +至上 1 +x:1 +渔鼓词 1 +x:1 +取缔 1 +x:1 +共谋 1 +x:1 +尼龙 1 +x:1 +马尔凯 1 +x:1 +胡麻 1 +x:1 +互励 1 +x:1 +脸颊 1 +x:1 +至为 1 +x:1 +平纹 1 +x:1 +美发店 1 +x:1 +五官 1 +x:1 +人事厅 1 +x:1 +群山起伏 1 +x:1 +打假保真 1 +x:1 +深交 1 +x:1 +天漏 1 +x:1 +案语 1 +x:1 +圣埃蒂安 1 +x:1 +教练组 1 +x:1 +贝加尔湖 1 +x:1 +叶鞘 1 +x:1 +月城镇 1 +x:1 +层报 1 +x:1 +平绒 1 +x:1 +培养费 1 +x:1 +直瞪瞪 1 +x:1 +唐家会村 1 +x:1 +撩拨 1 +x:1 +荣归故里 1 +x:1 +立案庭 1 +x:1 +西里西亚 1 +x:1 +卤味 1 +x:1 +挡板 1 +x:1 +阴暗处 1 +x:1 +聋哑人 1 +x:1 +批办制 1 +x:1 +孤芳自赏 1 +x:1 +澳头 1 +x:1 +连衣裙 1 +x:1 +明州 1 +x:1 +纸筒 1 +x:1 +茶陵县 1 +x:1 +即期 1 +x:1 +汛情 1 +x:1 +带状林 1 +x:1 +送气量 1 +x:1 +复谈 1 +x:1 +罚款率 1 +x:1 +至于 1 +x:1 +进修部 1 +x:1 +纸箱 1 +x:1 +彩色片 1 +x:1 +阴毒 1 +x:1 +东河南镇 1 +x:1 +楠竹 1 +x:1 +助民 1 +x:1 +老婆子 1 +x:1 +玛滩镇 1 +x:1 +莱西 1 +x:1 +资金户 1 +x:1 +理念层 1 +x:1 +枫叶 1 +x:1 +美发师 1 +x:1 +增值 1 +x:1 +深中 1 +x:1 +纸箔 1 +x:1 +至交 1 +x:1 +初试 1 +x:1 +不多时 1 +x:1 +回马枪 1 +x:1 +遛弯儿 1 +x:1 +开磅 1 +x:1 +声韵学 1 +x:1 +刀叉 1 +x:1 +血亏 1 +x:1 +初评 1 +x:1 +初识 1 +x:1 +临沭 1 +x:1 +涵养区 1 +x:1 +蹦蹦 1 +x:1 +转眼间 1 +x:1 +肖厝 1 +x:1 +初诊 1 +x:1 +刀口 1 +x:1 +民政厅 1 +x:1 +地矿部 1 +x:1 +南安普敦 1 +x:1 +衬垫 1 +x:1 +队形 1 +x:1 +秦风 1 +x:1 +纸篓 1 +x:1 +总局长 1 +x:1 +直属处 1 +x:1 +压卷之作 1 +x:1 +路程 1 +x:1 +楚王 1 +x:1 +骶骨 1 +x:1 +挚情 1 +x:1 +曲江 1 +x:1 +枯叶蛾 1 +x:1 +天水 1 +x:1 +乱送 1 +x:1 +橡胶板 1 +x:1 +剑戟 1 +x:1 +对局 1 +x:1 +机电 1 +x:1 +凌厉感 1 +x:1 +崇文门 1 +x:1 +毁真 1 +x:1 +酸软 1 +x:1 +纽结 1 +x:1 +天气 1 +x:1 +辱 9 +x:9 +商业部 1 +x:1 +曲池 1 +x:1 +爸 22 +x:22 +问长问短 1 +x:1 +唬人 1 +x:1 +滂沱大雨 1 +x:1 +拉动力 1 +x:1 +天汽 1 +x:1 +江湖骗子 1 +x:1 +金盏花 1 +x:1 +革命党 1 +x:1 +复印社 1 +x:1 +镰刀 1 +x:1 +纽约 1 +x:1 +审价 1 +x:1 +天池 1 +x:1 +问候信 1 +x:1 +寿衣 1 +x:1 +曲水 1 +x:1 +希奇 1 +x:1 +初衷 1 +x:1 +定向天线 1 +x:1 +飞潜动植 1 +x:1 +大小便 1 +x:1 +惯 58 +x:58 +雷庄村 1 +x:1 +余姚 1 +x:1 +笤帚 1 +x:1 +秤盘 1 +x:1 +滚滚圆 1 +x:1 +装车 1 +x:1 +钩儿 1 +x:1 +门类 1 +x:1 +避难层 1 +x:1 +子实 1 +x:1 +革命军 1 +x:1 +笔记本 1 +x:1 +勤杂人员 1 +x:1 +纪念辑 1 +x:1 +扎达县 1 +x:1 +出版物 1 +x:1 +浮夸风 1 +x:1 +州里 1 +x:1 +装潢业 1 +x:1 +植胶 1 +x:1 +装载 1 +x:1 +通票 1 +x:1 +正向 1 +x:1 +天沟 1 +x:1 +没有 1 +x:1 +饥饿感 1 +x:1 +精囊 1 +x:1 +有偿性 1 +x:1 +免战牌 1 +x:1 +开箱 1 +x:1 +自动化所 1 +x:1 +忽而 1 +x:1 +夏盔 1 +x:1 +个头 1 +x:1 +扩资 1 +x:1 +抱残守缺 1 +x:1 +备注 1 +x:1 +开篇 1 +x:1 +汇 98 +x:98 +原棉 1 +x:1 +太极拳 1 +x:1 +槌 3 +x:3 +货币量 1 +x:1 +忧患与共 1 +x:1 +敌阵 1 +x:1 +彼岸 1 +x:1 +庄员 1 +x:1 +稗子 1 +x:1 +天波 1 +x:1 +明年 1 +x:1 +路端 1 +x:1 +垂丝柳 1 +x:1 +惊喜交集 1 +x:1 +自封 1 +x:1 +横笛 1 +x:1 +女色 1 +x:1 +百卉吐艳 1 +x:1 +拟就 1 +x:1 +神器 1 +x:1 +斜拉桥 1 +x:1 +歹话 1 +x:1 +断然 1 +x:1 +皇宫戏 1 +x:1 +新穴 1 +x:1 +病理性 1 +x:1 +辉腾锡勒 1 +x:1 +决赛 1 +x:1 +流沙量 1 +x:1 +赔偿 1 +x:1 +丁零声 1 +x:1 +支前 1 +x:1 +邦长 1 +x:1 +星夜 1 +x:1 +神经质 1 +x:1 +斗 67 +x:67 +外交大臣 1 +x:1 +天津 1 +x:1 +科摩罗 1 +x:1 +钓友 1 +x:1 +隔膜 1 +x:1 +渔歌唱晚 1 +x:1 +艾绒 1 +x:1 +职员会 1 +x:1 +机管局 1 +x:1 +一文不值 1 +x:1 +一番 1 +x:1 +自作主张 1 +x:1 +麻利儿 1 +x:1 +红人 1 +x:1 +喷 32 +x:32 +医卫组 1 +x:1 +绳索 1 +x:1 +移师 1 +x:1 +木豆 1 +x:1 +刀儿 1 +x:1 +误区 1 +x:1 +纸票 1 +x:1 +明快 1 +x:1 +休闲化 1 +x:1 +煤火 1 +x:1 +整险 1 +x:1 +夏眠 1 +x:1 +悍然 1 +x:1 +香水梨 1 +x:1 +晖 48 +x:48 +流水线 1 +x:1 +释文 1 +x:1 +湖泗乡 1 +x:1 +煤灰 1 +x:1 +犬牙 1 +x:1 +牡技 1 +x:1 +水准仪 1 +x:1 +嫩 13 +x:13 +五委 1 +x:1 +下巴颏儿 1 +x:1 +即时 1 +x:1 +输尿管 1 +x:1 +副翼 1 +x:1 +刀具 1 +x:1 +刀兵 1 +x:1 +翻 258 +x:258 +即日 1 +x:1 +登山队员 1 +x:1 +煤炭 1 +x:1 +胞兄弟 1 +x:1 +舱盖 1 +x:1 +加扎省 1 +x:1 +楚汉相争 1 +x:1 +软骨素 1 +x:1 +开窍 1 +x:1 +开窗 1 +x:1 +天涯 1 +x:1 +五大 1 +x:1 +大包大揽 1 +x:1 +阿比让港 1 +x:1 +捆绑式 1 +x:1 +蓄水量 1 +x:1 +国际裁判 1 +x:1 +煤炉 1 +x:1 +法制 1 +x:1 +灞水 1 +x:1 +江油市 1 +x:1 +脯 1 +x:1 +功名榜 1 +x:1 +行乞业 1 +x:1 +东洋车 1 +x:1 +神圣 1 +x:1 +二流子 1 +x:1 +蛇形 1 +x:1 +怀柔县 1 +x:1 +海鲜楼 1 +x:1 +神坛 1 +x:1 +大中小 1 +x:1 +隐衷 1 +x:1 +观察所 1 +x:1 +诈 6 +x:6 +主人公 1 +x:1 +不谙世事 1 +x:1 +华池村 1 +x:1 +原索动物 1 +x:1 +鸡飞蛋打 1 +x:1 +初见 1 +x:1 +吏人 1 +x:1 +乱采 1 +x:1 +秀媚 1 +x:1 +血书 1 +x:1 +陡 34 +x:34 +释放 1 +x:1 +大村镇 1 +x:1 +开端 1 +x:1 +话数站 1 +x:1 +煤烟 1 +x:1 +隐血 1 +x:1 +昨天 1 +x:1 +初解 1 +x:1 +棒球 1 +x:1 +晨练 1 +x:1 +刀凿 1 +x:1 +刀币 1 +x:1 +剪纸 1 +x:1 +农科 1 +x:1 +中南区 1 +x:1 +十二日 1 +x:1 +【 2 +x:2 +十字街村 1 +x:1 +披垂感 1 +x:1 +当中 1 +x:1 +缩头缩脑 1 +x:1 +十二时 1 +x:1 +舜 1 +x:1 +黑沉沉 1 +x:1 +魔术队 1 +x:1 +天成 1 +x:1 +当世 1 +x:1 +多数党 1 +x:1 +当下 1 +x:1 +月弯街 1 +x:1 +腌法 1 +x:1 +穷家富路 1 +x:1 +激励性 1 +x:1 +一助一 1 +x:1 +侮辱 1 +x:1 +扬眉捋须 1 +x:1 +阐明 1 +x:1 +央告 1 +x:1 +善诈 1 +x:1 +分期付款 1 +x:1 +不可靠性 1 +x:1 +疰夏 1 +x:1 +僧人 1 +x:1 +备战 1 +x:1 +伴郎 1 +x:1 +兰考 1 +x:1 +世态百味 1 +x:1 +农丰里 1 +x:1 +哈雷彗星 1 +x:1 +位列前茅 1 +x:1 +干冰 1 +x:1 +澳联社 1 +x:1 +狗岛 1 +x:1 +农民协会 1 +x:1 +宝山村 1 +x:1 +虎啸 1 +x:1 +冬作物 1 +x:1 +阉人 1 +x:1 +叹词 1 +x:1 +五四 1 +x:1 +草鸡蛋 1 +x:1 +市编委 1 +x:1 +弯度 1 +x:1 +货运 1 +x:1 +国产化率 1 +x:1 +油基 1 +x:1 +稳步前进 1 +x:1 +稳健 1 +x:1 +黄巢起义 1 +x:1 +宾 4 +x:4 +催吐剂 1 +x:1 +呈报 1 +x:1 +鞭炮 1 +x:1 +养蝎场 1 +x:1 +银蝶 1 +x:1 +狗屁 1 +x:1 +铁丝网 1 +x:1 +创业维艰 1 +x:1 +秤砣 1 +x:1 +同屋 1 +x:1 +荣任 1 +x:1 +排气型 1 +x:1 +为时过晚 1 +x:1 +目无国法 1 +x:1 +神堂 1 +x:1 +阿佤 1 +x:1 +机箱 1 +x:1 +分赛场 1 +x:1 +废麻 1 +x:1 +大快人心 1 +x:1 +同声相应 1 +x:1 +乱麻 1 +x:1 +阻塞 1 +x:1 +浅析 1 +x:1 +当事 1 +x:1 +出色 1 +x:1 +建井处 1 +x:1 +石羊河 1 +x:1 +拦网奖 1 +x:1 +一部分 1 +x:1 +疾 7 +x:7 +屡次 1 +x:1 +废黜 1 +x:1 +木莲 1 +x:1 +曲折 1 +x:1 +心浮气动 1 +x:1 +应景 1 +x:1 +舒城县 1 +x:1 +候机者 1 +x:1 +肖店 1 +x:1 +当代 1 +x:1 +落汤鸡 1 +x:1 +三桥村 1 +x:1 +拟制 1 +x:1 +赫然而怒 1 +x:1 +物化 1 +x:1 +当今 1 +x:1 +作业点 1 +x:1 +缓降器 1 +x:1 +纸盒 1 +x:1 +胳肢窝儿 1 +x:1 +盲动 1 +x:1 +阿 1 +x:1 +开球 1 +x:1 +安民告示 1 +x:1 +虚构 1 +x:1 +馋 14 +x:14 +衬字 1 +x:1 +通盘 1 +x:1 +小铲 1 +x:1 +车头 1 +x:1 +购书人 1 +x:1 +业 140 +x:140 +源流同清 1 +x:1 +总量性 1 +x:1 +僧俗 1 +x:1 +政论 1 +x:1 +肖形 1 +x:1 +屋子 1 +x:1 +支教 1 +x:1 +女足 1 +x:1 +绣品 1 +x:1 +百分之百 1 +x:1 +当众 1 +x:1 +拍案而起 1 +x:1 +一吐为快 1 +x:1 +荧屏 1 +x:1 +路由 1 +x:1 +木船 1 +x:1 +葡萄串 1 +x:1 +共聚 1 +x:1 +秋田县 1 +x:1 +锡兰 1 +x:1 +不孕症 1 +x:1 +拟压 1 +x:1 +以观后效 1 +x:1 +巴拉丁山 1 +x:1 +枭雄 1 +x:1 +观察法 1 +x:1 +田字草 1 +x:1 +曲高和众 1 +x:1 +变温层 1 +x:1 +杨柳镇 1 +x:1 +当作 1 +x:1 +佳妙无双 1 +x:1 +盘中餐 1 +x:1 +居民户 1 +x:1 +生命力者 1 +x:1 +人造石油 1 +x:1 +智者 1 +x:1 +分洪道 1 +x:1 +有名有实 1 +x:1 +忠奸分明 1 +x:1 +大小凉山 1 +x:1 +白云石 1 +x:1 +踅 1 +x:1 +女贞 1 +x:1 +柳叶眉 1 +x:1 +善言 1 +x:1 +北郊区 1 +x:1 +明儿 1 +x:1 +发包方 1 +x:1 +办证 1 +x:1 +唯利唯金 1 +x:1 +微词 1 +x:1 +夏种 1 +x:1 +共育 1 +x:1 +湮灭 1 +x:1 +调解 1 +x:1 +挂号费 1 +x:1 +蜜饯 1 +x:1 +肠道 1 +x:1 +塔西南 1 +x:1 +公信力 1 +x:1 +尹 163 +x:163 +商业 1 +x:1 +总医院 1 +x:1 +园居 1 +x:1 +农研 1 +x:1 +检查门 1 +x:1 +横琴 1 +x:1 +败血症 1 +x:1 +败血病 1 +x:1 +销售科 1 +x:1 +鹅黄色 1 +x:1 +有感而发 1 +x:1 +平版 1 +x:1 +希图 1 +x:1 +摇摆舞 1 +x:1 +王子型 1 +x:1 +弯弓 1 +x:1 +积金 1 +x:1 +神奇 1 +x:1 +淘粪者 1 +x:1 +典型 1 +x:1 +不失时机 1 +x:1 +计生委 1 +x:1 +增储上产 1 +x:1 +大安山乡 1 +x:1 +神女 1 +x:1 +巴伦西亚 1 +x:1 +针针 1 +x:1 +冠状动脉 1 +x:1 +社里 1 +x:1 +弃权票 1 +x:1 +播洒 1 +x:1 +开云见日 1 +x:1 +模拟式 1 +x:1 +狗崽 1 +x:1 +舒婉 1 +x:1 +结论 1 +x:1 +仓容 1 +x:1 +欠缺型 1 +x:1 +通病 1 +x:1 +期终 1 +x:1 +缎 2 +x:2 +御花园 1 +x:1 +布雷 1 +x:1 +刀尖 1 +x:1 +限作 1 +x:1 +抛 97 +x:97 +聋儿 1 +x:1 +天性 1 +x:1 +吃剩 1 +x:1 +版图 1 +x:1 +招法 1 +x:1 +蔽体 1 +x:1 +民政局 1 +x:1 +感性认识 1 +x:1 +思想史 1 +x:1 +周三 1 +x:1 +淋漓尽致 1 +x:1 +海堤围 1 +x:1 +享受期 1 +x:1 +操作者 1 +x:1 +归位 1 +x:1 +不唯书 1 +x:1 +开眼 1 +x:1 +详文 1 +x:1 +贾鲁河 1 +x:1 +花棚 1 +x:1 +白鹿原 1 +x:1 +繁殖场 1 +x:1 +繁殖地 1 +x:1 +国家税 1 +x:1 +浪花 1 +x:1 +不唯上 1 +x:1 +自修 1 +x:1 +创编者 1 +x:1 +结语 1 +x:1 +网球手 1 +x:1 +电容器 1 +x:1 +苛 1 +x:1 +机制化 1 +x:1 +啦啦队 1 +x:1 +工 137 +x:137 +提笔 1 +x:1 +东便门 1 +x:1 +善解 1 +x:1 +胜芳镇 1 +x:1 +挂件 1 +x:1 +嫉贤妒能 1 +x:1 +墨尔本市 1 +x:1 +银白杨 1 +x:1 +艳史 1 +x:1 +结识 1 +x:1 +挂任 1 +x:1 +中低产田 1 +x:1 +决胜 1 +x:1 +植胶国 1 +x:1 +磁针 1 +x:1 +年光 1 +x:1 +盛赞 1 +x:1 +隐蔽 1 +x:1 +防不胜防 1 +x:1 +饕餮 1 +x:1 +军命 1 +x:1 +支取 1 +x:1 +神威 1 +x:1 +年兄 1 +x:1 +平平齐齐 1 +x:1 +扭亏解困 1 +x:1 +机械系 1 +x:1 +磁钢 1 +x:1 +双眼皮 1 +x:1 +思亲 1 +x:1 +互质数 1 +x:1 +消费型 1 +x:1 +工作部 1 +x:1 +一晃儿 1 +x:1 +三都镇 1 +x:1 +救世军 1 +x:1 +土砖房 1 +x:1 +亢进 1 +x:1 +磁铁 1 +x:1 +体能型 1 +x:1 +狗市 1 +x:1 +复员费 1 +x:1 +脸面 1 +x:1 +经作站 1 +x:1 +五味 1 +x:1 +大子儿 1 +x:1 +吃力 1 +x:1 +金绿 1 +x:1 +归侨 1 +x:1 +扣篮王 1 +x:1 +网球拍 1 +x:1 +燃动局 1 +x:1 +机种 1 +x:1 +兰花 1 +x:1 +通用 1 +x:1 +十二月 1 +x:1 +人事局 1 +x:1 +加热炉 1 +x:1 +查血钾 1 +x:1 +香蕉园 1 +x:1 +铁锨 1 +x:1 +头发菜 1 +x:1 +吃劲 1 +x:1 +开矿 1 +x:1 +锡匠 1 +x:1 +较 2957 +x:2957 +察哈尔省 1 +x:1 +砂石料 1 +x:1 +憔悴 1 +x:1 +虚文 1 +x:1 +投入品 1 +x:1 +慈善会 1 +x:1 +年关 1 +x:1 +平炉 1 +x:1 +核子能 1 +x:1 +贷款 1 +x:1 +猪鬃 1 +x:1 +兰草 1 +x:1 +执政权 1 +x:1 +神宇 1 +x:1 +阻寒 1 +x:1 +荧幕 1 +x:1 +锁业 1 +x:1 +土特产品 1 +x:1 +稚童 1 +x:1 +跳跃性 1 +x:1 +年过半百 1 +x:1 +渠县 1 +x:1 +蔬菜区 1 +x:1 +物像 1 +x:1 +壁画 1 +x:1 +无人问津 1 +x:1 +舒声 1 +x:1 +化学工业 1 +x:1 +吃喝费 1 +x:1 +备感 1 +x:1 +木耳 1 +x:1 +演艺会 1 +x:1 +团组织 1 +x:1 +蒸气机 1 +x:1 +仙 5 +x:5 +明史 1 +x:1 +走过场 1 +x:1 +板胡 1 +x:1 +站站 1 +x:1 +发包权 1 +x:1 +船期费 1 +x:1 +密纹 1 +x:1 +毫 3 +x:3 +虚无 1 +x:1 +卖身投靠 1 +x:1 +倡廉 1 +x:1 +蕴 1 +x:1 +密约 1 +x:1 +腊八粥 1 +x:1 +头疼脑热 1 +x:1 +小燕子 1 +x:1 +宰相 1 +x:1 +出版署 1 +x:1 +希特勒 1 +x:1 +版块 1 +x:1 +无名小卒 1 +x:1 +蠕滑力 1 +x:1 +工作量 1 +x:1 +援助者 1 +x:1 +移动 1 +x:1 +海堤坝 1 +x:1 +调试 1 +x:1 +助战 1 +x:1 +晓悟 1 +x:1 +花梗 1 +x:1 +煤粉 1 +x:1 +川棉 1 +x:1 +冠名权 1 +x:1 +单行本 1 +x:1 +团体性 1 +x:1 +榴霰弹 1 +x:1 +善行 1 +x:1 +唯金牌论 1 +x:1 +长安街 1 +x:1 +抓获 1 +x:1 +环节 1 +x:1 +归人 1 +x:1 +油坊 1 +x:1 +拉动式 1 +x:1 +中前 1 +x:1 +农税 1 +x:1 +必然王国 1 +x:1 +开盘 1 +x:1 +消费国 1 +x:1 +按理 1 +x:1 +物候 1 +x:1 +相思歌 1 +x:1 +碉堡式 1 +x:1 +寿险业 1 +x:1 +调训 1 +x:1 +刀工 1 +x:1 +鸣冤叫屈 1 +x:1 +金水区 1 +x:1 +助跑道 1 +x:1 +路矿 1 +x:1 +助手 1 +x:1 +动力伞 1 +x:1 +蔬菜史 1 +x:1 +归于 1 +x:1 +恰帕雷 1 +x:1 +虚数 1 +x:1 +双曲线 1 +x:1 +儿童伞 1 +x:1 +造船 1 +x:1 +意气风发 1 +x:1 +制式 1 +x:1 +永和县 1 +x:1 +繁殖关 1 +x:1 +盐池 1 +x:1 +夜总会 1 +x:1 +越野车 1 +x:1 +大老婆 1 +x:1 +自夸 1 +x:1 +虎跃龙腾 1 +x:1 +嗷嗷叫 1 +x:1 +孕产妇 1 +x:1 +五力 1 +x:1 +虚报 1 +x:1 +投入口 1 +x:1 +赜 1 +x:1 +协作办 1 +x:1 +晓月 1 +x:1 +机缘 1 +x:1 +山杏 1 +x:1 +政府奖 1 +x:1 +天明 1 +x:1 +华乐 1 +x:1 +奇山异水 1 +x:1 +明珠暗投 1 +x:1 +复员证 1 +x:1 +大中型 1 +x:1 +漳浦县 1 +x:1 +饭后 1 +x:1 +衬布 1 +x:1 +盐水 1 +x:1 +调调 1 +x:1 +慧眼 1 +x:1 +新声路 1 +x:1 +一帆风顺 1 +x:1 +虚拟 1 +x:1 +和和气气 1 +x:1 +华丽 1 +x:1 +评论者 1 +x:1 +调谐 1 +x:1 +江珧柱 1 +x:1 +以旧翻新 1 +x:1 +看热闹 1 +x:1 +路灯 1 +x:1 +纸版 1 +x:1 +论 249 +x:249 +纸牌 1 +x:1 +狂放不羁 1 +x:1 +纸片 1 +x:1 +雾化 1 +x:1 +中签率 1 +x:1 +协作 1 +x:1 +华东 1 +x:1 +房 286 +x:286 +轮作制 1 +x:1 +太仓县 1 +x:1 +萨摩亚队 1 +x:1 +备而不用 1 +x:1 +合并案 1 +x:1 +助攻 1 +x:1 +吸烟客 1 +x:1 +机群 1 +x:1 +脑心通 1 +x:1 +球轴承 1 +x:1 +锑 5 +x:5 +冀晋区 1 +x:1 +炎黄子孙 1 +x:1 +舒张 1 +x:1 +结账 1 +x:1 +无粮户 1 +x:1 +分赛区 1 +x:1 +自大 1 +x:1 +漠视 1 +x:1 +几内亚湾 1 +x:1 +应战 1 +x:1 +革命家 1 +x:1 +初芽 1 +x:1 +谫 1 +x:1 +花瓣儿 1 +x:1 +本位主义 1 +x:1 +三元桥 1 +x:1 +五刑 1 +x:1 +明君 1 +x:1 +珊瑚丸 1 +x:1 +盐泉 1 +x:1 +肠镜 1 +x:1 +风姿 1 +x:1 +夏粮 1 +x:1 +检查部 1 +x:1 +华亭 1 +x:1 +青云直上 1 +x:1 +岭上 1 +x:1 +机翼 1 +x:1 +华人 1 +x:1 +衬底 1 +x:1 +旁系亲属 1 +x:1 +犬科 1 +x:1 +为我所用 1 +x:1 +助教 1 +x:1 +泣鬼神 1 +x:1 +铁丝笼 1 +x:1 +难民营 1 +x:1 +烨 45 +x:45 +军品 1 +x:1 +预备队 1 +x:1 +狄塞耳机 1 +x:1 +稿本 1 +x:1 +反射角 1 +x:1 +伯母 1 +x:1 +天机 1 +x:1 +九运 1 +x:1 +戊 1 +x:1 +调资 1 +x:1 +肖子 1 +x:1 +永安河 1 +x:1 +世叔 1 +x:1 +咯 1 +x:1 +澳元 1 +x:1 +没治 1 +x:1 +青岛队 1 +x:1 +躯体 1 +x:1 +体弱者 1 +x:1 +会集区 1 +x:1 +定场白 1 +x:1 +一无所长 1 +x:1 +天朝 1 +x:1 +鲨鱼 1 +x:1 +包治百病 1 +x:1 +峻伟 1 +x:1 +时久天长 1 +x:1 +借还款 1 +x:1 +角膜炎 1 +x:1 +碎银 1 +x:1 +别无良策 1 +x:1 +工作面 1 +x:1 +针织裤 1 +x:1 +锅底状 1 +x:1 +隽 1 +x:1 +眼 335 +x:335 +脸部 1 +x:1 +择机 1 +x:1 +神州 1 +x:1 +社长 1 +x:1 +臭老九 1 +x:1 +到资额 1 +x:1 +五台 1 +x:1 +天南地北 1 +x:1 +蝴蝶瓦 1 +x:1 +刀子 1 +x:1 +天条 1 +x:1 +卖国求荣 1 +x:1 +言行一致 1 +x:1 +五口 1 +x:1 +备有 1 +x:1 +抱抱 1 +x:1 +自备 1 +x:1 +择期 1 +x:1 +徐 1061 +x:1061 +刚柔相济 1 +x:1 +开火 1 +x:1 +卡通人 1 +x:1 +平直 1 +x:1 +责权 1 +x:1 +五反 1 +x:1 +没法 1 +x:1 +跑步器 1 +x:1 +抓药 1 +x:1 +复印机厂 1 +x:1 +隐头花序 1 +x:1 +共葬 1 +x:1 +施事 1 +x:1 +大青山 1 +x:1 +东圃镇 1 +x:1 +蔗 2 +x:2 +奢起贫兆 1 +x:1 +曲柄 1 +x:1 +欧安组织 1 +x:1 +燎灼 1 +x:1 +暮鼓 1 +x:1 +通牒 1 +x:1 +弯子 1 +x:1 +吉人天相 1 +x:1 +行政性 1 +x:1 +教管会 1 +x:1 +灿朗 1 +x:1 +昏黄 1 +x:1 +开炮 1 +x:1 +增辉添色 1 +x:1 +撷取 1 +x:1 +备查 1 +x:1 +攻无不克 1 +x:1 +天极 1 +x:1 +凡夫俗子 1 +x:1 +新沟北村 1 +x:1 +雨声 1 +x:1 +昏黑 1 +x:1 +煤窑 1 +x:1 +华侨 1 +x:1 +装甲艇 1 +x:1 +天柱 1 +x:1 +双岭村 1 +x:1 +仓山 1 +x:1 +施主 1 +x:1 +出版社 1 +x:1 +搏斗 1 +x:1 +托克托 1 +x:1 +胜诉率 1 +x:1 +吃喝 1 +x:1 +机务段 1 +x:1 +楦子 1 +x:1 +平白 1 +x:1 +荷叶 1 +x:1 +机组 1 +x:1 +化学元素 1 +x:1 +猿岩龙岫 1 +x:1 +店铺 1 +x:1 +娩 1 +x:1 +披沙拣金 1 +x:1 +狮泉河 1 +x:1 +世医 1 +x:1 +白 668 +x:668 +六神无主 1 +x:1 +神庙 1 +x:1 +牛肝菌 1 +x:1 +神府 1 +x:1 +蒇 1 +x:1 +论断 1 +x:1 +绣口 1 +x:1 +非同寻常 1 +x:1 +现成 1 +x:1 +评税单 1 +x:1 +伴随 1 +x:1 +秤纽 1 +x:1 +慷慨陈辞 1 +x:1 +金属膜 1 +x:1 +咸丰 1 +x:1 +大本本 1 +x:1 +社队 1 +x:1 +越野赛 1 +x:1 +立交桥 1 +x:1 +享 32 +x:32 +民歌风 1 +x:1 +白坯布 1 +x:1 +茅盾 1 +x:1 +追星族 1 +x:1 +一面儿理 1 +x:1 +下沉 1 +x:1 +园容 1 +x:1 +事故科 1 +x:1 +疏浚 1 +x:1 +路牌 1 +x:1 +商业额 1 +x:1 +井水 1 +x:1 +仁安村 1 +x:1 +莱芜 1 +x:1 +磁道 1 +x:1 +燕 49 +x:49 +叶轮 1 +x:1 +纬线 1 +x:1 +收割机厂 1 +x:1 +社院 1 +x:1 +澳分 1 +x:1 +长信 1 +x:1 +电位仪 1 +x:1 +汉寿 1 +x:1 +观看 1 +x:1 +安定门 1 +x:1 +寿联 1 +x:1 +卷帙浩繁 1 +x:1 +壁灯 1 +x:1 +抱憾 1 +x:1 +略图 1 +x:1 +珊瑚礁区 1 +x:1 +凉面 1 +x:1 +盐渍 1 +x:1 +花树 1 +x:1 +平生 1 +x:1 +纪游诗 1 +x:1 +认定书 1 +x:1 +壁炉 1 +x:1 +申诉人 1 +x:1 +电磁法 1 +x:1 +筑造 1 +x:1 +凉鞋 1 +x:1 +防洪堤 1 +x:1 +记忆力 1 +x:1 +盐滩 1 +x:1 +全传 1 +x:1 +长传 1 +x:1 +粉刷工 1 +x:1 +夜盲 1 +x:1 +希冀 1 +x:1 +官架子 1 +x:1 +拉德方斯 1 +x:1 +侦破率 1 +x:1 +冰箱门 1 +x:1 +鹭鹚 1 +x:1 +电磁波 1 +x:1 +按照 1 +x:1 +雾凇 1 +x:1 +采录 1 +x:1 +鞍山市 1 +x:1 +摇 59 +x:59 +叛逃 1 +x:1 +移民区 1 +x:1 +木薯 1 +x:1 +结转 1 +x:1 +谢天谢地 1 +x:1 +一差二错 1 +x:1 +骨结核 1 +x:1 +雪糕 1 +x:1 +版刻 1 +x:1 +九谷 1 +x:1 +煤种 1 +x:1 +积雪 1 +x:1 +国家级 1 +x:1 +计算机网 1 +x:1 +迎生曲 1 +x:1 +开班 1 +x:1 +长住 1 +x:1 +孢子 1 +x:1 +纸烟 1 +x:1 +蔚为 1 +x:1 +五假 1 +x:1 +备播 1 +x:1 +性关系 1 +x:1 +明白纸 1 +x:1 +庄山 1 +x:1 +欢欢乐乐 1 +x:1 +办赛 1 +x:1 +评定者 1 +x:1 +荒乱 1 +x:1 +抱佛脚 1 +x:1 +五冶 1 +x:1 +维修队 1 +x:1 +长亲 1 +x:1 +道具车 1 +x:1 +长亭 1 +x:1 +盛装 1 +x:1 +朦胧 1 +x:1 +神往 1 +x:1 +农经 1 +x:1 +鹤嘴镐 1 +x:1 +鼠 26 +x:26 +玉叶金枝 1 +x:1 +简洁明了 1 +x:1 +调转 1 +x:1 +仓库 1 +x:1 +金墩乡 1 +x:1 +长于 1 +x:1 +巴蜀 1 +x:1 +刀头 1 +x:1 +地学部 1 +x:1 +煤砖 1 +x:1 +筹划 1 +x:1 +闪耀 1 +x:1 +两部一办 1 +x:1 +核桃仁 1 +x:1 +要 20607 +x:20607 +拉 565 +x:565 +天数 1 +x:1 +器械科 1 +x:1 +神志 1 +x:1 +迎来 1 +x:1 +仓廪 1 +x:1 +大发雷霆 1 +x:1 +辽八厂 1 +x:1 +养殖池 1 +x:1 +湖 118 +x:118 +扮鬼脸 1 +x:1 +呈文 1 +x:1 +机米 1 +x:1 +缰绳 1 +x:1 +花样 1 +x:1 +勐仑镇 1 +x:1 +拔尖 1 +x:1 +咕嘟嘟 1 +x:1 +荒丘 1 +x:1 +伴音 1 +x:1 +有产者 1 +x:1 +忽视 1 +x:1 +天敌 1 +x:1 +并 10496 +x:10496 +大余县 1 +x:1 +彩虹厅 1 +x:1 +焊缝 1 +x:1 +世兄 1 +x:1 +授 24 +x:24 +乳胶厂 1 +x:1 +冰淇淋 1 +x:1 +夏 374 +x:374 +弄口 1 +x:1 +调进 1 +x:1 +颇具规模 1 +x:1 +版协 1 +x:1 +格杀勿论 1 +x:1 +惊恐 1 +x:1 +闯祸者 1 +x:1 +神异 1 +x:1 +调运 1 +x:1 +择日 1 +x:1 +信号弹 1 +x:1 +盛行 1 +x:1 +长丝 1 +x:1 +盛衰 1 +x:1 +毁约 1 +x:1 +人事处 1 +x:1 +厨 7 +x:7 +张牙舞爪 1 +x:1 +工作间 1 +x:1 +名报名刊 1 +x:1 +紫河车 1 +x:1 +长上 1 +x:1 +长三 1 +x:1 +筹办 1 +x:1 +抱恨 1 +x:1 +消费力 1 +x:1 +廓清 1 +x:1 +蚀尽 1 +x:1 +诸暨市 1 +x:1 +防护网 1 +x:1 +单刀赴会 1 +x:1 +武丑 1 +x:1 +铩羽而归 1 +x:1 +济源 1 +x:1 +备料 1 +x:1 +天时 1 +x:1 +申诉信 1 +x:1 +绿树成荫 1 +x:1 +大哥大 1 +x:1 +秧鸡 1 +x:1 +丝光剂 1 +x:1 +天日 1 +x:1 +夹道村 1 +x:1 +舒展 1 +x:1 +扣除率 1 +x:1 +莱茵 1 +x:1 +恢复性 1 +x:1 +典册 1 +x:1 +泽被子孙 1 +x:1 +弯月形 1 +x:1 +锡城 1 +x:1 +皓月 1 +x:1 +筹募 1 +x:1 +保障法 1 +x:1 +班师回营 1 +x:1 +抱怨 1 +x:1 +长久 1 +x:1 +弯头 1 +x:1 +自我陶醉 1 +x:1 +女警 1 +x:1 +板羽球 1 +x:1 +煤末 1 +x:1 +勘验 1 +x:1 +世仇 1 +x:1 +炉子 1 +x:1 +劳教 1 +x:1 +批核 1 +x:1 +煤机 1 +x:1 +财大气粗 1 +x:1 +茅棚 1 +x:1 +学习热 1 +x:1 +五交 1 +x:1 +世代 1 +x:1 +国境点 1 +x:1 +马戏厅 1 +x:1 +调遣 1 +x:1 +创建者 1 +x:1 +营市 1 +x:1 +城东村 1 +x:1 +砰 5 +x:5 +更迭 1 +x:1 +铭记 1 +x:1 +风言风语 1 +x:1 +逸韵 1 +x:1 +粉体 1 +x:1 +天穹 1 +x:1 +冒顶 1 +x:1 +叛逆者 1 +x:1 +翩翩少年 1 +x:1 +独身汉 1 +x:1 +调适 1 +x:1 +世事 1 +x:1 +长凳 1 +x:1 +油刷 1 +x:1 +安贫乐道 1 +x:1 +防范性 1 +x:1 +寝 2 +x:2 +五代 1 +x:1 +婚姻观 1 +x:1 +孤立化 1 +x:1 +足银 1 +x:1 +世交 1 +x:1 +加厚型 1 +x:1 +戛纳节 1 +x:1 +救火车 1 +x:1 +地球化学 1 +x:1 +死路一条 1 +x:1 +十时 1 +x:1 +自如 1 +x:1 +拷 4 +x:4 +夜校 1 +x:1 +红红谷 1 +x:1 +知情者 1 +x:1 +世人 1 +x:1 +勇士 1 +x:1 +施压 1 +x:1 +阔 19 +x:19 +典仪 1 +x:1 +恪尽 1 +x:1 +的 358151 +x:358151 +至宝 1 +x:1 +试金石 1 +x:1 +挂名 1 +x:1 +葫芦巴 1 +x:1 +路沟 1 +x:1 +五中 1 +x:1 +北京鸭 1 +x:1 +圆圆 1 +x:1 +圆圈 1 +x:1 +大动脉 1 +x:1 +罗平县 1 +x:1 +莫过于 1 +x:1 +原始股 1 +x:1 +海盗 1 +x:1 +阿坝 1 +x:1 +五业 1 +x:1 +终末 1 +x:1 +安全壳 1 +x:1 +圆场 1 +x:1 +寿终正寝 1 +x:1 +天窗 1 +x:1 +江西腊 1 +x:1 +路沿 1 +x:1 +冒领 1 +x:1 +阀状 1 +x:1 +今夕 1 +x:1 +堪予 1 +x:1 +以逸待劳 1 +x:1 +隔阂 1 +x:1 +横流 1 +x:1 +五一 1 +x:1 +天竹 1 +x:1 +天竺 1 +x:1 +雄 39 +x:39 +房建队 1 +x:1 +世上 1 +x:1 +长兴 1 +x:1 +必需品 1 +x:1 +晏 8 +x:8 +荒冢 1 +x:1 +精诚所至 1 +x:1 +录入 1 +x:1 +马关县 1 +x:1 +煤柱 1 +x:1 +滴水穿石 1 +x:1 +单片机 1 +x:1 +秧脚 1 +x:1 +永河区 1 +x:1 +反叛者 1 +x:1 +茅根 1 +x:1 +热蒸现卖 1 +x:1 +确定者 1 +x:1 +热情劲 1 +x:1 +平正 1 +x:1 +暮色 1 +x:1 +长兄 1 +x:1 +一相情愿 1 +x:1 +贩黄 1 +x:1 +当场 1 +x:1 +阿国 1 +x:1 +调配 1 +x:1 +燎泡 1 +x:1 +当地 1 +x:1 +合并症 1 +x:1 +静 101 +x:101 +机房 1 +x:1 +西医学界 1 +x:1 +检查费 1 +x:1 +开气 1 +x:1 +世俗 1 +x:1 +鹰子咀 1 +x:1 +阿囡 1 +x:1 +剪枝 1 +x:1 +匹敌 1 +x:1 +冲决 1 +x:1 +本来面目 1 +x:1 +四五月份 1 +x:1 +环顾 1 +x:1 +羽毛未丰 1 +x:1 +苹果 1 +x:1 +开水 1 +x:1 +梦魇 1 +x:1 +便 1697 +x:1697 +华南 1 +x:1 +烁 2 +x:2 +遗产 1 +x:1 +牙床 1 +x:1 +晋安河 1 +x:1 +问候声 1 +x:1 +漂漂亮亮 1 +x:1 +隔音 1 +x:1 +挂职支教 1 +x:1 +争分夺秒 1 +x:1 +金融资本 1 +x:1 +施加 1 +x:1 +尸 6 +x:6 +照相 1 +x:1 +小到中雪 1 +x:1 +冲凉 1 +x:1 +抄抄写写 1 +x:1 +擤 1 +x:1 +跛足 1 +x:1 +Ⅰ 3 +x:3 +打开 1 +x:1 +帮衬 1 +x:1 +机手 1 +x:1 +酸乳类 1 +x:1 +冲击 1 +x:1 +阿嚏 1 +x:1 +轩 34 +x:34 +录像 1 +x:1 +耕耘者 1 +x:1 +磁轴 1 +x:1 +建筑师 1 +x:1 +双喜临门 1 +x:1 +中发 1 +x:1 +执法办 1 +x:1 +华北 1 +x:1 +紫外光 1 +x:1 +肠衣 1 +x:1 +化险为夷 1 +x:1 +忌日 1 +x:1 +阅 26 +x:26 +协助 1 +x:1 +果然如此 1 +x:1 +局界 1 +x:1 +荒僻 1 +x:1 +环食 1 +x:1 +配电室 1 +x:1 +岭南 1 +x:1 +军政府 1 +x:1 +五伦 1 +x:1 +工作证 1 +x:1 +惊险频出 1 +x:1 +丝竹管弦 1 +x:1 +养蝎业 1 +x:1 +学生娃 1 +x:1 +勇夺 1 +x:1 +穷山恶水 1 +x:1 +喇叭口 1 +x:1 +提手旁 1 +x:1 +协力 1 +x:1 +红学家 1 +x:1 +一手 1 +x:1 +大雨倾盆 1 +x:1 +勇夫 1 +x:1 +铅笔盒 1 +x:1 +野荠菜 1 +x:1 +画中有诗 1 +x:1 +花枝 1 +x:1 +兰香 1 +x:1 +天篷 1 +x:1 +韧带 1 +x:1 +国际馆 1 +x:1 +武义 1 +x:1 +祖孙 1 +x:1 +昏花 1 +x:1 +大围山 1 +x:1 +心驰 1 +x:1 +作息时间 1 +x:1 +整旧如新 1 +x:1 +问讯处 1 +x:1 +银蛇 1 +x:1 +设立 1 +x:1 +世伯 1 +x:1 +蜜饯厂 1 +x:1 +紧巴巴 1 +x:1 +长假 1 +x:1 +归咎 1 +x:1 +干柴 1 +x:1 +闷倦 1 +x:1 +中国队 1 +x:1 +欠款额 1 +x:1 +师职 1 +x:1 +太夫人 1 +x:1 +同帧 1 +x:1 +痞气 1 +x:1 +冲力 1 +x:1 +秋毫无犯 1 +x:1 +禅静 1 +x:1 +开演 1 +x:1 +冷水性 1 +x:1 +雪弹 1 +x:1 +严重者 1 +x:1 +邦联 1 +x:1 +单行线 1 +x:1 +冲劲 1 +x:1 +铅笔画 1 +x:1 +明斯克 1 +x:1 +边沿 1 +x:1 +末梢神经 1 +x:1 +犹太区 1 +x:1 +毡子 1 +x:1 +河滨 1 +x:1 +取样 1 +x:1 +冲动 1 +x:1 +椭圆 1 +x:1 +病 465 +x:465 +长叹 1 +x:1 +密林 1 +x:1 +反射面 1 +x:1 +中小学 1 +x:1 +海誓山盟 1 +x:1 +长台 1 +x:1 +当周 1 +x:1 +小家电 1 +x:1 +冷场 1 +x:1 +毁损 1 +x:1 +圈养 1 +x:1 +孔府 1 +x:1 +田园诗 1 +x:1 +至好 1 +x:1 +孔庙 1 +x:1 +经营性 1 +x:1 +打手势 1 +x:1 +录取 1 +x:1 +风险性 1 +x:1 +长发 1 +x:1 +饥饿症 1 +x:1 +有机可乘 1 +x:1 +挂图 1 +x:1 +有害 1 +x:1 +农推 1 +x:1 +梧州市 1 +x:1 +信达所 1 +x:1 +西德队 1 +x:1 +一统天下 1 +x:1 +女队 1 +x:1 +总工 1 +x:1 +毁掉 1 +x:1 +罗马帝国 1 +x:1 +悌 2 +x:2 +对抗性 1 +x:1 +矿工会 1 +x:1 +专 189 +x:189 +深处 1 +x:1 +处分者 1 +x:1 +少男 1 +x:1 +长篇卷 1 +x:1 +武侠小说 1 +x:1 +火力网 1 +x:1 +冲刷 1 +x:1 +一清早 1 +x:1 +藻种 1 +x:1 +摇身一变 1 +x:1 +冲刺 1 +x:1 +放大镜 1 +x:1 +鸳 1 +x:1 +绳梯 1 +x:1 +夺得 1 +x:1 +智者见智 1 +x:1 +民族主义 1 +x:1 +摊位费 1 +x:1 +井点 1 +x:1 +脸软 1 +x:1 +古杉 1 +x:1 +长卷 1 +x:1 +背 219 +x:219 +长印 1 +x:1 +得步进步 1 +x:1 +新进党 1 +x:1 +冲剂 1 +x:1 +割接法 1 +x:1 +耻辱感 1 +x:1 +澳人 1 +x:1 +木香 1 +x:1 +抖擞精神 1 +x:1 +肥牛场 1 +x:1 +晾衣篮 1 +x:1 +荒原 1 +x:1 +渗出 1 +x:1 +深奥 1 +x:1 +囿 18 +x:18 +茶饭不思 1 +x:1 +东三环 1 +x:1 +瓤子 1 +x:1 +班子 1 +x:1 +长势 1 +x:1 +冲厕 1 +x:1 +搓板 1 +x:1 +昏聩 1 +x:1 +批次 1 +x:1 +制订 1 +x:1 +走熊 1 +x:1 +窃案 1 +x:1 +横滨 1 +x:1 +那曲镇 1 +x:1 +楚汉之争 1 +x:1 +闷儿 1 +x:1 +九里 1 +x:1 +阿哥 1 +x:1 +中原 1 +x:1 +冲压 1 +x:1 +不仅仅 1 +x:1 +开渠 1 +x:1 +至亲至爱 1 +x:1 +横滚 1 +x:1 +投机取巧 1 +x:1 +开宗明义 1 +x:1 +禅院 1 +x:1 +献礼 1 +x:1 +蛋白 1 +x:1 +白河 1 +x:1 +焊接 1 +x:1 +审定 1 +x:1 +人流量 1 +x:1 +遂 79 +x:79 +西雅图市 1 +x:1 +隔间 1 +x:1 +井然 1 +x:1 +撰述 1 +x:1 +志趣 1 +x:1 +高年级 1 +x:1 +黄瓜秧 1 +x:1 +农技 1 +x:1 +亢阳 1 +x:1 +演艺圈 1 +x:1 +横溢 1 +x:1 +忽闪 1 +x:1 +撇缆枪 1 +x:1 +列克星顿 1 +x:1 +自来水 1 +x:1 +天神 1 +x:1 +双鸭山 1 +x:1 +昏者 1 +x:1 +纸浆 1 +x:1 +君臣 1 +x:1 +学习率 1 +x:1 +蔚县 1 +x:1 +半月刊 1 +x:1 +成年人 1 +x:1 +轮次 1 +x:1 +登堂入室 1 +x:1 +孔径 1 +x:1 +卖鱼处 1 +x:1 +审察 1 +x:1 +秀丽 1 +x:1 +社论 1 +x:1 +善选 1 +x:1 +乙状结肠 1 +x:1 +归国 1 +x:1 +录制 1 +x:1 +耍 16 +x:16 +政工组 1 +x:1 +铠甲 1 +x:1 +开源 1 +x:1 +已决犯 1 +x:1 +归因 1 +x:1 +工作观 1 +x:1 +曲种 1 +x:1 +备种 1 +x:1 +开溜 1 +x:1 +制造业 1 +x:1 +珍珠熊 1 +x:1 +肝儿 1 +x:1 +入境问俗 1 +x:1 +娱 8 +x:8 +曝光表 1 +x:1 +出版权 1 +x:1 +十万大山 1 +x:1 +天禀 1 +x:1 +优胜者 1 +x:1 +贿 5 +x:5 +离合器 1 +x:1 +迷魂阵 1 +x:1 +玉环 1 +x:1 +相安无事 1 +x:1 +思域 1 +x:1 +欣幸 1 +x:1 +长剧 1 +x:1 +虎 405 +x:405 +禅隐 1 +x:1 +华冶 1 +x:1 +呈示 1 +x:1 +农户 1 +x:1 +开滦 1 +x:1 +皮革厂 1 +x:1 +农房 1 +x:1 +释然 1 +x:1 +钻进 1 +x:1 +初始条件 1 +x:1 +长剑 1 +x:1 +有效率 1 +x:1 +墒情 1 +x:1 +通水 1 +x:1 +社评 1 +x:1 +大家族 1 +x:1 +路标 1 +x:1 +以柔制刚 1 +x:1 +北隅 1 +x:1 +忌恨 1 +x:1 +归入 1 +x:1 +机械手 1 +x:1 +机机 1 +x:1 +订购人 1 +x:1 +仁人君子 1 +x:1 +安全局 1 +x:1 +忠县 1 +x:1 +仰仗 1 +x:1 +农时 1 +x:1 +拟任 1 +x:1 +大中修 1 +x:1 +当初 1 +x:1 +安全山 1 +x:1 +维修费 1 +x:1 +上一年 1 +x:1 +冷光 1 +x:1 +安徽省 1 +x:1 +炕桌 1 +x:1 +耻辱柱 1 +x:1 +白内障 1 +x:1 +忠厚 1 +x:1 +呀 198 +x:198 +殖民主义 1 +x:1 +上蹿下跳 1 +x:1 +机杼 1 +x:1 +作鬼 1 +x:1 +深心 1 +x:1 +订购价 1 +x:1 +咸味 1 +x:1 +书法界 1 +x:1 +出言不慎 1 +x:1 +圆台 1 +x:1 +荒唐 1 +x:1 +拟人 1 +x:1 +龙凤鸟 1 +x:1 +楼堂馆所 1 +x:1 +病魔缠身 1 +x:1 +路桥 1 +x:1 +典医监 1 +x:1 +监察法 1 +x:1 +壁橱 1 +x:1 +教科文卫 1 +x:1 +当前 1 +x:1 +大面儿 1 +x:1 +以情感人 1 +x:1 +救济型 1 +x:1 +民歌节 1 +x:1 +态势 1 +x:1 +代表法 1 +x:1 +冲向 1 +x:1 +机枪 1 +x:1 +农救 1 +x:1 +祖师 1 +x:1 +没用 1 +x:1 +驿动 1 +x:1 +机枢 1 +x:1 +文京区 1 +x:1 +黄渡镇 1 +x:1 +选调 1 +x:1 +机架 1 +x:1 +曲终 1 +x:1 +寒暑表 1 +x:1 +挥 57 +x:57 +讲话者 1 +x:1 +阿南 1 +x:1 +姜冯营村 1 +x:1 +物体 1 +x:1 +非成员国 1 +x:1 +井盐 1 +x:1 +左权 1 +x:1 +有理分式 1 +x:1 +樟木 1 +x:1 +冷凝 1 +x:1 +参与 1 +x:1 +手推车 1 +x:1 +安全岛 1 +x:1 +敌营 1 +x:1 +开罗市 1 +x:1 +夙嫌 1 +x:1 +宝瓶座 1 +x:1 +建筑家 1 +x:1 +沟壕 1 +x:1 +下流 1 +x:1 +廉耻 1 +x:1 +沟壑 1 +x:1 +路检 1 +x:1 +献给 1 +x:1 +戴盆望天 1 +x:1 +彩笛卷 1 +x:1 +花期 1 +x:1 +非凡 1 +x:1 +冷冻 1 +x:1 +普格县 1 +x:1 +炕梢 1 +x:1 +渔农处 1 +x:1 +曲线 1 +x:1 +盲人 1 +x:1 +存车费 1 +x:1 +存续期 1 +x:1 +虚空 1 +x:1 +产肉量 1 +x:1 +伯父 1 +x:1 +伯爵 1 +x:1 +丢盔卸甲 1 +x:1 +挚爱 1 +x:1 +胁持 1 +x:1 +焊料 1 +x:1 +雨水管 1 +x:1 +丝包线 1 +x:1 +诸如 1 +x:1 +开栏 1 +x:1 +物价 1 +x:1 +物件 1 +x:1 +职业制 1 +x:1 +救世主 1 +x:1 +告别厅 1 +x:1 +还乡团 1 +x:1 +搏杀 1 +x:1 +马奇诺 1 +x:1 +挂冠 1 +x:1 +荣华 1 +x:1 +荣升 1 +x:1 +观察点 1 +x:1 +本外币 1 +x:1 +阿穆尔州 1 +x:1 +深度 1 +x:1 +铜车马 1 +x:1 +顶效镇 1 +x:1 +煤成 1 +x:1 +寓于 1 +x:1 +马戏团 1 +x:1 +盐田 1 +x:1 +当即 1 +x:1 +鳞屑 1 +x:1 +平滑 1 +x:1 +调销 1 +x:1 +劳方 1 +x:1 +芬芳娇艳 1 +x:1 +农林牧业 1 +x:1 +机智 1 +x:1 +天罡 1 +x:1 +煽风点火 1 +x:1 +物产 1 +x:1 +千粒重 1 +x:1 +遗俗 1 +x:1 +出租汽车 1 +x:1 +湮没 1 +x:1 +长堤路 1 +x:1 +溪流 1 +x:1 +坠子 1 +x:1 +走人 1 +x:1 +杨伙盘 1 +x:1 +帆布床 1 +x:1 +交相辉映 1 +x:1 +特惠关税 1 +x:1 +轼 3 +x:3 +衣蛾 1 +x:1 +拟作 1 +x:1 +红砂岩 1 +x:1 +方整化 1 +x:1 +夏日 1 +x:1 +锅贴儿 1 +x:1 +旅行者 1 +x:1 +西画系 1 +x:1 +板鸭 1 +x:1 +深市 1 +x:1 +水标 1 +x:1 +聋人 1 +x:1 +冷僻 1 +x:1 +格格不入 1 +x:1 +却步 1 +x:1 +湖云塘 1 +x:1 +调门 1 +x:1 +岭坡 1 +x:1 +夜深 1 +x:1 +药物部 1 +x:1 +高红村 1 +x:1 +二硫基苯 1 +x:1 +违诺 1 +x:1 +准确率 1 +x:1 +纲 32 +x:32 +望风而逃 1 +x:1 +定型机 1 +x:1 +等速运动 1 +x:1 +挂儿 1 +x:1 +仓储场 1 +x:1 +扁桃 1 +x:1 +个人所有 1 +x:1 +布雷顿 1 +x:1 +洞净杆赛 1 +x:1 +细石器 1 +x:1 +氯地孕酮 1 +x:1 +平湖 1 +x:1 +剿共 1 +x:1 +晚晴 1 +x:1 +肢 2 +x:2 +急诊费 1 +x:1 +花木 1 +x:1 +大中专 1 +x:1 +不丹王国 1 +x:1 +硬皮病 1 +x:1 +伸出 1 +x:1 +物业 1 +x:1 +猛不防 1 +x:1 +衩 1 +x:1 +应答 1 +x:1 +深广 1 +x:1 +横栏 1 +x:1 +岭地 1 +x:1 +横标 1 +x:1 +肖像 1 +x:1 +蟹肉 1 +x:1 +保守党 1 +x:1 +明亮 1 +x:1 +审度 1 +x:1 +国产机 1 +x:1 +埃菲社 1 +x:1 +侑 1 +x:1 +蔬菜业 1 +x:1 +明人 1 +x:1 +冷却 1 +x:1 +荒坡 1 +x:1 +熔断器 1 +x:1 +溅 18 +x:18 +机收 1 +x:1 +长垣 1 +x:1 +基本词汇 1 +x:1 +明来暗往 1 +x:1 +明了 1 +x:1 +倚天仗剑 1 +x:1 +取水 1 +x:1 +烟 130 +x:130 +三脚架 1 +x:1 +落地钟 1 +x:1 +吃现成 1 +x:1 +余孽 1 +x:1 +锡业 1 +x:1 +农林 1 +x:1 +刺儿头 1 +x:1 +独孤求败 1 +x:1 +通榆 1 +x:1 +明代 1 +x:1 +明令 1 +x:1 +家破人亡 1 +x:1 +调阅 1 +x:1 +深州 1 +x:1 +中医大 1 +x:1 +歼击机 1 +x:1 +东三省 1 +x:1 +甩花手 1 +x:1 +黄牛党 1 +x:1 +测绘兵 1 +x:1 +平添 1 +x:1 +当做 1 +x:1 +敢 444 +x:444 +炒鱿鱼 1 +x:1 +深巷 1 +x:1 +安全帽 1 +x:1 +协商 1 +x:1 +新婚户 1 +x:1 +锡乌 1 +x:1 +提灌站 1 +x:1 +洞总杆赛 1 +x:1 +长城 1 +x:1 +密探 1 +x:1 +划 118 +x:118 +马驹桥镇 1 +x:1 +天籁 1 +x:1 +调防 1 +x:1 +平淡 1 +x:1 +安全带 1 +x:1 +机械性 1 +x:1 +尼那 1 +x:1 +刃 8 +x:8 +享用 1 +x:1 +叫好声 1 +x:1 +阿其 1 +x:1 +澄沙 1 +x:1 +决胜局 1 +x:1 +调集 1 +x:1 +政经分离 1 +x:1 +按钮式 1 +x:1 +不乏其人 1 +x:1 +明丽 1 +x:1 +毁林 1 +x:1 +参保 1 +x:1 +占款 1 +x:1 +拷扁榄 1 +x:1 +老远 1 +x:1 +秤星 1 +x:1 +绝伦 1 +x:1 +草荐 1 +x:1 +粮划署 1 +x:1 +杂物间 1 +x:1 +自查自省 1 +x:1 +谴责 1 +x:1 +平津 1 +x:1 +吃亏 1 +x:1 +祖居 1 +x:1 +忆 38 +x:38 +工程师室 1 +x:1 +审干 1 +x:1 +取法 1 +x:1 +长安镇 1 +x:1 +刑侦局 1 +x:1 +机时 1 +x:1 +电位器 1 +x:1 +什刹海 1 +x:1 +花青素 1 +x:1 +草草 1 +x:1 +遁入 1 +x:1 +书画社 1 +x:1 +绍兴酒 1 +x:1 +闷响 1 +x:1 +青岛路 1 +x:1 +农机 1 +x:1 +土管员 1 +x:1 +多快好省 1 +x:1 +薄板坯 1 +x:1 +志贺 1 +x:1 +无伤大雅 1 +x:1 +防护林 1 +x:1 +傅 356 +x:356 +木鱼 1 +x:1 +歌曲集 1 +x:1 +至少 1 +x:1 +老一辈 1 +x:1 +正中下怀 1 +x:1 +幸运儿 1 +x:1 +疗 15 +x:15 +中长距离 1 +x:1 +荣光 1 +x:1 +协同 1 +x:1 +平河 1 +x:1 +舛讹 1 +x:1 +欲笑无声 1 +x:1 +有得有失 1 +x:1 +华商 1 +x:1 +共鸣 1 +x:1 +恪守 1 +x:1 +焊枪 1 +x:1 +冲垮 1 +x:1 +各具特色 1 +x:1 +夏末 1 +x:1 +兄 12 +x:12 +井田 1 +x:1 +当兵 1 +x:1 +奋斗史 1 +x:1 +重刑犯 1 +x:1 +癖 3 +x:3 +精确性 1 +x:1 +毡帽 1 +x:1 +大屯营乡 1 +x:1 +乘务员 1 +x:1 +工作费 1 +x:1 +思危 1 +x:1 +碰簧锁 1 +x:1 +疱疹 1 +x:1 +环境厅 1 +x:1 +白皮书 1 +x:1 +乱腾 1 +x:1 +毡帐 1 +x:1 +夏朝 1 +x:1 +挂号 1 +x:1 +密报 1 +x:1 +舛误 1 +x:1 +结集 1 +x:1 +初级小学 1 +x:1 +挂包 1 +x:1 +高举 1 +x:1 +取消 1 +x:1 +平民 1 +x:1 +长嘴 1 +x:1 +抒情化 1 +x:1 +农林业 1 +x:1 +违规 1 +x:1 +直升飞机 1 +x:1 +剿匪 1 +x:1 +移交 1 +x:1 +有胆有识 1 +x:1 +结队 1 +x:1 +学时 1 +x:1 +包笼 1 +x:1 +鄯 1 +x:1 +虚礼 1 +x:1 +过目难忘 1 +x:1 +防务展 1 +x:1 +资产者 1 +x:1 +服装类 1 +x:1 +精工细作 1 +x:1 +路段 1 +x:1 +另册 1 +x:1 +更衣 1 +x:1 +破冰船 1 +x:1 +非专业 1 +x:1 +通栏 1 +x:1 +平江 1 +x:1 +军乐管 1 +x:1 +赛利浦乡 1 +x:1 +平汉 1 +x:1 +深层 1 +x:1 +芋头 1 +x:1 +山海经 1 +x:1 +电费单 1 +x:1 +程林庄 1 +x:1 +秤杆 1 +x:1 +归功 1 +x:1 +党代表 1 +x:1 +嗬 32 +x:32 +电机厂 1 +x:1 +荣军 1 +x:1 +思古 1 +x:1 +挂印 1 +x:1 +思口 1 +x:1 +洪湖市 1 +x:1 +胺 1 +x:1 +焊条 1 +x:1 +娑罗树 1 +x:1 +困惑 1 +x:1 +呜乎哀哉 1 +x:1 +喉 9 +x:9 +深厚 1 +x:1 +寿阳 1 +x:1 +天父 1 +x:1 +荣幸 1 +x:1 +葡萄形 1 +x:1 +熠熠流彩 1 +x:1 +外 1765 +x:1765 +曲牌 1 +x:1 +设问句 1 +x:1 +配额制 1 +x:1 +高碑店 1 +x:1 +建行 1 +x:1 +沣 1 +x:1 +出版法 1 +x:1 +自强 1 +x:1 +通查 1 +x:1 +宗路区 1 +x:1 +开支 1 +x:1 +电火花 1 +x:1 +知人论世 1 +x:1 +处分 1 +x:1 +欣喜 1 +x:1 +困惫 1 +x:1 +佃户 1 +x:1 +蒋 607 +x:607 +路摊 1 +x:1 +深受 1 +x:1 +执法室 1 +x:1 +氯醇 1 +x:1 +圈子 1 +x:1 +白不呲咧 1 +x:1 +当年 1 +x:1 +绿帽子 1 +x:1 +积聚 1 +x:1 +寿险 1 +x:1 +一带而过 1 +x:1 +帮腔 1 +x:1 +横斜 1 +x:1 +献物 1 +x:1 +天牛 1 +x:1 +安全值 1 +x:1 +态度 1 +x:1 +牙垢 1 +x:1 +社联 1 +x:1 +切近 1 +x:1 +帆布厂 1 +x:1 +乘车人 1 +x:1 +初院 1 +x:1 +梨 17 +x:17 +助燃 1 +x:1 +杨家湖 1 +x:1 +圈定 1 +x:1 +徐龙区 1 +x:1 +掩眼法 1 +x:1 +机运连 1 +x:1 +深化 1 +x:1 +开斋 1 +x:1 +子夜 1 +x:1 +长头 1 +x:1 +海原县 1 +x:1 +当庭 1 +x:1 +长大 1 +x:1 +防护栏 1 +x:1 +动委会 1 +x:1 +礼纪镇 1 +x:1 +苍翠 1 +x:1 +豆腐块 1 +x:1 +长夜 1 +x:1 +井站 1 +x:1 +交 740 +x:740 +间接税 1 +x:1 +北京队 1 +x:1 +炉台 1 +x:1 +归州 1 +x:1 +生殖 1 +x:1 +通条 1 +x:1 +小业主 1 +x:1 +利国乡 1 +x:1 +谈笑自若 1 +x:1 +头班 1 +x:1 +副总 1 +x:1 +硝酸银 1 +x:1 +认贼作父 1 +x:1 +圆弧 1 +x:1 +无绩效者 1 +x:1 +耻 9 +x:9 +长处 1 +x:1 +感谢 1 +x:1 +□ 3 +x:3 +横放 1 +x:1 +盐碱 1 +x:1 +黄 1310 +x:1310 +按期 1 +x:1 +涩味 1 +x:1 +挂屏 1 +x:1 +长女 1 +x:1 +勇做 1 +x:1 +至友 1 +x:1 +中革军委 1 +x:1 +锻锤 1 +x:1 +含尘量 1 +x:1 +调频 1 +x:1 +里应外合 1 +x:1 +阿弟 1 +x:1 +革吉县 1 +x:1 +地址 1 +x:1 +天狗 1 +x:1 +阿式 1 +x:1 +登杆塔 1 +x:1 +芝麻酱 1 +x:1 +戒急用忍 1 +x:1 +广渠门 1 +x:1 +弯弯处 1 +x:1 +初雪 1 +x:1 +葡萄干 1 +x:1 +量纪 1 +x:1 +纸本 1 +x:1 +量级 1 +x:1 +平抑 1 +x:1 +煤渣 1 +x:1 +优中择优 1 +x:1 +软土区 1 +x:1 +维修者 1 +x:1 +初霁 1 +x:1 +刀会 1 +x:1 +帚 1 +x:1 +营地 1 +x:1 +瞟 2 +x:2 +白云村 1 +x:1 +肠胃 1 +x:1 +隐隐 1 +x:1 +姚 222 +x:222 +勇决 1 +x:1 +刀伤 1 +x:1 +初露 1 +x:1 +归属 1 +x:1 +第 9 +x:9 +井筒 1 +x:1 +路政 1 +x:1 +子课题 1 +x:1 +锻铁 1 +x:1 +巧言如簧 1 +x:1 +婴孩 1 +x:1 +磁 13 +x:13 +都江堰 1 +x:1 +病入膏肓 1 +x:1 +国药城 1 +x:1 +纸条 1 +x:1 +平拉 1 +x:1 +新鲜 1 +x:1 +门神 1 +x:1 +寿面 1 +x:1 +特急件 1 +x:1 +】 2 +x:2 +冷射 1 +x:1 +技高一筹 1 +x:1 +农械 1 +x:1 +当当 1 +x:1 +当归 1 +x:1 +呈现 1 +x:1 +搓洗 1 +x:1 +核桃壳 1 +x:1 +稽查局 1 +x:1 +和裁会 1 +x:1 +作品展 1 +x:1 +绝活儿 1 +x:1 +钢绞线 1 +x:1 +代替论 1 +x:1 +壁板 1 +x:1 +路数 1 +x:1 +平战 1 +x:1 +倒刺 1 +x:1 +农桑 1 +x:1 +庆祝性 1 +x:1 +冷峭 1 +x:1 +参体 1 +x:1 +禁酒令 1 +x:1 +深切 1 +x:1 +长堤 1 +x:1 +冷峻 1 +x:1 +冠子 1 +x:1 +基建队 1 +x:1 +壕沟 1 +x:1 +麦角酸 1 +x:1 +平房 1 +x:1 +玉林井村 1 +x:1 +深刻 1 +x:1 +粤东 1 +x:1 +开播 1 +x:1 +天王 1 +x:1 +亭长 1 +x:1 +冲天 1 +x:1 +煤源 1 +x:1 +详情 1 +x:1 +通明 1 +x:1 +嫂 5 +x:5 +覆盆之冤 1 +x:1 +实测值 1 +x:1 +钙剂 1 +x:1 +编织厂 1 +x:1 +平手 1 +x:1 +曲率 1 +x:1 +万难不却 1 +x:1 +法力 1 +x:1 +勇克 1 +x:1 +壁柜 1 +x:1 +古城镇 1 +x:1 +更年期 1 +x:1 +中继者 1 +x:1 +源口 1 +x:1 +草标儿 1 +x:1 +怔忡 1 +x:1 +音乐迷 1 +x:1 +壁柱 1 +x:1 +得陇望蜀 1 +x:1 +呈献 1 +x:1 +单纯词 1 +x:1 +法律部 1 +x:1 +当心 1 +x:1 +国产棉 1 +x:1 +阿市 1 +x:1 +宁 225 +x:225 +伐区 1 +x:1 +滚雪球 1 +x:1 +义务性 1 +x:1 +伊埃纳宫 1 +x:1 +抱病 1 +x:1 +开朗 1 +x:1 +中医药界 1 +x:1 +铁矿石 1 +x:1 +有眼无珠 1 +x:1 +琉璃 1 +x:1 +邮政编码 1 +x:1 +信丰县 1 +x:1 +赘物 1 +x:1 +丹东市 1 +x:1 +深冷 1 +x:1 +长官 1 +x:1 +聪明才智 1 +x:1 +珍宝馆 1 +x:1 +缠住 1 +x:1 +开本 1 +x:1 +按时 1 +x:1 +秘方 1 +x:1 +长安 1 +x:1 +胸口 1 +x:1 +棒槌 1 +x:1 +毛细现象 1 +x:1 +神 157 +x:157 +深冬 1 +x:1 +长宁 1 +x:1 +长寿 1 +x:1 +主谋者 1 +x:1 +开杆 1 +x:1 +耐穿透性 1 +x:1 +天灾 1 +x:1 +屠戮 1 +x:1 +圈套 1 +x:1 +扁柏 1 +x:1 +气轮机 1 +x:1 +批批 1 +x:1 +下周三 1 +x:1 +天火 1 +x:1 +天灯 1 +x:1 +粘土矿 1 +x:1 +下周一 1 +x:1 +煤海 1 +x:1 +肺叶 1 +x:1 +铅垂线 1 +x:1 +询问者 1 +x:1 +耻辱榜 1 +x:1 +协奏 1 +x:1 +预定金 1 +x:1 +秘旨 1 +x:1 +毡包 1 +x:1 +局级 1 +x:1 +眼药水 1 +x:1 +开来 1 +x:1 +建言 1 +x:1 +荣将 1 +x:1 +取息 1 +x:1 +成套率 1 +x:1 +凉药 1 +x:1 +现存量 1 +x:1 +当局 1 +x:1 +科迪亚克 1 +x:1 +灿烂 1 +x:1 +伴舞 1 +x:1 +挂帅 1 +x:1 +后现代 1 +x:1 +审判 1 +x:1 +降价年 1 +x:1 +选例板 1 +x:1 +报关单 1 +x:1 +锰矿 1 +x:1 +挂帐 1 +x:1 +纽扣 1 +x:1 +电动势 1 +x:1 +9 626 +x:626 +农歌 1 +x:1 +净菜行 1 +x:1 +困扰 1 +x:1 +滚动 1 +x:1 +姓名论 1 +x:1 +荒寒 1 +x:1 +安分守己 1 +x:1 +挂席 1 +x:1 +机械泵 1 +x:1 +阳 83 +x:83 +呆愣愣 1 +x:1 +开架 1 +x:1 +杨家沟 1 +x:1 +归心 1 +x:1 +负罪感 1 +x:1 +横杆 1 +x:1 +躯壳 1 +x:1 +杭纺 1 +x:1 +灿灿 1 +x:1 +副手 1 +x:1 +凉菜 1 +x:1 +当头棒喝 1 +x:1 +僧尼 1 +x:1 +长衫族 1 +x:1 +畜群 1 +x:1 +劳民伤财 1 +x:1 +青花盘 1 +x:1 +闪闪 1 +x:1 +尼姑庵 1 +x:1 +急不可待 1 +x:1 +仁人志士 1 +x:1 +敷料单 1 +x:1 +长孙 1 +x:1 +长存 1 +x:1 +良苦用心 1 +x:1 +上上下下 1 +x:1 +旅行车 1 +x:1 +臭虫 1 +x:1 +长子 1 +x:1 +勰 12 +x:12 +茅房 1 +x:1 +夜报 1 +x:1 +深入 1 +x:1 +团体照 1 +x:1 +多半数 1 +x:1 +归并 1 +x:1 +砂 24 +x:24 +成型件 1 +x:1 +村村寨寨 1 +x:1 +军政后 1 +x:1 +建警 1 +x:1 +开明 1 +x:1 +天然 1 +x:1 +猩猩 1 +x:1 +闷头 1 +x:1 +冷干 1 +x:1 +隔音纸 1 +x:1 +衣来伸手 1 +x:1 +粮食点 1 +x:1 +这项 1 +x:1 +台山市 1 +x:1 +知无不言 1 +x:1 +开春 1 +x:1 +雨帽 1 +x:1 +哲学 1 +x:1 +铁合金 1 +x:1 +钵 3 +x:3 +百态纷呈 1 +x:1 +贩销 1 +x:1 +煤气 1 +x:1 +乱购 1 +x:1 +耗子 1 +x:1 +致辞 1 +x:1 +生气 1 +x:1 +秤毫 1 +x:1 +挂心 1 +x:1 +横暴 1 +x:1 +锋利 1 +x:1 +虚症 1 +x:1 +路权 1 +x:1 +华大 1 +x:1 +沟坎 1 +x:1 +车尾 1 +x:1 +样本量 1 +x:1 +吏制 1 +x:1 +回避制 1 +x:1 +安全区 1 +x:1 +脸蛋 1 +x:1 +冷布 1 +x:1 +臧 17 +x:17 +华夏 1 +x:1 +测绘局 1 +x:1 +路条 1 +x:1 +以诚相见 1 +x:1 +挂念 1 +x:1 +归帆 1 +x:1 +孔型 1 +x:1 +不由得 1 +x:1 +外运量 1 +x:1 +批捕 1 +x:1 +虚化 1 +x:1 +净收入 1 +x:1 +灿然 1 +x:1 +樟树 1 +x:1 +行若无事 1 +x:1 +主罚 1 +x:1 +策士 1 +x:1 +坎伯岚 1 +x:1 +煤油 1 +x:1 +烦心事 1 +x:1 +机械 1 +x:1 +黔西南 1 +x:1 +晨报 1 +x:1 +炕柜 1 +x:1 +三民主义 1 +x:1 +腺细胞 1 +x:1 +小三轮 1 +x:1 +芦 2 +x:2 +巴利阿里 1 +x:1 +水漂 1 +x:1 +退机率 1 +x:1 +挡热层 1 +x:1 +混纺 1 +x:1 +按摩 1 +x:1 +乱跑 1 +x:1 +建议 1 +x:1 +马桶盖 1 +x:1 +冲子 1 +x:1 +相会 1 +x:1 +煤泥 1 +x:1 +目鱼 1 +x:1 +建设 1 +x:1 +当差 1 +x:1 +异兽 1 +x:1 +没空 1 +x:1 +摄谱仪 1 +x:1 +居民点 1 +x:1 +圆山 1 +x:1 +佣 1 +x:1 +千真万确 1 +x:1 +马鞍山 1 +x:1 +阿尔 1 +x:1 +机检 1 +x:1 +冷床 1 +x:1 +养鹿业 1 +x:1 +冷库 1 +x:1 +中西部 1 +x:1 +果品厂 1 +x:1 +钻探机 1 +x:1 +安全员 1 +x:1 +营利 1 +x:1 +平果 1 +x:1 +炉坑 1 +x:1 +盐类 1 +x:1 +扩音 1 +x:1 +中西药业 1 +x:1 +木靶 1 +x:1 +下意识 1 +x:1 +话里有话 1 +x:1 +如此这般 1 +x:1 +空心棒 1 +x:1 +有朝一日 1 +x:1 +超自然 1 +x:1 +火墙子 1 +x:1 +华年 1 +x:1 +寄托感 1 +x:1 +婴幼 1 +x:1 +澄澈 1 +x:1 +检查者 1 +x:1 +牙口 1 +x:1 +黄山站 1 +x:1 +稽查处 1 +x:1 +按揭 1 +x:1 +益阳 1 +x:1 +组编 1 +x:1 +忠实 1 +x:1 +躯干 1 +x:1 +局 717 +x:717 +一忽儿 1 +x:1 +沤粪 1 +x:1 +大包干 1 +x:1 +癞皮狗 1 +x:1 +冷天 1 +x:1 +卢沟桥乡 1 +x:1 +零配件 1 +x:1 +圆寂 1 +x:1 +妖魔鬼怪 1 +x:1 +年过花甲 1 +x:1 +显要 1 +x:1 +长工 1 +x:1 +万鼓催春 1 +x:1 +归天 1 +x:1 +芦柞乡 1 +x:1 +代办 1 +x:1 +取景 1 +x:1 +警世钟 1 +x:1 +攀枝花市 1 +x:1 +灶神 1 +x:1 +彗星队 1 +x:1 +圈形 1 +x:1 +归复 1 +x:1 +一中一台 1 +x:1 +祖国 1 +x:1 +卓尔不群 1 +x:1 +铀 9 +x:9 +夺冠 1 +x:1 +井绳 1 +x:1 +平朔 1 +x:1 +柿皮 1 +x:1 +畹町河 1 +x:1 +客户群 1 +x:1 +平服 1 +x:1 +昏迷 1 +x:1 +曲直 1 +x:1 +深圳 1 +x:1 +壁报 1 +x:1 +养车户 1 +x:1 +速战速决 1 +x:1 +养家活口 1 +x:1 +磁芯 1 +x:1 +译本 1 +x:1 +迂夫子 1 +x:1 +长崎 1 +x:1 +井组 1 +x:1 +曲目 1 +x:1 +蔚山 1 +x:1 +天皇 1 +x:1 +圆子 1 +x:1 +醉生梦死 1 +x:1 +光谱线 1 +x:1 +祝福词 1 +x:1 +马鞍子 1 +x:1 +积蓄 1 +x:1 +晨时 1 +x:1 +残局 1 +x:1 +一星半点 1 +x:1 +晓得 1 +x:1 +苔 2 +x:2 +楚楚 1 +x:1 +天目 1 +x:1 +冷水滩 1 +x:1 +风险源 1 +x:1 +金篾 1 +x:1 +夏河 1 +x:1 +板面 1 +x:1 +失眠病 1 +x:1 +盐粒 1 +x:1 +基民盟 1 +x:1 +平方毫米 1 +x:1 +失而复得 1 +x:1 +平板 1 +x:1 +惨 12 +x:12 +二轻 1 +x:1 +农活 1 +x:1 +丹顶鹤 1 +x:1 +牙医 1 +x:1 +华府 1 +x:1 +飞禽走兽 1 +x:1 +楹 4 +x:4 +杯 200 +x:200 +懊丧 1 +x:1 +煤毒 1 +x:1 +量筒 1 +x:1 +华彩 1 +x:1 +交警队 1 +x:1 +壁挂 1 +x:1 +荒山 1 +x:1 +潺潺流水 1 +x:1 +虚玄 1 +x:1 +秘技 1 +x:1 +开班式 1 +x:1 +涂膜剂 1 +x:1 +批改 1 +x:1 +调整日 1 +x:1 +长岭 1 +x:1 +营区 1 +x:1 +公明镇 1 +x:1 +建起 1 +x:1 +上梅洲 1 +x:1 +板障 1 +x:1 +长岛 1 +x:1 +天真 1 +x:1 +心急者 1 +x:1 +蔽塞 1 +x:1 +明枪暗箭 1 +x:1 +涎皮赖脸 1 +x:1 +络 6 +x:6 +务虚会 1 +x:1 +吏员 1 +x:1 +告别室 1 +x:1 +放虎归山 1 +x:1 +新寮镇 1 +x:1 +韧劲 1 +x:1 +嵩县 1 +x:1 +佃权 1 +x:1 +建账 1 +x:1 +九龙 1 +x:1 +取材 1 +x:1 +北威州 1 +x:1 +感觉 1 +x:1 +十二点 1 +x:1 +电位差 1 +x:1 +感观 1 +x:1 +竞技体操 1 +x:1 +直溜溜 1 +x:1 +新叶村 1 +x:1 +拔丝 1 +x:1 +评议权 1 +x:1 +舌根音 1 +x:1 +通报 1 +x:1 +开恩 1 +x:1 +神魂颠倒 1 +x:1 +僧官 1 +x:1 +火力点 1 +x:1 +感触 1 +x:1 +积蕴 1 +x:1 +响水 1 +x:1 +树枝状 1 +x:1 +通才 1 +x:1 +建路 1 +x:1 +大写意 1 +x:1 +当家 1 +x:1 +声如洪钟 1 +x:1 +斐 24 +x:24 +骨干 1 +x:1 +曲高和寡 1 +x:1 +笔记簿 1 +x:1 +邦迪 1 +x:1 +保障线 1 +x:1 +当官 1 +x:1 +量程 1 +x:1 +漠风 1 +x:1 +总价值 1 +x:1 +批文 1 +x:1 +木雕 1 +x:1 +副攻 1 +x:1 +挂失 1 +x:1 +沉积岩 1 +x:1 +爱国志士 1 +x:1 +阿婆 1 +x:1 +批斗 1 +x:1 +敖汉旗 1 +x:1 +废话 1 +x:1 +热柯党乡 1 +x:1 +农民 1 +x:1 +一败如水 1 +x:1 +邦达 1 +x:1 +锻造 1 +x:1 +养蚕业 1 +x:1 +稚气 1 +x:1 +荒岭 1 +x:1 +知心话 1 +x:1 +九鼎 1 +x:1 +和颜悦色 1 +x:1 +祖坟 1 +x:1 +农水 1 +x:1 +音乐课 1 +x:1 +一溜儿 1 +x:1 +风气 1 +x:1 +全军覆没 1 +x:1 +动力处 1 +x:1 +绝对真理 1 +x:1 +牙刷 1 +x:1 +长局 1 +x:1 +医药学家 1 +x:1 +初速 1 +x:1 +夜晚 1 +x:1 +施工 1 +x:1 +夏湾 1 +x:1 +开挖 1 +x:1 +猢狲 1 +x:1 +阿姨 1 +x:1 +华山 1 +x:1 +初选 1 +x:1 +冲床 1 +x:1 +国境线 1 +x:1 +窘迫 1 +x:1 +平方 1 +x:1 +华屋 1 +x:1 +华居 1 +x:1 +阿姐 1 +x:1 +任人摆布 1 +x:1 +当堂 1 +x:1 +天球 1 +x:1 +克隆羊 1 +x:1 +长征 1 +x:1 +没羞 1 +x:1 +纺织娘 1 +x:1 +共青 1 +x:1 +阿妹 1 +x:1 +美国式 1 +x:1 +国际队 1 +x:1 +传送 1 +x:1 +夺占 1 +x:1 +有名有利 1 +x:1 +簿记 1 +x:1 +违者 1 +x:1 +正步 1 +x:1 +献瑞 1 +x:1 +板门 1 +x:1 +冒险 1 +x:1 +班长鞋 1 +x:1 +那会儿 1 +x:1 +呜呼 1 +x:1 +枯木 1 +x:1 +樊篱 1 +x:1 +横排 1 +x:1 +冷水江 1 +x:1 +支座 1 +x:1 +情人 1 +x:1 +阿妈 1 +x:1 +仓促 1 +x:1 +平日 1 +x:1 +畏首畏尾 1 +x:1 +娃 19 +x:19 +采伐 1 +x:1 +青衣 1 +x:1 +商业街 1 +x:1 +编织品 1 +x:1 +木门 1 +x:1 +浇地费 1 +x:1 +虎骨酒 1 +x:1 +河沟 1 +x:1 +开掘 1 +x:1 +峻岭 1 +x:1 +感言 1 +x:1 +养伤 1 +x:1 +饭店化 1 +x:1 +呜咽 1 +x:1 +崭 1 +x:1 +埃夫拉特 1 +x:1 +吃喝风 1 +x:1 +板锉 1 +x:1 +山道年 1 +x:1 +休火山 1 +x:1 +堞 1 +x:1 +环音 1 +x:1 +牙具 1 +x:1 +楚歌 1 +x:1 +条形码 1 +x:1 +瓜子脸 1 +x:1 +冷宫 1 +x:1 +产棉区 1 +x:1 +长影 1 +x:1 +麦盖提乡 1 +x:1 +通感 1 +x:1 +冷害 1 +x:1 +大少爷 1 +x:1 +华岳 1 +x:1 +冒雨 1 +x:1 +名声鹊起 1 +x:1 +豁出 1 +x:1 +优胜赛 1 +x:1 +虚火 1 +x:1 +三洞桥 1 +x:1 +北京道 1 +x:1 +平整 1 +x:1 +扩销 1 +x:1 +夺取 1 +x:1 +精卫填海 1 +x:1 +磁能 1 +x:1 +皮革店 1 +x:1 +宋朝 1 +x:1 +咸乎乎 1 +x:1 +荒年 1 +x:1 +中国馆 1 +x:1 +北轻汽 1 +x:1 +沟北 1 +x:1 +滚圆 1 +x:1 +载重车 1 +x:1 +天电 1 +x:1 +当头 1 +x:1 +彩色棉 1 +x:1 +当天 1 +x:1 +致词 1 +x:1 +中农 1 +x:1 +长座 1 +x:1 +长度 1 +x:1 +开战 1 +x:1 +圈将 1 +x:1 +不用说 1 +x:1 +温病学 1 +x:1 +晨星 1 +x:1 +另外 1 +x:1 +当夜 1 +x:1 +一等功 1 +x:1 +叛臣 1 +x:1 +横拍 1 +x:1 +斯特鲁加 1 +x:1 +晨昏 1 +x:1 +长庆 1 +x:1 +北道区 1 +x:1 +扁担 1 +x:1 +坠入 1 +x:1 +批条 1 +x:1 +咽峡炎 1 +x:1 +溪沟 1 +x:1 +唯物论 1 +x:1 +营养 1 +x:1 +圈层 1 +x:1 +桥 192 +x:192 +营具 1 +x:1 +短尾猴 1 +x:1 +北面 1 +x:1 +安全地 1 +x:1 +感说 1 +x:1 +晨晖 1 +x:1 +大五金 1 +x:1 +助益 1 +x:1 +拷打 1 +x:1 +长廊 1 +x:1 +友好路 1 +x:1 +口哨声 1 +x:1 +安徽籍 1 +x:1 +备用 1 +x:1 +登机口 1 +x:1 +九一年 1 +x:1 +横批 1 +x:1 +青壮年人 1 +x:1 +到期日 1 +x:1 +动力学 1 +x:1 +华工 1 +x:1 +冲开 1 +x:1 +机油 1 +x:1 +横扫 1 +x:1 +伯祖 1 +x:1 +命乖运蹇 1 +x:1 +横执 1 +x:1 +茅村 1 +x:1 +渡 49 +x:49 +慈善家 1 +x:1 +副本 1 +x:1 +神似 1 +x:1 +原产地 1 +x:1 +娇艳欲滴 1 +x:1 +隐退 1 +x:1 +珍藏版 1 +x:1 +绳断 1 +x:1 +伊比利亚 1 +x:1 +神伤 1 +x:1 +匹比 1 +x:1 +刊物 1 +x:1 +尼克松 1 +x:1 +梨花 1 +x:1 +渑池县 1 +x:1 +操作间 1 +x:1 +长年 1 +x:1 +亮亮堂堂 1 +x:1 +孕期 1 +x:1 +开拍 1 +x:1 +安全型 1 +x:1 +新建路 1 +x:1 +神位 1 +x:1 +开拔 1 +x:1 +兔唇 1 +x:1 +脸色 1 +x:1 +晨曦 1 +x:1 +水准器 1 +x:1 +苟安 1 +x:1 +通性 1 +x:1 +施射 1 +x:1 +隐遁 1 +x:1 +走捷径 1 +x:1 +沟口 1 +x:1 +墨守成规 1 +x:1 +曲沃县 1 +x:1 +许家坝 1 +x:1 +九龙杯 1 +x:1 +怀 97 +x:97 +缝缝 1 +x:1 +小瓶装 1 +x:1 +中等级 1 +x:1 +啊啊 1 +x:1 +手不释卷 1 +x:1 +侮 1 +x:1 +媒质 1 +x:1 +沈厅 1 +x:1 +火控 1 +x:1 +谷城 1 +x:1 +终究 1 +x:1 +售蛋亭 1 +x:1 +贻患无穷 1 +x:1 +洲际导弹 1 +x:1 +述古 1 +x:1 +兵营 1 +x:1 +闹醒 1 +x:1 +公安军 1 +x:1 +千刀万剐 1 +x:1 +蝇粪点玉 1 +x:1 +睦邻 1 +x:1 +憨劲 1 +x:1 +事典 1 +x:1 +流离失所 1 +x:1 +宫刑 1 +x:1 +全副 1 +x:1 +乳母 1 +x:1 +全剧 1 +x:1 +逆风 1 +x:1 +红唇 1 +x:1 +快车 1 +x:1 +软环境 1 +x:1 +鲜花 1 +x:1 +消防费 1 +x:1 +竹黄 1 +x:1 +孔孟之道 1 +x:1 +绘图 1 +x:1 +铧犁 1 +x:1 +赭色 1 +x:1 +乌龟 1 +x:1 +台侨 1 +x:1 +灯绳 1 +x:1 +季世 1 +x:1 +揳入 1 +x:1 +乌龙 1 +x:1 +油腔滑调 1 +x:1 +海欣 1 +x:1 +终竟 1 +x:1 +枝蔓 1 +x:1 +竹鸡 1 +x:1 +死亡线 1 +x:1 +老调 1 +x:1 +公关部 1 +x:1 +颐 1 +x:1 +虔敬 1 +x:1 +缕 23 +x:23 +新龙华 1 +x:1 +了如指掌 1 +x:1 +赅 1 +x:1 +主表 1 +x:1 +全力 1 +x:1 +鼻子 1 +x:1 +鲜艳 1 +x:1 +鼻孔 1 +x:1 +贯流式 1 +x:1 +聚乙烯 1 +x:1 +胡兰村 1 +x:1 +谷坊 1 +x:1 +是 66090 +x:66090 +脱氧剂 1 +x:1 +天疱疮 1 +x:1 +烟火 1 +x:1 +终端 1 +x:1 +鸡首 1 +x:1 +浩繁 1 +x:1 +咸 12 +x:12 +微露 1 +x:1 +非石油 1 +x:1 +不变资本 1 +x:1 +垂拂 1 +x:1 +飞翔 1 +x:1 +卷舌音 1 +x:1 +静者 1 +x:1 +例行公事 1 +x:1 +北街 1 +x:1 +潮白河畔 1 +x:1 +台企 1 +x:1 +巨轮 1 +x:1 +屏 3 +x:3 +谷地 1 +x:1 +驳杂 1 +x:1 +愿谢 1 +x:1 +全勤 1 +x:1 +大力士 1 +x:1 +唐诗 1 +x:1 +上饶 1 +x:1 +照章办事 1 +x:1 +要目 1 +x:1 +清查 1 +x:1 +玉溪 1 +x:1 +详细 1 +x:1 +火捻 1 +x:1 +向上 1 +x:1 +闲杂人员 1 +x:1 +自动线 1 +x:1 +单轨 1 +x:1 +全区 1 +x:1 +理工大 1 +x:1 +上颚 1 +x:1 +交通警 1 +x:1 +火把 1 +x:1 +鲜菜 1 +x:1 +上颌 1 +x:1 +鲜菇 1 +x:1 +日高峰 1 +x:1 +作战区 1 +x:1 +太岳区 1 +x:1 +主角 1 +x:1 +亭台楼榭 1 +x:1 +单车 1 +x:1 +法治 1 +x:1 +叶肉 1 +x:1 +中省直 1 +x:1 +台份 1 +x:1 +主观 1 +x:1 +主见 1 +x:1 +试试看 1 +x:1 +先天性 1 +x:1 +生母 1 +x:1 +团伙 1 +x:1 +现实主义 1 +x:1 +绝倒 1 +x:1 +买路钱 1 +x:1 +假面舞 1 +x:1 +三倍体 1 +x:1 +读书 1 +x:1 +幕天席地 1 +x:1 +虚 100 +x:100 +先斩后奏 1 +x:1 +科教文 1 +x:1 +害处 1 +x:1 +管见 1 +x:1 +外盘期货 1 +x:1 +五间坊村 1 +x:1 +忙碌不堪 1 +x:1 +隆起 1 +x:1 +大公报 1 +x:1 +梵净山 1 +x:1 +持械 1 +x:1 +主要 1 +x:1 +奇士谋臣 1 +x:1 +团体 1 +x:1 +遍地开花 1 +x:1 +校准器 1 +x:1 +全县 1 +x:1 +合宜 1 +x:1 +称做 1 +x:1 +扫雷器 1 +x:1 +家属楼 1 +x:1 +撒玛拉 1 +x:1 +逸彩 1 +x:1 +慈利县 1 +x:1 +颓靡 1 +x:1 +鲜草 1 +x:1 +琴房 1 +x:1 +合容 1 +x:1 +戊寅年 1 +x:1 +思考题 1 +x:1 +缝线 1 +x:1 +合家 1 +x:1 +陈兵 1 +x:1 +欢乐树 1 +x:1 +评估组 1 +x:1 +谈心站 1 +x:1 +拉环 1 +x:1 +全厂 1 +x:1 +烟煤 1 +x:1 +加布罗沃 1 +x:1 +缝纫 1 +x:1 +雇用 1 +x:1 +乌鸦 1 +x:1 +墓场 1 +x:1 +火扇 1 +x:1 +微降 1 +x:1 +燎原之势 1 +x:1 +墓地 1 +x:1 +前 5107 +x:5107 +海运界 1 +x:1 +中山站 1 +x:1 +翔 31 +x:31 +伀法 1 +x:1 +台上 1 +x:1 +台下 1 +x:1 +远东局 1 +x:1 +支持率 1 +x:1 +灯罩 1 +x:1 +登联 1 +x:1 +所在 1 +x:1 +基本矛盾 1 +x:1 +骨气 1 +x:1 +称之为 1 +x:1 +波浪鼓 1 +x:1 +贼赃 1 +x:1 +定日 1 +x:1 +甲日乡 1 +x:1 +千言万语 1 +x:1 +台中 1 +x:1 +布告 1 +x:1 +门楣子 1 +x:1 +沈农 1 +x:1 +冠以 1 +x:1 +便捷 1 +x:1 +丈 17 +x:17 +业经 1 +x:1 +济世之志 1 +x:1 +圆周 1 +x:1 +公安县 1 +x:1 +窗帘 1 +x:1 +公安厅 1 +x:1 +称号 1 +x:1 +犯罪感 1 +x:1 +鲜能 1 +x:1 +江米 1 +x:1 +模式 1 +x:1 +值日生 1 +x:1 +残毒 1 +x:1 +悼唁 1 +x:1 +升升降降 1 +x:1 +消防艇 1 +x:1 +受损失者 1 +x:1 +宝窟 1 +x:1 +驳斥 1 +x:1 +菁 13 +x:13 +消防船 1 +x:1 +达令港 1 +x:1 +南极圈 1 +x:1 +薪水 1 +x:1 +钟鼓 1 +x:1 +无名氏 1 +x:1 +狐臊 1 +x:1 +抱头痛哭 1 +x:1 +月利率 1 +x:1 +快赛 1 +x:1 +浸入 1 +x:1 +华盛顿州 1 +x:1 +鲜肉 1 +x:1 +国债率 1 +x:1 +微闭 1 +x:1 +抬杠 1 +x:1 +大整大肃 1 +x:1 +兴国县 1 +x:1 +忠贞不二 1 +x:1 +天元战 1 +x:1 +政治性 1 +x:1 +红土 1 +x:1 +券别 1 +x:1 +巨贾 1 +x:1 +滞后 1 +x:1 +发布会 1 +x:1 +空阔无垠 1 +x:1 +飞舟 1 +x:1 +剩饭 1 +x:1 +张弓 1 +x:1 +掖 5 +x:5 +巨财 1 +x:1 +烟卷店 1 +x:1 +下同 1 +x:1 +荒烟 1 +x:1 +基音 1 +x:1 +沙棘丛 1 +x:1 +硕学耆老 1 +x:1 +候审 1 +x:1 +兴致 1 +x:1 +抬枪 1 +x:1 +绝句 1 +x:1 +日进斗金 1 +x:1 +开发者 1 +x:1 +绝口 1 +x:1 +拉炮 1 +x:1 +二甲胺 1 +x:1 +评法批儒 1 +x:1 +校门口 1 +x:1 +航空界 1 +x:1 +马家窑 1 +x:1 +高涧 1 +x:1 +辜负 1 +x:1 +陈列 1 +x:1 +油嘴 1 +x:1 +水果盘 1 +x:1 +英才 1 +x:1 +边上市 1 +x:1 +缺字 1 +x:1 +农牧业部 1 +x:1 +合声 1 +x:1 +兜揽 1 +x:1 +滥伐 1 +x:1 +层林 1 +x:1 +百老汇 1 +x:1 +为人注意 1 +x:1 +赝本 1 +x:1 +巨资 1 +x:1 +国际公法 1 +x:1 +西八间房 1 +x:1 +国画室 1 +x:1 +同声 1 +x:1 +窗式 1 +x:1 +纠风 1 +x:1 +主课 1 +x:1 +打尖 1 +x:1 +犯罪性 1 +x:1 +崔 272 +x:272 +叶酸 1 +x:1 +牛脾气 1 +x:1 +银须 1 +x:1 +石阶道 1 +x:1 +主语 1 +x:1 +委靡 1 +x:1 +火患 1 +x:1 +飞来石 1 +x:1 +执业资格 1 +x:1 +凉开水 1 +x:1 +训导员 1 +x:1 +标的额 1 +x:1 +手链 1 +x:1 +巩义 1 +x:1 +万鹤 1 +x:1 +孟 290 +x:290 +心腹之患 1 +x:1 +装船 1 +x:1 +主词 1 +x:1 +便所 1 +x:1 +照样 1 +x:1 +主讲 1 +x:1 +底儿 1 +x:1 +五年期 1 +x:1 +火情 1 +x:1 +海棠 1 +x:1 +提携 1 +x:1 +全关 1 +x:1 +藏书票 1 +x:1 +特此 1 +x:1 +支队长 1 +x:1 +合奏 1 +x:1 +全党 1 +x:1 +蒙彼利埃 1 +x:1 +喝声 1 +x:1 +长线产品 1 +x:1 +新闻部 1 +x:1 +留置权 1 +x:1 +先入者 1 +x:1 +口陈肝胆 1 +x:1 +无心恋战 1 +x:1 +爱岗敬业 1 +x:1 +学生处 1 +x:1 +晒台 1 +x:1 +请客 1 +x:1 +风雨凄凄 1 +x:1 +旅客量 1 +x:1 +诸暨 1 +x:1 +提擢 1 +x:1 +制衣 1 +x:1 +修润 1 +x:1 +震毁 1 +x:1 +全权代表 1 +x:1 +全军 1 +x:1 +圣 14 +x:14 +特殊 1 +x:1 +火性 1 +x:1 +火急 1 +x:1 +到此一游 1 +x:1 +粪 26 +x:26 +奋发 1 +x:1 +荒滩地 1 +x:1 +半途 1 +x:1 +别开生面 1 +x:1 +西坡柏乡 1 +x:1 +毒理学 1 +x:1 +耽心 1 +x:1 +粤南 1 +x:1 +溪口 1 +x:1 +溯至 1 +x:1 +火烧山 1 +x:1 +免除 1 +x:1 +停止不前 1 +x:1 +碎语 1 +x:1 +宫内 1 +x:1 +泉沟镇 1 +x:1 +裸机 1 +x:1 +沟通者 1 +x:1 +展 131 +x:131 +言听计从 1 +x:1 +迢迢渺渺 1 +x:1 +毛巾被 1 +x:1 +瓮中捉鳖 1 +x:1 +蛤蟆街 1 +x:1 +名优特产 1 +x:1 +上马 1 +x:1 +底册 1 +x:1 +含苞待放 1 +x:1 +七十二行 1 +x:1 +多普尔 1 +x:1 +粤北 1 +x:1 +一不小心 1 +x:1 +收费路 1 +x:1 +晒烟 1 +x:1 +谷口 1 +x:1 +南极光 1 +x:1 +无冬眠 1 +x:1 +新仇旧恨 1 +x:1 +运走 1 +x:1 +细胞 1 +x:1 +公估行 1 +x:1 +不可多得 1 +x:1 +俗体字 1 +x:1 +非职业 1 +x:1 +鲜蛋 1 +x:1 +桥岩山 1 +x:1 +旦夕存亡 1 +x:1 +扎兰屯市 1 +x:1 +从轮 1 +x:1 +拉动 1 +x:1 +火枪 1 +x:1 +旧故 1 +x:1 +亲爱的 1 +x:1 +售卖 1 +x:1 +眺望 1 +x:1 +襄城县 1 +x:1 +区 857 +x:857 +保险者 1 +x:1 +红党 1 +x:1 +银鼠 1 +x:1 +陆战队 1 +x:1 +污垢 1 +x:1 +传送带 1 +x:1 +大脑炎 1 +x:1 +经营科 1 +x:1 +哆来咪 1 +x:1 +老黄历 1 +x:1 +杀伤 1 +x:1 +沈城 1 +x:1 +前胸袋 1 +x:1 +信据 1 +x:1 +紧缩型 1 +x:1 +挛缩 1 +x:1 +庙宇镇 1 +x:1 +填表权 1 +x:1 +绝唱 1 +x:1 +继 272 +x:272 +翠菊 1 +x:1 +合并 1 +x:1 +浙江省乡 1 +x:1 +巧妙 1 +x:1 +视力表 1 +x:1 +透明体 1 +x:1 +火柱 1 +x:1 +火柴 1 +x:1 +玉帛 1 +x:1 +警风 1 +x:1 +可离性 1 +x:1 +务在 1 +x:1 +偷税案 1 +x:1 +银花霓影 1 +x:1 +仍旧 1 +x:1 +探测车 1 +x:1 +麦穗儿 1 +x:1 +琴棋书画 1 +x:1 +两面派 1 +x:1 +烛光 1 +x:1 +半斤八两 1 +x:1 +胡须 1 +x:1 +红净 1 +x:1 +历史者 1 +x:1 +表现欲 1 +x:1 +拌种 1 +x:1 +登山路 1 +x:1 +审计官 1 +x:1 +祸起萧墙 1 +x:1 +矿床 1 +x:1 +风动石 1 +x:1 +快论 1 +x:1 +绘制 1 +x:1 +江底 1 +x:1 +稿 94 +x:94 +嘉黎县 1 +x:1 +美男子 1 +x:1 +芭蕾舞 1 +x:1 +全国 1 +x:1 +泪滴 1 +x:1 +海潮 1 +x:1 +不攻自破 1 +x:1 +教科省 1 +x:1 +外长 1 +x:1 +钢球 1 +x:1 +细者 1 +x:1 +全园 1 +x:1 +全团 1 +x:1 +爬墙虎 1 +x:1 +皮艇 1 +x:1 +鼻弯 1 +x:1 +合建 1 +x:1 +终线 1 +x:1 +摩纳哥队 1 +x:1 +拉直 1 +x:1 +排水闸 1 +x:1 +主调 1 +x:1 +责罚 1 +x:1 +国画展 1 +x:1 +布势 1 +x:1 +一语中的 1 +x:1 +主谋 1 +x:1 +喝彩 1 +x:1 +红军 1 +x:1 +全场 1 +x:1 +合浦还珠 1 +x:1 +发痧 1 +x:1 +交通车 1 +x:1 +社兰村 1 +x:1 +血液病 1 +x:1 +窗外 1 +x:1 +小商贩 1 +x:1 +族人 1 +x:1 +英文 1 +x:1 +特派 1 +x:1 +合开 1 +x:1 +主跨 1 +x:1 +涎水 1 +x:1 +前卫镇 1 +x:1 +正儿八经 1 +x:1 +细致 1 +x:1 +英方 1 +x:1 +汤锅 1 +x:1 +灯管 1 +x:1 +浅红 1 +x:1 +史书 1 +x:1 +不锈钢板 1 +x:1 +海源 1 +x:1 +专权 1 +x:1 +大政方针 1 +x:1 +伊万诺夫 1 +x:1 +灯箱 1 +x:1 +电冰箱 1 +x:1 +工本 1 +x:1 +澄清 1 +x:1 +便携 1 +x:1 +稿纸 1 +x:1 +火灼灼 1 +x:1 +吉莱巴 1 +x:1 +光溜溜 1 +x:1 +星期一 1 +x:1 +布包 1 +x:1 +海滨 1 +x:1 +土豪劣绅 1 +x:1 +令人称奇 1 +x:1 +企划部 1 +x:1 +稿约 1 +x:1 +摔交 1 +x:1 +直管 1 +x:1 +实船 1 +x:1 +底土 1 +x:1 +善罢甘休 1 +x:1 +业务部 1 +x:1 +载弹量 1 +x:1 +甬路 1 +x:1 +合影 1 +x:1 +垂杨 1 +x:1 +河顺镇 1 +x:1 +巴伦支海 1 +x:1 +嵩 5 +x:5 +布匹 1 +x:1 +沈园 1 +x:1 +史中 1 +x:1 +小桥流水 1 +x:1 +值日牌 1 +x:1 +灭荒县 1 +x:1 +特效药 1 +x:1 +海港 1 +x:1 +海温 1 +x:1 +黑下脸 1 +x:1 +绝品 1 +x:1 +回水沟 1 +x:1 +绝响 1 +x:1 +制空权 1 +x:1 +朝圣者 1 +x:1 +料件 1 +x:1 +火星 1 +x:1 +奥胜队 1 +x:1 +贵南县 1 +x:1 +陈家屯 1 +x:1 +专柜 1 +x:1 +细腻 1 +x:1 +大风大浪 1 +x:1 +称呼 1 +x:1 +中龄林 1 +x:1 +灯笼 1 +x:1 +黑麦草 1 +x:1 +去冬今春 1 +x:1 +陈家山 1 +x:1 +跌进 1 +x:1 +墓区 1 +x:1 +满堂红 1 +x:1 +运费 1 +x:1 +往年 1 +x:1 +免遭 1 +x:1 +布厂 1 +x:1 +寸木岑楼 1 +x:1 +用血量 1 +x:1 +清朴 1 +x:1 +傻帽儿 1 +x:1 +海湾 1 +x:1 +工架 1 +x:1 +史事 1 +x:1 +时装展 1 +x:1 +摆件 1 +x:1 +券商 1 +x:1 +烟田 1 +x:1 +字码儿 1 +x:1 +都港区 1 +x:1 +系统论 1 +x:1 +全城 1 +x:1 +长长地 1 +x:1 +菌斑 1 +x:1 +大而化之 1 +x:1 +首当其冲 1 +x:1 +张贴者 1 +x:1 +一斑窥豹 1 +x:1 +洁霉素 1 +x:1 +九五年 1 +x:1 +菌料 1 +x:1 +使势 1 +x:1 +水天一色 1 +x:1 +切当 1 +x:1 +泪水 1 +x:1 +长抽短吊 1 +x:1 +管身 1 +x:1 +石河子市 1 +x:1 +烟盒 1 +x:1 +主题曲 1 +x:1 +河畔 1 +x:1 +叙 99 +x:99 +情绪链 1 +x:1 +震情室 1 +x:1 +战 440 +x:440 +汤阴 1 +x:1 +玉桂 1 +x:1 +劳逸结合 1 +x:1 +便条 1 +x:1 +啃书本 1 +x:1 +裙带关系 1 +x:1 +兵船 1 +x:1 +海涂 1 +x:1 +矿尘 1 +x:1 +剑羚 1 +x:1 +兵舰 1 +x:1 +债市 1 +x:1 +小孩儿 1 +x:1 +请帖 1 +x:1 +微醺 1 +x:1 +付费 1 +x:1 +举世闻名 1 +x:1 +爱卫办 1 +x:1 +全名 1 +x:1 +三青团 1 +x:1 +海涛 1 +x:1 +布偶 1 +x:1 +军中 1 +x:1 +军乐 1 +x:1 +气压计 1 +x:1 +牛心白 1 +x:1 +球市 1 +x:1 +示警 1 +x:1 +虎伥 1 +x:1 +像 1992 +x:1992 +种质 1 +x:1 +细节 1 +x:1 +冒尖户 1 +x:1 +切开 1 +x:1 +墙角 1 +x:1 +玉林市 1 +x:1 +红包 1 +x:1 +谷内 1 +x:1 +绝地 1 +x:1 +海淀 1 +x:1 +举荐 1 +x:1 +非武力 1 +x:1 +模子 1 +x:1 +便服 1 +x:1 +叹 51 +x:51 +收费表 1 +x:1 +邻鄂乡 1 +x:1 +矿层 1 +x:1 +矿局 1 +x:1 +筑路 1 +x:1 +快要 1 +x:1 +巡警班 1 +x:1 +院务 1 +x:1 +红叶 1 +x:1 +扫雷兵 1 +x:1 +红史 1 +x:1 +军事 1 +x:1 +海派 1 +x:1 +切忌 1 +x:1 +柔波 1 +x:1 +英明 1 +x:1 +罐体 1 +x:1 +红参 1 +x:1 +新老朋友 1 +x:1 +军人 1 +x:1 +海洋 1 +x:1 +风餐露宿 1 +x:1 +心力交瘁 1 +x:1 +惊惶失措 1 +x:1 +参观点 1 +x:1 +含糖量 1 +x:1 +线装 1 +x:1 +专擅 1 +x:1 +肿瘤学家 1 +x:1 +毛石 1 +x:1 +震源 1 +x:1 +加入者 1 +x:1 +迟缓 1 +x:1 +海浪 1 +x:1 +苗条素 1 +x:1 +椅背 1 +x:1 +互信 1 +x:1 +印象分 1 +x:1 +总流量 1 +x:1 +乳浆 1 +x:1 +仿古砖 1 +x:1 +烟瘾 1 +x:1 +线袜 1 +x:1 +海流 1 +x:1 +避孕套 1 +x:1 +久闻其名 1 +x:1 +哨所 1 +x:1 +红原 1 +x:1 +德才 1 +x:1 +滚 55 +x:55 +海沧 1 +x:1 +鸡鸣 1 +x:1 +恶性循环 1 +x:1 +细菜 1 +x:1 +互为 1 +x:1 +饶阳县 1 +x:1 +狸藻 1 +x:1 +海河 1 +x:1 +布兜 1 +x:1 +工整 1 +x:1 +方山村 1 +x:1 +时装店 1 +x:1 +表扬话 1 +x:1 +作响 1 +x:1 +工效 1 +x:1 +球形 1 +x:1 +冤情 1 +x:1 +神圣同盟 1 +x:1 +遗失物 1 +x:1 +北辰 1 +x:1 +闭幕词 1 +x:1 +互不 1 +x:1 +梨园镇 1 +x:1 +北边 1 +x:1 +军体 1 +x:1 +视频 1 +x:1 +儿科病 1 +x:1 +专政 1 +x:1 +海波 1 +x:1 +重拳 1 +x:1 +返璞归真 1 +x:1 +永顺县 1 +x:1 +汤面 1 +x:1 +红利 1 +x:1 +晒场 1 +x:1 +窗子 1 +x:1 +交通费 1 +x:1 +梧桐花镇 1 +x:1 +分摊金 1 +x:1 +大难临头 1 +x:1 +桔黄 1 +x:1 +普天下 1 +x:1 +百听不厌 1 +x:1 +兴衰与共 1 +x:1 +下吴村 1 +x:1 +邀请展 1 +x:1 +闷 12 +x:12 +进出口业 1 +x:1 +直隶省 1 +x:1 +披麻带孝 1 +x:1 +跌跤 1 +x:1 +帐篷街 1 +x:1 +地动山摇 1 +x:1 +樯桅 1 +x:1 +监察界 1 +x:1 +综艺 1 +x:1 +膀大腰圆 1 +x:1 +泪液 1 +x:1 +储血 1 +x:1 +湘阴县队 1 +x:1 +海水 1 +x:1 +沈后 1 +x:1 +工时 1 +x:1 +谝 1 +x:1 +艺界 1 +x:1 +殚精竭虑 1 +x:1 +铲雪车 1 +x:1 +皮里阳秋 1 +x:1 +结结巴巴 1 +x:1 +村提留 1 +x:1 +大明镇 1 +x:1 +隶 4 +x:4 +窗格子 1 +x:1 +强词夺理 1 +x:1 +德冲寺 1 +x:1 +枝城市 1 +x:1 +缟素 1 +x:1 +残渣 1 +x:1 +皱巴巴 1 +x:1 +布军 1 +x:1 +银鲳 1 +x:1 +专断 1 +x:1 +柔润 1 +x:1 +乳汁 1 +x:1 +版画家 1 +x:1 +罐中 1 +x:1 +英杰 1 +x:1 +鼻尖 1 +x:1 +殉葬品 1 +x:1 +布冧 1 +x:1 +菌林 1 +x:1 +该社 1 +x:1 +工料 1 +x:1 +挺身而出 1 +x:1 +北轻 1 +x:1 +手工业 1 +x:1 +饱餐 1 +x:1 +沃 8 +x:8 +遐想 1 +x:1 +瞠目 1 +x:1 +布幅 1 +x:1 +龙洞村 1 +x:1 +合刊 1 +x:1 +兵谏 1 +x:1 +冲赛康 1 +x:1 +拉稀 1 +x:1 +举贤 1 +x:1 +机车组 1 +x:1 +孱弱 1 +x:1 +泰拳 1 +x:1 +旋耕机 1 +x:1 +交通艇 1 +x:1 +现眼 1 +x:1 +警钟 1 +x:1 +切入 1 +x:1 +香蒿 1 +x:1 +仰山村 1 +x:1 +香蒲 1 +x:1 +务实 1 +x:1 +灯盏 1 +x:1 +震怒 1 +x:1 +藉 3 +x:3 +布市 1 +x:1 +领头人 1 +x:1 +不可捉摸 1 +x:1 +布帛 1 +x:1 +专横 1 +x:1 +监测船 1 +x:1 +布帘 1 +x:1 +离群索居 1 +x:1 +抽象化 1 +x:1 +合剂 1 +x:1 +遗作展 1 +x:1 +菌核 1 +x:1 +请假 1 +x:1 +骨料 1 +x:1 +北胡 1 +x:1 +巨蟒 1 +x:1 +烟碱 1 +x:1 +警铃 1 +x:1 +布帽 1 +x:1 +罕见 1 +x:1 +合力 1 +x:1 +烟硝 1 +x:1 +浩白 1 +x:1 +海挡 1 +x:1 +准字号 1 +x:1 +饲养量 1 +x:1 +帅哥儿 1 +x:1 +偶数 1 +x:1 +震情 1 +x:1 +营养物 1 +x:1 +无缝门 1 +x:1 +震惊 1 +x:1 +矿务 1 +x:1 +公安处 1 +x:1 +熔化 1 +x:1 +港 450 +x:450 +鱼虫 1 +x:1 +乌青 1 +x:1 +目标区 1 +x:1 +巨蜂 1 +x:1 +岸 45 +x:45 +所幸 1 +x:1 +功法 1 +x:1 +班主 1 +x:1 +疑虑 1 +x:1 +悼念 1 +x:1 +头重脚轻 1 +x:1 +仲秋 1 +x:1 +阅看 1 +x:1 +特惠 1 +x:1 +绝妙 1 +x:1 +夜中学 1 +x:1 +扑腾 1 +x:1 +名目繁多 1 +x:1 +水果糖 1 +x:1 +迎难而上 1 +x:1 +蔽日遮天 1 +x:1 +趁机 1 +x:1 +催眠 1 +x:1 +兴许 1 +x:1 +没皮没脸 1 +x:1 +这边 1 +x:1 +加固费 1 +x:1 +人人喊打 1 +x:1 +海损 1 +x:1 +光导管 1 +x:1 +亚行 1 +x:1 +抗拒 1 +x:1 +保险费 1 +x:1 +海报 1 +x:1 +矿区 1 +x:1 +震慑 1 +x:1 +耆 2 +x:2 +便桶 1 +x:1 +静观 1 +x:1 +鲑鱼 1 +x:1 +财迷 1 +x:1 +终审 1 +x:1 +红山 1 +x:1 +饺子皮 1 +x:1 +线列 1 +x:1 +便桥 1 +x:1 +专武 1 +x:1 +清仓 1 +x:1 +独往独来 1 +x:1 +乳腺癌 1 +x:1 +底孔 1 +x:1 +璀璨 1 +x:1 +档案袋 1 +x:1 +墓志 1 +x:1 +底子 1 +x:1 +清代 1 +x:1 +航空线 1 +x:1 +版权业 1 +x:1 +财运 1 +x:1 +猿叶虫 1 +x:1 +东四合村 1 +x:1 +香薷 1 +x:1 +芙蓉 1 +x:1 +受污染区 1 +x:1 +专款 1 +x:1 +登山者 1 +x:1 +震感 1 +x:1 +微黄 1 +x:1 +澄浆泥 1 +x:1 +嗓 4 +x:4 +所得 1 +x:1 +学院 1 +x:1 +深色纹 1 +x:1 +合十 1 +x:1 +竹韵 1 +x:1 +奠 1 +x:1 +清亮 1 +x:1 +有效期 1 +x:1 +安老 1 +x:1 +绍籍 1 +x:1 +清产 1 +x:1 +淡妆 1 +x:1 +抗压强度 1 +x:1 +热心肠 1 +x:1 +元代 1 +x:1 +谷底 1 +x:1 +海拔 1 +x:1 +球儿 1 +x:1 +清人 1 +x:1 +盘山道 1 +x:1 +红尘 1 +x:1 +正梁 1 +x:1 +新兴村 1 +x:1 +垂死 1 +x:1 +唐花 1 +x:1 +一晃 1 +x:1 +豆美丝 1 +x:1 +全家 1 +x:1 +两面性 1 +x:1 +财产权 1 +x:1 +绝壁 1 +x:1 +上选 1 +x:1 +边检站 1 +x:1 +上送 1 +x:1 +班会 1 +x:1 +鸥 1 +x:1 +不堪重负 1 +x:1 +变化图 1 +x:1 +江心 1 +x:1 +共同语 1 +x:1 +照拂 1 +x:1 +一脉相通 1 +x:1 +岐阜县 1 +x:1 +庭长 1 +x:1 +奋发有为 1 +x:1 +香蕉 1 +x:1 +香蕈 1 +x:1 +注册证 1 +x:1 +害农 1 +x:1 +热心者 1 +x:1 +契约型 1 +x:1 +红岩 1 +x:1 +玉林 1 +x:1 +警长 1 +x:1 +全寨 1 +x:1 +烧伤 1 +x:1 +怠惰 1 +x:1 +绝境 1 +x:1 +视阈 1 +x:1 +三姑六婆 1 +x:1 +量出为入 1 +x:1 +买价 1 +x:1 +海扇 1 +x:1 +主脑 1 +x:1 +宫室 1 +x:1 +防疫针 1 +x:1 +合叶 1 +x:1 +育空 1 +x:1 +清丽 1 +x:1 +璀瑰 1 +x:1 +照抄 1 +x:1 +阜阳市 1 +x:1 +石板镇 1 +x:1 +熔剂 1 +x:1 +清丰 1 +x:1 +系词 1 +x:1 +磁谱仪 1 +x:1 +登记 1 +x:1 +油纸 1 +x:1 +河神 1 +x:1 +综述 1 +x:1 +非加太 1 +x:1 +熔冶 1 +x:1 +布局 1 +x:1 +永兴岛 1 +x:1 +新开岭 1 +x:1 +彷徨 1 +x:1 +双轨制 1 +x:1 +一无所获 1 +x:1 +债券 1 +x:1 +作协 1 +x:1 +鲜牛奶 1 +x:1 +布展 1 +x:1 +流失 1 +x:1 +R 1 +x:1 +有待 1 +x:1 +到点 1 +x:1 +牛奶业 1 +x:1 +绝学 1 +x:1 +练达 1 +x:1 +盛气凌人 1 +x:1 +外环线 1 +x:1 +证 140 +x:140 +留学者 1 +x:1 +带勤率 1 +x:1 +燃气体 1 +x:1 +孰知 1 +x:1 +工校 1 +x:1 +蛇根草 1 +x:1 +n 4 +x:4 +特批 1 +x:1 +盛名之下 1 +x:1 +形 103 +x:103 +北苑 1 +x:1 +男盗女娼 1 +x:1 +柔性 1 +x:1 +考古队 1 +x:1 +布尔 1 +x:1 +富源县 1 +x:1 +全盘皆输 1 +x:1 +并购案 1 +x:1 +专任 1 +x:1 +贝布托 1 +x:1 +邱县 1 +x:1 +歌坛 1 +x:1 +实质 1 +x:1 +相片 1 +x:1 +造成 1 +x:1 +育秧 1 +x:1 +专栏 1 +x:1 +黄蜂队 1 +x:1 +投稿人 1 +x:1 +承销 1 +x:1 +恳挚 1 +x:1 +男朋友 1 +x:1 +特需品 1 +x:1 +犀 1 +x:1 +天井式 1 +x:1 +硬纸板 1 +x:1 +初具规模 1 +x:1 +债务 1 +x:1 +底壳 1 +x:1 +切变 1 +x:1 +俊才 1 +x:1 +绝密 1 +x:1 +歪曲 1 +x:1 +恩重如山 1 +x:1 +鲜血 1 +x:1 +独幕剧 1 +x:1 +闽中 1 +x:1 +乙酸 1 +x:1 +货架子 1 +x:1 +所属 1 +x:1 +时装化 1 +x:1 +乌镇 1 +x:1 +烛影 1 +x:1 +红心 1 +x:1 +闽东 1 +x:1 +骨材 1 +x:1 +绝对 1 +x:1 +便毒 1 +x:1 +警队 1 +x:1 +英模 1 +x:1 +嘶 2 +x:2 +洋里洋气 1 +x:1 +切口 1 +x:1 +王国 1 +x:1 +砷 2 +x:2 +工棚 1 +x:1 +请功 1 +x:1 +酸雨区 1 +x:1 +柔情 1 +x:1 +残损 1 +x:1 +沈大 1 +x:1 +解甲沟村 1 +x:1 +松江路 1 +x:1 +邱北 1 +x:1 +痛史 1 +x:1 +打零工 1 +x:1 +鼻儿 1 +x:1 +骨朵 1 +x:1 +狐 7 +x:7 +骨木 1 +x:1 +共同语言 1 +x:1 +现症 1 +x:1 +请勿 1 +x:1 +宫墙 1 +x:1 +邀请函 1 +x:1 +一展雄姿 1 +x:1 +慰劳 1 +x:1 +终点 1 +x:1 +聚会党 1 +x:1 +温汤浸种 1 +x:1 +买方 1 +x:1 +底墒 1 +x:1 +特招 1 +x:1 +酽 1 +x:1 +信手 1 +x:1 +买断 1 +x:1 +中南 1 +x:1 +财路 1 +x:1 +支持票 1 +x:1 +阿比让 1 +x:1 +拜年钱 1 +x:1 +全天 1 +x:1 +嫦娥 1 +x:1 +鲜见 1 +x:1 +工楷 1 +x:1 +新军屯镇 1 +x:1 +切削 1 +x:1 +绵邃 1 +x:1 +频繁 1 +x:1 +轴线 1 +x:1 +大队人马 1 +x:1 +切割 1 +x:1 +自立军 1 +x:1 +特指 1 +x:1 +主菜 1 +x:1 +宫女 1 +x:1 +发展费 1 +x:1 +自小 1 +x:1 +坍缩星 1 +x:1 +有张有弛 1 +x:1 +纹 11 +x:11 +参与面 1 +x:1 +全备 1 +x:1 +全处 1 +x:1 +泵站 1 +x:1 +临江楼 1 +x:1 +提水 1 +x:1 +细辛 1 +x:1 +转换率 1 +x:1 +春熙路 1 +x:1 +血丝乎拉 1 +x:1 +切切 1 +x:1 +火棒 1 +x:1 +铕 1 +x:1 +牝牛 1 +x:1 +佘 18 +x:18 +空白符 1 +x:1 +红帆 1 +x:1 +陈宿 1 +x:1 +合共 1 +x:1 +全套 1 +x:1 +肉汤 1 +x:1 +小户 1 +x:1 +见风是雨 1 +x:1 +底处 1 +x:1 +犯罪案 1 +x:1 +完好无缺 1 +x:1 +超级稻 1 +x:1 +合写 1 +x:1 +矿冶 1 +x:1 +四世同堂 1 +x:1 +暗自 1 +x:1 +翠谷 1 +x:1 +犹太化 1 +x:1 +世态炎凉 1 +x:1 +直愣愣 1 +x:1 +遮蔽 1 +x:1 +不公正性 1 +x:1 +营销部 1 +x:1 +提法 1 +x:1 +探险片 1 +x:1 +驯兽 1 +x:1 +远谋 1 +x:1 +演出票 1 +x:1 +沽名钓誉 1 +x:1 +球台 1 +x:1 +冼 8 +x:8 +细软 1 +x:1 +粘合 1 +x:1 +水法 1 +x:1 +需要 1 +x:1 +美玉 1 +x:1 +理工科 1 +x:1 +鉴别仪 1 +x:1 +危崖之巅 1 +x:1 +旗帜鲜明 1 +x:1 +纯净水 1 +x:1 +龙吴港 1 +x:1 +呕 1 +x:1 +还 10551 +x:10551 +数学系 1 +x:1 +财贸 1 +x:1 +冤家路窄 1 +x:1 +万难 1 +x:1 +讯问室 1 +x:1 +巨著 1 +x:1 +全委 1 +x:1 +手杖 1 +x:1 +定期 1 +x:1 +腰板儿 1 +x:1 +险象环生 1 +x:1 +冤气 1 +x:1 +购买力 1 +x:1 +估价师 1 +x:1 +翘尾巴 1 +x:1 +分线规 1 +x:1 +公有性 1 +x:1 +代表组 1 +x:1 +通信团 1 +x:1 +河网 1 +x:1 +年薪制 1 +x:1 +球员 1 +x:1 +因而 1 +x:1 +全席 1 +x:1 +成人者 1 +x:1 +半音 1 +x:1 +芟 1 +x:1 +争嘴 1 +x:1 +香肠 1 +x:1 +踬 1 +x:1 +营养盐 1 +x:1 +沈微 1 +x:1 +红契 1 +x:1 +厄方 1 +x:1 +笛箫 1 +x:1 +谦虚谨慎 1 +x:1 +警声大作 1 +x:1 +金银花 1 +x:1 +综览 1 +x:1 +堆金积玉 1 +x:1 +海查 1 +x:1 +独木舟队 1 +x:1 +提款 1 +x:1 +迟疑 1 +x:1 +共同纲领 1 +x:1 +和合雅俗 1 +x:1 +津南区 1 +x:1 +模具 1 +x:1 +岩画区 1 +x:1 +马鞍山乡 1 +x:1 +小孩子 1 +x:1 +诗刊社 1 +x:1 +有形 1 +x:1 +务必 1 +x:1 +哨棒 1 +x:1 +美甲天下 1 +x:1 +红外 1 +x:1 +旺期 1 +x:1 +上门 1 +x:1 +鼓楼区 1 +x:1 +铁路线 1 +x:1 +潢川 1 +x:1 +单褂 1 +x:1 +侨领 1 +x:1 +其貌不扬 1 +x:1 +浩特 1 +x:1 +柔曼 1 +x:1 +安第斯山 1 +x:1 +火漆 1 +x:1 +万金 1 +x:1 +张集乡 1 +x:1 +统招生 1 +x:1 +陈展 1 +x:1 +受灾面 1 +x:1 +帆布 1 +x:1 +这话 1 +x:1 +实词 1 +x:1 +直略河 1 +x:1 +倾羡 1 +x:1 +阿里山 1 +x:1 +主著 1 +x:1 +陈屿 1 +x:1 +拉线 1 +x:1 +人际关系 1 +x:1 +旆 1 +x:1 +喜气洋洋 1 +x:1 +残敌 1 +x:1 +宫廷 1 +x:1 +革职 1 +x:1 +谷子 1 +x:1 +钞本 1 +x:1 +秸子 1 +x:1 +赞皇 1 +x:1 +拉纤 1 +x:1 +爿 6 +x:6 +满意率 1 +x:1 +环氧树脂 1 +x:1 +巧儿 1 +x:1 +拉绒 1 +x:1 +售票人 1 +x:1 +出殡 1 +x:1 +庆阳 1 +x:1 +书摊儿 1 +x:1 +浙东 1 +x:1 +主营 1 +x:1 +自居 1 +x:1 +海松 1 +x:1 +底座 1 +x:1 +亮晃晃 1 +x:1 +榕江县 1 +x:1 +药用菌 1 +x:1 +海杆 1 +x:1 +改换门庭 1 +x:1 +浙中 1 +x:1 +震撼 1 +x:1 +滨湖 1 +x:1 +静谧 1 +x:1 +诉说 1 +x:1 +出肉率 1 +x:1 +东西 1 +x:1 +鱼水深情 1 +x:1 +子题目 1 +x:1 +柔板 1 +x:1 +水泡状 1 +x:1 +工潮 1 +x:1 +陈州 1 +x:1 +矿场 1 +x:1 +宫灯 1 +x:1 +矿地 1 +x:1 +煤烟型 1 +x:1 +火源 1 +x:1 +老八路 1 +x:1 +茅草房 1 +x:1 +薛 255 +x:255 +飞沙走石 1 +x:1 +经营点 1 +x:1 +微型车 1 +x:1 +蒙皮 1 +x:1 +多普勒 1 +x:1 +上钩 1 +x:1 +鲜迭 1 +x:1 +放慢 1 +x:1 +上钢 1 +x:1 +倾 71 +x:71 +电话杆 1 +x:1 +绝少 1 +x:1 +拉网 1 +x:1 +斌 156 +x:156 +柔术 1 +x:1 +慰唁 1 +x:1 +航空站 1 +x:1 +上铁 1 +x:1 +墓室 1 +x:1 +历史观 1 +x:1 +科艺楼 1 +x:1 +上铺 1 +x:1 +孝亲 1 +x:1 +淋淋 1 +x:1 +买房 1 +x:1 +误 110 +x:110 +特教 1 +x:1 +数 575 +x:575 +举行 1 +x:1 +江猪 1 +x:1 +谈不上 1 +x:1 +照明 1 +x:1 +批评声 1 +x:1 +红壤 1 +x:1 +东昌府区 1 +x:1 +驻马店市 1 +x:1 +创立者 1 +x:1 +打孔器 1 +x:1 +巨舰 1 +x:1 +甚嚣尘上 1 +x:1 +铁路网 1 +x:1 +拉美 1 +x:1 +遐思 1 +x:1 +平江县队 1 +x:1 +腮腺炎 1 +x:1 +日臻成熟 1 +x:1 +现状 1 +x:1 +反馈簿 1 +x:1 +火温 1 +x:1 +墓子 1 +x:1 +龙门镇 1 +x:1 +绵阳 1 +x:1 +卫生设备 1 +x:1 +求医者 1 +x:1 +死亡率 1 +x:1 +海星 1 +x:1 +画 599 +x:599 +闭会 1 +x:1 +羊胡子草 1 +x:1 +蝇 6 +x:6 +海景 1 +x:1 +体制性 1 +x:1 +桉树苗 1 +x:1 +异味 1 +x:1 +望平台 1 +x:1 +淋浴 1 +x:1 +挪威王国 1 +x:1 +骨性 1 +x:1 +莒南县 1 +x:1 +委任状 1 +x:1 +帆影 1 +x:1 +酌处 1 +x:1 +公安局 1 +x:1 +哦 21 +x:21 +孤单单 1 +x:1 +浅白 1 +x:1 +齐头并进 1 +x:1 +了解 1 +x:1 +推荐者 1 +x:1 +油茶籽 1 +x:1 +红墙 1 +x:1 +堪市 1 +x:1 +切块 1 +x:1 +红学 1 +x:1 +事无巨细 1 +x:1 +医卫界 1 +x:1 +滨河 1 +x:1 +噬脐莫及 1 +x:1 +造景 1 +x:1 +乐观者 1 +x:1 +称心 1 +x:1 +乌斯塔夏 1 +x:1 +合同 1 +x:1 +翻斗车 1 +x:1 +樘 2 +x:2 +视野 1 +x:1 +泛音 1 +x:1 +克拉玛依 1 +x:1 +纺纱机 1 +x:1 +钧 25 +x:25 +兴起 1 +x:1 +无线电 1 +x:1 +蝴蝶结 1 +x:1 +凌云之志 1 +x:1 +声誉鹊起 1 +x:1 +鼓鼓掌 1 +x:1 +内司委 1 +x:1 +年逾花甲 1 +x:1 +激酶 1 +x:1 +颓风 1 +x:1 +乌金 1 +x:1 +批评家 1 +x:1 +称快 1 +x:1 +一月 1 +x:1 +拉簧 1 +x:1 +底层 1 +x:1 +苇锥子 1 +x:1 +务工 1 +x:1 +窗前 1 +x:1 +综论 1 +x:1 +银锭 1 +x:1 +瞬息万变 1 +x:1 +正仪镇 1 +x:1 +杏五区 1 +x:1 +太岳山 1 +x:1 +保有量 1 +x:1 +茬儿 1 +x:1 +遵化市 1 +x:1 +跌落 1 +x:1 +论斤计两 1 +x:1 +陈庄 1 +x:1 +找茬儿 1 +x:1 +地役权 1 +x:1 +全属 1 +x:1 +人道主义 1 +x:1 +地质所 1 +x:1 +言情小说 1 +x:1 +大嫂子 1 +x:1 +巨臂 1 +x:1 +全局 1 +x:1 +独特 1 +x:1 +务川 1 +x:1 +蚁社 1 +x:1 +恳望 1 +x:1 +攻击型 1 +x:1 +奇珍异宝 1 +x:1 +沼气式 1 +x:1 +洋模特 1 +x:1 +奈何 1 +x:1 +照旧 1 +x:1 +墙脚 1 +x:1 +合咏 1 +x:1 +当选者 1 +x:1 +海政 1 +x:1 +挣扎 1 +x:1 +成人节 1 +x:1 +残杀 1 +x:1 +吧 435 +x:435 +环颈鸫 1 +x:1 +模压 1 +x:1 +陈年 1 +x:1 +火洲 1 +x:1 +果林业 1 +x:1 +工法 1 +x:1 +一朝 1 +x:1 +侄女婿 1 +x:1 +黄鱼村 1 +x:1 +战无不胜 1 +x:1 +持有 1 +x:1 +登载 1 +x:1 +残本 1 +x:1 +坑 69 +x:69 +货位费 1 +x:1 +巧匠 1 +x:1 +广电局 1 +x:1 +风景树 1 +x:1 +领事部 1 +x:1 +绵长 1 +x:1 +浩瀚 1 +x:1 +灯火 1 +x:1 +滨江 1 +x:1 +批评学 1 +x:1 +残月 1 +x:1 +红安 1 +x:1 +垂泪 1 +x:1 +数学科 1 +x:1 +海庄村 1 +x:1 +廊坊籍 1 +x:1 +蟾宫 1 +x:1 +火海 1 +x:1 +恩恩怨怨 1 +x:1 +劳动部 1 +x:1 +举证 1 +x:1 +香艳 1 +x:1 +头昏脑胀 1 +x:1 +调度室 1 +x:1 +上面 1 +x:1 +彼时 1 +x:1 +侵食 1 +x:1 +如坐云雾 1 +x:1 +三教堂 1 +x:1 +成人之美 1 +x:1 +露天浴 1 +x:1 +球坛 1 +x:1 +实行 1 +x:1 +走马疳 1 +x:1 +议购粮 1 +x:1 +呆板 1 +x:1 +消防车 1 +x:1 +布套 1 +x:1 +大秋作物 1 +x:1 +特有 1 +x:1 +细说 1 +x:1 +犯罪 1 +x:1 +汨罗江畔 1 +x:1 +助 118 +x:118 +买卖人 1 +x:1 +壳质 1 +x:1 +谷壑 1 +x:1 +提案 1 +x:1 +细语 1 +x:1 +绿绿的 1 +x:1 +知情达理 1 +x:1 +装 263 +x:263 +巧劲 1 +x:1 +微风 1 +x:1 +身外之物 1 +x:1 +国防系 1 +x:1 +竭尽全力 1 +x:1 +香菇 1 +x:1 +拨贷款 1 +x:1 +遵行 1 +x:1 +欢乐曲 1 +x:1 +香菜 1 +x:1 +残暴 1 +x:1 +照搬 1 +x:1 +历史课 1 +x:1 +灵山卫镇 1 +x:1 +晕菜 1 +x:1 +骨折 1 +x:1 +漂白粉 1 +x:1 +特权 1 +x:1 +泰方 1 +x:1 +脸盘儿 1 +x:1 +藏书界 1 +x:1 +宴饮 1 +x:1 +球场 1 +x:1 +献艺 1 +x:1 +望远镜 1 +x:1 +黑石礁湾 1 +x:1 +红娘 1 +x:1 +粗花呢 1 +x:1 +闲聊天 1 +x:1 +拼争 1 +x:1 +腹心区 1 +x:1 +磺胺 1 +x:1 +境界 1 +x:1 +滨洲 1 +x:1 +开发费 1 +x:1 +垂涎 1 +x:1 +香茅 1 +x:1 +火气 1 +x:1 +底工 1 +x:1 +圆通山 1 +x:1 +购买国 1 +x:1 +萝 1 +x:1 +打短工 1 +x:1 +镜真楼 1 +x:1 +河系 1 +x:1 +冤案 1 +x:1 +五人制 1 +x:1 +上阵 1 +x:1 +俊杰 1 +x:1 +布依族 1 +x:1 +加利利 1 +x:1 +公文纸 1 +x:1 +扬李抑杜 1 +x:1 +洣江 1 +x:1 +张高 1 +x:1 +表现性 1 +x:1 +香草 1 +x:1 +近中期 1 +x:1 +脏污 1 +x:1 +上限 1 +x:1 +滨海 1 +x:1 +遏止 1 +x:1 +银钱 1 +x:1 +冷眼旁观 1 +x:1 +涉外 1 +x:1 +人心房 1 +x:1 +劳动量 1 +x:1 +谷堆 1 +x:1 +犯罪法 1 +x:1 +乳腺炎 1 +x:1 +旧村 1 +x:1 +烟缸 1 +x:1 +银针 1 +x:1 +宦 3 +x:3 +鸡雏 1 +x:1 +烃类 1 +x:1 +兵头官尾 1 +x:1 +汉朝 1 +x:1 +提梁 1 +x:1 +造林 1 +x:1 +窗台 1 +x:1 +大沽口 1 +x:1 +污尘 1 +x:1 +上院 1 +x:1 +鉴赏者 1 +x:1 +脂肪醇 1 +x:1 +国泰民安 1 +x:1 +璃 1 +x:1 +高支纱 1 +x:1 +江湖 1 +x:1 +纵火案 1 +x:1 +懂法 1 +x:1 +歌曲 1 +x:1 +深灰色 1 +x:1 +宝 86 +x:86 +邯钢 1 +x:1 +马头山 1 +x:1 +科普栏 1 +x:1 +扇骨子 1 +x:1 +三湘四水 1 +x:1 +诡奇 1 +x:1 +拼凑 1 +x:1 +万安县 1 +x:1 +偷渡梦 1 +x:1 +人老珠黄 1 +x:1 +主食 1 +x:1 +精工 1 +x:1 +史学 1 +x:1 +专版 1 +x:1 +垂爱 1 +x:1 +高产年 1 +x:1 +曙色 1 +x:1 +警貌 1 +x:1 +椎间盘 1 +x:1 +窗纱 1 +x:1 +北风 1 +x:1 +后掠角 1 +x:1 +拉手 1 +x:1 +桦南县 1 +x:1 +艺体 1 +x:1 +团干 1 +x:1 +乌达 1 +x:1 +飘洋过海 1 +x:1 +虎头 1 +x:1 +中信队 1 +x:1 +鸡西 1 +x:1 +主频 1 +x:1 +瓦当 1 +x:1 +白庙子乡 1 +x:1 +前沿性 1 +x:1 +寒苦 1 +x:1 +拼写 1 +x:1 +昆山市 1 +x:1 +首付款 1 +x:1 +拉扯 1 +x:1 +遣返 1 +x:1 +上解 1 +x:1 +后勤部 1 +x:1 +财院 1 +x:1 +文过饰非 1 +x:1 +灾危 1 +x:1 +主项 1 +x:1 +加勒比低 1 +x:1 +财险 1 +x:1 +激进 1 +x:1 +流动资金 1 +x:1 +观赏植物 1 +x:1 +基藏 1 +x:1 +薪给 1 +x:1 +勉励 1 +x:1 +忠贞不屈 1 +x:1 +海绵体 1 +x:1 +薪炭林 1 +x:1 +犯罪率 1 +x:1 +江滩 1 +x:1 +江滨 1 +x:1 +次内阁级 1 +x:1 +振兴图强 1 +x:1 +灾区 1 +x:1 +浩渺 1 +x:1 +喘息甫定 1 +x:1 +罐头 1 +x:1 +袅袅 1 +x:1 +史实 1 +x:1 +扬声器 1 +x:1 +史官 1 +x:1 +季度 1 +x:1 +人财物 1 +x:1 +江源 1 +x:1 +地质系 1 +x:1 +孕情 1 +x:1 +照管 1 +x:1 +闹腾 1 +x:1 +铁杵成针 1 +x:1 +薪级 1 +x:1 +逆行 1 +x:1 +台式 1 +x:1 +中奖人 1 +x:1 +山南海北 1 +x:1 +财阀 1 +x:1 +蛤 1 +x:1 +浩 54 +x:54 +匿名信 1 +x:1 +值班室 1 +x:1 +管理课 1 +x:1 +变流器 1 +x:1 +耗子药 1 +x:1 +告慰 1 +x:1 +军士 1 +x:1 +歌星 1 +x:1 +拉拢 1 +x:1 +空空导弹 1 +x:1 +政治犯 1 +x:1 +场馆处 1 +x:1 +沼气池 1 +x:1 +土尔扈特 1 +x:1 +大职校 1 +x:1 +瑕玷 1 +x:1 +南非队 1 +x:1 +地躺拳 1 +x:1 +阳春面 1 +x:1 +饮泣 1 +x:1 +军备 1 +x:1 +乳突 1 +x:1 +俊秀 1 +x:1 +实际 1 +x:1 +两回事 1 +x:1 +火烧云 1 +x:1 +占有额 1 +x:1 +义不容辞 1 +x:1 +吮 1 +x:1 +囊括 1 +x:1 +向心 1 +x:1 +骨伤 1 +x:1 +万象 1 +x:1 +低工资制 1 +x:1 +终止 1 +x:1 +思想库 1 +x:1 +阿斯匹林 1 +x:1 +峥嵘 1 +x:1 +卡 131 +x:131 +写实派 1 +x:1 +马头崖 1 +x:1 +天山南北 1 +x:1 +苍 2 +x:2 +记分册 1 +x:1 +运载火箭 1 +x:1 +弋阳 1 +x:1 +火狐 1 +x:1 +新颜 1 +x:1 +麻木树 1 +x:1 +军事编 1 +x:1 +侵蚀 1 +x:1 +大部头 1 +x:1 +哲人 1 +x:1 +项目部 1 +x:1 +扑食 1 +x:1 +辉钴矿 1 +x:1 +骨粉 1 +x:1 +打官腔 1 +x:1 +四分五裂 1 +x:1 +洛杉矶 1 +x:1 +重点性 1 +x:1 +工班 1 +x:1 +避孕丸 1 +x:1 +育成 1 +x:1 +火爆 1 +x:1 +节汇率 1 +x:1 +坯布 1 +x:1 +教科所 1 +x:1 +竞赛题 1 +x:1 +提货单 1 +x:1 +建功立业 1 +x:1 +团徽 1 +x:1 +垃圾场 1 +x:1 +主饮 1 +x:1 +浙南 1 +x:1 +提盒 1 +x:1 +抢 197 +x:197 +波特兰 1 +x:1 +钮 24 +x:24 +簇拥 1 +x:1 +单功能 1 +x:1 +烧坏 1 +x:1 +地武 1 +x:1 +老娘 1 +x:1 +膑 2 +x:2 +烟感 1 +x:1 +中河 1 +x:1 +军委 1 +x:1 +筑成 1 +x:1 +歌本 1 +x:1 +火版 1 +x:1 +小站稻 1 +x:1 +上行 1 +x:1 +台布 1 +x:1 +台币 1 +x:1 +技术部长 1 +x:1 +残破 1 +x:1 +有理数 1 +x:1 +特种 1 +x:1 +木板房 1 +x:1 +研究史 1 +x:1 +军姿 1 +x:1 +造福 1 +x:1 +鬼针草 1 +x:1 +垃圾坑 1 +x:1 +北伐战争 1 +x:1 +草本 1 +x:1 +使 8224 +x:8224 +适航司 1 +x:1 +讽诵 1 +x:1 +明角灯 1 +x:1 +小企 1 +x:1 +听其自然 1 +x:1 +双千户 1 +x:1 +师 199 +x:199 +专人 1 +x:1 +自卫 1 +x:1 +台州 1 +x:1 +激赏 1 +x:1 +菌物 1 +x:1 +块块 1 +x:1 +军威 1 +x:1 +利比亚 1 +x:1 +江汉 1 +x:1 +食肆 1 +x:1 +早晚市儿 1 +x:1 +现洋 1 +x:1 +无名 1 +x:1 +西瓜籽 1 +x:1 +上访 1 +x:1 +残篇 1 +x:1 +海禁 1 +x:1 +擦洗 1 +x:1 +兵阵 1 +x:1 +玉米 1 +x:1 +提留 1 +x:1 +新高 1 +x:1 +宰狗刀 1 +x:1 +畜肥 1 +x:1 +激起 1 +x:1 +灯油 1 +x:1 +虎子 1 +x:1 +屏息 1 +x:1 +牟平县 1 +x:1 +红烧肉 1 +x:1 +永隆乡 1 +x:1 +上诉 1 +x:1 +开发部 1 +x:1 +胸有成竹 1 +x:1 +海百合 1 +x:1 +上证 1 +x:1 +糟 12 +x:12 +兽力车 1 +x:1 +上课 1 +x:1 +有情人 1 +x:1 +江永 1 +x:1 +萋萋 1 +x:1 +高升镇 1 +x:1 +答应 1 +x:1 +江水 1 +x:1 +手电筒 1 +x:1 +灯泡 1 +x:1 +玉簪 1 +x:1 +年老体衰 1 +x:1 +斯洛伐克 1 +x:1 +付汇联 1 +x:1 +满山遍野 1 +x:1 +青草娃 1 +x:1 +恻隐之心 1 +x:1 +嗡嗡 1 +x:1 +豁 12 +x:12 +宣和镇 1 +x:1 +双乙酰 1 +x:1 +生财有道 1 +x:1 +班吉 1 +x:1 +硬指标 1 +x:1 +聚礼会 1 +x:1 +玖 1 +x:1 +职业化 1 +x:1 +东行 1 +x:1 +蝴蝶扣 1 +x:1 +华东局 1 +x:1 +罐子 1 +x:1 +腐烂河 1 +x:1 +执行局 1 +x:1 +电动式 1 +x:1 +收尘率 1 +x:1 +游击战争 1 +x:1 +优化制 1 +x:1 +管风琴 1 +x:1 +到校 1 +x:1 +萤火虫 1 +x:1 +小试锋芒 1 +x:1 +十 1417 +x:1417 +明清式 1 +x:1 +激越 1 +x:1 +享福 1 +x:1 +砟子 1 +x:1 +溢美之辞 1 +x:1 +军嫂 1 +x:1 +工点 1 +x:1 +块垒 1 +x:1 +应城市 1 +x:1 +乌贼 1 +x:1 +班员 1 +x:1 +拉卜楞寺 1 +x:1 +捡 60 +x:60 +代表性 1 +x:1 +采访行 1 +x:1 +道德观 1 +x:1 +江河 1 +x:1 +浩气 1 +x:1 +天演论 1 +x:1 +颓萎 1 +x:1 +叙述者 1 +x:1 +原班人马 1 +x:1 +海神 1 +x:1 +旺 81 +x:81 +清响 1 +x:1 +巨鲸 1 +x:1 +争强斗胜 1 +x:1 +浩淼 1 +x:1 +江浙 1 +x:1 +不人道 1 +x:1 +哽咽 1 +x:1 +要饭 1 +x:1 +火炉 1 +x:1 +乐极生悲 1 +x:1 +核二院 1 +x:1 +宽打窄用 1 +x:1 +火炕 1 +x:1 +谢落 1 +x:1 +幸免于难 1 +x:1 +英王 1 +x:1 +双脑包村 1 +x:1 +江流 1 +x:1 +冠心 1 +x:1 +组佩玉饰 1 +x:1 +乌塌菜 1 +x:1 +江海 1 +x:1 +劳动费 1 +x:1 +金华阳 1 +x:1 +银行 1 +x:1 +火炮 1 +x:1 +火炭 1 +x:1 +不连惯性 1 +x:1 +杯沿 1 +x:1 +等高线 1 +x:1 +在行 1 +x:1 +应战书 1 +x:1 +汗如雨下 1 +x:1 +火点 1 +x:1 +股灾 1 +x:1 +休养 1 +x:1 +火炽 1 +x:1 +粮票 1 +x:1 +毫无顾虑 1 +x:1 +拼劲 1 +x:1 +涨跌 1 +x:1 +提琴 1 +x:1 +穆 45 +x:45 +台岛 1 +x:1 +汇编程序 1 +x:1 +若有所思 1 +x:1 +棱锥台 1 +x:1 +窗体 1 +x:1 +现汇 1 +x:1 +火烛 1 +x:1 +金属探伤 1 +x:1 +藏书楼 1 +x:1 +特等 1 +x:1 +截留 1 +x:1 +垂照 1 +x:1 +火烧 1 +x:1 +百年之后 1 +x:1 +虎娃 1 +x:1 +饭店 1 +x:1 +火热 1 +x:1 +谋杀案 1 +x:1 +寄人篱下 1 +x:1 +质问 1 +x:1 +江津 1 +x:1 +瓦屋 1 +x:1 +发达国家 1 +x:1 +道德街 1 +x:1 +纺机 1 +x:1 +教职员工 1 +x:1 +乞丐 1 +x:1 +军官 1 +x:1 +台属 1 +x:1 +浩浩 1 +x:1 +下毒手 1 +x:1 +梭镖 1 +x:1 +导轮 1 +x:1 +症结 1 +x:1 +财长 1 +x:1 +导轨 1 +x:1 +记分卡 1 +x:1 +泵房 1 +x:1 +台山 1 +x:1 +波形 1 +x:1 +军容 1 +x:1 +沪 186 +x:186 +天柱山 1 +x:1 +购销两旺 1 +x:1 +江淮 1 +x:1 +变阻器 1 +x:1 +刷卡机 1 +x:1 +扶助会 1 +x:1 +杯水 1 +x:1 +独秀一枝 1 +x:1 +人生路 1 +x:1 +拼制 1 +x:1 +录音带 1 +x:1 +江涛 1 +x:1 +北魏 1 +x:1 +闲言碎语 1 +x:1 +小三峡 1 +x:1 +物归原主 1 +x:1 +警车 1 +x:1 +虚浮 1 +x:1 +残稿 1 +x:1 +江涂 1 +x:1 +模仿 1 +x:1 +东江镇 1 +x:1 +应用科学 1 +x:1 +目 64 +x:64 +驱 7 +x:7 +野麻 1 +x:1 +丹寨县 1 +x:1 +风景画 1 +x:1 +兴邦 1 +x:1 +抽水泵 1 +x:1 +火灾 1 +x:1 +系里 1 +x:1 +入园率 1 +x:1 +育林 1 +x:1 +书楼 1 +x:1 +搏浪 1 +x:1 +酒渣鼻 1 +x:1 +黏度 1 +x:1 +白砂糖 1 +x:1 +无垠 1 +x:1 +答声 1 +x:1 +高血脂 1 +x:1 +思想家 1 +x:1 +合一 1 +x:1 +完好无恙 1 +x:1 +搠 1 +x:1 +红蜘蛛 1 +x:1 +侨胞 1 +x:1 +矿业 1 +x:1 +技改局 1 +x:1 +骨科 1 +x:1 +现款 1 +x:1 +意欲 1 +x:1 +紫罗兰 1 +x:1 +阿美利加 1 +x:1 +经办人员 1 +x:1 +制贩 1 +x:1 +细部 1 +x:1 +姿态 1 +x:1 +许许多多 1 +x:1 +罕闻 1 +x:1 +鸦片 1 +x:1 +军属 1 +x:1 +兵道 1 +x:1 +泳区 1 +x:1 +儿研所 1 +x:1 +合乎 1 +x:1 +虎崽 1 +x:1 +附具 1 +x:1 +登门 1 +x:1 +休克 1 +x:1 +纯净率 1 +x:1 +饱蕴 1 +x:1 +品酒员 1 +x:1 +笼统 1 +x:1 +笼络 1 +x:1 +进气口 1 +x:1 +火石 1 +x:1 +清县 1 +x:1 +上路 1 +x:1 +穴 13 +x:13 +基脚 1 +x:1 +宝坻县 1 +x:1 +阴雨寡照 1 +x:1 +视讯 1 +x:1 +居危思危 1 +x:1 +布拉图西 1 +x:1 +台子 1 +x:1 +史志 1 +x:1 +通信员 1 +x:1 +捉迷藏 1 +x:1 +诺言 1 +x:1 +厕所间 1 +x:1 +盘锦市 1 +x:1 +义务服务 1 +x:1 +班列 1 +x:1 +财经类 1 +x:1 +烟摊 1 +x:1 +催生 1 +x:1 +矿产 1 +x:1 +记分员 1 +x:1 +育有 1 +x:1 +娟 22 +x:22 +海缆 1 +x:1 +广交 1 +x:1 +泛起 1 +x:1 +成名作 1 +x:1 +东大桥站 1 +x:1 +矿井 1 +x:1 +末药 1 +x:1 +歌手 1 +x:1 +侨联 1 +x:1 +非政府 1 +x:1 +日报 1 +x:1 +柔细 1 +x:1 +上账 1 +x:1 +莺 11 +x:11 +火眼 1 +x:1 +鄂温克旗 1 +x:1 +提现 1 +x:1 +乌篷船 1 +x:1 +嫣 3 +x:3 +盘山路 1 +x:1 +班前 1 +x:1 +秦都 1 +x:1 +婀娜多姿 1 +x:1 +租售比价 1 +x:1 +购销员 1 +x:1 +没奈何 1 +x:1 +顺水人情 1 +x:1 +跨步 1 +x:1 +庇护所 1 +x:1 +警衔 1 +x:1 +乌沙村 1 +x:1 +陋规 1 +x:1 +自圆其说 1 +x:1 +一顺儿 1 +x:1 +微电脑 1 +x:1 +垂直 1 +x:1 +爆炸 1 +x:1 +绵软 1 +x:1 +兵部 1 +x:1 +借古喻今 1 +x:1 +塔兰托 1 +x:1 +合伙 1 +x:1 +江岸区 1 +x:1 +特殊性 1 +x:1 +神女峰 1 +x:1 +汇拨款 1 +x:1 +向导 1 +x:1 +掏 108 +x:108 +虎山 1 +x:1 +反对者 1 +x:1 +冤狱 1 +x:1 +班厦 1 +x:1 +屐痕 1 +x:1 +冰雕群 1 +x:1 +粱 1 +x:1 +缭乱 1 +x:1 +部属处 1 +x:1 +辉钼矿 1 +x:1 +三提高 1 +x:1 +必然 1 +x:1 +邀请书 1 +x:1 +末节 1 +x:1 +拔苗助长 1 +x:1 +火盆 1 +x:1 +合作 1 +x:1 +烟斗 1 +x:1 +合体 1 +x:1 +中准价 1 +x:1 +班友 1 +x:1 +中界岭 1 +x:1 +眼防所 1 +x:1 +海绵 1 +x:1 +电话网 1 +x:1 +虎尾 1 +x:1 +黄海 1 +x:1 +蚁战 1 +x:1 +离家背井 1 +x:1 +拉杂 1 +x:1 +通许县 1 +x:1 +拉杆 1 +x:1 +保证金 1 +x:1 +叶蜂 1 +x:1 +浅滩 1 +x:1 +淋病 1 +x:1 +岳阳 1 +x:1 +赛内外 1 +x:1 +矿体 1 +x:1 +垦利县 1 +x:1 +虎将 1 +x:1 +执行官 1 +x:1 +喝令 1 +x:1 +团子 1 +x:1 +警视 1 +x:1 +警觉 1 +x:1 +艺林 1 +x:1 +露天矿 1 +x:1 +青少年 1 +x:1 +到处 1 +x:1 +上谕 1 +x:1 +军事篇 1 +x:1 +留神 1 +x:1 +溺水 1 +x:1 +工矿 1 +x:1 +互 110 +x:110 +老牛破车 1 +x:1 +撒播 1 +x:1 +南明区 1 +x:1 +邀请人 1 +x:1 +一帆顺风 1 +x:1 +上调 1 +x:1 +烧卖 1 +x:1 +垃圾包 1 +x:1 +剑气 1 +x:1 +免考 1 +x:1 +帛画 1 +x:1 +河曲 1 +x:1 +新平镇 1 +x:1 +扁圆形 1 +x:1 +走俏 1 +x:1 +轰轰隆隆 1 +x:1 +清剿 1 +x:1 +二手机 1 +x:1 +种植史 1 +x:1 +活 580 +x:580 +艺术 1 +x:1 +住院楼 1 +x:1 +基肥 1 +x:1 +清分 1 +x:1 +大静脉 1 +x:1 +清初 1 +x:1 +在身 1 +x:1 +清创 1 +x:1 +开房率 1 +x:1 +兴隆 1 +x:1 +泛谈 1 +x:1 +演出服 1 +x:1 +笼罩 1 +x:1 +经办人 1 +x:1 +义冢 1 +x:1 +流体力学 1 +x:1 +到头 1 +x:1 +粮站 1 +x:1 +保险金 1 +x:1 +虎岁 1 +x:1 +江段 1 +x:1 +优越论 1 +x:1 +分娩期 1 +x:1 +劳动课 1 +x:1 +无外乎 1 +x:1 +柔美 1 +x:1 +轴承厂 1 +x:1 +人造毛 1 +x:1 +答复 1 +x:1 +住房款 1 +x:1 +军工 1 +x:1 +买路者 1 +x:1 +香饵 1 +x:1 +拼合 1 +x:1 +最低值 1 +x:1 +茶鸡蛋 1 +x:1 +视角 1 +x:1 +军帐 1 +x:1 +瓦头 1 +x:1 +八所 1 +x:1 +议案组 1 +x:1 +重点村 1 +x:1 +清净 1 +x:1 +那不勒斯 1 +x:1 +快餐 1 +x:1 +上辈 1 +x:1 +惰性元素 1 +x:1 +债主 1 +x:1 +视觉 1 +x:1 +军师 1 +x:1 +车况 1 +x:1 +上达 1 +x:1 +灌云县 1 +x:1 +侏罗系 1 +x:1 +上边 1 +x:1 +小管流 1 +x:1 +排除万难 1 +x:1 +军帽 1 +x:1 +大犬座 1 +x:1 +针芒 1 +x:1 +摩啰街 1 +x:1 +垒砌 1 +x:1 +羊肉串 1 +x:1 +电话簿 1 +x:1 +概念股 1 +x:1 +胡台镇 1 +x:1 +哭笑不得 1 +x:1 +清册 1 +x:1 +烂仔巷 1 +x:1 +录音室 1 +x:1 +银苗 1 +x:1 +上进 1 +x:1 +银质 1 +x:1 +疯狂性 1 +x:1 +秦皇岛市 1 +x:1 +奏折 1 +x:1 +作兴 1 +x:1 +近 3515 +x:3515 +左派 1 +x:1 +清军 1 +x:1 +银贷 1 +x:1 +银贸 1 +x:1 +残羹 1 +x:1 +疆界 1 +x:1 +消防队 1 +x:1 +诡异 1 +x:1 +义形于色 1 +x:1 +东西区 1 +x:1 +多聚糖 1 +x:1 +上述 1 +x:1 +清冽 1 +x:1 +铺板 1 +x:1 +风景点 1 +x:1 +两厢情愿 1 +x:1 +弥补性 1 +x:1 +虚脱 1 +x:1 +蒙混 1 +x:1 +区庆 1 +x:1 +亨源纸 1 +x:1 +台套 1 +x:1 +灯标 1 +x:1 +扑鼻 1 +x:1 +特级 1 +x:1 +特约 1 +x:1 +孝敬乡 1 +x:1 +安东市 1 +x:1 +陡山沱组 1 +x:1 +提货员 1 +x:1 +出以公心 1 +x:1 +拘谨 1 +x:1 +考察团 1 +x:1 +倾斜 1 +x:1 +双赢制 1 +x:1 +养猪场 1 +x:1 +赤字额 1 +x:1 +贝多芬 1 +x:1 +火电 1 +x:1 +汉白玉 1 +x:1 +魏善庄 1 +x:1 +消毒包 1 +x:1 +漫谈 1 +x:1 +恢恢 1 +x:1 +心电图 1 +x:1 +非殖民化 1 +x:1 +中消 1 +x:1 +佑 1 +x:1 +屈原镇 1 +x:1 +闽剧 1 +x:1 +城里 1 +x:1 +异国 1 +x:1 +残缺 1 +x:1 +蒙浓 1 +x:1 +值班员 1 +x:1 +人造棉 1 +x:1 +害人 1 +x:1 +惧怕 1 +x:1 +嗣后 1 +x:1 +租费 1 +x:1 +斯托克顿 1 +x:1 +微处理器 1 +x:1 +旅游业 1 +x:1 +城垣史 1 +x:1 +镭 2 +x:2 +震级 1 +x:1 +互忆 1 +x:1 +导言 1 +x:1 +台安县 1 +x:1 +蔗农 1 +x:1 +上车 1 +x:1 +罐式 1 +x:1 +迟滞 1 +x:1 +厌学症 1 +x:1 +答对 1 +x:1 +瑕疵 1 +x:1 +海粮 1 +x:1 +顶天立地 1 +x:1 +歌唱 1 +x:1 +导读 1 +x:1 +了井塘 1 +x:1 +对接点 1 +x:1 +捷径 1 +x:1 +乳粉 1 +x:1 +疯了呱几 1 +x:1 +解甲 1 +x:1 +球体 1 +x:1 +互帮 1 +x:1 +替续器 1 +x:1 +虎年 1 +x:1 +提灯 1 +x:1 +基色 1 +x:1 +警讯 1 +x:1 +历算论点 1 +x:1 +刹车片 1 +x:1 +愤 8 +x:8 +巨额 1 +x:1 +饱蘸 1 +x:1 +阑尾炎 1 +x:1 +阿富汗 1 +x:1 +持续 1 +x:1 +微肥 1 +x:1 +烟柱 1 +x:1 +田埠乡 1 +x:1 +静水压 1 +x:1 +互市 1 +x:1 +上身 1 +x:1 +朗县 1 +x:1 +跃兔 1 +x:1 +导诊 1 +x:1 +提灌 1 +x:1 +中质协 1 +x:1 +旺盛期 1 +x:1 +郅 18 +x:18 +犁市镇 1 +x:1 +石埠乡 1 +x:1 +导论 1 +x:1 +乳糖 1 +x:1 +专电 1 +x:1 +俊美 1 +x:1 +专用 1 +x:1 +密苏里 1 +x:1 +专心一志 1 +x:1 +警诫 1 +x:1 +警语 1 +x:1 +增减额 1 +x:1 +覃研精思 1 +x:1 +莲盛镇 1 +x:1 +无一例外 1 +x:1 +艺文 1 +x:1 +哭 106 +x:106 +核清 1 +x:1 +朱桥村 1 +x:1 +蛇口 1 +x:1 +信江 1 +x:1 +见势不妙 1 +x:1 +切中 1 +x:1 +暌违 1 +x:1 +横生枝节 1 +x:1 +所用 1 +x:1 +瘁 1 +x:1 +姻亲 1 +x:1 +驯服 1 +x:1 +台塑 1 +x:1 +绞包针 1 +x:1 +红猩猩 1 +x:1 +购机款 1 +x:1 +向好 1 +x:1 +果断性 1 +x:1 +静静 1 +x:1 +购买价 1 +x:1 +人生观 1 +x:1 +理论部 1 +x:1 +舒适型 1 +x:1 +谓语 1 +x:1 +硫黄岛 1 +x:1 +请便 1 +x:1 +日本餐 1 +x:1 +专业者 1 +x:1 +新大陆 1 +x:1 +闽北 1 +x:1 +毛细管 1 +x:1 +看不惯 1 +x:1 +服装界 1 +x:1 +正本 1 +x:1 +时装业 1 +x:1 +矿种 1 +x:1 +军徽 1 +x:1 +只管 1 +x:1 +清偿 1 +x:1 +灯笼裤 1 +x:1 +跨栏 1 +x:1 +谓词 1 +x:1 +振起 1 +x:1 +便盆 1 +x:1 +鉴别力 1 +x:1 +烧光 1 +x:1 +超正常 1 +x:1 +兜盖 1 +x:1 +太子参 1 +x:1 +呼呼地 1 +x:1 +东嘎镇 1 +x:1 +野鸟 1 +x:1 +海南岛 1 +x:1 +军心 1 +x:1 +使假 1 +x:1 +眼科 1 +x:1 +海米 1 +x:1 +北齐 1 +x:1 +目的地 1 +x:1 +教历 1 +x:1 +购买人 1 +x:1 +鸿篇巨制 1 +x:1 +闽南 1 +x:1 +毛用 1 +x:1 +灰质炎 1 +x:1 +线香 1 +x:1 +蒙污 1 +x:1 +团委 1 +x:1 +登陆 1 +x:1 +逆转 1 +x:1 +骨痹 1 +x:1 +上膘 1 +x:1 +上膛 1 +x:1 +朱明 1 +x:1 +蛇岛 1 +x:1 +现期 1 +x:1 +清心 1 +x:1 +平衡杆 1 +x:1 +军警宪特 1 +x:1 +侵蚀量 1 +x:1 +春天颂 1 +x:1 +微辞 1 +x:1 +奖价 1 +x:1 +台城 1 +x:1 +后记 1 +x:1 +经营方 1 +x:1 +剩菜 1 +x:1 +档案馆 1 +x:1 +所以 1 +x:1 +台基 1 +x:1 +震灾 1 +x:1 +到底 1 +x:1 +火箭 1 +x:1 +奖励 1 +x:1 +领导有方 1 +x:1 +满堂彩 1 +x:1 +瓦圈 1 +x:1 +燕尾鱼 1 +x:1 +执白 1 +x:1 +详明 1 +x:1 +骨病 1 +x:1 +专稿 1 +x:1 +杀虫率 1 +x:1 +洑家 1 +x:1 +布丁 1 +x:1 +灾害 1 +x:1 +不过尔尔 1 +x:1 +北郊 1 +x:1 +布业 1 +x:1 +注射费 1 +x:1 +张贴 1 +x:1 +以 14931 +x:14931 +直译 1 +x:1 +馅子 1 +x:1 +清徐 1 +x:1 +工稳 1 +x:1 +恩泽沁溢 1 +x:1 +铡刀 1 +x:1 +财金处 1 +x:1 +工程 1 +x:1 +瓦块 1 +x:1 +南中街 1 +x:1 +老汉 1 +x:1 +北部 1 +x:1 +专程 1 +x:1 +安居工程 1 +x:1 +风景线 1 +x:1 +杭锦旗 1 +x:1 +火篾 1 +x:1 +垃圾带 1 +x:1 +玉盘 1 +x:1 +朝三暮四 1 +x:1 +残照 1 +x:1 +蹼泳 1 +x:1 +台坛 1 +x:1 +杈子 1 +x:1 +布什 1 +x:1 +海猪 1 +x:1 +绘业 1 +x:1 +种养殖业 1 +x:1 +清廉者 1 +x:1 +警营 1 +x:1 +单车道 1 +x:1 +免费 1 +x:1 +非职务 1 +x:1 +北马集村 1 +x:1 +逆耳 1 +x:1 +便秘 1 +x:1 +蛇尾 1 +x:1 +线雕 1 +x:1 +海得拉巴 1 +x:1 +河西走廊 1 +x:1 +割 70 +x:70 +瓦垄 1 +x:1 +奖券 1 +x:1 +莫逆之交 1 +x:1 +剌叶栎 1 +x:1 +火笼 1 +x:1 +布于 1 +x:1 +团团 1 +x:1 +海獭 1 +x:1 +杂多 1 +x:1 +小报 1 +x:1 +凝汽油剂 1 +x:1 +甬道 1 +x:1 +饱览 1 +x:1 +呵痒 1 +x:1 +欣赏热 1 +x:1 +用钱 1 +x:1 +杯杯 1 +x:1 +台地 1 +x:1 +微软 1 +x:1 +墙面 1 +x:1 +蝴蝶树 1 +x:1 +河段 1 +x:1 +龙井茶 1 +x:1 +君主立宪 1 +x:1 +仿宋体 1 +x:1 +珲 2 +x:2 +龙眼树 1 +x:1 +馆中馆 1 +x:1 +失人者 1 +x:1 +沙土所 1 +x:1 +农发行 1 +x:1 +毛纺厂 1 +x:1 +广角镜头 1 +x:1 +清廉 1 +x:1 +星光 1 +x:1 +逆 13 +x:13 +预可行性 1 +x:1 +资治通鉴 1 +x:1 +喉气管 1 +x:1 +银色 1 +x:1 +三配套 1 +x:1 +史前 1 +x:1 +飘飘欲仙 1 +x:1 +团场 1 +x:1 +团圆 1 +x:1 +照片 1 +x:1 +希伯来人 1 +x:1 +复垦费 1 +x:1 +清廷 1 +x:1 +上肢 1 +x:1 +疏而不漏 1 +x:1 +教条主义 1 +x:1 +海狮 1 +x:1 +银碗赛 1 +x:1 +北里 1 +x:1 +谈何容易 1 +x:1 +甲级队 1 +x:1 +布伞 1 +x:1 +人造板 1 +x:1 +海狸 1 +x:1 +强押 1 +x:1 +舍弃 1 +x:1 +孝媳 1 +x:1 +徽 5 +x:5 +柯枝 1 +x:1 +障眼法 1 +x:1 +基调 1 +x:1 +海狗 1 +x:1 +文工团 1 +x:1 +优惠票 1 +x:1 +癌变 1 +x:1 +重点校 1 +x:1 +工笔 1 +x:1 +自动机 1 +x:1 +灯柱 1 +x:1 +惋惜 1 +x:1 +族别 1 +x:1 +坦诚相见 1 +x:1 +有求于 1 +x:1 +篮排球 1 +x:1 +出于无奈 1 +x:1 +联席会议 1 +x:1 +国议会 1 +x:1 +卫检 1 +x:1 +昆虫学家 1 +x:1 +军内 1 +x:1 +上者 1 +x:1 +全息照相 1 +x:1 +以色列队 1 +x:1 +采菜节 1 +x:1 +物理变化 1 +x:1 +航空港 1 +x:1 +掩盖剂 1 +x:1 +指路 1 +x:1 +产业工人 1 +x:1 +鸡肉 1 +x:1 +鸡肋 1 +x:1 +菌种 1 +x:1 +振荡 1 +x:1 +清幽 1 +x:1 +叉子 1 +x:1 +责成 1 +x:1 +常见病 1 +x:1 +侨资 1 +x:1 +提纲 1 +x:1 +闹表 1 +x:1 +登顶 1 +x:1 +上联 1 +x:1 +戎马倥偬 1 +x:1 +唯心史观 1 +x:1 +银花 1 +x:1 +燕子垭 1 +x:1 +提级 1 +x:1 +鸡胸 1 +x:1 +泪珠 1 +x:1 +提纯 1 +x:1 +攀枝花 1 +x:1 +五丰镇 1 +x:1 +延年益寿 1 +x:1 +兰花指 1 +x:1 +不锈钢管 1 +x:1 +团城 1 +x:1 +自动枪 1 +x:1 +医圣 1 +x:1 +避 43 +x:43 +豹 7 +x:7 +发布周 1 +x:1 +海牛 1 +x:1 +海牙 1 +x:1 +军列 1 +x:1 +沾边 1 +x:1 +烟雾弥漫 1 +x:1 +标本室 1 +x:1 +蛊惑人心 1 +x:1 +清川 1 +x:1 +张大庄 1 +x:1 +五公祠 1 +x:1 +清规戒律 1 +x:1 +恢河 1 +x:1 +基轴 1 +x:1 +咔唑 1 +x:1 +政论家 1 +x:1 +军制 1 +x:1 +昨 4 +x:4 +末路 1 +x:1 +海熊 1 +x:1 +垒球 1 +x:1 +杂声 1 +x:1 +特种工艺 1 +x:1 +便笺 1 +x:1 +苜蓿草 1 +x:1 +梭鲈 1 +x:1 +火种 1 +x:1 +金银铜 1 +x:1 +大部分 1 +x:1 +裸线 1 +x:1 +鹤山市 1 +x:1 +侵越 1 +x:1 +娟秀 1 +x:1 +大部制 1 +x:1 +黑匣子 1 +x:1 +折价 1 +x:1 +共鸣说 1 +x:1 +诠释 1 +x:1 +奏效 1 +x:1 +硬 256 +x:256 +藤蔓 1 +x:1 +海燕 1 +x:1 +警务 1 +x:1 +油客轮 1 +x:1 +红伞 1 +x:1 +团员 1 +x:1 +公司税 1 +x:1 +卫国 1 +x:1 +参展者 1 +x:1 +和睦 1 +x:1 +后顾之忧 1 +x:1 +军力 1 +x:1 +交通部 1 +x:1 +虎口 1 +x:1 +军功 1 +x:1 +台商 1 +x:1 +隆隆 1 +x:1 +进出口司 1 +x:1 +革除 1 +x:1 +铁路桥 1 +x:1 +黎城 1 +x:1 +河槽 1 +x:1 +木板楼 1 +x:1 +春江 1 +x:1 +巴特农 1 +x:1 +故弄玄虚 1 +x:1 +军务 1 +x:1 +哥伦比亚 1 +x:1 +样 73 +x:73 +解困房 1 +x:1 +核讹诈 1 +x:1 +梭鱼 1 +x:1 +百年一遇 1 +x:1 +必经 1 +x:1 +春汛 1 +x:1 +罐区 1 +x:1 +指鸡骂狗 1 +x:1 +墨彩画 1 +x:1 +喇嘛 1 +x:1 +艺校 1 +x:1 +共青城 1 +x:1 +诌 1 +x:1 +抑扬顿挫 1 +x:1 +拐 23 +x:23 +委身 1 +x:1 +经营权 1 +x:1 +匡 8 +x:8 +火神 1 +x:1 +险胜 1 +x:1 +现时 1 +x:1 +哺乳纲 1 +x:1 +基辅 1 +x:1 +快门 1 +x:1 +鼎力相助 1 +x:1 +知音者 1 +x:1 +第五组 1 +x:1 +丰台站 1 +x:1 +遮挡 1 +x:1 +揪心 1 +x:1 +歌剧 1 +x:1 +情投意合 1 +x:1 +针织 1 +x:1 +边地 1 +x:1 +庙 22 +x:22 +互利 1 +x:1 +洄水段 1 +x:1 +令人信服 1 +x:1 +晚清四王 1 +x:1 +辣 10 +x:10 +坩埚 1 +x:1 +巨钟 1 +x:1 +而言 1 +x:1 +军医 1 +x:1 +军区 1 +x:1 +鸡舍 1 +x:1 +众长凝一 1 +x:1 +朗德 1 +x:1 +火碱 1 +x:1 +坟 18 +x:18 +在职 1 +x:1 +直接肥料 1 +x:1 +鼓鼓的 1 +x:1 +乌蓝 1 +x:1 +骨盆 1 +x:1 +干头 1 +x:1 +针对性 1 +x:1 +白衣使者 1 +x:1 +军博 1 +x:1 +实验组 1 +x:1 +营销者 1 +x:1 +看走眼 1 +x:1 +卫城 1 +x:1 +东进 1 +x:1 +适逢其会 1 +x:1 +上苍 1 +x:1 +牙买加 1 +x:1 +骂不绝口 1 +x:1 +人琴俱亡 1 +x:1 +柱洞 1 +x:1 +拾级而上 1 +x:1 +蝉翼 1 +x:1 +享受性 1 +x:1 +下里巴人 1 +x:1 +暗访组 1 +x:1 +登高 1 +x:1 +表意文字 1 +x:1 +红专 1 +x:1 +迟报 1 +x:1 +香韵 1 +x:1 +泥巴路 1 +x:1 +乌蒙 1 +x:1 +政治科 1 +x:1 +责怪 1 +x:1 +巩固 1 +x:1 +活化石 1 +x:1 +步态 1 +x:1 +微调 1 +x:1 +下影线 1 +x:1 +我 13411 +x:13411 +歌海 1 +x:1 +品酒室 1 +x:1 +火砖 1 +x:1 +互动 1 +x:1 +互助 1 +x:1 +电磁感应 1 +x:1 +工种 1 +x:1 +奥陶纪 1 +x:1 +棉麻局 1 +x:1 +残片 1 +x:1 +指甲 1 +x:1 +专科 1 +x:1 +交通量 1 +x:1 +座位图 1 +x:1 +爱卫会 1 +x:1 +实惠主义 1 +x:1 +心酸 1 +x:1 +日历牌 1 +x:1 +骨癌 1 +x:1 +十里八乡 1 +x:1 +工科 1 +x:1 +场站 1 +x:1 +练鹊 1 +x:1 +碧云天 1 +x:1 +社会观 1 +x:1 +电码 1 +x:1 +腐植酸 1 +x:1 +红亮 1 +x:1 +泛舟 1 +x:1 +立邦漆 1 +x:1 +擦擦 1 +x:1 +控辩式 1 +x:1 +考察官 1 +x:1 +虎劲 1 +x:1 +沽售 1 +x:1 +火硝 1 +x:1 +军史 1 +x:1 +共青团 1 +x:1 +背光性 1 +x:1 +军号 1 +x:1 +沟沟岔岔 1 +x:1 +摔倒 1 +x:1 +转制率 1 +x:1 +浙大 1 +x:1 +绮 2 +x:2 +奋起拼搏 1 +x:1 +世相百态 1 +x:1 +鸡苗 1 +x:1 +平顶山 1 +x:1 +互勉 1 +x:1 +挠力河 1 +x:1 +瑕线 1 +x:1 +布朗托姆 1 +x:1 +米珠薪桂 1 +x:1 +笑脸相迎 1 +x:1 +无翼鸟 1 +x:1 +瓦匠 1 +x:1 +工兵连 1 +x:1 +孝心 1 +x:1 +文文雅雅 1 +x:1 +广为传颂 1 +x:1 +菌类 1 +x:1 +竹芋 1 +x:1 +激荡 1 +x:1 +一两点钟 1 +x:1 +北钢 1 +x:1 +水米无交 1 +x:1 +竹节 1 +x:1 +贲张 1 +x:1 +打假惩劣 1 +x:1 +迟早 1 +x:1 +照着 1 +x:1 +马鞍山市 1 +x:1 +称心如意 1 +x:1 +丹江口市 1 +x:1 +红山区 1 +x:1 +烟波 1 +x:1 +烟泡 1 +x:1 +用量 1 +x:1 +嶙峋 1 +x:1 +防蛀剂 1 +x:1 +答案 1 +x:1 +抬轿子 1 +x:1 +台历 1 +x:1 +清官 1 +x:1 +篡改 1 +x:1 +用稿量 1 +x:1 +茅草屋 1 +x:1 +全乡 1 +x:1 +全书 1 +x:1 +残疾 1 +x:1 +参与者 1 +x:1 +笼盖 1 +x:1 +季刊 1 +x:1 +冰冻三尺 1 +x:1 +部族 1 +x:1 +江户 1 +x:1 +英系 1 +x:1 +宫中 1 +x:1 +花样翻新 1 +x:1 +块头 1 +x:1 +急匆匆 1 +x:1 +底下 1 +x:1 +朗声 1 +x:1 +自然美 1 +x:1 +照看 1 +x:1 +范 298 +x:298 +台南 1 +x:1 +乌药 1 +x:1 +底价 1 +x:1 +各色人等 1 +x:1 +法理学 1 +x:1 +状纸 1 +x:1 +劳动节 1 +x:1 +委管局 1 +x:1 +硬质 1 +x:1 +刻印员 1 +x:1 +尚家大堰 1 +x:1 +提篮 1 +x:1 +官庄镇 1 +x:1 +和魂洋才 1 +x:1 +澡堂 1 +x:1 +保险额 1 +x:1 +碧幽幽 1 +x:1 +工细 1 +x:1 +刷洗 1 +x:1 +台卡 1 +x:1 +安定团结 1 +x:1 +客流 1 +x:1 +残留 1 +x:1 +垂线 1 +x:1 +向前 1 +x:1 +溘然辞世 1 +x:1 +羊肠道儿 1 +x:1 +提箱 1 +x:1 +专线 1 +x:1 +台北 1 +x:1 +三费一款 1 +x:1 +烈 19 +x:19 +烟气 1 +x:1 +全价 1 +x:1 +烟民 1 +x:1 +火网 1 +x:1 +火罐 1 +x:1 +偶然 1 +x:1 +香道 1 +x:1 +抽象美 1 +x:1 +英籍 1 +x:1 +务使 1 +x:1 +抬秤 1 +x:1 +读取 1 +x:1 +台区 1 +x:1 +旧杂式 1 +x:1 +烟水 1 +x:1 +松滋市 1 +x:1 +稳妥 1 +x:1 +读友 1 +x:1 +澡塘 1 +x:1 +牾 2 +x:2 +残生 1 +x:1 +坐收渔利 1 +x:1 +泪眼 1 +x:1 +特用 1 +x:1 +导致 1 +x:1 +诈骗犯 1 +x:1 +羊八井 1 +x:1 +瓦刺 1 +x:1 +香醇 1 +x:1 +煤灰堆 1 +x:1 +意大利式 1 +x:1 +卫冕 1 +x:1 +合练 1 +x:1 +东宋镇 1 +x:1 +事迹 1 +x:1 +英国籍 1 +x:1 +孝廉 1 +x:1 +全会 1 +x:1 +火红 1 +x:1 +全优 1 +x:1 +勉强 1 +x:1 +清嫩 1 +x:1 +河湾 1 +x:1 +用地量 1 +x:1 +实而不华 1 +x:1 +保护主义 1 +x:1 +现房 1 +x:1 +瓦刀 1 +x:1 +中凹型 1 +x:1 +章鱼 1 +x:1 +评估所 1 +x:1 +陶艺史 1 +x:1 +废元钢 1 +x:1 +火线 1 +x:1 +军售 1 +x:1 +复写纸 1 +x:1 +袖珍本 1 +x:1 +陈庄村 1 +x:1 +台办 1 +x:1 +无能者 1 +x:1 +造田 1 +x:1 +陶瓷质 1 +x:1 +骨炭 1 +x:1 +海相 1 +x:1 +海盆 1 +x:1 +卖弄聪明 1 +x:1 +得空 1 +x:1 +全体 1 +x:1 +羽毛球赛 1 +x:1 +先天不足 1 +x:1 +北门 1 +x:1 +火绳 1 +x:1 +语言性 1 +x:1 +一斑 1 +x:1 +河港 1 +x:1 +海监 1 +x:1 +海盐 1 +x:1 +满意房 1 +x:1 +冠军 1 +x:1 +似神非神 1 +x:1 +河渠 1 +x:1 +转捩点 1 +x:1 +孝幔 1 +x:1 +沈丘 1 +x:1 +照直 1 +x:1 +珍之惜之 1 +x:1 +微言 1 +x:1 +骨灰 1 +x:1 +灾年 1 +x:1 +到期 1 +x:1 +打拍子 1 +x:1 +瓦加 1 +x:1 +俯首 1 +x:1 +油漆 1 +x:1 +浅易 1 +x:1 +台前 1 +x:1 +张裂 1 +x:1 +使坏 1 +x:1 +平安南道 1 +x:1 +蛇头 1 +x:1 +不义之财 1 +x:1 +信息源 1 +x:1 +烟海 1 +x:1 +洋弟子 1 +x:1 +万能 1 +x:1 +自养 1 +x:1 +蒙昧 1 +x:1 +黏土 1 +x:1 +河滩 1 +x:1 +浅显 1 +x:1 +旺盛 1 +x:1 +栽子 1 +x:1 +攻 126 +x:126 +参事官 1 +x:1 +肾 25 +x:25 +水蜜桃 1 +x:1 +持球 1 +x:1 +堪为 1 +x:1 +封建社会 1 +x:1 +岳麓 1 +x:1 +河源 1 +x:1 +拼死拼活 1 +x:1 +合同额 1 +x:1 +野餐 1 +x:1 +实验 1 +x:1 +乌玉村 1 +x:1 +团史 1 +x:1 +抽签式 1 +x:1 +终极 1 +x:1 +隆重 1 +x:1 +专群 1 +x:1 +大酒店 1 +x:1 +玉玺 1 +x:1 +乳白 1 +x:1 +回天乏术 1 +x:1 +松松散散 1 +x:1 +达拉特旗 1 +x:1 +卫兵 1 +x:1 +到来 1 +x:1 +北石店乡 1 +x:1 +贩毒者 1 +x:1 +一手遮天 1 +x:1 +菌种场 1 +x:1 +深刻性 1 +x:1 +杂牌军 1 +x:1 +缺席 1 +x:1 +细高 1 +x:1 +纹枯病 1 +x:1 +亲戚家 1 +x:1 +铁路法 1 +x:1 +多吃多占 1 +x:1 +劳动者 1 +x:1 +发布厅 1 +x:1 +薪火 1 +x:1 +绵薄 1 +x:1 +河流 1 +x:1 +服装系 1 +x:1 +海疆 1 +x:1 +己方 1 +x:1 +悉数 1 +x:1 +提神 1 +x:1 +一新 1 +x:1 +无名火 1 +x:1 +蒙方 1 +x:1 +钥匙 1 +x:1 +屏气 1 +x:1 +脑外科 1 +x:1 +清妍 1 +x:1 +奖品 1 +x:1 +雇农 1 +x:1 +蒙族 1 +x:1 +提示 1 +x:1 +旱改水 1 +x:1 +微观 1 +x:1 +这些 1 +x:1 +主隧 1 +x:1 +抬筐 1 +x:1 +种子核 1 +x:1 +呜 1 +x:1 +长江局 1 +x:1 +财预 1 +x:1 +自动性 1 +x:1 +卫勤 1 +x:1 +玻利维亚 1 +x:1 +收汇 1 +x:1 +免诉 1 +x:1 +毫米汞柱 1 +x:1 +有头无尾 1 +x:1 +免试 1 +x:1 +兵马 1 +x:1 +仙苑奇蔬 1 +x:1 +瓣膜 1 +x:1 +军器 1 +x:1 +河津 1 +x:1 +慈城镇 1 +x:1 +除臭剂 1 +x:1 +称作 1 +x:1 +新亚型 1 +x:1 +剑术 1 +x:1 +垃圾堆 1 +x:1 +系统部 1 +x:1 +鲜鱼 1 +x:1 +卓有建树 1 +x:1 +提租 1 +x:1 +董鄂河 1 +x:1 +分隔符 1 +x:1 +海生 1 +x:1 +舒适度 1 +x:1 +烧塌 1 +x:1 +串连 1 +x:1 +痔漏 1 +x:1 +碎雪 1 +x:1 +名列榜首 1 +x:1 +读出 1 +x:1 +桌前 1 +x:1 +集腋成裘 1 +x:1 +觅食 1 +x:1 +扑面 1 +x:1 +论功行赏 1 +x:1 +袋装化 1 +x:1 +导航 1 +x:1 +铜 85 +x:85 +蛤蟆镜 1 +x:1 +寂寂 1 +x:1 +王官 1 +x:1 +⑧ 1 +x:1 +售粮者 1 +x:1 +主队 1 +x:1 +德州市 1 +x:1 +军团 1 +x:1 +北陵 1 +x:1 +眸神 1 +x:1 +稳扎稳打 1 +x:1 +主音 1 +x:1 +争奇斗妍 1 +x:1 +表姐妹 1 +x:1 +鹅掌风 1 +x:1 +处 1268 +x:1268 +声色俱厉 1 +x:1 +吃一堑 1 +x:1 +万世永存 1 +x:1 +要死不活 1 +x:1 +河汊 1 +x:1 +以色列 1 +x:1 +黄豆粉 1 +x:1 +语言所 1 +x:1 +屁滚尿流 1 +x:1 +营养日 1 +x:1 +抗腐性 1 +x:1 +快速 1 +x:1 +固定资金 1 +x:1 +情人楼 1 +x:1 +从长计议 1 +x:1 +军地 1 +x:1 +治理 1 +x:1 +陋舍 1 +x:1 +阿克苏河 1 +x:1 +闽宁 1 +x:1 +核试验 1 +x:1 +喇叭 1 +x:1 +河池 1 +x:1 +片状林 1 +x:1 +玉照 1 +x:1 +绝世 1 +x:1 +黑龙江团 1 +x:1 +争光 1 +x:1 +颤悠悠 1 +x:1 +张家堡乡 1 +x:1 +青草地 1 +x:1 +鸡虱 1 +x:1 +逸闻 1 +x:1 +绝不 1 +x:1 +矛 7 +x:7 +登山队 1 +x:1 +冠县 1 +x:1 +开办费 1 +x:1 +到时 1 +x:1 +司务长 1 +x:1 +汇编语言 1 +x:1 +大辂椎轮 1 +x:1 +峭 2 +x:2 +河水 1 +x:1 +侵袭 1 +x:1 +迟暮 1 +x:1 +北韵 1 +x:1 +跷 7 +x:7 +万般 1 +x:1 +须疮 1 +x:1 +社会活动 1 +x:1 +月 1902 +x:1902 +个子 1 +x:1 +虎园 1 +x:1 +党棍 1 +x:1 +炮舰外交 1 +x:1 +答卷 1 +x:1 +后悔不迭 1 +x:1 +唐钢 1 +x:1 +碘酒 1 +x:1 +聚义厅 1 +x:1 +虎图 1 +x:1 +碚 3 +x:3 +候客室 1 +x:1 +新绛县 1 +x:1 +波兰队 1 +x:1 +在制品 1 +x:1 +接唱 1 +x:1 +财务科 1 +x:1 +经营户 1 +x:1 +子结构 1 +x:1 +班头 1 +x:1 +狙击 1 +x:1 +军垦 1 +x:1 +骨牌 1 +x:1 +不名一文 1 +x:1 +丰功伟绩 1 +x:1 +五六点 1 +x:1 +河泥 1 +x:1 +终日 1 +x:1 +贩毒船 1 +x:1 +上虞 1 +x:1 +倾泻 1 +x:1 +微行 1 +x:1 +耍心眼儿 1 +x:1 +淌 22 +x:22 +复习题 1 +x:1 +倾注 1 +x:1 +子刊 1 +x:1 +国储棉 1 +x:1 +隔海相望 1 +x:1 +主持者 1 +x:1 +北非 1 +x:1 +经营所 1 +x:1 +收费量 1 +x:1 +外族人 1 +x:1 +河沿 1 +x:1 +火中取栗 1 +x:1 +中山服 1 +x:1 +称为 1 +x:1 +泪痕 1 +x:1 +鸡蛋 1 +x:1 +黄河 1 +x:1 +季军 1 +x:1 +绝交 1 +x:1 +绝产 1 +x:1 +主震 1 +x:1 +检察院 1 +x:1 +时有所闻 1 +x:1 +伯利恒 1 +x:1 +拾 48 +x:48 +标记原子 1 +x:1 +鹤壁市 1 +x:1 +河南 1 +x:1 +康健 1 +x:1 +拄杖 1 +x:1 +读者节 1 +x:1 +索雄 1 +x:1 +牵涉面 1 +x:1 +灯座 1 +x:1 +预付款 1 +x:1 +江干 1 +x:1 +拉制 1 +x:1 +底牌 1 +x:1 +军校 1 +x:1 +等离子 1 +x:1 +安享清福 1 +x:1 +底版 1 +x:1 +块数 1 +x:1 +舒适性 1 +x:1 +皮花 1 +x:1 +底片 1 +x:1 +失聪 1 +x:1 +宽 284 +x:284 +语序 1 +x:1 +跨径 1 +x:1 +省农办 1 +x:1 +直辖 1 +x:1 +晶亮亮 1 +x:1 +河北 1 +x:1 +篡夺 1 +x:1 +倾心尽力 1 +x:1 +法庭罪 1 +x:1 +直达 1 +x:1 +绝然 1 +x:1 +主席台 1 +x:1 +嘴巴 1 +x:1 +现役 1 +x:1 +猴年马月 1 +x:1 +合署 1 +x:1 +哥们儿 1 +x:1 +无条件 1 +x:1 +酶 16 +x:16 +京西 1 +x:1 +红生 1 +x:1 +全片 1 +x:1 +赈济款 1 +x:1 +嘉年华 1 +x:1 +拉力 1 +x:1 +镖师 1 +x:1 +反躬 1 +x:1 +灯市 1 +x:1 +惟恐 1 +x:1 +版画系 1 +x:1 +鹦鹉山 1 +x:1 +引 243 +x:243 +灯帘 1 +x:1 +深水港 1 +x:1 +全能化 1 +x:1 +军械 1 +x:1 +托托拉镇 1 +x:1 +揪斗 1 +x:1 +稿子 1 +x:1 +叽叽喳喳 1 +x:1 +弹力呢 1 +x:1 +老区办 1 +x:1 +至善至真 1 +x:1 +河口 1 +x:1 +少奶奶 1 +x:1 +深孚众望 1 +x:1 +浑水摸鱼 1 +x:1 +砥柱中流 1 +x:1 +批评界 1 +x:1 +证词 1 +x:1 +际遇 1 +x:1 +目的性 1 +x:1 +雇员 1 +x:1 +清朝 1 +x:1 +厦门岛 1 +x:1 +军棋 1 +x:1 +板桥酒 1 +x:1 +清朗 1 +x:1 +时事性 1 +x:1 +宣教局 1 +x:1 +五山镇 1 +x:1 +清末 1 +x:1 +五塘镇 1 +x:1 +枇杷膏 1 +x:1 +参观团 1 +x:1 +冰雪节 1 +x:1 +代表制 1 +x:1 +鸡爪疯 1 +x:1 +兵荒马乱 1 +x:1 +军交运输 1 +x:1 +防火办 1 +x:1 +杯影 1 +x:1 +舒适感 1 +x:1 +心得 1 +x:1 +墓石 1 +x:1 +黑眼珠 1 +x:1 +样儿 1 +x:1 +粘结 1 +x:1 +鼻端 1 +x:1 +请示 1 +x:1 +滕王阁 1 +x:1 +球票 1 +x:1 +到家 1 +x:1 +稳中有增 1 +x:1 +转卖 1 +x:1 +朗斯 1 +x:1 +抛头颅 1 +x:1 +头面人物 1 +x:1 +玉佩 1 +x:1 +东明县 1 +x:1 +铁路史 1 +x:1 +绝灭 1 +x:1 +付之东流 1 +x:1 +有意 1 +x:1 +监察司 1 +x:1 +余利 1 +x:1 +监察厅 1 +x:1 +烟农 1 +x:1 +水果商 1 +x:1 +反转 1 +x:1 +清暇 1 +x:1 +等角 1 +x:1 +灯心 1 +x:1 +东瑁洲 1 +x:1 +负重 1 +x:1 +腰花 1 +x:1 +演出厅 1 +x:1 +鼻窦 1 +x:1 +预测局 1 +x:1 +碘化钠 1 +x:1 +烧林 1 +x:1 +百鸟之王 1 +x:1 +胶元病 1 +x:1 +现年 1 +x:1 +为民请命 1 +x:1 +买主 1 +x:1 +语重心长 1 +x:1 +红松洼 1 +x:1 +色彩缤纷 1 +x:1 +自销权 1 +x:1 +新郑县 1 +x:1 +上梅洲村 1 +x:1 +稞麦 1 +x:1 +从动 1 +x:1 +薪俸 1 +x:1 +藏书室 1 +x:1 +污物 1 +x:1 +南风 1 +x:1 +海丰 1 +x:1 +合算 1 +x:1 +鼓鼓囊囊 1 +x:1 +谈论 1 +x:1 +藏书家 1 +x:1 +烧杯 1 +x:1 +营养学 1 +x:1 +比不上 1 +x:1 +切磋 1 +x:1 +田舍 1 +x:1 +奖次 1 +x:1 +劢 1 +x:1 +清晨 1 +x:1 +豆蔻年华 1 +x:1 +烟具 1 +x:1 +台湾 1 +x:1 +望闻问切 1 +x:1 +落花流水 1 +x:1 +清晰 1 +x:1 +曲终奏雅 1 +x:1 +班机 1 +x:1 +业务量 1 +x:1 +杂说 1 +x:1 +清明 1 +x:1 +务牧 1 +x:1 +徐缓 1 +x:1 +脑血栓 1 +x:1 +一哄而上 1 +x:1 +铎 30 +x:30 +豫剧团 1 +x:1 +全班 1 +x:1 +累计额 1 +x:1 +满意度 1 +x:1 +显微镜 1 +x:1 +河势 1 +x:1 +G 8 +x:8 +灯彩 1 +x:1 +航空器 1 +x:1 +农副业 1 +x:1 +模糊 1 +x:1 +眉飞色舞 1 +x:1 +动情处 1 +x:1 +教育部长 1 +x:1 +驯养 1 +x:1 +风凉话 1 +x:1 +一木难支 1 +x:1 +习惯法 1 +x:1 +疲乏不堪 1 +x:1 +可怜兮兮 1 +x:1 +灯影 1 +x:1 +皮肉 1 +x:1 +蚁啃 1 +x:1 +选贤任能 1 +x:1 +同工同酬 1 +x:1 +拉倒 1 +x:1 +帮贫致富 1 +x:1 +公文包 1 +x:1 +剑客 1 +x:1 +底火 1 +x:1 +回教徒 1 +x:1 +驼马 1 +x:1 +诿过于人 1 +x:1 +映照 1 +x:1 +怒形于色 1 +x:1 +失色 1 +x:1 +清早 1 +x:1 +新风星 1 +x:1 +反调 1 +x:1 +茶钱 1 +x:1 +皮股 1 +x:1 +基金委 1 +x:1 +皮肤 1 +x:1 +江山 1 +x:1 +直路 1 +x:1 +有失公允 1 +x:1 +冷不丁 1 +x:1 +矿砂 1 +x:1 +殴 1 +x:1 +发展金 1 +x:1 +独立日 1 +x:1 +防微杜渐 1 +x:1 +雪地 1 +x:1 +宣汉 1 +x:1 +厦门市 1 +x:1 +组织员 1 +x:1 +拼接 1 +x:1 +时隐时现 1 +x:1 +红眼 1 +x:1 +称王 1 +x:1 +名传千古 1 +x:1 +歌咏 1 +x:1 +弃暗投明 1 +x:1 +人烟稀少 1 +x:1 +扣球奖 1 +x:1 +暗色 1 +x:1 +叶榭镇 1 +x:1 +氰化物 1 +x:1 +藕汁 1 +x:1 +清新 1 +x:1 +聚合醇类 1 +x:1 +迈进 1 +x:1 +碱荒 1 +x:1 +湖西河 1 +x:1 +攀越 1 +x:1 +作曲 1 +x:1 +貂熊 1 +x:1 +呐喊助威 1 +x:1 +记不清 1 +x:1 +贯穿辐射 1 +x:1 +简易师范 1 +x:1 +红石 1 +x:1 +碱草 1 +x:1 +红矾 1 +x:1 +才疏学浅 1 +x:1 +中江村 1 +x:1 +鼻祖 1 +x:1 +爆满 1 +x:1 +育儿 1 +x:1 +责备 1 +x:1 +购销型 1 +x:1 +猎户座 1 +x:1 +暗花 1 +x:1 +随军 1 +x:1 +蒙头 1 +x:1 +龙竹坪 1 +x:1 +江岛 1 +x:1 +镐头 1 +x:1 +孝感 1 +x:1 +大洲岛 1 +x:1 +失节 1 +x:1 +露珠 1 +x:1 +灯展 1 +x:1 +河内 1 +x:1 +反目为仇 1 +x:1 +江岸 1 +x:1 +白话诗 1 +x:1 +歌名 1 +x:1 +亚尔乡 1 +x:1 +发明者 1 +x:1 +整肃 1 +x:1 +常见于 1 +x:1 +歌吟 1 +x:1 +清收 1 +x:1 +忠贞不渝 1 +x:1 +赤金 1 +x:1 +东街 1 +x:1 +大刀阔斧 1 +x:1 +告捷 1 +x:1 +息息相通 1 +x:1 +智残人 1 +x:1 +东风乡 1 +x:1 +攀谈 1 +x:1 +大盖帽 1 +x:1 +全然 1 +x:1 +远途 1 +x:1 +捏造 1 +x:1 +骑 118 +x:118 +邓底村 1 +x:1 +孝昌 1 +x:1 +窗缝 1 +x:1 +绝版 1 +x:1 +踞 35 +x:35 +业余教育 1 +x:1 +烟叶 1 +x:1 +倾倒 1 +x:1 +废耕地 1 +x:1 +偷渡客 1 +x:1 +烟台 1 +x:1 +张店区 1 +x:1 +个别差异 1 +x:1 +铜鼓乡 1 +x:1 +斩头去尾 1 +x:1 +知遇之恩 1 +x:1 +灾情 1 +x:1 +牙防 1 +x:1 +沉沦 1 +x:1 +数百上千 1 +x:1 +参照物 1 +x:1 +雁荡路 1 +x:1 +蚁后 1 +x:1 +瓦池 1 +x:1 +现局 1 +x:1 +懂得 1 +x:1 +拼抢 1 +x:1 +污点 1 +x:1 +胸椎 1 +x:1 +偶人 1 +x:1 +灾患 1 +x:1 +阿北乡 1 +x:1 +烟厂 1 +x:1 +寓教于乐 1 +x:1 +军歌 1 +x:1 +跑道 1 +x:1 +管钳子 1 +x:1 +重金属 1 +x:1 +杀气 1 +x:1 +烧料 1 +x:1 +歌喉 1 +x:1 +终天 1 +x:1 +郁郁不乐 1 +x:1 +秀水坪村 1 +x:1 +争鸣 1 +x:1 +跑遍 1 +x:1 +赤道 1 +x:1 +乾隆 1 +x:1 +芙蓉区 1 +x:1 +小钢炮 1 +x:1 +江州 1 +x:1 +向海 1 +x:1 +心向往之 1 +x:1 +台江 1 +x:1 +朗朗 1 +x:1 +泪汪汪 1 +x:1 +达赖喇嘛 1 +x:1 +不如说 1 +x:1 +画梅集 1 +x:1 +纯金 1 +x:1 +铁老大 1 +x:1 +养猪户 1 +x:1 +夹藏 1 +x:1 +烟卷 1 +x:1 +车号 1 +x:1 +掩面而泣 1 +x:1 +绘画 1 +x:1 +刻骨铭心 1 +x:1 +千依百顺 1 +x:1 +下塘村 1 +x:1 +空港区 1 +x:1 +红盘 1 +x:1 +菜篮子 1 +x:1 +加勒比 1 +x:1 +体工大队 1 +x:1 +田联 1 +x:1 +格林威治 1 +x:1 +卖官者 1 +x:1 +棍 5 +x:5 +一代人 1 +x:1 +白瓜子 1 +x:1 +枇杷花 1 +x:1 +航空员 1 +x:1 +水烟筒 1 +x:1 +国债券 1 +x:1 +境外 1 +x:1 +赟 2 +x:2 +西门口 1 +x:1 +完璧归赵 1 +x:1 +胆大包天 1 +x:1 +弗罗阿登 1 +x:1 +读法 1 +x:1 +合称 1 +x:1 +沈灶 1 +x:1 +抬举 1 +x:1 +马雄山 1 +x:1 +决算期 1 +x:1 +产出率 1 +x:1 +境头 1 +x:1 +红煤 1 +x:1 +搀 5 +x:5 +军民 1 +x:1 +直话 1 +x:1 +莅 3 +x:3 +河坝 1 +x:1 +簇坐 1 +x:1 +少数派 1 +x:1 +互派 1 +x:1 +布片 1 +x:1 +憨直 1 +x:1 +鼻翼 1 +x:1 +废品率 1 +x:1 +墓 83 +x:83 +中转 1 +x:1 +割裂 1 +x:1 +电话业 1 +x:1 +吠 1 +x:1 +代表团 1 +x:1 +直通车 1 +x:1 +买卖方 1 +x:1 +以理服人 1 +x:1 +直说 1 +x:1 +设计费 1 +x:1 +终年 1 +x:1 +雪坡 1 +x:1 +球类 1 +x:1 +演出团 1 +x:1 +膘肥肉厚 1 +x:1 +东轮 1 +x:1 +东软 1 +x:1 +河坡 1 +x:1 +台毯 1 +x:1 +到庭 1 +x:1 +长长的 1 +x:1 +小命 1 +x:1 +皮蛋 1 +x:1 +推行 1 +x:1 +滇 19 +x:19 +销售者 1 +x:1 +现存 1 +x:1 +赤面 1 +x:1 +陌 1 +x:1 +绍兴 1 +x:1 +味觉 1 +x:1 +阵发性 1 +x:1 +剪刀差 1 +x:1 +终市 1 +x:1 +国画系 1 +x:1 +异彩纷呈 1 +x:1 +身心交瘁 1 +x:1 +土著人 1 +x:1 +剑川 1 +x:1 +照会 1 +x:1 +古生物学 1 +x:1 +借贷者 1 +x:1 +互济 1 +x:1 +航空史 1 +x:1 +减震器 1 +x:1 +下落不明 1 +x:1 +亏心事 1 +x:1 +源头者 1 +x:1 +现实 1 +x:1 +班戈 1 +x:1 +有形损耗 1 +x:1 +绝症 1 +x:1 +悉心 1 +x:1 +电子琴 1 +x:1 +钠 17 +x:17 +卫校 1 +x:1 +底盘 1 +x:1 +晚班 1 +x:1 +电话亭 1 +x:1 +自发性 1 +x:1 +西班牙 1 +x:1 +余波未停 1 +x:1 +贱 11 +x:11 +藏书库 1 +x:1 +烛照 1 +x:1 +秋耕 1 +x:1 +台步 1 +x:1 +跑鞋 1 +x:1 +合约 1 +x:1 +笼下 1 +x:1 +务真 1 +x:1 +卡那霉素 1 +x:1 +军法 1 +x:1 +解困局 1 +x:1 +板桥镇 1 +x:1 +不徇私情 1 +x:1 +编创人员 1 +x:1 +积压品 1 +x:1 +渔养业 1 +x:1 +希腊队 1 +x:1 +孝服 1 +x:1 +球粒 1 +x:1 +写道 1 +x:1 +茶针 1 +x:1 +杯子 1 +x:1 +中外方 1 +x:1 +全盛 1 +x:1 +全盘 1 +x:1 +矢 5 +x:5 +政变案 1 +x:1 +全盟 1 +x:1 +续订 1 +x:1 +叛国罪 1 +x:1 +全盔 1 +x:1 +东边 1 +x:1 +台次 1 +x:1 +崭新 1 +x:1 +营养师 1 +x:1 +草甸子 1 +x:1 +照例 1 +x:1 +密特朗 1 +x:1 +海产 1 +x:1 +江孜 1 +x:1 +灰锰氧 1 +x:1 +股海 1 +x:1 +大头菜 1 +x:1 +终归 1 +x:1 +应缴款 1 +x:1 +红灯 1 +x:1 +合编 1 +x:1 +红火 1 +x:1 +技不如人 1 +x:1 +享乐 1 +x:1 +草菅人命 1 +x:1 +手术钳 1 +x:1 +清拖 1 +x:1 +等闲之辈 1 +x:1 +三七 1 +x:1 +电话会 1 +x:1 +阅报 1 +x:1 +镖客 1 +x:1 +石英钟 1 +x:1 +迎新 1 +x:1 +东洞山 1 +x:1 +同呼吸 1 +x:1 +诸事缠身 1 +x:1 +鱼骨 1 +x:1 +长水村 1 +x:1 +边花闲草 1 +x:1 +南门湾 1 +x:1 +全省 1 +x:1 +录音棚 1 +x:1 +砾 2 +x:2 +千里马 1 +x:1 +集体所有 1 +x:1 +松辽 1 +x:1 +工程车 1 +x:1 +照主 1 +x:1 +东鳞西爪 1 +x:1 +动脉血 1 +x:1 +白山市 1 +x:1 +喀拉拉邦 1 +x:1 +自傲 1 +x:1 +机车厂 1 +x:1 +歌厅 1 +x:1 +阜阳 1 +x:1 +团歌 1 +x:1 +主席国 1 +x:1 +触 25 +x:25 +承重 1 +x:1 +泄水闸 1 +x:1 +虫胶 1 +x:1 +骚乱者 1 +x:1 +虎气 1 +x:1 +烧掉 1 +x:1 +秦陵编 1 +x:1 +乳业 1 +x:1 +红烧 1 +x:1 +楔形文字 1 +x:1 +和田 1 +x:1 +争食 1 +x:1 +老黄牛 1 +x:1 +谷物 1 +x:1 +一端 1 +x:1 +缭绕 1 +x:1 +胡闹 1 +x:1 +松软 1 +x:1 +洛 2 +x:2 +宣泄 1 +x:1 +辜 47 +x:47 +瓦檐 1 +x:1 +清扬 1 +x:1 +清扫 1 +x:1 +烧损 1 +x:1 +摄影部 1 +x:1 +貂皮 1 +x:1 +乾道 1 +x:1 +同代人 1 +x:1 +海上 1 +x:1 +详实 1 +x:1 +正时 1 +x:1 +引号 1 +x:1 +台橡 1 +x:1 +艺坛 1 +x:1 +烛火 1 +x:1 +一字一顿 1 +x:1 +纯音 1 +x:1 +合群 1 +x:1 +红烛 1 +x:1 +全矿 1 +x:1 +暗藏 1 +x:1 +江安 1 +x:1 +提货期 1 +x:1 +接通率 1 +x:1 +九 1576 +x:1576 +锁麟囊 1 +x:1 +江宁 1 +x:1 +接合 1 +x:1 +权益部 1 +x:1 +灾星 1 +x:1 +享享 1 +x:1 +粘稠 1 +x:1 +反诉 1 +x:1 +账户卡 1 +x:1 +倾囊 1 +x:1 +详密 1 +x:1 +演算 1 +x:1 +反话 1 +x:1 +拼搏 1 +x:1 +阅书报室 1 +x:1 +家委会 1 +x:1 +水果刀 1 +x:1 +团校 1 +x:1 +持券人 1 +x:1 +驼鹿 1 +x:1 +直角 1 +x:1 +龙型 1 +x:1 +唇齿音 1 +x:1 +连心桥 1 +x:1 +特为 1 +x:1 +肺鱼 1 +x:1 +艾滋病 1 +x:1 +灯墙 1 +x:1 +直觉 1 +x:1 +直视 1 +x:1 +终局 1 +x:1 +脚 260 +x:260 +直观 1 +x:1 +英伦三岛 1 +x:1 +史海 1 +x:1 +洋车 1 +x:1 +以卵投石 1 +x:1 +终将 1 +x:1 +姻缘 1 +x:1 +教养 1 +x:1 +烟囱 1 +x:1 +语言学 1 +x:1 +特业 1 +x:1 +污痕 1 +x:1 +特殊化 1 +x:1 +全球 1 +x:1 +军港 1 +x:1 +单件性 1 +x:1 +反衬 1 +x:1 +从句 1 +x:1 +习武者 1 +x:1 +星云 1 +x:1 +万人空巷 1 +x:1 +始祖鸟 1 +x:1 +河唇 1 +x:1 +汜 1 +x:1 +用户量 1 +x:1 +己巳 1 +x:1 +标语牌 1 +x:1 +拉呱 1 +x:1 +破裂音 1 +x:1 +秦皇岛港 1 +x:1 +瓦楞 1 +x:1 +所盗物 1 +x:1 +陈皮 1 +x:1 +招领箱 1 +x:1 +上岩洞 1 +x:1 +灯壶 1 +x:1 +八角茴香 1 +x:1 +东购 1 +x:1 +灯壳 1 +x:1 +攀西 1 +x:1 +台榭 1 +x:1 +负队 1 +x:1 +村里人 1 +x:1 +标金 1 +x:1 +散兵游勇 1 +x:1 +何足挂齿 1 +x:1 +阴沉 1 +x:1 +咸水湖 1 +x:1 +特产 1 +x:1 +儿马 1 +x:1 +驾驶证者 1 +x:1 +寻踪 1 +x:1 +标量 1 +x:1 +荮 1 +x:1 +监察员 1 +x:1 +不得已 1 +x:1 +特事 1 +x:1 +特二 1 +x:1 +簧 1 +x:1 +期交所 1 +x:1 +江声 1 +x:1 +钱串子 1 +x:1 +艺员 1 +x:1 +矿粉 1 +x:1 +电风扇 1 +x:1 +观念形态 1 +x:1 +残余 1 +x:1 +细胞膜 1 +x:1 +购买群 1 +x:1 +养猪村 1 +x:1 +转氨基酶 1 +x:1 +阅处 1 +x:1 +虫草 1 +x:1 +政治委员 1 +x:1 +网 191 +x:191 +珹 1 +x:1 +迎送 1 +x:1 +灯塔 1 +x:1 +震中 1 +x:1 +特价 1 +x:1 +艺名 1 +x:1 +激进派别 1 +x:1 +岔南乡 1 +x:1 +充饥 1 +x:1 +认知科学 1 +x:1 +烟嘴 1 +x:1 +布点 1 +x:1 +擦肩而过 1 +x:1 +航空兵 1 +x:1 +伽利略 1 +x:1 +经营学 1 +x:1 +蚁 1 +x:1 +娱乐 1 +x:1 +总理室 1 +x:1 +送餐费 1 +x:1 +井冈山 1 +x:1 +罪孽深重 1 +x:1 +走漏风声 1 +x:1 +请缨 1 +x:1 +娇柔 1 +x:1 +倾听 1 +x:1 +球网 1 +x:1 +球罐 1 +x:1 +黏液 1 +x:1 +红牌 1 +x:1 +迟延 1 +x:1 +望风披靡 1 +x:1 +直裰 1 +x:1 +自然经济 1 +x:1 +讳 1 +x:1 +毙命 1 +x:1 +一满意 1 +x:1 +拼板 1 +x:1 +受资国 1 +x:1 +造作 1 +x:1 +绍剧 1 +x:1 +增值率 1 +x:1 +共和国院 1 +x:1 +固墙镇 1 +x:1 +闭合性 1 +x:1 +请罪 1 +x:1 +杯壁 1 +x:1 +棕色 1 +x:1 +增加值 1 +x:1 +通古斯 1 +x:1 +揪扯 1 +x:1 +全州县 1 +x:1 +特使 1 +x:1 +考察期 1 +x:1 +哭喊者 1 +x:1 +毅然 1 +x:1 +悉尼 1 +x:1 +雅温得 1 +x:1 +四平市 1 +x:1 +秋菊 1 +x:1 +返聘者 1 +x:1 +屠宰 1 +x:1 +厕所 1 +x:1 +裹进 1 +x:1 +荧光灯 1 +x:1 +冷板凳 1 +x:1 +合肥市 1 +x:1 +防反术 1 +x:1 +造价 1 +x:1 +一破了之 1 +x:1 +持久 1 +x:1 +侍应生 1 +x:1 +转运费 1 +x:1 +巴德梅 1 +x:1 +诗词 1 +x:1 +正文 1 +x:1 +莫斯科市 1 +x:1 +中央门 1 +x:1 +直行 1 +x:1 +吸收量 1 +x:1 +总的看 1 +x:1 +前人种树 1 +x:1 +台桌 1 +x:1 +唐沟村 1 +x:1 +特例 1 +x:1 +使唤 1 +x:1 +省纪委 1 +x:1 +社会课 1 +x:1 +鸡零狗碎 1 +x:1 +红狐 1 +x:1 +莱西县 1 +x:1 +微处理机 1 +x:1 +灯头 1 +x:1 +旗袍 1 +x:1 +族民 1 +x:1 +烟土 1 +x:1 +原判 1 +x:1 +害羞 1 +x:1 +大南门 1 +x:1 +双学双争 1 +x:1 +南麓 1 +x:1 +惟有 1 +x:1 +烟圈 1 +x:1 +厉行改革 1 +x:1 +雷米特杯 1 +x:1 +新安镇 1 +x:1 +读诗班 1 +x:1 +浩大 1 +x:1 +叶腋 1 +x:1 +穴施 1 +x:1 +健 252 +x:252 +瑞士制 1 +x:1 +史河 1 +x:1 +切线 1 +x:1 +冲绳馆 1 +x:1 +如诗如画 1 +x:1 +下城区 1 +x:1 +骨 33 +x:33 +蒙山 1 +x:1 +学贯中西 1 +x:1 +负面 1 +x:1 +文冠果 1 +x:1 +全稿 1 +x:1 +数一数二 1 +x:1 +榴弹炮 1 +x:1 +科研费 1 +x:1 +课表 1 +x:1 +失血 1 +x:1 +丰隆 1 +x:1 +入学量 1 +x:1 +七六年 1 +x:1 +读本 1 +x:1 +数米而炊 1 +x:1 +称称 1 +x:1 +室内赛 1 +x:1 +现场 1 +x:1 +烟壶 1 +x:1 +江苏队 1 +x:1 +外在化 1 +x:1 +躯 10 +x:10 +失衡 1 +x:1 +‰ 1 +x:1 +螃蟹 1 +x:1 +公文夹 1 +x:1 +东荡 1 +x:1 +桑寄生 1 +x:1 +现在 1 +x:1 +篡党 1 +x:1 +有名儿 1 +x:1 +彝良 1 +x:1 +底稿 1 +x:1 +饥肠辘辘 1 +x:1 +清澈 1 +x:1 +清澄 1 +x:1 +索道 1 +x:1 +瓦松 1 +x:1 +天有一算 1 +x:1 +京腔 1 +x:1 +矿物 1 +x:1 +孝敬 1 +x:1 +蒙受 1 +x:1 +肆扰 1 +x:1 +近代化 1 +x:1 +闩 1 +x:1 +绘绣 1 +x:1 +铸模 1 +x:1 +拜物教 1 +x:1 +摊头 1 +x:1 +豁出去 1 +x:1 +公安科 1 +x:1 +水气热 1 +x:1 +饶 33 +x:33 +晋园队 1 +x:1 +自在 1 +x:1 +京二胡 1 +x:1 +灾殃 1 +x:1 +近代史 1 +x:1 +南里 1 +x:1 +回忆录 1 +x:1 +滇东南 1 +x:1 +商亭 1 +x:1 +搏击 1 +x:1 +威虎山 1 +x:1 +绝种 1 +x:1 +嘴唇 1 +x:1 +药引子 1 +x:1 +可变电容 1 +x:1 +喀若拉 1 +x:1 +休斯敦 1 +x:1 +胖乎乎 1 +x:1 +台板 1 +x:1 +代表者 1 +x:1 +中质油 1 +x:1 +枕心 1 +x:1 +男排 1 +x:1 +接力赛跑 1 +x:1 +剑兰 1 +x:1 +农工商贸 1 +x:1 +愧色 1 +x:1 +东莞 1 +x:1 +铁四局 1 +x:1 +不甚了了 1 +x:1 +钉鞋 1 +x:1 +军情 1 +x:1 +博极群书 1 +x:1 +海运局 1 +x:1 +经营商 1 +x:1 +匿迹销声 1 +x:1 +全站 1 +x:1 +味蕾 1 +x:1 +须德海 1 +x:1 +东莱 1 +x:1 +提供 1 +x:1 +闽江 1 +x:1 +校注者 1 +x:1 +底窑 1 +x:1 +叶绿素 1 +x:1 +国贸 1 +x:1 +布线 1 +x:1 +基干民兵 1 +x:1 +发人深省 1 +x:1 +台本 1 +x:1 +燃眉之急 1 +x:1 +俗言俚语 1 +x:1 +鱼跃龙门 1 +x:1 +羊皮感 1 +x:1 +终南 1 +x:1 +洁牙剂 1 +x:1 +奖掖 1 +x:1 +设计者 1 +x:1 +连锁 1 +x:1 +布置 1 +x:1 +嗣母 1 +x:1 +争先恐后 1 +x:1 +团服 1 +x:1 +市百一店 1 +x:1 +氮 31 +x:31 +下不了台 1 +x:1 +中残联 1 +x:1 +托老院 1 +x:1 +之外 1 +x:1 +需求 1 +x:1 +坡 54 +x:54 +上镜率 1 +x:1 +台路沟乡 1 +x:1 +南退 1 +x:1 +畛域 1 +x:1 +诡怪 1 +x:1 +屎 13 +x:13 +枕席 1 +x:1 +土产 1 +x:1 +绿苞儿 1 +x:1 +知者 1 +x:1 +海南戏 1 +x:1 +南通 1 +x:1 +祠 3 +x:3 +监察室 1 +x:1 +代表室 1 +x:1 +湖西村 1 +x:1 +丰韵 1 +x:1 +看货费 1 +x:1 +宏定位 1 +x:1 +浍史村 1 +x:1 +老汤 1 +x:1 +雇工 1 +x:1 +珍珠梅 1 +x:1 +狩猎 1 +x:1 +栋号 1 +x:1 +东航 1 +x:1 +内讧 1 +x:1 +空白处 1 +x:1 +印度支那 1 +x:1 +提价 1 +x:1 +推陈出新 1 +x:1 +吹糠见米 1 +x:1 +南郊 1 +x:1 +答数 1 +x:1 +江城 1 +x:1 +向来 1 +x:1 +稷山 1 +x:1 +往返票 1 +x:1 +内包装 1 +x:1 +清湖 1 +x:1 +中国部 1 +x:1 +纳溪区 1 +x:1 +摔打 1 +x:1 +南部 1 +x:1 +红糖 1 +x:1 +收官战 1 +x:1 +是非观 1 +x:1 +轮值 1 +x:1 +广播电台 1 +x:1 +恢弘 1 +x:1 +提亲 1 +x:1 +幼儿教育 1 +x:1 +清清 1 +x:1 +精品课 1 +x:1 +沙俄 1 +x:1 +互惠 1 +x:1 +红粱 1 +x:1 +裹腿 1 +x:1 +毡幕 1 +x:1 +驱逐舰 1 +x:1 +默默不语 1 +x:1 +购买点 1 +x:1 +不得劲 1 +x:1 +当地人 1 +x:1 +京胡 1 +x:1 +等腰 1 +x:1 +憨笑 1 +x:1 +闽浙 1 +x:1 +红粉 1 +x:1 +切点 1 +x:1 +滴定管 1 +x:1 +江垭 1 +x:1 +总加 1 +x:1 +阴离子 1 +x:1 +壶 15 +x:15 +大兴土木 1 +x:1 +队友 1 +x:1 +全篇 1 +x:1 +睿 2 +x:2 +为政之道 1 +x:1 +皮袋 1 +x:1 +莱西市 1 +x:1 +连队 1 +x:1 +橙红色 1 +x:1 +堪称 1 +x:1 +徒然 1 +x:1 +细胞质 1 +x:1 +经营型 1 +x:1 +蒙军 1 +x:1 +坯料 1 +x:1 +正点 1 +x:1 +太清宫 1 +x:1 +污秽 1 +x:1 +秋荔亭 1 +x:1 +清淤 1 +x:1 +该罪 1 +x:1 +清淡 1 +x:1 +蒙冤 1 +x:1 +讣闻 1 +x:1 +装箱单 1 +x:1 +伪劣 1 +x:1 +绝笔 1 +x:1 +读数 1 +x:1 +中外文 1 +x:1 +边检处 1 +x:1 +皮装 1 +x:1 +紫禁城 1 +x:1 +矿灯 1 +x:1 +失言 1 +x:1 +受益匪浅 1 +x:1 +连降 1 +x:1 +互换 1 +x:1 +长眠不醒 1 +x:1 +医械 1 +x:1 +近期 1 +x:1 +高频电波 1 +x:1 +扁平足 1 +x:1 +函授生 1 +x:1 +若有所失 1 +x:1 +英吉利 1 +x:1 +0 70 +x:70 +福鼎市 1 +x:1 +奖惩 1 +x:1 +台方 1 +x:1 +说到做到 1 +x:1 +轮 830 +x:830 +俊俏 1 +x:1 +拙朴 1 +x:1 +底码 1 +x:1 +安守本分 1 +x:1 +管家务乡 1 +x:1 +魔鬼 1 +x:1 +毒气室 1 +x:1 +枕巾 1 +x:1 +塞擦音 1 +x:1 +矿点 1 +x:1 +黏性 1 +x:1 +清流 1 +x:1 +拼死 1 +x:1 +一着不慎 1 +x:1 +妖蜮 1 +x:1 +栗 8 +x:8 +滞期 1 +x:1 +强权 1 +x:1 +电动机 1 +x:1 +艺专人 1 +x:1 +瓦斯 1 +x:1 +郡县制 1 +x:1 +台数 1 +x:1 +商界 1 +x:1 +必亡 1 +x:1 +热气腾腾 1 +x:1 +纸马轿 1 +x:1 +势在必进 1 +x:1 +致歉 1 +x:1 +遮天盖地 1 +x:1 +增白剂 1 +x:1 +导航站 1 +x:1 +风口浪尖 1 +x:1 +烧水 1 +x:1 +垃圾池 1 +x:1 +骤减 1 +x:1 +清洁 1 +x:1 +弹力布 1 +x:1 +冀城县 1 +x:1 +清洗 1 +x:1 +俗成于下 1 +x:1 +录音机 1 +x:1 +杠铃 1 +x:1 +谢湖村 1 +x:1 +手工艺 1 +x:1 +链式反应 1 +x:1 +清津 1 +x:1 +流传于世 1 +x:1 +褂衫 1 +x:1 +倾吐 1 +x:1 +逐步 1 +x:1 +平等党 1 +x:1 +苦菜花 1 +x:1 +杏子 1 +x:1 +稳中有升 1 +x:1 +球状 1 +x:1 +东联 1 +x:1 +河塘 1 +x:1 +全社 1 +x:1 +三伏 1 +x:1 +结肠炎 1 +x:1 +谷糠 1 +x:1 +资助面 1 +x:1 +切片 1 +x:1 +监察委 1 +x:1 +户主名 1 +x:1 +呜呼哀哉 1 +x:1 +赞美 1 +x:1 +乐安县 1 +x:1 +益田村 1 +x:1 +蒿子 1 +x:1 +冶炼 1 +x:1 +缝合 1 +x:1 +肆意 1 +x:1 +繁荣昌盛 1 +x:1 +朝秦暮楚 1 +x:1 +伟晶岩 1 +x:1 +鼻烟 1 +x:1 +立翁终于 1 +x:1 +清波 1 +x:1 +化学当量 1 +x:1 +熔炉 1 +x:1 +庹 1 +x:1 +清泰 1 +x:1 +餐盒 1 +x:1 +被采访者 1 +x:1 +详备 1 +x:1 +散 129 +x:129 +境内 1 +x:1 +拌嘴 1 +x:1 +躬逢其盛 1 +x:1 +潘 390 +x:390 +变化球 1 +x:1 +阳石隘 1 +x:1 +特立尼达 1 +x:1 +吹牛皮 1 +x:1 +鲠直 1 +x:1 +育壮 1 +x:1 +牛马 1 +x:1 +烽 3 +x:3 +鼻炎 1 +x:1 +境况 1 +x:1 +河堤 1 +x:1 +一小撮 1 +x:1 +抢修队 1 +x:1 +黄褐斑 1 +x:1 +溢流坝段 1 +x:1 +东胜 1 +x:1 +掩蔽体 1 +x:1 +烟子 1 +x:1 +刑 33 +x:33 +清江 1 +x:1 +固始县 1 +x:1 +毛峰茶 1 +x:1 +执行数 1 +x:1 +红绸 1 +x:1 +争雄 1 +x:1 +跳水赛 1 +x:1 +暗计 1 +x:1 +跑题 1 +x:1 +步数 1 +x:1 +孤本 1 +x:1 +军控 1 +x:1 +全福 1 +x:1 +暗记 1 +x:1 +暗访 1 +x:1 +裸体 1 +x:1 +失误 1 +x:1 +球王 1 +x:1 +团日 1 +x:1 +丰镐 1 +x:1 +监察处 1 +x:1 +代表处 1 +x:1 +成员国 1 +x:1 +搏动 1 +x:1 +全称 1 +x:1 +指挥室 1 +x:1 +航空局 1 +x:1 +承上启下 1 +x:1 +红纱 1 +x:1 +队医 1 +x:1 +航空展 1 +x:1 +红线 1 +x:1 +红松林 1 +x:1 +春灌水 1 +x:1 +豢养 1 +x:1 +准谱 1 +x:1 +必修 1 +x:1 +饱和量 1 +x:1 +经编业 1 +x:1 +亚洲型 1 +x:1 +暗语 1 +x:1 +冠有 1 +x:1 +迟到 1 +x:1 +抬价 1 +x:1 +团旗 1 +x:1 +⑵ 6 +x:6 +作战科 1 +x:1 +哨位 1 +x:1 +清水 1 +x:1 +松脂 1 +x:1 +杂差 1 +x:1 +溃疡病 1 +x:1 +交光互影 1 +x:1 +博弈论 1 +x:1 +马塘村 1 +x:1 +红票 1 +x:1 +塔塔尔族 1 +x:1 +缝包 1 +x:1 +愤然 1 +x:1 +碧水 1 +x:1 +避孕环 1 +x:1 +心灵史 1 +x:1 +暗花儿 1 +x:1 +谐谑 1 +x:1 +秦淮河 1 +x:1 +起居厅 1 +x:1 +乃堆拉 1 +x:1 +大宁河 1 +x:1 +儿郎 1 +x:1 +无线局 1 +x:1 +麻豆腐 1 +x:1 +雄奇 1 +x:1 +逮捕令 1 +x:1 +笺 4 +x:4 +避孕率 1 +x:1 +索骥 1 +x:1 +非成员 1 +x:1 +蒙城 1 +x:1 +元古界 1 +x:1 +叙家常 1 +x:1 +病人 1 +x:1 +捎带 1 +x:1 +工丽 1 +x:1 +耿镇 1 +x:1 +浩劫 1 +x:1 +憷头 1 +x:1 +王庆坨镇 1 +x:1 +六五年 1 +x:1 +纲领性 1 +x:1 +衣角 1 +x:1 +自励 1 +x:1 +直系亲属 1 +x:1 +法文 1 +x:1 +专业 1 +x:1 +团扇 1 +x:1 +互救 1 +x:1 +侧枝 1 +x:1 +准许 1 +x:1 +拉平 1 +x:1 +遗址性 1 +x:1 +杯口 1 +x:1 +慨叹 1 +x:1 +红金龙队 1 +x:1 +供热率 1 +x:1 +欲望化 1 +x:1 +半山区 1 +x:1 +善款 1 +x:1 +工业 1 +x:1 +樟柳碱 1 +x:1 +屏幕 1 +x:1 +专一 1 +x:1 +轻骑队 1 +x:1 +跨区 1 +x:1 +全线 1 +x:1 +协作网 1 +x:1 +地域性 1 +x:1 +玉米油 1 +x:1 +墓穴 1 +x:1 +互斥 1 +x:1 +函授班 1 +x:1 +阿克莫拉 1 +x:1 +数学家 1 +x:1 +河心 1 +x:1 +工价 1 +x:1 +工件 1 +x:1 +将计就计 1 +x:1 +戟 1 +x:1 +货色 1 +x:1 +嘴儿 1 +x:1 +掰掰 1 +x:1 +粤籍 1 +x:1 +装门面 1 +x:1 +火伤 1 +x:1 +陈米 1 +x:1 +产业群体 1 +x:1 +鸡爪爪 1 +x:1 +拉康 1 +x:1 +南门 1 +x:1 +中原区 1 +x:1 +驼铃 1 +x:1 +松虎 1 +x:1 +下北 1 +x:1 +阅卷 1 +x:1 +底细 1 +x:1 +廊坊市 1 +x:1 +收益者 1 +x:1 +富婆 1 +x:1 +底线 1 +x:1 +笛子 1 +x:1 +底纹 1 +x:1 +江天 1 +x:1 +大袋蛾 1 +x:1 +工交 1 +x:1 +享受型 1 +x:1 +工亡 1 +x:1 +季报 1 +x:1 +商用 1 +x:1 +民惟邦本 1 +x:1 +工人 1 +x:1 +新芬党外 1 +x:1 +利率差 1 +x:1 +变化率 1 +x:1 +删节 1 +x:1 +工于 1 +x:1 +工事 1 +x:1 +充其量 1 +x:1 +松蘑 1 +x:1 +族权 1 +x:1 +清欠 1 +x:1 +矿盐 1 +x:1 +连部 1 +x:1 +辩 11 +x:11 +恳 1 +x:1 +团拜 1 +x:1 +时装界 1 +x:1 +倾心 1 +x:1 +直通 1 +x:1 +服装业 1 +x:1 +浩叹 1 +x:1 +小老婆 1 +x:1 +师生比 1 +x:1 +专使 1 +x:1 +高温多雨 1 +x:1 +肉 162 +x:162 +死亡区 1 +x:1 +海联会 1 +x:1 +俭汤乡 1 +x:1 +流域库坝 1 +x:1 +宏 46 +x:46 +瓦房 1 +x:1 +江华 1 +x:1 +请电 1 +x:1 +境域 1 +x:1 +婆婆 1 +x:1 +汇款单 1 +x:1 +拉开 1 +x:1 +工位 1 +x:1 +胡言乱语 1 +x:1 +缝制 1 +x:1 +合眼 1 +x:1 +埋植术 1 +x:1 +现券 1 +x:1 +恢宏 1 +x:1 +环认委 1 +x:1 +外贸局 1 +x:1 +佛莱芒 1 +x:1 +氟里昂 1 +x:1 +工余 1 +x:1 +折扣价 1 +x:1 +烧毁 1 +x:1 +艰险 1 +x:1 +工体 1 +x:1 +婆娑 1 +x:1 +到厂价 1 +x:1 +查阅制 1 +x:1 +江北 1 +x:1 +工伤 1 +x:1 +废品站 1 +x:1 +查全率 1 +x:1 +歌宴 1 +x:1 +富宁县 1 +x:1 +垂体 1 +x:1 +分色片 1 +x:1 +高度酒 1 +x:1 +木板床 1 +x:1 +委任制 1 +x:1 +经得住 1 +x:1 +扶正祛邪 1 +x:1 +鸭嘴兽 1 +x:1 +全网 1 +x:1 +工企 1 +x:1 +红砖 1 +x:1 +失败 1 +x:1 +红砒 1 +x:1 +保健院 1 +x:1 +糊口 1 +x:1 +块根 1 +x:1 +灯台 1 +x:1 +食火鸡 1 +x:1 +阿克苏市 1 +x:1 +挽辞 1 +x:1 +证明信 1 +x:1 +重槌 1 +x:1 +烧死 1 +x:1 +沙土地 1 +x:1 +谐趣 1 +x:1 +红磷 1 +x:1 +台扇 1 +x:1 +读报 1 +x:1 +不舍昼夜 1 +x:1 +复耕 1 +x:1 +班次 1 +x:1 +口粮田 1 +x:1 +海相沉积 1 +x:1 +到场 1 +x:1 +军方 1 +x:1 +鲇鱼 1 +x:1 +现势 1 +x:1 +全羊 1 +x:1 +喜结良缘 1 +x:1 +舵 4 +x:4 +歌子 1 +x:1 +功利性 1 +x:1 +所筹 1 +x:1 +布篷 1 +x:1 +资助金 1 +x:1 +打鱼郎 1 +x:1 +结肠癌 1 +x:1 +杀头 1 +x:1 +班歌 1 +x:1 +矿石 1 +x:1 +河底 1 +x:1 +河床 1 +x:1 +连里 1 +x:1 +军旅 1 +x:1 +参照系 1 +x:1 +失足 1 +x:1 +婆媳 1 +x:1 +南钢 1 +x:1 +瓦 48 +x:48 +内斜视 1 +x:1 +批销费率 1 +x:1 +艰难 1 +x:1 +大辩论 1 +x:1 +奖杯 1 +x:1 +直航 1 +x:1 +琴书 1 +x:1 +磁共振 1 +x:1 +境地 1 +x:1 +避孕片 1 +x:1 +衰耗值 1 +x:1 +磺胺噻唑 1 +x:1 +评估关 1 +x:1 +商品肥料 1 +x:1 +夹衣 1 +x:1 +粤绣 1 +x:1 +云天 1 +x:1 +麦苗儿 1 +x:1 +混合金 1 +x:1 +歌声 1 +x:1 +陈绍 1 +x:1 +南非 1 +x:1 +褚 91 +x:91 +不屑一顾 1 +x:1 +红筹 1 +x:1 +有褒有贬 1 +x:1 +犹豫不前 1 +x:1 +进出口权 1 +x:1 +安稳感 1 +x:1 +南面 1 +x:1 +不辞辛劳 1 +x:1 +反而 1 +x:1 +谷种 1 +x:1 +高梁米 1 +x:1 +秸秆 1 +x:1 +直至 1 +x:1 +让利者 1 +x:1 +念兹在兹 1 +x:1 +国庆日 1 +x:1 +各司其职 1 +x:1 +于洪区 1 +x:1 +严紧 1 +x:1 +营养品 1 +x:1 +礼泉县 1 +x:1 +儒释道兵 1 +x:1 +山东团 1 +x:1 +绝缘 1 +x:1 +窗牖 1 +x:1 +谢却 1 +x:1 +号码机 1 +x:1 +亚欧大陆 1 +x:1 +拉屎 1 +x:1 +龙胆紫 1 +x:1 +屏山 1 +x:1 +古里古怪 1 +x:1 +攸县 1 +x:1 +驼队 1 +x:1 +墓碑 1 +x:1 +冥诞 1 +x:1 +方块 1 +x:1 +预测卡 1 +x:1 +抽象画 1 +x:1 +失踪 1 +x:1 +菌业 1 +x:1 +呼 53 +x:53 +新开河 1 +x:1 +渥京 1 +x:1 +桌面 1 +x:1 +河州 1 +x:1 +难道说 1 +x:1 +铁路局 1 +x:1 +檐子 1 +x:1 +打主意 1 +x:1 +航空处 1 +x:1 +经营化 1 +x:1 +卫戍 1 +x:1 +战术学 1 +x:1 +凡间 1 +x:1 +浙江 1 +x:1 +清楚 1 +x:1 +自欺欺人 1 +x:1 +息怒 1 +x:1 +经营区 1 +x:1 +庙东营 1 +x:1 +结算量 1 +x:1 +垦 15 +x:15 +人造行星 1 +x:1 +英主 1 +x:1 +孪井滩 1 +x:1 +桑顿区 1 +x:1 +南韩 1 +x:1 +锌钡白 1 +x:1 +出生 1 +x:1 +幽默画 1 +x:1 +乌龙球 1 +x:1 +婆姨 1 +x:1 +艺展 1 +x:1 +合璧 1 +x:1 +河工 1 +x:1 +仲裁费 1 +x:1 +跨年度 1 +x:1 +夹被 1 +x:1 +轧道机 1 +x:1 +遗产部 1 +x:1 +直角坐标 1 +x:1 +田赛 1 +x:1 +滋味儿 1 +x:1 +史料 1 +x:1 +自办 1 +x:1 +垃圾桶 1 +x:1 +选出 1 +x:1 +底粪 1 +x:1 +割舍 1 +x:1 +机器人学 1 +x:1 +土机器 1 +x:1 +跨入 1 +x:1 +赈款 1 +x:1 +松萝 1 +x:1 +反胃 1 +x:1 +卷叶虫 1 +x:1 +现出 1 +x:1 +摘葡萄 1 +x:1 +夹袄 1 +x:1 +中心庄村 1 +x:1 +定滑轮 1 +x:1 +底粉 1 +x:1 +帛书 1 +x:1 +麻痹大意 1 +x:1 +硕 5 +x:5 +失身 1 +x:1 +保靖县 1 +x:1 +躁 14 +x:14 +广纳博取 1 +x:1 +松藻 1 +x:1 +倾尽 1 +x:1 +苦丁茶 1 +x:1 +片言只语 1 +x:1 +歌儿 1 +x:1 +卫家湾 1 +x:1 +宁缺勿滥 1 +x:1 +军服 1 +x:1 +桂山镇 1 +x:1 +蟾光 1 +x:1 +军机 1 +x:1 +河山 1 +x:1 +遗产税 1 +x:1 +决 64 +x:64 +现值 1 +x:1 +合用 1 +x:1 +育婴堂 1 +x:1 +允许 1 +x:1 +嫖娼 1 +x:1 +活动证 1 +x:1 +丰功伟业 1 +x:1 +宫廷部 1 +x:1 +嘤鸣 1 +x:1 +军权 1 +x:1 +评断 1 +x:1 +丰采 1 +x:1 +胡萝卜素 1 +x:1 +奖旗 1 +x:1 +模特 1 +x:1 +丰饶 1 +x:1 +古建筑学 1 +x:1 +相电压 1 +x:1 +豪放不羁 1 +x:1 +笛声 1 +x:1 +圆鼓鼓 1 +x:1 +模版 1 +x:1 +写实化 1 +x:1 +反观 1 +x:1 +不可言传 1 +x:1 +赚钱 1 +x:1 +无故障 1 +x:1 +高发区 1 +x:1 +东营 1 +x:1 +南阳 1 +x:1 +反腐 1 +x:1 +允诺 1 +x:1 +怯生生 1 +x:1 +直肠 1 +x:1 +大别山区 1 +x:1 +丁 606 +x:606 +转波台 1 +x:1 +摩登 1 +x:1 +南雄 1 +x:1 +姿容 1 +x:1 +按捺不住 1 +x:1 +思想性 1 +x:1 +习习 1 +x:1 +姣好 1 +x:1 +人造冰 1 +x:1 +失迎 1 +x:1 +皮质 1 +x:1 +象脚鼓 1 +x:1 +遗患 1 +x:1 +蚕蛹油 1 +x:1 +恢复 1 +x:1 +切盼 1 +x:1 +北教场 1 +x:1 +免疫针 1 +x:1 +松蕈 1 +x:1 +批评稿 1 +x:1 +对讲机 1 +x:1 +英伦 1 +x:1 +病假条 1 +x:1 +夹角 1 +x:1 +名利双收 1 +x:1 +南隅 1 +x:1 +桅 4 +x:4 +便人 1 +x:1 +创作面 1 +x:1 +刘楼村 1 +x:1 +标题 1 +x:1 +酵母 1 +x:1 +师宗县 1 +x:1 +磐田队 1 +x:1 +河岸 1 +x:1 +延时赛 1 +x:1 +灾民 1 +x:1 +油气 1 +x:1 +便于 1 +x:1 +故乡人 1 +x:1 +忍痛 1 +x:1 +联合战线 1 +x:1 +灯具 1 +x:1 +便了 1 +x:1 +清样 1 +x:1 +搭桥会 1 +x:1 +勾 27 +x:27 +雕栏画栋 1 +x:1 +南襄 1 +x:1 +慈江道 1 +x:1 +军研 1 +x:1 +弥塞亚 1 +x:1 +业务者 1 +x:1 +双日 1 +x:1 +旺季 1 +x:1 +海宴 1 +x:1 +擦伤 1 +x:1 +垮 52 +x:52 +无机肥料 1 +x:1 +彭阳县 1 +x:1 +布景 1 +x:1 +底托 1 +x:1 +海宁 1 +x:1 +兜儿 1 +x:1 +龙吻 1 +x:1 +海安 1 +x:1 +人造丝 1 +x:1 +梅家坞 1 +x:1 +花朝月夕 1 +x:1 +浓浓的 1 +x:1 +北冶乡 1 +x:1 +大宝镇 1 +x:1 +红教 1 +x:1 +鲁西 1 +x:1 +冷水江市 1 +x:1 +江东 1 +x:1 +悬崖勒马 1 +x:1 +欧币 1 +x:1 +法扎巴德 1 +x:1 +兜兜 1 +x:1 +冈比亚河 1 +x:1 +分光仪 1 +x:1 +无名帖 1 +x:1 +丧偶者 1 +x:1 +潸然泪下 1 +x:1 +海寇 1 +x:1 +全托 1 +x:1 +晤 4 +x:4 +南箕北斗 1 +x:1 +航行预试 1 +x:1 +嘭嘭 1 +x:1 +地质局 1 +x:1 +专列 1 +x:1 +评估会 1 +x:1 +专刊 1 +x:1 +争购 1 +x:1 +全才 1 +x:1 +毛织 1 +x:1 +全所 1 +x:1 +玉带 1 +x:1 +红日 1 +x:1 +便函 1 +x:1 +团级 1 +x:1 +工勤 1 +x:1 +露一手 1 +x:1 +硬手 1 +x:1 +诡称 1 +x:1 +灯丝 1 +x:1 +火化 1 +x:1 +柔嫩 1 +x:1 +负者 1 +x:1 +季朗村 1 +x:1 +鲇腹 1 +x:1 +赤子情 1 +x:1 +红旗 1 +x:1 +窗沿 1 +x:1 +撸 2 +x:2 +中晚 1 +x:1 +脚丫子 1 +x:1 +笔耕者 1 +x:1 +采集者 1 +x:1 +甚而 1 +x:1 +曹娥江 1 +x:1 +甚者 1 +x:1 +工务 1 +x:1 +现地 1 +x:1 +渔翁得利 1 +x:1 +倒计时牌 1 +x:1 +清真 1 +x:1 +台柱 1 +x:1 +冤沉海底 1 +x:1 +塘市镇 1 +x:1 +跳水队 1 +x:1 +称意 1 +x:1 +巴茅茨 1 +x:1 +储洪 1 +x:1 +不识时变 1 +x:1 +柔媚 1 +x:1 +涝害 1 +x:1 +伊宁市 1 +x:1 +团练 1 +x:1 +照实 1 +x:1 +杨树街 1 +x:1 +博物馆 1 +x:1 +工办 1 +x:1 +近体诗 1 +x:1 +工力 1 +x:1 +海子 1 +x:1 +考察点 1 +x:1 +问心有愧 1 +x:1 +院友 1 +x:1 +现世 1 +x:1 +英军 1 +x:1 +南行 1 +x:1 +特大 1 +x:1 +南街 1 +x:1 +赝品 1 +x:1 +清盘 1 +x:1 +服装史 1 +x:1 +火力 1 +x:1 +窗洞 1 +x:1 +石鼓文 1 +x:1 +粘滑 1 +x:1 +赞方 1 +x:1 +残壁 1 +x:1 +全程 1 +x:1 +布条 1 +x:1 +专卖 1 +x:1 +琮 8 +x:8 +委任书 1 +x:1 +边卡 1 +x:1 +特多 1 +x:1 +连贯 1 +x:1 +合欢 1 +x:1 +东马 1 +x:1 +火势 1 +x:1 +栎林 1 +x:1 +专区 1 +x:1 +半山上 1 +x:1 +驳回 1 +x:1 +大湖型 1 +x:1 +工匠 1 +x:1 +仪仗兵 1 +x:1 +结尾处 1 +x:1 +泰宁 1 +x:1 +泌阳 1 +x:1 +工区 1 +x:1 +泰安 1 +x:1 +赤色 1 +x:1 +联运站 1 +x:1 +自动伞 1 +x:1 +帐篷顶 1 +x:1 +阴森森 1 +x:1 +外交特权 1 +x:1 +服装厂 1 +x:1 +史稿 1 +x:1 +问卷调查 1 +x:1 +工青妇 1 +x:1 +绵 3 +x:3 +垂危 1 +x:1 +盛情难却 1 +x:1 +逛荡 1 +x:1 +初露锋芒 1 +x:1 +震天 1 +x:1 +评估价 1 +x:1 +乳娘 1 +x:1 +陕西梆子 1 +x:1 +抢救性 1 +x:1 +鱼虾蟹贝 1 +x:1 +专号 1 +x:1 +筒裤 1 +x:1 +灯伞 1 +x:1 +于心何忍 1 +x:1 +老两口 1 +x:1 +新娘节 1 +x:1 +不识时务 1 +x:1 +失重 1 +x:1 +擦亮 1 +x:1 +日见明朗 1 +x:1 +耶鲁 1 +x:1 +杯中 1 +x:1 +赤芍 1 +x:1 +当地国 1 +x:1 +工友 1 +x:1 +政治司 1 +x:1 +河坊村 1 +x:1 +筒裙 1 +x:1 +跨上 1 +x:1 +柏林墙 1 +x:1 +烧着 1 +x:1 +徇情枉法 1 +x:1 +适逢其时 1 +x:1 +粗初加工 1 +x:1 +趋炎附势 1 +x:1 +自由王国 1 +x:1 +卡巴胂 1 +x:1 +申购 1 +x:1 +瞻榆乡 1 +x:1 +所有 1 +x:1 +才 3648 +x:3648 +费边主义 1 +x:1 +仔仔细细 1 +x:1 +心肌梗塞 1 +x:1 +亚硫酸 1 +x:1 +现今 1 +x:1 +乞求 1 +x:1 +梁峁沟壑 1 +x:1 +有意无意 1 +x:1 +姗姗来迟 1 +x:1 +码多分址 1 +x:1 +现价 1 +x:1 +笼子 1 +x:1 +水漫金山 1 +x:1 +清瘦 1 +x:1 +工厂 1 +x:1 +现代 1 +x:1 +偶尔 1 +x:1 +莱比锡 1 +x:1 +抓阄 1 +x:1 +窟口 1 +x:1 +特委 1 +x:1 +全总 1 +x:1 +蹲苗 1 +x:1 +不知死活 1 +x:1 +地质带 1 +x:1 +锭子 1 +x:1 +玉屏 1 +x:1 +农副工 1 +x:1 +木人石心 1 +x:1 +脉诀 1 +x:1 +红松 1 +x:1 +价差费 1 +x:1 +推诿 1 +x:1 +守护林 1 +x:1 +渺小 1 +x:1 +大别山乡 1 +x:1 +合格 1 +x:1 +浪淘沙 1 +x:1 +贪 41 +x:41 +红杉 1 +x:1 +回吐 1 +x:1 +惟独 1 +x:1 +赤脚 1 +x:1 +蛇皮 1 +x:1 +充足 1 +x:1 +尊 70 +x:70 +空前未有 1 +x:1 +率由旧章 1 +x:1 +大吵大闹 1 +x:1 +秋雨 1 +x:1 +红木 1 +x:1 +毛纱 1 +x:1 +虎符 1 +x:1 +懂事 1 +x:1 +残害 1 +x:1 +抑郁症 1 +x:1 +购买欲 1 +x:1 +全息 1 +x:1 +英勇 1 +x:1 +田野 1 +x:1 +田里 1 +x:1 +回合 1 +x:1 +脑满肠肥 1 +x:1 +澡盆 1 +x:1 +成员体 1 +x:1 +团籍 1 +x:1 +寒蝉 1 +x:1 +一清二白 1 +x:1 +割麦 1 +x:1 +文献集 1 +x:1 +持家 1 +x:1 +粘液 1 +x:1 +管弦乐团 1 +x:1 +敢做敢为 1 +x:1 +海大 1 +x:1 +衣被 1 +x:1 +圆滑 1 +x:1 +粮食作物 1 +x:1 +记分牌 1 +x:1 +过头粮 1 +x:1 +蒙古 1 +x:1 +秋阳 1 +x:1 +红柱 1 +x:1 +红柳 1 +x:1 +改进型 1 +x:1 +判别式 1 +x:1 +一锅端 1 +x:1 +赤膊 1 +x:1 +额 64 +x:64 +团粉 1 +x:1 +乳头 1 +x:1 +海外 1 +x:1 +散布式 1 +x:1 +块石 1 +x:1 +加勒比海 1 +x:1 +团粒 1 +x:1 +底情 1 +x:1 +大支援 1 +x:1 +残存 1 +x:1 +火儿 1 +x:1 +东首 1 +x:1 +导向性 1 +x:1 +群言堂 1 +x:1 +红枣 1 +x:1 +袁家岭 1 +x:1 +火光 1 +x:1 +罐笼 1 +x:1 +争辉 1 +x:1 +粪箕子 1 +x:1 +角 121 +x:121 +血脂 1 +x:1 +弹雨 1 +x:1 +真实化 1 +x:1 +肢残人 1 +x:1 +培训局 1 +x:1 +古庄店乡 1 +x:1 +报收 1 +x:1 +争辩 1 +x:1 +管弦乐器 1 +x:1 +红林 1 +x:1 +火具 1 +x:1 +电话声 1 +x:1 +垂死挣扎 1 +x:1 +红果 1 +x:1 +憨态 1 +x:1 +抢修车 1 +x:1 +里尔街 1 +x:1 +妇 7 +x:7 +专兼 1 +x:1 +梅江区 1 +x:1 +乘方 1 +x:1 +痛处 1 +x:1 +自以为是 1 +x:1 +眉欢眼笑 1 +x:1 +债款 1 +x:1 +罅隙 1 +x:1 +远离 1 +x:1 +工兵 1 +x:1 +丰台区 1 +x:1 +工具 1 +x:1 +虎穴 1 +x:1 +造孽 1 +x:1 +丰足 1 +x:1 +今晚报 1 +x:1 +堡安村 1 +x:1 +包购包销 1 +x:1 +存活率 1 +x:1 +红晕 1 +x:1 +质优价廉 1 +x:1 +工党 1 +x:1 +变线 1 +x:1 +虹彩 1 +x:1 +药价 1 +x:1 +维尔纽斯 1 +x:1 +发昏 1 +x:1 +婆 1 +x:1 +后江村 1 +x:1 +憨憨 1 +x:1 +科研院 1 +x:1 +便利 1 +x:1 +波特率 1 +x:1 +长城镇 1 +x:1 +大公储 1 +x:1 +松香 1 +x:1 +喷洒剂 1 +x:1 +连载 1 +x:1 +壶嘴 1 +x:1 +骨库 1 +x:1 +连轴 1 +x:1 +众议长 1 +x:1 +很快 1 +x:1 +鼻梁 1 +x:1 +随物赋形 1 +x:1 +殊死战 1 +x:1 +布放 1 +x:1 +儿辈 1 +x:1 +投鞭断流 1 +x:1 +东施效颦 1 +x:1 +提名 1 +x:1 +经营业 1 +x:1 +笼头 1 +x:1 +海堤 1 +x:1 +京昆剧院 1 +x:1 +专函 1 +x:1 +从无到有 1 +x:1 +如此而已 1 +x:1 +联络部 1 +x:1 +绝招 1 +x:1 +库亚巴市 1 +x:1 +岩松 1 +x:1 +蠕虫 1 +x:1 +一九九七 1 +x:1 +东风 1 +x:1 +火候 1 +x:1 +耐人思索 1 +x:1 +永丰 1 +x:1 +瓜果皮核 1 +x:1 +台籍 1 +x:1 +笼外 1 +x:1 +印藏者 1 +x:1 +牵牛 1 +x:1 +直言进谏 1 +x:1 +穆棱市 1 +x:1 +鲁山县 1 +x:1 +逭 1 +x:1 +联合公报 1 +x:1 +艾单驼 1 +x:1 +特定 1 +x:1 +照壁 1 +x:1 +名丑 1 +x:1 +玉工 1 +x:1 +安多县 1 +x:1 +连连 1 +x:1 +替罪羊 1 +x:1 +清理 1 +x:1 +盗码者 1 +x:1 +盲从者 1 +x:1 +适销品 1 +x:1 +布料 1 +x:1 +汕 4 +x:4 +绝技 1 +x:1 +裸地 1 +x:1 +英华 1 +x:1 +石轿村 1 +x:1 +公安所 1 +x:1 +复合肥料 1 +x:1 +果珍杯 1 +x:1 +负荷 1 +x:1 +照墙 1 +x:1 +风霜雨雪 1 +x:1 +工农 1 +x:1 +方山县 1 +x:1 +丰赡 1 +x:1 +总煤师 1 +x:1 +布施 1 +x:1 +粮柜 1 +x:1 +海塘 1 +x:1 +一手一足 1 +x:1 +硬环境 1 +x:1 +族群 1 +x:1 +照彻 1 +x:1 +犟劲 1 +x:1 +生生息息 1 +x:1 +布托 1 +x:1 +拿来主义 1 +x:1 +尊老敬老 1 +x:1 +解说词 1 +x:1 +眼目 1 +x:1 +矿渣 1 +x:1 +小市民 1 +x:1 +照录 1 +x:1 +酌情 1 +x:1 +提单 1 +x:1 +疆场 1 +x:1 +赞皇县 1 +x:1 +喜事 1 +x:1 +污染 1 +x:1 +八点钟 1 +x:1 +提升 1 +x:1 +兜售 1 +x:1 +窗格 1 +x:1 +窗框 1 +x:1 +织 45 +x:45 +对接口 1 +x:1 +当地化 1 +x:1 +造就 1 +x:1 +全景 1 +x:1 +反驳 1 +x:1 +盅子 1 +x:1 +军籍 1 +x:1 +摩润 1 +x:1 +南货 1 +x:1 +绝收 1 +x:1 +请求 1 +x:1 +一口咬定 1 +x:1 +护岸林 1 +x:1 +到任 1 +x:1 +惹事生非 1 +x:1 +跟随者 1 +x:1 +阴间多云 1 +x:1 +婴 7 +x:7 +陈庄乡 1 +x:1 +提包 1 +x:1 +法兰绒 1 +x:1 +把脉 1 +x:1 +布拉 1 +x:1 +包 384 +x:384 +海弯 1 +x:1 +喜人 1 +x:1 +九龙口 1 +x:1 +南京路 1 +x:1 +憎 3 +x:3 +禄位 1 +x:1 +把握性 1 +x:1 +连袂 1 +x:1 +英名 1 +x:1 +布拖 1 +x:1 +提取 1 +x:1 +一九九九 1 +x:1 +做贡献期 1 +x:1 +装模作样 1 +x:1 +绝无 1 +x:1 +急转直下 1 +x:1 +火场 1 +x:1 +军粮 1 +x:1 +务期 1 +x:1 +参差不齐 1 +x:1 +团章 1 +x:1 +窗棂 1 +x:1 +蒙住 1 +x:1 +渝水 1 +x:1 +艰辛 1 +x:1 +广安门 1 +x:1 +拼画 1 +x:1 +骨头 1 +x:1 +疆域 1 +x:1 +豁达大度 1 +x:1 +泰币 1 +x:1 +终于 1 +x:1 +源流 1 +x:1 +松鸡 1 +x:1 +终了 1 +x:1 +沙土乡 1 +x:1 +买家 1 +x:1 +群山万壑 1 +x:1 +溶菌素 1 +x:1 +国奥队 1 +x:1 +买客 1 +x:1 +柏林州 1 +x:1 +杀气腾腾 1 +x:1 +底板 1 +x:1 +皮鞋 1 +x:1 +高中低档 1 +x:1 +暗锁 1 +x:1 +课长 1 +x:1 +颉 1 +x:1 +稿件 1 +x:1 +磨合期 1 +x:1 +交叉有致 1 +x:1 +合演 1 +x:1 +切汇 1 +x:1 +模样 1 +x:1 +大袋鼠 1 +x:1 +穿小鞋 1 +x:1 +政经 1 +x:1 +浅亮 1 +x:1 +皮鞭 1 +x:1 +无病呻吟 1 +x:1 +服装城 1 +x:1 +海床 1 +x:1 +岱 4 +x:4 +鳄鱼 1 +x:1 +密匝匝 1 +x:1 +九台市 1 +x:1 +大公国 1 +x:1 +享年 1 +x:1 +陈旧 1 +x:1 +栾 11 +x:11 +循环小数 1 +x:1 +三岔路 1 +x:1 +燃 28 +x:28 +宿迁市 1 +x:1 +连襟 1 +x:1 +出仁率 1 +x:1 +柔弱 1 +x:1 +责任 1 +x:1 +灯市西口 1 +x:1 +工场 1 +x:1 +公检法 1 +x:1 +工地 1 +x:1 +无话不说 1 +x:1 +获奖者 1 +x:1 +班班 1 +x:1 +浅令 1 +x:1 +己任 1 +x:1 +全村 1 +x:1 +秋野 1 +x:1 +春情 1 +x:1 +滨城 1 +x:1 +鲁谷 1 +x:1 +全权 1 +x:1 +很多 1 +x:1 +海带 1 +x:1 +伢仔 1 +x:1 +到会 1 +x:1 +干什么 1 +x:1 +课间 1 +x:1 +岭南派 1 +x:1 +之所以 1 +x:1 +敞开 1 +x:1 +烧杀抢掠 1 +x:1 +明查暗访 1 +x:1 +拦河坝 1 +x:1 +逃税 1 +x:1 +田阳 1 +x:1 +躬行实践 1 +x:1 +赈灾 1 +x:1 +直驶 1 +x:1 +北较场 1 +x:1 +循环圈赛 1 +x:1 +预科系 1 +x:1 +包乘制 1 +x:1 +朗然 1 +x:1 +依恃 1 +x:1 +脉象 1 +x:1 +除夕夜 1 +x:1 +失闪 1 +x:1 +史绩 1 +x:1 +陕西 1 +x:1 +东麓 1 +x:1 +掠 11 +x:11 +特工 1 +x:1 +丢三落四 1 +x:1 +照度 1 +x:1 +填补 1 +x:1 +不得了 1 +x:1 +恭亲王 1 +x:1 +松鼠 1 +x:1 +奖罚 1 +x:1 +科研部 1 +x:1 +到位 1 +x:1 +朗照 1 +x:1 +皮革 1 +x:1 +耻笑 1 +x:1 +照应 1 +x:1 +陈放 1 +x:1 +轧 21 +x:21 +蒙乡 1 +x:1 +皮面 1 +x:1 +火器 1 +x:1 +布控 1 +x:1 +暗门 1 +x:1 +清爽 1 +x:1 +研究生班 1 +x:1 +风景区 1 +x:1 +口腔科 1 +x:1 +军事家 1 +x:1 +皮靴 1 +x:1 +缩略语 1 +x:1 +组氨酸 1 +x:1 +参照本 1 +x:1 +堂哥哥 1 +x:1 +长年累月 1 +x:1 +剑侠 1 +x:1 +筒车 1 +x:1 +烧烤 1 +x:1 +阳信县 1 +x:1 +绝杀 1 +x:1 +受惠人 1 +x:1 +顺城区 1 +x:1 +刘 3775 +x:3775 +粤曲 1 +x:1 +准重 1 +x:1 +免疫费 1 +x:1 +垃圾点 1 +x:1 +专员 1 +x:1 +失陷 1 +x:1 +法条 1 +x:1 +篡位 1 +x:1 +残忍 1 +x:1 +所想 1 +x:1 +台怀镇 1 +x:1 +台秤 1 +x:1 +常识课 1 +x:1 +夹道 1 +x:1 +失陪 1 +x:1 +闻名遐迩 1 +x:1 +电话局 1 +x:1 +丰裕 1 +x:1 +绝望 1 +x:1 +魏公村 1 +x:1 +衔 6 +x:6 +烧炭 1 +x:1 +反顾 1 +x:1 +所悟 1 +x:1 +桌边 1 +x:1 +鼻涕 1 +x:1 +专向 1 +x:1 +英国 1 +x:1 +五年制 1 +x:1 +压库 1 +x:1 +马马虎虎 1 +x:1 +非织造 1 +x:1 +专名 1 +x:1 +效率卡 1 +x:1 +抽象派 1 +x:1 +芜湖 1 +x:1 +账页纸 1 +x:1 +混声 1 +x:1 +鲁迅 1 +x:1 +南迁 1 +x:1 +提出 1 +x:1 +无坚不摧 1 +x:1 +德高望重 1 +x:1 +多弹头 1 +x:1 +埃及队 1 +x:1 +氢能 1 +x:1 +骨学 1 +x:1 +罐罐 1 +x:1 +卡诺 1 +x:1 +洋河村 1 +x:1 +氧 32 +x:32 +侦 10 +x:10 +骨子 1 +x:1 +非领导 1 +x:1 +玉壶 1 +x:1 +诞纪 1 +x:1 +军级 1 +x:1 +铺张矫饰 1 +x:1 +西庄村 1 +x:1 +朗爽 1 +x:1 +服装员 1 +x:1 +柱网 1 +x:1 +皴法 1 +x:1 +鸟语林 1 +x:1 +工字形 1 +x:1 +政出多口 1 +x:1 +无电户 1 +x:1 +军统 1 +x:1 +方始 1 +x:1 +合法 1 +x:1 +冤孽账 1 +x:1 +平淡无奇 1 +x:1 +黏米 1 +x:1 +所思 1 +x:1 +读秒 1 +x:1 +水日 1 +x:1 +红掌 1 +x:1 +癫 1 +x:1 +棒 28 +x:28 +赞扬 1 +x:1 +法权 1 +x:1 +矿泉 1 +x:1 +冤仇 1 +x:1 +为所欲为 1 +x:1 +核威胁 1 +x:1 +非互惠 1 +x:1 +栽培法 1 +x:1 +南边 1 +x:1 +笼屉 1 +x:1 +造形 1 +x:1 +德胜门 1 +x:1 +负氧离子 1 +x:1 +四平乡 1 +x:1 +主攻手 1 +x:1 +海岭 1 +x:1 +泰州 1 +x:1 +底数 1 +x:1 +瓦砾 1 +x:1 +大铁罐 1 +x:1 +字符串 1 +x:1 +造影 1 +x:1 +实际上 1 +x:1 +史籍 1 +x:1 +一秘 1 +x:1 +海岸 1 +x:1 +候温 1 +x:1 +东华门 1 +x:1 +檩 2 +x:2 +玉女 1 +x:1 +工商 1 +x:1 +回忆人 1 +x:1 +拼盘 1 +x:1 +柏林市 1 +x:1 +高高壮壮 1 +x:1 +待业者 1 +x:1 +统销 1 +x:1 +海岛 1 +x:1 +海峡 1 +x:1 +范式化 1 +x:1 +全数 1 +x:1 +地质学 1 +x:1 +处境 1 +x:1 +改进剂 1 +x:1 +提倡 1 +x:1 +充裕 1 +x:1 +哨口 1 +x:1 +合流 1 +x:1 +文痞 1 +x:1 +放牛娃 1 +x:1 +胥 15 +x:15 +住房部 1 +x:1 +稳中转好 1 +x:1 +红通通 1 +x:1 +四稳四进 1 +x:1 +杂志 1 +x:1 +清点 1 +x:1 +舍生取义 1 +x:1 +矿浆 1 +x:1 +直颤 1 +x:1 +残废 1 +x:1 +原料 1 +x:1 +槲鸫 1 +x:1 +社会存在 1 +x:1 +轻闲 1 +x:1 +禄丰县 1 +x:1 +驳倒 1 +x:1 +全新 1 +x:1 +陈村 1 +x:1 +日月如梭 1 +x:1 +施政权 1 +x:1 +残年 1 +x:1 +序言 1 +x:1 +明珠弹雀 1 +x:1 +男女平等 1 +x:1 +储灰场 1 +x:1 +失音 1 +x:1 +淡出 1 +x:1 +特征 1 +x:1 +孔雀舞 1 +x:1 +跨国 1 +x:1 +反馈 1 +x:1 +持平 1 +x:1 +自交系 1 +x:1 +清真东寺 1 +x:1 +全文 1 +x:1 +遗传物质 1 +x:1 +泉勇街 1 +x:1 +谐音 1 +x:1 +特快 1 +x:1 +走亲访友 1 +x:1 +殡车 1 +x:1 +纪传体 1 +x:1 +充血 1 +x:1 +进进出出 1 +x:1 +族类 1 +x:1 +连词 1 +x:1 +增储 1 +x:1 +时隐时显 1 +x:1 +哨卡 1 +x:1 +所感 1 +x:1 +全日 1 +x:1 +残币 1 +x:1 +乳山 1 +x:1 +蝶阀厂 1 +x:1 +块状 1 +x:1 +敷 6 +x:6 +太平洋区 1 +x:1 +浙电 1 +x:1 +上诉费 1 +x:1 +助学金 1 +x:1 +删除 1 +x:1 +合成 1 +x:1 +必将 1 +x:1 +臭氧洞 1 +x:1 +表现型 1 +x:1 +闽粤 1 +x:1 +红海 1 +x:1 +减摩合金 1 +x:1 +中期 1 +x:1 +多米尼加 1 +x:1 +巩留 1 +x:1 +班级 1 +x:1 +保健茶 1 +x:1 +烧结 1 +x:1 +鱼鹰 1 +x:1 +杂念 1 +x:1 +琴家 1 +x:1 +节奏感 1 +x:1 +思南路 1 +x:1 +湿渍 1 +x:1 +跑马 1 +x:1 +玉器 1 +x:1 +污毒 1 +x:1 +阳春白雪 1 +x:1 +锄草机 1 +x:1 +海原 1 +x:1 +数学会 1 +x:1 +连营 1 +x:1 +斜坡形 1 +x:1 +班组 1 +x:1 +裸岩 1 +x:1 +海口 1 +x:1 +黄帝陵 1 +x:1 +巴卡尼 1 +x:1 +幼儿部 1 +x:1 +坊 3 +x:3 +害怕 1 +x:1 +烧纸 1 +x:1 +翻来覆去 1 +x:1 +成果展 1 +x:1 +有趣儿 1 +x:1 +草桥 1 +x:1 +一孩户 1 +x:1 +五星红旗 1 +x:1 +歌人 1 +x:1 +电瓶车 1 +x:1 +海参 1 +x:1 +马头琴 1 +x:1 +藩 1 +x:1 +连长 1 +x:1 +求大同 1 +x:1 +拨动 1 +x:1 +航空信 1 +x:1 +粮猪型 1 +x:1 +耽搁 1 +x:1 +军火 1 +x:1 +如坐针毡 1 +x:1 +蹒蹒跚跚 1 +x:1 +南极洲 1 +x:1 +如坐春风 1 +x:1 +湿湿 1 +x:1 +等速 1 +x:1 +八纵八横 1 +x:1 +横七竖八 1 +x:1 +乳化 1 +x:1 +球情 1 +x:1 +沟沟壑壑 1 +x:1 +云彩 1 +x:1 +陈案 1 +x:1 +互贸区 1 +x:1 +享受 1 +x:1 +电极 1 +x:1 +残兵 1 +x:1 +想得到 1 +x:1 +海区 1 +x:1 +创作者 1 +x:1 +矩形 1 +x:1 +照发 1 +x:1 +窗式机 1 +x:1 +布满 1 +x:1 +合抱 1 +x:1 +慌慌张张 1 +x:1 +造像 1 +x:1 +海北 1 +x:1 +泰剧 1 +x:1 +陈辞旧语 1 +x:1 +唯命是从 1 +x:1 +沸 1 +x:1 +驼背 1 +x:1 +直面 1 +x:1 +帆樯 1 +x:1 +红润 1 +x:1 +烈暑 1 +x:1 +奖牌 1 +x:1 +蚌埠市 1 +x:1 +不共戴天 1 +x:1 +脉脉 1 +x:1 +土党参 1 +x:1 +合拍 1 +x:1 +序跋 1 +x:1 +遛 2 +x:2 +名扬四海 1 +x:1 +鹿回头 1 +x:1 +课题 1 +x:1 +是非题 1 +x:1 +钉螺 1 +x:1 +寻枝摘叶 1 +x:1 +海协 1 +x:1 +海华 1 +x:1 +功败垂成 1 +x:1 +直露 1 +x:1 +遮羞布 1 +x:1 +海南 1 +x:1 +瓦垄子 1 +x:1 +史 299 +x:299 +赤诚 1 +x:1 +时已隔世 1 +x:1 +答理 1 +x:1 +清缴 1 +x:1 +半死 1 +x:1 +溘然而逝 1 +x:1 +提干 1 +x:1 +弱智 1 +x:1 +跑门串门 1 +x:1 +推重比 1 +x:1 +工学 1 +x:1 +台盟 1 +x:1 +惠风和畅 1 +x:1 +消耗品 1 +x:1 +请愿 1 +x:1 +反霸 1 +x:1 +片麻岩 1 +x:1 +一锅煮 1 +x:1 +别具特色 1 +x:1 +荷包蛋 1 +x:1 +庆贺 1 +x:1 +大声疾呼 1 +x:1 +垃圾羊 1 +x:1 +双新村 1 +x:1 +无棣县 1 +x:1 +顺丁橡胶 1 +x:1 +政治学 1 +x:1 +烛泪 1 +x:1 +红汞 1 +x:1 +海力 1 +x:1 +纯净度 1 +x:1 +擦脂抹粉 1 +x:1 +全歼 1 +x:1 +反面 1 +x:1 +隆起带 1 +x:1 +接见厅 1 +x:1 +电话单 1 +x:1 +昔阳县 1 +x:1 +球感 1 +x:1 +等量 1 +x:1 +挂牌率 1 +x:1 +中界点 1 +x:1 +正面 1 +x:1 +处士 1 +x:1 +光脚板子 1 +x:1 +楠 46 +x:46 +清纯 1 +x:1 +直隶 1 +x:1 +替死鬼 1 +x:1 +英姿 1 +x:1 +答疑 1 +x:1 +练集镇 1 +x:1 +领头羊 1 +x:1 +两年制 1 +x:1 +四面开花 1 +x:1 +杀虫剂 1 +x:1 +天府之国 1 +x:1 +铆钉 1 +x:1 +答谢辞 1 +x:1 +承贷 1 +x:1 +便壶 1 +x:1 +天昏地暗 1 +x:1 +全段 1 +x:1 +社会党人 1 +x:1 +主视图 1 +x:1 +承购 1 +x:1 +锡拉特市 1 +x:1 +便士 1 +x:1 +航空业 1 +x:1 +联立方程 1 +x:1 +卫生 1 +x:1 +暗香 1 +x:1 +北爱党 1 +x:1 +承负 1 +x:1 +演绎 1 +x:1 +主要矛盾 1 +x:1 +分歧点 1 +x:1 +印油 1 +x:1 +夫 23 +x:23 +弈 4 +x:4 +预产期 1 +x:1 +特写 1 +x:1 +驾校业 1 +x:1 +艰苦 1 +x:1 +语气词 1 +x:1 +抓斗 1 +x:1 +宜宾市 1 +x:1 +水球赛 1 +x:1 +无产阶级 1 +x:1 +一辈子 1 +x:1 +京郊 1 +x:1 +专家 1 +x:1 +烧缸 1 +x:1 +建章立制 1 +x:1 +多音字 1 +x:1 +红河 1 +x:1 +山亭乡 1 +x:1 +乳剂 1 +x:1 +了然于胸 1 +x:1 +俊儿 1 +x:1 +排名 1 +x:1 +政治家 1 +x:1 +偶合 1 +x:1 +照办 1 +x:1 +蜀道之难 1 +x:1 +印象派 1 +x:1 +专守 1 +x:1 +一面 1 +x:1 +瓦盆 1 +x:1 +祸心 1 +x:1 +设计部 1 +x:1 +京都 1 +x:1 +宫殿 1 +x:1 +板 53 +x:53 +球手 1 +x:1 +特别 1 +x:1 +驼色 1 +x:1 +名称栏 1 +x:1 +红潮 1 +x:1 +模本 1 +x:1 +纯血 1 +x:1 +公安段 1 +x:1 +海况 1 +x:1 +盗印案 1 +x:1 +海冰 1 +x:1 +水果业 1 +x:1 +全校 1 +x:1 +底档 1 +x:1 +特制 1 +x:1 +海内 1 +x:1 +特刊 1 +x:1 +射线 1 +x:1 +国务部 1 +x:1 +苇芽 1 +x:1 +上秦镇 1 +x:1 +雇人 1 +x:1 +N 1 +x:1 +深河村 1 +x:1 +回水区 1 +x:1 +冠盖 1 +x:1 +切换 1 +x:1 +军警民 1 +x:1 +桌菜 1 +x:1 +海军 1 +x:1 +心脑血管 1 +x:1 +请战 1 +x:1 +酒徒 1 +x:1 +小本经营 1 +x:1 +兜子 1 +x:1 +倩影 1 +x:1 +帘布 1 +x:1 +契合点 1 +x:1 +杨枝鱼 1 +x:1 +内政部长 1 +x:1 +青艺 1 +x:1 +一己官欲 1 +x:1 +尉犁 1 +x:1 +明尼苏达 1 +x:1 +哟 40 +x:40 +办结率 1 +x:1 +诡 1 +x:1 +玫瑰花 1 +x:1 +拉客 1 +x:1 +计时赛 1 +x:1 +塬 1 +x:1 +铜子儿 1 +x:1 +赘言 1 +x:1 +余值法 1 +x:1 +镜面 1 +x:1 +大西洋城 1 +x:1 +啤酒 1 +x:1 +滚动式 1 +x:1 +灾祸 1 +x:1 +因人而异 1 +x:1 +瓜剖豆分 1 +x:1 +邳州 1 +x:1 +南菁 1 +x:1 +特务 1 +x:1 +谏 3 +x:3 +山明水秀 1 +x:1 +是非曲直 1 +x:1 +耸耸 1 +x:1 +先声夺人 1 +x:1 +学有专攻 1 +x:1 +考察站 1 +x:1 +直镇 1 +x:1 +鲁菜 1 +x:1 +平安庭 1 +x:1 +玫瑰色 1 +x:1 +乳儿 1 +x:1 +必要劳动 1 +x:1 +火夫 1 +x:1 +欺软怕硬 1 +x:1 +雇主 1 +x:1 +蓉花山镇 1 +x:1 +锜 1 +x:1 +割除 1 +x:1 +照准 1 +x:1 +高岭土 1 +x:1 +暮气沉沉 1 +x:1 +特功 1 +x:1 +火头 1 +x:1 +细长细长 1 +x:1 +军犬 1 +x:1 +隔三差五 1 +x:1 +工程部 1 +x:1 +残匪 1 +x:1 +球技 1 +x:1 +特勤 1 +x:1 +走路 1 +x:1 +暖武里府 1 +x:1 +海关 1 +x:1 +地质图 1 +x:1 +金文 1 +x:1 +海兰 1 +x:1 +海兽 1 +x:1 +造势 1 +x:1 +直销 1 +x:1 +合情 1 +x:1 +古筝曲 1 +x:1 +便宜 1 +x:1 +过云雨 1 +x:1 +内蒙 1 +x:1 +悲喜剧 1 +x:1 +鲁莽 1 +x:1 +震动 1 +x:1 +布测 1 +x:1 +底楼 1 +x:1 +东道 1 +x:1 +阴极射线 1 +x:1 +禹门口 1 +x:1 +芑 1 +x:1 +特区 1 +x:1 +合意 1 +x:1 +上个月 1 +x:1 +火墙 1 +x:1 +林科院 1 +x:1 +直链 1 +x:1 +立锥之地 1 +x:1 +驳岸 1 +x:1 +反锁 1 +x:1 +家用机 1 +x:1 +鉴证费 1 +x:1 +博学多才 1 +x:1 +垂头 1 +x:1 +白大褂 1 +x:1 +调剂金 1 +x:1 +新宅村 1 +x:1 +怒火 1 +x:1 +垫上运动 1 +x:1 +亲生 1 +x:1 +全楼 1 +x:1 +毋 3 +x:3 +雄心 1 +x:1 +摔炮 1 +x:1 +荐 10 +x:10 +非林地 1 +x:1 +趁人之危 1 +x:1 +卫矛 1 +x:1 +发糕 1 +x:1 +广丰县 1 +x:1 +龙王塘村 1 +x:1 +地安门 1 +x:1 +大观镇 1 +x:1 +车型 1 +x:1 +抽象性 1 +x:1 +承还 1 +x:1 +英寸 1 +x:1 +匪首 1 +x:1 +贫困户 1 +x:1 +南航 1 +x:1 +琴声 1 +x:1 +承运 1 +x:1 +内行人 1 +x:1 +高钛型 1 +x:1 +如东县 1 +x:1 +造化 1 +x:1 +二不怕死 1 +x:1 +滚动轴承 1 +x:1 +白山黑水 1 +x:1 +高产田 1 +x:1 +伦理学界 1 +x:1 +蒙古袍 1 +x:1 +悠哉游哉 1 +x:1 +火堆 1 +x:1 +造句 1 +x:1 +残剩 1 +x:1 +姆西拉 1 +x:1 +骨器 1 +x:1 +咔叽 1 +x:1 +虎狼 1 +x:1 +理科生 1 +x:1 +南苑 1 +x:1 +必得 1 +x:1 +东郊 1 +x:1 +攀钢 1 +x:1 +摩托 1 +x:1 +泰兴 1 +x:1 +兹罗提 1 +x:1 +白蜡虫 1 +x:1 +国民收入 1 +x:1 +震叹 1 +x:1 +造反 1 +x:1 +索赔 1 +x:1 +服装奖 1 +x:1 +照像 1 +x:1 +工委 1 +x:1 +诅咒 1 +x:1 +东部 1 +x:1 +谒陵 1 +x:1 +承载 1 +x:1 +鲜艳艳 1 +x:1 +建陶厂 1 +x:1 +反问 1 +x:1 +茫茫大千 1 +x:1 +家属区 1 +x:1 +台球 1 +x:1 +赝币 1 +x:1 +赤裸 1 +x:1 +做媒 1 +x:1 +火塘 1 +x:1 +苇草 1 +x:1 +工程量 1 +x:1 +唯实 1 +x:1 +特变 1 +x:1 +唢呐曲 1 +x:1 +雇佣 1 +x:1 +迸 3 +x:3 +侵占者 1 +x:1 +买卖 1 +x:1 +东非 1 +x:1 +专干 1 +x:1 +转体 1 +x:1 +椰树林 1 +x:1 +锑矿 1 +x:1 +水月寺镇 1 +x:1 +承袭 1 +x:1 +垂帐 1 +x:1 +全港 1 +x:1 +铁十一局 1 +x:1 +红楼 1 +x:1 +国际公制 1 +x:1 +西班牙队 1 +x:1 +提子 1 +x:1 +想着 1 +x:1 +国家裁判 1 +x:1 +泰国 1 +x:1 +工程队 1 +x:1 +抬头 1 +x:1 +东面 1 +x:1 +欺 9 +x:9 +垂幅 1 +x:1 +疾言厉色 1 +x:1 +心神不定 1 +x:1 +河套 1 +x:1 +哨声 1 +x:1 +包干儿 1 +x:1 +工程院 1 +x:1 +蒸汽 1 +x:1 +虎画 1 +x:1 +海南省 1 +x:1 +心神不安 1 +x:1 +艺人 1 +x:1 +跑车 1 +x:1 +冤家 1 +x:1 +震后 1 +x:1 +清算 1 +x:1 +安宁市 1 +x:1 +季父 1 +x:1 +报章杂志 1 +x:1 +西瓜刀 1 +x:1 +嘉善县 1 +x:1 +阿里河 1 +x:1 +海埂 1 +x:1 +烧窑 1 +x:1 +呛鼻 1 +x:1 +法医学 1 +x:1 +秋风 1 +x:1 +绝活 1 +x:1 +一线 1 +x:1 +服装店 1 +x:1 +法兰盘 1 +x:1 +海域 1 +x:1 +代表人 1 +x:1 +垃圾站 1 +x:1 +虹储 1 +x:1 +购买日 1 +x:1 +解困办 1 +x:1 +张家界市 1 +x:1 +投降主义 1 +x:1 +暂缓 1 +x:1 +琴弓 1 +x:1 +评点 1 +x:1 +手术费 1 +x:1 +标识 1 +x:1 +老区人 1 +x:1 +冤孽 1 +x:1 +名垂史册 1 +x:1 +伪冒 1 +x:1 +变幻无常 1 +x:1 +站台票 1 +x:1 +改头换面 1 +x:1 +虎痴 1 +x:1 +杨宋镇 1 +x:1 +国务院 1 +x:1 +粤汉 1 +x:1 +探险史 1 +x:1 +英尺 1 +x:1 +伶仃孤苦 1 +x:1 +造响 1 +x:1 +田鼠 1 +x:1 +方便面碗 1 +x:1 +琴弦 1 +x:1 +标语 1 +x:1 +社旗县 1 +x:1 +故城县 1 +x:1 +虎疫 1 +x:1 +萨克斯管 1 +x:1 +保级战 1 +x:1 +井然不紊 1 +x:1 +殡葬 1 +x:1 +心音 1 +x:1 +提审 1 +x:1 +知人之明 1 +x:1 +受难日 1 +x:1 +专座 1 +x:1 +支持人 1 +x:1 +购买方 1 +x:1 +借贷额 1 +x:1 +工序 1 +x:1 +标记 1 +x:1 +外寇 1 +x:1 +方村镇 1 +x:1 +南洋虎 1 +x:1 +哨塔 1 +x:1 +处女 1 +x:1 +运动迷 1 +x:1 +汽车业界 1 +x:1 +流动 1 +x:1 +红榜 1 +x:1 +眸子 1 +x:1 +狐疑不决 1 +x:1 +艺专 1 +x:1 +表现力 1 +x:1 +红桥 1 +x:1 +罐瓶 1 +x:1 +非诉讼 1 +x:1 +诞生 1 +x:1 +必备 1 +x:1 +载波 1 +x:1 +总共 1 +x:1 +瓷都 1 +x:1 +霓灯 1 +x:1 +济困助学 1 +x:1 +水烟斗 1 +x:1 +短网队 1 +x:1 +摩擦 1 +x:1 +宫腔镜 1 +x:1 +残品 1 +x:1 +东陵 1 +x:1 +晒太阳 1 +x:1 +周城镇 1 +x:1 +负债率 1 +x:1 +混合苯 1 +x:1 +红案 1 +x:1 +水深火热 1 +x:1 +轻武器 1 +x:1 +偶像 1 +x:1 +咱 148 +x:148 +业务费 1 +x:1 +指纹图 1 +x:1 +军用 1 +x:1 +拉伤 1 +x:1 +台独 1 +x:1 +自营性 1 +x:1 +及格 1 +x:1 +秃 4 +x:4 +河东 1 +x:1 +索讨 1 +x:1 +赛中 1 +x:1 +江夏区 1 +x:1 +河下 1 +x:1 +成果奖 1 +x:1 +红样 1 +x:1 +大公府 1 +x:1 +归集额 1 +x:1 +田黄 1 +x:1 +淋巴 1 +x:1 +红格 1 +x:1 +海图 1 +x:1 +读物 1 +x:1 +军事化 1 +x:1 +军界 1 +x:1 +屏住 1 +x:1 +东阳 1 +x:1 +东阿 1 +x:1 +收益金 1 +x:1 +等闲 1 +x:1 +茶庄 1 +x:1 +主席令 1 +x:1 +红树 1 +x:1 +瓦片 1 +x:1 +请教 1 +x:1 +决策者 1 +x:1 +乞怜 1 +x:1 +争胜 1 +x:1 +非艺术 1 +x:1 +那洪镇 1 +x:1 +丰茂 1 +x:1 +脓 1 +x:1 +修桥补路 1 +x:1 +南隔堤 1 +x:1 +琴师 1 +x:1 +研制者 1 +x:1 +有误者 1 +x:1 +代表作 1 +x:1 +南霸天 1 +x:1 +请方 1 +x:1 +变压器厂 1 +x:1 +州立 1 +x:1 +丰茸 1 +x:1 +教科书 1 +x:1 +红棉 1 +x:1 +田鸡 1 +x:1 +群蚁附膻 1 +x:1 +荣辱观 1 +x:1 +诠释者 1 +x:1 +宜牧则牧 1 +x:1 +负责 1 +x:1 +宫廷舞 1 +x:1 +答谢话 1 +x:1 +寄 336 +x:336 +味道 1 +x:1 +杨士岗镇 1 +x:1 +滴管 1 +x:1 +买办 1 +x:1 +矿柱 1 +x:1 +土默川 1 +x:1 +雪原 1 +x:1 +湾仔修顿 1 +x:1 +犹太教 1 +x:1 +代表会 1 +x:1 +胎位 1 +x:1 +红梅 1 +x:1 +主权者 1 +x:1 +吃回扣 1 +x:1 +擦 79 +x:79 +巧思 1 +x:1 +闲事儿 1 +x:1 +污渍 1 +x:1 +闰 1 +x:1 +清稿 1 +x:1 +丧心病狂 1 +x:1 +垃圾筒 1 +x:1 +火并 1 +x:1 +田鹨 1 +x:1 +布段 1 +x:1 +初高中 1 +x:1 +赤贫 1 +x:1 +清秋 1 +x:1 +那个 1 +x:1 +事 1823 +x:1823 +猖狂 1 +x:1 +白邑乡 1 +x:1 +政治局 1 +x:1 +公有制 1 +x:1 +熔断 1 +x:1 +娘 54 +x:54 +哀呼 1 +x:1 +逢先必争 1 +x:1 +专属 1 +x:1 +泸水县 1 +x:1 +宵禁 1 +x:1 +全民 1 +x:1 +便当 1 +x:1 +窗户 1 +x:1 +偶发 1 +x:1 +北平道 1 +x:1 +候机 1 +x:1 +况 5 +x:5 +重化工 1 +x:1 +总书记 1 +x:1 +灯芯绒 1 +x:1 +垂尾 1 +x:1 +窗扇 1 +x:1 +清福 1 +x:1 +烧碱 1 +x:1 +争霸 1 +x:1 +底水 1 +x:1 +烟云 1 +x:1 +球星 1 +x:1 +联 141 +x:141 +委托费 1 +x:1 +工尺 1 +x:1 +葡方 1 +x:1 +瑜 35 +x:35 +泰和 1 +x:1 +伍伦贡市 1 +x:1 +演职人员 1 +x:1 +内生 1 +x:1 +底气 1 +x:1 +乞援 1 +x:1 +通电话 1 +x:1 +松针 1 +x:1 +息烽 1 +x:1 +杜梨 1 +x:1 +高跟儿鞋 1 +x:1 +儿艺 1 +x:1 +征象 1 +x:1 +著作权法 1 +x:1 +独一无二 1 +x:1 +月月红 1 +x:1 +东语系 1 +x:1 +招标制 1 +x:1 +底泥 1 +x:1 +陷落 1 +x:1 +演奏员 1 +x:1 +赤足 1 +x:1 +邀请方 1 +x:1 +首发站 1 +x:1 +黑龙江省 1 +x:1 +污浊 1 +x:1 +进化论 1 +x:1 +服装展 1 +x:1 +逾越 1 +x:1 +议政日 1 +x:1 +香赵庄乡 1 +x:1 +灰绿色 1 +x:1 +东门 1 +x:1 +谛听 1 +x:1 +烟丝 1 +x:1 +甘南藏区 1 +x:1 +娘儿们 1 +x:1 +黑龙江 1 +x:1 +村 1258 +x:1258 +芥 1 +x:1 +冤头 1 +x:1 +预计 1 +x:1 +海啸 1 +x:1 +重男轻女 1 +x:1 +烧砖 1 +x:1 +前郭县 1 +x:1 +种猪 1 +x:1 +多项式 1 +x:1 +骨化 1 +x:1 +亡国奴 1 +x:1 +钉锤 1 +x:1 +柔和 1 +x:1 +京韵 1 +x:1 +高产点 1 +x:1 +陈渣 1 +x:1 +公寓楼 1 +x:1 +大体量 1 +x:1 +班禅 1 +x:1 +自治县委 1 +x:1 +紧缩法 1 +x:1 +污泥 1 +x:1 +判别力 1 +x:1 +布楚 1 +x:1 +资格证 1 +x:1 +博物院 1 +x:1 +买假 1 +x:1 +特地 1 +x:1 +帘子 1 +x:1 +承认 1 +x:1 +省力化 1 +x:1 +京阙 1 +x:1 +草坝 1 +x:1 +相沿成习 1 +x:1 +军眷 1 +x:1 +蕲春县 1 +x:1 +基本粒子 1 +x:1 +玉兰 1 +x:1 +争艳 1 +x:1 +拒载 1 +x:1 +核工业城 1 +x:1 +钉耙 1 +x:1 +便帽 1 +x:1 +田鳖 1 +x:1 +承诺 1 +x:1 +耳机 1 +x:1 +往后 1 +x:1 +抽油机 1 +x:1 +计时表 1 +x:1 +大力村 1 +x:1 +乳品 1 +x:1 +复活节岛 1 +x:1 +枉费 1 +x:1 +骨力 1 +x:1 +镜鉴 1 +x:1 +可亲可近 1 +x:1 +滨州 1 +x:1 +索要 1 +x:1 +赤豆 1 +x:1 +合数 1 +x:1 +债权 1 +x:1 +设计院 1 +x:1 +凌波仙子 1 +x:1 +着落 1 +x:1 +布罗特比 1 +x:1 +自收自支 1 +x:1 +币 29 +x:29 +兜底 1 +x:1 +泵业 1 +x:1 +工巧 1 +x:1 +闻风丧胆 1 +x:1 +公费生 1 +x:1 +萨尔图区 1 +x:1 +芜杂 1 +x:1 +专差 1 +x:1 +乳名 1 +x:1 +必定 1 +x:1 +肺动脉 1 +x:1 +墚 1 +x:1 +英式 1 +x:1 +称王称霸 1 +x:1 +特型 1 +x:1 +满园春色 1 +x:1 +带班人 1 +x:1 +九龙壁 1 +x:1 +南蛮 1 +x:1 +不辞劳苦 1 +x:1 +枸杞子 1 +x:1 +幼儿 1 +x:1 +座次 1 +x:1 +落 434 +x:434 +台灯 1 +x:1 +重特大 1 +x:1 +饭来张口 1 +x:1 +骨刺 1 +x:1 +一字排开 1 +x:1 +硅 6 +x:6 +锱铢必较 1 +x:1 +虎皮 1 +x:1 +虹口 1 +x:1 +请柬 1 +x:1 +互相 1 +x:1 +赤身露体 1 +x:1 +刚察县 1 +x:1 +橹 1 +x:1 +海味 1 +x:1 +污水 1 +x:1 +球果 1 +x:1 +远东所 1 +x:1 +亚原子 1 +x:1 +熄灯 1 +x:1 +负载 1 +x:1 +务求 1 +x:1 +熄火 1 +x:1 +丰腴 1 +x:1 +发人深思 1 +x:1 +造型 1 +x:1 +哨子 1 +x:1 +中华民国 1 +x:1 +夹馅 1 +x:1 +粘性 1 +x:1 +火山 1 +x:1 +反省式 1 +x:1 +海 431 +x:431 +模拟 1 +x:1 +海员 1 +x:1 +满打满算 1 +x:1 +布陈 1 +x:1 +漳州 1 +x:1 +扶正培本 1 +x:1 +公用局 1 +x:1 +后宅镇 1 +x:1 +自然界 1 +x:1 +换句话说 1 +x:1 +历险地 1 +x:1 +秋播 1 +x:1 +密密地 1 +x:1 +肆言 1 +x:1 +烙 10 +x:10 +劳动布 1 +x:1 +鸡头 1 +x:1 +失恋 1 +x:1 +称量 1 +x:1 +黑黢黢 1 +x:1 +委员 1 +x:1 +琐言赘语 1 +x:1 +市政局 1 +x:1 +价值计 1 +x:1 +银子 1 +x:1 +萧县 1 +x:1 +港澳台侨 1 +x:1 +打天下 1 +x:1 +难以置信 1 +x:1 +多彩生活 1 +x:1 +事务 1 +x:1 +国事访问 1 +x:1 +咯吱吱 1 +x:1 +军衔 1 +x:1 +可缩性 1 +x:1 +瘟疹 1 +x:1 +迟疑不决 1 +x:1 +门头沟区 1 +x:1 +失态 1 +x:1 +粉刺 1 +x:1 +年限 1 +x:1 +小郭庄村 1 +x:1 +绵密 1 +x:1 +湘东乡 1 +x:1 +鱼鼓 1 +x:1 +耸立 1 +x:1 +文字学 1 +x:1 +除 828 +x:828 +恐龙队 1 +x:1 +马其顿 1 +x:1 +固定资产 1 +x:1 +蹲点 1 +x:1 +军衣 1 +x:1 +东欧 1 +x:1 +新闻台 1 +x:1 +职业 1 +x:1 +布防 1 +x:1 +新闻司 1 +x:1 +事功 1 +x:1 +冈比亚 1 +x:1 +布阵 1 +x:1 +玉皇大帝 1 +x:1 +史诗 1 +x:1 +竹席 1 +x:1 +球风 1 +x:1 +清洌 1 +x:1 +史话 1 +x:1 +骑车 1 +x:1 +实体法 1 +x:1 +租子 1 +x:1 +史评 1 +x:1 +主心骨 1 +x:1 +比肩而立 1 +x:1 +而况 1 +x:1 +竹帽 1 +x:1 +运送者 1 +x:1 +羊皮袄 1 +x:1 +直销式 1 +x:1 +筹备会 1 +x:1 +道德家 1 +x:1 +傀儡 1 +x:1 +保健箱 1 +x:1 +上头 1 +x:1 +发布费 1 +x:1 +涨落 1 +x:1 +事前 1 +x:1 +债额 1 +x:1 +各向同性 1 +x:1 +台车 1 +x:1 +上天 1 +x:1 +知交 1 +x:1 +牛磺酸 1 +x:1 +南移 1 +x:1 +无限度 1 +x:1 +咏春 1 +x:1 +郡级 1 +x:1 +导尿 1 +x:1 +稚拙 1 +x:1 +云帆 1 +x:1 +在家 1 +x:1 +乌龙驹 1 +x:1 +酱菜 1 +x:1 +开倒车 1 +x:1 +陋巷 1 +x:1 +军装 1 +x:1 +胳膊肘儿 1 +x:1 +三一律 1 +x:1 +墙体 1 +x:1 +答谢 1 +x:1 +门坎精 1 +x:1 +发布权 1 +x:1 +茴鱼 1 +x:1 +东段 1 +x:1 +愣住 1 +x:1 +囤 4 +x:4 +巨作 1 +x:1 +苍南县 1 +x:1 +史论 1 +x:1 +兴师动众 1 +x:1 +暗想 1 +x:1 +噼噼叭叭 1 +x:1 +军裤 1 +x:1 +收费仪 1 +x:1 +史训 1 +x:1 +老佛爷 1 +x:1 +铴锣 1 +x:1 +女朋友 1 +x:1 +巨人 1 +x:1 +改弦易辙 1 +x:1 +秭归县 1 +x:1 +皮掌 1 +x:1 +丝丝入扣 1 +x:1 +签字权 1 +x:1 +禁毒署 1 +x:1 +谷雨 1 +x:1 +工程款 1 +x:1 +民力 1 +x:1 +夹板 1 +x:1 +接上头 1 +x:1 +沙枣面 1 +x:1 +冯桥乡 1 +x:1 +丰美 1 +x:1 +锅炉界 1 +x:1 +阿鲁巴岛 1 +x:1 +兴源镇 1 +x:1 +报警点 1 +x:1 +人格 1 +x:1 +万山 1 +x:1 +杞县 1 +x:1 +布面 1 +x:1 +张先村 1 +x:1 +夹杂 1 +x:1 +斋月灯 1 +x:1 +核工程 1 +x:1 +殿堂式 1 +x:1 +事发 1 +x:1 +高科技化 1 +x:1 +扭转形变 1 +x:1 +羊皮褥 1 +x:1 +罐装 1 +x:1 +今归仁村 1 +x:1 +事变 1 +x:1 +侧芽 1 +x:1 +耻辱 1 +x:1 +河东区 1 +x:1 +秋日 1 +x:1 +购买率 1 +x:1 +勍 1 +x:1 +陈醋 1 +x:1 +秋旱 1 +x:1 +快乐 1 +x:1 +学社 1 +x:1 +血统工人 1 +x:1 +槲栎 1 +x:1 +全自动 1 +x:1 +根德拉 1 +x:1 +没心拉肠 1 +x:1 +骄纵 1 +x:1 +快书 1 +x:1 +社会青年 1 +x:1 +启动型 1 +x:1 +上声 1 +x:1 +蔫头耷脑 1 +x:1 +嗅到 1 +x:1 +整合型 1 +x:1 +低纬度 1 +x:1 +茶座 1 +x:1 +反潜 1 +x:1 +参考价 1 +x:1 +乌拉圭队 1 +x:1 +忿 1 +x:1 +胪岗镇 1 +x:1 +称道 1 +x:1 +皮衣 1 +x:1 +★ 14 +x:14 +波浪形 1 +x:1 +瘫痪病 1 +x:1 +陈酒 1 +x:1 +厌 14 +x:14 +女界 1 +x:1 +藻多糖 1 +x:1 +秋收 1 +x:1 +写生 1 +x:1 +咄咄怪事 1 +x:1 +赌风 1 +x:1 +龙王庙 1 +x:1 +巨业 1 +x:1 +祈愿诗 1 +x:1 +红铜 1 +x:1 +待工证 1 +x:1 +气呼呼 1 +x:1 +布鞋 1 +x:1 +借贷方 1 +x:1 +保证率 1 +x:1 +自弃 1 +x:1 +保健站 1 +x:1 +球馆 1 +x:1 +京棉 1 +x:1 +神态自若 1 +x:1 +标的 1 +x:1 +万岁 1 +x:1 +胖 29 +x:29 +现代派 1 +x:1 +投亲靠友 1 +x:1 +叶县 1 +x:1 +几 5204 +x:5204 +过从甚密 1 +x:1 +乌市 1 +x:1 +花柳病 1 +x:1 +蒙头转向 1 +x:1 +读报员 1 +x:1 +波浪式 1 +x:1 +参考书 1 +x:1 +亲切感 1 +x:1 +电化教育 1 +x:1 +付之一炬 1 +x:1 +快件 1 +x:1 +碱性 1 +x:1 +绅士协定 1 +x:1 +情绪化 1 +x:1 +齿 7 +x:7 +投审会 1 +x:1 +熔炼 1 +x:1 +中短传 1 +x:1 +动态性 1 +x:1 +指不定 1 +x:1 +侨团 1 +x:1 +启动器 1 +x:1 +失手 1 +x:1 +与虎谋皮 1 +x:1 +那些 1 +x:1 +上宾 1 +x:1 +小媳妇 1 +x:1 +全速 1 +x:1 +准时 1 +x:1 +上家 1 +x:1 +熔点 1 +x:1 +基址 1 +x:1 +狠抓 1 +x:1 +竹岛 1 +x:1 +跳动 1 +x:1 +炷 2 +x:2 +竹岐 1 +x:1 +退管会 1 +x:1 +示众 1 +x:1 +蜚声 1 +x:1 +肯干 1 +x:1 +视差 1 +x:1 +红靛 1 +x:1 +室内机 1 +x:1 +孔雀石 1 +x:1 +摄 1932 +x:1932 +大街小巷 1 +x:1 +价值观 1 +x:1 +定货量 1 +x:1 +诨号 1 +x:1 +劳动局 1 +x:1 +工兵农 1 +x:1 +生产工具 1 +x:1 +旅游者 1 +x:1 +基地 1 +x:1 +匪患 1 +x:1 +正厅级 1 +x:1 +党委制 1 +x:1 +暗扣 1 +x:1 +媒体 1 +x:1 +非样本 1 +x:1 +爵爷 1 +x:1 +电机 1 +x:1 +汤剂 1 +x:1 +合页 1 +x:1 +广电部 1 +x:1 +草店村 1 +x:1 +考察船 1 +x:1 +红霞 1 +x:1 +鸡犬不留 1 +x:1 +鼻饲 1 +x:1 +予 85 +x:85 +互访 1 +x:1 +警帽 1 +x:1 +汤加 1 +x:1 +效应器 1 +x:1 +倍数 1 +x:1 +耗 22 +x:22 +饱历 1 +x:1 +互让 1 +x:1 +直流 1 +x:1 +秦巴山 1 +x:1 +事假 1 +x:1 +利纳雷斯 1 +x:1 +示例 1 +x:1 +共鸣区 1 +x:1 +五节芒 1 +x:1 +烂泥塘 1 +x:1 +蒙混过关 1 +x:1 +军挎 1 +x:1 +松桃 1 +x:1 +电动车 1 +x:1 +饱受 1 +x:1 +全都 1 +x:1 +连结 1 +x:1 +秋景 1 +x:1 +赛马场 1 +x:1 +作战部 1 +x:1 +互感器 1 +x:1 +全部 1 +x:1 +秒 391 +x:391 +汤勺 1 +x:1 +负片 1 +x:1 +岩心 1 +x:1 +轻工业部 1 +x:1 +竹屋 1 +x:1 +尖锐化 1 +x:1 +有蹄类 1 +x:1 +远镇 1 +x:1 +馍馍 1 +x:1 +松树 1 +x:1 +连绵 1 +x:1 +互评 1 +x:1 +转化率 1 +x:1 +泗水 1 +x:1 +台账 1 +x:1 +崂山 1 +x:1 +驻 1545 +x:1545 +游法 1 +x:1 +好 8876 +x:8876 +导师 1 +x:1 +上季 1 +x:1 +曙光 1 +x:1 +兑现 1 +x:1 +苇箔 1 +x:1 +卫辉 1 +x:1 +警徽 1 +x:1 +高银巷 1 +x:1 +窑 26 +x:26 +轻而易举 1 +x:1 +连缀 1 +x:1 +反派 1 +x:1 +团费 1 +x:1 +表扬信 1 +x:1 +周初 1 +x:1 +垣 3 +x:3 +万年 1 +x:1 +红陌 1 +x:1 +米亚瓦 1 +x:1 +万幸 1 +x:1 +微咸 1 +x:1 +斑竹 1 +x:1 +分裂症 1 +x:1 +警惕心 1 +x:1 +竭泽而渔 1 +x:1 +白首穷经 1 +x:1 +南空 1 +x:1 +袁家岗 1 +x:1 +棉被褥 1 +x:1 +栗钙土 1 +x:1 +连网 1 +x:1 +旅馆区 1 +x:1 +筐 18 +x:18 +夹攻 1 +x:1 +清蒙 1 +x:1 +泄漏 1 +x:1 +答辩 1 +x:1 +研制组 1 +x:1 +玻利瓦尔 1 +x:1 +可调节性 1 +x:1 +打遍天下 1 +x:1 +留连忘返 1 +x:1 +鸡婆 1 +x:1 +否决票 1 +x:1 +议军会 1 +x:1 +曲江县 1 +x:1 +从艺 1 +x:1 +枉然 1 +x:1 +记者 1 +x:1 +朦朦胧胧 1 +x:1 +一版再版 1 +x:1 +军警 1 +x:1 +来稿者 1 +x:1 +纯然 1 +x:1 +族裔 1 +x:1 +明火执仗 1 +x:1 +蛇蜕 1 +x:1 +泥人儿 1 +x:1 +振奋 1 +x:1 +秋末 1 +x:1 +基因 1 +x:1 +基团 1 +x:1 +事关 1 +x:1 +水源林 1 +x:1 +写真 1 +x:1 +程家峪村 1 +x:1 +分队长 1 +x:1 +南站 1 +x:1 +简则 1 +x:1 +暗探 1 +x:1 +到位关 1 +x:1 +南端 1 +x:1 +事先 1 +x:1 +翠绿色 1 +x:1 +以柔克刚 1 +x:1 +奈良 1 +x:1 +等次 1 +x:1 +所长 1 +x:1 +军训 1 +x:1 +连翘 1 +x:1 +赤热 1 +x:1 +血衣 1 +x:1 +临别赠言 1 +x:1 +骨干网 1 +x:1 +末后 1 +x:1 +闹剧 1 +x:1 +导弹 1 +x:1 +纯熟 1 +x:1 +法兰西 1 +x:1 +姿影 1 +x:1 +打官司 1 +x:1 +蛇蝎 1 +x:1 +桐木 1 +x:1 +事儿 1 +x:1 +导引 1 +x:1 +莫可名状 1 +x:1 +颓唐 1 +x:1 +桥儿沟 1 +x:1 +全票 1 +x:1 +闭幕会 1 +x:1 +驱逐机 1 +x:1 +泗洲 1 +x:1 +失控 1 +x:1 +厉行节约 1 +x:1 +陶瓷厂 1 +x:1 +媒介 1 +x:1 +事因 1 +x:1 +免冠 1 +x:1 +汤头镇 1 +x:1 +视察 1 +x:1 +考古学家 1 +x:1 +极乐鸟 1 +x:1 +渝中区 1 +x:1 +被冲击方 1 +x:1 +导士 1 +x:1 +台词 1 +x:1 +国宾 1 +x:1 +逸事 1 +x:1 +全队 1 +x:1 +药款 1 +x:1 +底限 1 +x:1 +周刊 1 +x:1 +心电图仪 1 +x:1 +托运人 1 +x:1 +纯白 1 +x:1 +晴间多云 1 +x:1 +末叶 1 +x:1 +红酒 1 +x:1 +京派 1 +x:1 +园林师 1 +x:1 +铁氧体 1 +x:1 +超逸尘 1 +x:1 +敌占区 1 +x:1 +反对党 1 +x:1 +颓势 1 +x:1 +乌审 1 +x:1 +癌 23 +x:23 +野生虎 1 +x:1 +全院 1 +x:1 +银弹 1 +x:1 +宫阙 1 +x:1 +包背装 1 +x:1 +逮捕 1 +x:1 +沉重感 1 +x:1 +游人如织 1 +x:1 +书本费 1 +x:1 +咬牙切齿 1 +x:1 +沈音 1 +x:1 +打动力 1 +x:1 +加格达奇 1 +x:1 +反诉费 1 +x:1 +粮食厅 1 +x:1 +香港岛 1 +x:1 +棍子 1 +x:1 +不畏强暴 1 +x:1 +上工 1 +x:1 +交通业 1 +x:1 +清莱 1 +x:1 +监测仪 1 +x:1 +种蝎 1 +x:1 +珞璜 1 +x:1 +注射液 1 +x:1 +丰稔 1 +x:1 +改动 1 +x:1 +体工队 1 +x:1 +象山县 1 +x:1 +士气 1 +x:1 +陶冶性情 1 +x:1 +急公好义 1 +x:1 +呢喃细语 1 +x:1 +侵华 1 +x:1 +文献性 1 +x:1 +卖出价 1 +x:1 +璠 1 +x:1 +砰砰 1 +x:1 +硬笔字 1 +x:1 +金典秘笈 1 +x:1 +食而不化 1 +x:1 +基准 1 +x:1 +欠妥 1 +x:1 +史迹 1 +x:1 +氰化钾 1 +x:1 +洱 1 +x:1 +氰化钠 1 +x:1 +内乌肯省 1 +x:1 +在心 1 +x:1 +待业率 1 +x:1 +侵占 1 +x:1 +罢免权 1 +x:1 +空城计 1 +x:1 +田村 1 +x:1 +仲裁权 1 +x:1 +爬坡越岭 1 +x:1 +千古绝响 1 +x:1 +读读 1 +x:1 +九重霄 1 +x:1 +海蜇皮 1 +x:1 +微升 1 +x:1 +三高队 1 +x:1 +攀比 1 +x:1 +戈壁 1 +x:1 +标王 1 +x:1 +赤石 1 +x:1 +中老年 1 +x:1 +鲁西南 1 +x:1 +泻盐 1 +x:1 +黑猩猩 1 +x:1 +出谋划策 1 +x:1 +莹明 1 +x:1 +眉目传情 1 +x:1 +卡通式 1 +x:1 +合照 1 +x:1 +清河 1 +x:1 +博雅塔 1 +x:1 +闪电战 1 +x:1 +清茶 1 +x:1 +全集 1 +x:1 +羞答答 1 +x:1 +紫外 1 +x:1 +东湖 1 +x:1 +中旅 1 +x:1 +汲取 1 +x:1 +茴香 1 +x:1 +上岗 1 +x:1 +大岭镇 1 +x:1 +正本求源 1 +x:1 +县乡镇 1 +x:1 +头道场 1 +x:1 +衣钵 1 +x:1 +失效 1 +x:1 +没意思 1 +x:1 +标牌 1 +x:1 +马角坝 1 +x:1 +超阶段 1 +x:1 +荆沙市 1 +x:1 +上岸 1 +x:1 +课课 1 +x:1 +晦暗 1 +x:1 +而后 1 +x:1 +耍脾气 1 +x:1 +军费 1 +x:1 +清苦 1 +x:1 +儿科 1 +x:1 +聚沙成塔 1 +x:1 +失散 1 +x:1 +息讼 1 +x:1 +银幕 1 +x:1 +附配件 1 +x:1 +出世作 1 +x:1 +年老体弱 1 +x:1 +饱含 1 +x:1 +千古绝唱 1 +x:1 +园林式 1 +x:1 +乐观主义 1 +x:1 +凸面镜 1 +x:1 +臃 1 +x:1 +精武卫国 1 +x:1 +卫视 1 +x:1 +虫情 1 +x:1 +幸灾乐祸 1 +x:1 +桥梁厂 1 +x:1 +呼机 1 +x:1 +纯真 1 +x:1 +借入方 1 +x:1 +诡谲 1 +x:1 +军资 1 +x:1 +全面 1 +x:1 +祈愿 1 +x:1 +新闻团 1 +x:1 +清芬 1 +x:1 +知根知底 1 +x:1 +中长途 1 +x:1 +心醉神迷 1 +x:1 +绵延 1 +x:1 +上峰 1 +x:1 +沙柳丛 1 +x:1 +冰雪期 1 +x:1 +东渡 1 +x:1 +东港 1 +x:1 +逆差 1 +x:1 +在建 1 +x:1 +诱发 1 +x:1 +合龙 1 +x:1 +影碟 1 +x:1 +霓裳 1 +x:1 +殖民地 1 +x:1 +概念化 1 +x:1 +课时 1 +x:1 +微创 1 +x:1 +光头党 1 +x:1 +上尉 1 +x:1 +镇流器 1 +x:1 +援助处 1 +x:1 +铁法官 1 +x:1 +上将 1 +x:1 +饱和 1 +x:1 +果不其然 1 +x:1 +松潘 1 +x:1 +微利 1 +x:1 +烧荒 1 +x:1 +谷类 1 +x:1 +负电 1 +x:1 +秋意 1 +x:1 +冥思 1 +x:1 +抽芽 1 +x:1 +发明权 1 +x:1 +急流勇进 1 +x:1 +蓑衣草 1 +x:1 +挂牌车 1 +x:1 +桑兰西党 1 +x:1 +东滩 1 +x:1 +近当代 1 +x:1 +生死与共 1 +x:1 +样子沟 1 +x:1 +代行 1 +x:1 +东源 1 +x:1 +银座 1 +x:1 +全音 1 +x:1 +阴雨连绵 1 +x:1 +哈医大 1 +x:1 +保准儿 1 +x:1 +百战百胜 1 +x:1 +唐代 1 +x:1 +庭外 1 +x:1 +百废待兴 1 +x:1 +上届 1 +x:1 +槽灌 1 +x:1 +团课 1 +x:1 +泥疗 1 +x:1 +吸收率 1 +x:1 +注射法 1 +x:1 +南粤 1 +x:1 +山里人 1 +x:1 +皮条 1 +x:1 +零部件 1 +x:1 +上山 1 +x:1 +药 299 +x:299 +反比 1 +x:1 +拘役 1 +x:1 +反毒 1 +x:1 +竹子 1 +x:1 +电枢 1 +x:1 +军路 1 +x:1 +过头话 1 +x:1 +课文 1 +x:1 +台角 1 +x:1 +不偏不倚 1 +x:1 +丰碑 1 +x:1 +高音区 1 +x:1 +激奋 1 +x:1 +绝非 1 +x:1 +复员军人 1 +x:1 +陶瓷器 1 +x:1 +实用类 1 +x:1 +布道 1 +x:1 +搏击赛 1 +x:1 +愚 11 +x:11 +北亚 1 +x:1 +免去 1 +x:1 +暗昧 1 +x:1 +东海 1 +x:1 +党 5204 +x:5204 +管事 1 +x:1 +北京 1 +x:1 +等因奉此 1 +x:1 +标煤 1 +x:1 +管井 1 +x:1 +通电率 1 +x:1 +内容各异 1 +x:1 +车船票 1 +x:1 +伪随机码 1 +x:1 +迈步 1 +x:1 +寻常 1 +x:1 +害鸟 1 +x:1 +块茎 1 +x:1 +夯土层 1 +x:1 +主产 1 +x:1 +被服务者 1 +x:1 +北仑 1 +x:1 +私邸 1 +x:1 +侨务 1 +x:1 +东洋 1 +x:1 +上心 1 +x:1 +创作组 1 +x:1 +原故 1 +x:1 +侨办 1 +x:1 +径流量 1 +x:1 +航海家 1 +x:1 +寝食不安 1 +x:1 +园林局 1 +x:1 +张北 1 +x:1 +碘钙片 1 +x:1 +新德里 1 +x:1 +签 112 +x:112 +张口 1 +x:1 +代数和 1 +x:1 +张古 1 +x:1 +辆 680 +x:680 +北上 1 +x:1 +暗暗 1 +x:1 +莫可指数 1 +x:1 +罐车 1 +x:1 +骚扰 1 +x:1 +折 112 +x:112 +赶锥 1 +x:1 +总户数 1 +x:1 +天荒地老 1 +x:1 +急刹车 1 +x:1 +墓道 1 +x:1 +起承转合 1 +x:1 +等温 1 +x:1 +翻刻本 1 +x:1 +清腾 1 +x:1 +侵入 1 +x:1 +主义 1 +x:1 +南翼 1 +x:1 +银川 1 +x:1 +紫杉 1 +x:1 +语声 1 +x:1 +别墅式 1 +x:1 +微光 1 +x:1 +舰种 1 +x:1 +海绵田 1 +x:1 +丰硕 1 +x:1 +诡辩 1 +x:1 +南美 1 +x:1 +清脆 1 +x:1 +赤痢 1 +x:1 +鲁美 1 +x:1 +齑 1 +x:1 +免却 1 +x:1 +乌头 1 +x:1 +瓦解 1 +x:1 +万宁 1 +x:1 +方略图 1 +x:1 +昆士兰 1 +x:1 +获奖率 1 +x:1 +万安 1 +x:1 +续航力 1 +x:1 +耳听八方 1 +x:1 +鸡心 1 +x:1 +总支出 1 +x:1 +赏心亭 1 +x:1 +北乡 1 +x:1 +张厅 1 +x:1 +无形中 1 +x:1 +主业 1 +x:1 +虫 40 +x:40 +松气 1 +x:1 +事后 1 +x:1 +管乐 1 +x:1 +硅钢 1 +x:1 +倍感 1 +x:1 +末儿 1 +x:1 +心魂俱醉 1 +x:1 +丰镇 1 +x:1 +蛇莓 1 +x:1 +脉络 1 +x:1 +东江 1 +x:1 +全市性 1 +x:1 +重金 1 +x:1 +所里 1 +x:1 +刎 1 +x:1 +银山 1 +x:1 +答语 1 +x:1 +敦实 1 +x:1 +称雄 1 +x:1 +解困扶贫 1 +x:1 +答询 1 +x:1 +主修 1 +x:1 +东汉 1 +x:1 +北侧 1 +x:1 +考古学 1 +x:1 +答话 1 +x:1 +呼救 1 +x:1 +警官 1 +x:1 +热身赛 1 +x:1 +东汽 1 +x:1 +银屏 1 +x:1 +冷若冰霜 1 +x:1 +殳 1 +x:1 +答词 1 +x:1 +论说体 1 +x:1 +邮折 1 +x:1 +阶 2 +x:2 +标灯 1 +x:1 +元素 1 +x:1 +复垦区 1 +x:1 +上座 1 +x:1 +上庠 1 +x:1 +广袤无际 1 +x:1 +杀 128 +x:128 +读取头 1 +x:1 +松子 1 +x:1 +邀集 1 +x:1 +全长 1 +x:1 +北极光 1 +x:1 +暗杀 1 +x:1 +失望 1 +x:1 +防风固沙 1 +x:1 +品茗杯 1 +x:1 +直落 1 +x:1 +课本 1 +x:1 +大观楼 1 +x:1 +红道道 1 +x:1 +生长期 1 +x:1 +历史学家 1 +x:1 +庭室 1 +x:1 +松涛 1 +x:1 +庭审 1 +x:1 +璜土镇 1 +x:1 +课期 1 +x:1 +哓哓 1 +x:1 +圩子 1 +x:1 +军援 1 +x:1 +警察 1 +x:1 +发给 1 +x:1 +军车 1 +x:1 +虎踞 1 +x:1 +管保 1 +x:1 +必备书 1 +x:1 +间歇热 1 +x:1 +上帝 1 +x:1 +连音 1 +x:1 +解铃系铃 1 +x:1 +看 3781 +x:3781 +主使 1 +x:1 +笔墨官司 1 +x:1 +为时不晚 1 +x:1 +洞若观火 1 +x:1 +稚拙性 1 +x:1 +北伐 1 +x:1 +九曲八拐 1 +x:1 +阴性植物 1 +x:1 +浅酌醉吟 1 +x:1 +恶贯满盈 1 +x:1 +主体 1 +x:1 +诞辰 1 +x:1 +宫门 1 +x:1 +梅县 1 +x:1 +不至于 1 +x:1 +宫闱 1 +x:1 +外宣 1 +x:1 +大发横财 1 +x:1 +四五点 1 +x:1 +争端 1 +x:1 +公安队 1 +x:1 +拉各斯港 1 +x:1 +硬通货 1 +x:1 +标本虫 1 +x:1 +玩赏 1 +x:1 +券面 1 +x:1 +东沟 1 +x:1 +松洲 1 +x:1 +维尔京 1 +x:1 +鱼鳔 1 +x:1 +奖赏 1 +x:1 +驼群 1 +x:1 +新市乡 1 +x:1 +肯定 1 +x:1 +叶喷 1 +x:1 +抗病力 1 +x:1 +激增 1 +x:1 +艺外 1 +x:1 +各口村 1 +x:1 +直根 1 +x:1 +上年 1 +x:1 +寨 19 +x:19 +南纬 1 +x:1 +前卫型 1 +x:1 +卫生部长 1 +x:1 +标点 1 +x:1 +拘留所 1 +x:1 +鱼鳞 1 +x:1 +松脆 1 +x:1 +张力 1 +x:1 +南纺 1 +x:1 +分子结构 1 +x:1 +人声鼎沸 1 +x:1 +怡然自乐 1 +x:1 +全知全能 1 +x:1 +反映 1 +x:1 +遣散 1 +x:1 +讯问 1 +x:1 +反是 1 +x:1 +实体 1 +x:1 +连通 1 +x:1 +上册 1 +x:1 +逐 57 +x:57 +清还 1 +x:1 +球道 1 +x:1 +新闻官 1 +x:1 +清运 1 +x:1 +连理 1 +x:1 +绽裂 1 +x:1 +优抚金 1 +x:1 +微微 1 +x:1 +上冻 1 +x:1 +神经科学 1 +x:1 +北极带 1 +x:1 +运杂费 1 +x:1 +溯 7 +x:7 +砀山县 1 +x:1 +而外 1 +x:1 +黑手党 1 +x:1 +宴席 1 +x:1 +课桌 1 +x:1 +工艺流程 1 +x:1 +委屈 1 +x:1 +桁架 1 +x:1 +水曲柳 1 +x:1 +暗格 1 +x:1 +胃溃疡 1 +x:1 +道德化 1 +x:1 +银匠 1 +x:1 +秋波 1 +x:1 +财产 1 +x:1 +清辉 1 +x:1 +上中农 1 +x:1 +丰盛 1 +x:1 +接生员 1 +x:1 +受灾县 1 +x:1 +金铃果 1 +x:1 +供职者 1 +x:1 +球速 1 +x:1 +国定 1 +x:1 +丰盈 1 +x:1 +乏味 1 +x:1 +军职 1 +x:1 +前三门 1 +x:1 +鱼鳍 1 +x:1 +颓废 1 +x:1 +鹤 13 +x:13 +振动 1 +x:1 +参天大树 1 +x:1 +祥虎送福 1 +x:1 +坚贞不渝 1 +x:1 +上诉状 1 +x:1 +中央税 1 +x:1 +可逆反应 1 +x:1 +彻夜不眠 1 +x:1 +大麻子 1 +x:1 +鸡冠 1 +x:1 +撒欢 1 +x:1 +库马西市 1 +x:1 +同场竞技 1 +x:1 +娱乐性 1 +x:1 +歇绝 1 +x:1 +签名 1 +x:1 +佳节 1 +x:1 +淫逸 1 +x:1 +松扣 1 +x:1 +老姐儿 1 +x:1 +免疫率 1 +x:1 +简史 1 +x:1 +乐不可支 1 +x:1 +侨属 1 +x:1 +免烫剂 1 +x:1 +单根独苗 1 +x:1 +豁免权 1 +x:1 +镇定 1 +x:1 +粮所 1 +x:1 +松手 1 +x:1 +摩配 1 +x:1 +购买金 1 +x:1 +鲸 6 +x:6 +途径 1 +x:1 +侨居 1 +x:1 +种兔场 1 +x:1 +上党 1 +x:1 +蕉 1 +x:1 +介休站 1 +x:1 +孤寡老人 1 +x:1 +换流站 1 +x:1 +实例 1 +x:1 +上光 1 +x:1 +汤壶 1 +x:1 +财主 1 +x:1 +老大劲儿 1 +x:1 +新闻学 1 +x:1 +导向 1 +x:1 +警员 1 +x:1 +阿帕网 1 +x:1 +二次方程 1 +x:1 +弟妇 1 +x:1 +小肠串气 1 +x:1 +侏罗纪 1 +x:1 +陈屿镇 1 +x:1 +财东 1 +x:1 +警告 1 +x:1 +候选 1 +x:1 +这么 1 +x:1 +领主 1 +x:1 +大明寺 1 +x:1 +精精神神 1 +x:1 +翠亨 1 +x:1 +助学情 1 +x:1 +健在者 1 +x:1 +咪表 1 +x:1 +红鱼 1 +x:1 +汤头 1 +x:1 +实乃 1 +x:1 +冥河 1 +x:1 +静摩擦力 1 +x:1 +绝顶 1 +x:1 +蛇足 1 +x:1 +啾啾 1 +x:1 +海椒市街 1 +x:1 +谐调 1 +x:1 +基层 1 +x:1 +连用 1 +x:1 +江苏省 1 +x:1 +吁请 1 +x:1 +实习 1 +x:1 +财保 1 +x:1 +跑程 1 +x:1 +实业 1 +x:1 +这不 1 +x:1 +充盈 1 +x:1 +持球者 1 +x:1 +麦门冬 1 +x:1 +真迹 1 +x:1 +称颂 1 +x:1 +国庆节 1 +x:1 +编年史 1 +x:1 +遵义 1 +x:1 +银制 1 +x:1 +张灯结彩 1 +x:1 +互联 1 +x:1 +实为 1 +x:1 +这个 1 +x:1 +末座 1 +x:1 +进出口者 1 +x:1 +电信法 1 +x:1 +代数学 1 +x:1 +连番 1 +x:1 +枇杷树 1 +x:1 +幼功 1 +x:1 +割断 1 +x:1 +鱼米之乡 1 +x:1 +事实 1 +x:1 +事宜 1 +x:1 +非君莫属 1 +x:1 +简便易行 1 +x:1 +棕油 1 +x:1 +史苑 1 +x:1 +具体地说 1 +x:1 +否决率 1 +x:1 +防火员 1 +x:1 +绝食 1 +x:1 +悖 8 +x:8 +完 681 +x:681 +高头大马 1 +x:1 +由此观之 1 +x:1 +祸从天降 1 +x:1 +联邦院 1 +x:1 +火山地震 1 +x:1 +蜂窝状 1 +x:1 +陕甘 1 +x:1 +清粼粼 1 +x:1 +楼兰王国 1 +x:1 +寻见 1 +x:1 +虎胆 1 +x:1 +实价 1 +x:1 +木麻黄树 1 +x:1 +原子尘 1 +x:1 +末年 1 +x:1 +邻乡 1 +x:1 +镇宁 1 +x:1 +鳝塘村 1 +x:1 +垃圾车 1 +x:1 +阅历 1 +x:1 +基岩 1 +x:1 +并行不悖 1 +x:1 +收益数 1 +x:1 +门多萨 1 +x:1 +麦穗鱼 1 +x:1 +邕宁 1 +x:1 +布龙 1 +x:1 +实事 1 +x:1 +赤竹 1 +x:1 +逆光 1 +x:1 +业务科 1 +x:1 +虎肉 1 +x:1 +兵不厌诈 1 +x:1 +班车 1 +x:1 +财企 1 +x:1 +标线 1 +x:1 +班轮 1 +x:1 +失调 1 +x:1 +窗门 1 +x:1 +企划局 1 +x:1 +屹 2 +x:2 +禁赛期 1 +x:1 +整流器 1 +x:1 +总指挥 1 +x:1 +财会 1 +x:1 +妇产科 1 +x:1 +虎坊桥 1 +x:1 +梅李镇 1 +x:1 +工程性 1 +x:1 +有鉴 1 +x:1 +合适 1 +x:1 +西客厅 1 +x:1 +兵丁 1 +x:1 +异口同声 1 +x:1 +祷文 1 +x:1 +保险业 1 +x:1 +保险丝 1 +x:1 +夜来香 1 +x:1 +上去 1 +x:1 +庭园 1 +x:1 +兵临 1 +x:1 +军船 1 +x:1 +互感应 1 +x:1 +空语句 1 +x:1 +免得 1 +x:1 +非公有制 1 +x:1 +夹江 1 +x:1 +穿梭机 1 +x:1 +出奇制胜 1 +x:1 +皮棉 1 +x:1 +罗营乡 1 +x:1 +安家镇 1 +x:1 +满面笑容 1 +x:1 +清越 1 +x:1 +行列式 1 +x:1 +惨绝人寰 1 +x:1 +付之一笑 1 +x:1 +平心静气 1 +x:1 +承继 1 +x:1 +有助于 1 +x:1 +国际联盟 1 +x:1 +脉率 1 +x:1 +入学率 1 +x:1 +篡 1 +x:1 +援助国 1 +x:1 +张开 1 +x:1 +上司 1 +x:1 +军艺 1 +x:1 +兵乱 1 +x:1 +绝无仅有 1 +x:1 +潮 111 +x:111 +洞庭湖 1 +x:1 +温尼伯市 1 +x:1 +蜂窝煤 1 +x:1 +饱学 1 +x:1 +上古 1 +x:1 +张弛 1 +x:1 +风级 1 +x:1 +兵书 1 +x:1 +五体投地 1 +x:1 +用餐 1 +x:1 +河湾里村 1 +x:1 +上口 1 +x:1 +夹注 1 +x:1 +罅漏 1 +x:1 +保险人 1 +x:1 +辐射源 1 +x:1 +组员 1 +x:1 +新闻处 1 +x:1 +准集约型 1 +x:1 +冬剪 1 +x:1 +阙如 1 +x:1 +哈哈大笑 1 +x:1 +广泛性 1 +x:1 +盘山县 1 +x:1 +伙 44 +x:44 +紫堇 1 +x:1 +了事 1 +x:1 +曳动 1 +x:1 +镜架 1 +x:1 +复印件 1 +x:1 +跳水池 1 +x:1 +低微 1 +x:1 +南珠 1 +x:1 +有奖销售 1 +x:1 +造影剂 1 +x:1 +版画集 1 +x:1 +大不了 1 +x:1 +首脑级 1 +x:1 +芰 1 +x:1 +举例 1 +x:1 +胳膊肘子 1 +x:1 +充电 1 +x:1 +中兴 1 +x:1 +银冠 1 +x:1 +龙门刨 1 +x:1 +泛化 1 +x:1 +喝酒 1 +x:1 +充畅 1 +x:1 +宫颈 1 +x:1 +细丝 1 +x:1 +上午 1 +x:1 +城山镇 1 +x:1 +上半 1 +x:1 +矿部 1 +x:1 +吉大港 1 +x:1 +夹河 1 +x:1 +上升 1 +x:1 +毫无顾忌 1 +x:1 +视唱 1 +x:1 +幼儿所 1 +x:1 +全食 1 +x:1 +清贫 1 +x:1 +泛区 1 +x:1 +清账 1 +x:1 +清财 1 +x:1 +重见天日 1 +x:1 +人际网 1 +x:1 +清费 1 +x:1 +别墅区 1 +x:1 +在册 1 +x:1 +石蕊试纸 1 +x:1 +兽 6 +x:6 +纯碱 1 +x:1 +两极 1 +x:1 +红鹤 1 +x:1 +出入院 1 +x:1 +霓虹 1 +x:1 +圩场 1 +x:1 +死里逃生 1 +x:1 +鲁版 1 +x:1 +拨冗 1 +x:1 +象形 1 +x:1 +每桶 1 +x:1 +贸促会 1 +x:1 +依我看 1 +x:1 +鼻部 1 +x:1 +反攻 1 +x:1 +南洋杉 1 +x:1 +举业 1 +x:1 +航海图 1 +x:1 +编组站 1 +x:1 +求田问舍 1 +x:1 +举世 1 +x:1 +松懈 1 +x:1 +百孔千疮 1 +x:1 +避孕针 1 +x:1 +治国 1 +x:1 +南特 1 +x:1 +孔雀绿 1 +x:1 +亚马孙河 1 +x:1 +电业局 1 +x:1 +前呼后应 1 +x:1 +设计所 1 +x:1 +目的论 1 +x:1 +哕 1 +x:1 +阳刚雄强 1 +x:1 +连着 1 +x:1 +删改 1 +x:1 +主汛期 1 +x:1 +羡慕者 1 +x:1 +微不足道 1 +x:1 +香港厅 1 +x:1 +狠毒 1 +x:1 +拜占庭 1 +x:1 +拉床 1 +x:1 +上勤 1 +x:1 +都 12202 +x:12202 +汤子 1 +x:1 +圩垸 1 +x:1 +纯种 1 +x:1 +远东队 1 +x:1 +陷阱 1 +x:1 +微小 1 +x:1 +占有者 1 +x:1 +上列 1 +x:1 +细作 1 +x:1 +价值者 1 +x:1 +写作者 1 +x:1 +喔 1 +x:1 +基建 1 +x:1 +负笈 1 +x:1 +鸡虫得失 1 +x:1 +孝行 1 +x:1 +基廷 1 +x:1 +反方 1 +x:1 +木马计 1 +x:1 +争相 1 +x:1 +领事 1 +x:1 +蓝旗营 1 +x:1 +导坑 1 +x:1 +总督府 1 +x:1 +万国 1 +x:1 +钝角 1 +x:1 +阿拉伯 1 +x:1 +裹挟 1 +x:1 +振兴 1 +x:1 +全馆 1 +x:1 +枝丫 1 +x:1 +租借 1 +x:1 +铜梁县 1 +x:1 +油画家 1 +x:1 +喝道 1 +x:1 +拆 106 +x:106 +基座 1 +x:1 +清调 1 +x:1 +讽刺 1 +x:1 +上前 1 +x:1 +射箭 1 +x:1 +谁是谁非 1 +x:1 +增压器 1 +x:1 +俘 6 +x:6 +务须 1 +x:1 +曲射炮 1 +x:1 +视同 1 +x:1 +随耕 1 +x:1 +红麻 1 +x:1 +张庄 1 +x:1 +语委 1 +x:1 +改厕 1 +x:1 +练习 1 +x:1 +调味品 1 +x:1 +瓦蓝 1 +x:1 +张店 1 +x:1 +收益权 1 +x:1 +基底 1 +x:1 +柴草堆 1 +x:1 +视听 1 +x:1 +末尾 1 +x:1 +鼻音 1 +x:1 +东村 1 +x:1 +开发人 1 +x:1 +南界 1 +x:1 +清话 1 +x:1 +披肝沥胆 1 +x:1 +朝觐者 1 +x:1 +万元 1 +x:1 +清正 1 +x:1 +反作用 1 +x:1 +自讨苦吃 1 +x:1 +海瑞墓 1 +x:1 +人格化 1 +x:1 +油画展 1 +x:1 +高新产品 1 +x:1 +标签 1 +x:1 +手头字 1 +x:1 +暗沉沉 1 +x:1 +求职 1 +x:1 +青苔村 1 +x:1 +小杨屯村 1 +x:1 +军营 1 +x:1 +乌发 1 +x:1 +京政 1 +x:1 +县人委 1 +x:1 +反战 1 +x:1 +万全 1 +x:1 +肆虐 1 +x:1 +代顿市 1 +x:1 +兴会 1 +x:1 +张大 1 +x:1 +蛇 31 +x:31 +条幅 1 +x:1 +科研楼 1 +x:1 +主办方 1 +x:1 +讽喻 1 +x:1 +藕色 1 +x:1 +激化 1 +x:1 +刮漆 1 +x:1 +礁林 1 +x:1 +轰动 1 +x:1 +诊断法 1 +x:1 +鸡啼 1 +x:1 +兴企 1 +x:1 +签注 1 +x:1 +受制于人 1 +x:1 +黄褐色 1 +x:1 +银圆 1 +x:1 +啦 115 +x:115 +反手 1 +x:1 +日记本 1 +x:1 +红餐 1 +x:1 +素菜 1 +x:1 +基多 1 +x:1 +鲜亮 1 +x:1 +直接 1 +x:1 +逆向 1 +x:1 +绵土 1 +x:1 +官麓村 1 +x:1 +参展国 1 +x:1 +宣讲会 1 +x:1 +劳动力 1 +x:1 +升旗手 1 +x:1 +反击战 1 +x:1 +竹刻 1 +x:1 +末子 1 +x:1 +主体观 1 +x:1 +常用语 1 +x:1 +参展团 1 +x:1 +五短身材 1 +x:1 +舟 44 +x:44 +中技 1 +x:1 +舷窗 1 +x:1 +直捷 1 +x:1 +己所不欲 1 +x:1 +设计方 1 +x:1 +兴修 1 +x:1 +反抗 1 +x:1 +暗河 1 +x:1 +棕榈 1 +x:1 +白话文 1 +x:1 +反折 1 +x:1 +南疆 1 +x:1 +拼贴 1 +x:1 +寻衅 1 +x:1 +初掌帅印 1 +x:1 +京族 1 +x:1 +屋 123 +x:123 +东枝 1 +x:1 +怒目而视 1 +x:1 +谐波 1 +x:1 +耍嘴皮子 1 +x:1 +巴厘巴板 1 +x:1 +而已 1 +x:1 +直指 1 +x:1 +呼图壁 1 +x:1 +中央级 1 +x:1 +纯纯 1 +x:1 +桐树 1 +x:1 +胆绿素 1 +x:1 +巩膜 1 +x:1 +季节 1 +x:1 +反拉 1 +x:1 +内生肌肝 1 +x:1 +海裳杯 1 +x:1 +叶序 1 +x:1 +拴 30 +x:30 +攀援 1 +x:1 +镏金 1 +x:1 +碱法 1 +x:1 +代数式 1 +x:1 +悉 9 +x:9 +饱尝 1 +x:1 +现实性 1 +x:1 +蔗林 1 +x:1 +直拍 1 +x:1 +沏茶 1 +x:1 +触景生情 1 +x:1 +饲养员 1 +x:1 +东晋 1 +x:1 +涉险 1 +x:1 +雪窦寺 1 +x:1 +棕树 1 +x:1 +污黑 1 +x:1 +好事者 1 +x:1 +城乡村 1 +x:1 +军操 1 +x:1 +俯拾皆是 1 +x:1 +松柏 1 +x:1 +冬暖式 1 +x:1 +瓦舍 1 +x:1 +逾 145 +x:145 +失节事大 1 +x:1 +兴业 1 +x:1 +激切 1 +x:1 +暗流 1 +x:1 +慈 3 +x:3 +视力 1 +x:1 +庆祝 1 +x:1 +仓管处 1 +x:1 +岳丈 1 +x:1 +治危策 1 +x:1 +东明 1 +x:1 +衡水 1 +x:1 +曝 3 +x:3 +上品 1 +x:1 +竹叶 1 +x:1 +承租 1 +x:1 +萧萧 1 +x:1 +松果 1 +x:1 +婆家 1 +x:1 +烃原岩 1 +x:1 +后杭爱省 1 +x:1 +戈兰 1 +x:1 +剪 47 +x:47 +生津止渴 1 +x:1 +松林 1 +x:1 +压面机 1 +x:1 +牦牛肉 1 +x:1 +无资格 1 +x:1 +东映 1 +x:1 +守护神 1 +x:1 +考察费 1 +x:1 +研究者 1 +x:1 +麻子 1 +x:1 +银团 1 +x:1 +候补委员 1 +x:1 +赤红 1 +x:1 +则 2228 +x:2228 +焓 1 +x:1 +导入 1 +x:1 +劳动厅 1 +x:1 +独具特色 1 +x:1 +海参崴队 1 +x:1 +锦宴 1 +x:1 +攀折 1 +x:1 +南瓜 1 +x:1 +标立 1 +x:1 +果 150 +x:150 +教书育人 1 +x:1 +球门 1 +x:1 +标竿 1 +x:1 +射击场 1 +x:1 +混合物 1 +x:1 +巧遇 1 +x:1 +松杉 1 +x:1 +热敏电阻 1 +x:1 +慰问 1 +x:1 +最底层 1 +x:1 +种族 1 +x:1 +样板房 1 +x:1 +警具 1 +x:1 +请问 1 +x:1 +闽西 1 +x:1 +窗里 1 +x:1 +欢欣鼓舞 1 +x:1 +指导价 1 +x:1 +松木 1 +x:1 +等效 1 +x:1 +独山子区 1 +x:1 +陉阳驿 1 +x:1 +上告 1 +x:1 +平头正脸 1 +x:1 +选购节 1 +x:1 +碱水 1 +x:1 +暗淡 1 +x:1 +创作界 1 +x:1 +反对声 1 +x:1 +激动 1 +x:1 +店张镇 1 +x:1 +不苟言笑 1 +x:1 +领事司 1 +x:1 +旅游城 1 +x:1 +规正 1 +x:1 +激励 1 +x:1 +上周 1 +x:1 +红颜 1 +x:1 +摆勺 1 +x:1 +内疚 1 +x:1 +兴亡 1 +x:1 +息肉 1 +x:1 +营销商 1 +x:1 +清规 1 +x:1 +黄锈病 1 +x:1 +激光 1 +x:1 +镊子 1 +x:1 +万博 1 +x:1 +微妙 1 +x:1 +万千 1 +x:1 +所失者 1 +x:1 +晦涩 1 +x:1 +棍儿 1 +x:1 +鸡场 1 +x:1 +依附性 1 +x:1 +咧 4 +x:4 +非上市 1 +x:1 +制黄 1 +x:1 +警力 1 +x:1 +村党委 1 +x:1 +极右派 1 +x:1 +闭关锁国 1 +x:1 +江南 1 +x:1 +激进主义 1 +x:1 +切面 1 +x:1 +委婉 1 +x:1 +反思 1 +x:1 +负约 1 +x:1 +瓦脊 1 +x:1 +向背 1 +x:1 +才情 1 +x:1 +勇创 1 +x:1 +肯切 1 +x:1 +斤斤 1 +x:1 +飏 1 +x:1 +球队 1 +x:1 +重要性 1 +x:1 +抽象代数 1 +x:1 +卡奥沃斯 1 +x:1 +胆战心惊 1 +x:1 +连片 1 +x:1 +离散 1 +x:1 +掂 6 +x:6 +团职 1 +x:1 +标示 1 +x:1 +干脆利落 1 +x:1 +昏头胀脑 1 +x:1 +咽喉片 1 +x:1 +抢修班 1 +x:1 +党卫军 1 +x:1 +斤斗 1 +x:1 +喝问 1 +x:1 +饲养场 1 +x:1 +演奏会 1 +x:1 +炮弹箱 1 +x:1 +火井 1 +x:1 +杯中物 1 +x:1 +邃远 1 +x:1 +负担率 1 +x:1 +受者 1 +x:1 +邀请 1 +x:1 +乌共 1 +x:1 +静乐 1 +x:1 +益寿延年 1 +x:1 +窑洞 1 +x:1 +新苗 1 +x:1 +夹棍 1 +x:1 +花纱布 1 +x:1 +说不过去 1 +x:1 +襟怀坦白 1 +x:1 +上地 1 +x:1 +微电子 1 +x:1 +川奈 1 +x:1 +反悔 1 +x:1 +万古 1 +x:1 +乏力 1 +x:1 +写稿 1 +x:1 +罗马式 1 +x:1 +织绣 1 +x:1 +直感 1 +x:1 +野雀儿 1 +x:1 +上坟 1 +x:1 +消防人 1 +x:1 +报警网 1 +x:1 +业务组 1 +x:1 +万历 1 +x:1 +非此即彼 1 +x:1 +瓣儿 1 +x:1 +少林寺 1 +x:1 +合同商 1 +x:1 +进寸退尺 1 +x:1 +上坂 1 +x:1 +售房款 1 +x:1 +势在必行 1 +x:1 +棕毛 1 +x:1 +侵夺 1 +x:1 +万县 1 +x:1 +应选人 1 +x:1 +肇庆市 1 +x:1 +执行者 1 +x:1 +暗滩 1 +x:1 +东方 1 +x:1 +茂南 1 +x:1 +由是 1 +x:1 +纯粹 1 +x:1 +神炮手 1 +x:1 +上坡 1 +x:1 +孝情 1 +x:1 +贫下中农 1 +x:1 +冶钢 1 +x:1 +史著 1 +x:1 +地主阶级 1 +x:1 +军政 1 +x:1 +异体 1 +x:1 +台胞 1 +x:1 +细胞株 1 +x:1 +靖边楼 1 +x:1 +橘红色 1 +x:1 +边缘型 1 +x:1 +面点师 1 +x:1 +不一而足 1 +x:1 +视像 1 +x:1 +无情无义 1 +x:1 +语调 1 +x:1 +工作 1 +x:1 +球面 1 +x:1 +单晶硅 1 +x:1 +掳 1 +x:1 +切除 1 +x:1 +勤俭持家 1 +x:1 +读者 1 +x:1 +碱滩 1 +x:1 +反感 1 +x:1 +参展商 1 +x:1 +荧光粉 1 +x:1 +矿长 1 +x:1 +班规 1 +x:1 +上回 1 +x:1 +熔铸 1 +x:1 +警号 1 +x:1 +警司 1 +x:1 +劳动党 1 +x:1 +山石 1 +x:1 +几何体 1 +x:1 +万分 1 +x:1 +敬业爱岗 1 +x:1 +仲裁法 1 +x:1 +晨光熹微 1 +x:1 +警句 1 +x:1 +扭扭捏捏 1 +x:1 +竹凳 1 +x:1 +除虫菊 1 +x:1 +负翁 1 +x:1 +业务网 1 +x:1 +上图 1 +x:1 +鱼塘乡 1 +x:1 +心事重重 1 +x:1 +获胜者 1 +x:1 +各有所持 1 +x:1 +腐败风 1 +x:1 +畜皮 1 +x:1 +乡试录 1 +x:1 +巷 19 +x:19 +截煤机 1 +x:1 +朗读 1 +x:1 +行政诉讼 1 +x:1 +逗笑儿 1 +x:1 +台联 1 +x:1 +登临 1 +x:1 +警区 1 +x:1 +蕴藉 1 +x:1 +装殓 1 +x:1 +因为 1 +x:1 +函授部 1 +x:1 +转租 1 +x:1 +南盟 1 +x:1 +松散 1 +x:1 +跳蚤市场 1 +x:1 +新出办 1 +x:1 +晦气 1 +x:1 +浙赣 1 +x:1 +闹市 1 +x:1 +事出有因 1 +x:1 +戒严法 1 +x:1 +婆娘 1 +x:1 +镜报 1 +x:1 +卡巴纳 1 +x:1 +庶 2 +x:2 +琉璃河 1 +x:1 +老龙头 1 +x:1 +割据 1 +x:1 +下天 1 +x:1 +球鞋 1 +x:1 +坦诚相待 1 +x:1 +新闻局 1 +x:1 +导医 1 +x:1 +奏 56 +x:56 +大片大片 1 +x:1 +摆动 1 +x:1 +警卫 1 +x:1 +征收局 1 +x:1 +丸子 1 +x:1 +苞 6 +x:6 +委实 1 +x:1 +罗柴冲 1 +x:1 +业户 1 +x:1 +百鸟园 1 +x:1 +再者说 1 +x:1 +南皮 1 +x:1 +陆丰市 1 +x:1 +市政厅 1 +x:1 +碱渣 1 +x:1 +拉依喀乡 1 +x:1 +负罪 1 +x:1 +连珠 1 +x:1 +卟啉铁 1 +x:1 +水烟袋 1 +x:1 +财团 1 +x:1 +学生部 1 +x:1 +下头 1 +x:1 +民权主义 1 +x:1 +底色 1 +x:1 +标杆 1 +x:1 +里丁屿 1 +x:1 +粘连 1 +x:1 +半公开 1 +x:1 +攀缘 1 +x:1 +季鹰 1 +x:1 +导航者 1 +x:1 +这块 1 +x:1 +球衫 1 +x:1 +支技者 1 +x:1 +竹事 1 +x:1 +艺德 1 +x:1 +失灵 1 +x:1 +头状花序 1 +x:1 +球衣 1 +x:1 +扩军备战 1 +x:1 +获奖数 1 +x:1 +翎翅 1 +x:1 +开发办 1 +x:1 +丰溢 1 +x:1 +展示板 1 +x:1 +隆尧 1 +x:1 +清韵 1 +x:1 +失火 1 +x:1 +南楼 1 +x:1 +清音 1 +x:1 +终场 1 +x:1 +黏稠度 1 +x:1 +兵员 1 +x:1 +部长会议 1 +x:1 +兴化 1 +x:1 +底舱 1 +x:1 +庵东镇 1 +x:1 +快当 1 +x:1 +翎羽 1 +x:1 +不慌不忙 1 +x:1 +流芳百世 1 +x:1 +东笋 1 +x:1 +平潭县 1 +x:1 +保险员 1 +x:1 +狗爪子花 1 +x:1 +抽噎 1 +x:1 +转运站 1 +x:1 +实地 1 +x:1 +兵味 1 +x:1 +湖南省 1 +x:1 +实在 1 +x:1 +丰满 1 +x:1 +八大山人 1 +x:1 +标本 1 +x:1 +红藤 1 +x:1 +润湿性 1 +x:1 +演讲稿 1 +x:1 +视作 1 +x:1 +底特律市 1 +x:1 +议定书 1 +x:1 +棒子面粥 1 +x:1 +宫苑 1 +x:1 +清静 1 +x:1 +青饲料 1 +x:1 +劝和 1 +x:1 +红藻 1 +x:1 +使团长 1 +x:1 +唐宗 1 +x:1 +兴叹 1 +x:1 +脑血管病 1 +x:1 +球裤 1 +x:1 +保温屋 1 +x:1 +恐龙蛋 1 +x:1 +竹丝 1 +x:1 +发泡镍 1 +x:1 +通缉犯 1 +x:1 +味素 1 +x:1 +一卡通 1 +x:1 +竹乡 1 +x:1 +异乡人 1 +x:1 +工会 1 +x:1 +静候 1 +x:1 +鹰爪 1 +x:1 +删节号 1 +x:1 +之后 1 +x:1 +茂名南路 1 +x:1 +军风 1 +x:1 +兴县 1 +x:1 +桌椅 1 +x:1 +云南 1 +x:1 +快快 1 +x:1 +内外夹攻 1 +x:1 +新贵 1 +x:1 +流水不腐 1 +x:1 +揭幕战 1 +x:1 +权益日 1 +x:1 +内耳 1 +x:1 +濮阳县 1 +x:1 +标枪 1 +x:1 +凤眼莲 1 +x:1 +堆 136 +x:136 +清雅 1 +x:1 +多种多样 1 +x:1 +上代人 1 +x:1 +内胎 1 +x:1 +榴莲果 1 +x:1 +南桐 1 +x:1 +阿拉善 1 +x:1 +线形 1 +x:1 +股 538 +x:538 +葛武镇 1 +x:1 +总务科 1 +x:1 +鲁桥 1 +x:1 +味精 1 +x:1 +好逸恶劳 1 +x:1 +规避 1 +x:1 +初见端倪 1 +x:1 +意旨 1 +x:1 +长三甲 1 +x:1 +充溢 1 +x:1 +三班倒 1 +x:1 +漆树籽 1 +x:1 +俞 184 +x:184 +红外灯 1 +x:1 +开发史 1 +x:1 +内胆 1 +x:1 +仁兄 1 +x:1 +刘浩营村 1 +x:1 +犯罪人 1 +x:1 +彼得堡 1 +x:1 +争气 1 +x:1 +握手言欢 1 +x:1 +伊达尔戈 1 +x:1 +出险率 1 +x:1 +潮白河 1 +x:1 +千古罪人 1 +x:1 +标明 1 +x:1 +标高 1 +x:1 +山里娃 1 +x:1 +腠 1 +x:1 +渐入佳境 1 +x:1 +创联部 1 +x:1 +红萍 1 +x:1 +印度洋 1 +x:1 +励人 1 +x:1 +充满 1 +x:1 +每年度 1 +x:1 +佯攻 1 +x:1 +管委 1 +x:1 +乌云 1 +x:1 +佛蒙特州 1 +x:1 +智 60 +x:60 +咨询性 1 +x:1 +田独 1 +x:1 +保险商 1 +x:1 +铮铮可闻 1 +x:1 +罐顶 1 +x:1 +日本式 1 +x:1 +乌孜别克 1 +x:1 +鲜卑 1 +x:1 +槽牙 1 +x:1 +陈腐 1 +x:1 +小川町 1 +x:1 +东站 1 +x:1 +艺术观 1 +x:1 +金海湖 1 +x:1 +息鼓 1 +x:1 +称职 1 +x:1 +北大 1 +x:1 +巨帙 1 +x:1 +清除 1 +x:1 +南郭村 1 +x:1 +桌案 1 +x:1 +牛郎 1 +x:1 +开垦费 1 +x:1 +静养 1 +x:1 +北头 1 +x:1 +合议 1 +x:1 +害病 1 +x:1 +加饭酒 1 +x:1 +荒山坡 1 +x:1 +合订 1 +x:1 +东端 1 +x:1 +合计 1 +x:1 +皮猴 1 +x:1 +重阳节 1 +x:1 +反质子 1 +x:1 +兴办 1 +x:1 +淤泥 1 +x:1 +屡败屡战 1 +x:1 +尚无先例 1 +x:1 +合译 1 +x:1 +擎 17 +x:17 +平仄 1 +x:1 +两手空空 1 +x:1 +攀绕 1 +x:1 +想入非非 1 +x:1 +乌丹 1 +x:1 +则已 1 +x:1 +阴影 1 +x:1 +绝育 1 +x:1 +视为 1 +x:1 +庭院 1 +x:1 +承救 1 +x:1 +单淘汰制 1 +x:1 +该病 1 +x:1 +筒状花 1 +x:1 +跌宕 1 +x:1 +小蒋庄村 1 +x:1 +投保额 1 +x:1 +祸福相倚 1 +x:1 +麻城市 1 +x:1 +应聘者 1 +x:1 +轿 4 +x:4 +进出口额 1 +x:1 +花枝招展 1 +x:1 +郑油坊村 1 +x:1 +丰沛 1 +x:1 +穴道 1 +x:1 +杨花台村 1 +x:1 +入会者 1 +x:1 +争功诿过 1 +x:1 +示弱 1 +x:1 +阴错阳差 1 +x:1 +作战者 1 +x:1 +优质优价 1 +x:1 +划清 1 +x:1 +洪 198 +x:198 +庆春 1 +x:1 +挽词 1 +x:1 +失物 1 +x:1 +鹿厂镇 1 +x:1 +安家费 1 +x:1 +清闲 1 +x:1 +万众 1 +x:1 +逸士 1 +x:1 +狠狠 1 +x:1 +登台 1 +x:1 +万安渡 1 +x:1 +档案史 1 +x:1 +合行 1 +x:1 +团鱼 1 +x:1 +负担 1 +x:1 +地图集 1 +x:1 +巧辩 1 +x:1 +握 75 +x:75 +平地楼台 1 +x:1 +怕羞 1 +x:1 +准入 1 +x:1 +干热风 1 +x:1 +意志篇 1 +x:1 +割线 1 +x:1 +不管 1 +x:1 +兵器 1 +x:1 +产业性 1 +x:1 +狗爬犁 1 +x:1 +解答 1 +x:1 +军马 1 +x:1 +劣质品 1 +x:1 +风翔县 1 +x:1 +写明 1 +x:1 +纯情 1 +x:1 +搏 22 +x:22 +丹参素 1 +x:1 +渔都 1 +x:1 +常沅村 1 +x:1 +逗 16 +x:16 +墓葬 1 +x:1 +军旗 1 +x:1 +除害者 1 +x:1 +切诊 1 +x:1 +警世 1 +x:1 +主婚 1 +x:1 +东移 1 +x:1 +挑毛拣刺 1 +x:1 +权欲狂 1 +x:1 +妲 1 +x:1 +交通壕 1 +x:1 +增长额 1 +x:1 +败絮其中 1 +x:1 +上饶市 1 +x:1 +比热戈斯 1 +x:1 +雁翎队 1 +x:1 +虫眼 1 +x:1 +兴农 1 +x:1 +冠鸡 1 +x:1 +全能 1 +x:1 +临安段 1 +x:1 +天文钟 1 +x:1 +巧计 1 +x:1 +雷坪乡 1 +x:1 +人海战 1 +x:1 +瓦口 1 +x:1 +档案卷 1 +x:1 +底肥 1 +x:1 +泥炭土 1 +x:1 +枣藤 1 +x:1 +红螺 1 +x:1 +参与人 1 +x:1 +佛头着粪 1 +x:1 +全胜 1 +x:1 +标新 1 +x:1 +庭中 1 +x:1 +项目卡 1 +x:1 +南段 1 +x:1 +跟踪单 1 +x:1 +陋俗 1 +x:1 +登山家 1 +x:1 +奖项 1 +x:1 +四五时 1 +x:1 +香干 1 +x:1 +粘贴 1 +x:1 +兵团 1 +x:1 +入市者 1 +x:1 +老骥伏枥 1 +x:1 +空落落 1 +x:1 +碳素钢 1 +x:1 +北宋 1 +x:1 +志节 1 +x:1 +北安 1 +x:1 +主导 1 +x:1 +锦江畔 1 +x:1 +毛笋 1 +x:1 +成人式 1 +x:1 +充沛 1 +x:1 +宫腔 1 +x:1 +隙 5 +x:5 +香椿树 1 +x:1 +良有以此 1 +x:1 +跑道儿 1 +x:1 +碧云里 1 +x:1 +直系 1 +x:1 +绝色 1 +x:1 +收视率 1 +x:1 +四人帮 1 +x:1 +平平整整 1 +x:1 +绝艺 1 +x:1 +幽幽浓浓 1 +x:1 +南极虾 1 +x:1 +粤菜 1 +x:1 +丰润 1 +x:1 +混合泳 1 +x:1 +全脂 1 +x:1 +愿心 1 +x:1 +千折百回 1 +x:1 +兵圣 1 +x:1 +拜科努尔 1 +x:1 +贩毒人 1 +x:1 +陋习 1 +x:1 +伸手 1 +x:1 +委托性 1 +x:1 +肥皂粉 1 +x:1 +缥缥缈缈 1 +x:1 +万万 1 +x:1 +军魂 1 +x:1 +新平县 1 +x:1 +万一 1 +x:1 +前苏联队 1 +x:1 +遵命 1 +x:1 +太原省 1 +x:1 +弹丸之地 1 +x:1 +荔枝 1 +x:1 +毛绒 1 +x:1 +交通处 1 +x:1 +主官 1 +x:1 +乡政府 1 +x:1 +优势仗 1 +x:1 +贼心 1 +x:1 +夹生 1 +x:1 +药械 1 +x:1 +中北路 1 +x:1 +承销团 1 +x:1 +孝道 1 +x:1 +川妹 1 +x:1 +愚鲁 1 +x:1 +托运处 1 +x:1 +三军思奋 1 +x:1 +充气 1 +x:1 +仁厚 1 +x:1 +规行矩步 1 +x:1 +蕉岭县 1 +x:1 +主子 1 +x:1 +导体 1 +x:1 +隆德 1 +x:1 +主存 1 +x:1 +静卧 1 +x:1 +红蛋 1 +x:1 +鼻血 1 +x:1 +等第 1 +x:1 +目送 1 +x:1 +能征惯战 1 +x:1 +虫瘿 1 +x:1 +虎骨 1 +x:1 +航海业 1 +x:1 +西市区 1 +x:1 +举国 1 +x:1 +等等 1 +x:1 +兑换 1 +x:1 +涉案人员 1 +x:1 +埘 1 +x:1 +联络点 1 +x:1 +万事 1 +x:1 +序目 1 +x:1 +自有率 1 +x:1 +官本位 1 +x:1 +废碎料 1 +x:1 +能文能武 1 +x:1 +产量型 1 +x:1 +呈缴本 1 +x:1 +尽收眼底 1 +x:1 +兵工厂 1 +x:1 +管子 1 +x:1 +烧锅 1 +x:1 +紫云村 1 +x:1 +消防厅 1 +x:1 +班长 1 +x:1 +工程科 1 +x:1 +主峰 1 +x:1 +匪相 1 +x:1 +深思熟虑 1 +x:1 +遵化 1 +x:1 +酿造业 1 +x:1 +南浔 1 +x:1 +居安思危 1 +x:1 +测验 1 +x:1 +营销体 1 +x:1 +南浦 1 +x:1 +跌幅 1 +x:1 +苇河 1 +x:1 +取暖油 1 +x:1 +新趣 1 +x:1 +松绑 1 +x:1 +匪盗 1 +x:1 +嘬 1 +x:1 +冒名顶替 1 +x:1 +南海 1 +x:1 +布艺 1 +x:1 +北岳 1 +x:1 +堤堰 1 +x:1 +半壁店 1 +x:1 +多样化 1 +x:1 +北岸 1 +x:1 +饥不择食 1 +x:1 +冰晶石 1 +x:1 +财务 1 +x:1 +赤杨 1 +x:1 +承前启后 1 +x:1 +鉴赏家 1 +x:1 +晌 1 +x:1 +赤松 1 +x:1 +委托机 1 +x:1 +耻骨 1 +x:1 +势在必然 1 +x:1 +足协杯赛 1 +x:1 +银企 1 +x:1 +答题 1 +x:1 +茶泡饭 1 +x:1 +理论化 1 +x:1 +疟原虫 1 +x:1 +年代 1 +x:1 +练出 1 +x:1 +壳 18 +x:18 +地极 1 +x:1 +巨富 1 +x:1 +财办 1 +x:1 +一转眼 1 +x:1 +液状 1 +x:1 +财力 1 +x:1 +函授课 1 +x:1 +咀 1 +x:1 +碎岭 1 +x:1 +花花哨哨 1 +x:1 +理论史 1 +x:1 +晋城市 1 +x:1 +缘由 1 +x:1 +兴城 1 +x:1 +松江县 1 +x:1 +附赠物 1 +x:1 +月桂树 1 +x:1 +剩余 1 +x:1 +简而言之 1 +x:1 +八方支援 1 +x:1 +合理 1 +x:1 +很早以前 1 +x:1 +谷草 1 +x:1 +张格庄镇 1 +x:1 +合身 1 +x:1 +媒妁 1 +x:1 +棕熊 1 +x:1 +别家 1 +x:1 +重复话 1 +x:1 +举出 1 +x:1 +怀化市 1 +x:1 +波罗的海 1 +x:1 +飘摇 1 +x:1 +千里冰封 1 +x:1 +举凡 1 +x:1 +赤柱 1 +x:1 +南涧 1 +x:1 +谒祖 1 +x:1 +静听 1 +x:1 +巨子 1 +x:1 +卫护 1 +x:1 +绘艺 1 +x:1 +酸扒菜 1 +x:1 +主将 1 +x:1 +岭峻石险 1 +x:1 +恐龙节 1 +x:1 +枕套 1 +x:1 +练兵 1 +x:1 +嫖妓式 1 +x:1 +南汇 1 +x:1 +举债 1 +x:1 +绚丽夺目 1 +x:1 +绵亘 1 +x:1 +文从字顺 1 +x:1 +浮动性 1 +x:1 +球赛 1 +x:1 +法律学系 1 +x:1 +直立 1 +x:1 +南江 1 +x:1 +搅 23 +x:23 +谋职 1 +x:1 +儿戏 1 +x:1 +湛河区 1 +x:1 +垫脚石 1 +x:1 +预展 1 +x:1 +举借 1 +x:1 +租价 1 +x:1 +大成者 1 +x:1 +大同小异 1 +x:1 +火力发电 1 +x:1 +谷苗 1 +x:1 +兑换券 1 +x:1 +布局谋篇 1 +x:1 +在乎 1 +x:1 +星期四 1 +x:1 +开发型 1 +x:1 +费解 1 +x:1 +盘根究底 1 +x:1 +实则 1 +x:1 +洛渍岔 1 +x:1 +管工 1 +x:1 +灾难 1 +x:1 +道德乡 1 +x:1 +祈 5 +x:5 +灶王爷 1 +x:1 +银丰 1 +x:1 +五角场 1 +x:1 +壅水 1 +x:1 +矿车 1 +x:1 +嚎 1 +x:1 +花鸟画 1 +x:1 +工程署 1 +x:1 +保证期 1 +x:1 +在业 1 +x:1 +药检所 1 +x:1 +溜须拍马 1 +x:1 +毫不动摇 1 +x:1 +在世 1 +x:1 +可 4369 +x:4369 +城隍庙 1 +x:1 +实利 1 +x:1 +战争史 1 +x:1 +曲线美 1 +x:1 +纯朴 1 +x:1 +在任 1 +x:1 +随处 1 +x:1 +称著 1 +x:1 +写意 1 +x:1 +挺拔高古 1 +x:1 +振作 1 +x:1 +爽口 1 +x:1 +腿带 1 +x:1 +东经 1 +x:1 +纯种马 1 +x:1 +铁军 1 +x:1 +京粤 1 +x:1 +兴国 1 +x:1 +球路 1 +x:1 +扫雷艇 1 +x:1 +镇赉县 1 +x:1 +药栓 1 +x:1 +拘传 1 +x:1 +蹒跚 1 +x:1 +半壁 1 +x:1 +屈曲位 1 +x:1 +守护者 1 +x:1 +唐庄 1 +x:1 +扑将 1 +x:1 +暗疾 1 +x:1 +实力 1 +x:1 +蛇酒 1 +x:1 +通风报信 1 +x:1 +巨婴 1 +x:1 +慵懒 1 +x:1 +白蜡树 1 +x:1 +俱乐部队 1 +x:1 +域名 1 +x:1 +天崩地裂 1 +x:1 +国防部长 1 +x:1 +终吹点 1 +x:1 +红肿 1 +x:1 +资本主义 1 +x:1 +革大 1 +x:1 +五重奏 1 +x:1 +苇海 1 +x:1 +舌面后音 1 +x:1 +大 14538 +x:14538 +东线 1 +x:1 +实劲 1 +x:1 +负数 1 +x:1 +参演者 1 +x:1 +尽心尽意 1 +x:1 +编年体 1 +x:1 +在于 1 +x:1 +悬梯 1 +x:1 +实务 1 +x:1 +务虚 1 +x:1 +寝不安席 1 +x:1 +虫灾 1 +x:1 +南油 1 +x:1 +倒计时钟 1 +x:1 +拼音 1 +x:1 +陷没 1 +x:1 +上供 1 +x:1 +红药 1 +x:1 +脂肪型 1 +x:1 +合谋 1 +x:1 +和平门 1 +x:1 +海王星 1 +x:1 +寄件人 1 +x:1 +修士 1 +x:1 +焚 12 +x:12 +兵刃 1 +x:1 +坐具 1 +x:1 +交通局 1 +x:1 +碱石 1 +x:1 +静园 1 +x:1 +管庄 1 +x:1 +斜角 1 +x:1 +阿弥陀佛 1 +x:1 +军鸽 1 +x:1 +可塑性 1 +x:1 +你死我活 1 +x:1 +逆产 1 +x:1 +保险刀 1 +x:1 +移动式 1 +x:1 +香港仔 1 +x:1 +等级 1 +x:1 +蜡像馆 1 +x:1 +领导层 1 +x:1 +预提 1 +x:1 +雍正 1 +x:1 +登基 1 +x:1 +清醇 1 +x:1 +专储 1 +x:1 +有理函数 1 +x:1 +光前裕后 1 +x:1 +俑 2 +x:2 +声浪 1 +x:1 +红茶 1 +x:1 +浙沪 1 +x:1 +桔 3 +x:3 +不成方圆 1 +x:1 +考察队 1 +x:1 +清醒 1 +x:1 +香嫩 1 +x:1 +一落千丈 1 +x:1 +枝叶 1 +x:1 +肝硬变 1 +x:1 +皮瓣 1 +x:1 +锅炉房 1 +x:1 +吉伦特省 1 +x:1 +廷杖 1 +x:1 +闪电河乡 1 +x:1 +南漳 1 +x:1 +秦腔戏 1 +x:1 +这儿 1 +x:1 +灵石县 1 +x:1 +承担 1 +x:1 +邀请赛 1 +x:1 +启示性 1 +x:1 +筹备处 1 +x:1 +今古奇闻 1 +x:1 +旁观者 1 +x:1 +失盗 1 +x:1 +登场 1 +x:1 +狂奔 1 +x:1 +皮球 1 +x:1 +人来疯 1 +x:1 +核试区 1 +x:1 +清澈见底 1 +x:1 +草台班子 1 +x:1 +课目 1 +x:1 +煞有介事 1 +x:1 +紫红色 1 +x:1 +无外贸 1 +x:1 +巨大 1 +x:1 +伊斯兰 1 +x:1 +骤增 1 +x:1 +海和会 1 +x:1 +艰深 1 +x:1 +肝硬化 1 +x:1 +季风 1 +x:1 +谧 1 +x:1 +等离子体 1 +x:1 +平均值 1 +x:1 +称羡 1 +x:1 +芽眼 1 +x:1 +双鸭山市 1 +x:1 +墙头 1 +x:1 +球瘾 1 +x:1 +蒙古族 1 +x:1 +剃 6 +x:6 +痂 1 +x:1 +历史剧 1 +x:1 +斯文 1 +x:1 +细则 1 +x:1 +疲态 1 +x:1 +上体 1 +x:1 +设备室 1 +x:1 +上位 1 +x:1 +奋翅展翼 1 +x:1 +工程系 1 +x:1 +暗盒 1 +x:1 +细分 1 +x:1 +烧造 1 +x:1 +势不可挡 1 +x:1 +板桥村 1 +x:1 +主席 1 +x:1 +扣 161 +x:161 +菌丝 1 +x:1 +圣洁感 1 +x:1 +侦查员制 1 +x:1 +阜新 1 +x:1 +承托 1 +x:1 +贵专栏 1 +x:1 +中常委 1 +x:1 +阜成门 1 +x:1 +巨奖 1 +x:1 +实况 1 +x:1 +上佳 1 +x:1 +污蔑 1 +x:1 +高新产业 1 +x:1 +北平 1 +x:1 +垃圾道 1 +x:1 +交通岗 1 +x:1 +交通岛 1 +x:1 +细别 1 +x:1 +贲门 1 +x:1 +合阳县 1 +x:1 +春风顺意 1 +x:1 +细发 1 +x:1 +耶稣 1 +x:1 +研究生会 1 +x:1 +鄄 1 +x:1 +琉璃球 1 +x:1 +底蕴 1 +x:1 +乘骑者 1 +x:1 +南湖 1 +x:1 +练功 1 +x:1 +才华横溢 1 +x:1 +红色 1 +x:1 +红艳 1 +x:1 +渗出性 1 +x:1 +承接 1 +x:1 +纵贪张奢 1 +x:1 +台风 1 +x:1 +负极 1 +x:1 +有险必抢 1 +x:1 +冰雪界 1 +x:1 +战时 1 +x:1 +巨增 1 +x:1 +河川 1 +x:1 +上人 1 +x:1 +监察局 1 +x:1 +示威 1 +x:1 +主心 1 +x:1 +皮疹 1 +x:1 +上交 1 +x:1 +南湾 1 +x:1 +石炼化 1 +x:1 +鸡丝 1 +x:1 +隆中 1 +x:1 +紫胶 1 +x:1 +徘徊 1 +x:1 +着 10092 +x:10092 +承揽 1 +x:1 +唐山 1 +x:1 +殷 76 +x:76 +理论值 1 +x:1 +墙壁 1 +x:1 +泛亚 1 +x:1 +线头 1 +x:1 +失真 1 +x:1 +兵卒 1 +x:1 +资助款 1 +x:1 +总方针 1 +x:1 +保险卡 1 +x:1 +碎影 1 +x:1 +战斗 1 +x:1 +三·一五 1 +x:1 +退伍费 1 +x:1 +合资 1 +x:1 +指导员 1 +x:1 +日记簿 1 +x:1 +烛花 1 +x:1 +了却 1 +x:1 +上任 1 +x:1 +垃圾量 1 +x:1 +保险单 1 +x:1 +子房山 1 +x:1 +失眠 1 +x:1 +媒婆 1 +x:1 +无保证 1 +x:1 +财金队 1 +x:1 +竞标路 1 +x:1 +上代 1 +x:1 +和蔼可亲 1 +x:1 +朋 8 +x:8 +心悦诚服 1 +x:1 +举动 1 +x:1 +长命富贵 1 +x:1 +负有 1 +x:1 +军龄 1 +x:1 +隆安 1 +x:1 +耽误 1 +x:1 +上万 1 +x:1 +尝 122 +x:122 +罄 2 +x:2 +顶门儿 1 +x:1 +烧酒 1 +x:1 +举办 1 +x:1 +返青肥 1 +x:1 +裁判官 1 +x:1 +谈心会 1 +x:1 +百事待兴 1 +x:1 +儿歌 1 +x:1 +间歇性 1 +x:1 +百育乡 1 +x:1 +氽 1 +x:1 +打乱 1 +x:1 +锯机 1 +x:1 +保健法 1 +x:1 +月份牌 1 +x:1 +搞关系 1 +x:1 +上乘 1 +x:1 +兵变 1 +x:1 +细化 1 +x:1 +扣人心弦 1 +x:1 +扎沙村 1 +x:1 +清退 1 +x:1 +保险号 1 +x:1 +主张 1 +x:1 +红花 1 +x:1 +设计组 1 +x:1 +底薪 1 +x:1 +虫牙 1 +x:1 +打铁 1 +x:1 +进气道 1 +x:1 +岩层 1 +x:1 +金丝小枣 1 +x:1 +得分制 1 +x:1 +现况 1 +x:1 +琉璃瓦 1 +x:1 +桔树 1 +x:1 +草头儿 1 +x:1 +卫理公会 1 +x:1 +北影 1 +x:1 +以文会友 1 +x:1 +永发村 1 +x:1 +上书 1 +x:1 +跑操 1 +x:1 +阎罗王 1 +x:1 +平安无事 1 +x:1 +传经送宝 1 +x:1 +抗滑桩 1 +x:1 +实录 1 +x:1 +数学课 1 +x:1 +蝮蛇 1 +x:1 +耐 65 +x:65 +初出茅庐 1 +x:1 +行政村 1 +x:1 +枕 5 +x:5 +湖州市 1 +x:1 +大行其道 1 +x:1 +定边县 1 +x:1 +广播体操 1 +x:1 +欢 24 +x:24 +述说 1 +x:1 +多样式 1 +x:1 +墙垣 1 +x:1 +建平县 1 +x:1 +标本馆 1 +x:1 +吟颂 1 +x:1 +巨型 1 +x:1 +审编 1 +x:1 +兴学 1 +x:1 +不请自到 1 +x:1 +团队 1 +x:1 +罐里 1 +x:1 +鲜嫩 1 +x:1 +红货 1 +x:1 +中国化 1 +x:1 +邛崃市 1 +x:1 +了局 1 +x:1 +阅兵 1 +x:1 +国将不国 1 +x:1 +跑步 1 +x:1 +奖 464 +x:464 +招商团 1 +x:1 +写法 1 +x:1 +监测制 1 +x:1 +非营利性 1 +x:1 +实弹 1 +x:1 +桔果 1 +x:1 +暖气团 1 +x:1 +微俯 1 +x:1 +早 1098 +x:1098 +西约克郡 1 +x:1 +崇洋媚外 1 +x:1 +裁判员 1 +x:1 +侵侮 1 +x:1 +植入数 1 +x:1 +眼眸 1 +x:1 +日本国 1 +x:1 +保险局 1 +x:1 +身临其境 1 +x:1 +私房话 1 +x:1 +生活会 1 +x:1 +革命 1 +x:1 +什 1 +x:1 +匪穴 1 +x:1 +代收代缴 1 +x:1 +唐县 1 +x:1 +空舍清野 1 +x:1 +财年 1 +x:1 +五十九中 1 +x:1 +富丽堂皇 1 +x:1 +田笋 1 +x:1 +实心 1 +x:1 +德语区 1 +x:1 +喝茶 1 +x:1 +巴山蜀水 1 +x:1 +悼辞 1 +x:1 +哼哈二将 1 +x:1 +窑址 1 +x:1 +饿殍遍野 1 +x:1 +台面 1 +x:1 +捐弃前嫌 1 +x:1 +遵循 1 +x:1 +不管部 1 +x:1 +※ 6 +x:6 +军邮 1 +x:1 +住户 1 +x:1 +青壮年 1 +x:1 +读音 1 +x:1 +向阳 1 +x:1 +兴宝 1 +x:1 +大田庄乡 1 +x:1 +镉 4 +x:4 +域外 1 +x:1 +反目 1 +x:1 +毛巾厂 1 +x:1 +争斗 1 +x:1 +烧鸡 1 +x:1 +兴安 1 +x:1 +跌势 1 +x:1 +安魂曲 1 +x:1 +细小 1 +x:1 +令 1329 +x:1329 +手压井 1 +x:1 +支部 1 +x:1 +岳家 1 +x:1 +破击战 1 +x:1 +氯碱厂 1 +x:1 +斟茶 1 +x:1 +扑克 1 +x:1 +军部 1 +x:1 +富水街村 1 +x:1 +财帛 1 +x:1 +宴会 1 +x:1 +丰林 1 +x:1 +暗礁 1 +x:1 +儿时 1 +x:1 +高耸入云 1 +x:1 +自珍 1 +x:1 +能力型 1 +x:1 +纤毛虫 1 +x:1 +振奋感 1 +x:1 +晴到多云 1 +x:1 +答问 1 +x:1 +途中 1 +x:1 +田赋 1 +x:1 +双唇音 1 +x:1 +胜利果实 1 +x:1 +陈规 1 +x:1 +蓄势期 1 +x:1 +桉油 1 +x:1 +红豆 1 +x:1 +准绳 1 +x:1 +反省 1 +x:1 +类固醇 1 +x:1 +微亮 1 +x:1 +皮管 1 +x:1 +实干 1 +x:1 +纯正 1 +x:1 +滑轮车 1 +x:1 +互通 1 +x:1 +唐初 1 +x:1 +长胜村 1 +x:1 +水上居民 1 +x:1 +叱咤 1 +x:1 +快嘴 1 +x:1 +印度教 1 +x:1 +皮箱 1 +x:1 +摇摇欲坠 1 +x:1 +暗示 1 +x:1 +杠杠 1 +x:1 +学画 1 +x:1 +末了 1 +x:1 +矿物油 1 +x:1 +回应 1 +x:1 +独占鳌头 1 +x:1 +保健所 1 +x:1 +鱼腥草 1 +x:1 +逸史 1 +x:1 +重机关枪 1 +x:1 +棒棰柳 1 +x:1 +购买者 1 +x:1 +杠杆 1 +x:1 +侵人 1 +x:1 +春夏秋冬 1 +x:1 +后勤处 1 +x:1 +准线 1 +x:1 +夹缝 1 +x:1 +线圈 1 +x:1 +攀登 1 +x:1 +乌龙茶 1 +x:1 +骂 78 +x:78 +迪瓦市 1 +x:1 +一抓到底 1 +x:1 +愿者上钩 1 +x:1 +佳利宝 1 +x:1 +地板 1 +x:1 +害臊 1 +x:1 +企业型 1 +x:1 +跃变层 1 +x:1 +混为一谈 1 +x:1 +爽快 1 +x:1 +主公 1 +x:1 +直白 1 +x:1 +严 325 +x:325 +肥滚滚 1 +x:1 +档案堆 1 +x:1 +泰和县 1 +x:1 +拨弦 1 +x:1 +种苗 1 +x:1 +小康县 1 +x:1 +镇定自若 1 +x:1 +脉息 1 +x:1 +练就 1 +x:1 +招牌 1 +x:1 +无锡市 1 +x:1 +宝莲灯 1 +x:1 +人均收入 1 +x:1 +憋足劲 1 +x:1 +主儿 1 +x:1 +一般见识 1 +x:1 +失禁 1 +x:1 +平顺县 1 +x:1 +团音 1 +x:1 +和风桥 1 +x:1 +煎 16 +x:16 +竞争力 1 +x:1 +交通厅 1 +x:1 +全诗 1 +x:1 +兵差 1 +x:1 +北关 1 +x:1 +兵工 1 +x:1 +反驳者 1 +x:1 +虎林 1 +x:1 +堪言 1 +x:1 +连日 1 +x:1 +大行政区 1 +x:1 +档案室 1 +x:1 +鲍峡镇 1 +x:1 +波导管 1 +x:1 +薛庄村 1 +x:1 +磁场强度 1 +x:1 +兴奋 1 +x:1 +争权 1 +x:1 +学生 1 +x:1 +线呢 1 +x:1 +评测 1 +x:1 +零打碎敲 1 +x:1 +白血球 1 +x:1 +北务 1 +x:1 +群星璀璨 1 +x:1 +充斥 1 +x:1 +棕编 1 +x:1 +球艺 1 +x:1 +运营 1 +x:1 +革囊 1 +x:1 +助学班 1 +x:1 +台门 1 +x:1 +权威性 1 +x:1 +定日县 1 +x:1 +黑石礁 1 +x:1 +价值量 1 +x:1 +同一性 1 +x:1 +血清病 1 +x:1 +收费员 1 +x:1 +灌注桩 1 +x:1 +活灵活现 1 +x:1 +委中 1 +x:1 +瑞万多 1 +x:1 +不可一世 1 +x:1 +主动 1 +x:1 +拨开 1 +x:1 +毡 2 +x:2 +急流勇退 1 +x:1 +方巾气 1 +x:1 +称许 1 +x:1 +主办 1 +x:1 +红萝卜 1 +x:1 +置 81 +x:81 +褊狭 1 +x:1 +课程 1 +x:1 +跌倒 1 +x:1 +卷轴装 1 +x:1 +课税 1 +x:1 +见利忘义 1 +x:1 +布谷 1 +x:1 +金文辞 1 +x:1 +周率 1 +x:1 +词作家 1 +x:1 +委任 1 +x:1 +纯棉 1 +x:1 +嘱咐 1 +x:1 +矿用 1 +x:1 +氏 7 +x:7 +新市区 1 +x:1 +赈济金 1 +x:1 +竞标者 1 +x:1 +送 1799 +x:1799 +逃税者 1 +x:1 +长袖善舞 1 +x:1 +管制 1 +x:1 +料豆儿 1 +x:1 +卫队 1 +x:1 +读报会 1 +x:1 +鼻腔 1 +x:1 +宏病毒 1 +x:1 +台长 1 +x:1 +冲 278 +x:278 +红运 1 +x:1 +黄鼠狼 1 +x:1 +合肥 1 +x:1 +魁 2 +x:2 +益 27 +x:27 +档案学 1 +x:1 +尼加拉瓜 1 +x:1 +钡餐 1 +x:1 +著作权 1 +x:1 +隆回 1 +x:1 +篆刻 1 +x:1 +所谓 1 +x:1 +失窃 1 +x:1 +懒 23 +x:23 +带兵官 1 +x:1 +陈言 1 +x:1 +放小 1 +x:1 +甬剧 1 +x:1 +团省委 1 +x:1 +国棉厂 1 +x:1 +煽惑 1 +x:1 +电信网 1 +x:1 +过街天桥 1 +x:1 +磬 3 +x:3 +赛马会 1 +x:1 +煽情 1 +x:1 +女高音 1 +x:1 +肌纤维 1 +x:1 +主刊 1 +x:1 +球花 1 +x:1 +巨商 1 +x:1 +充数 1 +x:1 +封山育林 1 +x:1 +合脚 1 +x:1 +免交 1 +x:1 +北厅 1 +x:1 +跌入 1 +x:1 +窝赃 1 +x:1 +实属 1 +x:1 +失策 1 +x:1 +静寂 1 +x:1 +住宿费 1 +x:1 +耶里镇 1 +x:1 +抑 5 +x:5 +细心 1 +x:1 +暗笑 1 +x:1 +芜菁 1 +x:1 +主叫 1 +x:1 +平喘药 1 +x:1 +求实 1 +x:1 +小戏 1 +x:1 +鼋鱼 1 +x:1 +布赫 1 +x:1 +侣 1 +x:1 +硝石 1 +x:1 +踢法 1 +x:1 +投井下石 1 +x:1 +巴青 1 +x:1 +免于 1 +x:1 +免予 1 +x:1 +陈说 1 +x:1 +习字帖 1 +x:1 +动脉瘤 1 +x:1 +矿脉 1 +x:1 +新军 1 +x:1 +矿脂 1 +x:1 +红领章 1 +x:1 +球茎 1 +x:1 +大度包容 1 +x:1 +东瀛 1 +x:1 +忧虑线 1 +x:1 +捐 227 +x:227 +映射 1 +x:1 +护城河 1 +x:1 +议政者 1 +x:1 +鲜妍 1 +x:1 +本命年 1 +x:1 +连杆 1 +x:1 +伯乐相马 1 +x:1 +汉诺威 1 +x:1 +勒石记痛 1 +x:1 +布质 1 +x:1 +陈设 1 +x:1 +残酷性 1 +x:1 +仁学 1 +x:1 +总的说 1 +x:1 +苍梧县 1 +x:1 +未老先衰 1 +x:1 +胸牌 1 +x:1 +基业 1 +x:1 +巨响 1 +x:1 +邢台 1 +x:1 +几何学 1 +x:1 +能 9038 +x:9038 +拳打脚踢 1 +x:1 +细微 1 +x:1 +布贴 1 +x:1 +宫观 1 +x:1 +龙形 1 +x:1 +匪祸 1 +x:1 +聘任期 1 +x:1 +了得 1 +x:1 +练市 1 +x:1 +钊 13 +x:13 +暗算 1 +x:1 +黔江县 1 +x:1 +执行长 1 +x:1 +逐人逐户 1 +x:1 +云龙风虎 1 +x:1 +管区 1 +x:1 +美丽岛 1 +x:1 +棕红 1 +x:1 +鲜奶 1 +x:1 +污血 1 +x:1 +丰收 1 +x:1 +光声控 1 +x:1 +访贫问苦 1 +x:1 +濑户内海 1 +x:1 +暗箭 1 +x:1 +砭 1 +x:1 +底角 1 +x:1 +桑榆景 1 +x:1 +军法系 1 +x:1 +暗箱 1 +x:1 +广众益 1 +x:1 +陈集乡 1 +x:1 +北区 1 +x:1 +标注 1 +x:1 +布隆迪 1 +x:1 +文弱书生 1 +x:1 +失算 1 +x:1 +高纬度 1 +x:1 +棕绷 1 +x:1 +松蓝 1 +x:1 +棕绳 1 +x:1 +无形化 1 +x:1 +蓝湿皮 1 +x:1 +交会点 1 +x:1 +忘 346 +x:346 +细胞系 1 +x:1 +小广播 1 +x:1 +细弱 1 +x:1 +基于 1 +x:1 +白血病 1 +x:1 +切花 1 +x:1 +枝干 1 +x:1 +破破烂烂 1 +x:1 +学界 1 +x:1 +祖鲁王国 1 +x:1 +阜城县 1 +x:1 +增收节支 1 +x:1 +濠江 1 +x:1 +仁寿 1 +x:1 +实存 1 +x:1 +血缘型 1 +x:1 +牙白口清 1 +x:1 +监测器 1 +x:1 +腐败论 1 +x:1 +恰穆拉 1 +x:1 +硝烟 1 +x:1 +举头 1 +x:1 +实字 1 +x:1 +紫菀 1 +x:1 +彩票潮 1 +x:1 +事件 1 +x:1 +洗心革面 1 +x:1 +污迹 1 +x:1 +地税所 1 +x:1 +巨厦 1 +x:1 +功 133 +x:133 +大中院校 1 +x:1 +遵奉 1 +x:1 +桌旁 1 +x:1 +后勤局 1 +x:1 +夹板气 1 +x:1 +皮纸 1 +x:1 +非武装 1 +x:1 +熔融 1 +x:1 +艳情 1 +x:1 +累计数 1 +x:1 +大惊小怪 1 +x:1 +磁导率 1 +x:1 +消防局 1 +x:1 +抿 3 +x:3 +赤潮 1 +x:1 +枉渚 1 +x:1 +雇 34 +x:34 +花样游泳 1 +x:1 +污辱 1 +x:1 +扑嗤 1 +x:1 +溺爱 1 +x:1 +直率 1 +x:1 +设计界 1 +x:1 +巨变 1 +x:1 +泻湖 1 +x:1 +填埋场 1 +x:1 +事事 1 +x:1 +荷花嘴乡 1 +x:1 +虎门 1 +x:1 +面无血色 1 +x:1 +纤维素 1 +x:1 +巨匾 1 +x:1 +柯西金街 1 +x:1 +半路出家 1 +x:1 +负气 1 +x:1 +称赞 1 +x:1 +好消息 1 +x:1 +遵守 1 +x:1 +开发带 1 +x:1 +叙事文 1 +x:1 +巨匠 1 +x:1 +允当寨 1 +x:1 +普天间 1 +x:1 +交通图 1 +x:1 +一拍即合 1 +x:1 +刀光血影 1 +x:1 +辞职书 1 +x:1 +河汊子 1 +x:1 +答道 1 +x:1 +晕倒 1 +x:1 +由 7542 +x:7542 +合同号 1 +x:1 +白斑病 1 +x:1 +龙岗 1 +x:1 +红角 1 +x:1 +金银制 1 +x:1 +意犹未尽 1 +x:1 +南旺 1 +x:1 +海内外 1 +x:1 +初级线圈 1 +x:1 +长城站 1 +x:1 +北仑区 1 +x:1 +获奖榜 1 +x:1 +招投标 1 +x:1 +理论家 1 +x:1 +快反 1 +x:1 +染桶 1 +x:1 +痛苦状 1 +x:1 +高六房 1 +x:1 +避孕药 1 +x:1 +事主 1 +x:1 +有情者 1 +x:1 +能掐会算 1 +x:1 +改行 1 +x:1 +标段 1 +x:1 +武侯墓 1 +x:1 +宋江起义 1 +x:1 +驿道 1 +x:1 +荔树 1 +x:1 +竞争型 1 +x:1 +拍手称快 1 +x:1 +兵士 1 +x:1 +事业 1 +x:1 +悼词 1 +x:1 +朝觐部 1 +x:1 +这家 1 +x:1 +韩岗镇 1 +x:1 +旗袍裙 1 +x:1 +快刀 1 +x:1 +阴魂 1 +x:1 +红衣 1 +x:1 +后脑勺 1 +x:1 +登岸 1 +x:1 +排队机 1 +x:1 +昂首阔步 1 +x:1 +清高 1 +x:1 +托老所 1 +x:1 +礁盘 1 +x:1 +四座宾朋 1 +x:1 +辞职信 1 +x:1 +石英沙 1 +x:1 +月明风清 1 +x:1 +到 18289 +x:18289 +财富 1 +x:1 +民族之林 1 +x:1 +奋勇当先 1 +x:1 +田二河镇 1 +x:1 +读者群 1 +x:1 +保险处 1 +x:1 +脚踝部 1 +x:1 +相形 1 +x:1 +方形 1 +x:1 +凡是 1 +x:1 +签字笔 1 +x:1 +菏泽 1 +x:1 +潆洄 1 +x:1 +扑哧 1 +x:1 +郎才女貌 1 +x:1 +系统化 1 +x:1 +养蜂人 1 +x:1 +鉴赏力 1 +x:1 +别动队 1 +x:1 +事例 1 +x:1 +军长 1 +x:1 +秋种 1 +x:1 +收费卡 1 +x:1 +一年到头 1 +x:1 +栽花养草 1 +x:1 +田夫野老 1 +x:1 +财宝 1 +x:1 +练声 1 +x:1 +中碳钢 1 +x:1 +砂轮机 1 +x:1 +小康型 1 +x:1 +滚珠轴承 1 +x:1 +桉树 1 +x:1 +东盟 1 +x:1 +巨制 1 +x:1 +东盛 1 +x:1 +无的放矢 1 +x:1 +梭子 1 +x:1 +收费厅 1 +x:1 +新闻业 1 +x:1 +窗膜 1 +x:1 +鼓楼苑 1 +x:1 +傅村镇 1 +x:1 +转化法 1 +x:1 +红装 1 +x:1 +搅拌器 1 +x:1 +兴建 1 +x:1 +联络组 1 +x:1 +智慧型 1 +x:1 +推本溯源 1 +x:1 +宫廷戏 1 +x:1 +事体 1 +x:1 +檀皮纸 1 +x:1 +登封 1 +x:1 +爵 2 +x:2 +现浇板 1 +x:1 +隆冬 1 +x:1 +开发式 1 +x:1 +养蜂业 1 +x:1 +称谓 1 +x:1 +登山 1 +x:1 +底边 1 +x:1 +均 1387 +x:1387 +细处 1 +x:1 +脉搏 1 +x:1 +索款 1 +x:1 +虎钳 1 +x:1 +仁川 1 +x:1 +档案局 1 +x:1 +欧行 1 +x:1 +全连 1 +x:1 +红袍 1 +x:1 +族际 1 +x:1 +烈士陵园 1 +x:1 +常识性 1 +x:1 +称谢 1 +x:1 +痰 21 +x:21 +红袖 1 +x:1 +布设 1 +x:1 +殡敛 1 +x:1 +本小利大 1 +x:1 +执行部 1 +x:1 +刑事罪 1 +x:1 +仁布 1 +x:1 +福尔马林 1 +x:1 +布行 1 +x:1 +连成 1 +x:1 +南李 1 +x:1 +桐竹 1 +x:1 +军队 1 +x:1 +护壁桩 1 +x:1 +鲁村 1 +x:1 +赞誉 1 +x:1 +军阀 1 +x:1 +鸡西市 1 +x:1 +南村 1 +x:1 +皮货 1 +x:1 +模范 1 +x:1 +军阶 1 +x:1 +军阵 1 +x:1 +天文馆 1 +x:1 +布衣 1 +x:1 +抬头纹 1 +x:1 +贸易局 1 +x:1 +害虫 1 +x:1 +值班长 1 +x:1 +萨吉诺镇 1 +x:1 +细嫩 1 +x:1 +乡土味 1 +x:1 +合营 1 +x:1 +宫调 1 +x:1 +征答 1 +x:1 +学监 1 +x:1 +底谷 1 +x:1 +班风 1 +x:1 +维琴查队 1 +x:1 +合著 1 +x:1 +批评话 1 +x:1 +清香 1 +x:1 +国民性 1 +x:1 +争持 1 +x:1 +南朝 1 +x:1 +实处 1 +x:1 +不可偏废 1 +x:1 +卞 33 +x:33 +这天 1 +x:1 +清馨 1 +x:1 +富饶 1 +x:1 +恐龙 1 +x:1 +合葬 1 +x:1 +里氏 1 +x:1 +诹 1 +x:1 +北图 1 +x:1 +北国 1 +x:1 +纯水 1 +x:1 +镜花岭 1 +x:1 +岳州 1 +x:1 +康拜因 1 +x:1 +枉法 1 +x:1 +举家 1 +x:1 +墓表 1 +x:1 +窘 1 +x:1 +读卡器 1 +x:1 +角质率 1 +x:1 +赵杏村 1 +x:1 +暗红 1 +x:1 +萧 90 +x:90 +跟踪式 1 +x:1 +绝迹 1 +x:1 +鲤 1 +x:1 +形式参数 1 +x:1 +窗花 1 +x:1 +荒山野岭 1 +x:1 +计会科 1 +x:1 +大南沟 1 +x:1 +兴工 1 +x:1 +绊脚石 1 +x:1 +布袋 1 +x:1 +枝子 1 +x:1 +单倍体 1 +x:1 +中子弹 1 +x:1 +标榜 1 +x:1 +团部 1 +x:1 +衍文 1 +x:1 +一展风采 1 +x:1 +长蛇阵 1 +x:1 +南枝 1 +x:1 +练字 1 +x:1 +商贸部 1 +x:1 +爷爷 1 +x:1 +舍身为国 1 +x:1 +割爱 1 +x:1 +登录 1 +x:1 +精华游 1 +x:1 +自 1988 +x:1988 +开发局 1 +x:1 +半年 1 +x:1 +世代相传 1 +x:1 +设备厂 1 +x:1 +失约 1 +x:1 +暗绿 1 +x:1 +松球 1 +x:1 +退烧针 1 +x:1 +远近闻名 1 +x:1 +清风 1 +x:1 +撞伤 1 +x:1 +静心 1 +x:1 +成人化 1 +x:1 +蒙马特 1 +x:1 +天荒坪 1 +x:1 +书香门第 1 +x:1 +衽衩口 1 +x:1 +细密 1 +x:1 +赤水 1 +x:1 +仕和集 1 +x:1 +恒丰裕行 1 +x:1 +仁弟 1 +x:1 +项目库 1 +x:1 +赞许 1 +x:1 +蛀心虫 1 +x:1 +闹事 1 +x:1 +陈迹 1 +x:1 +入会费 1 +x:1 +糖瓜 1 +x:1 +陈述 1 +x:1 +愧疚 1 +x:1 +兴山 1 +x:1 +财委 1 +x:1 +而且 1 +x:1 +档案库 1 +x:1 +四人制 1 +x:1 +私语 1 +x:1 +财文字 1 +x:1 +包打天下 1 +x:1 +收益率 1 +x:1 +标桩 1 +x:1 +堤坝路 1 +x:1 +汇聚一堂 1 +x:1 +鲁昂 1 +x:1 +平潭岛 1 +x:1 +收缴率 1 +x:1 +南明 1 +x:1 +南昌 1 +x:1 +纯洁 1 +x:1 +砍伐一空 1 +x:1 +底质 1 +x:1 +隆升 1 +x:1 +底账 1 +x:1 +装神弄鬼 1 +x:1 +工程界 1 +x:1 +参展 1 +x:1 +标格 1 +x:1 +烧香 1 +x:1 +管城 1 +x:1 +赞语 1 +x:1 +蓬户瓮牖 1 +x:1 +称身 1 +x:1 +兵学 1 +x:1 +嚎啕 1 +x:1 +全资 1 +x:1 +碎块 1 +x:1 +普法办 1 +x:1 +山和尚 1 +x:1 +妄 7 +x:7 +良莠不齐 1 +x:1 +烧饼 1 +x:1 +鞋拔子 1 +x:1 +风采录 1 +x:1 +下龙湾 1 +x:1 +不言自明 1 +x:1 +吝 1 +x:1 +平方厘米 1 +x:1 +欺人之谈 1 +x:1 +兵家 1 +x:1 +出粪口 1 +x:1 +主坝 1 +x:1 +参考值 1 +x:1 +语词 1 +x:1 +仁德 1 +x:1 +黑龙江队 1 +x:1 +谐美 1 +x:1 +连接 1 +x:1 +准确 1 +x:1 +财大 1 +x:1 +历史学 1 +x:1 +流动形 1 +x:1 +照排机 1 +x:1 +麦子港 1 +x:1 +启动力 1 +x:1 +全路 1 +x:1 +联筹会 1 +x:1 +种菜 1 +x:1 +保健操 1 +x:1 +尼罗河 1 +x:1 +黑热病 1 +x:1 +仁忠 1 +x:1 +葡萄 1 +x:1 +北坡 1 +x:1 +团里 1 +x:1 +而今 1 +x:1 +矿藏 1 +x:1 +用助剂 1 +x:1 +屈尊纡贵 1 +x:1 +生物防治 1 +x:1 +起 5812 +x:5812 +巴尔的摩 1 +x:1 +争抢 1 +x:1 +仁怀 1 +x:1 +挂 409 +x:409 +兰考县 1 +x:1 +成人气 1 +x:1 +造表 1 +x:1 +北盘江 1 +x:1 +免疫 1 +x:1 +借助于 1 +x:1 +蛙池子 1 +x:1 +徕 1 +x:1 +勃郎宁 1 +x:1 +实权 1 +x:1 +瑞金县 1 +x:1 +有声片 1 +x:1 +职业中学 1 +x:1 +造血 1 +x:1 +泛称 1 +x:1 +紫貂皮 1 +x:1 +叶片 1 +x:1 +香油 1 +x:1 +建教字 1 +x:1 +试探性 1 +x:1 +两专一基 1 +x:1 +磅礴 1 +x:1 +委托单 1 +x:1 +大莫古乡 1 +x:1 +免疫学 1 +x:1 +尽人皆知 1 +x:1 +玩花招 1 +x:1 +高度层 1 +x:1 +实有 1 +x:1 +烟尘 1 +x:1 +苗 126 +x:126 +中承拱 1 +x:1 +荆江 1 +x:1 +笛音 1 +x:1 +金银滩 1 +x:1 +纯利 1 +x:1 +服装节 1 +x:1 +巩 23 +x:23 +氢化油 1 +x:1 +南太 1 +x:1 +反之 1 +x:1 +南头 1 +x:1 +香泽 1 +x:1 +微山湖 1 +x:1 +曼海姆队 1 +x:1 +其 5219 +x:5219 +贵宾房 1 +x:1 +反过来说 1 +x:1 +主心骨儿 1 +x:1 +饿虎扑食 1 +x:1 +塔斯社 1 +x:1 +龙母镇 1 +x:1 +买进 1 +x:1 +事物 1 +x:1 +烟道 1 +x:1 +直体 1 +x:1 +赤县 1 +x:1 +信用卡 1 +x:1 +饲养科 1 +x:1 +主桥 1 +x:1 +引敌他顾 1 +x:1 +英山县 1 +x:1 +香气 1 +x:1 +白萝卜 1 +x:1 +负值 1 +x:1 +吸收国 1 +x:1 +负债 1 +x:1 +管标 1 +x:1 +稀巴烂 1 +x:1 +管树 1 +x:1 +保健室 1 +x:1 +西沟村 1 +x:1 +香水 1 +x:1 +喉塞音 1 +x:1 +海警 1 +x:1 +菌肥 1 +x:1 +改土 1 +x:1 +静态 1 +x:1 +主根 1 +x:1 +俊 156 +x:156 +苇塘 1 +x:1 +兵操 1 +x:1 +骨质 1 +x:1 +静思 1 +x:1 +香江 1 +x:1 +香榭丽舍 1 +x:1 +充当 1 +x:1 +二十七日 1 +x:1 +庸人自扰 1 +x:1 +前马家村 1 +x:1 +表白 1 +x:1 +承蒙 1 +x:1 +丰年 1 +x:1 +磅秤 1 +x:1 +雪道 1 +x:1 +火药 1 +x:1 +儿少 1 +x:1 +腋下 1 +x:1 +诲 1 +x:1 +银箔 1 +x:1 +专节 1 +x:1 +高高兴兴 1 +x:1 +直传 1 +x:1 +垂范 1 +x:1 +药性 1 +x:1 +主槽 1 +x:1 +定向培养 1 +x:1 +陷害 1 +x:1 +文明 1 +x:1 +影印件 1 +x:1 +蒙骗 1 +x:1 +富士山 1 +x:1 +平舆县 1 +x:1 +入伙人 1 +x:1 +鸟粪层 1 +x:1 +责骂 1 +x:1 +共鸣点 1 +x:1 +火花 1 +x:1 +梭柱 1 +x:1 +实景 1 +x:1 +大体上 1 +x:1 +泰语 1 +x:1 +中央区 1 +x:1 +子项 1 +x:1 +故去 1 +x:1 +仁慈 1 +x:1 +柔婉 1 +x:1 +到位率 1 +x:1 +火苗 1 +x:1 +乌纱 1 +x:1 +清净无为 1 +x:1 +晚 607 +x:607 +艳羡 1 +x:1 +疑信 1 +x:1 +爽朗 1 +x:1 +手套厂 1 +x:1 +钉帽 1 +x:1 +移花接木 1 +x:1 +视线 1 +x:1 +特殊钢 1 +x:1 +文字窍 1 +x:1 +兜肚 1 +x:1 +烟酒 1 +x:1 +火舌 1 +x:1 +航空队 1 +x:1 +扬长避短 1 +x:1 +种禽站 1 +x:1 +细故 1 +x:1 +跑动 1 +x:1 +王家坝村 1 +x:1 +烤火炉 1 +x:1 +林产品 1 +x:1 +财权 1 +x:1 +宜渔则渔 1 +x:1 +尽早 1 +x:1 +颠扑不破 1 +x:1 +钟佳桥 1 +x:1 +表态会 1 +x:1 +客货运输 1 +x:1 +撮 1 +x:1 +攀亲 1 +x:1 +奚落 1 +x:1 +筒壁 1 +x:1 +侨界 1 +x:1 +密密的 1 +x:1 +密密层层 1 +x:1 +了断 1 +x:1 +挑毛病 1 +x:1 +竹编 1 +x:1 +乌鲁木齐 1 +x:1 +海绵刷 1 +x:1 +新闻片 1 +x:1 +对症下药 1 +x:1 +享誉 1 +x:1 +哎 10 +x:10 +北仑港 1 +x:1 +龙山 1 +x:1 +标点符号 1 +x:1 +白日作梦 1 +x:1 +燠 1 +x:1 +低迷不振 1 +x:1 +缴费 1 +x:1 +自来水管 1 +x:1 +豪壮 1 +x:1 +了无 1 +x:1 +创作奖 1 +x:1 +展演 1 +x:1 +中央厅 1 +x:1 +持证 1 +x:1 +朝连岛 1 +x:1 +银票 1 +x:1 +棒棰岛 1 +x:1 +上算 1 +x:1 +基督 1 +x:1 +大姑儿 1 +x:1 +东辛房 1 +x:1 +租种 1 +x:1 +遣使 1 +x:1 +火膛 1 +x:1 +地税局 1 +x:1 +警纪 1 +x:1 +鸡笼 1 +x:1 +英花 1 +x:1 +香溪 1 +x:1 +筒子 1 +x:1 +岚光氤氲 1 +x:1 +邮费 1 +x:1 +代表部 1 +x:1 +谣言惑众 1 +x:1 +监察部 1 +x:1 +晚育率 1 +x:1 +蒸蒸日上 1 +x:1 +垂耷 1 +x:1 +好吃懒做 1 +x:1 +巨涌 1 +x:1 +霈 1 +x:1 +快活 1 +x:1 +工联 1 +x:1 +连带 1 +x:1 +癞蛤蟆 1 +x:1 +奖章 1 +x:1 +导纳 1 +x:1 +弄假成真 1 +x:1 +导线 1 +x:1 +举杯 1 +x:1 +松不得手 1 +x:1 +护齿素 1 +x:1 +骨脆性 1 +x:1 +侄孙女儿 1 +x:1 +激素 1 +x:1 +二进制 1 +x:1 +报警台 1 +x:1 +遮荫蔽日 1 +x:1 +恳请 1 +x:1 +息息相关 1 +x:1 +败也萧何 1 +x:1 +农一师 1 +x:1 +标签机 1 +x:1 +氢氰酸 1 +x:1 +家常便饭 1 +x:1 +蛋白质 1 +x:1 +雕栏玉砌 1 +x:1 +兑制 1 +x:1 +大荔县 1 +x:1 +吏 2 +x:2 +无核国家 1 +x:1 +日界线 1 +x:1 +河里 1 +x:1 +负分 1 +x:1 +乾坤 1 +x:1 +基石 1 +x:1 +照亮 1 +x:1 +香港 1 +x:1 +新人口论 1 +x:1 +草黄色 1 +x:1 +实时 1 +x:1 +菌苗 1 +x:1 +一哄而起 1 +x:1 +球面镜 1 +x:1 +拱跨径 1 +x:1 +圹 1 +x:1 +彭山 1 +x:1 +英航 1 +x:1 +巡演 1 +x:1 +聚珍版 1 +x:1 +湟水河 1 +x:1 +电功率 1 +x:1 +南宁 1 +x:1 +收费法 1 +x:1 +上策 1 +x:1 +哨响 1 +x:1 +南宋 1 +x:1 +南安 1 +x:1 +巨浪 1 +x:1 +上等 1 +x:1 +热功当量 1 +x:1 +枝杈 1 +x:1 +生产师 1 +x:1 +阿比托 1 +x:1 +苏铁林 1 +x:1 +到顶 1 +x:1 +实施 1 +x:1 +宇称 1 +x:1 +南宫 1 +x:1 +这方 1 +x:1 +花言巧语 1 +x:1 +枝条 1 +x:1 +冲绳岛 1 +x:1 +艺途 1 +x:1 +活性 1 +x:1 +巨流 1 +x:1 +火腿 1 +x:1 +创作室 1 +x:1 +黄花晚节 1 +x:1 +洗耳恭听 1 +x:1 +河道 1 +x:1 +拘禁 1 +x:1 +铁架子 1 +x:1 +台网 1 +x:1 +应聘人 1 +x:1 +登报 1 +x:1 +短斤缺两 1 +x:1 +叮当 1 +x:1 +指导性 1 +x:1 +账单子 1 +x:1 +逢集 1 +x:1 +细柳 1 +x:1 +橱窗 1 +x:1 +驼子 1 +x:1 +一股脑儿 1 +x:1 +菌草 1 +x:1 +北段 1 +x:1 +生理盐水 1 +x:1 +各显身手 1 +x:1 +新闻点 1 +x:1 +谷饶镇 1 +x:1 +竹筐 1 +x:1 +灰鹤 1 +x:1 +同一天 1 +x:1 +怕人 1 +x:1 +主殿 1 +x:1 +碎步 1 +x:1 +转氨酶 1 +x:1 +特警 1 +x:1 +子 125 +x:125 +糕 2 +x:2 +暖风 1 +x:1 +保险杯 1 +x:1 +供种量 1 +x:1 +保险杠 1 +x:1 +考古学系 1 +x:1 +兵权 1 +x:1 +月中 1 +x:1 +财文 1 +x:1 +计时员 1 +x:1 +新人新事 1 +x:1 +兑取 1 +x:1 +负号 1 +x:1 +侵权案 1 +x:1 +微瓦 1 +x:1 +洋洋万言 1 +x:1 +玉质 1 +x:1 +上端 1 +x:1 +又哭又闹 1 +x:1 +依稀可见 1 +x:1 +学到老 1 +x:1 +标吨 1 +x:1 +造诣 1 +x:1 +出手不凡 1 +x:1 +进攻方 1 +x:1 +市南区 1 +x:1 +业务厅 1 +x:1 +蝉蜕 1 +x:1 +纯净 1 +x:1 +特许 1 +x:1 +纯凝 1 +x:1 +检疫证 1 +x:1 +头昏脑涨 1 +x:1 +退堂鼓 1 +x:1 +特设 1 +x:1 +工致 1 +x:1 +绝命书 1 +x:1 +北欧 1 +x:1 +用户名 1 +x:1 +遣散费 1 +x:1 +抗日战争 1 +x:1 +紫葳 1 +x:1 +手术刀 1 +x:1 +坐骨神经 1 +x:1 +房改价 1 +x:1 +鸡窝 1 +x:1 +连忙 1 +x:1 +等量齐观 1 +x:1 +苇子 1 +x:1 +征服 1 +x:1 +动粗耍野 1 +x:1 +侨眷 1 +x:1 +欣赏课 1 +x:1 +砧骨 1 +x:1 +电报 1 +x:1 +主次 1 +x:1 +波士顿 1 +x:1 +财改 1 +x:1 +修鞋摊 1 +x:1 +拘票 1 +x:1 +保险柜 1 +x:1 +上空 1 +x:1 +蛮 17 +x:17 +橱 2 +x:2 +乾嘉 1 +x:1 +以防万一 1 +x:1 +葱白儿 1 +x:1 +银碗 1 +x:1 +日本海 1 +x:1 +小偷小摸 1 +x:1 +成果者 1 +x:1 +钉子 1 +x:1 +日记体 1 +x:1 +慷慨就义 1 +x:1 +颓 3 +x:3 +充实 1 +x:1 +东佃 1 +x:1 +绵羊 1 +x:1 +乱摊子 1 +x:1 +管治 1 +x:1 +同一年 1 +x:1 +整月 1 +x:1 +蜂窝式 1 +x:1 +海边 1 +x:1 +蓄水池 1 +x:1 +进攻战 1 +x:1 +笆斗 1 +x:1 +委以重任 1 +x:1 +库面 1 +x:1 +女性 1 +x:1 +北河 1 +x:1 +工程业 1 +x:1 +实据 1 +x:1 +愧于 1 +x:1 +启示力 1 +x:1 +管沟 1 +x:1 +造谣 1 +x:1 +登时 1 +x:1 +主治 1 +x:1 +推延 1 +x:1 +同舟共济 1 +x:1 +屏除 1 +x:1 +噌 4 +x:4 +地躺鞭 1 +x:1 +千姿百态 1 +x:1 +国际私法 1 +x:1 +依然故我 1 +x:1 +业务员 1 +x:1 +诡秘 1 +x:1 +海绵垫 1 +x:1 +西风东渐 1 +x:1 +做贼心虚 1 +x:1 +铆劲 1 +x:1 +争夺 1 +x:1 +三头六臂 1 +x:1 +快步 1 +x:1 +微珠 1 +x:1 +双高型 1 +x:1 +赤坂 1 +x:1 +武安市 1 +x:1 +进攻手 1 +x:1 +海运 1 +x:1 +裁判桌 1 +x:1 +指导权 1 +x:1 +难遂人意 1 +x:1 +茅 20 +x:20 +大放厥词 1 +x:1 +驼峰 1 +x:1 +第三国际 1 +x:1 +阜城 1 +x:1 +年租金 1 +x:1 +标号 1 +x:1 +代表院 1 +x:1 +监察院 1 +x:1 +南巡 1 +x:1 +言差语错 1 +x:1 +桔子 1 +x:1 +手工课 1 +x:1 +登攀 1 +x:1 +情笃意深 1 +x:1 +工农分子 1 +x:1 +玺 1 +x:1 +恰哈尔村 1 +x:1 +残货 1 +x:1 +屈原村 1 +x:1 +取法乎中 1 +x:1 +海轮 1 +x:1 +今儿个 1 +x:1 +垂手可得 1 +x:1 +蝉联 1 +x:1 +北汉 1 +x:1 +用户卡 1 +x:1 +必胜 1 +x:1 +争妍 1 +x:1 +北江 1 +x:1 +甬江 1 +x:1 +云居寺 1 +x:1 +烙饼 1 +x:1 +北极狐 1 +x:1 +倦怠 1 +x:1 +承做 1 +x:1 +内聚力 1 +x:1 +连声 1 +x:1 +胡张乡 1 +x:1 +结论性 1 +x:1 +招聘制 1 +x:1 +取法乎上 1 +x:1 +东侧 1 +x:1 +菠萝蜜叶 1 +x:1 +相辅相成 1 +x:1 +氢原子 1 +x:1 +北汽 1 +x:1 +晾 11 +x:11 +项目数 1 +x:1 +箭靶子 1 +x:1 +特质 1 +x:1 +芙蓉镇 1 +x:1 +鱼鳞松 1 +x:1 +连夜 1 +x:1 +经营额 1 +x:1 +竹管 1 +x:1 +丰实 1 +x:1 +电慰 1 +x:1 +写写 1 +x:1 +柔软 1 +x:1 +丰宁 1 +x:1 +民办教师 1 +x:1 +巧舌如簧 1 +x:1 +涛 340 +x:340 +过张乏弛 1 +x:1 +定向培育 1 +x:1 +梗概 1 +x:1 +香榭 1 +x:1 +绵纸 1 +x:1 +竹简 1 +x:1 +香榧 1 +x:1 +红方 1 +x:1 +鲁山 1 +x:1 +连天 1 +x:1 +索取 1 +x:1 +一览表 1 +x:1 +南山 1 +x:1 +东乡 1 +x:1 +咏叹调 1 +x:1 +仁政 1 +x:1 +胚胎学家 1 +x:1 +专力 1 +x:1 +殡工 1 +x:1 +视窗 1 +x:1 +魔高一丈 1 +x:1 +浅黄 1 +x:1 +脉络膜 1 +x:1 +中级 1 +x:1 +好莱坞 1 +x:1 +阳奉阴违 1 +x:1 +香槟 1 +x:1 +易爆物 1 +x:1 +呼吸器 1 +x:1 +仝 3 +x:3 +城工委 1 +x:1 +丰富 1 +x:1 +东三 1 +x:1 +探测室 1 +x:1 +秘而不宣 1 +x:1 +绵绸 1 +x:1 +朱桥镇 1 +x:1 +画院 1 +x:1 +庆典 1 +x:1 +东丽 1 +x:1 +东主 1 +x:1 +工蜂 1 +x:1 +走 3712 +x:3712 +杠子 1 +x:1 +檀板 1 +x:1 +水陆坦克 1 +x:1 +不懂装懂 1 +x:1 +租约 1 +x:1 +微型机 1 +x:1 +拉面 1 +x:1 +匠心独具 1 +x:1 +警种 1 +x:1 +实招 1 +x:1 +惺忪 1 +x:1 +淡妆浓抹 1 +x:1 +球虫药 1 +x:1 +鸡粪 1 +x:1 +北洋 1 +x:1 +图示 1 +x:1 +线毯 1 +x:1 +簇集 1 +x:1 +劲节 1 +x:1 +恳谈 1 +x:1 +实拍 1 +x:1 +邳苍 1 +x:1 +消防日 1 +x:1 +收奶车 1 +x:1 +传家宝 1 +x:1 +驳船 1 +x:1 +步进制 1 +x:1 +烂醉如泥 1 +x:1 +暂时 1 +x:1 +抬肩 1 +x:1 +经委会 1 +x:1 +火印 1 +x:1 +香椿 1 +x:1 +门坎 1 +x:1 +骨血 1 +x:1 +闻名遐尔 1 +x:1 +碾 4 +x:4 +天竺鼠 1 +x:1 +提花 1 +x:1 +性健康 1 +x:1 +广告学系 1 +x:1 +潇 1 +x:1 +斤两 1 +x:1 +团结 1 +x:1 +东亚 1 +x:1 +柏油路 1 +x:1 +基点 1 +x:1 +竹签 1 +x:1 +国民宫 1 +x:1 +东嘎村 1 +x:1 +短期化 1 +x:1 +鲜有 1 +x:1 +皑皑 1 +x:1 +第八屯 1 +x:1 +同一律 1 +x:1 +竹筏 1 +x:1 +食草动物 1 +x:1 +郡守 1 +x:1 +南岭 1 +x:1 +东人 1 +x:1 +承兑 1 +x:1 +油笔 1 +x:1 +北海 1 +x:1 +开发权 1 +x:1 +被采访人 1 +x:1 +东京 1 +x:1 +东亭 1 +x:1 +南岸 1 +x:1 +随葬品 1 +x:1 +李灶村 1 +x:1 +灯颈 1 +x:1 +隋 24 +x:24 +示波器 1 +x:1 +兵戎 1 +x:1 +兵戈 1 +x:1 +等于 1 +x:1 +残迹 1 +x:1 +旺起 1 +x:1 +食古不化 1 +x:1 +承办 1 +x:1 +标兵 1 +x:1 +剑龙 1 +x:1 +专著 1 +x:1 +中泗河村 1 +x:1 +傲 19 +x:19 +校领导 1 +x:1 +烟雨 1 +x:1 +倾销 1 +x:1 +垂落 1 +x:1 +查获记 1 +x:1 +基督教 1 +x:1 +争学 1 +x:1 +竞聘者 1 +x:1 +囿养 1 +x:1 +唐海 1 +x:1 +利益均沾 1 +x:1 +南开 1 +x:1 +海路 1 +x:1 +儿媳 1 +x:1 +疾首蹙额 1 +x:1 +叶黄素 1 +x:1 +爽性 1 +x:1 +前三合村 1 +x:1 +塔 95 +x:95 +改名 1 +x:1 +泛美 1 +x:1 +厄运 1 +x:1 +叶球 1 +x:1 +等份 1 +x:1 +安企部 1 +x:1 +等价 1 +x:1 +耸峙 1 +x:1 +上下水道 1 +x:1 +高速路 1 +x:1 +保险所 1 +x:1 +筒式 1 +x:1 +思南县 1 +x:1 +未名湖畔 1 +x:1 +海货 1 +x:1 +凤梧乡 1 +x:1 +承制 1 +x:1 +上编 1 +x:1 +仰韶文化 1 +x:1 +苇帘 1 +x:1 +自然免疫 1 +x:1 +标准 1 +x:1 +举措 1 +x:1 +越野赛跑 1 +x:1 +香樟 1 +x:1 +现下 1 +x:1 +袅绕 1 +x:1 +西洋画 1 +x:1 +吉萨省 1 +x:1 +一挥而就 1 +x:1 +主宰者 1 +x:1 +筐子 1 +x:1 +河闸 1 +x:1 +兴旺 1 +x:1 +上缴 1 +x:1 +历史戏 1 +x:1 +威尔士 1 +x:1 +河间 1 +x:1 +堂号 1 +x:1 +罕有 1 +x:1 +北极点 1 +x:1 +艰巨 1 +x:1 +逸民 1 +x:1 +爬桌 1 +x:1 +逸气 1 +x:1 +锭子油 1 +x:1 +蛀 5 +x:5 +扃 1 +x:1 +燃化部 1 +x:1 +关麓村 1 +x:1 +上网 1 +x:1 +新闻界 1 +x:1 +香橙 1 +x:1 +铁架床 1 +x:1 +送信儿 1 +x:1 +索债 1 +x:1 +凑热闹 1 +x:1 +气步枪 1 +x:1 +历史所 1 +x:1 +鸡翅 1 +x:1 +事理 1 +x:1 +二十六日 1 +x:1 +巽 1 +x:1 +文件名 1 +x:1 +七叶树 1 +x:1 +乌沙镇 1 +x:1 +香橼 1 +x:1 +桂山岛 1 +x:1 +支会 1 +x:1 +镇静药 1 +x:1 +设计业 1 +x:1 +开发方 1 +x:1 +剑麻 1 +x:1 +多样性 1 +x:1 +鲜艳度 1 +x:1 +阳江市 1 +x:1 +俊迈 1 +x:1 +检举信 1 +x:1 +京东 1 +x:1 +军礼 1 +x:1 +信德省 1 +x:1 +上线 1 +x:1 +缓刑期 1 +x:1 +水仙簪 1 +x:1 +捏合 1 +x:1 +基片 1 +x:1 +仁术 1 +x:1 +承压 1 +x:1 +拉锯 1 +x:1 +根指数 1 +x:1 +上级 1 +x:1 +电话费 1 +x:1 +兽中之王 1 +x:1 +储运费 1 +x:1 +系数 1 +x:1 +情 576 +x:576 +南市 1 +x:1 +星火带 1 +x:1 +嘤嘤 1 +x:1 +视碟 1 +x:1 +上坡路 1 +x:1 +保健局 1 +x:1 +导管 1 +x:1 +莆田县 1 +x:1 +京九 1 +x:1 +理论性 1 +x:1 +咸宁市 1 +x:1 +采油工 1 +x:1 +拉长 1 +x:1 +吃得消 1 +x:1 +承受 1 +x:1 +标值 1 +x:1 +存折 1 +x:1 +举手 1 +x:1 +凡尔 1 +x:1 +线手套 1 +x:1 +白宰鸡 1 +x:1 +问问答答 1 +x:1 +新历 1 +x:1 +爽意 1 +x:1 +甚至 1 +x:1 +女篮赛 1 +x:1 +临安市 1 +x:1 +无生命 1 +x:1 +北极熊 1 +x:1 +事略 1 +x:1 +粼粼 1 +x:1 +修辞 1 +x:1 +军事观 1 +x:1 +有机磷类 1 +x:1 +庆历 1 +x:1 +科学报 1 +x:1 +肚 14 +x:14 +举报 1 +x:1 +比绍城 1 +x:1 +张狂 1 +x:1 +冤 11 +x:11 +儿孙 1 +x:1 +只乐乡 1 +x:1 +警笛 1 +x:1 +儿子 1 +x:1 +单比例 1 +x:1 +主持国 1 +x:1 +特辑 1 +x:1 +承包 1 +x:1 +能多能少 1 +x:1 +尽 506 +x:506 +情感史 1 +x:1 +死不瞑目 1 +x:1 +海象 1 +x:1 +工薪 1 +x:1 +快棋 1 +x:1 +乡土气息 1 +x:1 +承印 1 +x:1 +事由 1 +x:1 +充塞 1 +x:1 +解放战争 1 +x:1 +可生物 1 +x:1 +海豹 1 +x:1 +倒休 1 +x:1 +遥 24 +x:24 +桌布 1 +x:1 +充填 1 +x:1 +主演 1 +x:1 +塞阿拉州 1 +x:1 +银粉 1 +x:1 +油菜王 1 +x:1 +绿衣使者 1 +x:1 +火葬 1 +x:1 +报警器 1 +x:1 +拉门 1 +x:1 +骗赔 1 +x:1 +甘苦与共 1 +x:1 +海豚 1 +x:1 +写卷 1 +x:1 +灯饰 1 +x:1 +丙磺舒 1 +x:1 +桌几 1 +x:1 +立意 1 +x:1 +事端 1 +x:1 +准保 1 +x:1 +苯乙烯 1 +x:1 +多事之秋 1 +x:1 +连同 1 +x:1 +乌石 1 +x:1 +巡游 1 +x:1 +油菜籽 1 +x:1 +一概而论 1 +x:1 +残臂 1 +x:1 +艰危 1 +x:1 +泻药 1 +x:1 +江陵 1 +x:1 +惠安县 1 +x:1 +保健医 1 +x:1 +南关 1 +x:1 +南共 1 +x:1 +仑吉 1 +x:1 +新厦 1 +x:1 +小康户 1 +x:1 +妇孺皆知 1 +x:1 +细沙 1 +x:1 +驳运 1 +x:1 +混合型 1 +x:1 +无假货 1 +x:1 +监测房 1 +x:1 +法桐 1 +x:1 +线春 1 +x:1 +采伐业 1 +x:1 +大公让 1 +x:1 +汲纳 1 +x:1 +江阴 1 +x:1 +军民共建 1 +x:1 +赏心性 1 +x:1 +戒毒所 1 +x:1 +特聘 1 +x:1 +财源 1 +x:1 +奶 60 +x:60 +赤字 1 +x:1 +海菜 1 +x:1 +快板 1 +x:1 +赤子 1 +x:1 +大姑子 1 +x:1 +标志 1 +x:1 +凡尔赛门 1 +x:1 +桉树林 1 +x:1 +泪花 1 +x:1 +隐君子 1 +x:1 +岳母 1 +x:1 +甘石桥 1 +x:1 +煽动 1 +x:1 +洋娃娃 1 +x:1 +长城人 1 +x:1 +江雾 1 +x:1 +跑官 1 +x:1 +秆子 1 +x:1 +雷神庙 1 +x:1 +探测器 1 +x:1 +杀虫药 1 +x:1 +托运房 1 +x:1 +爵士 1 +x:1 +便览 1 +x:1 +木莲桥 1 +x:1 +对立统一 1 +x:1 +上焦 1 +x:1 +罪责 1 +x:1 +庆岭 1 +x:1 +水性杨花 1 +x:1 +擦音 1 +x:1 +影影绰绰 1 +x:1 +造肥 1 +x:1 +兵法 1 +x:1 +风光一时 1 +x:1 +多雨区 1 +x:1 +歌鸫 1 +x:1 +成本会计 1 +x:1 +叶锈病 1 +x:1 +叮咚 1 +x:1 +叮咛 1 +x:1 +遏 2 +x:2 +慈溪市 1 +x:1 +护校 1 +x:1 +五彩池 1 +x:1 +宗旨 1 +x:1 +无形性 1 +x:1 +收获期 1 +x:1 +叮咬 1 +x:1 +火警 1 +x:1 +入手处 1 +x:1 +保险法 1 +x:1 +海草 1 +x:1 +菲 143 +x:143 +杵 1 +x:1 +驯顺 1 +x:1 +碌碌无为 1 +x:1 +叶窗 1 +x:1 +泰航 1 +x:1 +接机者 1 +x:1 +签字人 1 +x:1 +缉私队员 1 +x:1 +线板 1 +x:1 +强壮剂 1 +x:1 +采油厂 1 +x:1 +师生员工 1 +x:1 +考古界 1 +x:1 +业务处 1 +x:1 +下叔村 1 +x:1 +担架车 1 +x:1 +香料 1 +x:1 +桔园 1 +x:1 +大白话 1 +x:1 +校董会 1 +x:1 +骄奢祸程 1 +x:1 +便衣 1 +x:1 +线条 1 +x:1 +线束 1 +x:1 +盛极一时 1 +x:1 +中远途 1 +x:1 +倦 9 +x:9 +百花齐放 1 +x:1 +叶筋 1 +x:1 +银牌 1 +x:1 +线材 1 +x:1 +专家队 1 +x:1 +学科点 1 +x:1 +加拿大队 1 +x:1 +褐马鸡 1 +x:1 +大姑娘 1 +x:1 +乌盟 1 +x:1 +绝不为过 1 +x:1 +江面 1 +x:1 +便血 1 +x:1 +人造革 1 +x:1 +名缰利锁 1 +x:1 +诚惶诚恐 1 +x:1 +武安区 1 +x:1 +革新 1 +x:1 +一古脑儿 1 +x:1 +综治 1 +x:1 +微细 1 +x:1 +收费权 1 +x:1 +伍家 1 +x:1 +吸收式 1 +x:1 +泥牛入海 1 +x:1 +解困金 1 +x:1 +丰城 1 +x:1 +调资费 1 +x:1 +练法 1 +x:1 +宝元队 1 +x:1 +不屈不挠 1 +x:1 +万全之策 1 +x:1 +篡逆 1 +x:1 +支气管 1 +x:1 +仙女 1 +x:1 +争吵 1 +x:1 +细润 1 +x:1 +四五年 1 +x:1 +幺 1 +x:1 +矿 137 +x:137 +灯会 1 +x:1 +甚为可惜 1 +x:1 +愣是 1 +x:1 +嘉勉 1 +x:1 +粮棉 1 +x:1 +御手 1 +x:1 +缝隙 1 +x:1 +海航 1 +x:1 +细流 1 +x:1 +警用 1 +x:1 +骨董 1 +x:1 +工号 1 +x:1 +海船 1 +x:1 +铁蹄 1 +x:1 +专诚 1 +x:1 +巨星 1 +x:1 +玉蟾 1 +x:1 +神田区 1 +x:1 +核辐射 1 +x:1 +银狐 1 +x:1 +残联 1 +x:1 +便装 1 +x:1 +免疫力 1 +x:1 +新闻稿 1 +x:1 +专论 1 +x:1 +标底 1 +x:1 +抢修员 1 +x:1 +专访 1 +x:1 +准东 1 +x:1 +清癯 1 +x:1 +庆州 1 +x:1 +图书业 1 +x:1 +原本 1 +x:1 +政治史 1 +x:1 +十传百 1 +x:1 +旅交会 1 +x:1 +信贷资金 1 +x:1 +倒班制 1 +x:1 +垂询 1 +x:1 +细活 1 +x:1 +做主 1 +x:1 +途经 1 +x:1 +启示录 1 +x:1 +文字狱 1 +x:1 +上火 1 +x:1 +紫外线 1 +x:1 +警界 1 +x:1 +香喷喷 1 +x:1 +毁约率 1 +x:1 +管护 1 +x:1 +长三丙 1 +x:1 +手术室 1 +x:1 +. 6 +x:6 +桌号 1 +x:1 +此路不通 1 +x:1 +实测 1 +x:1 +万里无云 1 +x:1 +梗 7 +x:7 +工行 1 +x:1 +没齿难忘 1 +x:1 +微电子学 1 +x:1 +提赔 1 +x:1 +跑外 1 +x:1 +唪 1 +x:1 +驱逐令 1 +x:1 +实证主义 1 +x:1 +肄业生 1 +x:1 +快攻 1 +x:1 +逼良为娼 1 +x:1 +苍山县 1 +x:1 +创作力 1 +x:1 +毁 165 +x:165 +承建 1 +x:1 +长三乙 1 +x:1 +光天化日 1 +x:1 +黄豆角 1 +x:1 +南北 1 +x:1 +厦门队 1 +x:1 +酒 441 +x:441 +提货 1 +x:1 +鲁北 1 +x:1 +恣意 1 +x:1 +特色 1 +x:1 +声情并茂 1 +x:1 +寡 10 +x:10 +警监 1 +x:1 +缺劳户 1 +x:1 +庆幸 1 +x:1 +衬 8 +x:8 +郡吏 1 +x:1 +西段屯村 1 +x:1 +上班 1 +x:1 +理性认识 1 +x:1 +乳臭 1 +x:1 +叮嘱 1 +x:1 +南区 1 +x:1 +直统统 1 +x:1 +江铜 1 +x:1 +庆应 1 +x:1 +盖世 1 +x:1 +千虑一得 1 +x:1 +境遇 1 +x:1 +兵源 1 +x:1 +小 3834 +x:3834 +共和国宫 1 +x:1 +东中西部 1 +x:1 +免缴 1 +x:1 +慌神儿 1 +x:1 +桐乡 1 +x:1 +管户 1 +x:1 +研讨性 1 +x:1 +工业体系 1 +x:1 +视界 1 +x:1 +飞车 1 +x:1 +主打 1 +x:1 +心驰神往 1 +x:1 +南口 1 +x:1 +工装 1 +x:1 +贼星 1 +x:1 +势不可当 1 +x:1 +南召 1 +x:1 +钻空子 1 +x:1 +弹 63 +x:63 +罩袍 1 +x:1 +新闻社 1 +x:1 +患得患失 1 +x:1 +惨无人道 1 +x:1 +山冈子 1 +x:1 +卸甲庄村 1 +x:1 +生不逢时 1 +x:1 +黑黑压压 1 +x:1 +总会屋 1 +x:1 +钟表 1 +x:1 +咖啡茶 1 +x:1 +廉江市 1 +x:1 +照片集 1 +x:1 +特屈儿 1 +x:1 +体验型 1 +x:1 +计时工 1 +x:1 +以其昏昏 1 +x:1 +柔肠 1 +x:1 +乳腺 1 +x:1 +泊机位 1 +x:1 +驯马 1 +x:1 +南厢 1 +x:1 +莆田市 1 +x:1 +一百 1 +x:1 +考古学界 1 +x:1 +花环 1 +x:1 +南县 1 +x:1 +千差万别 1 +x:1 +清清亮亮 1 +x:1 +翘首以待 1 +x:1 +明火执杖 1 +x:1 +仪器厂 1 +x:1 +管控 1 +x:1 +瓣瓣 1 +x:1 +今生今世 1 +x:1 +生父母 1 +x:1 +特茹 1 +x:1 +委罪 1 +x:1 +基金部 1 +x:1 +微粒 1 +x:1 +北控 1 +x:1 +千百万 1 +x:1 +连场 1 +x:1 +浙西区 1 +x:1 +投笔从戎 1 +x:1 +室内乐 1 +x:1 +图卢兹 1 +x:1 +军种 1 +x:1 +震荡 1 +x:1 +非法定 1 +x:1 +卡库马 1 +x:1 +敬祖台 1 +x:1 +特药 1 +x:1 +牛鼎烹鸡 1 +x:1 +云豆 1 +x:1 +三岔口 1 +x:1 +二 2793 +x:2793 +海蜇头 1 +x:1 +香柚 1 +x:1 +主控 1 +x:1 +相映成辉 1 +x:1 +元延三年 1 +x:1 +蹲守 1 +x:1 +竞争性 1 +x:1 +春姑娘 1 +x:1 +巨擘 1 +x:1 +血迹 1 +x:1 +浅部 1 +x:1 +头昏 1 +x:1 +智残者 1 +x:1 +标尺 1 +x:1 +晕染 1 +x:1 +爽洁 1 +x:1 +火剪 1 +x:1 +柔脆 1 +x:1 +爽洌 1 +x:1 +撸子 1 +x:1 +英语 1 +x:1 +方法论 1 +x:1 +澄江县 1 +x:1 +万盛 1 +x:1 +桔味 1 +x:1 +保温杯 1 +x:1 +缝针 1 +x:1 +泪膜 1 +x:1 +工人运动 1 +x:1 +电信业 1 +x:1 +仆役 1 +x:1 +灵武市 1 +x:1 +静止 1 +x:1 +雷山村 1 +x:1 +错落有致 1 +x:1 +领口 1 +x:1 +菜窖 1 +x:1 +集装箱 1 +x:1 +厚厚实实 1 +x:1 +油橄榄 1 +x:1 +河沙 1 +x:1 +戈矛 1 +x:1 +陷入 1 +x:1 +贾夫纳 1 +x:1 +飞将军 1 +x:1 +耸入 1 +x:1 +上牌 1 +x:1 +实沉 1 +x:1 +基线 1 +x:1 +连城 1 +x:1 +农工商业 1 +x:1 +扑打 1 +x:1 +烟鬼 1 +x:1 +湍流 1 +x:1 +亚硫酐 1 +x:1 +承当 1 +x:1 +而立 1 +x:1 +赤壁 1 +x:1 +主持 1 +x:1 +特菜 1 +x:1 +收费日 1 +x:1 +微米 1 +x:1 +走门串户 1 +x:1 +丰富化 1 +x:1 +药贴 1 +x:1 +充压 1 +x:1 +烧瓶 1 +x:1 +四则运算 1 +x:1 +五子棋 1 +x:1 +丰功 1 +x:1 +夜班车 1 +x:1 +育龄 1 +x:1 +介休市 1 +x:1 +毫无道理 1 +x:1 +感染症 1 +x:1 +齐白石 1 +x:1 +导热 1 +x:1 +肺泡液 1 +x:1 +海螺 1 +x:1 +保有率 1 +x:1 +火辣 1 +x:1 +示意 1 +x:1 +壮阔 1 +x:1 +危崖 1 +x:1 +千虑一失 1 +x:1 +驼员 1 +x:1 +唐朝 1 +x:1 +误导性 1 +x:1 +年事已高 1 +x:1 +翻天复地 1 +x:1 +奎塔 1 +x:1 +宁官屯 1 +x:1 +势 112 +x:112 +朱寨镇 1 +x:1 +新莱昂 1 +x:1 +词藻 1 +x:1 +复制件 1 +x:1 +囿养地 1 +x:1 +复名数 1 +x:1 +发明人 1 +x:1 +嘴里 1 +x:1 +治安员 1 +x:1 +海蟹 1 +x:1 +折叠伞 1 +x:1 +造物主 1 +x:1 +骨膜 1 +x:1 +畦 5 +x:5 +这次 1 +x:1 +朽 5 +x:5 +吸储揽存 1 +x:1 +反对票 1 +x:1 +想 2414 +x:2414 +快捷 1 +x:1 +五彩棉 1 +x:1 +德能勤绩 1 +x:1 +联络会 1 +x:1 +免租 1 +x:1 +指战员 1 +x:1 +超历史 1 +x:1 +皮件 1 +x:1 +桢楠树 1 +x:1 +皮下 1 +x:1 +提请 1 +x:1 +铁面无私 1 +x:1 +总结性 1 +x:1 +总状花序 1 +x:1 +便路 1 +x:1 +棕榈油 1 +x:1 +微笛 1 +x:1 +微笑 1 +x:1 +鸣不平 1 +x:1 +摩登舞 1 +x:1 +保健型 1 +x:1 +银矿 1 +x:1 +海蜇 1 +x:1 +敲钟人 1 +x:1 +八面风 1 +x:1 +鸡犬不宁 1 +x:1 +罗牛山 1 +x:1 +离合悲欢 1 +x:1 +冰雕玉琢 1 +x:1 +海蜒 1 +x:1 +气锅鸡 1 +x:1 +浅露 1 +x:1 +彝海结盟 1 +x:1 +深入浅出 1 +x:1 +免票 1 +x:1 +入门处 1 +x:1 +地质师 1 +x:1 +斥 14 +x:14 +疑难 1 +x:1 +提议 1 +x:1 +衣冠楚楚 1 +x:1 +警灯 1 +x:1 +扑救 1 +x:1 +西瓜节 1 +x:1 +火车 1 +x:1 +纯度 1 +x:1 +赤心 1 +x:1 +竹片 1 +x:1 +搅拌机 1 +x:1 +杀一儆百 1 +x:1 +福兴寺 1 +x:1 +独具一格 1 +x:1 +死而复生 1 +x:1 +争冠 1 +x:1 +英豪 1 +x:1 +争做 1 +x:1 +音响效果 1 +x:1 +渺茫 1 +x:1 +丰厚 1 +x:1 +唇齿相依 1 +x:1 +骨胶 1 +x:1 +北斗 1 +x:1 +异曲同工 1 +x:1 +如誓如约 1 +x:1 +沈 313 +x:313 +斛 2 +x:2 +主旨 1 +x:1 +蜜 10 +x:10 +线损 1 +x:1 +阜平 1 +x:1 +海蚀 1 +x:1 +绞尽脑汁 1 +x:1 +末端 1 +x:1 +丰县 1 +x:1 +天元赛 1 +x:1 +计次制 1 +x:1 +田产 1 +x:1 +蒙难 1 +x:1 +喻 42 +x:42 +孟良崮 1 +x:1 +奥勒松 1 +x:1 +北方 1 +x:1 +贩毒点 1 +x:1 +迟钝 1 +x:1 +钢帘线 1 +x:1 +快手 1 +x:1 +兴渔 1 +x:1 +乏煤 1 +x:1 +滴水不漏 1 +x:1 +南向 1 +x:1 +仆妇 1 +x:1 +达马托 1 +x:1 +小康村 1 +x:1 +门坎儿 1 +x:1 +基本法 1 +x:1 +丰台 1 +x:1 +脑积水 1 +x:1 +向壁虚构 1 +x:1 +北无 1 +x:1 +艺龄 1 +x:1 +海蛎 1 +x:1 +花溪区 1 +x:1 +骨肉 1 +x:1 +玉茭 1 +x:1 +档案法 1 +x:1 +形式各异 1 +x:1 +刽子手 1 +x:1 +屈原滩 1 +x:1 +真真假假 1 +x:1 +悦人耳目 1 +x:1 +连接线 1 +x:1 +静流 1 +x:1 +充分 1 +x:1 +必要 1 +x:1 +己队 1 +x:1 +田七 1 +x:1 +老丈人 1 +x:1 +仲裁业 1 +x:1 +瑞金市 1 +x:1 +悦目性 1 +x:1 +歌魂 1 +x:1 +快报 1 +x:1 +分系统 1 +x:1 +田主 1 +x:1 +主教 1 +x:1 +可维修性 1 +x:1 +钟厂 1 +x:1 +江苏厅 1 +x:1 +莽莽 1 +x:1 +使眼色 1 +x:1 +崔马镇 1 +x:1 +其实难副 1 +x:1 +航海灯 1 +x:1 +锻 1 +x:1 +默克莱 1 +x:1 +静海 1 +x:1 +韵部 1 +x:1 +侨社 1 +x:1 +评 234 +x:234 +希腊式 1 +x:1 +主攻 1 +x:1 +此消彼长 1 +x:1 +主政 1 +x:1 +子承父业 1 +x:1 +冲绳县 1 +x:1 +跑腿 1 +x:1 +灰姑娘 1 +x:1 +海虾 1 +x:1 +春蕾班 1 +x:1 +四部丛刊 1 +x:1 +火奴鲁鲁 1 +x:1 +阜康 1 +x:1 +为数众多 1 +x:1 +会道门 1 +x:1 +专辑 1 +x:1 +愿意 1 +x:1 +巨手 1 +x:1 +混合制 1 +x:1 +修订案 1 +x:1 +枝桠 1 +x:1 +陷坑 1 +x:1 +止推阀 1 +x:1 +管教 1 +x:1 +揭幕式 1 +x:1 +和平谈判 1 +x:1 +南坎 1 +x:1 +美味可口 1 +x:1 +快意 1 +x:1 +快言快语 1 +x:1 +墨竹 1 +x:1 +〔 35 +x:35 +充军 1 +x:1 +鹰洋 1 +x:1 +便车 1 +x:1 +叶类 1 +x:1 +警犬 1 +x:1 +鸡眼 1 +x:1 +研制厂 1 +x:1 +虔诚 1 +x:1 +暗中 1 +x:1 +南坪 1 +x:1 +男低音 1 +x:1 +中央局 1 +x:1 +砖石塔 1 +x:1 +玫瑰园 1 +x:1 +复员退伍 1 +x:1 +赂 1 +x:1 +跑方员 1 +x:1 +营养钵 1 +x:1 +失业 1 +x:1 +测量 1 +x:1 +联材字 1 +x:1 +现行犯 1 +x:1 +闹翻 1 +x:1 +卡诺州 1 +x:1 +线性 1 +x:1 +举止 1 +x:1 +海藻 1 +x:1 +举步 1 +x:1 +碧萝春 1 +x:1 +捞 70 +x:70 +快慢 1 +x:1 +课业 1 +x:1 +药水 1 +x:1 +歌颂 1 +x:1 +开发法 1 +x:1 +朝气蓬勃 1 +x:1 +负担卡 1 +x:1 +路线图 1 +x:1 +系统性 1 +x:1 +俯冲 1 +x:1 +赞曰 1 +x:1 +快慰 1 +x:1 +传销商品 1 +x:1 +著作史 1 +x:1 +倒下 1 +x:1 +北昆 1 +x:1 +无条者 1 +x:1 +岳阳楼 1 +x:1 +南城 1 +x:1 +西戎村 1 +x:1 +争取 1 +x:1 +租界 1 +x:1 +一路风尘 1 +x:1 +幸存者 1 +x:1 +北约克区 1 +x:1 +排中律 1 +x:1 +主景 1 +x:1 +课以 1 +x:1 +热血 1 +x:1 +江都 1 +x:1 +业务庭 1 +x:1 +黑绿黑绿 1 +x:1 +悲痛欲绝 1 +x:1 +防锈 1 +x:1 +军火商 1 +x:1 +聘任制 1 +x:1 +一无所有 1 +x:1 +连动 1 +x:1 +鹅掌楸 1 +x:1 +甚广 1 +x:1 +官庄村 1 +x:1 +葛洲坝 1 +x:1 +富商 1 +x:1 +现金 1 +x:1 +夺关斩将 1 +x:1 +财校 1 +x:1 +鄂伦春 1 +x:1 +充充 1 +x:1 +迫不及待 1 +x:1 +住舍 1 +x:1 +慧眼独具 1 +x:1 +钢花呢 1 +x:1 +失事 1 +x:1 +免签 1 +x:1 +新日铁 1 +x:1 +握手言和 1 +x:1 +充公 1 +x:1 +味道儿 1 +x:1 +柳行镇 1 +x:1 +新市村 1 +x:1 +大摇大摆 1 +x:1 +孜孜追求 1 +x:1 +回绝 1 +x:1 +主星 1 +x:1 +宫腔镜检 1 +x:1 +传为佳话 1 +x:1 +民生主义 1 +x:1 +提要 1 +x:1 +租用 1 +x:1 +解甲归田 1 +x:1 +碎末 1 +x:1 +验印 1 +x:1 +北极 1 +x:1 +南昌起义 1 +x:1 +细毛 1 +x:1 +溯流 1 +x:1 +税 313 +x:313 +写实 1 +x:1 +屡禁不绝 1 +x:1 +北枝 1 +x:1 +高度化 1 +x:1 +课余 1 +x:1 +索姆 1 +x:1 +暗伤 1 +x:1 +其他人 1 +x:1 +河鱼 1 +x:1 +工资 1 +x:1 +国民党 1 +x:1 +直销点 1 +x:1 +硼镁石 1 +x:1 +础石 1 +x:1 +憾事 1 +x:1 +管林 1 +x:1 +激灵 1 +x:1 +对夹式 1 +x:1 +万物 1 +x:1 +写家 1 +x:1 +狗皮膏药 1 +x:1 +这栋 1 +x:1 +曼德拉 1 +x:1 +巴拿马 1 +x:1 +顺服 1 +x:1 +着眼点 1 +x:1 +管柱 1 +x:1 +工贼 1 +x:1 +明知故问 1 +x:1 +到此为止 1 +x:1 +工贸 1 +x:1 +买者 1 +x:1 +专责 1 +x:1 +经得起 1 +x:1 +烟龄 1 +x:1 +甚微 1 +x:1 +银球 1 +x:1 +上相 1 +x:1 +邮轮 1 +x:1 +搁置不前 1 +x:1 +视点 1 +x:1 +奇货可居 1 +x:1 +朱顶雀 1 +x:1 +主枝 1 +x:1 +眼压 1 +x:1 +失传 1 +x:1 +一体机 1 +x:1 +毫不留情 1 +x:1 +政治账 1 +x:1 +骨节 1 +x:1 +新闻系 1 +x:1 +海蓝 1 +x:1 +在理 1 +x:1 +汤罐 1 +x:1 +饲料稻 1 +x:1 +布点网 1 +x:1 +无行李 1 +x:1 +弋 1 +x:1 +五子歌 1 +x:1 +主板 1 +x:1 +鸡皮 1 +x:1 +核动力 1 +x:1 +接生率 1 +x:1 +邮车 1 +x:1 +隘 1 +x:1 +其乐融融 1 +x:1 +庆安 1 +x:1 +北朝 1 +x:1 +表现者 1 +x:1 +上瘾 1 +x:1 +研究室 1 +x:1 +夏时制 1 +x:1 +南团 1 +x:1 +陕北 1 +x:1 +免税 1 +x:1 +凡响 1 +x:1 +谢世 1 +x:1 +失信 1 +x:1 +基站 1 +x:1 +垂足 1 +x:1 +产量比 1 +x:1 +南国 1 +x:1 +保卫处 1 +x:1 +三元杂交 1 +x:1 +失修 1 +x:1 +官渡区 1 +x:1 +半渡击 1 +x:1 +确乎 1 +x:1 +读卡机 1 +x:1 +碱业 1 +x:1 +义诊 1 +x:1 +蒙巴萨 1 +x:1 +海葵 1 +x:1 +拘留 1 +x:1 +保健品 1 +x:1 +坐蔸 1 +x:1 +参与率 1 +x:1 +饱经 1 +x:1 +委管 1 +x:1 +田集乡 1 +x:1 +光明磊落 1 +x:1 +奎宁 1 +x:1 +连史 1 +x:1 +鲜活 1 +x:1 +增加额 1 +x:1 +探险队 1 +x:1 +体体面面 1 +x:1 +帮贫济困 1 +x:1 +稳中有降 1 +x:1 +荧光屏 1 +x:1 +管束 1 +x:1 +香粉 1 +x:1 +竹溪 1 +x:1 +应承 1 +x:1 +星细胞 1 +x:1 +侵染 1 +x:1 +北极星 1 +x:1 +松嫩 1 +x:1 +桩板墙 1 +x:1 +团年饭 1 +x:1 +红外光 1 +x:1 +有眉目 1 +x:1 +基数 1 +x:1 +反常 1 +x:1 +年轻化 1 +x:1 +满意车 1 +x:1 +细瓷 1 +x:1 +拙词 1 +x:1 +看摊 1 +x:1 +探测仪 1 +x:1 +河药 1 +x:1 +丰产 1 +x:1 +闰日 1 +x:1 +反帝 1 +x:1 +藕粉 1 +x:1 +香粳 1 +x:1 +难割难舍 1 +x:1 +讽 2 +x:2 +艺苑 1 +x:1 +碎砖 1 +x:1 +设计奖 1 +x:1 +菱形块 1 +x:1 +相继 1 +x:1 +祷念 1 +x:1 +有人 1 +x:1 +擦车 1 +x:1 +南柯一梦 1 +x:1 +郡主 1 +x:1 +化粪池 1 +x:1 +下课铃 1 +x:1 +匹马当先 1 +x:1 +胡力斯台 1 +x:1 +主碑 1 +x:1 +北平市 1 +x:1 +蒙语 1 +x:1 +好心人 1 +x:1 +端端正正 1 +x:1 +龙王潭 1 +x:1 +交通税 1 +x:1 +惩 11 +x:11 +梨园戏 1 +x:1 +整鞍备马 1 +x:1 +宿迁 1 +x:1 +担架队 1 +x:1 +浅说 1 +x:1 +跨过 1 +x:1 +巨翅 1 +x:1 +爽直 1 +x:1 +大放异彩 1 +x:1 +微服 1 +x:1 +娇 13 +x:13 +琉璃厂 1 +x:1 +评先树优 1 +x:1 +万象更新 1 +x:1 +乌托邦 1 +x:1 +免收 1 +x:1 +墙缝 1 +x:1 +钢研所 1 +x:1 +混合体 1 +x:1 +荒谬绝伦 1 +x:1 +过家家 1 +x:1 +侵权 1 +x:1 +骨密度 1 +x:1 +警民 1 +x:1 +微末 1 +x:1 +新衣 1 +x:1 +黄帝庙 1 +x:1 +东寺 1 +x:1 +秋后 1 +x:1 +妖言惑众 1 +x:1 +反应 1 +x:1 +微机 1 +x:1 +女低音 1 +x:1 +品牌战 1 +x:1 +交通站 1 +x:1 +签字国 1 +x:1 +狗崽子 1 +x:1 +龙骧虎步 1 +x:1 +细琐 1 +x:1 +政出多门 1 +x:1 +涸辙之鲋 1 +x:1 +异邦 1 +x:1 +兜里 1 +x:1 +末期 1 +x:1 +田协 1 +x:1 +倍场 1 +x:1 +东家 1 +x:1 +日K线图 1 +x:1 +海魂 1 +x:1 +白唇鹿 1 +x:1 +完整 1 +x:1 +明久乡 1 +x:1 +震颤 1 +x:1 +笛箫埙 1 +x:1 +香米 1 +x:1 +东宫 1 +x:1 +航海法 1 +x:1 +元鱼 1 +x:1 +反弹 1 +x:1 +股骨颈 1 +x:1 +暴力 1 +x:1 +主科 1 +x:1 +精品化 1 +x:1 +皓首穷经 1 +x:1 +轴对称 1 +x:1 +便道 1 +x:1 +到访 1 +x:1 +墙纸 1 +x:1 +项目点 1 +x:1 +预备 1 +x:1 +天蝎座 1 +x:1 +动态化 1 +x:1 +提防 1 +x:1 +筹备组 1 +x:1 +人造磁铁 1 +x:1 +增压泵 1 +x:1 +万民 1 +x:1 +通统 1 +x:1 +工程学 1 +x:1 +收购站 1 +x:1 +拍 253 +x:253 +愧对 1 +x:1 +上吐下泻 1 +x:1 +管路 1 +x:1 +上棉 1 +x:1 +镜屏 1 +x:1 +森木绿 1 +x:1 +英里 1 +x:1 +农田水利 1 +x:1 +漳河 1 +x:1 +法医院 1 +x:1 +器械体操 1 +x:1 +保险界 1 +x:1 +充任 1 +x:1 +线缆 1 +x:1 +唾 1 +x:1 +巨细 1 +x:1 +呼号 1 +x:1 +抓饭 1 +x:1 +工程室 1 +x:1 +购机费 1 +x:1 +土腥味 1 +x:1 +实益 1 +x:1 +金针虫 1 +x:1 +呼叫 1 +x:1 +终评 1 +x:1 +春 323 +x:323 +皮匠 1 +x:1 +中游 1 +x:1 +感受 1 +x:1 +漱口 1 +x:1 +唐突 1 +x:1 +山坡坡 1 +x:1 +导流 1 +x:1 +现身 1 +x:1 +快纸 1 +x:1 +上校 1 +x:1 +特首 1 +x:1 +详述 1 +x:1 +狸猫 1 +x:1 +耄耋老人 1 +x:1 +兵痞 1 +x:1 +凹面镜 1 +x:1 +哨长 1 +x:1 +委方 1 +x:1 +益智性 1 +x:1 +鼠窃狗偷 1 +x:1 +海马 1 +x:1 +等奖 1 +x:1 +上桌 1 +x:1 +汤杯赛 1 +x:1 +利益观 1 +x:1 +蚁蚕 1 +x:1 +返 73 +x:73 +南 873 +x:873 +苦口婆心 1 +x:1 +按质论价 1 +x:1 +寓所 1 +x:1 +山坡地 1 +x:1 +江边 1 +x:1 +吹风 1 +x:1 +相纸 1 +x:1 +胶 17 +x:17 +摹 2 +x:2 +鸵鸟场 1 +x:1 +购书卡 1 +x:1 +乳香 1 +x:1 +激流 1 +x:1 +柔顺 1 +x:1 +江豚 1 +x:1 +婚丧嫁娶 1 +x:1 +紊 1 +x:1 +左撇子 1 +x:1 +服装部 1 +x:1 +狠劲 1 +x:1 +借读 1 +x:1 +喷泉 1 +x:1 +捧杯 1 +x:1 +地窖 1 +x:1 +意趣 1 +x:1 +大黄山市 1 +x:1 +反射 1 +x:1 +末日 1 +x:1 +嘴边 1 +x:1 +激浪 1 +x:1 +展销 1 +x:1 +失魂落魄 1 +x:1 +平安队 1 +x:1 +跨越 1 +x:1 +香纸 1 +x:1 +直拉 1 +x:1 +张村 1 +x:1 +一下 1 +x:1 +现货 1 +x:1 +蔑视 1 +x:1 +详谈 1 +x:1 +九狮苑 1 +x:1 +管家婆 1 +x:1 +基材 1 +x:1 +礼服呢 1 +x:1 +细目 1 +x:1 +基本 1 +x:1 +清肺利胆 1 +x:1 +特马 1 +x:1 +蝴蝶花 1 +x:1 +指挥舱 1 +x:1 +管端 1 +x:1 +己见 1 +x:1 +临港型 1 +x:1 +侧重点 1 +x:1 +碱厂 1 +x:1 +失分 1 +x:1 +电动力学 1 +x:1 +迈开 1 +x:1 +开发热 1 +x:1 +北站 1 +x:1 +亏损声 1 +x:1 +东夷 1 +x:1 +东头 1 +x:1 +交会处 1 +x:1 +跨距 1 +x:1 +北端 1 +x:1 +涨价率 1 +x:1 +悠悠扬扬 1 +x:1 +烟花 1 +x:1 +实用 1 +x:1 +东大 1 +x:1 +基期 1 +x:1 +失利 1 +x:1 +激活 1 +x:1 +博德鲁姆 1 +x:1 +借贷国 1 +x:1 +香豆素 1 +x:1 +管弦乐队 1 +x:1 +一身是胆 1 +x:1 +连云 1 +x:1 +双特生 1 +x:1 +委曲 1 +x:1 +如饥似渴 1 +x:1 +乌海 1 +x:1 +灯谜 1 +x:1 +稿酬 1 +x:1 +空袭日 1 +x:1 +提问 1 +x:1 +京官 1 +x:1 +实症 1 +x:1 +静物 1 +x:1 +上款 1 +x:1 +设计家 1 +x:1 +泰顺 1 +x:1 +亨 2 +x:2 +细白 1 +x:1 +吃闭门羹 1 +x:1 +碱卤 1 +x:1 +设计室 1 +x:1 +珠泪盈眶 1 +x:1 +政治部 1 +x:1 +厉行节俭 1 +x:1 +胡兰镇 1 +x:1 +月泉 1 +x:1 +从早到晚 1 +x:1 +贵义重利 1 +x:1 +容纳量 1 +x:1 +劳动法 1 +x:1 +碱化 1 +x:1 +导游 1 +x:1 +连介 1 +x:1 +杯赛 1 +x:1 +紫萍 1 +x:1 +成人组 1 +x:1 +斤头 1 +x:1 +荡 20 +x:20 +寻寻觅觅 1 +x:1 +事态 1 +x:1 +下中农 1 +x:1 +党纪 1 +x:1 +拜泉县 1 +x:1 +基极 1 +x:1 +失势 1 +x:1 +走私者 1 +x:1 +回车 1 +x:1 +南澳岛 1 +x:1 +蛋白胨 1 +x:1 +谷城县 1 +x:1 +摆架子 1 +x:1 +管管 1 +x:1 +谈天说地 1 +x:1 +婵娟 1 +x:1 +呼兰 1 +x:1 +照顾 1 +x:1 +农发所 1 +x:1 +簇聚 1 +x:1 +东塘 1 +x:1 +分线盒 1 +x:1 +疑念 1 +x:1 +姜家泊 1 +x:1 +预谋 1 +x:1 +从军记 1 +x:1 +走形 1 +x:1 +国计民生 1 +x:1 +失却 1 +x:1 +赶跑 1 +x:1 +工程处 1 +x:1 +育肥 1 +x:1 +在案 1 +x:1 +保护关税 1 +x:1 +劳动路 1 +x:1 +云岫庵 1 +x:1 +问好 1 +x:1 +无的放失 1 +x:1 +连作 1 +x:1 +线材厂 1 +x:1 +哨音 1 +x:1 +连体 1 +x:1 +有教无类 1 +x:1 +五彩石 1 +x:1 +假面具 1 +x:1 +主管 1 +x:1 +火药枪 1 +x:1 +法 889 +x:889 +豪宅 1 +x:1 +银根 1 +x:1 +残骸 1 +x:1 +线索 1 +x:1 +一霎时 1 +x:1 +沙丁鱼 1 +x:1 +囊肿 1 +x:1 +镜平 1 +x:1 +匪军 1 +x:1 +海风 1 +x:1 +逸秀 1 +x:1 +华清池 1 +x:1 +克什若瓦 1 +x:1 +克里雅河 1 +x:1 +捎脚 1 +x:1 +现象 1 +x:1 +锆包壳 1 +x:1 +参考系 1 +x:1 +工程奖 1 +x:1 +药品量 1 +x:1 +灭绝人性 1 +x:1 +组诛 1 +x:1 +直属 1 +x:1 +科教文卫 1 +x:1 +匪兵 1 +x:1 +馋猫子 1 +x:1 +均安镇 1 +x:1 +马驹桥 1 +x:1 +秋地 1 +x:1 +田湖镇 1 +x:1 +南沱镇 1 +x:1 +耶市 1 +x:1 +火速 1 +x:1 +死顽固 1 +x:1 +墙报 1 +x:1 +法学会 1 +x:1 +新闻性 1 +x:1 +闹戏 1 +x:1 +却 3158 +x:3158 +财界 1 +x:1 +特点 1 +x:1 +攀岩 1 +x:1 +倭 1 +x:1 +充气式 1 +x:1 +交通科 1 +x:1 +皮儿 1 +x:1 +乌江 1 +x:1 +吐儿齐 1 +x:1 +草房子 1 +x:1 +求贤若渴 1 +x:1 +泰餐 1 +x:1 +浴具 1 +x:1 +烟草局 1 +x:1 +以色列籍 1 +x:1 +反差 1 +x:1 +职代会 1 +x:1 +举目 1 +x:1 +裸露 1 +x:1 +直射 1 +x:1 +细看 1 +x:1 +轮抗六号 1 +x:1 +礁堡 1 +x:1 +八点半 1 +x:1 +导演 1 +x:1 +陨铁 1 +x:1 +直尺 1 +x:1 +浅表 1 +x:1 +主笔 1 +x:1 +桔产区 1 +x:1 +失去 1 +x:1 +阴暗 1 +x:1 +竹浆 1 +x:1 +藏书角 1 +x:1 +提款机 1 +x:1 +鸭蛋青 1 +x:1 +亟待解决 1 +x:1 +效应期 1 +x:1 +联民党 1 +x:1 +河肥 1 +x:1 +皮具 1 +x:1 +警械 1 +x:1 +老狐狸 1 +x:1 +夹剪 1 +x:1 +厅 113 +x:113 +秋韵 1 +x:1 +坡头镇 1 +x:1 +冥冥 1 +x:1 +雍容华贵 1 +x:1 +暗合 1 +x:1 +上涌 1 +x:1 +楼子营镇 1 +x:1 +眈眈 1 +x:1 +上消 1 +x:1 +兜销 1 +x:1 +年成交额 1 +x:1 +中心思想 1 +x:1 +园洲镇 1 +x:1 +副线圈 1 +x:1 +两败俱伤 1 +x:1 +课员 1 +x:1 +兵油子 1 +x:1 +镜头 1 +x:1 +工程师 1 +x:1 +陷于 1 +x:1 +呼噜 1 +x:1 +翠玉 1 +x:1 +断编残简 1 +x:1 +金针菜 1 +x:1 +玉 65 +x:65 +倍受 1 +x:1 +利川市 1 +x:1 +上涨 1 +x:1 +阅读 1 +x:1 +植皮术 1 +x:1 +海龟 1 +x:1 +海龙 1 +x:1 +侨情 1 +x:1 +石岛镇 1 +x:1 +指挥员 1 +x:1 +捐资 1 +x:1 +合资企业 1 +x:1 +绊马索 1 +x:1 +嘴角 1 +x:1 +谌 3 +x:3 +田埂 1 +x:1 +保险灯 1 +x:1 +碎米 1 +x:1 +浅近 1 +x:1 +烟蒂 1 +x:1 +偷税额 1 +x:1 +① 44 +x:44 +椅披 1 +x:1 +文如其人 1 +x:1 +素描室 1 +x:1 +琴韵 1 +x:1 +泰然处之 1 +x:1 +宣传日 1 +x:1 +驴 9 +x:9 +对簿公堂 1 +x:1 +双特班 1 +x:1 +肿胀 1 +x:1 +被访者 1 +x:1 +警棍 1 +x:1 +金铃子 1 +x:1 +惧色 1 +x:1 +海鼠 1 +x:1 +上帝观 1 +x:1 +阿尔金山 1 +x:1 +财物 1 +x:1 +龙门汤 1 +x:1 +海角天涯 1 +x:1 +赤脚医生 1 +x:1 +警校 1 +x:1 +违法不究 1 +x:1 +出洋相 1 +x:1 +拂衣而去 1 +x:1 +便门 1 +x:1 +小莲庄 1 +x:1 +煽亮 1 +x:1 +歌艺 1 +x:1 +知冷知热 1 +x:1 +上诉书 1 +x:1 +巨笛 1 +x:1 +田地 1 +x:1 +逆水 1 +x:1 +无名之辈 1 +x:1 +柴林头村 1 +x:1 +跳远 1 +x:1 +上洲 1 +x:1 +曲意逢迎 1 +x:1 +凡俗 1 +x:1 +哭叫声 1 +x:1 +翎子 1 +x:1 +掺 21 +x:21 +库斯科省 1 +x:1 +专集 1 +x:1 +谐和 1 +x:1 +言下之意 1 +x:1 +喷火器 1 +x:1 +宣誓书 1 +x:1 +田块 1 +x:1 +甜蜜蜜 1 +x:1 +田坛 1 +x:1 +收费站 1 +x:1 +黄花闺女 1 +x:1 +祖父母 1 +x:1 +东往 1 +x:1 +东征 1 +x:1 +丫形 1 +x:1 +上浆 1 +x:1 +脚脖子 1 +x:1 +田坎 1 +x:1 +上流 1 +x:1 +交通线 1 +x:1 +狠命 1 +x:1 +红星 1 +x:1 +乳齿 1 +x:1 +禁驶区 1 +x:1 +天方夜谭 1 +x:1 +实现 1 +x:1 +凡例 1 +x:1 +上海 1 +x:1 +新闻杯 1 +x:1 +拜年歌 1 +x:1 +导标 1 +x:1 +上浮 1 +x:1 +一举多得 1 +x:1 +歌舞 1 +x:1 +经管站 1 +x:1 +伊河路 1 +x:1 +清冷 1 +x:1 +泛泛 1 +x:1 +残羹剩饭 1 +x:1 +功名利禄 1 +x:1 +条条框框 1 +x:1 +松快 1 +x:1 +罕克拉 1 +x:1 +金银箔 1 +x:1 +哥伦布 1 +x:1 +低聘 1 +x:1 +东平 1 +x:1 +了然 1 +x:1 +庐江县 1 +x:1 +声明 1 +x:1 +撩人心动 1 +x:1 +南达沟 1 +x:1 +重点户 1 +x:1 +维吾尔族 1 +x:1 +交通网 1 +x:1 +实物 1 +x:1 +银湖 1 +x:1 +要览 1 +x:1 +扑粉 1 +x:1 +监测网 1 +x:1 +传统校 1 +x:1 +核工业 1 +x:1 +胆战心寒 1 +x:1 +天青石 1 +x:1 +倍加 1 +x:1 +毛手毛脚 1 +x:1 +奈 1 +x:1 +屈打成招 1 +x:1 +钵子 1 +x:1 +兼收并蓄 1 +x:1 +设计局 1 +x:1 +奢靡之始 1 +x:1 +宽窄行 1 +x:1 +有鬼 1 +x:1 +三挂钩 1 +x:1 +灯语 1 +x:1 +糟行 1 +x:1 +习惯线 1 +x:1 +制胜之道 1 +x:1 +秋凉 1 +x:1 +言论集 1 +x:1 +美术室 1 +x:1 +誓俭草 1 +x:1 +锦心绣口 1 +x:1 +泗宿 1 +x:1 +嫩黄色 1 +x:1 +长城卡 1 +x:1 +三阳 1 +x:1 +开鲁县 1 +x:1 +热情洋溢 1 +x:1 +海鸥 1 +x:1 +庞然大物 1 +x:1 +兴盛 1 +x:1 +粗壮者 1 +x:1 +银滩 1 +x:1 +苍劲 1 +x:1 +待岗者 1 +x:1 +冶核 1 +x:1 +铮黑 1 +x:1 +曲线形 1 +x:1 +暗喜 1 +x:1 +窟内 1 +x:1 +事权 1 +x:1 +解数 1 +x:1 +叶柄 1 +x:1 +乳鸽 1 +x:1 +上水 1 +x:1 +侵扰 1 +x:1 +贩毒案 1 +x:1 +永久磁铁 1 +x:1 +进化史观 1 +x:1 +囊虫 1 +x:1 +海鸟 1 +x:1 +贻 3 +x:3 +暗喻 1 +x:1 +青基会 1 +x:1 +蒸食 1 +x:1 +英镑 1 +x:1 +发明地 1 +x:1 +收缴处 1 +x:1 +准则 1 +x:1 +靖边县 1 +x:1 +西洋景 1 +x:1 +售粮款 1 +x:1 +河蚌 1 +x:1 +事机 1 +x:1 +白驹过隙 1 +x:1 +凡人 1 +x:1 +反对 1 +x:1 +洋技术 1 +x:1 +上汽 1 +x:1 +松弛 1 +x:1 +兵燹 1 +x:1 +箩筐 1 +x:1 +火险 1 +x:1 +赭石 1 +x:1 +副教授 1 +x:1 +松开 1 +x:1 +殖民权 1 +x:1 +山里红 1 +x:1 +进军号 1 +x:1 +平安里 1 +x:1 +迟迟 1 +x:1 +阅览 1 +x:1 +万念俱灰 1 +x:1 +种畜场 1 +x:1 +呼呼 1 +x:1 +莲花乡 1 +x:1 +高帽子 1 +x:1 +笛膜 1 +x:1 +闸口乡 1 +x:1 +银海 1 +x:1 +资费处 1 +x:1 +年复利 1 +x:1 +管线 1 +x:1 +高价生 1 +x:1 +委托 1 +x:1 +吕剧团 1 +x:1 +北纬 1 +x:1 +免掉 1 +x:1 +小恩小惠 1 +x:1 +拉萨 1 +x:1 +破 263 +x:263 +里根 1 +x:1 +鄙弃 1 +x:1 +款留 1 +x:1 +灯笼椒 1 +x:1 +呵气成霜 1 +x:1 +镜子 1 +x:1 +鹿蹄草 1 +x:1 +皮品 1 +x:1 +呼吼 1 +x:1 +殡仪 1 +x:1 +巡逻艇 1 +x:1 +姿色 1 +x:1 +呼吸 1 +x:1 +英雄 1 +x:1 +左满舵 1 +x:1 +小合唱 1 +x:1 +古潭州 1 +x:1 +侨报 1 +x:1 +稳中有进 1 +x:1 +椭圆形 1 +x:1 +南传 1 +x:1 +银洋 1 +x:1 +堡口村 1 +x:1 +工程局 1 +x:1 +复制品 1 +x:1 +油料作物 1 +x:1 +万欣 1 +x:1 +呼吁 1 +x:1 +遵照 1 +x:1 +尚方宝剑 1 +x:1 +灾害学 1 +x:1 +进攻点 1 +x:1 +火锅 1 +x:1 +上演 1 +x:1 +松山 1 +x:1 +直奔 1 +x:1 +往届 1 +x:1 +项目省 1 +x:1 +诱导 1 +x:1 +竹根 1 +x:1 +呼哧 1 +x:1 +垂钓 1 +x:1 +呼哨 1 +x:1 +东巴 1 +x:1 +秋分 1 +x:1 +脚钱 1 +x:1 +琴键 1 +x:1 +刻苦耐劳 1 +x:1 +香稻 1 +x:1 +析理 1 +x:1 +君主专制 1 +x:1 +概念性 1 +x:1 +秋初 1 +x:1 +含铅量 1 +x:1 +雀 8 +x:8 +巨祸 1 +x:1 +孰料 1 +x:1 +可逆性 1 +x:1 +稿费 1 +x:1 +竹桥 1 +x:1 +碱土 1 +x:1 +香港游 1 +x:1 +肩窝 1 +x:1 +倍儿 1 +x:1 +工钱 1 +x:1 +糜 2 +x:2 +荟要 1 +x:1 +火镜 1 +x:1 +提醒 1 +x:1 +碱地 1 +x:1 +歌者 1 +x:1 +足掌 1 +x:1 +自禁 1 +x:1 +共鸣板 1 +x:1 +版权局 1 +x:1 +以战养战 1 +x:1 +便鞋 1 +x:1 +愣神 1 +x:1 +虫卵 1 +x:1 +曲沟乡 1 +x:1 +智三针 1 +x:1 +当代史 1 +x:1 +专长 1 +x:1 +两点论 1 +x:1 +而是 1 +x:1 +薪饷 1 +x:1 +京师 1 +x:1 +戎 7 +x:7 +呼啦 1 +x:1 +屏蔽 1 +x:1 +南乐 1 +x:1 +设计师 1 +x:1 +等待 1 +x:1 +穷凶极恶 1 +x:1 +夹具 1 +x:1 +深山区 1 +x:1 +同床共枕 1 +x:1 +基扎 1 +x:1 +官庄组 1 +x:1 +火浣布 1 +x:1 +东山 1 +x:1 +反复 1 +x:1 +骨髓 1 +x:1 +皇叔 1 +x:1 +心黑手辣 1 +x:1 +细珠 1 +x:1 +害 114 +x:114 +上溯 1 +x:1 +泛滥 1 +x:1 +暗地 1 +x:1 +拦河闸 1 +x:1 +众口一词 1 +x:1 +海鲜 1 +x:1 +棋错一着 1 +x:1 +经济基础 1 +x:1 +昭彰 1 +x:1 +秋口 1 +x:1 +汤杯 1 +x:1 +爽然 1 +x:1 +阳泉市 1 +x:1 +骨骼 1 +x:1 +自卸车 1 +x:1 +南下 1 +x:1 +加油站长 1 +x:1 +耘锄 1 +x:1 +血小板 1 +x:1 +呼唤 1 +x:1 +秋叶 1 +x:1 +磅湛 1 +x:1 +震害 1 +x:1 +暗坝 1 +x:1 +有良心者 1 +x:1 +现行 1 +x:1 +失地 1 +x:1 +王单驼 1 +x:1 +海鳃 1 +x:1 +Ⅴ 8 +x:8 +克分子 1 +x:1 +马桥镇 1 +x:1 +提速 1 +x:1 +海鳗 1 +x:1 +蜷伏 1 +x:1 +瓦房化 1 +x:1 +削面 1 +x:1 +旷 4 +x:4 +南丰 1 +x:1 +京广 1 +x:1 +外版书 1 +x:1 +孔雀店村 1 +x:1 +低能 1 +x:1 +阁 13 +x:13 +油砂 1 +x:1 +熄 9 +x:9 +檐水 1 +x:1 +饱暖 1 +x:1 +支票 1 +x:1 +演示会 1 +x:1 +免戴 1 +x:1 +夹击 1 +x:1 +专门 1 +x:1 +等式 1 +x:1 +主罪 1 +x:1 +望虞河 1 +x:1 +北缘 1 +x:1 +紧缩性 1 +x:1 +援助款 1 +x:1 +呼嗒 1 +x:1 +商州市 1 +x:1 +事故 1 +x:1 +红土坡矿 1 +x:1 +南江县 1 +x:1 +登山绳 1 +x:1 +曾祖父 1 +x:1 +猪婆龙 1 +x:1 +乌桕 1 +x:1 +到货 1 +x:1 +罗里乡 1 +x:1 +动用量 1 +x:1 +缺口处 1 +x:1 +形影不离 1 +x:1 +戈比 1 +x:1 +濯锦 1 +x:1 +生殖洄游 1 +x:1 +竹楼 1 +x:1 +到资 1 +x:1 +有板有眼 1 +x:1 +海鱼 1 +x:1 +少林拳 1 +x:1 +南亚 1 +x:1 +仲裁员 1 +x:1 +秋千 1 +x:1 +上中游 1 +x:1 +主编 1 +x:1 +踢踏舞 1 +x:1 +南京 1 +x:1 +桌上 1 +x:1 +桌下 1 +x:1 +东岸 1 +x:1 +至理明言 1 +x:1 +管网 1 +x:1 +详见 1 +x:1 +修订版 1 +x:1 +棍棒 1 +x:1 +罗特尔队 1 +x:1 +呼喊 1 +x:1 +子孙饭 1 +x:1 +安慰剂 1 +x:1 +梭织 1 +x:1 +东单 1 +x:1 +舒心畅怀 1 +x:1 +持重 1 +x:1 +烟波浩渺 1 +x:1 +保温瓶 1 +x:1 +东升 1 +x:1 +便饭 1 +x:1 +微澜 1 +x:1 +下脚货 1 +x:1 +东华 1 +x:1 +核工业部 1 +x:1 +可歌可泣 1 +x:1 +微微克 1 +x:1 +暗堡 1 +x:1 +反对派 1 +x:1 +财经 1 +x:1 +庆安县 1 +x:1 +出租 1 +x:1 +拘押 1 +x:1 +蝴蝶装 1 +x:1 +莽 10 +x:10 +村村户户 1 +x:1 +东北 1 +x:1 +造造 1 +x:1 +主城区 1 +x:1 +乌枣 1 +x:1 +吃刀子 1 +x:1 +巨石 1 +x:1 +松劲 1 +x:1 +雨敞坪镇 1 +x:1 +遍采 1 +x:1 +夹带 1 +x:1 +松动 1 +x:1 +烟袋 1 +x:1 +香瓜 1 +x:1 +溘然长逝 1 +x:1 +祖 19 +x:19 +历史系 1 +x:1 +疆土 1 +x:1 +文文静静 1 +x:1 +招聘人 1 +x:1 +民粹派 1 +x:1 +明阳屯 1 +x:1 +东区 1 +x:1 +便餐 1 +x:1 +晚报社 1 +x:1 +仍然 1 +x:1 +按劳付酬 1 +x:1 +人格权 1 +x:1 +翠翘 1 +x:1 +细粮 1 +x:1 +等候 1 +x:1 +喷灌机 1 +x:1 +遍野 1 +x:1 +切 135 +x:135 +拖泥带水 1 +x:1 +偷渡者 1 +x:1 +帅劲儿 1 +x:1 +玉雕 1 +x:1 +汇合处 1 +x:1 +誓词 1 +x:1 +残酷 1 +x:1 +舢板 1 +x:1 +友邻 1 +x:1 +失声 1 +x:1 +等值 1 +x:1 +外包装盒 1 +x:1 +受惠者 1 +x:1 +黑石寨 1 +x:1 +自源性 1 +x:1 +超稠油 1 +x:1 +可不可能 1 +x:1 +终久 1 +x:1 +侨汇 1 +x:1 +民防局 1 +x:1 +谐声 1 +x:1 +失墒 1 +x:1 +枕边 1 +x:1 +大观园 1 +x:1 +旬刊 1 +x:1 +乌木 1 +x:1 +迟脉 1 +x:1 +火魔 1 +x:1 +俊逸 1 +x:1 +滤 4 +x:4 +蒙药 1 +x:1 +注药管 1 +x:1 +侨民 1 +x:1 +管灌 1 +x:1 +垂髫 1 +x:1 +倾诉 1 +x:1 +土岭乡 1 +x:1 +东厢 1 +x:1 +就是 1 +x:1 +高头讲章 1 +x:1 +联络官 1 +x:1 +惹麻烦 1 +x:1 +代表证 1 +x:1 +暗处 1 +x:1 +丝氨酸 1 +x:1 +警方 1 +x:1 +残部 1 +x:1 +演出证 1 +x:1 +歌迷 1 +x:1 +皮实 1 +x:1 +思考性 1 +x:1 +铜川市 1 +x:1 +松口 1 +x:1 +劳动服 1 +x:1 +求证 1 +x:1 +经商处 1 +x:1 +墙皮 1 +x:1 +剑齿虎 1 +x:1 +艺诀 1 +x:1 +上穷碧落 1 +x:1 +标书 1 +x:1 +竹枝 1 +x:1 +工程化 1 +x:1 +鱼钩 1 +x:1 +张江 1 +x:1 +竹林 1 +x:1 +激昂 1 +x:1 +齐阁村 1 +x:1 +发明家 1 +x:1 +板报栏 1 +x:1 +综采队 1 +x:1 +迈向 1 +x:1 +研讨班 1 +x:1 +劳动权 1 +x:1 +修配厂 1 +x:1 +从警 1 +x:1 +上情 1 +x:1 +美英式 1 +x:1 +利率表 1 +x:1 +挺 110 +x:110 +飘扬 1 +x:1 +松原 1 +x:1 +探险家 1 +x:1 +课外 1 +x:1 +视死如归 1 +x:1 +骨针 1 +x:1 +新岁 1 +x:1 +常山县 1 +x:1 +新农村乡 1 +x:1 +谭派 1 +x:1 +缺心少肺 1 +x:1 +柿 2 +x:2 +检验科 1 +x:1 +自然资源 1 +x:1 +竹木 1 +x:1 +临场发挥 1 +x:1 +卒子 1 +x:1 +武当山 1 +x:1 +香甜 1 +x:1 +炸豆腐 1 +x:1 +财综字 1 +x:1 +地心引力 1 +x:1 +氟 9 +x:9 +标价 1 +x:1 +跳帮组 1 +x:1 +可卡因 1 +x:1 +夹心 1 +x:1 +连年来 1 +x:1 +粮 255 +x:255 +木器厂 1 +x:1 +实绩 1 +x:1 +视若无睹 1 +x:1 +捉拿归案 1 +x:1 +狐群狗党 1 +x:1 +国务卿 1 +x:1 +招聘会 1 +x:1 +医史 1 +x:1 +受灾户 1 +x:1 +在押 1 +x:1 +表扬电 1 +x:1 +暂定名 1 +x:1 +预购 1 +x:1 +褂子 1 +x:1 +字 823 +x:823 +皮子 1 +x:1 +扑火 1 +x:1 +圩日 1 +x:1 +拘捕 1 +x:1 +租房 1 +x:1 +夜幕低垂 1 +x:1 +软弱无力 1 +x:1 +特重 1 +x:1 +敦化 1 +x:1 +叛乱者 1 +x:1 +租户 1 +x:1 +警教 1 +x:1 +卡路里 1 +x:1 +电信展 1 +x:1 +闪电式 1 +x:1 +扎堆 1 +x:1 +白布篷 1 +x:1 +神人 1 +x:1 +妇孺皆晓 1 +x:1 +电信局 1 +x:1 +靛青 1 +x:1 +黄帝城 1 +x:1 +浅色 1 +x:1 +专项 1 +x:1 +冷不防 1 +x:1 +香皂 1 +x:1 +优亲厚友 1 +x:1 +上排 1 +x:1 +非体力 1 +x:1 +吉卜赛人 1 +x:1 +一往直前 1 +x:1 +碗 110 +x:110 +仆从 1 +x:1 +微涨 1 +x:1 +车夫 1 +x:1 +东兴 1 +x:1 +河西 1 +x:1 +东关 1 +x:1 +逢迎 1 +x:1 +夹层 1 +x:1 +柔道 1 +x:1 +卫东区 1 +x:1 +看不起 1 +x:1 +代数根 1 +x:1 +肩摩踵接 1 +x:1 +反向 1 +x:1 +道德感 1 +x:1 +汇报会 1 +x:1 +坚贞不屈 1 +x:1 +逆作法 1 +x:1 +连环套 1 +x:1 +匡算 1 +x:1 +深入性 1 +x:1 +京华 1 +x:1 +测力计 1 +x:1 +裸麦 1 +x:1 +平平展展 1 +x:1 +做文章 1 +x:1 +仲裁委 1 +x:1 +无例外 1 +x:1 +高价票 1 +x:1 +烤鸭店 1 +x:1 +主犯 1 +x:1 +铟 1 +x:1 +乌方 1 +x:1 +细纱 1 +x:1 +太原市 1 +x:1 +酒经 1 +x:1 +蔺草 1 +x:1 +承付 1 +x:1 +海量 1 +x:1 +仆人 1 +x:1 +海里 1 +x:1 +氟石 1 +x:1 +碎片 1 +x:1 +单工槽 1 +x:1 +民防部 1 +x:1 +在意 1 +x:1 +颅 2 +x:2 +隐患 1 +x:1 +巨画 1 +x:1 +末流 1 +x:1 +用脑 1 +x:1 +呼声 1 +x:1 +栩栩如生 1 +x:1 +静穆 1 +x:1 +→ 2 +x:2 +巴塞罗那 1 +x:1 +南伞镇 1 +x:1 +戊戌变法 1 +x:1 +等分 1 +x:1 +宜章 1 +x:1 +消防站 1 +x:1 +田头 1 +x:1 +屡禁不止 1 +x:1 +等到 1 +x:1 +三跑田 1 +x:1 +一生 1 +x:1 +限额制 1 +x:1 +并购额 1 +x:1 +北爱 1 +x:1 +亲临其境 1 +x:1 +头痛医头 1 +x:1 +倾覆 1 +x:1 +江蓠 1 +x:1 +月色 1 +x:1 +了结 1 +x:1 +歌谣 1 +x:1 +虹雯 1 +x:1 +换气扇 1 +x:1 +艺委会 1 +x:1 +晓 25 +x:25 +泛指 1 +x:1 +融会贯通 1 +x:1 +歌谱 1 +x:1 +炮筒子 1 +x:1 +西洋楼 1 +x:1 +到职 1 +x:1 +反哺 1 +x:1 +汲水 1 +x:1 +乳酸 1 +x:1 +管片 1 +x:1 +反响 1 +x:1 +指导科 1 +x:1 +倾角 1 +x:1 +家家户户 1 +x:1 +帕尔马 1 +x:1 +普利茅斯 1 +x:1 +乳酪 1 +x:1 +大猫熊 1 +x:1 +中稻 1 +x:1 +屈原祠 1 +x:1 +壮乡 1 +x:1 +跺 3 +x:3 +华山路 1 +x:1 +倾视 1 +x:1 +丈量 1 +x:1 +无上光荣 1 +x:1 +醇 1 +x:1 +永别 1 +x:1 +歌路 1 +x:1 +总务司 1 +x:1 +道德性 1 +x:1 +莨菪 1 +x:1 +参与权 1 +x:1 +警枪 1 +x:1 +预审 1 +x:1 +抗干扰性 1 +x:1 +秋征 1 +x:1 +抄录 1 +x:1 +省略号 1 +x:1 +专业面 1 +x:1 +意志力 1 +x:1 +失学 1 +x:1 +上报 1 +x:1 +寄存包 1 +x:1 +乘法 1 +x:1 +练练 1 +x:1 +人面兽心 1 +x:1 +雄才大略 1 +x:1 +承修 1 +x:1 +大地回春 1 +x:1 +南阳市 1 +x:1 +着慌 1 +x:1 +工程兵 1 +x:1 +荟萃 1 +x:1 +京剧 1 +x:1 +汤歌 1 +x:1 +香港中路 1 +x:1 +载有 1 +x:1 +微波 1 +x:1 +亚音速 1 +x:1 +巡逻车 1 +x:1 +蒙胧 1 +x:1 +黄米 1 +x:1 +饲养户 1 +x:1 +总务厅 1 +x:1 +笼里 1 +x:1 +低垂 1 +x:1 +林产业 1 +x:1 +远涉重洋 1 +x:1 +切磋琢磨 1 +x:1 +一品锅 1 +x:1 +乾乾 1 +x:1 +讳莫如深 1 +x:1 +贼眼 1 +x:1 +失察 1 +x:1 +异物感 1 +x:1 +晕眩 1 +x:1 +失密 1 +x:1 +淋巴结 1 +x:1 +文绉绉 1 +x:1 +发明奖 1 +x:1 +暗室 1 +x:1 +专名号 1 +x:1 +歌赋 1 +x:1 +现象学 1 +x:1 +皮夹 1 +x:1 +暗害 1 +x:1 +壮丁 1 +x:1 +歌赞 1 +x:1 +葡萄牙队 1 +x:1 +警服 1 +x:1 +老伴 1 +x:1 +暗密 1 +x:1 +仁化县 1 +x:1 +鼷鼠 1 +x:1 +裸鼠 1 +x:1 +失实 1 +x:1 +以资代劳 1 +x:1 +一脉相承 1 +x:1 +英魂 1 +x:1 +写作 1 +x:1 +准将 1 +x:1 +上手 1 +x:1 +暗察 1 +x:1 +失守 1 +x:1 +夸夸其谈 1 +x:1 +田塍 1 +x:1 +割地 1 +x:1 +习书 1 +x:1 +祷告 1 +x:1 +面包块 1 +x:1 +上扬 1 +x:1 +失宠 1 +x:1 +大器晚成 1 +x:1 +劳动日 1 +x:1 +举组 1 +x:1 +专馆 1 +x:1 +手工钱 1 +x:1 +和谐感 1 +x:1 +宅 6 +x:6 +惹不起 1 +x:1 +灯节 1 +x:1 +实策 1 +x:1 +登山界 1 +x:1 +喷珠泻玉 1 +x:1 +照面 1 +x:1 +田径 1 +x:1 +火龙 1 +x:1 +上文 1 +x:1 +波密县 1 +x:1 +犟 5 +x:5 +谠 1 +x:1 +上方 1 +x:1 +保证书 1 +x:1 +反刍 1 +x:1 +输水管线 1 +x:1 +镜 24 +x:24 +先知先觉 1 +x:1 +科研处 1 +x:1 +首善之区 1 +x:1 +上中旬 1 +x:1 +东坡 1 +x:1 +感光片 1 +x:1 +迈入 1 +x:1 +刘海儿 1 +x:1 +嚣张 1 +x:1 +西门豹 1 +x:1 +心急如焚 1 +x:1 +汤汤 1 +x:1 +乌 122 +x:122 +汤池 1 +x:1 +弹力袜 1 +x:1 +劳动所 1 +x:1 +提及 1 +x:1 +海韵 1 +x:1 +原峰村 1 +x:1 +香烟 1 +x:1 +灯苗 1 +x:1 +浅浅的 1 +x:1 +微毒 1 +x:1 +红领巾 1 +x:1 +细碎 1 +x:1 +倾轧 1 +x:1 +在望 1 +x:1 +译稿 1 +x:1 +高帽儿 1 +x:1 +两全其美 1 +x:1 +警惕 1 +x:1 +敦 2 +x:2 +除此之外 1 +x:1 +室内外 1 +x:1 +上旬 1 +x:1 +入梅 1 +x:1 +鲜红 1 +x:1 +警情 1 +x:1 +末段 1 +x:1 +瓯海 1 +x:1 +跑位 1 +x:1 +红砖黛瓦 1 +x:1 +亚洲象 1 +x:1 +收益值 1 +x:1 +龙井村 1 +x:1 +西 424 +x:424 +绣墩草 1 +x:1 +特钢 1 +x:1 +葫芦岛市 1 +x:1 +反动 1 +x:1 +专制 1 +x:1 +江苏 1 +x:1 +灯舞 1 +x:1 +怒海 1 +x:1 +等同 1 +x:1 +人造花 1 +x:1 +直升 1 +x:1 +神经末梢 1 +x:1 +一无所画 1 +x:1 +迈出 1 +x:1 +精品库 1 +x:1 +菇种 1 +x:1 +精品店 1 +x:1 +嘴脸 1 +x:1 +管理 1 +x:1 +电流 1 +x:1 +上收 1 +x:1 +冤魂 1 +x:1 +皮带 1 +x:1 +怜 4 +x:4 +唱 396 +x:396 +中药师 1 +x:1 +皮帽 1 +x:1 +翩然而至 1 +x:1 +用膳 1 +x:1 +飓风 1 +x:1 +商厦队 1 +x:1 +地质部 1 +x:1 +一枕黄粱 1 +x:1 +海面 1 +x:1 +暖气片 1 +x:1 +蝴蝶谷 1 +x:1 +工程团 1 +x:1 +着意 1 +x:1 +警惕性 1 +x:1 +匪帮 1 +x:1 +派遣军 1 +x:1 +真相者 1 +x:1 +侨校 1 +x:1 +科技兴农 1 +x:1 +呼应 1 +x:1 +明信片 1 +x:1 +汤泉 1 +x:1 +财税 1 +x:1 +系统 1 +x:1 +火坑 1 +x:1 +快班 1 +x:1 +铜陵市 1 +x:1 +生离死别 1 +x:1 +主理 1 +x:1 +香灰 1 +x:1 +保证人 1 +x:1 +工字钢 1 +x:1 +张榜 1 +x:1 +毛织品 1 +x:1 +北疆 1 +x:1 +中环线 1 +x:1 +汗津津 1 +x:1 +离石市 1 +x:1 +委托书 1 +x:1 +手腕子 1 +x:1 +田庄 1 +x:1 +尖 19 +x:19 +海难 1 +x:1 +燕山街 1 +x:1 +霜 20 +x:20 +乏意 1 +x:1 +蒙昧主义 1 +x:1 +实空 1 +x:1 +亲日派 1 +x:1 +歌诀 1 +x:1 +一般说来 1 +x:1 +歌词 1 +x:1 +激扬 1 +x:1 +乌拉 1 +x:1 +钱 2985 +x:2985 +际会 1 +x:1 +升旗台 1 +x:1 +积压货 1 +x:1 +夹子 1 +x:1 +竹排 1 +x:1 +回购 1 +x:1 +由浅入深 1 +x:1 +参与感 1 +x:1 +刑释解教 1 +x:1 +先 990 +x:990 +设计员 1 +x:1 +概念比 1 +x:1 +科普站 1 +x:1 +语言者 1 +x:1 +巨狮 1 +x:1 +特长 1 +x:1 +鲜美 1 +x:1 +基金会 1 +x:1 +汤浴 1 +x:1 +翠竹 1 +x:1 +携起手来 1 +x:1 +解 175 +x:175 +免检 1 +x:1 +如锥镗沙 1 +x:1 +鸡摊 1 +x:1 +沉水植物 1 +x:1 +匪徒 1 +x:1 +拍凤裕庭 1 +x:1 +铬矿砂 1 +x:1 +惊为天人 1 +x:1 +历史科 1 +x:1 +京味 1 +x:1 +一锅粥 1 +x:1 +拉车 1 +x:1 +指导线 1 +x:1 +选 493 +x:493 +管用 1 +x:1 +秋天 1 +x:1 +违法乱纪 1 +x:1 +东四 1 +x:1 +东映像 1 +x:1 +清热利肺 1 +x:1 +海防 1 +x:1 +南朝鲜 1 +x:1 +浩荡 1 +x:1 +柔韧 1 +x:1 +铅玻璃 1 +x:1 +经营者 1 +x:1 +火鸡 1 +x:1 +偶遇 1 +x:1 +提高 1 +x:1 +宣传期 1 +x:1 +遣词用句 1 +x:1 +放牛郎 1 +x:1 +读报栏 1 +x:1 +柳杨堡 1 +x:1 +北电 1 +x:1 +绣球风 1 +x:1 +东园 1 +x:1 +砚山县 1 +x:1 +名位观 1 +x:1 +百年大计 1 +x:1 +睇 1 +x:1 +谭概 1 +x:1 +拉近 1 +x:1 +枝形 1 +x:1 +兵种 1 +x:1 +海陵 1 +x:1 +海印队 1 +x:1 +委托人 1 +x:1 +反右 1 +x:1 +老边区 1 +x:1 +删去 1 +x:1 +潜留 1 +x:1 +南澳县 1 +x:1 +随访 1 +x:1 +烟费 1 +x:1 +二手车 1 +x:1 +退休返聘 1 +x:1 +天台乌药 1 +x:1 +管界 1 +x:1 +远处 1 +x:1 +潜热 1 +x:1 +河身 1 +x:1 +耗子屎 1 +x:1 +拘板 1 +x:1 +烟贩 1 +x:1 +皮影 1 +x:1 +杂志费 1 +x:1 +指导组 1 +x:1 +巨片 1 +x:1 +反叛 1 +x:1 +知难而进 1 +x:1 +考古所 1 +x:1 +指挥者 1 +x:1 +大有作为 1 +x:1 +浅薄 1 +x:1 +上林 1 +x:1 +负于 1 +x:1 +住院日 1 +x:1 +镀金 1 +x:1 +— 1865 +x:1865 +俊雅 1 +x:1 +校运会 1 +x:1 +多 18209 +x:18209 +避重就轻 1 +x:1 +定补面 1 +x:1 +在教 1 +x:1 +措词 1 +x:1 +镜匾 1 +x:1 +上架 1 +x:1 +兰州市 1 +x:1 +赛后 1 +x:1 +虫害 1 +x:1 +详考 1 +x:1 +镜匣 1 +x:1 +死亡者 1 +x:1 +反倒 1 +x:1 +淡路岛 1 +x:1 +半山腰 1 +x:1 +一无所知 1 +x:1 +过时 1 +x:1 +硬着陆 1 +x:1 +待岗证 1 +x:1 +黑白分明 1 +x:1 +海门 1 +x:1 +柑 6 +x:6 +冥寿 1 +x:1 +导报 1 +x:1 +成人版 1 +x:1 +热值 1 +x:1 +慢镜头 1 +x:1 +悬梁刺股 1 +x:1 +别具一格 1 +x:1 +反假 1 +x:1 +鸡杂 1 +x:1 +配备率 1 +x:1 +激愤 1 +x:1 +快煤 1 +x:1 +璐 10 +x:10 +兑付 1 +x:1 +旺销 1 +x:1 +采育镇 1 +x:1 +不辞辛苦 1 +x:1 +禄劝 1 +x:1 +乙丙橡胶 1 +x:1 +两院一堂 1 +x:1 +精品屋 1 +x:1 +七·七 1 +x:1 +厄音 1 +x:1 +上期 1 +x:1 +甚么 1 +x:1 +心劲 1 +x:1 +醒目 1 +x:1 +亭台楼阁 1 +x:1 +助推器 1 +x:1 +上月 1 +x:1 +家属院 1 +x:1 +一号机 1 +x:1 +出走 1 +x:1 +练笔 1 +x:1 +杀菌率 1 +x:1 +警戒 1 +x:1 +军事部 1 +x:1 +细究 1 +x:1 +开诚相见 1 +x:1 +萨雷沙干 1 +x:1 +收费点 1 +x:1 +后勤组 1 +x:1 +符庄村 1 +x:1 +皮尺 1 +x:1 +蒙蔽 1 +x:1 +一声不响 1 +x:1 +俯视 1 +x:1 +下丘脑 1 +x:1 +人多势众 1 +x:1 +兵站 1 +x:1 +电话铃 1 +x:1 +京城 1 +x:1 +诗作品 1 +x:1 +皮层 1 +x:1 +部门 1 +x:1 +香片 1 +x:1 +回赠 1 +x:1 +虫子 1 +x:1 +割刀 1 +x:1 +准备 1 +x:1 +雪地车 1 +x:1 +瓜 49 +x:49 +毛演堡村 1 +x:1 +准头 1 +x:1 +镜台 1 +x:1 +函 73 +x:73 +增盈减亏 1 +x:1 +语言学家 1 +x:1 +硅二极管 1 +x:1 +夹墙 1 +x:1 +上杭 1 +x:1 +邮坛 1 +x:1 +克制 1 +x:1 +甚为 1 +x:1 +皮山 1 +x:1 +征南战北 1 +x:1 +河豚 1 +x:1 +失当 1 +x:1 +军事学 1 +x:1 +细密画 1 +x:1 +翠碧 1 +x:1 +爱琴海 1 +x:1 +残雪 1 +x:1 +独山子 1 +x:1 +手术产 1 +x:1 +爵位 1 +x:1 +警探 1 +x:1 +宜果则果 1 +x:1 +莫尔特克 1 +x:1 +吹鼓手 1 +x:1 +婉而多讽 1 +x:1 +海底 1 +x:1 +乳钵 1 +x:1 +惶恐 1 +x:1 +海钓 1 +x:1 +报警亭 1 +x:1 +纤维板 1 +x:1 +兵符 1 +x:1 +东周 1 +x:1 +彀 1 +x:1 +乙双吗啉 1 +x:1 +冰雪崩 1 +x:1 +黄泥岗镇 1 +x:1 +买通 1 +x:1 +堡子村 1 +x:1 +人生感 1 +x:1 +激怒 1 +x:1 +例言 1 +x:1 +反共 1 +x:1 +值日表 1 +x:1 +微电子业 1 +x:1 +图尔库 1 +x:1 +留学生 1 +x:1 +现职 1 +x:1 +注射器 1 +x:1 +雇请 1 +x:1 +末梢 1 +x:1 +东吴 1 +x:1 +北辰区 1 +x:1 +河谷 1 +x:1 +反先 1 +x:1 +经常化 1 +x:1 +报警仪 1 +x:1 +日复一日 1 +x:1 +混 43 +x:43 +碱度 1 +x:1 +海流河乡 1 +x:1 +倍增 1 +x:1 +隐藏所 1 +x:1 +反党 1 +x:1 +叫苦不迭 1 +x:1 +修订稿 1 +x:1 +禄 5 +x:5 +视察团 1 +x:1 +激情 1 +x:1 +保险箱 1 +x:1 +小天鹅 1 +x:1 +提到 1 +x:1 +早报 1 +x:1 +哭喊声 1 +x:1 +头数 1 +x:1 +惶惶 1 +x:1 +失忆 1 +x:1 +理直气壮 1 +x:1 +蹲位 1 +x:1 +上昆 1 +x:1 +利己主义 1 +x:1 +二手货 1 +x:1 +片言只字 1 +x:1 +删减 1 +x:1 +多子多孙 1 +x:1 +惶惑 1 +x:1 +微格 1 +x:1 +久慕盛名 1 +x:1 +溶 9 +x:9 +快点 1 +x:1 +负伤 1 +x:1 +上映 1 +x:1 +甚佳 1 +x:1 +秋季 1 +x:1 +经济核算 1 +x:1 +硝化 1 +x:1 +枞阳县 1 +x:1 +庐山路 1 +x:1 +银碟 1 +x:1 +跌 230 +x:230 +巨灵 1 +x:1 +残阳 1 +x:1 +房改办 1 +x:1 +仁义道德 1 +x:1 +财礼 1 +x:1 +碎石 1 +x:1 +反击 1 +x:1 +上晃 1 +x:1 +补 224 +x:224 +信标 1 +x:1 +细胞壁 1 +x:1 +底本 1 +x:1 +演出费 1 +x:1 +投资法 1 +x:1 +设计图 1 +x:1 +饱满 1 +x:1 +客货运量 1 +x:1 +墙灰 1 +x:1 +撒欢儿 1 +x:1 +口哨 1 +x:1 +六一 1 +x:1 +农金 1 +x:1 +何况 1 +x:1 +高次方程 1 +x:1 +证婚 1 +x:1 +副题 1 +x:1 +朱文 1 +x:1 +三绝 1 +x:1 +蛮荒 1 +x:1 +联盟制 1 +x:1 +国家教委 1 +x:1 +血色 1 +x:1 +了无惧色 1 +x:1 +恶劣性 1 +x:1 +笔尖 1 +x:1 +打眼 1 +x:1 +刺刀 1 +x:1 +薄礼 1 +x:1 +公开信 1 +x:1 +流通券 1 +x:1 +不得不 1 +x:1 +兰桥 1 +x:1 +服务器 1 +x:1 +密闭 1 +x:1 +堰岭 1 +x:1 +复兴区 1 +x:1 +肥壮 1 +x:1 +坊会 1 +x:1 +案源 1 +x:1 +沤肥 1 +x:1 +纸鹤 1 +x:1 +副食 1 +x:1 +泡辣椒 1 +x:1 +走失 1 +x:1 +月华 1 +x:1 +目睹式 1 +x:1 +地狱谷 1 +x:1 +鹭江道 1 +x:1 +爻 1 +x:1 +透不过气 1 +x:1 +进修生 1 +x:1 +瓣 16 +x:16 +六书 1 +x:1 +癫痫 1 +x:1 +调性 1 +x:1 +果柄 1 +x:1 +催泪弹 1 +x:1 +兼备 1 +x:1 +底气十足 1 +x:1 +履穿踵决 1 +x:1 +一放了之 1 +x:1 +商机 1 +x:1 +即若 1 +x:1 +愁 83 +x:83 +金属漆 1 +x:1 +工作站 1 +x:1 +核物理 1 +x:1 +超社会 1 +x:1 +新生 1 +x:1 +豹纹 1 +x:1 +公休日 1 +x:1 +入情入理 1 +x:1 +5 2486 +x:2486 +九所 1 +x:1 +口味 1 +x:1 +没脸 1 +x:1 +或褒或贬 1 +x:1 +月历 1 +x:1 +泄 9 +x:9 +启发性 1 +x:1 +自暴自弃 1 +x:1 +便后 1 +x:1 +国际象棋 1 +x:1 +困顿 1 +x:1 +捅捅 1 +x:1 +服务团 1 +x:1 +不治之症 1 +x:1 +贬值 1 +x:1 +休戚相关 1 +x:1 +轻视 1 +x:1 +可兑换性 1 +x:1 +淄博市 1 +x:1 +富阳市 1 +x:1 +头胸部 1 +x:1 +何其 1 +x:1 +威名 1 +x:1 +地质学界 1 +x:1 +落叶归根 1 +x:1 +废盐 1 +x:1 +口吻 1 +x:1 +威吓 1 +x:1 +录 46 +x:46 +剪除 1 +x:1 +阿尔甘德 1 +x:1 +板正 1 +x:1 +盛服 1 +x:1 +惊弓之鸟 1 +x:1 +飞虎队 1 +x:1 +先售后股 1 +x:1 +商末 1 +x:1 +先导型 1 +x:1 +汇编本 1 +x:1 +利农村 1 +x:1 +口吃 1 +x:1 +唱主角 1 +x:1 +月台 1 +x:1 +输液厅 1 +x:1 +拉合尔 1 +x:1 +学习者 1 +x:1 +铜钵村 1 +x:1 +楚河汉界 1 +x:1 +违约 1 +x:1 +副项 1 +x:1 +挑唆 1 +x:1 +自杀者 1 +x:1 +办报 1 +x:1 +诺萨斯 1 +x:1 +违纪 1 +x:1 +林茂粮丰 1 +x:1 +社社 1 +x:1 +月初 1 +x:1 +中篇 1 +x:1 +乱真 1 +x:1 +月刊 1 +x:1 +卡面 1 +x:1 +虽生弗生 1 +x:1 +小名头 1 +x:1 +君王 1 +x:1 +攘 2 +x:2 +致病 1 +x:1 +合同工 1 +x:1 +房地产业 1 +x:1 +女方 1 +x:1 +田畴 1 +x:1 +炉前工 1 +x:1 +善报 1 +x:1 +呈请 1 +x:1 +尊亲 1 +x:1 +高桥堰村 1 +x:1 +棕绿色 1 +x:1 +月利 1 +x:1 +臼齿 1 +x:1 +竖吹 1 +x:1 +夜饭 1 +x:1 +急诊科 1 +x:1 +胁 2 +x:2 +旷日持久 1 +x:1 +垛子 1 +x:1 +有翅蚜 1 +x:1 +夜餐 1 +x:1 +垃圾猪 1 +x:1 +缓冲器 1 +x:1 +乍暖还寒 1 +x:1 +晶亮 1 +x:1 +含沙射影 1 +x:1 +相交处 1 +x:1 +龙卷风 1 +x:1 +银鱼 1 +x:1 +关税壁垒 1 +x:1 +体坛 1 +x:1 +气象学家 1 +x:1 +郑南 1 +x:1 +堆积体 1 +x:1 +顽固不化 1 +x:1 +应运 1 +x:1 +跳 229 +x:229 +化石群 1 +x:1 +单行路 1 +x:1 +雨 297 +x:297 +水尺 1 +x:1 +侍候 1 +x:1 +积毁销骨 1 +x:1 +膀 1 +x:1 +麦哲伦 1 +x:1 +宗教徒 1 +x:1 +凉碟 1 +x:1 +不念旧恶 1 +x:1 +肥大 1 +x:1 +咎 1 +x:1 +结怨 1 +x:1 +善战 1 +x:1 +愣神儿 1 +x:1 +壁龛 1 +x:1 +西二环路 1 +x:1 +中国海 1 +x:1 +橡树叶 1 +x:1 +揶揄 1 +x:1 +致畸 1 +x:1 +备课 1 +x:1 +卧地磐石 1 +x:1 +候机楼 1 +x:1 +防范金 1 +x:1 +身价百倍 1 +x:1 +体型 1 +x:1 +悠久 1 +x:1 +尊严 1 +x:1 +先行者 1 +x:1 +硬骨鱼 1 +x:1 +盛景 1 +x:1 +豆腐脑儿 1 +x:1 +怯场 1 +x:1 +漳平 1 +x:1 +隔板 1 +x:1 +阐述 1 +x:1 +哗众取宠 1 +x:1 +拒绝率 1 +x:1 +酋 1 +x:1 +总鳍鱼 1 +x:1 +团中央 1 +x:1 +十八时 1 +x:1 +嵌入式 1 +x:1 +穆斯林 1 +x:1 +结息 1 +x:1 +科索沃省 1 +x:1 +敌焰 1 +x:1 +蚕室 1 +x:1 +服务型 1 +x:1 +柞绢 1 +x:1 +刺史 1 +x:1 +磐安 1 +x:1 +乱石 1 +x:1 +电视大学 1 +x:1 +社科 1 +x:1 +一误再误 1 +x:1 +小春 1 +x:1 +刺参 1 +x:1 +毫无二致 1 +x:1 +纱厂 1 +x:1 +晨风 1 +x:1 +弱视者 1 +x:1 +宇宙尘 1 +x:1 +呼饥号寒 1 +x:1 +扁鱼 1 +x:1 +笔帽 1 +x:1 +服务员 1 +x:1 +救人 1 +x:1 +侍卫 1 +x:1 +社稷 1 +x:1 +兼学 1 +x:1 +萎陷疗法 1 +x:1 +桩桩 1 +x:1 +扭身 1 +x:1 +嵊州籍 1 +x:1 +中型机 1 +x:1 +复兴党 1 +x:1 +后继者 1 +x:1 +双曲面 1 +x:1 +琤 1 +x:1 +田字格 1 +x:1 +根深叶茂 1 +x:1 +公使 1 +x:1 +同床异梦 1 +x:1 +泠泠 1 +x:1 +肠管 1 +x:1 +肥嫩 1 +x:1 +体味 1 +x:1 +槟榔 1 +x:1 +行宫 1 +x:1 +行家 1 +x:1 +公众 1 +x:1 +月光 1 +x:1 +公休 1 +x:1 +昏然 1 +x:1 +升位 1 +x:1 +单亲 1 +x:1 +公会 1 +x:1 +菜价 1 +x:1 +七步之才 1 +x:1 +身败名裂 1 +x:1 +拆毁 1 +x:1 +揽胜 1 +x:1 +决定书 1 +x:1 +天街 1 +x:1 +原子武器 1 +x:1 +流放者 1 +x:1 +绚丽多姿 1 +x:1 +新币 1 +x:1 +海狸鼠 1 +x:1 +禅机 1 +x:1 +温水村 1 +x:1 +原形 1 +x:1 +木椅 1 +x:1 +舻舳蔽水 1 +x:1 +女星 1 +x:1 +专用纸 1 +x:1 +建设期 1 +x:1 +避其所短 1 +x:1 +专用线 1 +x:1 +矮子 1 +x:1 +志丹县 1 +x:1 +高档化 1 +x:1 +摆放 1 +x:1 +栽种 1 +x:1 +专用章 1 +x:1 +敌特 1 +x:1 +中童装 1 +x:1 +暴潮 1 +x:1 +没什么 1 +x:1 +调拨 1 +x:1 +电磁能 1 +x:1 +公修 1 +x:1 +馓子 1 +x:1 +容错性 1 +x:1 +泸定桥 1 +x:1 +刑讯室 1 +x:1 +木槎 1 +x:1 +内乡县 1 +x:1 +尿崩症 1 +x:1 +变性 1 +x:1 +先民 1 +x:1 +公例 1 +x:1 +抱负 1 +x:1 +兼容 1 +x:1 +玉带桥 1 +x:1 +遭受 1 +x:1 +胎 22 +x:22 +知详者 1 +x:1 +取食 1 +x:1 +吗啡 1 +x:1 +检查组 1 +x:1 +盛放 1 +x:1 +回来 1 +x:1 +非理性 1 +x:1 +既有线 1 +x:1 +相隔 1 +x:1 +偷 138 +x:138 +大河岸 1 +x:1 +恢复费 1 +x:1 +驾驶座 1 +x:1 +见怪 1 +x:1 +思贤若渴 1 +x:1 +脸红 1 +x:1 +梭 6 +x:6 +秘鲁 1 +x:1 +木桶 1 +x:1 +隔断 1 +x:1 +密集 1 +x:1 +服务商 1 +x:1 +国际歌 1 +x:1 +一方有难 1 +x:1 +攀高 1 +x:1 +木桥 1 +x:1 +排龙乡到 1 +x:1 +晚上 1 +x:1 +鉴定界 1 +x:1 +调换 1 +x:1 +面筋质 1 +x:1 +潜移默化 1 +x:1 +牡蛎 1 +x:1 +挟洋自重 1 +x:1 +肥实 1 +x:1 +贴 185 +x:185 +木桌 1 +x:1 +中继站 1 +x:1 +木框 1 +x:1 +费尽心机 1 +x:1 +锦绣河山 1 +x:1 +传习所 1 +x:1 +楚雄 1 +x:1 +简单易行 1 +x:1 +卫生化 1 +x:1 +池杉株 1 +x:1 +姓名牌 1 +x:1 +音乐界 1 +x:1 +转益多师 1 +x:1 +隔日 1 +x:1 +一言九鼎 1 +x:1 +走极端 1 +x:1 +口型 1 +x:1 +振聋发聩 1 +x:1 +史纲 1 +x:1 +秧 13 +x:13 +暖乎乎 1 +x:1 +机遇 1 +x:1 +原平 1 +x:1 +旨在 1 +x:1 +联盟党 1 +x:1 +捐款额 1 +x:1 +浴 10 +x:10 +大鼻子 1 +x:1 +感知 1 +x:1 +平度市 1 +x:1 +公主 1 +x:1 +木栅 1 +x:1 +公仆 1 +x:1 +棉垛 1 +x:1 +柱基 1 +x:1 +对立面 1 +x:1 +裤带 1 +x:1 +力不从心 1 +x:1 +工作科 1 +x:1 +五音不全 1 +x:1 +缎带 1 +x:1 +财政危机 1 +x:1 +小气鬼 1 +x:1 +押加 1 +x:1 +商业界 1 +x:1 +风险金 1 +x:1 +初涉 1 +x:1 +佩纳斯科 1 +x:1 +辉锑矿 1 +x:1 +军转民 1 +x:1 +窦 28 +x:28 +板栗 1 +x:1 +结成 1 +x:1 +岳麓山 1 +x:1 +欧安会 1 +x:1 +遭劫 1 +x:1 +肉豆蔻 1 +x:1 +团扇鳐 1 +x:1 +昌图县 1 +x:1 +木棉 1 +x:1 +曲解 1 +x:1 +垸 1 +x:1 +正门 1 +x:1 +杨家门 1 +x:1 +单件 1 +x:1 +叹息 1 +x:1 +木梳 1 +x:1 +维修站 1 +x:1 +公事 1 +x:1 +木梯 1 +x:1 +备要 1 +x:1 +女权 1 +x:1 +板桥 1 +x:1 +卫生厅 1 +x:1 +公产 1 +x:1 +公交 1 +x:1 +女板 1 +x:1 +单复数 1 +x:1 +单一化 1 +x:1 +河池市 1 +x:1 +女杰 1 +x:1 +调控 1 +x:1 +公亩 1 +x:1 +悉尼市 1 +x:1 +结扎 1 +x:1 +善恶 1 +x:1 +公人 1 +x:1 +笔心 1 +x:1 +航星队 1 +x:1 +卫生员 1 +x:1 +利息 1 +x:1 +秤钩 1 +x:1 +番茄丁 1 +x:1 +体制 1 +x:1 +昏睡 1 +x:1 +牺牲品 1 +x:1 +竞开 1 +x:1 +原处 1 +x:1 +古城子镇 1 +x:1 +农闲 1 +x:1 +梦湖 1 +x:1 +禁书 1 +x:1 +瓜州 1 +x:1 +涟水县 1 +x:1 +焊钳 1 +x:1 +开夜车 1 +x:1 +泄愤 1 +x:1 +熹 2 +x:2 +四季青村 1 +x:1 +胸章 1 +x:1 +农门 1 +x:1 +钻天猴 1 +x:1 +翁牛特旗 1 +x:1 +月坛 1 +x:1 +禅意 1 +x:1 +翰林 1 +x:1 +昏眩 1 +x:1 +浆 11 +x:11 +梦游 1 +x:1 +牺牲者 1 +x:1 +音乐版 1 +x:1 +三不做 1 +x:1 +质 120 +x:120 +加格拉 1 +x:1 +共济 1 +x:1 +目无余子 1 +x:1 +冒汗 1 +x:1 +引人入胜 1 +x:1 +服务制 1 +x:1 +童话国 1 +x:1 +汨罗 1 +x:1 +虚度年华 1 +x:1 +开饭 1 +x:1 +购画者 1 +x:1 +废物 1 +x:1 +时年 1 +x:1 +单性花 1 +x:1 +湾内 1 +x:1 +美其名曰 1 +x:1 +国际法 1 +x:1 +都匀 1 +x:1 +开馆 1 +x:1 +链轮 1 +x:1 +翩跹起舞 1 +x:1 +晴转多云 1 +x:1 +助贫 1 +x:1 +笔墨 1 +x:1 +货币率 1 +x:1 +搬运车 1 +x:1 +锦功 1 +x:1 +工作组 1 +x:1 +体力 1 +x:1 +善本 1 +x:1 +进贤县 1 +x:1 +叹服 1 +x:1 +老同事 1 +x:1 +起伏 1 +x:1 +无从谈起 1 +x:1 +舱门 1 +x:1 +赞成度 1 +x:1 +满目荆榛 1 +x:1 +帅印 1 +x:1 +路风 1 +x:1 +立法 1 +x:1 +江海区 1 +x:1 +紫苏 1 +x:1 +堰塘 1 +x:1 +目录厅 1 +x:1 +石龙子 1 +x:1 +工业学系 1 +x:1 +冒泡 1 +x:1 +评奖会 1 +x:1 +绚丽多彩 1 +x:1 +私货 1 +x:1 +飨 22 +x:22 +损害 1 +x:1 +马滴达乡 1 +x:1 +片尾 1 +x:1 +酹 1 +x:1 +隔扇 1 +x:1 +公之于众 1 +x:1 +中州韵 1 +x:1 +婿 1 +x:1 +参资 1 +x:1 +急弯 1 +x:1 +琼枝 1 +x:1 +笔头 1 +x:1 +岁首 1 +x:1 +娄烦县 1 +x:1 +万元郎 1 +x:1 +调教 1 +x:1 +甚焉者 1 +x:1 +通高 1 +x:1 +提兜 1 +x:1 +情理之中 1 +x:1 +结晶水 1 +x:1 +出言不逊 1 +x:1 +机防 1 +x:1 +洒脱 1 +x:1 +积累 1 +x:1 +横飞 1 +x:1 +匹配 1 +x:1 +庄禾集村 1 +x:1 +花斑癣 1 +x:1 +起事 1 +x:1 +绿茵茵 1 +x:1 +服务卡 1 +x:1 +虚设 1 +x:1 +机队 1 +x:1 +初次 1 +x:1 +纽 2 +x:2 +算式 1 +x:1 +出版量 1 +x:1 +开裆裤 1 +x:1 +飘泊者 1 +x:1 +虚词 1 +x:1 +敬老爱幼 1 +x:1 +观后感 1 +x:1 +斯尔比察 1 +x:1 +服务化 1 +x:1 +网球赛 1 +x:1 +海鞘 1 +x:1 +钻井工 1 +x:1 +铅中毒 1 +x:1 +天轴 1 +x:1 +平民化 1 +x:1 +起价 1 +x:1 +私费 1 +x:1 +虚诞 1 +x:1 +脏活 1 +x:1 +安葬地 1 +x:1 +天轮 1 +x:1 +专用票 1 +x:1 +应该 1 +x:1 +西红门镇 1 +x:1 +楼梯式 1 +x:1 +靳村乡 1 +x:1 +天车 1 +x:1 +板滞 1 +x:1 +序曲 1 +x:1 +亭榭 1 +x:1 +笔套 1 +x:1 +夏锄 1 +x:1 +高中层 1 +x:1 +初步 1 +x:1 +宗教学 1 +x:1 +外祖母 1 +x:1 +体协 1 +x:1 +应诉 1 +x:1 +锚喷 1 +x:1 +防护门 1 +x:1 +走读 1 +x:1 +天边 1 +x:1 +菲央行 1 +x:1 +棉农 1 +x:1 +廓落 1 +x:1 +陪伴 1 +x:1 +秤锤 1 +x:1 +单个 1 +x:1 +凉粉 1 +x:1 +银小丑 1 +x:1 +献辞 1 +x:1 +慧黠 1 +x:1 +医药品 1 +x:1 +开题 1 +x:1 +分散型 1 +x:1 +没落 1 +x:1 +踩高跷 1 +x:1 +空谷足音 1 +x:1 +初段 1 +x:1 +服务台 1 +x:1 +总统府 1 +x:1 +弧 3 +x:3 +百货大楼 1 +x:1 +台北县 1 +x:1 +臀部 1 +x:1 +印次 1 +x:1 +腌腊 1 +x:1 +评理 1 +x:1 +躲 70 +x:70 +绍兴戏 1 +x:1 +龙蟠虎踞 1 +x:1 +上周四 1 +x:1 +参赛 1 +x:1 +焊锡 1 +x:1 +培养液 1 +x:1 +泰顺县 1 +x:1 +顾主 1 +x:1 +常务董事 1 +x:1 +三不准 1 +x:1 +交叉步 1 +x:1 +禁例 1 +x:1 +盟 31 +x:31 +缺斤少两 1 +x:1 +俗世 1 +x:1 +调料 1 +x:1 +西东 1 +x:1 +服务厅 1 +x:1 +侥幸 1 +x:1 +失落感 1 +x:1 +馋嘴 1 +x:1 +瞻瞩 1 +x:1 +氯气 1 +x:1 +九月 1 +x:1 +行将 1 +x:1 +会理县 1 +x:1 +天远 1 +x:1 +贩毒 1 +x:1 +平方公里 1 +x:1 +起义 1 +x:1 +生殖细胞 1 +x:1 +电泵 1 +x:1 +急忙 1 +x:1 +喷雾器 1 +x:1 +公之于世 1 +x:1 +检查科 1 +x:1 +驾驶室 1 +x:1 +迪拜港 1 +x:1 +肥度 1 +x:1 +对抗战 1 +x:1 +时常 1 +x:1 +忽悠 1 +x:1 +庶人 1 +x:1 +木浦 1 +x:1 +初样 1 +x:1 +善断 1 +x:1 +夜鹰 1 +x:1 +肥床 1 +x:1 +人身 1 +x:1 +战书 1 +x:1 +够交情 1 +x:1 +沃壤 1 +x:1 +舱面 1 +x:1 +谈话人 1 +x:1 +群众关系 1 +x:1 +不同点 1 +x:1 +木浆 1 +x:1 +炔诺酮 1 +x:1 +避免 1 +x:1 +柘城 1 +x:1 +夜鸟 1 +x:1 +乡局级 1 +x:1 +机长 1 +x:1 +曲调 1 +x:1 +天象 1 +x:1 +威力 1 +x:1 +鹤立鸡群 1 +x:1 +国家队 1 +x:1 +商业点 1 +x:1 +田间 1 +x:1 +利津县 1 +x:1 +冰灯展 1 +x:1 +郁金香 1 +x:1 +胯 1 +x:1 +桌子 1 +x:1 +洗车业 1 +x:1 +隐情 1 +x:1 +衢州市 1 +x:1 +寿桃 1 +x:1 +领养者 1 +x:1 +威势 1 +x:1 +副处级 1 +x:1 +燥热 1 +x:1 +裕后村 1 +x:1 +原定 1 +x:1 +乒协杯 1 +x:1 +厂报 1 +x:1 +预料 1 +x:1 +何地 1 +x:1 +冬不拉 1 +x:1 +进修班 1 +x:1 +何在 1 +x:1 +有法可依 1 +x:1 +磁碟 1 +x:1 +极乐世界 1 +x:1 +花卉园 1 +x:1 +初来乍到 1 +x:1 +液体 1 +x:1 +移居 1 +x:1 +机械部 1 +x:1 +行当 1 +x:1 +量脑 1 +x:1 +圆珠笔 1 +x:1 +战争 1 +x:1 +寿棺 1 +x:1 +团体赛 1 +x:1 +席卷一空 1 +x:1 +丰宁县 1 +x:1 +软骨鱼 1 +x:1 +白果树 1 +x:1 +战云 1 +x:1 +盛意 1 +x:1 +兼得 1 +x:1 +结束 1 +x:1 +解危济困 1 +x:1 +操作法 1 +x:1 +宦官 1 +x:1 +羊价 1 +x:1 +摧折 1 +x:1 +住宿 1 +x:1 +相片儿 1 +x:1 +陇穷村 1 +x:1 +检查站 1 +x:1 +后坐力 1 +x:1 +兰溪 1 +x:1 +歹毒 1 +x:1 +裤子 1 +x:1 +静电感应 1 +x:1 +兼并 1 +x:1 +通风 1 +x:1 +全球化史 1 +x:1 +指示牌 1 +x:1 +卜少 1 +x:1 +口口 1 +x:1 +女排 1 +x:1 +无坐力炮 1 +x:1 +兴义市 1 +x:1 +观测仪 1 +x:1 +中研院 1 +x:1 +槐乡 1 +x:1 +盛情 1 +x:1 +环湖 1 +x:1 +社会保险 1 +x:1 +口号 1 +x:1 +宿诺 1 +x:1 +眠 13 +x:13 +棉区 1 +x:1 +扁骨 1 +x:1 +艺海 1 +x:1 +晓谕 1 +x:1 +秧盘 1 +x:1 +九日 1 +x:1 +赞成 1 +x:1 +粮棉油 1 +x:1 +单元楼 1 +x:1 +腌菜 1 +x:1 +流下 1 +x:1 +癫狂 1 +x:1 +拓扑图 1 +x:1 +青岛籍 1 +x:1 +手无分文 1 +x:1 +粟子 1 +x:1 +东顺城街 1 +x:1 +万三蹄 1 +x:1 +旗 89 +x:89 +物探队 1 +x:1 +挑动 1 +x:1 +中继线 1 +x:1 +叛离 1 +x:1 +抛妻别子 1 +x:1 +娱心 1 +x:1 +战伤 1 +x:1 +蒋坝镇 1 +x:1 +喳喳 1 +x:1 +天赋 1 +x:1 +歙县 1 +x:1 +环游 1 +x:1 +托辞 1 +x:1 +部内 1 +x:1 +天资 1 +x:1 +策略师 1 +x:1 +塑就 1 +x:1 +何去何从 1 +x:1 +用汽量 1 +x:1 +横驶 1 +x:1 +行年 1 +x:1 +卫生城 1 +x:1 +天趣 1 +x:1 +社群 1 +x:1 +阡 3 +x:3 +冷藏柜 1 +x:1 +挑剔 1 +x:1 +马哈林诺 1 +x:1 +烧火 1 +x:1 +弱化 1 +x:1 +难民潮 1 +x:1 +调查 1 +x:1 +通顺 1 +x:1 +异种 1 +x:1 +楹联厅 1 +x:1 +体内 1 +x:1 +舒眉展眼 1 +x:1 +勘测 1 +x:1 +金属框 1 +x:1 +羊肚蕈 1 +x:1 +行帮 1 +x:1 +普通人 1 +x:1 +结晶 1 +x:1 +杭菊 1 +x:1 +口区 1 +x:1 +标致 1 +x:1 +挪用 1 +x:1 +天路 1 +x:1 +三不变 1 +x:1 +防伪字 1 +x:1 +网球迷 1 +x:1 +误诊记 1 +x:1 +牺牲地 1 +x:1 +束流线 1 +x:1 +盐铁论 1 +x:1 +菇类 1 +x:1 +云南府 1 +x:1 +种鸽场 1 +x:1 +锚地 1 +x:1 +玻璃缸 1 +x:1 +蓦地 1 +x:1 +兼具 1 +x:1 +开销 1 +x:1 +羊皮纸 1 +x:1 +懒惰 1 +x:1 +开锅 1 +x:1 +掷杯 1 +x:1 +流风余韵 1 +x:1 +认认真真 1 +x:1 +损坏 1 +x:1 +天地人 1 +x:1 +宗派主义 1 +x:1 +台北市 1 +x:1 +何妨 1 +x:1 +侍女 1 +x:1 +邱吉尔 1 +x:1 +开错 1 +x:1 +混流式 1 +x:1 +开锣 1 +x:1 +船位 1 +x:1 +服务年 1 +x:1 +调档 1 +x:1 +草蜻蛉 1 +x:1 +侍奉 1 +x:1 +曲艺 1 +x:1 +初春 1 +x:1 +约定 1 +x:1 +塑厂 1 +x:1 +内毒素 1 +x:1 +船体 1 +x:1 +接龙舞 1 +x:1 +决战 1 +x:1 +宣化区 1 +x:1 +邈远 1 +x:1 +磁场环 1 +x:1 +区划图 1 +x:1 +急剧 1 +x:1 +天色 1 +x:1 +蚊子 1 +x:1 +竞卖 1 +x:1 +群臣 1 +x:1 +社火 1 +x:1 +伪证 1 +x:1 +军纪 1 +x:1 +浴衣 1 +x:1 +专品 1 +x:1 +开镜 1 +x:1 +竞升 1 +x:1 +挪窝 1 +x:1 +半元音 1 +x:1 +佛教徒 1 +x:1 +游乐 1 +x:1 +低碳钢 1 +x:1 +礼金 1 +x:1 +玻璃窗门 1 +x:1 +恰 65 +x:65 +国际性 1 +x:1 +操作手 1 +x:1 +非地震 1 +x:1 +行军 1 +x:1 +积灰 1 +x:1 +入网费 1 +x:1 +镁砂 1 +x:1 +麸皮 1 +x:1 +天花 1 +x:1 +地震仪 1 +x:1 +急务 1 +x:1 +社民党 1 +x:1 +家风 1 +x:1 +肥胖儿 1 +x:1 +工作狂 1 +x:1 +迹地 1 +x:1 +引桥 1 +x:1 +波峰浪谷 1 +x:1 +及格率 1 +x:1 +定界符 1 +x:1 +废纸 1 +x:1 +瞪 17 +x:17 +难预测性 1 +x:1 +月宫 1 +x:1 +机炮舱 1 +x:1 +卓有成就 1 +x:1 +老干部 1 +x:1 +何处 1 +x:1 +有名无实 1 +x:1 +一次方程 1 +x:1 +光导纤维 1 +x:1 +酪酸 1 +x:1 +糜子 1 +x:1 +拷问 1 +x:1 +十全十美 1 +x:1 +偶 21 +x:21 +桂圆 1 +x:1 +鹏 1679 +x:1679 +拉手连心 1 +x:1 +毛估估 1 +x:1 +石龙坑 1 +x:1 +龙泉驿区 1 +x:1 +朦朦 1 +x:1 +分至点 1 +x:1 +内切圆 1 +x:1 +配套件 1 +x:1 +润物无声 1 +x:1 +木排 1 +x:1 +开门 1 +x:1 +信任 1 +x:1 +连续光谱 1 +x:1 +开间 1 +x:1 +防沙林 1 +x:1 +开闸 1 +x:1 +寝食难安 1 +x:1 +壮烈 1 +x:1 +剑桥市 1 +x:1 +备荒 1 +x:1 +蚕卵 1 +x:1 +电工室 1 +x:1 +初期 1 +x:1 +兽医 1 +x:1 +盎司 1 +x:1 +原名 1 +x:1 +避暑 1 +x:1 +寿木 1 +x:1 +尖扎县 1 +x:1 +板报 1 +x:1 +小名儿 1 +x:1 +怒潮 1 +x:1 +不知所终 1 +x:1 +财政资本 1 +x:1 +懒懒 1 +x:1 +勘探 1 +x:1 +共总 1 +x:1 +基本面 1 +x:1 +套色版 1 +x:1 +镪水 1 +x:1 +空无所有 1 +x:1 +体式 1 +x:1 +共性 1 +x:1 +法律性 1 +x:1 +走老路 1 +x:1 +梆子 1 +x:1 +易拉罐 1 +x:1 +嘴皮子 1 +x:1 +纸面 1 +x:1 +出席证 1 +x:1 +束手就擒 1 +x:1 +井岸镇 1 +x:1 +船主 1 +x:1 +争论 1 +x:1 +原告 1 +x:1 +影视厅 1 +x:1 +怀德县 1 +x:1 +药液 1 +x:1 +船上 1 +x:1 +波澜不惊 1 +x:1 +肠炎 1 +x:1 +可接受性 1 +x:1 +寿材 1 +x:1 +废置 1 +x:1 +船东 1 +x:1 +雪绒花 1 +x:1 +爱因斯坦 1 +x:1 +结核 1 +x:1 +清 465 +x:465 +商业网 1 +x:1 +肖 319 +x:319 +负电荷 1 +x:1 +在手 1 +x:1 +黄巷楼 1 +x:1 +臀鳍 1 +x:1 +石牌岭 1 +x:1 +迷魂汤 1 +x:1 +贩枪 1 +x:1 +制作者 1 +x:1 +凉炎 1 +x:1 +夜里 1 +x:1 +林芝 1 +x:1 +案板 1 +x:1 +维修点 1 +x:1 +机务连 1 +x:1 +楼梯口 1 +x:1 +花青色 1 +x:1 +家兴业旺 1 +x:1 +助老 1 +x:1 +冬春季 1 +x:1 +老弱病残 1 +x:1 +预支 1 +x:1 +铭牌 1 +x:1 +电工学 1 +x:1 +漠河 1 +x:1 +考评制 1 +x:1 +沃土 1 +x:1 +水合物 1 +x:1 +香榧子 1 +x:1 +女流 1 +x:1 +耗电量 1 +x:1 +狡兔三窟 1 +x:1 +磊落 1 +x:1 +批量 1 +x:1 +多神教 1 +x:1 +钙华池 1 +x:1 +浅尝辄止 1 +x:1 +磁石 1 +x:1 +结案 1 +x:1 +挑射 1 +x:1 +余干县 1 +x:1 +堂姐 1 +x:1 +游离态 1 +x:1 +中立党 1 +x:1 +驾驶员 1 +x:1 +立陶宛队 1 +x:1 +滞纳 1 +x:1 +威立队 1 +x:1 +竞赛奖 1 +x:1 +月夜 1 +x:1 +山洪暴发 1 +x:1 +棉帐 1 +x:1 +鼎 11 +x:11 +办案 1 +x:1 +服务局 1 +x:1 +操作性 1 +x:1 +同乡会 1 +x:1 +信得过 1 +x:1 +棉布 1 +x:1 +神经性 1 +x:1 +平台车 1 +x:1 +审 76 +x:76 +花乡 1 +x:1 +棉帽 1 +x:1 +体尝 1 +x:1 +偏心轮 1 +x:1 +马来熊 1 +x:1 +不大不小 1 +x:1 +始于 1 +x:1 +原地 1 +x:1 +赶浪头 1 +x:1 +肥力 1 +x:1 +悉尼城 1 +x:1 +颜面 1 +x:1 +瘤子 1 +x:1 +医药学 1 +x:1 +备耕 1 +x:1 +打封闭 1 +x:1 +平金 1 +x:1 +中短期 1 +x:1 +万象纷呈 1 +x:1 +取道 1 +x:1 +辅料展 1 +x:1 +倡办 1 +x:1 +蚬子 1 +x:1 +招 164 +x:164 +工务段 1 +x:1 +原址 1 +x:1 +空页 1 +x:1 +竖形 1 +x:1 +夏津县 1 +x:1 +受审 1 +x:1 +器 3 +x:3 +轶事 1 +x:1 +主园区 1 +x:1 +东交民巷 1 +x:1 +秘闻 1 +x:1 +天职 1 +x:1 +兼并史 1 +x:1 +体层 1 +x:1 +打的 1 +x:1 +悉尼型 1 +x:1 +铿 7 +x:7 +梦想 1 +x:1 +中食协 1 +x:1 +授课费 1 +x:1 +宁为玉碎 1 +x:1 +泰山压顶 1 +x:1 +建章 1 +x:1 +高级品 1 +x:1 +敌穴 1 +x:1 +路障 1 +x:1 +原型 1 +x:1 +小水村 1 +x:1 +主干路 1 +x:1 +严严实实 1 +x:1 +纸钱 1 +x:1 +矛盾律 1 +x:1 +积犯 1 +x:1 +建立 1 +x:1 +花面狸 1 +x:1 +槌响 1 +x:1 +顶住 1 +x:1 +壁钱 1 +x:1 +两麦一薯 1 +x:1 +嘉陵区 1 +x:1 +经警 1 +x:1 +木江坪乡 1 +x:1 +兼及 1 +x:1 +吓人 1 +x:1 +危亡之渐 1 +x:1 +炸火腿肠 1 +x:1 +领唱 1 +x:1 +鼾声 1 +x:1 +险段 1 +x:1 +红红的 1 +x:1 +瑰宝 1 +x:1 +动物淀粉 1 +x:1 +消费不起 1 +x:1 +日榨量 1 +x:1 +拓扑学 1 +x:1 +行包 1 +x:1 +吃得来 1 +x:1 +闷嘴葫芦 1 +x:1 +儒林村 1 +x:1 +兰报 1 +x:1 +维修班 1 +x:1 +自然科学 1 +x:1 +逢凶化吉 1 +x:1 +射阳湖镇 1 +x:1 +特异 1 +x:1 +脸皮 1 +x:1 +平邑 1 +x:1 +追源溯流 1 +x:1 +临江会 1 +x:1 +热地 1 +x:1 +建湖县 1 +x:1 +执教 1 +x:1 +开阔 1 +x:1 +驳壳枪 1 +x:1 +刺头 1 +x:1 +凉爽 1 +x:1 +象棋界 1 +x:1 +友谊馆 1 +x:1 +铁二局 1 +x:1 +宛城 1 +x:1 +开阳 1 +x:1 +撵 9 +x:9 +通铺 1 +x:1 +喀斯特 1 +x:1 +以火救火 1 +x:1 +帮爱 1 +x:1 +建筑 1 +x:1 +卫生学 1 +x:1 +暮秋 1 +x:1 +煤炭厅 1 +x:1 +权力关 1 +x:1 +首位 1 +x:1 +剡溪 1 +x:1 +茂敦 1 +x:1 +行动 1 +x:1 +寿数 1 +x:1 +再生稻 1 +x:1 +脸相 1 +x:1 +决意 1 +x:1 +崇高 1 +x:1 +铺盖卷 1 +x:1 +国产马 1 +x:1 +淙淙 1 +x:1 +胀大 1 +x:1 +开除 1 +x:1 +身宽体胖 1 +x:1 +顶事 1 +x:1 +脸盆 1 +x:1 +路面 1 +x:1 +口径 1 +x:1 +淡而无味 1 +x:1 +脸盘 1 +x:1 +侧室 1 +x:1 +整 140 +x:140 +按钮 1 +x:1 +急兔 1 +x:1 +塑像 1 +x:1 +一干打手 1 +x:1 +口形 1 +x:1 +砍 118 +x:118 +省人大 1 +x:1 +古马乡 1 +x:1 +阴山 1 +x:1 +食宿费 1 +x:1 +钤印 1 +x:1 +水墨画 1 +x:1 +承台梁 1 +x:1 +被窝儿 1 +x:1 +行前 1 +x:1 +非智力 1 +x:1 +寿斑 1 +x:1 +包村组 1 +x:1 +外经委 1 +x:1 +阴间 1 +x:1 +综合厂 1 +x:1 +合成纤维 1 +x:1 +标志牌 1 +x:1 +体己 1 +x:1 +口弦 1 +x:1 +拂逆众意 1 +x:1 +剑 73 +x:73 +志如磐石 1 +x:1 +辛德勒 1 +x:1 +踉踉跄跄 1 +x:1 +宽宽的 1 +x:1 +椽檩 1 +x:1 +横行霸道 1 +x:1 +体工 1 +x:1 +赞助人 1 +x:1 +蚕农 1 +x:1 +横队 1 +x:1 +消极性 1 +x:1 +左翼 1 +x:1 +兼办 1 +x:1 +困兽犹斗 1 +x:1 +顶上 1 +x:1 +亮亮的 1 +x:1 +导 19 +x:19 +行列 1 +x:1 +吃独食 1 +x:1 +葵 5 +x:5 +糌粑 1 +x:1 +百强县 1 +x:1 +卫生室 1 +x:1 +平遥 1 +x:1 +原因 1 +x:1 +没趣 1 +x:1 +取阅 1 +x:1 +童话库 1 +x:1 +意识形态 1 +x:1 +滞销品 1 +x:1 +希 24 +x:24 +切肤之感 1 +x:1 +卫生局 1 +x:1 +木条 1 +x:1 +板枣 1 +x:1 +棉堆 1 +x:1 +清炖 1 +x:1 +歹意 1 +x:1 +卫生山 1 +x:1 +区划办 1 +x:1 +乒乓馆 1 +x:1 +转折点 1 +x:1 +小洞不补 1 +x:1 +颍泉区 1 +x:1 +禹 8 +x:8 +领导权 1 +x:1 +修辞格 1 +x:1 +孤孤单单 1 +x:1 +凤凰村 1 +x:1 +共教 1 +x:1 +天花板 1 +x:1 +忧容 1 +x:1 +永安路 1 +x:1 +擢升 1 +x:1 +低薪者 1 +x:1 +木本 1 +x:1 +原先 1 +x:1 +执政者 1 +x:1 +路道 1 +x:1 +匀称 1 +x:1 +阿巴丹 1 +x:1 +量词 1 +x:1 +回销粮 1 +x:1 +数理学 1 +x:1 +黄漠漠 1 +x:1 +俭 12 +x:12 +授课证 1 +x:1 +冷气团 1 +x:1 +自由党 1 +x:1 +悄无声息 1 +x:1 +调水 1 +x:1 +立正 1 +x:1 +造血式 1 +x:1 +木柱 1 +x:1 +木柴 1 +x:1 +参会者 1 +x:1 +服务嫂 1 +x:1 +来来回回 1 +x:1 +稀饭 1 +x:1 +张午乡 1 +x:1 +游息 1 +x:1 +行商 1 +x:1 +长治县 1 +x:1 +木柜 1 +x:1 +废弃物 1 +x:1 +凉白开 1 +x:1 +迢迢长路 1 +x:1 +照射 1 +x:1 +旅行社 1 +x:1 +页岩砖 1 +x:1 +女校 1 +x:1 +转播权 1 +x:1 +平静 1 +x:1 +低劣 1 +x:1 +开采 1 +x:1 +天蛾 1 +x:1 +临城县 1 +x:1 +木架 1 +x:1 +心里话 1 +x:1 +开金 1 +x:1 +高祖母 1 +x:1 +犟头犟脑 1 +x:1 +挑夫 1 +x:1 +樊西 1 +x:1 +猩红热 1 +x:1 +岳麓区 1 +x:1 +箱根 1 +x:1 +部 1366 +x:1366 +初露端倪 1 +x:1 +板材 1 +x:1 +宣布 1 +x:1 +裤兜 1 +x:1 +行唐 1 +x:1 +风光旖旎 1 +x:1 +平面 1 +x:1 +违犯 1 +x:1 +鸡蛋黄 1 +x:1 +剿 3 +x:3 +雨花台区 1 +x:1 +灰蒙蒙 1 +x:1 +豹猫 1 +x:1 +歉疚 1 +x:1 +英国队 1 +x:1 +同性恋者 1 +x:1 +操作机 1 +x:1 +调流 1 +x:1 +乘胜前进 1 +x:1 +用事 1 +x:1 +热作所 1 +x:1 +棉帐篷 1 +x:1 +挚诚 1 +x:1 +堰内 1 +x:1 +开通 1 +x:1 +医药局 1 +x:1 +钻井液 1 +x:1 +原值 1 +x:1 +排污口 1 +x:1 +左海平湖 1 +x:1 +它们 1 +x:1 +牛仔裤 1 +x:1 +推销嫂 1 +x:1 +增田町 1 +x:1 +大本营 1 +x:1 +万象新 1 +x:1 +夏常服 1 +x:1 +请君入瓮 1 +x:1 +暴洪 1 +x:1 +紫菜苔 1 +x:1 +尾砂滩 1 +x:1 +评议面 1 +x:1 +食品业 1 +x:1 +棉套 1 +x:1 +测出 1 +x:1 +开道 1 +x:1 +照耀 1 +x:1 +高级化 1 +x:1 +循循诱人 1 +x:1 +清徐县 1 +x:1 +木星 1 +x:1 +油类 1 +x:1 +勘查 1 +x:1 +曲里拐弯 1 +x:1 +收教所 1 +x:1 +调派 1 +x:1 +油籽 1 +x:1 +囤仓 1 +x:1 +紧要期 1 +x:1 +伴生 1 +x:1 +东滩矿 1 +x:1 +磕碰 1 +x:1 +平阔 1 +x:1 +河西乡 1 +x:1 +亚运会 1 +x:1 +核蛋白 1 +x:1 +挡边 1 +x:1 +生产观 1 +x:1 +止步不前 1 +x:1 +何尝 1 +x:1 +翁当村 1 +x:1 +晨钟 1 +x:1 +卫生巾 1 +x:1 +平阳 1 +x:1 +沃卡 1 +x:1 +土堆儿 1 +x:1 +磁环 1 +x:1 +平阴 1 +x:1 +初探 1 +x:1 +通鉴 1 +x:1 +曲蟮 1 +x:1 +月度 1 +x:1 +权力型 1 +x:1 +买壳 1 +x:1 +磁探仪 1 +x:1 +水文站 1 +x:1 +春秋季 1 +x:1 +起起浮浮 1 +x:1 +滦南县 1 +x:1 +厌烦感 1 +x:1 +南张家 1 +x:1 +平陆 1 +x:1 +大局观 1 +x:1 +口头 1 +x:1 +腻体 1 +x:1 +战战兢兢 1 +x:1 +兰新 1 +x:1 +第二产业 1 +x:1 +体察 1 +x:1 +宗教史 1 +x:1 +整体而言 1 +x:1 +世青赛 1 +x:1 +重婚案 1 +x:1 +培养料 1 +x:1 +虚荣 1 +x:1 +高度计 1 +x:1 +曲 252 +x:252 +兽医站 1 +x:1 +对象性 1 +x:1 +结汇 1 +x:1 +仪观 1 +x:1 +平除 1 +x:1 +茶素 1 +x:1 +出人命 1 +x:1 +通量 1 +x:1 +撇 6 +x:6 +晨露 1 +x:1 +眼泡 1 +x:1 +透明胶 1 +x:1 +两面三刀 1 +x:1 +乱码 1 +x:1 +郁郁而终 1 +x:1 +冒昧 1 +x:1 +倔 1 +x:1 +按量 1 +x:1 +老把式 1 +x:1 +板斧 1 +x:1 +保障费 1 +x:1 +超声波 1 +x:1 +恩德培 1 +x:1 +案情 1 +x:1 +肥胖型 1 +x:1 +枝万段 1 +x:1 +板料 1 +x:1 +狼心狗肺 1 +x:1 +修缮处 1 +x:1 +批阅 1 +x:1 +双星队 1 +x:1 +向心力 1 +x:1 +高炮旅 1 +x:1 +果蔬脆片 1 +x:1 +没辙 1 +x:1 +投劳折资 1 +x:1 +疤痕 1 +x:1 +猪油果 1 +x:1 +匾 16 +x:16 +年历片 1 +x:1 +竖子 1 +x:1 +机收队 1 +x:1 +天葬 1 +x:1 +驾驶台 1 +x:1 +虚胖 1 +x:1 +电排闸 1 +x:1 +初恋 1 +x:1 +纳米比亚 1 +x:1 +侍弄 1 +x:1 +办水 1 +x:1 +芽秧 1 +x:1 +伞架 1 +x:1 +素食 1 +x:1 +前瞻性 1 +x:1 +何必 1 +x:1 +愤懑 1 +x:1 +卫生带 1 +x:1 +笔势 1 +x:1 +按 1765 +x:1765 +九江 1 +x:1 +交叉性 1 +x:1 +办法 1 +x:1 +罚款额 1 +x:1 +译作 1 +x:1 +扩散 1 +x:1 +平销 1 +x:1 +讲话稿 1 +x:1 +徐海 1 +x:1 +箱橱 1 +x:1 +挑子 1 +x:1 +树碑立传 1 +x:1 +仰人鼻息 1 +x:1 +笔力 1 +x:1 +行址 1 +x:1 +撑开 1 +x:1 +军令状 1 +x:1 +林业站 1 +x:1 +国优 1 +x:1 +国会 1 +x:1 +青阳县 1 +x:1 +国企 1 +x:1 +教务处 1 +x:1 +突然性 1 +x:1 +引以为戒 1 +x:1 +虚职 1 +x:1 +小米粥 1 +x:1 +木方 1 +x:1 +妒贤嫉能 1 +x:1 +平镜 1 +x:1 +都镇湾镇 1 +x:1 +城近郊区 1 +x:1 +光学录音 1 +x:1 +飞身 1 +x:1 +批零 1 +x:1 +滚柱轴承 1 +x:1 +矍铄 1 +x:1 +木料 1 +x:1 +声援 1 +x:1 +国体 1 +x:1 +大家鼠 1 +x:1 +原被告 1 +x:1 +流体 1 +x:1 +直抒胸臆 1 +x:1 +唐河县 1 +x:1 +一·二一 1 +x:1 +佳木斯 1 +x:1 +畜牧业 1 +x:1 +原初 1 +x:1 +兰村 1 +x:1 +原创 1 +x:1 +剪纸片 1 +x:1 +原则 1 +x:1 +服务奖 1 +x:1 +晨阳 1 +x:1 +国人 1 +x:1 +国交 1 +x:1 +国产 1 +x:1 +平针 1 +x:1 +胆矾 1 +x:1 +一念之差 1 +x:1 +黄绒绒的 1 +x:1 +收录机 1 +x:1 +偏听则暗 1 +x:1 +最大化 1 +x:1 +缠 23 +x:23 +双楼乡 1 +x:1 +固态氢 1 +x:1 +体外 1 +x:1 +驴打滚 1 +x:1 +陡坡地 1 +x:1 +竞 66 +x:66 +建网 1 +x:1 +国事 1 +x:1 +赔不是 1 +x:1 +威宁 1 +x:1 +操作数 1 +x:1 +天后庙 1 +x:1 +身先士卒 1 +x:1 +痛哭声 1 +x:1 +不顾一切 1 +x:1 +神机妙算 1 +x:1 +服务处 1 +x:1 +加工业 1 +x:1 +冻伤 1 +x:1 +槌儿 1 +x:1 +六中全会 1 +x:1 +调演 1 +x:1 +通邮 1 +x:1 +肥城 1 +x:1 +恢复肥 1 +x:1 +近墨者黑 1 +x:1 +犬马 1 +x:1 +月山 1 +x:1 +银白色 1 +x:1 +为人师表 1 +x:1 +武装力量 1 +x:1 +偎倚 1 +x:1 +口实 1 +x:1 +废票 1 +x:1 +薄纱 1 +x:1 +解愁 1 +x:1 +对流层 1 +x:1 +道人 1 +x:1 +致富线 1 +x:1 +云南团 1 +x:1 +油桐花 1 +x:1 +输变电 1 +x:1 +调整面 1 +x:1 +善气 1 +x:1 +肥地 1 +x:1 +通道 1 +x:1 +鸡 160 +x:160 +疗养院 1 +x:1 +宣州市 1 +x:1 +原始群 1 +x:1 +指路标 1 +x:1 +实用性 1 +x:1 +肠癌 1 +x:1 +一二月 1 +x:1 +蕉源村 1 +x:1 +摧毁 1 +x:1 +凉皮 1 +x:1 +加工件 1 +x:1 +口子 1 +x:1 +考评员 1 +x:1 +叹气 1 +x:1 +执著 1 +x:1 +晨雾 1 +x:1 +何年 1 +x:1 +决斗 1 +x:1 +挡路 1 +x:1 +何干 1 +x:1 +国书 1 +x:1 +通通 1 +x:1 +通途 1 +x:1 +预见 1 +x:1 +拔河绳 1 +x:1 +本州 1 +x:1 +国乐 1 +x:1 +芤脉 1 +x:1 +体委 1 +x:1 +丰水期 1 +x:1 +俗趣 1 +x:1 +笔友 1 +x:1 +决断 1 +x:1 +植检证 1 +x:1 +夸父追日 1 +x:1 +摧残 1 +x:1 +舫 20 +x:20 +假眉三道 1 +x:1 +收摊儿 1 +x:1 +农科技术 1 +x:1 +棚舍 1 +x:1 +报送 1 +x:1 +新建户 1 +x:1 +问津者 1 +x:1 +滞洪办 1 +x:1 +休息室 1 +x:1 +起家 1 +x:1 +横跨 1 +x:1 +庚寅年 1 +x:1 +行政区划 1 +x:1 +赤豆粥 1 +x:1 +赞助商 1 +x:1 +布拖县 1 +x:1 +敌情 1 +x:1 +原始性 1 +x:1 +国军 1 +x:1 +国内 1 +x:1 +木筏 1 +x:1 +柴沟门村 1 +x:1 +船坞 1 +x:1 +虚情假意 1 +x:1 +拷贝 1 +x:1 +涉案人 1 +x:1 +芝麻秆 1 +x:1 +杨柳池 1 +x:1 +电烤箱 1 +x:1 +有天没日 1 +x:1 +宝匣 1 +x:1 +积案 1 +x:1 +领航 1 +x:1 +联营厂 1 +x:1 +道具 1 +x:1 +过年节 1 +x:1 +扫帚菜 1 +x:1 +平诊 1 +x:1 +食品包 1 +x:1 +测风站 1 +x:1 +开赛 1 +x:1 +顾客 1 +x:1 +组队 1 +x:1 +人民 1 +x:1 +孤 23 +x:23 +遥遥无期 1 +x:1 +钻天杨 1 +x:1 +掌心 1 +x:1 +苍头 1 +x:1 +呼之欲跃 1 +x:1 +永安里 1 +x:1 +木笔 1 +x:1 +俗家 1 +x:1 +开走 1 +x:1 +开赴 1 +x:1 +夏耘 1 +x:1 +认出 1 +x:1 +损伤 1 +x:1 +北园镇 1 +x:1 +陪嫁 1 +x:1 +主办权 1 +x:1 +蜡嘴 1 +x:1 +冻僵 1 +x:1 +定场诗 1 +x:1 +三叠系 1 +x:1 +徊 1 +x:1 +文学奖 1 +x:1 +盐都 1 +x:1 +俗字 1 +x:1 +臭气 1 +x:1 +荡气回肠 1 +x:1 +调整表 1 +x:1 +无支柱 1 +x:1 +战士 1 +x:1 +臭氧 1 +x:1 +公差 1 +x:1 +通车 1 +x:1 +脚下 1 +x:1 +初级 1 +x:1 +怡怡然 1 +x:1 +盗名欺世 1 +x:1 +花椰菜 1 +x:1 +功夫茶 1 +x:1 +天骄 1 +x:1 +涤痰开窍 1 +x:1 +虔州 1 +x:1 +国共 1 +x:1 +河西区 1 +x:1 +散步者 1 +x:1 +虏 1 +x:1 +无孔不入 1 +x:1 +横贯 1 +x:1 +何 1061 +x:1061 +食品厂 1 +x:1 +中政委 1 +x:1 +横财 1 +x:1 +州 148 +x:148 +国家股 1 +x:1 +船型 1 +x:1 +诱杀 1 +x:1 +波斯尼亚 1 +x:1 +开路 1 +x:1 +贪污罪 1 +x:1 +偎依 1 +x:1 +起子 1 +x:1 +钻天柳 1 +x:1 +检查法 1 +x:1 +木简 1 +x:1 +夜袭 1 +x:1 +六建 1 +x:1 +工委纪委 1 +x:1 +结点 1 +x:1 +石柱县 1 +x:1 +小摊 1 +x:1 +憋 28 +x:28 +公屋 1 +x:1 +直音 1 +x:1 +田园梦 1 +x:1 +操作符 1 +x:1 +数量型 1 +x:1 +甘 80 +x:80 +机舱 1 +x:1 +龟 54 +x:54 +葱头 1 +x:1 +播种人 1 +x:1 +雁栖湖 1 +x:1 +黛绿 1 +x:1 +路费 1 +x:1 +不足为凭 1 +x:1 +土建 1 +x:1 +郁 49 +x:49 +上虞市 1 +x:1 +开豁 1 +x:1 +绒头绳 1 +x:1 +芭蕉 1 +x:1 +冻儿 1 +x:1 +带宽 1 +x:1 +一官半职 1 +x:1 +牛派 1 +x:1 +乱杂 1 +x:1 +叱咤风云 1 +x:1 +吓唬 1 +x:1 +中花脸 1 +x:1 +齐心协力 1 +x:1 +翟 76 +x:76 +众口一声 1 +x:1 +界内 1 +x:1 +照相术 1 +x:1 +通身 1 +x:1 +普救寺 1 +x:1 +晚疫病 1 +x:1 +羊奶 1 +x:1 +结晶硅 1 +x:1 +乱来 1 +x:1 +门径 1 +x:1 +公尺 1 +x:1 +氯碱 1 +x:1 +机芯 1 +x:1 +女生 1 +x:1 +三元镇 1 +x:1 +动手动脚 1 +x:1 +国债 1 +x:1 +夜视 1 +x:1 +广货 1 +x:1 +不干不净 1 +x:1 +走向 1 +x:1 +尊师 1 +x:1 +网球馆 1 +x:1 +北 340 +x:340 +丰城市 1 +x:1 +夏至 1 +x:1 +脸水 1 +x:1 +永吉县 1 +x:1 +带子 1 +x:1 +本金额 1 +x:1 +坐堂义诊 1 +x:1 +嵩明县 1 +x:1 +达人知命 1 +x:1 +旦夕祸福 1 +x:1 +机械运动 1 +x:1 +昏招 1 +x:1 +办班 1 +x:1 +空包弹 1 +x:1 +诚心诚意 1 +x:1 +局长 1 +x:1 +臭活 1 +x:1 +棋盘坨 1 +x:1 +取证 1 +x:1 +凉棚 1 +x:1 +掀风鼓浪 1 +x:1 +扁豆 1 +x:1 +腋 1 +x:1 +窘态 1 +x:1 +决算 1 +x:1 +展期 1 +x:1 +华乐团 1 +x:1 +路距 1 +x:1 +挪挪 1 +x:1 +神采奕奕 1 +x:1 +开放日 1 +x:1 +路路 1 +x:1 +石龙乡 1 +x:1 +敌意 1 +x:1 +八 1394 +x:1394 +集体照 1 +x:1 +木窗 1 +x:1 +凤凰竹 1 +x:1 +积弱积贫 1 +x:1 +菜店 1 +x:1 +严重性 1 +x:1 +松山乡 1 +x:1 +各 4288 +x:4288 +打入冷宫 1 +x:1 +氢氧吹管 1 +x:1 +阵地化 1 +x:1 +拍巴掌 1 +x:1 +结环 1 +x:1 +训保 1 +x:1 +纯天然 1 +x:1 +女皇 1 +x:1 +借花献佛 1 +x:1 +通路 1 +x:1 +救应 1 +x:1 +亟盼 1 +x:1 +焊花 1 +x:1 +宋词 1 +x:1 +贝桑松 1 +x:1 +扩种 1 +x:1 +笔下 1 +x:1 +横过 1 +x:1 +同话异境 1 +x:1 +犍牛 1 +x:1 +观测室 1 +x:1 +国号 1 +x:1 +原作 1 +x:1 +秦齐郡 1 +x:1 +椴木 1 +x:1 +公开 1 +x:1 +国史 1 +x:1 +公式 1 +x:1 +女监 1 +x:1 +羽毛球队 1 +x:1 +评议表 1 +x:1 +李 8285 +x:8285 +邕宁县 1 +x:1 +原位 1 +x:1 +建房 1 +x:1 +外联司 1 +x:1 +对照表 1 +x:1 +平视 1 +x:1 +芭蕾 1 +x:1 +国发 1 +x:1 +总路线 1 +x:1 +九点 1 +x:1 +目无法纪 1 +x:1 +乱坟岗 1 +x:1 +铅刀一割 1 +x:1 +坂仔镇 1 +x:1 +粮垛 1 +x:1 +加工区 1 +x:1 +身处牢笼 1 +x:1 +建成 1 +x:1 +违法 1 +x:1 +道县 1 +x:1 +公心 1 +x:1 +醍醐灌顶 1 +x:1 +肌 6 +x:6 +国医 1 +x:1 +羔羊皮 1 +x:1 +俗套 1 +x:1 +局限 1 +x:1 +起头 1 +x:1 +菜市 1 +x:1 +案籍 1 +x:1 +尊崇 1 +x:1 +开辟 1 +x:1 +畜牧厅 1 +x:1 +敌手 1 +x:1 +接轨点 1 +x:1 +凉苏苏 1 +x:1 +闪闪烁烁 1 +x:1 +相间 1 +x:1 +声色犬马 1 +x:1 +辩证法观 1 +x:1 +农药 1 +x:1 +奉命唯谨 1 +x:1 +黑不溜秋 1 +x:1 +晨课 1 +x:1 +重臂 1 +x:1 +道号 1 +x:1 +界别 1 +x:1 +加工厂 1 +x:1 +事不宜迟 1 +x:1 +凑巧 1 +x:1 +取 270 +x:270 +道口 1 +x:1 +开进 1 +x:1 +祝 241 +x:241 +短篇小说 1 +x:1 +平西 1 +x:1 +金山岭 1 +x:1 +通货 1 +x:1 +猪倌 1 +x:1 +按质 1 +x:1 +保障金 1 +x:1 +北京籍 1 +x:1 +敌我 1 +x:1 +译丛 1 +x:1 +摇钱树 1 +x:1 +助人为乐 1 +x:1 +群策群力 1 +x:1 +贻祸无穷 1 +x:1 +适 32 +x:32 +反义词 1 +x:1 +贫血病 1 +x:1 +计量局 1 +x:1 +阿尔泰 1 +x:1 +国势 1 +x:1 +慨然 1 +x:1 +灵通卡 1 +x:1 +道别 1 +x:1 +国务 1 +x:1 +参变量 1 +x:1 +巡查 1 +x:1 +腥风血雨 1 +x:1 +训令 1 +x:1 +影视剧 1 +x:1 +笔会 1 +x:1 +前赴后继 1 +x:1 +榴弹 1 +x:1 +口是心非 1 +x:1 +国办 1 +x:1 +桃城区 1 +x:1 +国力 1 +x:1 +积欠 1 +x:1 +穿堂风 1 +x:1 +船员 1 +x:1 +吓坏 1 +x:1 +公平 1 +x:1 +机耕 1 +x:1 +夏荒 1 +x:1 +寄养 1 +x:1 +副词 1 +x:1 +柿饼 1 +x:1 +敌探 1 +x:1 +公布 1 +x:1 +运输车 1 +x:1 +感染 1 +x:1 +新声 1 +x:1 +钥匙牌 1 +x:1 +升幅 1 +x:1 +菜心 1 +x:1 +灵长类 1 +x:1 +樊集 1 +x:1 +平装 1 +x:1 +劳资处 1 +x:1 +单位制 1 +x:1 +升平 1 +x:1 +同年底 1 +x:1 +路轨 1 +x:1 +行李架 1 +x:1 +笔体 1 +x:1 +巡逻队 1 +x:1 +打理 1 +x:1 +出人预料 1 +x:1 +认养 1 +x:1 +天文学史 1 +x:1 +克己奉公 1 +x:1 +女真 1 +x:1 +丁字尺 1 +x:1 +废料 1 +x:1 +连环记 1 +x:1 +夜话 1 +x:1 +地政局 1 +x:1 +国际篇 1 +x:1 +保留区 1 +x:1 +文部大臣 1 +x:1 +升序 1 +x:1 +国别 1 +x:1 +局面 1 +x:1 +羹匙 1 +x:1 +脚踏实地 1 +x:1 +笔供 1 +x:1 +氢酸 1 +x:1 +国强民富 1 +x:1 +农艺 1 +x:1 +中盘 1 +x:1 +路边 1 +x:1 +原产 1 +x:1 +村务实情 1 +x:1 +秘谱 1 +x:1 +公建 1 +x:1 +监规 1 +x:1 +通谍 1 +x:1 +猪儿 1 +x:1 +批语 1 +x:1 +纤夫 1 +x:1 +路过 1 +x:1 +监视 1 +x:1 +忽略 1 +x:1 +机能 1 +x:1 +称职者 1 +x:1 +东亚区 1 +x:1 +顶嘴 1 +x:1 +曝光栏 1 +x:1 +平行 1 +x:1 +多层板 1 +x:1 +农舍 1 +x:1 +常州市 1 +x:1 +城口县 1 +x:1 +原价 1 +x:1 +原件 1 +x:1 +冻原 1 +x:1 +神经科 1 +x:1 +焊药 1 +x:1 +晓风 1 +x:1 +废旧 1 +x:1 +平衡 1 +x:1 +熟土 1 +x:1 +八方来客 1 +x:1 +战局 1 +x:1 +氢氧化铵 1 +x:1 +通话 1 +x:1 +平辈 1 +x:1 +令人注目 1 +x:1 +判决案 1 +x:1 +写 1717 +x:1717 +雄蕊 1 +x:1 +通译 1 +x:1 +开放性 1 +x:1 +林间地 1 +x:1 +升头 1 +x:1 +密致 1 +x:1 +金属管 1 +x:1 +结构力学 1 +x:1 +社民 1 +x:1 +强直性 1 +x:1 +谈仙岭 1 +x:1 +熟地 1 +x:1 +工日 1 +x:1 +三台山 1 +x:1 +井陉 1 +x:1 +龙旗 1 +x:1 +帮派 1 +x:1 +通读 1 +x:1 +积水 1 +x:1 +升天 1 +x:1 +顶冠 1 +x:1 +针叶树 1 +x:1 +批准权 1 +x:1 +纤度 1 +x:1 +劳身焦思 1 +x:1 +秘诀 1 +x:1 +战将 1 +x:1 +调理 1 +x:1 +肠液 1 +x:1 +枉费心机 1 +x:1 +漠然 1 +x:1 +新婚者 1 +x:1 +星系 1 +x:1 +感情 1 +x:1 +氢氧化钠 1 +x:1 +清明菜 1 +x:1 +治国安邦 1 +x:1 +蚕丝 1 +x:1 +北京站 1 +x:1 +井队 1 +x:1 +通讯 1 +x:1 +除冰液 1 +x:1 +吓倒 1 +x:1 +湟水 1 +x:1 +感想 1 +x:1 +牙周病 1 +x:1 +亏盈相抵 1 +x:1 +通论 1 +x:1 +缺吃少穿 1 +x:1 +史实性 1 +x:1 +攻坚仗 1 +x:1 +天麻 1 +x:1 +神经线 1 +x:1 +药料 1 +x:1 +决绝 1 +x:1 +盐铺 1 +x:1 +城固县 1 +x:1 +腰肢 1 +x:1 +转来转去 1 +x:1 +普通工 1 +x:1 +船台 1 +x:1 +带卧车 1 +x:1 +肿瘤性 1 +x:1 +感怀 1 +x:1 +热泵 1 +x:1 +急于 1 +x:1 +相提并论 1 +x:1 +交存人 1 +x:1 +急事 1 +x:1 +道喜 1 +x:1 +暮春 1 +x:1 +搜 18 +x:18 +安太堡 1 +x:1 +感性 1 +x:1 +更正 1 +x:1 +流水账 1 +x:1 +卅 1 +x:1 +拍打 1 +x:1 +勤政为民 1 +x:1 +可选择性 1 +x:1 +社会意识 1 +x:1 +约法三章 1 +x:1 +奶嘴 1 +x:1 +江门 1 +x:1 +急件 1 +x:1 +开解 1 +x:1 +计量室 1 +x:1 +串串 1 +x:1 +永安镇 1 +x:1 +船厂 1 +x:1 +美展 1 +x:1 +界限路 1 +x:1 +唱红脸 1 +x:1 +国商 1 +x:1 +出版者 1 +x:1 +感恩 1 +x:1 +腹 18 +x:18 +那么些 1 +x:1 +抽穗期 1 +x:1 +平车 1 +x:1 +证人 1 +x:1 +清明节 1 +x:1 +三元里 1 +x:1 +远嫁 1 +x:1 +矿物质 1 +x:1 +瓦哈卡 1 +x:1 +凉气 1 +x:1 +局里 1 +x:1 +山光水色 1 +x:1 +升堂 1 +x:1 +少先队员 1 +x:1 +平躺 1 +x:1 +入籍 1 +x:1 +没白没黑 1 +x:1 +小马青村 1 +x:1 +大喜之日 1 +x:1 +大丽花 1 +x:1 +青岛港 1 +x:1 +起床 1 +x:1 +设计量 1 +x:1 +以毒攻毒 1 +x:1 +建教 1 +x:1 +僚机 1 +x:1 +危城 1 +x:1 +沿儿 1 +x:1 +燕麦草 1 +x:1 +小方帽 1 +x:1 +公堂 1 +x:1 +巴拿马籍 1 +x:1 +贫血率 1 +x:1 +婚姻法 1 +x:1 +步步为营 1 +x:1 +开行 1 +x:1 +芝麻糖 1 +x:1 +郁南 1 +x:1 +单位名 1 +x:1 +初等 1 +x:1 +敌方 1 +x:1 +昏昏 1 +x:1 +乡镇长 1 +x:1 +带徒 1 +x:1 +调用 1 +x:1 +预期 1 +x:1 +竞买 1 +x:1 +板结 1 +x:1 +神经网 1 +x:1 +周庄镇 1 +x:1 +加油机 1 +x:1 +不祧之祖 1 +x:1 +市声鼎沸 1 +x:1 +欧委会 1 +x:1 +选煤厂 1 +x:1 +防卫厅 1 +x:1 +数量化 1 +x:1 +五彩缤纷 1 +x:1 +六安 1 +x:1 +加工品 1 +x:1 +竞争 1 +x:1 +珠海市 1 +x:1 +种族歧视 1 +x:1 +天龙 1 +x:1 +一整两反 1 +x:1 +知识库 1 +x:1 +国君 1 +x:1 +横行 1 +x:1 +氢氧化镍 1 +x:1 +恒心 1 +x:1 +国名 1 +x:1 +泗阳 1 +x:1 +臭椿 1 +x:1 +国后 1 +x:1 +苦尽甘来 1 +x:1 +开裂 1 +x:1 +养老金 1 +x:1 +木纹 1 +x:1 +猪场 1 +x:1 +船务 1 +x:1 +长者团 1 +x:1 +路规 1 +x:1 +填垫地 1 +x:1 +相容 1 +x:1 +积淀 1 +x:1 +君权 1 +x:1 +合拢 1 +x:1 +弊政 1 +x:1 +澄北镇 1 +x:1 +始兴 1 +x:1 +清热解暑 1 +x:1 +拳联 1 +x:1 +此画 1 +x:1 +纤弱 1 +x:1 +丧德败行 1 +x:1 +法律系 1 +x:1 +桩 66 +x:66 +辨证 1 +x:1 +厉害 1 +x:1 +始先 1 +x:1 +大容山 1 +x:1 +响起 1 +x:1 +急促 1 +x:1 +竞价 1 +x:1 +质检站 1 +x:1 +佛口蛇心 1 +x:1 +感慨 1 +x:1 +昏暗 1 +x:1 +羊工 1 +x:1 +一二级 1 +x:1 +道场 1 +x:1 +通览 1 +x:1 +船公 1 +x:1 +助攻王 1 +x:1 +茼蒿 1 +x:1 +通观 1 +x:1 +郊区县 1 +x:1 +主发射机 1 +x:1 +晚生代 1 +x:1 +顶叶 1 +x:1 +振兴中华 1 +x:1 +私见 1 +x:1 +羊市 1 +x:1 +战幕 1 +x:1 +公学 1 +x:1 +车载式 1 +x:1 +积温 1 +x:1 +淤土 1 +x:1 +平足 1 +x:1 +打工妹 1 +x:1 +老板娘 1 +x:1 +卧铺车 1 +x:1 +毛乌素 1 +x:1 +舸 42 +x:42 +鱼儿沟 1 +x:1 +音乐性 1 +x:1 +评头论足 1 +x:1 +硬茬地 1 +x:1 +因人施教 1 +x:1 +拱石桥 1 +x:1 +神经类 1 +x:1 +结石 1 +x:1 +毛驴车 1 +x:1 +一串红 1 +x:1 +竣 2 +x:2 +尊姓 1 +x:1 +铁背鱼 1 +x:1 +隔热 1 +x:1 +船儿 1 +x:1 +道高一尺 1 +x:1 +柚子 1 +x:1 +办理 1 +x:1 +扬子江 1 +x:1 +一拥而上 1 +x:1 +羊年 1 +x:1 +断裂带 1 +x:1 +心潮难平 1 +x:1 +茶卤儿 1 +x:1 +升学 1 +x:1 +隐私 1 +x:1 +加工场 1 +x:1 +绿泥石 1 +x:1 +时兴 1 +x:1 +互动性 1 +x:1 +通产相 1 +x:1 +计划单列 1 +x:1 +喂 75 +x:75 +银条菜 1 +x:1 +报酬 1 +x:1 +枣椰林 1 +x:1 +形影相对 1 +x:1 +博格达峰 1 +x:1 +发愤图强 1 +x:1 +赞扬声 1 +x:1 +公寓 1 +x:1 +电磁铁 1 +x:1 +行使 1 +x:1 +网络结构 1 +x:1 +扇贝丁 1 +x:1 +乙方 1 +x:1 +郧西县 1 +x:1 +机械能 1 +x:1 +善用 1 +x:1 +晰 1 +x:1 +硕大无比 1 +x:1 +厉声 1 +x:1 +国土 1 +x:1 +开讲 1 +x:1 +肥东 1 +x:1 +晨辉 1 +x:1 +辐射 1 +x:1 +肥业 1 +x:1 +爱沙尼亚 1 +x:1 +开设 1 +x:1 +废坑塘 1 +x:1 +合股 1 +x:1 +开评 1 +x:1 +加工型 1 +x:1 +开诊 1 +x:1 +圆锥花序 1 +x:1 +公安 1 +x:1 +南锣鼓巷 1 +x:1 +甘之如饴 1 +x:1 +磁棒 1 +x:1 +尊奉 1 +x:1 +兼并体 1 +x:1 +不廉则败 1 +x:1 +十八年 1 +x:1 +千层饼 1 +x:1 +纤小 1 +x:1 +打工女 1 +x:1 +党员秤 1 +x:1 +俦 1 +x:1 +喜迎春 1 +x:1 +急危难 1 +x:1 +湘剧团 1 +x:1 +奶名 1 +x:1 +平方和 1 +x:1 +公家 1 +x:1 +商丘 1 +x:1 +国际级 1 +x:1 +云梢 1 +x:1 +公害 1 +x:1 +纤尘 1 +x:1 +大势已去 1 +x:1 +商业性 1 +x:1 +洗车店 1 +x:1 +公婆 1 +x:1 +寿礼 1 +x:1 +音乐感 1 +x:1 +纤巧 1 +x:1 +畏缩不前 1 +x:1 +云梦 1 +x:1 +片区 1 +x:1 +郏县 1 +x:1 +坚不可摧 1 +x:1 +殓 1 +x:1 +谒 7 +x:7 +皮乌拉省 1 +x:1 +铁刷把 1 +x:1 +满堂喝彩 1 +x:1 +空心菜 1 +x:1 +傅村 1 +x:1 +六大 1 +x:1 +油漆匠 1 +x:1 +致富星 1 +x:1 +夜车 1 +x:1 +变色镜 1 +x:1 +战役 1 +x:1 +界域 1 +x:1 +食管癌 1 +x:1 +建材 1 +x:1 +触摸池 1 +x:1 +案秤 1 +x:1 +吃哑巴亏 1 +x:1 +引吭高歌 1 +x:1 +装机费 1 +x:1 +多方面 1 +x:1 +批转 1 +x:1 +冻场 1 +x:1 +风剥雨蚀 1 +x:1 +公开墙 1 +x:1 +电磁锁 1 +x:1 +暴力式 1 +x:1 +行人 1 +x:1 +滑翔 1 +x:1 +结盟 1 +x:1 +趁 55 +x:55 +护照者 1 +x:1 +路警 1 +x:1 +冻土 1 +x:1 +行事 1 +x:1 +磕打 1 +x:1 +党学委 1 +x:1 +拍拍 1 +x:1 +始发 1 +x:1 +新宁 1 +x:1 +骗子手 1 +x:1 +氯纶 1 +x:1 +问卷 1 +x:1 +总面积 1 +x:1 +通行 1 +x:1 +忽然 1 +x:1 +软骨质 1 +x:1 +夜运 1 +x:1 +拼盘式 1 +x:1 +恭 5 +x:5 +绿城 1 +x:1 +兼任 1 +x:1 +沿台 1 +x:1 +药衡 1 +x:1 +原始林 1 +x:1 +皖 32 +x:32 +环绕 1 +x:1 +丁字堤 1 +x:1 +非司机 1 +x:1 +柏树林 1 +x:1 +词曲牌 1 +x:1 +含羞带笑 1 +x:1 +攀附 1 +x:1 +憋屈 1 +x:1 +平谷 1 +x:1 +通衢 1 +x:1 +难民署 1 +x:1 +界块 1 +x:1 +白云观 1 +x:1 +针织物 1 +x:1 +行乞 1 +x:1 +蛋鸡场 1 +x:1 +肺 31 +x:31 +海商法 1 +x:1 +座上宾 1 +x:1 +肥佬 1 +x:1 +警察局 1 +x:1 +菜子 1 +x:1 +偷猎者 1 +x:1 +养殖链 1 +x:1 +火花塞 1 +x:1 +定海神针 1 +x:1 +谈话录 1 +x:1 +寡人 1 +x:1 +敌机 1 +x:1 +国器 1 +x:1 +初秋 1 +x:1 +游戏 1 +x:1 +起居 1 +x:1 +参政 1 +x:1 +建构 1 +x:1 +阀门 1 +x:1 +写字楼 1 +x:1 +环线 1 +x:1 +贩私 1 +x:1 +行东 1 +x:1 +驰名中外 1 +x:1 +警察厅 1 +x:1 +饼饵 1 +x:1 +第十甫路 1 +x:1 +察言观色 1 +x:1 +中产阶级 1 +x:1 +夏衣 1 +x:1 +取舍 1 +x:1 +建档 1 +x:1 +地铁票 1 +x:1 +昏死 1 +x:1 +分流港 1 +x:1 +凉意 1 +x:1 +一二点 1 +x:1 +隐瞒 1 +x:1 +铁锈病 1 +x:1 +史册 1 +x:1 +道外 1 +x:1 +知识化 1 +x:1 +副肾 1 +x:1 +顾及 1 +x:1 +计征科 1 +x:1 +被救者 1 +x:1 +坂子矶 1 +x:1 +工务科 1 +x:1 +废渣 1 +x:1 +自习室 1 +x:1 +通融 1 +x:1 +带劲 1 +x:1 +道好 1 +x:1 +奥斯马奇 1 +x:1 +煤车 1 +x:1 +机警 1 +x:1 +服务业 1 +x:1 +先拔头筹 1 +x:1 +壁虎 1 +x:1 +豇豆 1 +x:1 +打翻身仗 1 +x:1 +办税 1 +x:1 +菜品 1 +x:1 +带动 1 +x:1 +平菇 1 +x:1 +玉渊潭 1 +x:1 +示意图 1 +x:1 +挡驾 1 +x:1 +行唐县 1 +x:1 +唱高调 1 +x:1 +泣 11 +x:11 +隔绝 1 +x:1 +米非司酮 1 +x:1 +毛刺儿 1 +x:1 +无油迹 1 +x:1 +金属矿 1 +x:1 +建树 1 +x:1 +礁 2 +x:2 +西湖调 1 +x:1 +结社 1 +x:1 +参拜 1 +x:1 +客场 1 +x:1 +青苗费 1 +x:1 +金灿灿 1 +x:1 +清热解毒 1 +x:1 +肘子 1 +x:1 +沛 4 +x:4 +铂 4 +x:4 +戴罪立功 1 +x:1 +如梦初醒 1 +x:1 +赫拉特 1 +x:1 +国外 1 +x:1 +墨绿色 1 +x:1 +狐狸崽 1 +x:1 +打工地 1 +x:1 +格拉斯哥 1 +x:1 +夏装 1 +x:1 +枪 91 +x:91 +一体 1 +x:1 +宅子 1 +x:1 +体事 1 +x:1 +蓄谋已久 1 +x:1 +磁暴 1 +x:1 +建棚 1 +x:1 +总 1962 +x:1962 +熟客 1 +x:1 +兔王 1 +x:1 +带到 1 +x:1 +虽说 1 +x:1 +待人接物 1 +x:1 +组 600 +x:600 +阿杜瓦 1 +x:1 +沿岸 1 +x:1 +伴奏声 1 +x:1 +招生办 1 +x:1 +救命 1 +x:1 +不务正业 1 +x:1 +闪石 1 +x:1 +呼啦啦 1 +x:1 +簪缨 1 +x:1 +烂乎乎 1 +x:1 +切肤之痛 1 +x:1 +共生矿 1 +x:1 +手枪钻 1 +x:1 +民主刚果 1 +x:1 +求本溯源 1 +x:1 +吕梁 1 +x:1 +道姑 1 +x:1 +冒烟 1 +x:1 +兰炼 1 +x:1 +暂住地 1 +x:1 +行李袋 1 +x:1 +苟同 1 +x:1 +袁巷乡 1 +x:1 +防护衣 1 +x:1 +乒乓赛 1 +x:1 +六国 1 +x:1 +拐弯抹角 1 +x:1 +七月份 1 +x:1 +煤运 1 +x:1 +杂物箱 1 +x:1 +冒然 1 +x:1 +平芜 1 +x:1 +轧钢线 1 +x:1 +板状 1 +x:1 +淤积 1 +x:1 +公告 1 +x:1 +起动 1 +x:1 +顶峰 1 +x:1 +风流韵事 1 +x:1 +起劲 1 +x:1 +嘶嘶 1 +x:1 +兵库县 1 +x:1 +八机部 1 +x:1 +奢侈浪费 1 +x:1 +书画集 1 +x:1 +字帖儿 1 +x:1 +更替 1 +x:1 +剪辑 1 +x:1 +肿骨鹿 1 +x:1 +计量器 1 +x:1 +牛溲马勃 1 +x:1 +维修性 1 +x:1 +国境 1 +x:1 +为 28856 +x:28856 +战具 1 +x:1 +霭空 1 +x:1 +整合率 1 +x:1 +船帮 1 +x:1 +党八股 1 +x:1 +出土文物 1 +x:1 +用餐费 1 +x:1 +星系团 1 +x:1 +随州市 1 +x:1 +告示牌 1 +x:1 +国士 1 +x:1 +磁条 1 +x:1 +人影儿 1 +x:1 +四乡八村 1 +x:1 +周四 1 +x:1 +一举 1 +x:1 +榕树 1 +x:1 +船帆 1 +x:1 +体位 1 +x:1 +顶岗 1 +x:1 +形影相吊 1 +x:1 +禁区 1 +x:1 +伽师 1 +x:1 +自营率 1 +x:1 +磁极 1 +x:1 +犹豫 1 +x:1 +鸽子花 1 +x:1 +单冷型 1 +x:1 +不足为奇 1 +x:1 +供联财字 1 +x:1 +摆设 1 +x:1 +歉意 1 +x:1 +起到 1 +x:1 +敌楼 1 +x:1 +黄土层 1 +x:1 +克什米尔 1 +x:1 +寄居蟹 1 +x:1 +顶层 1 +x:1 +濒危种 1 +x:1 +宪法学 1 +x:1 +恒发 1 +x:1 +知己 1 +x:1 +体例 1 +x:1 +电气化 1 +x:1 +关门主义 1 +x:1 +起初 1 +x:1 +第四营村 1 +x:1 +开开心 1 +x:1 +秀 21 +x:21 +逐项 1 +x:1 +形体 1 +x:1 +九运会 1 +x:1 +轻蔑 1 +x:1 +榜样性 1 +x:1 +菜商 1 +x:1 +没顶 1 +x:1 +密谈 1 +x:1 +基础代谢 1 +x:1 +密谋 1 +x:1 +慨当以慷 1 +x:1 +油漆工 1 +x:1 +软着陆 1 +x:1 +大眼贼 1 +x:1 +板牙 1 +x:1 +胁迫 1 +x:1 +自卫军 1 +x:1 +虚靡 1 +x:1 +调离 1 +x:1 +织物 1 +x:1 +顶尖 1 +x:1 +府南河 1 +x:1 +卢森堡 1 +x:1 +木犁 1 +x:1 +船底 1 +x:1 +战况 1 +x:1 +新沂市 1 +x:1 +国宴 1 +x:1 +国家 1 +x:1 +棉丝 1 +x:1 +射 86 +x:86 +煤质 1 +x:1 +不足挂齿 1 +x:1 +闪电 1 +x:1 +射戟台 1 +x:1 +农话 1 +x:1 +隐疾 1 +x:1 +六合 1 +x:1 +绵竹县 1 +x:1 +口令 1 +x:1 +鸩 1 +x:1 +楚辞 1 +x:1 +观测台 1 +x:1 +民政局长 1 +x:1 +调门儿 1 +x:1 +评议者 1 +x:1 +躲藏 1 +x:1 +夜色 1 +x:1 +扯动 1 +x:1 +国宝 1 +x:1 +逐村逐户 1 +x:1 +废水 1 +x:1 +结算 1 +x:1 +常州城 1 +x:1 +国宅 1 +x:1 +知州 1 +x:1 +困苦 1 +x:1 +楚边 1 +x:1 +社戏 1 +x:1 +女红 1 +x:1 +通力合作 1 +x:1 +房地产商 1 +x:1 +纳—卡 1 +x:1 +欢迎会 1 +x:1 +战刀 1 +x:1 +救国 1 +x:1 +建模 1 +x:1 +红果儿 1 +x:1 +竖体 1 +x:1 +祁东县 1 +x:1 +麦迪逊县 1 +x:1 +始建 1 +x:1 +护照费 1 +x:1 +道学 1 +x:1 +备选 1 +x:1 +麦收区 1 +x:1 +隐痛 1 +x:1 +天道 1 +x:1 +道子 1 +x:1 +更新 1 +x:1 +染色体 1 +x:1 +宝山镇 1 +x:1 +硕大无朋 1 +x:1 +冒牌 1 +x:1 +菜园 1 +x:1 +夜航 1 +x:1 +菲律宾 1 +x:1 +槐叶 1 +x:1 +白关镇 1 +x:1 +不毛之地 1 +x:1 +船工 1 +x:1 +道家 1 +x:1 +害人不浅 1 +x:1 +顾全 1 +x:1 +专卖柜 1 +x:1 +建材计 1 +x:1 +管理部 1 +x:1 +铭感 1 +x:1 +冒犯 1 +x:1 +快马加鞭 1 +x:1 +相称 1 +x:1 +恭恭敬敬 1 +x:1 +安定感 1 +x:1 +浔江 1 +x:1 +废油 1 +x:1 +中微子 1 +x:1 +留有余地 1 +x:1 +机要 1 +x:1 +铁板大鼓 1 +x:1 +道教徒 1 +x:1 +襟江带湖 1 +x:1 +科协组 1 +x:1 +抽屉式 1 +x:1 +秧歌 1 +x:1 +茅舍 1 +x:1 +玉垒 1 +x:1 +春小麦 1 +x:1 +忽米 1 +x:1 +呈递 1 +x:1 +一日千里 1 +x:1 +帆板 1 +x:1 +腌鸭 1 +x:1 +缀染 1 +x:1 +起兵 1 +x:1 +国学 1 +x:1 +已往 1 +x:1 +战功 1 +x:1 +论证关 1 +x:1 +守财奴 1 +x:1 +呈送 1 +x:1 +取胜 1 +x:1 +弥留之际 1 +x:1 +懦 1 +x:1 +环环 1 +x:1 +棚菜 1 +x:1 +导弹艇 1 +x:1 +威严 1 +x:1 +早先 1 +x:1 +更改 1 +x:1 +棉价 1 +x:1 +挡风 1 +x:1 +瞒哄 1 +x:1 +特出 1 +x:1 +志愿 1 +x:1 +甘露园 1 +x:1 +草刺儿 1 +x:1 +喜冲冲 1 +x:1 +曲酒 1 +x:1 +初生 1 +x:1 +翼手目 1 +x:1 +横蛮 1 +x:1 +论证会 1 +x:1 +活命钱 1 +x:1 +轮休 1 +x:1 +槎溪镇 1 +x:1 +纳巴提亚 1 +x:1 +致癌物 1 +x:1 +计量员 1 +x:1 +威信 1 +x:1 +东不压桥 1 +x:1 +红三军团 1 +x:1 +凉房 1 +x:1 +湾仔 1 +x:1 +务工卡 1 +x:1 +黛瓦 1 +x:1 +侵略军 1 +x:1 +扎伊尔 1 +x:1 +凑合 1 +x:1 +饮茶观 1 +x:1 +暴力化 1 +x:1 +帮手 1 +x:1 +来龙去脉 1 +x:1 +黑老九 1 +x:1 +游离状 1 +x:1 +一二 1 +x:1 +船尾 1 +x:1 +残篇断简 1 +x:1 +调笑 1 +x:1 +锦囊 1 +x:1 +感激 1 +x:1 +美容 1 +x:1 +奶妈 1 +x:1 +依依惜别 1 +x:1 +育苗 1 +x:1 +决然 1 +x:1 +伞状 1 +x:1 +检查权 1 +x:1 +口供 1 +x:1 +专用权 1 +x:1 +顶底 1 +x:1 +责任事故 1 +x:1 +土里土气 1 +x:1 +界定 1 +x:1 +帮扶 1 +x:1 +阶段 1 +x:1 +战友 1 +x:1 +茅草 1 +x:1 +带兵 1 +x:1 +毁誉 1 +x:1 +简谐运动 1 +x:1 +热滚滚 1 +x:1 +中趾 1 +x:1 +带入 1 +x:1 +奶奶 1 +x:1 +邮民 1 +x:1 +功能区 1 +x:1 +电烤灯 1 +x:1 +平者 1 +x:1 +加冕礼 1 +x:1 +蒋李集镇 1 +x:1 +公团 1 +x:1 +菜地 1 +x:1 +公园 1 +x:1 +菜场 1 +x:1 +防患未然 1 +x:1 +新婚 1 +x:1 +国威 1 +x:1 +战史 1 +x:1 +相互作用 1 +x:1 +公国 1 +x:1 +凑和 1 +x:1 +政 123 +x:123 +杨柳枝 1 +x:1 +冻害 1 +x:1 +夏训 1 +x:1 +天文学家 1 +x:1 +女网 1 +x:1 +口传 1 +x:1 +冷藏箱 1 +x:1 +储存 1 +x:1 +集约型 1 +x:1 +凉拌 1 +x:1 +忌辰 1 +x:1 +木炭 1 +x:1 +禁军 1 +x:1 +釜 1 +x:1 +动力学家 1 +x:1 +松坪村 1 +x:1 +葱叶 1 +x:1 +歌会 1 +x:1 +抹布 1 +x:1 +案由 1 +x:1 +捐款者 1 +x:1 +治外法权 1 +x:1 +地膜棉 1 +x:1 +汉堡包 1 +x:1 +呼风唤雨 1 +x:1 +汤阴县 1 +x:1 +环状 1 +x:1 +商用化 1 +x:1 +三台县 1 +x:1 +羊口 1 +x:1 +安非他明 1 +x:1 +隐现 1 +x:1 +红其拉甫 1 +x:1 +公元 1 +x:1 +公允 1 +x:1 +寿爷 1 +x:1 +草莽英雄 1 +x:1 +黄庄村 1 +x:1 +浑然不觉 1 +x:1 +输入法 1 +x:1 +共生 1 +x:1 +流通业 1 +x:1 +纸船 1 +x:1 +国产货 1 +x:1 +酚醛 1 +x:1 +妙 58 +x:58 +备降 1 +x:1 +公公 1 +x:1 +新堡子乡 1 +x:1 +受援国 1 +x:1 +带回 1 +x:1 +调类 1 +x:1 +刺丝 1 +x:1 +开脱 1 +x:1 +公关 1 +x:1 +公共 1 +x:1 +无聊者 1 +x:1 +共用 1 +x:1 +白鲑 1 +x:1 +巴比伦 1 +x:1 +莱切队 1 +x:1 +营山县 1 +x:1 +聚精会神 1 +x:1 +祝福歌 1 +x:1 +曲阜 1 +x:1 +机车 1 +x:1 +界岭 1 +x:1 +板石 1 +x:1 +防潮堤 1 +x:1 +侵略国 1 +x:1 +帮教 1 +x:1 +法律界 1 +x:1 +开腔 1 +x:1 +初版 1 +x:1 +九纵 1 +x:1 +二叠纪 1 +x:1 +善委会 1 +x:1 +曲阿 1 +x:1 +蓝湿革 1 +x:1 +升入 1 +x:1 +永丰县 1 +x:1 +案犯 1 +x:1 +人情 1 +x:1 +开腹 1 +x:1 +天际 1 +x:1 +雅趣 1 +x:1 +板眼 1 +x:1 +通草 1 +x:1 +倒蛋鬼 1 +x:1 +外祖父 1 +x:1 +闪现 1 +x:1 +农资 1 +x:1 +明矾 1 +x:1 +香菌 1 +x:1 +开膛 1 +x:1 +结素 1 +x:1 +拳拳 1 +x:1 +茶罐 1 +x:1 +债户 1 +x:1 +里加 1 +x:1 +一路货 1 +x:1 +威武不屈 1 +x:1 +骆马湖 1 +x:1 +转折性 1 +x:1 +楚乐宫 1 +x:1 +知识型 1 +x:1 +初犯 1 +x:1 +公函 1 +x:1 +公出 1 +x:1 +不在少数 1 +x:1 +违抗 1 +x:1 +巴侨 1 +x:1 +源地 1 +x:1 +巧布新阵 1 +x:1 +顶天 1 +x:1 +大帽子 1 +x:1 +彩绣 1 +x:1 +租卖亭 1 +x:1 +毫不犹豫 1 +x:1 +酚酞 1 +x:1 +亚太经济 1 +x:1 +顶头 1 +x:1 +拔 41 +x:41 +古典主义 1 +x:1 +公开化 1 +x:1 +万仙楼 1 +x:1 +界尺 1 +x:1 +船家 1 +x:1 +毛骨悚然 1 +x:1 +感叹词 1 +x:1 +步 744 +x:744 +黄花菜 1 +x:1 +椁木 1 +x:1 +密执安 1 +x:1 +转载者 1 +x:1 +童叟无欺 1 +x:1 +扎耳朵 1 +x:1 +公决 1 +x:1 +不思进取 1 +x:1 +豫南 1 +x:1 +顶多 1 +x:1 +天霸 1 +x:1 +曲靖 1 +x:1 +小小子 1 +x:1 +绩效低者 1 +x:1 +混血人 1 +x:1 +刺伤 1 +x:1 +菜农 1 +x:1 +板皮 1 +x:1 +舞文弄墨 1 +x:1 +林海镇 1 +x:1 +分总支 1 +x:1 +自吸型 1 +x:1 +冒用 1 +x:1 +积攒 1 +x:1 +句子成分 1 +x:1 +柿霜 1 +x:1 +净增值 1 +x:1 +升值 1 +x:1 +贪污犯 1 +x:1 +格外村 1 +x:1 +曲面 1 +x:1 +吨位 1 +x:1 +闪爆 1 +x:1 +钱塘江 1 +x:1 +可赞 1 +x:1 +灾种 1 +x:1 +巴里洛切 1 +x:1 +善终 1 +x:1 +南纬线 1 +x:1 +环球 1 +x:1 +胸怀大志 1 +x:1 +锻炼 1 +x:1 +公开办 1 +x:1 +做媒者 1 +x:1 +休戚与共 1 +x:1 +工作服 1 +x:1 +畜牧局 1 +x:1 +电棒 1 +x:1 +坜 1 +x:1 +社教 1 +x:1 +兰田 1 +x:1 +通用字 1 +x:1 +上周三 1 +x:1 +三文鱼 1 +x:1 +更何况 1 +x:1 +禁地 1 +x:1 +横肉 1 +x:1 +治疗室 1 +x:1 +公债 1 +x:1 +废止 1 +x:1 +积数 1 +x:1 +搂搂 1 +x:1 +机身 1 +x:1 +杂交棉 1 +x:1 +熊皮帽 1 +x:1 +拜伦多 1 +x:1 +积木 1 +x:1 +月亏 1 +x:1 +要者 1 +x:1 +阿尔托 1 +x:1 +一条心 1 +x:1 +道岔 1 +x:1 +月亮 1 +x:1 +比哈尔邦 1 +x:1 +亦可 1 +x:1 +观测员 1 +x:1 +碳60 1 +x:1 +诧异 1 +x:1 +食品店 1 +x:1 +开胃 1 +x:1 +洁身自爱 1 +x:1 +救兵 1 +x:1 +图象诗 1 +x:1 +埃里克市 1 +x:1 +农谚 1 +x:1 +声讯台 1 +x:1 +铁西区 1 +x:1 +个体经济 1 +x:1 +小轿车 1 +x:1 +门巴 1 +x:1 +白介素 1 +x:1 +堂兄弟 1 +x:1 +水淹七军 1 +x:1 +膀胱癌 1 +x:1 +搬运队 1 +x:1 +雅俗共赏 1 +x:1 +机械论 1 +x:1 +诤 1 +x:1 +通航 1 +x:1 +月份 1 +x:1 +恩 35 +x:35 +蜿蜒 1 +x:1 +社旗 1 +x:1 +违控 1 +x:1 +盲 4 +x:4 +变色龙 1 +x:1 +上周五 1 +x:1 +异类 1 +x:1 +虽 682 +x:682 +侏儒 1 +x:1 +月令 1 +x:1 +公升 1 +x:1 +铭文 1 +x:1 +璇 12 +x:12 +国徽 1 +x:1 +切割机 1 +x:1 +平措林寺 1 +x:1 +交叉点 1 +x:1 +穿堂门 1 +x:1 +救助 1 +x:1 +伴奏带 1 +x:1 +发刊词 1 +x:1 +磁性 1 +x:1 +六安市 1 +x:1 +特用林 1 +x:1 +杂技团 1 +x:1 +模板 1 +x:1 +公卿 1 +x:1 +建湖 1 +x:1 +货币地租 1 +x:1 +带响 1 +x:1 +应邀 1 +x:1 +底栖生物 1 +x:1 +船夫 1 +x:1 +桑白皮 1 +x:1 +介 4 +x:4 +藕节儿 1 +x:1 +开荒 1 +x:1 +中南美 1 +x:1 +国产车 1 +x:1 +花卉业 1 +x:1 +二七路 1 +x:1 +顶宽 1 +x:1 +飘流 1 +x:1 +卫生丸 1 +x:1 +赢 155 +x:155 +通膨 1 +x:1 +时分 1 +x:1 +警报灯 1 +x:1 +馓 2 +x:2 +大有可为 1 +x:1 +肘关节 1 +x:1 +环眼 1 +x:1 +禁吸 1 +x:1 +剪裁 1 +x:1 +女童 1 +x:1 +鸭子 1 +x:1 +禁品 1 +x:1 +伴星 1 +x:1 +青运史 1 +x:1 +道德 1 +x:1 +送饭制 1 +x:1 +链子 1 +x:1 +对此 1 +x:1 +菜刀 1 +x:1 +升压 1 +x:1 +服药者 1 +x:1 +中小学校 1 +x:1 +巴丹吉林 1 +x:1 +宣传部长 1 +x:1 +结缘 1 +x:1 +夜蛾 1 +x:1 +道徒 1 +x:1 +追根求源 1 +x:1 +顶子 1 +x:1 +循经 1 +x:1 +暴力团 1 +x:1 +姓名 1 +x:1 +应选 1 +x:1 +公司 1 +x:1 +摇动 1 +x:1 +公历 1 +x:1 +阿巴岛 1 +x:1 +七里塔村 1 +x:1 +升发 1 +x:1 +河街乡 1 +x:1 +一传 1 +x:1 +贬义 1 +x:1 +勾漏令 1 +x:1 +公厕 1 +x:1 +百鸟呈祥 1 +x:1 +二传奖 1 +x:1 +公厘 1 +x:1 +冻库 1 +x:1 +挡车工 1 +x:1 +布达拉宫 1 +x:1 +徐家乡 1 +x:1 +低职高挂 1 +x:1 +原告方 1 +x:1 +执掌 1 +x:1 +开 1885 +x:1885 +隔离 1 +x:1 +分进合击 1 +x:1 +何人 1 +x:1 +走私案 1 +x:1 +通胀 1 +x:1 +现政权 1 +x:1 +伞盖 1 +x:1 +三个一 1 +x:1 +国度 1 +x:1 +劣根性 1 +x:1 +鳌泉村 1 +x:1 +以法治赛 1 +x:1 +漠 1 +x:1 +球拍 1 +x:1 +国库 1 +x:1 +机谋 1 +x:1 +功能型 1 +x:1 +关注点 1 +x:1 +教练机 1 +x:1 +国庆 1 +x:1 +何事 1 +x:1 +牲口 1 +x:1 +揭竿而起 1 +x:1 +瑞典队 1 +x:1 +开船 1 +x:1 +天锅 1 +x:1 +爱尔兰裔 1 +x:1 +公分 1 +x:1 +日惹市 1 +x:1 +列宁格勒 1 +x:1 +集约化 1 +x:1 +养殖鱼 1 +x:1 +木琴 1 +x:1 +限流阀 1 +x:1 +摒 1 +x:1 +致残 1 +x:1 +何以 1 +x:1 +翅子 1 +x:1 +菜叶 1 +x:1 +商检 1 +x:1 +公判 1 +x:1 +起哄 1 +x:1 +万泉河 1 +x:1 +摩尔多瓦 1 +x:1 +建漆 1 +x:1 +禁售 1 +x:1 +公制 1 +x:1 +女篮 1 +x:1 +木球 1 +x:1 +战地 1 +x:1 +小鸟儿 1 +x:1 +伪县长 1 +x:1 +托克逊 1 +x:1 +审讯室 1 +x:1 +闪点 1 +x:1 +忌语 1 +x:1 +观测器 1 +x:1 +平方差 1 +x:1 +积极 1 +x:1 +伴有 1 +x:1 +船壳 1 +x:1 +巴伊亚 1 +x:1 +扁舟 1 +x:1 +致死 1 +x:1 +木瓜 1 +x:1 +合唱队 1 +x:1 +升势 1 +x:1 +起名 1 +x:1 +侍从 1 +x:1 +菜区 1 +x:1 +撞击 1 +x:1 +暗喻化 1 +x:1 +何不 1 +x:1 +研究 1 +x:1 +开花 1 +x:1 +浮山镇 1 +x:1 +码分多址 1 +x:1 +板球 1 +x:1 +工作日 1 +x:1 +船墩 1 +x:1 +猪崽 1 +x:1 +菜单 1 +x:1 +一马当先 1 +x:1 +贬低 1 +x:1 +珈 1 +x:1 +俗名 1 +x:1 +连年 1 +x:1 +髌骨 1 +x:1 +通考 1 +x:1 +天门 1 +x:1 +羊城 1 +x:1 +忌讳 1 +x:1 +天问 1 +x:1 +公办 1 +x:1 +隐火 1 +x:1 +沉鱼落雁 1 +x:1 +执棒 1 +x:1 +昆仑山 1 +x:1 +掌勺儿 1 +x:1 +昏沉 1 +x:1 +神经痛 1 +x:1 +杂技场 1 +x:1 +对抗赛 1 +x:1 +箱笼 1 +x:1 +公助 1 +x:1 +略逊一筹 1 +x:1 +调羹 1 +x:1 +日心说 1 +x:1 +仪式性 1 +x:1 +阐释 1 +x:1 +神经病 1 +x:1 +棺 3 +x:3 +风和日丽 1 +x:1 +闪烁 1 +x:1 +孔 287 +x:287 +青天白日 1 +x:1 +北京人 1 +x:1 +沟河庄村 1 +x:1 +救治 1 +x:1 +石花胶 1 +x:1 +感咏 1 +x:1 +已故 1 +x:1 +初一 1 +x:1 +船板 1 +x:1 +脖 1 +x:1 +棉球 1 +x:1 +初三 1 +x:1 +圆融 1 +x:1 +致哀 1 +x:1 +外语系 1 +x:1 +磁带 1 +x:1 +沟谷 1 +x:1 +案件 1 +x:1 +菜油 1 +x:1 +公海 1 +x:1 +魔术师 1 +x:1 +然 73 +x:73 +初中 1 +x:1 +终点站 1 +x:1 +棕色棉 1 +x:1 +傍晚 1 +x:1 +华航 1 +x:1 +自愿者 1 +x:1 +初九 1 +x:1 +深证 1 +x:1 +挪动 1 +x:1 +腔骨 1 +x:1 +体癣 1 +x:1 +姐夫 1 +x:1 +话 1351 +x:1351 +帮套 1 +x:1 +按摩厅 1 +x:1 +华舍 1 +x:1 +示踪物 1 +x:1 +粟米 1 +x:1 +延安路 1 +x:1 +安身立命 1 +x:1 +船期 1 +x:1 +公派 1 +x:1 +为画者 1 +x:1 +窘况 1 +x:1 +初五 1 +x:1 +神通 1 +x:1 +文责自负 1 +x:1 +党中央 1 +x:1 +神速 1 +x:1 +耐热合金 1 +x:1 +涩谷 1 +x:1 +双酚A 1 +x:1 +吃食 1 +x:1 +赤峰市 1 +x:1 +初二 1 +x:1 +大中小型 1 +x:1 +七嘴八舌 1 +x:1 +被代理人 1 +x:1 +救民 1 +x:1 +心诚之至 1 +x:1 +姐姐 1 +x:1 +咸肉 1 +x:1 +牙轮 1 +x:1 +顶效 1 +x:1 +条块状 1 +x:1 +熔古铄今 1 +x:1 +循 38 +x:38 +湾畔 1 +x:1 +初交 1 +x:1 +知春路 1 +x:1 +不怕苦 1 +x:1 +雀巢咖啡 1 +x:1 +猪手 1 +x:1 +写信者 1 +x:1 +归藏 1 +x:1 +阻遏 1 +x:1 +隐伏 1 +x:1 +至诚 1 +x:1 +起步 1 +x:1 +摩挲 1 +x:1 +羊棚 1 +x:1 +菇子 1 +x:1 +昏厥 1 +x:1 +姐妹 1 +x:1 +东庞矿 1 +x:1 +人事院 1 +x:1 +崇文区 1 +x:1 +制酒厂 1 +x:1 +血管钳 1 +x:1 +罕 2 +x:2 +冷却塔 1 +x:1 +行礼 1 +x:1 +胖大海 1 +x:1 +口琴 1 +x:1 +案主 1 +x:1 +郁夏 1 +x:1 +回扣 1 +x:1 +欣赏 1 +x:1 +茶镜 1 +x:1 +绒绒的 1 +x:1 +专司 1 +x:1 +景 86 +x:86 +优质棉 1 +x:1 +菜汤 1 +x:1 +招贴牌 1 +x:1 +天赐良机 1 +x:1 +热那亚 1 +x:1 +肥硕 1 +x:1 +铸 69 +x:69 +音乐团 1 +x:1 +脾胃 1 +x:1 +不足为怪 1 +x:1 +巾 4 +x:4 +刺猬 1 +x:1 +诵经台 1 +x:1 +纤毫 1 +x:1 +华药 1 +x:1 +核桃肉 1 +x:1 +社头 1 +x:1 +博大胸怀 1 +x:1 +专卖局 1 +x:1 +出米率 1 +x:1 +怅惘 1 +x:1 +锚拉式 1 +x:1 +初伏 1 +x:1 +建兰 1 +x:1 +马戏节 1 +x:1 +肠壁 1 +x:1 +面谢 1 +x:1 +吃饭 1 +x:1 +吴县市 1 +x:1 +棉田 1 +x:1 +车轱辘话 1 +x:1 +拒腐防变 1 +x:1 +废地 1 +x:1 +竖琴 1 +x:1 +纤毛 1 +x:1 +程林街 1 +x:1 +脾脏 1 +x:1 +公汽 1 +x:1 +叛徒 1 +x:1 +拒谏饰非 1 +x:1 +口疮 1 +x:1 +升汞 1 +x:1 +娟好 1 +x:1 +赢利 1 +x:1 +销货车 1 +x:1 +案例 1 +x:1 +原籍 1 +x:1 +思想界 1 +x:1 +熟手 1 +x:1 +公民 1 +x:1 +冷落 1 +x:1 +补偏救弊 1 +x:1 +俟 1 +x:1 +神采 1 +x:1 +北非洲 1 +x:1 +槐树 1 +x:1 +友好史 1 +x:1 +审视 1 +x:1 +照猫画虎 1 +x:1 +牵动型 1 +x:1 +猪排 1 +x:1 +国情 1 +x:1 +主句 1 +x:1 +禁欲 1 +x:1 +荒老 1 +x:1 +咫尺 1 +x:1 +会昌县 1 +x:1 +遭灾 1 +x:1 +文学梦 1 +x:1 +敌军 1 +x:1 +常州沟 1 +x:1 +荫凉 1 +x:1 +史菜园队 1 +x:1 +远遁千年 1 +x:1 +刺玫 1 +x:1 +救活 1 +x:1 +未决犯 1 +x:1 +璎 1 +x:1 +林权证 1 +x:1 +闪亮 1 +x:1 +公法 1 +x:1 +违心 1 +x:1 +思想解放 1 +x:1 +安全观 1 +x:1 +橡皮线 1 +x:1 +阶段性 1 +x:1 +晋东南 1 +x:1 +热效率 1 +x:1 +气味相投 1 +x:1 +改编者 1 +x:1 +长者 1 +x:1 +长老 1 +x:1 +磁心 1 +x:1 +三天三夜 1 +x:1 +赫—伯法 1 +x:1 +镁光 1 +x:1 +原糖 1 +x:1 +客体化 1 +x:1 +一举数得 1 +x:1 +伴奏 1 +x:1 +吃香 1 +x:1 +橡皮绳 1 +x:1 +监控台 1 +x:1 +饥寒交加 1 +x:1 +红4师 1 +x:1 +一侧 1 +x:1 +话音 1 +x:1 +赤角 1 +x:1 +冲腾 1 +x:1 +毡袍 1 +x:1 +建农 1 +x:1 +建军 1 +x:1 +施舍 1 +x:1 +营运 1 +x:1 +道情 1 +x:1 +救济 1 +x:1 +外骨骼 1 +x:1 +从权 1 +x:1 +赵湾乡 1 +x:1 +减负办 1 +x:1 +绿宝石 1 +x:1 +顶柱 1 +x:1 +卡特尔 1 +x:1 +面谕 1 +x:1 +讥薄 1 +x:1 +柏枝 1 +x:1 +考评科 1 +x:1 +柏林 1 +x:1 +道指 1 +x:1 +荒草 1 +x:1 +失泄密 1 +x:1 +思虑 1 +x:1 +蹈 9 +x:9 +汪洋 1 +x:1 +支行 1 +x:1 +坎 8 +x:8 +公演 1 +x:1 +肝胆 1 +x:1 +帮子 1 +x:1 +建制 1 +x:1 +政策性 1 +x:1 +舍已为公 1 +x:1 +亭亭 1 +x:1 +惘然 1 +x:1 +回报 1 +x:1 +磁山 1 +x:1 +南北朝 1 +x:1 +原罪 1 +x:1 +禁核 1 +x:1 +筑就 1 +x:1 +吕贝克市 1 +x:1 +伴娘 1 +x:1 +巴马科 1 +x:1 +大琴村 1 +x:1 +葡萄藤 1 +x:1 +迟缓率 1 +x:1 +牢房 1 +x:1 +海基导弹 1 +x:1 +顶板 1 +x:1 +不负众望 1 +x:1 +超稀植 1 +x:1 +抹杀 1 +x:1 +悬 53 +x:53 +肠子 1 +x:1 +览 7 +x:7 +臭帽 1 +x:1 +塔龙佳 1 +x:1 +会务组 1 +x:1 +虾兵蟹将 1 +x:1 +淀粉 1 +x:1 +截击机 1 +x:1 +编织袋 1 +x:1 +脸形 1 +x:1 +三二联防 1 +x:1 +摇滚 1 +x:1 +青灯枝笔 1 +x:1 +揖 3 +x:3 +废品 1 +x:1 +江西区 1 +x:1 +牙质 1 +x:1 +挪借 1 +x:1 +闷胀 1 +x:1 +玄武 1 +x:1 +俄央行 1 +x:1 +独立自主 1 +x:1 +跋扈 1 +x:1 +疾病 1 +x:1 +磁峰 1 +x:1 +行笔 1 +x:1 +建功 1 +x:1 +风化砂 1 +x:1 +元器件 1 +x:1 +叶 618 +x:618 +袁派 1 +x:1 +柏村 1 +x:1 +审计 1 +x:1 +审订 1 +x:1 +锻件 1 +x:1 +训练 1 +x:1 +刀锋 1 +x:1 +建卡 1 +x:1 +来安县 1 +x:1 +审议 1 +x:1 +厂 1035 +x:1035 +敌台 1 +x:1 +情节链 1 +x:1 +键盘乐器 1 +x:1 +顶替 1 +x:1 +国投 1 +x:1 +建华 1 +x:1 +逢 94 +x:94 +荆条 1 +x:1 +志士 1 +x:1 +敌友 1 +x:1 +钩针 1 +x:1 +禽产品 1 +x:1 +脸庞 1 +x:1 +吉隆坡 1 +x:1 +梯云岭 1 +x:1 +中莲花村 1 +x:1 +丑类 1 +x:1 +升温 1 +x:1 +庄里 1 +x:1 +庄重 1 +x:1 +挑选 1 +x:1 +急诊室 1 +x:1 +青菜头 1 +x:1 +春色满园 1 +x:1 +服务生 1 +x:1 +纤公里 1 +x:1 +施肥 1 +x:1 +筑巢 1 +x:1 +糜烂 1 +x:1 +积存 1 +x:1 +蛙 6 +x:6 +审读 1 +x:1 +社学 1 +x:1 +星空 1 +x:1 +审证 1 +x:1 +涩进 1 +x:1 +鲁艺 1 +x:1 +审评 1 +x:1 +旅行团 1 +x:1 +庶母 1 +x:1 +接话人 1 +x:1 +港人治港 1 +x:1 +备抵金 1 +x:1 +五海村 1 +x:1 +赞成票 1 +x:1 +盹 1 +x:1 +加工户 1 +x:1 +兼程 1 +x:1 +性命交关 1 +x:1 +始末 1 +x:1 +阿尔山 1 +x:1 +衬里 1 +x:1 +倍 758 +x:758 +纠纷案 1 +x:1 +三汇镇 1 +x:1 +翅果 1 +x:1 +歹人 1 +x:1 +长航 1 +x:1 +熟悉 1 +x:1 +多姆斯特 1 +x:1 +肝脏 1 +x:1 +养生学 1 +x:1 +洗浴液 1 +x:1 +工夫 1 +x:1 +家长味 1 +x:1 +体疗 1 +x:1 +携家带口 1 +x:1 +抚顺市 1 +x:1 +蚕种 1 +x:1 +开放型 1 +x:1 +舒适 1 +x:1 +欺世惑众 1 +x:1 +民勤县 1 +x:1 +海制品 1 +x:1 +工大 1 +x:1 +物理化学 1 +x:1 +淮安城 1 +x:1 +羊毛 1 +x:1 +人革党 1 +x:1 +彭州市 1 +x:1 +常州港 1 +x:1 +听之任之 1 +x:1 +何物 1 +x:1 +专卖店 1 +x:1 +敌区 1 +x:1 +安全论 1 +x:1 +赫赫巍巍 1 +x:1 +渔人得利 1 +x:1 +枢要 1 +x:1 +执法者 1 +x:1 +购买户 1 +x:1 +荒芜 1 +x:1 +得宠 1 +x:1 +行程 1 +x:1 +建厂 1 +x:1 +冻土带 1 +x:1 +再生力 1 +x:1 +酒柜 1 +x:1 +橡皮糖 1 +x:1 +咸菜 1 +x:1 +羊毫 1 +x:1 +深表 1 +x:1 +短缺型 1 +x:1 +国手 1 +x:1 +小家庭 1 +x:1 +竞骥图 1 +x:1 +独生子 1 +x:1 +货币化 1 +x:1 +神针 1 +x:1 +蔚蓝 1 +x:1 +逆风球 1 +x:1 +医药界 1 +x:1 +思考 1 +x:1 +布洒 1 +x:1 +服务牌 1 +x:1 +排污站 1 +x:1 +引资国 1 +x:1 +欠款人 1 +x:1 +笔砚 1 +x:1 +单弹头 1 +x:1 +膝伤 1 +x:1 +羊水 1 +x:1 +玎玎玲玲 1 +x:1 +沙特王国 1 +x:1 +深达 1 +x:1 +国文 1 +x:1 +柘塘镇 1 +x:1 +魂牵梦系 1 +x:1 +园里 1 +x:1 +菜棚 1 +x:1 +深远 1 +x:1 +凯鲁旺城 1 +x:1 +盲人摸象 1 +x:1 +触摸式 1 +x:1 +灵敏度 1 +x:1 +决不 1 +x:1 +卫生球 1 +x:1 +恒温 1 +x:1 +厚积薄发 1 +x:1 +神经纤维 1 +x:1 +道教 1 +x:1 +口炎 1 +x:1 +工作帽 1 +x:1 +欣见 1 +x:1 +断涌期 1 +x:1 +国旅 1 +x:1 +簿册 1 +x:1 +重债国 1 +x:1 +肝蛭 1 +x:1 +老板桌 1 +x:1 +柴火垛 1 +x:1 +音乐剧 1 +x:1 +必恭必敬 1 +x:1 +发酵仓 1 +x:1 +唐菖蒲 1 +x:1 +省时省力 1 +x:1 +植物群落 1 +x:1 +大决战 1 +x:1 +国政 1 +x:1 +邦国 1 +x:1 +震区 1 +x:1 +压岁钱 1 +x:1 +杂稗壳 1 +x:1 +何用 1 +x:1 +孤儿院 1 +x:1 +战法 1 +x:1 +河西村 1 +x:1 +冬泳者 1 +x:1 +奋斗者 1 +x:1 +羊油 1 +x:1 +王沟村 1 +x:1 +艰苦奋斗 1 +x:1 +庶民 1 +x:1 +珠宝商 1 +x:1 +弹性体 1 +x:1 +购油量 1 +x:1 +借书者 1 +x:1 +乱动 1 +x:1 +地老虎 1 +x:1 +泪光 1 +x:1 +互动力 1 +x:1 +捅 20 +x:20 +蚕纸 1 +x:1 +凉州 1 +x:1 +挂职 1 +x:1 +面票 1 +x:1 +民族英雄 1 +x:1 +搜刮 1 +x:1 +博兴县 1 +x:1 +学学 1 +x:1 +体现者 1 +x:1 +炉边 1 +x:1 +珊瑚虫 1 +x:1 +山基土 1 +x:1 +敌后 1 +x:1 +月石 1 +x:1 +大革命 1 +x:1 +国教 1 +x:1 +帮工 1 +x:1 +野蚕 1 +x:1 +国故 1 +x:1 +奶昔 1 +x:1 +报批 1 +x:1 +僧舍 1 +x:1 +秫秸 1 +x:1 +穿 503 +x:503 +划破 1 +x:1 +谭德下村 1 +x:1 +青岛市 1 +x:1 +祖辈 1 +x:1 +胜境 1 +x:1 +凖 1 +x:1 +感冒 1 +x:1 +杰作 1 +x:1 +刺眼 1 +x:1 +恨之入骨 1 +x:1 +摇椅 1 +x:1 +时口 1 +x:1 +卫生界 1 +x:1 +邦坦 1 +x:1 +拔除 1 +x:1 +富山乡 1 +x:1 +致函 1 +x:1 +跋文 1 +x:1 +睡帽 1 +x:1 +升格 1 +x:1 +理智型 1 +x:1 +致死率 1 +x:1 +坚韧不拔 1 +x:1 +槐汁 1 +x:1 +起源 1 +x:1 +马图林 1 +x:1 +周而复始 1 +x:1 +志庆 1 +x:1 +坪坝 1 +x:1 +重瓣胃 1 +x:1 +开卷有益 1 +x:1 +清泉铺山 1 +x:1 +珏 3 +x:3 +急不可耐 1 +x:1 +湄公河 1 +x:1 +物种数 1 +x:1 +鱼汤 1 +x:1 +西峰山 1 +x:1 +崛起 1 +x:1 +选修课 1 +x:1 +潜 15 +x:15 +船户 1 +x:1 +木业 1 +x:1 +采银 1 +x:1 +冷者 1 +x:1 +低于 1 +x:1 +磁学 1 +x:1 +凉山 1 +x:1 +法西斯 1 +x:1 +外层 1 +x:1 +祖述 1 +x:1 +乱占 1 +x:1 +背心装 1 +x:1 +升档 1 +x:1 +宾馆 1 +x:1 +人性爱 1 +x:1 +豹子 1 +x:1 +麸子 1 +x:1 +彼 14 +x:14 +实干者 1 +x:1 +顾 363 +x:363 +四叠体 1 +x:1 +捷克 1 +x:1 +体现 1 +x:1 +电暖气 1 +x:1 +杀人犯 1 +x:1 +兽群 1 +x:1 +整备所 1 +x:1 +打靶场 1 +x:1 +油灰 1 +x:1 +沂蒙山 1 +x:1 +音乐厅 1 +x:1 +葡萄苗 1 +x:1 +房委会 1 +x:1 +普通法 1 +x:1 +中汽 1 +x:1 +知识源 1 +x:1 +恳切 1 +x:1 +全身心 1 +x:1 +掺杂使假 1 +x:1 +自行车 1 +x:1 +大手大脚 1 +x:1 +上半年度 1 +x:1 +服务班 1 +x:1 +抱石怀沙 1 +x:1 +竞绘 1 +x:1 +饱眼福 1 +x:1 +二传手 1 +x:1 +新泰市 1 +x:1 +所得税 1 +x:1 +商业化 1 +x:1 +月盈 1 +x:1 +阿航 1 +x:1 +感光 1 +x:1 +再贴现率 1 +x:1 +板书 1 +x:1 +赛 199 +x:199 +荣获 1 +x:1 +大跌眼镜 1 +x:1 +胶南市 1 +x:1 +冷肆 1 +x:1 +家长制 1 +x:1 +永州市 1 +x:1 +长葛 1 +x:1 +异位症 1 +x:1 +音乐史 1 +x:1 +专家组 1 +x:1 +夙诺 1 +x:1 +不言而喻 1 +x:1 +明显化 1 +x:1 +鹦鹉 1 +x:1 +乱叫 1 +x:1 +违宪 1 +x:1 +竹园村 1 +x:1 +冷荤 1 +x:1 +世风 1 +x:1 +铁板一块 1 +x:1 +脸容 1 +x:1 +拔河场 1 +x:1 +研 33 +x:33 +通用性 1 +x:1 +敌国 1 +x:1 +逆行者 1 +x:1 +唱反调 1 +x:1 +脏乱 1 +x:1 +奖罚分明 1 +x:1 +大敌当前 1 +x:1 +峰峰 1 +x:1 +公正 1 +x:1 +宣礼塔 1 +x:1 +幸运者 1 +x:1 +节余 1 +x:1 +慢悠悠 1 +x:1 +峰峦 1 +x:1 +挂花 1 +x:1 +感动 1 +x:1 +伯克利 1 +x:1 +忠臣 1 +x:1 +人事部 1 +x:1 +致力 1 +x:1 +继发性 1 +x:1 +羊湖 1 +x:1 +沙湾村 1 +x:1 +兽类 1 +x:1 +考据学 1 +x:1 +经管 1 +x:1 +月界 1 +x:1 +文件库 1 +x:1 +托 116 +x:116 +抹掉 1 +x:1 +救火扬沸 1 +x:1 +拔锚 1 +x:1 +雾气腾腾 1 +x:1 +阻隔 1 +x:1 +门将 1 +x:1 +荣耀 1 +x:1 +魂牵梦绕 1 +x:1 +姐弟 1 +x:1 +风尘仆仆 1 +x:1 +防备 1 +x:1 +加工机 1 +x:1 +公款 1 +x:1 +积年 1 +x:1 +瞒案 1 +x:1 +结晶体 1 +x:1 +峰岭 1 +x:1 +建园 1 +x:1 +对口词 1 +x:1 +熟料 1 +x:1 +警世书 1 +x:1 +地矿厅 1 +x:1 +华蓥 1 +x:1 +民政部 1 +x:1 +河北梆子 1 +x:1 +建国 1 +x:1 +公比 1 +x:1 +郁悒 1 +x:1 +汕尾 1 +x:1 +国本 1 +x:1 +国术 1 +x:1 +弯道 1 +x:1 +志士仁人 1 +x:1 +钙质 1 +x:1 +扉画 1 +x:1 +留意 1 +x:1 +开放办 1 +x:1 +空防区 1 +x:1 +感到 1 +x:1 +榕城 1 +x:1 +姓氏 1 +x:1 +索购 1 +x:1 +致富型 1 +x:1 +硼砂 1 +x:1 +战胜者 1 +x:1 +冷菜 1 +x:1 +深购 1 +x:1 +购置者 1 +x:1 +社庆 1 +x:1 +彭城 1 +x:1 +瓷 10 +x:10 +恒河 1 +x:1 +河渠乡 1 +x:1 +帮忙 1 +x:1 +现政府 1 +x:1 +叶冠 1 +x:1 +撇开 1 +x:1 +奏章 1 +x:1 +舞蹈家 1 +x:1 +宫粉梅 1 +x:1 +百业待兴 1 +x:1 +拍马屁 1 +x:1 +铺盖卷儿 1 +x:1 +雕像头 1 +x:1 +服务点 1 +x:1 +歉年 1 +x:1 +凉快 1 +x:1 +更夫 1 +x:1 +国权 1 +x:1 +经团联 1 +x:1 +平均利润 1 +x:1 +脸孔 1 +x:1 +最 6681 +x:6681 +开放区 1 +x:1 +积弊 1 +x:1 +江西团 1 +x:1 +阿胶 1 +x:1 +水鳖子 1 +x:1 +思茅 1 +x:1 +触摸屏 1 +x:1 +冷艳 1 +x:1 +冷色 1 +x:1 +峰巅 1 +x:1 +家荠菜 1 +x:1 +食品摊 1 +x:1 +原稿 1 +x:1 +玩具商 1 +x:1 +小打小闹 1 +x:1 +示性类 1 +x:1 +商业主义 1 +x:1 +帮帮 1 +x:1 +五香 1 +x:1 +笔笔 1 +x:1 +帮带 1 +x:1 +洗手盆 1 +x:1 +凉席 1 +x:1 +磁头 1 +x:1 +头发丝 1 +x:1 +窘困 1 +x:1 +积弱 1 +x:1 +行约 1 +x:1 +标石 1 +x:1 +起泡 1 +x:1 +靓女 1 +x:1 +当腰 1 +x:1 +氮肥厂 1 +x:1 +国际会 1 +x:1 +采集 1 +x:1 +心理学家 1 +x:1 +百鸟衣 1 +x:1 +归航 1 +x:1 +滚轮 1 +x:1 +多云转阴 1 +x:1 +乱兵 1 +x:1 +煤 171 +x:171 +感叹 1 +x:1 +愁眉不展 1 +x:1 +笔答 1 +x:1 +印度半岛 1 +x:1 +笔筒 1 +x:1 +借此机会 1 +x:1 +高级社 1 +x:1 +感召 1 +x:1 +昏君 1 +x:1 +铜仁市 1 +x:1 +陶 249 +x:249 +维新派 1 +x:1 +音频 1 +x:1 +外伶仃岛 1 +x:1 +跛子 1 +x:1 +大可不必 1 +x:1 +感化 1 +x:1 +高中级 1 +x:1 +鏊子 1 +x:1 +公告费 1 +x:1 +官房长官 1 +x:1 +堂皇正大 1 +x:1 +肥缺 1 +x:1 +共事 1 +x:1 +暂存处 1 +x:1 +靠海吃海 1 +x:1 +建城 1 +x:1 +应急 1 +x:1 +购书者 1 +x:1 +深谷 1 +x:1 +硅光板 1 +x:1 +笔算 1 +x:1 +摆勺村 1 +x:1 +麻雀战 1 +x:1 +检查官 1 +x:1 +滚边 1 +x:1 +保留期 1 +x:1 +葡萄胎 1 +x:1 +共享 1 +x:1 +海棠花 1 +x:1 +晁 4 +x:4 +首脑会 1 +x:1 +塔科马市 1 +x:1 +精致 1 +x:1 +狱警 1 +x:1 +中试厂 1 +x:1 +荣膺 1 +x:1 +俗气 1 +x:1 +长虫 1 +x:1 +棕黄 1 +x:1 +威猛 1 +x:1 +票房价值 1 +x:1 +危旧房 1 +x:1 +求胜心切 1 +x:1 +配套厂 1 +x:1 +高中组 1 +x:1 +核桃虫 1 +x:1 +吉隆县 1 +x:1 +肇始 1 +x:1 +道听途说 1 +x:1 +地瓜蔓 1 +x:1 +氯丹 1 +x:1 +憋气 1 +x:1 +棉珠 1 +x:1 +从那之后 1 +x:1 +刺痒 1 +x:1 +原生 1 +x:1 +竞猜 1 +x:1 +流通税 1 +x:1 +公敌 1 +x:1 +吃水线 1 +x:1 +动荡不定 1 +x:1 +序 62 +x:62 +相遇 1 +x:1 +音乐师 1 +x:1 +低估 1 +x:1 +聚居地 1 +x:1 +冯村 1 +x:1 +动荡不安 1 +x:1 +沿江 1 +x:1 +的黎波里 1 +x:1 +曝光台 1 +x:1 +阴山背后 1 +x:1 +叛国 1 +x:1 +男尊女卑 1 +x:1 +线形动物 1 +x:1 +净增支 1 +x:1 +瘴疠 1 +x:1 +由此及彼 1 +x:1 +冷货 1 +x:1 +镁砂厂 1 +x:1 +吃透 1 +x:1 +口粮 1 +x:1 +房地产权 1 +x:1 +建堤 1 +x:1 +冷贮 1 +x:1 +中华路 1 +x:1 +摇摇 1 +x:1 +遐 1 +x:1 +雾霭 1 +x:1 +仙真岩 1 +x:1 +器材厂 1 +x:1 +施训 1 +x:1 +乘务警 1 +x:1 +胶南县 1 +x:1 +棉籽 1 +x:1 +国槐 1 +x:1 +十七日 1 +x:1 +工作制 1 +x:1 +小汤山镇 1 +x:1 +何种 1 +x:1 +邦威 1 +x:1 +幸福林 1 +x:1 +检查员 1 +x:1 +掌柜 1 +x:1 +横街镇 1 +x:1 +协议 1 +x:1 +陪房 1 +x:1 +功能性 1 +x:1 +唏嘘落泪 1 +x:1 +须水镇 1 +x:1 +界桩 1 +x:1 +拉丁 1 +x:1 +海洋生物 1 +x:1 +服务组 1 +x:1 +永丰村 1 +x:1 +憧憬 1 +x:1 +服务经 1 +x:1 +心静 1 +x:1 +过继 1 +x:1 +肺脏 1 +x:1 +纤手 1 +x:1 +隔世 1 +x:1 +味醇 1 +x:1 +摇撼 1 +x:1 +典雅 1 +x:1 +相逢 1 +x:1 +中提琴 1 +x:1 +器乐曲 1 +x:1 +狗鱼 1 +x:1 +都斛镇 1 +x:1 +公文 1 +x:1 +仄 1 +x:1 +测控站 1 +x:1 +盛会 1 +x:1 +五陵 1 +x:1 +沿河 1 +x:1 +绚烂 1 +x:1 +可靠率 1 +x:1 +显著 1 +x:1 +存小异 1 +x:1 +徐庄村 1 +x:1 +三三两两 1 +x:1 +魔术团 1 +x:1 +臆说 1 +x:1 +编委会 1 +x:1 +肠儿 1 +x:1 +锈病 1 +x:1 +界标 1 +x:1 +公斤 1 +x:1 +残渣余孽 1 +x:1 +线坯子 1 +x:1 +腥味儿 1 +x:1 +公断 1 +x:1 +活劳动 1 +x:1 +山珍海味 1 +x:1 +盛传 1 +x:1 +铭印 1 +x:1 +臭味 1 +x:1 +圆轨 1 +x:1 +并驾齐驱 1 +x:1 +从井救人 1 +x:1 +明道 1 +x:1 +肺腑 1 +x:1 +帮凶 1 +x:1 +常春藤 1 +x:1 +笔画 1 +x:1 +功道杯 1 +x:1 +杨屯镇 1 +x:1 +沿海 1 +x:1 +演职员 1 +x:1 +六月 1 +x:1 +工作单 1 +x:1 +柏油 1 +x:1 +六朝 1 +x:1 +原理 1 +x:1 +废弃 1 +x:1 +黄连木 1 +x:1 +西城区 1 +x:1 +长袖 1 +x:1 +遁身 1 +x:1 +长袍 1 +x:1 +隽秀 1 +x:1 +寻人 1 +x:1 +序时账 1 +x:1 +检阅 1 +x:1 +奶毛 1 +x:1 +淮委会 1 +x:1 +青梅竹马 1 +x:1 +窘境 1 +x:1 +建大 1 +x:1 +五音 1 +x:1 +奋斗路 1 +x:1 +家访组 1 +x:1 +鲁殿灵光 1 +x:1 +起拱 1 +x:1 +勋努达美 1 +x:1 +盛事 1 +x:1 +采风 1 +x:1 +长裤 1 +x:1 +外公切线 1 +x:1 +道桥 1 +x:1 +风风雨雨 1 +x:1 +体罚 1 +x:1 +农林部 1 +x:1 +长裙 1 +x:1 +兼并热 1 +x:1 +起拍 1 +x:1 +胡编乱造 1 +x:1 +恒指 1 +x:1 +盛产 1 +x:1 +棉絮 1 +x:1 +建外 1 +x:1 +国棉 1 +x:1 +玄想 1 +x:1 +寒意料峭 1 +x:1 +不遗余力 1 +x:1 +华语 1 +x:1 +吃重 1 +x:1 +国格 1 +x:1 +沙卵石 1 +x:1 +潢川县 1 +x:1 +骨肉相残 1 +x:1 +间歇 1 +x:1 +虚构者 1 +x:1 +闲置费 1 +x:1 +玄思 1 +x:1 +祖茔 1 +x:1 +任何人 1 +x:1 +蔚秀园 1 +x:1 +兽环 1 +x:1 +伴儿 1 +x:1 +挂账 1 +x:1 +拔高 1 +x:1 +建始 1 +x:1 +工作史 1 +x:1 +工作台 1 +x:1 +归去来兮 1 +x:1 +专门利人 1 +x:1 +国标 1 +x:1 +澳门 1 +x:1 +帝王 1 +x:1 +华诞 1 +x:1 +荣将镇 1 +x:1 +建委 1 +x:1 +形象镜 1 +x:1 +兽王 1 +x:1 +积冰 1 +x:1 +君子 1 +x:1 +盛世 1 +x:1 +黄粱一梦 1 +x:1 +另选人 1 +x:1 +肥煤 1 +x:1 +无头案 1 +x:1 +口紧 1 +x:1 +岩丛 1 +x:1 +席卷而逃 1 +x:1 +长衫 1 +x:1 +荣辱 1 +x:1 +长衣 1 +x:1 +氮氧化物 1 +x:1 +变造 1 +x:1 +救救 1 +x:1 +深色 1 +x:1 +新野县 1 +x:1 +安乐椅 1 +x:1 +长街 1 +x:1 +废弃地 1 +x:1 +楫 2 +x:2 +梦 281 +x:281 +筑坝 1 +x:1 +彩虹门 1 +x:1 +志利 1 +x:1 +不可收拾 1 +x:1 +民歌式 1 +x:1 +心潮澎湃 1 +x:1 +轻伤者 1 +x:1 +思路 1 +x:1 +伴入 1 +x:1 +文学性 1 +x:1 +冷轧 1 +x:1 +下狠心 1 +x:1 +公杂 1 +x:1 +沙庆乡 1 +x:1 +淮安市 1 +x:1 +陶利嘎查 1 +x:1 +感应 1 +x:1 +鳞茎 1 +x:1 +电盲 1 +x:1 +苏州府志 1 +x:1 +润肤霜 1 +x:1 +坠落 1 +x:1 +管 715 +x:715 +脸型 1 +x:1 +原眼 1 +x:1 +柚木 1 +x:1 +尤 74 +x:74 +忙忙碌碌 1 +x:1 +血淋淋 1 +x:1 +公开日 1 +x:1 +磕磕巴巴 1 +x:1 +肥胖率 1 +x:1 +国殇 1 +x:1 +巴巴多斯 1 +x:1 +御厨 1 +x:1 +非良性 1 +x:1 +株连九族 1 +x:1 +河田镇 1 +x:1 +凑数 1 +x:1 +软乎乎 1 +x:1 +礼 67 +x:67 +口红 1 +x:1 +干瞪眼 1 +x:1 +公有 1 +x:1 +干净利落 1 +x:1 +摇晃 1 +x:1 +寸土不让 1 +x:1 +打工族 1 +x:1 +平方根 1 +x:1 +建账率 1 +x:1 +女仆 1 +x:1 +田庄乡 1 +x:1 +绣鞋 1 +x:1 +防伪盖 1 +x:1 +长话 1 +x:1 +深致 1 +x:1 +丙酮 1 +x:1 +长诗 1 +x:1 +法门寺 1 +x:1 +血肉横飞 1 +x:1 +奇耻大辱 1 +x:1 +流水作业 1 +x:1 +海城 1 +x:1 +刀枪不入 1 +x:1 +低俗 1 +x:1 +梆硬 1 +x:1 +刀鱼 1 +x:1 +围棋 1 +x:1 +卫生站 1 +x:1 +万事俱备 1 +x:1 +奥希金斯 1 +x:1 +注册费 1 +x:1 +侵略性 1 +x:1 +徒手 1 +x:1 +丙醇 1 +x:1 +提篮小卖 1 +x:1 +糌巴 1 +x:1 +昌宁县 1 +x:1 +金盏乡 1 +x:1 +维修厂 1 +x:1 +商业局 1 +x:1 +贫穷帽 1 +x:1 +道路以目 1 +x:1 +帮厨 1 +x:1 +摁钉儿 1 +x:1 +棉纺 1 +x:1 +棉线 1 +x:1 +茶汤壶 1 +x:1 +棉纱 1 +x:1 +过来 1 +x:1 +荒诞 1 +x:1 +归还 1 +x:1 +救星 1 +x:1 +连锁式 1 +x:1 +敌击我隐 1 +x:1 +完毕 1 +x:1 +碧天 1 +x:1 +守林员 1 +x:1 +优胜处 1 +x:1 +华裔 1 +x:1 +师姐 1 +x:1 +体系 1 +x:1 +炉膛 1 +x:1 +笔直 1 +x:1 +棉绒 1 +x:1 +检查团 1 +x:1 +群星荟萃 1 +x:1 +街 304 +x:304 +毖 1 +x:1 +新桥镇 1 +x:1 +战抖 1 +x:1 +藕片 1 +x:1 +阿贡 1 +x:1 +掌故 1 +x:1 +憨态可掬 1 +x:1 +军团长 1 +x:1 +赔付率 1 +x:1 +凉台 1 +x:1 +喜眉笑眼 1 +x:1 +应用题 1 +x:1 +将错就错 1 +x:1 +峰值 1 +x:1 +战报 1 +x:1 +尊敬 1 +x:1 +全民公决 1 +x:1 +生产链 1 +x:1 +何等 1 +x:1 +肥牛 1 +x:1 +国歌 1 +x:1 +八卦掌 1 +x:1 +佐料 1 +x:1 +侃 13 +x:13 +罗马 1 +x:1 +冻死 1 +x:1 +自生堰村 1 +x:1 +萨克斯 1 +x:1 +八二年 1 +x:1 +华西 1 +x:1 +新月村 1 +x:1 +沙石灰 1 +x:1 +敌对 1 +x:1 +敌寇 1 +x:1 +团团伙伙 1 +x:1 +囚 4 +x:4 +顾惜 1 +x:1 +主设计者 1 +x:1 +肥王 1 +x:1 +荒水面 1 +x:1 +未眠 1 +x:1 +宗教画 1 +x:1 +增订本 1 +x:1 +世间 1 +x:1 +开放式 1 +x:1 +判若鸿沟 1 +x:1 +女侠 1 +x:1 +小岗村 1 +x:1 +花花公子 1 +x:1 +差别性 1 +x:1 +别树一帜 1 +x:1 +决定权 1 +x:1 +威士忌酒 1 +x:1 +主席会 1 +x:1 +行状 1 +x:1 +丢官 1 +x:1 +水文局 1 +x:1 +希伯莱 1 +x:1 +敌害 1 +x:1 +农调队 1 +x:1 +宗教界 1 +x:1 +货币局 1 +x:1 +学业有成 1 +x:1 +高中版 1 +x:1 +膀阔腰圆 1 +x:1 +红绿灯 1 +x:1 +感念 1 +x:1 +布置一新 1 +x:1 +善本库 1 +x:1 +挂号信 1 +x:1 +琳琅满目 1 +x:1 +天蚕蛾 1 +x:1 +船民 1 +x:1 +繁难 1 +x:1 +病原菌 1 +x:1 +医药站 1 +x:1 +购置费 1 +x:1 +海晏县 1 +x:1 +积压 1 +x:1 +八卦拳 1 +x:1 +肥猪 1 +x:1 +海地 1 +x:1 +动力车 1 +x:1 +光板儿 1 +x:1 +施用量 1 +x:1 +建寺 1 +x:1 +文学所 1 +x:1 +罗布泊 1 +x:1 +荒诞剧 1 +x:1 +粥样 1 +x:1 +帮助 1 +x:1 +C 93 +x:93 +船泊 1 +x:1 +肝吸虫 1 +x:1 +沾光 1 +x:1 +防震棚 1 +x:1 +镶嵌 1 +x:1 +感觉神经 1 +x:1 +女伴 1 +x:1 +舱 34 +x:34 +版面 1 +x:1 +施行 1 +x:1 +修好 1 +x:1 +思辩 1 +x:1 +思辨 1 +x:1 +竖线 1 +x:1 +暗号 1 +x:1 +俗态 1 +x:1 +崔巷 1 +x:1 +无所作为 1 +x:1 +建客 1 +x:1 +擎接 1 +x:1 +更名 1 +x:1 +借书车 1 +x:1 +日见其大 1 +x:1 +公布牌 1 +x:1 +中南部 1 +x:1 +神魄 1 +x:1 +惠存 1 +x:1 +盎然 1 +x:1 +六日 1 +x:1 +绑 22 +x:22 +挂车 1 +x:1 +辣妹子 1 +x:1 +执罚队 1 +x:1 +条条缕缕 1 +x:1 +菜板 1 +x:1 +眼线 1 +x:1 +板擦儿 1 +x:1 +筹集 1 +x:1 +挂轴 1 +x:1 +锋芒 1 +x:1 +六时 1 +x:1 +氢镍 1 +x:1 +女佣 1 +x:1 +挂载 1 +x:1 +齐整整 1 +x:1 +桦树街 1 +x:1 +阿谀 1 +x:1 +浇筑量 1 +x:1 +气喘吁吁 1 +x:1 +遽然 1 +x:1 +尖草坪 1 +x:1 +磕头 1 +x:1 +独门独户 1 +x:1 +长足 1 +x:1 +无骨架 1 +x:1 +讥讽 1 +x:1 +拖后腿 1 +x:1 +组配 1 +x:1 +聚居区 1 +x:1 +典鉴 1 +x:1 +沅江 1 +x:1 +船歌 1 +x:1 +锦 19 +x:19 +变频管 1 +x:1 +棉纺织厂 1 +x:1 +决定性 1 +x:1 +八卦教 1 +x:1 +滚落 1 +x:1 +高中生 1 +x:1 +巴恩市 1 +x:1 +妹 32 +x:32 +九五 1 +x:1 +讥诮 1 +x:1 +辛集市 1 +x:1 +轻者 1 +x:1 +噶厦 1 +x:1 +闹情绪者 1 +x:1 +公意 1 +x:1 +人民警察 1 +x:1 +遁词 1 +x:1 +荒败 1 +x:1 +平肝熄风 1 +x:1 +仁和区 1 +x:1 +界河 1 +x:1 +供方 1 +x:1 +大宛齐 1 +x:1 +养狐场 1 +x:1 +社员 1 +x:1 +公愤 1 +x:1 +通天尽人 1 +x:1 +恒星 1 +x:1 +广为人知 1 +x:1 +长跑 1 +x:1 +肥胖症 1 +x:1 +子叶 1 +x:1 +私盐案 1 +x:1 +水文学 1 +x:1 +河津市 1 +x:1 +大中小学 1 +x:1 +忠诚 1 +x:1 +货币学 1 +x:1 +口碑 1 +x:1 +原煤 1 +x:1 +严重度 1 +x:1 +泄私愤 1 +x:1 +大中企业 1 +x:1 +以邻为壑 1 +x:1 +服务站 1 +x:1 +业务 1 +x:1 +瞒报 1 +x:1 +伴同 1 +x:1 +用种量 1 +x:1 +救急 1 +x:1 +广柑 1 +x:1 +磁力 1 +x:1 +兽皮 1 +x:1 +顶楼 1 +x:1 +聚居县 1 +x:1 +布政使 1 +x:1 +喽罗 1 +x:1 +瓦隆人 1 +x:1 +重庆团 1 +x:1 +以身殉职 1 +x:1 +菇场 1 +x:1 +寒暑假 1 +x:1 +繁殖量 1 +x:1 +贞操 1 +x:1 +主厅 1 +x:1 +兴致勃勃 1 +x:1 +灯光 1 +x:1 +徐悲鸿 1 +x:1 +茶房 1 +x:1 +硬设备 1 +x:1 +起来 1 +x:1 +石柱湾 1 +x:1 +服务窗 1 +x:1 +监考员 1 +x:1 +熔铁铄金 1 +x:1 +刺绣 1 +x:1 +按部就班 1 +x:1 +威信扫地 1 +x:1 +九七 1 +x:1 +试营业 1 +x:1 +防伪灯 1 +x:1 +集贤县 1 +x:1 +层峦迭嶂 1 +x:1 +荣誉 1 +x:1 +丁金村 1 +x:1 +挂表 1 +x:1 +萦思 1 +x:1 +消费量 1 +x:1 +玩具店 1 +x:1 +长赋 1 +x:1 +哪怕 1 +x:1 +迫在眉睫 1 +x:1 +狗尾草 1 +x:1 +暮年 1 +x:1 +善于 1 +x:1 +善事 1 +x:1 +被毁灭者 1 +x:1 +愈 105 +x:105 +马前卒 1 +x:1 +叛变 1 +x:1 +倒买倒卖 1 +x:1 +磁化 1 +x:1 +者 347 +x:347 +不称职者 1 +x:1 +平方海里 1 +x:1 +山耳东村 1 +x:1 +长野市 1 +x:1 +阿尔勒 1 +x:1 +讯 4046 +x:4046 +活动类 1 +x:1 +善人 1 +x:1 +伤天害理 1 +x:1 +不完全叶 1 +x:1 +姐告 1 +x:1 +顶棚 1 +x:1 +一劳永逸 1 +x:1 +乱子 1 +x:1 +国泰 1 +x:1 +船模 1 +x:1 +朗朗上口 1 +x:1 +特许权 1 +x:1 +荒谬 1 +x:1 +宽宽敞敞 1 +x:1 +慈眉善目 1 +x:1 +蚕眠 1 +x:1 +禁期 1 +x:1 +磁卡 1 +x:1 +灰尘肺 1 +x:1 +见示 1 +x:1 +口福 1 +x:1 +写字台 1 +x:1 +工作地 1 +x:1 +围桌 1 +x:1 +福州市人 1 +x:1 +坞修 1 +x:1 +凑手 1 +x:1 +音乐季 1 +x:1 +更加 1 +x:1 +现代式 1 +x:1 +磁厂 1 +x:1 +俭省 1 +x:1 +海安市 1 +x:1 +蜇 1 +x:1 +建工 1 +x:1 +化淤 1 +x:1 +独步天下 1 +x:1 +发展史 1 +x:1 +京门 1 +x:1 +违反 1 +x:1 +清运率 1 +x:1 +肥田 1 +x:1 +羚角 1 +x:1 +带材 1 +x:1 +忠言 1 +x:1 +国民 1 +x:1 +原点 1 +x:1 +各执一端 1 +x:1 +丁坝 1 +x:1 +中宣部 1 +x:1 +氧原子 1 +x:1 +音乐家 1 +x:1 +伴唱 1 +x:1 +善举 1 +x:1 +新 14101 +x:14101 +冲账 1 +x:1 +音乐宫 1 +x:1 +善为 1 +x:1 +长谈 1 +x:1 +沾化县 1 +x:1 +牙色 1 +x:1 +长调 1 +x:1 +乘着 1 +x:1 +柏树 1 +x:1 +无牌照 1 +x:1 +吱吱喳喳 1 +x:1 +诸旅 1 +x:1 +带机 1 +x:1 +艺丛 1 +x:1 +不可名状 1 +x:1 +瓦尔米吉 1 +x:1 +无误 1 +x:1 +海巡队 1 +x:1 +月终 1 +x:1 +辐条 1 +x:1 +棉种 1 +x:1 +月经 1 +x:1 +昏庸 1 +x:1 +荣记 1 +x:1 +电喷车 1 +x:1 +棉秆 1 +x:1 +服务箱 1 +x:1 +冲走 1 +x:1 +西阳城 1 +x:1 +化石区 1 +x:1 +锚索 1 +x:1 +探测船 1 +x:1 +漫漶 1 +x:1 +明镜 1 +x:1 +华辞 1 +x:1 +元/车 1 +x:1 +阿訇 1 +x:1 +带有 1 +x:1 +脱出症 1 +x:1 +杂务事 1 +x:1 +长安乡 1 +x:1 +投入量 1 +x:1 +橛子 1 +x:1 +蓦然 1 +x:1 +交割单 1 +x:1 +溪乾 1 +x:1 +公捕 1 +x:1 +救护 1 +x:1 +领班人 1 +x:1 +大青杨 1 +x:1 +建平 1 +x:1 +从教 1 +x:1 +军用犬 1 +x:1 +身 428 +x:428 +称法 1 +x:1 +肥皂 1 +x:1 +艾利逊 1 +x:1 +工作周 1 +x:1 +成文法 1 +x:1 +长辈 1 +x:1 +超低空 1 +x:1 +旅行家 1 +x:1 +深仇大恨 1 +x:1 +圆角 1 +x:1 +猪油 1 +x:1 +牙膏 1 +x:1 +稠乎乎 1 +x:1 +普通机 1 +x:1 +红4军 1 +x:1 +保军转民 1 +x:1 +圆规 1 +x:1 +加里曼丹 1 +x:1 +电工系 1 +x:1 +奶油 1 +x:1 +郁江 1 +x:1 +玛多县 1 +x:1 +深藏 1 +x:1 +长远 1 +x:1 +长进 1 +x:1 +听课率 1 +x:1 +演义 1 +x:1 +云南省 1 +x:1 +遭罪 1 +x:1 +懵 6 +x:6 +可批性 1 +x:1 +僧袍 1 +x:1 +另行 1 +x:1 +废墟 1 +x:1 +涂 59 +x:59 +鼓浪屿 1 +x:1 +神鸟 1 +x:1 +金光灿灿 1 +x:1 +收发报机 1 +x:1 +肥瘦 1 +x:1 +大中镇 1 +x:1 +结伴 1 +x:1 +世道 1 +x:1 +无伤大体 1 +x:1 +仓鼠 1 +x:1 +蒜 16 +x:16 +高丽参 1 +x:1 +结伙 1 +x:1 +阿穆尔虎 1 +x:1 +更其 1 +x:1 +更具 1 +x:1 +押运费 1 +x:1 +购 181 +x:181 +肾囊 1 +x:1 +簿子 1 +x:1 +调任 1 +x:1 +大循环 1 +x:1 +玄机 1 +x:1 +内道 1 +x:1 +银奖 1 +x:1 +调价 1 +x:1 +滚蛋 1 +x:1 +法不责众 1 +x:1 +起敬 1 +x:1 +胳膊腕子 1 +x:1 +种地 1 +x:1 +奶水 1 +x:1 +红雁池 1 +x:1 +凉城 1 +x:1 +病原虫 1 +x:1 +社团 1 +x:1 +建康 1 +x:1 +丑八怪 1 +x:1 +结余 1 +x:1 +深蕴 1 +x:1 +神鹿 1 +x:1 +结体 1 +x:1 +公推 1 +x:1 +河曲县 1 +x:1 +调人 1 +x:1 +冻土区 1 +x:1 +观测期 1 +x:1 +臭味相投 1 +x:1 +权力电 1 +x:1 +船桨 1 +x:1 +卤鸭 1 +x:1 +急用 1 +x:1 +感官 1 +x:1 +卫生网 1 +x:1 +结亲 1 +x:1 +专用区 1 +x:1 +从政 1 +x:1 +卤鸡 1 +x:1 +中科健A 1 +x:1 +致富 1 +x:1 +三台村 1 +x:1 +育人 1 +x:1 +急电 1 +x:1 +结交 1 +x:1 +张 7355 +x:7355 +孔菜 1 +x:1 +峰峰镇 1 +x:1 +油盘 1 +x:1 +劳动保险 1 +x:1 +协调 1 +x:1 +对台戏 1 +x:1 +火筷子 1 +x:1 +舵轮 1 +x:1 +挂记 1 +x:1 +避难间 1 +x:1 +重丘区 1 +x:1 +襄 15 +x:15 +乱套 1 +x:1 +塑瓶 1 +x:1 +叛军 1 +x:1 +含混不清 1 +x:1 +靠水吃水 1 +x:1 +音乐奖 1 +x:1 +解毒 1 +x:1 +调休 1 +x:1 +法文化 1 +x:1 +华贵 1 +x:1 +切割器 1 +x:1 +一股了之 1 +x:1 +观察镜 1 +x:1 +战术 1 +x:1 +毛毯 1 +x:1 +百花争艳 1 +x:1 +服务社 1 +x:1 +战机 1 +x:1 +转型 1 +x:1 +倒轮闸 1 +x:1 +受调查者 1 +x:1 +界面学 1 +x:1 +社址 1 +x:1 +公房 1 +x:1 +结仇 1 +x:1 +臻乎 1 +x:1 +禁放 1 +x:1 +结为 1 +x:1 +电解铜 1 +x:1 +笔简意深 1 +x:1 +雾都 1 +x:1 +叛党 1 +x:1 +杂税 1 +x:1 +千钧重负 1 +x:1 +腰包 1 +x:1 +掺杂 1 +x:1 +财迷心窍 1 +x:1 +包刷处 1 +x:1 +断代史 1 +x:1 +三不管 1 +x:1 +结业 1 +x:1 +扶养 1 +x:1 +叛兵 1 +x:1 +男中音 1 +x:1 +原状 1 +x:1 +核实验 1 +x:1 +幸福观 1 +x:1 +小循环 1 +x:1 +臻于 1 +x:1 +世所少见 1 +x:1 +犁耕层 1 +x:1 +心尖儿 1 +x:1 +调侃 1 +x:1 +吃零嘴 1 +x:1 +竖立 1 +x:1 +见世面 1 +x:1 +离退休金 1 +x:1 +体积 1 +x:1 +战果 1 +x:1 +钻探 1 +x:1 +棚 22 +x:22 +商业处 1 +x:1 +幡 1 +x:1 +沙市区 1 +x:1 +公报 1 +x:1 +徒步 1 +x:1 +公开性 1 +x:1 +急症 1 +x:1 +曲轴 1 +x:1 +俄族人 1 +x:1 +帮困 1 +x:1 +祝福声 1 +x:1 +涪 1 +x:1 +靓丽 1 +x:1 +多毛类 1 +x:1 +当阳 1 +x:1 +结冰 1 +x:1 +冻灾 1 +x:1 +荚果 1 +x:1 +共处 1 +x:1 +锻工 1 +x:1 +调停 1 +x:1 +骆驼绒 1 +x:1 +娜 10 +x:10 +自习率 1 +x:1 +长安县 1 +x:1 +板实 1 +x:1 +离职金 1 +x:1 +嘲笑声 1 +x:1 +涩 6 +x:6 +挂钩 1 +x:1 +拔草 1 +x:1 +韭芽 1 +x:1 +晒谷场 1 +x:1 +血制品 1 +x:1 +闪开 1 +x:1 +缓冲期 1 +x:1 +扩容 1 +x:1 +牙龈 1 +x:1 +扩宽 1 +x:1 +幼雀 1 +x:1 +板对 1 +x:1 +吧台 1 +x:1 +勇飞 1 +x:1 +同温层 1 +x:1 +案底 1 +x:1 +办刊 1 +x:1 +嫩叶 1 +x:1 +隐忧 1 +x:1 +善变 1 +x:1 +原浆 1 +x:1 +菜糊 1 +x:1 +牲粉 1 +x:1 +初年 1 +x:1 +马里兰州 1 +x:1 +计生联 1 +x:1 +办到 1 +x:1 +冷锋 1 +x:1 +筹资 1 +x:1 +利禄 1 +x:1 +长野 1 +x:1 +金粟兰 1 +x:1 +清费治乱 1 +x:1 +调值 1 +x:1 +孤儿节 1 +x:1 +蔡塘 1 +x:1 +挂链 1 +x:1 +遣送 1 +x:1 +倒胃口 1 +x:1 +老江湖 1 +x:1 +瓦店镇 1 +x:1 +结儿 1 +x:1 +笔油 1 +x:1 +播散力 1 +x:1 +羊 224 +x:224 +槟子 1 +x:1 +行楷 1 +x:1 +点票站 1 +x:1 +报恩 1 +x:1 +执行率 1 +x:1 +七老八十 1 +x:1 +党代会 1 +x:1 +征地 1 +x:1 +莱山 1 +x:1 +六级 1 +x:1 +大泽山 1 +x:1 +侪 1 +x:1 +原液 1 +x:1 +初度 1 +x:1 +委托方 1 +x:1 +海测之声 1 +x:1 +奶牙 1 +x:1 +北京市 1 +x:1 +奶牛 1 +x:1 +制造费 1 +x:1 +接茬儿 1 +x:1 +噶伦 1 +x:1 +降冰量 1 +x:1 +六经 1 +x:1 +军事区 1 +x:1 +隐形 1 +x:1 +神聊 1 +x:1 +那达慕 1 +x:1 +神职 1 +x:1 +玷辱 1 +x:1 +名扬天下 1 +x:1 +注塑模 1 +x:1 +饭费 1 +x:1 +蹦子 1 +x:1 +九制 1 +x:1 +文学社 1 +x:1 +敌百虫 1 +x:1 +盛产地 1 +x:1 +墩子 1 +x:1 +笔法 1 +x:1 +电工所 1 +x:1 +肥桃 1 +x:1 +板子 1 +x:1 +丧葬费 1 +x:1 +代英县 1 +x:1 +被动式 1 +x:1 +怅然 1 +x:1 +寄信人 1 +x:1 +当雄 1 +x:1 +冒头 1 +x:1 +国际奖 1 +x:1 +特古米亚 1 +x:1 +冒失 1 +x:1 +兽欲 1 +x:1 +秀水街 1 +x:1 +进而言之 1 +x:1 +公开组 1 +x:1 +原动力 1 +x:1 +吆喝 1 +x:1 +莱州 1 +x:1 +勘定 1 +x:1 +东亭区 1 +x:1 +印发 1 +x:1 +战神 1 +x:1 +星系级 1 +x:1 +阚 7 +x:7 +潜江县 1 +x:1 +针织品 1 +x:1 +筹谋 1 +x:1 +笔洗 1 +x:1 +皇城根 1 +x:1 +劭 1 +x:1 +调入 1 +x:1 +调养 1 +x:1 +该日 1 +x:1 +战祸 1 +x:1 +宝盖头 1 +x:1 +封建王朝 1 +x:1 +三化螟 1 +x:1 +泥质灰岩 1 +x:1 +圆雕 1 +x:1 +急步 1 +x:1 +总务长 1 +x:1 +吞服 1 +x:1 +服务期 1 +x:1 +高中档 1 +x:1 +磁体 1 +x:1 +勘察 1 +x:1 +孤寂感 1 +x:1 +沿用 1 +x:1 +当面 1 +x:1 +冲量 1 +x:1 +原汁 1 +x:1 +胡 1587 +x:1587 +新兴县 1 +x:1 +捍卫者 1 +x:1 +灵验 1 +x:1 +扯秧 1 +x:1 +英格兰队 1 +x:1 +起立 1 +x:1 +枪杀案 1 +x:1 +认命 1 +x:1 +拿手 1 +x:1 +兰大 1 +x:1 +瑰怪 1 +x:1 +选调生 1 +x:1 +拟订 1 +x:1 +刀螂 1 +x:1 +硬货币 1 +x:1 +调减 1 +x:1 +挂锁 1 +x:1 +办发 1 +x:1 +瘴气 1 +x:1 +刺探 1 +x:1 +僧面 1 +x:1 +操作室 1 +x:1 +公布栏 1 +x:1 +食文化 1 +x:1 +梦寐 1 +x:1 +长逝 1 +x:1 +等级分制 1 +x:1 +颁奖 1 +x:1 +长途 1 +x:1 +常州籍 1 +x:1 +陪笑 1 +x:1 +二五眼 1 +x:1 +调出 1 +x:1 +棉纺织业 1 +x:1 +修复师 1 +x:1 +眯瞪 1 +x:1 +盛器 1 +x:1 +荒郊 1 +x:1 +月报 1 +x:1 +拿拿 1 +x:1 +净 157 +x:157 +恩古巴尼 1 +x:1 +学术团 1 +x:1 +环境 1 +x:1 +兼并案 1 +x:1 +哥特式 1 +x:1 +选料 1 +x:1 +拙劣 1 +x:1 +钩虫 1 +x:1 +神经系统 1 +x:1 +办厂 1 +x:1 +猪猡 1 +x:1 +违例 1 +x:1 +阿队 1 +x:1 +拢 23 +x:23 +更为 1 +x:1 +豆奶粉 1 +x:1 +公粮 1 +x:1 +牙克西 1 +x:1 +烟消云散 1 +x:1 +行栈 1 +x:1 +门可罗雀 1 +x:1 +加工点 1 +x:1 +晋察冀 1 +x:1 +拔节 1 +x:1 +拔腿 1 +x:1 +冷面 1 +x:1 +饲料厂 1 +x:1 +助攻型 1 +x:1 +竖有 1 +x:1 +失之空洞 1 +x:1 +硝酸 1 +x:1 +贬抑 1 +x:1 +卫生所 1 +x:1 +初小 1 +x:1 +大山村 1 +x:1 +环子 1 +x:1 +出乖露丑 1 +x:1 +萦绕 1 +x:1 +油头滑脑 1 +x:1 +伪团长 1 +x:1 +蚕桑 1 +x:1 +审验 1 +x:1 +流通性 1 +x:1 +公署 1 +x:1 +核对者 1 +x:1 +· 238 +x:238 +俗称 1 +x:1 +判决书 1 +x:1 +国王 1 +x:1 +利税额 1 +x:1 +地上茎 1 +x:1 +欲壑难平 1 +x:1 +共存 1 +x:1 +小家伙 1 +x:1 +木头 1 +x:1 +电炉子 1 +x:1 +东拉西扯 1 +x:1 +肝郁 1 +x:1 +牢狱 1 +x:1 +那么样 1 +x:1 +排污沟 1 +x:1 +基建工 1 +x:1 +超计划 1 +x:1 +船电 1 +x:1 +结句 1 +x:1 +类新星 1 +x:1 +竖条 1 +x:1 +心乱如麻 1 +x:1 +罗湖 1 +x:1 +等客上门 1 +x:1 +帐幕 1 +x:1 +挂零 1 +x:1 +饲 2 +x:2 +佩奇 1 +x:1 +女团 1 +x:1 +军事史 1 +x:1 +调制 1 +x:1 +决堤 1 +x:1 +羊窝 1 +x:1 +行止 1 +x:1 +促膝长谈 1 +x:1 +五谷 1 +x:1 +卤莽 1 +x:1 +豆腐夭村 1 +x:1 +宾格尔省 1 +x:1 +兼毫 1 +x:1 +征用 1 +x:1 +修鞋匠 1 +x:1 +世象 1 +x:1 +霉烂 1 +x:1 +明言 1 +x:1 +界牌 1 +x:1 +乔其纱 1 +x:1 +炬 2 +x:2 +圆锥 1 +x:1 +自开生面 1 +x:1 +平平淡淡 1 +x:1 +福清市 1 +x:1 +歹徒 1 +x:1 +宽城街 1 +x:1 +当铺 1 +x:1 +钓鱼人 1 +x:1 +检查仪 1 +x:1 +莫明其妙 1 +x:1 +加工率 1 +x:1 +推动性 1 +x:1 +纪纲 1 +x:1 +道班 1 +x:1 +行款 1 +x:1 +剿除 1 +x:1 +扩大 1 +x:1 +调动 1 +x:1 +字纸篓 1 +x:1 +冰球馆 1 +x:1 +歹心 1 +x:1 +目视 1 +x:1 +友谊座 1 +x:1 +机制论 1 +x:1 +卤菜 1 +x:1 +梦境 1 +x:1 +从化市 1 +x:1 +体操 1 +x:1 +采药 1 +x:1 +横线 1 +x:1 +至亲好友 1 +x:1 +拱北关 1 +x:1 +要价 1 +x:1 +体改 1 +x:1 +圈速 1 +x:1 +女垒 1 +x:1 +糖 69 +x:69 +调升 1 +x:1 +壮锦 1 +x:1 +坑农 1 +x:1 +归除 1 +x:1 +黄连素 1 +x:1 +适销 1 +x:1 +菜羊 1 +x:1 +竞标 1 +x:1 +罗田县 1 +x:1 +结办 1 +x:1 +板墙 1 +x:1 +药碾 1 +x:1 +躁动不安 1 +x:1 +稽查队 1 +x:1 +悠闲自得 1 +x:1 +文物者 1 +x:1 +保留率 1 +x:1 +耆宿 1 +x:1 +归附 1 +x:1 +圆钢 1 +x:1 +办公 1 +x:1 +狐狸皮 1 +x:1 +顶盖 1 +x:1 +脏字 1 +x:1 +归降 1 +x:1 +先富者 1 +x:1 +离退休费 1 +x:1 +差错率 1 +x:1 +尕斯库勒 1 +x:1 +诸葛村 1 +x:1 +服役期 1 +x:1 +十四行 1 +x:1 +调匀 1 +x:1 +牙鲆 1 +x:1 +身陷囹圄 1 +x:1 +赔 52 +x:52 +枯立木 1 +x:1 +正传 1 +x:1 +月经带 1 +x:1 +馨香 1 +x:1 +锦城苑 1 +x:1 +扩增 1 +x:1 +明证 1 +x:1 +循化 1 +x:1 +归队 1 +x:1 +晶粒 1 +x:1 +黑咕隆冬 1 +x:1 +高运价率 1 +x:1 +诗词史 1 +x:1 +棉条 1 +x:1 +音乐室 1 +x:1 +中环 1 +x:1 +板壁 1 +x:1 +威权 1 +x:1 +国父 1 +x:1 +悉尼湾 1 +x:1 +姑息迁就 1 +x:1 +冷雨 1 +x:1 +尤杯赛 1 +x:1 +蛎饼 1 +x:1 +四仰八叉 1 +x:1 +红小鬼 1 +x:1 +调取 1 +x:1 +脸上 1 +x:1 +华释 1 +x:1 +华里 1 +x:1 +办函 1 +x:1 +起码 1 +x:1 +间皮瘤 1 +x:1 +神茶 1 +x:1 +膀粗腰圆 1 +x:1 +升级 1 +x:1 +归集 1 +x:1 +异词 1 +x:1 +人头攒动 1 +x:1 +食不果腹 1 +x:1 +拂袖而去 1 +x:1 +调号 1 +x:1 +南蒲 1 +x:1 +橡皮泥 1 +x:1 +蜜瓜 1 +x:1 +腐败 1 +x:1 +快速化 1 +x:1 +乘务部 1 +x:1 +等米下锅 1 +x:1 +贬损 1 +x:1 +威望 1 +x:1 +颜料 1 +x:1 +盛名 1 +x:1 +公约 1 +x:1 +草花蜜 1 +x:1 +捻子 1 +x:1 +挂靠 1 +x:1 +林计 1 +x:1 +挂面 1 +x:1 +生死攸关 1 +x:1 +泪 92 +x:92 +手无寸铁 1 +x:1 +富贵病 1 +x:1 +隐居 1 +x:1 +世贸 1 +x:1 +大排档 1 +x:1 +满负荷 1 +x:1 +环境部 1 +x:1 +动力部 1 +x:1 +麻醉性 1 +x:1 +绍兴县 1 +x:1 +拉下水 1 +x:1 +梦幻 1 +x:1 +昌 14 +x:14 +冷酷 1 +x:1 +服务所 1 +x:1 +月月 1 +x:1 +干鲜果品 1 +x:1 +国际局 1 +x:1 +熙 7 +x:7 +纤维 1 +x:1 +冒尖 1 +x:1 +兰山 1 +x:1 +账 173 +x:173 +纤细 1 +x:1 +复兴村 1 +x:1 +肥沃 1 +x:1 +月末 1 +x:1 +结喉 1 +x:1 +兼济 1 +x:1 +鹞 1 +x:1 +画库 1 +x:1 +央行 1 +x:1 +阿森纳队 1 +x:1 +服务战 1 +x:1 +上周末 1 +x:1 +何时 1 +x:1 +参加国 1 +x:1 +狗肉 1 +x:1 +初婚 1 +x:1 +长安城 1 +x:1 +猪皮 1 +x:1 +泼辣 1 +x:1 +何日 1 +x:1 +当家做主 1 +x:1 +华阳 1 +x:1 +债务率 1 +x:1 +大阪市 1 +x:1 +醉鬼 1 +x:1 +急湍 1 +x:1 +已然 1 +x:1 +反射光 1 +x:1 +臆见 1 +x:1 +淡褐色 1 +x:1 +全堂镇 1 +x:1 +短 326 +x:326 +勃然 1 +x:1 +河卵石 1 +x:1 +公社 1 +x:1 +加工电 1 +x:1 +整合式 1 +x:1 +惹人注目 1 +x:1 +小富即安 1 +x:1 +熟睡 1 +x:1 +不来梅 1 +x:1 +纯洁性 1 +x:1 +顶煤 1 +x:1 +公私 1 +x:1 +轺车 1 +x:1 +国画 1 +x:1 +莱塞 1 +x:1 +跨平台 1 +x:1 +翩翩起舞 1 +x:1 +肥水 1 +x:1 +厚 105 +x:105 +禁绝 1 +x:1 +奶白 1 +x:1 +损毁 1 +x:1 +晏下村 1 +x:1 +扇 39 +x:39 +高林村镇 1 +x:1 +轻嘴薄舌 1 +x:1 +含 323 +x:323 +板式 1 +x:1 +幌子 1 +x:1 +抹煞 1 +x:1 +长长 1 +x:1 +剀切 1 +x:1 +调和 1 +x:1 +指路卡 1 +x:1 +闷雷 1 +x:1 +扩张 1 +x:1 +炉龄 1 +x:1 +畜牧病 1 +x:1 +船王 1 +x:1 +猪瘟 1 +x:1 +月柿 1 +x:1 +心浮气躁 1 +x:1 +禁约 1 +x:1 +多面体 1 +x:1 +等距离 1 +x:1 +鼓掌声 1 +x:1 +新纪元 1 +x:1 +鸳鸯 1 +x:1 +警察署 1 +x:1 +盗鸟 1 +x:1 +何故 1 +x:1 +国界 1 +x:1 +熟知 1 +x:1 +异读 1 +x:1 +槐米 1 +x:1 +扩建 1 +x:1 +北票市 1 +x:1 +三明市 1 +x:1 +催发 1 +x:1 +五讲 1 +x:1 +菊科 1 +x:1 +伫望 1 +x:1 +入场券 1 +x:1 +顾绣 1 +x:1 +长钢 1 +x:1 +圈阅 1 +x:1 +冷遇 1 +x:1 +文学系 1 +x:1 +贬斥 1 +x:1 +半封建 1 +x:1 +史略 1 +x:1 +原样 1 +x:1 +火烧眉毛 1 +x:1 +多孩率 1 +x:1 +中灶 1 +x:1 +世说 1 +x:1 +板床 1 +x:1 +有警必接 1 +x:1 +活化剂 1 +x:1 +比上不足 1 +x:1 +叫菜 1 +x:1 +道理 1 +x:1 +工作会 1 +x:1 +岗地 1 +x:1 +小卜冒 1 +x:1 +退掉 1 +x:1 +白家庄 1 +x:1 +周城 1 +x:1 +居住者 1 +x:1 +买入 1 +x:1 +描 9 +x:9 +月晕 1 +x:1 +三星队 1 +x:1 +箱内 1 +x:1 +街亭失守 1 +x:1 +顶点 1 +x:1 +悠荡 1 +x:1 +保暖房 1 +x:1 +血性 1 +x:1 +归途 1 +x:1 +八公桥 1 +x:1 +办场 1 +x:1 +剧 85 +x:85 +盗卖 1 +x:1 +贩子 1 +x:1 +刺杀 1 +x:1 +缔约 1 +x:1 +冥王星 1 +x:1 +某日 1 +x:1 +初学 1 +x:1 +头发屑 1 +x:1 +叶尔羌河 1 +x:1 +富山市 1 +x:1 +五证 1 +x:1 +帅才 1 +x:1 +的笃班 1 +x:1 +食品盒 1 +x:1 +案子 1 +x:1 +寿宴 1 +x:1 +兰州 1 +x:1 +帖子 1 +x:1 +冲销 1 +x:1 +决心 1 +x:1 +抹灰 1 +x:1 +价值连城 1 +x:1 +虞者 1 +x:1 +增 499 +x:499 +文学类 1 +x:1 +女儿 1 +x:1 +宣传组 1 +x:1 +西夏区 1 +x:1 +隆化县 1 +x:1 +结实率 1 +x:1 +结合 1 +x:1 +初审 1 +x:1 +柔韧性 1 +x:1 +国球 1 +x:1 +贴膏剂 1 +x:1 +墩布 1 +x:1 +卫生日 1 +x:1 +寿宁 1 +x:1 +监守自盗 1 +x:1 +峰会 1 +x:1 +明着说 1 +x:1 +破产方 1 +x:1 +木康 1 +x:1 +央视 1 +x:1 +烧砖人 1 +x:1 +环岛 1 +x:1 +安庆市 1 +x:1 +挑战赛 1 +x:1 +思量 1 +x:1 +冻疮 1 +x:1 +中标 1 +x:1 +维他命 1 +x:1 +刺柏 1 +x:1 +寂无一人 1 +x:1 +大腹便便 1 +x:1 +那曲县 1 +x:1 +女兵 1 +x:1 +木床 1 +x:1 +夺食 1 +x:1 +口感 1 +x:1 +需求方 1 +x:1 +志丹 1 +x:1 +体总 1 +x:1 +祖鲁 1 +x:1 +垢污 1 +x:1 +威拉 1 +x:1 +闪失 1 +x:1 +文不对题 1 +x:1 +斗烟丝 1 +x:1 +长鞭 1 +x:1 +世裔 1 +x:1 +调出量 1 +x:1 +奶瓶 1 +x:1 +咸阳 1 +x:1 +浮屠 1 +x:1 +洪洞县 1 +x:1 +柘林 1 +x:1 +制革厂 1 +x:1 +葡萄酒 1 +x:1 +快车化 1 +x:1 +环形 1 +x:1 +汉源县 1 +x:1 +当选 1 +x:1 +阿里 1 +x:1 +自感应 1 +x:1 +周恩来 1 +x:1 +验明正身 1 +x:1 +另选 1 +x:1 +体态 1 +x:1 +喇叭筒 1 +x:1 +肥源 1 +x:1 +康复者 1 +x:1 +款 273 +x:273 +黑咕隆咚 1 +x:1 +卫生星 1 +x:1 +乘务长 1 +x:1 +施官镇 1 +x:1 +盗印 1 +x:1 +柱石 1 +x:1 +录音 1 +x:1 +商水 1 +x:1 +谈店乡 1 +x:1 +针织厂 1 +x:1 +带粮 1 +x:1 +体恤 1 +x:1 +吧嗒 1 +x:1 +盛况 1 +x:1 +当道 1 +x:1 +长须鲸 1 +x:1 +口技 1 +x:1 +尊称 1 +x:1 +夺魁 1 +x:1 +顿挫疗法 1 +x:1 +积习 1 +x:1 +操作层 1 +x:1 +魅力四射 1 +x:1 +服务性 1 +x:1 +原武 1 +x:1 +新会市 1 +x:1 +摇窗 1 +x:1 +上周日 1 +x:1 +嬉 4 +x:4 +复员兵 1 +x:1 +世行 1 +x:1 +雾里看花 1 +x:1 +洁身自好 1 +x:1 +女刊 1 +x:1 +竖排 1 +x:1 +环志 1 +x:1 +服务行业 1 +x:1 +俭开福源 1 +x:1 +史画 1 +x:1 +费尽心力 1 +x:1 +鲜 67 +x:67 +积云 1 +x:1 +先来后到 1 +x:1 +计量秤 1 +x:1 +体悟 1 +x:1 +口才 1 +x:1 +耗时 1 +x:1 +扶优打劣 1 +x:1 +盛典 1 +x:1 +锭 63 +x:63 +包藏祸心 1 +x:1 +灰黑色 1 +x:1 +吉马良斯 1 +x:1 +隐处 1 +x:1 +阿根廷 1 +x:1 +伞形 1 +x:1 +基建处 1 +x:1 +物资 1 +x:1 +物贸 1 +x:1 +尊神 1 +x:1 +普惠制 1 +x:1 +譬如 1 +x:1 +刀背 1 +x:1 +物质 1 +x:1 +忧愤 1 +x:1 +何来 1 +x:1 +菇农 1 +x:1 +西萨摩亚 1 +x:1 +遵纪爱民 1 +x:1 +俭汤 1 +x:1 +无明火 1 +x:1 +蚕沙 1 +x:1 +卷进 1 +x:1 +浴佛礼 1 +x:1 +兼并潮 1 +x:1 +郁热 1 +x:1 +长青 1 +x:1 +葱绿 1 +x:1 +通产省 1 +x:1 +五行 1 +x:1 +战线 1 +x:1 +警报声 1 +x:1 +规定 1 +x:1 +腔调 1 +x:1 +问询 1 +x:1 +明辨 1 +x:1 +破土动工 1 +x:1 +制止 1 +x:1 +阵型 1 +x:1 +女贞子 1 +x:1 +客观主义 1 +x:1 +西器 1 +x:1 +天义站 1 +x:1 +女厕 1 +x:1 +维修业 1 +x:1 +挑拣 1 +x:1 +南木林 1 +x:1 +革命者 1 +x:1 +界石 1 +x:1 +板岩 1 +x:1 +红沙岩 1 +x:1 +长隧 1 +x:1 +挑拨 1 +x:1 +初夏 1 +x:1 +货柜车 1 +x:1 +考察组 1 +x:1 +社会 1 +x:1 +吸烟者 1 +x:1 +有赖于 1 +x:1 +箱号 1 +x:1 +战罢 1 +x:1 +木屐 1 +x:1 +木屑 1 +x:1 +长随 1 +x:1 +木屋 1 +x:1 +拆解 1 +x:1 +挑担 1 +x:1 +橡皮树 1 +x:1 +社企 1 +x:1 +伴侣 1 +x:1 +何曾 1 +x:1 +务实求真 1 +x:1 +道白 1 +x:1 +朝文系 1 +x:1 +卤虾 1 +x:1 +梅岭山 1 +x:1 +女双 1 +x:1 +广纳善策 1 +x:1 +美国队 1 +x:1 +潜泳 1 +x:1 +口授 1 +x:1 +吧哒 1 +x:1 +凤凰山 1 +x:1 +女史 1 +x:1 +社体 1 +x:1 +急流 1 +x:1 +升空 1 +x:1 +收税人 1 +x:1 +非学历 1 +x:1 +居住舱 1 +x:1 +舌战 1 +x:1 +菜篮 1 +x:1 +百舌鸟 1 +x:1 +珠光宝气 1 +x:1 +善后 1 +x:1 +衔命持节 1 +x:1 +遁逃 1 +x:1 +羊羔 1 +x:1 +交警岗 1 +x:1 +长阳 1 +x:1 +公立 1 +x:1 +脏 83 +x:83 +陈家村 1 +x:1 +檀树 1 +x:1 +亭子 1 +x:1 +物象 1 +x:1 +根深蒂固 1 +x:1 +长队 1 +x:1 +伴伺 1 +x:1 +羊羹 1 +x:1 +公章 1 +x:1 +交叉处 1 +x:1 +卢旺达 1 +x:1 +扩展 1 +x:1 +刺斜 1 +x:1 +凉亭 1 +x:1 +共度 1 +x:1 +羊群 1 +x:1 +郑家庄村 1 +x:1 +凤凰岭 1 +x:1 +顶牛 1 +x:1 +檀栾 1 +x:1 +值勤点 1 +x:1 +弯腰 1 +x:1 +嫩嫩枯枯 1 +x:1 +绷硬 1 +x:1 +南号村 1 +x:1 +菜筐 1 +x:1 +咬文嚼字 1 +x:1 +下大力 1 +x:1 +推销性 1 +x:1 +女单 1 +x:1 +龙潭乡 1 +x:1 +普通级 1 +x:1 +南木村 1 +x:1 +撇下 1 +x:1 +初始 1 +x:1 +忧怨 1 +x:1 +载入 1 +x:1 +抵账 1 +x:1 +社保 1 +x:1 +撷要 1 +x:1 +男家 1 +x:1 +挑战 1 +x:1 +忧思 1 +x:1 +共建 1 +x:1 +零用钱 1 +x:1 +案头 1 +x:1 +手拉手 1 +x:1 +葱翠 1 +x:1 +当量 1 +x:1 +教科文部 1 +x:1 +摇篮 1 +x:1 +副性征 1 +x:1 +园艺 1 +x:1 +废丝 1 +x:1 +梅河口市 1 +x:1 +诗 377 +x:377 +乱世 1 +x:1 +转播台 1 +x:1 +大屿山 1 +x:1 +幽兰 1 +x:1 +亏 78 +x:78 +体温 1 +x:1 +发酵剂 1 +x:1 +黑幽幽 1 +x:1 +男宾 1 +x:1 +溽热 1 +x:1 +公畜 1 +x:1 +具体劳动 1 +x:1 +化为灰烬 1 +x:1 +战火 1 +x:1 +创研部 1 +x:1 +斩 15 +x:15 +营养性 1 +x:1 +开水桶 1 +x:1 +客气话 1 +x:1 +营队 1 +x:1 +扩及 1 +x:1 +下有小 1 +x:1 +晕乎乎 1 +x:1 +受试者 1 +x:1 +外果皮 1 +x:1 +代考者 1 +x:1 +数量级 1 +x:1 +破产案 1 +x:1 +乡下人 1 +x:1 +单冷 1 +x:1 +领袖像 1 +x:1 +指示器 1 +x:1 +带状 1 +x:1 +菜瓜 1 +x:1 +营院 1 +x:1 +欣闻 1 +x:1 +才识 1 +x:1 +灭菌奶 1 +x:1 +相依为命 1 +x:1 +水滴石穿 1 +x:1 +明胶 1 +x:1 +文渊阁 1 +x:1 +训斥 1 +x:1 +合作期 1 +x:1 +遍燃 1 +x:1 +勇者 1 +x:1 +公用 1 +x:1 +千方百计 1 +x:1 +被动型 1 +x:1 +礁长 1 +x:1 +毕分办 1 +x:1 +界碑 1 +x:1 +查准率 1 +x:1 +揽 33 +x:33 +中立性 1 +x:1 +播种期 1 +x:1 +小嗓儿 1 +x:1 +挑战者 1 +x:1 +云水洞 1 +x:1 +国礼 1 +x:1 +肥性 1 +x:1 +木叶 1 +x:1 +杂木片 1 +x:1 +歌曲奖 1 +x:1 +原文 1 +x:1 +女将 1 +x:1 +狸子 1 +x:1 +天后楼 1 +x:1 +音乐人 1 +x:1 +女尸 1 +x:1 +废人 1 +x:1 +播种机 1 +x:1 +凤凰县 1 +x:1 +檀木 1 +x:1 +另一方面 1 +x:1 +伞兵 1 +x:1 +安全部 1 +x:1 +一试身手 1 +x:1 +经纱 1 +x:1 +英山 1 +x:1 +经协办 1 +x:1 +滚瓜溜圆 1 +x:1 +动魄惊心 1 +x:1 +小卜少 1 +x:1 +拖儿带女 1 +x:1 +乱仗 1 +x:1 +初四 1 +x:1 +忻口 1 +x:1 +郁结 1 +x:1 +洗车点 1 +x:1 +剃须刀 1 +x:1 +银婚 1 +x:1 +拉油点 1 +x:1 +出世 1 +x:1 +内需 1 +x:1 +口水 1 +x:1 +奈良市 1 +x:1 +调控室 1 +x:1 +无烟 1 +x:1 +徐家桥 1 +x:1 +陡增 1 +x:1 +阿瓦拉山 1 +x:1 +口气 1 +x:1 +音乐会 1 +x:1 +智勇 1 +x:1 +公明党 1 +x:1 +通州区 1 +x:1 +姜农 1 +x:1 +熟稔 1 +x:1 +梦寐以求 1 +x:1 +中医院 1 +x:1 +特困 1 +x:1 +忽微 1 +x:1 +困难重重 1 +x:1 +带班 1 +x:1 +堪培拉 1 +x:1 +行情 1 +x:1 +颠三倒四 1 +x:1 +狐狸精 1 +x:1 +马王堆 1 +x:1 +木剑 1 +x:1 +渺 2 +x:2 +俄亥俄 1 +x:1 +办学 1 +x:1 +宝盖儿 1 +x:1 +公理 1 +x:1 +同乡籍 1 +x:1 +肺部 1 +x:1 +与时俯仰 1 +x:1 +不知所云 1 +x:1 +忽忽 1 +x:1 +蒙尔赞镇 1 +x:1 +木制 1 +x:1 +调处 1 +x:1 +策略性 1 +x:1 +式 123 +x:123 +肘窝 1 +x:1 +神学 1 +x:1 +超声室 1 +x:1 +考试员 1 +x:1 +观测点 1 +x:1 +域 3 +x:3 +建筑队 1 +x:1 +备付率 1 +x:1 +湾沟 1 +x:1 +沿条儿 1 +x:1 +青少年宫 1 +x:1 +核子力 1 +x:1 +长风 1 +x:1 +邹平县 1 +x:1 +北京城 1 +x:1 +干劲冲天 1 +x:1 +互联网站 1 +x:1 +九宫 1 +x:1 +调头 1 +x:1 +积极性 1 +x:1 +伽师县 1 +x:1 +帅 164 +x:164 +牲畜 1 +x:1 +细读 1 +x:1 +物色 1 +x:1 +食品站 1 +x:1 +走势 1 +x:1 +菱角 1 +x:1 +非专职 1 +x:1 +竞技 1 +x:1 +登机闸 1 +x:1 +柘树 1 +x:1 +保送生 1 +x:1 +起爆 1 +x:1 +神经原 1 +x:1 +菜田 1 +x:1 +盛年 1 +x:1 +宛 5 +x:5 +后继无人 1 +x:1 +沙里淘金 1 +x:1 +救生 1 +x:1 +乘机人 1 +x:1 +社木铺村 1 +x:1 +威海 1 +x:1 +药铺 1 +x:1 +决口 1 +x:1 +隔开 1 +x:1 +操作台 1 +x:1 +长须 1 +x:1 +挑水 1 +x:1 +长项 1 +x:1 +高等学校 1 +x:1 +敢死队 1 +x:1 +多足类 1 +x:1 +发酵厂 1 +x:1 +竞拍 1 +x:1 +羽毛丰满 1 +x:1 +独木舟 1 +x:1 +采行 1 +x:1 +得人者 1 +x:1 +茶馆 1 +x:1 +实足 1 +x:1 +永暑礁 1 +x:1 +毛竹林 1 +x:1 +初基 1 +x:1 +菜畦 1 +x:1 +扩刊 1 +x:1 +中牟县 1 +x:1 +何案 1 +x:1 +试 154 +x:154 +兴林 1 +x:1 +物竞天择 1 +x:1 +凝固点 1 +x:1 +坞墙 1 +x:1 +略论稿 1 +x:1 +小娘子 1 +x:1 +急急 1 +x:1 +法律化 1 +x:1 +木兰 1 +x:1 +叠韵 1 +x:1 +铁汉子 1 +x:1 +镇平县 1 +x:1 +暴力片 1 +x:1 +兽性 1 +x:1 +痹论 1 +x:1 +原有 1 +x:1 +媲美 1 +x:1 +拯救 1 +x:1 +环卫 1 +x:1 +感人 1 +x:1 +一分为四 1 +x:1 +采访 1 +x:1 +衬衫 1 +x:1 +邪门歪道 1 +x:1 +坞墩 1 +x:1 +偷天换日 1 +x:1 +纯小数 1 +x:1 +原木 1 +x:1 +致以 1 +x:1 +园边 1 +x:1 +孔雀 1 +x:1 +摇篮曲 1 +x:1 +毕业班 1 +x:1 +结对 1 +x:1 +刀豆 1 +x:1 +善始 1 +x:1 +吃瓜人 1 +x:1 +陈 3235 +x:3235 +回溯 1 +x:1 +板凳 1 +x:1 +有惠 1 +x:1 +低 1404 +x:1404 +苦肉计 1 +x:1 +报告文学 1 +x:1 +蕃茄 1 +x:1 +深重 1 +x:1 +治国篇 1 +x:1 +毒蛇 1 +x:1 +扩军 1 +x:1 +国际制 1 +x:1 +玛达咪 1 +x:1 +孔隙 1 +x:1 +超低温 1 +x:1 +始终 1 +x:1 +红药水 1 +x:1 +感仰 1 +x:1 +抛头露面 1 +x:1 +回笼率 1 +x:1 +深海 1 +x:1 +监测点 1 +x:1 +原来 1 +x:1 +刺桐 1 +x:1 +安乐窝 1 +x:1 +名古屋 1 +x:1 +电炉厂 1 +x:1 +服务法 1 +x:1 +遭殃 1 +x:1 +木凳 1 +x:1 +知更鸟 1 +x:1 +模式化 1 +x:1 +女师 1 +x:1 +牢稳 1 +x:1 +檐 4 +x:4 +白垅村 1 +x:1 +养父母 1 +x:1 +抱有 1 +x:1 +芝川镇 1 +x:1 +禁烟 1 +x:1 +衬裙 1 +x:1 +衬裤 1 +x:1 +油板栗 1 +x:1 +小推车 1 +x:1 +扎根树 1 +x:1 +吃苦 1 +x:1 +黟山 1 +x:1 +高古曼妙 1 +x:1 +十年寒窗 1 +x:1 +黔驴技穷 1 +x:1 +扩充 1 +x:1 +鹅毛大雪 1 +x:1 +晓以利害 1 +x:1 +渗灌 1 +x:1 +中煤 1 +x:1 +刚好 1 +x:1 +避难者 1 +x:1 +印共 1 +x:1 +案后 1 +x:1 +欧风 1 +x:1 +氯化 1 +x:1 +明艳 1 +x:1 +伞包 1 +x:1 +何止 1 +x:1 +芽球 1 +x:1 +国策 1 +x:1 +战犯 1 +x:1 +结子 1 +x:1 +共商国是 1 +x:1 +华领 1 +x:1 +滑行 1 +x:1 +平顶山市 1 +x:1 +盲肠 1 +x:1 +爱康 1 +x:1 +柔柔的 1 +x:1 +譬喻 1 +x:1 +初唐 1 +x:1 +任期 1 +x:1 +木偶 1 +x:1 +蒋介石 1 +x:1 +登封市 1 +x:1 +深邃 1 +x:1 +笔札 1 +x:1 +大口井 1 +x:1 +长骨 1 +x:1 +磙子 1 +x:1 +调子 1 +x:1 +起点 1 +x:1 +对象国 1 +x:1 +蠢 6 +x:6 +吃药 1 +x:1 +刀枪街 1 +x:1 +预选 1 +x:1 +营销 1 +x:1 +菊石 1 +x:1 +报春 1 +x:1 +仁至义尽 1 +x:1 +六甲 1 +x:1 +老中青年 1 +x:1 +信息司 1 +x:1 +油瓜 1 +x:1 +国际化 1 +x:1 +禅师 1 +x:1 +贪欲熏心 1 +x:1 +顶级 1 +x:1 +民政部门 1 +x:1 +过剩论 1 +x:1 +营长 1 +x:1 +办复 1 +x:1 +归真返璞 1 +x:1 +六畜 1 +x:1 +海防林 1 +x:1 +打竹舞 1 +x:1 +加里卜角 1 +x:1 +糜棱 1 +x:1 +该村 1 +x:1 +出事 1 +x:1 +紫荆山 1 +x:1 +恩将仇报 1 +x:1 +锡山市 1 +x:1 +笔杆 1 +x:1 +深部 1 +x:1 +翰墨 1 +x:1 +饮料罐 1 +x:1 +国立 1 +x:1 +神经元 1 +x:1 +瓦灰 1 +x:1 +倭寇 1 +x:1 +往访国 1 +x:1 +善本书 1 +x:1 +笔架 1 +x:1 +体液 1 +x:1 +反射度 1 +x:1 +包干制 1 +x:1 +调寄 1 +x:1 +拇指 1 +x:1 +丙肝 1 +x:1 +塑性 1 +x:1 +化验台 1 +x:1 +牢笼 1 +x:1 +隐含 1 +x:1 +踟蹰 1 +x:1 +兼并战 1 +x:1 +生 559 +x:559 +敬民如父 1 +x:1 +奔波如梭 1 +x:1 +典藏 1 +x:1 +基特加 1 +x:1 +电气焊 1 +x:1 +深造 1 +x:1 +紧绷绷 1 +x:1 +净菜社 1 +x:1 +选举署 1 +x:1 +少年队 1 +x:1 +防伪服 1 +x:1 +感伤 1 +x:1 +封斋 1 +x:1 +冒号 1 +x:1 +妙香山 1 +x:1 +缠身 1 +x:1 +玛纳斯 1 +x:1 +起火 1 +x:1 +冬季两项 1 +x:1 +扑 119 +x:119 +布雷器 1 +x:1 +法兰西堡 1 +x:1 +辐照 1 +x:1 +共勉 1 +x:1 +帅气 1 +x:1 +漏报率 1 +x:1 +针织布 1 +x:1 +箱式 1 +x:1 +刀距 1 +x:1 +结婚 1 +x:1 +差一点 1 +x:1 +除此以外 1 +x:1 +三军医大 1 +x:1 +并轨生 1 +x:1 +新沙乡镇 1 +x:1 +物耗 1 +x:1 +翅翼 1 +x:1 +感佩 1 +x:1 +破折号 1 +x:1 +置放 1 +x:1 +刺槐 1 +x:1 +臼 1 +x:1 +粮棉型 1 +x:1 +沟通 1 +x:1 +卤质 1 +x:1 +冷饮 1 +x:1 +惴惴 1 +x:1 +善待 1 +x:1 +渌 1 +x:1 +初创 1 +x:1 +原意 1 +x:1 +槟城 1 +x:1 +东亚系 1 +x:1 +善徙 1 +x:1 +家庭副业 1 +x:1 +暮云 1 +x:1 +亮眼人 1 +x:1 +扯皮电 1 +x:1 +眼科界 1 +x:1 +龌龊 1 +x:1 +木块 1 +x:1 +初刻 1 +x:1 +亢奋 1 +x:1 +禁脔 1 +x:1 +邳 2 +x:2 +筛糠 1 +x:1 +冒名 1 +x:1 +降价风 1 +x:1 +兼收 1 +x:1 +当仁不让 1 +x:1 +商 142 +x:142 +弹冠相庆 1 +x:1 +宗教局 1 +x:1 +掌班 1 +x:1 +善心 1 +x:1 +结巴 1 +x:1 +白开水 1 +x:1 +咸鱼 1 +x:1 +共商 1 +x:1 +棉桃 1 +x:1 +衔接 1 +x:1 +兰后 1 +x:1 +牢系 1 +x:1 +明辨是非 1 +x:1 +相扑 1 +x:1 +盛宴 1 +x:1 +女声 1 +x:1 +太学 1 +x:1 +公然 1 +x:1 +罗马数字 1 +x:1 +氯喹 1 +x:1 +冷餐 1 +x:1 +粗心大意 1 +x:1 +费改税 1 +x:1 +玩具业 1 +x:1 +布鲁塞尔 1 +x:1 +退耕还田 1 +x:1 +瞻仰 1 +x:1 +钻营 1 +x:1 +谋 145 +x:145 +致贫 1 +x:1 +卫生法 1 +x:1 +隐匿 1 +x:1 +印儿 1 +x:1 +文学界 1 +x:1 +案前 1 +x:1 +核潜艇 1 +x:1 +塑木 1 +x:1 +起眼 1 +x:1 +船篷 1 +x:1 +智利 1 +x:1 +潜江市 1 +x:1 +存放场 1 +x:1 +中油 1 +x:1 +君临 1 +x:1 +君主 1 +x:1 +打紧 1 +x:1 +用棉量 1 +x:1 +簪子 1 +x:1 +宿舍 1 +x:1 +养精蓄锐 1 +x:1 +刺溜 1 +x:1 +潜望镜 1 +x:1 +毕业生 1 +x:1 +采购 1 +x:1 +调峰 1 +x:1 +潮乎乎 1 +x:1 +王屋山 1 +x:1 +歌剧院 1 +x:1 +富贵竹 1 +x:1 +净菜业 1 +x:1 +救灾 1 +x:1 +板坯 1 +x:1 +大潮山 1 +x:1 +求知若渴 1 +x:1 +徐家汇 1 +x:1 +行政 1 +x:1 +救火 1 +x:1 +栓塞 1 +x:1 +忠魂 1 +x:1 +板块 1 +x:1 +畲族乡 1 +x:1 +瀑布 1 +x:1 +关公路 1 +x:1 +祖陵 1 +x:1 +一二月份 1 +x:1 +承 12 +x:12 +顾盼 1 +x:1 +小龙潭村 1 +x:1 +滚烫烫 1 +x:1 +乘车证 1 +x:1 +起皮 1 +x:1 +忠骨 1 +x:1 +案发 1 +x:1 +国粹 1 +x:1 +归顺 1 +x:1 +作画 1 +x:1 +木器 1 +x:1 +高炮团 1 +x:1 +共同 1 +x:1 +昏乱 1 +x:1 +基建办 1 +x:1 +宝贝儿 1 +x:1 +挑棒 1 +x:1 +消费者 1 +x:1 +绝大部分 1 +x:1 +航 22 +x:22 +战略 1 +x:1 +笔意 1 +x:1 +肥料 1 +x:1 +扯后腿 1 +x:1 +加工类 1 +x:1 +竞春 1 +x:1 +利令智昏 1 +x:1 +肝胆相照 1 +x:1 +印相纸 1 +x:1 +门票费 1 +x:1 +德雷西塔 1 +x:1 +阿布扎比 1 +x:1 +每 2015 +x:2015 +交叉口 1 +x:1 +初十 1 +x:1 +东孝乡 1 +x:1 +批准书 1 +x:1 +不着边际 1 +x:1 +斯科普里 1 +x:1 +烟熏火燎 1 +x:1 +典范 1 +x:1 +歌功颂德 1 +x:1 +贩卖 1 +x:1 +押汇 1 +x:1 +作用 1 +x:1 +统制 1 +x:1 +勇闯 1 +x:1 +互联网络 1 +x:1 +糠菜 1 +x:1 +瑶学会 1 +x:1 +寿县 1 +x:1 +悍然不顾 1 +x:1 +公开牌 1 +x:1 +结尾 1 +x:1 +震 110 +x:110 +九归 1 +x:1 +奶罩 1 +x:1 +培育者 1 +x:1 +腻烦 1 +x:1 +用布 1 +x:1 +白皮蒜 1 +x:1 +中流 1 +x:1 +一分为八 1 +x:1 +蒲公英 1 +x:1 +共和 1 +x:1 +挪作 1 +x:1 +因变量 1 +x:1 +要不是 1 +x:1 +黄粱梦村 1 +x:1 +焦头烂额 1 +x:1 +案卷 1 +x:1 +俭朴 1 +x:1 +金属制 1 +x:1 +刮目相看 1 +x:1 +囚徒 1 +x:1 +外科学术 1 +x:1 +冷食 1 +x:1 +阴乎乎 1 +x:1 +女大 1 +x:1 +隽永 1 +x:1 +小买卖 1 +x:1 +羊痘 1 +x:1 +寿司 1 +x:1 +雨露 1 +x:1 +舞美师 1 +x:1 +容光焕发 1 +x:1 +欣 42 +x:42 +仇湖镇 1 +x:1 +低三下四 1 +x:1 +方位 1 +x:1 +镛 2 +x:2 +柔声细语 1 +x:1 +熟练 1 +x:1 +图画文字 1 +x:1 +体毛 1 +x:1 +畜牧系 1 +x:1 +初叶 1 +x:1 +肥效 1 +x:1 +深陷 1 +x:1 +热水型 1 +x:1 +同化政策 1 +x:1 +休伦湖 1 +x:1 +刺激 1 +x:1 +泰兴市 1 +x:1 +温州市 1 +x:1 +颗粒物 1 +x:1 +食品级 1 +x:1 +悬腕 1 +x:1 +始祖 1 +x:1 +国籍 1 +x:1 +结局 1 +x:1 +船票 1 +x:1 +滚瓜烂熟 1 +x:1 +反潜机 1 +x:1 +窘促 1 +x:1 +营造 1 +x:1 +调幅 1 +x:1 +平方米 1 +x:1 +寓情于物 1 +x:1 +怔 6 +x:6 +顶篷 1 +x:1 +一线生机 1 +x:1 +体校 1 +x:1 +丁苯橡胶 1 +x:1 +扯皮 1 +x:1 +竞放 1 +x:1 +该柜 1 +x:1 +绵羊绒衫 1 +x:1 +初值 1 +x:1 +实报实销 1 +x:1 +豫州 1 +x:1 +宗教性 1 +x:1 +平展展 1 +x:1 +奶糖 1 +x:1 +调干 1 +x:1 +削球 1 +x:1 +绪言 1 +x:1 +阿齐兹 1 +x:1 +哥本哈根 1 +x:1 +彼岸性 1 +x:1 +前些时 1 +x:1 +相握 1 +x:1 +锈损 1 +x:1 +璧山 1 +x:1 +执行期 1 +x:1 +滋 2 +x:2 +去秋 1 +x:1 +猪粪 1 +x:1 +电费 1 +x:1 +安全阀 1 +x:1 +裱糊 1 +x:1 +敌人 1 +x:1 +非耕地 1 +x:1 +达马托法 1 +x:1 +起病 1 +x:1 +游离 1 +x:1 +嚓嚓 1 +x:1 +奶粉 1 +x:1 +操作员 1 +x:1 +深闺 1 +x:1 +葱白 1 +x:1 +指定权 1 +x:1 +外星人 1 +x:1 +澳航 1 +x:1 +知识界 1 +x:1 +笔手 1 +x:1 +建业 1 +x:1 +锻压 1 +x:1 +月浦 1 +x:1 +贩假 1 +x:1 +隔壁 1 +x:1 +环城 1 +x:1 +居住证 1 +x:1 +番 221 +x:221 +亭前 1 +x:1 +二酉斋 1 +x:1 +坚信不疑 1 +x:1 +女娃 1 +x:1 +行板 1 +x:1 +奶类 1 +x:1 +九屋 1 +x:1 +九届 1 +x:1 +冻结 1 +x:1 +报架 1 +x:1 +审阅 1 +x:1 +行李 1 +x:1 +女娲 1 +x:1 +缠诉 1 +x:1 +长鼓 1 +x:1 +食品城 1 +x:1 +附属国 1 +x:1 +羊皮 1 +x:1 +安葬法 1 +x:1 +住读生 1 +x:1 +禅寺 1 +x:1 +不孝之子 1 +x:1 +六点 1 +x:1 +撼 11 +x:11 +笔技 1 +x:1 +格林尼治 1 +x:1 +薄暮 1 +x:1 +磷 22 +x:22 +建交 1 +x:1 +对象化 1 +x:1 +菜牛 1 +x:1 +来安乡 1 +x:1 +湘泉酒 1 +x:1 +明虾 1 +x:1 +救物 1 +x:1 +禅宗 1 +x:1 +盛夏 1 +x:1 +建于 1 +x:1 +女婿 1 +x:1 +案值 1 +x:1 +五联 1 +x:1 +调度 1 +x:1 +冷藏库 1 +x:1 +女婴 1 +x:1 +审限 1 +x:1 +迷途知返 1 +x:1 +珊瑚鱼 1 +x:1 +盛大 1 +x:1 +挨打 1 +x:1 +行期 1 +x:1 +冬春汛 1 +x:1 +癖好 1 +x:1 +未雨绸缪 1 +x:1 +缀 14 +x:14 +笔挺 1 +x:1 +提克里特 1 +x:1 +九州 1 +x:1 +顶端 1 +x:1 +毒理学家 1 +x:1 +修鞋店 1 +x:1 +修辞学 1 +x:1 +录放像机 1 +x:1 +强震群 1 +x:1 +公牛 1 +x:1 +跑上跑下 1 +x:1 +敲锭 1 +x:1 +食品类 1 +x:1 +国无宁日 1 +x:1 +公物 1 +x:1 +秀色 1 +x:1 +桑干河 1 +x:1 +亭台 1 +x:1 +燕塞湖 1 +x:1 +兰坪 1 +x:1 +真峰村 1 +x:1 +背负式 1 +x:1 +洒水机 1 +x:1 +文学家 1 +x:1 +调式 1 +x:1 +院舍 1 +x:1 +熄灭 1 +x:1 +五自 1 +x:1 +绣花 1 +x:1 +北影厂 1 +x:1 +特命 1 +x:1 +初具 1 +x:1 +蔡坂 1 +x:1 +抗美援朝 1 +x:1 +禁用 1 +x:1 +国际场 1 +x:1 +脏土 1 +x:1 +不足称道 1 +x:1 +寿光 1 +x:1 +初六 1 +x:1 +模式图 1 +x:1 +美目盼兮 1 +x:1 +急救 1 +x:1 +初八 1 +x:1 +公爹 1 +x:1 +埃雷兹 1 +x:1 +箱子 1 +x:1 +珞珈山 1 +x:1 +绪论 1 +x:1 +培养基 1 +x:1 +扬水站 1 +x:1 +牙周带 1 +x:1 +钻井机 1 +x:1 +瓯海区 1 +x:1 +庖 1 +x:1 +就事论事 1 +x:1 +长鸣 1 +x:1 +隔夜 1 +x:1 +威武 1 +x:1 +军屯村 1 +x:1 +阳浦 1 +x:1 +乌苏里虎 1 +x:1 +夯 5 +x:5 +五脏 1 +x:1 +尾砂尘 1 +x:1 +西宁市 1 +x:1 +初冬 1 +x:1 +环围 1 +x:1 +带田 1 +x:1 +配电间 1 +x:1 +吃派饭 1 +x:1 +带电 1 +x:1 +高等院校 1 +x:1 +果海 1 +x:1 +投入者 1 +x:1 +又 8529 +x:8529 +女子 1 +x:1 +敌伪 1 +x:1 +心明眼亮 1 +x:1 +核聚变能 1 +x:1 +五四式 1 +x:1 +忠顺 1 +x:1 +组阁 1 +x:1 +国际型 1 +x:1 +乡 757 +x:757 +营里 1 +x:1 +道统 1 +x:1 +圆顶 1 +x:1 +融水 1 +x:1 +房地产热 1 +x:1 +圆顺 1 +x:1 +结幕 1 +x:1 +女孩 1 +x:1 +道经 1 +x:1 +棉毯 1 +x:1 +鸷鸟 1 +x:1 +行星 1 +x:1 +有变 1 +x:1 +新锐 1 +x:1 +火烈鸟 1 +x:1 +假借 1 +x:1 +无妨 1 +x:1 +还要 1 +x:1 +天高云淡 1 +x:1 +书写体 1 +x:1 +精装本 1 +x:1 +铁法市 1 +x:1 +载力 1 +x:1 +制茶 1 +x:1 +探幽 1 +x:1 +新干线 1 +x:1 +忍俊不禁 1 +x:1 +难免论 1 +x:1 +浊流 1 +x:1 +缔造 1 +x:1 +金带扣 1 +x:1 +稳固 1 +x:1 +三建 1 +x:1 +励志 1 +x:1 +特有种 1 +x:1 +河山村 1 +x:1 +度汛 1 +x:1 +电路 1 +x:1 +淳朴 1 +x:1 +过密型 1 +x:1 +笋子 1 +x:1 +训练组 1 +x:1 +单薄 1 +x:1 +救济式 1 +x:1 +过境国 1 +x:1 +美编 1 +x:1 +串联 1 +x:1 +雪中送炭 1 +x:1 +鄙陋 1 +x:1 +三废 1 +x:1 +博士后 1 +x:1 +浅吟低唱 1 +x:1 +取而代之 1 +x:1 +积温区 1 +x:1 +后生可畏 1 +x:1 +送风机 1 +x:1 +订阅 1 +x:1 +细水长流 1 +x:1 +卢 423 +x:423 +董事局 1 +x:1 +承包商 1 +x:1 +统一论 1 +x:1 +西藏 1 +x:1 +逆境 1 +x:1 +绞转 1 +x:1 +无委 1 +x:1 +效益观 1 +x:1 +阵营 1 +x:1 +消化道 1 +x:1 +税法 1 +x:1 +绞车 1 +x:1 +磨砺 1 +x:1 +兴利 1 +x:1 +晚清 1 +x:1 +流失生 1 +x:1 +入睡 1 +x:1 +涅槃 1 +x:1 +老虎 1 +x:1 +围住 1 +x:1 +武邑县 1 +x:1 +无头 1 +x:1 +鸭绒 1 +x:1 +耐人寻味 1 +x:1 +雄鸡 1 +x:1 +程序法 1 +x:1 +偷窃者 1 +x:1 +得计 1 +x:1 +盐业 1 +x:1 +储罐 1 +x:1 +丹参 1 +x:1 +信息窗 1 +x:1 +侗家 1 +x:1 +预备金 1 +x:1 +瓜果皮 1 +x:1 +冶 7 +x:7 +规范化 1 +x:1 +雪帽山 1 +x:1 +户口本 1 +x:1 +欺瞒 1 +x:1 +花子儿 1 +x:1 +得识 1 +x:1 +惹火 1 +x:1 +聚苯乙烯 1 +x:1 +盐阜 1 +x:1 +阿联酋 1 +x:1 +入眠 1 +x:1 +维持会 1 +x:1 +作痛 1 +x:1 +豁子 1 +x:1 +食用量 1 +x:1 +德国队 1 +x:1 +收回成命 1 +x:1 +邮递 1 +x:1 +陡然 1 +x:1 +中常会 1 +x:1 +胞衣 1 +x:1 +枯涩 1 +x:1 +新闻 1 +x:1 +无奈 1 +x:1 +坐南朝北 1 +x:1 +停建 1 +x:1 +海洋学 1 +x:1 +营销学 1 +x:1 +天竺葵 1 +x:1 +养兔业 1 +x:1 +看管人 1 +x:1 +粮贩子 1 +x:1 +黎塘 1 +x:1 +三带 1 +x:1 +听而不闻 1 +x:1 +拳会 1 +x:1 +试点区 1 +x:1 +假嗓子 1 +x:1 +苗族 1 +x:1 +刘桥 1 +x:1 +命根 1 +x:1 +三志 1 +x:1 +餐 45 +x:45 +豫皖 1 +x:1 +芯块 1 +x:1 +劳动强度 1 +x:1 +众鹊登枝 1 +x:1 +坎坷 1 +x:1 +暴举 1 +x:1 +治疗仪 1 +x:1 +鸽子 1 +x:1 +卢克索 1 +x:1 +萋萋芳华 1 +x:1 +五边形 1 +x:1 +承办者 1 +x:1 +古脊椎所 1 +x:1 +入盟 1 +x:1 +大沙河 1 +x:1 +时令性 1 +x:1 +钟锤 1 +x:1 +访求 1 +x:1 +有力 1 +x:1 +触手 1 +x:1 +停当 1 +x:1 +有功 1 +x:1 +占据 1 +x:1 +进口价 1 +x:1 +上固乡 1 +x:1 +铝业 1 +x:1 +去年初 1 +x:1 +假充 1 +x:1 +异姓 1 +x:1 +毁家纾难 1 +x:1 +英雄气短 1 +x:1 +枣树 1 +x:1 +消化酶 1 +x:1 +通信连 1 +x:1 +腰杆子 1 +x:1 +浊水 1 +x:1 +有劳 1 +x:1 +有劲 1 +x:1 +图书区 1 +x:1 +三德 1 +x:1 +旱秧田 1 +x:1 +有助 1 +x:1 +倒装 1 +x:1 +诸葛亮 1 +x:1 +精减 1 +x:1 +有加 1 +x:1 +枯水 1 +x:1 +命案 1 +x:1 +柬方 1 +x:1 +腐干 1 +x:1 +蕴涵 1 +x:1 +海关厅 1 +x:1 +假冒 1 +x:1 +忐忑不安 1 +x:1 +涅而不缁 1 +x:1 +三春柳 1 +x:1 +窥伺 1 +x:1 +新钞 1 +x:1 +奶白菜 1 +x:1 +学派 1 +x:1 +异物 1 +x:1 +工业处 1 +x:1 +夫贵妻荣 1 +x:1 +淄川 1 +x:1 +贿赂罪 1 +x:1 +信息箱 1 +x:1 +恋人 1 +x:1 +技术作物 1 +x:1 +山青水秀 1 +x:1 +组雕 1 +x:1 +无所不知 1 +x:1 +热中 1 +x:1 +三彩 1 +x:1 +但凡 1 +x:1 +热带雨林 1 +x:1 +年迈体弱 1 +x:1 +精典 1 +x:1 +继电 1 +x:1 +学海 1 +x:1 +岩鹰 1 +x:1 +热乎 1 +x:1 +伤残人 1 +x:1 +精兵 1 +x:1 +怨艾 1 +x:1 +精美 1 +x:1 +检讨书 1 +x:1 +东大寺 1 +x:1 +鸭群 1 +x:1 +三强 1 +x:1 +西葛 1 +x:1 +检讨 1 +x:1 +垫支性 1 +x:1 +有利 1 +x:1 +精光 1 +x:1 +有别 1 +x:1 +孤掌难鸣 1 +x:1 +古诗词 1 +x:1 +高活性 1 +x:1 +三弦 1 +x:1 +茶斋 1 +x:1 +胞弟 1 +x:1 +发钞行 1 +x:1 +老实巴交 1 +x:1 +本溪市 1 +x:1 +语文 1 +x:1 +无害 1 +x:1 +统一观 1 +x:1 +承包地 1 +x:1 +线袜子 1 +x:1 +无宁 1 +x:1 +壳舾 1 +x:1 +磨窝 1 +x:1 +谢词 1 +x:1 +支团 1 +x:1 +欺生 1 +x:1 +一样 1 +x:1 +照妖镜 1 +x:1 +三峡 1 +x:1 +农业法 1 +x:1 +所 5816 +x:5816 +原始公社 1 +x:1 +万流景仰 1 +x:1 +甜竹笋 1 +x:1 +年后 1 +x:1 +西洋参 1 +x:1 +良好率 1 +x:1 +花消 1 +x:1 +华埠镇 1 +x:1 +无声手枪 1 +x:1 +一档 1 +x:1 +衰弱 1 +x:1 +深亚微米 1 +x:1 +床边柜 1 +x:1 +锌版 1 +x:1 +润滑油 1 +x:1 +孤军作战 1 +x:1 +千米 1 +x:1 +条次 1 +x:1 +军史部 1 +x:1 +寸口 1 +x:1 +计划法 1 +x:1 +精到 1 +x:1 +越 1025 +x:1025 +春风骀荡 1 +x:1 +试管婴儿 1 +x:1 +精制 1 +x:1 +预配 1 +x:1 +扮作 1 +x:1 +补救性 1 +x:1 +生产部 1 +x:1 +疟疾 1 +x:1 +花海 1 +x:1 +谭家乡 1 +x:1 +有关 1 +x:1 +生活品 1 +x:1 +假劣 1 +x:1 +部室 1 +x:1 +挪威海 1 +x:1 +独门儿 1 +x:1 +庆龄码头 1 +x:1 +远航 1 +x:1 +次地区 1 +x:1 +马蜂窝 1 +x:1 +一棉 1 +x:1 +木偶剧 1 +x:1 +铜仁路 1 +x:1 +子弦 1 +x:1 +三小 1 +x:1 +招贴画 1 +x:1 +银本位 1 +x:1 +集团案 1 +x:1 +侧门 1 +x:1 +老营 1 +x:1 +新韵 1 +x:1 +弱点 1 +x:1 +子弟 1 +x:1 +油页岩 1 +x:1 +众院 1 +x:1 +征纳 1 +x:1 +菱形 1 +x:1 +宁静致远 1 +x:1 +无存 1 +x:1 +衰微 1 +x:1 +穿山龙 1 +x:1 +环保界 1 +x:1 +中小学生 1 +x:1 +臆测 1 +x:1 +作怪 1 +x:1 +检测仪 1 +x:1 +人高马大 1 +x:1 +红啤酒 1 +x:1 +养兵千日 1 +x:1 +筑巢引凤 1 +x:1 +逞凶 1 +x:1 +魅力 1 +x:1 +堤顶 1 +x:1 +初生态 1 +x:1 +跳水 1 +x:1 +拐杖 1 +x:1 +衰年 1 +x:1 +天之骄子 1 +x:1 +受赠者 1 +x:1 +景群 1 +x:1 +经济团 1 +x:1 +接待组 1 +x:1 +致癌 1 +x:1 +虾仁 1 +x:1 +三轮车 1 +x:1 +民间语 1 +x:1 +蒸化 1 +x:1 +进步党 1 +x:1 +信报箱群 1 +x:1 +丰产村 1 +x:1 +煌 13 +x:13 +风火墙 1 +x:1 +喇叭声 1 +x:1 +冷言冷语 1 +x:1 +美籍 1 +x:1 +解释权 1 +x:1 +辛酸 1 +x:1 +定植 1 +x:1 +征缴 1 +x:1 +构件 1 +x:1 +吴茱萸 1 +x:1 +钟面 1 +x:1 +一概 1 +x:1 +相持 1 +x:1 +检视 1 +x:1 +褴褛 1 +x:1 +笋壳 1 +x:1 +3 3213 +x:3213 +实地调查 1 +x:1 +水鼠皮 1 +x:1 +河源市 1 +x:1 +指示信 1 +x:1 +一榜 1 +x:1 +鸭舌帽 1 +x:1 +测量部 1 +x:1 +美术部 1 +x:1 +苗条 1 +x:1 +耳听为虚 1 +x:1 +精化 1 +x:1 +轨枕 1 +x:1 +记 470 +x:470 +辩称 1 +x:1 +会馆 1 +x:1 +纱灯 1 +x:1 +投资率 1 +x:1 +虾丸 1 +x:1 +抗热合金 1 +x:1 +假发 1 +x:1 +壳菜 1 +x:1 +精印 1 +x:1 +越剧院 1 +x:1 +游艺机 1 +x:1 +大沙湖 1 +x:1 +新集 1 +x:1 +西南部 1 +x:1 +白三烯 1 +x:1 +苗期 1 +x:1 +马驹子 1 +x:1 +嘱事 1 +x:1 +协兴镇 1 +x:1 +湖北村 1 +x:1 +常用对数 1 +x:1 +行不通 1 +x:1 +凄惨 1 +x:1 +浩浩汤汤 1 +x:1 +芳纶 1 +x:1 +入球 1 +x:1 +苗木 1 +x:1 +停工 1 +x:1 +精华 1 +x:1 +西南郊 1 +x:1 +阴囊 1 +x:1 +纺织厂 1 +x:1 +蒸发 1 +x:1 +制胜 1 +x:1 +灾荒 1 +x:1 +张庄村 1 +x:1 +名团 1 +x:1 +四面楚歌 1 +x:1 +苗情 1 +x:1 +免职 1 +x:1 +绘图仪 1 +x:1 +解释性 1 +x:1 +赌注 1 +x:1 +标志物 1 +x:1 +年前 1 +x:1 +要端 1 +x:1 +得奖 1 +x:1 +竹板书 1 +x:1 +假名 1 +x:1 +水资源 1 +x:1 +黄村 1 +x:1 +同道者 1 +x:1 +黄杨 1 +x:1 +竹帘 1 +x:1 +竹帛 1 +x:1 +黄杠 1 +x:1 +液肥 1 +x:1 +人武部 1 +x:1 +大方向 1 +x:1 +寒来暑往 1 +x:1 +吹腔 1 +x:1 +盯住 1 +x:1 +年初 1 +x:1 +受精卵 1 +x:1 +匆忙 1 +x:1 +无已 1 +x:1 +凄惶 1 +x:1 +年刊 1 +x:1 +参议院 1 +x:1 +宅第 1 +x:1 +西南非 1 +x:1 +词牌 1 +x:1 +作孽 1 +x:1 +角套 1 +x:1 +搓澡工 1 +x:1 +老花 1 +x:1 +纯碱厂 1 +x:1 +年利 1 +x:1 +精品 1 +x:1 +学棍 1 +x:1 +倒贴 1 +x:1 +子女 1 +x:1 +丹砂 1 +x:1 +安装队 1 +x:1 +枯槁 1 +x:1 +出乎意料 1 +x:1 +学校 1 +x:1 +皇权 1 +x:1 +坑蒙拐骗 1 +x:1 +相变式 1 +x:1 +论理学 1 +x:1 +篇眉 1 +x:1 +作家 1 +x:1 +胞妹 1 +x:1 +无边 1 +x:1 +浪里白条 1 +x:1 +原生矿物 1 +x:1 +麦迪霉素 1 +x:1 +还账 1 +x:1 +恼火 1 +x:1 +八六年 1 +x:1 +作客 1 +x:1 +脊索动物 1 +x:1 +整存整取 1 +x:1 +还贷 1 +x:1 +采购部 1 +x:1 +老舅 1 +x:1 +士绅 1 +x:1 +喇叭形 1 +x:1 +皇朝 1 +x:1 +巴国 1 +x:1 +辛集 1 +x:1 +晗 4 +x:4 +鸾凤 1 +x:1 +税案 1 +x:1 +内涝 1 +x:1 +费事 1 +x:1 +信息组 1 +x:1 +正题 1 +x:1 +臀痛穴 1 +x:1 +不值一提 1 +x:1 +倒梯形 1 +x:1 +圣殿 1 +x:1 +作对 1 +x:1 +故事链 1 +x:1 +赌气 1 +x:1 +市场观 1 +x:1 +陷 26 +x:26 +淮海戏 1 +x:1 +本部 1 +x:1 +行之有效 1 +x:1 +党群干群 1 +x:1 +滑头 1 +x:1 +架不住 1 +x:1 +餐房 1 +x:1 +诞辰日 1 +x:1 +年华 1 +x:1 +笋干 1 +x:1 +扇面儿 1 +x:1 +黄晕 1 +x:1 +入狱 1 +x:1 +状况 1 +x:1 +占有 1 +x:1 +美术院 1 +x:1 +算账者 1 +x:1 +土家女 1 +x:1 +探子 1 +x:1 +支出 1 +x:1 +假道学 1 +x:1 +音素文字 1 +x:1 +除颤器 1 +x:1 +辟谣 1 +x:1 +子系统 1 +x:1 +黄昏 1 +x:1 +三定 1 +x:1 +三宝 1 +x:1 +过 5095 +x:5095 +上好 1 +x:1 +现代化 1 +x:1 +生活区 1 +x:1 +快信 1 +x:1 +转弯子 1 +x:1 +没准儿 1 +x:1 +答 299 +x:299 +测量队 1 +x:1 +枯树 1 +x:1 +珍珠米 1 +x:1 +生活化 1 +x:1 +软缎 1 +x:1 +灭蟑药 1 +x:1 +震旦纪 1 +x:1 +春装 1 +x:1 +科普性 1 +x:1 +异己 1 +x:1 +信息网 1 +x:1 +规费 1 +x:1 +三审 1 +x:1 +篇目 1 +x:1 +求生欲 1 +x:1 +暹粒 1 +x:1 +傻瓜机 1 +x:1 +漏误 1 +x:1 +生活史 1 +x:1 +考量 1 +x:1 +亚鹤类 1 +x:1 +败诉方 1 +x:1 +三子 1 +x:1 +鹤群 1 +x:1 +果汁 1 +x:1 +三字 1 +x:1 +防意如城 1 +x:1 +图书城 1 +x:1 +广饶县 1 +x:1 +无尽 1 +x:1 +吡 1 +x:1 +漏诊 1 +x:1 +濮家村 1 +x:1 +新邵 1 +x:1 +年号 1 +x:1 +煌煌 1 +x:1 +吃不消 1 +x:1 +冽冽 1 +x:1 +盯人 1 +x:1 +肾脏 1 +x:1 +无尚 1 +x:1 +探察 1 +x:1 +新邮 1 +x:1 +室主任 1 +x:1 +三学 1 +x:1 +天伦之乐 1 +x:1 +痴痴地 1 +x:1 +涉农 1 +x:1 +谢谢 1 +x:1 +宠 8 +x:8 +臭豆腐 1 +x:1 +探家 1 +x:1 +顺治九年 1 +x:1 +迂缓 1 +x:1 +年历 1 +x:1 +官房长 1 +x:1 +优越感 1 +x:1 +小猫熊 1 +x:1 +新郎 1 +x:1 +献计献策 1 +x:1 +疏漏 1 +x:1 +老茧 1 +x:1 +滇西 1 +x:1 +舒舒服服 1 +x:1 +锯蛋白 1 +x:1 +福山区 1 +x:1 +新都 1 +x:1 +试种 1 +x:1 +破土而出 1 +x:1 +巨舰形 1 +x:1 +海洋年 1 +x:1 +五倍子 1 +x:1 +唐山市 1 +x:1 +警钟篇 1 +x:1 +睡裤 1 +x:1 +殉 2 +x:2 +灼灼 1 +x:1 +电焊 1 +x:1 +品名 1 +x:1 +气垫鞋 1 +x:1 +通信局 1 +x:1 +停堆 1 +x:1 +勤杂员 1 +x:1 +杨公庙乡 1 +x:1 +一气 1 +x:1 +黄教 1 +x:1 +皇族 1 +x:1 +巴蛇 1 +x:1 +漠不关心 1 +x:1 +劣 40 +x:40 +名人式 1 +x:1 +邮亭 1 +x:1 +答辩会 1 +x:1 +三声 1 +x:1 +疏泄 1 +x:1 +大陆架 1 +x:1 +儿童书 1 +x:1 +畦沟 1 +x:1 +抽水机 1 +x:1 +丰 94 +x:94 +邮人 1 +x:1 +枯死 1 +x:1 +不一会儿 1 +x:1 +醉乡 1 +x:1 +统一路 1 +x:1 +国民经济 1 +x:1 +试穿 1 +x:1 +一丘之貉 1 +x:1 +有喜 1 +x:1 +缴付 1 +x:1 +征程 1 +x:1 +难以忘怀 1 +x:1 +拣 36 +x:36 +征税 1 +x:1 +二部制 1 +x:1 +灾荒史 1 +x:1 +子宫 1 +x:1 +富丽 1 +x:1 +智育 1 +x:1 +合成类 1 +x:1 +无心 1 +x:1 +不见得 1 +x:1 +摊主 1 +x:1 +睡袋 1 +x:1 +睡袍 1 +x:1 +野老 1 +x:1 +文物商 1 +x:1 +品味 1 +x:1 +磨练 1 +x:1 +景地 1 +x:1 +征稽 1 +x:1 +邮件 1 +x:1 +一汽 1 +x:1 +三塘 1 +x:1 +睡衣 1 +x:1 +品咂 1 +x:1 +自愿 1 +x:1 +纺织图 1 +x:1 +东营村 1 +x:1 +京剧院 1 +x:1 +登记在册 1 +x:1 +核准权 1 +x:1 +三塔 1 +x:1 +抄送 1 +x:1 +子学 1 +x:1 +合资厂 1 +x:1 +中专处 1 +x:1 +根目录 1 +x:1 +灼热 1 +x:1 +削壁 1 +x:1 +山青水绿 1 +x:1 +魂兮归来 1 +x:1 +无异 1 +x:1 +廉政勤政 1 +x:1 +韧劲儿 1 +x:1 +子孙 1 +x:1 +校勘者 1 +x:1 +尽瘁 1 +x:1 +异常 1 +x:1 +铜质 1 +x:1 +防身 1 +x:1 +无形 1 +x:1 +继父 1 +x:1 +花椒 1 +x:1 +老者 1 +x:1 +远因 1 +x:1 +远虑 1 +x:1 +丝瓜 1 +x:1 +铝型材厂 1 +x:1 +西药 1 +x:1 +倒车 1 +x:1 +温饱型 1 +x:1 +别人 1 +x:1 +美称 1 +x:1 +富人 1 +x:1 +浪荡 1 +x:1 +黄斑 1 +x:1 +合成系 1 +x:1 +欢歌笑语 1 +x:1 +水污染 1 +x:1 +富于 1 +x:1 +相悖 1 +x:1 +无归 1 +x:1 +琅玳 1 +x:1 +华界 1 +x:1 +侧重 1 +x:1 +情牵魂系 1 +x:1 +星城镇 1 +x:1 +顿 155 +x:155 +野外工作 1 +x:1 +无度 1 +x:1 +卖卖 1 +x:1 +西芹 1 +x:1 +等同于 1 +x:1 +知天命 1 +x:1 +疏淤 1 +x:1 +三委 1 +x:1 +趾骨 1 +x:1 +摊位 1 +x:1 +验证 1 +x:1 +陡直 1 +x:1 +涉华 1 +x:1 +西医 1 +x:1 +无庸 1 +x:1 +编辑股 1 +x:1 +承包制 1 +x:1 +誊写 1 +x:1 +灰色 1 +x:1 +震旦系 1 +x:1 +雪地鞋 1 +x:1 +中草药材 1 +x:1 +分小组 1 +x:1 +史学家 1 +x:1 +睡觉 1 +x:1 +印章费 1 +x:1 +无序 1 +x:1 +条/公里 1 +x:1 +锯片 1 +x:1 +甲勾炎 1 +x:1 +耳坠子 1 +x:1 +祖上 1 +x:1 +一派 1 +x:1 +议题 1 +x:1 +富余 1 +x:1 +星期日 1 +x:1 +哑女 1 +x:1 +一流 1 +x:1 +参议长 1 +x:1 +恃才 1 +x:1 +异心 1 +x:1 +火山岛 1 +x:1 +连累 1 +x:1 +新希望 1 +x:1 +量 116 +x:116 +探头 1 +x:1 +寄生 1 +x:1 +异志 1 +x:1 +输液瓶 1 +x:1 +恰切 1 +x:1 +坎儿 1 +x:1 +申领 1 +x:1 +即将 1 +x:1 +入炉 1 +x:1 +小本微利 1 +x:1 +可不可以 1 +x:1 +西苑 1 +x:1 +扮 11 +x:11 +武庄村 1 +x:1 +选举者 1 +x:1 +悔过 1 +x:1 +火山岩 1 +x:1 +莱切市 1 +x:1 +浪船 1 +x:1 +高能低就 1 +x:1 +木炭画 1 +x:1 +鸭种 1 +x:1 +单舱 1 +x:1 +直溜 1 +x:1 +头关 1 +x:1 +慢性子 1 +x:1 +涉及 1 +x:1 +税款 1 +x:1 +吹台 1 +x:1 +一业 1 +x:1 +无常 1 +x:1 +试管 1 +x:1 +内务部 1 +x:1 +三好 1 +x:1 +直情径行 1 +x:1 +群星 1 +x:1 +宪章 1 +x:1 +有味 1 +x:1 +涉史 1 +x:1 +千禧 1 +x:1 +卓越 1 +x:1 +删繁就简 1 +x:1 +相知恨晚 1 +x:1 +芬芳 1 +x:1 +纬纱 1 +x:1 +爹 5 +x:5 +明目警心 1 +x:1 +偶蹄目 1 +x:1 +观樱会 1 +x:1 +销售权 1 +x:1 +藏民 1 +x:1 +编辑者 1 +x:1 +千秋 1 +x:1 +自知之明 1 +x:1 +生生死死 1 +x:1 +海洋局 1 +x:1 +半壁店村 1 +x:1 +荷花淀派 1 +x:1 +单色 1 +x:1 +锦鸡 1 +x:1 +年册 1 +x:1 +有名 1 +x:1 +学步 1 +x:1 +三夏 1 +x:1 +年内 1 +x:1 +淳情 1 +x:1 +征管 1 +x:1 +阴韵 1 +x:1 +凤 20 +x:20 +涉县 1 +x:1 +互补 1 +x:1 +寻食 1 +x:1 +军警靴 1 +x:1 +及第 1 +x:1 +脚爪 1 +x:1 +条案 1 +x:1 +老脸 1 +x:1 +培道 1 +x:1 +三大 1 +x:1 +有否 1 +x:1 +电池板 1 +x:1 +输液管 1 +x:1 +勉为其难 1 +x:1 +磨炼 1 +x:1 +不无道理 1 +x:1 +礼仪之邦 1 +x:1 +花柄 1 +x:1 +光芒万丈 1 +x:1 +花柱 1 +x:1 +年幼 1 +x:1 +三国 1 +x:1 +灌河口 1 +x:1 +游览者 1 +x:1 +一对一 1 +x:1 +年年 1 +x:1 +三丁锡 1 +x:1 +招揽 1 +x:1 +贮 9 +x:9 +火山口 1 +x:1 +失意 1 +x:1 +增转化 1 +x:1 +和睦相处 1 +x:1 +承托运 1 +x:1 +北龙 1 +x:1 +花枕 1 +x:1 +照射法 1 +x:1 +达沃斯 1 +x:1 +侃侃 1 +x:1 +摈 1 +x:1 +凄风苦雨 1 +x:1 +花果 1 +x:1 +参事 1 +x:1 +篇篇 1 +x:1 +八路军 1 +x:1 +银环蛇 1 +x:1 +埕 1 +x:1 +精壮 1 +x:1 +作坊 1 +x:1 +从弱到强 1 +x:1 +拨付 1 +x:1 +椅垫 1 +x:1 +奥委会 1 +x:1 +田林县 1 +x:1 +坎市 1 +x:1 +初教处 1 +x:1 +拚命 1 +x:1 +流舍村 1 +x:1 +灰质 1 +x:1 +花枪 1 +x:1 +严刑 1 +x:1 +晚明 1 +x:1 +纱筒 1 +x:1 +浪费 1 +x:1 +一把 1 +x:1 +百事通 1 +x:1 +恰州 1 +x:1 +花束 1 +x:1 +支局 1 +x:1 +补给船 1 +x:1 +繁杂 1 +x:1 +恐爪龙 1 +x:1 +单质 1 +x:1 +匆匆 1 +x:1 +党委会 1 +x:1 +黄洲乡 1 +x:1 +胆气 1 +x:1 +黄毒 1 +x:1 +西贡 1 +x:1 +杳渺 1 +x:1 +系列赛 1 +x:1 +老父亲 1 +x:1 +° 4 +x:4 +恰巧 1 +x:1 +施氏鲟 1 +x:1 +散软瘫 1 +x:1 +入网 1 +x:1 +腐坏 1 +x:1 +撕裂 1 +x:1 +外村人 1 +x:1 +环保署 1 +x:1 +易碎性 1 +x:1 +倒腾 1 +x:1 +上士 1 +x:1 +扭伤 1 +x:1 +授衔 1 +x:1 +制诰 1 +x:1 +无关 1 +x:1 +一拖 1 +x:1 +苗民 1 +x:1 +磨灭 1 +x:1 +远行 1 +x:1 +宝珠寺 1 +x:1 +词组 1 +x:1 +晚景 1 +x:1 +花朵 1 +x:1 +牧 67 +x:67 +许屯镇 1 +x:1 +普普通通 1 +x:1 +丝竹 1 +x:1 +望风捕影 1 +x:1 +惰 3 +x:3 +推选 1 +x:1 +年度 1 +x:1 +秽行 1 +x:1 +录放机 1 +x:1 +入编 1 +x:1 +花术 1 +x:1 +勃兴 1 +x:1 +度数 1 +x:1 +参选率 1 +x:1 +百废待举 1 +x:1 +乔治城 1 +x:1 +足下生辉 1 +x:1 +招招 1 +x:1 +老迈 1 +x:1 +戛然而止 1 +x:1 +不可限量 1 +x:1 +试用 1 +x:1 +三城 1 +x:1 +氟骨病 1 +x:1 +畜产品 1 +x:1 +噼啪 1 +x:1 +暴风雨 1 +x:1 +暴风雪 1 +x:1 +精妙 1 +x:1 +三基 1 +x:1 +多灾多难 1 +x:1 +词缀 1 +x:1 +传销者 1 +x:1 +吸力 1 +x:1 +账本 1 +x:1 +热水瓶 1 +x:1 +快事 1 +x:1 +霸王战 1 +x:1 +无疑 1 +x:1 +寻阅 1 +x:1 +推重 1 +x:1 +飞行点 1 +x:1 +侃价 1 +x:1 +巴解 1 +x:1 +坏帐 1 +x:1 +名胜地 1 +x:1 +防腐 1 +x:1 +纱窗 1 +x:1 +老辈 1 +x:1 +阵势 1 +x:1 +远视 1 +x:1 +灰调 1 +x:1 +鞣酸 1 +x:1 +远见 1 +x:1 +崖沟 1 +x:1 +村主任 1 +x:1 +老辣 1 +x:1 +超级大国 1 +x:1 +品学 1 +x:1 +哈铁局 1 +x:1 +内外有别 1 +x:1 +北东端 1 +x:1 +耶路撒冷 1 +x:1 +学而不厌 1 +x:1 +贝类 1 +x:1 +大巴山区 1 +x:1 +一言堂 1 +x:1 +篇章 1 +x:1 +身无分文 1 +x:1 +决策 1 +x:1 +优哉游哉 1 +x:1 +连环保 1 +x:1 +叶叶 1 +x:1 +肆 1 +x:1 +稳当 1 +x:1 +浪谷 1 +x:1 +慈联 1 +x:1 +忽闪忽闪 1 +x:1 +引人关注 1 +x:1 +晚期 1 +x:1 +津巴布韦 1 +x:1 +假如 1 +x:1 +税政 1 +x:1 +招手 1 +x:1 +毅 110 +x:110 +斯塔万格 1 +x:1 +税收 1 +x:1 +藏戏 1 +x:1 +巴西 1 +x:1 +夜深人静 1 +x:1 +异想天开 1 +x:1 +有悖于 1 +x:1 +葵花 1 +x:1 +发祥之地 1 +x:1 +成交价 1 +x:1 +解疑释惑 1 +x:1 +致公党 1 +x:1 +单调 1 +x:1 +以此类推 1 +x:1 +利马市 1 +x:1 +牟平城 1 +x:1 +黄檀 1 +x:1 +遑 3 +x:3 +惹祸 1 +x:1 +参众 1 +x:1 +粪肥 1 +x:1 +美盲 1 +x:1 +自由电子 1 +x:1 +无偿 1 +x:1 +参会 1 +x:1 +拳手 1 +x:1 +日报社 1 +x:1 +媚骨 1 +x:1 +测评 1 +x:1 +作图 1 +x:1 +人有千算 1 +x:1 +图书室 1 +x:1 +测试 1 +x:1 +别提 1 +x:1 +展望台 1 +x:1 +系列谈 1 +x:1 +大陆桥 1 +x:1 +恰当 1 +x:1 +单边 1 +x:1 +枯杉 1 +x:1 +亚运村 1 +x:1 +团圆饭 1 +x:1 +钴胺素 1 +x:1 +意见 1 +x:1 +辙 6 +x:6 +继续 1 +x:1 +换气 1 +x:1 +障碍 1 +x:1 +预交 1 +x:1 +守口如瓶 1 +x:1 +供给证 1 +x:1 +子埝 1 +x:1 +黄楼 1 +x:1 +文物处 1 +x:1 +竹篮 1 +x:1 +花旦 1 +x:1 +威胁利诱 1 +x:1 +乐融融 1 +x:1 +下花桥镇 1 +x:1 +分钟时段 1 +x:1 +参量 1 +x:1 +浪迹 1 +x:1 +探听 1 +x:1 +无可 1 +x:1 +南昌街 1 +x:1 +时紧时松 1 +x:1 +烈日 1 +x:1 +预付 1 +x:1 +支店 1 +x:1 +打招呼 1 +x:1 +勃发 1 +x:1 +有如 1 +x:1 +早出晚归 1 +x:1 +词类 1 +x:1 +经社会 1 +x:1 +千里迢迢 1 +x:1 +西进 1 +x:1 +栏圈 1 +x:1 +财雄势大 1 +x:1 +侨商 1 +x:1 +啪 5 +x:5 +芭蕉扇 1 +x:1 +撒拉族 1 +x:1 +疑者 1 +x:1 +绷子 1 +x:1 +小拇指 1 +x:1 +铜臭 1 +x:1 +入场证 1 +x:1 +平顺 1 +x:1 +导引车 1 +x:1 +程 369 +x:369 +桃花垠 1 +x:1 +有奖 1 +x:1 +盖帘 1 +x:1 +葬法 1 +x:1 +东山再起 1 +x:1 +终生不愈 1 +x:1 +个人展 1 +x:1 +信息点 1 +x:1 +粤 63 +x:63 +优越性 1 +x:1 +三味 1 +x:1 +通常 1 +x:1 +八中 1 +x:1 +合规性 1 +x:1 +大规模 1 +x:1 +呆坏账 1 +x:1 +译电员 1 +x:1 +单眼 1 +x:1 +米粮川 1 +x:1 +韶钢 1 +x:1 +还草 1 +x:1 +民间舞 1 +x:1 +三吐 1 +x:1 +美术馆 1 +x:1 +公安人员 1 +x:1 +豁免 1 +x:1 +调度局 1 +x:1 +翎 4 +x:4 +沔阳县 1 +x:1 +枯枝 1 +x:1 +三同 1 +x:1 +钙维片 1 +x:1 +糖果厂 1 +x:1 +盖菜 1 +x:1 +燃化局 1 +x:1 +年岁 1 +x:1 +弱碱 1 +x:1 +全日制 1 +x:1 +智谋 1 +x:1 +有失 1 +x:1 +守门人 1 +x:1 +无华 1 +x:1 +千瓦 1 +x:1 +翻箱倒柜 1 +x:1 +明孝陵 1 +x:1 +役 22 +x:22 +质高量足 1 +x:1 +争权夺利 1 +x:1 +装帧 1 +x:1 +图书奖 1 +x:1 +大气磅礴 1 +x:1 +阿斯马拉 1 +x:1 +词素 1 +x:1 +无助 1 +x:1 +碍 15 +x:15 +规模型 1 +x:1 +钟鼎 1 +x:1 +辉煌 1 +x:1 +单身 1 +x:1 +防范 1 +x:1 +罗山县 1 +x:1 +业绩 1 +x:1 +有声 1 +x:1 +招惹 1 +x:1 +黄桥 1 +x:1 +圣特莱萨 1 +x:1 +老路 1 +x:1 +走家串户 1 +x:1 +品头 1 +x:1 +试看 1 +x:1 +子囊 1 +x:1 +无力 1 +x:1 +通信兵 1 +x:1 +疏懒 1 +x:1 +制衡 1 +x:1 +黄栌 1 +x:1 +围捕 1 +x:1 +经济型 1 +x:1 +勃勃 1 +x:1 +进步奖 1 +x:1 +规范 1 +x:1 +滑坡 1 +x:1 +核扩散 1 +x:1 +秽语 1 +x:1 +黄栗 1 +x:1 +明细账 1 +x:1 +授课 1 +x:1 +联合国城 1 +x:1 +自产自销 1 +x:1 +贼 27 +x:27 +英 561 +x:561 +景芝镇 1 +x:1 +吉凶祸福 1 +x:1 +姊妹 1 +x:1 +贾拉瓦 1 +x:1 +精密 1 +x:1 +百 918 +x:918 +真凭实据 1 +x:1 +丁家村 1 +x:1 +黄棉 1 +x:1 +假定 1 +x:1 +林口县 1 +x:1 +异化 1 +x:1 +春光曲 1 +x:1 +举鼎绝膑 1 +x:1 +花摊 1 +x:1 +胸无城府 1 +x:1 +喷云吐雾 1 +x:1 +学术 1 +x:1 +盟长 1 +x:1 +黑龙江街 1 +x:1 +淤堵 1 +x:1 +税服 1 +x:1 +制毒 1 +x:1 +学期 1 +x:1 +出证 1 +x:1 +音域 1 +x:1 +不可向迩 1 +x:1 +云西 1 +x:1 +形势 1 +x:1 +黄梅 1 +x:1 +干戈扰攘 1 +x:1 +媚颜 1 +x:1 +鞍花 1 +x:1 +作品 1 +x:1 +得胜 1 +x:1 +万岭 1 +x:1 +知不知道 1 +x:1 +青花瓷 1 +x:1 +吕屯村 1 +x:1 +黄梨 1 +x:1 +老账 1 +x:1 +精子 1 +x:1 +丹墀 1 +x:1 +有优有劣 1 +x:1 +军史馆 1 +x:1 +潘塔诺 1 +x:1 +报话机 1 +x:1 +西南风 1 +x:1 +赤狐 1 +x:1 +格致诚正 1 +x:1 +怯阵 1 +x:1 +老马车社 1 +x:1 +非工程性 1 +x:1 +尸骨 1 +x:1 +花插 1 +x:1 +动员部 1 +x:1 +弄堂 1 +x:1 +有志 1 +x:1 +警探伪装 1 +x:1 +疑 11 +x:11 +尸骸 1 +x:1 +综论编 1 +x:1 +滴里嘟噜 1 +x:1 +有心 1 +x:1 +游者 1 +x:1 +停刊 1 +x:1 +四季如春 1 +x:1 +售货棚 1 +x:1 +邮电局 1 +x:1 +划时代 1 +x:1 +救济化 1 +x:1 +辅轨 1 +x:1 +晚报 1 +x:1 +恰好 1 +x:1 +敏感 1 +x:1 +目标化 1 +x:1 +景点 1 +x:1 +多云到阴 1 +x:1 +纺织局 1 +x:1 +除旧迎新 1 +x:1 +有忧 1 +x:1 +周村镇 1 +x:1 +乳化术 1 +x:1 +三力 1 +x:1 +学农 1 +x:1 +有虚有实 1 +x:1 +汇报展 1 +x:1 +敦雷 1 +x:1 +自尊 1 +x:1 +缺血 1 +x:1 +身强体壮 1 +x:1 +哑剧 1 +x:1 +玄之又玄 1 +x:1 +龟爪儿 1 +x:1 +定居点 1 +x:1 +胞兄 1 +x:1 +求业 1 +x:1 +招架 1 +x:1 +高高大大 1 +x:1 +冰清玉洁 1 +x:1 +公言报 1 +x:1 +回避 1 +x:1 +程序性 1 +x:1 +杲 5 +x:5 +摈除 1 +x:1 +中标人 1 +x:1 +影响面 1 +x:1 +勿 46 +x:46 +过犹不及 1 +x:1 +疲惫不堪 1 +x:1 +藏本 1 +x:1 +试点 1 +x:1 +考风 1 +x:1 +有缘 1 +x:1 +停办 1 +x:1 +税性 1 +x:1 +蔓生植物 1 +x:1 +贼亮 1 +x:1 +新馆 1 +x:1 +支塘 1 +x:1 +巴豆 1 +x:1 +衰减 1 +x:1 +拐棒 1 +x:1 +诗选集 1 +x:1 +丝纶 1 +x:1 +间接经验 1 +x:1 +顾问业 1 +x:1 +藏有 1 +x:1 +皮桶子 1 +x:1 +顺治二年 1 +x:1 +丝线 1 +x:1 +丝纹 1 +x:1 +躬 11 +x:11 +正人君子 1 +x:1 +三副 1 +x:1 +坏官 1 +x:1 +纱罩 1 +x:1 +疗济众生 1 +x:1 +吹角 1 +x:1 +皮影戏 1 +x:1 +拐棍 1 +x:1 +严气正色 1 +x:1 +部类 1 +x:1 +公证人员 1 +x:1 +词章 1 +x:1 +丝绒 1 +x:1 +凤尾竹 1 +x:1 +条件刺激 1 +x:1 +南堰村 1 +x:1 +恰如 1 +x:1 +丝织 1 +x:1 +考题 1 +x:1 +自我牺牲 1 +x:1 +媳妇 1 +x:1 +险境 1 +x:1 +农业户 1 +x:1 +丝绵 1 +x:1 +窑炉 1 +x:1 +获票率 1 +x:1 +腐化 1 +x:1 +白头偕老 1 +x:1 +名烟 1 +x:1 +湟中县 1 +x:1 +丝绸 1 +x:1 +集群式 1 +x:1 +三制 1 +x:1 +作古 1 +x:1 +供排水 1 +x:1 +夜鹭鸟 1 +x:1 +惠川 1 +x:1 +招术 1 +x:1 +东楼 1 +x:1 +求人 1 +x:1 +一树百获 1 +x:1 +三变 1 +x:1 +天公作美 1 +x:1 +研制 1 +x:1 +花招 1 +x:1 +墨西哥队 1 +x:1 +养目镜 1 +x:1 +三叉 1 +x:1 +三反 1 +x:1 +穷源溯流 1 +x:1 +单被 1 +x:1 +支委 1 +x:1 +老话 1 +x:1 +一期 1 +x:1 +民初字 1 +x:1 +芯子 1 +x:1 +花拳 1 +x:1 +远足 1 +x:1 +垧 1 +x:1 +签名册 1 +x:1 +单循环赛 1 +x:1 +双女户 1 +x:1 +牟平区 1 +x:1 +基联会 1 +x:1 +坎子 1 +x:1 +家长 1 +x:1 +稳定 1 +x:1 +丝网 1 +x:1 +粮种 1 +x:1 +三原 1 +x:1 +名胜区 1 +x:1 +有底 1 +x:1 +鸽场 1 +x:1 +讴歌 1 +x:1 +睡莲 1 +x:1 +孙女婿 1 +x:1 +有序 1 +x:1 +蚀 8 +x:8 +单裤 1 +x:1 +精巢 1 +x:1 +西裤 1 +x:1 +堤防 1 +x:1 +机关刊物 1 +x:1 +探区 1 +x:1 +精巧 1 +x:1 +保家卫国 1 +x:1 +交管局 1 +x:1 +一来 1 +x:1 +烩 2 +x:2 +环保站 1 +x:1 +粮秣 1 +x:1 +花押 1 +x:1 +纱线 1 +x:1 +基坑 1 +x:1 +老记 1 +x:1 +形而下 1 +x:1 +形而上 1 +x:1 +德保县 1 +x:1 +西装 1 +x:1 +聆听 1 +x:1 +此起彼落 1 +x:1 +有度 1 +x:1 +滑冰 1 +x:1 +新颖 1 +x:1 +钟馗 1 +x:1 +花托 1 +x:1 +响亮 1 +x:1 +三单 1 +x:1 +削发 1 +x:1 +肠系膜 1 +x:1 +以备不测 1 +x:1 +疏松 1 +x:1 +破浪前进 1 +x:1 +棉铃虫蛹 1 +x:1 +麻木不仁 1 +x:1 +刘家堡 1 +x:1 +涂层 1 +x:1 +有点儿 1 +x:1 +魁伟 1 +x:1 +年寿 1 +x:1 +笨拙 1 +x:1 +文物库 1 +x:1 +江郎才尽 1 +x:1 +三危 1 +x:1 +熨 5 +x:5 +辉石 1 +x:1 +就业办 1 +x:1 +发光剂 1 +x:1 +领事局 1 +x:1 +晋剧团 1 +x:1 +豁嘴 1 +x:1 +品德 1 +x:1 +天然磁铁 1 +x:1 +静脉曲张 1 +x:1 +远别 1 +x:1 +国内法 1 +x:1 +帐篷 1 +x:1 +悄悄话 1 +x:1 +停发 1 +x:1 +三墩营村 1 +x:1 +采选业 1 +x:1 +三北 1 +x:1 +三化 1 +x:1 +难得一见 1 +x:1 +无味 1 +x:1 +去年底 1 +x:1 +三包 1 +x:1 +单衣 1 +x:1 +蟊贼 1 +x:1 +盖度 1 +x:1 +远走 1 +x:1 +袅娜 1 +x:1 +极致 1 +x:1 +去年度 1 +x:1 +年宵 1 +x:1 +花房 1 +x:1 +哺乳类 1 +x:1 +单行 1 +x:1 +朱砂 1 +x:1 +疏朗 1 +x:1 +推销 1 +x:1 +流浪者 1 +x:1 +无功受禄 1 +x:1 +年审 1 +x:1 +图书展 1 +x:1 +寄籍 1 +x:1 +办报人 1 +x:1 +身残志坚 1 +x:1 +假帐 1 +x:1 +掉 521 +x:521 +以强凌弱 1 +x:1 +子口 1 +x:1 +学报 1 +x:1 +假币 1 +x:1 +村部 1 +x:1 +品尝 1 +x:1 +部级 1 +x:1 +精度 1 +x:1 +入秋 1 +x:1 +拥护者 1 +x:1 +黄浦 1 +x:1 +肆行 1 +x:1 +坏处 1 +x:1 +继站 1 +x:1 +明细表 1 +x:1 +学技 1 +x:1 +执针者 1 +x:1 +餐椅 1 +x:1 +管窥所及 1 +x:1 +胃液 1 +x:1 +收入额 1 +x:1 +增殖堆 1 +x:1 +图鉴 1 +x:1 +停停 1 +x:1 +巍 30 +x:30 +轧机 1 +x:1 +鹅行鸭步 1 +x:1 +随便 1 +x:1 +天然免疫 1 +x:1 +桤树林 1 +x:1 +福州戏 1 +x:1 +起死回生 1 +x:1 +敏捷 1 +x:1 +演事 1 +x:1 +藏族 1 +x:1 +指挥权 1 +x:1 +磨盘 1 +x:1 +娃娃脸 1 +x:1 +丝米 1 +x:1 +卓著 1 +x:1 +单刀 1 +x:1 +单词 1 +x:1 +心直口快 1 +x:1 +远在 1 +x:1 +类地行星 1 +x:1 +计划性 1 +x:1 +盟邦 1 +x:1 +异图 1 +x:1 +持股会 1 +x:1 +单证 1 +x:1 +防虫 1 +x:1 +才略 1 +x:1 +主场 1 +x:1 +族规 1 +x:1 +粮税 1 +x:1 +吹动 1 +x:1 +衰变 1 +x:1 +圣母 1 +x:1 +保护期 1 +x:1 +涉嫌 1 +x:1 +老街 1 +x:1 +滑动 1 +x:1 +自制率 1 +x:1 +新干县 1 +x:1 +百分表 1 +x:1 +黄淮 1 +x:1 +辅路 1 +x:1 +招数 1 +x:1 +信手拈来 1 +x:1 +老表 1 +x:1 +签约人 1 +x:1 +假座 1 +x:1 +单元房 1 +x:1 +入神 1 +x:1 +华铜海式 1 +x:1 +子午 1 +x:1 +特燃处 1 +x:1 +丝糕 1 +x:1 +棘手 1 +x:1 +眉山县 1 +x:1 +平衡木 1 +x:1 +开国史 1 +x:1 +考验 1 +x:1 +景片 1 +x:1 +精干 1 +x:1 +扶贫 1 +x:1 +防蛀 1 +x:1 +小人儿 1 +x:1 +贞洁 1 +x:1 +喜怒相通 1 +x:1 +顺眼 1 +x:1 +招收 1 +x:1 +景物 1 +x:1 +作出 1 +x:1 +暂时性 1 +x:1 +个人崇拜 1 +x:1 +七沟八梁 1 +x:1 +绷带 1 +x:1 +城工部 1 +x:1 +熙宁 1 +x:1 +有分寸 1 +x:1 +密苏里州 1 +x:1 +异型 1 +x:1 +牙 39 +x:39 +淄博 1 +x:1 +精微 1 +x:1 +目标值 1 +x:1 +害群之马 1 +x:1 +濡沫相对 1 +x:1 +文明牌 1 +x:1 +糖馅 1 +x:1 +随从 1 +x:1 +环保碑 1 +x:1 +琮琮 1 +x:1 +粮管 1 +x:1 +绞手 1 +x:1 +进门票卡 1 +x:1 +勾股形 1 +x:1 +国防绿 1 +x:1 +舍珠买椟 1 +x:1 +净化论 1 +x:1 +尸首 1 +x:1 +仁 14 +x:14 +三军 1 +x:1 +里子 1 +x:1 +远近 1 +x:1 +磨石 1 +x:1 +远远 1 +x:1 +秽迹 1 +x:1 +镇子梁乡 1 +x:1 +瓦釜雷鸣 1 +x:1 +作假 1 +x:1 +芝罘湾 1 +x:1 +白马垅 1 +x:1 +替补 1 +x:1 +异域 1 +x:1 +骑手 1 +x:1 +格穆苏村 1 +x:1 +文物展 1 +x:1 +沾连 1 +x:1 +盲字 1 +x:1 +顺水推舟 1 +x:1 +年头 1 +x:1 +扫盲 1 +x:1 +伪造罪 1 +x:1 +订餐 1 +x:1 +文物局 1 +x:1 +精心 1 +x:1 +咂摸 1 +x:1 +凡尔赛 1 +x:1 +餐桌 1 +x:1 +底部 1 +x:1 +史观 1 +x:1 +磨眼 1 +x:1 +黄泉 1 +x:1 +土地改革 1 +x:1 +疏散 1 +x:1 +滑县 1 +x:1 +漂砾群 1 +x:1 +三光 1 +x:1 +官报私仇 1 +x:1 +规模化 1 +x:1 +削减 1 +x:1 +赞许者 1 +x:1 +个人奖 1 +x:1 +三元 1 +x:1 +支子 1 +x:1 +三养 1 +x:1 +随之 1 +x:1 +五倍子虫 1 +x:1 +木制品 1 +x:1 +黄泥 1 +x:1 +勤杂工 1 +x:1 +部长级 1 +x:1 +三八 1 +x:1 +发号施令 1 +x:1 +异地 1 +x:1 +三公 1 +x:1 +巴音郭楞 1 +x:1 +一方 1 +x:1 +里下河 1 +x:1 +含盐量 1 +x:1 +与此同时 1 +x:1 +一旁 1 +x:1 +床边橱 1 +x:1 +长治久安 1 +x:1 +赌本 1 +x:1 +精彩 1 +x:1 +瓒 1 +x:1 +反面教材 1 +x:1 +黄沙 1 +x:1 +猎鹰 1 +x:1 +盼归 1 +x:1 +小车费 1 +x:1 +甄别 1 +x:1 +授受 1 +x:1 +醉翁亭 1 +x:1 +一无 1 +x:1 +一旦 1 +x:1 +一日 1 +x:1 +穷极无聊 1 +x:1 +精当 1 +x:1 +衰势 1 +x:1 +准备金 1 +x:1 +紫阳 1 +x:1 +丁丁当当 1 +x:1 +选委会 1 +x:1 +黄油 1 +x:1 +税捐 1 +x:1 +突飞猛进 1 +x:1 +命 100 +x:100 +美院附中 1 +x:1 +测距 1 +x:1 +险崖老林 1 +x:1 +外务部 1 +x:1 +征求 1 +x:1 +守门员 1 +x:1 +停业 1 +x:1 +串通 1 +x:1 +拳师 1 +x:1 +老雕 1 +x:1 +寄托 1 +x:1 +福州籍 1 +x:1 +科普界 1 +x:1 +视距 1 +x:1 +停下 1 +x:1 +低声下气 1 +x:1 +灯心草 1 +x:1 +作伴 1 +x:1 +眼底 1 +x:1 +粮播 1 +x:1 +馆牌 1 +x:1 +不远万里 1 +x:1 +申述 1 +x:1 +远邻 1 +x:1 +年均值 1 +x:1 +键 8 +x:8 +限制口 1 +x:1 +新蔡 1 +x:1 +扁桃腺 1 +x:1 +随到随收 1 +x:1 +作伪 1 +x:1 +绮筵 1 +x:1 +三亚 1 +x:1 +热心 1 +x:1 +单间 1 +x:1 +不堪一击 1 +x:1 +南导堤 1 +x:1 +强人所难 1 +x:1 +晚练 1 +x:1 +不谋而同 1 +x:1 +喷射 1 +x:1 +不谋而合 1 +x:1 +西门 1 +x:1 +银妆素裹 1 +x:1 +大慧寺 1 +x:1 +远郊 1 +x:1 +望月湖 1 +x:1 +邛崃 1 +x:1 +赞颂声 1 +x:1 +有线 1 +x:1 +芳洲 1 +x:1 +护村队 1 +x:1 +新蕾 1 +x:1 +盖饭 1 +x:1 +童男童女 1 +x:1 +申辩 1 +x:1 +主体化 1 +x:1 +热忱 1 +x:1 +亿万 1 +x:1 +三产 1 +x:1 +景泰 1 +x:1 +预后 1 +x:1 +诡计 1 +x:1 +丰顺县 1 +x:1 +三九 1 +x:1 +三K党 1 +x:1 +远逝 1 +x:1 +暴徒 1 +x:1 +富士 1 +x:1 +锦西 1 +x:1 +三义 1 +x:1 +计划组 1 +x:1 +谆谆 1 +x:1 +小石城 1 +x:1 +振兴史 1 +x:1 +景气 1 +x:1 +浴血奋战 1 +x:1 +窜 25 +x:25 +矮胖 1 +x:1 +雅加达 1 +x:1 +造谣中伤 1 +x:1 +辉长岩 1 +x:1 +转炉 1 +x:1 +三乱 1 +x:1 +靠背轮 1 +x:1 +削价 1 +x:1 +贝方 1 +x:1 +眼帘 1 +x:1 +华东师大 1 +x:1 +停产 1 +x:1 +汾西县 1 +x:1 +离子化 1 +x:1 +惹怒 1 +x:1 +农转非 1 +x:1 +三业 1 +x:1 +预告 1 +x:1 +远道 1 +x:1 +黄玉 1 +x:1 +作保 1 +x:1 +检验 1 +x:1 +就地正法 1 +x:1 +研修 1 +x:1 +三不 1 +x:1 +惹恼 1 +x:1 +探亲 1 +x:1 +词曲 1 +x:1 +虎林园 1 +x:1 +防风 1 +x:1 +Ⅱ 8 +x:8 +匈牙利队 1 +x:1 +试法 1 +x:1 +吸取 1 +x:1 +绿矾 1 +x:1 +掺假 1 +x:1 +求助 1 +x:1 +探井 1 +x:1 +三中 1 +x:1 +千里驹 1 +x:1 +高梁面 1 +x:1 +三严 1 +x:1 +学籍 1 +x:1 +黄牌 1 +x:1 +今是昨非 1 +x:1 +堕胎法 1 +x:1 +生存型 1 +x:1 +黄片 1 +x:1 +作东 1 +x:1 +作业 1 +x:1 +赤卫军 1 +x:1 +配餐部 1 +x:1 +巴金 1 +x:1 +褐 2 +x:2 +红男绿女 1 +x:1 +患难与共 1 +x:1 +黄牛 1 +x:1 +西南航 1 +x:1 +党群关系 1 +x:1 +食用者 1 +x:1 +大型化 1 +x:1 +疏篱 1 +x:1 +公路口 1 +x:1 +计划署 1 +x:1 +热度 1 +x:1 +围建 1 +x:1 +珍异 1 +x:1 +收付汇 1 +x:1 +作为 1 +x:1 +作主 1 +x:1 +走读生 1 +x:1 +凝入 1 +x:1 +支出单 1 +x:1 +掷 14 +x:14 +茭白 1 +x:1 +腊玛古猿 1 +x:1 +铜骨 1 +x:1 +淤斑 1 +x:1 +探伤 1 +x:1 +苗疆 1 +x:1 +单链 1 +x:1 +词条 1 +x:1 +新著 1 +x:1 +作乐 1 +x:1 +敦请 1 +x:1 +无所不有 1 +x:1 +一等 1 +x:1 +村道 1 +x:1 +火石岗村 1 +x:1 +肿大 1 +x:1 +窝藏 1 +x:1 +亲王 1 +x:1 +研习 1 +x:1 +面熟 1 +x:1 +签约关 1 +x:1 +锡矿山 1 +x:1 +作乱 1 +x:1 +花纹 1 +x:1 +花纸 1 +x:1 +发烧式 1 +x:1 +花红 1 +x:1 +拆资 1 +x:1 +普法教育 1 +x:1 +一筹 1 +x:1 +景深 1 +x:1 +求医 1 +x:1 +有嘴无心 1 +x:1 +腐乳 1 +x:1 +一意孤行 1 +x:1 +领 190 +x:190 +五光十色 1 +x:1 +尸蜡 1 +x:1 +响动 1 +x:1 +涧磁村 1 +x:1 +部务会 1 +x:1 +灰铁 1 +x:1 +日产量 1 +x:1 +三低 1 +x:1 +物品表 1 +x:1 +预售 1 +x:1 +脑组织 1 +x:1 +热带 1 +x:1 +梯度性 1 +x:1 +芳泽 1 +x:1 +本片 1 +x:1 +食欲不振 1 +x:1 +融铸 1 +x:1 +粮改 1 +x:1 +专家局 1 +x:1 +抛秧 1 +x:1 +电池组 1 +x:1 +翻砂工 1 +x:1 +三优 1 +x:1 +啃 56 +x:56 +暗红色 1 +x:1 +飘飘然 1 +x:1 +等价交换 1 +x:1 +入春 1 +x:1 +美满 1 +x:1 +指挥官 1 +x:1 +面包车 1 +x:1 +紫茉莉 1 +x:1 +高台县 1 +x:1 +皮帽耳 1 +x:1 +无可取代 1 +x:1 +粉碎车 1 +x:1 +酸黄瓜 1 +x:1 +上学 1 +x:1 +皇爷 1 +x:1 +作价 1 +x:1 +城管局 1 +x:1 +一业为主 1 +x:1 +指挥家 1 +x:1 +雷利赞省 1 +x:1 +凝冻 1 +x:1 +常言道 1 +x:1 +下小河村 1 +x:1 +三伯 1 +x:1 +笑哈哈 1 +x:1 +标兵户 1 +x:1 +渔翁 1 +x:1 +石漫滩 1 +x:1 +参场 1 +x:1 +灰青 1 +x:1 +赔偿案 1 +x:1 +挠头 1 +x:1 +指挥塔 1 +x:1 +应试 1 +x:1 +随口 1 +x:1 +路口镇 1 +x:1 +稳油期 1 +x:1 +舌头 1 +x:1 +滨海区 1 +x:1 +专业村 1 +x:1 +雷电交加 1 +x:1 +考虑 1 +x:1 +入时 1 +x:1 +烛 1 +x:1 +围巾 1 +x:1 +翎毛 1 +x:1 +旗语 1 +x:1 +翁源村 1 +x:1 +工薪阶层 1 +x:1 +打车 1 +x:1 +求偶 1 +x:1 +崖石 1 +x:1 +修修 1 +x:1 +不冻港 1 +x:1 +化整为零 1 +x:1 +老铺 1 +x:1 +火药桶 1 +x:1 +催眠术 1 +x:1 +超世之才 1 +x:1 +答茬儿 1 +x:1 +扫毒 1 +x:1 +以迄于今 1 +x:1 +序论 1 +x:1 +环保日 1 +x:1 +黄焖 1 +x:1 +预算案 1 +x:1 +热工 1 +x:1 +龙门寺 1 +x:1 +阵阵 1 +x:1 +畜力车 1 +x:1 +针法 1 +x:1 +装入 1 +x:1 +子侄 1 +x:1 +另眼相看 1 +x:1 +赌窝 1 +x:1 +乎夫楼 1 +x:1 +学经 1 +x:1 +少儿部 1 +x:1 +滨海县 1 +x:1 +做手脚 1 +x:1 +随即 1 +x:1 +烯 1 +x:1 +宋双党 1 +x:1 +烹制 1 +x:1 +眼尖 1 +x:1 +随叫随到 1 +x:1 +撤 59 +x:59 +杳无人烟 1 +x:1 +商酌 1 +x:1 +横扫千军 1 +x:1 +腹水 1 +x:1 +卢湾区 1 +x:1 +阵雨 1 +x:1 +疮痍满目 1 +x:1 +擒敌 1 +x:1 +苏中区 1 +x:1 +呼和浩特 1 +x:1 +花絮 1 +x:1 +半自耕农 1 +x:1 +还魂 1 +x:1 +褐藻 1 +x:1 +结膜炎 1 +x:1 +食用菌 1 +x:1 +抄件 1 +x:1 +有染 1 +x:1 +订阅费 1 +x:1 +层级制 1 +x:1 +破竹之势 1 +x:1 +马头琴声 1 +x:1 +萨那 1 +x:1 +西面 1 +x:1 +单面 1 +x:1 +西非 1 +x:1 +坑道 1 +x:1 +英姿焕发 1 +x:1 +绿肥作物 1 +x:1 +仨 5 +x:5 +型式 1 +x:1 +西青 1 +x:1 +舞台 1 +x:1 +无限大 1 +x:1 +区别点 1 +x:1 +份儿饭 1 +x:1 +土家人 1 +x:1 +见证人 1 +x:1 +制造 1 +x:1 +花糕 1 +x:1 +胃炎 1 +x:1 +毛毛草草 1 +x:1 +鞍马 1 +x:1 +略见一斑 1 +x:1 +摊子 1 +x:1 +推说 1 +x:1 +贞烈 1 +x:1 +子代 1 +x:1 +薪资 1 +x:1 +千里香 1 +x:1 +琚 1 +x:1 +辅道 1 +x:1 +絮叨 1 +x:1 +娃娃鱼 1 +x:1 +聪慧 1 +x:1 +添油加醋 1 +x:1 +栓子 1 +x:1 +求全 1 +x:1 +哈博罗内 1 +x:1 +柜 8 +x:8 +贾楼乡 1 +x:1 +锥栗 1 +x:1 +陈陈相因 1 +x:1 +增长带 1 +x:1 +财税厅 1 +x:1 +董事会 1 +x:1 +推论 1 +x:1 +寄意 1 +x:1 +灰阑 1 +x:1 +擂主 1 +x:1 +磁通量 1 +x:1 +汤匙 1 +x:1 +邮寄 1 +x:1 +慌 21 +x:21 +比如说 1 +x:1 +程序模块 1 +x:1 +推让 1 +x:1 +疏离 1 +x:1 +词数 1 +x:1 +花粉 1 +x:1 +宝山 1 +x:1 +高架桥 1 +x:1 +陶泥家 1 +x:1 +亦喜亦忧 1 +x:1 +阶层 1 +x:1 +不郎不秀 1 +x:1 +清风两袖 1 +x:1 +国防报 1 +x:1 +窥视 1 +x:1 +窥见 1 +x:1 +桐柏 1 +x:1 +小生产 1 +x:1 +慈光 1 +x:1 +构建 1 +x:1 +围岩 1 +x:1 +猎苑 1 +x:1 +嫁接式 1 +x:1 +湾 5 +x:5 +观世音 1 +x:1 +克丝钳子 1 +x:1 +死乞白赖 1 +x:1 +鄙薄 1 +x:1 +那盆 1 +x:1 +围屏 1 +x:1 +灰雀 1 +x:1 +子书 1 +x:1 +围屋 1 +x:1 +射击区 1 +x:1 +催眠曲 1 +x:1 +喧嚷 1 +x:1 +红皮症 1 +x:1 +花籽 1 +x:1 +背叛 1 +x:1 +气垫船 1 +x:1 +齐国 1 +x:1 +烂 47 +x:47 +缴存 1 +x:1 +西陵 1 +x:1 +粮权 1 +x:1 +词旨 1 +x:1 +集市贸易 1 +x:1 +富家 1 +x:1 +挨骂 1 +x:1 +一江之隔 1 +x:1 +望洋兴叹 1 +x:1 +花簇 1 +x:1 +距离 1 +x:1 +筛 5 +x:5 +公生明 1 +x:1 +罗庄乡 1 +x:1 +富宁 1 +x:1 +浑然无垠 1 +x:1 +眼高手低 1 +x:1 +惟它独尊 1 +x:1 +限制值 1 +x:1 +打折风 1 +x:1 +商品率 1 +x:1 +分门别类 1 +x:1 +衰亡 1 +x:1 +磨歌 1 +x:1 +缺衣少食 1 +x:1 +触发器 1 +x:1 +地磁力 1 +x:1 +油菜地 1 +x:1 +信息港 1 +x:1 +试样 1 +x:1 +帐房 1 +x:1 +侗寨 1 +x:1 +关门大吉 1 +x:1 +申诉 1 +x:1 +大田作物 1 +x:1 +至此 1 +x:1 +佘家湾村 1 +x:1 +东方队 1 +x:1 +高个儿 1 +x:1 +营林 1 +x:1 +掺和 1 +x:1 +光学玻璃 1 +x:1 +收贷员 1 +x:1 +欠资 1 +x:1 +国防日 1 +x:1 +灭草剂 1 +x:1 +申请 1 +x:1 +樱桃园乡 1 +x:1 +申说 1 +x:1 +说情人 1 +x:1 +供给部 1 +x:1 +藏羚 1 +x:1 +齐抓共建 1 +x:1 +牙牙学语 1 +x:1 +花篮 1 +x:1 +性滥交 1 +x:1 +寄居 1 +x:1 +欠账 1 +x:1 +暖呼呼 1 +x:1 +暴动 1 +x:1 +考考 1 +x:1 +制革 1 +x:1 +精神文明 1 +x:1 +盟誓 1 +x:1 +匆促 1 +x:1 +通信业 1 +x:1 +跨度 1 +x:1 +紧固件 1 +x:1 +市场饭 1 +x:1 +欠费 1 +x:1 +鹿泉市 1 +x:1 +安丰乡 1 +x:1 +参加 1 +x:1 +重焕生机 1 +x:1 +零存 1 +x:1 +利古里亚 1 +x:1 +署 27 +x:27 +画栋雕梁 1 +x:1 +老广 1 +x:1 +理想化 1 +x:1 +不耻下问 1 +x:1 +花箭 1 +x:1 +求富若渴 1 +x:1 +花筒 1 +x:1 +鹤溪 1 +x:1 +铜鼓 1 +x:1 +蔚蓝色 1 +x:1 +恩纳村 1 +x:1 +寻访 1 +x:1 +围子 1 +x:1 +中质 1 +x:1 +同流合污 1 +x:1 +直方图 1 +x:1 +猖獗 1 +x:1 +铜鼎 1 +x:1 +老帅 1 +x:1 +格拉茨 1 +x:1 +非天然气 1 +x:1 +争金夺银 1 +x:1 +前一天 1 +x:1 +忐忑 1 +x:1 +一级 1 +x:1 +女足赛 1 +x:1 +五优先 1 +x:1 +蛋白尿 1 +x:1 +晚稻 1 +x:1 +埃拉特 1 +x:1 +固执己见 1 +x:1 +暴客 1 +x:1 +黄石 1 +x:1 +辅音 1 +x:1 +指认 1 +x:1 +贾维茨 1 +x:1 +邮局 1 +x:1 +号啕大哭 1 +x:1 +着哪 1 +x:1 +一经 1 +x:1 +暴富 1 +x:1 +时令病 1 +x:1 +乘警队 1 +x:1 +串铃 1 +x:1 +网状林 1 +x:1 +红墨水 1 +x:1 +宇宙船 1 +x:1 +一大早 1 +x:1 +隆庆二年 1 +x:1 +受众 1 +x:1 +热学 1 +x:1 +农业税 1 +x:1 +花笺 1 +x:1 +救生伞 1 +x:1 +违犯者 1 +x:1 +村里 1 +x:1 +锦绣江山 1 +x:1 +济南市 1 +x:1 +销 174 +x:174 +和好如初 1 +x:1 +凶手 1 +x:1 +西邻 1 +x:1 +桐油树 1 +x:1 +擒拿 1 +x:1 +透析机 1 +x:1 +增长年 1 +x:1 +党委办 1 +x:1 +执笔人 1 +x:1 +略表 1 +x:1 +营房部 1 +x:1 +侧 33 +x:33 +童装展 1 +x:1 +豁亮 1 +x:1 +灾害源 1 +x:1 +稳操左券 1 +x:1 +勐腊 1 +x:1 +踱步 1 +x:1 +扬沙 1 +x:1 +呆矿 1 +x:1 +褐色 1 +x:1 +紫貂 1 +x:1 +撰写 1 +x:1 +奄奄待毙 1 +x:1 +拨号 1 +x:1 +秽闻 1 +x:1 +皇皇 1 +x:1 +形成层 1 +x:1 +宣纸 1 +x:1 +媒人 1 +x:1 +革新迷 1 +x:1 +西部 1 +x:1 +肾小球 1 +x:1 +学科 1 +x:1 +随和 1 +x:1 +税种 1 +x:1 +侗乡 1 +x:1 +拨发 1 +x:1 +传呼机 1 +x:1 +限定词 1 +x:1 +香会 1 +x:1 +西郊 1 +x:1 +远门 1 +x:1 +持币人 1 +x:1 +掀开 1 +x:1 +小丰营村 1 +x:1 +甲种射线 1 +x:1 +妈 43 +x:43 +假分数 1 +x:1 +主道 1 +x:1 +深层格 1 +x:1 +参半 1 +x:1 +亚洲司 1 +x:1 +远销 1 +x:1 +与日俱增 1 +x:1 +板兰根 1 +x:1 +虾塘 1 +x:1 +钢材厂 1 +x:1 +入手 1 +x:1 +榨 4 +x:4 +费心 1 +x:1 +戴高帽子 1 +x:1 +低等动物 1 +x:1 +糊味 1 +x:1 +撒哈拉 1 +x:1 +新股 1 +x:1 +畲乡 1 +x:1 +随员 1 +x:1 +珍宝 1 +x:1 +云岗 1 +x:1 +续集 1 +x:1 +富川 1 +x:1 +东兴市 1 +x:1 +税票 1 +x:1 +堤身 1 +x:1 +预先 1 +x:1 +武进县 1 +x:1 +预兆 1 +x:1 +新河乡 1 +x:1 +业态 1 +x:1 +曾家岩 1 +x:1 +哑嗓 1 +x:1 +入户 1 +x:1 +清爽型 1 +x:1 +康乐球 1 +x:1 +随后 1 +x:1 +主程序 1 +x:1 +随同 1 +x:1 +肾盂炎 1 +x:1 +三公开 1 +x:1 +润滑剂 1 +x:1 +价值形式 1 +x:1 +新霉素 1 +x:1 +里庄村 1 +x:1 +头班车 1 +x:1 +按摩院 1 +x:1 +峨边县 1 +x:1 +串门 1 +x:1 +苏木里 1 +x:1 +火化率 1 +x:1 +词性 1 +x:1 +先驱 1 +x:1 +鱼卷 1 +x:1 +底金 1 +x:1 +萌 12 +x:12 +求告 1 +x:1 +曲谱 1 +x:1 +党纪政纪 1 +x:1 +花种 1 +x:1 +济阳 1 +x:1 +新茶 1 +x:1 +让 3499 +x:3499 +慢慢来 1 +x:1 +参训者 1 +x:1 +化为泡影 1 +x:1 +合成氨 1 +x:1 +政协办 1 +x:1 +历经 1 +x:1 +求同 1 +x:1 +泥污 1 +x:1 +胃病 1 +x:1 +展现 1 +x:1 +苏格兰队 1 +x:1 +费尽 1 +x:1 +学童 1 +x:1 +国防林 1 +x:1 +枷锁 1 +x:1 +坐井观天 1 +x:1 +老祖宗 1 +x:1 +闭 54 +x:54 +赞叹声 1 +x:1 +舒 159 +x:159 +南竹 1 +x:1 +一类 1 +x:1 +新药 1 +x:1 +黄田 1 +x:1 +逆子 1 +x:1 +淳熙 1 +x:1 +只字 1 +x:1 +您好 1 +x:1 +继承 1 +x:1 +邮币 1 +x:1 +邮市 1 +x:1 +哺乳期 1 +x:1 +花神 1 +x:1 +深层次 1 +x:1 +老道 1 +x:1 +侵吞 1 +x:1 +税稽 1 +x:1 +格拉夫屋 1 +x:1 +可可油 1 +x:1 +健身法 1 +x:1 +赔偿法 1 +x:1 +漏风 1 +x:1 +蛐蛐 1 +x:1 +虾子 1 +x:1 +巴陵 1 +x:1 +热天 1 +x:1 +音乐声 1 +x:1 +凝固 1 +x:1 +贿赂案 1 +x:1 +预制 1 +x:1 +苏禄省 1 +x:1 +粮户 1 +x:1 +昏昏沉沉 1 +x:1 +绿化率 1 +x:1 +学究 1 +x:1 +预算法 1 +x:1 +求和 1 +x:1 +命令主义 1 +x:1 +异义 1 +x:1 +交办会 1 +x:1 +富庶 1 +x:1 +南北湖 1 +x:1 +夹道欢迎 1 +x:1 +摊床 1 +x:1 +勘 4 +x:4 +蜗牛 1 +x:1 +新菏 1 +x:1 +随地 1 +x:1 +北运菜 1 +x:1 +珞珈 1 +x:1 +异乡 1 +x:1 +签约国 1 +x:1 +鸭梨 1 +x:1 +雪污 1 +x:1 +顺义镇 1 +x:1 +福海县 1 +x:1 +议局 1 +x:1 +胶着状态 1 +x:1 +黄疸 1 +x:1 +铁脚板 1 +x:1 +乃至 1 +x:1 +工具箱 1 +x:1 +厚厚的 1 +x:1 +科特迪瓦 1 +x:1 +搅拌 1 +x:1 +侧耳 1 +x:1 +诸端 1 +x:1 +输卵管 1 +x:1 +税管 1 +x:1 +占用 1 +x:1 +认识史 1 +x:1 +失掉 1 +x:1 +随国 1 +x:1 +真空泵 1 +x:1 +嗓子眼儿 1 +x:1 +复吸率 1 +x:1 +无人 1 +x:1 +查缉 1 +x:1 +培育 1 +x:1 +众乡亲 1 +x:1 +颁证会 1 +x:1 +推进 1 +x:1 +喜马拉雅 1 +x:1 +金湖 1 +x:1 +广东音乐 1 +x:1 +祁连山 1 +x:1 +军婚 1 +x:1 +桓台县 1 +x:1 +有伤风化 1 +x:1 +七上八下 1 +x:1 +词意 1 +x:1 +株 181 +x:181 +科普特 1 +x:1 +拳头 1 +x:1 +舌尖 1 +x:1 +新航 1 +x:1 +珍珠港 1 +x:1 +重足而立 1 +x:1 +经营 1 +x:1 +晚秋 1 +x:1 +抛光剂 1 +x:1 +老醋 1 +x:1 +同系物 1 +x:1 +拳套 1 +x:1 +滔天罪恶 1 +x:1 +编辑部 1 +x:1 +肖家洼 1 +x:1 +无价 1 +x:1 +骒马 1 +x:1 +大有裨益 1 +x:1 +台上村 1 +x:1 +分子力 1 +x:1 +参军 1 +x:1 +预埋件 1 +x:1 +珍奇 1 +x:1 +推辞 1 +x:1 +信息流 1 +x:1 +求售 1 +x:1 +无从 1 +x:1 +可重构性 1 +x:1 +寄放 1 +x:1 +嘉义镇 1 +x:1 +游船 1 +x:1 +咕噜噜 1 +x:1 +贝宁 1 +x:1 +公正无私 1 +x:1 +百刻图 1 +x:1 +计划科 1 +x:1 +畅想曲 1 +x:1 +扫清 1 +x:1 +教师节 1 +x:1 +评论部 1 +x:1 +餐点 1 +x:1 +缆车道 1 +x:1 +美梦 1 +x:1 +海阔天空 1 +x:1 +茶麸 1 +x:1 +黄瓜 1 +x:1 +老酒 1 +x:1 +无为 1 +x:1 +凡此等等 1 +x:1 +醉心 1 +x:1 +推车 1 +x:1 +防龋 1 +x:1 +跳动声 1 +x:1 +校友会 1 +x:1 +枯竭 1 +x:1 +货 187 +x:187 +胯骨 1 +x:1 +延性 1 +x:1 +无不 1 +x:1 +砸锅卖铁 1 +x:1 +无业 1 +x:1 +装假 1 +x:1 +文明史 1 +x:1 +伦理 1 +x:1 +花砖 1 +x:1 +远非 1 +x:1 +二十大 1 +x:1 +责任书 1 +x:1 +亡灵 1 +x:1 +农业社 1 +x:1 +张三营镇 1 +x:1 +无限小 1 +x:1 +拟人化 1 +x:1 +侧刀儿 1 +x:1 +蛛丝马迹 1 +x:1 +围堵 1 +x:1 +苗猪 1 +x:1 +围堰 1 +x:1 +向斜层 1 +x:1 +阳谷县 1 +x:1 +志同道合 1 +x:1 +围堤 1 +x:1 +讼词 1 +x:1 +摸得着 1 +x:1 +讼诉 1 +x:1 +禁 85 +x:85 +尸身 1 +x:1 +远射 1 +x:1 +美术 1 +x:1 +围城 1 +x:1 +合同书 1 +x:1 +字儿 1 +x:1 +压缩饼干 1 +x:1 +迂拙 1 +x:1 +求婚 1 +x:1 +田林 1 +x:1 +花石 1 +x:1 +勾股定理 1 +x:1 +坑骗 1 +x:1 +心脏病学 1 +x:1 +掀动 1 +x:1 +亡羊 1 +x:1 +电报局 1 +x:1 +肿瘤学 1 +x:1 +粮油 1 +x:1 +美军 1 +x:1 +巴基斯坦 1 +x:1 +虎林市 1 +x:1 +搅混 1 +x:1 +参建 1 +x:1 +信息战 1 +x:1 +改装厂 1 +x:1 +铝土 1 +x:1 +从江 1 +x:1 +东太河村 1 +x:1 +一个劲 1 +x:1 +指挥刀 1 +x:1 +年下 1 +x:1 +撂荒 1 +x:1 +满腔热情 1 +x:1 +糸满市 1 +x:1 +铝圈 1 +x:1 +佤 1 +x:1 +取信于民 1 +x:1 +黄柿乡 1 +x:1 +勘测院 1 +x:1 +长清镇 1 +x:1 +公倍数 1 +x:1 +年中 1 +x:1 +韵 35 +x:35 +动之以情 1 +x:1 +支流 1 +x:1 +含苞欲放 1 +x:1 +围垦 1 +x:1 +止跌 1 +x:1 +武进市 1 +x:1 +稳产 1 +x:1 +伸脚展腰 1 +x:1 +丹田村 1 +x:1 +奥兰多 1 +x:1 +尘埃落定 1 +x:1 +绿葱坡镇 1 +x:1 +曼妙无比 1 +x:1 +围坐 1 +x:1 +没精打采 1 +x:1 +试播 1 +x:1 +搓 21 +x:21 +豺狼虎豹 1 +x:1 +临阵脱逃 1 +x:1 +热土 1 +x:1 +饮料业 1 +x:1 +卷扬机 1 +x:1 +残砖碎瓦 1 +x:1 +俯身 1 +x:1 +屏锦镇 1 +x:1 +甜叶菊 1 +x:1 +老鹰 1 +x:1 +美术课 1 +x:1 +词源 1 +x:1 +学理 1 +x:1 +大沙田 1 +x:1 +算总账 1 +x:1 +联户办 1 +x:1 +部标 1 +x:1 +增值税 1 +x:1 +星条旗 1 +x:1 +震撼人心 1 +x:1 +母体 1 +x:1 +盖里 1 +x:1 +皴染 1 +x:1 +疏爽 1 +x:1 +年事 1 +x:1 +遵纪守法 1 +x:1 +费劲 1 +x:1 +臻 19 +x:19 +案值数 1 +x:1 +最低点 1 +x:1 +围场 1 +x:1 +执 39 +x:39 +老鸦 1 +x:1 +老鸨 1 +x:1 +红3军团 1 +x:1 +祁连县 1 +x:1 +花眼 1 +x:1 +费力 1 +x:1 +压轴戏 1 +x:1 +老鸹 1 +x:1 +年产 1 +x:1 +摩顶放踵 1 +x:1 +摭闻 1 +x:1 +花盒 1 +x:1 +邮册 1 +x:1 +紫石英 1 +x:1 +花盘 1 +x:1 +脐 1 +x:1 +葛巾羽扇 1 +x:1 +宗 94 +x:94 +花盆 1 +x:1 +呆坏帐 1 +x:1 +求学 1 +x:1 +错填率 1 +x:1 +驶近 1 +x:1 +想得开 1 +x:1 +及时 1 +x:1 +胃窦 1 +x:1 +围困 1 +x:1 +科普类 1 +x:1 +松滋 1 +x:1 +及早 1 +x:1 +几内亚 1 +x:1 +拳坛 1 +x:1 +三核一派 1 +x:1 +适可而止 1 +x:1 +年会 1 +x:1 +老龄 1 +x:1 +世界市场 1 +x:1 +美景 1 +x:1 +拦腰 1 +x:1 +坏书 1 +x:1 +入夏 1 +x:1 +天球瓶 1 +x:1 +洛铜 1 +x:1 +禁行线 1 +x:1 +平衡点 1 +x:1 +猪头肉 1 +x:1 +糙 1 +x:1 +望月村 1 +x:1 +大年三十 1 +x:1 +一干二净 1 +x:1 +平和县 1 +x:1 +入主出奴 1 +x:1 +摊儿 1 +x:1 +稳便 1 +x:1 +红白喜事 1 +x:1 +万不得已 1 +x:1 +猎装 1 +x:1 +眉骨 1 +x:1 +老牌子 1 +x:1 +发烧圈 1 +x:1 +均衡性 1 +x:1 +顾此失彼 1 +x:1 +重义轻利 1 +x:1 +绘图卡 1 +x:1 +验货 1 +x:1 +年迈 1 +x:1 +伤胃毁身 1 +x:1 +漏 84 +x:84 +游艇 1 +x:1 +肉用型 1 +x:1 +智齿 1 +x:1 +稳住 1 +x:1 +坏人 1 +x:1 +挡风遮雨 1 +x:1 +侧身 1 +x:1 +新貌 1 +x:1 +狼狈不堪 1 +x:1 +纱橱 1 +x:1 +指挥台 1 +x:1 +坏事 1 +x:1 +跺跺脚 1 +x:1 +铁铺 1 +x:1 +花白 1 +x:1 +粉黄 1 +x:1 +红眼病 1 +x:1 +倒退 1 +x:1 +晚眺 1 +x:1 +黄竹 1 +x:1 +春意盎然 1 +x:1 +趸 5 +x:5 +检测员 1 +x:1 +人 16955 +x:16955 +油辣 1 +x:1 +拨弄 1 +x:1 +专递费 1 +x:1 +五龙潭 1 +x:1 +一笔勾销 1 +x:1 +高山流水 1 +x:1 +核算点 1 +x:1 +推脱 1 +x:1 +邮兜 1 +x:1 +前宋村 1 +x:1 +掩盖体 1 +x:1 +誊黄 1 +x:1 +外部性 1 +x:1 +商队 1 +x:1 +济困扶危 1 +x:1 +老鼠 1 +x:1 +浣 4 +x:4 +淤浊 1 +x:1 +无限制 1 +x:1 +藏版 1 +x:1 +金城川 1 +x:1 +灰鲸 1 +x:1 +链子崖 1 +x:1 +死灰复燃 1 +x:1 +遥无期 1 +x:1 +正选 1 +x:1 +儿女情长 1 +x:1 +阴森可怖 1 +x:1 +富农 1 +x:1 +木鱼石 1 +x:1 +信息性 1 +x:1 +丝栗 1 +x:1 +文明村 1 +x:1 +科普网 1 +x:1 +合同费 1 +x:1 +宝应 1 +x:1 +芳村 1 +x:1 +墨迹未干 1 +x:1 +雨中曲 1 +x:1 +摊前 1 +x:1 +斑状 1 +x:1 +支付 1 +x:1 +粮源 1 +x:1 +利落 1 +x:1 +寓刚于柔 1 +x:1 +试映 1 +x:1 +紫菜 1 +x:1 +还债 1 +x:1 +警士 1 +x:1 +远大 1 +x:1 +驻足不前 1 +x:1 +邮务 1 +x:1 +儿童剧 1 +x:1 +雪亮 1 +x:1 +编译语言 1 +x:1 +栓剂 1 +x:1 +血气 1 +x:1 +总人口 1 +x:1 +税目 1 +x:1 +乌迪内市 1 +x:1 +扫描 1 +x:1 +涉世 1 +x:1 +秋毫之末 1 +x:1 +测定 1 +x:1 +税盲 1 +x:1 +触目惊心 1 +x:1 +粮官 1 +x:1 +词汇 1 +x:1 +躺 108 +x:108 +现代型 1 +x:1 +一往无前 1 +x:1 +供给制 1 +x:1 +恰似 1 +x:1 +大黑汀 1 +x:1 +炒作 1 +x:1 +灰鼠 1 +x:1 +循环不断 1 +x:1 +新车 1 +x:1 +停车率降 1 +x:1 +黄种 1 +x:1 +名符其实 1 +x:1 +磕头虫 1 +x:1 +紫草 1 +x:1 +淤渣 1 +x:1 +美方 1 +x:1 +砍头疮 1 +x:1 +赢洲 1 +x:1 +沤 2 +x:2 +斩钉截铁 1 +x:1 +支书 1 +x:1 +百日咳 1 +x:1 +美文 1 +x:1 +巴马 1 +x:1 +电 7381 +x:7381 +花畦 1 +x:1 +华南虎 1 +x:1 +一点 1 +x:1 +虾场 1 +x:1 +新近 1 +x:1 +二硫化碳 1 +x:1 +一刻钟 1 +x:1 +软塌塌 1 +x:1 +分子式 1 +x:1 +知工科 1 +x:1 +花生 1 +x:1 +浅黄色 1 +x:1 +滩堆乡 1 +x:1 +疏瀹 1 +x:1 +增创 1 +x:1 +协议会 1 +x:1 +花甲 1 +x:1 +珍品 1 +x:1 +韬 17 +x:17 +意谓 1 +x:1 +胡桃肉 1 +x:1 +爆冷 1 +x:1 +余家湖 1 +x:1 +人定胜天 1 +x:1 +变速器 1 +x:1 +西南角 1 +x:1 +词法 1 +x:1 +砍头痈 1 +x:1 +环卫处 1 +x:1 +事必躬亲 1 +x:1 +一展无垠 1 +x:1 +寒舍 1 +x:1 +童装厂 1 +x:1 +讷河市 1 +x:1 +暴君 1 +x:1 +沙蚕科 1 +x:1 +热和 1 +x:1 +角角落落 1 +x:1 +军管组 1 +x:1 +岙山卫镇 1 +x:1 +短袖 1 +x:1 +用工者 1 +x:1 +弥渡县 1 +x:1 +灰鹅 1 +x:1 +得逞 1 +x:1 +斯潘塞 1 +x:1 +耳目一新 1 +x:1 +花瓶 1 +x:1 +参差 1 +x:1 +西麓 1 +x:1 +文句 1 +x:1 +扶风 1 +x:1 +青春型 1 +x:1 +花瓣 1 +x:1 +俯贻 1 +x:1 +鄙俗 1 +x:1 +报刊业 1 +x:1 +塑管厂 1 +x:1 +指出 1 +x:1 +统一部 1 +x:1 +振幅 1 +x:1 +数来宝 1 +x:1 +订货 1 +x:1 +得遂 1 +x:1 +性生活 1 +x:1 +蛋白酶 1 +x:1 +订购 1 +x:1 +黄砂 1 +x:1 +规定者 1 +x:1 +书香气 1 +x:1 +邮发 1 +x:1 +油车 1 +x:1 +年年月月 1 +x:1 +紫芝 1 +x:1 +恍如隔世 1 +x:1 +因噎废食 1 +x:1 +环保法 1 +x:1 +跌价 1 +x:1 +枯瘦 1 +x:1 +麦糠 1 +x:1 +铜都 1 +x:1 +构图 1 +x:1 +苛刻 1 +x:1 +坦佩雷市 1 +x:1 +成气候 1 +x:1 +吨谷镇 1 +x:1 +灰鸭 1 +x:1 +千克 1 +x:1 +柳荫街 1 +x:1 +与生俱来 1 +x:1 +检测器 1 +x:1 +发钞量 1 +x:1 +输油 1 +x:1 +承包人 1 +x:1 +晚生 1 +x:1 +黑鹰队 1 +x:1 +灰黄 1 +x:1 +日喀则 1 +x:1 +跻身 1 +x:1 +牡丹卡 1 +x:1 +洛阳 1 +x:1 +东源县 1 +x:1 +民主主义 1 +x:1 +农业界 1 +x:1 +推荐 1 +x:1 +骁将 1 +x:1 +试析 1 +x:1 +户口簿 1 +x:1 +千斤 1 +x:1 +支使 1 +x:1 +紫色 1 +x:1 +配件厂 1 +x:1 +魁夷 1 +x:1 +黄磷 1 +x:1 +侃山 1 +x:1 +奶制品 1 +x:1 +亚布力 1 +x:1 +嗅觉 1 +x:1 +大总统 1 +x:1 +陉 1 +x:1 +内勤 1 +x:1 +花球 1 +x:1 +抽水站 1 +x:1 +响声 1 +x:1 +自叹弗如 1 +x:1 +飞短流长 1 +x:1 +富县 1 +x:1 +野青煤 1 +x:1 +承包价 1 +x:1 +追根问底 1 +x:1 +价格表 1 +x:1 +少儿馆 1 +x:1 +措辞 1 +x:1 +贱义重利 1 +x:1 +磨损 1 +x:1 +扫扫 1 +x:1 +组拼 1 +x:1 +痴 14 +x:14 +旗舰 1 +x:1 +热呼 1 +x:1 +荻 17 +x:17 +绿化线 1 +x:1 +疏目 1 +x:1 +看朱成碧 1 +x:1 +培训 1 +x:1 +热压 1 +x:1 +十二圩镇 1 +x:1 +斑 5 +x:5 +店小二 1 +x:1 +自选 1 +x:1 +起飞线 1 +x:1 +曲水县 1 +x:1 +儿童周 1 +x:1 +蹈常袭故 1 +x:1 +售电量 1 +x:1 +章丘市 1 +x:1 +疲疲沓沓 1 +x:1 +兼而有之 1 +x:1 +眼力 1 +x:1 +随州 1 +x:1 +丹佛 1 +x:1 +如数家珍 1 +x:1 +迂曲 1 +x:1 +段委 1 +x:1 +脾 12 +x:12 +天鹅绒 1 +x:1 +以物抵债 1 +x:1 +寅 3 +x:3 +诺丁汉 1 +x:1 +邮品 1 +x:1 +赵北村 1 +x:1 +富含 1 +x:1 +莎车县 1 +x:1 +倒闭 1 +x:1 +预备费 1 +x:1 +磨擦 1 +x:1 +加班费 1 +x:1 +响彻 1 +x:1 +关区 1 +x:1 +铜韵 1 +x:1 +飞行日 1 +x:1 +轮椅车 1 +x:1 +历尽沧桑 1 +x:1 +逞暴 1 +x:1 +罩袖 1 +x:1 +呵呵 1 +x:1 +砂洗厂 1 +x:1 +工业部 1 +x:1 +洋饮料 1 +x:1 +辉映 1 +x:1 +拉家常 1 +x:1 +入殓 1 +x:1 +还原 1 +x:1 +有余 1 +x:1 +非党人士 1 +x:1 +历险记 1 +x:1 +铁十八局 1 +x:1 +埂 1 +x:1 +侧记 1 +x:1 +繁殖 1 +x:1 +跌交 1 +x:1 +老祖公 1 +x:1 +罩衫 1 +x:1 +阵风 1 +x:1 +槭树 1 +x:1 +太庙乡 1 +x:1 +罩衣 1 +x:1 +富有 1 +x:1 +占线 1 +x:1 +瓜廖尔市 1 +x:1 +巴鱼 1 +x:1 +枯燥 1 +x:1 +五里雾 1 +x:1 +西餐 1 +x:1 +畜圈 1 +x:1 +密不透风 1 +x:1 +热区 1 +x:1 +汗牛充栋 1 +x:1 +黄羊 1 +x:1 +添漫梁乡 1 +x:1 +杯水车薪 1 +x:1 +整薯坑 1 +x:1 +试想 1 +x:1 +暴发 1 +x:1 +邮员 1 +x:1 +广学博识 1 +x:1 +贯通 1 +x:1 +铝厂 1 +x:1 +炯炯 1 +x:1 +电器厂 1 +x:1 +验血 1 +x:1 +二十分 1 +x:1 +制备 1 +x:1 +安营扎寨 1 +x:1 +新解 1 +x:1 +鳄 1 +x:1 +芝加哥 1 +x:1 +一直 1 +x:1 +一等舱 1 +x:1 +眼前 1 +x:1 +墨笔画 1 +x:1 +市 2154 +x:2154 +老当益壮 1 +x:1 +舞后 1 +x:1 +任家村 1 +x:1 +赔偿权 1 +x:1 +苗种 1 +x:1 +书报刊 1 +x:1 +赌棍 1 +x:1 +向阳村 1 +x:1 +投 317 +x:317 +柳子戏 1 +x:1 +国防法 1 +x:1 +车马盈门 1 +x:1 +供电局 1 +x:1 +欧共体 1 +x:1 +信息机 1 +x:1 +热力 1 +x:1 +星火计划 1 +x:1 +包月制 1 +x:1 +四围 1 +x:1 +磨料 1 +x:1 +灰顶 1 +x:1 +重头戏 1 +x:1 +股利 1 +x:1 +平谷县 1 +x:1 +暴利 1 +x:1 +记账 1 +x:1 +不好过 1 +x:1 +一眼 1 +x:1 +敬启 1 +x:1 +有些 1 +x:1 +铜雕 1 +x:1 +东门礁 1 +x:1 +求异 1 +x:1 +品位 1 +x:1 +校纪录 1 +x:1 +预算权 1 +x:1 +陡河 1 +x:1 +藏相 1 +x:1 +中塘镇 1 +x:1 +果皮箱 1 +x:1 +宇宙论 1 +x:1 +饥劳 1 +x:1 +西飞 1 +x:1 +岩下山 1 +x:1 +铝制 1 +x:1 +聊以自慰 1 +x:1 +海底捞针 1 +x:1 +锐减 1 +x:1 +白巴乡 1 +x:1 +水轮船 1 +x:1 +西风 1 +x:1 +人命关天 1 +x:1 +孰能无情 1 +x:1 +丹东 1 +x:1 +杜鹃花 1 +x:1 +一睹 1 +x:1 +盛极而衰 1 +x:1 +热切 1 +x:1 +出游者 1 +x:1 +锦葵 1 +x:1 +层峦叠嶂 1 +x:1 +冈 1 +x:1 +面料 1 +x:1 +腊黄 1 +x:1 +士林 1 +x:1 +接壤区 1 +x:1 +船老大 1 +x:1 +一老一少 1 +x:1 +语感 1 +x:1 +主管道 1 +x:1 +围剿 1 +x:1 +费城 1 +x:1 +憨 7 +x:7 +一瞬 1 +x:1 +辛辣 1 +x:1 +响应 1 +x:1 +载文 1 +x:1 +发烧友 1 +x:1 +统一院 1 +x:1 +检疫费 1 +x:1 +五色塔 1 +x:1 +果皮筒 1 +x:1 +灰颓 1 +x:1 +单项 1 +x:1 +鞍钢 1 +x:1 +储户 1 +x:1 +邮商 1 +x:1 +古建筑 1 +x:1 +猎豹 1 +x:1 +求得 1 +x:1 +灰领 1 +x:1 +新装 1 +x:1 +逸乐 1 +x:1 +大至暴雨 1 +x:1 +市场部 1 +x:1 +铜陵 1 +x:1 +无因性 1 +x:1 +棚代客 1 +x:1 +岁岁年年 1 +x:1 +稼穑 1 +x:1 +拳台 1 +x:1 +商南县 1 +x:1 +白公馆 1 +x:1 +笑容可掬 1 +x:1 +佳音 1 +x:1 +对内搞活 1 +x:1 +裤衩 1 +x:1 +稼禾 1 +x:1 +联优化劣 1 +x:1 +规则 1 +x:1 +无政府 1 +x:1 +巴黎 1 +x:1 +干巴巴 1 +x:1 +环卫工 1 +x:1 +编 143 +x:143 +办公费 1 +x:1 +工副业 1 +x:1 +词根 1 +x:1 +新疆厅 1 +x:1 +抄袭 1 +x:1 +中药费 1 +x:1 +脊椎动物 1 +x:1 +美意 1 +x:1 +莩 1 +x:1 +新低 1 +x:1 +寻踪游 1 +x:1 +需者 1 +x:1 +年届花甲 1 +x:1 +极光 1 +x:1 +晚点 1 +x:1 +但书 1 +x:1 +美感 1 +x:1 +载明 1 +x:1 +聚焦点 1 +x:1 +质朴无华 1 +x:1 +朱墨 1 +x:1 +八分音符 1 +x:1 +抗日史 1 +x:1 +野蔷薇 1 +x:1 +旅顺口区 1 +x:1 +空座位 1 +x:1 +征战 1 +x:1 +奚 20 +x:20 +一减一增 1 +x:1 +纺织业 1 +x:1 +云蒸霞蔚 1 +x:1 +娓娓道来 1 +x:1 +茵茵 1 +x:1 +文卫 1 +x:1 +琵琶 1 +x:1 +硬通货币 1 +x:1 +井岗霉素 1 +x:1 +令人 1 +x:1 +暴腌肉 1 +x:1 +亏本儿 1 +x:1 +铜门 1 +x:1 +公路局 1 +x:1 +磴口县 1 +x:1 +反躬自问 1 +x:1 +赔礼 1 +x:1 +热门 1 +x:1 +铜锅 1 +x:1 +藏画 1 +x:1 +铜锁 1 +x:1 +大发慈悲 1 +x:1 +富国 1 +x:1 +未央路 1 +x:1 +天水围 1 +x:1 +铜锈 1 +x:1 +棘爪 1 +x:1 +精业 1 +x:1 +分子学 1 +x:1 +大萝卜 1 +x:1 +新论 1 +x:1 +儿童团 1 +x:1 +铜锤 1 +x:1 +铜锣 1 +x:1 +行吟者 1 +x:1 +埋入 1 +x:1 +倒霉 1 +x:1 +新训 1 +x:1 +扩散式 1 +x:1 +新诗 1 +x:1 +双人滑 1 +x:1 +催人奋进 1 +x:1 +铜镜 1 +x:1 +教师证 1 +x:1 +招生 1 +x:1 +贮点红 1 +x:1 +西南路 1 +x:1 +热恋 1 +x:1 +糊弄 1 +x:1 +吸入 1 +x:1 +新词 1 +x:1 +烤面包器 1 +x:1 +经济法制 1 +x:1 +新说 1 +x:1 +疏理 1 +x:1 +西魏 1 +x:1 +精义 1 +x:1 +假以 1 +x:1 +得闲 1 +x:1 +酌量 1 +x:1 +招用 1 +x:1 +九十七中 1 +x:1 +聿 10 +x:10 +罚球 1 +x:1 +席地 1 +x:1 +精神不振 1 +x:1 +铜钟 1 +x:1 +花烛 1 +x:1 +澳众院 1 +x:1 +浮动价 1 +x:1 +彪炳 1 +x:1 +防震 1 +x:1 +预定 1 +x:1 +主营业务 1 +x:1 +济州岛 1 +x:1 +工兵团 1 +x:1 +钝 3 +x:3 +京剧迷 1 +x:1 +戏剧节 1 +x:1 +保质期 1 +x:1 +谢集 1 +x:1 +宇宙观 1 +x:1 +铜钱 1 +x:1 +肿块 1 +x:1 +名词委 1 +x:1 +怪 81 +x:81 +单骑 1 +x:1 +腹背受敌 1 +x:1 +税率 1 +x:1 +净化师 1 +x:1 +继母 1 +x:1 +城管办 1 +x:1 +狼烟四起 1 +x:1 +喊 156 +x:156 +红道 1 +x:1 +士敏 1 +x:1 +觏 1 +x:1 +铜铙 1 +x:1 +决策论 1 +x:1 +铜铃 1 +x:1 +悲观主义 1 +x:1 +文明戏 1 +x:1 +满 725 +x:725 +敢情 1 +x:1 +耐火黏土 1 +x:1 +桥梁史 1 +x:1 +文明户 1 +x:1 +定音鼓 1 +x:1 +假使 1 +x:1 +交界处 1 +x:1 +古竹村 1 +x:1 +偶函数 1 +x:1 +右 240 +x:240 +睡醒 1 +x:1 +普天之下 1 +x:1 +皇粮 1 +x:1 +葬礼 1 +x:1 +花炮 1 +x:1 +畦田 1 +x:1 +往 678 +x:678 +邓 2186 +x:2186 +广土众民 1 +x:1 +眼儿 1 +x:1 +考证 1 +x:1 +密码箱 1 +x:1 +街巷战 1 +x:1 +生死线 1 +x:1 +考评 1 +x:1 +计算中心 1 +x:1 +血本 1 +x:1 +悠闲自在 1 +x:1 +毛泽东 1 +x:1 +报样 1 +x:1 +考试 1 +x:1 +试探 1 +x:1 +驴皮胶 1 +x:1 +反正 1 +x:1 +迷走神经 1 +x:1 +一大溜 1 +x:1 +环卫局 1 +x:1 +倒阁 1 +x:1 +直上云霄 1 +x:1 +柜面 1 +x:1 +笔杆子 1 +x:1 +花灯 1 +x:1 +油滑 1 +x:1 +等比数列 1 +x:1 +家常事 1 +x:1 +议会上院 1 +x:1 +随带 1 +x:1 +入校 1 +x:1 +命相 1 +x:1 +鄙视 1 +x:1 +供给型 1 +x:1 +擒 7 +x:7 +釜底抽薪 1 +x:1 +猛犸象 1 +x:1 +俯角 1 +x:1 +拳击 1 +x:1 +镜框 1 +x:1 +黄骨髓 1 +x:1 +次要方 1 +x:1 +突尼斯队 1 +x:1 +管辖区 1 +x:1 +刨花板 1 +x:1 +构剧 1 +x:1 +金花菜 1 +x:1 +参天 1 +x:1 +五星村 1 +x:1 +眼光 1 +x:1 +春夏季 1 +x:1 +分子病 1 +x:1 +斑驳 1 +x:1 +黄骠马 1 +x:1 +精炼 1 +x:1 +梅仙镇 1 +x:1 +爱财如命 1 +x:1 +滞缓 1 +x:1 +实践观 1 +x:1 +杀人越货 1 +x:1 +上演税 1 +x:1 +老屯 1 +x:1 +承包田 1 +x:1 +紧身 1 +x:1 +斑马 1 +x:1 +老山 1 +x:1 +美式 1 +x:1 +钟亭 1 +x:1 +缴械 1 +x:1 +七彩花 1 +x:1 +个量 1 +x:1 +滴鼻剂 1 +x:1 +计划书 1 +x:1 +磨嘴皮 1 +x:1 +环保型 1 +x:1 +试射 1 +x:1 +大梦初醒 1 +x:1 +出门在外 1 +x:1 +摊档 1 +x:1 +征兆 1 +x:1 +限于 1 +x:1 +本溪籍 1 +x:1 +兽医院 1 +x:1 +银币 1 +x:1 +凝思 1 +x:1 +呼吸相通 1 +x:1 +繁重 1 +x:1 +品牌 1 +x:1 +传入期 1 +x:1 +人迹 1 +x:1 +国防军 1 +x:1 +征尘 1 +x:1 +报刊界 1 +x:1 +宣传费 1 +x:1 +无私 1 +x:1 +相随 1 +x:1 +三线 1 +x:1 +史学系 1 +x:1 +叠现 1 +x:1 +受骗者 1 +x:1 +资本金 1 +x:1 +茶道 1 +x:1 +作罢 1 +x:1 +云量 1 +x:1 +任其自流 1 +x:1 +锥子 1 +x:1 +三级 1 +x:1 +就近 1 +x:1 +花体 1 +x:1 +摊棚 1 +x:1 +重回 1 +x:1 +基本词 1 +x:1 +市政处 1 +x:1 +觉醒 1 +x:1 +安全面 1 +x:1 +忠厚老实 1 +x:1 +藏家 1 +x:1 +作美 1 +x:1 +签名簿 1 +x:1 +无礼 1 +x:1 +美德 1 +x:1 +代议制 1 +x:1 +嫁接法 1 +x:1 +酒液 1 +x:1 +计划价 1 +x:1 +伊夫岛 1 +x:1 +沁园春 1 +x:1 +秭归城 1 +x:1 +豌豆角 1 +x:1 +对外贸易 1 +x:1 +闪烁其辞 1 +x:1 +草茉莉 1 +x:1 +内核 1 +x:1 +见证 1 +x:1 +回眸 1 +x:1 +见识 1 +x:1 +利诱 1 +x:1 +盖碗茶 1 +x:1 +花会 1 +x:1 +精灵 1 +x:1 +白三叶 1 +x:1 +账款 1 +x:1 +满目生机 1 +x:1 +入场 1 +x:1 +玉环市 1 +x:1 +顺耳 1 +x:1 +随意 1 +x:1 +话梅 1 +x:1 +妙手回春 1 +x:1 +过载 1 +x:1 +热潮 1 +x:1 +弱势 1 +x:1 +随感 1 +x:1 +入土 1 +x:1 +敢当 1 +x:1 +天地会 1 +x:1 +丰产沟 1 +x:1 +经社文 1 +x:1 +景山 1 +x:1 +铜元 1 +x:1 +英语系 1 +x:1 +帮丘河 1 +x:1 +文明展 1 +x:1 +人公里 1 +x:1 +避讳 1 +x:1 +共产党员 1 +x:1 +入团 1 +x:1 +扫墓 1 +x:1 +继嗣 1 +x:1 +热源 1 +x:1 +避让 1 +x:1 +结束符 1 +x:1 +寄卖 1 +x:1 +入围 1 +x:1 +文具盒 1 +x:1 +随想 1 +x:1 +广东省 1 +x:1 +文明山 1 +x:1 +花价 1 +x:1 +柏里村 1 +x:1 +绑匪 1 +x:1 +老岩岗 1 +x:1 +千张 1 +x:1 +无碍 1 +x:1 +百岁堂 1 +x:1 +唐人 1 +x:1 +轴衬 1 +x:1 +美帝 1 +x:1 +检测法 1 +x:1 +有则改之 1 +x:1 +美中不足 1 +x:1 +搅和 1 +x:1 +多边形 1 +x:1 +澜沧江 1 +x:1 +展读 1 +x:1 +视若无人 1 +x:1 +展诵 1 +x:1 +鸽笼 1 +x:1 +初生之犊 1 +x:1 +住宅楼 1 +x:1 +控制程序 1 +x:1 +晚自习 1 +x:1 +坡耕地 1 +x:1 +士子 1 +x:1 +暮色四合 1 +x:1 +费款 1 +x:1 +五台县 1 +x:1 +石炭系 1 +x:1 +紧迫 1 +x:1 +子粒 1 +x:1 +春华秋实 1 +x:1 +个体性 1 +x:1 +瓜田李下 1 +x:1 +大恩大德 1 +x:1 +无所不在 1 +x:1 +豫园 1 +x:1 +聊复尔耳 1 +x:1 +抽丝 1 +x:1 +热固性 1 +x:1 +灼圃 1 +x:1 +展评 1 +x:1 +投递处 1 +x:1 +稳中求进 1 +x:1 +护轨 1 +x:1 +印字店 1 +x:1 +三网 1 +x:1 +拍照 1 +x:1 +葛镇 1 +x:1 +电路图 1 +x:1 +袒护 1 +x:1 +胆魄 1 +x:1 +晚会 1 +x:1 +丝厂 1 +x:1 +虾池 1 +x:1 +笋竹 1 +x:1 +士官 1 +x:1 +篇制 1 +x:1 +书法展 1 +x:1 +硫化氢 1 +x:1 +传呼台 1 +x:1 +从犯 1 +x:1 +压轴子 1 +x:1 +六龄童 1 +x:1 +求援 1 +x:1 +洗茶 1 +x:1 +铁蒺藜 1 +x:1 +母夜叉 1 +x:1 +国民政府 1 +x:1 +开足马力 1 +x:1 +文明岗 1 +x:1 +争妍斗丽 1 +x:1 +天旋地转 1 +x:1 +花丛 1 +x:1 +花业 1 +x:1 +花丝 1 +x:1 +粮商 1 +x:1 +生存权 1 +x:1 +黄赌毒 1 +x:1 +试工 1 +x:1 +饥渴 1 +x:1 +精煤 1 +x:1 +正定镇 1 +x:1 +研讨会 1 +x:1 +天地上 1 +x:1 +令人瞩目 1 +x:1 +面目可憎 1 +x:1 +站区 1 +x:1 +顺脚 1 +x:1 +沈阳 1 +x:1 +超规定 1 +x:1 +盛誉 1 +x:1 +杂交米 1 +x:1 +学人 1 +x:1 +句容市 1 +x:1 +议会宫 1 +x:1 +清政府 1 +x:1 +年赛 1 +x:1 +洗肠 1 +x:1 +热涨 1 +x:1 +条鳎 1 +x:1 +新业 1 +x:1 +亳 1 +x:1 +国防司 1 +x:1 +翘尾 1 +x:1 +打谱 1 +x:1 +栏网 1 +x:1 +胸襟 1 +x:1 +没有规矩 1 +x:1 +玉环岛 1 +x:1 +凝成 1 +x:1 +最次品 1 +x:1 +过堂风 1 +x:1 +诨名 1 +x:1 +假牙 1 +x:1 +新宁县 1 +x:1 +换 548 +x:548 +眼波 1 +x:1 +自查自纠 1 +x:1 +× 50 +x:50 +排遣 1 +x:1 +卫国干城 1 +x:1 +一点一滴 1 +x:1 +眼泪 1 +x:1 +国家栋梁 1 +x:1 +皇姑井村 1 +x:1 +整改率 1 +x:1 +不善言辞 1 +x:1 +昨儿个 1 +x:1 +异端 1 +x:1 +粮囤 1 +x:1 +储油构造 1 +x:1 +实践论 1 +x:1 +民意测验 1 +x:1 +深谋远虑 1 +x:1 +过路 1 +x:1 +更胜一筹 1 +x:1 +求情 1 +x:1 +人质 1 +x:1 +马丁炉 1 +x:1 +千岁 1 +x:1 +去留 1 +x:1 +分指数 1 +x:1 +坏疽 1 +x:1 +衰翁 1 +x:1 +盯 86 +x:86 +游览区 1 +x:1 +囊中之物 1 +x:1 +软绵 1 +x:1 +三类 1 +x:1 +练习赛 1 +x:1 +征集表 1 +x:1 +诸位 1 +x:1 +官僚主义 1 +x:1 +零枝碎叶 1 +x:1 +莱芜市 1 +x:1 +营溪乡 1 +x:1 +过账 1 +x:1 +暴涨 1 +x:1 +诸体 1 +x:1 +部分 1 +x:1 +海狮队 1 +x:1 +东港镇 1 +x:1 +见见 1 +x:1 +热流 1 +x:1 +蓄 23 +x:23 +美差 1 +x:1 +试建 1 +x:1 +挞伐 1 +x:1 +木本水源 1 +x:1 +一个样 1 +x:1 +曼荼罗 1 +x:1 +美工 1 +x:1 +城 584 +x:584 +学习 1 +x:1 +声调 1 +x:1 +火灾区 1 +x:1 +传之久远 1 +x:1 +部副 1 +x:1 +啸傲 1 +x:1 +唐山站 1 +x:1 +萨洛尼卡 1 +x:1 +扮演 1 +x:1 +修理费 1 +x:1 +见解 1 +x:1 +声谱 1 +x:1 +望眼欲穿 1 +x:1 +许昌 1 +x:1 +无羁无束 1 +x:1 +木偶片 1 +x:1 +热浪 1 +x:1 +匿名 1 +x:1 +石子路 1 +x:1 +睹 27 +x:27 +折戟沉沙 1 +x:1 +独步清流 1 +x:1 +新闻部长 1 +x:1 +预算外 1 +x:1 +扭结 1 +x:1 +傍 9 +x:9 +乌鲁瓦提 1 +x:1 +回头是岸 1 +x:1 +预算处 1 +x:1 +鹩哥 1 +x:1 +身份证者 1 +x:1 +收购量 1 +x:1 +装填 1 +x:1 +信息处 1 +x:1 +有损 1 +x:1 +龙南县 1 +x:1 +告申庭 1 +x:1 +河狸 1 +x:1 +在座 1 +x:1 +天下客 1 +x:1 +上层 1 +x:1 +热河 1 +x:1 +景德 1 +x:1 +远客 1 +x:1 +妇代会 1 +x:1 +提线木偶 1 +x:1 +主体性 1 +x:1 +探索 1 +x:1 +向阳处 1 +x:1 +可消化率 1 +x:1 +热泉 1 +x:1 +无端 1 +x:1 +犹然 1 +x:1 +竑 1 +x:1 +福山路 1 +x:1 +内错角 1 +x:1 +非西方 1 +x:1 +电报机 1 +x:1 +三湖 1 +x:1 +丝光 1 +x:1 +逐月 1 +x:1 +定盘星 1 +x:1 +有点 1 +x:1 +诸事 1 +x:1 +播出量 1 +x:1 +崇武镇 1 +x:1 +年画 1 +x:1 +紧跟 1 +x:1 +承包方 1 +x:1 +浙昆 1 +x:1 +热泪 1 +x:1 +士女 1 +x:1 +个体户 1 +x:1 +展览 1 +x:1 +捕风捉影 1 +x:1 +起落架 1 +x:1 +紧贴 1 +x:1 +泥雨 1 +x:1 +教书郎 1 +x:1 +新乐 1 +x:1 +文物点 1 +x:1 +长春沟村 1 +x:1 +热气 1 +x:1 +上下其手 1 +x:1 +写照 1 +x:1 +便携式 1 +x:1 +救济粮 1 +x:1 +通信科 1 +x:1 +敏于 1 +x:1 +湖南队 1 +x:1 +随手 1 +x:1 +深山老林 1 +x:1 +联名信 1 +x:1 +地下茎 1 +x:1 +学会 1 +x:1 +盯梢 1 +x:1 +热水 1 +x:1 +闭门思过 1 +x:1 +参数 1 +x:1 +洗脱 1 +x:1 +鱼儿 1 +x:1 +后视图 1 +x:1 +洗脸 1 +x:1 +石井乡 1 +x:1 +睦邻友好 1 +x:1 +非情节化 1 +x:1 +无穷 1 +x:1 +征得 1 +x:1 +枯井 1 +x:1 +哀辞 1 +x:1 +羊绒 1 +x:1 +热汤 1 +x:1 +租赁本 1 +x:1 +高速档 1 +x:1 +旷野 1 +x:1 +扬鞭 1 +x:1 +无害化 1 +x:1 +哪里 1 +x:1 +赞比亚 1 +x:1 +限制性 1 +x:1 +包心菜 1 +x:1 +饥民 1 +x:1 +学位 1 +x:1 +排释 1 +x:1 +片面性 1 +x:1 +一一 1 +x:1 +林格尔县 1 +x:1 +芯片 1 +x:1 +嘉陵 1 +x:1 +工农差别 1 +x:1 +石油部 1 +x:1 +入口 1 +x:1 +醉汉 1 +x:1 +探究 1 +x:1 +一世 1 +x:1 +合资方 1 +x:1 +槽钢 1 +x:1 +上市量 1 +x:1 +随时 1 +x:1 +姐妹节 1 +x:1 +盗宝 1 +x:1 +探空 1 +x:1 +值不值得 1 +x:1 +卓刀泉 1 +x:1 +一个 1 +x:1 +输液型 1 +x:1 +排队 1 +x:1 +谅解 1 +x:1 +一中 1 +x:1 +主任 1 +x:1 +异样 1 +x:1 +中行 1 +x:1 +> 4 +x:4 +生活版 1 +x:1 +低烧 1 +x:1 +人语 1 +x:1 +作答 1 +x:1 +糊料 1 +x:1 +招供 1 +x:1 +业内 1 +x:1 +日理万机 1 +x:1 +响杨 1 +x:1 +美学 1 +x:1 +锥形 1 +x:1 +排除 1 +x:1 +斑鸠 1 +x:1 +拨拨 1 +x:1 +羞耻 1 +x:1 +洒满 1 +x:1 +声誉 1 +x:1 +排险 1 +x:1 +主光轴 1 +x:1 +疏于 1 +x:1 +播麦 1 +x:1 +句 895 +x:895 +人证 1 +x:1 +首创性 1 +x:1 +生态县 1 +x:1 +自生自灭 1 +x:1 +拨拉 1 +x:1 +支点 1 +x:1 +富民 1 +x:1 +入厕 1 +x:1 +纱垫 1 +x:1 +预想 1 +x:1 +竿 4 +x:4 +迷信风 1 +x:1 +粮倌 1 +x:1 +文明委 1 +x:1 +立面 1 +x:1 +免于一死 1 +x:1 +藏传 1 +x:1 +徽班 1 +x:1 +豫北 1 +x:1 +同志式 1 +x:1 +一些 1 +x:1 +就诊 1 +x:1 +凸字形 1 +x:1 +儿童 1 +x:1 +魁星 1 +x:1 +燃运部 1 +x:1 +利辛 1 +x:1 +福塞特 1 +x:1 +一产 1 +x:1 +欺压 1 +x:1 +鹤庆 1 +x:1 +居家湾村 1 +x:1 +弱国 1 +x:1 +音 76 +x:76 +翘足引领 1 +x:1 +停滞 1 +x:1 +周末版 1 +x:1 +信息库 1 +x:1 +受精率 1 +x:1 +新书 1 +x:1 +扬都 1 +x:1 +泥金 1 +x:1 +活脱 1 +x:1 +排雷 1 +x:1 +售假者 1 +x:1 +雌 11 +x:11 +声言 1 +x:1 +哑童 1 +x:1 +赶时髦 1 +x:1 +火药库 1 +x:1 +魏塘镇 1 +x:1 +参战 1 +x:1 +执迷不悟 1 +x:1 +一代 1 +x:1 +泰州市 1 +x:1 +拨打 1 +x:1 +信息廊 1 +x:1 +品目 1 +x:1 +通信线 1 +x:1 +熙来攘往 1 +x:1 +知之甚少 1 +x:1 +有备无患 1 +x:1 +所部 1 +x:1 +离子束 1 +x:1 +昂 11 +x:11 +仙鹤草 1 +x:1 +腐竹 1 +x:1 +后汉书 1 +x:1 +熙熙 1 +x:1 +辕马 1 +x:1 +环委会 1 +x:1 +深沟墩台 1 +x:1 +粮农 1 +x:1 +藏人 1 +x:1 +柑桔园 1 +x:1 +通信网 1 +x:1 +情之切切 1 +x:1 +喂食 1 +x:1 +长篇大论 1 +x:1 +茶锈 1 +x:1 +疑凶 1 +x:1 +愉快 1 +x:1 +纺织界 1 +x:1 +花式 1 +x:1 +出租车 1 +x:1 +令人起敬 1 +x:1 +蓄能器 1 +x:1 +签证 1 +x:1 +女作家 1 +x:1 +核子反应 1 +x:1 +膀臂 1 +x:1 +南海街 1 +x:1 +明星队 1 +x:1 +无所不包 1 +x:1 +亲兵 1 +x:1 +棉 55 +x:55 +仿效 1 +x:1 +一低 1 +x:1 +屡战屡败 1 +x:1 +车流量 1 +x:1 +士录 1 +x:1 +招事 1 +x:1 +签订 1 +x:1 +传接球 1 +x:1 +留尼旺 1 +x:1 +槽门 1 +x:1 +磨工 1 +x:1 +摊派 1 +x:1 +家喻户晓 1 +x:1 +征战史 1 +x:1 +屯河 1 +x:1 +主从 1 +x:1 +年猪 1 +x:1 +绮丽 1 +x:1 +声讨 1 +x:1 +大脑库 1 +x:1 +声讯 1 +x:1 +听者 1 +x:1 +解剖麻雀 1 +x:1 +掂掂 1 +x:1 +扫射 1 +x:1 +呈贡县 1 +x:1 +阍 1 +x:1 +车架厂 1 +x:1 +三等 1 +x:1 +预感 1 +x:1 +承包点 1 +x:1 +帽盔儿 1 +x:1 +寻踪者 1 +x:1 +总行 1 +x:1 +众口一辞 1 +x:1 +伤亡者 1 +x:1 +素色 1 +x:1 +杳无音讯 1 +x:1 +创新者 1 +x:1 +景天 1 +x:1 +声 400 +x:400 +众望 1 +x:1 +郎当嫂 1 +x:1 +白塔镇 1 +x:1 +腮腺 1 +x:1 +藏东 1 +x:1 +无关大局 1 +x:1 +主人 1 +x:1 +曲尽其妙 1 +x:1 +探源 1 +x:1 +饰词 1 +x:1 +豪放派 1 +x:1 +民富国强 1 +x:1 +词句 1 +x:1 +攸县籍 1 +x:1 +天外有天 1 +x:1 +榆树市 1 +x:1 +藏书 1 +x:1 +输液器 1 +x:1 +鸽群 1 +x:1 +黄旗镇 1 +x:1 +乘胜 1 +x:1 +年率 1 +x:1 +一俟 1 +x:1 +无籽 1 +x:1 +殖民地化 1 +x:1 +逞强 1 +x:1 +豫剧 1 +x:1 +研究院所 1 +x:1 +坦坦荡荡 1 +x:1 +致幻剂 1 +x:1 +下访团 1 +x:1 +速写式 1 +x:1 +未能 1 +x:1 +锚定墩 1 +x:1 +滑稽 1 +x:1 +芳草 1 +x:1 +三结合 1 +x:1 +征婚 1 +x:1 +千手佛 1 +x:1 +预报 1 +x:1 +专心致志 1 +x:1 +磨床 1 +x:1 +芹菜 1 +x:1 +湖东乡 1 +x:1 +砌缝 1 +x:1 +青藤花杯 1 +x:1 +书法家 1 +x:1 +入冬 1 +x:1 +面议 1 +x:1 +急腹症 1 +x:1 +行伍 1 +x:1 +砌置 1 +x:1 +富港 1 +x:1 +虚饰 1 +x:1 +相邻 1 +x:1 +茶陵 1 +x:1 +丹田 1 +x:1 +老将迟暮 1 +x:1 +美女 1 +x:1 +圣彼得堡 1 +x:1 +洒泪 1 +x:1 +鹤山 1 +x:1 +洗煤厂 1 +x:1 +歌山镇 1 +x:1 +精盐 1 +x:1 +停薪 1 +x:1 +枕上 1 +x:1 +春大麦 1 +x:1 +探研 1 +x:1 +贝卡 1 +x:1 +一枝独秀 1 +x:1 +投资者 1 +x:1 +地板胶 1 +x:1 +文物界 1 +x:1 +陡坡 1 +x:1 +才尽其用 1 +x:1 +连锁店 1 +x:1 +大购大销 1 +x:1 +永乐乡 1 +x:1 +止血带 1 +x:1 +施暴者 1 +x:1 +假意 1 +x:1 +牟取暴利 1 +x:1 +宣传词 1 +x:1 +序而不变 1 +x:1 +无影无踪 1 +x:1 +菊展 1 +x:1 +铜活字 1 +x:1 +漫山遍野 1 +x:1 +精瘦 1 +x:1 +而立之年 1 +x:1 +准考证 1 +x:1 +找齐 1 +x:1 +生存性 1 +x:1 +秋后算账 1 +x:1 +免受 1 +x:1 +美妙 1 +x:1 +入党 1 +x:1 +鹤岗 1 +x:1 +无缘 1 +x:1 +比试 1 +x:1 +无缝 1 +x:1 +有生 1 +x:1 +无罪 1 +x:1 +拳棒 1 +x:1 +滑竿 1 +x:1 +广饶路 1 +x:1 +就要 1 +x:1 +路霸 1 +x:1 +彭泽县 1 +x:1 +藻类植物 1 +x:1 +随机 1 +x:1 +作秀 1 +x:1 +拘 2 +x:2 +灵慧 1 +x:1 +鹤峰 1 +x:1 +欺凌 1 +x:1 +蹩脚 1 +x:1 +酥 5 +x:5 +提 405 +x:405 +三破 1 +x:1 +假相 1 +x:1 +乳糜 1 +x:1 +信誓旦旦 1 +x:1 +富源 1 +x:1 +火土灰 1 +x:1 +美姑 1 +x:1 +赌业 1 +x:1 +储备 1 +x:1 +蜜柚苗 1 +x:1 +万古千秋 1 +x:1 +慷慨解囊 1 +x:1 +金刚钻 1 +x:1 +见谅 1 +x:1 +鞋 123 +x:123 +鞑靼 1 +x:1 +景宁 1 +x:1 +东坑乡 1 +x:1 +惯盗 1 +x:1 +三秋 1 +x:1 +求救 1 +x:1 +生活照 1 +x:1 +命中 1 +x:1 +词儿 1 +x:1 +年利率 1 +x:1 +求教 1 +x:1 +代办费 1 +x:1 +千夫 1 +x:1 +国防园 1 +x:1 +铝桶 1 +x:1 +枣庄乡 1 +x:1 +交通工具 1 +x:1 +相重 1 +x:1 +堪 29 +x:29 +乘船 1 +x:1 +预售方 1 +x:1 +紧要 1 +x:1 +贝利 1 +x:1 +起早贪黑 1 +x:1 +河源站 1 +x:1 +精矿 1 +x:1 +排长 1 +x:1 +咨询费 1 +x:1 +凝望 1 +x:1 +中远期 1 +x:1 +无绳 1 +x:1 +精短 1 +x:1 +涉猎 1 +x:1 +钨钢 1 +x:1 +词典 1 +x:1 +话锋 1 +x:1 +跤 12 +x:12 +搅动 1 +x:1 +出租费 1 +x:1 +满腔热忱 1 +x:1 +俾路支省 1 +x:1 +茌平县 1 +x:1 +中标方 1 +x:1 +闲气 1 +x:1 +草坪村 1 +x:1 +核算价 1 +x:1 +润滑性 1 +x:1 +阶梯 1 +x:1 +随到随办 1 +x:1 +扫帚 1 +x:1 +篇名 1 +x:1 +永川市 1 +x:1 +纬度 1 +x:1 +垠 1 +x:1 +大书特书 1 +x:1 +委会 1 +x:1 +贝劳 1 +x:1 +傻高 1 +x:1 +缶掌 1 +x:1 +炫目 1 +x:1 +粮区 1 +x:1 +慈利 1 +x:1 +艾美特队 1 +x:1 +湿地松 1 +x:1 +刹 30 +x:30 +高句丽 1 +x:1 +探秘 1 +x:1 +构筑物 1 +x:1 +衰竭 1 +x:1 +农总行 1 +x:1 +耶和华 1 +x:1 +坐冷板凳 1 +x:1 +粉扑扑 1 +x:1 +耒阳市 1 +x:1 +南部斋 1 +x:1 +命令 1 +x:1 +体系化 1 +x:1 +研磨 1 +x:1 +美声 1 +x:1 +驼绒 1 +x:1 +锌基 1 +x:1 +有理 1 +x:1 +人行 1 +x:1 +副食店 1 +x:1 +冰球队 1 +x:1 +纸杯 1 +x:1 +电解铝 1 +x:1 +单打独斗 1 +x:1 +地雷战 1 +x:1 +物极而反 1 +x:1 +成群结对 1 +x:1 +张黄镇 1 +x:1 +求新 1 +x:1 +籽 4 +x:4 +酸管 1 +x:1 +絮棉 1 +x:1 +首都在线 1 +x:1 +铝材 1 +x:1 +春暖花开 1 +x:1 +试听 1 +x:1 +指挥所 1 +x:1 +稳练 1 +x:1 +子痫 1 +x:1 +说了算 1 +x:1 +饲养 1 +x:1 +活路 1 +x:1 +厚道 1 +x:1 +哑巴亏 1 +x:1 +三相 1 +x:1 +土疙瘩 1 +x:1 +警威 1 +x:1 +餐会 1 +x:1 +自顾自 1 +x:1 +三盲 1 +x:1 +识破天机 1 +x:1 +活跃 1 +x:1 +赢得 1 +x:1 +小石潭 1 +x:1 +跫然 1 +x:1 +用户证 1 +x:1 +大操大办 1 +x:1 +杂醇油 1 +x:1 +傻 34 +x:34 +榆树叶 1 +x:1 +见缝就钻 1 +x:1 +烟斗丝 1 +x:1 +罗锅 1 +x:1 +入微 1 +x:1 +行会 1 +x:1 +辊道 1 +x:1 +圣但尼市 1 +x:1 +词干 1 +x:1 +醉态 1 +x:1 +三皇 1 +x:1 +报喜者 1 +x:1 +勤俭节约 1 +x:1 +电阻 1 +x:1 +富态 1 +x:1 +布纹纸 1 +x:1 +高技术化 1 +x:1 +炫示 1 +x:1 +赔偿制 1 +x:1 +敌众我寡 1 +x:1 +许愿 1 +x:1 +阒寂无声 1 +x:1 +乌兰牧旗 1 +x:1 +测评表 1 +x:1 +说法不一 1 +x:1 +卡尔加里 1 +x:1 +非农业 1 +x:1 +匆猝 1 +x:1 +图书站 1 +x:1 +吓 39 +x:39 +年终 1 +x:1 +淮南调 1 +x:1 +高技术司 1 +x:1 +排骨 1 +x:1 +南昌市 1 +x:1 +热望 1 +x:1 +珍罕 1 +x:1 +残酷无情 1 +x:1 +屡战屡胜 1 +x:1 +条陈 1 +x:1 +词序 1 +x:1 +齐心合力 1 +x:1 +入彀 1 +x:1 +子畜 1 +x:1 +乐山川 1 +x:1 +开元区 1 +x:1 +响鼻 1 +x:1 +大权在握 1 +x:1 +骄阳 1 +x:1 +天灵盖 1 +x:1 +挥发油 1 +x:1 +窝囊废 1 +x:1 +进步站 1 +x:1 +直流电 1 +x:1 +汤团 1 +x:1 +精确 1 +x:1 +上当 1 +x:1 +洒扫 1 +x:1 +外币 1 +x:1 +扫入 1 +x:1 +芯级 1 +x:1 +杨水湖 1 +x:1 +芯线 1 +x:1 +多角度 1 +x:1 +泪流满面 1 +x:1 +年纪 1 +x:1 +占卜 1 +x:1 +扫兴 1 +x:1 +年级 1 +x:1 +亡佚 1 +x:1 +线胀系数 1 +x:1 +茶食 1 +x:1 +饮料机 1 +x:1 +慢性病 1 +x:1 +珍本 1 +x:1 +禁行令 1 +x:1 +研究所 1 +x:1 +每股 1 +x:1 +入境案 1 +x:1 +讲情面 1 +x:1 +纱嫂 1 +x:1 +寄存 1 +x:1 +亡人 1 +x:1 +毛选 1 +x:1 +陡壁 1 +x:1 +餐业 1 +x:1 +沙沙沙 1 +x:1 +住宿部 1 +x:1 +信息化 1 +x:1 +拳术 1 +x:1 +多角形 1 +x:1 +承运人 1 +x:1 +信息卡 1 +x:1 +词形 1 +x:1 +丢盔弃甲 1 +x:1 +入座 1 +x:1 +马列主义 1 +x:1 +暴晒 1 +x:1 +茶饭 1 +x:1 +被害者 1 +x:1 +士卒 1 +x:1 +芳名 1 +x:1 +海洛因 1 +x:1 +虹吸管 1 +x:1 +服丧期 1 +x:1 +银行街 1 +x:1 +人性论 1 +x:1 +都市人 1 +x:1 +爆炸品 1 +x:1 +人蛇 1 +x:1 +阳安乡 1 +x:1 +部委 1 +x:1 +鸱尾 1 +x:1 +化学武器 1 +x:1 +利港镇 1 +x:1 +大名县 1 +x:1 +互连 1 +x:1 +入库 1 +x:1 +融通 1 +x:1 +厚重 1 +x:1 +弹涂鱼 1 +x:1 +登陆舰 1 +x:1 +潜隐 1 +x:1 +滑润 1 +x:1 +部头 1 +x:1 +上影 1 +x:1 +计价器 1 +x:1 +茶汤 1 +x:1 +探矿 1 +x:1 +寄寓 1 +x:1 +不闻不问 1 +x:1 +日用百货 1 +x:1 +通信班 1 +x:1 +典守者 1 +x:1 +邦 28 +x:28 +泥鳅 1 +x:1 +汉堡市 1 +x:1 +织锦 1 +x:1 +茶馓 1 +x:1 +云端 1 +x:1 +忙里忙外 1 +x:1 +电笔 1 +x:1 +茶香 1 +x:1 +纺 14 +x:14 +柏各庄镇 1 +x:1 +入席 1 +x:1 +怡 47 +x:47 +特务连 1 +x:1 +预测 1 +x:1 +过虑 1 +x:1 +实践者 1 +x:1 +磨具 1 +x:1 +锡耶纳 1 +x:1 +参演 1 +x:1 +一审 1 +x:1 +美国 1 +x:1 +信息台 1 +x:1 +假种 1 +x:1 +史学界 1 +x:1 +发散透镜 1 +x:1 +精神 1 +x:1 +塑钢窗 1 +x:1 +坏绅 1 +x:1 +入市 1 +x:1 +寄宿 1 +x:1 +磨光 1 +x:1 +刀耕火种 1 +x:1 +吞武里 1 +x:1 +电流强度 1 +x:1 +暧昧 1 +x:1 +有种 1 +x:1 +外伤性 1 +x:1 +塘 28 +x:28 +粮库 1 +x:1 +裁员量 1 +x:1 +新奇劲儿 1 +x:1 +粮店 1 +x:1 +暴政 1 +x:1 +手忙脚乱 1 +x:1 +譬如说 1 +x:1 +魁梧 1 +x:1 +匦 1 +x:1 +农机院 1 +x:1 +洗被 1 +x:1 +邮报 1 +x:1 +听辨 1 +x:1 +异状 1 +x:1 +警容 1 +x:1 +构架 1 +x:1 +强身健魄 1 +x:1 +滞留 1 +x:1 +温岭市 1 +x:1 +暴敛 1 +x:1 +荆 14 +x:14 +均衡化 1 +x:1 +鬼头鬼脑 1 +x:1 +吉卜赛 1 +x:1 +富户 1 +x:1 +烽燧 1 +x:1 +箭鱼 1 +x:1 +梅子树 1 +x:1 +虚构性 1 +x:1 +传销商 1 +x:1 +珍摄 1 +x:1 +栋栋 1 +x:1 +售货亭 1 +x:1 +培训者 1 +x:1 +人工免疫 1 +x:1 +乘车 1 +x:1 +美商 1 +x:1 +支线 1 +x:1 +万维网 1 +x:1 +飞行史 1 +x:1 +不远处 1 +x:1 +扬黄 1 +x:1 +硬席 1 +x:1 +候鸟 1 +x:1 +有神 1 +x:1 +墨水 1 +x:1 +年糕 1 +x:1 +生产方式 1 +x:1 +暧暧 1 +x:1 +凤山镇 1 +x:1 +叙事诗 1 +x:1 +印象至深 1 +x:1 +郸城 1 +x:1 +啸声 1 +x:1 +云霞 1 +x:1 +狂风恶浪 1 +x:1 +苗乡 1 +x:1 +公路桥 1 +x:1 +醉拳 1 +x:1 +走婚制 1 +x:1 +笠头村 1 +x:1 +泻珠溅玉 1 +x:1 +兼容并包 1 +x:1 +双龙镇 1 +x:1 +豁然 1 +x:1 +磨刀 1 +x:1 +飞行区 1 +x:1 +云霄 1 +x:1 +试图 1 +x:1 +播送 1 +x:1 +美不胜收 1 +x:1 +泥足巨人 1 +x:1 +话题 1 +x:1 +张庄乡 1 +x:1 +前所未有 1 +x:1 +缄默 1 +x:1 +参看 1 +x:1 +栋梁 1 +x:1 +洗衣 1 +x:1 +围攻 1 +x:1 +耕作层 1 +x:1 +血钾 1 +x:1 +淤土地 1 +x:1 +考试场 1 +x:1 +汤圆 1 +x:1 +热敷 1 +x:1 +雀斑 1 +x:1 +班组长 1 +x:1 +令人寒心 1 +x:1 +电火花机 1 +x:1 +齐岳山 1 +x:1 +检测期 1 +x:1 +花明柳暗 1 +x:1 +见者 1 +x:1 +二十日 1 +x:1 +预留 1 +x:1 +产销量 1 +x:1 +少工委 1 +x:1 +蒸笼 1 +x:1 +演讲台 1 +x:1 +二十时 1 +x:1 +胆小如鼠 1 +x:1 +子目 1 +x:1 +颤音 1 +x:1 +斟 10 +x:10 +胆量 1 +x:1 +三军团 1 +x:1 +侧压力 1 +x:1 +停电 1 +x:1 +美名 1 +x:1 +老人节 1 +x:1 +袭 51 +x:51 +患者 1 +x:1 +精算 1 +x:1 +糖尿病 1 +x:1 +法国法郎 1 +x:1 +平战时 1 +x:1 +凝止 1 +x:1 +精简 1 +x:1 +秦坊村 1 +x:1 +眼罩 1 +x:1 +玉米塘村 1 +x:1 +破铜烂铁 1 +x:1 +磨叽 1 +x:1 +自考 1 +x:1 +书报摊 1 +x:1 +奔马图 1 +x:1 +停留 1 +x:1 +顺访 1 +x:1 +有碍 1 +x:1 +探由 1 +x:1 +美味 1 +x:1 +中西 1 +x:1 +晞 14 +x:14 +湛蓝湛蓝 1 +x:1 +烽烟 1 +x:1 +龟鉴 1 +x:1 +妙趣横生 1 +x:1 +欢乐与共 1 +x:1 +红褐色 1 +x:1 +士兵 1 +x:1 +继往 1 +x:1 +丰产期 1 +x:1 +软武器 1 +x:1 +漏勺 1 +x:1 +栏目 1 +x:1 +谅 4 +x:4 +议会制 1 +x:1 +非企业 1 +x:1 +形体美 1 +x:1 +落筒机 1 +x:1 +预算内 1 +x:1 +文化部长 1 +x:1 +预演 1 +x:1 +管辖权 1 +x:1 +探病 1 +x:1 +火山灰 1 +x:1 +青春期 1 +x:1 +胆酸 1 +x:1 +洗净度 1 +x:1 +热水器 1 +x:1 +伦理学 1 +x:1 +高粱酒 1 +x:1 +文明园 1 +x:1 +滑石 1 +x:1 +脉脉传情 1 +x:1 +笺注 1 +x:1 +燃烧器 1 +x:1 +扬威 1 +x:1 +崖下 1 +x:1 +品种 1 +x:1 +粗放型 1 +x:1 +万古长存 1 +x:1 +主辅修制 1 +x:1 +胞波 1 +x:1 +烽火 1 +x:1 +转运 1 +x:1 +米扁虫 1 +x:1 +拒报 1 +x:1 +险 78 +x:78 +三田 1 +x:1 +三甲 1 +x:1 +三电 1 +x:1 +南半球 1 +x:1 +游艺会 1 +x:1 +丰产林 1 +x:1 +干国之器 1 +x:1 +环保局 1 +x:1 +无限性 1 +x:1 +鬼哭神嚎 1 +x:1 +配色 1 +x:1 +历音 1 +x:1 +非盈利性 1 +x:1 +精粹 1 +x:1 +阿肯色 1 +x:1 +纷然 1 +x:1 +挥洒自如 1 +x:1 +报刊社 1 +x:1 +覆膜机 1 +x:1 +摊摊 1 +x:1 +过境站 1 +x:1 +迂回 1 +x:1 +无把握 1 +x:1 +封建割据 1 +x:1 +火山石 1 +x:1 +龙王塘 1 +x:1 +病殃殃 1 +x:1 +由衷 1 +x:1 +变性酒精 1 +x:1 +回生 1 +x:1 +丝带 1 +x:1 +攻防 1 +x:1 +狼牙山 1 +x:1 +无配料表 1 +x:1 +砸 102 +x:102 +争芳斗艳 1 +x:1 +美化 1 +x:1 +情景剧 1 +x:1 +听见 1 +x:1 +瞄准 1 +x:1 +入室 1 +x:1 +奥博 1 +x:1 +听觉 1 +x:1 +弱币 1 +x:1 +血液 1 +x:1 +就范 1 +x:1 +征候 1 +x:1 +法国杯赛 1 +x:1 +糊涂 1 +x:1 +呱呱 1 +x:1 +隐姓埋名 1 +x:1 +面生 1 +x:1 +金福村 1 +x:1 +美协 1 +x:1 +梯度差 1 +x:1 +烈日当空 1 +x:1 +牙克石 1 +x:1 +合成器 1 +x:1 +齐东野语 1 +x:1 +无痛 1 +x:1 +鸟语花香 1 +x:1 +社交界 1 +x:1 +种养殖 1 +x:1 +大客厅 1 +x:1 +着火 1 +x:1 +脉 8 +x:8 +无用 1 +x:1 +入学 1 +x:1 +欺客 1 +x:1 +贸委会 1 +x:1 +淆杂 1 +x:1 +无由 1 +x:1 +祖庙 1 +x:1 +最近 1 +x:1 +掺水 1 +x:1 +皇位 1 +x:1 +毫无疑义 1 +x:1 +朝 265 +x:265 +声色 1 +x:1 +富国墩 1 +x:1 +黑货 1 +x:1 +血站 1 +x:1 +金台里 1 +x:1 +品级 1 +x:1 +济铁 1 +x:1 +三牲 1 +x:1 +战略家 1 +x:1 +油公司 1 +x:1 +整容镜 1 +x:1 +磨合 1 +x:1 +织造 1 +x:1 +凝注 1 +x:1 +热心人 1 +x:1 +放录像 1 +x:1 +楚楚动人 1 +x:1 +护航 1 +x:1 +科研所 1 +x:1 +预案 1 +x:1 +铝排 1 +x:1 +位 5797 +x:5797 +济钢 1 +x:1 +精米 1 +x:1 +留尼汪 1 +x:1 +停水 1 +x:1 +修正主义 1 +x:1 +三年期 1 +x:1 +反转片 1 +x:1 +投递员 1 +x:1 +类人猿 1 +x:1 +四方八面 1 +x:1 +糠 3 +x:3 +棘皮动物 1 +x:1 +部属 1 +x:1 +白煞煞 1 +x:1 +金圆区 1 +x:1 +俱乐部制 1 +x:1 +稳稳 1 +x:1 +业大 1 +x:1 +无畏 1 +x:1 +全镇 1 +x:1 +淤塞 1 +x:1 +勇往直前 1 +x:1 +美发 1 +x:1 +军转 1 +x:1 +乌光 1 +x:1 +盆子 1 +x:1 +顺路 1 +x:1 +奥波莱市 1 +x:1 +佚事 1 +x:1 +学府 1 +x:1 +费难 1 +x:1 +陡峭 1 +x:1 +布鲁氏菌 1 +x:1 +文科生 1 +x:1 +不稳定性 1 +x:1 +藏品展 1 +x:1 +过节 1 +x:1 +动心忍性 1 +x:1 +陡峻 1 +x:1 +客车队 1 +x:1 +暴戾 1 +x:1 +吉泊村 1 +x:1 +向阳坡 1 +x:1 +瞧 52 +x:52 +潮阳市 1 +x:1 +油光光 1 +x:1 +美分 1 +x:1 +风光 1 +x:1 +盗卖案 1 +x:1 +丝弦 1 +x:1 +征兵 1 +x:1 +报幕员 1 +x:1 +播音 1 +x:1 +实现者 1 +x:1 +承包期 1 +x:1 +景况 1 +x:1 +王府井站 1 +x:1 +围拢 1 +x:1 +糊泡 1 +x:1 +肺心病 1 +x:1 +埃斯波市 1 +x:1 +硬座 1 +x:1 +找钱 1 +x:1 +千升 1 +x:1 +辩证法 1 +x:1 +尽责 1 +x:1 +理工大学 1 +x:1 +宣传者 1 +x:1 +播映 1 +x:1 +玉环县 1 +x:1 +帐子 1 +x:1 +韧 2 +x:2 +千卡 1 +x:1 +占位 1 +x:1 +查错程序 1 +x:1 +工业园区 1 +x:1 +黄浦江畔 1 +x:1 +支离 1 +x:1 +西辛庄 1 +x:1 +三环 1 +x:1 +围护 1 +x:1 +构想 1 +x:1 +柜门 1 +x:1 +有约 1 +x:1 +栅网 1 +x:1 +技不压身 1 +x:1 +拨款 1 +x:1 +居留权 1 +x:1 +知人善任 1 +x:1 +构思 1 +x:1 +云浮市 1 +x:1 +卷帘门 1 +x:1 +热战 1 +x:1 +绘图板 1 +x:1 +玉米花儿 1 +x:1 +无理 1 +x:1 +小花棘豆 1 +x:1 +流氓气 1 +x:1 +及其 1 +x:1 +信息型 1 +x:1 +民工潮 1 +x:1 +词宗 1 +x:1 +活血 1 +x:1 +副食品 1 +x:1 +上市 1 +x:1 +蛹期 1 +x:1 +邮政 1 +x:1 +纱帐 1 +x:1 +险区 1 +x:1 +纱帘 1 +x:1 +绘图本 1 +x:1 +篇幅 1 +x:1 +人艺 1 +x:1 +飞行员 1 +x:1 +皇上 1 +x:1 +供给方 1 +x:1 +涉禽 1 +x:1 +职业队 1 +x:1 +贝壳 1 +x:1 +市委办 1 +x:1 +纱帽 1 +x:1 +琥珀 1 +x:1 +千古 1 +x:1 +邂逅相逢 1 +x:1 +无瑕 1 +x:1 +宣传股 1 +x:1 +无所不容 1 +x:1 +有史以来 1 +x:1 +千叶 1 +x:1 +噪杂 1 +x:1 +盘缠 1 +x:1 +精纺 1 +x:1 +书法史 1 +x:1 +求求 1 +x:1 +民族形式 1 +x:1 +试制 1 +x:1 +珍珠圆 1 +x:1 +打散 1 +x:1 +确乎不拔 1 +x:1 +芳华 1 +x:1 +洗精煤 1 +x:1 +公路法 1 +x:1 +嗬哟 1 +x:1 +创新论 1 +x:1 +灰乌乌 1 +x:1 +犁镜 1 +x:1 +活话 1 +x:1 +充足率 1 +x:1 +三热 1 +x:1 +外接圆 1 +x:1 +试刊 1 +x:1 +免刑 1 +x:1 +火药味 1 +x:1 +茂盛 1 +x:1 +辛未 1 +x:1 +遮丑 1 +x:1 +文明化 1 +x:1 +护肩 1 +x:1 +冷风型 1 +x:1 +药皂 1 +x:1 +活计 1 +x:1 +克边疆区 1 +x:1 +长跑队 1 +x:1 +楚 47 +x:47 +弱小 1 +x:1 +戒坛院 1 +x:1 +美元 1 +x:1 +乘警 1 +x:1 +寺沟乡 1 +x:1 +听说 1 +x:1 +置之脑后 1 +x:1 +企获 1 +x:1 +听课 1 +x:1 +品类 1 +x:1 +精练 1 +x:1 +异相 1 +x:1 +停火 1 +x:1 +精细 1 +x:1 +试剂 1 +x:1 +北土城 1 +x:1 +住房 1 +x:1 +凝滞 1 +x:1 +血流 1 +x:1 +剥蚀 1 +x:1 +馆陶县 1 +x:1 +求法 1 +x:1 +年利税 1 +x:1 +双人床 1 +x:1 +人脸 1 +x:1 +五台山 1 +x:1 +回收期 1 +x:1 +金豹黄 1 +x:1 +热感 1 +x:1 +父老兄弟 1 +x:1 +哑炮 1 +x:1 +A 433 +x:433 +试办 1 +x:1 +景别 1 +x:1 +文明号 1 +x:1 +挡泥板 1 +x:1 +馆舍 1 +x:1 +抵扣率 1 +x:1 +扫地 1 +x:1 +阻 7 +x:7 +新舰 1 +x:1 +人脑 1 +x:1 +阿尔及尔 1 +x:1 +引以 1 +x:1 +染色 1 +x:1 +三来一补 1 +x:1 +潇水 1 +x:1 +绝对高度 1 +x:1 +砌石 1 +x:1 +荦荦 1 +x:1 +欺蒙 1 +x:1 +球龄 1 +x:1 +护耳 1 +x:1 +葫芦 1 +x:1 +离子流 1 +x:1 +无着 1 +x:1 +饥 10 +x:10 +若即若离 1 +x:1 +索然 1 +x:1 +过腹 1 +x:1 +入夜 1 +x:1 +荡检逾闲 1 +x:1 +动手术 1 +x:1 +珍惜 1 +x:1 +品系 1 +x:1 +东大桥 1 +x:1 +横断面 1 +x:1 +求治 1 +x:1 +三中全会 1 +x:1 +娘娘巷 1 +x:1 +嘱托 1 +x:1 +笺校 1 +x:1 +秦家沟 1 +x:1 +词头 1 +x:1 +繁茂 1 +x:1 +潜逃 1 +x:1 +父母官 1 +x:1 +儿童村 1 +x:1 +入声 1 +x:1 +置换 1 +x:1 +余派 1 +x:1 +夹山寺 1 +x:1 +法郎区 1 +x:1 +倪 85 +x:85 +腐烂 1 +x:1 +薄脆 1 +x:1 +缴枪 1 +x:1 +年票 1 +x:1 +连篇 1 +x:1 +钽 3 +x:3 +改作 1 +x:1 +热情 1 +x:1 +汉族人 1 +x:1 +试卷 1 +x:1 +聊 64 +x:64 +督访行 1 +x:1 +求洋 1 +x:1 +丹参酮 1 +x:1 +中东部 1 +x:1 +孟加拉队 1 +x:1 +年礼 1 +x:1 +千金一诺 1 +x:1 +无益 1 +x:1 +隐没 1 +x:1 +装甲车 1 +x:1 +入境 1 +x:1 +说大话 1 +x:1 +护膝 1 +x:1 +重机枪 1 +x:1 +入境游 1 +x:1 +自制力 1 +x:1 +寨主 1 +x:1 +打断 1 +x:1 +声腔 1 +x:1 +星空图 1 +x:1 +顺车 1 +x:1 +延请 1 +x:1 +熠熠 1 +x:1 +融雪 1 +x:1 +乡乡村村 1 +x:1 +护腿 1 +x:1 +园中 1 +x:1 +离子水 1 +x:1 +以泪洗面 1 +x:1 +当之无愧 1 +x:1 +报刊架 1 +x:1 +构成 1 +x:1 +费时 1 +x:1 +乱 538 +x:538 +犁铧 1 +x:1 +子牙 1 +x:1 +征召 1 +x:1 +景区 1 +x:1 +防水坝 1 +x:1 +直言不讳 1 +x:1 +笋瓜 1 +x:1 +秦皇岛 1 +x:1 +文明办 1 +x:1 +财政寡头 1 +x:1 +涂脂抹粉 1 +x:1 +哒 1 +x:1 +债务人 1 +x:1 +扮成 1 +x:1 +六边形 1 +x:1 +丹粉 1 +x:1 +演绎者 1 +x:1 +温饱线 1 +x:1 +秤 37 +x:37 +鉴定费 1 +x:1 +飞行器 1 +x:1 +丝巾 1 +x:1 +巫山县 1 +x:1 +访问率 1 +x:1 +磨坊 1 +x:1 +彩蝶飞舞 1 +x:1 +维持性 1 +x:1 +护脚 1 +x:1 +离到任 1 +x:1 +三焦 1 +x:1 +鬼天气 1 +x:1 +大陆军 1 +x:1 +笸箩 1 +x:1 +慈和 1 +x:1 +银卡 1 +x:1 +车匪路霸 1 +x:1 +千万 1 +x:1 +滑溜 1 +x:1 +哪般 1 +x:1 +花心 1 +x:1 +眼红 1 +x:1 +报考 1 +x:1 +黄南 1 +x:1 +活门 1 +x:1 +清迈 1 +x:1 +学岗 1 +x:1 +济南站 1 +x:1 +假性 1 +x:1 +年景 1 +x:1 +人龙 1 +x:1 +在即 1 +x:1 +姐妹篇 1 +x:1 +三滤 1 +x:1 +召集人 1 +x:1 +榜首 1 +x:1 +糕饼 1 +x:1 +真心话 1 +x:1 +屈 37 +x:37 +辩护律师 1 +x:1 +皇历 1 +x:1 +招安 1 +x:1 +锣鼓声 1 +x:1 +支撑 1 +x:1 +蜂产品 1 +x:1 +四体书 1 +x:1 +柿椒 1 +x:1 +清远 1 +x:1 +清爽爽 1 +x:1 +尽速 1 +x:1 +九华灯 1 +x:1 +坎昆 1 +x:1 +苘山镇 1 +x:1 +求爱 1 +x:1 +制假者 1 +x:1 +肯尼迪 1 +x:1 +木箱 1 +x:1 +组曲 1 +x:1 +三湘 1 +x:1 +招子 1 +x:1 +融解 1 +x:1 +洱源 1 +x:1 +高鼻子 1 +x:1 +羊崽 1 +x:1 +晚市 1 +x:1 +围网 1 +x:1 +精怪 1 +x:1 +应运而生 1 +x:1 +佣金 1 +x:1 +展项 1 +x:1 +核战争 1 +x:1 +售货员 1 +x:1 +黄发 1 +x:1 +花影 1 +x:1 +一钱不值 1 +x:1 +金匮要略 1 +x:1 +地黄牛 1 +x:1 +有感 1 +x:1 +旅游性 1 +x:1 +三湾 1 +x:1 +温故知新 1 +x:1 +边民证 1 +x:1 +电灯泡 1 +x:1 +顺遂 1 +x:1 +吴旗县 1 +x:1 +心腹大患 1 +x:1 +奈曼旗 1 +x:1 +自成一体 1 +x:1 +黄叶 1 +x:1 +顺道 1 +x:1 +奋不顾身 1 +x:1 +黄历 1 +x:1 +藏学 1 +x:1 +针灸学会 1 +x:1 +妙趣横溢 1 +x:1 +沉甸甸 1 +x:1 +藻 4 +x:4 +彪形 1 +x:1 +大辛阁区 1 +x:1 +连阴雨 1 +x:1 +传销员 1 +x:1 +假想 1 +x:1 +破伤风 1 +x:1 +可消化性 1 +x:1 +凝炼 1 +x:1 +颠簸车 1 +x:1 +黄县 1 +x:1 +一展身手 1 +x:1 +刘公岛 1 +x:1 +拉孜县 1 +x:1 +晚年 1 +x:1 +研习班 1 +x:1 +血丝虫病 1 +x:1 +贮藏 1 +x:1 +千伏 1 +x:1 +渗透战 1 +x:1 +围绕 1 +x:1 +无梭 1 +x:1 +上网费 1 +x:1 +梆子腔 1 +x:1 +疏导 1 +x:1 +美丽 1 +x:1 +胆识 1 +x:1 +全反射 1 +x:1 +旬阳县 1 +x:1 +花廊 1 +x:1 +矛盾体 1 +x:1 +资产率 1 +x:1 +干道路 1 +x:1 +制度 1 +x:1 +音长 1 +x:1 +索绕 1 +x:1 +疏密 1 +x:1 +开户行 1 +x:1 +围绳 1 +x:1 +改革家 1 +x:1 +掠取 1 +x:1 +美丑 1 +x:1 +热线 1 +x:1 +美专 1 +x:1 +初中级 1 +x:1 +无棣 1 +x:1 +柜角 1 +x:1 +花店 1 +x:1 +千手堂 1 +x:1 +畴昔 1 +x:1 +教8飞机 1 +x:1 +过江之鲫 1 +x:1 +爬山虎 1 +x:1 +不知进退 1 +x:1 +利马 1 +x:1 +年月 1 +x:1 +镍都 1 +x:1 +热络 1 +x:1 +亡国 1 +x:1 +个股 1 +x:1 +花序 1 +x:1 +红十字 1 +x:1 +桦 34 +x:34 +齐抓共管 1 +x:1 +但愿 1 +x:1 +桃花汛 1 +x:1 +进口国 1 +x:1 +天涯地角 1 +x:1 +年末 1 +x:1 +播讲 1 +x:1 +话茬 1 +x:1 +离职 1 +x:1 +翠屏峰 1 +x:1 +听风是雨 1 +x:1 +演绎法 1 +x:1 +阶级 1 +x:1 +互通式 1 +x:1 +虾米 1 +x:1 +熙攘 1 +x:1 +美人 1 +x:1 +东京湾 1 +x:1 +五不准 1 +x:1 +舞艺 1 +x:1 +一定 1 +x:1 +喘 18 +x:18 +无核 1 +x:1 +起手回春 1 +x:1 +美事 1 +x:1 +茅草街 1 +x:1 +藏娃 1 +x:1 +一家 1 +x:1 +尽量 1 +x:1 +校董事会 1 +x:1 +羊肉 1 +x:1 +桐油 1 +x:1 +东京港 1 +x:1 +茶苗 1 +x:1 +不瞒你说 1 +x:1 +花布 1 +x:1 +花市 1 +x:1 +喜滋滋 1 +x:1 +恰如其当 1 +x:1 +李圪塔乡 1 +x:1 +龟裂 1 +x:1 +晚归 1 +x:1 +肉搏战 1 +x:1 +邮票 1 +x:1 +登陆艇 1 +x:1 +切尔米斯 1 +x:1 +檐口 1 +x:1 +统购统销 1 +x:1 +调研 1 +x:1 +躲避 1 +x:1 +召 9 +x:9 +缺血性 1 +x:1 +花带 1 +x:1 +石刀山 1 +x:1 +书写纸 1 +x:1 +一对 1 +x:1 +花席 1 +x:1 +翠屏山 1 +x:1 +勤工俭学 1 +x:1 +国内化 1 +x:1 +三法 1 +x:1 +崖城 1 +x:1 +一早 1 +x:1 +计划局 1 +x:1 +视听产品 1 +x:1 +小花袄 1 +x:1 +黄蒿梁 1 +x:1 +赞助者 1 +x:1 +熙暖 1 +x:1 +双十二 1 +x:1 +夕烟 1 +x:1 +口信儿 1 +x:1 +探求 1 +x:1 +云雀 1 +x:1 +作派 1 +x:1 +公私章 1 +x:1 +不减当年 1 +x:1 +花工 1 +x:1 +蔗糖 1 +x:1 +进步性 1 +x:1 +黯然 1 +x:1 +阴有小雨 1 +x:1 +转行 1 +x:1 +潜质 1 +x:1 +征丁 1 +x:1 +景从 1 +x:1 +解释器 1 +x:1 +要约 1 +x:1 +展看 1 +x:1 +见不得人 1 +x:1 +饲养场主 1 +x:1 +皇军 1 +x:1 +假托 1 +x:1 +茶色 1 +x:1 +面试 1 +x:1 +福州市 1 +x:1 +长城湾 1 +x:1 +茶艺 1 +x:1 +阴云 1 +x:1 +假手 1 +x:1 +东环路 1 +x:1 +排联 1 +x:1 +捷足先登 1 +x:1 +⑤ 10 +x:10 +三沿 1 +x:1 +抽样调查 1 +x:1 +不实之词 1 +x:1 +三河 1 +x:1 +浪 102 +x:102 +式调 1 +x:1 +一阵风 1 +x:1 +无毒 1 +x:1 +避风 1 +x:1 +几近 1 +x:1 +宁河 1 +x:1 +无比 1 +x:1 +皇冠 1 +x:1 +假扮 1 +x:1 +作浪 1 +x:1 +絮状 1 +x:1 +景仰 1 +x:1 +素有 1 +x:1 +三江 1 +x:1 +一水 1 +x:1 +柞蚕 1 +x:1 +缴税 1 +x:1 +茶花 1 +x:1 +谰言 1 +x:1 +密不可分 1 +x:1 +助耕队 1 +x:1 +无欺 1 +x:1 +试产 1 +x:1 +素服 1 +x:1 +南长山镇 1 +x:1 +人物 1 +x:1 +促生产 1 +x:1 +木偶戏 1 +x:1 +生产关系 1 +x:1 +农业局 1 +x:1 +命官 1 +x:1 +繁芜 1 +x:1 +反应器 1 +x:1 +墙头草 1 +x:1 +优等品 1 +x:1 +律师费 1 +x:1 +过街通道 1 +x:1 +学年 1 +x:1 +黄冈 1 +x:1 +茼山镇 1 +x:1 +披毛犀 1 +x:1 +大悲大喜 1 +x:1 +诸强 1 +x:1 +度度 1 +x:1 +泥螺 1 +x:1 +疏堵 1 +x:1 +停泊 1 +x:1 +繁荣 1 +x:1 +帝都 1 +x:1 +滨 30 +x:30 +畦塄 1 +x:1 +筷子 1 +x:1 +有愧 1 +x:1 +牵制 1 +x:1 +万家寨 1 +x:1 +文物性 1 +x:1 +无以 1 +x:1 +毛边纸 1 +x:1 +制约力 1 +x:1 +猫子哥 1 +x:1 +窃取 1 +x:1 +暖情 1 +x:1 +学徒 1 +x:1 +禁毒委 1 +x:1 +一大 1 +x:1 +禁不住 1 +x:1 +蓄积量 1 +x:1 +探测 1 +x:1 +繁花 1 +x:1 +地脚 1 +x:1 +一头 1 +x:1 +绳锯木断 1 +x:1 +邮箱 1 +x:1 +尖嘴薄舌 1 +x:1 +展馆 1 +x:1 +桫椤树 1 +x:1 +支柱 1 +x:1 +新民市 1 +x:1 +婺剧 1 +x:1 +赌客 1 +x:1 +花岛 1 +x:1 +费神 1 +x:1 +弄权 1 +x:1 +有悖 1 +x:1 +三消 1 +x:1 +茶荷 1 +x:1 +繁苛 1 +x:1 +渗透性 1 +x:1 +回收站 1 +x:1 +密不通风 1 +x:1 +丘陵岗 1 +x:1 +连环画 1 +x:1 +占先 1 +x:1 +满分 1 +x:1 +民事权利 1 +x:1 +酬 11 +x:11 +乘除 1 +x:1 +三生有幸 1 +x:1 +一骨碌 1 +x:1 +支架 1 +x:1 +含英咀华 1 +x:1 +乾 14 +x:14 +一如 1 +x:1 +指挥科 1 +x:1 +疾阻 1 +x:1 +花展 1 +x:1 +风儿 1 +x:1 +规范性 1 +x:1 +秋水 1 +x:1 +衰滞 1 +x:1 +听阈 1 +x:1 +乘隙 1 +x:1 +社会工作 1 +x:1 +三流 1 +x:1 +夕照 1 +x:1 +德清县 1 +x:1 +张冠李戴 1 +x:1 +温 373 +x:373 +有恩 1 +x:1 +东南亚虎 1 +x:1 +有息 1 +x:1 +木字旁儿 1 +x:1 +心肌炎 1 +x:1 +作法 1 +x:1 +苗圃 1 +x:1 +菱湖 1 +x:1 +森林队 1 +x:1 +条贯 1 +x:1 +半推半就 1 +x:1 +人鱼 1 +x:1 +真诚以待 1 +x:1 +球部 1 +x:1 +邮筒 1 +x:1 +铝粉 1 +x:1 +疏失 1 +x:1 +双十佳 1 +x:1 +异步 1 +x:1 +单精度 1 +x:1 +征伐 1 +x:1 +文明人 1 +x:1 +灭 65 +x:65 +油渍 1 +x:1 +有怨 1 +x:1 +巴 926 +x:926 +都行 1 +x:1 +收贷率 1 +x:1 +有性 1 +x:1 +一市 1 +x:1 +排水 1 +x:1 +飞檐翘角 1 +x:1 +送检 1 +x:1 +破马张飞 1 +x:1 +花石乡 1 +x:1 +皇城 1 +x:1 +司法部 1 +x:1 +灌馅麻糖 1 +x:1 +鱼味 1 +x:1 +腮部 1 +x:1 +融资 1 +x:1 +小组会 1 +x:1 +一带 1 +x:1 +珍稀 1 +x:1 +银发 1 +x:1 +总览 1 +x:1 +唐古拉山 1 +x:1 +眼窝 1 +x:1 +狂想曲 1 +x:1 +广东戏 1 +x:1 +叫卖声 1 +x:1 +神道碑 1 +x:1 +信息业 1 +x:1 +风雪帽 1 +x:1 +联赛史 1 +x:1 +厚谊 1 +x:1 +加盟费 1 +x:1 +刘家桥村 1 +x:1 +拍片 1 +x:1 +年成 1 +x:1 +黄土 1 +x:1 +皖维 1 +x:1 +招待 1 +x:1 +微弱 1 +x:1 +孝感市 1 +x:1 +产奶量 1 +x:1 +学士 1 +x:1 +开户费 1 +x:1 +二工乡 1 +x:1 +预热 1 +x:1 +云月湖 1 +x:1 +去年末 1 +x:1 +巴彦浩特 1 +x:1 +租期 1 +x:1 +洗雪 1 +x:1 +察右旗 1 +x:1 +一干 1 +x:1 +红景天 1 +x:1 +卡萨芒斯 1 +x:1 +砀山 1 +x:1 +一并 1 +x:1 +花室 1 +x:1 +躲闪 1 +x:1 +大藏相 1 +x:1 +同志会 1 +x:1 +淳厚 1 +x:1 +水调歌头 1 +x:1 +招录 1 +x:1 +屯扎 1 +x:1 +氧分子 1 +x:1 +黄埃 1 +x:1 +个人所 1 +x:1 +禾本科 1 +x:1 +马尾松 1 +x:1 +一应 1 +x:1 +指挥组 1 +x:1 +黄埔 1 +x:1 +缝 45 +x:45 +疏干 1 +x:1 +滑梯 1 +x:1 +藏式 1 +x:1 +磷酸铵 1 +x:1 +颜色 1 +x:1 +影印本 1 +x:1 +赌局 1 +x:1 +难上加难 1 +x:1 +户口区 1 +x:1 +龟足 1 +x:1 +稳压器 1 +x:1 +受灾区 1 +x:1 +花季 1 +x:1 +航天员 1 +x:1 +餐厅 1 +x:1 +士人 1 +x:1 +有望 1 +x:1 +小书贩 1 +x:1 +有期 1 +x:1 +中华龟 1 +x:1 +承重墙 1 +x:1 +嬉皮士 1 +x:1 +磷酸钙 1 +x:1 +新品 1 +x:1 +入口处 1 +x:1 +生活报 1 +x:1 +晚婚 1 +x:1 +排雷员 1 +x:1 +山桐子 1 +x:1 +屹立 1 +x:1 +有机 1 +x:1 +进门费 1 +x:1 +占领军 1 +x:1 +疏布 1 +x:1 +延吉路 1 +x:1 +户口卡 1 +x:1 +织补 1 +x:1 +年利息 1 +x:1 +文侩 1 +x:1 +有术 1 +x:1 +一建 1 +x:1 +平地风波 1 +x:1 +皇储 1 +x:1 +人骨 1 +x:1 +供不应求 1 +x:1 +镍钢 1 +x:1 +餐券 1 +x:1 +生存率 1 +x:1 +茶渍 1 +x:1 +疏忽 1 +x:1 +文体 1 +x:1 +敢作敢为 1 +x:1 +笑逐颜开 1 +x:1 +长跑赛 1 +x:1 +无沿 1 +x:1 +谢里夫派 1 +x:1 +精料 1 +x:1 +恰恰 1 +x:1 +苍东村 1 +x:1 +后富户 1 +x:1 +澧 1 +x:1 +门牌号 1 +x:1 +放冷风 1 +x:1 +晚宴 1 +x:1 +重振旗鼓 1 +x:1 +油茶 1 +x:1 +隔墙有耳 1 +x:1 +停歇 1 +x:1 +单克隆 1 +x:1 +求真 1 +x:1 +进步权 1 +x:1 +茶蕾 1 +x:1 +观其行 1 +x:1 +真情难觅 1 +x:1 +学委 1 +x:1 +栏栅 1 +x:1 +狮豹头 1 +x:1 +亲切 1 +x:1 +停止 1 +x:1 +效益型 1 +x:1 +无法 1 +x:1 +口令声 1 +x:1 +添 153 +x:153 +砼面板 1 +x:1 +盖州市 1 +x:1 +返光镜 1 +x:1 +南苑乡 1 +x:1 +一律 1 +x:1 +发动者 1 +x:1 +光绪帝 1 +x:1 +亡魂丧胆 1 +x:1 +总数 1 +x:1 +求援者 1 +x:1 +玫瑰红 1 +x:1 +长阳县 1 +x:1 +打秋风 1 +x:1 +集团式 1 +x:1 +罗裙 1 +x:1 +搡 5 +x:5 +求知 1 +x:1 +泥胎 1 +x:1 +硬水 1 +x:1 +汉口 1 +x:1 +小高陵村 1 +x:1 +山楂果 1 +x:1 +莫力达瓦 1 +x:1 +乐平市 1 +x:1 +甲吾拉 1 +x:1 +腥味 1 +x:1 +库尔勒市 1 +x:1 +无氟 1 +x:1 +琢磨不透 1 +x:1 +人马 1 +x:1 +泼水节 1 +x:1 +刮风 1 +x:1 +泥肥 1 +x:1 +简述 1 +x:1 +野生 1 +x:1 +学好 1 +x:1 +淮海区 1 +x:1 +路口处 1 +x:1 +高素质 1 +x:1 +接访日 1 +x:1 +踢皮球 1 +x:1 +生日卡 1 +x:1 +牛羊肉 1 +x:1 +瓶装 1 +x:1 +葡 127 +x:127 +潇潇 1 +x:1 +匡世济民 1 +x:1 +枯墨 1 +x:1 +溢流坝 1 +x:1 +疏开 1 +x:1 +假日 1 +x:1 +计划室 1 +x:1 +税契 1 +x:1 +排污 1 +x:1 +制约型 1 +x:1 +连锁业 1 +x:1 +朝奉郎 1 +x:1 +一小 1 +x:1 +铝合金 1 +x:1 +慢车道 1 +x:1 +康乐城 1 +x:1 +户口册 1 +x:1 +找还 1 +x:1 +头等功 1 +x:1 +有旱 1 +x:1 +天下人 1 +x:1 +芽苞 1 +x:1 +枯季 1 +x:1 +缴纳 1 +x:1 +有时 1 +x:1 +年息 1 +x:1 +洗钱 1 +x:1 +用米 1 +x:1 +私家车 1 +x:1 +曲别针 1 +x:1 +借水行舟 1 +x:1 +牵动 1 +x:1 +就餐 1 +x:1 +声频 1 +x:1 +餐具 1 +x:1 +喜获 1 +x:1 +运行图 1 +x:1 +定活两便 1 +x:1 +占领区 1 +x:1 +作文簿 1 +x:1 +姹紫嫣红 1 +x:1 +乐 231 +x:231 +糊状物 1 +x:1 +一展 1 +x:1 +大使馆 1 +x:1 +古竹乡 1 +x:1 +有方 1 +x:1 +桃花源 1 +x:1 +穿针引线 1 +x:1 +皮带轮 1 +x:1 +支护 1 +x:1 +泥范 1 +x:1 +股东 1 +x:1 +选材 1 +x:1 +鹰 26 +x:26 +原模原样 1 +x:1 +亚欧 1 +x:1 +宫殿式 1 +x:1 +但是 1 +x:1 +霁 6 +x:6 +赤心报国 1 +x:1 +老宋体 1 +x:1 +枯寂 1 +x:1 +儿童组 1 +x:1 +亚热区 1 +x:1 +未遭 1 +x:1 +投资部 1 +x:1 +醚 1 +x:1 +总领馆 1 +x:1 +鼓吹者 1 +x:1 +指挥系 1 +x:1 +有数 1 +x:1 +傻话 1 +x:1 +十七孔桥 1 +x:1 +相聚 1 +x:1 +爱尔福特 1 +x:1 +向日葵 1 +x:1 +精明 1 +x:1 +公干 1 +x:1 +诸子 1 +x:1 +暗器 1 +x:1 +三桥 1 +x:1 +桃仁 1 +x:1 +未遂 1 +x:1 +装机量 1 +x:1 +人饮 1 +x:1 +送者 1 +x:1 +久仰大名 1 +x:1 +奇谈怪论 1 +x:1 +童言无忌 1 +x:1 +丹方 1 +x:1 +集团层 1 +x:1 +飞行体 1 +x:1 +示范带头 1 +x:1 +裔 2 +x:2 +游艺场 1 +x:1 +构筑 1 +x:1 +寻欢作乐 1 +x:1 +腥 1 +x:1 +花头 1 +x:1 +个人性 1 +x:1 +病秧子 1 +x:1 +羞涩 1 +x:1 +扬花 1 +x:1 +甲壳动物 1 +x:1 +塔西河 1 +x:1 +大陆坡 1 +x:1 +孽生 1 +x:1 +课 200 +x:200 +运行率 1 +x:1 +采伐量 1 +x:1 +学家 1 +x:1 +假期 1 +x:1 +珍珠业 1 +x:1 +回弹性 1 +x:1 +税容 1 +x:1 +无火焰 1 +x:1 +视图 1 +x:1 +侗民 1 +x:1 +画卷 1 +x:1 +鸡口牛后 1 +x:1 +承包户 1 +x:1 +医卫体 1 +x:1 +迎薰亭 1 +x:1 +叶子 1 +x:1 +葬入 1 +x:1 +拐卖 1 +x:1 +条规 1 +x:1 +亡命 1 +x:1 +胶板纸 1 +x:1 +冯 448 +x:448 +税官 1 +x:1 +变速箱 1 +x:1 +捆绑 1 +x:1 +眼福 1 +x:1 +支援 1 +x:1 +洼 4 +x:4 +马埂村 1 +x:1 +辽宁省 1 +x:1 +纺织机 1 +x:1 +枣庄市 1 +x:1 +警绩 1 +x:1 +花墙 1 +x:1 +抛光片 1 +x:1 +夫唱妇随 1 +x:1 +林田村 1 +x:1 +左臂 1 +x:1 +计划处 1 +x:1 +潜血 1 +x:1 +过路人 1 +x:1 +求生 1 +x:1 +海洋法 1 +x:1 +交错带 1 +x:1 +作案 1 +x:1 +次区域级 1 +x:1 +练习题 1 +x:1 +贸洽会 1 +x:1 +司法部长 1 +x:1 +石炭酸 1 +x:1 +五规范 1 +x:1 +天香国色 1 +x:1 +凝眸 1 +x:1 +生活感 1 +x:1 +凝眺 1 +x:1 +游艺厅 1 +x:1 +蹩 1 +x:1 +记要 1 +x:1 +赌徒 1 +x:1 +假条 1 +x:1 +一朝一夕 1 +x:1 +荣誉室 1 +x:1 +山羊肉 1 +x:1 +白鳞鱼 1 +x:1 +战俘营 1 +x:1 +崇 13 +x:13 +假果 1 +x:1 +地板砖 1 +x:1 +债务国 1 +x:1 +游艺卡 1 +x:1 +稳慎 1 +x:1 +珍禽 1 +x:1 +扬菜 1 +x:1 +疤瘌眼儿 1 +x:1 +嘛 70 +x:70 +双职工 1 +x:1 +豌豆黄 1 +x:1 +科技园区 1 +x:1 +参照 1 +x:1 +秋月当空 1 +x:1 +便宴 1 +x:1 +富翁 1 +x:1 +雨鞋 1 +x:1 +映入 1 +x:1 +图书日 1 +x:1 +响器 1 +x:1 +金庄村 1 +x:1 +租赁者 1 +x:1 +童装组 1 +x:1 +脱粒机 1 +x:1 +投资量 1 +x:1 +对称性 1 +x:1 +夏历 1 +x:1 +日出而作 1 +x:1 +芽茶 1 +x:1 +手榴弹 1 +x:1 +支持 1 +x:1 +鹰队 1 +x:1 +增长区 1 +x:1 +拳种 1 +x:1 +皇后 1 +x:1 +学子 1 +x:1 +清波微澜 1 +x:1 +眼神 1 +x:1 +山羊胡 1 +x:1 +生长量 1 +x:1 +强奸罪 1 +x:1 +轨范 1 +x:1 +随笔集 1 +x:1 +司法部门 1 +x:1 +挤奶房 1 +x:1 +皮毛 1 +x:1 +崖刻 1 +x:1 +苗区 1 +x:1 +国内外 1 +x:1 +农业园 1 +x:1 +一切 1 +x:1 +魏茨 1 +x:1 +有毒 1 +x:1 +引河 1 +x:1 +接收者 1 +x:1 +农业国 1 +x:1 +旺苍县 1 +x:1 +眼皮 1 +x:1 +参统 1 +x:1 +无憾 1 +x:1 +花城 1 +x:1 +顺风 1 +x:1 +歙砚 1 +x:1 +藏历 1 +x:1 +意具神足 1 +x:1 +假根 1 +x:1 +藏原 1 +x:1 +生存线 1 +x:1 +张嘴 1 +x:1 +熙和恬静 1 +x:1 +一刻 1 +x:1 +兴化市 1 +x:1 +救济款 1 +x:1 +投保者 1 +x:1 +程序名 1 +x:1 +深过冷 1 +x:1 +呈 283 +x:283 +无名英雄 1 +x:1 +声障 1 +x:1 +赎 4 +x:4 +北黑石村 1 +x:1 +必要条件 1 +x:1 +哄吵声 1 +x:1 +饮食起居 1 +x:1 +花型 1 +x:1 +无纸化 1 +x:1 +假案 1 +x:1 +皇家 1 +x:1 +止 114 +x:114 +干着急 1 +x:1 +过来人 1 +x:1 +探明 1 +x:1 +词义 1 +x:1 +涉水 1 +x:1 +禁毒办 1 +x:1 +作登乡 1 +x:1 +意图 1 +x:1 +皇室 1 +x:1 +扶优扶强 1 +x:1 +无所不为 1 +x:1 +皇宫 1 +x:1 +爆发音 1 +x:1 +欺侮 1 +x:1 +甘怡 1 +x:1 +无愧 1 +x:1 +皇子 1 +x:1 +响箭 1 +x:1 +互聘 1 +x:1 +花坛 1 +x:1 +寨头 1 +x:1 +藏匿 1 +x:1 +三晋 1 +x:1 +轴重 1 +x:1 +藏医 1 +x:1 +藏区 1 +x:1 +顺顺 1 +x:1 +崇礼乡 1 +x:1 +一力 1 +x:1 +围着 1 +x:1 +词人 1 +x:1 +昏定晨省 1 +x:1 +订 127 +x:127 +税名 1 +x:1 +税后 1 +x:1 +王者师 1 +x:1 +铝矿 1 +x:1 +托莱多 1 +x:1 +芽豆 1 +x:1 +黄寺 1 +x:1 +活字印刷 1 +x:1 +藏北 1 +x:1 +鑫光 1 +x:1 +年满 1 +x:1 +词令 1 +x:1 +蜗居 1 +x:1 +片 920 +x:920 +杂志社 1 +x:1 +腐朽 1 +x:1 +花圃 1 +x:1 +阶石 1 +x:1 +痛苦期 1 +x:1 +灼亮 1 +x:1 +花圈 1 +x:1 +抛物 1 +x:1 +藏印 1 +x:1 +入伍 1 +x:1 +入伏 1 +x:1 +摊点 1 +x:1 +学员 1 +x:1 +花场 1 +x:1 +金寨县 1 +x:1 +转轮 1 +x:1 +硼肥 1 +x:1 +入伙 1 +x:1 +入会 1 +x:1 +藏南 1 +x:1 +多角亭 1 +x:1 +存而不论 1 +x:1 +三昧 1 +x:1 +沿着 1 +x:1 +葡萄酒业 1 +x:1 +围盘 1 +x:1 +凝神 1 +x:1 +招募 1 +x:1 +戒 58 +x:58 +算 509 +x:509 +高 6253 +x:6253 +送还 1 +x:1 +中道 1 +x:1 +声音 1 +x:1 +声韵 1 +x:1 +鲜明性 1 +x:1 +停机 1 +x:1 +花团 1 +x:1 +相连 1 +x:1 +单季 1 +x:1 +无悔 1 +x:1 +桌灯 1 +x:1 +入仕 1 +x:1 +切断 1 +x:1 +欺世 1 +x:1 +律管司 1 +x:1 +花园 1 +x:1 +民心亭 1 +x:1 +一半 1 +x:1 +下雪天 1 +x:1 +俱佳 1 +x:1 +獭兔 1 +x:1 +灼伤 1 +x:1 +张贴物 1 +x:1 +峙 21 +x:21 +傻傻的 1 +x:1 +孕妇 1 +x:1 +开户者 1 +x:1 +电离 1 +x:1 +无情 1 +x:1 +克音河乡 1 +x:1 +若果 1 +x:1 +大会计 1 +x:1 +富民路 1 +x:1 +斑茅 1 +x:1 +加盟者 1 +x:1 +武周山 1 +x:1 +粗放式 1 +x:1 +探望 1 +x:1 +眼眶 1 +x:1 +探查 1 +x:1 +涅像 1 +x:1 +眼眵 1 +x:1 +集团化 1 +x:1 +海洋戏 1 +x:1 +话话 1 +x:1 +编辑奖 1 +x:1 +不甘落后 1 +x:1 +区党委 1 +x:1 +每逢 1 +x:1 +伏 36 +x:36 +高人一等 1 +x:1 +赌具 1 +x:1 +笺纸 1 +x:1 +人阵 1 +x:1 +篮 8 +x:8 +人防 1 +x:1 +豫东 1 +x:1 +话说 1 +x:1 +心头肉 1 +x:1 +招徕 1 +x:1 +三板 1 +x:1 +北郎中村 1 +x:1 +环保业 1 +x:1 +遮阳棚 1 +x:1 +藏刀 1 +x:1 +晚场 1 +x:1 +话语 1 +x:1 +王舍人镇 1 +x:1 +溺 1 +x:1 +眼看 1 +x:1 +大多数 1 +x:1 +高人一筹 1 +x:1 +小河坝村 1 +x:1 +白衣天使 1 +x:1 +灯泡厂 1 +x:1 +三期 1 +x:1 +海洋所 1 +x:1 +繁衍 1 +x:1 +无息 1 +x:1 +大脚洞 1 +x:1 +三月 1 +x:1 +龟背 1 +x:1 +入主 1 +x:1 +真空管 1 +x:1 +旷课 1 +x:1 +计划型 1 +x:1 +天亮 1 +x:1 +薪酬 1 +x:1 +三机 1 +x:1 +专科生 1 +x:1 +高雄市 1 +x:1 +眼睑 1 +x:1 +人际 1 +x:1 +不挑不拣 1 +x:1 +小麦量 1 +x:1 +费率 1 +x:1 +支派 1 +x:1 +阴柔之美 1 +x:1 +摄入量 1 +x:1 +刊误表 1 +x:1 +无恙 1 +x:1 +楚庄乡 1 +x:1 +入出境 1 +x:1 +回收率 1 +x:1 +前程锦绣 1 +x:1 +皇姑 1 +x:1 +计划员 1 +x:1 +孤注一掷 1 +x:1 +漫天风雪 1 +x:1 +小界岭 1 +x:1 +摊牌 1 +x:1 +醒狮 1 +x:1 +正比 1 +x:1 +后台老板 1 +x:1 +怏然 1 +x:1 +资本论 1 +x:1 +主机房 1 +x:1 +枯坐 1 +x:1 +苇丛 1 +x:1 +诸城 1 +x:1 +农业品 1 +x:1 +墙头诗 1 +x:1 +百废俱兴 1 +x:1 +强奸犯 1 +x:1 +造假 1 +x:1 +贝伦 1 +x:1 +边 636 +x:636 +继从 1 +x:1 +五个好 1 +x:1 +品格 1 +x:1 +热病 1 +x:1 +严要求 1 +x:1 +热症 1 +x:1 +知识青年 1 +x:1 +苗床 1 +x:1 +阵子 1 +x:1 +辱骂 1 +x:1 +马拉松赛 1 +x:1 +无援 1 +x:1 +羞意 1 +x:1 +人间 1 +x:1 +秋叶原 1 +x:1 +粮仓 1 +x:1 +凝 9 +x:9 +学园 1 +x:1 +前款罪 1 +x:1 +山盖沟村 1 +x:1 +南平镇 1 +x:1 +中到大雪 1 +x:1 +上集乡 1 +x:1 +龙狮 1 +x:1 +唇吻 1 +x:1 +以民为本 1 +x:1 +作者 1 +x:1 +西西里路 1 +x:1 +排行 1 +x:1 +过问 1 +x:1 +桃花村 1 +x:1 +故障率 1 +x:1 +粮价 1 +x:1 +寻梦者 1 +x:1 +作家卷 1 +x:1 +过错 1 +x:1 +作料 1 +x:1 +国有股 1 +x:1 +黄姜 1 +x:1 +外行人 1 +x:1 +绿化志 1 +x:1 +肿瘤科 1 +x:1 +寓公 1 +x:1 +哥萨克人 1 +x:1 +潜滋暗长 1 +x:1 +咕哩村 1 +x:1 +健身车 1 +x:1 +薪 25 +x:25 +热电 1 +x:1 +栏柜 1 +x:1 +眼球 1 +x:1 +修修补补 1 +x:1 +教体委 1 +x:1 +继之 1 +x:1 +气势恢宏 1 +x:1 +五雷轰顶 1 +x:1 +郭镇 1 +x:1 +长跑节 1 +x:1 +反过来 1 +x:1 +异才 1 +x:1 +餐巾 1 +x:1 +烤面包片 1 +x:1 +俎 1 +x:1 +柬帖 1 +x:1 +泰山 1 +x:1 +潜藏 1 +x:1 +暴病 1 +x:1 +瞎眼树 1 +x:1 +相谈 1 +x:1 +技术学校 1 +x:1 +漏光 1 +x:1 +寨子 1 +x:1 +精辟 1 +x:1 +招儿 1 +x:1 +漂浮物 1 +x:1 +支渠 1 +x:1 +遵从 1 +x:1 +锥体 1 +x:1 +鸡毛蒜皮 1 +x:1 +另眼相待 1 +x:1 +用粮 1 +x:1 +印有 1 +x:1 +赤铁矿 1 +x:1 +无损 1 +x:1 +图画课 1 +x:1 +起重船 1 +x:1 +羊肠线 1 +x:1 +花子 1 +x:1 +集团军 1 +x:1 +窃密 1 +x:1 +残疾金 1 +x:1 +哄吓 1 +x:1 +导流明渠 1 +x:1 +千伏安 1 +x:1 +优选 1 +x:1 +尚 641 +x:641 +修理铺 1 +x:1 +疟 1 +x:1 +沂水 1 +x:1 +两脚规 1 +x:1 +三旱 1 +x:1 +费工 1 +x:1 +丹桂 1 +x:1 +泥沼化 1 +x:1 +哄堂大笑 1 +x:1 +三时 1 +x:1 +扮相 1 +x:1 +密码式 1 +x:1 +相距 1 +x:1 +花哨 1 +x:1 +声门 1 +x:1 +三日 1 +x:1 +特邀函 1 +x:1 +一元 1 +x:1 +粘土 1 +x:1 +崇拜 1 +x:1 +宣传队 1 +x:1 +滑板 1 +x:1 +暌 1 +x:1 +翼城 1 +x:1 +税基 1 +x:1 +虾皮 1 +x:1 +生殖腺 1 +x:1 +拐弯 1 +x:1 +弄潮 1 +x:1 +精毛 1 +x:1 +绿化带 1 +x:1 +厚茧 1 +x:1 +眼病 1 +x:1 +滑杆 1 +x:1 +高蹈派 1 +x:1 +三教 1 +x:1 +柳林县 1 +x:1 +答辩状 1 +x:1 +亚热带 1 +x:1 +那口子 1 +x:1 +科技局 1 +x:1 +一再 1 +x:1 +秋庄稼 1 +x:1 +掐 12 +x:12 +助残椅 1 +x:1 +预编 1 +x:1 +蜂巢状 1 +x:1 +晚唐 1 +x:1 +逻辑推理 1 +x:1 +眼用 1 +x:1 +轿子山镇 1 +x:1 +戏说 1 +x:1 +蔚然兴起 1 +x:1 +舌炎 1 +x:1 +罗布淖尔 1 +x:1 +黄壤 1 +x:1 +小花脸 1 +x:1 +花呢 1 +x:1 +羞惭 1 +x:1 +访华团 1 +x:1 +继位 1 +x:1 +赌博 1 +x:1 +九华山 1 +x:1 +风吹日晒 1 +x:1 +禁用品 1 +x:1 +一准 1 +x:1 +龟苗 1 +x:1 +蓝点鲅 1 +x:1 +戏词 1 +x:1 +风俗画 1 +x:1 +活鸡 1 +x:1 +抚今忆昔 1 +x:1 +排解 1 +x:1 +掠夺 1 +x:1 +一度 1 +x:1 +潇湘 1 +x:1 +芭蕉叶 1 +x:1 +三改 1 +x:1 +送货 1 +x:1 +受精法 1 +x:1 +共产党人 1 +x:1 +子星 1 +x:1 +勾肩搭背 1 +x:1 +业主 1 +x:1 +眼界 1 +x:1 +卧蚕眉 1 +x:1 +避难 1 +x:1 +引以自豪 1 +x:1 +丝丝 1 +x:1 +穷光蛋 1 +x:1 +出神入化 1 +x:1 +停战 1 +x:1 +任其自然 1 +x:1 +涉案 1 +x:1 +天从人愿 1 +x:1 +察觉 1 +x:1 +健翔桥 1 +x:1 +旧县镇 1 +x:1 +无方 1 +x:1 +花台 1 +x:1 +轻舟 1 +x:1 +类义词 1 +x:1 +花叶 1 +x:1 +面相 1 +x:1 +岫 2 +x:2 +学堂 1 +x:1 +甲种粒子 1 +x:1 +商埠 1 +x:1 +修理点 1 +x:1 +度假 1 +x:1 +核 250 +x:250 +蒸气 1 +x:1 +车门 1 +x:1 +腮颊 1 +x:1 +绿化处 1 +x:1 +无日 1 +x:1 +珍物 1 +x:1 +戕害 1 +x:1 +氧分压 1 +x:1 +封建把头 1 +x:1 +无时 1 +x:1 +学僧 1 +x:1 +被减数 1 +x:1 +每间 1 +x:1 +停手 1 +x:1 +集体股 1 +x:1 +见面 1 +x:1 +鬼门关 1 +x:1 +回顾 1 +x:1 +剧毒级 1 +x:1 +文学革命 1 +x:1 +储电量 1 +x:1 +探戈 1 +x:1 +弱冷空气 1 +x:1 +花县 1 +x:1 +洋洋自得 1 +x:1 +赌咒 1 +x:1 +寄主 1 +x:1 +三言两语 1 +x:1 +无可辩驳 1 +x:1 +轻金属 1 +x:1 +拿 1240 +x:1240 +唯我主义 1 +x:1 +堃 1 +x:1 +双林队 1 +x:1 +气度不凡 1 +x:1 +灰心丧气 1 +x:1 +建华路 1 +x:1 +作比 1 +x:1 +反应塔 1 +x:1 +谷贱伤农 1 +x:1 +三手 1 +x:1 +鲜红色 1 +x:1 +非结晶 1 +x:1 +绿化委 1 +x:1 +花卉 1 +x:1 +星号 1 +x:1 +冰球赛 1 +x:1 +规模性 1 +x:1 +夜景 1 +x:1 +花卷 1 +x:1 +发放量 1 +x:1 +精气 1 +x:1 +无尽无休 1 +x:1 +守土有责 1 +x:1 +罗致 1 +x:1 +特尼河 1 +x:1 +国难日 1 +x:1 +型焦 1 +x:1 +寄予 1 +x:1 +海洋权 1 +x:1 +个贷 1 +x:1 +丘陵区 1 +x:1 +抛砖引玉 1 +x:1 +围猎 1 +x:1 +无数 1 +x:1 +军舰 1 +x:1 +学塾 1 +x:1 +避险 1 +x:1 +药瓶 1 +x:1 +免征 1 +x:1 +名正言顺 1 +x:1 +非会员 1 +x:1 +反应堆 1 +x:1 +泠 6 +x:6 +不可思议 1 +x:1 +无故 1 +x:1 +无效 1 +x:1 +无敌 1 +x:1 +花匠 1 +x:1 +富港村 1 +x:1 +采煤工 1 +x:1 +银光 1 +x:1 +科学部 1 +x:1 +初见成效 1 +x:1 +公社化 1 +x:1 +电池厂 1 +x:1 +骄艳 1 +x:1 +崖壁 1 +x:1 +救济户 1 +x:1 +情景交融 1 +x:1 +作成 1 +x:1 +精液 1 +x:1 +作战 1 +x:1 +农业司 1 +x:1 +铝片 1 +x:1 +糊糊 1 +x:1 +集团型 1 +x:1 +巴格达 1 +x:1 +丢 142 +x:142 +相识 1 +x:1 +在先 1 +x:1 +黄广 1 +x:1 +支槽 1 +x:1 +雪挂 1 +x:1 +猴 7 +x:7 +自助式 1 +x:1 +命名 1 +x:1 +兴城市 1 +x:1 +大分子 1 +x:1 +电视部 1 +x:1 +藏园 1 +x:1 +鹂 3 +x:3 +火车头队 1 +x:1 +精深 1 +x:1 +异族 1 +x:1 +潜艇 1 +x:1 +热狗 1 +x:1 +黄帝 1 +x:1 +富甲 1 +x:1 +一块 1 +x:1 +羞明 1 +x:1 +篇什 1 +x:1 +检测点 1 +x:1 +言犹未尽 1 +x:1 +预科 1 +x:1 +任贤 1 +x:1 +糊精 1 +x:1 +茶资 1 +x:1 +片马丫口 1 +x:1 +窃听 1 +x:1 +农业厅 1 +x:1 +儿童画 1 +x:1 +畦埂 1 +x:1 +黄帽 1 +x:1 +制动器 1 +x:1 +疾风 1 +x:1 +藤壶 1 +x:1 +石首市 1 +x:1 +旻 3 +x:3 +花剑 1 +x:1 +内服 1 +x:1 +哪边 1 +x:1 +活页 1 +x:1 +一型 1 +x:1 +珍玩 1 +x:1 +张张 1 +x:1 +展露 1 +x:1 +拳王 1 +x:1 +易懂 1 +x:1 +掠影 1 +x:1 +患难 1 +x:1 +战备 1 +x:1 +连篇累牍 1 +x:1 +写经 1 +x:1 +科罗拉多 1 +x:1 +计划司 1 +x:1 +济柴 1 +x:1 +对攻战 1 +x:1 +虚惊 1 +x:1 +新德里市 1 +x:1 +急功近利 1 +x:1 +寄信 1 +x:1 +宣传部 1 +x:1 +苗女 1 +x:1 +闭门羹 1 +x:1 +盖然性 1 +x:1 +壁峰相连 1 +x:1 +邮电 1 +x:1 +稳步 1 +x:1 +攻打 1 +x:1 +学兵 1 +x:1 +普速 1 +x:1 +武威 1 +x:1 +厚薄 1 +x:1 +皇帝 1 +x:1 +学养 1 +x:1 +哓哓不休 1 +x:1 +空车费 1 +x:1 +步人后尘 1 +x:1 +农业区 1 +x:1 +捕渔业 1 +x:1 +游猎 1 +x:1 +徐都 1 +x:1 +矜 4 +x:4 +象 16 +x:16 +想到 1 +x:1 +年报 1 +x:1 +兴庆宫 1 +x:1 +育草 1 +x:1 +候工室 1 +x:1 +含磷量 1 +x:1 +公路费 1 +x:1 +滞拨 1 +x:1 +香蕉水 1 +x:1 +高枕而卧 1 +x:1 +接连不断 1 +x:1 +牵 78 +x:78 +效益化 1 +x:1 +桃花节 1 +x:1 +旷远 1 +x:1 +毛湖村 1 +x:1 +厉 45 +x:45 +税务 1 +x:1 +紧邻 1 +x:1 +一同 1 +x:1 +热熔 1 +x:1 +一向 1 +x:1 +承包款 1 +x:1 +迎头赶上 1 +x:1 +脸谱化 1 +x:1 +大鸣门桥 1 +x:1 +玉簪记 1 +x:1 +惹事 1 +x:1 +双江村 1 +x:1 +学力 1 +x:1 +砌有 1 +x:1 +访华 1 +x:1 +饿殍 1 +x:1 +声部 1 +x:1 +腾骧 1 +x:1 +见机而行 1 +x:1 +无果 1 +x:1 +电磨 1 +x:1 +生产大队 1 +x:1 +扬言 1 +x:1 +灼圃乡 1 +x:1 +随群 1 +x:1 +部件 1 +x:1 +花农 1 +x:1 +贺岁喜剧 1 +x:1 +奇冤 1 +x:1 +罐头瓶 1 +x:1 +过量 1 +x:1 +过重 1 +x:1 +眼热 1 +x:1 +羊饲养业 1 +x:1 +占居 1 +x:1 +海防区 1 +x:1 +占地 1 +x:1 +花冠 1 +x:1 +恍恍惚惚 1 +x:1 +和生行 1 +x:1 +新界乡 1 +x:1 +漆器业 1 +x:1 +停息 1 +x:1 +不切实际 1 +x:1 +见长 1 +x:1 +税利 1 +x:1 +凝结 1 +x:1 +沙蚕属 1 +x:1 +上台 1 +x:1 +紧逼 1 +x:1 +送行 1 +x:1 +神冈町 1 +x:1 +黄州 1 +x:1 +珲春市 1 +x:1 +爱岗争优 1 +x:1 +悔 16 +x:16 +凝练 1 +x:1 +蜂窝煤厂 1 +x:1 +无机 1 +x:1 +国统矿 1 +x:1 +浅井村 1 +x:1 +就里 1 +x:1 +年检 1 +x:1 +冶金 1 +x:1 +亚运史 1 +x:1 +棘刺 1 +x:1 +部下 1 +x:1 +浦东区 1 +x:1 +访友 1 +x:1 +学分 1 +x:1 +枯叶 1 +x:1 +学刊 1 +x:1 +无期 1 +x:1 +道歉不迭 1 +x:1 +一品 1 +x:1 +三思 1 +x:1 +侗族 1 +x:1 +兔肉 1 +x:1 +三怕 1 +x:1 +声速 1 +x:1 +东西南北 1 +x:1 +全译本 1 +x:1 +栓皮 1 +x:1 +简阳市 1 +x:1 +比下有余 1 +x:1 +集体舞 1 +x:1 +无权 1 +x:1 +平衡圈 1 +x:1 +税前 1 +x:1 +某 665 +x:665 +融融 1 +x:1 +鳇鱼 1 +x:1 +花儿 1 +x:1 +投资额 1 +x:1 +有洪 1 +x:1 +一元方程 1 +x:1 +邪门儿 1 +x:1 +献花者 1 +x:1 +厚今薄古 1 +x:1 +见闻 1 +x:1 +披发左衽 1 +x:1 +旅游界 1 +x:1 +三性 1 +x:1 +新民县 1 +x:1 +御林军 1 +x:1 +重点定位 1 +x:1 +正本清源 1 +x:1 +温得和克 1 +x:1 +直喷式 1 +x:1 +修理部 1 +x:1 +热炕 1 +x:1 +滞胀 1 +x:1 +胡家圩村 1 +x:1 +预算 1 +x:1 +三懂 1 +x:1 +奥斯威辛 1 +x:1 +屹然 1 +x:1 +罹下 1 +x:1 +无暇 1 +x:1 +眼熟 1 +x:1 +相见 1 +x:1 +旱伞 1 +x:1 +听骨 1 +x:1 +苗寨 1 +x:1 +孟加拉虎 1 +x:1 +转型期 1 +x:1 +常绿植物 1 +x:1 +丹江 1 +x:1 +四川队 1 +x:1 +热点 1 +x:1 +黄山 1 +x:1 +皇岗 1 +x:1 +费用 1 +x:1 +空穴来风 1 +x:1 +不入流 1 +x:1 +学号 1 +x:1 +智勇双全 1 +x:1 +解释学 1 +x:1 +热烈 1 +x:1 +游艺室 1 +x:1 +单耳旁儿 1 +x:1 +起点站 1 +x:1 +黄尘 1 +x:1 +种植业史 1 +x:1 +几何级数 1 +x:1 +原稿纸 1 +x:1 +程序化 1 +x:1 +作恶 1 +x:1 +栉风沐雨 1 +x:1 +长海县 1 +x:1 +子棉 1 +x:1 +蛋白石 1 +x:1 +醉眼 1 +x:1 +求索 1 +x:1 +雁过留声 1 +x:1 +话费 1 +x:1 +藏品 1 +x:1 +一统志 1 +x:1 +苗家 1 +x:1 +镣铐 1 +x:1 +麻竹坪 1 +x:1 +油脂厂 1 +x:1 +学友 1 +x:1 +专科率 1 +x:1 +宇宙飞船 1 +x:1 +基辅市 1 +x:1 +白马村 1 +x:1 +腐恶 1 +x:1 +兵事 1 +x:1 +唇 3 +x:3 +过速 1 +x:1 +大藏省 1 +x:1 +学区 1 +x:1 +人造 1 +x:1 +主力舰 1 +x:1 +亲如手足 1 +x:1 +耕 33 +x:33 +侦破组 1 +x:1 +苗子 1 +x:1 +富矿 1 +x:1 +单衣服 1 +x:1 +同形词 1 +x:1 +续期 1 +x:1 +部会 1 +x:1 +侠 15 +x:15 +部优 1 +x:1 +人选 1 +x:1 +误餐费 1 +x:1 +无期限 1 +x:1 +招呼 1 +x:1 +农业党 1 +x:1 +换机 1 +x:1 +瓦岗军 1 +x:1 +兴高彩烈 1 +x:1 +○ 34 +x:34 +过道 1 +x:1 +单纸张 1 +x:1 +蓝点颏 1 +x:1 +修订会 1 +x:1 +渗透法 1 +x:1 +税卡 1 +x:1 +老人院 1 +x:1 +子房 1 +x:1 +疾驶 1 +x:1 +准自传体 1 +x:1 +调嘴弄舌 1 +x:1 +黄岛 1 +x:1 +暴烈 1 +x:1 +名牌车 1 +x:1 +赌场 1 +x:1 +文物法 1 +x:1 +播放 1 +x:1 +边海防 1 +x:1 +三愿 1 +x:1 +黄岩 1 +x:1 +过火 1 +x:1 +潜能 1 +x:1 +铿锵有力 1 +x:1 +热火 1 +x:1 +硫化物 1 +x:1 +家长会 1 +x:1 +铲 36 +x:36 +姐妹饭 1 +x:1 +部位 1 +x:1 +瘸子 1 +x:1 +税单 1 +x:1 +有氧 1 +x:1 +人道 1 +x:1 +娴熟 1 +x:1 +作难 1 +x:1 +冠名者 1 +x:1 +结论书 1 +x:1 +钳子 1 +x:1 +达瓦卡 1 +x:1 +光泽度 1 +x:1 +励精图治 1 +x:1 +鸳鸯桥 1 +x:1 +类推 1 +x:1 +车船费 1 +x:1 +骧 1 +x:1 +噩运 1 +x:1 +京都市 1 +x:1 +非现金 1 +x:1 +法餐 1 +x:1 +紫金鱼袋 1 +x:1 +成分 1 +x:1 +马山 1 +x:1 +讲授团 1 +x:1 +人多嘴杂 1 +x:1 +秦栏 1 +x:1 +预习 1 +x:1 +捂 13 +x:13 +熊牛 1 +x:1 +准格尔旗 1 +x:1 +太平梯 1 +x:1 +微重力 1 +x:1 +交媾 1 +x:1 +雁塔 1 +x:1 +电脑房 1 +x:1 +有生以来 1 +x:1 +一瞥 1 +x:1 +背兜 1 +x:1 +整机 1 +x:1 +酿酒部 1 +x:1 +完全式 1 +x:1 +鸟音 1 +x:1 +夹层墙 1 +x:1 +蹈袭 1 +x:1 +马尾 1 +x:1 +罪过 1 +x:1 +本分 1 +x:1 +破土 1 +x:1 +转子 1 +x:1 +用人权 1 +x:1 +乐陵 1 +x:1 +本刊 1 +x:1 +评选办 1 +x:1 +藏学家 1 +x:1 +玛札塔格 1 +x:1 +傣家 1 +x:1 +弥足 1 +x:1 +科巴 1 +x:1 +捣蛋 1 +x:1 +楷式 1 +x:1 +就位 1 +x:1 +尚武 1 +x:1 +核爆 1 +x:1 +成功 1 +x:1 +本利 1 +x:1 +次氯酸钠 1 +x:1 +教育会 1 +x:1 +停步 1 +x:1 +京都府 1 +x:1 +分体机 1 +x:1 +昏迷不醒 1 +x:1 +插手 1 +x:1 +整枝 1 +x:1 +保护神 1 +x:1 +泽州县 1 +x:1 +协派 1 +x:1 +呆头呆脑 1 +x:1 +甜岛 1 +x:1 +重头之作 1 +x:1 +傧相 1 +x:1 +博物馆界 1 +x:1 +掀翻 1 +x:1 +马岛 1 +x:1 +缘木求鱼 1 +x:1 +层次化 1 +x:1 +本剧 1 +x:1 +收集 1 +x:1 +等比级数 1 +x:1 +凭祥市 1 +x:1 +抢劫案 1 +x:1 +乐队 1 +x:1 +镇平 1 +x:1 +农垦区 1 +x:1 +飞扬跋扈 1 +x:1 +新闻奖 1 +x:1 +令人发指 1 +x:1 +捏腔拿调 1 +x:1 +元氏 1 +x:1 +大猩猩 1 +x:1 +乐音 1 +x:1 +钟琴 1 +x:1 +本厂 1 +x:1 +乐韵 1 +x:1 +南头镇 1 +x:1 +饱经沧桑 1 +x:1 +千禧龙 1 +x:1 +温泉镇 1 +x:1 +分类造册 1 +x:1 +血流变 1 +x:1 +本原 1 +x:1 +烂摊子 1 +x:1 +也好 1 +x:1 +告饶 1 +x:1 +如饥如渴 1 +x:1 +熟食品 1 +x:1 +表明 1 +x:1 +磋商权 1 +x:1 +熊猫 1 +x:1 +本县 1 +x:1 +木生菌 1 +x:1 +水力发电 1 +x:1 +暖水域 1 +x:1 +碳酰基 1 +x:1 +邢台市 1 +x:1 +厂址 1 +x:1 +瞳人 1 +x:1 +凋 5 +x:5 +深圳岭 1 +x:1 +心潮起伏 1 +x:1 +芷江 1 +x:1 +蓝布 1 +x:1 +武术界 1 +x:1 +鸟雀 1 +x:1 +外交辞令 1 +x:1 +家谱 1 +x:1 +通商部 1 +x:1 +浮冰 1 +x:1 +热气球 1 +x:1 +美丝丝 1 +x:1 +画蛇添足 1 +x:1 +偏材 1 +x:1 +上卷 1 +x:1 +助力泵 1 +x:1 +从心所欲 1 +x:1 +章凤镇 1 +x:1 +前程似锦 1 +x:1 +图强 1 +x:1 +冷冻厂 1 +x:1 +贵宾楼 1 +x:1 +书面语 1 +x:1 +独唱家 1 +x:1 +异化期 1 +x:1 +南天门 1 +x:1 +畸变 1 +x:1 +放长线 1 +x:1 +表征 1 +x:1 +没得说的 1 +x:1 +古天文学 1 +x:1 +塔里木 1 +x:1 +本区 1 +x:1 +交子 1 +x:1 +卷筒 1 +x:1 +驱寒 1 +x:1 +催产 1 +x:1 +埃元 1 +x:1 +光子 1 +x:1 +造型光 1 +x:1 +熊集镇 1 +x:1 +圆球 1 +x:1 +大师级 1 +x:1 +长镜头 1 +x:1 +基层网 1 +x:1 +雷声 1 +x:1 +周转性 1 +x:1 +就业观 1 +x:1 +特长生 1 +x:1 +扶贫助困 1 +x:1 +妇教所 1 +x:1 +广州省 1 +x:1 +航向 1 +x:1 +航后 1 +x:1 +沂南 1 +x:1 +卷 296 +x:296 +十三日 1 +x:1 +雹子 1 +x:1 +在内 1 +x:1 +光学 1 +x:1 +奋笔疾书 1 +x:1 +益气活血 1 +x:1 +北海道 1 +x:1 +旅者 1 +x:1 +厂名 1 +x:1 +落落大方 1 +x:1 +粘液层 1 +x:1 +闺女 1 +x:1 +小小的 1 +x:1 +垦荒 1 +x:1 +举手投足 1 +x:1 +整整 1 +x:1 +埃加 1 +x:1 +千家峒 1 +x:1 +整数 1 +x:1 +马年 1 +x:1 +京戏 1 +x:1 +禽 23 +x:23 +格律 1 +x:1 +成倍 1 +x:1 +以工代干 1 +x:1 +推进器 1 +x:1 +茶毛虫 1 +x:1 +演艺 1 +x:1 +畏罪 1 +x:1 +浊 10 +x:10 +盔甲 1 +x:1 +翩然 1 +x:1 +浮力 1 +x:1 +形象战 1 +x:1 +稀稀拉拉 1 +x:1 +生石灰 1 +x:1 +复线 1 +x:1 +浮动 1 +x:1 +醇芳 1 +x:1 +犬儒主义 1 +x:1 +整改 1 +x:1 +马帮 1 +x:1 +比尔 1 +x:1 +补报机 1 +x:1 +玉色 1 +x:1 +临危不惧 1 +x:1 +投票率 1 +x:1 +水疗 1 +x:1 +脑海 1 +x:1 +一心 1 +x:1 +桑椹 1 +x:1 +陶瓷 1 +x:1 +到岸价 1 +x:1 +褪色 1 +x:1 +雷害 1 +x:1 +父权 1 +x:1 +荷兰猪 1 +x:1 +公会堂 1 +x:1 +悄然无声 1 +x:1 +薄薄的 1 +x:1 +县域 1 +x:1 +鸳鸯树 1 +x:1 +止降 1 +x:1 +一了百了 1 +x:1 +农技员 1 +x:1 +歌剧团 1 +x:1 +五角形 1 +x:1 +县城 1 +x:1 +昂然 1 +x:1 +基干 1 +x:1 +脑浆 1 +x:1 +格式 1 +x:1 +剖示 1 +x:1 +弧形槽 1 +x:1 +闲机 1 +x:1 +进出境 1 +x:1 +萨其马 1 +x:1 +讲道 1 +x:1 +瘦骨嶙峋 1 +x:1 +民营 1 +x:1 +糅进 1 +x:1 +盟约 1 +x:1 +失血性 1 +x:1 +马庙 1 +x:1 +浮利 1 +x:1 +水饺 1 +x:1 +艺术照 1 +x:1 +靠泊 1 +x:1 +监督会 1 +x:1 +谙知 1 +x:1 +抗雪 1 +x:1 +甜度 1 +x:1 +是可忍 1 +x:1 +乳 4 +x:4 +斯希波尔 1 +x:1 +赵 1495 +x:1495 +抗震 1 +x:1 +良师益友 1 +x:1 +德行 1 +x:1 +复合型 1 +x:1 +云谲波诡 1 +x:1 +鸭黄 1 +x:1 +代代 1 +x:1 +港情 1 +x:1 +二极管 1 +x:1 +经济特区 1 +x:1 +农资办 1 +x:1 +痰盂 1 +x:1 +冲锋陷阵 1 +x:1 +波斯菊 1 +x:1 +来信人 1 +x:1 +不绝如缕 1 +x:1 +自认倒霉 1 +x:1 +选本 1 +x:1 +代价 1 +x:1 +经济学说 1 +x:1 +架线 1 +x:1 +葱葱郁郁 1 +x:1 +桑梓 1 +x:1 +离经叛道 1 +x:1 +蓝山 1 +x:1 +颈前 1 +x:1 +温吞 1 +x:1 +横说竖说 1 +x:1 +H 11 +x:11 +蓬蓬 1 +x:1 +适应力 1 +x:1 +黏膜 1 +x:1 +干热 1 +x:1 +劲升 1 +x:1 +撅臀 1 +x:1 +交委 1 +x:1 +攻心为上 1 +x:1 +埃及 1 +x:1 +厂商 1 +x:1 +擂鼓筛锣 1 +x:1 +航运界 1 +x:1 +型砂 1 +x:1 +监督人 1 +x:1 +塔河 1 +x:1 +雅盖隆 1 +x:1 +代交 1 +x:1 +不辨菽麦 1 +x:1 +水龙吟 1 +x:1 +强项 1 +x:1 +成全 1 +x:1 +葚 1 +x:1 +撒谎 1 +x:1 +台球赛 1 +x:1 +矣 50 +x:50 +约会 1 +x:1 +脚夫 1 +x:1 +鸟铳 1 +x:1 +德文版 1 +x:1 +储油轮 1 +x:1 +朔城区 1 +x:1 +心理 1 +x:1 +鞭花 1 +x:1 +两厨一厕 1 +x:1 +寄宿式 1 +x:1 +游牧人 1 +x:1 +大金塔 1 +x:1 +烟火食 1 +x:1 +国管局 1 +x:1 +布吉镇 1 +x:1 +浮华 1 +x:1 +蜂拥而来 1 +x:1 +涛澜 1 +x:1 +延安 1 +x:1 +交好 1 +x:1 +光复 1 +x:1 +偏方 1 +x:1 +九江市 1 +x:1 +断层湖 1 +x:1 +代买 1 +x:1 +预防性 1 +x:1 +桑树 1 +x:1 +推进型 1 +x:1 +满篇 1 +x:1 +老师傅 1 +x:1 +光头 1 +x:1 +开拓者队 1 +x:1 +脑汁 1 +x:1 +东南西北 1 +x:1 +新址 1 +x:1 +温和 1 +x:1 +香烟盒纸 1 +x:1 +针砭 1 +x:1 +本儿 1 +x:1 +紧身恤 1 +x:1 +成册 1 +x:1 +面无人色 1 +x:1 +勇挑重担 1 +x:1 +脓肿 1 +x:1 +疗养员 1 +x:1 +交大 1 +x:1 +代为 1 +x:1 +哄劝 1 +x:1 +圪台子 1 +x:1 +春和景明 1 +x:1 +就业证 1 +x:1 +芥兰 1 +x:1 +凶吉难卜 1 +x:1 +深圳市 1 +x:1 +强风 1 +x:1 +胡涂 1 +x:1 +通达 1 +x:1 +双多向 1 +x:1 +天壤之别 1 +x:1 +偏旁 1 +x:1 +拉丁派 1 +x:1 +望桥 1 +x:1 +刘家 1 +x:1 +多义字 1 +x:1 +靠模 1 +x:1 +插曲 1 +x:1 +水龙 1 +x:1 +溶岩 1 +x:1 +璋 3 +x:3 +参赛者 1 +x:1 +语法学 1 +x:1 +购煤款 1 +x:1 +马塞 1 +x:1 +狐火 1 +x:1 +水龄 1 +x:1 +箅子 1 +x:1 +共同社 1 +x:1 +哈尔滨市 1 +x:1 +厥 1 +x:1 +赴死 1 +x:1 +曼曼地 1 +x:1 +储存量 1 +x:1 +安 366 +x:366 +对外商 1 +x:1 +凤岗镇 1 +x:1 +峨嵋岭 1 +x:1 +水龙卷 1 +x:1 +上下齐心 1 +x:1 +光度 1 +x:1 +材料费 1 +x:1 +黄继光连 1 +x:1 +联防队员 1 +x:1 +油气田 1 +x:1 +偏执 1 +x:1 +次大陆 1 +x:1 +淡如逝水 1 +x:1 +八音匣子 1 +x:1 +电势差 1 +x:1 +莫不 1 +x:1 +江东村 1 +x:1 +宣传站 1 +x:1 +营业厅 1 +x:1 +成器 1 +x:1 +商工人 1 +x:1 +跃然而起 1 +x:1 +三棉 1 +x:1 +礼宾司 1 +x:1 +无庸置疑 1 +x:1 +休宁县 1 +x:1 +本园 1 +x:1 +愧悔 1 +x:1 +久经沙场 1 +x:1 +蓬莱 1 +x:1 +凹 4 +x:4 +秦汉 1 +x:1 +本国 1 +x:1 +罪证 1 +x:1 +温升 1 +x:1 +石煤 1 +x:1 +散热 1 +x:1 +看护者 1 +x:1 +名誉权 1 +x:1 +米字形 1 +x:1 +下关区 1 +x:1 +燕京 1 +x:1 +严管 1 +x:1 +谙熟 1 +x:1 +千分号 1 +x:1 +交并 1 +x:1 +厂办 1 +x:1 +格外 1 +x:1 +另眼看待 1 +x:1 +温厚 1 +x:1 +厂务 1 +x:1 +綦 1 +x:1 +翻供 1 +x:1 +彼一时 1 +x:1 +视 170 +x:170 +留尼汪岛 1 +x:1 +直播 1 +x:1 +出关 1 +x:1 +望城乡 1 +x:1 +欧罗巴洲 1 +x:1 +擀 12 +x:12 +浮吊 1 +x:1 +浮名 1 +x:1 +民船 1 +x:1 +温台 1 +x:1 +代理权 1 +x:1 +计日程功 1 +x:1 +莫云 1 +x:1 +民航 1 +x:1 +两栖舰 1 +x:1 +格套 1 +x:1 +稻树 1 +x:1 +一笔带过 1 +x:1 +行世 1 +x:1 +喟叹 1 +x:1 +强化剂 1 +x:1 +峨嵋山 1 +x:1 +六道轮回 1 +x:1 +光年 1 +x:1 +农垦场 1 +x:1 +证婚人 1 +x:1 +港机 1 +x:1 +雷州 1 +x:1 +珺 33 +x:33 +南岛 1 +x:1 +瑶族 1 +x:1 +解放思想 1 +x:1 +举人 1 +x:1 +电脑板 1 +x:1 +果苗 1 +x:1 +中等教育 1 +x:1 +针纺 1 +x:1 +术语 1 +x:1 +针线 1 +x:1 +层面 1 +x:1 +墩 4 +x:4 +泥炭全肥 1 +x:1 +媳 1 +x:1 +浩如烟海 1 +x:1 +抗敌素 1 +x:1 +不亚于 1 +x:1 +措施法 1 +x:1 +发麻 1 +x:1 +常开不败 1 +x:1 +频谱 1 +x:1 +青海省 1 +x:1 +迭创新高 1 +x:1 +平畴沃野 1 +x:1 +扶持 1 +x:1 +弥补 1 +x:1 +莫伊 1 +x:1 +绵延不断 1 +x:1 +无妄之灾 1 +x:1 +实验费 1 +x:1 +百看不厌 1 +x:1 +驾驶 1 +x:1 +表扬 1 +x:1 +核军备 1 +x:1 +滴溜溜 1 +x:1 +激发源 1 +x:1 +派生词 1 +x:1 +甜头 1 +x:1 +院 390 +x:390 +交待 1 +x:1 +马夫 1 +x:1 +交往 1 +x:1 +马头 1 +x:1 +邮递员 1 +x:1 +沁水 1 +x:1 +凤毛麟角 1 +x:1 +以儆效尤 1 +x:1 +逃脱 1 +x:1 +马夹 1 +x:1 +搁 22 +x:22 +水鸟 1 +x:1 +桑芽儿 1 +x:1 +厂厂 1 +x:1 +财贸办 1 +x:1 +综合楼 1 +x:1 +干劲 1 +x:1 +脚踏式 1 +x:1 +桥板 1 +x:1 +插条 1 +x:1 +完成率 1 +x:1 +本土 1 +x:1 +反间计 1 +x:1 +表报 1 +x:1 +东宝区 1 +x:1 +巴林右旗 1 +x:1 +沙河市 1 +x:1 +童仆 1 +x:1 +酒垆 1 +x:1 +填鸭 1 +x:1 +农技协 1 +x:1 +狭谷 1 +x:1 +本地 1 +x:1 +审批人 1 +x:1 +成型 1 +x:1 +本场 1 +x:1 +贿赂 1 +x:1 +光弦 1 +x:1 +表彰会 1 +x:1 +萎靡 1 +x:1 +成培 1 +x:1 +支援性 1 +x:1 +杆儿 1 +x:1 +婕 4 +x:4 +替代品 1 +x:1 +大家伙儿 1 +x:1 +扫帚声 1 +x:1 +秦淮 1 +x:1 +乐亭县 1 +x:1 +水鹿 1 +x:1 +贡献率 1 +x:1 +闰年 1 +x:1 +光影 1 +x:1 +见见面 1 +x:1 +香蕉林 1 +x:1 +太平洋 1 +x:1 +光彩 1 +x:1 +乐悠悠 1 +x:1 +厂史 1 +x:1 +就业路 1 +x:1 +水鹤 1 +x:1 +西行路 1 +x:1 +瑰丽 1 +x:1 +往复 1 +x:1 +令人作呕 1 +x:1 +帐 3 +x:3 +抢镜头 1 +x:1 +左安门 1 +x:1 +工休日 1 +x:1 +秦港 1 +x:1 +胡桃 1 +x:1 +田径界 1 +x:1 +霞石 1 +x:1 +断 312 +x:312 +敏感区 1 +x:1 +成名 1 +x:1 +转账 1 +x:1 +洗衣机 1 +x:1 +清除率 1 +x:1 +鼻青脸肿 1 +x:1 +纵横有序 1 +x:1 +滁州 1 +x:1 +成命 1 +x:1 +控制法 1 +x:1 +种果 1 +x:1 +插播 1 +x:1 +淡泊名利 1 +x:1 +绿杨乡 1 +x:1 +乳燕营巢 1 +x:1 +备用金 1 +x:1 +推进剂 1 +x:1 +成员 1 +x:1 +鬼哭狼嚎 1 +x:1 +俱 36 +x:36 +保税区 1 +x:1 +被选举权 1 +x:1 +港方 1 +x:1 +硬功夫 1 +x:1 +合格证费 1 +x:1 +蓝天 1 +x:1 +物以类聚 1 +x:1 +塔楼 1 +x:1 +结业证 1 +x:1 +债务缠身 1 +x:1 +花池子 1 +x:1 +本名 1 +x:1 +保护编 1 +x:1 +资料箱 1 +x:1 +退休日 1 +x:1 +波斯虎 1 +x:1 +僵持 1 +x:1 +日光灯 1 +x:1 +乐道 1 +x:1 +烟酸 1 +x:1 +杏元屯 1 +x:1 +资环局 1 +x:1 +南市区 1 +x:1 +阜平县 1 +x:1 +两河三湖 1 +x:1 +综合治理 1 +x:1 +球类室 1 +x:1 +发火点 1 +x:1 +拖家带口 1 +x:1 +农牧渔业 1 +x:1 +钳工 1 +x:1 +县县 1 +x:1 +合金 1 +x:1 +干冷 1 +x:1 +名优特 1 +x:1 +苏桥 1 +x:1 +指令性 1 +x:1 +艺术界 1 +x:1 +越冬场 1 +x:1 +刘庄 1 +x:1 +格学 1 +x:1 +化脓 1 +x:1 +四轴挠性 1 +x:1 +发财梦 1 +x:1 +晴空万里 1 +x:1 +冷冻品 1 +x:1 +甚笃 1 +x:1 +喘气 1 +x:1 +周转期 1 +x:1 +霸州市 1 +x:1 +半空 1 +x:1 +挫败 1 +x:1 +光山 1 +x:1 +石灰窑 1 +x:1 +高等级 1 +x:1 +本周 1 +x:1 +转轮手枪 1 +x:1 +成品 1 +x:1 +怀疑者 1 +x:1 +资料篇 1 +x:1 +贾庄镇 1 +x:1 +交差 1 +x:1 +枕戈待旦 1 +x:1 +超乎 1 +x:1 +干草垛 1 +x:1 +墙报栏 1 +x:1 +交工 1 +x:1 +熏 14 +x:14 +增长极 1 +x:1 +特长班 1 +x:1 +捣腾 1 +x:1 +拜多阿 1 +x:1 +石荷州 1 +x:1 +勃然大怒 1 +x:1 +逃荒 1 +x:1 +留言簿 1 +x:1 +藤箱 1 +x:1 +游速 1 +x:1 +德恒所 1 +x:1 +靠椅 1 +x:1 +皎洁 1 +x:1 +四明山 1 +x:1 +有救 1 +x:1 +外国籍 1 +x:1 +比奇 1 +x:1 +表态 1 +x:1 +偷抗税案 1 +x:1 +凉茶铺 1 +x:1 +诺迪奥队 1 +x:1 +蓬勃向上 1 +x:1 +褐红色 1 +x:1 +愈演愈烈 1 +x:1 +画影像 1 +x:1 +螺口 1 +x:1 +寓 28 +x:28 +石版 1 +x:1 +遗弃者 1 +x:1 +本嗓 1 +x:1 +基层科 1 +x:1 +救护神 1 +x:1 +浇灌 1 +x:1 +石片 1 +x:1 +航务 1 +x:1 +蔷薇 1 +x:1 +坠 16 +x:16 +化肥 1 +x:1 +风云录 1 +x:1 +否定 1 +x:1 +鼻梁儿 1 +x:1 +水晶体 1 +x:1 +胡椒 1 +x:1 +哈欠 1 +x:1 +双层床 1 +x:1 +表演系 1 +x:1 +未卜先知 1 +x:1 +舟桥团 1 +x:1 +议事堂 1 +x:1 +蔓萝 1 +x:1 +贿选案 1 +x:1 +承先启后 1 +x:1 +核电 1 +x:1 +探囊取物 1 +x:1 +节地率 1 +x:1 +云头儿 1 +x:1 +末 422 +x:422 +蹊跷 1 +x:1 +不堪回首 1 +x:1 +芮 14 +x:14 +封建迷信 1 +x:1 +沁入心扉 1 +x:1 +举重若轻 1 +x:1 +就业 1 +x:1 +抽筋 1 +x:1 +沁源 1 +x:1 +戏园子 1 +x:1 +说不来 1 +x:1 +浮土 1 +x:1 +架空 1 +x:1 +汝 16 +x:16 +泗阳县 1 +x:1 +禁毒展 1 +x:1 +胳膊肘 1 +x:1 +坤 36 +x:36 +超交 1 +x:1 +超产 1 +x:1 +价重字 1 +x:1 +中高档 1 +x:1 +罪行 1 +x:1 +互联网 1 +x:1 +石狮 1 +x:1 +超人 1 +x:1 +兵机策 1 +x:1 +比如 1 +x:1 +藤筐 1 +x:1 +表情 1 +x:1 +姚伏 1 +x:1 +复瓣 1 +x:1 +塔柱 1 +x:1 +枕头箱 1 +x:1 +泌乳期 1 +x:1 +随着 1 +x:1 +就业者 1 +x:1 +锐不可当 1 +x:1 +文艺路 1 +x:1 +溆水 1 +x:1 +甜味 1 +x:1 +世博园 1 +x:1 +合作部 1 +x:1 +神奈川 1 +x:1 +琨 12 +x:12 +甘柒乡 1 +x:1 +摩擦点 1 +x:1 +表演 1 +x:1 +以次充好 1 +x:1 +拆除 1 +x:1 +侨声 1 +x:1 +见 1168 +x:1168 +云烟 1 +x:1 +塔架 1 +x:1 +圣科莫镇 1 +x:1 +西辛庄村 1 +x:1 +交加 1 +x:1 +投中 1 +x:1 +主动脉弓 1 +x:1 +特贫村 1 +x:1 +两系法 1 +x:1 +告退 1 +x:1 +虚无主义 1 +x:1 +卵白 1 +x:1 +卖主 1 +x:1 +类比 1 +x:1 +成婚 1 +x:1 +塔林 1 +x:1 +保荐人 1 +x:1 +交办 1 +x:1 +川剧团 1 +x:1 +相联 1 +x:1 +延迟 1 +x:1 +塔松 1 +x:1 +生产班 1 +x:1 +厂庆 1 +x:1 +比国 1 +x:1 +空怀 1 +x:1 +收麦 1 +x:1 +肉联厂 1 +x:1 +老毛病 1 +x:1 +被里 1 +x:1 +甜品 1 +x:1 +垫付 1 +x:1 +交割 1 +x:1 +赞颂 1 +x:1 +溆河 1 +x:1 +质管员 1 +x:1 +傣历 1 +x:1 +围塘机 1 +x:1 +居功自傲 1 +x:1 +驱动 1 +x:1 +安大略省 1 +x:1 +助人 1 +x:1 +四会 1 +x:1 +硅片 1 +x:1 +四优 1 +x:1 +主持台 1 +x:1 +花露水 1 +x:1 +埃塞 1 +x:1 +老塔村 1 +x:1 +隆回县 1 +x:1 +投产 1 +x:1 +雷击 1 +x:1 +螺山 1 +x:1 +受宠若惊 1 +x:1 +越盾 1 +x:1 +单眼皮 1 +x:1 +单纤细度 1 +x:1 +投井 1 +x:1 +平均主义 1 +x:1 +武术系 1 +x:1 +竹节虫 1 +x:1 +万山岛 1 +x:1 +折叠椅 1 +x:1 +陶瓷展 1 +x:1 +偻 1 +x:1 +追索权 1 +x:1 +胡来 1 +x:1 +磐石 1 +x:1 +胡杨 1 +x:1 +全织物 1 +x:1 +交口 1 +x:1 +交叠 1 +x:1 +光压 1 +x:1 +平衡表 1 +x:1 +延边 1 +x:1 +价格 1 +x:1 +一衣带水 1 +x:1 +温带 1 +x:1 +民运 1 +x:1 +八廓街 1 +x:1 +缤 1 +x:1 +交叉 1 +x:1 +大别山 1 +x:1 +民进 1 +x:1 +可解析性 1 +x:1 +本家 1 +x:1 +盒装 1 +x:1 +夜曲 1 +x:1 +被关爱者 1 +x:1 +交变 1 +x:1 +为政不廉 1 +x:1 +粹 2 +x:2 +火区 1 +x:1 +逃走 1 +x:1 +核算 1 +x:1 +政见 1 +x:1 +古装片 1 +x:1 +满族镇 1 +x:1 +灰沉沉 1 +x:1 +玲珑 1 +x:1 +始 103 +x:103 +桑拿 1 +x:1 +昂立 1 +x:1 +上浮率 1 +x:1 +桥段 1 +x:1 +叶枝 1 +x:1 +联体窑 1 +x:1 +配种站 1 +x:1 +渣土地 1 +x:1 +闹剧式 1 +x:1 +水龙带 1 +x:1 +焚烧厂 1 +x:1 +钳制 1 +x:1 +碰面 1 +x:1 +百般刁难 1 +x:1 +农机具馆 1 +x:1 +溆浦 1 +x:1 +郎溪县 1 +x:1 +政要 1 +x:1 +在场 1 +x:1 +黑绿色 1 +x:1 +辄 6 +x:6 +万寿寺 1 +x:1 +节气 1 +x:1 +邯郸学步 1 +x:1 +阳电子 1 +x:1 +核符 1 +x:1 +四九 1 +x:1 +雷锋 1 +x:1 +瀑 5 +x:5 +石粉 1 +x:1 +金柱村 1 +x:1 +商品流通 1 +x:1 +有机酸 1 +x:1 +交卷 1 +x:1 +逃跑 1 +x:1 +温度 1 +x:1 +投保 1 +x:1 +进出口 1 +x:1 +逃路 1 +x:1 +光荣牌 1 +x:1 +议而不决 1 +x:1 +蓝图 1 +x:1 +黄苓 1 +x:1 +温床 1 +x:1 +四书 1 +x:1 +扫把 1 +x:1 +靠枕 1 +x:1 +成安 1 +x:1 +鸟鸣 1 +x:1 +冷冻室 1 +x:1 +光棍儿 1 +x:1 +久 278 +x:278 +溶入 1 +x:1 +无可奈何 1 +x:1 +保安法 1 +x:1 +本字 1 +x:1 +本子 1 +x:1 +旌旗招展 1 +x:1 +四下 1 +x:1 +仇敌 1 +x:1 +四不 1 +x:1 +形态 1 +x:1 +大大小小 1 +x:1 +成寐 1 +x:1 +哈方 1 +x:1 +怜贫惜老 1 +x:1 +有言在先 1 +x:1 +一心一德 1 +x:1 +薄利 1 +x:1 +卵石 1 +x:1 +偏激 1 +x:1 +浮夸 1 +x:1 +法郎 1 +x:1 +主轴 1 +x:1 +信浓町 1 +x:1 +亏耗 1 +x:1 +复生 1 +x:1 +芥子 1 +x:1 +四中 1 +x:1 +有计划 1 +x:1 +双差生 1 +x:1 +保浇地 1 +x:1 +石缝 1 +x:1 +崖葬 1 +x:1 +黄陵县 1 +x:1 +总领事 1 +x:1 +皓 7 +x:7 +红花草头 1 +x:1 +列车长 1 +x:1 +涌现 1 +x:1 +复盲 1 +x:1 +雨靴 1 +x:1 +价款 1 +x:1 +理事 1 +x:1 +保护率 1 +x:1 +理亏 1 +x:1 +稠 6 +x:6 +洪江市 1 +x:1 +电脑桌 1 +x:1 +八宝山 1 +x:1 +透亮性 1 +x:1 +矿院 1 +x:1 +成堆 1 +x:1 +复盐 1 +x:1 +制造部 1 +x:1 +探戈曲 1 +x:1 +逼 115 +x:115 +旅行 1 +x:1 +桥梯 1 +x:1 +含咀 1 +x:1 +海伦市 1 +x:1 +清川江 1 +x:1 +威士忌 1 +x:1 +平泉县 1 +x:1 +娇贵 1 +x:1 +事与愿违 1 +x:1 +水量 1 +x:1 +借词 1 +x:1 +清议 1 +x:1 +强酸 1 +x:1 +痛经宁 1 +x:1 +橘子 1 +x:1 +购房户 1 +x:1 +反收购 1 +x:1 +生资 1 +x:1 +整洁 1 +x:1 +张祠乡 1 +x:1 +生意网 1 +x:1 +多躁少静 1 +x:1 +德意志 1 +x:1 +核磁 1 +x:1 +桥梁 1 +x:1 +任重道远 1 +x:1 +马嘶 1 +x:1 +检察部 1 +x:1 +卧伏 1 +x:1 +老松 1 +x:1 +大锅饭 1 +x:1 +纺锭 1 +x:1 +桥桩 1 +x:1 +松泉牌 1 +x:1 +紫砂 1 +x:1 +纺锤 1 +x:1 +螺帽 1 +x:1 +智术 1 +x:1 +救火队 1 +x:1 +侵害 1 +x:1 +田径馆 1 +x:1 +火电厂 1 +x:1 +曹庵镇 1 +x:1 +实效 1 +x:1 +喘息 1 +x:1 +电力部 1 +x:1 +县志 1 +x:1 +筏养底播 1 +x:1 +氯 4 +x:4 +越冬作物 1 +x:1 +风急浪大 1 +x:1 +投票箱 1 +x:1 +散结 1 +x:1 +反扑 1 +x:1 +中西餐 1 +x:1 +人书 1 +x:1 +垄坎 1 +x:1 +县徽 1 +x:1 +蹈舞 1 +x:1 +山地 1 +x:1 +曼哈顿 1 +x:1 +审核员 1 +x:1 +水酒 1 +x:1 +构造运动 1 +x:1 +民谣 1 +x:1 +温差 1 +x:1 +里程碑式 1 +x:1 +桥栏 1 +x:1 +粉蒸肉 1 +x:1 +温州 1 +x:1 +装卸量 1 +x:1 +滴水村 1 +x:1 +民谚 1 +x:1 +民调 1 +x:1 +插标 1 +x:1 +悠悠然 1 +x:1 +五线谱 1 +x:1 +箬竹 1 +x:1 +心安理得 1 +x:1 +传习 1 +x:1 +柳丝 1 +x:1 +强对流 1 +x:1 +药王庙 1 +x:1 +羊庄镇 1 +x:1 +喷灌区 1 +x:1 +县处级 1 +x:1 +清词丽句 1 +x:1 +万吨级 1 +x:1 +交出 1 +x:1 +游击队员 1 +x:1 +苏方 1 +x:1 +巡回演出 1 +x:1 +复矿 1 +x:1 +成天 1 +x:1 +抱 245 +x:245 +进出关 1 +x:1 +个体主义 1 +x:1 +单刀直入 1 +x:1 +脓血 1 +x:1 +促 168 +x:168 +洞体 1 +x:1 +阻燃网 1 +x:1 +歌剧式 1 +x:1 +西双坦村 1 +x:1 +轻型车 1 +x:1 +道义感 1 +x:1 +越界 1 +x:1 +河北村 1 +x:1 +传主 1 +x:1 +靖远 1 +x:1 +运河畔 1 +x:1 +嗜痂成癖 1 +x:1 +成套 1 +x:1 +坝沿 1 +x:1 +偏流 1 +x:1 +轻裘肥马 1 +x:1 +激发 1 +x:1 +传世 1 +x:1 +尿床 1 +x:1 +酸甜 1 +x:1 +引水员 1 +x:1 +马场 1 +x:1 +堂堂正正 1 +x:1 +木本植物 1 +x:1 +科室 1 +x:1 +传代 1 +x:1 +交公 1 +x:1 +绪 2 +x:2 +传令 1 +x:1 +绑架 1 +x:1 +昉 1 +x:1 +龟壳 1 +x:1 +理会 1 +x:1 +石灰石 1 +x:1 +演讲 1 +x:1 +石制品 1 +x:1 +上晃上晃 1 +x:1 +暗沟 1 +x:1 +温岭 1 +x:1 +飞黄腾达 1 +x:1 +强邻 1 +x:1 +浮子 1 +x:1 +政警 1 +x:1 +黑水 1 +x:1 +率先 1 +x:1 +不买账 1 +x:1 +真相大白 1 +x:1 +石纹 1 +x:1 +成都市 1 +x:1 +自决权 1 +x:1 +中成药 1 +x:1 +雷劈 1 +x:1 +渊流 1 +x:1 +酸痛 1 +x:1 +代表大会 1 +x:1 +敏感度 1 +x:1 +赫然 1 +x:1 +柳亭 1 +x:1 +字卷 1 +x:1 +竹制 1 +x:1 +洒红节 1 +x:1 +难 1493 +x:1493 +增供 1 +x:1 +比喻 1 +x:1 +相思子 1 +x:1 +谙练 1 +x:1 +水道 1 +x:1 +光光 1 +x:1 +报单 1 +x:1 +民财 1 +x:1 +石经 1 +x:1 +痔 1 +x:1 +酸疼 1 +x:1 +仇杀 1 +x:1 +传人 1 +x:1 +民质 1 +x:1 +山坞 1 +x:1 +捧腹大笑 1 +x:1 +芳溪镇 1 +x:1 +投票站 1 +x:1 +平面波 1 +x:1 +针灸 1 +x:1 +单摆 1 +x:1 +石绿 1 +x:1 +整治 1 +x:1 +报之以李 1 +x:1 +马里兰 1 +x:1 +修理业 1 +x:1 +激发态 1 +x:1 +演词 1 +x:1 +靠旗 1 +x:1 +冰封雪裹 1 +x:1 +生意经 1 +x:1 +尿布 1 +x:1 +开发业 1 +x:1 +古蔺县 1 +x:1 +人工授精 1 +x:1 +黄渡 1 +x:1 +高于 1 +x:1 +高二 1 +x:1 +横格纸 1 +x:1 +核红 1 +x:1 +调色板 1 +x:1 +八仙包 1 +x:1 +爆发力 1 +x:1 +海流图乡 1 +x:1 +诺曼第 1 +x:1 +汉语系 1 +x:1 +高云 1 +x:1 +省力 1 +x:1 +按劳取酬 1 +x:1 +庭院式 1 +x:1 +酝酿期 1 +x:1 +青出于蓝 1 +x:1 +高亢 1 +x:1 +强震 1 +x:1 +桑枝 1 +x:1 +高产 1 +x:1 +高人 1 +x:1 +冰球史 1 +x:1 +广州站 1 +x:1 +动人魂魄 1 +x:1 +措手不及 1 +x:1 +派送 1 +x:1 +欲罢不能 1 +x:1 +纬书 1 +x:1 +成年 1 +x:1 +马倌 1 +x:1 +铅灰色 1 +x:1 +膳费 1 +x:1 +生产区 1 +x:1 +钱旺村乡 1 +x:1 +生铁 1 +x:1 +塌方 1 +x:1 +坝段 1 +x:1 +浮岩 1 +x:1 +照相馆 1 +x:1 +妄语 1 +x:1 +载体 1 +x:1 +靠手 1 +x:1 +千古一人 1 +x:1 +比划 1 +x:1 +洪熙官 1 +x:1 +公诸于众 1 +x:1 +归公 1 +x:1 +比分 1 +x:1 +光团 1 +x:1 +港澳 1 +x:1 +高价 1 +x:1 +高下 1 +x:1 +高三 1 +x:1 +本市 1 +x:1 +家家 1 +x:1 +本币 1 +x:1 +望望 1 +x:1 +高一 1 +x:1 +郭庄镇 1 +x:1 +翩翩 1 +x:1 +完全叶 1 +x:1 +鄂豫皖 1 +x:1 +艺术编 1 +x:1 +高专 1 +x:1 +望月 1 +x:1 +温室 1 +x:1 +高个 1 +x:1 +弯弯的 1 +x:1 +主单位 1 +x:1 +水霸 1 +x:1 +品数 1 +x:1 +借贷 1 +x:1 +辉铜矿 1 +x:1 +酉阳 1 +x:1 +县委 1 +x:1 +孙桥 1 +x:1 +飞鸿堂 1 +x:1 +出借 1 +x:1 +菲尼克斯 1 +x:1 +高丽 1 +x:1 +浮山 1 +x:1 +金华戏 1 +x:1 +知名演员 1 +x:1 +仇怨 1 +x:1 +靠拢 1 +x:1 +浮船坞 1 +x:1 +广开才路 1 +x:1 +江当乡 1 +x:1 +售饭机 1 +x:1 +修车摊 1 +x:1 +埃居 1 +x:1 +浮尘 1 +x:1 +法门 1 +x:1 +水东江 1 +x:1 +亚族人 1 +x:1 +高乔 1 +x:1 +强音 1 +x:1 +变废为宝 1 +x:1 +林牧局 1 +x:1 +尚未 1 +x:1 +先锋 1 +x:1 +水靴 1 +x:1 +跌宕起伏 1 +x:1 +越狱 1 +x:1 +黄龙伞盖 1 +x:1 +本年 1 +x:1 +商交所 1 +x:1 +塔指 1 +x:1 +水面 1 +x:1 +绊绊磕磕 1 +x:1 +邢台县 1 +x:1 +仇恨 1 +x:1 +破釜沉舟 1 +x:1 +潜研堂 1 +x:1 +鼻梁子 1 +x:1 +大凉山 1 +x:1 +近作选 1 +x:1 +畸形 1 +x:1 +饶有风趣 1 +x:1 +马克 1 +x:1 +足以 1 +x:1 +单人旁儿 1 +x:1 +石砌 1 +x:1 +客客气气 1 +x:1 +计划委 1 +x:1 +圆珠笔芯 1 +x:1 +交城 1 +x:1 +铸就 1 +x:1 +招展 1 +x:1 +经验型 1 +x:1 +三极管 1 +x:1 +月租费 1 +x:1 +香辅料 1 +x:1 +砸门声 1 +x:1 +马关 1 +x:1 +粉身碎骨 1 +x:1 +装卸队 1 +x:1 +烦乱 1 +x:1 +否决 1 +x:1 +份额油 1 +x:1 +本心 1 +x:1 +悠悠的 1 +x:1 +阵法 1 +x:1 +怀疑论 1 +x:1 +大后方 1 +x:1 +偏正 1 +x:1 +专管组 1 +x:1 +北甸子乡 1 +x:1 +厂子 1 +x:1 +磷虾 1 +x:1 +窒息 1 +x:1 +达尼洛娃 1 +x:1 +内蒙古 1 +x:1 +经济昆虫 1 +x:1 +水雷 1 +x:1 +宏农村 1 +x:1 +温婉 1 +x:1 +斗心眼儿 1 +x:1 +杨柳 1 +x:1 +后防线 1 +x:1 +邢台制 1 +x:1 +马儿 1 +x:1 +哲学部 1 +x:1 +国 5511 +x:5511 +硅石 1 +x:1 +五角大楼 1 +x:1 +舞狮队 1 +x:1 +积分学 1 +x:1 +石碓 1 +x:1 +以假充真 1 +x:1 +石碑 1 +x:1 +妄言 1 +x:1 +光圈 1 +x:1 +油罐车 1 +x:1 +针鼻儿 1 +x:1 +生锈 1 +x:1 +借调 1 +x:1 +超固态 1 +x:1 +倾斜仪 1 +x:1 +尝新 1 +x:1 +张北镇 1 +x:1 +共同点 1 +x:1 +吩咐 1 +x:1 +石碴 1 +x:1 +乐魂 1 +x:1 +港湾 1 +x:1 +厂家 1 +x:1 +邮编 1 +x:1 +高估 1 +x:1 +急脉缓灸 1 +x:1 +若隐若现 1 +x:1 +厂容 1 +x:1 +楷则 1 +x:1 +控价 1 +x:1 +喊话 1 +x:1 +石磙 1 +x:1 +多元性 1 +x:1 +高低 1 +x:1 +松明 1 +x:1 +秦时 1 +x:1 +雕塑热 1 +x:1 +快热式 1 +x:1 +南屏街 1 +x:1 +垂涎三尺 1 +x:1 +百货业 1 +x:1 +臧否 1 +x:1 +本当 1 +x:1 +社会学所 1 +x:1 +水陆 1 +x:1 +光电子 1 +x:1 +西北侧 1 +x:1 +硕学 1 +x:1 +封阻 1 +x:1 +螺丝起子 1 +x:1 +生长 1 +x:1 +半导体场 1 +x:1 +南安普顿 1 +x:1 +成心 1 +x:1 +回款额 1 +x:1 +石磨 1 +x:1 +足球界 1 +x:1 +石磬 1 +x:1 +长生果 1 +x:1 +离谱儿 1 +x:1 +一场春梦 1 +x:1 +成就 1 +x:1 +小青年 1 +x:1 +星点 1 +x:1 +怎生 1 +x:1 +石笔 1 +x:1 +石笋 1 +x:1 +终端台 1 +x:1 +一般来说 1 +x:1 +甘雨 1 +x:1 +雷场 1 +x:1 +佛罗里达 1 +x:1 +被面 1 +x:1 +望新 1 +x:1 +九江县 1 +x:1 +水富站 1 +x:1 +尚无 1 +x:1 +谬 1 +x:1 +佛罗伦萨 1 +x:1 +喜上加喜 1 +x:1 +娓娓动听 1 +x:1 +夺 216 +x:216 +光敏剂 1 +x:1 +宁折不弯 1 +x:1 +比值 1 +x:1 +马刀 1 +x:1 +摸底关 1 +x:1 +硅氧烷 1 +x:1 +间隔 1 +x:1 +四安镇 1 +x:1 +雷坪 1 +x:1 +麦迪亚 1 +x:1 +硕士 1 +x:1 +望族 1 +x:1 +创造期 1 +x:1 +横结肠 1 +x:1 +核裂变 1 +x:1 +水闸 1 +x:1 +紫金牛 1 +x:1 +灵丹妙药 1 +x:1 +项庄舞剑 1 +x:1 +升船机 1 +x:1 +甜水村 1 +x:1 +通什市 1 +x:1 +水门 1 +x:1 +英文版 1 +x:1 +水龙头 1 +x:1 +阿佤山 1 +x:1 +根据地 1 +x:1 +绑扎 1 +x:1 +哔叽 1 +x:1 +椅 7 +x:7 +远走高飞 1 +x:1 +居者 1 +x:1 +松柯 1 +x:1 +流动量 1 +x:1 +率员 1 +x:1 +鬃毛 1 +x:1 +隐 18 +x:18 +丝绸业 1 +x:1 +水锈 1 +x:1 +破处 1 +x:1 +日银 1 +x:1 +凤阳 1 +x:1 +横路山镇 1 +x:1 +意蕴 1 +x:1 +金小丑 1 +x:1 +罗源县 1 +x:1 +顺平县 1 +x:1 +日铁 1 +x:1 +健美操 1 +x:1 +膏血 1 +x:1 +花样队 1 +x:1 +游仙 1 +x:1 +说不清 1 +x:1 +感激不尽 1 +x:1 +花园口 1 +x:1 +满盘 1 +x:1 +水锤 1 +x:1 +民行 1 +x:1 +盐渍化 1 +x:1 +宇宙火箭 1 +x:1 +丰富多彩 1 +x:1 +垦边 1 +x:1 +本届 1 +x:1 +财贸委 1 +x:1 +袋中 1 +x:1 +终端区 1 +x:1 +马力 1 +x:1 +心灰意冷 1 +x:1 +欲念 1 +x:1 +藤牌 1 +x:1 +巢 23 +x:23 +僵死 1 +x:1 +齐鸣 1 +x:1 +否则 1 +x:1 +双蹦灯 1 +x:1 +东道主 1 +x:1 +汽车连 1 +x:1 +继往开来 1 +x:1 +中药 1 +x:1 +事务部长 1 +x:1 +化装 1 +x:1 +表格 1 +x:1 +忠良 1 +x:1 +尖兵 1 +x:1 +龙翔凤翥 1 +x:1 +福 75 +x:75 +安全系数 1 +x:1 +散热管 1 +x:1 +水针 1 +x:1 +胡作非为 1 +x:1 +无期徒刑 1 +x:1 +秋 152 +x:152 +高新科技 1 +x:1 +师团职 1 +x:1 +有理式 1 +x:1 +寒武纪 1 +x:1 +胸怀坦荡 1 +x:1 +秦朝 1 +x:1 +基础性 1 +x:1 +吮吸 1 +x:1 +墨守陈规 1 +x:1 +旅费 1 +x:1 +山城 1 +x:1 +水钢 1 +x:1 +座盘秤 1 +x:1 +紧紧巴巴 1 +x:1 +堆沟港 1 +x:1 +失道寡助 1 +x:1 +复现 1 +x:1 +傣味 1 +x:1 +预算额 1 +x:1 +犄角 1 +x:1 +满眼 1 +x:1 +起动机 1 +x:1 +法院 1 +x:1 +新城子区 1 +x:1 +含冤 1 +x:1 +水银 1 +x:1 +价重发 1 +x:1 +叹观止矣 1 +x:1 +破壳 1 +x:1 +腰眼 1 +x:1 +老视眼 1 +x:1 +正黄旗 1 +x:1 +对牛弹琴 1 +x:1 +织布 1 +x:1 +艺术系 1 +x:1 +马匹 1 +x:1 +终生 1 +x:1 +重归于好 1 +x:1 +石窟 1 +x:1 +港汊 1 +x:1 +上有老 1 +x:1 +石窑 1 +x:1 +抚躬自问 1 +x:1 +咒 4 +x:4 +农垦局 1 +x:1 +日间 1 +x:1 +硕大 1 +x:1 +塘泥 1 +x:1 +金家村 1 +x:1 +淘气 1 +x:1 +先验论 1 +x:1 +久演不衰 1 +x:1 +超尘绝俗 1 +x:1 +漫 33 +x:33 +旅趣 1 +x:1 +扣帽子 1 +x:1 +知难而上 1 +x:1 +敌敌畏 1 +x:1 +逃课 1 +x:1 +交售 1 +x:1 +沪浙皖 1 +x:1 +马厂 1 +x:1 +浮式 1 +x:1 +科明区 1 +x:1 +雁城 1 +x:1 +钟点儿 1 +x:1 +皮长公里 1 +x:1 +大麻类 1 +x:1 +参赛证 1 +x:1 +他 19823 +x:19823 +无柄叶 1 +x:1 +账单 1 +x:1 +检察长 1 +x:1 +石竹 1 +x:1 +走下坡路 1 +x:1 +演进 1 +x:1 +噩耗 1 +x:1 +烦言 1 +x:1 +痴人说梦 1 +x:1 +桥洞 1 +x:1 +巴罗克式 1 +x:1 +绶 1 +x:1 +驹 1 +x:1 +柳城县 1 +x:1 +淘汰 1 +x:1 +石章 1 +x:1 +金三角 1 +x:1 +偏瘫 1 +x:1 +酸性岩 1 +x:1 +合议庭 1 +x:1 +非饱和 1 +x:1 +社情民意 1 +x:1 +稻糠 1 +x:1 +教育学家 1 +x:1 +艨艟 1 +x:1 +杂拌儿 1 +x:1 +流动车 1 +x:1 +氨 8 +x:8 +仙居县 1 +x:1 +翠微微 1 +x:1 +开停机 1 +x:1 +惦挂 1 +x:1 +小前提 1 +x:1 +自作自受 1 +x:1 +贵 174 +x:174 +驾舆乘辇 1 +x:1 +童子 1 +x:1 +单月 1 +x:1 +核拨 1 +x:1 +传唤 1 +x:1 +石灰水 1 +x:1 +胸膈 1 +x:1 +填词 1 +x:1 +水溶液 1 +x:1 +借重 1 +x:1 +传唱 1 +x:1 +衮衮诸公 1 +x:1 +叶甜菜 1 +x:1 +基础网 1 +x:1 +敕勒川 1 +x:1 +康熙岭 1 +x:1 +灵寿绿 1 +x:1 +松枝 1 +x:1 +杂花生树 1 +x:1 +刺细胞 1 +x:1 +被褥 1 +x:1 +着迷 1 +x:1 +水晶塔 1 +x:1 +超大 1 +x:1 +赤小豆 1 +x:1 +自治机关 1 +x:1 +矿化水 1 +x:1 +竞技场 1 +x:1 +漫画化 1 +x:1 +推行面 1 +x:1 +特种部队 1 +x:1 +稻米 1 +x:1 +石料 1 +x:1 +遣怀 1 +x:1 +颈椎病 1 +x:1 +比价 1 +x:1 +石斑 1 +x:1 +高分 1 +x:1 +琦玉县 1 +x:1 +被角 1 +x:1 +似龙非龙 1 +x:1 +理合 1 +x:1 +强记 1 +x:1 +痼癖 1 +x:1 +桥牌 1 +x:1 +石方 1 +x:1 +高利 1 +x:1 +借记卡 1 +x:1 +关禁闭 1 +x:1 +胸膛 1 +x:1 +标题音乐 1 +x:1 +敲边鼓 1 +x:1 +淘汰赛 1 +x:1 +地下党 1 +x:1 +建委会 1 +x:1 +内阴型 1 +x:1 +崩溃 1 +x:1 +红筹股 1 +x:1 +甘肃团 1 +x:1 +微分学 1 +x:1 +民防 1 +x:1 +民阵 1 +x:1 +被覆 1 +x:1 +散播 1 +x:1 +纺车 1 +x:1 +水晶壶 1 +x:1 +大锅菜 1 +x:1 +病毒清 1 +x:1 +院务处 1 +x:1 +陶仓 1 +x:1 +繁华 1 +x:1 +报名点 1 +x:1 +链球 1 +x:1 +携手并肩 1 +x:1 +何尝不可 1 +x:1 +阿托品 1 +x:1 +楷体 1 +x:1 +招商 1 +x:1 +水警 1 +x:1 +法规 1 +x:1 +枪杆子 1 +x:1 +褒义 1 +x:1 +高压 1 +x:1 +散散 1 +x:1 +书坛史 1 +x:1 +涤纶厂 1 +x:1 +旧习惯 1 +x:1 +高原 1 +x:1 +插班 1 +x:1 +传呼 1 +x:1 +讯息 1 +x:1 +入保 1 +x:1 +比作 1 +x:1 +繁博 1 +x:1 +松松 1 +x:1 +胖瘦 1 +x:1 +忍痛割爱 1 +x:1 +北半球 1 +x:1 +四国 1 +x:1 +单杠 1 +x:1 +独立连 1 +x:1 +新加坡队 1 +x:1 +锅台 1 +x:1 +股评家 1 +x:1 +令人钦佩 1 +x:1 +雅 31 +x:31 +化隆 1 +x:1 +水粉画 1 +x:1 +高参 1 +x:1 +勋绩 1 +x:1 +垫圈 1 +x:1 +招聘处 1 +x:1 +醇醚 1 +x:1 +专场 1 +x:1 +植树造林 1 +x:1 +散放 1 +x:1 +照 202 +x:202 +高发 1 +x:1 +腰椎 1 +x:1 +落水狗 1 +x:1 +布娃娃 1 +x:1 +监督岗 1 +x:1 +每周日 1 +x:1 +筒瓦 1 +x:1 +兔儿爷 1 +x:1 +洗发膏 1 +x:1 +头顶 1 +x:1 +胡编 1 +x:1 +冷暖空气 1 +x:1 +高台 1 +x:1 +物构所 1 +x:1 +发颤 1 +x:1 +日语 1 +x:1 +烦劳 1 +x:1 +电脑班 1 +x:1 +发布者 1 +x:1 +被装 1 +x:1 +摆脱 1 +x:1 +尿毒症 1 +x:1 +曼海姆 1 +x:1 +疯狂 1 +x:1 +颚裂 1 +x:1 +树 672 +x:672 +迫力 1 +x:1 +黑森林 1 +x:1 +愁眉苦脸 1 +x:1 +可变资本 1 +x:1 +疯狗 1 +x:1 +参编部 1 +x:1 +气体云 1 +x:1 +坦桑尼亚 1 +x:1 +六一年 1 +x:1 +民青 1 +x:1 +寻死觅活 1 +x:1 +兴衰成败 1 +x:1 +澄海市 1 +x:1 +监督局 1 +x:1 +醇酣 1 +x:1 +高浓度 1 +x:1 +郎酒 1 +x:1 +超声 1 +x:1 +楷书 1 +x:1 +虚怀若谷 1 +x:1 +青冈县 1 +x:1 +地产股 1 +x:1 +被袋 1 +x:1 +新知 1 +x:1 +万紫千红 1 +x:1 +世博会 1 +x:1 +一上午 1 +x:1 +发送量 1 +x:1 +复派 1 +x:1 +顾问团 1 +x:1 +复活 1 +x:1 +频频 1 +x:1 +功课 1 +x:1 +表盘 1 +x:1 +昂扬 1 +x:1 +散文 1 +x:1 +瓮 1 +x:1 +原子能系 1 +x:1 +湖南路 1 +x:1 +演释 1 +x:1 +比例 1 +x:1 +赴约 1 +x:1 +衣锦还乡 1 +x:1 +高危 1 +x:1 +皮克鱼 1 +x:1 +易太镇 1 +x:1 +刀 154 +x:154 +鄂 52 +x:52 +芒廷维尤 1 +x:1 +电脑灯 1 +x:1 +不平则鸣 1 +x:1 +证券类 1 +x:1 +衢粮 1 +x:1 +参赛队 1 +x:1 +万能胶 1 +x:1 +入侵 1 +x:1 +旅途 1 +x:1 +翻天 1 +x:1 +筛选 1 +x:1 +童女 1 +x:1 +秃岭 1 +x:1 +马乡 1 +x:1 +被褥者 1 +x:1 +裴刘乡 1 +x:1 +易行 1 +x:1 +高傲 1 +x:1 +七弦琴 1 +x:1 +万劫不渝 1 +x:1 +游侠 1 +x:1 +上访办 1 +x:1 +预售处 1 +x:1 +石材 1 +x:1 +马上 1 +x:1 +塔秀寺 1 +x:1 +赶尽杀绝 1 +x:1 +拨给 1 +x:1 +木匠 1 +x:1 +文艺语言 1 +x:1 +法警 1 +x:1 +文人 1 +x:1 +石板 1 +x:1 +石松 1 +x:1 +警 110 +x:110 +公诸于世 1 +x:1 +代征 1 +x:1 +投向 1 +x:1 +高僧 1 +x:1 +地铁局 1 +x:1 +物资局 1 +x:1 +光荣榜 1 +x:1 +周转率 1 +x:1 +挖方 1 +x:1 +鄄城县 1 +x:1 +联谊会 1 +x:1 +水解 1 +x:1 +洗漱池 1 +x:1 +危害面 1 +x:1 +杜尚别 1 +x:1 +乘机 1 +x:1 +九湖镇 1 +x:1 +绝处逢生 1 +x:1 +石林 1 +x:1 +贪吃人 1 +x:1 +炉顶 1 +x:1 +马仔 1 +x:1 +元丰 1 +x:1 +富庶乡 1 +x:1 +钢筋网 1 +x:1 +散曲 1 +x:1 +民本观 1 +x:1 +烦冗 1 +x:1 +鬓发 1 +x:1 +燕东园 1 +x:1 +东苌池村 1 +x:1 +抛锚 1 +x:1 +超导 1 +x:1 +小时 1 +x:1 +二人转 1 +x:1 +非价格 1 +x:1 +日裔 1 +x:1 +人生在世 1 +x:1 +皮之不存 1 +x:1 +终 145 +x:145 +法语 1 +x:1 +垄作 1 +x:1 +柳城 1 +x:1 +喻特曼科 1 +x:1 +中秋节 1 +x:1 +硕士生 1 +x:1 +龙虎潭 1 +x:1 +窑尾 1 +x:1 +毛菇坝村 1 +x:1 +旅部 1 +x:1 +准许证 1 +x:1 +石柱 1 +x:1 +代开 1 +x:1 +反败为胜 1 +x:1 +足球报 1 +x:1 +平 579 +x:579 +逃难 1 +x:1 +收货人 1 +x:1 +格位 1 +x:1 +卵泡 1 +x:1 +普罗迪 1 +x:1 +吞吞吐吐 1 +x:1 +儒法道墨 1 +x:1 +古交西曲 1 +x:1 +民间 1 +x:1 +跳羚 1 +x:1 +水袖 1 +x:1 +燕头 1 +x:1 +私盖 1 +x:1 +百姓家 1 +x:1 +石油城 1 +x:1 +就是说 1 +x:1 +马体 1 +x:1 +容姿 1 +x:1 +欲盖弥彰 1 +x:1 +黔江 1 +x:1 +牵肠挂肚 1 +x:1 +气动力 1 +x:1 +沆瀣一气 1 +x:1 +老少无欺 1 +x:1 +山墙 1 +x:1 +碧波万顷 1 +x:1 +暑假 1 +x:1 +告警 1 +x:1 +欣欣向荣 1 +x:1 +生计 1 +x:1 +举 176 +x:176 +埃 128 +x:128 +农展馆 1 +x:1 +熹微 1 +x:1 +痼疾 1 +x:1 +救生袋 1 +x:1 +形形色色 1 +x:1 +获得者 1 +x:1 +生词 1 +x:1 +海拉尔 1 +x:1 +不成想 1 +x:1 +茶匙 1 +x:1 +整理 1 +x:1 +成熟林 1 +x:1 +谙晓 1 +x:1 +韩城市 1 +x:1 +什邡县 1 +x:1 +强行 1 +x:1 +法官法 1 +x:1 +代序 1 +x:1 +龙虎滩 1 +x:1 +停滞论 1 +x:1 +僵直 1 +x:1 +社会学系 1 +x:1 +化钱 1 +x:1 +参赛面 1 +x:1 +十年一剑 1 +x:1 +坡梁地 1 +x:1 +冠脉 1 +x:1 +积水潭 1 +x:1 +垄三 1 +x:1 +闺房 1 +x:1 +查询表 1 +x:1 +平定镇 1 +x:1 +旬末 1 +x:1 +所到之处 1 +x:1 +力量型 1 +x:1 +局部 1 +x:1 +告诉 1 +x:1 +水晶宫 1 +x:1 +茶卤 1 +x:1 +月度奖 1 +x:1 +童声 1 +x:1 +经年累月 1 +x:1 +营 84 +x:84 +非核心 1 +x:1 +艺术性 1 +x:1 +猝 1 +x:1 +电阻器 1 +x:1 +日见 1 +x:1 +容奇 1 +x:1 +诰命 1 +x:1 +南华队 1 +x:1 +文体室 1 +x:1 +告诫 1 +x:1 +直截 1 +x:1 +四周 1 +x:1 +传回 1 +x:1 +莫如 1 +x:1 +苍翠欲滴 1 +x:1 +放过 1 +x:1 +徐州市 1 +x:1 +入住 1 +x:1 +文艺队 1 +x:1 +近似值 1 +x:1 +异性 1 +x:1 +散架 1 +x:1 +劝业场 1 +x:1 +西北军 1 +x:1 +出落 1 +x:1 +教育局 1 +x:1 +内视反听 1 +x:1 +填表 1 +x:1 +万般无奈 1 +x:1 +收藏 1 +x:1 +水表 1 +x:1 +亳州市 1 +x:1 +教育展 1 +x:1 +高兴 1 +x:1 +卧具 1 +x:1 +天主堂 1 +x:1 +私有制 1 +x:1 +工作日制 1 +x:1 +传入 1 +x:1 +逃遁 1 +x:1 +交代 1 +x:1 +隐形眼镜 1 +x:1 +无意 1 +x:1 +麻旺区 1 +x:1 +山重水复 1 +x:1 +隗 6 +x:6 +萱草 1 +x:1 +黄铁矿 1 +x:1 +六机部 1 +x:1 +超标准 1 +x:1 +教育家 1 +x:1 +滋润 1 +x:1 +自做主张 1 +x:1 +复检 1 +x:1 +水边 1 +x:1 +枪林弹雨 1 +x:1 +对号入座 1 +x:1 +翻开 1 +x:1 +逃避 1 +x:1 +交付 1 +x:1 +法国梧桐 1 +x:1 +硅藻土 1 +x:1 +受款方 1 +x:1 +越橘 1 +x:1 +战场坪村 1 +x:1 +橄榄 1 +x:1 +龙须沟 1 +x:1 +水运 1 +x:1 +香港团 1 +x:1 +跑 575 +x:575 +文体局 1 +x:1 +抗联 1 +x:1 +挖掘 1 +x:1 +衷心 1 +x:1 +保暖棚 1 +x:1 +竟 471 +x:471 +龙须河 1 +x:1 +高教委 1 +x:1 +有门儿 1 +x:1 +交予 1 +x:1 +水迹 1 +x:1 +可交换性 1 +x:1 +枕骨 1 +x:1 +渊深 1 +x:1 +学名 1 +x:1 +借问 1 +x:1 +逃逸 1 +x:1 +扶残助残 1 +x:1 +交井 1 +x:1 +交互 1 +x:1 +话儿 1 +x:1 +圪节 1 +x:1 +巴厘虎 1 +x:1 +弦外之音 1 +x:1 +淡旺季 1 +x:1 +强辩 1 +x:1 +妥甸镇 1 +x:1 +只限 1 +x:1 +茨菰 1 +x:1 +周末游 1 +x:1 +四千 1 +x:1 +几朝几夕 1 +x:1 +仁以恤民 1 +x:1 +传出 1 +x:1 +抗药性 1 +x:1 +冠绝群伦 1 +x:1 +赤岗村 1 +x:1 +三星 1 +x:1 +润 25 +x:25 +膝盖骨 1 +x:1 +办证费 1 +x:1 +港督 1 +x:1 +光临 1 +x:1 +童心 1 +x:1 +逆温层 1 +x:1 +强辞 1 +x:1 +组织疗法 1 +x:1 +钳修 1 +x:1 +可看性 1 +x:1 +豺狼当道 1 +x:1 +脑筋 1 +x:1 +表率 1 +x:1 +物尽其用 1 +x:1 +白骨精 1 +x:1 +偏狭 1 +x:1 +四化 1 +x:1 +强迫 1 +x:1 +金田村 1 +x:1 +投劳 1 +x:1 +无产者 1 +x:1 +粮食部 1 +x:1 +生殖力 1 +x:1 +似虎非虎 1 +x:1 +复根 1 +x:1 +复核 1 +x:1 +整个儿 1 +x:1 +可信性 1 +x:1 +智斗 1 +x:1 +长影厂 1 +x:1 +涌流 1 +x:1 +成熟性 1 +x:1 +渊海 1 +x:1 +乐舞 1 +x:1 +棍儿茶 1 +x:1 +排头兵 1 +x:1 +面前坡村 1 +x:1 +水车 1 +x:1 +载 239 +x:239 +罪魁 1 +x:1 +井井有条 1 +x:1 +公牛队 1 +x:1 +朝天区 1 +x:1 +青纱帐 1 +x:1 +原始积累 1 +x:1 +辛辛苦苦 1 +x:1 +三明 1 +x:1 +垃圾袋 1 +x:1 +增光 1 +x:1 +稻秧 1 +x:1 +豪言壮语 1 +x:1 +整版 1 +x:1 +信贷部 1 +x:1 +童年 1 +x:1 +走形式 1 +x:1 +踯躅 1 +x:1 +相似形 1 +x:1 +渔猎 1 +x:1 +电灌站 1 +x:1 +容忍 1 +x:1 +文艺部 1 +x:1 +白领阶层 1 +x:1 +大白菜 1 +x:1 +增兵 1 +x:1 +咯咯吱吱 1 +x:1 +袍子 1 +x:1 +核果 1 +x:1 +余音绕梁 1 +x:1 +发送键 1 +x:1 +生趣 1 +x:1 +稻种 1 +x:1 +告负 1 +x:1 +高城 1 +x:1 +棠 1 +x:1 +暹罗湾 1 +x:1 +变质岩 1 +x:1 +保护法 1 +x:1 +狭鳕 1 +x:1 +满洲 1 +x:1 +极目远望 1 +x:1 +绑票 1 +x:1 +宁乡县 1 +x:1 +疯瘫 1 +x:1 +卧倒 1 +x:1 +颂扬 1 +x:1 +鸭河口 1 +x:1 +驱风油 1 +x:1 +驱使 1 +x:1 +提案组 1 +x:1 +生路 1 +x:1 +主治医师 1 +x:1 +满头大汗 1 +x:1 +⑶ 5 +x:5 +旧地重游 1 +x:1 +份 1234 +x:1234 +螳螂山 1 +x:1 +血渍 1 +x:1 +海战史 1 +x:1 +强身 1 +x:1 +鸣锣开道 1 +x:1 +动人心弦 1 +x:1 +大檐帽 1 +x:1 +笑里藏刀 1 +x:1 +烦嚣 1 +x:1 +光伏 1 +x:1 +收获 1 +x:1 +卫戍区 1 +x:1 +五斗柜 1 +x:1 +依赖感 1 +x:1 +吃不开 1 +x:1 +油纸伞 1 +x:1 +藤椅 1 +x:1 +稻神 1 +x:1 +彻夜 1 +x:1 +高平市 1 +x:1 +仁义 1 +x:1 +游伴 1 +x:1 +高地 1 +x:1 +横水乡 1 +x:1 +生财 1 +x:1 +率众 1 +x:1 +机修厂 1 +x:1 +治水 1 +x:1 +金川市 1 +x:1 +架桥 1 +x:1 +有机质 1 +x:1 +纯中药 1 +x:1 +四则 1 +x:1 +自理 1 +x:1 +流入国 1 +x:1 +拆迁户 1 +x:1 +颈椎炎 1 +x:1 +智敏 1 +x:1 +功过 1 +x:1 +以身试法 1 +x:1 +秃子 1 +x:1 +高坪 1 +x:1 +高坨 1 +x:1 +日辉 1 +x:1 +制品厂 1 +x:1 +梯河 1 +x:1 +高坡 1 +x:1 +赢余 1 +x:1 +喷红欲燃 1 +x:1 +高邮市 1 +x:1 +交会 1 +x:1 +理入 1 +x:1 +少怀壮志 1 +x:1 +阴鸷 1 +x:1 +甜甜蜜蜜 1 +x:1 +光源感 1 +x:1 +恤金 1 +x:1 +伏跗室 1 +x:1 +病怏怏 1 +x:1 +泥浆状 1 +x:1 +黄曲霉菌 1 +x:1 +骨疏松症 1 +x:1 +僻地 1 +x:1 +啧啧声 1 +x:1 +替补队员 1 +x:1 +扛鼎之作 1 +x:1 +曲艺节 1 +x:1 +散手 1 +x:1 +朱庄 1 +x:1 +篷布 1 +x:1 +益阳市 1 +x:1 +托儿所 1 +x:1 +原则性 1 +x:1 +燕尔 1 +x:1 +刘乡 1 +x:1 +假票 1 +x:1 +生身 1 +x:1 +传单 1 +x:1 +散打 1 +x:1 +叩响 1 +x:1 +道党委 1 +x:1 +比翼竞飞 1 +x:1 +白俄罗斯 1 +x:1 +上访团 1 +x:1 +嫁祸于人 1 +x:1 +投票权 1 +x:1 +刘一 1 +x:1 +度过 1 +x:1 +贝母 1 +x:1 +桐乡县 1 +x:1 +增刊 1 +x:1 +酸根 1 +x:1 +监督室 1 +x:1 +漳县 1 +x:1 +散户 1 +x:1 +大丈夫 1 +x:1 +郊县 1 +x:1 +满清 1 +x:1 +会话 1 +x:1 +别妻离子 1 +x:1 +忱 2 +x:2 +发人深醒 1 +x:1 +超强 1 +x:1 +燕居 1 +x:1 +收聚 1 +x:1 +主观性 1 +x:1 +栈桥 1 +x:1 +满满 1 +x:1 +架次 1 +x:1 +哈站 1 +x:1 +名噪一时 1 +x:1 +童工 1 +x:1 +疯病 1 +x:1 +小龙坎 1 +x:1 +龙凤乡 1 +x:1 +政院 1 +x:1 +四免 1 +x:1 +盖章人 1 +x:1 +蜡 6 +x:6 +稻穗 1 +x:1 +防毒 1 +x:1 +存栏数 1 +x:1 +水费 1 +x:1 +近似商 1 +x:1 +桩子 1 +x:1 +教育处 1 +x:1 +氙气 1 +x:1 +水质 1 +x:1 +水货 1 +x:1 +膺 1 +x:1 +喷绘 1 +x:1 +旋风装 1 +x:1 +冤假错案 1 +x:1 +叶尖 1 +x:1 +络子 1 +x:1 +偃虹堤 1 +x:1 +颅底 1 +x:1 +权利人 1 +x:1 +查询费 1 +x:1 +谋利者 1 +x:1 +硅单晶 1 +x:1 +举世无双 1 +x:1 +弹奏 1 +x:1 +郊区 1 +x:1 +增势 1 +x:1 +怡然自得 1 +x:1 +柳叶 1 +x:1 +酸梅 1 +x:1 +约旦河谷 1 +x:1 +颠倒是非 1 +x:1 +团聚 1 +x:1 +高呼 1 +x:1 +民选 1 +x:1 +黑山县 1 +x:1 +弹着点 1 +x:1 +教育奖 1 +x:1 +高喊 1 +x:1 +会员证 1 +x:1 +列车表 1 +x:1 +涌溢 1 +x:1 +渊源 1 +x:1 +鸡血藤 1 +x:1 +转增 1 +x:1 +胰脂酶 1 +x:1 +主存储器 1 +x:1 +生辉 1 +x:1 +投入 1 +x:1 +居首 1 +x:1 +童山 1 +x:1 +礼仪馆 1 +x:1 +党纪国法 1 +x:1 +萨拉热窝 1 +x:1 +雷丁 1 +x:1 +凤辇 1 +x:1 +生命不息 1 +x:1 +地学界 1 +x:1 +汽车队 1 +x:1 +酸楚 1 +x:1 +复比 1 +x:1 +炮制者 1 +x:1 +化学反应 1 +x:1 +茸 1 +x:1 +万头攒动 1 +x:1 +健美素 1 +x:1 +理发 1 +x:1 +籁 4 +x:4 +键位 1 +x:1 +硕士点 1 +x:1 +人迹罕至 1 +x:1 +日货 1 +x:1 +米饭粒 1 +x:1 +名留青史 1 +x:1 +超市 1 +x:1 +横贡缎 1 +x:1 +易货 1 +x:1 +相近 1 +x:1 +三·一八 1 +x:1 +里程表 1 +x:1 +全天候 1 +x:1 +腈纶 1 +x:1 +旅长 1 +x:1 +超常 1 +x:1 +备用胎 1 +x:1 +控告 1 +x:1 +在场者 1 +x:1 +异花传粉 1 +x:1 +萎蔫 1 +x:1 +鹿场 1 +x:1 +理化 1 +x:1 +增发 1 +x:1 +霞晖 1 +x:1 +四假 1 +x:1 +形式逻辑 1 +x:1 +经院科学 1 +x:1 +酸槽 1 +x:1 +高唐 1 +x:1 +核收 1 +x:1 +三保地 1 +x:1 +恬淡 1 +x:1 +胰腺 1 +x:1 +东西部 1 +x:1 +斩尽杀绝 1 +x:1 +比萨屋 1 +x:1 +高唱 1 +x:1 +检验关 1 +x:1 +定向生 1 +x:1 +告辞 1 +x:1 +名车者 1 +x:1 +度日 1 +x:1 +价目 1 +x:1 +传动 1 +x:1 +印欧语 1 +x:1 +抢劫罪 1 +x:1 +插画 1 +x:1 +佤族人 1 +x:1 +碰见 1 +x:1 +宇宙 1 +x:1 +引线人 1 +x:1 +立定脚跟 1 +x:1 +疣鼻天鹅 1 +x:1 +石担 1 +x:1 +燕川 1 +x:1 +蟠 1 +x:1 +上场 1 +x:1 +日趋 1 +x:1 +整点 1 +x:1 +石拱 1 +x:1 +冰棍儿 1 +x:1 +拖配 1 +x:1 +说不着 1 +x:1 +洪水猛兽 1 +x:1 +耿耿不忘 1 +x:1 +帕尔马市 1 +x:1 +参评率 1 +x:1 +南科西嘉 1 +x:1 +石洞 1 +x:1 +日经指数 1 +x:1 +生肖 1 +x:1 +扶贫助优 1 +x:1 +剧作家 1 +x:1 +四心 1 +x:1 +暑季 1 +x:1 +工联主义 1 +x:1 +破例 1 +x:1 +生肉 1 +x:1 +抑蒸减耗 1 +x:1 +受热面 1 +x:1 +龙虎斗 1 +x:1 +扑热息痛 1 +x:1 +拉拉杂杂 1 +x:1 +感谢信 1 +x:1 +亏量 1 +x:1 +名画家 1 +x:1 +淘箩 1 +x:1 +岗美镇 1 +x:1 +长虹桥 1 +x:1 +落水管 1 +x:1 +生育 1 +x:1 +政风 1 +x:1 +出海人 1 +x:1 +越是 1 +x:1 +瞵 1 +x:1 +阴 47 +x:47 +四快 1 +x:1 +苏皖 1 +x:1 +敲诈勒索 1 +x:1 +芡实 1 +x:1 +垫布 1 +x:1 +翻印 1 +x:1 +翻卷 1 +x:1 +有机肥 1 +x:1 +票价表 1 +x:1 +整编 1 +x:1 +丰赡鲜活 1 +x:1 +褒恤 1 +x:1 +剜 1 +x:1 +散水 1 +x:1 +满怀 1 +x:1 +形同 1 +x:1 +蒸汽费 1 +x:1 +千日红 1 +x:1 +西店刘村 1 +x:1 +鸟迷 1 +x:1 +审批卡 1 +x:1 +着色率 1 +x:1 +投师 1 +x:1 +消炎片 1 +x:1 +译员 1 +x:1 +救济品 1 +x:1 +客轮 1 +x:1 +别内河 1 +x:1 +石浦 1 +x:1 +空勤团 1 +x:1 +强击机 1 +x:1 +投建 1 +x:1 +针 86 +x:86 +义侠记 1 +x:1 +中央委员 1 +x:1 +海外版 1 +x:1 +野猫 1 +x:1 +广州湾 1 +x:1 +避而不谈 1 +x:1 +彪炳春秋 1 +x:1 +盒饭 1 +x:1 +生者 1 +x:1 +活鲜 1 +x:1 +挖潜 1 +x:1 +几时 1 +x:1 +潦倒 1 +x:1 +复摆 1 +x:1 +渺无声息 1 +x:1 +童友 1 +x:1 +诊疗所 1 +x:1 +书评版 1 +x:1 +超凡 1 +x:1 +豆芽儿 1 +x:1 +摩擦性 1 +x:1 +石涯 1 +x:1 +超出 1 +x:1 +十字架形 1 +x:1 +爆炸波 1 +x:1 +尉氏县 1 +x:1 +广州港 1 +x:1 +中北区 1 +x:1 +合作者 1 +x:1 +清污剂 1 +x:1 +水荒 1 +x:1 +价廉物美 1 +x:1 +大锅话 1 +x:1 +剧艺社 1 +x:1 +有约在先 1 +x:1 +现时代 1 +x:1 +门槛儿 1 +x:1 +垫底 1 +x:1 +水草 1 +x:1 +漫画家 1 +x:1 +生机勃勃 1 +x:1 +几维鸟 1 +x:1 +有增无已 1 +x:1 +黔南 1 +x:1 +世乒赛 1 +x:1 +覆盖度 1 +x:1 +就业部 1 +x:1 +蓊蓊郁郁 1 +x:1 +原子价 1 +x:1 +札记 1 +x:1 +贿选 1 +x:1 +网络迷 1 +x:1 +送达 1 +x:1 +检索室 1 +x:1 +复旧 1 +x:1 +复旦 1 +x:1 +牧羊人 1 +x:1 +弄 171 +x:171 +水冲式 1 +x:1 +翻刻 1 +x:1 +超假 1 +x:1 +投影 1 +x:1 +照护 1 +x:1 +制服 1 +x:1 +高官 1 +x:1 +厂休 1 +x:1 +相同点 1 +x:1 +议员团 1 +x:1 +沙坪坝区 1 +x:1 +监督哨 1 +x:1 +频遭 1 +x:1 +蓊郁 1 +x:1 +无性 1 +x:1 +许多 1 +x:1 +频道 1 +x:1 +瑕不掩瑜 1 +x:1 +讲讲 1 +x:1 +沉住气 1 +x:1 +锑华 1 +x:1 +贿金 1 +x:1 +水花 1 +x:1 +综合症 1 +x:1 +无怪 1 +x:1 +检查室 1 +x:1 +学术性 1 +x:1 +凝神专注 1 +x:1 +油 212 +x:212 +破产 1 +x:1 +嘉定区 1 +x:1 +审批制 1 +x:1 +江川县 1 +x:1 +伊瓜苏 1 +x:1 +对不住 1 +x:1 +平步登天 1 +x:1 +万能论 1 +x:1 +涅瓦河 1 +x:1 +投弹 1 +x:1 +芦苇丛 1 +x:1 +中学部 1 +x:1 +讲话 1 +x:1 +教育团 1 +x:1 +高密 1 +x:1 +摆摊者 1 +x:1 +土家族 1 +x:1 +讲评 1 +x:1 +报修单 1 +x:1 +容县 1 +x:1 +如见其人 1 +x:1 +高寒 1 +x:1 +温习 1 +x:1 +复方 1 +x:1 +收载 1 +x:1 +温书 1 +x:1 +望城县 1 +x:1 +复文 1 +x:1 +笃行不倦 1 +x:1 +讲课 1 +x:1 +星虫 1 +x:1 +满意 1 +x:1 +碰钉子 1 +x:1 +匪气 1 +x:1 +江界市 1 +x:1 +理工 1 +x:1 +请 1199 +x:1199 +古装戏 1 +x:1 +浸 20 +x:20 +聚心成业 1 +x:1 +清秀 1 +x:1 +零工 1 +x:1 +管道网 1 +x:1 +精明强干 1 +x:1 +龄 12 +x:12 +材料部 1 +x:1 +伪麻黄碱 1 +x:1 +复数 1 +x:1 +整组 1 +x:1 +翻动 1 +x:1 +锅子 1 +x:1 +四平 1 +x:1 +石油 1 +x:1 +按图索骥 1 +x:1 +巴解组织 1 +x:1 +监督员 1 +x:1 +O 1 +x:1 +百花莲 1 +x:1 +收辑 1 +x:1 +动不动 1 +x:1 +蚕宝宝 1 +x:1 +保护性 1 +x:1 +嘉定县 1 +x:1 +雄狮 1 +x:1 +稻田 1 +x:1 +幅 502 +x:502 +上坪 1 +x:1 +颅内 1 +x:1 +酸枣 1 +x:1 +核武 1 +x:1 +脑瘤 1 +x:1 +就业量 1 +x:1 +走马灯 1 +x:1 +脑瘫 1 +x:1 +光荣户 1 +x:1 +动画部 1 +x:1 +超储 1 +x:1 +整纸 1 +x:1 +提案牌 1 +x:1 +水色 1 +x:1 +一表人材 1 +x:1 +隆福寺 1 +x:1 +奶山羊 1 +x:1 +直辖市 1 +x:1 +整纪 1 +x:1 +尖刀组 1 +x:1 +理应 1 +x:1 +浇洒 1 +x:1 +医政路 1 +x:1 +功耗 1 +x:1 +陌路 1 +x:1 +抢劫犯 1 +x:1 +四川 1 +x:1 +七运会 1 +x:1 +高墙 1 +x:1 +血青素 1 +x:1 +脏言 1 +x:1 +增幅 1 +x:1 +昼长夜短 1 +x:1 +瑞方 1 +x:1 +架构 1 +x:1 +卧铺票 1 +x:1 +荒碱地 1 +x:1 +意见簿 1 +x:1 +优胜劣败 1 +x:1 +贪天之功 1 +x:1 +后陈庄村 1 +x:1 +玩世不恭 1 +x:1 +意味深长 1 +x:1 +斜拉索桥 1 +x:1 +航标灯 1 +x:1 +苏瓦 1 +x:1 +整个 1 +x:1 +水臌 1 +x:1 +水月庵村 1 +x:1 +建阳市 1 +x:1 +暑天 1 +x:1 +价签 1 +x:1 +牛痘苗 1 +x:1 +塞规 1 +x:1 +搬进 1 +x:1 +磷酸 1 +x:1 +高士 1 +x:1 +传开 1 +x:1 +循章摘句 1 +x:1 +眩晕 1 +x:1 +浅水 1 +x:1 +泼冷水 1 +x:1 +旅顺 1 +x:1 +凌乱 1 +x:1 +投射 1 +x:1 +高声 1 +x:1 +眼眉 1 +x:1 +轻口薄舌 1 +x:1 +大葆台 1 +x:1 +同气相求 1 +x:1 +徽章 1 +x:1 +洗染店 1 +x:1 +高堂 1 +x:1 +资料架 1 +x:1 +古今中外 1 +x:1 +掏空 1 +x:1 +基里巴斯 1 +x:1 +热泪盈眶 1 +x:1 +膀子 1 +x:1 +增建 1 +x:1 +满拉 1 +x:1 +螺丝 1 +x:1 +财革法 1 +x:1 +鹿娃 1 +x:1 +胡瓜 1 +x:1 +观庙乡 1 +x:1 +乐谱 1 +x:1 +拄杖者 1 +x:1 +盈 20 +x:20 +独立营 1 +x:1 +宣 39 +x:39 +十三经 1 +x:1 +降半旗 1 +x:1 +要略 1 +x:1 +社会学界 1 +x:1 +招远县 1 +x:1 +高塔 1 +x:1 +资料柜 1 +x:1 +三有 1 +x:1 +功能 1 +x:1 +伶仃 1 +x:1 +无核武器 1 +x:1 +乌台诗 1 +x:1 +核桃 1 +x:1 +复明 1 +x:1 +海盗船 1 +x:1 +一发 1 +x:1 +光荣感 1 +x:1 +职务工资 1 +x:1 +公安部 1 +x:1 +艺术楼 1 +x:1 +蜈蚣式 1 +x:1 +复查 1 +x:1 +燕儿 1 +x:1 +新立村 1 +x:1 +长白参 1 +x:1 +沪港机 1 +x:1 +收购 1 +x:1 +浮皮潦草 1 +x:1 +挖法 1 +x:1 +辅助性 1 +x:1 +收贷 1 +x:1 +坐视不救 1 +x:1 +收费 1 +x:1 +皎然 1 +x:1 +水肿 1 +x:1 +火油炉 1 +x:1 +浇水 1 +x:1 +谨慎者 1 +x:1 +恭城县 1 +x:1 +强者 1 +x:1 +定价权 1 +x:1 +脑瓜 1 +x:1 +厄瓜多尔 1 +x:1 +推进会 1 +x:1 +南加州 1 +x:1 +责任人员 1 +x:1 +轻率 1 +x:1 +水肥 1 +x:1 +刃具 1 +x:1 +评判者 1 +x:1 +散漫 1 +x:1 +心 869 +x:869 +生菜 1 +x:1 +鸠江区 1 +x:1 +油菜子 1 +x:1 +西山区 1 +x:1 +饽饽 1 +x:1 +兴凯湖 1 +x:1 +互济性 1 +x:1 +石湖 1 +x:1 +乐趣 1 +x:1 +鹿寨 1 +x:1 +增开 1 +x:1 +挖沙 1 +x:1 +至死不悟 1 +x:1 +游府西街 1 +x:1 +富集区 1 +x:1 +传布 1 +x:1 +增强 1 +x:1 +水能 1 +x:1 +粉线 1 +x:1 +操行 1 +x:1 +屋内 1 +x:1 +红壤陶 1 +x:1 +扒开 1 +x:1 +县上 1 +x:1 +讲解 1 +x:1 +居间 1 +x:1 +专业法 1 +x:1 +复来 1 +x:1 +县份 1 +x:1 +日光浴 1 +x:1 +藤木 1 +x:1 +河南坠子 1 +x:1 +旅馆 1 +x:1 +高处 1 +x:1 +散文集 1 +x:1 +气脉贯畅 1 +x:1 +变速运动 1 +x:1 +冥冥之中 1 +x:1 +投工 1 +x:1 +保税仓 1 +x:1 +城厢镇 1 +x:1 +素可泰 1 +x:1 +用稿 1 +x:1 +表演性 1 +x:1 +作威作福 1 +x:1 +梢 1 +x:1 +谥 1 +x:1 +越方 1 +x:1 +绿头巾 1 +x:1 +复杂 1 +x:1 +孩子 1 +x:1 +高大 1 +x:1 +抗辩 1 +x:1 +秋毫 1 +x:1 +油价 1 +x:1 +袋子 1 +x:1 +秦王 1 +x:1 +面目全非 1 +x:1 +南湾里 1 +x:1 +书包带 1 +x:1 +走村串户 1 +x:1 +理当 1 +x:1 +高奏 1 +x:1 +地头虎 1 +x:1 +复本 1 +x:1 +应税面 1 +x:1 +生荒 1 +x:1 +藤条 1 +x:1 +冰封雪飘 1 +x:1 +磷都 1 +x:1 +四小 1 +x:1 +中山东路 1 +x:1 +复机 1 +x:1 +查询者 1 +x:1 +入世 1 +x:1 +钟点 1 +x:1 +天葬场 1 +x:1 +法苑 1 +x:1 +市政区 1 +x:1 +生药 1 +x:1 +桐乡市 1 +x:1 +斯温登 1 +x:1 +天长日久 1 +x:1 +功臣 1 +x:1 +土腥味儿 1 +x:1 +上海交大 1 +x:1 +浇注 1 +x:1 +理墒 1 +x:1 +翻地 1 +x:1 +越战 1 +x:1 +引擎盖 1 +x:1 +四体不勤 1 +x:1 +成为 1 +x:1 +巡防 1 +x:1 +平均价 1 +x:1 +小店乡 1 +x:1 +本事 1 +x:1 +华员会 1 +x:1 +剖析 1 +x:1 +高庙 1 +x:1 +青海湖 1 +x:1 +类群 1 +x:1 +砘 1 +x:1 +水螅 1 +x:1 +巡逻 1 +x:1 +石椅 1 +x:1 +逻辑值 1 +x:1 +鹿岛 1 +x:1 +迫导向 1 +x:1 +塞达 1 +x:1 +庄重性 1 +x:1 +高度 1 +x:1 +教育厅 1 +x:1 +珠穆朗玛 1 +x:1 +养路工 1 +x:1 +本人 1 +x:1 +水田区 1 +x:1 +赊账单 1 +x:1 +姬路市 1 +x:1 +弄清 1 +x:1 +三合板 1 +x:1 +救护所 1 +x:1 +颂歌 1 +x:1 +四定 1 +x:1 +教育司 1 +x:1 +成习 1 +x:1 +成书 1 +x:1 +教育台 1 +x:1 +技能班 1 +x:1 +教育史 1 +x:1 +四害 1 +x:1 +栏板 1 +x:1 +漫画式 1 +x:1 +抗衡 1 +x:1 +监察部门 1 +x:1 +薄地 1 +x:1 +诗情画意 1 +x:1 +石楠 1 +x:1 +夜大学 1 +x:1 +成亲 1 +x:1 +容器 1 +x:1 +肿物 1 +x:1 +喆 8 +x:8 +成人 1 +x:1 +蓝绿色 1 +x:1 +平淡淡 1 +x:1 +手术组 1 +x:1 +成交 1 +x:1 +合议制 1 +x:1 +网围栏 1 +x:1 +新开河街 1 +x:1 +类编 1 +x:1 +觉着 1 +x:1 +保暖性 1 +x:1 +统战 1 +x:1 +朗诵 1 +x:1 +石榴 1 +x:1 +四季 1 +x:1 +格拉玛 1 +x:1 +发财狂 1 +x:1 +无核白 1 +x:1 +高帽 1 +x:1 +绥芬河 1 +x:1 +指腹为婚 1 +x:1 +贿赂公行 1 +x:1 +表演机 1 +x:1 +霞浦 1 +x:1 +保洁权 1 +x:1 +双优 1 +x:1 +理塘 1 +x:1 +郊外 1 +x:1 +同病相连 1 +x:1 +出发地 1 +x:1 +本义 1 +x:1 +燕园 1 +x:1 +寻呼台 1 +x:1 +夜市街 1 +x:1 +烦忧 1 +x:1 +新墨西哥 1 +x:1 +丝绸展 1 +x:1 +本书 1 +x:1 +针松 1 +x:1 +混淆视听 1 +x:1 +石槽 1 +x:1 +本乡 1 +x:1 +南岭村 1 +x:1 +库存量 1 +x:1 +预约 1 +x:1 +烦心 1 +x:1 +线桥 1 +x:1 +天涯海角 1 +x:1 +高干 1 +x:1 +高平 1 +x:1 +狭长 1 +x:1 +中果皮 1 +x:1 +塞车 1 +x:1 +讲辞 1 +x:1 +俭从何来 1 +x:1 +石栗 1 +x:1 +垫子 1 +x:1 +石栏 1 +x:1 +超员 1 +x:1 +高徒 1 +x:1 +资料性 1 +x:1 +水蚀 1 +x:1 +庄重感 1 +x:1 +峨眉山 1 +x:1 +针灸学 1 +x:1 +畸低 1 +x:1 +消夜 1 +x:1 +容城 1 +x:1 +阳刚 1 +x:1 +镇定剂 1 +x:1 +投子 1 +x:1 +乐评 1 +x:1 +连理枝 1 +x:1 +共同性 1 +x:1 +水蚤 1 +x:1 +约克 1 +x:1 +视做 1 +x:1 +增多 1 +x:1 +百货店 1 +x:1 +共产党 1 +x:1 +察右前旗 1 +x:1 +薄坯 1 +x:1 +气密性 1 +x:1 +化验 1 +x:1 +寇仇 1 +x:1 +周转粮 1 +x:1 +舀子 1 +x:1 +羊腥汤 1 +x:1 +捣鬼 1 +x:1 +水蛇 1 +x:1 +痛 85 +x:85 +石骨铁硬 1 +x:1 +欢迎辞 1 +x:1 +信贷额 1 +x:1 +主谈手 1 +x:1 +讲述 1 +x:1 +父母亲 1 +x:1 +咕咚 1 +x:1 +磴口 1 +x:1 +水蛭 1 +x:1 +日久天长 1 +x:1 +年青 1 +x:1 +独创性 1 +x:1 +出租人 1 +x:1 +石桥 1 +x:1 +增大 1 +x:1 +植入 1 +x:1 +王家畈乡 1 +x:1 +老羞成怒 1 +x:1 +大队长 1 +x:1 +收讫 1 +x:1 +政务官 1 +x:1 +制假术 1 +x:1 +早已 1 +x:1 +高弟 1 +x:1 +勋爵 1 +x:1 +最前线 1 +x:1 +证券班 1 +x:1 +熹光 1 +x:1 +痰桶 1 +x:1 +油葵 1 +x:1 +满族 1 +x:1 +号召者 1 +x:1 +高强 1 +x:1 +简化汉字 1 +x:1 +收烘站 1 +x:1 +成例 1 +x:1 +整章 1 +x:1 +投宿 1 +x:1 +选举会 1 +x:1 +冷飕飕 1 +x:1 +畏惧 1 +x:1 +本位 1 +x:1 +鬣 1 +x:1 +凿空 1 +x:1 +葫蔓藤 1 +x:1 +石棉 1 +x:1 +邯农 1 +x:1 +本体 1 +x:1 +北横东街 1 +x:1 +水虿 1 +x:1 +主创者 1 +x:1 +早米苋 1 +x:1 +满文 1 +x:1 +干燥箱 1 +x:1 +翻回 1 +x:1 +水虱 1 +x:1 +壮志凌云 1 +x:1 +僵硬 1 +x:1 +乙醚 1 +x:1 +非关税 1 +x:1 +中年级 1 +x:1 +表示 1 +x:1 +窃 42 +x:42 +监督台 1 +x:1 +黄金时代 1 +x:1 +七人制 1 +x:1 +监督司 1 +x:1 +保护林 1 +x:1 +油泉子 1 +x:1 +世妇会 1 +x:1 +代号 1 +x:1 +日常 1 +x:1 +消极怠工 1 +x:1 +无声无息 1 +x:1 +娼妓 1 +x:1 +牙买加队 1 +x:1 +日光棚 1 +x:1 +阳关村 1 +x:1 +民食 1 +x:1 +娼妇 1 +x:1 +休息日 1 +x:1 +代发 1 +x:1 +邻接权 1 +x:1 +西北局 1 +x:1 +民风 1 +x:1 +哇 17 +x:17 +中子流 1 +x:1 +草药店 1 +x:1 +连环 1 +x:1 +酸性 1 +x:1 +莫名 1 +x:1 +日落 1 +x:1 +银根菜 1 +x:1 +役使 1 +x:1 +浮云 1 +x:1 +罗马市 1 +x:1 +公诉人 1 +x:1 +宣传栏 1 +x:1 +水藻 1 +x:1 +砖瓦窑 1 +x:1 +夸张 1 +x:1 +哄传 1 +x:1 +高峻 1 +x:1 +次方米 1 +x:1 +枸杞 1 +x:1 +油门线 1 +x:1 +袋底 1 +x:1 +髋关节 1 +x:1 +参赛马 1 +x:1 +磊磊落落 1 +x:1 +微血管 1 +x:1 +中到大雨 1 +x:1 +桑田 1 +x:1 +淘汰药 1 +x:1 +高小 1 +x:1 +自负盈亏 1 +x:1 +高射 1 +x:1 +高尚 1 +x:1 +泊位 1 +x:1 +监督卡 1 +x:1 +黑啤酒 1 +x:1 +西雅图 1 +x:1 +百叶箱 1 +x:1 +代印 1 +x:1 +借 395 +x:395 +呜呜 1 +x:1 +熊河 1 +x:1 +累月经年 1 +x:1 +余杭市 1 +x:1 +民乐队 1 +x:1 +秦皇 1 +x:1 +有效 1 +x:1 +不成体统 1 +x:1 +塞责 1 +x:1 +代卖 1 +x:1 +国贸科 1 +x:1 +毛难族 1 +x:1 +众叛亲离 1 +x:1 +高层 1 +x:1 +丰姿 1 +x:1 +桥梁处 1 +x:1 +举例来说 1 +x:1 +卧室 1 +x:1 +传家 1 +x:1 +咳声叹气 1 +x:1 +四处 1 +x:1 +老调重弹 1 +x:1 +遥控器 1 +x:1 +什邡市 1 +x:1 +公猪 1 +x:1 +阿根廷队 1 +x:1 +宝象河 1 +x:1 +病毒性 1 +x:1 +四大 1 +x:1 +过门 1 +x:1 +架棚 1 +x:1 +饮誉中外 1 +x:1 +散步 1 +x:1 +四壁 1 +x:1 +腰杆 1 +x:1 +狐步 1 +x:1 +腊味 1 +x:1 +狭隘 1 +x:1 +宁海县 1 +x:1 +熊派 1 +x:1 +四声 1 +x:1 +扒子 1 +x:1 +投奔 1 +x:1 +承船厢 1 +x:1 +乐观 1 +x:1 +百万言 1 +x:1 +漫画展 1 +x:1 +锅巴 1 +x:1 +诸葛亮会 1 +x:1 +寝食 1 +x:1 +中堡村 1 +x:1 +门市部 1 +x:1 +宝钢 1 +x:1 +高州 1 +x:1 +林林总总 1 +x:1 +不堪造就 1 +x:1 +你 2817 +x:2817 +作文 1 +x:1 +满月 1 +x:1 +聪 18 +x:18 +千里之堤 1 +x:1 +围界 1 +x:1 +高工 1 +x:1 +官能团 1 +x:1 +复排 1 +x:1 +钎子 1 +x:1 +式子 1 +x:1 +满期 1 +x:1 +脑炎 1 +x:1 +袋形 1 +x:1 +蔓草 1 +x:1 +持旗人 1 +x:1 +低眉顺眼 1 +x:1 +自然而然 1 +x:1 +朱仙庄 1 +x:1 +卑尔根 1 +x:1 +水萍 1 +x:1 +偏离 1 +x:1 +窑门 1 +x:1 +门票 1 +x:1 +发行科 1 +x:1 +病虫 1 +x:1 +充气灯泡 1 +x:1 +冠家堡 1 +x:1 +拥护 1 +x:1 +刀山火海 1 +x:1 +吵闹 1 +x:1 +新华社 1 +x:1 +功放厂 1 +x:1 +抗议 1 +x:1 +书评界 1 +x:1 +兔饲料 1 +x:1 +无核武区 1 +x:1 +恒河沙数 1 +x:1 +书业界 1 +x:1 +监督制 1 +x:1 +镇 395 +x:395 +抗诉 1 +x:1 +偏移 1 +x:1 +廖 203 +x:203 +凤蝶 1 +x:1 +基本上 1 +x:1 +宰风 1 +x:1 +地理学家 1 +x:1 +增容 1 +x:1 +屈指可数 1 +x:1 +医学院 1 +x:1 +招兵 1 +x:1 +收视 1 +x:1 +顺藤摸瓜 1 +x:1 +迁徙期 1 +x:1 +水葱 1 +x:1 +传媒 1 +x:1 +水晶城 1 +x:1 +恐龙馆 1 +x:1 +理学 1 +x:1 +詹 38 +x:38 +牵引车 1 +x:1 +鸡公岭村 1 +x:1 +三德坊 1 +x:1 +胡乱 1 +x:1 +分分秒秒 1 +x:1 +高抗 1 +x:1 +赠送 1 +x:1 +晨钟暮鼓 1 +x:1 +浇地 1 +x:1 +中华街 1 +x:1 +核力 1 +x:1 +美洲豹 1 +x:1 +县界 1 +x:1 +侵 3 +x:3 +技术篇 1 +x:1 +太阳膜 1 +x:1 +传教 1 +x:1 +居心叵测 1 +x:1 +想不开 1 +x:1 +紫金山 1 +x:1 +提早 1 +x:1 +十室九空 1 +x:1 +岳南 1 +x:1 +痰喘 1 +x:1 +盏 63 +x:63 +高招 1 +x:1 +审核组 1 +x:1 +渔叉 1 +x:1 +超阶级 1 +x:1 +攻击性 1 +x:1 +生发油 1 +x:1 +枕头 1 +x:1 +訇然 1 +x:1 +满堂 1 +x:1 +那莫乡 1 +x:1 +收缩率 1 +x:1 +语言学界 1 +x:1 +证券业 1 +x:1 +成牛 1 +x:1 +披红挂彩 1 +x:1 +干肥 1 +x:1 +艺术史 1 +x:1 +接连 1 +x:1 +成片 1 +x:1 +临门 1 +x:1 +工力悉敌 1 +x:1 +雷神 1 +x:1 +如履平地 1 +x:1 +接近 1 +x:1 +接运 1 +x:1 +指南车 1 +x:1 +抗救灾 1 +x:1 +苏中 1 +x:1 +总支部 1 +x:1 +武乡县 1 +x:1 +反目成仇 1 +x:1 +精饲料 1 +x:1 +主讲者 1 +x:1 +挖坑 1 +x:1 +阴郁 1 +x:1 +巴新 1 +x:1 +苏丹 1 +x:1 +再接再厉 1 +x:1 +罗曼史 1 +x:1 +简短 1 +x:1 +有滋有味 1 +x:1 +无机盐 1 +x:1 +非政治性 1 +x:1 +风纪扣 1 +x:1 +桅樯 1 +x:1 +平邑县 1 +x:1 +约法 1 +x:1 +临深履薄 1 +x:1 +荞麦蜜 1 +x:1 +械 1 +x:1 +苏东 1 +x:1 +义和团 1 +x:1 +浮灰 1 +x:1 +甜糯 1 +x:1 +田秀才 1 +x:1 +高手 1 +x:1 +木樨地 1 +x:1 +通行证 1 +x:1 +接轨 1 +x:1 +极限值 1 +x:1 +水晶棺 1 +x:1 +无据 1 +x:1 +酸度 1 +x:1 +保护套 1 +x:1 +本版 1 +x:1 +威斯林 1 +x:1 +石灰岩 1 +x:1 +果园区 1 +x:1 +桌椅板凳 1 +x:1 +竞投人 1 +x:1 +系列 1 +x:1 +塞格曼说 1 +x:1 +四月 1 +x:1 +挖土 1 +x:1 +交税 1 +x:1 +高扬 1 +x:1 +翻毛 1 +x:1 +多罗米蒂 1 +x:1 +考核卡 1 +x:1 +雪茄烟 1 +x:1 +业务性 1 +x:1 +水秀园 1 +x:1 +达荷美 1 +x:1 +扬长补短 1 +x:1 +复工 1 +x:1 +歌剧界 1 +x:1 +频 17 +x:17 +人心果 1 +x:1 +余角 1 +x:1 +违禁 1 +x:1 +大年初四 1 +x:1 +四级品 1 +x:1 +齐刷刷 1 +x:1 +同调 1 +x:1 +土鲮鱼 1 +x:1 +同谋 1 +x:1 +佐餐 1 +x:1 +乡风 1 +x:1 +小麦线虫 1 +x:1 +教课 1 +x:1 +教诲 1 +x:1 +垫板 1 +x:1 +牧草 1 +x:1 +烦扰 1 +x:1 +水磨工夫 1 +x:1 +投机 1 +x:1 +满天 1 +x:1 +杂耍 1 +x:1 +超标 1 +x:1 +篆字 1 +x:1 +学科群 1 +x:1 +交管 1 +x:1 +纸壳箱 1 +x:1 +满头 1 +x:1 +太阳能 1 +x:1 +经传 1 +x:1 +含羞 1 +x:1 +教训 1 +x:1 +满处 1 +x:1 +破相 1 +x:1 +烽火台 1 +x:1 +苏俄 1 +x:1 +拭 1 +x:1 +增收 1 +x:1 +分析仪 1 +x:1 +大灰狼 1 +x:1 +代沟 1 +x:1 +增支 1 +x:1 +内源性 1 +x:1 +核发 1 +x:1 +争奇斗艳 1 +x:1 +比翼 1 +x:1 +琵琶曲 1 +x:1 +容止 1 +x:1 +光笔 1 +x:1 +原形毕露 1 +x:1 +不可终日 1 +x:1 +诗礼之家 1 +x:1 +受测人 1 +x:1 +全无氟 1 +x:1 +绞杀战 1 +x:1 +接踵 1 +x:1 +盘鼓 1 +x:1 +指甲盖儿 1 +x:1 +高挑 1 +x:1 +画龙点睛 1 +x:1 +翻身仗 1 +x:1 +蒋镇 1 +x:1 +荆州市 1 +x:1 +考核制 1 +x:1 +制度性 1 +x:1 +掬 7 +x:7 +众多 1 +x:1 +钎料 1 +x:1 +勋业 1 +x:1 +路线 1 +x:1 +佯降 1 +x:1 +观潮派 1 +x:1 +伏辩 1 +x:1 +岳北 1 +x:1 +四星 1 +x:1 +双 456 +x:456 +专务 1 +x:1 +传播 1 +x:1 +干脆 1 +x:1 +塔中 1 +x:1 +追随型 1 +x:1 +投枪 1 +x:1 +好家伙 1 +x:1 +南食店 1 +x:1 +四明 1 +x:1 +扎针 1 +x:1 +杂肥 1 +x:1 +五道沟村 1 +x:1 +王者 1 +x:1 +展会 1 +x:1 +比美 1 +x:1 +选购 1 +x:1 +皇天 1 +x:1 +笔迹 1 +x:1 +风暴潮 1 +x:1 +闸 34 +x:34 +厂矿 1 +x:1 +王府港 1 +x:1 +龙虎山 1 +x:1 +社会关系 1 +x:1 +传来 1 +x:1 +刻肌刻骨 1 +x:1 +含糊 1 +x:1 +病退 1 +x:1 +伏象 1 +x:1 +生意场 1 +x:1 +病逝 1 +x:1 +四旁 1 +x:1 +邹城市 1 +x:1 +艰难险阻 1 +x:1 +暖水瓶 1 +x:1 +鼓面 1 +x:1 +万埠镇 1 +x:1 +复建 1 +x:1 +删 12 +x:12 +鄢 16 +x:16 +四时 1 +x:1 +高悬 1 +x:1 +黄骅县 1 +x:1 +兀自 1 +x:1 +制片商 1 +x:1 +仇人 1 +x:1 +观雪 1 +x:1 +眼疾 1 +x:1 +娘子关镇 1 +x:1 +四无 1 +x:1 +四旧 1 +x:1 +殉葬 1 +x:1 +四日 1 +x:1 +土邦 1 +x:1 +超巨型 1 +x:1 +画框 1 +x:1 +石坝 1 +x:1 +汉译 1 +x:1 +变化有致 1 +x:1 +都市 1 +x:1 +石块 1 +x:1 +拉达乡 1 +x:1 +汉诗 1 +x:1 +柳杉 1 +x:1 +圆领衫 1 +x:1 +石坎 1 +x:1 +沙金 1 +x:1 +金融寡头 1 +x:1 +罚金 1 +x:1 +出苗 1 +x:1 +识文断字 1 +x:1 +南屏乡 1 +x:1 +四方 1 +x:1 +背脊 1 +x:1 +牧者 1 +x:1 +汉语 1 +x:1 +经济危机 1 +x:1 +柳条 1 +x:1 +崩岸 1 +x:1 +抗税 1 +x:1 +汉丰镇 1 +x:1 +雷管 1 +x:1 +老实话 1 +x:1 +羁绊 1 +x:1 +柳林 1 +x:1 +淡路 1 +x:1 +彩陶 1 +x:1 +武鸣 1 +x:1 +布老虎 1 +x:1 +上访户 1 +x:1 +部长 1 +x:1 +浮物 1 +x:1 +凤台县 1 +x:1 +卧柜 1 +x:1 +闺秀 1 +x:1 +佳绩 1 +x:1 +同辈 1 +x:1 +同辉 1 +x:1 +四散 1 +x:1 +传染 1 +x:1 +圣但尼 1 +x:1 +唠嗑 1 +x:1 +中山门 1 +x:1 +讯号 1 +x:1 +迁坟还耕 1 +x:1 +棋 121 +x:121 +花花肠子 1 +x:1 +感谢电 1 +x:1 +土道 1 +x:1 +地方主义 1 +x:1 +表演奖 1 +x:1 +揎拳捋袖 1 +x:1 +石城 1 +x:1 +锋芒所向 1 +x:1 +女主人 1 +x:1 +台笔 1 +x:1 +矿化度 1 +x:1 +高息 1 +x:1 +理智 1 +x:1 +挤而后工 1 +x:1 +执行 1 +x:1 +稍胜一筹 1 +x:1 +总调 1 +x:1 +停放 1 +x:1 +保洁女 1 +x:1 +孤老户 1 +x:1 +南邦府 1 +x:1 +麦芽糖 1 +x:1 +使用者 1 +x:1 +石埠 1 +x:1 +南中国海 1 +x:1 +休息天 1 +x:1 +哈佛 1 +x:1 +腰子 1 +x:1 +寒号虫 1 +x:1 +奇花异草 1 +x:1 +干菜 1 +x:1 +依赖型 1 +x:1 +彩韵 1 +x:1 +教规 1 +x:1 +前些年 1 +x:1 +装法 1 +x:1 +王英 1 +x:1 +锥形帽 1 +x:1 +大专院校 1 +x:1 +猪仔 1 +x:1 +父老 1 +x:1 +勾心斗角 1 +x:1 +星小目 1 +x:1 +太阳节 1 +x:1 +仕途 1 +x:1 +轻水 1 +x:1 +舐犊之情 1 +x:1 +投敌 1 +x:1 +药品费 1 +x:1 +观音 1 +x:1 +直言 1 +x:1 +厂甸 1 +x:1 +就读 1 +x:1 +戴眼镜者 1 +x:1 +投放 1 +x:1 +大海捞针 1 +x:1 +虬茎 1 +x:1 +烦恼 1 +x:1 +散场 1 +x:1 +除旧布新 1 +x:1 +正色片 1 +x:1 +弹子 1 +x:1 +装潢费 1 +x:1 +光秃 1 +x:1 +伏贴 1 +x:1 +比索 1 +x:1 +除夕 1 +x:1 +铬钢 1 +x:1 +核减 1 +x:1 +肽 1 +x:1 +核准 1 +x:1 +死不认账 1 +x:1 +替代物 1 +x:1 +石器 1 +x:1 +泵 3 +x:3 +浮现 1 +x:1 +翻案 1 +x:1 +教育法 1 +x:1 +语病 1 +x:1 +追思会 1 +x:1 +监狱法 1 +x:1 +轧制 1 +x:1 +三 6829 +x:6829 +殴斗 1 +x:1 +县直 1 +x:1 +海拉法 1 +x:1 +核儿 1 +x:1 +宏观世界 1 +x:1 +不期而遇 1 +x:1 +干草 1 +x:1 +学岗制 1 +x:1 +时 8182 +x:8182 +内驱力 1 +x:1 +专有名称 1 +x:1 +仙游县 1 +x:1 +主格调 1 +x:1 +临阵 1 +x:1 +光明村 1 +x:1 +资料库 1 +x:1 +论文选 1 +x:1 +一机连 1 +x:1 +复归 1 +x:1 +叫价 1 +x:1 +头昏眼花 1 +x:1 +职业装 1 +x:1 +萍聚 1 +x:1 +病重 1 +x:1 +接待费 1 +x:1 +会场 1 +x:1 +火电站 1 +x:1 +雄黄酒 1 +x:1 +黑豆峪村 1 +x:1 +监摄仪 1 +x:1 +政治处 1 +x:1 +总责 1 +x:1 +陆埠镇 1 +x:1 +总账 1 +x:1 +米花岭 1 +x:1 +甜美 1 +x:1 +桔黄色 1 +x:1 +井底蛙 1 +x:1 +群轻折轴 1 +x:1 +科纳克里 1 +x:1 +复式 1 +x:1 +心地 1 +x:1 +石围 1 +x:1 +信阳市 1 +x:1 +彩色 1 +x:1 +家属 1 +x:1 +小日子 1 +x:1 +帆船 1 +x:1 +幸福乡 1 +x:1 +卵巢 1 +x:1 +腥臭 1 +x:1 +鹊鹞 1 +x:1 +超浅 1 +x:1 +咋 44 +x:44 +复壮 1 +x:1 +泽当 1 +x:1 +痰凝 1 +x:1 +瑞安 1 +x:1 +接访 1 +x:1 +大鹿岛村 1 +x:1 +军事体育 1 +x:1 +玥 2 +x:2 +光线 1 +x:1 +翻演 1 +x:1 +交织 1 +x:1 +沙头角 1 +x:1 +光辉灿烂 1 +x:1 +妙不可言 1 +x:1 +南京城 1 +x:1 +交给 1 +x:1 +踏花被 1 +x:1 +光纤 1 +x:1 +拍卖金 1 +x:1 +新娘子 1 +x:1 +成百 1 +x:1 +殴打 1 +x:1 +归 264 +x:264 +蒸 20 +x:20 +洗礼地 1 +x:1 +军区队 1 +x:1 +百货架 1 +x:1 +宁死不屈 1 +x:1 +病险 1 +x:1 +接诊 1 +x:1 +稳妥感 1 +x:1 +九三年 1 +x:1 +暑期 1 +x:1 +病院 1 +x:1 +适应症 1 +x:1 +光绪 1 +x:1 +役畜 1 +x:1 +燹 1 +x:1 +淮阳 1 +x:1 +淮阴 1 +x:1 +传感 1 +x:1 +本相 1 +x:1 +剖开 1 +x:1 +戏曲队 1 +x:1 +高明 1 +x:1 +高昌 1 +x:1 +高昂 1 +x:1 +唠叨 1 +x:1 +压路机 1 +x:1 +小青瓦 1 +x:1 +肘 2 +x:2 +成皮 1 +x:1 +伤风 1 +x:1 +排尾 1 +x:1 +奋起直追 1 +x:1 +床边 1 +x:1 +埃松省 1 +x:1 +役龄 1 +x:1 +板门店 1 +x:1 +药都 1 +x:1 +投拍 1 +x:1 +面辅料 1 +x:1 +理性 1 +x:1 +投拆 1 +x:1 +负责者 1 +x:1 +选点 1 +x:1 +九通一平 1 +x:1 +红薯 1 +x:1 +扬剧 1 +x:1 +接警 1 +x:1 +灯心绒 1 +x:1 +植株 1 +x:1 +果园场 1 +x:1 +收集卡 1 +x:1 +憎称 1 +x:1 +植根 1 +x:1 +相像 1 +x:1 +遣 8 +x:8 +石凳 1 +x:1 +下坡路 1 +x:1 +不声不吭 1 +x:1 +制片厂 1 +x:1 +救护车队 1 +x:1 +植树 1 +x:1 +二月份 1 +x:1 +营养学家 1 +x:1 +副局级 1 +x:1 +费伦堡 1 +x:1 +力量感 1 +x:1 +简 48 +x:48 +温爱 1 +x:1 +颁行 1 +x:1 +空地导弹 1 +x:1 +散养 1 +x:1 +提案人 1 +x:1 +牧羊犬 1 +x:1 +赣西 1 +x:1 +笔 516 +x:516 +悔不当初 1 +x:1 +休息廊 1 +x:1 +散兵 1 +x:1 +逼肖 1 +x:1 +散光 1 +x:1 +彩金 1 +x:1 +万劫不复 1 +x:1 +彩釉 1 +x:1 +武馆 1 +x:1 +总评 1 +x:1 +高架 1 +x:1 +相赠 1 +x:1 +体检表 1 +x:1 +思索 1 +x:1 +所区 1 +x:1 +强化班 1 +x:1 +感谢状 1 +x:1 +沙漠王 1 +x:1 +虫媒花 1 +x:1 +教辅 1 +x:1 +卵子 1 +x:1 +翘首 1 +x:1 +计划表 1 +x:1 +航炮 1 +x:1 +万灯耀园 1 +x:1 +纳谏 1 +x:1 +北洋军阀 1 +x:1 +早造 1 +x:1 +铁案如山 1 +x:1 +抗震棚 1 +x:1 +艺术团 1 +x:1 +尘封日久 1 +x:1 +早逝 1 +x:1 +印度河 1 +x:1 +乞哀告怜 1 +x:1 +票 433 +x:433 +尿炕 1 +x:1 +装潢门面 1 +x:1 +土音 1 +x:1 +兴高采烈 1 +x:1 +反求诸己 1 +x:1 +粉糊 1 +x:1 +磁力线 1 +x:1 +早退 1 +x:1 +袋料 1 +x:1 +绽 8 +x:8 +论文集 1 +x:1 +必争之地 1 +x:1 +哈德逊 1 +x:1 +尚义 1 +x:1 +本省 1 +x:1 +硫酸钠 1 +x:1 +努美阿 1 +x:1 +锋 751 +x:751 +马种 1 +x:1 +鱼水 1 +x:1 +立项 1 +x:1 +灵石 1 +x:1 +商客居 1 +x:1 +本真 1 +x:1 +杏花 1 +x:1 +邬庙 1 +x:1 +水蛇腰 1 +x:1 +嗜欲 1 +x:1 +传情 1 +x:1 +尚书 1 +x:1 +敏感点 1 +x:1 +凶杀案 1 +x:1 +金家疃村 1 +x:1 +病毒学 1 +x:1 +产业链 1 +x:1 +叽里咕噜 1 +x:1 +床身 1 +x:1 +新西兰 1 +x:1 +阿勒泰 1 +x:1 +本着 1 +x:1 +光网 1 +x:1 +投掷 1 +x:1 +四战 1 +x:1 +高杆 1 +x:1 +成矿 1 +x:1 +南沙镇 1 +x:1 +香山 1 +x:1 +含笑 1 +x:1 +石像 1 +x:1 +浮生 1 +x:1 +尚且 1 +x:1 +饭菜 1 +x:1 +保护局 1 +x:1 +硫酸铵 1 +x:1 +每周六 1 +x:1 +小卖店 1 +x:1 +疏导岗 1 +x:1 +翻滚 1 +x:1 +议院 1 +x:1 +无债务 1 +x:1 +青冈林 1 +x:1 +管理科 1 +x:1 +硫酸铜 1 +x:1 +作教科 1 +x:1 +眼生 1 +x:1 +套话连篇 1 +x:1 +木刻水印 1 +x:1 +保苗率 1 +x:1 +异彩 1 +x:1 +关于 1 +x:1 +石化 1 +x:1 +杀菌 1 +x:1 +航班 1 +x:1 +殉职 1 +x:1 +致 287 +x:287 +学法 1 +x:1 +秦中 1 +x:1 +清唱剧 1 +x:1 +层层叠叠 1 +x:1 +年楚河 1 +x:1 +赠阅 1 +x:1 +宽大 1 +x:1 +喟然 1 +x:1 +交糅 1 +x:1 +六年制 1 +x:1 +情恳意切 1 +x:1 +痛苦 1 +x:1 +母线槽 1 +x:1 +市场准入 1 +x:1 +洄水 1 +x:1 +石匠 1 +x:1 +通行费 1 +x:1 +旱魃为虐 1 +x:1 +扒手 1 +x:1 +交粮 1 +x:1 +音乐史家 1 +x:1 +任人唯贤 1 +x:1 +接触 1 +x:1 +石南 1 +x:1 +高跟鞋 1 +x:1 +壁挂式 1 +x:1 +清清爽爽 1 +x:1 +指导制 1 +x:1 +沙门 1 +x:1 +满布 1 +x:1 +保洁工 1 +x:1 +搅乱 1 +x:1 +石印 1 +x:1 +接见 1 +x:1 +健步走 1 +x:1 +严惩不贷 1 +x:1 +限额 1 +x:1 +马稷 1 +x:1 +腰带 1 +x:1 +崩塌 1 +x:1 +靶 16 +x:16 +正误表 1 +x:1 +冷气 1 +x:1 +虑及 1 +x:1 +枧坝镇 1 +x:1 +小炉儿匠 1 +x:1 +颁证 1 +x:1 +沼液 1 +x:1 +治安警 1 +x:1 +沙锅 1 +x:1 +十条 1 +x:1 +代步 1 +x:1 +鹈鹕 1 +x:1 +超级市场 1 +x:1 +资料室 1 +x:1 +脚圈 1 +x:1 +气乎乎 1 +x:1 +越境 1 +x:1 +马童 1 +x:1 +有生之年 1 +x:1 +玻璃纤维 1 +x:1 +绥芬河市 1 +x:1 +滴香流蜜 1 +x:1 +甜竹 1 +x:1 +四慢 1 +x:1 +腊月廿一 1 +x:1 +等 17314 +x:17314 +辉银矿 1 +x:1 +复婚 1 +x:1 +满座 1 +x:1 +传接 1 +x:1 +歉 6 +x:6 +抗震歌 1 +x:1 +茶树王 1 +x:1 +伏击圈 1 +x:1 +五门堰 1 +x:1 +娘子军 1 +x:1 +购房人 1 +x:1 +坐标轴 1 +x:1 +菩提树 1 +x:1 +诊疗 1 +x:1 +清宫 1 +x:1 +新兵连 1 +x:1 +阿尔泰省 1 +x:1 +孩 5 +x:5 +监察 1 +x:1 +传授 1 +x:1 +主委 1 +x:1 +核呆 1 +x:1 +腊月廿九 1 +x:1 +架子 1 +x:1 +花园里 1 +x:1 +议长 1 +x:1 +成田 1 +x:1 +牧羊点 1 +x:1 +莫测 1 +x:1 +渺无人迹 1 +x:1 +传扬 1 +x:1 +汇合点 1 +x:1 +盘香 1 +x:1 +县政府 1 +x:1 +顾问性 1 +x:1 +石刀 1 +x:1 +酸奶 1 +x:1 +传承 1 +x:1 +石刻 1 +x:1 +选读 1 +x:1 +尽如人意 1 +x:1 +香香的 1 +x:1 +石制 1 +x:1 +有用 1 +x:1 +满当 1 +x:1 +荇草 1 +x:1 +偷车贼 1 +x:1 +薄唇 1 +x:1 +高新 1 +x:1 +浮石 1 +x:1 +上冶镇 1 +x:1 +也罢 1 +x:1 +少量 1 +x:1 +难度表 1 +x:1 +余辉 1 +x:1 +艺术品 1 +x:1 +复审 1 +x:1 +卧房 1 +x:1 +新城子 1 +x:1 +忍饥受冻 1 +x:1 +今貌 1 +x:1 +温火 1 +x:1 +长涝池村 1 +x:1 +色拉寺 1 +x:1 +破烂 1 +x:1 +白溜溜 1 +x:1 +胜券在握 1 +x:1 +富裕中农 1 +x:1 +恸哭声 1 +x:1 +罗非鱼 1 +x:1 +瑞士 1 +x:1 +文房四宝 1 +x:1 +土门 1 +x:1 +开盘价 1 +x:1 +白银市 1 +x:1 +复学 1 +x:1 +能谱 1 +x:1 +醋劲儿 1 +x:1 +嗫嚅 1 +x:1 +山南镇 1 +x:1 +高攀 1 +x:1 +毫针 1 +x:1 +针尖 1 +x:1 +庐江 1 +x:1 +隔音符号 1 +x:1 +粒 63 +x:63 +满心 1 +x:1 +高支 1 +x:1 +尼玛县 1 +x:1 +马奶酒 1 +x:1 +增援 1 +x:1 +南联盟 1 +x:1 +抑郁 1 +x:1 +富民政策 1 +x:1 +尿片 1 +x:1 +散发 1 +x:1 +轰响 1 +x:1 +土拨鼠 1 +x:1 +高效 1 +x:1 +雁翅 1 +x:1 +构造柱 1 +x:1 +迁西县 1 +x:1 +沼泽 1 +x:1 +高龄者 1 +x:1 +纳雍 1 +x:1 +高教 1 +x:1 +温热 1 +x:1 +欠产 1 +x:1 +梦幻泡影 1 +x:1 +一鳞半爪 1 +x:1 +秦俑 1 +x:1 +传抄 1 +x:1 +滹沱河畔 1 +x:1 +受访者 1 +x:1 +被特赦者 1 +x:1 +竹林镇 1 +x:1 +武魂 1 +x:1 +破灭 1 +x:1 +藤子 1 +x:1 +马坡岭 1 +x:1 +约摸 1 +x:1 +稀罕 1 +x:1 +石崖 1 +x:1 +杀跌 1 +x:1 +武钢 1 +x:1 +胶靴 1 +x:1 +启明星 1 +x:1 +干裂 1 +x:1 +金鸡沙村 1 +x:1 +光荣史 1 +x:1 +泡桐树 1 +x:1 +搭档 1 +x:1 +寻呼机 1 +x:1 +水南关村 1 +x:1 +偏下 1 +x:1 +龙曲集 1 +x:1 +水冲港 1 +x:1 +超车 1 +x:1 +吨 1304 +x:1304 +少安毋躁 1 +x:1 +艺术宫 1 +x:1 +娇生惯养 1 +x:1 +衬衣 1 +x:1 +散居 1 +x:1 +乡野 1 +x:1 +艺术家 1 +x:1 +增污 1 +x:1 +绥靖 1 +x:1 +马球 1 +x:1 +直线 1 +x:1 +经 1506 +x:1506 +街谈 1 +x:1 +默默 1 +x:1 +冤错案 1 +x:1 +芦城乡 1 +x:1 +军饷 1 +x:1 +涌出 1 +x:1 +本站 1 +x:1 +举一反三 1 +x:1 +大塘乡 1 +x:1 +针叶 1 +x:1 +突出者 1 +x:1 +散射 1 +x:1 +打私办 1 +x:1 +池屋 1 +x:1 +绿化奖 1 +x:1 +宝塔山 1 +x:1 +冰球场 1 +x:1 +珊瑚 1 +x:1 +奋身 1 +x:1 +候补 1 +x:1 +甜瓜 1 +x:1 +梅陇站 1 +x:1 +完蛋 1 +x:1 +背诵 1 +x:1 +累积 1 +x:1 +副作用 1 +x:1 +代数 1 +x:1 +新民党 1 +x:1 +寺里 1 +x:1 +厂级 1 +x:1 +呼救者 1 +x:1 +蓝矾 1 +x:1 +厂纪 1 +x:1 +环行路 1 +x:1 +整修 1 +x:1 +歌剧系 1 +x:1 +颂德 1 +x:1 +冰河期 1 +x:1 +主妇 1 +x:1 +复员 1 +x:1 +表侄 1 +x:1 +贡献度 1 +x:1 +涌入 1 +x:1 +街貌 1 +x:1 +余者 1 +x:1 +留言台 1 +x:1 +悠然 1 +x:1 +选萃 1 +x:1 +耳闻目见 1 +x:1 +尿素 1 +x:1 +艺术季 1 +x:1 +艺术学 1 +x:1 +林隙地 1 +x:1 +广州市 1 +x:1 +教育权 1 +x:1 +复合 1 +x:1 +心电图室 1 +x:1 +汶阳镇 1 +x:1 +非自身 1 +x:1 +教育村 1 +x:1 +更弦易辙 1 +x:1 +石工 1 +x:1 +约数 1 +x:1 +细伢崽 1 +x:1 +交班 1 +x:1 +不近人情 1 +x:1 +天各一方 1 +x:1 +邑 2 +x:2 +解阵党 1 +x:1 +利物浦 1 +x:1 +自纠 1 +x:1 +约敦 1 +x:1 +沙 128 +x:128 +子虚乌有 1 +x:1 +绿皮书 1 +x:1 +古装剧 1 +x:1 +滞后期 1 +x:1 +牡石化 1 +x:1 +尿糖 1 +x:1 +乳酸菌 1 +x:1 +米脂县 1 +x:1 +核定 1 +x:1 +代总裁 1 +x:1 +光环 1 +x:1 +比拉米德 1 +x:1 +硌 3 +x:3 +籍贯 1 +x:1 +养鸭户 1 +x:1 +柳江 1 +x:1 +卵块 1 +x:1 +叔婆 1 +x:1 +核对 1 +x:1 +石屏 1 +x:1 +病魔 1 +x:1 +天主教 1 +x:1 +脱毛症 1 +x:1 +洪音迭传 1 +x:1 +绥阳 1 +x:1 +渐近线 1 +x:1 +马蹄形 1 +x:1 +成筐 1 +x:1 +破绽 1 +x:1 +资料员 1 +x:1 +增派 1 +x:1 +石山 1 +x:1 +奖励制 1 +x:1 +升旗 1 +x:1 +授予权 1 +x:1 +浪费性 1 +x:1 +诉诸武力 1 +x:1 +拍片子 1 +x:1 +马甲 1 +x:1 +死心塌地 1 +x:1 +官僚资本 1 +x:1 +蓝盔 1 +x:1 +成箱 1 +x:1 +表亲 1 +x:1 +雷炮 1 +x:1 +募捐 1 +x:1 +同蒲 1 +x:1 +称兄道弟 1 +x:1 +阳台 1 +x:1 +亚 405 +x:405 +诺曼底 1 +x:1 +啥 135 +x:135 +增添 1 +x:1 +成算 1 +x:1 +冷冻箱 1 +x:1 +草木灰 1 +x:1 +蓝盾 1 +x:1 +乡道 1 +x:1 +充 30 +x:30 +线桄子 1 +x:1 +二医大 1 +x:1 +胖人 1 +x:1 +打比方 1 +x:1 +余脉 1 +x:1 +秃杉 1 +x:1 +甘草榄 1 +x:1 +高歌 1 +x:1 +胆 14 +x:14 +回答 1 +x:1 +包身工 1 +x:1 +招贤 1 +x:1 +富 319 +x:319 +偏信 1 +x:1 +四清 1 +x:1 +针剂 1 +x:1 +坝上 1 +x:1 +整人 1 +x:1 +盘面 1 +x:1 +成都籍 1 +x:1 +命赴黄泉 1 +x:1 +石峰 1 +x:1 +计划生育 1 +x:1 +痛责 1 +x:1 +电感 1 +x:1 +锦缎 1 +x:1 +筷 2 +x:2 +棕榈树 1 +x:1 +奋进 1 +x:1 +花厅 1 +x:1 +核子 1 +x:1 +甲苯 1 +x:1 +降伏 1 +x:1 +润饰 1 +x:1 +美洲虎 1 +x:1 +渊厚 1 +x:1 +高梁 1 +x:1 +西亚区 1 +x:1 +吐气扬眉 1 +x:1 +大饭厅 1 +x:1 +摩擦力 1 +x:1 +议员日 1 +x:1 +设身处地 1 +x:1 +螺纹 1 +x:1 +开创者 1 +x:1 +通辽市 1 +x:1 +酸味 1 +x:1 +惭疚 1 +x:1 +演戏 1 +x:1 +紫花地丁 1 +x:1 +依赖度 1 +x:1 +尉犁县 1 +x:1 +豆腐花 1 +x:1 +循名责实 1 +x:1 +单枪匹马 1 +x:1 +马登 1 +x:1 +蒸发器 1 +x:1 +亚锦赛 1 +x:1 +高棉 1 +x:1 +进攻型 1 +x:1 +分立式 1 +x:1 +航运局 1 +x:1 +高检 1 +x:1 +问心无愧 1 +x:1 +教育日 1 +x:1 +阴到多云 1 +x:1 +白面书生 1 +x:1 +建筑史 1 +x:1 +交点 1 +x:1 +这 23299 +x:23299 +逼迫 1 +x:1 +哄笑 1 +x:1 +孢子植物 1 +x:1 +可信度 1 +x:1 +樽俎 1 +x:1 +蓝田 1 +x:1 +虫唱 1 +x:1 +散布 1 +x:1 +逼进 1 +x:1 +增温 1 +x:1 +光热 1 +x:1 +教育 1 +x:1 +说鬼话 1 +x:1 +交火 1 +x:1 +高标 1 +x:1 +美 3385 +x:3385 +四流 1 +x:1 +使用表 1 +x:1 +理清 1 +x:1 +马盟 1 +x:1 +法王庙村 1 +x:1 +大球场 1 +x:1 +石径 1 +x:1 +保护区 1 +x:1 +四海 1 +x:1 +差点儿 1 +x:1 +高校 1 +x:1 +年高德劭 1 +x:1 +顷刻间 1 +x:1 +监督权 1 +x:1 +存项 1 +x:1 +驮篮山 1 +x:1 +畸重畸轻 1 +x:1 +北池子 1 +x:1 +晕头转向 1 +x:1 +言犹在耳 1 +x:1 +指挥若定 1 +x:1 +武陵 1 +x:1 +渊博 1 +x:1 +被诉人 1 +x:1 +投河 1 +x:1 +白杨树 1 +x:1 +空吊板 1 +x:1 +日晒雨淋 1 +x:1 +光明港 1 +x:1 +路径名 1 +x:1 +摩擦剂 1 +x:1 +雹灾 1 +x:1 +白白绿绿 1 +x:1 +蜂拥而上 1 +x:1 +淡薄 1 +x:1 +难觅 1 +x:1 +高档 1 +x:1 +推进组 1 +x:1 +高桥 1 +x:1 +破絮 1 +x:1 +扎龙 1 +x:1 +光火 1 +x:1 +杂记 1 +x:1 +马会杯 1 +x:1 +业精于勤 1 +x:1 +蒸汽化 1 +x:1 +伤脑筋 1 +x:1 +保安业 1 +x:1 +恰如其分 1 +x:1 +涌动 1 +x:1 +功放机 1 +x:1 +甲者 1 +x:1 +代替 1 +x:1 +明窗净几 1 +x:1 +街车 1 +x:1 +跨越性 1 +x:1 +豫西南 1 +x:1 +约束 1 +x:1 +无先例 1 +x:1 +背街 1 +x:1 +铺路石 1 +x:1 +粟子树 1 +x:1 +囟门 1 +x:1 +僵亡 1 +x:1 +精神损耗 1 +x:1 +瘾 25 +x:25 +通山县 1 +x:1 +复垦 1 +x:1 +斯姆哈纳 1 +x:1 +珍珠鸡 1 +x:1 +简政放权 1 +x:1 +尼日利亚 1 +x:1 +汨罗江 1 +x:1 +可用资金 1 +x:1 +角动量 1 +x:1 +本科 1 +x:1 +劲头儿 1 +x:1 +不外乎 1 +x:1 +出芽生殖 1 +x:1 +征税期 1 +x:1 +盘问 1 +x:1 +充放电 1 +x:1 +汉英 1 +x:1 +杀身 1 +x:1 +散开 1 +x:1 +讨厌 1 +x:1 +立身行事 1 +x:1 +整顿村 1 +x:1 +职业者 1 +x:1 +各尽所能 1 +x:1 +渔法 1 +x:1 +豁朗 1 +x:1 +治散治滥 1 +x:1 +浮筏 1 +x:1 +把酒言欢 1 +x:1 +呼玛 1 +x:1 +止渴 1 +x:1 +石床 1 +x:1 +阿尔萨斯 1 +x:1 +皮尔森型 1 +x:1 +控梢 1 +x:1 +超拔 1 +x:1 +挛 1 +x:1 +奎文 1 +x:1 +阳刚之美 1 +x:1 +能耗 1 +x:1 +能耐 1 +x:1 +为人处事 1 +x:1 +散心 1 +x:1 +光焰 1 +x:1 +古木参天 1 +x:1 +尚书学史 1 +x:1 +能者 1 +x:1 +兄长 1 +x:1 +干警 1 +x:1 +合运动 1 +x:1 +画匠 1 +x:1 +本社 1 +x:1 +医 65 +x:65 +动势中 1 +x:1 +淡蓝 1 +x:1 +坏死 1 +x:1 +推旧出新 1 +x:1 +圈圈 1 +x:1 +病毒唑 1 +x:1 +大米粥 1 +x:1 +长江路 1 +x:1 +扁形动物 1 +x:1 +格登 1 +x:1 +配股权 1 +x:1 +中文名 1 +x:1 +颊囊 1 +x:1 +保护剂 1 +x:1 +寸阴 1 +x:1 +良药 1 +x:1 +郊游 1 +x:1 +势单力薄 1 +x:1 +贺年卡 1 +x:1 +每份 1 +x:1 +奔驰 1 +x:1 +商业部长 1 +x:1 +清阳 1 +x:1 +高楼 1 +x:1 +控检 1 +x:1 +刑侦组 1 +x:1 +赫兹 1 +x:1 +巨幅 1 +x:1 +永无宁日 1 +x:1 +光照 1 +x:1 +隐藏 1 +x:1 +听诊器 1 +x:1 +插件 1 +x:1 +逻辑性 1 +x:1 +上吊 1 +x:1 +比特 1 +x:1 +定性关 1 +x:1 +余蓄 1 +x:1 +姗姗 1 +x:1 +陛下 1 +x:1 +雷电 1 +x:1 +年青人 1 +x:1 +早饭 1 +x:1 +乡间 1 +x:1 +交相 1 +x:1 +无赤字 1 +x:1 +贪得无厌 1 +x:1 +轮训班 1 +x:1 +打气站 1 +x:1 +熊市 1 +x:1 +翻本 1 +x:1 +闭口龟 1 +x:1 +率直 1 +x:1 +街衢 1 +x:1 +农技站 1 +x:1 +东征军 1 +x:1 +马灯 1 +x:1 +湿淋淋 1 +x:1 +本纪 1 +x:1 +石头 1 +x:1 +齿冷 1 +x:1 +胃穿孔 1 +x:1 +略胜一筹 1 +x:1 +满员 1 +x:1 +长话市话 1 +x:1 +光盘 1 +x:1 +本组 1 +x:1 +定向井 1 +x:1 +无计名 1 +x:1 +审批权 1 +x:1 +喜闻乐见 1 +x:1 +普宁寺 1 +x:1 +土黄 1 +x:1 +童服 1 +x:1 +嫁衣 1 +x:1 +杂货 1 +x:1 +冲昏头脑 1 +x:1 +黔北 1 +x:1 +选育 1 +x:1 +神与物游 1 +x:1 +散堆 1 +x:1 +四十五分 1 +x:1 +逼视 1 +x:1 +叶芽 1 +x:1 +电脑业 1 +x:1 +游途 1 +x:1 +鹿泉 1 +x:1 +气 283 +x:283 +超收 1 +x:1 +翘舌音 1 +x:1 +杂费 1 +x:1 +鸟枪换炮 1 +x:1 +接茬 1 +x:1 +含片 1 +x:1 +血球 1 +x:1 +阳原 1 +x:1 +土崩瓦解 1 +x:1 +特遣部队 1 +x:1 +雏鸡 1 +x:1 +类似 1 +x:1 +褡裢 1 +x:1 +成约 1 +x:1 +铁片大鼓 1 +x:1 +远念 1 +x:1 +乡长 1 +x:1 +高温 1 +x:1 +层子 1 +x:1 +培训费 1 +x:1 +缱绻 1 +x:1 +高渺 1 +x:1 +帷 1 +x:1 +锣鼓 1 +x:1 +逐日者 1 +x:1 +超时 1 +x:1 +越加 1 +x:1 +表演场 1 +x:1 +义卖会 1 +x:1 +惦念 1 +x:1 +大河上下 1 +x:1 +卧榻 1 +x:1 +译制 1 +x:1 +应收款 1 +x:1 +咋样 1 +x:1 +翻查 1 +x:1 +露地 1 +x:1 +连日来 1 +x:1 +防潮 1 +x:1 +雏鹰 1 +x:1 +遂昌县 1 +x:1 +难以忍受 1 +x:1 +桥下 1 +x:1 +旷世之作 1 +x:1 +甜点 1 +x:1 +高湿 1 +x:1 +菜子油 1 +x:1 +力夺 1 +x:1 +容易 1 +x:1 +寺 11 +x:11 +营火会 1 +x:1 +杂豆 1 +x:1 +营业站 1 +x:1 +柳树 1 +x:1 +省外 1 +x:1 +想不到 1 +x:1 +青铜器 1 +x:1 +复函 1 +x:1 +黔剧 1 +x:1 +痛觉 1 +x:1 +定价关 1 +x:1 +石堆 1 +x:1 +食口性 1 +x:1 +复出 1 +x:1 +营业区 1 +x:1 +铲土机 1 +x:1 +走私品 1 +x:1 +光电管 1 +x:1 +石堰 1 +x:1 +运河区 1 +x:1 +膳 2 +x:2 +朴素无华 1 +x:1 +科雷姆 1 +x:1 +干路 1 +x:1 +生殖器 1 +x:1 +石堤 1 +x:1 +汹涌澎湃 1 +x:1 +越南 1 +x:1 +杂谈 1 +x:1 +尿碱 1 +x:1 +石塔 1 +x:1 +柳桃 1 +x:1 +散失 1 +x:1 +巴村 1 +x:1 +众说不一 1 +x:1 +终端点 1 +x:1 +胜利日 1 +x:1 +核心 1 +x:1 +童星 1 +x:1 +合气道 1 +x:1 +扇面 1 +x:1 +乡土文学 1 +x:1 +轻吃重玩 1 +x:1 +垫款 1 +x:1 +奇险 1 +x:1 +甲虫 1 +x:1 +石墙 1 +x:1 +犹太人 1 +x:1 +蓝狐 1 +x:1 +艺术师 1 +x:1 +彩饰 1 +x:1 +凉溲溲 1 +x:1 +把 10301 +x:10301 +坷垃 1 +x:1 +复兴 1 +x:1 +解散 1 +x:1 +昏昏然 1 +x:1 +街角 1 +x:1 +成群 1 +x:1 +相关 1 +x:1 +峨眉泉 1 +x:1 +马尼拉麻 1 +x:1 +桥位 1 +x:1 +申报率 1 +x:1 +抗震性 1 +x:1 +永胜县 1 +x:1 +总后勤部 1 +x:1 +沙鸡 1 +x:1 +努 1 +x:1 +军调处 1 +x:1 +石墨 1 +x:1 +人民代表 1 +x:1 +悄然 1 +x:1 +柳梢 1 +x:1 +展陈 1 +x:1 +情不自禁 1 +x:1 +率真 1 +x:1 +干贝 1 +x:1 +门首 1 +x:1 +越发 1 +x:1 +石壕 1 +x:1 +察尔汗 1 +x:1 +索马里 1 +x:1 +营业税 1 +x:1 +现洋钱 1 +x:1 +监督性 1 +x:1 +类书 1 +x:1 +石壁 1 +x:1 +中年人 1 +x:1 +装饰柜 1 +x:1 +破空 1 +x:1 +八宝箱 1 +x:1 +教育所 1 +x:1 +乱蓬蓬 1 +x:1 +哈军工 1 +x:1 +干货 1 +x:1 +疯人 1 +x:1 +深居简出 1 +x:1 +比率 1 +x:1 +南京市 1 +x:1 +江洋大盗 1 +x:1 +血痂 1 +x:1 +吹拂 1 +x:1 +蜕化变质 1 +x:1 +竹叶青 1 +x:1 +壮汉 1 +x:1 +健步如飞 1 +x:1 +乡音 1 +x:1 +异文 1 +x:1 +乡韵 1 +x:1 +抓捕 1 +x:1 +滞后性 1 +x:1 +津贴 1 +x:1 +法理学界 1 +x:1 +白塔路 1 +x:1 +歪斜 1 +x:1 +涂鸦 1 +x:1 +险案 1 +x:1 +有线电报 1 +x:1 +微服私访 1 +x:1 +核岛 1 +x:1 +贪官污吏 1 +x:1 +印刻 1 +x:1 +投案 1 +x:1 +V 4 +x:4 +鼓魂 1 +x:1 +平装本 1 +x:1 +南欧 1 +x:1 +低潮 1 +x:1 +能见度 1 +x:1 +六七月 1 +x:1 +土鳖 1 +x:1 +石子 1 +x:1 +信阳县 1 +x:1 +超期 1 +x:1 +手球馆 1 +x:1 +满嘴 1 +x:1 +航管 1 +x:1 +高法 1 +x:1 +巧智 1 +x:1 +价位 1 +x:1 +巨佛 1 +x:1 +芸豆 1 +x:1 +天一池 1 +x:1 +藏学界 1 +x:1 +雷轰电闪 1 +x:1 +背负 1 +x:1 +投标 1 +x:1 +二道沟村 1 +x:1 +翻新 1 +x:1 +少顷 1 +x:1 +代换 1 +x:1 +满园 1 +x:1 +实效性 1 +x:1 +比热 1 +x:1 +赳赳雄姿 1 +x:1 +多级火箭 1 +x:1 +欢聚一堂 1 +x:1 +腰围 1 +x:1 +保护地 1 +x:1 +选色 1 +x:1 +石宫 1 +x:1 +霞彩 1 +x:1 +菖蒲 1 +x:1 +偏光镜 1 +x:1 +表演唱 1 +x:1 +说不上 1 +x:1 +石棺盖 1 +x:1 +集团公司 1 +x:1 +石室 1 +x:1 +柳毛 1 +x:1 +止步 1 +x:1 +天津队 1 +x:1 +捉 31 +x:31 +复利 1 +x:1 +键盘 1 +x:1 +复制 1 +x:1 +税警 1 +x:1 +盘道 1 +x:1 +苦大仇深 1 +x:1 +退货 1 +x:1 +瑞典 1 +x:1 +水东乡 1 +x:1 +奋发自救 1 +x:1 +畏友 1 +x:1 +瑞兽 1 +x:1 +烽火山 1 +x:1 +商奥会 1 +x:1 +奇闻 1 +x:1 +打雪仗 1 +x:1 +高汤 1 +x:1 +复刊 1 +x:1 +博物馆学 1 +x:1 +政绩观 1 +x:1 +复句 1 +x:1 +复古 1 +x:1 +牵就 1 +x:1 +滞弹性 1 +x:1 +寺院 1 +x:1 +扰流板 1 +x:1 +破碎 1 +x:1 +复叶 1 +x:1 +比照 1 +x:1 +约据 1 +x:1 +同船 1 +x:1 +高涨 1 +x:1 +新城区 1 +x:1 +航站 1 +x:1 +老奶奶 1 +x:1 +朝天椒 1 +x:1 +勐来村 1 +x:1 +农技科 1 +x:1 +复合管 1 +x:1 +贡献奖 1 +x:1 +受理费 1 +x:1 +复发 1 +x:1 +文献片 1 +x:1 +修武县 1 +x:1 +粗加工 1 +x:1 +限量 1 +x:1 +焊痕 1 +x:1 +开后门 1 +x:1 +田口乡 1 +x:1 +道貌岸然 1 +x:1 +背谬 1 +x:1 +心仪已久 1 +x:1 +满地 1 +x:1 +鄂托克 1 +x:1 +瓢 11 +x:11 +政绩表 1 +x:1 +睡椅 1 +x:1 +满场 1 +x:1 +群众组织 1 +x:1 +暑气 1 +x:1 +保护国 1 +x:1 +绿杨村 1 +x:1 +纳巴谷 1 +x:1 +三峰驼 1 +x:1 +阳历 1 +x:1 +代议长 1 +x:1 +复原 1 +x:1 +高深 1 +x:1 +五角状 1 +x:1 +采油树 1 +x:1 +航空 1 +x:1 +代扣 1 +x:1 +可获性 1 +x:1 +高洁 1 +x:1 +紫金县 1 +x:1 +佣工 1 +x:1 +教育性 1 +x:1 +相让 1 +x:1 +莫旗 1 +x:1 +复印 1 +x:1 +烟渍 1 +x:1 +农牧渔机 1 +x:1 +黄骅市 1 +x:1 +砂轮厂 1 +x:1 +安息堂 1 +x:1 +展览馆 1 +x:1 +芽包 1 +x:1 +复升 1 +x:1 +橘红 1 +x:1 +氨化池 1 +x:1 +伫 1 +x:1 +光电 1 +x:1 +满城 1 +x:1 +越冬 1 +x:1 +县立 1 +x:1 +打靶 1 +x:1 +乳山市 1 +x:1 +荣誉奖 1 +x:1 +炭山乡 1 +x:1 +德文本 1 +x:1 +使用费 1 +x:1 +麻拉热 1 +x:1 +散客 1 +x:1 +耦合度 1 +x:1 +清源西里 1 +x:1 +营运处 1 +x:1 +拼音字母 1 +x:1 +艺术展 1 +x:1 +保洁员 1 +x:1 +交电 1 +x:1 +交由 1 +x:1 +凶焰 1 +x:1 +南水关 1 +x:1 +童子军 1 +x:1 +元江 1 +x:1 +一天到晚 1 +x:1 +辅助品 1 +x:1 +大师傅 1 +x:1 +保护器 1 +x:1 +崖墓 1 +x:1 +沙鱼 1 +x:1 +延 22 +x:22 +破案率 1 +x:1 +莫方 1 +x:1 +保守主义 1 +x:1 +越东 1 +x:1 +马拉松式 1 +x:1 +从从容容 1 +x:1 +退赔 1 +x:1 +褐矮星 1 +x:1 +传略 1 +x:1 +鼠肚鸡肠 1 +x:1 +胶轮 1 +x:1 +华阳镇 1 +x:1 +泥饭碗 1 +x:1 +秦堤 1 +x:1 +党小组 1 +x:1 +粗加工品 1 +x:1 +椰林 1 +x:1 +怪话 1 +x:1 +怪诞 1 +x:1 +本报 1 +x:1 +表土 1 +x:1 +瞎子摸象 1 +x:1 +港口 1 +x:1 +坝基 1 +x:1 +拥军路 1 +x:1 +正阳县 1 +x:1 +目空一切 1 +x:1 +四知 1 +x:1 +瑞丽市 1 +x:1 +江东区 1 +x:1 +门当户对 1 +x:1 +干部 1 +x:1 +出车 1 +x:1 +烟墩乡 1 +x:1 +港台 1 +x:1 +县政 1 +x:1 +画院派 1 +x:1 +项目区 1 +x:1 +怪论 1 +x:1 +步步高升 1 +x:1 +成批 1 +x:1 +敲定 1 +x:1 +顺风耳 1 +x:1 +余额 1 +x:1 +东南麓 1 +x:1 +培训量 1 +x:1 +六里镇 1 +x:1 +电位 1 +x:1 +甜水 1 +x:1 +浮悬 1 +x:1 +不知凡几 1 +x:1 +破绽百出 1 +x:1 +尿斑 1 +x:1 +油气藏 1 +x:1 +绚丽 1 +x:1 +止痒 1 +x:1 +休馆 1 +x:1 +成才 1 +x:1 +港协 1 +x:1 +干道 1 +x:1 +本戏 1 +x:1 +重孙女 1 +x:1 +不尽人意 1 +x:1 +候诊 1 +x:1 +盘踞 1 +x:1 +坝址 1 +x:1 +理理 1 +x:1 +下三交镇 1 +x:1 +塔形 1 +x:1 +燕窝 1 +x:1 +精疲力尽 1 +x:1 +家庭教育 1 +x:1 +寺观 1 +x:1 +绥远 1 +x:1 +卧病 1 +x:1 +真理性 1 +x:1 +金华市 1 +x:1 +综合局 1 +x:1 +挟带 1 +x:1 +绿影扶疏 1 +x:1 +爱花者 1 +x:1 +流涕者 1 +x:1 +学龄儿童 1 +x:1 +望孔 1 +x:1 +昔时 1 +x:1 +泥浆味 1 +x:1 +昔日 1 +x:1 +气化率 1 +x:1 +日常性 1 +x:1 +坝地 1 +x:1 +殉难 1 +x:1 +狂妄自大 1 +x:1 +温柔 1 +x:1 +塔式 1 +x:1 +港区 1 +x:1 +教育网 1 +x:1 +肯定论 1 +x:1 +洋车夫 1 +x:1 +润色 1 +x:1 +眄 1 +x:1 +理疗 1 +x:1 +臭名昭著 1 +x:1 +装糊涂 1 +x:1 +垄沟 1 +x:1 +插口 1 +x:1 +南阜村 1 +x:1 +上线人 1 +x:1 +价值 1 +x:1 +甚或 1 +x:1 +多愁善感 1 +x:1 +硕果 1 +x:1 +甘肃省 1 +x:1 +椰枣 1 +x:1 +插叙 1 +x:1 +柳琴 1 +x:1 +三仙湖镇 1 +x:1 +成指 1 +x:1 +休风 1 +x:1 +保安员 1 +x:1 +狗尾巴草 1 +x:1 +南水北调 1 +x:1 +露馅儿 1 +x:1 +汰旧换新 1 +x:1 +东奔西走 1 +x:1 +懋 1 +x:1 +由点到面 1 +x:1 +深圳河 1 +x:1 +八家户 1 +x:1 +引航道 1 +x:1 +莫里纳 1 +x:1 +塔座 1 +x:1 +糙米 1 +x:1 +霏霏 1 +x:1 +传球 1 +x:1 +承办人 1 +x:1 +差之毫厘 1 +x:1 +写景 1 +x:1 +螺旋 1 +x:1 +蹭蹬 1 +x:1 +切记 1 +x:1 +狭 2 +x:2 +法人股 1 +x:1 +港务 1 +x:1 +嫖娼案 1 +x:1 +公路网 1 +x:1 +胎膜 1 +x:1 +年龄段 1 +x:1 +童稚 1 +x:1 +目录学 1 +x:1 +培训部 1 +x:1 +书信集 1 +x:1 +管理篇 1 +x:1 +海水浴 1 +x:1 +适得其反 1 +x:1 +民改联 1 +x:1 +分析师 1 +x:1 +荒时暴月 1 +x:1 +适应性 1 +x:1 +懂中文者 1 +x:1 +淮菜 1 +x:1 +文学语言 1 +x:1 +土窟洞 1 +x:1 +狗牙草 1 +x:1 +苏式 1 +x:1 +龙羊峡 1 +x:1 +瑞丽 1 +x:1 +海桐花 1 +x:1 +街门 1 +x:1 +沙船 1 +x:1 +巴哈马籍 1 +x:1 +甲骨 1 +x:1 +断层山 1 +x:1 +干酪 1 +x:1 +玩艺儿 1 +x:1 +病菌 1 +x:1 +非虚构型 1 +x:1 +痕迹 1 +x:1 +吾国 1 +x:1 +毛坝乡 1 +x:1 +破晓 1 +x:1 +交款 1 +x:1 +荒诞不经 1 +x:1 +罗源 1 +x:1 +皱褶 1 +x:1 +尽可能 1 +x:1 +东奔西跑 1 +x:1 +彼得格勒 1 +x:1 +平分秋色 1 +x:1 +键槽 1 +x:1 +捷 71 +x:71 +言之有物 1 +x:1 +儋州市 1 +x:1 +穿山甲 1 +x:1 +高炉 1 +x:1 +改稿 1 +x:1 +教风 1 +x:1 +棉籽油 1 +x:1 +特宽幅 1 +x:1 +随风而去 1 +x:1 +柳眉 1 +x:1 +拉三扯四 1 +x:1 +绑带 1 +x:1 +一盘散沙 1 +x:1 +良骑 1 +x:1 +削球手 1 +x:1 +吱 1 +x:1 +难兄难弟 1 +x:1 +高炮 1 +x:1 +厂主 1 +x:1 +鹧鸪 1 +x:1 +渠道 1 +x:1 +证券局 1 +x:1 +位高权重 1 +x:1 +乡试 1 +x:1 +扬尘 1 +x:1 +白沙利亚 1 +x:1 +热爱 1 +x:1 +凭高望远 1 +x:1 +偏向 1 +x:1 +复交 1 +x:1 +锅炉 1 +x:1 +要犯 1 +x:1 +吨/小时 1 +x:1 +纱包线 1 +x:1 +共同体 1 +x:1 +令人羡慕 1 +x:1 +靠山 1 +x:1 +光棍 1 +x:1 +语气助词 1 +x:1 +哈市 1 +x:1 +无往不胜 1 +x:1 +综合店 1 +x:1 +文钱 1 +x:1 +高热 1 +x:1 +砸烂 1 +x:1 +高烧 1 +x:1 +立功奖 1 +x:1 +脑溢血 1 +x:1 +尝鼎一脔 1 +x:1 +梦魂萦绕 1 +x:1 +珊溪 1 +x:1 +马口铁 1 +x:1 +塌实 1 +x:1 +破旧 1 +x:1 +安家立业 1 +x:1 +传真 1 +x:1 +投球 1 +x:1 +彩虹 1 +x:1 +挺括 1 +x:1 +扶残 1 +x:1 +奎松 1 +x:1 +管家 1 +x:1 +港元 1 +x:1 +八乡四邻 1 +x:1 +小尾寒羊 1 +x:1 +杀青 1 +x:1 +传石 1 +x:1 +增益 1 +x:1 +东海县 1 +x:1 +喜怒 1 +x:1 +靠岸 1 +x:1 +报嫂 1 +x:1 +光栅 1 +x:1 +光标 1 +x:1 +珍珠 1 +x:1 +本性 1 +x:1 +监督网 1 +x:1 +斗牛场 1 +x:1 +垄断者 1 +x:1 +地角天涯 1 +x:1 +怔住 1 +x:1 +生产队长 1 +x:1 +诿责 1 +x:1 +学具 1 +x:1 +航材 1 +x:1 +启 27 +x:27 +饭钵 1 +x:1 +定州市 1 +x:1 +张茹集村 1 +x:1 +饭钱 1 +x:1 +谬误 1 +x:1 +锅灶 1 +x:1 +真假难辨 1 +x:1 +总产值 1 +x:1 +英格兰 1 +x:1 +液泡 1 +x:1 +丝绸版 1 +x:1 +教文体委 1 +x:1 +线束用 1 +x:1 +乐陵市 1 +x:1 +奇观 1 +x:1 +汉魏 1 +x:1 +指鹿为马 1 +x:1 +平板仪 1 +x:1 +历史主义 1 +x:1 +代缴 1 +x:1 +彩蘑 1 +x:1 +本息 1 +x:1 +收效甚微 1 +x:1 +飞跃性 1 +x:1 +信教者 1 +x:1 +喜形于色 1 +x:1 +预祝 1 +x:1 +含水 1 +x:1 +侄媳妇 1 +x:1 +复业 1 +x:1 +饭锅 1 +x:1 +尼泊尔籍 1 +x:1 +复信 1 +x:1 +容积 1 +x:1 +( 23888 +x:23888 +露宿风餐 1 +x:1 +水产场 1 +x:1 +觊觎 1 +x:1 +瓶口 1 +x:1 +剂子 1 +x:1 +内流河 1 +x:1 +金家寨 1 +x:1 +街面 1 +x:1 +吉水县 1 +x:1 +木芙蓉 1 +x:1 +冰冻期 1 +x:1 +翻砂 1 +x:1 +使用量 1 +x:1 +首尾相应 1 +x:1 +监督组 1 +x:1 +龙凤区 1 +x:1 +盈鼻 1 +x:1 +贵宾室 1 +x:1 +繁复 1 +x:1 +舶 1 +x:1 +沙湾镇 1 +x:1 +教育系 1 +x:1 +整合 1 +x:1 +付清 1 +x:1 +坚忍不拔 1 +x:1 +架份 1 +x:1 +蓝水 1 +x:1 +称多县 1 +x:1 +樵夫 1 +x:1 +歌剧本 1 +x:1 +十点 1 +x:1 +蒋墅镇 1 +x:1 +琼浆玉露 1 +x:1 +苏州 1 +x:1 +毗河 1 +x:1 +矿业权 1 +x:1 +省柴灶 1 +x:1 +串并联 1 +x:1 +片假名 1 +x:1 +衢州 1 +x:1 +葺 1 +x:1 +摩天楼 1 +x:1 +适应房 1 +x:1 +流转 1 +x:1 +防寒服 1 +x:1 +背部 1 +x:1 +塔山 1 +x:1 +插入 1 +x:1 +及时雨 1 +x:1 +笛 3 +x:3 +秦宫 1 +x:1 +暑热 1 +x:1 +母线 1 +x:1 +箢箕 1 +x:1 +复位 1 +x:1 +架上 1 +x:1 +地形图 1 +x:1 +豚鼠 1 +x:1 +盘货 1 +x:1 +析出 1 +x:1 +过夜 1 +x:1 +蒙城县 1 +x:1 +孙陆村 1 +x:1 +桥党 1 +x:1 +善教者 1 +x:1 +奇袭 1 +x:1 +园艺节 1 +x:1 +厂方 1 +x:1 +滁县 1 +x:1 +望塔 1 +x:1 +袋猫 1 +x:1 +掘开 1 +x:1 +蒙古图村 1 +x:1 +白色恐怖 1 +x:1 +层次性 1 +x:1 +解放中路 1 +x:1 +送行人 1 +x:1 +议联 1 +x:1 +表哥 1 +x:1 +哄抬 1 +x:1 +产业部 1 +x:1 +橘子园 1 +x:1 +塔尖 1 +x:1 +抗拉力 1 +x:1 +交椅 1 +x:1 +哄抢 1 +x:1 +高照 1 +x:1 +复合板 1 +x:1 +喝六呼么 1 +x:1 +理睬 1 +x:1 +主任室 1 +x:1 +复会 1 +x:1 +港城 1 +x:1 +背面 1 +x:1 +光溜 1 +x:1 +蛾眉 1 +x:1 +尝尝 1 +x:1 +光源 1 +x:1 +土蚕 1 +x:1 +小口径 1 +x:1 +平房院 1 +x:1 +街道 1 +x:1 +主题团会 1 +x:1 +倘 25 +x:25 +尚志 1 +x:1 +硝酸盐 1 +x:1 +无言以答 1 +x:1 +三合会 1 +x:1 +接 420 +x:420 +代种 1 +x:1 +僵冷 1 +x:1 +明星赛 1 +x:1 +马桩 1 +x:1 +马桶 1 +x:1 +分析家 1 +x:1 +单立人儿 1 +x:1 +类型 1 +x:1 +温室群 1 +x:1 +厂房 1 +x:1 +瓮安县 1 +x:1 +辛店村 1 +x:1 +秦山 1 +x:1 +以貌取人 1 +x:1 +光敏核 1 +x:1 +光滑 1 +x:1 +免费餐 1 +x:1 +非工作 1 +x:1 +正式工 1 +x:1 +脑室 1 +x:1 +容纳 1 +x:1 +液氮 1 +x:1 +系主任 1 +x:1 +半圆形 1 +x:1 +进出港 1 +x:1 +金矿脉 1 +x:1 +光滩 1 +x:1 +存款单 1 +x:1 +武装 1 +x:1 +沼气 1 +x:1 +作假者 1 +x:1 +四环 1 +x:1 +整取 1 +x:1 +货主方 1 +x:1 +退格符 1 +x:1 +太平山 1 +x:1 +马棚 1 +x:1 +秦岭 1 +x:1 +温控 1 +x:1 +用餐室 1 +x:1 +选项 1 +x:1 +脑子 1 +x:1 +克勤克俭 1 +x:1 +脑存 1 +x:1 +注音字母 1 +x:1 +透亮度 1 +x:1 +猫哭老鼠 1 +x:1 +不及格者 1 +x:1 +投资人 1 +x:1 +掣肘 1 +x:1 +地图学家 1 +x:1 +电解质 1 +x:1 +信宜市 1 +x:1 +仓满库盈 1 +x:1 +插嘴 1 +x:1 +观者 1 +x:1 +侧翼 1 +x:1 +乡贤 1 +x:1 +断层处 1 +x:1 +访谈录 1 +x:1 +轮换制 1 +x:1 +浑 10 +x:10 +垂手而得 1 +x:1 +成家立业 1 +x:1 +交游 1 +x:1 +时代感 1 +x:1 +万隆 1 +x:1 +涛声 1 +x:1 +枪榴弹 1 +x:1 +正手球 1 +x:1 +鼓膜 1 +x:1 +地铁站 1 +x:1 +赴宴 1 +x:1 +宰牲节 1 +x:1 +奇迹 1 +x:1 +坝区 1 +x:1 +上议院 1 +x:1 +灭顶之灾 1 +x:1 +助残 1 +x:1 +太阳镜 1 +x:1 +武行 1 +x:1 +嘉奖令 1 +x:1 +银装素裹 1 +x:1 +清风明月 1 +x:1 +黄檗罗 1 +x:1 +徇 1 +x:1 +埃文 1 +x:1 +猪苗 1 +x:1 +溶液 1 +x:1 +验伪机 1 +x:1 +警觉性 1 +x:1 +桥基 1 +x:1 +比武 1 +x:1 +统治阶级 1 +x:1 +牌匾 1 +x:1 +与世沉浮 1 +x:1 +成本 1 +x:1 +池座 1 +x:1 +罗宾岛 1 +x:1 +大庄矿 1 +x:1 +胡子 1 +x:1 +埃方 1 +x:1 +股长 1 +x:1 +常青藤 1 +x:1 +红十一团 1 +x:1 +三合一 1 +x:1 +金家巷 1 +x:1 +小店村 1 +x:1 +刘海 1 +x:1 +王铜 1 +x:1 +镀 14 +x:14 +三提五统 1 +x:1 +记忆犹新 1 +x:1 +背包带 1 +x:1 +雷池 1 +x:1 +郧县 1 +x:1 +法会 1 +x:1 +干燥化 1 +x:1 +教龄 1 +x:1 +背阴 1 +x:1 +电信 1 +x:1 +小分队 1 +x:1 +财贸所 1 +x:1 +似理非理 1 +x:1 +高矗 1 +x:1 +公民院 1 +x:1 +成材 1 +x:1 +高矮 1 +x:1 +难以言状 1 +x:1 +桥型 1 +x:1 +切碎机 1 +x:1 +暑瘟 1 +x:1 +高知 1 +x:1 +扇车 1 +x:1 +满期者 1 +x:1 +陀螺 1 +x:1 +雷汞 1 +x:1 +休息亭 1 +x:1 +吁 2 +x:2 +仇外 1 +x:1 +谢意 1 +x:1 +楷模 1 +x:1 +猪苓 1 +x:1 +格格 1 +x:1 +属吏 1 +x:1 +破戒 1 +x:1 +本月 1 +x:1 +传热 1 +x:1 +正中要害 1 +x:1 +价工发 1 +x:1 +骄傲自满 1 +x:1 +留言人 1 +x:1 +本期 1 +x:1 +营业所 1 +x:1 +土蜂 1 +x:1 +伊春市 1 +x:1 +二不图利 1 +x:1 +政党法 1 +x:1 +偏压 1 +x:1 +表功 1 +x:1 +胰 1 +x:1 +比比 1 +x:1 +桥址 1 +x:1 +成果 1 +x:1 +盲棋 1 +x:1 +述职 1 +x:1 +颤颤巍巍 1 +x:1 +蜈蚣 1 +x:1 +县情 1 +x:1 +马槽 1 +x:1 +靠实 1 +x:1 +卸甲坪乡 1 +x:1 +溶洞 1 +x:1 +从谏如流 1 +x:1 +桑干 1 +x:1 +秦巴 1 +x:1 +茶色素厂 1 +x:1 +林家屯乡 1 +x:1 +土蝗 1 +x:1 +审批组 1 +x:1 +刨冰 1 +x:1 +早育 1 +x:1 +或然性 1 +x:1 +将功赎罪 1 +x:1 +本村 1 +x:1 +三和土 1 +x:1 +一业化 1 +x:1 +偏右 1 +x:1 +被领导者 1 +x:1 +接驳 1 +x:1 +临泽县 1 +x:1 +朱膘色 1 +x:1 +沙虫 1 +x:1 +本来 1 +x:1 +四爷 1 +x:1 +时代性 1 +x:1 +乡谈 1 +x:1 +代码 1 +x:1 +乡谊 1 +x:1 +秦川 1 +x:1 +秦州 1 +x:1 +试举 1 +x:1 +应征 1 +x:1 +丁腈橡胶 1 +x:1 +综合处 1 +x:1 +孙儿 1 +x:1 +五柳街 1 +x:1 +福至心灵 1 +x:1 +尚兴村 1 +x:1 +涨势 1 +x:1 +苏子 1 +x:1 +控申 1 +x:1 +心心相印 1 +x:1 +简明扼要 1 +x:1 +无水害 1 +x:1 +金霉素 1 +x:1 +红艳艳 1 +x:1 +桂元 1 +x:1 +渐 89 +x:89 +合众国 1 +x:1 +主棺 1 +x:1 +朱槿 1 +x:1 +溶溶 1 +x:1 +鼓荡 1 +x:1 +助长 1 +x:1 +漫画界 1 +x:1 +肿瘤 1 +x:1 +五保户 1 +x:1 +乐得 1 +x:1 +入海口 1 +x:1 +省宝 1 +x:1 +难以启齿 1 +x:1 +一得之见 1 +x:1 +奋发图强 1 +x:1 +瞎奶 1 +x:1 +新颖性 1 +x:1 +交法 1 +x:1 +监督箱 1 +x:1 +全天然 1 +x:1 +老字号 1 +x:1 +代管 1 +x:1 +三四季度 1 +x:1 +螺髻山 1 +x:1 +约稿 1 +x:1 +螺丝钉 1 +x:1 +超编 1 +x:1 +超标率 1 +x:1 +五里桥乡 1 +x:1 +偏偏 1 +x:1 +抽油烟机 1 +x:1 +光泽 1 +x:1 +倾向性 1 +x:1 +外厂 1 +x:1 +诩 1 +x:1 +一批 1 +x:1 +恋爱 1 +x:1 +总额 1 +x:1 +地形区 1 +x:1 +翱 1 +x:1 +柜内 1 +x:1 +蝶 13 +x:13 +球蛋白 1 +x:1 +教育科 1 +x:1 +刨刀 1 +x:1 +光波 1 +x:1 +庄河市 1 +x:1 +无量数 1 +x:1 +保护伞 1 +x:1 +婴戏纹 1 +x:1 +港商 1 +x:1 +大朝山 1 +x:1 +苏堤 1 +x:1 +光气 1 +x:1 +斥之为 1 +x:1 +汤峪镇 1 +x:1 +茶夹 1 +x:1 +刑事犯 1 +x:1 +表冠 1 +x:1 +九年制 1 +x:1 +实 361 +x:361 +莱阳市 1 +x:1 +孕穗期 1 +x:1 +一味 1 +x:1 +交汇 1 +x:1 +雷击火 1 +x:1 +小先生 1 +x:1 +表册 1 +x:1 +杂音 1 +x:1 +彩船 1 +x:1 +厂情 1 +x:1 +津门 1 +x:1 +盘行 1 +x:1 +土著 1 +x:1 +炔雌醚 1 +x:1 +偏僻 1 +x:1 +焉 48 +x:48 +满人 1 +x:1 +桥名 1 +x:1 +童心未泯 1 +x:1 +既 2128 +x:2128 +布莱夏 1 +x:1 +整冻 1 +x:1 +侮辱性 1 +x:1 +拓荒 1 +x:1 +理工学院 1 +x:1 +土葬 1 +x:1 +少者 1 +x:1 +本体论 1 +x:1 +远在天边 1 +x:1 +代笔 1 +x:1 +武装带 1 +x:1 +本文 1 +x:1 +脑壳 1 +x:1 +坛子 1 +x:1 +声道 1 +x:1 +扇贝 1 +x:1 +杂陈 1 +x:1 +宅院 1 +x:1 +奇谈 1 +x:1 +烦琐 1 +x:1 +仇家 1 +x:1 +学制 1 +x:1 +杂院 1 +x:1 +直板 1 +x:1 +监督站 1 +x:1 +国库部 1 +x:1 +宏昌里 1 +x:1 +电脑商 1 +x:1 +蓝桥 1 +x:1 +永济市 1 +x:1 +顺杆儿爬 1 +x:1 +四热 1 +x:1 +光润 1 +x:1 +成数 1 +x:1 +武说 1 +x:1 +袈裟 1 +x:1 +八仙桌 1 +x:1 +胡天 1 +x:1 +太阳雨 1 +x:1 +小宝宝 1 +x:1 +添设 1 +x:1 +林州市 1 +x:1 +毓 1 +x:1 +君山区队 1 +x:1 +教育学系 1 +x:1 +行车者 1 +x:1 +三门河乡 1 +x:1 +偏关 1 +x:1 +巨野县 1 +x:1 +赵州桥 1 +x:1 +万籁俱寂 1 +x:1 +接风 1 +x:1 +玉泉村 1 +x:1 +鼓舞 1 +x:1 +偏光 1 +x:1 +交涉 1 +x:1 +投其所好 1 +x:1 +四点 1 +x:1 +成教 1 +x:1 +渤海湾 1 +x:1 +保护价 1 +x:1 +腰伤 1 +x:1 +戛 1 +x:1 +成效 1 +x:1 +鬃刷 1 +x:1 +予以 1 +x:1 +一举一动 1 +x:1 +寸草寸金 1 +x:1 +成方 1 +x:1 +婴儿车 1 +x:1 +维生素甲 1 +x:1 +袭用 1 +x:1 +超绝 1 +x:1 +光洋 1 +x:1 +打折扣 1 +x:1 +王陵 1 +x:1 +建校费 1 +x:1 +光洁 1 +x:1 +哈密 1 +x:1 +马毛 1 +x:1 +雄风 1 +x:1 +稻子 1 +x:1 +证券委 1 +x:1 +疑问句 1 +x:1 +成料 1 +x:1 +挡风墙 1 +x:1 +干靠 1 +x:1 +分子筛 1 +x:1 +白银丸 1 +x:1 +高田 1 +x:1 +太阳队 1 +x:1 +璞河镇 1 +x:1 +高息揽存 1 +x:1 +乌蒙山 1 +x:1 +饭量 1 +x:1 +凶狂 1 +x:1 +质量上乘 1 +x:1 +晚秋作物 1 +x:1 +政治课 1 +x:1 +武警 1 +x:1 +盖 262 +x:262 +扎花 1 +x:1 +悠游 1 +x:1 +我厂 1 +x:1 +轮奸案 1 +x:1 +璜塘镇 1 +x:1 +板胡曲 1 +x:1 +本格拉省 1 +x:1 +超级 1 +x:1 +市地行 1 +x:1 +摆地摊 1 +x:1 +锨把 1 +x:1 +盘西 1 +x:1 +本数 1 +x:1 +营业性 1 +x:1 +温情 1 +x:1 +怪调 1 +x:1 +海城市 1 +x:1 +寡不敌众 1 +x:1 +名胜古迹 1 +x:1 +塔基 1 +x:1 +饮马锦江 1 +x:1 +一览 1 +x:1 +刃片 1 +x:1 +早起 1 +x:1 +格方 1 +x:1 +字字句句 1 +x:1 +航运业 1 +x:1 +狐狸 1 +x:1 +脱离速度 1 +x:1 +拘于 1 +x:1 +牧马 1 +x:1 +三合堡村 1 +x:1 +摔跟头 1 +x:1 +疯子 1 +x:1 +格斗 1 +x:1 +垄断 1 +x:1 +沁入 1 +x:1 +人身险 1 +x:1 +议议 1 +x:1 +辰光杯 1 +x:1 +一门心思 1 +x:1 +小熊猫 1 +x:1 +塔城 1 +x:1 +议论 1 +x:1 +总集 1 +x:1 +棕榈科 1 +x:1 +西泠 1 +x:1 +整形 1 +x:1 +腺体 1 +x:1 +技能型 1 +x:1 +致病菌 1 +x:1 +桑叶 1 +x:1 +居功自恃 1 +x:1 +表彰 1 +x:1 +降旗队 1 +x:1 +猫猫关 1 +x:1 +世面 1 +x:1 +干预 1 +x:1 +淡露 1 +x:1 +虔 2 +x:2 +无望 1 +x:1 +望台 1 +x:1 +休渔期 1 +x:1 +帘内 1 +x:1 +港客 1 +x:1 +一片哗然 1 +x:1 +柳絮 1 +x:1 +岩盐 1 +x:1 +蓝本 1 +x:1 +交投 1 +x:1 +椴木丛村 1 +x:1 +高程 1 +x:1 +大慈大悲 1 +x:1 +子母扣儿 1 +x:1 +胎衣 1 +x:1 +白肩雕 1 +x:1 +发财图 1 +x:1 +分体式 1 +x:1 +总院 1 +x:1 +警长制 1 +x:1 +建管局 1 +x:1 +控管 1 +x:1 +主教团 1 +x:1 +力尽筋疲 1 +x:1 +备付金率 1 +x:1 +东风路 1 +x:1 +交手 1 +x:1 +超薄型 1 +x:1 +浮桥 1 +x:1 +偏废 1 +x:1 +航测 1 +x:1 +费 242 +x:242 +刀斫斧砍 1 +x:1 +汉中门 1 +x:1 +祁 26 +x:26 +涂装 1 +x:1 +鼓足 1 +x:1 +枯枝败叶 1 +x:1 +孙桥镇 1 +x:1 +浮标 1 +x:1 +锒铛入狱 1 +x:1 +玛雅 1 +x:1 +吻别 1 +x:1 +尼龙伞 1 +x:1 +富集点 1 +x:1 +中村梁子 1 +x:1 +消防员 1 +x:1 +应价者 1 +x:1 +逾期 1 +x:1 +总队 1 +x:1 +临走 1 +x:1 +高空 1 +x:1 +机器厂 1 +x:1 +交战 1 +x:1 +非行政性 1 +x:1 +花榈木 1 +x:1 +信宜县 1 +x:1 +洗手不干 1 +x:1 +恶鬼 1 +x:1 +缄 1 +x:1 +引航人 1 +x:1 +主副食品 1 +x:1 +驴子 1 +x:1 +偷鸡摸狗 1 +x:1 +温温 1 +x:1 +航标区 1 +x:1 +性欲 1 +x:1 +约略 1 +x:1 +流氓罪 1 +x:1 +表带 1 +x:1 +嫩白 1 +x:1 +西装革履 1 +x:1 +伤 215 +x:215 +榨菜 1 +x:1 +感人至深 1 +x:1 +政企不分 1 +x:1 +整年 1 +x:1 +江门市 1 +x:1 +真面目 1 +x:1 +侧线 1 +x:1 +哭天喊地 1 +x:1 +血本无归 1 +x:1 +哪家 1 +x:1 +干馕 1 +x:1 +土话 1 +x:1 +白葡萄酒 1 +x:1 +航油 1 +x:1 +温湿 1 +x:1 +适合 1 +x:1 +如泣如诉 1 +x:1 +交接 1 +x:1 +滴水成冰 1 +x:1 +谢恩 1 +x:1 +腐 20 +x:20 +精湛 1 +x:1 +成武 1 +x:1 +保安局 1 +x:1 +目高于顶 1 +x:1 +玄武湖 1 +x:1 +酱紫 1 +x:1 +举目无亲 1 +x:1 +奇艳 1 +x:1 +投缘 1 +x:1 +四纵 1 +x:1 +太阳风 1 +x:1 +家蝇 1 +x:1 +竭 2 +x:2 +龙眠河 1 +x:1 +土语 1 +x:1 +四级 1 +x:1 +制片业 1 +x:1 +阿西西 1 +x:1 +分析图 1 +x:1 +池洞镇 1 +x:1 +太平军 1 +x:1 +险景 1 +x:1 +靠垫 1 +x:1 +观赏 1 +x:1 +交换 1 +x:1 +特拉华河 1 +x:1 +众望所归 1 +x:1 +花红叶绿 1 +x:1 +岳阳道 1 +x:1 +攀高枝 1 +x:1 +护送 1 +x:1 +神龙 1 +x:1 +刨工 1 +x:1 +插孔 1 +x:1 +信皮儿 1 +x:1 +淡雅 1 +x:1 +僵尸 1 +x:1 +本次 1 +x:1 +东南面 1 +x:1 +归行率 1 +x:1 +执行庭 1 +x:1 +一体化 1 +x:1 +加里萨 1 +x:1 +虎牙 1 +x:1 +燕王 1 +x:1 +桥孔 1 +x:1 +古人类 1 +x:1 +退伍军人 1 +x:1 +五官科 1 +x:1 +去伪存真 1 +x:1 +魁北克省 1 +x:1 +高等 1 +x:1 +水稻所 1 +x:1 +自由放任 1 +x:1 +南洋 1 +x:1 +含有 1 +x:1 +前车牌 1 +x:1 +电脑室 1 +x:1 +知识量 1 +x:1 +小动作 1 +x:1 +颠颠簸簸 1 +x:1 +不管部长 1 +x:1 +制片人 1 +x:1 +安次区 1 +x:1 +高筒 1 +x:1 +木勺 1 +x:1 +僵局 1 +x:1 +乡老 1 +x:1 +联想式 1 +x:1 +佛牙 1 +x:1 +价值论 1 +x:1 +红莹莹 1 +x:1 +老K 1 +x:1 +杏黄 1 +x:1 +偏心 1 +x:1 +分析器 1 +x:1 +青春片 1 +x:1 +无核区 1 +x:1 +生理学 1 +x:1 +威廉斯堡 1 +x:1 +嗜睡 1 +x:1 +酒店业 1 +x:1 +顾问组 1 +x:1 +吃大户 1 +x:1 +马方 1 +x:1 +稀 28 +x:28 +翻然 1 +x:1 +资金额 1 +x:1 +柳编 1 +x:1 +烟云过眼 1 +x:1 +伯 2 +x:2 +每周五 1 +x:1 +五道岗 1 +x:1 +散乱 1 +x:1 +肺静脉 1 +x:1 +孩童 1 +x:1 +选集 1 +x:1 +透透的 1 +x:1 +赠言 1 +x:1 +财势 1 +x:1 +砸碎 1 +x:1 +胸内外科 1 +x:1 +红脸 1 +x:1 +交情 1 +x:1 +敲击 1 +x:1 +类如 1 +x:1 +心照不宣 1 +x:1 +通车量 1 +x:1 +开户 1 +x:1 +推介会 1 +x:1 +非提速 1 +x:1 +桥墩 1 +x:1 +精气神儿 1 +x:1 +啊 398 +x:398 +孙庄 1 +x:1 +甲酚 1 +x:1 +临近 1 +x:1 +电令 1 +x:1 +胡吹 1 +x:1 +沙角 1 +x:1 +义务劳动 1 +x:1 +司售人员 1 +x:1 +汤 196 +x:196 +满满当当 1 +x:1 +芭蕾舞史 1 +x:1 +甲酸 1 +x:1 +胡同 1 +x:1 +甘肃籍 1 +x:1 +价字 1 +x:1 +能量 1 +x:1 +甲酯 1 +x:1 +与共 1 +x:1 +未成年人 1 +x:1 +每周三 1 +x:1 +经验性 1 +x:1 +剧艺学 1 +x:1 +本栏 1 +x:1 +花池村 1 +x:1 +每周一 1 +x:1 +甲醚 1 +x:1 +甲醛 1 +x:1 +安安静静 1 +x:1 +甲醇 1 +x:1 +嫂子 1 +x:1 +兴地 1 +x:1 +青梅市 1 +x:1 +自行其事 1 +x:1 +散件 1 +x:1 +格木 1 +x:1 +输变电站 1 +x:1 +翔飞 1 +x:1 +本校 1 +x:1 +狐仙 1 +x:1 +时代潮 1 +x:1 +竞投品 1 +x:1 +皇太后 1 +x:1 +壤土 1 +x:1 +镇压 1 +x:1 +永济厂 1 +x:1 +猫腻 1 +x:1 +帐房村 1 +x:1 +内避套 1 +x:1 +章法 1 +x:1 +自强心 1 +x:1 +拐子 1 +x:1 +本案 1 +x:1 +黑山羊 1 +x:1 +同音 1 +x:1 +花园路 1 +x:1 +部手机 1 +x:1 +子午卯酉 1 +x:1 +定海 1 +x:1 +终端机 1 +x:1 +高硕 1 +x:1 +杀鸡吓猴 1 +x:1 +桅灯 1 +x:1 +婉转 1 +x:1 +教育界 1 +x:1 +仪仗队 1 +x:1 +光电池 1 +x:1 +抽紧 1 +x:1 +亚松森 1 +x:1 +刨床 1 +x:1 +明水 1 +x:1 +发行所 1 +x:1 +美洲隼 1 +x:1 +无锡县 1 +x:1 +贼眉鼠眼 1 +x:1 +沁县 1 +x:1 +农家肥 1 +x:1 +沙袋 1 +x:1 +嫂嫂 1 +x:1 +银信 1 +x:1 +相视 1 +x:1 +仰天长叹 1 +x:1 +温水 1 +x:1 +外乡人 1 +x:1 +莱沃恰 1 +x:1 +加枝添叶 1 +x:1 +自然观 1 +x:1 +学位办 1 +x:1 +马来 1 +x:1 +说不定 1 +x:1 +审核方 1 +x:1 +赏心悦目 1 +x:1 +励 15 +x:15 +怪胎 1 +x:1 +证券商 1 +x:1 +管道工 1 +x:1 +翠林村 1 +x:1 +散体 1 +x:1 +同队 1 +x:1 +和服 1 +x:1 +显 159 +x:159 +五显镇 1 +x:1 +先遣组 1 +x:1 +出发点 1 +x:1 +滋阳湖 1 +x:1 +各负其责 1 +x:1 +下湖村 1 +x:1 +弦乐队 1 +x:1 +增编 1 +x:1 +宝顶 1 +x:1 +养机户 1 +x:1 +炮兵部 1 +x:1 +中段水 1 +x:1 +得鱼忘筌 1 +x:1 +高科 1 +x:1 +笔端 1 +x:1 +腽肭脐 1 +x:1 +四舍五入 1 +x:1 +价电子 1 +x:1 +贵宾厅 1 +x:1 +温江 1 +x:1 +先赋 1 +x:1 +超标车 1 +x:1 +马术 1 +x:1 +相持不下 1 +x:1 +印 651 +x:651 +散伙 1 +x:1 +炸药桶 1 +x:1 +表层 1 +x:1 +驹子 1 +x:1 +综合型 1 +x:1 +赠订 1 +x:1 +小麦面 1 +x:1 +鸦雀无声 1 +x:1 +蓝兮兮 1 +x:1 +嘉 34 +x:34 +了不得 1 +x:1 +热电效应 1 +x:1 +甜柚 1 +x:1 +悠扬 1 +x:1 +生意人 1 +x:1 +职业部 1 +x:1 +挂空档 1 +x:1 +趁火打劫 1 +x:1 +猛 99 +x:99 +彩车 1 +x:1 +三机局 1 +x:1 +地理系 1 +x:1 +饰演 1 +x:1 +背风 1 +x:1 +甜柿 1 +x:1 +芸香 1 +x:1 +灯笼罩 1 +x:1 +炒作者 1 +x:1 +冷溲溲 1 +x:1 +面对面 1 +x:1 +传统 1 +x:1 +插头 1 +x:1 +偏差 1 +x:1 +尝受 1 +x:1 +被叫方 1 +x:1 +比方 1 +x:1 +偏巧 1 +x:1 +三官庙矿 1 +x:1 +艄公 1 +x:1 +航港 1 +x:1 +导出 1 +x:1 +知难而退 1 +x:1 +校尉营 1 +x:1 +桥头 1 +x:1 +遗物 1 +x:1 +高祖 1 +x:1 +航渡 1 +x:1 +太平区 1 +x:1 +好日子 1 +x:1 +有限花序 1 +x:1 +捶胸顿足 1 +x:1 +九王庄村 1 +x:1 +拦 44 +x:44 +狼吞虎咽 1 +x:1 +港堤 1 +x:1 +马枪 1 +x:1 +毁灭性 1 +x:1 +孟加拉 1 +x:1 +马架 1 +x:1 +塔吊 1 +x:1 +甜枣 1 +x:1 +呼盟 1 +x:1 +咫步之遥 1 +x:1 +影落波摇 1 +x:1 +芭蕾舞剧 1 +x:1 +行走不便 1 +x:1 +千载难逢 1 +x:1 +休闲 1 +x:1 +牲口棚 1 +x:1 +传票 1 +x:1 +治疗学 1 +x:1 +塔台 1 +x:1 +交替 1 +x:1 +浮泛 1 +x:1 +本源 1 +x:1 +墙根 1 +x:1 +痛风 1 +x:1 +彩裙 1 +x:1 +高红 1 +x:1 +本溪 1 +x:1 +高级 1 +x:1 +今音 1 +x:1 +磁偏角 1 +x:1 +界定量 1 +x:1 +翻看 1 +x:1 +横贡呢 1 +x:1 +弋取 1 +x:1 +浮沉 1 +x:1 +投稿 1 +x:1 +餐费 1 +x:1 +教育班 1 +x:1 +盗版 1 +x:1 +平铺直叙 1 +x:1 +砌 27 +x:27 +胖子 1 +x:1 +超生 1 +x:1 +插座 1 +x:1 +童眸 1 +x:1 +婺城区 1 +x:1 +望城 1 +x:1 +募 4 +x:4 +棋逢对手 1 +x:1 +上下半场 1 +x:1 +伤者 1 +x:1 +表字 1 +x:1 +童真 1 +x:1 +教子有方 1 +x:1 +专题 1 +x:1 +余钱 1 +x:1 +兼听则明 1 +x:1 +江河水 1 +x:1 +高维 1 +x:1 +腾 45 +x:45 +金东里 1 +x:1 +坝子 1 +x:1 +疆 20 +x:20 +黄萝卜 1 +x:1 +求同存异 1 +x:1 +八十中 1 +x:1 +光明 1 +x:1 +拍片人 1 +x:1 +四等 1 +x:1 +塔卡 1 +x:1 +比拟 1 +x:1 +增加 1 +x:1 +病身 1 +x:1 +本港 1 +x:1 +移山填海 1 +x:1 +纳闷 1 +x:1 +传种 1 +x:1 +沈泉庄村 1 +x:1 +左海 1 +x:1 +山形 1 +x:1 +武者 1 +x:1 +打游击 1 +x:1 +螺栓 1 +x:1 +价工 1 +x:1 +嗡嗡嘤嘤 1 +x:1 +苏剧 1 +x:1 +价差 1 +x:1 +吐露真情 1 +x:1 +身历目睹 1 +x:1 +交映 1 +x:1 +入海处 1 +x:1 +救 182 +x:182 +佣人 1 +x:1 +休息 1 +x:1 +作息 1 +x:1 +褒扬 1 +x:1 +胸 46 +x:46 +弹弓 1 +x:1 +伯尔萨 1 +x:1 +临西 1 +x:1 +衣 67 +x:67 +凶猛 1 +x:1 +武联 1 +x:1 +替补席 1 +x:1 +仕进 1 +x:1 +整容 1 +x:1 +同里 1 +x:1 +学有所长 1 +x:1 +光景 1 +x:1 +武职 1 +x:1 +交易 1 +x:1 +劳务市场 1 +x:1 +乌纱帽 1 +x:1 +众口交赞 1 +x:1 +患难夫妻 1 +x:1 +热汤面 1 +x:1 +早衰 1 +x:1 +漫笔 1 +x:1 +观览 1 +x:1 +许身 1 +x:1 +勋劳 1 +x:1 +预言家 1 +x:1 +雕红漆 1 +x:1 +福庇子孙 1 +x:1 +衢县 1 +x:1 +灵寿县 1 +x:1 +故事稿 1 +x:1 +中纬度 1 +x:1 +小平车 1 +x:1 +时时处处 1 +x:1 +禁闭室 1 +x:1 +默认 1 +x:1 +赠与税 1 +x:1 +利钱 1 +x:1 +默许 1 +x:1 +如履薄冰 1 +x:1 +危险率 1 +x:1 +酿制 1 +x:1 +李子 1 +x:1 +十三大 1 +x:1 +出岔子 1 +x:1 +尿检 1 +x:1 +憎恨 1 +x:1 +理科 1 +x:1 +少许 1 +x:1 +胡匪 1 +x:1 +湘春路 1 +x:1 +黄金葛 1 +x:1 +渔户主 1 +x:1 +港府 1 +x:1 +尺幅千里 1 +x:1 +大全册 1 +x:1 +桑园 1 +x:1 +憎恶 1 +x:1 +苏欧司 1 +x:1 +言必有中 1 +x:1 +教鞭 1 +x:1 +西北缘 1 +x:1 +电脑式 1 +x:1 +析 15 +x:15 +光柱 1 +x:1 +慨 7 +x:7 +脑力 1 +x:1 +延河 1 +x:1 +错失良机 1 +x:1 +默读 1 +x:1 +斗牛士 1 +x:1 +干扰者 1 +x:1 +同道 1 +x:1 +轮转工 1 +x:1 +劳苦功高 1 +x:1 +变则通 1 +x:1 +低年级 1 +x:1 +默诵 1 +x:1 +封 398 +x:398 +千古佳话 1 +x:1 +果园乡 1 +x:1 +藤本植物 1 +x:1 +犊 3 +x:3 +浮浅 1 +x:1 +投篮 1 +x:1 +岬角 1 +x:1 +苏区 1 +x:1 +通脱木 1 +x:1 +战利品 1 +x:1 +目极千古 1 +x:1 +偏安 1 +x:1 +兀鹫 1 +x:1 +鸭 42 +x:42 +七纵八横 1 +x:1 +苏北 1 +x:1 +孙女 1 +x:1 +痛饮 1 +x:1 +刍议 1 +x:1 +古镇镇 1 +x:1 +光束 1 +x:1 +尾毛 1 +x:1 +尿样 1 +x:1 +临街 1 +x:1 +血枯病 1 +x:1 +港币 1 +x:1 +临行 1 +x:1 +虎虎生风 1 +x:1 +拍卖行 1 +x:1 +航校 1 +x:1 +丢面子 1 +x:1 +编采播 1 +x:1 +翻盖 1 +x:1 +展览证 1 +x:1 +翻盘 1 +x:1 +山东队 1 +x:1 +市政协 1 +x:1 +枣糕 1 +x:1 +拉丁区 1 +x:1 +苏南 1 +x:1 +茅家村 1 +x:1 +航标 1 +x:1 +东南郊 1 +x:1 +贵宾团 1 +x:1 +脑血管 1 +x:1 +馅 11 +x:11 +马扎 1 +x:1 +定义域 1 +x:1 +腰酸腿痛 1 +x:1 +胜任者 1 +x:1 +表头 1 +x:1 +千人一面 1 +x:1 +宜春市 1 +x:1 +目录名 1 +x:1 +钢铁长城 1 +x:1 +接待部 1 +x:1 +直贡帖寺 1 +x:1 +总部 1 +x:1 +常规赛 1 +x:1 +镀锡铁 1 +x:1 +东南部 1 +x:1 +波及 1 +x:1 +航母 1 +x:1 +斗牛宫 1 +x:1 +县歌 1 +x:1 +润资 1 +x:1 +预订款 1 +x:1 +专有物 1 +x:1 +高粱 1 +x:1 +电脑展 1 +x:1 +旧都 1 +x:1 +米字旗 1 +x:1 +整夜 1 +x:1 +马戏 1 +x:1 +丝绸组 1 +x:1 +柳筐 1 +x:1 +砂布厂 1 +x:1 +武鸣县 1 +x:1 +痛骂 1 +x:1 +本法 1 +x:1 +童画 1 +x:1 +代储员 1 +x:1 +翻番 1 +x:1 +童男 1 +x:1 +领导人员 1 +x:1 +马战 1 +x:1 +风啸子 1 +x:1 +厂桥 1 +x:1 +胸中有数 1 +x:1 +兽医局 1 +x:1 +病象 1 +x:1 +强龙型 1 +x:1 +不落征帆 1 +x:1 +滞期费 1 +x:1 +整天 1 +x:1 +呼吸系统 1 +x:1 +爝火 1 +x:1 +阴暗面 1 +x:1 +打歌舞 1 +x:1 +采蒂涅 1 +x:1 +腹稿 1 +x:1 +助跳道 1 +x:1 +功成名就 1 +x:1 +植物 1 +x:1 +通透式 1 +x:1 +宫外孕 1 +x:1 +生产过剩 1 +x:1 +上甬村 1 +x:1 +桥山 1 +x:1 +胖妞 1 +x:1 +营业楼 1 +x:1 +沙质 1 +x:1 +惭愧 1 +x:1 +点钞机 1 +x:1 +知觉 1 +x:1 +爆发性 1 +x:1 +小时/元 1 +x:1 +疾驰 1 +x:1 +坡道 1 +x:1 +鼓词 1 +x:1 +主裁判 1 +x:1 +再造术 1 +x:1 +奴隶制度 1 +x:1 +插屏 1 +x:1 +家无担石 1 +x:1 +土豚 1 +x:1 +希拉里 1 +x:1 +厂棍 1 +x:1 +武艺 1 +x:1 +秦国 1 +x:1 +失曹河 1 +x:1 +嚷嚷 1 +x:1 +打哈哈 1 +x:1 +土豆 1 +x:1 +饭食 1 +x:1 +航次 1 +x:1 +十人制 1 +x:1 +一损俱损 1 +x:1 +终身伴侣 1 +x:1 +坝头 1 +x:1 +论文赛 1 +x:1 +傣族 1 +x:1 +土豹 1 +x:1 +成法 1 +x:1 +表姐 1 +x:1 +浮渣 1 +x:1 +浮游 1 +x:1 +多元化 1 +x:1 +卖粥嫂 1 +x:1 +郴 2 +x:2 +扒窃 1 +x:1 +当断不断 1 +x:1 +吻合 1 +x:1 +奋飞 1 +x:1 +秦地 1 +x:1 +从天而降 1 +x:1 +斩六将 1 +x:1 +光斑 1 +x:1 +成活 1 +x:1 +三四月 1 +x:1 +棉纺锭 1 +x:1 +综合司 1 +x:1 +胡兰 1 +x:1 +主场地 1 +x:1 +投票 1 +x:1 +轻言细语 1 +x:1 +手表式 1 +x:1 +六里地屯 1 +x:1 +敲响 1 +x:1 +偶一为之 1 +x:1 +坛 8 +x:8 +偏失 1 +x:1 +芡粉 1 +x:1 +余恨 1 +x:1 +刨子 1 +x:1 +瀛州镇 1 +x:1 +毛纺锭 1 +x:1 +少见 1 +x:1 +沧海桑田 1 +x:1 +接待量 1 +x:1 +苏军 1 +x:1 +赃款 1 +x:1 +脆骨 1 +x:1 +余音 1 +x:1 +查号台 1 +x:1 +余韵 1 +x:1 +尾水平台 1 +x:1 +吉德万 1 +x:1 +大将军 1 +x:1 +佯装 1 +x:1 +南宁市 1 +x:1 +爱鸟 1 +x:1 +偏好 1 +x:1 +港岛 1 +x:1 +活生生 1 +x:1 +交方 1 +x:1 +童琴 1 +x:1 +宽大为怀 1 +x:1 +铝 18 +x:18 +螺母 1 +x:1 +纤维植物 1 +x:1 +先睹为快 1 +x:1 +姣妍 1 +x:1 +寄食 1 +x:1 +口头文学 1 +x:1 +土路 1 +x:1 +多义性 1 +x:1 +驱散 1 +x:1 +亚平宁 1 +x:1 +键板 1 +x:1 +芭蕾舞团 1 +x:1 +大失所望 1 +x:1 +坝墩 1 +x:1 +奇葩 1 +x:1 +汉阙 1 +x:1 +鬃 2 +x:2 +饭馆 1 +x:1 +慌乱 1 +x:1 +水灵灵 1 +x:1 +男子组 1 +x:1 +撒 71 +x:71 +顺义县 1 +x:1 +军委会 1 +x:1 +孙子 1 +x:1 +入出库 1 +x:1 +所以然 1 +x:1 +直贯而下 1 +x:1 +破格 1 +x:1 +龙港镇 1 +x:1 +汉阳 1 +x:1 +背鳍 1 +x:1 +接送 1 +x:1 +汉阴 1 +x:1 +容留 1 +x:1 +尖叫声 1 +x:1 +逵 9 +x:9 +塞拉利昂 1 +x:1 +接通 1 +x:1 +土货 1 +x:1 +歪理 1 +x:1 +太阳鸟 1 +x:1 +投票人 1 +x:1 +疑惑 1 +x:1 +苏公 1 +x:1 +铁索桥 1 +x:1 +稻区 1 +x:1 +马掌 1 +x:1 +横断山 1 +x:1 +含意 1 +x:1 +余震 1 +x:1 +剂型 1 +x:1 +光棍村 1 +x:1 +消除 1 +x:1 +交攻 1 +x:1 +破案 1 +x:1 +劳务 1 +x:1 +苏共 1 +x:1 +任人唯钱 1 +x:1 +活命之恩 1 +x:1 +来信版 1 +x:1 +温棚 1 +x:1 +床铺 1 +x:1 +费县 1 +x:1 +汉陵 1 +x:1 +机动权 1 +x:1 +价廉 1 +x:1 +加温器 1 +x:1 +盘腿 1 +x:1 +件 1894 +x:1894 +德阳 1 +x:1 +机电部 1 +x:1 +县长 1 +x:1 +居于 1 +x:1 +爱慕 1 +x:1 +影视业 1 +x:1 +眯细 1 +x:1 +乐团 1 +x:1 +老君庙 1 +x:1 +螺钿 1 +x:1 +被套 1 +x:1 +生境 1 +x:1 +乐园 1 +x:1 +黑色素 1 +x:1 +防护 1 +x:1 +药柜 1 +x:1 +高级小学 1 +x:1 +螺钉 1 +x:1 +五敛子 1 +x:1 +事无大小 1 +x:1 +绝 109 +x:109 +椰胡 1 +x:1 +水害 1 +x:1 +赣江 1 +x:1 +下马村 1 +x:1 +芥蓝菜 1 +x:1 +立方米 1 +x:1 +眼圈 1 +x:1 +将帅论 1 +x:1 +合作声 1 +x:1 +牧户 1 +x:1 +淡漠 1 +x:1 +玉版纸 1 +x:1 +玛湖 1 +x:1 +剧终 1 +x:1 +雏 2 +x:2 +干扰素 1 +x:1 +水富 1 +x:1 +恩施市 1 +x:1 +乐而忘返 1 +x:1 +一场空 1 +x:1 +杂感 1 +x:1 +爱意 1 +x:1 +盘绕 1 +x:1 +丰富多采 1 +x:1 +暴露无遗 1 +x:1 +驱驾 1 +x:1 +冷冷的 1 +x:1 +水寨 1 +x:1 +被头 1 +x:1 +强子 1 +x:1 +把关者 1 +x:1 +网络型 1 +x:1 +长平乡 1 +x:1 +巫头村 1 +x:1 +杀敌 1 +x:1 +塞北 1 +x:1 +马鳖 1 +x:1 +武举制 1 +x:1 +狗头军师 1 +x:1 +强家 1 +x:1 +割离 1 +x:1 +无着落 1 +x:1 +居中 1 +x:1 +树苗种 1 +x:1 +积食不化 1 +x:1 +上访者 1 +x:1 +在下 1 +x:1 +郎酒厂 1 +x:1 +要不然 1 +x:1 +循循善诱 1 +x:1 +童话 1 +x:1 +杏林 1 +x:1 +螺丝扣 1 +x:1 +病状 1 +x:1 +真理道 1 +x:1 +土牛 1 +x:1 +代购 1 +x:1 +选民 1 +x:1 +使用户 1 +x:1 +字库量 1 +x:1 +震耳欲聋 1 +x:1 +小腿肚子 1 +x:1 +临界 1 +x:1 +尼雅河 1 +x:1 +术业 1 +x:1 +怦怦 1 +x:1 +医药业 1 +x:1 +枣阳市 1 +x:1 +爱憎 1 +x:1 +翻译 1 +x:1 +作价员 1 +x:1 +不自禁 1 +x:1 +土特 1 +x:1 +阿拉伯式 1 +x:1 +土物 1 +x:1 +沙獾 1 +x:1 +扑朔迷离 1 +x:1 +彩球 1 +x:1 +收回 1 +x:1 +戈兰区 1 +x:1 +渝北 1 +x:1 +滑石片 1 +x:1 +内衣厂 1 +x:1 +市地级 1 +x:1 +什么样 1 +x:1 +斜塔 1 +x:1 +碑 116 +x:116 +合辙 1 +x:1 +带动力 1 +x:1 +蒙 111 +x:111 +收场 1 +x:1 +有信仰者 1 +x:1 +易学 1 +x:1 +后院起火 1 +x:1 +病猪 1 +x:1 +强威 1 +x:1 +慢吞吞 1 +x:1 +包裹 1 +x:1 +检察室 1 +x:1 +新旧交替 1 +x:1 +日子 1 +x:1 +渝南 1 +x:1 +生姜 1 +x:1 +淡紫 1 +x:1 +犯有 1 +x:1 +父执 1 +x:1 +九十月 1 +x:1 +立克次体 1 +x:1 +秦树乡 1 +x:1 +爱怜 1 +x:1 +调压井 1 +x:1 +容许 1 +x:1 +开采权 1 +x:1 +随遇而安 1 +x:1 +有来有往 1 +x:1 +风驰电掣 1 +x:1 +浅蓝 1 +x:1 +燃气灶 1 +x:1 +稀释 1 +x:1 +复合门 1 +x:1 +长江村 1 +x:1 +痛斥 1 +x:1 +街政 1 +x:1 +同江 1 +x:1 +字典 1 +x:1 +容人之短 1 +x:1 +炮击 1 +x:1 +集线器 1 +x:1 +爱惜 1 +x:1 +衣食行 1 +x:1 +爱情 1 +x:1 +操劳 1 +x:1 +凤头 1 +x:1 +对外部 1 +x:1 +同治 1 +x:1 +锣 7 +x:7 +梨花大鼓 1 +x:1 +乐坛 1 +x:1 +日寇 1 +x:1 +中隔墩 1 +x:1 +教武 1 +x:1 +西二乡 1 +x:1 +拥挤 1 +x:1 +坚挺度 1 +x:1 +操办 1 +x:1 +脸谱 1 +x:1 +居住 1 +x:1 +三棱镜 1 +x:1 +代谢 1 +x:1 +合作处 1 +x:1 +彩电 1 +x:1 +坏 214 +x:214 +马刀舞 1 +x:1 +眯缝 1 +x:1 +大礼服 1 +x:1 +胶纸 1 +x:1 +宪法 1 +x:1 +岔路河镇 1 +x:1 +选派 1 +x:1 +朝不保夕 1 +x:1 +乐土 1 +x:1 +沙特 1 +x:1 +筒 4 +x:4 +四合房 1 +x:1 +破除 1 +x:1 +兴冲冲 1 +x:1 +印经院 1 +x:1 +天津站 1 +x:1 +舀 6 +x:6 +强夯 1 +x:1 +跃脚板 1 +x:1 +牵引力 1 +x:1 +能者为师 1 +x:1 +土炕 1 +x:1 +强大 1 +x:1 +收听 1 +x:1 +猫科 1 +x:1 +被子 1 +x:1 +光电钟 1 +x:1 +散文体 1 +x:1 +摆摊子 1 +x:1 +贫困帽子 1 +x:1 +华盖木 1 +x:1 +街景 1 +x:1 +容装 1 +x:1 +迈阿密 1 +x:1 +土炮 1 +x:1 +座落 1 +x:1 +化纤厂 1 +x:1 +伏汛 1 +x:1 +烈士园 1 +x:1 +过往 1 +x:1 +尸位素餐 1 +x:1 +隐恶扬善 1 +x:1 +宋 767 +x:767 +涂片 1 +x:1 +纺工 1 +x:1 +赠物 1 +x:1 +礼品盒 1 +x:1 +率领 1 +x:1 +袍谷 1 +x:1 +寒窗 1 +x:1 +强奸 1 +x:1 +波动性 1 +x:1 +布朗族 1 +x:1 +野桑 1 +x:1 +犷悍 1 +x:1 +法学 1 +x:1 +概不负责 1 +x:1 +船形帽 1 +x:1 +寥寥可数 1 +x:1 +高胡 1 +x:1 +法子 1 +x:1 +稔子 1 +x:1 +破门 1 +x:1 +高能 1 +x:1 +马鸾 1 +x:1 +病灶 1 +x:1 +怀恨 1 +x:1 +剖腹产 1 +x:1 +趟趟 1 +x:1 +教案 1 +x:1 +杀杀 1 +x:1 +皮奥伊 1 +x:1 +标 60 +x:60 +乳浊液 1 +x:1 +高考 1 +x:1 +法家 1 +x:1 +引咎自责 1 +x:1 +高者 1 +x:1 +接洽 1 +x:1 +教育费 1 +x:1 +休止 1 +x:1 +初级中学 1 +x:1 +干才 1 +x:1 +零备件 1 +x:1 +喃字 1 +x:1 +猫神 1 +x:1 +生威 1 +x:1 +法宝 1 +x:1 +再三 1 +x:1 +沪剧 1 +x:1 +干扰 1 +x:1 +索菲亚 1 +x:1 +法定 1 +x:1 +不良率 1 +x:1 +水头 1 +x:1 +珠江 1 +x:1 +魔法师 1 +x:1 +高耸 1 +x:1 +办 2183 +x:2183 +增值税率 1 +x:1 +伏法 1 +x:1 +现实感 1 +x:1 +中巴车 1 +x:1 +呢制服 1 +x:1 +宝应县 1 +x:1 +高职 1 +x:1 +知情人 1 +x:1 +灯塔市 1 +x:1 +蚰蜒草 1 +x:1 +成都 1 +x:1 +此奖 1 +x:1 +大拇指 1 +x:1 +百子炮 1 +x:1 +银亮 1 +x:1 +奇秀 1 +x:1 +使用性 1 +x:1 +干戈 1 +x:1 +节能灯 1 +x:1 +黄衫 1 +x:1 +洗劫一空 1 +x:1 +五世同堂 1 +x:1 +鸟啼 1 +x:1 +淘汰式 1 +x:1 +鄯善国 1 +x:1 +苇浆 1 +x:1 +歌舞厅 1 +x:1 +土灶 1 +x:1 +万斤户 1 +x:1 +被害 1 +x:1 +日增 1 +x:1 +杀机 1 +x:1 +白眼傲物 1 +x:1 +鼠害 1 +x:1 +塞入 1 +x:1 +汉武 1 +x:1 +购假者 1 +x:1 +溉 1 +x:1 +歌舞剧 1 +x:1 +深不可测 1 +x:1 +燕子 1 +x:1 +或 4326 +x:4326 +苏州市 1 +x:1 +企鹅 1 +x:1 +余毒 1 +x:1 +东郊镇 1 +x:1 +源流有自 1 +x:1 +餐费票 1 +x:1 +刑侦队 1 +x:1 +止蚀 1 +x:1 +学分制 1 +x:1 +伏流 1 +x:1 +功夫 1 +x:1 +牡丹江市 1 +x:1 +水墨 1 +x:1 +生客 1 +x:1 +鸾 1 +x:1 +共建点 1 +x:1 +中长传 1 +x:1 +土燕 1 +x:1 +保皇派 1 +x:1 +有线电连 1 +x:1 +满载而归 1 +x:1 +淡水 1 +x:1 +本金 1 +x:1 +日头 1 +x:1 +稻花香 1 +x:1 +干掉 1 +x:1 +形式学 1 +x:1 +毛茶 1 +x:1 +不甘示弱 1 +x:1 +爱戴 1 +x:1 +水壶 1 +x:1 +洧川 1 +x:1 +水声 1 +x:1 +日夜 1 +x:1 +邪路 1 +x:1 +备用品 1 +x:1 +设计系 1 +x:1 +雏燕 1 +x:1 +盖房 1 +x:1 +观瞻 1 +x:1 +配图量 1 +x:1 +花园口镇 1 +x:1 +储存器 1 +x:1 +铸补 1 +x:1 +册 298 +x:298 +恩施州 1 +x:1 +缓 106 +x:106 +控股 1 +x:1 +告密 1 +x:1 +墓茔 1 +x:1 +徐汇区 1 +x:1 +不敢当 1 +x:1 +团结党 1 +x:1 +抱头鼠窜 1 +x:1 +童装 1 +x:1 +朱顶 1 +x:1 +淡泊 1 +x:1 +活性炭 1 +x:1 +剩下 1 +x:1 +奋斗 1 +x:1 +趴 15 +x:15 +同源 1 +x:1 +土焦 1 +x:1 +伴随着 1 +x:1 +乡党委 1 +x:1 +剧作者 1 +x:1 +庾 3 +x:3 +杂抄 1 +x:1 +强壮 1 +x:1 +杂技 1 +x:1 +水塘 1 +x:1 +生存 1 +x:1 +生字 1 +x:1 +水塔 1 +x:1 +爱抚 1 +x:1 +遍 238 +x:238 +生子 1 +x:1 +寰球 1 +x:1 +大部头儿 1 +x:1 +眼花缭乱 1 +x:1 +流动岗 1 +x:1 +地厅级 1 +x:1 +鼓风机 1 +x:1 +高腔 1 +x:1 +时代队 1 +x:1 +蚂蟥钉 1 +x:1 +光饼 1 +x:1 +史诗性 1 +x:1 +徇私舞弊 1 +x:1 +重蹈覆辙 1 +x:1 +厂门 1 +x:1 +蓝鲸 1 +x:1 +左顾右盼 1 +x:1 +绉纱 1 +x:1 +背悔 1 +x:1 +门阵列 1 +x:1 +碰巧 1 +x:1 +余款 1 +x:1 +鳄鱼衫 1 +x:1 +作业机 1 +x:1 +择菜 1 +x:1 +翻身 1 +x:1 +胆大心细 1 +x:1 +带动型 1 +x:1 +先进 1 +x:1 +童车 1 +x:1 +父本 1 +x:1 +驱鸟 1 +x:1 +痛惜 1 +x:1 +收到 1 +x:1 +草履虫 1 +x:1 +枪帆长 1 +x:1 +严肃 1 +x:1 +强强 1 +x:1 +转借 1 +x:1 +网络化 1 +x:1 +背板 1 +x:1 +纳流 1 +x:1 +时与 1 +x:1 +操场 1 +x:1 +病瘫 1 +x:1 +围歼 1 +x:1 +岁初 1 +x:1 +抗倭 1 +x:1 +笪 14 +x:14 +王族 1 +x:1 +奇缺 1 +x:1 +托漂 1 +x:1 +粉乎乎 1 +x:1 +停机场 1 +x:1 +袢子 1 +x:1 +呵佛骂祖 1 +x:1 +凤岗 1 +x:1 +奋战 1 +x:1 +稀缺性 1 +x:1 +妄自菲薄 1 +x:1 +太阳日 1 +x:1 +容身 1 +x:1 +揭阳 1 +x:1 +痛悔 1 +x:1 +假定性 1 +x:1 +植被 1 +x:1 +隆隆声 1 +x:1 +太阳时 1 +x:1 +翻车 1 +x:1 +教育课 1 +x:1 +伤破 1 +x:1 +体温表 1 +x:1 +禁制品 1 +x:1 +翻转 1 +x:1 +顺风球 1 +x:1 +停机坪 1 +x:1 +治沙办 1 +x:1 +易帜 1 +x:1 +细细 1 +x:1 +网络卡 1 +x:1 +展示会 1 +x:1 +焰口 1 +x:1 +敞开儿 1 +x:1 +捏一把汗 1 +x:1 +沙石 1 +x:1 +股本金 1 +x:1 +观点 1 +x:1 +易帅 1 +x:1 +公民权 1 +x:1 +还愿 1 +x:1 +误工费 1 +x:1 +磐 1 +x:1 +尿酸 1 +x:1 +甜食 1 +x:1 +功底 1 +x:1 +鲜品 1 +x:1 +资源法 1 +x:1 +合作局 1 +x:1 +凤尾 1 +x:1 +选案 1 +x:1 +怪罪 1 +x:1 +本队 1 +x:1 +片儿警 1 +x:1 +良民 1 +x:1 +唯恐 1 +x:1 +藏胞 1 +x:1 +天 3634 +x:3634 +生就 1 +x:1 +鄱阳湖畔 1 +x:1 +县里 1 +x:1 +经验之谈 1 +x:1 +沙眼 1 +x:1 +痛恨 1 +x:1 +四药 1 +x:1 +胶管 1 +x:1 +杂文 1 +x:1 +少爷 1 +x:1 +超越 1 +x:1 +颇感 1 +x:1 +默片 1 +x:1 +鸟协 1 +x:1 +强忍 1 +x:1 +本院 1 +x:1 +早熟 1 +x:1 +挫伤 1 +x:1 +爱方 1 +x:1 +葫 3 +x:3 +老马识途 1 +x:1 +搬兵 1 +x:1 +翻过 1 +x:1 +太子湾 1 +x:1 +创汇 1 +x:1 +规土局 1 +x:1 +乐台 1 +x:1 +献血量 1 +x:1 +法尺 1 +x:1 +背景 1 +x:1 +水底 1 +x:1 +派头 1 +x:1 +水库 1 +x:1 +沙皇 1 +x:1 +同样 1 +x:1 +投药 1 +x:1 +黄金时间 1 +x:1 +五莲县 1 +x:1 +乐句 1 +x:1 +茶室 1 +x:1 +日影 1 +x:1 +盘算 1 +x:1 +乞讨 1 +x:1 +下不来 1 +x:1 +黄土坡 1 +x:1 +干旱 1 +x:1 +同步性 1 +x:1 +甜饼 1 +x:1 +县道 1 +x:1 +肖形虎 1 +x:1 +如梦方醒 1 +x:1 +病眼 1 +x:1 +换算 1 +x:1 +去岁 1 +x:1 +治乱减负 1 +x:1 +内燃机车 1 +x:1 +省地级 1 +x:1 +撷 1 +x:1 +损人利己 1 +x:1 +有线电视 1 +x:1 +短剧 1 +x:1 +沙盆 1 +x:1 +沙盘 1 +x:1 +梁上君子 1 +x:1 +弥天大谎 1 +x:1 +义合堡 1 +x:1 +及时性 1 +x:1 +区外 1 +x:1 +武科 1 +x:1 +彩云飞 1 +x:1 +塞国 1 +x:1 +优胜劣汰 1 +x:1 +同桌 1 +x:1 +土石 1 +x:1 +同案 1 +x:1 +化纤品 1 +x:1 +兖石 1 +x:1 +急于求成 1 +x:1 +生工 1 +x:1 +兖矿 1 +x:1 +证交所 1 +x:1 +代表 1 +x:1 +水帘 1 +x:1 +息风 1 +x:1 +汉民 1 +x:1 +饶舌 1 +x:1 +强度 1 +x:1 +续篇 1 +x:1 +济阳集 1 +x:1 +得悟 1 +x:1 +水师 1 +x:1 +报头 1 +x:1 +井田制 1 +x:1 +监督表 1 +x:1 +鹿儿岛 1 +x:1 +白米饭 1 +x:1 +赞美歌 1 +x:1 +刺状物 1 +x:1 +观照 1 +x:1 +地产品 1 +x:1 +功德 1 +x:1 +分辨率 1 +x:1 +增至 1 +x:1 +尿道 1 +x:1 +热转印 1 +x:1 +胜仗 1 +x:1 +航道 1 +x:1 +约见 1 +x:1 +无声片 1 +x:1 +县郊 1 +x:1 +脆性 1 +x:1 +水带 1 +x:1 +胃口 1 +x:1 +日志 1 +x:1 +萨尔诺 1 +x:1 +使用权 1 +x:1 +大石碑 1 +x:1 +报复 1 +x:1 +鼓点 1 +x:1 +汉江 1 +x:1 +枝繁花多 1 +x:1 +鸡公车 1 +x:1 +奇绝 1 +x:1 +济阳县 1 +x:1 +痛感 1 +x:1 +甜香 1 +x:1 +昭觉寺 1 +x:1 +宇宙空间 1 +x:1 +弹词 1 +x:1 +农展会 1 +x:1 +注入式 1 +x:1 +政者 1 +x:1 +心中无数 1 +x:1 +玩火自焚 1 +x:1 +使用期 1 +x:1 +策略 1 +x:1 +自在性 1 +x:1 +可相容性 1 +x:1 +姨 5 +x:5 +水平 1 +x:1 +填平 1 +x:1 +收发 1 +x:1 +收取 1 +x:1 +收受 1 +x:1 +干支 1 +x:1 +抗击 1 +x:1 +伤天害命 1 +x:1 +潼关 1 +x:1 +金瓶梅 1 +x:1 +病理 1 +x:1 +三十五分 1 +x:1 +电力局 1 +x:1 +甚低频 1 +x:1 +冀中南 1 +x:1 +代课 1 +x:1 +怪模怪样 1 +x:1 +出生率 1 +x:1 +讲和 1 +x:1 +油压机 1 +x:1 +砖坯 1 +x:1 +教法 1 +x:1 +浮雕 1 +x:1 +本钢 1 +x:1 +哲学家 1 +x:1 +代词 1 +x:1 +势利小人 1 +x:1 +运兵车 1 +x:1 +麦海 1 +x:1 +铰链 1 +x:1 +亘古 1 +x:1 +胎盘 1 +x:1 +法式 1 +x:1 +本钱 1 +x:1 +四自 1 +x:1 +马驹 1 +x:1 +制呢厂 1 +x:1 +地震台站 1 +x:1 +同步 1 +x:1 +夷 5 +x:5 +张马乡 1 +x:1 +谈虎色变 1 +x:1 +杀掉 1 +x:1 +透明度 1 +x:1 +频传 1 +x:1 +歪路 1 +x:1 +辛店镇 1 +x:1 +二乙胺基 1 +x:1 +利辛县 1 +x:1 +满洲里市 1 +x:1 +容貌 1 +x:1 +水巷 1 +x:1 +教育观 1 +x:1 +振荡器 1 +x:1 +柳荫 1 +x:1 +童贞 1 +x:1 +危辞耸听 1 +x:1 +汾酒厂 1 +x:1 +水工 1 +x:1 +投考 1 +x:1 +痛打 1 +x:1 +超迈 1 +x:1 +还手 1 +x:1 +收储 1 +x:1 +临猗 1 +x:1 +超过 1 +x:1 +馋涎欲滴 1 +x:1 +培训期 1 +x:1 +垫背 1 +x:1 +背时 1 +x:1 +超远 1 +x:1 +轨迹 1 +x:1 +早班 1 +x:1 +良渚 1 +x:1 +五道林 1 +x:1 +南特港 1 +x:1 +候车 1 +x:1 +殉情 1 +x:1 +麦浪 1 +x:1 +王权 1 +x:1 +柳莺 1 +x:1 +租佃制 1 +x:1 +泪痕斑斑 1 +x:1 +渔歌 1 +x:1 +威舍镇 1 +x:1 +插翅难飞 1 +x:1 +找到 1 +x:1 +王村 1 +x:1 +虬曲 1 +x:1 +选拔赛 1 +x:1 +太谷 1 +x:1 +白虎星 1 +x:1 +幻想国 1 +x:1 +捋抚 1 +x:1 +成立会 1 +x:1 +民主党派 1 +x:1 +雷龙 1 +x:1 +装卸工 1 +x:1 +武穴 1 +x:1 +档级 1 +x:1 +民乐乡 1 +x:1 +童趣 1 +x:1 +总校 1 +x:1 +碰壁 1 +x:1 +倾盆大雨 1 +x:1 +教民 1 +x:1 +储存区 1 +x:1 +湛 4 +x:4 +褥套 1 +x:1 +检察局 1 +x:1 +修改稿 1 +x:1 +余温 1 +x:1 +鸟兽 1 +x:1 +比额 1 +x:1 +嫩芽头 1 +x:1 +多变性 1 +x:1 +马骡 1 +x:1 +垫肩 1 +x:1 +良梨镇 1 +x:1 +生平 1 +x:1 +审看 1 +x:1 +鼓王 1 +x:1 +背斗 1 +x:1 +同比 1 +x:1 +太阳村 1 +x:1 +背斜 1 +x:1 +王朝 1 +x:1 +雷鸣 1 +x:1 +叠层石 1 +x:1 +主干 1 +x:1 +苏常柴 1 +x:1 +屠宰点 1 +x:1 +飞机票 1 +x:1 +主跑道 1 +x:1 +逼报 1 +x:1 +逼抢 1 +x:1 +锴 2 +x:2 +传艺 1 +x:1 +彩珠 1 +x:1 +纽约港 1 +x:1 +高薪 1 +x:1 +乡绅 1 +x:1 +兵力 1 +x:1 +碰头 1 +x:1 +羽翼渐丰 1 +x:1 +强将 1 +x:1 +法帖 1 +x:1 +大大方方 1 +x:1 +搬动 1 +x:1 +四胡 1 +x:1 +磁合金 1 +x:1 +营业部 1 +x:1 +无机酸 1 +x:1 +枣红 1 +x:1 +雷鸟 1 +x:1 +法币 1 +x:1 +先驱者 1 +x:1 +节食 1 +x:1 +雁头 1 +x:1 +犯意 1 +x:1 +篷车 1 +x:1 +嫣然一笑 1 +x:1 +千古奇文 1 +x:1 +马鬃 1 +x:1 +卧舱 1 +x:1 +干果 1 +x:1 +村落 1 +x:1 +博览会 1 +x:1 +成长 1 +x:1 +童谣 1 +x:1 +一脉相传 1 +x:1 +万国宫 1 +x:1 +有线电话 1 +x:1 +别出心裁 1 +x:1 +干极 1 +x:1 +垫脚 1 +x:1 +子宫颈 1 +x:1 +收养 1 +x:1 +酸罐 1 +x:1 +自然课 1 +x:1 +靠 1482 +x:1482 +各个击破 1 +x:1 +强局 1 +x:1 +沙瓤 1 +x:1 +盘秤 1 +x:1 +收兑 1 +x:1 +干枯 1 +x:1 +种养加 1 +x:1 +约请 1 +x:1 +日工 1 +x:1 +杀手 1 +x:1 +照料 1 +x:1 +柳园村 1 +x:1 +歌舞团 1 +x:1 +法庭 1 +x:1 +国民新党 1 +x:1 +体温计 1 +x:1 +法规性 1 +x:1 +抗原 1 +x:1 +法度 1 +x:1 +噎嗝 1 +x:1 +床沿 1 +x:1 +克孜勒苏 1 +x:1 +柳芽 1 +x:1 +柳花 1 +x:1 +框 15 +x:15 +含山县 1 +x:1 +登革热病 1 +x:1 +动画人 1 +x:1 +准将城 1 +x:1 +制冷量 1 +x:1 +金小蜂 1 +x:1 +好意思 1 +x:1 +干杯 1 +x:1 +频仍 1 +x:1 +魏武帝 1 +x:1 +派对 1 +x:1 +佝偻病 1 +x:1 +放眼世界 1 +x:1 +需要者 1 +x:1 +渲染 1 +x:1 +厂里 1 +x:1 +病症 1 +x:1 +隶字 1 +x:1 +狭义 1 +x:1 +田田 1 +x:1 +白铁皮 1 +x:1 +杀戒 1 +x:1 +约计 1 +x:1 +戏曲界 1 +x:1 +天理不容 1 +x:1 +病痛 1 +x:1 +管帅 1 +x:1 +虬枝 1 +x:1 +水层 1 +x:1 +厉行 1 +x:1 +鲜味 1 +x:1 +红头文件 1 +x:1 +报奖 1 +x:1 +毫瓦 1 +x:1 +奉若神明 1 +x:1 +红得发紫 1 +x:1 +油画笔 1 +x:1 +巡视 1 +x:1 +杀戮 1 +x:1 +南沈灶镇 1 +x:1 +民事案 1 +x:1 +教派 1 +x:1 +硫酸盐 1 +x:1 +短发 1 +x:1 +满城县 1 +x:1 +拓片 1 +x:1 +土公路 1 +x:1 +网络式 1 +x:1 +法儿 1 +x:1 +四运 1 +x:1 +病程 1 +x:1 +箍 3 +x:3 +土窑 1 +x:1 +乌龙入珠 1 +x:1 +独立国 1 +x:1 +查询台 1 +x:1 +水压 1 +x:1 +强区 1 +x:1 +五讲四美 1 +x:1 +捣乱 1 +x:1 +告假 1 +x:1 +水厂 1 +x:1 +日前 1 +x:1 +销售点 1 +x:1 +民仓 1 +x:1 +寻根究底 1 +x:1 +袋装 1 +x:1 +雅乐 1 +x:1 +淡村 1 +x:1 +功利 1 +x:1 +方便之门 1 +x:1 +沙箱 1 +x:1 +十样锦 1 +x:1 +韧皮部 1 +x:1 +追踪 1 +x:1 +老拳挥舞 1 +x:1 +新筑镇 1 +x:1 +是个儿 1 +x:1 +强占 1 +x:1 +焰心 1 +x:1 +难进 1 +x:1 +半工半读 1 +x:1 +休憩 1 +x:1 +增调 1 +x:1 +巴林国 1 +x:1 +派员 1 +x:1 +和合学 1 +x:1 +生僻 1 +x:1 +日刊 1 +x:1 +便利店 1 +x:1 +淡月 1 +x:1 +四边 1 +x:1 +乐府 1 +x:1 +浮 41 +x:41 +彩粉 1 +x:1 +余悸 1 +x:1 +制糖业 1 +x:1 +秀城区 1 +x:1 +驱逐 1 +x:1 +尔等 1 +x:1 +自觉 1 +x:1 +事业部制 1 +x:1 +民事 1 +x:1 +攀禽 1 +x:1 +超脱 1 +x:1 +水口 1 +x:1 +苏格兰 1 +x:1 +乐平 1 +x:1 +乘积 1 +x:1 +功力 1 +x:1 +查询卡 1 +x:1 +湛江港 1 +x:1 +水化 1 +x:1 +华侨界 1 +x:1 +相映生辉 1 +x:1 +强县 1 +x:1 +量体裁衣 1 +x:1 +四轮车 1 +x:1 +出毛病 1 +x:1 +成骨 1 +x:1 +化作 1 +x:1 +我中有你 1 +x:1 +窄窄的 1 +x:1 +民乐 1 +x:1 +螺丝攻 1 +x:1 +水区 1 +x:1 +莫若 1 +x:1 +数八法 1 +x:1 +良性 1 +x:1 +卢克索市 1 +x:1 +哼唱 1 +x:1 +功劳 1 +x:1 +短号 1 +x:1 +据为己有 1 +x:1 +探赜索隐 1 +x:1 +十指连心 1 +x:1 +伊图里河 1 +x:1 +免费日 1 +x:1 +四轮 1 +x:1 +收废 1 +x:1 +民丰 1 +x:1 +同日 1 +x:1 +上告人 1 +x:1 +塞子 1 +x:1 +滚针轴承 1 +x:1 +民主 1 +x:1 +分忧 1 +x:1 +载畜量 1 +x:1 +鸦胆子 1 +x:1 +同时 1 +x:1 +纪念会 1 +x:1 +呓 1 +x:1 +阿万达罗 1 +x:1 +功勋 1 +x:1 +投身 1 +x:1 +畸 1 +x:1 +石门镇 1 +x:1 +余怒 1 +x:1 +九江镇 1 +x:1 +改造权 1 +x:1 +超标费 1 +x:1 +马钢 1 +x:1 +同族 1 +x:1 +刘邦 1 +x:1 +父母 1 +x:1 +水印 1 +x:1 +拥军田 1 +x:1 +川剧院 1 +x:1 +科索沃 1 +x:1 +干校 1 +x:1 +绝对值 1 +x:1 +乐师 1 +x:1 +狼 34 +x:34 +控诉 1 +x:1 +态 17 +x:17 +休想 1 +x:1 +红莲 1 +x:1 +小间式 1 +x:1 +虎虎生气 1 +x:1 +翻船 1 +x:1 +纳恐 1 +x:1 +凤冠 1 +x:1 +人身权 1 +x:1 +兄弟团 1 +x:1 +震慑力 1 +x:1 +沙窝 1 +x:1 +物欲横流 1 +x:1 +通气会 1 +x:1 +颅腔 1 +x:1 +强制 1 +x:1 +检察厅 1 +x:1 +增资 1 +x:1 +黑芝麻糊 1 +x:1 +赠礼 1 +x:1 +搞 1644 +x:1644 +水势 1 +x:1 +提格雷州 1 +x:1 +民俗 1 +x:1 +生冷 1 +x:1 +淘汰品 1 +x:1 +马镫 1 +x:1 +收式 1 +x:1 +高论 1 +x:1 +金吾村 1 +x:1 +牧歌 1 +x:1 +土管 1 +x:1 +鲫鱼 1 +x:1 +热炒 1 +x:1 +教授 1 +x:1 +莒县 1 +x:1 +仅 1825 +x:1825 +全世界 1 +x:1 +杂七杂八 1 +x:1 +风急浪高 1 +x:1 +东南极 1 +x:1 +化二 1 +x:1 +欺骗性 1 +x:1 +纹银 1 +x:1 +接替 1 +x:1 +火头上 1 +x:1 +赘 1 +x:1 +颅脑 1 +x:1 +凤凰 1 +x:1 +绥 6 +x:6 +马锣 1 +x:1 +合法权 1 +x:1 +鹿角 1 +x:1 +奇特 1 +x:1 +增质 1 +x:1 +收归 1 +x:1 +收录 1 +x:1 +宝中之宝 1 +x:1 +盘石 1 +x:1 +诗刊 1 +x:1 +日化 1 +x:1 +仁者见仁 1 +x:1 +引火烧身 1 +x:1 +理路 1 +x:1 +厂龄 1 +x:1 +议程 1 +x:1 +饵料 1 +x:1 +身披 1 +x:1 +皱皱巴巴 1 +x:1 +啭 1 +x:1 +强加 1 +x:1 +/ 397 +x:397 +强势 1 +x:1 +怪物 1 +x:1 +四蹄 1 +x:1 +水分 1 +x:1 +懈怠 1 +x:1 +东南村 1 +x:1 +触目皆是 1 +x:1 +鼠标器 1 +x:1 +土木工程 1 +x:1 +扎糊 1 +x:1 +两极管 1 +x:1 +北斗星 1 +x:1 +伤病 1 +x:1 +投运 1 +x:1 +题画诗 1 +x:1 +武生 1 +x:1 +理财 1 +x:1 +伤痛 1 +x:1 +强力 1 +x:1 +子民 1 +x:1 +南澳 1 +x:1 +伤痕 1 +x:1 +爽 17 +x:17 +修机班 1 +x:1 +善始善终 1 +x:1 +红缨枪 1 +x:1 +理赔 1 +x:1 +斯方 1 +x:1 +蹲马步 1 +x:1 +总机 1 +x:1 +伤疤 1 +x:1 +天目山 1 +x:1 +胶皮 1 +x:1 +区委 1 +x:1 +生光 1 +x:1 +接壤处 1 +x:1 +奎 47 +x:47 +结结实实 1 +x:1 +单项式 1 +x:1 +示范乡 1 +x:1 +艰涩 1 +x:1 +生养 1 +x:1 +阴德 1 +x:1 +民众 1 +x:1 +珍珠镇 1 +x:1 +日历 1 +x:1 +鬼话连篇 1 +x:1 +泼 26 +x:26 +想象力 1 +x:1 +所向无敌 1 +x:1 +讲学 1 +x:1 +一瞬间 1 +x:1 +抄表员 1 +x:1 +摩泽尔河 1 +x:1 +化为 1 +x:1 +军战史 1 +x:1 +能手 1 +x:1 +普者黑 1 +x:1 +本领 1 +x:1 +彩绸 1 +x:1 +守法性 1 +x:1 +水军 1 +x:1 +法医 1 +x:1 +州民 1 +x:1 +翻脸 1 +x:1 +风帽 1 +x:1 +卧车 1 +x:1 +接方 1 +x:1 +被单 1 +x:1 +免费权 1 +x:1 +同机 1 +x:1 +收尾 1 +x:1 +金东村 1 +x:1 +激越奋进 1 +x:1 +彩绘 1 +x:1 +唇舌 1 +x:1 +被卧 1 +x:1 +斯大林 1 +x:1 +选曲 1 +x:1 +同月 1 +x:1 +与时俱进 1 +x:1 +辛家庄 1 +x:1 +被卷 1 +x:1 +开创性 1 +x:1 +里丁屿市 1 +x:1 +生动 1 +x:1 +同期 1 +x:1 +彩练 1 +x:1 +四跨 1 +x:1 +非官方 1 +x:1 +值 137 +x:137 +急支糖浆 1 +x:1 +蕨类 1 +x:1 +敞开式 1 +x:1 +该车 1 +x:1 +定购粮 1 +x:1 +福华路 1 +x:1 +被包 1 +x:1 +猫熊 1 +x:1 +雅人 1 +x:1 +翻腾 1 +x:1 +偷渡船 1 +x:1 +日值 1 +x:1 +豆芽菜 1 +x:1 +推广员 1 +x:1 +温泉市 1 +x:1 +水准 1 +x:1 +马队 1 +x:1 +密云不雨 1 +x:1 +黄果树 1 +x:1 +爱欲 1 +x:1 +强光 1 +x:1 +卦 2 +x:2 +中转港 1 +x:1 +偷工减料 1 +x:1 +嫉恨 1 +x:1 +驱遣 1 +x:1 +告别 1 +x:1 +选优淘劣 1 +x:1 +投票点 1 +x:1 +鸟巢 1 +x:1 +搬弄 1 +x:1 +宽厚仁德 1 +x:1 +光速 1 +x:1 +白刃战 1 +x:1 +学校部长 1 +x:1 +土砖 1 +x:1 +塞外 1 +x:1 +一展歌喉 1 +x:1 +讲堂 1 +x:1 +生分 1 +x:1 +犯法 1 +x:1 +接收 1 +x:1 +伏特计 1 +x:1 +水儿 1 +x:1 +四起 1 +x:1 +诈骗案 1 +x:1 +新篇章 1 +x:1 +被叫 1 +x:1 +罗坊镇 1 +x:1 +赫罗诺夫 1 +x:1 +花样刀 1 +x:1 +强农 1 +x:1 +新华村 1 +x:1 +强军 1 +x:1 +豆腐房 1 +x:1 +驱邪 1 +x:1 +阿勒菲 1 +x:1 +老油子 1 +x:1 +水晶节 1 +x:1 +良才 1 +x:1 +鸭廊 1 +x:1 +填充 1 +x:1 +摄录像 1 +x:1 +武城县 1 +x:1 +法号 1 +x:1 +定于一尊 1 +x:1 +毫秒 1 +x:1 +生前 1 +x:1 +白雪公主 1 +x:1 +水光 1 +x:1 +秧歌剧 1 +x:1 +易太乡 1 +x:1 +风流云散 1 +x:1 +小史店镇 1 +x:1 +管径 1 +x:1 +核裁军 1 +x:1 +逃亡 1 +x:1 +水兵 1 +x:1 +成飞 1 +x:1 +油气罐 1 +x:1 +传输 1 +x:1 +收音 1 +x:1 +填具 1 +x:1 +匣体 1 +x:1 +合作制 1 +x:1 +打电话 1 +x:1 +语音室 1 +x:1 +成风 1 +x:1 +义乌 1 +x:1 +访谈 1 +x:1 +鸟岛 1 +x:1 +马尔代夫 1 +x:1 +高要 1 +x:1 +兴味 1 +x:1 +沙碛 1 +x:1 +生厌 1 +x:1 +跪倒 1 +x:1 +接待日 1 +x:1 +南定镇 1 +x:1 +日共 1 +x:1 +音品 1 +x:1 +罗新社 1 +x:1 +经意 1 +x:1 +法则 1 +x:1 +冰凌花 1 +x:1 +营养餐 1 +x:1 +闰月 1 +x:1 +拥抱 1 +x:1 +预报处 1 +x:1 +日元 1 +x:1 +马靴 1 +x:1 +投资 1 +x:1 +玻 7 +x:7 +合作史 1 +x:1 +倒骑驴 1 +x:1 +护航舰 1 +x:1 +强健 1 +x:1 +高见 1 +x:1 +生发 1 +x:1 +上流式 1 +x:1 +土种 1 +x:1 +临终 1 +x:1 +鼓浪屿港 1 +x:1 +拉萨市 1 +x:1 +合成树脂 1 +x:1 +哀哀哭泣 1 +x:1 +冒险家 1 +x:1 +私营化 1 +x:1 +新闻署 1 +x:1 +中式盐 1 +x:1 +磨光面 1 +x:1 +东南方 1 +x:1 +内外交困 1 +x:1 +榫眼 1 +x:1 +袂 1 +x:1 +纪念邮票 1 +x:1 +盱眙 1 +x:1 +首都 1 +x:1 +告发 1 +x:1 +低回 1 +x:1 +分毫不差 1 +x:1 +满目荒凉 1 +x:1 +鸟尊 1 +x:1 +日出 1 +x:1 +节骨眼儿 1 +x:1 +二等功 1 +x:1 +法务 1 +x:1 +伏旱 1 +x:1 +交配 1 +x:1 +两手抓 1 +x:1 +抗御 1 +x:1 +空桐树 1 +x:1 +三星村 1 +x:1 +沙漠地 1 +x:1 +奇点 1 +x:1 +西北角 1 +x:1 +不为已甚 1 +x:1 +沙砾 1 +x:1 +涮洗 1 +x:1 +限界 1 +x:1 +病种 1 +x:1 +万能夹 1 +x:1 +三反五反 1 +x:1 +收工 1 +x:1 +凭卡价 1 +x:1 +总攻 1 +x:1 +马鞍 1 +x:1 +总政 1 +x:1 +玄孙 1 +x:1 +技压群雄 1 +x:1 +增辉 1 +x:1 +山之内町 1 +x:1 +总支 1 +x:1 +出诊 1 +x:1 +油脂 1 +x:1 +日内 1 +x:1 +休战 1 +x:1 +被动 1 +x:1 +香日德镇 1 +x:1 +合作区 1 +x:1 +日军 1 +x:1 +日冕 1 +x:1 +潦草 1 +x:1 +奇热 1 +x:1 +防波堤 1 +x:1 +透明化 1 +x:1 +长 1764 +x:1764 +全球性 1 +x:1 +干法 1 +x:1 +石料厂 1 +x:1 +不惑之年 1 +x:1 +怪石 1 +x:1 +悠闲 1 +x:1 +脂 1 +x:1 +谕旨 1 +x:1 +分化瓦解 1 +x:1 +栖息 1 +x:1 +选情 1 +x:1 +汉文 1 +x:1 +总括 1 +x:1 +拉巴斯 1 +x:1 +碰到 1 +x:1 +畏缩 1 +x:1 +土纸 1 +x:1 +交集 1 +x:1 +同意 1 +x:1 +晒晒 1 +x:1 +鸟害 1 +x:1 +袭击者 1 +x:1 +刘猴镇 1 +x:1 +褐家鼠 1 +x:1 +讲座 1 +x:1 +饲养业 1 +x:1 +纷 4 +x:4 +生意眼 1 +x:1 +冷冻鸡 1 +x:1 +同感 1 +x:1 +水垢 1 +x:1 +慷慨大方 1 +x:1 +哈尔滨队 1 +x:1 +水域 1 +x:1 +喃喃 1 +x:1 +烈士墓 1 +x:1 +猪舍 1 +x:1 +制盐业 1 +x:1 +水城 1 +x:1 +酒足饭饱 1 +x:1 +雷根市 1 +x:1 +汉族 1 +x:1 +北海市 1 +x:1 +清晰度 1 +x:1 +通榆县 1 +x:1 +陈旧感 1 +x:1 +排序 1 +x:1 +水基 1 +x:1 +告吹 1 +x:1 +甲板 1 +x:1 +特奥会 1 +x:1 +倒算法 1 +x:1 +核威慑 1 +x:1 +顶尖级 1 +x:1 +法商 1 +x:1 +艺品 1 +x:1 +水土 1 +x:1 +开拓 1 +x:1 +患难者 1 +x:1 +休整 1 +x:1 +铭 21 +x:21 +纠缠 1 +x:1 +置于 1 +x:1 +水圈 1 +x:1 +先贤祠 1 +x:1 +讲师 1 +x:1 +悠长 1 +x:1 +王浆 1 +x:1 +键钮 1 +x:1 +贼寇 1 +x:1 +床架 1 +x:1 +交际 1 +x:1 +光阴 1 +x:1 +水地 1 +x:1 +景遇 1 +x:1 +笨活儿 1 +x:1 +旅人 1 +x:1 +讲席 1 +x:1 +翻车鱼 1 +x:1 +翼城县 1 +x:1 +全 2007 +x:2007 +今朝 1 +x:1 +水坝 1 +x:1 +生员 1 +x:1 +超薄 1 +x:1 +约分 1 +x:1 +捍卫 1 +x:1 +水坑 1 +x:1 +镑 7 +x:7 +明贴袋 1 +x:1 +测速仪 1 +x:1 +饱嗝儿 1 +x:1 +武火 1 +x:1 +行家里手 1 +x:1 +代脉 1 +x:1 +总成 1 +x:1 +奇石 1 +x:1 +操心 1 +x:1 +豫 40 +x:40 +平坝县 1 +x:1 +出访 1 +x:1 +鼻梁骨 1 +x:1 +猫眼 1 +x:1 +沁 2 +x:2 +同性 1 +x:1 +甜酒 1 +x:1 +接报 1 +x:1 +被告 1 +x:1 +柱身 1 +x:1 +精益求精 1 +x:1 +总揽 1 +x:1 +政苑 1 +x:1 +良料 1 +x:1 +厨师 1 +x:1 +春播期 1 +x:1 +六合拳 1 +x:1 +总吨位 1 +x:1 +抗大 1 +x:1 +扎花女 1 +x:1 +张午 1 +x:1 +滞销 1 +x:1 +胶片 1 +x:1 +胶版 1 +x:1 +日均 1 +x:1 +溶媒 1 +x:1 +法名 1 +x:1 +盐卤 1 +x:1 +高达 1 +x:1 +头陀 1 +x:1 +王法 1 +x:1 +胎死腹中 1 +x:1 +海军省 1 +x:1 +旅伴 1 +x:1 +游标卡尺 1 +x:1 +太阳沟 1 +x:1 +簸箕 1 +x:1 +爱民 1 +x:1 +高迈 1 +x:1 +七八点钟 1 +x:1 +多谋善断 1 +x:1 +无线电台 1 +x:1 +金饰品 1 +x:1 +派兵 1 +x:1 +主格 1 +x:1 +智囊团 1 +x:1 +盐汽水 1 +x:1 +温驯 1 +x:1 +日场 1 +x:1 +果料儿 1 +x:1 +琅琅的 1 +x:1 +干涉 1 +x:1 +西楚 1 +x:1 +吴官屯 1 +x:1 +幢 119 +x:119 +放行率 1 +x:1 +防洪工程 1 +x:1 +无机化学 1 +x:1 +独立厅 1 +x:1 +干涸 1 +x:1 +闺阁 1 +x:1 +许可证费 1 +x:1 +停滞不前 1 +x:1 +理解 1 +x:1 +锅边 1 +x:1 +阖家 1 +x:1 +乐安 1 +x:1 +干涩 1 +x:1 +收审 1 +x:1 +胰子 1 +x:1 +盈利 1 +x:1 +上上 1 +x:1 +今晚 1 +x:1 +痛楚 1 +x:1 +马里 1 +x:1 +上下 1 +x:1 +彩票 1 +x:1 +投影机 1 +x:1 +乐学 1 +x:1 +干流 1 +x:1 +昭觉县 1 +x:1 +拱圈 1 +x:1 +爱泉 1 +x:1 +脱贫史 1 +x:1 +停机库 1 +x:1 +镀锡板 1 +x:1 +轻喜剧片 1 +x:1 +颂古非今 1 +x:1 +代职 1 +x:1 +教条 1 +x:1 +干性油 1 +x:1 +怪癖 1 +x:1 +汞溴红 1 +x:1 +来信者 1 +x:1 +烦躁 1 +x:1 +投诉 1 +x:1 +血色素 1 +x:1 +也门 1 +x:1 +收官 1 +x:1 +余数 1 +x:1 +屠宰税 1 +x:1 +消痛贴 1 +x:1 +派出 1 +x:1 +岐山 1 +x:1 +彩礼 1 +x:1 +管制区 1 +x:1 +今昔 1 +x:1 +强国 1 +x:1 +姆贝基 1 +x:1 +强固 1 +x:1 +王水 1 +x:1 +损 38 +x:38 +怅然若失 1 +x:1 +中小型 1 +x:1 +爱河 1 +x:1 +同情 1 +x:1 +止血 1 +x:1 +教本 1 +x:1 +接手 1 +x:1 +代考 1 +x:1 +非全日制 1 +x:1 +干活 1 +x:1 +龙池山 1 +x:1 +整套 1 +x:1 +监督者 1 +x:1 +观礼 1 +x:1 +今春 1 +x:1 +光面 1 +x:1 +美轮美奂 1 +x:1 +四角 1 +x:1 +乐声 1 +x:1 +层层 1 +x:1 +犯案 1 +x:1 +津津 1 +x:1 +红塔队 1 +x:1 +选拔 1 +x:1 +演丰 1 +x:1 +阐 1 +x:1 +功名 1 +x:1 +派别 1 +x:1 +溜冰场 1 +x:1 +控购 1 +x:1 +赛事化 1 +x:1 +昨晚 1 +x:1 +浅绿色 1 +x:1 +垫补 1 +x:1 +红苕 1 +x:1 +泰王国 1 +x:1 +搬家 1 +x:1 +投行 1 +x:1 +盘点 1 +x:1 +雁阵 1 +x:1 +今日 1 +x:1 +单身者 1 +x:1 +艇员队 1 +x:1 +渠江 1 +x:1 +球茎甘蓝 1 +x:1 +方向盘 1 +x:1 +刺绣工 1 +x:1 +绰源 1 +x:1 +燃气罐 1 +x:1 +温饱 1 +x:1 +饭桌 1 +x:1 +津浦 1 +x:1 +成鱼 1 +x:1 +漏管户 1 +x:1 +巴厘岛 1 +x:1 +汉柏 1 +x:1 +螺髻 1 +x:1 +今文 1 +x:1 +演习 1 +x:1 +泡影 1 +x:1 +日后 1 +x:1 +牧民 1 +x:1 +白纸黑字 1 +x:1 +珩 8 +x:8 +球迷 1 +x:1 +插翅难逃 1 +x:1 +饭桶 1 +x:1 +政事 1 +x:1 +易名 1 +x:1 +不可置疑 1 +x:1 +上下一心 1 +x:1 +佯称 1 +x:1 +快递 1 +x:1 +过冬作物 1 +x:1 +高调 1 +x:1 +苗家社人 1 +x:1 +甲状腺病 1 +x:1 +温馨 1 +x:1 +选手 1 +x:1 +感谢饭 1 +x:1 +传说 1 +x:1 +传诵 1 +x:1 +政书 1 +x:1 +津液 1 +x:1 +汉中市 1 +x:1 +圪塔 1 +x:1 +事后性 1 +x:1 +干湿 1 +x:1 +甲方 1 +x:1 +搜捕 1 +x:1 +汉末 1 +x:1 +东源村 1 +x:1 +杀死 1 +x:1 +远涉 1 +x:1 +传话 1 +x:1 +奇痒 1 +x:1 +检察员 1 +x:1 +草 240 +x:240 +传讯 1 +x:1 +土籍 1 +x:1 +百分比 1 +x:1 +乌当区 1 +x:1 +干渴 1 +x:1 +风俗人情 1 +x:1 +弹拨乐器 1 +x:1 +垫被 1 +x:1 +神妙莫测 1 +x:1 +沙河镇 1 +x:1 +引水量 1 +x:1 +三四点钟 1 +x:1 +干渠 1 +x:1 +三叶人 1 +x:1 +小调儿 1 +x:1 +自给有余 1 +x:1 +私法 1 +x:1 +赠给 1 +x:1 +厚颜无耻 1 +x:1 +塞岛 1 +x:1 +千里之行 1 +x:1 +马架子 1 +x:1 +教育股 1 +x:1 +含量 1 +x:1 +百货公司 1 +x:1 +高超 1 +x:1 +公积金 1 +x:1 +点面结合 1 +x:1 +沙粒 1 +x:1 +金银奖 1 +x:1 +剖腹藏珠 1 +x:1 +瘦 47 +x:47 +核算室 1 +x:1 +汽车业 1 +x:1 +日商 1 +x:1 +收复 1 +x:1 +通胀率 1 +x:1 +夭折 1 +x:1 +钢钎 1 +x:1 +新田村 1 +x:1 +高足 1 +x:1 +八宝饭 1 +x:1 +松紧 1 +x:1 +杏树 1 +x:1 +国会山 1 +x:1 +营业额 1 +x:1 +苟延残喘 1 +x:1 +温顺 1 +x:1 +画情 1 +x:1 +分类箱 1 +x:1 +缺心眼儿 1 +x:1 +百二河 1 +x:1 +法器 1 +x:1 +凤城 1 +x:1 +音型 1 +x:1 +传言 1 +x:1 +演奏法 1 +x:1 +关停令 1 +x:1 +鸟声 1 +x:1 +毫米 1 +x:1 +垦丁 1 +x:1 +农机具 1 +x:1 +管理局长 1 +x:1 +借以 1 +x:1 +江口 1 +x:1 +毗邻 1 +x:1 +高跷 1 +x:1 +金橘 1 +x:1 +生土 1 +x:1 +良朋 1 +x:1 +太阳渡 1 +x:1 +单项奖 1 +x:1 +较之于 1 +x:1 +只顾 1 +x:1 +南溪 1 +x:1 +津沽 1 +x:1 +钒 9 +x:9 +〕 35 +x:35 +炮声 1 +x:1 +开原市 1 +x:1 +假冒伪劣 1 +x:1 +塞尺 1 +x:1 +硅砖 1 +x:1 +塞尼 1 +x:1 +坤表 1 +x:1 +咝儿 1 +x:1 +政体 1 +x:1 +教育者 1 +x:1 +生地 1 +x:1 +比量 1 +x:1 +化纤布 1 +x:1 +比重 1 +x:1 +独立党 1 +x:1 +良机 1 +x:1 +于林庄村 1 +x:1 +来亨鸡 1 +x:1 +雷障 1 +x:1 +以情动人 1 +x:1 +报忧 1 +x:1 +高贵 1 +x:1 +法国 1 +x:1 +宋体字 1 +x:1 +开发商 1 +x:1 +开关柜 1 +x:1 +洋参 1 +x:1 +滑石粉 1 +x:1 +渝州 1 +x:1 +上楼 1 +x:1 +雷雨 1 +x:1 +萍水 1 +x:1 +乌洽会 1 +x:1 +古镇村 1 +x:1 +抗寒 1 +x:1 +鸢尾 1 +x:1 +乐天 1 +x:1 +淘汰制 1 +x:1 +忠 85 +x:85 +彩笛 1 +x:1 +交锋 1 +x:1 +增设 1 +x:1 +切身 1 +x:1 +证券法 1 +x:1 +新沂站 1 +x:1 +彩笔 1 +x:1 +教改 1 +x:1 +弃械投降 1 +x:1 +中江县 1 +x:1 +阳性率 1 +x:1 +水周 1 +x:1 +交错 1 +x:1 +伛偻病 1 +x:1 +锅贴 1 +x:1 +调角器 1 +x:1 +曝皮 1 +x:1 +洋行 1 +x:1 +默祷 1 +x:1 +政企 1 +x:1 +厮守 1 +x:1 +中际 1 +x:1 +非教师 1 +x:1 +于心不忍 1 +x:1 +金鸡纳霜 1 +x:1 +民国 1 +x:1 +廉生威 1 +x:1 +帝位 1 +x:1 +民团 1 +x:1 +钱板 1 +x:1 +碰上 1 +x:1 +毗连 1 +x:1 +眚 1 +x:1 +洞嘎乡 1 +x:1 +草炭 1 +x:1 +总结 1 +x:1 +追觅 1 +x:1 +选系 1 +x:1 +淮扬 1 +x:1 +骇人听闻 1 +x:1 +牧牛 1 +x:1 +日食 1 +x:1 +鹿邑 1 +x:1 +投降 1 +x:1 +上影线 1 +x:1 +病房 1 +x:1 +斗殴 1 +x:1 +居庸 1 +x:1 +逃命 1 +x:1 +接羔 1 +x:1 +闭市价 1 +x:1 +甘肃队 1 +x:1 +成色 1 +x:1 +不信任感 1 +x:1 +汽车兵 1 +x:1 +气功班 1 +x:1 +柴河镇 1 +x:1 +火炉子 1 +x:1 +总线 1 +x:1 +雁行 1 +x:1 +射洪县 1 +x:1 +秋粮 1 +x:1 +三拇指 1 +x:1 +空手道 1 +x:1 +甲等 1 +x:1 +曲艺团 1 +x:1 +文人相轻 1 +x:1 +红灯区 1 +x:1 +整日 1 +x:1 +无可挑剔 1 +x:1 +凸轮轴 1 +x:1 +临时 1 +x:1 +磁力计 1 +x:1 +墙垛 1 +x:1 +兀现 1 +x:1 +扩音器 1 +x:1 +政务院 1 +x:1 +浮肿 1 +x:1 +校译本 1 +x:1 +湘乡市 1 +x:1 +材料处 1 +x:1 +危险源 1 +x:1 +脓包 1 +x:1 +交界 1 +x:1 +述评 1 +x:1 +榆中县 1 +x:1 +万和镇 1 +x:1 +土戏 1 +x:1 +搭话 1 +x:1 +侄女 1 +x:1 +自觉自愿 1 +x:1 +在天之灵 1 +x:1 +传闻 1 +x:1 +才俊 1 +x:1 +早日 1 +x:1 +心诚 1 +x:1 +土房 1 +x:1 +整料 1 +x:1 +观摩 1 +x:1 +四面 1 +x:1 +改 676 +x:676 +青果巷 1 +x:1 +麦迪逊 1 +x:1 +教程 1 +x:1 +珂 6 +x:6 +时好时坏 1 +x:1 +医学奖 1 +x:1 +纳福 1 +x:1 +奥斯卡史 1 +x:1 +挪方 1 +x:1 +饭盒 1 +x:1 +独吞 1 +x:1 +牧犬 1 +x:1 +依东县 1 +x:1 +秃鹫 1 +x:1 +沈铁 1 +x:1 +迪 2 +x:2 +州直 1 +x:1 +金字招牌 1 +x:1 +武江 1 +x:1 +本色 1 +x:1 +武汉 1 +x:1 +借入 1 +x:1 +痛痒 1 +x:1 +疯牛病 1 +x:1 +霄 38 +x:38 +松洲街 1 +x:1 +高速公路 1 +x:1 +父爱 1 +x:1 +接线 1 +x:1 +鞋袜 1 +x:1 +痛症 1 +x:1 +纯 96 +x:96 +千条万条 1 +x:1 +荞麦皮 1 +x:1 +就业处 1 +x:1 +马赛 1 +x:1 +接纳 1 +x:1 +彩旦 1 +x:1 +维修 1 +x:1 +锁缝机 1 +x:1 +有始有终 1 +x:1 +培训点 1 +x:1 +丢脸 1 +x:1 +痛痹 1 +x:1 +太阳炉 1 +x:1 +彩旗 1 +x:1 +干燥 1 +x:1 +宿敌 1 +x:1 +健康房 1 +x:1 +短距离 1 +x:1 +持旗者 1 +x:1 +迎宾 1 +x:1 +接续 1 +x:1 +实中求新 1 +x:1 +旅协 1 +x:1 +溶解 1 +x:1 +糖茶 1 +x:1 +混装 1 +x:1 +定时炸弹 1 +x:1 +竞技队 1 +x:1 +巡警队 1 +x:1 +破蛋 1 +x:1 +浑然谐调 1 +x:1 +同类 1 +x:1 +人心惶惶 1 +x:1 +消亡 1 +x:1 +四难 1 +x:1 +上访量 1 +x:1 +妄图 1 +x:1 +芥菜 1 +x:1 +威海卫 1 +x:1 +黄金档 1 +x:1 +大有益处 1 +x:1 +使用率 1 +x:1 +培训热 1 +x:1 +药箱 1 +x:1 +总署 1 +x:1 +票友会 1 +x:1 +垄 5 +x:5 +用活 1 +x:1 +交警 1 +x:1 +嵊泗 1 +x:1 +科佳 1 +x:1 +郎舅 1 +x:1 +国家制式 1 +x:1 +弹跳 1 +x:1 +塑胶粒 1 +x:1 +灭蚊片 1 +x:1 +锁链子 1 +x:1 +借债 1 +x:1 +信贷员 1 +x:1 +马路 1 +x:1 +炮台镇 1 +x:1 +封顶价 1 +x:1 +鲱鱼 1 +x:1 +健康报 1 +x:1 +恨事 1 +x:1 +早操 1 +x:1 +格调 1 +x:1 +明溪县 1 +x:1 +术式 1 +x:1 +淡红 1 +x:1 +际 7 +x:7 +严苛 1 +x:1 +怦然 1 +x:1 +鹅蛋脸 1 +x:1 +线务员 1 +x:1 +超额 1 +x:1 +制盐厂 1 +x:1 +柳铁 1 +x:1 +崇拜者 1 +x:1 +寸水 1 +x:1 +冲锋号 1 +x:1 +总编 1 +x:1 +临摹 1 +x:1 +监督关 1 +x:1 +浑天仪 1 +x:1 +脱逃 1 +x:1 +车满为患 1 +x:1 +唐卡 1 +x:1 +荷 84 +x:84 +个展 1 +x:1 +少有 1 +x:1 +旸 2 +x:2 +一往情深 1 +x:1 +洛杉矶市 1 +x:1 +比较 1 +x:1 +四马台村 1 +x:1 +马蹄 1 +x:1 +鼓板 1 +x:1 +温蔼 1 +x:1 +花骨朵 1 +x:1 +雌雄异株 1 +x:1 +评选者 1 +x:1 +汽车区 1 +x:1 +病态 1 +x:1 +裹尸马革 1 +x:1 +组派 1 +x:1 +涕 2 +x:2 +培训率 1 +x:1 +今秋 1 +x:1 +汉简 1 +x:1 +高邑 1 +x:1 +救助者 1 +x:1 +建研会 1 +x:1 +求医问药 1 +x:1 +高邮 1 +x:1 +睢宁 1 +x:1 +民品 1 +x:1 +弗纶 1 +x:1 +宝藏 1 +x:1 +凝听者 1 +x:1 +鹊桥 1 +x:1 +深根固蒂 1 +x:1 +游击式 1 +x:1 +临柜 1 +x:1 +散文式 1 +x:1 +汨罗镇 1 +x:1 +垦区 1 +x:1 +兴牧富民 1 +x:1 +震中区 1 +x:1 +祭天坛 1 +x:1 +疏 37 +x:37 +菜圃 1 +x:1 +演剧 1 +x:1 +国宝级 1 +x:1 +海商 1 +x:1 +蹴球 1 +x:1 +瓦加杜古 1 +x:1 +螺蛳 1 +x:1 +手戳 1 +x:1 +欺骗 1 +x:1 +吟诵 1 +x:1 +满族乡 1 +x:1 +纵坐标 1 +x:1 +苌池乡 1 +x:1 +觅 35 +x:35 +容颜 1 +x:1 +灰飞烟灭 1 +x:1 +高都 1 +x:1 +富营养化 1 +x:1 +本能 1 +x:1 +培训班 1 +x:1 +严父慈母 1 +x:1 +比萨饼 1 +x:1 +校党委 1 +x:1 +垄断性 1 +x:1 +可传达性 1 +x:1 +暮云春树 1 +x:1 +生肖物 1 +x:1 +民命 1 +x:1 +临朐 1 +x:1 +储油库 1 +x:1 +五九年 1 +x:1 +西北部 1 +x:1 +拓本 1 +x:1 +四联单 1 +x:1 +三爱 1 +x:1 +埃航 1 +x:1 +交行 1 +x:1 +人工气胸 1 +x:1 +二十一中 1 +x:1 +逼真 1 +x:1 +观景 1 +x:1 +王府井 1 +x:1 +汽车厂 1 +x:1 +墙基 1 +x:1 +高逾 1 +x:1 +武清 1 +x:1 +西北郊 1 +x:1 +土性 1 +x:1 +浮艳 1 +x:1 +涂抹 1 +x:1 +务 15 +x:15 +开关站 1 +x:1 +文印部 1 +x:1 +中阳 1 +x:1 +病情 1 +x:1 +六六年 1 +x:1 +本职 1 +x:1 +院貌 1 +x:1 +学者卷 1 +x:1 +肛肠科 1 +x:1 +观星 1 +x:1 +教研 1 +x:1 +区块 1 +x:1 +颅骨 1 +x:1 +参赛国 1 +x:1 +密密麻麻 1 +x:1 +干爸 1 +x:1 +马身 1 +x:1 +盐务局 1 +x:1 +下苦功夫 1 +x:1 +福海 1 +x:1 +梁子湖区 1 +x:1 +私营者 1 +x:1 +桅顶 1 +x:1 +控释 1 +x:1 +流入量 1 +x:1 +国务院令 1 +x:1 +亭榭画廊 1 +x:1 +病愈 1 +x:1 +少时 1 +x:1 +杂牌 1 +x:1 +比起 1 +x:1 +咨询会 1 +x:1 +宝应拾屯 1 +x:1 +主桥墩 1 +x:1 +早晨 1 +x:1 +抡斧伐桂 1 +x:1 +神来之笔 1 +x:1 +陆防区 1 +x:1 +天老爷 1 +x:1 +马车 1 +x:1 +人工气腹 1 +x:1 +早晚 1 +x:1 +比赛 1 +x:1 +政变 1 +x:1 +超音速 1 +x:1 +授戒 1 +x:1 +杂物 1 +x:1 +政发 1 +x:1 +索罟湾 1 +x:1 +代付 1 +x:1 +借助 1 +x:1 +交角 1 +x:1 +文工团员 1 +x:1 +可比价 1 +x:1 +麦角新碱 1 +x:1 +图索骥式 1 +x:1 +听话者 1 +x:1 +入国问禁 1 +x:1 +植保 1 +x:1 +东西向 1 +x:1 +胶水 1 +x:1 +纳税 1 +x:1 +饥寒交迫 1 +x:1 +选美 1 +x:1 +南缘 1 +x:1 +早春 1 +x:1 +经济学家 1 +x:1 +常规性 1 +x:1 +脖颈儿 1 +x:1 +传阅 1 +x:1 +歪风 1 +x:1 +派位 1 +x:1 +同级 1 +x:1 +胶泥 1 +x:1 +鼓曲 1 +x:1 +犯病 1 +x:1 +漓 2 +x:2 +马拉开波 1 +x:1 +超高 1 +x:1 +褒贬 1 +x:1 +比较性 1 +x:1 +扎曲 1 +x:1 +铁栅栏 1 +x:1 +螳臂当车 1 +x:1 +天马行空 1 +x:1 +浮荡 1 +x:1 +厨子 1 +x:1 +审核费 1 +x:1 +贬值率 1 +x:1 +忧心忡忡 1 +x:1 +王牌 1 +x:1 +政协 1 +x:1 +盘活 1 +x:1 +蔚成新风 1 +x:1 +翻领 1 +x:1 +民商 1 +x:1 +东方村 1 +x:1 +褒扬状 1 +x:1 +钟祥 1 +x:1 +错综复杂 1 +x:1 +马迹 1 +x:1 +醇化 1 +x:1 +渑水燕 1 +x:1 +令行禁止 1 +x:1 +读书界 1 +x:1 +害胺 1 +x:1 +化合 1 +x:1 +调质处理 1 +x:1 +化名 1 +x:1 +选编 1 +x:1 +朝天门 1 +x:1 +诏书 1 +x:1 +王爷 1 +x:1 +长此以往 1 +x:1 +抛掷 1 +x:1 +古墓群 1 +x:1 +犯疑 1 +x:1 +观望 1 +x:1 +干扰源 1 +x:1 +同组 1 +x:1 +罚息 1 +x:1 +谏壁口 1 +x:1 +演变 1 +x:1 +也许 1 +x:1 +形象思维 1 +x:1 +机电系 1 +x:1 +土壤层 1 +x:1 +体检组 1 +x:1 +翻飞 1 +x:1 +和解派 1 +x:1 +积石 1 +x:1 +融安县 1 +x:1 +马达 1 +x:1 +爱犬 1 +x:1 +购房款 1 +x:1 +体胀系数 1 +x:1 +功业 1 +x:1 +教练 1 +x:1 +接管 1 +x:1 +穿透力 1 +x:1 +教给 1 +x:1 +博览局 1 +x:1 +郊野 1 +x:1 +沙果 1 +x:1 +装有 1 +x:1 +炮兵群 1 +x:1 +早慧 1 +x:1 +血肉之躯 1 +x:1 +接待站 1 +x:1 +出游率 1 +x:1 +背着 1 +x:1 +除弊 1 +x:1 +街灯 1 +x:1 +破获 1 +x:1 +沙枣 1 +x:1 +复合肥 1 +x:1 +马表 1 +x:1 +健康机 1 +x:1 +高难 1 +x:1 +北海港 1 +x:1 +芦苇荡 1 +x:1 +水保 1 +x:1 +占 2663 +x:2663 +健康权 1 +x:1 +压舱石 1 +x:1 +股权证 1 +x:1 +高雄 1 +x:1 +高雅 1 +x:1 +增选 1 +x:1 +不思悔改 1 +x:1 +电力业 1 +x:1 +延续性 1 +x:1 +摸黑儿 1 +x:1 +就业局 1 +x:1 +成虫 1 +x:1 +醇和 1 +x:1 +成长史 1 +x:1 +日丰 1 +x:1 +回归线 1 +x:1 +燕峒乡 1 +x:1 +演员 1 +x:1 +余粮 1 +x:1 +痛点 1 +x:1 +杂用 1 +x:1 +民办 1 +x:1 +千疮百孔 1 +x:1 +立方根 1 +x:1 +迎击 1 +x:1 +床罩 1 +x:1 +沙柱 1 +x:1 +沙柳 1 +x:1 +象牙之塔 1 +x:1 +州牧 1 +x:1 +土星 1 +x:1 +接线员 1 +x:1 +戏 335 +x:335 +鬓间 1 +x:1 +武校 1 +x:1 +逆浪回冲 1 +x:1 +再审 1 +x:1 +多义词 1 +x:1 +寸楷 1 +x:1 +射流技术 1 +x:1 +马裤 1 +x:1 +判断力 1 +x:1 +重祖父 1 +x:1 +凤城市 1 +x:1 +利民村 1 +x:1 +蜻蜓点水 1 +x:1 +被冤枉者 1 +x:1 +大嗓门儿 1 +x:1 +黯然失色 1 +x:1 +高阳 1 +x:1 +文艺兵 1 +x:1 +分工 1 +x:1 +罪孽 1 +x:1 +青风寨 1 +x:1 +毛纺织 1 +x:1 +严寒 1 +x:1 +格西 1 +x:1 +日产 1 +x:1 +水体 1 +x:1 +水位 1 +x:1 +腾空而起 1 +x:1 +沙村 1 +x:1 +毋庸置疑 1 +x:1 +软化剂 1 +x:1 +棉纺织 1 +x:1 +高院 1 +x:1 +鑫 19 +x:19 +同种 1 +x:1 +民初 1 +x:1 +龛图 1 +x:1 +易事 1 +x:1 +易于 1 +x:1 +沙松 1 +x:1 +总程 1 +x:1 +化医 1 +x:1 +高陵 1 +x:1 +土果 1 +x:1 +蓬勃 1 +x:1 +独领风骚 1 +x:1 +线装本 1 +x:1 +协议书 1 +x:1 +将来 1 +x:1 +水井 1 +x:1 +吃干榨净 1 +x:1 +三季稻 1 +x:1 +能级 1 +x:1 +选种 1 +x:1 +青丝帕 1 +x:1 +营业员 1 +x:1 +头钱 1 +x:1 +如臂使指 1 +x:1 +常明灯 1 +x:1 +光边 1 +x:1 +妄动 1 +x:1 +沾溉 1 +x:1 +纳米 1 +x:1 +居室 1 +x:1 +传遍 1 +x:1 +落井下石 1 +x:1 +电熨斗 1 +x:1 +库诺维采 1 +x:1 +土枪 1 +x:1 +交还 1 +x:1 +水产 1 +x:1 +昔者 1 +x:1 +装卸业 1 +x:1 +涂改 1 +x:1 +逃兵 1 +x:1 +储量 1 +x:1 +大舅子 1 +x:1 +马褂 1 +x:1 +水仙 1 +x:1 +总管 1 +x:1 +津百 1 +x:1 +基本建设 1 +x:1 +普渡众生 1 +x:1 +尿肥 1 +x:1 +云块 1 +x:1 +坐标系 1 +x:1 +宰割 1 +x:1 +水份 1 +x:1 +总算 1 +x:1 +比肩而邻 1 +x:1 +抑或 1 +x:1 +水价 1 +x:1 +储采 1 +x:1 +传递 1 +x:1 +趟马 1 +x:1 +平定县 1 +x:1 +驱车 1 +x:1 +郡县 1 +x:1 +高音 1 +x:1 +造反派 1 +x:1 +伏笔 1 +x:1 +祷告声 1 +x:1 +用品部 1 +x:1 +评判人 1 +x:1 +屠宰户 1 +x:1 +熊熊 1 +x:1 +溶质 1 +x:1 +弯弯曲曲 1 +x:1 +家族式 1 +x:1 +芙蓉城 1 +x:1 +水专 1 +x:1 +烦难 1 +x:1 +怒气攻心 1 +x:1 +结扎户 1 +x:1 +定兴县 1 +x:1 +重生父母 1 +x:1 +水上 1 +x:1 +水下 1 +x:1 +强人 1 +x:1 +增量 1 +x:1 +淡竹 1 +x:1 +陆家嘴 1 +x:1 +涂料 1 +x:1 +白璧无瑕 1 +x:1 +打麦场 1 +x:1 +破船 1 +x:1 +白果塔村 1 +x:1 +漫画集 1 +x:1 +盟军 1 +x:1 +杀灭 1 +x:1 +胎教 1 +x:1 +台特玛湖 1 +x:1 +区域 1 +x:1 +土木 1 +x:1 +政商 1 +x:1 +思前想后 1 +x:1 +反攻倒算 1 +x:1 +哞哞 1 +x:1 +强令 1 +x:1 +妯娌 1 +x:1 +土村 1 +x:1 +甲组 1 +x:1 +学位制 1 +x:1 +蹊径 1 +x:1 +观感 1 +x:1 +香味 1 +x:1 +陋室 1 +x:1 +飞 446 +x:446 +② 42 +x:42 +空手棍 1 +x:1 +纳粹 1 +x:1 +脚踏车 1 +x:1 +限 83 +x:83 +罗布林卡 1 +x:1 +商贸会 1 +x:1 +耐受力 1 +x:1 +腰缠万贯 1 +x:1 +乡民 1 +x:1 +云梯车 1 +x:1 +东柏坡 1 +x:1 +喊叫 1 +x:1 +接穗 1 +x:1 +会计学系 1 +x:1 +水乡 1 +x:1 +仰角 1 +x:1 +扎 129 +x:129 +张家川村 1 +x:1 +射手榜 1 +x:1 +化减 1 +x:1 +生于 1 +x:1 +生事 1 +x:1 +阵地战 1 +x:1 +鼓捣 1 +x:1 +彻骨 1 +x:1 +四野 1 +x:1 +墟 1 +x:1 +主凶 1 +x:1 +唯独 1 +x:1 +生人 1 +x:1 +覆没 1 +x:1 +装腔作势 1 +x:1 +亏心 1 +x:1 +听 899 +x:899 +教育馆 1 +x:1 +芥蒂 1 +x:1 +力创 1 +x:1 +一年四季 1 +x:1 +生产 1 +x:1 +硝酸铵 1 +x:1 +文艺史 1 +x:1 +有色人种 1 +x:1 +悠远 1 +x:1 +锅铲 1 +x:1 +接收器 1 +x:1 +束米甸村 1 +x:1 +鳇 1 +x:1 +灯光师 1 +x:1 +坚毅不屈 1 +x:1 +贫民区 1 +x:1 +穹隆式 1 +x:1 +哭天抢地 1 +x:1 +戮力同心 1 +x:1 +透明人 1 +x:1 +修车款 1 +x:1 +盐化 1 +x:1 +失神 1 +x:1 +彩报 1 +x:1 +接种 1 +x:1 +耳闻目睹 1 +x:1 +居士 1 +x:1 +亏待 1 +x:1 +适口 1 +x:1 +卉 2 +x:2 +硝酸钠 1 +x:1 +投递 1 +x:1 +罗案 1 +x:1 +睿智者 1 +x:1 +光大 1 +x:1 +亏得 1 +x:1 +默想 1 +x:1 +软皮条 1 +x:1 +化冻 1 +x:1 +投送 1 +x:1 +直性子 1 +x:1 +生丝 1 +x:1 +创牌子 1 +x:1 +生业 1 +x:1 +杂和菜 1 +x:1 +世博行 1 +x:1 +中青 1 +x:1 +开机 1 +x:1 +浪里去 1 +x:1 +红原县 1 +x:1 +敌围我散 1 +x:1 +被俘 1 +x:1 +怎样 1 +x:1 +米赫巴 1 +x:1 +确定无疑 1 +x:1 +唯物 1 +x:1 +经验谈 1 +x:1 +千家街 1 +x:1 +美茵河 1 +x:1 +指关节 1 +x:1 +爱知 1 +x:1 +鞋行 1 +x:1 +法例 1 +x:1 +议政 1 +x:1 +闲不住 1 +x:1 +芸 5 +x:5 +榨汁 1 +x:1 +背痛 1 +x:1 +鸦岭乡 1 +x:1 +瓮安 1 +x:1 +发球奖 1 +x:1 +火头军 1 +x:1 +超龄 1 +x:1 +饰演者 1 +x:1 +得数 1 +x:1 +提示型 1 +x:1 +静电计 1 +x:1 +管内 1 +x:1 +观战 1 +x:1 +猫洞 1 +x:1 +强制力 1 +x:1 +毫无 1 +x:1 +交谊 1 +x:1 +交谈 1 +x:1 +淋巴液 1 +x:1 +干瘦 1 +x:1 +天津港 1 +x:1 +鼓掌 1 +x:1 +频律 1 +x:1 +直直 1 +x:1 +汽车城 1 +x:1 +散文家 1 +x:1 +总称 1 +x:1 +帆 47 +x:47 +大窑湾 1 +x:1 +奋然 1 +x:1 +赠机 1 +x:1 +接碴 1 +x:1 +防暑 1 +x:1 +扎手 1 +x:1 +土方 1 +x:1 +埋怨声 1 +x:1 +牧畜 1 +x:1 +成衣店 1 +x:1 +美好 1 +x:1 +鼓手 1 +x:1 +藩篱 1 +x:1 +手挥千军 1 +x:1 +轻型化 1 +x:1 +豆腐羹 1 +x:1 +对二甲苯 1 +x:1 +细工 1 +x:1 +生保 1 +x:1 +露采坑 1 +x:1 +双赛制 1 +x:1 +细巧 1 +x:1 +衣食住行 1 +x:1 +土族 1 +x:1 +诓 2 +x:2 +手写板 1 +x:1 +岔曲儿 1 +x:1 +频带 1 +x:1 +居委 1 +x:1 +丛台区 1 +x:1 +抽空 1 +x:1 +驱走 1 +x:1 +盐田港区 1 +x:1 +驱赶 1 +x:1 +四邻 1 +x:1 +彩排 1 +x:1 +归口 1 +x:1 +凯 41 +x:41 +甲类 1 +x:1 +逃匿 1 +x:1 +随风转舵 1 +x:1 +唐宋 1 +x:1 +再婚 1 +x:1 +野葫芦引 1 +x:1 +有期徒刑 1 +x:1 +间作 1 +x:1 +民兵 1 +x:1 +临战 1 +x:1 +法人 1 +x:1 +居处 1 +x:1 +种衣剂 1 +x:1 +济困 1 +x:1 +垦团 1 +x:1 +玛瑙杏 1 +x:1 +良缘 1 +x:1 +化做 1 +x:1 +绥棱 1 +x:1 +公务车 1 +x:1 +伏秋 1 +x:1 +瑶族乡 1 +x:1 +土改 1 +x:1 +五位一体 1 +x:1 +同窗 1 +x:1 +投量 1 +x:1 +一败涂地 1 +x:1 +湖人队 1 +x:1 +格言 1 +x:1 +晋材楚用 1 +x:1 +民先 1 +x:1 +防暴 1 +x:1 +航船 1 +x:1 +嵇 6 +x:6 +洪家嘴乡 1 +x:1 +交账 1 +x:1 +四通 1 +x:1 +交财 1 +x:1 +抽穗 1 +x:1 +拎 32 +x:32 +拍卖所 1 +x:1 +汽车团 1 +x:1 +朱寨村 1 +x:1 +弧形 1 +x:1 +频度 1 +x:1 +法令 1 +x:1 +丑小鸭 1 +x:1 +外劳 1 +x:1 +给水团 1 +x:1 +颤 10 +x:10 +奇女子 1 +x:1 +攻城掠地 1 +x:1 +伤残 1 +x:1 +黑胡椒 1 +x:1 +干眼 1 +x:1 +材料库 1 +x:1 +天地良心 1 +x:1 +酯 3 +x:3 +余缺 1 +x:1 +红灿灿 1 +x:1 +心宽体胖 1 +x:1 +胶条 1 +x:1 +花红树绿 1 +x:1 +好声好气 1 +x:1 +中至大雨 1 +x:1 +乱七八糟 1 +x:1 +民建 1 +x:1 +爱神 1 +x:1 +横路乡 1 +x:1 +生鲜 1 +x:1 +远游 1 +x:1 +余烟 1 +x:1 +盟兄弟 1 +x:1 +缚 6 +x:6 +总目 1 +x:1 +总监 1 +x:1 +生造字 1 +x:1 +余热 1 +x:1 +余烬 1 +x:1 +小心眼儿 1 +x:1 +渺无人烟 1 +x:1 +分类法 1 +x:1 +小手指头 1 +x:1 +田蓬镇 1 +x:1 +热门儿 1 +x:1 +堆渣 1 +x:1 +扩产 1 +x:1 +嘴 91 +x:91 +突击队员 1 +x:1 +一跃而起 1 +x:1 +同甘 1 +x:1 +胶木 1 +x:1 +顺德市 1 +x:1 +成都路 1 +x:1 +简支梁 1 +x:1 +死于非命 1 +x:1 +高高 1 +x:1 +晔 8 +x:8 +温软 1 +x:1 +正当年 1 +x:1 +长丰县 1 +x:1 +统揽全局 1 +x:1 +航天 1 +x:1 +乐亭 1 +x:1 +感谢辞 1 +x:1 +磷协 1 +x:1 +自考办 1 +x:1 +浩瀚无垠 1 +x:1 +学生林 1 +x:1 +絮 4 +x:4 +石清沟村 1 +x:1 +绿头鸭 1 +x:1 +总的 1 +x:1 +盘曲 1 +x:1 +乐事 1 +x:1 +妄念 1 +x:1 +通车率 1 +x:1 +超重 1 +x:1 +超量 1 +x:1 +赤裸裸 1 +x:1 +兴隆片林 1 +x:1 +杂种 1 +x:1 +刁钻古怪 1 +x:1 +频出 1 +x:1 +太上老君 1 +x:1 +失礼 1 +x:1 +络绎不绝 1 +x:1 +牧童 1 +x:1 +厉兵秣马 1 +x:1 +自然规律 1 +x:1 +长二捆 1 +x:1 +背篼 1 +x:1 +马蓝 1 +x:1 +超金 1 +x:1 +爱称 1 +x:1 +余火 1 +x:1 +专题片 1 +x:1 +监督镜 1 +x:1 +临洮 1 +x:1 +邰 2 +x:2 +罚款 1 +x:1 +背篓 1 +x:1 +饭纲 1 +x:1 +实至名归 1 +x:1 +虚虚实实 1 +x:1 +土模 1 +x:1 +教育面 1 +x:1 +邦典村 1 +x:1 +宽容度 1 +x:1 +各就各位 1 +x:1 +鼓涨 1 +x:1 +消防处 1 +x:1 +毫毛 1 +x:1 +音儿 1 +x:1 +白木耳 1 +x:1 +高青县 1 +x:1 +乡愁 1 +x:1 +犯纪 1 +x:1 +豆腐干儿 1 +x:1 +乐业 1 +x:1 +临海 1 +x:1 +代销 1 +x:1 +接着 1 +x:1 +投影片 1 +x:1 +借风使船 1 +x:1 +使用税 1 +x:1 +家长里短 1 +x:1 +文体部 1 +x:1 +拼 75 +x:75 +总枢百端 1 +x:1 +表演史 1 +x:1 +拥军优属 1 +x:1 +糅合 1 +x:1 +兀立 1 +x:1 +脖颈子 1 +x:1 +硫酸根 1 +x:1 +扭扭曲曲 1 +x:1 +民忧 1 +x:1 +临沂 1 +x:1 +武断 1 +x:1 +同理 1 +x:1 +乡情 1 +x:1 +洼田 1 +x:1 +怪招 1 +x:1 +关上村 1 +x:1 +政委 1 +x:1 +民心 1 +x:1 +怒涛震海 1 +x:1 +鞭声 1 +x:1 +氯氟烃 1 +x:1 +易熔合金 1 +x:1 +化建 1 +x:1 +领奖台 1 +x:1 +造型观 1 +x:1 +老校 1 +x:1 +主典 1 +x:1 +拍卖法 1 +x:1 +民德 1 +x:1 +忍让 1 +x:1 +扶余县 1 +x:1 +真理观 1 +x:1 +超速 1 +x:1 +武旦 1 +x:1 +奇才 1 +x:1 +人杰地灵 1 +x:1 +回归率 1 +x:1 +压缩机 1 +x:1 +临泽 1 +x:1 +滥 83 +x:83 +交通台 1 +x:1 +陌于 1 +x:1 +法书 1 +x:1 +甘井子区 1 +x:1 +安江乡 1 +x:1 +鼓气 1 +x:1 +半瓶醋 1 +x:1 +螺距 1 +x:1 +一轻局 1 +x:1 +芒 8 +x:8 +接盘 1 +x:1 +脑上体 1 +x:1 +本诸 1 +x:1 +管理点 1 +x:1 +糅和 1 +x:1 +径 4 +x:4 +病残 1 +x:1 +肮脏 1 +x:1 +聚合力 1 +x:1 +消费观 1 +x:1 +厨具 1 +x:1 +文艺局 1 +x:1 +观测 1 +x:1 +总督 1 +x:1 +家族化 1 +x:1 +被子植物 1 +x:1 +爱书者 1 +x:1 +初 1103 +x:1103 +责 52 +x:52 +雷霆万钧 1 +x:1 +旅客 1 +x:1 +怪才 1 +x:1 +图册 1 +x:1 +早泄 1 +x:1 +乌邦寺 1 +x:1 +临江 1 +x:1 +鹅 10 +x:10 +呼图克图 1 +x:1 +成说 1 +x:1 +杂碎 1 +x:1 +住 1276 +x:1276 +宁海镇 1 +x:1 +山莨菪碱 1 +x:1 +线粒体 1 +x:1 +频催 1 +x:1 +临朐县 1 +x:1 +病毒 1 +x:1 +临汾 1 +x:1 +王码 1 +x:1 +受礼 1 +x:1 +明石海峡 1 +x:1 +陌上 1 +x:1 +限期 1 +x:1 +选用 1 +x:1 +危险期 1 +x:1 +三明路 1 +x:1 +台球城 1 +x:1 +吞噬细胞 1 +x:1 +光荣 1 +x:1 +乡思 1 +x:1 +宪兵队 1 +x:1 +弧光 1 +x:1 +回头客 1 +x:1 +航迹 1 +x:1 +含蓄 1 +x:1 +马虎 1 +x:1 +高领 1 +x:1 +断流期 1 +x:1 +汉王 1 +x:1 +高额 1 +x:1 +睢县 1 +x:1 +痛经 1 +x:1 +化州 1 +x:1 +借宿 1 +x:1 +潜伏地 1 +x:1 +低下 1 +x:1 +化工 1 +x:1 +磁倾角 1 +x:1 +病株 1 +x:1 +亚特兰大 1 +x:1 +验管 1 +x:1 +俯卧撑 1 +x:1 +夹心糖 1 +x:1 +百里挑一 1 +x:1 +存亡未卜 1 +x:1 +温泉乡 1 +x:1 +回归热 1 +x:1 +临澧 1 +x:1 +朝朝暮暮 1 +x:1 +水田镇 1 +x:1 +瓦隆 1 +x:1 +转告 1 +x:1 +玛瑙 1 +x:1 +提供量 1 +x:1 +成衣 1 +x:1 +土棍 1 +x:1 +共悲共愤 1 +x:1 +方框图 1 +x:1 +光能 1 +x:1 +鹤发鸡皮 1 +x:1 +磷光 1 +x:1 +中医药学 1 +x:1 +医学史 1 +x:1 +弥坚 1 +x:1 +成行 1 +x:1 +运营权 1 +x:1 +外错角 1 +x:1 +塞音 1 +x:1 +接用 1 +x:1 +空手枪 1 +x:1 +地道 1 +x:1 +厂貌 1 +x:1 +暮霭 1 +x:1 +南斯拉夫 1 +x:1 +抗争 1 +x:1 +不起眼 1 +x:1 +县局级 1 +x:1 +用油 1 +x:1 +头奖 1 +x:1 +鞭子 1 +x:1 +饭粒 1 +x:1 +光耀 1 +x:1 +东方学系 1 +x:1 +频发 1 +x:1 +选登 1 +x:1 +盒子 1 +x:1 +三圣庙村 1 +x:1 +破费 1 +x:1 +自行车队 1 +x:1 +皮筏 1 +x:1 +临漳 1 +x:1 +蓝藻 1 +x:1 +关系法 1 +x:1 +接生 1 +x:1 +核反应堆 1 +x:1 +民居 1 +x:1 +受气包 1 +x:1 +阴历年 1 +x:1 +破败 1 +x:1 +武昌 1 +x:1 +术后 1 +x:1 +说动 1 +x:1 +和乐 1 +x:1 +本行 1 +x:1 +闯江湖 1 +x:1 +逃废 1 +x:1 +荷兰病 1 +x:1 +老鼠过街 1 +x:1 +背离 1 +x:1 +陨星 1 +x:1 +佚名 1 +x:1 +临潼 1 +x:1 +交底 1 +x:1 +找回 1 +x:1 +卧龙 1 +x:1 +自纠自查 1 +x:1 +悄声 1 +x:1 +燕郊 1 +x:1 +材料厂 1 +x:1 +末世 1 +x:1 +马蝇 1 +x:1 +非歧视性 1 +x:1 +限时 1 +x:1 +对不起 1 +x:1 +沙梁 1 +x:1 +赞赏 1 +x:1 +照相仪 1 +x:1 +民工 1 +x:1 +民乐县 1 +x:1 +明出大卖 1 +x:1 +彩蝴蝶 1 +x:1 +旅外 1 +x:1 +赠款 1 +x:1 +沙梨 1 +x:1 +容量 1 +x:1 +武林 1 +x:1 +官宦 1 +x:1 +言简意赅 1 +x:1 +胎毛 1 +x:1 +掺沙子 1 +x:1 +胎毒 1 +x:1 +奇怪 1 +x:1 +休养生息 1 +x:1 +盘旋 1 +x:1 +果仁儿 1 +x:1 +马蜂 1 +x:1 +游戏机 1 +x:1 +甜蜜 1 +x:1 +序盘 1 +x:1 +作弊 1 +x:1 +沙棘 1 +x:1 +抗体 1 +x:1 +台阶 1 +x:1 +政客 1 +x:1 +政审 1 +x:1 +雁荡 1 +x:1 +板儿车 1 +x:1 +冲渣池 1 +x:1 +人武部长 1 +x:1 +有章可依 1 +x:1 +着凉 1 +x:1 +抽冷子 1 +x:1 +总司令部 1 +x:1 +干管 1 +x:1 +密切 1 +x:1 +大百科 1 +x:1 +独展芳容 1 +x:1 +朱张桥 1 +x:1 +稍有不慎 1 +x:1 +颂 44 +x:44 +光脑 1 +x:1 +绿色植物 1 +x:1 +议标 1 +x:1 +监督院 1 +x:1 +流出地 1 +x:1 +武术 1 +x:1 +人亡物在 1 +x:1 +台柱子 1 +x:1 +冲压机 1 +x:1 +观潮 1 +x:1 +接球 1 +x:1 +足额 1 +x:1 +罪名 1 +x:1 +结对数 1 +x:1 +病榻 1 +x:1 +含蕴 1 +x:1 +小叶儿茶 1 +x:1 +积分赛 1 +x:1 +心气 1 +x:1 +白口铁 1 +x:1 +捷通社 1 +x:1 +字画区 1 +x:1 +限收 1 +x:1 +干笑 1 +x:1 +逃往 1 +x:1 +衍 21 +x:21 +武松 1 +x:1 +太阳穴 1 +x:1 +坡田 1 +x:1 +莲子居 1 +x:1 +拙笔 1 +x:1 +甲骨学 1 +x:1 +罗列 1 +x:1 +甲烷 1 +x:1 +奇想 1 +x:1 +年份 1 +x:1 +文教局 1 +x:1 +自卸式 1 +x:1 +吗啡剂 1 +x:1 +歪道 1 +x:1 +顺便 1 +x:1 +私拿 1 +x:1 +成规 1 +x:1 +拉巴特 1 +x:1 +同盟 1 +x:1 +万花筒 1 +x:1 +盘整 1 +x:1 +彩漆 1 +x:1 +踏头草 1 +x:1 +教益 1 +x:1 +大肚汉 1 +x:1 +南沙沟 1 +x:1 +老天爷 1 +x:1 +转向 1 +x:1 +锡朱德 1 +x:1 +观棋 1 +x:1 +居功 1 +x:1 +抑止 1 +x:1 +钳蝎 1 +x:1 +伏特 1 +x:1 +募集 1 +x:1 +整理者 1 +x:1 +威海市 1 +x:1 +硝盐 1 +x:1 +彩棚 1 +x:1 +讥 3 +x:3 +血友病 1 +x:1 +挪 30 +x:30 +本身 1 +x:1 +干系 1 +x:1 +彩棉 1 +x:1 +过街老鼠 1 +x:1 +超长 1 +x:1 +露 74 +x:74 +伏牛 1 +x:1 +提倡者 1 +x:1 +乡旗 1 +x:1 +民旺村 1 +x:1 +代金 1 +x:1 +八仙茶 1 +x:1 +接班 1 +x:1 +弥天大错 1 +x:1 +停机位 1 +x:1 +枣强县 1 +x:1 +吊销期 1 +x:1 +奇材 1 +x:1 +教皇 1 +x:1 +破译 1 +x:1 +一墙之隔 1 +x:1 +撑竿跳 1 +x:1 +中办 1 +x:1 +拍卖槌 1 +x:1 +干粉 1 +x:1 +彩梦 1 +x:1 +巨型机 1 +x:1 +渝水区 1 +x:1 +讲价 1 +x:1 +涂污 1 +x:1 +放荡不羁 1 +x:1 +糅入 1 +x:1 +逼租 1 +x:1 +梳篦 1 +x:1 +提纲挈领 1 +x:1 +支支吾吾 1 +x:1 +瓜熟蒂落 1 +x:1 +操作 1 +x:1 +盘尼西林 1 +x:1 +光带 1 +x:1 +进行期 1 +x:1 +小舅子 1 +x:1 +回旋曲 1 +x:1 +沙漏 1 +x:1 +马背 1 +x:1 +怪杰 1 +x:1 +大获全胜 1 +x:1 +丰收期 1 +x:1 +碘 42 +x:42 +旅店 1 +x:1 +分动箱 1 +x:1 +长话费 1 +x:1 +童音 1 +x:1 +千军台 1 +x:1 +巨款 1 +x:1 +津美 1 +x:1 +楷范 1 +x:1 +化学 1 +x:1 +聚蚊成雷 1 +x:1 +沙漠 1 +x:1 +伤情 1 +x:1 +无私有弊 1 +x:1 +低压网 1 +x:1 +土温 1 +x:1 +西阳城乡 1 +x:1 +多用型 1 +x:1 +保险带 1 +x:1 +土渠 1 +x:1 +褪尽 1 +x:1 +莫隆 1 +x:1 +温课 1 +x:1 +炼钢炉 1 +x:1 +泛太平洋 1 +x:1 +文艺处 1 +x:1 +描绘 1 +x:1 +荣誉军人 1 +x:1 +柒 2 +x:2 +潜意识 1 +x:1 +绿篱 1 +x:1 +上告信 1 +x:1 +工交司 1 +x:1 +伤悲 1 +x:1 +讲义 1 +x:1 +伤心树 1 +x:1 +公因式 1 +x:1 +成团 1 +x:1 +档 25 +x:25 +国大党 1 +x:1 +吵嚷 1 +x:1 +松烟 1 +x:1 +骄阳似火 1 +x:1 +疯枝 1 +x:1 +西北麓 1 +x:1 +山东省 1 +x:1 +普列茨克 1 +x:1 +讲习 1 +x:1 +超采 1 +x:1 +寥若晨星 1 +x:1 +扶沟 1 +x:1 +燕雀 1 +x:1 +主航道 1 +x:1 +关联度 1 +x:1 +严酷性 1 +x:1 +髋骨 1 +x:1 +犯罪分子 1 +x:1 +浪漫史 1 +x:1 +润湿 1 +x:1 +茔 1 +x:1 +本辑 1 +x:1 +塔伊兹 1 +x:1 +沙源 1 +x:1 +爱恋 1 +x:1 +库存值 1 +x:1 +莫非 1 +x:1 +逃奔 1 +x:1 +沉湖镇 1 +x:1 +洪福齐天 1 +x:1 +县衙 1 +x:1 +蓝色 1 +x:1 +肩 68 +x:68 +煤炭局 1 +x:1 +三放一联 1 +x:1 +天鹅 1 +x:1 +渠网 1 +x:1 +翻阅 1 +x:1 +谶 1 +x:1 +心血管 1 +x:1 +前秦 1 +x:1 +气昂昂 1 +x:1 +声乐家 1 +x:1 +民家 1 +x:1 +桡骨 1 +x:1 +性器官 1 +x:1 +性别比 1 +x:1 +扎根 1 +x:1 +毒魔 1 +x:1 +中医药局 1 +x:1 +纽芬兰 1 +x:1 +高教部 1 +x:1 +险恶 1 +x:1 +马脚 1 +x:1 +太阳系 1 +x:1 +无权无势 1 +x:1 +龛影 1 +x:1 +交融 1 +x:1 +汽车展 1 +x:1 +伤愈 1 +x:1 +哈乙亥村 1 +x:1 +乓乓 1 +x:1 +财经委 1 +x:1 +掠走 1 +x:1 +取景点 1 +x:1 +伤感 1 +x:1 +民宅 1 +x:1 +知名人士 1 +x:1 +甲癣 1 +x:1 +奇景 1 +x:1 +嫁祸 1 +x:1 +冷冻车 1 +x:1 +洋 100 +x:100 +芽孢 1 +x:1 +楠溪江 1 +x:1 +运斤成风 1 +x:1 +塞上 1 +x:1 +愚蠢 1 +x:1 +民舞 1 +x:1 +层见叠出 1 +x:1 +养狐栏 1 +x:1 +厂训 1 +x:1 +胶拍 1 +x:1 +锥齿轮 1 +x:1 +航行 1 +x:1 +束手待毙 1 +x:1 +爱憎分明 1 +x:1 +紫癜 1 +x:1 +尿血 1 +x:1 +耶城 1 +x:1 +迷惑 1 +x:1 +平型关 1 +x:1 +台球史 1 +x:1 +流出入 1 +x:1 +六六六 1 +x:1 +牧群 1 +x:1 +圣诞票 1 +x:1 +余生 1 +x:1 +叹惜 1 +x:1 +熄灯号 1 +x:1 +刘源坑 1 +x:1 +阿飞 1 +x:1 +沙湖 1 +x:1 +传颂 1 +x:1 +脑充血 1 +x:1 +软体动物 1 +x:1 +盘据 1 +x:1 +香炉 1 +x:1 +本轮 1 +x:1 +浮财 1 +x:1 +争长论短 1 +x:1 +醇雅 1 +x:1 +述要 1 +x:1 +礼仪卡 1 +x:1 +送奖者 1 +x:1 +冲脉乡 1 +x:1 +早梅 1 +x:1 +牧羊 1 +x:1 +民声 1 +x:1 +禅 5 +x:5 +慢性期 1 +x:1 +干结 1 +x:1 +于无声处 1 +x:1 +祷告厅 1 +x:1 +设置关 1 +x:1 +延伸性 1 +x:1 +6 1471 +x:1471 +池馆台榭 1 +x:1 +造币机 1 +x:1 +碧油油 1 +x:1 +麦蚜虫 1 +x:1 +互帮互利 1 +x:1 +货箱 1 +x:1 +豆腐皮 1 +x:1 +管教所 1 +x:1 +救人者 1 +x:1 +芦山县 1 +x:1 +眼冒金星 1 +x:1 +养牛业 1 +x:1 +荣军院 1 +x:1 +文化展 1 +x:1 +廉洁奉公 1 +x:1 +大窑村 1 +x:1 +接待点 1 +x:1 +黄金村 1 +x:1 +化妆 1 +x:1 +旅居 1 +x:1 +浮躁 1 +x:1 +土法 1 +x:1 +新北乡 1 +x:1 +一丁点儿 1 +x:1 +非暴力 1 +x:1 +淡然 1 +x:1 +太阳翼 1 +x:1 +散文化 1 +x:1 +法规科 1 +x:1 +复仇者 1 +x:1 +奇数 1 +x:1 +揩 4 +x:4 +原素 1 +x:1 +四定两审 1 +x:1 +干线 1 +x:1 +马航 1 +x:1 +主力 1 +x:1 +中医师 1 +x:1 +绰约 1 +x:1 +超霸 1 +x:1 +干红 1 +x:1 +文艺家 1 +x:1 +教育金 1 +x:1 +执法关 1 +x:1 +压缩性 1 +x:1 +破解 1 +x:1 +增高 1 +x:1 +新郎官 1 +x:1 +各持己见 1 +x:1 +社 114 +x:114 +积分表 1 +x:1 +土气 1 +x:1 +聚集一堂 1 +x:1 +饭碗 1 +x:1 +坚劲 1 +x:1 +酿酒业 1 +x:1 +指导奖 1 +x:1 +针棉织品 1 +x:1 +渠系 1 +x:1 +报到处 1 +x:1 +中转站 1 +x:1 +鹿鸣 1 +x:1 +速 44 +x:44 +投食 1 +x:1 +互帮互助 1 +x:1 +文艺学 1 +x:1 +晒 48 +x:48 +两关 1 +x:1 +拍卖款 1 +x:1 +乡村 1 +x:1 +褒者 1 +x:1 +神采飞扬 1 +x:1 +中北镇 1 +x:1 +伦琴射线 1 +x:1 +去污粉 1 +x:1 +沙洲 1 +x:1 +栀子 1 +x:1 +兴安省 1 +x:1 +实力派 1 +x:1 +武戏 1 +x:1 +培训网 1 +x:1 +今生 1 +x:1 +全行 1 +x:1 +危险性 1 +x:1 +同班 1 +x:1 +无所事事 1 +x:1 +沙浆 1 +x:1 +少校 1 +x:1 +休眠 1 +x:1 +文体西村 1 +x:1 +润润 1 +x:1 +比肩 1 +x:1 +机顶盒 1 +x:1 +草原法 1 +x:1 +拭目以待 1 +x:1 +爱美 1 +x:1 +甘孜州 1 +x:1 +勘探系 1 +x:1 +武打 1 +x:1 +临死 1 +x:1 +馄饨 1 +x:1 +甜花 1 +x:1 +迎头痛击 1 +x:1 +扩音声 1 +x:1 +喊声 1 +x:1 +沙浦 1 +x:1 +温觉 1 +x:1 +复种 1 +x:1 +津津有味 1 +x:1 +一得之愚 1 +x:1 +临武 1 +x:1 +盒式 1 +x:1 +土池 1 +x:1 +长发镇 1 +x:1 +男孩梦 1 +x:1 +蠹虫 1 +x:1 +孤儿寡母 1 +x:1 +靖安 1 +x:1 +育人者 1 +x:1 +交心 1 +x:1 +沙沙 1 +x:1 +淡灰 1 +x:1 +接点 1 +x:1 +沙沟 1 +x:1 +成败 1 +x:1 +吉他手 1 +x:1 +汉皇 1 +x:1 +殊不知 1 +x:1 +厮咬 1 +x:1 +民委 1 +x:1 +活性氧 1 +x:1 +代总统 1 +x:1 +罚没 1 +x:1 +弧垂 1 +x:1 +储油区 1 +x:1 +冷冻货 1 +x:1 +淮海 1 +x:1 +教育部 1 +x:1 +复合词 1 +x:1 +政德 1 +x:1 +日臻完美 1 +x:1 +勘探队 1 +x:1 +长岛县 1 +x:1 +令人捧腹 1 +x:1 +糖膏 1 +x:1 +破裂 1 +x:1 +盒底 1 +x:1 +兴安盟 1 +x:1 +枝柯 1 +x:1 +海牛队 1 +x:1 +良知 1 +x:1 +比较法 1 +x:1 +饭票 1 +x:1 +集结地 1 +x:1 +厂区 1 +x:1 +沉思默想 1 +x:1 +绳圈式 1 +x:1 +地产业 1 +x:1 +鳜鱼 1 +x:1 +棒打鸳鸯 1 +x:1 +不动产业 1 +x:1 +辙叉 1 +x:1 +民女 1 +x:1 +中标率 1 +x:1 +甜菜 1 +x:1 +金碧辉煌 1 +x:1 +润泽 1 +x:1 +万寿路 1 +x:1 +牧场主 1 +x:1 +果香 1 +x:1 +骨头架子 1 +x:1 +侨乡 1 +x:1 +自耕农 1 +x:1 +冰风暴 1 +x:1 +穷追猛打 1 +x:1 +至今 1 +x:1 +率尔操觚 1 +x:1 +赤练蛇 1 +x:1 +技压群芳 1 +x:1 +求药者 1 +x:1 +刘源坑村 1 +x:1 +弧圈 1 +x:1 +厂规 1 +x:1 +袋鼠 1 +x:1 +居先 1 +x:1 +命名日 1 +x:1 +赃证 1 +x:1 +管状花 1 +x:1 +犯禁 1 +x:1 +必然性 1 +x:1 +盒带 1 +x:1 +夏庄镇 1 +x:1 +东半球 1 +x:1 +父系 1 +x:1 +本赛 1 +x:1 +健康法 1 +x:1 +售房方 1 +x:1 +检方 1 +x:1 +洋县 1 +x:1 +容错 1 +x:1 +使领馆 1 +x:1 +婴儿期 1 +x:1 +暨 150 +x:150 +弥勒 1 +x:1 +亚细亚 1 +x:1 +管理率 1 +x:1 +总价 1 +x:1 +雷山 1 +x:1 +同舟垂钓 1 +x:1 +工分 1 +x:1 +有机磷 1 +x:1 +封建礼教 1 +x:1 +畅所欲言 1 +x:1 +石锁 1 +x:1 +违心之论 1 +x:1 +敲诈 1 +x:1 +负债表 1 +x:1 +脑瓜子 1 +x:1 +吴岳村 1 +x:1 +疯药 1 +x:1 +红古堡 1 +x:1 +润南 1 +x:1 +掮客 1 +x:1 +刀光剑影 1 +x:1 +节能办 1 +x:1 +卖官鬻爵 1 +x:1 +鸟瞰 1 +x:1 +涿 1 +x:1 +渴 18 +x:18 +沙县 1 +x:1 +成长林 1 +x:1 +政情 1 +x:1 +这样一来 1 +x:1 +制药业 1 +x:1 +水管 1 +x:1 +名篇 1 +x:1 +毫升 1 +x:1 +插花 1 +x:1 +掌舵人 1 +x:1 +危险度 1 +x:1 +化学性质 1 +x:1 +东南亚 1 +x:1 +减产量 1 +x:1 +东郊区 1 +x:1 +限度 1 +x:1 +出面 1 +x:1 +土地权属 1 +x:1 +沙发 1 +x:1 +肉鸽 1 +x:1 +童子鸡 1 +x:1 +沭阳县 1 +x:1 +燃气具 1 +x:1 +润化 1 +x:1 +林化 1 +x:1 +告破 1 +x:1 +碌翁 1 +x:1 +八七年 1 +x:1 +马首是瞻 1 +x:1 +作战处 1 +x:1 +驼 2 +x:2 +半壁河山 1 +x:1 +嵊州 1 +x:1 +大喜过望 1 +x:1 +力帆厂 1 +x:1 +诗论家 1 +x:1 +屠宰场 1 +x:1 +水笔 1 +x:1 +民智 1 +x:1 +沙包 1 +x:1 +塔轮 1 +x:1 +股票机 1 +x:1 +重晶石 1 +x:1 +水笋 1 +x:1 +文峰区 1 +x:1 +毫厘 1 +x:1 +神枪 1 +x:1 +沙化 1 +x:1 +衡南县 1 +x:1 +学问家 1 +x:1 +阪神 1 +x:1 +报到机 1 +x:1 +土制 1 +x:1 +无往不利 1 +x:1 +消炎药 1 +x:1 +发迹 1 +x:1 +病势 1 +x:1 +沙区 1 +x:1 +武将 1 +x:1 +蓬松 1 +x:1 +严以律己 1 +x:1 +武山 1 +x:1 +派系 1 +x:1 +稻谷 1 +x:1 +奇寒 1 +x:1 +晚邮报 1 +x:1 +留者 1 +x:1 +坦克团 1 +x:1 +水筒 1 +x:1 +疏勒河 1 +x:1 +毫发 1 +x:1 +永久性 1 +x:1 +日语科 1 +x:1 +拍卖商 1 +x:1 +左上角 1 +x:1 +临商 1 +x:1 +卵黄 1 +x:1 +绥德 1 +x:1 +酡 1 +x:1 +闲来无事 1 +x:1 +门墙桃李 1 +x:1 +电脑节 1 +x:1 +超需求 1 +x:1 +风土人情 1 +x:1 +证监会 1 +x:1 +飞机库 1 +x:1 +收监 1 +x:1 +石门 1 +x:1 +收盘 1 +x:1 +健康史 1 +x:1 +化机 1 +x:1 +满额 1 +x:1 +招降纳叛 1 +x:1 +膏药 1 +x:1 +工一师 1 +x:1 +水窖 1 +x:1 +酮症 1 +x:1 +两极化 1 +x:1 +间种 1 +x:1 +无所适从 1 +x:1 +类芦 1 +x:1 +竞速赛 1 +x:1 +纺纱 1 +x:1 +淮南 1 +x:1 +大石山 1 +x:1 +扩音机 1 +x:1 +逃散 1 +x:1 +收看 1 +x:1 +夹七夹八 1 +x:1 +椰 2 +x:2 +被选举者 1 +x:1 +太平角 1 +x:1 +病区 1 +x:1 +少城 1 +x:1 +鼓吹 1 +x:1 +活性剂 1 +x:1 +胶带 1 +x:1 +发运 1 +x:1 +主刑 1 +x:1 +拍卖品 1 +x:1 +纺绸 1 +x:1 +武工 1 +x:1 +接任 1 +x:1 +灭鼠药 1 +x:1 +淮北 1 +x:1 +千丝万缕 1 +x:1 +大石庙镇 1 +x:1 +胶布 1 +x:1 +间离 1 +x:1 +芥末 1 +x:1 +水竹 1 +x:1 +哲学系 1 +x:1 +药害 1 +x:1 +纺织 1 +x:1 +武川 1 +x:1 +土台 1 +x:1 +表演区 1 +x:1 +檩子 1 +x:1 +中后期 1 +x:1 +单双杠 1 +x:1 +病危 1 +x:1 +伏休 1 +x:1 +网市镇 1 +x:1 +止疼除痹 1 +x:1 +构 8 +x:8 +机电井 1 +x:1 +戏曲化 1 +x:1 +病历 1 +x:1 +脑门子 1 +x:1 +管制署 1 +x:1 +非功利性 1 +x:1 +病原 1 +x:1 +罚则 1 +x:1 +雁翅镇 1 +x:1 +包赔 1 +x:1 +吗啡样 1 +x:1 +榨季 1 +x:1 +土包 1 +x:1 +靠边 1 +x:1 +思潮起伏 1 +x:1 +总体 1 +x:1 +蹄灯 1 +x:1 +注册处 1 +x:1 +垤 1 +x:1 +农家娃 1 +x:1 +梵蒂冈 1 +x:1 +荆门市 1 +x:1 +民权 1 +x:1 +谈兴未尽 1 +x:1 +土匪 1 +x:1 +辕门 1 +x:1 +文教星 1 +x:1 +目不识丁 1 +x:1 +挂果率 1 +x:1 +影片儿 1 +x:1 +抗病 1 +x:1 +病友 1 +x:1 +民机 1 +x:1 +邯大西街 1 +x:1 +漫画 1 +x:1 +苏轼 1 +x:1 +病变 1 +x:1 +胎儿 1 +x:1 +写真帖 1 +x:1 +石铁 1 +x:1 +民本 1 +x:1 +港航 1 +x:1 +黄金壳 1 +x:1 +病句 1 +x:1 +切莫 1 +x:1 +显示图 1 +x:1 +合作社 1 +x:1 +靠近 1 +x:1 +胶底 1 +x:1 +石铭 1 +x:1 +女扮男装 1 +x:1 +填空 1 +x:1 +病号 1 +x:1 +暗记儿 1 +x:1 +病史 1 +x:1 +免疫性 1 +x:1 +燃气化 1 +x:1 +任职期 1 +x:1 +弥漫 1 +x:1 +七百乡 1 +x:1 +乡寨 1 +x:1 +武术队 1 +x:1 +落后者 1 +x:1 +同伴 1 +x:1 +粤语 1 +x:1 +二锅头 1 +x:1 +存栏量 1 +x:1 +含碳量 1 +x:1 +光量子 1 +x:1 +矮个儿 1 +x:1 +拓垦 1 +x:1 +巴西利亚 1 +x:1 +升旗日 1 +x:1 +晶莹明彻 1 +x:1 +武库 1 +x:1 +赞辞 1 +x:1 +胡豆 1 +x:1 +策动 1 +x:1 +武庙 1 +x:1 +十点钟 1 +x:1 +奇大 1 +x:1 +策励 1 +x:1 +涂刷 1 +x:1 +上下议院 1 +x:1 +岐王 1 +x:1 +议决 1 +x:1 +同会 1 +x:1 +砼 4 +x:4 +同伙 1 +x:1 +胎动 1 +x:1 +伙伴儿 1 +x:1 +五黄六月 1 +x:1 +石炭 1 +x:1 +毫克 1 +x:1 +石青 1 +x:1 +武建 1 +x:1 +赊 8 +x:8 +望见 1 +x:1 +质检 1 +x:1 +浩瀚无涯 1 +x:1 +选人 1 +x:1 +消化系统 1 +x:1 +藤黄 1 +x:1 +行政区 1 +x:1 +面制品 1 +x:1 +绒线衫 1 +x:1 +武术院 1 +x:1 +赣东 1 +x:1 +石面 1 +x:1 +热敏性 1 +x:1 +技 22 +x:22 +胶工 1 +x:1 +奇妙 1 +x:1 +交响 1 +x:1 +策划 1 +x:1 +无日无夜 1 +x:1 +老战士 1 +x:1 +恋歌 1 +x:1 +居民 1 +x:1 +草畜 1 +x:1 +出生地 1 +x:1 +加 580 +x:580 +临场 1 +x:1 +青石桥 1 +x:1 +骨囊肿 1 +x:1 +武帝 1 +x:1 +数典忘祖 1 +x:1 +武师 1 +x:1 +不可磨灭 1 +x:1 +胶州 1 +x:1 +告竣 1 +x:1 +水神 1 +x:1 +马蹄铁 1 +x:1 +武平 1 +x:1 +频段 1 +x:1 +密歇根 1 +x:1 +亏欠 1 +x:1 +农家女 1 +x:1 +驴肉 1 +x:1 +法人化 1 +x:1 +借阅处 1 +x:1 +瓤 1 +x:1 +选举 1 +x:1 +土偶 1 +x:1 +优礼有加 1 +x:1 +咄咄逼人 1 +x:1 +邵阳 1 +x:1 +阿拉德 1 +x:1 +乐理 1 +x:1 +马蹄银 1 +x:1 +主导论 1 +x:1 +陌生 1 +x:1 +庆太村 1 +x:1 +东西方 1 +x:1 +武德 1 +x:1 +争 417 +x:417 +怪声 1 +x:1 +水碓 1 +x:1 +分组赛 1 +x:1 +鼓噪 1 +x:1 +生搬硬套 1 +x:1 +亚硝酸盐 1 +x:1 +一山之隔 1 +x:1 +遥遥领先 1 +x:1 +飘飞回荡 1 +x:1 +水碾 1 +x:1 +胶层 1 +x:1 +同一 1 +x:1 +同上 1 +x:1 +石阶 1 +x:1 +石阵 1 +x:1 +水碱 1 +x:1 +病儿 1 +x:1 +日神 1 +x:1 +非教派 1 +x:1 +选修 1 +x:1 +脑勺 1 +x:1 +胎发 1 +x:1 +千秋业 1 +x:1 +同业 1 +x:1 +民族 1 +x:1 +强硬 1 +x:1 +发球法 1 +x:1 +同乡 1 +x:1 +山山岭岭 1 +x:1 +艾佛莱特 1 +x:1 +策反 1 +x:1 +坏人坏事 1 +x:1 +选例 1 +x:1 +俊发飘逸 1 +x:1 +参赛权 1 +x:1 +香气扑鼻 1 +x:1 +心浮 1 +x:1 +艺术部 1 +x:1 +马桑树 1 +x:1 +港股 1 +x:1 +蒲石村 1 +x:1 +戈登堂 1 +x:1 +凝胶体 1 +x:1 +富士通 1 +x:1 +退休者 1 +x:1 +水磨 1 +x:1 +收留 1 +x:1 +未遂案 1 +x:1 +化石 1 +x:1 +关联性 1 +x:1 +桑皮俄沼 1 +x:1 +武强 1 +x:1 +求亲告友 1 +x:1 +达孜县 1 +x:1 +落水者 1 +x:1 +雏儿 1 +x:1 +弓 13 +x:13 +云雾飘渺 1 +x:1 +鞭打 1 +x:1 +一时一刻 1 +x:1 +活血化淤 1 +x:1 +同人 1 +x:1 +强碱 1 +x:1 +西花厅 1 +x:1 +垦拓 1 +x:1 +琥 1 +x:1 +同于 1 +x:1 +准宾语 1 +x:1 +南沙区 1 +x:1 +抉择 1 +x:1 +质问声 1 +x:1 +祖荫 1 +x:1 +等差数列 1 +x:1 +公安部队 1 +x:1 +沽源县 1 +x:1 +病况 1 +x:1 +无核化 1 +x:1 +气哼哼 1 +x:1 +被窃 1 +x:1 +浪漫派 1 +x:1 +油茶树 1 +x:1 +屎壳郎 1 +x:1 +民政 1 +x:1 +台钟 1 +x:1 +背包袱 1 +x:1 +核酸 1 +x:1 +才分 1 +x:1 +金黄色 1 +x:1 +奠基 1 +x:1 +条法司 1 +x:1 +金盆盆 1 +x:1 +正当时 1 +x:1 +被窝 1 +x:1 +哈达 1 +x:1 +奖金 1 +x:1 +挤挤挨挨 1 +x:1 +浇铸 1 +x:1 +移山倒海 1 +x:1 +政指 1 +x:1 +法人制 1 +x:1 +久治不愈 1 +x:1 +常年累月 1 +x:1 +伤心地 1 +x:1 +热振寺 1 +x:1 +杭二棉 1 +x:1 +宁城 1 +x:1 +歌乐山 1 +x:1 +钋 2 +x:2 +实力型 1 +x:1 +兄嫂 1 +x:1 +麻烦事 1 +x:1 +空间点阵 1 +x:1 +奇异 1 +x:1 +暗 64 +x:64 +稚气未脱 1 +x:1 +毛纺业 1 +x:1 +耘 2 +x:2 +沙垒 1 +x:1 +人头马 1 +x:1 +聪明一世 1 +x:1 +团长 1 +x:1 +滨江道 1 +x:1 +借方 1 +x:1 +地产界 1 +x:1 +冲压线 1 +x:1 +屠宰厂 1 +x:1 +嚷 11 +x:11 +洋坪 1 +x:1 +花灯戏 1 +x:1 +新增额 1 +x:1 +棉纺业 1 +x:1 +油花花 1 +x:1 +中和西乡 1 +x:1 +投影仪 1 +x:1 +渔池村 1 +x:1 +台钳 1 +x:1 +单双打 1 +x:1 +三总部 1 +x:1 +产销合同 1 +x:1 +床位 1 +x:1 +茂南区 1 +x:1 +泥腿子 1 +x:1 +手札 1 +x:1 +行书体 1 +x:1 +兵役法 1 +x:1 +武士 1 +x:1 +军调部 1 +x:1 +那霸港 1 +x:1 +胡言 1 +x:1 +扶持金 1 +x:1 +化控 1 +x:1 +分析语 1 +x:1 +帮贫助困 1 +x:1 +轻柔 1 +x:1 +大通铺式 1 +x:1 +齐奏 1 +x:1 +弄弄坪 1 +x:1 +一腔热血 1 +x:1 +壮劳力 1 +x:1 +台钻 1 +x:1 +抗灾 1 +x:1 +岳阳市 1 +x:1 +教义 1 +x:1 +澧县 1 +x:1 +团伙化 1 +x:1 +沙土 1 +x:1 +不辞而别 1 +x:1 +陈述句 1 +x:1 +三纲五常 1 +x:1 +日经 1 +x:1 +赫鸠 1 +x:1 +假药案 1 +x:1 +水缸 1 +x:1 +言而无信 1 +x:1 +核阅 1 +x:1 +借支 1 +x:1 +觉悟社 1 +x:1 +沙场 1 +x:1 +查询网 1 +x:1 +分辨力 1 +x:1 +杨树浦 1 +x:1 +沙地 1 +x:1 +资料馆 1 +x:1 +冥顽不灵 1 +x:1 +恃 1 +x:1 +冥思苦索 1 +x:1 +小提琴手 1 +x:1 +音区 1 +x:1 +捍 1 +x:1 +戴胸签者 1 +x:1 +水罐 1 +x:1 +水网 1 +x:1 +忒 4 +x:4 +曼妙弦音 1 +x:1 +沙坑 1 +x:1 +借故 1 +x:1 +沙坪 1 +x:1 +抗热 1 +x:1 +绥宁 1 +x:1 +病因 1 +x:1 +电力线 1 +x:1 +差转站 1 +x:1 +教主 1 +x:1 +伯尔尼 1 +x:1 +甲信 1 +x:1 +功绩 1 +x:1 +时装节 1 +x:1 +挽力 1 +x:1 +怪异 1 +x:1 +旁压力 1 +x:1 +─ 1 +x:1 +渥太华 1 +x:1 +自传式 1 +x:1 +疑窦 1 +x:1 +区内外 1 +x:1 +河网化 1 +x:1 +能人 1 +x:1 +一怒而去 1 +x:1 +悄悄 1 +x:1 +蜂拥而至 1 +x:1 +鸡血石 1 +x:1 +哈瓦那 1 +x:1 +正面图 1 +x:1 +地区级 1 +x:1 +电力网 1 +x:1 +猫儿山巅 1 +x:1 +水线 1 +x:1 +齐天 1 +x:1 +佯动 1 +x:1 +野景 1 +x:1 +盘龙江 1 +x:1 +千辛万苦 1 +x:1 +鼓号队 1 +x:1 +拿破仑 1 +x:1 +舍我其谁 1 +x:1 +水红 1 +x:1 +甲骨文 1 +x:1 +表舅 1 +x:1 +大柳树 1 +x:1 +点头哈腰 1 +x:1 +网络版 1 +x:1 +抑制 1 +x:1 +石道 1 +x:1 +哲理性 1 +x:1 +武姿 1 +x:1 +仇视 1 +x:1 +不惜工本 1 +x:1 +坚持不渝 1 +x:1 +孙膑 1 +x:1 +玉版宣 1 +x:1 +草灰 1 +x:1 +照相点 1 +x:1 +黄金屋 1 +x:1 +健康器 1 +x:1 +武委 1 +x:1 +黄金山 1 +x:1 +今人 1 +x:1 +表兄弟 1 +x:1 +善与人同 1 +x:1 +伤处 1 +x:1 +水绵 1 +x:1 +奇幻 1 +x:1 +成衣法 1 +x:1 +法籍 1 +x:1 +功罪 1 +x:1 +榫头 1 +x:1 +埃米尔 1 +x:1 +萁 1 +x:1 +久经考验 1 +x:1 +伙伴国 1 +x:1 +武夷 1 +x:1 +证券课 1 +x:1 +观光 1 +x:1 +少卿 1 +x:1 +派驻 1 +x:1 +胡说 1 +x:1 +武大 1 +x:1 +教体 1 +x:1 +流动站 1 +x:1 +县区 1 +x:1 +基价 1 +x:1 +安德鲁斯 1 +x:1 +政教 1 +x:1 +收率 1 +x:1 +胡诌 1 +x:1 +土地 1 +x:1 +诉 39 +x:39 +面套 1 +x:1 +甲亢 1 +x:1 +武备 1 +x:1 +网络状 1 +x:1 +出鞘 1 +x:1 +胡话 1 +x:1 +大骨节病 1 +x:1 +土坟 1 +x:1 +银武威 1 +x:1 +危害性 1 +x:1 +法系 1 +x:1 +土块 1 +x:1 +今世 1 +x:1 +土坑 1 +x:1 +天冬草 1 +x:1 +化成 1 +x:1 +土坎 1 +x:1 +草原 1 +x:1 +教会 1 +x:1 +盘子 1 +x:1 +任人唯亲 1 +x:1 +踌躇不前 1 +x:1 +艺术院 1 +x:1 +翻越 1 +x:1 +检察署 1 +x:1 +土坯 1 +x:1 +府芒市 1 +x:1 +土坪 1 +x:1 +专题会 1 +x:1 +省市长 1 +x:1 +民主革命 1 +x:1 +土坡 1 +x:1 +瑞香 1 +x:1 +尤卡坦 1 +x:1 +郭庄 1 +x:1 +奇崛 1 +x:1 +沙善 1 +x:1 +寸寸 1 +x:1 +畹町 1 +x:1 +同方向 1 +x:1 +珥陵 1 +x:1 +展容 1 +x:1 +连枷 1 +x:1 +一睹为快 1 +x:1 +关联方 1 +x:1 +日籍 1 +x:1 +临县 1 +x:1 +宽利队 1 +x:1 +等级分 1 +x:1 +被罩 1 +x:1 +上压力 1 +x:1 +梁平县 1 +x:1 +搬 209 +x:209 +项次 1 +x:1 +民情 1 +x:1 +拆迁量 1 +x:1 +久闻大名 1 +x:1 +南拳 1 +x:1 +潘帕斯 1 +x:1 +讨饭贼 1 +x:1 +等积形 1 +x:1 +证券行 1 +x:1 +园区型 1 +x:1 +创三安 1 +x:1 +雌鼠 1 +x:1 +克通社 1 +x:1 +导向管 1 +x:1 +宽容性 1 +x:1 +病员 1 +x:1 +阳刚之气 1 +x:1 +杖 3 +x:3 +逃成 1 +x:1 +乡徽 1 +x:1 +多元论 1 +x:1 +拍卖台 1 +x:1 +观鸟亭 1 +x:1 +复验 1 +x:1 +法罗 1 +x:1 +见所未见 1 +x:1 +绝对湿度 1 +x:1 +丝丝缕缕 1 +x:1 +同化作用 1 +x:1 +台球桌 1 +x:1 +东风区 1 +x:1 +法工委 1 +x:1 +节能器 1 +x:1 +掣动 1 +x:1 +油气区 1 +x:1 +暴露文学 1 +x:1 +主机厂 1 +x:1 +口崇仁路 1 +x:1 +鼓号 1 +x:1 +丘疹 1 +x:1 +吃吃喝喝 1 +x:1 +讲理 1 +x:1 +告终 1 +x:1 +男孩儿 1 +x:1 +潜能值 1 +x:1 +农改办 1 +x:1 +达旗 1 +x:1 +嘉永二年 1 +x:1 +南徐城村 1 +x:1 +康定城 1 +x:1 +碰碰 1 +x:1 +阿根廷湖 1 +x:1 +借机 1 +x:1 +果园镇 1 +x:1 +万宁城 1 +x:1 +下坪村 1 +x:1 +汉传 1 +x:1 +母机 1 +x:1 +转让人 1 +x:1 +爱不释手 1 +x:1 +演替 1 +x:1 +余下 1 +x:1 +娴静 1 +x:1 +细环饼 1 +x:1 +刨花 1 +x:1 +议商 1 +x:1 +轻松 1 +x:1 +倚晴楼 1 +x:1 +庄稼地 1 +x:1 +多类型 1 +x:1 +民怨 1 +x:1 +佣钱 1 +x:1 +天津市 1 +x:1 +五马分尸 1 +x:1 +涪陵市 1 +x:1 +见危授命 1 +x:1 +恭喜发财 1 +x:1 +回款率 1 +x:1 +休会 1 +x:1 +土味 1 +x:1 +得克萨斯 1 +x:1 +刮垢磨光 1 +x:1 +肋间肌 1 +x:1 +玉林井 1 +x:1 +豆腐乳 1 +x:1 +润喉 1 +x:1 +借条 1 +x:1 +光晕 1 +x:1 +倒行逆施 1 +x:1 +综合课 1 +x:1 +羊绒衫 1 +x:1 +阿比林市 1 +x:1 +化妆品 1 +x:1 +呆呆地 1 +x:1 +大块头 1 +x:1 +榫子 1 +x:1 +搂抱 1 +x:1 +水粉 1 +x:1 +告罄 1 +x:1 +综合语 1 +x:1 +天道酬勤 1 +x:1 +咖啡 1 +x:1 +牵制力 1 +x:1 +存款者 1 +x:1 +带 1460 +x:1460 +武官 1 +x:1 +轰隆隆 1 +x:1 +修械所 1 +x:1 +发送机 1 +x:1 +尔后 1 +x:1 +规律性 1 +x:1 +侦查员 1 +x:1 +武安 1 +x:1 +政柄 1 +x:1 +出敌不意 1 +x:1 +得过且过 1 +x:1 +腰鼓 1 +x:1 +不过如此 1 +x:1 +老派 1 +x:1 +彻底性 1 +x:1 +明眸皓齿 1 +x:1 +沙哑 1 +x:1 +净度 1 +x:1 +娴雅 1 +x:1 +坦克兵 1 +x:1 +扎制 1 +x:1 +噩梦 1 +x:1 +温恭谦和 1 +x:1 +水系 1 +x:1 +告缺 1 +x:1 +荣辱与共 1 +x:1 +文艺报 1 +x:1 +漳州市 1 +x:1 +公公正正 1 +x:1 +兄妹 1 +x:1 +雌鸟 1 +x:1 +脑袋 1 +x:1 +下行线 1 +x:1 +敷衍 1 +x:1 +少共 1 +x:1 +法线 1 +x:1 +保护鸟 1 +x:1 +贵宾车 1 +x:1 +斗牛舞 1 +x:1 +彩印 1 +x:1 +彩卷 1 +x:1 +临刑 1 +x:1 +主文 1 +x:1 +二进宫 1 +x:1 +法纪 1 +x:1 +五湖四海 1 +x:1 +合作网 1 +x:1 +里程碑 1 +x:1 +汉丹 1 +x:1 +雌黄 1 +x:1 +荷兰队 1 +x:1 +漂亮话 1 +x:1 +死脑筋 1 +x:1 +核销 1 +x:1 +照相版 1 +x:1 +科研组 1 +x:1 +激烈 1 +x:1 +月相 1 +x:1 +汉中 1 +x:1 +临别 1 +x:1 +形式美 1 +x:1 +前臂 1 +x:1 +伤寒 1 +x:1 +既来之 1 +x:1 +种子地 1 +x:1 +航运量 1 +x:1 +便宜货 1 +x:1 +鼓劲 1 +x:1 +鼓励 1 +x:1 +少儿 1 +x:1 +议员 1 +x:1 +马蹄金 1 +x:1 +鼓动 1 +x:1 +民愤 1 +x:1 +胖胖 1 +x:1 +士大夫 1 +x:1 +背囊 1 +x:1 +伤害 1 +x:1 +来来往往 1 +x:1 +老实事 1 +x:1 +易水 1 +x:1 +法统 1 +x:1 +醇朴 1 +x:1 +奇峰 1 +x:1 +休业 1 +x:1 +老实人 1 +x:1 +佩罗里纳 1 +x:1 +民愁 1 +x:1 +咖喱 1 +x:1 +后遗症 1 +x:1 +罪案 1 +x:1 +寺庙 1 +x:1 +零 163 +x:163 +特 176 +x:176 +焰火 1 +x:1 +海珍品 1 +x:1 +民意 1 +x:1 +汉书 1 +x:1 +后发优势 1 +x:1 +变更关 1 +x:1 +杰里科 1 +x:1 +坚土流沙 1 +x:1 +逃汇 1 +x:1 +浪漫曲 1 +x:1 +议官 1 +x:1 +议定 1 +x:1 +出阵 1 +x:1 +救护队 1 +x:1 +会 6134 +x:6134 +曝光 1 +x:1 +保安费 1 +x:1 +碴儿 1 +x:1 +粘菌 1 +x:1 +核验 1 +x:1 +合不拢嘴 1 +x:1 +老搭档 1 +x:1 +影戏 1 +x:1 +不锈钢 1 +x:1 +过廊 1 +x:1 +欺世盗名 1 +x:1 +齿唇音 1 +x:1 +花园式 1 +x:1 +整车 1 +x:1 +贿情 1 +x:1 +鸟群 1 +x:1 +两栖动物 1 +x:1 +临川 1 +x:1 +吸隔音 1 +x:1 +弥散 1 +x:1 +命运攸关 1 +x:1 +内侄女 1 +x:1 +信心百倍 1 +x:1 +宋家庄村 1 +x:1 +可用地 1 +x:1 +鸟翅 1 +x:1 +剖面图 1 +x:1 +直供直销 1 +x:1 +胶圈 1 +x:1 +徭役 1 +x:1 +风华正茂 1 +x:1 +满不在乎 1 +x:1 +渺无音信 1 +x:1 +银碟赛 1 +x:1 +矮个子 1 +x:1 +运思精妙 1 +x:1 +生烧 1 +x:1 +资山 1 +x:1 +易爆 1 +x:1 +水珠 1 +x:1 +恐惧 1 +x:1 +煞费心机 1 +x:1 +酸雨 1 +x:1 +表达 1 +x:1 +少年 1 +x:1 +毫安 1 +x:1 +肩胛骨 1 +x:1 +轻描淡写 1 +x:1 +观展 1 +x:1 +疯话 1 +x:1 +收纳 1 +x:1 +酸雾 1 +x:1 +塌腰 1 +x:1 +洙 1 +x:1 +稔熟 1 +x:1 +州人 1 +x:1 +咨 1 +x:1 +奋争 1 +x:1 +讲稿 1 +x:1 +万应锭 1 +x:1 +退休证 1 +x:1 +老毡筒 1 +x:1 +腰部 1 +x:1 +扇动 1 +x:1 +严阵以待 1 +x:1 +宣言 1 +x:1 +院务会 1 +x:1 +表述 1 +x:1 +起拍价 1 +x:1 +天长市 1 +x:1 +郐 1 +x:1 +外包装 1 +x:1 +鬼迷心窍 1 +x:1 +沙子 1 +x:1 +有利于 1 +x:1 +拜 59 +x:59 +改用 1 +x:1 +靖江 1 +x:1 +莲峰乡 1 +x:1 +讲究 1 +x:1 +佳人 1 +x:1 +回光镜 1 +x:1 +辨别 1 +x:1 +欣喜若狂 1 +x:1 +粮食法 1 +x:1 +生灵 1 +x:1 +音叉 1 +x:1 +尽瘁鞠躬 1 +x:1 +护坡墙 1 +x:1 +播散期 1 +x:1 +水獭 1 +x:1 +插言 1 +x:1 +犯人 1 +x:1 +颊上添毫 1 +x:1 +漂移 1 +x:1 +有识之士 1 +x:1 +不动产 1 +x:1 +红岩坡 1 +x:1 +收缴 1 +x:1 +胡蝶 1 +x:1 +恐惧感 1 +x:1 +文艺法 1 +x:1 +紫金锭 1 +x:1 +有苦难言 1 +x:1 +望花 1 +x:1 +酸碱 1 +x:1 +傣家人 1 +x:1 +派生 1 +x:1 +戏曲家 1 +x:1 +插话 1 +x:1 +有效分蘖 1 +x:1 +榨取 1 +x:1 +礁石 1 +x:1 +阳关道 1 +x:1 +傻乎乎 1 +x:1 +玉泉区 1 +x:1 +重水堆型 1 +x:1 +分餐制 1 +x:1 +放贷人 1 +x:1 +收编 1 +x:1 +准迁证 1 +x:1 +偏转 1 +x:1 +聆 3 +x:3 +早就 1 +x:1 +进度表 1 +x:1 +鱼石脂 1 +x:1 +飞机场 1 +x:1 +挫折 1 +x:1 +救难船 1 +x:1 +新城镇 1 +x:1 +历城 1 +x:1 +验收 1 +x:1 +胡蜂 1 +x:1 +病孩 1 +x:1 +格子 1 +x:1 +了不起 1 +x:1 +优缺点 1 +x:1 +收网 1 +x:1 +瑞雪 1 +x:1 +少待 1 +x:1 +篷 3 +x:3 +收罗 1 +x:1 +拴马桩 1 +x:1 +小小说 1 +x:1 +默念 1 +x:1 +日班 1 +x:1 +澄 3 +x:3 +奇功 1 +x:1 +手把手 1 +x:1 +表身 1 +x:1 +电脑课 1 +x:1 +功率 1 +x:1 +宜林则林 1 +x:1 +蜂拥而起 1 +x:1 +摆式列车 1 +x:1 +啼哭 1 +x:1 +无业者 1 +x:1 +病室 1 +x:1 +胶囊 1 +x:1 +台前县 1 +x:1 +发展前途 1 +x:1 +一醉方休 1 +x:1 +病容 1 +x:1 +黑叶猴 1 +x:1 +病家 1 +x:1 +病害 1 +x:1 +弥撒 1 +x:1 +淮安 1 +x:1 +墓中人 1 +x:1 +风鸟 1 +x:1 +保命田 1 +x:1 +曲折性 1 +x:1 +紫微八卦 1 +x:1 +短命 1 +x:1 +水牌 1 +x:1 +古戏楼 1 +x:1 +诗社 1 +x:1 +纸煤儿 1 +x:1 +淘 36 +x:36 +东风岗 1 +x:1 +厮打 1 +x:1 +六角形 1 +x:1 +迥然相异 1 +x:1 +预算表 1 +x:1 +胃下垂 1 +x:1 +多层次性 1 +x:1 +巧夺天工 1 +x:1 +拓展 1 +x:1 +偏远 1 +x:1 +地税征管 1 +x:1 +戏曲学 1 +x:1 +水牢 1 +x:1 +舍不得 1 +x:1 +配合力 1 +x:1 +负责人 1 +x:1 +加气站 1 +x:1 +衣分 1 +x:1 +石鼓 1 +x:1 +大石坝 1 +x:1 +潜伏期 1 +x:1 +昂首 1 +x:1 +毛里求斯 1 +x:1 +躲债 1 +x:1 +悬雍垂 1 +x:1 +采价点 1 +x:1 +鞭毛 1 +x:1 +京昆室 1 +x:1 +民法 1 +x:1 +告特 1 +x:1 +深深浅浅 1 +x:1 +秩序井然 1 +x:1 +乡友 1 +x:1 +危险品 1 +x:1 +逼供 1 +x:1 +大功告成 1 +x:1 +] 8 +x:8 +退职金 1 +x:1 +土石方 1 +x:1 +石鼠 1 +x:1 +镔铁 1 +x:1 +全额票 1 +x:1 +党支书 1 +x:1 +调换者 1 +x:1 +三面红旗 1 +x:1 +破损 1 +x:1 +蕊 3 +x:3 +升温法 1 +x:1 +仕女 1 +x:1 +太平花 1 +x:1 +脱贫记 1 +x:1 +掩饰剂 1 +x:1 +奇兵 1 +x:1 +有错必究 1 +x:1 +肯辛顿宫 1 +x:1 +独苗 1 +x:1 +土壶 1 +x:1 +脑瓜儿 1 +x:1 +出疆棉 1 +x:1 +临快 1 +x:1 +鲜花业 1 +x:1 +鲜花丛 1 +x:1 +异教 1 +x:1 +土壤 1 +x:1 +整财 1 +x:1 +檀 3 +x:3 +三制一体 1 +x:1 +石龟 1 +x:1 +蹄筋 1 +x:1 +有机物 1 +x:1 +叩门声 1 +x:1 +奖励金 1 +x:1 +储藏室 1 +x:1 +藏马 1 +x:1 +要是 1 +x:1 +土堆 1 +x:1 +辛 63 +x:63 +借款 1 +x:1 +心心相连 1 +x:1 +生父 1 +x:1 +脚指头 1 +x:1 +谯 1 +x:1 +亏损 1 +x:1 +储存罐 1 +x:1 +福田乡 1 +x:1 +急中生智 1 +x:1 +西关村 1 +x:1 +嫁人 1 +x:1 +土堡 1 +x:1 +厨房 1 +x:1 +逼使 1 +x:1 +言无二价 1 +x:1 +桑腾 1 +x:1 +日炽 1 +x:1 +褥单 1 +x:1 +人性化 1 +x:1 +武器 1 +x:1 +收储费 1 +x:1 +休工期 1 +x:1 +彩带 1 +x:1 +少少 1 +x:1 +许昌县 1 +x:1 +早籼 1 +x:1 +民气 1 +x:1 +垦殖 1 +x:1 +冤枉事 1 +x:1 +告状 1 +x:1 +双季稻 1 +x:1 +区域游 1 +x:1 +寸土 1 +x:1 +生物 1 +x:1 +少将 1 +x:1 +少尉 1 +x:1 +神奈川县 1 +x:1 +少小 1 +x:1 +彩帆 1 +x:1 +常宁 1 +x:1 +合成词 1 +x:1 +怪僻 1 +x:1 +日照 1 +x:1 +匀速运动 1 +x:1 +师范生 1 +x:1 +小伙子 1 +x:1 +辉耀村 1 +x:1 +临床 1 +x:1 +复音 1 +x:1 +烟墩镇 1 +x:1 +球磨机 1 +x:1 +大肚子 1 +x:1 +八家户村 1 +x:1 +更仆难数 1 +x:1 +病夫 1 +x:1 +损公肥私 1 +x:1 +家败人亡 1 +x:1 +防御区 1 +x:1 +油气库 1 +x:1 +腽肭兽 1 +x:1 +观念 1 +x:1 +杀价 1 +x:1 +聚合性 1 +x:1 +北后 1 +x:1 +去 4092 +x:4092 +医马论典 1 +x:1 +脆亮 1 +x:1 +孙辈 1 +x:1 +嵌刻 1 +x:1 +昆士兰州 1 +x:1 +帝号 1 +x:1 +在劫难逃 1 +x:1 +蹄窝 1 +x:1 +哑铃型 1 +x:1 +锣声 1 +x:1 +照相纸 1 +x:1 +书斋 1 +x:1 +洋琴 1 +x:1 +临建 1 +x:1 +全身 1 +x:1 +胶合 1 +x:1 +简简单单 1 +x:1 +逼仄 1 +x:1 +鼓师 1 +x:1 +说短论长 1 +x:1 +杀人 1 +x:1 +早市 1 +x:1 +宇宙服 1 +x:1 +抽查 1 +x:1 +法典化 1 +x:1 +十三辙 1 +x:1 +临帖 1 +x:1 +武场 1 +x:1 +荷兰盾 1 +x:1 +净流量 1 +x:1 +畏难 1 +x:1 +桥西 1 +x:1 +强点 1 +x:1 +拍卖师 1 +x:1 +小卖部 1 +x:1 +虹鳟鱼 1 +x:1 +七七式 1 +x:1 +登字头儿 1 +x:1 +危言耸听 1 +x:1 +脆丽 1 +x:1 +死也不放 1 +x:1 +噪音源 1 +x:1 +生猪 1 +x:1 +校园网 1 +x:1 +累活 1 +x:1 +紧身衣 1 +x:1 +甘棠镇 1 +x:1 +佛珠 1 +x:1 +简捷 1 +x:1 +附城镇 1 +x:1 +枝头 1 +x:1 +锦标 1 +x:1 +怀疑派 1 +x:1 +枕头顶 1 +x:1 +巴山雨夜 1 +x:1 +鼓座 1 +x:1 +水灾 1 +x:1 +有性杂交 1 +x:1 +配器法 1 +x:1 +强烈 1 +x:1 +水灶 1 +x:1 +武坛 1 +x:1 +颇为 1 +x:1 +豆制品 1 +x:1 +肺水肿 1 +x:1 +水火 1 +x:1 +分类式 1 +x:1 +泥瓦匠 1 +x:1 +由小到大 1 +x:1 +山南头 1 +x:1 +礼尚往来 1 +x:1 +私枪 1 +x:1 +可预防性 1 +x:1 +常导 1 +x:1 +回转仪 1 +x:1 +年间 1 +x:1 +胶印 1 +x:1 +神秘兮兮 1 +x:1 +朋比为奸 1 +x:1 +胶卷 1 +x:1 +喀左县 1 +x:1 +秋收起义 1 +x:1 +吆喝声 1 +x:1 +感天动地 1 +x:1 +政法 1 +x:1 +匪 7 +x:7 +苔藓植物 1 +x:1 +收税 1 +x:1 +胶粘剂 1 +x:1 +旅游 1 +x:1 +康 141 +x:141 +胶南 1 +x:1 +奖励面 1 +x:1 +赔礼道歉 1 +x:1 +恰帕斯州 1 +x:1 +老官堡乡 1 +x:1 +苦辣辛酸 1 +x:1 +暖瓶 1 +x:1 +桥身 1 +x:1 +烈士碑 1 +x:1 +牧主 1 +x:1 +微波灶 1 +x:1 +青 272 +x:272 +寰宇 1 +x:1 +武僧 1 +x:1 +束运线 1 +x:1 +绝路 1 +x:1 +苟 21 +x:21 +汇总表 1 +x:1 +东西欧 1 +x:1 +蒋墅 1 +x:1 +呦鹿 1 +x:1 +修身齐家 1 +x:1 +牧业 1 +x:1 +天福山 1 +x:1 +目不转睛 1 +x:1 +野牛草 1 +x:1 +绥北 1 +x:1 +绥化 1 +x:1 +渝长 1 +x:1 +巴厘纱 1 +x:1 +冒险主义 1 +x:1 +月季花 1 +x:1 +病床 1 +x:1 +表记 1 +x:1 +顿开茅塞 1 +x:1 +石首 1 +x:1 +临夏 1 +x:1 +仇者 1 +x:1 +每家 1 +x:1 +生理 1 +x:1 +土布 1 +x:1 +新月 1 +x:1 +南宁路 1 +x:1 +鸟笼 1 +x:1 +真格的 1 +x:1 +化武 1 +x:1 +日益 1 +x:1 +沙家浜 1 +x:1 +莺啼燕唱 1 +x:1 +临头 1 +x:1 +羽绒衫 1 +x:1 +沙弥 1 +x:1 +酉 1 +x:1 +微波炉 1 +x:1 +市政府 1 +x:1 +越来越 1 +x:1 +桃 18 +x:18 +限制 1 +x:1 +东海路 1 +x:1 +聚伞花序 1 +x:1 +视角篇 1 +x:1 +居所 1 +x:1 +爱心卡 1 +x:1 +拉丁舞 1 +x:1 +事中 1 +x:1 +表语 1 +x:1 +势所必然 1 +x:1 +小儿子 1 +x:1 +恋恋不舍 1 +x:1 +剖面 1 +x:1 +层级 1 +x:1 +西邑乡 1 +x:1 +淡黄 1 +x:1 +们 4891 +x:4891 +盘剥 1 +x:1 +紫毫 1 +x:1 +整训 1 +x:1 +怪圈 1 +x:1 +口角炎 1 +x:1 +螺丝母 1 +x:1 +鸟窝 1 +x:1 +国界线 1 +x:1 +生疑 1 +x:1 +生疏 1 +x:1 +洞开 1 +x:1 +黄洞乡 1 +x:1 +斯人长逝 1 +x:1 +新余市 1 +x:1 +伤兵 1 +x:1 +恬静 1 +x:1 +用劲 1 +x:1 +贼喊捉贼 1 +x:1 +生疼 1 +x:1 +桑蚕 1 +x:1 +马尼拉市 1 +x:1 +咖啡壶 1 +x:1 +塞纳 1 +x:1 +圆凳 1 +x:1 +黑芝麻 1 +x:1 +盘县 1 +x:1 +畏途 1 +x:1 +病弱 1 +x:1 +脆生 1 +x:1 +五·一 1 +x:1 +不辱使命 1 +x:1 +虚张声势 1 +x:1 +腰锅 1 +x:1 +水盆 1 +x:1 +恐怖 1 +x:1 +铈 1 +x:1 +报名费 1 +x:1 +周围神经 1 +x:1 +拍卖声 1 +x:1 +工业级 1 +x:1 +明治神宫 1 +x:1 +恐怕 1 +x:1 +盘古 1 +x:1 +生痰 1 +x:1 +一得之功 1 +x:1 +默对 1 +x:1 +兰亭序 1 +x:1 +肉鳍 1 +x:1 +生生 1 +x:1 +萎缩 1 +x:1 +出展 1 +x:1 +文教卫生 1 +x:1 +萍乡 1 +x:1 +严细 1 +x:1 +满门 1 +x:1 +沙市 1 +x:1 +病征 1 +x:1 +操纵 1 +x:1 +武术馆 1 +x:1 +鼓动性 1 +x:1 +表演队 1 +x:1 +皇太子 1 +x:1 +北周 1 +x:1 +电脑迷 1 +x:1 +规程 1 +x:1 +少子 1 +x:1 +尝试 1 +x:1 +议席 1 +x:1 +捣毁 1 +x:1 +中 26074 +x:26074 +主江堤 1 +x:1 +佛祖像 1 +x:1 +野心勃勃 1 +x:1 +青石板 1 +x:1 +架通 1 +x:1 +民歌 1 +x:1 +任用制 1 +x:1 +偏误 1 +x:1 +政派 1 +x:1 +基督徒 1 +x:1 +化妆师 1 +x:1 +项桥 1 +x:1 +彩头 1 +x:1 +生畏 1 +x:1 +脱钩 1 +x:1 +分立 1 +x:1 +危险区 1 +x:1 +强直 1 +x:1 +音势 1 +x:1 +塌落 1 +x:1 +眼见得 1 +x:1 +操练 1 +x:1 +蒸发量 1 +x:1 +宴 13 +x:13 +吵架 1 +x:1 +脱贫率 1 +x:1 +股票数 1 +x:1 +南方 1 +x:1 +强盛 1 +x:1 +街谈巷议 1 +x:1 +强盗 1 +x:1 +金茶花 1 +x:1 +法眼 1 +x:1 +看不顺眼 1 +x:1 +拓宽 1 +x:1 +涂布 1 +x:1 +土岗 1 +x:1 +立党为公 1 +x:1 +寺坡 1 +x:1 +文山会海 1 +x:1 +揪人心肺 1 +x:1 +策应 1 +x:1 +趴下 1 +x:1 +黑色化 1 +x:1 +临安 1 +x:1 +一语惊人 1 +x:1 +硕儒 1 +x:1 +悟 23 +x:23 +少壮 1 +x:1 +告白 1 +x:1 +出院者 1 +x:1 +稻苗 1 +x:1 +土岸 1 +x:1 +区别 1 +x:1 +抚恤金 1 +x:1 +雄鸟 1 +x:1 +水疱 1 +x:1 +主讲人 1 +x:1 +炉 21 +x:21 +治体 1 +x:1 +临客 1 +x:1 +稻花 1 +x:1 +举棋不定 1 +x:1 +水痘 1 +x:1 +揉 16 +x:16 +退休费 1 +x:1 +王侯 1 +x:1 +各家各户 1 +x:1 +贵港市 1 +x:1 +胡家滩 1 +x:1 +爸爸日 1 +x:1 +庞贝城 1 +x:1 +石魂 1 +x:1 +海军呢 1 +x:1 +干事 1 +x:1 +井湾子 1 +x:1 +中上层 1 +x:1 +干亲 1 +x:1 +叩 11 +x:11 +化学地雷 1 +x:1 +淘汰率 1 +x:1 +脑膜 1 +x:1 +起居室 1 +x:1 +粉碎法 1 +x:1 +你报 1 +x:1 +钟鼎文 1 +x:1 +预防费 1 +x:1 +水生 1 +x:1 +大石队 1 +x:1 +液相 1 +x:1 +港资 1 +x:1 +新板 1 +x:1 +百色市 1 +x:1 +莞 4 +x:4 +牌坊店 1 +x:1 +波斯湾 1 +x:1 +国子监 1 +x:1 +水电 1 +x:1 +柱花草 1 +x:1 +水田 1 +x:1 +招摇过市 1 +x:1 +实践 1 +x:1 +故伎重演 1 +x:1 +若干 1 +x:1 +偏袒 1 +x:1 +南天竹 1 +x:1 +层系 1 +x:1 +亏本 1 +x:1 +勃李乡 1 +x:1 +嘉兴市 1 +x:1 +青山绿水 1 +x:1 +伤势 1 +x:1 +水界 1 +x:1 +土屋 1 +x:1 +武剧 1 +x:1 +表解 1 +x:1 +土层 1 +x:1 +元宝枫 1 +x:1 +嵊县 1 +x:1 +亏月 1 +x:1 +文身 1 +x:1 +靠背 1 +x:1 +江东路 1 +x:1 +早安 1 +x:1 +爱侣 1 +x:1 +软饮料 1 +x:1 +吴桥县 1 +x:1 +籟传十 1 +x:1 +扎实 1 +x:1 +任用关 1 +x:1 +刻度尺 1 +x:1 +乡土 1 +x:1 +托塔尔 1 +x:1 +佛学院 1 +x:1 +农救会 1 +x:1 +昆 179 +x:179 +锰矿砂 1 +x:1 +馏 1 +x:1 +盘内 1 +x:1 +酸酸 1 +x:1 +孙八案 1 +x:1 +秀才人情 1 +x:1 +遗弃案 1 +x:1 +观察 1 +x:1 +最新型 1 +x:1 +早婚 1 +x:1 +沙岭 1 +x:1 +各向异性 1 +x:1 +勤政廉政 1 +x:1 +榫卯 1 +x:1 +綦江 1 +x:1 +四邻八村 1 +x:1 +钟塔 1 +x:1 +邓州市 1 +x:1 +酸中毒 1 +x:1 +功用 1 +x:1 +鹦哥绿 1 +x:1 +酸酐 1 +x:1 +所说 1 +x:1 +老态龙钟 1 +x:1 +插足 1 +x:1 +褒奖 1 +x:1 +脓水 1 +x:1 +电脑费 1 +x:1 +表表 1 +x:1 +入托 1 +x:1 +田纳西 1 +x:1 +瑞郎 1 +x:1 +闻者足戒 1 +x:1 +抢购一空 1 +x:1 +兖州 1 +x:1 +类风湿性 1 +x:1 +摩擦音 1 +x:1 +掩耳盗铃 1 +x:1 +钩心斗角 1 +x:1 +偏襟 1 +x:1 +机械化 1 +x:1 +少妇 1 +x:1 +石马 1 +x:1 +美色关 1 +x:1 +沙峰 1 +x:1 +土工 1 +x:1 +水瓢 1 +x:1 +万宁市 1 +x:1 +树大招风 1 +x:1 +少女 1 +x:1 +山羊皮 1 +x:1 +采石场 1 +x:1 +伤口 1 +x:1 +怪味 1 +x:1 +沙尘 1 +x:1 +鬼剃头 1 +x:1 +否决权 1 +x:1 +烧火棍 1 +x:1 +洗漱间 1 +x:1 +伤号 1 +x:1 +保护阀 1 +x:1 +整装 1 +x:1 +水球 1 +x:1 +分类学 1 +x:1 +雌雄 1 +x:1 +林农 1 +x:1 +净资产 1 +x:1 +邓州府 1 +x:1 +雪车 1 +x:1 +龙须面 1 +x:1 +奠定 1 +x:1 +告知 1 +x:1 +稻草 1 +x:1 +迫击炮 1 +x:1 +干休 1 +x:1 +容器厂 1 +x:1 +黄铜矿 1 +x:1 +罪恶 1 +x:1 +沙层 1 +x:1 +法盲 1 +x:1 +越野 1 +x:1 +拉西乡 1 +x:1 +老糊涂 1 +x:1 +默契 1 +x:1 +常规岛 1 +x:1 +杂交 1 +x:1 +翠 16 +x:16 +窜扰 1 +x:1 +啧 1 +x:1 +武南 1 +x:1 +四流中路 1 +x:1 +欲擒故纵 1 +x:1 +爱人 1 +x:1 +偏见 1 +x:1 +妖精 1 +x:1 +沙山 1 +x:1 +王业 1 +x:1 +武协 1 +x:1 +乐曲 1 +x:1 +限价 1 +x:1 +凤梨 1 +x:1 +下坡处 1 +x:1 +表露 1 +x:1 +凤梧 1 +x:1 +枢机主教 1 +x:1 +天老儿 1 +x:1 +萝卜花 1 +x:1 +畹町桥 1 +x:1 +限令 1 +x:1 +他处 1 +x:1 +西胡同村 1 +x:1 +操持 1 +x:1 +鸟龙 1 +x:1 +人名册 1 +x:1 +接待 1 +x:1 +谨 41 +x:41 +内服药 1 +x:1 +返修率 1 +x:1 +满都海 1 +x:1 +杂八 1 +x:1 +周转量 1 +x:1 +胶体 1 +x:1 +鸟枪 1 +x:1 +满街 1 +x:1 +憨外秀中 1 +x:1 +民益 1 +x:1 +功模 1 +x:1 +王冠 1 +x:1 +坡度 1 +x:1 +非图书 1 +x:1 +汉姓 1 +x:1 +床子 1 +x:1 +解脱 1 +x:1 +石蕊 1 +x:1 +水母 1 +x:1 +灼人心扉 1 +x:1 +乔 390 +x:390 +散落 1 +x:1 +旋转体 1 +x:1 +琼剧院 1 +x:1 +常熟市 1 +x:1 +重叠 1 +x:1 +呼救声 1 +x:1 +水毁 1 +x:1 +背包 1 +x:1 +总店 1 +x:1 +今宵 1 +x:1 +啮 1 +x:1 +去污剂 1 +x:1 +淳熙六年 1 +x:1 +伏帖 1 +x:1 +獠牙 1 +x:1 +掘土机 1 +x:1 +精致化 1 +x:1 +文艺界 1 +x:1 +王八 1 +x:1 +聘书 1 +x:1 +长汀县 1 +x:1 +生树 1 +x:1 +排量 1 +x:1 +备勤组 1 +x:1 +外国语 1 +x:1 +辞典 1 +x:1 +送货上门 1 +x:1 +哄 23 +x:23 +汉诺威市 1 +x:1 +甑子 1 +x:1 +投书 1 +x:1 +殉国 1 +x:1 +生根 1 +x:1 +盘中 1 +x:1 +去污力 1 +x:1 +材料科 1 +x:1 +腾越 1 +x:1 +存乎一心 1 +x:1 +不可逆转 1 +x:1 +淡忘 1 +x:1 +牵引性 1 +x:1 +繁分数 1 +x:1 +怒冲冲 1 +x:1 +犯困 1 +x:1 +戏剧者 1 +x:1 +机内码 1 +x:1 +郧阳 1 +x:1 +验钞器 1 +x:1 +字斟句酌 1 +x:1 +民瘼 1 +x:1 +饭囊 1 +x:1 +品种性 1 +x:1 +试错性 1 +x:1 +螺丝刀 1 +x:1 +脂肪 1 +x:1 +怎么 1 +x:1 +汉奸 1 +x:1 +复调 1 +x:1 +饭团 1 +x:1 +太阳光 1 +x:1 +发行 1 +x:1 +扩张主义 1 +x:1 +孑孓 1 +x:1 +总师 1 +x:1 +能屈能伸 1 +x:1 +太阳党 1 +x:1 +新石器 1 +x:1 +投票者 1 +x:1 +法核 1 +x:1 +强横 1 +x:1 +常沅 1 +x:1 +汉墓 1 +x:1 +爱滋病 1 +x:1 +胶乳 1 +x:1 +干净 1 +x:1 +大兴岛 1 +x:1 +讲授 1 +x:1 +亚二局 1 +x:1 +梦想成真 1 +x:1 +十二属相 1 +x:1 +发球线 1 +x:1 +醉马草 1 +x:1 +背地里 1 +x:1 +教导 1 +x:1 +戒骄戒躁 1 +x:1 +接应 1 +x:1 +逼和 1 +x:1 +绥中 1 +x:1 +收条 1 +x:1 +蛮横无理 1 +x:1 +盅 3 +x:3 +下半年 1 +x:1 +低沉 1 +x:1 +王储 1 +x:1 +牧区 1 +x:1 +库里村 1 +x:1 +石灰质 1 +x:1 +教官 1 +x:1 +金本位 1 +x:1 +逃生 1 +x:1 +橘子洲 1 +x:1 +胶丸 1 +x:1 +韩商 1 +x:1 +雨后春笋 1 +x:1 +脆响 1 +x:1 +教宗 1 +x:1 +救护车 1 +x:1 +同居 1 +x:1 +同层 1 +x:1 +减速剂 1 +x:1 +勘验系泊 1 +x:1 +教室 1 +x:1 +乐果 1 +x:1 +义合镇 1 +x:1 +绥东 1 +x:1 +越轨 1 +x:1 +法案 1 +x:1 +采纳率 1 +x:1 +窃玉偷香 1 +x:1 +东海道 1 +x:1 +煤炉子 1 +x:1 +收束 1 +x:1 +作文课 1 +x:1 +瞄 5 +x:5 +石蒜 1 +x:1 +三季度 1 +x:1 +复起 1 +x:1 +之乎者也 1 +x:1 +良多 1 +x:1 +教子 1 +x:1 +冀州市 1 +x:1 +教字 1 +x:1 +狗仗人势 1 +x:1 +总归 1 +x:1 +槽 3 +x:3 +慰藉 1 +x:1 +手舞足蹈 1 +x:1 +同岁 1 +x:1 +苏州河 1 +x:1 +矜夸 1 +x:1 +教学 1 +x:1 +呼兰县 1 +x:1 +万锦滩 1 +x:1 +赣州 1 +x:1 +随风而逝 1 +x:1 +汉堡 1 +x:1 +倾箱倒箧 1 +x:1 +藏经洞 1 +x:1 +复赛 1 +x:1 +朱柱 1 +x:1 +雷公 1 +x:1 +撒切尔 1 +x:1 +爱斯基摩 1 +x:1 +上中下游 1 +x:1 +东海郡 1 +x:1 +菌 19 +x:19 +杏 3 +x:3 +光灿灿 1 +x:1 +州城 1 +x:1 +救护连 1 +x:1 +水橇 1 +x:1 +越过 1 +x:1 +山茱萸 1 +x:1 +桂平市 1 +x:1 +唯唯 1 +x:1 +抗日 1 +x:1 +化瘤 1 +x:1 +架豆 1 +x:1 +黑穗病 1 +x:1 +毁容 1 +x:1 +恶霸 1 +x:1 +铮 12 +x:12 +酸辛 1 +x:1 +良好 1 +x:1 +财经界 1 +x:1 +资金卡 1 +x:1 +马仁区 1 +x:1 +寒流 1 +x:1 +余头 1 +x:1 +资力 1 +x:1 +罗氏沼虾 1 +x:1 +武人 1 +x:1 +关停率 1 +x:1 +话匣子 1 +x:1 +正阳 1 +x:1 +太平天国 1 +x:1 +同心同德 1 +x:1 +养虾户 1 +x:1 +刨除 1 +x:1 +爱印 1 +x:1 +教士 1 +x:1 +同异 1 +x:1 +天人合一 1 +x:1 +床头 1 +x:1 +管制法 1 +x:1 +石头寨 1 +x:1 +苏鲁 1 +x:1 +大师赛 1 +x:1 +化痰 1 +x:1 +水榭 1 +x:1 +正负 1 +x:1 +石蜡 1 +x:1 +格 48 +x:48 +挑肥拣瘦 1 +x:1 +养护费 1 +x:1 +伙食费 1 +x:1 +富锦市 1 +x:1 +克拉根福 1 +x:1 +坡岭 1 +x:1 +古北新区 1 +x:1 +呱呱叫 1 +x:1 +招飞 1 +x:1 +断断续续 1 +x:1 +讲情 1 +x:1 +郗 4 +x:4 +核能 1 +x:1 +埙 2 +x:2 +坡岸 1 +x:1 +淘金 1 +x:1 +≠ 1 +x:1 +水槽 1 +x:1 +父兄 1 +x:1 +公民党 1 +x:1 +武 195 +x:195 +十三陵 1 +x:1 +培训司 1 +x:1 +收摊 1 +x:1 +资助 1 +x:1 +形状 1 +x:1 +奋发努力 1 +x:1 +绳 40 +x:40 +总收入 1 +x:1 +吴忠市 1 +x:1 +许家坝区 1 +x:1 +勘探队员 1 +x:1 +电脑部 1 +x:1 +洛社镇 1 +x:1 +尹湾 1 +x:1 +小雨夹雪 1 +x:1 +岳庙 1 +x:1 +五显岗 1 +x:1 +胡思乱想 1 +x:1 +休学 1 +x:1 +石菖蒲 1 +x:1 +退休金 1 +x:1 +协理员 1 +x:1 +系念 1 +x:1 +忧国忧民 1 +x:1 +能够 1 +x:1 +破烂不堪 1 +x:1 +津冀 1 +x:1 +出生入死 1 +x:1 +抗暴 1 +x:1 +杂史 1 +x:1 +霞美镇 1 +x:1 +冲突点 1 +x:1 +今夜 1 +x:1 +影子内阁 1 +x:1 +余威 1 +x:1 +汉子 1 +x:1 +手 937 +x:937 +教堂 1 +x:1 +客商 1 +x:1 +汉字 1 +x:1 +伤亡 1 +x:1 +海月水母 1 +x:1 +武乡 1 +x:1 +今夏 1 +x:1 +非关键 1 +x:1 +厅里 1 +x:1 +照相机 1 +x:1 +湖北队 1 +x:1 +同心 1 +x:1 +胸膜炎 1 +x:1 +化用 1 +x:1 +文教界 1 +x:1 +比萨 1 +x:1 +同志 1 +x:1 +虬劲 1 +x:1 +今天 1 +x:1 +杀场 1 +x:1 +垂钓者 1 +x:1 +基线量 1 +x:1 +是因为 1 +x:1 +汉学 1 +x:1 +狭窄 1 +x:1 +保安队 1 +x:1 +奇花异卉 1 +x:1 +琼海市 1 +x:1 +同病相怜 1 +x:1 +图尔比勒 1 +x:1 +街坊 1 +x:1 +北坡洋县 1 +x:1 +收支 1 +x:1 +武侠 1 +x:1 +提示牌 1 +x:1 +狐蝠 1 +x:1 +复述 1 +x:1 +中兽医 1 +x:1 +立方体 1 +x:1 +余寒 1 +x:1 +教委 1 +x:1 +字头 1 +x:1 +杂剧 1 +x:1 +偏锋 1 +x:1 +绰号 1 +x:1 +年高体衰 1 +x:1 +塑胶带 1 +x:1 +打击乐器 1 +x:1 +复返 1 +x:1 +学龄 1 +x:1 +良宵 1 +x:1 +颁布 1 +x:1 +心怀 1 +x:1 +微贱 1 +x:1 +总产量 1 +x:1 +储油罐 1 +x:1 +同年 1 +x:1 +直爽 1 +x:1 +平板车 1 +x:1 +大提琴 1 +x:1 +宾至如归 1 +x:1 +收效 1 +x:1 +新华门 1 +x:1 +获得性 1 +x:1 +二进位 1 +x:1 +人头费 1 +x:1 +育林费 1 +x:1 +复辟 1 +x:1 +收敛 1 +x:1 +余家 1 +x:1 +同座 1 +x:1 +东坡塔 1 +x:1 +复转 1 +x:1 +嫉妒 1 +x:1 +选录 1 +x:1 +至关紧要 1 +x:1 +力图 1 +x:1 +生肖印 1 +x:1 +紫檀 1 +x:1 +亏空 1 +x:1 +收方 1 +x:1 +望文生义 1 +x:1 +林荫道 1 +x:1 +同庆 1 +x:1 +卡纳塔克 1 +x:1 +汹涌 1 +x:1 +收文 1 +x:1 +水样 1 +x:1 +带动性 1 +x:1 +大麻者 1 +x:1 +城门头 1 +x:1 +表针 1 +x:1 +化合物 1 +x:1 +伤俘 1 +x:1 +教女 1 +x:1 +连成一气 1 +x:1 +目中无人 1 +x:1 +成果率 1 +x:1 +届 4824 +x:4824 +表链 1 +x:1 +七巧板 1 +x:1 +氧化 1 +x:1 +腌 12 +x:12 +灵童 1 +x:1 +中西方 1 +x:1 +街垒 1 +x:1 +名信片 1 +x:1 +棕榈林 1 +x:1 +民用 1 +x:1 +碟子 1 +x:1 +电磁辐射 1 +x:1 +生死 1 +x:1 +杂务 1 +x:1 +甲壳 1 +x:1 +水桶 1 +x:1 +以德报怨 1 +x:1 +农贸市场 1 +x:1 +民生 1 +x:1 +波斯猫 1 +x:1 +如实地 1 +x:1 +教头 1 +x:1 +淡季 1 +x:1 +入海量 1 +x:1 +座标 1 +x:1 +奇伟 1 +x:1 +咄咄 1 +x:1 +非官守 1 +x:1 +联绵字 1 +x:1 +蚕食鲸吞 1 +x:1 +休工 1 +x:1 +铁树开花 1 +x:1 +承印点 1 +x:1 +热流量 1 +x:1 +抗性 1 +x:1 +超国家 1 +x:1 +力所能及 1 +x:1 +生油 1 +x:1 +初犯者 1 +x:1 +领唱者 1 +x:1 +收成 1 +x:1 +嫌疑犯 1 +x:1 +总成绩 1 +x:1 +教廷 1 +x:1 +里昂 1 +x:1 +汉川 1 +x:1 +饭前 1 +x:1 +土卫六 1 +x:1 +桥隧 1 +x:1 +冤屈 1 +x:1 +假冒者 1 +x:1 +纵虎归山 1 +x:1 +膏状 1 +x:1 +茬 34 +x:34 +同好 1 +x:1 +罗定市 1 +x:1 +掏钱 1 +x:1 +掐头去尾 1 +x:1 +双胞胎 1 +x:1 +伊基克 1 +x:1 +干咳 1 +x:1 +日清 1 +x:1 +三顾茅庐 1 +x:1 +东海镇 1 +x:1 +演唱 1 +x:1 +单斜层 1 +x:1 +主因 1 +x:1 +市区 1 +x:1 +岗南乡 1 +x:1 +汽车界 1 +x:1 +日渐 1 +x:1 +划水 1 +x:1 +坐北朝南 1 +x:1 +经典之作 1 +x:1 +毛装 1 +x:1 +检 64 +x:64 +良将 1 +x:1 +杀光 1 +x:1 +范楼村 1 +x:1 +生民 1 +x:1 +石膏 1 +x:1 +潺潺 1 +x:1 +讲明 1 +x:1 +小金洞乡 1 +x:1 += 6 +x:6 +梁子湖畔 1 +x:1 +颇具 1 +x:1 +万顺路 1 +x:1 +保护费 1 +x:1 +法规化 1 +x:1 +杀入 1 +x:1 +铸件 1 +x:1 +生水 1 +x:1 +火车站 1 +x:1 +借用 1 +x:1 +奋力 1 +x:1 +乐手 1 +x:1 +关税区 1 +x:1 +教师 1 +x:1 +收拢 1 +x:1 +干吗 1 +x:1 +塔什干 1 +x:1 +瓮福 1 +x:1 +病源体 1 +x:1 +寡头政治 1 +x:1 +滁州市 1 +x:1 +五一路 1 +x:1 +鱼龙 1 +x:1 +琉球 1 +x:1 +收拾 1 +x:1 +列车段 1 +x:1 +津城 1 +x:1 +奋勇 1 +x:1 +石臼 1 +x:1 +耳福 1 +x:1 +石山镇 1 +x:1 +插队 1 +x:1 +冰消瓦解 1 +x:1 +纽约州 1 +x:1 +水潭 1 +x:1 +核子武器 1 +x:1 +同姓 1 +x:1 +民爆 1 +x:1 +肉墩墩 1 +x:1 +减速运动 1 +x:1 +使命感 1 +x:1 +出操 1 +x:1 +北海村 1 +x:1 +弗如 1 +x:1 +苯甲酸 1 +x:1 +势单力孤 1 +x:1 +桑麻 1 +x:1 +平等互利 1 +x:1 +伏季 1 +x:1 +强渡 1 +x:1 +水源 1 +x:1 +怎 106 +x:106 +兴安岭 1 +x:1 +边境线 1 +x:1 +调压站 1 +x:1 +熊蜂 1 +x:1 +农家人 1 +x:1 +超现实 1 +x:1 +星火村 1 +x:1 +脑髓 1 +x:1 +同堂 1 +x:1 +挖苦 1 +x:1 +痛击 1 +x:1 +废液 1 +x:1 +奇丽 1 +x:1 +揭东县 1 +x:1 +高潮迭起 1 +x:1 +生涯 1 +x:1 +床帮 1 +x:1 +生涩 1 +x:1 +有据可依 1 +x:1 +遗弃物 1 +x:1 +怪人 1 +x:1 +牧地 1 +x:1 +牧场 1 +x:1 +收据 1 +x:1 +私改 1 +x:1 +交通员 1 +x:1 +接待室 1 +x:1 +纸页 1 +x:1 +教徒 1 +x:1 +东乡县 1 +x:1 +皮囊 1 +x:1 +术箩 1 +x:1 +鱼秧 1 +x:1 +水滴 1 +x:1 +固若金汤 1 +x:1 +奇书 1 +x:1 +鬼灵精 1 +x:1 +怪事 1 +x:1 +医学系 1 +x:1 +饭厅 1 +x:1 +杂品 1 +x:1 +曲周县 1 +x:1 +高位池 1 +x:1 +逼债 1 +x:1 +桥面 1 +x:1 +老住户 1 +x:1 +三教九流 1 +x:1 +价钱 1 +x:1 +政略 1 +x:1 +小家碧玉 1 +x:1 +奇事 1 +x:1 +武器库 1 +x:1 +狐臭 1 +x:1 +钻研 1 +x:1 +生活 1 +x:1 +折桂人 1 +x:1 +今年 1 +x:1 +化物 1 +x:1 +煞 26 +x:26 +嘭 4 +x:4 +奇人 1 +x:1 +机耕路 1 +x:1 +马蹄莲 1 +x:1 +政界 1 +x:1 +富水镇 1 +x:1 +石头山 1 +x:1 +炮兵师 1 +x:1 +水温 1 +x:1 +官官相护 1 +x:1 +庞 77 +x:77 +水渠 1 +x:1 +长江口 1 +x:1 +能干 1 +x:1 +长二丙 1 +x:1 +两新两高 1 +x:1 +入不敷出 1 +x:1 +似乎 1 +x:1 +满足 1 +x:1 +四大发明 1 +x:1 +嗖嗖 1 +x:1 +趋光性 1 +x:1 +大礼包 1 +x:1 +希腊字母 1 +x:1 +辞旧迎新 1 +x:1 +伏安 1 +x:1 +亲兄弟 1 +x:1 +王后 1 +x:1 +专题式 1 +x:1 +保安部 1 +x:1 +南大街 1 +x:1 +农家乐 1 +x:1 +二台子乡 1 +x:1 +渭源县 1 +x:1 +营养素 1 +x:1 +医学类 1 +x:1 +裾 1 +x:1 +鸭广梨 1 +x:1 +内 3375 +x:3375 +粘膜 1 +x:1 +输液 1 +x:1 +弧线 1 +x:1 +事情 1 +x:1 +日光能 1 +x:1 +生源 1 +x:1 +自相鱼肉 1 +x:1 +豆腐店 1 +x:1 +洒 84 +x:84 +完成者 1 +x:1 +架设 1 +x:1 +抗战 1 +x:1 +证监委 1 +x:1 +海协会 1 +x:1 +收买 1 +x:1 +李遂 1 +x:1 +断线风筝 1 +x:1 +助理员 1 +x:1 +琬 5 +x:5 +罗定山 1 +x:1 +疯长 1 +x:1 +衍化 1 +x:1 +双柳河 1 +x:1 +乡俗 1 +x:1 +建言献计 1 +x:1 +水涡 1 +x:1 +同学 1 +x:1 +渔捞 1 +x:1 +同季 1 +x:1 +强心剂 1 +x:1 +油墨 1 +x:1 +科学型 1 +x:1 +萧山市 1 +x:1 +收息 1 +x:1 +鸣锣登场 1 +x:1 +塞族 1 +x:1 +外国货 1 +x:1 +私交 1 +x:1 +局部性 1 +x:1 +李逵 1 +x:1 +水淀 1 +x:1 +酸梅汤 1 +x:1 +贡献者 1 +x:1 +侏罗世 1 +x:1 +三纵两横 1 +x:1 +脸膛儿 1 +x:1 +瓮中之鳖 1 +x:1 +太阳城 1 +x:1 +失职 1 +x:1 +水深 1 +x:1 +石药 1 +x:1 +灵霍介 1 +x:1 +水洞 1 +x:1 +同室 1 +x:1 +水泉县 1 +x:1 +面料商 1 +x:1 +良师 1 +x:1 +水洗 1 +x:1 +调和漆 1 +x:1 +私挖滥采 1 +x:1 +负责制 1 +x:1 +新文化 1 +x:1 +源 112 +x:112 +根本法 1 +x:1 +武术节 1 +x:1 +鞍湖镇 1 +x:1 +接头 1 +x:1 +电力法 1 +x:1 +有限公司 1 +x:1 +伊甸园 1 +x:1 +收悉 1 +x:1 +却说 1 +x:1 +悬壁 1 +x:1 +兆位 1 +x:1 +大肠菌 1 +x:1 +南特市 1 +x:1 +敌我矛盾 1 +x:1 +幻想曲 1 +x:1 +保洁费 1 +x:1 +硅谷 1 +x:1 +拘泥 1 +x:1 +余年 1 +x:1 +有惊无险 1 +x:1 +全心全意 1 +x:1 +水浜 1 +x:1 +对应物 1 +x:1 +县属 1 +x:1 +布里斯班 1 +x:1 +满身 1 +x:1 +分外妖娆 1 +x:1 +人文主义 1 +x:1 +雕花竹 1 +x:1 +痛切 1 +x:1 +脓疮 1 +x:1 +测年技术 1 +x:1 +鼓乐喧天 1 +x:1 +储油站 1 +x:1 +表演赛 1 +x:1 +水流 1 +x:1 +乡企 1 +x:1 +可行性 1 +x:1 +织布机 1 +x:1 +逃犯 1 +x:1 +米粽 1 +x:1 +上瘾者 1 +x:1 +快餐店 1 +x:1 +江东门 1 +x:1 +合理合法 1 +x:1 +乐思 1 +x:1 +几经周折 1 +x:1 +姚坪乡 1 +x:1 +种牛 1 +x:1 +表里 1 +x:1 +豆腐干 1 +x:1 +望都县 1 +x:1 +腰身 1 +x:1 +崩裂 1 +x:1 +水沟 1 +x:1 +索桥 1 +x:1 +三机部 1 +x:1 +良径 1 +x:1 +技术界 1 +x:1 +膏 5 +x:5 +参赛费 1 +x:1 +刚强 1 +x:1 +复课 1 +x:1 +满载 1 +x:1 +火车票 1 +x:1 +复评 1 +x:1 +盒盖 1 +x:1 +一尘不染 1 +x:1 +垫 22 +x:22 +教工 1 +x:1 +水河 1 +x:1 +复诊 1 +x:1 +石舫 1 +x:1 +预防针 1 +x:1 +纽约市 1 +x:1 +八月十五 1 +x:1 +隆丰镇 1 +x:1 +选定 1 +x:1 +伏天 1 +x:1 +会试录 1 +x:1 +复训 1 +x:1 +接壤 1 +x:1 +尼龙绳 1 +x:1 +良心 1 +x:1 +包产到户 1 +x:1 +一时之困 1 +x:1 +乡亲 1 +x:1 +水泊 1 +x:1 +宏命令 1 +x:1 +武器展 1 +x:1 +乡人 1 +x:1 +休庭 1 +x:1 +今岁 1 +x:1 +专委会 1 +x:1 +硫酸锌 1 +x:1 +水泽 1 +x:1 +中学组 1 +x:1 +水泻 1 +x:1 +背后 1 +x:1 +石色 1 +x:1 +水泵 1 +x:1 +质子—M 1 +x:1 +强求 1 +x:1 +支援法 1 +x:1 +脑颅 1 +x:1 +自写像 1 +x:1 +见钱眼开 1 +x:1 +水泥 1 +x:1 +水波 1 +x:1 +街区 1 +x:1 +水泡 1 +x:1 +乡乡 1 +x:1 +塔顶 1 +x:1 +水气 1 +x:1 +洋白菜 1 +x:1 +拉巴布 1 +x:1 +生漆 1 +x:1 +警钟常鸣 1 +x:1 +岭叠岭 1 +x:1 +被约见人 1 +x:1 +街口 1 +x:1 +牵引机 1 +x:1 +令人鼓舞 1 +x:1 +爱国 1 +x:1 +叫声 1 +x:1 +堵 102 +x:102 +劫杀案 1 +x:1 +科头乡 1 +x:1 +时断时续 1 +x:1 +赤子之心 1 +x:1 +材料组 1 +x:1 +选学 1 +x:1 +干细胞 1 +x:1 +多难兴邦 1 +x:1 +气缸盖 1 +x:1 +坡头 1 +x:1 +宝塔菜 1 +x:1 +万有引力 1 +x:1 +马歇尔 1 +x:1 +小字辈 1 +x:1 +衣衣不舍 1 +x:1 +供过于求 1 +x:1 +水汽 1 +x:1 +赫赫 1 +x:1 +石英 1 +x:1 +乡上 1 +x:1 +功德碑 1 +x:1 +乐感 1 +x:1 +福田区 1 +x:1 +余弦 1 +x:1 +插销 1 +x:1 +太平鼓 1 +x:1 +批 2513 +x:2513 +接待处 1 +x:1 +乐意 1 +x:1 +水池 1 +x:1 +方形盘 1 +x:1 +传教士 1 +x:1 +中航技 1 +x:1 +旅程 1 +x:1 +水排 1 +x:1 +一通百通 1 +x:1 +烘炉 1 +x:1 +前导 1 +x:1 +疯魔 1 +x:1 +定购价 1 +x:1 +平坝村 1 +x:1 +爱女 1 +x:1 +滔天大罪 1 +x:1 +萨 7 +x:7 +爱好 1 +x:1 +剩余物 1 +x:1 +取用 1 +x:1 +易手 1 +x:1 +羊肠小道 1 +x:1 +石质 1 +x:1 +日托 1 +x:1 +心狠手辣 1 +x:1 +艺术论 1 +x:1 +未成年 1 +x:1 +纳入 1 +x:1 +抑低 1 +x:1 +私 80 +x:80 +烟卷儿 1 +x:1 +魂 71 +x:71 +全貌 1 +x:1 +床单 1 +x:1 +圜丘 1 +x:1 +转让费 1 +x:1 +汽车票 1 +x:1 +战区 1 +x:1 +甲午 1 +x:1 +产妇术 1 +x:1 +日戳 1 +x:1 +王妃 1 +x:1 +温泉水 1 +x:1 +红灯笼 1 +x:1 +教务 1 +x:1 +怀旧感 1 +x:1 +人才出众 1 +x:1 +山东厅 1 +x:1 +肉弹 1 +x:1 +父子 1 +x:1 +弥留 1 +x:1 +刺激性 1 +x:1 +告急 1 +x:1 +艺术课 1 +x:1 +少于 1 +x:1 +惦记 1 +x:1 +稀烂 1 +x:1 +蒸馏水 1 +x:1 +化身 1 +x:1 +州府 1 +x:1 +硅微条 1 +x:1 +陶陶然 1 +x:1 +生怕 1 +x:1 +节俭 1 +x:1 +键入 1 +x:1 +纳凉 1 +x:1 +能匠 1 +x:1 +甲厂 1 +x:1 +首 2500 +x:2500 +哈铁 1 +x:1 +接地 1 +x:1 +生态 1 +x:1 +背对 1 +x:1 +南极 1 +x:1 +有感于此 1 +x:1 +湛江市 1 +x:1 +藤萝 1 +x:1 +生性 1 +x:1 +同喜 1 +x:1 +不索何获 1 +x:1 +面目皆非 1 +x:1 +相接处 1 +x:1 +寂 2 +x:2 +受过 1 +x:1 +瘦骨棱棱 1 +x:1 +榨豆浆机 1 +x:1 +透明性 1 +x:1 +代步器 1 +x:1 +佯作 1 +x:1 +幡然 1 +x:1 +化缘 1 +x:1 +沮丧 1 +x:1 +不正之风 1 +x:1 +族长 1 +x:1 +复萌 1 +x:1 +爱妻 1 +x:1 +基本形 1 +x:1 +叶脉 1 +x:1 +生息 1 +x:1 +静默 1 +x:1 +乐清 1 +x:1 +太太节 1 +x:1 +驴骡 1 +x:1 +较之 1 +x:1 +教友 1 +x:1 +书香人家 1 +x:1 +演示 1 +x:1 +圆形动物 1 +x:1 +快餐具 1 +x:1 +核订 1 +x:1 +不相上下 1 +x:1 +核计 1 +x:1 +逼岸 1 +x:1 +独弦琴 1 +x:1 +容城县 1 +x:1 +满腹 1 +x:1 +成家 1 +x:1 +双轮架车 1 +x:1 +能动 1 +x:1 +猛龙队 1 +x:1 +吞 22 +x:22 +温泉浴 1 +x:1 +涣 1 +x:1 +填报 1 +x:1 +颔首 1 +x:1 +同名 1 +x:1 +丝挂子 1 +x:1 +抗洪 1 +x:1 +能力 1 +x:1 +内江市 1 +x:1 +量才录用 1 +x:1 +央求 1 +x:1 +满腔 1 +x:1 +宜昌县 1 +x:1 +脱贫村 1 +x:1 +展览会 1 +x:1 +后卫线 1 +x:1 +窈窕 1 +x:1 +昨儿 1 +x:1 +风声鹤唳 1 +x:1 +猫耳洞 1 +x:1 +散货 1 +x:1 +武术赛 1 +x:1 +少侠 1 +x:1 +高碑店市 1 +x:1 +无限期 1 +x:1 +良田 1 +x:1 +满脸 1 +x:1 +光荣花 1 +x:1 +干妈 1 +x:1 +杏干 1 +x:1 +周转额 1 +x:1 +相对高度 1 +x:1 +化纤 1 +x:1 +层次 1 +x:1 +强手 1 +x:1 +抗浮 1 +x:1 +二十一日 1 +x:1 +活动分子 1 +x:1 +聚合物 1 +x:1 +碰杯 1 +x:1 +日不暇给 1 +x:1 +核试 1 +x:1 +坡坡 1 +x:1 +犯忌 1 +x:1 +水战 1 +x:1 +游士 1 +x:1 +剂量 1 +x:1 +功德圆满 1 +x:1 +子程序 1 +x:1 +生意 1 +x:1 +余党 1 +x:1 +流云 1 +x:1 +未遂犯 1 +x:1 +滨江路 1 +x:1 +抗涝 1 +x:1 +凶神恶煞 1 +x:1 +拦路虎 1 +x:1 +保护者 1 +x:1 +水房 1 +x:1 +棉纺厂 1 +x:1 +购房量 1 +x:1 +怆然 1 +x:1 +窝窝头 1 +x:1 +陵东乡 1 +x:1 +特立独行 1 +x:1 +再就是 1 +x:1 +坡坎 1 +x:1 +街巷 1 +x:1 +寻死 1 +x:1 +小囊 1 +x:1 +脑际 1 +x:1 +文艺类 1 +x:1 +休假 1 +x:1 +组织关系 1 +x:1 +价额 1 +x:1 +填房 1 +x:1 +强抑 1 +x:1 +管制权 1 +x:1 +政社 1 +x:1 +电化 1 +x:1 +总场 1 +x:1 +接待地 1 +x:1 +武装部 1 +x:1 +坡地 1 +x:1 +水手 1 +x:1 +嗦嗦 1 +x:1 +沪西 1 +x:1 +少掌柜 1 +x:1 +拉萨河 1 +x:1 +叫苦连天 1 +x:1 +万世流芳 1 +x:1 +教区 1 +x:1 +战事 1 +x:1 +因情制宜 1 +x:1 +给排水 1 +x:1 +高效化 1 +x:1 +爱子 1 +x:1 +抗清 1 +x:1 +兴安县 1 +x:1 +爱孙 1 +x:1 +同在 1 +x:1 +变电站 1 +x:1 +犯属 1 +x:1 +硫胺素 1 +x:1 +被捕 1 +x:1 +脑门 1 +x:1 +同场 1 +x:1 +面巾 1 +x:1 +鸭子坝 1 +x:1 +小满 1 +x:1 +九尾狐 1 +x:1 +宣传处 1 +x:1 +岌岌 1 +x:1 +痰迹 1 +x:1 +咔嚓 1 +x:1 +组方 1 +x:1 +沅江市 1 +x:1 +硅肺 1 +x:1 +纳卡 1 +x:1 +飞车走壁 1 +x:1 +不在乎 1 +x:1 +金丝鸟 1 +x:1 +杏城乡 1 +x:1 +街市 1 +x:1 +王室 1 +x:1 +王宫 1 +x:1 +一举两得 1 +x:1 +余力 1 +x:1 +父女 1 +x:1 +王家 1 +x:1 +何许人也 1 +x:1 +忙 390 +x:390 +细察 1 +x:1 +立身处世 1 +x:1 +鼓槌 1 +x:1 +膏粱 1 +x:1 +讲棋 1 +x:1 +酸枣汁 1 +x:1 +腿肚子 1 +x:1 +沈丘县 1 +x:1 +彩云 1 +x:1 +易怒 1 +x:1 +马路新闻 1 +x:1 +苏铁 1 +x:1 +实在论 1 +x:1 +今冬 1 +x:1 +老寨村 1 +x:1 +梁洼镇 1 +x:1 +侃侃而谈 1 +x:1 +提示符 1 +x:1 +总和 1 +x:1 +针脚 1 +x:1 +插页 1 +x:1 +听凭 1 +x:1 +类风湿病 1 +x:1 +蠡园乡 1 +x:1 +拍卖会 1 +x:1 +碰撞 1 +x:1 +中专生 1 +x:1 +生成 1 +x:1 +乐池 1 +x:1 +鞭策 1 +x:1 +收油 1 +x:1 +收治 1 +x:1 +龋齿 1 +x:1 +综合险 1 +x:1 +白苍苍 1 +x:1 +脆弱 1 +x:1 +有案可查 1 +x:1 +接待员 1 +x:1 +心慌 1 +x:1 +平利县 1 +x:1 +原子弹 1 +x:1 +王子 1 +x:1 +绿色化 1 +x:1 +王孙 1 +x:1 +余割 1 +x:1 +间或 1 +x:1 +干娘 1 +x:1 +余切 1 +x:1 +炸毁 1 +x:1 +中转库 1 +x:1 +生手 1 +x:1 +汉华 1 +x:1 +讲桌 1 +x:1 +话里带刺 1 +x:1 +燃气轮机 1 +x:1 +汉语言 1 +x:1 +今儿 1 +x:1 +其它 1 +x:1 +综合队 1 +x:1 +汉印 1 +x:1 +鸟浴 1 +x:1 +区政府 1 +x:1 +杂家 1 +x:1 +单方面 1 +x:1 +乘兴 1 +x:1 +频率 1 +x:1 +剖腹 1 +x:1 +总后 1 +x:1 +谷类作物 1 +x:1 +圆领儿 1 +x:1 +牧女 1 +x:1 +民怨沸腾 1 +x:1 +流动摊 1 +x:1 +光华 1 +x:1 +唯心 1 +x:1 +逃 120 +x:120 +龙须菜 1 +x:1 +痛心 1 +x:1 +漫游费 1 +x:1 +年鉴 1 +x:1 +天目溪 1 +x:1 +临了 1 +x:1 +玛 1 +x:1 +杨树林 1 +x:1 +小手指 1 +x:1 +鼓书 1 +x:1 +丰富性 1 +x:1 +发言 1 +x:1 +拍卖人 1 +x:1 +鼓乐 1 +x:1 +独木赤烈 1 +x:1 +旅社 1 +x:1 +风华绝代 1 +x:1 +深证所 1 +x:1 +脆度 1 +x:1 +痛快 1 +x:1 +临产 1 +x:1 +平地处 1 +x:1 +水患 1 +x:1 +粑粑 1 +x:1 +良友 1 +x:1 +接哨 1 +x:1 +做饭 1 +x:1 +就寝 1 +x:1 +忠告 1 +x:1 +磷火 1 +x:1 +动画片 1 +x:1 +选型 1 +x:1 +冰塔林 1 +x:1 +水情 1 +x:1 +胰液 1 +x:1 +塔钟 1 +x:1 +拍卖价 1 +x:1 +粘胶 1 +x:1 +望都 1 +x:1 +早上 1 +x:1 +青云堂 1 +x:1 +干审 1 +x:1 +间接 1 +x:1 +良史 1 +x:1 +高出一筹 1 +x:1 +接听 1 +x:1 +表演者 1 +x:1 +街心 1 +x:1 +争战 1 +x:1 +拍卖业 1 +x:1 +怒不可遏 1 +x:1 +接吻 1 +x:1 +开关厂 1 +x:1 +选址 1 +x:1 +龙须草 1 +x:1 +就业率 1 +x:1 +强悍 1 +x:1 +身后名 1 +x:1 +施治 1 +x:1 +没完没了 1 +x:1 +齐街镇 1 +x:1 +痛彻 1 +x:1 +适度从紧 1 +x:1 +晶状体 1 +x:1 +威慑力 1 +x:1 +乍浦港 1 +x:1 +头晕目眩 1 +x:1 +良医 1 +x:1 +五一节 1 +x:1 +北城 1 +x:1 +水性 1 +x:1 +屏风 1 +x:1 +教具 1 +x:1 +器背 1 +x:1 +造谣生事 1 +x:1 +观众 1 +x:1 +居留 1 +x:1 +套 881 +x:881 +雌花 1 +x:1 +文教类 1 +x:1 +青贮法 1 +x:1 +为辅 1 +x:1 +早些 1 +x:1 +选场 1 +x:1 +品学兼优 1 +x:1 +镜片 1 +x:1 +保护色 1 +x:1 +汽车站 1 +x:1 +光杆儿 1 +x:1 +熨衣板 1 +x:1 +与人无争 1 +x:1 +台 1276 +x:1276 +考核表 1 +x:1 +扭亏为盈 1 +x:1 +汉剧 1 +x:1 +赞词 1 +x:1 +水果 1 +x:1 +旧州镇 1 +x:1 +湄洲湾 1 +x:1 +被救 1 +x:1 +褂 1 +x:1 +天趣巧成 1 +x:1 +显眼 1 +x:1 +日晷 1 +x:1 +箴言 1 +x:1 +派性 1 +x:1 +甲地 1 +x:1 +土人 1 +x:1 +雌蕊 1 +x:1 +信贷科 1 +x:1 +操演 1 +x:1 +渊薮 1 +x:1 +木雕泥塑 1 +x:1 +水枪 1 +x:1 +日晕 1 +x:1 +亲家母 1 +x:1 +作伪者 1 +x:1 +日晒 1 +x:1 +水柜 1 +x:1 +踏雪寻梅 1 +x:1 +副厂级 1 +x:1 +独立报 1 +x:1 +生擒 1 +x:1 +接口 1 +x:1 +六合县 1 +x:1 +总务 1 +x:1 +日显 1 +x:1 +次级线圈 1 +x:1 +龙游县 1 +x:1 +纳克法 1 +x:1 +接待办 1 +x:1 +石西 1 +x:1 +背弃 1 +x:1 +怜香惜玉 1 +x:1 +慢慢吞吞 1 +x:1 +水柱 1 +x:1 +淡化 1 +x:1 +华灯初上 1 +x:1 +接受 1 +x:1 +同党 1 +x:1 +修车铺 1 +x:1 +牧师 1 +x:1 +法方 1 +x:1 +土丘 1 +x:1 +汉唐 1 +x:1 +鞘翅目 1 +x:1 +达江乡 1 +x:1 +爱鸟周 1 +x:1 +议会 1 +x:1 +黑颈鹤 1 +x:1 +寒热 1 +x:1 +澜 4 +x:4 +禁烟牌 1 +x:1 +多元酸 1 +x:1 +甲型 1 +x:1 +水机 1 +x:1 +刨食 1 +x:1 +复职 1 +x:1 +丰满区 1 +x:1 +散装 1 +x:1 +雷区 1 +x:1 +剑拔弩张 1 +x:1 +爱巢 1 +x:1 +床垫 1 +x:1 +弥足珍贵 1 +x:1 +鼠目寸光 1 +x:1 +到来之际 1 +x:1 +相溶性 1 +x:1 +中学生 1 +x:1 +偏听偏信 1 +x:1 +祖籍 1 +x:1 +胶东区 1 +x:1 +绰尔 1 +x:1 +颂词 1 +x:1 +新名优 1 +x:1 +洗发水 1 +x:1 +菩萨顶 1 +x:1 +名花异草 1 +x:1 +成名成家 1 +x:1 +水杏 1 +x:1 +干将 1 +x:1 +颂诗 1 +x:1 +法旨 1 +x:1 +水杉 1 +x:1 +磷矿 1 +x:1 +淡去 1 +x:1 +万花山 1 +x:1 +磷脂 1 +x:1 +车身险 1 +x:1 +京白 1 +x:1 +功曹 1 +x:1 +螺丝帽 1 +x:1 +颂语 1 +x:1 +总则 1 +x:1 +甲基 1 +x:1 +旧货业 1 +x:1 +文艺社 1 +x:1 +水杯 1 +x:1 +总分 1 +x:1 +水杨 1 +x:1 +父志 1 +x:1 +诺 9 +x:9 +清道夫 1 +x:1 +无线 1 +x:1 +福如东海 1 +x:1 +杂居 1 +x:1 +议事 1 +x:1 +萧条 1 +x:1 +生料 1 +x:1 +水暖 1 +x:1 +遗容 1 +x:1 +罪状 1 +x:1 +良善 1 +x:1 +太平门 1 +x:1 +毫不 1 +x:1 +栎 1 +x:1 +太平间 1 +x:1 +罪犯 1 +x:1 +厉庄镇 1 +x:1 +根本点 1 +x:1 +病休 1 +x:1 +收款 1 +x:1 +玩意儿 1 +x:1 +披头散发 1 +x:1 +畜种 1 +x:1 +牧归 1 +x:1 +会议室 1 +x:1 +日杂 1 +x:1 +总参 1 +x:1 +杀声 1 +x:1 +接办 1 +x:1 +接力 1 +x:1 +心上人 1 +x:1 +间日 1 +x:1 +在所不计 1 +x:1 +太阳岛 1 +x:1 +背带 1 +x:1 +日本 1 +x:1 +纳巴市 1 +x:1 +乐段 1 +x:1 +四合庄 1 +x:1 +民管 1 +x:1 +蓬窗 1 +x:1 +金达莱 1 +x:1 +爱将 1 +x:1 +盐都县 1 +x:1 +炮兵团 1 +x:1 +病体 1 +x:1 +下马威 1 +x:1 +投影城 1 +x:1 +时效处理 1 +x:1 +总厂 1 +x:1 +日期 1 +x:1 +街头 1 +x:1 +合作方 1 +x:1 +扶眉 1 +x:1 +接待厅 1 +x:1 +生日 1 +x:1 +流动房 1 +x:1 +议价 1 +x:1 +讲演 1 +x:1 +水星 1 +x:1 +星城村 1 +x:1 +病例 1 +x:1 +嫁妆 1 +x:1 +莘塍镇 1 +x:1 +被担保人 1 +x:1 +伍员山 1 +x:1 +沙丘 1 +x:1 +教坛 1 +x:1 +街委 1 +x:1 +强暴 1 +x:1 +杀出重围 1 +x:1 +接到 1 +x:1 +气功师 1 +x:1 +太平镇 1 +x:1 +散文热 1 +x:1 +经济学界 1 +x:1 +制药厂 1 +x:1 +箭头 1 +x:1 +缓兵之计 1 +x:1 +功架 1 +x:1 +散见 1 +x:1 +私密性 1 +x:1 +席 149 +x:149 +伐木工 1 +x:1 +柳体 1 +x:1 +收殓 1 +x:1 +阉割 1 +x:1 +酸菜 1 +x:1 +土伦 1 +x:1 +青幽幽 1 +x:1 +报废站 1 +x:1 +乐歌 1 +x:1 +以势压人 1 +x:1 +爱岗 1 +x:1 +汽车系 1 +x:1 +土体 1 +x:1 +发誓 1 +x:1 +东方学家 1 +x:1 +生效 1 +x:1 +一笑置之 1 +x:1 +昏头昏脑 1 +x:1 +团结一心 1 +x:1 +开花期 1 +x:1 +检察权 1 +x:1 +红彤彤 1 +x:1 +痛失 1 +x:1 +艺术科 1 +x:1 +水晶 1 +x:1 +暗乎乎 1 +x:1 +四步曲 1 +x:1 +可比性 1 +x:1 +逃离 1 +x:1 +水景 1 +x:1 +荷兰豆 1 +x:1 +同僚 1 +x:1 +歪歪斜斜 1 +x:1 +饭堂 1 +x:1 +路伊盟 1 +x:1 +石头城 1 +x:1 +赣剧 1 +x:1 +总参谋长 1 +x:1 +翔山 1 +x:1 +法术 1 +x:1 +攒 27 +x:27 +政绩 1 +x:1 +强攻 1 +x:1 +水文 1 +x:1 +填料 1 +x:1 +东瓦 1 +x:1 +枫桥镇 1 +x:1 +复苏 1 +x:1 +赠与 1 +x:1 +整饰 1 +x:1 +同化 1 +x:1 +整饬 1 +x:1 +酸枣树 1 +x:1 +小数点 1 +x:1 +嫁娶 1 +x:1 +填方 1 +x:1 +敲门 1 +x:1 +脑量 1 +x:1 +大兴县 1 +x:1 +讲法 1 +x:1 +赠书 1 +x:1 +秦陵 1 +x:1 +打交道 1 +x:1 +珉 6 +x:6 +政纲 1 +x:1 +扫黄打非 1 +x:1 +金碧路 1 +x:1 +水族 1 +x:1 +政纪 1 +x:1 +汉城 1 +x:1 +胡搅 1 +x:1 +戍边 1 +x:1 +强敌 1 +x:1 +钟意 1 +x:1 +金字塔式 1 +x:1 +雌蜂 1 +x:1 +收案 1 +x:1 +马蹄表 1 +x:1 +载货 1 +x:1 +各取所需 1 +x:1 +水旱 1 +x:1 +杀害 1 +x:1 +家里人 1 +x:1 +佶 1 +x:1 +采通科 1 +x:1 +粮食局 1 +x:1 +妄称 1 +x:1 +翩跹 1 +x:1 +凄美 1 +x:1 +校风 1 +x:1 +塑胶厂 1 +x:1 +近些年 1 +x:1 +颁发 1 +x:1 +教员 1 +x:1 +爱心 1 +x:1 +石头块 1 +x:1 +生意计 1 +x:1 +证券部 1 +x:1 +郭庄村 1 +x:1 +约稿信 1 +x:1 +喑哑 1 +x:1 +水政 1 +x:1 +可的松 1 +x:1 +偏颇 1 +x:1 +赠予 1 +x:1 +题名 1 +x:1 +昂贵 1 +x:1 +中餐 1 +x:1 +书房村 1 +x:1 +法规处 1 +x:1 +偏题 1 +x:1 +生长区 1 +x:1 +汉正街 1 +x:1 +耿 43 +x:43 +一决雌雄 1 +x:1 +对得起 1 +x:1 +笼络人心 1 +x:1 +爱徒 1 +x:1 +呼救器 1 +x:1 +接入 1 +x:1 +独立性 1 +x:1 +阴干 1 +x:1 +总值 1 +x:1 +选刊 1 +x:1 +无公害 1 +x:1 +同台 1 +x:1 +逃窜 1 +x:1 +报 858 +x:858 +大礼堂 1 +x:1 +置备 1 +x:1 +临立会 1 +x:1 +治保 1 +x:1 +新文学 1 +x:1 +捣碎 1 +x:1 +斜切 1 +x:1 +收棉 1 +x:1 +鱼网 1 +x:1 +偏食 1 +x:1 +铜线 1 +x:1 +突眼症 1 +x:1 +演练 1 +x:1 +纽约城 1 +x:1 +人名录 1 +x:1 +增长率 1 +x:1 +层流 1 +x:1 +明镜高悬 1 +x:1 +选取 1 +x:1 +长江头 1 +x:1 +刚直不阿 1 +x:1 +拖拉机 1 +x:1 +脑部 1 +x:1 +伏兵 1 +x:1 +虎虎生威 1 +x:1 +日数 1 +x:1 +功放 1 +x:1 +有志者 1 +x:1 +大锅水 1 +x:1 +保皇党 1 +x:1 +榆叶梅 1 +x:1 +橡皮图章 1 +x:1 +同心同力 1 +x:1 +中子谱 1 +x:1 +赣南 1 +x:1 +苏醒 1 +x:1 +诗界 1 +x:1 +王座 1 +x:1 +眉目 1 +x:1 +尼龙袋 1 +x:1 +灞河滩 1 +x:1 +工期 1 +x:1 +寂寞者 1 +x:1 +豆花儿 1 +x:1 +功效 1 +x:1 +醇美 1 +x:1 +张集 1 +x:1 +以苦为乐 1 +x:1 +叶斑病 1 +x:1 +专利费 1 +x:1 +名垂千古 1 +x:1 +流动性 1 +x:1 +石羊 1 +x:1 +间架 1 +x:1 +恪 1 +x:1 +该局 1 +x:1 +积 127 +x:127 +成熟论 1 +x:1 +硅藻 1 +x:1 +手写体 1 +x:1 +预收费 1 +x:1 +赣北 1 +x:1 +腊质膜 1 +x:1 +王府 1 +x:1 +跳伞塔 1 +x:1 +敏竹寺 1 +x:1 +总兵 1 +x:1 +酸臭 1 +x:1 +日日 1 +x:1 +红外线 1 +x:1 +学有所得 1 +x:1 +整风 1 +x:1 +塌陷 1 +x:1 +牧工 1 +x:1 +能否 1 +x:1 +伏击 1 +x:1 +王年 1 +x:1 +怒目圆睁 1 +x:1 +间杂 1 +x:1 +喜 190 +x:190 +联结端 1 +x:1 +坝顶 1 +x:1 +生机 1 +x:1 +为之动容 1 +x:1 +自流井 1 +x:1 +李大钊 1 +x:1 +一体性 1 +x:1 +随声附和 1 +x:1 +居然 1 +x:1 +存款额 1 +x:1 +炼钢厂 1 +x:1 +路易港 1 +x:1 +抗毁 1 +x:1 +凝聚 1 +x:1 +全景式 1 +x:1 +始祖马 1 +x:1 +州委 1 +x:1 +沙尘暴 1 +x:1 +教唆 1 +x:1 +太阳年 1 +x:1 +碎步子 1 +x:1 +今后 1 +x:1 +良性肿瘤 1 +x:1 +日方 1 +x:1 +硝烟滚滚 1 +x:1 +坚苦卓绝 1 +x:1 +散记 1 +x:1 +不在话下 1 +x:1 +黑糊糊 1 +x:1 +选区 1 +x:1 +动作 1 +x:1 +包扎带 1 +x:1 +战天斗地 1 +x:1 +日文 1 +x:1 +前堂 1 +x:1 +贫民窟 1 +x:1 +核资 1 +x:1 +老少咸宜 1 +x:1 +慢腾腾 1 +x:1 +显像仪 1 +x:1 +赤水河 1 +x:1 +余地 1 +x:1 +生来 1 +x:1 +惠州市 1 +x:1 +日斑 1 +x:1 +街容 1 +x:1 +未曾 1 +x:1 +邮袋 1 +x:1 +建管用 1 +x:1 +跃然纸上 1 +x:1 +掘进史 1 +x:1 +利欲 1 +x:1 +破天荒 1 +x:1 +紧压茶 1 +x:1 +广为流传 1 +x:1 +办公区 1 +x:1 +中上游 1 +x:1 +扶贫点 1 +x:1 +广学博采 1 +x:1 +围追 1 +x:1 +殷殷 1 +x:1 +支链 1 +x:1 +排爆 1 +x:1 +条绒 1 +x:1 +左右开弓 1 +x:1 +假造 1 +x:1 +充气垫 1 +x:1 +精邃 1 +x:1 +面包店 1 +x:1 +广东队 1 +x:1 +西柏林 1 +x:1 +蒙古包 1 +x:1 +食物 1 +x:1 +条约 1 +x:1 +悟偕 1 +x:1 +美艳者 1 +x:1 +线电压 1 +x:1 +修车房 1 +x:1 +加加林 1 +x:1 +过激 1 +x:1 +条纹 1 +x:1 +武清县 1 +x:1 +护肤油 1 +x:1 +武夷宫 1 +x:1 +磨米坊 1 +x:1 +粉碎毛 1 +x:1 +拳击赛 1 +x:1 +扬琴 1 +x:1 +采购员 1 +x:1 +品鉴 1 +x:1 +乘数 1 +x:1 +排版 1 +x:1 +睡乡 1 +x:1 +越瓜 1 +x:1 +通城 1 +x:1 +棒曲霉素 1 +x:1 +桑巴舞 1 +x:1 +贺岁片 1 +x:1 +工艺 1 +x:1 +排犹 1 +x:1 +新喜 1 +x:1 +盘扣服 1 +x:1 +纺织部 1 +x:1 +新喀 1 +x:1 +目不见睫 1 +x:1 +浏阳籍 1 +x:1 +恋家 1 +x:1 +柿子椒 1 +x:1 +年集 1 +x:1 +茶点 1 +x:1 +码头区 1 +x:1 +土霉素 1 +x:1 +辛劳 1 +x:1 +除非 1 +x:1 +面包师 1 +x:1 +一家人 1 +x:1 +办公厅 1 +x:1 +存养 1 +x:1 +岁秩 1 +x:1 +茶炉 1 +x:1 +尽情 1 +x:1 +精选 1 +x:1 +农机系 1 +x:1 +富裕 1 +x:1 +强盗窝 1 +x:1 +培土 1 +x:1 +精透 1 +x:1 +厘米 1 +x:1 +贺年片 1 +x:1 +灌溉区 1 +x:1 +人潮 1 +x:1 +集贸 1 +x:1 +造 198 +x:198 +零基预算 1 +x:1 +洗手 1 +x:1 +乒乓球拍 1 +x:1 +委培生 1 +x:1 +渭源 1 +x:1 +体改委 1 +x:1 +病虫草害 1 +x:1 +透光 1 +x:1 +检测费 1 +x:1 +猎具 1 +x:1 +援手 1 +x:1 +热轧 1 +x:1 +金台路 1 +x:1 +优良率 1 +x:1 +精道 1 +x:1 +四氯化碳 1 +x:1 +山城堡 1 +x:1 +点点滴滴 1 +x:1 +辛勤 1 +x:1 +机会主义 1 +x:1 +俱全 1 +x:1 +染汁 1 +x:1 +银边席 1 +x:1 +踏青节 1 +x:1 +防御战 1 +x:1 +租车费 1 +x:1 +扬长而去 1 +x:1 +多维性 1 +x:1 +眩目 1 +x:1 +康采恩 1 +x:1 +政研处 1 +x:1 +涝河桥村 1 +x:1 +相知 1 +x:1 +审计费 1 +x:1 +龅牙 1 +x:1 +馅儿饼 1 +x:1 +异香 1 +x:1 +空当子 1 +x:1 +受惠额 1 +x:1 +出借方 1 +x:1 +同室操戈 1 +x:1 +热身 1 +x:1 +榄球赛 1 +x:1 +无题 1 +x:1 +娃娃书 1 +x:1 +人源 1 +x:1 +入境者 1 +x:1 +溶剂 1 +x:1 +干预性 1 +x:1 +铜矿村 1 +x:1 +窥寻 1 +x:1 +桃花鱼 1 +x:1 +七八点 1 +x:1 +蘖枝 1 +x:1 +土山村 1 +x:1 +见异思迁 1 +x:1 +未果 1 +x:1 +叙事性 1 +x:1 +袋花 1 +x:1 +透视图 1 +x:1 +套房率 1 +x:1 +澎湃 1 +x:1 +礼林镇 1 +x:1 +厚礼 1 +x:1 +胆管 1 +x:1 +过滤 1 +x:1 +精量 1 +x:1 +尽意 1 +x:1 +早期白话 1 +x:1 +澎湖 1 +x:1 +任命书 1 +x:1 +象征性 1 +x:1 +企求 1 +x:1 +舰队团 1 +x:1 +琉球王国 1 +x:1 +健力宝队 1 +x:1 +瘦子 1 +x:1 +中书舍人 1 +x:1 +亩产量 1 +x:1 +未来 1 +x:1 +社区 1 +x:1 +贻害无穷 1 +x:1 +暴躁 1 +x:1 +厚积 1 +x:1 +新鲜菜 1 +x:1 +无稽之谈 1 +x:1 +骗局 1 +x:1 +森严壁垒 1 +x:1 +术 16 +x:16 +石油界 1 +x:1 +天意 1 +x:1 +费话 1 +x:1 +襟泪 1 +x:1 +过渡 1 +x:1 +大展宏图 1 +x:1 +谋略家 1 +x:1 +重合 1 +x:1 +矮凳 1 +x:1 +渔码头 1 +x:1 +从头到尾 1 +x:1 +美誉 1 +x:1 +下苦功 1 +x:1 +洋洋大观 1 +x:1 +塑 22 +x:22 +灾害性 1 +x:1 +务实性 1 +x:1 +鬼鬼祟祟 1 +x:1 +无须 1 +x:1 +假释 1 +x:1 +蓊郁郁 1 +x:1 +榜样 1 +x:1 +提炼厂 1 +x:1 +寻甸县 1 +x:1 +粘力 1 +x:1 +呕血 1 +x:1 +未有 1 +x:1 +锦州湾 1 +x:1 +返校 1 +x:1 +增产 1 +x:1 +潜绩 1 +x:1 +形神妙肖 1 +x:1 +洪都拉斯 1 +x:1 +太湖石 1 +x:1 +人人自危 1 +x:1 +携带 1 +x:1 +品透 1 +x:1 +海洋馆 1 +x:1 +思来想去 1 +x:1 +韶山 1 +x:1 +鄙吝 1 +x:1 +罗网 1 +x:1 +生理学家 1 +x:1 +情报学 1 +x:1 +骄奢淫逸 1 +x:1 +凤阳县 1 +x:1 +受害人 1 +x:1 +拳谱 1 +x:1 +万贯家财 1 +x:1 +声波 1 +x:1 +买官者 1 +x:1 +竞赛场 1 +x:1 +护法 1 +x:1 +克比里省 1 +x:1 +游牧民 1 +x:1 +求者 1 +x:1 +万箭穿心 1 +x:1 +排灰 1 +x:1 +说情风 1 +x:1 +一言一行 1 +x:1 +泰安市 1 +x:1 +稚气可掬 1 +x:1 +雄心勃勃 1 +x:1 +伤残费 1 +x:1 +护沿 1 +x:1 +廓 1 +x:1 +学历 1 +x:1 +滩海 1 +x:1 +白令海 1 +x:1 +收购点 1 +x:1 +以讹传讹 1 +x:1 +窝囊 1 +x:1 +每每 1 +x:1 +胆碱 1 +x:1 +上移 1 +x:1 +车船税 1 +x:1 +子龟 1 +x:1 +展开 1 +x:1 +渭水 1 +x:1 +碰锁 1 +x:1 +偏护 1 +x:1 +排灌 1 +x:1 +四顾无人 1 +x:1 +神创论 1 +x:1 +猎取 1 +x:1 +手急眼快 1 +x:1 +众所周知 1 +x:1 +检测车 1 +x:1 +雁北 1 +x:1 +芽白 1 +x:1 +地空导弹 1 +x:1 +常规武器 1 +x:1 +滇东 1 +x:1 +每次 1 +x:1 +翠柏 1 +x:1 +笑 373 +x:373 +旗子 1 +x:1 +新型 1 +x:1 +排炮 1 +x:1 +泥石 1 +x:1 +龙头乡 1 +x:1 +建筑学家 1 +x:1 +康家沟 1 +x:1 +顺手 1 +x:1 +聪明人 1 +x:1 +鸽食 1 +x:1 +过活 1 +x:1 +七星拳 1 +x:1 +消化力 1 +x:1 +基藏库 1 +x:1 +一团漆黑 1 +x:1 +以史为鉴 1 +x:1 +郭洼 1 +x:1 +流落江湖 1 +x:1 +防御性 1 +x:1 +声气 1 +x:1 +径情直遂 1 +x:1 +偏振光 1 +x:1 +支队 1 +x:1 +接收站 1 +x:1 +渗透量 1 +x:1 +封建主 1 +x:1 +察看 1 +x:1 +人海 1 +x:1 +新城 1 +x:1 +饼干桶 1 +x:1 +活期 1 +x:1 +维持费 1 +x:1 +进益 1 +x:1 +渭河 1 +x:1 +乌贼鱼 1 +x:1 +文物量 1 +x:1 +价格关 1 +x:1 +舍本逐末 1 +x:1 +贯串 1 +x:1 +怯弱 1 +x:1 +北吴村 1 +x:1 +推导 1 +x:1 +播种 1 +x:1 +狂飙运动 1 +x:1 +丧心语 1 +x:1 +侧吹 1 +x:1 +狂欢节 1 +x:1 +珍贵 1 +x:1 +北爱尔兰 1 +x:1 +永久化 1 +x:1 +照说 1 +x:1 +人治 1 +x:1 +求富者 1 +x:1 +壮伟 1 +x:1 +涉温泉 1 +x:1 +趟 100 +x:100 +登陆点 1 +x:1 +年长 1 +x:1 +泼水花 1 +x:1 +缨 3 +x:3 +求之不得 1 +x:1 +催逼 1 +x:1 +广汉市 1 +x:1 +由来 1 +x:1 +燕莎桥 1 +x:1 +堤塘 1 +x:1 +金华县 1 +x:1 +侧后 1 +x:1 +任意球 1 +x:1 +迢遥 1 +x:1 +过法 1 +x:1 +眼跳 1 +x:1 +转产 1 +x:1 +岩峰 1 +x:1 +越剧团 1 +x:1 +苏里南 1 +x:1 +柜员制 1 +x:1 +广角镜 1 +x:1 +品酒 1 +x:1 +华表 1 +x:1 +万舍村 1 +x:1 +优惠证 1 +x:1 +矮化 1 +x:1 +闻香杯 1 +x:1 +评审团 1 +x:1 +几经 1 +x:1 +考场 1 +x:1 +学武 1 +x:1 +主客场制 1 +x:1 +罗织 1 +x:1 +索本求源 1 +x:1 +藩国 1 +x:1 +聋哑学校 1 +x:1 +句句 1 +x:1 +伪中队长 1 +x:1 +明明白白 1 +x:1 +天兵天将 1 +x:1 +爬虫 1 +x:1 +灵光 1 +x:1 +卷儿 1 +x:1 +僵滞 1 +x:1 +北门东 1 +x:1 +句号 1 +x:1 +娄底 1 +x:1 +狗吃屎 1 +x:1 +莫沙夫 1 +x:1 +制盐 1 +x:1 +一清二楚 1 +x:1 +人氏 1 +x:1 +有理无情 1 +x:1 +猎刀 1 +x:1 +推子 1 +x:1 +中关工委 1 +x:1 +菜团子 1 +x:1 +斑秃 1 +x:1 +司法权 1 +x:1 +人气 1 +x:1 +八卦三路 1 +x:1 +拉丁文 1 +x:1 +魏碑 1 +x:1 +水磨沟 1 +x:1 +膑足 1 +x:1 +领花 1 +x:1 +义 104 +x:104 +荷尔蒙 1 +x:1 +玻方 1 +x:1 +投资方 1 +x:1 +发表期 1 +x:1 +乾坤袋 1 +x:1 +子鸡 1 +x:1 +头颈部 1 +x:1 +贯众 1 +x:1 +脏兮兮 1 +x:1 +采血车 1 +x:1 +汽技改 1 +x:1 +沉心静气 1 +x:1 +望果节 1 +x:1 +睡魔 1 +x:1 +疼痛 1 +x:1 +郇封村 1 +x:1 +送电 1 +x:1 +罗纱 1 +x:1 +耐药性 1 +x:1 +掳掠 1 +x:1 +罗纹 1 +x:1 +上付村 1 +x:1 +三高 1 +x:1 +疼爱 1 +x:1 +菱香 1 +x:1 +泥煤 1 +x:1 +富豪 1 +x:1 +办公地 1 +x:1 +分行业 1 +x:1 +使团 1 +x:1 +前所未见 1 +x:1 +老少皆知 1 +x:1 +合同化 1 +x:1 +奥迪车 1 +x:1 +千吨级 1 +x:1 +锦州 1 +x:1 +梳理 1 +x:1 +就此 1 +x:1 +持久性 1 +x:1 +悲剧性 1 +x:1 +疑义 1 +x:1 +逸 17 +x:17 +播绿 1 +x:1 +丹青 1 +x:1 +丁香花 1 +x:1 +芫荽 1 +x:1 +岩寺 1 +x:1 +菅 1 +x:1 +集大成者 1 +x:1 +生石膏 1 +x:1 +新党 1 +x:1 +出果期 1 +x:1 +金刚石 1 +x:1 +特优卡 1 +x:1 +首创者 1 +x:1 +新建县 1 +x:1 +侧卧 1 +x:1 +新元 1 +x:1 +此前 1 +x:1 +得体 1 +x:1 +跻入 1 +x:1 +古兰经 1 +x:1 +抗敌 1 +x:1 +山禾队 1 +x:1 +热诚 1 +x:1 +停驶 1 +x:1 +人母 1 +x:1 +黄腊石 1 +x:1 +新兴 1 +x:1 +新兵 1 +x:1 +母丁香 1 +x:1 +长白猪 1 +x:1 +鲁鱼帝虎 1 +x:1 +没得说 1 +x:1 +支那 1 +x:1 +汽修点 1 +x:1 +亲如兄弟 1 +x:1 +染棍 1 +x:1 +灸 1 +x:1 +考古系 1 +x:1 +检举 1 +x:1 +年富力强 1 +x:1 +邮电部 1 +x:1 +统一体 1 +x:1 +假钞 1 +x:1 +趾头 1 +x:1 +人次 1 +x:1 +道不明 1 +x:1 +戚墅堰 1 +x:1 +徒 26 +x:26 +来日无多 1 +x:1 +首饰厂 1 +x:1 +不能自己 1 +x:1 +不能自已 1 +x:1 +卡拉OK 1 +x:1 +人欲 1 +x:1 +乱云飞渡 1 +x:1 +银行方 1 +x:1 +综放 1 +x:1 +冰球界 1 +x:1 +伤残证 1 +x:1 +正切 1 +x:1 +流石滩 1 +x:1 +桐柏县 1 +x:1 +混合式 1 +x:1 +收容 1 +x:1 +站柜台 1 +x:1 +大步流星 1 +x:1 +人武 1 +x:1 +巍峨 1 +x:1 +小熊座 1 +x:1 +不同寻常 1 +x:1 +精气神 1 +x:1 +相爱 1 +x:1 +母怀 1 +x:1 +疑云 1 +x:1 +铠 1 +x:1 +饭碗子 1 +x:1 +天祥楼 1 +x:1 +左 385 +x:385 +主角奖 1 +x:1 +出尘脱俗 1 +x:1 +走马赴任 1 +x:1 +市盈率 1 +x:1 +县市 1 +x:1 +损失费 1 +x:1 +认识者 1 +x:1 +应激反应 1 +x:1 +五里亭 1 +x:1 +牧业税 1 +x:1 +房地产 1 +x:1 +自然灾害 1 +x:1 +尽数 1 +x:1 +复合式 1 +x:1 +猪羊肉 1 +x:1 +合同制 1 +x:1 +化妆室 1 +x:1 +磷肥 1 +x:1 +阳平关 1 +x:1 +悲剧感 1 +x:1 +摔跤赛 1 +x:1 +羊栏镇 1 +x:1 +玉池乡 1 +x:1 +小港村 1 +x:1 +顺时 1 +x:1 +疾患 1 +x:1 +重量级 1 +x:1 +声母 1 +x:1 +之类 1 +x:1 +健身热 1 +x:1 +考入 1 +x:1 +蒸锅 1 +x:1 +订单 1 +x:1 +模范村 1 +x:1 +指挥车 1 +x:1 +侦探片 1 +x:1 +得主 1 +x:1 +情报局 1 +x:1 +笋鸡 1 +x:1 +原料处 1 +x:1 +利湿 1 +x:1 +军工部 1 +x:1 +爹爹 1 +x:1 +漪汾苑 1 +x:1 +富贵 1 +x:1 +洗染 1 +x:1 +铜仁 1 +x:1 +富贾 1 +x:1 +反潮流 1 +x:1 +丹阳 1 +x:1 +拒之门外 1 +x:1 +彭水县 1 +x:1 +铜价 1 +x:1 +补袜板 1 +x:1 +兵连祸结 1 +x:1 +邮路 1 +x:1 +俯卧 1 +x:1 +展示台 1 +x:1 +相率 1 +x:1 +恰逢 1 +x:1 +晴纶 1 +x:1 +摊贩 1 +x:1 +正月十五 1 +x:1 +盗卖者 1 +x:1 +得了 1 +x:1 +支配 1 +x:1 +随葬 1 +x:1 +修造船 1 +x:1 +童子痨 1 +x:1 +创新性 1 +x:1 +有限 1 +x:1 +铜丝 1 +x:1 +下世纪 1 +x:1 +指挥连 1 +x:1 +尽日 1 +x:1 +繁琐 1 +x:1 +瀛州 1 +x:1 +携妻 1 +x:1 +尼日尔州 1 +x:1 +顺数 1 +x:1 +和蔼 1 +x:1 +超过者 1 +x:1 +农函大 1 +x:1 +伪气功 1 +x:1 +邮购 1 +x:1 +蘑菇战术 1 +x:1 +精锐 1 +x:1 +营业局 1 +x:1 +濮阳市 1 +x:1 +代远年湮 1 +x:1 +检修 1 +x:1 +文凭者 1 +x:1 +抽抽 1 +x:1 +砚池河 1 +x:1 +旗山 1 +x:1 +高寒区 1 +x:1 +新四军 1 +x:1 +锦屏 1 +x:1 +泥炭 1 +x:1 +衰颓 1 +x:1 +生命学 1 +x:1 +营养型 1 +x:1 +没你好 1 +x:1 +邮资 1 +x:1 +泥点 1 +x:1 +富足 1 +x:1 +远 626 +x:626 +我国 1 +x:1 +正月十七 1 +x:1 +得以 1 +x:1 +电解盐 1 +x:1 +巍巍 1 +x:1 +鉴定机 1 +x:1 +千叮咛 1 +x:1 +验光 1 +x:1 +芫花 1 +x:1 +青州市 1 +x:1 +空空落落 1 +x:1 +参茸 1 +x:1 +推崇 1 +x:1 +台州市 1 +x:1 +新化 1 +x:1 +考前 1 +x:1 +京剧团 1 +x:1 +持久战 1 +x:1 +悔罪 1 +x:1 +下汤镇 1 +x:1 +文博院 1 +x:1 +同 4312 +x:4312 +严防 1 +x:1 +夏商周 1 +x:1 +按扣儿 1 +x:1 +三风 1 +x:1 +苦功 1 +x:1 +围观 1 +x:1 +恼恨 1 +x:1 +作废 1 +x:1 +新区 1 +x:1 +漂亮 1 +x:1 +戏剧家 1 +x:1 +排球 1 +x:1 +竞赛区 1 +x:1 +惯子 1 +x:1 +民资 1 +x:1 +溶化 1 +x:1 +此起彼伏 1 +x:1 +考分 1 +x:1 +食不甘味 1 +x:1 +观者如堵 1 +x:1 +柔软剂 1 +x:1 +柜组 1 +x:1 +投资性 1 +x:1 +苦涩 1 +x:1 +言喻 1 +x:1 +泥猴 1 +x:1 +新华 1 +x:1 +傻笑 1 +x:1 +参议员 1 +x:1 +恼怒 1 +x:1 +参股 1 +x:1 +要子 1 +x:1 +停顿 1 +x:1 +斯文扫地 1 +x:1 +安享晚年 1 +x:1 +扪心自问 1 +x:1 +眼裂 1 +x:1 +猥辞 1 +x:1 +构配件 1 +x:1 +金字塔 1 +x:1 +景德镇市 1 +x:1 +顺景 1 +x:1 +推广 1 +x:1 +走檐飞翘 1 +x:1 +生存者 1 +x:1 +中腹之战 1 +x:1 +农机站 1 +x:1 +猎场 1 +x:1 +闻所未闻 1 +x:1 +颔 2 +x:2 +塑钢门 1 +x:1 +存贮器 1 +x:1 +丛 39 +x:39 +高粱米 1 +x:1 +羁押室 1 +x:1 +利润 1 +x:1 +膝头 1 +x:1 +判断 1 +x:1 +电视剧部 1 +x:1 +新县 1 +x:1 +考勤 1 +x:1 +画虎类狗 1 +x:1 +司法所 1 +x:1 +俱在 1 +x:1 +活捉 1 +x:1 +倒伏 1 +x:1 +宴会席 1 +x:1 +演说 1 +x:1 +荷兰 1 +x:1 +保证卡 1 +x:1 +鼻韵母 1 +x:1 +粪便 1 +x:1 +参考 1 +x:1 +墨西哥州 1 +x:1 +脑贫血 1 +x:1 +侧击 1 +x:1 +走走 1 +x:1 +民贼 1 +x:1 +培养 1 +x:1 +响头 1 +x:1 +无头表 1 +x:1 +决策制 1 +x:1 +苘 1 +x:1 +著名者 1 +x:1 +驮戥村 1 +x:1 +条码 1 +x:1 +护栏 1 +x:1 +木栏 1 +x:1 +茶盅 1 +x:1 +历演不衰 1 +x:1 +修道院 1 +x:1 +平林镇 1 +x:1 +熔岩 1 +x:1 +画廊 1 +x:1 +茶盘 1 +x:1 +护树 1 +x:1 +三趾马 1 +x:1 +潜研 1 +x:1 +人梯 1 +x:1 +月城 1 +x:1 +试行期 1 +x:1 +围裙 1 +x:1 +盟委 1 +x:1 +羊三木 1 +x:1 +过梁 1 +x:1 +复眼 1 +x:1 +新刊 1 +x:1 +比翼鸟 1 +x:1 +利民 1 +x:1 +电器行 1 +x:1 +千金一掷 1 +x:1 +连城村 1 +x:1 +电器街 1 +x:1 +流泪 1 +x:1 +蒸霞 1 +x:1 +锥度 1 +x:1 +传销业 1 +x:1 +考卷 1 +x:1 +防伪 1 +x:1 +恐吓信 1 +x:1 +徐公祠 1 +x:1 +外联处 1 +x:1 +的确良 1 +x:1 +竹节石 1 +x:1 +减 348 +x:348 +怡情养性 1 +x:1 +暴行 1 +x:1 +激流勇进 1 +x:1 +庄浪县 1 +x:1 +嘈杂 1 +x:1 +繁盛 1 +x:1 +眼角 1 +x:1 +有钱 1 +x:1 +染毒 1 +x:1 +尽期 1 +x:1 +草签 1 +x:1 +扑空 1 +x:1 +私娼 1 +x:1 +考区 1 +x:1 +天一阁 1 +x:1 +新剧 1 +x:1 +茅坑 1 +x:1 +眼见 1 +x:1 +还价 1 +x:1 +邮迷 1 +x:1 +议事组 1 +x:1 +说长道短 1 +x:1 +拼死一搏 1 +x:1 +全方位 1 +x:1 +年金 1 +x:1 +铜钱眼 1 +x:1 +争名谋位 1 +x:1 +草台岗 1 +x:1 +天下无双 1 +x:1 +人样 1 +x:1 +考取 1 +x:1 +物理诊断 1 +x:1 +中短波 1 +x:1 +长野县 1 +x:1 +丹铁 1 +x:1 +考古 1 +x:1 +围衬 1 +x:1 +核磁共振 1 +x:1 +伙伴 1 +x:1 +检疫场 1 +x:1 +序幕 1 +x:1 +宁安乡 1 +x:1 +武夷山 1 +x:1 +疳疮 1 +x:1 +上次 1 +x:1 +推弹 1 +x:1 +倒买 1 +x:1 +规例 1 +x:1 +遇见 1 +x:1 +靠边站 1 +x:1 +传销价 1 +x:1 +免烧砖 1 +x:1 +堤岸 1 +x:1 +作风 1 +x:1 +亚候鸟 1 +x:1 +旗帜 1 +x:1 +珠唇 1 +x:1 +兰特 1 +x:1 +珍视 1 +x:1 +棉衣被 1 +x:1 +电击 1 +x:1 +句型 1 +x:1 +母子公司 1 +x:1 +还乡 1 +x:1 +鼓翼欲飞 1 +x:1 +股交所 1 +x:1 +热衷 1 +x:1 +未愈 1 +x:1 +掀起 1 +x:1 +叶猴 1 +x:1 +推开 1 +x:1 +行车执照 1 +x:1 +防线 1 +x:1 +光盘厂 1 +x:1 +送终 1 +x:1 +探险 1 +x:1 +条目 1 +x:1 +发动机盖 1 +x:1 +申城 1 +x:1 +纯化 1 +x:1 +送给 1 +x:1 +官风 1 +x:1 +美术字 1 +x:1 +茨城县 1 +x:1 +家常饭 1 +x:1 +盟国 1 +x:1 +阿达纳市 1 +x:1 +机理 1 +x:1 +敦劝 1 +x:1 +测量学 1 +x:1 +捅娄子 1 +x:1 +茶砖 1 +x:1 +大花脸 1 +x:1 +堤南 1 +x:1 +个私 1 +x:1 +丝柏 1 +x:1 +铣床 1 +x:1 +乡镇级 1 +x:1 +相约 1 +x:1 +老二 1 +x:1 +斯托蒙特 1 +x:1 +宣誓 1 +x:1 +大浪淘沙 1 +x:1 +锅烟子 1 +x:1 +老五 1 +x:1 +智人 1 +x:1 +扭转乾坤 1 +x:1 +供给者 1 +x:1 +洗洗涮涮 1 +x:1 +富者 1 +x:1 +满目生辉 1 +x:1 +代办所 1 +x:1 +三难 1 +x:1 +周 4623 +x:4623 +指挥船 1 +x:1 +无量 1 +x:1 +钟山 1 +x:1 +忙而不乱 1 +x:1 +参政员 1 +x:1 +老亲 1 +x:1 +不致于 1 +x:1 +目不忍睹 1 +x:1 +罗田 1 +x:1 +红种人 1 +x:1 +老人 1 +x:1 +亡羊补牢 1 +x:1 +罗甸 1 +x:1 +人本 1 +x:1 +雅砻江 1 +x:1 +当年度 1 +x:1 +岩场 1 +x:1 +办公室 1 +x:1 +豪放者 1 +x:1 +过期 1 +x:1 +入网证 1 +x:1 +入盟期 1 +x:1 +预调 1 +x:1 +茶碱 1 +x:1 +探雷 1 +x:1 +千代田区 1 +x:1 +人机 1 +x:1 +东街村 1 +x:1 +老九 1 +x:1 +窥到 1 +x:1 +验尸 1 +x:1 +报审制 1 +x:1 +老乡 1 +x:1 +扳机 1 +x:1 +移民局长 1 +x:1 +紧凑型 1 +x:1 +岩土 1 +x:1 +西峡县 1 +x:1 +决策层 1 +x:1 +通俗性 1 +x:1 +利己 1 +x:1 +诗话 1 +x:1 +三陪 1 +x:1 +人望 1 +x:1 +防汛办 1 +x:1 +撼人心魄 1 +x:1 +百分之 1 +x:1 +不痛不痒 1 +x:1 +茶碟 1 +x:1 +定规 1 +x:1 +艇 26 +x:26 +罗庄镇 1 +x:1 +老三 1 +x:1 +新州 1 +x:1 +压制型 1 +x:1 +矮墙 1 +x:1 +团团转 1 +x:1 +点源 1 +x:1 +未央宫 1 +x:1 +人杰 1 +x:1 +主体论 1 +x:1 +苟刻 1 +x:1 +悔过自新 1 +x:1 +淝河 1 +x:1 +推倒 1 +x:1 +老三样 1 +x:1 +岩块 1 +x:1 +猎奇 1 +x:1 +清香味 1 +x:1 +新巧 1 +x:1 +智业 1 +x:1 +惜墨如金 1 +x:1 +企改 1 +x:1 +美术家 1 +x:1 +人材 1 +x:1 +大彰山 1 +x:1 +推出 1 +x:1 +森林法 1 +x:1 +芳草地 1 +x:1 +农机界 1 +x:1 +唇枪舌剑 1 +x:1 +话筒 1 +x:1 +苟取 1 +x:1 +练习曲 1 +x:1 +没齿不忘 1 +x:1 +分光镜 1 +x:1 +活泼 1 +x:1 +条石 1 +x:1 +五指山 1 +x:1 +犁牛 1 +x:1 +勺海 1 +x:1 +轴径 1 +x:1 +捞油水 1 +x:1 +排笔 1 +x:1 +染料 1 +x:1 +覆盖率 1 +x:1 +D 131 +x:131 +活法 1 +x:1 +藩属 1 +x:1 +敦厚 1 +x:1 +更有甚者 1 +x:1 +中央台 1 +x:1 +精馏 1 +x:1 +刚构桥 1 +x:1 +伦理学家 1 +x:1 +残垣断壁 1 +x:1 +老例 1 +x:1 +暴虐 1 +x:1 +蒸饺 1 +x:1 +一筹莫展 1 +x:1 +骄矜 1 +x:1 +水星队 1 +x:1 +蒸饼 1 +x:1 +新居 1 +x:1 +定见 1 +x:1 +不问自明 1 +x:1 +董事长 1 +x:1 +产销率 1 +x:1 +相通 1 +x:1 +日历表 1 +x:1 +新山 1 +x:1 +彤 33 +x:33 +踅子 1 +x:1 +助阵 1 +x:1 +国有民助 1 +x:1 +窝工 1 +x:1 +规约 1 +x:1 +拢子 1 +x:1 +停靠 1 +x:1 +窝巢 1 +x:1 +护林 1 +x:1 +排筏 1 +x:1 +作陪 1 +x:1 +五味子 1 +x:1 +登陆站 1 +x:1 +影响力 1 +x:1 +小商品 1 +x:1 +替人 1 +x:1 +耀目 1 +x:1 +人心向背 1 +x:1 +求诊 1 +x:1 +菲方 1 +x:1 +凝视 1 +x:1 +白莲教 1 +x:1 +钦南区 1 +x:1 +众生 1 +x:1 +叮 5 +x:5 +排箫 1 +x:1 +随行 1 +x:1 +见报 1 +x:1 +浇筑 1 +x:1 +穷当益坚 1 +x:1 +棺木 1 +x:1 +椰岛 1 +x:1 +傻瓜 1 +x:1 +不负重望 1 +x:1 +刻刀 1 +x:1 +非离子氨 1 +x:1 +植保站 1 +x:1 +酒绿灯红 1 +x:1 +限产保价 1 +x:1 +完备化 1 +x:1 +航站楼 1 +x:1 +稀土元素 1 +x:1 +赃 1 +x:1 +德国式 1 +x:1 +沙溪桥 1 +x:1 +活水 1 +x:1 +光秃秃 1 +x:1 +粱洼镇 1 +x:1 +老吾老 1 +x:1 +部省级 1 +x:1 +魏善庄乡 1 +x:1 +预赛 1 +x:1 +潦倒终身 1 +x:1 +年龄 1 +x:1 +鲲鹏 1 +x:1 +替代 1 +x:1 +防雹网 1 +x:1 +前邵村 1 +x:1 +编目卡 1 +x:1 +活气 1 +x:1 +实践性 1 +x:1 +吹奏者 1 +x:1 +蜂巢胃 1 +x:1 +老伯 1 +x:1 +接送车 1 +x:1 +黄潭村 1 +x:1 +舌苔 1 +x:1 +耳针 1 +x:1 +无遗 1 +x:1 +整流 1 +x:1 +绺 2 +x:2 +南池子 1 +x:1 +谋略史 1 +x:1 +时新日异 1 +x:1 +子音 1 +x:1 +圣意 1 +x:1 +茆 1 +x:1 +就教 1 +x:1 +棠梨 1 +x:1 +杀回马枪 1 +x:1 +拉锁 1 +x:1 +雄姿英发 1 +x:1 +新异 1 +x:1 +首倡国 1 +x:1 +西侧 1 +x:1 +混成旅 1 +x:1 +四国岛 1 +x:1 +鞣制 1 +x:1 +派遣 1 +x:1 +办公处 1 +x:1 +罗河镇 1 +x:1 +要路 1 +x:1 +真才实学 1 +x:1 +人文 1 +x:1 +家用电器 1 +x:1 +旗号 1 +x:1 +内格夫 1 +x:1 +雀鹰 1 +x:1 +笔底下 1 +x:1 +拟 129 +x:129 +羹 2 +x:2 +邮花 1 +x:1 +碱渣堆场 1 +x:1 +棠棣 1 +x:1 +周村区 1 +x:1 +紫穗槐 1 +x:1 +捆 47 +x:47 +美术处 1 +x:1 +凤尾鱼 1 +x:1 +著称 1 +x:1 +养儿防老 1 +x:1 +四星级 1 +x:1 +傻眼 1 +x:1 +甜面酱 1 +x:1 +推动 1 +x:1 +腊味店 1 +x:1 +二三月份 1 +x:1 +切题 1 +x:1 +奶羊 1 +x:1 +推力 1 +x:1 +新影 1 +x:1 +贯家堡村 1 +x:1 +组阁权 1 +x:1 +精髓 1 +x:1 +渌头江 1 +x:1 +送粮 1 +x:1 +收回率 1 +x:1 +临漳县 1 +x:1 +低平 1 +x:1 +滑降 1 +x:1 +厚爱 1 +x:1 +过早 1 +x:1 +勤政者 1 +x:1 +丁丑年 1 +x:1 +心结 1 +x:1 +盟员 1 +x:1 +修脚 1 +x:1 +法定人数 1 +x:1 +灰霉病 1 +x:1 +西游记宫 1 +x:1 +徐娘半老 1 +x:1 +保坪乡 1 +x:1 +七拼八凑 1 +x:1 +斯威士兰 1 +x:1 +展性 1 +x:1 +前廊 1 +x:1 +菽栗 1 +x:1 +尾闸乡 1 +x:1 +通信部 1 +x:1 +戏剧场 1 +x:1 +工矿业 1 +x:1 +笃信 1 +x:1 +巡特警 1 +x:1 +潮汐能 1 +x:1 +邮船 1 +x:1 +皮帽子 1 +x:1 +推前 1 +x:1 +常抓不懈 1 +x:1 +同乐日 1 +x:1 +别具匠心 1 +x:1 +印辙 1 +x:1 +旱烟 1 +x:1 +双低型 1 +x:1 +飞船 1 +x:1 +双学位 1 +x:1 +儿童节 1 +x:1 +放射性束 1 +x:1 +掘进头 1 +x:1 +参谋 1 +x:1 +黄委会 1 +x:1 +定居证 1 +x:1 +相簿 1 +x:1 +过敏 1 +x:1 +一语破的 1 +x:1 +企望 1 +x:1 +滑雪 1 +x:1 +人数 1 +x:1 +大使级 1 +x:1 +柞绸 1 +x:1 +雀麦 1 +x:1 +锦化 1 +x:1 +条理 1 +x:1 +孢子粉 1 +x:1 +罗浮宫 1 +x:1 +探针 1 +x:1 +单体 1 +x:1 +濮 8 +x:8 +单位 1 +x:1 +哑铃 1 +x:1 +人教 1 +x:1 +武官处 1 +x:1 +太阴历 1 +x:1 +体改司 1 +x:1 +阵亡 1 +x:1 +安隆汶 1 +x:1 +阳曲 1 +x:1 +西人 1 +x:1 +浪人 1 +x:1 +单人 1 +x:1 +该组 1 +x:1 +较重者 1 +x:1 +桐柏山 1 +x:1 +阵位 1 +x:1 +声旁 1 +x:1 +宴会厅 1 +x:1 +金桔 1 +x:1 +拉坎多纳 1 +x:1 +扬名天下 1 +x:1 +单产 1 +x:1 +笺谱 1 +x:1 +轴承 1 +x:1 +辛夷 1 +x:1 +西亚 1 +x:1 +媳妇儿 1 +x:1 +押款箱 1 +x:1 +单井 1 +x:1 +缴获 1 +x:1 +青山常在 1 +x:1 +火柴盒式 1 +x:1 +吹牛 1 +x:1 +推及 1 +x:1 +三门 1 +x:1 +子集 1 +x:1 +分则 1 +x:1 +尺 62 +x:62 +句子 1 +x:1 +人墙 1 +x:1 +面面俱到 1 +x:1 +阿特拉 1 +x:1 +擦黑 1 +x:1 +单价 1 +x:1 +空当儿 1 +x:1 +艰难困苦 1 +x:1 +寻呼 1 +x:1 +钠玻璃 1 +x:1 +亲和力 1 +x:1 +虞 24 +x:24 +新平 1 +x:1 +基本性 1 +x:1 +活源 1 +x:1 +音信全无 1 +x:1 +委靡不振 1 +x:1 +新年 1 +x:1 +矾土 1 +x:1 +乘胜追击 1 +x:1 +坚持者 1 +x:1 +品饮 1 +x:1 +大腿骨 1 +x:1 +气派 1 +x:1 +心急如火 1 +x:1 +场边 1 +x:1 +爱面子 1 +x:1 +推卸 1 +x:1 +求见 1 +x:1 +血气胸 1 +x:1 +参赌 1 +x:1 +探问 1 +x:1 +京剧学 1 +x:1 +推却 1 +x:1 +西丰 1 +x:1 +说服性 1 +x:1 +每户 1 +x:1 +参赞 1 +x:1 +体改办 1 +x:1 +三镇 1 +x:1 +罗盘 1 +x:1 +昏天黑地 1 +x:1 +求解 1 +x:1 +无师自通 1 +x:1 +要害 1 +x:1 +菌蛋白 1 +x:1 +选择型 1 +x:1 +瘦肉型 1 +x:1 +金刚砂 1 +x:1 +单一 1 +x:1 +都灵 1 +x:1 +桃花雪 1 +x:1 +滑音 1 +x:1 +联动机 1 +x:1 +八平柴 1 +x:1 +汛限 1 +x:1 +妈祖 1 +x:1 +顺次 1 +x:1 +签收 1 +x:1 +稳稳当当 1 +x:1 +条田 1 +x:1 +祝楼乡 1 +x:1 +句容 1 +x:1 +一飞冲天 1 +x:1 +哑门 1 +x:1 +染杠 1 +x:1 +改改 1 +x:1 +老人手 1 +x:1 +针眼 1 +x:1 +单独 1 +x:1 +新建 1 +x:1 +珍藏 1 +x:1 +高中 1 +x:1 +见惯 1 +x:1 +西乐 1 +x:1 +列支法 1 +x:1 +毛毛虫 1 +x:1 +钨砂 1 +x:1 +业务司 1 +x:1 +精魂 1 +x:1 +掀腾 1 +x:1 +处世经 1 +x:1 +图文并茂 1 +x:1 +眼花 1 +x:1 +寻医 1 +x:1 +坑人 1 +x:1 +斑白 1 +x:1 +堤坡 1 +x:1 +总序 1 +x:1 +辅佐 1 +x:1 +乐清市 1 +x:1 +患有 1 +x:1 +子金 1 +x:1 +坑井 1 +x:1 +上杭县 1 +x:1 +茉莉花茶 1 +x:1 +月球 1 +x:1 +龟甲 1 +x:1 +林蛙油 1 +x:1 +制伏 1 +x:1 +精炼厂 1 +x:1 +枝枝 1 +x:1 +瘢块 1 +x:1 +双江镇 1 +x:1 +生命力 1 +x:1 +老人斑 1 +x:1 +存单 1 +x:1 +扶保 1 +x:1 +订婚 1 +x:1 +代部长 1 +x:1 +沪东 1 +x:1 +囊空如洗 1 +x:1 +宗室 1 +x:1 +矮小 1 +x:1 +每日 1 +x:1 +预装 1 +x:1 +骄狂 1 +x:1 +榜文 1 +x:1 +圆白菜 1 +x:1 +班集体 1 +x:1 +完整性 1 +x:1 +铣工 1 +x:1 +无间 1 +x:1 +顺治 1 +x:1 +西丰县 1 +x:1 +舌蝇 1 +x:1 +滑道 1 +x:1 +东方乡 1 +x:1 +中枢 1 +x:1 +家仇 1 +x:1 +辱没 1 +x:1 +加深 1 +x:1 +市场 1 +x:1 +取静集 1 +x:1 +利权 1 +x:1 +制作 1 +x:1 +无锡 1 +x:1 +从古至今 1 +x:1 +里脊 1 +x:1 +开歇业 1 +x:1 +啬 1 +x:1 +垒 24 +x:24 +新妆 1 +x:1 +新妇 1 +x:1 +耶稣教 1 +x:1 +子丑寅卯 1 +x:1 +展映 1 +x:1 +茶精 1 +x:1 +辅修 1 +x:1 +吴淞口 1 +x:1 +司法厅 1 +x:1 +烹调 1 +x:1 +投诉书 1 +x:1 +堤埂 1 +x:1 +京 1335 +x:1335 +热茶 1 +x:1 +测井 1 +x:1 +扶余 1 +x:1 +爱丽舍宫 1 +x:1 +官样文章 1 +x:1 +东方人 1 +x:1 +饥荒 1 +x:1 +检疫局 1 +x:1 +眼色 1 +x:1 +雅瑶乡 1 +x:1 +发言权 1 +x:1 +一勘局 1 +x:1 +试行法 1 +x:1 +山毛榉 1 +x:1 +紧扣 1 +x:1 +都督 1 +x:1 +联动性 1 +x:1 +墨西哥城 1 +x:1 +助视器 1 +x:1 +萨格勒布 1 +x:1 +航运站 1 +x:1 +扭结处 1 +x:1 +话线 1 +x:1 +推向 1 +x:1 +新姿 1 +x:1 +钟声 1 +x:1 +和歌山 1 +x:1 +实数 1 +x:1 +推后 1 +x:1 +渔轮 1 +x:1 +排练 1 +x:1 +扶优 1 +x:1 +以我为主 1 +x:1 +顺民 1 +x:1 +送稿 1 +x:1 +化敌为友 1 +x:1 +参评 1 +x:1 +鹧鸪菜 1 +x:1 +汇率制 1 +x:1 +参证 1 +x:1 +束手束脚 1 +x:1 +教义式 1 +x:1 +参试 1 +x:1 +紧接 1 +x:1 +携儿 1 +x:1 +盟友 1 +x:1 +团圆年 1 +x:1 +就手 1 +x:1 +一绝 1 +x:1 +素 35 +x:35 +新堰 1 +x:1 +洽谈会 1 +x:1 +情报员 1 +x:1 +洗澡 1 +x:1 +不久前 1 +x:1 +钟头 1 +x:1 +眨 6 +x:6 +韶华 1 +x:1 +路堤 1 +x:1 +印象 1 +x:1 +抵 207 +x:207 +美术年 1 +x:1 +欠员 1 +x:1 +规定值 1 +x:1 +美术师 1 +x:1 +申办 1 +x:1 +应力场 1 +x:1 +千帆竞发 1 +x:1 +新塘 1 +x:1 +专职 1 +x:1 +过招 1 +x:1 +电视厅 1 +x:1 +书生气 1 +x:1 +生命史 1 +x:1 +衰退 1 +x:1 +厚生 1 +x:1 +肉孜节 1 +x:1 +紧握 1 +x:1 +辅业 1 +x:1 +投资款 1 +x:1 +黑桦 1 +x:1 +悟析 1 +x:1 +襟怀 1 +x:1 +展柜 1 +x:1 +看门人 1 +x:1 +欢天喜地 1 +x:1 +参训 1 +x:1 +参政党 1 +x:1 +金刚经 1 +x:1 +闻 163 +x:163 +参访 1 +x:1 +珠三角 1 +x:1 +虚幻 1 +x:1 +日隆 1 +x:1 +镍氢 1 +x:1 +生机蓬勃 1 +x:1 +差之甚远 1 +x:1 +内果皮 1 +x:1 +白马镇 1 +x:1 +休闲服 1 +x:1 +堤围 1 +x:1 +四周围 1 +x:1 +; 16336 +x:16336 +求进 1 +x:1 +过户 1 +x:1 +窝头 1 +x:1 +艳妆 1 +x:1 +相等 1 +x:1 +展望 1 +x:1 +逆时针 1 +x:1 +辅以 1 +x:1 +三落实 1 +x:1 +外省人 1 +x:1 +朝廷树 1 +x:1 +承包额 1 +x:1 +批量化 1 +x:1 +逢冠必夺 1 +x:1 +用地 1 +x:1 +猿 9 +x:9 +俄通社 1 +x:1 +牌坊店村 1 +x:1 +嗑 1 +x:1 +懈 1 +x:1 +轧花机 1 +x:1 +相符 1 +x:1 +丹麦 1 +x:1 +扳手 1 +x:1 +下奥州 1 +x:1 +一两点 1 +x:1 +眼药 1 +x:1 +过手 1 +x:1 +人才 1 +x:1 +活树 1 +x:1 +星星峡 1 +x:1 +人手 1 +x:1 +门静脉 1 +x:1 +痰迷心窍 1 +x:1 +随调 1 +x:1 +狼山鸡 1 +x:1 +护持 1 +x:1 +构成性 1 +x:1 +飞花 1 +x:1 +怂恿 1 +x:1 +射击赛 1 +x:1 +高官厚禄 1 +x:1 +天燃气 1 +x:1 +石砚 1 +x:1 +上湖村 1 +x:1 +国转非 1 +x:1 +吝啬鬼 1 +x:1 +展播 1 +x:1 +授予 1 +x:1 +手术台 1 +x:1 +预备役 1 +x:1 +皱缬 1 +x:1 +小册子 1 +x:1 +远亲 1 +x:1 +几率 1 +x:1 +胆瓶 1 +x:1 +旌旗 1 +x:1 +回流 1 +x:1 +小山子 1 +x:1 +小住 1 +x:1 +合同处 1 +x:1 +锦城 1 +x:1 +听到 1 +x:1 +匪夷所思 1 +x:1 +见效 1 +x:1 +扬程 1 +x:1 +欧盟史 1 +x:1 +抽气机 1 +x:1 +积极向上 1 +x:1 +暴腌 1 +x:1 +羊踯躅 1 +x:1 +见教 1 +x:1 +赤膊上阵 1 +x:1 +相碰 1 +x:1 +三段论式 1 +x:1 +扶贫组 1 +x:1 +家业 1 +x:1 +左联 1 +x:1 +军令如山 1 +x:1 +巴人 1 +x:1 +贡扇 1 +x:1 +话簿 1 +x:1 +后发制人 1 +x:1 +企划厅 1 +x:1 +戏剧史 1 +x:1 +板桥口 1 +x:1 +眉峰 1 +x:1 +撕下 1 +x:1 +内伤 1 +x:1 +时光荏苒 1 +x:1 +申冤 1 +x:1 +授业 1 +x:1 +骑马找马 1 +x:1 +染房 1 +x:1 +冬令营 1 +x:1 +振兴路 1 +x:1 +洒落 1 +x:1 +远东 1 +x:1 +戏剧化 1 +x:1 +镀膜钛 1 +x:1 +预言 1 +x:1 +喧声四起 1 +x:1 +学科史 1 +x:1 +紧急 1 +x:1 +人愿 1 +x:1 +石砂 1 +x:1 +伶牙俐齿 1 +x:1 +繁缛 1 +x:1 +新安 1 +x:1 +柜体 1 +x:1 +无需 1 +x:1 +人意 1 +x:1 +家书 1 +x:1 +嫁接苗 1 +x:1 +每月 1 +x:1 +新宾 1 +x:1 +伊宁 1 +x:1 +每期 1 +x:1 +佛光寺 1 +x:1 +新宠 1 +x:1 +岑寂 1 +x:1 +松塔儿 1 +x:1 +魂不附体 1 +x:1 +警组 1 +x:1 +源代码 1 +x:1 +铸字机 1 +x:1 +声息 1 +x:1 +奇遇 1 +x:1 +近视眼 1 +x:1 +巴东 1 +x:1 +三通 1 +x:1 +秽乱 1 +x:1 +围脖 1 +x:1 +游学 1 +x:1 +声态 1 +x:1 +晏家镇 1 +x:1 +紫绀型 1 +x:1 +三送 1 +x:1 +疾步 1 +x:1 +前往 1 +x:1 +祥 14 +x:14 +救济金 1 +x:1 +嘉峪关市 1 +x:1 +俐 3 +x:3 +跫音 1 +x:1 +怀洪 1 +x:1 +巴中 1 +x:1 +舍近求远 1 +x:1 +痊愈 1 +x:1 +楔形带 1 +x:1 +无非 1 +x:1 +筋脉 1 +x:1 +偿 8 +x:8 +运行面 1 +x:1 +拳脚 1 +x:1 +雷同 1 +x:1 +参见 1 +x:1 +参观 1 +x:1 +新娘 1 +x:1 +串会 1 +x:1 +洗消 1 +x:1 +韶关 1 +x:1 +东京都 1 +x:1 +三野 1 +x:1 +茶缸 1 +x:1 +糙子 1 +x:1 +陆丰县 1 +x:1 +电视业 1 +x:1 +护头 1 +x:1 +鄙夫 1 +x:1 +窝家 1 +x:1 +热肠 1 +x:1 +部门法 1 +x:1 +村村落落 1 +x:1 +韶光 1 +x:1 +预订 1 +x:1 +考学 1 +x:1 +药学系 1 +x:1 +预设 1 +x:1 +鸽镇 1 +x:1 +年饭 1 +x:1 +无差别 1 +x:1 +洗液 1 +x:1 +满城风雨 1 +x:1 +茶缘 1 +x:1 +溢流式 1 +x:1 +土黄色 1 +x:1 +排泄物 1 +x:1 +浦项队 1 +x:1 +鄙夷 1 +x:1 +一身清白 1 +x:1 +宣传战 1 +x:1 +随身 1 +x:1 +热胀 1 +x:1 +调包计 1 +x:1 +认识论 1 +x:1 +壳体 1 +x:1 +修长 1 +x:1 +眼疾手快 1 +x:1 +册封使 1 +x:1 +举架 1 +x:1 +元谋猿人 1 +x:1 +瑞士队 1 +x:1 +冀中 1 +x:1 +装机容量 1 +x:1 +求贤 1 +x:1 +句式 1 +x:1 +白化病 1 +x:1 +求购 1 +x:1 +枯骨 1 +x:1 +求质 1 +x:1 +丘乾村 1 +x:1 +流化床 1 +x:1 +热能 1 +x:1 +西南局 1 +x:1 +热者 1 +x:1 +团区委 1 +x:1 +围聚 1 +x:1 +盟党 1 +x:1 +洗洁 1 +x:1 +人性 1 +x:1 +横坐标 1 +x:1 +串供 1 +x:1 +洗洗 1 +x:1 +苍莽 1 +x:1 +斑痣 1 +x:1 +金色 1 +x:1 +考察 1 +x:1 +矬子 1 +x:1 +区议会 1 +x:1 +小说界 1 +x:1 +塔里木河 1 +x:1 +饧糖 1 +x:1 +知识分子 1 +x:1 +斑痕 1 +x:1 +罩子 1 +x:1 +心旌 1 +x:1 +草产业 1 +x:1 +慕名 1 +x:1 +蒲 43 +x:43 +胆略 1 +x:1 +老人星 1 +x:1 +绿孔雀 1 +x:1 +染指 1 +x:1 +冬训 1 +x:1 +激 18 +x:18 +忙碌 1 +x:1 +萧山 1 +x:1 +顾影自怜 1 +x:1 +扶贫网 1 +x:1 +灰椋鸟 1 +x:1 +考定 1 +x:1 +考官 1 +x:1 +鱼鳞坑 1 +x:1 +橙 5 +x:5 +含垢忍辱 1 +x:1 +黑漆漆 1 +x:1 +自由主义 1 +x:1 +游子 1 +x:1 +暴胀 1 +x:1 +尖草坪区 1 +x:1 +成形 1 +x:1 +三义墓 1 +x:1 +无际 1 +x:1 +预警 1 +x:1 +瓦戈庄村 1 +x:1 +无限 1 +x:1 +洗浴 1 +x:1 +趋向性 1 +x:1 +每晚 1 +x:1 +主设备 1 +x:1 +考核组 1 +x:1 +您老 1 +x:1 +送礼 1 +x:1 +就坐 1 +x:1 +人群 1 +x:1 +朴朴素素 1 +x:1 +慈姑 1 +x:1 +爆炸声 1 +x:1 +见笑 1 +x:1 +且 405 +x:405 +崭崭 1 +x:1 +老四 1 +x:1 +难解难分 1 +x:1 +排成 1 +x:1 +别情 1 +x:1 +智囊 1 +x:1 +备忘录 1 +x:1 +气候学家 1 +x:1 +展窗 1 +x:1 +黄鹤楼 1 +x:1 +大湖镇 1 +x:1 +售 190 +x:190 +盖头 1 +x:1 +寻机 1 +x:1 +肉用鸡 1 +x:1 +丹荔 1 +x:1 +水平如镜 1 +x:1 +含情脉脉 1 +x:1 +照见 1 +x:1 +潜潜 1 +x:1 +台板厂 1 +x:1 +洛川 1 +x:1 +药厂 1 +x:1 +侵略 1 +x:1 +各行各业 1 +x:1 +国防观 1 +x:1 +文质彬彬 1 +x:1 +望花区 1 +x:1 +笑语声喧 1 +x:1 +签约 1 +x:1 +声纳 1 +x:1 +无视 1 +x:1 +总包人 1 +x:1 +眉县 1 +x:1 +肉皮 1 +x:1 +亚洲队 1 +x:1 +萨尔诺市 1 +x:1 +浏阳河 1 +x:1 +睡床 1 +x:1 +雯 72 +x:72 +念 99 +x:99 +声级 1 +x:1 +衰败 1 +x:1 +艺道 1 +x:1 +冲水式 1 +x:1 +昔 8 +x:8 +品节 1 +x:1 +刑法典 1 +x:1 +雪龙船 1 +x:1 +冰盖层 1 +x:1 +护围 1 +x:1 +半部论语 1 +x:1 +探 59 +x:59 +参院 1 +x:1 +此一时 1 +x:1 +图书馆 1 +x:1 +叮叮当当 1 +x:1 +随意型 1 +x:1 +面包业 1 +x:1 +并用 1 +x:1 +人缘 1 +x:1 +假肢 1 +x:1 +志峰队 1 +x:1 +听由 1 +x:1 +盟书 1 +x:1 +中短篇 1 +x:1 +屑微 1 +x:1 +敬若神明 1 +x:1 +参阅 1 +x:1 +密麻麻 1 +x:1 +工业展 1 +x:1 +相映 1 +x:1 +探身 1 +x:1 +北美洲 1 +x:1 +哥老会 1 +x:1 +图书节 1 +x:1 +大会战 1 +x:1 +思新求变 1 +x:1 +工业局 1 +x:1 +心口不一 1 +x:1 +盟主 1 +x:1 +泉声 1 +x:1 +无花果 1 +x:1 +偶发性 1 +x:1 +制发 1 +x:1 +制取 1 +x:1 +古冶区 1 +x:1 +纯水厂 1 +x:1 +代办站 1 +x:1 +金花 1 +x:1 +健身操 1 +x:1 +消夏厅 1 +x:1 +间距 1 +x:1 +罗汉 1 +x:1 +老城 1 +x:1 +排挤 1 +x:1 +护翼 1 +x:1 +万盛区 1 +x:1 +品茗 1 +x:1 +未知 1 +x:1 +常德市 1 +x:1 +修理组 1 +x:1 +必需 1 +x:1 +大鱼洞 1 +x:1 +地理学 1 +x:1 +潜游 1 +x:1 +品茶 1 +x:1 +一个劲儿 1 +x:1 +无名肿毒 1 +x:1 +享清福 1 +x:1 +发纵指示 1 +x:1 +利空 1 +x:1 +车尔臣河 1 +x:1 +异见 1 +x:1 +高尔基路 1 +x:1 +扶助 1 +x:1 +铺锦叠翠 1 +x:1 +纸龙舞 1 +x:1 +外耳 1 +x:1 +平平稳稳 1 +x:1 +过细 1 +x:1 +坑口 1 +x:1 +蒸腾 1 +x:1 +种仁 1 +x:1 +万福街 1 +x:1 +三边 1 +x:1 +制剂 1 +x:1 +决策法 1 +x:1 +傻气 1 +x:1 +友好 1 +x:1 +厢式 1 +x:1 +收款机 1 +x:1 +悲喜交加 1 +x:1 +停车 1 +x:1 +选书者 1 +x:1 +抓举 1 +x:1 +一身正气 1 +x:1 +市场局 1 +x:1 +欲望 1 +x:1 +粪堆 1 +x:1 +放 738 +x:738 +征集箱 1 +x:1 +寻亲 1 +x:1 +录用者 1 +x:1 +资本性 1 +x:1 +觉悟 1 +x:1 +护罩 1 +x:1 +制动 1 +x:1 +高效益 1 +x:1 +签署 1 +x:1 +民警 1 +x:1 +定义 1 +x:1 +紧缺 1 +x:1 +凝重 1 +x:1 +检察 1 +x:1 +紧缩 1 +x:1 +脚钉 1 +x:1 +清幽谷 1 +x:1 +吹响 1 +x:1 +排排 1 +x:1 +南昌县 1 +x:1 +电视屏 1 +x:1 +单向 1 +x:1 +眯 7 +x:7 +单名 1 +x:1 +主管局 1 +x:1 +挟持 1 +x:1 +西吉 1 +x:1 +三轮 1 +x:1 +司法界 1 +x:1 +就绪 1 +x:1 +客帮 1 +x:1 +登陆战 1 +x:1 +平起平坐 1 +x:1 +连任 1 +x:1 +乙厂 1 +x:1 +配套化 1 +x:1 +相机 1 +x:1 +西周 1 +x:1 +检定 1 +x:1 +个性 1 +x:1 +结束语 1 +x:1 +老土 1 +x:1 +滑跑 1 +x:1 +坏蛋 1 +x:1 +符合率 1 +x:1 +春和镇 1 +x:1 +生命体 1 +x:1 +相望 1 +x:1 +头盖骨 1 +x:1 +倒塌 1 +x:1 +老场 1 +x:1 +串列 1 +x:1 +动员令 1 +x:1 +实践篇 1 +x:1 +林子 1 +x:1 +救济费 1 +x:1 +独辟蹊径 1 +x:1 +迟效肥料 1 +x:1 +四级一户 1 +x:1 +倒客 1 +x:1 +无论 1 +x:1 +信风 1 +x:1 +驱除 1 +x:1 +火炬 1 +x:1 +作贱 1 +x:1 +可叹 1 +x:1 +哑谜 1 +x:1 +配装 1 +x:1 +斑桃 1 +x:1 +鞍子 1 +x:1 +得失 1 +x:1 +辅具 1 +x:1 +洗炼 1 +x:1 +西垂 1 +x:1 +光宗耀祖 1 +x:1 +发展科 1 +x:1 +单循环制 1 +x:1 +了望 1 +x:1 +就地 1 +x:1 +精英 1 +x:1 +勘测局 1 +x:1 +海洋观 1 +x:1 +灰土 1 +x:1 +盖子 1 +x:1 +授勋 1 +x:1 +仓 16 +x:16 +扶善疾恶 1 +x:1 +潜流 1 +x:1 +构成美 1 +x:1 +新海 1 +x:1 +西域 1 +x:1 +潜海 1 +x:1 +政资 1 +x:1 +港澳办 1 +x:1 +每篇 1 +x:1 +西城 1 +x:1 +生存链 1 +x:1 +委派制 1 +x:1 +相撞 1 +x:1 +茶托 1 +x:1 +系列型 1 +x:1 +扶农 1 +x:1 +望湖楼 1 +x:1 +从古到今 1 +x:1 +传销客 1 +x:1 +未了轩 1 +x:1 +异言 1 +x:1 +喝彩声 1 +x:1 +园林学家 1 +x:1 +海参崴 1 +x:1 +家常菜 1 +x:1 +益鸟 1 +x:1 +值勤警 1 +x:1 +制冷 1 +x:1 +骨灰堂 1 +x:1 +骄气 1 +x:1 +顺境 1 +x:1 +非船舶 1 +x:1 +棚外 1 +x:1 +活活 1 +x:1 +茶技 1 +x:1 +三秦 1 +x:1 +襟翼 1 +x:1 +成大海 1 +x:1 +拖鞋兰 1 +x:1 +高位 1 +x:1 +扶贫户 1 +x:1 +胡志明市 1 +x:1 +挟荔宫 1 +x:1 +石嘴山 1 +x:1 +齿轮厂 1 +x:1 +新浦 1 +x:1 +伏龙桥 1 +x:1 +瀚海 1 +x:1 +预防 1 +x:1 +讼事 1 +x:1 +透湿 1 +x:1 +讼争 1 +x:1 +铜奖 1 +x:1 +本主儿 1 +x:1 +无水草场 1 +x:1 +茶拨 1 +x:1 +噤口痢 1 +x:1 +精良 1 +x:1 +破旧立新 1 +x:1 +浓眉大眼 1 +x:1 +老河口市 1 +x:1 +毛举细故 1 +x:1 +浇底乡 1 +x:1 +作践 1 +x:1 +柜橱 1 +x:1 +净化器 1 +x:1 +牛年 1 +x:1 +专业科 1 +x:1 +西坑 1 +x:1 +柏埔镇 1 +x:1 +玻璃 1 +x:1 +假若 1 +x:1 +桃花运 1 +x:1 +地炮旅 1 +x:1 +咆哮 1 +x:1 +惊雷 1 +x:1 +雷锋式 1 +x:1 +港澳台 1 +x:1 +孟家庄镇 1 +x:1 +铜墙 1 +x:1 +履舄交错 1 +x:1 +不慌不乱 1 +x:1 +营部 1 +x:1 +消解性 1 +x:1 +开平市 1 +x:1 +军科院 1 +x:1 +潜水 1 +x:1 +绞尽 1 +x:1 +异议 1 +x:1 +炭 12 +x:12 +律师法 1 +x:1 +洗熨 1 +x:1 +参政会 1 +x:1 +欧航局 1 +x:1 +评论员 1 +x:1 +力竭声嘶 1 +x:1 +水保局 1 +x:1 +得到 1 +x:1 +板壁房 1 +x:1 +潜江 1 +x:1 +背带式 1 +x:1 +停赛 1 +x:1 +喇叭裤 1 +x:1 +剩磁 1 +x:1 +不肖子孙 1 +x:1 +硫化黑 1 +x:1 +崆峒岛 1 +x:1 +现在时 1 +x:1 +滑轮 1 +x:1 +铜壶 1 +x:1 +巴县 1 +x:1 +西四 1 +x:1 +交通部长 1 +x:1 +制假 1 +x:1 +要好 1 +x:1 +何许人 1 +x:1 +阵地 1 +x:1 +吹嘘 1 +x:1 +远古 1 +x:1 +长期化 1 +x:1 +假药 1 +x:1 +制做 1 +x:1 +口哨儿 1 +x:1 +染缸 1 +x:1 +竞职者 1 +x:1 +投诉量 1 +x:1 +展示 1 +x:1 +探路 1 +x:1 +富存区 1 +x:1 +柞林 1 +x:1 +紧紧 1 +x:1 +洛市 1 +x:1 +防守 1 +x:1 +三资 1 +x:1 +无言 1 +x:1 +内陆国 1 +x:1 +老弱残兵 1 +x:1 +荷兰籍 1 +x:1 +踩 83 +x:83 +三走 1 +x:1 +智商 1 +x:1 +沾化 1 +x:1 +潜油 1 +x:1 +落入者 1 +x:1 +宰 33 +x:33 +贯彻 1 +x:1 +腿腕子 1 +x:1 +相救 1 +x:1 +修理厂 1 +x:1 +远南 1 +x:1 +地雷阵 1 +x:1 +佟麟阁 1 +x:1 +安康市 1 +x:1 +防寒 1 +x:1 +练习簿 1 +x:1 +水险 1 +x:1 +自讨没趣 1 +x:1 +燕尾服 1 +x:1 +察明 1 +x:1 +三仙村 1 +x:1 +单家独户 1 +x:1 +人类 1 +x:1 +岂有此理 1 +x:1 +乡邻 1 +x:1 +萨军 1 +x:1 +洗煤 1 +x:1 +浸人心脾 1 +x:1 +洞悉 1 +x:1 +县境 1 +x:1 +遭 202 +x:202 +三贷 1 +x:1 +勘测工 1 +x:1 +越权 1 +x:1 +年薪 1 +x:1 +规定价 1 +x:1 +动员会 1 +x:1 +样书 1 +x:1 +展线 1 +x:1 +逊克县 1 +x:1 +中子态 1 +x:1 +袒露 1 +x:1 +远房亲戚 1 +x:1 +面授机宜 1 +x:1 +寒山寺 1 +x:1 +防霜林 1 +x:1 +四边地 1 +x:1 +防尘 1 +x:1 +过场 1 +x:1 +精诚团结 1 +x:1 +签章 1 +x:1 +老勘 1 +x:1 +个旧 1 +x:1 +张茹集乡 1 +x:1 +临汾市 1 +x:1 +英语角 1 +x:1 +上岗者 1 +x:1 +榨菜量 1 +x:1 +子规 1 +x:1 +圆溜溜 1 +x:1 +青春颂 1 +x:1 +耸 9 +x:9 +织梭 1 +x:1 +后方 1 +x:1 +豁达 1 +x:1 +生活舱 1 +x:1 +常务 1 +x:1 +银行界 1 +x:1 +制造商 1 +x:1 +令人神往 1 +x:1 +砌起 1 +x:1 +基金额 1 +x:1 +得当 1 +x:1 +曲水流觞 1 +x:1 +融洽 1 +x:1 +猿声 1 +x:1 +扩张式 1 +x:1 +相抵 1 +x:1 +厥词 1 +x:1 +长老塔 1 +x:1 +送报 1 +x:1 +四重唱 1 +x:1 +串味 1 +x:1 +英资 1 +x:1 +誊印 1 +x:1 +洪山乡 1 +x:1 +芬兰 1 +x:1 +智力 1 +x:1 +陈规陋习 1 +x:1 +缆车厢 1 +x:1 +财贸处 1 +x:1 +幸福 1 +x:1 +报警器业 1 +x:1 +中选 1 +x:1 +宣传科 1 +x:1 +源程序 1 +x:1 +个数 1 +x:1 +住居 1 +x:1 +农机棚 1 +x:1 +研讨 1 +x:1 +荒淫无耻 1 +x:1 +桐庐县 1 +x:1 +目标论 1 +x:1 +林庄乡 1 +x:1 +骄横 1 +x:1 +下压力 1 +x:1 +分拣机 1 +x:1 +山峦 1 +x:1 +求雨 1 +x:1 +凝铸 1 +x:1 +风火轮 1 +x:1 +凯鲁万市 1 +x:1 +查结率 1 +x:1 +画画 1 +x:1 +白毛女 1 +x:1 +善善恶恶 1 +x:1 +模分布论 1 +x:1 +精萃 1 +x:1 +顾忌 1 +x:1 +百分制 1 +x:1 +侍应 1 +x:1 +高效率 1 +x:1 +研读 1 +x:1 +就算 1 +x:1 +单兵 1 +x:1 +苟且 1 +x:1 +西关 1 +x:1 +基因羊 1 +x:1 +夕阳 1 +x:1 +得志 1 +x:1 +化解 1 +x:1 +体循环 1 +x:1 +响音 1 +x:1 +作证 1 +x:1 +兴师问罪 1 +x:1 +比做 1 +x:1 +作词 1 +x:1 +年节 1 +x:1 +奥勒松市 1 +x:1 +民工队 1 +x:1 +护税 1 +x:1 +愤世嫉俗 1 +x:1 +授命 1 +x:1 +羞辱 1 +x:1 +大堤脚 1 +x:1 +挥汗如雨 1 +x:1 +老到 1 +x:1 +通俗类 1 +x:1 +无赖 1 +x:1 +汇珍楼 1 +x:1 +耦合 1 +x:1 +颤栗 1 +x:1 +杏仁露 1 +x:1 +车行道 1 +x:1 +单元 1 +x:1 +百分号 1 +x:1 +西撒哈拉 1 +x:1 +阂 1 +x:1 +对顶角 1 +x:1 +酸牛奶 1 +x:1 +老友 1 +x:1 +绝对温度 1 +x:1 +撂下 1 +x:1 +扶困 1 +x:1 +明细单 1 +x:1 +鸭嘴龙 1 +x:1 +鞍山 1 +x:1 +检录 1 +x:1 +三证 1 +x:1 +三评 1 +x:1 +老叟 1 +x:1 +融汇 1 +x:1 +挥发酚 1 +x:1 +济济 1 +x:1 +异趣 1 +x:1 +承包者 1 +x:1 +雄图大略 1 +x:1 +骨架子 1 +x:1 +智取 1 +x:1 +保险费用 1 +x:1 +漏子 1 +x:1 +掉以轻心 1 +x:1 +外销额 1 +x:1 +相接 1 +x:1 +史学观 1 +x:1 +横栏镇 1 +x:1 +完全性 1 +x:1 +三论 1 +x:1 +离乡背井 1 +x:1 +前进不懈 1 +x:1 +山重山 1 +x:1 +四川籍 1 +x:1 +三讲 1 +x:1 +西园乡 1 +x:1 +话机 1 +x:1 +敦促 1 +x:1 +学术类 1 +x:1 +脱口道出 1 +x:1 +展翅 1 +x:1 +话本 1 +x:1 +胶鞋厂 1 +x:1 +巴黎城 1 +x:1 +踺子 1 +x:1 +年菜 1 +x:1 +犬牙交错 1 +x:1 +探询 1 +x:1 +内存储器 1 +x:1 +关塔港 1 +x:1 +融注 1 +x:1 +百思不解 1 +x:1 +三禁 1 +x:1 +话柄 1 +x:1 +大包小袋 1 +x:1 +铜币 1 +x:1 +活火 1 +x:1 +全封闭式 1 +x:1 +过程 1 +x:1 +排枪 1 +x:1 +贺岁杯 1 +x:1 +生长率 1 +x:1 +顺畅 1 +x:1 +签筒 1 +x:1 +间隙 1 +x:1 +异质 1 +x:1 +收购权 1 +x:1 +无谓 1 +x:1 +疑心 1 +x:1 +撕碎 1 +x:1 +节骨眼 1 +x:1 +正逢 1 +x:1 +花鸟 1 +x:1 +衍生 1 +x:1 +农字号 1 +x:1 +毒饵 1 +x:1 +内部化 1 +x:1 +中短线 1 +x:1 +营业执照 1 +x:1 +养鱼池 1 +x:1 +农业队 1 +x:1 +支脉 1 +x:1 +泉州 1 +x:1 +护符 1 +x:1 +情文并茂 1 +x:1 +东方城 1 +x:1 +探讨 1 +x:1 +排查 1 +x:1 +白糖水 1 +x:1 +老化 1 +x:1 +时评 1 +x:1 +探访 1 +x:1 +哑语 1 +x:1 +制图 1 +x:1 +条款 1 +x:1 +马列 1 +x:1 +停课 1 +x:1 +牦牛 1 +x:1 +豌豆粉 1 +x:1 +弄臣 1 +x:1 +八三年 1 +x:1 +太极拳队 1 +x:1 +女 2352 +x:2352 +年莫 1 +x:1 +绥宁县 1 +x:1 +老区 1 +x:1 +银号 1 +x:1 +音响展 1 +x:1 +胜进村 1 +x:1 +博尔伦格 1 +x:1 +单县 1 +x:1 +西去 1 +x:1 +助力车 1 +x:1 +制售 1 +x:1 +阵前 1 +x:1 +欠佳 1 +x:1 +新民 1 +x:1 +谢忱 1 +x:1 +马尾藻 1 +x:1 +慈心 1 +x:1 +说三道四 1 +x:1 +西厢 1 +x:1 +任性 1 +x:1 +大藏经 1 +x:1 +伤亡率 1 +x:1 +平头楼村 1 +x:1 +扬扬 1 +x:1 +浙江团 1 +x:1 +推介 1 +x:1 +媾和 1 +x:1 +正常性 1 +x:1 +会务费 1 +x:1 +紧张症 1 +x:1 +押运 1 +x:1 +无辜 1 +x:1 +单厂 1 +x:1 +勃 8 +x:8 +活现 1 +x:1 +无理根 1 +x:1 +紧缺性 1 +x:1 +阵列 1 +x:1 +铜川 1 +x:1 +斟酒 1 +x:1 +彼得保罗 1 +x:1 +市场学 1 +x:1 +斟酌 1 +x:1 +古道热肠 1 +x:1 +敖拜淖尔 1 +x:1 +茶晶 1 +x:1 +顶牛儿 1 +x:1 +式样 1 +x:1 +一定会计 1 +x:1 +酚 4 +x:4 +西口 1 +x:1 +年老 1 +x:1 +企管 1 +x:1 +人种 1 +x:1 +琅环 1 +x:1 +窑壁 1 +x:1 +无过 1 +x:1 +利在子孙 1 +x:1 +一步登天 1 +x:1 +个人股 1 +x:1 +租者 1 +x:1 +过秤 1 +x:1 +人秘 1 +x:1 +几比 1 +x:1 +托拉司 1 +x:1 +药力 1 +x:1 +原型机 1 +x:1 +饥馑 1 +x:1 +引进者 1 +x:1 +停表 1 +x:1 +省 1890 +x:1890 +灰发 1 +x:1 +磷酸盐 1 +x:1 +西区 1 +x:1 +阅览证 1 +x:1 +赤卫队 1 +x:1 +警署 1 +x:1 +腮片 1 +x:1 +胆汁 1 +x:1 +饥饿 1 +x:1 +凝集 1 +x:1 +漏壶 1 +x:1 +帛 2 +x:2 +酶类 1 +x:1 +生长点 1 +x:1 +投资热 1 +x:1 +拨通 1 +x:1 +快攻型 1 +x:1 +西北 1 +x:1 +西化 1 +x:1 +条桌 1 +x:1 +倒弄 1 +x:1 +骂架 1 +x:1 +射击队 1 +x:1 +集训队员 1 +x:1 +设 481 +x:481 +票面 1 +x:1 +坎肩 1 +x:1 +净化剂 1 +x:1 +推举 1 +x:1 +倒影 1 +x:1 +小个子 1 +x:1 +流莺 1 +x:1 +无轨 1 +x:1 +参选 1 +x:1 +寄生虫 1 +x:1 +精虫 1 +x:1 +人祸 1 +x:1 +李树 1 +x:1 +得州 1 +x:1 +品蓝 1 +x:1 +倒彩 1 +x:1 +结帮拉派 1 +x:1 +寞 1 +x:1 +菜粉蝶 1 +x:1 +着眼 1 +x:1 +系列化 1 +x:1 +西南 1 +x:1 +核糖 1 +x:1 +西单 1 +x:1 +热饮 1 +x:1 +七八月 1 +x:1 +西华 1 +x:1 +二连星 1 +x:1 +厚实实 1 +x:1 +蓉园 1 +x:1 +相思 1 +x:1 +两重性 1 +x:1 +庄园主 1 +x:1 +茹苦含辛 1 +x:1 +开封县 1 +x:1 +竹纸 1 +x:1 +没日没夜 1 +x:1 +排放 1 +x:1 +三角 1 +x:1 +浪劲 1 +x:1 +电缆桥 1 +x:1 +核武器化 1 +x:1 +如影随形 1 +x:1 +三观 1 +x:1 +睡姿 1 +x:1 +雇佣劳动 1 +x:1 +倒底 1 +x:1 +声称 1 +x:1 +财政 1 +x:1 +南线堤 1 +x:1 +中西医界 1 +x:1 +工业家 1 +x:1 +匹马单枪 1 +x:1 +作用力 1 +x:1 +微瑕 1 +x:1 +文艺复兴 1 +x:1 +社会科学 1 +x:1 +沽 1 +x:1 +盖帽 1 +x:1 +文本化 1 +x:1 +撞钟 1 +x:1 +雁 86 +x:86 +浔阳城 1 +x:1 +他律 1 +x:1 +万绿丛中 1 +x:1 +热风 1 +x:1 +安理会 1 +x:1 +茶杯 1 +x:1 +芽接 1 +x:1 +展厅 1 +x:1 +过磅 1 +x:1 +利刀 1 +x:1 +三要 1 +x:1 +满目 1 +x:1 +老农 1 +x:1 +日温月痕 1 +x:1 +谢庄 1 +x:1 +靳三针 1 +x:1 +铮亮 1 +x:1 +惯性力 1 +x:1 +光合 1 +x:1 +莲华经 1 +x:1 +藏琼玛 1 +x:1 +送料口 1 +x:1 +瑕瑜互见 1 +x:1 +短少 1 +x:1 +旗人 1 +x:1 +无绳机 1 +x:1 +都水 1 +x:1 +液化 1 +x:1 +腐朽性 1 +x:1 +老兄 1 +x:1 +工矿区 1 +x:1 +淹城 1 +x:1 +小人儿书 1 +x:1 +紫乌 1 +x:1 +排斥 1 +x:1 +效益带 1 +x:1 +单利 1 +x:1 +系列剧 1 +x:1 +活物 1 +x:1 +文化日 1 +x:1 +脚后跟 1 +x:1 +上下学 1 +x:1 +繁星 1 +x:1 +扳回 1 +x:1 +割伤 1 +x:1 +探视 1 +x:1 +远郊区 1 +x:1 +三西 1 +x:1 +西刘 1 +x:1 +秽土 1 +x:1 +顺着 1 +x:1 +审时度势 1 +x:1 +谢幕 1 +x:1 +鲲 6 +x:6 +老兵 1 +x:1 +防御 1 +x:1 +根特市 1 +x:1 +乱糟糟 1 +x:1 +发放站 1 +x:1 +基本系 1 +x:1 +襟章 1 +x:1 +支配权 1 +x:1 +数十亿计 1 +x:1 +规律 1 +x:1 +防疫法 1 +x:1 +不鸣则已 1 +x:1 +掂量 1 +x:1 +行为法 1 +x:1 +音容 1 +x:1 +展台 1 +x:1 +暴风 1 +x:1 +娇滴滴 1 +x:1 +蓉城 1 +x:1 +无愧于 1 +x:1 +串城 1 +x:1 +宁安市 1 +x:1 +上市户 1 +x:1 +蟠桃 1 +x:1 +推优 1 +x:1 +房地局 1 +x:1 +敲敲 1 +x:1 +响铃 1 +x:1 +铜山 1 +x:1 +舌鳎 1 +x:1 +片儿 1 +x:1 +瘘管 1 +x:1 +异轨 1 +x:1 +先遣队 1 +x:1 +健身房 1 +x:1 +谢帖 1 +x:1 +分光计 1 +x:1 +五虎岭 1 +x:1 +过硬 1 +x:1 +脑栓塞 1 +x:1 +老儿 1 +x:1 +报纸者 1 +x:1 +剖析性 1 +x:1 +增购 1 +x:1 +修造厂 1 +x:1 +秋吉台 1 +x:1 +滑落 1 +x:1 +用典 1 +x:1 +飞檐走壁 1 +x:1 +承包费 1 +x:1 +报刊费 1 +x:1 +杂乱不堪 1 +x:1 +工业病 1 +x:1 +四重奏 1 +x:1 +滑头滑脑 1 +x:1 +跨越式 1 +x:1 +石家庄市 1 +x:1 +大湖地村 1 +x:1 +戈壁滩 1 +x:1 +前所未闻 1 +x:1 +泥浆 1 +x:1 +暴露 1 +x:1 +有请 1 +x:1 +征收率 1 +x:1 +茶树 1 +x:1 +未经 1 +x:1 +巴士 1 +x:1 +有误 1 +x:1 +不无裨益 1 +x:1 +面大量多 1 +x:1 +护盒 1 +x:1 +大许屯 1 +x:1 +老庄 1 +x:1 +叶芽儿 1 +x:1 +庄户人 1 +x:1 +申请者 1 +x:1 +价目表 1 +x:1 +济 29 +x:29 +防假 1 +x:1 +老底 1 +x:1 +茶桶 1 +x:1 +半死不活 1 +x:1 +西工 1 +x:1 +工业品 1 +x:1 +眉宇 1 +x:1 +播报 1 +x:1 +仓山区 1 +x:1 +宣传画 1 +x:1 +居委会 1 +x:1 +穷则思变 1 +x:1 +抗旱 1 +x:1 +衰颜老态 1 +x:1 +茶桌 1 +x:1 +难者 1 +x:1 +蒺藜 1 +x:1 +还击 1 +x:1 +抛开 1 +x:1 +取款机 1 +x:1 +异能 1 +x:1 +精装 1 +x:1 +上档次 1 +x:1 +西崽 1 +x:1 +眦决嘴裂 1 +x:1 +经货联盟 1 +x:1 +正邪 1 +x:1 +鞭炮声 1 +x:1 +会费额 1 +x:1 +肴馔 1 +x:1 +蓄积性 1 +x:1 +人眼 1 +x:1 +露出 1 +x:1 +邮通 1 +x:1 +订价 1 +x:1 +参选人 1 +x:1 +台联会 1 +x:1 +寄生蟹 1 +x:1 +细木工板 1 +x:1 +缴送 1 +x:1 +坐享其成 1 +x:1 +照转 1 +x:1 +合瓣花冠 1 +x:1 +在此一举 1 +x:1 +铜匾 1 +x:1 +播扬 1 +x:1 +过眼 1 +x:1 +水磨石 1 +x:1 +中编办 1 +x:1 +追究制 1 +x:1 +辅导 1 +x:1 +琳 87 +x:87 +鄙人 1 +x:1 +老年 1 +x:1 +铜匠 1 +x:1 +藏装 1 +x:1 +泥淖 1 +x:1 +制宜 1 +x:1 +老幼 1 +x:1 +利率 1 +x:1 +孤儿 1 +x:1 +老师 1 +x:1 +安全电压 1 +x:1 +太阳历 1 +x:1 +白细胞 1 +x:1 +水岸线 1 +x:1 +倒入 1 +x:1 +假装 1 +x:1 +玻纤 1 +x:1 +制导 1 +x:1 +乳白色 1 +x:1 +牛奶 1 +x:1 +给面子 1 +x:1 +老帮 1 +x:1 +双凤山 1 +x:1 +眼际 1 +x:1 +大山包乡 1 +x:1 +石油气 1 +x:1 +精血 1 +x:1 +更生 1 +x:1 +宛转 1 +x:1 +罗方 1 +x:1 +俯仰 1 +x:1 +投资署 1 +x:1 +得分 1 +x:1 +坑害 1 +x:1 +护短 1 +x:1 +西岸 1 +x:1 +西岳 1 +x:1 +凯里市 1 +x:1 +千变万化 1 +x:1 +仪表美 1 +x:1 +高楼大厦 1 +x:1 +亵渎 1 +x:1 +车模 1 +x:1 +热障 1 +x:1 +喇叭花 1 +x:1 +颜体 1 +x:1 +支路 1 +x:1 +交战国 1 +x:1 +亥 1 +x:1 +年轻 1 +x:1 +硫化钠 1 +x:1 +教七楼 1 +x:1 +西岗 1 +x:1 +得利 1 +x:1 +年轮 1 +x:1 +钢瓶厂 1 +x:1 +探究反射 1 +x:1 +击弦机 1 +x:1 +型钢 1 +x:1 +围障 1 +x:1 +厚意 1 +x:1 +灰尘 1 +x:1 +县宝 1 +x:1 +扒 18 +x:18 +河面 1 +x:1 +泥水 1 +x:1 +殷纣王 1 +x:1 +大吹大擂 1 +x:1 +茶楼 1 +x:1 +西峡 1 +x:1 +无能 1 +x:1 +晚霜 1 +x:1 +东方学 1 +x:1 +柑桔 1 +x:1 +晋 79 +x:79 +县官 1 +x:1 +招展团 1 +x:1 +衰落 1 +x:1 +腐蚀 1 +x:1 +测字 1 +x:1 +过目 1 +x:1 +染病 1 +x:1 +条条 1 +x:1 +雀跃 1 +x:1 +痛定思痛 1 +x:1 +糕点 1 +x:1 +麻经儿 1 +x:1 +与生俱有 1 +x:1 +过门儿 1 +x:1 +牛鼻子 1 +x:1 +面值 1 +x:1 +乌礁湾 1 +x:1 +轻声 1 +x:1 +供给量 1 +x:1 +童装部 1 +x:1 +细布 1 +x:1 +无耻 1 +x:1 +热队 1 +x:1 +陈埭镇 1 +x:1 +得力 1 +x:1 +铜制 1 +x:1 +羽绒厂 1 +x:1 +系列展 1 +x:1 +悦 31 +x:31 +过瘾 1 +x:1 +浪尖 1 +x:1 +防冻 1 +x:1 +通经活络 1 +x:1 +候船室 1 +x:1 +泥泞 1 +x:1 +后继有人 1 +x:1 +得劲 1 +x:1 +见状 1 +x:1 +得势 1 +x:1 +忘恩负义 1 +x:1 +漂儿 1 +x:1 +烹饪 1 +x:1 +品评 1 +x:1 +圣迭戈 1 +x:1 +扩张力 1 +x:1 +授奖 1 +x:1 +西山 1 +x:1 +泥沼 1 +x:1 +在途资金 1 +x:1 +年辈 1 +x:1 +出租率 1 +x:1 +防凌 1 +x:1 +有言 1 +x:1 +老弟 1 +x:1 +谱架 1 +x:1 +排比 1 +x:1 +斯土 1 +x:1 +统一制 1 +x:1 +老弦 1 +x:1 +无聊 1 +x:1 +死心眼 1 +x:1 +涉足 1 +x:1 +电建 1 +x:1 +无职 1 +x:1 +大河乡 1 +x:1 +泥沙 1 +x:1 +暴雨 1 +x:1 +尸体 1 +x:1 +品读 1 +x:1 +沙头角镇 1 +x:1 +单层 1 +x:1 +泥潭 1 +x:1 +试漂 1 +x:1 +发案地 1 +x:1 +追名逐利 1 +x:1 +竹竿 1 +x:1 +词曲论 1 +x:1 +西德 1 +x:1 +投资类 1 +x:1 +哪样 1 +x:1 +蓉花山 1 +x:1 +下半 1 +x:1 +沏 2 +x:2 +鼓点子 1 +x:1 +送法 1 +x:1 +顺风转舵 1 +x:1 +假言 1 +x:1 +徙 1 +x:1 +七手八脚 1 +x:1 +无限量 1 +x:1 +集装箱船 1 +x:1 +菌落 1 +x:1 +虚构论 1 +x:1 +金圆券 1 +x:1 +迫不得已 1 +x:1 +十年树木 1 +x:1 +新传 1 +x:1 +山羊洼 1 +x:1 +铜冠 1 +x:1 +哑然无声 1 +x:1 +清虚观 1 +x:1 +考上 1 +x:1 +手到擒来 1 +x:1 +倒台 1 +x:1 +新余 1 +x:1 +条播 1 +x:1 +品行 1 +x:1 +新作 1 +x:1 +时调 1 +x:1 +决策人 1 +x:1 +排档 1 +x:1 +南瓜子 1 +x:1 +妇委会 1 +x:1 +气流 1 +x:1 +规划 1 +x:1 +工业国 1 +x:1 +宁安县 1 +x:1 +爆炸力 1 +x:1 +还口 1 +x:1 +安口镇 1 +x:1 +杀手锏 1 +x:1 +年谱 1 +x:1 +工业园 1 +x:1 +忙活 1 +x:1 +铝锭 1 +x:1 +微音器 1 +x:1 +沪指 1 +x:1 +热闹 1 +x:1 +鱼摊 1 +x:1 +远祖 1 +x:1 +热销 1 +x:1 +京剧院团 1 +x:1 +闹病 1 +x:1 +老屋 1 +x:1 +通电 1 +x:1 +单弱 1 +x:1 +说情者 1 +x:1 +统一党 1 +x:1 +家常话 1 +x:1 +灰心 1 +x:1 +徐谷店村 1 +x:1 +慈协 1 +x:1 +活罪 1 +x:1 +单弦 1 +x:1 +单张 1 +x:1 +代办点 1 +x:1 +棋牌室 1 +x:1 +过电 1 +x:1 +勐仑 1 +x:1 +收购案 1 +x:1 +争鲜斗艳 1 +x:1 +热键 1 +x:1 +窝主 1 +x:1 +西式 1 +x:1 +单式 1 +x:1 +人生 1 +x:1 +漂到 1 +x:1 +防务 1 +x:1 +人尽其材 1 +x:1 +芨芨草 1 +x:1 +指挥部 1 +x:1 +市场型 1 +x:1 +出气筒 1 +x:1 +中国字 1 +x:1 +新鲜事儿 1 +x:1 +老将 1 +x:1 +电解槽 1 +x:1 +绍酒 1 +x:1 +百分尺 1 +x:1 +老小 1 +x:1 +南岗区 1 +x:1 +老少 1 +x:1 +规劝 1 +x:1 +送气 1 +x:1 +八重樱 1 +x:1 +报时钟 1 +x:1 +一总 1 +x:1 +泉勇 1 +x:1 +无影灯 1 +x:1 +人界 1 +x:1 +工业界 1 +x:1 +倒卖 1 +x:1 +听罢 1 +x:1 +深更半夜 1 +x:1 +练习生 1 +x:1 +护理 1 +x:1 +坑塘 1 +x:1 +复种指数 1 +x:1 +雷锋团 1 +x:1 +眉头 1 +x:1 +屯 2 +x:2 +通信股 1 +x:1 +一声不吭 1 +x:1 +伽马仪 1 +x:1 +洒遍 1 +x:1 +三营 1 +x:1 +得出 1 +x:1 +胆怯 1 +x:1 +土油灯 1 +x:1 +无理数 1 +x:1 +防化 1 +x:1 +疑兵 1 +x:1 +生长素 1 +x:1 +防办 1 +x:1 +专病 1 +x:1 +西康 1 +x:1 +圈 151 +x:151 +喃语 1 +x:1 +经卷 1 +x:1 +新丁 1 +x:1 +三藏 1 +x:1 +魁首 1 +x:1 +无形损耗 1 +x:1 +历史性 1 +x:1 +年资 1 +x:1 +基本功 1 +x:1 +活结 1 +x:1 +新丰 1 +x:1 +老巢 1 +x:1 +合兴乡 1 +x:1 +两性生殖 1 +x:1 +木 73 +x:73 +单店 1 +x:1 +格律体 1 +x:1 +防区 1 +x:1 +活络 1 +x:1 +排椅 1 +x:1 +求饶 1 +x:1 +吴家营乡 1 +x:1 +相伴 1 +x:1 +老巷 1 +x:1 +特教班 1 +x:1 +西庄 1 +x:1 +企盼 1 +x:1 +阵形 1 +x:1 +开封市 1 +x:1 +精读 1 +x:1 +串子 1 +x:1 +生活费 1 +x:1 +特异质 1 +x:1 +壳子 1 +x:1 +钟体 1 +x:1 +新泰 1 +x:1 +降雨 1 +x:1 +熔于一炉 1 +x:1 +灰市 1 +x:1 +阵式 1 +x:1 +养痈遗患 1 +x:1 +铜像 1 +x:1 +条施 1 +x:1 +精详 1 +x:1 +炎陵县 1 +x:1 +经济主义 1 +x:1 +条文 1 +x:1 +柑橘 1 +x:1 +久而久之 1 +x:1 +茶歌 1 +x:1 +一字一句 1 +x:1 +条斑 1 +x:1 +一成不变 1 +x:1 +新乡 1 +x:1 +海洋能 1 +x:1 +毛毛雨 1 +x:1 +支边 1 +x:1 +年货 1 +x:1 +转弯处 1 +x:1 +沟门乡 1 +x:1 +防卫 1 +x:1 +老官地乡 1 +x:1 +市厅县级 1 +x:1 +降雪 1 +x:1 +齐步走 1 +x:1 +好言相劝 1 +x:1 +蓝白色 1 +x:1 +装运量 1 +x:1 +单帮 1 +x:1 +个人赛 1 +x:1 +科头跣足 1 +x:1 +区段 1 +x:1 +非可溶性 1 +x:1 +平谷县镇 1 +x:1 +话闸子 1 +x:1 +炸药 1 +x:1 +够朋友 1 +x:1 +波光云影 1 +x:1 +阿拉伯湾 1 +x:1 +扶贫款 1 +x:1 +累放 1 +x:1 +新人 1 +x:1 +假设 1 +x:1 +织机 1 +x:1 +安科纳 1 +x:1 +职能性 1 +x:1 +新交 1 +x:1 +西师 1 +x:1 +洗礼 1 +x:1 +萨姆 1 +x:1 +西市 1 +x:1 +空政 1 +x:1 +遮风避雨 1 +x:1 +千里光 1 +x:1 +跨学科 1 +x:1 +假话 1 +x:1 +明末清初 1 +x:1 +西平 1 +x:1 +冥思苦想 1 +x:1 +单干 1 +x:1 +无色 1 +x:1 +良种稻 1 +x:1 +尽管 1 +x:1 +岩爆 1 +x:1 +假证 1 +x:1 +无声无臭 1 +x:1 +精警 1 +x:1 +假说 1 +x:1 +节假日 1 +x:1 +刮目 1 +x:1 +字帖 1 +x:1 +新任 1 +x:1 +眼镜 1 +x:1 +交头接耳 1 +x:1 +尘埃云 1 +x:1 +独当一面 1 +x:1 +过境费 1 +x:1 +构陷 1 +x:1 +基本点 1 +x:1 +上荣下辱 1 +x:1 +辛丑 1 +x:1 +派发 1 +x:1 +有违 1 +x:1 +娄 23 +x:23 +东方市 1 +x:1 +真儿 1 +x:1 +修理班 1 +x:1 +伊始 1 +x:1 +编辑家 1 +x:1 +桥涵 1 +x:1 +茶水 1 +x:1 +鉴定组 1 +x:1 +鱼水情浓 1 +x:1 +一刀切 1 +x:1 +眉心 1 +x:1 +编辑室 1 +x:1 +交变电场 1 +x:1 +符号论 1 +x:1 +未竟 1 +x:1 +坑底 1 +x:1 +吹奏 1 +x:1 +朱庄乡 1 +x:1 +汉武帝 1 +x:1 +学有专长 1 +x:1 +岁数 1 +x:1 +屏障 1 +x:1 +已 10060 +x:10060 +屯头村 1 +x:1 +办公会 1 +x:1 +停航 1 +x:1 +警铃声 1 +x:1 +洗练 1 +x:1 +刑满释放 1 +x:1 +一目了然 1 +x:1 +铜城 1 +x:1 +四边形 1 +x:1 +粉红色 1 +x:1 +三节 1 +x:1 +可圈可点 1 +x:1 +慈善 1 +x:1 +异国他乡 1 +x:1 +根瘤菌 1 +x:1 +叶盛 1 +x:1 +滑联 1 +x:1 +古北口 1 +x:1 +案发地 1 +x:1 +老媪 1 +x:1 +三段论 1 +x:1 +假象 1 +x:1 +团圆会 1 +x:1 +衣物 1 +x:1 +敢于 1 +x:1 +左膀右臂 1 +x:1 +流动率 1 +x:1 +强强改造 1 +x:1 +测度 1 +x:1 +老婆 1 +x:1 +浪头 1 +x:1 +虾酱 1 +x:1 +西头 1 +x:1 +层高 1 +x:1 +人猿 1 +x:1 +西太 1 +x:1 +西天 1 +x:1 +酚醛塑料 1 +x:1 +茶油 1 +x:1 +媚俗 1 +x:1 +活祭 1 +x:1 +话外音 1 +x:1 +孝敬日 1 +x:1 +签名者 1 +x:1 +非亲胜亲 1 +x:1 +对称轴 1 +x:1 +运球 1 +x:1 +小个儿 1 +x:1 +卡介苗 1 +x:1 +巴山 1 +x:1 +西夏 1 +x:1 +有轨 1 +x:1 +栽种期 1 +x:1 +辛亥 1 +x:1 +巴黎市 1 +x:1 +鱼水情深 1 +x:1 +活动周 1 +x:1 +种棉节 1 +x:1 +迢迢 1 +x:1 +流浪儿 1 +x:1 +区内 1 +x:1 +碱渣土 1 +x:1 +风扇车 1 +x:1 +胆星 1 +x:1 +全方向 1 +x:1 +舌音 1 +x:1 +评论家 1 +x:1 +扩张型 1 +x:1 +扶强 1 +x:1 +叙事学 1 +x:1 +诗体 1 +x:1 +资料片 1 +x:1 +妈湾 1 +x:1 +交战区 1 +x:1 +乱石山村 1 +x:1 +集体性 1 +x:1 +因式 1 +x:1 +拉拉队 1 +x:1 +脱粒 1 +x:1 +大案要案 1 +x:1 +非市场 1 +x:1 +坏话 1 +x:1 +西奈 1 +x:1 +清远市 1 +x:1 +战争贩子 1 +x:1 +卖猪者 1 +x:1 +充分性 1 +x:1 +巴州 1 +x:1 +线路 1 +x:1 +人犯 1 +x:1 +迎头 1 +x:1 +尚书学 1 +x:1 +总理府 1 +x:1 +绞刑 1 +x:1 +骂不还口 1 +x:1 +科班出身 1 +x:1 +万福 1 +x:1 +坐地分赃 1 +x:1 +绞刀 1 +x:1 +制帽 1 +x:1 +排演 1 +x:1 +参议会 1 +x:1 +完税 1 +x:1 +爆肚儿 1 +x:1 +老寨 1 +x:1 +巴巴 1 +x:1 +假货 1 +x:1 +占上风 1 +x:1 +阴凉处 1 +x:1 +正月十四 1 +x:1 +代表队 1 +x:1 +核素 1 +x:1 +相比 1 +x:1 +姨表 1 +x:1 +老宅 1 +x:1 +滑腻 1 +x:1 +地灵人杰 1 +x:1 +辅币 1 +x:1 +抢滩 1 +x:1 +通论式 1 +x:1 +高风险 1 +x:1 +衰老 1 +x:1 +部门级 1 +x:1 +人性美 1 +x:1 +中文版 1 +x:1 +老实 1 +x:1 +三轮儿 1 +x:1 +魏晋 1 +x:1 +少儿式 1 +x:1 +实践史 1 +x:1 +无余量 1 +x:1 +好人家 1 +x:1 +易门 1 +x:1 +老家 1 +x:1 +检场 1 +x:1 +封锁线 1 +x:1 +前南峪村 1 +x:1 +聘用期 1 +x:1 +西壁 1 +x:1 +加德满都 1 +x:1 +通常国会 1 +x:1 +北大西洋 1 +x:1 +病原体 1 +x:1 +袜子 1 +x:1 +制件 1 +x:1 +三荒 1 +x:1 +渍 4 +x:4 +精贵 1 +x:1 +条据 1 +x:1 +老子 1 +x:1 +喝斥 1 +x:1 +因巴巴区 1 +x:1 +耳穴 1 +x:1 +奥克兰 1 +x:1 +谡 1 +x:1 +刀马旦 1 +x:1 +最前沿 1 +x:1 +少儿心 1 +x:1 +吉萨 1 +x:1 +每球 1 +x:1 +构造 1 +x:1 +功劳簿 1 +x:1 +轴瓦 1 +x:1 +宠辱不惊 1 +x:1 +怎么办 1 +x:1 +足够 1 +x:1 +屁 1 +x:1 +裸子植物 1 +x:1 +混合 1 +x:1 +运货舱 1 +x:1 +分光膜 1 +x:1 +心满意足 1 +x:1 +肉铺 1 +x:1 +校勘学 1 +x:1 +胞胎 1 +x:1 +心术 1 +x:1 +偷梁换柱 1 +x:1 +精赤 1 +x:1 +呼吁书 1 +x:1 +旁遮普邦 1 +x:1 +正规军 1 +x:1 +污 24 +x:24 +宣传点 1 +x:1 +海庄 1 +x:1 +捷报频传 1 +x:1 +单塔 1 +x:1 +导电性 1 +x:1 +过牧 1 +x:1 +关 464 +x:464 +利益 1 +x:1 +石沉大海 1 +x:1 +铜器 1 +x:1 +铜矿砂 1 +x:1 +起重机 1 +x:1 +农机手 1 +x:1 +议事权 1 +x:1 +九点钟 1 +x:1 +三胞 1 +x:1 +西家 1 +x:1 +竹箫 1 +x:1 +扁桃体 1 +x:1 +利用 1 +x:1 +屈折语 1 +x:1 +西宫 1 +x:1 +破堰 1 +x:1 +辉耀 1 +x:1 +冷却器 1 +x:1 +漫无止境 1 +x:1 +新合村 1 +x:1 +衰草 1 +x:1 +交道口 1 +x:1 +腐臭 1 +x:1 +排气 1 +x:1 +市场化 1 +x:1 +多多益善 1 +x:1 +三能 1 +x:1 +四川省 1 +x:1 +语义哲学 1 +x:1 +粪坑 1 +x:1 +集体拳 1 +x:1 +箭垛 1 +x:1 +西安 1 +x:1 +伶 2 +x:2 +土窑洞 1 +x:1 +制法 1 +x:1 +西宁 1 +x:1 +太平村 1 +x:1 +参预 1 +x:1 +老境 1 +x:1 +拳道 1 +x:1 +岁月 1 +x:1 +热量 1 +x:1 +护肘 1 +x:1 +明月山村 1 +x:1 +旁听生 1 +x:1 +摔跤队 1 +x:1 +六仙桌 1 +x:1 +无理性 1 +x:1 +播撒 1 +x:1 +停职 1 +x:1 +粪土 1 +x:1 +岁末 1 +x:1 +走火入魔 1 +x:1 +入超 1 +x:1 +颤抖 1 +x:1 +如获至宝 1 +x:1 +有趣 1 +x:1 +重度 1 +x:1 +农机户 1 +x:1 +印第安纳 1 +x:1 +倒地 1 +x:1 +织成 1 +x:1 +品貌 1 +x:1 +竹箱 1 +x:1 +长清县 1 +x:1 +重建论 1 +x:1 +莫斯科 1 +x:1 +风起云涌 1 +x:1 +护灵 1 +x:1 +富集 1 +x:1 +知彼知己 1 +x:1 +临桂县 1 +x:1 +据点 1 +x:1 +优胜奖 1 +x:1 +树行子 1 +x:1 +丰宏 1 +x:1 +编图者 1 +x:1 +入场式 1 +x:1 +礼赞图 1 +x:1 +洛南 1 +x:1 +铁桶 1 +x:1 +盖城 1 +x:1 +市场司 1 +x:1 +笃定 1 +x:1 +不亢不卑 1 +x:1 +听筒 1 +x:1 +笃实 1 +x:1 +挖沙者 1 +x:1 +费钱 1 +x:1 +西学 1 +x:1 +三者 1 +x:1 +游览图 1 +x:1 +无可讳言 1 +x:1 +东莞市 1 +x:1 +中央集权 1 +x:1 +披红戴花 1 +x:1 +打落水狗 1 +x:1 +单孔 1 +x:1 +单字 1 +x:1 +浪子 1 +x:1 +单子 1 +x:1 +患病 1 +x:1 +西子 1 +x:1 +排泄 1 +x:1 +音乐周 1 +x:1 +黄包车 1 +x:1 +送样 1 +x:1 +集体户 1 +x:1 +倒坍 1 +x:1 +有责 1 +x:1 +非金属 1 +x:1 +席梦思 1 +x:1 +避雷针 1 +x:1 +支词 1 +x:1 +授徒 1 +x:1 +甲乙级 1 +x:1 +审校 1 +x:1 +逊 12 +x:12 +胰岛素 1 +x:1 +扎什伦布 1 +x:1 +猎人 1 +x:1 +醒狮贺岁 1 +x:1 +宣传牌 1 +x:1 +故事会 1 +x:1 +远征 1 +x:1 +融智 1 +x:1 +维妙维肖 1 +x:1 +防地 1 +x:1 +萌动 1 +x:1 +下酒 1 +x:1 +品质 1 +x:1 +柿子皮 1 +x:1 +指挥长 1 +x:1 +茶漏 1 +x:1 +接收机 1 +x:1 +三自 1 +x:1 +电器道 1 +x:1 +黄泥冲 1 +x:1 +陨落 1 +x:1 +远志 1 +x:1 +一点儿 1 +x:1 +外翼 1 +x:1 +老妇 1 +x:1 +品赏 1 +x:1 +刮片 1 +x:1 +油市 1 +x:1 +正规化 1 +x:1 +厚望 1 +x:1 +展示窗 1 +x:1 +肋膜炎 1 +x:1 +岁星 1 +x:1 +雨花区 1 +x:1 +精进 1 +x:1 +反冲力 1 +x:1 +老妪 1 +x:1 +工业史 1 +x:1 +人烟 1 +x:1 +晓之以利 1 +x:1 +厚朴 1 +x:1 +铁砂弹 1 +x:1 +眼里 1 +x:1 +撕开 1 +x:1 +滇北 1 +x:1 +袜套 1 +x:1 +恸哭 1 +x:1 +暴走族 1 +x:1 +护照 1 +x:1 +工业化 1 +x:1 +声名狼藉 1 +x:1 +怕 347 +x:347 +枳实 1 +x:1 +马厩 1 +x:1 +贪便宜 1 +x:1 +责任区 1 +x:1 +人尽其才 1 +x:1 +工业区 1 +x:1 +蜥脚类 1 +x:1 +眉山 1 +x:1 +排涝 1 +x:1 +K 3 +x:3 +手下人 1 +x:1 +柜机 1 +x:1 +副博士 1 +x:1 +胆敢 1 +x:1 +生活观 1 +x:1 +准备金率 1 +x:1 +巴彦 1 +x:1 +鲜果 1 +x:1 +还嘴 1 +x:1 +滇南 1 +x:1 +怨天尤人 1 +x:1 +客观性 1 +x:1 +东窗事发 1 +x:1 +泉城 1 +x:1 +手到擒拿 1 +x:1 +捕捞业 1 +x:1 +防城 1 +x:1 +特赦 1 +x:1 +尊老爱老 1 +x:1 +逗逗哏 1 +x:1 +净利润 1 +x:1 +斑斑 1 +x:1 +斑斓 1 +x:1 +艺术类 1 +x:1 +阵容 1 +x:1 +老大 1 +x:1 +老天 1 +x:1 +老夫 1 +x:1 +老太 1 +x:1 +骄慢 1 +x:1 +岁暮 1 +x:1 +老头 1 +x:1 +抗极压性 1 +x:1 +飞毛腿 1 +x:1 +无虞 1 +x:1 +湘鄂赣 1 +x:1 +眼明手快 1 +x:1 +西施 1 +x:1 +单方 1 +x:1 +西方 1 +x:1 +煅石灰 1 +x:1 +黄荆 1 +x:1 +农机局 1 +x:1 +竹篾 1 +x:1 +客套话 1 +x:1 +西新 1 +x:1 +推磨 1 +x:1 +杆塔 1 +x:1 +后视镜 1 +x:1 +生命线 1 +x:1 +人才辈出 1 +x:1 +心碎 1 +x:1 +学阀 1 +x:1 +排列 1 +x:1 +声价 1 +x:1 +河贵乡 1 +x:1 +贯注 1 +x:1 +讨人喜欢 1 +x:1 +铜殿 1 +x:1 +龟头 1 +x:1 +托拉斯 1 +x:1 +浓 134 +x:134 +话剧 1 +x:1 +岩羊 1 +x:1 +筑巢者 1 +x:1 +西文 1 +x:1 +都安 1 +x:1 +凤凰岭村 1 +x:1 +原装 1 +x:1 +长期性 1 +x:1 +情报社 1 +x:1 +扬名 1 +x:1 +无实物 1 +x:1 +电工 1 +x:1 +玉石 1 +x:1 +大马力 1 +x:1 +志在必得 1 +x:1 +居高不下 1 +x:1 +单日 1 +x:1 +爹地 1 +x:1 +宁城县 1 +x:1 +新界 1 +x:1 +徜徉 1 +x:1 +益菌 1 +x:1 +统帅部 1 +x:1 +教书匠 1 +x:1 +花边 1 +x:1 +市厅级 1 +x:1 +冗杂 1 +x:1 +无可比拟 1 +x:1 +绵绵 1 +x:1 +规格 1 +x:1 +肖形印 1 +x:1 +悔棋 1 +x:1 +招认 1 +x:1 +双休日 1 +x:1 +人俑 1 +x:1 +话别 1 +x:1 +李白 1 +x:1 +拌和机 1 +x:1 +声乐 1 +x:1 +繁文缛节 1 +x:1 +测报 1 +x:1 +迂者 1 +x:1 +人伦 1 +x:1 +译音 1 +x:1 +新疆 1 +x:1 +罗赖马 1 +x:1 +袁州 1 +x:1 +美术班 1 +x:1 +厢 6 +x:6 +呈缴 1 +x:1 +花轴 1 +x:1 +保定市 1 +x:1 +诲淫诲盗 1 +x:1 +积重难返 1 +x:1 +茭 1 +x:1 +侵犯 1 +x:1 +花轿 1 +x:1 +中文台 1 +x:1 +粗腿病 1 +x:1 +欢迎词 1 +x:1 +花车 1 +x:1 +个儿 1 +x:1 +赢面 1 +x:1 +赫泽普丁 1 +x:1 +找头 1 +x:1 +单数 1 +x:1 +弦切角 1 +x:1 +沾恩 1 +x:1 +哂笑 1 +x:1 +没头没脑 1 +x:1 +收购制 1 +x:1 +平英团 1 +x:1 +迎 236 +x:236 +竹篓 1 +x:1 +红水河畔 1 +x:1 +明治维新 1 +x:1 +要强 1 +x:1 +越剧界 1 +x:1 +香蕉苹果 1 +x:1 +人工呼吸 1 +x:1 +痴情不移 1 +x:1 +老是 1 +x:1 +西敏 1 +x:1 +从容不迫 1 +x:1 +黄莺 1 +x:1 +一局制 1 +x:1 +凶 10 +x:10 +寻旧 1 +x:1 +物有所值 1 +x:1 +人体 1 +x:1 +推移 1 +x:1 +粲然可观 1 +x:1 +晚辈 1 +x:1 +兑换点 1 +x:1 +美术片 1 +x:1 +人亡 1 +x:1 +根雕家 1 +x:1 +诽谤罪 1 +x:1 +扫频 1 +x:1 +灼面 1 +x:1 +损失险 1 +x:1 +人人 1 +x:1 +就义 1 +x:1 +过于 1 +x:1 +小心翼翼 1 +x:1 +多云间阴 1 +x:1 +洛河 1 +x:1 +国防部 1 +x:1 +集体工 1 +x:1 +图雷斯基 1 +x:1 +人事 1 +x:1 +过人 1 +x:1 +制成 1 +x:1 +油田 1 +x:1 +罗山 1 +x:1 +竹笠 1 +x:1 +黄色 1 +x:1 +警示 1 +x:1 +季风气候 1 +x:1 +人们 1 +x:1 +一穷二白 1 +x:1 +排印 1 +x:1 +儿女 1 +x:1 +欢眉喜眼 1 +x:1 +二连冠 1 +x:1 +独院儿 1 +x:1 +一表人才 1 +x:1 +考生 1 +x:1 +茶具 1 +x:1 +撑杆跳高 1 +x:1 +过从 1 +x:1 +贞节 1 +x:1 +老枝 1 +x:1 +式式 1 +x:1 +门庭冷落 1 +x:1 +债务者 1 +x:1 +司门前镇 1 +x:1 +戏剧系 1 +x:1 +不自量力 1 +x:1 +痈疽 1 +x:1 +龙凤呈祥 1 +x:1 +睹物思人 1 +x:1 +无脊椎 1 +x:1 +紧促 1 +x:1 +部里 1 +x:1 +批林批孔 1 +x:1 +紧俏 1 +x:1 +排协 1 +x:1 +无理式 1 +x:1 +竹笼 1 +x:1 +胆子 1 +x:1 +人中 1 +x:1 +条形 1 +x:1 +下酒菜 1 +x:1 +学费 1 +x:1 +打草惊蛇 1 +x:1 +入院 1 +x:1 +税贸 1 +x:1 +税费 1 +x:1 +车轱辘 1 +x:1 +授意 1 +x:1 +人为 1 +x:1 +博洛尼亚 1 +x:1 +打情骂俏 1 +x:1 +眉批 1 +x:1 +霉天 1 +x:1 +北美局 1 +x:1 +倒树 1 +x:1 +窑坡 1 +x:1 +出警率 1 +x:1 +就任 1 +x:1 +扶手 1 +x:1 +话中有话 1 +x:1 +人丁 1 +x:1 +贺岁卡 1 +x:1 +流浪汉 1 +x:1 +劣等者 1 +x:1 +福州路 1 +x:1 +税负 1 +x:1 +人世 1 +x:1 +茶农 1 +x:1 +老板 1 +x:1 +疏通 1 +x:1 +比利时 1 +x:1 +式微 1 +x:1 +旷古 1 +x:1 +价格牌 1 +x:1 +苏绣 1 +x:1 +死扣儿 1 +x:1 +竹笋 1 +x:1 +被告席 1 +x:1 +词韵 1 +x:1 +药具 1 +x:1 +乡镇场 1 +x:1 +排口 1 +x:1 +侧目 1 +x:1 +萦心触怀 1 +x:1 +画眉 1 +x:1 +一话 1 +x:1 +札幌市 1 +x:1 +市场法 1 +x:1 +税赋 1 +x:1 +黄芪 1 +x:1 +黄芩 1 +x:1 +晚车 1 +x:1 +入阁 1 +x:1 +老本 1 +x:1 +一准儿 1 +x:1 +入队 1 +x:1 +种植圃 1 +x:1 +众生百态 1 +x:1 +固 42 +x:42 +老朽 1 +x:1 +撤资 1 +x:1 +黄花 1 +x:1 +远投 1 +x:1 +鱼死网破 1 +x:1 +入门 1 +x:1 +扶贫办 1 +x:1 +国统区 1 +x:1 +峡江县 1 +x:1 +音乐指导 1 +x:1 +单线 1 +x:1 +咏 24 +x:24 +收款员 1 +x:1 +遗传工程 1 +x:1 +撕扯 1 +x:1 +慈母 1 +x:1 +疗养团 1 +x:1 +祝福 1 +x:1 +浩子口 1 +x:1 +西枝 1 +x:1 +自顾不暇 1 +x:1 +戈家沟村 1 +x:1 +活蹦乱跳 1 +x:1 +竹笛 1 +x:1 +估量 1 +x:1 +盟旗 1 +x:1 +新面型 1 +x:1 +兑换率 1 +x:1 +疑案 1 +x:1 +泥块 1 +x:1 +泥坑 1 +x:1 +排偶 1 +x:1 +故事片 1 +x:1 +袍 2 +x:2 +一行 1 +x:1 +寄送 1 +x:1 +结 246 +x:246 +统管共用 1 +x:1 +漏水 1 +x:1 +吼叫 1 +x:1 +明镜儿 1 +x:1 +姚坪 1 +x:1 +相和 1 +x:1 +历史感 1 +x:1 +规模 1 +x:1 +泥土 1 +x:1 +清晰可见 1 +x:1 +以期 1 +x:1 +犁头 1 +x:1 +骗赔案 1 +x:1 +漏气 1 +x:1 +克雅氏症 1 +x:1 +征鸿 1 +x:1 +老办法 1 +x:1 +趋利避害 1 +x:1 +集疏运 1 +x:1 +县联社 1 +x:1 +单机 1 +x:1 +金蔷薇 1 +x:1 +上党梆子 1 +x:1 +闻鸡起舞 1 +x:1 +巴扎 1 +x:1 +胃脘 1 +x:1 +浪木 1 +x:1 +窥破 1 +x:1 +在线 1 +x:1 +陆架区 1 +x:1 +少儿情 1 +x:1 +钤 1 +x:1 +猎猎 1 +x:1 +老百姓 1 +x:1 +远房 1 +x:1 +织带 1 +x:1 +西服 1 +x:1 +个协 1 +x:1 +还款 1 +x:1 +老干部局 1 +x:1 +歇斯底里 1 +x:1 +碾米厂 1 +x:1 +悲剧式 1 +x:1 +送命 1 +x:1 +线段 1 +x:1 +联帮 1 +x:1 +无座力炮 1 +x:1 +单板 1 +x:1 +硫酸钾 1 +x:1 +屉子 1 +x:1 +系列机 1 +x:1 +开发性 1 +x:1 +泥垢 1 +x:1 +滑车 1 +x:1 +花铲 1 +x:1 +三家村 1 +x:1 +圆乎乎 1 +x:1 +浏阳市 1 +x:1 +单条 1 +x:1 +锯末 1 +x:1 +芳龄 1 +x:1 +南岗 1 +x:1 +相合 1 +x:1 +加班率 1 +x:1 +相同 1 +x:1 +小村子 1 +x:1 +丝都 1 +x:1 +西村 1 +x:1 +胃腺 1 +x:1 +白蛇传 1 +x:1 +花账 1 +x:1 +花贩 1 +x:1 +牛郎织女 1 +x:1 +相向 1 +x:1 +投诚 1 +x:1 +傻干 1 +x:1 +蒿子秆 1 +x:1 +哪儿 1 +x:1 +猎犬 1 +x:1 +要得 1 +x:1 +液果 1 +x:1 +疏解 1 +x:1 +骸骨 1 +x:1 +里斯本 1 +x:1 +货区楼 1 +x:1 +转悲为喜 1 +x:1 +花链 1 +x:1 +老旦 1 +x:1 +老早 1 +x:1 +弱酸 1 +x:1 +胃肠 1 +x:1 +乌土沟 1 +x:1 +词锋 1 +x:1 +轻工业品 1 +x:1 +生还 1 +x:1 +防欠 1 +x:1 +哆嗦 1 +x:1 +洛溪 1 +x:1 +紫竹 1 +x:1 +银线 1 +x:1 +含义 1 +x:1 +择业观 1 +x:1 +磐田 1 +x:1 +掘进点 1 +x:1 +罗布 1 +x:1 +隔河岩 1 +x:1 +南三环 1 +x:1 +千伏级 1 +x:1 +酌 6 +x:6 +傻帽 1 +x:1 +业障 1 +x:1 +排入 1 +x:1 +巴掌 1 +x:1 +四通八达 1 +x:1 +湖南团 1 +x:1 +紫苏叶 1 +x:1 +学运 1 +x:1 +绿绿葱葱 1 +x:1 +上钩者 1 +x:1 +快攻手 1 +x:1 +潜山 1 +x:1 +计划费 1 +x:1 +扶贫史 1 +x:1 +理论 1 +x:1 +欠税 1 +x:1 +推算 1 +x:1 +新港 1 +x:1 +荫翳 1 +x:1 +漏洞 1 +x:1 +防止 1 +x:1 +酝酿 1 +x:1 +慌忙 1 +x:1 +扬场 1 +x:1 +猎狗 1 +x:1 +二号机 1 +x:1 +百分数 1 +x:1 +写入 1 +x:1 +老爷子 1 +x:1 +市长级 1 +x:1 +错 193 +x:193 +夜明星 1 +x:1 +摩托船 1 +x:1 +大会党 1 +x:1 +多位点型 1 +x:1 +扶贫区 1 +x:1 +收息率 1 +x:1 +情报站 1 +x:1 +茶厅 1 +x:1 +容北村 1 +x:1 +健身器 1 +x:1 +称霸 1 +x:1 +相商 1 +x:1 +一箭双雕 1 +x:1 +乘幂 1 +x:1 +西昌 1 +x:1 +送料机 1 +x:1 +尘埃盘 1 +x:1 +大坝标 1 +x:1 +无计可施 1 +x:1 +贝雕 1 +x:1 +京山县 1 +x:1 +围栏 1 +x:1 +行车证 1 +x:1 +灰暗 1 +x:1 +柜子 1 +x:1 +大踏步 1 +x:1 +疗养地 1 +x:1 +化疗 1 +x:1 +单晶 1 +x:1 +一角 1 +x:1 +寐 1 +x:1 +厚实 1 +x:1 +无与伦比 1 +x:1 +茶叶 1 +x:1 +个别 1 +x:1 +盈眶 1 +x:1 +企业 1 +x:1 +铜案 1 +x:1 +花谱 1 +x:1 +竹筒 1 +x:1 +棘轮 1 +x:1 +新科学 1 +x:1 +打算盘 1 +x:1 +济宁 1 +x:1 +农安县 1 +x:1 +摩托艇 1 +x:1 +金龙 1 +x:1 +西晋 1 +x:1 +胆大 1 +x:1 +报价声 1 +x:1 +茶密村 1 +x:1 +疾风劲草 1 +x:1 +招远 1 +x:1 +污染源 1 +x:1 +叫做 1 +x:1 +菊花脑 1 +x:1 +防水 1 +x:1 +判 92 +x:92 +地头蛇 1 +x:1 +兴教 1 +x:1 +窝点 1 +x:1 +泉水 1 +x:1 +万户千家 1 +x:1 +向隅而泣 1 +x:1 +老拳 1 +x:1 +香喷的 1 +x:1 +不信任案 1 +x:1 +錾刀 1 +x:1 +汉城市 1 +x:1 +公交化 1 +x:1 +相助 1 +x:1 +冷却水 1 +x:1 +出租业 1 +x:1 +不预则废 1 +x:1 +黄蜂 1 +x:1 +探索性 1 +x:1 +潜存 1 +x:1 +防汛 1 +x:1 +桐子花 1 +x:1 +电视机厂 1 +x:1 +流失量 1 +x:1 +替换 1 +x:1 +盏盏 1 +x:1 +吕庄村 1 +x:1 +残疾人 1 +x:1 +富裕兵 1 +x:1 +依依难舍 1 +x:1 +日切村 1 +x:1 +黄蜡 1 +x:1 +轲 6 +x:6 +商检局 1 +x:1 +辅机 1 +x:1 +泉池 1 +x:1 +阵性 1 +x:1 +邯峰 1 +x:1 +预备生 1 +x:1 +乌合之众 1 +x:1 +播幅 1 +x:1 +允 6 +x:6 +考 80 +x:80 +妥协性 1 +x:1 +展主 1 +x:1 +内饰件 1 +x:1 +骄娇 1 +x:1 +老手 1 +x:1 +九死一生 1 +x:1 +决一死战 1 +x:1 +防沙 1 +x:1 +办公桌 1 +x:1 +鲍鱼 1 +x:1 +液态 1 +x:1 +中西药 1 +x:1 +糖衣炮弹 1 +x:1 +进攻性 1 +x:1 +塞伦盖蒂 1 +x:1 +安全玻璃 1 +x:1 +三步一踏 1 +x:1 +笑罗汉 1 +x:1 +武打片 1 +x:1 +一身 1 +x:1 +宽以待己 1 +x:1 +运城市 1 +x:1 +年夜饭 1 +x:1 +岁差 1 +x:1 +黄明胶 1 +x:1 +几多 1 +x:1 +芳香 1 +x:1 +返抵 1 +x:1 +烟雾 1 +x:1 +非作战 1 +x:1 +目指气使 1 +x:1 +避乱 1 +x:1 +老成 1 +x:1 +探空火箭 1 +x:1 +略 199 +x:199 +以一当十 1 +x:1 +千赫 1 +x:1 +金光闪闪 1 +x:1 +试飞 1 +x:1 +学衔 1 +x:1 +跑断腿 1 +x:1 +仅只 1 +x:1 +送别 1 +x:1 +相切 1 +x:1 +禁用语 1 +x:1 +懒汉式 1 +x:1 +考点 1 +x:1 +倒流 1 +x:1 +龟巢 1 +x:1 +窝火 1 +x:1 +知识性 1 +x:1 +攀 47 +x:47 +收款单 1 +x:1 +太 1254 +x:1254 +藏身 1 +x:1 +骂名 1 +x:1 +餐船 1 +x:1 +工运史 1 +x:1 +排场 1 +x:1 +『 4064 +x:4064 +湖色 1 +x:1 +科布多省 1 +x:1 +粪池 1 +x:1 +唠 2 +x:2 +冒险者 1 +x:1 +相反 1 +x:1 +远方 1 +x:1 +火字旁儿 1 +x:1 +疏远 1 +x:1 +年中报 1 +x:1 +上案制 1 +x:1 +防洪 1 +x:1 +疏运 1 +x:1 +糯米纸 1 +x:1 +副团职 1 +x:1 +面包篮 1 +x:1 +授旗 1 +x:1 +考试题 1 +x:1 +奶牛场 1 +x:1 +魔 8 +x:8 +矮生 1 +x:1 +回车键 1 +x:1 +政通 1 +x:1 +赞赏不已 1 +x:1 +见习 1 +x:1 +紫云英 1 +x:1 +忧 113 +x:113 +巴方 1 +x:1 +留一手 1 +x:1 +油品店 1 +x:1 +龟山 1 +x:1 +排坛 1 +x:1 +蛤蟆泉村 1 +x:1 +容电器 1 +x:1 +租赁业 1 +x:1 +告一段落 1 +x:1 +庸劣 1 +x:1 +一轻 1 +x:1 +地下党员 1 +x:1 +岁尾 1 +x:1 +倒水 1 +x:1 +效益水 1 +x:1 +三胞胎 1 +x:1 +利人 1 +x:1 +半山 1 +x:1 +情报系 1 +x:1 +活塞杆 1 +x:1 +防涝 1 +x:1 +只身 1 +x:1 +皮划艇 1 +x:1 +见于 1 +x:1 +速生林 1 +x:1 +漂洗 1 +x:1 +泉涌 1 +x:1 +同路人 1 +x:1 +坑木 1 +x:1 +扶智 1 +x:1 +翻涌 1 +x:1 +四合院 1 +x:1 +青龙峪村 1 +x:1 +征缴率 1 +x:1 +赌资 1 +x:1 +私车族 1 +x:1 +京剧界 1 +x:1 +收款台 1 +x:1 +馨 18 +x:18 +实感 1 +x:1 +衣料 1 +x:1 +况味 1 +x:1 +条子 1 +x:1 +济州 1 +x:1 +利于 1 +x:1 +继配 1 +x:1 +全麦草浆 1 +x:1 +明星团 1 +x:1 +赌账 1 +x:1 +洛桑 1 +x:1 +制霉菌素 1 +x:1 +漂流 1 +x:1 +结核菌素 1 +x:1 +蔚为壮观 1 +x:1 +瘸腿 1 +x:1 +演职员工 1 +x:1 +老挝 1 +x:1 +骄子 1 +x:1 +双宾语 1 +x:1 +织女 1 +x:1 +异化作用 1 +x:1 +漂浮 1 +x:1 +建筑学系 1 +x:1 +刀斧手 1 +x:1 +展位 1 +x:1 +全等形 1 +x:1 +椭圆体 1 +x:1 +旁听人 1 +x:1 +阔阔的 1 +x:1 +美术界 1 +x:1 +影壁山村 1 +x:1 +防渗 1 +x:1 +消磁界 1 +x:1 +控制 1 +x:1 +吹捧 1 +x:1 +情报署 1 +x:1 +苗苗 1 +x:1 +正轨 1 +x:1 +脚面 1 +x:1 +咕噜 1 +x:1 +法政 1 +x:1 +傻子 1 +x:1 +雕塑像 1 +x:1 +煤焦 1 +x:1 +书简 1 +x:1 +箩 2 +x:2 +急风暴雨 1 +x:1 +先归 1 +x:1 +情报网 1 +x:1 +征马 1 +x:1 +三门峡市 1 +x:1 +单排 1 +x:1 +妈咪 1 +x:1 +古生物 1 +x:1 +一锤定音 1 +x:1 +萧规曹随 1 +x:1 +眶 1 +x:1 +美餐 1 +x:1 +纱门 1 +x:1 +子午莲 1 +x:1 +家父 1 +x:1 +凝脂 1 +x:1 +太湖县 1 +x:1 +苗节 1 +x:1 +睡梦 1 +x:1 +晚装 1 +x:1 +市县级 1 +x:1 +踹 4 +x:4 +会议所 1 +x:1 +乙种粒子 1 +x:1 +褐煤 1 +x:1 +阅报栏 1 +x:1 +美饰 1 +x:1 +阵线 1 +x:1 +空管史 1 +x:1 +胜负手 1 +x:1 +无假冒 1 +x:1 +万众瞩目 1 +x:1 +羌族 1 +x:1 +静晤室 1 +x:1 +物价局 1 +x:1 +旭 49 +x:49 +买 1325 +x:1325 +十字花科 1 +x:1 +严以自律 1 +x:1 +扶贫团 1 +x:1 +盂县 1 +x:1 +风调雨顺 1 +x:1 +察南 1 +x:1 +泉源 1 +x:1 +头等舱 1 +x:1 +妇人 1 +x:1 +葵涌 1 +x:1 +唇裂 1 +x:1 +钨丝灯 1 +x:1 +他妈的 1 +x:1 +方兴未艾 1 +x:1 +检波 1 +x:1 +部队 1 +x:1 +金条 1 +x:1 +铜活 1 +x:1 +多用机 1 +x:1 +试验 1 +x:1 +巡回 1 +x:1 +收购员 1 +x:1 +柔软体操 1 +x:1 +老态 1 +x:1 +累垮 1 +x:1 +寓言 1 +x:1 +察北 1 +x:1 +经销商 1 +x:1 +阿拉伯化 1 +x:1 +租赁 1 +x:1 +茶园 1 +x:1 +心神不宁 1 +x:1 +繁育期 1 +x:1 +单据 1 +x:1 +辅料 1 +x:1 +剖宫产率 1 +x:1 +五味瓶 1 +x:1 +花红柳绿 1 +x:1 +罗定 1 +x:1 +胆小 1 +x:1 +五里河 1 +x:1 +化为乌有 1 +x:1 +每位 1 +x:1 +入 942 +x:942 +命运 1 +x:1 +招贴 1 +x:1 +厚度 1 +x:1 +沪东厂 1 +x:1 +鱼 251 +x:251 +乔治敦 1 +x:1 +松紧带 1 +x:1 +冯家镇 1 +x:1 +拉普拉斯 1 +x:1 +文风不动 1 +x:1 +远景 1 +x:1 +老总 1 +x:1 +纱锭 1 +x:1 +轧辊 1 +x:1 +各展所长 1 +x:1 +部际 1 +x:1 +延吉市 1 +x:1 +推翻 1 +x:1 +茧丝绸 1 +x:1 +表现 1 +x:1 +党工委 1 +x:1 +每亩 1 +x:1 +检测 1 +x:1 +型 71 +x:71 +秭归 1 +x:1 +怎么样 1 +x:1 +锦绣 1 +x:1 +每人 1 +x:1 +高妙 1 +x:1 +茶场 1 +x:1 +播州 1 +x:1 +谈情说爱 1 +x:1 +轮换工 1 +x:1 +干审处 1 +x:1 +衣不蔽体 1 +x:1 +正定县 1 +x:1 +一贯 1 +x:1 +丝锥 1 +x:1 +潜堤 1 +x:1 +旗绳 1 +x:1 +登机 1 +x:1 +漆包线 1 +x:1 +吹打 1 +x:1 +黄葵 1 +x:1 +教师爷 1 +x:1 +继任 1 +x:1 +木栓层 1 +x:1 +羊毛绒 1 +x:1 +学说 1 +x:1 +评论性 1 +x:1 +扫黄 1 +x:1 +巴林 1 +x:1 +汽修厂 1 +x:1 +单拳 1 +x:1 +厘定 1 +x:1 +扫黑 1 +x:1 +新片 1 +x:1 +失之偏颇 1 +x:1 +拉煤车 1 +x:1 +新版 1 +x:1 +环保部 1 +x:1 +自放电率 1 +x:1 +紫红 1 +x:1 +心眼儿 1 +x:1 +万夫莫当 1 +x:1 +为人作嫁 1 +x:1 +相册 1 +x:1 +茶坊 1 +x:1 +沾染 1 +x:1 +讪笑 1 +x:1 +野 61 +x:61 +致密 1 +x:1 +慈溪 1 +x:1 +紫荆堤 1 +x:1 +一起 1 +x:1 +学识 1 +x:1 +花被 1 +x:1 +沪市 1 +x:1 +隶圣 1 +x:1 +每个 1 +x:1 +相公 1 +x:1 +气雾剂 1 +x:1 +远期 1 +x:1 +智慧 1 +x:1 +远望 1 +x:1 +还清 1 +x:1 +堕 2 +x:2 +罹难 1 +x:1 +柜式 1 +x:1 +富余票 1 +x:1 +北医大 1 +x:1 +褐炭 1 +x:1 +鞠 35 +x:35 +全区性 1 +x:1 +胜出一筹 1 +x:1 +送入 1 +x:1 +德化县 1 +x:1 +紧 312 +x:312 +雍容 1 +x:1 +捐助式 1 +x:1 +精力充沛 1 +x:1 +随行就市 1 +x:1 +爽目 1 +x:1 +花衫 1 +x:1 +巴望 1 +x:1 +川黄液 1 +x:1 +厚待 1 +x:1 +增加量 1 +x:1 +岁序 1 +x:1 +生角 1 +x:1 +宣叙调 1 +x:1 +万古长青 1 +x:1 +条头 1 +x:1 +授权 1 +x:1 +临朐镇 1 +x:1 +入选 1 +x:1 +措玛 1 +x:1 +萧瑟 1 +x:1 +加盟店 1 +x:1 +花里胡梢 1 +x:1 +单打 1 +x:1 +被害人 1 +x:1 +山东快书 1 +x:1 +黄蒿 1 +x:1 +测旗 1 +x:1 +秦代 1 +x:1 +美食 1 +x:1 +骄女 1 +x:1 +融入 1 +x:1 +眉毛 1 +x:1 +铜排 1 +x:1 +军管会 1 +x:1 +看破红尘 1 +x:1 +同学录 1 +x:1 +农机员 1 +x:1 +灰浆 1 +x:1 +紫燕 1 +x:1 +不结之缘 1 +x:1 +盱江镇 1 +x:1 +悔悟 1 +x:1 +茶堂 1 +x:1 +爵溪镇 1 +x:1 +浪涛 1 +x:1 +棉坯布 1 +x:1 +区间 1 +x:1 +一般 1 +x:1 +兽医师 1 +x:1 +滥觞 1 +x:1 +法衣 1 +x:1 +抄纸 1 +x:1 +交通法 1 +x:1 +邻 13 +x:13 +命脉 1 +x:1 +潜在 1 +x:1 +红五军团 1 +x:1 +发案数 1 +x:1 +前哨战 1 +x:1 +养羊业 1 +x:1 +岩石 1 +x:1 +胆力 1 +x:1 +逻辑 1 +x:1 +飞行量 1 +x:1 +餐车 1 +x:1 +聘用制 1 +x:1 +织品 1 +x:1 +走马观花 1 +x:1 +绞杀 1 +x:1 +苇席 1 +x:1 +小河镇 1 +x:1 +投资业 1 +x:1 +河外星系 1 +x:1 +填方路基 1 +x:1 +题海 1 +x:1 +部风 1 +x:1 +申诉状 1 +x:1 +未了 1 +x:1 +绿化费 1 +x:1 +相应 1 +x:1 +客车厂 1 +x:1 +扶正 1 +x:1 +人之常情 1 +x:1 +哪个 1 +x:1 +议论纷纷 1 +x:1 +泥工 1 +x:1 +趾甲 1 +x:1 +报人 1 +x:1 +分久必合 1 +x:1 +巴桑 1 +x:1 +魏县 1 +x:1 +征聘 1 +x:1 +相干 1 +x:1 +泥巴 1 +x:1 +繁多 1 +x:1 +芜 1 +x:1 +红口白舌 1 +x:1 +石油局 1 +x:1 +任命权 1 +x:1 +来势汹汹 1 +x:1 +仙后座 1 +x:1 +肾气 1 +x:1 +绞架 1 +x:1 +液氧 1 +x:1 +西洋 1 +x:1 +净化水 1 +x:1 +液氢 1 +x:1 +笃深 1 +x:1 +鄞 1 +x:1 +藏药 1 +x:1 +估斤算两 1 +x:1 +订约 1 +x:1 +大煞风景 1 +x:1 +西海 1 +x:1 +惨重 1 +x:1 +花蜜 1 +x:1 +戏剧界 1 +x:1 +液汁 1 +x:1 +悔恨 1 +x:1 +脚部 1 +x:1 +爆炸性 1 +x:1 +迎面而来 1 +x:1 +违法者 1 +x:1 +糙粮 1 +x:1 +无限花序 1 +x:1 +煤气灶 1 +x:1 +纳百川 1 +x:1 +葬身 1 +x:1 +老港 1 +x:1 +民间性 1 +x:1 +蚩尤北寨 1 +x:1 +生死观 1 +x:1 +东街口 1 +x:1 +束管 1 +x:1 +沧海横流 1 +x:1 +恶作剧者 1 +x:1 +开放电路 1 +x:1 +亡身 1 +x:1 +西河 1 +x:1 +播及 1 +x:1 +焐 5 +x:5 +夏秋季 1 +x:1 +巍然 1 +x:1 +播发 1 +x:1 +住持 1 +x:1 +受益户 1 +x:1 +倒悬 1 +x:1 +誊清 1 +x:1 +律师团 1 +x:1 +工业革命 1 +x:1 +醇酒 1 +x:1 +西沟 1 +x:1 +大佛像 1 +x:1 +西沙 1 +x:1 +咳嗽病 1 +x:1 +部首 1 +x:1 +大足县 1 +x:1 +泥层 1 +x:1 +曲突徙薪 1 +x:1 +试销 1 +x:1 +大西门 1 +x:1 +枯萎 1 +x:1 +膝盖 1 +x:1 +有限性 1 +x:1 +吼声 1 +x:1 +美院 1 +x:1 +上茭道村 1 +x:1 +得手 1 +x:1 +园艺点 1 +x:1 +进化史 1 +x:1 +葵扇 1 +x:1 +灌溉站 1 +x:1 +塞阿拉 1 +x:1 +熊掌 1 +x:1 +排字 1 +x:1 +拼杀 1 +x:1 +玉带海雕 1 +x:1 +慈悲 1 +x:1 +飞行部 1 +x:1 +拉链 1 +x:1 +一药 1 +x:1 +武家坡 1 +x:1 +济源市 1 +x:1 +别无选择 1 +x:1 +包裹单 1 +x:1 +碰头会 1 +x:1 +孝昌三年 1 +x:1 +表皮 1 +x:1 +竞赛类 1 +x:1 +区别词 1 +x:1 +他物权 1 +x:1 +浪水 1 +x:1 +牲畜头数 1 +x:1 +猴手猴脚 1 +x:1 +矮秆 1 +x:1 +后会有期 1 +x:1 +民革 1 +x:1 +效益性 1 +x:1 +石嘴村 1 +x:1 +扬州 1 +x:1 +霸王花 1 +x:1 +甘桃片 1 +x:1 +一掷千金 1 +x:1 +排定 1 +x:1 +职教组 1 +x:1 +笨蛋 1 +x:1 +练摊 1 +x:1 +条块 1 +x:1 +寻的 1 +x:1 +相当 1 +x:1 +达林顿 1 +x:1 +芽苗菜 1 +x:1 +美雨 1 +x:1 +以防不测 1 +x:1 +光盘版 1 +x:1 +收件人 1 +x:1 +彭泽鲫 1 +x:1 +软软的 1 +x:1 +灰沙 1 +x:1 +扩胸器 1 +x:1 +滥采乱伐 1 +x:1 +树挂 1 +x:1 +大家风范 1 +x:1 +试问 1 +x:1 +京剧社 1 +x:1 +钟鼓楼 1 +x:1 +磨刀石 1 +x:1 +工长 1 +x:1 +人口 1 +x:1 +西江 1 +x:1 +嵇中散集 1 +x:1 +易腐 1 +x:1 +内陆河 1 +x:1 +诬 3 +x:3 +空管局 1 +x:1 +骂声 1 +x:1 +药学院 1 +x:1 +西汉 1 +x:1 +崖谷 1 +x:1 +载重 1 +x:1 +半月 1 +x:1 +载量 1 +x:1 +建 1281 +x:1281 +回访 1 +x:1 +篇首 1 +x:1 +新编 1 +x:1 +得意 1 +x:1 +大宇队 1 +x:1 +国库券 1 +x:1 +西澳 1 +x:1 +关长 1 +x:1 +得愈 1 +x:1 +资本家 1 +x:1 +成群结队 1 +x:1 +食用笋 1 +x:1 +贞观 1 +x:1 +先决性 1 +x:1 +招致 1 +x:1 +弱项 1 +x:1 +出借人 1 +x:1 +力气 1 +x:1 +黎巴嫩 1 +x:1 +越通社 1 +x:1 +眼中 1 +x:1 +指指戳戳 1 +x:1 +听便 1 +x:1 +无核国 1 +x:1 +生花之笔 1 +x:1 +扬帆 1 +x:1 +金凤凰 1 +x:1 +慕光性 1 +x:1 +繁密 1 +x:1 +缩写本 1 +x:1 +缸砖 1 +x:1 +活便 1 +x:1 +罗圈 1 +x:1 +紫铜色 1 +x:1 +太阳电池 1 +x:1 +忿忿不平 1 +x:1 +三房巷 1 +x:1 +该 2485 +x:2485 +检疫站 1 +x:1 +铁饭碗式 1 +x:1 +无人不晓 1 +x:1 +试院 1 +x:1 +柑子 1 +x:1 +研究生院 1 +x:1 +倒插 1 +x:1 +听信 1 +x:1 +欧空局 1 +x:1 +疏肝 1 +x:1 +融化 1 +x:1 +爬格子 1 +x:1 +和林格尔 1 +x:1 +岩画 1 +x:1 +征集 1 +x:1 +拾主 1 +x:1 +罗城 1 +x:1 +出纳员 1 +x:1 +许昌市 1 +x:1 +听众 1 +x:1 +十七路军 1 +x:1 +扣动 1 +x:1 +甭提 1 +x:1 +浪漫 1 +x:1 +花蕊 1 +x:1 +养鱼区 1 +x:1 +活体 1 +x:1 +考绩 1 +x:1 +孩儿 1 +x:1 +活佛 1 +x:1 +道外区 1 +x:1 +月租金 1 +x:1 +塌棵菜 1 +x:1 +花蕾 1 +x:1 +合金质 1 +x:1 +山河村 1 +x:1 +倒挂 1 +x:1 +涠西南 1 +x:1 +时效性 1 +x:1 +易记 1 +x:1 +议事厅 1 +x:1 +觉察 1 +x:1 +大会堂 1 +x:1 +蛮横 1 +x:1 +高升 1 +x:1 +浪潮 1 +x:1 +间离法 1 +x:1 +老气 1 +x:1 +倒换 1 +x:1 +由于 1 +x:1 +桀骜不驯 1 +x:1 +考纪 1 +x:1 +协约国 1 +x:1 +疏者 1 +x:1 +考级 1 +x:1 +扶植 1 +x:1 +新翼 1 +x:1 +修 343 +x:343 +厚势 1 +x:1 +黄血盐 1 +x:1 +经营不善 1 +x:1 +浮土层 1 +x:1 +死气沉沉 1 +x:1 +排头 1 +x:1 +西西里岛 1 +x:1 +相差 1 +x:1 +龙庆乡 1 +x:1 +搅黄 1 +x:1 +相左 1 +x:1 +内陆湖 1 +x:1 +妈妈 1 +x:1 +温情脉脉 1 +x:1 +上纲 1 +x:1 +时缺时剩 1 +x:1 +疾亡 1 +x:1 +无字句 1 +x:1 +淮海路 1 +x:1 +骂娘 1 +x:1 +排外 1 +x:1 +同步卫星 1 +x:1 +蜕变 1 +x:1 +亡党 1 +x:1 +陪审制 1 +x:1 +在 78485 +x:78485 +一隅 1 +x:1 +日记 1 +x:1 +书法集 1 +x:1 +宝贝 1 +x:1 +长白山 1 +x:1 +蓬蓬勃勃 1 +x:1 +南平 1 +x:1 +水压机 1 +x:1 +贝克萨区 1 +x:1 +阿曼湾 1 +x:1 +济南 1 +x:1 +严重 1 +x:1 +扬弃 1 +x:1 +茶学 1 +x:1 +始料不及 1 +x:1 +听从 1 +x:1 +活人 1 +x:1 +双月刊 1 +x:1 +扶梯 1 +x:1 +花蒂 1 +x:1 +百发百中 1 +x:1 +特内哈帕 1 +x:1 +漏收 1 +x:1 +无烟煤 1 +x:1 +温控型 1 +x:1 +一致性 1 +x:1 +话头 1 +x:1 +吟唱 1 +x:1 +不祥之兆 1 +x:1 +柜台 1 +x:1 +求种者 1 +x:1 +同事 1 +x:1 +校场口 1 +x:1 +电路板 1 +x:1 +骊山 1 +x:1 +妻姐 1 +x:1 +拱 11 +x:11 +灰渣 1 +x:1 +招股 1 +x:1 +扩张性 1 +x:1 +眉梢 1 +x:1 +听任 1 +x:1 +阿兰山 1 +x:1 +劳师动众 1 +x:1 +浪游 1 +x:1 +刘家山交 1 +x:1 +招聘 1 +x:1 +应声虫 1 +x:1 +得悉 1 +x:1 +鱼目 1 +x:1 +玄武岩 1 +x:1 +大会奖 1 +x:1 +赔偿金 1 +x:1 +负离子 1 +x:1 +轨辙 1 +x:1 +中医学 1 +x:1 +鬼语神话 1 +x:1 +苯丙胺类 1 +x:1 +软枣 1 +x:1 +扶桑 1 +x:1 +新约 1 +x:1 +美钞 1 +x:1 +创新业 1 +x:1 +谩骂 1 +x:1 +撕毁 1 +x:1 +金黄 1 +x:1 +圣园 1 +x:1 +汉阳区 1 +x:1 +通话费 1 +x:1 +竞赛组 1 +x:1 +轧花 1 +x:1 +银灰色 1 +x:1 +王母娘娘 1 +x:1 +新绛 1 +x:1 +征鞍 1 +x:1 +绊倒 1 +x:1 +招考 1 +x:1 +命苦 1 +x:1 +厚厚 1 +x:1 +倒扣 1 +x:1 +流芳千古 1 +x:1 +阻止 1 +x:1 +槽孔 1 +x:1 +篇页 1 +x:1 +槽子 1 +x:1 +信息量 1 +x:1 +西湖 1 +x:1 +蜕化 1 +x:1 +花萼 1 +x:1 +乘以 1 +x:1 +平原乡 1 +x:1 +统一性 1 +x:1 +一致 1 +x:1 +日坛 1 +x:1 +漏斗 1 +x:1 +族长式 1 +x:1 +新绩 1 +x:1 +敦煌 1 +x:1 +蠕动 1 +x:1 +随遇平衡 1 +x:1 +沾沾 1 +x:1 +围魏救赵 1 +x:1 +巧手 1 +x:1 +花菜 1 +x:1 +晚节 1 +x:1 +无理取闹 1 +x:1 +翻修 1 +x:1 +磨砂皮 1 +x:1 +花菇 1 +x:1 +俏皮话 1 +x:1 +测量网 1 +x:1 +胆囊 1 +x:1 +进 2134 +x:2134 +接种率 1 +x:1 +叶画 1 +x:1 +牛羊奶 1 +x:1 +主力军 1 +x:1 +水牛儿 1 +x:1 +倾家荡产 1 +x:1 +情报界 1 +x:1 +总代理 1 +x:1 +炸鸡 1 +x:1 +束缚 1 +x:1 +贯悉 1 +x:1 +米林 1 +x:1 +疮痂 1 +x:1 +锥面 1 +x:1 +茶山 1 +x:1 +明星式 1 +x:1 +征途 1 +x:1 +革新家 1 +x:1 +粮食 1 +x:1 +泥头 1 +x:1 +打埋伏 1 +x:1 +茫茫无际 1 +x:1 +假山 1 +x:1 +考研 1 +x:1 +旱冰场 1 +x:1 +得来 1 +x:1 +引而不发 1 +x:1 +车流声 1 +x:1 +鉴定人 1 +x:1 +只要 1 +x:1 +纳塔尔 1 +x:1 +犁地 1 +x:1 +故事类 1 +x:1 +都城 1 +x:1 +不夜城 1 +x:1 +装甲兵 1 +x:1 +蒙特勒 1 +x:1 +疮疤 1 +x:1 +黄连 1 +x:1 +瞒 17 +x:17 +等离子态 1 +x:1 +毁于一旦 1 +x:1 +花草 1 +x:1 +检索法 1 +x:1 +白塔山 1 +x:1 +为国分忧 1 +x:1 +畸形儿 1 +x:1 +敬孝 1 +x:1 +税者 1 +x:1 +日衰 1 +x:1 +学者 1 +x:1 +鉴定书 1 +x:1 +入魔 1 +x:1 +东钱湖 1 +x:1 +对外开放 1 +x:1 +武装部队 1 +x:1 +花药 1 +x:1 +亲密无间 1 +x:1 +西楼 1 +x:1 +倒数 1 +x:1 +铜材 1 +x:1 +轻机枪 1 +x:1 +白玉兰 1 +x:1 +漏报 1 +x:1 +鱼讯 1 +x:1 +优于 1 +x:1 +柜员 1 +x:1 +欢声笑语 1 +x:1 +偿债率 1 +x:1 +新秀 1 +x:1 +宽心丸儿 1 +x:1 +睡房 1 +x:1 +花茎 1 +x:1 +骨关节 1 +x:1 +借尸还魂 1 +x:1 +学联 1 +x:1 +彻底 1 +x:1 +花茶 1 +x:1 +铜板 1 +x:1 +鬲 1 +x:1 +黑帖 1 +x:1 +研究生部 1 +x:1 +核准费 1 +x:1 +钟磬 1 +x:1 +宣传册 1 +x:1 +建管委 1 +x:1 +排牙山 1 +x:1 +推理 1 +x:1 +隶属 1 +x:1 +运动健将 1 +x:1 +花苗 1 +x:1 +天罗地网 1 +x:1 +老母 1 +x:1 +水中 1 +x:1 +花苞 1 +x:1 +市场性 1 +x:1 +相对 1 +x:1 +前黄寨村 1 +x:1 +大厂县 1 +x:1 +蹲坑 1 +x:1 +既得利益 1 +x:1 +县委会 1 +x:1 +鸢 1 +x:1 +出纳台 1 +x:1 +掠过 1 +x:1 +斑块 1 +x:1 +怀远县 1 +x:1 +俱精 1 +x:1 +卓有 1 +x:1 +劫数 1 +x:1 +排开 1 +x:1 +泥塘 1 +x:1 +规整 1 +x:1 +国风 1 +x:1 +泥塑 1 +x:1 +勃勃生机 1 +x:1 +西梁 1 +x:1 +水保所 1 +x:1 +外型 1 +x:1 +父母官儿 1 +x:1 +入骨 1 +x:1 +陪审员 1 +x:1 +远渡重洋 1 +x:1 +得知 1 +x:1 +高差叠落 1 +x:1 +无怪乎 1 +x:1 +三仙姑 1 +x:1 +南涧县 1 +x:1 +繁峙 1 +x:1 +红1军团 1 +x:1 +送审 1 +x:1 +送客 1 +x:1 +荷兰王国 1 +x:1 +智残 1 +x:1 +錾子 1 +x:1 +肾上腺 1 +x:1 +定居者 1 +x:1 +花芽 1 +x:1 +融合 1 +x:1 +爹娘 1 +x:1 +扬头 1 +x:1 +相宜 1 +x:1 +访者 1 +x:1 +道里 1 +x:1 +共价键 1 +x:1 +齿轮油 1 +x:1 +单核 1 +x:1 +考种 1 +x:1 +悔改 1 +x:1 +美术组 1 +x:1 +潜力 1 +x:1 +运行费 1 +x:1 +入驻 1 +x:1 +单株 1 +x:1 +三皇五帝 1 +x:1 +灰棉 1 +x:1 +远洋 1 +x:1 +挟 8 +x:8 +拐角 1 +x:1 +花色 1 +x:1 +眼睛 1 +x:1 +检查 1 +x:1 +潜势 1 +x:1 +出资人 1 +x:1 +实情 1 +x:1 +地磁极 1 +x:1 +硬碰硬 1 +x:1 +联系汇率 1 +x:1 +咒骂 1 +x:1 +达川市 1 +x:1 +窃走 1 +x:1 +匿 2 +x:2 +排律 1 +x:1 +汁 2 +x:2 +名演员 1 +x:1 +江户湾 1 +x:1 +温存 1 +x:1 +悻悻 1 +x:1 +鉴定会 1 +x:1 +推车人 1 +x:1 +验票 1 +x:1 +齿轮泵 1 +x:1 +魏国 1 +x:1 +大双覆 1 +x:1 +始于足下 1 +x:1 +闭口价 1 +x:1 +浪桥 1 +x:1 +花舌 1 +x:1 +茶巾 1 +x:1 +钟秀 1 +x:1 +屡 81 +x:81 +远海 1 +x:1 +防旱 1 +x:1 +漏掉 1 +x:1 +放射器 1 +x:1 +融和 1 +x:1 +跑前跑后 1 +x:1 +产销地 1 +x:1 +千秋大业 1 +x:1 +国省道 1 +x:1 +泥墙 1 +x:1 +窃贼 1 +x:1 +试采 1 +x:1 +粮饷 1 +x:1 +寨边 1 +x:1 +磨难 1 +x:1 +枯草 1 +x:1 +远征军 1 +x:1 +窝窝 1 +x:1 +盖有 1 +x:1 +西段 1 +x:1 +排尿 1 +x:1 +稳重 1 +x:1 +美航 1 +x:1 +罗南 1 +x:1 +史各庄镇 1 +x:1 +分包村 1 +x:1 +相声 1 +x:1 +顺价 1 +x:1 +通约性 1 +x:1 +还林 1 +x:1 +时运 1 +x:1 +顺从 1 +x:1 +恋春 1 +x:1 +玩 144 +x:144 +老三件 1 +x:1 +枯荣 1 +x:1 +焦化厂 1 +x:1 +歪门邪道 1 +x:1 +送声 1 +x:1 +玫瑰 1 +x:1 +见微知著 1 +x:1 +铮铮誓言 1 +x:1 +无所用心 1 +x:1 +骄傲 1 +x:1 +考究 1 +x:1 +晚育 1 +x:1 +槽床 1 +x:1 +老梅 1 +x:1 +颤动 1 +x:1 +小组长 1 +x:1 +一霎 1 +x:1 +职教社 1 +x:1 +实惠 1 +x:1 +凝重感 1 +x:1 +辅洞 1 +x:1 +得救 1 +x:1 +尼安萨省 1 +x:1 +沾满 1 +x:1 +一针见血 1 +x:1 +正规战 1 +x:1 +马尼托巴 1 +x:1 +铁栏杆 1 +x:1 +设项 1 +x:1 +苟且偷安 1 +x:1 +单比 1 +x:1 +羞赧 1 +x:1 +腻腻歪歪 1 +x:1 +潜入 1 +x:1 +重中之重 1 +x:1 +隔离线 1 +x:1 +美酒 1 +x:1 +饺 1 +x:1 +盖板 1 +x:1 +企 30 +x:30 +莲蓬子儿 1 +x:1 +还有 1 +x:1 +花腔 1 +x:1 +手术器 1 +x:1 +上藏马村 1 +x:1 +印第安人 1 +x:1 +府城镇 1 +x:1 +觉得 1 +x:1 +铁栏架 1 +x:1 +置信度 1 +x:1 +声名显赫 1 +x:1 +赫鲁晓夫 1 +x:1 +西欧 1 +x:1 +常驻程序 1 +x:1 +养鱼场 1 +x:1 +深南路 1 +x:1 +织制 1 +x:1 +顺乎 1 +x:1 +罗口 1 +x:1 +顺义 1 +x:1 +还本 1 +x:1 +封店村 1 +x:1 +公证处 1 +x:1 +陨石坑 1 +x:1 +词频 1 +x:1 +茶店 1 +x:1 +一党制 1 +x:1 +学舌 1 +x:1 +泰米尔 1 +x:1 +偃松 1 +x:1 +学艺 1 +x:1 +摩托车 1 +x:1 +新篁 1 +x:1 +新篇 1 +x:1 +农机办 1 +x:1 +猞猁 1 +x:1 +标准化法 1 +x:1 +睡态 1 +x:1 +爹妈 1 +x:1 +奥 63 +x:63 +海底捞月 1 +x:1 +广太乡 1 +x:1 +花脸 1 +x:1 +官方类 1 +x:1 +缔结 1 +x:1 +锅炉厂 1 +x:1 +象征体 1 +x:1 +美金 1 +x:1 +黑乎乎 1 +x:1 +灿 9 +x:9 +盖柿 1 +x:1 +嘉手纳 1 +x:1 +条几 1 +x:1 +应对 1 +x:1 +邮币卡 1 +x:1 +向阳镇 1 +x:1 +赤兔马 1 +x:1 +黄豆 1 +x:1 +律 15 +x:15 +拨云见日 1 +x:1 +强作解人 1 +x:1 +老槐 1 +x:1 +条凳 1 +x:1 +银行业 1 +x:1 +秦都区 1 +x:1 +多科性 1 +x:1 +验箱 1 +x:1 +瘦肉猪 1 +x:1 +新程 1 +x:1 +广水市 1 +x:1 +鸳鸯松 1 +x:1 +锦盒 1 +x:1 +克/听 1 +x:1 +麦克风 1 +x:1 +潜值 1 +x:1 +高倍 1 +x:1 +干道口 1 +x:1 +验算 1 +x:1 +通化市 1 +x:1 +急就章 1 +x:1 +乔庄村 1 +x:1 +咽 11 +x:11 +德黑兰市 1 +x:1 +众参 1 +x:1 +以此为戒 1 +x:1 +首富乡 1 +x:1 +按需分配 1 +x:1 +班里 1 +x:1 +四平八稳 1 +x:1 +镍价 1 +x:1 +收款处 1 +x:1 +翻云覆雨 1 +x:1 +农机化 1 +x:1 +武斗 1 +x:1 +众口 1 +x:1 +判断句 1 +x:1 +浏阳县 1 +x:1 +民用机 1 +x:1 +扫雪 1 +x:1 +洋相 1 +x:1 +古浪县 1 +x:1 +冷却期 1 +x:1 +扫雷 1 +x:1 +啼 6 +x:6 +湖光秀色 1 +x:1 +罗勇 1 +x:1 +孟加拉国 1 +x:1 +西樵 1 +x:1 +坑洼 1 +x:1 +泉林 1 +x:1 +七八年 1 +x:1 +市场报 1 +x:1 +报修 1 +x:1 +倒映 1 +x:1 +相好 1 +x:1 +娓娓而谈 1 +x:1 +倒是 1 +x:1 +单模 1 +x:1 +木墙裙 1 +x:1 +报警 1 +x:1 +药囊 1 +x:1 +龠 1 +x:1 +砖瓦厂 1 +x:1 +胸腹腔 1 +x:1 +环城路 1 +x:1 +镀锌铁 1 +x:1 +波涌涛起 1 +x:1 +游行者 1 +x:1 +坑洞 1 +x:1 +袜楦 1 +x:1 +瘦肉率 1 +x:1 +广宁省 1 +x:1 +美术系 1 +x:1 +上甘岭 1 +x:1 +重庆城 1 +x:1 +傻劲 1 +x:1 +旷工 1 +x:1 +作业队 1 +x:1 +选民证 1 +x:1 +金刚山 1 +x:1 +农机厂 1 +x:1 +小四轮 1 +x:1 +集体化 1 +x:1 +唇膏 1 +x:1 +千金 1 +x:1 +赈灾款 1 +x:1 +武装部长 1 +x:1 +沉默少语 1 +x:1 +黑店 1 +x:1 +扫除 1 +x:1 +阳畦 1 +x:1 +新竹 1 +x:1 +睡意 1 +x:1 +儿皇帝 1 +x:1 +防查 1 +x:1 +新章 1 +x:1 +名震中外 1 +x:1 +测评会 1 +x:1 +宣腿 1 +x:1 +物茂粮丰 1 +x:1 +陪审团 1 +x:1 +漫味儿 1 +x:1 +报本坊 1 +x:1 +铜箔 1 +x:1 +景貌 1 +x:1 +条令 1 +x:1 +轴套 1 +x:1 +大年初三 1 +x:1 +货比三家 1 +x:1 +南充 1 +x:1 +及锋而试 1 +x:1 +组展 1 +x:1 +渔 26 +x:26 +出点子 1 +x:1 +条件 1 +x:1 +温冷线 1 +x:1 +潜伏 1 +x:1 +听喜 1 +x:1 +生平展 1 +x:1 +紧张度 1 +x:1 +合同期 1 +x:1 +帝制 1 +x:1 +载流子 1 +x:1 +故事性 1 +x:1 +储运 1 +x:1 +洗劫 1 +x:1 +新政 1 +x:1 +雅琪队 1 +x:1 +骄人 1 +x:1 +铜管 1 +x:1 +悟性 1 +x:1 +老相 1 +x:1 +煤卫 1 +x:1 +陆栖动物 1 +x:1 +征调 1 +x:1 +扫视 1 +x:1 +新教 1 +x:1 +型号 1 +x:1 +愉愉快快 1 +x:1 +婚外情 1 +x:1 +真 978 +x:978 +钟摆 1 +x:1 +森林狼队 1 +x:1 +装扮一新 1 +x:1 +此 3031 +x:3031 +大客车 1 +x:1 +侧束 1 +x:1 +嘉宾 1 +x:1 +林果业 1 +x:1 +人心 1 +x:1 +黄花鱼苗 1 +x:1 +避嫌 1 +x:1 +寨里 1 +x:1 +御览 1 +x:1 +串灯 1 +x:1 +孤苦伶仃 1 +x:1 +沁人心脾 1 +x:1 +外分泌 1 +x:1 +西画 1 +x:1 +每天 1 +x:1 +利害 1 +x:1 +靖西县 1 +x:1 +一阵子 1 +x:1 +防水表 1 +x:1 +投资国 1 +x:1 +投资团 1 +x:1 +招魂 1 +x:1 +谓 30 +x:30 +祭品 1 +x:1 +悄悄的 1 +x:1 +地震震级 1 +x:1 +充气机 1 +x:1 +耸然 1 +x:1 +党训班 1 +x:1 +司法员 1 +x:1 +洗刷 1 +x:1 +胶粒面 1 +x:1 +西柏坡 1 +x:1 +还礼 1 +x:1 +缴库单 1 +x:1 +均衡解 1 +x:1 +顶礼膜拜 1 +x:1 +慈祥 1 +x:1 +大河村 1 +x:1 +花鼓 1 +x:1 +扑火战 1 +x:1 +人形 1 +x:1 +惯偷 1 +x:1 +憩息 1 +x:1 +排位 1 +x:1 +谢礼 1 +x:1 +一高 1 +x:1 +堤段 1 +x:1 +倒票 1 +x:1 +人影 1 +x:1 +细致入微 1 +x:1 +休息椅 1 +x:1 +景象 1 +x:1 +老套子 1 +x:1 +卓立 1 +x:1 +是夜 1 +x:1 +声带 1 +x:1 +碧草 1 +x:1 +一路平安 1 +x:1 +潜修 1 +x:1 +宫颈癌 1 +x:1 +控股权 1 +x:1 +唱票员 1 +x:1 +展宽 1 +x:1 +尽兴 1 +x:1 +隅 3 +x:3 +洋枪队 1 +x:1 +不翼而飞 1 +x:1 +肯尼亚 1 +x:1 +栗子店村 1 +x:1 +俯望 1 +x:1 +指令 1 +x:1 +展室 1 +x:1 +一手点 1 +x:1 +办公房 1 +x:1 +验方 1 +x:1 +南平市 1 +x:1 +乃是 1 +x:1 +近在眉睫 1 +x:1 +知错 1 +x:1 +骨灰箱 1 +x:1 +过度 1 +x:1 +获 902 +x:902 +文法学 1 +x:1 +打斗招式 1 +x:1 +欣赏者 1 +x:1 +密码锁 1 +x:1 +尽先 1 +x:1 +漏网 1 +x:1 +先驱新党 1 +x:1 +肯尼亚队 1 +x:1 +洄游 1 +x:1 +死水一潭 1 +x:1 +预备性 1 +x:1 +空中小姐 1 +x:1 +小淘气 1 +x:1 +明智之举 1 +x:1 +大使库 1 +x:1 +力挫 1 +x:1 +乘员 1 +x:1 +克拉科夫 1 +x:1 +受 1739 +x:1739 +无实据 1 +x:1 +被告人 1 +x:1 +慕仪乡 1 +x:1 +单瓣 1 +x:1 +治水改土 1 +x:1 +双林寺 1 +x:1 +活塞环 1 +x:1 +西瓜 1 +x:1 +制片 1 +x:1 +制版 1 +x:1 +条例 1 +x:1 +征购 1 +x:1 +避寒 1 +x:1 +修理店 1 +x:1 +诸如此类 1 +x:1 +咨询处 1 +x:1 +险仗 1 +x:1 +玉米秆 1 +x:1 +范畴 1 +x:1 +道河乡 1 +x:1 +肾病 1 +x:1 +旅游圈 1 +x:1 +团队票 1 +x:1 +多彩缤纷 1 +x:1 +锦州市 1 +x:1 +阵痛 1 +x:1 +沃野千里 1 +x:1 +渐进式 1 +x:1 +活命 1 +x:1 +价格战 1 +x:1 +黄粱梦 1 +x:1 +拉近乎 1 +x:1 +疟蚊 1 +x:1 +紧张 1 +x:1 +验放 1 +x:1 +惠安 1 +x:1 +信息论 1 +x:1 +鹅卵石 1 +x:1 +百家争鸣 1 +x:1 +旧调重弹 1 +x:1 +抄本 1 +x:1 +维生素D 1 +x:1 +以权谋私 1 +x:1 +光彩耀目 1 +x:1 +听听 1 +x:1 +命题 1 +x:1 +生长型 1 +x:1 +间作地 1 +x:1 +灰瓦 1 +x:1 +计划经济 1 +x:1 +以退为进 1 +x:1 +银屑病 1 +x:1 +连台本戏 1 +x:1 +措施 1 +x:1 +饯行 1 +x:1 +疾呼 1 +x:1 +试跳 1 +x:1 +桑 30 +x:30 +培智 1 +x:1 +良好者 1 +x:1 +模范县 1 +x:1 +凌源市 1 +x:1 +人平 1 +x:1 +苗锦 1 +x:1 +律师业 1 +x:1 +过年 1 +x:1 +碱集料 1 +x:1 +甜甜地 1 +x:1 +扳平 1 +x:1 +避孕 1 +x:1 +怒目横眉 1 +x:1 +乙烯厂 1 +x:1 +声张 1 +x:1 +检箱 1 +x:1 +斜风细雨 1 +x:1 +就座 1 +x:1 +洗印 1 +x:1 +听命 1 +x:1 +国内部 1 +x:1 +桃花丛 1 +x:1 +袋口 1 +x:1 +修理工 1 +x:1 +相思鸟 1 +x:1 +双人舞 1 +x:1 +谅必 1 +x:1 +寮步镇 1 +x:1 +轴子 1 +x:1 +宠坏 1 +x:1 +收文簿 1 +x:1 +鲜明 1 +x:1 +见外 1 +x:1 +千回百转 1 +x:1 +森林城 1 +x:1 +黄酒 1 +x:1 +洛美 1 +x:1 +老人家 1 +x:1 +剖宫产 1 +x:1 +二季度 1 +x:1 +倒算 1 +x:1 +新机 1 +x:1 +创新型 1 +x:1 +粪筐 1 +x:1 +评论界 1 +x:1 +患处 1 +x:1 +肩上 1 +x:1 +文明车 1 +x:1 +滇红 1 +x:1 +藏香 1 +x:1 +组合音响 1 +x:1 +绞索 1 +x:1 +还箱 1 +x:1 +芯片业 1 +x:1 +众人 1 +x:1 +黄酱 1 +x:1 +苛求 1 +x:1 +双程 1 +x:1 +新村 1 +x:1 +利好 1 +x:1 +网状脉 1 +x:1 +所局级 1 +x:1 +打折票 1 +x:1 +人工 1 +x:1 +大中专班 1 +x:1 +滓 1 +x:1 +顺势 1 +x:1 +弱者 1 +x:1 +护岸 1 +x:1 +工业组 1 +x:1 +西瓜霜 1 +x:1 +乘坐 1 +x:1 +欠款 1 +x:1 +瞒心昧己 1 +x:1 +五合板 1 +x:1 +宣传弹 1 +x:1 +谐趣感 1 +x:1 +凸凸凹凹 1 +x:1 +路旁 1 +x:1 +银行卡 1 +x:1 +泰然自若 1 +x:1 +抛却 1 +x:1 +新松 1 +x:1 +酒肉朋友 1 +x:1 +防空 1 +x:1 +慎选 1 +x:1 +昧心 1 +x:1 +寸土寸金 1 +x:1 +实践家 1 +x:1 +肾盂 1 +x:1 +度量 1 +x:1 +见好 1 +x:1 +倒掉 1 +x:1 +勺园 1 +x:1 +脉冲 1 +x:1 +云阳镇 1 +x:1 +三十一日 1 +x:1 +藤制品 1 +x:1 +一槌定音 1 +x:1 +侧方 1 +x:1 +新枝 1 +x:1 +消防栓 1 +x:1 +利国 1 +x:1 +测点 1 +x:1 +黄金 1 +x:1 +崖面 1 +x:1 +岩洞 1 +x:1 +验明 1 +x:1 +别 304 +x:304 +壳状 1 +x:1 +规章 1 +x:1 +粪篓 1 +x:1 +制药队 1 +x:1 +懵懵懂懂 1 +x:1 +景洪市 1 +x:1 +无坟堆 1 +x:1 +路人皆知 1 +x:1 +审审改改 1 +x:1 +售票厅 1 +x:1 +顺利 1 +x:1 +结党营私 1 +x:1 +曳光弹 1 +x:1 +藉藉无名 1 +x:1 +每季 1 +x:1 +储贷 1 +x:1 +得益 1 +x:1 +授牌 1 +x:1 +擦拭 1 +x:1 +游入 1 +x:1 +场地费 1 +x:1 +产出量 1 +x:1 +热科院 1 +x:1 +甭管 1 +x:1 +均衡论 1 +x:1 +售后服务 1 +x:1 +防病 1 +x:1 +年增长率 1 +x:1 +话把儿 1 +x:1 +大年初二 1 +x:1 +尽力 1 +x:1 +护封 1 +x:1 +胃酸 1 +x:1 +几何 1 +x:1 +滑子蘑 1 +x:1 +猎捕 1 +x:1 +岩浆 1 +x:1 +促销员 1 +x:1 +厕身 1 +x:1 +舟楫如梭 1 +x:1 +护工 1 +x:1 +新星 1 +x:1 +顺口 1 +x:1 +西皮 1 +x:1 +肺气肿 1 +x:1 +订数 1 +x:1 +概而言之 1 +x:1 +南海市 1 +x:1 +灵魂界 1 +x:1 +黄道 1 +x:1 +新昌 1 +x:1 +美谈 1 +x:1 +代办处 1 +x:1 +傻乐 1 +x:1 +哒哒 1 +x:1 +检票 1 +x:1 +泅渡 1 +x:1 +灰白 1 +x:1 +投资商 1 +x:1 +摄成 1 +x:1 +新春 1 +x:1 +新实在论 1 +x:1 +链霉素 1 +x:1 +携 51 +x:51 +匀细 1 +x:1 +趿 1 +x:1 +银行制 1 +x:1 +年逾古稀 1 +x:1 +紧巴 1 +x:1 +马村区 1 +x:1 +瓜子皮 1 +x:1 +媚态 1 +x:1 +众朝官 1 +x:1 +考期 1 +x:1 +招领 1 +x:1 +诗歌节 1 +x:1 +试车 1 +x:1 +邯郸市 1 +x:1 +中伤式 1 +x:1 +西盟 1 +x:1 +胃部 1 +x:1 +断发性 1 +x:1 +先烈 1 +x:1 +公 151 +x:151 +种龟 1 +x:1 +成交量 1 +x:1 +寿比南山 1 +x:1 +手下留情 1 +x:1 +曾用名 1 +x:1 +新景 1 +x:1 +倒立 1 +x:1 +世俗主义 1 +x:1 +风尚奖 1 +x:1 +柱础石 1 +x:1 +长期班 1 +x:1 +智略 1 +x:1 +枯黄 1 +x:1 +讲习班 1 +x:1 +恣肆 1 +x:1 +玉米地 1 +x:1 +单瘫 1 +x:1 +上岗证 1 +x:1 +油枯 1 +x:1 +戒烟日 1 +x:1 +股份公司 1 +x:1 +猎户 1 +x:1 +美貌 1 +x:1 +樟树市 1 +x:1 +竹艺 1 +x:1 +蒙玻利埃 1 +x:1 +决策权 1 +x:1 +考查 1 +x:1 +攀比风 1 +x:1 +灿若星河 1 +x:1 +铁八局 1 +x:1 +无线电波 1 +x:1 +抄收 1 +x:1 +感性化 1 +x:1 +光盘案 1 +x:1 +微缩 1 +x:1 +误入歧途 1 +x:1 +失眠症 1 +x:1 +充要条件 1 +x:1 +赌鬼 1 +x:1 +拣到 1 +x:1 +老生 1 +x:1 +盖章 1 +x:1 +后帮跟 1 +x:1 +猎手 1 +x:1 +寻法 1 +x:1 +人居 1 +x:1 +保福乡 1 +x:1 +新曹 1 +x:1 +几乎 1 +x:1 +工业署 1 +x:1 +串珠 1 +x:1 +翻山越岭 1 +x:1 +傻事 1 +x:1 +死 549 +x:549 +自取灭亡 1 +x:1 +老古董 1 +x:1 +彩板型 1 +x:1 +结核杆菌 1 +x:1 +灯心条 1 +x:1 +舌尖音 1 +x:1 +珍珠贝 1 +x:1 +摩洛哥队 1 +x:1 +皱痕 1 +x:1 +人家 1 +x:1 +新意 1 +x:1 +听写 1 +x:1 +窑具 1 +x:1 +并网 1 +x:1 +无霜期 1 +x:1 +儒门 1 +x:1 +短兵相接 1 +x:1 +护嫂 1 +x:1 +学额 1 +x:1 +利弊 1 +x:1 +书法观 1 +x:1 +税额 1 +x:1 +肾炎 1 +x:1 +就学 1 +x:1 +绿池 1 +x:1 +擒获 1 +x:1 +布鼓雷门 1 +x:1 +地对地 1 +x:1 +整数型 1 +x:1 +脐儿 1 +x:1 +写就 1 +x:1 +人寿 1 +x:1 +里表 1 +x:1 +莫大 1 +x:1 +不期而至 1 +x:1 +人寰 1 +x:1 +试衣 1 +x:1 +顺和 1 +x:1 +漏税 1 +x:1 +税风 1 +x:1 +轨道 1 +x:1 +天象仪 1 +x:1 +连云港市 1 +x:1 +得罪 1 +x:1 +思蒙镇 1 +x:1 +试行 1 +x:1 +展廊 1 +x:1 +圆桌面 1 +x:1 +讼案 1 +x:1 +模范团 1 +x:1 +入药 1 +x:1 +部落 1 +x:1 +膨胀性 1 +x:1 +老牌 1 +x:1 +花魁 1 +x:1 +崇皇乡 1 +x:1 +老牛 1 +x:1 +与其说 1 +x:1 +鸡皮鹤发 1 +x:1 +折反跑 1 +x:1 +吃闲饭 1 +x:1 +定量分析 1 +x:1 +那扎村 1 +x:1 +都会 1 +x:1 +眉睫 1 +x:1 +霸王龙 1 +x:1 +爱国主义 1 +x:1 +地板刷 1 +x:1 +西南极 1 +x:1 +掘进机 1 +x:1 +订报 1 +x:1 +平阳县 1 +x:1 +乘凉 1 +x:1 +出租店 1 +x:1 +乔然山 1 +x:1 +决策性 1 +x:1 +人学 1 +x:1 +防撞性 1 +x:1 +活儿 1 +x:1 +标志性 1 +x:1 +全盘皆活 1 +x:1 +牵牛星 1 +x:1 +税项 1 +x:1 +替班 1 +x:1 +声威 1 +x:1 +过路费 1 +x:1 +蓬莱仙境 1 +x:1 +换心人 1 +x:1 +钟情 1 +x:1 +彝 3 +x:3 +名角儿 1 +x:1 +眉眼 1 +x:1 +市场科 1 +x:1 +帝国 1 +x:1 +田径运动 1 +x:1 +从此以后 1 +x:1 +专章 1 +x:1 +老爷 1 +x:1 +老父 1 +x:1 +人孔 1 +x:1 +老爸 1 +x:1 +继而 1 +x:1 +顺向 1 +x:1 +展徽 1 +x:1 +草坝村 1 +x:1 +仪表厂 1 +x:1 +西点 1 +x:1 +本地化 1 +x:1 +潍坊市 1 +x:1 +阜宁 1 +x:1 +黄陂 1 +x:1 +日薄西山 1 +x:1 +诊断 1 +x:1 +支公司 1 +x:1 +三黑一塌 1 +x:1 +单炮 1 +x:1 +扶直 1 +x:1 +绿水青山 1 +x:1 +合二为一 1 +x:1 +无理函数 1 +x:1 +群英争雄 1 +x:1 +浠政 1 +x:1 +创编 1 +x:1 +灰灰 1 +x:1 +正处级 1 +x:1 +美言 1 +x:1 +团县委 1 +x:1 +各得其所 1 +x:1 +阔别 1 +x:1 +琳琅 1 +x:1 +书生味 1 +x:1 +地久天长 1 +x:1 +黄陵 1 +x:1 +活像 1 +x:1 +府南河畔 1 +x:1 +安道尔队 1 +x:1 +机关干部 1 +x:1 +验卡点 1 +x:1 +投资区 1 +x:1 +瑞气 1 +x:1 +景观 1 +x:1 +热水袋 1 +x:1 +一齐 1 +x:1 +左膀 1 +x:1 +蘑菇罐头 1 +x:1 +父权制 1 +x:1 +茶业 1 +x:1 +四大名著 1 +x:1 +签定 1 +x:1 +旁听席 1 +x:1 +怀安县 1 +x:1 +铜绿 1 +x:1 +墨西哥湾 1 +x:1 +跃马 1 +x:1 +防御型 1 +x:1 +言之无物 1 +x:1 +拭泪 1 +x:1 +百分率 1 +x:1 +紧密 1 +x:1 +秋风过耳 1 +x:1 +喧嚣 1 +x:1 +翻跟头 1 +x:1 +持异议者 1 +x:1 +增城 1 +x:1 +吸血鬼 1 +x:1 +远生 1 +x:1 +投资司 1 +x:1 +卷吸作用 1 +x:1 +增氧机 1 +x:1 +杭剧 1 +x:1 +自警 1 +x:1 +养虎遗患 1 +x:1 +秋后算帐 1 +x:1 +禅房 1 +x:1 +听候 1 +x:1 +托出 1 +x:1 +皇陵 1 +x:1 +行为人 1 +x:1 +签子 1 +x:1 +邋里邋蹋 1 +x:1 +雪上加霜 1 +x:1 +锦江 1 +x:1 +推测 1 +x:1 +声学 1 +x:1 +高小生 1 +x:1 +东莱街 1 +x:1 +科普部 1 +x:1 +宪制 1 +x:1 +灰烬 1 +x:1 +避开 1 +x:1 +瑁 1 +x:1 +墙板 1 +x:1 +业者 1 +x:1 +柔柔地 1 +x:1 +稀稀落落 1 +x:1 +割草机 1 +x:1 +热泵式 1 +x:1 +质监站 1 +x:1 +丹凤眼 1 +x:1 +一代风流 1 +x:1 +境内外 1 +x:1 +矛盾论 1 +x:1 +白求恩 1 +x:1 +指东说西 1 +x:1 +超巨星 1 +x:1 +陶土 1 +x:1 +新沂 1 +x:1 +催眠药 1 +x:1 +巴盟 1 +x:1 +猎枪 1 +x:1 +郑重其事 1 +x:1 +护士 1 +x:1 +力戒 1 +x:1 +东港区 1 +x:1 +帝君 1 +x:1 +活口 1 +x:1 +防癌 1 +x:1 +单环 1 +x:1 +粉细砂 1 +x:1 +霖 2 +x:2 +四呼 1 +x:1 +声声 1 +x:1 +扶病 1 +x:1 +脑袋瓜儿 1 +x:1 +救死扶伤 1 +x:1 +平原县 1 +x:1 +视盘 1 +x:1 +人妖 1 +x:1 +欢城镇 1 +x:1 +晚风 1 +x:1 +南海子 1 +x:1 +鞭炮瘾 1 +x:1 +葬送 1 +x:1 +花香 1 +x:1 +嗉子 1 +x:1 +百分点 1 +x:1 +增值链 1 +x:1 +听取 1 +x:1 +顺序 1 +x:1 +坐吃山空 1 +x:1 +议事会 1 +x:1 +柜员机 1 +x:1 +私刑 1 +x:1 +小组赛 1 +x:1 +客堂 1 +x:1 +煞费苦心 1 +x:1 +携手 1 +x:1 +夜明珠 1 +x:1 +扶疏 1 +x:1 +淡巴巴 1 +x:1 +护墙 1 +x:1 +腺 1 +x:1 +预备期 1 +x:1 +融会 1 +x:1 +太古界 1 +x:1 +西南方 1 +x:1 +人夫 1 +x:1 +鉴定员 1 +x:1 +兑换机 1 +x:1 +人大 1 +x:1 +过多 1 +x:1 +谢罪 1 +x:1 +每张 1 +x:1 +活宝 1 +x:1 +送暖 1 +x:1 +人头 1 +x:1 +全力争冠 1 +x:1 +挂车费 1 +x:1 +轴心 1 +x:1 +喜盈盈 1 +x:1 +花饰 1 +x:1 +过头 1 +x:1 +巴登 1 +x:1 +过失 1 +x:1 +内燃机 1 +x:1 +平原区 1 +x:1 +岁修 1 +x:1 +贯穿 1 +x:1 +哭天抹泪 1 +x:1 +高检院 1 +x:1 +主 139 +x:139 +柜中 1 +x:1 +嘉平镇 1 +x:1 +无所不能 1 +x:1 +过奖 1 +x:1 +万全县 1 +x:1 +朱印 1 +x:1 +文论集 1 +x:1 +护堤 1 +x:1 +逗趣儿 1 +x:1 +高架路 1 +x:1 +胃镜 1 +x:1 +倒置 1 +x:1 +农行 1 +x:1 +奇装异服 1 +x:1 +疮口 1 +x:1 +利川 1 +x:1 +活化 1 +x:1 +白乎乎 1 +x:1 +成熟期 1 +x:1 +猎杀 1 +x:1 +美观 1 +x:1 +席面 1 +x:1 +肉袋 1 +x:1 +隧道局 1 +x:1 +尊卑 1 +x:1 +立体几何 1 +x:1 +常温 1 +x:1 +连唱 1 +x:1 +避居 1 +x:1 +每当 1 +x:1 +乘号 1 +x:1 +香獐子 1 +x:1 +鄙意 1 +x:1 +持久化 1 +x:1 +能源业 1 +x:1 +寻根 1 +x:1 +有源之水 1 +x:1 +采煤队 1 +x:1 +过境 1 +x:1 +不依不饶 1 +x:1 +听力 1 +x:1 +信息费 1 +x:1 +秦汉唐 1 +x:1 +泸州市 1 +x:1 +考据 1 +x:1 +自治州委 1 +x:1 +悄悄然 1 +x:1 +入胜 1 +x:1 +花石村 1 +x:1 +通话量 1 +x:1 +木筏子 1 +x:1 +叫喊 1 +x:1 +谢绝 1 +x:1 +创新力 1 +x:1 +毫无疑问 1 +x:1 +青莲色 1 +x:1 +昙花一现 1 +x:1 +无微不至 1 +x:1 +半旗 1 +x:1 +人士 1 +x:1 +河马 1 +x:1 +入股 1 +x:1 +未决 1 +x:1 +巍然屹立 1 +x:1 +还给 1 +x:1 +隧道工 1 +x:1 +形态各异 1 +x:1 +维继 1 +x:1 +新手 1 +x:1 +锦溪 1 +x:1 +活动 1 +x:1 +人声 1 +x:1 +私刻 1 +x:1 +常住 1 +x:1 +检索 1 +x:1 +坑痕 1 +x:1 +分子溶液 1 +x:1 +宽宏大量 1 +x:1 +活力 1 +x:1 +红极一时 1 +x:1 +平江县 1 +x:1 +特护队 1 +x:1 +赔偿费 1 +x:1 +飘舞 1 +x:1 +西狄 1 +x:1 +修订 1 +x:1 +精武门 1 +x:1 +选举年 1 +x:1 +借鉴 1 +x:1 +试讲 1 +x:1 +试训 1 +x:1 +九节鞭 1 +x:1 +黄铜 1 +x:1 +装饰一新 1 +x:1 +活剧 1 +x:1 +过堂 1 +x:1 +晚餐 1 +x:1 +征询 1 +x:1 +手板儿 1 +x:1 +找乐 1 +x:1 +朝鲜族 1 +x:1 +花须 1 +x:1 +乘务 1 +x:1 +远眺 1 +x:1 +黑心 1 +x:1 +无所不至 1 +x:1 +未免 1 +x:1 +尴尬 1 +x:1 +紧处 1 +x:1 +乘势 1 +x:1 +系列片 1 +x:1 +船 297 +x:297 +鼓角 1 +x:1 +拳拳情意 1 +x:1 +顺平 1 +x:1 +粮草 1 +x:1 +心内外科 1 +x:1 +争芳斗妍 1 +x:1 +秦篆 1 +x:1 +则救之 1 +x:1 +龙争虎斗 1 +x:1 +手疾眼快 1 +x:1 +凄风楚雨 1 +x:1 +心胆俱裂 1 +x:1 +怒江州 1 +x:1 +动摇不定 1 +x:1 +泾河乡 1 +x:1 +活字 1 +x:1 +粮荒 1 +x:1 +每年 1 +x:1 +皴裂 1 +x:1 +入耳 1 +x:1 +晚饭 1 +x:1 +申根 1 +x:1 +征订 1 +x:1 +载运 1 +x:1 +窥测 1 +x:1 +宽以待人 1 +x:1 +试试 1 +x:1 +征讨 1 +x:1 +外务省 1 +x:1 +情报源 1 +x:1 +湖北省 1 +x:1 +宣传台 1 +x:1 +峡山镇 1 +x:1 +九四年 1 +x:1 +防卫局 1 +x:1 +活分 1 +x:1 +弹簧厂 1 +x:1 +污七八糟 1 +x:1 +馁 1 +x:1 +视紫质 1 +x:1 +老练 1 +x:1 +鲁南区 1 +x:1 +流入地 1 +x:1 +比色计 1 +x:1 +推想 1 +x:1 +南岸区 1 +x:1 +柴米 1 +x:1 +准予 1 +x:1 +护国 1 +x:1 +勿施于人 1 +x:1 +水磨坊 1 +x:1 +目不暇接 1 +x:1 +住家 1 +x:1 +睡相 1 +x:1 +入迷 1 +x:1 +丐帮 1 +x:1 +苏木 1 +x:1 +亦步亦趋 1 +x:1 +日夜辛劳 1 +x:1 +新派 1 +x:1 +鉴湖 1 +x:1 +因村制宜 1 +x:1 +侧漏 1 +x:1 +餐馆 1 +x:1 +失忆症 1 +x:1 +敏锐 1 +x:1 +硅胶 1 +x:1 +撕破 1 +x:1 +紧固 1 +x:1 +相交 1 +x:1 +专有 1 +x:1 +运动论 1 +x:1 +行车道 1 +x:1 +下九路 1 +x:1 +钓杆 1 +x:1 +花鞋 1 +x:1 +税银 1 +x:1 +同学会 1 +x:1 +随机性 1 +x:1 +一低一高 1 +x:1 +送交 1 +x:1 +防灾 1 +x:1 +峰回路转 1 +x:1 +水轮机 1 +x:1 +南涝北旱 1 +x:1 +送亲 1 +x:1 +实像 1 +x:1 +沦陷区 1 +x:1 +相互 1 +x:1 +防火 1 +x:1 +卖力 1 +x:1 +咏叹 1 +x:1 +短斤少两 1 +x:1 +涣然冰释 1 +x:1 +中药学 1 +x:1 +卫士长 1 +x:1 +鸭蛋 1 +x:1 +访问 1 +x:1 +安乡县 1 +x:1 +天下者 1 +x:1 +脱收台 1 +x:1 +欺辱 1 +x:1 +丁亥年 1 +x:1 +恰卡奥市 1 +x:1 +声光化电 1 +x:1 +种植区 1 +x:1 +磨耗 1 +x:1 +相乘 1 +x:1 +麾下 1 +x:1 +司法局 1 +x:1 +偏爱 1 +x:1 +药商 1 +x:1 +抽击力 1 +x:1 +押 13 +x:13 +家门口 1 +x:1 +耳细胞 1 +x:1 +练习场 1 +x:1 +坑穴 1 +x:1 +相中 1 +x:1 +肃杀逼人 1 +x:1 +从未有过 1 +x:1 +杳无音信 1 +x:1 +疑犯 1 +x:1 +案发率 1 +x:1 +花露 1 +x:1 +相与 1 +x:1 +挖肉补疮 1 +x:1 +托偶 1 +x:1 +瓦岗集 1 +x:1 +人均 1 +x:1 +收款人 1 +x:1 +数目字 1 +x:1 +向阳花 1 +x:1 +琶音 1 +x:1 +土暖气 1 +x:1 +一举成名 1 +x:1 +炒手 1 +x:1 +涌涌 1 +x:1 +葳蕤 1 +x:1 +老翁 1 +x:1 +凯巴布 1 +x:1 +花雕 1 +x:1 +匿迹 1 +x:1 +忙乎 1 +x:1 +尽好 1 +x:1 +相信 1 +x:1 +欠息 1 +x:1 +窥探 1 +x:1 +触类旁通 1 +x:1 +信息茶 1 +x:1 +可可茶 1 +x:1 +民营化 1 +x:1 +日暮途穷 1 +x:1 +巴里港 1 +x:1 +伦理观 1 +x:1 +送信 1 +x:1 +命途 1 +x:1 +溥 4 +x:4 +舔砖 1 +x:1 +说服力 1 +x:1 +遥感图 1 +x:1 +漏着 1 +x:1 +宣传周 1 +x:1 +见到 1 +x:1 +光脆性 1 +x:1 +山北村 1 +x:1 +慷慨悲歌 1 +x:1 +忙乱 1 +x:1 +未必 1 +x:1 +利刃 1 +x:1 +恋战 1 +x:1 +尽头 1 +x:1 +汊河镇 1 +x:1 +入围奖 1 +x:1 +护垫 1 +x:1 +不三不四 1 +x:1 +光亮 1 +x:1 +花障 1 +x:1 +宏天伟地 1 +x:1 +隧道口 1 +x:1 +山阳区 1 +x:1 +晓之以理 1 +x:1 +学问 1 +x:1 +缆车线 1 +x:1 +仿纸 1 +x:1 +利剑 1 +x:1 +单簧管 1 +x:1 +光彩照人 1 +x:1 +尽处 1 +x:1 +时至 1 +x:1 +水害区 1 +x:1 +相依 1 +x:1 +东直门桥 1 +x:1 +狼藉 1 +x:1 +编辑组 1 +x:1 +从善如流 1 +x:1 +石破天惊 1 +x:1 +龙庆峡 1 +x:1 +粉碎机 1 +x:1 +展区 1 +x:1 +图片库 1 +x:1 +巡回制 1 +x:1 +护坡 1 +x:1 +练习器 1 +x:1 +扶危济困 1 +x:1 +晚霞 1 +x:1 +禾山乡 1 +x:1 +宣传品 1 +x:1 +文正公 1 +x:1 +磕磕碰碰 1 +x:1 +睡着 1 +x:1 +清正廉洁 1 +x:1 +寄语 1 +x:1 +唇音 1 +x:1 +相位 1 +x:1 +乔迁之喜 1 +x:1 +内窥镜式 1 +x:1 +弯 46 +x:46 +岔道儿 1 +x:1 +护坝 1 +x:1 +测算 1 +x:1 +扭力 1 +x:1 +精忠报国 1 +x:1 +羹材 1 +x:1 +童便 1 +x:1 +空口无凭 1 +x:1 +绞盘 1 +x:1 +睡眠 1 +x:1 +划得来 1 +x:1 +忙于 1 +x:1 +仅仅 1 +x:1 +相传 1 +x:1 +黄骅 1 +x:1 +寨顶 1 +x:1 +漂亮者 1 +x:1 +学长 1 +x:1 +清清白白 1 +x:1 +铜片 1 +x:1 +申明 1 +x:1 +相似 1 +x:1 +扶贫乡 1 +x:1 +授权点 1 +x:1 +铜牌 1 +x:1 +绚 1 +x:1 +睡眼 1 +x:1 +铜版 1 +x:1 +教师法 1 +x:1 +生命权 1 +x:1 +赣 32 +x:32 +森森 1 +x:1 +约堡 1 +x:1 +声场 1 +x:1 +恳谈会 1 +x:1 +展卖 1 +x:1 +斑驳陆离 1 +x:1 +有喜有忧 1 +x:1 +国别性 1 +x:1 +美蛙 1 +x:1 +地脚螺丝 1 +x:1 +倒灌 1 +x:1 +南龙崮村 1 +x:1 +庆功 1 +x:1 +沂源县 1 +x:1 +人心所向 1 +x:1 +东莞站 1 +x:1 +推拿 1 +x:1 +二十二日 1 +x:1 +包租费 1 +x:1 +祸从口出 1 +x:1 +饶桥镇 1 +x:1 +得票率 1 +x:1 +患儿 1 +x:1 +沮 1 +x:1 +声响 1 +x:1 +东门外 1 +x:1 +马大哈 1 +x:1 +方格呢 1 +x:1 +逞能 1 +x:1 +秉公为政 1 +x:1 +疾徐 1 +x:1 +增值额 1 +x:1 +眼角膜 1 +x:1 +先进岗 1 +x:1 +投资局 1 +x:1 +欺负 1 +x:1 +收费局 1 +x:1 +储藏 1 +x:1 +搭架 1 +x:1 +无以为继 1 +x:1 +航天界 1 +x:1 +玻纤厂 1 +x:1 +硝镪水 1 +x:1 +娃娃生 1 +x:1 +门庭若市 1 +x:1 +俱毁 1 +x:1 +一道 1 +x:1 +彝家 1 +x:1 +膝旁 1 +x:1 +老粗 1 +x:1 +洛山基 1 +x:1 +沙坨地 1 +x:1 +退伍 1 +x:1 +办公楼 1 +x:1 +钻石婚 1 +x:1 +听忧 1 +x:1 +寻救 1 +x:1 +青椒 1 +x:1 +提交 1 +x:1 +扬中 1 +x:1 +银行学 1 +x:1 +十星级 1 +x:1 +求援信 1 +x:1 +新潮 1 +x:1 +申斥 1 +x:1 +打抱不平 1 +x:1 +丝袜 1 +x:1 +花镜 1 +x:1 +导电 1 +x:1 +爆炸物 1 +x:1 +淮南市 1 +x:1 +软磨硬泡 1 +x:1 +五分制 1 +x:1 +远程 1 +x:1 +防冻棚 1 +x:1 +修理商 1 +x:1 +推托 1 +x:1 +占领 1 +x:1 +漂流记 1 +x:1 +负荆请罪 1 +x:1 +不满足感 1 +x:1 +神理 1 +x:1 +欠揍 1 +x:1 +签呈 1 +x:1 +推手 1 +x:1 +锵 3 +x:3 +入赘 1 +x:1 +老泪横流 1 +x:1 +德艺双馨 1 +x:1 +石头子儿 1 +x:1 +银行家 1 +x:1 +按理说 1 +x:1 +票钱 1 +x:1 +一机部 1 +x:1 +货郎鼓 1 +x:1 +疑点 1 +x:1 +入账 1 +x:1 +武安县 1 +x:1 +花销 1 +x:1 +汽修业 1 +x:1 +敕 2 +x:2 +重安江 1 +x:1 +龙固镇 1 +x:1 +十冬腊月 1 +x:1 +森林式 1 +x:1 +声名 1 +x:1 +补给品 1 +x:1 +未尝 1 +x:1 +扫荡 1 +x:1 +苗鸡 1 +x:1 +一部 1 +x:1 +制种 1 +x:1 +助听器 1 +x:1 +文部省 1 +x:1 +乐天派 1 +x:1 +标本兼治 1 +x:1 +检点 1 +x:1 +辽东湾 1 +x:1 +西线 1 +x:1 +糕干 1 +x:1 +买入价 1 +x:1 +纱裙 1 +x:1 +大河家乡 1 +x:1 +花都市 1 +x:1 +基藏本 1 +x:1 +卓然 1 +x:1 +水成岩 1 +x:1 +单纯 1 +x:1 +寻思 1 +x:1 +携机 1 +x:1 +报复主义 1 +x:1 +各有所识 1 +x:1 +西纠 1 +x:1 +人和 1 +x:1 +综治办 1 +x:1 +晒图纸 1 +x:1 +黄金树 1 +x:1 +褴褛不堪 1 +x:1 +尽孝 1 +x:1 +后半辈子 1 +x:1 +龙尾山 1 +x:1 +下结论 1 +x:1 +东港市 1 +x:1 +同调者 1 +x:1 +劳工部 1 +x:1 +远交近攻 1 +x:1 +情报所 1 +x:1 +储蓄 1 +x:1 +企图 1 +x:1 +增殖率 1 +x:1 +载荷 1 +x:1 +寒湿 1 +x:1 +乳猪 1 +x:1 +展出 1 +x:1 +碎冰机 1 +x:1 +各色各样 1 +x:1 +大中专生 1 +x:1 +未始 1 +x:1 +吉伦特 1 +x:1 +推推 1 +x:1 +泥丸 1 +x:1 +珠岛 1 +x:1 +少儿社 1 +x:1 +漏电 1 +x:1 +障碍赛跑 1 +x:1 +花钱 1 +x:1 +多存多贷 1 +x:1 +顺安 1 +x:1 +阿拉伯人 1 +x:1 +恋恋 1 +x:1 +府前路 1 +x:1 +人品 1 +x:1 +西经 1 +x:1 +联动型 1 +x:1 +巡访团 1 +x:1 +错漏填率 1 +x:1 +晚间 1 +x:1 +单组 1 +x:1 +虾 39 +x:39 +倒爷 1 +x:1 +钻工 1 +x:1 +呼喊声 1 +x:1 +结缔组织 1 +x:1 +旗手 1 +x:1 +开小灶 1 +x:1 +迂腐 1 +x:1 +浦东队 1 +x:1 +挖空心思 1 +x:1 +过后 1 +x:1 +鼯鼠 1 +x:1 +工业省 1 +x:1 +通俗化 1 +x:1 +人名 1 +x:1 +个人 1 +x:1 +芽体 1 +x:1 +索引 1 +x:1 +市优 1 +x:1 +雨花石 1 +x:1 +现 540 +x:540 +洗头 1 +x:1 +自动步枪 1 +x:1 +翠湖 1 +x:1 +不能自拔 1 +x:1 +开福区 1 +x:1 +漏疮 1 +x:1 +慌张 1 +x:1 +自然天成 1 +x:1 +中放 1 +x:1 +招示牌 1 +x:1 +人命 1 +x:1 +癖性 1 +x:1 +泥人 1 +x:1 +磕头机 1 +x:1 +转任 1 +x:1 +正离子 1 +x:1 +红葡萄酒 1 +x:1 +恋情 1 +x:1 +无人不知 1 +x:1 +主意 1 +x:1 +合同法 1 +x:1 +慈爱 1 +x:1 +慈父 1 +x:1 +还牧 1 +x:1 +儿媳妇 1 +x:1 +漏税者 1 +x:1 +染坊 1 +x:1 +森林带 1 +x:1 +初四五 1 +x:1 +人员 1 +x:1 +间 1611 +x:1611 +捻 4 +x:4 +新滩 1 +x:1 +合同款 1 +x:1 +粮袋 1 +x:1 +文笔 1 +x:1 +乐平籍 1 +x:1 +脑神经 1 +x:1 +睡狮 1 +x:1 +过厅 1 +x:1 +授粉 1 +x:1 +浠水 1 +x:1 +收购价 1 +x:1 +中部委 1 +x:1 +美茵 1 +x:1 +升级型 1 +x:1 +提起 1 +x:1 +风钻 1 +x:1 +罩棚 1 +x:1 +工作处 1 +x:1 +锦旗 1 +x:1 +门巴族 1 +x:1 +怯懦 1 +x:1 +过去 1 +x:1 +无言以对 1 +x:1 +畜 93 +x:93 +正三角形 1 +x:1 +见地 1 +x:1 +硬汉子 1 +x:1 +二醋酸 1 +x:1 +一阵 1 +x:1 +芦笙场 1 +x:1 +鞋套 1 +x:1 +腮壳 1 +x:1 +金鸡独立 1 +x:1 +西移 1 +x:1 +悻然 1 +x:1 +司号员 1 +x:1 +脑袋瓜子 1 +x:1 +骨灰盒 1 +x:1 +分委会 1 +x:1 +机械性能 1 +x:1 +窝棚 1 +x:1 +展园 1 +x:1 +收购人 1 +x:1 +看人下菜 1 +x:1 +老窖 1 +x:1 +学部 1 +x:1 +展团 1 +x:1 +沙滩装 1 +x:1 +黄鼬 1 +x:1 +反躬自省 1 +x:1 +图画书 1 +x:1 +序文 1 +x:1 +铜矿 1 +x:1 +就医 1 +x:1 +警报 1 +x:1 +声势 1 +x:1 +人参 1 +x:1 +独断专行 1 +x:1 +考核 1 +x:1 +白洋淀 1 +x:1 +乌海市 1 +x:1 +奔走呼号 1 +x:1 +宁家坡 1 +x:1 +韭菜岭 1 +x:1 +鲁南 1 +x:1 +折返跑 1 +x:1 +半导体业 1 +x:1 +新芬党 1 +x:1 +巴籍 1 +x:1 +面包房 1 +x:1 +老三届 1 +x:1 +驮 12 +x:12 +麋鹿 1 +x:1 +面包户 1 +x:1 +序数 1 +x:1 +矢口抵赖 1 +x:1 +活契 1 +x:1 +铁道部 1 +x:1 +下工夫 1 +x:1 +未婚 1 +x:1 +哪些 1 +x:1 +遇难者 1 +x:1 +纬 6 +x:6 +额手称庆 1 +x:1 +光盘机 1 +x:1 +句法 1 +x:1 +人化 1 +x:1 +漏犯 1 +x:1 +人卫 1 +x:1 +签到 1 +x:1 +多拍球 1 +x:1 +寄费 1 +x:1 +艺风 1 +x:1 +基本型 1 +x:1 +索取权 1 +x:1 +谢电 1 +x:1 +满贯 1 +x:1 +教育学 1 +x:1 +鹗 1 +x:1 +黄龙 1 +x:1 +咒语 1 +x:1 +推搡 1 +x:1 +坝 19 +x:19 +过半 1 +x:1 +彩印厂 1 +x:1 +排他 1 +x:1 +亡魂 1 +x:1 +欺诈 1 +x:1 +歌似潮 1 +x:1 +旦 10 +x:10 +上传下达 1 +x:1 +咖啡渍 1 +x:1 +淤血 1 +x:1 +正经八百 1 +x:1 +间谍 1 +x:1 +收购业 1 +x:1 +创新奖 1 +x:1 +测绘 1 +x:1 +藏青 1 +x:1 +顺差 1 +x:1 +扶绥 1 +x:1 +弃糟取精 1 +x:1 +订正 1 +x:1 +黄鹂 1 +x:1 +塘公索 1 +x:1 +麇集 1 +x:1 +渭南 1 +x:1 +犯不着 1 +x:1 +招集 1 +x:1 +哈拉兹 1 +x:1 +驳 7 +x:7 +择优录用 1 +x:1 +侣伴 1 +x:1 +力排众议 1 +x:1 +踢 170 +x:170 +未央湖 1 +x:1 +规定性 1 +x:1 +正版率 1 +x:1 +签发 1 +x:1 +及至 1 +x:1 +普兰店 1 +x:1 +随机数 1 +x:1 +人力 1 +x:1 +铜皮 1 +x:1 +张罗 1 +x:1 +宅舍 1 +x:1 +在押犯 1 +x:1 +幂 1 +x:1 +银行局 1 +x:1 +天知道 1 +x:1 +糟踏 1 +x:1 +寻找 1 +x:1 +年龄组 1 +x:1 +利器 1 +x:1 +渭北 1 +x:1 +资中 1 +x:1 +推断 1 +x:1 +鱼花 1 +x:1 +美色 1 +x:1 +美艳 1 +x:1 +寻扯 1 +x:1 +热泵型 1 +x:1 +眉纹 1 +x:1 +钟楼 1 +x:1 +由头 1 +x:1 +未定 1 +x:1 +游医 1 +x:1 +分裂主义 1 +x:1 +兼容并蓄 1 +x:1 +南瓜籽 1 +x:1 +间谷 1 +x:1 +税金 1 +x:1 +景致 1 +x:1 +申报 1 +x:1 +莫愁湖 1 +x:1 +伊加特 1 +x:1 +疲顿 1 +x:1 +袜筒 1 +x:1 +护卫 1 +x:1 +制约 1 +x:1 +展场 1 +x:1 +推敲 1 +x:1 +排便 1 +x:1 +不 30314 +x:30314 +眨眼 1 +x:1 +过分 1 +x:1 +申扎 1 +x:1 +横剖面 1 +x:1 +词讼 1 +x:1 +维生素E 1 +x:1 +颠沛流离 1 +x:1 +维生素C 1 +x:1 +维生素B 1 +x:1 +维生素A 1 +x:1 +水轮 1 +x:1 +护兵 1 +x:1 +灌溉渠 1 +x:1 +食用油 1 +x:1 +增强型 1 +x:1 +秋令 1 +x:1 +永乐镇 1 +x:1 +活塞 1 +x:1 +千里眼 1 +x:1 +鞣料 1 +x:1 +岩性 1 +x:1 +崖顶 1 +x:1 +城近郊 1 +x:1 +戏剧性 1 +x:1 +非手术 1 +x:1 +防疫 1 +x:1 +忿忿 1 +x:1 +命在旦夕 1 +x:1 +南瓜糊 1 +x:1 +投资家 1 +x:1 +每周 1 +x:1 +词语 1 +x:1 +模拟制式 1 +x:1 +恋曲 1 +x:1 +堕胎者 1 +x:1 +新棉 1 +x:1 +过客 1 +x:1 +烟霞 1 +x:1 +钨丝 1 +x:1 +双人跳 1 +x:1 +脉压 1 +x:1 +就势 1 +x:1 +就是了 1 +x:1 +辅线 1 +x:1 +船营区 1 +x:1 +千瓦小时 1 +x:1 +黄麻 1 +x:1 +证据关 1 +x:1 +词话 1 +x:1 +编著者 1 +x:1 +所见者 1 +x:1 +义学 1 +x:1 +过剩 1 +x:1 +门路 1 +x:1 +承天殿 1 +x:1 +农业部 1 +x:1 +欠条 1 +x:1 +主报 1 +x:1 +企及 1 +x:1 +酒酣耳热 1 +x:1 +疾家 1 +x:1 +当局者 1 +x:1 +落耳坡村 1 +x:1 +染动 1 +x:1 +训练场地 1 +x:1 +试航 1 +x:1 +顺延 1 +x:1 +声像 1 +x:1 +束流 1 +x:1 +证据力 1 +x:1 +企口 1 +x:1 +加方 1 +x:1 +石子儿 1 +x:1 +掩 24 +x:24 +强身健体 1 +x:1 +鱼秧子 1 +x:1 +加速运动 1 +x:1 +新款 1 +x:1 +草菇场 1 +x:1 +新欢 1 +x:1 +始作俑者 1 +x:1 +大而无当 1 +x:1 +建筑学术 1 +x:1 +过冬 1 +x:1 +审判权 1 +x:1 +麦禾营镇 1 +x:1 +主抓 1 +x:1 +风雨交加 1 +x:1 +单程 1 +x:1 +苏呼米市 1 +x:1 +红铃虫 1 +x:1 +以农为本 1 +x:1 +词表 1 +x:1 +虐 1 +x:1 +外源性 1 +x:1 +珠东乡 1 +x:1 +总危机 1 +x:1 +渌头江村 1 +x:1 +海兴县 1 +x:1 +餐饮 1 +x:1 +徐行 1 +x:1 +膝下 1 +x:1 +市井 1 +x:1 +展示室 1 +x:1 +繁丽 1 +x:1 +欠有 1 +x:1 +芒果树 1 +x:1 +拳击手 1 +x:1 +无军籍 1 +x:1 +转椅 1 +x:1 +新步 1 +x:1 +顺应 1 +x:1 +单篇 1 +x:1 +展品 1 +x:1 +代办员 1 +x:1 +玻壳 1 +x:1 +旗杆 1 +x:1 +花酒 1 +x:1 +双数 1 +x:1 +胭脂 1 +x:1 +足音 1 +x:1 +一针 1 +x:1 +白塔乡 1 +x:1 +茶亭 1 +x:1 +企协 1 +x:1 +藤球 1 +x:1 +人儿 1 +x:1 +躲开 1 +x:1 +每场 1 +x:1 +中子星 1 +x:1 +月明如镜 1 +x:1 +懒洋洋 1 +x:1 +限定性 1 +x:1 +粉碎性 1 +x:1 +橙黄色 1 +x:1 +洗尘 1 +x:1 +宣传司 1 +x:1 +既成事实 1 +x:1 +架空层 1 +x:1 +培植 1 +x:1 +乘客 1 +x:1 +芳菲 1 +x:1 +串线 1 +x:1 +用工方 1 +x:1 +个体 1 +x:1 +个位 1 +x:1 +锣鼓队 1 +x:1 +不名誉 1 +x:1 +发案率 1 +x:1 +笨重 1 +x:1 +计划部 1 +x:1 +黑岛镇 1 +x:1 +得病 1 +x:1 +防盗 1 +x:1 +恋旧 1 +x:1 +市局级 1 +x:1 +隶书 1 +x:1 +吹管 1 +x:1 +陨石 1 +x:1 +顺带 1 +x:1 +复馆 1 +x:1 +鸭肉 1 +x:1 +东借西凑 1 +x:1 +人仰马翻 1 +x:1 +繁体 1 +x:1 +独立词 1 +x:1 +外委会 1 +x:1 +珞 1 +x:1 +邯郸县 1 +x:1 +过关 1 +x:1 +拐骗 1 +x:1 +防盲 1 +x:1 +防腐蚀 1 +x:1 +无触点 1 +x:1 +毒副作用 1 +x:1 +琅琊乡 1 +x:1 +窨水井 1 +x:1 +炉条 1 +x:1 +每块 1 +x:1 +漂白 1 +x:1 +光盘数 1 +x:1 +豫西 1 +x:1 +景色 1 +x:1 +钩 18 +x:18 +微波通信 1 +x:1 +出其不意 1 +x:1 +刮刀 1 +x:1 +例 289 +x:289 +实现制 1 +x:1 +腕儿 1 +x:1 +侧根 1 +x:1 +觉世 1 +x:1 +驯化 1 +x:1 +襟前 1 +x:1 +总论 1 +x:1 +农林厅 1 +x:1 +虎口余生 1 +x:1 +此法 1 +x:1 +连阴天 1 +x:1 +总协定 1 +x:1 +泉眼 1 +x:1 +浩浩淼淼 1 +x:1 +耪 1 +x:1 +花都 1 +x:1 +福安市 1 +x:1 +寄赠 1 +x:1 +顺心 1 +x:1 +黄鱼 1 +x:1 +利名 1 +x:1 +更进一步 1 +x:1 +减税额 1 +x:1 +有志之士 1 +x:1 +茶会 1 +x:1 +勺子 1 +x:1 +丝质 1 +x:1 +充气棒 1 +x:1 +花繁叶茂 1 +x:1 +东门屿 1 +x:1 +炼丹术 1 +x:1 +紫雪 1 +x:1 +极坐标 1 +x:1 +西端 1 +x:1 +试药 1 +x:1 +格式化 1 +x:1 +顺德 1 +x:1 +价格法 1 +x:1 +司法宫 1 +x:1 +人像 1 +x:1 +主攻点 1 +x:1 +西站 1 +x:1 +稀疏 1 +x:1 +染发 1 +x:1 +原封不动 1 +x:1 +司法官 1 +x:1 +民管会 1 +x:1 +护农 1 +x:1 +长治市 1 +x:1 +弱败 1 +x:1 +滔天罪行 1 +x:1 +弱质 1 +x:1 +睡熟 1 +x:1 +飘荡 1 +x:1 +首倡者 1 +x:1 +扳倒 1 +x:1 +马仰人翻 1 +x:1 +餐食 1 +x:1 +牧医系 1 +x:1 +黄鳝 1 +x:1 +尽忠 1 +x:1 +索性 1 +x:1 +亘 1 +x:1 +护具 1 +x:1 +美育 1 +x:1 +声光 1 +x:1 +美肴 1 +x:1 +尽快 1 +x:1 +榫接式 1 +x:1 +左上 1 +x:1 +镍币 1 +x:1 +规矩 1 +x:1 +红十字日 1 +x:1 +染化 1 +x:1 +光解作用 1 +x:1 +尽职 1 +x:1 +尽心 1 +x:1 +灼见 1 +x:1 +一有 1 +x:1 +推杆 1 +x:1 +傣乡 1 +x:1 +顺当 1 +x:1 +正房 1 +x:1 +展板 1 +x:1 +独木难支 1 +x:1 +宣传办 1 +x:1 +珍珠城 1 +x:1 +况且 1 +x:1 +生平厅 1 +x:1 +个中 1 +x:1 +略知一二 1 +x:1 +企划 1 +x:1 +个个 1 +x:1 +于都县 1 +x:1 +无烟日 1 +x:1 +番茄酱 1 +x:1 +取决于 1 +x:1 +雷锋班 1 +x:1 +槽体 1 +x:1 +配给 1 +x:1 +声儿 1 +x:1 +拿手戏 1 +x:1 +哲 11 +x:11 +外行话 1 +x:1 +海斯队 1 +x:1 +丝路 1 +x:1 +令人心悸 1 +x:1 diff --git a/coreseek/mmseg-3.2.14/libtool b/coreseek/mmseg-3.2.14/libtool new file mode 100755 index 0000000..1851719 --- /dev/null +++ b/coreseek/mmseg-3.2.14/libtool @@ -0,0 +1,10246 @@ +#! /bin/bash + +# libtool - Provide generalized library-building support services. +# Generated automatically by config.status (mmseg) 0.7 +# Libtool was configured on host data-center: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=2.4.2 +macro_revision=1.3337 + +# Whether or not to build shared libraries. +build_libtool_libs=yes + +# Whether or not to build static libraries. +build_old_libs=yes + +# What type of objects to build. +pic_mode=default + +# Whether or not to optimize for fast installation. +fast_install=yes + +# Shell to use when invoking shell scripts. +SHELL="/bin/bash" + +# An echo program that protects backslashes. +ECHO="printf %s\\n" + +# The PATH separator for the build system. +PATH_SEPARATOR=":" + +# The host system. +host_alias= +host=x86_64-unknown-linux-gnu +host_os=linux-gnu + +# The build system. +build_alias= +build=x86_64-unknown-linux-gnu +build_os=linux-gnu + +# A sed program that does not truncate output. +SED="/bin/sed" + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP="/bin/grep" + +# An ERE matcher. +EGREP="/bin/grep -E" + +# A literal string matcher. +FGREP="/bin/grep -F" + +# A BSD- or MS-compatible name lister. +NM="/usr/bin/nm -B" + +# Whether we need soft or hard links. +LN_S="ln -s" + +# What is the maximum length of a command? +max_cmd_len=1572864 + +# Object file suffix (normally "o"). +objext=o + +# Executable file suffix (normally ""). +exeext= + +# whether the shell understands "unset". +lt_unset=unset + +# turn spaces into newlines. +SP2NL="tr \\040 \\012" + +# turn newlines into spaces. +NL2SP="tr \\015\\012 \\040\\040" + +# convert $build file names to $host format. +to_host_file_cmd=func_convert_file_noop + +# convert $build files to toolchain format. +to_tool_file_cmd=func_convert_file_noop + +# An object symbol dumper. +OBJDUMP="objdump" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="pass_all" + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd="\$MAGIC_CMD" + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob="" + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob="no" + +# DLL creation program. +DLLTOOL="false" + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd="printf %s\\n" + +# The archiver. +AR="ar" + +# Flags to create an archive. +AR_FLAGS="cru" + +# How to feed a file listing to the archiver. +archiver_list_spec="@" + +# A symbol stripping program. +STRIP="strip" + +# Commands used to install an old-style archive. +RANLIB="ranlib" +old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$tool_oldlib" +old_postuninstall_cmds="" + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=no + +# A C compiler. +LTCC="gcc" + +# LTCC compiler flags. +LTCFLAGS="-g -O2" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p' | sed '/ __gnu_lto/d'" + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl="sed -n -e 's/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'" + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\)[ ]*\$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p'" + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\)[ ]*\$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'" + +# Specify filename containing input files for $NM. +nm_file_list_spec="@" + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot= + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=file + +# Must we lock files when doing compilation? +need_locks="no" + +# Manifest tool. +MANIFEST_TOOL=":" + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL="" + +# Tool to change global to local symbols on Mac OS X. +NMEDIT="" + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO="" + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL="" + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64="" + +# Old archive suffix (normally "a"). +libext=a + +# Shared library suffix (normally ".so"). +shrext_cmds=".so" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Do we need the "lib" prefix for modules? +need_lib_prefix=no + +# Do we need a version for libraries? +need_version=no + +# Library versioning type. +version_type=linux + +# Shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# Shared library path variable. +shlibpath_var=LD_LIBRARY_PATH + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=no + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix \${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}" + +# The coded name of the library, if different from the real name. +soname_spec="\${libname}\${release}\${shared_ext}\$major" + +# Permission mode override for installation of shared libraries. +install_override_mode="" + +# Command to use after installation of a shared archive. +postinstall_cmds="" + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval="" + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=yes + +# Compile-time system search path for libraries. +sys_lib_search_path_spec="/usr/lib/gcc/x86_64-linux-gnu/4.6 /usr/lib/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib " + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/mesa " + +# Whether dlopen is supported. +dlopen_support=unknown + +# Whether dlopen of programs is supported. +dlopen_self=unknown + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + + +# The linker used to build libraries. +LD="/usr/bin/ld -m elf_x86_64" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" + +# A language specific compiler. +CC="gcc" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~ + cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> \$output_objdir/\$libname.ver~ + echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~ + \$CC -shared \$pic_flag \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=no + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Commands necessary for finishing linking programs. +postlink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs="" + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects="" +postdep_objects="" +predeps="" +postdeps="" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="" + +# ### END LIBTOOL CONFIG + + +# libtool (GNU libtool) 2.4.2 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, +# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --no-quiet, --no-silent +# print informational messages (default) +# --no-warn don't display warning messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print more informational messages than default +# --no-verbose don't print the extra informational messages +# --version print version information +# -h, --help, --help-all print short, long, or detailed help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. When passed as first option, +# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . + +PROGRAM=libtool +PACKAGE=libtool +VERSION="2.4.2 Debian-2.4.2-1ubuntu1" +TIMESTAMP="" +package_revision=1.3337 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# NLS nuisances: We save the old values to restore during execute mode. +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done +LC_ALL=C +LANGUAGE=C +export LANGUAGE LC_ALL + +$lt_unset CDPATH + + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + + + +: ${CP="cp -f"} +test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} # Extended-shell func_dirname implementation + + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} # Extended-shell func_basename implementation + + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} # Extended-shell func_dirname_and_basename implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} # Extended-shell func_stripname implementation + + +# These SED scripts presuppose an absolute path with a trailing slash. +pathcar='s,^/\([^/]*\).*$,\1,' +pathcdr='s,^/[^/]*,,' +removedotparts=':dotsl + s@/\./@/@g + t dotsl + s,/\.$,/,' +collapseslashes='s@/\{1,\}@/@g' +finalslash='s,/*$,/,' + +# func_normal_abspath PATH +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +# value returned in "$func_normal_abspath_result" +func_normal_abspath () +{ + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` + while :; do + # Processed it all yet? + if test "$func_normal_abspath_tpath" = / ; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result" ; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + +# func_relative_path SRCDIR DSTDIR +# generates a relative path from SRCDIR to DSTDIR, with a trailing +# slash if non-empty, suitable for immediately appending a filename +# without needing to append a separator. +# value returned in "$func_relative_path_result" +func_relative_path () +{ + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=${func_dirname_result} + if test "x$func_relative_path_tlibdir" = x ; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test "x$func_stripname_result" != x ; then + func_relative_path_result=${func_relative_path_result}/${func_stripname_result} + fi + + # Normalisation. If bindir is libdir, return empty string, + # else relative path ending with a slash; either way, target + # file name can be directly appended. + if test ! -z "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result/" + func_relative_path_result=$func_stripname_result + fi +} + +# The name of this program: +func_dirname_and_basename "$progpath" +progname=$func_basename_result + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` + done + my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "$my_tmpdir" +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "$1" | $SED \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $opt_debug + + $SED -n '/(C)/!b go + :more + /\./!{ + N + s/\n# / / + b more + } + :go + /^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $opt_debug + + $SED -n '/^# Usage:/,/^# *.*--help/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + echo + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help [NOEXIT] +# Echo long help message to standard output and exit, +# unless 'noexit' is passed as argument. +func_help () +{ + $opt_debug + + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ + p + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" + ret=$? + if test -z "$1"; then + exit $ret + fi +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $opt_debug + + func_error "missing argument for $1." + exit_cmd=exit +} + + +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} +} # Extended-shell func_split_short_opt implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=} +} # Extended-shell func_split_long_opt implementation + +exit_cmd=: + + + + + +magic="%%%MAGIC variable%%%" +magic_exe="%%%MAGIC EXE variable%%%" + +# Global variables. +nonopt= +preserve_args= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}+=\${2}" +} # Extended-shell func_append implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}+=\\ \$func_quote_for_eval_result" +} # Extended-shell func_append_quoted implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} # Extended-shell func_arith implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} # Extended-shell func_len implementation + + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} # Extended-shell func_lo2o implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} # Extended-shell func_xform implementation + + +# func_fatal_configuration arg... +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func_error ${1+"$@"} + func_error "See the $PACKAGE documentation for more information." + func_fatal_error "Fatal configuration error." +} + + +# func_config +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + +# func_features +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + +# func_enable_tag tagname +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname="$1" + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf="/$re_begincf/,/$re_endcf/p" + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_warning=: +opt_verbose=: +opt_silent=false +opt_verbose=false + + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + --debug|-x) opt_debug='set -x' + func_echo "enabling shell trace mode" + $opt_debug + ;; + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" + shift + ;; + --preserve-dup-deps) + opt_preserve_dup_deps=: + ;; + --features) + opt_features=: +func_features + ;; + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) + opt_silent=false +preserve_args+=" $opt" + ;; + --no-warning|--no-warn) + opt_warning=false +preserve_args+=" $opt" + ;; + --no-verbose) + opt_verbose=false +preserve_args+=" $opt" + ;; + --silent|--quiet) + opt_silent=: +preserve_args+=" $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +preserve_args+=" $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +preserve_args+=" $opt $optarg" +func_enable_tag "$optarg" + shift + ;; + + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + + # Separate optargs to long options: + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; + esac + done + + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || preserve_args+=" --debug" + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } + + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} + + + + +## ----------- ## +## Main. ## +## ----------- ## + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_to_host_path_result+="$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result="$func_cygpath_result" + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_mode_compile arg... +func_mode_compile () +{ + $opt_debug + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg="$arg" + arg_mode=normal + ;; + + target ) + libobj="$arg" + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify \`-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + pie_flag+=" $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + later+=" $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + func_append_quoted lastarg "$arg" + done + IFS="$save_ifs" + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + base_compile+=" $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg="$srcfile" + srcfile="$arg" + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with \`-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj="$func_basename_result" + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from \`$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist+=" $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist+=" $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command+=" -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command+=" -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command+="$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$opt_mode'" + ;; + esac + + echo + $ECHO "Try \`$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test "$opt_help" = :; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | sed -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + sed '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir+="/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + libdirs+=" $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + libs+=" $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds+=" + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog+="$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + files+=" $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test "x$prev" = x-m && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog+=" $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + install_shared_prog+=" $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + install_shared_prog+=" -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs+=" $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs+=" $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs+=" $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir+="$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs+=" $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$opt_mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags+=" $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + if test "$lock_old_archive_extraction" = yes; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test "$lock_old_archive_extraction" = yes; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ which is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options which match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +/* declarations of non-ANSI functions */ +#if defined(__MINGW32__) +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined(__CYGWIN__) +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined (other platforms) ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined(_MSC_VER) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +# ifndef _INTPTR_T_DEFINED +# define _INTPTR_T_DEFINED +# define intptr_t int +# endif +#elif defined(__MINGW32__) +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined(__CYGWIN__) +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined (other platforms) ... */ +#endif + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#if defined(LT_DEBUGWRAPPER) +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $opt_debug + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + libtool_args+=" $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command+=" @OUTPUT@" + finalize_command+=" @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir="$arg" + prev= + continue + ;; + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command+=" @SYMFILE@" + finalize_command+=" @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles+=" $arg" + else + dlprefiles+=" $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs+=" $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs+=" $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles+=" $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles+=" $pic_object" + prev= + fi + + # A PIC object. + libobjs+=" $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects+=" $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects+=" $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + libobjs+=" $pic_object" + non_pic_objects+=" $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath+=" $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath+=" $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs+=" $arg" + prev= + continue + ;; + xcclinker) + linker_flags+=" $qarg" + compiler_flags+=" $qarg" + prev= + compile_command+=" $qarg" + finalize_command+=" $qarg" + continue + ;; + xcompiler) + compiler_flags+=" $qarg" + prev= + compile_command+=" $qarg" + finalize_command+=" $qarg" + continue + ;; + xlinker) + linker_flags+=" $qarg" + compiler_flags+=" $wl$qarg" + prev= + compile_command+=" $wl$qarg" + finalize_command+=" $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + compile_command+=" $link_static_flag" + finalize_command+=" $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + compile_command+=" $arg" + finalize_command+=" $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) deplibs+=" $arg" ;; + *) deplibs+=" -L$dir" ;; + esac + lib_search_path+=" $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath+=":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath+=":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs+=" System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs+=" $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + compiler_flags+=" $arg" + compile_command+=" $arg" + finalize_command+=" $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + compiler_flags+=" $arg" + compile_command+=" $arg" + finalize_command+=" $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags+=" $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath+=" $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg+=" $func_quote_for_eval_result" + compiler_flags+=" $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg+=" $wl$func_quote_for_eval_result" + compiler_flags+=" $wl$func_quote_for_eval_result" + linker_flags+=" $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-flto*|-fwhopr*|-fuse-linker-plugin) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + compile_command+=" $arg" + finalize_command+=" $arg" + compiler_flags+=" $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs+=" $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles+=" $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles+=" $pic_object" + prev= + fi + + # A PIC object. + libobjs+=" $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + non_pic_objects+=" $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + non_pic_objects+=" $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + libobjs+=" $pic_object" + non_pic_objects+=" $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs+=" $arg" + old_deplibs+=" $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles+=" $func_resolve_sysroot_result" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles+=" $func_resolve_sysroot_result" + prev= + else + deplibs+=" $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command+=" $arg" + finalize_command+=" $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command+=" $arg" + finalize_command+=" $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs+=" $deplib" ;; + esac + fi + libs+=" $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs+=" $pre_post_deps" ;; + esac + pre_post_deps+=" $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) + libs="$deplibs %DEPLIBS%" + test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" + ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs+=" $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags+=" $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags+=" $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags+=" $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + newlib_search_path+=" $func_resolve_sysroot_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + newlib_search_path+=" $func_resolve_sysroot_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath+=" $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + else + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles+=" $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles+=" $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags+=" $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles+=" $dlopen" + test -n "$dlpreopen" && dlprefiles+=" $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience+=" $ladir/$objdir/$old_library" + old_convenience+=" $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs+=" $deplib" ;; + esac + fi + tmp_libs+=" $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test "$prefer_static_libs" = yes || + test "$prefer_static_libs,$installed" = "built,no"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib="$l" + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles+=" $lib $dependency_libs" + else + newdlfiles+=" $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$lt_sysroot$libdir" + absdir="$lt_sysroot$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path+=" $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path+=" $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + case "$host" in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + newdlprefiles+=" $dir/$linklib" + else + newdlprefiles+=" $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs+=" $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles+=" $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs+=" $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles+=" $dir/$dlname" + else + newdlprefiles+=" $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path+=" $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + newlib_search_path+=" $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs+=" $deplib" ;; + esac + fi + tmp_libs+=" $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath+="$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath+=" $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath+=" $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs+=" $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs+=" $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + echo + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath+=" $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath+=" $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$opt_mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$absdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir+=" -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath+="$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath+="$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$opt_mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath+="$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir+=" -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath+=" $temp_xrpath";; + esac;; + *) temp_deplibs+=" $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path+=" $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps ; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + specialdeplibs+=" $func_resolve_sysroot_result" ;; + esac + fi + tmp_libs+=" $func_resolve_sysroot_result" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags+=" ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags+=" -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path+=" $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs+=" $deplib" ;; + esac + ;; + *) tmp_libs+=" $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs+=" $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs+="$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs+=" $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|qnx|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + *) + func_fatal_configuration "$modename: unknown library version type \`$version_type'" + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring+=":${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs+=" $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$opt_mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist+=" $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs+=" $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + temp_xrpath+=" -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath+=" $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles+=" $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles+=" $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs+=" System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs+=" -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs+=" $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs+=" $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs+=" $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs+=" $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs+=" $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs+=" -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs+=" $deplib" ;; + esac + ;; + *) new_libs+=" $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Remove ${wl} instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs+="$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath+=" $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath+=" $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath+="$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames+=" $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles+=" $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd1 in $cmds; do + IFS="$save_ifs" + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + delfiles+=" $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles+=" $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs+=" $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + + func_extract_archives $gentop $convenience + libobjs+=" $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags+=" $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + delfiles+=" $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + delfiles+=" $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + objlist+=" $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\${concat_cmds}$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles+=" $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles+=" $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs+=" $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$opt_mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated+=" $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command+=" ${wl}-bind_at_load" + finalize_command+=" ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs+=" -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs+=" $deplib" ;; + esac + ;; + *) new_libs+=" $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command+=" $compile_deplibs" + finalize_command+=" $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath+=" $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs+="$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath+=" $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath+=" $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath+=":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath+=":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs+="$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath+=" $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath+=" $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=no + ;; + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath+="$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath+="$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs+=" $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + + func_extract_archives $gentop $addlibs + oldobjs+=" $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs+=" $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated+=" $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs+=" $gentop/$newobj" + ;; + *) oldobjs+=" $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + objlist+=" $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + func_resolve_sysroot "$deplib" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs+=" ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + newdependency_libs+=" -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + newdependency_libs+=" -R$func_replace_sysroot_result" + ;; + *) newdependency_libs+=" $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles+=" ${lt_sysroot:+=}$libdir/$name" + ;; + *) newdlfiles+=" $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles+=" ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles+=" $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles+=" $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test "x$bindir" != x ; + then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM+=" $arg"; rmforce=yes ;; + -*) RM+=" $arg" ;; + *) files+=" $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + odir="$objdir" + else + odir="$dir/$objdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$opt_mode" = uninstall && odir="$dir" + + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then + case " $rmdirs " in + *" $odir "*) ;; + *) rmdirs+=" $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles+=" $odir/$n" + done + test -n "$old_library" && rmfiles+=" $odir/$old_library" + + case "$opt_mode" in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && rmfiles+=" $odir/$dlname" ;; + esac + test -n "$libdir" && rmfiles+=" $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles+=" $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles+=" $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$opt_mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles+=" $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles+=" $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles+=" $odir/$name $odir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles+=" $odir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles+=" $odir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$opt_mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD="/usr/bin/ld -m elf_x86_64" + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# Commands used to build an old-style archive. +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$tool_oldlib" + +# A language specific compiler. +CC="g++" + +# Is the compiler the GNU compiler? +with_gcc=yes + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin" + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC -DPIC" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=no + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object="no" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build a shared archive. +archive_cmds="\$CC \$pic_flag -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="\$CC \$pic_flag -shared -nostdlib \$predep_objects \$libobjs \$deplibs \$postdep_objects \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds="" +module_expsym_cmds="" + +# Whether we are building with GNU ld or not. +with_gnu_ld="yes" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that enforces no undefined symbols. +no_undefined_flag="" + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist +hardcode_libdir_flag_spec="\${wl}-rpath \${wl}\$libdir" + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator="" + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=no + +# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting ${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=no + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=no + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=unsupported + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=no + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=no + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=no + +# Set to "yes" if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED 's/.* //' | sort | uniq > \$export_symbols" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*" + +# Symbols that must always be exported. +include_expsyms="" + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds="" + +# Commands necessary for finishing linking programs. +postlink_cmds="" + +# Specify filename containing input files. +file_list_spec="" + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs="/usr/lib/gcc/x86_64-linux-gnu/4.6 /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /usr/lib/gcc/x86_64-linux-gnu/4.6/../../.." + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects="/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginS.o" +postdep_objects="/usr/lib/gcc/x86_64-linux-gnu/4.6/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crtn.o" +predeps="" +postdeps="-lstdc++ -lm -lgcc_s -lc -lgcc_s" + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path="-L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/4.6/../../.." + +# ### END LIBTOOL TAG CONFIG: CXX diff --git a/coreseek/mmseg-3.2.14/python/mmseg_interface.cpp b/coreseek/mmseg-3.2.14/python/mmseg_interface.cpp new file mode 100755 index 0000000..aedeaec --- /dev/null +++ b/coreseek/mmseg-3.2.14/python/mmseg_interface.cpp @@ -0,0 +1,113 @@ +#include "mmseg_interface.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "SegmenterManager.h" +#include "Segmenter.h" +#include "csr_utils.h" + +using namespace std; +using namespace css; + +#ifdef __cplusplus +extern "C" { +#endif + + PyObject *init(PyObject *self, PyObject *args) { + char *fromPython; + PyObject *module = PyImport_ImportModule("cmmseg"); + // + /* + PyObject *module_dict = PyModule_GetDict(module); \ + PyObject *c_api_object = PyDict_GetItemString(module_dict, "_C_API"); \ + if (PyCObject_Check(c_api_object)) { \ + PyCurses_API = (void **)PyCObject_AsVoidPtr(c_api_object); \ + } \ + */ + { + PyObject *module_dict = PyModule_GetDict(module); + if(module_dict) { + PyObject *c_api_object = PyDict_GetItemString(module_dict, "__segmgr"); + if (c_api_object && PyCObject_Check(c_api_object)) + return self; + } + } + if (!PyArg_Parse(args, "(s)", &fromPython)){ + PyErr_SetString(PyExc_ValueError, "invalid dict_path"); + return NULL; + }else { + SegmenterManager* mgr = new SegmenterManager(); + int nRet = 0; + if(fromPython) + nRet = mgr->init(fromPython); + if(nRet == 0){ + //return self; + }else { + delete mgr; + PyErr_SetString(PyExc_ValueError, "invalid dict_path"); + return NULL; + } + //add to module obj + { + //bind to self + PyObject *c_api_object; + c_api_object = PyCObject_FromVoidPtr((void *)mgr, NULL); + if (c_api_object != NULL) + PyModule_AddObject(module, "__segmgr", c_api_object); + } + return module; + } +} + + PyObject *segment(PyObject *self, PyObject *args) { + + PyObject *module = PyImport_ImportModule("cmmseg"); + SegmenterManager* mgr = NULL; + { + PyObject *module_dict = PyModule_GetDict(module); + if(!module_dict) { + PyErr_SetString(PyExc_ValueError, "Needs load segment dictionary library frist!"); + return NULL; + } + PyObject *c_api_object = PyDict_GetItemString(module_dict, "__segmgr"); + + if (!c_api_object || !PyCObject_Check(c_api_object)) { + PyErr_SetString(PyExc_ValueError, "Needs load segment dictionary library frist!"); + return NULL; + } + mgr = (SegmenterManager*)PyCObject_AsVoidPtr(c_api_object); + } + + Segmenter* seg = mgr->getSegmenter(); + char *fromPython; + + if (!PyArg_Parse(args, "(s)", &fromPython)) + return NULL; + else { + seg->setBuffer((u1*)fromPython, (u4)strlen(fromPython)); + + PyObject* seg_result = PyList_New(0); + while(1) + { + u2 len = 0, symlen = 0; + char* tok = (char*)seg->peekToken(len,symlen); + if(!tok || !*tok || !len){ + break; + } + //append new item + PyList_Append(seg_result, PyString_FromStringAndSize(tok,len)); + seg->popToken(len); + } + return seg_result; + } +} + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/python/mmseg_interface.h b/coreseek/mmseg-3.2.14/python/mmseg_interface.h new file mode 100755 index 0000000..630d81a --- /dev/null +++ b/coreseek/mmseg-3.2.14/python/mmseg_interface.h @@ -0,0 +1,18 @@ +#ifndef Py_CMMSEGMODULE_H +#define Py_CMMSEGMODULE_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + PyObject *init(PyObject *self, PyObject *args); + PyObject *segment(PyObject *self, PyObject *args); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/python/pymmseg.c b/coreseek/mmseg-3.2.14/python/pymmseg.c new file mode 100755 index 0000000..6939614 --- /dev/null +++ b/coreseek/mmseg-3.2.14/python/pymmseg.c @@ -0,0 +1,32 @@ +#include +#include + +#include "mmseg_interface.h" + +/* +API +- init(dict_path):raise exception +- segment(string):list[] +FIXME: should use multi dict. +*/ +static struct PyMethodDef mmseg_methods[] = { + {"init", init, 1}, + {"segment", segment, 1}, + {NULL, NULL} +}; + +PyMODINIT_FUNC +initcmmseg() { + PyObject *m; + //PyObject *c_api_object; + + m = Py_InitModule("cmmseg", mmseg_methods); + if (m == NULL) + return; + /* + c_api_object = PyCObject_FromVoidPtr((void *)PySpam_API, NULL); + if (c_api_object != NULL) + PyModule_AddObject(m, "_C_API", c_api_object); + */ +} + diff --git a/coreseek/mmseg-3.2.14/python/pymmseg.sln b/coreseek/mmseg-3.2.14/python/pymmseg.sln new file mode 100755 index 0000000..c4c4a33 --- /dev/null +++ b/coreseek/mmseg-3.2.14/python/pymmseg.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 9.00 +# Visual Studio 2005 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pymmseg", "pymmseg.vcproj", "{67B60005-6B3D-4D5C-87CC-5FC650D2EDB8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {67B60005-6B3D-4D5C-87CC-5FC650D2EDB8}.Debug|Win32.ActiveCfg = Debug|Win32 + {67B60005-6B3D-4D5C-87CC-5FC650D2EDB8}.Debug|Win32.Build.0 = Debug|Win32 + {67B60005-6B3D-4D5C-87CC-5FC650D2EDB8}.Release|Win32.ActiveCfg = Release|Win32 + {67B60005-6B3D-4D5C-87CC-5FC650D2EDB8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/coreseek/mmseg-3.2.14/python/pymmseg.vcproj b/coreseek/mmseg-3.2.14/python/pymmseg.vcproj new file mode 100755 index 0000000..56169b8 --- /dev/null +++ b/coreseek/mmseg-3.2.14/python/pymmseg.vcproj @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coreseek/mmseg-3.2.14/python/tmmseg.py b/coreseek/mmseg-3.2.14/python/tmmseg.py new file mode 100755 index 0000000..0b346b6 --- /dev/null +++ b/coreseek/mmseg-3.2.14/python/tmmseg.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +import cmmseg +cmmseg.init('F:\\deps\\mmseg\\src\\win32') +rs = cmmseg.segment((u'中文分词').encode('utf-8')) +for i in rs: + print i.decode('utf-8') \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/ruby/Makefile b/coreseek/mmseg-3.2.14/ruby/Makefile new file mode 100755 index 0000000..493a676 --- /dev/null +++ b/coreseek/mmseg-3.2.14/ruby/Makefile @@ -0,0 +1,180 @@ + +SHELL = /bin/sh + +#### Start of system configuration section. #### + +srcdir = . +topdir = c:/ruby/lib/ruby/1.8/i386-mswin32 +hdrdir = $(topdir) +VPATH = $(srcdir);$(topdir);$(hdrdir) + +DESTDIR = c: +prefix = $(DESTDIR)/ruby +exec_prefix = $(prefix) +sitedir = $(prefix)/lib/ruby/site_ruby +rubylibdir = $(libdir)/ruby/$(ruby_version) +archdir = $(rubylibdir)/$(arch) +sbindir = $(exec_prefix)/sbin +datadir = $(prefix)/share +includedir = $(prefix)/include +infodir = $(prefix)/info +sysconfdir = $(prefix)/etc +mandir = $(prefix)/man +libdir = $(exec_prefix)/lib +sharedstatedir = $(DESTDIR)/etc +oldincludedir = $(DESTDIR)/usr/include +sitearchdir = $(sitelibdir)/$(sitearch) +localstatedir = $(DESTDIR)/var +bindir = $(exec_prefix)/bin +sitelibdir = $(sitedir)/$(ruby_version) +libexecdir = $(exec_prefix)/libexec + +CC = cl -nologo +LIBRUBY = $(RUBY_SO_NAME).lib +LIBRUBY_A = $(RUBY_SO_NAME)-static.lib +LIBRUBYARG_SHARED = $(LIBRUBY) +LIBRUBYARG_STATIC = $(LIBRUBY_A) + +RUBY_EXTCONF_H = +CFLAGS = -MD -Zi -O2b2xg- -G6 +INCFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir) +CPPFLAGS = -I../src/include +CXXFLAGS = $(CFLAGS) +DLDFLAGS = -link -incremental:no -debug -opt:ref -opt:icf -dll $(LIBPATH) -def:$(DEFFILE) -implib:$(*F:.so=)-$(arch).lib -pdb:$(*F:.so=)-$(arch).pdb +LDSHARED = cl -nologo -LD +AR = lib -nologo +EXEEXT = .exe + +RUBY_INSTALL_NAME = ruby +RUBY_SO_NAME = msvcrt-ruby18 +arch = i386-mswin32 +sitearch = i386-msvcrt +ruby_version = 1.8 +ruby = c:/ruby/bin/ruby +RUBY = $(ruby:/=\) +RM = $(RUBY) -run -e rm -- -f +MAKEDIRS = @$(RUBY) -run -e mkdir -- -p +INSTALL = @$(RUBY) -run -e install -- -vp +INSTALL_PROG = $(INSTALL) -m 0755 +INSTALL_DATA = $(INSTALL) -m 0644 +COPY = copy > nul + +#### End of system configuration section. #### + +preload = + +libpath = . $(libdir) ../src/lib +LIBPATH = -libpath:"." -libpath:"$(libdir)" -libpath:"../src/lib" +DEFFILE = $(TARGET)-$(arch).def + +CLEANFILES = mkmf.log +DISTCLEANFILES = vc*.pdb $(DEFFILE) + +extout = +extout_prefix = +target_prefix = +LOCAL_LIBS = +LIBS = $(LIBRUBYARG_SHARED) libcss.lib oldnames.lib user32.lib advapi32.lib ws2_32.lib +SRCS = rubyapi.cpp +OBJS = rubyapi.obj +TARGET = mmseg +DLLIB = $(TARGET).so +EXTSTATIC = +STATIC_LIB = + +RUBYCOMMONDIR = $(sitedir)$(target_prefix) +RUBYLIBDIR = $(sitelibdir)$(target_prefix) +RUBYARCHDIR = $(sitearchdir)$(target_prefix) + +TARGET_SO = $(DLLIB) +CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map +CLEANOBJS = *.obj *.lib *.s[ol] *.pdb *.exp *.bak + +all: $(DLLIB) +static: $(STATIC_LIB) + +clean: + @-$(RM) $(CLEANLIBS:/=\) $(CLEANOBJS:/=\) $(CLEANFILES:/=\) + +distclean: clean + @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log + @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES:/=\) + +realclean: distclean +install: install-so install-rb + +install-so: $(RUBYARCHDIR) +install-so: $(RUBYARCHDIR)/$(DLLIB) +$(RUBYARCHDIR)/$(DLLIB): $(DLLIB) + $(INSTALL_PROG) $(DLLIB:/=\) $(RUBYARCHDIR:/=\) +install-rb: pre-install-rb install-rb-default +install-rb-default: pre-install-rb-default +pre-install-rb: Makefile +pre-install-rb-default: Makefile +$(RUBYARCHDIR): + $(MAKEDIRS) $@ + +site-install: site-install-so site-install-rb +site-install-so: install-so +site-install-rb: install-rb + +.SUFFIXES: .c .m .cc .cxx .cpp .obj + +{$(srcdir)}.cc{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(topdir)}.cc{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(hdrdir)}.cc{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +.cc.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(srcdir)}.cxx{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(topdir)}.cxx{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(hdrdir)}.cxx{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +.cxx.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(srcdir)}.cpp{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(topdir)}.cpp{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(hdrdir)}.cpp{}.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +.cpp.obj: + $(CXX) $(INCFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -Tp$(<:\=/) + +{$(srcdir)}.c{}.obj: + $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/) + +{$(topdir)}.c{}.obj: + $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/) + +{$(hdrdir)}.c{}.obj: + $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/) + +.c.obj: + $(CC) $(INCFLAGS) $(CFLAGS) $(CPPFLAGS) -c -Tc$(<:\=/) + +$(DLLIB): $(DEFFILE) $(OBJS) + @-$(RM) $@ + $(LDSHARED) -Fe$(@) $(OBJS) $(LIBS) $(LOCAL_LIBS) $(DLDFLAGS) + + + +$(DEFFILE): + $(RUBY) -e "puts 'EXPORTS', 'Init_$(TARGET)'" > $@ + +$(OBJS): {.;$(srcdir);$(topdir);$(hdrdir)}ruby.h {.;$(srcdir);$(topdir);$(hdrdir)}defines.h diff --git a/coreseek/mmseg-3.2.14/ruby/extconf.lin.rb b/coreseek/mmseg-3.2.14/ruby/extconf.lin.rb new file mode 100755 index 0000000..d380c41 --- /dev/null +++ b/coreseek/mmseg-3.2.14/ruby/extconf.lin.rb @@ -0,0 +1,10 @@ +require 'mkmf' + +#mmseg_config = with_config('mmseg-config', 'mmseg-config') +#use_mmseg_config = enable_config('mmseg-config') +#have_library("mmseg") +#have_header('SegmenterManager.h') +dir_config('mmseg') +$libs = append_library($libs, "stdc++") +$libs = append_library($libs, "mmseg") +create_makefile("mmseg") diff --git a/coreseek/mmseg-3.2.14/ruby/extconf.win.rb b/coreseek/mmseg-3.2.14/ruby/extconf.win.rb new file mode 100755 index 0000000..c45524c --- /dev/null +++ b/coreseek/mmseg-3.2.14/ruby/extconf.win.rb @@ -0,0 +1,9 @@ +require 'mkmf' + +#mmseg_config = with_config('mmseg-config', 'mmseg-config') +#use_mmseg_config = enable_config('mmseg-config') +#have_library("mmseg") +#have_header('SegmenterManager.h') +dir_config('mmseg') +$libs = append_library($libs, "libcss") +create_makefile("mmseg") diff --git a/coreseek/mmseg-3.2.14/ruby/mmseg-i386-mswin32.def b/coreseek/mmseg-3.2.14/ruby/mmseg-i386-mswin32.def new file mode 100755 index 0000000..8cdc836 --- /dev/null +++ b/coreseek/mmseg-3.2.14/ruby/mmseg-i386-mswin32.def @@ -0,0 +1,2 @@ +EXPORTS +Init_mmseg diff --git a/coreseek/mmseg-3.2.14/ruby/mmseg-i386-mswin32.exp b/coreseek/mmseg-3.2.14/ruby/mmseg-i386-mswin32.exp new file mode 100755 index 0000000..e1d364e Binary files /dev/null and b/coreseek/mmseg-3.2.14/ruby/mmseg-i386-mswin32.exp differ diff --git a/coreseek/mmseg-3.2.14/ruby/readme.txt b/coreseek/mmseg-3.2.14/ruby/readme.txt new file mode 100755 index 0000000..706ec1e --- /dev/null +++ b/coreseek/mmseg-3.2.14/ruby/readme.txt @@ -0,0 +1,4 @@ +tested on win32 only + +1 You MUST copy uni.lib from the 'src' directory before running test.rb +2 I changed the libcss complie mode from 'multi-thread' into 'multi-thread dll', this might be break sphinx's build. \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/ruby/rubyapi.cpp b/coreseek/mmseg-3.2.14/ruby/rubyapi.cpp new file mode 100755 index 0000000..4368729 --- /dev/null +++ b/coreseek/mmseg-3.2.14/ruby/rubyapi.cpp @@ -0,0 +1,223 @@ +#include +#include +#include +#include + +#include +#include + +/* Ruby 1.7 defines NUM2LL(), LL2NUM() and ULL2NUM() macros */ +#ifndef NUM2LL +#define NUM2LL(x) NUM2LONG((x)) +#endif +#ifndef LL2NUM +#define LL2NUM(x) INT2NUM((long) (x)) +#endif +#ifndef ULL2NUM +#define ULL2NUM(x) UINT2NUM((unsigned long) (x)) +#endif + +/* Ruby 1.7 doesn't (yet) define NUM2ULL() */ +#ifndef NUM2ULL +#ifdef HAVE_LONG_LONG +#define NUM2ULL(x) rb_num2ull((x)) +#else +#define NUM2ULL(x) NUM2ULONG(x) +#endif +#endif + +/* RSTRING_LEN, etc are new in Ruby 1.9, but ->ptr and ->len no longer work */ +/* Define these for older versions so we can just write code the new way */ +#ifndef RSTRING_LEN +# define RSTRING_LEN(x) RSTRING(x)->len +#endif +#ifndef RSTRING_PTR +# define RSTRING_PTR(x) RSTRING(x)->ptr +#endif +#ifndef RARRAY_LEN +# define RARRAY_LEN(x) RARRAY(x)->len +#endif +#ifndef RARRAY_PTR +# define RARRAY_PTR(x) RARRAY(x)->ptr +#endif + +#include +#include + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +#include "SegmenterManager.h" +#include "Segmenter.h" + +#ifdef __cplusplus +extern "C" { +#endif + +//fixme, unload when so unload? +css::SegmenterManager g_mgr; +int g_bInited = 0; + +static void +mmseg_dfree + (void *cd) +{ + //printf("needs to clean up"); +} + +#define MMSEG_FREE mmseg_dfree + +static VALUE +mmseg_free + (VALUE cd) +{ + //do free here. + return Qnil; +} + +static VALUE +check_mmseg + (VALUE obj) +{ + Check_Type(obj, T_DATA); + if (RDATA(obj)->dfree != MMSEG_FREE) { + rb_raise(rb_eArgError, "mmseg expected (%s)", rb_class2name(CLASS_OF(obj))); + } + return (VALUE)DATA_PTR(obj); +} +static VALUE +mmseg_s_allocate + (VALUE klass) +{ + return Data_Wrap_Struct(klass, 0, MMSEG_FREE, 0); +} + +static VALUE +mmseg_initialize(VALUE self){ + mmseg_free(check_mmseg(self)); + DATA_PTR(self) = NULL; + rb_iv_set(self, "@start", INT2NUM(0)); + rb_iv_set(self, "@end", INT2NUM(0)); + return self; +} + +static VALUE mmseg_next(VALUE self) +{ + u2 tok_len = 0; + int nPos = 0; + css::Segmenter* seg = NULL; + Data_Get_Struct(self, css::Segmenter, seg); + //printf("%d",seg); //check is got it + if(seg){ + u2 len = 0, symlen = 0; + char* tok = (char*)seg->peekToken(len,symlen); + //printf("%s\t",tok); + //FIXME: if ruby version do not enbale symlen, the len and symlen always the same. + if(!tok || !*tok || !len) + tok_len = 0; + else + tok_len = len; + seg->popToken(len); + } + //update position info + VALUE vPos = rb_iv_get(self, "@end"); + if(!NIL_P(vPos)){ + nPos = FIX2INT(vPos); + } + rb_iv_set(self, "@start", INT2NUM(nPos)); + rb_iv_set(self, "@end", INT2NUM(nPos+tok_len)); + if(tok_len) + return self; + else + return Qnil; +} + +static VALUE mmseg_start(VALUE self) { + return rb_iv_get(self, "@start"); +} + +static VALUE mmseg_end(VALUE self) { + return rb_iv_get(self, "@end"); +} + + +static VALUE +mmseg_settext +(VALUE self, VALUE str) +{ + int len; + const char* pstr; + if (TYPE(str) == T_STRING) { + len = RSTRING_LEN(str); + pstr = STR2CSTR(str); + //printf("%d:%s\n",len,pstr); + }else + return Qnil; + + css::Segmenter* seg = NULL; + Data_Get_Struct(self, css::Segmenter, seg); + //printf("%s",pstr); + seg->setBuffer((u1*)pstr,len); + rb_iv_set(self, "@start", INT2NUM(0)); + rb_iv_set(self, "@end", INT2NUM(0)); + return self; +} + + +static VALUE +mmseg_open + (VALUE self, VALUE dict_path, VALUE str) +{ + int len; + const char* pstr; + if (TYPE(str) == T_STRING) { + len = RSTRING_LEN(str); + pstr = STR2CSTR(str); + //printf("%d:%s\n",len,pstr); + }else + return Qnil; + + if (!g_bInited && TYPE(dict_path) == T_STRING) { + int nRet = g_mgr.init(STR2CSTR(dict_path)); + if(nRet != 0) { + // should throw an exception + rb_fatal("Can NOT init the segment library."); + return Qnil; + } + g_bInited = 1; + } + if(g_bInited){ + //do segment + css::Segmenter* seg = g_mgr.getSegmenter(); + //hacking + long ptr = (long)seg; + seg->setBuffer((u1*)pstr,len); + self = Data_Wrap_Struct(self, NULL, MMSEG_FREE, (void *)seg); + }else + return Qnil; + + return self; +} + +VALUE cMMseg; + +void Init_mmseg() { + cMMseg = rb_define_class("Mmseg", rb_cData); + rb_define_alloc_func(cMMseg, mmseg_s_allocate); + rb_define_singleton_method(cMMseg, "createSeg", RUBY_METHOD_FUNC(mmseg_open), 2); + rb_define_method(cMMseg, "initialize", RUBY_METHOD_FUNC(mmseg_initialize), 0); + rb_define_method(cMMseg, "setText", RUBY_METHOD_FUNC(mmseg_settext), 1); + rb_define_method(cMMseg, "next", RUBY_METHOD_FUNC(mmseg_next), 0); + rb_define_method(cMMseg, "start", RUBY_METHOD_FUNC(mmseg_start), 0); + rb_define_method(cMMseg, "end", RUBY_METHOD_FUNC(mmseg_end), 0); +} + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/ruby/test.rb b/coreseek/mmseg-3.2.14/ruby/test.rb new file mode 100755 index 0000000..afdaf5e --- /dev/null +++ b/coreseek/mmseg-3.2.14/ruby/test.rb @@ -0,0 +1,20 @@ +require "mmseg" + +#t = Mmseg.new() +txt = "中文分词, 分词算法是一种计算机软件(a computer software)。这好像是废话!" +t = Mmseg.createSeg(".",txt) +while t.next() + print txt[t.start...t.end] + print ' ' +end + +50000.times { +#5.times { + t.setText(txt) + while t.next() + #print txt[t.start...t.end] + #print ' ' + end +} + +t=nil \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/script/build_thesaurus.py b/coreseek/mmseg-3.2.14/script/build_thesaurus.py new file mode 100755 index 0000000..b788139 --- /dev/null +++ b/coreseek/mmseg-3.2.14/script/build_thesaurus.py @@ -0,0 +1,59 @@ +#/usr/bin/python +# -*- coding: utf-8 -*- +import sys +import unicodedata +import re +import codecs +import os + +def enmu_all_keys(key): + kl = [] + if len(key)==0: + return kl + prefix = '' + for c in key: + prefix = prefix + c + if len(prefix) == 1: + continue + kl.append(prefix) + kl2 = enmu_all_keys(key[1:]) + return kl + kl2 + +def main(): + fh = codecs.open(sys.argv[1],"r", "UTF-8") + lines = fh.readlines() + fh.close() + i = 0 + ht = {} + for l in lines: + if i % 2 == 0: + l = l.strip() + l = l.split('\t')[0] + ht[l] = 1 + #print l + i = i + 1 + + for k in ht: + if len(k) == 1: + continue + subk = {} + kl = enmu_all_keys(k) + for sk in kl: + #print sk, sk != k ,ht.has_key(sk) + if sk != k and ht.has_key(sk): + subk[sk] = 1 + ht[k] = subk + + for k in ht: + if ht[k] != 1 and ht[k] != {}: + print k.encode('UTF-8') + s = '' + #print k, ht[k] + for sk in ht[k]: + s = s + sk + ','; + print ('-'+s).encode('UTF-8') + + +if __name__ == "__main__": + main() + #print enmu_all_keys('abc') \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/script/build_tolower_table.py b/coreseek/mmseg-3.2.14/script/build_tolower_table.py new file mode 100755 index 0000000..57fbbeb --- /dev/null +++ b/coreseek/mmseg-3.2.14/script/build_tolower_table.py @@ -0,0 +1,178 @@ +#/usr/bin/python +# -*- coding: utf-8 -*- +import sys +import unicodedata +import re +import codecs +import os + +def getNum(leftK): + idxleftK = 0 + if leftK.find('U+') == -1: + idxleftK = ord(leftK) + else: + leftK = leftK.replace('U+','0x') + idxleftK = eval(leftK) + return idxleftK + +def dump(i, table): + #print table + print '//'+hex(i/256-1),hex(i) + #print 'const static u2 table_'+hex(i/256-1)+'[] = {' + print 'const static u2 table_'+str(i/256-1)+'[] = {' + line = '' + for j in range(0,256): + #print hex(j) +'->'+hex(table[j]), + if j and j % 16 == 0: + print line; + line = '' + line = line + hex(table[j])+',' + print line[:-1] + print '};' + #dump convert table + print '/*' + for j in range(0,256): + #print i-255+j, table[j] + if i-256+j and table[j]: + print (unichr(i-256+j)+'>'+unichr(table[j])).encode('UTF-8'), + print '*/' + pass + +def main(): + fh = codecs.open(sys.argv[1],"r", "UTF-8") + lines = fh.readlines() + fh.close() + trans_table = [0]*65536; + for line in lines: + if line[0] == '#': + continue + parse = line.strip().split(',') + for p in parse: + keyIdx = p.find('->') + #print p, + if keyIdx != -1 and p.find('..') == -1: + #not range + #print p, + idxleftK = 0 + idxrightK = 0 + leftK = p[:keyIdx] + if leftK.find('U+') == -1: + idxleftK = ord(leftK) + else: + leftK = leftK.replace('U+','0x') + idxleftK = eval(leftK) + rightK = p[keyIdx+2:] + if rightK.find('U+') == -1: + idxrightK = ord(rightK) + else: + rightK = rightK.replace('U+','0x') + idxrightK = eval(rightK) + if idxleftK > 65536 or idxrightK > 65536: + continue + if idxleftK and idxrightK: + #print leftK,rightK,'\t', + #print idxleftK,idxrightK, + #print (unichr(idxleftK) +'->'+ unichr(idxrightK)+'\t').encode('UTF-8') + trans_table[idxleftK] = idxrightK + #Russian char made things harder. + bSkipOverride = 0; + if bSkipOverride and trans_table[idxleftK] and trans_table[idxleftK] != idxrightK: + print leftK, rightK, "inconst conver",idxleftK,idxrightK,trans_table[idxleftK] + print (unichr(idxleftK) + ',' + unichr(idxrightK) + ',' + unichr(trans_table[idxleftK])).encode('UTF-8') + pass + + trans_table[idxleftK] = idxrightK + pass + if keyIdx != -1 and p.find('..') > 0: + leftK = p[:keyIdx] + rightK = p[keyIdx+2:] + lbegin = leftK.find('..') + strbegin = leftK[:lbegin].strip() + strend = leftK[lbegin+2:].strip() + #print getNum(strbegin),getNum(strend) + from_range = range(getNum(strbegin),getNum(strend)+1) + leftK = rightK + lbegin = leftK.find('..') + strbegin = leftK[:lbegin].strip() + strend = leftK[lbegin+2:].strip() + to_range = range(getNum(strbegin),getNum(strend)+1) + + for i in range(0,len(from_range)): + if trans_table[from_range[i]] and trans_table[from_range[i]] != to_range[i]: + print "inconst conver",from_range[i],to_range[i],trans_table[idxleftK] + #print from_range[i],to_range[i] + trans_table[from_range[i]] = to_range[i] + #print getNum(strbegin),getNum(strend) + #print p, + pass + # 人工 强制指定的符号转换 + trans_table[ord(u'/')] = ord('/') + trans_table[ord(u'¥')] = ord('$') + trans_table[ord(u'#')] = ord('#') + trans_table[ord(u'%')] = ord('%') + trans_table[ord(u'!')] = ord('!') + trans_table[ord(u'*')] = ord('*') + trans_table[ord(u'(')] = ord('(') + trans_table[ord(u')')] = ord(')') + trans_table[ord(u'-')] = ord('-') + trans_table[ord(u'+')] = ord('+') + trans_table[ord(u'=')] = ord('=') + trans_table[ord(u'{')] = ord('{') + trans_table[ord(u'}')] = ord('}') + trans_table[ord(u'[')] = ord('[') + trans_table[ord(u']')] = ord(']') + trans_table[ord(u'、')] = ord(',') + trans_table[ord(u'|')] = ord('|') + trans_table[ord(u';')] = ord(';') + trans_table[ord(u':')] = ord(':') + trans_table[ord(u'‘')] = ord('\'') + trans_table[ord(u'“')] = ord('"') + trans_table[ord(u'《')] = ord('<') + trans_table[ord(u'》')] = ord('>') + trans_table[ord(u'〉')] = ord('<') + trans_table[ord(u'〈')] = ord('>') + trans_table[ord(u'?')] = ord('?') + trans_table[ord(u'~')] =ord('~') + trans_table[ord(u'`')] =ord('`') + + #dump the trans-table + #page size = 256 + #print trans_table + trans_page = [0]*256 + idx_page = [0]*256 + i = 0 + for i in range(0,65536): + if i%256 == 0: + bOutput = 0 + for j in range(0,256): + if trans_page[j]: + bOutput = 1 + break + if bOutput: + #print trans_page + idx_page[i/256-1] = 1; + dump(i,trans_page) + trans_page = [0]*256 + if trans_table[i]: + trans_page[i%256] = trans_table[i] + + bOutput = 0 + for j in range(0,256): + if trans_page[j]: + bOutput = 1 + break + if bOutput: + #print trans_page + idx_page[i/256] = 1; + dump(i+1,trans_page) + print 'const static u2 table_index[] = {' + for j in range(0,256): + if idx_page[j]: + print 'table_'+str(j), + else: + print 'NULL', + if j != 255: + print ',', + print '};' +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/script/char_table_build.py b/coreseek/mmseg-3.2.14/script/char_table_build.py new file mode 100755 index 0000000..4ffd3f6 --- /dev/null +++ b/coreseek/mmseg-3.2.14/script/char_table_build.py @@ -0,0 +1,173 @@ +#/usr/bin/python +# -*- coding: utf-8 -*- +import sys +import unicodedata +import re +import codecs +import os + +# tag set +#tag-set: +#m: number +#e: non CJK char, e.g. English pinyin +#[unuse] t: time. 年号 干支等(此处识别出后,仅加入 oov ,不参与实际分词) +#c: CJK char. +#s: Symbol e.g. @ +#w: Sentence seperator. +#x: unknown char. +# Use to generate c-style +def ANSI_build(name): + tag = {} + for c in range(0x20,0x7F): + tag[c] = 's' + #number + num = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9') + for c in num: + #print ord(c) + #print chr(ord(c)) + tag[ord(c)] = 'm' + #eng + for c in range(ord('a'),ord('z')): + tag[c] = 'e' + for c in range(ord('A'),ord('Z')): + tag[c] = 'e' + for c in range(0xC0,0xFF): + tag[c] = 'e' + + #seperate + wset = ('!','"','\'',',','.',':',';','?') + for c in wset: + tag[ord(c)] = 'w' + #do output page + codepage = ['']*256 + for c in tag: + codepage[c] = tag[c] + code = 'char '+name+'[]= {' + for i in range(0,256): + if i%8 == 0: + code = code + '\n\t' + if codepage[i]: + code = code + '\'' + codepage[i] +'\'' + else: + code = code + '\'\\0\'' + if i != 256: + code = code + ', ' + code = code + '\n\t};' + print code + #print codepage + pass + +#generate CJK area. +def ChineseBuild(name): + only = (35, 118, 129, 104, 151, 141, 84, 150, 87, 116, 89) + tag = {} + # number + num1 = (u'零',u'〇',u'一',u'二',u'三',u'四',u'五',u'六',u'七',u'八',u'九',u'十',u'壹',u'贰',u'叁',u'肆',u'伍',u'陆',u'柒',u'捌',u'玖',u'拾',u'个',u'百',u'千',u'万',u'亿',u'兆',u'仟',u'佰') + num2 = (u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8', u'9', u'0') + num = num1 + num2 + for c in num: + iCode = ord(c) + if iCode/256 == 0: + continue + if iCode/256 in only: + print iCode, + print c + tag[iCode] = 'm' + #syb + syb1 = (u'~', u'!', u'@', u'#', u'#', u'¥', u'%', u'…', u'&', u'×', u'(', u')', u'—', u'+', u'{', u'}', u'|', u':', u'“', u'”', u'《', u'》', u'?', u'·', u'·', u'-', u'=', u'【', u'】', u'\', u';', u'‘', u'’', u',', u'。', u'、', u'¨', u'〔', u'〕', u'〈', u'〉', u'「', u'」', u'『', u'』', u'.', u'〖', u'〗', u'【', u'】', u'(', u')', u'[', u']', u'{', u'}', u'。', u',', u':', u'≈', u'≡', u'≠', u'=', u'≤', u'≥', u'<', u'>', u'≮', u'≯', u'∷', u'±', u'+', u'-', u'×', u'÷', u'/', u'∫', u'∮', u'∝', u'∞', u'∧', u'∨', u'∑', u'∏', u'∪', u'∩', u'∈', u'∵', u'∴', u'⊥', u'∥', u'∠', u'⌒', u'⊙', u'≌', u'∽', u' ', u'√') + for c in syb1: + iCode = ord(c) + if iCode/256 == 0: + continue + if iCode/256 in only: + print c + tag[iCode] = 's' + #eng + for c in range(ord(u'a'),ord(u'z')): + tag[c] = 'e' + for c in range(ord(u'A'),ord(u'Z')): + tag[c] = 'e' + #sep + wset = (u'、', u',', u',', u'\'', u'‘', u'’', u'‘', u'’', u'!', u'!', u'?', u'?', u'。', u'。', u'?', u'?', u'.', u'“', u'”', u'“', u'”', u':', u':', u'"',u''',u'`',u'〃') + + for c in wset: + iCode = ord(c) + if iCode/256 == 0: + continue + if iCode/256 in only: + print c + tag[iCode] = 'w' + #process + st = {} + oc = 0x30 + codepage = ['\\0']*256 + if oc == 0xFF: + for c in range(0xFF01, 0xFF66): + codepage[c-0xFF00] = 's' + if oc == 0x30: + for c in range(0x3001, 0x3040): + codepage[c-0x3001] = 's' + + for c in tag: + iCode = (c) + k = iCode/256 + if k == oc: + print iCode%256, c + codepage[iCode%256] = tag[c] + + code = 'char '+name+'[]= {' + for i in range(0, 256): + if i%8 == 0: + code = code + '\n\t' + if codepage[i]: + code = code + '\'' + codepage[i] +'\'' + if i != 256: + code = code + ', ' + code = code + '\n\t};' + print code + + # output all chinese, by tag. + code = '{' + for c in tag: + k = c/256 + if k == 0xFF or k == 0x30: + continue + if tag[c] == 'm': + code = code + str(hex(c))+', ' + print code + # output all chinese, by tag. + # NOTE 0x22xx, 0x23xx is number symbol, ignore this block. + code = '{' + for c in tag: + k = c/256 + if k == 0xFF or k == 0x30: + continue + if tag[c] == 's': + code = code + str(hex(c))+', ' + print code + # sep + code = '{' + for c in tag: + k = c/256 + if k == 0xFF or k == 0x30: + continue + if tag[c] == 'w': + code = code + str(hex(c))+', ' + print code + #eng + code = '{' + for c in tag: + k = c/256 + if k == 0xFF or k == 0x30: + continue + if tag[c] == 'e': + code = code + str(hex(c))+', ' + print code + pass +def main(): + ANSI_build("ansipage") + ChineseBuild("sym1") + pass + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/script/tolower.txt b/coreseek/mmseg-3.2.14/script/tolower.txt new file mode 100755 index 0000000..2c26c0a --- /dev/null +++ b/coreseek/mmseg-3.2.14/script/tolower.txt @@ -0,0 +1,78 @@ +#common +U+FF10..U+FF19->0..9, U+FF21..U+FF3A->a..z, U+FF41..U+FF5A->a..z, 0..9, A..Z->a..z, a..z +#Letters +U+00C0->a, U+00C1->a, U+00C2->a, U+00C3->a, U+00C4->a, U+00C5->a, U+00E0->a, U+00E1->a, U+00E2->a, U+00E3->a, U+00E4->a, U+00E5->a, U+0100->a, U+0101->a, U+0102->a, U+0103->a, U+0104->a, U+0105->a, U+01CD->a, U+01CE->a, U+01DE->a, U+01DF->a, U+01E0->a, U+01E1->a, U+01FA->a, U+01FB->a, U+0200->a, U+0201->a, U+0202->a, U+0203->a, U+0226->a, U+0227->a, U+023A->a, U+0250->a, U+04D0->a, U+04D1->a, U+1D2C->a, U+1D43->a, U+1D44->a, U+1D8F->a, U+1E00->a, U+1E01->a, U+1E9A->a, U+1EA0->a, U+1EA1->a, U+1EA2->a, U+1EA3->a, U+1EA4->a, U+1EA5->a, U+1EA6->a, U+1EA7->a, U+1EA8->a, U+1EA9->a, U+1EAA->a, U+1EAB->a, U+1EAC->a, U+1EAD->a, U+1EAE->a, U+1EAF->a, U+1EB0->a, U+1EB1->a, U+1EB2->a, U+1EB3->a, U+1EB4->a, U+1EB5->a, U+1EB6->a, U+1EB7->a, U+2090->a, U+2C65->a +U+0180->b, U+0181->b, U+0182->b, U+0183->b, U+0243->b, U+0253->b, U+0299->b, U+16D2->b, U+1D03->b, U+1D2E->b, U+1D2F->b, U+1D47->b, U+1D6C->b, U+1D80->b, U+1E02->b, U+1E03->b, U+1E04->b, U+1E05->b, U+1E06->b, U+1E07->b +U+00C7->c, U+00E7->c, U+0106->c, U+0107->c, U+0108->c, U+0109->c, U+010A->c, U+010B->c, U+010C->c, U+010D->c, U+0187->c, U+0188->c, U+023B->c, U+023C->c, U+0255->c, U+0297->c, U+1D9C->c, U+1D9D->c, U+1E08->c, U+1E09->c, U+212D->c, U+2184->c +U+010E->d, U+010F->d, U+0110->d, U+0111->d, U+0189->d, U+018A->d, U+018B->d, U+018C->d, U+01C5->d, U+01F2->d, U+0221->d, U+0256->d, U+0257->d, U+1D05->d, U+1D30->d, U+1D48->d, U+1D6D->d, U+1D81->d, U+1D91->d, U+1E0A->d, U+1E0B->d, U+1E0C->d, U+1E0D->d, U+1E0E->d, U+1E0F->d, U+1E10->d, U+1E11->d, U+1E12->d, U+1E13->d +U+00C8->e, U+00C9->e, U+00CA->e, U+00CB->e, U+00E8->e, U+00E9->e, U+00EA->e, U+00EB->e, U+0112->e, U+0113->e, U+0114->e, U+0115->e, U+0116->e, U+0117->e, U+0118->e, U+0119->e, U+011A->e, U+011B->e, U+018E->e, U+0190->e, U+01DD->e, U+0204->e, U+0205->e, U+0206->e, U+0207->e, U+0228->e, U+0229->e, U+0246->e, U+0247->e, U+0258->e, U+025B->e, U+025C->e, U+025D->e, U+025E->e, U+029A->e, U+1D07->e, U+1D08->e, U+1D31->e, U+1D32->e, U+1D49->e, U+1D4B->e, U+1D4C->e, U+1D92->e, U+1D93->e, U+1D94->e, U+1D9F->e, U+1E14->e, U+1E15->e, U+1E16->e, U+1E17->e, U+1E18->e, U+1E19->e, U+1E1A->e, U+1E1B->e, U+1E1C->e, U+1E1D->e, U+1EB8->e, U+1EB9->e, U+1EBA->e, U+1EBB->e, U+1EBC->e, U+1EBD->e, U+1EBE->e, U+1EBF->e, U+1EC0->e, U+1EC1->e, U+1EC2->e, U+1EC3->e, U+1EC4->e, U+1EC5->e, U+1EC6->e, U+1EC7->e, U+2091->e +U+0191->f, U+0192->f, U+1D6E->f, U+1D82->f, U+1DA0->f, U+1E1E->f, U+1E1F->f +U+011C->g, U+011D->g, U+011E->g, U+011F->g, U+0120->g, U+0121->g, U+0122->g, U+0123->g, U+0193->g, U+01E4->g, U+01E5->g, U+01E6->g, U+01E7->g, U+01F4->g, U+01F5->g, U+0260->g, U+0261->g, U+0262->g, U+029B->g, U+1D33->g, U+1D4D->g, U+1D77->g, U+1D79->g, U+1D83->g, U+1DA2->g, U+1E20->g, U+1E21->g +U+0124->h, U+0125->h, U+0126->h, U+0127->h, U+021E->h, U+021F->h, U+0265->h, U+0266->h, U+029C->h, U+02AE->h, U+02AF->h, U+02B0->h, U+02B1->h, U+1D34->h, U+1DA3->h, U+1E22->h, U+1E23->h, U+1E24->h, U+1E25->h, U+1E26->h, U+1E27->h, U+1E28->h, U+1E29->h, U+1E2A->h, U+1E2B->h, U+1E96->h, U+210C->h, U+2C67->h, U+2C68->h, U+2C75->h, U+2C76->h +U+00CC->i, U+00CD->i, U+00CE->i, U+00CF->i, U+00EC->i, U+00ED->i, U+00EE->i, U+00EF->i, U+0128->i, U+0129->i, U+012A->i, U+012B->i, U+012C->i, U+012D->i, U+012E->i, U+012F->i, U+0130->i, U+0131->i, U+0197->i, U+01CF->i, U+01D0->i, U+0208->i, U+0209->i, U+020A->i, U+020B->i, U+0268->i, U+026A->i, U+040D->i, U+0418->i, U+0419->i, U+0438->i, U+0439->i, U+0456->i, U+1D09->i, U+1D35->i, U+1D4E->i, U+1D62->i, U+1D7B->i, U+1D96->i, U+1DA4->i, U+1DA6->i, U+1DA7->i, U+1E2C->i, U+1E2D->i, U+1E2E->i, U+1E2F->i, U+1EC8->i, U+1EC9->i, U+1ECA->i, U+1ECB->i, U+2071->i, U+2111->i +U+0134->j, U+0135->j, U+01C8->j, U+01CB->j, U+01F0->j, U+0237->j, U+0248->j, U+0249->j, U+025F->j, U+0284->j, U+029D->j, U+02B2->j, U+1D0A->j, U+1D36->j, U+1DA1->j, U+1DA8->j +U+0136->k, U+0137->k, U+0198->k, U+0199->k, U+01E8->k, U+01E9->k, U+029E->k, U+1D0B->k, U+1D37->k, U+1D4F->k, U+1D84->k, U+1E30->k, U+1E31->k, U+1E32->k, U+1E33->k, U+1E34->k, U+1E35->k, U+2C69->k, U+2C6A->k +U+0139->l, U+013A->l, U+013B->l, U+013C->l, U+013D->l, U+013E->l, U+013F->l, U+0140->l, U+0141->l, U+0142->l, U+019A->l, U+01C8->l, U+0234->l, U+023D->l, U+026B->l, U+026C->l, U+026D->l, U+029F->l, U+02E1->l, U+1D0C->l, U+1D38->l, U+1D85->l, U+1DA9->l, U+1DAA->l, U+1DAB->l, U+1E36->l, U+1E37->l, U+1E38->l, U+1E39->l, U+1E3A->l, U+1E3B->l, U+1E3C->l, U+1E3D->l, U+2C60->l, U+2C61->l, U+2C62->l +U+019C->m, U+026F->m, U+0270->m, U+0271->m, U+1D0D->m, U+1D1F->m, U+1D39->m, U+1D50->m, U+1D5A->m, U+1D6F->m, U+1D86->m, U+1DAC->m, U+1DAD->m, U+1E3E->m, U+1E3F->m, U+1E40->m, U+1E41->m, U+1E42->m, U+1E43->m +U+00D1->n, U+00F1->n, U+0143->n, U+0144->n, U+0145->n, U+0146->n, U+0147->n, U+0148->n, U+0149->n, U+019D->n, U+019E->n, U+01CB->n, U+01F8->n, U+01F9->n, U+0220->n, U+0235->n, U+0272->n, U+0273->n, U+0274->n, U+1D0E->n, U+1D3A->n, U+1D3B->n, U+1D70->n, U+1D87->n, U+1DAE->n, U+1DAF->n, U+1DB0->n, U+1E44->n, U+1E45->n, U+1E46->n, U+1E47->n, U+1E48->n, U+1E49->n, U+1E4A->n, U+1E4B->n, U+207F->n +U+00D2->o, U+00D3->o, U+00D4->o, U+00D5->o, U+00D6->o, U+00D8->o, U+00F2->o, U+00F3->o, U+00F4->o, U+00F5->o, U+00F6->o, U+00F8->o, U+01030F->o, U+014C->o, U+014D->o, U+014E->o, U+014F->o, U+0150->o, U+0151->o, U+0186->o, U+019F->o, U+01A0->o, U+01A1->o, U+01D1->o, U+01D2->o, U+01EA->o, U+01EB->o, U+01EC->o, U+01ED->o, U+01FE->o, U+01FF->o, U+020C->o, U+020D->o, U+020E->o, U+020F->o, U+022A->o, U+022B->o, U+022C->o, U+022D->o, U+022E->o, U+022F->o, U+0230->o, U+0231->o, U+0254->o, U+0275->o, U+043E->o, U+04E6->o, U+04E7->o, U+04E8->o, U+04E9->o, U+04EA->o, U+04EB->o, U+1D0F->o, U+1D10->o, U+1D11->o, U+1D12->o, U+1D13->o, U+1D16->o, U+1D17->o, U+1D3C->o, U+1D52->o, U+1D53->o, U+1D54->o, U+1D55->o, U+1D97->o, U+1DB1->o, U+1E4C->o, U+1E4D->o, U+1E4E->o, U+1E4F->o, U+1E50->o, U+1E51->o, U+1E52->o, U+1E53->o, U+1ECC->o, U+1ECD->o, U+1ECE->o, U+1ECF->o, U+1ED0->o, U+1ED1->o, U+1ED2->o, U+1ED3->o, U+1ED4->o, U+1ED5->o, U+1ED6->o, U+1ED7->o, U+1ED8->o, U+1ED9->o, U+1EDA->o, U+1EDB->o, U+1EDC->o, U+1EDD->o, U+1EDE->o, U+1EDF->o, U+1EE0->o, U+1EE1->o, U+1EE2->o, U+1EE3->o, U+2092->o, U+2C9E->o, U+2C9F->o +U+01A4->p, U+01A5->p, U+1D18->p, U+1D3E->p, U+1D56->p, U+1D71->p, U+1D7D->p, U+1D88->p, U+1E54->p, U+1E55->p, U+1E56->p, U+1E57->p, U+2C63->p +U+024A->q, U+024B->q, U+02A0->q +U+0154->r, U+0155->r, U+0156->r, U+0157->r, U+0158->r, U+0159->r, U+0210->r, U+0211->r, U+0212->r, U+0213->r, U+024C->r, U+024D->r, U+0279->r, U+027A->r, U+027B->r, U+027C->r, U+027D->r, U+027E->r, U+027F->r, U+0280->r, U+0281->r, U+02B3->r, U+02B4->r, U+02B5->r, U+02B6->r, U+1D19->r, U+1D1A->r, U+1D3F->r, U+1D63->r, U+1D72->r, U+1D73->r, U+1D89->r, U+1DCA->r, U+1E58->r, U+1E59->r, U+1E5A->r, U+1E5B->r, U+1E5C->r, U+1E5D->r, U+1E5E->r, U+1E5F->r, U+211C->r, U+2C64->r +U+00DF->s, U+015A->s, U+015B->s, U+015C->s, U+015D->s, U+015E->s, U+015F->s, U+0160->s, U+0161->s, U+017F->s, U+0218->s, U+0219->s, U+023F->s, U+0282->s, U+02E2->s, U+1D74->s, U+1D8A->s, U+1DB3->s, U+1E60->s, U+1E61->s, U+1E62->s, U+1E63->s, U+1E64->s, U+1E65->s, U+1E66->s, U+1E67->s, U+1E68->s, U+1E69->s, U+1E9B->s +U+0162->t, U+0163->t, U+0164->t, U+0165->t, U+0166->t, U+0167->t, U+01AB->t, U+01AC->t, U+01AD->t, U+01AE->t, U+021A->t, U+021B->t, U+0236->t, U+023E->t, U+0287->t, U+0288->t, U+1D1B->t, U+1D40->t, U+1D57->t, U+1D75->t, U+1DB5->t, U+1E6A->t, U+1E6B->t, U+1E6C->t, U+1E6D->t, U+1E6E->t, U+1E6F->t, U+1E70->t, U+1E71->t, U+1E97->t, U+2C66->t +U+00D9->u, U+00DA->u, U+00DB->u, U+00DC->u, U+00F9->u, U+00FA->u, U+00FB->u, U+00FC->u, U+010316->u, U+0168->u, U+0169->u, U+016A->u, U+016B->u, U+016C->u, U+016D->u, U+016E->u, U+016F->u, U+0170->u, U+0171->u, U+0172->u, U+0173->u, U+01AF->u, U+01B0->u, U+01D3->u, U+01D4->u, U+01D5->u, U+01D6->u, U+01D7->u, U+01D8->u, U+01D9->u, U+01DA->u, U+01DB->u, U+01DC->u, U+0214->u, U+0215->u, U+0216->u, U+0217->u, U+0244->u, U+0289->u, U+1D1C->u, U+1D1D->u, U+1D1E->u, U+1D41->u, U+1D58->u, U+1D59->u, U+1D64->u, U+1D7E->u, U+1D99->u, U+1DB6->u, U+1DB8->u, U+1E72->u, U+1E73->u, U+1E74->u, U+1E75->u, U+1E76->u, U+1E77->u, U+1E78->u, U+1E79->u, U+1E7A->u, U+1E7B->u, U+1EE4->u, U+1EE5->u, U+1EE6->u, U+1EE7->u, U+1EE8->u, U+1EE9->u, U+1EEA->u, U+1EEB->u, U+1EEC->u, U+1EED->u, U+1EEE->u, U+1EEF->u, U+1EF0->u, U+1EF1->u +U+01B2->v, U+0245->v, U+028B->v, U+028C->v, U+1D20->v, U+1D5B->v, U+1D65->v, U+1D8C->v, U+1DB9->v, U+1DBA->v, U+1E7C->v, U+1E7D->v, U+1E7E->v, U+1E7F->v, U+2C74->v +U+0174->w, U+0175->w, U+028D->w, U+02B7->w, U+1D21->w, U+1D42->w, U+1E80->w, U+1E81->w, U+1E82->w, U+1E83->w, U+1E84->w, U+1E85->w, U+1E86->w, U+1E87->w, U+1E88->w, U+1E89->w, U+1E98->w +U+02E3->x, U+1D8D->x, U+1E8A->x, U+1E8B->x, U+1E8C->x, U+1E8D->x, U+2093->x +U+00DD->y, U+00FD->y, U+00FF->y, U+0176->y, U+0177->y, U+0178->y, U+01B3->y, U+01B4->y, U+0232->y, U+0233->y, U+024E->y, U+024F->y, U+028E->y, U+028F->y, U+02B8->y, U+1E8E->y, U+1E8F->y, U+1E99->y, U+1EF2->y, U+1EF3->y, U+1EF4->y, U+1EF5->y, U+1EF6->y, U+1EF7->y, U+1EF8->y, U+1EF9->y +U+0179->z, U+017A->z, U+017B->z, U+017C->z, U+017D->z, U+017E->z, U+01B5->z, U+01B6->z, U+0224->z, U+0225->z, U+0240->z, U+0290->z, U+0291->z, U+1D22->z, U+1D76->z, U+1D8E->z, U+1DBB->z, U+1DBC->z, U+1DBD->z, U+1E90->z, U+1E91->z, U+1E92->z, U+1E93->z, U+1E94->z, U+1E95->z, U+2128->z, U+2C6B->z, U+2C6C->z +#Latin Extras +U+00C6->U+00E6, U+01E2->U+00E6, U+01E3->U+00E6, U+01FC->U+00E6, U+01FD->U+00E6, U+1D01->U+00E6, U+1D02->U+00E6, U+1D2D->U+00E6, U+1D46->U+00E6, U+00E6 +#Arabic +U+0622->U+0627, U+0623->U+0627, U+0624->U+0648, U+0625->U+0627, U+0626->U+064A, U+06C0->U+06D5, U+06C2->U+06C1, U+06D3->U+06D2, U+FB50->U+0671, U+FB51->U+0671, U+FB52->U+067B, U+FB53->U+067B, U+FB54->U+067B, U+FB56->U+067E, U+FB57->U+067E, U+FB58->U+067E, U+FB5A->U+0680, U+FB5B->U+0680, U+FB5C->U+0680, U+FB5E->U+067A, U+FB5F->U+067A, U+FB60->U+067A, U+FB62->U+067F, U+FB63->U+067F, U+FB64->U+067F, U+FB66->U+0679, U+FB67->U+0679, U+FB68->U+0679, U+FB6A->U+06A4, U+FB6B->U+06A4, U+FB6C->U+06A4, U+FB6E->U+06A6, U+FB6F->U+06A6, U+FB70->U+06A6, U+FB72->U+0684, U+FB73->U+0684, U+FB74->U+0684, U+FB76->U+0683, U+FB77->U+0683, U+FB78->U+0683, U+FB7A->U+0686, U+FB7B->U+0686, U+FB7C->U+0686, U+FB7E->U+0687, U+FB7F->U+0687, U+FB80->U+0687, U+FB82->U+068D, U+FB83->U+068D, U+FB84->U+068C, U+FB85->U+068C, U+FB86->U+068E, U+FB87->U+068E, U+FB88->U+0688, U+FB89->U+0688, U+FB8A->U+0698, U+FB8B->U+0698, U+FB8C->U+0691, U+FB8D->U+0691, U+FB8E->U+06A9, U+FB8F->U+06A9, U+FB90->U+06A9, U+FB92->U+06AF, U+FB93->U+06AF, U+FB94->U+06AF, U+FB96->U+06B3, U+FB97->U+06B3, U+FB98->U+06B3, U+FB9A->U+06B1, U+FB9B->U+06B1, U+FB9C->U+06B1, U+FB9E->U+06BA, U+FB9F->U+06BA, U+FBA0->U+06BB, U+FBA1->U+06BB, U+FBA2->U+06BB, U+FBA4->U+06C0, U+FBA5->U+06C0, U+FBA6->U+06C1, U+FBA7->U+06C1, U+FBA8->U+06C1, U+FBAA->U+06BE, U+FBAB->U+06BE, U+FBAC->U+06BE, U+FBAE->U+06D2, U+FBAF->U+06D2, U+FBB0->U+06D3, U+FBB1->U+06D3, U+FBD3->U+06AD, U+FBD4->U+06AD, U+FBD5->U+06AD, U+FBD7->U+06C7, U+FBD8->U+06C7, U+FBD9->U+06C6, U+FBDA->U+06C6, U+FBDB->U+06C8, U+FBDC->U+06C8, U+FBDD->U+0677, U+FBDE->U+06CB, U+FBDF->U+06CB, U+FBE0->U+06C5, U+FBE1->U+06C5, U+FBE2->U+06C9, U+FBE3->U+06C9, U+FBE4->U+06D0, U+FBE5->U+06D0, U+FBE6->U+06D0, U+FBE8->U+0649, U+FBFC->U+06CC, U+FBFD->U+06CC, U+FBFE->U+06CC, U+0621, U+0627..U+063A, U+0641..U+064A, U+0660..U+0669, U+066E, U+066F, U+0671..U+06BF, U+06C1, U+06C3..U+06D2, U+06D5, U+06EE..U+06FC, U+06FF, U+0750..U+076D, U+FB55, U+FB59, U+FB5D, U+FB61, U+FB65, U+FB69, U+FB6D, U+FB71, U+FB75, U+FB79, U+FB7D, U+FB81, U+FB91, U+FB95, U+FB99, U+FB9D, U+FBA3, U+FBA9, U+FBAD, U+FBD6, U+FBE7, U+FBE9, U+FBFF +#Armenian +U+0531..U+0556->U+0561..U+0586, U+0561..U+0586, U+0587 +#Bengali +U+09DC->U+09A1, U+09DD->U+09A2, U+09DF->U+09AF, U+09F0->U+09AC, U+09F1->U+09AC, U+0985..U+0990, U+0993..U+09B0, U+09B2, U+09B6..U+09B9, U+09CE, U+09E0, U+09E1, U+09E6..U+09EF +#CJK* +U+F900->U+8C48, U+F901->U+66F4, U+F902->U+8ECA, U+F903->U+8CC8, U+F904->U+6ED1, U+F905->U+4E32, U+F906->U+53E5, U+F907->U+9F9C, U+F908->U+9F9C, U+F909->U+5951, U+F90A->U+91D1, U+F90B->U+5587, U+F90C->U+5948, U+F90D->U+61F6, U+F90E->U+7669, U+F90F->U+7F85, U+F910->U+863F, U+F911->U+87BA, U+F912->U+88F8, U+F913->U+908F, U+F914->U+6A02, U+F915->U+6D1B, U+F916->U+70D9, U+F917->U+73DE, U+F918->U+843D, U+F919->U+916A, U+F91A->U+99F1, U+F91B->U+4E82, U+F91C->U+5375, U+F91D->U+6B04, U+F91E->U+721B, U+F91F->U+862D, U+F920->U+9E1E, U+F921->U+5D50, U+F922->U+6FEB, U+F923->U+85CD, U+F924->U+8964, U+F925->U+62C9, U+F926->U+81D8, U+F927->U+881F, U+F928->U+5ECA, U+F929->U+6717, U+F92A->U+6D6A, U+F92B->U+72FC, U+F92C->U+90CE, U+F92D->U+4F86, U+F92E->U+51B7, U+F92F->U+52DE, U+F930->U+64C4, U+F931->U+6AD3, U+F932->U+7210, U+F933->U+76E7, U+F934->U+8001, U+F935->U+8606, U+F936->U+865C, U+F937->U+8DEF, U+F938->U+9732, U+F939->U+9B6F, U+F93A->U+9DFA, U+F93B->U+788C, U+F93C->U+797F, U+F93D->U+7DA0, U+F93E->U+83C9, U+F93F->U+9304, U+F940->U+9E7F, U+F941->U+8AD6, U+F942->U+58DF, U+F943->U+5F04, U+F944->U+7C60, U+F945->U+807E, U+F946->U+7262, U+F947->U+78CA, U+F948->U+8CC2, U+F949->U+96F7, U+F94A->U+58D8, U+F94B->U+5C62, U+F94C->U+6A13, U+F94D->U+6DDA, U+F94E->U+6F0F, U+F94F->U+7D2F, U+F950->U+7E37, U+F951->U+964B, U+F952->U+52D2, U+F953->U+808B, U+F954->U+51DC, U+F955->U+51CC, U+F956->U+7A1C, U+F957->U+7DBE, U+F958->U+83F1, U+F959->U+9675, U+F95A->U+8B80, U+F95B->U+62CF, U+F95C->U+6A02, U+F95D->U+8AFE, U+F95E->U+4E39, U+F95F->U+5BE7, U+F960->U+6012, U+F961->U+7387, U+F962->U+7570, U+F963->U+5317, U+F964->U+78FB, U+F965->U+4FBF, U+F966->U+5FA9, U+F967->U+4E0D, U+F968->U+6CCC, U+F969->U+6578, U+F96A->U+7D22, U+F96B->U+53C3, U+F96C->U+585E, U+F96D->U+7701, U+F96E->U+8449, U+F96F->U+8AAA, U+F970->U+6BBA, U+F971->U+8FB0, U+F972->U+6C88, U+F973->U+62FE, U+F974->U+82E5, U+F975->U+63A0, U+F976->U+7565, U+F977->U+4EAE, U+F978->U+5169, U+F979->U+51C9, U+F97A->U+6881, U+F97B->U+7CE7, U+F97C->U+826F, U+F97D->U+8AD2, U+F97E->U+91CF, U+F97F->U+52F5, U+F980->U+5442, U+F981->U+5973, U+F982->U+5EEC, U+F983->U+65C5, U+F984->U+6FFE, U+F985->U+792A, U+F986->U+95AD, U+F987->U+9A6A, U+F988->U+9E97, U+F989->U+9ECE, U+F98A->U+529B, U+F98B->U+66C6, U+F98C->U+6B77, U+F98D->U+8F62, U+F98E->U+5E74, U+F98F->U+6190, U+F990->U+6200, U+F991->U+649A, U+F992->U+6F23, U+F993->U+7149, U+F994->U+7489, U+F995->U+79CA, U+F996->U+7DF4, U+F997->U+806F, U+F998->U+8F26, U+F999->U+84EE, U+F99A->U+9023, U+F99B->U+934A, U+F99C->U+5217, U+F99D->U+52A3, U+F99E->U+54BD, U+F99F->U+70C8, U+F9A0->U+88C2, U+F9A1->U+8AAA, U+F9A2->U+5EC9, U+F9A3->U+5FF5, U+F9A4->U+637B, U+F9A5->U+6BAE, U+F9A6->U+7C3E, U+F9A7->U+7375, U+F9A8->U+4EE4, U+F9A9->U+56F9, U+F9AA->U+5BE7, U+F9AB->U+5DBA, U+F9AC->U+601C, U+F9AD->U+73B2, U+F9AE->U+7469, U+F9AF->U+7F9A, U+F9B0->U+8046, U+F9B1->U+9234, U+F9B2->U+96F6, U+F9B3->U+9748, U+F9B4->U+9818, U+F9B5->U+4F8B, U+F9B6->U+79AE, U+F9B7->U+91B4, U+F9B8->U+96B8, U+F9B9->U+60E1, U+F9BA->U+4E86, U+F9BB->U+50DA, U+F9BC->U+5BEE, U+F9BD->U+5C3F, U+F9BE->U+6599, U+F9BF->U+6A02, U+F9C0->U+71CE, U+F9C1->U+7642, U+F9C2->U+84FC, U+F9C3->U+907C, U+F9C4->U+9F8D, U+F9C5->U+6688, U+F9C6->U+962E, U+F9C7->U+5289, U+F9C8->U+677B, U+F9C9->U+67F3, U+F9CA->U+6D41, U+F9CB->U+6E9C, U+F9CC->U+7409, U+F9CD->U+7559, U+F9CE->U+786B, U+F9CF->U+7D10, U+F9D0->U+985E, U+F9D1->U+516D, U+F9D2->U+622E, U+F9D3->U+9678, U+F9D4->U+502B, U+F9D5->U+5D19, U+F9D6->U+6DEA, U+F9D7->U+8F2A, U+F9D8->U+5F8B, U+F9D9->U+6144, U+F9DA->U+6817, U+F9DB->U+7387, U+F9DC->U+9686, U+F9DD->U+5229, U+F9DE->U+540F, U+F9DF->U+5C65, U+F9E0->U+6613, U+F9E1->U+674E, U+F9E2->U+68A8, U+F9E3->U+6CE5, U+F9E4->U+7406, U+F9E5->U+75E2, U+F9E6->U+7F79, U+F9E7->U+88CF, U+F9E8->U+88E1, U+F9E9->U+91CC, U+F9EA->U+96E2, U+F9EB->U+533F, U+F9EC->U+6EBA, U+F9ED->U+541D, U+F9EE->U+71D0, U+F9EF->U+7498, U+F9F0->U+85FA, U+F9F1->U+96A3, U+F9F2->U+9C57, U+F9F3->U+9E9F, U+F9F4->U+6797, U+F9F5->U+6DCB, U+F9F6->U+81E8, U+F9F7->U+7ACB, U+F9F8->U+7B20, U+F9F9->U+7C92, U+F9FA->U+72C0, U+F9FB->U+7099, U+F9FC->U+8B58, U+F9FD->U+4EC0, U+F9FE->U+8336, U+F9FF->U+523A, U+FA00->U+5207, U+FA01->U+5EA6, U+FA02->U+62D3, U+FA03->U+7CD6, U+FA04->U+5B85, U+FA05->U+6D1E, U+FA06->U+66B4, U+FA07->U+8F3B, U+FA08->U+884C, U+FA09->U+964D, U+FA0A->U+898B, U+FA0B->U+5ED3, U+FA0C->U+5140, U+FA0D->U+55C0, U+FA10->U+585A, U+FA12->U+6674, U+FA15->U+51DE, U+FA16->U+732A, U+FA17->U+76CA, U+FA18->U+793C, U+FA19->U+795E, U+FA1A->U+7965, U+FA1B->U+798F, U+FA1C->U+9756, U+FA1D->U+7CBE, U+FA1E->U+7FBD, U+FA20->U+8612, U+FA22->U+8AF8, U+FA25->U+9038, U+FA26->U+90FD, U+FA2A->U+98EF, U+FA2B->U+98FC, U+FA2C->U+9928, U+FA2D->U+9DB4, U+FA30->U+4FAE, U+FA31->U+50E7, U+FA32->U+514D, U+FA33->U+52C9, U+FA34->U+52E4, U+FA35->U+5351, U+FA36->U+559D, U+FA37->U+5606, U+FA38->U+5668, U+FA39->U+5840, U+FA3A->U+58A8, U+FA3B->U+5C64, U+FA3C->U+5C6E, U+FA3D->U+6094, U+FA3E->U+6168, U+FA3F->U+618E, U+FA40->U+61F2, U+FA41->U+654F, U+FA42->U+65E2, U+FA43->U+6691, U+FA44->U+6885, U+FA45->U+6D77, U+FA46->U+6E1A, U+FA47->U+6F22, U+FA48->U+716E, U+FA49->U+722B, U+FA4A->U+7422, U+FA4B->U+7891, U+FA4C->U+793E, U+FA4D->U+7949, U+FA4E->U+7948, U+FA4F->U+7950, U+FA50->U+7956, U+FA51->U+795D, U+FA52->U+798D, U+FA53->U+798E, U+FA54->U+7A40, U+FA55->U+7A81, U+FA56->U+7BC0, U+FA57->U+7DF4, U+FA58->U+7E09, U+FA59->U+7E41, U+FA5A->U+7F72, U+FA5B->U+8005, U+FA5C->U+81ED, U+FA5D->U+8279, U+FA5E->U+8279, U+FA5F->U+8457, U+FA60->U+8910, U+FA61->U+8996, U+FA62->U+8B01, U+FA63->U+8B39, U+FA64->U+8CD3, U+FA65->U+8D08, U+FA66->U+8FB6, U+FA67->U+9038, U+FA68->U+96E3, U+FA69->U+97FF, U+FA6A->U+983B, U+FA70->U+4E26, U+FA71->U+51B5, U+FA72->U+5168, U+FA73->U+4F80, U+FA74->U+5145, U+FA75->U+5180, U+FA76->U+52C7, U+FA77->U+52FA, U+FA78->U+559D, U+FA79->U+5555, U+FA7A->U+5599, U+FA7B->U+55E2, U+FA7C->U+585A, U+FA7D->U+58B3, U+FA7E->U+5944, U+FA7F->U+5954, U+FA80->U+5A62, U+FA81->U+5B28, U+FA82->U+5ED2, U+FA83->U+5ED9, U+FA84->U+5F69, U+FA85->U+5FAD, U+FA86->U+60D8, U+FA87->U+614E, U+FA88->U+6108, U+FA89->U+618E, U+FA8A->U+6160, U+FA8B->U+61F2, U+FA8C->U+6234, U+FA8D->U+63C4, U+FA8E->U+641C, U+FA8F->U+6452, U+FA90->U+6556, U+FA91->U+6674, U+FA92->U+6717, U+FA93->U+671B, U+FA94->U+6756, U+FA95->U+6B79, U+FA96->U+6BBA, U+FA97->U+6D41, U+FA98->U+6EDB, U+FA99->U+6ECB, U+FA9A->U+6F22, U+FA9B->U+701E, U+FA9C->U+716E, U+FA9D->U+77A7, U+FA9E->U+7235, U+FA9F->U+72AF, U+FAA0->U+732A, U+FAA1->U+7471, U+FAA2->U+7506, U+FAA3->U+753B, U+FAA4->U+761D, U+FAA5->U+761F, U+FAA6->U+76CA, U+FAA7->U+76DB, U+FAA8->U+76F4, U+FAA9->U+774A, U+FAAA->U+7740, U+FAAB->U+78CC, U+FAAC->U+7AB1, U+FAAD->U+7BC0, U+FAAE->U+7C7B, U+FAAF->U+7D5B, U+FAB0->U+7DF4, U+FAB1->U+7F3E, U+FAB2->U+8005, U+FAB3->U+8352, U+FAB4->U+83EF, U+FAB5->U+8779, U+FAB6->U+8941, U+FAB7->U+8986, U+FAB8->U+8996, U+FAB9->U+8ABF, U+FABA->U+8AF8, U+FABB->U+8ACB, U+FABC->U+8B01, U+FABD->U+8AFE, U+FABE->U+8AED, U+FABF->U+8B39, U+FAC0->U+8B8A, U+FAC1->U+8D08, U+FAC2->U+8F38, U+FAC3->U+9072, U+FAC4->U+9199, U+FAC5->U+9276, U+FAC6->U+967C, U+FAC7->U+96E3, U+FAC8->U+9756, U+FAC9->U+97DB, U+FACA->U+97FF, U+FACB->U+980B, U+FACC->U+983B, U+FACD->U+9B12, U+FACE->U+9F9C, U+FACF->U+2284A, U+FAD0->U+22844, U+FAD1->U+233D5, U+FAD2->U+3B9D, U+FAD3->U+4018, U+FAD4->U+4039, U+FAD5->U+25249, U+FAD6->U+25CD0, U+FAD7->U+27ED3, U+FAD8->U+9F43, U+FAD9->U+9F8E, U+2F800->U+4E3D, U+2F801->U+4E38, U+2F802->U+4E41, U+2F803->U+20122, U+2F804->U+4F60, U+2F805->U+4FAE, U+2F806->U+4FBB, U+2F807->U+5002, U+2F808->U+507A, U+2F809->U+5099, U+2F80A->U+50E7, U+2F80B->U+50CF, U+2F80C->U+349E, U+2F80D->U+2063A, U+2F80E->U+514D, U+2F80F->U+5154, U+2F810->U+5164, U+2F811->U+5177, U+2F812->U+2051C, U+2F813->U+34B9, U+2F814->U+5167, U+2F815->U+518D, U+2F816->U+2054B, U+2F817->U+5197, U+2F818->U+51A4, U+2F819->U+4ECC, U+2F81A->U+51AC, U+2F81B->U+51B5, U+2F81C->U+291DF, U+2F81D->U+51F5, U+2F81E->U+5203, U+2F81F->U+34DF, U+2F820->U+523B, U+2F821->U+5246, U+2F822->U+5272, U+2F823->U+5277, U+2F824->U+3515, U+2F825->U+52C7, U+2F826->U+52C9, U+2F827->U+52E4, U+2F828->U+52FA, U+2F829->U+5305, U+2F82A->U+5306, U+2F82B->U+5317, U+2F82C->U+5349, U+2F82D->U+5351, U+2F82E->U+535A, U+2F82F->U+5373, U+2F830->U+537D, U+2F831->U+537F, U+2F832->U+537F, U+2F833->U+537F, U+2F834->U+20A2C, U+2F835->U+7070, U+2F836->U+53CA, U+2F837->U+53DF, U+2F838->U+20B63, U+2F839->U+53EB, U+2F83A->U+53F1, U+2F83B->U+5406, U+2F83C->U+549E, U+2F83D->U+5438, U+2F83E->U+5448, U+2F83F->U+5468, U+2F840->U+54A2, U+2F841->U+54F6, U+2F842->U+5510, U+2F843->U+5553, U+2F844->U+5563, U+2F845->U+5584, U+2F846->U+5584, U+2F847->U+5599, U+2F848->U+55AB, U+2F849->U+55B3, U+2F84A->U+55C2, U+2F84B->U+5716, U+2F84C->U+5606, U+2F84D->U+5717, U+2F84E->U+5651, U+2F84F->U+5674, U+2F850->U+5207, U+2F851->U+58EE, U+2F852->U+57CE, U+2F853->U+57F4, U+2F854->U+580D, U+2F855->U+578B, U+2F856->U+5832, U+2F857->U+5831, U+2F858->U+58AC, U+2F859->U+214E4, U+2F85A->U+58F2, U+2F85B->U+58F7, U+2F85C->U+5906, U+2F85D->U+591A, U+2F85E->U+5922, U+2F85F->U+5962, U+2F860->U+216A8, U+2F861->U+216EA, U+2F862->U+59EC, U+2F863->U+5A1B, U+2F864->U+5A27, U+2F865->U+59D8, U+2F866->U+5A66, U+2F867->U+36EE, U+2F868->U+36FC, U+2F869->U+5B08, U+2F86A->U+5B3E, U+2F86B->U+5B3E, U+2F86C->U+219C8, U+2F86D->U+5BC3, U+2F86E->U+5BD8, U+2F86F->U+5BE7, U+2F870->U+5BF3, U+2F871->U+21B18, U+2F872->U+5BFF, U+2F873->U+5C06, U+2F874->U+5F53, U+2F875->U+5C22, U+2F876->U+3781, U+2F877->U+5C60, U+2F878->U+5C6E, U+2F879->U+5CC0, U+2F87A->U+5C8D, U+2F87B->U+21DE4, U+2F87C->U+5D43, U+2F87D->U+21DE6, U+2F87E->U+5D6E, U+2F87F->U+5D6B, U+2F880->U+5D7C, U+2F881->U+5DE1, U+2F882->U+5DE2, U+2F883->U+382F, U+2F884->U+5DFD, U+2F885->U+5E28, U+2F886->U+5E3D, U+2F887->U+5E69, U+2F888->U+3862, U+2F889->U+22183, U+2F88A->U+387C, U+2F88B->U+5EB0, U+2F88C->U+5EB3, U+2F88D->U+5EB6, U+2F88E->U+5ECA, U+2F88F->U+2A392, U+2F890->U+5EFE, U+2F891->U+22331, U+2F892->U+22331, U+2F893->U+8201, U+2F894->U+5F22, U+2F895->U+5F22, U+2F896->U+38C7, U+2F897->U+232B8, U+2F898->U+261DA, U+2F899->U+5F62, U+2F89A->U+5F6B, U+2F89B->U+38E3, U+2F89C->U+5F9A, U+2F89D->U+5FCD, U+2F89E->U+5FD7, U+2F89F->U+5FF9, U+2F8A0->U+6081, U+2F8A1->U+393A, U+2F8A2->U+391C, U+2F8A3->U+6094, U+2F8A4->U+226D4, U+2F8A5->U+60C7, U+2F8A6->U+6148, U+2F8A7->U+614C, U+2F8A8->U+614E, U+2F8A9->U+614C, U+2F8AA->U+617A, U+2F8AB->U+618E, U+2F8AC->U+61B2, U+2F8AD->U+61A4, U+2F8AE->U+61AF, U+2F8AF->U+61DE, U+2F8B0->U+61F2, U+2F8B1->U+61F6, U+2F8B2->U+6210, U+2F8B3->U+621B, U+2F8B4->U+625D, U+2F8B5->U+62B1, U+2F8B6->U+62D4, U+2F8B7->U+6350, U+2F8B8->U+22B0C, U+2F8B9->U+633D, U+2F8BA->U+62FC, U+2F8BB->U+6368, U+2F8BC->U+6383, U+2F8BD->U+63E4, U+2F8BE->U+22BF1, U+2F8BF->U+6422, U+2F8C0->U+63C5, U+2F8C1->U+63A9, U+2F8C2->U+3A2E, U+2F8C3->U+6469, U+2F8C4->U+647E, U+2F8C5->U+649D, U+2F8C6->U+6477, U+2F8C7->U+3A6C, U+2F8C8->U+654F, U+2F8C9->U+656C, U+2F8CA->U+2300A, U+2F8CB->U+65E3, U+2F8CC->U+66F8, U+2F8CD->U+6649, U+2F8CE->U+3B19, U+2F8CF->U+6691, U+2F8D0->U+3B08, U+2F8D1->U+3AE4, U+2F8D2->U+5192, U+2F8D3->U+5195, U+2F8D4->U+6700, U+2F8D5->U+669C, U+2F8D6->U+80AD, U+2F8D7->U+43D9, U+2F8D8->U+6717, U+2F8D9->U+671B, U+2F8DA->U+6721, U+2F8DB->U+675E, U+2F8DC->U+6753, U+2F8DD->U+233C3, U+2F8DE->U+3B49, U+2F8DF->U+67FA, U+2F8E0->U+6785, U+2F8E1->U+6852, U+2F8E2->U+6885, U+2F8E3->U+2346D, U+2F8E4->U+688E, U+2F8E5->U+681F, U+2F8E6->U+6914, U+2F8E7->U+3B9D, U+2F8E8->U+6942, U+2F8E9->U+69A3, U+2F8EA->U+69EA, U+2F8EB->U+6AA8, U+2F8EC->U+236A3, U+2F8ED->U+6ADB, U+2F8EE->U+3C18, U+2F8EF->U+6B21, U+2F8F0->U+238A7, U+2F8F1->U+6B54, U+2F8F2->U+3C4E, U+2F8F3->U+6B72, U+2F8F4->U+6B9F, U+2F8F5->U+6BBA, U+2F8F6->U+6BBB, U+2F8F7->U+23A8D, U+2F8F8->U+21D0B, U+2F8F9->U+23AFA, U+2F8FA->U+6C4E, U+2F8FB->U+23CBC, U+2F8FC->U+6CBF, U+2F8FD->U+6CCD, U+2F8FE->U+6C67, U+2F8FF->U+6D16, U+2F900->U+6D3E, U+2F901->U+6D77, U+2F902->U+6D41, U+2F903->U+6D69, U+2F904->U+6D78, U+2F905->U+6D85, U+2F906->U+23D1E, U+2F907->U+6D34, U+2F908->U+6E2F, U+2F909->U+6E6E, U+2F90A->U+3D33, U+2F90B->U+6ECB, U+2F90C->U+6EC7, U+2F90D->U+23ED1, U+2F90E->U+6DF9, U+2F90F->U+6F6E, U+2F910->U+23F5E, U+2F911->U+23F8E, U+2F912->U+6FC6, U+2F913->U+7039, U+2F914->U+701E, U+2F915->U+701B, U+2F916->U+3D96, U+2F917->U+704A, U+2F918->U+707D, U+2F919->U+7077, U+2F91A->U+70AD, U+2F91B->U+20525, U+2F91C->U+7145, U+2F91D->U+24263, U+2F91E->U+719C, U+2F91F->U+243AB, U+2F920->U+7228, U+2F921->U+7235, U+2F922->U+7250, U+2F923->U+24608, U+2F924->U+7280, U+2F925->U+7295, U+2F926->U+24735, U+2F927->U+24814, U+2F928->U+737A, U+2F929->U+738B, U+2F92A->U+3EAC, U+2F92B->U+73A5, U+2F92C->U+3EB8, U+2F92D->U+3EB8, U+2F92E->U+7447, U+2F92F->U+745C, U+2F930->U+7471, U+2F931->U+7485, U+2F932->U+74CA, U+2F933->U+3F1B, U+2F934->U+7524, U+2F935->U+24C36, U+2F936->U+753E, U+2F937->U+24C92, U+2F938->U+7570, U+2F939->U+2219F, U+2F93A->U+7610, U+2F93B->U+24FA1, U+2F93C->U+24FB8, U+2F93D->U+25044, U+2F93E->U+3FFC, U+2F93F->U+4008, U+2F940->U+76F4, U+2F941->U+250F3, U+2F942->U+250F2, U+2F943->U+25119, U+2F944->U+25133, U+2F945->U+771E, U+2F946->U+771F, U+2F947->U+771F, U+2F948->U+774A, U+2F949->U+4039, U+2F94A->U+778B, U+2F94B->U+4046, U+2F94C->U+4096, U+2F94D->U+2541D, U+2F94E->U+784E, U+2F94F->U+788C, U+2F950->U+78CC, U+2F951->U+40E3, U+2F952->U+25626, U+2F953->U+7956, U+2F954->U+2569A, U+2F955->U+256C5, U+2F956->U+798F, U+2F957->U+79EB, U+2F958->U+412F, U+2F959->U+7A40, U+2F95A->U+7A4A, U+2F95B->U+7A4F, U+2F95C->U+2597C, U+2F95D->U+25AA7, U+2F95E->U+25AA7, U+2F95F->U+7AEE, U+2F960->U+4202, U+2F961->U+25BAB, U+2F962->U+7BC6, U+2F963->U+7BC9, U+2F964->U+4227, U+2F965->U+25C80, U+2F966->U+7CD2, U+2F967->U+42A0, U+2F968->U+7CE8, U+2F969->U+7CE3, U+2F96A->U+7D00, U+2F96B->U+25F86, U+2F96C->U+7D63, U+2F96D->U+4301, U+2F96E->U+7DC7, U+2F96F->U+7E02, U+2F970->U+7E45, U+2F971->U+4334, U+2F972->U+26228, U+2F973->U+26247, U+2F974->U+4359, U+2F975->U+262D9, U+2F976->U+7F7A, U+2F977->U+2633E, U+2F978->U+7F95, U+2F979->U+7FFA, U+2F97A->U+8005, U+2F97B->U+264DA, U+2F97C->U+26523, U+2F97D->U+8060, U+2F97E->U+265A8, U+2F97F->U+8070, U+2F980->U+2335F, U+2F981->U+43D5, U+2F982->U+80B2, U+2F983->U+8103, U+2F984->U+440B, U+2F985->U+813E, U+2F986->U+5AB5, U+2F987->U+267A7, U+2F988->U+267B5, U+2F989->U+23393, U+2F98A->U+2339C, U+2F98B->U+8201, U+2F98C->U+8204, U+2F98D->U+8F9E, U+2F98E->U+446B, U+2F98F->U+8291, U+2F990->U+828B, U+2F991->U+829D, U+2F992->U+52B3, U+2F993->U+82B1, U+2F994->U+82B3, U+2F995->U+82BD, U+2F996->U+82E6, U+2F997->U+26B3C, U+2F998->U+82E5, U+2F999->U+831D, U+2F99A->U+8363, U+2F99B->U+83AD, U+2F99C->U+8323, U+2F99D->U+83BD, U+2F99E->U+83E7, U+2F99F->U+8457, U+2F9A0->U+8353, U+2F9A1->U+83CA, U+2F9A2->U+83CC, U+2F9A3->U+83DC, U+2F9A4->U+26C36, U+2F9A5->U+26D6B, U+2F9A6->U+26CD5, U+2F9A7->U+452B, U+2F9A8->U+84F1, U+2F9A9->U+84F3, U+2F9AA->U+8516, U+2F9AB->U+273CA, U+2F9AC->U+8564, U+2F9AD->U+26F2C, U+2F9AE->U+455D, U+2F9AF->U+4561, U+2F9B0->U+26FB1, U+2F9B1->U+270D2, U+2F9B2->U+456B, U+2F9B3->U+8650, U+2F9B4->U+865C, U+2F9B5->U+8667, U+2F9B6->U+8669, U+2F9B7->U+86A9, U+2F9B8->U+8688, U+2F9B9->U+870E, U+2F9BA->U+86E2, U+2F9BB->U+8779, U+2F9BC->U+8728, U+2F9BD->U+876B, U+2F9BE->U+8786, U+2F9BF->U+45D7, U+2F9C0->U+87E1, U+2F9C1->U+8801, U+2F9C2->U+45F9, U+2F9C3->U+8860, U+2F9C4->U+8863, U+2F9C5->U+27667, U+2F9C6->U+88D7, U+2F9C7->U+88DE, U+2F9C8->U+4635, U+2F9C9->U+88FA, U+2F9CA->U+34BB, U+2F9CB->U+278AE, U+2F9CC->U+27966, U+2F9CD->U+46BE, U+2F9CE->U+46C7, U+2F9CF->U+8AA0, U+2F9D0->U+8AED, U+2F9D1->U+8B8A, U+2F9D2->U+8C55, U+2F9D3->U+27CA8, U+2F9D4->U+8CAB, U+2F9D5->U+8CC1, U+2F9D6->U+8D1B, U+2F9D7->U+8D77, U+2F9D8->U+27F2F, U+2F9D9->U+20804, U+2F9DA->U+8DCB, U+2F9DB->U+8DBC, U+2F9DC->U+8DF0, U+2F9DD->U+208DE, U+2F9DE->U+8ED4, U+2F9DF->U+8F38, U+2F9E0->U+285D2, U+2F9E1->U+285ED, U+2F9E2->U+9094, U+2F9E3->U+90F1, U+2F9E4->U+9111, U+2F9E5->U+2872E, U+2F9E6->U+911B, U+2F9E7->U+9238, U+2F9E8->U+92D7, U+2F9E9->U+92D8, U+2F9EA->U+927C, U+2F9EB->U+93F9, U+2F9EC->U+9415, U+2F9ED->U+28BFA, U+2F9EE->U+958B, U+2F9EF->U+4995, U+2F9F0->U+95B7, U+2F9F1->U+28D77, U+2F9F2->U+49E6, U+2F9F3->U+96C3, U+2F9F4->U+5DB2, U+2F9F5->U+9723, U+2F9F6->U+29145, U+2F9F7->U+2921A, U+2F9F8->U+4A6E, U+2F9F9->U+4A76, U+2F9FA->U+97E0, U+2F9FB->U+2940A, U+2F9FC->U+4AB2, U+2F9FD->U+29496, U+2F9FE->U+980B, U+2F9FF->U+980B, U+2FA00->U+9829, U+2FA01->U+295B6, U+2FA02->U+98E2, U+2FA03->U+4B33, U+2FA04->U+9929, U+2FA05->U+99A7, U+2FA06->U+99C2, U+2FA07->U+99FE, U+2FA08->U+4BCE, U+2FA09->U+29B30, U+2FA0A->U+9B12, U+2FA0B->U+9C40, U+2FA0C->U+9CFD, U+2FA0D->U+4CCE, U+2FA0E->U+4CED, U+2FA0F->U+9D67, U+2FA10->U+2A0CE, U+2FA11->U+4CF8, U+2FA12->U+2A105, U+2FA13->U+2A20E, U+2FA14->U+2A291, U+2FA15->U+9EBB, U+2FA16->U+4D56, U+2FA17->U+9EF9, U+2FA18->U+9EFE, U+2FA19->U+9F05, U+2FA1A->U+9F0F, U+2FA1B->U+9F16, U+2FA1C->U+9F3B, U+2FA1D->U+2A600, U+2F00->U+4E00, U+2F01->U+4E28, U+2F02->U+4E36, U+2F03->U+4E3F, U+2F04->U+4E59, U+2F05->U+4E85, U+2F06->U+4E8C, U+2F07->U+4EA0, U+2F08->U+4EBA, U+2F09->U+513F, U+2F0A->U+5165, U+2F0B->U+516B, U+2F0C->U+5182, U+2F0D->U+5196, U+2F0E->U+51AB, U+2F0F->U+51E0, U+2F10->U+51F5, U+2F11->U+5200, U+2F12->U+529B, U+2F13->U+52F9, U+2F14->U+5315, U+2F15->U+531A, U+2F16->U+5338, U+2F17->U+5341, U+2F18->U+535C, U+2F19->U+5369, U+2F1A->U+5382, U+2F1B->U+53B6, U+2F1C->U+53C8, U+2F1D->U+53E3, U+2F1E->U+56D7, U+2F1F->U+571F, U+2F20->U+58EB, U+2F21->U+5902, U+2F22->U+590A, U+2F23->U+5915, U+2F24->U+5927, U+2F25->U+5973, U+2F26->U+5B50, U+2F27->U+5B80, U+2F28->U+5BF8, U+2F29->U+5C0F, U+2F2A->U+5C22, U+2F2B->U+5C38, U+2F2C->U+5C6E, U+2F2D->U+5C71, U+2F2E->U+5DDB, U+2F2F->U+5DE5, U+2F30->U+5DF1, U+2F31->U+5DFE, U+2F32->U+5E72, U+2F33->U+5E7A, U+2F34->U+5E7F, U+2F35->U+5EF4, U+2F36->U+5EFE, U+2F37->U+5F0B, U+2F38->U+5F13, U+2F39->U+5F50, U+2F3A->U+5F61, U+2F3B->U+5F73, U+2F3C->U+5FC3, U+2F3D->U+6208, U+2F3E->U+6236, U+2F3F->U+624B, U+2F40->U+652F, U+2F41->U+6534, U+2F42->U+6587, U+2F43->U+6597, U+2F44->U+65A4, U+2F45->U+65B9, U+2F46->U+65E0, U+2F47->U+65E5, U+2F48->U+66F0, U+2F49->U+6708, U+2F4A->U+6728, U+2F4B->U+6B20, U+2F4C->U+6B62, U+2F4D->U+6B79, U+2F4E->U+6BB3, U+2F4F->U+6BCB, U+2F50->U+6BD4, U+2F51->U+6BDB, U+2F52->U+6C0F, U+2F53->U+6C14, U+2F54->U+6C34, U+2F55->U+706B, U+2F56->U+722A, U+2F57->U+7236, U+2F58->U+723B, U+2F59->U+723F, U+2F5A->U+7247, U+2F5B->U+7259, U+2F5C->U+725B, U+2F5D->U+72AC, U+2F5E->U+7384, U+2F5F->U+7389, U+2F60->U+74DC, U+2F61->U+74E6, U+2F62->U+7518, U+2F63->U+751F, U+2F64->U+7528, U+2F65->U+7530, U+2F66->U+758B, U+2F67->U+7592, U+2F68->U+7676, U+2F69->U+767D, U+2F6A->U+76AE, U+2F6B->U+76BF, U+2F6C->U+76EE, U+2F6D->U+77DB, U+2F6E->U+77E2, U+2F6F->U+77F3, U+2F70->U+793A, U+2F71->U+79B8, U+2F72->U+79BE, U+2F73->U+7A74, U+2F74->U+7ACB, U+2F75->U+7AF9, U+2F76->U+7C73, U+2F77->U+7CF8, U+2F78->U+7F36, U+2F79->U+7F51, U+2F7A->U+7F8A, U+2F7B->U+7FBD, U+2F7C->U+8001, U+2F7D->U+800C, U+2F7E->U+8012, U+2F7F->U+8033, U+2F80->U+807F, U+2F81->U+8089, U+2F82->U+81E3, U+2F83->U+81EA, U+2F84->U+81F3, U+2F85->U+81FC, U+2F86->U+820C, U+2F87->U+821B, U+2F88->U+821F, U+2F89->U+826E, U+2F8A->U+8272, U+2F8B->U+8278, U+2F8C->U+864D, U+2F8D->U+866B, U+2F8E->U+8840, U+2F8F->U+884C, U+2F90->U+8863, U+2F91->U+897E, U+2F92->U+898B, U+2F93->U+89D2, U+2F94->U+8A00, U+2F95->U+8C37, U+2F96->U+8C46, U+2F97->U+8C55, U+2F98->U+8C78, U+2F99->U+8C9D, U+2F9A->U+8D64, U+2F9B->U+8D70, U+2F9C->U+8DB3, U+2F9D->U+8EAB, U+2F9E->U+8ECA, U+2F9F->U+8F9B, U+2FA0->U+8FB0, U+2FA1->U+8FB5, U+2FA2->U+9091, U+2FA3->U+9149, U+2FA4->U+91C6, U+2FA5->U+91CC, U+2FA6->U+91D1, U+2FA7->U+9577, U+2FA8->U+9580, U+2FA9->U+961C, U+2FAA->U+96B6, U+2FAB->U+96B9, U+2FAC->U+96E8, U+2FAD->U+9751, U+2FAE->U+975E, U+2FAF->U+9762, U+2FB0->U+9769, U+2FB1->U+97CB, U+2FB2->U+97ED, U+2FB3->U+97F3, U+2FB4->U+9801, U+2FB5->U+98A8, U+2FB6->U+98DB, U+2FB7->U+98DF, U+2FB8->U+9996, U+2FB9->U+9999, U+2FBA->U+99AC, U+2FBB->U+9AA8, U+2FBC->U+9AD8, U+2FBD->U+9ADF, U+2FBE->U+9B25, U+2FBF->U+9B2F, U+2FC0->U+9B32, U+2FC1->U+9B3C, U+2FC2->U+9B5A, U+2FC3->U+9CE5, U+2FC4->U+9E75, U+2FC5->U+9E7F, U+2FC6->U+9EA5, U+2FC7->U+9EBB, U+2FC8->U+9EC3, U+2FC9->U+9ECD, U+2FCA->U+9ED1, U+2FCB->U+9EF9, U+2FCC->U+9EFD, U+2FCD->U+9F0E, U+2FCE->U+9F13, U+2FCF->U+9F20, U+2FD0->U+9F3B, U+2FD1->U+9F4A, U+2FD2->U+9F52, U+2FD3->U+9F8D, U+2FD4->U+9F9C, U+2FD5->U+9FA0, U+3042->U+3041, U+3044->U+3043, U+3046->U+3045, U+3048->U+3047, U+304A->U+3049, U+304C->U+304B, U+304E->U+304D, U+3050->U+304F, U+3052->U+3051, U+3054->U+3053, U+3056->U+3055, U+3058->U+3057, U+305A->U+3059, U+305C->U+305B, U+305E->U+305D, U+3060->U+305F, U+3062->U+3061, U+3064->U+3063, U+3065->U+3063, U+3067->U+3066, U+3069->U+3068, U+3070->U+306F, U+3071->U+306F, U+3073->U+3072, U+3074->U+3072, U+3076->U+3075, U+3077->U+3075, U+3079->U+3078, U+307A->U+3078, U+307C->U+307B, U+307D->U+307B, U+3084->U+3083, U+3086->U+3085, U+3088->U+3087, U+308F->U+308E, U+3094->U+3046, U+3095->U+304B, U+3096->U+3051, U+30A2->U+30A1, U+30A4->U+30A3, U+30A6->U+30A5, U+30A8->U+30A7, U+30AA->U+30A9, U+30AC->U+30AB, U+30AE->U+30AD, U+30B0->U+30AF, U+30B2->U+30B1, U+30B4->U+30B3, U+30B6->U+30B5, U+30B8->U+30B7, U+30BA->U+30B9, U+30BC->U+30BB, U+30BE->U+30BD, U+30C0->U+30BF, U+30C2->U+30C1, U+30C5->U+30C4, U+30C7->U+30C6, U+30C9->U+30C8, U+30D0->U+30CF, U+30D1->U+30CF, U+30D3->U+30D2, U+30D4->U+30D2, U+30D6->U+30D5, U+30D7->U+30D5, U+30D9->U+30D8, U+30DA->U+30D8, U+30DC->U+30DB, U+30DD->U+30DB, U+30E4->U+30E3, U+30E6->U+30E5, U+30E8->U+30E7, U+30EF->U+30EE, U+30F4->U+30A6, U+30AB->U+30F5, U+30B1->U+30F6, U+30F7->U+30EF, U+30F8->U+30F0, U+30F9->U+30F1, U+30FA->U+30F2, U+30AF->U+31F0, U+30B7->U+31F1, U+30B9->U+31F2, U+30C8->U+31F3, U+30CC->U+31F4, U+30CF->U+31F5, U+30D2->U+31F6, U+30D5->U+31F7, U+30D8->U+31F8, U+30DB->U+31F9, U+30E0->U+31FA, U+30E9->U+31FB, U+30EA->U+31FC, U+30EB->U+31FD, U+30EC->U+31FE, U+30ED->U+31FF, U+FF66->U+30F2, U+FF67->U+30A1, U+FF68->U+30A3, U+FF69->U+30A5, U+FF6A->U+30A7, U+FF6B->U+30A9, U+FF6C->U+30E3, U+FF6D->U+30E5, U+FF6E->U+30E7, U+FF6F->U+30C3, U+FF71->U+30A1, U+FF72->U+30A3, U+FF73->U+30A5, U+FF74->U+30A7, U+FF75->U+30A9, U+FF76->U+30AB, U+FF77->U+30AD, U+FF78->U+30AF, U+FF79->U+30B1, U+FF7A->U+30B3, U+FF7B->U+30B5, U+FF7C->U+30B7, U+FF7D->U+30B9, U+FF7E->U+30BB, U+FF7F->U+30BD, U+FF80->U+30BF, U+FF81->U+30C1, U+FF82->U+30C3, U+FF83->U+30C6, U+FF84->U+30C8, U+FF85->U+30CA, U+FF86->U+30CB, U+FF87->U+30CC, U+FF88->U+30CD, U+FF89->U+30CE, U+FF8A->U+30CF, U+FF8B->U+30D2, U+FF8C->U+30D5, U+FF8D->U+30D8, U+FF8E->U+30DB, U+FF8F->U+30DE, U+FF90->U+30DF, U+FF91->U+30E0, U+FF92->U+30E1, U+FF93->U+30E2, U+FF94->U+30E3, U+FF95->U+30E5, U+FF96->U+30E7, U+FF97->U+30E9, U+FF98->U+30EA, U+FF99->U+30EB, U+FF9A->U+30EC, U+FF9B->U+30ED, U+FF9C->U+30EF, U+FF9D->U+30F3, U+FFA0->U+3164, U+FFA1->U+3131, U+FFA2->U+3132, U+FFA3->U+3133, U+FFA4->U+3134, U+FFA5->U+3135, U+FFA6->U+3136, U+FFA7->U+3137, U+FFA8->U+3138, U+FFA9->U+3139, U+FFAA->U+313A, U+FFAB->U+313B, U+FFAC->U+313C, U+FFAD->U+313D, U+FFAE->U+313E, U+FFAF->U+313F, U+FFB0->U+3140, U+FFB1->U+3141, U+FFB2->U+3142, U+FFB3->U+3143, U+FFB4->U+3144, U+FFB5->U+3145, U+FFB6->U+3146, U+FFB7->U+3147, U+FFB8->U+3148, U+FFB9->U+3149, U+FFBA->U+314A, U+FFBB->U+314B, U+FFBC->U+314C, U+FFBD->U+314D, U+FFBE->U+314E, U+FFC2->U+314F, U+FFC3->U+3150, U+FFC4->U+3151, U+FFC5->U+3152, U+FFC6->U+3153, U+FFC7->U+3154, U+FFCA->U+3155, U+FFCB->U+3156, U+FFCC->U+3157, U+FFCD->U+3158, U+FFCE->U+3159, U+FFCF->U+315A, U+FFD2->U+315B, U+FFD3->U+315C, U+FFD4->U+315D, U+FFD5->U+315E, U+FFD6->U+315F, U+FFD7->U+3160, U+FFDA->U+3161, U+FFDB->U+3162, U+FFDC->U+3163, U+3131->U+1100, U+3132->U+1101, U+3133->U+11AA, U+3134->U+1102, U+3135->U+11AC, U+3136->U+11AD, U+3137->U+1103, U+3138->U+1104, U+3139->U+1105, U+313A->U+11B0, U+313B->U+11B1, U+313C->U+11B2, U+313D->U+11B3, U+313E->U+11B4, U+313F->U+11B5, U+3140->U+111A, U+3141->U+1106, U+3142->U+1107, U+3143->U+1108, U+3144->U+1121, U+3145->U+1109, U+3146->U+110A, U+3147->U+110B, U+3148->U+110C, U+3149->U+110D, U+314A->U+110E, U+314B->U+110F, U+314C->U+1110, U+314D->U+1111, U+314E->U+1112, U+314F->U+1161, U+3150->U+1162, U+3151->U+1163, U+3152->U+1164, U+3153->U+1165, U+3154->U+1166, U+3155->U+1167, U+3156->U+1168, U+3157->U+1169, U+3158->U+116A, U+3159->U+116B, U+315A->U+116C, U+315B->U+116D, U+315C->U+116E, U+315D->U+116F, U+315E->U+1170, U+315F->U+1171, U+3160->U+1172, U+3161->U+1173, U+3162->U+1174, U+3163->U+1175, U+3165->U+1114, U+3166->U+1115, U+3167->U+11C7, U+3168->U+11C8, U+3169->U+11CC, U+316A->U+11CE, U+316B->U+11D3, U+316C->U+11D7, U+316D->U+11D9, U+316E->U+111C, U+316F->U+11DD, U+3170->U+11DF, U+3171->U+111D, U+3172->U+111E, U+3173->U+1120, U+3174->U+1122, U+3175->U+1123, U+3176->U+1127, U+3177->U+1129, U+3178->U+112B, U+3179->U+112C, U+317A->U+112D, U+317B->U+112E, U+317C->U+112F, U+317D->U+1132, U+317E->U+1136, U+317F->U+1140, U+3180->U+1147, U+3181->U+114C, U+3182->U+11F1, U+3183->U+11F2, U+3184->U+1157, U+3185->U+1158, U+3186->U+1159, U+3187->U+1184, U+3188->U+1185, U+3189->U+1188, U+318A->U+1191, U+318B->U+1192, U+318C->U+1194, U+318D->U+119E, U+318E->U+11A1, U+A490->U+A408, U+A491->U+A1B9, U+4E00..U+9FBB, U+3400..U+4DB5, U+20000..U+2A6D6, U+FA0E, U+FA0F, U+FA11, U+FA13, U+FA14, U+FA1F, U+FA21, U+FA23, U+FA24, U+FA27, U+FA28, U+FA29, U+3105..U+312C, U+31A0..U+31B7, U+3041, U+3043, U+3045, U+3047, U+3049, U+304B, U+304D, U+304F, U+3051, U+3053, U+3055, U+3057, U+3059, U+305B, U+305D, U+305F, U+3061, U+3063, U+3066, U+3068, U+306A..U+306F, U+3072, U+3075, U+3078, U+307B, U+307E..U+3083, U+3085, U+3087, U+3089..U+308E, U+3090..U+3093, U+30A1, U+30A3, U+30A5, U+30A7, U+30A9, U+30AD, U+30AF, U+30B3, U+30B5, U+30BB, U+30BD, U+30BF, U+30C1, U+30C3, U+30C4, U+30C6, U+30CA, U+30CB, U+30CD, U+30CE, U+30DE, U+30DF, U+30E1, U+30E2, U+30E3, U+30E5, U+30E7, U+30EE, U+30F0..U+30F3, U+30F5, U+30F6, U+31F0, U+31F1, U+31F2, U+31F3, U+31F4, U+31F5, U+31F6, U+31F7, U+31F8, U+31F9, U+31FA, U+31FB, U+31FC, U+31FD, U+31FE, U+31FF, U+AC00..U+D7A3, U+1100..U+1159, U+1161..U+11A2, U+11A8..U+11F9, U+A000..U+A48C, U+A492..U+A4C6 +#Coptic +U+2C80->U+2C81, U+2C81, U+2C82->U+2C83, U+2C83, U+2C84->U+2C85, U+2C85, U+2C86->U+2C87, U+2C87, U+2C88->U+2C89, U+2C89, U+2C8A->U+2C8B, U+2C8B, U+2C8C->U+2C8D, U+2C8D, U+2C8E->U+2C8F, U+2C8F, U+2C90->U+2C91, U+2C91, U+2C92->U+2C93, U+2C93, U+2C94->U+2C95, U+2C95, U+2C96->U+2C97, U+2C97, U+2C98->U+2C99, U+2C99, U+2C9A->U+2C9B, U+2C9B, U+2C9C->U+2C9D, U+2C9D, U+2C9E->U+2C9F, U+2C9F, U+2CA0->U+2CA1, U+2CA1, U+2CA2->U+2CA3, U+2CA3, U+2CA4->U+2CA5, U+2CA5, U+2CA6->U+2CA7, U+2CA7, U+2CA8->U+2CA9, U+2CA9, U+2CAA->U+2CAB, U+2CAB, U+2CAC->U+2CAD, U+2CAD, U+2CAE->U+2CAF, U+2CAF, U+2CB0->U+2CB1, U+2CB1, U+2CB2->U+2CB3, U+2CB3, U+2CB4->U+2CB5, U+2CB5, U+2CB6->U+2CB7, U+2CB7, U+2CB8->U+2CB9, U+2CB9, U+2CBA->U+2CBB, U+2CBB, U+2CBC->U+2CBD, U+2CBD, U+2CBE->U+2CBF, U+2CBF, U+2CC0->U+2CC1, U+2CC1, U+2CC2->U+2CC3, U+2CC3, U+2CC4->U+2CC5, U+2CC5, U+2CC6->U+2CC7, U+2CC7, U+2CC8->U+2CC9, U+2CC9, U+2CCA->U+2CCB, U+2CCB, U+2CCC->U+2CCD, U+2CCD, U+2CCE->U+2CCF, U+2CCF, U+2CD0->U+2CD1, U+2CD1, U+2CD2->U+2CD3, U+2CD3, U+2CD4->U+2CD5, U+2CD5, U+2CD6->U+2CD7, U+2CD7, U+2CD8->U+2CD9, U+2CD9, U+2CDA->U+2CDB, U+2CDB, U+2CDC->U+2CDD, U+2CDD, U+2CDE->U+2CDF, U+2CDF, U+2CE0->U+2CE1, U+2CE1, U+2CE2->U+2CE3, U+2CE3 +#Cyrillic* +U+0400->U+0435, U+0401->U+0435, U+0402->U+0452, U+0452, U+0403->U+0433, U+0404->U+0454, U+0454, U+0405->U+0455, U+0455, U+0406->U+0456, U+0407->U+0456, U+0457->U+0456, U+0456, U+0408..U+040B->U+0458..U+045B, U+0458..U+045B, U+040C->U+043A, U+040D->U+0438, U+040E->U+0443, U+040F->U+045F, U+045F, U+0450->U+0435, U+0451->U+0435, U+0453->U+0433, U+045C->U+043A, U+045D->U+0438, U+045E->U+0443, U+0460->U+0461, U+0461, U+0462->U+0463, U+0463, U+0464->U+0465, U+0465, U+0466->U+0467, U+0467, U+0468->U+0469, U+0469, U+046A->U+046B, U+046B, U+046C->U+046D, U+046D, U+046E->U+046F, U+046F, U+0470->U+0471, U+0471, U+0472->U+0473, U+0473, U+0474->U+0475, U+0476->U+0475, U+0477->U+0475, U+0475, U+0478->U+0479, U+0479, U+047A->U+047B, U+047B, U+047C->U+047D, U+047D, U+047E->U+047F, U+047F, U+0480->U+0481, U+0481, U+048A->U+0438, U+048B->U+0438, U+048C->U+044C, U+048D->U+044C, U+048E->U+0440, U+048F->U+0440, U+0490->U+0433, U+0491->U+0433, U+0490->U+0433, U+0491->U+0433, U+0492->U+0433, U+0493->U+0433, U+0494->U+0433, U+0495->U+0433, U+0496->U+0436, U+0497->U+0436, U+0498->U+0437, U+0499->U+0437, U+049A->U+043A, U+049B->U+043A, U+049C->U+043A, U+049D->U+043A, U+049E->U+043A, U+049F->U+043A, U+04A0->U+043A, U+04A1->U+043A, U+04A2->U+043D, U+04A3->U+043D, U+04A4->U+043D, U+04A5->U+043D, U+04A6->U+043F, U+04A7->U+043F, U+04A8->U+04A9, U+04A9, U+04AA->U+0441, U+04AB->U+0441, U+04AC->U+0442, U+04AD->U+0442, U+04AE->U+0443, U+04AF->U+0443, U+04B0->U+0443, U+04B1->U+0443, U+04B2->U+0445, U+04B3->U+0445, U+04B4->U+04B5, U+04B5, U+04B6->U+0447, U+04B7->U+0447, U+04B8->U+0447, U+04B9->U+0447, U+04BA->U+04BB, U+04BB, U+04BC->U+04BD, U+04BE->U+04BD, U+04BF->U+04BD, U+04BD, U+04C0->U+04CF, U+04CF, U+04C1->U+0436, U+04C2->U+0436, U+04C3->U+043A, U+04C4->U+043A, U+04C5->U+043B, U+04C6->U+043B, U+04C7->U+043D, U+04C8->U+043D, U+04C9->U+043D, U+04CA->U+043D, U+04CB->U+0447, U+04CC->U+0447, U+04CD->U+043C, U+04CE->U+043C, U+04D0->U+0430, U+04D1->U+0430, U+04D2->U+0430, U+04D3->U+0430, U+04D4->U+00E6, U+04D5->U+00E6, U+04D6->U+0435, U+04D7->U+0435, U+04D8->U+04D9, U+04DA->U+04D9, U+04DB->U+04D9, U+04D9, U+04DC->U+0436, U+04DD->U+0436, U+04DE->U+0437, U+04DF->U+0437, U+04E0->U+04E1, U+04E1, U+04E2->U+0438, U+04E3->U+0438, U+04E4->U+0438, U+04E5->U+0438, U+04E6->U+043E, U+04E7->U+043E, U+04E8->U+043E, U+04E9->U+043E, U+04EA->U+043E, U+04EB->U+043E, U+04EC->U+044D, U+04ED->U+044D, U+04EE->U+0443, U+04EF->U+0443, U+04F0->U+0443, U+04F1->U+0443, U+04F2->U+0443, U+04F3->U+0443, U+04F4->U+0447, U+04F5->U+0447, U+04F6->U+0433, U+04F7->U+0433, U+04F8->U+044B, U+04F9->U+044B, U+04FA->U+0433, U+04FB->U+0433, U+04FC->U+0445, U+04FD->U+0445, U+04FE->U+0445, U+04FF->U+0445, U+0410..U+0418->U+0430..U+0438, U+0419->U+0438, U+0430..U+0438, U+041A..U+042F->U+043A..U+044F, U+043A..U+044F +#Czech +U+0e1->a, U+0c1->a, U+10d->c, U+10c->c, U+10f->d, U+10e->d, U+0e9->e, U+0c9->e, U+11b->e, U+11a->e, U+0ed->i, U+0cd->i, U+148->n, U+147->n, U+0f3->o, U+0d3->o, U+159->r, U+158->r, U+161->s, U+160->s, U+165->t, U+164->t, U+0fa->u, U+0da->u, U+16f->u, U+16e->u, U+0fd->y, U+0dd->y, U+17e->z, U+17d->z, +#Devanagari +U+0929->U+0928, U+0931->U+0930, U+0934->U+0933, U+0958->U+0915, U+0959->U+0916, U+095A->U+0917, U+095B->U+091C, U+095C->U+0921, U+095D->U+0922, U+095E->U+092B, U+095F->U+092F, U+0904..U+0928, U+092A..U+0930, U+0932, U+0933, U+0935..U+0939, U+0960, U+0961, U+0966..U+096F, U+097B..U+097F +#German +U+C4->U+E4, U+D6->U+F6, U+DC->U+FC, U+DF, U+E4, U+F6, U+FC +#Georgian +U+10FC->U+10DC, U+10D0..U+10FA, U+10A0..U+10C5->U+2D00..U+2D25, U+2D00..U+2D25 +#Greek +U+0386->U+03B1, U+0388->U+03B5, U+0389->U+03B7, U+038A->U+03B9, U+038C->U+03BF, U+038E->U+03C5, U+038F->U+03C9, U+0390->U+03B9, U+03AA->U+03B9, U+03AB->U+03C5, U+03AC->U+03B1, U+03AD->U+03B5, U+03AE->U+03B7, U+03AF->U+03B9, U+03B0->U+03C5, U+03CA->U+03B9, U+03CB->U+03C5, U+03CC->U+03BF, U+03CD->U+03C5, U+03CE->U+03C9, U+03D0->U+03B2, U+03D1->U+03B8, U+03D2->U+03C5, U+03D3->U+03C5, U+03D4->U+03C5, U+03D5->U+03C6, U+03D6->U+03C0, U+03D8->U+03D9, U+03DA->U+03DB, U+03DC->U+03DD, U+03DE->U+03DF, U+03E0->U+03E1, U+03E2->U+03E3, U+03E4->U+03E5, U+03E6->U+03E7, U+03E8->U+03E9, U+03EA->U+03EB, U+03EC->U+03ED, U+03EE->U+03EF, U+03F0->U+03BA, U+03F1->U+03C1, U+03F2->U+03C3, U+03F4->U+03B8, U+03F5->U+03B5, U+03F6->U+03B5, U+03F7->U+03F8, U+03F9->U+03C3, U+03FA->U+03FB, U+1F00->U+03B1, U+1F01->U+03B1, U+1F02->U+03B1, U+1F03->U+03B1, U+1F04->U+03B1, U+1F05->U+03B1, U+1F06->U+03B1, U+1F07->U+03B1, U+1F08->U+03B1, U+1F09->U+03B1, U+1F0A->U+03B1, U+1F0B->U+03B1, U+1F0C->U+03B1, U+1F0D->U+03B1, U+1F0E->U+03B1, U+1F0F->U+03B1, U+1F10->U+03B5, U+1F11->U+03B5, U+1F12->U+03B5, U+1F13->U+03B5, U+1F14->U+03B5, U+1F15->U+03B5, U+1F18->U+03B5, U+1F19->U+03B5, U+1F1A->U+03B5, U+1F1B->U+03B5, U+1F1C->U+03B5, U+1F1D->U+03B5, U+1F20->U+03B7, U+1F21->U+03B7, U+1F22->U+03B7, U+1F23->U+03B7, U+1F24->U+03B7, U+1F25->U+03B7, U+1F26->U+03B7, U+1F27->U+03B7, U+1F28->U+03B7, U+1F29->U+03B7, U+1F2A->U+03B7, U+1F2B->U+03B7, U+1F2C->U+03B7, U+1F2D->U+03B7, U+1F2E->U+03B7, U+1F2F->U+03B7, U+1F30->U+03B9, U+1F31->U+03B9, U+1F32->U+03B9, U+1F33->U+03B9, U+1F34->U+03B9, U+1F35->U+03B9, U+1F36->U+03B9, U+1F37->U+03B9, U+1F38->U+03B9, U+1F39->U+03B9, U+1F3A->U+03B9, U+1F3B->U+03B9, U+1F3C->U+03B9, U+1F3D->U+03B9, U+1F3E->U+03B9, U+1F3F->U+03B9, U+1F40->U+03BF, U+1F41->U+03BF, U+1F42->U+03BF, U+1F43->U+03BF, U+1F44->U+03BF, U+1F45->U+03BF, U+1F48->U+03BF, U+1F49->U+03BF, U+1F4A->U+03BF, U+1F4B->U+03BF, U+1F4C->U+03BF, U+1F4D->U+03BF, U+1F50->U+03C5, U+1F51->U+03C5, U+1F52->U+03C5, U+1F53->U+03C5, U+1F54->U+03C5, U+1F55->U+03C5, U+1F56->U+03C5, U+1F57->U+03C5, U+1F59->U+03C5, U+1F5B->U+03C5, U+1F5D->U+03C5, U+1F5F->U+03C5, U+1F60->U+03C9, U+1F61->U+03C9, U+1F62->U+03C9, U+1F63->U+03C9, U+1F64->U+03C9, U+1F65->U+03C9, U+1F66->U+03C9, U+1F67->U+03C9, U+1F68->U+03C9, U+1F69->U+03C9, U+1F6A->U+03C9, U+1F6B->U+03C9, U+1F6C->U+03C9, U+1F6D->U+03C9, U+1F6E->U+03C9, U+1F6F->U+03C9, U+1F70->U+03B1, U+1F71->U+03B1, U+1F72->U+03B5, U+1F73->U+03B5, U+1F74->U+03B7, U+1F75->U+03B7, U+1F76->U+03B9, U+1F77->U+03B9, U+1F78->U+03BF, U+1F79->U+03BF, U+1F7A->U+03C5, U+1F7B->U+03C5, U+1F7C->U+03C9, U+1F7D->U+03C9, U+1F80->U+03B1, U+1F81->U+03B1, U+1F82->U+03B1, U+1F83->U+03B1, U+1F84->U+03B1, U+1F85->U+03B1, U+1F86->U+03B1, U+1F87->U+03B1, U+1F88->U+03B1, U+1F89->U+03B1, U+1F8A->U+03B1, U+1F8B->U+03B1, U+1F8C->U+03B1, U+1F8D->U+03B1, U+1F8E->U+03B1, U+1F8F->U+03B1, U+1F90->U+03B7, U+1F91->U+03B7, U+1F92->U+03B7, U+1F93->U+03B7, U+1F94->U+03B7, U+1F95->U+03B7, U+1F96->U+03B7, U+1F97->U+03B7, U+1F98->U+03B7, U+1F99->U+03B7, U+1F9A->U+03B7, U+1F9B->U+03B7, U+1F9C->U+03B7, U+1F9D->U+03B7, U+1F9E->U+03B7, U+1F9F->U+03B7, U+1FA0->U+03C9, U+1FA1->U+03C9, U+1FA2->U+03C9, U+1FA3->U+03C9, U+1FA4->U+03C9, U+1FA5->U+03C9, U+1FA6->U+03C9, U+1FA7->U+03C9, U+1FA8->U+03C9, U+1FA9->U+03C9, U+1FAA->U+03C9, U+1FAB->U+03C9, U+1FAC->U+03C9, U+1FAD->U+03C9, U+1FAE->U+03C9, U+1FAF->U+03C9, U+1FB0->U+03B1, U+1FB1->U+03B1, U+1FB2->U+03B1, U+1FB3->U+03B1, U+1FB4->U+03B1, U+1FB6->U+03B1, U+1FB7->U+03B1, U+1FB8->U+03B1, U+1FB9->U+03B1, U+1FBA->U+03B1, U+1FBB->U+03B1, U+1FBC->U+03B1, U+1FC2->U+03B7, U+1FC3->U+03B7, U+1FC4->U+03B7, U+1FC6->U+03B7, U+1FC7->U+03B7, U+1FC8->U+03B5, U+1FC9->U+03B5, U+1FCA->U+03B7, U+1FCB->U+03B7, U+1FCC->U+03B7, U+1FD0->U+03B9, U+1FD1->U+03B9, U+1FD2->U+03B9, U+1FD3->U+03B9, U+1FD6->U+03B9, U+1FD7->U+03B9, U+1FD8->U+03B9, U+1FD9->U+03B9, U+1FDA->U+03B9, U+1FDB->U+03B9, U+1FE0->U+03C5, U+1FE1->U+03C5, U+1FE2->U+03C5, U+1FE3->U+03C5, U+1FE4->U+03C1, U+1FE5->U+03C1, U+1FE6->U+03C5, U+1FE7->U+03C5, U+1FE8->U+03C5, U+1FE9->U+03C5, U+1FEA->U+03C5, U+1FEB->U+03C5, U+1FEC->U+03C1, U+1FF2->U+03C9, U+1FF3->U+03C9, U+1FF4->U+03C9, U+1FF6->U+03C9, U+1FF7->U+03C9, U+1FF8->U+03BF, U+1FF9->U+03BF, U+1FFA->U+03C9, U+1FFB->U+03C9, U+1FFC->U+03C9, U+0391..U+03A1->U+03B1..U+03C1, U+03B1..U+03C1, U+03A3..U+03A9->U+03C3..U+03C9, U+03C3..U+03C9, U+03C2, U+03D9, U+03DB, U+03DD, U+03DF, U+03E1, U+03E3, U+03E5, U+03E7, U+03E9, U+03EB, U+03ED, U+03EF, U+03F3, U+03F8, U+03FB +#Gujarati +U+0A85..U+0A8C, U+0A8F, U+0A90, U+0A93..U+0AB0, U+0AB2, U+0AB3, U+0AB5..U+0AB9, U+0AE0, U+0AE1, U+0AE6..U+0AEF +#Gurmukhi +U+0A33->U+0A32, U+0A36->U+0A38, U+0A59->U+0A16, U+0A5A->U+0A17, U+0A5B->U+0A1C, U+0A5E->U+0A2B, U+0A05..U+0A0A, U+0A0F, U+0A10, U+0A13..U+0A28, U+0A2A..U+0A30, U+0A32, U+0A35, U+0A38, U+0A39, U+0A5C, U+0A66..U+0A6F +#Hebrew* +U+FB1D->U+05D9, U+FB1F->U+05F2, U+FB20->U+05E2, U+FB21->U+05D0, U+FB22->U+05D3, U+FB23->U+05D4, U+FB24->U+05DB, U+FB25->U+05DC, U+FB26->U+05DD, U+FB27->U+05E8, U+FB28->U+05EA, U+FB2A->U+05E9, U+FB2B->U+05E9, U+FB2C->U+05E9, U+FB2D->U+05E9, U+FB2E->U+05D0, U+FB2F->U+05D0, U+FB30->U+05D0, U+FB31->U+05D1, U+FB32->U+05D2, U+FB33->U+05D3, U+FB34->U+05D4, U+FB35->U+05D5, U+FB36->U+05D6, U+FB38->U+05D8, U+FB39->U+05D9, U+FB3A->U+05DA, U+FB3B->U+05DB, U+FB3C->U+05DC, U+FB3E->U+05DE, U+FB40->U+05E0, U+FB41->U+05E1, U+FB43->U+05E3, U+FB44->U+05E4, U+FB46->U+05E6, U+FB47->U+05E7, U+FB48->U+05E8, U+FB49->U+05E9, U+FB4A->U+05EA, U+FB4B->U+05D5, U+FB4C->U+05D1, U+FB4D->U+05DB, U+FB4E->U+05E4, U+FB4F->U+05D0, U+05D0..U+05F2 +#Kannada +U+0C85..U+0C8C, U+0C8E..U+0C90, U+0C92..U+0CA8, U+0CAA..U+0CB3, U+0CB5..U+0CB9, U+0CE0, U+0CE1, U+0CE6..U+0CEF +#Limbu +U+1900..U+191C, U+1930..U+1938, U+1946..U+194F +#Malayalam +U+0D05..U+0D0C, U+0D0E..U+0D10, U+0D12..U+0D28, U+0D2A..U+0D39, U+0D60, U+0D61, U+0D66..U+0D6F +#Swedish +0..9, A..Z->a..z, _, -, a..z, U+D6->U+F6, U+C4->U+E4, U+C5->U+E5, U+F6, U+E4, U+E5 +#Tamil +U+0B94->U+0B92, U+0B85..U+0B8A, U+0B8E..U+0B90, U+0B92, U+0B93, U+0B95, U+0B99, U+0B9A, U+0B9C, U+0B9E, U+0B9F, U+0BA3, U+0BA4, U+0BA8..U+0BAA, U+0BAE..U+0BB9, U+0BE6..U+0BEF +#Thai +U+0E01..U+0E30, U+0E32, U+0E33, U+0E40..U+0E46, U+0E50..U+0E5B +#Polish +#These maps contain correct Polish case folding. +0..9, A..Z->a..z, a..z, U+0143->U+0144, U+0104->U+0105, U+0106->U+0107, U+0118->U+0119, U+0141->U+0142, U+00D3->U+00F3, U+015A->U+015B, U+0179->U+017A, U+017B->U+017C, U+0105, U+0107, U+0119, U+0142, U+00F3, U+015B, U+017A, U+017C, U+0144 +#Slovak +U+0e1->a, U+0c1->a, U+0e4->a, U+0c4->a, U+10d->c, U+10c->c, U+10f->d, U+10e->d, U+0e9->e, U+0c9->e, U+0ed->i, U+0cd->i, U+13e->l, U+13d->l, U+13a->l, U+139->l, U+148->n, U+147->n, U+0f3->o, U+0d3->o, U+0f4->o, U+0d4->o, U+155->r, U+154->r, U+161->s, U+160->s, U+165->t, U+164->t, U+0fa->u, U+0da->u, U+0fd->y, U+0dd->y, U+17e->z, U+17d->z +#Swedish +U+C5->U+E5, U+E5, U+C4->U+E4, U+E4, U+D6->U+F6, U+F6 diff --git a/coreseek/mmseg-3.2.14/src/.deps/SegmentPkg.Plo b/coreseek/mmseg-3.2.14/src/.deps/SegmentPkg.Plo new file mode 100644 index 0000000..d7f08fd --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/SegmentPkg.Plo @@ -0,0 +1,485 @@ +SegmentPkg.lo: css/SegmentPkg.cpp csr_typedefs.h css/SegmentPkg.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc ../src/utils/Singleton.h \ + /usr/include/stdlib.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h css/tolowercase.h \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/c++/4.6/stdexcept /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \ + /usr/include/c++/4.6/cctype /usr/include/ctype.h \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/basic_string.tcc css/Segmenter.h \ + /usr/include/c++/4.6/ext/hash_map \ + /usr/include/c++/4.6/backward/backward_warning.h \ + /usr/include/c++/4.6/backward/hashtable.h /usr/include/c++/4.6/iterator \ + /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/bits/locale_classes.h \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc \ + /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/stream_iterator.h \ + /usr/include/c++/4.6/algorithm /usr/include/c++/4.6/utility \ + /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h \ + /usr/include/c++/4.6/backward/hash_fun.h css/UnigramDict.h \ + ../src/utils/darts.h /usr/include/c++/4.6/cstring /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/c++/4.6/cstdio \ + css/SynonymsDict.h /usr/include/c++/4.6/map \ + /usr/include/c++/4.6/bits/stl_tree.h /usr/include/c++/4.6/bits/stl_map.h \ + /usr/include/c++/4.6/bits/stl_multimap.h ../src/utils/csr_mmap.h \ + ../src/utils/freelist.h css/mmthunk.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/c++/4.6/fstream /usr/include/c++/4.6/bits/codecvt.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + css/UnigramCorpusReader.h css/ICorpusReader.h css/UnigramRecord.h \ + ../src/utils/csr.h ../src/utils/Utf8_16.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h css/ThesaurusDict.h \ + ../src/utils/csr_assert.h + +csr_typedefs.h: + +css/SegmentPkg.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +../src/utils/Singleton.h: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +css/tolowercase.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/c++/4.6/stdexcept: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +css/Segmenter.h: + +/usr/include/c++/4.6/ext/hash_map: + +/usr/include/c++/4.6/backward/backward_warning.h: + +/usr/include/c++/4.6/backward/hashtable.h: + +/usr/include/c++/4.6/iterator: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/stream_iterator.h: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/c++/4.6/backward/hash_fun.h: + +css/UnigramDict.h: + +../src/utils/darts.h: + +/usr/include/c++/4.6/cstring: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/c++/4.6/cstdio: + +css/SynonymsDict.h: + +/usr/include/c++/4.6/map: + +/usr/include/c++/4.6/bits/stl_tree.h: + +/usr/include/c++/4.6/bits/stl_map.h: + +/usr/include/c++/4.6/bits/stl_multimap.h: + +../src/utils/csr_mmap.h: + +../src/utils/freelist.h: + +css/mmthunk.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +css/UnigramCorpusReader.h: + +css/ICorpusReader.h: + +css/UnigramRecord.h: + +../src/utils/csr.h: + +../src/utils/Utf8_16.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +css/ThesaurusDict.h: + +../src/utils/csr_assert.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/SegmenterManager.Plo b/coreseek/mmseg-3.2.14/src/.deps/SegmenterManager.Plo new file mode 100644 index 0000000..739ebaf --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/SegmenterManager.Plo @@ -0,0 +1,486 @@ +SegmenterManager.lo: css/SegmenterManager.cpp css/Segmenter.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/ext/hash_map \ + /usr/include/c++/4.6/backward/backward_warning.h \ + /usr/include/c++/4.6/backward/hashtable.h /usr/include/c++/4.6/iterator \ + /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/iosfwd /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc \ + /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/stream_iterator.h \ + /usr/include/c++/4.6/algorithm /usr/include/c++/4.6/utility \ + /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h \ + /usr/include/c++/4.6/backward/hash_fun.h css/SegmentPkg.h \ + ../src/utils/Singleton.h csr_typedefs.h css/tolowercase.h \ + css/UnigramDict.h ../src/utils/darts.h /usr/include/c++/4.6/cstring \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/c++/4.6/cstdio /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h css/SynonymsDict.h \ + /usr/include/c++/4.6/map /usr/include/c++/4.6/bits/stl_tree.h \ + /usr/include/c++/4.6/bits/stl_map.h \ + /usr/include/c++/4.6/bits/stl_multimap.h ../src/utils/csr_mmap.h \ + ../src/utils/freelist.h css/mmthunk.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/c++/4.6/fstream /usr/include/c++/4.6/bits/codecvt.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + css/UnigramCorpusReader.h css/ICorpusReader.h css/UnigramRecord.h \ + ../src/utils/csr.h ../src/utils/Utf8_16.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h css/ThesaurusDict.h \ + css/SegmenterManager.h iniparser/iniparser.h iniparser/dictionary.h + +css/Segmenter.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/ext/hash_map: + +/usr/include/c++/4.6/backward/backward_warning.h: + +/usr/include/c++/4.6/backward/hashtable.h: + +/usr/include/c++/4.6/iterator: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/stream_iterator.h: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/c++/4.6/backward/hash_fun.h: + +css/SegmentPkg.h: + +../src/utils/Singleton.h: + +csr_typedefs.h: + +css/tolowercase.h: + +css/UnigramDict.h: + +../src/utils/darts.h: + +/usr/include/c++/4.6/cstring: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/c++/4.6/cstdio: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +css/SynonymsDict.h: + +/usr/include/c++/4.6/map: + +/usr/include/c++/4.6/bits/stl_tree.h: + +/usr/include/c++/4.6/bits/stl_map.h: + +/usr/include/c++/4.6/bits/stl_multimap.h: + +../src/utils/csr_mmap.h: + +../src/utils/freelist.h: + +css/mmthunk.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +css/UnigramCorpusReader.h: + +css/ICorpusReader.h: + +css/UnigramRecord.h: + +../src/utils/csr.h: + +../src/utils/Utf8_16.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +css/ThesaurusDict.h: + +css/SegmenterManager.h: + +iniparser/iniparser.h: + +iniparser/dictionary.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/StringTokenizer.Plo b/coreseek/mmseg-3.2.14/src/.deps/StringTokenizer.Plo new file mode 100644 index 0000000..4e73d1f --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/StringTokenizer.Plo @@ -0,0 +1,323 @@ +StringTokenizer.lo: utils/StringTokenizer.cpp utils/StringTokenizer.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/iostream \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/iosfwd /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/ctype.h /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc \ + /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \ + /usr/include/c++/4.6/bits/istream.tcc + +utils/StringTokenizer.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/iostream: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/bits/istream.tcc: diff --git a/coreseek/mmseg-3.2.14/src/.deps/SynonymsDict.Plo b/coreseek/mmseg-3.2.14/src/.deps/SynonymsDict.Plo new file mode 100644 index 0000000..2cfd2ab --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/SynonymsDict.Plo @@ -0,0 +1,422 @@ +SynonymsDict.lo: css/SynonymsDict.cpp /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/stl_algo.h \ + /usr/include/c++/4.6/cstdlib /usr/include/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h \ + /usr/include/c++/4.6/bits/stl_construct.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/fstream \ + /usr/include/c++/4.6/istream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/iosfwd /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/ctype.h /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc /usr/include/c++/4.6/ostream \ + /usr/include/c++/4.6/bits/ostream.tcc \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/codecvt.h /usr/include/c++/4.6/cstdio \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + /usr/include/c++/4.6/map /usr/include/c++/4.6/bits/stl_tree.h \ + /usr/include/c++/4.6/bits/stl_map.h \ + /usr/include/c++/4.6/bits/stl_multimap.h css/UnigramCorpusReader.h \ + /usr/include/c++/4.6/vector \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/vector.tcc css/ICorpusReader.h \ + css/UnigramRecord.h ../src/utils/csr.h csr_typedefs.h \ + ../src/utils/Utf8_16.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h css/SynonymsDict.h ../src/utils/darts.h \ + /usr/include/c++/4.6/cstring /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h ../src/utils/csr_mmap.h + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/cstdio: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +/usr/include/c++/4.6/map: + +/usr/include/c++/4.6/bits/stl_tree.h: + +/usr/include/c++/4.6/bits/stl_map.h: + +/usr/include/c++/4.6/bits/stl_multimap.h: + +css/UnigramCorpusReader.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +css/ICorpusReader.h: + +css/UnigramRecord.h: + +../src/utils/csr.h: + +csr_typedefs.h: + +../src/utils/Utf8_16.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +css/SynonymsDict.h: + +../src/utils/darts.h: + +/usr/include/c++/4.6/cstring: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +../src/utils/csr_mmap.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/ThesaurusDict.Plo b/coreseek/mmseg-3.2.14/src/.deps/ThesaurusDict.Plo new file mode 100644 index 0000000..9d246e2 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/ThesaurusDict.Plo @@ -0,0 +1,412 @@ +ThesaurusDict.lo: css/ThesaurusDict.cpp /usr/include/c++/4.6/algorithm \ + /usr/include/c++/4.6/utility \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/stl_algo.h \ + /usr/include/c++/4.6/cstdlib /usr/include/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h \ + /usr/include/c++/4.6/bits/stl_construct.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/fstream \ + /usr/include/c++/4.6/istream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/iosfwd /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/ctype.h /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc /usr/include/c++/4.6/ostream \ + /usr/include/c++/4.6/bits/ostream.tcc \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/codecvt.h /usr/include/c++/4.6/cstdio \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + css/UnigramCorpusReader.h /usr/include/c++/4.6/vector \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/vector.tcc css/ICorpusReader.h \ + css/UnigramRecord.h ../src/utils/csr.h csr_typedefs.h \ + ../src/utils/Utf8_16.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h css/ThesaurusDict.h \ + /usr/include/c++/4.6/cstring /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h ../src/utils/darts.h \ + ../src/utils/csr_mmap.h + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/cstdio: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +css/UnigramCorpusReader.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +css/ICorpusReader.h: + +css/UnigramRecord.h: + +../src/utils/csr.h: + +csr_typedefs.h: + +../src/utils/Utf8_16.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +css/ThesaurusDict.h: + +/usr/include/c++/4.6/cstring: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +../src/utils/darts.h: + +../src/utils/csr_mmap.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/UnigramCorpusReader.Plo b/coreseek/mmseg-3.2.14/src/.deps/UnigramCorpusReader.Plo new file mode 100644 index 0000000..56a7d6d --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/UnigramCorpusReader.Plo @@ -0,0 +1,407 @@ +UnigramCorpusReader.lo: css/UnigramCorpusReader.cpp \ + /usr/include/c++/4.6/algorithm /usr/include/c++/4.6/utility \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/stl_algo.h \ + /usr/include/c++/4.6/cstdlib /usr/include/stdlib.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h \ + /usr/include/c++/4.6/bits/stl_construct.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/fstream \ + /usr/include/c++/4.6/istream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/iosfwd /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/ctype.h /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc /usr/include/c++/4.6/ostream \ + /usr/include/c++/4.6/bits/ostream.tcc \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/codecvt.h /usr/include/c++/4.6/cstdio \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + css/UnigramCorpusReader.h /usr/include/c++/4.6/vector \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/vector.tcc css/ICorpusReader.h \ + css/UnigramRecord.h ../src/utils/csr.h csr_typedefs.h \ + ../src/utils/Utf8_16.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h ../src/utils/csr_utils.h \ + ../src/utils/Utf8_16.h + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/stdlib.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/cstdio: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +css/UnigramCorpusReader.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +css/ICorpusReader.h: + +css/UnigramRecord.h: + +../src/utils/csr.h: + +csr_typedefs.h: + +../src/utils/Utf8_16.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +../src/utils/csr_utils.h: + +../src/utils/Utf8_16.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/UnigramDict.Plo b/coreseek/mmseg-3.2.14/src/.deps/UnigramDict.Plo new file mode 100644 index 0000000..9bbe496 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/UnigramDict.Plo @@ -0,0 +1,371 @@ +UnigramDict.lo: css/UnigramDict.cpp css/UnigramCorpusReader.h \ + /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \ + /usr/include/c++/4.6/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \ + /usr/include/c++/4.6/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/basic_string.tcc /usr/include/c++/4.6/vector \ + /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/vector.tcc css/ICorpusReader.h \ + css/UnigramRecord.h ../src/utils/csr.h csr_typedefs.h \ + ../src/utils/Utf8_16.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/iostream /usr/include/c++/4.6/ostream \ + /usr/include/c++/4.6/ios /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/bits/locale_classes.h \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc \ + /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \ + /usr/include/c++/4.6/bits/istream.tcc css/UnigramDict.h \ + ../src/utils/darts.h /usr/include/c++/4.6/cstring /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/c++/4.6/cstdio + +css/UnigramCorpusReader.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +css/ICorpusReader.h: + +css/UnigramRecord.h: + +../src/utils/csr.h: + +csr_typedefs.h: + +../src/utils/Utf8_16.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/iostream: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/bits/istream.tcc: + +css/UnigramDict.h: + +../src/utils/darts.h: + +/usr/include/c++/4.6/cstring: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/c++/4.6/cstdio: diff --git a/coreseek/mmseg-3.2.14/src/.deps/UnigramRecord.Plo b/coreseek/mmseg-3.2.14/src/.deps/UnigramRecord.Plo new file mode 100644 index 0000000..4b69c01 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/UnigramRecord.Plo @@ -0,0 +1,335 @@ +UnigramRecord.lo: css/UnigramRecord.cpp css/UnigramRecord.h \ + /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/postypes.h \ + /usr/include/c++/4.6/cwchar /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \ + /usr/include/c++/4.6/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/basic_string.tcc ../src/utils/csr.h \ + csr_typedefs.h ../src/utils/Utf8_16.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/iostream /usr/include/c++/4.6/ostream \ + /usr/include/c++/4.6/ios /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/bits/locale_classes.h \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc \ + /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \ + /usr/include/c++/4.6/bits/istream.tcc + +css/UnigramRecord.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +../src/utils/csr.h: + +csr_typedefs.h: + +../src/utils/Utf8_16.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/iostream: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/bits/istream.tcc: diff --git a/coreseek/mmseg-3.2.14/src/.deps/Utf8_16.Plo b/coreseek/mmseg-3.2.14/src/.deps/Utf8_16.Plo new file mode 100644 index 0000000..9fae71b --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/Utf8_16.Plo @@ -0,0 +1,60 @@ +Utf8_16.lo: utils/Utf8_16.cpp /usr/include/stdio.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h utils/csr_assert.h \ + utils/Utf8_16.h /usr/include/assert.h csr_typedefs.h + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +utils/csr_assert.h: + +utils/Utf8_16.h: + +/usr/include/assert.h: + +csr_typedefs.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/assert.Plo b/coreseek/mmseg-3.2.14/src/.deps/assert.Plo new file mode 100644 index 0000000..afac4f7 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/assert.Plo @@ -0,0 +1,113 @@ +assert.lo: utils/assert.c /usr/include/stdlib.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h utils/csr_assert.h + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +utils/csr_assert.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/bsd_getopt.Plo b/coreseek/mmseg-3.2.14/src/.deps/bsd_getopt.Plo new file mode 100644 index 0000000..1ec8a57 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/bsd_getopt.Plo @@ -0,0 +1,22 @@ +bsd_getopt.lo: utils/bsd_getopt.c utils/bsd_getopt.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h /usr/include/getopt.h + +utils/bsd_getopt.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/getopt.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/csr_mmap.Plo b/coreseek/mmseg-3.2.14/src/.deps/csr_mmap.Plo new file mode 100644 index 0000000..489bc55 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/csr_mmap.Plo @@ -0,0 +1,145 @@ +csr_mmap.lo: utils/csr_mmap.c utils/os.h ../config.h \ + /usr/include/unistd.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/x86_64-linux-gnu/sys/stat.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/stat.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h utils/csr_mmap.h \ + csr_typedefs.h utils/csr_utils.h /usr/include/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl.h \ + /usr/include/x86_64-linux-gnu/bits/fcntl2.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/x86_64-linux-gnu/sys/timeb.h + +utils/os.h: + +../config.h: + +/usr/include/unistd.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/x86_64-linux-gnu/sys/stat.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/stat.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +utils/csr_mmap.h: + +csr_typedefs.h: + +utils/csr_utils.h: + +/usr/include/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl.h: + +/usr/include/x86_64-linux-gnu/bits/fcntl2.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/x86_64-linux-gnu/sys/timeb.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/csr_utils.Plo b/coreseek/mmseg-3.2.14/src/.deps/csr_utils.Plo new file mode 100644 index 0000000..17804d7 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/csr_utils.Plo @@ -0,0 +1,118 @@ +csr_utils.lo: utils/csr_utils.c /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h utils/csr_utils.h \ + csr_typedefs.h /usr/include/x86_64-linux-gnu/sys/timeb.h + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +utils/csr_utils.h: + +csr_typedefs.h: + +/usr/include/x86_64-linux-gnu/sys/timeb.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/dictionary.Plo b/coreseek/mmseg-3.2.14/src/.deps/dictionary.Plo new file mode 100644 index 0000000..7dca666 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/dictionary.Plo @@ -0,0 +1,114 @@ +dictionary.lo: iniparser/dictionary.c iniparser/dictionary.h \ + /usr/include/stdio.h /usr/include/features.h \ + /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h + +iniparser/dictionary.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/iniparser.Plo b/coreseek/mmseg-3.2.14/src/.deps/iniparser.Plo new file mode 100644 index 0000000..0ccc6a9 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/iniparser.Plo @@ -0,0 +1,117 @@ +iniparser.lo: iniparser/iniparser.c /usr/include/ctype.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string.h \ + /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/stdlib.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h iniparser/iniparser.h \ + /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h iniparser/dictionary.h + +/usr/include/ctype.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string.h: + +/usr/include/x86_64-linux-gnu/bits/string2.h: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +iniparser/iniparser.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +iniparser/dictionary.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/mmseg_main.Po b/coreseek/mmseg-3.2.14/src/.deps/mmseg_main.Po new file mode 100644 index 0000000..23507cf --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/mmseg_main.Po @@ -0,0 +1,502 @@ +mmseg_main.o: mmseg_main.cpp /usr/include/c++/4.6/fstream \ + /usr/include/c++/4.6/istream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/iosfwd \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc /usr/include/c++/4.6/ostream \ + /usr/include/c++/4.6/bits/ostream.tcc \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/codecvt.h /usr/include/c++/4.6/cstdio \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + /usr/include/c++/4.6/algorithm /usr/include/c++/4.6/utility \ + /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h \ + /usr/include/c++/4.6/bits/stl_construct.h /usr/include/c++/4.6/map \ + /usr/include/c++/4.6/bits/stl_tree.h /usr/include/c++/4.6/bits/stl_map.h \ + /usr/include/c++/4.6/bits/stl_multimap.h ../src/utils/bsd_getopt.h \ + ../src/css/UnigramCorpusReader.h /usr/include/c++/4.6/vector \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/vector.tcc ../src/css/ICorpusReader.h \ + ../src/css/UnigramRecord.h ../src/utils/csr.h csr_typedefs.h \ + ../src/utils/Utf8_16.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h ../src/css/UnigramDict.h \ + ../src/utils/darts.h /usr/include/c++/4.6/cstring /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h ../src/css/SynonymsDict.h \ + ../src/utils/csr_mmap.h ../src/css/ThesaurusDict.h \ + ../src/css/SegmenterManager.h ../src/utils/freelist.h \ + ../src/css/UnigramDict.h ../src/css/SynonymsDict.h \ + ../src/css/ThesaurusDict.h ../src/css/Segmenter.h \ + /usr/include/c++/4.6/ext/hash_map \ + /usr/include/c++/4.6/backward/backward_warning.h \ + /usr/include/c++/4.6/backward/hashtable.h /usr/include/c++/4.6/iterator \ + /usr/include/c++/4.6/bits/stream_iterator.h \ + /usr/include/c++/4.6/backward/hash_fun.h ../src/css/SegmentPkg.h \ + ../src/utils/Singleton.h ../src/css/tolowercase.h ../src/css/mmthunk.h \ + /usr/include/math.h /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + ../src/css/UnigramCorpusReader.h ../src/css/Segmenter.h \ + ../src/utils/csr_utils.h + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/cstdio: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/map: + +/usr/include/c++/4.6/bits/stl_tree.h: + +/usr/include/c++/4.6/bits/stl_map.h: + +/usr/include/c++/4.6/bits/stl_multimap.h: + +../src/utils/bsd_getopt.h: + +../src/css/UnigramCorpusReader.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +../src/css/ICorpusReader.h: + +../src/css/UnigramRecord.h: + +../src/utils/csr.h: + +csr_typedefs.h: + +../src/utils/Utf8_16.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +../src/css/UnigramDict.h: + +../src/utils/darts.h: + +/usr/include/c++/4.6/cstring: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +../src/css/SynonymsDict.h: + +../src/utils/csr_mmap.h: + +../src/css/ThesaurusDict.h: + +../src/css/SegmenterManager.h: + +../src/utils/freelist.h: + +../src/css/UnigramDict.h: + +../src/css/SynonymsDict.h: + +../src/css/ThesaurusDict.h: + +../src/css/Segmenter.h: + +/usr/include/c++/4.6/ext/hash_map: + +/usr/include/c++/4.6/backward/backward_warning.h: + +/usr/include/c++/4.6/backward/hashtable.h: + +/usr/include/c++/4.6/iterator: + +/usr/include/c++/4.6/bits/stream_iterator.h: + +/usr/include/c++/4.6/backward/hash_fun.h: + +../src/css/SegmentPkg.h: + +../src/utils/Singleton.h: + +../src/css/tolowercase.h: + +../src/css/mmthunk.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +../src/css/UnigramCorpusReader.h: + +../src/css/Segmenter.h: + +../src/utils/csr_utils.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/mmthunk.Plo b/coreseek/mmseg-3.2.14/src/.deps/mmthunk.Plo new file mode 100644 index 0000000..0bf5283 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/mmthunk.Plo @@ -0,0 +1,298 @@ +mmthunk.lo: css/mmthunk.cpp csr_typedefs.h css/mmthunk.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h css/UnigramDict.h \ + /usr/include/c++/4.6/string /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/iosfwd \ + /usr/include/c++/4.6/cctype /usr/include/ctype.h \ + /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/basic_string.tcc ../src/utils/darts.h \ + /usr/include/c++/4.6/cstring /usr/include/string.h \ + /usr/include/x86_64-linux-gnu/bits/string3.h /usr/include/c++/4.6/cstdio \ + /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h ../src/utils/freelist.h + +csr_typedefs.h: + +css/mmthunk.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +css/UnigramDict.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +../src/utils/darts.h: + +/usr/include/c++/4.6/cstring: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/c++/4.6/cstdio: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +../src/utils/freelist.h: diff --git a/coreseek/mmseg-3.2.14/src/.deps/segmenter.Plo b/coreseek/mmseg-3.2.14/src/.deps/segmenter.Plo new file mode 100644 index 0000000..a4d3e43 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.deps/segmenter.Plo @@ -0,0 +1,484 @@ +segmenter.lo: css/segmenter.cpp css/Segmenter.h \ + /usr/include/c++/4.6/vector /usr/include/c++/4.6/bits/stl_algobase.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h \ + /usr/include/features.h /usr/include/x86_64-linux-gnu/bits/predefs.h \ + /usr/include/x86_64-linux-gnu/sys/cdefs.h \ + /usr/include/x86_64-linux-gnu/bits/wordsize.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs.h \ + /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h \ + /usr/include/c++/4.6/bits/functexcept.h \ + /usr/include/c++/4.6/bits/exception_defines.h \ + /usr/include/c++/4.6/bits/cpp_type_traits.h \ + /usr/include/c++/4.6/ext/type_traits.h \ + /usr/include/c++/4.6/ext/numeric_traits.h \ + /usr/include/c++/4.6/bits/stl_pair.h /usr/include/c++/4.6/bits/move.h \ + /usr/include/c++/4.6/bits/concept_check.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.6/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.6/bits/stl_iterator.h \ + /usr/include/c++/4.6/debug/debug.h /usr/include/c++/4.6/bits/allocator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h \ + /usr/include/c++/4.6/ext/new_allocator.h /usr/include/c++/4.6/new \ + /usr/include/c++/4.6/exception /usr/include/c++/4.6/bits/stl_construct.h \ + /usr/include/c++/4.6/bits/stl_uninitialized.h \ + /usr/include/c++/4.6/bits/stl_vector.h \ + /usr/include/c++/4.6/initializer_list \ + /usr/include/c++/4.6/bits/stl_bvector.h \ + /usr/include/c++/4.6/bits/range_access.h \ + /usr/include/c++/4.6/bits/vector.tcc /usr/include/c++/4.6/ext/hash_map \ + /usr/include/c++/4.6/backward/backward_warning.h \ + /usr/include/c++/4.6/backward/hashtable.h /usr/include/c++/4.6/iterator \ + /usr/include/c++/4.6/ostream /usr/include/c++/4.6/ios \ + /usr/include/c++/4.6/iosfwd /usr/include/c++/4.6/bits/stringfwd.h \ + /usr/include/c++/4.6/bits/postypes.h /usr/include/c++/4.6/cwchar \ + /usr/include/wchar.h /usr/include/stdio.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h \ + /usr/include/x86_64-linux-gnu/bits/wchar.h \ + /usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h \ + /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/wchar2.h \ + /usr/include/c++/4.6/bits/char_traits.h \ + /usr/include/c++/4.6/bits/localefwd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h \ + /usr/include/c++/4.6/clocale /usr/include/locale.h \ + /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/4.6/cctype \ + /usr/include/ctype.h /usr/include/x86_64-linux-gnu/bits/types.h \ + /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/endian.h \ + /usr/include/x86_64-linux-gnu/bits/endian.h \ + /usr/include/x86_64-linux-gnu/bits/byteswap.h \ + /usr/include/c++/4.6/bits/ios_base.h \ + /usr/include/c++/4.6/ext/atomicity.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/time.h \ + /usr/include/x86_64-linux-gnu/bits/sched.h \ + /usr/include/x86_64-linux-gnu/bits/time.h \ + /usr/include/x86_64-linux-gnu/bits/timex.h \ + /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h \ + /usr/include/x86_64-linux-gnu/bits/setjmp.h /usr/include/unistd.h \ + /usr/include/x86_64-linux-gnu/bits/posix_opt.h \ + /usr/include/x86_64-linux-gnu/bits/environments.h \ + /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \ + /usr/include/x86_64-linux-gnu/bits/unistd.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h \ + /usr/include/c++/4.6/bits/locale_classes.h /usr/include/c++/4.6/string \ + /usr/include/c++/4.6/bits/ostream_insert.h \ + /usr/include/c++/4.6/bits/cxxabi_forced.h \ + /usr/include/c++/4.6/bits/stl_function.h \ + /usr/include/c++/4.6/backward/binders.h \ + /usr/include/c++/4.6/bits/basic_string.h \ + /usr/include/c++/4.6/bits/basic_string.tcc \ + /usr/include/c++/4.6/bits/locale_classes.tcc \ + /usr/include/c++/4.6/streambuf /usr/include/c++/4.6/bits/streambuf.tcc \ + /usr/include/c++/4.6/bits/basic_ios.h \ + /usr/include/c++/4.6/bits/locale_facets.h /usr/include/c++/4.6/cwctype \ + /usr/include/wctype.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h \ + /usr/include/c++/4.6/bits/streambuf_iterator.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h \ + /usr/include/c++/4.6/bits/locale_facets.tcc \ + /usr/include/c++/4.6/bits/basic_ios.tcc \ + /usr/include/c++/4.6/bits/ostream.tcc /usr/include/c++/4.6/istream \ + /usr/include/c++/4.6/bits/istream.tcc \ + /usr/include/c++/4.6/bits/stream_iterator.h \ + /usr/include/c++/4.6/algorithm /usr/include/c++/4.6/utility \ + /usr/include/c++/4.6/bits/stl_relops.h \ + /usr/include/c++/4.6/bits/stl_algo.h /usr/include/c++/4.6/cstdlib \ + /usr/include/stdlib.h /usr/include/x86_64-linux-gnu/bits/waitflags.h \ + /usr/include/x86_64-linux-gnu/bits/waitstatus.h \ + /usr/include/x86_64-linux-gnu/sys/types.h \ + /usr/include/x86_64-linux-gnu/sys/select.h \ + /usr/include/x86_64-linux-gnu/bits/select.h \ + /usr/include/x86_64-linux-gnu/bits/sigset.h \ + /usr/include/x86_64-linux-gnu/bits/select2.h \ + /usr/include/x86_64-linux-gnu/sys/sysmacros.h /usr/include/alloca.h \ + /usr/include/x86_64-linux-gnu/bits/stdlib.h \ + /usr/include/c++/4.6/bits/algorithmfwd.h \ + /usr/include/c++/4.6/bits/stl_heap.h \ + /usr/include/c++/4.6/bits/stl_tempbuf.h \ + /usr/include/c++/4.6/backward/hash_fun.h css/SegmentPkg.h \ + ../src/utils/Singleton.h csr_typedefs.h css/tolowercase.h \ + css/UnigramDict.h ../src/utils/darts.h /usr/include/c++/4.6/cstring \ + /usr/include/string.h /usr/include/x86_64-linux-gnu/bits/string3.h \ + /usr/include/c++/4.6/cstdio /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \ + /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \ + /usr/include/x86_64-linux-gnu/bits/stdio.h \ + /usr/include/x86_64-linux-gnu/bits/stdio2.h css/SynonymsDict.h \ + /usr/include/c++/4.6/map /usr/include/c++/4.6/bits/stl_tree.h \ + /usr/include/c++/4.6/bits/stl_map.h \ + /usr/include/c++/4.6/bits/stl_multimap.h ../src/utils/csr_mmap.h \ + ../src/utils/freelist.h css/mmthunk.h /usr/include/math.h \ + /usr/include/x86_64-linux-gnu/bits/huge_val.h \ + /usr/include/x86_64-linux-gnu/bits/huge_valf.h \ + /usr/include/x86_64-linux-gnu/bits/huge_vall.h \ + /usr/include/x86_64-linux-gnu/bits/inf.h \ + /usr/include/x86_64-linux-gnu/bits/nan.h \ + /usr/include/x86_64-linux-gnu/bits/mathdef.h \ + /usr/include/x86_64-linux-gnu/bits/mathcalls.h \ + /usr/include/x86_64-linux-gnu/bits/mathinline.h \ + /usr/include/c++/4.6/fstream /usr/include/c++/4.6/bits/codecvt.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h \ + /usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h \ + /usr/include/c++/4.6/bits/fstream.tcc /usr/include/c++/4.6/iostream \ + css/UnigramCorpusReader.h css/ICorpusReader.h css/UnigramRecord.h \ + ../src/utils/csr.h ../src/utils/Utf8_16.h /usr/include/assert.h \ + ../src/utils/StringTokenizer.h css/ThesaurusDict.h \ + ../src/utils/Utf8_16.h ../src/utils/csr_assert.h + +css/Segmenter.h: + +/usr/include/c++/4.6/vector: + +/usr/include/c++/4.6/bits/stl_algobase.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/x86_64-linux-gnu/bits/predefs.h: + +/usr/include/x86_64-linux-gnu/sys/cdefs.h: + +/usr/include/x86_64-linux-gnu/bits/wordsize.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs.h: + +/usr/include/x86_64-linux-gnu/gnu/stubs-64.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/cpu_defines.h: + +/usr/include/c++/4.6/bits/functexcept.h: + +/usr/include/c++/4.6/bits/exception_defines.h: + +/usr/include/c++/4.6/bits/cpp_type_traits.h: + +/usr/include/c++/4.6/ext/type_traits.h: + +/usr/include/c++/4.6/ext/numeric_traits.h: + +/usr/include/c++/4.6/bits/stl_pair.h: + +/usr/include/c++/4.6/bits/move.h: + +/usr/include/c++/4.6/bits/concept_check.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.6/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.6/bits/stl_iterator.h: + +/usr/include/c++/4.6/debug/debug.h: + +/usr/include/c++/4.6/bits/allocator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++allocator.h: + +/usr/include/c++/4.6/ext/new_allocator.h: + +/usr/include/c++/4.6/new: + +/usr/include/c++/4.6/exception: + +/usr/include/c++/4.6/bits/stl_construct.h: + +/usr/include/c++/4.6/bits/stl_uninitialized.h: + +/usr/include/c++/4.6/bits/stl_vector.h: + +/usr/include/c++/4.6/initializer_list: + +/usr/include/c++/4.6/bits/stl_bvector.h: + +/usr/include/c++/4.6/bits/range_access.h: + +/usr/include/c++/4.6/bits/vector.tcc: + +/usr/include/c++/4.6/ext/hash_map: + +/usr/include/c++/4.6/backward/backward_warning.h: + +/usr/include/c++/4.6/backward/hashtable.h: + +/usr/include/c++/4.6/iterator: + +/usr/include/c++/4.6/ostream: + +/usr/include/c++/4.6/ios: + +/usr/include/c++/4.6/iosfwd: + +/usr/include/c++/4.6/bits/stringfwd.h: + +/usr/include/c++/4.6/bits/postypes.h: + +/usr/include/c++/4.6/cwchar: + +/usr/include/wchar.h: + +/usr/include/stdio.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stdarg.h: + +/usr/include/x86_64-linux-gnu/bits/wchar.h: + +/usr/lib/gcc/x86_64-linux-gnu/4.6/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/x86_64-linux-gnu/bits/wchar2.h: + +/usr/include/c++/4.6/bits/char_traits.h: + +/usr/include/c++/4.6/bits/localefwd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++locale.h: + +/usr/include/c++/4.6/clocale: + +/usr/include/locale.h: + +/usr/include/x86_64-linux-gnu/bits/locale.h: + +/usr/include/c++/4.6/cctype: + +/usr/include/ctype.h: + +/usr/include/x86_64-linux-gnu/bits/types.h: + +/usr/include/x86_64-linux-gnu/bits/typesizes.h: + +/usr/include/endian.h: + +/usr/include/x86_64-linux-gnu/bits/endian.h: + +/usr/include/x86_64-linux-gnu/bits/byteswap.h: + +/usr/include/c++/4.6/bits/ios_base.h: + +/usr/include/c++/4.6/ext/atomicity.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/gthr-default.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/time.h: + +/usr/include/x86_64-linux-gnu/bits/sched.h: + +/usr/include/x86_64-linux-gnu/bits/time.h: + +/usr/include/x86_64-linux-gnu/bits/timex.h: + +/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h: + +/usr/include/x86_64-linux-gnu/bits/setjmp.h: + +/usr/include/unistd.h: + +/usr/include/x86_64-linux-gnu/bits/posix_opt.h: + +/usr/include/x86_64-linux-gnu/bits/environments.h: + +/usr/include/x86_64-linux-gnu/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/x86_64-linux-gnu/bits/unistd.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/atomic_word.h: + +/usr/include/c++/4.6/bits/locale_classes.h: + +/usr/include/c++/4.6/string: + +/usr/include/c++/4.6/bits/ostream_insert.h: + +/usr/include/c++/4.6/bits/cxxabi_forced.h: + +/usr/include/c++/4.6/bits/stl_function.h: + +/usr/include/c++/4.6/backward/binders.h: + +/usr/include/c++/4.6/bits/basic_string.h: + +/usr/include/c++/4.6/bits/basic_string.tcc: + +/usr/include/c++/4.6/bits/locale_classes.tcc: + +/usr/include/c++/4.6/streambuf: + +/usr/include/c++/4.6/bits/streambuf.tcc: + +/usr/include/c++/4.6/bits/basic_ios.h: + +/usr/include/c++/4.6/bits/locale_facets.h: + +/usr/include/c++/4.6/cwctype: + +/usr/include/wctype.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_base.h: + +/usr/include/c++/4.6/bits/streambuf_iterator.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/ctype_inline.h: + +/usr/include/c++/4.6/bits/locale_facets.tcc: + +/usr/include/c++/4.6/bits/basic_ios.tcc: + +/usr/include/c++/4.6/bits/ostream.tcc: + +/usr/include/c++/4.6/istream: + +/usr/include/c++/4.6/bits/istream.tcc: + +/usr/include/c++/4.6/bits/stream_iterator.h: + +/usr/include/c++/4.6/algorithm: + +/usr/include/c++/4.6/utility: + +/usr/include/c++/4.6/bits/stl_relops.h: + +/usr/include/c++/4.6/bits/stl_algo.h: + +/usr/include/c++/4.6/cstdlib: + +/usr/include/stdlib.h: + +/usr/include/x86_64-linux-gnu/bits/waitflags.h: + +/usr/include/x86_64-linux-gnu/bits/waitstatus.h: + +/usr/include/x86_64-linux-gnu/sys/types.h: + +/usr/include/x86_64-linux-gnu/sys/select.h: + +/usr/include/x86_64-linux-gnu/bits/select.h: + +/usr/include/x86_64-linux-gnu/bits/sigset.h: + +/usr/include/x86_64-linux-gnu/bits/select2.h: + +/usr/include/x86_64-linux-gnu/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/x86_64-linux-gnu/bits/stdlib.h: + +/usr/include/c++/4.6/bits/algorithmfwd.h: + +/usr/include/c++/4.6/bits/stl_heap.h: + +/usr/include/c++/4.6/bits/stl_tempbuf.h: + +/usr/include/c++/4.6/backward/hash_fun.h: + +css/SegmentPkg.h: + +../src/utils/Singleton.h: + +csr_typedefs.h: + +css/tolowercase.h: + +css/UnigramDict.h: + +../src/utils/darts.h: + +/usr/include/c++/4.6/cstring: + +/usr/include/string.h: + +/usr/include/x86_64-linux-gnu/bits/string3.h: + +/usr/include/c++/4.6/cstdio: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/x86_64-linux-gnu/bits/stdio_lim.h: + +/usr/include/x86_64-linux-gnu/bits/sys_errlist.h: + +/usr/include/x86_64-linux-gnu/bits/stdio.h: + +/usr/include/x86_64-linux-gnu/bits/stdio2.h: + +css/SynonymsDict.h: + +/usr/include/c++/4.6/map: + +/usr/include/c++/4.6/bits/stl_tree.h: + +/usr/include/c++/4.6/bits/stl_map.h: + +/usr/include/c++/4.6/bits/stl_multimap.h: + +../src/utils/csr_mmap.h: + +../src/utils/freelist.h: + +css/mmthunk.h: + +/usr/include/math.h: + +/usr/include/x86_64-linux-gnu/bits/huge_val.h: + +/usr/include/x86_64-linux-gnu/bits/huge_valf.h: + +/usr/include/x86_64-linux-gnu/bits/huge_vall.h: + +/usr/include/x86_64-linux-gnu/bits/inf.h: + +/usr/include/x86_64-linux-gnu/bits/nan.h: + +/usr/include/x86_64-linux-gnu/bits/mathdef.h: + +/usr/include/x86_64-linux-gnu/bits/mathcalls.h: + +/usr/include/x86_64-linux-gnu/bits/mathinline.h: + +/usr/include/c++/4.6/fstream: + +/usr/include/c++/4.6/bits/codecvt.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/basic_file.h: + +/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++io.h: + +/usr/include/c++/4.6/bits/fstream.tcc: + +/usr/include/c++/4.6/iostream: + +css/UnigramCorpusReader.h: + +css/ICorpusReader.h: + +css/UnigramRecord.h: + +../src/utils/csr.h: + +../src/utils/Utf8_16.h: + +/usr/include/assert.h: + +../src/utils/StringTokenizer.h: + +css/ThesaurusDict.h: + +../src/utils/Utf8_16.h: + +../src/utils/csr_assert.h: diff --git a/coreseek/mmseg-3.2.14/src/.libs/SegmentPkg.o b/coreseek/mmseg-3.2.14/src/.libs/SegmentPkg.o new file mode 100644 index 0000000..6acb560 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/SegmentPkg.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/SegmenterManager.o b/coreseek/mmseg-3.2.14/src/.libs/SegmenterManager.o new file mode 100644 index 0000000..b353a6b Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/SegmenterManager.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/StringTokenizer.o b/coreseek/mmseg-3.2.14/src/.libs/StringTokenizer.o new file mode 100644 index 0000000..a52f32a Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/StringTokenizer.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/SynonymsDict.o b/coreseek/mmseg-3.2.14/src/.libs/SynonymsDict.o new file mode 100644 index 0000000..3b061be Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/SynonymsDict.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/ThesaurusDict.o b/coreseek/mmseg-3.2.14/src/.libs/ThesaurusDict.o new file mode 100644 index 0000000..8816058 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/ThesaurusDict.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/UnigramCorpusReader.o b/coreseek/mmseg-3.2.14/src/.libs/UnigramCorpusReader.o new file mode 100644 index 0000000..c2cca81 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/UnigramCorpusReader.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/UnigramDict.o b/coreseek/mmseg-3.2.14/src/.libs/UnigramDict.o new file mode 100644 index 0000000..5bbf82c Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/UnigramDict.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/UnigramRecord.o b/coreseek/mmseg-3.2.14/src/.libs/UnigramRecord.o new file mode 100644 index 0000000..53ee823 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/UnigramRecord.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/Utf8_16.o b/coreseek/mmseg-3.2.14/src/.libs/Utf8_16.o new file mode 100644 index 0000000..1ddf178 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/Utf8_16.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/assert.o b/coreseek/mmseg-3.2.14/src/.libs/assert.o new file mode 100644 index 0000000..4f83897 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/assert.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/bsd_getopt.o b/coreseek/mmseg-3.2.14/src/.libs/bsd_getopt.o new file mode 100644 index 0000000..b7183f5 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/bsd_getopt.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/csr_mmap.o b/coreseek/mmseg-3.2.14/src/.libs/csr_mmap.o new file mode 100644 index 0000000..cf6c6b8 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/csr_mmap.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/csr_utils.o b/coreseek/mmseg-3.2.14/src/.libs/csr_utils.o new file mode 100644 index 0000000..bd0dad1 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/csr_utils.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/dictionary.o b/coreseek/mmseg-3.2.14/src/.libs/dictionary.o new file mode 100644 index 0000000..835b5f6 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/dictionary.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/iniparser.o b/coreseek/mmseg-3.2.14/src/.libs/iniparser.o new file mode 100644 index 0000000..3188343 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/iniparser.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/libmmseg.a b/coreseek/mmseg-3.2.14/src/.libs/libmmseg.a new file mode 100644 index 0000000..4bb08e3 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/libmmseg.a differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/libmmseg.la b/coreseek/mmseg-3.2.14/src/.libs/libmmseg.la new file mode 120000 index 0000000..58637c2 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.libs/libmmseg.la @@ -0,0 +1 @@ +../libmmseg.la \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/src/.libs/libmmseg.lai b/coreseek/mmseg-3.2.14/src/.libs/libmmseg.lai new file mode 100644 index 0000000..57a9b01 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/.libs/libmmseg.lai @@ -0,0 +1,41 @@ +# libmmseg.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='' + +# Names of this library. +library_names='' + +# The name of the static archive. +old_library='libmmseg.a' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libmmseg. +current=0 +age=0 +revision=0 + +# Is this an already installed library? +installed=yes + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/coreseek/mmseg-3.2.14/src/.libs/mmthunk.o b/coreseek/mmseg-3.2.14/src/.libs/mmthunk.o new file mode 100644 index 0000000..0eeda62 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/mmthunk.o differ diff --git a/coreseek/mmseg-3.2.14/src/.libs/segmenter.o b/coreseek/mmseg-3.2.14/src/.libs/segmenter.o new file mode 100644 index 0000000..a22637c Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/.libs/segmenter.o differ diff --git a/coreseek/mmseg-3.2.14/src/Makefile b/coreseek/mmseg-3.2.14/src/Makefile new file mode 100644 index 0000000..bdfc16f --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/Makefile @@ -0,0 +1,825 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# src/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + + + + +pkgdatadir = $(datadir)/mmseg +pkgincludedir = $(includedir)/mmseg +pkglibdir = $(libdir)/mmseg +pkglibexecdir = $(libexecdir)/mmseg +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +bin_PROGRAMS = mmseg$(EXEEXT) +subdir = src +DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/config/sys_errlist.m4 \ + $(top_srcdir)/config/sys_siglist.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(pkgincludedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libmmseg_la_DEPENDENCIES = +am_libmmseg_la_OBJECTS = mmthunk.lo SegmenterManager.lo \ + SynonymsDict.lo UnigramDict.lo segmenter.lo SegmentPkg.lo \ + UnigramCorpusReader.lo UnigramRecord.lo assert.lo \ + bsd_getopt.lo csr_mmap.lo csr_utils.lo Utf8_16.lo \ + StringTokenizer.lo dictionary.lo iniparser.lo ThesaurusDict.lo +libmmseg_la_OBJECTS = $(am_libmmseg_la_OBJECTS) +libmmseg_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libmmseg_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(bin_PROGRAMS) +am_mmseg_OBJECTS = mmseg_main.$(OBJEXT) +mmseg_OBJECTS = $(am_mmseg_OBJECTS) +mmseg_DEPENDENCIES = $(top_builddir)/src/libmmseg.la +DEFAULT_INCLUDES = -I. -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libmmseg_la_SOURCES) $(mmseg_SOURCES) +DIST_SOURCES = $(libmmseg_la_SOURCES) $(mmseg_SOURCES) +HEADERS = $(pkginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = aclocal-1.11 +AMTAR = $${TAR-tar} +AR = ar +AUTOCONF = autoconf +AUTOHEADER = autoheader +AUTOMAKE = automake-1.11 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CXX = g++ +CXXCPP = g++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -g -O2 +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = false +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +FGREP = /bin/grep -F +GREP = /bin/grep +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = ${LIBOBJDIR}$U.o +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = ${LIBOBJDIR}$U.lo +MAKEINFO = makeinfo +MANIFEST_TOOL = : +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = mmseg +PACKAGE_BUGREPORT = +PACKAGE_NAME = +PACKAGE_STRING = +PACKAGE_TARNAME = +PACKAGE_URL = +PACKAGE_VERSION = +PATH_SEPARATOR = : +RANLIB = ranlib +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +VERSION = 0.7 +abs_builddir = /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14/src +abs_srcdir = /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14/src +abs_top_builddir = /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14 +abs_top_srcdir = /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14 +ac_aux_dir = config +ac_ct_AR = ar +ac_ct_CC = gcc +ac_ct_CXX = g++ +ac_ct_DUMPBIN = +am__include = include +am__leading_dot = . +am__quote = +am__tar = $${TAR-tar} chof - "$$tardir" +am__untar = $${TAR-tar} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /home/coreseek/coreseek-4.1-beta/mmseg-3.2.14/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local/mmseg3 +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target_alias = +top_build_prefix = ../ +top_builddir = .. +top_srcdir = .. +MAINTAINERCLEANFILES = Makefile.in common.h stamp-common +EXTRA_DIST = common-h.in +AM_CFLAGS = -fPIC +AM_CPPFLAGS = -fPIC -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/src/css -I$(top_srcdir)/src/utils -D_REENTRANT -D_LARGEFILE64_SOURCE +pkginclude_HEADERS = css/ICorpusReader.h css/SegmenterManager.h css/tolowercase.h css/UnigramRecord.h \ + css/mmthunk.h css/SegmentPkg.h css/UnigramCorpusReader.h \ + css/Segmenter.h css/SynonymsDict.h css/UnigramDict.h \ + utils/csr_mmap.h utils/darts.h utils/scoped_ptr.h utils/Utf8_16.h \ + utils/csr_assert.h utils/csr_pool.h utils/freelist.h utils/Singleton.h \ + utils/csr.h utils/csr_utils.h utils/os.h utils/StringTokenizer.h \ + csr_typedefs.h css/ThesaurusDict.h iniparser/dictionary.h \ + iniparser/iniparser.h utils/bsd_getopt.h utils/bsd_getopt_win.h + + +#noinst_HEADERS = +lib_LTLIBRARIES = libmmseg.la +libmmseg_la_LIBADD = +libmmseg_la_LDFLAGS = -static +libmmseg_la_SOURCES = css/mmthunk.cpp css/SegmenterManager.cpp css/SynonymsDict.cpp \ + css/UnigramDict.cpp css/segmenter.cpp css/SegmentPkg.cpp \ + css/UnigramCorpusReader.cpp css/UnigramRecord.cpp \ + utils/assert.c utils/bsd_getopt.c utils/csr_mmap.c utils/csr_utils.c utils/Utf8_16.cpp utils/StringTokenizer.cpp iniparser/dictionary.c iniparser/iniparser.c css/ThesaurusDict.cpp + +mmseg_LDADD = $(top_builddir)/src/libmmseg.la +mmseg_SOURCES = mmseg_main.cpp +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libmmseg.la: $(libmmseg_la_OBJECTS) $(libmmseg_la_DEPENDENCIES) $(EXTRA_libmmseg_la_DEPENDENCIES) + $(libmmseg_la_LINK) -rpath $(libdir) $(libmmseg_la_OBJECTS) $(libmmseg_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +mmseg$(EXEEXT): $(mmseg_OBJECTS) $(mmseg_DEPENDENCIES) $(EXTRA_mmseg_DEPENDENCIES) + @rm -f mmseg$(EXEEXT) + $(CXXLINK) $(mmseg_OBJECTS) $(mmseg_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/SegmentPkg.Plo +include ./$(DEPDIR)/SegmenterManager.Plo +include ./$(DEPDIR)/StringTokenizer.Plo +include ./$(DEPDIR)/SynonymsDict.Plo +include ./$(DEPDIR)/ThesaurusDict.Plo +include ./$(DEPDIR)/UnigramCorpusReader.Plo +include ./$(DEPDIR)/UnigramDict.Plo +include ./$(DEPDIR)/UnigramRecord.Plo +include ./$(DEPDIR)/Utf8_16.Plo +include ./$(DEPDIR)/assert.Plo +include ./$(DEPDIR)/bsd_getopt.Plo +include ./$(DEPDIR)/csr_mmap.Plo +include ./$(DEPDIR)/csr_utils.Plo +include ./$(DEPDIR)/dictionary.Plo +include ./$(DEPDIR)/iniparser.Plo +include ./$(DEPDIR)/mmseg_main.Po +include ./$(DEPDIR)/mmthunk.Plo +include ./$(DEPDIR)/segmenter.Plo + +.c.o: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LTCOMPILE) -c -o $@ $< + +assert.lo: utils/assert.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assert.lo -MD -MP -MF $(DEPDIR)/assert.Tpo -c -o assert.lo `test -f 'utils/assert.c' || echo '$(srcdir)/'`utils/assert.c + $(am__mv) $(DEPDIR)/assert.Tpo $(DEPDIR)/assert.Plo +# source='utils/assert.c' object='assert.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assert.lo `test -f 'utils/assert.c' || echo '$(srcdir)/'`utils/assert.c + +bsd_getopt.lo: utils/bsd_getopt.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bsd_getopt.lo -MD -MP -MF $(DEPDIR)/bsd_getopt.Tpo -c -o bsd_getopt.lo `test -f 'utils/bsd_getopt.c' || echo '$(srcdir)/'`utils/bsd_getopt.c + $(am__mv) $(DEPDIR)/bsd_getopt.Tpo $(DEPDIR)/bsd_getopt.Plo +# source='utils/bsd_getopt.c' object='bsd_getopt.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bsd_getopt.lo `test -f 'utils/bsd_getopt.c' || echo '$(srcdir)/'`utils/bsd_getopt.c + +csr_mmap.lo: utils/csr_mmap.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csr_mmap.lo -MD -MP -MF $(DEPDIR)/csr_mmap.Tpo -c -o csr_mmap.lo `test -f 'utils/csr_mmap.c' || echo '$(srcdir)/'`utils/csr_mmap.c + $(am__mv) $(DEPDIR)/csr_mmap.Tpo $(DEPDIR)/csr_mmap.Plo +# source='utils/csr_mmap.c' object='csr_mmap.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csr_mmap.lo `test -f 'utils/csr_mmap.c' || echo '$(srcdir)/'`utils/csr_mmap.c + +csr_utils.lo: utils/csr_utils.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csr_utils.lo -MD -MP -MF $(DEPDIR)/csr_utils.Tpo -c -o csr_utils.lo `test -f 'utils/csr_utils.c' || echo '$(srcdir)/'`utils/csr_utils.c + $(am__mv) $(DEPDIR)/csr_utils.Tpo $(DEPDIR)/csr_utils.Plo +# source='utils/csr_utils.c' object='csr_utils.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csr_utils.lo `test -f 'utils/csr_utils.c' || echo '$(srcdir)/'`utils/csr_utils.c + +dictionary.lo: iniparser/dictionary.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dictionary.lo -MD -MP -MF $(DEPDIR)/dictionary.Tpo -c -o dictionary.lo `test -f 'iniparser/dictionary.c' || echo '$(srcdir)/'`iniparser/dictionary.c + $(am__mv) $(DEPDIR)/dictionary.Tpo $(DEPDIR)/dictionary.Plo +# source='iniparser/dictionary.c' object='dictionary.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dictionary.lo `test -f 'iniparser/dictionary.c' || echo '$(srcdir)/'`iniparser/dictionary.c + +iniparser.lo: iniparser/iniparser.c + $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT iniparser.lo -MD -MP -MF $(DEPDIR)/iniparser.Tpo -c -o iniparser.lo `test -f 'iniparser/iniparser.c' || echo '$(srcdir)/'`iniparser/iniparser.c + $(am__mv) $(DEPDIR)/iniparser.Tpo $(DEPDIR)/iniparser.Plo +# source='iniparser/iniparser.c' object='iniparser.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o iniparser.lo `test -f 'iniparser/iniparser.c' || echo '$(srcdir)/'`iniparser/iniparser.c + +.cpp.o: + $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: + $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: + $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< + $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +# source='$<' object='$@' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LTCXXCOMPILE) -c -o $@ $< + +mmthunk.lo: css/mmthunk.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT mmthunk.lo -MD -MP -MF $(DEPDIR)/mmthunk.Tpo -c -o mmthunk.lo `test -f 'css/mmthunk.cpp' || echo '$(srcdir)/'`css/mmthunk.cpp + $(am__mv) $(DEPDIR)/mmthunk.Tpo $(DEPDIR)/mmthunk.Plo +# source='css/mmthunk.cpp' object='mmthunk.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o mmthunk.lo `test -f 'css/mmthunk.cpp' || echo '$(srcdir)/'`css/mmthunk.cpp + +SegmenterManager.lo: css/SegmenterManager.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmenterManager.lo -MD -MP -MF $(DEPDIR)/SegmenterManager.Tpo -c -o SegmenterManager.lo `test -f 'css/SegmenterManager.cpp' || echo '$(srcdir)/'`css/SegmenterManager.cpp + $(am__mv) $(DEPDIR)/SegmenterManager.Tpo $(DEPDIR)/SegmenterManager.Plo +# source='css/SegmenterManager.cpp' object='SegmenterManager.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmenterManager.lo `test -f 'css/SegmenterManager.cpp' || echo '$(srcdir)/'`css/SegmenterManager.cpp + +SynonymsDict.lo: css/SynonymsDict.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SynonymsDict.lo -MD -MP -MF $(DEPDIR)/SynonymsDict.Tpo -c -o SynonymsDict.lo `test -f 'css/SynonymsDict.cpp' || echo '$(srcdir)/'`css/SynonymsDict.cpp + $(am__mv) $(DEPDIR)/SynonymsDict.Tpo $(DEPDIR)/SynonymsDict.Plo +# source='css/SynonymsDict.cpp' object='SynonymsDict.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SynonymsDict.lo `test -f 'css/SynonymsDict.cpp' || echo '$(srcdir)/'`css/SynonymsDict.cpp + +UnigramDict.lo: css/UnigramDict.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnigramDict.lo -MD -MP -MF $(DEPDIR)/UnigramDict.Tpo -c -o UnigramDict.lo `test -f 'css/UnigramDict.cpp' || echo '$(srcdir)/'`css/UnigramDict.cpp + $(am__mv) $(DEPDIR)/UnigramDict.Tpo $(DEPDIR)/UnigramDict.Plo +# source='css/UnigramDict.cpp' object='UnigramDict.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnigramDict.lo `test -f 'css/UnigramDict.cpp' || echo '$(srcdir)/'`css/UnigramDict.cpp + +segmenter.lo: css/segmenter.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT segmenter.lo -MD -MP -MF $(DEPDIR)/segmenter.Tpo -c -o segmenter.lo `test -f 'css/segmenter.cpp' || echo '$(srcdir)/'`css/segmenter.cpp + $(am__mv) $(DEPDIR)/segmenter.Tpo $(DEPDIR)/segmenter.Plo +# source='css/segmenter.cpp' object='segmenter.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o segmenter.lo `test -f 'css/segmenter.cpp' || echo '$(srcdir)/'`css/segmenter.cpp + +SegmentPkg.lo: css/SegmentPkg.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentPkg.lo -MD -MP -MF $(DEPDIR)/SegmentPkg.Tpo -c -o SegmentPkg.lo `test -f 'css/SegmentPkg.cpp' || echo '$(srcdir)/'`css/SegmentPkg.cpp + $(am__mv) $(DEPDIR)/SegmentPkg.Tpo $(DEPDIR)/SegmentPkg.Plo +# source='css/SegmentPkg.cpp' object='SegmentPkg.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentPkg.lo `test -f 'css/SegmentPkg.cpp' || echo '$(srcdir)/'`css/SegmentPkg.cpp + +UnigramCorpusReader.lo: css/UnigramCorpusReader.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnigramCorpusReader.lo -MD -MP -MF $(DEPDIR)/UnigramCorpusReader.Tpo -c -o UnigramCorpusReader.lo `test -f 'css/UnigramCorpusReader.cpp' || echo '$(srcdir)/'`css/UnigramCorpusReader.cpp + $(am__mv) $(DEPDIR)/UnigramCorpusReader.Tpo $(DEPDIR)/UnigramCorpusReader.Plo +# source='css/UnigramCorpusReader.cpp' object='UnigramCorpusReader.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnigramCorpusReader.lo `test -f 'css/UnigramCorpusReader.cpp' || echo '$(srcdir)/'`css/UnigramCorpusReader.cpp + +UnigramRecord.lo: css/UnigramRecord.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnigramRecord.lo -MD -MP -MF $(DEPDIR)/UnigramRecord.Tpo -c -o UnigramRecord.lo `test -f 'css/UnigramRecord.cpp' || echo '$(srcdir)/'`css/UnigramRecord.cpp + $(am__mv) $(DEPDIR)/UnigramRecord.Tpo $(DEPDIR)/UnigramRecord.Plo +# source='css/UnigramRecord.cpp' object='UnigramRecord.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnigramRecord.lo `test -f 'css/UnigramRecord.cpp' || echo '$(srcdir)/'`css/UnigramRecord.cpp + +Utf8_16.lo: utils/Utf8_16.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Utf8_16.lo -MD -MP -MF $(DEPDIR)/Utf8_16.Tpo -c -o Utf8_16.lo `test -f 'utils/Utf8_16.cpp' || echo '$(srcdir)/'`utils/Utf8_16.cpp + $(am__mv) $(DEPDIR)/Utf8_16.Tpo $(DEPDIR)/Utf8_16.Plo +# source='utils/Utf8_16.cpp' object='Utf8_16.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Utf8_16.lo `test -f 'utils/Utf8_16.cpp' || echo '$(srcdir)/'`utils/Utf8_16.cpp + +StringTokenizer.lo: utils/StringTokenizer.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StringTokenizer.lo -MD -MP -MF $(DEPDIR)/StringTokenizer.Tpo -c -o StringTokenizer.lo `test -f 'utils/StringTokenizer.cpp' || echo '$(srcdir)/'`utils/StringTokenizer.cpp + $(am__mv) $(DEPDIR)/StringTokenizer.Tpo $(DEPDIR)/StringTokenizer.Plo +# source='utils/StringTokenizer.cpp' object='StringTokenizer.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StringTokenizer.lo `test -f 'utils/StringTokenizer.cpp' || echo '$(srcdir)/'`utils/StringTokenizer.cpp + +ThesaurusDict.lo: css/ThesaurusDict.cpp + $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ThesaurusDict.lo -MD -MP -MF $(DEPDIR)/ThesaurusDict.Tpo -c -o ThesaurusDict.lo `test -f 'css/ThesaurusDict.cpp' || echo '$(srcdir)/'`css/ThesaurusDict.cpp + $(am__mv) $(DEPDIR)/ThesaurusDict.Tpo $(DEPDIR)/ThesaurusDict.Plo +# source='css/ThesaurusDict.cpp' object='ThesaurusDict.lo' libtool=yes \ +# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \ +# $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ThesaurusDict.lo `test -f 'css/ThesaurusDict.cpp' || echo '$(srcdir)/'`css/ThesaurusDict.cpp + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ + uninstall-pkgincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libLTLIBRARIES clean-libtool ctags \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am \ + install-pkgincludeHEADERS install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ + uninstall-pkgincludeHEADERS + + +# Regenerate common.h with config.status whenever common-h.in changes. +common.h: stamp-common + @: +stamp-common: $(srcdir)/common-h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS= CONFIG_OTHER=sic/common.h \ + $(SHELL) ./config.status + echo timestamp > $@ + +# Don't distribute common.h, since it is build host dependent! +dist-hook: + rm -f $(distdir)/common.h + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/mmseg-3.2.14/src/Makefile.am b/coreseek/mmseg-3.2.14/src/Makefile.am new file mode 100755 index 0000000..1632fbe --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/Makefile.am @@ -0,0 +1,63 @@ +## Makefile.am -- Process this file with automake to produce Makefile.in +## Copyright (C) 2000 Gary V. Vaughan +## +## This program is free software; you can 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +MAINTAINERCLEANFILES = Makefile.in common.h stamp-common +EXTRA_DIST = common-h.in + +AM_CFLAGS = -fPIC +AM_CPPFLAGS = -fPIC -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/src/css -I$(top_srcdir)/src/utils -D_REENTRANT -D_LARGEFILE64_SOURCE + +pkginclude_HEADERS = css/ICorpusReader.h css/SegmenterManager.h css/tolowercase.h css/UnigramRecord.h \ + css/mmthunk.h css/SegmentPkg.h css/UnigramCorpusReader.h \ + css/Segmenter.h css/SynonymsDict.h css/UnigramDict.h \ + utils/csr_mmap.h utils/darts.h utils/scoped_ptr.h utils/Utf8_16.h \ + utils/csr_assert.h utils/csr_pool.h utils/freelist.h utils/Singleton.h \ + utils/csr.h utils/csr_utils.h utils/os.h utils/StringTokenizer.h \ + csr_typedefs.h css/ThesaurusDict.h iniparser/dictionary.h \ + iniparser/iniparser.h utils/bsd_getopt.h utils/bsd_getopt_win.h + + +#noinst_HEADERS = + +## @start 1 +lib_LTLIBRARIES = libmmseg.la +libmmseg_la_LIBADD = +libmmseg_la_LDFLAGS = -static +libmmseg_la_SOURCES = css/mmthunk.cpp css/SegmenterManager.cpp css/SynonymsDict.cpp \ + css/UnigramDict.cpp css/segmenter.cpp css/SegmentPkg.cpp \ + css/UnigramCorpusReader.cpp css/UnigramRecord.cpp \ + utils/assert.c utils/bsd_getopt.c utils/csr_mmap.c utils/csr_utils.c utils/Utf8_16.cpp utils/StringTokenizer.cpp iniparser/dictionary.c iniparser/iniparser.c css/ThesaurusDict.cpp + +bin_PROGRAMS = mmseg +mmseg_LDADD = $(top_builddir)/src/libmmseg.la +mmseg_SOURCES = mmseg_main.cpp + +## @end 1 +## @start 2 +# Regenerate common.h with config.status whenever common-h.in changes. +common.h: stamp-common + @: +stamp-common: $(srcdir)/common-h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS= CONFIG_OTHER=sic/common.h \ + $(SHELL) ./config.status + echo timestamp > $@ +## @end 2 + +# Don't distribute common.h, since it is build host dependent! +dist-hook: + rm -f $(distdir)/common.h diff --git a/coreseek/mmseg-3.2.14/src/Makefile.in b/coreseek/mmseg-3.2.14/src/Makefile.in new file mode 100644 index 0000000..134ecd1 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/Makefile.in @@ -0,0 +1,825 @@ +# Makefile.in generated by automake 1.11.3 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = mmseg$(EXEEXT) +subdir = src +DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/readline.m4 \ + $(top_srcdir)/config/sys_errlist.m4 \ + $(top_srcdir)/config/sys_siglist.m4 $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(pkgincludedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libmmseg_la_DEPENDENCIES = +am_libmmseg_la_OBJECTS = mmthunk.lo SegmenterManager.lo \ + SynonymsDict.lo UnigramDict.lo segmenter.lo SegmentPkg.lo \ + UnigramCorpusReader.lo UnigramRecord.lo assert.lo \ + bsd_getopt.lo csr_mmap.lo csr_utils.lo Utf8_16.lo \ + StringTokenizer.lo dictionary.lo iniparser.lo ThesaurusDict.lo +libmmseg_la_OBJECTS = $(am_libmmseg_la_OBJECTS) +libmmseg_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(libmmseg_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(bin_PROGRAMS) +am_mmseg_OBJECTS = mmseg_main.$(OBJEXT) +mmseg_OBJECTS = $(am_mmseg_OBJECTS) +mmseg_DEPENDENCIES = $(top_builddir)/src/libmmseg.la +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libmmseg_la_SOURCES) $(mmseg_SOURCES) +DIST_SOURCES = $(libmmseg_la_SOURCES) $(mmseg_SOURCES) +HEADERS = $(pkginclude_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_aux_dir = @ac_aux_dir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +MAINTAINERCLEANFILES = Makefile.in common.h stamp-common +EXTRA_DIST = common-h.in +AM_CFLAGS = -fPIC +AM_CPPFLAGS = -fPIC -I$(top_builddir) -I$(top_srcdir) -I$(top_srcdir)/src/css -I$(top_srcdir)/src/utils -D_REENTRANT -D_LARGEFILE64_SOURCE +pkginclude_HEADERS = css/ICorpusReader.h css/SegmenterManager.h css/tolowercase.h css/UnigramRecord.h \ + css/mmthunk.h css/SegmentPkg.h css/UnigramCorpusReader.h \ + css/Segmenter.h css/SynonymsDict.h css/UnigramDict.h \ + utils/csr_mmap.h utils/darts.h utils/scoped_ptr.h utils/Utf8_16.h \ + utils/csr_assert.h utils/csr_pool.h utils/freelist.h utils/Singleton.h \ + utils/csr.h utils/csr_utils.h utils/os.h utils/StringTokenizer.h \ + csr_typedefs.h css/ThesaurusDict.h iniparser/dictionary.h \ + iniparser/iniparser.h utils/bsd_getopt.h utils/bsd_getopt_win.h + + +#noinst_HEADERS = +lib_LTLIBRARIES = libmmseg.la +libmmseg_la_LIBADD = +libmmseg_la_LDFLAGS = -static +libmmseg_la_SOURCES = css/mmthunk.cpp css/SegmenterManager.cpp css/SynonymsDict.cpp \ + css/UnigramDict.cpp css/segmenter.cpp css/SegmentPkg.cpp \ + css/UnigramCorpusReader.cpp css/UnigramRecord.cpp \ + utils/assert.c utils/bsd_getopt.c utils/csr_mmap.c utils/csr_utils.c utils/Utf8_16.cpp utils/StringTokenizer.cpp iniparser/dictionary.c iniparser/iniparser.c css/ThesaurusDict.cpp + +mmseg_LDADD = $(top_builddir)/src/libmmseg.la +mmseg_SOURCES = mmseg_main.cpp +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .cpp .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libmmseg.la: $(libmmseg_la_OBJECTS) $(libmmseg_la_DEPENDENCIES) $(EXTRA_libmmseg_la_DEPENDENCIES) + $(libmmseg_la_LINK) -rpath $(libdir) $(libmmseg_la_OBJECTS) $(libmmseg_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +mmseg$(EXEEXT): $(mmseg_OBJECTS) $(mmseg_DEPENDENCIES) $(EXTRA_mmseg_DEPENDENCIES) + @rm -f mmseg$(EXEEXT) + $(CXXLINK) $(mmseg_OBJECTS) $(mmseg_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmentPkg.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SegmenterManager.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StringTokenizer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SynonymsDict.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ThesaurusDict.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnigramCorpusReader.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnigramDict.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnigramRecord.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Utf8_16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assert.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bsd_getopt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csr_mmap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csr_utils.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dictionary.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iniparser.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmseg_main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmthunk.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/segmenter.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +assert.lo: utils/assert.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assert.lo -MD -MP -MF $(DEPDIR)/assert.Tpo -c -o assert.lo `test -f 'utils/assert.c' || echo '$(srcdir)/'`utils/assert.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/assert.Tpo $(DEPDIR)/assert.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='utils/assert.c' object='assert.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assert.lo `test -f 'utils/assert.c' || echo '$(srcdir)/'`utils/assert.c + +bsd_getopt.lo: utils/bsd_getopt.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bsd_getopt.lo -MD -MP -MF $(DEPDIR)/bsd_getopt.Tpo -c -o bsd_getopt.lo `test -f 'utils/bsd_getopt.c' || echo '$(srcdir)/'`utils/bsd_getopt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/bsd_getopt.Tpo $(DEPDIR)/bsd_getopt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='utils/bsd_getopt.c' object='bsd_getopt.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bsd_getopt.lo `test -f 'utils/bsd_getopt.c' || echo '$(srcdir)/'`utils/bsd_getopt.c + +csr_mmap.lo: utils/csr_mmap.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csr_mmap.lo -MD -MP -MF $(DEPDIR)/csr_mmap.Tpo -c -o csr_mmap.lo `test -f 'utils/csr_mmap.c' || echo '$(srcdir)/'`utils/csr_mmap.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/csr_mmap.Tpo $(DEPDIR)/csr_mmap.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='utils/csr_mmap.c' object='csr_mmap.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csr_mmap.lo `test -f 'utils/csr_mmap.c' || echo '$(srcdir)/'`utils/csr_mmap.c + +csr_utils.lo: utils/csr_utils.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csr_utils.lo -MD -MP -MF $(DEPDIR)/csr_utils.Tpo -c -o csr_utils.lo `test -f 'utils/csr_utils.c' || echo '$(srcdir)/'`utils/csr_utils.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/csr_utils.Tpo $(DEPDIR)/csr_utils.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='utils/csr_utils.c' object='csr_utils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csr_utils.lo `test -f 'utils/csr_utils.c' || echo '$(srcdir)/'`utils/csr_utils.c + +dictionary.lo: iniparser/dictionary.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dictionary.lo -MD -MP -MF $(DEPDIR)/dictionary.Tpo -c -o dictionary.lo `test -f 'iniparser/dictionary.c' || echo '$(srcdir)/'`iniparser/dictionary.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dictionary.Tpo $(DEPDIR)/dictionary.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iniparser/dictionary.c' object='dictionary.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dictionary.lo `test -f 'iniparser/dictionary.c' || echo '$(srcdir)/'`iniparser/dictionary.c + +iniparser.lo: iniparser/iniparser.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT iniparser.lo -MD -MP -MF $(DEPDIR)/iniparser.Tpo -c -o iniparser.lo `test -f 'iniparser/iniparser.c' || echo '$(srcdir)/'`iniparser/iniparser.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/iniparser.Tpo $(DEPDIR)/iniparser.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iniparser/iniparser.c' object='iniparser.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o iniparser.lo `test -f 'iniparser/iniparser.c' || echo '$(srcdir)/'`iniparser/iniparser.c + +.cpp.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cpp.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cpp.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mmthunk.lo: css/mmthunk.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT mmthunk.lo -MD -MP -MF $(DEPDIR)/mmthunk.Tpo -c -o mmthunk.lo `test -f 'css/mmthunk.cpp' || echo '$(srcdir)/'`css/mmthunk.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/mmthunk.Tpo $(DEPDIR)/mmthunk.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/mmthunk.cpp' object='mmthunk.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o mmthunk.lo `test -f 'css/mmthunk.cpp' || echo '$(srcdir)/'`css/mmthunk.cpp + +SegmenterManager.lo: css/SegmenterManager.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmenterManager.lo -MD -MP -MF $(DEPDIR)/SegmenterManager.Tpo -c -o SegmenterManager.lo `test -f 'css/SegmenterManager.cpp' || echo '$(srcdir)/'`css/SegmenterManager.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SegmenterManager.Tpo $(DEPDIR)/SegmenterManager.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/SegmenterManager.cpp' object='SegmenterManager.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmenterManager.lo `test -f 'css/SegmenterManager.cpp' || echo '$(srcdir)/'`css/SegmenterManager.cpp + +SynonymsDict.lo: css/SynonymsDict.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SynonymsDict.lo -MD -MP -MF $(DEPDIR)/SynonymsDict.Tpo -c -o SynonymsDict.lo `test -f 'css/SynonymsDict.cpp' || echo '$(srcdir)/'`css/SynonymsDict.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SynonymsDict.Tpo $(DEPDIR)/SynonymsDict.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/SynonymsDict.cpp' object='SynonymsDict.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SynonymsDict.lo `test -f 'css/SynonymsDict.cpp' || echo '$(srcdir)/'`css/SynonymsDict.cpp + +UnigramDict.lo: css/UnigramDict.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnigramDict.lo -MD -MP -MF $(DEPDIR)/UnigramDict.Tpo -c -o UnigramDict.lo `test -f 'css/UnigramDict.cpp' || echo '$(srcdir)/'`css/UnigramDict.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/UnigramDict.Tpo $(DEPDIR)/UnigramDict.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/UnigramDict.cpp' object='UnigramDict.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnigramDict.lo `test -f 'css/UnigramDict.cpp' || echo '$(srcdir)/'`css/UnigramDict.cpp + +segmenter.lo: css/segmenter.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT segmenter.lo -MD -MP -MF $(DEPDIR)/segmenter.Tpo -c -o segmenter.lo `test -f 'css/segmenter.cpp' || echo '$(srcdir)/'`css/segmenter.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/segmenter.Tpo $(DEPDIR)/segmenter.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/segmenter.cpp' object='segmenter.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o segmenter.lo `test -f 'css/segmenter.cpp' || echo '$(srcdir)/'`css/segmenter.cpp + +SegmentPkg.lo: css/SegmentPkg.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT SegmentPkg.lo -MD -MP -MF $(DEPDIR)/SegmentPkg.Tpo -c -o SegmentPkg.lo `test -f 'css/SegmentPkg.cpp' || echo '$(srcdir)/'`css/SegmentPkg.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/SegmentPkg.Tpo $(DEPDIR)/SegmentPkg.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/SegmentPkg.cpp' object='SegmentPkg.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o SegmentPkg.lo `test -f 'css/SegmentPkg.cpp' || echo '$(srcdir)/'`css/SegmentPkg.cpp + +UnigramCorpusReader.lo: css/UnigramCorpusReader.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnigramCorpusReader.lo -MD -MP -MF $(DEPDIR)/UnigramCorpusReader.Tpo -c -o UnigramCorpusReader.lo `test -f 'css/UnigramCorpusReader.cpp' || echo '$(srcdir)/'`css/UnigramCorpusReader.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/UnigramCorpusReader.Tpo $(DEPDIR)/UnigramCorpusReader.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/UnigramCorpusReader.cpp' object='UnigramCorpusReader.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnigramCorpusReader.lo `test -f 'css/UnigramCorpusReader.cpp' || echo '$(srcdir)/'`css/UnigramCorpusReader.cpp + +UnigramRecord.lo: css/UnigramRecord.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT UnigramRecord.lo -MD -MP -MF $(DEPDIR)/UnigramRecord.Tpo -c -o UnigramRecord.lo `test -f 'css/UnigramRecord.cpp' || echo '$(srcdir)/'`css/UnigramRecord.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/UnigramRecord.Tpo $(DEPDIR)/UnigramRecord.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/UnigramRecord.cpp' object='UnigramRecord.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o UnigramRecord.lo `test -f 'css/UnigramRecord.cpp' || echo '$(srcdir)/'`css/UnigramRecord.cpp + +Utf8_16.lo: utils/Utf8_16.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT Utf8_16.lo -MD -MP -MF $(DEPDIR)/Utf8_16.Tpo -c -o Utf8_16.lo `test -f 'utils/Utf8_16.cpp' || echo '$(srcdir)/'`utils/Utf8_16.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/Utf8_16.Tpo $(DEPDIR)/Utf8_16.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='utils/Utf8_16.cpp' object='Utf8_16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o Utf8_16.lo `test -f 'utils/Utf8_16.cpp' || echo '$(srcdir)/'`utils/Utf8_16.cpp + +StringTokenizer.lo: utils/StringTokenizer.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT StringTokenizer.lo -MD -MP -MF $(DEPDIR)/StringTokenizer.Tpo -c -o StringTokenizer.lo `test -f 'utils/StringTokenizer.cpp' || echo '$(srcdir)/'`utils/StringTokenizer.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/StringTokenizer.Tpo $(DEPDIR)/StringTokenizer.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='utils/StringTokenizer.cpp' object='StringTokenizer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o StringTokenizer.lo `test -f 'utils/StringTokenizer.cpp' || echo '$(srcdir)/'`utils/StringTokenizer.cpp + +ThesaurusDict.lo: css/ThesaurusDict.cpp +@am__fastdepCXX_TRUE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ThesaurusDict.lo -MD -MP -MF $(DEPDIR)/ThesaurusDict.Tpo -c -o ThesaurusDict.lo `test -f 'css/ThesaurusDict.cpp' || echo '$(srcdir)/'`css/ThesaurusDict.cpp +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/ThesaurusDict.Tpo $(DEPDIR)/ThesaurusDict.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='css/ThesaurusDict.cpp' object='ThesaurusDict.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ThesaurusDict.lo `test -f 'css/ThesaurusDict.cpp' || echo '$(srcdir)/'`css/ThesaurusDict.cpp + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-pkgincludeHEADERS: $(pkginclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ + done + +uninstall-pkgincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) +install-binPROGRAMS: install-libLTLIBRARIES + +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ + clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-pkgincludeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ + uninstall-pkgincludeHEADERS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic clean-libLTLIBRARIES clean-libtool ctags \ + dist-hook distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-libLTLIBRARIES \ + install-man install-pdf install-pdf-am \ + install-pkgincludeHEADERS install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ + uninstall-pkgincludeHEADERS + + +# Regenerate common.h with config.status whenever common-h.in changes. +common.h: stamp-common + @: +stamp-common: $(srcdir)/common-h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS= CONFIG_OTHER=sic/common.h \ + $(SHELL) ./config.status + echo timestamp > $@ + +# Don't distribute common.h, since it is build host dependent! +dist-hook: + rm -f $(distdir)/common.h + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/coreseek/mmseg-3.2.14/src/SegmentPkg.lo b/coreseek/mmseg-3.2.14/src/SegmentPkg.lo new file mode 100644 index 0000000..a7dbfc5 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/SegmentPkg.lo @@ -0,0 +1,12 @@ +# SegmentPkg.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/SegmentPkg.o' + +# Name of the non-PIC object +non_pic_object='SegmentPkg.o' + diff --git a/coreseek/mmseg-3.2.14/src/SegmentPkg.o b/coreseek/mmseg-3.2.14/src/SegmentPkg.o new file mode 100644 index 0000000..6acb560 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/SegmentPkg.o differ diff --git a/coreseek/mmseg-3.2.14/src/SegmenterManager.lo b/coreseek/mmseg-3.2.14/src/SegmenterManager.lo new file mode 100644 index 0000000..7bb3f69 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/SegmenterManager.lo @@ -0,0 +1,12 @@ +# SegmenterManager.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/SegmenterManager.o' + +# Name of the non-PIC object +non_pic_object='SegmenterManager.o' + diff --git a/coreseek/mmseg-3.2.14/src/SegmenterManager.o b/coreseek/mmseg-3.2.14/src/SegmenterManager.o new file mode 100644 index 0000000..b353a6b Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/SegmenterManager.o differ diff --git a/coreseek/mmseg-3.2.14/src/StringTokenizer.lo b/coreseek/mmseg-3.2.14/src/StringTokenizer.lo new file mode 100644 index 0000000..fda8f85 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/StringTokenizer.lo @@ -0,0 +1,12 @@ +# StringTokenizer.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/StringTokenizer.o' + +# Name of the non-PIC object +non_pic_object='StringTokenizer.o' + diff --git a/coreseek/mmseg-3.2.14/src/StringTokenizer.o b/coreseek/mmseg-3.2.14/src/StringTokenizer.o new file mode 100644 index 0000000..a52f32a Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/StringTokenizer.o differ diff --git a/coreseek/mmseg-3.2.14/src/SynonymsDict.lo b/coreseek/mmseg-3.2.14/src/SynonymsDict.lo new file mode 100644 index 0000000..d4685fe --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/SynonymsDict.lo @@ -0,0 +1,12 @@ +# SynonymsDict.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/SynonymsDict.o' + +# Name of the non-PIC object +non_pic_object='SynonymsDict.o' + diff --git a/coreseek/mmseg-3.2.14/src/SynonymsDict.o b/coreseek/mmseg-3.2.14/src/SynonymsDict.o new file mode 100644 index 0000000..3b061be Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/SynonymsDict.o differ diff --git a/coreseek/mmseg-3.2.14/src/ThesaurusDict.lo b/coreseek/mmseg-3.2.14/src/ThesaurusDict.lo new file mode 100644 index 0000000..962d750 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/ThesaurusDict.lo @@ -0,0 +1,12 @@ +# ThesaurusDict.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/ThesaurusDict.o' + +# Name of the non-PIC object +non_pic_object='ThesaurusDict.o' + diff --git a/coreseek/mmseg-3.2.14/src/ThesaurusDict.o b/coreseek/mmseg-3.2.14/src/ThesaurusDict.o new file mode 100644 index 0000000..8816058 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/ThesaurusDict.o differ diff --git a/coreseek/mmseg-3.2.14/src/UnigramCorpusReader.lo b/coreseek/mmseg-3.2.14/src/UnigramCorpusReader.lo new file mode 100644 index 0000000..0f9898d --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/UnigramCorpusReader.lo @@ -0,0 +1,12 @@ +# UnigramCorpusReader.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/UnigramCorpusReader.o' + +# Name of the non-PIC object +non_pic_object='UnigramCorpusReader.o' + diff --git a/coreseek/mmseg-3.2.14/src/UnigramCorpusReader.o b/coreseek/mmseg-3.2.14/src/UnigramCorpusReader.o new file mode 100644 index 0000000..c2cca81 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/UnigramCorpusReader.o differ diff --git a/coreseek/mmseg-3.2.14/src/UnigramDict.lo b/coreseek/mmseg-3.2.14/src/UnigramDict.lo new file mode 100644 index 0000000..461785f --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/UnigramDict.lo @@ -0,0 +1,12 @@ +# UnigramDict.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/UnigramDict.o' + +# Name of the non-PIC object +non_pic_object='UnigramDict.o' + diff --git a/coreseek/mmseg-3.2.14/src/UnigramDict.o b/coreseek/mmseg-3.2.14/src/UnigramDict.o new file mode 100644 index 0000000..5bbf82c Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/UnigramDict.o differ diff --git a/coreseek/mmseg-3.2.14/src/UnigramRecord.lo b/coreseek/mmseg-3.2.14/src/UnigramRecord.lo new file mode 100644 index 0000000..5f3fd9b --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/UnigramRecord.lo @@ -0,0 +1,12 @@ +# UnigramRecord.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/UnigramRecord.o' + +# Name of the non-PIC object +non_pic_object='UnigramRecord.o' + diff --git a/coreseek/mmseg-3.2.14/src/UnigramRecord.o b/coreseek/mmseg-3.2.14/src/UnigramRecord.o new file mode 100644 index 0000000..53ee823 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/UnigramRecord.o differ diff --git a/coreseek/mmseg-3.2.14/src/Utf8_16.lo b/coreseek/mmseg-3.2.14/src/Utf8_16.lo new file mode 100644 index 0000000..cd5a4b1 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/Utf8_16.lo @@ -0,0 +1,12 @@ +# Utf8_16.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/Utf8_16.o' + +# Name of the non-PIC object +non_pic_object='Utf8_16.o' + diff --git a/coreseek/mmseg-3.2.14/src/Utf8_16.o b/coreseek/mmseg-3.2.14/src/Utf8_16.o new file mode 100644 index 0000000..1ddf178 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/Utf8_16.o differ diff --git a/coreseek/mmseg-3.2.14/src/assert.lo b/coreseek/mmseg-3.2.14/src/assert.lo new file mode 100644 index 0000000..6dd9dab --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/assert.lo @@ -0,0 +1,12 @@ +# assert.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/assert.o' + +# Name of the non-PIC object +non_pic_object='assert.o' + diff --git a/coreseek/mmseg-3.2.14/src/assert.o b/coreseek/mmseg-3.2.14/src/assert.o new file mode 100644 index 0000000..4f83897 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/assert.o differ diff --git a/coreseek/mmseg-3.2.14/src/bsd_getopt.lo b/coreseek/mmseg-3.2.14/src/bsd_getopt.lo new file mode 100644 index 0000000..12acecb --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/bsd_getopt.lo @@ -0,0 +1,12 @@ +# bsd_getopt.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/bsd_getopt.o' + +# Name of the non-PIC object +non_pic_object='bsd_getopt.o' + diff --git a/coreseek/mmseg-3.2.14/src/bsd_getopt.o b/coreseek/mmseg-3.2.14/src/bsd_getopt.o new file mode 100644 index 0000000..b7183f5 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/bsd_getopt.o differ diff --git a/coreseek/mmseg-3.2.14/src/config.win.h b/coreseek/mmseg-3.2.14/src/config.win.h new file mode 100755 index 0000000..624a59d --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/config.win.h @@ -0,0 +1,90 @@ +/* config.h. Generated by configure. */ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the header file. */ +//#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_FCNTL_H 1 + +/* Define to 1 if you have the `getpagesize' function. */ +//#define HAVE_GETPAGESIZE 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_IO_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_LIMITS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have a working `mmap' system call. */ +//#define HAVE_MMAP 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_NETINET_IN_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +//#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_WINDOWS_H */ +#define HAVE_WINDOWS_H 1 + +/* Name of package */ +#define PACKAGE "libsegment" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "" + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION "0.1" + +/* Define to `long' if does not define. */ +/* #undef off_t */ + +/* Define to `unsigned' if does not define. */ +/* #undef size_t */ diff --git a/coreseek/mmseg-3.2.14/src/csr_mmap.lo b/coreseek/mmseg-3.2.14/src/csr_mmap.lo new file mode 100644 index 0000000..376d15b --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/csr_mmap.lo @@ -0,0 +1,12 @@ +# csr_mmap.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/csr_mmap.o' + +# Name of the non-PIC object +non_pic_object='csr_mmap.o' + diff --git a/coreseek/mmseg-3.2.14/src/csr_mmap.o b/coreseek/mmseg-3.2.14/src/csr_mmap.o new file mode 100644 index 0000000..cf6c6b8 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/csr_mmap.o differ diff --git a/coreseek/mmseg-3.2.14/src/csr_typedefs.h b/coreseek/mmseg-3.2.14/src/csr_typedefs.h new file mode 100755 index 0000000..ae02abf --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/csr_typedefs.h @@ -0,0 +1,97 @@ +#ifndef _CSR_TYPEDEFS_H_ +#define _CSR_TYPEDEFS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef NULL +#define NULL 0 +#endif + +typedef char i1; +typedef unsigned char u1; +typedef short i2; +typedef unsigned short u2; +typedef int i4; +typedef unsigned int u4; +typedef long long i8; +typedef unsigned long long u8; + +typedef u4 csr_offset_t; +/* +#if U8_AVAILABLE +typedef signed long int s8; +typedef unsigned long int u8; +#else +typedef struct {u4 low, high;} u8; +#define s8 u8 +#endif +*/ + +#define CSR_INT8_MIN -128 +#define CSR_INT8_MAX 127 +#define CSR_UINT8_MAX 255 + +#define CSR_INT16_MIN -32768 +#define CSR_INT16_MAX 32767 +#define CSR_UINT16_MAX 65535 + +/* + * Note that "int" is 32 bits on all currently supported Unix-like operating + * systems, but "long" can be either 32 bits or 64 bits, thus the 32 bit + * constants are not qualified with "L". + */ +#define CSR_INT32_MIN -2147483648 +#define CSR_INT32_MAX 2147483647 +#define CSR_UINT32_MAX 4294967295U + +#define CSR_INT64_MIN -9223372036854775808LL +#define CSR_INT64_MAX 9223372036854775807LL +#define CSR_UINT64_MAX 18446744073709551615ULL + + +#ifdef WIN32 +#undef HIBYTE +#undef LOBYTE +#undef MAKEWORD +#endif + +#ifndef WIN32 +typedef unsigned char BYTE; +typedef unsigned short WORD; +#ifndef _WINDEF_ +typedef unsigned int DWORD; +#endif +#endif + +#ifndef WIN32 + +#define HIBYTE(W) (((W) >> 8) & 0xFF) +#define LOBYTE(W) ((W) & 0xFF) +#define MAKEWORD(low,high) \ + ((WORD)(((BYTE)(low)) | ((WORD)((BYTE)(high))) << 8)) + +#endif //end win32 + +#undef HIWORD +#ifndef HIWORD +#define HIWORD(dw) ((dw)>>16) +#endif + +#undef LOWORD +#ifndef LOWORD +#define LOWORD(dw) ((dw)&0xffff) +#endif + +#undef MAKEDWORD + +#ifndef MAKEDWORD +#define MAKEDWORD(hw,lw) (((hw)<<16)|(lw)) +#endif + +#ifdef __cplusplus +} +#endif +#endif + diff --git a/coreseek/mmseg-3.2.14/src/csr_utils.lo b/coreseek/mmseg-3.2.14/src/csr_utils.lo new file mode 100644 index 0000000..b41199c --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/csr_utils.lo @@ -0,0 +1,12 @@ +# csr_utils.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/csr_utils.o' + +# Name of the non-PIC object +non_pic_object='csr_utils.o' + diff --git a/coreseek/mmseg-3.2.14/src/csr_utils.o b/coreseek/mmseg-3.2.14/src/csr_utils.o new file mode 100644 index 0000000..bd0dad1 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/csr_utils.o differ diff --git a/coreseek/mmseg-3.2.14/src/css/ICorpusReader.h b/coreseek/mmseg-3.2.14/src/css/ICorpusReader.h new file mode 100755 index 0000000..6932f5f --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/ICorpusReader.h @@ -0,0 +1,51 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef css_ICorpusReader_h +#define css_ICorpusReader_h + + +namespace css { + +class ICorpusReader { + + public: + + + /** + * Load Corpus file into memory. + * @param filename, the filename to be load. + * @param type must be NULL + */ + virtual int open(const char* filename, const char* type = NULL) = 0; + + virtual long count() = 0; + +public: + // virtual destructor for interface + virtual ~ICorpusReader() { } +}; + +} /* End of namespace css */ +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/SegmentPkg.cpp b/coreseek/mmseg-3.2.14/src/css/SegmentPkg.cpp new file mode 100755 index 0000000..6836404 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/SegmentPkg.cpp @@ -0,0 +1,444 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include "csr_typedefs.h" +#include "SegmentPkg.h" +#include +//#include +#include +#include "Segmenter.h" +#include "csr_assert.h" + +namespace css { + +void ChineseCharTaggerImpl::init() { + /** + table format. 3part. + 1 ASCII < 256 + 2 CJK u'\u4e00' < x < u'\u9fff' + 3 Symbols 0xFF?? and iCode >= 0x3000)&&(iCode <= 0x303F + 2 -> CJK part. 81 entry [9f-4e], each entry is 256 size. so the offset is [(high-byte - 4E) * 256 + low-byte] + total size is 256*(9f-4e) + */ + u1 ansipage[]= { + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + 's', 'w', 'w', 's', 's', 's', 's', 'w', + 's', 's', 's', 's', 'w', 's', 'w', 's', + 'm', 'm', 'm', 'm', 'm', 'm', 'm', 'm', + 'm', 'm', 'w', 'w', 's', 's', 's', 'w', + 's', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 's', 's', 's', 's', 's', + 's', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 's', 's', 's', 's', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', '\0', + }; + //0xFF?? + u1 sym1[]= { + '\0', 'w', 'w', 's', 's', 's', 's', 'w', + 's', 's', 's', 's', 'w', 's', 's', 's', + 'm', 'm', 'm', 'm', 'm', 'm', 'm', 'm', + 'm', 'm', 'w', 's', 's', 's', 's', 'w', + 's', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 's', 's', 's', 's', 's', 's', + 'w', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e', + 'e', 'e', 's', 's', 's', 's', 's', 's', + 's', 's', 's', 's', 's', 's', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', 's', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + }; + // 0x30?? + u1 sym2[]= { + 's', 's', 'w', 'w', 's', 's', 's', 'm', + 's', 's', 's', 's', 's', 's', 's', 's', + 's', 's', 's', 's', 's', 's', 's', 's', + 's', 's', 's', 's', 's', 's', 's', 's', + 's', 's', 's', 's', 's', 's', 's', 's', + 's', 's', 's', 's', 's', 's', 's', 's', + 's', 's', 's', 's', 's', 's', 's', 's', + 's', 's', 's', 's', 's', 's', 's', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', + }; + //unicode Chinese number + u2 chs_number[] ={ + 0x4e00, 0x4e03, 0x4e09, 0x4e2a, 0x4e07, 0x9646, 0x4e5d, 0x767e, 0x8086, 0x4e8c, + 0x4e94, 0x4ebf, 0x56db, 0x4edf, 0x96f6, 0x58f9, 0x62fe, 0x4f0d, 0x8d30, 0x5341, + 0x5343, 0x5146, 0x634c, 0x516b, 0x516d, 0x4f70, 0x7396, 0x53c1, 0x67d2 + }; + memset(index_map,0,sizeof(index_map)); + memcpy(ansi_map,ansipage,sizeof(ansipage)); + index_map[0] = ansi_map; + u1* sym = new u1[256]; + memcpy(sym,sym2,sizeof(sym2)); //0x30 + index_map[0x30] = sym; + sym = new u1[256]; + memcpy(sym,sym1,sizeof(sym1)); //0xff + index_map[0xFF] = sym; + //make cjk-map + for(int i=0; i< sizeof(chs_number)/sizeof(u2); i++){ + u1 idx = chs_number[i]>>8; + u1* ptr = index_map[idx]; + if(!ptr) { + ptr = new u1[256]; + memset(ptr,0,256); + index_map[idx] = ptr; + } + ptr[(u1)chs_number[i]] = 'n'; //change tag from m -> n used by pure Chinese number + } + //unicode Chinese Symb + //0x2018-0x201f && 0x2025-0x2027 && 0x2032-0x2037, //Not in Chinese Char range, used as sep. Generation Sep. + //# NOTE 0x22xx, 0x23xx is number symbol, + { + u1* ptr = new u1[256]; + memset(ptr,'s',256); + index_map[0x22] = ptr; + index_map[0x23] = ptr; + + ptr = new u1[256]; + memset(ptr,0,256); + for(u2 i = 0x2018; i<= 0x201f; i++) + ptr[(u1)i] = 'w'; + for(u2 i = 0x2025; i<= 0x2027; i++) + ptr[(u1)i] = 'w'; + for(u2 i = 0x2032; i<= 0x2037; i++) + ptr[(u1)i] = 'w'; + index_map[0x20] = ptr; + } +} +/** +if fact we use low-byte only, high byte is reserved. +*/ +u2 ChineseCharTaggerImpl::tagUnicode(u2 iCode, u1 length){ + //check length +#ifdef DEBUG + ASSERT(length<4); +#else + if(length>3) + return 0; +#endif + //u'\u4e00' < >8; + if(index_map[idx]) { + c_type = index_map[idx][(u1)iCode]; + } + + if(c_type) + goto DONE; + + if ((iCode >= 0x4E00)&&(iCode <= 0x9FA5)) //Chinese Char + c_type = 'c'; + else + if((iCode >= 0x3000)&&(iCode <= 0x303F)) //Chinese Symbols and Punctuation + c_type = 's'; + else //Unknown char. + c_type = 'u'; + if(c_type) + goto DONE; + + return 0; +DONE: + return flags[length-1]|(c_type - 'a' + 1); +} + + +SegmentPkg::SegmentPkg() +// don't delete the following line as it's needed to preserve source code of this autogenerated element +// section 127-0-0-1-20b1ad92:11734020486:-8000:0000000000000918 begin +{ + init(); +} +void SegmentPkg::init() +{ + m_length = 0; + m_buf = NULL; + m_tag = NULL; + m_size = 0; + m_remains_bytes = 0; + m_used = 0; + m_Own = 1; + m_tagger = ChineseCharTagger::Get(); +} +// section 127-0-0-1-20b1ad92:11734020486:-8000:0000000000000918 end +// don't delete the previous line as it's needed to preserve source code of this autogenerated element + +SegmentPkg::~SegmentPkg() +{ + if(m_buf) + free((void*)m_buf); + m_buf = NULL; + if(m_tag) + free((void*)m_tag); + m_tag = NULL; +} + +/*********************************************************************************/ +/* Note:We do NOT needs the iCode(UCS2), for we use UTF-8 as key lookup in dict. */ +/* Change m_wTagList as a side effect +/*********************************************************************************/ +//the total offset of buf[0] +int SegmentPkg::tagData(const char* buf, u1* tag, int l, int offset) +{ + int length = l; + if(!length) + length = (int)strlen(buf); + /* + Utf8_Iter iter8; + iter8.set((const unsigned char*)buf,length,Utf8_16::eUtf16LittleEndian); + for (; iter8; ++iter8) { + if (iter8.canGet()) { + u2 val = iter8.get(); + //check the unicode value. + } + }*/ + const char* tm_pCur = buf; + const char* tm_pCurFine = buf; + const char* tm_pEnd = &buf[length]; + u1* tm_pTagCur = tag; + u2 iCode = 0; + for ( ;(tm_pCur-buf)tagUnicode(iCode,1); + if ((*tm_pTagCur&0x3F) == ('w' - 'a' + 1)) //check tag is w + m_wTagList.push_back(offset + tm_pTagCur - tag); + tm_pCurFine = tm_pCur; + continue; + } + + // get number of bytes + int iBytes = 0, iBytesLength = 0; + while ( v & 0x80 ) { iBytes++; v <<= 1; } + + // check for valid number of bytes + if ( iBytes<2 || iBytes>4 ) + continue; + + iCode = ( v>>iBytes ); + iBytesLength = iBytes; + iBytes--; + do + { + if ( !(*tm_pCur) ) + break; + if ( ((*tm_pCur) & 0xC0)!=0x80 ) + break; + + iCode = ( iCode<<6 ) + ( (*tm_pCur) & 0x3F ); + iBytes--; + tm_pCur++; + if(tm_pEnd == tm_pCur) + break; + } while ( iBytes ); + + // return code point if there were no errors + // ignore and continue scanning otherwise + if(iCode == 0xFEFF) { //win32's utf-8 text header. + m_used = iBytesLength; + continue; + } + if ( !iBytes ) { + *tm_pTagCur = (u1)m_tagger->tagUnicode(iCode,iBytesLength); + u1 t1 = 'w'; + u1 t2 = (*tm_pTagCur&0x3F); + if ((*tm_pTagCur&0x3F) == ('w' - 'a' + 1)) + m_wTagList.push_back(offset + tm_pTagCur - tag); + tm_pCurFine = tm_pCur; + } + } + + ///FIXME: Count token(char) type only once might be a bit faster? + /* + u1* tm_pTagPtr = tag; + u1* tm_pTagPrevPtr = NULL; + u1 prev_tag = 0; + while(tm_pTagPtr !=tm_pTagCur) { + if (*tm_pTagPtr) { + //here is a char. + u1 tag = (*tm_pTagPtr)&0x3F; //0011 1111 + if(tag == 'm' || tag == 'e') { + //NOTE: we do not treate 'n' tag(Chinese number now). + if(prev_tag != tag) { //char type changed + } + }//end if tag. + } + tm_pTagPtr ++; + } + */ + return (int)(length - (tm_pCurFine - buf)); +} + +int SegmentPkg::tagData(const char* buf,int length) +{ + return tagData(buf,&m_tag[m_length-m_remains_bytes],length); +} + +int SegmentPkg::feedData(const char* buf,int length ) +{ + //check is enough + if((m_size - m_length) > (length+1)){ + //good.enough space + memcpy((void*)&m_buf[m_length],buf,length*sizeof(char)); + m_remains_bytes = tagData(&m_buf[m_length-m_remains_bytes],&m_tag[m_length-m_remains_bytes], + length+m_remains_bytes, m_length-m_remains_bytes); + m_length += length; + return 0; + }else + if(m_length==0){ + //new pkg, realloc. + //check is larger than default length. + if(DEFAULT_PACKAGE_LENGTH < length){ + m_buf = (char*)malloc(length+1); + m_tag = (u1*)malloc((length+1)*sizeof(u1)); + m_size = length + 1; + }else{ + m_buf = (char*)malloc(DEFAULT_PACKAGE_LENGTH+1); + m_tag = (u1*)malloc((DEFAULT_PACKAGE_LENGTH+1)*sizeof(u1)); + + m_size = DEFAULT_PACKAGE_LENGTH+1; + } + if(!m_buf||!m_tag) + throw std::bad_alloc(); + memcpy((void*)m_buf,buf,length*sizeof(char)); + memset(m_tag,0,sizeof(u1)*(m_size)); + m_used = 0; + m_remains_bytes = tagData(buf,length); + m_length = length; + return 0; + }else{ + //not a new pkg, and new arrived data is larger than new feed data. + } + //can not append data to current pkg. + return -1; +} + +void SegmentPkg::setSize(int length) +{ + if(m_buf && m_size > length) + return; + //clear + if(m_buf) + free((void*)m_buf); + m_buf = NULL; + if(m_tag) + free((void*)m_tag); + m_tag = NULL; + //create new + if(DEFAULT_PACKAGE_LENGTH < length){ + m_buf = (char*)malloc(length+1); + m_tag = (u1*)malloc((length+1)*sizeof(u1)); + m_size = length + 1; + }else{ + m_buf = (char*)malloc(DEFAULT_PACKAGE_LENGTH+1); + m_tag = (u1*)malloc((DEFAULT_PACKAGE_LENGTH+1)*sizeof(u1)); + + m_size = DEFAULT_PACKAGE_LENGTH+1; + } + m_length = 0; + m_used = 0; +} + +} /* End of namespace css */ + diff --git a/coreseek/mmseg-3.2.14/src/css/SegmentPkg.h b/coreseek/mmseg-3.2.14/src/css/SegmentPkg.h new file mode 100755 index 0000000..72ec093 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/SegmentPkg.h @@ -0,0 +1,128 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef css_SegmentPkg_h +#define css_SegmentPkg_h +#include +#define HAVE_ATEXIT +#include "Singleton.h" +#include "csr_typedefs.h" + +namespace css { + +/* +- find char-class +- tolower case(optional, used in search.). +*/ +class ChineseCharTaggerImpl +{ +public: + ChineseCharTaggerImpl(){ + init(); + } + + ~ChineseCharTaggerImpl(){ + for(int i=1; i<256; i++) { + if(i == 0x23) + continue; + if(index_map[i]) + delete[] index_map[i]; + } + }; + u2 tagUnicode(u2 iCode, u1 length); +protected: + void init(); + //We reduced the map. only number-char page is exist + //char cjk_map[20736]; // 256*(9f-4e) = 21k + u1* index_map[256]; + u1 ansi_map[256]; + //char sym_map[512]; // 0x3000 - 0x303F && 0xFF?? +}; + +typedef CSR_Singleton ChineseCharTagger; + +#include "tolowercase.h" + +/*To lower +*/ +class ToLowerImpl +{ +public: + ToLowerImpl(){}; + inline u2 toLower(u2 k){ + u1 idx = k>>8; + u2 iCode = k; + if(table_index[idx]) + iCode = table_index[idx][k&0xFF]; + if(iCode) + return iCode; + return k; + } +}; + +typedef CSR_Singleton ToLower; + +class SegmentPkg { + +public: + + SegmentPkg(); + ~SegmentPkg(); + void init(); +public: + const char* m_buf;//make the hole object less than 64k + u1* m_tag; + int m_length; // used length + u1 m_Own; + int m_size; //total length + int m_used; + u1 m_remains_bytes; + std::vector m_wTagList; //the seps position. + + ChineseCharTaggerImpl* m_tagger; + +public: + /** + @return 0, appended. + @return -1, too large + NOTE: a newly created pkg always return 0. except not enough memory.(throw std::bad_alloc) + */ + int feedData(const char* buf,int length); + int tagData(const char* buf,int length); + void setSize(int length); +public: + /** + * read UTF-8 input can tagger the char-pos in tag array. tag length must equal or larger than buf. + * we assume buf is end with '\0' + * and this function will changed m_wTagList as a side effect. + * @return, the data remains untagged. must less than 3. + */ + int tagData(const char* buf, u1* tag, int length = 0, int offset = 0); + +protected: + const static int DEFAULT_PACKAGE_LENGTH = 65400; +}; + +} /* End of namespace css */ +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/Segmenter.h b/coreseek/mmseg-3.2.14/src/css/Segmenter.h new file mode 100755 index 0000000..4503327 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/Segmenter.h @@ -0,0 +1,180 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef css_Segmenter_h +#define css_Segmenter_h + +#include +#ifdef WIN32 +#include +#else +#include +#endif +#include "SegmentPkg.h" +#include "UnigramDict.h" +#include "SynonymsDict.h" +#include "csr_typedefs.h" +#include "freelist.h" +#include "mmthunk.h" + +#include +#include +#include + +#include "UnigramCorpusReader.h" + +#include "ThesaurusDict.h" + +namespace css { +using namespace CRFPP; +#ifdef WIN32 +using namespace stdext; +#else +using namespace __gnu_cxx; +#endif + +#define CRFDICT_UTF8 1 + +#define BEGIN_TOKEN "b##b" +#define END_TOKEN "e##e" +#define NUMBER_TOKEN "M" +#define ASCII_TOKEN "E" + +#define BEGIN_TOKEN_ID 0 +#define END_TOKEN_ID 1 +#define NUMBER_TOKEN_ID 2 +#define ASCII_TOKEN_ID 3 + +#define BEGIN_TOKEN_LENGTH 4 +#define END_TOKEN_LENGTH 4 +#define NUMBER_TOKEN_LENGTH 1 +#define ASCII_TOKEN_LENGTH 1 + +/* +base functor, used to abstract n-gram smoothing algorithm +Design only. not used yet. +*/ +template +struct NgramSmoother{ + FType operator()(int L, int R, int Bi, FType Smoothing) const + { + double dTemp = 1.0 /MAX_FREQUENCE; + return (-1)*log(Smoothing*(1+L)/(MAX_FREQUENCE+80000)+(1-Smoothing)*((1-dTemp)*Bi/(1+L)+dTemp)); + return 0; + } + const static int MAX_FREQUENCE = 2079997; +}; + +/** +Bit flag format: +Bit flag is used in char-type tagging. size = sizeof(char). +x1 x2 x3 x4 x5 x6 x7 +x1 x2, the utf-8 char's position token +1 1, the next 2(or 4) char is token-length. (utf-8 data length) +0 0, only current char +0 1, next char +1 0, next 2 char +1 1, more than 3 char, read next 2 byte. this limited a token can not larger than 64k. +------ +[0-80], the standard ascii char, +tag-set: +m: number +e: non CJK char, e.g. English pinyin +t: time. ֧ȣ˴ʶ󣬽 oov ʵʷִʣ +c: CJK char. +s: Symbol e.g. @ +w: Sentence seperator. +x: unknown char. +*/ + +class Segmenter_ConfigObj { +public: + u1 merge_number_and_ascii; + u1 seperate_number_ascii; + //TODO: compress_space is still unsupported, for spaces can be handled in stopword list. + u1 compress_space; + u1 number_and_ascii_joint[512]; + Segmenter_ConfigObj(): + merge_number_and_ascii(0), + seperate_number_ascii(0), + compress_space(0) + { + number_and_ascii_joint[0] = 0; + } +}; + +class Segmenter { + + public: + + + /** + * @return 0 + */ + void setBuffer(u1* buf, u4 length); + const u1* peekToken(u2& aLen, u2& aSymLen, u2 n = 0); + void popToken(u2 len, u2 n = 0); + void segNgram(int n) { m_ngram = n; } + int getOffset(); + u1 isSentenceEnd(); + int isKeyWord(u1* buf, u4 length); + int getWordWeight(u1* buf, u4 length); + + const char* thesaurus(const char* key, u2 key_len); + Segmenter(); + ~Segmenter(); + +protected: + const u1* peekKwToken(u2& aLen, u2& aSymLen); + void popKwToken(u2 len); +public: + static int toLowerCpy(const u1* src, u1* det, u2 det_size); +protected: + int m_begin_id; + int m_end_id; + int m_begin_count; + int m_end_count; + int m_ngram; + + ChineseCharTaggerImpl* m_tagger; + MMThunk m_thunk; + //static ToLowerImpl* m_lower; +public: + + UnigramDict * m_unidict; + UnigramDict * m_kwdict; + UnigramDict * m_weightdict; + SynonymsDict * m_symdict; + ThesaurusDict * m_thesaurus; + + Segmenter_ConfigObj* m_config; + //mmseg used. + u1* m_buffer_begin; + u1* m_buffer_ptr; + u1* m_buffer_chunk_begin; + u1* m_buffer_end; +}; + +} /* End of namespace css */ +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/SegmenterManager.cpp b/coreseek/mmseg-3.2.14/src/css/SegmenterManager.cpp new file mode 100755 index 0000000..6c9007a --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/SegmenterManager.cpp @@ -0,0 +1,203 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include "Segmenter.h" +#include "SegmenterManager.h" +extern "C"{ +#include "iniparser/iniparser.h" +} +namespace css { + + +const char g_ngram_unigram_dict_name[] = "uni.lib"; +const char g_kword_unigram_dict_name[] = "kw.lib"; +const char g_wordweight_unigram_dict_name[] = "weight.lib"; +const char g_synonyms_dict_name[] = "synonyms.dat"; +const char g_thesaurus_dict_name[] = "thesaurus.lib"; +const char g_config_name[] = "mmseg.ini"; +/** + * Return a newly created segmenter + */ + +Segmenter *SegmenterManager::getSegmenter( bool bFromPool) +{ + Segmenter* seg = NULL; + if(m_method == SEG_METHOD_NGRAM){ + if(bFromPool) + seg = seg_freelist_.alloc(); + else + seg = new Segmenter(); + //init seg + seg->m_unidict = &m_uni; + seg->m_symdict = &m_sym; + if(m_kw.isLoad()) + seg->m_kwdict = &m_kw; + if(m_weight.isLoad()) + seg->m_weightdict = &m_weight; + if(m_thesaurus.isLoad()) + seg->m_thesaurus = &m_thesaurus; + seg->m_config = &m_config; + } + return seg; +} + +void SegmenterManager::loadconfig(const char* confile) +{ + if(confile == NULL) + return; + dictionary * ini; + char * s; + int sl = 0; + //m_config + ini = iniparser_load(confile); + if (ini==NULL) { + return; // not exist or not a valid ini file + } + /* + u1 merge_number_and_ascii; + u1 seperate_number_ascii; + u1 compress_space; + u1 number_and_ascii_joint[512]; + */ + m_config.merge_number_and_ascii = + iniparser_getboolean(ini, "mmseg:merge_number_and_ascii", 0); + m_config.seperate_number_ascii = + iniparser_getboolean(ini, "mmseg:seperate_number_ascii", 0); + m_config.compress_space = + iniparser_getboolean(ini, "mmseg:compress_space", 0); + s = + iniparser_getstring(ini, "mmseg:number_and_ascii_joint", NULL); + if(s){ + sl = strlen(s); + if(sl>511){ + memcpy(m_config.number_and_ascii_joint,s,sl); + m_config.number_and_ascii_joint[511] = 0; + }else{ + memcpy(m_config.number_and_ascii_joint,s,sl); + m_config.number_and_ascii_joint[sl] = 0; + } + } +} + +int SegmenterManager::init(const char* path, u1 method) +{ + if( method != SEG_METHOD_NGRAM) + return -4; //unsupport segmethod. + + if( m_inited ) + return 0; //only can be init once. + + char buf[1024]; + memset(buf,0,sizeof(buf)); + if(!path) + memcpy(buf,".",1); + else + memcpy(buf,path,strlen(path)); + int nLen = (int)strlen(path); + //check is end. +#ifdef WIN32 + if(buf[nLen-1] != '\\'){ + buf[nLen] = '\\'; + nLen++; + } +#else + if(buf[nLen-1] != '/'){ + buf[nLen] = '/'; + nLen++; + } +#endif + m_method = method; + int nRet = 0; + + if(method == SEG_METHOD_NGRAM) { + seg_freelist_.set_size(64); + memcpy(&buf[nLen],g_ngram_unigram_dict_name,strlen(g_ngram_unigram_dict_name)); + nRet = m_uni.load(buf); + + if(nRet!=0){ + printf("Unigram dictionary load Error\n"); + return nRet; + } + //no needs to care kwformat + memcpy(&buf[nLen],g_kword_unigram_dict_name,strlen(g_kword_unigram_dict_name)); + buf[nLen+strlen(g_kword_unigram_dict_name)] = 0; + nRet = m_kw.load(buf); + if(nRet!=0 && nRet!=-1 ){ + //m_kw not exist or format error. + printf("Keyword dictionary load Error\n"); + return nRet; + } + + //try to load weight dict + memcpy(&buf[nLen],g_wordweight_unigram_dict_name,strlen(g_wordweight_unigram_dict_name)); + buf[nLen+strlen(g_wordweight_unigram_dict_name)] = 0; + nRet = m_weight.load(buf); + if(nRet!=0 && nRet!=-1 ){ + //m_kw not exist or format error. + printf("Keyword dictionary load Error\n"); + return nRet; + } + + memcpy(&buf[nLen],g_synonyms_dict_name,strlen(g_synonyms_dict_name)); + buf[nLen+strlen(g_synonyms_dict_name)] = 0; + //load g_synonyms_dict_name, we do not care the load in right or not + nRet = m_sym.load(buf); + if(nRet!=0 && nRet != -1){ + printf("Synonyms dictionary format Error\n"); + } + + memcpy(&buf[nLen],g_thesaurus_dict_name,strlen(g_thesaurus_dict_name)); + buf[nLen+strlen(g_thesaurus_dict_name)] = 0; + //load g_synonyms_dict_name, we do not care the load in right or not + nRet = m_thesaurus.load(buf); + if(nRet!=0 && nRet != -1){ + printf("Thesaurus dictionary format Error\n"); + } + + //read config + memcpy(&buf[nLen],g_config_name,strlen(g_config_name)); + buf[nLen+strlen(g_config_name)] = 0; + loadconfig(buf); + + nRet = 0; + m_inited = 1; + return nRet; + } + return -1; +} + +void SegmenterManager::clear() +{ + seg_freelist_.free(); +} +SegmenterManager::SegmenterManager() + :m_inited(0) +{ + m_method = SEG_METHOD_NGRAM; +} +SegmenterManager::~SegmenterManager() +{ + clear(); +} +} /* End of namespace css */ + diff --git a/coreseek/mmseg-3.2.14/src/css/SegmenterManager.h b/coreseek/mmseg-3.2.14/src/css/SegmenterManager.h new file mode 100755 index 0000000..e27e0ba --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/SegmenterManager.h @@ -0,0 +1,73 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef css_SegmenterManager_h +#define css_SegmenterManager_h + +#include +#include "freelist.h" + +#include "UnigramDict.h" +#include "SynonymsDict.h" +#include "ThesaurusDict.h" +#include "Segmenter.h" + +namespace css { + + //class CrfSegmenter; +using namespace CRFPP; + /** @author Monan Li + */ +class SegmenterManager { + /* {TemplatePath=D:\cos\deps\Segment\doc\}*/ + public: + /** + * Return a newly created segmenter + */ + Segmenter *getSegmenter( bool bFromPool = true); + + virtual int init(const char* path, u1 method = SEG_METHOD_NGRAM); + void loadconfig(const char* confile); + void clear(); + + SegmenterManager(); + virtual ~SegmenterManager(); + const char* what_(){ return m_msg; } +public: + const static u1 SEG_METHOD_NGRAM = 0x1; +protected: + CRFPP::FreeList seg_freelist_; + UnigramDict m_uni; + UnigramDict m_kw; + UnigramDict m_weight; + SynonymsDict m_sym; + ThesaurusDict m_thesaurus; + Segmenter_ConfigObj m_config; + u1 m_method; + u1 m_inited; + char m_msg[1024]; +}; + +} /* End of namespace css */ +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/SynonymsDict.cpp b/coreseek/mmseg-3.2.14/src/css/SynonymsDict.cpp new file mode 100755 index 0000000..3872e8c --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/SynonymsDict.cpp @@ -0,0 +1,344 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include + +#include "UnigramCorpusReader.h" +#include "SynonymsDict.h" + +namespace css { + +const char head_mgc[] = "SYMD"; + +typedef struct _csr_crfdict_fileheader_tag{ + char mg[4]; + short version; + short reserve; + int darts_size; + int pool_size; +}_csr_synonymsdict_fileheader; + +int SynonymsDict::load(const char* filename) +{ + m_file = csr_mmap_file(filename,1); + if(!m_file) + return -1; //can not load dict. + csr_offset_t tm_size = csr_mmap_size(m_file); + u1* ptr = (u1*)csr_mmap_map(m_file); + u1* ptr_end = ptr + tm_size; + _csr_synonymsdict_fileheader* head_ = (_csr_synonymsdict_fileheader*)ptr; + if(strncmp(head_->mg,head_mgc,4) == 0) { + if(head_->version == 1) { + ptr += sizeof(_csr_synonymsdict_fileheader); + if(ptr >= ptr_end) return -4; //file broken. + array_ = (_csr_sybarray_trie*)ptr; + ptr += sizeof(_csr_sybarray_trie)* head_->darts_size; + if(ptr >= ptr_end) return -4; //file broken. + string_pool = (char*)ptr; + ptr += sizeof(char)*head_->pool_size; + if(ptr > ptr_end) return -4; //file broken. + }else{ + return -2; //unsupported version. + } + }else + return -3; //bad format + + return 0; +} + +std::string trimmed ( std::string const& str ///< the original string + , char const* sepSet ///< C string with characters to be dropped + ) +{ + std::string::size_type const first = str.find_first_not_of(sepSet); + return ( first==std::string::npos ) + ? std::string() + : str.substr(first, str.find_last_not_of(sepSet)-first+1); +} + +int SynonymsDict::import(const char* filename) +{ + std::istream *is; + //std::map rKeys; + //std::map lKeys; + is = new std::ifstream(filename); + + if (! *is) + return -1; + std::string line; + std::string lKey,rKey; + size_t offset = 1; + char txtHead[3] = {239,187,191}; + //load + while (std::getline(*is, line)) { + //for each line. + if(line.size()<4) + continue; + if(line[0]=='/' && line[1]=='/') + continue; + int pos = line.find("=>"); + if(pos == -1) + continue; //=>not found. + size_t lKey_offset = 0; + if(memcmp(line.c_str(),txtHead,sizeof(char)*3) == 0) + lKey = trimmed(line.substr(3,pos-3)," \t" ); + else + lKey = trimmed(line.substr(0,pos)," \t" ); + rKey = trimmed(line.substr(pos+2)," \t" ); + if(lKey.size() == 0 || rKey.size() == 0) + continue; + //all key loaded. + //check rKey + std::map::iterator it = rKeys.find(rKey); + + if(it == rKeys.end()) { + lKey_offset = offset; + rKeys.insert(std::map::value_type(rKey, offset)); + offset += rKey.size() + 1; //0 term + }else{ + lKey_offset = it->second; + + } + //check lKey + it = lKeys.find(lKey); + if(it == lKeys.end()) { + lKeys.insert(std::map::value_type(lKey, lKey_offset)); + }else{ + //dup left Keys! skip. + } + } //end while + //done + m_string_pool_size = offset; + + delete is; + + return 0; +} + +bool Cmp(const char *p1, const char * p2) +{ + u4 i = 0; + while(1) { + u1 pu1 = p1[i]; + u1 pu2 = p2[i]; + if(pu1 == pu2) { + if(pu1 == 0) + break; + i++; + }else{ + return pu1 < pu2; + } + } + return true; +} + +int SynonymsDict::save(const char* filename) +{ + _csr_synonymsdict_fileheader head; + //re-sort lKeys + std::vector keys; + for( std::map::iterator it = lKeys.begin(); + it != lKeys.end(); it++) { + //const std::string & str = it->first; + //char* ptr = &(str.data())[0]; + char* ptr = (char*)(&((*it).first)[0]); + keys.push_back(ptr); + } + std::sort(keys.begin(), keys.end(), Cmp); + m_da.clear(); + int nRet = m_da.build(keys.size(), &keys[0], 0, 0 ) ; + //build _csr_3dynarray_trie + size_t size_ = m_da.size();//the count of unit_t + array_ = new _csr_sybarray_trie[m_da.size()]; + memcpy(&head,head_mgc,sizeof(head_mgc)); + head.darts_size = m_da.size(); + head.version = 1; + head.reserve = 0; + head.pool_size = m_string_pool_size; + + const int* iArray = reinterpret_cast(m_da.array()); + for(size_t i=0;i(iArray[i*2]); + array_[i].check = static_cast(iArray[i*2+1]); + array_[i].offset = 0; + } + //fill offset + for( std::map::iterator it = lKeys.begin(); + it != lKeys.end(); it++) { + int id = exactMatchID(it->first.c_str()); + if(id > 0) + array_[id].offset = it->second; + else{ + printf("ERROR: mismatch\n"); + } + } + //do real save + { + //write header + std::FILE *fp = std::fopen(filename, "wb"); + std::fwrite(&head,sizeof(_csr_synonymsdict_fileheader),1,fp); + std::fwrite(array_,sizeof(_csr_sybarray_trie),head.darts_size,fp); + //write string-pool + char* buf = new char[head.pool_size]; + memset(buf,0,head.pool_size); + char null_char = 0; + + for( std::map::iterator it = rKeys.begin(); + it != rKeys.end(); it++) { + const std::string & str = it->first; + size_t offset = it->second; + memcpy(&buf[offset],str.c_str(),str.size()); + //std::fwrite(str.c_str(),sizeof(char),str.size(),fp); + //std::fwrite(&null_char,sizeof(char),1,fp); + } + std::fwrite(buf,sizeof(char),head.pool_size,fp); + std::fclose(fp); + delete[] buf; + } + //clear + delete[] array_; + return 0; +} + +int SynonymsDict::exactMatchID(const char* key) +{ + size_t len = strlen(key); + size_t node_pos = 0; + Result result; + set_result(result, -1, 0); + + //_csr_sybarray_trie* array_ = d_->array_; + register array_type_ b = array_[node_pos].base; + register array_u_type_ p; + u1 buf[3]; + u1 buf_size = 0; + for (register size_t i = 0; i < len; ++i) { + p = b +(node_u_type_)(key[i]) + 1; + if (static_cast(b) == array_[p].check) + b = array_[p].base; + else + return -1; + } + + p = b; + array_type_ n = array_[p].base; + if (static_cast(b) == array_[p].check && n < 0) + set_result(result, -n-1, (u1)len, p); + if(result.dict_id) + return result.dict_id; + return -1; +}; + +const char* SynonymsDict::maxMatch(const char* key, int &len) +{ + if(!array_) + return NULL; + + if (!len) len = strlen(key); + + Result result; + set_result(result, -1, 0); + + register array_type_ b = array_[0].base; //node_pos = 0; + register size_t num = 0; + register array_type_ n; + register array_u_type_ p; + + for (register size_t i = 0; i < len; ++i) { + p = b; // + 0; + n = array_[p].base; + if ((array_u_type_) b == array_[p].check && n < 0) { + // result[num] = -n-1; + //found a sub word + //if (num < result_len) set_result(result[num], -n-1, i , p); + set_result(result, -n-1, i , p); + ++num; + } + + p = b +(node_u_type_)(key[i]) + 1; + if ((array_u_type_) b == array_[p].check) + b = array_[p].base; + else{ + //found a mismatch + //return num; + goto DO_RESULT; + } + } + + p = b; + n = array_[p].base; + //total-string match. + if ((array_u_type_)b == array_[p].check && n < 0) { + //if (num < result_len) set_result(result[num], -n-1, len, p); + set_result(result, -n-1, len , p); + ++num; + } + +DO_RESULT: + if(num && result.dict_id){ + len = result.length; + size_t offset = array_[result.dict_id].offset; + return &string_pool[offset]; + } + return NULL; +} + +const char* SynonymsDict::exactMatch(const char* key, int aLen ) +{ + size_t len = aLen?aLen:strlen(key); + size_t node_pos = 0; + Result result; + set_result(result, -1, 0); + + //_csr_sybarray_trie* array_ = d_->array_; + register array_type_ b = array_[node_pos].base; + register array_u_type_ p; + u1 buf[3]; + u1 buf_size = 0; + for (register size_t i = 0; i < len; ++i) { + p = b +(node_u_type_)(key[i]) + 1; + if (static_cast(b) == array_[p].check) + b = array_[p].base; + else + return NULL; //not found + } + + p = b; + array_type_ n = array_[p].base; + if (static_cast(b) == array_[p].check && n < 0) + set_result(result, -n-1, (u1)len, p); + if(result.dict_id){ + size_t offset = array_[result.dict_id].offset; + return &string_pool[offset]; + //return result.dict_id; + } + + return NULL; +} + + +} /* End of namespace css */ + diff --git a/coreseek/mmseg-3.2.14/src/css/SynonymsDict.h b/coreseek/mmseg-3.2.14/src/css/SynonymsDict.h new file mode 100755 index 0000000..5a776de --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/SynonymsDict.h @@ -0,0 +1,106 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef css_SynonymsDict_h +#define css_SynonymsDict_h + +#include +#include +#include "darts.h" +#include "csr_mmap.h" + +namespace css { + + typedef struct _csr_sybarray_trie_tag{ + i4 base; + u4 check; + //u4 flag; //used to tell how may features. only low-4bit used now. + size_t offset; //the base offset. + }_csr_sybarray_trie; + + /** + * How to find item fast is a real problem here. + * @return the string(utf-8,encoded) of the id. + */ +class SynonymsDict { + + public: + typedef Darts::DoubleArray::result_pair_type result_pair_type; + typedef struct _tag_result_pair_type { + i4 value; + u1 length; + i4 dict_id; + }Result; + + public: + SynonymsDict():m_file(NULL),array_(NULL){ + string_pool = NULL; + }; + virtual ~SynonymsDict(){ + if(m_file){ + csr_munmap_file(m_file); + } + } + + virtual int load(const char* filename); + + virtual int import(const char* filename); + + virtual int save(const char* filename); + + virtual const char* exactMatch(const char* key, int len = 0); + virtual const char* maxMatch(const char* key, int &len); + +protected: + _csr_mmap_t* m_file; + Darts::DoubleArray m_da; + std::map rKeys; + //std::set rKeys; + std::map lKeys; + + size_t m_string_pool_size; + _csr_sybarray_trie * array_; + const char* string_pool; + + typedef i4 array_type_; + typedef u4 array_u_type_; + typedef u1 node_u_type_; + + inline void set_result(Result& x, i4 r, u1 l) { + x.value = r; + x.length = l; + x.dict_id = 0; + } + inline void set_result(Result& x, i4 r, u1 l,i4 id) { + x.value = r; + x.length = l; + x.dict_id = id; + } + +protected: + int exactMatchID(const char* key); +}; + +} /* End of namespace css */ +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/ThesaurusDict.cpp b/coreseek/mmseg-3.2.14/src/css/ThesaurusDict.cpp new file mode 100755 index 0000000..3323a70 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/ThesaurusDict.cpp @@ -0,0 +1,185 @@ +#include +#include +#include + +#include "UnigramCorpusReader.h" +#include "ThesaurusDict.h" + +namespace css { + +/* + ThesaurusDict::ThesaurusDict () {}; + virtual ~ThesaurusDict () {}; +*/ + +const char thdt_head_mgc[] = "THDT"; + +typedef struct _csr_thesaurusdict_fileheader_tag{ + char mg[4]; + short version; + short reserve; + int darts_size; + int pool_size; +}_csr_thesaurusdict_fileheader; + +int ThesaurusDict::load(const char* filename) +{ + m_file = csr_mmap_file(filename,1); + if(!m_file) + return -1; //can not load dict. + csr_offset_t tm_size = csr_mmap_size(m_file); + u1* ptr = (u1*)csr_mmap_map(m_file); + u1* ptr_end = ptr + tm_size; + + _csr_thesaurusdict_fileheader* head_ = (_csr_thesaurusdict_fileheader*)ptr; + if(strncmp(head_->mg,thdt_head_mgc,4) == 0) { + if(head_->version == 1) { + ptr += sizeof(_csr_thesaurusdict_fileheader); + if(ptr >= ptr_end) return -4; //file broken + m_da.clear(); + m_da.set_array(ptr,head_->darts_size); + ptr += m_da.unit_size()*head_->darts_size; + if(ptr >= ptr_end) return -4; //file broken. + m_stringpool = ptr; + ptr += head_->pool_size; + if(ptr > ptr_end) return -4; //file broken. + }else{ + return -2; + } + }else + return -3; //bad format + + return 0; +} + +bool Cmp(const ThesaurusRecord *p1, const ThesaurusRecord *p2) +{ + char i = 0; + while(1) { + unsigned char pu1 = p1->key[i]; + unsigned char pu2 = p2->key[i]; + if(pu1 == pu2) { + if(pu1 == 0) + break; + i++; + }else{ + return pu1 < pu2; + } + } + return true; +} + +int ThesaurusDict::import(const char* filename, const char* target_file) +{ + std::vector< ThesaurusRecord* > items; + std::istream *is; + int n = 0; + int string_bufsize = 0; + + if (filename == "-") { + is = &std::cin; + } else { + is = new std::ifstream(filename); + } + if (! *is) + return -1; + + std::string line; + std::string key; + while (std::getline(*is, line)) { + if(n%2){ + n++; + // + //the value row + ThesaurusRecord* tr = new ThesaurusRecord; //FIXME: should free, but who care + tr->key = key; + memset(tr->value,0,sizeof(tr->value)); + memcpy(tr->value,&line.c_str()[1], line.length()-1); + tr->length = (u2)line.length(); + u1* ptr = tr->value; + + while(*ptr != '\0') { + if(*ptr == ',') + *ptr = '\0'; + ptr++; + } + + items.push_back(tr); + string_bufsize += (int)line.length() ; //append addtional \0's space + continue; + } + + key = line; + n++; + } + + if (filename != "-") { + delete is; + } + u1* total_buf = (u1*)malloc(string_bufsize); + memset((void*)total_buf, 0, string_bufsize); + u1* total_buf_ptr = total_buf; + //read complete, try make dict + std::sort(items.begin(), items.end(), Cmp); + { + std::vector key; + std::vector value; + + size_t i = 0; + for(i=0;ikey[0]; + key.push_back(ptr); + memcpy(total_buf_ptr, rec->value, rec->length); + value.push_back((int)(total_buf_ptr - total_buf)); //value is the string_pool's offset + total_buf_ptr += rec->length; + //process buf + } + //build the dart + m_da.clear(); + //1st 0 is the length array. + //return m_da.build(key.size(), &key[0], 0, 0, &progress_bar) ; + int nRet = m_da.build(key.size(), &key[0], 0, &value[0] ) ; + //should check the nRet value + //try save file + std::string dest_file = "thesaurus.lib"; + size_t size_ = m_da.size(); + const void* iArray = m_da.array(); + _csr_thesaurusdict_fileheader head; + memcpy(&head,thdt_head_mgc,sizeof(thdt_head_mgc)); + head.darts_size = size_; + head.version = 1; + head.reserve = 0; + head.pool_size = string_bufsize; + + std::FILE *fp = NULL; + if(target_file) + fp = std::fopen(target_file, "wb"); + else + fp = std::fopen(dest_file.c_str(), "wb"); + + std::fwrite(&head,sizeof(_csr_thesaurusdict_fileheader),1,fp); + std::fwrite(iArray, m_da.unit_size(), size_, fp); + std::fwrite(total_buf, sizeof(u1), string_bufsize, fp); + std::fclose(fp); + } + + //free it + free((void*)total_buf); + return 0; +} + +const char* ThesaurusDict::find(const char* key, u2 key_len ,int *count) +{ + //the return string buffer might contains 0, end with \0\0 + Darts::DoubleArray::result_pair_type rs; + m_da.exactMatchSearch (key,rs, key_len); + if(rs.pos && rs.value >= 0) { + size_t offset = rs.value; + return (const char*)&m_stringpool[offset]; + } + return NULL; +} + + +} //end css diff --git a/coreseek/mmseg-3.2.14/src/css/ThesaurusDict.h b/coreseek/mmseg-3.2.14/src/css/ThesaurusDict.h new file mode 100755 index 0000000..7e5f6ae --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/ThesaurusDict.h @@ -0,0 +1,49 @@ +#ifndef THESAURUS_DICT_h +#define THESAURUS_DICT_h + +#include +#include + +namespace css { +//using namespace CRFPP; +#ifdef WIN32 +using namespace stdext; +#else +using namespace __gnu_cxx; +#endif + +#include "darts.h" +#include "csr.h" +#include "csr_mmap.h" + +class ThesaurusRecord { +public: + std::string key; + u1 value[1024]; + u2 length; +}; + +class ThesaurusDict { + + public: + typedef Darts::DoubleArray::result_pair_type result_pair_type; + ThesaurusDict () :m_stringpool(NULL){}; + virtual ~ThesaurusDict () {}; + + public: + virtual int load(const char* filename); + int import(const char* filename, const char* target_file = NULL); + const char* find(const char* key,u2 key_len , int *count = NULL); //the return string buffer might contains 0, end with \0\0 + int isLoad() + { + return m_da.array() != NULL; + } +protected: + _csr_mmap_t* m_file; + u1* m_stringpool; + Darts::DoubleArray m_da; +}; + + +} /* End of namespace css */ +#endif diff --git a/coreseek/mmseg-3.2.14/src/css/UnigramCorpusReader.cpp b/coreseek/mmseg-3.2.14/src/css/UnigramCorpusReader.cpp new file mode 100755 index 0000000..44c931b --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/UnigramCorpusReader.cpp @@ -0,0 +1,159 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include + +#include "UnigramCorpusReader.h" +#include "UnigramRecord.h" +#include "csr_utils.h" +#include "Utf8_16.h" + +namespace css { + +using namespace csr; + +UnigramRecord *UnigramCorpusReader::getAt(int idx) +{ + if(idx >=0 &&idx +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef css_UnigramCorpusReader_h +#define css_UnigramCorpusReader_h + +#include +#include + +#include "ICorpusReader.h" +#include "UnigramRecord.h" + + +namespace css { + +class UnigramCorpusReader : virtual public ICorpusReader { + + public: + + virtual UnigramRecord* getAt(int idx); + + UnigramCorpusReader(); + + virtual int open(const char* filename, const char* type); + + virtual long count(); + + + protected: + std::string m_filename; + + + protected: + + /** + * all parsed unigram-record here + * @element-type UnigramRecord + */ + std::vector< UnigramRecord > m_items; +}; + +} /* End of namespace css */ +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/UnigramDict.cpp b/coreseek/mmseg-3.2.14/src/css/UnigramDict.cpp new file mode 100755 index 0000000..1334d65 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/UnigramDict.cpp @@ -0,0 +1,138 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include "UnigramCorpusReader.h" +#include "UnigramDict.h" + +namespace css { + + + +int UnigramDict::load(const char* filename) +{ + m_da.clear(); + return m_da.open(filename); +} + +/** + * This function should be used only, in Debug mode. + */ +std::string UnigramDict::getString(int id) +{ + return ""; +} + + +/** + * Find all word item in UnigramDict, which buf as a prefix + * @return total items found + */ +int UnigramDict::findHits(const char* buf, result_pair_type *result, size_t result_len, int keylen) +{ + if(!m_da.array()) + return 0; + int num = m_da.commonPrefixSearch(buf, result, result_len, keylen); + return num; +} + +int UnigramDict::import(UnigramCorpusReader &ur) +{ + std::vector key; + std::vector value; + int i = 0; + UnigramRecord* rec = NULL; + for(i=0;ikey[0]; + key.push_back(ptr); + value.push_back(rec->count); + } + }//end for + //build da + m_da.clear(); + //1st 0 is the length array. + //return m_da.build(key.size(), &key[0], 0, 0, &progress_bar) ; + return m_da.build(key.size(), &key[0], 0, &value[0] ) ; +} + +int UnigramDict::save(const char* filename) +{ + m_da.save(filename); + return 0; +} +int UnigramDict::isLoad() +{ + return m_da.array() != NULL; +} + +int UnigramDict::exactMatch(const char* key, int *id) +{ + Darts::DoubleArray::result_pair_type rs; + m_da.exactMatchSearch(key,rs); + if(id) + *id = rs.pos; + if(rs.pos) + return rs.value; + ///FIXME: this totaly a mixture. some single char's id > 0 if it in unigram input text, while other's id < 0 if not in ungram text. + ///so you can not just simply use UCS2 code as a char's id. + ///FIXED in prof. version by changing unigram-dictionary format. + //check is single char. + int len = strlen(key); + if(len<4){ + const char* tm_pCur = key; + char v = key[0]; + //might be single cjk char. + if ( v<128 && len == 1 && id) + *id = -1*(int)v; + // get number of bytes + int iBytes = 0, iBytesLength = 0; + while ( v & 0x80 ) { iBytes++; v <<= 1; } + if(iBytes == len && len != 1){ + //single char + tm_pCur ++; + int iCode = 0; + iCode = ( v>>iBytes ); + iBytes--; + do + { + if ( !(*tm_pCur) ) + break; + if ( ((*tm_pCur) & 0xC0)!=0x80 ) { + iCode = 0; + break; + } + iCode = ( iCode<<6 ) + ( (*tm_pCur) & 0x3F ); + iBytes--; + tm_pCur++; + } while ( iBytes ); + if(iCode && id) + *id = -1*iCode; + } + } + + return rs.value; +} + +} /* End of namespace css */ + diff --git a/coreseek/mmseg-3.2.14/src/css/UnigramDict.h b/coreseek/mmseg-3.2.14/src/css/UnigramDict.h new file mode 100755 index 0000000..638af58 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/UnigramDict.h @@ -0,0 +1,76 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef css_UnigramDict_h +#define css_UnigramDict_h + +#include + +#include "darts.h" + +namespace css { +class UnigramCorpusReader; +} /* End of namespace css */ + +namespace css { + + + /** + * How to find item fast is a real problem here. + * @return the string(utf-8,encoded) of the id. + */ +class UnigramDict { + + public: + typedef Darts::DoubleArray::result_pair_type result_pair_type; + UnigramDict() {}; + virtual ~UnigramDict() {}; + public: + + virtual int load(const char* filename); + virtual int isLoad(); + + /** + * This function should be used only, in Debug mode. + */ + virtual std::string getString(int id); + + + /** + * Find all word item in UnigramDict, which buf as a prefix + * @return total items found + */ + virtual int findHits(const char* buf, result_pair_type *result = NULL, size_t result_len = 0, int keylen = 0); + + virtual int import(UnigramCorpusReader &ur); + + virtual int save(const char* filename); + + virtual int exactMatch(const char* key, int *id = NULL); +protected: + Darts::DoubleArray m_da; +}; + +} /* End of namespace css */ +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/UnigramRecord.cpp b/coreseek/mmseg-3.2.14/src/css/UnigramRecord.cpp new file mode 100755 index 0000000..7134226 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/UnigramRecord.cpp @@ -0,0 +1,35 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include "UnigramRecord.h" + +namespace css { + + + +UnigramRecord::UnigramRecord() +{ + count = 0; +} + +} /* End of namespace css */ \ No newline at end of file diff --git a/coreseek/mmseg-3.2.14/src/css/UnigramRecord.h b/coreseek/mmseg-3.2.14/src/css/UnigramRecord.h new file mode 100755 index 0000000..2ed3e36 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/UnigramRecord.h @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef css_UnigramRecord_h +#define css_UnigramRecord_h + +#include +#include "csr.h" + + +namespace css { + +class UnigramRecord { + + public: + + UnigramRecord(); + + public: + std::string key; + unistring wkey; + int count; + +}; + +} /* End of namespace css */ +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/mmthunk.cpp b/coreseek/mmseg-3.2.14/src/css/mmthunk.cpp new file mode 100755 index 0000000..3fbe335 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/mmthunk.cpp @@ -0,0 +1,249 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include "csr_typedefs.h" +#include "mmthunk.h" + +namespace css { + + +void MMThunk::setItems(i4 idx, u2 rs_count, UnigramDict::result_pair_type* results) +{ + if(m_max_length < idx) + m_max_length = idx; + + u4 index = (idx % CHUNK_BUFFER_SIZE ) + base_offset; + item_info* item = item_list.alloc(); + item->freq = 0; + item->items.clear(); + for(u2 i = 0; i< rs_count; i++){ + item->freq += results[i].value; + item->items.push_back(results[i].length); + //if(i == rs_count - 1) + // item->length = results[i].length; + } + m_charinfos[idx] = item; + return; +} + +//set the potient key words. +void MMThunk::setKwItems(i4 idx, u2 rs_count, UnigramDict::result_pair_type* results) +{ + if(m_max_length < idx) + m_max_length = idx; + u4 index = (idx % CHUNK_BUFFER_SIZE ) + base_offset; + item_info* item = item_list.alloc(); + item->items.clear(); + for(u2 i = 0; i< rs_count; i++){ + item->freq += results[i].value; + item->items.push_back(results[i].length); + //if(i == rs_count - 1) + // item->length = results[i].length; + } + m_kwinfos[idx] = item; + return; +} + +u1* MMThunk::peekToken(u2& length) +{ + length = 0; + if(tokens.size()){ + length = tokens[0]; + //tokens.erase(tokens.begin()); + } + return NULL; +} + +u2 MMThunk::popupToken() +{ + u2 length = 0; + if(tokens.size()){ + length = tokens[0]; + m_length -= length; + tokens.erase(tokens.begin()); + } + return length; +} + +u1* MMThunk::peekKwToken(u2& pos, u2& length) +{ + if(m_max_length < m_kw_pos) + m_max_length = m_kw_pos; + + while(m_kw_pos <= m_max_length) { + u4 index = (m_kw_pos % CHUNK_BUFFER_SIZE ) + base_offset; + //clear kw_word + item_info* info_kw = m_kwinfos[index]; + if(info_kw) { + //find the item + size_t cnt = info_kw->items.size(); + if(m_kw_ipositems[m_kw_ipos]; + m_kw_ipos++; + //found one + pos = m_kw_pos; + return NULL; + } + } + m_kw_pos++; + m_kw_ipos = 0; + } + + length = 0; + return NULL; +} + +u2 MMThunk::popupKwToken() +{ + /* + u2 length = 0; + if(kwtokens.size()){ + length = kwtokens[0]; + kwtokens.erase(kwtokens.begin()); + } + */ + return 0; +} + +//do real segment in this function, return token's count +int MMThunk::Tokenize() +{ +#if CHUNK_DEBUG + for(u2 i = 0; m_charinfos[i]; i++){ + std::vector::iterator it; + for(it = m_charinfos[i]->items.begin(); + it < m_charinfos[i]->items.end(); + it++) + printf("%d, ", *it); + printf("\n"); + } +#endif + // appply rules + u2 base = 0; + while(base<=m_max_length){ + Chunk chunk; + item_info* info_1st = m_charinfos[base]; + for(size_t i = 0; iitems.size(); i++){ + if(i == 0) + chunk.pushToken(info_1st->items[i], info_1st->freq); + else + chunk.pushToken(info_1st->items[i],0); + //Chunk L1_chunk = chunk; + u2 idx_2nd = info_1st->items[i] + base; + //check bound + item_info* info_2nd = NULL; + if(idx_2nditems.size(); j++) { + if(j == 0) + chunk.pushToken(info_2nd->items[j], info_2nd->freq); + else + chunk.pushToken(info_2nd->items[j],1); + u2 idx_3rd = info_2nd->items[j] + idx_2nd; + if(idx_3rditems[m_charinfos[idx_3rd]->items.size()-1]; + if(m_charinfos[idx_3rd]->items.size() == 1) + chunk.pushToken(idx_4th, m_charinfos[idx_3rd]->freq ); + else + chunk.pushToken(idx_4th, 1); + //push path. + pushChunk(chunk); + //pop 3part + chunk.popup(); + }else{ + //no 3part, push path + pushChunk(chunk); + } + //pop 2part + chunk.popup(); + }//end for + }//end if + else{ + //no 2part ,push path + pushChunk(chunk); + } + //pop 1part + chunk.popup(); + } + //find the last pharse + //reset. rebase + u2 tok_len = m_queue.getToken(); + if(tok_len){ + pushToken(tok_len, base); //tokens.push_back(tok_len); + }else + break; + m_queue.reset(); + chunk.reset(); + base += tok_len; + }//end while + return 0; +} + +void MMThunk::pushChunk(Chunk& ck) +{ +#if CHUNK_DEBUG + printf("Pushing: "); + for(size_t i = 0; i::iterator it = info_kw->items.begin(); + for(;ititems.end();it++) { + if(*it == aSize) { + info_kw->items.erase(it); //find the same item. + break; + } + } + } +} + +void MMThunk::reset() +{ + memset(m_charinfos, 0, sizeof(item_info*)*CHUNK_BUFFER_SIZE); + memset(m_kwinfos, 0, sizeof(item_info*)*CHUNK_BUFFER_SIZE); + item_list.free(); + tokens.clear(); + m_queue.reset(); + + m_max_length = -1; + m_length = 0; + m_kw_pos = m_kw_ipos = 0; +} + +} + diff --git a/coreseek/mmseg-3.2.14/src/css/mmthunk.h b/coreseek/mmseg-3.2.14/src/css/mmthunk.h new file mode 100755 index 0000000..96ce61a --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/mmthunk.h @@ -0,0 +1,236 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#ifndef _MM_THUNK_H_ +#define _MM_THUNK_H_ +#include +#include +#include "UnigramDict.h" +#include "freelist.h" + +#define CHUNK_BUFFER_SIZE 1024 +#define CHUNK_DEBUG 0 + +namespace css { + + class Chunk{ + public: + Chunk():m_free_score(0.0),total_length(0){} + float m_free_score; + int total_length; + std::vector tokens; + std::vector freqs; + inline void pushToken(u2 len, u2 freq) { +#if CHUNK_DEBUG + printf("pt:%d, %d;\t",len, freq); +#endif + tokens.push_back(len); + total_length += len; + freqs.push_back(freq); + //m_free_score += log((float)freq) * 100; + } + inline float get_free(){ + //m_free_score + float score = 0.0; + std::vector::iterator it; + float freq = 0; + for(it = freqs.begin(); it < freqs.end(); it++){ + freq = ((float)*it) + 1; + score+= log(freq) * 100; + } + return score; + } + inline float get_avl() { + float avg = (float)1.0*total_length/tokens.size(); + return avg; + } + inline float get_avg(){ + float avg = (float)1.0*total_length/tokens.size(); + std::vector::iterator it; + float total = 0; + for(it = tokens.begin(); it < tokens.end(); it++){ + float diff = ((*it) - avg); + total += diff*diff; + } + return (float)1.0*total/(tokens.size() -1); + } + inline void popup() { + if(tokens.size()) { + total_length -= tokens[tokens.size() - 1]; + tokens.pop_back(); + freqs.pop_back(); + } + } + inline void reset() { + tokens.clear(); + freqs.clear(); + total_length = 0; + } + }; + + class ChunkQueue + { + public: + ChunkQueue():max_length(0) {}; + public: + void push(Chunk& ck) { + if(ck.total_length < max_length) + return; //rule:1 + if(ck.total_length > max_length) { + max_length = ck.total_length; + m_chunks.clear(); + } + m_chunks.push_back(ck); + }; + u2 getToken(){ + size_t num_chunk = m_chunks.size(); + if(!num_chunk) + return 0; + if(num_chunk == 1) + return m_chunks[0].tokens[0]; + //debug use->dump chunk +#if CHUNK_DEBUG + for(size_t i = 0; i avg_length){ + avg_length = avl; + k_ptr = remains; + *k_ptr = (u4)i; + k_ptr++; + }else + if(avl == avg_length){ + *k_ptr = (u4)i; + k_ptr++; + } + } + if((k_ptr - remains) == 1) + return m_chunks[remains[0]].tokens[0]; //match by rule2 + //apply rule 3 + u4 remains_r3[256]; + u4* k_ptr_r3 = remains_r3; + avg_length = 1024*64; //an unreachable avg + for(size_t i = 0; imax_score){ + max_score = score; + idx = remains_r3[i]; + } + } + return m_chunks[idx].tokens[0]; + //return 0; + }; + inline void reset() { + m_chunks.clear(); + max_length = 0; + }; + protected: + std::vector m_chunks; + i4 max_length; + }; + + class item_info + { + public: + item_info(): + //length(0), + freq(0){ + }; + + public: + //u4 length; + u4 freq; + std::vector items; + }; + + class MMThunk + { + public: + MMThunk():base_offset(0), m_max_length(-1), m_length(0) + { + memset(m_charinfos, 0, sizeof(item_info*)*CHUNK_BUFFER_SIZE); + memset(m_kwinfos, 0, sizeof(item_info*)*CHUNK_BUFFER_SIZE); + item_list.set_size(CHUNK_BUFFER_SIZE*2); + }; + ~MMThunk() {}; + + void setItems(i4 idx, u2 rs_count, UnigramDict::result_pair_type* results); + void setKwItems(i4 idx, u2 rs_count, UnigramDict::result_pair_type* results); + void advance(u2 step) { base_offset += step; }; + //peek the current token + u1* peekToken(u2& length); + u2 popupToken(); + u1* peekKwToken(u2& pos, u2& length); + u2 popupKwToken(); + + int Tokenize(); + void pushToken(u2 aSize, i4 base); + void reset(); + u4 length() { return m_length; }; + protected: + u2 base_offset; + CRFPP::FreeList item_list; + item_info* m_charinfos[CHUNK_BUFFER_SIZE]; + std::vector tokens; + item_info* m_kwinfos[CHUNK_BUFFER_SIZE]; + i4 m_kw_pos; + i4 m_kw_ipos; + i4 m_max_length; + u4 m_length; + ChunkQueue m_queue; + protected: + void pushChunk(Chunk& ck); + }; + +} + +#endif + diff --git a/coreseek/mmseg-3.2.14/src/css/segmenter.cpp b/coreseek/mmseg-3.2.14/src/css/segmenter.cpp new file mode 100755 index 0000000..a506bc3 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/segmenter.cpp @@ -0,0 +1,343 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include "Segmenter.h" +#include "Utf8_16.h" +#define HAVE_ATEXIT +#include "Singleton.h" +#include "csr_assert.h" +#include +#include +#include "Utf8_16.h" + +namespace css { + using namespace csr; + +#define MAX_TOKEN_LENGTH 15 //3*5 + +int Segmenter::getOffset() +{ + return 0; //(int)(m_offset + m_pkg_offset); +} + +const char* Segmenter::thesaurus(const char* key, u2 key_len) +{ + if(this->m_thesaurus){ + return this->m_thesaurus->find(key, key_len); + } + return NULL; +} + +Segmenter::Segmenter():m_tagger(NULL) +{ + m_symdict = NULL; + m_kwdict = NULL; + m_weightdict = NULL; + m_config = NULL; + m_thesaurus = NULL; + //if(!m_lower) + // m_lower = ToLower::Get(); +} + +Segmenter::~Segmenter() +{ +} + +/* +0, ok +1, det is too small +*/ +int Segmenter::toLowerCpy(const u1* src, u1* det, u2 det_size) +{ + return 0; +} +void Segmenter::setBuffer(u1* buf, u4 length) +{ + m_buffer_begin = buf; + m_buffer_ptr = m_buffer_begin; + m_buffer_end = &buf[length]; + m_buffer_chunk_begin = m_buffer_begin; + if(!m_tagger) + m_tagger = ChineseCharTagger::Get(); + m_thunk.reset(); + return; +} + +u1 Segmenter::isSentenceEnd() +{ + u2 aLen = 0; + u1* tok = m_thunk.peekToken(aLen); + return (aLen==0); +} + +int Segmenter::isKeyWord(u1* buf, u4 length) +{ + if(!m_kwdict) return 0; + int id = m_kwdict->exactMatch((const char*)buf); + return (id > 0); +} + +int Segmenter::getWordWeight(u1* buf, u4 length) +{ + if(!m_weightdict) return length; //use token length as weight + int count = m_weightdict->exactMatch((const char*)buf); + if(count > 100) + return 100; + if(count < 1) //might be 0 or neg, reset to default. + return 100; + return count; +} + +//ungly hacking +int dry_strchr(const u1* pattern, u2 iCode) +{ + const u1* ptr = pattern; + while(*ptr){ + if(*ptr == iCode) + return ptr-pattern; + ptr++; + } + if(!*ptr) + return -1; + return -1; +} + +const u1* Segmenter::peekToken(u2& aLen, u2& aSymLen, u2 n) +{ + //check is sep char + //skip \r + //reset unigram when \n + //reset unigram when + //get token + if( n == 1) + return peekKwToken(aLen, aSymLen); + u2 len; + u1* tok = m_thunk.peekToken(aLen); + if(aLen){ + tok = m_buffer_ptr; + //m_buffer_ptr += aLen; + //check sym + int sym_key_len = 64; + const char* sym = m_symdict->maxMatch((const char*)tok, sym_key_len); + if(sym){ + aSymLen = (u2)strlen(sym); + aLen = sym_key_len; + /* + int tLen = m_thunk.length(); + if( aSymLen >= tLen){ + m_thunk.reset(); + return (const u1*)sym; + }else{ + + } + */ + return (const u1*)sym; + } // end sym' + aSymLen = aLen; + return tok; + } + + m_thunk.reset(); + m_buffer_chunk_begin = m_buffer_ptr; + + u1* ptr = m_buffer_ptr; + int i = 0; + u2 tag = 0; + int iCode = 0; + while(*ptr && (ptrtagUnicode(iCode,1); + tag = (tag&0x3F) + 'a' -1; + if(tag == 'w' || tag == 'm' || tag == 'e') + break; + //check tagger + int num = m_unidict->findHits((const char*)ptr,&rs[1],1024-1, MAX_TOKEN_LENGTH); + if(num){ + if(rs[1].length == len) + m_thunk.setItems(i, num, &rs[1]); + else{ + //no single char in unigram-dict. + rs[0].length = len; + rs[0].value = 1; + m_thunk.setItems(i,num+1, rs); + } + }else{ + rs[0].length = len; + rs[0].value = 1; + m_thunk.setItems(i,1, rs); + } + if(m_kwdict) + num = m_kwdict->findHits((const char*)ptr,&rs[1],1024-1, MAX_TOKEN_LENGTH); + else + num = 0; + m_thunk.setKwItems(i, num, &rs[1]); //set to kword + + ptr += len; + i+=len; + } + //do real segment + m_thunk.Tokenize(); + if(iCode == '\r'||iCode == '\n'){ + ptr += 1; + m_thunk.pushToken(1,0); + } + // append addtional token m or e + if(tag == 'm' || tag == 'e') { + u4 tok_len = len; + ptr += len; + u2 prev_tag = tag; + int iCodep = iCode; + while(*ptr){ + int iCoden = csrUTF8Decode(ptr, len); + tag = m_tagger->tagUnicode(iCoden,1); + tag = (tag&0x3F) + 'a' -1; + /* + - if seperate_number_ascii + */ + if((tag == 'm') && m_config && m_config->seperate_number_ascii) + break; + //if(tag != prev_tag) + /* + here needs to check more rules. + - if merge_number_and_ascii=true, and tag = m, prev_tag = e, or reserve, do NOT break; + - if iCoden in number_and_ascii_joint no NOT break; + - if iCode in .... NOT break; + - if seperate_number_ascii = true, break all rules above. + */ + if(tag != prev_tag) { + u1 bContinue = 0; + if(m_config && m_config->merge_number_and_ascii && + ((tag == 'e' && prev_tag == 'm') || + (tag == 'm' && prev_tag == 'e')) + ) + bContinue = 1; + if(m_config && !bContinue) + bContinue = (-1 != dry_strchr(m_config->number_and_ascii_joint,iCoden)); + if(m_config && !bContinue) + bContinue = (-1 != dry_strchr(m_config->number_and_ascii_joint,iCodep)); + + if(m_config && m_config->seperate_number_ascii) + bContinue = 0; + + if(!bContinue) + break; + } + ptr += len; + tok_len += len; + iCodep = iCoden; + } + //push tok_len. + //m or e have no must have. + m_thunk.pushToken(tok_len, -1); + } + if(tag == 'w'){ + //append single char + m_thunk.pushToken(len,-1); + } + if(m_thunk.length()) + return peekToken(aLen,aSymLen); + /* + tok = m_thunk.peekToken(len); + //set charpos + if(len){ + tok = m_buffer_ptr; + + aLen = len; + return tok; + }*/ + return NULL; +} + +//should eat len char +void Segmenter::popToken(u2 len, u2 n) +{ + /* + int tLen = m_thunk.length(); + if( aSymLen >= tLen){ + m_thunk.reset(); + return (const u1*)sym; + }else{ + + } + */ + if(n==1) + return popKwToken(len); + u2 tLen = m_thunk.popupToken(); + u2 diff = 0; + while(1) { + m_thunk.peekToken(diff); + tLen += diff; + if(!diff) break; + if(tLen <= len) + m_thunk.popupToken(); + else + break; //leave the last token. + } + // m_thunk have data & tLen NOT eat up all words. + if (m_thunk.length() && tLen != len){ + m_buffer_ptr += tLen - diff; + return; + } + m_buffer_ptr += len; +} + + + +const u1* Segmenter::peekKwToken(u2& aLen, u2& aSymLen) +{ + //m_buffer_chunk_begin + u2 pos = 0; + m_thunk.peekKwToken(pos,aLen); + aSymLen = aLen; + return &m_buffer_chunk_begin[pos]; +} + +void Segmenter::popKwToken(u2 len) +{ + return; +} + +} /* End of namespace css */ + diff --git a/coreseek/mmseg-3.2.14/src/css/tolowercase.h b/coreseek/mmseg-3.2.14/src/css/tolowercase.h new file mode 100755 index 0000000..1ac5305 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/css/tolowercase.h @@ -0,0 +1,548 @@ +//0x0 0x100 +const static u2 table_0[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, +0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x61,0x61,0x61,0x61,0xe4,0xe5,0xe6,0x63,0x65,0x65,0x65,0x65,0x69,0x69,0x69,0x69, +0x0,0x6e,0x6f,0x6f,0x6f,0x6f,0xf6,0x0,0x6f,0x75,0x75,0x75,0xfc,0x79,0x0,0x73, +0x61,0x61,0x61,0x61,0x61,0x61,0x0,0x63,0x65,0x65,0x65,0x65,0x69,0x69,0x69,0x69, +0x0,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x0,0x6f,0x75,0x75,0x75,0x75,0x79,0x0,0x79 +}; +/* +A>a B>b C>c D>d E>e F>f G>g H>h I>i J>j K>k L>l M>m N>n O>o P>p Q>q R>r S>s T>t U>u V>v W>w X>x Y>y Z>z À>a Á>a Â>a Ã>a Ä>ä Å>å Æ>æ Ç>c È>e É>e Ê>e Ë>e Ì>i Í>i Î>i Ï>i Ñ>n Ò>o Ó>o Ô>o Õ>o Ö>ö Ø>o Ù>u Ú>u Û>u Ü>ü Ý>y ß>s à>a á>a â>a ã>a ä>a å>a ç>c è>e é>e ê>e ë>e ì>i í>i î>i ï>i ñ>n ò>o ó>o ô>o õ>o ö>o ø>o ù>u ú>u û>u ü>u ý>y ÿ>y */ +//0x1 0x200 +const static u2 table_1[] = { +0x61,0x61,0x61,0x61,0x105,0x61,0x107,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x64,0x64, +0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x119,0x65,0x65,0x65,0x67,0x67,0x67,0x67, +0x67,0x67,0x67,0x67,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, +0x69,0x69,0x0,0x0,0x6a,0x6a,0x6b,0x6b,0x0,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c, +0x6c,0x142,0x6c,0x144,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x0,0x0,0x6f,0x6f,0x6f,0x6f, +0x6f,0x6f,0x0,0x0,0x72,0x72,0x72,0x72,0x72,0x72,0x15b,0x73,0x73,0x73,0x73,0x73, +0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75, +0x75,0x75,0x75,0x75,0x77,0x77,0x79,0x79,0x79,0x17a,0x7a,0x17c,0x7a,0x7a,0x7a,0x73, +0x62,0x62,0x62,0x62,0x0,0x0,0x6f,0x63,0x63,0x64,0x64,0x64,0x64,0x0,0x65,0x0, +0x65,0x66,0x66,0x67,0x0,0x0,0x0,0x69,0x6b,0x6b,0x6c,0x0,0x6d,0x6e,0x6e,0x6f, +0x6f,0x6f,0x0,0x0,0x70,0x70,0x0,0x0,0x0,0x0,0x0,0x74,0x74,0x74,0x74,0x75, +0x75,0x0,0x76,0x79,0x79,0x7a,0x7a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x64,0x0,0x0,0x6c,0x0,0x0,0x6e,0x0,0x61,0x61,0x69, +0x69,0x6f,0x6f,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x65,0x61,0x61, +0x61,0x61,0xe6,0xe6,0x67,0x67,0x67,0x67,0x6b,0x6b,0x6f,0x6f,0x6f,0x6f,0x0,0x0, +0x6a,0x0,0x64,0x0,0x67,0x67,0x0,0x0,0x6e,0x6e,0x61,0x61,0xe6,0xe6,0x6f,0x6f +}; +/* +Ā>a ā>a Ă>a ă>a Ą>ą ą>a Ć>ć ć>c Ĉ>c ĉ>c Ċ>c ċ>c Č>c č>c Ď>d ď>d Đ>d đ>d Ē>e ē>e Ĕ>e ĕ>e Ė>e ė>e Ę>ę ę>e Ě>e ě>e Ĝ>g ĝ>g Ğ>g ğ>g Ġ>g ġ>g Ģ>g ģ>g Ĥ>h ĥ>h Ħ>h ħ>h Ĩ>i ĩ>i Ī>i ī>i Ĭ>i ĭ>i Į>i į>i İ>i ı>i Ĵ>j ĵ>j Ķ>k ķ>k Ĺ>l ĺ>l Ļ>l ļ>l Ľ>l ľ>l Ŀ>l ŀ>l Ł>ł ł>l Ń>ń ń>n Ņ>n ņ>n Ň>n ň>n ʼn>n Ō>o ō>o Ŏ>o ŏ>o Ő>o ő>o Ŕ>r ŕ>r Ŗ>r ŗ>r Ř>r ř>r Ś>ś ś>s Ŝ>s ŝ>s Ş>s ş>s Š>s š>s Ţ>t ţ>t Ť>t ť>t Ŧ>t ŧ>t Ũ>u ũ>u Ū>u ū>u Ŭ>u ŭ>u Ů>u ů>u Ű>u ű>u Ų>u ų>u Ŵ>w ŵ>w Ŷ>y ŷ>y Ÿ>y Ź>ź ź>z Ż>ż ż>z Ž>z ž>z ſ>s ƀ>b Ɓ>b Ƃ>b ƃ>b Ɔ>o Ƈ>c ƈ>c Ɖ>d Ɗ>d Ƌ>d ƌ>d Ǝ>e Ɛ>e Ƒ>f ƒ>f Ɠ>g Ɨ>i Ƙ>k ƙ>k ƚ>l Ɯ>m Ɲ>n ƞ>n Ɵ>o Ơ>o ơ>o Ƥ>p ƥ>p ƫ>t Ƭ>t ƭ>t Ʈ>t Ư>u ư>u Ʋ>v Ƴ>y ƴ>y Ƶ>z ƶ>z Dž>d Lj>l Nj>n Ǎ>a ǎ>a Ǐ>i ǐ>i Ǒ>o ǒ>o Ǔ>u ǔ>u Ǖ>u ǖ>u Ǘ>u ǘ>u Ǚ>u ǚ>u Ǜ>u ǜ>u ǝ>e Ǟ>a ǟ>a Ǡ>a ǡ>a Ǣ>æ ǣ>æ Ǥ>g ǥ>g Ǧ>g ǧ>g Ǩ>k ǩ>k Ǫ>o ǫ>o Ǭ>o ǭ>o ǰ>j Dz>d Ǵ>g ǵ>g Ǹ>n ǹ>n Ǻ>a ǻ>a Ǽ>æ ǽ>æ Ǿ>o ǿ>o */ +//0x2 0x300 +const static u2 table_2[] = { +0x61,0x61,0x61,0x61,0x65,0x65,0x65,0x65,0x69,0x69,0x69,0x69,0x6f,0x6f,0x6f,0x6f, +0x72,0x72,0x72,0x72,0x75,0x75,0x75,0x75,0x73,0x73,0x74,0x74,0x0,0x0,0x68,0x68, +0x6e,0x64,0x0,0x0,0x7a,0x7a,0x61,0x61,0x65,0x65,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f, +0x6f,0x6f,0x79,0x79,0x6c,0x6e,0x74,0x6a,0x0,0x0,0x61,0x63,0x63,0x6c,0x74,0x73, +0x7a,0x0,0x0,0x62,0x75,0x76,0x65,0x65,0x6a,0x6a,0x71,0x71,0x72,0x72,0x79,0x79, +0x61,0x0,0x0,0x62,0x6f,0x63,0x64,0x64,0x65,0x0,0x0,0x65,0x65,0x65,0x65,0x6a, +0x67,0x67,0x67,0x0,0x0,0x68,0x68,0x0,0x69,0x0,0x69,0x6c,0x6c,0x6c,0x0,0x6d, +0x6d,0x6d,0x6e,0x6e,0x6e,0x6f,0x0,0x0,0x0,0x72,0x72,0x72,0x72,0x72,0x72,0x72, +0x72,0x72,0x73,0x0,0x6a,0x0,0x0,0x74,0x74,0x75,0x0,0x76,0x76,0x77,0x79,0x79, +0x7a,0x7a,0x0,0x0,0x0,0x0,0x0,0x63,0x0,0x62,0x65,0x67,0x68,0x6a,0x6b,0x6c, +0x71,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x68,0x68, +0x68,0x68,0x6a,0x72,0x72,0x72,0x72,0x77,0x79,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x6c,0x73,0x78,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +Ȁ>a ȁ>a Ȃ>a ȃ>a Ȅ>e ȅ>e Ȇ>e ȇ>e Ȉ>i ȉ>i Ȋ>i ȋ>i Ȍ>o ȍ>o Ȏ>o ȏ>o Ȑ>r ȑ>r Ȓ>r ȓ>r Ȕ>u ȕ>u Ȗ>u ȗ>u Ș>s ș>s Ț>t ț>t Ȟ>h ȟ>h Ƞ>n ȡ>d Ȥ>z ȥ>z Ȧ>a ȧ>a Ȩ>e ȩ>e Ȫ>o ȫ>o Ȭ>o ȭ>o Ȯ>o ȯ>o Ȱ>o ȱ>o Ȳ>y ȳ>y ȴ>l ȵ>n ȶ>t ȷ>j Ⱥ>a Ȼ>c ȼ>c Ƚ>l Ⱦ>t ȿ>s ɀ>z Ƀ>b Ʉ>u Ʌ>v Ɇ>e ɇ>e Ɉ>j ɉ>j Ɋ>q ɋ>q Ɍ>r ɍ>r Ɏ>y ɏ>y ɐ>a ɓ>b ɔ>o ɕ>c ɖ>d ɗ>d ɘ>e ɛ>e ɜ>e ɝ>e ɞ>e ɟ>j ɠ>g ɡ>g ɢ>g ɥ>h ɦ>h ɨ>i ɪ>i ɫ>l ɬ>l ɭ>l ɯ>m ɰ>m ɱ>m ɲ>n ɳ>n ɴ>n ɵ>o ɹ>r ɺ>r ɻ>r ɼ>r ɽ>r ɾ>r ɿ>r ʀ>r ʁ>r ʂ>s ʄ>j ʇ>t ʈ>t ʉ>u ʋ>v ʌ>v ʍ>w ʎ>y ʏ>y ʐ>z ʑ>z ʗ>c ʙ>b ʚ>e ʛ>g ʜ>h ʝ>j ʞ>k ʟ>l ʠ>q ʮ>h ʯ>h ʰ>h ʱ>h ʲ>j ʳ>r ʴ>r ʵ>r ʶ>r ʷ>w ʸ>y ˡ>l ˢ>s ˣ>x */ +//0x3 0x400 +const static u2 table_3[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x3b1,0x0,0x3b5,0x3b7,0x3b9,0x0,0x3bf,0x0,0x3c5,0x3c9, +0x3b9,0x3b1,0x3b2,0x3b3,0x3b4,0x3b5,0x3b6,0x3b7,0x3b8,0x3b9,0x3ba,0x3bb,0x3bc,0x3bd,0x3be,0x3bf, +0x3c0,0x3c1,0x0,0x3c3,0x3c4,0x3c5,0x3c6,0x3c7,0x3c8,0x3c9,0x3b9,0x3c5,0x3b1,0x3b5,0x3b7,0x3b9, +0x3c5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3b9,0x3c5,0x3bf,0x3c5,0x3c9,0x0, +0x3b2,0x3b8,0x3c5,0x3c5,0x3c5,0x3c6,0x3c0,0x0,0x3d9,0x0,0x3db,0x0,0x3dd,0x0,0x3df,0x0, +0x3e1,0x0,0x3e3,0x0,0x3e5,0x0,0x3e7,0x0,0x3e9,0x0,0x3eb,0x0,0x3ed,0x0,0x3ef,0x0, +0x3ba,0x3c1,0x3c3,0x0,0x3b8,0x3b5,0x3b5,0x3f8,0x0,0x3c3,0x3fb,0x0,0x0,0x0,0x0,0x0 +}; +/* +Ά>α Έ>ε Ή>η Ί>ι Ό>ο Ύ>υ Ώ>ω ΐ>ι Α>α Β>β Γ>γ Δ>δ Ε>ε Ζ>ζ Η>η Θ>θ Ι>ι Κ>κ Λ>λ Μ>μ Ν>ν Ξ>ξ Ο>ο Π>π Ρ>ρ Σ>σ Τ>τ Υ>υ Φ>φ Χ>χ Ψ>ψ Ω>ω Ϊ>ι Ϋ>υ ά>α έ>ε ή>η ί>ι ΰ>υ ϊ>ι ϋ>υ ό>ο ύ>υ ώ>ω ϐ>β ϑ>θ ϒ>υ ϓ>υ ϔ>υ ϕ>φ ϖ>π Ϙ>ϙ Ϛ>ϛ Ϝ>ϝ Ϟ>ϟ Ϡ>ϡ Ϣ>ϣ Ϥ>ϥ Ϧ>ϧ Ϩ>ϩ Ϫ>ϫ Ϭ>ϭ Ϯ>ϯ ϰ>κ ϱ>ρ ϲ>σ ϴ>θ ϵ>ε ϶>ε Ϸ>ϸ Ϲ>σ Ϻ>ϻ */ +//0x4 0x500 +const static u2 table_4[] = { +0x435,0x435,0x452,0x433,0x454,0x455,0x456,0x456,0x458,0x459,0x45a,0x45b,0x43a,0x438,0x443,0x45f, +0x430,0x431,0x432,0x433,0x434,0x435,0x436,0x437,0x438,0x438,0x43a,0x43b,0x43c,0x43d,0x43e,0x43f, +0x440,0x441,0x442,0x443,0x444,0x445,0x446,0x447,0x448,0x449,0x44a,0x44b,0x44c,0x44d,0x44e,0x44f, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x69,0x69,0x0,0x0,0x0,0x0,0x6f,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x435,0x435,0x0,0x433,0x0,0x0,0x69,0x456,0x0,0x0,0x0,0x0,0x43a,0x438,0x443,0x0, +0x461,0x0,0x463,0x0,0x465,0x0,0x467,0x0,0x469,0x0,0x46b,0x0,0x46d,0x0,0x46f,0x0, +0x471,0x0,0x473,0x0,0x475,0x0,0x475,0x475,0x479,0x0,0x47b,0x0,0x47d,0x0,0x47f,0x0, +0x481,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x438,0x438,0x44c,0x44c,0x440,0x440, +0x433,0x433,0x433,0x433,0x433,0x433,0x436,0x436,0x437,0x437,0x43a,0x43a,0x43a,0x43a,0x43a,0x43a, +0x43a,0x43a,0x43d,0x43d,0x43d,0x43d,0x43f,0x43f,0x4a9,0x0,0x441,0x441,0x442,0x442,0x443,0x443, +0x443,0x443,0x445,0x445,0x4b5,0x0,0x447,0x447,0x447,0x447,0x4bb,0x0,0x4bd,0x0,0x4bd,0x4bd, +0x4cf,0x436,0x436,0x43a,0x43a,0x43b,0x43b,0x43d,0x43d,0x43d,0x43d,0x447,0x447,0x43c,0x43c,0x0, +0x430,0x430,0x430,0x430,0xe6,0xe6,0x435,0x435,0x4d9,0x0,0x4d9,0x4d9,0x436,0x436,0x437,0x437, +0x4e1,0x0,0x438,0x438,0x438,0x438,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x44d,0x44d,0x443,0x443, +0x443,0x443,0x443,0x443,0x447,0x447,0x433,0x433,0x44b,0x44b,0x433,0x433,0x445,0x445,0x445,0x445 +}; +/* +Ѐ>е Ё>е Ђ>ђ Ѓ>г Є>є Ѕ>ѕ І>і Ї>і Ј>ј Љ>љ Њ>њ Ћ>ћ Ќ>к Ѝ>и Ў>у Џ>џ А>а Б>б В>в Г>г Д>д Е>е Ж>ж З>з И>и Й>и К>к Л>л М>м Н>н О>о П>п Р>р С>с Т>т У>у Ф>ф Х>х Ц>ц Ч>ч Ш>ш Щ>щ Ъ>ъ Ы>ы Ь>ь Э>э Ю>ю Я>я и>i й>i о>o ѐ>е ё>е ѓ>г і>i ї>і ќ>к ѝ>и ў>у Ѡ>ѡ Ѣ>ѣ Ѥ>ѥ Ѧ>ѧ Ѩ>ѩ Ѫ>ѫ Ѭ>ѭ Ѯ>ѯ Ѱ>ѱ Ѳ>ѳ Ѵ>ѵ Ѷ>ѵ ѷ>ѵ Ѹ>ѹ Ѻ>ѻ Ѽ>ѽ Ѿ>ѿ Ҁ>ҁ Ҋ>и ҋ>и Ҍ>ь ҍ>ь Ҏ>р ҏ>р Ґ>г ґ>г Ғ>г ғ>г Ҕ>г ҕ>г Җ>ж җ>ж Ҙ>з ҙ>з Қ>к қ>к Ҝ>к ҝ>к Ҟ>к ҟ>к Ҡ>к ҡ>к Ң>н ң>н Ҥ>н ҥ>н Ҧ>п ҧ>п Ҩ>ҩ Ҫ>с ҫ>с Ҭ>т ҭ>т Ү>у ү>у Ұ>у ұ>у Ҳ>х ҳ>х Ҵ>ҵ Ҷ>ч ҷ>ч Ҹ>ч ҹ>ч Һ>һ Ҽ>ҽ Ҿ>ҽ ҿ>ҽ Ӏ>ӏ Ӂ>ж ӂ>ж Ӄ>к ӄ>к Ӆ>л ӆ>л Ӈ>н ӈ>н Ӊ>н ӊ>н Ӌ>ч ӌ>ч Ӎ>м ӎ>м Ӑ>а ӑ>а Ӓ>а ӓ>а Ӕ>æ ӕ>æ Ӗ>е ӗ>е Ә>ә Ӛ>ә ӛ>ә Ӝ>ж ӝ>ж Ӟ>з ӟ>з Ӡ>ӡ Ӣ>и ӣ>и Ӥ>и ӥ>и Ӧ>о ӧ>о Ө>о ө>о Ӫ>о ӫ>о Ӭ>э ӭ>э Ӯ>у ӯ>у Ӱ>у ӱ>у Ӳ>у ӳ>у Ӵ>ч ӵ>ч Ӷ>г ӷ>г Ӹ>ы ӹ>ы Ӻ>г ӻ>г Ӽ>х ӽ>х Ӿ>х ӿ>х */ +//0x5 0x600 +const static u2 table_5[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x561,0x562,0x563,0x564,0x565,0x566,0x567,0x568,0x569,0x56a,0x56b,0x56c,0x56d,0x56e,0x56f, +0x570,0x571,0x572,0x573,0x574,0x575,0x576,0x577,0x578,0x579,0x57a,0x57b,0x57c,0x57d,0x57e,0x57f, +0x580,0x581,0x582,0x583,0x584,0x585,0x586,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +Ա>ա Բ>բ Գ>գ Դ>դ Ե>ե Զ>զ Է>է Ը>ը Թ>թ Ժ>ժ Ի>ի Լ>լ Խ>խ Ծ>ծ Կ>կ Հ>հ Ձ>ձ Ղ>ղ Ճ>ճ Մ>մ Յ>յ Ն>ն Շ>շ Ո>ո Չ>չ Պ>պ Ջ>ջ Ռ>ռ Ս>ս Վ>վ Տ>տ Ր>ր Ց>ց Ւ>ւ Փ>փ Ք>ք Օ>օ Ֆ>ֆ */ +//0x6 0x700 +const static u2 table_6[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x627,0x627,0x648,0x627,0x64a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x6d5,0x0,0x6c1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x6d2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +آ>ا أ>ا ؤ>و إ>ا ئ>ي ۀ>ە ۂ>ہ ۓ>ے */ +//0x9 0xa00 +const static u2 table_9[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x928,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x930,0x0,0x0,0x933,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x915,0x916,0x917,0x91c,0x921,0x922,0x92b,0x92f, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9a1,0x9a2,0x0,0x9af, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x9ac,0x9ac,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +????????????????????????????????*/ +//0xa 0xb00 +const static u2 table_10[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0xa32,0x0,0x0,0xa38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa16,0xa17,0xa1c,0x0,0x0,0xa2b,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +????????????*/ +//0xb 0xc00 +const static u2 table_11[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0xb92,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +??*/ +//0x10 0x1100 +const static u2 table_16[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x2d00,0x2d01,0x2d02,0x2d03,0x2d04,0x2d05,0x2d06,0x2d07,0x2d08,0x2d09,0x2d0a,0x2d0b,0x2d0c,0x2d0d,0x2d0e,0x2d0f, +0x2d10,0x2d11,0x2d12,0x2d13,0x2d14,0x2d15,0x2d16,0x2d17,0x2d18,0x2d19,0x2d1a,0x2d1b,0x2d1c,0x2d1d,0x2d1e,0x2d1f, +0x2d20,0x2d21,0x2d22,0x2d23,0x2d24,0x2d25,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10dc,0x0,0x0,0x0 +}; +/* +?ⴀ ??????????????????????????????????????????????????????????????Ⴠ>?????????????*/ +//0x16 0x1700 +const static u2 table_22[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x62,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +?b */ +//0x1d 0x1e00 +const static u2 table_29[] = { +0x0,0xe6,0xe6,0x62,0x0,0x64,0x0,0x65,0x65,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, +0x6f,0x6f,0x6f,0x6f,0x0,0x0,0x6f,0x6f,0x70,0x72,0x72,0x74,0x75,0x75,0x75,0x6d, +0x76,0x77,0x7a,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x61,0xe6,0x62,0x62, +0x64,0x65,0x65,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6e,0x6f,0x0,0x70,0x72, +0x74,0x75,0x77,0x61,0x61,0x0,0xe6,0x62,0x64,0x65,0x0,0x65,0x65,0x67,0x69,0x6b, +0x6d,0x0,0x6f,0x6f,0x6f,0x6f,0x70,0x74,0x75,0x75,0x6d,0x76,0x0,0x0,0x0,0x0, +0x0,0x0,0x69,0x72,0x75,0x76,0x0,0x0,0x0,0x0,0x0,0x0,0x62,0x64,0x66,0x6d, +0x6e,0x70,0x72,0x72,0x73,0x74,0x7a,0x67,0x0,0x67,0x0,0x69,0x0,0x70,0x75,0x0, +0x62,0x64,0x66,0x67,0x6b,0x6c,0x6d,0x6e,0x70,0x72,0x73,0x0,0x76,0x78,0x7a,0x61, +0x0,0x64,0x65,0x65,0x65,0x0,0x69,0x6f,0x0,0x75,0x0,0x0,0x63,0x63,0x0,0x65, +0x66,0x6a,0x67,0x68,0x69,0x0,0x69,0x69,0x6a,0x6c,0x6c,0x6c,0x6d,0x6d,0x6e,0x6e, +0x6e,0x6f,0x0,0x73,0x0,0x74,0x75,0x0,0x75,0x76,0x76,0x7a,0x7a,0x7a,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x72,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +?æ ?æ ?b ?d ?e ?e ?i ?j ?k ?l ?m ?n ?o ?o ?o ?o ?o ?o ?o ?p ?r ?r ?t ?u ?u ?u ?m ?v ?w ?z ?a ?æ ?b ?b ?d ?e ?e ?g ?h ?i ?j ?k ?l ?m ?n ?n ?o ?p ?r ᵀ>t ?u ?w ?a ?a ?æ ?b ?d ?e ?e ?e ?g ?i ?k ?m ?o ?o ?o ?o ?p ?t ?u ?u ?m ?v ?i ?r ?u ?v ?b ?d ?f ?m ?n ?p ?r ?r ?s ?t ?z ?g ?g ?i ?p ?u ᶀ>b ?d ?f ?g ?k ?l ?m ?n ?p ?r ?s ?v ?x ?z ?a ?d ?e ?e ?e ?i ?o ?u ?c ?c ?e ?f ?j ?g ?h ?i ?i ?i ?j ?l ?l ?l ?m ?m ?n ?n ?n ?o ?s ?t ?u ?u ?v ?v ?z ?z ?z ?r */ +//0x1e 0x1f00 +const static u2 table_30[] = { +0x61,0x61,0x62,0x62,0x62,0x62,0x62,0x62,0x63,0x63,0x64,0x64,0x64,0x64,0x64,0x64, +0x64,0x64,0x64,0x64,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x66,0x66, +0x67,0x67,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x68,0x69,0x69,0x69,0x69, +0x6b,0x6b,0x6b,0x6b,0x6b,0x6b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6d,0x6d, +0x6d,0x6d,0x6d,0x6d,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6e,0x6f,0x6f,0x6f,0x6f, +0x6f,0x6f,0x6f,0x6f,0x70,0x70,0x70,0x70,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72, +0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x74,0x74,0x74,0x74,0x74, +0x74,0x74,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x76,0x76,0x76,0x76, +0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x78,0x79,0x79, +0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x68,0x74,0x77,0x79,0x61,0x73,0x0,0x0,0x0,0x0, +0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61, +0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x61,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65, +0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x65,0x69,0x69,0x69,0x69,0x6f,0x6f,0x6f,0x6f, +0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f, +0x6f,0x6f,0x6f,0x6f,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75,0x75, +0x75,0x75,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +Ḁ>a ?a ?b ?b ?b ?b ?b ?b ?c ?c ?d ?d ?d ?d ?d ?d ?d ?d ?d ?d ?e ?e ?e ?e ?e ?e ?e ?e ?e ?e ?f ?f ?g ?g ?h ?h ?h ?h ?h ?h ?h ?h ?h ?h ?i ?i ?i ?i ?k ?k ?k ?k ?k ?k ?l ?l ?l ?l ?l ?l ?l ?l ?m ?m Ṁ>m ?m ?m ?m ?n ?n ?n ?n ?n ?n ?n ?n ?o ?o ?o ?o ?o ?o ?o ?o ?p ?p ?p ?p ?r ?r ?r ?r ?r ?r ?r ?r ?s ?s ?s ?s ?s ?s ?s ?s ?s ?s ?t ?t ?t ?t ?t ?t ?t ?t ?u ?u ?u ?u ?u ?u ?u ?u ?u ?u ?v ?v ?v ?v Ẁ>w ?w ?w ?w ?w ?w ?w ?w ?w ?w ?x ?x ?x ?x ?y ?y ?z ?z ?z ?z ?z ?z ?h ?t ?w ?y ?a ?s ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?a ?e ?e ?e ?e ?e ?e ?e ?e Ề>e ?e ?e ?e ?e ?e ?e ?e ?i ?i ?i ?i ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?o ?u ?u ?u ?u ?u ?u ?u ?u ?u ?u ?u ?u ?u ?u ?y ?y ?y ?y ?y ?y ?y ?y */ +//0x1f 0x2000 +const static u2 table_31[] = { +0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1, +0x3b5,0x3b5,0x3b5,0x3b5,0x3b5,0x3b5,0x0,0x0,0x3b5,0x3b5,0x3b5,0x3b5,0x3b5,0x3b5,0x0,0x0, +0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7, +0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9, +0x3bf,0x3bf,0x3bf,0x3bf,0x3bf,0x3bf,0x0,0x0,0x3bf,0x3bf,0x3bf,0x3bf,0x3bf,0x3bf,0x0,0x0, +0x3c5,0x3c5,0x3c5,0x3c5,0x3c5,0x3c5,0x3c5,0x3c5,0x0,0x3c5,0x0,0x3c5,0x0,0x3c5,0x0,0x3c5, +0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9, +0x3b1,0x3b1,0x3b5,0x3b5,0x3b7,0x3b7,0x3b9,0x3b9,0x3bf,0x3bf,0x3c5,0x3c5,0x3c9,0x3c9,0x0,0x0, +0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1, +0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7, +0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9,0x3c9, +0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x0,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x0,0x0,0x0, +0x0,0x0,0x3b7,0x3b7,0x3b7,0x0,0x3b7,0x3b7,0x3b5,0x3b5,0x3b7,0x3b7,0x3b7,0x0,0x0,0x0, +0x3b9,0x3b9,0x3b9,0x3b9,0x0,0x0,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x3b9,0x0,0x0,0x0,0x0, +0x3c5,0x3c5,0x3c5,0x3c5,0x3c1,0x3c1,0x3c5,0x3c5,0x3c5,0x3c5,0x3c5,0x3c5,0x3c1,0x0,0x0,0x0, +0x0,0x0,0x3c9,0x3c9,0x3c9,0x0,0x3c9,0x3c9,0x3bf,0x3bf,0x3c9,0x3c9,0x3c9,0x0,0x0,0x0 +}; +/* +ἀ>α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?ε ?ε ?ε ?ε ?ε ?ε ?ε ?ε ?ε ?ε ?ε ?ε ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ὀ>ο ?ο ?ο ?ο ?ο ?ο ?ο ?ο ?ο ?ο ?ο ?ο ?υ ?υ ?υ ?υ ?υ ?υ ?υ ?υ ?υ ?υ ?υ ?υ ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?α ?α ?ε ?ε ?η ?η ?ι ?ι ?ο ?ο ?υ ?υ ?ω ?ω ᾀ>α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?η ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?ω ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?α ?η ?η ?η ?η ?η ?ε ?ε ?η ?η ?η ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?ι ?υ ?υ ?υ ?υ ?ρ ?ρ ?υ ?υ ?υ ?υ ?υ ?υ ?ρ ?ω ?ω ?ω ?ω ?ω ?ο ?ο ?ω ?ω ?ω */ +//0x20 0x2100 +const static u2 table_32[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x27,0x0,0x0,0x0,0x22,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x69,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6e, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x61,0x65,0x6f,0x78,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +?' ?" ?i ?n ?a ?e ?o ?x */ +//0x21 0x2200 +const static u2 table_33[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x68,0x0,0x0,0x0, +0x0,0x69,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x72,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7a,0x0,0x0,0x0,0x0,0x63,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +?h ?i ?r ?z ?c ?c */ +//0x2c 0x2d00 +const static u2 table_44[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x6c,0x6c,0x6c,0x70,0x72,0x61,0x74,0x68,0x68,0x6b,0x6b,0x7a,0x7a,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x76,0x68,0x68,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x2c81,0x0,0x2c83,0x0,0x2c85,0x0,0x2c87,0x0,0x2c89,0x0,0x2c8b,0x0,0x2c8d,0x0,0x2c8f,0x0, +0x2c91,0x0,0x2c93,0x0,0x2c95,0x0,0x2c97,0x0,0x2c99,0x0,0x2c9b,0x0,0x2c9d,0x0,0x2c9f,0x6f, +0x2ca1,0x0,0x2ca3,0x0,0x2ca5,0x0,0x2ca7,0x0,0x2ca9,0x0,0x2cab,0x0,0x2cad,0x0,0x2caf,0x0, +0x2cb1,0x0,0x2cb3,0x0,0x2cb5,0x0,0x2cb7,0x0,0x2cb9,0x0,0x2cbb,0x0,0x2cbd,0x0,0x2cbf,0x0, +0x2cc1,0x0,0x2cc3,0x0,0x2cc5,0x0,0x2cc7,0x0,0x2cc9,0x0,0x2ccb,0x0,0x2ccd,0x0,0x2ccf,0x0, +0x2cd1,0x0,0x2cd3,0x0,0x2cd5,0x0,0x2cd7,0x0,0x2cd9,0x0,0x2cdb,0x0,0x2cdd,0x0,0x2cdf,0x0, +0x2ce1,0x0,0x2ce3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +?l ?l ?l ?p ?r ?a ?t ?h ?h ?k ?k ?z ?z ?v ?h ?h Ⲁ>????????????????????????????????o ????????????????????????????????Ⳁ>???????????????????????????????????*/ +//0x2f 0x3000 +const static u2 table_47[] = { +0x4e00,0x4e28,0x4e36,0x4e3f,0x4e59,0x4e85,0x4e8c,0x4ea0,0x4eba,0x513f,0x5165,0x516b,0x5182,0x5196,0x51ab,0x51e0, +0x51f5,0x5200,0x529b,0x52f9,0x5315,0x531a,0x5338,0x5341,0x535c,0x5369,0x5382,0x53b6,0x53c8,0x53e3,0x56d7,0x571f, +0x58eb,0x5902,0x590a,0x5915,0x5927,0x5973,0x5b50,0x5b80,0x5bf8,0x5c0f,0x5c22,0x5c38,0x5c6e,0x5c71,0x5ddb,0x5de5, +0x5df1,0x5dfe,0x5e72,0x5e7a,0x5e7f,0x5ef4,0x5efe,0x5f0b,0x5f13,0x5f50,0x5f61,0x5f73,0x5fc3,0x6208,0x6236,0x624b, +0x652f,0x6534,0x6587,0x6597,0x65a4,0x65b9,0x65e0,0x65e5,0x66f0,0x6708,0x6728,0x6b20,0x6b62,0x6b79,0x6bb3,0x6bcb, +0x6bd4,0x6bdb,0x6c0f,0x6c14,0x6c34,0x706b,0x722a,0x7236,0x723b,0x723f,0x7247,0x7259,0x725b,0x72ac,0x7384,0x7389, +0x74dc,0x74e6,0x7518,0x751f,0x7528,0x7530,0x758b,0x7592,0x7676,0x767d,0x76ae,0x76bf,0x76ee,0x77db,0x77e2,0x77f3, +0x793a,0x79b8,0x79be,0x7a74,0x7acb,0x7af9,0x7c73,0x7cf8,0x7f36,0x7f51,0x7f8a,0x7fbd,0x8001,0x800c,0x8012,0x8033, +0x807f,0x8089,0x81e3,0x81ea,0x81f3,0x81fc,0x820c,0x821b,0x821f,0x826e,0x8272,0x8278,0x864d,0x866b,0x8840,0x884c, +0x8863,0x897e,0x898b,0x89d2,0x8a00,0x8c37,0x8c46,0x8c55,0x8c78,0x8c9d,0x8d64,0x8d70,0x8db3,0x8eab,0x8eca,0x8f9b, +0x8fb0,0x8fb5,0x9091,0x9149,0x91c6,0x91cc,0x91d1,0x9577,0x9580,0x961c,0x96b6,0x96b9,0x96e8,0x9751,0x975e,0x9762, +0x9769,0x97cb,0x97ed,0x97f3,0x9801,0x98a8,0x98db,0x98df,0x9996,0x9999,0x99ac,0x9aa8,0x9ad8,0x9adf,0x9b25,0x9b2f, +0x9b32,0x9b3c,0x9b5a,0x9ce5,0x9e75,0x9e7f,0x9ea5,0x9ebb,0x9ec3,0x9ecd,0x9ed1,0x9ef9,0x9efd,0x9f0e,0x9f13,0x9f20, +0x9f3b,0x9f4a,0x9f52,0x9f8d,0x9f9c,0x9fa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +⼀>一 ?????????????????????????????????刀 ???????????????????????????????????????????宀 ????????????????????????????????????????????????⽀>???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????⾀>????????????????????????????血 ???????????言 ???????????????????????????????????????門 ??????????????????????????????????????????????⿀>???????????????????????????????????????????*/ +//0x30 0x3100 +const static u2 table_48[] = { +0x0,0x2c,0x0,0x0,0x0,0x0,0x0,0x0,0x3e,0x3c,0x3c,0x3e,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x3041,0x0,0x3043,0x0,0x3045,0x0,0x3047,0x0,0x3049,0x0,0x304b,0x0,0x304d,0x0, +0x304f,0x0,0x3051,0x0,0x3053,0x0,0x3055,0x0,0x3057,0x0,0x3059,0x0,0x305b,0x0,0x305d,0x0, +0x305f,0x0,0x3061,0x0,0x3063,0x3063,0x0,0x3066,0x0,0x3068,0x0,0x0,0x0,0x0,0x0,0x0, +0x306f,0x306f,0x0,0x3072,0x3072,0x0,0x3075,0x3075,0x0,0x3078,0x3078,0x0,0x307b,0x307b,0x0,0x0, +0x0,0x0,0x0,0x0,0x3083,0x0,0x3085,0x0,0x3087,0x0,0x0,0x0,0x0,0x0,0x0,0x308e, +0x0,0x0,0x0,0x0,0x3046,0x304b,0x3051,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x30a1,0x0,0x30a3,0x0,0x30a5,0x0,0x30a7,0x0,0x30a9,0x30f5,0x30ab,0x0,0x30ad,0x31f0, +0x30af,0x30f6,0x30b1,0x0,0x30b3,0x0,0x30b5,0x31f1,0x30b7,0x31f2,0x30b9,0x0,0x30bb,0x0,0x30bd,0x0, +0x30bf,0x0,0x30c1,0x0,0x0,0x30c4,0x0,0x30c6,0x31f3,0x30c8,0x0,0x0,0x31f4,0x0,0x0,0x31f5, +0x30cf,0x30cf,0x31f6,0x30d2,0x30d2,0x31f7,0x30d5,0x30d5,0x31f8,0x30d8,0x30d8,0x31f9,0x30db,0x30db,0x0,0x0, +0x31fa,0x0,0x0,0x0,0x30e3,0x0,0x30e5,0x0,0x30e7,0x31fb,0x31fc,0x31fd,0x31fe,0x31ff,0x0,0x30ee, +0x0,0x0,0x0,0x0,0x30a6,0x0,0x0,0x30ef,0x30f0,0x30f1,0x30f2,0x0,0x0,0x0,0x0,0x0 +}; +/* +?, ?> ?< ?< ?> ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ダ>?????????????????????????????????????????????????????????????????????????*/ +//0x31 0x3200 +const static u2 table_49[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x1100,0x1101,0x11aa,0x1102,0x11ac,0x11ad,0x1103,0x1104,0x1105,0x11b0,0x11b1,0x11b2,0x11b3,0x11b4,0x11b5, +0x111a,0x1106,0x1107,0x1108,0x1121,0x1109,0x110a,0x110b,0x110c,0x110d,0x110e,0x110f,0x1110,0x1111,0x1112,0x1161, +0x1162,0x1163,0x1164,0x1165,0x1166,0x1167,0x1168,0x1169,0x116a,0x116b,0x116c,0x116d,0x116e,0x116f,0x1170,0x1171, +0x1172,0x1173,0x1174,0x1175,0x0,0x1114,0x1115,0x11c7,0x11c8,0x11cc,0x11ce,0x11d3,0x11d7,0x11d9,0x111c,0x11dd, +0x11df,0x111d,0x111e,0x1120,0x1122,0x1123,0x1127,0x1129,0x112b,0x112c,0x112d,0x112e,0x112f,0x1132,0x1136,0x1140, +0x1147,0x114c,0x11f1,0x11f2,0x1157,0x1158,0x1159,0x1184,0x1185,0x1188,0x1191,0x1192,0x1194,0x119e,0x11a1,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +?ᄀ ????????????????????????????ㅀ>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????ᅀ ㆀ>?????????????????????????????*/ +//0xa4 0xa500 +const static u2 table_164[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0xa408,0xa1b9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +????*/ +//0xf9 0xfa00 +const static u2 table_249[] = { +0x8c48,0x66f4,0x8eca,0x8cc8,0x6ed1,0x4e32,0x53e5,0x9f9c,0x9f9c,0x5951,0x91d1,0x5587,0x5948,0x61f6,0x7669,0x7f85, +0x863f,0x87ba,0x88f8,0x908f,0x6a02,0x6d1b,0x70d9,0x73de,0x843d,0x916a,0x99f1,0x4e82,0x5375,0x6b04,0x721b,0x862d, +0x9e1e,0x5d50,0x6feb,0x85cd,0x8964,0x62c9,0x81d8,0x881f,0x5eca,0x6717,0x6d6a,0x72fc,0x90ce,0x4f86,0x51b7,0x52de, +0x64c4,0x6ad3,0x7210,0x76e7,0x8001,0x8606,0x865c,0x8def,0x9732,0x9b6f,0x9dfa,0x788c,0x797f,0x7da0,0x83c9,0x9304, +0x9e7f,0x8ad6,0x58df,0x5f04,0x7c60,0x807e,0x7262,0x78ca,0x8cc2,0x96f7,0x58d8,0x5c62,0x6a13,0x6dda,0x6f0f,0x7d2f, +0x7e37,0x964b,0x52d2,0x808b,0x51dc,0x51cc,0x7a1c,0x7dbe,0x83f1,0x9675,0x8b80,0x62cf,0x6a02,0x8afe,0x4e39,0x5be7, +0x6012,0x7387,0x7570,0x5317,0x78fb,0x4fbf,0x5fa9,0x4e0d,0x6ccc,0x6578,0x7d22,0x53c3,0x585e,0x7701,0x8449,0x8aaa, +0x6bba,0x8fb0,0x6c88,0x62fe,0x82e5,0x63a0,0x7565,0x4eae,0x5169,0x51c9,0x6881,0x7ce7,0x826f,0x8ad2,0x91cf,0x52f5, +0x5442,0x5973,0x5eec,0x65c5,0x6ffe,0x792a,0x95ad,0x9a6a,0x9e97,0x9ece,0x529b,0x66c6,0x6b77,0x8f62,0x5e74,0x6190, +0x6200,0x649a,0x6f23,0x7149,0x7489,0x79ca,0x7df4,0x806f,0x8f26,0x84ee,0x9023,0x934a,0x5217,0x52a3,0x54bd,0x70c8, +0x88c2,0x8aaa,0x5ec9,0x5ff5,0x637b,0x6bae,0x7c3e,0x7375,0x4ee4,0x56f9,0x5be7,0x5dba,0x601c,0x73b2,0x7469,0x7f9a, +0x8046,0x9234,0x96f6,0x9748,0x9818,0x4f8b,0x79ae,0x91b4,0x96b8,0x60e1,0x4e86,0x50da,0x5bee,0x5c3f,0x6599,0x6a02, +0x71ce,0x7642,0x84fc,0x907c,0x9f8d,0x6688,0x962e,0x5289,0x677b,0x67f3,0x6d41,0x6e9c,0x7409,0x7559,0x786b,0x7d10, +0x985e,0x516d,0x622e,0x9678,0x502b,0x5d19,0x6dea,0x8f2a,0x5f8b,0x6144,0x6817,0x7387,0x9686,0x5229,0x540f,0x5c65, +0x6613,0x674e,0x68a8,0x6ce5,0x7406,0x75e2,0x7f79,0x88cf,0x88e1,0x91cc,0x96e2,0x533f,0x6eba,0x541d,0x71d0,0x7498, +0x85fa,0x96a3,0x9c57,0x9e9f,0x6797,0x6dcb,0x81e8,0x7acb,0x7b20,0x7c92,0x72c0,0x7099,0x8b58,0x4ec0,0x8336,0x523a +}; +/* +豈>???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????鹿>????????????????????????????????????????????????????讀 ??????????????????????????????????????????????????????????????????????????呂>????????????????????????????????戀 ??????????????????????????????????????????????????????????????????????????????????????????????燎>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????狀 ?????什 ????*/ +//0xfa 0xfb00 +const static u2 table_250[] = { +0x5207,0x5ea6,0x62d3,0x7cd6,0x5b85,0x6d1e,0x66b4,0x8f3b,0x884c,0x964d,0x898b,0x5ed3,0x5140,0x55c0,0x0,0x0, +0x585a,0x0,0x6674,0x0,0x0,0x51de,0x732a,0x76ca,0x793c,0x795e,0x7965,0x798f,0x9756,0x7cbe,0x7fbd,0x0, +0x8612,0x0,0x8af8,0x0,0x0,0x9038,0x90fd,0x0,0x0,0x0,0x98ef,0x98fc,0x9928,0x9db4,0x0,0x0, +0x4fae,0x50e7,0x514d,0x52c9,0x52e4,0x5351,0x559d,0x5606,0x5668,0x5840,0x58a8,0x5c64,0x5c6e,0x6094,0x6168,0x618e, +0x61f2,0x654f,0x65e2,0x6691,0x6885,0x6d77,0x6e1a,0x6f22,0x716e,0x722b,0x7422,0x7891,0x793e,0x7949,0x7948,0x7950, +0x7956,0x795d,0x798d,0x798e,0x7a40,0x7a81,0x7bc0,0x7df4,0x7e09,0x7e41,0x7f72,0x8005,0x81ed,0x8279,0x8279,0x8457, +0x8910,0x8996,0x8b01,0x8b39,0x8cd3,0x8d08,0x8fb6,0x9038,0x96e3,0x97ff,0x983b,0x0,0x0,0x0,0x0,0x0, +0x4e26,0x51b5,0x5168,0x4f80,0x5145,0x5180,0x52c7,0x52fa,0x559d,0x5555,0x5599,0x55e2,0x585a,0x58b3,0x5944,0x5954, +0x5a62,0x5b28,0x5ed2,0x5ed9,0x5f69,0x5fad,0x60d8,0x614e,0x6108,0x618e,0x6160,0x61f2,0x6234,0x63c4,0x641c,0x6452, +0x6556,0x6674,0x6717,0x671b,0x6756,0x6b79,0x6bba,0x6d41,0x6edb,0x6ecb,0x6f22,0x701e,0x716e,0x77a7,0x7235,0x72af, +0x732a,0x7471,0x7506,0x753b,0x761d,0x761f,0x76ca,0x76db,0x76f4,0x774a,0x7740,0x78cc,0x7ab1,0x7bc0,0x7c7b,0x7d5b, +0x7df4,0x7f3e,0x8005,0x8352,0x83ef,0x8779,0x8941,0x8986,0x8996,0x8abf,0x8af8,0x8acb,0x8b01,0x8afe,0x8aed,0x8b39, +0x8b8a,0x8d08,0x8f38,0x9072,0x9199,0x9276,0x967c,0x96e3,0x9756,0x97db,0x97ff,0x980b,0x983b,0x9b12,0x9f9c,0x0, +0x0,0x0,0x3b9d,0x4018,0x4039,0x0,0x0,0x0,0x9f43,0x9f8e,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +切>????????????????????????兀 ?嗀 ???????????????????????????????????????????????????????????塀 ????????????懲>????????????????????????????????????????穀 ???節 ???????????????????????????????????????????????侀 ???冀 ????????????????????婢>????????????????????????????????????????????????????????????????????????????????????着 ?????節 ????????????????????????????????????變>???????????????????????????????????????*/ +//0xfb 0xfc00 +const static u2 table_251[] = { +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5d9,0x0,0x5f2, +0x5e2,0x5d0,0x5d3,0x5d4,0x5db,0x5dc,0x5dd,0x5e8,0x5ea,0x0,0x5e9,0x5e9,0x5e9,0x5e9,0x5d0,0x5d0, +0x5d0,0x5d1,0x5d2,0x5d3,0x5d4,0x5d5,0x5d6,0x0,0x5d8,0x5d9,0x5da,0x5db,0x5dc,0x0,0x5de,0x0, +0x5e0,0x5e1,0x0,0x5e3,0x5e4,0x0,0x5e6,0x5e7,0x5e8,0x5e9,0x5ea,0x5d5,0x5d1,0x5db,0x5e4,0x5d0, +0x671,0x671,0x67b,0x67b,0x67b,0x0,0x67e,0x67e,0x67e,0x0,0x680,0x680,0x680,0x0,0x67a,0x67a, +0x67a,0x0,0x67f,0x67f,0x67f,0x0,0x679,0x679,0x679,0x0,0x6a4,0x6a4,0x6a4,0x0,0x6a6,0x6a6, +0x6a6,0x0,0x684,0x684,0x684,0x0,0x683,0x683,0x683,0x0,0x686,0x686,0x686,0x0,0x687,0x687, +0x687,0x0,0x68d,0x68d,0x68c,0x68c,0x68e,0x68e,0x688,0x688,0x698,0x698,0x691,0x691,0x6a9,0x6a9, +0x6a9,0x0,0x6af,0x6af,0x6af,0x0,0x6b3,0x6b3,0x6b3,0x0,0x6b1,0x6b1,0x6b1,0x0,0x6ba,0x6ba, +0x6bb,0x6bb,0x6bb,0x0,0x6c0,0x6c0,0x6c1,0x6c1,0x6c1,0x0,0x6be,0x6be,0x6be,0x0,0x6d2,0x6d2, +0x6d3,0x6d3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x6ad,0x6ad,0x6ad,0x0,0x6c7,0x6c7,0x6c6,0x6c6,0x6c8,0x6c8,0x677,0x6cb,0x6cb, +0x6c5,0x6c5,0x6c9,0x6c9,0x6d0,0x6d0,0x6d0,0x0,0x649,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6cc,0x6cc,0x6cc,0x0 +}; +/* +?י ?ײ ?ע ?א ?ד ?ה ?כ ?ל ?ם ?ר ?ת ?ש ?ש ?ש ?ש ?א ?א ?א ?ב ?ג ?ד ?ה ?ו ?ז ?ט ?י ?ך ?כ ?ל ?מ נּ>נ ?ס ?ף ?פ ?צ ?ק ?ר ?ש ?ת ?ו ?ב ?כ ?פ ?א ?ٱ ?ٱ ?ٻ ?ٻ ?ٻ ?پ ?پ ?پ ?ڀ ?ڀ ?ڀ ?ٺ ?ٺ ?ٺ ?ٿ ?ٿ ?ٿ ?ٹ ?ٹ ?ٹ ?ڤ ?ڤ ?ڤ ?ڦ ?ڦ ?ڦ ?ڄ ?ڄ ?ڄ ?ڃ ?ڃ ?ڃ ?چ ?چ ?چ ?ڇ ?ڇ ﮀ>ڇ ?ڍ ?ڍ ?ڌ ?ڌ ?ڎ ?ڎ ?ڈ ?ڈ ?ژ ?ژ ?ڑ ?ڑ ?ک ?ک ?ک ?گ ?گ ?گ ?ڳ ?ڳ ?ڳ ?ڱ ?ڱ ?ڱ ?ں ?ں ?ڻ ?ڻ ?ڻ ?ۀ ?ۀ ?ہ ?ہ ?ہ ?ھ ?ھ ?ھ ?ے ?ے ?ۓ ?ۓ ?ڭ ?ڭ ?ڭ ?ۇ ?ۇ ?ۆ ?ۆ ?ۈ ?ۈ ?ٷ ?ۋ ?ۋ ?ۅ ?ۅ ?ۉ ?ۉ ?ې ?ې ?ې ?ى ?ی ?ی ?ی */ +//0xff 0x10000 +const static u2 table_255[] = { +0x0,0x21,0x0,0x23,0x0,0x25,0x0,0x0,0x28,0x29,0x2a,0x2b,0x0,0x2d,0x0,0x2f, +0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x0,0x3d,0x0,0x3f, +0x0,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, +0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x5b,0x0,0x5d,0x0,0x0, +0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, +0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x30f2,0x30a1,0x30a3,0x30a5,0x30a7,0x30a9,0x30e3,0x30e5,0x30e7,0x30c3, +0x0,0x30a1,0x30a3,0x30a5,0x30a7,0x30a9,0x30ab,0x30ad,0x30af,0x30b1,0x30b3,0x30b5,0x30b7,0x30b9,0x30bb,0x30bd, +0x30bf,0x30c1,0x30c3,0x30c6,0x30c8,0x30ca,0x30cb,0x30cc,0x30cd,0x30ce,0x30cf,0x30d2,0x30d5,0x30d8,0x30db,0x30de, +0x30df,0x30e0,0x30e1,0x30e2,0x30e3,0x30e5,0x30e7,0x30e9,0x30ea,0x30eb,0x30ec,0x30ed,0x30ef,0x30f3,0x0,0x0, +0x3164,0x3131,0x3132,0x3133,0x3134,0x3135,0x3136,0x3137,0x3138,0x3139,0x313a,0x313b,0x313c,0x313d,0x313e,0x313f, +0x3140,0x3141,0x3142,0x3143,0x3144,0x3145,0x3146,0x3147,0x3148,0x3149,0x314a,0x314b,0x314c,0x314d,0x314e,0x0, +0x0,0x0,0x314f,0x3150,0x3151,0x3152,0x3153,0x3154,0x0,0x0,0x3155,0x3156,0x3157,0x3158,0x3159,0x315a, +0x0,0x0,0x315b,0x315c,0x315d,0x315e,0x315f,0x3160,0x0,0x0,0x3161,0x3162,0x3163,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 +}; +/* +?! ?# ?% ?( ?) ?* ?+ ?- ?/ ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 ?: ?; ?= ?? ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z ?[ ?] `>` ?a ?b ?c ?d ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x ?y ?z ?{ ?| ?} ?~ ??????????????????????????????????????????????????タ>????????????????????????????????????????????????????????????????????????????????????????????ㅀ ???????????????????????????????????????????????????????????????????????$ */ +const static u2* table_index[] = { +table_0 , table_1 , table_2 , table_3 , table_4 , table_5 , table_6 , NULL , NULL , table_9 , table_10 , table_11 , NULL , NULL , NULL , NULL , table_16 , NULL , NULL , NULL , NULL , NULL , table_22 , NULL , NULL , NULL , NULL , NULL , NULL , table_29 , table_30 , table_31 , table_32 , table_33 , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , table_44 , NULL , NULL , table_47 , table_48 , table_49 , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , table_164 , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , NULL , table_249 , table_250 , table_251 , NULL , NULL , NULL , table_255 }; diff --git a/coreseek/mmseg-3.2.14/src/dictionary.lo b/coreseek/mmseg-3.2.14/src/dictionary.lo new file mode 100644 index 0000000..f911c96 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/dictionary.lo @@ -0,0 +1,12 @@ +# dictionary.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/dictionary.o' + +# Name of the non-PIC object +non_pic_object='dictionary.o' + diff --git a/coreseek/mmseg-3.2.14/src/dictionary.o b/coreseek/mmseg-3.2.14/src/dictionary.o new file mode 100644 index 0000000..835b5f6 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/dictionary.o differ diff --git a/coreseek/mmseg-3.2.14/src/iniparser.lo b/coreseek/mmseg-3.2.14/src/iniparser.lo new file mode 100644 index 0000000..f9a5ec8 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/iniparser.lo @@ -0,0 +1,12 @@ +# iniparser.lo - a libtool object file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/iniparser.o' + +# Name of the non-PIC object +non_pic_object='iniparser.o' + diff --git a/coreseek/mmseg-3.2.14/src/iniparser.o b/coreseek/mmseg-3.2.14/src/iniparser.o new file mode 100644 index 0000000..3188343 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/iniparser.o differ diff --git a/coreseek/mmseg-3.2.14/src/iniparser/dictionary.c b/coreseek/mmseg-3.2.14/src/iniparser/dictionary.c new file mode 100755 index 0000000..8ae1c01 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/iniparser/dictionary.c @@ -0,0 +1,404 @@ +/*-------------------------------------------------------------------------*/ +/** + @file dictionary.c + @author N. Devillard + @date Sep 2007 + @version $Revision: 1.27 $ + @brief Implements a dictionary for string variables. + + This module implements a simple dictionary object, i.e. a list + of string/string associations. This object is useful to store e.g. + informations retrieved from a configuration file (ini files). +*/ +/*--------------------------------------------------------------------------*/ + +/* + $Id: dictionary.c,v 1.27 2007-11-23 21:39:18 ndevilla Exp $ + $Revision: 1.27 $ +*/ +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ +#include "dictionary.h" + +#include +#include +#include + +/** Maximum value size for integers and doubles. */ +#define MAXVALSZ 1024 + +/** Minimal allocated number of entries in a dictionary */ +#define DICTMINSZ 128 + +/** Invalid key token */ +#define DICT_INVALID_KEY ((char*)-1) + +/*--------------------------------------------------------------------------- + Private functions + ---------------------------------------------------------------------------*/ + +/* Doubles the allocated size associated to a pointer */ +/* 'size' is the current allocated size. */ +static void * mem_double(void * ptr, int size) +{ + void * newptr ; + + newptr = calloc(2*size, 1); + if (newptr==NULL) { + return NULL ; + } + memcpy(newptr, ptr, size); + free(ptr); + return newptr ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Duplicate a string + @param s String to duplicate + @return Pointer to a newly allocated string, to be freed with free() + + This is a replacement for strdup(). This implementation is provided + for systems that do not have it. + */ +/*--------------------------------------------------------------------------*/ +static char * xstrdup(char * s) +{ + char * t ; + if (!s) + return NULL ; + t = malloc(strlen(s)+1) ; + if (t) { + strcpy(t,s); + } + return t ; +} + +/*--------------------------------------------------------------------------- + Function codes + ---------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------*/ +/** + @brief Compute the hash key for a string. + @param key Character string to use for key. + @return 1 unsigned int on at least 32 bits. + + This hash function has been taken from an Article in Dr Dobbs Journal. + This is normally a collision-free function, distributing keys evenly. + The key is stored anyway in the struct so that collision can be avoided + by comparing the key itself in last resort. + */ +/*--------------------------------------------------------------------------*/ +unsigned dictionary_hash(char * key) +{ + int len ; + unsigned hash ; + int i ; + + len = strlen(key); + for (hash=0, i=0 ; i>6) ; + } + hash += (hash <<3); + hash ^= (hash >>11); + hash += (hash <<15); + return hash ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Create a new dictionary object. + @param size Optional initial size of the dictionary. + @return 1 newly allocated dictionary objet. + + This function allocates a new dictionary object of given size and returns + it. If you do not know in advance (roughly) the number of entries in the + dictionary, give size=0. + */ +/*--------------------------------------------------------------------------*/ +dictionary * dictionary_new(int size) +{ + dictionary * d ; + + /* If no size was specified, allocate space for DICTMINSZ */ + if (sizesize = size ; + d->val = (char **)calloc(size, sizeof(char*)); + d->key = (char **)calloc(size, sizeof(char*)); + d->hash = (unsigned int *)calloc(size, sizeof(unsigned)); + return d ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a dictionary object + @param d dictionary object to deallocate. + @return void + + Deallocate a dictionary object and all memory associated to it. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_del(dictionary * d) +{ + int i ; + + if (d==NULL) return ; + for (i=0 ; isize ; i++) { + if (d->key[i]!=NULL) + free(d->key[i]); + if (d->val[i]!=NULL) + free(d->val[i]); + } + free(d->val); + free(d->key); + free(d->hash); + free(d); + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get a value from a dictionary. + @param d dictionary object to search. + @param key Key to look for in the dictionary. + @param def Default value to return if key not found. + @return 1 pointer to internally allocated character string. + + This function locates a key in a dictionary and returns a pointer to its + value, or the passed 'def' pointer if no such key can be found in + dictionary. The returned character pointer points to data internal to the + dictionary object, you should not try to free it or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * dictionary_get(dictionary * d, char * key, char * def) +{ + unsigned hash ; + int i ; + + hash = dictionary_hash(key); + for (i=0 ; isize ; i++) { + if (d->key[i]==NULL) + continue ; + /* Compare hash */ + if (hash==d->hash[i]) { + /* Compare string, to avoid hash collisions */ + if (!strcmp(key, d->key[i])) { + return d->val[i] ; + } + } + } + return def ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Set a value in a dictionary. + @param d dictionary object to modify. + @param key Key to modify or add. + @param val Value to add. + @return int 0 if Ok, anything else otherwise + + If the given key is found in the dictionary, the associated value is + replaced by the provided one. If the key cannot be found in the + dictionary, it is added to it. + + It is Ok to provide a NULL value for val, but NULL values for the dictionary + or the key are considered as errors: the function will return immediately + in such a case. + + Notice that if you dictionary_set a variable to NULL, a call to + dictionary_get will return a NULL value: the variable will be found, and + its value (NULL) is returned. In other words, setting the variable + content to NULL is equivalent to deleting the variable from the + dictionary. It is not possible (in this implementation) to have a key in + the dictionary without value. + + This function returns non-zero in case of failure. + */ +/*--------------------------------------------------------------------------*/ +int dictionary_set(dictionary * d, char * key, char * val) +{ + int i ; + unsigned hash ; + + if (d==NULL || key==NULL) return -1 ; + + /* Compute hash for this key */ + hash = dictionary_hash(key) ; + /* Find if value is already in dictionary */ + if (d->n>0) { + for (i=0 ; isize ; i++) { + if (d->key[i]==NULL) + continue ; + if (hash==d->hash[i]) { /* Same hash value */ + if (!strcmp(key, d->key[i])) { /* Same key */ + /* Found a value: modify and return */ + if (d->val[i]!=NULL) + free(d->val[i]); + d->val[i] = val ? xstrdup(val) : NULL ; + /* Value has been modified: return */ + return 0 ; + } + } + } + } + /* Add a new value */ + /* See if dictionary needs to grow */ + if (d->n==d->size) { + + /* Reached maximum size: reallocate dictionary */ + d->val = (char **)mem_double(d->val, d->size * sizeof(char*)) ; + d->key = (char **)mem_double(d->key, d->size * sizeof(char*)) ; + d->hash = (unsigned int *)mem_double(d->hash, d->size * sizeof(unsigned)) ; + if ((d->val==NULL) || (d->key==NULL) || (d->hash==NULL)) { + /* Cannot grow dictionary */ + return -1 ; + } + /* Double size */ + d->size *= 2 ; + } + + /* Insert key in the first empty slot */ + for (i=0 ; isize ; i++) { + if (d->key[i]==NULL) { + /* Add key here */ + break ; + } + } + /* Copy key */ + d->key[i] = xstrdup(key); + d->val[i] = val ? xstrdup(val) : NULL ; + d->hash[i] = hash; + d->n ++ ; + return 0 ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a key in a dictionary + @param d dictionary object to modify. + @param key Key to remove. + @return void + + This function deletes a key in a dictionary. Nothing is done if the + key cannot be found. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_unset(dictionary * d, char * key) +{ + unsigned hash ; + int i ; + + if (key == NULL) { + return; + } + + hash = dictionary_hash(key); + for (i=0 ; isize ; i++) { + if (d->key[i]==NULL) + continue ; + /* Compare hash */ + if (hash==d->hash[i]) { + /* Compare string, to avoid hash collisions */ + if (!strcmp(key, d->key[i])) { + /* Found key */ + break ; + } + } + } + if (i>=d->size) + /* Key not found */ + return ; + + free(d->key[i]); + d->key[i] = NULL ; + if (d->val[i]!=NULL) { + free(d->val[i]); + d->val[i] = NULL ; + } + d->hash[i] = 0 ; + d->n -- ; + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump + @param f Opened file pointer. + @return void + + Dumps a dictionary onto an opened file pointer. Key pairs are printed out + as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as + output file pointers. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_dump(dictionary * d, FILE * out) +{ + int i ; + + if (d==NULL || out==NULL) return ; + if (d->n<1) { + fprintf(out, "empty dictionary\n"); + return ; + } + for (i=0 ; isize ; i++) { + if (d->key[i]) { + fprintf(out, "%20s\t[%s]\n", + d->key[i], + d->val[i] ? d->val[i] : "UNDEF"); + } + } + return ; +} + + +/* Test code */ +#ifdef TESTDIC +#define NVALS 20000 +int main(int argc, char *argv[]) +{ + dictionary * d ; + char * val ; + int i ; + char cval[90] ; + + /* Allocate dictionary */ + printf("allocating...\n"); + d = dictionary_new(0); + + /* Set values in dictionary */ + printf("setting %d values...\n", NVALS); + for (i=0 ; in != 0) { + printf("error deleting values\n"); + } + printf("deallocating...\n"); + dictionary_del(d); + return 0 ; +} +#endif +/* vim: set ts=4 et sw=4 tw=75 */ diff --git a/coreseek/mmseg-3.2.14/src/iniparser/dictionary.h b/coreseek/mmseg-3.2.14/src/iniparser/dictionary.h new file mode 100755 index 0000000..bbfb661 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/iniparser/dictionary.h @@ -0,0 +1,173 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file dictionary.h + @author N. Devillard + @date Sep 2007 + @version $Revision: 1.12 $ + @brief Implements a dictionary for string variables. + + This module implements a simple dictionary object, i.e. a list + of string/string associations. This object is useful to store e.g. + informations retrieved from a configuration file (ini files). +*/ +/*--------------------------------------------------------------------------*/ + +/* + $Id: dictionary.h,v 1.12 2007-11-23 21:37:00 ndevilla Exp $ + $Author: ndevilla $ + $Date: 2007-11-23 21:37:00 $ + $Revision: 1.12 $ +*/ + +#ifndef _DICTIONARY_H_ +#define _DICTIONARY_H_ + +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ + +#include +#include +#include + +/*--------------------------------------------------------------------------- + New types + ---------------------------------------------------------------------------*/ + + +/*-------------------------------------------------------------------------*/ +/** + @brief Dictionary object + + This object contains a list of string/string associations. Each + association is identified by a unique string key. Looking up values + in the dictionary is speeded up by the use of a (hopefully collision-free) + hash function. + */ +/*-------------------------------------------------------------------------*/ +typedef struct _dictionary_ { + int n ; /** Number of entries in dictionary */ + int size ; /** Storage size */ + char ** val ; /** List of string values */ + char ** key ; /** List of string keys */ + unsigned * hash ; /** List of hash values for keys */ +} dictionary ; + + +/*--------------------------------------------------------------------------- + Function prototypes + ---------------------------------------------------------------------------*/ + +/*-------------------------------------------------------------------------*/ +/** + @brief Compute the hash key for a string. + @param key Character string to use for key. + @return 1 unsigned int on at least 32 bits. + + This hash function has been taken from an Article in Dr Dobbs Journal. + This is normally a collision-free function, distributing keys evenly. + The key is stored anyway in the struct so that collision can be avoided + by comparing the key itself in last resort. + */ +/*--------------------------------------------------------------------------*/ +unsigned dictionary_hash(char * key); + +/*-------------------------------------------------------------------------*/ +/** + @brief Create a new dictionary object. + @param size Optional initial size of the dictionary. + @return 1 newly allocated dictionary objet. + + This function allocates a new dictionary object of given size and returns + it. If you do not know in advance (roughly) the number of entries in the + dictionary, give size=0. + */ +/*--------------------------------------------------------------------------*/ +dictionary * dictionary_new(int size); + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a dictionary object + @param d dictionary object to deallocate. + @return void + + Deallocate a dictionary object and all memory associated to it. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_del(dictionary * vd); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get a value from a dictionary. + @param d dictionary object to search. + @param key Key to look for in the dictionary. + @param def Default value to return if key not found. + @return 1 pointer to internally allocated character string. + + This function locates a key in a dictionary and returns a pointer to its + value, or the passed 'def' pointer if no such key can be found in + dictionary. The returned character pointer points to data internal to the + dictionary object, you should not try to free it or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * dictionary_get(dictionary * d, char * key, char * def); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Set a value in a dictionary. + @param d dictionary object to modify. + @param key Key to modify or add. + @param val Value to add. + @return int 0 if Ok, anything else otherwise + + If the given key is found in the dictionary, the associated value is + replaced by the provided one. If the key cannot be found in the + dictionary, it is added to it. + + It is Ok to provide a NULL value for val, but NULL values for the dictionary + or the key are considered as errors: the function will return immediately + in such a case. + + Notice that if you dictionary_set a variable to NULL, a call to + dictionary_get will return a NULL value: the variable will be found, and + its value (NULL) is returned. In other words, setting the variable + content to NULL is equivalent to deleting the variable from the + dictionary. It is not possible (in this implementation) to have a key in + the dictionary without value. + + This function returns non-zero in case of failure. + */ +/*--------------------------------------------------------------------------*/ +int dictionary_set(dictionary * vd, char * key, char * val); + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete a key in a dictionary + @param d dictionary object to modify. + @param key Key to remove. + @return void + + This function deletes a key in a dictionary. Nothing is done if the + key cannot be found. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_unset(dictionary * d, char * key); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump + @param f Opened file pointer. + @return void + + Dumps a dictionary onto an opened file pointer. Key pairs are printed out + as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as + output file pointers. + */ +/*--------------------------------------------------------------------------*/ +void dictionary_dump(dictionary * d, FILE * out); + +#endif diff --git a/coreseek/mmseg-3.2.14/src/iniparser/iniparser.c b/coreseek/mmseg-3.2.14/src/iniparser/iniparser.c new file mode 100755 index 0000000..9b3304f --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/iniparser/iniparser.c @@ -0,0 +1,649 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file iniparser.c + @author N. Devillard + @date Sep 2007 + @version 3.0 + @brief Parser for ini files. +*/ +/*--------------------------------------------------------------------------*/ +/* + $Id: iniparser.c,v 2.18 2008-01-03 18:35:39 ndevilla Exp $ + $Revision: 2.18 $ + $Date: 2008-01-03 18:35:39 $ +*/ +/*---------------------------- Includes ------------------------------------*/ +#include +#include +#include + +#include "iniparser.h" + +/*---------------------------- Defines -------------------------------------*/ +#define ASCIILINESZ (1024) +#define INI_INVALID_KEY ((char*)-1) + +/*--------------------------------------------------------------------------- + Private to this module + ---------------------------------------------------------------------------*/ +/** + * This enum stores the status for each parsed line (internal use only). + */ +typedef enum _line_status_ { + LINE_UNPROCESSED, + LINE_ERROR, + LINE_EMPTY, + LINE_COMMENT, + LINE_SECTION, + LINE_VALUE +} line_status ; + +/*-------------------------------------------------------------------------*/ +/** + @brief Convert a string to lowercase. + @param s String to convert. + @return ptr to statically allocated string. + + This function returns a pointer to a statically allocated string + containing a lowercased version of the input string. Do not free + or modify the returned string! Since the returned string is statically + allocated, it will be modified at each function call (not re-entrant). + */ +/*--------------------------------------------------------------------------*/ +static char * strlwc(const char * s) +{ + static char l[ASCIILINESZ+1]; + int i ; + + if (s==NULL) return NULL ; + memset(l, 0, ASCIILINESZ+1); + i=0 ; + while (s[i] && i l) { + if (!isspace((int)*(last-1))) + break ; + last -- ; + } + *last = (char)0; + return (char*)l ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get number of sections in a dictionary + @param d Dictionary to examine + @return int Number of sections found in dictionary + + This function returns the number of sections found in a dictionary. + The test to recognize sections is done on the string stored in the + dictionary: a section name is given as "section" whereas a key is + stored as "section:key", thus the test looks for entries that do not + contain a colon. + + This clearly fails in the case a section name contains a colon, but + this should simply be avoided. + + This function returns -1 in case of error. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getnsec(dictionary * d) +{ + int i ; + int nsec ; + + if (d==NULL) return -1 ; + nsec=0 ; + for (i=0 ; isize ; i++) { + if (d->key[i]==NULL) + continue ; + if (strchr(d->key[i], ':')==NULL) { + nsec ++ ; + } + } + return nsec ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get name for section n in a dictionary. + @param d Dictionary to examine + @param n Section number (from 0 to nsec-1). + @return Pointer to char string + + This function locates the n-th section in a dictionary and returns + its name as a pointer to a string statically allocated inside the + dictionary. Do not free or modify the returned string! + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getsecname(dictionary * d, int n) +{ + int i ; + int foundsec ; + + if (d==NULL || n<0) return NULL ; + foundsec=0 ; + for (i=0 ; isize ; i++) { + if (d->key[i]==NULL) + continue ; + if (strchr(d->key[i], ':')==NULL) { + foundsec++ ; + if (foundsec>n) + break ; + } + } + if (foundsec<=n) { + return NULL ; + } + return d->key[i] ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump. + @param f Opened file pointer to dump to. + @return void + + This function prints out the contents of a dictionary, one element by + line, onto the provided file pointer. It is OK to specify @c stderr + or @c stdout as output files. This function is meant for debugging + purposes mostly. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump(dictionary * d, FILE * f) +{ + int i ; + + if (d==NULL || f==NULL) return ; + for (i=0 ; isize ; i++) { + if (d->key[i]==NULL) + continue ; + if (d->val[i]!=NULL) { + fprintf(f, "[%s]=[%s]\n", d->key[i], d->val[i]); + } else { + fprintf(f, "[%s]=UNDEF\n", d->key[i]); + } + } + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary to a loadable ini file + @param d Dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given dictionary into a loadable ini file. + It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump_ini(dictionary * d, FILE * f) +{ + int i, j ; + char keym[ASCIILINESZ+1]; + int nsec ; + char * secname ; + int seclen ; + + if (d==NULL || f==NULL) return ; + + nsec = iniparser_getnsec(d); + if (nsec<1) { + /* No section in file: dump all keys as they are */ + for (i=0 ; isize ; i++) { + if (d->key[i]==NULL) + continue ; + fprintf(f, "%s = %s\n", d->key[i], d->val[i]); + } + return ; + } + for (i=0 ; isize ; j++) { + if (d->key[j]==NULL) + continue ; + if (!strncmp(d->key[j], keym, seclen+1)) { + fprintf(f, + "%-30s = %s\n", + d->key[j]+seclen+1, + d->val[j] ? d->val[j] : ""); + } + } + } + fprintf(f, "\n"); + return ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key + @param d Dictionary to search + @param key Key string to look for + @param def Default value to return if key not found. + @return pointer to statically allocated character string + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the pointer passed as 'def' is returned. + The returned char pointer is pointing to a string allocated in + the dictionary, do not free or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getstring(dictionary * d, const char * key, char * def) +{ + char * lc_key ; + char * sval ; + + if (d==NULL || key==NULL) + return def ; + + lc_key = strlwc(key); + sval = dictionary_get(d, lc_key, def); + return sval ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to an int + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + Supported values for integers include the usual C notation + so decimal, octal (starting with 0) and hexadecimal (starting with 0x) + are supported. Examples: + + "42" -> 42 + "042" -> 34 (octal -> decimal) + "0x42" -> 66 (hexa -> decimal) + + Warning: the conversion may overflow in various ways. Conversion is + totally outsourced to strtol(), see the associated man page for overflow + handling. + + Credits: Thanks to A. Becker for suggesting strtol() + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getint(dictionary * d, const char * key, int notfound) +{ + char * str ; + + str = iniparser_getstring(d, key, INI_INVALID_KEY); + if (str==INI_INVALID_KEY) return notfound ; + return (int)strtol(str, NULL, 0); +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a double + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return double + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + */ +/*--------------------------------------------------------------------------*/ +double iniparser_getdouble(dictionary * d, char * key, double notfound) +{ + char * str ; + + str = iniparser_getstring(d, key, INI_INVALID_KEY); + if (str==INI_INVALID_KEY) return notfound ; + return atof(str); +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a boolean + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + A true boolean is found if one of the following is matched: + + - A string starting with 'y' + - A string starting with 'Y' + - A string starting with 't' + - A string starting with 'T' + - A string starting with '1' + + A false boolean is found if one of the following is matched: + + - A string starting with 'n' + - A string starting with 'N' + - A string starting with 'f' + - A string starting with 'F' + - A string starting with '0' + + The notfound value returned if no boolean is identified, does not + necessarily have to be 0 or 1. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getboolean(dictionary * d, const char * key, int notfound) +{ + char * c ; + int ret ; + + c = iniparser_getstring(d, key, INI_INVALID_KEY); + if (c==INI_INVALID_KEY) return notfound ; + if (c[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') { + ret = 1 ; + } else if (c[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') { + ret = 0 ; + } else { + ret = notfound ; + } + return ret; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Finds out if a given entry exists in a dictionary + @param ini Dictionary to search + @param entry Name of the entry to look for + @return integer 1 if entry exists, 0 otherwise + + Finds out if a given entry exists in the dictionary. Since sections + are stored as keys with NULL associated values, this is the only way + of querying for the presence of sections in a dictionary. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_find_entry( + dictionary * ini, + char * entry +) +{ + int found=0 ; + if (iniparser_getstring(ini, entry, INI_INVALID_KEY)!=INI_INVALID_KEY) { + found = 1 ; + } + return found ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Set an entry in a dictionary. + @param ini Dictionary to modify. + @param entry Entry to modify (entry name) + @param val New value to associate to the entry. + @return int 0 if Ok, -1 otherwise. + + If the given entry can be found in the dictionary, it is modified to + contain the provided value. If it cannot be found, -1 is returned. + It is Ok to set val to NULL. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_set(dictionary * ini, char * entry, char * val) +{ + return dictionary_set(ini, strlwc(entry), val) ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete an entry in a dictionary + @param ini Dictionary to modify + @param entry Entry to delete (entry name) + @return void + + If the given entry can be found, it is deleted from the dictionary. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_unset(dictionary * ini, char * entry) +{ + dictionary_unset(ini, strlwc(entry)); +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Load a single line from an INI file + @param input_line Input line, may be concatenated multi-line input + @param section Output space to store section + @param key Output space to store key + @param value Output space to store value + @return line_status value + */ +/*--------------------------------------------------------------------------*/ +static line_status iniparser_line( + char * input_line, + char * section, + char * key, + char * value) +{ + line_status sta ; + char line[ASCIILINESZ+1]; + int len ; + + strcpy(line, strstrip(input_line)); + len = (int)strlen(line); + + sta = LINE_UNPROCESSED ; + if (len<1) { + /* Empty line */ + sta = LINE_EMPTY ; + } else if (line[0]=='#') { + /* Comment line */ + sta = LINE_COMMENT ; + } else if (line[0]=='[' && line[len-1]==']') { + /* Section name */ + sscanf(line, "[%[^]]", section); + strcpy(section, strstrip(section)); + strcpy(section, strlwc(section)); + sta = LINE_SECTION ; + } else if (sscanf (line, "%[^=] = \"%[^\"]\"", key, value) == 2 + || sscanf (line, "%[^=] = '%[^\']'", key, value) == 2 + || sscanf (line, "%[^=] = %[^;#]", key, value) == 2) { + /* Usual key=value, with or without comments */ + strcpy(key, strstrip(key)); + strcpy(key, strlwc(key)); + strcpy(value, strstrip(value)); + /* + * sscanf cannot handle '' or "" as empty values + * this is done here + */ + if (!strcmp(value, "\"\"") || (!strcmp(value, "''"))) { + value[0]=0 ; + } + sta = LINE_VALUE ; + } else if (sscanf(line, "%[^=] = %[;#]", key, value)==2 + || sscanf(line, "%[^=] %[=]", key, value) == 2) { + /* + * Special cases: + * key= + * key=; + * key=# + */ + strcpy(key, strstrip(key)); + strcpy(key, strlwc(key)); + value[0]=0 ; + sta = LINE_VALUE ; + } else { + /* Generate syntax error */ + sta = LINE_ERROR ; + } + return sta ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Parse an ini file and return an allocated dictionary object + @param ininame Name of the ini file to read. + @return Pointer to newly allocated dictionary + + This is the parser for ini files. This function is called, providing + the name of the file to be read. It returns a dictionary object that + should not be accessed directly, but through accessor functions + instead. + + The returned dictionary must be freed using iniparser_freedict(). + */ +/*--------------------------------------------------------------------------*/ +dictionary * iniparser_load(const char * ininame) +{ + FILE * in ; + + char line [ASCIILINESZ+1] ; + char section [ASCIILINESZ+1] ; + char key [ASCIILINESZ+1] ; + char tmp [ASCIILINESZ+1] ; + char val [ASCIILINESZ+1] ; + + int last=0 ; + int len ; + int lineno=0 ; + int errs=0; + + dictionary * dict ; + + if ((in=fopen(ininame, "r"))==NULL) { + fprintf(stderr, "iniparser: cannot open %s\n", ininame); + return NULL ; + } + + dict = dictionary_new(0) ; + if (!dict) { + fclose(in); + return NULL ; + } + + memset(line, 0, ASCIILINESZ); + memset(section, 0, ASCIILINESZ); + memset(key, 0, ASCIILINESZ); + memset(val, 0, ASCIILINESZ); + last=0 ; + + while (fgets(line+last, ASCIILINESZ-last, in)!=NULL) { + lineno++ ; + len = (int)strlen(line)-1; + /* Safety check against buffer overflows */ + if (line[len]!='\n') { + fprintf(stderr, + "iniparser: input line too long in %s (%d)\n", + ininame, + lineno); + dictionary_del(dict); + fclose(in); + return NULL ; + } + /* Get rid of \n and spaces at end of line */ + while ((len>=0) && + ((line[len]=='\n') || (isspace(line[len])))) { + line[len]=0 ; + len-- ; + } + /* Detect multi-line */ + if (line[len]=='\\') { + /* Multi-line value */ + last=len ; + continue ; + } else { + last=0 ; + } + switch (iniparser_line(line, section, key, val)) { + case LINE_EMPTY: + case LINE_COMMENT: + break ; + + case LINE_SECTION: + errs = dictionary_set(dict, section, NULL); + break ; + + case LINE_VALUE: + sprintf(tmp, "%s:%s", section, key); + errs = dictionary_set(dict, tmp, val) ; + break ; + + case LINE_ERROR: + fprintf(stderr, "iniparser: syntax error in %s (%d):\n", + ininame, + lineno); + fprintf(stderr, "-> %s\n", line); + errs++ ; + break; + + default: + break ; + } + memset(line, 0, ASCIILINESZ); + last=0; + if (errs<0) { + fprintf(stderr, "iniparser: memory allocation failure\n"); + break ; + } + } + if (errs) { + dictionary_del(dict); + dict = NULL ; + } + fclose(in); + return dict ; +} + +/*-------------------------------------------------------------------------*/ +/** + @brief Free all memory associated to an ini dictionary + @param d Dictionary to free + @return void + + Free all memory associated to an ini dictionary. + It is mandatory to call this function before the dictionary object + gets out of the current context. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_freedict(dictionary * d) +{ + dictionary_del(d); +} + +/* vim: set ts=4 et sw=4 tw=75 */ diff --git a/coreseek/mmseg-3.2.14/src/iniparser/iniparser.h b/coreseek/mmseg-3.2.14/src/iniparser/iniparser.h new file mode 100755 index 0000000..be3c667 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/iniparser/iniparser.h @@ -0,0 +1,280 @@ + +/*-------------------------------------------------------------------------*/ +/** + @file iniparser.h + @author N. Devillard + @date Sep 2007 + @version 3.0 + @brief Parser for ini files. +*/ +/*--------------------------------------------------------------------------*/ + +/* + $Id: iniparser.h,v 1.24 2007-11-23 21:38:19 ndevilla Exp $ + $Revision: 1.24 $ +*/ + +#ifndef _INIPARSER_H_ +#define _INIPARSER_H_ + +/*--------------------------------------------------------------------------- + Includes + ---------------------------------------------------------------------------*/ + +#include +#include +#include + +/* + * The following #include is necessary on many Unixes but not Linux. + * It is not needed for Windows platforms. + * Uncomment it if needed. + */ +/* #include */ + +#include "dictionary.h" + +/*--------------------------------------------------------------------------- + Macros + ---------------------------------------------------------------------------*/ +/** For backwards compatibility only */ +#define iniparser_getstr(d, k) iniparser_getstring(d, k, NULL) +#define iniparser_setstr iniparser_setstring + +/*-------------------------------------------------------------------------*/ +/** + @brief Get number of sections in a dictionary + @param d Dictionary to examine + @return int Number of sections found in dictionary + + This function returns the number of sections found in a dictionary. + The test to recognize sections is done on the string stored in the + dictionary: a section name is given as "section" whereas a key is + stored as "section:key", thus the test looks for entries that do not + contain a colon. + + This clearly fails in the case a section name contains a colon, but + this should simply be avoided. + + This function returns -1 in case of error. + */ +/*--------------------------------------------------------------------------*/ + +int iniparser_getnsec(dictionary * d); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Get name for section n in a dictionary. + @param d Dictionary to examine + @param n Section number (from 0 to nsec-1). + @return Pointer to char string + + This function locates the n-th section in a dictionary and returns + its name as a pointer to a string statically allocated inside the + dictionary. Do not free or modify the returned string! + + This function returns NULL in case of error. + */ +/*--------------------------------------------------------------------------*/ + +char * iniparser_getsecname(dictionary * d, int n); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Save a dictionary to a loadable ini file + @param d Dictionary to dump + @param f Opened file pointer to dump to + @return void + + This function dumps a given dictionary into a loadable ini file. + It is Ok to specify @c stderr or @c stdout as output files. + */ +/*--------------------------------------------------------------------------*/ + +void iniparser_dump_ini(dictionary * d, FILE * f); + +/*-------------------------------------------------------------------------*/ +/** + @brief Dump a dictionary to an opened file pointer. + @param d Dictionary to dump. + @param f Opened file pointer to dump to. + @return void + + This function prints out the contents of a dictionary, one element by + line, onto the provided file pointer. It is OK to specify @c stderr + or @c stdout as output files. This function is meant for debugging + purposes mostly. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_dump(dictionary * d, FILE * f); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key + @param d Dictionary to search + @param key Key string to look for + @param def Default value to return if key not found. + @return pointer to statically allocated character string + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the pointer passed as 'def' is returned. + The returned char pointer is pointing to a string allocated in + the dictionary, do not free or modify it. + */ +/*--------------------------------------------------------------------------*/ +char * iniparser_getstring(dictionary * d, const char * key, char * def); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to an int + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + Supported values for integers include the usual C notation + so decimal, octal (starting with 0) and hexadecimal (starting with 0x) + are supported. Examples: + + - "42" -> 42 + - "042" -> 34 (octal -> decimal) + - "0x42" -> 66 (hexa -> decimal) + + Warning: the conversion may overflow in various ways. Conversion is + totally outsourced to strtol(), see the associated man page for overflow + handling. + + Credits: Thanks to A. Becker for suggesting strtol() + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getint(dictionary * d, const char * key, int notfound); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a double + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return double + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + */ +/*--------------------------------------------------------------------------*/ +double iniparser_getdouble(dictionary * d, char * key, double notfound); + +/*-------------------------------------------------------------------------*/ +/** + @brief Get the string associated to a key, convert to a boolean + @param d Dictionary to search + @param key Key string to look for + @param notfound Value to return in case of error + @return integer + + This function queries a dictionary for a key. A key as read from an + ini file is given as "section:key". If the key cannot be found, + the notfound value is returned. + + A true boolean is found if one of the following is matched: + + - A string starting with 'y' + - A string starting with 'Y' + - A string starting with 't' + - A string starting with 'T' + - A string starting with '1' + + A false boolean is found if one of the following is matched: + + - A string starting with 'n' + - A string starting with 'N' + - A string starting with 'f' + - A string starting with 'F' + - A string starting with '0' + + The notfound value returned if no boolean is identified, does not + necessarily have to be 0 or 1. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_getboolean(dictionary * d, const char * key, int notfound); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Set an entry in a dictionary. + @param ini Dictionary to modify. + @param entry Entry to modify (entry name) + @param val New value to associate to the entry. + @return int 0 if Ok, -1 otherwise. + + If the given entry can be found in the dictionary, it is modified to + contain the provided value. If it cannot be found, -1 is returned. + It is Ok to set val to NULL. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_setstring(dictionary * ini, char * entry, char * val); + + +/*-------------------------------------------------------------------------*/ +/** + @brief Delete an entry in a dictionary + @param ini Dictionary to modify + @param entry Entry to delete (entry name) + @return void + + If the given entry can be found, it is deleted from the dictionary. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_unset(dictionary * ini, char * entry); + +/*-------------------------------------------------------------------------*/ +/** + @brief Finds out if a given entry exists in a dictionary + @param ini Dictionary to search + @param entry Name of the entry to look for + @return integer 1 if entry exists, 0 otherwise + + Finds out if a given entry exists in the dictionary. Since sections + are stored as keys with NULL associated values, this is the only way + of querying for the presence of sections in a dictionary. + */ +/*--------------------------------------------------------------------------*/ +int iniparser_find_entry(dictionary * ini, char * entry) ; + +/*-------------------------------------------------------------------------*/ +/** + @brief Parse an ini file and return an allocated dictionary object + @param ininame Name of the ini file to read. + @return Pointer to newly allocated dictionary + + This is the parser for ini files. This function is called, providing + the name of the file to be read. It returns a dictionary object that + should not be accessed directly, but through accessor functions + instead. + + The returned dictionary must be freed using iniparser_freedict(). + */ +/*--------------------------------------------------------------------------*/ +dictionary * iniparser_load(const char * ininame); + +/*-------------------------------------------------------------------------*/ +/** + @brief Free all memory associated to an ini dictionary + @param d Dictionary to free + @return void + + Free all memory associated to an ini dictionary. + It is mandatory to call this function before the dictionary object + gets out of the current context. + */ +/*--------------------------------------------------------------------------*/ +void iniparser_freedict(dictionary * d); + +#endif diff --git a/coreseek/mmseg-3.2.14/src/libmmseg.la b/coreseek/mmseg-3.2.14/src/libmmseg.la new file mode 100644 index 0000000..8d58e39 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/libmmseg.la @@ -0,0 +1,41 @@ +# libmmseg.la - a libtool library file +# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='' + +# Names of this library. +library_names='' + +# The name of the static archive. +old_library='libmmseg.a' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='' + +# Libraries that this one depends upon. +dependency_libs='' + +# Names of additional weak libraries provided by this library +weak_library_names='' + +# Version information for libmmseg. +current=0 +age=0 +revision=0 + +# Is this an already installed library? +installed=no + +# Should we warn about portability when linking against -modules? +shouldnotlink=no + +# Files to dlopen/dlpreopen +dlopen='' +dlpreopen='' + +# Directory that this library needs to be installed in: +libdir='/usr/local/lib' diff --git a/coreseek/mmseg-3.2.14/src/mk_dist.bat b/coreseek/mmseg-3.2.14/src/mk_dist.bat new file mode 100755 index 0000000..a69cd74 --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/mk_dist.bat @@ -0,0 +1,10 @@ +md include +copy *.h include\ +copy css\*.h include\ +copy utils\*.h include\ +md lib +md lib\debug +md lib\release +copy win32\release\*.lib lib\release\ +copy win32\debug\*.lib lib\debug\ +copy win32\release\*.lib lib\ diff --git a/coreseek/mmseg-3.2.14/src/mmseg b/coreseek/mmseg-3.2.14/src/mmseg new file mode 100755 index 0000000..118c812 Binary files /dev/null and b/coreseek/mmseg-3.2.14/src/mmseg differ diff --git a/coreseek/mmseg-3.2.14/src/mmseg_main.cpp b/coreseek/mmseg-3.2.14/src/mmseg_main.cpp new file mode 100755 index 0000000..6f2a50e --- /dev/null +++ b/coreseek/mmseg-3.2.14/src/mmseg_main.cpp @@ -0,0 +1,311 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** +* Version: GPL 2.0 +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License. You should have +* received a copy of the GPL license along with this program; if you +* did not, you can find it at http://www.gnu.org/ +* +* Software distributed under the License is distributed on an "AS IS" basis, +* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +* for the specific language governing rights and limitations under the +* License. +* +* The Original Code is Coreseek.com code. +* +* Copyright (C) 2007-2008. All Rights Reserved. +* +* Author: +* Li monan +* +* ***** END LICENSE BLOCK ***** */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef WIN32 +#include "bsd_getopt_win.h" +#else +#include "bsd_getopt.h" +#endif + +#include "UnigramCorpusReader.h" +#include "UnigramDict.h" +#include "SynonymsDict.h" +#include "ThesaurusDict.h" +#include "SegmenterManager.h" +#include "Segmenter.h" +#include "csr_utils.h" + +using namespace std; +using namespace css; + +#define SEGMENT_OUTPUT 1 + +void usage(const char* argv_0) { + printf("Coreseek COS(tm) MM Segment 1.0\n"); + printf("Copyright By Coreseek.com All Right Reserved.\n"); + printf("Usage: %s